From 196449e5c31d00088884afc2842df2e19bfbe0bb Mon Sep 17 00:00:00 2001 From: Brent Atkinson Date: Mon, 12 Jan 2015 15:06:11 -0500 Subject: [PATCH 001/603] Moved rom deletion to gamelist, fixed halt on removal. --- es-app/src/guis/GuiGamelistOptions.cpp | 5 +---- .../src/views/gamelist/BasicGameListView.cpp | 22 +++++++++++++++++++ es-app/src/views/gamelist/BasicGameListView.h | 1 + es-app/src/views/gamelist/IGameListView.h | 1 + 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 635f97e19b..95fceef8e7 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -75,10 +75,7 @@ void GuiGamelistOptions::openMetaDataEd() p.system = file->getSystem(); mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), std::bind(&IGameListView::onFileChanged, getGamelist(), file, FILE_METADATA_CHANGED), [this, file] { - boost::filesystem::remove(file->getPath()); //actually delete the file on the filesystem - file->getParent()->removeChild(file); //unlink it so list repopulations triggered from onFileChanged won't see it - getGamelist()->onFileChanged(file, FILE_REMOVED); //tell the view - delete file; //free it + getGamelist()->remove(file); })); } diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index af4ccbfe4d..d3cbc017a1 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -86,6 +86,28 @@ void BasicGameListView::launch(FileData* game) ViewController::get()->launch(game); } +void BasicGameListView::remove(FileData *game) +{ + boost::filesystem::remove(game->getPath()); // actually delete the file on the filesystem + if (getCursor() == game) // Select next element in list, or prev if none + { + std::vector siblings = game->getParent()->getChildren(); + auto gameIter = std::find(siblings.begin(), siblings.end(), game); + auto gamePos = std::distance(siblings.begin(), gameIter); + if (gameIter != siblings.end()) + { + if ((gamePos + 1) < siblings.size()) + { + setCursor(siblings.at(gamePos + 1)); + } else if ((gamePos - 1) > 0) { + setCursor(siblings.at(gamePos - 1)); + } + } + } + delete game; // remove before repopulating (removes from parent) + onFileChanged(game, FILE_REMOVED); // update the view, with game removed +} + std::vector BasicGameListView::getHelpPrompts() { std::vector prompts; diff --git a/es-app/src/views/gamelist/BasicGameListView.h b/es-app/src/views/gamelist/BasicGameListView.h index 23145f5cb9..a1bf0b5d6f 100644 --- a/es-app/src/views/gamelist/BasicGameListView.h +++ b/es-app/src/views/gamelist/BasicGameListView.h @@ -23,6 +23,7 @@ class BasicGameListView : public ISimpleGameListView protected: virtual void populateList(const std::vector& files) override; virtual void launch(FileData* game) override; + virtual void remove(FileData* game) override; TextListComponent mList; }; diff --git a/es-app/src/views/gamelist/IGameListView.h b/es-app/src/views/gamelist/IGameListView.h index 6f9ef054d4..ec98a9de97 100644 --- a/es-app/src/views/gamelist/IGameListView.h +++ b/es-app/src/views/gamelist/IGameListView.h @@ -32,6 +32,7 @@ class IGameListView : public GuiComponent virtual void setCursor(FileData*) = 0; virtual bool input(InputConfig* config, Input input) override; + virtual void remove(FileData* game) = 0; virtual const char* getName() const = 0; From 65f2409d9162a74bd8eaed979919883a5cd1e6bd Mon Sep 17 00:00:00 2001 From: Florian Date: Sun, 19 Apr 2015 11:57:10 +0200 Subject: [PATCH 002/603] CHG: Additional input types, user-defined input config scripts --- data/ResourceUtil.cpp | 146 +- data/Resources.h | 143 +- data/converted/arrow_svg.cpp | 168 +- data/converted/busy_0_svg.cpp | 241 +- data/converted/busy_1_svg.cpp | 249 +- data/converted/busy_2_svg.cpp | 249 +- data/converted/busy_3_svg.cpp | 247 +- data/converted/button_filled_png.cpp | 1 + data/converted/button_png.cpp | 1 + data/converted/checkbox_checked_svg.cpp | 253 +- data/converted/checkbox_unchecked_svg.cpp | 170 +- data/converted/fav_add_svg.cpp | 122 +- data/converted/fav_remove_svg.cpp | 112 +- data/converted/frame_png.cpp | 1 + data/converted/help_analog_down_svg.cpp | 289 ++ data/converted/help_analog_left_svg.cpp | 292 ++ data/converted/help_analog_right_svg.cpp | 290 ++ data/converted/help_analog_thumb_svg.cpp | 298 ++ data/converted/help_analog_up_svg.cpp | 294 ++ data/converted/help_button_a_svg.cpp | 195 +- data/converted/help_button_b_svg.cpp | 279 +- data/converted/help_button_l_svg.cpp | 204 +- data/converted/help_button_r_svg.cpp | 243 +- data/converted/help_button_select_svg.cpp | 370 +- data/converted/help_button_start_svg.cpp | 334 +- data/converted/help_button_x_svg.cpp | 191 +- data/converted/help_button_y_svg.cpp | 184 +- data/converted/help_dpad_all_svg.cpp | 641 ++-- data/converted/help_dpad_down_svg.cpp | 560 ++- data/converted/help_dpad_left_svg.cpp | 568 ++- data/converted/help_dpad_leftright_svg.cpp | 581 ++- data/converted/help_dpad_right_svg.cpp | 572 ++- data/converted/help_dpad_up_svg.cpp | 568 ++- data/converted/help_dpad_updown_svg.cpp | 585 ++- data/converted/off_svg.cpp | 242 +- data/converted/on_svg.cpp | 204 +- .../opensans_hebrew_condensed_light_ttf.cpp | 1 + .../opensans_hebrew_condensed_regular_ttf.cpp | 1 + data/converted/option_arrow_svg.cpp | 168 +- data/converted/scroll_gradient_png.cpp | 1 + data/converted/slider_knob_svg.cpp | 124 +- data/converted/splash_svg.cpp | 3240 ++++++++--------- data/converted/star_filled_svg.cpp | 214 +- data/converted/star_unfilled_svg.cpp | 356 +- .../textinput_ninepatch_active_png.cpp | 1 + data/converted/textinput_ninepatch_png.cpp | 1 + data/converted/window_icon_256_png.cpp | 1 + data/resources/help/analog_down.svg | 15 + data/resources/help/analog_left.svg | 17 + data/resources/help/analog_right.svg | 15 + data/resources/help/analog_thumb.svg | 13 + data/resources/help/analog_up.svg | 17 + es-core/CMakeLists.txt | 5 + es-core/src/InputManager.cpp | 128 +- es-core/src/InputManager.h | 2 + es-core/src/components/ComponentList.cpp | 4 +- es-core/src/components/DateTimeComponent.cpp | 4 +- es-core/src/guis/GuiInputConfig.cpp | 131 +- es-core/src/guis/GuiInputConfig.h | 3 + 59 files changed, 8130 insertions(+), 6419 deletions(-) create mode 100644 data/converted/help_analog_down_svg.cpp create mode 100644 data/converted/help_analog_left_svg.cpp create mode 100644 data/converted/help_analog_right_svg.cpp create mode 100644 data/converted/help_analog_thumb_svg.cpp create mode 100644 data/converted/help_analog_up_svg.cpp create mode 100644 data/resources/help/analog_down.svg create mode 100644 data/resources/help/analog_left.svg create mode 100644 data/resources/help/analog_right.svg create mode 100644 data/resources/help/analog_thumb.svg create mode 100644 data/resources/help/analog_up.svg diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 910ac2cb83..48b92defe1 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,91 +2,101 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 40; +const size_t res2hNrOfFiles = 45; const Res2hEntry res2hFiles[res2hNrOfFiles] = { - {":/arrow.svg", arrow_svg_size, arrow_svg_data}, - {":/busy_0.svg", busy_0_svg_size, busy_0_svg_data}, - {":/busy_1.svg", busy_1_svg_size, busy_1_svg_data}, - {":/busy_2.svg", busy_2_svg_size, busy_2_svg_data}, - {":/busy_3.svg", busy_3_svg_size, busy_3_svg_data}, - {":/button.png", button_png_size, button_png_data}, + {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, + {":/star_filled.svg", star_filled_svg_size, star_filled_svg_data}, + {":/window_icon_256.png", window_icon_256_png_size, window_icon_256_png_data}, + {":/off.svg", off_svg_size, off_svg_data}, {":/button_filled.png", button_filled_png_size, button_filled_png_data}, - {":/checkbox_checked.svg", checkbox_checked_svg_size, checkbox_checked_svg_data}, {":/checkbox_unchecked.svg", checkbox_unchecked_svg_size, checkbox_unchecked_svg_data}, - {":/fav_add.svg", fav_add_svg_size, fav_add_svg_data}, - {":/fav_remove.svg", fav_remove_svg_size, fav_remove_svg_data}, - {":/frame.png", frame_png_size, frame_png_data}, - {":/off.svg", off_svg_size, off_svg_data}, + {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, {":/on.svg", on_svg_size, on_svg_data}, + {":/busy_3.svg", busy_3_svg_size, busy_3_svg_data}, {":/opensans_hebrew_condensed_light.ttf", opensans_hebrew_condensed_light_ttf_size, opensans_hebrew_condensed_light_ttf_data}, - {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, + {":/checkbox_checked.svg", checkbox_checked_svg_size, checkbox_checked_svg_data}, + {":/textinput_ninepatch.png", textinput_ninepatch_png_size, textinput_ninepatch_png_data}, {":/option_arrow.svg", option_arrow_svg_size, option_arrow_svg_data}, - {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, - {":/slider_knob.svg", slider_knob_svg_size, slider_knob_svg_data}, + {":/textinput_ninepatch_active.png", textinput_ninepatch_active_png_size, textinput_ninepatch_active_png_data}, {":/splash.svg", splash_svg_size, splash_svg_data}, - {":/star_filled.svg", star_filled_svg_size, star_filled_svg_data}, + {":/frame.png", frame_png_size, frame_png_data}, + {":/slider_knob.svg", slider_knob_svg_size, slider_knob_svg_data}, + {":/button.png", button_png_size, button_png_data}, + {":/busy_1.svg", busy_1_svg_size, busy_1_svg_data}, + {":/fav_remove.svg", fav_remove_svg_size, fav_remove_svg_data}, + {":/arrow.svg", arrow_svg_size, arrow_svg_data}, {":/star_unfilled.svg", star_unfilled_svg_size, star_unfilled_svg_data}, - {":/textinput_ninepatch.png", textinput_ninepatch_png_size, textinput_ninepatch_png_data}, - {":/textinput_ninepatch_active.png", textinput_ninepatch_active_png_size, textinput_ninepatch_active_png_data}, - {":/window_icon_256.png", window_icon_256_png_size, window_icon_256_png_data}, + {":/busy_2.svg", busy_2_svg_size, busy_2_svg_data}, + {":/busy_0.svg", busy_0_svg_size, busy_0_svg_data}, + {":/fav_add.svg", fav_add_svg_size, fav_add_svg_data}, + {":/help/dpad_leftright.svg", help_dpad_leftright_svg_size, help_dpad_leftright_svg_data}, + {":/help/dpad_all.svg", help_dpad_all_svg_size, help_dpad_all_svg_data}, + {":/help/button_x.svg", help_button_x_svg_size, help_button_x_svg_data}, {":/help/button_a.svg", help_button_a_svg_size, help_button_a_svg_data}, - {":/help/button_b.svg", help_button_b_svg_size, help_button_b_svg_data}, {":/help/button_l.svg", help_button_l_svg_size, help_button_l_svg_data}, - {":/help/button_r.svg", help_button_r_svg_size, help_button_r_svg_data}, - {":/help/button_select.svg", help_button_select_svg_size, help_button_select_svg_data}, - {":/help/button_start.svg", help_button_start_svg_size, help_button_start_svg_data}, - {":/help/button_x.svg", help_button_x_svg_size, help_button_x_svg_data}, - {":/help/button_y.svg", help_button_y_svg_size, help_button_y_svg_data}, - {":/help/dpad_all.svg", help_dpad_all_svg_size, help_dpad_all_svg_data}, {":/help/dpad_down.svg", help_dpad_down_svg_size, help_dpad_down_svg_data}, + {":/help/analog_up.svg", help_analog_up_svg_size, help_analog_up_svg_data}, {":/help/dpad_left.svg", help_dpad_left_svg_size, help_dpad_left_svg_data}, - {":/help/dpad_leftright.svg", help_dpad_leftright_svg_size, help_dpad_leftright_svg_data}, - {":/help/dpad_right.svg", help_dpad_right_svg_size, help_dpad_right_svg_data}, + {":/help/button_start.svg", help_button_start_svg_size, help_button_start_svg_data}, {":/help/dpad_up.svg", help_dpad_up_svg_size, help_dpad_up_svg_data}, - {":/help/dpad_updown.svg", help_dpad_updown_svg_size, help_dpad_updown_svg_data} + {":/help/analog_down.svg", help_analog_down_svg_size, help_analog_down_svg_data}, + {":/help/button_y.svg", help_button_y_svg_size, help_button_y_svg_data}, + {":/help/button_select.svg", help_button_select_svg_size, help_button_select_svg_data}, + {":/help/button_b.svg", help_button_b_svg_size, help_button_b_svg_data}, + {":/help/dpad_updown.svg", help_dpad_updown_svg_size, help_dpad_updown_svg_data}, + {":/help/dpad_right.svg", help_dpad_right_svg_size, help_dpad_right_svg_data}, + {":/help/button_r.svg", help_button_r_svg_size, help_button_r_svg_data}, + {":/help/analog_thumb.svg", help_analog_thumb_svg_size, help_analog_thumb_svg_data}, + {":/help/analog_left.svg", help_analog_left_svg_size, help_analog_left_svg_data}, + {":/help/analog_right.svg", help_analog_right_svg_size, help_analog_right_svg_data} }; res2hMapType::value_type mapTemp[] = { - std::make_pair(":/arrow.svg", res2hFiles[0]), - std::make_pair(":/busy_0.svg", res2hFiles[1]), - std::make_pair(":/busy_1.svg", res2hFiles[2]), - std::make_pair(":/busy_2.svg", res2hFiles[3]), - std::make_pair(":/busy_3.svg", res2hFiles[4]), - std::make_pair(":/button.png", res2hFiles[5]), - std::make_pair(":/button_filled.png", res2hFiles[6]), - std::make_pair(":/checkbox_checked.svg", res2hFiles[7]), - std::make_pair(":/checkbox_unchecked.svg", res2hFiles[8]), - std::make_pair(":/fav_add.svg", res2hFiles[9]), - std::make_pair(":/fav_remove.svg", res2hFiles[10]), - std::make_pair(":/frame.png", res2hFiles[11]), - std::make_pair(":/off.svg", res2hFiles[12]), - std::make_pair(":/on.svg", res2hFiles[13]), - std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[14]), - std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[15]), - std::make_pair(":/option_arrow.svg", res2hFiles[16]), - std::make_pair(":/scroll_gradient.png", res2hFiles[17]), - std::make_pair(":/slider_knob.svg", res2hFiles[18]), - std::make_pair(":/splash.svg", res2hFiles[19]), - std::make_pair(":/star_filled.svg", res2hFiles[20]), + std::make_pair(":/scroll_gradient.png", res2hFiles[0]), + std::make_pair(":/star_filled.svg", res2hFiles[1]), + std::make_pair(":/window_icon_256.png", res2hFiles[2]), + std::make_pair(":/off.svg", res2hFiles[3]), + std::make_pair(":/button_filled.png", res2hFiles[4]), + std::make_pair(":/checkbox_unchecked.svg", res2hFiles[5]), + std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[6]), + std::make_pair(":/on.svg", res2hFiles[7]), + std::make_pair(":/busy_3.svg", res2hFiles[8]), + std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[9]), + std::make_pair(":/checkbox_checked.svg", res2hFiles[10]), + std::make_pair(":/textinput_ninepatch.png", res2hFiles[11]), + std::make_pair(":/option_arrow.svg", res2hFiles[12]), + std::make_pair(":/textinput_ninepatch_active.png", res2hFiles[13]), + std::make_pair(":/splash.svg", res2hFiles[14]), + std::make_pair(":/frame.png", res2hFiles[15]), + std::make_pair(":/slider_knob.svg", res2hFiles[16]), + std::make_pair(":/button.png", res2hFiles[17]), + std::make_pair(":/busy_1.svg", res2hFiles[18]), + std::make_pair(":/fav_remove.svg", res2hFiles[19]), + std::make_pair(":/arrow.svg", res2hFiles[20]), std::make_pair(":/star_unfilled.svg", res2hFiles[21]), - std::make_pair(":/textinput_ninepatch.png", res2hFiles[22]), - std::make_pair(":/textinput_ninepatch_active.png", res2hFiles[23]), - std::make_pair(":/window_icon_256.png", res2hFiles[24]), - std::make_pair(":/help/button_a.svg", res2hFiles[25]), - std::make_pair(":/help/button_b.svg", res2hFiles[26]), - std::make_pair(":/help/button_l.svg", res2hFiles[27]), - std::make_pair(":/help/button_r.svg", res2hFiles[28]), - std::make_pair(":/help/button_select.svg", res2hFiles[29]), - std::make_pair(":/help/button_start.svg", res2hFiles[30]), - std::make_pair(":/help/button_x.svg", res2hFiles[31]), - std::make_pair(":/help/button_y.svg", res2hFiles[32]), - std::make_pair(":/help/dpad_all.svg", res2hFiles[33]), - std::make_pair(":/help/dpad_down.svg", res2hFiles[34]), - std::make_pair(":/help/dpad_left.svg", res2hFiles[35]), - std::make_pair(":/help/dpad_leftright.svg", res2hFiles[36]), - std::make_pair(":/help/dpad_right.svg", res2hFiles[37]), - std::make_pair(":/help/dpad_up.svg", res2hFiles[38]), - std::make_pair(":/help/dpad_updown.svg", res2hFiles[39]) + std::make_pair(":/busy_2.svg", res2hFiles[22]), + std::make_pair(":/busy_0.svg", res2hFiles[23]), + std::make_pair(":/fav_add.svg", res2hFiles[24]), + std::make_pair(":/help/dpad_leftright.svg", res2hFiles[25]), + std::make_pair(":/help/dpad_all.svg", res2hFiles[26]), + std::make_pair(":/help/button_x.svg", res2hFiles[27]), + std::make_pair(":/help/button_a.svg", res2hFiles[28]), + std::make_pair(":/help/button_l.svg", res2hFiles[29]), + std::make_pair(":/help/dpad_down.svg", res2hFiles[30]), + std::make_pair(":/help/analog_up.svg", res2hFiles[31]), + std::make_pair(":/help/dpad_left.svg", res2hFiles[32]), + std::make_pair(":/help/button_start.svg", res2hFiles[33]), + std::make_pair(":/help/dpad_up.svg", res2hFiles[34]), + std::make_pair(":/help/analog_down.svg", res2hFiles[35]), + std::make_pair(":/help/button_y.svg", res2hFiles[36]), + std::make_pair(":/help/button_select.svg", res2hFiles[37]), + std::make_pair(":/help/button_b.svg", res2hFiles[38]), + std::make_pair(":/help/dpad_updown.svg", res2hFiles[39]), + std::make_pair(":/help/dpad_right.svg", res2hFiles[40]), + std::make_pair(":/help/button_r.svg", res2hFiles[41]), + std::make_pair(":/help/analog_thumb.svg", res2hFiles[42]), + std::make_pair(":/help/analog_left.svg", res2hFiles[43]), + std::make_pair(":/help/analog_right.svg", res2hFiles[44]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 376ed4658a..25268351fb 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -5,125 +5,140 @@ #include #include -extern const size_t arrow_svg_size; -extern const unsigned char arrow_svg_data[]; - -extern const size_t busy_0_svg_size; -extern const unsigned char busy_0_svg_data[]; - -extern const size_t busy_1_svg_size; -extern const unsigned char busy_1_svg_data[]; +extern const size_t scroll_gradient_png_size; +extern const unsigned char scroll_gradient_png_data[]; -extern const size_t busy_2_svg_size; -extern const unsigned char busy_2_svg_data[]; +extern const size_t star_filled_svg_size; +extern const unsigned char star_filled_svg_data[]; -extern const size_t busy_3_svg_size; -extern const unsigned char busy_3_svg_data[]; +extern const size_t window_icon_256_png_size; +extern const unsigned char window_icon_256_png_data[]; -extern const size_t button_png_size; -extern const unsigned char button_png_data[]; +extern const size_t off_svg_size; +extern const unsigned char off_svg_data[]; extern const size_t button_filled_png_size; extern const unsigned char button_filled_png_data[]; -extern const size_t checkbox_checked_svg_size; -extern const unsigned char checkbox_checked_svg_data[]; - extern const size_t checkbox_unchecked_svg_size; extern const unsigned char checkbox_unchecked_svg_data[]; -extern const size_t fav_add_svg_size; -extern const unsigned char fav_add_svg_data[]; - -extern const size_t fav_remove_svg_size; -extern const unsigned char fav_remove_svg_data[]; - -extern const size_t frame_png_size; -extern const unsigned char frame_png_data[]; - -extern const size_t off_svg_size; -extern const unsigned char off_svg_data[]; +extern const size_t opensans_hebrew_condensed_regular_ttf_size; +extern const unsigned char opensans_hebrew_condensed_regular_ttf_data[]; extern const size_t on_svg_size; extern const unsigned char on_svg_data[]; +extern const size_t busy_3_svg_size; +extern const unsigned char busy_3_svg_data[]; + extern const size_t opensans_hebrew_condensed_light_ttf_size; extern const unsigned char opensans_hebrew_condensed_light_ttf_data[]; -extern const size_t opensans_hebrew_condensed_regular_ttf_size; -extern const unsigned char opensans_hebrew_condensed_regular_ttf_data[]; +extern const size_t checkbox_checked_svg_size; +extern const unsigned char checkbox_checked_svg_data[]; + +extern const size_t textinput_ninepatch_png_size; +extern const unsigned char textinput_ninepatch_png_data[]; extern const size_t option_arrow_svg_size; extern const unsigned char option_arrow_svg_data[]; -extern const size_t scroll_gradient_png_size; -extern const unsigned char scroll_gradient_png_data[]; +extern const size_t textinput_ninepatch_active_png_size; +extern const unsigned char textinput_ninepatch_active_png_data[]; + +extern const size_t splash_svg_size; +extern const unsigned char splash_svg_data[]; + +extern const size_t frame_png_size; +extern const unsigned char frame_png_data[]; extern const size_t slider_knob_svg_size; extern const unsigned char slider_knob_svg_data[]; -extern const size_t splash_svg_size; -extern const unsigned char splash_svg_data[]; +extern const size_t button_png_size; +extern const unsigned char button_png_data[]; -extern const size_t star_filled_svg_size; -extern const unsigned char star_filled_svg_data[]; +extern const size_t busy_1_svg_size; +extern const unsigned char busy_1_svg_data[]; + +extern const size_t fav_remove_svg_size; +extern const unsigned char fav_remove_svg_data[]; + +extern const size_t arrow_svg_size; +extern const unsigned char arrow_svg_data[]; extern const size_t star_unfilled_svg_size; extern const unsigned char star_unfilled_svg_data[]; -extern const size_t textinput_ninepatch_png_size; -extern const unsigned char textinput_ninepatch_png_data[]; +extern const size_t busy_2_svg_size; +extern const unsigned char busy_2_svg_data[]; -extern const size_t textinput_ninepatch_active_png_size; -extern const unsigned char textinput_ninepatch_active_png_data[]; +extern const size_t busy_0_svg_size; +extern const unsigned char busy_0_svg_data[]; -extern const size_t window_icon_256_png_size; -extern const unsigned char window_icon_256_png_data[]; +extern const size_t fav_add_svg_size; +extern const unsigned char fav_add_svg_data[]; + +extern const size_t help_dpad_leftright_svg_size; +extern const unsigned char help_dpad_leftright_svg_data[]; + +extern const size_t help_dpad_all_svg_size; +extern const unsigned char help_dpad_all_svg_data[]; + +extern const size_t help_button_x_svg_size; +extern const unsigned char help_button_x_svg_data[]; extern const size_t help_button_a_svg_size; extern const unsigned char help_button_a_svg_data[]; -extern const size_t help_button_b_svg_size; -extern const unsigned char help_button_b_svg_data[]; - extern const size_t help_button_l_svg_size; extern const unsigned char help_button_l_svg_data[]; -extern const size_t help_button_r_svg_size; -extern const unsigned char help_button_r_svg_data[]; +extern const size_t help_dpad_down_svg_size; +extern const unsigned char help_dpad_down_svg_data[]; -extern const size_t help_button_select_svg_size; -extern const unsigned char help_button_select_svg_data[]; +extern const size_t help_analog_up_svg_size; +extern const unsigned char help_analog_up_svg_data[]; + +extern const size_t help_dpad_left_svg_size; +extern const unsigned char help_dpad_left_svg_data[]; extern const size_t help_button_start_svg_size; extern const unsigned char help_button_start_svg_data[]; -extern const size_t help_button_x_svg_size; -extern const unsigned char help_button_x_svg_data[]; +extern const size_t help_dpad_up_svg_size; +extern const unsigned char help_dpad_up_svg_data[]; + +extern const size_t help_analog_down_svg_size; +extern const unsigned char help_analog_down_svg_data[]; extern const size_t help_button_y_svg_size; extern const unsigned char help_button_y_svg_data[]; -extern const size_t help_dpad_all_svg_size; -extern const unsigned char help_dpad_all_svg_data[]; - -extern const size_t help_dpad_down_svg_size; -extern const unsigned char help_dpad_down_svg_data[]; +extern const size_t help_button_select_svg_size; +extern const unsigned char help_button_select_svg_data[]; -extern const size_t help_dpad_left_svg_size; -extern const unsigned char help_dpad_left_svg_data[]; +extern const size_t help_button_b_svg_size; +extern const unsigned char help_button_b_svg_data[]; -extern const size_t help_dpad_leftright_svg_size; -extern const unsigned char help_dpad_leftright_svg_data[]; +extern const size_t help_dpad_updown_svg_size; +extern const unsigned char help_dpad_updown_svg_data[]; extern const size_t help_dpad_right_svg_size; extern const unsigned char help_dpad_right_svg_data[]; -extern const size_t help_dpad_up_svg_size; -extern const unsigned char help_dpad_up_svg_data[]; +extern const size_t help_button_r_svg_size; +extern const unsigned char help_button_r_svg_data[]; -extern const size_t help_dpad_updown_svg_size; -extern const unsigned char help_dpad_updown_svg_data[]; +extern const size_t help_analog_thumb_svg_size; +extern const unsigned char help_analog_thumb_svg_data[]; + +extern const size_t help_analog_left_svg_size; +extern const unsigned char help_analog_left_svg_data[]; + +extern const size_t help_analog_right_svg_size; +extern const unsigned char help_analog_right_svg_data[]; struct Res2hEntry { const std::string relativeFileName; diff --git a/data/converted/arrow_svg.cpp b/data/converted/arrow_svg.cpp index 781bda0592..8b9af722e3 100644 --- a/data/converted/arrow_svg.cpp +++ b/data/converted/arrow_svg.cpp @@ -2,91 +2,91 @@ #include "../Resources.h" -const size_t arrow_svg_size = 849; -const unsigned char arrow_svg_data[849] = { +const size_t arrow_svg_size = 838; +const unsigned char arrow_svg_data[838] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x31,0x32,0x2e,0x31,0x36,0x35,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x31,0x2e,0x39,0x32,0x31,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x31,0x32,0x2e,0x31,0x36,0x35,0x20, - 0x32,0x31,0x2e,0x39,0x32,0x31,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x31,0x32,0x2e,0x31,0x36, - 0x35,0x20,0x32,0x31,0x2e,0x39,0x32,0x31,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x30,0x2e,0x37,0x35,0x2c,0x32, - 0x31,0x2e,0x39,0x32,0x31,0x63,0x2d,0x30,0x2e,0x31, - 0x39,0x37,0x2c,0x30,0x2d,0x30,0x2e,0x33,0x39,0x35, - 0x2d,0x30,0x2e,0x30,0x37,0x37,0x2d,0x30,0x2e,0x35, - 0x34,0x32,0x2d,0x30,0x2e,0x32,0x33,0x31,0x63,0x2d, - 0x30,0x2e,0x32,0x38,0x37,0x2d,0x30,0x2e,0x32,0x39, - 0x39,0x2d,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e, - 0x37,0x37,0x33,0x2c,0x30,0x2e,0x30,0x32,0x33,0x2d, - 0x31,0x2e,0x30,0x36,0x31,0x6c,0x31,0x30,0x2e,0x30, - 0x39,0x38,0x2d,0x39,0x2e,0x36,0x36,0x38,0x0d,0x0a, - 0x09,0x09,0x4c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x31, - 0x2e,0x32,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x39, - 0x39,0x2d,0x30,0x2e,0x32,0x38,0x36,0x2d,0x30,0x2e, - 0x33,0x31,0x2d,0x30,0x2e,0x37,0x36,0x31,0x2d,0x30, - 0x2e,0x30,0x32,0x33,0x2d,0x31,0x2e,0x30,0x36,0x63, - 0x30,0x2e,0x32,0x38,0x36,0x2d,0x30,0x2e,0x33,0x2c, - 0x30,0x2e,0x37,0x36,0x31,0x2d,0x30,0x2e,0x33,0x31, - 0x2c,0x31,0x2e,0x30,0x36,0x2d,0x30,0x2e,0x30,0x32, - 0x33,0x6c,0x31,0x30,0x2e,0x36,0x36,0x35,0x2c,0x31, - 0x30,0x2e,0x32,0x31,0x31,0x0d,0x0a,0x09,0x09,0x63, - 0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x31,0x34, - 0x31,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, - 0x33,0x33,0x37,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c, - 0x30,0x2e,0x35,0x34,0x32,0x73,0x2d,0x30,0x2e,0x30, - 0x38,0x34,0x2c,0x30,0x2e,0x34,0x2d,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x35,0x34,0x32,0x4c,0x31, - 0x2e,0x32,0x36,0x39,0x2c,0x32,0x31,0x2e,0x37,0x31, - 0x33,0x43,0x31,0x2e,0x31,0x32,0x34,0x2c,0x32,0x31, - 0x2e,0x38,0x35,0x32,0x2c,0x30,0x2e,0x39,0x33,0x37, - 0x2c,0x32,0x31,0x2e,0x39,0x32,0x31,0x2c,0x30,0x2e, - 0x37,0x35,0x2c,0x32,0x31,0x2e,0x39,0x32,0x31,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32, + 0x2e,0x31,0x36,0x35,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, + 0x32,0x31,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x31, + 0x32,0x2e,0x31,0x36,0x35,0x20,0x32,0x31,0x2e,0x39, + 0x32,0x31,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x31,0x32,0x2e,0x31,0x36,0x35,0x20,0x32,0x31, + 0x2e,0x39,0x32,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x30,0x2e, + 0x37,0x35,0x2c,0x32,0x31,0x2e,0x39,0x32,0x31,0x63, + 0x2d,0x30,0x2e,0x31,0x39,0x37,0x2c,0x30,0x2d,0x30, + 0x2e,0x33,0x39,0x35,0x2d,0x30,0x2e,0x30,0x37,0x37, + 0x2d,0x30,0x2e,0x35,0x34,0x32,0x2d,0x30,0x2e,0x32, + 0x33,0x31,0x63,0x2d,0x30,0x2e,0x32,0x38,0x37,0x2d, + 0x30,0x2e,0x32,0x39,0x39,0x2d,0x30,0x2e,0x32,0x37, + 0x36,0x2d,0x30,0x2e,0x37,0x37,0x33,0x2c,0x30,0x2e, + 0x30,0x32,0x33,0x2d,0x31,0x2e,0x30,0x36,0x31,0x6c, + 0x31,0x30,0x2e,0x30,0x39,0x38,0x2d,0x39,0x2e,0x36, + 0x36,0x38,0x0a,0x09,0x09,0x4c,0x30,0x2e,0x32,0x33, + 0x31,0x2c,0x31,0x2e,0x32,0x39,0x32,0x63,0x2d,0x30, + 0x2e,0x32,0x39,0x39,0x2d,0x30,0x2e,0x32,0x38,0x36, + 0x2d,0x30,0x2e,0x33,0x31,0x2d,0x30,0x2e,0x37,0x36, + 0x31,0x2d,0x30,0x2e,0x30,0x32,0x33,0x2d,0x31,0x2e, + 0x30,0x36,0x63,0x30,0x2e,0x32,0x38,0x36,0x2d,0x30, + 0x2e,0x33,0x2c,0x30,0x2e,0x37,0x36,0x31,0x2d,0x30, + 0x2e,0x33,0x31,0x2c,0x31,0x2e,0x30,0x36,0x2d,0x30, + 0x2e,0x30,0x32,0x33,0x6c,0x31,0x30,0x2e,0x36,0x36, + 0x35,0x2c,0x31,0x30,0x2e,0x32,0x31,0x31,0x0a,0x09, + 0x09,0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e, + 0x31,0x34,0x31,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c, + 0x30,0x2e,0x33,0x33,0x37,0x2c,0x30,0x2e,0x32,0x33, + 0x31,0x2c,0x30,0x2e,0x35,0x34,0x32,0x73,0x2d,0x30, + 0x2e,0x30,0x38,0x34,0x2c,0x30,0x2e,0x34,0x2d,0x30, + 0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x35,0x34,0x32, + 0x4c,0x31,0x2e,0x32,0x36,0x39,0x2c,0x32,0x31,0x2e, + 0x37,0x31,0x33,0x43,0x31,0x2e,0x31,0x32,0x34,0x2c, + 0x32,0x31,0x2e,0x38,0x35,0x32,0x2c,0x30,0x2e,0x39, + 0x33,0x37,0x2c,0x32,0x31,0x2e,0x39,0x32,0x31,0x2c, + 0x30,0x2e,0x37,0x35,0x2c,0x32,0x31,0x2e,0x39,0x32, + 0x31,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/busy_0_svg.cpp b/data/converted/busy_0_svg.cpp index 732d087fc9..d7146d82a1 100644 --- a/data/converted/busy_0_svg.cpp +++ b/data/converted/busy_0_svg.cpp @@ -2,82 +2,81 @@ #include "../Resources.h" -const size_t busy_0_svg_size = 1369; -const unsigned char busy_0_svg_data[1369] = { +const size_t busy_0_svg_size = 1347; +const unsigned char busy_0_svg_data[1347] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, - 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63, - 0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e, - 0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x2c,0x32,0x31,0x2e,0x32,0x39, - 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, - 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37,0x63, - 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30,0x2e, - 0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2d, - 0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30, - 0x39,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39,0x0d,0x0a, - 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c, - 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, - 0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33,0x37,0x63, - 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, + 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, + 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, + 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, + 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, + 0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x32, + 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, + 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x68,0x2d,0x37,0x2e, + 0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, + 0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d, + 0x30,0x2e,0x37,0x30,0x39,0x76,0x2d,0x38,0x2e,0x33, + 0x37,0x39,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, + 0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30, 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, - 0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d, - 0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2d,0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39, + 0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33, + 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79, + 0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c, 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32, @@ -89,56 +88,56 @@ const unsigned char busy_0_svg_data[1369] = { 0x2c,0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30, 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, 0x2d,0x30,0x2e,0x37,0x30,0x38,0x56,0x30,0x2e,0x37, - 0x30,0x38,0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30, - 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d, + 0x30,0x38,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, + 0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x38,0x68,0x37,0x2e,0x39, + 0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x38,0x7a, + 0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, + 0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d, + 0x22,0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35,0x34,0x2c,0x32, + 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, + 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x48,0x30,0x2e,0x37, + 0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39,0x2c,0x32, + 0x32,0x2e,0x30,0x30,0x32,0x2c,0x30,0x2c,0x32,0x31, + 0x2e,0x36,0x38,0x33,0x2c,0x30,0x2c,0x32,0x31,0x2e, + 0x32,0x39,0x33,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39, + 0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39, + 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37, + 0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30, + 0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33,0x38, + 0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e, + 0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c, 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30, - 0x39,0x2d,0x30,0x2e,0x37,0x30,0x38,0x68,0x37,0x2e, - 0x39,0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x38, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69, - 0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d, - 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, - 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e,0x33, - 0x35,0x34,0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x63, + 0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a,0x22, + 0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e, + 0x33,0x35,0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63, 0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38, 0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x32,0x32,0x2e,0x30,0x30,0x32,0x2c, - 0x30,0x2c,0x32,0x31,0x2e,0x36,0x38,0x33,0x2c,0x30, - 0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x76,0x2d,0x38, - 0x2e,0x33,0x37,0x39,0x0d,0x0a,0x09,0x09,0x63,0x30, - 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30,0x39,0x68, - 0x37,0x2e,0x39,0x33,0x38,0x63,0x30,0x2e,0x33,0x39, - 0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30, - 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x56,0x32,0x31,0x2e, - 0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35, - 0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63,0x30,0x2c, - 0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37, - 0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38,0x48,0x30, - 0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30,0x2c,0x39, - 0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39,0x2e,0x30, - 0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e,0x39, - 0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e, - 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x31,0x39,0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30, + 0x2c,0x39,0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39, + 0x2e,0x30,0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38, + 0x0a,0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e, + 0x39,0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, + 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37, + 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/busy_1_svg.cpp b/data/converted/busy_1_svg.cpp index 6bbc474e17..d7f7f68324 100644 --- a/data/converted/busy_1_svg.cpp +++ b/data/converted/busy_1_svg.cpp @@ -2,81 +2,80 @@ #include "../Resources.h" -const size_t busy_1_svg_size = 1369; -const unsigned char busy_1_svg_data[1369] = { +const size_t busy_1_svg_size = 1347; +const unsigned char busy_1_svg_data[1347] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, - 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63, - 0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e, - 0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x2c,0x32,0x31,0x2e,0x32,0x39, - 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, - 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37,0x63, - 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30,0x2e, - 0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2d, - 0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30, - 0x39,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39,0x0d,0x0a, - 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c, - 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, - 0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33,0x37,0x63, - 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, + 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, + 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, + 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, + 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, + 0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x32, + 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, + 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x68,0x2d,0x37,0x2e, + 0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, + 0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d, + 0x30,0x2e,0x37,0x30,0x39,0x76,0x2d,0x38,0x2e,0x33, + 0x37,0x39,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, + 0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30, 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x2d,0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39, + 0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33, + 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, 0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x39,0x2e,0x30, @@ -87,58 +86,58 @@ const unsigned char busy_1_svg_data[1369] = { 0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30, 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, - 0x30,0x38,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c, - 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, - 0x38,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, - 0x37,0x30,0x38,0x68,0x37,0x2e,0x39,0x33,0x37,0x63, - 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38, - 0x56,0x39,0x2e,0x30,0x38,0x38,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67, - 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, - 0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35,0x34,0x2c,0x32, - 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, - 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x48,0x30,0x2e,0x37, - 0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39,0x2c,0x32, - 0x32,0x2e,0x30,0x30,0x32,0x2c,0x30,0x2c,0x32,0x31, - 0x2e,0x36,0x38,0x33,0x2c,0x30,0x2c,0x32,0x31,0x2e, - 0x32,0x39,0x33,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39, - 0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e, - 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d, - 0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33, - 0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74, - 0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35, - 0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63,0x30,0x2c, - 0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37, - 0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38,0x48,0x30, - 0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30,0x2c,0x39, - 0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39,0x2e,0x30, - 0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e,0x39, - 0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e, - 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x30,0x38,0x56,0x30,0x2e,0x37,0x30,0x38,0x0a,0x09, + 0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30, + 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, + 0x30,0x38,0x68,0x37,0x2e,0x39,0x33,0x37,0x63,0x30, + 0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30, + 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x56, + 0x39,0x2e,0x30,0x38,0x38,0x7a,0x22,0x2f,0x3e,0x0a, + 0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70, + 0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35, + 0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39, + 0x2e,0x33,0x35,0x34,0x2c,0x32,0x31,0x2e,0x32,0x39, + 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, + 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30, + 0x2e,0x33,0x31,0x39,0x2c,0x32,0x32,0x2e,0x30,0x30, + 0x32,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x36,0x38,0x33, + 0x2c,0x30,0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x76, + 0x2d,0x38,0x2e,0x33,0x37,0x39,0x0a,0x09,0x09,0x63, + 0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, + 0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30,0x39, + 0x68,0x37,0x2e,0x39,0x33,0x38,0x63,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c, + 0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30, + 0x38,0x2c,0x30,0x2e,0x37,0x30,0x39,0x56,0x32,0x31, + 0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61, + 0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e, + 0x33,0x35,0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63, + 0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38, + 0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30, + 0x2c,0x39,0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39, + 0x2e,0x30,0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38, + 0x0a,0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e, + 0x39,0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, + 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37, + 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/busy_2_svg.cpp b/data/converted/busy_2_svg.cpp index 46896deb6f..543b728a91 100644 --- a/data/converted/busy_2_svg.cpp +++ b/data/converted/busy_2_svg.cpp @@ -2,81 +2,80 @@ #include "../Resources.h" -const size_t busy_2_svg_size = 1369; -const unsigned char busy_2_svg_data[1369] = { +const size_t busy_2_svg_size = 1347; +const unsigned char busy_2_svg_data[1347] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, - 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32, - 0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c, - 0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, - 0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x68,0x2d, - 0x37,0x2e,0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d, - 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, - 0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x76,0x2d,0x38, - 0x2e,0x33,0x37,0x39,0x0d,0x0a,0x09,0x09,0x63,0x30, - 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x68, - 0x37,0x2e,0x39,0x33,0x37,0x63,0x30,0x2e,0x33,0x39, - 0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, + 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, + 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, + 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, + 0x2e,0x30,0x30,0x32,0x2c,0x32,0x31,0x2e,0x32,0x39, + 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x56,0x32,0x31,0x2e, - 0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70, - 0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35, - 0x22,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37,0x63, + 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30,0x2e, + 0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2d, + 0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30, + 0x39,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39,0x0a,0x09, + 0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30, + 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, + 0x30,0x39,0x68,0x37,0x2e,0x39,0x33,0x37,0x63,0x30, + 0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30, + 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x56, + 0x32,0x31,0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e, + 0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f, + 0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e, + 0x35,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, 0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x39,0x2e,0x30, @@ -87,58 +86,58 @@ const unsigned char busy_2_svg_data[1369] = { 0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30, 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, - 0x30,0x38,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c, - 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, - 0x38,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, - 0x37,0x30,0x38,0x68,0x37,0x2e,0x39,0x33,0x37,0x63, - 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38, - 0x56,0x39,0x2e,0x30,0x38,0x38,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67, - 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, - 0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35,0x34,0x2c,0x32, - 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, - 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x48,0x30,0x2e,0x37, - 0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39,0x2c,0x32, - 0x32,0x2e,0x30,0x30,0x32,0x2c,0x30,0x2c,0x32,0x31, - 0x2e,0x36,0x38,0x33,0x2c,0x30,0x2c,0x32,0x31,0x2e, - 0x32,0x39,0x33,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39, - 0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e, - 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d, - 0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33, - 0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74, - 0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35, - 0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63,0x30,0x2c, - 0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37, - 0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38,0x48,0x30, - 0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30,0x2c,0x39, - 0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39,0x2e,0x30, - 0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e,0x39, - 0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e, - 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x30,0x38,0x56,0x30,0x2e,0x37,0x30,0x38,0x0a,0x09, + 0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30, + 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, + 0x30,0x38,0x68,0x37,0x2e,0x39,0x33,0x37,0x63,0x30, + 0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30, + 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x56, + 0x39,0x2e,0x30,0x38,0x38,0x7a,0x22,0x2f,0x3e,0x0a, + 0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70, + 0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35, + 0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39, + 0x2e,0x33,0x35,0x34,0x2c,0x32,0x31,0x2e,0x32,0x39, + 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, + 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30, + 0x2e,0x33,0x31,0x39,0x2c,0x32,0x32,0x2e,0x30,0x30, + 0x32,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x36,0x38,0x33, + 0x2c,0x30,0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x76, + 0x2d,0x38,0x2e,0x33,0x37,0x39,0x0a,0x09,0x09,0x63, + 0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, + 0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30,0x39, + 0x68,0x37,0x2e,0x39,0x33,0x38,0x63,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c, + 0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30, + 0x38,0x2c,0x30,0x2e,0x37,0x30,0x39,0x56,0x32,0x31, + 0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61, + 0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e, + 0x33,0x35,0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63, + 0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38, + 0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30, + 0x2c,0x39,0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39, + 0x2e,0x30,0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38, + 0x0a,0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e, + 0x39,0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, + 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37, + 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/busy_3_svg.cpp b/data/converted/busy_3_svg.cpp index 8172c7c5f9..49a16d2680 100644 --- a/data/converted/busy_3_svg.cpp +++ b/data/converted/busy_3_svg.cpp @@ -2,82 +2,81 @@ #include "../Resources.h" -const size_t busy_3_svg_size = 1369; -const unsigned char busy_3_svg_data[1369] = { +const size_t busy_3_svg_size = 1347; +const unsigned char busy_3_svg_data[1347] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, - 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63, - 0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e, - 0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x2c,0x32,0x31,0x2e,0x32,0x39, - 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, - 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37,0x63, - 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30,0x2e, - 0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2d, - 0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30, - 0x39,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39,0x0d,0x0a, - 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c, - 0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, - 0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33,0x37,0x63, - 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, + 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, + 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, + 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, + 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, + 0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x32, + 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, + 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, + 0x2c,0x30,0x2e,0x37,0x30,0x39,0x68,0x2d,0x37,0x2e, + 0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c, + 0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, + 0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d, + 0x30,0x2e,0x37,0x30,0x39,0x76,0x2d,0x38,0x2e,0x33, + 0x37,0x39,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, + 0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30, 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, - 0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d, - 0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a,0x09,0x3c, + 0x2d,0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39, + 0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33, + 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79, + 0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c, 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32, @@ -89,56 +88,56 @@ const unsigned char busy_3_svg_data[1369] = { 0x2c,0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30, 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, 0x2d,0x30,0x2e,0x37,0x30,0x38,0x56,0x30,0x2e,0x37, - 0x30,0x38,0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30, - 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d, - 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30, - 0x39,0x2d,0x30,0x2e,0x37,0x30,0x38,0x68,0x37,0x2e, - 0x39,0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x38, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35,0x34,0x2c,0x32, - 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, - 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x48,0x30,0x2e,0x37, - 0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39,0x2c,0x32, - 0x32,0x2e,0x30,0x30,0x32,0x2c,0x30,0x2c,0x32,0x31, - 0x2e,0x36,0x38,0x33,0x2c,0x30,0x2c,0x32,0x31,0x2e, - 0x32,0x39,0x33,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39, - 0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e, - 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d, - 0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33, - 0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74, - 0x79,0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0d,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35, - 0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63,0x30,0x2c, - 0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37, - 0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38,0x48,0x30, - 0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30,0x2c,0x39, - 0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39,0x2e,0x30, - 0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e,0x39, - 0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e, - 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x30,0x38,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, + 0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x38,0x68,0x37,0x2e,0x39, + 0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, + 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x38,0x7a, + 0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, + 0x67,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39, + 0x2e,0x33,0x35,0x34,0x2c,0x32,0x31,0x2e,0x32,0x39, + 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, + 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, + 0x2d,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, + 0x30,0x39,0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30, + 0x2e,0x33,0x31,0x39,0x2c,0x32,0x32,0x2e,0x30,0x30, + 0x32,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x36,0x38,0x33, + 0x2c,0x30,0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x76, + 0x2d,0x38,0x2e,0x33,0x37,0x39,0x0a,0x09,0x09,0x63, + 0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, + 0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30,0x39, + 0x68,0x37,0x2e,0x39,0x33,0x38,0x63,0x30,0x2e,0x33, + 0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c, + 0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30, + 0x38,0x2c,0x30,0x2e,0x37,0x30,0x39,0x56,0x32,0x31, + 0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61, + 0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e, + 0x33,0x35,0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63, + 0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38, + 0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30, + 0x2c,0x39,0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39, + 0x2e,0x30,0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38, + 0x0a,0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c, + 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e, + 0x39,0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, + 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30, + 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37, + 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/button_filled_png.cpp b/data/converted/button_filled_png.cpp index 755754b1b4..e85f96e5cf 100644 --- a/data/converted/button_filled_png.cpp +++ b/data/converted/button_filled_png.cpp @@ -122,3 +122,4 @@ const unsigned char button_filled_png_data[1168] = { 0x1a,0x41,0x6b,0xc2,0x11,0x6c,0x00,0x00,0x00,0x00, 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; + diff --git a/data/converted/button_png.cpp b/data/converted/button_png.cpp index de4959dd28..72603af201 100644 --- a/data/converted/button_png.cpp +++ b/data/converted/button_png.cpp @@ -129,3 +129,4 @@ const unsigned char button_png_data[1231] = { 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, 0x82 }; + diff --git a/data/converted/checkbox_checked_svg.cpp b/data/converted/checkbox_checked_svg.cpp index 06848c9556..5a3acb2fb8 100644 --- a/data/converted/checkbox_checked_svg.cpp +++ b/data/converted/checkbox_checked_svg.cpp @@ -2,140 +2,139 @@ #include "../Resources.h" -const size_t checkbox_checked_svg_size = 1337; -const unsigned char checkbox_checked_svg_data[1337] = { +const size_t checkbox_checked_svg_size = 1314; +const unsigned char checkbox_checked_svg_data[1314] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x39,0x36,0x32,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x31,0x2e,0x39,0x35,0x39,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x39,0x36,0x32,0x20, - 0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x39,0x36, - 0x32,0x20,0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x37, - 0x2e,0x37,0x31,0x2c,0x31,0x2e,0x35,0x63,0x31,0x2e, - 0x35,0x31,0x38,0x2c,0x30,0x2c,0x32,0x2e,0x37,0x35, - 0x32,0x2c,0x31,0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e, - 0x37,0x35,0x32,0x2c,0x32,0x2e,0x37,0x35,0x32,0x76, - 0x31,0x33,0x2e,0x34,0x35,0x35,0x63,0x30,0x2c,0x31, - 0x2e,0x35,0x31,0x38,0x2d,0x31,0x2e,0x32,0x33,0x34, - 0x2c,0x32,0x2e,0x37,0x35,0x32,0x2d,0x32,0x2e,0x37, - 0x35,0x32,0x2c,0x32,0x2e,0x37,0x35,0x32,0x48,0x34, - 0x2e,0x32,0x35,0x32,0x0d,0x0a,0x09,0x63,0x2d,0x31, - 0x2e,0x35,0x31,0x38,0x2c,0x30,0x2d,0x32,0x2e,0x37, - 0x35,0x32,0x2d,0x31,0x2e,0x32,0x33,0x34,0x2d,0x32, - 0x2e,0x37,0x35,0x32,0x2d,0x32,0x2e,0x37,0x35,0x32, - 0x56,0x34,0x2e,0x32,0x35,0x32,0x43,0x31,0x2e,0x35, - 0x2c,0x32,0x2e,0x37,0x33,0x34,0x2c,0x32,0x2e,0x37, - 0x33,0x34,0x2c,0x31,0x2e,0x35,0x2c,0x34,0x2e,0x32, - 0x35,0x32,0x2c,0x31,0x2e,0x35,0x48,0x31,0x37,0x2e, - 0x37,0x31,0x20,0x4d,0x31,0x37,0x2e,0x37,0x31,0x2c, - 0x30,0x48,0x34,0x2e,0x32,0x35,0x32,0x43,0x31,0x2e, - 0x39,0x31,0x34,0x2c,0x30,0x2c,0x30,0x2c,0x31,0x2e, - 0x39,0x31,0x34,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35, - 0x32,0x76,0x31,0x33,0x2e,0x34,0x35,0x35,0x0d,0x0a, - 0x09,0x63,0x30,0x2c,0x32,0x2e,0x33,0x33,0x39,0x2c, - 0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x2e,0x32,0x35, - 0x32,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e, - 0x32,0x35,0x32,0x48,0x31,0x37,0x2e,0x37,0x31,0x63, - 0x32,0x2e,0x33,0x33,0x39,0x2c,0x30,0x2c,0x34,0x2e, - 0x32,0x35,0x32,0x2d,0x31,0x2e,0x39,0x31,0x33,0x2c, - 0x34,0x2e,0x32,0x35,0x32,0x2d,0x34,0x2e,0x32,0x35, - 0x32,0x56,0x34,0x2e,0x32,0x35,0x32,0x43,0x32,0x31, - 0x2e,0x39,0x36,0x32,0x2c,0x31,0x2e,0x39,0x31,0x34, - 0x2c,0x32,0x30,0x2e,0x30,0x34,0x39,0x2c,0x30,0x2c, - 0x31,0x37,0x2e,0x37,0x31,0x2c,0x30,0x4c,0x31,0x37, - 0x2e,0x37,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x0d,0x0a,0x09,0x09,0x09,0x3c, - 0x72,0x65,0x63,0x74,0x20,0x78,0x3d,0x22,0x31,0x30, - 0x2e,0x32,0x33,0x32,0x22,0x20,0x79,0x3d,0x22,0x31, - 0x2e,0x30,0x37,0x39,0x22,0x20,0x74,0x72,0x61,0x6e, - 0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,0x74, - 0x72,0x69,0x78,0x28,0x30,0x2e,0x37,0x30,0x37,0x31, - 0x20,0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x2d,0x30, - 0x2e,0x37,0x30,0x37,0x31,0x20,0x30,0x2e,0x37,0x30, - 0x37,0x31,0x20,0x31,0x30,0x2e,0x39,0x38,0x30,0x31, - 0x20,0x2d,0x34,0x2e,0x35,0x34,0x39,0x34,0x29,0x22, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, - 0x37,0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64,0x74, - 0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x39,0x2e,0x38, - 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, - 0x0d,0x0a,0x09,0x09,0x09,0x3c,0x72,0x65,0x63,0x74, - 0x20,0x78,0x3d,0x22,0x31,0x30,0x2e,0x32,0x33,0x32, - 0x22,0x20,0x79,0x3d,0x22,0x31,0x2e,0x30,0x37,0x39, - 0x22,0x20,0x74,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72, - 0x6d,0x3d,0x22,0x6d,0x61,0x74,0x72,0x69,0x78,0x28, - 0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x30,0x2e,0x37, - 0x30,0x37,0x31,0x20,0x2d,0x30,0x2e,0x37,0x30,0x37, - 0x31,0x20,0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x31, - 0x30,0x2e,0x39,0x38,0x30,0x31,0x20,0x2d,0x34,0x2e, - 0x35,0x34,0x39,0x34,0x29,0x22,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37, - 0x22,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31, - 0x2e,0x35,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74, - 0x3d,0x22,0x31,0x39,0x2e,0x38,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x0d,0x0a,0x09,0x09, - 0x09,0x3c,0x72,0x65,0x63,0x74,0x20,0x78,0x3d,0x22, - 0x31,0x2e,0x30,0x38,0x32,0x22,0x20,0x79,0x3d,0x22, - 0x31,0x30,0x2e,0x32,0x33,0x22,0x20,0x74,0x72,0x61, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, + 0x2e,0x39,0x36,0x32,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, + 0x35,0x39,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, + 0x31,0x2e,0x39,0x36,0x32,0x20,0x32,0x31,0x2e,0x39, + 0x35,0x39,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x32,0x31,0x2e,0x39,0x36,0x32,0x20,0x32,0x31, + 0x2e,0x39,0x35,0x39,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x37,0x2e,0x37,0x31,0x2c,0x31, + 0x2e,0x35,0x63,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, + 0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x31,0x2e,0x32, + 0x33,0x34,0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32, + 0x2e,0x37,0x35,0x32,0x76,0x31,0x33,0x2e,0x34,0x35, + 0x35,0x63,0x30,0x2c,0x31,0x2e,0x35,0x31,0x38,0x2d, + 0x31,0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e,0x37,0x35, + 0x32,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32,0x2e, + 0x37,0x35,0x32,0x48,0x34,0x2e,0x32,0x35,0x32,0x0a, + 0x09,0x63,0x2d,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, + 0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x31,0x2e,0x32, + 0x33,0x34,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x32, + 0x2e,0x37,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, + 0x43,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x37,0x33,0x34, + 0x2c,0x32,0x2e,0x37,0x33,0x34,0x2c,0x31,0x2e,0x35, + 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x31,0x2e,0x35, + 0x48,0x31,0x37,0x2e,0x37,0x31,0x20,0x4d,0x31,0x37, + 0x2e,0x37,0x31,0x2c,0x30,0x48,0x34,0x2e,0x32,0x35, + 0x32,0x43,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, + 0x30,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, + 0x34,0x2e,0x32,0x35,0x32,0x76,0x31,0x33,0x2e,0x34, + 0x35,0x35,0x0a,0x09,0x63,0x30,0x2c,0x32,0x2e,0x33, + 0x33,0x39,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34, + 0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32, + 0x2c,0x34,0x2e,0x32,0x35,0x32,0x48,0x31,0x37,0x2e, + 0x37,0x31,0x63,0x32,0x2e,0x33,0x33,0x39,0x2c,0x30, + 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x31,0x2e,0x39, + 0x31,0x33,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x34, + 0x2e,0x32,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, + 0x43,0x32,0x31,0x2e,0x39,0x36,0x32,0x2c,0x31,0x2e, + 0x39,0x31,0x34,0x2c,0x32,0x30,0x2e,0x30,0x34,0x39, + 0x2c,0x30,0x2c,0x31,0x37,0x2e,0x37,0x31,0x2c,0x30, + 0x4c,0x31,0x37,0x2e,0x37,0x31,0x2c,0x30,0x7a,0x22, + 0x2f,0x3e,0x0a,0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x67, + 0x3e,0x0a,0x09,0x09,0x0a,0x09,0x09,0x09,0x3c,0x72, + 0x65,0x63,0x74,0x20,0x78,0x3d,0x22,0x31,0x30,0x2e, + 0x32,0x33,0x32,0x22,0x20,0x79,0x3d,0x22,0x31,0x2e, + 0x30,0x37,0x39,0x22,0x20,0x74,0x72,0x61,0x6e,0x73, + 0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,0x74,0x72, + 0x69,0x78,0x28,0x30,0x2e,0x37,0x30,0x37,0x31,0x20, + 0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x2d,0x30,0x2e, + 0x37,0x30,0x37,0x31,0x20,0x30,0x2e,0x37,0x30,0x37, + 0x31,0x20,0x31,0x30,0x2e,0x39,0x38,0x30,0x31,0x20, + 0x2d,0x34,0x2e,0x35,0x34,0x39,0x34,0x29,0x22,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x68,0x65,0x69, + 0x67,0x68,0x74,0x3d,0x22,0x31,0x39,0x2e,0x38,0x22, + 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09, + 0x3c,0x67,0x3e,0x0a,0x09,0x09,0x0a,0x09,0x09,0x09, + 0x3c,0x72,0x65,0x63,0x74,0x20,0x78,0x3d,0x22,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x22,0x20,0x79,0x3d,0x22, + 0x31,0x2e,0x30,0x37,0x39,0x22,0x20,0x74,0x72,0x61, 0x6e,0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61, 0x74,0x72,0x69,0x78,0x28,0x30,0x2e,0x37,0x30,0x37, 0x31,0x20,0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x2d, 0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x30,0x2e,0x37, - 0x30,0x37,0x31,0x20,0x31,0x30,0x2e,0x39,0x37,0x39, - 0x33,0x20,0x2d,0x34,0x2e,0x35,0x34,0x39,0x34,0x29, + 0x30,0x37,0x31,0x20,0x31,0x30,0x2e,0x39,0x38,0x30, + 0x31,0x20,0x2d,0x34,0x2e,0x35,0x34,0x39,0x34,0x29, 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64, - 0x74,0x68,0x3d,0x22,0x31,0x39,0x2e,0x38,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x2e, - 0x35,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, - 0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x74,0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x68, + 0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x39,0x2e, + 0x38,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x0a,0x09, + 0x09,0x09,0x3c,0x72,0x65,0x63,0x74,0x20,0x78,0x3d, + 0x22,0x31,0x2e,0x30,0x38,0x32,0x22,0x20,0x79,0x3d, + 0x22,0x31,0x30,0x2e,0x32,0x33,0x22,0x20,0x74,0x72, + 0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d, + 0x61,0x74,0x72,0x69,0x78,0x28,0x30,0x2e,0x37,0x30, + 0x37,0x31,0x20,0x30,0x2e,0x37,0x30,0x37,0x31,0x20, + 0x2d,0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x30,0x2e, + 0x37,0x30,0x37,0x31,0x20,0x31,0x30,0x2e,0x39,0x37, + 0x39,0x33,0x20,0x2d,0x34,0x2e,0x35,0x34,0x39,0x34, + 0x29,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x77,0x69, + 0x64,0x74,0x68,0x3d,0x22,0x31,0x39,0x2e,0x38,0x22, + 0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31, + 0x2e,0x35,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73, + 0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/checkbox_unchecked_svg.cpp b/data/converted/checkbox_unchecked_svg.cpp index a800cb7828..bc31f03740 100644 --- a/data/converted/checkbox_unchecked_svg.cpp +++ b/data/converted/checkbox_unchecked_svg.cpp @@ -2,92 +2,92 @@ #include "../Resources.h" -const size_t checkbox_unchecked_svg_size = 859; -const unsigned char checkbox_unchecked_svg_data[859] = { +const size_t checkbox_unchecked_svg_size = 850; +const unsigned char checkbox_unchecked_svg_data[850] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x39,0x36,0x32,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x31,0x2e,0x39,0x35,0x39,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x39,0x36,0x32,0x20, - 0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x39,0x36, - 0x32,0x20,0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x37, - 0x2e,0x37,0x31,0x2c,0x31,0x2e,0x35,0x63,0x31,0x2e, - 0x35,0x31,0x38,0x2c,0x30,0x2c,0x32,0x2e,0x37,0x35, - 0x32,0x2c,0x31,0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e, - 0x37,0x35,0x32,0x2c,0x32,0x2e,0x37,0x35,0x32,0x76, - 0x31,0x33,0x2e,0x34,0x35,0x35,0x63,0x30,0x2c,0x31, - 0x2e,0x35,0x31,0x38,0x2d,0x31,0x2e,0x32,0x33,0x34, - 0x2c,0x32,0x2e,0x37,0x35,0x32,0x2d,0x32,0x2e,0x37, - 0x35,0x32,0x2c,0x32,0x2e,0x37,0x35,0x32,0x48,0x34, - 0x2e,0x32,0x35,0x32,0x0d,0x0a,0x09,0x63,0x2d,0x31, - 0x2e,0x35,0x31,0x38,0x2c,0x30,0x2d,0x32,0x2e,0x37, - 0x35,0x32,0x2d,0x31,0x2e,0x32,0x33,0x34,0x2d,0x32, - 0x2e,0x37,0x35,0x32,0x2d,0x32,0x2e,0x37,0x35,0x32, - 0x56,0x34,0x2e,0x32,0x35,0x32,0x43,0x31,0x2e,0x35, - 0x2c,0x32,0x2e,0x37,0x33,0x34,0x2c,0x32,0x2e,0x37, - 0x33,0x34,0x2c,0x31,0x2e,0x35,0x2c,0x34,0x2e,0x32, - 0x35,0x32,0x2c,0x31,0x2e,0x35,0x48,0x31,0x37,0x2e, - 0x37,0x31,0x20,0x4d,0x31,0x37,0x2e,0x37,0x31,0x2c, - 0x30,0x48,0x34,0x2e,0x32,0x35,0x32,0x43,0x31,0x2e, - 0x39,0x31,0x34,0x2c,0x30,0x2c,0x30,0x2c,0x31,0x2e, - 0x39,0x31,0x34,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35, - 0x32,0x76,0x31,0x33,0x2e,0x34,0x35,0x35,0x0d,0x0a, - 0x09,0x63,0x30,0x2c,0x32,0x2e,0x33,0x33,0x39,0x2c, - 0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x2e,0x32,0x35, - 0x32,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e, - 0x32,0x35,0x32,0x48,0x31,0x37,0x2e,0x37,0x31,0x63, - 0x32,0x2e,0x33,0x33,0x39,0x2c,0x30,0x2c,0x34,0x2e, - 0x32,0x35,0x32,0x2d,0x31,0x2e,0x39,0x31,0x33,0x2c, - 0x34,0x2e,0x32,0x35,0x32,0x2d,0x34,0x2e,0x32,0x35, - 0x32,0x56,0x34,0x2e,0x32,0x35,0x32,0x43,0x32,0x31, - 0x2e,0x39,0x36,0x32,0x2c,0x31,0x2e,0x39,0x31,0x34, - 0x2c,0x32,0x30,0x2e,0x30,0x34,0x39,0x2c,0x30,0x2c, - 0x31,0x37,0x2e,0x37,0x31,0x2c,0x30,0x4c,0x31,0x37, - 0x2e,0x37,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, + 0x2e,0x39,0x36,0x32,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, + 0x35,0x39,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, + 0x31,0x2e,0x39,0x36,0x32,0x20,0x32,0x31,0x2e,0x39, + 0x35,0x39,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x32,0x31,0x2e,0x39,0x36,0x32,0x20,0x32,0x31, + 0x2e,0x39,0x35,0x39,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x37,0x2e,0x37,0x31,0x2c,0x31, + 0x2e,0x35,0x63,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, + 0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x31,0x2e,0x32, + 0x33,0x34,0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32, + 0x2e,0x37,0x35,0x32,0x76,0x31,0x33,0x2e,0x34,0x35, + 0x35,0x63,0x30,0x2c,0x31,0x2e,0x35,0x31,0x38,0x2d, + 0x31,0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e,0x37,0x35, + 0x32,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32,0x2e, + 0x37,0x35,0x32,0x48,0x34,0x2e,0x32,0x35,0x32,0x0a, + 0x09,0x63,0x2d,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, + 0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x31,0x2e,0x32, + 0x33,0x34,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x32, + 0x2e,0x37,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, + 0x43,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x37,0x33,0x34, + 0x2c,0x32,0x2e,0x37,0x33,0x34,0x2c,0x31,0x2e,0x35, + 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x31,0x2e,0x35, + 0x48,0x31,0x37,0x2e,0x37,0x31,0x20,0x4d,0x31,0x37, + 0x2e,0x37,0x31,0x2c,0x30,0x48,0x34,0x2e,0x32,0x35, + 0x32,0x43,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, + 0x30,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, + 0x34,0x2e,0x32,0x35,0x32,0x76,0x31,0x33,0x2e,0x34, + 0x35,0x35,0x0a,0x09,0x63,0x30,0x2c,0x32,0x2e,0x33, + 0x33,0x39,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34, + 0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32, + 0x2c,0x34,0x2e,0x32,0x35,0x32,0x48,0x31,0x37,0x2e, + 0x37,0x31,0x63,0x32,0x2e,0x33,0x33,0x39,0x2c,0x30, + 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x31,0x2e,0x39, + 0x31,0x33,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x34, + 0x2e,0x32,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, + 0x43,0x32,0x31,0x2e,0x39,0x36,0x32,0x2c,0x31,0x2e, + 0x39,0x31,0x34,0x2c,0x32,0x30,0x2e,0x30,0x34,0x39, + 0x2c,0x30,0x2c,0x31,0x37,0x2e,0x37,0x31,0x2c,0x30, + 0x4c,0x31,0x37,0x2e,0x37,0x31,0x2c,0x30,0x7a,0x22, + 0x2f,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/fav_add_svg.cpp b/data/converted/fav_add_svg.cpp index 4bd2a33047..02365f5fee 100644 --- a/data/converted/fav_add_svg.cpp +++ b/data/converted/fav_add_svg.cpp @@ -2,71 +2,71 @@ #include "../Resources.h" -const size_t fav_add_svg_size = 650; -const unsigned char fav_add_svg_data[650] = { +const size_t fav_add_svg_size = 638; +const unsigned char fav_add_svg_data[638] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, - 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x72,0x65,0x63,0x74,0x20,0x79,0x3d,0x22,0x31,0x30, - 0x2e,0x32,0x35,0x31,0x22,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x31,0x2e,0x35,0x22,0x2f,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67, - 0x3e,0x0d,0x0a,0x09,0x3c,0x72,0x65,0x63,0x74,0x20, - 0x78,0x3d,0x22,0x39,0x2e,0x37,0x35,0x31,0x22,0x20, + 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, + 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, + 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, + 0x3e,0x0a,0x09,0x3c,0x72,0x65,0x63,0x74,0x20,0x79, + 0x3d,0x22,0x31,0x30,0x2e,0x32,0x35,0x31,0x22,0x20, 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, 0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x68,0x65,0x69, - 0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30,0x30, - 0x32,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x2e, + 0x35,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x72,0x65,0x63,0x74, + 0x20,0x78,0x3d,0x22,0x39,0x2e,0x37,0x35,0x31,0x22, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, + 0x37,0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64,0x74, + 0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/fav_remove_svg.cpp b/data/converted/fav_remove_svg.cpp index 086ae9e76a..07ea8f7593 100644 --- a/data/converted/fav_remove_svg.cpp +++ b/data/converted/fav_remove_svg.cpp @@ -2,64 +2,64 @@ #include "../Resources.h" -const size_t fav_remove_svg_size = 576; -const unsigned char fav_remove_svg_data[576] = { +const size_t fav_remove_svg_size = 567; +const unsigned char fav_remove_svg_data[567] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20, - 0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x30,0x30, - 0x32,0x20,0x32,0x32,0x2e,0x30,0x30,0x32,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x72,0x65,0x63,0x74,0x20,0x79,0x3d,0x22,0x31,0x30, - 0x2e,0x32,0x35,0x31,0x22,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x31,0x2e,0x35,0x22,0x2f,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, - 0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, + 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, + 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, + 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, + 0x3e,0x0a,0x09,0x3c,0x72,0x65,0x63,0x74,0x20,0x79, + 0x3d,0x22,0x31,0x30,0x2e,0x32,0x35,0x31,0x22,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x22,0x20, + 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x2e, + 0x35,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/frame_png.cpp b/data/converted/frame_png.cpp index 1e986b9146..2afd0f94e8 100644 --- a/data/converted/frame_png.cpp +++ b/data/converted/frame_png.cpp @@ -178,3 +178,4 @@ const unsigned char frame_png_data[1729] = { 0xb5,0x2e,0x8e,0x23,0xf2,0x34,0xce,0x00,0x00,0x00, 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; + diff --git a/data/converted/help_analog_down_svg.cpp b/data/converted/help_analog_down_svg.cpp new file mode 100644 index 0000000000..1a58a01893 --- /dev/null +++ b/data/converted/help_analog_down_svg.cpp @@ -0,0 +1,289 @@ +//this file was auto-generated from "analog_down.svg" by res2h + +#include "../Resources.h" + +const size_t help_analog_down_svg_size = 2809; +const unsigned char help_analog_down_svg_data[2809] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73, + 0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20, + 0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, + 0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31, + 0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, + 0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68, + 0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e, + 0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31, + 0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73, + 0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e, + 0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, + 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c, + 0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c, + 0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64, + 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x2c,0x20, + 0x30,0x2c,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x3e,0x0a, + 0x20,0x20,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x32,0x32,0x2e,0x31,0x34,0x35,0x2c, + 0x31,0x38,0x2e,0x35,0x31,0x32,0x20,0x43,0x32,0x32, + 0x2e,0x31,0x34,0x35,0x2c,0x32,0x30,0x2e,0x35,0x32, + 0x35,0x20,0x32,0x30,0x2e,0x35,0x30,0x36,0x2c,0x32, + 0x32,0x2e,0x31,0x36,0x31,0x20,0x31,0x38,0x2e,0x34, + 0x39,0x34,0x2c,0x32,0x32,0x2e,0x31,0x36,0x31,0x20, + 0x43,0x31,0x36,0x2e,0x34,0x38,0x32,0x2c,0x32,0x32, + 0x2e,0x31,0x36,0x31,0x20,0x31,0x34,0x2e,0x38,0x34, + 0x34,0x2c,0x32,0x30,0x2e,0x35,0x32,0x33,0x20,0x31, + 0x34,0x2e,0x38,0x34,0x34,0x2c,0x31,0x38,0x2e,0x35, + 0x31,0x32,0x20,0x43,0x31,0x34,0x2e,0x38,0x34,0x34, + 0x2c,0x31,0x36,0x2e,0x34,0x39,0x39,0x20,0x31,0x36, + 0x2e,0x34,0x38,0x33,0x2c,0x31,0x34,0x2e,0x38,0x36, + 0x32,0x20,0x31,0x38,0x2e,0x34,0x39,0x34,0x2c,0x31, + 0x34,0x2e,0x38,0x36,0x32,0x20,0x43,0x32,0x30,0x2e, + 0x35,0x30,0x37,0x2c,0x31,0x34,0x2e,0x38,0x36,0x31, + 0x20,0x32,0x32,0x2e,0x31,0x34,0x35,0x2c,0x31,0x36, + 0x2e,0x34,0x39,0x39,0x20,0x32,0x32,0x2e,0x31,0x34, + 0x35,0x2c,0x31,0x38,0x2e,0x35,0x31,0x32,0x20,0x7a, + 0x20,0x4d,0x31,0x36,0x2e,0x33,0x34,0x33,0x2c,0x31, + 0x38,0x2e,0x35,0x31,0x32,0x20,0x43,0x31,0x36,0x2e, + 0x33,0x34,0x33,0x2c,0x31,0x39,0x2e,0x36,0x39,0x38, + 0x20,0x31,0x37,0x2e,0x33,0x30,0x38,0x2c,0x32,0x30, + 0x2e,0x36,0x36,0x31,0x20,0x31,0x38,0x2e,0x34,0x39, + 0x33,0x2c,0x32,0x30,0x2e,0x36,0x36,0x31,0x20,0x43, + 0x31,0x39,0x2e,0x36,0x37,0x38,0x2c,0x32,0x30,0x2e, + 0x36,0x36,0x31,0x20,0x32,0x30,0x2e,0x36,0x34,0x34, + 0x2c,0x31,0x39,0x2e,0x36,0x39,0x36,0x20,0x32,0x30, + 0x2e,0x36,0x34,0x34,0x2c,0x31,0x38,0x2e,0x35,0x31, + 0x32,0x20,0x43,0x32,0x30,0x2e,0x36,0x34,0x34,0x2c, + 0x31,0x37,0x2e,0x33,0x32,0x36,0x20,0x31,0x39,0x2e, + 0x36,0x37,0x38,0x2c,0x31,0x36,0x2e,0x33,0x36,0x32, + 0x20,0x31,0x38,0x2e,0x34,0x39,0x33,0x2c,0x31,0x36, + 0x2e,0x33,0x36,0x32,0x20,0x43,0x31,0x37,0x2e,0x33, + 0x30,0x38,0x2c,0x31,0x36,0x2e,0x33,0x36,0x31,0x20, + 0x31,0x36,0x2e,0x33,0x34,0x33,0x2c,0x31,0x37,0x2e, + 0x33,0x32,0x36,0x20,0x31,0x36,0x2e,0x33,0x34,0x33, + 0x2c,0x31,0x38,0x2e,0x35,0x31,0x32,0x20,0x7a,0x22, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d, + 0x22,0x4d,0x38,0x2e,0x35,0x38,0x2c,0x31,0x35,0x2e, + 0x35,0x30,0x37,0x20,0x4c,0x38,0x2e,0x35,0x38,0x2c, + 0x32,0x31,0x2e,0x35,0x31,0x39,0x20,0x43,0x38,0x2e, + 0x35,0x38,0x2c,0x32,0x31,0x2e,0x37,0x39,0x32,0x20, + 0x38,0x2e,0x34,0x33,0x2c,0x32,0x32,0x2e,0x30,0x34, + 0x34,0x20,0x38,0x2e,0x31,0x39,0x2c,0x32,0x32,0x2e, + 0x31,0x37,0x36,0x20,0x43,0x37,0x2e,0x39,0x34,0x39, + 0x2c,0x32,0x32,0x2e,0x33,0x30,0x38,0x20,0x37,0x2e, + 0x36,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x39,0x37, + 0x20,0x37,0x2e,0x34,0x32,0x34,0x2c,0x32,0x32,0x2e, + 0x31,0x35,0x20,0x4c,0x32,0x2e,0x37,0x34,0x2c,0x31, + 0x39,0x2e,0x31,0x34,0x35,0x20,0x43,0x32,0x2e,0x33, + 0x30,0x39,0x2c,0x31,0x38,0x2e,0x38,0x36,0x39,0x20, + 0x32,0x2e,0x33,0x31,0x2c,0x31,0x38,0x2e,0x31,0x35, + 0x39,0x20,0x32,0x2e,0x37,0x34,0x2c,0x31,0x37,0x2e, + 0x38,0x38,0x31,0x20,0x4c,0x37,0x2e,0x34,0x32,0x34, + 0x2c,0x31,0x34,0x2e,0x38,0x37,0x36,0x20,0x43,0x37, + 0x2e,0x36,0x35,0x35,0x2c,0x31,0x34,0x2e,0x37,0x32, + 0x39,0x20,0x37,0x2e,0x39,0x34,0x38,0x2c,0x31,0x34, + 0x2e,0x37,0x31,0x37,0x20,0x38,0x2e,0x31,0x39,0x2c, + 0x31,0x34,0x2e,0x38,0x35,0x20,0x43,0x38,0x2e,0x34, + 0x33,0x2c,0x31,0x34,0x2e,0x39,0x38,0x20,0x38,0x2e, + 0x35,0x38,0x2c,0x31,0x35,0x2e,0x32,0x33,0x32,0x20, + 0x38,0x2e,0x35,0x38,0x2c,0x31,0x35,0x2e,0x35,0x30, + 0x37,0x20,0x7a,0x20,0x4d,0x37,0x2e,0x30,0x38,0x2c, + 0x32,0x30,0x2e,0x31,0x34,0x36,0x20,0x4c,0x37,0x2e, + 0x30,0x38,0x2c,0x31,0x36,0x2e,0x38,0x37,0x38,0x20, + 0x4c,0x34,0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e, + 0x35,0x31,0x33,0x20,0x4c,0x37,0x2e,0x30,0x38,0x2c, + 0x32,0x30,0x2e,0x31,0x34,0x36,0x20,0x7a,0x22,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x3c,0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, + 0x4d,0x31,0x38,0x2e,0x34,0x39,0x34,0x2c,0x33,0x33, + 0x2e,0x39,0x31,0x38,0x20,0x4c,0x32,0x31,0x2e,0x34, + 0x39,0x38,0x2c,0x32,0x39,0x2e,0x32,0x33,0x34,0x20, + 0x4c,0x31,0x35,0x2e,0x34,0x38,0x38,0x2c,0x32,0x39, + 0x2e,0x32,0x33,0x34,0x20,0x4c,0x31,0x38,0x2e,0x34, + 0x39,0x34,0x2c,0x33,0x33,0x2e,0x39,0x31,0x38,0x20, + 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x32, + 0x34,0x38,0x2c,0x32,0x39,0x2e,0x32,0x33,0x34,0x20, + 0x43,0x32,0x32,0x2e,0x32,0x34,0x38,0x2c,0x32,0x39, + 0x2e,0x33,0x37,0x35,0x20,0x32,0x32,0x2e,0x32,0x30, + 0x38,0x2c,0x32,0x39,0x2e,0x35,0x31,0x36,0x20,0x32, + 0x32,0x2e,0x31,0x32,0x39,0x2c,0x32,0x39,0x2e,0x36, + 0x33,0x39,0x20,0x4c,0x31,0x39,0x2e,0x31,0x32,0x36, + 0x2c,0x33,0x34,0x2e,0x33,0x32,0x33,0x20,0x43,0x31, + 0x38,0x2e,0x39,0x38,0x38,0x2c,0x33,0x34,0x2e,0x35, + 0x33,0x38,0x20,0x31,0x38,0x2e,0x37,0x35,0x2c,0x33, + 0x34,0x2e,0x36,0x36,0x38,0x20,0x31,0x38,0x2e,0x34, + 0x39,0x35,0x2c,0x33,0x34,0x2e,0x36,0x36,0x38,0x20, + 0x43,0x31,0x38,0x2e,0x32,0x34,0x2c,0x33,0x34,0x2e, + 0x36,0x36,0x38,0x20,0x31,0x38,0x2e,0x30,0x30,0x32, + 0x2c,0x33,0x34,0x2e,0x35,0x33,0x38,0x20,0x31,0x37, + 0x2e,0x38,0x36,0x34,0x2c,0x33,0x34,0x2e,0x33,0x32, + 0x33,0x20,0x4c,0x31,0x34,0x2e,0x38,0x35,0x38,0x2c, + 0x32,0x39,0x2e,0x36,0x33,0x39,0x20,0x43,0x31,0x34, + 0x2e,0x37,0x31,0x2c,0x32,0x39,0x2e,0x34,0x30,0x39, + 0x20,0x31,0x34,0x2e,0x37,0x2c,0x32,0x39,0x2e,0x31, + 0x31,0x35,0x20,0x31,0x34,0x2e,0x38,0x33,0x31,0x2c, + 0x32,0x38,0x2e,0x38,0x37,0x33,0x20,0x43,0x31,0x34, + 0x2e,0x39,0x36,0x32,0x2c,0x32,0x38,0x2e,0x36,0x33, + 0x33,0x20,0x31,0x35,0x2e,0x32,0x31,0x35,0x2c,0x32, + 0x38,0x2e,0x34,0x38,0x33,0x20,0x31,0x35,0x2e,0x34, + 0x38,0x39,0x2c,0x32,0x38,0x2e,0x34,0x38,0x33,0x20, + 0x4c,0x32,0x31,0x2e,0x34,0x39,0x39,0x2c,0x32,0x38, + 0x2e,0x34,0x38,0x33,0x20,0x43,0x32,0x31,0x2e,0x37, + 0x37,0x33,0x2c,0x32,0x38,0x2e,0x34,0x38,0x33,0x20, + 0x32,0x32,0x2e,0x30,0x32,0x35,0x2c,0x32,0x38,0x2e, + 0x36,0x33,0x31,0x20,0x32,0x32,0x2e,0x31,0x35,0x37, + 0x2c,0x32,0x38,0x2e,0x38,0x37,0x33,0x20,0x43,0x32, + 0x32,0x2e,0x32,0x31,0x38,0x2c,0x32,0x38,0x2e,0x39, + 0x38,0x37,0x20,0x32,0x32,0x2e,0x32,0x34,0x38,0x2c, + 0x32,0x39,0x2e,0x31,0x31,0x31,0x20,0x32,0x32,0x2e, + 0x32,0x34,0x38,0x2c,0x32,0x39,0x2e,0x32,0x33,0x34, + 0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x34,0x39,0x34, + 0x2c,0x33,0x32,0x2e,0x35,0x32,0x39,0x20,0x4c,0x32, + 0x30,0x2e,0x31,0x32,0x36,0x2c,0x32,0x39,0x2e,0x39, + 0x38,0x34,0x20,0x4c,0x31,0x36,0x2e,0x38,0x36,0x31, + 0x2c,0x32,0x39,0x2e,0x39,0x38,0x34,0x20,0x4c,0x31, + 0x38,0x2e,0x34,0x39,0x34,0x2c,0x33,0x32,0x2e,0x35, + 0x32,0x39,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x67, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x32, + 0x34,0x38,0x2c,0x37,0x2e,0x38,0x34,0x38,0x20,0x43, + 0x32,0x32,0x2e,0x32,0x34,0x38,0x2c,0x37,0x2e,0x39, + 0x37,0x32,0x20,0x32,0x32,0x2e,0x32,0x31,0x38,0x2c, + 0x38,0x2e,0x30,0x39,0x34,0x20,0x32,0x32,0x2e,0x31, + 0x35,0x36,0x2c,0x38,0x2e,0x32,0x30,0x36,0x20,0x43, + 0x32,0x32,0x2e,0x30,0x32,0x34,0x2c,0x38,0x2e,0x34, + 0x34,0x37,0x20,0x32,0x31,0x2e,0x37,0x37,0x32,0x2c, + 0x38,0x2e,0x35,0x39,0x38,0x20,0x32,0x31,0x2e,0x34, + 0x39,0x38,0x2c,0x38,0x2e,0x35,0x39,0x38,0x20,0x4c, + 0x31,0x35,0x2e,0x34,0x38,0x38,0x2c,0x38,0x2e,0x35, + 0x39,0x38,0x20,0x43,0x31,0x35,0x2e,0x32,0x31,0x34, + 0x2c,0x38,0x2e,0x35,0x39,0x38,0x20,0x31,0x34,0x2e, + 0x39,0x36,0x32,0x2c,0x38,0x2e,0x34,0x34,0x39,0x20, + 0x31,0x34,0x2e,0x38,0x33,0x2c,0x38,0x2e,0x32,0x30, + 0x36,0x20,0x43,0x31,0x34,0x2e,0x36,0x39,0x39,0x2c, + 0x37,0x2e,0x39,0x36,0x37,0x20,0x31,0x34,0x2e,0x37, + 0x30,0x37,0x2c,0x37,0x2e,0x36,0x37,0x33,0x20,0x31, + 0x34,0x2e,0x38,0x35,0x37,0x2c,0x37,0x2e,0x34,0x34, + 0x31,0x20,0x4c,0x31,0x37,0x2e,0x38,0x36,0x32,0x2c, + 0x32,0x2e,0x37,0x35,0x36,0x20,0x43,0x31,0x38,0x2c, + 0x32,0x2e,0x35,0x34,0x31,0x20,0x31,0x38,0x2e,0x32, + 0x33,0x38,0x2c,0x32,0x2e,0x34,0x31,0x31,0x20,0x31, + 0x38,0x2e,0x34,0x39,0x33,0x2c,0x32,0x2e,0x34,0x31, + 0x31,0x20,0x43,0x31,0x38,0x2e,0x37,0x34,0x38,0x2c, + 0x32,0x2e,0x34,0x31,0x31,0x20,0x31,0x38,0x2e,0x39, + 0x38,0x36,0x2c,0x32,0x2e,0x35,0x34,0x31,0x20,0x31, + 0x39,0x2e,0x31,0x32,0x34,0x2c,0x32,0x2e,0x37,0x35, + 0x36,0x20,0x4c,0x32,0x32,0x2e,0x31,0x32,0x38,0x2c, + 0x37,0x2e,0x34,0x34,0x31,0x20,0x43,0x32,0x32,0x2e, + 0x32,0x30,0x38,0x2c,0x37,0x2e,0x35,0x36,0x35,0x20, + 0x32,0x32,0x2e,0x32,0x34,0x38,0x2c,0x37,0x2e,0x37, + 0x30,0x37,0x20,0x32,0x32,0x2e,0x32,0x34,0x38,0x2c, + 0x37,0x2e,0x38,0x34,0x38,0x20,0x7a,0x20,0x4d,0x31, + 0x36,0x2e,0x38,0x36,0x2c,0x37,0x2e,0x30,0x39,0x38, + 0x20,0x4c,0x32,0x30,0x2e,0x31,0x32,0x36,0x2c,0x37, + 0x2e,0x30,0x39,0x38,0x20,0x4c,0x31,0x38,0x2e,0x34, + 0x39,0x33,0x2c,0x34,0x2e,0x35,0x35,0x32,0x20,0x4c, + 0x31,0x36,0x2e,0x38,0x36,0x2c,0x37,0x2e,0x30,0x39, + 0x38,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x64,0x3d,0x22,0x4d,0x33,0x34,0x2e,0x35, + 0x39,0x2c,0x31,0x38,0x2e,0x35,0x31,0x33,0x20,0x4c, + 0x33,0x34,0x2e,0x35,0x39,0x2c,0x31,0x38,0x2e,0x35, + 0x31,0x33,0x20,0x43,0x33,0x34,0x2e,0x35,0x39,0x2c, + 0x31,0x38,0x2e,0x37,0x36,0x38,0x20,0x33,0x34,0x2e, + 0x34,0x36,0x2c,0x31,0x39,0x2e,0x30,0x30,0x35,0x20, + 0x33,0x34,0x2e,0x32,0x34,0x35,0x2c,0x31,0x39,0x2e, + 0x31,0x34,0x34,0x20,0x4c,0x32,0x39,0x2e,0x35,0x36, + 0x31,0x2c,0x32,0x32,0x2e,0x31,0x34,0x39,0x20,0x43, + 0x32,0x39,0x2e,0x33,0x33,0x2c,0x32,0x32,0x2e,0x32, + 0x39,0x36,0x20,0x32,0x39,0x2e,0x30,0x33,0x37,0x2c, + 0x32,0x32,0x2e,0x33,0x30,0x37,0x20,0x32,0x38,0x2e, + 0x37,0x39,0x35,0x2c,0x32,0x32,0x2e,0x31,0x37,0x35, + 0x20,0x43,0x32,0x38,0x2e,0x35,0x35,0x33,0x2c,0x32, + 0x32,0x2e,0x30,0x34,0x33,0x20,0x32,0x38,0x2e,0x34, + 0x30,0x34,0x2c,0x32,0x31,0x2e,0x37,0x39,0x31,0x20, + 0x32,0x38,0x2e,0x34,0x30,0x34,0x2c,0x32,0x31,0x2e, + 0x35,0x31,0x38,0x20,0x4c,0x32,0x38,0x2e,0x34,0x30, + 0x34,0x2c,0x31,0x35,0x2e,0x35,0x30,0x36,0x20,0x43, + 0x32,0x38,0x2e,0x34,0x30,0x34,0x2c,0x31,0x35,0x2e, + 0x32,0x33,0x33,0x20,0x32,0x38,0x2e,0x35,0x35,0x32, + 0x2c,0x31,0x34,0x2e,0x39,0x38,0x31,0x20,0x32,0x38, + 0x2e,0x37,0x39,0x35,0x2c,0x31,0x34,0x2e,0x38,0x34, + 0x39,0x20,0x43,0x32,0x39,0x2e,0x30,0x33,0x35,0x2c, + 0x31,0x34,0x2e,0x37,0x31,0x36,0x20,0x32,0x39,0x2e, + 0x33,0x32,0x38,0x2c,0x31,0x34,0x2e,0x37,0x32,0x38, + 0x20,0x32,0x39,0x2e,0x35,0x36,0x31,0x2c,0x31,0x34, + 0x2e,0x38,0x37,0x35,0x20,0x4c,0x33,0x34,0x2e,0x32, + 0x34,0x35,0x2c,0x31,0x37,0x2e,0x38,0x38,0x20,0x43, + 0x33,0x34,0x2e,0x34,0x36,0x2c,0x31,0x38,0x2e,0x30, + 0x32,0x20,0x33,0x34,0x2e,0x35,0x39,0x2c,0x31,0x38, + 0x2e,0x32,0x35,0x37,0x20,0x33,0x34,0x2e,0x35,0x39, + 0x2c,0x31,0x38,0x2e,0x35,0x31,0x33,0x20,0x7a,0x20, + 0x4d,0x32,0x39,0x2e,0x39,0x30,0x36,0x2c,0x32,0x30, + 0x2e,0x31,0x34,0x36,0x20,0x4c,0x33,0x32,0x2e,0x34, + 0x35,0x31,0x2c,0x31,0x38,0x2e,0x35,0x31,0x33,0x20, + 0x4c,0x32,0x39,0x2e,0x39,0x30,0x36,0x2c,0x31,0x36, + 0x2e,0x38,0x37,0x38,0x20,0x4c,0x32,0x39,0x2e,0x39, + 0x30,0x36,0x2c,0x32,0x30,0x2e,0x31,0x34,0x36,0x20, + 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x30,0x20,0x43,0x32,0x38,0x2e,0x37,0x36,0x35,0x2c, + 0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x38, + 0x2e,0x32,0x39,0x36,0x20,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x32,0x38,0x2e, + 0x37,0x36,0x35,0x20,0x32,0x38,0x2e,0x37,0x36,0x35, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x31,0x38, + 0x2e,0x35,0x33,0x2c,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x20,0x43,0x38,0x2e,0x32,0x39,0x36,0x2c,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x20,0x30,0x2c,0x32,0x38,0x2e, + 0x37,0x36,0x35,0x20,0x30,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x31,0x20,0x43,0x30,0x2c,0x38,0x2e,0x32,0x39, + 0x36,0x20,0x38,0x2e,0x32,0x39,0x36,0x2c,0x30,0x20, + 0x31,0x38,0x2e,0x35,0x33,0x2c,0x30,0x20,0x7a,0x20, + 0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x31,0x20,0x43, + 0x38,0x2e,0x38,0x34,0x39,0x2c,0x31,0x20,0x31,0x2c, + 0x38,0x2e,0x38,0x34,0x39,0x20,0x31,0x2c,0x31,0x38, + 0x2e,0x35,0x33,0x31,0x20,0x43,0x31,0x2c,0x32,0x38, + 0x2e,0x32,0x31,0x32,0x20,0x38,0x2e,0x38,0x34,0x39, + 0x2c,0x33,0x36,0x2e,0x30,0x36,0x31,0x20,0x31,0x38, + 0x2e,0x35,0x33,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31, + 0x20,0x43,0x32,0x38,0x2e,0x32,0x31,0x32,0x2c,0x33, + 0x36,0x2e,0x30,0x36,0x31,0x20,0x33,0x36,0x2e,0x30, + 0x36,0x31,0x2c,0x32,0x38,0x2e,0x32,0x31,0x32,0x20, + 0x33,0x36,0x2e,0x30,0x36,0x31,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x20,0x43,0x33,0x36,0x2e,0x30,0x36, + 0x31,0x2c,0x38,0x2e,0x38,0x34,0x39,0x20,0x32,0x38, + 0x2e,0x32,0x31,0x32,0x2c,0x31,0x20,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x31,0x20,0x7a,0x22,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, + 0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x3c,0x2f,0x67, + 0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a +}; + diff --git a/data/converted/help_analog_left_svg.cpp b/data/converted/help_analog_left_svg.cpp new file mode 100644 index 0000000000..16f889cf78 --- /dev/null +++ b/data/converted/help_analog_left_svg.cpp @@ -0,0 +1,292 @@ +//this file was auto-generated from "analog_left.svg" by res2h + +#include "../Resources.h" + +const size_t help_analog_left_svg_size = 2834; +const unsigned char help_analog_left_svg_data[2834] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73, + 0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20, + 0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, + 0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31, + 0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, + 0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68, + 0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e, + 0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31, + 0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73, + 0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e, + 0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, + 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c, + 0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c, + 0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64, + 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x2c,0x20, + 0x30,0x2c,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x3e,0x0a, + 0x20,0x20,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x3c,0x67,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, + 0x32,0x32,0x2e,0x31,0x38,0x31,0x20,0x43,0x31,0x36, + 0x2e,0x35,0x31,0x38,0x2c,0x32,0x32,0x2e,0x31,0x38, + 0x31,0x20,0x31,0x34,0x2e,0x38,0x38,0x32,0x2c,0x32, + 0x30,0x2e,0x35,0x34,0x32,0x20,0x31,0x34,0x2e,0x38, + 0x38,0x32,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20,0x43, + 0x31,0x34,0x2e,0x38,0x38,0x32,0x2c,0x31,0x36,0x2e, + 0x35,0x31,0x38,0x20,0x31,0x36,0x2e,0x35,0x32,0x2c, + 0x31,0x34,0x2e,0x38,0x38,0x20,0x31,0x38,0x2e,0x35, + 0x33,0x31,0x2c,0x31,0x34,0x2e,0x38,0x38,0x20,0x43, + 0x32,0x30,0x2e,0x35,0x34,0x34,0x2c,0x31,0x34,0x2e, + 0x38,0x38,0x20,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, + 0x31,0x36,0x2e,0x35,0x31,0x39,0x20,0x32,0x32,0x2e, + 0x31,0x38,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20, + 0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32,0x30, + 0x2e,0x35,0x34,0x33,0x20,0x32,0x30,0x2e,0x35,0x34, + 0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x20,0x31, + 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e,0x31, + 0x38,0x31,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, + 0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x20, + 0x43,0x31,0x37,0x2e,0x33,0x34,0x35,0x2c,0x31,0x36, + 0x2e,0x33,0x37,0x39,0x20,0x31,0x36,0x2e,0x33,0x38, + 0x32,0x2c,0x31,0x37,0x2e,0x33,0x34,0x34,0x20,0x31, + 0x36,0x2e,0x33,0x38,0x32,0x2c,0x31,0x38,0x2e,0x35, + 0x32,0x39,0x20,0x43,0x31,0x36,0x2e,0x33,0x38,0x32, + 0x2c,0x31,0x39,0x2e,0x37,0x31,0x34,0x20,0x31,0x37, + 0x2e,0x33,0x34,0x37,0x2c,0x32,0x30,0x2e,0x36,0x38, + 0x20,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x30, + 0x2e,0x36,0x38,0x20,0x43,0x31,0x39,0x2e,0x37,0x31, + 0x37,0x2c,0x32,0x30,0x2e,0x36,0x38,0x20,0x32,0x30, + 0x2e,0x36,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x31, + 0x34,0x20,0x32,0x30,0x2e,0x36,0x38,0x31,0x2c,0x31, + 0x38,0x2e,0x35,0x32,0x39,0x20,0x43,0x32,0x30,0x2e, + 0x36,0x38,0x32,0x2c,0x31,0x37,0x2e,0x33,0x34,0x34, + 0x20,0x31,0x39,0x2e,0x37,0x31,0x37,0x2c,0x31,0x36, + 0x2e,0x33,0x37,0x39,0x20,0x31,0x38,0x2e,0x35,0x33, + 0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x20,0x7a, + 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33, + 0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x20,0x4c,0x31, + 0x35,0x2e,0x35,0x32,0x34,0x2c,0x38,0x2e,0x36,0x31, + 0x36,0x20,0x43,0x31,0x35,0x2e,0x32,0x35,0x31,0x2c, + 0x38,0x2e,0x36,0x31,0x36,0x20,0x31,0x34,0x2e,0x39, + 0x39,0x39,0x2c,0x38,0x2e,0x34,0x36,0x36,0x20,0x31, + 0x34,0x2e,0x38,0x36,0x37,0x2c,0x38,0x2e,0x32,0x32, + 0x36,0x20,0x43,0x31,0x34,0x2e,0x37,0x33,0x35,0x2c, + 0x37,0x2e,0x39,0x38,0x35,0x20,0x31,0x34,0x2e,0x37, + 0x34,0x36,0x2c,0x37,0x2e,0x36,0x39,0x32,0x20,0x31, + 0x34,0x2e,0x38,0x39,0x33,0x2c,0x37,0x2e,0x34,0x36, + 0x20,0x4c,0x31,0x37,0x2e,0x38,0x39,0x38,0x2c,0x32, + 0x2e,0x37,0x37,0x36,0x20,0x43,0x31,0x38,0x2e,0x31, + 0x37,0x34,0x2c,0x32,0x2e,0x33,0x34,0x35,0x20,0x31, + 0x38,0x2e,0x38,0x38,0x34,0x2c,0x32,0x2e,0x33,0x34, + 0x36,0x20,0x31,0x39,0x2e,0x31,0x36,0x32,0x2c,0x32, + 0x2e,0x37,0x37,0x36,0x20,0x4c,0x32,0x32,0x2e,0x31, + 0x36,0x37,0x2c,0x37,0x2e,0x34,0x36,0x20,0x43,0x32, + 0x32,0x2e,0x33,0x31,0x34,0x2c,0x37,0x2e,0x36,0x39, + 0x31,0x20,0x32,0x32,0x2e,0x33,0x32,0x36,0x2c,0x37, + 0x2e,0x39,0x38,0x34,0x20,0x32,0x32,0x2e,0x31,0x39, + 0x33,0x2c,0x38,0x2e,0x32,0x32,0x36,0x20,0x43,0x32, + 0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36, + 0x36,0x20,0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38, + 0x2e,0x36,0x31,0x36,0x20,0x32,0x31,0x2e,0x35,0x33, + 0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x20,0x7a,0x20, + 0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e, + 0x31,0x31,0x36,0x20,0x4c,0x32,0x30,0x2e,0x31,0x36, + 0x35,0x2c,0x37,0x2e,0x31,0x31,0x36,0x20,0x4c,0x31, + 0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35,0x37,0x31, + 0x20,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, + 0x2e,0x31,0x31,0x36,0x20,0x7a,0x22,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, + 0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x33,0x2e,0x31,0x32,0x35,0x2c,0x31, + 0x38,0x2e,0x35,0x33,0x20,0x4c,0x37,0x2e,0x38,0x30, + 0x39,0x2c,0x32,0x31,0x2e,0x35,0x33,0x34,0x20,0x4c, + 0x37,0x2e,0x38,0x30,0x39,0x2c,0x31,0x35,0x2e,0x35, + 0x32,0x34,0x20,0x4c,0x33,0x2e,0x31,0x32,0x35,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x20,0x7a,0x22,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c, + 0x32,0x32,0x2e,0x32,0x38,0x34,0x20,0x43,0x37,0x2e, + 0x36,0x36,0x38,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x20,0x37,0x2e,0x35,0x32,0x37,0x2c,0x32,0x32,0x2e, + 0x32,0x34,0x34,0x20,0x37,0x2e,0x34,0x30,0x34,0x2c, + 0x32,0x32,0x2e,0x31,0x36,0x35,0x20,0x4c,0x32,0x2e, + 0x37,0x32,0x2c,0x31,0x39,0x2e,0x31,0x36,0x32,0x20, + 0x43,0x32,0x2e,0x35,0x30,0x35,0x2c,0x31,0x39,0x2e, + 0x30,0x32,0x34,0x20,0x32,0x2e,0x33,0x37,0x35,0x2c, + 0x31,0x38,0x2e,0x37,0x38,0x36,0x20,0x32,0x2e,0x33, + 0x37,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20, + 0x43,0x32,0x2e,0x33,0x37,0x35,0x2c,0x31,0x38,0x2e, + 0x32,0x37,0x36,0x20,0x32,0x2e,0x35,0x30,0x35,0x2c, + 0x31,0x38,0x2e,0x30,0x33,0x38,0x20,0x32,0x2e,0x37, + 0x32,0x2c,0x31,0x37,0x2e,0x39,0x20,0x4c,0x37,0x2e, + 0x34,0x30,0x34,0x2c,0x31,0x34,0x2e,0x38,0x39,0x34, + 0x20,0x43,0x37,0x2e,0x36,0x33,0x34,0x2c,0x31,0x34, + 0x2e,0x37,0x34,0x36,0x20,0x37,0x2e,0x39,0x32,0x38, + 0x2c,0x31,0x34,0x2e,0x37,0x33,0x36,0x20,0x38,0x2e, + 0x31,0x37,0x2c,0x31,0x34,0x2e,0x38,0x36,0x37,0x20, + 0x43,0x38,0x2e,0x34,0x31,0x2c,0x31,0x34,0x2e,0x39, + 0x39,0x38,0x20,0x38,0x2e,0x35,0x36,0x2c,0x31,0x35, + 0x2e,0x32,0x35,0x31,0x20,0x38,0x2e,0x35,0x36,0x2c, + 0x31,0x35,0x2e,0x35,0x32,0x35,0x20,0x4c,0x38,0x2e, + 0x35,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x35,0x20, + 0x43,0x38,0x2e,0x35,0x36,0x2c,0x32,0x31,0x2e,0x38, + 0x30,0x39,0x20,0x38,0x2e,0x34,0x31,0x32,0x2c,0x32, + 0x32,0x2e,0x30,0x36,0x31,0x20,0x38,0x2e,0x31,0x37, + 0x2c,0x32,0x32,0x2e,0x31,0x39,0x33,0x20,0x43,0x38, + 0x2e,0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x35, + 0x34,0x20,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x34,0x20,0x37,0x2e,0x38,0x30,0x39, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x20,0x7a,0x20, + 0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x20,0x4c,0x37,0x2e,0x30,0x35,0x39,0x2c, + 0x32,0x30,0x2e,0x31,0x36,0x32,0x20,0x4c,0x37,0x2e, + 0x30,0x35,0x39,0x2c,0x31,0x36,0x2e,0x38,0x39,0x37, + 0x20,0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38, + 0x2e,0x35,0x33,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, + 0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x2f,0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, + 0x4d,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x34,0x20,0x43,0x32,0x39,0x2e,0x30, + 0x37,0x31,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x20, + 0x32,0x38,0x2e,0x39,0x34,0x39,0x2c,0x32,0x32,0x2e, + 0x32,0x35,0x34,0x20,0x32,0x38,0x2e,0x38,0x33,0x37, + 0x2c,0x32,0x32,0x2e,0x31,0x39,0x32,0x20,0x43,0x32, + 0x38,0x2e,0x35,0x39,0x36,0x2c,0x32,0x32,0x2e,0x30, + 0x36,0x20,0x32,0x38,0x2e,0x34,0x34,0x35,0x2c,0x32, + 0x31,0x2e,0x38,0x30,0x38,0x20,0x32,0x38,0x2e,0x34, + 0x34,0x35,0x2c,0x32,0x31,0x2e,0x35,0x33,0x34,0x20, + 0x4c,0x32,0x38,0x2e,0x34,0x34,0x35,0x2c,0x31,0x35, + 0x2e,0x35,0x32,0x34,0x20,0x43,0x32,0x38,0x2e,0x34, + 0x34,0x35,0x2c,0x31,0x35,0x2e,0x32,0x35,0x20,0x32, + 0x38,0x2e,0x35,0x39,0x34,0x2c,0x31,0x34,0x2e,0x39, + 0x39,0x38,0x20,0x32,0x38,0x2e,0x38,0x33,0x37,0x2c, + 0x31,0x34,0x2e,0x38,0x36,0x36,0x20,0x43,0x32,0x39, + 0x2e,0x30,0x37,0x36,0x2c,0x31,0x34,0x2e,0x37,0x33, + 0x35,0x20,0x32,0x39,0x2e,0x33,0x37,0x2c,0x31,0x34, + 0x2e,0x37,0x34,0x33,0x20,0x32,0x39,0x2e,0x36,0x30, + 0x32,0x2c,0x31,0x34,0x2e,0x38,0x39,0x33,0x20,0x4c, + 0x33,0x34,0x2e,0x32,0x38,0x37,0x2c,0x31,0x37,0x2e, + 0x38,0x39,0x38,0x20,0x43,0x33,0x34,0x2e,0x35,0x30, + 0x32,0x2c,0x31,0x38,0x2e,0x30,0x33,0x36,0x20,0x33, + 0x34,0x2e,0x36,0x33,0x32,0x2c,0x31,0x38,0x2e,0x32, + 0x37,0x34,0x20,0x33,0x34,0x2e,0x36,0x33,0x32,0x2c, + 0x31,0x38,0x2e,0x35,0x32,0x39,0x20,0x43,0x33,0x34, + 0x2e,0x36,0x33,0x32,0x2c,0x31,0x38,0x2e,0x37,0x38, + 0x34,0x20,0x33,0x34,0x2e,0x35,0x30,0x32,0x2c,0x31, + 0x39,0x2e,0x30,0x32,0x32,0x20,0x33,0x34,0x2e,0x32, + 0x38,0x37,0x2c,0x31,0x39,0x2e,0x31,0x36,0x20,0x4c, + 0x32,0x39,0x2e,0x36,0x30,0x32,0x2c,0x32,0x32,0x2e, + 0x31,0x36,0x34,0x20,0x43,0x32,0x39,0x2e,0x34,0x37, + 0x38,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x20,0x32, + 0x39,0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x34,0x20,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c, + 0x32,0x32,0x2e,0x32,0x38,0x34,0x20,0x7a,0x20,0x4d, + 0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e, + 0x38,0x39,0x36,0x20,0x4c,0x32,0x39,0x2e,0x39,0x34, + 0x35,0x2c,0x32,0x30,0x2e,0x31,0x36,0x32,0x20,0x4c, + 0x33,0x32,0x2e,0x34,0x39,0x31,0x2c,0x31,0x38,0x2e, + 0x35,0x32,0x39,0x20,0x4c,0x32,0x39,0x2e,0x39,0x34, + 0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x20,0x7a, + 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x20,0x4c,0x31, + 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, + 0x36,0x20,0x43,0x31,0x38,0x2e,0x32,0x37,0x35,0x2c, + 0x33,0x34,0x2e,0x36,0x32,0x36,0x20,0x31,0x38,0x2e, + 0x30,0x33,0x38,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36, + 0x20,0x31,0x37,0x2e,0x38,0x39,0x39,0x2c,0x33,0x34, + 0x2e,0x32,0x38,0x31,0x20,0x4c,0x31,0x34,0x2e,0x38, + 0x39,0x34,0x2c,0x32,0x39,0x2e,0x35,0x39,0x37,0x20, + 0x43,0x31,0x34,0x2e,0x37,0x34,0x37,0x2c,0x32,0x39, + 0x2e,0x33,0x36,0x36,0x20,0x31,0x34,0x2e,0x37,0x33, + 0x36,0x2c,0x32,0x39,0x2e,0x30,0x37,0x33,0x20,0x31, + 0x34,0x2e,0x38,0x36,0x38,0x2c,0x32,0x38,0x2e,0x38, + 0x33,0x31,0x20,0x43,0x31,0x35,0x2c,0x32,0x38,0x2e, + 0x35,0x38,0x39,0x20,0x31,0x35,0x2e,0x32,0x35,0x32, + 0x2c,0x32,0x38,0x2e,0x34,0x34,0x20,0x31,0x35,0x2e, + 0x35,0x32,0x35,0x2c,0x32,0x38,0x2e,0x34,0x34,0x20, + 0x4c,0x32,0x31,0x2e,0x35,0x33,0x37,0x2c,0x32,0x38, + 0x2e,0x34,0x34,0x20,0x43,0x32,0x31,0x2e,0x38,0x31, + 0x2c,0x32,0x38,0x2e,0x34,0x34,0x20,0x32,0x32,0x2e, + 0x30,0x36,0x32,0x2c,0x32,0x38,0x2e,0x35,0x38,0x38, + 0x20,0x32,0x32,0x2e,0x31,0x39,0x34,0x2c,0x32,0x38, + 0x2e,0x38,0x33,0x31,0x20,0x43,0x32,0x32,0x2e,0x33, + 0x32,0x37,0x2c,0x32,0x39,0x2e,0x30,0x37,0x31,0x20, + 0x32,0x32,0x2e,0x33,0x31,0x35,0x2c,0x32,0x39,0x2e, + 0x33,0x36,0x34,0x20,0x32,0x32,0x2e,0x31,0x36,0x38, + 0x2c,0x32,0x39,0x2e,0x35,0x39,0x37,0x20,0x4c,0x31, + 0x39,0x2e,0x31,0x36,0x33,0x2c,0x33,0x34,0x2e,0x32, + 0x38,0x31,0x20,0x43,0x31,0x39,0x2e,0x30,0x32,0x33, + 0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x20,0x31,0x38, + 0x2e,0x37,0x38,0x36,0x2c,0x33,0x34,0x2e,0x36,0x32, + 0x36,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34, + 0x2e,0x36,0x32,0x36,0x20,0x7a,0x20,0x4d,0x31,0x36, + 0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34, + 0x32,0x20,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, + 0x32,0x2e,0x34,0x38,0x37,0x20,0x4c,0x32,0x30,0x2e, + 0x31,0x36,0x35,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32, + 0x20,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x32, + 0x39,0x2e,0x39,0x34,0x32,0x20,0x7a,0x22,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x3c,0x2f,0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31, + 0x38,0x2e,0x35,0x33,0x2c,0x30,0x20,0x43,0x32,0x38, + 0x2e,0x37,0x36,0x35,0x2c,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x2c,0x38,0x2e,0x32,0x39,0x36,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x20,0x43,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x32, + 0x38,0x2e,0x37,0x36,0x35,0x2c,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x43,0x38,0x2e,0x32, + 0x39,0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, + 0x30,0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x30, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x30, + 0x2c,0x38,0x2e,0x32,0x39,0x36,0x20,0x38,0x2e,0x32, + 0x39,0x36,0x2c,0x30,0x20,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x30,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, + 0x33,0x2c,0x31,0x20,0x43,0x38,0x2e,0x38,0x34,0x39, + 0x2c,0x31,0x20,0x31,0x2c,0x38,0x2e,0x38,0x34,0x39, + 0x20,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20, + 0x43,0x31,0x2c,0x32,0x38,0x2e,0x32,0x31,0x32,0x20, + 0x38,0x2e,0x38,0x34,0x39,0x2c,0x33,0x36,0x2e,0x30, + 0x36,0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, + 0x36,0x2e,0x30,0x36,0x31,0x20,0x43,0x32,0x38,0x2e, + 0x32,0x31,0x32,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31, + 0x20,0x33,0x36,0x2e,0x30,0x36,0x31,0x2c,0x32,0x38, + 0x2e,0x32,0x31,0x32,0x20,0x33,0x36,0x2e,0x30,0x36, + 0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43, + 0x33,0x36,0x2e,0x30,0x36,0x31,0x2c,0x38,0x2e,0x38, + 0x34,0x39,0x20,0x32,0x38,0x2e,0x32,0x31,0x32,0x2c, + 0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x31,0x20, + 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, + 0x20,0x20,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73, + 0x76,0x67,0x3e,0x0a +}; + diff --git a/data/converted/help_analog_right_svg.cpp b/data/converted/help_analog_right_svg.cpp new file mode 100644 index 0000000000..2f66a33acc --- /dev/null +++ b/data/converted/help_analog_right_svg.cpp @@ -0,0 +1,290 @@ +//this file was auto-generated from "analog_right.svg" by res2h + +#include "../Resources.h" + +const size_t help_analog_right_svg_size = 2813; +const unsigned char help_analog_right_svg_data[2813] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73, + 0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20, + 0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, + 0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31, + 0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, + 0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68, + 0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e, + 0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31, + 0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73, + 0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e, + 0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, + 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c, + 0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c, + 0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64, + 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x2c,0x20, + 0x30,0x2c,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x3e,0x0a, + 0x20,0x20,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x34,0x37,0x36,0x2c, + 0x31,0x34,0x2e,0x38,0x39,0x38,0x20,0x43,0x32,0x30, + 0x2e,0x34,0x38,0x39,0x2c,0x31,0x34,0x2e,0x38,0x39, + 0x38,0x20,0x32,0x32,0x2e,0x31,0x32,0x35,0x2c,0x31, + 0x36,0x2e,0x35,0x33,0x37,0x20,0x32,0x32,0x2e,0x31, + 0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x34,0x39,0x20, + 0x43,0x32,0x32,0x2e,0x31,0x32,0x35,0x2c,0x32,0x30, + 0x2e,0x35,0x36,0x31,0x20,0x32,0x30,0x2e,0x34,0x38, + 0x37,0x2c,0x32,0x32,0x2e,0x31,0x39,0x39,0x20,0x31, + 0x38,0x2e,0x34,0x37,0x36,0x2c,0x32,0x32,0x2e,0x31, + 0x39,0x39,0x20,0x43,0x31,0x36,0x2e,0x34,0x36,0x33, + 0x2c,0x32,0x32,0x2e,0x31,0x39,0x39,0x20,0x31,0x34, + 0x2e,0x38,0x32,0x36,0x2c,0x32,0x30,0x2e,0x35,0x36, + 0x20,0x31,0x34,0x2e,0x38,0x32,0x36,0x2c,0x31,0x38, + 0x2e,0x35,0x34,0x39,0x20,0x43,0x31,0x34,0x2e,0x38, + 0x32,0x35,0x2c,0x31,0x36,0x2e,0x35,0x33,0x36,0x20, + 0x31,0x36,0x2e,0x34,0x36,0x33,0x2c,0x31,0x34,0x2e, + 0x38,0x39,0x38,0x20,0x31,0x38,0x2e,0x34,0x37,0x36, + 0x2c,0x31,0x34,0x2e,0x38,0x39,0x38,0x20,0x7a,0x20, + 0x4d,0x31,0x38,0x2e,0x34,0x37,0x36,0x2c,0x32,0x30, + 0x2e,0x37,0x20,0x43,0x31,0x39,0x2e,0x36,0x36,0x32, + 0x2c,0x32,0x30,0x2e,0x37,0x20,0x32,0x30,0x2e,0x36, + 0x32,0x35,0x2c,0x31,0x39,0x2e,0x37,0x33,0x35,0x20, + 0x32,0x30,0x2e,0x36,0x32,0x35,0x2c,0x31,0x38,0x2e, + 0x35,0x35,0x20,0x43,0x32,0x30,0x2e,0x36,0x32,0x35, + 0x2c,0x31,0x37,0x2e,0x33,0x36,0x35,0x20,0x31,0x39, + 0x2e,0x36,0x36,0x2c,0x31,0x36,0x2e,0x33,0x39,0x39, + 0x20,0x31,0x38,0x2e,0x34,0x37,0x36,0x2c,0x31,0x36, + 0x2e,0x33,0x39,0x39,0x20,0x43,0x31,0x37,0x2e,0x32, + 0x39,0x2c,0x31,0x36,0x2e,0x33,0x39,0x39,0x20,0x31, + 0x36,0x2e,0x33,0x32,0x36,0x2c,0x31,0x37,0x2e,0x33, + 0x36,0x35,0x20,0x31,0x36,0x2e,0x33,0x32,0x36,0x2c, + 0x31,0x38,0x2e,0x35,0x35,0x20,0x43,0x31,0x36,0x2e, + 0x33,0x32,0x35,0x2c,0x31,0x39,0x2e,0x37,0x33,0x35, + 0x20,0x31,0x37,0x2e,0x32,0x39,0x2c,0x32,0x30,0x2e, + 0x37,0x20,0x31,0x38,0x2e,0x34,0x37,0x36,0x2c,0x32, + 0x30,0x2e,0x37,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, + 0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x35, + 0x2e,0x34,0x37,0x31,0x2c,0x32,0x38,0x2e,0x34,0x36, + 0x33,0x20,0x4c,0x32,0x31,0x2e,0x34,0x38,0x33,0x2c, + 0x32,0x38,0x2e,0x34,0x36,0x33,0x20,0x43,0x32,0x31, + 0x2e,0x37,0x35,0x36,0x2c,0x32,0x38,0x2e,0x34,0x36, + 0x33,0x20,0x32,0x32,0x2e,0x30,0x30,0x38,0x2c,0x32, + 0x38,0x2e,0x36,0x31,0x33,0x20,0x32,0x32,0x2e,0x31, + 0x34,0x2c,0x32,0x38,0x2e,0x38,0x35,0x33,0x20,0x43, + 0x32,0x32,0x2e,0x32,0x37,0x32,0x2c,0x32,0x39,0x2e, + 0x30,0x39,0x34,0x20,0x32,0x32,0x2e,0x32,0x36,0x31, + 0x2c,0x32,0x39,0x2e,0x33,0x38,0x37,0x20,0x32,0x32, + 0x2e,0x31,0x31,0x34,0x2c,0x32,0x39,0x2e,0x36,0x31, + 0x39,0x20,0x4c,0x31,0x39,0x2e,0x31,0x30,0x39,0x2c, + 0x33,0x34,0x2e,0x33,0x30,0x33,0x20,0x43,0x31,0x38, + 0x2e,0x38,0x33,0x33,0x2c,0x33,0x34,0x2e,0x37,0x33, + 0x34,0x20,0x31,0x38,0x2e,0x31,0x32,0x33,0x2c,0x33, + 0x34,0x2e,0x37,0x33,0x33,0x20,0x31,0x37,0x2e,0x38, + 0x34,0x35,0x2c,0x33,0x34,0x2e,0x33,0x30,0x33,0x20, + 0x4c,0x31,0x34,0x2e,0x38,0x34,0x2c,0x32,0x39,0x2e, + 0x36,0x31,0x39,0x20,0x43,0x31,0x34,0x2e,0x36,0x39, + 0x33,0x2c,0x32,0x39,0x2e,0x33,0x38,0x38,0x20,0x31, + 0x34,0x2e,0x36,0x38,0x31,0x2c,0x32,0x39,0x2e,0x30, + 0x39,0x35,0x20,0x31,0x34,0x2e,0x38,0x31,0x34,0x2c, + 0x32,0x38,0x2e,0x38,0x35,0x33,0x20,0x43,0x31,0x34, + 0x2e,0x39,0x34,0x34,0x2c,0x32,0x38,0x2e,0x36,0x31, + 0x33,0x20,0x31,0x35,0x2e,0x31,0x39,0x36,0x2c,0x32, + 0x38,0x2e,0x34,0x36,0x33,0x20,0x31,0x35,0x2e,0x34, + 0x37,0x31,0x2c,0x32,0x38,0x2e,0x34,0x36,0x33,0x20, + 0x7a,0x20,0x4d,0x32,0x30,0x2e,0x31,0x31,0x2c,0x32, + 0x39,0x2e,0x39,0x36,0x33,0x20,0x4c,0x31,0x36,0x2e, + 0x38,0x34,0x32,0x2c,0x32,0x39,0x2e,0x39,0x36,0x33, + 0x20,0x4c,0x31,0x38,0x2e,0x34,0x37,0x37,0x2c,0x33, + 0x32,0x2e,0x35,0x30,0x38,0x20,0x4c,0x32,0x30,0x2e, + 0x31,0x31,0x2c,0x32,0x39,0x2e,0x39,0x36,0x33,0x20, + 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x3c,0x67,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e,0x38,0x38,0x32, + 0x2c,0x31,0x38,0x2e,0x35,0x34,0x39,0x20,0x4c,0x32, + 0x39,0x2e,0x31,0x39,0x38,0x2c,0x31,0x35,0x2e,0x35, + 0x34,0x35,0x20,0x4c,0x32,0x39,0x2e,0x31,0x39,0x38, + 0x2c,0x32,0x31,0x2e,0x35,0x35,0x35,0x20,0x4c,0x33, + 0x33,0x2e,0x38,0x38,0x32,0x2c,0x31,0x38,0x2e,0x35, + 0x34,0x39,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x39,0x2e,0x31,0x39,0x38,0x2c,0x31,0x34,0x2e,0x37, + 0x39,0x35,0x20,0x43,0x32,0x39,0x2e,0x33,0x33,0x39, + 0x2c,0x31,0x34,0x2e,0x37,0x39,0x35,0x20,0x32,0x39, + 0x2e,0x34,0x38,0x2c,0x31,0x34,0x2e,0x38,0x33,0x35, + 0x20,0x32,0x39,0x2e,0x36,0x30,0x33,0x2c,0x31,0x34, + 0x2e,0x39,0x31,0x34,0x20,0x4c,0x33,0x34,0x2e,0x32, + 0x38,0x37,0x2c,0x31,0x37,0x2e,0x39,0x31,0x37,0x20, + 0x43,0x33,0x34,0x2e,0x35,0x30,0x32,0x2c,0x31,0x38, + 0x2e,0x30,0x35,0x35,0x20,0x33,0x34,0x2e,0x36,0x33, + 0x32,0x2c,0x31,0x38,0x2e,0x32,0x39,0x33,0x20,0x33, + 0x34,0x2e,0x36,0x33,0x32,0x2c,0x31,0x38,0x2e,0x35, + 0x34,0x38,0x20,0x43,0x33,0x34,0x2e,0x36,0x33,0x32, + 0x2c,0x31,0x38,0x2e,0x38,0x30,0x33,0x20,0x33,0x34, + 0x2e,0x35,0x30,0x32,0x2c,0x31,0x39,0x2e,0x30,0x34, + 0x31,0x20,0x33,0x34,0x2e,0x32,0x38,0x37,0x2c,0x31, + 0x39,0x2e,0x31,0x37,0x39,0x20,0x4c,0x32,0x39,0x2e, + 0x36,0x30,0x33,0x2c,0x32,0x32,0x2e,0x31,0x38,0x35, + 0x20,0x43,0x32,0x39,0x2e,0x33,0x37,0x33,0x2c,0x32, + 0x32,0x2e,0x33,0x33,0x33,0x20,0x32,0x39,0x2e,0x30, + 0x37,0x39,0x2c,0x32,0x32,0x2e,0x33,0x34,0x33,0x20, + 0x32,0x38,0x2e,0x38,0x33,0x37,0x2c,0x32,0x32,0x2e, + 0x32,0x31,0x32,0x20,0x43,0x32,0x38,0x2e,0x35,0x39, + 0x37,0x2c,0x32,0x32,0x2e,0x30,0x38,0x31,0x20,0x32, + 0x38,0x2e,0x34,0x34,0x37,0x2c,0x32,0x31,0x2e,0x38, + 0x32,0x38,0x20,0x32,0x38,0x2e,0x34,0x34,0x37,0x2c, + 0x32,0x31,0x2e,0x35,0x35,0x34,0x20,0x4c,0x32,0x38, + 0x2e,0x34,0x34,0x37,0x2c,0x31,0x35,0x2e,0x35,0x34, + 0x34,0x20,0x43,0x32,0x38,0x2e,0x34,0x34,0x37,0x2c, + 0x31,0x35,0x2e,0x32,0x37,0x20,0x32,0x38,0x2e,0x35, + 0x39,0x35,0x2c,0x31,0x35,0x2e,0x30,0x31,0x38,0x20, + 0x32,0x38,0x2e,0x38,0x33,0x37,0x2c,0x31,0x34,0x2e, + 0x38,0x38,0x36,0x20,0x43,0x32,0x38,0x2e,0x39,0x35, + 0x31,0x2c,0x31,0x34,0x2e,0x38,0x32,0x35,0x20,0x32, + 0x39,0x2e,0x30,0x37,0x35,0x2c,0x31,0x34,0x2e,0x37, + 0x39,0x35,0x20,0x32,0x39,0x2e,0x31,0x39,0x38,0x2c, + 0x31,0x34,0x2e,0x37,0x39,0x35,0x20,0x7a,0x20,0x4d, + 0x33,0x32,0x2e,0x34,0x39,0x33,0x2c,0x31,0x38,0x2e, + 0x35,0x34,0x39,0x20,0x4c,0x32,0x39,0x2e,0x39,0x34, + 0x38,0x2c,0x31,0x36,0x2e,0x39,0x31,0x37,0x20,0x4c, + 0x32,0x39,0x2e,0x39,0x34,0x38,0x2c,0x32,0x30,0x2e, + 0x31,0x38,0x32,0x20,0x4c,0x33,0x32,0x2e,0x34,0x39, + 0x33,0x2c,0x31,0x38,0x2e,0x35,0x34,0x39,0x20,0x7a, + 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x3c,0x2f,0x67,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d, + 0x22,0x4d,0x37,0x2e,0x38,0x31,0x32,0x2c,0x31,0x34, + 0x2e,0x37,0x39,0x35,0x20,0x43,0x37,0x2e,0x39,0x33, + 0x36,0x2c,0x31,0x34,0x2e,0x37,0x39,0x35,0x20,0x38, + 0x2e,0x30,0x35,0x38,0x2c,0x31,0x34,0x2e,0x38,0x32, + 0x35,0x20,0x38,0x2e,0x31,0x37,0x2c,0x31,0x34,0x2e, + 0x38,0x38,0x37,0x20,0x43,0x38,0x2e,0x34,0x31,0x31, + 0x2c,0x31,0x35,0x2e,0x30,0x31,0x39,0x20,0x38,0x2e, + 0x35,0x36,0x32,0x2c,0x31,0x35,0x2e,0x32,0x37,0x31, + 0x20,0x38,0x2e,0x35,0x36,0x32,0x2c,0x31,0x35,0x2e, + 0x35,0x34,0x35,0x20,0x4c,0x38,0x2e,0x35,0x36,0x32, + 0x2c,0x32,0x31,0x2e,0x35,0x35,0x35,0x20,0x43,0x38, + 0x2e,0x35,0x36,0x32,0x2c,0x32,0x31,0x2e,0x38,0x32, + 0x39,0x20,0x38,0x2e,0x34,0x31,0x33,0x2c,0x32,0x32, + 0x2e,0x30,0x38,0x31,0x20,0x38,0x2e,0x31,0x37,0x2c, + 0x32,0x32,0x2e,0x32,0x31,0x33,0x20,0x43,0x37,0x2e, + 0x39,0x33,0x31,0x2c,0x32,0x32,0x2e,0x33,0x34,0x34, + 0x20,0x37,0x2e,0x36,0x33,0x37,0x2c,0x32,0x32,0x2e, + 0x33,0x33,0x36,0x20,0x37,0x2e,0x34,0x30,0x35,0x2c, + 0x32,0x32,0x2e,0x31,0x38,0x36,0x20,0x4c,0x32,0x2e, + 0x37,0x32,0x2c,0x31,0x39,0x2e,0x31,0x38,0x31,0x20, + 0x43,0x32,0x2e,0x35,0x30,0x35,0x2c,0x31,0x39,0x2e, + 0x30,0x34,0x33,0x20,0x32,0x2e,0x33,0x37,0x35,0x2c, + 0x31,0x38,0x2e,0x38,0x30,0x35,0x20,0x32,0x2e,0x33, + 0x37,0x35,0x2c,0x31,0x38,0x2e,0x35,0x35,0x20,0x43, + 0x32,0x2e,0x33,0x37,0x35,0x2c,0x31,0x38,0x2e,0x32, + 0x39,0x35,0x20,0x32,0x2e,0x35,0x30,0x35,0x2c,0x31, + 0x38,0x2e,0x30,0x35,0x37,0x20,0x32,0x2e,0x37,0x32, + 0x2c,0x31,0x37,0x2e,0x39,0x31,0x39,0x20,0x4c,0x37, + 0x2e,0x34,0x30,0x35,0x2c,0x31,0x34,0x2e,0x39,0x31, + 0x35,0x20,0x43,0x37,0x2e,0x35,0x32,0x39,0x2c,0x31, + 0x34,0x2e,0x38,0x33,0x35,0x20,0x37,0x2e,0x36,0x37, + 0x31,0x2c,0x31,0x34,0x2e,0x37,0x39,0x35,0x20,0x37, + 0x2e,0x38,0x31,0x32,0x2c,0x31,0x34,0x2e,0x37,0x39, + 0x35,0x20,0x7a,0x20,0x4d,0x37,0x2e,0x30,0x36,0x32, + 0x2c,0x32,0x30,0x2e,0x31,0x38,0x33,0x20,0x4c,0x37, + 0x2e,0x30,0x36,0x32,0x2c,0x31,0x36,0x2e,0x39,0x31, + 0x37,0x20,0x4c,0x34,0x2e,0x35,0x31,0x36,0x2c,0x31, + 0x38,0x2e,0x35,0x35,0x20,0x4c,0x37,0x2e,0x30,0x36, + 0x32,0x2c,0x32,0x30,0x2e,0x31,0x38,0x33,0x20,0x7a, + 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x34,0x37,0x37,0x2c, + 0x32,0x2e,0x34,0x35,0x33,0x20,0x4c,0x31,0x38,0x2e, + 0x34,0x37,0x37,0x2c,0x32,0x2e,0x34,0x35,0x33,0x20, + 0x43,0x31,0x38,0x2e,0x37,0x33,0x32,0x2c,0x32,0x2e, + 0x34,0x35,0x33,0x20,0x31,0x38,0x2e,0x39,0x36,0x39, + 0x2c,0x32,0x2e,0x35,0x38,0x33,0x20,0x31,0x39,0x2e, + 0x31,0x30,0x38,0x2c,0x32,0x2e,0x37,0x39,0x38,0x20, + 0x4c,0x32,0x32,0x2e,0x31,0x31,0x33,0x2c,0x37,0x2e, + 0x34,0x38,0x32,0x20,0x43,0x32,0x32,0x2e,0x32,0x36, + 0x2c,0x37,0x2e,0x37,0x31,0x33,0x20,0x32,0x32,0x2e, + 0x32,0x37,0x31,0x2c,0x38,0x2e,0x30,0x30,0x36,0x20, + 0x32,0x32,0x2e,0x31,0x33,0x39,0x2c,0x38,0x2e,0x32, + 0x34,0x38,0x20,0x43,0x32,0x32,0x2e,0x30,0x30,0x37, + 0x2c,0x38,0x2e,0x34,0x39,0x20,0x32,0x31,0x2e,0x37, + 0x35,0x35,0x2c,0x38,0x2e,0x36,0x33,0x39,0x20,0x32, + 0x31,0x2e,0x34,0x38,0x32,0x2c,0x38,0x2e,0x36,0x33, + 0x39,0x20,0x4c,0x31,0x35,0x2e,0x34,0x37,0x2c,0x38, + 0x2e,0x36,0x33,0x39,0x20,0x43,0x31,0x35,0x2e,0x31, + 0x39,0x37,0x2c,0x38,0x2e,0x36,0x33,0x39,0x20,0x31, + 0x34,0x2e,0x39,0x34,0x35,0x2c,0x38,0x2e,0x34,0x39, + 0x31,0x20,0x31,0x34,0x2e,0x38,0x31,0x33,0x2c,0x38, + 0x2e,0x32,0x34,0x38,0x20,0x43,0x31,0x34,0x2e,0x36, + 0x38,0x2c,0x38,0x2e,0x30,0x30,0x38,0x20,0x31,0x34, + 0x2e,0x36,0x39,0x32,0x2c,0x37,0x2e,0x37,0x31,0x35, + 0x20,0x31,0x34,0x2e,0x38,0x33,0x39,0x2c,0x37,0x2e, + 0x34,0x38,0x32,0x20,0x4c,0x31,0x37,0x2e,0x38,0x34, + 0x34,0x2c,0x32,0x2e,0x37,0x39,0x38,0x20,0x43,0x31, + 0x37,0x2e,0x39,0x38,0x34,0x2c,0x32,0x2e,0x35,0x38, + 0x33,0x20,0x31,0x38,0x2e,0x32,0x32,0x31,0x2c,0x32, + 0x2e,0x34,0x35,0x33,0x20,0x31,0x38,0x2e,0x34,0x37, + 0x37,0x2c,0x32,0x2e,0x34,0x35,0x33,0x20,0x7a,0x20, + 0x4d,0x32,0x30,0x2e,0x31,0x31,0x2c,0x37,0x2e,0x31, + 0x33,0x37,0x20,0x4c,0x31,0x38,0x2e,0x34,0x37,0x37, + 0x2c,0x34,0x2e,0x35,0x39,0x32,0x20,0x4c,0x31,0x36, + 0x2e,0x38,0x34,0x32,0x2c,0x37,0x2e,0x31,0x33,0x37, + 0x20,0x4c,0x32,0x30,0x2e,0x31,0x31,0x2c,0x37,0x2e, + 0x31,0x33,0x37,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, + 0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, + 0x2e,0x35,0x33,0x2c,0x30,0x20,0x43,0x32,0x38,0x2e, + 0x37,0x36,0x35,0x2c,0x30,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x2c,0x38,0x2e,0x32,0x39,0x36,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x31,0x20,0x43,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x32,0x38, + 0x2e,0x37,0x36,0x35,0x2c,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x20,0x43,0x38,0x2e,0x32,0x39, + 0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x30, + 0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x30,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x30,0x2c, + 0x38,0x2e,0x32,0x39,0x36,0x20,0x38,0x2e,0x32,0x39, + 0x36,0x2c,0x30,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x30,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x31,0x20,0x43,0x38,0x2e,0x38,0x34,0x39,0x2c, + 0x31,0x20,0x31,0x2c,0x38,0x2e,0x38,0x34,0x39,0x20, + 0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43, + 0x31,0x2c,0x32,0x38,0x2e,0x32,0x31,0x32,0x20,0x38, + 0x2e,0x38,0x34,0x39,0x2c,0x33,0x36,0x2e,0x30,0x36, + 0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x36, + 0x2e,0x30,0x36,0x31,0x20,0x43,0x32,0x38,0x2e,0x32, + 0x31,0x32,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31,0x20, + 0x33,0x36,0x2e,0x30,0x36,0x31,0x2c,0x32,0x38,0x2e, + 0x32,0x31,0x32,0x20,0x33,0x36,0x2e,0x30,0x36,0x31, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x33, + 0x36,0x2e,0x30,0x36,0x31,0x2c,0x38,0x2e,0x38,0x34, + 0x39,0x20,0x32,0x38,0x2e,0x32,0x31,0x32,0x2c,0x31, + 0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x31,0x20,0x7a, + 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, + 0x20,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76, + 0x67,0x3e,0x0a +}; + diff --git a/data/converted/help_analog_thumb_svg.cpp b/data/converted/help_analog_thumb_svg.cpp new file mode 100644 index 0000000000..5bb06b9ad7 --- /dev/null +++ b/data/converted/help_analog_thumb_svg.cpp @@ -0,0 +1,298 @@ +//this file was auto-generated from "analog_thumb.svg" by res2h + +#include "../Resources.h" + +const size_t help_analog_thumb_svg_size = 2894; +const unsigned char help_analog_thumb_svg_data[2894] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73, + 0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20, + 0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, + 0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31, + 0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, + 0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68, + 0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e, + 0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31, + 0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73, + 0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e, + 0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, + 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c, + 0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c, + 0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64, + 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x2c,0x20, + 0x30,0x2c,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x3e,0x0a, + 0x20,0x20,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, + 0x32,0x32,0x2e,0x31,0x38,0x31,0x20,0x43,0x31,0x36, + 0x2e,0x35,0x31,0x38,0x2c,0x32,0x32,0x2e,0x31,0x38, + 0x31,0x20,0x31,0x34,0x2e,0x38,0x38,0x32,0x2c,0x32, + 0x30,0x2e,0x35,0x34,0x32,0x20,0x31,0x34,0x2e,0x38, + 0x38,0x32,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20,0x43, + 0x31,0x34,0x2e,0x38,0x38,0x32,0x2c,0x31,0x36,0x2e, + 0x35,0x31,0x38,0x20,0x31,0x36,0x2e,0x35,0x32,0x2c, + 0x31,0x34,0x2e,0x38,0x38,0x20,0x31,0x38,0x2e,0x35, + 0x33,0x31,0x2c,0x31,0x34,0x2e,0x38,0x38,0x20,0x43, + 0x32,0x30,0x2e,0x35,0x34,0x34,0x2c,0x31,0x34,0x2e, + 0x38,0x38,0x20,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, + 0x31,0x36,0x2e,0x35,0x31,0x39,0x20,0x32,0x32,0x2e, + 0x31,0x38,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20, + 0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32,0x30, + 0x2e,0x35,0x34,0x33,0x20,0x32,0x30,0x2e,0x35,0x34, + 0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x20,0x31, + 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e,0x31, + 0x38,0x31,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, + 0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x20, + 0x43,0x31,0x37,0x2e,0x33,0x34,0x35,0x2c,0x31,0x36, + 0x2e,0x33,0x37,0x39,0x20,0x31,0x36,0x2e,0x33,0x38, + 0x32,0x2c,0x31,0x37,0x2e,0x33,0x34,0x34,0x20,0x31, + 0x36,0x2e,0x33,0x38,0x32,0x2c,0x31,0x38,0x2e,0x35, + 0x32,0x39,0x20,0x43,0x31,0x36,0x2e,0x33,0x38,0x32, + 0x2c,0x31,0x39,0x2e,0x37,0x31,0x34,0x20,0x31,0x37, + 0x2e,0x33,0x34,0x37,0x2c,0x32,0x30,0x2e,0x36,0x38, + 0x20,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x30, + 0x2e,0x36,0x38,0x20,0x43,0x31,0x39,0x2e,0x37,0x31, + 0x37,0x2c,0x32,0x30,0x2e,0x36,0x38,0x20,0x32,0x30, + 0x2e,0x36,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x31, + 0x34,0x20,0x32,0x30,0x2e,0x36,0x38,0x31,0x2c,0x31, + 0x38,0x2e,0x35,0x32,0x39,0x20,0x43,0x32,0x30,0x2e, + 0x36,0x38,0x32,0x2c,0x31,0x37,0x2e,0x33,0x34,0x34, + 0x20,0x31,0x39,0x2e,0x37,0x31,0x37,0x2c,0x31,0x36, + 0x2e,0x33,0x37,0x39,0x20,0x31,0x38,0x2e,0x35,0x33, + 0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x20,0x7a, + 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, + 0x38,0x2e,0x36,0x31,0x36,0x20,0x4c,0x31,0x35,0x2e, + 0x35,0x32,0x34,0x2c,0x38,0x2e,0x36,0x31,0x36,0x20, + 0x43,0x31,0x35,0x2e,0x32,0x35,0x31,0x2c,0x38,0x2e, + 0x36,0x31,0x36,0x20,0x31,0x34,0x2e,0x39,0x39,0x39, + 0x2c,0x38,0x2e,0x34,0x36,0x36,0x20,0x31,0x34,0x2e, + 0x38,0x36,0x37,0x2c,0x38,0x2e,0x32,0x32,0x36,0x20, + 0x43,0x31,0x34,0x2e,0x37,0x33,0x35,0x2c,0x37,0x2e, + 0x39,0x38,0x35,0x20,0x31,0x34,0x2e,0x37,0x34,0x36, + 0x2c,0x37,0x2e,0x36,0x39,0x32,0x20,0x31,0x34,0x2e, + 0x38,0x39,0x33,0x2c,0x37,0x2e,0x34,0x36,0x20,0x4c, + 0x31,0x37,0x2e,0x38,0x39,0x38,0x2c,0x32,0x2e,0x37, + 0x37,0x36,0x20,0x43,0x31,0x38,0x2e,0x31,0x37,0x34, + 0x2c,0x32,0x2e,0x33,0x34,0x35,0x20,0x31,0x38,0x2e, + 0x38,0x38,0x34,0x2c,0x32,0x2e,0x33,0x34,0x36,0x20, + 0x31,0x39,0x2e,0x31,0x36,0x32,0x2c,0x32,0x2e,0x37, + 0x37,0x36,0x20,0x4c,0x32,0x32,0x2e,0x31,0x36,0x37, + 0x2c,0x37,0x2e,0x34,0x36,0x20,0x43,0x32,0x32,0x2e, + 0x33,0x31,0x34,0x2c,0x37,0x2e,0x36,0x39,0x31,0x20, + 0x32,0x32,0x2e,0x33,0x32,0x36,0x2c,0x37,0x2e,0x39, + 0x38,0x34,0x20,0x32,0x32,0x2e,0x31,0x39,0x33,0x2c, + 0x38,0x2e,0x32,0x32,0x36,0x20,0x43,0x32,0x32,0x2e, + 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x20, + 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, + 0x31,0x36,0x20,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, + 0x38,0x2e,0x36,0x31,0x36,0x20,0x7a,0x20,0x4d,0x31, + 0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31, + 0x36,0x20,0x4c,0x32,0x30,0x2e,0x31,0x36,0x35,0x2c, + 0x37,0x2e,0x31,0x31,0x36,0x20,0x4c,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x34,0x2e,0x35,0x37,0x31,0x20,0x4c, + 0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31, + 0x31,0x36,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x37, + 0x38,0x32,0x2c,0x31,0x34,0x2e,0x37,0x37,0x36,0x20, + 0x4c,0x38,0x2e,0x31,0x37,0x2c,0x31,0x34,0x2e,0x38, + 0x36,0x37,0x20,0x43,0x38,0x2e,0x34,0x31,0x2c,0x31, + 0x34,0x2e,0x39,0x39,0x38,0x20,0x38,0x2e,0x35,0x36, + 0x2c,0x31,0x35,0x2e,0x32,0x35,0x31,0x20,0x38,0x2e, + 0x35,0x36,0x2c,0x31,0x35,0x2e,0x35,0x32,0x35,0x20, + 0x4c,0x38,0x2e,0x35,0x36,0x2c,0x32,0x31,0x2e,0x35, + 0x33,0x35,0x20,0x43,0x38,0x2e,0x35,0x36,0x2c,0x32, + 0x31,0x2e,0x38,0x30,0x39,0x20,0x38,0x2e,0x34,0x31, + 0x32,0x2c,0x32,0x32,0x2e,0x30,0x36,0x31,0x20,0x38, + 0x2e,0x31,0x37,0x2c,0x32,0x32,0x2e,0x31,0x39,0x33, + 0x20,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32,0x32, + 0x2e,0x32,0x35,0x34,0x20,0x37,0x2e,0x39,0x33,0x32, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x20,0x37,0x2e, + 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x20,0x43,0x37,0x2e,0x36,0x36,0x38,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x34,0x20,0x37,0x2e,0x35,0x32,0x37, + 0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x20,0x37,0x2e, + 0x34,0x30,0x34,0x2c,0x32,0x32,0x2e,0x31,0x36,0x35, + 0x20,0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31,0x39,0x2e, + 0x31,0x36,0x32,0x20,0x43,0x32,0x2e,0x35,0x30,0x35, + 0x2c,0x31,0x39,0x2e,0x30,0x32,0x34,0x20,0x32,0x2e, + 0x33,0x37,0x35,0x2c,0x31,0x38,0x2e,0x37,0x38,0x36, + 0x20,0x32,0x2e,0x33,0x37,0x35,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x20,0x43,0x32,0x2e,0x33,0x37,0x35, + 0x2c,0x31,0x38,0x2e,0x32,0x37,0x36,0x20,0x32,0x2e, + 0x35,0x30,0x35,0x2c,0x31,0x38,0x2e,0x30,0x33,0x38, + 0x20,0x32,0x2e,0x37,0x32,0x2c,0x31,0x37,0x2e,0x39, + 0x20,0x4c,0x37,0x2e,0x34,0x30,0x34,0x2c,0x31,0x34, + 0x2e,0x38,0x39,0x34,0x20,0x4c,0x37,0x2e,0x37,0x38, + 0x32,0x2c,0x31,0x34,0x2e,0x37,0x37,0x36,0x20,0x7a, + 0x20,0x4d,0x37,0x2e,0x30,0x35,0x39,0x2c,0x31,0x36, + 0x2e,0x38,0x39,0x37,0x20,0x4c,0x34,0x2e,0x35,0x31, + 0x34,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20,0x4c,0x37, + 0x2e,0x30,0x35,0x39,0x2c,0x32,0x30,0x2e,0x31,0x36, + 0x32,0x20,0x4c,0x37,0x2e,0x30,0x35,0x39,0x2c,0x31, + 0x36,0x2e,0x38,0x39,0x37,0x20,0x7a,0x22,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, + 0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e, + 0x32,0x38,0x34,0x20,0x43,0x32,0x39,0x2e,0x30,0x37, + 0x31,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x20,0x32, + 0x38,0x2e,0x39,0x34,0x39,0x2c,0x32,0x32,0x2e,0x32, + 0x35,0x34,0x20,0x32,0x38,0x2e,0x38,0x33,0x37,0x2c, + 0x32,0x32,0x2e,0x31,0x39,0x32,0x20,0x43,0x32,0x38, + 0x2e,0x35,0x39,0x36,0x2c,0x32,0x32,0x2e,0x30,0x36, + 0x20,0x32,0x38,0x2e,0x34,0x34,0x35,0x2c,0x32,0x31, + 0x2e,0x38,0x30,0x38,0x20,0x32,0x38,0x2e,0x34,0x34, + 0x35,0x2c,0x32,0x31,0x2e,0x35,0x33,0x34,0x20,0x4c, + 0x32,0x38,0x2e,0x34,0x34,0x35,0x2c,0x31,0x35,0x2e, + 0x35,0x32,0x34,0x20,0x43,0x32,0x38,0x2e,0x34,0x34, + 0x35,0x2c,0x31,0x35,0x2e,0x32,0x35,0x20,0x32,0x38, + 0x2e,0x35,0x39,0x34,0x2c,0x31,0x34,0x2e,0x39,0x39, + 0x38,0x20,0x32,0x38,0x2e,0x38,0x33,0x37,0x2c,0x31, + 0x34,0x2e,0x38,0x36,0x36,0x20,0x43,0x32,0x39,0x2e, + 0x30,0x37,0x36,0x2c,0x31,0x34,0x2e,0x37,0x33,0x35, + 0x20,0x32,0x39,0x2e,0x33,0x37,0x2c,0x31,0x34,0x2e, + 0x37,0x34,0x33,0x20,0x32,0x39,0x2e,0x36,0x30,0x32, + 0x2c,0x31,0x34,0x2e,0x38,0x39,0x33,0x20,0x4c,0x33, + 0x34,0x2e,0x32,0x38,0x37,0x2c,0x31,0x37,0x2e,0x38, + 0x39,0x38,0x20,0x43,0x33,0x34,0x2e,0x35,0x30,0x32, + 0x2c,0x31,0x38,0x2e,0x30,0x33,0x36,0x20,0x33,0x34, + 0x2e,0x36,0x33,0x32,0x2c,0x31,0x38,0x2e,0x32,0x37, + 0x34,0x20,0x33,0x34,0x2e,0x36,0x33,0x32,0x2c,0x31, + 0x38,0x2e,0x35,0x32,0x39,0x20,0x43,0x33,0x34,0x2e, + 0x36,0x33,0x32,0x2c,0x31,0x38,0x2e,0x37,0x38,0x34, + 0x20,0x33,0x34,0x2e,0x35,0x30,0x32,0x2c,0x31,0x39, + 0x2e,0x30,0x32,0x32,0x20,0x33,0x34,0x2e,0x32,0x38, + 0x37,0x2c,0x31,0x39,0x2e,0x31,0x36,0x20,0x4c,0x32, + 0x39,0x2e,0x36,0x30,0x32,0x2c,0x32,0x32,0x2e,0x31, + 0x36,0x34,0x20,0x43,0x32,0x39,0x2e,0x34,0x37,0x38, + 0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x20,0x32,0x39, + 0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32,0x38, + 0x34,0x20,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32, + 0x32,0x2e,0x32,0x38,0x34,0x20,0x7a,0x20,0x4d,0x32, + 0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38, + 0x39,0x36,0x20,0x4c,0x32,0x39,0x2e,0x39,0x34,0x35, + 0x2c,0x32,0x30,0x2e,0x31,0x36,0x32,0x20,0x4c,0x33, + 0x32,0x2e,0x34,0x39,0x31,0x2c,0x31,0x38,0x2e,0x35, + 0x32,0x39,0x20,0x4c,0x32,0x39,0x2e,0x39,0x34,0x35, + 0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x20,0x7a,0x22, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d, + 0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34, + 0x2e,0x36,0x32,0x36,0x20,0x4c,0x31,0x38,0x2e,0x35, + 0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x20,0x43, + 0x31,0x38,0x2e,0x32,0x37,0x35,0x2c,0x33,0x34,0x2e, + 0x36,0x32,0x36,0x20,0x31,0x38,0x2e,0x30,0x33,0x38, + 0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x20,0x31,0x37, + 0x2e,0x38,0x39,0x39,0x2c,0x33,0x34,0x2e,0x32,0x38, + 0x31,0x20,0x4c,0x31,0x34,0x2e,0x38,0x39,0x34,0x2c, + 0x32,0x39,0x2e,0x35,0x39,0x37,0x20,0x43,0x31,0x34, + 0x2e,0x37,0x34,0x37,0x2c,0x32,0x39,0x2e,0x33,0x36, + 0x36,0x20,0x31,0x34,0x2e,0x37,0x33,0x36,0x2c,0x32, + 0x39,0x2e,0x30,0x37,0x33,0x20,0x31,0x34,0x2e,0x38, + 0x36,0x38,0x2c,0x32,0x38,0x2e,0x38,0x33,0x31,0x20, + 0x43,0x31,0x35,0x2c,0x32,0x38,0x2e,0x35,0x38,0x39, + 0x20,0x31,0x35,0x2e,0x32,0x35,0x32,0x2c,0x32,0x38, + 0x2e,0x34,0x34,0x20,0x31,0x35,0x2e,0x35,0x32,0x35, + 0x2c,0x32,0x38,0x2e,0x34,0x34,0x20,0x4c,0x32,0x31, + 0x2e,0x35,0x33,0x37,0x2c,0x32,0x38,0x2e,0x34,0x34, + 0x20,0x43,0x32,0x31,0x2e,0x38,0x31,0x2c,0x32,0x38, + 0x2e,0x34,0x34,0x20,0x32,0x32,0x2e,0x30,0x36,0x32, + 0x2c,0x32,0x38,0x2e,0x35,0x38,0x38,0x20,0x32,0x32, + 0x2e,0x31,0x39,0x34,0x2c,0x32,0x38,0x2e,0x38,0x33, + 0x31,0x20,0x43,0x32,0x32,0x2e,0x33,0x32,0x37,0x2c, + 0x32,0x39,0x2e,0x30,0x37,0x31,0x20,0x32,0x32,0x2e, + 0x33,0x31,0x35,0x2c,0x32,0x39,0x2e,0x33,0x36,0x34, + 0x20,0x32,0x32,0x2e,0x31,0x36,0x38,0x2c,0x32,0x39, + 0x2e,0x35,0x39,0x37,0x20,0x4c,0x31,0x39,0x2e,0x31, + 0x36,0x33,0x2c,0x33,0x34,0x2e,0x32,0x38,0x31,0x20, + 0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c,0x33,0x34, + 0x2e,0x34,0x39,0x36,0x20,0x31,0x38,0x2e,0x37,0x38, + 0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x20,0x31, + 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, + 0x36,0x20,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39, + 0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x20,0x4c, + 0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x32,0x2e,0x34, + 0x38,0x37,0x20,0x4c,0x32,0x30,0x2e,0x31,0x36,0x35, + 0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x20,0x4c,0x31, + 0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39, + 0x34,0x32,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x30,0x20,0x43,0x32,0x38,0x2e,0x37, + 0x36,0x35,0x2c,0x30,0x20,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x2c,0x38,0x2e,0x32,0x39,0x36,0x20,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33, + 0x31,0x20,0x43,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, + 0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x32,0x38,0x2e, + 0x37,0x36,0x35,0x2c,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x43,0x38,0x2e,0x32,0x39,0x36, + 0x2c,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x30,0x2c, + 0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x30,0x2c,0x31, + 0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x30,0x2c,0x38, + 0x2e,0x32,0x39,0x36,0x20,0x38,0x2e,0x32,0x39,0x36, + 0x2c,0x30,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x30, + 0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x31,0x20,0x43,0x38,0x2e,0x38,0x34,0x39,0x2c,0x31, + 0x20,0x31,0x2c,0x38,0x2e,0x38,0x34,0x39,0x20,0x31, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x31, + 0x2c,0x32,0x38,0x2e,0x32,0x31,0x32,0x20,0x38,0x2e, + 0x38,0x34,0x39,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31, + 0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x36,0x2e, + 0x30,0x36,0x31,0x20,0x43,0x32,0x38,0x2e,0x32,0x31, + 0x32,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31,0x20,0x33, + 0x36,0x2e,0x30,0x36,0x31,0x2c,0x32,0x38,0x2e,0x32, + 0x31,0x32,0x20,0x33,0x36,0x2e,0x30,0x36,0x31,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x33,0x36, + 0x2e,0x30,0x36,0x31,0x2c,0x38,0x2e,0x38,0x34,0x39, + 0x20,0x32,0x38,0x2e,0x32,0x31,0x32,0x2c,0x31,0x20, + 0x31,0x38,0x2e,0x35,0x33,0x2c,0x31,0x20,0x7a,0x22, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20, + 0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d, + 0x22,0x4d,0x31,0x38,0x2e,0x35,0x32,0x39,0x2c,0x32, + 0x32,0x2e,0x31,0x38,0x31,0x20,0x43,0x31,0x36,0x2e, + 0x35,0x31,0x33,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31, + 0x20,0x31,0x34,0x2e,0x38,0x37,0x39,0x2c,0x32,0x30, + 0x2e,0x35,0x34,0x37,0x20,0x31,0x34,0x2e,0x38,0x37, + 0x39,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20,0x43,0x31, + 0x34,0x2e,0x38,0x37,0x39,0x2c,0x31,0x36,0x2e,0x35, + 0x31,0x34,0x20,0x31,0x36,0x2e,0x35,0x31,0x33,0x2c, + 0x31,0x34,0x2e,0x38,0x38,0x20,0x31,0x38,0x2e,0x35, + 0x32,0x39,0x2c,0x31,0x34,0x2e,0x38,0x38,0x20,0x43, + 0x32,0x30,0x2e,0x35,0x34,0x36,0x2c,0x31,0x34,0x2e, + 0x38,0x38,0x20,0x32,0x32,0x2e,0x31,0x38,0x2c,0x31, + 0x36,0x2e,0x35,0x31,0x34,0x20,0x32,0x32,0x2e,0x31, + 0x38,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20,0x43,0x32, + 0x32,0x2e,0x31,0x38,0x2c,0x32,0x30,0x2e,0x35,0x34, + 0x37,0x20,0x32,0x30,0x2e,0x35,0x34,0x36,0x2c,0x32, + 0x32,0x2e,0x31,0x38,0x31,0x20,0x31,0x38,0x2e,0x35, + 0x32,0x39,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x20, + 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, + 0x20,0x20,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73, + 0x76,0x67,0x3e,0x0a +}; + diff --git a/data/converted/help_analog_up_svg.cpp b/data/converted/help_analog_up_svg.cpp new file mode 100644 index 0000000000..bed20f9264 --- /dev/null +++ b/data/converted/help_analog_up_svg.cpp @@ -0,0 +1,294 @@ +//this file was auto-generated from "analog_up.svg" by res2h + +#include "../Resources.h" + +const size_t help_analog_up_svg_size = 2853; +const unsigned char help_analog_up_svg_data[2853] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73, + 0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20, + 0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, + 0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31, + 0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, + 0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68, + 0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e, + 0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31, + 0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73, + 0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e, + 0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c, + 0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, + 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c, + 0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, + 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, + 0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c, + 0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64, + 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x2c,0x20, + 0x30,0x2c,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, + 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x3e,0x0a, + 0x20,0x20,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x45, + 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e,0x0a,0x20, + 0x20,0x20,0x20,0x3c,0x67,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x34,0x2e,0x38,0x36,0x32,0x2c, + 0x31,0x38,0x2e,0x35,0x36,0x37,0x20,0x43,0x31,0x34, + 0x2e,0x38,0x36,0x32,0x2c,0x31,0x36,0x2e,0x35,0x35, + 0x34,0x20,0x31,0x36,0x2e,0x35,0x30,0x31,0x2c,0x31, + 0x34,0x2e,0x39,0x31,0x38,0x20,0x31,0x38,0x2e,0x35, + 0x31,0x33,0x2c,0x31,0x34,0x2e,0x39,0x31,0x38,0x20, + 0x43,0x32,0x30,0x2e,0x35,0x32,0x35,0x2c,0x31,0x34, + 0x2e,0x39,0x31,0x38,0x20,0x32,0x32,0x2e,0x31,0x36, + 0x33,0x2c,0x31,0x36,0x2e,0x35,0x35,0x36,0x20,0x32, + 0x32,0x2e,0x31,0x36,0x33,0x2c,0x31,0x38,0x2e,0x35, + 0x36,0x37,0x20,0x43,0x32,0x32,0x2e,0x31,0x36,0x33, + 0x2c,0x32,0x30,0x2e,0x35,0x38,0x20,0x32,0x30,0x2e, + 0x35,0x32,0x34,0x2c,0x32,0x32,0x2e,0x32,0x31,0x37, + 0x20,0x31,0x38,0x2e,0x35,0x31,0x33,0x2c,0x32,0x32, + 0x2e,0x32,0x31,0x37,0x20,0x43,0x31,0x36,0x2e,0x35, + 0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x20,0x31,0x34, + 0x2e,0x38,0x36,0x32,0x2c,0x32,0x30,0x2e,0x35,0x38, + 0x20,0x31,0x34,0x2e,0x38,0x36,0x32,0x2c,0x31,0x38, + 0x2e,0x35,0x36,0x37,0x20,0x7a,0x20,0x4d,0x32,0x30, + 0x2e,0x36,0x36,0x34,0x2c,0x31,0x38,0x2e,0x35,0x36, + 0x37,0x20,0x43,0x32,0x30,0x2e,0x36,0x36,0x34,0x2c, + 0x31,0x37,0x2e,0x33,0x38,0x31,0x20,0x31,0x39,0x2e, + 0x36,0x39,0x39,0x2c,0x31,0x36,0x2e,0x34,0x31,0x38, + 0x20,0x31,0x38,0x2e,0x35,0x31,0x34,0x2c,0x31,0x36, + 0x2e,0x34,0x31,0x38,0x20,0x43,0x31,0x37,0x2e,0x33, + 0x32,0x39,0x2c,0x31,0x36,0x2e,0x34,0x31,0x38,0x20, + 0x31,0x36,0x2e,0x33,0x36,0x33,0x2c,0x31,0x37,0x2e, + 0x33,0x38,0x33,0x20,0x31,0x36,0x2e,0x33,0x36,0x33, + 0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x20,0x43,0x31, + 0x36,0x2e,0x33,0x36,0x33,0x2c,0x31,0x39,0x2e,0x37, + 0x35,0x33,0x20,0x31,0x37,0x2e,0x33,0x32,0x39,0x2c, + 0x32,0x30,0x2e,0x37,0x31,0x37,0x20,0x31,0x38,0x2e, + 0x35,0x31,0x34,0x2c,0x32,0x30,0x2e,0x37,0x31,0x37, + 0x20,0x43,0x31,0x39,0x2e,0x36,0x39,0x39,0x2c,0x32, + 0x30,0x2e,0x37,0x31,0x38,0x20,0x32,0x30,0x2e,0x36, + 0x36,0x34,0x2c,0x31,0x39,0x2e,0x37,0x35,0x33,0x20, + 0x32,0x30,0x2e,0x36,0x36,0x34,0x2c,0x31,0x38,0x2e, + 0x35,0x36,0x37,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, + 0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, + 0x32,0x38,0x2e,0x34,0x32,0x37,0x2c,0x32,0x31,0x2e, + 0x35,0x37,0x32,0x20,0x4c,0x32,0x38,0x2e,0x34,0x32, + 0x37,0x2c,0x31,0x35,0x2e,0x35,0x36,0x20,0x43,0x32, + 0x38,0x2e,0x34,0x32,0x37,0x2c,0x31,0x35,0x2e,0x32, + 0x38,0x37,0x20,0x32,0x38,0x2e,0x35,0x37,0x37,0x2c, + 0x31,0x35,0x2e,0x30,0x33,0x35,0x20,0x32,0x38,0x2e, + 0x38,0x31,0x37,0x2c,0x31,0x34,0x2e,0x39,0x30,0x33, + 0x20,0x43,0x32,0x39,0x2e,0x30,0x35,0x38,0x2c,0x31, + 0x34,0x2e,0x37,0x37,0x31,0x20,0x32,0x39,0x2e,0x33, + 0x35,0x31,0x2c,0x31,0x34,0x2e,0x37,0x38,0x32,0x20, + 0x32,0x39,0x2e,0x35,0x38,0x33,0x2c,0x31,0x34,0x2e, + 0x39,0x32,0x39,0x20,0x4c,0x33,0x34,0x2e,0x32,0x36, + 0x37,0x2c,0x31,0x37,0x2e,0x39,0x33,0x34,0x20,0x43, + 0x33,0x34,0x2e,0x36,0x39,0x38,0x2c,0x31,0x38,0x2e, + 0x32,0x31,0x20,0x33,0x34,0x2e,0x36,0x39,0x37,0x2c, + 0x31,0x38,0x2e,0x39,0x32,0x20,0x33,0x34,0x2e,0x32, + 0x36,0x37,0x2c,0x31,0x39,0x2e,0x31,0x39,0x38,0x20, + 0x4c,0x32,0x39,0x2e,0x35,0x38,0x33,0x2c,0x32,0x32, + 0x2e,0x32,0x30,0x33,0x20,0x43,0x32,0x39,0x2e,0x33, + 0x35,0x32,0x2c,0x32,0x32,0x2e,0x33,0x35,0x20,0x32, + 0x39,0x2e,0x30,0x35,0x39,0x2c,0x32,0x32,0x2e,0x33, + 0x36,0x32,0x20,0x32,0x38,0x2e,0x38,0x31,0x37,0x2c, + 0x32,0x32,0x2e,0x32,0x32,0x39,0x20,0x43,0x32,0x38, + 0x2e,0x35,0x37,0x37,0x2c,0x32,0x32,0x2e,0x30,0x39, + 0x39,0x20,0x32,0x38,0x2e,0x34,0x32,0x37,0x2c,0x32, + 0x31,0x2e,0x38,0x34,0x37,0x20,0x32,0x38,0x2e,0x34, + 0x32,0x37,0x2c,0x32,0x31,0x2e,0x35,0x37,0x32,0x20, + 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x32,0x37,0x2c, + 0x31,0x36,0x2e,0x39,0x33,0x33,0x20,0x4c,0x32,0x39, + 0x2e,0x39,0x32,0x37,0x2c,0x32,0x30,0x2e,0x32,0x30, + 0x31,0x20,0x4c,0x33,0x32,0x2e,0x34,0x37,0x32,0x2c, + 0x31,0x38,0x2e,0x35,0x36,0x36,0x20,0x4c,0x32,0x39, + 0x2e,0x39,0x32,0x37,0x2c,0x31,0x36,0x2e,0x39,0x33, + 0x33,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x67, + 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x38,0x2e,0x35,0x31,0x33,0x2c,0x33,0x2e,0x31, + 0x36,0x31,0x20,0x4c,0x31,0x35,0x2e,0x35,0x30,0x39, + 0x2c,0x37,0x2e,0x38,0x34,0x35,0x20,0x4c,0x32,0x31, + 0x2e,0x35,0x31,0x39,0x2c,0x37,0x2e,0x38,0x34,0x35, + 0x20,0x4c,0x31,0x38,0x2e,0x35,0x31,0x33,0x2c,0x33, + 0x2e,0x31,0x36,0x31,0x20,0x7a,0x22,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, + 0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x34,0x2e,0x37,0x35,0x39,0x2c, + 0x37,0x2e,0x38,0x34,0x35,0x20,0x43,0x31,0x34,0x2e, + 0x37,0x35,0x39,0x2c,0x37,0x2e,0x37,0x30,0x34,0x20, + 0x31,0x34,0x2e,0x37,0x39,0x39,0x2c,0x37,0x2e,0x35, + 0x36,0x33,0x20,0x31,0x34,0x2e,0x38,0x37,0x38,0x2c, + 0x37,0x2e,0x34,0x34,0x20,0x4c,0x31,0x37,0x2e,0x38, + 0x38,0x31,0x2c,0x32,0x2e,0x37,0x35,0x36,0x20,0x43, + 0x31,0x38,0x2e,0x30,0x31,0x39,0x2c,0x32,0x2e,0x35, + 0x34,0x31,0x20,0x31,0x38,0x2e,0x32,0x35,0x37,0x2c, + 0x32,0x2e,0x34,0x31,0x31,0x20,0x31,0x38,0x2e,0x35, + 0x31,0x32,0x2c,0x32,0x2e,0x34,0x31,0x31,0x20,0x43, + 0x31,0x38,0x2e,0x37,0x36,0x37,0x2c,0x32,0x2e,0x34, + 0x31,0x31,0x20,0x31,0x39,0x2e,0x30,0x30,0x35,0x2c, + 0x32,0x2e,0x35,0x34,0x31,0x20,0x31,0x39,0x2e,0x31, + 0x34,0x33,0x2c,0x32,0x2e,0x37,0x35,0x36,0x20,0x4c, + 0x32,0x32,0x2e,0x31,0x34,0x39,0x2c,0x37,0x2e,0x34, + 0x34,0x20,0x43,0x32,0x32,0x2e,0x32,0x39,0x37,0x2c, + 0x37,0x2e,0x36,0x37,0x20,0x32,0x32,0x2e,0x33,0x30, + 0x37,0x2c,0x37,0x2e,0x39,0x36,0x34,0x20,0x32,0x32, + 0x2e,0x31,0x37,0x36,0x2c,0x38,0x2e,0x32,0x30,0x36, + 0x20,0x43,0x32,0x32,0x2e,0x30,0x34,0x35,0x2c,0x38, + 0x2e,0x34,0x34,0x36,0x20,0x32,0x31,0x2e,0x37,0x39, + 0x32,0x2c,0x38,0x2e,0x35,0x39,0x36,0x20,0x32,0x31, + 0x2e,0x35,0x31,0x38,0x2c,0x38,0x2e,0x35,0x39,0x36, + 0x20,0x4c,0x31,0x35,0x2e,0x35,0x30,0x38,0x2c,0x38, + 0x2e,0x35,0x39,0x36,0x20,0x43,0x31,0x35,0x2e,0x32, + 0x33,0x34,0x2c,0x38,0x2e,0x35,0x39,0x36,0x20,0x31, + 0x34,0x2e,0x39,0x38,0x32,0x2c,0x38,0x2e,0x34,0x34, + 0x38,0x20,0x31,0x34,0x2e,0x38,0x35,0x2c,0x38,0x2e, + 0x32,0x30,0x36,0x20,0x43,0x31,0x34,0x2e,0x37,0x38, + 0x39,0x2c,0x38,0x2e,0x30,0x39,0x32,0x20,0x31,0x34, + 0x2e,0x37,0x35,0x39,0x2c,0x37,0x2e,0x39,0x36,0x38, + 0x20,0x31,0x34,0x2e,0x37,0x35,0x39,0x2c,0x37,0x2e, + 0x38,0x34,0x35,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e, + 0x35,0x31,0x33,0x2c,0x34,0x2e,0x35,0x35,0x20,0x4c, + 0x31,0x36,0x2e,0x38,0x38,0x31,0x2c,0x37,0x2e,0x30, + 0x39,0x35,0x20,0x4c,0x32,0x30,0x2e,0x31,0x34,0x36, + 0x2c,0x37,0x2e,0x30,0x39,0x35,0x20,0x4c,0x31,0x38, + 0x2e,0x35,0x31,0x33,0x2c,0x34,0x2e,0x35,0x35,0x20, + 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, + 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x67,0x3e, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x34,0x2e, + 0x37,0x35,0x39,0x2c,0x32,0x39,0x2e,0x32,0x33,0x31, + 0x20,0x43,0x31,0x34,0x2e,0x37,0x35,0x39,0x2c,0x32, + 0x39,0x2e,0x31,0x30,0x37,0x20,0x31,0x34,0x2e,0x37, + 0x38,0x39,0x2c,0x32,0x38,0x2e,0x39,0x38,0x35,0x20, + 0x31,0x34,0x2e,0x38,0x35,0x31,0x2c,0x32,0x38,0x2e, + 0x38,0x37,0x33,0x20,0x43,0x31,0x34,0x2e,0x39,0x38, + 0x33,0x2c,0x32,0x38,0x2e,0x36,0x33,0x32,0x20,0x31, + 0x35,0x2e,0x32,0x33,0x35,0x2c,0x32,0x38,0x2e,0x34, + 0x38,0x31,0x20,0x31,0x35,0x2e,0x35,0x30,0x39,0x2c, + 0x32,0x38,0x2e,0x34,0x38,0x31,0x20,0x4c,0x32,0x31, + 0x2e,0x35,0x31,0x39,0x2c,0x32,0x38,0x2e,0x34,0x38, + 0x31,0x20,0x43,0x32,0x31,0x2e,0x37,0x39,0x33,0x2c, + 0x32,0x38,0x2e,0x34,0x38,0x31,0x20,0x32,0x32,0x2e, + 0x30,0x34,0x35,0x2c,0x32,0x38,0x2e,0x36,0x33,0x20, + 0x32,0x32,0x2e,0x31,0x37,0x37,0x2c,0x32,0x38,0x2e, + 0x38,0x37,0x33,0x20,0x43,0x32,0x32,0x2e,0x33,0x30, + 0x38,0x2c,0x32,0x39,0x2e,0x31,0x31,0x32,0x20,0x32, + 0x32,0x2e,0x33,0x2c,0x32,0x39,0x2e,0x34,0x30,0x36, + 0x20,0x32,0x32,0x2e,0x31,0x35,0x2c,0x32,0x39,0x2e, + 0x36,0x33,0x38,0x20,0x4c,0x31,0x39,0x2e,0x31,0x34, + 0x35,0x2c,0x33,0x34,0x2e,0x33,0x32,0x33,0x20,0x43, + 0x31,0x39,0x2e,0x30,0x30,0x37,0x2c,0x33,0x34,0x2e, + 0x35,0x33,0x38,0x20,0x31,0x38,0x2e,0x37,0x36,0x39, + 0x2c,0x33,0x34,0x2e,0x36,0x36,0x38,0x20,0x31,0x38, + 0x2e,0x35,0x31,0x34,0x2c,0x33,0x34,0x2e,0x36,0x36, + 0x38,0x20,0x43,0x31,0x38,0x2e,0x32,0x35,0x39,0x2c, + 0x33,0x34,0x2e,0x36,0x36,0x38,0x20,0x31,0x38,0x2e, + 0x30,0x32,0x31,0x2c,0x33,0x34,0x2e,0x35,0x33,0x38, + 0x20,0x31,0x37,0x2e,0x38,0x38,0x33,0x2c,0x33,0x34, + 0x2e,0x33,0x32,0x33,0x20,0x4c,0x31,0x34,0x2e,0x38, + 0x37,0x39,0x2c,0x32,0x39,0x2e,0x36,0x33,0x38,0x20, + 0x43,0x31,0x34,0x2e,0x37,0x39,0x39,0x2c,0x32,0x39, + 0x2e,0x35,0x31,0x34,0x20,0x31,0x34,0x2e,0x37,0x35, + 0x39,0x2c,0x32,0x39,0x2e,0x33,0x37,0x32,0x20,0x31, + 0x34,0x2e,0x37,0x35,0x39,0x2c,0x32,0x39,0x2e,0x32, + 0x33,0x31,0x20,0x7a,0x20,0x4d,0x32,0x30,0x2e,0x31, + 0x34,0x37,0x2c,0x32,0x39,0x2e,0x39,0x38,0x31,0x20, + 0x4c,0x31,0x36,0x2e,0x38,0x38,0x31,0x2c,0x32,0x39, + 0x2e,0x39,0x38,0x31,0x20,0x4c,0x31,0x38,0x2e,0x35, + 0x31,0x34,0x2c,0x33,0x32,0x2e,0x35,0x32,0x37,0x20, + 0x4c,0x32,0x30,0x2e,0x31,0x34,0x37,0x2c,0x32,0x39, + 0x2e,0x39,0x38,0x31,0x20,0x7a,0x22,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, + 0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, + 0x4d,0x32,0x2e,0x34,0x31,0x37,0x2c,0x31,0x38,0x2e, + 0x35,0x36,0x36,0x20,0x4c,0x32,0x2e,0x34,0x31,0x37, + 0x2c,0x31,0x38,0x2e,0x35,0x36,0x36,0x20,0x43,0x32, + 0x2e,0x34,0x31,0x37,0x2c,0x31,0x38,0x2e,0x33,0x31, + 0x31,0x20,0x32,0x2e,0x35,0x34,0x37,0x2c,0x31,0x38, + 0x2e,0x30,0x37,0x34,0x20,0x32,0x2e,0x37,0x36,0x32, + 0x2c,0x31,0x37,0x2e,0x39,0x33,0x35,0x20,0x4c,0x37, + 0x2e,0x34,0x34,0x36,0x2c,0x31,0x34,0x2e,0x39,0x33, + 0x20,0x43,0x37,0x2e,0x36,0x37,0x37,0x2c,0x31,0x34, + 0x2e,0x37,0x38,0x33,0x20,0x37,0x2e,0x39,0x37,0x2c, + 0x31,0x34,0x2e,0x37,0x37,0x32,0x20,0x38,0x2e,0x32, + 0x31,0x32,0x2c,0x31,0x34,0x2e,0x39,0x30,0x34,0x20, + 0x43,0x38,0x2e,0x34,0x35,0x34,0x2c,0x31,0x35,0x2e, + 0x30,0x33,0x36,0x20,0x38,0x2e,0x36,0x30,0x33,0x2c, + 0x31,0x35,0x2e,0x32,0x38,0x38,0x20,0x38,0x2e,0x36, + 0x30,0x33,0x2c,0x31,0x35,0x2e,0x35,0x36,0x31,0x20, + 0x4c,0x38,0x2e,0x36,0x30,0x33,0x2c,0x32,0x31,0x2e, + 0x35,0x37,0x33,0x20,0x43,0x38,0x2e,0x36,0x30,0x33, + 0x2c,0x32,0x31,0x2e,0x38,0x34,0x36,0x20,0x38,0x2e, + 0x34,0x35,0x35,0x2c,0x32,0x32,0x2e,0x30,0x39,0x38, + 0x20,0x38,0x2e,0x32,0x31,0x32,0x2c,0x32,0x32,0x2e, + 0x32,0x33,0x20,0x43,0x37,0x2e,0x39,0x37,0x32,0x2c, + 0x32,0x32,0x2e,0x33,0x36,0x33,0x20,0x37,0x2e,0x36, + 0x37,0x39,0x2c,0x32,0x32,0x2e,0x33,0x35,0x31,0x20, + 0x37,0x2e,0x34,0x34,0x36,0x2c,0x32,0x32,0x2e,0x32, + 0x30,0x34,0x20,0x4c,0x32,0x2e,0x37,0x36,0x32,0x2c, + 0x31,0x39,0x2e,0x31,0x39,0x39,0x20,0x43,0x32,0x2e, + 0x35,0x34,0x37,0x2c,0x31,0x39,0x2e,0x30,0x35,0x39, + 0x20,0x32,0x2e,0x34,0x31,0x37,0x2c,0x31,0x38,0x2e, + 0x38,0x32,0x32,0x20,0x32,0x2e,0x34,0x31,0x37,0x2c, + 0x31,0x38,0x2e,0x35,0x36,0x36,0x20,0x7a,0x20,0x4d, + 0x37,0x2e,0x31,0x30,0x31,0x2c,0x31,0x36,0x2e,0x39, + 0x33,0x33,0x20,0x4c,0x34,0x2e,0x35,0x35,0x36,0x2c, + 0x31,0x38,0x2e,0x35,0x36,0x36,0x20,0x4c,0x37,0x2e, + 0x31,0x30,0x31,0x2c,0x32,0x30,0x2e,0x32,0x30,0x31, + 0x20,0x4c,0x37,0x2e,0x31,0x30,0x31,0x2c,0x31,0x36, + 0x2e,0x39,0x33,0x33,0x20,0x7a,0x22,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, + 0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c, + 0x2f,0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, + 0x2e,0x35,0x33,0x2c,0x30,0x20,0x43,0x32,0x38,0x2e, + 0x37,0x36,0x35,0x2c,0x30,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x2c,0x38,0x2e,0x32,0x39,0x36,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x31,0x20,0x43,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x32,0x38, + 0x2e,0x37,0x36,0x35,0x2c,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x20,0x43,0x38,0x2e,0x32,0x39, + 0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x30, + 0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x30,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x30,0x2c, + 0x38,0x2e,0x32,0x39,0x36,0x20,0x38,0x2e,0x32,0x39, + 0x36,0x2c,0x30,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x30,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x31,0x20,0x43,0x38,0x2e,0x38,0x34,0x39,0x2c, + 0x31,0x20,0x31,0x2c,0x38,0x2e,0x38,0x34,0x39,0x20, + 0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43, + 0x31,0x2c,0x32,0x38,0x2e,0x32,0x31,0x32,0x20,0x38, + 0x2e,0x38,0x34,0x39,0x2c,0x33,0x36,0x2e,0x30,0x36, + 0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x36, + 0x2e,0x30,0x36,0x31,0x20,0x43,0x32,0x38,0x2e,0x32, + 0x31,0x32,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31,0x20, + 0x33,0x36,0x2e,0x30,0x36,0x31,0x2c,0x32,0x38,0x2e, + 0x32,0x31,0x32,0x20,0x33,0x36,0x2e,0x30,0x36,0x31, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x33, + 0x36,0x2e,0x30,0x36,0x31,0x2c,0x38,0x2e,0x38,0x34, + 0x39,0x20,0x32,0x38,0x2e,0x32,0x31,0x32,0x2c,0x31, + 0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x31,0x20,0x7a, + 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, + 0x20,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76, + 0x67,0x3e,0x0a +}; + diff --git a/data/converted/help_button_a_svg.cpp b/data/converted/help_button_a_svg.cpp index 14120f83a2..cedb8d212a 100644 --- a/data/converted/help_button_a_svg.cpp +++ b/data/converted/help_button_a_svg.cpp @@ -2,105 +2,104 @@ #include "../Resources.h" -const size_t help_button_a_svg_size = 981; -const unsigned char help_button_a_svg_data[981] = { +const size_t help_button_a_svg_size = 965; +const unsigned char help_button_a_svg_data[965] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x39,0x31,0x34,0x2c,0x31,0x34,0x2e,0x35, - 0x37,0x39,0x6c,0x2d,0x31,0x2e,0x36,0x38,0x32,0x2c, - 0x35,0x2e,0x33,0x30,0x38,0x68,0x33,0x2e,0x34,0x30, - 0x35,0x6c,0x2d,0x31,0x2e,0x36,0x37,0x2d,0x35,0x2e, - 0x33,0x30,0x38,0x48,0x31,0x38,0x2e,0x39,0x31,0x34, - 0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, - 0x33,0x2e,0x30,0x32,0x39,0x63,0x2d,0x38,0x2e,0x35, - 0x36,0x32,0x2c,0x30,0x2d,0x31,0x35,0x2e,0x35,0x30, - 0x31,0x2c,0x36,0x2e,0x39,0x34,0x2d,0x31,0x35,0x2e, - 0x35,0x30,0x31,0x2c,0x31,0x35,0x2e,0x35,0x0d,0x0a, - 0x09,0x09,0x09,0x63,0x30,0x2c,0x38,0x2e,0x35,0x36, - 0x33,0x2c,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31,0x35, - 0x2e,0x35,0x30,0x32,0x2c,0x31,0x35,0x2e,0x35,0x30, - 0x31,0x2c,0x31,0x35,0x2e,0x35,0x30,0x32,0x53,0x33, - 0x34,0x2e,0x30,0x33,0x2c,0x32,0x37,0x2e,0x30,0x39, - 0x31,0x2c,0x33,0x34,0x2e,0x30,0x33,0x2c,0x31,0x38, - 0x2e,0x35,0x32,0x39,0x43,0x33,0x34,0x2e,0x30,0x33, - 0x2c,0x39,0x2e,0x39,0x37,0x2c,0x32,0x37,0x2e,0x30, - 0x39,0x31,0x2c,0x33,0x2e,0x30,0x32,0x39,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x33,0x2e,0x30,0x32, - 0x39,0x7a,0x20,0x4d,0x32,0x32,0x2e,0x32,0x32,0x37, - 0x2c,0x32,0x34,0x2e,0x39,0x32,0x35,0x0d,0x0a,0x09, - 0x09,0x09,0x6c,0x2d,0x30,0x2e,0x39,0x31,0x39,0x2d, - 0x32,0x2e,0x39,0x31,0x33,0x68,0x2d,0x34,0x2e,0x37, - 0x34,0x31,0x6c,0x2d,0x30,0x2e,0x39,0x31,0x38,0x2c, - 0x32,0x2e,0x39,0x31,0x33,0x68,0x2d,0x32,0x2e,0x37, - 0x33,0x35,0x6c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, - 0x33,0x2e,0x35,0x30,0x39,0x68,0x32,0x2e,0x37,0x37, - 0x34,0x6c,0x34,0x2e,0x36,0x32,0x39,0x2c,0x31,0x33, - 0x2e,0x35,0x30,0x39,0x48,0x32,0x32,0x2e,0x32,0x32, - 0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79, - 0x3d,0x22,0x30,0x22,0x3e,0x0d,0x0a,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x33,0x36,0x2e,0x39,0x36,0x31,0x2c, - 0x30,0x2e,0x31,0x76,0x33,0x36,0x2e,0x38,0x36,0x31, - 0x48,0x30,0x2e,0x31,0x56,0x30,0x2e,0x31,0x48,0x33, - 0x36,0x2e,0x39,0x36,0x31,0x20,0x4d,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x2c,0x30,0x48,0x30,0x76,0x33,0x37, - 0x2e,0x30,0x36,0x68,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x56,0x30,0x4c,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, - 0x30,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d, - 0x0a + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x31,0x38,0x2e,0x39,0x31,0x34,0x2c,0x31, + 0x34,0x2e,0x35,0x37,0x39,0x6c,0x2d,0x31,0x2e,0x36, + 0x38,0x32,0x2c,0x35,0x2e,0x33,0x30,0x38,0x68,0x33, + 0x2e,0x34,0x30,0x35,0x6c,0x2d,0x31,0x2e,0x36,0x37, + 0x2d,0x35,0x2e,0x33,0x30,0x38,0x48,0x31,0x38,0x2e, + 0x39,0x31,0x34,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, + 0x33,0x31,0x2c,0x33,0x2e,0x30,0x32,0x39,0x63,0x2d, + 0x38,0x2e,0x35,0x36,0x32,0x2c,0x30,0x2d,0x31,0x35, + 0x2e,0x35,0x30,0x31,0x2c,0x36,0x2e,0x39,0x34,0x2d, + 0x31,0x35,0x2e,0x35,0x30,0x31,0x2c,0x31,0x35,0x2e, + 0x35,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c,0x38,0x2e, + 0x35,0x36,0x33,0x2c,0x36,0x2e,0x39,0x33,0x39,0x2c, + 0x31,0x35,0x2e,0x35,0x30,0x32,0x2c,0x31,0x35,0x2e, + 0x35,0x30,0x31,0x2c,0x31,0x35,0x2e,0x35,0x30,0x32, + 0x53,0x33,0x34,0x2e,0x30,0x33,0x2c,0x32,0x37,0x2e, + 0x30,0x39,0x31,0x2c,0x33,0x34,0x2e,0x30,0x33,0x2c, + 0x31,0x38,0x2e,0x35,0x32,0x39,0x43,0x33,0x34,0x2e, + 0x30,0x33,0x2c,0x39,0x2e,0x39,0x37,0x2c,0x32,0x37, + 0x2e,0x30,0x39,0x31,0x2c,0x33,0x2e,0x30,0x32,0x39, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x33,0x2e, + 0x30,0x32,0x39,0x7a,0x20,0x4d,0x32,0x32,0x2e,0x32, + 0x32,0x37,0x2c,0x32,0x34,0x2e,0x39,0x32,0x35,0x0a, + 0x09,0x09,0x09,0x6c,0x2d,0x30,0x2e,0x39,0x31,0x39, + 0x2d,0x32,0x2e,0x39,0x31,0x33,0x68,0x2d,0x34,0x2e, + 0x37,0x34,0x31,0x6c,0x2d,0x30,0x2e,0x39,0x31,0x38, + 0x2c,0x32,0x2e,0x39,0x31,0x33,0x68,0x2d,0x32,0x2e, + 0x37,0x33,0x35,0x6c,0x34,0x2e,0x36,0x34,0x36,0x2d, + 0x31,0x33,0x2e,0x35,0x30,0x39,0x68,0x32,0x2e,0x37, + 0x37,0x34,0x6c,0x34,0x2e,0x36,0x32,0x39,0x2c,0x31, + 0x33,0x2e,0x35,0x30,0x39,0x48,0x32,0x32,0x2e,0x32, + 0x32,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67, + 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, + 0x30,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x33,0x36,0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e,0x31, + 0x76,0x33,0x36,0x2e,0x38,0x36,0x31,0x48,0x30,0x2e, + 0x31,0x56,0x30,0x2e,0x31,0x48,0x33,0x36,0x2e,0x39, + 0x36,0x31,0x20,0x4d,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x2c,0x30,0x48,0x30,0x76,0x33,0x37,0x2e,0x30,0x36, + 0x68,0x33,0x37,0x2e,0x30,0x36,0x31,0x56,0x30,0x4c, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x7a,0x22, + 0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f, + 0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/help_button_b_svg.cpp b/data/converted/help_button_b_svg.cpp index c1316dc67e..94da0650dd 100644 --- a/data/converted/help_button_b_svg.cpp +++ b/data/converted/help_button_b_svg.cpp @@ -2,96 +2,95 @@ #include "../Resources.h" -const size_t help_button_b_svg_size = 1504; -const unsigned char help_button_b_svg_data[1504] = { +const size_t help_button_b_svg_size = 1483; +const unsigned char help_button_b_svg_data[1483] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x42, - 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e, - 0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30, - 0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39, - 0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22,0x20, - 0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79,0x3d, - 0x22,0x30,0x70,0x78,0x22,0x0d,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x39,0x2e,0x34,0x37, - 0x2c,0x31,0x38,0x2e,0x39,0x34,0x39,0x68,0x2d,0x32, - 0x2e,0x36,0x39,0x39,0x76,0x33,0x2e,0x38,0x38,0x37, - 0x68,0x32,0x2e,0x34,0x39,0x36,0x63,0x30,0x2e,0x37, - 0x31,0x37,0x2c,0x30,0x2c,0x31,0x2e,0x32,0x36,0x37, - 0x2d,0x30,0x2e,0x31,0x35,0x34,0x2c,0x31,0x2e,0x36, - 0x34,0x34,0x2d,0x30,0x2e,0x34,0x36,0x37,0x63,0x30, - 0x2e,0x33,0x37,0x38,0x2d,0x30,0x2e,0x33,0x31,0x33, - 0x2c,0x30,0x2e,0x35,0x36,0x33,0x2d,0x30,0x2e,0x37, - 0x37,0x32,0x2c,0x30,0x2e,0x35,0x36,0x33,0x2d,0x31, - 0x2e,0x33,0x38,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63, - 0x30,0x2d,0x30,0x2e,0x36,0x35,0x39,0x2d,0x30,0x2e, - 0x31,0x36,0x2d,0x31,0x2e,0x31,0x36,0x35,0x2d,0x30, - 0x2e,0x34,0x38,0x2d,0x31,0x2e,0x35,0x31,0x33,0x43, - 0x32,0x30,0x2e,0x36,0x37,0x31,0x2c,0x31,0x39,0x2e, - 0x31,0x32,0x34,0x2c,0x32,0x30,0x2e,0x31,0x36,0x33, - 0x2c,0x31,0x38,0x2e,0x39,0x34,0x39,0x2c,0x31,0x39, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x42,0x22,0x20,0x78, + 0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73, + 0x76,0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a, + 0x78,0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, + 0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f, + 0x78,0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22, + 0x30,0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70, + 0x78,0x22,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, + 0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78, + 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0a,0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x39, 0x2e,0x34,0x37,0x2c,0x31,0x38,0x2e,0x39,0x34,0x39, - 0x7a,0x20,0x4d,0x32,0x30,0x2e,0x33,0x38,0x39,0x2c, - 0x31,0x36,0x2e,0x36,0x33,0x63,0x30,0x2e,0x33,0x39, - 0x2d,0x30,0x2e,0x32,0x39,0x37,0x2c,0x30,0x2e,0x35, - 0x38,0x35,0x2d,0x30,0x2e,0x37,0x32,0x39,0x2c,0x30, - 0x2e,0x35,0x38,0x35,0x2d,0x31,0x2e,0x32,0x39,0x39, - 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, - 0x36,0x32,0x35,0x2d,0x30,0x2e,0x31,0x39,0x37,0x2d, - 0x31,0x2e,0x30,0x38,0x36,0x2d,0x30,0x2e,0x35,0x39, - 0x2d,0x31,0x2e,0x33,0x38,0x33,0x73,0x2d,0x30,0x2e, - 0x39,0x37,0x39,0x2d,0x30,0x2e,0x34,0x34,0x35,0x2d, - 0x31,0x2e,0x37,0x35,0x38,0x2d,0x30,0x2e,0x34,0x34, - 0x35,0x68,0x2d,0x31,0x2e,0x38,0x35,0x35,0x76,0x33, - 0x2e,0x35,0x37,0x32,0x68,0x31,0x2e,0x39,0x34,0x38, - 0x43,0x31,0x39,0x2e,0x34,0x34,0x32,0x2c,0x31,0x37, - 0x2e,0x30,0x37,0x35,0x2c,0x31,0x39,0x2e,0x39,0x39, - 0x39,0x2c,0x31,0x36,0x2e,0x39,0x32,0x37,0x2c,0x32, - 0x30,0x2e,0x33,0x38,0x39,0x2c,0x31,0x36,0x2e,0x36, - 0x33,0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31, + 0x68,0x2d,0x32,0x2e,0x36,0x39,0x39,0x76,0x33,0x2e, + 0x38,0x38,0x37,0x68,0x32,0x2e,0x34,0x39,0x36,0x63, + 0x30,0x2e,0x37,0x31,0x37,0x2c,0x30,0x2c,0x31,0x2e, + 0x32,0x36,0x37,0x2d,0x30,0x2e,0x31,0x35,0x34,0x2c, + 0x31,0x2e,0x36,0x34,0x34,0x2d,0x30,0x2e,0x34,0x36, + 0x37,0x63,0x30,0x2e,0x33,0x37,0x38,0x2d,0x30,0x2e, + 0x33,0x31,0x33,0x2c,0x30,0x2e,0x35,0x36,0x33,0x2d, + 0x30,0x2e,0x37,0x37,0x32,0x2c,0x30,0x2e,0x35,0x36, + 0x33,0x2d,0x31,0x2e,0x33,0x38,0x35,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2d,0x30,0x2e,0x36,0x35,0x39,0x2d, + 0x30,0x2e,0x31,0x36,0x2d,0x31,0x2e,0x31,0x36,0x35, + 0x2d,0x30,0x2e,0x34,0x38,0x2d,0x31,0x2e,0x35,0x31, + 0x33,0x43,0x32,0x30,0x2e,0x36,0x37,0x31,0x2c,0x31, + 0x39,0x2e,0x31,0x32,0x34,0x2c,0x32,0x30,0x2e,0x31, + 0x36,0x33,0x2c,0x31,0x38,0x2e,0x39,0x34,0x39,0x2c, + 0x31,0x39,0x2e,0x34,0x37,0x2c,0x31,0x38,0x2e,0x39, + 0x34,0x39,0x7a,0x20,0x4d,0x32,0x30,0x2e,0x33,0x38, + 0x39,0x2c,0x31,0x36,0x2e,0x36,0x33,0x63,0x30,0x2e, + 0x33,0x39,0x2d,0x30,0x2e,0x32,0x39,0x37,0x2c,0x30, + 0x2e,0x35,0x38,0x35,0x2d,0x30,0x2e,0x37,0x32,0x39, + 0x2c,0x30,0x2e,0x35,0x38,0x35,0x2d,0x31,0x2e,0x32, + 0x39,0x39,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30, + 0x2e,0x36,0x32,0x35,0x2d,0x30,0x2e,0x31,0x39,0x37, + 0x2d,0x31,0x2e,0x30,0x38,0x36,0x2d,0x30,0x2e,0x35, + 0x39,0x2d,0x31,0x2e,0x33,0x38,0x33,0x73,0x2d,0x30, + 0x2e,0x39,0x37,0x39,0x2d,0x30,0x2e,0x34,0x34,0x35, + 0x2d,0x31,0x2e,0x37,0x35,0x38,0x2d,0x30,0x2e,0x34, + 0x34,0x35,0x68,0x2d,0x31,0x2e,0x38,0x35,0x35,0x76, + 0x33,0x2e,0x35,0x37,0x32,0x68,0x31,0x2e,0x39,0x34, + 0x38,0x43,0x31,0x39,0x2e,0x34,0x34,0x32,0x2c,0x31, + 0x37,0x2e,0x30,0x37,0x35,0x2c,0x31,0x39,0x2e,0x39, + 0x39,0x39,0x2c,0x31,0x36,0x2e,0x39,0x32,0x37,0x2c, + 0x32,0x30,0x2e,0x33,0x38,0x39,0x2c,0x31,0x36,0x2e, + 0x36,0x33,0x7a,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31, 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x30,0x33,0x31, 0x63,0x2d,0x38,0x2e,0x35,0x36,0x31,0x2c,0x30,0x2d, 0x31,0x35,0x2e,0x35,0x2c,0x36,0x2e,0x39,0x33,0x38, @@ -101,58 +100,58 @@ const unsigned char help_button_b_svg_data[1504] = { 0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x63,0x38, 0x2e,0x35,0x36,0x33,0x2c,0x30,0x2c,0x31,0x35,0x2e, 0x35,0x2d,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31,0x35, - 0x2e,0x35,0x2d,0x31,0x35,0x2e,0x35,0x0d,0x0a,0x09, - 0x09,0x09,0x43,0x33,0x34,0x2e,0x30,0x33,0x2c,0x39, - 0x2e,0x39,0x36,0x39,0x2c,0x32,0x37,0x2e,0x30,0x39, - 0x31,0x2c,0x33,0x2e,0x30,0x33,0x31,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x2e,0x30,0x33,0x31,0x7a, - 0x20,0x4d,0x32,0x32,0x2e,0x38,0x39,0x34,0x2c,0x32, - 0x33,0x2e,0x39,0x32,0x37,0x63,0x2d,0x30,0x2e,0x38, - 0x35,0x34,0x2c,0x30,0x2e,0x36,0x36,0x35,0x2d,0x32, - 0x2e,0x30,0x36,0x33,0x2c,0x30,0x2e,0x39,0x39,0x37, - 0x2d,0x33,0x2e,0x36,0x32,0x37,0x2c,0x30,0x2e,0x39, - 0x39,0x37,0x68,0x2d,0x35,0x2e,0x32,0x30,0x35,0x56, - 0x31,0x31,0x2e,0x34,0x31,0x36,0x68,0x34,0x2e,0x35, - 0x36,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e, - 0x35,0x39,0x2c,0x30,0x2c,0x32,0x2e,0x38,0x33,0x2c, - 0x30,0x2e,0x33,0x31,0x2c,0x33,0x2e,0x37,0x32,0x31, - 0x2c,0x30,0x2e,0x39,0x32,0x39,0x63,0x30,0x2e,0x38, - 0x39,0x31,0x2c,0x30,0x2e,0x36,0x31,0x37,0x2c,0x31, - 0x2e,0x33,0x33,0x36,0x2c,0x31,0x2e,0x35,0x34,0x33, - 0x2c,0x31,0x2e,0x33,0x33,0x36,0x2c,0x32,0x2e,0x37, - 0x37,0x33,0x63,0x30,0x2c,0x30,0x2e,0x36,0x32,0x35, - 0x2d,0x30,0x2e,0x31,0x36,0x36,0x2c,0x31,0x2e,0x31, - 0x38,0x34,0x2d,0x30,0x2e,0x34,0x39,0x36,0x2c,0x31, - 0x2e,0x36,0x37,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63, - 0x2d,0x30,0x2e,0x33,0x33,0x32,0x2c,0x30,0x2e,0x34, - 0x39,0x32,0x2d,0x30,0x2e,0x38,0x31,0x33,0x2c,0x30, - 0x2e,0x38,0x36,0x2d,0x31,0x2e,0x34,0x34,0x31,0x2c, - 0x31,0x2e,0x31,0x30,0x38,0x63,0x30,0x2e,0x38,0x31, - 0x31,0x2c,0x30,0x2e,0x31,0x37,0x34,0x2c,0x31,0x2e, - 0x34,0x31,0x38,0x2c,0x30,0x2e,0x35,0x34,0x34,0x2c, - 0x31,0x2e,0x38,0x32,0x31,0x2c,0x31,0x2e,0x31,0x31, - 0x33,0x63,0x30,0x2e,0x34,0x30,0x35,0x2c,0x30,0x2e, - 0x35,0x36,0x38,0x2c,0x30,0x2e,0x36,0x30,0x37,0x2c, - 0x31,0x2e,0x32,0x32,0x39,0x2c,0x30,0x2e,0x36,0x30, - 0x37,0x2c,0x31,0x2e,0x39,0x37,0x37,0x0d,0x0a,0x09, - 0x09,0x09,0x43,0x32,0x34,0x2e,0x31,0x37,0x34,0x2c, - 0x32,0x32,0x2e,0x32,0x38,0x33,0x2c,0x32,0x33,0x2e, - 0x37,0x34,0x37,0x2c,0x32,0x33,0x2e,0x32,0x36,0x32, - 0x2c,0x32,0x32,0x2e,0x38,0x39,0x34,0x2c,0x32,0x33, - 0x2e,0x39,0x32,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63, - 0x69,0x74,0x79,0x3d,0x22,0x30,0x22,0x3e,0x0d,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x36,0x2e,0x39, - 0x36,0x31,0x2c,0x30,0x2e,0x31,0x76,0x33,0x36,0x2e, - 0x38,0x36,0x31,0x48,0x30,0x2e,0x31,0x56,0x30,0x2e, - 0x31,0x48,0x33,0x36,0x2e,0x39,0x36,0x31,0x20,0x4d, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x48,0x30, - 0x76,0x33,0x37,0x2e,0x30,0x36,0x68,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x56,0x30,0x4c,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76, - 0x67,0x3e,0x0d,0x0a + 0x2e,0x35,0x2d,0x31,0x35,0x2e,0x35,0x0a,0x09,0x09, + 0x09,0x43,0x33,0x34,0x2e,0x30,0x33,0x2c,0x39,0x2e, + 0x39,0x36,0x39,0x2c,0x32,0x37,0x2e,0x30,0x39,0x31, + 0x2c,0x33,0x2e,0x30,0x33,0x31,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x33,0x2e,0x30,0x33,0x31,0x7a,0x20, + 0x4d,0x32,0x32,0x2e,0x38,0x39,0x34,0x2c,0x32,0x33, + 0x2e,0x39,0x32,0x37,0x63,0x2d,0x30,0x2e,0x38,0x35, + 0x34,0x2c,0x30,0x2e,0x36,0x36,0x35,0x2d,0x32,0x2e, + 0x30,0x36,0x33,0x2c,0x30,0x2e,0x39,0x39,0x37,0x2d, + 0x33,0x2e,0x36,0x32,0x37,0x2c,0x30,0x2e,0x39,0x39, + 0x37,0x68,0x2d,0x35,0x2e,0x32,0x30,0x35,0x56,0x31, + 0x31,0x2e,0x34,0x31,0x36,0x68,0x34,0x2e,0x35,0x36, + 0x34,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x35,0x39, + 0x2c,0x30,0x2c,0x32,0x2e,0x38,0x33,0x2c,0x30,0x2e, + 0x33,0x31,0x2c,0x33,0x2e,0x37,0x32,0x31,0x2c,0x30, + 0x2e,0x39,0x32,0x39,0x63,0x30,0x2e,0x38,0x39,0x31, + 0x2c,0x30,0x2e,0x36,0x31,0x37,0x2c,0x31,0x2e,0x33, + 0x33,0x36,0x2c,0x31,0x2e,0x35,0x34,0x33,0x2c,0x31, + 0x2e,0x33,0x33,0x36,0x2c,0x32,0x2e,0x37,0x37,0x33, + 0x63,0x30,0x2c,0x30,0x2e,0x36,0x32,0x35,0x2d,0x30, + 0x2e,0x31,0x36,0x36,0x2c,0x31,0x2e,0x31,0x38,0x34, + 0x2d,0x30,0x2e,0x34,0x39,0x36,0x2c,0x31,0x2e,0x36, + 0x37,0x34,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, + 0x33,0x33,0x32,0x2c,0x30,0x2e,0x34,0x39,0x32,0x2d, + 0x30,0x2e,0x38,0x31,0x33,0x2c,0x30,0x2e,0x38,0x36, + 0x2d,0x31,0x2e,0x34,0x34,0x31,0x2c,0x31,0x2e,0x31, + 0x30,0x38,0x63,0x30,0x2e,0x38,0x31,0x31,0x2c,0x30, + 0x2e,0x31,0x37,0x34,0x2c,0x31,0x2e,0x34,0x31,0x38, + 0x2c,0x30,0x2e,0x35,0x34,0x34,0x2c,0x31,0x2e,0x38, + 0x32,0x31,0x2c,0x31,0x2e,0x31,0x31,0x33,0x63,0x30, + 0x2e,0x34,0x30,0x35,0x2c,0x30,0x2e,0x35,0x36,0x38, + 0x2c,0x30,0x2e,0x36,0x30,0x37,0x2c,0x31,0x2e,0x32, + 0x32,0x39,0x2c,0x30,0x2e,0x36,0x30,0x37,0x2c,0x31, + 0x2e,0x39,0x37,0x37,0x0a,0x09,0x09,0x09,0x43,0x32, + 0x34,0x2e,0x31,0x37,0x34,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x33,0x2c,0x32,0x33,0x2e,0x37,0x34,0x37,0x2c, + 0x32,0x33,0x2e,0x32,0x36,0x32,0x2c,0x32,0x32,0x2e, + 0x38,0x39,0x34,0x2c,0x32,0x33,0x2e,0x39,0x32,0x37, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f, + 0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x22, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x36, + 0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e,0x31,0x76,0x33, + 0x36,0x2e,0x38,0x36,0x31,0x48,0x30,0x2e,0x31,0x56, + 0x30,0x2e,0x31,0x48,0x33,0x36,0x2e,0x39,0x36,0x31, + 0x20,0x4d,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30, + 0x48,0x30,0x76,0x33,0x37,0x2e,0x30,0x36,0x68,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x56,0x30,0x4c,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e, + 0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76, + 0x67,0x3e,0x0a }; + diff --git a/data/converted/help_button_l_svg.cpp b/data/converted/help_button_l_svg.cpp index 2fbb07e096..fb8eb343b7 100644 --- a/data/converted/help_button_l_svg.cpp +++ b/data/converted/help_button_l_svg.cpp @@ -2,109 +2,109 @@ #include "../Resources.h" -const size_t help_button_l_svg_size = 1026; -const unsigned char help_button_l_svg_data[1026] = { +const size_t help_button_l_svg_size = 1013; +const unsigned char help_button_l_svg_data[1013] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x32,0x39,0x2e,0x32,0x35,0x34,0x2c,0x31, - 0x31,0x2e,0x35,0x32,0x36,0x63,0x33,0x2e,0x34,0x37, - 0x38,0x2c,0x30,0x2c,0x36,0x2e,0x33,0x30,0x37,0x2c, - 0x33,0x2e,0x31,0x34,0x2c,0x36,0x2e,0x33,0x30,0x37, - 0x2c,0x36,0x2e,0x39,0x39,0x37,0x63,0x30,0x2c,0x33, - 0x2e,0x38,0x36,0x36,0x2d,0x32,0x2e,0x38,0x32,0x39, - 0x2c,0x37,0x2e,0x30,0x31,0x31,0x2d,0x36,0x2e,0x33, - 0x30,0x37,0x2c,0x37,0x2e,0x30,0x31,0x31,0x48,0x37, - 0x2e,0x37,0x36,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x33, - 0x2e,0x34,0x35,0x32,0x2d,0x30,0x2e,0x30,0x33,0x2d, - 0x36,0x2e,0x32,0x36,0x2d,0x33,0x2e,0x31,0x37,0x37, - 0x2d,0x36,0x2e,0x32,0x36,0x2d,0x37,0x2e,0x30,0x31, - 0x31,0x63,0x30,0x2d,0x33,0x2e,0x38,0x32,0x38,0x2c, - 0x32,0x2e,0x38,0x30,0x38,0x2d,0x36,0x2e,0x39,0x36, - 0x36,0x2c,0x36,0x2e,0x32,0x34,0x37,0x2d,0x36,0x2e, - 0x39,0x39,0x37,0x48,0x32,0x39,0x2e,0x32,0x35,0x34, - 0x20,0x4d,0x32,0x39,0x2e,0x32,0x35,0x34,0x2c,0x31, - 0x30,0x2e,0x30,0x32,0x36,0x63,0x2d,0x30,0x2e,0x30, - 0x32,0x31,0x2c,0x30,0x2d,0x32,0x31,0x2e,0x35,0x30, - 0x37,0x2c,0x30,0x2d,0x32,0x31,0x2e,0x35,0x30,0x37, - 0x2c,0x30,0x0d,0x0a,0x09,0x09,0x43,0x33,0x2e,0x34, - 0x36,0x36,0x2c,0x31,0x30,0x2e,0x30,0x36,0x34,0x2c, - 0x30,0x2c,0x31,0x33,0x2e,0x38,0x34,0x36,0x2c,0x30, - 0x2c,0x31,0x38,0x2e,0x35,0x32,0x33,0x63,0x30,0x2c, - 0x34,0x2e,0x36,0x37,0x38,0x2c,0x33,0x2e,0x34,0x36, - 0x36,0x2c,0x38,0x2e,0x34,0x37,0x33,0x2c,0x37,0x2e, - 0x37,0x34,0x37,0x2c,0x38,0x2e,0x35,0x31,0x31,0x63, - 0x30,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x34,0x38,0x33, - 0x2c,0x30,0x2c,0x32,0x31,0x2e,0x35,0x30,0x37,0x2c, - 0x30,0x63,0x34,0x2e,0x33,0x31,0x33,0x2c,0x30,0x2c, - 0x37,0x2e,0x38,0x30,0x37,0x2d,0x33,0x2e,0x38,0x31, - 0x32,0x2c,0x37,0x2e,0x38,0x30,0x37,0x2d,0x38,0x2e, - 0x35,0x31,0x31,0x0d,0x0a,0x09,0x09,0x53,0x33,0x33, - 0x2e,0x35,0x36,0x36,0x2c,0x31,0x30,0x2e,0x30,0x32, - 0x36,0x2c,0x32,0x39,0x2e,0x32,0x35,0x34,0x2c,0x31, - 0x30,0x2e,0x30,0x32,0x36,0x4c,0x32,0x39,0x2e,0x32, - 0x35,0x34,0x2c,0x31,0x30,0x2e,0x30,0x32,0x36,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x70,0x6f,0x6c,0x79,0x67,0x6f,0x6e,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x70,0x6f,0x69,0x6e,0x74, - 0x73,0x3d,0x22,0x31,0x35,0x2e,0x39,0x32,0x2c,0x32, - 0x32,0x2e,0x32,0x31,0x32,0x20,0x32,0x31,0x2e,0x31, - 0x34,0x31,0x2c,0x32,0x32,0x2e,0x32,0x31,0x32,0x20, - 0x32,0x31,0x2e,0x31,0x34,0x31,0x2c,0x32,0x30,0x2e, - 0x38,0x35,0x20,0x31,0x37,0x2e,0x35,0x34,0x33,0x2c, - 0x32,0x30,0x2e,0x38,0x35,0x20,0x31,0x37,0x2e,0x35, - 0x34,0x33,0x2c,0x31,0x34,0x2e,0x38,0x33,0x33,0x20, - 0x31,0x35,0x2e,0x39,0x32,0x2c,0x31,0x34,0x2e,0x38, - 0x33,0x33,0x20,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f, - 0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x32, + 0x35,0x34,0x2c,0x31,0x31,0x2e,0x35,0x32,0x36,0x63, + 0x33,0x2e,0x34,0x37,0x38,0x2c,0x30,0x2c,0x36,0x2e, + 0x33,0x30,0x37,0x2c,0x33,0x2e,0x31,0x34,0x2c,0x36, + 0x2e,0x33,0x30,0x37,0x2c,0x36,0x2e,0x39,0x39,0x37, + 0x63,0x30,0x2c,0x33,0x2e,0x38,0x36,0x36,0x2d,0x32, + 0x2e,0x38,0x32,0x39,0x2c,0x37,0x2e,0x30,0x31,0x31, + 0x2d,0x36,0x2e,0x33,0x30,0x37,0x2c,0x37,0x2e,0x30, + 0x31,0x31,0x48,0x37,0x2e,0x37,0x36,0x0a,0x09,0x09, + 0x63,0x2d,0x33,0x2e,0x34,0x35,0x32,0x2d,0x30,0x2e, + 0x30,0x33,0x2d,0x36,0x2e,0x32,0x36,0x2d,0x33,0x2e, + 0x31,0x37,0x37,0x2d,0x36,0x2e,0x32,0x36,0x2d,0x37, + 0x2e,0x30,0x31,0x31,0x63,0x30,0x2d,0x33,0x2e,0x38, + 0x32,0x38,0x2c,0x32,0x2e,0x38,0x30,0x38,0x2d,0x36, + 0x2e,0x39,0x36,0x36,0x2c,0x36,0x2e,0x32,0x34,0x37, + 0x2d,0x36,0x2e,0x39,0x39,0x37,0x48,0x32,0x39,0x2e, + 0x32,0x35,0x34,0x20,0x4d,0x32,0x39,0x2e,0x32,0x35, + 0x34,0x2c,0x31,0x30,0x2e,0x30,0x32,0x36,0x63,0x2d, + 0x30,0x2e,0x30,0x32,0x31,0x2c,0x30,0x2d,0x32,0x31, + 0x2e,0x35,0x30,0x37,0x2c,0x30,0x2d,0x32,0x31,0x2e, + 0x35,0x30,0x37,0x2c,0x30,0x0a,0x09,0x09,0x43,0x33, + 0x2e,0x34,0x36,0x36,0x2c,0x31,0x30,0x2e,0x30,0x36, + 0x34,0x2c,0x30,0x2c,0x31,0x33,0x2e,0x38,0x34,0x36, + 0x2c,0x30,0x2c,0x31,0x38,0x2e,0x35,0x32,0x33,0x63, + 0x30,0x2c,0x34,0x2e,0x36,0x37,0x38,0x2c,0x33,0x2e, + 0x34,0x36,0x36,0x2c,0x38,0x2e,0x34,0x37,0x33,0x2c, + 0x37,0x2e,0x37,0x34,0x37,0x2c,0x38,0x2e,0x35,0x31, + 0x31,0x63,0x30,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x34, + 0x38,0x33,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x35,0x30, + 0x37,0x2c,0x30,0x63,0x34,0x2e,0x33,0x31,0x33,0x2c, + 0x30,0x2c,0x37,0x2e,0x38,0x30,0x37,0x2d,0x33,0x2e, + 0x38,0x31,0x32,0x2c,0x37,0x2e,0x38,0x30,0x37,0x2d, + 0x38,0x2e,0x35,0x31,0x31,0x0a,0x09,0x09,0x53,0x33, + 0x33,0x2e,0x35,0x36,0x36,0x2c,0x31,0x30,0x2e,0x30, + 0x32,0x36,0x2c,0x32,0x39,0x2e,0x32,0x35,0x34,0x2c, + 0x31,0x30,0x2e,0x30,0x32,0x36,0x4c,0x32,0x39,0x2e, + 0x32,0x35,0x34,0x2c,0x31,0x30,0x2e,0x30,0x32,0x36, + 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x70,0x6f,0x6c,0x79,0x67,0x6f,0x6e,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x20,0x70,0x6f,0x69,0x6e,0x74,0x73, + 0x3d,0x22,0x31,0x35,0x2e,0x39,0x32,0x2c,0x32,0x32, + 0x2e,0x32,0x31,0x32,0x20,0x32,0x31,0x2e,0x31,0x34, + 0x31,0x2c,0x32,0x32,0x2e,0x32,0x31,0x32,0x20,0x32, + 0x31,0x2e,0x31,0x34,0x31,0x2c,0x32,0x30,0x2e,0x38, + 0x35,0x20,0x31,0x37,0x2e,0x35,0x34,0x33,0x2c,0x32, + 0x30,0x2e,0x38,0x35,0x20,0x31,0x37,0x2e,0x35,0x34, + 0x33,0x2c,0x31,0x34,0x2e,0x38,0x33,0x33,0x20,0x31, + 0x35,0x2e,0x39,0x32,0x2c,0x31,0x34,0x2e,0x38,0x33, + 0x33,0x20,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x73,0x76, + 0x67,0x3e,0x0a }; + diff --git a/data/converted/help_button_r_svg.cpp b/data/converted/help_button_r_svg.cpp index e76411c976..ea1eceb7a3 100644 --- a/data/converted/help_button_r_svg.cpp +++ b/data/converted/help_button_r_svg.cpp @@ -2,99 +2,98 @@ #include "../Resources.h" -const size_t help_button_r_svg_size = 1331; -const unsigned char help_button_r_svg_data[1331] = { +const size_t help_button_r_svg_size = 1315; +const unsigned char help_button_r_svg_data[1315] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x36,0x2e,0x39, - 0x37,0x33,0x2c,0x31,0x36,0x2e,0x30,0x38,0x36,0x68, - 0x31,0x2e,0x37,0x37,0x39,0x63,0x30,0x2e,0x37,0x32, - 0x32,0x2c,0x30,0x2c,0x31,0x2e,0x31,0x31,0x37,0x2c, - 0x30,0x2e,0x33,0x31,0x32,0x2c,0x31,0x2e,0x31,0x31, - 0x37,0x2c,0x31,0x2e,0x30,0x32,0x32,0x63,0x30,0x2c, - 0x30,0x2e,0x37,0x34,0x37,0x2d,0x30,0x2e,0x33,0x39, - 0x36,0x2c,0x31,0x2e,0x30,0x36,0x2d,0x31,0x2e,0x31, - 0x31,0x37,0x2c,0x31,0x2e,0x30,0x36,0x68,0x2d,0x31, - 0x2e,0x37,0x37,0x39,0x56,0x31,0x36,0x2e,0x30,0x38, - 0x36,0x7a,0x0d,0x0a,0x09,0x20,0x4d,0x31,0x35,0x2e, - 0x33,0x35,0x33,0x2c,0x32,0x32,0x2e,0x32,0x31,0x32, - 0x68,0x31,0x2e,0x36,0x32,0x76,0x2d,0x32,0x2e,0x38, - 0x38,0x36,0x68,0x31,0x2e,0x36,0x32,0x35,0x63,0x30, - 0x2e,0x38,0x31,0x36,0x2c,0x30,0x2c,0x31,0x2e,0x31, - 0x31,0x37,0x2c,0x30,0x2e,0x33,0x34,0x32,0x2c,0x31, - 0x2e,0x32,0x33,0x2c,0x31,0x2e,0x31,0x31,0x38,0x63, - 0x30,0x2e,0x30,0x38,0x32,0x2c,0x30,0x2e,0x35,0x38, - 0x39,0x2c,0x30,0x2e,0x30,0x36,0x31,0x2c,0x31,0x2e, - 0x33,0x30,0x34,0x2c,0x30,0x2e,0x32,0x35,0x38,0x2c, - 0x31,0x2e,0x37,0x36,0x39,0x68,0x31,0x2e,0x36,0x32, - 0x31,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x32,0x38, - 0x39,0x2d,0x30,0x2e,0x34,0x31,0x34,0x2d,0x30,0x2e, - 0x32,0x37,0x39,0x2d,0x31,0x2e,0x32,0x38,0x2d,0x30, - 0x2e,0x33,0x31,0x33,0x2d,0x31,0x2e,0x37,0x34,0x38, - 0x63,0x2d,0x30,0x2e,0x30,0x35,0x31,0x2d,0x30,0x2e, - 0x37,0x34,0x34,0x2d,0x30,0x2e,0x32,0x37,0x35,0x2d, - 0x31,0x2e,0x35,0x32,0x31,0x2d,0x31,0x2e,0x30,0x37, - 0x2d,0x31,0x2e,0x37,0x32,0x38,0x63,0x30,0x2c,0x30, - 0x2c,0x31,0x2e,0x31,0x36,0x36,0x2d,0x30,0x2e,0x33, - 0x30,0x33,0x2c,0x31,0x2e,0x31,0x36,0x36,0x2d,0x31, - 0x2e,0x38,0x37,0x33,0x0d,0x0a,0x09,0x63,0x30,0x2d, - 0x31,0x2e,0x31,0x31,0x38,0x2d,0x30,0x2e,0x38,0x33, - 0x38,0x2d,0x32,0x2e,0x30,0x33,0x36,0x2d,0x32,0x2e, - 0x31,0x36,0x2d,0x32,0x2e,0x30,0x33,0x36,0x68,0x2d, - 0x33,0x2e,0x39,0x37,0x39,0x4c,0x31,0x35,0x2e,0x33, - 0x35,0x33,0x2c,0x32,0x32,0x2e,0x32,0x31,0x32,0x4c, - 0x31,0x35,0x2e,0x33,0x35,0x33,0x2c,0x32,0x32,0x2e, - 0x32,0x31,0x32,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x31,0x36,0x2e,0x39,0x37,0x33,0x2c,0x31,0x36, + 0x2e,0x30,0x38,0x36,0x68,0x31,0x2e,0x37,0x37,0x39, + 0x63,0x30,0x2e,0x37,0x32,0x32,0x2c,0x30,0x2c,0x31, + 0x2e,0x31,0x31,0x37,0x2c,0x30,0x2e,0x33,0x31,0x32, + 0x2c,0x31,0x2e,0x31,0x31,0x37,0x2c,0x31,0x2e,0x30, + 0x32,0x32,0x63,0x30,0x2c,0x30,0x2e,0x37,0x34,0x37, + 0x2d,0x30,0x2e,0x33,0x39,0x36,0x2c,0x31,0x2e,0x30, + 0x36,0x2d,0x31,0x2e,0x31,0x31,0x37,0x2c,0x31,0x2e, + 0x30,0x36,0x68,0x2d,0x31,0x2e,0x37,0x37,0x39,0x56, + 0x31,0x36,0x2e,0x30,0x38,0x36,0x7a,0x0a,0x09,0x20, + 0x4d,0x31,0x35,0x2e,0x33,0x35,0x33,0x2c,0x32,0x32, + 0x2e,0x32,0x31,0x32,0x68,0x31,0x2e,0x36,0x32,0x76, + 0x2d,0x32,0x2e,0x38,0x38,0x36,0x68,0x31,0x2e,0x36, + 0x32,0x35,0x63,0x30,0x2e,0x38,0x31,0x36,0x2c,0x30, + 0x2c,0x31,0x2e,0x31,0x31,0x37,0x2c,0x30,0x2e,0x33, + 0x34,0x32,0x2c,0x31,0x2e,0x32,0x33,0x2c,0x31,0x2e, + 0x31,0x31,0x38,0x63,0x30,0x2e,0x30,0x38,0x32,0x2c, + 0x30,0x2e,0x35,0x38,0x39,0x2c,0x30,0x2e,0x30,0x36, + 0x31,0x2c,0x31,0x2e,0x33,0x30,0x34,0x2c,0x30,0x2e, + 0x32,0x35,0x38,0x2c,0x31,0x2e,0x37,0x36,0x39,0x68, + 0x31,0x2e,0x36,0x32,0x31,0x0a,0x09,0x63,0x2d,0x30, + 0x2e,0x32,0x38,0x39,0x2d,0x30,0x2e,0x34,0x31,0x34, + 0x2d,0x30,0x2e,0x32,0x37,0x39,0x2d,0x31,0x2e,0x32, + 0x38,0x2d,0x30,0x2e,0x33,0x31,0x33,0x2d,0x31,0x2e, + 0x37,0x34,0x38,0x63,0x2d,0x30,0x2e,0x30,0x35,0x31, + 0x2d,0x30,0x2e,0x37,0x34,0x34,0x2d,0x30,0x2e,0x32, + 0x37,0x35,0x2d,0x31,0x2e,0x35,0x32,0x31,0x2d,0x31, + 0x2e,0x30,0x37,0x2d,0x31,0x2e,0x37,0x32,0x38,0x63, + 0x30,0x2c,0x30,0x2c,0x31,0x2e,0x31,0x36,0x36,0x2d, + 0x30,0x2e,0x33,0x30,0x33,0x2c,0x31,0x2e,0x31,0x36, + 0x36,0x2d,0x31,0x2e,0x38,0x37,0x33,0x0a,0x09,0x63, + 0x30,0x2d,0x31,0x2e,0x31,0x31,0x38,0x2d,0x30,0x2e, + 0x38,0x33,0x38,0x2d,0x32,0x2e,0x30,0x33,0x36,0x2d, + 0x32,0x2e,0x31,0x36,0x2d,0x32,0x2e,0x30,0x33,0x36, + 0x68,0x2d,0x33,0x2e,0x39,0x37,0x39,0x4c,0x31,0x35, + 0x2e,0x33,0x35,0x33,0x2c,0x32,0x32,0x2e,0x32,0x31, + 0x32,0x4c,0x31,0x35,0x2e,0x33,0x35,0x33,0x2c,0x32, + 0x32,0x2e,0x32,0x31,0x32,0x7a,0x22,0x2f,0x3e,0x0a, + 0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, 0x32,0x39,0x2e,0x32,0x35,0x34,0x2c,0x31,0x31,0x2e, @@ -105,37 +104,37 @@ const unsigned char help_button_r_svg_data[1331] = { 0x36,0x36,0x2d,0x32,0x2e,0x38,0x32,0x39,0x2c,0x37, 0x2e,0x30,0x31,0x32,0x2d,0x36,0x2e,0x33,0x30,0x37, 0x2c,0x37,0x2e,0x30,0x31,0x32,0x48,0x37,0x2e,0x37, - 0x36,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x34, - 0x35,0x32,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x36,0x2e, - 0x32,0x36,0x2d,0x33,0x2e,0x31,0x37,0x37,0x2d,0x36, - 0x2e,0x32,0x36,0x2d,0x37,0x2e,0x30,0x31,0x32,0x63, - 0x30,0x2d,0x33,0x2e,0x38,0x32,0x37,0x2c,0x32,0x2e, - 0x38,0x30,0x38,0x2d,0x36,0x2e,0x39,0x36,0x36,0x2c, - 0x36,0x2e,0x32,0x34,0x37,0x2d,0x36,0x2e,0x39,0x39, - 0x36,0x48,0x32,0x39,0x2e,0x32,0x35,0x34,0x20,0x4d, - 0x32,0x39,0x2e,0x32,0x35,0x34,0x2c,0x31,0x30,0x2e, - 0x30,0x32,0x36,0x63,0x2d,0x30,0x2e,0x30,0x32,0x31, - 0x2c,0x30,0x2d,0x32,0x31,0x2e,0x35,0x30,0x37,0x2c, + 0x36,0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x34,0x35, + 0x32,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x36,0x2e,0x32, + 0x36,0x2d,0x33,0x2e,0x31,0x37,0x37,0x2d,0x36,0x2e, + 0x32,0x36,0x2d,0x37,0x2e,0x30,0x31,0x32,0x63,0x30, + 0x2d,0x33,0x2e,0x38,0x32,0x37,0x2c,0x32,0x2e,0x38, + 0x30,0x38,0x2d,0x36,0x2e,0x39,0x36,0x36,0x2c,0x36, + 0x2e,0x32,0x34,0x37,0x2d,0x36,0x2e,0x39,0x39,0x36, + 0x48,0x32,0x39,0x2e,0x32,0x35,0x34,0x20,0x4d,0x32, + 0x39,0x2e,0x32,0x35,0x34,0x2c,0x31,0x30,0x2e,0x30, + 0x32,0x36,0x63,0x2d,0x30,0x2e,0x30,0x32,0x31,0x2c, 0x30,0x2d,0x32,0x31,0x2e,0x35,0x30,0x37,0x2c,0x30, - 0x0d,0x0a,0x09,0x09,0x43,0x33,0x2e,0x34,0x36,0x36, - 0x2c,0x31,0x30,0x2e,0x30,0x36,0x33,0x2c,0x30,0x2c, - 0x31,0x33,0x2e,0x38,0x34,0x36,0x2c,0x30,0x2c,0x31, - 0x38,0x2e,0x35,0x32,0x32,0x63,0x30,0x2c,0x34,0x2e, - 0x36,0x37,0x39,0x2c,0x33,0x2e,0x34,0x36,0x36,0x2c, - 0x38,0x2e,0x34,0x37,0x33,0x2c,0x37,0x2e,0x37,0x34, - 0x37,0x2c,0x38,0x2e,0x35,0x31,0x32,0x63,0x30,0x2c, - 0x30,0x2c,0x32,0x31,0x2e,0x34,0x38,0x33,0x2c,0x30, - 0x2c,0x32,0x31,0x2e,0x35,0x30,0x37,0x2c,0x30,0x63, - 0x34,0x2e,0x33,0x31,0x33,0x2c,0x30,0x2c,0x37,0x2e, - 0x38,0x30,0x37,0x2d,0x33,0x2e,0x38,0x31,0x32,0x2c, - 0x37,0x2e,0x38,0x30,0x37,0x2d,0x38,0x2e,0x35,0x31, - 0x32,0x0d,0x0a,0x09,0x09,0x43,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x2c,0x31,0x33,0x2e,0x38,0x32,0x33,0x2c, - 0x33,0x33,0x2e,0x35,0x36,0x36,0x2c,0x31,0x30,0x2e, - 0x30,0x32,0x36,0x2c,0x32,0x39,0x2e,0x32,0x35,0x34, - 0x2c,0x31,0x30,0x2e,0x30,0x32,0x36,0x4c,0x32,0x39, - 0x2e,0x32,0x35,0x34,0x2c,0x31,0x30,0x2e,0x30,0x32, - 0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d, - 0x0a + 0x2d,0x32,0x31,0x2e,0x35,0x30,0x37,0x2c,0x30,0x0a, + 0x09,0x09,0x43,0x33,0x2e,0x34,0x36,0x36,0x2c,0x31, + 0x30,0x2e,0x30,0x36,0x33,0x2c,0x30,0x2c,0x31,0x33, + 0x2e,0x38,0x34,0x36,0x2c,0x30,0x2c,0x31,0x38,0x2e, + 0x35,0x32,0x32,0x63,0x30,0x2c,0x34,0x2e,0x36,0x37, + 0x39,0x2c,0x33,0x2e,0x34,0x36,0x36,0x2c,0x38,0x2e, + 0x34,0x37,0x33,0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c, + 0x38,0x2e,0x35,0x31,0x32,0x63,0x30,0x2c,0x30,0x2c, + 0x32,0x31,0x2e,0x34,0x38,0x33,0x2c,0x30,0x2c,0x32, + 0x31,0x2e,0x35,0x30,0x37,0x2c,0x30,0x63,0x34,0x2e, + 0x33,0x31,0x33,0x2c,0x30,0x2c,0x37,0x2e,0x38,0x30, + 0x37,0x2d,0x33,0x2e,0x38,0x31,0x32,0x2c,0x37,0x2e, + 0x38,0x30,0x37,0x2d,0x38,0x2e,0x35,0x31,0x32,0x0a, + 0x09,0x09,0x43,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, + 0x31,0x33,0x2e,0x38,0x32,0x33,0x2c,0x33,0x33,0x2e, + 0x35,0x36,0x36,0x2c,0x31,0x30,0x2e,0x30,0x32,0x36, + 0x2c,0x32,0x39,0x2e,0x32,0x35,0x34,0x2c,0x31,0x30, + 0x2e,0x30,0x32,0x36,0x4c,0x32,0x39,0x2e,0x32,0x35, + 0x34,0x2c,0x31,0x30,0x2e,0x30,0x32,0x36,0x7a,0x22, + 0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f, + 0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/help_button_select_svg.cpp b/data/converted/help_button_select_svg.cpp index 703015aedf..b43a0ba62e 100644 --- a/data/converted/help_button_select_svg.cpp +++ b/data/converted/help_button_select_svg.cpp @@ -2,196 +2,194 @@ #include "../Resources.h" -const size_t help_button_select_svg_size = 1891; -const unsigned char help_button_select_svg_data[1891] = { +const size_t help_button_select_svg_size = 1866; +const unsigned char help_button_select_svg_data[1866] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, - 0x33,0x2e,0x32,0x31,0x37,0x2c,0x31,0x39,0x2e,0x31, - 0x31,0x38,0x48,0x33,0x2e,0x38,0x34,0x35,0x43,0x31, - 0x2e,0x37,0x32,0x32,0x2c,0x31,0x39,0x2e,0x31,0x31, - 0x38,0x2c,0x30,0x2c,0x32,0x30,0x2e,0x38,0x39,0x2c, - 0x30,0x2c,0x32,0x33,0x2e,0x30,0x37,0x35,0x73,0x31, - 0x2e,0x37,0x32,0x32,0x2c,0x33,0x2e,0x39,0x35,0x37, - 0x2c,0x33,0x2e,0x38,0x34,0x35,0x2c,0x33,0x2e,0x39, - 0x35,0x37,0x68,0x32,0x39,0x2e,0x33,0x37,0x32,0x0d, - 0x0a,0x09,0x09,0x09,0x63,0x32,0x2e,0x31,0x32,0x33, - 0x2c,0x30,0x2c,0x33,0x2e,0x38,0x34,0x34,0x2d,0x31, - 0x2e,0x37,0x37,0x31,0x2c,0x33,0x2e,0x38,0x34,0x34, - 0x2d,0x33,0x2e,0x39,0x35,0x37,0x43,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x2c,0x32,0x30,0x2e,0x38,0x38,0x39, - 0x2c,0x33,0x35,0x2e,0x33,0x34,0x2c,0x31,0x39,0x2e, - 0x31,0x31,0x38,0x2c,0x33,0x33,0x2e,0x32,0x31,0x37, - 0x2c,0x31,0x39,0x2e,0x31,0x31,0x38,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x33,0x33,0x2e,0x37,0x35,0x37,0x2c,0x31,0x35, - 0x2e,0x35,0x34,0x39,0x68,0x31,0x2e,0x31,0x38,0x36, - 0x56,0x39,0x2e,0x34,0x37,0x34,0x68,0x32,0x2e,0x31, - 0x32,0x34,0x56,0x38,0x2e,0x33,0x34,0x35,0x68,0x2d, - 0x35,0x2e,0x34,0x33,0x33,0x76,0x31,0x2e,0x31,0x32, - 0x38,0x68,0x32,0x2e,0x31,0x32,0x33,0x56,0x31,0x35, - 0x2e,0x35,0x34,0x39,0x7a,0x20,0x4d,0x33,0x30,0x2e, - 0x38,0x35,0x35,0x2c,0x31,0x31,0x2e,0x30,0x30,0x37, - 0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x31,0x32,0x36, - 0x2d,0x31,0x2e,0x35,0x35,0x34,0x2d,0x31,0x2e,0x31, - 0x34,0x31,0x2d,0x32,0x2e,0x38,0x36,0x34,0x2d,0x33, - 0x2e,0x30,0x38,0x37,0x2d,0x32,0x2e,0x38,0x36,0x34, - 0x63,0x2d,0x32,0x2e,0x32,0x32,0x35,0x2c,0x30,0x2d, - 0x33,0x2e,0x31,0x36,0x32,0x2c,0x31,0x2e,0x37,0x37, - 0x33,0x2d,0x33,0x2e,0x31,0x36,0x32,0x2c,0x33,0x2e, - 0x38,0x30,0x35,0x63,0x30,0x2c,0x32,0x2e,0x30,0x32, - 0x36,0x2c,0x30,0x2e,0x39,0x37,0x39,0x2c,0x33,0x2e, - 0x38,0x30,0x34,0x2c,0x33,0x2e,0x30,0x32,0x31,0x2c, - 0x33,0x2e,0x38,0x30,0x34,0x0d,0x0a,0x09,0x63,0x32, - 0x2e,0x33,0x32,0x38,0x2c,0x30,0x2c,0x33,0x2e,0x30, - 0x36,0x33,0x2d,0x31,0x2e,0x35,0x32,0x31,0x2c,0x33, - 0x2e,0x32,0x32,0x39,0x2d,0x32,0x2e,0x39,0x35,0x38, - 0x68,0x2d,0x31,0x2e,0x32,0x38,0x63,0x2d,0x30,0x2e, - 0x30,0x39,0x39,0x2c,0x30,0x2e,0x37,0x35,0x37,0x2d, - 0x30,0x2e,0x35,0x31,0x2c,0x31,0x2e,0x38,0x32,0x39, - 0x2d,0x31,0x2e,0x37,0x34,0x33,0x2c,0x31,0x2e,0x38, - 0x32,0x39,0x63,0x2d,0x31,0x2e,0x31,0x37,0x35,0x2c, - 0x30,0x2d,0x31,0x2e,0x39,0x38,0x38,0x2d,0x31,0x2e, - 0x30,0x34,0x32,0x2d,0x31,0x2e,0x39,0x38,0x38,0x2d, - 0x32,0x2e,0x35,0x34,0x36,0x0d,0x0a,0x09,0x63,0x30, - 0x2d,0x31,0x2e,0x38,0x37,0x37,0x2c,0x30,0x2e,0x38, - 0x31,0x33,0x2d,0x32,0x2e,0x38,0x30,0x38,0x2c,0x31, - 0x2e,0x39,0x30,0x38,0x2d,0x32,0x2e,0x38,0x30,0x38, - 0x63,0x30,0x2e,0x39,0x39,0x39,0x2c,0x30,0x2c,0x31, - 0x2e,0x37,0x30,0x34,0x2c,0x30,0x2e,0x36,0x34,0x36, - 0x2c,0x31,0x2e,0x38,0x32,0x33,0x2c,0x31,0x2e,0x37, - 0x33,0x37,0x4c,0x33,0x30,0x2e,0x38,0x35,0x35,0x2c, - 0x31,0x31,0x2e,0x30,0x30,0x37,0x4c,0x33,0x30,0x2e, - 0x38,0x35,0x35,0x2c,0x31,0x31,0x2e,0x30,0x30,0x37, - 0x7a,0x20,0x4d,0x31,0x38,0x2e,0x36,0x35,0x39,0x2c, - 0x31,0x35,0x2e,0x35,0x34,0x39,0x68,0x34,0x2e,0x39, - 0x37,0x33,0x56,0x31,0x34,0x2e,0x34,0x32,0x68,0x2d, - 0x33,0x2e,0x37,0x38,0x36,0x0d,0x0a,0x09,0x76,0x2d, - 0x31,0x2e,0x39,0x39,0x38,0x68,0x33,0x2e,0x35,0x37, - 0x33,0x76,0x2d,0x31,0x2e,0x31,0x32,0x39,0x68,0x2d, - 0x33,0x2e,0x35,0x37,0x33,0x56,0x39,0x2e,0x34,0x37, - 0x34,0x68,0x33,0x2e,0x37,0x32,0x31,0x56,0x38,0x2e, - 0x33,0x34,0x35,0x48,0x31,0x38,0x2e,0x36,0x36,0x4c, - 0x31,0x38,0x2e,0x36,0x35,0x39,0x2c,0x31,0x35,0x2e, - 0x35,0x34,0x39,0x4c,0x31,0x38,0x2e,0x36,0x35,0x39, - 0x2c,0x31,0x35,0x2e,0x35,0x34,0x39,0x7a,0x20,0x4d, - 0x31,0x32,0x2e,0x39,0x37,0x39,0x2c,0x31,0x35,0x2e, - 0x35,0x34,0x39,0x68,0x34,0x2e,0x36,0x32,0x35,0x76, - 0x2d,0x31,0x2e,0x31,0x38,0x38,0x68,0x2d,0x33,0x2e, - 0x34,0x33,0x37,0x56,0x38,0x2e,0x33,0x34,0x35,0x0d, - 0x0a,0x09,0x68,0x2d,0x31,0x2e,0x31,0x38,0x38,0x56, - 0x31,0x35,0x2e,0x35,0x34,0x39,0x7a,0x20,0x4d,0x36, - 0x2e,0x37,0x31,0x34,0x2c,0x31,0x35,0x2e,0x35,0x34, - 0x39,0x68,0x34,0x2e,0x39,0x37,0x34,0x56,0x31,0x34, - 0x2e,0x34,0x32,0x48,0x37,0x2e,0x39,0x30,0x32,0x76, - 0x2d,0x31,0x2e,0x39,0x39,0x38,0x68,0x33,0x2e,0x35, - 0x37,0x32,0x76,0x2d,0x31,0x2e,0x31,0x32,0x39,0x48, - 0x37,0x2e,0x39,0x30,0x32,0x56,0x39,0x2e,0x34,0x37, - 0x34,0x68,0x33,0x2e,0x37,0x32,0x36,0x56,0x38,0x2e, - 0x33,0x34,0x35,0x48,0x36,0x2e,0x37,0x31,0x34,0x56, - 0x31,0x35,0x2e,0x35,0x34,0x39,0x7a,0x20,0x4d,0x30, - 0x2e,0x31,0x34,0x39,0x2c,0x31,0x30,0x2e,0x33,0x37, - 0x32,0x0d,0x0a,0x09,0x63,0x30,0x2c,0x32,0x2e,0x39, - 0x35,0x35,0x2c,0x34,0x2e,0x31,0x36,0x37,0x2c,0x31, - 0x2e,0x33,0x39,0x38,0x2c,0x34,0x2e,0x31,0x36,0x37, - 0x2c,0x33,0x2e,0x31,0x38,0x36,0x63,0x30,0x2c,0x30, - 0x2e,0x37,0x39,0x32,0x2d,0x30,0x2e,0x36,0x37,0x33, - 0x2c,0x31,0x2e,0x30,0x36,0x34,0x2d,0x31,0x2e,0x33, - 0x39,0x35,0x2c,0x31,0x2e,0x30,0x36,0x34,0x63,0x2d, - 0x30,0x2e,0x39,0x37,0x36,0x2c,0x30,0x2d,0x31,0x2e, - 0x35,0x39,0x31,0x2d,0x30,0x2e,0x34,0x35,0x36,0x2d, - 0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x34,0x30, - 0x37,0x48,0x30,0x2e,0x30,0x31,0x35,0x0d,0x0a,0x09, - 0x43,0x30,0x2e,0x30,0x33,0x2c,0x31,0x34,0x2e,0x37, - 0x33,0x2c,0x30,0x2e,0x38,0x34,0x36,0x2c,0x31,0x35, - 0x2e,0x37,0x35,0x2c,0x32,0x2e,0x38,0x38,0x32,0x2c, - 0x31,0x35,0x2e,0x37,0x35,0x63,0x31,0x2e,0x32,0x30, - 0x35,0x2c,0x30,0x2c,0x32,0x2e,0x37,0x31,0x36,0x2d, - 0x30,0x2e,0x34,0x38,0x34,0x2c,0x32,0x2e,0x37,0x31, - 0x36,0x2d,0x32,0x2e,0x33,0x34,0x33,0x63,0x30,0x2d, - 0x33,0x2e,0x30,0x37,0x37,0x2d,0x34,0x2e,0x32,0x31, - 0x33,0x2d,0x31,0x2e,0x34,0x35,0x35,0x2d,0x34,0x2e, - 0x32,0x31,0x33,0x2d,0x33,0x2e,0x31,0x34,0x36,0x0d, - 0x0a,0x09,0x63,0x30,0x2d,0x30,0x2e,0x36,0x37,0x37, - 0x2c,0x30,0x2e,0x35,0x32,0x33,0x2d,0x30,0x2e,0x39, - 0x39,0x31,0x2c,0x31,0x2e,0x33,0x31,0x33,0x2d,0x30, - 0x2e,0x39,0x39,0x31,0x63,0x30,0x2e,0x39,0x39,0x2c, - 0x30,0x2c,0x31,0x2e,0x33,0x38,0x38,0x2c,0x30,0x2e, - 0x36,0x30,0x35,0x2c,0x31,0x2e,0x34,0x32,0x38,0x2c, - 0x31,0x2e,0x31,0x36,0x33,0x48,0x35,0x2e,0x34,0x31, - 0x63,0x2d,0x30,0x2e,0x31,0x35,0x32,0x2d,0x32,0x2e, - 0x30,0x39,0x31,0x2d,0x31,0x2e,0x38,0x39,0x36,0x2d, - 0x32,0x2e,0x32,0x39,0x2d,0x32,0x2e,0x37,0x36,0x37, - 0x2d,0x32,0x2e,0x32,0x39,0x0d,0x0a,0x09,0x43,0x31, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x33,0x33,0x2e,0x32,0x31,0x37,0x2c,0x31, + 0x39,0x2e,0x31,0x31,0x38,0x48,0x33,0x2e,0x38,0x34, + 0x35,0x43,0x31,0x2e,0x37,0x32,0x32,0x2c,0x31,0x39, + 0x2e,0x31,0x31,0x38,0x2c,0x30,0x2c,0x32,0x30,0x2e, + 0x38,0x39,0x2c,0x30,0x2c,0x32,0x33,0x2e,0x30,0x37, + 0x35,0x73,0x31,0x2e,0x37,0x32,0x32,0x2c,0x33,0x2e, + 0x39,0x35,0x37,0x2c,0x33,0x2e,0x38,0x34,0x35,0x2c, + 0x33,0x2e,0x39,0x35,0x37,0x68,0x32,0x39,0x2e,0x33, + 0x37,0x32,0x0a,0x09,0x09,0x09,0x63,0x32,0x2e,0x31, + 0x32,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x38,0x34,0x34, + 0x2d,0x31,0x2e,0x37,0x37,0x31,0x2c,0x33,0x2e,0x38, + 0x34,0x34,0x2d,0x33,0x2e,0x39,0x35,0x37,0x43,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x2c,0x32,0x30,0x2e,0x38, + 0x38,0x39,0x2c,0x33,0x35,0x2e,0x33,0x34,0x2c,0x31, + 0x39,0x2e,0x31,0x31,0x38,0x2c,0x33,0x33,0x2e,0x32, + 0x31,0x37,0x2c,0x31,0x39,0x2e,0x31,0x31,0x38,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x33,0x33,0x2e,0x37,0x35,0x37,0x2c,0x31,0x35,0x2e, + 0x35,0x34,0x39,0x68,0x31,0x2e,0x31,0x38,0x36,0x56, + 0x39,0x2e,0x34,0x37,0x34,0x68,0x32,0x2e,0x31,0x32, + 0x34,0x56,0x38,0x2e,0x33,0x34,0x35,0x68,0x2d,0x35, + 0x2e,0x34,0x33,0x33,0x76,0x31,0x2e,0x31,0x32,0x38, + 0x68,0x32,0x2e,0x31,0x32,0x33,0x56,0x31,0x35,0x2e, + 0x35,0x34,0x39,0x7a,0x20,0x4d,0x33,0x30,0x2e,0x38, + 0x35,0x35,0x2c,0x31,0x31,0x2e,0x30,0x30,0x37,0x0a, + 0x09,0x63,0x2d,0x30,0x2e,0x31,0x32,0x36,0x2d,0x31, + 0x2e,0x35,0x35,0x34,0x2d,0x31,0x2e,0x31,0x34,0x31, + 0x2d,0x32,0x2e,0x38,0x36,0x34,0x2d,0x33,0x2e,0x30, + 0x38,0x37,0x2d,0x32,0x2e,0x38,0x36,0x34,0x63,0x2d, + 0x32,0x2e,0x32,0x32,0x35,0x2c,0x30,0x2d,0x33,0x2e, + 0x31,0x36,0x32,0x2c,0x31,0x2e,0x37,0x37,0x33,0x2d, + 0x33,0x2e,0x31,0x36,0x32,0x2c,0x33,0x2e,0x38,0x30, + 0x35,0x63,0x30,0x2c,0x32,0x2e,0x30,0x32,0x36,0x2c, + 0x30,0x2e,0x39,0x37,0x39,0x2c,0x33,0x2e,0x38,0x30, + 0x34,0x2c,0x33,0x2e,0x30,0x32,0x31,0x2c,0x33,0x2e, + 0x38,0x30,0x34,0x0a,0x09,0x63,0x32,0x2e,0x33,0x32, + 0x38,0x2c,0x30,0x2c,0x33,0x2e,0x30,0x36,0x33,0x2d, + 0x31,0x2e,0x35,0x32,0x31,0x2c,0x33,0x2e,0x32,0x32, + 0x39,0x2d,0x32,0x2e,0x39,0x35,0x38,0x68,0x2d,0x31, + 0x2e,0x32,0x38,0x63,0x2d,0x30,0x2e,0x30,0x39,0x39, + 0x2c,0x30,0x2e,0x37,0x35,0x37,0x2d,0x30,0x2e,0x35, + 0x31,0x2c,0x31,0x2e,0x38,0x32,0x39,0x2d,0x31,0x2e, + 0x37,0x34,0x33,0x2c,0x31,0x2e,0x38,0x32,0x39,0x63, + 0x2d,0x31,0x2e,0x31,0x37,0x35,0x2c,0x30,0x2d,0x31, + 0x2e,0x39,0x38,0x38,0x2d,0x31,0x2e,0x30,0x34,0x32, + 0x2d,0x31,0x2e,0x39,0x38,0x38,0x2d,0x32,0x2e,0x35, + 0x34,0x36,0x0a,0x09,0x63,0x30,0x2d,0x31,0x2e,0x38, + 0x37,0x37,0x2c,0x30,0x2e,0x38,0x31,0x33,0x2d,0x32, + 0x2e,0x38,0x30,0x38,0x2c,0x31,0x2e,0x39,0x30,0x38, + 0x2d,0x32,0x2e,0x38,0x30,0x38,0x63,0x30,0x2e,0x39, + 0x39,0x39,0x2c,0x30,0x2c,0x31,0x2e,0x37,0x30,0x34, + 0x2c,0x30,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x38, + 0x32,0x33,0x2c,0x31,0x2e,0x37,0x33,0x37,0x4c,0x33, + 0x30,0x2e,0x38,0x35,0x35,0x2c,0x31,0x31,0x2e,0x30, + 0x30,0x37,0x4c,0x33,0x30,0x2e,0x38,0x35,0x35,0x2c, + 0x31,0x31,0x2e,0x30,0x30,0x37,0x7a,0x20,0x4d,0x31, + 0x38,0x2e,0x36,0x35,0x39,0x2c,0x31,0x35,0x2e,0x35, + 0x34,0x39,0x68,0x34,0x2e,0x39,0x37,0x33,0x56,0x31, + 0x34,0x2e,0x34,0x32,0x68,0x2d,0x33,0x2e,0x37,0x38, + 0x36,0x0a,0x09,0x76,0x2d,0x31,0x2e,0x39,0x39,0x38, + 0x68,0x33,0x2e,0x35,0x37,0x33,0x76,0x2d,0x31,0x2e, + 0x31,0x32,0x39,0x68,0x2d,0x33,0x2e,0x35,0x37,0x33, + 0x56,0x39,0x2e,0x34,0x37,0x34,0x68,0x33,0x2e,0x37, + 0x32,0x31,0x56,0x38,0x2e,0x33,0x34,0x35,0x48,0x31, + 0x38,0x2e,0x36,0x36,0x4c,0x31,0x38,0x2e,0x36,0x35, + 0x39,0x2c,0x31,0x35,0x2e,0x35,0x34,0x39,0x4c,0x31, + 0x38,0x2e,0x36,0x35,0x39,0x2c,0x31,0x35,0x2e,0x35, + 0x34,0x39,0x7a,0x20,0x4d,0x31,0x32,0x2e,0x39,0x37, + 0x39,0x2c,0x31,0x35,0x2e,0x35,0x34,0x39,0x68,0x34, + 0x2e,0x36,0x32,0x35,0x76,0x2d,0x31,0x2e,0x31,0x38, + 0x38,0x68,0x2d,0x33,0x2e,0x34,0x33,0x37,0x56,0x38, + 0x2e,0x33,0x34,0x35,0x0a,0x09,0x68,0x2d,0x31,0x2e, + 0x31,0x38,0x38,0x56,0x31,0x35,0x2e,0x35,0x34,0x39, + 0x7a,0x20,0x4d,0x36,0x2e,0x37,0x31,0x34,0x2c,0x31, + 0x35,0x2e,0x35,0x34,0x39,0x68,0x34,0x2e,0x39,0x37, + 0x34,0x56,0x31,0x34,0x2e,0x34,0x32,0x48,0x37,0x2e, + 0x39,0x30,0x32,0x76,0x2d,0x31,0x2e,0x39,0x39,0x38, + 0x68,0x33,0x2e,0x35,0x37,0x32,0x76,0x2d,0x31,0x2e, + 0x31,0x32,0x39,0x48,0x37,0x2e,0x39,0x30,0x32,0x56, + 0x39,0x2e,0x34,0x37,0x34,0x68,0x33,0x2e,0x37,0x32, + 0x36,0x56,0x38,0x2e,0x33,0x34,0x35,0x48,0x36,0x2e, + 0x37,0x31,0x34,0x56,0x31,0x35,0x2e,0x35,0x34,0x39, + 0x7a,0x20,0x4d,0x30,0x2e,0x31,0x34,0x39,0x2c,0x31, + 0x30,0x2e,0x33,0x37,0x32,0x0a,0x09,0x63,0x30,0x2c, + 0x32,0x2e,0x39,0x35,0x35,0x2c,0x34,0x2e,0x31,0x36, + 0x37,0x2c,0x31,0x2e,0x33,0x39,0x38,0x2c,0x34,0x2e, + 0x31,0x36,0x37,0x2c,0x33,0x2e,0x31,0x38,0x36,0x63, + 0x30,0x2c,0x30,0x2e,0x37,0x39,0x32,0x2d,0x30,0x2e, + 0x36,0x37,0x33,0x2c,0x31,0x2e,0x30,0x36,0x34,0x2d, + 0x31,0x2e,0x33,0x39,0x35,0x2c,0x31,0x2e,0x30,0x36, + 0x34,0x63,0x2d,0x30,0x2e,0x39,0x37,0x36,0x2c,0x30, + 0x2d,0x31,0x2e,0x35,0x39,0x31,0x2d,0x30,0x2e,0x34, + 0x35,0x36,0x2d,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31, + 0x2e,0x34,0x30,0x37,0x48,0x30,0x2e,0x30,0x31,0x35, + 0x0a,0x09,0x43,0x30,0x2e,0x30,0x33,0x2c,0x31,0x34, + 0x2e,0x37,0x33,0x2c,0x30,0x2e,0x38,0x34,0x36,0x2c, + 0x31,0x35,0x2e,0x37,0x35,0x2c,0x32,0x2e,0x38,0x38, + 0x32,0x2c,0x31,0x35,0x2e,0x37,0x35,0x63,0x31,0x2e, + 0x32,0x30,0x35,0x2c,0x30,0x2c,0x32,0x2e,0x37,0x31, + 0x36,0x2d,0x30,0x2e,0x34,0x38,0x34,0x2c,0x32,0x2e, + 0x37,0x31,0x36,0x2d,0x32,0x2e,0x33,0x34,0x33,0x63, + 0x30,0x2d,0x33,0x2e,0x30,0x37,0x37,0x2d,0x34,0x2e, + 0x32,0x31,0x33,0x2d,0x31,0x2e,0x34,0x35,0x35,0x2d, + 0x34,0x2e,0x32,0x31,0x33,0x2d,0x33,0x2e,0x31,0x34, + 0x36,0x0a,0x09,0x63,0x30,0x2d,0x30,0x2e,0x36,0x37, + 0x37,0x2c,0x30,0x2e,0x35,0x32,0x33,0x2d,0x30,0x2e, + 0x39,0x39,0x31,0x2c,0x31,0x2e,0x33,0x31,0x33,0x2d, + 0x30,0x2e,0x39,0x39,0x31,0x63,0x30,0x2e,0x39,0x39, + 0x2c,0x30,0x2c,0x31,0x2e,0x33,0x38,0x38,0x2c,0x30, + 0x2e,0x36,0x30,0x35,0x2c,0x31,0x2e,0x34,0x32,0x38, + 0x2c,0x31,0x2e,0x31,0x36,0x33,0x48,0x35,0x2e,0x34, + 0x31,0x63,0x2d,0x30,0x2e,0x31,0x35,0x32,0x2d,0x32, + 0x2e,0x30,0x39,0x31,0x2d,0x31,0x2e,0x38,0x39,0x36, + 0x2d,0x32,0x2e,0x32,0x39,0x2d,0x32,0x2e,0x37,0x36, + 0x37,0x2d,0x32,0x2e,0x32,0x39,0x0a,0x09,0x43,0x31, 0x2e,0x32,0x36,0x36,0x2c,0x38,0x2e,0x31,0x34,0x33, 0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x38,0x2e,0x37, 0x36,0x37,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x31, - 0x30,0x2e,0x33,0x37,0x32,0x22,0x2f,0x3e,0x0d,0x0a, - 0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79, - 0x3d,0x22,0x30,0x22,0x3e,0x0d,0x0a,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x33,0x36,0x2e,0x39,0x36,0x31,0x2c, - 0x30,0x2e,0x31,0x76,0x33,0x36,0x2e,0x38,0x36,0x31, - 0x48,0x30,0x2e,0x31,0x56,0x30,0x2e,0x31,0x48,0x33, - 0x36,0x2e,0x39,0x36,0x31,0x20,0x4d,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x2c,0x30,0x48,0x30,0x76,0x33,0x37, - 0x2e,0x30,0x36,0x68,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x56,0x30,0x4c,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, - 0x30,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d, - 0x0a + 0x30,0x2e,0x33,0x37,0x32,0x22,0x2f,0x3e,0x0a,0x3c, + 0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d, + 0x22,0x30,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x33,0x36,0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e, + 0x31,0x76,0x33,0x36,0x2e,0x38,0x36,0x31,0x48,0x30, + 0x2e,0x31,0x56,0x30,0x2e,0x31,0x48,0x33,0x36,0x2e, + 0x39,0x36,0x31,0x20,0x4d,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x2c,0x30,0x48,0x30,0x76,0x33,0x37,0x2e,0x30, + 0x36,0x68,0x33,0x37,0x2e,0x30,0x36,0x31,0x56,0x30, + 0x4c,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x7a, + 0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, + 0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/help_button_start_svg.cpp b/data/converted/help_button_start_svg.cpp index 8eac864831..06c552c910 100644 --- a/data/converted/help_button_start_svg.cpp +++ b/data/converted/help_button_start_svg.cpp @@ -2,118 +2,117 @@ #include "../Resources.h" -const size_t help_button_start_svg_size = 1791; -const unsigned char help_button_start_svg_data[1791] = { +const size_t help_button_start_svg_size = 1769; +const unsigned char help_button_start_svg_data[1769] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e,0x30, - 0x36,0x35,0x2c,0x31,0x35,0x2e,0x35,0x34,0x38,0x68, - 0x31,0x2e,0x34,0x33,0x38,0x56,0x39,0x2e,0x34,0x37, - 0x31,0x68,0x32,0x2e,0x35,0x36,0x33,0x76,0x2d,0x31, - 0x2e,0x31,0x33,0x68,0x2d,0x36,0x2e,0x35,0x36,0x33, - 0x76,0x31,0x2e,0x31,0x33,0x68,0x32,0x2e,0x35,0x36, - 0x33,0x4c,0x33,0x33,0x2e,0x30,0x36,0x35,0x2c,0x31, - 0x35,0x2e,0x35,0x34,0x38,0x4c,0x33,0x33,0x2e,0x30, - 0x36,0x35,0x2c,0x31,0x35,0x2e,0x35,0x34,0x38,0x7a, - 0x20,0x4d,0x32,0x34,0x2e,0x33,0x35,0x31,0x2c,0x31, - 0x31,0x2e,0x35,0x37,0x33,0x0d,0x0a,0x09,0x56,0x39, - 0x2e,0x34,0x37,0x31,0x68,0x32,0x2e,0x34,0x38,0x32, - 0x63,0x30,0x2e,0x37,0x35,0x35,0x2c,0x30,0x2c,0x31, - 0x2e,0x32,0x32,0x36,0x2c,0x30,0x2e,0x32,0x39,0x32, - 0x2c,0x31,0x2e,0x32,0x32,0x36,0x2c,0x31,0x2e,0x30, - 0x33,0x39,0x63,0x30,0x2c,0x30,0x2e,0x38,0x30,0x38, - 0x2d,0x30,0x2e,0x34,0x33,0x32,0x2c,0x31,0x2e,0x30, - 0x36,0x33,0x2d,0x31,0x2e,0x32,0x32,0x36,0x2c,0x31, - 0x2e,0x30,0x36,0x33,0x48,0x32,0x34,0x2e,0x33,0x35, - 0x31,0x7a,0x20,0x4d,0x32,0x32,0x2e,0x39,0x31,0x37, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x33,0x33,0x2e,0x30,0x36,0x35,0x2c,0x31,0x35, + 0x2e,0x35,0x34,0x38,0x68,0x31,0x2e,0x34,0x33,0x38, + 0x56,0x39,0x2e,0x34,0x37,0x31,0x68,0x32,0x2e,0x35, + 0x36,0x33,0x76,0x2d,0x31,0x2e,0x31,0x33,0x68,0x2d, + 0x36,0x2e,0x35,0x36,0x33,0x76,0x31,0x2e,0x31,0x33, + 0x68,0x32,0x2e,0x35,0x36,0x33,0x4c,0x33,0x33,0x2e, + 0x30,0x36,0x35,0x2c,0x31,0x35,0x2e,0x35,0x34,0x38, + 0x4c,0x33,0x33,0x2e,0x30,0x36,0x35,0x2c,0x31,0x35, + 0x2e,0x35,0x34,0x38,0x7a,0x20,0x4d,0x32,0x34,0x2e, + 0x33,0x35,0x31,0x2c,0x31,0x31,0x2e,0x35,0x37,0x33, + 0x0a,0x09,0x56,0x39,0x2e,0x34,0x37,0x31,0x68,0x32, + 0x2e,0x34,0x38,0x32,0x63,0x30,0x2e,0x37,0x35,0x35, + 0x2c,0x30,0x2c,0x31,0x2e,0x32,0x32,0x36,0x2c,0x30, + 0x2e,0x32,0x39,0x32,0x2c,0x31,0x2e,0x32,0x32,0x36, + 0x2c,0x31,0x2e,0x30,0x33,0x39,0x63,0x30,0x2c,0x30, + 0x2e,0x38,0x30,0x38,0x2d,0x30,0x2e,0x34,0x33,0x32, + 0x2c,0x31,0x2e,0x30,0x36,0x33,0x2d,0x31,0x2e,0x32, + 0x32,0x36,0x2c,0x31,0x2e,0x30,0x36,0x33,0x48,0x32, + 0x34,0x2e,0x33,0x35,0x31,0x7a,0x20,0x4d,0x32,0x32, + 0x2e,0x39,0x31,0x37,0x2c,0x31,0x35,0x2e,0x35,0x34, + 0x38,0x68,0x31,0x2e,0x34,0x33,0x34,0x76,0x2d,0x32, + 0x2e,0x38,0x34,0x36,0x68,0x32,0x2e,0x34,0x34,0x33, + 0x0a,0x09,0x63,0x31,0x2e,0x30,0x35,0x33,0x2c,0x30, + 0x2c,0x31,0x2e,0x31,0x38,0x38,0x2c,0x30,0x2e,0x37, + 0x32,0x37,0x2c,0x31,0x2e,0x31,0x38,0x38,0x2c,0x31, + 0x2e,0x37,0x35,0x35,0x63,0x30,0x2c,0x30,0x2e,0x35, + 0x32,0x36,0x2c,0x30,0x2e,0x30,0x36,0x38,0x2c,0x30, + 0x2e,0x38,0x39,0x2c,0x30,0x2e,0x31,0x37,0x34,0x2c, + 0x31,0x2e,0x30,0x39,0x31,0x68,0x31,0x2e,0x35,0x35, + 0x32,0x63,0x2d,0x30,0x2e,0x32,0x38,0x31,0x2d,0x30, + 0x2e,0x33,0x39,0x35,0x2d,0x30,0x2e,0x32,0x39,0x2d, + 0x31,0x2e,0x31,0x39,0x39,0x2d,0x30,0x2e,0x32,0x39, + 0x2d,0x31,0x2e,0x35,0x34,0x36,0x0a,0x09,0x63,0x30, + 0x2d,0x31,0x2e,0x30,0x31,0x39,0x2d,0x30,0x2e,0x31, + 0x38,0x2d,0x31,0x2e,0x37,0x36,0x36,0x2d,0x30,0x2e, + 0x39,0x39,0x34,0x2d,0x31,0x2e,0x39,0x34,0x35,0x76, + 0x2d,0x30,0x2e,0x30,0x32,0x31,0x63,0x30,0x2e,0x36, + 0x34,0x33,0x2d,0x30,0x2e,0x32,0x31,0x31,0x2c,0x31, + 0x2e,0x31,0x32,0x38,0x2d,0x30,0x2e,0x37,0x39,0x37, + 0x2c,0x31,0x2e,0x31,0x32,0x38,0x2d,0x31,0x2e,0x37, + 0x33,0x37,0x63,0x30,0x2d,0x31,0x2e,0x31,0x31,0x39, + 0x2d,0x30,0x2e,0x35,0x36,0x33,0x2d,0x31,0x2e,0x39, + 0x35,0x34,0x2d,0x32,0x2e,0x33,0x30,0x35,0x2d,0x31, + 0x2e,0x39,0x35,0x34,0x68,0x2d,0x34,0x2e,0x33,0x32, + 0x37,0x4c,0x32,0x32,0x2e,0x39,0x31,0x37,0x2c,0x31, + 0x35,0x2e,0x35,0x34,0x38,0x0a,0x09,0x4c,0x32,0x32, + 0x2e,0x39,0x31,0x37,0x2c,0x31,0x35,0x2e,0x35,0x34, + 0x38,0x7a,0x20,0x4d,0x31,0x34,0x2e,0x30,0x33,0x32, 0x2c,0x31,0x35,0x2e,0x35,0x34,0x38,0x68,0x31,0x2e, - 0x34,0x33,0x34,0x76,0x2d,0x32,0x2e,0x38,0x34,0x36, - 0x68,0x32,0x2e,0x34,0x34,0x33,0x0d,0x0a,0x09,0x63, - 0x31,0x2e,0x30,0x35,0x33,0x2c,0x30,0x2c,0x31,0x2e, - 0x31,0x38,0x38,0x2c,0x30,0x2e,0x37,0x32,0x37,0x2c, - 0x31,0x2e,0x31,0x38,0x38,0x2c,0x31,0x2e,0x37,0x35, - 0x35,0x63,0x30,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2c, - 0x30,0x2e,0x30,0x36,0x38,0x2c,0x30,0x2e,0x38,0x39, - 0x2c,0x30,0x2e,0x31,0x37,0x34,0x2c,0x31,0x2e,0x30, - 0x39,0x31,0x68,0x31,0x2e,0x35,0x35,0x32,0x63,0x2d, - 0x30,0x2e,0x32,0x38,0x31,0x2d,0x30,0x2e,0x33,0x39, - 0x35,0x2d,0x30,0x2e,0x32,0x39,0x2d,0x31,0x2e,0x31, - 0x39,0x39,0x2d,0x30,0x2e,0x32,0x39,0x2d,0x31,0x2e, - 0x35,0x34,0x36,0x0d,0x0a,0x09,0x63,0x30,0x2d,0x31, - 0x2e,0x30,0x31,0x39,0x2d,0x30,0x2e,0x31,0x38,0x2d, - 0x31,0x2e,0x37,0x36,0x36,0x2d,0x30,0x2e,0x39,0x39, - 0x34,0x2d,0x31,0x2e,0x39,0x34,0x35,0x76,0x2d,0x30, - 0x2e,0x30,0x32,0x31,0x63,0x30,0x2e,0x36,0x34,0x33, - 0x2d,0x30,0x2e,0x32,0x31,0x31,0x2c,0x31,0x2e,0x31, - 0x32,0x38,0x2d,0x30,0x2e,0x37,0x39,0x37,0x2c,0x31, - 0x2e,0x31,0x32,0x38,0x2d,0x31,0x2e,0x37,0x33,0x37, - 0x63,0x30,0x2d,0x31,0x2e,0x31,0x31,0x39,0x2d,0x30, - 0x2e,0x35,0x36,0x33,0x2d,0x31,0x2e,0x39,0x35,0x34, - 0x2d,0x32,0x2e,0x33,0x30,0x35,0x2d,0x31,0x2e,0x39, - 0x35,0x34,0x68,0x2d,0x34,0x2e,0x33,0x32,0x37,0x4c, - 0x32,0x32,0x2e,0x39,0x31,0x37,0x2c,0x31,0x35,0x2e, - 0x35,0x34,0x38,0x0d,0x0a,0x09,0x4c,0x32,0x32,0x2e, - 0x39,0x31,0x37,0x2c,0x31,0x35,0x2e,0x35,0x34,0x38, - 0x7a,0x20,0x4d,0x31,0x34,0x2e,0x30,0x33,0x32,0x2c, - 0x31,0x35,0x2e,0x35,0x34,0x38,0x68,0x31,0x2e,0x35, - 0x35,0x31,0x6c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x31, - 0x2e,0x37,0x38,0x36,0x68,0x33,0x2e,0x32,0x31,0x37, - 0x6c,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x2e,0x37, - 0x38,0x36,0x68,0x31,0x2e,0x36,0x30,0x33,0x6c,0x2d, - 0x33,0x2e,0x30,0x34,0x35,0x2d,0x37,0x2e,0x32,0x30, - 0x37,0x68,0x2d,0x31,0x2e,0x37,0x30,0x34,0x4c,0x31, - 0x34,0x2e,0x30,0x33,0x32,0x2c,0x31,0x35,0x2e,0x35, - 0x34,0x38,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x37,0x32, - 0x33,0x2c,0x31,0x32,0x2e,0x36,0x33,0x32,0x0d,0x0a, + 0x35,0x35,0x31,0x6c,0x30,0x2e,0x37,0x30,0x38,0x2d, + 0x31,0x2e,0x37,0x38,0x36,0x68,0x33,0x2e,0x32,0x31, + 0x37,0x6c,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x2e, + 0x37,0x38,0x36,0x68,0x31,0x2e,0x36,0x30,0x33,0x6c, + 0x2d,0x33,0x2e,0x30,0x34,0x35,0x2d,0x37,0x2e,0x32, + 0x30,0x37,0x68,0x2d,0x31,0x2e,0x37,0x30,0x34,0x4c, + 0x31,0x34,0x2e,0x30,0x33,0x32,0x2c,0x31,0x35,0x2e, + 0x35,0x34,0x38,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x37, + 0x32,0x33,0x2c,0x31,0x32,0x2e,0x36,0x33,0x32,0x0a, 0x09,0x4c,0x31,0x37,0x2e,0x39,0x31,0x2c,0x39,0x2e, 0x35,0x39,0x6c,0x31,0x2e,0x31,0x36,0x38,0x2c,0x33, 0x2e,0x30,0x34,0x32,0x48,0x31,0x36,0x2e,0x37,0x32, @@ -124,64 +123,63 @@ const unsigned char help_button_start_svg_data[1791] = { 0x48,0x37,0x2e,0x34,0x32,0x35,0x76,0x31,0x2e,0x31, 0x33,0x68,0x32,0x2e,0x35,0x36,0x37,0x56,0x31,0x35, 0x2e,0x35,0x34,0x38,0x7a,0x20,0x4d,0x30,0x2e,0x31, - 0x38,0x37,0x2c,0x31,0x30,0x2e,0x33,0x36,0x38,0x0d, - 0x0a,0x09,0x63,0x30,0x2c,0x32,0x2e,0x39,0x35,0x36, - 0x2c,0x35,0x2e,0x30,0x33,0x36,0x2c,0x31,0x2e,0x34, - 0x2c,0x35,0x2e,0x30,0x33,0x36,0x2c,0x33,0x2e,0x31, - 0x38,0x38,0x63,0x30,0x2c,0x30,0x2e,0x37,0x39,0x32, - 0x2d,0x30,0x2e,0x38,0x31,0x33,0x2c,0x31,0x2e,0x30, - 0x36,0x34,0x2d,0x31,0x2e,0x36,0x38,0x34,0x2c,0x31, - 0x2e,0x30,0x36,0x34,0x63,0x2d,0x31,0x2e,0x31,0x37, - 0x39,0x2c,0x30,0x2d,0x31,0x2e,0x39,0x32,0x33,0x2d, - 0x30,0x2e,0x34,0x35,0x36,0x2d,0x31,0x2e,0x39,0x36, - 0x33,0x2d,0x31,0x2e,0x34,0x30,0x37,0x48,0x30,0x2e, - 0x30,0x32,0x36,0x0d,0x0a,0x09,0x63,0x30,0x2e,0x30, - 0x32,0x31,0x2c,0x31,0x2e,0x35,0x31,0x36,0x2c,0x31, - 0x2e,0x30,0x30,0x35,0x2c,0x32,0x2e,0x35,0x33,0x38, - 0x2c,0x33,0x2e,0x34,0x36,0x39,0x2c,0x32,0x2e,0x35, - 0x33,0x38,0x63,0x31,0x2e,0x34,0x35,0x35,0x2c,0x30, - 0x2c,0x33,0x2e,0x32,0x38,0x2d,0x30,0x2e,0x34,0x38, - 0x36,0x2c,0x33,0x2e,0x32,0x38,0x2d,0x32,0x2e,0x33, - 0x34,0x35,0x63,0x30,0x2d,0x33,0x2e,0x30,0x37,0x39, - 0x2d,0x35,0x2e,0x30,0x39,0x33,0x2d,0x31,0x2e,0x34, - 0x35,0x34,0x2d,0x35,0x2e,0x30,0x39,0x33,0x2d,0x33, - 0x2e,0x31,0x34,0x38,0x0d,0x0a,0x09,0x63,0x30,0x2d, - 0x30,0x2e,0x36,0x37,0x36,0x2c,0x30,0x2e,0x36,0x33, - 0x32,0x2d,0x30,0x2e,0x39,0x38,0x38,0x2c,0x31,0x2e, - 0x35,0x38,0x39,0x2d,0x30,0x2e,0x39,0x38,0x38,0x63, - 0x31,0x2e,0x31,0x39,0x36,0x2c,0x30,0x2c,0x31,0x2e, - 0x36,0x37,0x36,0x2c,0x30,0x2e,0x36,0x30,0x34,0x2c, - 0x31,0x2e,0x37,0x32,0x36,0x2c,0x31,0x2e,0x31,0x36, - 0x31,0x68,0x31,0x2e,0x35,0x35,0x31,0x63,0x2d,0x30, - 0x2e,0x31,0x38,0x35,0x2d,0x32,0x2e,0x30,0x39,0x33, - 0x2d,0x32,0x2e,0x32,0x39,0x2d,0x32,0x2e,0x32,0x39, - 0x32,0x2d,0x33,0x2e,0x33,0x34,0x35,0x2d,0x32,0x2e, - 0x32,0x39,0x32,0x0d,0x0a,0x09,0x43,0x31,0x2e,0x35, - 0x33,0x36,0x2c,0x38,0x2e,0x31,0x33,0x39,0x2c,0x30, - 0x2e,0x31,0x38,0x37,0x2c,0x38,0x2e,0x37,0x36,0x32, - 0x2c,0x30,0x2e,0x31,0x38,0x37,0x2c,0x31,0x30,0x2e, - 0x33,0x36,0x38,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x67, - 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e,0x32, - 0x31,0x37,0x2c,0x31,0x39,0x2e,0x31,0x31,0x38,0x48, - 0x33,0x2e,0x38,0x34,0x35,0x43,0x31,0x2e,0x37,0x32, - 0x32,0x2c,0x31,0x39,0x2e,0x31,0x31,0x38,0x2c,0x30, - 0x2c,0x32,0x30,0x2e,0x38,0x39,0x2c,0x30,0x2c,0x32, - 0x33,0x2e,0x30,0x37,0x35,0x73,0x31,0x2e,0x37,0x32, - 0x32,0x2c,0x33,0x2e,0x39,0x35,0x37,0x2c,0x33,0x2e, - 0x38,0x34,0x35,0x2c,0x33,0x2e,0x39,0x35,0x37,0x68, - 0x32,0x39,0x2e,0x33,0x37,0x32,0x0d,0x0a,0x09,0x09, - 0x09,0x63,0x32,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2c, - 0x33,0x2e,0x38,0x34,0x34,0x2d,0x31,0x2e,0x37,0x37, - 0x31,0x2c,0x33,0x2e,0x38,0x34,0x34,0x2d,0x33,0x2e, - 0x39,0x35,0x37,0x43,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x2c,0x32,0x30,0x2e,0x38,0x38,0x39,0x2c,0x33,0x35, - 0x2e,0x33,0x34,0x2c,0x31,0x39,0x2e,0x31,0x31,0x38, - 0x2c,0x33,0x33,0x2e,0x32,0x31,0x37,0x2c,0x31,0x39, - 0x2e,0x31,0x31,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d, - 0x0a + 0x38,0x37,0x2c,0x31,0x30,0x2e,0x33,0x36,0x38,0x0a, + 0x09,0x63,0x30,0x2c,0x32,0x2e,0x39,0x35,0x36,0x2c, + 0x35,0x2e,0x30,0x33,0x36,0x2c,0x31,0x2e,0x34,0x2c, + 0x35,0x2e,0x30,0x33,0x36,0x2c,0x33,0x2e,0x31,0x38, + 0x38,0x63,0x30,0x2c,0x30,0x2e,0x37,0x39,0x32,0x2d, + 0x30,0x2e,0x38,0x31,0x33,0x2c,0x31,0x2e,0x30,0x36, + 0x34,0x2d,0x31,0x2e,0x36,0x38,0x34,0x2c,0x31,0x2e, + 0x30,0x36,0x34,0x63,0x2d,0x31,0x2e,0x31,0x37,0x39, + 0x2c,0x30,0x2d,0x31,0x2e,0x39,0x32,0x33,0x2d,0x30, + 0x2e,0x34,0x35,0x36,0x2d,0x31,0x2e,0x39,0x36,0x33, + 0x2d,0x31,0x2e,0x34,0x30,0x37,0x48,0x30,0x2e,0x30, + 0x32,0x36,0x0a,0x09,0x63,0x30,0x2e,0x30,0x32,0x31, + 0x2c,0x31,0x2e,0x35,0x31,0x36,0x2c,0x31,0x2e,0x30, + 0x30,0x35,0x2c,0x32,0x2e,0x35,0x33,0x38,0x2c,0x33, + 0x2e,0x34,0x36,0x39,0x2c,0x32,0x2e,0x35,0x33,0x38, + 0x63,0x31,0x2e,0x34,0x35,0x35,0x2c,0x30,0x2c,0x33, + 0x2e,0x32,0x38,0x2d,0x30,0x2e,0x34,0x38,0x36,0x2c, + 0x33,0x2e,0x32,0x38,0x2d,0x32,0x2e,0x33,0x34,0x35, + 0x63,0x30,0x2d,0x33,0x2e,0x30,0x37,0x39,0x2d,0x35, + 0x2e,0x30,0x39,0x33,0x2d,0x31,0x2e,0x34,0x35,0x34, + 0x2d,0x35,0x2e,0x30,0x39,0x33,0x2d,0x33,0x2e,0x31, + 0x34,0x38,0x0a,0x09,0x63,0x30,0x2d,0x30,0x2e,0x36, + 0x37,0x36,0x2c,0x30,0x2e,0x36,0x33,0x32,0x2d,0x30, + 0x2e,0x39,0x38,0x38,0x2c,0x31,0x2e,0x35,0x38,0x39, + 0x2d,0x30,0x2e,0x39,0x38,0x38,0x63,0x31,0x2e,0x31, + 0x39,0x36,0x2c,0x30,0x2c,0x31,0x2e,0x36,0x37,0x36, + 0x2c,0x30,0x2e,0x36,0x30,0x34,0x2c,0x31,0x2e,0x37, + 0x32,0x36,0x2c,0x31,0x2e,0x31,0x36,0x31,0x68,0x31, + 0x2e,0x35,0x35,0x31,0x63,0x2d,0x30,0x2e,0x31,0x38, + 0x35,0x2d,0x32,0x2e,0x30,0x39,0x33,0x2d,0x32,0x2e, + 0x32,0x39,0x2d,0x32,0x2e,0x32,0x39,0x32,0x2d,0x33, + 0x2e,0x33,0x34,0x35,0x2d,0x32,0x2e,0x32,0x39,0x32, + 0x0a,0x09,0x43,0x31,0x2e,0x35,0x33,0x36,0x2c,0x38, + 0x2e,0x31,0x33,0x39,0x2c,0x30,0x2e,0x31,0x38,0x37, + 0x2c,0x38,0x2e,0x37,0x36,0x32,0x2c,0x30,0x2e,0x31, + 0x38,0x37,0x2c,0x31,0x30,0x2e,0x33,0x36,0x38,0x22, + 0x2f,0x3e,0x0a,0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x67, + 0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, + 0x33,0x2e,0x32,0x31,0x37,0x2c,0x31,0x39,0x2e,0x31, + 0x31,0x38,0x48,0x33,0x2e,0x38,0x34,0x35,0x43,0x31, + 0x2e,0x37,0x32,0x32,0x2c,0x31,0x39,0x2e,0x31,0x31, + 0x38,0x2c,0x30,0x2c,0x32,0x30,0x2e,0x38,0x39,0x2c, + 0x30,0x2c,0x32,0x33,0x2e,0x30,0x37,0x35,0x73,0x31, + 0x2e,0x37,0x32,0x32,0x2c,0x33,0x2e,0x39,0x35,0x37, + 0x2c,0x33,0x2e,0x38,0x34,0x35,0x2c,0x33,0x2e,0x39, + 0x35,0x37,0x68,0x32,0x39,0x2e,0x33,0x37,0x32,0x0a, + 0x09,0x09,0x09,0x63,0x32,0x2e,0x31,0x32,0x33,0x2c, + 0x30,0x2c,0x33,0x2e,0x38,0x34,0x34,0x2d,0x31,0x2e, + 0x37,0x37,0x31,0x2c,0x33,0x2e,0x38,0x34,0x34,0x2d, + 0x33,0x2e,0x39,0x35,0x37,0x43,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x2c,0x32,0x30,0x2e,0x38,0x38,0x39,0x2c, + 0x33,0x35,0x2e,0x33,0x34,0x2c,0x31,0x39,0x2e,0x31, + 0x31,0x38,0x2c,0x33,0x33,0x2e,0x32,0x31,0x37,0x2c, + 0x31,0x39,0x2e,0x31,0x31,0x38,0x7a,0x22,0x2f,0x3e, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x67, + 0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/help_button_x_svg.cpp b/data/converted/help_button_x_svg.cpp index 764cfc39f8..3d1d3093e6 100644 --- a/data/converted/help_button_x_svg.cpp +++ b/data/converted/help_button_x_svg.cpp @@ -2,103 +2,102 @@ #include "../Resources.h" -const size_t help_button_x_svg_size = 965; -const unsigned char help_button_x_svg_data[965] = { +const size_t help_button_x_svg_size = 949; +const unsigned char help_button_x_svg_data[949] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x30,0x32,0x39, - 0x63,0x2d,0x38,0x2e,0x35,0x36,0x31,0x2c,0x30,0x2d, - 0x31,0x35,0x2e,0x35,0x2c,0x36,0x2e,0x39,0x34,0x2d, - 0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x63, - 0x30,0x2c,0x38,0x2e,0x35,0x36,0x33,0x2c,0x36,0x2e, - 0x39,0x33,0x39,0x2c,0x31,0x35,0x2e,0x35,0x30,0x32, - 0x2c,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35, - 0x30,0x32,0x0d,0x0a,0x09,0x09,0x09,0x63,0x38,0x2e, - 0x35,0x36,0x33,0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35, - 0x2d,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31,0x35,0x2e, - 0x35,0x2d,0x31,0x35,0x2e,0x35,0x30,0x32,0x43,0x33, - 0x34,0x2e,0x30,0x33,0x2c,0x39,0x2e,0x39,0x37,0x2c, - 0x32,0x37,0x2e,0x30,0x39,0x31,0x2c,0x33,0x2e,0x30, - 0x32,0x39,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, - 0x2e,0x30,0x32,0x39,0x7a,0x20,0x4d,0x32,0x31,0x2e, - 0x34,0x36,0x35,0x2c,0x32,0x34,0x2e,0x39,0x32,0x35, - 0x6c,0x2d,0x32,0x2e,0x36,0x30,0x37,0x2d,0x34,0x2e, - 0x38,0x37,0x6c,0x2d,0x32,0x2e,0x36,0x30,0x34,0x2c, - 0x34,0x2e,0x38,0x37,0x68,0x2d,0x33,0x2e,0x31,0x36, - 0x34,0x6c,0x34,0x2e,0x31,0x31,0x2d,0x36,0x2e,0x38, - 0x31,0x31,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x2d,0x34, - 0x2e,0x30,0x31,0x2d,0x36,0x2e,0x36,0x39,0x38,0x68, - 0x33,0x2e,0x31,0x33,0x38,0x6c,0x32,0x2e,0x34,0x39, - 0x33,0x2c,0x34,0x2e,0x37,0x38,0x37,0x6c,0x32,0x2e, - 0x35,0x33,0x33,0x2d,0x34,0x2e,0x37,0x38,0x37,0x68, - 0x33,0x2e,0x31,0x35,0x34,0x4c,0x32,0x30,0x2e,0x35, - 0x2c,0x31,0x38,0x2e,0x31,0x31,0x35,0x6c,0x34,0x2e, - 0x32,0x34,0x2c,0x36,0x2e,0x38,0x31,0x31,0x48,0x32, - 0x31,0x2e,0x34,0x36,0x35,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61, - 0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x22,0x3e,0x0d, - 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x36,0x2e, - 0x39,0x36,0x31,0x2c,0x30,0x2e,0x31,0x76,0x33,0x36, - 0x2e,0x38,0x36,0x31,0x48,0x30,0x2e,0x31,0x56,0x30, - 0x2e,0x31,0x48,0x33,0x36,0x2e,0x39,0x36,0x31,0x20, - 0x4d,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x48, - 0x30,0x76,0x33,0x37,0x2e,0x30,0x36,0x68,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x56,0x30,0x4c,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73, - 0x76,0x67,0x3e,0x0d,0x0a + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e, + 0x30,0x32,0x39,0x63,0x2d,0x38,0x2e,0x35,0x36,0x31, + 0x2c,0x30,0x2d,0x31,0x35,0x2e,0x35,0x2c,0x36,0x2e, + 0x39,0x34,0x2d,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35, + 0x2e,0x35,0x63,0x30,0x2c,0x38,0x2e,0x35,0x36,0x33, + 0x2c,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31,0x35,0x2e, + 0x35,0x30,0x32,0x2c,0x31,0x35,0x2e,0x35,0x2c,0x31, + 0x35,0x2e,0x35,0x30,0x32,0x0a,0x09,0x09,0x09,0x63, + 0x38,0x2e,0x35,0x36,0x33,0x2c,0x30,0x2c,0x31,0x35, + 0x2e,0x35,0x2d,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31, + 0x35,0x2e,0x35,0x2d,0x31,0x35,0x2e,0x35,0x30,0x32, + 0x43,0x33,0x34,0x2e,0x30,0x33,0x2c,0x39,0x2e,0x39, + 0x37,0x2c,0x32,0x37,0x2e,0x30,0x39,0x31,0x2c,0x33, + 0x2e,0x30,0x32,0x39,0x2c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x33,0x2e,0x30,0x32,0x39,0x7a,0x20,0x4d,0x32, + 0x31,0x2e,0x34,0x36,0x35,0x2c,0x32,0x34,0x2e,0x39, + 0x32,0x35,0x6c,0x2d,0x32,0x2e,0x36,0x30,0x37,0x2d, + 0x34,0x2e,0x38,0x37,0x6c,0x2d,0x32,0x2e,0x36,0x30, + 0x34,0x2c,0x34,0x2e,0x38,0x37,0x68,0x2d,0x33,0x2e, + 0x31,0x36,0x34,0x6c,0x34,0x2e,0x31,0x31,0x2d,0x36, + 0x2e,0x38,0x31,0x31,0x0a,0x09,0x09,0x09,0x6c,0x2d, + 0x34,0x2e,0x30,0x31,0x2d,0x36,0x2e,0x36,0x39,0x38, + 0x68,0x33,0x2e,0x31,0x33,0x38,0x6c,0x32,0x2e,0x34, + 0x39,0x33,0x2c,0x34,0x2e,0x37,0x38,0x37,0x6c,0x32, + 0x2e,0x35,0x33,0x33,0x2d,0x34,0x2e,0x37,0x38,0x37, + 0x68,0x33,0x2e,0x31,0x35,0x34,0x4c,0x32,0x30,0x2e, + 0x35,0x2c,0x31,0x38,0x2e,0x31,0x31,0x35,0x6c,0x34, + 0x2e,0x32,0x34,0x2c,0x36,0x2e,0x38,0x31,0x31,0x48, + 0x32,0x31,0x2e,0x34,0x36,0x35,0x7a,0x22,0x2f,0x3e, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x67, + 0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69, + 0x74,0x79,0x3d,0x22,0x30,0x22,0x3e,0x0a,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x33,0x36,0x2e,0x39,0x36,0x31, + 0x2c,0x30,0x2e,0x31,0x76,0x33,0x36,0x2e,0x38,0x36, + 0x31,0x48,0x30,0x2e,0x31,0x56,0x30,0x2e,0x31,0x48, + 0x33,0x36,0x2e,0x39,0x36,0x31,0x20,0x4d,0x33,0x37, + 0x2e,0x30,0x36,0x31,0x2c,0x30,0x48,0x30,0x76,0x33, + 0x37,0x2e,0x30,0x36,0x68,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x56,0x30,0x4c,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67, + 0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/help_button_y_svg.cpp b/data/converted/help_button_y_svg.cpp index adb8fbc494..c05fc3b76c 100644 --- a/data/converted/help_button_y_svg.cpp +++ b/data/converted/help_button_y_svg.cpp @@ -2,99 +2,99 @@ #include "../Resources.h" -const size_t help_button_y_svg_size = 927; -const unsigned char help_button_y_svg_data[927] = { +const size_t help_button_y_svg_size = 911; +const unsigned char help_button_y_svg_data[911] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x30,0x32,0x39, - 0x63,0x2d,0x38,0x2e,0x35,0x36,0x31,0x2c,0x30,0x2d, - 0x31,0x35,0x2e,0x35,0x2c,0x36,0x2e,0x39,0x34,0x2d, - 0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x63, - 0x30,0x2c,0x38,0x2e,0x35,0x36,0x32,0x2c,0x36,0x2e, - 0x39,0x33,0x39,0x2c,0x31,0x35,0x2e,0x35,0x30,0x32, - 0x2c,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35, - 0x30,0x32,0x0d,0x0a,0x09,0x09,0x09,0x63,0x38,0x2e, - 0x35,0x36,0x33,0x2c,0x30,0x2c,0x31,0x35,0x2e,0x35, - 0x2d,0x36,0x2e,0x39,0x34,0x2c,0x31,0x35,0x2e,0x35, - 0x2d,0x31,0x35,0x2e,0x35,0x30,0x32,0x43,0x33,0x34, - 0x2e,0x30,0x33,0x2c,0x39,0x2e,0x39,0x37,0x2c,0x32, - 0x37,0x2e,0x30,0x39,0x31,0x2c,0x33,0x2e,0x30,0x32, - 0x39,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e, - 0x30,0x32,0x39,0x7a,0x20,0x4d,0x32,0x30,0x2e,0x31, - 0x30,0x32,0x2c,0x32,0x30,0x2e,0x31,0x37,0x34,0x76, - 0x34,0x2e,0x37,0x35,0x68,0x2d,0x32,0x2e,0x37,0x76, - 0x2d,0x34,0x2e,0x38,0x39,0x6c,0x2d,0x34,0x2e,0x35, - 0x35,0x35,0x2d,0x38,0x2e,0x36,0x31,0x38,0x68,0x32, - 0x2e,0x39,0x36,0x39,0x0d,0x0a,0x09,0x09,0x09,0x6c, - 0x32,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x32,0x32,0x36, - 0x68,0x30,0x2e,0x30,0x35,0x36,0x6c,0x32,0x2e,0x39, - 0x35,0x2d,0x36,0x2e,0x32,0x32,0x36,0x68,0x32,0x2e, - 0x39,0x37,0x31,0x4c,0x32,0x30,0x2e,0x31,0x30,0x32, - 0x2c,0x32,0x30,0x2e,0x31,0x37,0x34,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f, - 0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x22, - 0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, - 0x36,0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e,0x31,0x76, - 0x33,0x36,0x2e,0x38,0x36,0x31,0x48,0x30,0x2e,0x31, - 0x56,0x30,0x2e,0x31,0x48,0x33,0x36,0x2e,0x39,0x36, - 0x31,0x20,0x4d,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, - 0x30,0x48,0x30,0x76,0x33,0x37,0x2e,0x30,0x36,0x68, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x56,0x30,0x4c,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, - 0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e, + 0x30,0x32,0x39,0x63,0x2d,0x38,0x2e,0x35,0x36,0x31, + 0x2c,0x30,0x2d,0x31,0x35,0x2e,0x35,0x2c,0x36,0x2e, + 0x39,0x34,0x2d,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35, + 0x2e,0x35,0x63,0x30,0x2c,0x38,0x2e,0x35,0x36,0x32, + 0x2c,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31,0x35,0x2e, + 0x35,0x30,0x32,0x2c,0x31,0x35,0x2e,0x35,0x2c,0x31, + 0x35,0x2e,0x35,0x30,0x32,0x0a,0x09,0x09,0x09,0x63, + 0x38,0x2e,0x35,0x36,0x33,0x2c,0x30,0x2c,0x31,0x35, + 0x2e,0x35,0x2d,0x36,0x2e,0x39,0x34,0x2c,0x31,0x35, + 0x2e,0x35,0x2d,0x31,0x35,0x2e,0x35,0x30,0x32,0x43, + 0x33,0x34,0x2e,0x30,0x33,0x2c,0x39,0x2e,0x39,0x37, + 0x2c,0x32,0x37,0x2e,0x30,0x39,0x31,0x2c,0x33,0x2e, + 0x30,0x32,0x39,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x2e,0x30,0x32,0x39,0x7a,0x20,0x4d,0x32,0x30, + 0x2e,0x31,0x30,0x32,0x2c,0x32,0x30,0x2e,0x31,0x37, + 0x34,0x76,0x34,0x2e,0x37,0x35,0x68,0x2d,0x32,0x2e, + 0x37,0x76,0x2d,0x34,0x2e,0x38,0x39,0x6c,0x2d,0x34, + 0x2e,0x35,0x35,0x35,0x2d,0x38,0x2e,0x36,0x31,0x38, + 0x68,0x32,0x2e,0x39,0x36,0x39,0x0a,0x09,0x09,0x09, + 0x6c,0x32,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x32,0x32, + 0x36,0x68,0x30,0x2e,0x30,0x35,0x36,0x6c,0x32,0x2e, + 0x39,0x35,0x2d,0x36,0x2e,0x32,0x32,0x36,0x68,0x32, + 0x2e,0x39,0x37,0x31,0x4c,0x32,0x30,0x2e,0x31,0x30, + 0x32,0x2c,0x32,0x30,0x2e,0x31,0x37,0x34,0x7a,0x22, + 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61, + 0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x22,0x3e,0x0a, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x36,0x2e,0x39, + 0x36,0x31,0x2c,0x30,0x2e,0x31,0x76,0x33,0x36,0x2e, + 0x38,0x36,0x31,0x48,0x30,0x2e,0x31,0x56,0x30,0x2e, + 0x31,0x48,0x33,0x36,0x2e,0x39,0x36,0x31,0x20,0x4d, + 0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x48,0x30, + 0x76,0x33,0x37,0x2e,0x30,0x36,0x68,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x56,0x30,0x4c,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, + 0x0a }; + diff --git a/data/converted/help_dpad_all_svg.cpp b/data/converted/help_dpad_all_svg.cpp index 3117c046b8..226a111d53 100644 --- a/data/converted/help_dpad_all_svg.cpp +++ b/data/converted/help_dpad_all_svg.cpp @@ -2,73 +2,72 @@ #include "../Resources.h" -const size_t help_dpad_all_svg_size = 3523; -const unsigned char help_dpad_all_svg_data[3523] = { +const size_t help_dpad_all_svg_size = 3470; +const unsigned char help_dpad_all_svg_data[3470] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x30, - 0x38,0x35,0x2c,0x33,0x37,0x2e,0x30,0x35,0x38,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31,0x76, - 0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33,0x2e,0x31, - 0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31,0x2c,0x32, - 0x35,0x2e,0x32,0x30,0x35,0x2c,0x30,0x2c,0x32,0x33, - 0x2e,0x33,0x33,0x39,0x2c,0x30,0x2c,0x32,0x32,0x2e, - 0x30,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, + 0x0a,0x09,0x09,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, + 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e, + 0x30,0x38,0x35,0x2c,0x33,0x37,0x2e,0x30,0x35,0x38, + 0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d,0x32, + 0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31, + 0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d,0x33, + 0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31, + 0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33,0x2e, + 0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31,0x2c, + 0x32,0x35,0x2e,0x32,0x30,0x35,0x2c,0x30,0x2c,0x32, + 0x33,0x2e,0x33,0x33,0x39,0x2c,0x30,0x2c,0x32,0x32, + 0x2e,0x30,0x38,0x34,0x0a,0x09,0x09,0x09,0x09,0x09, 0x76,0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32, 0x2e,0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37, 0x2d,0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32, @@ -81,208 +80,205 @@ const unsigned char help_dpad_all_svg_data[3523] = { 0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31, 0x2e,0x38,0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31, 0x2c,0x33,0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37, - 0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x68, - 0x38,0x2e,0x37,0x33,0x31,0x63,0x31,0x2e,0x32,0x30, - 0x31,0x2c,0x30,0x2c,0x32,0x2e,0x31,0x35,0x34,0x2c, - 0x30,0x2e,0x35,0x32,0x35,0x2c,0x32,0x2e,0x36,0x38, - 0x34,0x2c,0x31,0x2e,0x34,0x38,0x63,0x30,0x2e,0x32, - 0x30,0x37,0x2c,0x30,0x2e,0x33,0x37,0x35,0x2c,0x30, - 0x2e,0x34,0x35,0x36,0x2c,0x31,0x2e,0x31,0x31,0x32, - 0x2c,0x30,0x2e,0x34,0x32,0x39,0x2c,0x31,0x2e,0x36, - 0x33,0x39,0x68,0x30,0x2e,0x30,0x30,0x38,0x76,0x37, - 0x2e,0x31,0x31,0x63,0x30,0x2c,0x32,0x2e,0x32,0x39, - 0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e,0x31, - 0x32,0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37,0x33, - 0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x76,0x38, - 0x2e,0x37,0x33,0x32,0x43,0x32,0x35,0x2e,0x32,0x30, - 0x36,0x2c,0x33,0x36,0x2e,0x32,0x32,0x37,0x2c,0x32, - 0x33,0x2e,0x33,0x34,0x2c,0x33,0x37,0x2e,0x30,0x35, - 0x38,0x2c,0x32,0x32,0x2e,0x30,0x38,0x35,0x2c,0x33, - 0x37,0x2e,0x30,0x35,0x38,0x7a,0x20,0x4d,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x33, - 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, - 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, - 0x2e,0x34,0x39,0x32,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x33,0x76,0x37,0x2e,0x31,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, - 0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33, - 0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, - 0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38,0x0d, - 0x0a,0x09,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33, - 0x38,0x34,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, - 0x2e,0x36,0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x32, - 0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36, - 0x32,0x31,0x56,0x32,0x33,0x2e,0x37,0x30,0x35,0x68, - 0x31,0x30,0x2e,0x32,0x33,0x31,0x63,0x30,0x2e,0x33, - 0x37,0x36,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31, - 0x2e,0x36,0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32, - 0x31,0x76,0x2d,0x37,0x2e,0x31,0x32,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x30, - 0x30,0x35,0x2d,0x30,0x2e,0x32,0x38,0x37,0x2d,0x30, - 0x2e,0x31,0x31,0x32,0x2d,0x31,0x2e,0x36,0x30,0x39, - 0x2d,0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e,0x36,0x30, - 0x39,0x48,0x32,0x33,0x2e,0x37,0x30,0x37,0x56,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, - 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, - 0x2e,0x35,0x36,0x38,0x2c,0x31,0x2e,0x35,0x2c,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0d,0x0a,0x09,0x09, - 0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36, - 0x2c,0x30,0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36, - 0x31,0x39,0x2c,0x30,0x2e,0x31,0x33,0x39,0x2d,0x31, + 0x33,0x33,0x0a,0x09,0x09,0x09,0x09,0x09,0x68,0x38, + 0x2e,0x37,0x33,0x31,0x63,0x31,0x2e,0x32,0x30,0x31, + 0x2c,0x30,0x2c,0x32,0x2e,0x31,0x35,0x34,0x2c,0x30, + 0x2e,0x35,0x32,0x35,0x2c,0x32,0x2e,0x36,0x38,0x34, + 0x2c,0x31,0x2e,0x34,0x38,0x63,0x30,0x2e,0x32,0x30, + 0x37,0x2c,0x30,0x2e,0x33,0x37,0x35,0x2c,0x30,0x2e, + 0x34,0x35,0x36,0x2c,0x31,0x2e,0x31,0x31,0x32,0x2c, + 0x30,0x2e,0x34,0x32,0x39,0x2c,0x31,0x2e,0x36,0x33, + 0x39,0x68,0x30,0x2e,0x30,0x30,0x38,0x76,0x37,0x2e, + 0x31,0x31,0x63,0x30,0x2c,0x32,0x2e,0x32,0x39,0x2d, + 0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e,0x31,0x32, + 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e, + 0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37,0x33,0x31, + 0x0a,0x09,0x09,0x09,0x09,0x09,0x76,0x38,0x2e,0x37, + 0x33,0x32,0x43,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c, + 0x33,0x36,0x2e,0x32,0x32,0x37,0x2c,0x32,0x33,0x2e, + 0x33,0x34,0x2c,0x33,0x37,0x2e,0x30,0x35,0x38,0x2c, + 0x32,0x32,0x2e,0x30,0x38,0x35,0x2c,0x33,0x37,0x2e, + 0x30,0x35,0x38,0x7a,0x20,0x4d,0x33,0x2e,0x31,0x32, + 0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x33,0x43,0x32, + 0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e,0x33,0x35, + 0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33,0x2e,0x34, + 0x39,0x32,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x34,0x2e, + 0x39,0x37,0x33,0x76,0x37,0x2e,0x31,0x31,0x0a,0x09, + 0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30,0x36, + 0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x31, + 0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31, + 0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31,0x30, + 0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30,0x35, + 0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x31, + 0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x48,0x33,0x2e, - 0x31,0x32,0x31,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x63, - 0x2d,0x32,0x2e,0x30,0x31,0x32,0x2c,0x30,0x2d,0x33, - 0x2e,0x36,0x34,0x39,0x2d,0x31,0x2e,0x36,0x33,0x38, - 0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x33,0x2e,0x36, - 0x35,0x31,0x63,0x30,0x2d,0x32,0x2e,0x30,0x31,0x33, - 0x2c,0x31,0x2e,0x36,0x33,0x37,0x2d,0x33,0x2e,0x36, - 0x35,0x2c,0x33,0x2e,0x36,0x34,0x39,0x2d,0x33,0x2e, - 0x36,0x35,0x0d,0x0a,0x09,0x09,0x09,0x63,0x32,0x2e, - 0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x35, - 0x2c,0x31,0x2e,0x36,0x33,0x38,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x33,0x2e,0x36,0x35,0x43,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x2c,0x32,0x30,0x2e,0x35,0x34,0x34, - 0x2c,0x32,0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x32, - 0x2e,0x31,0x38,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33, - 0x31,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x7a,0x20, - 0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36, - 0x2e,0x33,0x38,0x63,0x2d,0x31,0x2e,0x31,0x38,0x35, - 0x2c,0x30,0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x30, - 0x2e,0x39,0x36,0x35,0x2d,0x32,0x2e,0x31,0x34,0x39, - 0x2c,0x32,0x2e,0x31,0x35,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x30,0x2c,0x31,0x2e,0x31,0x38,0x37,0x2c,0x30, - 0x2e,0x39,0x36,0x34,0x2c,0x32,0x2e,0x31,0x35,0x31, - 0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, - 0x35,0x31,0x63,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30, - 0x2c,0x32,0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36, - 0x35,0x2c,0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31, - 0x35,0x31,0x43,0x32,0x30,0x2e,0x36,0x38,0x31,0x2c, - 0x31,0x37,0x2e,0x33,0x34,0x34,0x2c,0x31,0x39,0x2e, - 0x37,0x31,0x36,0x2c,0x31,0x36,0x2e,0x33,0x38,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e, - 0x33,0x38,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33,0x6c, - 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, - 0x38,0x34,0x68,0x36,0x2e,0x30,0x31,0x32,0x4c,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x37,0x68,0x2d,0x36,0x2e,0x30, - 0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, - 0x30,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30, - 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x31, - 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, - 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, - 0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35, - 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, - 0x30,0x2e,0x39,0x38,0x37,0x2d,0x30,0x2e,0x34,0x33, - 0x2c,0x31,0x2e,0x32,0x36,0x32,0x2c,0x30,0x6c,0x33, - 0x2e,0x30,0x30,0x37,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x37, - 0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32,0x32,0x2e, - 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x37,0x2c, - 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, - 0x31,0x37,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x37,0x7a,0x0d,0x0a,0x09,0x09, - 0x09,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, - 0x37,0x2e,0x31,0x31,0x37,0x68,0x33,0x2e,0x32,0x36, - 0x37,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e, - 0x35,0x37,0x32,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37, - 0x2c,0x37,0x2e,0x31,0x31,0x37,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, - 0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, + 0x09,0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30, + 0x2e,0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x34, + 0x2d,0x30,0x2e,0x31,0x34,0x32,0x2c,0x31,0x2e,0x36, + 0x32,0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32, + 0x33,0x2e,0x37,0x30,0x35,0x68,0x31,0x30,0x2e,0x32, + 0x33,0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, + 0x2e,0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31, + 0x2d,0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32, + 0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37, + 0x2e,0x31,0x32,0x31,0x0a,0x09,0x09,0x09,0x09,0x09, + 0x63,0x2d,0x30,0x2e,0x30,0x30,0x35,0x2d,0x30,0x2e, + 0x32,0x38,0x37,0x2d,0x30,0x2e,0x31,0x31,0x32,0x2d, + 0x31,0x2e,0x36,0x30,0x39,0x2d,0x31,0x2e,0x36,0x32, + 0x2d,0x31,0x2e,0x36,0x30,0x39,0x48,0x32,0x33,0x2e, + 0x37,0x30,0x37,0x56,0x33,0x2e,0x31,0x32,0x31,0x43, + 0x32,0x33,0x2e,0x37,0x30,0x31,0x2c,0x32,0x2e,0x37, + 0x34,0x35,0x2c,0x32,0x33,0x2e,0x35,0x36,0x38,0x2c, + 0x31,0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, + 0x2c,0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e,0x31,0x31, + 0x31,0x0a,0x09,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, + 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36, + 0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x30,0x2e,0x31, + 0x33,0x39,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31, + 0x2e,0x36,0x32,0x31,0x76,0x31,0x30,0x2e,0x32,0x33, + 0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x7a,0x22,0x2f, + 0x3e,0x0a,0x09,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0a, + 0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33, + 0x31,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x63,0x2d, + 0x32,0x2e,0x30,0x31,0x32,0x2c,0x30,0x2d,0x33,0x2e, + 0x36,0x34,0x39,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d, + 0x33,0x2e,0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35, + 0x31,0x63,0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c, + 0x31,0x2e,0x36,0x33,0x37,0x2d,0x33,0x2e,0x36,0x35, + 0x2c,0x33,0x2e,0x36,0x34,0x39,0x2d,0x33,0x2e,0x36, + 0x35,0x0a,0x09,0x09,0x09,0x63,0x32,0x2e,0x30,0x31, + 0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x35,0x2c,0x31, + 0x2e,0x36,0x33,0x38,0x2c,0x33,0x2e,0x36,0x35,0x2c, + 0x33,0x2e,0x36,0x35,0x43,0x32,0x32,0x2e,0x31,0x38, + 0x31,0x2c,0x32,0x30,0x2e,0x35,0x34,0x34,0x2c,0x32, + 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x32,0x2e,0x31, + 0x38,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, + 0x32,0x32,0x2e,0x31,0x38,0x31,0x7a,0x20,0x4d,0x31, + 0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33, + 0x38,0x63,0x2d,0x31,0x2e,0x31,0x38,0x35,0x2c,0x30, + 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x39, + 0x36,0x35,0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32, + 0x2e,0x31,0x35,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, + 0x31,0x2e,0x31,0x38,0x37,0x2c,0x30,0x2e,0x39,0x36, + 0x34,0x2c,0x32,0x2e,0x31,0x35,0x31,0x2c,0x32,0x2e, + 0x31,0x34,0x39,0x2c,0x32,0x2e,0x31,0x35,0x31,0x63, + 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32, + 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, + 0x32,0x30,0x2e,0x36,0x38,0x31,0x2c,0x31,0x37,0x2e, + 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x36, + 0x2c,0x31,0x36,0x2e,0x33,0x38,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x38,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x33,0x2e,0x31,0x32,0x35,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c, - 0x33,0x2e,0x30,0x30,0x34,0x76,0x2d,0x36,0x2e,0x30, - 0x31,0x4c,0x33,0x2e,0x31,0x32,0x35,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, + 0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e, + 0x31,0x38,0x33,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35, + 0x2c,0x34,0x2e,0x36,0x38,0x34,0x68,0x36,0x2e,0x30, + 0x31,0x32,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, + 0x2e,0x31,0x38,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09, 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38,0x30, - 0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d, - 0x30,0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e, - 0x32,0x38,0x32,0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30, - 0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x31,0x31,0x39, - 0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31,0x39,0x2e,0x31, - 0x36,0x31,0x63,0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d, - 0x30,0x2e,0x31,0x33,0x37,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x2d,0x30,0x2e,0x33,0x37,0x35,0x2d,0x30,0x2e, - 0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x0d, - 0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33,0x2d, - 0x30,0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33,0x34, - 0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34,0x2e, - 0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36,0x63, - 0x30,0x2e,0x32,0x33,0x2d,0x30,0x2e,0x31,0x34,0x37, - 0x2c,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x31, - 0x35,0x39,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2d,0x30, - 0x2e,0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34,0x2c, - 0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33,0x39, - 0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36,0x2e, - 0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, - 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x34, - 0x39,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38, - 0x2e,0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x35, - 0x34,0x2c,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e,0x38,0x30,0x39, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d, - 0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e,0x35, - 0x33,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e, - 0x36,0x33,0x32,0x76,0x2d,0x33,0x2e,0x32,0x36,0x35, - 0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e, - 0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33, - 0x2e,0x38,0x37,0x39,0x2c,0x31,0x38,0x2e,0x35,0x32, - 0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2d,0x33, - 0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31,0x4c, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35, + 0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x37,0x68,0x2d, + 0x36,0x2e,0x30,0x31,0x32,0x63,0x2d,0x30,0x2e,0x32, + 0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x36, + 0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35, + 0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e, + 0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, + 0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33, + 0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e, + 0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d, + 0x34,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63, + 0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33, + 0x31,0x2c,0x30,0x2e,0x39,0x38,0x37,0x2d,0x30,0x2e, + 0x34,0x33,0x2c,0x31,0x2e,0x32,0x36,0x32,0x2c,0x30, + 0x6c,0x33,0x2e,0x30,0x30,0x37,0x2c,0x34,0x2e,0x36, + 0x38,0x34,0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30, + 0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39, + 0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30, + 0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32, + 0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36, + 0x37,0x2c,0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38, + 0x2e,0x36,0x31,0x37,0x2c,0x32,0x31,0x2e,0x35,0x33, + 0x36,0x2c,0x38,0x2e,0x36,0x31,0x37,0x7a,0x0a,0x09, + 0x09,0x09,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37, + 0x2c,0x37,0x2e,0x31,0x31,0x37,0x68,0x33,0x2e,0x32, + 0x36,0x37,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34, + 0x2e,0x35,0x37,0x32,0x4c,0x31,0x36,0x2e,0x38,0x39, + 0x37,0x2c,0x37,0x2e,0x31,0x31,0x37,0x7a,0x22,0x2f, + 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, + 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x33,0x2e,0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e, + 0x30,0x30,0x34,0x76,0x2d,0x36,0x2e,0x30,0x31,0x4c, + 0x33,0x2e,0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32, + 0x32,0x2e,0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31, + 0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32, + 0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30, + 0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x4c,0x32,0x2e, + 0x37,0x32,0x2c,0x31,0x39,0x2e,0x31,0x36,0x31,0x63, + 0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31, + 0x33,0x37,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30, + 0x2e,0x33,0x37,0x35,0x2d,0x30,0x2e,0x33,0x34,0x35, + 0x2d,0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09, + 0x73,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39, + 0x33,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e, + 0x36,0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d, + 0x33,0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33, + 0x2d,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x35, + 0x32,0x34,0x2d,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, + 0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e,0x30,0x32,0x37, + 0x63,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33, + 0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, + 0x38,0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e, + 0x36,0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34, + 0x2d,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x35, + 0x32,0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e, + 0x36,0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c, + 0x32,0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39, + 0x33,0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c, + 0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35, + 0x34,0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d, + 0x33,0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31, + 0x34,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f, + 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, + 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, 0x33,0x33,0x2e,0x38,0x37,0x39,0x2c,0x31,0x38,0x2e, - 0x35,0x32,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x31, - 0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63, - 0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d,0x30, - 0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33,0x2d, - 0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30,0x39, - 0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30, - 0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39,0x31, - 0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33, - 0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76,0x2d, - 0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63, + 0x35,0x32,0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35, + 0x2d,0x33,0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30, + 0x31,0x4c,0x33,0x33,0x2e,0x38,0x37,0x39,0x2c,0x31, + 0x38,0x2e,0x35,0x32,0x39,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, + 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e, + 0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d, + 0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33, + 0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30, + 0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, + 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39, + 0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76, + 0x2d,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09,0x09,0x63, 0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e, 0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c, 0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35, @@ -294,67 +290,66 @@ const unsigned char help_dpad_all_svg_data[3523] = { 0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33, 0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, 0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34, - 0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, - 0x2e,0x36,0x33,0x31,0x4c,0x32,0x39,0x2e,0x36,0x2c, - 0x32,0x32,0x2e,0x31,0x36,0x35,0x43,0x32,0x39,0x2e, - 0x34,0x37,0x37,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34, - 0x2c,0x32,0x39,0x2e,0x33,0x33,0x35,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39, - 0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20, - 0x4d,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36, - 0x2e,0x38,0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36, - 0x6c,0x32,0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36, - 0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32,0x39, - 0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39, - 0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x33,0x33,0x2e,0x38,0x37,0x36,0x6c, - 0x33,0x2e,0x30,0x30,0x37,0x2d,0x34,0x2e,0x36,0x38, - 0x34,0x68,0x2d,0x36,0x2e,0x30,0x31,0x32,0x4c,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x33,0x2e,0x38,0x37, - 0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x33,0x34,0x2e,0x36,0x32,0x36,0x4c,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x63, - 0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30, - 0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x31,0x33,0x2d, - 0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34, - 0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63, - 0x2d,0x30,0x2e,0x31,0x34,0x38,0x2d,0x30,0x2e,0x32, - 0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30, - 0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x37, - 0x2d,0x30,0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x31, - 0x33,0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2c,0x30, - 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31, - 0x2c,0x30,0x2e,0x36,0x35,0x38,0x2d,0x30,0x2e,0x33, - 0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x32,0x63,0x30, - 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x35, - 0x32,0x36,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30, - 0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e,0x33,0x39,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33, - 0x32,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31, - 0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x34,0x2d,0x30, - 0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35, - 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x37,0x2c,0x34,0x2e, - 0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x32,0x33, - 0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x2c,0x31,0x38, - 0x2e,0x37,0x38,0x35,0x2c,0x33,0x34,0x2e,0x36,0x32, - 0x36,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34, - 0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e, - 0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32, - 0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35, - 0x34,0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e, - 0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48, - 0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67, - 0x3e,0x0d,0x0a + 0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73, + 0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34,0x39, + 0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, + 0x36,0x33,0x31,0x4c,0x32,0x39,0x2e,0x36,0x2c,0x32, + 0x32,0x2e,0x31,0x36,0x35,0x43,0x32,0x39,0x2e,0x34, + 0x37,0x37,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x2c, + 0x32,0x39,0x2e,0x33,0x33,0x35,0x2c,0x32,0x32,0x2e, + 0x32,0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39,0x35, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d, + 0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e, + 0x38,0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36,0x6c, + 0x32,0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36,0x33, + 0x33,0x0a,0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39, + 0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x33, + 0x2e,0x38,0x37,0x36,0x6c,0x33,0x2e,0x30,0x30,0x37, + 0x2d,0x34,0x2e,0x36,0x38,0x34,0x68,0x2d,0x36,0x2e, + 0x30,0x31,0x32,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x33,0x2e,0x38,0x37,0x36,0x7a,0x22,0x2f,0x3e, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, + 0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, + 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, + 0x36,0x32,0x36,0x63,0x2d,0x30,0x2e,0x32,0x35,0x35, + 0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30, + 0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d, + 0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30, + 0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0a,0x09, + 0x09,0x09,0x63,0x2d,0x30,0x2e,0x31,0x34,0x38,0x2d, + 0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x35, + 0x38,0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e, + 0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35,0x63, + 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34, + 0x31,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35,0x38,0x2d, + 0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e,0x30,0x31, + 0x32,0x63,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2c, + 0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x31,0x34, + 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e, + 0x33,0x39,0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x31,0x33,0x32,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30, + 0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x34, + 0x2d,0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37, + 0x36,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x37,0x2c, + 0x34,0x2e,0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30, + 0x32,0x33,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x2c, + 0x31,0x38,0x2e,0x37,0x38,0x35,0x2c,0x33,0x34,0x2e, + 0x36,0x32,0x36,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x34,0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d,0x31, + 0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39, + 0x34,0x32,0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32, + 0x2e,0x35,0x34,0x35,0x0a,0x09,0x09,0x09,0x6c,0x31, + 0x2e,0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35, + 0x48,0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f, + 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f, + 0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/help_dpad_down_svg.cpp b/data/converted/help_dpad_down_svg.cpp index e6b58955d7..11fa7c3139 100644 --- a/data/converted/help_dpad_down_svg.cpp +++ b/data/converted/help_dpad_down_svg.cpp @@ -2,84 +2,83 @@ #include "../Resources.h" -const size_t help_dpad_down_svg_size = 3215; -const unsigned char help_dpad_down_svg_data[3215] = { +const size_t help_dpad_down_svg_size = 3167; +const unsigned char help_dpad_down_svg_data[3167] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e, - 0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31,0x76, - 0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33,0x2e,0x31, - 0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31,0x2c,0x32, - 0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c,0x32,0x33, - 0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30, - 0x38,0x35,0x0d,0x0a,0x09,0x09,0x09,0x09,0x76,0x2d, - 0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, - 0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33, - 0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x33, - 0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31,0x2e, - 0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31,0x2c, - 0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31,0x34, - 0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e,0x31, - 0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36, - 0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, + 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, + 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, + 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, + 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, + 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, + 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, + 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, + 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, + 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, + 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, + 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, @@ -89,68 +88,67 @@ const unsigned char help_dpad_down_svg_data[3215] = { 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, - 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, - 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, - 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, - 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, - 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, - 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, - 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, - 0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, - 0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33, - 0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, + 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, + 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, + 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, + 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, + 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, + 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, + 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, + 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, + 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, + 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, + 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, + 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33,0x38,0x34, - 0x2d,0x30,0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e,0x36, - 0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x33,0x2c,0x31, - 0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68,0x31,0x30, - 0x2e,0x32,0x33,0x31,0x63,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d,0x30, - 0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34,0x2d, - 0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x68,0x2d,0x31,0x30,0x2e, - 0x32,0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x32, - 0x33,0x2e,0x37,0x30,0x31,0x2c,0x32,0x2e,0x37,0x34, - 0x35,0x2c,0x32,0x33,0x2e,0x35,0x36,0x37,0x2c,0x31, - 0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, - 0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x31,0x2e,0x36,0x31,0x39,0x2c,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x4c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33, - 0x35,0x34,0x4c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31, - 0x33,0x2e,0x33,0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e,0x31, - 0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c, - 0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31,0x2e, - 0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d, - 0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36,0x33, - 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, - 0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32,0x2e, - 0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x35, - 0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09,0x09, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, + 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, + 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, + 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, + 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, + 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, + 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, + 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, + 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, + 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, + 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, + 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, + 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, + 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, + 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, + 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, + 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, @@ -162,61 +160,60 @@ const unsigned char help_dpad_down_svg_data[3215] = { 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37, - 0x2e,0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31, - 0x37,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33, - 0x37,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, + 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, + 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, + 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, + 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, + 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, + 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, + 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36, + 0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d,0x36,0x2e, + 0x30,0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x33, + 0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x35,0x2d,0x30, + 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x37,0x2d, + 0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33, + 0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, + 0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c, + 0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36, + 0x36,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e, + 0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, + 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, + 0x2c,0x31,0x2e,0x32,0x36,0x34,0x2c,0x30,0x6c,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x32, + 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, + 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36, + 0x2c,0x30,0x2e,0x37,0x36,0x36,0x43,0x32,0x32,0x2e, + 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c, + 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, + 0x31,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, + 0x38,0x2e,0x36,0x31,0x36,0x7a,0x0a,0x09,0x09,0x09, + 0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, + 0x2e,0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36,0x38, + 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35, + 0x37,0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, + 0x37,0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, - 0x68,0x2d,0x36,0x2e,0x30,0x31,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x37,0x33,0x2c,0x30,0x2d,0x30,0x2e,0x35, - 0x32,0x35,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, - 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, - 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36,0x2d, - 0x30,0x2e,0x37,0x36,0x36,0x6c,0x33,0x2e,0x30,0x30, - 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30, - 0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36, - 0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36, - 0x34,0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c, - 0x34,0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34, - 0x37,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, - 0x31,0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c, - 0x30,0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36, - 0x36,0x43,0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38, - 0x2e,0x34,0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31, - 0x31,0x2c,0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31, - 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, - 0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36, - 0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36, - 0x68,0x33,0x2e,0x32,0x36,0x38,0x4c,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31, - 0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31, - 0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38, - 0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63, - 0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d,0x30, - 0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e,0x30,0x34,0x2d, - 0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x31,0x31, - 0x39,0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31,0x39,0x2e, - 0x31,0x36,0x32,0x63,0x2d,0x30,0x2e,0x32,0x31,0x35, - 0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e,0x33, - 0x34,0x35,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, - 0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e, + 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d, + 0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e,0x30,0x34, + 0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x31, + 0x31,0x39,0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31,0x39, + 0x2e,0x31,0x36,0x32,0x63,0x2d,0x30,0x2e,0x32,0x31, + 0x35,0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e, + 0x33,0x34,0x35,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d, + 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33, + 0x31,0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33, 0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33, 0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34, 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36, @@ -227,103 +224,102 @@ const unsigned char help_dpad_down_svg_data[3215] = { 0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33, 0x39,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e, 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36, - 0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30, - 0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31, - 0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30, - 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43, - 0x38,0x2e,0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32, - 0x35,0x34,0x2c,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32, - 0x32,0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e,0x38,0x30, - 0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20, - 0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e, - 0x35,0x33,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31, - 0x2e,0x36,0x33,0x32,0x76,0x2d,0x33,0x2e,0x32,0x36, - 0x35,0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c, - 0x30,0x2d,0x30,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e, - 0x30,0x33,0x2d,0x30,0x2e,0x33,0x35,0x38,0x2d,0x30, - 0x2e,0x30,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, - 0x33,0x39,0x32,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d, - 0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35, - 0x38,0x76,0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34, - 0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35, - 0x32,0x36,0x2c,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30, - 0x2e,0x36,0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39, - 0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35, - 0x33,0x33,0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30, - 0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37, - 0x6c,0x34,0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30, - 0x30,0x35,0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30, - 0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35, - 0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33, - 0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c, - 0x30,0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34, - 0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x34, - 0x43,0x32,0x39,0x2e,0x34,0x37,0x38,0x2c,0x32,0x32, - 0x2e,0x32,0x34,0x34,0x2c,0x32,0x39,0x2e,0x33,0x33, - 0x36,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x32, - 0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x34,0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x34, - 0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x76,0x33, - 0x2e,0x32,0x36,0x36,0x6c,0x32,0x2e,0x35,0x34,0x36, - 0x2d,0x31,0x2e,0x36,0x33,0x33,0x0d,0x0a,0x09,0x09, - 0x09,0x4c,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31, - 0x36,0x2e,0x38,0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x2e,0x30,0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, + 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x34, + 0x38,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, + 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38, + 0x2e,0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x35, + 0x34,0x2c,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e,0x38,0x30,0x39, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d, + 0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e, + 0x36,0x33,0x32,0x76,0x2d,0x33,0x2e,0x32,0x36,0x35, + 0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x31,0x39, + 0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d, + 0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e, + 0x32,0x34,0x36,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30, + 0x2e,0x33,0x35,0x38,0x2d,0x30,0x2e,0x30,0x39,0x32, + 0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, + 0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d, + 0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39, + 0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76,0x2d,0x36, + 0x2e,0x30,0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d, + 0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34, + 0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e, + 0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63, + 0x30,0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33, + 0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e, + 0x31,0x32,0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c, + 0x30,0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38, + 0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e, + 0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c, + 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, + 0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30, + 0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d, + 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33, + 0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2c,0x33, + 0x2e,0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x34,0x37, + 0x38,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x2c,0x32, + 0x39,0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c, + 0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d,0x32, + 0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38, + 0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36,0x6c,0x32, + 0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36,0x33,0x33, + 0x0a,0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x34, + 0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x7a,0x22, + 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09, + 0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, 0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x33,0x2e, 0x38,0x37,0x36,0x6c,0x33,0x2e,0x30,0x30,0x37,0x2d, 0x34,0x2e,0x36,0x38,0x34,0x68,0x2d,0x36,0x2e,0x30, 0x31,0x32,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, - 0x33,0x2e,0x38,0x37,0x36,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, - 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, - 0x36,0x32,0x36,0x63,0x2d,0x30,0x2e,0x32,0x35,0x35, - 0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x32,0x2d,0x30, - 0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d, - 0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30, - 0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a, - 0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31,0x34,0x37, - 0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31, - 0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30, - 0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36,0x36, - 0x73,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33, - 0x39,0x31,0x2c,0x30,0x2e,0x36,0x35,0x37,0x2d,0x30, - 0x2e,0x33,0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x32, - 0x63,0x30,0x2e,0x32,0x37,0x33,0x2c,0x30,0x2c,0x30, - 0x2e,0x35,0x32,0x35,0x2c,0x30,0x2e,0x31,0x34,0x38, - 0x2c,0x30,0x2e,0x36,0x35,0x37,0x2c,0x30,0x2e,0x33, - 0x39,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x31,0x33,0x33,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30, - 0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, - 0x2d,0x30,0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37, - 0x36,0x36,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c, - 0x34,0x2e,0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30, - 0x32,0x33,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x2c, - 0x31,0x38,0x2e,0x37,0x38,0x36,0x2c,0x33,0x34,0x2e, - 0x36,0x32,0x36,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x33,0x34,0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d,0x31, - 0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39, - 0x34,0x32,0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32, - 0x2e,0x35,0x34,0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c, - 0x31,0x2e,0x36,0x33,0x35,0x2d,0x32,0x2e,0x35,0x34, - 0x35,0x48,0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73, - 0x76,0x67,0x3e,0x0d,0x0a + 0x33,0x2e,0x38,0x37,0x36,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, + 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x4c, + 0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36, + 0x32,0x36,0x63,0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c, + 0x30,0x2d,0x30,0x2e,0x34,0x39,0x32,0x2d,0x30,0x2e, + 0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d,0x30, + 0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30, + 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2d,0x30, + 0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38, + 0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30, + 0x32,0x36,0x2d,0x30,0x2e,0x37,0x36,0x36,0x73,0x30, + 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31, + 0x2c,0x30,0x2e,0x36,0x35,0x37,0x2d,0x30,0x2e,0x33, + 0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x32,0x63,0x30, + 0x2e,0x32,0x37,0x33,0x2c,0x30,0x2c,0x30,0x2e,0x35, + 0x32,0x35,0x2c,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30, + 0x2e,0x36,0x35,0x37,0x2c,0x30,0x2e,0x33,0x39,0x31, + 0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x33, + 0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32, + 0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e, + 0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36,0x36,0x6c, + 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, + 0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c, + 0x33,0x34,0x2e,0x34,0x39,0x36,0x2c,0x31,0x38,0x2e, + 0x37,0x38,0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, + 0x36,0x32,0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38, + 0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x6c, + 0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34, + 0x35,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33, + 0x35,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36, + 0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09, + 0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, + 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/help_dpad_left_svg.cpp b/data/converted/help_dpad_left_svg.cpp index 3e3cca8ac1..dbf730d608 100644 --- a/data/converted/help_dpad_left_svg.cpp +++ b/data/converted/help_dpad_left_svg.cpp @@ -2,84 +2,83 @@ #include "../Resources.h" -const size_t help_dpad_left_svg_size = 3212; -const unsigned char help_dpad_left_svg_data[3212] = { +const size_t help_dpad_left_svg_size = 3164; +const unsigned char help_dpad_left_svg_data[3164] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e, - 0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31,0x76, - 0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33,0x2e,0x31, - 0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31,0x2c,0x32, - 0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c,0x32,0x33, - 0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30, - 0x38,0x35,0x0d,0x0a,0x09,0x09,0x09,0x09,0x76,0x2d, - 0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, - 0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33, - 0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x33, - 0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31,0x2e, - 0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31,0x2c, - 0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31,0x34, - 0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e,0x31, - 0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36, - 0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, + 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, + 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, + 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, + 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, + 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, + 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, + 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, + 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, + 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, + 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, + 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, @@ -89,68 +88,67 @@ const unsigned char help_dpad_left_svg_data[3212] = { 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, - 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, - 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, - 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, - 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, - 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, - 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, - 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, - 0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, - 0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33, - 0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, + 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, + 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, + 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, + 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, + 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, + 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, + 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, + 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, + 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, + 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, + 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, + 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33,0x38,0x34, - 0x2d,0x30,0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e,0x36, - 0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x33,0x2c,0x31, - 0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68,0x31,0x30, - 0x2e,0x32,0x33,0x31,0x63,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d,0x30, - 0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34,0x2d, - 0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x68,0x2d,0x31,0x30,0x2e, - 0x32,0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x32, - 0x33,0x2e,0x37,0x30,0x31,0x2c,0x32,0x2e,0x37,0x34, - 0x35,0x2c,0x32,0x33,0x2e,0x35,0x36,0x37,0x2c,0x31, - 0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, - 0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x31,0x2e,0x36,0x31,0x39,0x2c,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x4c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33, - 0x35,0x34,0x4c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31, - 0x33,0x2e,0x33,0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e,0x31, - 0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c, - 0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31,0x2e, - 0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d, - 0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36,0x33, - 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, - 0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32,0x2e, - 0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x35, - 0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09,0x09, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, + 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, + 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, + 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, + 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, + 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, + 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, + 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, + 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, + 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, + 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, + 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, + 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, + 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, + 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, + 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, + 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, @@ -162,56 +160,55 @@ const unsigned char help_dpad_left_svg_data[3212] = { 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37, - 0x2e,0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31, - 0x37,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33, - 0x37,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, + 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, + 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, + 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, + 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, + 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, + 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, + 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36, + 0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d,0x36,0x2e, + 0x30,0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x33, + 0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x35,0x2d,0x30, + 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x37,0x2d, + 0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33, + 0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, + 0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c, + 0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36, + 0x36,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e, + 0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, + 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, + 0x2c,0x31,0x2e,0x32,0x36,0x34,0x2c,0x30,0x6c,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x32, + 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, + 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36, + 0x2c,0x30,0x2e,0x37,0x36,0x36,0x43,0x32,0x32,0x2e, + 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c, + 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, + 0x31,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, + 0x38,0x2e,0x36,0x31,0x36,0x7a,0x0a,0x09,0x09,0x09, + 0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, + 0x2e,0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36,0x38, + 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35, + 0x37,0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, + 0x37,0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, - 0x68,0x2d,0x36,0x2e,0x30,0x31,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x37,0x33,0x2c,0x30,0x2d,0x30,0x2e,0x35, - 0x32,0x35,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, - 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, - 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36,0x2d, - 0x30,0x2e,0x37,0x36,0x36,0x6c,0x33,0x2e,0x30,0x30, - 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30, - 0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36, - 0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36, - 0x34,0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c, - 0x34,0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34, - 0x37,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, - 0x31,0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c, - 0x30,0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36, - 0x36,0x43,0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38, - 0x2e,0x34,0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31, - 0x31,0x2c,0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31, - 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, - 0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36, - 0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36, - 0x68,0x33,0x2e,0x32,0x36,0x38,0x4c,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31, - 0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31, - 0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e,0x31, - 0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c,0x34, - 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34, - 0x76,0x2d,0x36,0x2e,0x30,0x31,0x4c,0x33,0x2e,0x31, - 0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e, + 0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c, + 0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30, + 0x34,0x76,0x2d,0x36,0x2e,0x30,0x31,0x4c,0x33,0x2e, + 0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, 0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e, @@ -223,107 +220,106 @@ const unsigned char help_dpad_left_svg_data[3212] = { 0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38, 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33, 0x37,0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30, - 0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73, - 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33, - 0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, - 0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33, - 0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d, - 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32, - 0x34,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e, - 0x37,0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63, - 0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31, - 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38, - 0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, - 0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34, - 0x2d,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35, - 0x32,0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e, - 0x36,0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c, - 0x32,0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39, - 0x33,0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c, - 0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35, - 0x34,0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d, - 0x33,0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31, - 0x34,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c, - 0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d,0x30,0x2e, - 0x31,0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x34, - 0x36,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e,0x33, - 0x35,0x38,0x2d,0x30,0x2e,0x30,0x39,0x32,0x63,0x2d, - 0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x33, - 0x32,0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e, - 0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d, - 0x30,0x2e,0x36,0x35,0x38,0x76,0x2d,0x36,0x2e,0x30, - 0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30, - 0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34,0x39, - 0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x33, - 0x39,0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63,0x30, - 0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33,0x31, - 0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x31, - 0x32,0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c,0x30, - 0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38,0x35, - 0x2c,0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e,0x32, - 0x31,0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c,0x30, - 0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36, - 0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36, - 0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30, - 0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d, - 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33, - 0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2c,0x33, - 0x2e,0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x34,0x37, - 0x38,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x2c,0x32, - 0x39,0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c, - 0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d,0x32, - 0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38, - 0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36,0x6c,0x32, - 0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36,0x33,0x33, - 0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39, - 0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x4c,0x31,0x38, + 0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73,0x30, + 0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c, + 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33, + 0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e, + 0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d,0x30, + 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x34, + 0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e,0x37, + 0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63,0x30, + 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38,0x34, + 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x76,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30, + 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x36, + 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32,0x32, + 0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33,0x32, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e, + 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31, + 0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34,0x35, + 0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33,0x2e, + 0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39, + 0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38, + 0x34,0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30, + 0x2d,0x30,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e,0x30, + 0x33,0x2d,0x30,0x2e,0x33,0x35,0x38,0x2d,0x30,0x2e, + 0x30,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31, + 0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33, + 0x39,0x32,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30, + 0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35,0x38, + 0x76,0x2d,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30, + 0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36, + 0x2c,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x36, + 0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30, + 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, + 0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37, + 0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34, + 0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x35, + 0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31, + 0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, + 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35, + 0x2c,0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09, + 0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34, + 0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, + 0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38, + 0x35,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32,0x39, + 0x2e,0x34,0x37,0x38,0x2c,0x32,0x32,0x2e,0x32,0x34, + 0x34,0x2c,0x32,0x39,0x2e,0x33,0x33,0x36,0x2c,0x32, + 0x32,0x2e,0x32,0x38,0x34,0x2c,0x32,0x39,0x2e,0x31, + 0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a, + 0x20,0x4d,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31, + 0x36,0x2e,0x38,0x39,0x36,0x76,0x33,0x2e,0x32,0x36, + 0x36,0x6c,0x32,0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e, + 0x36,0x33,0x33,0x0a,0x09,0x09,0x09,0x4c,0x32,0x39, + 0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39, + 0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x34,0x2e,0x36,0x32,0x36,0x4c,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x63, + 0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30, + 0x2e,0x34,0x39,0x32,0x2d,0x30,0x2e,0x31,0x33,0x2d, + 0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34, + 0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34, + 0x2e,0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63,0x2d, + 0x30,0x2e,0x31,0x34,0x37,0x2d,0x30,0x2e,0x32,0x33, + 0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e, + 0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x36,0x2d, + 0x30,0x2e,0x37,0x36,0x36,0x73,0x30,0x2e,0x33,0x38, + 0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e, + 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68, + 0x36,0x2e,0x30,0x31,0x32,0x63,0x30,0x2e,0x32,0x37, + 0x33,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x35,0x2c, + 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x36,0x35, + 0x37,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x31,0x33,0x33,0x2c,0x30,0x2e, + 0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c,0x30, + 0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x36, + 0x2c,0x30,0x2e,0x37,0x36,0x36,0x6c,0x2d,0x33,0x2e, + 0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x43, + 0x31,0x39,0x2e,0x30,0x32,0x33,0x2c,0x33,0x34,0x2e, + 0x34,0x39,0x36,0x2c,0x31,0x38,0x2e,0x37,0x38,0x36, + 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x2c,0x31,0x38, 0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, - 0x63,0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d, - 0x30,0x2e,0x34,0x39,0x32,0x2d,0x30,0x2e,0x31,0x33, - 0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33, - 0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d, - 0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2d,0x30,0x2e, - 0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d, - 0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32, - 0x36,0x2d,0x30,0x2e,0x37,0x36,0x36,0x73,0x30,0x2e, - 0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c, - 0x30,0x2e,0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39, - 0x31,0x68,0x36,0x2e,0x30,0x31,0x32,0x63,0x30,0x2e, - 0x32,0x37,0x33,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32, - 0x35,0x2c,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e, - 0x36,0x35,0x37,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d, - 0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x33, - 0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32, - 0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e, - 0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36,0x36,0x6c, - 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, - 0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c, - 0x33,0x34,0x2e,0x34,0x39,0x36,0x2c,0x31,0x38,0x2e, - 0x37,0x38,0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, - 0x36,0x32,0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38, - 0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x6c, - 0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34, - 0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36, - 0x33,0x35,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31, - 0x36,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, - 0x0d,0x0a + 0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, + 0x32,0x39,0x2e,0x39,0x34,0x32,0x6c,0x31,0x2e,0x36, + 0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0a,0x09, + 0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x35,0x2d,0x32, + 0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x38,0x39, + 0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73, + 0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/help_dpad_leftright_svg.cpp b/data/converted/help_dpad_leftright_svg.cpp index 0e9f86ce3b..315f94c0de 100644 --- a/data/converted/help_dpad_leftright_svg.cpp +++ b/data/converted/help_dpad_leftright_svg.cpp @@ -2,84 +2,83 @@ #include "../Resources.h" -const size_t help_dpad_leftright_svg_size = 3290; -const unsigned char help_dpad_leftright_svg_data[3290] = { +const size_t help_dpad_leftright_svg_size = 3241; +const unsigned char help_dpad_leftright_svg_data[3241] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e, - 0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31,0x76, - 0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33,0x2e,0x31, - 0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31,0x2c,0x32, - 0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c,0x32,0x33, - 0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30, - 0x38,0x35,0x0d,0x0a,0x09,0x09,0x09,0x09,0x76,0x2d, - 0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, - 0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33, - 0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x33, - 0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31,0x2e, - 0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31,0x2c, - 0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31,0x34, - 0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e,0x31, - 0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36, - 0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, + 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, + 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, + 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, + 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, + 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, + 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, + 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, + 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, + 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, + 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, + 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, @@ -89,68 +88,67 @@ const unsigned char help_dpad_leftright_svg_data[3290] = { 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, - 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, - 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, - 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, - 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, - 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, - 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, - 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, - 0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, - 0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33, - 0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, + 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, + 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, + 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, + 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, + 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, + 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, + 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, + 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, + 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, + 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, + 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, + 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33,0x38,0x34, - 0x2d,0x30,0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e,0x36, - 0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x33,0x2c,0x31, - 0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68,0x31,0x30, - 0x2e,0x32,0x33,0x31,0x63,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d,0x30, - 0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34,0x2d, - 0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x68,0x2d,0x31,0x30,0x2e, - 0x32,0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x32, - 0x33,0x2e,0x37,0x30,0x31,0x2c,0x32,0x2e,0x37,0x34, - 0x35,0x2c,0x32,0x33,0x2e,0x35,0x36,0x37,0x2c,0x31, - 0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, - 0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x31,0x2e,0x36,0x31,0x39,0x2c,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x4c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33, - 0x35,0x34,0x4c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31, - 0x33,0x2e,0x33,0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e,0x31, - 0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c, - 0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31,0x2e, - 0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d, - 0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36,0x33, - 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, - 0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32,0x2e, - 0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x35, - 0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09,0x09, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, + 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, + 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, + 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, + 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, + 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, + 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, + 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, + 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, + 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, + 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, + 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, + 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, + 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, + 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, + 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, + 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, @@ -162,56 +160,55 @@ const unsigned char help_dpad_leftright_svg_data[3290] = { 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37, - 0x2e,0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31, - 0x37,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33, - 0x37,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, + 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, + 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, + 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, + 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, + 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, + 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, + 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36, + 0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d,0x36,0x2e, + 0x30,0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x33, + 0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x35,0x2d,0x30, + 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x37,0x2d, + 0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33, + 0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, + 0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c, + 0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36, + 0x36,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e, + 0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, + 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, + 0x2c,0x31,0x2e,0x32,0x36,0x34,0x2c,0x30,0x6c,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x32, + 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, + 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36, + 0x2c,0x30,0x2e,0x37,0x36,0x36,0x43,0x32,0x32,0x2e, + 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c, + 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, + 0x31,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, + 0x38,0x2e,0x36,0x31,0x36,0x7a,0x0a,0x09,0x09,0x09, + 0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, + 0x2e,0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36,0x38, + 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35, + 0x37,0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, + 0x37,0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, - 0x68,0x2d,0x36,0x2e,0x30,0x31,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x37,0x33,0x2c,0x30,0x2d,0x30,0x2e,0x35, - 0x32,0x35,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, - 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, - 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36,0x2d, - 0x30,0x2e,0x37,0x36,0x36,0x6c,0x33,0x2e,0x30,0x30, - 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30, - 0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36, - 0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36, - 0x34,0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c, - 0x34,0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34, - 0x37,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, - 0x31,0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c, - 0x30,0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36, - 0x36,0x43,0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38, - 0x2e,0x34,0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31, - 0x31,0x2c,0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31, - 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, - 0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36, - 0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36, - 0x68,0x33,0x2e,0x32,0x36,0x38,0x4c,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31, - 0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31, - 0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e,0x31, - 0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c,0x34, - 0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30,0x34, - 0x76,0x2d,0x36,0x2e,0x30,0x31,0x4c,0x33,0x2e,0x31, - 0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e, + 0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c, + 0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30, + 0x34,0x76,0x2d,0x36,0x2e,0x30,0x31,0x4c,0x33,0x2e, + 0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, 0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e, @@ -223,114 +220,114 @@ const unsigned char help_dpad_leftright_svg_data[3290] = { 0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38, 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33, 0x37,0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30, - 0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73, - 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33, - 0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, - 0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33, - 0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d, - 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32, - 0x34,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e, - 0x37,0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63, - 0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31, - 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38, - 0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, - 0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34, - 0x2d,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35, - 0x32,0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e, - 0x36,0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c, - 0x32,0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39, - 0x33,0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c, - 0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35, - 0x34,0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d, - 0x33,0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31, - 0x34,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x33,0x33,0x2e,0x38,0x37,0x39,0x2c, - 0x31,0x38,0x2e,0x35,0x32,0x39,0x6c,0x2d,0x34,0x2e, - 0x36,0x38,0x35,0x2d,0x33,0x2e,0x30,0x30,0x35,0x76, - 0x36,0x2e,0x30,0x31,0x4c,0x33,0x33,0x2e,0x38,0x37, - 0x39,0x2c,0x31,0x38,0x2e,0x35,0x32,0x39,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73,0x30, + 0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c, + 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33, + 0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e, + 0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d,0x30, + 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x34, + 0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e,0x37, + 0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63,0x30, + 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c, + 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38,0x34, + 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x76,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30, + 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x36, + 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, + 0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32,0x32, + 0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33,0x32, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e, + 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31, + 0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34,0x35, + 0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33,0x2e, + 0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33, + 0x2e,0x38,0x37,0x39,0x2c,0x31,0x38,0x2e,0x35,0x32, + 0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2d,0x33, + 0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31,0x4c, + 0x33,0x33,0x2e,0x38,0x37,0x39,0x2c,0x31,0x38,0x2e, + 0x35,0x32,0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x31,0x39, + 0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d, + 0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e, + 0x32,0x34,0x36,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30, + 0x2e,0x33,0x35,0x38,0x2d,0x30,0x2e,0x30,0x39,0x32, + 0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, + 0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d, + 0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39, + 0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76,0x2d,0x36, + 0x2e,0x30,0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d, + 0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34, + 0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e, + 0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63, + 0x30,0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33, + 0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e, + 0x31,0x32,0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c, + 0x30,0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38, + 0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e, + 0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c, + 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, + 0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30, + 0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d, + 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33, + 0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2c,0x33, + 0x2e,0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x34,0x37, + 0x38,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x2c,0x32, + 0x39,0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c, + 0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d,0x32, + 0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38, + 0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36,0x6c,0x32, + 0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36,0x33,0x33, + 0x0a,0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x34, + 0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x7a,0x22, + 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09, + 0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32, - 0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x34,0x36,0x2d, - 0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e,0x33,0x35,0x38, - 0x2d,0x30,0x2e,0x30,0x39,0x32,0x63,0x2d,0x30,0x2e, - 0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d, - 0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x33,0x38, - 0x34,0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e, - 0x36,0x35,0x38,0x76,0x2d,0x36,0x2e,0x30,0x31,0x0d, - 0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x32, - 0x37,0x34,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d,0x30, - 0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x33,0x39,0x32, - 0x2d,0x30,0x2e,0x36,0x35,0x38,0x63,0x30,0x2e,0x32, - 0x33,0x39,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30, - 0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x31,0x32,0x33, - 0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e,0x30, - 0x32,0x37,0x6c,0x34,0x2e,0x36,0x38,0x35,0x2c,0x33, - 0x2e,0x30,0x30,0x35,0x63,0x30,0x2e,0x32,0x31,0x35, - 0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e,0x33, - 0x34,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30,0x2e,0x31, - 0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e, - 0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x6c, - 0x2d,0x34,0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30, - 0x30,0x34,0x43,0x32,0x39,0x2e,0x34,0x37,0x38,0x2c, - 0x32,0x32,0x2e,0x32,0x34,0x34,0x2c,0x32,0x39,0x2e, - 0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x2c,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d,0x32,0x39,0x2e, - 0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36, - 0x76,0x33,0x2e,0x32,0x36,0x36,0x6c,0x32,0x2e,0x35, - 0x34,0x36,0x2d,0x31,0x2e,0x36,0x33,0x33,0x0d,0x0a, - 0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x34,0x35, - 0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a, - 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, - 0x34,0x2e,0x36,0x32,0x36,0x4c,0x31,0x38,0x2e,0x35, - 0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x63,0x2d, - 0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e, - 0x34,0x39,0x32,0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30, - 0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34,0x35, - 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e, - 0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d, - 0x30,0x2e,0x31,0x34,0x37,0x2d,0x30,0x2e,0x32,0x33, - 0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e, - 0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x36,0x2d, - 0x30,0x2e,0x37,0x36,0x36,0x73,0x30,0x2e,0x33,0x38, - 0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e, - 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68, - 0x36,0x2e,0x30,0x31,0x32,0x63,0x30,0x2e,0x32,0x37, - 0x33,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x35,0x2c, - 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x36,0x35, - 0x37,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x33,0x2c,0x30, - 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c, - 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32, - 0x36,0x2c,0x30,0x2e,0x37,0x36,0x36,0x6c,0x2d,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c,0x33,0x34, - 0x2e,0x34,0x39,0x36,0x2c,0x31,0x38,0x2e,0x37,0x38, - 0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, - 0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37, - 0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x6c,0x31,0x2e, - 0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d, - 0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x35, - 0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e, - 0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, + 0x36,0x32,0x36,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x34,0x2e,0x36,0x32,0x36,0x63,0x2d,0x30,0x2e, + 0x32,0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39, + 0x32,0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36, + 0x33,0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d, + 0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38, + 0x34,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31, + 0x34,0x37,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30, + 0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34, + 0x2d,0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37, + 0x36,0x36,0x73,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30, + 0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35,0x37, + 0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e,0x30, + 0x31,0x32,0x63,0x30,0x2e,0x32,0x37,0x33,0x2c,0x30, + 0x2c,0x30,0x2e,0x35,0x32,0x35,0x2c,0x30,0x2e,0x31, + 0x34,0x38,0x2c,0x30,0x2e,0x36,0x35,0x37,0x2c,0x30, + 0x2e,0x33,0x39,0x31,0x0a,0x09,0x09,0x09,0x63,0x30, + 0x2e,0x31,0x33,0x33,0x2c,0x30,0x2e,0x32,0x34,0x2c, + 0x30,0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e,0x35,0x33, + 0x33,0x2d,0x30,0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e, + 0x37,0x36,0x36,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35, + 0x2c,0x34,0x2e,0x36,0x38,0x34,0x43,0x31,0x39,0x2e, + 0x30,0x32,0x33,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36, + 0x2c,0x31,0x38,0x2e,0x37,0x38,0x36,0x2c,0x33,0x34, + 0x2e,0x36,0x32,0x36,0x2c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d, + 0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e, + 0x39,0x34,0x32,0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c, + 0x32,0x2e,0x35,0x34,0x35,0x0a,0x09,0x09,0x09,0x6c, + 0x31,0x2e,0x36,0x33,0x35,0x2d,0x32,0x2e,0x35,0x34, + 0x35,0x48,0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22, + 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, + 0x0a }; + diff --git a/data/converted/help_dpad_right_svg.cpp b/data/converted/help_dpad_right_svg.cpp index 0fb71669ba..214053557c 100644 --- a/data/converted/help_dpad_right_svg.cpp +++ b/data/converted/help_dpad_right_svg.cpp @@ -2,84 +2,83 @@ #include "../Resources.h" -const size_t help_dpad_right_svg_size = 3216; -const unsigned char help_dpad_right_svg_data[3216] = { +const size_t help_dpad_right_svg_size = 3168; +const unsigned char help_dpad_right_svg_data[3168] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e, - 0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31,0x76, - 0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33,0x2e,0x31, - 0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31,0x2c,0x32, - 0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c,0x32,0x33, - 0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30, - 0x38,0x35,0x0d,0x0a,0x09,0x09,0x09,0x09,0x76,0x2d, - 0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, - 0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33, - 0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x33, - 0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31,0x2e, - 0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31,0x2c, - 0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31,0x34, - 0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e,0x31, - 0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36, - 0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, + 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, + 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, + 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, + 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, + 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, + 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, + 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, + 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, + 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, + 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, + 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, @@ -89,68 +88,67 @@ const unsigned char help_dpad_right_svg_data[3216] = { 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, - 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, - 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, - 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, - 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, - 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, - 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, - 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, - 0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, - 0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33, - 0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, + 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, + 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, + 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, + 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, + 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, + 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, + 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, + 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, + 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, + 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, + 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, + 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33,0x38,0x34, - 0x2d,0x30,0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e,0x36, - 0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x33,0x2c,0x31, - 0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68,0x31,0x30, - 0x2e,0x32,0x33,0x31,0x63,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d,0x30, - 0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34,0x2d, - 0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x68,0x2d,0x31,0x30,0x2e, - 0x32,0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x32, - 0x33,0x2e,0x37,0x30,0x31,0x2c,0x32,0x2e,0x37,0x34, - 0x35,0x2c,0x32,0x33,0x2e,0x35,0x36,0x37,0x2c,0x31, - 0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, - 0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x31,0x2e,0x36,0x31,0x39,0x2c,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x4c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33, - 0x35,0x34,0x4c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31, - 0x33,0x2e,0x33,0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e,0x31, - 0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c, - 0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31,0x2e, - 0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d, - 0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36,0x33, - 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, - 0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32,0x2e, - 0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x35, - 0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09,0x09, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, + 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, + 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, + 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, + 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, + 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, + 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, + 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, + 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, + 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, + 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, + 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, + 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, + 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, + 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, + 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, + 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, @@ -162,61 +160,60 @@ const unsigned char help_dpad_right_svg_data[3216] = { 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37, - 0x2e,0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31, - 0x37,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33, - 0x37,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, + 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, + 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, + 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, + 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, + 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, + 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, + 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36, + 0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d,0x36,0x2e, + 0x30,0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x33, + 0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x35,0x2d,0x30, + 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x37,0x2d, + 0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33, + 0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, + 0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c, + 0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36, + 0x36,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e, + 0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, + 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, + 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, + 0x2c,0x31,0x2e,0x32,0x36,0x34,0x2c,0x30,0x6c,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x32, + 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, + 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36, + 0x2c,0x30,0x2e,0x37,0x36,0x36,0x43,0x32,0x32,0x2e, + 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c, + 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, + 0x31,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, + 0x38,0x2e,0x36,0x31,0x36,0x7a,0x0a,0x09,0x09,0x09, + 0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, + 0x2e,0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36,0x38, + 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35, + 0x37,0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, + 0x37,0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, - 0x68,0x2d,0x36,0x2e,0x30,0x31,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x37,0x33,0x2c,0x30,0x2d,0x30,0x2e,0x35, - 0x32,0x35,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, - 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, - 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36,0x2d, - 0x30,0x2e,0x37,0x36,0x36,0x6c,0x33,0x2e,0x30,0x30, - 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30, - 0x2e,0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36, - 0x2d,0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36, - 0x34,0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c, - 0x34,0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34, - 0x37,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, - 0x31,0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c, - 0x30,0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36, - 0x36,0x43,0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38, - 0x2e,0x34,0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31, - 0x31,0x2c,0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31, - 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, - 0x7a,0x0d,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36, - 0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36, - 0x68,0x33,0x2e,0x32,0x36,0x38,0x4c,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31, - 0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31, - 0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38, - 0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63, - 0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d,0x30, - 0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e,0x30,0x34,0x2d, - 0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x31,0x31, - 0x39,0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31,0x39,0x2e, - 0x31,0x36,0x32,0x63,0x2d,0x30,0x2e,0x32,0x31,0x35, - 0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e,0x33, - 0x34,0x35,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, - 0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e, + 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d, + 0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e,0x30,0x34, + 0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x31, + 0x31,0x39,0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31,0x39, + 0x2e,0x31,0x36,0x32,0x63,0x2d,0x30,0x2e,0x32,0x31, + 0x35,0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e, + 0x33,0x34,0x35,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d, + 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33, + 0x31,0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33, 0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33, 0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34, 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36, @@ -227,103 +224,102 @@ const unsigned char help_dpad_right_svg_data[3216] = { 0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33, 0x39,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e, 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36, - 0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30, - 0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31, - 0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30, - 0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43, - 0x38,0x2e,0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32, - 0x35,0x34,0x2c,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32, - 0x32,0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e,0x38,0x30, - 0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20, - 0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e, - 0x35,0x33,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31, - 0x2e,0x36,0x33,0x32,0x76,0x2d,0x33,0x2e,0x32,0x36, - 0x35,0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, - 0x33,0x2e,0x38,0x37,0x39,0x2c,0x31,0x38,0x2e,0x35, - 0x32,0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2d, - 0x33,0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31, - 0x4c,0x33,0x33,0x2e,0x38,0x37,0x39,0x2c,0x31,0x38, - 0x2e,0x35,0x32,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e, - 0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d, - 0x30,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e,0x30,0x33, - 0x2d,0x30,0x2e,0x33,0x35,0x38,0x2d,0x30,0x2e,0x30, - 0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39, - 0x32,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76, - 0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30, - 0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36, - 0x2c,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x36, - 0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30, - 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, - 0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37, - 0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34, - 0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x35, - 0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31, - 0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, - 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35, - 0x2c,0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09, - 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, - 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, - 0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, - 0x39,0x2e,0x34,0x37,0x38,0x2c,0x32,0x32,0x2e,0x32, - 0x34,0x34,0x2c,0x32,0x39,0x2e,0x33,0x33,0x36,0x2c, - 0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x32,0x39,0x2e, - 0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c, - 0x31,0x36,0x2e,0x38,0x39,0x36,0x76,0x33,0x2e,0x32, - 0x36,0x36,0x6c,0x32,0x2e,0x35,0x34,0x36,0x2d,0x31, - 0x2e,0x36,0x33,0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c, - 0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e, - 0x38,0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, - 0x36,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34, - 0x2e,0x36,0x32,0x36,0x63,0x2d,0x30,0x2e,0x32,0x35, - 0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x32,0x2d, - 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31, - 0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e, - 0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d, - 0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31,0x34, - 0x37,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e, - 0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d, - 0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36, - 0x36,0x73,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35,0x37,0x2d, - 0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e,0x30,0x31, - 0x32,0x63,0x30,0x2e,0x32,0x37,0x33,0x2c,0x30,0x2c, - 0x30,0x2e,0x35,0x32,0x35,0x2c,0x30,0x2e,0x31,0x34, - 0x38,0x2c,0x30,0x2e,0x36,0x35,0x37,0x2c,0x30,0x2e, - 0x33,0x39,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30, - 0x2e,0x31,0x33,0x33,0x2c,0x30,0x2e,0x32,0x34,0x2c, - 0x30,0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e,0x35,0x33, - 0x33,0x2d,0x30,0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e, - 0x37,0x36,0x36,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35, - 0x2c,0x34,0x2e,0x36,0x38,0x34,0x43,0x31,0x39,0x2e, - 0x30,0x32,0x33,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36, - 0x2c,0x31,0x38,0x2e,0x37,0x38,0x36,0x2c,0x33,0x34, - 0x2e,0x36,0x32,0x36,0x2c,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d, - 0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e, - 0x39,0x34,0x32,0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c, - 0x32,0x2e,0x35,0x34,0x35,0x0d,0x0a,0x09,0x09,0x09, - 0x6c,0x31,0x2e,0x36,0x33,0x35,0x2d,0x32,0x2e,0x35, - 0x34,0x35,0x48,0x31,0x36,0x2e,0x38,0x39,0x37,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, - 0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x2e,0x30,0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, + 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x34, + 0x38,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, + 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38, + 0x2e,0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x35, + 0x34,0x2c,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32,0x32, + 0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e,0x38,0x30,0x39, + 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d, + 0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e,0x35, + 0x33,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e, + 0x36,0x33,0x32,0x76,0x2d,0x33,0x2e,0x32,0x36,0x35, + 0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e, + 0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e,0x38,0x37, + 0x39,0x2c,0x31,0x38,0x2e,0x35,0x32,0x39,0x6c,0x2d, + 0x34,0x2e,0x36,0x38,0x35,0x2d,0x33,0x2e,0x30,0x30, + 0x35,0x76,0x36,0x2e,0x30,0x31,0x4c,0x33,0x33,0x2e, + 0x38,0x37,0x39,0x2c,0x31,0x38,0x2e,0x35,0x32,0x39, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32, + 0x32,0x2e,0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31, + 0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x34,0x36, + 0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e,0x33,0x35, + 0x38,0x2d,0x30,0x2e,0x30,0x39,0x32,0x63,0x2d,0x30, + 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x33,0x32, + 0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30, + 0x2e,0x36,0x35,0x38,0x76,0x2d,0x36,0x2e,0x30,0x31, + 0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x32, + 0x37,0x34,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d,0x30, + 0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x33,0x39,0x32, + 0x2d,0x30,0x2e,0x36,0x35,0x38,0x63,0x30,0x2e,0x32, + 0x33,0x39,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30, + 0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x31,0x32,0x33, + 0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e,0x30, + 0x32,0x37,0x6c,0x34,0x2e,0x36,0x38,0x35,0x2c,0x33, + 0x2e,0x30,0x30,0x35,0x63,0x30,0x2e,0x32,0x31,0x35, + 0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e,0x33, + 0x34,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31, + 0x0a,0x09,0x09,0x09,0x73,0x2d,0x30,0x2e,0x31,0x33, + 0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x33, + 0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d, + 0x34,0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30, + 0x34,0x43,0x32,0x39,0x2e,0x34,0x37,0x38,0x2c,0x32, + 0x32,0x2e,0x32,0x34,0x34,0x2c,0x32,0x39,0x2e,0x33, + 0x33,0x36,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c, + 0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e, + 0x32,0x38,0x34,0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39, + 0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x76, + 0x33,0x2e,0x32,0x36,0x36,0x6c,0x32,0x2e,0x35,0x34, + 0x36,0x2d,0x31,0x2e,0x36,0x33,0x33,0x0a,0x09,0x09, + 0x09,0x4c,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31, + 0x36,0x2e,0x38,0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, + 0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, + 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, + 0x36,0x32,0x36,0x63,0x2d,0x30,0x2e,0x32,0x35,0x35, + 0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x32,0x2d,0x30, + 0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d, + 0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30, + 0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0a,0x09, + 0x09,0x09,0x63,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2d, + 0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x35, + 0x38,0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e, + 0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36,0x36,0x73, + 0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39, + 0x31,0x2c,0x30,0x2e,0x36,0x35,0x37,0x2d,0x30,0x2e, + 0x33,0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x32,0x63, + 0x30,0x2e,0x32,0x37,0x33,0x2c,0x30,0x2c,0x30,0x2e, + 0x35,0x32,0x35,0x2c,0x30,0x2e,0x31,0x34,0x38,0x2c, + 0x30,0x2e,0x36,0x35,0x37,0x2c,0x30,0x2e,0x33,0x39, + 0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33, + 0x33,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31, + 0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30, + 0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36,0x36, + 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, + 0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x32,0x33, + 0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x2c,0x31,0x38, + 0x2e,0x37,0x38,0x36,0x2c,0x33,0x34,0x2e,0x36,0x32, + 0x36,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34, + 0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e, + 0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32, + 0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35, + 0x34,0x35,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36, + 0x33,0x35,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31, + 0x36,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/help_dpad_up_svg.cpp b/data/converted/help_dpad_up_svg.cpp index 225af33da9..a816609fe3 100644 --- a/data/converted/help_dpad_up_svg.cpp +++ b/data/converted/help_dpad_up_svg.cpp @@ -2,84 +2,83 @@ #include "../Resources.h" -const size_t help_dpad_up_svg_size = 3213; -const unsigned char help_dpad_up_svg_data[3213] = { +const size_t help_dpad_up_svg_size = 3165; +const unsigned char help_dpad_up_svg_data[3165] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e, - 0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31,0x76, - 0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33,0x2e,0x31, - 0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31,0x2c,0x32, - 0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c,0x32,0x33, - 0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30, - 0x38,0x35,0x0d,0x0a,0x09,0x09,0x09,0x09,0x76,0x2d, - 0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, - 0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33, - 0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x33, - 0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31,0x2e, - 0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31,0x2c, - 0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31,0x34, - 0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e,0x31, - 0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36, - 0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, + 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, + 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, + 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, + 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, + 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, + 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, + 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, + 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, + 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, + 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, + 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, @@ -89,68 +88,67 @@ const unsigned char help_dpad_up_svg_data[3213] = { 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, - 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, - 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, - 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, - 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, - 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, - 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, - 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, - 0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, - 0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33, - 0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, + 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, + 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, + 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, + 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, + 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, + 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, + 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, + 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, + 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, + 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, + 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, + 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33,0x38,0x34, - 0x2d,0x30,0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e,0x36, - 0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x33,0x2c,0x31, - 0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68,0x31,0x30, - 0x2e,0x32,0x33,0x31,0x63,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d,0x30, - 0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34,0x2d, - 0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x68,0x2d,0x31,0x30,0x2e, - 0x32,0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x32, - 0x33,0x2e,0x37,0x30,0x31,0x2c,0x32,0x2e,0x37,0x34, - 0x35,0x2c,0x32,0x33,0x2e,0x35,0x36,0x37,0x2c,0x31, - 0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, - 0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x31,0x2e,0x36,0x31,0x39,0x2c,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x4c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33, - 0x35,0x34,0x4c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31, - 0x33,0x2e,0x33,0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e,0x31, - 0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c, - 0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31,0x2e, - 0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d, - 0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36,0x33, - 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, - 0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32,0x2e, - 0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x35, - 0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09,0x09, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, + 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, + 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, + 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, + 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, + 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, + 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, + 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, + 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, + 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, + 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, + 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, + 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, + 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, + 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, + 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, + 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, @@ -162,56 +160,55 @@ const unsigned char help_dpad_up_svg_data[3213] = { 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37, - 0x2e,0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31, - 0x37,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33, - 0x37,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, + 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, + 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, + 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, + 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, + 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, + 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, + 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x2e,0x31,0x38,0x33,0x6c,0x2d,0x33,0x2e,0x30, + 0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x68,0x36, + 0x2e,0x30,0x31,0x32,0x4c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x33,0x2e,0x31,0x38,0x33,0x7a,0x22,0x2f,0x3e, 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33,0x6c, - 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, - 0x38,0x34,0x68,0x36,0x2e,0x30,0x31,0x32,0x4c,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x36,0x68,0x2d,0x36,0x2e,0x30, - 0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x33,0x2c, - 0x30,0x2d,0x30,0x2e,0x35,0x32,0x35,0x2d,0x30,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x37,0x2d,0x30, - 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x32, - 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, - 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, - 0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36,0x36, - 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, - 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, - 0x2c,0x31,0x2e,0x32,0x36,0x34,0x2c,0x30,0x6c,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36, - 0x2c,0x30,0x2e,0x37,0x36,0x36,0x43,0x32,0x32,0x2e, - 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c, - 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, - 0x31,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x36,0x7a,0x0d,0x0a,0x09,0x09, - 0x09,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, - 0x37,0x2e,0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36, - 0x38,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e, - 0x35,0x37,0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37, - 0x2c,0x37,0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, - 0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, + 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, + 0x68,0x2d,0x36,0x2e,0x30,0x31,0x32,0x63,0x2d,0x30, + 0x2e,0x32,0x37,0x33,0x2c,0x30,0x2d,0x30,0x2e,0x35, + 0x32,0x35,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, + 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, + 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34, + 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, + 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36,0x2d, + 0x30,0x2e,0x37,0x36,0x36,0x6c,0x33,0x2e,0x30,0x30, + 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e, + 0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36,0x2d, + 0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36,0x34, + 0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34, + 0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34,0x37, + 0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x31, + 0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c,0x30, + 0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36,0x36, + 0x43,0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e, + 0x34,0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31,0x31, + 0x2c,0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31,0x2e, + 0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x7a, + 0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36,0x2e,0x38, + 0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x68,0x33, + 0x2e,0x32,0x36,0x38,0x4c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31,0x36,0x2e, + 0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, 0x22,0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32, @@ -223,107 +220,106 @@ const unsigned char help_dpad_up_svg_data[3213] = { 0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33, 0x38,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e, 0x33,0x37,0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d, - 0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x73,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39, - 0x33,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e, - 0x36,0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d, - 0x33,0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33, - 0x2d,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35, - 0x32,0x34,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30, - 0x2e,0x37,0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37, - 0x63,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33, - 0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, - 0x38,0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e, - 0x36,0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37, - 0x34,0x2d,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e, - 0x35,0x32,0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2e,0x36,0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36, - 0x2c,0x32,0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e, - 0x39,0x33,0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x2c,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e, - 0x32,0x38,0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31, - 0x34,0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e, - 0x35,0x34,0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76, - 0x2d,0x33,0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35, - 0x31,0x34,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x31,0x39,0x35, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d,0x30, - 0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32, - 0x34,0x36,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e, - 0x33,0x35,0x38,0x2d,0x30,0x2e,0x30,0x39,0x32,0x63, - 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, - 0x33,0x32,0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30, - 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x32, - 0x2d,0x30,0x2e,0x36,0x35,0x38,0x76,0x2d,0x36,0x2e, - 0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d, - 0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34, - 0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e, - 0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63, - 0x30,0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33, - 0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e, - 0x31,0x32,0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c, - 0x30,0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38, - 0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e, - 0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c, - 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, - 0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x2d, - 0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33, - 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36, - 0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2c, - 0x33,0x2e,0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x34, - 0x37,0x38,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x2c, - 0x32,0x39,0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e, - 0x32,0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39,0x35, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d, - 0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e, - 0x38,0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36,0x6c, - 0x32,0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36,0x33, - 0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32,0x39,0x2e, - 0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x4c,0x31, + 0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73, + 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33, + 0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, + 0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33, + 0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d, + 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32, + 0x34,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e, + 0x37,0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63, + 0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31, + 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38, + 0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, + 0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d, + 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32, + 0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, + 0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32, + 0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33, + 0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37, + 0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38, + 0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33, + 0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67, + 0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c, + 0x30,0x2d,0x30,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e, + 0x30,0x33,0x2d,0x30,0x2e,0x33,0x35,0x38,0x2d,0x30, + 0x2e,0x30,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34, + 0x31,0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, + 0x33,0x39,0x32,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d, + 0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35, + 0x38,0x76,0x2d,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, + 0x30,0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32, + 0x36,0x2c,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e, + 0x36,0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d, + 0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33, + 0x33,0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e, + 0x37,0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c, + 0x34,0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30, + 0x35,0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e, + 0x31,0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c, + 0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34, + 0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09, + 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, + 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, + 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, + 0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, + 0x39,0x2e,0x34,0x37,0x38,0x2c,0x32,0x32,0x2e,0x32, + 0x34,0x34,0x2c,0x32,0x39,0x2e,0x33,0x33,0x36,0x2c, + 0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x32,0x39,0x2e, + 0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c, + 0x31,0x36,0x2e,0x38,0x39,0x36,0x76,0x33,0x2e,0x32, + 0x36,0x36,0x6c,0x32,0x2e,0x35,0x34,0x36,0x2d,0x31, + 0x2e,0x36,0x33,0x33,0x0a,0x09,0x09,0x09,0x4c,0x32, + 0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38, + 0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x4c,0x31,0x38, + 0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, + 0x63,0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d, + 0x30,0x2e,0x34,0x39,0x32,0x2d,0x30,0x2e,0x31,0x33, + 0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33, + 0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d, + 0x34,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63, + 0x2d,0x30,0x2e,0x31,0x34,0x37,0x2d,0x30,0x2e,0x32, + 0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30, + 0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x36, + 0x2d,0x30,0x2e,0x37,0x36,0x36,0x73,0x30,0x2e,0x33, + 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30, + 0x2e,0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x31, + 0x68,0x36,0x2e,0x30,0x31,0x32,0x63,0x30,0x2e,0x32, + 0x37,0x33,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x35, + 0x2c,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x36, + 0x35,0x37,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x33,0x2c,0x30, + 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c, + 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32, + 0x36,0x2c,0x30,0x2e,0x37,0x36,0x36,0x6c,0x2d,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, + 0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c,0x33,0x34, + 0x2e,0x34,0x39,0x36,0x2c,0x31,0x38,0x2e,0x37,0x38, + 0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x2c,0x31, 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, - 0x36,0x63,0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30, - 0x2d,0x30,0x2e,0x34,0x39,0x32,0x2d,0x30,0x2e,0x31, - 0x33,0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e, - 0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35, - 0x2d,0x34,0x2e,0x36,0x38,0x34,0x0d,0x0a,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2d,0x30, - 0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38, - 0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30, - 0x32,0x36,0x2d,0x30,0x2e,0x37,0x36,0x36,0x73,0x30, - 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31, - 0x2c,0x30,0x2e,0x36,0x35,0x37,0x2d,0x30,0x2e,0x33, - 0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x32,0x63,0x30, - 0x2e,0x32,0x37,0x33,0x2c,0x30,0x2c,0x30,0x2e,0x35, - 0x32,0x35,0x2c,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30, - 0x2e,0x36,0x35,0x37,0x2c,0x30,0x2e,0x33,0x39,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33, - 0x33,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31, - 0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30, - 0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36,0x36, - 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, - 0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x32,0x33, - 0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x2c,0x31,0x38, - 0x2e,0x37,0x38,0x36,0x2c,0x33,0x34,0x2e,0x36,0x32, - 0x36,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34, - 0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e, - 0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32, - 0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35, - 0x34,0x35,0x0d,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e, - 0x36,0x33,0x35,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48, - 0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67, - 0x3e,0x0d,0x0a + 0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37, + 0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x6c,0x31,0x2e, + 0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0a, + 0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x35,0x2d, + 0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x38, + 0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f, + 0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/help_dpad_updown_svg.cpp b/data/converted/help_dpad_updown_svg.cpp index 2853153483..f1612667d0 100644 --- a/data/converted/help_dpad_updown_svg.cpp +++ b/data/converted/help_dpad_updown_svg.cpp @@ -2,84 +2,83 @@ #include "../Resources.h" -const size_t help_dpad_updown_svg_size = 3290; -const unsigned char help_dpad_updown_svg_data[3290] = { +const size_t help_dpad_updown_svg_size = 3241; +const unsigned char help_dpad_updown_svg_data[3241] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x5f, - 0x78,0x33,0x30,0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0d, - 0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e,0x61,0x62, - 0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f, - 0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70, - 0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d, - 0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e, - 0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31,0x31, - 0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31,0x76, - 0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33,0x2e,0x31, - 0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31,0x2c,0x32, - 0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c,0x32,0x33, - 0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32,0x2e,0x30, - 0x38,0x35,0x0d,0x0a,0x09,0x09,0x09,0x09,0x76,0x2d, - 0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e,0x32, - 0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d,0x33, - 0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2d, - 0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33,0x33, - 0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31,0x2e, - 0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31,0x2c, - 0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31,0x34, - 0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e,0x31, - 0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36, - 0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32,0x0d, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, + 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, + 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, + 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, + 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, + 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, + 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, + 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, + 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, + 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, + 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, + 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, + 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, + 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, + 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, + 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, + 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, + 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, + 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, + 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, + 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, + 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, + 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, + 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, + 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, + 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, + 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, + 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, + 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, + 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, + 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, + 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, + 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, + 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, + 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, + 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, @@ -89,68 +88,67 @@ const unsigned char help_dpad_updown_svg_data[3290] = { 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e, - 0x32,0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39, - 0x2c,0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37, - 0x2e,0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, - 0x2c,0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35, - 0x34,0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33, - 0x2e,0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x33,0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c, - 0x31,0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31, - 0x31,0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, - 0x30,0x2e,0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33, - 0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e, - 0x30,0x30,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c, + 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, + 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, + 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, + 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, + 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, + 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, + 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, + 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, + 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, + 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, + 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, + 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, + 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, + 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, + 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, + 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, + 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, + 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, + 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, + 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, + 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, + 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2c,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x68,0x37,0x2e,0x31,0x30,0x38,0x0d,0x0a, - 0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x33,0x38,0x34, - 0x2d,0x30,0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e,0x36, - 0x32,0x34,0x2d,0x30,0x2e,0x31,0x34,0x33,0x2c,0x31, - 0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x56,0x32,0x33,0x2e,0x37,0x30,0x36,0x68,0x31,0x30, - 0x2e,0x32,0x33,0x31,0x63,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x30,0x30,0x36,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x2d,0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e, - 0x36,0x32,0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x30,0x30,0x36,0x2d,0x30, - 0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34,0x2d, - 0x31,0x2e,0x36,0x32,0x2d,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x68,0x2d,0x31,0x30,0x2e, - 0x32,0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x32, - 0x33,0x2e,0x37,0x30,0x31,0x2c,0x32,0x2e,0x37,0x34, - 0x35,0x2c,0x32,0x33,0x2e,0x35,0x36,0x37,0x2c,0x31, - 0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31, - 0x0d,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, - 0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36,0x2d, - 0x31,0x2e,0x36,0x31,0x39,0x2c,0x30,0x2e,0x31,0x34, - 0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36, - 0x32,0x31,0x76,0x31,0x30,0x2e,0x32,0x33,0x32,0x4c, - 0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33, - 0x35,0x34,0x4c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31, - 0x33,0x2e,0x33,0x35,0x34,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e, - 0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e,0x31, - 0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c, - 0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31,0x2e, - 0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d, - 0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36,0x33, - 0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e,0x36, - 0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32,0x2e, - 0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x35, - 0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x33,0x2e,0x36,0x35,0x0d,0x0a,0x09,0x09, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, + 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, + 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, + 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, + 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, + 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, + 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, + 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, + 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, + 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, + 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, + 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, + 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, + 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, + 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, + 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, + 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, + 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, + 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, + 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, + 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, + 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, + 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, + 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, + 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, @@ -162,56 +160,55 @@ const unsigned char help_dpad_updown_svg_data[3290] = { 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c, - 0x32,0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31, - 0x43,0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37, - 0x2e,0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31, - 0x37,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33, - 0x37,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x2f,0x67,0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d, + 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, + 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, + 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, + 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, + 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, + 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, + 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, + 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, + 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, + 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x2e,0x31,0x38,0x33,0x6c,0x2d,0x33,0x2e,0x30, + 0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x68,0x36, + 0x2e,0x30,0x31,0x32,0x4c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x33,0x2e,0x31,0x38,0x33,0x7a,0x22,0x2f,0x3e, 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33,0x6c, - 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, - 0x38,0x34,0x68,0x36,0x2e,0x30,0x31,0x32,0x4c,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x31,0x38,0x33, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x36,0x68,0x2d,0x36,0x2e,0x30, - 0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x33,0x2c, - 0x30,0x2d,0x30,0x2e,0x35,0x32,0x35,0x2d,0x30,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x37,0x2d,0x30, - 0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33,0x32, - 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, - 0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c,0x30, - 0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36,0x36, - 0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36, - 0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, - 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, - 0x2c,0x31,0x2e,0x32,0x36,0x34,0x2c,0x30,0x6c,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36, - 0x2c,0x30,0x2e,0x37,0x36,0x36,0x43,0x32,0x32,0x2e, - 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c, - 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, - 0x31,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x36,0x7a,0x0d,0x0a,0x09,0x09, - 0x09,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, - 0x37,0x2e,0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36, - 0x38,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e, - 0x35,0x37,0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37, - 0x2c,0x37,0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x09, - 0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, + 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, + 0x68,0x2d,0x36,0x2e,0x30,0x31,0x32,0x63,0x2d,0x30, + 0x2e,0x32,0x37,0x33,0x2c,0x30,0x2d,0x30,0x2e,0x35, + 0x32,0x35,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, + 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, + 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34, + 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, + 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36,0x2d, + 0x30,0x2e,0x37,0x36,0x36,0x6c,0x33,0x2e,0x30,0x30, + 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e, + 0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36,0x2d, + 0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36,0x34, + 0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34, + 0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34,0x37, + 0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x31, + 0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c,0x30, + 0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36,0x36, + 0x43,0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e, + 0x34,0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31,0x31, + 0x2c,0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31,0x2e, + 0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x7a, + 0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36,0x2e,0x38, + 0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x68,0x33, + 0x2e,0x32,0x36,0x38,0x4c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31,0x36,0x2e, + 0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a, + 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, 0x22,0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32, @@ -223,114 +220,114 @@ const unsigned char help_dpad_updown_svg_data[3290] = { 0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33, 0x38,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e, 0x33,0x37,0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d, - 0x30,0x2e,0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09, - 0x73,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39, - 0x33,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e, - 0x36,0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d, - 0x33,0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33, - 0x2d,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35, - 0x32,0x34,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30, - 0x2e,0x37,0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37, - 0x63,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33, - 0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, - 0x38,0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e, - 0x36,0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x0d,0x0a, - 0x09,0x09,0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37, - 0x34,0x2d,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e, - 0x35,0x32,0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2e,0x36,0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36, - 0x2c,0x32,0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e, - 0x39,0x33,0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x2c,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e, - 0x32,0x38,0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31, - 0x34,0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e, - 0x35,0x34,0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76, - 0x2d,0x33,0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35, - 0x31,0x34,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x31,0x39,0x35, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d,0x30, - 0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32, - 0x34,0x36,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e, - 0x33,0x35,0x38,0x2d,0x30,0x2e,0x30,0x39,0x32,0x63, - 0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31, - 0x33,0x32,0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30, - 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x32, - 0x2d,0x30,0x2e,0x36,0x35,0x38,0x76,0x2d,0x36,0x2e, - 0x30,0x31,0x0d,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d, - 0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34, - 0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e, - 0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63, - 0x30,0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33, - 0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e, - 0x31,0x32,0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c, - 0x30,0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38, - 0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e, - 0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c, - 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, - 0x36,0x33,0x31,0x0d,0x0a,0x09,0x09,0x09,0x73,0x2d, - 0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33, - 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36, - 0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2c, - 0x33,0x2e,0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x34, - 0x37,0x38,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x2c, - 0x32,0x39,0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e, - 0x32,0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39,0x35, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d, - 0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e, - 0x38,0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36,0x6c, - 0x32,0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36,0x33, - 0x33,0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32,0x39,0x2e, - 0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0d,0x0a,0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x2c,0x33,0x33,0x2e,0x38,0x37,0x36,0x6c,0x33, - 0x2e,0x30,0x30,0x37,0x2d,0x34,0x2e,0x36,0x38,0x34, - 0x68,0x2d,0x36,0x2e,0x30,0x31,0x32,0x4c,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x33,0x2e,0x38,0x37,0x36, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, - 0x34,0x2e,0x36,0x32,0x36,0x4c,0x31,0x38,0x2e,0x35, - 0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x63,0x2d, - 0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e, - 0x34,0x39,0x32,0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30, - 0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34,0x35, - 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e, - 0x36,0x38,0x34,0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d, - 0x30,0x2e,0x31,0x34,0x37,0x2d,0x30,0x2e,0x32,0x33, - 0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e, - 0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x36,0x2d, - 0x30,0x2e,0x37,0x36,0x36,0x73,0x30,0x2e,0x33,0x38, - 0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e, - 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68, - 0x36,0x2e,0x30,0x31,0x32,0x63,0x30,0x2e,0x32,0x37, - 0x33,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x35,0x2c, - 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x36,0x35, - 0x37,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x33,0x2c,0x30, - 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c, - 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32, - 0x36,0x2c,0x30,0x2e,0x37,0x36,0x36,0x6c,0x2d,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c,0x33,0x34, - 0x2e,0x34,0x39,0x36,0x2c,0x31,0x38,0x2e,0x37,0x38, - 0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, - 0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37, - 0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x6c,0x31,0x2e, - 0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0d, - 0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x35, - 0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e, - 0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73, + 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33, + 0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, + 0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33, + 0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d, + 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32, + 0x34,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e, + 0x37,0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63, + 0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31, + 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38, + 0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, + 0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d, + 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32, + 0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, + 0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32, + 0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33, + 0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37, + 0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38, + 0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c, + 0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34, + 0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33, + 0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34, + 0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e, + 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67, + 0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32, + 0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c, + 0x30,0x2d,0x30,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e, + 0x30,0x33,0x2d,0x30,0x2e,0x33,0x35,0x38,0x2d,0x30, + 0x2e,0x30,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34, + 0x31,0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, + 0x33,0x39,0x32,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d, + 0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35, + 0x38,0x76,0x2d,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09, + 0x09,0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, + 0x30,0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32, + 0x36,0x2c,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e, + 0x36,0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d, + 0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33, + 0x33,0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e, + 0x37,0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c, + 0x34,0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30, + 0x35,0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e, + 0x31,0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c, + 0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34, + 0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09, + 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, + 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, + 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, + 0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, + 0x39,0x2e,0x34,0x37,0x38,0x2c,0x32,0x32,0x2e,0x32, + 0x34,0x34,0x2c,0x32,0x39,0x2e,0x33,0x33,0x36,0x2c, + 0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x32,0x39,0x2e, + 0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, + 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c, + 0x31,0x36,0x2e,0x38,0x39,0x36,0x76,0x33,0x2e,0x32, + 0x36,0x36,0x6c,0x32,0x2e,0x35,0x34,0x36,0x2d,0x31, + 0x2e,0x36,0x33,0x33,0x0a,0x09,0x09,0x09,0x4c,0x32, + 0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38, + 0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x33,0x33,0x2e,0x38,0x37,0x36,0x6c,0x33,0x2e, + 0x30,0x30,0x37,0x2d,0x34,0x2e,0x36,0x38,0x34,0x68, + 0x2d,0x36,0x2e,0x30,0x31,0x32,0x4c,0x31,0x38,0x2e, + 0x35,0x33,0x2c,0x33,0x33,0x2e,0x38,0x37,0x36,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, + 0x36,0x32,0x36,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c, + 0x33,0x34,0x2e,0x36,0x32,0x36,0x63,0x2d,0x30,0x2e, + 0x32,0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39, + 0x32,0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36, + 0x33,0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d, + 0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38, + 0x34,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31, + 0x34,0x37,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30, + 0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34, + 0x2d,0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37, + 0x36,0x36,0x73,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30, + 0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35,0x37, + 0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e,0x30, + 0x31,0x32,0x63,0x30,0x2e,0x32,0x37,0x33,0x2c,0x30, + 0x2c,0x30,0x2e,0x35,0x32,0x35,0x2c,0x30,0x2e,0x31, + 0x34,0x38,0x2c,0x30,0x2e,0x36,0x35,0x37,0x2c,0x30, + 0x2e,0x33,0x39,0x31,0x0a,0x09,0x09,0x09,0x63,0x30, + 0x2e,0x31,0x33,0x33,0x2c,0x30,0x2e,0x32,0x34,0x2c, + 0x30,0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e,0x35,0x33, + 0x33,0x2d,0x30,0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e, + 0x37,0x36,0x36,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35, + 0x2c,0x34,0x2e,0x36,0x38,0x34,0x43,0x31,0x39,0x2e, + 0x30,0x32,0x33,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36, + 0x2c,0x31,0x38,0x2e,0x37,0x38,0x36,0x2c,0x33,0x34, + 0x2e,0x36,0x32,0x36,0x2c,0x31,0x38,0x2e,0x35,0x33, + 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d, + 0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e, + 0x39,0x34,0x32,0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c, + 0x32,0x2e,0x35,0x34,0x35,0x0a,0x09,0x09,0x09,0x6c, + 0x31,0x2e,0x36,0x33,0x35,0x2d,0x32,0x2e,0x35,0x34, + 0x35,0x48,0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22, + 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, + 0x0a }; + diff --git a/data/converted/off_svg.cpp b/data/converted/off_svg.cpp index 91198cf7b6..f89baaee74 100644 --- a/data/converted/off_svg.cpp +++ b/data/converted/off_svg.cpp @@ -2,116 +2,115 @@ #include "../Resources.h" -const size_t off_svg_size = 1338; -const unsigned char off_svg_data[1338] = { +const size_t off_svg_size = 1325; +const unsigned char off_svg_data[1325] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x34,0x33,0x2e,0x39,0x31,0x36,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x31,0x2e,0x39,0x35,0x39,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x34,0x33,0x2e,0x39,0x31,0x36,0x20, - 0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x34,0x33,0x2e,0x39,0x31, - 0x36,0x20,0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39, - 0x2e,0x32,0x39,0x31,0x2c,0x31,0x35,0x2e,0x36,0x39, - 0x68,0x31,0x2e,0x39,0x33,0x34,0x76,0x2d,0x34,0x2e, - 0x31,0x31,0x33,0x68,0x35,0x2e,0x34,0x32,0x76,0x2d, - 0x31,0x2e,0x34,0x37,0x39,0x68,0x2d,0x35,0x2e,0x34, - 0x32,0x56,0x37,0x2e,0x37,0x30,0x34,0x68,0x35,0x2e, - 0x37,0x32,0x39,0x56,0x36,0x2e,0x32,0x32,0x35,0x68, - 0x2d,0x37,0x2e,0x36,0x36,0x32,0x56,0x31,0x35,0x2e, - 0x36,0x39,0x7a,0x20,0x4d,0x31,0x39,0x2e,0x38,0x31, - 0x2c,0x31,0x35,0x2e,0x36,0x39,0x68,0x31,0x2e,0x39, - 0x33,0x36,0x76,0x2d,0x34,0x2e,0x31,0x31,0x33,0x0d, - 0x0a,0x09,0x68,0x35,0x2e,0x34,0x31,0x36,0x76,0x2d, - 0x31,0x2e,0x34,0x37,0x39,0x68,0x2d,0x35,0x2e,0x34, - 0x31,0x36,0x56,0x37,0x2e,0x37,0x30,0x34,0x68,0x35, - 0x2e,0x37,0x32,0x35,0x56,0x36,0x2e,0x32,0x32,0x35, - 0x68,0x2d,0x37,0x2e,0x36,0x36,0x56,0x31,0x35,0x2e, - 0x36,0x39,0x7a,0x20,0x4d,0x31,0x32,0x2e,0x33,0x37, - 0x38,0x2c,0x31,0x34,0x2e,0x34,0x37,0x33,0x63,0x2d, - 0x32,0x2e,0x31,0x36,0x36,0x2c,0x30,0x2d,0x33,0x2e, - 0x34,0x30,0x34,0x2d,0x31,0x2e,0x34,0x33,0x35,0x2d, - 0x33,0x2e,0x34,0x30,0x34,0x2d,0x33,0x2e,0x35,0x31, - 0x37,0x0d,0x0a,0x09,0x63,0x30,0x2d,0x32,0x2e,0x30, - 0x38,0x33,0x2c,0x31,0x2e,0x32,0x33,0x38,0x2d,0x33, - 0x2e,0x35,0x31,0x38,0x2c,0x33,0x2e,0x34,0x30,0x34, - 0x2d,0x33,0x2e,0x35,0x31,0x38,0x63,0x32,0x2e,0x31, - 0x36,0x37,0x2c,0x30,0x2c,0x33,0x2e,0x34,0x30,0x36, - 0x2c,0x31,0x2e,0x34,0x33,0x35,0x2c,0x33,0x2e,0x34, - 0x30,0x36,0x2c,0x33,0x2e,0x35,0x31,0x38,0x43,0x31, - 0x35,0x2e,0x37,0x38,0x34,0x2c,0x31,0x33,0x2e,0x30, - 0x33,0x38,0x2c,0x31,0x34,0x2e,0x35,0x34,0x35,0x2c, - 0x31,0x34,0x2e,0x34,0x37,0x33,0x2c,0x31,0x32,0x2e, - 0x33,0x37,0x38,0x2c,0x31,0x34,0x2e,0x34,0x37,0x33, - 0x20,0x4d,0x31,0x32,0x2e,0x33,0x37,0x38,0x2c,0x31, - 0x35,0x2e,0x39,0x35,0x36,0x0d,0x0a,0x09,0x63,0x33, - 0x2e,0x38,0x39,0x36,0x2c,0x30,0x2c,0x35,0x2e,0x34, - 0x31,0x39,0x2d,0x32,0x2e,0x33,0x33,0x35,0x2c,0x35, - 0x2e,0x34,0x31,0x39,0x2d,0x35,0x73,0x2d,0x31,0x2e, - 0x35,0x32,0x32,0x2d,0x34,0x2e,0x39,0x39,0x37,0x2d, - 0x35,0x2e,0x34,0x31,0x39,0x2d,0x34,0x2e,0x39,0x39, - 0x37,0x63,0x2d,0x33,0x2e,0x38,0x39,0x36,0x2c,0x30, - 0x2d,0x35,0x2e,0x34,0x31,0x36,0x2c,0x32,0x2e,0x33, - 0x33,0x32,0x2d,0x35,0x2e,0x34,0x31,0x36,0x2c,0x34, - 0x2e,0x39,0x39,0x37,0x53,0x38,0x2e,0x34,0x38,0x32, - 0x2c,0x31,0x35,0x2e,0x39,0x35,0x36,0x2c,0x31,0x32, - 0x2e,0x33,0x37,0x38,0x2c,0x31,0x35,0x2e,0x39,0x35, - 0x36,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, - 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x33,0x39,0x2e,0x36,0x36,0x34,0x2c,0x31,0x2e, - 0x35,0x63,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30,0x2c, - 0x32,0x2e,0x37,0x35,0x32,0x2c,0x31,0x2e,0x32,0x33, - 0x34,0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32,0x2e, - 0x37,0x35,0x32,0x76,0x31,0x33,0x2e,0x34,0x35,0x35, - 0x63,0x30,0x2c,0x31,0x2e,0x35,0x31,0x38,0x2d,0x31, - 0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e,0x37,0x35,0x32, - 0x2d,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32,0x2e,0x37, - 0x35,0x32,0x48,0x34,0x2e,0x32,0x35,0x32,0x0d,0x0a, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x34,0x33, + 0x2e,0x39,0x31,0x36,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, + 0x35,0x39,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x34, + 0x33,0x2e,0x39,0x31,0x36,0x20,0x32,0x31,0x2e,0x39, + 0x35,0x39,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x34,0x33,0x2e,0x39,0x31,0x36,0x20,0x32,0x31, + 0x2e,0x39,0x35,0x39,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x32,0x39,0x2e,0x32,0x39,0x31,0x2c, + 0x31,0x35,0x2e,0x36,0x39,0x68,0x31,0x2e,0x39,0x33, + 0x34,0x76,0x2d,0x34,0x2e,0x31,0x31,0x33,0x68,0x35, + 0x2e,0x34,0x32,0x76,0x2d,0x31,0x2e,0x34,0x37,0x39, + 0x68,0x2d,0x35,0x2e,0x34,0x32,0x56,0x37,0x2e,0x37, + 0x30,0x34,0x68,0x35,0x2e,0x37,0x32,0x39,0x56,0x36, + 0x2e,0x32,0x32,0x35,0x68,0x2d,0x37,0x2e,0x36,0x36, + 0x32,0x56,0x31,0x35,0x2e,0x36,0x39,0x7a,0x20,0x4d, + 0x31,0x39,0x2e,0x38,0x31,0x2c,0x31,0x35,0x2e,0x36, + 0x39,0x68,0x31,0x2e,0x39,0x33,0x36,0x76,0x2d,0x34, + 0x2e,0x31,0x31,0x33,0x0a,0x09,0x68,0x35,0x2e,0x34, + 0x31,0x36,0x76,0x2d,0x31,0x2e,0x34,0x37,0x39,0x68, + 0x2d,0x35,0x2e,0x34,0x31,0x36,0x56,0x37,0x2e,0x37, + 0x30,0x34,0x68,0x35,0x2e,0x37,0x32,0x35,0x56,0x36, + 0x2e,0x32,0x32,0x35,0x68,0x2d,0x37,0x2e,0x36,0x36, + 0x56,0x31,0x35,0x2e,0x36,0x39,0x7a,0x20,0x4d,0x31, + 0x32,0x2e,0x33,0x37,0x38,0x2c,0x31,0x34,0x2e,0x34, + 0x37,0x33,0x63,0x2d,0x32,0x2e,0x31,0x36,0x36,0x2c, + 0x30,0x2d,0x33,0x2e,0x34,0x30,0x34,0x2d,0x31,0x2e, + 0x34,0x33,0x35,0x2d,0x33,0x2e,0x34,0x30,0x34,0x2d, + 0x33,0x2e,0x35,0x31,0x37,0x0a,0x09,0x63,0x30,0x2d, + 0x32,0x2e,0x30,0x38,0x33,0x2c,0x31,0x2e,0x32,0x33, + 0x38,0x2d,0x33,0x2e,0x35,0x31,0x38,0x2c,0x33,0x2e, + 0x34,0x30,0x34,0x2d,0x33,0x2e,0x35,0x31,0x38,0x63, + 0x32,0x2e,0x31,0x36,0x37,0x2c,0x30,0x2c,0x33,0x2e, + 0x34,0x30,0x36,0x2c,0x31,0x2e,0x34,0x33,0x35,0x2c, + 0x33,0x2e,0x34,0x30,0x36,0x2c,0x33,0x2e,0x35,0x31, + 0x38,0x43,0x31,0x35,0x2e,0x37,0x38,0x34,0x2c,0x31, + 0x33,0x2e,0x30,0x33,0x38,0x2c,0x31,0x34,0x2e,0x35, + 0x34,0x35,0x2c,0x31,0x34,0x2e,0x34,0x37,0x33,0x2c, + 0x31,0x32,0x2e,0x33,0x37,0x38,0x2c,0x31,0x34,0x2e, + 0x34,0x37,0x33,0x20,0x4d,0x31,0x32,0x2e,0x33,0x37, + 0x38,0x2c,0x31,0x35,0x2e,0x39,0x35,0x36,0x0a,0x09, + 0x63,0x33,0x2e,0x38,0x39,0x36,0x2c,0x30,0x2c,0x35, + 0x2e,0x34,0x31,0x39,0x2d,0x32,0x2e,0x33,0x33,0x35, + 0x2c,0x35,0x2e,0x34,0x31,0x39,0x2d,0x35,0x73,0x2d, + 0x31,0x2e,0x35,0x32,0x32,0x2d,0x34,0x2e,0x39,0x39, + 0x37,0x2d,0x35,0x2e,0x34,0x31,0x39,0x2d,0x34,0x2e, + 0x39,0x39,0x37,0x63,0x2d,0x33,0x2e,0x38,0x39,0x36, + 0x2c,0x30,0x2d,0x35,0x2e,0x34,0x31,0x36,0x2c,0x32, + 0x2e,0x33,0x33,0x32,0x2d,0x35,0x2e,0x34,0x31,0x36, + 0x2c,0x34,0x2e,0x39,0x39,0x37,0x53,0x38,0x2e,0x34, + 0x38,0x32,0x2c,0x31,0x35,0x2e,0x39,0x35,0x36,0x2c, + 0x31,0x32,0x2e,0x33,0x37,0x38,0x2c,0x31,0x35,0x2e, + 0x39,0x35,0x36,0x22,0x2f,0x3e,0x0a,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x33,0x39,0x2e,0x36,0x36,0x34,0x2c,0x31, + 0x2e,0x35,0x63,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, + 0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x31,0x2e,0x32, + 0x33,0x34,0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32, + 0x2e,0x37,0x35,0x32,0x76,0x31,0x33,0x2e,0x34,0x35, + 0x35,0x63,0x30,0x2c,0x31,0x2e,0x35,0x31,0x38,0x2d, + 0x31,0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e,0x37,0x35, + 0x32,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32,0x2e, + 0x37,0x35,0x32,0x48,0x34,0x2e,0x32,0x35,0x32,0x0a, 0x09,0x63,0x2d,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, 0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x31,0x2e,0x32, 0x33,0x34,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x32, @@ -124,18 +123,19 @@ const unsigned char off_svg_data[1338] = { 0x32,0x35,0x32,0x43,0x31,0x2e,0x39,0x31,0x34,0x2c, 0x30,0x2c,0x30,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c, 0x30,0x2c,0x34,0x2e,0x32,0x35,0x32,0x76,0x31,0x33, - 0x2e,0x34,0x35,0x35,0x0d,0x0a,0x09,0x63,0x30,0x2c, - 0x32,0x2e,0x33,0x33,0x39,0x2c,0x31,0x2e,0x39,0x31, - 0x34,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e, - 0x32,0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32,0x68, - 0x33,0x35,0x2e,0x34,0x31,0x32,0x63,0x32,0x2e,0x33, - 0x33,0x39,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35,0x32, - 0x2d,0x31,0x2e,0x39,0x31,0x33,0x2c,0x34,0x2e,0x32, - 0x35,0x32,0x2d,0x34,0x2e,0x32,0x35,0x32,0x56,0x34, - 0x2e,0x32,0x35,0x32,0x43,0x34,0x33,0x2e,0x39,0x31, - 0x36,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x32, - 0x2e,0x30,0x30,0x33,0x2c,0x30,0x2c,0x33,0x39,0x2e, - 0x36,0x36,0x34,0x2c,0x30,0x4c,0x33,0x39,0x2e,0x36, - 0x36,0x34,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x2e,0x34,0x35,0x35,0x0a,0x09,0x63,0x30,0x2c,0x32, + 0x2e,0x33,0x33,0x39,0x2c,0x31,0x2e,0x39,0x31,0x34, + 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e,0x32, + 0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32,0x68,0x33, + 0x35,0x2e,0x34,0x31,0x32,0x63,0x32,0x2e,0x33,0x33, + 0x39,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d, + 0x31,0x2e,0x39,0x31,0x33,0x2c,0x34,0x2e,0x32,0x35, + 0x32,0x2d,0x34,0x2e,0x32,0x35,0x32,0x56,0x34,0x2e, + 0x32,0x35,0x32,0x43,0x34,0x33,0x2e,0x39,0x31,0x36, + 0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x32,0x2e, + 0x30,0x30,0x33,0x2c,0x30,0x2c,0x33,0x39,0x2e,0x36, + 0x36,0x34,0x2c,0x30,0x4c,0x33,0x39,0x2e,0x36,0x36, + 0x34,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f, + 0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/on_svg.cpp b/data/converted/on_svg.cpp index 7e3143077e..afd33eee67 100644 --- a/data/converted/on_svg.cpp +++ b/data/converted/on_svg.cpp @@ -2,99 +2,98 @@ #include "../Resources.h" -const size_t on_svg_size = 1146; -const unsigned char on_svg_data[1146] = { +const size_t on_svg_size = 1132; +const unsigned char on_svg_data[1132] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x34,0x33,0x2e,0x39,0x31,0x36,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x31,0x2e,0x39,0x35,0x39,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x34,0x33,0x2e,0x39,0x31,0x36,0x20, - 0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x34,0x33,0x2e,0x39,0x31, - 0x36,0x20,0x32,0x31,0x2e,0x39,0x35,0x39,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x31,0x35,0x2e,0x37,0x35,0x34, - 0x2c,0x37,0x2e,0x34,0x36,0x31,0x63,0x2d,0x32,0x2e, - 0x33,0x31,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34, - 0x33,0x2c,0x31,0x2e,0x34,0x33,0x34,0x2d,0x33,0x2e, - 0x36,0x34,0x33,0x2c,0x33,0x2e,0x35,0x31,0x38,0x63, - 0x30,0x2c,0x32,0x2e,0x30,0x38,0x33,0x2c,0x31,0x2e, - 0x33,0x32,0x35,0x2c,0x33,0x2e,0x35,0x32,0x31,0x2c, - 0x33,0x2e,0x36,0x34,0x33,0x2c,0x33,0x2e,0x35,0x32, - 0x31,0x0d,0x0a,0x09,0x09,0x63,0x32,0x2e,0x33,0x32, - 0x2c,0x30,0x2c,0x33,0x2e,0x36,0x34,0x34,0x2d,0x31, - 0x2e,0x34,0x33,0x37,0x2c,0x33,0x2e,0x36,0x34,0x35, - 0x2d,0x33,0x2e,0x35,0x32,0x31,0x43,0x31,0x39,0x2e, - 0x33,0x39,0x39,0x2c,0x38,0x2e,0x38,0x39,0x35,0x2c, - 0x31,0x38,0x2e,0x30,0x37,0x34,0x2c,0x37,0x2e,0x34, - 0x36,0x31,0x2c,0x31,0x35,0x2e,0x37,0x35,0x34,0x2c, - 0x37,0x2e,0x34,0x36,0x31,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37,0x37, - 0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x39,0x2e, - 0x36,0x36,0x34,0x2c,0x30,0x48,0x34,0x2e,0x32,0x35, - 0x32,0x43,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, - 0x30,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, - 0x34,0x2e,0x32,0x35,0x32,0x76,0x31,0x33,0x2e,0x34, - 0x35,0x35,0x63,0x30,0x2c,0x32,0x2e,0x33,0x33,0x39, - 0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x2e,0x32, - 0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x34, - 0x2e,0x32,0x35,0x32,0x68,0x33,0x35,0x2e,0x34,0x31, - 0x32,0x0d,0x0a,0x09,0x09,0x63,0x32,0x2e,0x33,0x33, - 0x39,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d, - 0x31,0x2e,0x39,0x31,0x33,0x2c,0x34,0x2e,0x32,0x35, - 0x32,0x2d,0x34,0x2e,0x32,0x35,0x32,0x56,0x34,0x2e, - 0x32,0x35,0x32,0x43,0x34,0x33,0x2e,0x39,0x31,0x36, - 0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x32,0x2e, - 0x30,0x30,0x33,0x2c,0x30,0x2c,0x33,0x39,0x2e,0x36, - 0x36,0x34,0x2c,0x30,0x7a,0x20,0x4d,0x31,0x35,0x2e, - 0x37,0x35,0x34,0x2c,0x31,0x35,0x2e,0x39,0x37,0x39, - 0x63,0x2d,0x34,0x2e,0x31,0x36,0x38,0x2c,0x30,0x2d, - 0x35,0x2e,0x37,0x39,0x36,0x2d,0x32,0x2e,0x33,0x33, - 0x34,0x2d,0x35,0x2e,0x37,0x39,0x36,0x2d,0x35,0x0d, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x34,0x33, + 0x2e,0x39,0x31,0x36,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, + 0x35,0x39,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x34, + 0x33,0x2e,0x39,0x31,0x36,0x20,0x32,0x31,0x2e,0x39, + 0x35,0x39,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x34,0x33,0x2e,0x39,0x31,0x36,0x20,0x32,0x31, + 0x2e,0x39,0x35,0x39,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x35, + 0x2e,0x37,0x35,0x34,0x2c,0x37,0x2e,0x34,0x36,0x31, + 0x63,0x2d,0x32,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2d, + 0x33,0x2e,0x36,0x34,0x33,0x2c,0x31,0x2e,0x34,0x33, + 0x34,0x2d,0x33,0x2e,0x36,0x34,0x33,0x2c,0x33,0x2e, + 0x35,0x31,0x38,0x63,0x30,0x2c,0x32,0x2e,0x30,0x38, + 0x33,0x2c,0x31,0x2e,0x33,0x32,0x35,0x2c,0x33,0x2e, + 0x35,0x32,0x31,0x2c,0x33,0x2e,0x36,0x34,0x33,0x2c, + 0x33,0x2e,0x35,0x32,0x31,0x0a,0x09,0x09,0x63,0x32, + 0x2e,0x33,0x32,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x34, + 0x34,0x2d,0x31,0x2e,0x34,0x33,0x37,0x2c,0x33,0x2e, + 0x36,0x34,0x35,0x2d,0x33,0x2e,0x35,0x32,0x31,0x43, + 0x31,0x39,0x2e,0x33,0x39,0x39,0x2c,0x38,0x2e,0x38, + 0x39,0x35,0x2c,0x31,0x38,0x2e,0x30,0x37,0x34,0x2c, + 0x37,0x2e,0x34,0x36,0x31,0x2c,0x31,0x35,0x2e,0x37, + 0x35,0x34,0x2c,0x37,0x2e,0x34,0x36,0x31,0x7a,0x22, + 0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, + 0x39,0x2e,0x36,0x36,0x34,0x2c,0x30,0x48,0x34,0x2e, + 0x32,0x35,0x32,0x43,0x31,0x2e,0x39,0x31,0x34,0x2c, + 0x30,0x2c,0x30,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c, + 0x30,0x2c,0x34,0x2e,0x32,0x35,0x32,0x76,0x31,0x33, + 0x2e,0x34,0x35,0x35,0x63,0x30,0x2c,0x32,0x2e,0x33, + 0x33,0x39,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34, + 0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32, + 0x2c,0x34,0x2e,0x32,0x35,0x32,0x68,0x33,0x35,0x2e, + 0x34,0x31,0x32,0x0a,0x09,0x09,0x63,0x32,0x2e,0x33, + 0x33,0x39,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35,0x32, + 0x2d,0x31,0x2e,0x39,0x31,0x33,0x2c,0x34,0x2e,0x32, + 0x35,0x32,0x2d,0x34,0x2e,0x32,0x35,0x32,0x56,0x34, + 0x2e,0x32,0x35,0x32,0x43,0x34,0x33,0x2e,0x39,0x31, + 0x36,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x32, + 0x2e,0x30,0x30,0x33,0x2c,0x30,0x2c,0x33,0x39,0x2e, + 0x36,0x36,0x34,0x2c,0x30,0x7a,0x20,0x4d,0x31,0x35, + 0x2e,0x37,0x35,0x34,0x2c,0x31,0x35,0x2e,0x39,0x37, + 0x39,0x63,0x2d,0x34,0x2e,0x31,0x36,0x38,0x2c,0x30, + 0x2d,0x35,0x2e,0x37,0x39,0x36,0x2d,0x32,0x2e,0x33, + 0x33,0x34,0x2d,0x35,0x2e,0x37,0x39,0x36,0x2d,0x35, 0x0a,0x09,0x09,0x63,0x30,0x2d,0x32,0x2e,0x36,0x36, 0x39,0x2c,0x31,0x2e,0x36,0x32,0x38,0x2d,0x35,0x2e, 0x30,0x30,0x31,0x2c,0x35,0x2e,0x37,0x39,0x36,0x2d, @@ -107,16 +106,17 @@ const unsigned char on_svg_data[1146] = { 0x2e,0x39,0x37,0x39,0x2c,0x31,0x35,0x2e,0x37,0x35, 0x34,0x2c,0x31,0x35,0x2e,0x39,0x37,0x39,0x7a,0x20, 0x4d,0x33,0x33,0x2e,0x39,0x35,0x37,0x2c,0x31,0x35, - 0x2e,0x37,0x31,0x35,0x0d,0x0a,0x09,0x09,0x68,0x2d, - 0x32,0x2e,0x33,0x33,0x32,0x4c,0x32,0x35,0x2e,0x37, - 0x32,0x2c,0x38,0x2e,0x36,0x30,0x32,0x68,0x2d,0x30, - 0x2e,0x30,0x32,0x37,0x76,0x37,0x2e,0x31,0x31,0x33, - 0x68,0x2d,0x31,0x2e,0x39,0x38,0x38,0x56,0x36,0x2e, - 0x32,0x34,0x34,0x68,0x32,0x2e,0x33,0x37,0x33,0x6c, - 0x35,0x2e,0x38,0x36,0x35,0x2c,0x37,0x2e,0x31,0x31, - 0x34,0x68,0x30,0x2e,0x30,0x32,0x37,0x56,0x36,0x2e, - 0x32,0x34,0x34,0x68,0x31,0x2e,0x39,0x38,0x37,0x56, - 0x31,0x35,0x2e,0x37,0x31,0x35,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f, - 0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x2e,0x37,0x31,0x35,0x0a,0x09,0x09,0x68,0x2d,0x32, + 0x2e,0x33,0x33,0x32,0x4c,0x32,0x35,0x2e,0x37,0x32, + 0x2c,0x38,0x2e,0x36,0x30,0x32,0x68,0x2d,0x30,0x2e, + 0x30,0x32,0x37,0x76,0x37,0x2e,0x31,0x31,0x33,0x68, + 0x2d,0x31,0x2e,0x39,0x38,0x38,0x56,0x36,0x2e,0x32, + 0x34,0x34,0x68,0x32,0x2e,0x33,0x37,0x33,0x6c,0x35, + 0x2e,0x38,0x36,0x35,0x2c,0x37,0x2e,0x31,0x31,0x34, + 0x68,0x30,0x2e,0x30,0x32,0x37,0x56,0x36,0x2e,0x32, + 0x34,0x34,0x68,0x31,0x2e,0x39,0x38,0x37,0x56,0x31, + 0x35,0x2e,0x37,0x31,0x35,0x7a,0x22,0x2f,0x3e,0x0a, + 0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67, + 0x3e,0x0a }; + diff --git a/data/converted/opensans_hebrew_condensed_light_ttf.cpp b/data/converted/opensans_hebrew_condensed_light_ttf.cpp index a9a553c350..c40c808a8b 100644 --- a/data/converted/opensans_hebrew_condensed_light_ttf.cpp +++ b/data/converted/opensans_hebrew_condensed_light_ttf.cpp @@ -3292,3 +3292,4 @@ const unsigned char opensans_hebrew_condensed_light_ttf_data[32868] = { 0x62,0x72,0x00,0x08,0x00,0x04,0x00,0x00,0x00,0x00, 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00 }; + diff --git a/data/converted/opensans_hebrew_condensed_regular_ttf.cpp b/data/converted/opensans_hebrew_condensed_regular_ttf.cpp index 0fa9cd5696..5c79a51087 100644 --- a/data/converted/opensans_hebrew_condensed_regular_ttf.cpp +++ b/data/converted/opensans_hebrew_condensed_regular_ttf.cpp @@ -3242,3 +3242,4 @@ const unsigned char opensans_hebrew_condensed_regular_ttf_data[32364] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x00 }; + diff --git a/data/converted/option_arrow_svg.cpp b/data/converted/option_arrow_svg.cpp index c07891afdc..caaaad54ac 100644 --- a/data/converted/option_arrow_svg.cpp +++ b/data/converted/option_arrow_svg.cpp @@ -2,91 +2,91 @@ #include "../Resources.h" -const size_t option_arrow_svg_size = 850; -const unsigned char option_arrow_svg_data[850] = { +const size_t option_arrow_svg_size = 839; +const unsigned char option_arrow_svg_data[839] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x31,0x32,0x2e,0x31,0x35,0x38,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x31,0x2e,0x39,0x31,0x33,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x31,0x32,0x2e,0x31,0x35,0x38,0x20, - 0x32,0x31,0x2e,0x39,0x31,0x33,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x31,0x32,0x2e,0x31,0x35, - 0x38,0x20,0x32,0x31,0x2e,0x39,0x31,0x33,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x30,0x2e,0x37,0x35,0x2c,0x32, - 0x31,0x2e,0x39,0x31,0x33,0x63,0x2d,0x30,0x2e,0x31, - 0x2c,0x30,0x2d,0x30,0x2e,0x32,0x2d,0x30,0x2e,0x30, - 0x32,0x2d,0x30,0x2e,0x32,0x39,0x34,0x2d,0x30,0x2e, - 0x30,0x36,0x31,0x43,0x30,0x2e,0x31,0x37,0x39,0x2c, - 0x32,0x31,0x2e,0x37,0x33,0x35,0x2c,0x30,0x2c,0x32, - 0x31,0x2e,0x34,0x36,0x33,0x2c,0x30,0x2c,0x32,0x31, - 0x2e,0x31,0x36,0x33,0x56,0x30,0x2e,0x37,0x35,0x0d, - 0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x2c, - 0x30,0x2e,0x31,0x37,0x39,0x2d,0x30,0x2e,0x35,0x37, - 0x32,0x2c,0x30,0x2e,0x34,0x35,0x36,0x2d,0x30,0x2e, - 0x36,0x39,0x43,0x30,0x2e,0x37,0x33,0x2d,0x30,0x2e, - 0x30,0x35,0x37,0x2c,0x31,0x2e,0x30,0x35,0x32,0x2c, - 0x30,0x2c,0x31,0x2e,0x32,0x36,0x39,0x2c,0x30,0x2e, - 0x32,0x30,0x38,0x6c,0x31,0x30,0x2e,0x36,0x35,0x38, - 0x2c,0x31,0x30,0x2e,0x32,0x30,0x36,0x63,0x30,0x2e, - 0x31,0x34,0x37,0x2c,0x30,0x2e,0x31,0x34,0x31,0x2c, - 0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x33,0x33, - 0x37,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e, - 0x35,0x34,0x32,0x0d,0x0a,0x09,0x09,0x73,0x2d,0x30, - 0x2e,0x30,0x38,0x34,0x2c,0x30,0x2e,0x34,0x2d,0x30, - 0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x35,0x34,0x32, - 0x4c,0x31,0x2e,0x32,0x36,0x39,0x2c,0x32,0x31,0x2e, - 0x37,0x30,0x35,0x43,0x31,0x2e,0x31,0x32,0x36,0x2c, - 0x32,0x31,0x2e,0x38,0x34,0x2c,0x30,0x2e,0x39,0x33, - 0x39,0x2c,0x32,0x31,0x2e,0x39,0x31,0x33,0x2c,0x30, - 0x2e,0x37,0x35,0x2c,0x32,0x31,0x2e,0x39,0x31,0x33, - 0x7a,0x20,0x4d,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x35, - 0x30,0x36,0x76,0x31,0x36,0x2e,0x38,0x39,0x39,0x6c, - 0x38,0x2e,0x38,0x32,0x34,0x2d,0x38,0x2e,0x34,0x35, - 0x4c,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x35,0x30,0x36, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x67,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32, + 0x2e,0x31,0x35,0x38,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, + 0x31,0x33,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x31, + 0x32,0x2e,0x31,0x35,0x38,0x20,0x32,0x31,0x2e,0x39, + 0x31,0x33,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x31,0x32,0x2e,0x31,0x35,0x38,0x20,0x32,0x31, + 0x2e,0x39,0x31,0x33,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, + 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x30,0x2e, + 0x37,0x35,0x2c,0x32,0x31,0x2e,0x39,0x31,0x33,0x63, + 0x2d,0x30,0x2e,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32, + 0x2d,0x30,0x2e,0x30,0x32,0x2d,0x30,0x2e,0x32,0x39, + 0x34,0x2d,0x30,0x2e,0x30,0x36,0x31,0x43,0x30,0x2e, + 0x31,0x37,0x39,0x2c,0x32,0x31,0x2e,0x37,0x33,0x35, + 0x2c,0x30,0x2c,0x32,0x31,0x2e,0x34,0x36,0x33,0x2c, + 0x30,0x2c,0x32,0x31,0x2e,0x31,0x36,0x33,0x56,0x30, + 0x2e,0x37,0x35,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30, + 0x2e,0x33,0x2c,0x30,0x2e,0x31,0x37,0x39,0x2d,0x30, + 0x2e,0x35,0x37,0x32,0x2c,0x30,0x2e,0x34,0x35,0x36, + 0x2d,0x30,0x2e,0x36,0x39,0x43,0x30,0x2e,0x37,0x33, + 0x2d,0x30,0x2e,0x30,0x35,0x37,0x2c,0x31,0x2e,0x30, + 0x35,0x32,0x2c,0x30,0x2c,0x31,0x2e,0x32,0x36,0x39, + 0x2c,0x30,0x2e,0x32,0x30,0x38,0x6c,0x31,0x30,0x2e, + 0x36,0x35,0x38,0x2c,0x31,0x30,0x2e,0x32,0x30,0x36, + 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x31, + 0x34,0x31,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30, + 0x2e,0x33,0x33,0x37,0x2c,0x30,0x2e,0x32,0x33,0x31, + 0x2c,0x30,0x2e,0x35,0x34,0x32,0x0a,0x09,0x09,0x73, + 0x2d,0x30,0x2e,0x30,0x38,0x34,0x2c,0x30,0x2e,0x34, + 0x2d,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x35, + 0x34,0x32,0x4c,0x31,0x2e,0x32,0x36,0x39,0x2c,0x32, + 0x31,0x2e,0x37,0x30,0x35,0x43,0x31,0x2e,0x31,0x32, + 0x36,0x2c,0x32,0x31,0x2e,0x38,0x34,0x2c,0x30,0x2e, + 0x39,0x33,0x39,0x2c,0x32,0x31,0x2e,0x39,0x31,0x33, + 0x2c,0x30,0x2e,0x37,0x35,0x2c,0x32,0x31,0x2e,0x39, + 0x31,0x33,0x7a,0x20,0x4d,0x31,0x2e,0x35,0x2c,0x32, + 0x2e,0x35,0x30,0x36,0x76,0x31,0x36,0x2e,0x38,0x39, + 0x39,0x6c,0x38,0x2e,0x38,0x32,0x34,0x2d,0x38,0x2e, + 0x34,0x35,0x4c,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x35, + 0x30,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67, + 0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/scroll_gradient_png.cpp b/data/converted/scroll_gradient_png.cpp index 53c59587f1..77b84a54e0 100644 --- a/data/converted/scroll_gradient_png.cpp +++ b/data/converted/scroll_gradient_png.cpp @@ -8344,3 +8344,4 @@ const unsigned char scroll_gradient_png_data[83384] = { 0x91,0xf7,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, 0xae,0x42,0x60,0x82 }; + diff --git a/data/converted/slider_knob_svg.cpp b/data/converted/slider_knob_svg.cpp index ec7122501c..8b99255f25 100644 --- a/data/converted/slider_knob_svg.cpp +++ b/data/converted/slider_knob_svg.cpp @@ -2,69 +2,69 @@ #include "../Resources.h" -const size_t slider_knob_svg_size = 627; -const unsigned char slider_knob_svg_data[627] = { +const size_t slider_knob_svg_size = 619; +const unsigned char slider_knob_svg_data[619] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x31,0x36,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x36,0x70,0x78, - 0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d, - 0x22,0x30,0x20,0x30,0x20,0x31,0x36,0x20,0x31,0x36, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x31, - 0x36,0x20,0x31,0x36,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x2d, - 0x72,0x75,0x6c,0x65,0x3d,0x22,0x65,0x76,0x65,0x6e, - 0x6f,0x64,0x64,0x22,0x20,0x63,0x6c,0x69,0x70,0x2d, - 0x72,0x75,0x6c,0x65,0x3d,0x22,0x65,0x76,0x65,0x6e, - 0x6f,0x64,0x64,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x38,0x2c,0x30,0x63,0x34,0x2e, - 0x34,0x31,0x38,0x2c,0x30,0x2c,0x38,0x2c,0x33,0x2e, - 0x35,0x38,0x32,0x2c,0x38,0x2c,0x38,0x63,0x30,0x2c, - 0x34,0x2e,0x34,0x31,0x38,0x2d,0x33,0x2e,0x35,0x38, - 0x32,0x2c,0x38,0x2d,0x38,0x2c,0x38,0x73,0x2d,0x38, - 0x2d,0x33,0x2e,0x35,0x38,0x32,0x2d,0x38,0x2d,0x38, - 0x0d,0x0a,0x09,0x43,0x30,0x2c,0x33,0x2e,0x35,0x38, - 0x32,0x2c,0x33,0x2e,0x35,0x38,0x33,0x2c,0x30,0x2c, - 0x38,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c, - 0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x36, + 0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74, + 0x3d,0x22,0x31,0x36,0x70,0x78,0x22,0x20,0x76,0x69, + 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, + 0x20,0x31,0x36,0x20,0x31,0x36,0x22,0x20,0x65,0x6e, + 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, + 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, + 0x20,0x30,0x20,0x30,0x20,0x31,0x36,0x20,0x31,0x36, + 0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63, + 0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76, + 0x65,0x22,0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x2d,0x72,0x75,0x6c,0x65,0x3d, + 0x22,0x65,0x76,0x65,0x6e,0x6f,0x64,0x64,0x22,0x20, + 0x63,0x6c,0x69,0x70,0x2d,0x72,0x75,0x6c,0x65,0x3d, + 0x22,0x65,0x76,0x65,0x6e,0x6f,0x64,0x64,0x22,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, + 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x38, + 0x2c,0x30,0x63,0x34,0x2e,0x34,0x31,0x38,0x2c,0x30, + 0x2c,0x38,0x2c,0x33,0x2e,0x35,0x38,0x32,0x2c,0x38, + 0x2c,0x38,0x63,0x30,0x2c,0x34,0x2e,0x34,0x31,0x38, + 0x2d,0x33,0x2e,0x35,0x38,0x32,0x2c,0x38,0x2d,0x38, + 0x2c,0x38,0x73,0x2d,0x38,0x2d,0x33,0x2e,0x35,0x38, + 0x32,0x2d,0x38,0x2d,0x38,0x0a,0x09,0x43,0x30,0x2c, + 0x33,0x2e,0x35,0x38,0x32,0x2c,0x33,0x2e,0x35,0x38, + 0x33,0x2c,0x30,0x2c,0x38,0x2c,0x30,0x7a,0x22,0x2f, + 0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/splash_svg.cpp b/data/converted/splash_svg.cpp index 2f945f1773..e2e3391b59 100644 --- a/data/converted/splash_svg.cpp +++ b/data/converted/splash_svg.cpp @@ -2,95 +2,94 @@ #include "../Resources.h" -const size_t splash_svg_size = 17935; -const unsigned char splash_svg_data[17935] = { +const size_t splash_svg_size = 17764; +const unsigned char splash_svg_data[17764] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x30, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x31,0x32,0x38,0x30,0x70,0x78,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x37,0x32, - 0x30,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42, - 0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x31,0x32, - 0x38,0x30,0x20,0x37,0x32,0x30,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x31,0x32,0x38,0x30,0x20, - 0x37,0x32,0x30,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73, - 0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73, - 0x65,0x72,0x76,0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, - 0x2c,0x34,0x34,0x32,0x2e,0x30,0x39,0x37,0x4c,0x34, - 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x34,0x32, - 0x2e,0x30,0x39,0x37,0x4c,0x34,0x33,0x31,0x2e,0x35, - 0x32,0x39,0x2c,0x34,0x34,0x32,0x2e,0x30,0x39,0x37, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43, - 0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x33, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x30,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32, + 0x38,0x30,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, + 0x68,0x74,0x3d,0x22,0x37,0x32,0x30,0x70,0x78,0x22, + 0x20,0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22, + 0x30,0x20,0x30,0x20,0x31,0x32,0x38,0x30,0x20,0x37, + 0x32,0x30,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x31,0x32,0x38,0x30,0x20,0x37,0x32,0x30,0x22, + 0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65, + 0x3d,0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65, + 0x22,0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30,0x30, + 0x31,0x32,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33, + 0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x34,0x32,0x2e, + 0x30,0x39,0x37,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32, + 0x39,0x2c,0x34,0x34,0x32,0x2e,0x30,0x39,0x37,0x4c, + 0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x34, + 0x32,0x2e,0x30,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35, + 0x32,0x39,0x2c,0x33,0x35,0x39,0x2e,0x32,0x31,0x36, + 0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x33, 0x35,0x39,0x2e,0x32,0x31,0x36,0x4c,0x34,0x33,0x31, 0x2e,0x35,0x32,0x39,0x2c,0x33,0x35,0x39,0x2e,0x32, - 0x31,0x36,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, - 0x2c,0x33,0x35,0x39,0x2e,0x32,0x31,0x36,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x43,0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c, + 0x32,0x37,0x36,0x2e,0x33,0x30,0x36,0x4c,0x34,0x33, + 0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x37,0x36,0x2e, + 0x33,0x30,0x36,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32, + 0x39,0x2c,0x32,0x37,0x36,0x2e,0x33,0x30,0x36,0x7a, + 0x22,0x2f,0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20, 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30, 0x30,0x31,0x32,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34, - 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x37,0x36, - 0x2e,0x33,0x30,0x36,0x4c,0x34,0x33,0x31,0x2e,0x35, - 0x32,0x39,0x2c,0x32,0x37,0x36,0x2e,0x33,0x30,0x36, - 0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32, - 0x37,0x36,0x2e,0x33,0x30,0x36,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31, - 0x32,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31, - 0x2e,0x35,0x32,0x39,0x2c,0x33,0x31,0x37,0x2e,0x37, - 0x35,0x33,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, - 0x2c,0x33,0x31,0x37,0x2e,0x37,0x35,0x33,0x4c,0x34, 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x33,0x31,0x37, - 0x2e,0x37,0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35, - 0x32,0x39,0x2c,0x34,0x38,0x33,0x2e,0x35,0x34,0x34, - 0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34, - 0x38,0x33,0x2e,0x35,0x34,0x34,0x4c,0x34,0x33,0x31, - 0x2e,0x35,0x32,0x39,0x2c,0x34,0x38,0x33,0x2e,0x35, - 0x34,0x34,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x70, + 0x2e,0x37,0x35,0x33,0x4c,0x34,0x33,0x31,0x2e,0x35, + 0x32,0x39,0x2c,0x33,0x31,0x37,0x2e,0x37,0x35,0x33, + 0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x33, + 0x31,0x37,0x2e,0x37,0x35,0x33,0x7a,0x22,0x2f,0x3e, + 0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31,0x32, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e, + 0x35,0x32,0x39,0x2c,0x34,0x38,0x33,0x2e,0x35,0x34, + 0x34,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c, + 0x34,0x38,0x33,0x2e,0x35,0x34,0x34,0x4c,0x34,0x33, + 0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x38,0x33,0x2e, + 0x35,0x34,0x34,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x70, 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, 0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x64, 0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, @@ -98,107 +97,106 @@ const unsigned char splash_svg_data[17935] = { 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x30,0x30, 0x2e,0x36,0x34,0x32,0x4c,0x34,0x33,0x31,0x2e,0x35, 0x32,0x39,0x2c,0x34,0x30,0x30,0x2e,0x36,0x34,0x32, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43, - 0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32, - 0x33,0x34,0x2e,0x38,0x34,0x32,0x4c,0x34,0x33,0x31, - 0x2e,0x35,0x32,0x39,0x2c,0x32,0x33,0x34,0x2e,0x38, - 0x34,0x32,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, - 0x2c,0x32,0x33,0x34,0x2e,0x38,0x34,0x32,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x30,0x30,0x34, - 0x45,0x37,0x33,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34, - 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x34,0x35, - 0x2e,0x39,0x35,0x31,0x63,0x30,0x2d,0x36,0x2e,0x31, - 0x31,0x2d,0x34,0x2e,0x39,0x39,0x39,0x2d,0x31,0x31, - 0x2e,0x31,0x30,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30, - 0x35,0x2d,0x31,0x31,0x2e,0x31,0x30,0x38,0x48,0x36, - 0x39,0x2e,0x35,0x36,0x33,0x63,0x2d,0x36,0x2e,0x31, - 0x31,0x32,0x2c,0x30,0x2d,0x31,0x34,0x2e,0x36,0x34, - 0x34,0x2c,0x33,0x2e,0x35,0x33,0x34,0x2d,0x31,0x38, - 0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35, - 0x0d,0x0a,0x09,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34, - 0x35,0x2c,0x32,0x35,0x2e,0x37,0x34,0x35,0x43,0x32, - 0x30,0x2e,0x35,0x33,0x33,0x2c,0x32,0x37,0x32,0x2e, - 0x37,0x36,0x34,0x2c,0x31,0x37,0x2c,0x32,0x38,0x31, - 0x2e,0x32,0x39,0x36,0x2c,0x31,0x37,0x2c,0x32,0x38, - 0x37,0x2e,0x34,0x30,0x36,0x76,0x32,0x32,0x36,0x2e, - 0x34,0x36,0x38,0x63,0x30,0x2c,0x36,0x2e,0x31,0x31, - 0x31,0x2c,0x34,0x2e,0x39,0x39,0x39,0x2c,0x31,0x31, - 0x2e,0x31,0x30,0x39,0x2c,0x31,0x31,0x2e,0x31,0x30, - 0x36,0x2c,0x31,0x31,0x2e,0x31,0x30,0x39,0x68,0x33, - 0x35,0x30,0x2e,0x38,0x36,0x0d,0x0a,0x09,0x63,0x36, - 0x2e,0x31,0x30,0x37,0x2c,0x30,0x2c,0x31,0x34,0x2e, - 0x36,0x34,0x33,0x2d,0x33,0x2e,0x35,0x33,0x35,0x2c, - 0x31,0x38,0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e,0x38, - 0x35,0x34,0x6c,0x32,0x35,0x2e,0x37,0x34,0x31,0x2d, - 0x32,0x35,0x2e,0x37,0x33,0x36,0x63,0x34,0x2e,0x33, - 0x32,0x2d,0x34,0x2e,0x33,0x31,0x37,0x2c,0x37,0x2e, - 0x38,0x35,0x34,0x2d,0x31,0x32,0x2e,0x38,0x35,0x33, - 0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x38,0x2e, - 0x39,0x36,0x35,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32, - 0x39,0x2c,0x32,0x34,0x35,0x2e,0x39,0x35,0x31,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, - 0x30,0x2e,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c, - 0x65,0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75, - 0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x20,0x20, - 0x20,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x38,0x32, - 0x2e,0x32,0x32,0x2c,0x33,0x39,0x32,0x2e,0x37,0x38, - 0x39,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x33,0x2d,0x32, - 0x35,0x2e,0x37,0x32,0x39,0x63,0x2d,0x34,0x2e,0x33, - 0x31,0x39,0x2d,0x34,0x2e,0x33,0x31,0x38,0x2d,0x31, - 0x32,0x2e,0x38,0x35,0x34,0x2d,0x37,0x2e,0x38,0x35, - 0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x2d,0x37, - 0x2e,0x38,0x35,0x32,0x48,0x33,0x31,0x38,0x2e,0x32, - 0x38,0x0d,0x0a,0x09,0x63,0x2d,0x36,0x2e,0x31,0x31, - 0x32,0x2c,0x30,0x2e,0x30,0x30,0x31,0x2d,0x31,0x31, - 0x2e,0x31,0x31,0x2c,0x30,0x2e,0x30,0x30,0x31,0x2d, - 0x31,0x31,0x2e,0x31,0x31,0x2c,0x30,0x2e,0x30,0x30, - 0x31,0x73,0x33,0x2e,0x35,0x33,0x32,0x2d,0x33,0x2e, - 0x35,0x33,0x34,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d, - 0x37,0x2e,0x38,0x35,0x35,0x6c,0x36,0x37,0x2e,0x31, - 0x39,0x37,0x2d,0x36,0x37,0x2e,0x31,0x39,0x33,0x63, - 0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e,0x33,0x32,0x31, - 0x2c,0x32,0x2e,0x38,0x35,0x34,0x2d,0x37,0x2e,0x38, - 0x35,0x35,0x2d,0x33,0x2e,0x32,0x35,0x33,0x2d,0x37, - 0x2e,0x38,0x35,0x35,0x48,0x32,0x37,0x36,0x2e,0x38, - 0x33,0x32,0x0d,0x0a,0x09,0x63,0x2d,0x36,0x2e,0x31, - 0x31,0x31,0x2c,0x30,0x2d,0x31,0x34,0x2e,0x36,0x34, - 0x33,0x2c,0x33,0x2e,0x35,0x33,0x34,0x2d,0x31,0x38, - 0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35, - 0x4c,0x32,0x35,0x2e,0x31,0x34,0x32,0x2c,0x35,0x31, - 0x36,0x2e,0x38,0x36,0x63,0x2d,0x31,0x2e,0x38,0x32, - 0x35,0x2c,0x31,0x2e,0x38,0x32,0x32,0x2d,0x33,0x2e, - 0x35,0x31,0x37,0x2c,0x33,0x2e,0x35,0x31,0x34,0x2d, - 0x34,0x2e,0x38,0x37,0x31,0x2c,0x34,0x2e,0x38,0x36, - 0x37,0x63,0x32,0x2e,0x30,0x31,0x32,0x2c,0x32,0x2e, - 0x30,0x31,0x2c,0x34,0x2e,0x37,0x38,0x36,0x2c,0x33, - 0x2e,0x32,0x35,0x38,0x2c,0x37,0x2e,0x38,0x33,0x36, - 0x2c,0x33,0x2e,0x32,0x35,0x38,0x0d,0x0a,0x09,0x63, - 0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2c,0x30,0x2e, - 0x30,0x31,0x2c,0x30,0x2c,0x30,0x2e,0x30,0x31,0x36, - 0x2c,0x30,0x68,0x39,0x39,0x2e,0x39,0x35,0x33,0x68, - 0x31,0x36,0x37,0x2e,0x39,0x38,0x38,0x63,0x36,0x2e, - 0x31,0x31,0x31,0x2c,0x30,0x2c,0x31,0x31,0x2e,0x31, - 0x32,0x32,0x2d,0x30,0x2e,0x30,0x31,0x32,0x2c,0x31, - 0x31,0x2e,0x31,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32, - 0x33,0x63,0x30,0x2e,0x30,0x31,0x35,0x2d,0x30,0x2e, - 0x30,0x31,0x36,0x2c,0x33,0x2e,0x35,0x35,0x39,0x2d, - 0x33,0x2e,0x35,0x36,0x32,0x2c,0x37,0x2e,0x38,0x38, - 0x2d,0x37,0x2e,0x38,0x38,0x6c,0x36,0x37,0x2e,0x31, - 0x34,0x34,0x2d,0x36,0x37,0x2e,0x31,0x33,0x32,0x0d, - 0x0a,0x09,0x63,0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e, - 0x33,0x31,0x36,0x2c,0x37,0x2e,0x38,0x35,0x33,0x2d, - 0x31,0x32,0x2e,0x38,0x35,0x32,0x2c,0x37,0x2e,0x38, - 0x35,0x33,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x76, - 0x2d,0x31,0x39,0x2e,0x32,0x33,0x35,0x43,0x33,0x39, - 0x30,0x2e,0x30,0x37,0x33,0x2c,0x34,0x30,0x35,0x2e, - 0x36,0x34,0x2c,0x33,0x38,0x36,0x2e,0x35,0x34,0x2c, - 0x33,0x39,0x37,0x2e,0x31,0x30,0x34,0x2c,0x33,0x38, - 0x32,0x2e,0x32,0x32,0x2c,0x33,0x39,0x32,0x2e,0x37, - 0x38,0x39,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x70, + 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39, + 0x30,0x30,0x31,0x32,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x33, + 0x34,0x2e,0x38,0x34,0x32,0x4c,0x34,0x33,0x31,0x2e, + 0x35,0x32,0x39,0x2c,0x32,0x33,0x34,0x2e,0x38,0x34, + 0x32,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c, + 0x32,0x33,0x34,0x2e,0x38,0x34,0x32,0x7a,0x22,0x2f, + 0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x30,0x30,0x34,0x45,0x37, + 0x33,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31, + 0x2e,0x35,0x32,0x39,0x2c,0x32,0x34,0x35,0x2e,0x39, + 0x35,0x31,0x63,0x30,0x2d,0x36,0x2e,0x31,0x31,0x2d, + 0x34,0x2e,0x39,0x39,0x39,0x2d,0x31,0x31,0x2e,0x31, + 0x30,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x35,0x2d, + 0x31,0x31,0x2e,0x31,0x30,0x38,0x48,0x36,0x39,0x2e, + 0x35,0x36,0x33,0x63,0x2d,0x36,0x2e,0x31,0x31,0x32, + 0x2c,0x30,0x2d,0x31,0x34,0x2e,0x36,0x34,0x34,0x2c, + 0x33,0x2e,0x35,0x33,0x34,0x2d,0x31,0x38,0x2e,0x39, + 0x36,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35,0x0a,0x09, + 0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34,0x35,0x2c,0x32, + 0x35,0x2e,0x37,0x34,0x35,0x43,0x32,0x30,0x2e,0x35, + 0x33,0x33,0x2c,0x32,0x37,0x32,0x2e,0x37,0x36,0x34, + 0x2c,0x31,0x37,0x2c,0x32,0x38,0x31,0x2e,0x32,0x39, + 0x36,0x2c,0x31,0x37,0x2c,0x32,0x38,0x37,0x2e,0x34, + 0x30,0x36,0x76,0x32,0x32,0x36,0x2e,0x34,0x36,0x38, + 0x63,0x30,0x2c,0x36,0x2e,0x31,0x31,0x31,0x2c,0x34, + 0x2e,0x39,0x39,0x39,0x2c,0x31,0x31,0x2e,0x31,0x30, + 0x39,0x2c,0x31,0x31,0x2e,0x31,0x30,0x36,0x2c,0x31, + 0x31,0x2e,0x31,0x30,0x39,0x68,0x33,0x35,0x30,0x2e, + 0x38,0x36,0x0a,0x09,0x63,0x36,0x2e,0x31,0x30,0x37, + 0x2c,0x30,0x2c,0x31,0x34,0x2e,0x36,0x34,0x33,0x2d, + 0x33,0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e,0x39, + 0x36,0x33,0x2d,0x37,0x2e,0x38,0x35,0x34,0x6c,0x32, + 0x35,0x2e,0x37,0x34,0x31,0x2d,0x32,0x35,0x2e,0x37, + 0x33,0x36,0x63,0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e, + 0x33,0x31,0x37,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d, + 0x31,0x32,0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e,0x38, + 0x35,0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x35,0x4c, + 0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x34, + 0x35,0x2e,0x39,0x35,0x31,0x7a,0x22,0x2f,0x3e,0x0a, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x6f,0x70,0x61,0x63, + 0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x32,0x22,0x20, + 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, + 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, + 0x65,0x77,0x20,0x20,0x20,0x20,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x33,0x38,0x32,0x2e,0x32,0x32,0x2c,0x33, + 0x39,0x32,0x2e,0x37,0x38,0x39,0x6c,0x2d,0x32,0x35, + 0x2e,0x37,0x33,0x2d,0x32,0x35,0x2e,0x37,0x32,0x39, + 0x63,0x2d,0x34,0x2e,0x33,0x31,0x39,0x2d,0x34,0x2e, + 0x33,0x31,0x38,0x2d,0x31,0x32,0x2e,0x38,0x35,0x34, + 0x2d,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x38,0x2e, + 0x39,0x36,0x33,0x2d,0x37,0x2e,0x38,0x35,0x32,0x48, + 0x33,0x31,0x38,0x2e,0x32,0x38,0x0a,0x09,0x63,0x2d, + 0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2e,0x30,0x30, + 0x31,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c,0x30,0x2e, + 0x30,0x30,0x31,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c, + 0x30,0x2e,0x30,0x30,0x31,0x73,0x33,0x2e,0x35,0x33, + 0x32,0x2d,0x33,0x2e,0x35,0x33,0x34,0x2c,0x37,0x2e, + 0x38,0x35,0x34,0x2d,0x37,0x2e,0x38,0x35,0x35,0x6c, + 0x36,0x37,0x2e,0x31,0x39,0x37,0x2d,0x36,0x37,0x2e, + 0x31,0x39,0x33,0x63,0x34,0x2e,0x33,0x32,0x2d,0x34, + 0x2e,0x33,0x32,0x31,0x2c,0x32,0x2e,0x38,0x35,0x34, + 0x2d,0x37,0x2e,0x38,0x35,0x35,0x2d,0x33,0x2e,0x32, + 0x35,0x33,0x2d,0x37,0x2e,0x38,0x35,0x35,0x48,0x32, + 0x37,0x36,0x2e,0x38,0x33,0x32,0x0a,0x09,0x63,0x2d, + 0x36,0x2e,0x31,0x31,0x31,0x2c,0x30,0x2d,0x31,0x34, + 0x2e,0x36,0x34,0x33,0x2c,0x33,0x2e,0x35,0x33,0x34, + 0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e, + 0x38,0x35,0x35,0x4c,0x32,0x35,0x2e,0x31,0x34,0x32, + 0x2c,0x35,0x31,0x36,0x2e,0x38,0x36,0x63,0x2d,0x31, + 0x2e,0x38,0x32,0x35,0x2c,0x31,0x2e,0x38,0x32,0x32, + 0x2d,0x33,0x2e,0x35,0x31,0x37,0x2c,0x33,0x2e,0x35, + 0x31,0x34,0x2d,0x34,0x2e,0x38,0x37,0x31,0x2c,0x34, + 0x2e,0x38,0x36,0x37,0x63,0x32,0x2e,0x30,0x31,0x32, + 0x2c,0x32,0x2e,0x30,0x31,0x2c,0x34,0x2e,0x37,0x38, + 0x36,0x2c,0x33,0x2e,0x32,0x35,0x38,0x2c,0x37,0x2e, + 0x38,0x33,0x36,0x2c,0x33,0x2e,0x32,0x35,0x38,0x0a, + 0x09,0x63,0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2c, + 0x30,0x2e,0x30,0x31,0x2c,0x30,0x2c,0x30,0x2e,0x30, + 0x31,0x36,0x2c,0x30,0x68,0x39,0x39,0x2e,0x39,0x35, + 0x33,0x68,0x31,0x36,0x37,0x2e,0x39,0x38,0x38,0x63, + 0x36,0x2e,0x31,0x31,0x31,0x2c,0x30,0x2c,0x31,0x31, + 0x2e,0x31,0x32,0x32,0x2d,0x30,0x2e,0x30,0x31,0x32, + 0x2c,0x31,0x31,0x2e,0x31,0x33,0x33,0x2d,0x30,0x2e, + 0x30,0x32,0x33,0x63,0x30,0x2e,0x30,0x31,0x35,0x2d, + 0x30,0x2e,0x30,0x31,0x36,0x2c,0x33,0x2e,0x35,0x35, + 0x39,0x2d,0x33,0x2e,0x35,0x36,0x32,0x2c,0x37,0x2e, + 0x38,0x38,0x2d,0x37,0x2e,0x38,0x38,0x6c,0x36,0x37, + 0x2e,0x31,0x34,0x34,0x2d,0x36,0x37,0x2e,0x31,0x33, + 0x32,0x0a,0x09,0x63,0x34,0x2e,0x33,0x32,0x2d,0x34, + 0x2e,0x33,0x31,0x36,0x2c,0x37,0x2e,0x38,0x35,0x33, + 0x2d,0x31,0x32,0x2e,0x38,0x35,0x32,0x2c,0x37,0x2e, + 0x38,0x35,0x33,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33, + 0x76,0x2d,0x31,0x39,0x2e,0x32,0x33,0x35,0x43,0x33, + 0x39,0x30,0x2e,0x30,0x37,0x33,0x2c,0x34,0x30,0x35, + 0x2e,0x36,0x34,0x2c,0x33,0x38,0x36,0x2e,0x35,0x34, + 0x2c,0x33,0x39,0x37,0x2e,0x31,0x30,0x34,0x2c,0x33, + 0x38,0x32,0x2e,0x32,0x32,0x2c,0x33,0x39,0x32,0x2e, + 0x37,0x38,0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x70, 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, 0x3d,0x22,0x4d,0x32,0x37,0x36,0x2e,0x38,0x32,0x34, @@ -211,90 +209,89 @@ const unsigned char splash_svg_data[17935] = { 0x33,0x32,0x31,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2d, 0x37,0x2e,0x38,0x35,0x37,0x2d,0x31,0x32,0x2e,0x38, 0x35,0x35,0x2d,0x37,0x2e,0x38,0x36,0x35,0x2d,0x31, - 0x38,0x2e,0x39,0x36,0x36,0x0d,0x0a,0x09,0x6c,0x2d, - 0x30,0x2e,0x30,0x31,0x32,0x2d,0x31,0x39,0x2e,0x32, - 0x34,0x36,0x63,0x2d,0x30,0x2e,0x30,0x30,0x38,0x2d, - 0x36,0x2e,0x31,0x31,0x2c,0x33,0x2e,0x35,0x32,0x35, - 0x2d,0x31,0x34,0x2e,0x36,0x34,0x33,0x2c,0x37,0x2e, - 0x38,0x34,0x36,0x2d,0x31,0x38,0x2e,0x39,0x36,0x34, - 0x6c,0x32,0x35,0x2e,0x37,0x34,0x31,0x2d,0x32,0x35, - 0x2e,0x37,0x33,0x37,0x63,0x34,0x2e,0x33,0x32,0x31, - 0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x31,0x32,0x2e, - 0x38,0x35,0x32,0x2d,0x37,0x2e,0x38,0x35,0x35,0x2c, + 0x38,0x2e,0x39,0x36,0x36,0x0a,0x09,0x6c,0x2d,0x30, + 0x2e,0x30,0x31,0x32,0x2d,0x31,0x39,0x2e,0x32,0x34, + 0x36,0x63,0x2d,0x30,0x2e,0x30,0x30,0x38,0x2d,0x36, + 0x2e,0x31,0x31,0x2c,0x33,0x2e,0x35,0x32,0x35,0x2d, + 0x31,0x34,0x2e,0x36,0x34,0x33,0x2c,0x37,0x2e,0x38, + 0x34,0x36,0x2d,0x31,0x38,0x2e,0x39,0x36,0x34,0x6c, + 0x32,0x35,0x2e,0x37,0x34,0x31,0x2d,0x32,0x35,0x2e, + 0x37,0x33,0x37,0x63,0x34,0x2e,0x33,0x32,0x31,0x2d, + 0x34,0x2e,0x33,0x32,0x31,0x2c,0x31,0x32,0x2e,0x38, + 0x35,0x32,0x2d,0x37,0x2e,0x38,0x35,0x35,0x2c,0x31, + 0x38,0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e,0x38,0x35, + 0x35,0x68,0x31,0x30,0x32,0x2e,0x31,0x34,0x0a,0x09, + 0x63,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30,0x2c,0x37, + 0x2e,0x35,0x37,0x33,0x2c,0x33,0x2e,0x35,0x33,0x34, + 0x2c,0x33,0x2e,0x32,0x35,0x33,0x2c,0x37,0x2e,0x38, + 0x35,0x35,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34,0x31, + 0x2c,0x32,0x35,0x2e,0x37,0x33,0x37,0x63,0x2d,0x34, + 0x2e,0x33,0x32,0x31,0x2c,0x34,0x2e,0x33,0x32,0x31, + 0x2d,0x31,0x32,0x2e,0x38,0x35,0x32,0x2c,0x37,0x2e, + 0x38,0x35,0x35,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33, + 0x2c,0x37,0x2e,0x38,0x35,0x35,0x68,0x2d,0x36,0x30, + 0x2e,0x36,0x38,0x38,0x0a,0x09,0x63,0x2d,0x36,0x2e, + 0x31,0x31,0x32,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x31, + 0x31,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2d,0x31,0x31, + 0x2e,0x31,0x31,0x2c,0x31,0x31,0x2e,0x31,0x30,0x38, + 0x76,0x31,0x39,0x2e,0x32,0x34,0x36,0x63,0x30,0x2c, + 0x36,0x2e,0x31,0x31,0x2c,0x34,0x2e,0x39,0x39,0x38, + 0x2c,0x31,0x31,0x2e,0x31,0x30,0x38,0x2c,0x31,0x31, + 0x2e,0x31,0x30,0x36,0x2c,0x31,0x31,0x2e,0x31,0x30, + 0x36,0x6c,0x36,0x30,0x2e,0x37,0x30,0x32,0x2d,0x30, + 0x2e,0x30,0x30,0x37,0x63,0x36,0x2e,0x31,0x30,0x38, + 0x2d,0x30,0x2e,0x30,0x30,0x32,0x2c,0x31,0x34,0x2e, + 0x36,0x34,0x34,0x2c,0x33,0x2e,0x35,0x33,0x33,0x2c, + 0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e,0x38, + 0x35,0x32,0x0a,0x09,0x6c,0x32,0x35,0x2e,0x37,0x33, + 0x2c,0x32,0x35,0x2e,0x37,0x32,0x39,0x63,0x34,0x2e, + 0x33,0x32,0x2c,0x34,0x2e,0x33,0x31,0x35,0x2c,0x37, + 0x2e,0x38,0x35,0x33,0x2c,0x31,0x32,0x2e,0x38,0x35, + 0x31,0x2c,0x37,0x2e,0x38,0x35,0x33,0x2c,0x31,0x38, + 0x2e,0x39,0x36,0x33,0x76,0x31,0x39,0x2e,0x32,0x33, + 0x35,0x63,0x30,0x2c,0x36,0x2e,0x31,0x31,0x2d,0x33, + 0x2e,0x35,0x33,0x32,0x2c,0x31,0x34,0x2e,0x36,0x34, + 0x36,0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c,0x31,0x38, + 0x2e,0x39,0x36,0x33,0x6c,0x2d,0x32,0x35,0x2e,0x37, + 0x34,0x31,0x2c,0x32,0x35,0x2e,0x37,0x34,0x0a,0x09, + 0x63,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x34,0x2e, + 0x33,0x31,0x37,0x2d,0x31,0x32,0x2e,0x38,0x35,0x32, + 0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x38,0x2e, + 0x39,0x36,0x33,0x2c,0x37,0x2e,0x38,0x35,0x34,0x68, + 0x2d,0x36,0x30,0x2e,0x36,0x38,0x38,0x63,0x2d,0x36, + 0x2e,0x31,0x31,0x32,0x2c,0x30,0x2d,0x31,0x34,0x2e, + 0x36,0x34,0x33,0x2d,0x33,0x2e,0x35,0x33,0x36,0x2d, 0x31,0x38,0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e,0x38, - 0x35,0x35,0x68,0x31,0x30,0x32,0x2e,0x31,0x34,0x0d, - 0x0a,0x09,0x63,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30, - 0x2c,0x37,0x2e,0x35,0x37,0x33,0x2c,0x33,0x2e,0x35, - 0x33,0x34,0x2c,0x33,0x2e,0x32,0x35,0x33,0x2c,0x37, - 0x2e,0x38,0x35,0x35,0x6c,0x2d,0x32,0x35,0x2e,0x37, - 0x34,0x31,0x2c,0x32,0x35,0x2e,0x37,0x33,0x37,0x63, - 0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x34,0x2e,0x33, - 0x32,0x31,0x2d,0x31,0x32,0x2e,0x38,0x35,0x32,0x2c, - 0x37,0x2e,0x38,0x35,0x35,0x2d,0x31,0x38,0x2e,0x39, - 0x36,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35,0x68,0x2d, - 0x36,0x30,0x2e,0x36,0x38,0x38,0x0d,0x0a,0x09,0x63, - 0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2d,0x31, - 0x31,0x2e,0x31,0x31,0x2c,0x34,0x2e,0x39,0x39,0x38, - 0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c,0x31,0x31,0x2e, - 0x31,0x30,0x38,0x76,0x31,0x39,0x2e,0x32,0x34,0x36, - 0x63,0x30,0x2c,0x36,0x2e,0x31,0x31,0x2c,0x34,0x2e, - 0x39,0x39,0x38,0x2c,0x31,0x31,0x2e,0x31,0x30,0x38, - 0x2c,0x31,0x31,0x2e,0x31,0x30,0x36,0x2c,0x31,0x31, - 0x2e,0x31,0x30,0x36,0x6c,0x36,0x30,0x2e,0x37,0x30, - 0x32,0x2d,0x30,0x2e,0x30,0x30,0x37,0x63,0x36,0x2e, - 0x31,0x30,0x38,0x2d,0x30,0x2e,0x30,0x30,0x32,0x2c, - 0x31,0x34,0x2e,0x36,0x34,0x34,0x2c,0x33,0x2e,0x35, - 0x33,0x33,0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c, - 0x37,0x2e,0x38,0x35,0x32,0x0d,0x0a,0x09,0x6c,0x32, - 0x35,0x2e,0x37,0x33,0x2c,0x32,0x35,0x2e,0x37,0x32, - 0x39,0x63,0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33, - 0x31,0x35,0x2c,0x37,0x2e,0x38,0x35,0x33,0x2c,0x31, - 0x32,0x2e,0x38,0x35,0x31,0x2c,0x37,0x2e,0x38,0x35, - 0x33,0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x76,0x31, - 0x39,0x2e,0x32,0x33,0x35,0x63,0x30,0x2c,0x36,0x2e, - 0x31,0x31,0x2d,0x33,0x2e,0x35,0x33,0x32,0x2c,0x31, - 0x34,0x2e,0x36,0x34,0x36,0x2d,0x37,0x2e,0x38,0x35, - 0x33,0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x6c,0x2d, - 0x32,0x35,0x2e,0x37,0x34,0x31,0x2c,0x32,0x35,0x2e, - 0x37,0x34,0x0d,0x0a,0x09,0x63,0x2d,0x34,0x2e,0x33, - 0x32,0x31,0x2c,0x34,0x2e,0x33,0x31,0x37,0x2d,0x31, - 0x32,0x2e,0x38,0x35,0x32,0x2c,0x37,0x2e,0x38,0x35, - 0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37, - 0x2e,0x38,0x35,0x34,0x68,0x2d,0x36,0x30,0x2e,0x36, - 0x38,0x38,0x63,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c, - 0x30,0x2d,0x31,0x34,0x2e,0x36,0x34,0x33,0x2d,0x33, - 0x2e,0x35,0x33,0x36,0x2d,0x31,0x38,0x2e,0x39,0x36, - 0x33,0x2d,0x37,0x2e,0x38,0x35,0x34,0x6c,0x2d,0x32, - 0x35,0x2e,0x37,0x34,0x31,0x2d,0x32,0x35,0x2e,0x37, - 0x34,0x0d,0x0a,0x09,0x63,0x2d,0x34,0x2e,0x33,0x32, - 0x2d,0x34,0x2e,0x33,0x31,0x36,0x2d,0x32,0x2e,0x38, - 0x35,0x38,0x2d,0x37,0x2e,0x38,0x35,0x34,0x2c,0x33, - 0x2e,0x32,0x35,0x33,0x2d,0x37,0x2e,0x38,0x35,0x34, - 0x68,0x31,0x30,0x32,0x2e,0x31,0x34,0x63,0x36,0x2e, - 0x31,0x31,0x32,0x2c,0x30,0x2c,0x31,0x31,0x2e,0x31, - 0x31,0x2d,0x34,0x2e,0x39,0x39,0x38,0x2c,0x31,0x31, - 0x2e,0x31,0x31,0x2d,0x31,0x31,0x2e,0x31,0x30,0x39, - 0x56,0x34,0x31,0x31,0x2e,0x37,0x35,0x63,0x30,0x2d, - 0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2d,0x31,0x31, - 0x2e,0x31,0x31,0x2c,0x30,0x2e,0x30,0x30,0x33,0x2d, - 0x31,0x31,0x2e,0x31,0x31,0x0d,0x0a,0x09,0x63,0x30, - 0x2e,0x30,0x30,0x34,0x2c,0x30,0x2d,0x34,0x2e,0x39, - 0x39,0x34,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x31,0x30, - 0x33,0x2c,0x30,0x4c,0x32,0x37,0x36,0x2e,0x38,0x32, - 0x34,0x2c,0x34,0x30,0x30,0x2e,0x36,0x34,0x39,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x67,0x20,0x6f,0x70, - 0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x32, - 0x22,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x37,0x2e,0x30,0x30, - 0x38,0x2c,0x33,0x37,0x30,0x2e,0x38,0x37,0x37,0x63, - 0x30,0x2d,0x36,0x2e,0x31,0x31,0x2c,0x30,0x2d,0x31, - 0x31,0x2e,0x32,0x33,0x38,0x2c,0x30,0x2d,0x31,0x31, - 0x2e,0x33,0x39,0x33,0x63,0x30,0x2d,0x30,0x2e,0x31, - 0x35,0x35,0x2c,0x33,0x2e,0x35,0x33,0x32,0x2d,0x33, - 0x2e,0x38,0x31,0x38,0x2c,0x37,0x2e,0x38,0x35,0x34, - 0x2d,0x38,0x2e,0x31,0x33,0x38,0x6c,0x36,0x37,0x2e, - 0x31,0x38,0x35,0x2d,0x36,0x37,0x2e,0x31,0x38,0x36, - 0x0d,0x0a,0x09,0x09,0x63,0x34,0x2e,0x33,0x32,0x31, + 0x35,0x34,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34,0x31, + 0x2d,0x32,0x35,0x2e,0x37,0x34,0x0a,0x09,0x63,0x2d, + 0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e,0x33,0x31,0x36, + 0x2d,0x32,0x2e,0x38,0x35,0x38,0x2d,0x37,0x2e,0x38, + 0x35,0x34,0x2c,0x33,0x2e,0x32,0x35,0x33,0x2d,0x37, + 0x2e,0x38,0x35,0x34,0x68,0x31,0x30,0x32,0x2e,0x31, + 0x34,0x63,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2c, + 0x31,0x31,0x2e,0x31,0x31,0x2d,0x34,0x2e,0x39,0x39, + 0x38,0x2c,0x31,0x31,0x2e,0x31,0x31,0x2d,0x31,0x31, + 0x2e,0x31,0x30,0x39,0x56,0x34,0x31,0x31,0x2e,0x37, + 0x35,0x63,0x30,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c, + 0x30,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c,0x30,0x2e, + 0x30,0x30,0x33,0x2d,0x31,0x31,0x2e,0x31,0x31,0x0a, + 0x09,0x63,0x30,0x2e,0x30,0x30,0x34,0x2c,0x30,0x2d, + 0x34,0x2e,0x39,0x39,0x34,0x2c,0x30,0x2d,0x31,0x31, + 0x2e,0x31,0x30,0x33,0x2c,0x30,0x4c,0x32,0x37,0x36, + 0x2e,0x38,0x32,0x34,0x2c,0x34,0x30,0x30,0x2e,0x36, + 0x34,0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x67,0x20, + 0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30, + 0x2e,0x32,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x37,0x2e,0x30, + 0x30,0x38,0x2c,0x33,0x37,0x30,0x2e,0x38,0x37,0x37, + 0x63,0x30,0x2d,0x36,0x2e,0x31,0x31,0x2c,0x30,0x2d, + 0x31,0x31,0x2e,0x32,0x33,0x38,0x2c,0x30,0x2d,0x31, + 0x31,0x2e,0x33,0x39,0x33,0x63,0x30,0x2d,0x30,0x2e, + 0x31,0x35,0x35,0x2c,0x33,0x2e,0x35,0x33,0x32,0x2d, + 0x33,0x2e,0x38,0x31,0x38,0x2c,0x37,0x2e,0x38,0x35, + 0x34,0x2d,0x38,0x2e,0x31,0x33,0x38,0x6c,0x36,0x37, + 0x2e,0x31,0x38,0x35,0x2d,0x36,0x37,0x2e,0x31,0x38, + 0x36,0x0a,0x09,0x09,0x63,0x34,0x2e,0x33,0x32,0x31, 0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x31,0x32,0x2e, 0x38,0x35,0x35,0x2d,0x37,0x2e,0x38,0x35,0x35,0x2c, 0x31,0x38,0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e,0x38, @@ -303,98 +300,97 @@ const unsigned char splash_svg_data[17935] = { 0x35,0x37,0x34,0x2c,0x33,0x2e,0x35,0x33,0x34,0x2c, 0x33,0x2e,0x32,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35, 0x35,0x6c,0x2d,0x36,0x37,0x2e,0x31,0x39,0x37,0x2c, - 0x36,0x37,0x2e,0x31,0x38,0x32,0x0d,0x0a,0x09,0x09, - 0x63,0x2d,0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33, - 0x32,0x31,0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c,0x37, - 0x2e,0x38,0x35,0x35,0x2d,0x37,0x2e,0x38,0x35,0x33, - 0x2c,0x37,0x2e,0x38,0x35,0x35,0x73,0x34,0x2e,0x39, - 0x39,0x38,0x2c,0x30,0x2e,0x30,0x30,0x32,0x2c,0x31, - 0x31,0x2e,0x31,0x31,0x2c,0x30,0x2e,0x30,0x30,0x36, - 0x6c,0x31,0x39,0x2e,0x32,0x32,0x38,0x2c,0x30,0x2e, - 0x30,0x30,0x37,0x63,0x36,0x2e,0x31,0x30,0x38,0x2c, - 0x30,0x2e,0x30,0x30,0x34,0x2c,0x31,0x30,0x2e,0x37, - 0x35,0x2c,0x34,0x2e,0x39,0x39,0x33,0x2c,0x31,0x30, - 0x2e,0x33,0x31,0x38,0x2c,0x31,0x31,0x2e,0x30,0x38, - 0x36,0x6c,0x2d,0x31,0x2e,0x31,0x31,0x34,0x2c,0x31, - 0x35,0x2e,0x35,0x39,0x32,0x0d,0x0a,0x09,0x09,0x63, - 0x2d,0x30,0x2e,0x34,0x33,0x33,0x2c,0x36,0x2e,0x30, - 0x39,0x32,0x2d,0x31,0x2e,0x37,0x30,0x37,0x2c,0x31, - 0x31,0x2e,0x39,0x39,0x38,0x2d,0x32,0x2e,0x38,0x33, - 0x33,0x2c,0x31,0x33,0x2e,0x31,0x32,0x33,0x63,0x2d, - 0x31,0x2e,0x31,0x32,0x35,0x2c,0x31,0x2e,0x31,0x32, - 0x35,0x2d,0x35,0x2e,0x35,0x37,0x36,0x2c,0x35,0x2e, - 0x35,0x38,0x2d,0x39,0x2e,0x38,0x39,0x36,0x2c,0x39, - 0x2e,0x38,0x39,0x36,0x6c,0x2d,0x32,0x35,0x2e,0x32, - 0x30,0x31,0x2c,0x32,0x35,0x2e,0x32,0x30,0x31,0x63, - 0x2d,0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33,0x31, - 0x36,0x2d,0x37,0x2e,0x38,0x38,0x35,0x2c,0x37,0x2e, - 0x38,0x38,0x35,0x2d,0x37,0x2e,0x39,0x32,0x32,0x2c, - 0x37,0x2e,0x39,0x31,0x38,0x0d,0x0a,0x09,0x09,0x63, - 0x2d,0x30,0x2e,0x30,0x33,0x34,0x2c,0x30,0x2e,0x30, - 0x33,0x35,0x2c,0x34,0x2e,0x39,0x33,0x33,0x2c,0x30, - 0x2e,0x30,0x36,0x35,0x2c,0x31,0x31,0x2e,0x30,0x34, - 0x31,0x2c,0x30,0x2e,0x30,0x36,0x32,0x68,0x31,0x37, - 0x2e,0x39,0x37,0x39,0x63,0x36,0x2e,0x31,0x30,0x38, - 0x2d,0x30,0x2e,0x30,0x30,0x34,0x2c,0x31,0x34,0x2e, - 0x37,0x38,0x34,0x2c,0x33,0x2e,0x33,0x37,0x39,0x2c, - 0x31,0x39,0x2e,0x32,0x38,0x31,0x2c,0x37,0x2e,0x35, - 0x31,0x38,0x6c,0x32,0x36,0x2e,0x38,0x33,0x36,0x2c, - 0x32,0x34,0x2e,0x36,0x39,0x35,0x0d,0x0a,0x09,0x09, - 0x63,0x34,0x2e,0x34,0x39,0x37,0x2c,0x34,0x2e,0x31, - 0x33,0x37,0x2c,0x38,0x2e,0x31,0x38,0x31,0x2c,0x37, - 0x2e,0x36,0x32,0x33,0x2c,0x38,0x2e,0x30,0x35,0x38, - 0x2c,0x37,0x2e,0x37,0x35,0x63,0x2d,0x30,0x2e,0x31, - 0x32,0x36,0x2c,0x30,0x2e,0x31,0x32,0x36,0x2d,0x33, - 0x2e,0x37,0x36,0x36,0x2c,0x33,0x2e,0x37,0x36,0x32, - 0x2d,0x38,0x2e,0x30,0x38,0x37,0x2c,0x38,0x2e,0x30, - 0x38,0x33,0x6c,0x2d,0x33,0x34,0x2e,0x38,0x32,0x37, - 0x2c,0x33,0x34,0x2e,0x38,0x34,0x39,0x6c,0x2d,0x31, - 0x34,0x37,0x2e,0x32,0x31,0x32,0x2c,0x30,0x2e,0x30, - 0x30,0x32,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x36,0x2e, - 0x31,0x30,0x37,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x31, - 0x30,0x35,0x2d,0x34,0x2e,0x39,0x39,0x38,0x2d,0x31, - 0x31,0x2e,0x31,0x30,0x35,0x2d,0x31,0x31,0x2e,0x31, - 0x31,0x4c,0x31,0x37,0x2e,0x30,0x30,0x38,0x2c,0x33, - 0x37,0x30,0x2e,0x38,0x37,0x37,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x31,0x31,0x2e,0x30,0x31,0x2c, - 0x34,0x34,0x32,0x2e,0x30,0x39,0x37,0x63,0x2d,0x36, - 0x2e,0x31,0x30,0x37,0x2c,0x30,0x2d,0x31,0x31,0x2e, - 0x31,0x30,0x35,0x2d,0x34,0x2e,0x39,0x39,0x38,0x2d, - 0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x31,0x31,0x2e, - 0x31,0x30,0x39,0x76,0x2d,0x31,0x39,0x2e,0x32,0x33, - 0x35,0x63,0x30,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c, - 0x34,0x2e,0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31, - 0x31,0x2c,0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x31, - 0x31,0x2e,0x31,0x31,0x68,0x36,0x30,0x2e,0x36,0x39, - 0x0d,0x0a,0x09,0x63,0x36,0x2e,0x31,0x30,0x38,0x2c, - 0x30,0x2c,0x31,0x31,0x2e,0x31,0x30,0x36,0x2d,0x34, - 0x2e,0x39,0x39,0x38,0x2c,0x31,0x31,0x2e,0x31,0x30, - 0x36,0x2d,0x31,0x31,0x2e,0x31,0x30,0x39,0x76,0x2d, - 0x31,0x39,0x2e,0x32,0x30,0x34,0x63,0x30,0x2d,0x36, - 0x2e,0x31,0x31,0x32,0x2d,0x34,0x2e,0x39,0x39,0x38, - 0x2d,0x31,0x31,0x2e,0x31,0x31,0x2d,0x31,0x31,0x2e, - 0x31,0x30,0x36,0x2d,0x31,0x31,0x2e,0x31,0x31,0x68, - 0x2d,0x36,0x30,0x2e,0x36,0x39,0x63,0x2d,0x36,0x2e, - 0x31,0x30,0x37,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x31, - 0x30,0x35,0x2d,0x34,0x2e,0x39,0x39,0x38,0x2d,0x31, - 0x31,0x2e,0x31,0x30,0x35,0x2d,0x31,0x31,0x2e,0x31, - 0x30,0x38,0x76,0x2d,0x31,0x39,0x2e,0x32,0x34,0x36, - 0x0d,0x0a,0x09,0x63,0x30,0x2d,0x36,0x2e,0x31,0x31, - 0x2c,0x34,0x2e,0x39,0x39,0x38,0x2d,0x31,0x31,0x2e, - 0x31,0x30,0x38,0x2c,0x31,0x31,0x2e,0x31,0x30,0x35, - 0x2d,0x31,0x31,0x2e,0x31,0x30,0x38,0x68,0x36,0x30, - 0x2e,0x36,0x39,0x63,0x36,0x2e,0x31,0x30,0x38,0x2c, - 0x30,0x2c,0x31,0x34,0x2e,0x36,0x34,0x33,0x2d,0x33, - 0x2e,0x35,0x33,0x34,0x2c,0x31,0x38,0x2e,0x39,0x36, - 0x34,0x2d,0x37,0x2e,0x38,0x35,0x34,0x6c,0x32,0x35, - 0x2e,0x37,0x34,0x39,0x2d,0x32,0x35,0x2e,0x37,0x34, - 0x31,0x63,0x34,0x2e,0x33,0x32,0x31,0x2d,0x34,0x2e, - 0x33,0x31,0x39,0x2c,0x32,0x2e,0x38,0x35,0x35,0x2d, - 0x37,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e,0x32,0x35, - 0x33,0x2d,0x37,0x2e,0x38,0x35,0x33,0x0d,0x0a,0x09, + 0x36,0x37,0x2e,0x31,0x38,0x32,0x0a,0x09,0x09,0x63, + 0x2d,0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33,0x32, + 0x31,0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e, + 0x38,0x35,0x35,0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c, + 0x37,0x2e,0x38,0x35,0x35,0x73,0x34,0x2e,0x39,0x39, + 0x38,0x2c,0x30,0x2e,0x30,0x30,0x32,0x2c,0x31,0x31, + 0x2e,0x31,0x31,0x2c,0x30,0x2e,0x30,0x30,0x36,0x6c, + 0x31,0x39,0x2e,0x32,0x32,0x38,0x2c,0x30,0x2e,0x30, + 0x30,0x37,0x63,0x36,0x2e,0x31,0x30,0x38,0x2c,0x30, + 0x2e,0x30,0x30,0x34,0x2c,0x31,0x30,0x2e,0x37,0x35, + 0x2c,0x34,0x2e,0x39,0x39,0x33,0x2c,0x31,0x30,0x2e, + 0x33,0x31,0x38,0x2c,0x31,0x31,0x2e,0x30,0x38,0x36, + 0x6c,0x2d,0x31,0x2e,0x31,0x31,0x34,0x2c,0x31,0x35, + 0x2e,0x35,0x39,0x32,0x0a,0x09,0x09,0x63,0x2d,0x30, + 0x2e,0x34,0x33,0x33,0x2c,0x36,0x2e,0x30,0x39,0x32, + 0x2d,0x31,0x2e,0x37,0x30,0x37,0x2c,0x31,0x31,0x2e, + 0x39,0x39,0x38,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c, + 0x31,0x33,0x2e,0x31,0x32,0x33,0x63,0x2d,0x31,0x2e, + 0x31,0x32,0x35,0x2c,0x31,0x2e,0x31,0x32,0x35,0x2d, + 0x35,0x2e,0x35,0x37,0x36,0x2c,0x35,0x2e,0x35,0x38, + 0x2d,0x39,0x2e,0x38,0x39,0x36,0x2c,0x39,0x2e,0x38, + 0x39,0x36,0x6c,0x2d,0x32,0x35,0x2e,0x32,0x30,0x31, + 0x2c,0x32,0x35,0x2e,0x32,0x30,0x31,0x63,0x2d,0x34, + 0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33,0x31,0x36,0x2d, + 0x37,0x2e,0x38,0x38,0x35,0x2c,0x37,0x2e,0x38,0x38, + 0x35,0x2d,0x37,0x2e,0x39,0x32,0x32,0x2c,0x37,0x2e, + 0x39,0x31,0x38,0x0a,0x09,0x09,0x63,0x2d,0x30,0x2e, + 0x30,0x33,0x34,0x2c,0x30,0x2e,0x30,0x33,0x35,0x2c, + 0x34,0x2e,0x39,0x33,0x33,0x2c,0x30,0x2e,0x30,0x36, + 0x35,0x2c,0x31,0x31,0x2e,0x30,0x34,0x31,0x2c,0x30, + 0x2e,0x30,0x36,0x32,0x68,0x31,0x37,0x2e,0x39,0x37, + 0x39,0x63,0x36,0x2e,0x31,0x30,0x38,0x2d,0x30,0x2e, + 0x30,0x30,0x34,0x2c,0x31,0x34,0x2e,0x37,0x38,0x34, + 0x2c,0x33,0x2e,0x33,0x37,0x39,0x2c,0x31,0x39,0x2e, + 0x32,0x38,0x31,0x2c,0x37,0x2e,0x35,0x31,0x38,0x6c, + 0x32,0x36,0x2e,0x38,0x33,0x36,0x2c,0x32,0x34,0x2e, + 0x36,0x39,0x35,0x0a,0x09,0x09,0x63,0x34,0x2e,0x34, + 0x39,0x37,0x2c,0x34,0x2e,0x31,0x33,0x37,0x2c,0x38, + 0x2e,0x31,0x38,0x31,0x2c,0x37,0x2e,0x36,0x32,0x33, + 0x2c,0x38,0x2e,0x30,0x35,0x38,0x2c,0x37,0x2e,0x37, + 0x35,0x63,0x2d,0x30,0x2e,0x31,0x32,0x36,0x2c,0x30, + 0x2e,0x31,0x32,0x36,0x2d,0x33,0x2e,0x37,0x36,0x36, + 0x2c,0x33,0x2e,0x37,0x36,0x32,0x2d,0x38,0x2e,0x30, + 0x38,0x37,0x2c,0x38,0x2e,0x30,0x38,0x33,0x6c,0x2d, + 0x33,0x34,0x2e,0x38,0x32,0x37,0x2c,0x33,0x34,0x2e, + 0x38,0x34,0x39,0x6c,0x2d,0x31,0x34,0x37,0x2e,0x32, + 0x31,0x32,0x2c,0x30,0x2e,0x30,0x30,0x32,0x0a,0x09, + 0x09,0x63,0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30, + 0x2d,0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x34,0x2e, + 0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x35, + 0x2d,0x31,0x31,0x2e,0x31,0x31,0x4c,0x31,0x37,0x2e, + 0x30,0x30,0x38,0x2c,0x33,0x37,0x30,0x2e,0x38,0x37, + 0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e, + 0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x31,0x31,0x2e, + 0x30,0x31,0x2c,0x34,0x34,0x32,0x2e,0x30,0x39,0x37, + 0x63,0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30,0x2d, + 0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x34,0x2e,0x39, + 0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x35,0x2d, + 0x31,0x31,0x2e,0x31,0x30,0x39,0x76,0x2d,0x31,0x39, + 0x2e,0x32,0x33,0x35,0x63,0x30,0x2d,0x36,0x2e,0x31, + 0x31,0x32,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2d,0x31, + 0x31,0x2e,0x31,0x31,0x2c,0x31,0x31,0x2e,0x31,0x30, + 0x35,0x2d,0x31,0x31,0x2e,0x31,0x31,0x68,0x36,0x30, + 0x2e,0x36,0x39,0x0a,0x09,0x63,0x36,0x2e,0x31,0x30, + 0x38,0x2c,0x30,0x2c,0x31,0x31,0x2e,0x31,0x30,0x36, + 0x2d,0x34,0x2e,0x39,0x39,0x38,0x2c,0x31,0x31,0x2e, + 0x31,0x30,0x36,0x2d,0x31,0x31,0x2e,0x31,0x30,0x39, + 0x76,0x2d,0x31,0x39,0x2e,0x32,0x30,0x34,0x63,0x30, + 0x2d,0x36,0x2e,0x31,0x31,0x32,0x2d,0x34,0x2e,0x39, + 0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2d,0x31, + 0x31,0x2e,0x31,0x30,0x36,0x2d,0x31,0x31,0x2e,0x31, + 0x31,0x68,0x2d,0x36,0x30,0x2e,0x36,0x39,0x63,0x2d, + 0x36,0x2e,0x31,0x30,0x37,0x2c,0x30,0x2d,0x31,0x31, + 0x2e,0x31,0x30,0x35,0x2d,0x34,0x2e,0x39,0x39,0x38, + 0x2d,0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x31,0x31, + 0x2e,0x31,0x30,0x38,0x76,0x2d,0x31,0x39,0x2e,0x32, + 0x34,0x36,0x0a,0x09,0x63,0x30,0x2d,0x36,0x2e,0x31, + 0x31,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2d,0x31,0x31, + 0x2e,0x31,0x30,0x38,0x2c,0x31,0x31,0x2e,0x31,0x30, + 0x35,0x2d,0x31,0x31,0x2e,0x31,0x30,0x38,0x68,0x36, + 0x30,0x2e,0x36,0x39,0x63,0x36,0x2e,0x31,0x30,0x38, + 0x2c,0x30,0x2c,0x31,0x34,0x2e,0x36,0x34,0x33,0x2d, + 0x33,0x2e,0x35,0x33,0x34,0x2c,0x31,0x38,0x2e,0x39, + 0x36,0x34,0x2d,0x37,0x2e,0x38,0x35,0x34,0x6c,0x32, + 0x35,0x2e,0x37,0x34,0x39,0x2d,0x32,0x35,0x2e,0x37, + 0x34,0x31,0x63,0x34,0x2e,0x33,0x32,0x31,0x2d,0x34, + 0x2e,0x33,0x31,0x39,0x2c,0x32,0x2e,0x38,0x35,0x35, + 0x2d,0x37,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e,0x32, + 0x35,0x33,0x2d,0x37,0x2e,0x38,0x35,0x33,0x0a,0x09, 0x48,0x31,0x31,0x31,0x2e,0x30,0x31,0x63,0x2d,0x36, 0x2e,0x31,0x30,0x37,0x2c,0x30,0x2d,0x31,0x34,0x2e, 0x36,0x34,0x33,0x2c,0x33,0x2e,0x35,0x33,0x34,0x2d, @@ -405,98 +401,97 @@ const unsigned char splash_svg_data[17935] = { 0x35,0x37,0x2c,0x31,0x32,0x2e,0x38,0x35,0x34,0x2d, 0x37,0x2e,0x38,0x35,0x37,0x2c,0x31,0x38,0x2e,0x39, 0x36,0x34,0x76,0x31,0x30,0x32,0x2e,0x31,0x32,0x35, - 0x0d,0x0a,0x09,0x63,0x30,0x2c,0x36,0x2e,0x31,0x31, - 0x31,0x2c,0x33,0x2e,0x35,0x33,0x37,0x2c,0x31,0x34, - 0x2e,0x36,0x34,0x36,0x2c,0x37,0x2e,0x38,0x35,0x37, - 0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x6c,0x32,0x35, - 0x2e,0x37,0x33,0x37,0x2c,0x32,0x35,0x2e,0x37,0x34, - 0x63,0x34,0x2e,0x33,0x32,0x31,0x2c,0x34,0x2e,0x33, - 0x31,0x37,0x2c,0x31,0x32,0x2e,0x38,0x35,0x35,0x2c, - 0x37,0x2e,0x38,0x35,0x34,0x2c,0x31,0x38,0x2e,0x39, - 0x36,0x33,0x2c,0x37,0x2e,0x38,0x35,0x34,0x68,0x31, - 0x30,0x32,0x2e,0x31,0x34,0x33,0x63,0x36,0x2e,0x31, - 0x31,0x32,0x2c,0x30,0x2c,0x37,0x2e,0x35,0x37,0x34, - 0x2d,0x33,0x2e,0x35,0x33,0x36,0x2c,0x33,0x2e,0x32, - 0x35,0x33,0x2d,0x37,0x2e,0x38,0x35,0x36,0x0d,0x0a, - 0x09,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34,0x31,0x2d, - 0x32,0x35,0x2e,0x37,0x34,0x34,0x63,0x2d,0x34,0x2e, - 0x33,0x32,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2d,0x31, - 0x32,0x2e,0x38,0x35,0x34,0x2d,0x37,0x2e,0x38,0x35, - 0x37,0x2d,0x31,0x38,0x2e,0x39,0x36,0x34,0x2d,0x37, - 0x2e,0x38,0x35,0x37,0x4c,0x31,0x31,0x31,0x2e,0x30, - 0x31,0x2c,0x34,0x34,0x32,0x2e,0x30,0x39,0x37,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, - 0x4d,0x35,0x35,0x38,0x2e,0x36,0x30,0x35,0x2c,0x33, - 0x32,0x36,0x2e,0x35,0x36,0x32,0x63,0x2d,0x31,0x2e, - 0x36,0x32,0x33,0x2c,0x33,0x2e,0x38,0x2d,0x33,0x2e, - 0x38,0x35,0x2c,0x37,0x2e,0x31,0x31,0x35,0x2d,0x36, - 0x2e,0x36,0x38,0x32,0x2c,0x39,0x2e,0x39,0x34,0x33, - 0x63,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x32,0x2e, - 0x38,0x33,0x36,0x2d,0x36,0x2e,0x31,0x34,0x36,0x2c, - 0x35,0x2e,0x30,0x36,0x2d,0x39,0x2e,0x39,0x34,0x37, - 0x2c,0x36,0x2e,0x36,0x38,0x32,0x0d,0x0a,0x09,0x09, - 0x63,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2c,0x31,0x2e, - 0x36,0x32,0x33,0x2d,0x37,0x2e,0x38,0x33,0x38,0x2c, - 0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32,0x2e,0x31, - 0x31,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34,0x68,0x2d, - 0x38,0x2e,0x34,0x39,0x36,0x63,0x2d,0x34,0x2e,0x32, - 0x38,0x33,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32,0x34, - 0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e, - 0x31,0x32,0x31,0x2d,0x32,0x2e,0x34,0x33,0x34,0x63, - 0x2d,0x33,0x2e,0x38,0x2d,0x31,0x2e,0x36,0x32,0x33, - 0x2d,0x37,0x2e,0x31,0x31,0x35,0x2d,0x33,0x2e,0x38, - 0x34,0x36,0x2d,0x39,0x2e,0x39,0x34,0x32,0x2d,0x36, - 0x2e,0x36,0x38,0x32,0x0d,0x0a,0x09,0x09,0x63,0x2d, - 0x32,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x38,0x32, - 0x38,0x2d,0x35,0x2e,0x30,0x36,0x33,0x2d,0x36,0x2e, - 0x31,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x33,0x2d, - 0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x31,0x2e,0x36, - 0x32,0x36,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32, - 0x2e,0x34,0x33,0x34,0x2d,0x37,0x2e,0x38,0x33,0x38, - 0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32,0x2e, - 0x31,0x32,0x31,0x76,0x2d,0x34,0x37,0x2e,0x38,0x35, - 0x38,0x63,0x30,0x2d,0x34,0x2e,0x32,0x38,0x32,0x2c, - 0x30,0x2e,0x38,0x30,0x38,0x2d,0x38,0x2e,0x33,0x32, - 0x34,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32, - 0x2e,0x31,0x32,0x0d,0x0a,0x09,0x09,0x63,0x31,0x2e, - 0x36,0x31,0x39,0x2d,0x33,0x2e,0x38,0x30,0x31,0x2c, - 0x33,0x2e,0x38,0x34,0x37,0x2d,0x37,0x2e,0x31,0x31, - 0x35,0x2c,0x36,0x2e,0x36,0x38,0x33,0x2d,0x39,0x2e, - 0x39,0x34,0x37,0x63,0x32,0x2e,0x38,0x32,0x37,0x2d, - 0x32,0x2e,0x38,0x33,0x33,0x2c,0x36,0x2e,0x31,0x34, - 0x33,0x2d,0x35,0x2e,0x30,0x35,0x36,0x2c,0x39,0x2e, - 0x39,0x34,0x32,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63, - 0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e,0x36,0x31, - 0x39,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e, - 0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x32,0x31, - 0x2d,0x32,0x2e,0x34,0x33,0x34,0x68,0x38,0x2e,0x34, - 0x39,0x36,0x0d,0x0a,0x09,0x09,0x63,0x34,0x2e,0x32, - 0x37,0x39,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x32,0x2c, - 0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32,0x2e,0x31, - 0x31,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34,0x63,0x33, - 0x2e,0x38,0x2c,0x31,0x2e,0x36,0x32,0x36,0x2c,0x37, - 0x2e,0x31,0x31,0x35,0x2c,0x33,0x2e,0x38,0x35,0x2c, - 0x39,0x2e,0x39,0x34,0x37,0x2c,0x36,0x2e,0x36,0x38, - 0x32,0x73,0x35,0x2e,0x30,0x36,0x2c,0x36,0x2e,0x31, - 0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x32,0x2c,0x39, - 0x2e,0x39,0x34,0x37,0x63,0x31,0x2e,0x36,0x32,0x33, - 0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32,0x2e,0x34, - 0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32, - 0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x32, - 0x0d,0x0a,0x09,0x09,0x76,0x32,0x34,0x2e,0x39,0x36, - 0x34,0x68,0x2d,0x35,0x38,0x2e,0x31,0x31,0x34,0x76, - 0x32,0x33,0x2e,0x36,0x31,0x38,0x63,0x30,0x2c,0x32, - 0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x31, - 0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e,0x34, - 0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x63,0x30,0x2e, - 0x39,0x36,0x35,0x2c,0x32,0x2e,0x32,0x34,0x33,0x2c, - 0x32,0x2e,0x32,0x37,0x37,0x2c,0x34,0x2e,0x31,0x39, - 0x35,0x2c,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35,0x2e, - 0x38,0x35,0x32,0x63,0x31,0x2e,0x36,0x36,0x31,0x2c, - 0x31,0x2e,0x36,0x35,0x37,0x2c,0x33,0x2e,0x36,0x30, - 0x39,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e,0x38, - 0x35,0x35,0x2c,0x33,0x2e,0x39,0x33,0x38,0x0d,0x0a, + 0x0a,0x09,0x63,0x30,0x2c,0x36,0x2e,0x31,0x31,0x31, + 0x2c,0x33,0x2e,0x35,0x33,0x37,0x2c,0x31,0x34,0x2e, + 0x36,0x34,0x36,0x2c,0x37,0x2e,0x38,0x35,0x37,0x2c, + 0x31,0x38,0x2e,0x39,0x36,0x33,0x6c,0x32,0x35,0x2e, + 0x37,0x33,0x37,0x2c,0x32,0x35,0x2e,0x37,0x34,0x63, + 0x34,0x2e,0x33,0x32,0x31,0x2c,0x34,0x2e,0x33,0x31, + 0x37,0x2c,0x31,0x32,0x2e,0x38,0x35,0x35,0x2c,0x37, + 0x2e,0x38,0x35,0x34,0x2c,0x31,0x38,0x2e,0x39,0x36, + 0x33,0x2c,0x37,0x2e,0x38,0x35,0x34,0x68,0x31,0x30, + 0x32,0x2e,0x31,0x34,0x33,0x63,0x36,0x2e,0x31,0x31, + 0x32,0x2c,0x30,0x2c,0x37,0x2e,0x35,0x37,0x34,0x2d, + 0x33,0x2e,0x35,0x33,0x36,0x2c,0x33,0x2e,0x32,0x35, + 0x33,0x2d,0x37,0x2e,0x38,0x35,0x36,0x0a,0x09,0x6c, + 0x2d,0x32,0x35,0x2e,0x37,0x34,0x31,0x2d,0x32,0x35, + 0x2e,0x37,0x34,0x34,0x63,0x2d,0x34,0x2e,0x33,0x32, + 0x2d,0x34,0x2e,0x33,0x32,0x31,0x2d,0x31,0x32,0x2e, + 0x38,0x35,0x34,0x2d,0x37,0x2e,0x38,0x35,0x37,0x2d, + 0x31,0x38,0x2e,0x39,0x36,0x34,0x2d,0x37,0x2e,0x38, + 0x35,0x37,0x4c,0x31,0x31,0x31,0x2e,0x30,0x31,0x2c, + 0x34,0x34,0x32,0x2e,0x30,0x39,0x37,0x7a,0x22,0x2f, + 0x3e,0x0a,0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x35,0x35,0x38, + 0x2e,0x36,0x30,0x35,0x2c,0x33,0x32,0x36,0x2e,0x35, + 0x36,0x32,0x63,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2c, + 0x33,0x2e,0x38,0x2d,0x33,0x2e,0x38,0x35,0x2c,0x37, + 0x2e,0x31,0x31,0x35,0x2d,0x36,0x2e,0x36,0x38,0x32, + 0x2c,0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x32,0x2e, + 0x38,0x33,0x32,0x2c,0x32,0x2e,0x38,0x33,0x36,0x2d, + 0x36,0x2e,0x31,0x34,0x36,0x2c,0x35,0x2e,0x30,0x36, + 0x2d,0x39,0x2e,0x39,0x34,0x37,0x2c,0x36,0x2e,0x36, + 0x38,0x32,0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x37, + 0x39,0x36,0x2c,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37, + 0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34, + 0x2d,0x31,0x32,0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e, + 0x34,0x33,0x34,0x68,0x2d,0x38,0x2e,0x34,0x39,0x36, + 0x63,0x2d,0x34,0x2e,0x32,0x38,0x33,0x2c,0x30,0x2d, + 0x38,0x2e,0x33,0x32,0x34,0x2d,0x30,0x2e,0x38,0x31, + 0x32,0x2d,0x31,0x32,0x2e,0x31,0x32,0x31,0x2d,0x32, + 0x2e,0x34,0x33,0x34,0x63,0x2d,0x33,0x2e,0x38,0x2d, + 0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x31, + 0x35,0x2d,0x33,0x2e,0x38,0x34,0x36,0x2d,0x39,0x2e, + 0x39,0x34,0x32,0x2d,0x36,0x2e,0x36,0x38,0x32,0x0a, + 0x09,0x09,0x63,0x2d,0x32,0x2e,0x38,0x33,0x36,0x2d, + 0x32,0x2e,0x38,0x32,0x38,0x2d,0x35,0x2e,0x30,0x36, + 0x33,0x2d,0x36,0x2e,0x31,0x34,0x33,0x2d,0x36,0x2e, + 0x36,0x38,0x33,0x2d,0x39,0x2e,0x39,0x34,0x33,0x63, + 0x2d,0x31,0x2e,0x36,0x32,0x36,0x2d,0x33,0x2e,0x37, + 0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x37, + 0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x34, + 0x2d,0x31,0x32,0x2e,0x31,0x32,0x31,0x76,0x2d,0x34, + 0x37,0x2e,0x38,0x35,0x38,0x63,0x30,0x2d,0x34,0x2e, + 0x32,0x38,0x32,0x2c,0x30,0x2e,0x38,0x30,0x38,0x2d, + 0x38,0x2e,0x33,0x32,0x34,0x2c,0x32,0x2e,0x34,0x33, + 0x34,0x2d,0x31,0x32,0x2e,0x31,0x32,0x0a,0x09,0x09, + 0x63,0x31,0x2e,0x36,0x31,0x39,0x2d,0x33,0x2e,0x38, + 0x30,0x31,0x2c,0x33,0x2e,0x38,0x34,0x37,0x2d,0x37, + 0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e,0x36,0x38,0x33, + 0x2d,0x39,0x2e,0x39,0x34,0x37,0x63,0x32,0x2e,0x38, + 0x32,0x37,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c,0x36, + 0x2e,0x31,0x34,0x33,0x2d,0x35,0x2e,0x30,0x35,0x36, + 0x2c,0x39,0x2e,0x39,0x34,0x32,0x2d,0x36,0x2e,0x36, + 0x38,0x32,0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31, + 0x2e,0x36,0x31,0x39,0x2c,0x37,0x2e,0x38,0x33,0x38, + 0x2d,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, + 0x31,0x32,0x31,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68, + 0x38,0x2e,0x34,0x39,0x36,0x0a,0x09,0x09,0x63,0x34, + 0x2e,0x32,0x37,0x39,0x2c,0x30,0x2c,0x38,0x2e,0x33, + 0x32,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32, + 0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34, + 0x63,0x33,0x2e,0x38,0x2c,0x31,0x2e,0x36,0x32,0x36, + 0x2c,0x37,0x2e,0x31,0x31,0x35,0x2c,0x33,0x2e,0x38, + 0x35,0x2c,0x39,0x2e,0x39,0x34,0x37,0x2c,0x36,0x2e, + 0x36,0x38,0x32,0x73,0x35,0x2e,0x30,0x36,0x2c,0x36, + 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x32, + 0x2c,0x39,0x2e,0x39,0x34,0x37,0x63,0x31,0x2e,0x36, + 0x32,0x33,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32, + 0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38, + 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, + 0x31,0x32,0x0a,0x09,0x09,0x76,0x32,0x34,0x2e,0x39, + 0x36,0x34,0x68,0x2d,0x35,0x38,0x2e,0x31,0x31,0x34, + 0x76,0x32,0x33,0x2e,0x36,0x31,0x38,0x63,0x30,0x2c, + 0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38, + 0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e, + 0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x63,0x30, + 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32,0x34,0x33, + 0x2c,0x32,0x2e,0x32,0x37,0x37,0x2c,0x34,0x2e,0x31, + 0x39,0x35,0x2c,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35, + 0x2e,0x38,0x35,0x32,0x63,0x31,0x2e,0x36,0x36,0x31, + 0x2c,0x31,0x2e,0x36,0x35,0x37,0x2c,0x33,0x2e,0x36, + 0x30,0x39,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e, + 0x38,0x35,0x35,0x2c,0x33,0x2e,0x39,0x33,0x38,0x0a, 0x09,0x09,0x63,0x32,0x2e,0x32,0x34,0x33,0x2c,0x30, 0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34,0x33, 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x31, @@ -508,105 +503,104 @@ const unsigned char splash_svg_data[17935] = { 0x34,0x33,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c,0x34, 0x2e,0x31,0x39,0x35,0x2d,0x32,0x2e,0x32,0x38,0x31, 0x2c,0x35,0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e,0x39, - 0x33,0x38,0x0d,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36, - 0x35,0x37,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32, - 0x2e,0x39,0x37,0x31,0x2d,0x33,0x2e,0x36,0x30,0x39, - 0x2c,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38, - 0x35,0x32,0x63,0x30,0x2e,0x39,0x36,0x34,0x2d,0x32, - 0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35,0x31, - 0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34, - 0x35,0x31,0x2d,0x37,0x2e,0x32,0x30,0x32,0x76,0x2d, - 0x37,0x2e,0x30,0x34,0x32,0x6c,0x31,0x32,0x2e,0x37, - 0x33,0x39,0x2c,0x32,0x2e,0x30,0x37,0x76,0x34,0x2e, - 0x32,0x34,0x38,0x0d,0x0a,0x09,0x09,0x43,0x35,0x36, - 0x31,0x2e,0x30,0x33,0x38,0x2c,0x33,0x31,0x38,0x2e, - 0x37,0x32,0x34,0x2c,0x35,0x36,0x30,0x2e,0x32,0x32, - 0x38,0x2c,0x33,0x32,0x32,0x2e,0x37,0x36,0x35,0x2c, - 0x35,0x35,0x38,0x2e,0x36,0x30,0x35,0x2c,0x33,0x32, - 0x36,0x2e,0x35,0x36,0x32,0x7a,0x20,0x4d,0x35,0x34, - 0x38,0x2e,0x32,0x39,0x39,0x2c,0x32,0x36,0x35,0x2e, - 0x38,0x35,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35, - 0x33,0x2d,0x30,0x2e,0x34,0x38,0x36,0x2d,0x34,0x2e, - 0x39,0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2d, - 0x37,0x2e,0x31,0x39,0x39,0x0d,0x0a,0x09,0x09,0x63, - 0x2d,0x30,0x2e,0x39,0x36,0x38,0x2d,0x32,0x2e,0x32, - 0x34,0x33,0x2d,0x32,0x2e,0x32,0x38,0x31,0x2d,0x34, - 0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38, - 0x2d,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x31,0x2e, - 0x36,0x35,0x36,0x2d,0x31,0x2e,0x36,0x35,0x38,0x2d, - 0x33,0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37, - 0x2d,0x35,0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e,0x39, - 0x33,0x38,0x63,0x2d,0x32,0x2e,0x32,0x34,0x37,0x2d, - 0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34, - 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31, - 0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d,0x38, - 0x2e,0x34,0x39,0x36,0x0d,0x0a,0x09,0x09,0x63,0x2d, - 0x32,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e, - 0x39,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d, - 0x37,0x2e,0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x35, - 0x63,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x30,0x2e, - 0x39,0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c, - 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35, - 0x35,0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x31, - 0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e,0x36,0x35,0x37, - 0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x30, - 0x39,0x2d,0x33,0x2e,0x39,0x33,0x34,0x2c,0x35,0x2e, - 0x38,0x35,0x32,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37, - 0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x34,0x2e,0x36, - 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x37, - 0x2e,0x31,0x39,0x39,0x56,0x32,0x38,0x31,0x2e,0x36, - 0x68,0x34,0x35,0x2e,0x33,0x37,0x35,0x4c,0x35,0x34, - 0x38,0x2e,0x32,0x39,0x39,0x2c,0x32,0x36,0x35,0x2e, - 0x38,0x35,0x35,0x4c,0x35,0x34,0x38,0x2e,0x32,0x39, - 0x39,0x2c,0x32,0x36,0x35,0x2e,0x38,0x35,0x35,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x64,0x3d,0x22,0x4d,0x36,0x39,0x38,0x2e, - 0x35,0x30,0x36,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35, - 0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x35,0x63,0x30, - 0x2d,0x32,0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34, - 0x38,0x32,0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31, - 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x39,0x63, - 0x2d,0x30,0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e,0x32, - 0x34,0x33,0x2d,0x32,0x2e,0x32,0x37,0x37,0x2d,0x34, - 0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38, - 0x2d,0x35,0x2e,0x38,0x35,0x32,0x0d,0x0a,0x09,0x09, - 0x63,0x2d,0x31,0x2e,0x36,0x35,0x32,0x2d,0x31,0x2e, - 0x36,0x35,0x37,0x2d,0x33,0x2e,0x36,0x30,0x38,0x2d, - 0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e,0x38,0x35,0x32, - 0x2d,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x32,0x2e, - 0x32,0x34,0x37,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d, - 0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35, - 0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34, - 0x35,0x68,0x2d,0x36,0x2e,0x33,0x31,0x37,0x63,0x2d, - 0x32,0x2e,0x35,0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e, - 0x39,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d, - 0x37,0x2e,0x32,0x30,0x32,0x2c,0x31,0x2e,0x34,0x35, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34, - 0x33,0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d,0x34,0x2e, - 0x32,0x31,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35, - 0x2e,0x39,0x30,0x32,0x2c,0x33,0x2e,0x39,0x33,0x38, - 0x63,0x2d,0x31,0x2e,0x36,0x39,0x35,0x2c,0x31,0x2e, - 0x36,0x35,0x37,0x2d,0x33,0x2e,0x30,0x32,0x33,0x2c, - 0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e,0x39,0x39, - 0x31,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x30, - 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32,0x34,0x37, - 0x2d,0x31,0x2e,0x34,0x34,0x35,0x2c,0x34,0x2e,0x36, - 0x34,0x36,0x2d,0x31,0x2e,0x34,0x34,0x35,0x2c,0x37, - 0x2e,0x31,0x39,0x39,0x76,0x37,0x37,0x2e,0x36,0x39, - 0x35,0x68,0x2d,0x31,0x32,0x2e,0x36,0x34,0x33,0x0d, - 0x0a,0x09,0x09,0x76,0x2d,0x37,0x37,0x2e,0x36,0x39, + 0x33,0x38,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x35, + 0x37,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32,0x2e, + 0x39,0x37,0x31,0x2d,0x33,0x2e,0x36,0x30,0x39,0x2c, + 0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38,0x35, + 0x32,0x63,0x30,0x2e,0x39,0x36,0x34,0x2d,0x32,0x2e, + 0x32,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35,0x31,0x2d, + 0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35, + 0x31,0x2d,0x37,0x2e,0x32,0x30,0x32,0x76,0x2d,0x37, + 0x2e,0x30,0x34,0x32,0x6c,0x31,0x32,0x2e,0x37,0x33, + 0x39,0x2c,0x32,0x2e,0x30,0x37,0x76,0x34,0x2e,0x32, + 0x34,0x38,0x0a,0x09,0x09,0x43,0x35,0x36,0x31,0x2e, + 0x30,0x33,0x38,0x2c,0x33,0x31,0x38,0x2e,0x37,0x32, + 0x34,0x2c,0x35,0x36,0x30,0x2e,0x32,0x32,0x38,0x2c, + 0x33,0x32,0x32,0x2e,0x37,0x36,0x35,0x2c,0x35,0x35, + 0x38,0x2e,0x36,0x30,0x35,0x2c,0x33,0x32,0x36,0x2e, + 0x35,0x36,0x32,0x7a,0x20,0x4d,0x35,0x34,0x38,0x2e, + 0x32,0x39,0x39,0x2c,0x32,0x36,0x35,0x2e,0x38,0x35, 0x35,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x33,0x2d, - 0x30,0x2e,0x34,0x38,0x32,0x2d,0x34,0x2e,0x39,0x35, - 0x32,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31, - 0x39,0x39,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2d, - 0x32,0x2e,0x32,0x34,0x33,0x2d,0x32,0x2e,0x32,0x39, - 0x36,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e, - 0x39,0x38,0x37,0x2d,0x35,0x2e,0x38,0x35,0x32,0x63, - 0x2d,0x31,0x2e,0x36,0x39,0x31,0x2d,0x31,0x2e,0x36, - 0x35,0x37,0x2d,0x33,0x2e,0x36,0x35,0x38,0x2d,0x32, - 0x2e,0x39,0x37,0x2d,0x35,0x2e,0x39,0x30,0x35,0x2d, - 0x33,0x2e,0x39,0x33,0x38,0x0d,0x0a,0x09,0x09,0x63, + 0x30,0x2e,0x34,0x38,0x36,0x2d,0x34,0x2e,0x39,0x35, + 0x32,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2d,0x37,0x2e, + 0x31,0x39,0x39,0x0a,0x09,0x09,0x63,0x2d,0x30,0x2e, + 0x39,0x36,0x38,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d, + 0x32,0x2e,0x32,0x38,0x31,0x2d,0x34,0x2e,0x31,0x39, + 0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, + 0x38,0x35,0x32,0x63,0x2d,0x31,0x2e,0x36,0x35,0x36, + 0x2d,0x31,0x2e,0x36,0x35,0x38,0x2d,0x33,0x2e,0x36, + 0x30,0x38,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e, + 0x38,0x35,0x32,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63, + 0x2d,0x32,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x39, + 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d, + 0x31,0x2e,0x34,0x35,0x68,0x2d,0x38,0x2e,0x34,0x39, + 0x36,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x35, + 0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c, + 0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x31,0x39, + 0x39,0x2c,0x31,0x2e,0x34,0x35,0x63,0x2d,0x32,0x2e, + 0x32,0x34,0x36,0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d, + 0x34,0x2e,0x31,0x39,0x34,0x2c,0x32,0x2e,0x32,0x38, + 0x31,0x2d,0x35,0x2e,0x38,0x35,0x35,0x2c,0x33,0x2e, + 0x39,0x33,0x38,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37, + 0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39, + 0x37,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e, + 0x39,0x33,0x34,0x2c,0x35,0x2e,0x38,0x35,0x32,0x0a, + 0x09,0x09,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2c, + 0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e,0x34,0x35, + 0x31,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, + 0x34,0x35,0x31,0x2c,0x37,0x2e,0x31,0x39,0x39,0x56, + 0x32,0x38,0x31,0x2e,0x36,0x68,0x34,0x35,0x2e,0x33, + 0x37,0x35,0x4c,0x35,0x34,0x38,0x2e,0x32,0x39,0x39, + 0x2c,0x32,0x36,0x35,0x2e,0x38,0x35,0x35,0x4c,0x35, + 0x34,0x38,0x2e,0x32,0x39,0x39,0x2c,0x32,0x36,0x35, + 0x2e,0x38,0x35,0x35,0x7a,0x22,0x2f,0x3e,0x0a,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, + 0x36,0x39,0x38,0x2e,0x35,0x30,0x36,0x2c,0x33,0x34, + 0x33,0x2e,0x35,0x35,0x76,0x2d,0x37,0x37,0x2e,0x36, + 0x39,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x33, + 0x2d,0x30,0x2e,0x34,0x38,0x32,0x2d,0x34,0x2e,0x39, + 0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, + 0x31,0x39,0x39,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39, + 0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x32,0x2e,0x32, + 0x37,0x37,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33, + 0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38,0x35,0x32, + 0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36,0x35,0x32, + 0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x36, + 0x30,0x38,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e, + 0x38,0x35,0x32,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63, + 0x2d,0x32,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x39, + 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d, + 0x31,0x2e,0x34,0x35,0x68,0x2d,0x36,0x2e,0x33,0x31, + 0x37,0x63,0x2d,0x32,0x2e,0x35,0x35,0x38,0x2c,0x30, + 0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c,0x30,0x2e,0x34, + 0x38,0x36,0x2d,0x37,0x2e,0x32,0x30,0x32,0x2c,0x31, + 0x2e,0x34,0x35,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e, + 0x32,0x34,0x33,0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d, + 0x34,0x2e,0x32,0x31,0x2c,0x32,0x2e,0x32,0x38,0x31, + 0x2d,0x35,0x2e,0x39,0x30,0x32,0x2c,0x33,0x2e,0x39, + 0x33,0x38,0x63,0x2d,0x31,0x2e,0x36,0x39,0x35,0x2c, + 0x31,0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x30,0x32, + 0x33,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e, + 0x39,0x39,0x31,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63, + 0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32, + 0x34,0x37,0x2d,0x31,0x2e,0x34,0x34,0x35,0x2c,0x34, + 0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x34,0x35, + 0x2c,0x37,0x2e,0x31,0x39,0x39,0x76,0x37,0x37,0x2e, + 0x36,0x39,0x35,0x68,0x2d,0x31,0x32,0x2e,0x36,0x34, + 0x33,0x0a,0x09,0x09,0x76,0x2d,0x37,0x37,0x2e,0x36, + 0x39,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x33, + 0x2d,0x30,0x2e,0x34,0x38,0x32,0x2d,0x34,0x2e,0x39, + 0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, + 0x31,0x39,0x39,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38, + 0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x32,0x2e,0x32, + 0x39,0x36,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33, + 0x2e,0x39,0x38,0x37,0x2d,0x35,0x2e,0x38,0x35,0x32, + 0x63,0x2d,0x31,0x2e,0x36,0x39,0x31,0x2d,0x31,0x2e, + 0x36,0x35,0x37,0x2d,0x33,0x2e,0x36,0x35,0x38,0x2d, + 0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e,0x39,0x30,0x35, + 0x2d,0x33,0x2e,0x39,0x33,0x38,0x0a,0x09,0x09,0x63, 0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d,0x30,0x2e,0x39, 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x33,0x2d,0x31, 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d, @@ -618,99 +612,98 @@ const unsigned char splash_svg_data[17935] = { 0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d,0x34,0x2e,0x31, 0x39,0x35,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35, 0x2e,0x38,0x35,0x35,0x2c,0x33,0x2e,0x39,0x33,0x38, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36,0x35, - 0x37,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e, - 0x39,0x37,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33, - 0x2e,0x39,0x33,0x35,0x2c,0x35,0x2e,0x38,0x35,0x32, - 0x63,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e, - 0x32,0x34,0x37,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34, - 0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c, - 0x37,0x2e,0x31,0x39,0x39,0x76,0x37,0x37,0x2e,0x36, - 0x39,0x35,0x68,0x2d,0x31,0x32,0x2e,0x37,0x34,0x31, - 0x56,0x32,0x33,0x37,0x2e,0x34,0x37,0x34,0x68,0x34, - 0x2e,0x32,0x34,0x34,0x6c,0x36,0x2e,0x39,0x34,0x33, - 0x2c,0x31,0x30,0x2e,0x37,0x37,0x33,0x0d,0x0a,0x09, - 0x09,0x63,0x32,0x2e,0x38,0x39,0x39,0x2d,0x33,0x2e, - 0x39,0x33,0x38,0x2c,0x36,0x2e,0x35,0x34,0x2d,0x37, - 0x2e,0x30,0x36,0x31,0x2c,0x31,0x30,0x2e,0x39,0x33, - 0x2d,0x39,0x2e,0x33,0x37,0x36,0x63,0x34,0x2e,0x33, - 0x38,0x32,0x2d,0x32,0x2e,0x33,0x31,0x32,0x2c,0x39, - 0x2e,0x31,0x36,0x36,0x2d,0x33,0x2e,0x34,0x37,0x31, - 0x2c,0x31,0x34,0x2e,0x33,0x34,0x34,0x2d,0x33,0x2e, - 0x34,0x37,0x31,0x68,0x31,0x2e,0x30,0x33,0x37,0x63, - 0x36,0x2e,0x30,0x30,0x39,0x2c,0x30,0x2c,0x31,0x31, - 0x2e,0x34,0x32,0x38,0x2c,0x31,0x2e,0x34,0x38,0x35, - 0x2c,0x31,0x36,0x2e,0x32,0x36,0x36,0x2c,0x34,0x2e, - 0x34,0x35,0x35,0x0d,0x0a,0x09,0x09,0x63,0x34,0x2e, - 0x38,0x33,0x33,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x38, - 0x2e,0x35,0x36,0x32,0x2c,0x36,0x2e,0x39,0x30,0x38, - 0x2c,0x31,0x31,0x2e,0x31,0x38,0x37,0x2c,0x31,0x31, - 0x2e,0x38,0x31,0x31,0x63,0x31,0x2e,0x33,0x31,0x32, - 0x2d,0x32,0x2e,0x34,0x31,0x39,0x2c,0x32,0x2e,0x39, - 0x33,0x36,0x2d,0x34,0x2e,0x36,0x32,0x37,0x2c,0x34, - 0x2e,0x38,0x36,0x39,0x2d,0x36,0x2e,0x36,0x32,0x39, - 0x63,0x31,0x2e,0x39,0x33,0x33,0x2d,0x32,0x2e,0x30, - 0x30,0x35,0x2c,0x34,0x2e,0x30,0x37,0x35,0x2d,0x33, - 0x2e,0x37,0x31,0x32,0x2c,0x36,0x2e,0x34,0x32,0x32, - 0x2d,0x35,0x2e,0x31,0x32,0x38,0x0d,0x0a,0x09,0x09, - 0x63,0x32,0x2e,0x33,0x35,0x2d,0x31,0x2e,0x34,0x31, - 0x36,0x2c,0x34,0x2e,0x39,0x30,0x36,0x2d,0x32,0x2e, - 0x35,0x32,0x32,0x2c,0x37,0x2e,0x36,0x36,0x39,0x2d, - 0x33,0x2e,0x33,0x31,0x38,0x63,0x32,0x2e,0x37,0x36, - 0x2d,0x30,0x2e,0x37,0x39,0x32,0x2c,0x35,0x2e,0x36, - 0x32,0x36,0x2d,0x31,0x2e,0x31,0x39,0x2c,0x38,0x2e, - 0x35,0x39,0x36,0x2d,0x31,0x2e,0x31,0x39,0x68,0x31, - 0x2e,0x30,0x33,0x37,0x63,0x34,0x2e,0x32,0x37,0x39, - 0x2c,0x30,0x2c,0x38,0x2e,0x33,0x32,0x2c,0x30,0x2e, - 0x38,0x31,0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x31, - 0x2c,0x32,0x2e,0x34,0x33,0x34,0x0d,0x0a,0x09,0x09, - 0x63,0x33,0x2e,0x37,0x39,0x36,0x2c,0x31,0x2e,0x36, - 0x32,0x36,0x2c,0x37,0x2e,0x31,0x31,0x34,0x2c,0x33, - 0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39,0x34,0x36,0x2c, - 0x36,0x2e,0x36,0x38,0x32,0x63,0x32,0x2e,0x38,0x32, - 0x38,0x2c,0x32,0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e, - 0x30,0x35,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c, - 0x36,0x2e,0x36,0x38,0x33,0x2c,0x39,0x2e,0x39,0x34, - 0x37,0x63,0x31,0x2e,0x36,0x31,0x38,0x2c,0x33,0x2e, - 0x37,0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c, - 0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33, - 0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x76,0x37,0x36, - 0x2e,0x39,0x36,0x38,0x68,0x2d,0x31,0x32,0x2e,0x37, - 0x34,0x37,0x0d,0x0a,0x09,0x09,0x56,0x33,0x34,0x33, - 0x2e,0x35,0x35,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, - 0x38,0x30,0x33,0x2e,0x33,0x34,0x33,0x2c,0x33,0x34, - 0x33,0x2e,0x35,0x35,0x6c,0x2d,0x37,0x2e,0x30,0x34, - 0x36,0x2d,0x31,0x30,0x2e,0x37,0x37,0x33,0x63,0x2d, - 0x32,0x2e,0x39,0x30,0x31,0x2c,0x33,0x2e,0x39,0x33, - 0x38,0x2d,0x36,0x2e,0x35,0x32,0x35,0x2c,0x37,0x2e, - 0x30,0x36,0x31,0x2d,0x31,0x30,0x2e,0x38,0x37,0x38, - 0x2c,0x39,0x2e,0x33,0x37,0x36,0x63,0x2d,0x34,0x2e, - 0x33,0x34,0x38,0x2c,0x32,0x2e,0x33,0x31,0x32,0x2d, - 0x39,0x2e,0x31,0x31,0x35,0x2c,0x33,0x2e,0x34,0x36, - 0x37,0x2d,0x31,0x34,0x2e,0x32,0x39,0x34,0x2c,0x33, - 0x2e,0x34,0x36,0x37,0x68,0x2d,0x33,0x2e,0x32,0x31, - 0x31,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x34,0x2e,0x32, - 0x38,0x36,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32,0x33, - 0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e, - 0x31,0x32,0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d, - 0x33,0x2e,0x38,0x30,0x31,0x2d,0x31,0x2e,0x36,0x32, - 0x33,0x2d,0x37,0x2e,0x31,0x31,0x34,0x2d,0x33,0x2e, - 0x38,0x34,0x36,0x2d,0x39,0x2e,0x39,0x34,0x36,0x2d, - 0x36,0x2e,0x36,0x38,0x32,0x63,0x2d,0x32,0x2e,0x38, - 0x33,0x32,0x2d,0x32,0x2e,0x38,0x32,0x38,0x2d,0x35, - 0x2e,0x30,0x36,0x31,0x2d,0x36,0x2e,0x31,0x34,0x33, - 0x2d,0x36,0x2e,0x36,0x38,0x34,0x2d,0x39,0x2e,0x39, - 0x34,0x33,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e, - 0x36,0x32,0x32,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d, - 0x32,0x2e,0x34,0x33,0x34,0x2d,0x37,0x2e,0x38,0x33, - 0x38,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32, - 0x2e,0x31,0x32,0x31,0x76,0x2d,0x37,0x36,0x2e,0x39, - 0x36,0x36,0x68,0x31,0x32,0x2e,0x37,0x34,0x34,0x76, - 0x37,0x37,0x2e,0x36,0x39,0x31,0x63,0x30,0x2c,0x32, - 0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x31, - 0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e,0x34, - 0x34,0x36,0x2c,0x37,0x2e,0x32,0x30,0x32,0x0d,0x0a, + 0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37, + 0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39, + 0x37,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e, + 0x39,0x33,0x35,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63, + 0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e,0x32, + 0x34,0x37,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e, + 0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37, + 0x2e,0x31,0x39,0x39,0x76,0x37,0x37,0x2e,0x36,0x39, + 0x35,0x68,0x2d,0x31,0x32,0x2e,0x37,0x34,0x31,0x56, + 0x32,0x33,0x37,0x2e,0x34,0x37,0x34,0x68,0x34,0x2e, + 0x32,0x34,0x34,0x6c,0x36,0x2e,0x39,0x34,0x33,0x2c, + 0x31,0x30,0x2e,0x37,0x37,0x33,0x0a,0x09,0x09,0x63, + 0x32,0x2e,0x38,0x39,0x39,0x2d,0x33,0x2e,0x39,0x33, + 0x38,0x2c,0x36,0x2e,0x35,0x34,0x2d,0x37,0x2e,0x30, + 0x36,0x31,0x2c,0x31,0x30,0x2e,0x39,0x33,0x2d,0x39, + 0x2e,0x33,0x37,0x36,0x63,0x34,0x2e,0x33,0x38,0x32, + 0x2d,0x32,0x2e,0x33,0x31,0x32,0x2c,0x39,0x2e,0x31, + 0x36,0x36,0x2d,0x33,0x2e,0x34,0x37,0x31,0x2c,0x31, + 0x34,0x2e,0x33,0x34,0x34,0x2d,0x33,0x2e,0x34,0x37, + 0x31,0x68,0x31,0x2e,0x30,0x33,0x37,0x63,0x36,0x2e, + 0x30,0x30,0x39,0x2c,0x30,0x2c,0x31,0x31,0x2e,0x34, + 0x32,0x38,0x2c,0x31,0x2e,0x34,0x38,0x35,0x2c,0x31, + 0x36,0x2e,0x32,0x36,0x36,0x2c,0x34,0x2e,0x34,0x35, + 0x35,0x0a,0x09,0x09,0x63,0x34,0x2e,0x38,0x33,0x33, + 0x2c,0x32,0x2e,0x39,0x37,0x2c,0x38,0x2e,0x35,0x36, + 0x32,0x2c,0x36,0x2e,0x39,0x30,0x38,0x2c,0x31,0x31, + 0x2e,0x31,0x38,0x37,0x2c,0x31,0x31,0x2e,0x38,0x31, + 0x31,0x63,0x31,0x2e,0x33,0x31,0x32,0x2d,0x32,0x2e, + 0x34,0x31,0x39,0x2c,0x32,0x2e,0x39,0x33,0x36,0x2d, + 0x34,0x2e,0x36,0x32,0x37,0x2c,0x34,0x2e,0x38,0x36, + 0x39,0x2d,0x36,0x2e,0x36,0x32,0x39,0x63,0x31,0x2e, + 0x39,0x33,0x33,0x2d,0x32,0x2e,0x30,0x30,0x35,0x2c, + 0x34,0x2e,0x30,0x37,0x35,0x2d,0x33,0x2e,0x37,0x31, + 0x32,0x2c,0x36,0x2e,0x34,0x32,0x32,0x2d,0x35,0x2e, + 0x31,0x32,0x38,0x0a,0x09,0x09,0x63,0x32,0x2e,0x33, + 0x35,0x2d,0x31,0x2e,0x34,0x31,0x36,0x2c,0x34,0x2e, + 0x39,0x30,0x36,0x2d,0x32,0x2e,0x35,0x32,0x32,0x2c, + 0x37,0x2e,0x36,0x36,0x39,0x2d,0x33,0x2e,0x33,0x31, + 0x38,0x63,0x32,0x2e,0x37,0x36,0x2d,0x30,0x2e,0x37, + 0x39,0x32,0x2c,0x35,0x2e,0x36,0x32,0x36,0x2d,0x31, + 0x2e,0x31,0x39,0x2c,0x38,0x2e,0x35,0x39,0x36,0x2d, + 0x31,0x2e,0x31,0x39,0x68,0x31,0x2e,0x30,0x33,0x37, + 0x63,0x34,0x2e,0x32,0x37,0x39,0x2c,0x30,0x2c,0x38, + 0x2e,0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c, + 0x31,0x32,0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e,0x34, + 0x33,0x34,0x0a,0x09,0x09,0x63,0x33,0x2e,0x37,0x39, + 0x36,0x2c,0x31,0x2e,0x36,0x32,0x36,0x2c,0x37,0x2e, + 0x31,0x31,0x34,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39, + 0x2e,0x39,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x32, + 0x63,0x32,0x2e,0x38,0x32,0x38,0x2c,0x32,0x2e,0x38, + 0x33,0x32,0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c,0x36, + 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x33, + 0x2c,0x39,0x2e,0x39,0x34,0x37,0x63,0x31,0x2e,0x36, + 0x31,0x38,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32, + 0x2e,0x34,0x33,0x35,0x2c,0x37,0x2e,0x38,0x33,0x38, + 0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32,0x2e, + 0x31,0x32,0x76,0x37,0x36,0x2e,0x39,0x36,0x38,0x68, + 0x2d,0x31,0x32,0x2e,0x37,0x34,0x37,0x0a,0x09,0x09, + 0x56,0x33,0x34,0x33,0x2e,0x35,0x35,0x7a,0x22,0x2f, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x38,0x30,0x33,0x2e,0x33,0x34,0x33, + 0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x6c,0x2d,0x37, + 0x2e,0x30,0x34,0x36,0x2d,0x31,0x30,0x2e,0x37,0x37, + 0x33,0x63,0x2d,0x32,0x2e,0x39,0x30,0x31,0x2c,0x33, + 0x2e,0x39,0x33,0x38,0x2d,0x36,0x2e,0x35,0x32,0x35, + 0x2c,0x37,0x2e,0x30,0x36,0x31,0x2d,0x31,0x30,0x2e, + 0x38,0x37,0x38,0x2c,0x39,0x2e,0x33,0x37,0x36,0x63, + 0x2d,0x34,0x2e,0x33,0x34,0x38,0x2c,0x32,0x2e,0x33, + 0x31,0x32,0x2d,0x39,0x2e,0x31,0x31,0x35,0x2c,0x33, + 0x2e,0x34,0x36,0x37,0x2d,0x31,0x34,0x2e,0x32,0x39, + 0x34,0x2c,0x33,0x2e,0x34,0x36,0x37,0x68,0x2d,0x33, + 0x2e,0x32,0x31,0x31,0x0a,0x09,0x09,0x63,0x2d,0x34, + 0x2e,0x32,0x38,0x36,0x2c,0x30,0x2d,0x38,0x2e,0x33, + 0x32,0x33,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31, + 0x32,0x2e,0x31,0x32,0x2d,0x32,0x2e,0x34,0x33,0x34, + 0x63,0x2d,0x33,0x2e,0x38,0x30,0x31,0x2d,0x31,0x2e, + 0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x31,0x34,0x2d, + 0x33,0x2e,0x38,0x34,0x36,0x2d,0x39,0x2e,0x39,0x34, + 0x36,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63,0x2d,0x32, + 0x2e,0x38,0x33,0x32,0x2d,0x32,0x2e,0x38,0x32,0x38, + 0x2d,0x35,0x2e,0x30,0x36,0x31,0x2d,0x36,0x2e,0x31, + 0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x34,0x2d,0x39, + 0x2e,0x39,0x34,0x33,0x0a,0x09,0x09,0x63,0x2d,0x31, + 0x2e,0x36,0x32,0x32,0x2d,0x33,0x2e,0x37,0x39,0x36, + 0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x37,0x2e,0x38, + 0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31, + 0x32,0x2e,0x31,0x32,0x31,0x76,0x2d,0x37,0x36,0x2e, + 0x39,0x36,0x36,0x68,0x31,0x32,0x2e,0x37,0x34,0x34, + 0x76,0x37,0x37,0x2e,0x36,0x39,0x31,0x63,0x30,0x2c, + 0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38, + 0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e, + 0x34,0x34,0x36,0x2c,0x37,0x2e,0x32,0x30,0x32,0x0a, 0x09,0x09,0x63,0x30,0x2e,0x39,0x36,0x39,0x2c,0x32, 0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x38,0x2c, 0x34,0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e,0x39,0x33, @@ -722,100 +715,99 @@ const unsigned char splash_svg_data[17935] = { 0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34,0x36, 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x32, 0x30,0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38, - 0x2e,0x34,0x39,0x36,0x0d,0x0a,0x09,0x09,0x63,0x32, - 0x2e,0x35,0x34,0x39,0x2c,0x30,0x2c,0x34,0x2e,0x39, - 0x35,0x32,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37, - 0x2e,0x31,0x39,0x34,0x2d,0x31,0x2e,0x34,0x34,0x37, - 0x63,0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e,0x39, - 0x36,0x38,0x2c,0x34,0x2e,0x31,0x39,0x38,0x2d,0x32, - 0x2e,0x32,0x38,0x31,0x2c,0x35,0x2e,0x38,0x35,0x34, - 0x2d,0x33,0x2e,0x39,0x33,0x38,0x63,0x31,0x2e,0x36, - 0x35,0x37,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32, - 0x2e,0x39,0x37,0x31,0x2d,0x33,0x2e,0x36,0x30,0x39, - 0x2c,0x33,0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e,0x38, - 0x35,0x32,0x0d,0x0a,0x09,0x09,0x63,0x30,0x2e,0x39, - 0x36,0x39,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x31, - 0x2e,0x34,0x35,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36, - 0x2c,0x31,0x2e,0x34,0x35,0x34,0x2d,0x37,0x2e,0x32, - 0x30,0x32,0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x31, - 0x68,0x31,0x32,0x2e,0x37,0x33,0x36,0x56,0x33,0x34, - 0x33,0x2e,0x35,0x35,0x48,0x38,0x30,0x33,0x2e,0x33, - 0x34,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x38, - 0x33,0x37,0x2e,0x33,0x31,0x39,0x2c,0x33,0x34,0x33, - 0x2e,0x35,0x35,0x56,0x31,0x39,0x35,0x68,0x31,0x32, - 0x2e,0x37,0x34,0x76,0x31,0x34,0x38,0x2e,0x35,0x35, - 0x48,0x38,0x33,0x37,0x2e,0x33,0x31,0x39,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x64,0x3d,0x22,0x4d,0x39,0x34,0x36,0x2e,0x34, - 0x30,0x34,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x6c, - 0x2d,0x37,0x2e,0x30,0x34,0x36,0x2d,0x31,0x30,0x2e, - 0x35,0x36,0x37,0x63,0x2d,0x32,0x2e,0x39,0x2c,0x33, - 0x2e,0x38,0x2d,0x36,0x2e,0x35,0x32,0x35,0x2c,0x36, - 0x2e,0x38,0x35,0x34,0x2d,0x31,0x30,0x2e,0x38,0x38, - 0x31,0x2c,0x39,0x2e,0x31,0x37,0x63,0x2d,0x34,0x2e, - 0x33,0x34,0x38,0x2c,0x32,0x2e,0x33,0x31,0x32,0x2d, - 0x39,0x2e,0x31,0x31,0x36,0x2c,0x33,0x2e,0x34,0x36, - 0x37,0x2d,0x31,0x34,0x2e,0x32,0x39,0x2c,0x33,0x2e, - 0x34,0x36,0x37,0x68,0x2d,0x33,0x2e,0x32,0x31,0x35, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x34,0x2e,0x32,0x38, - 0x32,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32,0x2d,0x30, - 0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x31,0x31, - 0x36,0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d,0x33, - 0x2e,0x38,0x30,0x35,0x2d,0x31,0x2e,0x36,0x32,0x33, - 0x2d,0x37,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x38, - 0x34,0x36,0x2d,0x39,0x2e,0x39,0x34,0x37,0x2d,0x36, - 0x2e,0x36,0x38,0x32,0x63,0x2d,0x32,0x2e,0x38,0x33, - 0x36,0x2d,0x32,0x2e,0x38,0x32,0x38,0x2d,0x35,0x2e, - 0x30,0x36,0x32,0x2d,0x36,0x2e,0x31,0x34,0x33,0x2d, - 0x36,0x2e,0x36,0x38,0x32,0x2d,0x39,0x2e,0x39,0x34, - 0x33,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36, - 0x32,0x37,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32, - 0x2e,0x34,0x33,0x36,0x2d,0x37,0x2e,0x38,0x33,0x38, - 0x2d,0x32,0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e, - 0x31,0x32,0x31,0x76,0x2d,0x31,0x2e,0x30,0x33,0x37, - 0x63,0x30,0x2d,0x34,0x2e,0x32,0x37,0x39,0x2c,0x30, - 0x2e,0x38,0x30,0x39,0x2d,0x38,0x2e,0x33,0x32,0x2c, - 0x32,0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e,0x31, - 0x32,0x31,0x63,0x31,0x2e,0x36,0x31,0x38,0x2d,0x33, - 0x2e,0x37,0x39,0x36,0x2c,0x33,0x2e,0x38,0x34,0x36, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x2c,0x36,0x2e,0x36, - 0x38,0x32,0x2d,0x39,0x2e,0x39,0x34,0x33,0x0d,0x0a, - 0x09,0x09,0x63,0x32,0x2e,0x38,0x32,0x38,0x2d,0x32, - 0x2e,0x38,0x33,0x32,0x2c,0x36,0x2e,0x31,0x34,0x34, - 0x2d,0x35,0x2e,0x30,0x36,0x2c,0x39,0x2e,0x39,0x34, - 0x37,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63,0x33,0x2e, - 0x37,0x39,0x36,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2c, - 0x37,0x2e,0x38,0x33,0x34,0x2d,0x32,0x2e,0x34,0x33, - 0x34,0x2c,0x31,0x32,0x2e,0x31,0x31,0x36,0x2d,0x32, - 0x2e,0x34,0x33,0x34,0x68,0x32,0x36,0x2e,0x39,0x33, - 0x36,0x76,0x2d,0x31,0x36,0x2e,0x33,0x36,0x38,0x63, - 0x30,0x2d,0x32,0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e, - 0x34,0x38,0x31,0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d, - 0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x39, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x30,0x2e,0x39,0x36, - 0x39,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x32,0x2e, - 0x32,0x37,0x36,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d, - 0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38,0x35, - 0x32,0x63,0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d,0x31, - 0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x36,0x30,0x39, - 0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e,0x38,0x35, - 0x33,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x32, - 0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e,0x39,0x36,0x34, - 0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34, - 0x35,0x2d,0x37,0x2e,0x31,0x39,0x38,0x2d,0x31,0x2e, - 0x34,0x35,0x68,0x2d,0x37,0x2e,0x34,0x35,0x39,0x0d, - 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x35,0x38, - 0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c,0x30, - 0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x31,0x39,0x38, - 0x2c,0x31,0x2e,0x34,0x35,0x63,0x2d,0x32,0x2e,0x32, - 0x34,0x37,0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d,0x34, - 0x2e,0x31,0x39,0x35,0x2c,0x32,0x2e,0x32,0x38,0x31, - 0x2d,0x35,0x2e,0x38,0x35,0x36,0x2c,0x33,0x2e,0x39, - 0x33,0x38,0x63,0x2d,0x31,0x2e,0x36,0x35,0x32,0x2c, - 0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39,0x37, - 0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e,0x39, - 0x33,0x34,0x2c,0x35,0x2e,0x38,0x35,0x32,0x0d,0x0a, + 0x2e,0x34,0x39,0x36,0x0a,0x09,0x09,0x63,0x32,0x2e, + 0x35,0x34,0x39,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35, + 0x32,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e, + 0x31,0x39,0x34,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63, + 0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36, + 0x38,0x2c,0x34,0x2e,0x31,0x39,0x38,0x2d,0x32,0x2e, + 0x32,0x38,0x31,0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d, + 0x33,0x2e,0x39,0x33,0x38,0x63,0x31,0x2e,0x36,0x35, + 0x37,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32,0x2e, + 0x39,0x37,0x31,0x2d,0x33,0x2e,0x36,0x30,0x39,0x2c, + 0x33,0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e,0x38,0x35, + 0x32,0x0a,0x09,0x09,0x63,0x30,0x2e,0x39,0x36,0x39, + 0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e,0x34, + 0x35,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31, + 0x2e,0x34,0x35,0x34,0x2d,0x37,0x2e,0x32,0x30,0x32, + 0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x31,0x68,0x31, + 0x32,0x2e,0x37,0x33,0x36,0x56,0x33,0x34,0x33,0x2e, + 0x35,0x35,0x48,0x38,0x30,0x33,0x2e,0x33,0x34,0x33, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x64,0x3d,0x22,0x4d,0x38,0x33,0x37,0x2e, + 0x33,0x31,0x39,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35, + 0x56,0x31,0x39,0x35,0x68,0x31,0x32,0x2e,0x37,0x34, + 0x76,0x31,0x34,0x38,0x2e,0x35,0x35,0x48,0x38,0x33, + 0x37,0x2e,0x33,0x31,0x39,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, + 0x4d,0x39,0x34,0x36,0x2e,0x34,0x30,0x34,0x2c,0x33, + 0x34,0x33,0x2e,0x35,0x35,0x6c,0x2d,0x37,0x2e,0x30, + 0x34,0x36,0x2d,0x31,0x30,0x2e,0x35,0x36,0x37,0x63, + 0x2d,0x32,0x2e,0x39,0x2c,0x33,0x2e,0x38,0x2d,0x36, + 0x2e,0x35,0x32,0x35,0x2c,0x36,0x2e,0x38,0x35,0x34, + 0x2d,0x31,0x30,0x2e,0x38,0x38,0x31,0x2c,0x39,0x2e, + 0x31,0x37,0x63,0x2d,0x34,0x2e,0x33,0x34,0x38,0x2c, + 0x32,0x2e,0x33,0x31,0x32,0x2d,0x39,0x2e,0x31,0x31, + 0x36,0x2c,0x33,0x2e,0x34,0x36,0x37,0x2d,0x31,0x34, + 0x2e,0x32,0x39,0x2c,0x33,0x2e,0x34,0x36,0x37,0x68, + 0x2d,0x33,0x2e,0x32,0x31,0x35,0x0a,0x09,0x09,0x63, + 0x2d,0x34,0x2e,0x32,0x38,0x32,0x2c,0x30,0x2d,0x38, + 0x2e,0x33,0x32,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d, + 0x31,0x32,0x2e,0x31,0x31,0x36,0x2d,0x32,0x2e,0x34, + 0x33,0x34,0x63,0x2d,0x33,0x2e,0x38,0x30,0x35,0x2d, + 0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x31, + 0x39,0x2d,0x33,0x2e,0x38,0x34,0x36,0x2d,0x39,0x2e, + 0x39,0x34,0x37,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63, + 0x2d,0x32,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x38, + 0x32,0x38,0x2d,0x35,0x2e,0x30,0x36,0x32,0x2d,0x36, + 0x2e,0x31,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x32, + 0x2d,0x39,0x2e,0x39,0x34,0x33,0x0a,0x09,0x09,0x63, + 0x2d,0x31,0x2e,0x36,0x32,0x37,0x2d,0x33,0x2e,0x37, + 0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x36,0x2d,0x37, + 0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x36, + 0x2d,0x31,0x32,0x2e,0x31,0x32,0x31,0x76,0x2d,0x31, + 0x2e,0x30,0x33,0x37,0x63,0x30,0x2d,0x34,0x2e,0x32, + 0x37,0x39,0x2c,0x30,0x2e,0x38,0x30,0x39,0x2d,0x38, + 0x2e,0x33,0x32,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2d, + 0x31,0x32,0x2e,0x31,0x32,0x31,0x63,0x31,0x2e,0x36, + 0x31,0x38,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2c,0x33, + 0x2e,0x38,0x34,0x36,0x2d,0x37,0x2e,0x31,0x31,0x31, + 0x2c,0x36,0x2e,0x36,0x38,0x32,0x2d,0x39,0x2e,0x39, + 0x34,0x33,0x0a,0x09,0x09,0x63,0x32,0x2e,0x38,0x32, + 0x38,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x36,0x2e, + 0x31,0x34,0x34,0x2d,0x35,0x2e,0x30,0x36,0x2c,0x39, + 0x2e,0x39,0x34,0x37,0x2d,0x36,0x2e,0x36,0x38,0x32, + 0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e,0x36, + 0x32,0x33,0x2c,0x37,0x2e,0x38,0x33,0x34,0x2d,0x32, + 0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31, + 0x36,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68,0x32,0x36, + 0x2e,0x39,0x33,0x36,0x76,0x2d,0x31,0x36,0x2e,0x33, + 0x36,0x38,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x33, + 0x2d,0x30,0x2e,0x34,0x38,0x31,0x2d,0x34,0x2e,0x39, + 0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, + 0x31,0x39,0x39,0x0a,0x09,0x09,0x63,0x2d,0x30,0x2e, + 0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d, + 0x32,0x2e,0x32,0x37,0x36,0x2d,0x34,0x2e,0x31,0x39, + 0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, + 0x38,0x35,0x32,0x63,0x2d,0x31,0x2e,0x36,0x35,0x33, + 0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x36, + 0x30,0x39,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e, + 0x38,0x35,0x33,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63, + 0x2d,0x32,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e,0x39, + 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x38,0x2d, + 0x31,0x2e,0x34,0x35,0x68,0x2d,0x37,0x2e,0x34,0x35, + 0x39,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x35, + 0x38,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c, + 0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x31,0x39, + 0x38,0x2c,0x31,0x2e,0x34,0x35,0x63,0x2d,0x32,0x2e, + 0x32,0x34,0x37,0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d, + 0x34,0x2e,0x31,0x39,0x35,0x2c,0x32,0x2e,0x32,0x38, + 0x31,0x2d,0x35,0x2e,0x38,0x35,0x36,0x2c,0x33,0x2e, + 0x39,0x33,0x38,0x63,0x2d,0x31,0x2e,0x36,0x35,0x32, + 0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39, + 0x37,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e, + 0x39,0x33,0x34,0x2c,0x35,0x2e,0x38,0x35,0x32,0x0a, 0x09,0x09,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2c, 0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e,0x34,0x35, 0x31,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, @@ -825,110 +817,109 @@ const unsigned char splash_svg_data[17935] = { 0x31,0x2e,0x30,0x33,0x33,0x63,0x30,0x2d,0x34,0x2e, 0x32,0x38,0x32,0x2c,0x30,0x2e,0x38,0x31,0x32,0x2d, 0x38,0x2e,0x33,0x32,0x34,0x2c,0x32,0x2e,0x34,0x33, - 0x36,0x2d,0x31,0x32,0x2e,0x31,0x32,0x0d,0x0a,0x09, - 0x09,0x63,0x31,0x2e,0x36,0x32,0x32,0x2d,0x33,0x2e, - 0x38,0x30,0x31,0x2c,0x33,0x2e,0x38,0x35,0x2d,0x37, - 0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e,0x36,0x38,0x32, - 0x2d,0x39,0x2e,0x39,0x34,0x37,0x63,0x32,0x2e,0x38, - 0x32,0x38,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c,0x36, - 0x2e,0x31,0x34,0x36,0x2d,0x35,0x2e,0x30,0x35,0x36, - 0x2c,0x39,0x2e,0x39,0x34,0x33,0x2d,0x36,0x2e,0x36, - 0x38,0x32,0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31, - 0x2e,0x36,0x31,0x39,0x2c,0x37,0x2e,0x38,0x33,0x38, - 0x2d,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, - 0x31,0x32,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68,0x37, - 0x2e,0x34,0x35,0x39,0x0d,0x0a,0x09,0x09,0x63,0x34, - 0x2e,0x32,0x37,0x38,0x2c,0x30,0x2c,0x38,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31, - 0x32,0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e,0x34,0x33, - 0x34,0x63,0x33,0x2e,0x38,0x2c,0x31,0x2e,0x36,0x32, - 0x36,0x2c,0x37,0x2e,0x31,0x31,0x33,0x2c,0x33,0x2e, - 0x38,0x35,0x2c,0x39,0x2e,0x39,0x34,0x39,0x2c,0x36, - 0x2e,0x36,0x38,0x32,0x63,0x32,0x2e,0x38,0x32,0x38, - 0x2c,0x32,0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e,0x30, - 0x35,0x37,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36, - 0x2e,0x36,0x38,0x2c,0x39,0x2e,0x39,0x34,0x37,0x0d, - 0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x32,0x32,0x2c, - 0x33,0x2e,0x37,0x39,0x36,0x2c,0x32,0x2e,0x34,0x33, - 0x34,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e, - 0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x32,0x76, - 0x37,0x36,0x2e,0x39,0x36,0x38,0x48,0x39,0x34,0x36, - 0x2e,0x34,0x30,0x34,0x4c,0x39,0x34,0x36,0x2e,0x34, - 0x30,0x34,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x7a, - 0x20,0x4d,0x39,0x33,0x37,0x2e,0x39,0x30,0x37,0x2c, - 0x32,0x39,0x32,0x2e,0x31,0x36,0x37,0x68,0x2d,0x32, - 0x36,0x2e,0x39,0x33,0x36,0x63,0x2d,0x32,0x2e,0x35, - 0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36, - 0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x31, - 0x39,0x39,0x2c,0x31,0x2e,0x34,0x35,0x31,0x0d,0x0a, - 0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c, - 0x30,0x2e,0x39,0x36,0x38,0x2d,0x34,0x2e,0x31,0x39, - 0x34,0x2c,0x32,0x2e,0x32,0x39,0x36,0x2d,0x35,0x2e, - 0x38,0x35,0x32,0x2c,0x33,0x2e,0x39,0x38,0x38,0x63, - 0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x31,0x2e,0x36, - 0x39,0x35,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c,0x33, - 0x2e,0x36,0x36,0x33,0x2d,0x33,0x2e,0x39,0x33,0x38, - 0x2c,0x35,0x2e,0x39,0x30,0x35,0x63,0x2d,0x30,0x2e, - 0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d, - 0x31,0x2e,0x34,0x35,0x31,0x2c,0x34,0x2e,0x36,0x34, - 0x36,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x37,0x2e, - 0x32,0x30,0x33,0x76,0x34,0x2e,0x34,0x35,0x31,0x0d, - 0x0a,0x09,0x09,0x63,0x30,0x2c,0x32,0x2e,0x35,0x35, - 0x36,0x2c,0x30,0x2e,0x34,0x38,0x32,0x2c,0x34,0x2e, - 0x39,0x35,0x36,0x2c,0x31,0x2e,0x34,0x35,0x31,0x2c, - 0x37,0x2e,0x32,0x30,0x32,0x63,0x30,0x2e,0x39,0x36, - 0x38,0x2c,0x32,0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e, - 0x32,0x37,0x36,0x2c,0x34,0x2e,0x31,0x39,0x35,0x2c, - 0x33,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x38,0x35, - 0x32,0x63,0x31,0x2e,0x36,0x35,0x36,0x2c,0x31,0x2e, - 0x36,0x35,0x37,0x2c,0x33,0x2e,0x36,0x30,0x34,0x2c, - 0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e,0x38,0x35,0x32, - 0x2c,0x33,0x2e,0x39,0x33,0x38,0x0d,0x0a,0x09,0x09, - 0x63,0x32,0x2e,0x32,0x34,0x33,0x2c,0x30,0x2e,0x39, - 0x36,0x34,0x2c,0x34,0x2e,0x36,0x34,0x33,0x2c,0x31, - 0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x31,0x39,0x39, - 0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38,0x2e,0x34, - 0x39,0x36,0x63,0x32,0x2e,0x35,0x35,0x33,0x2c,0x30, - 0x2c,0x34,0x2e,0x39,0x35,0x32,0x2d,0x30,0x2e,0x34, - 0x38,0x32,0x2c,0x37,0x2e,0x31,0x39,0x38,0x2d,0x31, - 0x2e,0x34,0x34,0x37,0x63,0x32,0x2e,0x32,0x34,0x32, - 0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c,0x34,0x2e,0x31, - 0x39,0x38,0x2d,0x32,0x2e,0x32,0x38,0x31,0x2c,0x35, - 0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e,0x39,0x33,0x38, - 0x0d,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x36,0x31, - 0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32,0x2e,0x39, - 0x37,0x2d,0x33,0x2e,0x36,0x30,0x39,0x2c,0x33,0x2e, - 0x39,0x33,0x38,0x2d,0x35,0x2e,0x38,0x35,0x32,0x63, - 0x30,0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34, - 0x36,0x2c,0x31,0x2e,0x34,0x35,0x2d,0x34,0x2e,0x36, - 0x34,0x36,0x2c,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, - 0x32,0x30,0x32,0x4c,0x39,0x33,0x37,0x2e,0x39,0x30, - 0x37,0x2c,0x32,0x39,0x32,0x2e,0x31,0x36,0x37,0x4c, - 0x39,0x33,0x37,0x2e,0x39,0x30,0x37,0x2c,0x32,0x39, - 0x32,0x2e,0x31,0x36,0x37,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d, - 0x22,0x4d,0x31,0x30,0x31,0x34,0x2e,0x37,0x37,0x32, - 0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x63,0x2d,0x33, - 0x2e,0x38,0x36,0x35,0x2c,0x30,0x2d,0x37,0x2e,0x35, - 0x30,0x39,0x2d,0x30,0x2e,0x37,0x32,0x34,0x2d,0x31, - 0x30,0x2e,0x39,0x33,0x31,0x2d,0x32,0x2e,0x31,0x37, - 0x34,0x63,0x2d,0x33,0x2e,0x34,0x31,0x38,0x2d,0x31, - 0x2e,0x34,0x35,0x31,0x2d,0x36,0x2e,0x33,0x38,0x39, - 0x2d,0x33,0x2e,0x34,0x35,0x36,0x2d,0x38,0x2e,0x39, - 0x30,0x39,0x2d,0x36,0x2e,0x30,0x30,0x39,0x0d,0x0a, - 0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x32,0x2d,0x32, - 0x2e,0x35,0x35,0x37,0x2d,0x34,0x2e,0x35,0x32,0x34, - 0x2d,0x35,0x2e,0x35,0x32,0x36,0x2d,0x36,0x2e,0x30, - 0x30,0x39,0x2d,0x38,0x2e,0x39,0x31,0x63,0x2d,0x31, - 0x2e,0x34,0x38,0x35,0x2d,0x33,0x2e,0x33,0x38,0x33, - 0x2d,0x32,0x2e,0x32,0x32,0x35,0x2d,0x37,0x2e,0x30, - 0x30,0x37,0x2d,0x32,0x2e,0x32,0x32,0x35,0x2d,0x31, - 0x30,0x2e,0x38,0x37,0x36,0x56,0x32,0x34,0x39,0x2e, - 0x35,0x39,0x68,0x2d,0x31,0x39,0x2e,0x30,0x36,0x32, - 0x76,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x68,0x31, - 0x39,0x2e,0x30,0x36,0x32,0x76,0x2d,0x32,0x35,0x2e, - 0x34,0x38,0x35,0x6c,0x31,0x32,0x2e,0x37,0x34,0x2d, - 0x32,0x2e,0x30,0x37,0x0d,0x0a,0x09,0x09,0x76,0x32, + 0x36,0x2d,0x31,0x32,0x2e,0x31,0x32,0x0a,0x09,0x09, + 0x63,0x31,0x2e,0x36,0x32,0x32,0x2d,0x33,0x2e,0x38, + 0x30,0x31,0x2c,0x33,0x2e,0x38,0x35,0x2d,0x37,0x2e, + 0x31,0x31,0x35,0x2c,0x36,0x2e,0x36,0x38,0x32,0x2d, + 0x39,0x2e,0x39,0x34,0x37,0x63,0x32,0x2e,0x38,0x32, + 0x38,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c,0x36,0x2e, + 0x31,0x34,0x36,0x2d,0x35,0x2e,0x30,0x35,0x36,0x2c, + 0x39,0x2e,0x39,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38, + 0x32,0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e, + 0x36,0x31,0x39,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d, + 0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31, + 0x32,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68,0x37,0x2e, + 0x34,0x35,0x39,0x0a,0x09,0x09,0x63,0x34,0x2e,0x32, + 0x37,0x38,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32,0x2e, + 0x31,0x31,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34,0x63, + 0x33,0x2e,0x38,0x2c,0x31,0x2e,0x36,0x32,0x36,0x2c, + 0x37,0x2e,0x31,0x31,0x33,0x2c,0x33,0x2e,0x38,0x35, + 0x2c,0x39,0x2e,0x39,0x34,0x39,0x2c,0x36,0x2e,0x36, + 0x38,0x32,0x63,0x32,0x2e,0x38,0x32,0x38,0x2c,0x32, + 0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e,0x30,0x35,0x37, + 0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36, + 0x38,0x2c,0x39,0x2e,0x39,0x34,0x37,0x0a,0x09,0x09, + 0x63,0x31,0x2e,0x36,0x32,0x32,0x2c,0x33,0x2e,0x37, + 0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x37, + 0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34, + 0x2c,0x31,0x32,0x2e,0x31,0x32,0x76,0x37,0x36,0x2e, + 0x39,0x36,0x38,0x48,0x39,0x34,0x36,0x2e,0x34,0x30, + 0x34,0x4c,0x39,0x34,0x36,0x2e,0x34,0x30,0x34,0x2c, + 0x33,0x34,0x33,0x2e,0x35,0x35,0x7a,0x20,0x4d,0x39, + 0x33,0x37,0x2e,0x39,0x30,0x37,0x2c,0x32,0x39,0x32, + 0x2e,0x31,0x36,0x37,0x68,0x2d,0x32,0x36,0x2e,0x39, + 0x33,0x36,0x63,0x2d,0x32,0x2e,0x35,0x35,0x38,0x2c, + 0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c,0x30,0x2e, + 0x34,0x38,0x36,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2c, + 0x31,0x2e,0x34,0x35,0x31,0x0a,0x09,0x09,0x63,0x2d, + 0x32,0x2e,0x32,0x34,0x36,0x2c,0x30,0x2e,0x39,0x36, + 0x38,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c,0x32,0x2e, + 0x32,0x39,0x36,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c, + 0x33,0x2e,0x39,0x38,0x38,0x63,0x2d,0x31,0x2e,0x36, + 0x36,0x31,0x2c,0x31,0x2e,0x36,0x39,0x35,0x2d,0x32, + 0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e,0x36,0x36,0x33, + 0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x39, + 0x30,0x35,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2c, + 0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e,0x34,0x35, + 0x31,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, + 0x34,0x35,0x31,0x2c,0x37,0x2e,0x32,0x30,0x33,0x76, + 0x34,0x2e,0x34,0x35,0x31,0x0a,0x09,0x09,0x63,0x30, + 0x2c,0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34, + 0x38,0x32,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31, + 0x2e,0x34,0x35,0x31,0x2c,0x37,0x2e,0x32,0x30,0x32, + 0x63,0x30,0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e,0x32, + 0x34,0x33,0x2c,0x32,0x2e,0x32,0x37,0x36,0x2c,0x34, + 0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e,0x39,0x33,0x38, + 0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x31,0x2e,0x36, + 0x35,0x36,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2c,0x33, + 0x2e,0x36,0x30,0x34,0x2c,0x32,0x2e,0x39,0x37,0x2c, + 0x35,0x2e,0x38,0x35,0x32,0x2c,0x33,0x2e,0x39,0x33, + 0x38,0x0a,0x09,0x09,0x63,0x32,0x2e,0x32,0x34,0x33, + 0x2c,0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36, + 0x34,0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37, + 0x2e,0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x34,0x37, + 0x68,0x38,0x2e,0x34,0x39,0x36,0x63,0x32,0x2e,0x35, + 0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x32, + 0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e,0x31, + 0x39,0x38,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32, + 0x2e,0x32,0x34,0x32,0x2d,0x30,0x2e,0x39,0x36,0x38, + 0x2c,0x34,0x2e,0x31,0x39,0x38,0x2d,0x32,0x2e,0x32, + 0x38,0x31,0x2c,0x35,0x2e,0x38,0x35,0x33,0x2d,0x33, + 0x2e,0x39,0x33,0x38,0x0a,0x09,0x09,0x63,0x31,0x2e, + 0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c, + 0x32,0x2e,0x39,0x37,0x2d,0x33,0x2e,0x36,0x30,0x39, + 0x2c,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38, + 0x35,0x32,0x63,0x30,0x2e,0x39,0x36,0x39,0x2d,0x32, + 0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35,0x2d, + 0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35, + 0x2d,0x37,0x2e,0x32,0x30,0x32,0x4c,0x39,0x33,0x37, + 0x2e,0x39,0x30,0x37,0x2c,0x32,0x39,0x32,0x2e,0x31, + 0x36,0x37,0x4c,0x39,0x33,0x37,0x2e,0x39,0x30,0x37, + 0x2c,0x32,0x39,0x32,0x2e,0x31,0x36,0x37,0x7a,0x22, + 0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x64,0x3d,0x22,0x4d,0x31,0x30,0x31,0x34,0x2e,0x37, + 0x37,0x32,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x63, + 0x2d,0x33,0x2e,0x38,0x36,0x35,0x2c,0x30,0x2d,0x37, + 0x2e,0x35,0x30,0x39,0x2d,0x30,0x2e,0x37,0x32,0x34, + 0x2d,0x31,0x30,0x2e,0x39,0x33,0x31,0x2d,0x32,0x2e, + 0x31,0x37,0x34,0x63,0x2d,0x33,0x2e,0x34,0x31,0x38, + 0x2d,0x31,0x2e,0x34,0x35,0x31,0x2d,0x36,0x2e,0x33, + 0x38,0x39,0x2d,0x33,0x2e,0x34,0x35,0x36,0x2d,0x38, + 0x2e,0x39,0x30,0x39,0x2d,0x36,0x2e,0x30,0x30,0x39, + 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x32,0x2d, + 0x32,0x2e,0x35,0x35,0x37,0x2d,0x34,0x2e,0x35,0x32, + 0x34,0x2d,0x35,0x2e,0x35,0x32,0x36,0x2d,0x36,0x2e, + 0x30,0x30,0x39,0x2d,0x38,0x2e,0x39,0x31,0x63,0x2d, + 0x31,0x2e,0x34,0x38,0x35,0x2d,0x33,0x2e,0x33,0x38, + 0x33,0x2d,0x32,0x2e,0x32,0x32,0x35,0x2d,0x37,0x2e, + 0x30,0x30,0x37,0x2d,0x32,0x2e,0x32,0x32,0x35,0x2d, + 0x31,0x30,0x2e,0x38,0x37,0x36,0x56,0x32,0x34,0x39, + 0x2e,0x35,0x39,0x68,0x2d,0x31,0x39,0x2e,0x30,0x36, + 0x32,0x76,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x68, + 0x31,0x39,0x2e,0x30,0x36,0x32,0x76,0x2d,0x32,0x35, + 0x2e,0x34,0x38,0x35,0x6c,0x31,0x32,0x2e,0x37,0x34, + 0x2d,0x32,0x2e,0x30,0x37,0x0a,0x09,0x09,0x76,0x32, 0x37,0x2e,0x35,0x35,0x35,0x68,0x32,0x36,0x2e,0x39, 0x33,0x36,0x76,0x31,0x32,0x2e,0x31,0x31,0x36,0x68, 0x2d,0x32,0x36,0x2e,0x39,0x33,0x36,0x76,0x36,0x36, @@ -939,109 +930,108 @@ const unsigned char splash_svg_data[17935] = { 0x38,0x38,0x2c,0x31,0x2e,0x38,0x33,0x33,0x2c,0x31, 0x2e,0x38,0x37,0x39,0x2c,0x33,0x2e,0x34,0x33,0x37, 0x2c,0x33,0x2e,0x32,0x36,0x31,0x2c,0x34,0x2e,0x38, - 0x31,0x38,0x0d,0x0a,0x09,0x09,0x63,0x31,0x2e,0x33, - 0x38,0x32,0x2c,0x31,0x2e,0x33,0x38,0x31,0x2c,0x33, - 0x2e,0x30,0x30,0x34,0x2c,0x32,0x2e,0x34,0x37,0x32, - 0x2c,0x34,0x2e,0x38,0x36,0x38,0x2c,0x33,0x2e,0x32, - 0x36,0x34,0x63,0x31,0x2e,0x38,0x36,0x36,0x2c,0x30, - 0x2e,0x37,0x39,0x32,0x2c,0x33,0x2e,0x38,0x36,0x34, - 0x2c,0x31,0x2e,0x31,0x38,0x39,0x2c,0x36,0x2e,0x30, - 0x30,0x39,0x2c,0x31,0x2e,0x31,0x38,0x39,0x68,0x31, - 0x31,0x2e,0x36,0x30,0x34,0x76,0x31,0x32,0x2e,0x31, - 0x32,0x31,0x4c,0x31,0x30,0x31,0x34,0x2e,0x37,0x37, - 0x32,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x4c,0x31, - 0x30,0x31,0x34,0x2e,0x37,0x37,0x32,0x2c,0x33,0x34, - 0x33,0x2e,0x35,0x35,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, - 0x4d,0x31,0x30,0x35,0x32,0x2e,0x39,0x39,0x36,0x2c, - 0x32,0x31,0x31,0x2e,0x39,0x38,0x39,0x56,0x31,0x39, - 0x35,0x68,0x31,0x34,0x2e,0x38,0x31,0x35,0x76,0x31, - 0x36,0x2e,0x39,0x38,0x39,0x48,0x31,0x30,0x35,0x32, - 0x2e,0x39,0x39,0x36,0x7a,0x20,0x4d,0x31,0x30,0x35, - 0x34,0x2e,0x30,0x33,0x33,0x2c,0x33,0x34,0x33,0x2e, - 0x35,0x35,0x56,0x32,0x33,0x37,0x2e,0x34,0x37,0x34, - 0x68,0x31,0x32,0x2e,0x37,0x34,0x31,0x56,0x33,0x34, - 0x33,0x2e,0x35,0x35,0x48,0x31,0x30,0x35,0x34,0x2e, - 0x30,0x33,0x33,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x38,0x0a,0x09,0x09,0x63,0x31,0x2e,0x33,0x38, + 0x32,0x2c,0x31,0x2e,0x33,0x38,0x31,0x2c,0x33,0x2e, + 0x30,0x30,0x34,0x2c,0x32,0x2e,0x34,0x37,0x32,0x2c, + 0x34,0x2e,0x38,0x36,0x38,0x2c,0x33,0x2e,0x32,0x36, + 0x34,0x63,0x31,0x2e,0x38,0x36,0x36,0x2c,0x30,0x2e, + 0x37,0x39,0x32,0x2c,0x33,0x2e,0x38,0x36,0x34,0x2c, + 0x31,0x2e,0x31,0x38,0x39,0x2c,0x36,0x2e,0x30,0x30, + 0x39,0x2c,0x31,0x2e,0x31,0x38,0x39,0x68,0x31,0x31, + 0x2e,0x36,0x30,0x34,0x76,0x31,0x32,0x2e,0x31,0x32, + 0x31,0x4c,0x31,0x30,0x31,0x34,0x2e,0x37,0x37,0x32, + 0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x4c,0x31,0x30, + 0x31,0x34,0x2e,0x37,0x37,0x32,0x2c,0x33,0x34,0x33, + 0x2e,0x35,0x35,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31, + 0x30,0x35,0x32,0x2e,0x39,0x39,0x36,0x2c,0x32,0x31, + 0x31,0x2e,0x39,0x38,0x39,0x56,0x31,0x39,0x35,0x68, + 0x31,0x34,0x2e,0x38,0x31,0x35,0x76,0x31,0x36,0x2e, + 0x39,0x38,0x39,0x48,0x31,0x30,0x35,0x32,0x2e,0x39, + 0x39,0x36,0x7a,0x20,0x4d,0x31,0x30,0x35,0x34,0x2e, + 0x30,0x33,0x33,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35, + 0x56,0x32,0x33,0x37,0x2e,0x34,0x37,0x34,0x68,0x31, + 0x32,0x2e,0x37,0x34,0x31,0x56,0x33,0x34,0x33,0x2e, + 0x35,0x35,0x48,0x31,0x30,0x35,0x34,0x2e,0x30,0x33, + 0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x31,0x36, + 0x34,0x2e,0x39,0x33,0x2c,0x33,0x32,0x36,0x2e,0x35, + 0x36,0x32,0x63,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2c, + 0x33,0x2e,0x38,0x2d,0x33,0x2e,0x38,0x35,0x32,0x2c, + 0x37,0x2e,0x31,0x31,0x35,0x2d,0x36,0x2e,0x36,0x37, + 0x39,0x2c,0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x32, + 0x2e,0x38,0x33,0x37,0x2c,0x32,0x2e,0x38,0x33,0x36, + 0x2d,0x36,0x2e,0x31,0x35,0x2c,0x35,0x2e,0x30,0x36, + 0x2d,0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x36,0x38, + 0x32,0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x37,0x39, + 0x37,0x2c,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e, + 0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2d, + 0x31,0x32,0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e,0x34, + 0x33,0x34,0x68,0x2d,0x38,0x2e,0x34,0x39,0x36,0x63, + 0x2d,0x34,0x2e,0x32,0x38,0x32,0x2c,0x30,0x2d,0x38, + 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x38,0x31,0x32, + 0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x2d,0x32,0x2e, + 0x34,0x33,0x34,0x63,0x2d,0x33,0x2e,0x38,0x30,0x35, + 0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31, + 0x31,0x39,0x2d,0x33,0x2e,0x38,0x34,0x36,0x2d,0x39, + 0x2e,0x39,0x34,0x36,0x2d,0x36,0x2e,0x36,0x38,0x32, + 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x38,0x33,0x37, + 0x2d,0x32,0x2e,0x38,0x32,0x38,0x2d,0x35,0x2e,0x30, + 0x36,0x32,0x2d,0x36,0x2e,0x31,0x34,0x33,0x2d,0x36, + 0x2e,0x36,0x38,0x33,0x2d,0x39,0x2e,0x39,0x34,0x33, + 0x63,0x2d,0x31,0x2e,0x36,0x32,0x37,0x2d,0x33,0x2e, + 0x37,0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d, + 0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33, + 0x35,0x2d,0x31,0x32,0x2e,0x31,0x32,0x31,0x76,0x2d, + 0x34,0x37,0x2e,0x38,0x35,0x38,0x63,0x30,0x2d,0x34, + 0x2e,0x32,0x38,0x32,0x2c,0x30,0x2e,0x38,0x30,0x38, + 0x2d,0x38,0x2e,0x33,0x32,0x34,0x2c,0x32,0x2e,0x34, + 0x33,0x35,0x2d,0x31,0x32,0x2e,0x31,0x32,0x0a,0x09, + 0x09,0x63,0x31,0x2e,0x36,0x31,0x39,0x2d,0x33,0x2e, + 0x38,0x30,0x31,0x2c,0x33,0x2e,0x38,0x34,0x36,0x2d, + 0x37,0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e,0x36,0x38, + 0x33,0x2d,0x39,0x2e,0x39,0x34,0x37,0x63,0x32,0x2e, + 0x38,0x32,0x37,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c, + 0x36,0x2e,0x31,0x34,0x33,0x2d,0x35,0x2e,0x30,0x35, + 0x36,0x2c,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36,0x2e, + 0x36,0x38,0x32,0x63,0x33,0x2e,0x37,0x39,0x37,0x2d, + 0x31,0x2e,0x36,0x31,0x39,0x2c,0x37,0x2e,0x38,0x33, + 0x34,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32, + 0x2e,0x31,0x31,0x36,0x2d,0x32,0x2e,0x34,0x33,0x34, + 0x68,0x38,0x2e,0x34,0x39,0x36,0x0a,0x09,0x09,0x63, + 0x34,0x2e,0x32,0x37,0x39,0x2c,0x30,0x2c,0x38,0x2e, + 0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31, + 0x32,0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e,0x34,0x33, + 0x34,0x63,0x33,0x2e,0x38,0x2c,0x31,0x2e,0x36,0x32, + 0x36,0x2c,0x37,0x2e,0x31,0x31,0x34,0x2c,0x33,0x2e, + 0x38,0x35,0x2c,0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e, + 0x36,0x38,0x32,0x63,0x32,0x2e,0x38,0x32,0x37,0x2c, + 0x32,0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e,0x30,0x35, + 0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e, + 0x36,0x37,0x39,0x2c,0x39,0x2e,0x39,0x34,0x37,0x0a, + 0x09,0x09,0x63,0x31,0x2e,0x36,0x32,0x32,0x2c,0x33, + 0x2e,0x37,0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34, + 0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34, + 0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x32,0x76,0x34, + 0x37,0x2e,0x38,0x35,0x38,0x43,0x31,0x31,0x36,0x37, + 0x2e,0x33,0x36,0x33,0x2c,0x33,0x31,0x38,0x2e,0x37, + 0x32,0x34,0x2c,0x31,0x31,0x36,0x36,0x2e,0x35,0x35, + 0x32,0x2c,0x33,0x32,0x32,0x2e,0x37,0x36,0x35,0x2c, 0x31,0x31,0x36,0x34,0x2e,0x39,0x33,0x2c,0x33,0x32, - 0x36,0x2e,0x35,0x36,0x32,0x63,0x2d,0x31,0x2e,0x36, - 0x32,0x33,0x2c,0x33,0x2e,0x38,0x2d,0x33,0x2e,0x38, - 0x35,0x32,0x2c,0x37,0x2e,0x31,0x31,0x35,0x2d,0x36, - 0x2e,0x36,0x37,0x39,0x2c,0x39,0x2e,0x39,0x34,0x33, - 0x63,0x2d,0x32,0x2e,0x38,0x33,0x37,0x2c,0x32,0x2e, - 0x38,0x33,0x36,0x2d,0x36,0x2e,0x31,0x35,0x2c,0x35, - 0x2e,0x30,0x36,0x2d,0x39,0x2e,0x39,0x35,0x2c,0x36, - 0x2e,0x36,0x38,0x32,0x0d,0x0a,0x09,0x09,0x63,0x2d, - 0x33,0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e,0x36,0x32, - 0x33,0x2d,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e, - 0x34,0x33,0x34,0x2d,0x31,0x32,0x2e,0x31,0x31,0x37, - 0x2c,0x32,0x2e,0x34,0x33,0x34,0x68,0x2d,0x38,0x2e, - 0x34,0x39,0x36,0x63,0x2d,0x34,0x2e,0x32,0x38,0x32, - 0x2c,0x30,0x2d,0x38,0x2e,0x33,0x31,0x39,0x2d,0x30, - 0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x31,0x31, - 0x36,0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d,0x33, - 0x2e,0x38,0x30,0x35,0x2d,0x31,0x2e,0x36,0x32,0x33, - 0x2d,0x37,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x38, - 0x34,0x36,0x2d,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36, - 0x2e,0x36,0x38,0x32,0x0d,0x0a,0x09,0x09,0x63,0x2d, - 0x32,0x2e,0x38,0x33,0x37,0x2d,0x32,0x2e,0x38,0x32, - 0x38,0x2d,0x35,0x2e,0x30,0x36,0x32,0x2d,0x36,0x2e, - 0x31,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x33,0x2d, - 0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x31,0x2e,0x36, - 0x32,0x37,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32, - 0x2e,0x34,0x33,0x35,0x2d,0x37,0x2e,0x38,0x33,0x38, - 0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31,0x32,0x2e, - 0x31,0x32,0x31,0x76,0x2d,0x34,0x37,0x2e,0x38,0x35, - 0x38,0x63,0x30,0x2d,0x34,0x2e,0x32,0x38,0x32,0x2c, - 0x30,0x2e,0x38,0x30,0x38,0x2d,0x38,0x2e,0x33,0x32, - 0x34,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31,0x32, - 0x2e,0x31,0x32,0x0d,0x0a,0x09,0x09,0x63,0x31,0x2e, - 0x36,0x31,0x39,0x2d,0x33,0x2e,0x38,0x30,0x31,0x2c, - 0x33,0x2e,0x38,0x34,0x36,0x2d,0x37,0x2e,0x31,0x31, - 0x35,0x2c,0x36,0x2e,0x36,0x38,0x33,0x2d,0x39,0x2e, - 0x39,0x34,0x37,0x63,0x32,0x2e,0x38,0x32,0x37,0x2d, - 0x32,0x2e,0x38,0x33,0x33,0x2c,0x36,0x2e,0x31,0x34, - 0x33,0x2d,0x35,0x2e,0x30,0x35,0x36,0x2c,0x39,0x2e, - 0x39,0x34,0x36,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63, - 0x33,0x2e,0x37,0x39,0x37,0x2d,0x31,0x2e,0x36,0x31, - 0x39,0x2c,0x37,0x2e,0x38,0x33,0x34,0x2d,0x32,0x2e, - 0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31,0x36, - 0x2d,0x32,0x2e,0x34,0x33,0x34,0x68,0x38,0x2e,0x34, - 0x39,0x36,0x0d,0x0a,0x09,0x09,0x63,0x34,0x2e,0x32, - 0x37,0x39,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x32,0x2c, - 0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32,0x2e,0x31, - 0x31,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34,0x63,0x33, - 0x2e,0x38,0x2c,0x31,0x2e,0x36,0x32,0x36,0x2c,0x37, - 0x2e,0x31,0x31,0x34,0x2c,0x33,0x2e,0x38,0x35,0x2c, - 0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x36,0x38,0x32, - 0x63,0x32,0x2e,0x38,0x32,0x37,0x2c,0x32,0x2e,0x38, - 0x33,0x32,0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c,0x36, - 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x37,0x39, - 0x2c,0x39,0x2e,0x39,0x34,0x37,0x0d,0x0a,0x09,0x09, - 0x63,0x31,0x2e,0x36,0x32,0x32,0x2c,0x33,0x2e,0x37, - 0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x37, - 0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34, - 0x2c,0x31,0x32,0x2e,0x31,0x32,0x76,0x34,0x37,0x2e, - 0x38,0x35,0x38,0x43,0x31,0x31,0x36,0x37,0x2e,0x33, - 0x36,0x33,0x2c,0x33,0x31,0x38,0x2e,0x37,0x32,0x34, - 0x2c,0x31,0x31,0x36,0x36,0x2e,0x35,0x35,0x32,0x2c, - 0x33,0x32,0x32,0x2e,0x37,0x36,0x35,0x2c,0x31,0x31, - 0x36,0x34,0x2e,0x39,0x33,0x2c,0x33,0x32,0x36,0x2e, - 0x35,0x36,0x32,0x7a,0x20,0x4d,0x31,0x31,0x35,0x34, - 0x2e,0x36,0x32,0x32,0x2c,0x32,0x36,0x35,0x2e,0x38, - 0x35,0x35,0x0d,0x0a,0x09,0x09,0x63,0x30,0x2d,0x32, - 0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x31, - 0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e,0x34, - 0x34,0x39,0x2d,0x37,0x2e,0x31,0x39,0x39,0x63,0x2d, - 0x30,0x2e,0x39,0x37,0x2d,0x32,0x2e,0x32,0x34,0x33, - 0x2d,0x32,0x2e,0x32,0x37,0x37,0x2d,0x34,0x2e,0x31, - 0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35, - 0x2e,0x38,0x35,0x32,0x63,0x2d,0x31,0x2e,0x36,0x35, - 0x33,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e, - 0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35, - 0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e,0x39,0x33,0x38, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34, + 0x36,0x2e,0x35,0x36,0x32,0x7a,0x20,0x4d,0x31,0x31, + 0x35,0x34,0x2e,0x36,0x32,0x32,0x2c,0x32,0x36,0x35, + 0x2e,0x38,0x35,0x35,0x0a,0x09,0x09,0x63,0x30,0x2d, + 0x32,0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38, + 0x31,0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e, + 0x34,0x34,0x39,0x2d,0x37,0x2e,0x31,0x39,0x39,0x63, + 0x2d,0x30,0x2e,0x39,0x37,0x2d,0x32,0x2e,0x32,0x34, + 0x33,0x2d,0x32,0x2e,0x32,0x37,0x37,0x2d,0x34,0x2e, + 0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d, + 0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x31,0x2e,0x36, + 0x35,0x33,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33, + 0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37,0x2d, + 0x35,0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e,0x39,0x33, + 0x38,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34, 0x36,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e, 0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37, 0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x68, @@ -1052,210 +1042,208 @@ const unsigned char splash_svg_data[17935] = { 0x32,0x2e,0x32,0x34,0x37,0x2c,0x30,0x2e,0x39,0x36, 0x39,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c,0x32,0x2e, 0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c, - 0x33,0x2e,0x39,0x33,0x38,0x0d,0x0a,0x09,0x09,0x63, - 0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x31,0x2e,0x36, - 0x35,0x37,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c,0x33, - 0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e,0x39,0x33,0x38, - 0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x30,0x2e, - 0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d, - 0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36, - 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39, - 0x39,0x76,0x34,0x39,0x2e,0x33,0x30,0x39,0x63,0x30, - 0x2c,0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34, - 0x38,0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31, - 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x0d, - 0x0a,0x09,0x09,0x63,0x30,0x2e,0x39,0x36,0x38,0x2c, - 0x32,0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x37, - 0x37,0x2c,0x34,0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e, - 0x39,0x33,0x38,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63, - 0x31,0x2e,0x36,0x35,0x36,0x2c,0x31,0x2e,0x36,0x35, - 0x37,0x2c,0x33,0x2e,0x36,0x30,0x34,0x2c,0x32,0x2e, - 0x39,0x37,0x2c,0x35,0x2e,0x38,0x35,0x32,0x2c,0x33, - 0x2e,0x39,0x33,0x38,0x63,0x32,0x2e,0x32,0x34,0x32, - 0x2c,0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36, - 0x34,0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37, - 0x2e,0x31,0x39,0x38,0x2c,0x31,0x2e,0x34,0x34,0x37, - 0x68,0x38,0x2e,0x34,0x39,0x36,0x0d,0x0a,0x09,0x09, - 0x63,0x32,0x2e,0x35,0x35,0x33,0x2c,0x30,0x2c,0x34, - 0x2e,0x39,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x32, - 0x2c,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34, - 0x34,0x37,0x63,0x32,0x2e,0x32,0x34,0x33,0x2d,0x30, - 0x2e,0x39,0x36,0x38,0x2c,0x34,0x2e,0x31,0x39,0x37, - 0x2d,0x32,0x2e,0x32,0x38,0x31,0x2c,0x35,0x2e,0x38, - 0x35,0x32,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63,0x31, + 0x33,0x2e,0x39,0x33,0x38,0x0a,0x09,0x09,0x63,0x2d, + 0x31,0x2e,0x36,0x36,0x31,0x2c,0x31,0x2e,0x36,0x35, + 0x37,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e, + 0x36,0x30,0x39,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c, + 0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x30,0x2e,0x39, + 0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d,0x31, + 0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d, + 0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39,0x39, + 0x76,0x34,0x39,0x2e,0x33,0x30,0x39,0x63,0x30,0x2c, + 0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38, + 0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e, + 0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x0a,0x09, + 0x09,0x63,0x30,0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e, + 0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x37,0x37,0x2c, + 0x34,0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e,0x39,0x33, + 0x38,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x31,0x2e, + 0x36,0x35,0x36,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2c, + 0x33,0x2e,0x36,0x30,0x34,0x2c,0x32,0x2e,0x39,0x37, + 0x2c,0x35,0x2e,0x38,0x35,0x32,0x2c,0x33,0x2e,0x39, + 0x33,0x38,0x63,0x32,0x2e,0x32,0x34,0x32,0x2c,0x30, + 0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34,0x33, + 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x31, + 0x39,0x38,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38, + 0x2e,0x34,0x39,0x36,0x0a,0x09,0x09,0x63,0x32,0x2e, + 0x35,0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35, + 0x33,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e, + 0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63, + 0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36, + 0x38,0x2c,0x34,0x2e,0x31,0x39,0x37,0x2d,0x32,0x2e, + 0x32,0x38,0x31,0x2c,0x35,0x2e,0x38,0x35,0x32,0x2d, + 0x33,0x2e,0x39,0x33,0x38,0x63,0x31,0x2e,0x36,0x36, + 0x31,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32,0x2e, + 0x39,0x37,0x2d,0x33,0x2e,0x36,0x30,0x39,0x2c,0x33, + 0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38,0x35,0x32, + 0x0a,0x09,0x09,0x63,0x30,0x2e,0x39,0x36,0x38,0x2d, + 0x32,0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e,0x34,0x34, + 0x39,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e, + 0x34,0x34,0x39,0x2d,0x37,0x2e,0x32,0x30,0x32,0x56, + 0x32,0x36,0x35,0x2e,0x38,0x35,0x35,0x7a,0x22,0x2f, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x32,0x35,0x30,0x2e,0x39,0x36, + 0x34,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x76,0x2d, + 0x37,0x37,0x2e,0x36,0x39,0x35,0x63,0x30,0x2d,0x32, + 0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x36, + 0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e,0x34, + 0x35,0x31,0x2d,0x37,0x2e,0x31,0x39,0x39,0x63,0x2d, + 0x30,0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34, + 0x33,0x2d,0x32,0x2e,0x32,0x38,0x2d,0x34,0x2e,0x31, + 0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x35,0x2d,0x35, + 0x2e,0x38,0x35,0x32,0x0a,0x09,0x09,0x63,0x2d,0x31, 0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x37, - 0x2c,0x32,0x2e,0x39,0x37,0x2d,0x33,0x2e,0x36,0x30, - 0x39,0x2c,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, - 0x38,0x35,0x32,0x0d,0x0a,0x09,0x09,0x63,0x30,0x2e, - 0x39,0x36,0x38,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c, - 0x31,0x2e,0x34,0x34,0x39,0x2d,0x34,0x2e,0x36,0x34, - 0x36,0x2c,0x31,0x2e,0x34,0x34,0x39,0x2d,0x37,0x2e, - 0x32,0x30,0x32,0x56,0x32,0x36,0x35,0x2e,0x38,0x35, - 0x35,0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x32, - 0x35,0x30,0x2e,0x39,0x36,0x34,0x2c,0x33,0x34,0x33, - 0x2e,0x35,0x35,0x76,0x2d,0x37,0x37,0x2e,0x36,0x39, - 0x35,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x33,0x2d, - 0x30,0x2e,0x34,0x38,0x36,0x2d,0x34,0x2e,0x39,0x35, - 0x32,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2d,0x37,0x2e, - 0x31,0x39,0x39,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39, - 0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x32,0x2e,0x32, - 0x38,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e, - 0x39,0x33,0x35,0x2d,0x35,0x2e,0x38,0x35,0x32,0x0d, - 0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36,0x36,0x31, - 0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x36, - 0x31,0x32,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e, - 0x38,0x35,0x35,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63, - 0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d,0x30,0x2e,0x39, - 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, - 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x38,0x2d, - 0x31,0x2e,0x34,0x35,0x68,0x2d,0x38,0x2e,0x34,0x39, - 0x32,0x63,0x2d,0x32,0x2e,0x35,0x35,0x37,0x2c,0x30, - 0x2d,0x34,0x2e,0x39,0x36,0x2c,0x30,0x2e,0x34,0x38, - 0x36,0x2d,0x37,0x2e,0x32,0x30,0x33,0x2c,0x31,0x2e, - 0x34,0x35,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e, - 0x32,0x34,0x31,0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d, - 0x34,0x2e,0x31,0x39,0x33,0x2c,0x32,0x2e,0x32,0x38, - 0x31,0x2d,0x35,0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e, - 0x39,0x33,0x38,0x63,0x2d,0x31,0x2e,0x36,0x35,0x33, - 0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39, - 0x37,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e, - 0x39,0x33,0x35,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63, - 0x2d,0x30,0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e,0x32, - 0x34,0x37,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e, - 0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37, - 0x2e,0x31,0x39,0x39,0x76,0x37,0x37,0x2e,0x36,0x39, - 0x35,0x68,0x2d,0x31,0x32,0x2e,0x37,0x34,0x0d,0x0a, - 0x09,0x09,0x56,0x32,0x33,0x37,0x2e,0x34,0x37,0x34, - 0x68,0x34,0x2e,0x32,0x34,0x38,0x6c,0x36,0x2e,0x39, - 0x33,0x38,0x2c,0x31,0x30,0x2e,0x37,0x37,0x33,0x63, - 0x32,0x2e,0x39,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c, - 0x36,0x2e,0x35,0x34,0x31,0x2d,0x37,0x2e,0x30,0x36, - 0x31,0x2c,0x31,0x30,0x2e,0x39,0x33,0x31,0x2d,0x39, - 0x2e,0x33,0x37,0x36,0x63,0x34,0x2e,0x33,0x38,0x32, - 0x2d,0x32,0x2e,0x33,0x31,0x32,0x2c,0x39,0x2e,0x31, - 0x36,0x36,0x2d,0x33,0x2e,0x34,0x37,0x31,0x2c,0x31, - 0x34,0x2e,0x33,0x34,0x38,0x2d,0x33,0x2e,0x34,0x37, - 0x31,0x68,0x33,0x2e,0x32,0x31,0x31,0x0d,0x0a,0x09, - 0x09,0x63,0x34,0x2e,0x32,0x38,0x32,0x2c,0x30,0x2c, - 0x38,0x2e,0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x35, - 0x2c,0x31,0x32,0x2e,0x31,0x32,0x2c,0x32,0x2e,0x34, - 0x33,0x34,0x63,0x33,0x2e,0x37,0x39,0x37,0x2c,0x31, - 0x2e,0x36,0x32,0x36,0x2c,0x37,0x2e,0x31,0x31,0x31, - 0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39,0x34, - 0x33,0x2c,0x36,0x2e,0x36,0x38,0x32,0x73,0x35,0x2e, - 0x30,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36, - 0x2e,0x36,0x38,0x32,0x2c,0x39,0x2e,0x39,0x34,0x37, - 0x63,0x31,0x2e,0x36,0x32,0x33,0x2c,0x33,0x2e,0x37, - 0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2c,0x37, - 0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x36, - 0x2c,0x31,0x32,0x2e,0x31,0x32,0x0d,0x0a,0x09,0x09, + 0x2d,0x33,0x2e,0x36,0x31,0x32,0x2d,0x32,0x2e,0x39, + 0x37,0x2d,0x35,0x2e,0x38,0x35,0x35,0x2d,0x33,0x2e, + 0x39,0x33,0x38,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32, + 0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36, + 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, + 0x31,0x39,0x38,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d, + 0x38,0x2e,0x34,0x39,0x32,0x63,0x2d,0x32,0x2e,0x35, + 0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x36,0x2c, + 0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x32,0x30, + 0x33,0x2c,0x31,0x2e,0x34,0x35,0x0a,0x09,0x09,0x63, + 0x2d,0x32,0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x39, + 0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x33,0x2c,0x32, + 0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x34, + 0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x31,0x2e, + 0x36,0x35,0x33,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d, + 0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x30,0x39, + 0x2d,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35,0x2e,0x38, + 0x35,0x32,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2c, + 0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e,0x34,0x35, + 0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34, + 0x35,0x2c,0x37,0x2e,0x31,0x39,0x39,0x76,0x37,0x37, + 0x2e,0x36,0x39,0x35,0x68,0x2d,0x31,0x32,0x2e,0x37, + 0x34,0x0a,0x09,0x09,0x56,0x32,0x33,0x37,0x2e,0x34, + 0x37,0x34,0x68,0x34,0x2e,0x32,0x34,0x38,0x6c,0x36, + 0x2e,0x39,0x33,0x38,0x2c,0x31,0x30,0x2e,0x37,0x37, + 0x33,0x63,0x32,0x2e,0x39,0x2d,0x33,0x2e,0x39,0x33, + 0x38,0x2c,0x36,0x2e,0x35,0x34,0x31,0x2d,0x37,0x2e, + 0x30,0x36,0x31,0x2c,0x31,0x30,0x2e,0x39,0x33,0x31, + 0x2d,0x39,0x2e,0x33,0x37,0x36,0x63,0x34,0x2e,0x33, + 0x38,0x32,0x2d,0x32,0x2e,0x33,0x31,0x32,0x2c,0x39, + 0x2e,0x31,0x36,0x36,0x2d,0x33,0x2e,0x34,0x37,0x31, + 0x2c,0x31,0x34,0x2e,0x33,0x34,0x38,0x2d,0x33,0x2e, + 0x34,0x37,0x31,0x68,0x33,0x2e,0x32,0x31,0x31,0x0a, + 0x09,0x09,0x63,0x34,0x2e,0x32,0x38,0x32,0x2c,0x30, + 0x2c,0x38,0x2e,0x33,0x32,0x2c,0x30,0x2e,0x38,0x31, + 0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x2c,0x32,0x2e, + 0x34,0x33,0x34,0x63,0x33,0x2e,0x37,0x39,0x37,0x2c, + 0x31,0x2e,0x36,0x32,0x36,0x2c,0x37,0x2e,0x31,0x31, + 0x31,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39, + 0x34,0x33,0x2c,0x36,0x2e,0x36,0x38,0x32,0x73,0x35, + 0x2e,0x30,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c, + 0x36,0x2e,0x36,0x38,0x32,0x2c,0x39,0x2e,0x39,0x34, + 0x37,0x63,0x31,0x2e,0x36,0x32,0x33,0x2c,0x33,0x2e, + 0x37,0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2c, + 0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33, + 0x36,0x2c,0x31,0x32,0x2e,0x31,0x32,0x0a,0x09,0x09, 0x76,0x37,0x36,0x2e,0x39,0x36,0x38,0x4c,0x31,0x32, 0x35,0x30,0x2e,0x39,0x36,0x34,0x2c,0x33,0x34,0x33, 0x2e,0x35,0x35,0x4c,0x31,0x32,0x35,0x30,0x2e,0x39, 0x36,0x34,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x64,0x3d,0x22,0x4d,0x35,0x36,0x33,0x2e, - 0x31,0x30,0x39,0x2c,0x34,0x39,0x36,0x2e,0x32,0x35, - 0x38,0x63,0x30,0x2c,0x34,0x2e,0x32,0x37,0x38,0x2d, - 0x30,0x2e,0x38,0x36,0x35,0x2c,0x38,0x2e,0x31,0x39, - 0x38,0x2d,0x32,0x2e,0x35,0x38,0x37,0x2c,0x31,0x31, - 0x2e,0x37,0x35,0x37,0x63,0x2d,0x31,0x2e,0x37,0x32, - 0x39,0x2c,0x33,0x2e,0x35,0x36,0x31,0x2d,0x34,0x2e, - 0x30,0x37,0x36,0x2c,0x36,0x2e,0x36,0x31,0x33,0x2d, - 0x37,0x2e,0x30,0x34,0x36,0x2c,0x39,0x2e,0x31,0x37, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x39,0x37, - 0x2c,0x32,0x2e,0x35,0x35,0x38,0x2d,0x36,0x2e,0x34, - 0x30,0x36,0x2c,0x34,0x2e,0x35,0x33,0x39,0x2d,0x31, - 0x30,0x2e,0x33,0x30,0x37,0x2c,0x35,0x2e,0x39,0x35, - 0x35,0x63,0x2d,0x33,0x2e,0x39,0x30,0x33,0x2c,0x31, - 0x2e,0x34,0x31,0x36,0x2d,0x37,0x2e,0x39,0x39,0x35, - 0x2c,0x32,0x2e,0x31,0x32,0x2d,0x31,0x32,0x2e,0x32, - 0x37,0x37,0x2c,0x32,0x2e,0x31,0x32,0x48,0x35,0x32, - 0x32,0x2e,0x34,0x63,0x2d,0x34,0x2e,0x32,0x38,0x33, - 0x2c,0x30,0x2d,0x38,0x2e,0x33,0x37,0x37,0x2d,0x30, - 0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x32,0x37, - 0x37,0x2d,0x32,0x2e,0x34,0x33,0x34,0x0d,0x0a,0x09, - 0x09,0x63,0x2d,0x33,0x2e,0x39,0x30,0x33,0x2d,0x31, - 0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x33,0x32,0x2d, - 0x33,0x2e,0x38,0x34,0x33,0x2d,0x31,0x30,0x2e,0x32, - 0x35,0x37,0x2d,0x36,0x2e,0x36,0x38,0x33,0x63,0x2d, - 0x32,0x2e,0x39,0x33,0x36,0x2d,0x32,0x2e,0x38,0x32, - 0x34,0x2d,0x35,0x2e,0x32,0x38,0x2d,0x36,0x2e,0x31, - 0x34,0x2d,0x37,0x2e,0x30,0x34,0x32,0x2d,0x39,0x2e, - 0x39,0x34,0x33,0x63,0x2d,0x31,0x2e,0x37,0x36,0x2d, - 0x33,0x2e,0x37,0x39,0x37,0x2d,0x32,0x2e,0x36,0x34, - 0x31,0x2d,0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e, - 0x36,0x34,0x31,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36, - 0x76,0x2d,0x34,0x2e,0x32,0x34,0x38,0x0d,0x0a,0x09, - 0x09,0x6c,0x31,0x32,0x2e,0x37,0x34,0x2d,0x32,0x2e, - 0x30,0x37,0x34,0x76,0x37,0x2e,0x30,0x34,0x32,0x63, - 0x30,0x2c,0x32,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2e, - 0x35,0x33,0x31,0x2c,0x34,0x2e,0x39,0x36,0x31,0x2c, - 0x31,0x2e,0x36,0x30,0x34,0x2c,0x37,0x2e,0x32,0x30, - 0x32,0x63,0x31,0x2e,0x30,0x37,0x31,0x2c,0x32,0x2e, - 0x32,0x34,0x33,0x2c,0x32,0x2e,0x35,0x30,0x33,0x2c, - 0x34,0x2e,0x31,0x39,0x34,0x2c,0x34,0x2e,0x33,0x30, - 0x31,0x2c,0x35,0x2e,0x38,0x35,0x34,0x63,0x31,0x2e, - 0x37,0x39,0x35,0x2c,0x31,0x2e,0x36,0x35,0x34,0x2c, - 0x33,0x2e,0x38,0x36,0x36,0x2c,0x32,0x2e,0x39,0x37, - 0x31,0x2c,0x36,0x2e,0x32,0x31,0x37,0x2c,0x33,0x2e, - 0x39,0x33,0x36,0x0d,0x0a,0x09,0x09,0x63,0x32,0x2e, - 0x33,0x34,0x36,0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c, - 0x34,0x2e,0x37,0x39,0x39,0x2c,0x31,0x2e,0x34,0x34, - 0x37,0x2c,0x37,0x2e,0x33,0x35,0x34,0x2c,0x31,0x2e, - 0x34,0x34,0x37,0x68,0x38,0x2e,0x34,0x39,0x32,0x63, - 0x32,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2c,0x35,0x2e, - 0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c, - 0x37,0x2e,0x33,0x35,0x35,0x2d,0x31,0x2e,0x31,0x33, - 0x35,0x63,0x32,0x2e,0x33,0x34,0x37,0x2d,0x30,0x2e, - 0x37,0x36,0x35,0x2c,0x34,0x2e,0x34,0x33,0x37,0x2d, - 0x31,0x2e,0x38,0x35,0x32,0x2c,0x36,0x2e,0x32,0x37, - 0x2d,0x33,0x2e,0x32,0x36,0x38,0x0d,0x0a,0x09,0x09, - 0x63,0x31,0x2e,0x38,0x32,0x39,0x2d,0x31,0x2e,0x34, - 0x31,0x36,0x2c,0x33,0x2e,0x32,0x38,0x2d,0x33,0x2e, - 0x31,0x32,0x33,0x2c,0x34,0x2e,0x33,0x35,0x31,0x2d, - 0x35,0x2e,0x31,0x32,0x39,0x63,0x31,0x2e,0x30,0x36, - 0x38,0x2d,0x31,0x2e,0x39,0x39,0x37,0x2c,0x31,0x2e, - 0x36,0x30,0x34,0x2d,0x34,0x2e,0x32,0x37,0x37,0x2c, - 0x31,0x2e,0x36,0x30,0x34,0x2d,0x36,0x2e,0x38,0x33, - 0x35,0x63,0x30,0x2d,0x33,0x2e,0x37,0x39,0x37,0x2d, - 0x30,0x2e,0x38,0x32,0x37,0x2d,0x36,0x2e,0x39,0x30, - 0x33,0x2d,0x32,0x2e,0x34,0x38,0x38,0x2d,0x39,0x2e, - 0x33,0x32,0x33,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x31, - 0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x34,0x31,0x39, - 0x2d,0x33,0x2e,0x38,0x35,0x2d,0x34,0x2e,0x34,0x33, - 0x38,0x2d,0x36,0x2e,0x35,0x37,0x35,0x2d,0x36,0x2e, - 0x30,0x36,0x32,0x63,0x2d,0x32,0x2e,0x37,0x32,0x39, - 0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d,0x35,0x2e,0x38, - 0x33,0x36,0x2d,0x32,0x2e,0x39,0x36,0x34,0x2d,0x39, - 0x2e,0x33,0x32,0x32,0x2d,0x34,0x2e,0x30,0x33,0x34, - 0x63,0x2d,0x33,0x2e,0x34,0x39,0x2d,0x31,0x2e,0x30, - 0x37,0x31,0x2d,0x37,0x2e,0x30,0x36,0x35,0x2d,0x32, - 0x2e,0x31,0x34,0x35,0x2d,0x31,0x30,0x2e,0x37,0x32, - 0x35,0x2d,0x33,0x2e,0x32,0x31,0x35,0x0d,0x0a,0x09, - 0x09,0x63,0x2d,0x33,0x2e,0x36,0x36,0x33,0x2d,0x31, - 0x2e,0x30,0x37,0x31,0x2d,0x37,0x2e,0x32,0x33,0x36, - 0x2d,0x32,0x2e,0x32,0x39,0x36,0x2d,0x31,0x30,0x2e, - 0x37,0x32,0x34,0x2d,0x33,0x2e,0x36,0x37,0x34,0x63, - 0x2d,0x33,0x2e,0x34,0x38,0x36,0x2d,0x31,0x2e,0x33, - 0x38,0x37,0x2d,0x36,0x2e,0x35,0x39,0x34,0x2d,0x33, - 0x2e,0x32,0x2d,0x39,0x2e,0x33,0x32,0x33,0x2d,0x35, - 0x2e,0x34,0x34,0x32,0x63,0x2d,0x32,0x2e,0x37,0x32, - 0x39,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d,0x34,0x2e, - 0x39,0x31,0x38,0x2d,0x35,0x2e,0x30,0x36,0x2d,0x36, - 0x2e,0x35,0x37,0x35,0x2d,0x38,0x2e,0x34,0x34,0x32, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36,0x36, - 0x31,0x2d,0x33,0x2e,0x33,0x38,0x34,0x2d,0x32,0x2e, - 0x34,0x38,0x37,0x2d,0x37,0x2e,0x35,0x39,0x33,0x2d, - 0x32,0x2e,0x34,0x38,0x37,0x2d,0x31,0x32,0x2e,0x36, - 0x33,0x38,0x63,0x30,0x2d,0x34,0x2e,0x32,0x37,0x38, - 0x2c,0x30,0x2e,0x38,0x32,0x36,0x2d,0x38,0x2e,0x31, - 0x39,0x36,0x2c,0x32,0x2e,0x34,0x38,0x37,0x2d,0x31, - 0x31,0x2e,0x37,0x35,0x37,0x63,0x31,0x2e,0x36,0x35, - 0x37,0x2d,0x33,0x2e,0x35,0x36,0x31,0x2c,0x33,0x2e, - 0x39,0x2d,0x36,0x2e,0x36,0x31,0x33,0x2c,0x36,0x2e, - 0x37,0x33,0x32,0x2d,0x39,0x2e,0x31,0x37,0x0d,0x0a, + 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x64,0x3d,0x22,0x4d,0x35,0x36,0x33,0x2e,0x31, + 0x30,0x39,0x2c,0x34,0x39,0x36,0x2e,0x32,0x35,0x38, + 0x63,0x30,0x2c,0x34,0x2e,0x32,0x37,0x38,0x2d,0x30, + 0x2e,0x38,0x36,0x35,0x2c,0x38,0x2e,0x31,0x39,0x38, + 0x2d,0x32,0x2e,0x35,0x38,0x37,0x2c,0x31,0x31,0x2e, + 0x37,0x35,0x37,0x63,0x2d,0x31,0x2e,0x37,0x32,0x39, + 0x2c,0x33,0x2e,0x35,0x36,0x31,0x2d,0x34,0x2e,0x30, + 0x37,0x36,0x2c,0x36,0x2e,0x36,0x31,0x33,0x2d,0x37, + 0x2e,0x30,0x34,0x36,0x2c,0x39,0x2e,0x31,0x37,0x0a, + 0x09,0x09,0x63,0x2d,0x32,0x2e,0x39,0x37,0x2c,0x32, + 0x2e,0x35,0x35,0x38,0x2d,0x36,0x2e,0x34,0x30,0x36, + 0x2c,0x34,0x2e,0x35,0x33,0x39,0x2d,0x31,0x30,0x2e, + 0x33,0x30,0x37,0x2c,0x35,0x2e,0x39,0x35,0x35,0x63, + 0x2d,0x33,0x2e,0x39,0x30,0x33,0x2c,0x31,0x2e,0x34, + 0x31,0x36,0x2d,0x37,0x2e,0x39,0x39,0x35,0x2c,0x32, + 0x2e,0x31,0x32,0x2d,0x31,0x32,0x2e,0x32,0x37,0x37, + 0x2c,0x32,0x2e,0x31,0x32,0x48,0x35,0x32,0x32,0x2e, + 0x34,0x63,0x2d,0x34,0x2e,0x32,0x38,0x33,0x2c,0x30, + 0x2d,0x38,0x2e,0x33,0x37,0x37,0x2d,0x30,0x2e,0x38, + 0x31,0x32,0x2d,0x31,0x32,0x2e,0x32,0x37,0x37,0x2d, + 0x32,0x2e,0x34,0x33,0x34,0x0a,0x09,0x09,0x63,0x2d, + 0x33,0x2e,0x39,0x30,0x33,0x2d,0x31,0x2e,0x36,0x32, + 0x33,0x2d,0x37,0x2e,0x33,0x32,0x2d,0x33,0x2e,0x38, + 0x34,0x33,0x2d,0x31,0x30,0x2e,0x32,0x35,0x37,0x2d, + 0x36,0x2e,0x36,0x38,0x33,0x63,0x2d,0x32,0x2e,0x39, + 0x33,0x36,0x2d,0x32,0x2e,0x38,0x32,0x34,0x2d,0x35, + 0x2e,0x32,0x38,0x2d,0x36,0x2e,0x31,0x34,0x2d,0x37, + 0x2e,0x30,0x34,0x32,0x2d,0x39,0x2e,0x39,0x34,0x33, + 0x63,0x2d,0x31,0x2e,0x37,0x36,0x2d,0x33,0x2e,0x37, + 0x39,0x37,0x2d,0x32,0x2e,0x36,0x34,0x31,0x2d,0x37, + 0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x36,0x34,0x31, + 0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x76,0x2d,0x34, + 0x2e,0x32,0x34,0x38,0x0a,0x09,0x09,0x6c,0x31,0x32, + 0x2e,0x37,0x34,0x2d,0x32,0x2e,0x30,0x37,0x34,0x76, + 0x37,0x2e,0x30,0x34,0x32,0x63,0x30,0x2c,0x32,0x2e, + 0x35,0x35,0x37,0x2c,0x30,0x2e,0x35,0x33,0x31,0x2c, + 0x34,0x2e,0x39,0x36,0x31,0x2c,0x31,0x2e,0x36,0x30, + 0x34,0x2c,0x37,0x2e,0x32,0x30,0x32,0x63,0x31,0x2e, + 0x30,0x37,0x31,0x2c,0x32,0x2e,0x32,0x34,0x33,0x2c, + 0x32,0x2e,0x35,0x30,0x33,0x2c,0x34,0x2e,0x31,0x39, + 0x34,0x2c,0x34,0x2e,0x33,0x30,0x31,0x2c,0x35,0x2e, + 0x38,0x35,0x34,0x63,0x31,0x2e,0x37,0x39,0x35,0x2c, + 0x31,0x2e,0x36,0x35,0x34,0x2c,0x33,0x2e,0x38,0x36, + 0x36,0x2c,0x32,0x2e,0x39,0x37,0x31,0x2c,0x36,0x2e, + 0x32,0x31,0x37,0x2c,0x33,0x2e,0x39,0x33,0x36,0x0a, + 0x09,0x09,0x63,0x32,0x2e,0x33,0x34,0x36,0x2c,0x30, + 0x2e,0x39,0x36,0x35,0x2c,0x34,0x2e,0x37,0x39,0x39, + 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x33, + 0x35,0x34,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38, + 0x2e,0x34,0x39,0x32,0x63,0x32,0x2e,0x35,0x35,0x37, + 0x2c,0x30,0x2c,0x35,0x2e,0x30,0x30,0x36,0x2d,0x30, + 0x2e,0x33,0x37,0x36,0x2c,0x37,0x2e,0x33,0x35,0x35, + 0x2d,0x31,0x2e,0x31,0x33,0x35,0x63,0x32,0x2e,0x33, + 0x34,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35,0x2c,0x34, + 0x2e,0x34,0x33,0x37,0x2d,0x31,0x2e,0x38,0x35,0x32, + 0x2c,0x36,0x2e,0x32,0x37,0x2d,0x33,0x2e,0x32,0x36, + 0x38,0x0a,0x09,0x09,0x63,0x31,0x2e,0x38,0x32,0x39, + 0x2d,0x31,0x2e,0x34,0x31,0x36,0x2c,0x33,0x2e,0x32, + 0x38,0x2d,0x33,0x2e,0x31,0x32,0x33,0x2c,0x34,0x2e, + 0x33,0x35,0x31,0x2d,0x35,0x2e,0x31,0x32,0x39,0x63, + 0x31,0x2e,0x30,0x36,0x38,0x2d,0x31,0x2e,0x39,0x39, + 0x37,0x2c,0x31,0x2e,0x36,0x30,0x34,0x2d,0x34,0x2e, + 0x32,0x37,0x37,0x2c,0x31,0x2e,0x36,0x30,0x34,0x2d, + 0x36,0x2e,0x38,0x33,0x35,0x63,0x30,0x2d,0x33,0x2e, + 0x37,0x39,0x37,0x2d,0x30,0x2e,0x38,0x32,0x37,0x2d, + 0x36,0x2e,0x39,0x30,0x33,0x2d,0x32,0x2e,0x34,0x38, + 0x38,0x2d,0x39,0x2e,0x33,0x32,0x33,0x0a,0x09,0x09, + 0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e, + 0x34,0x31,0x39,0x2d,0x33,0x2e,0x38,0x35,0x2d,0x34, + 0x2e,0x34,0x33,0x38,0x2d,0x36,0x2e,0x35,0x37,0x35, + 0x2d,0x36,0x2e,0x30,0x36,0x32,0x63,0x2d,0x32,0x2e, + 0x37,0x32,0x39,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d, + 0x35,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x39,0x36, + 0x34,0x2d,0x39,0x2e,0x33,0x32,0x32,0x2d,0x34,0x2e, + 0x30,0x33,0x34,0x63,0x2d,0x33,0x2e,0x34,0x39,0x2d, + 0x31,0x2e,0x30,0x37,0x31,0x2d,0x37,0x2e,0x30,0x36, + 0x35,0x2d,0x32,0x2e,0x31,0x34,0x35,0x2d,0x31,0x30, + 0x2e,0x37,0x32,0x35,0x2d,0x33,0x2e,0x32,0x31,0x35, + 0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x36,0x36,0x33, + 0x2d,0x31,0x2e,0x30,0x37,0x31,0x2d,0x37,0x2e,0x32, + 0x33,0x36,0x2d,0x32,0x2e,0x32,0x39,0x36,0x2d,0x31, + 0x30,0x2e,0x37,0x32,0x34,0x2d,0x33,0x2e,0x36,0x37, + 0x34,0x63,0x2d,0x33,0x2e,0x34,0x38,0x36,0x2d,0x31, + 0x2e,0x33,0x38,0x37,0x2d,0x36,0x2e,0x35,0x39,0x34, + 0x2d,0x33,0x2e,0x32,0x2d,0x39,0x2e,0x33,0x32,0x33, + 0x2d,0x35,0x2e,0x34,0x34,0x32,0x63,0x2d,0x32,0x2e, + 0x37,0x32,0x39,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d, + 0x34,0x2e,0x39,0x31,0x38,0x2d,0x35,0x2e,0x30,0x36, + 0x2d,0x36,0x2e,0x35,0x37,0x35,0x2d,0x38,0x2e,0x34, + 0x34,0x32,0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36, + 0x36,0x31,0x2d,0x33,0x2e,0x33,0x38,0x34,0x2d,0x32, + 0x2e,0x34,0x38,0x37,0x2d,0x37,0x2e,0x35,0x39,0x33, + 0x2d,0x32,0x2e,0x34,0x38,0x37,0x2d,0x31,0x32,0x2e, + 0x36,0x33,0x38,0x63,0x30,0x2d,0x34,0x2e,0x32,0x37, + 0x38,0x2c,0x30,0x2e,0x38,0x32,0x36,0x2d,0x38,0x2e, + 0x31,0x39,0x36,0x2c,0x32,0x2e,0x34,0x38,0x37,0x2d, + 0x31,0x31,0x2e,0x37,0x35,0x37,0x63,0x31,0x2e,0x36, + 0x35,0x37,0x2d,0x33,0x2e,0x35,0x36,0x31,0x2c,0x33, + 0x2e,0x39,0x2d,0x36,0x2e,0x36,0x31,0x33,0x2c,0x36, + 0x2e,0x37,0x33,0x32,0x2d,0x39,0x2e,0x31,0x37,0x0a, 0x09,0x09,0x73,0x36,0x2e,0x31,0x32,0x37,0x2d,0x34, 0x2e,0x35,0x33,0x39,0x2c,0x39,0x2e,0x38,0x39,0x33, 0x2d,0x35,0x2e,0x39,0x35,0x35,0x63,0x33,0x2e,0x37, @@ -1266,105 +1254,104 @@ const unsigned char splash_svg_data[17935] = { 0x34,0x2e,0x32,0x38,0x33,0x2c,0x30,0x2c,0x38,0x2e, 0x33,0x32,0x34,0x2c,0x30,0x2e,0x38,0x31,0x39,0x2c, 0x31,0x32,0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e,0x34, - 0x33,0x35,0x0d,0x0a,0x09,0x09,0x63,0x33,0x2e,0x37, - 0x39,0x36,0x2c,0x31,0x2e,0x36,0x33,0x31,0x2c,0x37, - 0x2e,0x31,0x31,0x35,0x2c,0x33,0x2e,0x38,0x35,0x31, - 0x2c,0x39,0x2e,0x39,0x34,0x37,0x2c,0x36,0x2e,0x36, - 0x38,0x32,0x63,0x32,0x2e,0x38,0x32,0x37,0x2c,0x32, - 0x2e,0x38,0x33,0x34,0x2c,0x35,0x2e,0x30,0x35,0x36, - 0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36, - 0x38,0x32,0x2c,0x39,0x2e,0x39,0x35,0x31,0x63,0x31, - 0x2e,0x36,0x31,0x39,0x2c,0x33,0x2e,0x37,0x39,0x37, - 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38, - 0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31, - 0x32,0x2e,0x31,0x31,0x37,0x76,0x30,0x2e,0x34,0x31, - 0x33,0x0d,0x0a,0x09,0x09,0x6c,0x2d,0x31,0x32,0x2e, - 0x37,0x34,0x34,0x2c,0x32,0x2e,0x30,0x37,0x34,0x76, - 0x2d,0x33,0x2e,0x32,0x31,0x35,0x63,0x30,0x2d,0x32, - 0x2e,0x35,0x35,0x2d,0x30,0x2e,0x34,0x38,0x31,0x2d, - 0x34,0x2e,0x39,0x35,0x33,0x2d,0x31,0x2e,0x34,0x35, - 0x2d,0x37,0x2e,0x31,0x39,0x35,0x63,0x2d,0x30,0x2e, - 0x39,0x37,0x2d,0x32,0x2e,0x32,0x34,0x31,0x2d,0x32, - 0x2e,0x32,0x37,0x37,0x2d,0x34,0x2e,0x31,0x39,0x34, - 0x2d,0x33,0x2e,0x39,0x33,0x35,0x2d,0x35,0x2e,0x38, - 0x35,0x34,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d, - 0x31,0x2e,0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x30, - 0x38,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2d,0x35,0x2e, - 0x38,0x35,0x34,0x2d,0x33,0x2e,0x39,0x33,0x36,0x0d, - 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34,0x33, - 0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36, - 0x34,0x34,0x2d,0x31,0x2e,0x34,0x35,0x33,0x2d,0x37, - 0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x33, - 0x68,0x2d,0x37,0x2e,0x34,0x35,0x39,0x63,0x2d,0x32, - 0x2e,0x35,0x35,0x33,0x2c,0x30,0x2d,0x34,0x2e,0x39, - 0x35,0x36,0x2c,0x30,0x2e,0x33,0x38,0x33,0x2d,0x37, - 0x2e,0x31,0x39,0x39,0x2c,0x31,0x2e,0x31,0x34,0x31, - 0x63,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2c,0x30,0x2e, - 0x37,0x36,0x36,0x2d,0x34,0x2e,0x31,0x39,0x35,0x2c, - 0x31,0x2e,0x38,0x35,0x33,0x2d,0x35,0x2e,0x38,0x35, - 0x32,0x2c,0x33,0x2e,0x32,0x36,0x31,0x0d,0x0a,0x09, - 0x09,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x31, - 0x2e,0x34,0x32,0x34,0x2d,0x32,0x2e,0x39,0x37,0x31, - 0x2c,0x33,0x2e,0x31,0x33,0x2d,0x33,0x2e,0x39,0x33, - 0x38,0x2c,0x35,0x2e,0x31,0x32,0x38,0x63,0x2d,0x30, - 0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e,0x30,0x30,0x36, - 0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x34,0x2e,0x32, - 0x38,0x37,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x36, - 0x2e,0x38,0x34,0x34,0x63,0x30,0x2c,0x33,0x2e,0x36, - 0x35,0x38,0x2c,0x30,0x2e,0x38,0x33,0x31,0x2c,0x36, - 0x2e,0x36,0x34,0x35,0x2c,0x32,0x2e,0x34,0x38,0x38, - 0x2c,0x38,0x2e,0x39,0x35,0x35,0x0d,0x0a,0x09,0x09, - 0x63,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32,0x2e,0x33, - 0x31,0x39,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x34,0x2e, - 0x32,0x37,0x31,0x2c,0x36,0x2e,0x35,0x37,0x39,0x2c, - 0x35,0x2e,0x38,0x35,0x35,0x63,0x32,0x2e,0x37,0x32, - 0x35,0x2c,0x31,0x2e,0x35,0x39,0x32,0x2c,0x35,0x2e, - 0x38,0x33,0x33,0x2c,0x32,0x2e,0x39,0x31,0x36,0x2c, - 0x39,0x2e,0x33,0x32,0x33,0x2c,0x33,0x2e,0x39,0x38, - 0x36,0x63,0x33,0x2e,0x34,0x38,0x36,0x2c,0x31,0x2e, - 0x30,0x37,0x32,0x2c,0x37,0x2e,0x30,0x34,0x32,0x2c, - 0x32,0x2e,0x31,0x37,0x34,0x2c,0x31,0x30,0x2e,0x36, - 0x37,0x2c,0x33,0x2e,0x33,0x31,0x34,0x0d,0x0a,0x09, - 0x09,0x63,0x33,0x2e,0x36,0x32,0x35,0x2c,0x31,0x2e, - 0x31,0x34,0x31,0x2c,0x37,0x2e,0x31,0x38,0x2c,0x32, - 0x2e,0x34,0x33,0x36,0x2c,0x31,0x30,0x2e,0x36,0x37, - 0x2c,0x33,0x2e,0x38,0x38,0x39,0x63,0x33,0x2e,0x34, - 0x38,0x36,0x2c,0x31,0x2e,0x34,0x34,0x36,0x2c,0x36, - 0x2e,0x35,0x39,0x34,0x2c,0x33,0x2e,0x33,0x31,0x34, - 0x2c,0x39,0x2e,0x33,0x32,0x33,0x2c,0x35,0x2e,0x35, - 0x38,0x38,0x63,0x32,0x2e,0x37,0x32,0x39,0x2c,0x32, - 0x2e,0x32,0x38,0x2c,0x34,0x2e,0x39,0x32,0x32,0x2c, - 0x35,0x2e,0x31,0x32,0x39,0x2c,0x36,0x2e,0x35,0x37, - 0x39,0x2c,0x38,0x2e,0x35,0x35,0x31,0x0d,0x0a,0x09, - 0x09,0x43,0x35,0x36,0x32,0x2e,0x32,0x38,0x32,0x2c, - 0x34,0x38,0x36,0x2e,0x39,0x38,0x39,0x2c,0x35,0x36, - 0x33,0x2e,0x31,0x30,0x39,0x2c,0x34,0x39,0x31,0x2e, - 0x32,0x31,0x34,0x2c,0x35,0x36,0x33,0x2e,0x31,0x30, - 0x39,0x2c,0x34,0x39,0x36,0x2e,0x32,0x35,0x38,0x7a, - 0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x64,0x3d,0x22,0x4d,0x36,0x32,0x36,0x2e, - 0x31,0x39,0x36,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39, - 0x34,0x63,0x2d,0x33,0x2e,0x38,0x36,0x35,0x2c,0x30, - 0x2d,0x37,0x2e,0x35,0x30,0x39,0x2d,0x30,0x2e,0x37, - 0x32,0x39,0x2d,0x31,0x30,0x2e,0x39,0x32,0x36,0x2d, - 0x32,0x2e,0x31,0x37,0x34,0x63,0x2d,0x33,0x2e,0x34, - 0x32,0x31,0x2d,0x31,0x2e,0x34,0x35,0x35,0x2d,0x36, - 0x2e,0x33,0x39,0x32,0x2d,0x33,0x2e,0x34,0x36,0x31, - 0x2d,0x38,0x2e,0x39,0x31,0x2d,0x36,0x2e,0x30,0x31, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x32, - 0x31,0x2d,0x32,0x2e,0x35,0x35,0x37,0x2d,0x34,0x2e, - 0x35,0x32,0x32,0x2d,0x35,0x2e,0x35,0x32,0x35,0x2d, - 0x36,0x2e,0x30,0x30,0x38,0x2d,0x38,0x2e,0x39,0x30, - 0x38,0x63,0x2d,0x31,0x2e,0x34,0x38,0x35,0x2d,0x33, - 0x2e,0x33,0x38,0x35,0x2d,0x32,0x2e,0x32,0x32,0x39, - 0x2d,0x37,0x2e,0x30,0x31,0x33,0x2d,0x32,0x2e,0x32, - 0x32,0x39,0x2d,0x31,0x30,0x2e,0x38,0x37,0x37,0x76, - 0x2d,0x36,0x35,0x2e,0x39,0x39,0x36,0x68,0x2d,0x31, - 0x39,0x2e,0x30,0x35,0x39,0x76,0x2d,0x31,0x32,0x2e, - 0x31,0x31,0x37,0x68,0x31,0x39,0x2e,0x30,0x35,0x39, - 0x76,0x2d,0x32,0x35,0x2e,0x34,0x37,0x39,0x6c,0x31, - 0x32,0x2e,0x37,0x34,0x2d,0x32,0x2e,0x30,0x37,0x33, - 0x0d,0x0a,0x09,0x09,0x76,0x32,0x37,0x2e,0x35,0x35, + 0x33,0x35,0x0a,0x09,0x09,0x63,0x33,0x2e,0x37,0x39, + 0x36,0x2c,0x31,0x2e,0x36,0x33,0x31,0x2c,0x37,0x2e, + 0x31,0x31,0x35,0x2c,0x33,0x2e,0x38,0x35,0x31,0x2c, + 0x39,0x2e,0x39,0x34,0x37,0x2c,0x36,0x2e,0x36,0x38, + 0x32,0x63,0x32,0x2e,0x38,0x32,0x37,0x2c,0x32,0x2e, + 0x38,0x33,0x34,0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c, + 0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38, + 0x32,0x2c,0x39,0x2e,0x39,0x35,0x31,0x63,0x31,0x2e, + 0x36,0x31,0x39,0x2c,0x33,0x2e,0x37,0x39,0x37,0x2c, + 0x32,0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33, + 0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32, + 0x2e,0x31,0x31,0x37,0x76,0x30,0x2e,0x34,0x31,0x33, + 0x0a,0x09,0x09,0x6c,0x2d,0x31,0x32,0x2e,0x37,0x34, + 0x34,0x2c,0x32,0x2e,0x30,0x37,0x34,0x76,0x2d,0x33, + 0x2e,0x32,0x31,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35, + 0x35,0x2d,0x30,0x2e,0x34,0x38,0x31,0x2d,0x34,0x2e, + 0x39,0x35,0x33,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37, + 0x2e,0x31,0x39,0x35,0x63,0x2d,0x30,0x2e,0x39,0x37, + 0x2d,0x32,0x2e,0x32,0x34,0x31,0x2d,0x32,0x2e,0x32, + 0x37,0x37,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33, + 0x2e,0x39,0x33,0x35,0x2d,0x35,0x2e,0x38,0x35,0x34, + 0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x31,0x2e, + 0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x30,0x38,0x2d, + 0x32,0x2e,0x39,0x37,0x31,0x2d,0x35,0x2e,0x38,0x35, + 0x34,0x2d,0x33,0x2e,0x39,0x33,0x36,0x0a,0x09,0x09, + 0x63,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e, + 0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x34,0x2d, + 0x31,0x2e,0x34,0x35,0x33,0x2d,0x37,0x2e,0x31,0x39, + 0x39,0x2d,0x31,0x2e,0x34,0x35,0x33,0x68,0x2d,0x37, + 0x2e,0x34,0x35,0x39,0x63,0x2d,0x32,0x2e,0x35,0x35, + 0x33,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c, + 0x30,0x2e,0x33,0x38,0x33,0x2d,0x37,0x2e,0x31,0x39, + 0x39,0x2c,0x31,0x2e,0x31,0x34,0x31,0x63,0x2d,0x32, + 0x2e,0x32,0x34,0x33,0x2c,0x30,0x2e,0x37,0x36,0x36, + 0x2d,0x34,0x2e,0x31,0x39,0x35,0x2c,0x31,0x2e,0x38, + 0x35,0x33,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c,0x33, + 0x2e,0x32,0x36,0x31,0x0a,0x09,0x09,0x63,0x2d,0x31, + 0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e,0x34,0x32,0x34, + 0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e,0x31, + 0x33,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e, + 0x31,0x32,0x38,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39, + 0x2c,0x32,0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x34, + 0x35,0x31,0x2c,0x34,0x2e,0x32,0x38,0x37,0x2d,0x31, + 0x2e,0x34,0x35,0x31,0x2c,0x36,0x2e,0x38,0x34,0x34, + 0x63,0x30,0x2c,0x33,0x2e,0x36,0x35,0x38,0x2c,0x30, + 0x2e,0x38,0x33,0x31,0x2c,0x36,0x2e,0x36,0x34,0x35, + 0x2c,0x32,0x2e,0x34,0x38,0x38,0x2c,0x38,0x2e,0x39, + 0x35,0x35,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x35, + 0x37,0x2c,0x32,0x2e,0x33,0x31,0x39,0x2c,0x33,0x2e, + 0x38,0x35,0x2c,0x34,0x2e,0x32,0x37,0x31,0x2c,0x36, + 0x2e,0x35,0x37,0x39,0x2c,0x35,0x2e,0x38,0x35,0x35, + 0x63,0x32,0x2e,0x37,0x32,0x35,0x2c,0x31,0x2e,0x35, + 0x39,0x32,0x2c,0x35,0x2e,0x38,0x33,0x33,0x2c,0x32, + 0x2e,0x39,0x31,0x36,0x2c,0x39,0x2e,0x33,0x32,0x33, + 0x2c,0x33,0x2e,0x39,0x38,0x36,0x63,0x33,0x2e,0x34, + 0x38,0x36,0x2c,0x31,0x2e,0x30,0x37,0x32,0x2c,0x37, + 0x2e,0x30,0x34,0x32,0x2c,0x32,0x2e,0x31,0x37,0x34, + 0x2c,0x31,0x30,0x2e,0x36,0x37,0x2c,0x33,0x2e,0x33, + 0x31,0x34,0x0a,0x09,0x09,0x63,0x33,0x2e,0x36,0x32, + 0x35,0x2c,0x31,0x2e,0x31,0x34,0x31,0x2c,0x37,0x2e, + 0x31,0x38,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2c,0x31, + 0x30,0x2e,0x36,0x37,0x2c,0x33,0x2e,0x38,0x38,0x39, + 0x63,0x33,0x2e,0x34,0x38,0x36,0x2c,0x31,0x2e,0x34, + 0x34,0x36,0x2c,0x36,0x2e,0x35,0x39,0x34,0x2c,0x33, + 0x2e,0x33,0x31,0x34,0x2c,0x39,0x2e,0x33,0x32,0x33, + 0x2c,0x35,0x2e,0x35,0x38,0x38,0x63,0x32,0x2e,0x37, + 0x32,0x39,0x2c,0x32,0x2e,0x32,0x38,0x2c,0x34,0x2e, + 0x39,0x32,0x32,0x2c,0x35,0x2e,0x31,0x32,0x39,0x2c, + 0x36,0x2e,0x35,0x37,0x39,0x2c,0x38,0x2e,0x35,0x35, + 0x31,0x0a,0x09,0x09,0x43,0x35,0x36,0x32,0x2e,0x32, + 0x38,0x32,0x2c,0x34,0x38,0x36,0x2e,0x39,0x38,0x39, + 0x2c,0x35,0x36,0x33,0x2e,0x31,0x30,0x39,0x2c,0x34, + 0x39,0x31,0x2e,0x32,0x31,0x34,0x2c,0x35,0x36,0x33, + 0x2e,0x31,0x30,0x39,0x2c,0x34,0x39,0x36,0x2e,0x32, + 0x35,0x38,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x36,0x32, + 0x36,0x2e,0x31,0x39,0x36,0x2c,0x35,0x32,0x33,0x2e, + 0x31,0x39,0x34,0x63,0x2d,0x33,0x2e,0x38,0x36,0x35, + 0x2c,0x30,0x2d,0x37,0x2e,0x35,0x30,0x39,0x2d,0x30, + 0x2e,0x37,0x32,0x39,0x2d,0x31,0x30,0x2e,0x39,0x32, + 0x36,0x2d,0x32,0x2e,0x31,0x37,0x34,0x63,0x2d,0x33, + 0x2e,0x34,0x32,0x31,0x2d,0x31,0x2e,0x34,0x35,0x35, + 0x2d,0x36,0x2e,0x33,0x39,0x32,0x2d,0x33,0x2e,0x34, + 0x36,0x31,0x2d,0x38,0x2e,0x39,0x31,0x2d,0x36,0x2e, + 0x30,0x31,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35, + 0x32,0x31,0x2d,0x32,0x2e,0x35,0x35,0x37,0x2d,0x34, + 0x2e,0x35,0x32,0x32,0x2d,0x35,0x2e,0x35,0x32,0x35, + 0x2d,0x36,0x2e,0x30,0x30,0x38,0x2d,0x38,0x2e,0x39, + 0x30,0x38,0x63,0x2d,0x31,0x2e,0x34,0x38,0x35,0x2d, + 0x33,0x2e,0x33,0x38,0x35,0x2d,0x32,0x2e,0x32,0x32, + 0x39,0x2d,0x37,0x2e,0x30,0x31,0x33,0x2d,0x32,0x2e, + 0x32,0x32,0x39,0x2d,0x31,0x30,0x2e,0x38,0x37,0x37, + 0x76,0x2d,0x36,0x35,0x2e,0x39,0x39,0x36,0x68,0x2d, + 0x31,0x39,0x2e,0x30,0x35,0x39,0x76,0x2d,0x31,0x32, + 0x2e,0x31,0x31,0x37,0x68,0x31,0x39,0x2e,0x30,0x35, + 0x39,0x76,0x2d,0x32,0x35,0x2e,0x34,0x37,0x39,0x6c, + 0x31,0x32,0x2e,0x37,0x34,0x2d,0x32,0x2e,0x30,0x37, + 0x33,0x0a,0x09,0x09,0x76,0x32,0x37,0x2e,0x35,0x35, 0x35,0x48,0x36,0x33,0x37,0x2e,0x38,0x76,0x31,0x32, 0x2e,0x31,0x31,0x37,0x68,0x2d,0x32,0x36,0x2e,0x39, 0x33,0x37,0x76,0x36,0x36,0x2e,0x36,0x31,0x34,0x63, @@ -1374,111 +1361,110 @@ const unsigned char splash_svg_data[17935] = { 0x35,0x63,0x30,0x2e,0x37,0x39,0x32,0x2c,0x31,0x2e, 0x38,0x32,0x39,0x2c,0x31,0x2e,0x38,0x37,0x39,0x2c, 0x33,0x2e,0x34,0x33,0x37,0x2c,0x33,0x2e,0x32,0x36, - 0x31,0x2c,0x34,0x2e,0x38,0x31,0x33,0x0d,0x0a,0x09, - 0x09,0x63,0x31,0x2e,0x33,0x38,0x31,0x2c,0x31,0x2e, - 0x33,0x38,0x36,0x2c,0x33,0x2e,0x30,0x30,0x34,0x2c, - 0x32,0x2e,0x34,0x37,0x33,0x2c,0x34,0x2e,0x38,0x36, - 0x38,0x2c,0x33,0x2e,0x32,0x37,0x63,0x31,0x2e,0x38, - 0x36,0x38,0x2c,0x30,0x2e,0x37,0x38,0x38,0x2c,0x33, - 0x2e,0x38,0x36,0x39,0x2c,0x31,0x2e,0x31,0x38,0x38, - 0x2c,0x36,0x2e,0x30,0x30,0x38,0x2c,0x31,0x2e,0x31, - 0x38,0x38,0x68,0x31,0x31,0x2e,0x36,0x30,0x34,0x76, - 0x31,0x32,0x2e,0x31,0x32,0x33,0x48,0x36,0x32,0x36, - 0x2e,0x31,0x39,0x36,0x4c,0x36,0x32,0x36,0x2e,0x31, - 0x39,0x36,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x37,0x32,0x37, - 0x2e,0x38,0x32,0x31,0x2c,0x35,0x32,0x33,0x2e,0x31, - 0x39,0x34,0x6c,0x2d,0x37,0x2e,0x30,0x34,0x32,0x2d, - 0x31,0x30,0x2e,0x35,0x37,0x63,0x2d,0x32,0x2e,0x38, - 0x39,0x39,0x2c,0x33,0x2e,0x38,0x30,0x34,0x2d,0x36, - 0x2e,0x35,0x32,0x37,0x2c,0x36,0x2e,0x38,0x35,0x37, - 0x2d,0x31,0x30,0x2e,0x38,0x37,0x36,0x2c,0x39,0x2e, - 0x31,0x36,0x39,0x63,0x2d,0x34,0x2e,0x33,0x35,0x32, - 0x2c,0x32,0x2e,0x33,0x31,0x32,0x2d,0x39,0x2e,0x31, - 0x31,0x36,0x2c,0x33,0x2e,0x34,0x36,0x38,0x2d,0x31, - 0x34,0x2e,0x32,0x39,0x39,0x2c,0x33,0x2e,0x34,0x36, - 0x38,0x68,0x2d,0x33,0x2e,0x32,0x30,0x37,0x0d,0x0a, - 0x09,0x09,0x63,0x2d,0x34,0x2e,0x32,0x38,0x36,0x2c, - 0x30,0x2d,0x38,0x2e,0x33,0x32,0x38,0x2d,0x30,0x2e, - 0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x31,0x32,0x34, - 0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d,0x33,0x2e, - 0x38,0x30,0x31,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d, - 0x37,0x2e,0x31,0x31,0x34,0x2d,0x33,0x2e,0x38,0x34, - 0x34,0x2d,0x39,0x2e,0x39,0x34,0x33,0x2d,0x36,0x2e, - 0x36,0x38,0x34,0x63,0x2d,0x32,0x2e,0x38,0x33,0x36, - 0x2d,0x32,0x2e,0x38,0x32,0x34,0x2d,0x35,0x2e,0x30, - 0x36,0x32,0x2d,0x36,0x2e,0x31,0x33,0x39,0x2d,0x36, - 0x2e,0x36,0x38,0x32,0x2d,0x39,0x2e,0x39,0x34,0x32, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36,0x32, - 0x37,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32,0x2e, - 0x34,0x33,0x35,0x2d,0x37,0x2e,0x38,0x33,0x39,0x2d, - 0x32,0x2e,0x34,0x33,0x35,0x2d,0x31,0x32,0x2e,0x31, - 0x31,0x36,0x76,0x2d,0x31,0x2e,0x30,0x34,0x31,0x63, - 0x30,0x2d,0x34,0x2e,0x32,0x37,0x37,0x2c,0x30,0x2e, - 0x38,0x30,0x38,0x2d,0x38,0x2e,0x33,0x32,0x2c,0x32, + 0x31,0x2c,0x34,0x2e,0x38,0x31,0x33,0x0a,0x09,0x09, + 0x63,0x31,0x2e,0x33,0x38,0x31,0x2c,0x31,0x2e,0x33, + 0x38,0x36,0x2c,0x33,0x2e,0x30,0x30,0x34,0x2c,0x32, + 0x2e,0x34,0x37,0x33,0x2c,0x34,0x2e,0x38,0x36,0x38, + 0x2c,0x33,0x2e,0x32,0x37,0x63,0x31,0x2e,0x38,0x36, + 0x38,0x2c,0x30,0x2e,0x37,0x38,0x38,0x2c,0x33,0x2e, + 0x38,0x36,0x39,0x2c,0x31,0x2e,0x31,0x38,0x38,0x2c, + 0x36,0x2e,0x30,0x30,0x38,0x2c,0x31,0x2e,0x31,0x38, + 0x38,0x68,0x31,0x31,0x2e,0x36,0x30,0x34,0x76,0x31, + 0x32,0x2e,0x31,0x32,0x33,0x48,0x36,0x32,0x36,0x2e, + 0x31,0x39,0x36,0x4c,0x36,0x32,0x36,0x2e,0x31,0x39, + 0x36,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x64,0x3d,0x22,0x4d,0x37,0x32,0x37,0x2e,0x38, + 0x32,0x31,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34, + 0x6c,0x2d,0x37,0x2e,0x30,0x34,0x32,0x2d,0x31,0x30, + 0x2e,0x35,0x37,0x63,0x2d,0x32,0x2e,0x38,0x39,0x39, + 0x2c,0x33,0x2e,0x38,0x30,0x34,0x2d,0x36,0x2e,0x35, + 0x32,0x37,0x2c,0x36,0x2e,0x38,0x35,0x37,0x2d,0x31, + 0x30,0x2e,0x38,0x37,0x36,0x2c,0x39,0x2e,0x31,0x36, + 0x39,0x63,0x2d,0x34,0x2e,0x33,0x35,0x32,0x2c,0x32, + 0x2e,0x33,0x31,0x32,0x2d,0x39,0x2e,0x31,0x31,0x36, + 0x2c,0x33,0x2e,0x34,0x36,0x38,0x2d,0x31,0x34,0x2e, + 0x32,0x39,0x39,0x2c,0x33,0x2e,0x34,0x36,0x38,0x68, + 0x2d,0x33,0x2e,0x32,0x30,0x37,0x0a,0x09,0x09,0x63, + 0x2d,0x34,0x2e,0x32,0x38,0x36,0x2c,0x30,0x2d,0x38, + 0x2e,0x33,0x32,0x38,0x2d,0x30,0x2e,0x38,0x31,0x32, + 0x2d,0x31,0x32,0x2e,0x31,0x32,0x34,0x2d,0x32,0x2e, + 0x34,0x33,0x34,0x63,0x2d,0x33,0x2e,0x38,0x30,0x31, + 0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31, + 0x31,0x34,0x2d,0x33,0x2e,0x38,0x34,0x34,0x2d,0x39, + 0x2e,0x39,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x34, + 0x63,0x2d,0x32,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e, + 0x38,0x32,0x34,0x2d,0x35,0x2e,0x30,0x36,0x32,0x2d, + 0x36,0x2e,0x31,0x33,0x39,0x2d,0x36,0x2e,0x36,0x38, + 0x32,0x2d,0x39,0x2e,0x39,0x34,0x32,0x0a,0x09,0x09, + 0x63,0x2d,0x31,0x2e,0x36,0x32,0x37,0x2d,0x33,0x2e, + 0x37,0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d, + 0x37,0x2e,0x38,0x33,0x39,0x2d,0x32,0x2e,0x34,0x33, + 0x35,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x76,0x2d, + 0x31,0x2e,0x30,0x34,0x31,0x63,0x30,0x2d,0x34,0x2e, + 0x32,0x37,0x37,0x2c,0x30,0x2e,0x38,0x30,0x38,0x2d, + 0x38,0x2e,0x33,0x32,0x2c,0x32,0x2e,0x34,0x33,0x35, + 0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x63,0x31,0x2e, + 0x36,0x31,0x38,0x2d,0x33,0x2e,0x37,0x39,0x37,0x2c, + 0x33,0x2e,0x38,0x34,0x36,0x2d,0x37,0x2e,0x31,0x31, + 0x2c,0x36,0x2e,0x36,0x38,0x32,0x2d,0x39,0x2e,0x39, + 0x34,0x32,0x0a,0x09,0x09,0x63,0x32,0x2e,0x38,0x32, + 0x39,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x36,0x2e, + 0x31,0x34,0x34,0x2d,0x35,0x2e,0x30,0x36,0x31,0x2c, + 0x39,0x2e,0x39,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38, + 0x33,0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e, + 0x36,0x32,0x32,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d, + 0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32,0x2e,0x31, + 0x32,0x34,0x2d,0x32,0x2e,0x34,0x33,0x35,0x68,0x32, + 0x36,0x2e,0x39,0x33,0x32,0x76,0x2d,0x31,0x36,0x2e, + 0x33,0x37,0x32,0x63,0x30,0x2d,0x32,0x2e,0x35,0x34, + 0x39,0x2d,0x30,0x2e,0x34,0x38,0x35,0x2d,0x34,0x2e, + 0x39,0x35,0x33,0x2d,0x31,0x2e,0x34,0x34,0x39,0x2d, + 0x37,0x2e,0x31,0x39,0x35,0x0a,0x09,0x09,0x63,0x2d, + 0x30,0x2e,0x39,0x37,0x2d,0x32,0x2e,0x32,0x34,0x31, + 0x2d,0x32,0x2e,0x32,0x38,0x31,0x2d,0x34,0x2e,0x31, + 0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x36,0x2d,0x35, + 0x2e,0x38,0x35,0x34,0x63,0x2d,0x31,0x2e,0x36,0x36, + 0x31,0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d,0x33,0x2e, + 0x36,0x31,0x32,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2d, + 0x35,0x2e,0x38,0x35,0x34,0x2d,0x33,0x2e,0x39,0x33, + 0x36,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d,0x30, + 0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36, + 0x2d,0x31,0x2e,0x34,0x35,0x33,0x2d,0x37,0x2e,0x31, + 0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x33,0x68,0x2d, + 0x37,0x2e,0x34,0x35,0x39,0x0a,0x09,0x09,0x63,0x2d, + 0x32,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e, + 0x39,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x39,0x2d, + 0x37,0x2e,0x32,0x30,0x32,0x2c,0x31,0x2e,0x34,0x35, + 0x33,0x63,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2c,0x30, + 0x2e,0x39,0x36,0x35,0x2d,0x34,0x2e,0x31,0x39,0x34, + 0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38, + 0x35,0x32,0x2c,0x33,0x2e,0x39,0x33,0x36,0x63,0x2d, + 0x31,0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e,0x36,0x36, + 0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e,0x36, + 0x31,0x33,0x2d,0x33,0x2e,0x39,0x33,0x36,0x2c,0x35, + 0x2e,0x38,0x35,0x34,0x0a,0x09,0x09,0x63,0x2d,0x30, + 0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x32, + 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34, + 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31, + 0x39,0x35,0x76,0x33,0x2e,0x38,0x33,0x34,0x6c,0x2d, + 0x31,0x32,0x2e,0x37,0x34,0x34,0x2d,0x32,0x2e,0x30, + 0x37,0x34,0x76,0x2d,0x31,0x2e,0x30,0x33,0x32,0x63, + 0x30,0x2d,0x34,0x2e,0x32,0x37,0x39,0x2c,0x30,0x2e, + 0x38,0x31,0x32,0x2d,0x38,0x2e,0x33,0x32,0x2c,0x32, 0x2e,0x34,0x33,0x35,0x2d,0x31,0x32,0x2e,0x31,0x31, - 0x36,0x63,0x31,0x2e,0x36,0x31,0x38,0x2d,0x33,0x2e, - 0x37,0x39,0x37,0x2c,0x33,0x2e,0x38,0x34,0x36,0x2d, - 0x37,0x2e,0x31,0x31,0x2c,0x36,0x2e,0x36,0x38,0x32, - 0x2d,0x39,0x2e,0x39,0x34,0x32,0x0d,0x0a,0x09,0x09, - 0x63,0x32,0x2e,0x38,0x32,0x39,0x2d,0x32,0x2e,0x38, - 0x33,0x32,0x2c,0x36,0x2e,0x31,0x34,0x34,0x2d,0x35, - 0x2e,0x30,0x36,0x31,0x2c,0x39,0x2e,0x39,0x34,0x33, - 0x2d,0x36,0x2e,0x36,0x38,0x33,0x63,0x33,0x2e,0x37, - 0x39,0x36,0x2d,0x31,0x2e,0x36,0x32,0x32,0x2c,0x37, - 0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x35, - 0x2c,0x31,0x32,0x2e,0x31,0x32,0x34,0x2d,0x32,0x2e, - 0x34,0x33,0x35,0x68,0x32,0x36,0x2e,0x39,0x33,0x32, - 0x76,0x2d,0x31,0x36,0x2e,0x33,0x37,0x32,0x63,0x30, - 0x2d,0x32,0x2e,0x35,0x34,0x39,0x2d,0x30,0x2e,0x34, - 0x38,0x35,0x2d,0x34,0x2e,0x39,0x35,0x33,0x2d,0x31, - 0x2e,0x34,0x34,0x39,0x2d,0x37,0x2e,0x31,0x39,0x35, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x30,0x2e,0x39,0x37, - 0x2d,0x32,0x2e,0x32,0x34,0x31,0x2d,0x32,0x2e,0x32, - 0x38,0x31,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33, - 0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e,0x38,0x35,0x34, - 0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e, - 0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x31,0x32,0x2d, - 0x32,0x2e,0x39,0x37,0x31,0x2d,0x35,0x2e,0x38,0x35, - 0x34,0x2d,0x33,0x2e,0x39,0x33,0x36,0x63,0x2d,0x32, - 0x2e,0x32,0x34,0x32,0x2d,0x30,0x2e,0x39,0x36,0x34, - 0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34, - 0x35,0x33,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31, - 0x2e,0x34,0x35,0x33,0x68,0x2d,0x37,0x2e,0x34,0x35, - 0x39,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35, - 0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36, - 0x2c,0x30,0x2e,0x34,0x38,0x39,0x2d,0x37,0x2e,0x32, - 0x30,0x32,0x2c,0x31,0x2e,0x34,0x35,0x33,0x63,0x2d, - 0x32,0x2e,0x32,0x34,0x33,0x2c,0x30,0x2e,0x39,0x36, - 0x35,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c,0x32,0x2e, - 0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c, - 0x33,0x2e,0x39,0x33,0x36,0x63,0x2d,0x31,0x2e,0x36, - 0x35,0x37,0x2c,0x31,0x2e,0x36,0x36,0x2d,0x32,0x2e, - 0x39,0x37,0x31,0x2c,0x33,0x2e,0x36,0x31,0x33,0x2d, - 0x33,0x2e,0x39,0x33,0x36,0x2c,0x35,0x2e,0x38,0x35, - 0x34,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x30,0x2e,0x39, - 0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x32,0x2d,0x31, - 0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d, - 0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39,0x35, - 0x76,0x33,0x2e,0x38,0x33,0x34,0x6c,0x2d,0x31,0x32, - 0x2e,0x37,0x34,0x34,0x2d,0x32,0x2e,0x30,0x37,0x34, - 0x76,0x2d,0x31,0x2e,0x30,0x33,0x32,0x63,0x30,0x2d, - 0x34,0x2e,0x32,0x37,0x39,0x2c,0x30,0x2e,0x38,0x31, - 0x32,0x2d,0x38,0x2e,0x33,0x32,0x2c,0x32,0x2e,0x34, - 0x33,0x35,0x2d,0x31,0x32,0x2e,0x31,0x31,0x37,0x0d, - 0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x32,0x33,0x2d, - 0x33,0x2e,0x38,0x30,0x35,0x2c,0x33,0x2e,0x38,0x35, - 0x2d,0x37,0x2e,0x31,0x31,0x37,0x2c,0x36,0x2e,0x36, - 0x38,0x33,0x2d,0x39,0x2e,0x39,0x35,0x63,0x32,0x2e, - 0x38,0x33,0x32,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c, - 0x36,0x2e,0x31,0x34,0x36,0x2d,0x35,0x2e,0x30,0x35, - 0x32,0x2c,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36,0x2e, - 0x36,0x38,0x33,0x63,0x33,0x2e,0x37,0x39,0x36,0x2d, - 0x31,0x2e,0x36,0x31,0x35,0x2c,0x37,0x2e,0x38,0x33, - 0x38,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32, - 0x2e,0x31,0x32,0x2d,0x32,0x2e,0x34,0x33,0x35,0x68, - 0x37,0x2e,0x34,0x35,0x39,0x0d,0x0a,0x09,0x09,0x63, + 0x37,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x32,0x33, + 0x2d,0x33,0x2e,0x38,0x30,0x35,0x2c,0x33,0x2e,0x38, + 0x35,0x2d,0x37,0x2e,0x31,0x31,0x37,0x2c,0x36,0x2e, + 0x36,0x38,0x33,0x2d,0x39,0x2e,0x39,0x35,0x63,0x32, + 0x2e,0x38,0x33,0x32,0x2d,0x32,0x2e,0x38,0x33,0x32, + 0x2c,0x36,0x2e,0x31,0x34,0x36,0x2d,0x35,0x2e,0x30, + 0x35,0x32,0x2c,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36, + 0x2e,0x36,0x38,0x33,0x63,0x33,0x2e,0x37,0x39,0x36, + 0x2d,0x31,0x2e,0x36,0x31,0x35,0x2c,0x37,0x2e,0x38, + 0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31, + 0x32,0x2e,0x31,0x32,0x2d,0x32,0x2e,0x34,0x33,0x35, + 0x68,0x37,0x2e,0x34,0x35,0x39,0x0a,0x09,0x09,0x63, 0x34,0x2e,0x32,0x38,0x33,0x2c,0x30,0x2c,0x38,0x2e, 0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x39,0x2c,0x31, 0x32,0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e,0x34,0x33, @@ -1489,110 +1475,109 @@ const unsigned char splash_svg_data[17935] = { 0x38,0x33,0x32,0x2c,0x32,0x2e,0x38,0x33,0x33,0x2c, 0x35,0x2e,0x30,0x36,0x31,0x2c,0x36,0x2e,0x31,0x34, 0x36,0x2c,0x36,0x2e,0x36,0x38,0x34,0x2c,0x39,0x2e, - 0x39,0x35,0x0d,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36, - 0x32,0x33,0x2c,0x33,0x2e,0x37,0x39,0x37,0x2c,0x32, - 0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38, - 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, - 0x31,0x31,0x37,0x76,0x37,0x36,0x2e,0x39,0x37,0x31, - 0x48,0x37,0x32,0x37,0x2e,0x38,0x32,0x31,0x4c,0x37, - 0x32,0x37,0x2e,0x38,0x32,0x31,0x2c,0x35,0x32,0x33, - 0x2e,0x31,0x39,0x34,0x7a,0x20,0x4d,0x37,0x31,0x39, - 0x2e,0x33,0x32,0x38,0x2c,0x34,0x37,0x31,0x2e,0x38, - 0x31,0x68,0x2d,0x32,0x36,0x2e,0x39,0x33,0x32,0x63, - 0x2d,0x32,0x2e,0x35,0x36,0x31,0x2c,0x30,0x2d,0x34, - 0x2e,0x39,0x36,0x2c,0x30,0x2e,0x34,0x38,0x32,0x2d, + 0x39,0x35,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x32, + 0x33,0x2c,0x33,0x2e,0x37,0x39,0x37,0x2c,0x32,0x2e, + 0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c, + 0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31, + 0x31,0x37,0x76,0x37,0x36,0x2e,0x39,0x37,0x31,0x48, + 0x37,0x32,0x37,0x2e,0x38,0x32,0x31,0x4c,0x37,0x32, + 0x37,0x2e,0x38,0x32,0x31,0x2c,0x35,0x32,0x33,0x2e, + 0x31,0x39,0x34,0x7a,0x20,0x4d,0x37,0x31,0x39,0x2e, + 0x33,0x32,0x38,0x2c,0x34,0x37,0x31,0x2e,0x38,0x31, + 0x68,0x2d,0x32,0x36,0x2e,0x39,0x33,0x32,0x63,0x2d, + 0x32,0x2e,0x35,0x36,0x31,0x2c,0x30,0x2d,0x34,0x2e, + 0x39,0x36,0x2c,0x30,0x2e,0x34,0x38,0x32,0x2d,0x37, + 0x2e,0x32,0x30,0x32,0x2c,0x31,0x2e,0x34,0x34,0x37, + 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34,0x37, + 0x2c,0x30,0x2e,0x39,0x37,0x33,0x2d,0x34,0x2e,0x31, + 0x39,0x33,0x2c,0x32,0x2e,0x32,0x39,0x36,0x2d,0x35, + 0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x39,0x38,0x38, + 0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e, + 0x36,0x39,0x39,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c, + 0x33,0x2e,0x36,0x36,0x36,0x2d,0x33,0x2e,0x39,0x33, + 0x36,0x2c,0x35,0x2e,0x39,0x30,0x38,0x63,0x2d,0x30, + 0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x32, + 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34, + 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x32, + 0x30,0x33,0x76,0x34,0x2e,0x34,0x34,0x36,0x0a,0x09, + 0x09,0x63,0x30,0x2c,0x32,0x2e,0x35,0x35,0x38,0x2c, + 0x30,0x2e,0x34,0x38,0x31,0x2c,0x34,0x2e,0x39,0x36, + 0x2c,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x32,0x30, + 0x32,0x63,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, + 0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x37,0x37,0x2c, + 0x34,0x2e,0x31,0x39,0x34,0x2c,0x33,0x2e,0x39,0x33, + 0x36,0x2c,0x35,0x2e,0x38,0x35,0x35,0x63,0x31,0x2e, + 0x36,0x36,0x31,0x2c,0x31,0x2e,0x36,0x35,0x32,0x2c, + 0x33,0x2e,0x36,0x30,0x37,0x2c,0x32,0x2e,0x39,0x37, + 0x2c,0x35,0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x39, + 0x33,0x35,0x0a,0x09,0x09,0x63,0x32,0x2e,0x32,0x34, + 0x32,0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x34,0x2e, + 0x36,0x34,0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c, 0x37,0x2e,0x32,0x30,0x32,0x2c,0x31,0x2e,0x34,0x34, - 0x37,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32, - 0x34,0x37,0x2c,0x30,0x2e,0x39,0x37,0x33,0x2d,0x34, - 0x2e,0x31,0x39,0x33,0x2c,0x32,0x2e,0x32,0x39,0x36, - 0x2d,0x35,0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x39, - 0x38,0x38,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c, - 0x31,0x2e,0x36,0x39,0x39,0x2d,0x32,0x2e,0x39,0x37, - 0x31,0x2c,0x33,0x2e,0x36,0x36,0x36,0x2d,0x33,0x2e, - 0x39,0x33,0x36,0x2c,0x35,0x2e,0x39,0x30,0x38,0x63, - 0x2d,0x30,0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e,0x32, - 0x34,0x32,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e, - 0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37, - 0x2e,0x32,0x30,0x33,0x76,0x34,0x2e,0x34,0x34,0x36, - 0x0d,0x0a,0x09,0x09,0x63,0x30,0x2c,0x32,0x2e,0x35, - 0x35,0x38,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2c,0x34, - 0x2e,0x39,0x36,0x2c,0x31,0x2e,0x34,0x35,0x2c,0x37, - 0x2e,0x32,0x30,0x32,0x63,0x30,0x2e,0x39,0x36,0x35, - 0x2c,0x32,0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e,0x32, - 0x37,0x37,0x2c,0x34,0x2e,0x31,0x39,0x34,0x2c,0x33, - 0x2e,0x39,0x33,0x36,0x2c,0x35,0x2e,0x38,0x35,0x35, - 0x63,0x31,0x2e,0x36,0x36,0x31,0x2c,0x31,0x2e,0x36, - 0x35,0x32,0x2c,0x33,0x2e,0x36,0x30,0x37,0x2c,0x32, - 0x2e,0x39,0x37,0x2c,0x35,0x2e,0x38,0x35,0x34,0x2c, - 0x33,0x2e,0x39,0x33,0x35,0x0d,0x0a,0x09,0x09,0x63, - 0x32,0x2e,0x32,0x34,0x32,0x2c,0x30,0x2e,0x39,0x36, - 0x35,0x2c,0x34,0x2e,0x36,0x34,0x33,0x2c,0x31,0x2e, - 0x34,0x34,0x37,0x2c,0x37,0x2e,0x32,0x30,0x32,0x2c, - 0x31,0x2e,0x34,0x34,0x37,0x68,0x38,0x2e,0x34,0x39, - 0x32,0x63,0x32,0x2e,0x35,0x35,0x33,0x2c,0x30,0x2c, - 0x34,0x2e,0x39,0x35,0x37,0x2d,0x30,0x2e,0x34,0x38, - 0x32,0x2c,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e, - 0x34,0x34,0x37,0x63,0x32,0x2e,0x32,0x34,0x31,0x2d, - 0x30,0x2e,0x39,0x36,0x35,0x2c,0x34,0x2e,0x31,0x39, - 0x33,0x2d,0x32,0x2e,0x32,0x38,0x2c,0x35,0x2e,0x38, - 0x35,0x34,0x2d,0x33,0x2e,0x39,0x33,0x35,0x0d,0x0a, - 0x09,0x09,0x63,0x31,0x2e,0x36,0x35,0x33,0x2d,0x31, - 0x2e,0x36,0x36,0x31,0x2c,0x32,0x2e,0x39,0x36,0x36, - 0x2d,0x33,0x2e,0x36,0x31,0x32,0x2c,0x33,0x2e,0x39, - 0x33,0x36,0x2d,0x35,0x2e,0x38,0x35,0x35,0x63,0x30, - 0x2e,0x39,0x36,0x34,0x2d,0x32,0x2e,0x32,0x34,0x32, - 0x2c,0x31,0x2e,0x34,0x34,0x39,0x2d,0x34,0x2e,0x36, - 0x34,0x36,0x2c,0x31,0x2e,0x34,0x34,0x39,0x2d,0x37, - 0x2e,0x32,0x30,0x32,0x4c,0x37,0x31,0x39,0x2e,0x33, - 0x32,0x38,0x2c,0x34,0x37,0x31,0x2e,0x38,0x31,0x4c, + 0x37,0x68,0x38,0x2e,0x34,0x39,0x32,0x63,0x32,0x2e, + 0x35,0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35, + 0x37,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e, + 0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63, + 0x32,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x39,0x36, + 0x35,0x2c,0x34,0x2e,0x31,0x39,0x33,0x2d,0x32,0x2e, + 0x32,0x38,0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33, + 0x2e,0x39,0x33,0x35,0x0a,0x09,0x09,0x63,0x31,0x2e, + 0x36,0x35,0x33,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c, + 0x32,0x2e,0x39,0x36,0x36,0x2d,0x33,0x2e,0x36,0x31, + 0x32,0x2c,0x33,0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e, + 0x38,0x35,0x35,0x63,0x30,0x2e,0x39,0x36,0x34,0x2d, + 0x32,0x2e,0x32,0x34,0x32,0x2c,0x31,0x2e,0x34,0x34, + 0x39,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e, + 0x34,0x34,0x39,0x2d,0x37,0x2e,0x32,0x30,0x32,0x4c, 0x37,0x31,0x39,0x2e,0x33,0x32,0x38,0x2c,0x34,0x37, - 0x31,0x2e,0x38,0x31,0x7a,0x22,0x2f,0x3e,0x0d,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, - 0x4d,0x37,0x39,0x36,0x2e,0x31,0x39,0x33,0x2c,0x35, - 0x32,0x33,0x2e,0x31,0x39,0x34,0x63,0x2d,0x33,0x2e, - 0x38,0x36,0x39,0x2c,0x30,0x2d,0x37,0x2e,0x35,0x31, - 0x33,0x2d,0x30,0x2e,0x37,0x32,0x39,0x2d,0x31,0x30, - 0x2e,0x39,0x32,0x37,0x2d,0x32,0x2e,0x31,0x37,0x34, - 0x63,0x2d,0x33,0x2e,0x34,0x32,0x31,0x2d,0x31,0x2e, - 0x34,0x35,0x35,0x2d,0x36,0x2e,0x33,0x39,0x32,0x2d, - 0x33,0x2e,0x34,0x36,0x31,0x2d,0x38,0x2e,0x39,0x30, - 0x39,0x2d,0x36,0x2e,0x30,0x31,0x0d,0x0a,0x09,0x09, - 0x63,0x2d,0x32,0x2e,0x35,0x32,0x36,0x2d,0x32,0x2e, - 0x35,0x35,0x37,0x2d,0x34,0x2e,0x35,0x32,0x33,0x2d, - 0x35,0x2e,0x35,0x32,0x35,0x2d,0x36,0x2e,0x30,0x30, - 0x39,0x2d,0x38,0x2e,0x39,0x30,0x38,0x63,0x2d,0x31, - 0x2e,0x34,0x38,0x35,0x2d,0x33,0x2e,0x33,0x38,0x35, - 0x2d,0x32,0x2e,0x32,0x32,0x39,0x2d,0x37,0x2e,0x30, - 0x31,0x33,0x2d,0x32,0x2e,0x32,0x32,0x39,0x2d,0x31, - 0x30,0x2e,0x38,0x37,0x37,0x76,0x2d,0x36,0x35,0x2e, - 0x39,0x39,0x36,0x68,0x2d,0x31,0x39,0x2e,0x30,0x35, - 0x39,0x76,0x2d,0x31,0x32,0x2e,0x31,0x31,0x37,0x68, - 0x31,0x39,0x2e,0x30,0x35,0x39,0x76,0x2d,0x32,0x35, - 0x2e,0x34,0x37,0x39,0x0d,0x0a,0x09,0x09,0x6c,0x31, - 0x32,0x2e,0x37,0x34,0x31,0x2d,0x32,0x2e,0x30,0x37, - 0x33,0x76,0x32,0x37,0x2e,0x35,0x35,0x35,0x68,0x32, - 0x36,0x2e,0x39,0x33,0x32,0x76,0x31,0x32,0x2e,0x31, - 0x31,0x37,0x68,0x2d,0x32,0x36,0x2e,0x39,0x33,0x32, - 0x76,0x36,0x36,0x2e,0x36,0x31,0x34,0x63,0x30,0x2c, - 0x32,0x2e,0x31,0x34,0x34,0x2c,0x30,0x2e,0x33,0x39, - 0x35,0x2c,0x34,0x2e,0x31,0x32,0x36,0x2c,0x31,0x2e, - 0x31,0x38,0x39,0x2c,0x35,0x2e,0x39,0x35,0x35,0x63, - 0x30,0x2e,0x37,0x39,0x36,0x2c,0x31,0x2e,0x38,0x32, - 0x39,0x2c,0x31,0x2e,0x38,0x38,0x33,0x2c,0x33,0x2e, - 0x34,0x33,0x37,0x2c,0x33,0x2e,0x32,0x36,0x35,0x2c, - 0x34,0x2e,0x38,0x31,0x33,0x0d,0x0a,0x09,0x09,0x63, - 0x31,0x2e,0x33,0x38,0x32,0x2c,0x31,0x2e,0x33,0x38, - 0x36,0x2c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x32,0x2e, - 0x34,0x37,0x33,0x2c,0x34,0x2e,0x38,0x36,0x38,0x2c, - 0x33,0x2e,0x32,0x37,0x63,0x31,0x2e,0x38,0x36,0x34, - 0x2c,0x30,0x2e,0x37,0x38,0x38,0x2c,0x33,0x2e,0x38, - 0x36,0x39,0x2c,0x31,0x2e,0x31,0x38,0x38,0x2c,0x36, - 0x2e,0x30,0x30,0x39,0x2c,0x31,0x2e,0x31,0x38,0x38, - 0x68,0x31,0x31,0x2e,0x36,0x76,0x31,0x32,0x2e,0x31, - 0x32,0x33,0x48,0x37,0x39,0x36,0x2e,0x31,0x39,0x33, - 0x4c,0x37,0x39,0x36,0x2e,0x31,0x39,0x33,0x2c,0x35, - 0x32,0x33,0x2e,0x31,0x39,0x34,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x31,0x2e,0x38,0x31,0x4c,0x37,0x31,0x39,0x2e,0x33, + 0x32,0x38,0x2c,0x34,0x37,0x31,0x2e,0x38,0x31,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x64,0x3d,0x22,0x4d,0x37,0x39,0x36,0x2e,0x31, + 0x39,0x33,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34, + 0x63,0x2d,0x33,0x2e,0x38,0x36,0x39,0x2c,0x30,0x2d, + 0x37,0x2e,0x35,0x31,0x33,0x2d,0x30,0x2e,0x37,0x32, + 0x39,0x2d,0x31,0x30,0x2e,0x39,0x32,0x37,0x2d,0x32, + 0x2e,0x31,0x37,0x34,0x63,0x2d,0x33,0x2e,0x34,0x32, + 0x31,0x2d,0x31,0x2e,0x34,0x35,0x35,0x2d,0x36,0x2e, + 0x33,0x39,0x32,0x2d,0x33,0x2e,0x34,0x36,0x31,0x2d, + 0x38,0x2e,0x39,0x30,0x39,0x2d,0x36,0x2e,0x30,0x31, + 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x32,0x36, + 0x2d,0x32,0x2e,0x35,0x35,0x37,0x2d,0x34,0x2e,0x35, + 0x32,0x33,0x2d,0x35,0x2e,0x35,0x32,0x35,0x2d,0x36, + 0x2e,0x30,0x30,0x39,0x2d,0x38,0x2e,0x39,0x30,0x38, + 0x63,0x2d,0x31,0x2e,0x34,0x38,0x35,0x2d,0x33,0x2e, + 0x33,0x38,0x35,0x2d,0x32,0x2e,0x32,0x32,0x39,0x2d, + 0x37,0x2e,0x30,0x31,0x33,0x2d,0x32,0x2e,0x32,0x32, + 0x39,0x2d,0x31,0x30,0x2e,0x38,0x37,0x37,0x76,0x2d, + 0x36,0x35,0x2e,0x39,0x39,0x36,0x68,0x2d,0x31,0x39, + 0x2e,0x30,0x35,0x39,0x76,0x2d,0x31,0x32,0x2e,0x31, + 0x31,0x37,0x68,0x31,0x39,0x2e,0x30,0x35,0x39,0x76, + 0x2d,0x32,0x35,0x2e,0x34,0x37,0x39,0x0a,0x09,0x09, + 0x6c,0x31,0x32,0x2e,0x37,0x34,0x31,0x2d,0x32,0x2e, + 0x30,0x37,0x33,0x76,0x32,0x37,0x2e,0x35,0x35,0x35, + 0x68,0x32,0x36,0x2e,0x39,0x33,0x32,0x76,0x31,0x32, + 0x2e,0x31,0x31,0x37,0x68,0x2d,0x32,0x36,0x2e,0x39, + 0x33,0x32,0x76,0x36,0x36,0x2e,0x36,0x31,0x34,0x63, + 0x30,0x2c,0x32,0x2e,0x31,0x34,0x34,0x2c,0x30,0x2e, + 0x33,0x39,0x35,0x2c,0x34,0x2e,0x31,0x32,0x36,0x2c, + 0x31,0x2e,0x31,0x38,0x39,0x2c,0x35,0x2e,0x39,0x35, + 0x35,0x63,0x30,0x2e,0x37,0x39,0x36,0x2c,0x31,0x2e, + 0x38,0x32,0x39,0x2c,0x31,0x2e,0x38,0x38,0x33,0x2c, + 0x33,0x2e,0x34,0x33,0x37,0x2c,0x33,0x2e,0x32,0x36, + 0x35,0x2c,0x34,0x2e,0x38,0x31,0x33,0x0a,0x09,0x09, + 0x63,0x31,0x2e,0x33,0x38,0x32,0x2c,0x31,0x2e,0x33, + 0x38,0x36,0x2c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x32, + 0x2e,0x34,0x37,0x33,0x2c,0x34,0x2e,0x38,0x36,0x38, + 0x2c,0x33,0x2e,0x32,0x37,0x63,0x31,0x2e,0x38,0x36, + 0x34,0x2c,0x30,0x2e,0x37,0x38,0x38,0x2c,0x33,0x2e, + 0x38,0x36,0x39,0x2c,0x31,0x2e,0x31,0x38,0x38,0x2c, + 0x36,0x2e,0x30,0x30,0x39,0x2c,0x31,0x2e,0x31,0x38, + 0x38,0x68,0x31,0x31,0x2e,0x36,0x76,0x31,0x32,0x2e, + 0x31,0x32,0x33,0x48,0x37,0x39,0x36,0x2e,0x31,0x39, + 0x33,0x4c,0x37,0x39,0x36,0x2e,0x31,0x39,0x33,0x2c, + 0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x7a,0x22,0x2f, + 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, 0x3d,0x22,0x4d,0x38,0x33,0x34,0x2e,0x34,0x31,0x39, 0x2c,0x33,0x39,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d, 0x31,0x36,0x2e,0x39,0x38,0x38,0x68,0x31,0x34,0x2e, @@ -1603,108 +1588,107 @@ const unsigned char splash_svg_data[17935] = { 0x2e,0x31,0x31,0x33,0x68,0x31,0x32,0x2e,0x37,0x34, 0x76,0x31,0x30,0x36,0x2e,0x30,0x38,0x31,0x48,0x38, 0x33,0x35,0x2e,0x34,0x35,0x35,0x7a,0x22,0x2f,0x3e, - 0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x39,0x34,0x36,0x2e,0x33,0x35,0x31, - 0x2c,0x35,0x30,0x36,0x2e,0x32,0x30,0x31,0x63,0x2d, - 0x31,0x2e,0x36,0x32,0x33,0x2c,0x33,0x2e,0x38,0x30, - 0x35,0x2d,0x33,0x2e,0x38,0x35,0x2c,0x37,0x2e,0x31, - 0x31,0x38,0x2d,0x36,0x2e,0x36,0x38,0x32,0x2c,0x39, - 0x2e,0x39,0x34,0x32,0x63,0x2d,0x32,0x2e,0x38,0x33, - 0x32,0x2c,0x32,0x2e,0x38,0x34,0x2d,0x36,0x2e,0x31, - 0x34,0x36,0x2c,0x35,0x2e,0x30,0x36,0x31,0x2d,0x39, - 0x2e,0x39,0x34,0x33,0x2c,0x36,0x2e,0x36,0x38,0x34, - 0x0d,0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x38,0x30, - 0x31,0x2c,0x31,0x2e,0x36,0x32,0x32,0x2d,0x37,0x2e, - 0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2d, - 0x31,0x32,0x2e,0x31,0x32,0x2c,0x32,0x2e,0x34,0x33, - 0x34,0x68,0x2d,0x38,0x2e,0x34,0x39,0x33,0x63,0x2d, - 0x34,0x2e,0x32,0x38,0x36,0x2c,0x30,0x2d,0x38,0x2e, - 0x33,0x32,0x37,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d, - 0x31,0x32,0x2e,0x31,0x32,0x34,0x2d,0x32,0x2e,0x34, - 0x33,0x34,0x63,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d, - 0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x30, - 0x39,0x2d,0x33,0x2e,0x38,0x34,0x34,0x2d,0x39,0x2e, - 0x39,0x34,0x31,0x2d,0x36,0x2e,0x36,0x38,0x34,0x0d, - 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x38,0x33,0x32, - 0x2d,0x32,0x2e,0x38,0x32,0x34,0x2d,0x35,0x2e,0x30, - 0x36,0x31,0x2d,0x36,0x2e,0x31,0x33,0x39,0x2d,0x36, - 0x2e,0x36,0x38,0x34,0x2d,0x39,0x2e,0x39,0x34,0x32, - 0x63,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d,0x33,0x2e, - 0x37,0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d, - 0x37,0x2e,0x38,0x33,0x39,0x2d,0x32,0x2e,0x34,0x33, - 0x35,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x76,0x2d, - 0x34,0x37,0x2e,0x38,0x36,0x31,0x63,0x30,0x2d,0x34, - 0x2e,0x32,0x37,0x39,0x2c,0x30,0x2e,0x38,0x31,0x32, - 0x2d,0x38,0x2e,0x33,0x32,0x2c,0x32,0x2e,0x34,0x33, - 0x35,0x2d,0x31,0x32,0x2e,0x31,0x31,0x37,0x0d,0x0a, - 0x09,0x09,0x63,0x31,0x2e,0x36,0x32,0x33,0x2d,0x33, - 0x2e,0x38,0x30,0x35,0x2c,0x33,0x2e,0x38,0x35,0x32, - 0x2d,0x37,0x2e,0x31,0x31,0x37,0x2c,0x36,0x2e,0x36, - 0x38,0x34,0x2d,0x39,0x2e,0x39,0x35,0x63,0x32,0x2e, - 0x38,0x33,0x31,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c, - 0x36,0x2e,0x31,0x34,0x36,0x2d,0x35,0x2e,0x30,0x35, - 0x32,0x2c,0x39,0x2e,0x39,0x34,0x31,0x2d,0x36,0x2e, - 0x36,0x38,0x33,0x63,0x33,0x2e,0x37,0x39,0x37,0x2d, - 0x31,0x2e,0x36,0x31,0x35,0x2c,0x37,0x2e,0x38,0x33, - 0x38,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32, - 0x2e,0x31,0x32,0x34,0x2d,0x32,0x2e,0x34,0x33,0x35, - 0x68,0x38,0x2e,0x34,0x39,0x33,0x0d,0x0a,0x09,0x09, - 0x63,0x34,0x2e,0x32,0x38,0x32,0x2c,0x30,0x2c,0x38, - 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x38,0x31,0x39, - 0x2c,0x31,0x32,0x2e,0x31,0x32,0x2c,0x32,0x2e,0x34, - 0x33,0x35,0x63,0x33,0x2e,0x37,0x39,0x37,0x2c,0x31, - 0x2e,0x36,0x33,0x31,0x2c,0x37,0x2e,0x31,0x31,0x31, - 0x2c,0x33,0x2e,0x38,0x35,0x31,0x2c,0x39,0x2e,0x39, - 0x34,0x33,0x2c,0x36,0x2e,0x36,0x38,0x33,0x63,0x32, - 0x2e,0x38,0x33,0x31,0x2c,0x32,0x2e,0x38,0x33,0x33, - 0x2c,0x35,0x2e,0x30,0x35,0x39,0x2c,0x36,0x2e,0x31, - 0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x32,0x2c,0x39, - 0x2e,0x39,0x35,0x0d,0x0a,0x09,0x09,0x63,0x31,0x2e, - 0x36,0x32,0x33,0x2c,0x33,0x2e,0x37,0x39,0x37,0x2c, - 0x32,0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33, - 0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32, - 0x2e,0x31,0x31,0x37,0x76,0x34,0x37,0x2e,0x38,0x36, - 0x31,0x43,0x39,0x34,0x38,0x2e,0x37,0x38,0x33,0x2c, - 0x34,0x39,0x38,0x2e,0x33,0x36,0x33,0x2c,0x39,0x34, - 0x37,0x2e,0x39,0x37,0x34,0x2c,0x35,0x30,0x32,0x2e, - 0x34,0x30,0x35,0x2c,0x39,0x34,0x36,0x2e,0x33,0x35, - 0x31,0x2c,0x35,0x30,0x36,0x2e,0x32,0x30,0x31,0x7a, - 0x20,0x4d,0x39,0x33,0x36,0x2e,0x30,0x34,0x34,0x2c, - 0x34,0x34,0x35,0x2e,0x34,0x39,0x36,0x0d,0x0a,0x09, - 0x09,0x63,0x30,0x2d,0x32,0x2e,0x35,0x34,0x39,0x2d, - 0x30,0x2e,0x34,0x38,0x35,0x2d,0x34,0x2e,0x39,0x35, - 0x33,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31, - 0x39,0x35,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2d, - 0x32,0x2e,0x32,0x34,0x31,0x2d,0x32,0x2e,0x32,0x38, - 0x31,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e, - 0x39,0x33,0x36,0x2d,0x35,0x2e,0x38,0x35,0x34,0x63, - 0x2d,0x31,0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e,0x36, - 0x35,0x33,0x2d,0x33,0x2e,0x36,0x31,0x31,0x2d,0x32, - 0x2e,0x39,0x37,0x31,0x2d,0x35,0x2e,0x38,0x35,0x34, - 0x2d,0x33,0x2e,0x39,0x33,0x36,0x0d,0x0a,0x09,0x09, - 0x63,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d,0x30,0x2e, - 0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d, - 0x31,0x2e,0x34,0x35,0x33,0x2d,0x37,0x2e,0x31,0x39, - 0x38,0x2d,0x31,0x2e,0x34,0x35,0x33,0x68,0x2d,0x38, - 0x2e,0x34,0x39,0x33,0x63,0x2d,0x32,0x2e,0x35,0x35, - 0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x36,0x2c,0x30, - 0x2e,0x34,0x38,0x39,0x2d,0x37,0x2e,0x32,0x30,0x32, - 0x2c,0x31,0x2e,0x34,0x35,0x33,0x63,0x2d,0x32,0x2e, - 0x32,0x34,0x32,0x2c,0x30,0x2e,0x39,0x36,0x35,0x2d, - 0x34,0x2e,0x31,0x39,0x33,0x2c,0x32,0x2e,0x32,0x38, - 0x31,0x2d,0x35,0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e, - 0x39,0x33,0x36,0x0d,0x0a,0x09,0x09,0x63,0x2d,0x31, - 0x2e,0x36,0x35,0x33,0x2c,0x31,0x2e,0x36,0x36,0x2d, - 0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x31,0x33, - 0x2d,0x33,0x2e,0x39,0x33,0x36,0x2c,0x35,0x2e,0x38, - 0x35,0x34,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c, - 0x32,0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e,0x34,0x34, - 0x39,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, - 0x34,0x34,0x39,0x2c,0x37,0x2e,0x31,0x39,0x35,0x76, - 0x34,0x39,0x2e,0x33,0x31,0x63,0x30,0x2c,0x32,0x2e, - 0x35,0x35,0x37,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2c, - 0x34,0x2e,0x39,0x35,0x39,0x2c,0x31,0x2e,0x34,0x34, - 0x39,0x2c,0x37,0x2e,0x32,0x30,0x31,0x0d,0x0a,0x09, + 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d, + 0x22,0x4d,0x39,0x34,0x36,0x2e,0x33,0x35,0x31,0x2c, + 0x35,0x30,0x36,0x2e,0x32,0x30,0x31,0x63,0x2d,0x31, + 0x2e,0x36,0x32,0x33,0x2c,0x33,0x2e,0x38,0x30,0x35, + 0x2d,0x33,0x2e,0x38,0x35,0x2c,0x37,0x2e,0x31,0x31, + 0x38,0x2d,0x36,0x2e,0x36,0x38,0x32,0x2c,0x39,0x2e, + 0x39,0x34,0x32,0x63,0x2d,0x32,0x2e,0x38,0x33,0x32, + 0x2c,0x32,0x2e,0x38,0x34,0x2d,0x36,0x2e,0x31,0x34, + 0x36,0x2c,0x35,0x2e,0x30,0x36,0x31,0x2d,0x39,0x2e, + 0x39,0x34,0x33,0x2c,0x36,0x2e,0x36,0x38,0x34,0x0a, + 0x09,0x09,0x63,0x2d,0x33,0x2e,0x38,0x30,0x31,0x2c, + 0x31,0x2e,0x36,0x32,0x32,0x2d,0x37,0x2e,0x38,0x33, + 0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32, + 0x2e,0x31,0x32,0x2c,0x32,0x2e,0x34,0x33,0x34,0x68, + 0x2d,0x38,0x2e,0x34,0x39,0x33,0x63,0x2d,0x34,0x2e, + 0x32,0x38,0x36,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32, + 0x37,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32, + 0x2e,0x31,0x32,0x34,0x2d,0x32,0x2e,0x34,0x33,0x34, + 0x63,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e, + 0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x30,0x39,0x2d, + 0x33,0x2e,0x38,0x34,0x34,0x2d,0x39,0x2e,0x39,0x34, + 0x31,0x2d,0x36,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09, + 0x63,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2d,0x32,0x2e, + 0x38,0x32,0x34,0x2d,0x35,0x2e,0x30,0x36,0x31,0x2d, + 0x36,0x2e,0x31,0x33,0x39,0x2d,0x36,0x2e,0x36,0x38, + 0x34,0x2d,0x39,0x2e,0x39,0x34,0x32,0x63,0x2d,0x31, + 0x2e,0x36,0x32,0x33,0x2d,0x33,0x2e,0x37,0x39,0x36, + 0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d,0x37,0x2e,0x38, + 0x33,0x39,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31, + 0x32,0x2e,0x31,0x31,0x36,0x76,0x2d,0x34,0x37,0x2e, + 0x38,0x36,0x31,0x63,0x30,0x2d,0x34,0x2e,0x32,0x37, + 0x39,0x2c,0x30,0x2e,0x38,0x31,0x32,0x2d,0x38,0x2e, + 0x33,0x32,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31, + 0x32,0x2e,0x31,0x31,0x37,0x0a,0x09,0x09,0x63,0x31, + 0x2e,0x36,0x32,0x33,0x2d,0x33,0x2e,0x38,0x30,0x35, + 0x2c,0x33,0x2e,0x38,0x35,0x32,0x2d,0x37,0x2e,0x31, + 0x31,0x37,0x2c,0x36,0x2e,0x36,0x38,0x34,0x2d,0x39, + 0x2e,0x39,0x35,0x63,0x32,0x2e,0x38,0x33,0x31,0x2d, + 0x32,0x2e,0x38,0x33,0x32,0x2c,0x36,0x2e,0x31,0x34, + 0x36,0x2d,0x35,0x2e,0x30,0x35,0x32,0x2c,0x39,0x2e, + 0x39,0x34,0x31,0x2d,0x36,0x2e,0x36,0x38,0x33,0x63, + 0x33,0x2e,0x37,0x39,0x37,0x2d,0x31,0x2e,0x36,0x31, + 0x35,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e, + 0x34,0x33,0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x34, + 0x2d,0x32,0x2e,0x34,0x33,0x35,0x68,0x38,0x2e,0x34, + 0x39,0x33,0x0a,0x09,0x09,0x63,0x34,0x2e,0x32,0x38, + 0x32,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x31,0x39,0x2c, + 0x30,0x2e,0x38,0x31,0x39,0x2c,0x31,0x32,0x2e,0x31, + 0x32,0x2c,0x32,0x2e,0x34,0x33,0x35,0x63,0x33,0x2e, + 0x37,0x39,0x37,0x2c,0x31,0x2e,0x36,0x33,0x31,0x2c, + 0x37,0x2e,0x31,0x31,0x31,0x2c,0x33,0x2e,0x38,0x35, + 0x31,0x2c,0x39,0x2e,0x39,0x34,0x33,0x2c,0x36,0x2e, + 0x36,0x38,0x33,0x63,0x32,0x2e,0x38,0x33,0x31,0x2c, + 0x32,0x2e,0x38,0x33,0x33,0x2c,0x35,0x2e,0x30,0x35, + 0x39,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e, + 0x36,0x38,0x32,0x2c,0x39,0x2e,0x39,0x35,0x0a,0x09, + 0x09,0x63,0x31,0x2e,0x36,0x32,0x33,0x2c,0x33,0x2e, + 0x37,0x39,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c, + 0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33, + 0x34,0x2c,0x31,0x32,0x2e,0x31,0x31,0x37,0x76,0x34, + 0x37,0x2e,0x38,0x36,0x31,0x43,0x39,0x34,0x38,0x2e, + 0x37,0x38,0x33,0x2c,0x34,0x39,0x38,0x2e,0x33,0x36, + 0x33,0x2c,0x39,0x34,0x37,0x2e,0x39,0x37,0x34,0x2c, + 0x35,0x30,0x32,0x2e,0x34,0x30,0x35,0x2c,0x39,0x34, + 0x36,0x2e,0x33,0x35,0x31,0x2c,0x35,0x30,0x36,0x2e, + 0x32,0x30,0x31,0x7a,0x20,0x4d,0x39,0x33,0x36,0x2e, + 0x30,0x34,0x34,0x2c,0x34,0x34,0x35,0x2e,0x34,0x39, + 0x36,0x0a,0x09,0x09,0x63,0x30,0x2d,0x32,0x2e,0x35, + 0x34,0x39,0x2d,0x30,0x2e,0x34,0x38,0x35,0x2d,0x34, + 0x2e,0x39,0x35,0x33,0x2d,0x31,0x2e,0x34,0x35,0x2d, + 0x37,0x2e,0x31,0x39,0x35,0x63,0x2d,0x30,0x2e,0x39, + 0x36,0x38,0x2d,0x32,0x2e,0x32,0x34,0x31,0x2d,0x32, + 0x2e,0x32,0x38,0x31,0x2d,0x34,0x2e,0x31,0x39,0x34, + 0x2d,0x33,0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e,0x38, + 0x35,0x34,0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2d, + 0x31,0x2e,0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x31, + 0x31,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2d,0x35,0x2e, + 0x38,0x35,0x34,0x2d,0x33,0x2e,0x39,0x33,0x36,0x0a, + 0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d, + 0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34, + 0x36,0x2d,0x31,0x2e,0x34,0x35,0x33,0x2d,0x37,0x2e, + 0x31,0x39,0x38,0x2d,0x31,0x2e,0x34,0x35,0x33,0x68, + 0x2d,0x38,0x2e,0x34,0x39,0x33,0x63,0x2d,0x32,0x2e, + 0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x36, + 0x2c,0x30,0x2e,0x34,0x38,0x39,0x2d,0x37,0x2e,0x32, + 0x30,0x32,0x2c,0x31,0x2e,0x34,0x35,0x33,0x63,0x2d, + 0x32,0x2e,0x32,0x34,0x32,0x2c,0x30,0x2e,0x39,0x36, + 0x35,0x2d,0x34,0x2e,0x31,0x39,0x33,0x2c,0x32,0x2e, + 0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x34,0x2c, + 0x33,0x2e,0x39,0x33,0x36,0x0a,0x09,0x09,0x63,0x2d, + 0x31,0x2e,0x36,0x35,0x33,0x2c,0x31,0x2e,0x36,0x36, + 0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x31, + 0x33,0x2d,0x33,0x2e,0x39,0x33,0x36,0x2c,0x35,0x2e, + 0x38,0x35,0x34,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38, + 0x2c,0x32,0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e,0x34, + 0x34,0x39,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x34,0x39,0x2c,0x37,0x2e,0x31,0x39,0x35, + 0x76,0x34,0x39,0x2e,0x33,0x31,0x63,0x30,0x2c,0x32, + 0x2e,0x35,0x35,0x37,0x2c,0x30,0x2e,0x34,0x38,0x31, + 0x2c,0x34,0x2e,0x39,0x35,0x39,0x2c,0x31,0x2e,0x34, + 0x34,0x39,0x2c,0x37,0x2e,0x32,0x30,0x31,0x0a,0x09, 0x09,0x63,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32,0x2e, 0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2c, 0x34,0x2e,0x31,0x39,0x34,0x2c,0x33,0x2e,0x39,0x33, @@ -1716,86 +1700,86 @@ const unsigned char splash_svg_data[17935] = { 0x2e,0x39,0x36,0x36,0x2c,0x34,0x2e,0x36,0x34,0x36, 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x32, 0x30,0x32,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38, - 0x2e,0x34,0x39,0x33,0x0d,0x0a,0x09,0x09,0x63,0x32, - 0x2e,0x35,0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39, - 0x35,0x36,0x2d,0x30,0x2e,0x34,0x38,0x31,0x2c,0x37, - 0x2e,0x31,0x39,0x38,0x2d,0x31,0x2e,0x34,0x34,0x37, - 0x63,0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e,0x39, - 0x36,0x35,0x2c,0x34,0x2e,0x31,0x39,0x33,0x2d,0x32, - 0x2e,0x32,0x38,0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d, - 0x33,0x2e,0x39,0x33,0x35,0x63,0x31,0x2e,0x36,0x35, - 0x33,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x32,0x2e, - 0x39,0x36,0x38,0x2d,0x33,0x2e,0x36,0x31,0x32,0x2c, - 0x33,0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e,0x38,0x35, - 0x35,0x0d,0x0a,0x09,0x09,0x63,0x30,0x2e,0x39,0x36, - 0x35,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2c,0x31,0x2e, - 0x34,0x35,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31, - 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x32,0x30,0x31,0x56, - 0x34,0x34,0x35,0x2e,0x34,0x39,0x36,0x7a,0x22,0x2f, - 0x3e,0x0d,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x64,0x3d,0x22,0x4d,0x31,0x30,0x33,0x32,0x2e,0x33, - 0x38,0x35,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34, - 0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x38,0x63,0x30, - 0x2d,0x32,0x2e,0x35,0x34,0x39,0x2d,0x30,0x2e,0x34, - 0x38,0x32,0x2d,0x34,0x2e,0x39,0x35,0x33,0x2d,0x31, - 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x35,0x63, - 0x2d,0x30,0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e,0x32, - 0x34,0x31,0x2d,0x32,0x2e,0x32,0x37,0x37,0x2d,0x34, - 0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38, - 0x2d,0x35,0x2e,0x38,0x35,0x34,0x0d,0x0a,0x09,0x09, - 0x63,0x2d,0x31,0x2e,0x36,0x35,0x32,0x2d,0x31,0x2e, - 0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x30,0x38,0x2d, - 0x32,0x2e,0x39,0x37,0x31,0x2d,0x35,0x2e,0x38,0x35, - 0x32,0x2d,0x33,0x2e,0x39,0x33,0x36,0x63,0x2d,0x32, - 0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x39,0x36,0x34, - 0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34, - 0x35,0x33,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31, - 0x2e,0x34,0x35,0x33,0x68,0x2d,0x38,0x2e,0x34,0x39, - 0x36,0x63,0x2d,0x32,0x2e,0x35,0x35,0x37,0x2c,0x30, - 0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c,0x30,0x2e,0x34, - 0x38,0x39,0x2d,0x37,0x2e,0x31,0x39,0x38,0x2c,0x31, - 0x2e,0x34,0x35,0x33,0x0d,0x0a,0x09,0x09,0x63,0x2d, - 0x32,0x2e,0x32,0x34,0x36,0x2c,0x30,0x2e,0x39,0x36, - 0x35,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c,0x32,0x2e, - 0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x33,0x2c, - 0x33,0x2e,0x39,0x33,0x36,0x63,0x2d,0x31,0x2e,0x36, - 0x36,0x31,0x2c,0x31,0x2e,0x36,0x36,0x2d,0x32,0x2e, - 0x39,0x37,0x2c,0x33,0x2e,0x36,0x31,0x33,0x2d,0x33, - 0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x38,0x35,0x34, - 0x63,0x2d,0x30,0x2e,0x39,0x37,0x2c,0x32,0x2e,0x32, - 0x34,0x32,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x34, - 0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x31, - 0x2c,0x37,0x2e,0x31,0x39,0x35,0x76,0x37,0x37,0x2e, - 0x36,0x39,0x38,0x68,0x2d,0x31,0x32,0x2e,0x37,0x34, - 0x0d,0x0a,0x09,0x09,0x56,0x34,0x31,0x37,0x2e,0x31, - 0x31,0x33,0x68,0x34,0x2e,0x32,0x34,0x34,0x6c,0x36, - 0x2e,0x39,0x34,0x32,0x2c,0x31,0x30,0x2e,0x37,0x37, - 0x36,0x63,0x32,0x2e,0x39,0x2d,0x33,0x2e,0x39,0x34, - 0x2c,0x36,0x2e,0x35,0x34,0x35,0x2d,0x37,0x2e,0x30, - 0x36,0x33,0x2c,0x31,0x30,0x2e,0x39,0x33,0x31,0x2d, - 0x39,0x2e,0x33,0x37,0x35,0x63,0x34,0x2e,0x33,0x38, - 0x36,0x2d,0x32,0x2e,0x33,0x31,0x32,0x2c,0x39,0x2e, - 0x31,0x37,0x2d,0x33,0x2e,0x34,0x37,0x37,0x2c,0x31, - 0x34,0x2e,0x33,0x34,0x34,0x2d,0x33,0x2e,0x34,0x37, - 0x37,0x68,0x33,0x2e,0x32,0x31,0x35,0x0d,0x0a,0x09, - 0x09,0x63,0x34,0x2e,0x32,0x37,0x38,0x2c,0x30,0x2c, - 0x38,0x2e,0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x38, - 0x2c,0x31,0x32,0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e, - 0x34,0x33,0x36,0x63,0x33,0x2e,0x38,0x2c,0x31,0x2e, - 0x36,0x32,0x39,0x2c,0x37,0x2e,0x31,0x31,0x34,0x2c, - 0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39,0x35,0x2c, - 0x36,0x2e,0x36,0x38,0x32,0x63,0x32,0x2e,0x38,0x32, - 0x38,0x2c,0x32,0x2e,0x38,0x33,0x33,0x2c,0x35,0x2e, - 0x30,0x35,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c, - 0x36,0x2e,0x36,0x37,0x39,0x2c,0x39,0x2e,0x39,0x35, - 0x31,0x0d,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x32, - 0x32,0x2c,0x33,0x2e,0x37,0x39,0x35,0x2c,0x32,0x2e, - 0x34,0x33,0x35,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c, - 0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32,0x2e,0x31, - 0x31,0x35,0x76,0x37,0x36,0x2e,0x39,0x37,0x33,0x48, - 0x31,0x30,0x33,0x32,0x2e,0x33,0x38,0x35,0x4c,0x31, - 0x30,0x33,0x32,0x2e,0x33,0x38,0x35,0x2c,0x35,0x32, - 0x33,0x2e,0x31,0x39,0x34,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73, - 0x76,0x67,0x3e,0x0d,0x0a + 0x2e,0x34,0x39,0x33,0x0a,0x09,0x09,0x63,0x32,0x2e, + 0x35,0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35, + 0x36,0x2d,0x30,0x2e,0x34,0x38,0x31,0x2c,0x37,0x2e, + 0x31,0x39,0x38,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63, + 0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36, + 0x35,0x2c,0x34,0x2e,0x31,0x39,0x33,0x2d,0x32,0x2e, + 0x32,0x38,0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33, + 0x2e,0x39,0x33,0x35,0x63,0x31,0x2e,0x36,0x35,0x33, + 0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x32,0x2e,0x39, + 0x36,0x38,0x2d,0x33,0x2e,0x36,0x31,0x32,0x2c,0x33, + 0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e,0x38,0x35,0x35, + 0x0a,0x09,0x09,0x63,0x30,0x2e,0x39,0x36,0x35,0x2d, + 0x32,0x2e,0x32,0x34,0x32,0x2c,0x31,0x2e,0x34,0x35, + 0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34, + 0x35,0x2d,0x37,0x2e,0x32,0x30,0x31,0x56,0x34,0x34, + 0x35,0x2e,0x34,0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, + 0x4d,0x31,0x30,0x33,0x32,0x2e,0x33,0x38,0x35,0x2c, + 0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x76,0x2d,0x37, + 0x37,0x2e,0x36,0x39,0x38,0x63,0x30,0x2d,0x32,0x2e, + 0x35,0x34,0x39,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2d, + 0x34,0x2e,0x39,0x35,0x33,0x2d,0x31,0x2e,0x34,0x35, + 0x2d,0x37,0x2e,0x31,0x39,0x35,0x63,0x2d,0x30,0x2e, + 0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34,0x31,0x2d, + 0x32,0x2e,0x32,0x37,0x37,0x2d,0x34,0x2e,0x31,0x39, + 0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, + 0x38,0x35,0x34,0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e, + 0x36,0x35,0x32,0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d, + 0x33,0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37, + 0x31,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e, + 0x39,0x33,0x36,0x63,0x2d,0x32,0x2e,0x32,0x34,0x37, + 0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36, + 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x33,0x2d,0x37, + 0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x33, + 0x68,0x2d,0x38,0x2e,0x34,0x39,0x36,0x63,0x2d,0x32, + 0x2e,0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39, + 0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x39,0x2d,0x37, + 0x2e,0x31,0x39,0x38,0x2c,0x31,0x2e,0x34,0x35,0x33, + 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34,0x36, + 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2d,0x34,0x2e,0x31, + 0x39,0x34,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35, + 0x2e,0x38,0x35,0x33,0x2c,0x33,0x2e,0x39,0x33,0x36, + 0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x31,0x2e, + 0x36,0x36,0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e, + 0x36,0x31,0x33,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c, + 0x35,0x2e,0x38,0x35,0x34,0x63,0x2d,0x30,0x2e,0x39, + 0x37,0x2c,0x32,0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e, + 0x34,0x35,0x31,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d, + 0x31,0x2e,0x34,0x35,0x31,0x2c,0x37,0x2e,0x31,0x39, + 0x35,0x76,0x37,0x37,0x2e,0x36,0x39,0x38,0x68,0x2d, + 0x31,0x32,0x2e,0x37,0x34,0x0a,0x09,0x09,0x56,0x34, + 0x31,0x37,0x2e,0x31,0x31,0x33,0x68,0x34,0x2e,0x32, + 0x34,0x34,0x6c,0x36,0x2e,0x39,0x34,0x32,0x2c,0x31, + 0x30,0x2e,0x37,0x37,0x36,0x63,0x32,0x2e,0x39,0x2d, + 0x33,0x2e,0x39,0x34,0x2c,0x36,0x2e,0x35,0x34,0x35, + 0x2d,0x37,0x2e,0x30,0x36,0x33,0x2c,0x31,0x30,0x2e, + 0x39,0x33,0x31,0x2d,0x39,0x2e,0x33,0x37,0x35,0x63, + 0x34,0x2e,0x33,0x38,0x36,0x2d,0x32,0x2e,0x33,0x31, + 0x32,0x2c,0x39,0x2e,0x31,0x37,0x2d,0x33,0x2e,0x34, + 0x37,0x37,0x2c,0x31,0x34,0x2e,0x33,0x34,0x34,0x2d, + 0x33,0x2e,0x34,0x37,0x37,0x68,0x33,0x2e,0x32,0x31, + 0x35,0x0a,0x09,0x09,0x63,0x34,0x2e,0x32,0x37,0x38, + 0x2c,0x30,0x2c,0x38,0x2e,0x33,0x32,0x2c,0x30,0x2e, + 0x38,0x31,0x38,0x2c,0x31,0x32,0x2e,0x31,0x31,0x37, + 0x2c,0x32,0x2e,0x34,0x33,0x36,0x63,0x33,0x2e,0x38, + 0x2c,0x31,0x2e,0x36,0x32,0x39,0x2c,0x37,0x2e,0x31, + 0x31,0x34,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e, + 0x39,0x35,0x2c,0x36,0x2e,0x36,0x38,0x32,0x63,0x32, + 0x2e,0x38,0x32,0x38,0x2c,0x32,0x2e,0x38,0x33,0x33, + 0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c,0x36,0x2e,0x31, + 0x34,0x36,0x2c,0x36,0x2e,0x36,0x37,0x39,0x2c,0x39, + 0x2e,0x39,0x35,0x31,0x0a,0x09,0x09,0x63,0x31,0x2e, + 0x36,0x32,0x32,0x2c,0x33,0x2e,0x37,0x39,0x35,0x2c, + 0x32,0x2e,0x34,0x33,0x35,0x2c,0x37,0x2e,0x38,0x33, + 0x38,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32, + 0x2e,0x31,0x31,0x35,0x76,0x37,0x36,0x2e,0x39,0x37, + 0x33,0x48,0x31,0x30,0x33,0x32,0x2e,0x33,0x38,0x35, + 0x4c,0x31,0x30,0x33,0x32,0x2e,0x33,0x38,0x35,0x2c, + 0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x7a,0x22,0x2f, + 0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73, + 0x76,0x67,0x3e,0x0a }; + diff --git a/data/converted/star_filled_svg.cpp b/data/converted/star_filled_svg.cpp index 3cec60910a..0778724565 100644 --- a/data/converted/star_filled_svg.cpp +++ b/data/converted/star_filled_svg.cpp @@ -2,114 +2,113 @@ #include "../Resources.h" -const size_t star_filled_svg_size = 1164; -const unsigned char star_filled_svg_data[1164] = { +const size_t star_filled_svg_size = 1152; +const unsigned char star_filled_svg_data[1152] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x37,0x37,0x35,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x30,0x2e,0x37,0x36,0x32,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37,0x35,0x20, - 0x32,0x30,0x2e,0x37,0x36,0x32,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37, - 0x35,0x20,0x32,0x30,0x2e,0x37,0x36,0x32,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x38,0x2e, - 0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36,0x63,0x2d, - 0x30,0x2e,0x31,0x38,0x32,0x2c,0x30,0x2d,0x30,0x2e, - 0x33,0x36,0x34,0x2c,0x30,0x2e,0x31,0x34,0x2d,0x30, - 0x2e,0x35,0x30,0x31,0x2c,0x30,0x2e,0x34,0x31,0x39, - 0x4c,0x36,0x2e,0x33,0x35,0x2c,0x36,0x2e,0x32,0x36, - 0x31,0x63,0x2d,0x30,0x2e,0x32,0x37,0x36,0x2c,0x30, - 0x2e,0x35,0x36,0x2d,0x31,0x2e,0x30,0x30,0x37,0x2c, - 0x31,0x2e,0x30,0x39,0x31,0x2d,0x31,0x2e,0x36,0x32, - 0x34,0x2c,0x31,0x2e,0x31,0x38,0x4c,0x30,0x2e,0x35, - 0x37,0x32,0x2c,0x38,0x2e,0x30,0x34,0x35,0x0d,0x0a, - 0x09,0x43,0x2d,0x30,0x2e,0x30,0x34,0x36,0x2c,0x38, - 0x2e,0x31,0x33,0x35,0x2d,0x30,0x2e,0x31,0x38,0x35, - 0x2c,0x38,0x2e,0x35,0x36,0x34,0x2c,0x30,0x2e,0x32, - 0x36,0x32,0x2c,0x39,0x6c,0x33,0x2e,0x30,0x30,0x37, - 0x2c,0x32,0x2e,0x39,0x33,0x31,0x63,0x30,0x2e,0x34, - 0x34,0x37,0x2c,0x30,0x2e,0x34,0x33,0x36,0x2c,0x30, - 0x2e,0x37,0x32,0x36,0x2c,0x31,0x2e,0x32,0x39,0x35, - 0x2c,0x30,0x2e,0x36,0x32,0x2c,0x31,0x2e,0x39,0x30, - 0x39,0x6c,0x2d,0x30,0x2e,0x37,0x31,0x2c,0x34,0x2e, - 0x31,0x34,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30, - 0x37,0x37,0x2c,0x30,0x2e,0x34,0x34,0x36,0x2c,0x30, - 0x2e,0x30,0x39,0x34,0x2c,0x30,0x2e,0x37,0x30,0x38, - 0x2c,0x30,0x2e,0x34,0x30,0x35,0x2c,0x30,0x2e,0x37, - 0x30,0x38,0x63,0x30,0x2e,0x31,0x31,0x38,0x2c,0x30, - 0x2c,0x30,0x2e,0x32,0x35,0x35,0x2d,0x30,0x2e,0x30, - 0x33,0x38,0x2c,0x30,0x2e,0x34,0x30,0x37,0x2d,0x30, - 0x2e,0x31,0x31,0x37,0x6c,0x33,0x2e,0x37,0x31,0x37, - 0x2d,0x31,0x2e,0x39,0x35,0x36,0x63,0x30,0x2e,0x32, - 0x37,0x36,0x2d,0x30,0x2e,0x31,0x34,0x35,0x2c,0x30, - 0x2e,0x36,0x34,0x2d,0x30,0x2e,0x32,0x31,0x36,0x2c, - 0x31,0x2e,0x30,0x30,0x33,0x2d,0x30,0x2e,0x32,0x31, - 0x36,0x0d,0x0a,0x09,0x63,0x30,0x2e,0x33,0x36,0x34, - 0x2c,0x30,0x2c,0x30,0x2e,0x37,0x32,0x39,0x2c,0x30, - 0x2e,0x30,0x37,0x32,0x2c,0x31,0x2e,0x30,0x30,0x34, - 0x2c,0x30,0x2e,0x32,0x31,0x36,0x6c,0x33,0x2e,0x37, - 0x31,0x37,0x2c,0x31,0x2e,0x39,0x35,0x36,0x63,0x30, - 0x2e,0x31,0x35,0x2c,0x30,0x2e,0x30,0x37,0x39,0x2c, - 0x30,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2e,0x31,0x31, - 0x37,0x2c,0x30,0x2e,0x34,0x30,0x37,0x2c,0x30,0x2e, - 0x31,0x31,0x37,0x63,0x30,0x2e,0x33,0x31,0x31,0x2c, - 0x30,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2d,0x30,0x2e, - 0x32,0x36,0x32,0x2c,0x30,0x2e,0x34,0x30,0x35,0x2d, - 0x30,0x2e,0x37,0x30,0x38,0x6c,0x2d,0x30,0x2e,0x37, - 0x31,0x31,0x2d,0x34,0x2e,0x31,0x34,0x0d,0x0a,0x09, - 0x63,0x2d,0x30,0x2e,0x31,0x30,0x35,0x2d,0x30,0x2e, - 0x36,0x31,0x34,0x2c,0x30,0x2e,0x31,0x37,0x34,0x2d, - 0x31,0x2e,0x34,0x37,0x34,0x2c,0x30,0x2e,0x36,0x31, - 0x39,0x2d,0x31,0x2e,0x39,0x30,0x39,0x4c,0x31,0x37, - 0x2e,0x31,0x36,0x2c,0x39,0x63,0x30,0x2e,0x34,0x34, - 0x36,0x2d,0x30,0x2e,0x34,0x33,0x36,0x2c,0x30,0x2e, - 0x33,0x30,0x37,0x2d,0x30,0x2e,0x38,0x36,0x35,0x2d, - 0x30,0x2e,0x33,0x31,0x31,0x2d,0x30,0x2e,0x39,0x35, - 0x35,0x6c,0x2d,0x34,0x2e,0x31,0x35,0x34,0x2d,0x30, - 0x2e,0x36,0x30,0x33,0x0d,0x0a,0x09,0x63,0x2d,0x30, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, + 0x2e,0x37,0x37,0x35,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x30,0x2e,0x37, + 0x36,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, + 0x31,0x2e,0x37,0x37,0x35,0x20,0x32,0x30,0x2e,0x37, + 0x36,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x32,0x31,0x2e,0x37,0x37,0x35,0x20,0x32,0x30, + 0x2e,0x37,0x36,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x38,0x2e,0x37,0x31,0x2c,0x32,0x2e, + 0x30,0x37,0x36,0x63,0x2d,0x30,0x2e,0x31,0x38,0x32, + 0x2c,0x30,0x2d,0x30,0x2e,0x33,0x36,0x34,0x2c,0x30, + 0x2e,0x31,0x34,0x2d,0x30,0x2e,0x35,0x30,0x31,0x2c, + 0x30,0x2e,0x34,0x31,0x39,0x4c,0x36,0x2e,0x33,0x35, + 0x2c,0x36,0x2e,0x32,0x36,0x31,0x63,0x2d,0x30,0x2e, + 0x32,0x37,0x36,0x2c,0x30,0x2e,0x35,0x36,0x2d,0x31, + 0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e,0x30,0x39,0x31, + 0x2d,0x31,0x2e,0x36,0x32,0x34,0x2c,0x31,0x2e,0x31, + 0x38,0x4c,0x30,0x2e,0x35,0x37,0x32,0x2c,0x38,0x2e, + 0x30,0x34,0x35,0x0a,0x09,0x43,0x2d,0x30,0x2e,0x30, + 0x34,0x36,0x2c,0x38,0x2e,0x31,0x33,0x35,0x2d,0x30, + 0x2e,0x31,0x38,0x35,0x2c,0x38,0x2e,0x35,0x36,0x34, + 0x2c,0x30,0x2e,0x32,0x36,0x32,0x2c,0x39,0x6c,0x33, + 0x2e,0x30,0x30,0x37,0x2c,0x32,0x2e,0x39,0x33,0x31, + 0x63,0x30,0x2e,0x34,0x34,0x37,0x2c,0x30,0x2e,0x34, + 0x33,0x36,0x2c,0x30,0x2e,0x37,0x32,0x36,0x2c,0x31, + 0x2e,0x32,0x39,0x35,0x2c,0x30,0x2e,0x36,0x32,0x2c, + 0x31,0x2e,0x39,0x30,0x39,0x6c,0x2d,0x30,0x2e,0x37, + 0x31,0x2c,0x34,0x2e,0x31,0x34,0x0a,0x09,0x63,0x2d, + 0x30,0x2e,0x30,0x37,0x37,0x2c,0x30,0x2e,0x34,0x34, + 0x36,0x2c,0x30,0x2e,0x30,0x39,0x34,0x2c,0x30,0x2e, + 0x37,0x30,0x38,0x2c,0x30,0x2e,0x34,0x30,0x35,0x2c, + 0x30,0x2e,0x37,0x30,0x38,0x63,0x30,0x2e,0x31,0x31, + 0x38,0x2c,0x30,0x2c,0x30,0x2e,0x32,0x35,0x35,0x2d, + 0x30,0x2e,0x30,0x33,0x38,0x2c,0x30,0x2e,0x34,0x30, + 0x37,0x2d,0x30,0x2e,0x31,0x31,0x37,0x6c,0x33,0x2e, + 0x37,0x31,0x37,0x2d,0x31,0x2e,0x39,0x35,0x36,0x63, + 0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, + 0x35,0x2c,0x30,0x2e,0x36,0x34,0x2d,0x30,0x2e,0x32, + 0x31,0x36,0x2c,0x31,0x2e,0x30,0x30,0x33,0x2d,0x30, + 0x2e,0x32,0x31,0x36,0x0a,0x09,0x63,0x30,0x2e,0x33, + 0x36,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x32,0x39, + 0x2c,0x30,0x2e,0x30,0x37,0x32,0x2c,0x31,0x2e,0x30, + 0x30,0x34,0x2c,0x30,0x2e,0x32,0x31,0x36,0x6c,0x33, + 0x2e,0x37,0x31,0x37,0x2c,0x31,0x2e,0x39,0x35,0x36, + 0x63,0x30,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x30,0x37, + 0x39,0x2c,0x30,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2e, + 0x31,0x31,0x37,0x2c,0x30,0x2e,0x34,0x30,0x37,0x2c, + 0x30,0x2e,0x31,0x31,0x37,0x63,0x30,0x2e,0x33,0x31, + 0x31,0x2c,0x30,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2d, + 0x30,0x2e,0x32,0x36,0x32,0x2c,0x30,0x2e,0x34,0x30, + 0x35,0x2d,0x30,0x2e,0x37,0x30,0x38,0x6c,0x2d,0x30, + 0x2e,0x37,0x31,0x31,0x2d,0x34,0x2e,0x31,0x34,0x0a, + 0x09,0x63,0x2d,0x30,0x2e,0x31,0x30,0x35,0x2d,0x30, + 0x2e,0x36,0x31,0x34,0x2c,0x30,0x2e,0x31,0x37,0x34, + 0x2d,0x31,0x2e,0x34,0x37,0x34,0x2c,0x30,0x2e,0x36, + 0x31,0x39,0x2d,0x31,0x2e,0x39,0x30,0x39,0x4c,0x31, + 0x37,0x2e,0x31,0x36,0x2c,0x39,0x63,0x30,0x2e,0x34, + 0x34,0x36,0x2d,0x30,0x2e,0x34,0x33,0x36,0x2c,0x30, + 0x2e,0x33,0x30,0x37,0x2d,0x30,0x2e,0x38,0x36,0x35, + 0x2d,0x30,0x2e,0x33,0x31,0x31,0x2d,0x30,0x2e,0x39, + 0x35,0x35,0x6c,0x2d,0x34,0x2e,0x31,0x35,0x34,0x2d, + 0x30,0x2e,0x36,0x30,0x33,0x0a,0x09,0x63,0x2d,0x30, 0x2e,0x36,0x31,0x37,0x2d,0x30,0x2e,0x30,0x38,0x39, 0x2d,0x31,0x2e,0x33,0x34,0x39,0x2d,0x30,0x2e,0x36, 0x32,0x2d,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, @@ -119,6 +118,7 @@ const unsigned char star_filled_svg_data[1164] = { 0x39,0x33,0x2c,0x32,0x2e,0x30,0x37,0x36,0x2c,0x38, 0x2e,0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36,0x4c, 0x38,0x2e,0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36, - 0x7a,0x22,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x73,0x76, - 0x67,0x3e,0x0d,0x0a + 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67, + 0x3e,0x0a }; + diff --git a/data/converted/star_unfilled_svg.cpp b/data/converted/star_unfilled_svg.cpp index 5d6b43bda3..aae8f75a1d 100644 --- a/data/converted/star_unfilled_svg.cpp +++ b/data/converted/star_unfilled_svg.cpp @@ -2,118 +2,117 @@ #include "../Resources.h" -const size_t star_unfilled_svg_size = 1889; -const unsigned char star_unfilled_svg_data[1889] = { +const size_t star_unfilled_svg_size = 1871; +const unsigned char star_unfilled_svg_data[1871] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20, - 0x20,0x2d,0x2d,0x3e,0x0d,0x0a,0x3c,0x21,0x44,0x4f, - 0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20, - 0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f, - 0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20, - 0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45, - 0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73, - 0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44, - 0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64, - 0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x73,0x76,0x67, - 0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22, - 0x31,0x2e,0x31,0x22,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76, - 0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78, - 0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78, - 0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x37,0x37,0x35,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x32,0x30,0x2e,0x37,0x36,0x32,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37,0x35,0x20, - 0x32,0x30,0x2e,0x37,0x36,0x32,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x32,0x31,0x2e,0x37,0x37, - 0x35,0x20,0x32,0x30,0x2e,0x37,0x36,0x32,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0d,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x38,0x2e, - 0x37,0x31,0x2c,0x32,0x2e,0x34,0x38,0x63,0x30,0x2e, - 0x30,0x32,0x36,0x2c,0x30,0x2e,0x30,0x31,0x38,0x2c, - 0x30,0x2e,0x30,0x38,0x33,0x2c,0x30,0x2e,0x30,0x37, - 0x2c,0x30,0x2e,0x31,0x34,0x33,0x2c,0x30,0x2e,0x31, - 0x39,0x33,0x6c,0x31,0x2e,0x38,0x35,0x39,0x2c,0x33, - 0x2e,0x37,0x36,0x36,0x63,0x30,0x2e,0x33,0x33,0x33, - 0x2c,0x30,0x2e,0x36,0x37,0x36,0x2c,0x31,0x2e,0x31, - 0x38,0x2c,0x31,0x2e,0x32,0x39,0x31,0x2c,0x31,0x2e, - 0x39,0x32,0x34,0x2c,0x31,0x2e,0x33,0x39,0x38,0x6c, - 0x34,0x2e,0x31,0x35,0x35,0x2c,0x30,0x2e,0x36,0x30, - 0x33,0x0d,0x0a,0x09,0x63,0x30,0x2e,0x31,0x35,0x2c, - 0x30,0x2e,0x30,0x32,0x32,0x2c,0x30,0x2e,0x32,0x31, - 0x38,0x2c,0x30,0x2e,0x30,0x36,0x36,0x2c,0x30,0x2e, - 0x32,0x32,0x37,0x2c,0x30,0x2e,0x30,0x36,0x36,0x63, - 0x30,0x2e,0x30,0x30,0x31,0x2c,0x30,0x2c,0x30,0x2e, - 0x30,0x30,0x31,0x2c,0x30,0x2c,0x30,0x2e,0x30,0x30, - 0x31,0x2c,0x30,0x63,0x30,0x2c,0x30,0x2e,0x30,0x31, - 0x39,0x2d,0x30,0x2e,0x30,0x32,0x35,0x2c,0x30,0x2e, - 0x30,0x39,0x36,0x2d,0x30,0x2e,0x31,0x34,0x2c,0x30, - 0x2e,0x32,0x30,0x37,0x6c,0x2d,0x33,0x2e,0x30,0x30, - 0x39,0x2c,0x32,0x2e,0x39,0x33,0x31,0x0d,0x0a,0x09, - 0x63,0x2d,0x30,0x2e,0x35,0x33,0x39,0x2c,0x30,0x2e, - 0x35,0x32,0x36,0x2d,0x30,0x2e,0x38,0x36,0x32,0x2c, - 0x31,0x2e,0x35,0x32,0x31,0x2d,0x30,0x2e,0x37,0x33, - 0x35,0x2c,0x32,0x2e,0x32,0x36,0x33,0x6c,0x30,0x2e, - 0x37,0x31,0x31,0x2c,0x34,0x2e,0x31,0x34,0x63,0x30, - 0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x31,0x35,0x36, - 0x2c,0x30,0x2e,0x30,0x30,0x33,0x2c,0x30,0x2e,0x32, - 0x33,0x34,0x2d,0x30,0x2e,0x30,0x31,0x31,0x2c,0x30, - 0x2e,0x32,0x33,0x39,0x63,0x2d,0x30,0x2e,0x30,0x32, - 0x35,0x2c,0x30,0x2d,0x30,0x2e,0x30,0x39,0x38,0x2d, - 0x30,0x2e,0x30,0x30,0x38,0x2d,0x30,0x2e,0x32,0x32, - 0x31,0x2d,0x30,0x2e,0x30,0x37,0x31,0x4c,0x39,0x2e, - 0x39,0x2c,0x31,0x36,0x2e,0x32,0x36,0x0d,0x0a,0x09, - 0x63,0x2d,0x30,0x2e,0x33,0x32,0x34,0x2d,0x30,0x2e, - 0x31,0x37,0x31,0x2d,0x30,0x2e,0x37,0x34,0x37,0x2d, - 0x30,0x2e,0x32,0x36,0x34,0x2d,0x31,0x2e,0x31,0x39, - 0x2d,0x30,0x2e,0x32,0x36,0x34,0x53,0x37,0x2e,0x38, - 0x34,0x33,0x2c,0x31,0x36,0x2e,0x30,0x39,0x2c,0x37, - 0x2e,0x35,0x32,0x2c,0x31,0x36,0x2e,0x32,0x36,0x6c, - 0x2d,0x33,0x2e,0x37,0x31,0x36,0x2c,0x31,0x2e,0x39, - 0x35,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c, - 0x30,0x2e,0x30,0x36,0x33,0x2d,0x30,0x2e,0x31,0x39, - 0x36,0x2c,0x30,0x2e,0x30,0x37,0x31,0x2d,0x30,0x2e, - 0x32,0x32,0x34,0x2c,0x30,0x2e,0x30,0x38,0x32,0x0d, - 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x31,0x2d,0x30, - 0x2e,0x30,0x31,0x36,0x2d,0x30,0x2e,0x30,0x33,0x34, - 0x2d,0x30,0x2e,0x30,0x39,0x34,0x2d,0x30,0x2e,0x30, - 0x30,0x38,0x2d,0x30,0x2e,0x32,0x35,0x6c,0x30,0x2e, - 0x37,0x31,0x2d,0x34,0x2e,0x31,0x34,0x63,0x30,0x2e, - 0x31,0x32,0x38,0x2d,0x30,0x2e,0x37,0x34,0x33,0x2d, - 0x30,0x2e,0x31,0x39,0x35,0x2d,0x31,0x2e,0x37,0x33, - 0x37,0x2d,0x30,0x2e,0x37,0x33,0x35,0x2d,0x32,0x2e, - 0x32,0x36,0x33,0x4c,0x30,0x2e,0x35,0x34,0x31,0x2c, - 0x38,0x2e,0x37,0x31,0x32,0x43,0x30,0x2e,0x34,0x32, - 0x37,0x2c,0x38,0x2e,0x36,0x30,0x32,0x2c,0x30,0x2e, - 0x34,0x2c,0x38,0x2e,0x35,0x32,0x35,0x2c,0x30,0x2e, - 0x33,0x39,0x35,0x2c,0x38,0x2e,0x35,0x32,0x35,0x0d, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, + 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, + 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, + 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, + 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, + 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, + 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, + 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, + 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, + 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, + 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, + 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, + 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, + 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, + 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, + 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, + 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, + 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, + 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, + 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, + 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, + 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, + 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, + 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, + 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, + 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, + 0x2e,0x37,0x37,0x35,0x70,0x78,0x22,0x20,0x68,0x65, + 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x30,0x2e,0x37, + 0x36,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, + 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, + 0x31,0x2e,0x37,0x37,0x35,0x20,0x32,0x30,0x2e,0x37, + 0x36,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, + 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, + 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, + 0x20,0x32,0x31,0x2e,0x37,0x37,0x35,0x20,0x32,0x30, + 0x2e,0x37,0x36,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, + 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, + 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x38,0x2e,0x37,0x31,0x2c,0x32,0x2e, + 0x34,0x38,0x63,0x30,0x2e,0x30,0x32,0x36,0x2c,0x30, + 0x2e,0x30,0x31,0x38,0x2c,0x30,0x2e,0x30,0x38,0x33, + 0x2c,0x30,0x2e,0x30,0x37,0x2c,0x30,0x2e,0x31,0x34, + 0x33,0x2c,0x30,0x2e,0x31,0x39,0x33,0x6c,0x31,0x2e, + 0x38,0x35,0x39,0x2c,0x33,0x2e,0x37,0x36,0x36,0x63, + 0x30,0x2e,0x33,0x33,0x33,0x2c,0x30,0x2e,0x36,0x37, + 0x36,0x2c,0x31,0x2e,0x31,0x38,0x2c,0x31,0x2e,0x32, + 0x39,0x31,0x2c,0x31,0x2e,0x39,0x32,0x34,0x2c,0x31, + 0x2e,0x33,0x39,0x38,0x6c,0x34,0x2e,0x31,0x35,0x35, + 0x2c,0x30,0x2e,0x36,0x30,0x33,0x0a,0x09,0x63,0x30, + 0x2e,0x31,0x35,0x2c,0x30,0x2e,0x30,0x32,0x32,0x2c, + 0x30,0x2e,0x32,0x31,0x38,0x2c,0x30,0x2e,0x30,0x36, + 0x36,0x2c,0x30,0x2e,0x32,0x32,0x37,0x2c,0x30,0x2e, + 0x30,0x36,0x36,0x63,0x30,0x2e,0x30,0x30,0x31,0x2c, + 0x30,0x2c,0x30,0x2e,0x30,0x30,0x31,0x2c,0x30,0x2c, + 0x30,0x2e,0x30,0x30,0x31,0x2c,0x30,0x63,0x30,0x2c, + 0x30,0x2e,0x30,0x31,0x39,0x2d,0x30,0x2e,0x30,0x32, + 0x35,0x2c,0x30,0x2e,0x30,0x39,0x36,0x2d,0x30,0x2e, + 0x31,0x34,0x2c,0x30,0x2e,0x32,0x30,0x37,0x6c,0x2d, + 0x33,0x2e,0x30,0x30,0x39,0x2c,0x32,0x2e,0x39,0x33, + 0x31,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x35,0x33,0x39, + 0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e,0x38, + 0x36,0x32,0x2c,0x31,0x2e,0x35,0x32,0x31,0x2d,0x30, + 0x2e,0x37,0x33,0x35,0x2c,0x32,0x2e,0x32,0x36,0x33, + 0x6c,0x30,0x2e,0x37,0x31,0x31,0x2c,0x34,0x2e,0x31, + 0x34,0x63,0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e, + 0x31,0x35,0x36,0x2c,0x30,0x2e,0x30,0x30,0x33,0x2c, + 0x30,0x2e,0x32,0x33,0x34,0x2d,0x30,0x2e,0x30,0x31, + 0x31,0x2c,0x30,0x2e,0x32,0x33,0x39,0x63,0x2d,0x30, + 0x2e,0x30,0x32,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x30, + 0x39,0x38,0x2d,0x30,0x2e,0x30,0x30,0x38,0x2d,0x30, + 0x2e,0x32,0x32,0x31,0x2d,0x30,0x2e,0x30,0x37,0x31, + 0x4c,0x39,0x2e,0x39,0x2c,0x31,0x36,0x2e,0x32,0x36, + 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x33,0x32,0x34,0x2d, + 0x30,0x2e,0x31,0x37,0x31,0x2d,0x30,0x2e,0x37,0x34, + 0x37,0x2d,0x30,0x2e,0x32,0x36,0x34,0x2d,0x31,0x2e, + 0x31,0x39,0x2d,0x30,0x2e,0x32,0x36,0x34,0x53,0x37, + 0x2e,0x38,0x34,0x33,0x2c,0x31,0x36,0x2e,0x30,0x39, + 0x2c,0x37,0x2e,0x35,0x32,0x2c,0x31,0x36,0x2e,0x32, + 0x36,0x6c,0x2d,0x33,0x2e,0x37,0x31,0x36,0x2c,0x31, + 0x2e,0x39,0x35,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32, + 0x33,0x2c,0x30,0x2e,0x30,0x36,0x33,0x2d,0x30,0x2e, + 0x31,0x39,0x36,0x2c,0x30,0x2e,0x30,0x37,0x31,0x2d, + 0x30,0x2e,0x32,0x32,0x34,0x2c,0x30,0x2e,0x30,0x38, + 0x32,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x31,0x2d, + 0x30,0x2e,0x30,0x31,0x36,0x2d,0x30,0x2e,0x30,0x33, + 0x34,0x2d,0x30,0x2e,0x30,0x39,0x34,0x2d,0x30,0x2e, + 0x30,0x30,0x38,0x2d,0x30,0x2e,0x32,0x35,0x6c,0x30, + 0x2e,0x37,0x31,0x2d,0x34,0x2e,0x31,0x34,0x63,0x30, + 0x2e,0x31,0x32,0x38,0x2d,0x30,0x2e,0x37,0x34,0x33, + 0x2d,0x30,0x2e,0x31,0x39,0x35,0x2d,0x31,0x2e,0x37, + 0x33,0x37,0x2d,0x30,0x2e,0x37,0x33,0x35,0x2d,0x32, + 0x2e,0x32,0x36,0x33,0x4c,0x30,0x2e,0x35,0x34,0x31, + 0x2c,0x38,0x2e,0x37,0x31,0x32,0x43,0x30,0x2e,0x34, + 0x32,0x37,0x2c,0x38,0x2e,0x36,0x30,0x32,0x2c,0x30, + 0x2e,0x34,0x2c,0x38,0x2e,0x35,0x32,0x35,0x2c,0x30, + 0x2e,0x33,0x39,0x35,0x2c,0x38,0x2e,0x35,0x32,0x35, 0x0a,0x09,0x6c,0x30,0x2c,0x30,0x43,0x30,0x2e,0x34, 0x30,0x35,0x2c,0x38,0x2e,0x35,0x31,0x2c,0x30,0x2e, 0x34,0x37,0x32,0x2c,0x38,0x2e,0x34,0x36,0x34,0x2c, @@ -123,74 +122,75 @@ const unsigned char star_unfilled_svg_data[1889] = { 0x37,0x33,0x2c,0x36,0x2e,0x33,0x37,0x35,0x2c,0x37, 0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e,0x37,0x30,0x39, 0x2c,0x36,0x2e,0x34,0x33,0x39,0x6c,0x31,0x2e,0x38, - 0x35,0x39,0x2d,0x33,0x2e,0x37,0x36,0x36,0x0d,0x0a, - 0x09,0x43,0x38,0x2e,0x36,0x32,0x38,0x2c,0x32,0x2e, - 0x35,0x35,0x2c,0x38,0x2e,0x36,0x38,0x35,0x2c,0x32, - 0x2e,0x34,0x39,0x36,0x2c,0x38,0x2e,0x37,0x31,0x2c, - 0x32,0x2e,0x34,0x38,0x20,0x4d,0x38,0x2e,0x37,0x31, - 0x2c,0x32,0x2e,0x30,0x37,0x36,0x63,0x2d,0x30,0x2e, - 0x31,0x38,0x32,0x2c,0x30,0x2d,0x30,0x2e,0x33,0x36, - 0x34,0x2c,0x30,0x2e,0x31,0x34,0x2d,0x30,0x2e,0x35, - 0x30,0x31,0x2c,0x30,0x2e,0x34,0x31,0x39,0x4c,0x36, - 0x2e,0x33,0x35,0x2c,0x36,0x2e,0x32,0x36,0x32,0x63, - 0x2d,0x30,0x2e,0x32,0x37,0x36,0x2c,0x30,0x2e,0x35, - 0x36,0x2d,0x31,0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e, - 0x30,0x39,0x31,0x2d,0x31,0x2e,0x36,0x32,0x34,0x2c, - 0x31,0x2e,0x31,0x38,0x0d,0x0a,0x09,0x4c,0x30,0x2e, - 0x35,0x37,0x32,0x2c,0x38,0x2e,0x30,0x34,0x35,0x63, - 0x2d,0x30,0x2e,0x36,0x31,0x38,0x2c,0x30,0x2e,0x30, - 0x39,0x2d,0x30,0x2e,0x37,0x35,0x37,0x2c,0x30,0x2e, - 0x35,0x32,0x2d,0x30,0x2e,0x33,0x31,0x2c,0x30,0x2e, - 0x39,0x35,0x35,0x6c,0x33,0x2e,0x30,0x30,0x37,0x2c, + 0x35,0x39,0x2d,0x33,0x2e,0x37,0x36,0x36,0x0a,0x09, + 0x43,0x38,0x2e,0x36,0x32,0x38,0x2c,0x32,0x2e,0x35, + 0x35,0x2c,0x38,0x2e,0x36,0x38,0x35,0x2c,0x32,0x2e, + 0x34,0x39,0x36,0x2c,0x38,0x2e,0x37,0x31,0x2c,0x32, + 0x2e,0x34,0x38,0x20,0x4d,0x38,0x2e,0x37,0x31,0x2c, + 0x32,0x2e,0x30,0x37,0x36,0x63,0x2d,0x30,0x2e,0x31, + 0x38,0x32,0x2c,0x30,0x2d,0x30,0x2e,0x33,0x36,0x34, + 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x30,0x2e,0x35,0x30, + 0x31,0x2c,0x30,0x2e,0x34,0x31,0x39,0x4c,0x36,0x2e, + 0x33,0x35,0x2c,0x36,0x2e,0x32,0x36,0x32,0x63,0x2d, + 0x30,0x2e,0x32,0x37,0x36,0x2c,0x30,0x2e,0x35,0x36, + 0x2d,0x31,0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e,0x30, + 0x39,0x31,0x2d,0x31,0x2e,0x36,0x32,0x34,0x2c,0x31, + 0x2e,0x31,0x38,0x0a,0x09,0x4c,0x30,0x2e,0x35,0x37, + 0x32,0x2c,0x38,0x2e,0x30,0x34,0x35,0x63,0x2d,0x30, + 0x2e,0x36,0x31,0x38,0x2c,0x30,0x2e,0x30,0x39,0x2d, + 0x30,0x2e,0x37,0x35,0x37,0x2c,0x30,0x2e,0x35,0x32, + 0x2d,0x30,0x2e,0x33,0x31,0x2c,0x30,0x2e,0x39,0x35, + 0x35,0x6c,0x33,0x2e,0x30,0x30,0x37,0x2c,0x32,0x2e, + 0x39,0x33,0x31,0x63,0x30,0x2e,0x34,0x34,0x37,0x2c, + 0x30,0x2e,0x34,0x33,0x36,0x2c,0x30,0x2e,0x37,0x32, + 0x36,0x2c,0x31,0x2e,0x32,0x39,0x35,0x2c,0x30,0x2e, + 0x36,0x32,0x2c,0x31,0x2e,0x39,0x30,0x39,0x6c,0x2d, + 0x30,0x2e,0x37,0x31,0x2c,0x34,0x2e,0x31,0x33,0x39, + 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x37,0x37,0x2c, + 0x30,0x2e,0x34,0x34,0x36,0x2c,0x30,0x2e,0x30,0x39, + 0x34,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e, + 0x34,0x30,0x35,0x2c,0x30,0x2e,0x37,0x30,0x38,0x63, + 0x30,0x2e,0x31,0x31,0x38,0x2c,0x30,0x2c,0x30,0x2e, + 0x32,0x35,0x35,0x2d,0x30,0x2e,0x30,0x33,0x38,0x2c, + 0x30,0x2e,0x34,0x30,0x37,0x2d,0x30,0x2e,0x31,0x31, + 0x37,0x6c,0x33,0x2e,0x37,0x31,0x37,0x2d,0x31,0x2e, + 0x39,0x35,0x35,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d, + 0x30,0x2e,0x31,0x34,0x35,0x2c,0x30,0x2e,0x36,0x34, + 0x2d,0x30,0x2e,0x32,0x31,0x36,0x2c,0x31,0x2e,0x30, + 0x30,0x33,0x2d,0x30,0x2e,0x32,0x31,0x36,0x0a,0x09, + 0x63,0x30,0x2e,0x33,0x36,0x34,0x2c,0x30,0x2c,0x30, + 0x2e,0x37,0x32,0x39,0x2c,0x30,0x2e,0x30,0x37,0x32, + 0x2c,0x31,0x2e,0x30,0x30,0x34,0x2c,0x30,0x2e,0x32, + 0x31,0x36,0x6c,0x33,0x2e,0x37,0x31,0x37,0x2c,0x31, + 0x2e,0x39,0x35,0x35,0x63,0x30,0x2e,0x31,0x35,0x2c, + 0x30,0x2e,0x30,0x37,0x39,0x2c,0x30,0x2e,0x32,0x38, + 0x39,0x2c,0x30,0x2e,0x31,0x31,0x37,0x2c,0x30,0x2e, + 0x34,0x30,0x37,0x2c,0x30,0x2e,0x31,0x31,0x37,0x63, + 0x30,0x2e,0x33,0x31,0x31,0x2c,0x30,0x2c,0x30,0x2e, + 0x34,0x38,0x31,0x2d,0x30,0x2e,0x32,0x36,0x32,0x2c, + 0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x37,0x30, + 0x38,0x6c,0x2d,0x30,0x2e,0x37,0x31,0x31,0x2d,0x34, + 0x2e,0x31,0x33,0x39,0x0a,0x09,0x63,0x2d,0x30,0x2e, + 0x31,0x30,0x35,0x2d,0x30,0x2e,0x36,0x31,0x34,0x2c, + 0x30,0x2e,0x31,0x37,0x34,0x2d,0x31,0x2e,0x34,0x37, + 0x34,0x2c,0x30,0x2e,0x36,0x31,0x39,0x2d,0x31,0x2e, + 0x39,0x30,0x39,0x6c,0x33,0x2e,0x30,0x30,0x39,0x2d, 0x32,0x2e,0x39,0x33,0x31,0x63,0x30,0x2e,0x34,0x34, - 0x37,0x2c,0x30,0x2e,0x34,0x33,0x36,0x2c,0x30,0x2e, - 0x37,0x32,0x36,0x2c,0x31,0x2e,0x32,0x39,0x35,0x2c, - 0x30,0x2e,0x36,0x32,0x2c,0x31,0x2e,0x39,0x30,0x39, - 0x6c,0x2d,0x30,0x2e,0x37,0x31,0x2c,0x34,0x2e,0x31, - 0x33,0x39,0x0d,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30, - 0x37,0x37,0x2c,0x30,0x2e,0x34,0x34,0x36,0x2c,0x30, - 0x2e,0x30,0x39,0x34,0x2c,0x30,0x2e,0x37,0x30,0x38, - 0x2c,0x30,0x2e,0x34,0x30,0x35,0x2c,0x30,0x2e,0x37, - 0x30,0x38,0x63,0x30,0x2e,0x31,0x31,0x38,0x2c,0x30, - 0x2c,0x30,0x2e,0x32,0x35,0x35,0x2d,0x30,0x2e,0x30, - 0x33,0x38,0x2c,0x30,0x2e,0x34,0x30,0x37,0x2d,0x30, - 0x2e,0x31,0x31,0x37,0x6c,0x33,0x2e,0x37,0x31,0x37, - 0x2d,0x31,0x2e,0x39,0x35,0x35,0x63,0x30,0x2e,0x32, - 0x37,0x36,0x2d,0x30,0x2e,0x31,0x34,0x35,0x2c,0x30, - 0x2e,0x36,0x34,0x2d,0x30,0x2e,0x32,0x31,0x36,0x2c, - 0x31,0x2e,0x30,0x30,0x33,0x2d,0x30,0x2e,0x32,0x31, - 0x36,0x0d,0x0a,0x09,0x63,0x30,0x2e,0x33,0x36,0x34, - 0x2c,0x30,0x2c,0x30,0x2e,0x37,0x32,0x39,0x2c,0x30, - 0x2e,0x30,0x37,0x32,0x2c,0x31,0x2e,0x30,0x30,0x34, - 0x2c,0x30,0x2e,0x32,0x31,0x36,0x6c,0x33,0x2e,0x37, - 0x31,0x37,0x2c,0x31,0x2e,0x39,0x35,0x35,0x63,0x30, - 0x2e,0x31,0x35,0x2c,0x30,0x2e,0x30,0x37,0x39,0x2c, - 0x30,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2e,0x31,0x31, - 0x37,0x2c,0x30,0x2e,0x34,0x30,0x37,0x2c,0x30,0x2e, - 0x31,0x31,0x37,0x63,0x30,0x2e,0x33,0x31,0x31,0x2c, - 0x30,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2d,0x30,0x2e, - 0x32,0x36,0x32,0x2c,0x30,0x2e,0x34,0x30,0x35,0x2d, - 0x30,0x2e,0x37,0x30,0x38,0x6c,0x2d,0x30,0x2e,0x37, - 0x31,0x31,0x2d,0x34,0x2e,0x31,0x33,0x39,0x0d,0x0a, - 0x09,0x63,0x2d,0x30,0x2e,0x31,0x30,0x35,0x2d,0x30, - 0x2e,0x36,0x31,0x34,0x2c,0x30,0x2e,0x31,0x37,0x34, - 0x2d,0x31,0x2e,0x34,0x37,0x34,0x2c,0x30,0x2e,0x36, - 0x31,0x39,0x2d,0x31,0x2e,0x39,0x30,0x39,0x6c,0x33, - 0x2e,0x30,0x30,0x39,0x2d,0x32,0x2e,0x39,0x33,0x31, - 0x63,0x30,0x2e,0x34,0x34,0x36,0x2d,0x30,0x2e,0x34, - 0x33,0x35,0x2c,0x30,0x2e,0x33,0x30,0x37,0x2d,0x30, - 0x2e,0x38,0x36,0x35,0x2d,0x30,0x2e,0x33,0x31,0x31, - 0x2d,0x30,0x2e,0x39,0x35,0x35,0x6c,0x2d,0x34,0x2e, - 0x31,0x35,0x34,0x2d,0x30,0x2e,0x36,0x30,0x33,0x0d, - 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x36,0x31,0x37,0x2d, - 0x30,0x2e,0x30,0x38,0x39,0x2d,0x31,0x2e,0x33,0x34, - 0x39,0x2d,0x30,0x2e,0x36,0x32,0x2d,0x31,0x2e,0x36, - 0x32,0x34,0x2d,0x31,0x2e,0x31,0x38,0x4c,0x39,0x2e, - 0x32,0x31,0x33,0x2c,0x32,0x2e,0x34,0x39,0x35,0x43, - 0x39,0x2e,0x30,0x37,0x34,0x2c,0x32,0x2e,0x32,0x31, - 0x36,0x2c,0x38,0x2e,0x38,0x39,0x33,0x2c,0x32,0x2e, - 0x30,0x37,0x36,0x2c,0x38,0x2e,0x37,0x31,0x2c,0x32, - 0x2e,0x30,0x37,0x36,0x4c,0x38,0x2e,0x37,0x31,0x2c, - 0x32,0x2e,0x30,0x37,0x36,0x7a,0x22,0x2f,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0d,0x0a + 0x36,0x2d,0x30,0x2e,0x34,0x33,0x35,0x2c,0x30,0x2e, + 0x33,0x30,0x37,0x2d,0x30,0x2e,0x38,0x36,0x35,0x2d, + 0x30,0x2e,0x33,0x31,0x31,0x2d,0x30,0x2e,0x39,0x35, + 0x35,0x6c,0x2d,0x34,0x2e,0x31,0x35,0x34,0x2d,0x30, + 0x2e,0x36,0x30,0x33,0x0a,0x09,0x63,0x2d,0x30,0x2e, + 0x36,0x31,0x37,0x2d,0x30,0x2e,0x30,0x38,0x39,0x2d, + 0x31,0x2e,0x33,0x34,0x39,0x2d,0x30,0x2e,0x36,0x32, + 0x2d,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x31, + 0x38,0x4c,0x39,0x2e,0x32,0x31,0x33,0x2c,0x32,0x2e, + 0x34,0x39,0x35,0x43,0x39,0x2e,0x30,0x37,0x34,0x2c, + 0x32,0x2e,0x32,0x31,0x36,0x2c,0x38,0x2e,0x38,0x39, + 0x33,0x2c,0x32,0x2e,0x30,0x37,0x36,0x2c,0x38,0x2e, + 0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36,0x4c,0x38, + 0x2e,0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36,0x7a, + 0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, + 0x0a }; + diff --git a/data/converted/textinput_ninepatch_active_png.cpp b/data/converted/textinput_ninepatch_active_png.cpp index aae67003b5..664b3f79ef 100644 --- a/data/converted/textinput_ninepatch_active_png.cpp +++ b/data/converted/textinput_ninepatch_active_png.cpp @@ -314,3 +314,4 @@ const unsigned char textinput_ninepatch_active_png_data[3084] = { 0x50,0x30,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, 0xae,0x42,0x60,0x82 }; + diff --git a/data/converted/textinput_ninepatch_png.cpp b/data/converted/textinput_ninepatch_png.cpp index 21387e40d3..6d1fb2de9c 100644 --- a/data/converted/textinput_ninepatch_png.cpp +++ b/data/converted/textinput_ninepatch_png.cpp @@ -133,3 +133,4 @@ const unsigned char textinput_ninepatch_png_data[1275] = { 0xeb,0x7d,0x04,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, 0x44,0xae,0x42,0x60,0x82 }; + diff --git a/data/converted/window_icon_256_png.cpp b/data/converted/window_icon_256_png.cpp index e88c4c9f7a..20c5839c63 100644 --- a/data/converted/window_icon_256_png.cpp +++ b/data/converted/window_icon_256_png.cpp @@ -492,3 +492,4 @@ const unsigned char window_icon_256_png_data[4870] = { 0x21,0xc5,0x64,0xe3,0xe4,0x8c,0x4c,0xec,0x00,0x00, 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 }; + diff --git a/data/resources/help/analog_down.svg b/data/resources/help/analog_down.svg new file mode 100644 index 0000000000..e129aef1e5 --- /dev/null +++ b/data/resources/help/analog_down.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/data/resources/help/analog_left.svg b/data/resources/help/analog_left.svg new file mode 100644 index 0000000000..852fa81951 --- /dev/null +++ b/data/resources/help/analog_left.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/data/resources/help/analog_right.svg b/data/resources/help/analog_right.svg new file mode 100644 index 0000000000..6e08065d29 --- /dev/null +++ b/data/resources/help/analog_right.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/data/resources/help/analog_thumb.svg b/data/resources/help/analog_thumb.svg new file mode 100644 index 0000000000..4cbd0ef5cc --- /dev/null +++ b/data/resources/help/analog_thumb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/data/resources/help/analog_up.svg b/data/resources/help/analog_up.svg new file mode 100644 index 0000000000..61d32dbf6f --- /dev/null +++ b/data/resources/help/analog_up.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 5a13b6e8df..09219d6739 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -121,6 +121,11 @@ set(EMBEDDED_ASSET_SOURCES ${emulationstation-all_SOURCE_DIR}/data/converted/frame_png.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/scroll_gradient_png.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help_analog_left_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help_analog_right_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help_analog_up_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help_analog_down_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help_analog_thumb_svg.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_a_svg.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_b_svg.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_x_svg.cpp diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 3bd26b8975..81bbb57704 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -287,39 +287,60 @@ void InputManager::loadDefaultKBConfig() cfg->mapInput("start", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_F1, 1, true)); cfg->mapInput("select", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_F2, 1, true)); - cfg->mapInput("pageup", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_RIGHTBRACKET, 1, true)); - cfg->mapInput("pagedown", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_LEFTBRACKET, 1, true)); + cfg->mapInput("leftbottom", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_RIGHTBRACKET, 1, true)); + cfg->mapInput("rightbottom", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_LEFTBRACKET, 1, true)); } void InputManager::writeDeviceConfig(InputConfig* config) { - assert(initialized()); - - std::string path = getConfigPath(); - - pugi::xml_document doc; - - if(fs::exists(path)) - { - // merge files - pugi::xml_parse_result result = doc.load_file(path.c_str()); - if(!result) - { - LOG(LogError) << "Error parsing input config: " << result.description(); - }else{ - // successfully loaded, delete the old entry if it exists - pugi::xml_node root = doc.child("inputList"); - if(root) - { - pugi::xml_node oldEntry = root.find_child_by_attribute("inputConfig", "deviceGUID", config->getDeviceGUIDString().c_str()); - if(oldEntry) - root.remove_child(oldEntry); - oldEntry = root.find_child_by_attribute("inputConfig", "deviceName", config->getDeviceName().c_str()); - if(oldEntry) - root.remove_child(oldEntry); - } - } - } + assert(initialized()); + + std::string path = getConfigPath(); + + pugi::xml_document doc; + + if(fs::exists(path)) + { + // merge files + pugi::xml_parse_result result = doc.load_file(path.c_str()); + if(!result) + { + LOG(LogError) << "Error parsing input config: " << result.description(); + } + else + { + // successfully loaded, delete the old entry if it exists + pugi::xml_node root = doc.child("inputList"); + if(root) + { + // if inputAction @type=onfinish is set, let onfinish command take care for creating input configuration. + // we just put the input configuration into a temporary input config file. + pugi::xml_node actionnode = root.find_child_by_attribute("inputAction", "type", "onfinish"); + if(actionnode) + { + path = getTemporaryConfigPath(); + doc.reset(); + root = doc.append_child("inputList"); + root.append_copy(actionnode); + } + else + { + pugi::xml_node oldEntry = root.find_child_by_attribute("inputConfig", "deviceGUID", + config->getDeviceGUIDString().c_str()); + if(oldEntry) + { + root.remove_child(oldEntry); + } + oldEntry = root.find_child_by_attribute("inputConfig", "deviceName", + config->getDeviceName().c_str()); + if(oldEntry) + { + root.remove_child(oldEntry); + } + } + } + } + } pugi::xml_node root = doc.child("inputList"); if(!root) @@ -329,6 +350,48 @@ void InputManager::writeDeviceConfig(InputConfig* config) doc.save_file(path.c_str()); } +void InputManager::doOnFinish() +{ + assert(initialized()); + std::string path = getConfigPath(); + pugi::xml_document doc; + + if(fs::exists(path)) + { + pugi::xml_parse_result result = doc.load_file(path.c_str()); + if(!result) + { + LOG(LogError) << "Error parsing input config: " << result.description(); + } + else + { + pugi::xml_node root = doc.child("inputList"); + if(root) + { + root = root.find_child_by_attribute("inputAction", "type", "onfinish"); + if(root) + { + for(pugi::xml_node command = root.child("command"); command; + command = command.next_sibling("command")) + { + std::string tocall = command.text().get(); + + LOG(LogInfo) << " " << tocall; + std::cout << "==============================================\ninput config finish command:\n"; + int exitCode = runSystemCommand(tocall); + std::cout << "==============================================\n"; + + if(exitCode != 0) + { + LOG(LogWarning) << "...launch terminated with nonzero exit code " << exitCode << "!"; + } + } + } + } + } + } +} + std::string InputManager::getConfigPath() { std::string path = getHomePath(); @@ -336,6 +399,13 @@ std::string InputManager::getConfigPath() return path; } +std::string InputManager::getTemporaryConfigPath() +{ + std::string path = getHomePath(); + path += "/.emulationstation/es_temporaryinput.cfg"; + return path; +} + bool InputManager::initialized() const { return mKeyboardInputConfig != NULL; diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index 5ec8d8848a..7408356342 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -39,7 +39,9 @@ class InputManager static InputManager* getInstance(); void writeDeviceConfig(InputConfig* config); + void doOnFinish(); static std::string getConfigPath(); + static std::string getTemporaryConfigPath(); void init(); void deinit(); diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index a16bcb0975..77b9ae83bc 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -81,10 +81,10 @@ bool ComponentList::input(InputConfig* config, Input input) }else if(config->isMappedTo("down", input)) { return listInput(input.value != 0 ? 1 : 0); - }else if(config->isMappedTo("pageup", input)) + }else if(config->isMappedTo("leftbottom", input)) { return listInput(input.value != 0 ? -7 : 0); - }else if(config->isMappedTo("pagedown", input)){ + }else if(config->isMappedTo("rightbottom", input)){ return listInput(input.value != 0 ? 7 : 0); } diff --git a/es-core/src/components/DateTimeComponent.cpp b/es-core/src/components/DateTimeComponent.cpp index 7113ec4950..a360be44f3 100644 --- a/es-core/src/components/DateTimeComponent.cpp +++ b/es-core/src/components/DateTimeComponent.cpp @@ -54,9 +54,9 @@ bool DateTimeComponent::input(InputConfig* config, Input input) } int incDir = 0; - if(config->isMappedTo("up", input) || config->isMappedTo("pageup", input)) + if(config->isMappedTo("up", input) || config->isMappedTo("leftbottom", input)) incDir = 1; - else if(config->isMappedTo("down", input) || config->isMappedTo("pagedown", input)) + else if(config->isMappedTo("down", input) || config->isMappedTo("rightbottom", input)) incDir = -1; if(incDir != 0) diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index b4522709f4..d0f311a254 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -7,24 +7,134 @@ #include "components/ButtonComponent.h" #include "Util.h" -static const int inputCount = 10; -static const char* inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "PageUp", "PageDown" }; -static const bool inputSkippable[inputCount] = { false, false, false, false, false, false, false, false, true, true }; -static const char* inputDispName[inputCount] = { "UP", "DOWN", "LEFT", "RIGHT", "A", "B", "START", "SELECT", "PAGE UP", "PAGE DOWN" }; -static const char* inputIcon[inputCount] = { ":/help/dpad_up.svg", ":/help/dpad_down.svg", ":/help/dpad_left.svg", ":/help/dpad_right.svg", - ":/help/button_a.svg", ":/help/button_b.svg", ":/help/button_start.svg", ":/help/button_select.svg", - ":/help/button_l.svg", ":/help/button_r.svg" }; +// static const int inputCount = 10; +// static const char* inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "PageUp", "PageDown" }; +// static const bool inputSkippable[inputCount] = { false, false, false, false, false, false, false, false, true, true }; +// static const char* inputDispName[inputCount] = { "UP", "DOWN", "LEFT", "RIGHT", "A", "B", "START", "SELECT", "PAGE UP", "PAGE DOWN" }; +// static const char* inputIcon[inputCount] = { ":/help/dpad_up.svg", ":/help/dpad_down.svg", ":/help/dpad_left.svg", ":/help/dpad_right.svg", +// ":/help/button_a.svg", ":/help/button_b.svg", ":/help/button_start.svg", ":/help/button_select.svg", +// ":/help/button_l.svg", ":/help/button_r.svg" }; + +static const int inputCount = 24; +static const char* inputName[inputCount] = +{ + "Up", + "Down", + "Left", + "Right", + "Start", + "Select", + "A", + "B", + "X", + "Y", + "LeftBottom", + "RightBottom", + "LeftTop", + "RightTop", + "LeftThumb", + "RightThumb", + "LeftAnalogUp", + "LeftAnalogDown", + "LeftAnalogLeft", + "LeftAnalogRight", + "RightAnalogUp", + "RightAnalogDown", + "RightAnalogLeft", + "RightAnalogRight" +}; +static const bool inputSkippable[inputCount] = +{ + false, + false, + false, + false, + true, + true, + false, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true +}; +static const char* inputDispName[inputCount] = +{ + "D-PAD UP", + "D-PAD DOWN", + "D-PAD LEFT", + "D-PAD RIGHT", + "START", + "SELECT", + "A", + "B", + "X", + "Y", + "LEFT BOTTOM", + "RIGHT BOTTOM", + "LEFT TOP", + "RIGHT TOP", + "LEFT THUMB", + "RIGHT THUMB", + "LEFT ANALOG UP", + "LEFT ANALOG DOWN", + "LEFT ANALOG LEFT", + "LEFT ANALOG RIGHT", + "RIGHT ANALOG UP", + "RIGHT ANALOG DOWN", + "RIGHT ANALOG LEFT", + "RIGHT ANALOG RIGHT" +}; +static const char* inputIcon[inputCount] = +{ + ":/help/dpad_up.svg", + ":/help/dpad_down.svg", + ":/help/dpad_left.svg", + ":/help/dpad_right.svg", + ":/help/button_start.svg", + ":/help/button_select.svg", + ":/help/button_a.svg", + ":/help/button_b.svg", + ":/help/button_x.svg", + ":/help/button_y.svg", + ":/help/button_l.svg", + ":/help/button_r.svg", + ":/help/button_l.svg", + ":/help/button_r.svg", + ":/help/analog_thumb.svg", + ":/help/analog_thumb.svg", + ":/help/analog_up.svg", + ":/help/analog_down.svg", + ":/help/analog_left.svg", + ":/help/analog_right.svg", + ":/help/analog_up.svg", + ":/help/analog_down.svg", + ":/help/analog_left.svg", + ":/help/analog_right.svg" +}; //MasterVolUp and MasterVolDown are also hooked up, but do not appear on this screen. //If you want, you can manually add them to es_input.cfg. using namespace Eigen; -#define HOLD_TO_SKIP_MS 5000 +#define HOLD_TO_SKIP_MS 2500 GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function& okCallback) : GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 7)), - mTargetConfig(target), mHoldingInput(false) + mTargetConfig(target), mHoldingInput(false), mBusyAnim(window) { LOG(LogInfo) << "Configuring device " << target->getDeviceId() << " (" << target->getDeviceName() << ")."; @@ -149,6 +259,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi std::vector< std::shared_ptr > buttons; buttons.push_back(std::make_shared(mWindow, "OK", "ok", [this, okCallback] { InputManager::getInstance()->writeDeviceConfig(mTargetConfig); // save + InputManager::getInstance()->doOnFinish(); // execute possible onFinish commands if(okCallback) okCallback(); delete this; @@ -174,6 +285,8 @@ void GuiInputConfig::onSizeChanged() //mGrid.setRowHeightPerc(4, 0.03f); mGrid.setRowHeightPerc(5, (mList->getRowHeight(0) * 5 + 2) / mSize.y()); mGrid.setRowHeightPerc(6, mButtonGrid->getSize().y() / mSize.y()); + + mBusyAnim.setSize(mSize); } void GuiInputConfig::update(int deltaTime) diff --git a/es-core/src/guis/GuiInputConfig.h b/es-core/src/guis/GuiInputConfig.h index 20af11df86..0c93cb3667 100644 --- a/es-core/src/guis/GuiInputConfig.h +++ b/es-core/src/guis/GuiInputConfig.h @@ -4,6 +4,7 @@ #include "components/NinePatchComponent.h" #include "components/ComponentGrid.h" #include "components/ComponentList.h" +#include "components/BusyComponent.h" class TextComponent; @@ -46,4 +47,6 @@ class GuiInputConfig : public GuiComponent Input mHeldInput; int mHeldTime; int mHeldInputId; + + BusyComponent mBusyAnim; }; From 5be78e9c532d4c400c190f7f9c966b85aa19463e Mon Sep 17 00:00:00 2001 From: taalas Date: Sun, 7 Jun 2015 18:56:02 +0200 Subject: [PATCH 003/603] add direct launch tag and corresponding data structures --- es-app/src/SystemData.cpp | 60 +++++++++++++++++++++++---------- es-app/src/SystemData.h | 4 ++- es-app/src/views/SystemView.cpp | 11 +++++- 3 files changed, 56 insertions(+), 19 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 5e2b9b4c2e..3b6ad218dc 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -18,7 +18,7 @@ std::vector SystemData::sSystemVector; namespace fs = boost::filesystem; SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, - const std::string& command, const std::vector& platformIds, const std::string& themeFolder) + const std::string& command, const std::vector& platformIds, const std::string& themeFolder, bool directLaunch) { mName = name; mFullName = fullName; @@ -36,6 +36,8 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con mPlatformIds = platformIds; mThemeFolder = themeFolder; + mDirectLaunch = directLaunch; + mRootFolder = new FileData(FOLDER, mStartPath, this); mRootFolder->metadata.set("name", mFullName); @@ -106,7 +108,12 @@ std::string escapePath(const boost::filesystem::path& path) void SystemData::launchGame(Window* window, FileData* game) { - LOG(LogInfo) << "Attempting to launch game..."; + if ( game ) + { + LOG(LogInfo) << "Attempting to launch game..."; + }else{ + LOG(LogInfo) << "Attempting to launch command..."; + } AudioManager::getInstance()->deinit(); VolumeControl::getInstance()->deinit(); @@ -114,13 +121,16 @@ void SystemData::launchGame(Window* window, FileData* game) std::string command = mLaunchCommand; - const std::string rom = escapePath(game->getPath()); - const std::string basename = game->getPath().stem().string(); - const std::string rom_raw = fs::path(game->getPath()).make_preferred().string(); + if ( game ) + { + const std::string rom = escapePath(game->getPath()); + const std::string basename = game->getPath().stem().string(); + const std::string rom_raw = fs::path(game->getPath()).make_preferred().string(); - command = strreplace(command, "%ROM%", rom); - command = strreplace(command, "%BASENAME%", basename); - command = strreplace(command, "%ROM_RAW%", rom_raw); + command = strreplace(command, "%ROM%", rom); + command = strreplace(command, "%BASENAME%", basename); + command = strreplace(command, "%ROM_RAW%", rom_raw); + } LOG(LogInfo) << " " << command; std::cout << "==============================================\n"; @@ -137,13 +147,16 @@ void SystemData::launchGame(Window* window, FileData* game) AudioManager::getInstance()->init(); window->normalizeNextUpdate(); - //update number of times the game has been launched - int timesPlayed = game->metadata.getInt("playcount") + 1; - game->metadata.set("playcount", std::to_string(static_cast(timesPlayed))); + if ( game ) + { + //update number of times the game has been launched + int timesPlayed = game->metadata.getInt("playcount") + 1; + game->metadata.set("playcount", std::to_string(static_cast(timesPlayed))); - //update last played time - boost::posix_time::ptime time = boost::posix_time::second_clock::universal_time(); - game->metadata.setTime("lastplayed", time); + //update last played time + boost::posix_time::ptime time = boost::posix_time::second_clock::universal_time(); + game->metadata.setTime("lastplayed", time); + } } void SystemData::populateFolder(FileData* folder) @@ -263,11 +276,13 @@ bool SystemData::loadConfig() for(pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) { std::string name, fullname, path, cmd, themeFolder; + bool directLaunch; PlatformIds::PlatformId platformId = PlatformIds::PLATFORM_UNKNOWN; name = system.child("name").text().get(); fullname = system.child("fullname").text().get(); path = system.child("path").text().get(); + directLaunch = ( strcmp( system.child("directlaunch").text().get(), "true" ) == 0); // convert extensions list from a string into a vector of strings std::vector extensions = readList(system.child("extension").text().get()); @@ -301,18 +316,25 @@ bool SystemData::loadConfig() // theme folder themeFolder = system.child("theme").text().as_string(name.c_str()); - //validate - if(name.empty() || path.empty() || extensions.empty() || cmd.empty()) + //validate game system + if( (name.empty() || path.empty() || extensions.empty() || cmd.empty() ) && directLaunch == false ) { LOG(LogError) << "System \"" << name << "\" is missing name, path, extension, or command!"; continue; } + + //validate direct launch item + if( (name.empty() || cmd.empty() ) && directLaunch == true ) + { + LOG(LogError) << "Direct Launch item \"" << name << "\" is missing name or command!"; + continue; + } //convert path to generic directory seperators boost::filesystem::path genericPath(path); path = genericPath.generic_string(); - SystemData* newSys = new SystemData(name, fullname, path, extensions, cmd, platformIds, themeFolder); + SystemData* newSys = new SystemData(name, fullname, path, extensions, cmd, platformIds, themeFolder, directLaunch); if(newSys->getRootFolder()->getChildren().size() == 0) { LOG(LogWarning) << "System \"" << name << "\" has no games! Ignoring it."; @@ -363,6 +385,10 @@ void SystemData::writeExampleConfig(const std::string& path) " \n" " nes\n" + "\n" + " \n" + " false\n" " \n" "\n"; diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index 2a0ac81886..6629d9f7ee 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -12,7 +12,7 @@ class SystemData { public: SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, - const std::string& command, const std::vector& platformIds, const std::string& themeFolder); + const std::string& command, const std::vector& platformIds, const std::string& themeFolder, bool directLaunch=false); ~SystemData(); inline FileData* getRootFolder() const { return mRootFolder; }; @@ -21,6 +21,7 @@ class SystemData inline const std::string& getStartPath() const { return mStartPath; } inline const std::vector& getExtensions() const { return mSearchExtensions; } inline const std::string& getThemeFolder() const { return mThemeFolder; } + inline const bool getDirectLaunch() const { return mDirectLaunch; } inline const std::vector& getPlatformIds() const { return mPlatformIds; } inline bool hasPlatformId(PlatformIds::PlatformId id) { return std::find(mPlatformIds.begin(), mPlatformIds.end(), id) != mPlatformIds.end(); } @@ -73,6 +74,7 @@ class SystemData std::vector mPlatformIds; std::string mThemeFolder; std::shared_ptr mTheme; + bool mDirectLaunch; void populateFolder(FileData* folder); diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 54987fdf87..9810cd316d 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -119,7 +119,16 @@ bool SystemView::input(InputConfig* config, Input input) if(config->isMappedTo("a", input)) { stopScrolling(); - ViewController::get()->goToGameList(getSelected()); + + SystemData *systemData = getSelected(); + + // decide whether to show game list or launch the command directly + if ( !systemData->getDirectLaunch() ) + { + ViewController::get()->goToGameList(getSelected()); + }else{ + systemData->launchGame( mWindow, nullptr ); + } return true; } }else{ From d2d448ee1c68d577a0983447201e02a04d3e27e9 Mon Sep 17 00:00:00 2001 From: taalas Date: Tue, 9 Jun 2015 14:27:27 +0200 Subject: [PATCH 004/603] fix indentation --- es-app/src/SystemData.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 3b6ad218dc..8a05d5f1ed 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -387,8 +387,8 @@ void SystemData::writeExampleConfig(const std::string& path) " nes\n" "\n" " \n" - " false\n" + " will launch the command given. If set to true, every tag except for name and command is optional -->\n" + " false\n" " \n" "\n"; From 6f602a22c9c15f33e64def21e1426522ab8d5766 Mon Sep 17 00:00:00 2001 From: taalas Date: Tue, 9 Jun 2015 15:13:29 +0200 Subject: [PATCH 005/603] skip game lists without games when quick selecting, handle empty game lists --- es-app/src/SystemData.cpp | 17 ++++++++++++---- es-app/src/views/ViewController.cpp | 20 +++++++++++++++++-- .../src/views/gamelist/BasicGameListView.cpp | 6 ++++++ 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 8a05d5f1ed..39b63825f6 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -161,6 +161,12 @@ void SystemData::launchGame(Window* window, FileData* game) void SystemData::populateFolder(FileData* folder) { + if (mDirectLaunch) + { + LOG(LogInfo) << "System " << mName << " is a direct launch item, not building game lists."; + return; + } + const fs::path& folderPath = folder->getPath(); if(!fs::is_directory(folderPath)) { @@ -330,12 +336,15 @@ bool SystemData::loadConfig() continue; } - //convert path to generic directory seperators - boost::filesystem::path genericPath(path); - path = genericPath.generic_string(); + if (!directLaunch) + { + //convert path to generic directory seperators + boost::filesystem::path genericPath(path); + path = genericPath.generic_string(); + } SystemData* newSys = new SystemData(name, fullname, path, extensions, cmd, platformIds, themeFolder, directLaunch); - if(newSys->getRootFolder()->getChildren().size() == 0) + if(newSys->getRootFolder()->getChildren().size() == 0 && !directLaunch) { LOG(LogWarning) << "System \"" << name << "\" has no games! Ignoring it."; delete newSys; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 5a94d97c2b..9716cfd8bf 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -72,7 +72,15 @@ void ViewController::goToNextGameList() assert(mState.viewing == GAME_LIST); SystemData* system = getState().getSystem(); assert(system); - goToGameList(system->getNext()); + + // skip systems that don't have a game list, this will always end since it is called + // from a system with a game list and the iterator is cyclic + do + { + system = system->getNext(); + } while ( system->getDirectLaunch() ); + + goToGameList(system); } void ViewController::goToPrevGameList() @@ -80,7 +88,15 @@ void ViewController::goToPrevGameList() assert(mState.viewing == GAME_LIST); SystemData* system = getState().getSystem(); assert(system); - goToGameList(system->getPrev()); + + // skip systems that don't have a game list, this will always end since it is called + // from a system with a game list and the iterator is cyclic + do + { + system = system->getPrev(); + } while ( system->getDirectLaunch() ); + + goToGameList(system); } void ViewController::goToGameList(SystemData* system) diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index af4ccbfe4d..e0facdd207 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -38,6 +38,12 @@ void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) void BasicGameListView::populateList(const std::vector& files) { mList.clear(); + + // file list can be empty if direct launch item + if (files.size()==0) + { + return; + } mHeaderText.setText(files.at(0)->getSystem()->getFullName()); From b3c38b97825d9182bcbe49547a12d5e9dc04b930 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 19 Sep 2015 02:25:31 +0100 Subject: [PATCH 006/603] don't strip info from the parentheses in the gameslists - it's useful! --- es-app/src/FileData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index a1b625d8a5..d4279105bd 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -66,7 +66,7 @@ std::string FileData::getCleanName() const if(mSystem && mSystem->hasPlatformId(PlatformIds::ARCADE) || mSystem->hasPlatformId(PlatformIds::NEOGEO)) stem = PlatformIds::getCleanMameName(stem.c_str()); - return removeParenthesis(stem); + return stem; } const std::string& FileData::getThumbnailPath() const From cdda6f6dc1c443dff1345d32e3f1ca3ded130cb5 Mon Sep 17 00:00:00 2001 From: gizmo98 Date: Mon, 28 Sep 2015 19:25:15 +0200 Subject: [PATCH 007/603] Skip controller config if known device is added after startup Fix for problems like this: http://blog.petrockblock.com/forums/topic/retropie-wont-recognize-ps3-controller-unless-ps-button-is-hit-before-es-start/ http://blog.petrockblock.com/forums/topic/elegent-method-of-detecting-wireless-controller-before-starting-es/ No controller found message pops up if no controller is connected. If a known controller is connected and any button is pressed system selection menu will show up instantly. --- es-core/src/guis/GuiDetectDevice.cpp | 31 +++++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index 95deea1ea8..d185183d8f 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -8,11 +8,15 @@ #include #include #include "Util.h" +#include +#include #define HOLD_TIME 1000 using namespace Eigen; +namespace fs = boost::filesystem; + GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun, const std::function& doneCallback) : GuiComponent(window), mFirstRun(firstRun), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)) { @@ -100,15 +104,26 @@ void GuiDetectDevice::update(int deltaTime) { if(mHoldingConfig) { - mHoldTime -= deltaTime; - const float t = (float)mHoldTime / HOLD_TIME; - unsigned int c = (unsigned char)(t * 255); - mDeviceHeld->setColor((c << 24) | (c << 16) | (c << 8) | 0xFF); - if(mHoldTime <= 0) + // If ES starts and if a known device is connected after startup skip controller configuration + if(mFirstRun && fs::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) + { + InputManager::getInstance()->doOnFinish(); // execute possible onFinish commands + if(mDoneCallback) + mDoneCallback(); + delete this; // delete GUI element + } + else { - // picked one! - mWindow->pushGui(new GuiInputConfig(mWindow, mHoldingConfig, true, mDoneCallback)); - delete this; + mHoldTime -= deltaTime; + const float t = (float)mHoldTime / HOLD_TIME; + unsigned int c = (unsigned char)(t * 255); + mDeviceHeld->setColor((c << 24) | (c << 16) | (c << 8) | 0xFF); + if(mHoldTime <= 0) + { + // picked one! + mWindow->pushGui(new GuiInputConfig(mWindow, mHoldingConfig, true, mDoneCallback)); + delete this; + } } } } From 7bffae0812bfb1963fa14b8a80cd1126800711bd Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 3 Oct 2015 20:20:33 +0100 Subject: [PATCH 008/603] change hold to skip timer to 1 second. This means the countdown message never shows, but it says at the top to hold to skip and this makes it a lot more convenient to set up snes style controllers. Has been tested by herbfaargus also, who agreed it's an improvement. #6 --- es-core/src/guis/GuiInputConfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index d0f311a254..78f598ff10 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -130,7 +130,7 @@ static const char* inputIcon[inputCount] = using namespace Eigen; -#define HOLD_TO_SKIP_MS 2500 +#define HOLD_TO_SKIP_MS 1000 GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function& okCallback) : GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 7)), From 6f0b63b1bb14398f30a0d3d09e4cf9e5b3d21db8 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 3 Oct 2015 20:41:44 +0100 Subject: [PATCH 009/603] trailing whitespace introduced by #9 --- es-core/src/guis/GuiDetectDevice.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index d185183d8f..b7fae13654 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -107,10 +107,10 @@ void GuiDetectDevice::update(int deltaTime) // If ES starts and if a known device is connected after startup skip controller configuration if(mFirstRun && fs::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) { - InputManager::getInstance()->doOnFinish(); // execute possible onFinish commands - if(mDoneCallback) + InputManager::getInstance()->doOnFinish(); // execute possible onFinish commands + if(mDoneCallback) mDoneCallback(); - delete this; // delete GUI element + delete this; // delete GUI element } else { From 43c5e0911fa4a6de474ead25ff208821c8cc0b3a Mon Sep 17 00:00:00 2001 From: Phil Eichinger Date: Wed, 2 Dec 2015 20:24:36 +0100 Subject: [PATCH 010/603] Make libboost dependencies for Debian dependent on the found version Makes it installable on Debian Jessie (libboost 1.55.0) --- es-app/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index ee7f829909..6f1de88be4 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -133,7 +133,7 @@ SET(CPACK_RESOURCE_FILE README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Alec Lofquist ") SET(CPACK_DEBIAN_PACKAGE_SECTION "misc") SET(CPACK_DEBIAN_PACKAGE_PRIORITY "extra") -SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libsdl2-2.0-0, libboost-system1.54.0, libboost-filesystem1.54.0, libfreeimage3, libfreetype6, libcurl3, libasound2") +SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libsdl2-2.0-0, libboost-system${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}, libboost-filesystem${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}, libfreeimage3, libfreetype6, libcurl3, libasound2") SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS "debhelper (>= 8.0.0), cmake, g++ (>= 4.8), libsdl2-dev, libboost-system-dev, libboost-filesystem-dev, libboost-date-time-dev, libfreeimage-dev, libfreetype6-dev, libeigen3-dev, libcurl4-openssl-dev, libasound2-dev, libgl1-mesa-dev") SET(CPACK_PACKAGE_VENDOR "emulationstation.org") From fe86459f9919fbc53dcad313a7c470b675eea1cb Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sun, 17 Jan 2016 04:24:28 +0000 Subject: [PATCH 011/603] don't call shutdown from ES directly - which causes it to not save the gameslists on exit. Instead create files /tmp/es-restart /tmp/es-sysrestart /tmp/es-shutdown to decide what we want to do. there is an emulationstation.sh launch script to handle this --- emulationstation.sh | 18 ++++++++++++++++++ es-app/src/guis/GuiMenu.cpp | 15 +++++++++++++-- es-core/src/platform.cpp | 18 ++++++++++++++++++ es-core/src/platform.h | 4 +++- 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100755 emulationstation.sh diff --git a/emulationstation.sh b/emulationstation.sh new file mode 100755 index 0000000000..cc48aed670 --- /dev/null +++ b/emulationstation.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +while true; do + rm -f /tmp/es-restart /tmp/es-sysrestart /tmp/es-shutdown + ./emulationstation "$@" + [ -f /tmp/es-restart ] && continue + if [ -f /tmp/es-sysrestart ]; then + rm -f /tmp/es-sysrestart + sudo reboot + break + fi + if [ -f /tmp/es-shutdown ]; then + rm -f /tmp/es-shutdown + sudo poweroff + break + fi + break +done diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 417d38224c..8478d98eb0 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -177,10 +177,21 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN Window* window = mWindow; ComponentListRow row; + row.makeAcceptInputHandler([window] { + window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", + [] { + if(quitES("/tmp/es-restart") != 0) + LOG(LogWarning) << "Restart terminated with non-zero result!"; + }, "NO", nullptr)); + }); + row.addElement(std::make_shared(window, "RESTART EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + s->addRow(row); + + row.elements.clear(); row.makeAcceptInputHandler([window] { window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", [] { - if(runRestartCommand() != 0) + if(quitES("/tmp/es-sysrestart") != 0) LOG(LogWarning) << "Restart terminated with non-zero result!"; }, "NO", nullptr)); }); @@ -191,7 +202,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN row.makeAcceptInputHandler([window] { window->pushGui(new GuiMsgBox(window, "REALLY SHUTDOWN?", "YES", [] { - if(runShutdownCommand() != 0) + if(quitES("/tmp/es-shutdown") != 0) LOG(LogWarning) << "Shutdown terminated with non-zero result!"; }, "NO", nullptr)); }); diff --git a/es-core/src/platform.cpp b/es-core/src/platform.cpp index e1663a5f97..31127a9cab 100644 --- a/es-core/src/platform.cpp +++ b/es-core/src/platform.cpp @@ -1,7 +1,9 @@ #include "platform.h" #include #include +#include #include +#include #ifdef WIN32 #include @@ -69,4 +71,20 @@ int runSystemCommand(const std::string& cmd_utf8) #else return system(cmd_utf8.c_str()); #endif +} + +int quitES(const std::string& filename) +{ + touch(filename); + SDL_Event* quit = new SDL_Event(); + quit->type = SDL_QUIT; + SDL_PushEvent(quit); + return 0; +} + +void touch(const std::string& filename) +{ + int fd = open(filename.c_str(), O_CREAT|O_WRONLY, 0644); + if (fd >= 0) + close(fd); } \ No newline at end of file diff --git a/es-core/src/platform.h b/es-core/src/platform.h index a0571b32ae..0760b565c1 100644 --- a/es-core/src/platform.h +++ b/es-core/src/platform.h @@ -21,4 +21,6 @@ std::string getHomePath(); int runShutdownCommand(); // shut down the system (returns 0 if successful) int runRestartCommand(); // restart the system (returns 0 if successful) -int runSystemCommand(const std::string& cmd_utf8); // run a utf-8 encoded in the shell (requires wstring conversion on Windows) \ No newline at end of file +int runSystemCommand(const std::string& cmd_utf8); // run a utf-8 encoded in the shell (requires wstring conversion on Windows) +int quitES(const std::string& filename); +void touch(const std::string& filename); From f0d3bae673ddf3e7946e88054e219fc591ff3a8d Mon Sep 17 00:00:00 2001 From: HerbFargus Date: Mon, 25 Jan 2016 19:28:59 -0700 Subject: [PATCH 012/603] Cosmetic nits --- es-app/src/SystemData.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 5e2b9b4c2e..60e5975b17 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -123,9 +123,7 @@ void SystemData::launchGame(Window* window, FileData* game) command = strreplace(command, "%ROM_RAW%", rom_raw); LOG(LogInfo) << " " << command; - std::cout << "==============================================\n"; int exitCode = runSystemCommand(command); - std::cout << "==============================================\n"; if(exitCode != 0) { From 9b78834b42a9ef98229d51e5385695d96d95677a Mon Sep 17 00:00:00 2001 From: Devenor Date: Wed, 25 Mar 2015 21:52:27 +0100 Subject: [PATCH 013/603] Added symlink support on removeCommonPath --- es-core/src/Util.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index 198e10a820..8c7dc0c921 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -110,7 +110,8 @@ fs::path removeCommonPath(const fs::path& path, const fs::path& relativeTo, bool return path; } - fs::path p = fs::canonical(path); + // if it's a symlink we don't want to apply fs::canonical on it, otherwise we'll lose the current parent_path + fs::path p = (fs::is_symlink(path) ? fs::canonical(path.parent_path()) / path.filename() : fs::canonical(path)); fs::path r = fs::canonical(relativeTo); if(p.root_path() != r.root_path()) From 15fdbb2a8344c38e06a1754bfc05eaa3948fa065 Mon Sep 17 00:00:00 2001 From: Christian Uhsat Date: Sun, 27 Sep 2015 20:38:32 +0200 Subject: [PATCH 014/603] Hide mouse cursor early --- es-core/src/Renderer_init_sdlgl.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-core/src/Renderer_init_sdlgl.cpp b/es-core/src/Renderer_init_sdlgl.cpp index 00175f3fc8..ab0bfb56a4 100644 --- a/es-core/src/Renderer_init_sdlgl.cpp +++ b/es-core/src/Renderer_init_sdlgl.cpp @@ -36,6 +36,9 @@ namespace Renderer return false; } + //hide mouse cursor early + initialCursorState = SDL_ShowCursor(0) == 1; + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); @@ -108,9 +111,6 @@ namespace Renderer LOG(LogWarning) << "Tried to enable vsync, but failed! (" << SDL_GetError() << ")"; } - //hide mouse cursor - initialCursorState = SDL_ShowCursor(0) == 1; - return true; } From 26f4850eaf471155eeac5b74ae2d31909bcb634e Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 26 Mar 2016 01:57:05 +0000 Subject: [PATCH 015/603] add configuration menu "other settings" and add "save metadata on exit" option, which users can use to speed up exit - fixes #35 --- es-app/src/SystemData.cpp | 2 +- es-app/src/guis/GuiMenu.cpp | 13 +++++++++++++ es-core/src/Settings.cpp | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 29157cae54..51c779f5e2 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -55,7 +55,7 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con SystemData::~SystemData() { //save changed game data back to xml - if(!Settings::getInstance()->getBool("IgnoreGamelist")) + if(!Settings::getInstance()->getBool("IgnoreGamelist") && Settings::getInstance()->getBool("SaveGamelistsOnExit")) { updateGamelist(this); } diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 8478d98eb0..95061e599f 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -165,6 +165,19 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN mWindow->pushGui(s); }); + addEntry("OTHER SETTINGS", 0x777777FF, true, + [this] { + auto s = new GuiSettings(mWindow, "OTHER SETTINGS"); + + // gamelists + auto save_gamelists = std::make_shared(mWindow); + save_gamelists->setState(Settings::getInstance()->getBool("SaveGamelistsOnExit")); + s->addWithLabel("SAVE METADATA ON EXIT", save_gamelists); + s->addSaveFunc([save_gamelists] { Settings::getInstance()->setBool("SaveGamelistsOnExit", save_gamelists->getState()); }); + + mWindow->pushGui(s); + }); + addEntry("CONFIGURE INPUT", 0x777777FF, true, [this] { mWindow->pushGui(new GuiDetectDevice(mWindow, false, nullptr)); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 779ee71420..859f07b9d8 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -59,6 +59,7 @@ void Settings::setDefaults() mBoolMap["IgnoreGamelist"] = false; mBoolMap["HideConsole"] = true; mBoolMap["QuickSystemSelect"] = true; + mBoolMap["SaveGamelistsOnExit"] = true; mBoolMap["Debug"] = false; mBoolMap["DebugGrid"] = false; From 267b43fa05f066ee894d08593e62b5d6e31d44d1 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 26 Mar 2016 03:31:13 +0000 Subject: [PATCH 016/603] move ParseGamelistOnly option to the gui so people can easily enable it for faster startup --- es-app/src/guis/GuiMenu.cpp | 5 +++++ es-core/src/Settings.cpp | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 95061e599f..032706b939 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -175,6 +175,11 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("SAVE METADATA ON EXIT", save_gamelists); s->addSaveFunc([save_gamelists] { Settings::getInstance()->setBool("SaveGamelistsOnExit", save_gamelists->getState()); }); + auto parse_gamelists = std::make_shared(mWindow); + parse_gamelists->setState(Settings::getInstance()->getBool("ParseGamelistOnly")); + s->addWithLabel("PARSE GAMESLISTS ONLY", parse_gamelists); + s->addSaveFunc([parse_gamelists] { Settings::getInstance()->setBool("ParseGamelistOnly", parse_gamelists->getState()); }); + mWindow->pushGui(s); }); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 859f07b9d8..67f12150df 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -13,7 +13,6 @@ std::vector settings_dont_save = boost::assign::list_of ("Debug") ("DebugGrid") ("DebugText") - ("ParseGamelistOnly") ("ShowExit") ("Windowed") ("VSync") From 1becb4150855e487e94e1e2e761ebb64dffb8f1c Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 29 Mar 2016 05:03:39 +0100 Subject: [PATCH 017/603] Revert "Add direct launch option for systems that don't need a game list" --- es-app/src/SystemData.cpp | 77 +++++-------------- es-app/src/SystemData.h | 4 +- es-app/src/views/SystemView.cpp | 11 +-- es-app/src/views/ViewController.cpp | 20 +---- .../src/views/gamelist/BasicGameListView.cpp | 6 -- 5 files changed, 25 insertions(+), 93 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 51c779f5e2..95345ed636 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -18,7 +18,7 @@ std::vector SystemData::sSystemVector; namespace fs = boost::filesystem; SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, - const std::string& command, const std::vector& platformIds, const std::string& themeFolder, bool directLaunch) + const std::string& command, const std::vector& platformIds, const std::string& themeFolder) { mName = name; mFullName = fullName; @@ -36,8 +36,6 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con mPlatformIds = platformIds; mThemeFolder = themeFolder; - mDirectLaunch = directLaunch; - mRootFolder = new FileData(FOLDER, mStartPath, this); mRootFolder->metadata.set("name", mFullName); @@ -108,12 +106,7 @@ std::string escapePath(const boost::filesystem::path& path) void SystemData::launchGame(Window* window, FileData* game) { - if ( game ) - { - LOG(LogInfo) << "Attempting to launch game..."; - }else{ - LOG(LogInfo) << "Attempting to launch command..."; - } + LOG(LogInfo) << "Attempting to launch game..."; AudioManager::getInstance()->deinit(); VolumeControl::getInstance()->deinit(); @@ -121,16 +114,13 @@ void SystemData::launchGame(Window* window, FileData* game) std::string command = mLaunchCommand; - if ( game ) - { - const std::string rom = escapePath(game->getPath()); - const std::string basename = game->getPath().stem().string(); - const std::string rom_raw = fs::path(game->getPath()).make_preferred().string(); + const std::string rom = escapePath(game->getPath()); + const std::string basename = game->getPath().stem().string(); + const std::string rom_raw = fs::path(game->getPath()).make_preferred().string(); - command = strreplace(command, "%ROM%", rom); - command = strreplace(command, "%BASENAME%", basename); - command = strreplace(command, "%ROM_RAW%", rom_raw); - } + command = strreplace(command, "%ROM%", rom); + command = strreplace(command, "%BASENAME%", basename); + command = strreplace(command, "%ROM_RAW%", rom_raw); LOG(LogInfo) << " " << command; int exitCode = runSystemCommand(command); @@ -145,26 +135,17 @@ void SystemData::launchGame(Window* window, FileData* game) AudioManager::getInstance()->init(); window->normalizeNextUpdate(); - if ( game ) - { - //update number of times the game has been launched - int timesPlayed = game->metadata.getInt("playcount") + 1; - game->metadata.set("playcount", std::to_string(static_cast(timesPlayed))); + //update number of times the game has been launched + int timesPlayed = game->metadata.getInt("playcount") + 1; + game->metadata.set("playcount", std::to_string(static_cast(timesPlayed))); - //update last played time - boost::posix_time::ptime time = boost::posix_time::second_clock::universal_time(); - game->metadata.setTime("lastplayed", time); - } + //update last played time + boost::posix_time::ptime time = boost::posix_time::second_clock::universal_time(); + game->metadata.setTime("lastplayed", time); } void SystemData::populateFolder(FileData* folder) { - if (mDirectLaunch) - { - LOG(LogInfo) << "System " << mName << " is a direct launch item, not building game lists."; - return; - } - const fs::path& folderPath = folder->getPath(); if(!fs::is_directory(folderPath)) { @@ -280,13 +261,11 @@ bool SystemData::loadConfig() for(pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) { std::string name, fullname, path, cmd, themeFolder; - bool directLaunch; PlatformIds::PlatformId platformId = PlatformIds::PLATFORM_UNKNOWN; name = system.child("name").text().get(); fullname = system.child("fullname").text().get(); path = system.child("path").text().get(); - directLaunch = ( strcmp( system.child("directlaunch").text().get(), "true" ) == 0); // convert extensions list from a string into a vector of strings std::vector extensions = readList(system.child("extension").text().get()); @@ -320,29 +299,19 @@ bool SystemData::loadConfig() // theme folder themeFolder = system.child("theme").text().as_string(name.c_str()); - //validate game system - if( (name.empty() || path.empty() || extensions.empty() || cmd.empty() ) && directLaunch == false ) + //validate + if(name.empty() || path.empty() || extensions.empty() || cmd.empty()) { LOG(LogError) << "System \"" << name << "\" is missing name, path, extension, or command!"; continue; } - - //validate direct launch item - if( (name.empty() || cmd.empty() ) && directLaunch == true ) - { - LOG(LogError) << "Direct Launch item \"" << name << "\" is missing name or command!"; - continue; - } - if (!directLaunch) - { - //convert path to generic directory seperators - boost::filesystem::path genericPath(path); - path = genericPath.generic_string(); - } + //convert path to generic directory seperators + boost::filesystem::path genericPath(path); + path = genericPath.generic_string(); - SystemData* newSys = new SystemData(name, fullname, path, extensions, cmd, platformIds, themeFolder, directLaunch); - if(newSys->getRootFolder()->getChildren().size() == 0 && !directLaunch) + SystemData* newSys = new SystemData(name, fullname, path, extensions, cmd, platformIds, themeFolder); + if(newSys->getRootFolder()->getChildren().size() == 0) { LOG(LogWarning) << "System \"" << name << "\" has no games! Ignoring it."; delete newSys; @@ -392,10 +361,6 @@ void SystemData::writeExampleConfig(const std::string& path) " \n" " nes\n" - "\n" - " \n" - " false\n" " \n" "\n"; diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index 6629d9f7ee..2a0ac81886 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -12,7 +12,7 @@ class SystemData { public: SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, - const std::string& command, const std::vector& platformIds, const std::string& themeFolder, bool directLaunch=false); + const std::string& command, const std::vector& platformIds, const std::string& themeFolder); ~SystemData(); inline FileData* getRootFolder() const { return mRootFolder; }; @@ -21,7 +21,6 @@ class SystemData inline const std::string& getStartPath() const { return mStartPath; } inline const std::vector& getExtensions() const { return mSearchExtensions; } inline const std::string& getThemeFolder() const { return mThemeFolder; } - inline const bool getDirectLaunch() const { return mDirectLaunch; } inline const std::vector& getPlatformIds() const { return mPlatformIds; } inline bool hasPlatformId(PlatformIds::PlatformId id) { return std::find(mPlatformIds.begin(), mPlatformIds.end(), id) != mPlatformIds.end(); } @@ -74,7 +73,6 @@ class SystemData std::vector mPlatformIds; std::string mThemeFolder; std::shared_ptr mTheme; - bool mDirectLaunch; void populateFolder(FileData* folder); diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 9810cd316d..54987fdf87 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -119,16 +119,7 @@ bool SystemView::input(InputConfig* config, Input input) if(config->isMappedTo("a", input)) { stopScrolling(); - - SystemData *systemData = getSelected(); - - // decide whether to show game list or launch the command directly - if ( !systemData->getDirectLaunch() ) - { - ViewController::get()->goToGameList(getSelected()); - }else{ - systemData->launchGame( mWindow, nullptr ); - } + ViewController::get()->goToGameList(getSelected()); return true; } }else{ diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 9716cfd8bf..5a94d97c2b 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -72,15 +72,7 @@ void ViewController::goToNextGameList() assert(mState.viewing == GAME_LIST); SystemData* system = getState().getSystem(); assert(system); - - // skip systems that don't have a game list, this will always end since it is called - // from a system with a game list and the iterator is cyclic - do - { - system = system->getNext(); - } while ( system->getDirectLaunch() ); - - goToGameList(system); + goToGameList(system->getNext()); } void ViewController::goToPrevGameList() @@ -88,15 +80,7 @@ void ViewController::goToPrevGameList() assert(mState.viewing == GAME_LIST); SystemData* system = getState().getSystem(); assert(system); - - // skip systems that don't have a game list, this will always end since it is called - // from a system with a game list and the iterator is cyclic - do - { - system = system->getPrev(); - } while ( system->getDirectLaunch() ); - - goToGameList(system); + goToGameList(system->getPrev()); } void ViewController::goToGameList(SystemData* system) diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 5438c889fc..d3cbc017a1 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -38,12 +38,6 @@ void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) void BasicGameListView::populateList(const std::vector& files) { mList.clear(); - - // file list can be empty if direct launch item - if (files.size()==0) - { - return; - } mHeaderText.setText(files.at(0)->getSystem()->getFullName()); From 53f69bf61b2a2287d36d2c3c5cd26838c2ae9c5c Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 29 Mar 2016 16:33:19 +0100 Subject: [PATCH 018/603] add a getDisplayName function, which is used for rom display, and make getCleanName again strip paratheses, which is used in the scraper backends. --- es-app/src/FileData.cpp | 9 +++++++-- es-app/src/FileData.h | 5 ++++- es-app/src/Gamelist.cpp | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index d4279105bd..f9f28185b8 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -48,7 +48,7 @@ FileData::FileData(FileType type, const fs::path& path, SystemData* system) { // metadata needs at least a name field (since that's what getName() will return) if(metadata.get("name").empty()) - metadata.set("name", getCleanName()); + metadata.set("name", getDisplayName()); } FileData::~FileData() @@ -60,7 +60,7 @@ FileData::~FileData() delete mChildren.back(); } -std::string FileData::getCleanName() const +std::string FileData::getDisplayName() const { std::string stem = mPath.stem().generic_string(); if(mSystem && mSystem->hasPlatformId(PlatformIds::ARCADE) || mSystem->hasPlatformId(PlatformIds::NEOGEO)) @@ -69,6 +69,11 @@ std::string FileData::getCleanName() const return stem; } +std::string FileData::getCleanName() const +{ + return removeParenthesis(this->getDisplayName()); +} + const std::string& FileData::getThumbnailPath() const { if(!metadata.get("thumbnail").empty()) diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index add6345f4c..99fba06710 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -49,7 +49,10 @@ class FileData void addChild(FileData* file); // Error if mType != FOLDER void removeChild(FileData* file); //Error if mType != FOLDER - // Returns our best guess at the "real" name for this file (will strip parenthesis and attempt to perform MAME name translation) + // Returns our best guess at the "real" name for this file (will attempt to perform MAME name translation) + std::string getDisplayName() const; + + // As above, but also remove parenthesis std::string getCleanName() const; typedef bool ComparisonFunction(const FileData* a, const FileData* b); diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 8c647fc4d0..9caeda354e 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -148,7 +148,7 @@ void addFileDataNode(pugi::xml_node& parent, const FileData* file, const char* t if(newNode.children().begin() == newNode.child("name") //first element is name && ++newNode.children().begin() == newNode.children().end() //theres only one element - && newNode.child("name").text().get() == file->getCleanName()) //the name is the default + && newNode.child("name").text().get() == file->getDisplayName()) //the name is the default { //if the only info is the default name, don't bother with this node //delete it and ultimately do nothing From dbc2ab6110c4c1f6cc4a8faaf668a35ac6da8975 Mon Sep 17 00:00:00 2001 From: "D. Polders" Date: Sun, 17 Apr 2016 22:03:11 +0200 Subject: [PATCH 019/603] SVG update Updated the svg library from https://github.com/memononen/nanosvg --- external/nanosvg/nanosvg.h | 1151 ++++++++++++++++++++------------ external/nanosvg/nanosvgrast.h | 998 ++++++++++++++++++++++----- 2 files changed, 1549 insertions(+), 600 deletions(-) diff --git a/external/nanosvg/nanosvg.h b/external/nanosvg/nanosvg.h index ad2ee52601..a6c60155ea 100644 --- a/external/nanosvg/nanosvg.h +++ b/external/nanosvg/nanosvg.h @@ -1,14 +1,14 @@ /* * Copyright (c) 2013-14 Mikko Mononen memon@inside.org - * + * * 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 @@ -17,7 +17,7 @@ * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. * - * The SVG parser is based on Anti-Graim Geometry 2.4 SVG example + * The SVG parser is based on Anti-Grain Geometry 2.4 SVG example * Copyright (C) 2002-2004 Maxim Shemanarev (McSeem) (http://www.antigrain.com/) * * Arc calculation code based on canvg (https://code.google.com/p/canvg/) @@ -43,7 +43,7 @@ extern "C" { // That is, you should get the same looking data as your designed in your favorite app. // // NanoSVG can return the paths in few different units. For example if you want to render an image, you may choose -// to get the paths in pixels, or if you are feeding the data into a CNC-cutter, you may want to use millimeters. +// to get the paths in pixels, or if you are feeding the data into a CNC-cutter, you may want to use millimeters. // // The units passed to NanoVG should be one of: 'px', 'pt', 'pc' 'mm', 'cm', or 'in'. // DPI (dots-per-inch) controls how the unit conversion is done. @@ -53,13 +53,13 @@ extern "C" { /* Example Usage: // Load - struct SNVGImage* image; + NSVGImage* image; image = nsvgParseFromFile("test.svg", "px", 96); printf("size: %f x %f\n", image->width, image->height); // Use... - for (shape = image->shapes; shape != NULL; shape = shape->next) { - for (path = shape->paths; path != NULL; path = path->next) { - for (i = 0; i < path->npts-1; i += 3) { + for (NSVGshape *shape = image->shapes; shape != NULL; shape = shape->next) { + for (NSVGpath *path = shape->paths; path != NULL; path = path->next) { + for (int i = 0; i < path->npts-1; i += 3) { float* p = &path->pts[i*2]; drawCubicBez(p[0],p[1], p[2],p[3], p[4],p[5], p[6],p[7]); } @@ -69,71 +69,105 @@ extern "C" { nsvgDelete(image); */ -#define NSVG_PAINT_NONE 0 -#define NSVG_PAINT_COLOR 1 -#define NSVG_PAINT_LINEAR_GRADIENT 2 -#define NSVG_PAINT_RADIAL_GRADIENT 3 +enum NSVGpaintType { + NSVG_PAINT_NONE = 0, + NSVG_PAINT_COLOR = 1, + NSVG_PAINT_LINEAR_GRADIENT = 2, + NSVG_PAINT_RADIAL_GRADIENT = 3, +}; + +enum NSVGspreadType { + NSVG_SPREAD_PAD = 0, + NSVG_SPREAD_REFLECT = 1, + NSVG_SPREAD_REPEAT = 2, +}; + +enum NSVGlineJoin { + NSVG_JOIN_MITER = 0, + NSVG_JOIN_ROUND = 1, + NSVG_JOIN_BEVEL = 2, +}; + +enum NSVGlineCap { + NSVG_CAP_BUTT = 0, + NSVG_CAP_ROUND = 1, + NSVG_CAP_SQUARE = 2, +}; + +enum NSVGfillRule { + NSVG_FILLRULE_NONZERO = 0, + NSVG_FILLRULE_EVENODD = 1, +}; -#define NSVG_SPREAD_PAD 0 -#define NSVG_SPREAD_REFLECT 1 -#define NSVG_SPREAD_REPEAT 2 +enum NSVGflags { + NSVG_FLAGS_VISIBLE = 0x01 +}; -struct NSVGgradientStop { +typedef struct NSVGgradientStop { unsigned int color; float offset; -}; +} NSVGgradientStop; -struct NSVGgradient { +typedef struct NSVGgradient { float xform[6]; char spread; float fx, fy; int nstops; - struct NSVGgradientStop stops[1]; -}; + NSVGgradientStop stops[1]; +} NSVGgradient; -struct NSVGpaint { +typedef struct NSVGpaint { char type; union { unsigned int color; - struct NSVGgradient* gradient; + NSVGgradient* gradient; }; -}; +} NSVGpaint; -struct NSVGpath +typedef struct NSVGpath { float* pts; // Cubic bezier points: x0,y0, [cpx1,cpx1,cpx2,cpy2,x1,y1], ... int npts; // Total number of bezier points. char closed; // Flag indicating if shapes should be treated as closed. float bounds[4]; // Tight bounding box of the shape [minx,miny,maxx,maxy]. struct NSVGpath* next; // Pointer to next path, or NULL if last element. -}; +} NSVGpath; -struct NSVGshape +typedef struct NSVGshape { - struct NSVGpaint fill; // Fill paint - struct NSVGpaint stroke; // Stroke paint + char id[64]; // Optional 'id' attr of the shape or its group + NSVGpaint fill; // Fill paint + NSVGpaint stroke; // Stroke paint float opacity; // Opacity of the shape. - float strokeWidth; // Stroke width (scaled) + float strokeWidth; // Stroke width (scaled). + float strokeDashOffset; // Stroke dash offset (scaled). + float strokeDashArray[8]; // Stroke dash array (scaled). + char strokeDashCount; // Number of dash values in dash array. + char strokeLineJoin; // Stroke join type. + char strokeLineCap; // Stroke cap type. + char fillRule; // Fill rule, see NSVGfillRule. + unsigned char flags; // Logical or of NSVG_FLAGS_* flags float bounds[4]; // Tight bounding box of the shape [minx,miny,maxx,maxy]. - struct NSVGpath* paths; // Linked list of paths in the image. + NSVGpath* paths; // Linked list of paths in the image. struct NSVGshape* next; // Pointer to next shape, or NULL if last element. -}; +} NSVGshape; -struct NSVGimage +typedef struct NSVGimage { float width; // Width of the image. float height; // Height of the image. - struct NSVGshape* shapes; // Linked list of shapes in the image. -}; + NSVGshape* shapes; // Linked list of shapes in the image. +} NSVGimage; // Parses SVG file from a file, returns SVG image as paths. -struct NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi); +NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi); // Parses SVG file from a null terminated string, returns SVG image as paths. -struct NSVGimage* nsvgParse(char* input, const char* units, float dpi); +// Important note: changes the string. +NSVGimage* nsvgParse(char* input, const char* units, float dpi); // Deletes list of paths. -void nsvgDelete(struct NSVGimage* image); +void nsvgDelete(NSVGimage* image); #ifdef __cplusplus }; @@ -157,6 +191,7 @@ void nsvgDelete(struct NSVGimage* image); #define NSVG_ALIGN_MEET 1 #define NSVG_ALIGN_SLICE 2 +#define NSVG_NOTUSED(v) do { (void)(1 ? (void)0 : ( (void)(v) ) ); } while(0) #define NSVG_RGB(r, g, b) (((unsigned int)r) | ((unsigned int)g << 8) | ((unsigned int)b << 16)) #ifdef _MSC_VER @@ -204,7 +239,7 @@ static void nsvg__parseContent(char* s, // Trim start white spaces while (*s && nsvg__isspace(*s)) s++; if (!*s) return; - + if (contentCb) (*contentCb)(ud, s); } @@ -219,7 +254,8 @@ static void nsvg__parseElement(char* s, char* name; int start = 0; int end = 0; - + char quote; + // Skip white space after the '<' while (*s && nsvg__isspace(*s)) s++; @@ -254,15 +290,16 @@ static void nsvg__parseElement(char* s, while (*s && !nsvg__isspace(*s) && *s != '=') s++; if (*s) { *s++ = '\0'; } // Skip until the beginning of the value. - while (*s && *s != '\"') s++; + while (*s && *s != '\"' && *s != '\'') s++; if (!*s) break; + quote = *s; s++; // Store value and find the end of it. attr[nattr++] = s; - while (*s && *s != '\"') s++; + while (*s && *s != quote) s++; if (*s) { *s++ = '\0'; } } - + // List terminator attr[nattr++] = 0; attr[nattr++] = 0; @@ -300,7 +337,7 @@ int nsvg__parseXML(char* input, s++; } } - + return 1; } @@ -309,32 +346,59 @@ int nsvg__parseXML(char* input, #define NSVG_MAX_ATTR 128 -#define NSVG_USER_SPACE 0 -#define NSVG_OBJECT_SPACE 1 +enum NSVGgradientUnits { + NSVG_USER_SPACE = 0, + NSVG_OBJECT_SPACE = 1, +}; + +#define NSVG_MAX_DASHES 8 + +enum NSVGunits { + NSVG_UNITS_USER, + NSVG_UNITS_PX, + NSVG_UNITS_PT, + NSVG_UNITS_PC, + NSVG_UNITS_MM, + NSVG_UNITS_CM, + NSVG_UNITS_IN, + NSVG_UNITS_PERCENT, + NSVG_UNITS_EM, + NSVG_UNITS_EX, +}; + +typedef struct NSVGcoordinate { + float value; + int units; +} NSVGcoordinate; -struct NSVGgradientData +typedef struct NSVGlinearData { + NSVGcoordinate x1, y1, x2, y2; +} NSVGlinearData; + +typedef struct NSVGradialData { + NSVGcoordinate cx, cy, r, fx, fy; +} NSVGradialData; + +typedef struct NSVGgradientData { char id[64]; char ref[64]; char type; union { - struct { - float x1, y1, x2, y2; - } linear; - struct { - float cx, cy, r, fx, fy; - } radial; + NSVGlinearData linear; + NSVGradialData radial; }; char spread; char units; float xform[6]; int nstops; - struct NSVGgradientStop* stops; + NSVGgradientStop* stops; struct NSVGgradientData* next; -}; +} NSVGgradientData; -struct NSVGattrib +typedef struct NSVGattrib { + char id[64]; float xform[6]; unsigned int fillColor; unsigned int strokeColor; @@ -344,6 +408,12 @@ struct NSVGattrib char fillGradient[64]; char strokeGradient[64]; float strokeWidth; + float strokeDashOffset; + float strokeDashArray[NSVG_MAX_DASHES]; + int strokeDashCount; + char strokeLineJoin; + char strokeLineCap; + char fillRule; float fontSize; unsigned int stopColor; float stopOpacity; @@ -351,24 +421,24 @@ struct NSVGattrib char hasFill; char hasStroke; char visible; -}; +} NSVGattrib; -struct NSVGparser +typedef struct NSVGparser { - struct NSVGattrib attr[NSVG_MAX_ATTR]; + NSVGattrib attr[NSVG_MAX_ATTR]; int attrHead; float* pts; int npts; int cpts; - struct NSVGpath* plist; - struct NSVGimage* image; - struct NSVGgradientData* gradients; + NSVGpath* plist; + NSVGimage* image; + NSVGgradientData* gradients; float viewMinx, viewMiny, viewWidth, viewHeight; int alignX, alignY, alignType; float dpi; char pathFlag; - char defsFlag; -}; + char defsFlag; +} NSVGparser; static void nsvg__xformIdentity(float* t) { @@ -428,12 +498,12 @@ static void nsvg__xformMultiply(float* t, float* s) static void nsvg__xformInverse(float* inv, float* t) { - double det = (double)t[0] * t[3] - (double)t[2] * t[1]; - if (det > -1e-6 && det < -1e-6) { + double invdet, det = (double)t[0] * t[3] - (double)t[2] * t[1]; + if (det > -1e-6 && det < 1e-6) { nsvg__xformIdentity(t); return; } - double invdet = 1.0 / det; + invdet = 1.0 / det; inv[0] = (float)(t[3] * invdet); inv[2] = (float)(-t[2] * invdet); inv[4] = (float)(((double)t[2] * t[5] - (double)t[3] * t[4]) * invdet); @@ -472,7 +542,7 @@ static int nsvg__ptInBounds(float* pt, float* bounds) static double nsvg__evalBezier(double t, double p0, double p1, double p2, double p3) { - float it = 1.0-t; + double it = 1.0-t; return it*it*it*p0 + 3.0*it*it*t*p1 + 3.0*it*t*t*p2 + t*t*t*p3; } @@ -527,19 +597,20 @@ static void nsvg__curveBounds(float* bounds, float* curve) } } -static struct NSVGparser* nsvg__createParser() +static NSVGparser* nsvg__createParser() { - struct NSVGparser* p; - p = (struct NSVGparser*)malloc(sizeof(struct NSVGparser)); + NSVGparser* p; + p = (NSVGparser*)malloc(sizeof(NSVGparser)); if (p == NULL) goto error; - memset(p, 0, sizeof(struct NSVGparser)); + memset(p, 0, sizeof(NSVGparser)); - p->image = (struct NSVGimage*)malloc(sizeof(struct NSVGimage)); + p->image = (NSVGimage*)malloc(sizeof(NSVGimage)); if (p->image == NULL) goto error; - memset(p->image, 0, sizeof(struct NSVGimage)); + memset(p->image, 0, sizeof(NSVGimage)); // Init style nsvg__xformIdentity(p->attr[0].xform); + memset(p->attr[0].id, 0, sizeof p->attr[0].id); p->attr[0].fillColor = NSVG_RGB(0,0,0); p->attr[0].strokeColor = NSVG_RGB(0,0,0); p->attr[0].opacity = 1; @@ -547,8 +618,10 @@ static struct NSVGparser* nsvg__createParser() p->attr[0].strokeOpacity = 1; p->attr[0].stopOpacity = 1; p->attr[0].strokeWidth = 1; + p->attr[0].strokeLineJoin = NSVG_JOIN_MITER; + p->attr[0].strokeLineCap = NSVG_CAP_BUTT; + p->attr[0].fillRule = NSVG_FILLRULE_NONZERO; p->attr[0].hasFill = 1; - p->attr[0].hasStroke = 0; p->attr[0].visible = 1; return p; @@ -561,10 +634,10 @@ static struct NSVGparser* nsvg__createParser() return NULL; } -static void nsvg__deletePaths(struct NSVGpath* path) +static void nsvg__deletePaths(NSVGpath* path) { while (path) { - struct NSVGpath *next = path->next; + NSVGpath *next = path->next; if (path->pts != NULL) free(path->pts); free(path); @@ -572,15 +645,15 @@ static void nsvg__deletePaths(struct NSVGpath* path) } } -static void nsvg__deletePaint(struct NSVGpaint* paint) +static void nsvg__deletePaint(NSVGpaint* paint) { - if (paint->type == NSVG_PAINT_LINEAR_GRADIENT || paint->type == NSVG_PAINT_LINEAR_GRADIENT) + if (paint->type == NSVG_PAINT_LINEAR_GRADIENT || paint->type == NSVG_PAINT_RADIAL_GRADIENT) free(paint->gradient); } -static void nsvg__deleteGradientData(struct NSVGgradientData* grad) +static void nsvg__deleteGradientData(NSVGgradientData* grad) { - struct NSVGgradientData* next; + NSVGgradientData* next; while (grad != NULL) { next = grad->next; free(grad->stops); @@ -589,7 +662,7 @@ static void nsvg__deleteGradientData(struct NSVGgradientData* grad) } } -static void nsvg__deleteParser(struct NSVGparser* p) +static void nsvg__deleteParser(NSVGparser* p) { if (p != NULL) { nsvg__deletePaths(p->plist); @@ -600,12 +673,12 @@ static void nsvg__deleteParser(struct NSVGparser* p) } } -static void nsvg__resetPath(struct NSVGparser* p) +static void nsvg__resetPath(NSVGparser* p) { p->npts = 0; } -static void nsvg__addPoint(struct NSVGparser* p, float x, float y) +static void nsvg__addPoint(NSVGparser* p, float x, float y) { if (p->npts+1 > p->cpts) { p->cpts = p->cpts ? p->cpts*2 : 8; @@ -617,12 +690,17 @@ static void nsvg__addPoint(struct NSVGparser* p, float x, float y) p->npts++; } -static void nsvg__moveTo(struct NSVGparser* p, float x, float y) +static void nsvg__moveTo(NSVGparser* p, float x, float y) { - nsvg__addPoint(p, x, y); + if (p->npts > 0) { + p->pts[(p->npts-1)*2+0] = x; + p->pts[(p->npts-1)*2+1] = y; + } else { + nsvg__addPoint(p, x, y); + } } -static void nsvg__lineTo(struct NSVGparser* p, float x, float y) +static void nsvg__lineTo(NSVGparser* p, float x, float y) { float px,py, dx,dy; if (p->npts > 0) { @@ -636,35 +714,80 @@ static void nsvg__lineTo(struct NSVGparser* p, float x, float y) } } -static void nsvg__cubicBezTo(struct NSVGparser* p, float cpx1, float cpy1, float cpx2, float cpy2, float x, float y) +static void nsvg__cubicBezTo(NSVGparser* p, float cpx1, float cpy1, float cpx2, float cpy2, float x, float y) { nsvg__addPoint(p, cpx1, cpy1); nsvg__addPoint(p, cpx2, cpy2); nsvg__addPoint(p, x, y); } -static struct NSVGattrib* nsvg__getAttr(struct NSVGparser* p) +static NSVGattrib* nsvg__getAttr(NSVGparser* p) { return &p->attr[p->attrHead]; } -static void nsvg__pushAttr(struct NSVGparser* p) +static void nsvg__pushAttr(NSVGparser* p) { if (p->attrHead < NSVG_MAX_ATTR-1) { p->attrHead++; - memcpy(&p->attr[p->attrHead], &p->attr[p->attrHead-1], sizeof(struct NSVGattrib)); + memcpy(&p->attr[p->attrHead], &p->attr[p->attrHead-1], sizeof(NSVGattrib)); } } -static void nsvg__popAttr(struct NSVGparser* p) +static void nsvg__popAttr(NSVGparser* p) { if (p->attrHead > 0) p->attrHead--; } -static struct NSVGgradientData* nsvg__findGradientData(struct NSVGparser* p, const char* id) +static float nsvg__actualOrigX(NSVGparser* p) +{ + return p->viewMinx; +} + +static float nsvg__actualOrigY(NSVGparser* p) +{ + return p->viewMiny; +} + +static float nsvg__actualWidth(NSVGparser* p) +{ + return p->viewWidth; +} + +static float nsvg__actualHeight(NSVGparser* p) +{ + return p->viewHeight; +} + +static float nsvg__actualLength(NSVGparser* p) +{ + float w = nsvg__actualWidth(p), h = nsvg__actualHeight(p); + return sqrtf(w*w + h*h) / sqrtf(2.0f); +} + +static float nsvg__convertToPixels(NSVGparser* p, NSVGcoordinate c, float orig, float length) +{ + NSVGattrib* attr = nsvg__getAttr(p); + switch (c.units) { + case NSVG_UNITS_USER: return c.value; + case NSVG_UNITS_PX: return c.value; + case NSVG_UNITS_PT: return c.value / 72.0f * p->dpi; + case NSVG_UNITS_PC: return c.value / 6.0f * p->dpi; + case NSVG_UNITS_MM: return c.value / 25.4f * p->dpi; + case NSVG_UNITS_CM: return c.value / 2.54f * p->dpi; + case NSVG_UNITS_IN: return c.value * p->dpi; + case NSVG_UNITS_EM: return c.value * attr->fontSize; + case NSVG_UNITS_EX: return c.value * attr->fontSize * 0.52f; // x-height of Helvetica. + case NSVG_UNITS_PERCENT: return orig + c.value / 100.0f * length; + default: return c.value; + } + return c.value; +} + +static NSVGgradientData* nsvg__findGradientData(NSVGparser* p, const char* id) { - struct NSVGgradientData* grad = p->gradients; + NSVGgradientData* grad = p->gradients; while (grad) { if (strcmp(grad->id, id) == 0) return grad; @@ -673,14 +796,14 @@ static struct NSVGgradientData* nsvg__findGradientData(struct NSVGparser* p, con return NULL; } -static struct NSVGgradient* nsvg__createGradient(struct NSVGparser* p, const char* id, const float* bounds, char* paintType) +static NSVGgradient* nsvg__createGradient(NSVGparser* p, const char* id, const float* localBounds, char* paintType) { - struct NSVGattrib* attr = nsvg__getAttr(p); - struct NSVGgradientData* data = NULL; - struct NSVGgradientData* ref = NULL; - struct NSVGgradientStop* stops = NULL; - struct NSVGgradient* grad; - float dx, dy, d; + NSVGattrib* attr = nsvg__getAttr(p); + NSVGgradientData* data = NULL; + NSVGgradientData* ref = NULL; + NSVGgradientStop* stops = NULL; + NSVGgradient* grad; + float ox, oy, sw, sh, sl; int nstops = 0; data = nsvg__findGradientData(p, id); @@ -689,7 +812,7 @@ static struct NSVGgradient* nsvg__createGradient(struct NSVGparser* p, const cha // TODO: use ref to fill in all unset values too. ref = data; while (ref != NULL) { - if (ref->stops != NULL) { + if (stops == NULL && ref->stops != NULL) { stops = ref->stops; nstops = ref->nstops; break; @@ -698,33 +821,55 @@ static struct NSVGgradient* nsvg__createGradient(struct NSVGparser* p, const cha } if (stops == NULL) return NULL; - grad = (struct NSVGgradient*)malloc(sizeof(struct NSVGgradient) + sizeof(struct NSVGgradientStop)*(nstops-1)); + grad = (NSVGgradient*)malloc(sizeof(NSVGgradient) + sizeof(NSVGgradientStop)*(nstops-1)); if (grad == NULL) return NULL; - // TODO: handle data->units == NSVG_OBJECT_SPACE. + // The shape width and height. + if (data->units == NSVG_OBJECT_SPACE) { + ox = localBounds[0]; + oy = localBounds[1]; + sw = localBounds[2] - localBounds[0]; + sh = localBounds[3] - localBounds[1]; + } else { + ox = nsvg__actualOrigX(p); + oy = nsvg__actualOrigY(p); + sw = nsvg__actualWidth(p); + sh = nsvg__actualHeight(p); + } + sl = sqrtf(sw*sw + sh*sh) / sqrtf(2.0f); if (data->type == NSVG_PAINT_LINEAR_GRADIENT) { + float x1, y1, x2, y2, dx, dy; + x1 = nsvg__convertToPixels(p, data->linear.x1, ox, sw); + y1 = nsvg__convertToPixels(p, data->linear.y1, oy, sh); + x2 = nsvg__convertToPixels(p, data->linear.x2, ox, sw); + y2 = nsvg__convertToPixels(p, data->linear.y2, oy, sh); // Calculate transform aligned to the line - dx = data->linear.x2 - data->linear.x1; - dy = data->linear.y2 - data->linear.y1; - d = sqrtf(dx*dx + dy*dy); + dx = x2 - x1; + dy = y2 - y1; grad->xform[0] = dy; grad->xform[1] = -dx; grad->xform[2] = dx; grad->xform[3] = dy; - grad->xform[4] = data->linear.x1; grad->xform[5] = data->linear.y1; + grad->xform[4] = x1; grad->xform[5] = y1; } else { + float cx, cy, fx, fy, r; + cx = nsvg__convertToPixels(p, data->radial.cx, ox, sw); + cy = nsvg__convertToPixels(p, data->radial.cy, oy, sh); + fx = nsvg__convertToPixels(p, data->radial.fx, ox, sw); + fy = nsvg__convertToPixels(p, data->radial.fy, oy, sh); + r = nsvg__convertToPixels(p, data->radial.r, 0, sl); // Calculate transform aligned to the circle - grad->xform[0] = data->radial.r; grad->xform[1] = 0; - grad->xform[2] = 0; grad->xform[3] = data->radial.r; - grad->xform[4] = data->radial.cx; grad->xform[5] = data->radial.cy; - grad->fx = data->radial.fx / data->radial.r; - grad->fy = data->radial.fy / data->radial.r; + grad->xform[0] = r; grad->xform[1] = 0; + grad->xform[2] = 0; grad->xform[3] = r; + grad->xform[4] = cx; grad->xform[5] = cy; + grad->fx = fx / r; + grad->fy = fy / r; } - nsvg__xformMultiply(grad->xform, attr->xform); nsvg__xformMultiply(grad->xform, data->xform); + nsvg__xformMultiply(grad->xform, attr->xform); grad->spread = data->spread; - memcpy(grad->stops, stops, nstops*sizeof(struct NSVGgradientStop)); + memcpy(grad->stops, stops, nstops*sizeof(NSVGgradientStop)); grad->nstops = nstops; *paintType = data->type; @@ -732,22 +877,68 @@ static struct NSVGgradient* nsvg__createGradient(struct NSVGparser* p, const cha return grad; } -static void nsvg__addShape(struct NSVGparser* p) +static float nsvg__getAverageScale(float* t) +{ + float sx = sqrtf(t[0]*t[0] + t[2]*t[2]); + float sy = sqrtf(t[1]*t[1] + t[3]*t[3]); + return (sx + sy) * 0.5f; +} + +static void nsvg__getLocalBounds(float* bounds, NSVGshape *shape, float* xform) +{ + NSVGpath* path; + float curve[4*2], curveBounds[4]; + int i, first = 1; + for (path = shape->paths; path != NULL; path = path->next) { + nsvg__xformPoint(&curve[0], &curve[1], path->pts[0], path->pts[1], xform); + for (i = 0; i < path->npts-1; i += 3) { + nsvg__xformPoint(&curve[2], &curve[3], path->pts[(i+1)*2], path->pts[(i+1)*2+1], xform); + nsvg__xformPoint(&curve[4], &curve[5], path->pts[(i+2)*2], path->pts[(i+2)*2+1], xform); + nsvg__xformPoint(&curve[6], &curve[7], path->pts[(i+3)*2], path->pts[(i+3)*2+1], xform); + nsvg__curveBounds(curveBounds, curve); + if (first) { + bounds[0] = curveBounds[0]; + bounds[1] = curveBounds[1]; + bounds[2] = curveBounds[2]; + bounds[3] = curveBounds[3]; + first = 0; + } else { + bounds[0] = nsvg__minf(bounds[0], curveBounds[0]); + bounds[1] = nsvg__minf(bounds[1], curveBounds[1]); + bounds[2] = nsvg__maxf(bounds[2], curveBounds[2]); + bounds[3] = nsvg__maxf(bounds[3], curveBounds[3]); + } + curve[0] = curve[6]; + curve[1] = curve[7]; + } + } +} + +static void nsvg__addShape(NSVGparser* p) { - struct NSVGattrib* attr = nsvg__getAttr(p); + NSVGattrib* attr = nsvg__getAttr(p); float scale = 1.0f; - struct NSVGshape *shape, *cur, *prev; - struct NSVGpath* path; + NSVGshape *shape, *cur, *prev; + NSVGpath* path; + int i; if (p->plist == NULL) return; - shape = (struct NSVGshape*)malloc(sizeof(struct NSVGshape)); + shape = (NSVGshape*)malloc(sizeof(NSVGshape)); if (shape == NULL) goto error; - memset(shape, 0, sizeof(struct NSVGshape)); + memset(shape, 0, sizeof(NSVGshape)); - scale = nsvg__maxf(fabsf(attr->xform[0]), fabsf(attr->xform[3])); + memcpy(shape->id, attr->id, sizeof shape->id); + scale = nsvg__getAverageScale(attr->xform); shape->strokeWidth = attr->strokeWidth * scale; + shape->strokeDashOffset = attr->strokeDashOffset * scale; + shape->strokeDashCount = attr->strokeDashCount; + for (i = 0; i < attr->strokeDashCount; i++) + shape->strokeDashArray[i] = attr->strokeDashArray[i] * scale; + shape->strokeLineJoin = attr->strokeLineJoin; + shape->strokeLineCap = attr->strokeLineCap; + shape->fillRule = attr->fillRule; shape->opacity = attr->opacity; shape->paths = p->plist; @@ -773,7 +964,10 @@ static void nsvg__addShape(struct NSVGparser* p) shape->fill.color = attr->fillColor; shape->fill.color |= (unsigned int)(attr->fillOpacity*255) << 24; } else if (attr->hasFill == 2) { - shape->fill.gradient = nsvg__createGradient(p, attr->fillGradient, shape->bounds, &shape->fill.type); + float inv[6], localBounds[4]; + nsvg__xformInverse(inv, attr->xform); + nsvg__getLocalBounds(localBounds, shape, inv); + shape->fill.gradient = nsvg__createGradient(p, attr->fillGradient, localBounds, &shape->fill.type); if (shape->fill.gradient == NULL) { shape->fill.type = NSVG_PAINT_NONE; } @@ -787,11 +981,17 @@ static void nsvg__addShape(struct NSVGparser* p) shape->stroke.color = attr->strokeColor; shape->stroke.color |= (unsigned int)(attr->strokeOpacity*255) << 24; } else if (attr->hasStroke == 2) { - shape->stroke.gradient = nsvg__createGradient(p, attr->strokeGradient, shape->bounds, &shape->stroke.type); + float inv[6], localBounds[4]; + nsvg__xformInverse(inv, attr->xform); + nsvg__getLocalBounds(localBounds, shape, inv); + shape->stroke.gradient = nsvg__createGradient(p, attr->strokeGradient, localBounds, &shape->stroke.type); if (shape->stroke.gradient == NULL) shape->stroke.type = NSVG_PAINT_NONE; } + // Set flags + shape->flags = (attr->visible ? NSVG_FLAGS_VISIBLE : 0x00); + // Add to tail prev = NULL; cur = p->image->shapes; @@ -810,33 +1010,33 @@ static void nsvg__addShape(struct NSVGparser* p) if (shape) free(shape); } -static void nsvg__addPath(struct NSVGparser* p, char closed) +static void nsvg__addPath(NSVGparser* p, char closed) { - struct NSVGattrib* attr = nsvg__getAttr(p); - struct NSVGpath* path = NULL; + NSVGattrib* attr = nsvg__getAttr(p); + NSVGpath* path = NULL; float bounds[4]; float* curve; int i; - - if (p->npts == 0) + + if (p->npts < 4) return; if (closed) nsvg__lineTo(p, p->pts[0], p->pts[1]); - path = (struct NSVGpath*)malloc(sizeof(struct NSVGpath)); + path = (NSVGpath*)malloc(sizeof(NSVGpath)); if (path == NULL) goto error; - memset(path, 0, sizeof(struct NSVGpath)); + memset(path, 0, sizeof(NSVGpath)); path->pts = (float*)malloc(p->npts*2*sizeof(float)); if (path->pts == NULL) goto error; path->closed = closed; path->npts = p->npts; - + // Transform path. for (i = 0; i < p->npts; ++i) nsvg__xformPoint(&path->pts[i*2], &path->pts[i*2+1], p->pts[i*2], p->pts[i*2+1], attr->xform); - + // Find bounds for (i = 0; i < path->npts-1; i += 3) { curve = &path->pts[i*2]; @@ -866,48 +1066,57 @@ static void nsvg__addPath(struct NSVGparser* p, char closed) } } -static const char* nsvg__getNextPathItem(const char* s, char* it) +static const char* nsvg__parseNumber(const char* s, char* it, const int size) { + const int last = size-1; int i = 0; - it[0] = '\0'; - // Skip white spaces and commas - while (*s && (nsvg__isspace(*s) || *s == ',')) s++; - if (!*s) return s; - if (*s == '-' || *s == '+' || nsvg__isdigit(*s)) { - // sign - if (*s == '-' || *s == '+') { - if (i < 63) it[i++] = *s; - s++; - } - // integer part + + // sign + if (*s == '-' || *s == '+') { + if (i < last) it[i++] = *s; + s++; + } + // integer part + while (*s && nsvg__isdigit(*s)) { + if (i < last) it[i++] = *s; + s++; + } + if (*s == '.') { + // decimal point + if (i < last) it[i++] = *s; + s++; + // fraction part while (*s && nsvg__isdigit(*s)) { - if (i < 63) it[i++] = *s; + if (i < last) it[i++] = *s; s++; } - if (*s == '.') { - // decimal point - if (i < 63) it[i++] = *s; + } + // exponent + if (*s == 'e' || *s == 'E') { + if (i < last) it[i++] = *s; + s++; + if (*s == '-' || *s == '+') { + if (i < last) it[i++] = *s; s++; - // fraction part - while (*s && nsvg__isdigit(*s)) { - if (i < 63) it[i++] = *s; - s++; - } } - // exponent - if (*s == 'e' || *s == 'E') { - if (i < 63) it[i++] = *s; + while (*s && nsvg__isdigit(*s)) { + if (i < last) it[i++] = *s; s++; - if (*s == '-' || *s == '+') { - if (i < 63) it[i++] = *s; - s++; - } - while (*s && nsvg__isdigit(*s)) { - if (i < 63) it[i++] = *s; - s++; - } } - it[i] = '\0'; + } + it[i] = '\0'; + + return s; +} + +static const char* nsvg__getNextPathItem(const char* s, char* it) +{ + it[0] = '\0'; + // Skip white spaces and commas + while (*s && (nsvg__isspace(*s) || *s == ',')) s++; + if (!*s) return s; + if (*s == '-' || *s == '+' || *s == '.' || nsvg__isdigit(*s)) { + s = nsvg__parseNumber(s, it, 64); } else { // Parse command it[0] = *s++; @@ -918,23 +1127,6 @@ static const char* nsvg__getNextPathItem(const char* s, char* it) return s; } -static float nsvg__actualWidth(struct NSVGparser* p) -{ - return p->viewWidth; -} - -static float nsvg__actualHeight(struct NSVGparser* p) -{ - return p->viewHeight; -} - -static float nsvg__actualLength(struct NSVGparser* p) -{ - float w = nsvg__actualWidth(p), h = nsvg__actualHeight(p); - return sqrtf(w*w + h*h) / sqrtf(2.0f); -} - - static unsigned int nsvg__parseColorHex(const char* str) { unsigned int c = 0, r = 0, g = 0, b = 0; @@ -968,12 +1160,12 @@ static unsigned int nsvg__parseColorRGB(const char* str) } } -struct NSVGNamedColor { +typedef struct NSVGNamedColor { const char* name; unsigned int color; -}; +} NSVGNamedColor; -struct NSVGNamedColor nsvg__colors[] = { +NSVGNamedColor nsvg__colors[] = { { "red", NSVG_RGB(255, 0, 0) }, { "green", NSVG_RGB( 0, 128, 0) }, @@ -1129,8 +1321,8 @@ struct NSVGNamedColor nsvg__colors[] = { static unsigned int nsvg__parseColorName(const char* str) { - int i, ncolors = sizeof(nsvg__colors) / sizeof(struct NSVGNamedColor); - + int i, ncolors = sizeof(nsvg__colors) / sizeof(NSVGNamedColor); + for (i = 0; i < ncolors; i++) { if (strcmp(nsvg__colors[i].name, str) == 0) { return nsvg__colors[i].color; @@ -1142,7 +1334,7 @@ static unsigned int nsvg__parseColorName(const char* str) static unsigned int nsvg__parseColor(const char* str) { - int len = 0; + size_t len = 0; while(*str == ' ') ++str; len = strlen(str); if (len >= 1 && *str == '#') @@ -1152,75 +1344,65 @@ static unsigned int nsvg__parseColor(const char* str) return nsvg__parseColorName(str); } -static float nsvg__convertToPixels(struct NSVGparser* p, float val, const char* units, int dir) +static float nsvg__parseOpacity(const char* str) { - struct NSVGattrib* attr; - - if (p != NULL) { - // Convert units to pixels. - if (units[0] == '\0') { - return val; - } else if (units[0] == 'p' && units[1] == 'x') { - return val; - } else if (units[0] == 'p' && units[1] == 't') { - return val / 72.0f * p->dpi; - } else if (units[0] == 'p' && units[1] == 'c') { - return val / 6.0f * p->dpi; - } else if (units[0] == 'm' && units[1] == 'm') { - return val / 25.4f * p->dpi; - } else if (units[0] == 'c' && units[1] == 'm') { - return val / 2.54f * p->dpi; - } else if (units[0] == 'i' && units[1] == 'n') { - return val * p->dpi; - } else if (units[0] == '%') { - if (p != NULL) { - attr = nsvg__getAttr(p); - if (dir == 0) - return (val/100.0f) * nsvg__actualWidth(p); - else if (dir == 1) - return (val/100.0f) * nsvg__actualHeight(p); - else if (dir == 2) - return (val/100.0f) * nsvg__actualLength(p); - } else { - return (val/100.0f); - } - } else if (units[0] == 'e' && units[1] == 'm') { - if (p != NULL) { - attr = nsvg__getAttr(p); - return val * attr->fontSize; - } - } else if (units[0] == 'e' && units[1] == 'x') { - if (p != NULL) { - attr = nsvg__getAttr(p); - return val * attr->fontSize * 0.52f; // x-height of Helvetica. - } - } - } else { - // Convert units to pixels. - if (units[0] == '\0') { - return val; - } else if (units[0] == 'p' && units[1] == 'x') { - return val; - } else if (units[0] == '%') { - return (val/100.0f); - } - } + float val = 0; + sscanf(str, "%f", &val); + if (val < 0.0f) val = 0.0f; + if (val > 1.0f) val = 1.0f; return val; } -static float nsvg__parseFloat(struct NSVGparser* p, const char* str, int dir) -{ - float val = 0; +static int nsvg__parseUnits(const char* units) +{ + if (units[0] == 'p' && units[1] == 'x') + return NSVG_UNITS_PX; + else if (units[0] == 'p' && units[1] == 't') + return NSVG_UNITS_PT; + else if (units[0] == 'p' && units[1] == 'c') + return NSVG_UNITS_PC; + else if (units[0] == 'm' && units[1] == 'm') + return NSVG_UNITS_MM; + else if (units[0] == 'c' && units[1] == 'm') + return NSVG_UNITS_CM; + else if (units[0] == 'i' && units[1] == 'n') + return NSVG_UNITS_IN; + else if (units[0] == '%') + return NSVG_UNITS_PERCENT; + else if (units[0] == 'e' && units[1] == 'm') + return NSVG_UNITS_EM; + else if (units[0] == 'e' && units[1] == 'x') + return NSVG_UNITS_EX; + return NSVG_UNITS_USER; +} + +static NSVGcoordinate nsvg__parseCoordinateRaw(const char* str) +{ + NSVGcoordinate coord = {0, NSVG_UNITS_USER}; char units[32]=""; - sscanf(str, "%f%s", &val, units); - return nsvg__convertToPixels(p, val, units, dir); + sscanf(str, "%f%s", &coord.value, units); + coord.units = nsvg__parseUnits(units); + return coord; +} + +static NSVGcoordinate nsvg__coord(float v, int units) +{ + NSVGcoordinate coord = {v, units}; + return coord; +} + +static float nsvg__parseCoordinate(NSVGparser* p, const char* str, float orig, float length) +{ + NSVGcoordinate coord = nsvg__parseCoordinateRaw(str); + return nsvg__convertToPixels(p, coord, orig, length); } static int nsvg__parseTransformArgs(const char* str, float* args, int maxNa, int* na) { const char* end; const char* ptr; - + char it[64]; + *na = 0; ptr = str; while (*ptr && *ptr != '(') ++ptr; @@ -1230,12 +1412,12 @@ static int nsvg__parseTransformArgs(const char* str, float* args, int maxNa, int while (*end && *end != ')') ++end; if (*end == 0) return 1; - + while (ptr < end) { - if (nsvg__isnum(*ptr)) { + if (*ptr == '-' || *ptr == '+' || *ptr == '.' || nsvg__isdigit(*ptr)) { if (*na >= maxNa) return 0; - args[(*na)++] = (float)atof(ptr); - while (ptr < end && nsvg__isnum(*ptr)) ++ptr; + ptr = nsvg__parseNumber(ptr, it, 64); + args[(*na)++] = (float)atof(it); } else { ++ptr; } @@ -1243,6 +1425,7 @@ static int nsvg__parseTransformArgs(const char* str, float* args, int maxNa, int return (int)(end - str); } + static int nsvg__parseMatrix(float* xform, const char* str) { float t[6]; @@ -1260,6 +1443,7 @@ static int nsvg__parseTranslate(float* xform, const char* str) int na = 0; int len = nsvg__parseTransformArgs(str, args, 2, &na); if (na == 1) args[1] = 0.0; + nsvg__xformSetTranslation(t, args[0], args[1]); memcpy(xform, t, sizeof(float)*6); return len; @@ -1312,15 +1496,15 @@ static int nsvg__parseRotate(float* xform, const char* str) if (na > 1) { nsvg__xformSetTranslation(t, -args[1], -args[2]); - nsvg__xformPremultiply(m, t); + nsvg__xformMultiply(m, t); } - + nsvg__xformSetRotation(t, args[0]/180.0f*NSVG_PI); - nsvg__xformPremultiply(m, t); + nsvg__xformMultiply(m, t); if (na > 1) { nsvg__xformSetTranslation(t, args[1], args[2]); - nsvg__xformPremultiply(m, t); + nsvg__xformMultiply(m, t); } memcpy(xform, m, sizeof(float)*6); @@ -1350,7 +1534,7 @@ static void nsvg__parseTransform(float* xform, const char* str) ++str; continue; } - + nsvg__xformPremultiply(xform, t); } } @@ -1368,21 +1552,97 @@ static void nsvg__parseUrl(char* id, const char* str) id[i] = '\0'; } -static void nsvg__parseStyle(struct NSVGparser* p, const char* str); +static char nsvg__parseLineCap(const char* str) +{ + if (strcmp(str, "butt") == 0) + return NSVG_CAP_BUTT; + else if (strcmp(str, "round") == 0) + return NSVG_CAP_ROUND; + else if (strcmp(str, "square") == 0) + return NSVG_CAP_SQUARE; + // TODO: handle inherit. + return NSVG_CAP_BUTT; +} + +static char nsvg__parseLineJoin(const char* str) +{ + if (strcmp(str, "miter") == 0) + return NSVG_JOIN_MITER; + else if (strcmp(str, "round") == 0) + return NSVG_JOIN_ROUND; + else if (strcmp(str, "bevel") == 0) + return NSVG_JOIN_BEVEL; + // TODO: handle inherit. + return NSVG_CAP_BUTT; +} + +static char nsvg__parseFillRule(const char* str) +{ + if (strcmp(str, "nonzero") == 0) + return NSVG_FILLRULE_NONZERO; + else if (strcmp(str, "evenodd") == 0) + return NSVG_FILLRULE_EVENODD; + // TODO: handle inherit. + return NSVG_FILLRULE_NONZERO; +} + +static const char* nsvg__getNextDashItem(const char* s, char* it) +{ + int n = 0; + it[0] = '\0'; + // Skip white spaces and commas + while (*s && (nsvg__isspace(*s) || *s == ',')) s++; + // Advance until whitespace, comma or end. + while (*s && (!nsvg__isspace(*s) && *s != ',')) { + if (n < 63) + it[n++] = *s; + s++; + } + it[n++] = '\0'; + return s; +} + +static int nsvg__parseStrokeDashArray(NSVGparser* p, const char* str, float* strokeDashArray) +{ + char item[64]; + int count = 0, i; + float sum = 0.0f; + + // Handle "none" + if (str[0] == 'n') + return 0; + + // Parse dashes + while (*str) { + str = nsvg__getNextDashItem(str, item); + if (!*item) break; + if (count < NSVG_MAX_DASHES) + strokeDashArray[count++] = fabsf(nsvg__parseCoordinate(p, item, 0.0f, nsvg__actualLength(p))); + } + + for (i = 0; i < count; i++) + sum += strokeDashArray[i]; + if (sum <= 1e-6f) + count = 0; + + return count; +} -static int nsvg__parseAttr(struct NSVGparser* p, const char* name, const char* value) +static void nsvg__parseStyle(NSVGparser* p, const char* str); + +static int nsvg__parseAttr(NSVGparser* p, const char* name, const char* value) { float xform[6]; - struct NSVGattrib* attr = nsvg__getAttr(p); + NSVGattrib* attr = nsvg__getAttr(p); if (!attr) return 0; - + if (strcmp(name, "style") == 0) { nsvg__parseStyle(p, value); } else if (strcmp(name, "display") == 0) { if (strcmp(value, "none") == 0) attr->visible = 0; - else - attr->visible = 1; + // Don't reset ->visible on display:inline, one display:none hides the whole subtree + } else if (strcmp(name, "fill") == 0) { if (strcmp(value, "none") == 0) { attr->hasFill = 0; @@ -1394,9 +1654,9 @@ static int nsvg__parseAttr(struct NSVGparser* p, const char* name, const char* v attr->fillColor = nsvg__parseColor(value); } } else if (strcmp(name, "opacity") == 0) { - attr->opacity = nsvg__parseFloat(p, value, 2); + attr->opacity = nsvg__parseOpacity(value); } else if (strcmp(name, "fill-opacity") == 0) { - attr->fillOpacity = nsvg__parseFloat(p, value, 2); + attr->fillOpacity = nsvg__parseOpacity(value); } else if (strcmp(name, "stroke") == 0) { if (strcmp(value, "none") == 0) { attr->hasStroke = 0; @@ -1408,80 +1668,93 @@ static int nsvg__parseAttr(struct NSVGparser* p, const char* name, const char* v attr->strokeColor = nsvg__parseColor(value); } } else if (strcmp(name, "stroke-width") == 0) { - attr->strokeWidth = nsvg__parseFloat(p, value, 2); + attr->strokeWidth = nsvg__parseCoordinate(p, value, 0.0f, nsvg__actualLength(p)); + } else if (strcmp(name, "stroke-dasharray") == 0) { + attr->strokeDashCount = nsvg__parseStrokeDashArray(p, value, attr->strokeDashArray); + } else if (strcmp(name, "stroke-dashoffset") == 0) { + attr->strokeDashOffset = nsvg__parseCoordinate(p, value, 0.0f, nsvg__actualLength(p)); } else if (strcmp(name, "stroke-opacity") == 0) { - attr->strokeOpacity = nsvg__parseFloat(NULL, value, 2); + attr->strokeOpacity = nsvg__parseOpacity(value); + } else if (strcmp(name, "stroke-linecap") == 0) { + attr->strokeLineCap = nsvg__parseLineCap(value); + } else if (strcmp(name, "stroke-linejoin") == 0) { + attr->strokeLineJoin = nsvg__parseLineJoin(value); + } else if (strcmp(name, "fill-rule") == 0) { + attr->fillRule = nsvg__parseFillRule(value); } else if (strcmp(name, "font-size") == 0) { - attr->fontSize = nsvg__parseFloat(p, value, 2); + attr->fontSize = nsvg__parseCoordinate(p, value, 0.0f, nsvg__actualLength(p)); } else if (strcmp(name, "transform") == 0) { nsvg__parseTransform(xform, value); nsvg__xformPremultiply(attr->xform, xform); } else if (strcmp(name, "stop-color") == 0) { attr->stopColor = nsvg__parseColor(value); } else if (strcmp(name, "stop-opacity") == 0) { - attr->stopOpacity = nsvg__parseFloat(NULL, value, 2); + attr->stopOpacity = nsvg__parseOpacity(value); } else if (strcmp(name, "offset") == 0) { - attr->stopOffset = nsvg__parseFloat(NULL, value, 2); + attr->stopOffset = nsvg__parseCoordinate(p, value, 0.0f, 1.0f); + } else if (strcmp(name, "id") == 0) { + strncpy(attr->id, value, 63); + attr->id[63] = '\0'; } else { return 0; } return 1; } -static int nsvg__parseNameValue(struct NSVGparser* p, const char* start, const char* end) +static int nsvg__parseNameValue(NSVGparser* p, const char* start, const char* end) { const char* str; const char* val; char name[512]; char value[512]; int n; - + str = start; while (str < end && *str != ':') ++str; - + val = str; - + // Right Trim while (str > start && (*str == ':' || nsvg__isspace(*str))) --str; ++str; - + n = (int)(str - start); if (n > 511) n = 511; if (n) memcpy(name, start, n); name[n] = 0; - + while (val < end && (*val == ':' || nsvg__isspace(*val))) ++val; - + n = (int)(end - val); if (n > 511) n = 511; if (n) memcpy(value, val, n); value[n] = 0; - + return nsvg__parseAttr(p, name, value); } -static void nsvg__parseStyle(struct NSVGparser* p, const char* str) +static void nsvg__parseStyle(NSVGparser* p, const char* str) { const char* start; const char* end; - + while (*str) { // Left Trim while(*str && nsvg__isspace(*str)) ++str; start = str; while(*str && *str != ';') ++str; end = str; - + // Right Trim while (end > start && (*end == ';' || nsvg__isspace(*end))) --end; ++end; - + nsvg__parseNameValue(p, start, end); if (*str) ++str; } } -static void nsvg__parseAttribs(struct NSVGparser* p, const char** attr) +static void nsvg__parseAttribs(NSVGparser* p, const char** attr) { int i; for (i = 0; attr[i]; i += 2) @@ -1523,7 +1796,7 @@ static int nsvg__getArgsPerElement(char cmd) return 0; } -static void nsvg__pathMoveTo(struct NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +static void nsvg__pathMoveTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel) { if (rel) { *cpx += args[0]; @@ -1535,7 +1808,7 @@ static void nsvg__pathMoveTo(struct NSVGparser* p, float* cpx, float* cpy, float nsvg__moveTo(p, *cpx, *cpy); } -static void nsvg__pathLineTo(struct NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +static void nsvg__pathLineTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel) { if (rel) { *cpx += args[0]; @@ -1547,7 +1820,7 @@ static void nsvg__pathLineTo(struct NSVGparser* p, float* cpx, float* cpy, float nsvg__lineTo(p, *cpx, *cpy); } -static void nsvg__pathHLineTo(struct NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +static void nsvg__pathHLineTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel) { if (rel) *cpx += args[0]; @@ -1556,7 +1829,7 @@ static void nsvg__pathHLineTo(struct NSVGparser* p, float* cpx, float* cpy, floa nsvg__lineTo(p, *cpx, *cpy); } -static void nsvg__pathVLineTo(struct NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +static void nsvg__pathVLineTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel) { if (rel) *cpy += args[0]; @@ -1565,13 +1838,11 @@ static void nsvg__pathVLineTo(struct NSVGparser* p, float* cpx, float* cpy, floa nsvg__lineTo(p, *cpx, *cpy); } -static void nsvg__pathCubicBezTo(struct NSVGparser* p, float* cpx, float* cpy, +static void nsvg__pathCubicBezTo(NSVGparser* p, float* cpx, float* cpy, float* cpx2, float* cpy2, float* args, int rel) { - float x1, y1, x2, y2, cx1, cy1, cx2, cy2; - - x1 = *cpx; - y1 = *cpy; + float x2, y2, cx1, cy1, cx2, cy2; + if (rel) { cx1 = *cpx + args[0]; cy1 = *cpy + args[1]; @@ -1589,18 +1860,18 @@ static void nsvg__pathCubicBezTo(struct NSVGparser* p, float* cpx, float* cpy, } nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); - + *cpx2 = cx2; *cpy2 = cy2; *cpx = x2; *cpy = y2; } -static void nsvg__pathCubicBezShortTo(struct NSVGparser* p, float* cpx, float* cpy, +static void nsvg__pathCubicBezShortTo(NSVGparser* p, float* cpx, float* cpy, float* cpx2, float* cpy2, float* args, int rel) { float x1, y1, x2, y2, cx1, cy1, cx2, cy2; - + x1 = *cpx; y1 = *cpy; if (rel) { @@ -1614,24 +1885,24 @@ static void nsvg__pathCubicBezShortTo(struct NSVGparser* p, float* cpx, float* c x2 = args[2]; y2 = args[3]; } - + cx1 = 2*x1 - *cpx2; cy1 = 2*y1 - *cpy2; - + nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); - + *cpx2 = cx2; *cpy2 = cy2; *cpx = x2; *cpy = y2; } -static void nsvg__pathQuadBezTo(struct NSVGparser* p, float* cpx, float* cpy, +static void nsvg__pathQuadBezTo(NSVGparser* p, float* cpx, float* cpy, float* cpx2, float* cpy2, float* args, int rel) { float x1, y1, x2, y2, cx, cy; float cx1, cy1, cx2, cy2; - + x1 = *cpx; y1 = *cpy; if (rel) { @@ -1646,25 +1917,26 @@ static void nsvg__pathQuadBezTo(struct NSVGparser* p, float* cpx, float* cpy, y2 = args[3]; } - // Convert to cubix bezier + // Convert to cubic bezier cx1 = x1 + 2.0f/3.0f*(cx - x1); cy1 = y1 + 2.0f/3.0f*(cy - y1); cx2 = x2 + 2.0f/3.0f*(cx - x2); cy2 = y2 + 2.0f/3.0f*(cy - y2); + nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); - + *cpx2 = cx; *cpy2 = cy; *cpx = x2; *cpy = y2; } -static void nsvg__pathQuadBezShortTo(struct NSVGparser* p, float* cpx, float* cpy, +static void nsvg__pathQuadBezShortTo(NSVGparser* p, float* cpx, float* cpy, float* cpx2, float* cpy2, float* args, int rel) { float x1, y1, x2, y2, cx, cy; float cx1, cy1, cx2, cy2; - + x1 = *cpx; y1 = *cpy; if (rel) { @@ -1683,8 +1955,9 @@ static void nsvg__pathQuadBezShortTo(struct NSVGparser* p, float* cpx, float* cp cy1 = y1 + 2.0f/3.0f*(cy - y1); cx2 = x2 + 2.0f/3.0f*(cx - x2); cy2 = y2 + 2.0f/3.0f*(cy - y2); + nsvg__cubicBezTo(p, cx1,cy1, cx2,cy2, x2,y2); - + *cpx2 = cx; *cpy2 = cy; *cpx = x2; @@ -1704,17 +1977,17 @@ static float nsvg__vecang(float ux, float uy, float vx, float vy) float r = nsvg__vecrat(ux,uy, vx,vy); if (r < -1.0f) r = -1.0f; if (r > 1.0f) r = 1.0f; - return ((ux*vy < uy*vx) ? -1.0f : 1.0f) * acosf(r); + return ((ux*vy < uy*vx) ? -1.0f : 1.0f) * acosf(r); } -static void nsvg__pathArcTo(struct NSVGparser* p, float* cpx, float* cpy, float* args, int rel) +static void nsvg__pathArcTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel) { // Ported from canvg (https://code.google.com/p/canvg/) float rx, ry, rotx; float x1, y1, x2, y2, cx, cy, dx, dy, d; float x1p, y1p, cxp, cyp, s, sa, sb; float ux, uy, vx, vy, a1, da; - float x, y, tanx, tany, a, px, py, ptanx, ptany, t[6]; + float x, y, tanx, tany, a, px = 0, py = 0, ptanx = 0, ptany = 0, t[6]; float sinrx, cosrx; int fa, fs; int i, ndivs; @@ -1749,7 +2022,7 @@ static void nsvg__pathArcTo(struct NSVGparser* p, float* cpx, float* cpy, float* sinrx = sinf(rotx); cosrx = cosf(rotx); - // Convert to center point parameterization. + // Convert to center point parameterization. // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes // 1) Compute x1', y1' x1p = cosrx * dx / 2.0f + sinrx * dy / 2.0f; @@ -1761,7 +2034,7 @@ static void nsvg__pathArcTo(struct NSVGparser* p, float* cpx, float* cpy, float* ry *= d; } // 2) Compute cx', cy' - s = 0.0f; + s = 0.0f; sa = nsvg__sqr(rx)*nsvg__sqr(ry) - nsvg__sqr(rx)*nsvg__sqr(y1p) - nsvg__sqr(ry)*nsvg__sqr(x1p); sb = nsvg__sqr(rx)*nsvg__sqr(y1p) + nsvg__sqr(ry)*nsvg__sqr(x1p); if (sa < 0.0f) sa = 0.0f; @@ -1801,7 +2074,8 @@ static void nsvg__pathArcTo(struct NSVGparser* p, float* cpx, float* cpy, float* t[4] = cx; t[5] = cy; // Split arc into max 90 degree segments. - ndivs = (int)(fabsf(da) / (NSVG_PI*0.5f) + 0.5f); + // The loop assumes an iteration per end point (including start and end), this +1. + ndivs = (int)(fabsf(da) / (NSVG_PI*0.5f) + 1.0f); hda = (da / (float)ndivs) / 2.0f; kappa = fabsf(4.0f / 3.0f * (1.0f - cosf(hda)) / sinf(hda)); if (da < 0.0f) @@ -1825,19 +2099,19 @@ static void nsvg__pathArcTo(struct NSVGparser* p, float* cpx, float* cpy, float* *cpy = y2; } -static void nsvg__parsePath(struct NSVGparser* p, const char** attr) +static void nsvg__parsePath(NSVGparser* p, const char** attr) { const char* s = NULL; - char cmd; + char cmd = '\0'; float args[10]; int nargs; - int rargs; + int rargs = 0; float cpx, cpy, cpx2, cpy2; const char* tmp[4]; char closedFlag; int i; char item[64]; - + for (i = 0; attr[i]; i += 2) { if (strcmp(attr[i], "d") == 0) { s = attr[i + 1]; @@ -1850,13 +2124,13 @@ static void nsvg__parsePath(struct NSVGparser* p, const char** attr) } } - if(s) - { + if (s) { nsvg__resetPath(p); cpx = 0; cpy = 0; + cpx2 = 0; cpy2 = 0; closedFlag = 0; nargs = 0; - + while (*s) { s = nsvg__getNextPathItem(s, item); if (!*item) break; @@ -1870,20 +2144,24 @@ static void nsvg__parsePath(struct NSVGparser* p, const char** attr) nsvg__pathMoveTo(p, &cpx, &cpy, args, cmd == 'm' ? 1 : 0); // Moveto can be followed by multiple coordinate pairs, // which should be treated as linetos. - cmd = (cmd =='m') ? 'l' : 'L'; + cmd = (cmd == 'm') ? 'l' : 'L'; rargs = nsvg__getArgsPerElement(cmd); + cpx2 = cpx; cpy2 = cpy; break; case 'l': case 'L': nsvg__pathLineTo(p, &cpx, &cpy, args, cmd == 'l' ? 1 : 0); + cpx2 = cpx; cpy2 = cpy; break; case 'H': case 'h': nsvg__pathHLineTo(p, &cpx, &cpy, args, cmd == 'h' ? 1 : 0); + cpx2 = cpx; cpy2 = cpy; break; case 'V': case 'v': nsvg__pathVLineTo(p, &cpx, &cpy, args, cmd == 'v' ? 1 : 0); + cpx2 = cpx; cpy2 = cpy; break; case 'C': case 'c': @@ -1899,16 +2177,18 @@ static void nsvg__parsePath(struct NSVGparser* p, const char** attr) break; case 'T': case 't': - nsvg__pathQuadBezShortTo(p, &cpx, &cpy, &cpx2, &cpy2, args, cmd == 's' ? 1 : 0); + nsvg__pathQuadBezShortTo(p, &cpx, &cpy, &cpx2, &cpy2, args, cmd == 't' ? 1 : 0); break; case 'A': case 'a': nsvg__pathArcTo(p, &cpx, &cpy, args, cmd == 'a' ? 1 : 0); + cpx2 = cpx; cpy2 = cpy; break; default: if (nargs >= 2) { cpx = args[nargs-2]; cpy = args[nargs-1]; + cpx2 = cpx; cpy2 = cpy; } break; } @@ -1928,10 +2208,16 @@ static void nsvg__parsePath(struct NSVGparser* p, const char** attr) } else if (cmd == 'Z' || cmd == 'z') { closedFlag = 1; // Commit path. - if (p->npts > 0) + if (p->npts > 0) { + // Move current point to first point + cpx = p->pts[0]; + cpy = p->pts[1]; + cpx2 = cpx; cpy2 = cpy; nsvg__addPath(p, closedFlag); + } // Start new subpath. nsvg__resetPath(p); + nsvg__moveTo(p, cpx, cpy); closedFlag = 0; nargs = 0; } @@ -1939,13 +2225,13 @@ static void nsvg__parsePath(struct NSVGparser* p, const char** attr) } // Commit path. if (p->npts) - nsvg__addPath(p, closedFlag); + nsvg__addPath(p, closedFlag); } nsvg__addShape(p); } -static void nsvg__parseRect(struct NSVGparser* p, const char** attr) +static void nsvg__parseRect(NSVGparser* p, const char** attr) { float x = 0.0f; float y = 0.0f; @@ -1954,15 +2240,15 @@ static void nsvg__parseRect(struct NSVGparser* p, const char** attr) float rx = -1.0f; // marks not set float ry = -1.0f; int i; - + for (i = 0; attr[i]; i += 2) { if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { - if (strcmp(attr[i], "x") == 0) x = nsvg__parseFloat(p, attr[i+1], 0); - if (strcmp(attr[i], "y") == 0) y = nsvg__parseFloat(p, attr[i+1], 1); - if (strcmp(attr[i], "width") == 0) w = nsvg__parseFloat(p, attr[i+1], 0); - if (strcmp(attr[i], "height") == 0) h = nsvg__parseFloat(p, attr[i+1], 1); - if (strcmp(attr[i], "rx") == 0) rx = fabsf(nsvg__parseFloat(p, attr[i+1], 0)); - if (strcmp(attr[i], "ry") == 0) ry = fabsf(nsvg__parseFloat(p, attr[i+1], 1)); + if (strcmp(attr[i], "x") == 0) x = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigX(p), nsvg__actualWidth(p)); + if (strcmp(attr[i], "y") == 0) y = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigY(p), nsvg__actualHeight(p)); + if (strcmp(attr[i], "width") == 0) w = nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualWidth(p)); + if (strcmp(attr[i], "height") == 0) h = nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualHeight(p)); + if (strcmp(attr[i], "rx") == 0) rx = fabsf(nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualWidth(p))); + if (strcmp(attr[i], "ry") == 0) ry = fabsf(nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualHeight(p))); } } @@ -1972,7 +2258,7 @@ static void nsvg__parseRect(struct NSVGparser* p, const char** attr) if (ry < 0.0f) ry = 0.0f; if (rx > w/2.0f) rx = w/2.0f; if (ry > h/2.0f) ry = h/2.0f; - + if (w != 0.0f && h != 0.0f) { nsvg__resetPath(p); @@ -1993,28 +2279,28 @@ static void nsvg__parseRect(struct NSVGparser* p, const char** attr) nsvg__lineTo(p, x, y+ry); nsvg__cubicBezTo(p, x, y+ry*(1-NSVG_KAPPA90), x+rx*(1-NSVG_KAPPA90), y, x+rx, y); } - + nsvg__addPath(p, 1); nsvg__addShape(p); } } -static void nsvg__parseCircle(struct NSVGparser* p, const char** attr) +static void nsvg__parseCircle(NSVGparser* p, const char** attr) { float cx = 0.0f; float cy = 0.0f; float r = 0.0f; int i; - + for (i = 0; attr[i]; i += 2) { if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { - if (strcmp(attr[i], "cx") == 0) cx = nsvg__parseFloat(p, attr[i+1], 0); - if (strcmp(attr[i], "cy") == 0) cy = nsvg__parseFloat(p, attr[i+1], 1); - if (strcmp(attr[i], "r") == 0) r = fabsf(nsvg__parseFloat(p, attr[i+1], 2)); + if (strcmp(attr[i], "cx") == 0) cx = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigX(p), nsvg__actualWidth(p)); + if (strcmp(attr[i], "cy") == 0) cy = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigY(p), nsvg__actualHeight(p)); + if (strcmp(attr[i], "r") == 0) r = fabsf(nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualLength(p))); } } - + if (r > 0.0f) { nsvg__resetPath(p); @@ -2023,30 +2309,30 @@ static void nsvg__parseCircle(struct NSVGparser* p, const char** attr) nsvg__cubicBezTo(p, cx-r*NSVG_KAPPA90, cy+r, cx-r, cy+r*NSVG_KAPPA90, cx-r, cy); nsvg__cubicBezTo(p, cx-r, cy-r*NSVG_KAPPA90, cx-r*NSVG_KAPPA90, cy-r, cx, cy-r); nsvg__cubicBezTo(p, cx+r*NSVG_KAPPA90, cy-r, cx+r, cy-r*NSVG_KAPPA90, cx+r, cy); - + nsvg__addPath(p, 1); nsvg__addShape(p); } } -static void nsvg__parseEllipse(struct NSVGparser* p, const char** attr) +static void nsvg__parseEllipse(NSVGparser* p, const char** attr) { float cx = 0.0f; float cy = 0.0f; float rx = 0.0f; float ry = 0.0f; int i; - + for (i = 0; attr[i]; i += 2) { if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { - if (strcmp(attr[i], "cx") == 0) cx = nsvg__parseFloat(p, attr[i+1], 0); - if (strcmp(attr[i], "cy") == 0) cy = nsvg__parseFloat(p, attr[i+1], 1); - if (strcmp(attr[i], "rx") == 0) rx = fabsf(nsvg__parseFloat(p, attr[i+1], 0)); - if (strcmp(attr[i], "ry") == 0) ry = fabsf(nsvg__parseFloat(p, attr[i+1], 1)); + if (strcmp(attr[i], "cx") == 0) cx = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigX(p), nsvg__actualWidth(p)); + if (strcmp(attr[i], "cy") == 0) cy = nsvg__parseCoordinate(p, attr[i+1], nsvg__actualOrigY(p), nsvg__actualHeight(p)); + if (strcmp(attr[i], "rx") == 0) rx = fabsf(nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualWidth(p))); + if (strcmp(attr[i], "ry") == 0) ry = fabsf(nsvg__parseCoordinate(p, attr[i+1], 0.0f, nsvg__actualHeight(p))); } } - + if (rx > 0.0f && ry > 0.0f) { nsvg__resetPath(p); @@ -2056,50 +2342,50 @@ static void nsvg__parseEllipse(struct NSVGparser* p, const char** attr) nsvg__cubicBezTo(p, cx-rx*NSVG_KAPPA90, cy+ry, cx-rx, cy+ry*NSVG_KAPPA90, cx-rx, cy); nsvg__cubicBezTo(p, cx-rx, cy-ry*NSVG_KAPPA90, cx-rx*NSVG_KAPPA90, cy-ry, cx, cy-ry); nsvg__cubicBezTo(p, cx+rx*NSVG_KAPPA90, cy-ry, cx+rx, cy-ry*NSVG_KAPPA90, cx+rx, cy); - + nsvg__addPath(p, 1); nsvg__addShape(p); } } -static void nsvg__parseLine(struct NSVGparser* p, const char** attr) +static void nsvg__parseLine(NSVGparser* p, const char** attr) { float x1 = 0.0; float y1 = 0.0; float x2 = 0.0; float y2 = 0.0; int i; - + for (i = 0; attr[i]; i += 2) { if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { - if (strcmp(attr[i], "x1") == 0) x1 = nsvg__parseFloat(p, attr[i + 1], 0); - if (strcmp(attr[i], "y1") == 0) y1 = nsvg__parseFloat(p, attr[i + 1], 1); - if (strcmp(attr[i], "x2") == 0) x2 = nsvg__parseFloat(p, attr[i + 1], 0); - if (strcmp(attr[i], "y2") == 0) y2 = nsvg__parseFloat(p, attr[i + 1], 1); + if (strcmp(attr[i], "x1") == 0) x1 = nsvg__parseCoordinate(p, attr[i + 1], nsvg__actualOrigX(p), nsvg__actualWidth(p)); + if (strcmp(attr[i], "y1") == 0) y1 = nsvg__parseCoordinate(p, attr[i + 1], nsvg__actualOrigY(p), nsvg__actualHeight(p)); + if (strcmp(attr[i], "x2") == 0) x2 = nsvg__parseCoordinate(p, attr[i + 1], nsvg__actualOrigX(p), nsvg__actualWidth(p)); + if (strcmp(attr[i], "y2") == 0) y2 = nsvg__parseCoordinate(p, attr[i + 1], nsvg__actualOrigY(p), nsvg__actualHeight(p)); } } - + nsvg__resetPath(p); - + nsvg__moveTo(p, x1, y1); nsvg__lineTo(p, x2, y2); - + nsvg__addPath(p, 0); nsvg__addShape(p); } -static void nsvg__parsePoly(struct NSVGparser* p, const char** attr, int closeFlag) +static void nsvg__parsePoly(NSVGparser* p, const char** attr, int closeFlag) { int i; const char* s; float args[2]; int nargs, npts = 0; char item[64]; - + nsvg__resetPath(p); - + for (i = 0; attr[i]; i += 2) { if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { if (strcmp(attr[i], "points") == 0) { @@ -2120,21 +2406,21 @@ static void nsvg__parsePoly(struct NSVGparser* p, const char** attr, int closeFl } } } - + nsvg__addPath(p, (char)closeFlag); nsvg__addShape(p); } -static void nsvg__parseSVG(struct NSVGparser* p, const char** attr) +static void nsvg__parseSVG(NSVGparser* p, const char** attr) { int i; for (i = 0; attr[i]; i += 2) { if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { if (strcmp(attr[i], "width") == 0) { - p->image->width = nsvg__parseFloat(p, attr[i + 1], 0); + p->image->width = nsvg__parseCoordinate(p, attr[i + 1], 0.0f, 1.0f); } else if (strcmp(attr[i], "height") == 0) { - p->image->height = nsvg__parseFloat(p, attr[i + 1], 1); + p->image->height = nsvg__parseCoordinate(p, attr[i + 1], 0.0f, 1.0f); } else if (strcmp(attr[i], "viewBox") == 0) { sscanf(attr[i + 1], "%f%*[%%, \t]%f%*[%%, \t]%f%*[%%, \t]%f", &p->viewMinx, &p->viewMiny, &p->viewWidth, &p->viewHeight); } else if (strcmp(attr[i], "preserveAspectRatio") == 0) { @@ -2166,19 +2452,32 @@ static void nsvg__parseSVG(struct NSVGparser* p, const char** attr) } } -static void nsvg__parseGradient(struct NSVGparser* p, const char** attr, char type) +static void nsvg__parseGradient(NSVGparser* p, const char** attr, char type) { int i; - struct NSVGgradientData* grad = (struct NSVGgradientData*)malloc(sizeof(struct NSVGgradientData)); + NSVGgradientData* grad = (NSVGgradientData*)malloc(sizeof(NSVGgradientData)); if (grad == NULL) return; - memset(grad, 0, sizeof(struct NSVGgradientData)); - + memset(grad, 0, sizeof(NSVGgradientData)); + grad->units = NSVG_OBJECT_SPACE; grad->type = type; + if (grad->type == NSVG_PAINT_LINEAR_GRADIENT) { + grad->linear.x1 = nsvg__coord(0.0f, NSVG_UNITS_PERCENT); + grad->linear.y1 = nsvg__coord(0.0f, NSVG_UNITS_PERCENT); + grad->linear.x2 = nsvg__coord(100.0f, NSVG_UNITS_PERCENT); + grad->linear.y2 = nsvg__coord(0.0f, NSVG_UNITS_PERCENT); + } else if (grad->type == NSVG_PAINT_RADIAL_GRADIENT) { + grad->radial.cx = nsvg__coord(50.0f, NSVG_UNITS_PERCENT); + grad->radial.cy = nsvg__coord(50.0f, NSVG_UNITS_PERCENT); + grad->radial.r = nsvg__coord(50.0f, NSVG_UNITS_PERCENT); + } + nsvg__xformIdentity(grad->xform); - // TODO: does not handle percent and objectBoundingBox correctly yet. for (i = 0; attr[i]; i += 2) { - if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { + if (strcmp(attr[i], "id") == 0) { + strncpy(grad->id, attr[i+1], 63); + grad->id[63] = '\0'; + } else if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { if (strcmp(attr[i], "gradientUnits") == 0) { if (strcmp(attr[i+1], "objectBoundingBox") == 0) grad->units = NSVG_OBJECT_SPACE; @@ -2187,23 +2486,23 @@ static void nsvg__parseGradient(struct NSVGparser* p, const char** attr, char ty } else if (strcmp(attr[i], "gradientTransform") == 0) { nsvg__parseTransform(grad->xform, attr[i + 1]); } else if (strcmp(attr[i], "cx") == 0) { - grad->radial.cx = nsvg__parseFloat(p, attr[i + 1], 0); + grad->radial.cx = nsvg__parseCoordinateRaw(attr[i + 1]); } else if (strcmp(attr[i], "cy") == 0) { - grad->radial.cy = nsvg__parseFloat(p, attr[i + 1], 1); + grad->radial.cy = nsvg__parseCoordinateRaw(attr[i + 1]); } else if (strcmp(attr[i], "r") == 0) { - grad->radial.r = nsvg__parseFloat(p, attr[i + 1], 2); + grad->radial.r = nsvg__parseCoordinateRaw(attr[i + 1]); } else if (strcmp(attr[i], "fx") == 0) { - grad->radial.fx = nsvg__parseFloat(p, attr[i + 1], 0); + grad->radial.fx = nsvg__parseCoordinateRaw(attr[i + 1]); } else if (strcmp(attr[i], "fy") == 0) { - grad->radial.fy = nsvg__parseFloat(p, attr[i + 1], 1); + grad->radial.fy = nsvg__parseCoordinateRaw(attr[i + 1]); } else if (strcmp(attr[i], "x1") == 0) { - grad->linear.x1 = nsvg__parseFloat(p, attr[i + 1], 0); + grad->linear.x1 = nsvg__parseCoordinateRaw(attr[i + 1]); } else if (strcmp(attr[i], "y1") == 0) { - grad->linear.y1 = nsvg__parseFloat(p, attr[i + 1], 1); + grad->linear.y1 = nsvg__parseCoordinateRaw(attr[i + 1]); } else if (strcmp(attr[i], "x2") == 0) { - grad->linear.x2 = nsvg__parseFloat(p, attr[i + 1], 0); + grad->linear.x2 = nsvg__parseCoordinateRaw(attr[i + 1]); } else if (strcmp(attr[i], "y2") == 0) { - grad->linear.y2 = nsvg__parseFloat(p, attr[i + 1], 1); + grad->linear.y2 = nsvg__parseCoordinateRaw(attr[i + 1]); } else if (strcmp(attr[i], "spreadMethod") == 0) { if (strcmp(attr[i+1], "pad") == 0) grad->spread = NSVG_SPREAD_PAD; @@ -2212,11 +2511,9 @@ static void nsvg__parseGradient(struct NSVGparser* p, const char** attr, char ty else if (strcmp(attr[i+1], "repeat") == 0) grad->spread = NSVG_SPREAD_REPEAT; } else if (strcmp(attr[i], "xlink:href") == 0) { - strncpy(grad->ref, attr[i+1], 63); - grad->ref[63] = '\0'; - } else if (strcmp(attr[i], "id") == 0) { - strncpy(grad->id, attr[i+1], 63); - grad->id[63] = '\0'; + const char *href = attr[i+1]; + strncpy(grad->ref, href+1, 62); + grad->ref[62] = '\0'; } } } @@ -2225,11 +2522,11 @@ static void nsvg__parseGradient(struct NSVGparser* p, const char** attr, char ty p->gradients = grad; } -static void nsvg__parseGradientStop(struct NSVGparser* p, const char** attr) +static void nsvg__parseGradientStop(NSVGparser* p, const char** attr) { - struct NSVGattrib* curAttr = nsvg__getAttr(p); - struct NSVGgradientData* grad; - struct NSVGgradientStop* stop; + NSVGattrib* curAttr = nsvg__getAttr(p); + NSVGgradientData* grad; + NSVGgradientStop* stop; int i, idx; curAttr->stopOffset = 0; @@ -2245,7 +2542,7 @@ static void nsvg__parseGradientStop(struct NSVGparser* p, const char** attr) if (grad == NULL) return; grad->nstops++; - grad->stops = (struct NSVGgradientStop*)realloc(grad->stops, sizeof(struct NSVGgradientStop)*grad->nstops); + grad->stops = (NSVGgradientStop*)realloc(grad->stops, sizeof(NSVGgradientStop)*grad->nstops); if (grad->stops == NULL) return; // Insert @@ -2269,8 +2566,8 @@ static void nsvg__parseGradientStop(struct NSVGparser* p, const char** attr) static void nsvg__startElement(void* ud, const char* el, const char** attr) { - struct NSVGparser* p = (struct NSVGparser*)ud; - + NSVGparser* p = (NSVGparser*)ud; + if (p->defsFlag) { // Skip everything but gradients in defs if (strcmp(el, "linearGradient") == 0) { @@ -2282,7 +2579,7 @@ static void nsvg__startElement(void* ud, const char* el, const char** attr) } return; } - + if (strcmp(el, "g") == 0) { nsvg__pushAttr(p); nsvg__parseAttribs(p, attr); @@ -2331,8 +2628,8 @@ static void nsvg__startElement(void* ud, const char* el, const char** attr) static void nsvg__endElement(void* ud, const char* el) { - struct NSVGparser* p = (struct NSVGparser*)ud; - + NSVGparser* p = (NSVGparser*)ud; + if (strcmp(el, "g") == 0) { nsvg__popAttr(p); } else if (strcmp(el, "path") == 0) { @@ -2344,13 +2641,19 @@ static void nsvg__endElement(void* ud, const char* el) static void nsvg__content(void* ud, const char* s) { + NSVG_NOTUSED(ud); + NSVG_NOTUSED(s); // empty } -static void nsvg__imageBounds(struct NSVGparser* p, float* bounds) +static void nsvg__imageBounds(NSVGparser* p, float* bounds) { - struct NSVGshape* shape; + NSVGshape* shape; shape = p->image->shapes; + if (shape == NULL) { + bounds[0] = bounds[1] = bounds[2] = bounds[3] = 0.0; + return; + } bounds[0] = shape->bounds[0]; bounds[1] = shape->bounds[1]; bounds[2] = shape->bounds[2]; @@ -2373,7 +2676,7 @@ static float nsvg__viewAlign(float content, float container, int type) return (container - content) * 0.5f; } -static void nsvg__scaleGradient(struct NSVGgradient* grad, float tx, float ty, float sx, float sy) +static void nsvg__scaleGradient(NSVGgradient* grad, float tx, float ty, float sx, float sy) { grad->xform[0] *= sx; grad->xform[1] *= sx; @@ -2383,38 +2686,44 @@ static void nsvg__scaleGradient(struct NSVGgradient* grad, float tx, float ty, f grad->xform[5] += ty*sx; } -static void nsvg__scaleToViewbox(struct NSVGparser* p, const char* units) +static void nsvg__scaleToViewbox(NSVGparser* p, const char* units) { - struct NSVGshape* shape; - struct NSVGpath* path; - float tx, ty, sx, sy, us, bounds[4], t[6]; + NSVGshape* shape; + NSVGpath* path; + float tx, ty, sx, sy, us, bounds[4], t[6], avgs; int i; float* pt; // Guess image size if not set completely. nsvg__imageBounds(p, bounds); + if (p->viewWidth == 0) { - if (p->image->width > 0) + if (p->image->width > 0) { p->viewWidth = p->image->width; - else - p->viewWidth = bounds[2]; + } else { + p->viewMinx = bounds[0]; + p->viewWidth = bounds[2] - bounds[0]; + } } if (p->viewHeight == 0) { - if (p->image->height > 0) + if (p->image->height > 0) { p->viewHeight = p->image->height; - else - p->viewHeight = bounds[3]; + } else { + p->viewMiny = bounds[1]; + p->viewHeight = bounds[3] - bounds[1]; + } } if (p->image->width == 0) p->image->width = p->viewWidth; if (p->image->height == 0) p->image->height = p->viewHeight; - tx = -p->viewMinx; + tx = -p->viewMinx; ty = -p->viewMiny; sx = p->viewWidth > 0 ? p->image->width / p->viewWidth : 0; sy = p->viewHeight > 0 ? p->image->height / p->viewHeight : 0; - us = 1.0f / nsvg__convertToPixels(p, 1.0f, units, 0); + // Unit scaling + us = 1.0f / nsvg__convertToPixels(p, nsvg__coord(1.0f, nsvg__parseUnits(units)), 0.0f, 1.0f); // Fix aspect ratio if (p->alignType == NSVG_ALIGN_MEET) { @@ -2432,6 +2741,7 @@ static void nsvg__scaleToViewbox(struct NSVGparser* p, const char* units) // Transform sx *= us; sy *= us; + avgs = (sx+sy) / 2.0f; for (shape = p->image->shapes; shape != NULL; shape = shape->next) { shape->bounds[0] = (shape->bounds[0] + tx) * sx; shape->bounds[1] = (shape->bounds[1] + ty) * sy; @@ -2460,17 +2770,18 @@ static void nsvg__scaleToViewbox(struct NSVGparser* p, const char* units) nsvg__xformInverse(shape->stroke.gradient->xform, t); } + shape->strokeWidth *= avgs; + shape->strokeDashOffset *= avgs; + for (i = 0; i < shape->strokeDashCount; i++) + shape->strokeDashArray[i] *= avgs; } - - sx *= us; - sy *= us; } -struct NSVGimage* nsvgParse(char* input, const char* units, float dpi) +NSVGimage* nsvgParse(char* input, const char* units, float dpi) { - struct NSVGparser* p; - struct NSVGimage* ret = 0; - + NSVGparser* p; + NSVGimage* ret = 0; + p = nsvg__createParser(); if (p == NULL) { return NULL; @@ -2490,12 +2801,12 @@ struct NSVGimage* nsvgParse(char* input, const char* units, float dpi) return ret; } -struct NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi) +NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi) { FILE* fp = NULL; - int size; + size_t size; char* data = NULL; - struct NSVGimage* image = NULL; + NSVGimage* image = NULL; fp = fopen(filename, "rb"); if (!fp) goto error; @@ -2504,7 +2815,7 @@ struct NSVGimage* nsvgParseFromFile(const char* filename, const char* units, flo fseek(fp, 0, SEEK_SET); data = (char*)malloc(size+1); if (data == NULL) goto error; - fread(data, size, 1, fp); + if (fread(data, 1, size, fp) != size) goto error; data[size] = '\0'; // Must be null terminated. fclose(fp); image = nsvgParse(data, units, dpi); @@ -2519,9 +2830,9 @@ struct NSVGimage* nsvgParseFromFile(const char* filename, const char* units, flo return NULL; } -void nsvgDelete(struct NSVGimage* image) +void nsvgDelete(NSVGimage* image) { - struct NSVGshape *snext, *shape; + NSVGshape *snext, *shape; if (image == NULL) return; shape = image->shapes; while (shape != NULL) { diff --git a/external/nanosvg/nanosvgrast.h b/external/nanosvg/nanosvgrast.h index 60eac66ea5..2ec6502888 100644 --- a/external/nanosvg/nanosvgrast.h +++ b/external/nanosvg/nanosvgrast.h @@ -1,14 +1,14 @@ /* * Copyright (c) 2013-14 Mikko Mononen memon@inside.org - * + * * 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 @@ -29,10 +29,11 @@ extern "C" { #endif +typedef struct NSVGrasterizer NSVGrasterizer; + /* Example Usage: // Load SVG struct SNVGImage* image = nsvgParseFromFile("test.svg."); - // Create rasterizer (can be used to render multiple images). struct NSVGrasterizer* rast = nsvgCreateRasterizer(); // Allocate memory for image @@ -42,7 +43,7 @@ extern "C" { */ // Allocated rasterizer context. -struct NSVGrasterizer* nsvgCreateRasterizer(); +NSVGrasterizer* nsvgCreateRasterizer(); // Rasterizes SVG image, returns RGBA image (non-premultiplied alpha) // r - pointer to rasterizer context @@ -53,12 +54,12 @@ struct NSVGrasterizer* nsvgCreateRasterizer(); // w - width of the image to render // h - height of the image to render // stride - number of bytes per scaleline in the destination buffer -void nsvgRasterize(struct NSVGrasterizer* r, - struct NSVGimage* image, float tx, float ty, float scale, +void nsvgRasterize(NSVGrasterizer* r, + NSVGimage* image, float tx, float ty, float scale, unsigned char* dst, int w, int h, int stride); // Deletes rasterizer context. -void nsvgDeleteRasterizer(struct NSVGrasterizer*); +void nsvgDeleteRasterizer(NSVGrasterizer*); #ifdef __cplusplus @@ -77,43 +78,62 @@ void nsvgDeleteRasterizer(struct NSVGrasterizer*); #define NSVG__FIXMASK (NSVG__FIX-1) #define NSVG__MEMPAGE_SIZE 1024 -struct NSVGedge { - float x0,y0, x1,y1; - int dir; - struct NSVGedge* next; -}; - -struct NSVGactiveEdge { +typedef struct NSVGedge { + float x0,y0, x1,y1; + int dir; + struct NSVGedge* next; +} NSVGedge; + +typedef struct NSVGpoint { + float x, y; + float dx, dy; + float len; + float dmx, dmy; + unsigned char flags; +} NSVGpoint; + +typedef struct NSVGactiveEdge { int x,dx; float ey; int dir; struct NSVGactiveEdge *next; -}; +} NSVGactiveEdge; -struct NSVGmemPage { +typedef struct NSVGmemPage { unsigned char mem[NSVG__MEMPAGE_SIZE]; int size; struct NSVGmemPage* next; -}; +} NSVGmemPage; -struct NSVGcachedPaint { +typedef struct NSVGcachedPaint { char type; char spread; float xform[6]; unsigned int colors[256]; -}; +} NSVGcachedPaint; struct NSVGrasterizer { float px, py; - struct NSVGedge* edges; + float tessTol; + float distTol; + + NSVGedge* edges; int nedges; int cedges; - struct NSVGactiveEdge* freelist; - struct NSVGmemPage* pages; - struct NSVGmemPage* curpage; + NSVGpoint* points; + int npoints; + int cpoints; + + NSVGpoint* points2; + int npoints2; + int cpoints2; + + NSVGactiveEdge* freelist; + NSVGmemPage* pages; + NSVGmemPage* curpage; unsigned char* scanline; int cscanline; @@ -122,11 +142,14 @@ struct NSVGrasterizer int width, height, stride; }; -struct NSVGrasterizer* nsvgCreateRasterizer() +NSVGrasterizer* nsvgCreateRasterizer() { - struct NSVGrasterizer* r = (struct NSVGrasterizer*)malloc(sizeof(struct NSVGrasterizer)); + NSVGrasterizer* r = (NSVGrasterizer*)malloc(sizeof(NSVGrasterizer)); if (r == NULL) goto error; - memset(r, 0, sizeof(struct NSVGrasterizer)); + memset(r, 0, sizeof(NSVGrasterizer)); + + r->tessTol = 0.25f; + r->distTol = 0.01f; return r; @@ -135,39 +158,41 @@ struct NSVGrasterizer* nsvgCreateRasterizer() return NULL; } -void nsvgDeleteRasterizer(struct NSVGrasterizer* r) +void nsvgDeleteRasterizer(NSVGrasterizer* r) { - struct NSVGmemPage* p; + NSVGmemPage* p; if (r == NULL) return; p = r->pages; while (p != NULL) { - struct NSVGmemPage* next = p->next; + NSVGmemPage* next = p->next; free(p); p = next; } if (r->edges) free(r->edges); + if (r->points) free(r->points); + if (r->points2) free(r->points2); if (r->scanline) free(r->scanline); free(r); } -static struct NSVGmemPage* nsvg__nextPage(struct NSVGrasterizer* r, struct NSVGmemPage* cur) +static NSVGmemPage* nsvg__nextPage(NSVGrasterizer* r, NSVGmemPage* cur) { - struct NSVGmemPage *newp; + NSVGmemPage *newp; // If using existing chain, return the next page in chain if (cur != NULL && cur->next != NULL) { return cur->next; } - + // Alloc new page - newp = (struct NSVGmemPage*)malloc(sizeof(struct NSVGmemPage)); + newp = (NSVGmemPage*)malloc(sizeof(NSVGmemPage)); if (newp == NULL) return NULL; - memset(newp, 0, sizeof(struct NSVGmemPage)); - + memset(newp, 0, sizeof(NSVGmemPage)); + // Add to linked list if (cur != NULL) cur->next = newp; @@ -177,9 +202,9 @@ static struct NSVGmemPage* nsvg__nextPage(struct NSVGrasterizer* r, struct NSVGm return newp; } -static void nsvg__resetPool(struct NSVGrasterizer* r) +static void nsvg__resetPool(NSVGrasterizer* r) { - struct NSVGmemPage* p = r->pages; + NSVGmemPage* p = r->pages; while (p != NULL) { p->size = 0; p = p->next; @@ -187,7 +212,7 @@ static void nsvg__resetPool(struct NSVGrasterizer* r) r->curpage = r->pages; } -static unsigned char* nsvg__alloc(struct NSVGrasterizer* r, int size) +static unsigned char* nsvg__alloc(NSVGrasterizer* r, int size) { unsigned char* buf; if (size > NSVG__MEMPAGE_SIZE) return NULL; @@ -199,9 +224,64 @@ static unsigned char* nsvg__alloc(struct NSVGrasterizer* r, int size) return buf; } -static void nsvg__addEdge(struct NSVGrasterizer* r, float x0, float y0, float x1, float y1) +static int nsvg__ptEquals(float x1, float y1, float x2, float y2, float tol) +{ + float dx = x2 - x1; + float dy = y2 - y1; + return dx*dx + dy*dy < tol*tol; +} + +static void nsvg__addPathPoint(NSVGrasterizer* r, float x, float y, int flags) +{ + NSVGpoint* pt; + + if (r->npoints > 0) { + pt = &r->points[r->npoints-1]; + if (nsvg__ptEquals(pt->x,pt->y, x,y, r->distTol)) { + pt->flags |= flags; + return; + } + } + + if (r->npoints+1 > r->cpoints) { + r->cpoints = r->cpoints > 0 ? r->cpoints * 2 : 64; + r->points = (NSVGpoint*)realloc(r->points, sizeof(NSVGpoint) * r->cpoints); + if (r->points == NULL) return; + } + + pt = &r->points[r->npoints]; + pt->x = x; + pt->y = y; + pt->flags = (unsigned char)flags; + r->npoints++; +} + +static void nsvg__appendPathPoint(NSVGrasterizer* r, NSVGpoint pt) +{ + if (r->npoints+1 > r->cpoints) { + r->cpoints = r->cpoints > 0 ? r->cpoints * 2 : 64; + r->points = (NSVGpoint*)realloc(r->points, sizeof(NSVGpoint) * r->cpoints); + if (r->points == NULL) return; + } + r->points[r->npoints] = pt; + r->npoints++; +} + +static void nsvg__duplicatePoints(NSVGrasterizer* r) +{ + if (r->npoints > r->cpoints2) { + r->cpoints2 = r->npoints; + r->points2 = (NSVGpoint*)realloc(r->points2, sizeof(NSVGpoint) * r->cpoints2); + if (r->points2 == NULL) return; + } + + memcpy(r->points2, r->points, sizeof(NSVGpoint) * r->npoints); + r->npoints2 = r->npoints; +} + +static void nsvg__addEdge(NSVGrasterizer* r, float x0, float y0, float x1, float y1) { - struct NSVGedge* e; + NSVGedge* e; // Skip horizontal edges if (y0 == y1) @@ -209,7 +289,7 @@ static void nsvg__addEdge(struct NSVGrasterizer* r, float x0, float y0, float x1 if (r->nedges+1 > r->cedges) { r->cedges = r->cedges > 0 ? r->cedges * 2 : 64; - r->edges = (struct NSVGedge*)realloc(r->edges, sizeof(struct NSVGedge) * r->cedges); + r->edges = (NSVGedge*)realloc(r->edges, sizeof(NSVGedge) * r->cedges); if (r->edges == NULL) return; } @@ -231,23 +311,28 @@ static void nsvg__addEdge(struct NSVGrasterizer* r, float x0, float y0, float x1 } } +static float nsvg__normalize(float *x, float* y) +{ + float d = sqrtf((*x)*(*x) + (*y)*(*y)); + if (d > 1e-6f) { + float id = 1.0f / d; + *x *= id; + *y *= id; + } + return d; +} + static float nsvg__absf(float x) { return x < 0 ? -x : x; } -static void nsvg__flattenCubicBez(struct NSVGrasterizer* r, +static void nsvg__flattenCubicBez(NSVGrasterizer* r, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, - float tol, int level) + int level, int type) { float x12,y12,x23,y23,x34,y34,x123,y123,x234,y234,x1234,y1234; - - if (level > 10) return; + float dx,dy,d2,d3; - if (nsvg__absf(x1+x3-x2-x2) + nsvg__absf(y1+y3-y2-y2) + nsvg__absf(x2+x4-x3-x3) + nsvg__absf(y2+y4-y3-y3) < tol) { - nsvg__addEdge(r, r->px, r->py, x4, y4); - r->px = x4; - r->py = y4; - return; - } + if (level > 10) return; x12 = (x1+x2)*0.5f; y12 = (y1+y2)*0.5f; @@ -257,38 +342,503 @@ static void nsvg__flattenCubicBez(struct NSVGrasterizer* r, y34 = (y3+y4)*0.5f; x123 = (x12+x23)*0.5f; y123 = (y12+y23)*0.5f; + + dx = x4 - x1; + dy = y4 - y1; + d2 = nsvg__absf(((x2 - x4) * dy - (y2 - y4) * dx)); + d3 = nsvg__absf(((x3 - x4) * dy - (y3 - y4) * dx)); + + if ((d2 + d3)*(d2 + d3) < r->tessTol * (dx*dx + dy*dy)) { + nsvg__addPathPoint(r, x4, y4, type); + return; + } + x234 = (x23+x34)*0.5f; y234 = (y23+y34)*0.5f; x1234 = (x123+x234)*0.5f; y1234 = (y123+y234)*0.5f; - nsvg__flattenCubicBez(r, x1,y1, x12,y12, x123,y123, x1234,y1234, tol, level+1); - nsvg__flattenCubicBez(r, x1234,y1234, x234,y234, x34,y34, x4,y4, tol, level+1); + nsvg__flattenCubicBez(r, x1,y1, x12,y12, x123,y123, x1234,y1234, level+1, 0); + nsvg__flattenCubicBez(r, x1234,y1234, x234,y234, x34,y34, x4,y4, level+1, type); } -static void nsvg__flattenShape(struct NSVGrasterizer* r, struct NSVGshape* shape, float scale) +static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float scale) { - struct NSVGpath* path; - float tol = 0.25f * 4.0f / scale; - int i; + int i, j; + NSVGpath* path; for (path = shape->paths; path != NULL; path = path->next) { + r->npoints = 0; // Flatten path - r->px = path->pts[0]; - r->py = path->pts[1]; + nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, 0); for (i = 0; i < path->npts-1; i += 3) { float* p = &path->pts[i*2]; - nsvg__flattenCubicBez(r, p[0],p[1], p[2],p[3], p[4],p[5], p[6],p[7], tol, 0); + nsvg__flattenCubicBez(r, p[0]*scale,p[1]*scale, p[2]*scale,p[3]*scale, p[4]*scale,p[5]*scale, p[6]*scale,p[7]*scale, 0, 0); } // Close path - nsvg__addEdge(r, r->px,r->py, path->pts[0],path->pts[1]); + nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, 0); + // Build edges + for (i = 0, j = r->npoints-1; i < r->npoints; j = i++) + nsvg__addEdge(r, r->points[j].x, r->points[j].y, r->points[i].x, r->points[i].y); + } +} + +enum NSVGpointFlags +{ + NSVG_PT_CORNER = 0x01, + NSVG_PT_BEVEL = 0x02, + NSVG_PT_LEFT = 0x04, +}; + +static void nsvg__initClosed(NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth) +{ + float w = lineWidth * 0.5f; + float dx = p1->x - p0->x; + float dy = p1->y - p0->y; + float len = nsvg__normalize(&dx, &dy); + float px = p0->x + dx*len*0.5f, py = p0->y + dy*len*0.5f; + float dlx = dy, dly = -dx; + float lx = px - dlx*w, ly = py - dly*w; + float rx = px + dlx*w, ry = py + dly*w; + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +static void nsvg__buttCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p, float dx, float dy, float lineWidth, int connect) +{ + float w = lineWidth * 0.5f; + float px = p->x, py = p->y; + float dlx = dy, dly = -dx; + float lx = px - dlx*w, ly = py - dly*w; + float rx = px + dlx*w, ry = py + dly*w; + + nsvg__addEdge(r, lx, ly, rx, ry); + + if (connect) { + nsvg__addEdge(r, left->x, left->y, lx, ly); + nsvg__addEdge(r, rx, ry, right->x, right->y); + } + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +static void nsvg__squareCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p, float dx, float dy, float lineWidth, int connect) +{ + float w = lineWidth * 0.5f; + float px = p->x - dx*w, py = p->y - dy*w; + float dlx = dy, dly = -dx; + float lx = px - dlx*w, ly = py - dly*w; + float rx = px + dlx*w, ry = py + dly*w; + + nsvg__addEdge(r, lx, ly, rx, ry); + + if (connect) { + nsvg__addEdge(r, left->x, left->y, lx, ly); + nsvg__addEdge(r, rx, ry, right->x, right->y); + } + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +#ifndef NSVG_PI +#define NSVG_PI (3.14159265358979323846264338327f) +#endif + +static void nsvg__roundCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p, float dx, float dy, float lineWidth, int ncap, int connect) +{ + int i; + float w = lineWidth * 0.5f; + float px = p->x, py = p->y; + float dlx = dy, dly = -dx; + float lx = 0, ly = 0, rx = 0, ry = 0, prevx = 0, prevy = 0; + + for (i = 0; i < ncap; i++) { + float a = i/(float)(ncap-1)*NSVG_PI; + float ax = cosf(a) * w, ay = sinf(a) * w; + float x = px - dlx*ax - dx*ay; + float y = py - dly*ax - dy*ay; + + if (i > 0) + nsvg__addEdge(r, prevx, prevy, x, y); + + prevx = x; + prevy = y; + + if (i == 0) { + lx = x; ly = y; + } else if (i == ncap-1) { + rx = x; ry = y; + } + } + + if (connect) { + nsvg__addEdge(r, left->x, left->y, lx, ly); + nsvg__addEdge(r, rx, ry, right->x, right->y); + } + + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +static void nsvg__bevelJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth) +{ + float w = lineWidth * 0.5f; + float dlx0 = p0->dy, dly0 = -p0->dx; + float dlx1 = p1->dy, dly1 = -p1->dx; + float lx0 = p1->x - (dlx0 * w), ly0 = p1->y - (dly0 * w); + float rx0 = p1->x + (dlx0 * w), ry0 = p1->y + (dly0 * w); + float lx1 = p1->x - (dlx1 * w), ly1 = p1->y - (dly1 * w); + float rx1 = p1->x + (dlx1 * w), ry1 = p1->y + (dly1 * w); + + nsvg__addEdge(r, lx0, ly0, left->x, left->y); + nsvg__addEdge(r, lx1, ly1, lx0, ly0); + + nsvg__addEdge(r, right->x, right->y, rx0, ry0); + nsvg__addEdge(r, rx0, ry0, rx1, ry1); + + left->x = lx1; left->y = ly1; + right->x = rx1; right->y = ry1; +} + +static void nsvg__miterJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth) +{ + float w = lineWidth * 0.5f; + float dlx0 = p0->dy, dly0 = -p0->dx; + float dlx1 = p1->dy, dly1 = -p1->dx; + float lx0, rx0, lx1, rx1; + float ly0, ry0, ly1, ry1; + + if (p1->flags & NSVG_PT_LEFT) { + lx0 = lx1 = p1->x - p1->dmx * w; + ly0 = ly1 = p1->y - p1->dmy * w; + nsvg__addEdge(r, lx1, ly1, left->x, left->y); + + rx0 = p1->x + (dlx0 * w); + ry0 = p1->y + (dly0 * w); + rx1 = p1->x + (dlx1 * w); + ry1 = p1->y + (dly1 * w); + nsvg__addEdge(r, right->x, right->y, rx0, ry0); + nsvg__addEdge(r, rx0, ry0, rx1, ry1); + } else { + lx0 = p1->x - (dlx0 * w); + ly0 = p1->y - (dly0 * w); + lx1 = p1->x - (dlx1 * w); + ly1 = p1->y - (dly1 * w); + nsvg__addEdge(r, lx0, ly0, left->x, left->y); + nsvg__addEdge(r, lx1, ly1, lx0, ly0); + + rx0 = rx1 = p1->x + p1->dmx * w; + ry0 = ry1 = p1->y + p1->dmy * w; + nsvg__addEdge(r, right->x, right->y, rx1, ry1); + } + + left->x = lx1; left->y = ly1; + right->x = rx1; right->y = ry1; +} + +static void nsvg__roundJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth, int ncap) +{ + int i, n; + float w = lineWidth * 0.5f; + float dlx0 = p0->dy, dly0 = -p0->dx; + float dlx1 = p1->dy, dly1 = -p1->dx; + float a0 = atan2f(dly0, dlx0); + float a1 = atan2f(dly1, dlx1); + float da = a1 - a0; + float lx, ly, rx, ry; + + if (da < NSVG_PI) da += NSVG_PI*2; + if (da > NSVG_PI) da -= NSVG_PI*2; + + n = (int)ceilf((nsvg__absf(da) / NSVG_PI) * ncap); + if (n < 2) n = 2; + if (n > ncap) n = ncap; + + lx = left->x; + ly = left->y; + rx = right->x; + ry = right->y; + + for (i = 0; i < n; i++) { + float u = i/(float)(n-1); + float a = a0 + u*da; + float ax = cosf(a) * w, ay = sinf(a) * w; + float lx1 = p1->x - ax, ly1 = p1->y - ay; + float rx1 = p1->x + ax, ry1 = p1->y + ay; + + nsvg__addEdge(r, lx1, ly1, lx, ly); + nsvg__addEdge(r, rx, ry, rx1, ry1); + + lx = lx1; ly = ly1; + rx = rx1; ry = ry1; + } + + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +static void nsvg__straightJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, NSVGpoint* p1, float lineWidth) +{ + float w = lineWidth * 0.5f; + float lx = p1->x - (p1->dmx * w), ly = p1->y - (p1->dmy * w); + float rx = p1->x + (p1->dmx * w), ry = p1->y + (p1->dmy * w); + + nsvg__addEdge(r, lx, ly, left->x, left->y); + nsvg__addEdge(r, right->x, right->y, rx, ry); + + left->x = lx; left->y = ly; + right->x = rx; right->y = ry; +} + +static int nsvg__curveDivs(float r, float arc, float tol) +{ + float da = acosf(r / (r + tol)) * 2.0f; + int divs = (int)ceilf(arc / da); + if (divs < 2) divs = 2; + return divs; +} + +static void nsvg__expandStroke(NSVGrasterizer* r, NSVGpoint* points, int npoints, int closed, int lineJoin, int lineCap, float lineWidth) +{ + int ncap = nsvg__curveDivs(lineWidth*0.5f, NSVG_PI, r->tessTol); // Calculate divisions per half circle. + NSVGpoint left = {0,0,0,0,0,0,0,0}, right = {0,0,0,0,0,0,0,0}, firstLeft = {0,0,0,0,0,0,0,0}, firstRight = {0,0,0,0,0,0,0,0}; + NSVGpoint* p0, *p1; + int j, s, e; + + // Build stroke edges + if (closed) { + // Looping + p0 = &points[npoints-1]; + p1 = &points[0]; + s = 0; + e = npoints; + } else { + // Add cap + p0 = &points[0]; + p1 = &points[1]; + s = 1; + e = npoints-1; + } + + if (closed) { + nsvg__initClosed(&left, &right, p0, p1, lineWidth); + firstLeft = left; + firstRight = right; + } else { + // Add cap + float dx = p1->x - p0->x; + float dy = p1->y - p0->y; + nsvg__normalize(&dx, &dy); + if (lineCap == NSVG_CAP_BUTT) + nsvg__buttCap(r, &left, &right, p0, dx, dy, lineWidth, 0); + else if (lineCap == NSVG_CAP_SQUARE) + nsvg__squareCap(r, &left, &right, p0, dx, dy, lineWidth, 0); + else if (lineCap == NSVG_CAP_ROUND) + nsvg__roundCap(r, &left, &right, p0, dx, dy, lineWidth, ncap, 0); + } + + for (j = s; j < e; ++j) { + if (p1->flags & NSVG_PT_CORNER) { + if (lineJoin == NSVG_JOIN_ROUND) + nsvg__roundJoin(r, &left, &right, p0, p1, lineWidth, ncap); + else if (lineJoin == NSVG_JOIN_BEVEL || (p1->flags & NSVG_PT_BEVEL)) + nsvg__bevelJoin(r, &left, &right, p0, p1, lineWidth); + else + nsvg__miterJoin(r, &left, &right, p0, p1, lineWidth); + } else { + nsvg__straightJoin(r, &left, &right, p1, lineWidth); + } + p0 = p1++; + } + + if (closed) { + // Loop it + nsvg__addEdge(r, firstLeft.x, firstLeft.y, left.x, left.y); + nsvg__addEdge(r, right.x, right.y, firstRight.x, firstRight.y); + } else { + // Add cap + float dx = p1->x - p0->x; + float dy = p1->y - p0->y; + nsvg__normalize(&dx, &dy); + if (lineCap == NSVG_CAP_BUTT) + nsvg__buttCap(r, &right, &left, p1, -dx, -dy, lineWidth, 1); + else if (lineCap == NSVG_CAP_SQUARE) + nsvg__squareCap(r, &right, &left, p1, -dx, -dy, lineWidth, 1); + else if (lineCap == NSVG_CAP_ROUND) + nsvg__roundCap(r, &right, &left, p1, -dx, -dy, lineWidth, ncap, 1); + } +} + +static void nsvg__prepareStroke(NSVGrasterizer* r, float miterLimit, int lineJoin) +{ + int i, j; + NSVGpoint* p0, *p1; + + p0 = &r->points[r->npoints-1]; + p1 = &r->points[0]; + for (i = 0; i < r->npoints; i++) { + // Calculate segment direction and length + p0->dx = p1->x - p0->x; + p0->dy = p1->y - p0->y; + p0->len = nsvg__normalize(&p0->dx, &p0->dy); + // Advance + p0 = p1++; + } + + // calculate joins + p0 = &r->points[r->npoints-1]; + p1 = &r->points[0]; + for (j = 0; j < r->npoints; j++) { + float dlx0, dly0, dlx1, dly1, dmr2, cross; + dlx0 = p0->dy; + dly0 = -p0->dx; + dlx1 = p1->dy; + dly1 = -p1->dx; + // Calculate extrusions + p1->dmx = (dlx0 + dlx1) * 0.5f; + p1->dmy = (dly0 + dly1) * 0.5f; + dmr2 = p1->dmx*p1->dmx + p1->dmy*p1->dmy; + if (dmr2 > 0.000001f) { + float s2 = 1.0f / dmr2; + if (s2 > 600.0f) { + s2 = 600.0f; + } + p1->dmx *= s2; + p1->dmy *= s2; + } + + // Clear flags, but keep the corner. + p1->flags = (p1->flags & NSVG_PT_CORNER) ? NSVG_PT_CORNER : 0; + + // Keep track of left turns. + cross = p1->dx * p0->dy - p0->dx * p1->dy; + if (cross > 0.0f) + p1->flags |= NSVG_PT_LEFT; + + // Check to see if the corner needs to be beveled. + if (p1->flags & NSVG_PT_CORNER) { + if ((dmr2 * miterLimit*miterLimit) < 1.0f || lineJoin == NSVG_JOIN_BEVEL || lineJoin == NSVG_JOIN_ROUND) { + p1->flags |= NSVG_PT_BEVEL; + } + } + + p0 = p1++; + } +} + +static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float scale) +{ + int i, j, closed; + NSVGpath* path; + NSVGpoint* p0, *p1; + float miterLimit = 4; + int lineJoin = shape->strokeLineJoin; + int lineCap = shape->strokeLineCap; + float lineWidth = shape->strokeWidth * scale; + + for (path = shape->paths; path != NULL; path = path->next) { + // Flatten path + r->npoints = 0; + nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, NSVG_PT_CORNER); + for (i = 0; i < path->npts-1; i += 3) { + float* p = &path->pts[i*2]; + nsvg__flattenCubicBez(r, p[0]*scale,p[1]*scale, p[2]*scale,p[3]*scale, p[4]*scale,p[5]*scale, p[6]*scale,p[7]*scale, 0, NSVG_PT_CORNER); + } + if (r->npoints < 2) + continue; + + closed = path->closed; + + // If the first and last points are the same, remove the last, mark as closed path. + p0 = &r->points[r->npoints-1]; + p1 = &r->points[0]; + if (nsvg__ptEquals(p0->x,p0->y, p1->x,p1->y, r->distTol)) { + r->npoints--; + p0 = &r->points[r->npoints-1]; + closed = 1; + } + + if (shape->strokeDashCount > 0) { + int idash = 0, dashState = 1; + float totalDist = 0, dashLen, allDashLen, dashOffset; + NSVGpoint cur; + + if (closed) + nsvg__appendPathPoint(r, r->points[0]); + + // Duplicate points -> points2. + nsvg__duplicatePoints(r); + + r->npoints = 0; + cur = r->points2[0]; + nsvg__appendPathPoint(r, cur); + + // Figure out dash offset. + allDashLen = 0; + for (j = 0; j < shape->strokeDashCount; j++) + allDashLen += shape->strokeDashArray[j]; + if (shape->strokeDashCount & 1) + allDashLen *= 2.0f; + // Find location inside pattern + dashOffset = fmodf(shape->strokeDashOffset, allDashLen); + if (dashOffset < 0.0f) + dashOffset += allDashLen; + + while (dashOffset > shape->strokeDashArray[idash]) { + dashOffset -= shape->strokeDashArray[idash]; + idash = (idash + 1) % shape->strokeDashCount; + } + dashLen = (shape->strokeDashArray[idash] - dashOffset) * scale; + + for (j = 1; j < r->npoints2; ) { + float dx = r->points2[j].x - cur.x; + float dy = r->points2[j].y - cur.y; + float dist = sqrtf(dx*dx + dy*dy); + + if ((totalDist + dist) > dashLen) { + // Calculate intermediate point + float d = (dashLen - totalDist) / dist; + float x = cur.x + dx * d; + float y = cur.y + dy * d; + nsvg__addPathPoint(r, x, y, NSVG_PT_CORNER); + + // Stroke + if (r->npoints > 1 && dashState) { + nsvg__prepareStroke(r, miterLimit, lineJoin); + nsvg__expandStroke(r, r->points, r->npoints, 0, lineJoin, lineCap, lineWidth); + } + // Advance dash pattern + dashState = !dashState; + idash = (idash+1) % shape->strokeDashCount; + dashLen = shape->strokeDashArray[idash] * scale; + // Restart + cur.x = x; + cur.y = y; + cur.flags = NSVG_PT_CORNER; + totalDist = 0.0f; + r->npoints = 0; + nsvg__appendPathPoint(r, cur); + } else { + totalDist += dist; + cur = r->points2[j]; + nsvg__appendPathPoint(r, cur); + j++; + } + } + // Stroke any leftover path + if (r->npoints > 1 && dashState) + nsvg__expandStroke(r, r->points, r->npoints, 0, lineJoin, lineCap, lineWidth); + } else { + nsvg__prepareStroke(r, miterLimit, lineJoin); + nsvg__expandStroke(r, r->points, r->npoints, closed, lineJoin, lineCap, lineWidth); + } } } static int nsvg__cmpEdge(const void *p, const void *q) { - struct NSVGedge* a = (struct NSVGedge*)p; - struct NSVGedge* b = (struct NSVGedge*)q; + NSVGedge* a = (NSVGedge*)p; + NSVGedge* b = (NSVGedge*)q; if (a->y0 < b->y0) return -1; if (a->y0 > b->y0) return 1; @@ -296,9 +846,9 @@ static int nsvg__cmpEdge(const void *p, const void *q) } -static struct NSVGactiveEdge* nsvg__addActive(struct NSVGrasterizer* r, struct NSVGedge* e, float startPoint) +static NSVGactiveEdge* nsvg__addActive(NSVGrasterizer* r, NSVGedge* e, float startPoint) { - struct NSVGactiveEdge* z; + NSVGactiveEdge* z; if (r->freelist != NULL) { // Restore from freelist. @@ -306,7 +856,7 @@ static struct NSVGactiveEdge* nsvg__addActive(struct NSVGrasterizer* r, struct N r->freelist = z->next; } else { // Alloc new edge. - z = (struct NSVGactiveEdge*)nsvg__alloc(r, sizeof(struct NSVGactiveEdge)); + z = (NSVGactiveEdge*)nsvg__alloc(r, sizeof(NSVGactiveEdge)); if (z == NULL) return NULL; } @@ -314,10 +864,10 @@ static struct NSVGactiveEdge* nsvg__addActive(struct NSVGrasterizer* r, struct N // STBTT_assert(e->y0 <= start_point); // round dx down to avoid going too far if (dxdy < 0) - z->dx = -floorf(NSVG__FIX * -dxdy); + z->dx = (int)(-floorf(NSVG__FIX * -dxdy)); else - z->dx = floorf(NSVG__FIX * dxdy); - z->x = floorf(NSVG__FIX * (e->x0 + dxdy * (startPoint - e->y0))); + z->dx = (int)floorf(NSVG__FIX * dxdy); + z->x = (int)floorf(NSVG__FIX * (e->x0 + dxdy * (startPoint - e->y0))); // z->x -= off_x * FIX; z->ey = e->y1; z->next = 0; @@ -326,54 +876,73 @@ static struct NSVGactiveEdge* nsvg__addActive(struct NSVGrasterizer* r, struct N return z; } -static void nsvg__freeActive(struct NSVGrasterizer* r, struct NSVGactiveEdge* z) +static void nsvg__freeActive(NSVGrasterizer* r, NSVGactiveEdge* z) { z->next = r->freelist; r->freelist = z; } +static void nsvg__fillScanline(unsigned char* scanline, int len, int x0, int x1, int maxWeight, int* xmin, int* xmax) +{ + int i = x0 >> NSVG__FIXSHIFT; + int j = x1 >> NSVG__FIXSHIFT; + if (i < *xmin) *xmin = i; + if (j > *xmax) *xmax = j; + if (i < len && j >= 0) { + if (i == j) { + // x0,x1 are the same pixel, so compute combined coverage + scanline[i] += (unsigned char)((x1 - x0) * maxWeight >> NSVG__FIXSHIFT); + } else { + if (i >= 0) // add antialiasing for x0 + scanline[i] += (unsigned char)(((NSVG__FIX - (x0 & NSVG__FIXMASK)) * maxWeight) >> NSVG__FIXSHIFT); + else + i = -1; // clip + + if (j < len) // add antialiasing for x1 + scanline[j] += (unsigned char)(((x1 & NSVG__FIXMASK) * maxWeight) >> NSVG__FIXSHIFT); + else + j = len; // clip + + for (++i; i < j; ++i) // fill pixels between x0 and x1 + scanline[i] += (unsigned char)maxWeight; + } + } +} + // note: this routine clips fills that extend off the edges... ideally this // wouldn't happen, but it could happen if the truetype glyph bounding boxes // are wrong, or if the user supplies a too-small bitmap -static void nsvg__fillActiveEdges(unsigned char* scanline, int len, struct NSVGactiveEdge* e, int maxWeight, int* xmin, int* xmax) +static void nsvg__fillActiveEdges(unsigned char* scanline, int len, NSVGactiveEdge* e, int maxWeight, int* xmin, int* xmax, char fillRule) { // non-zero winding fill int x0 = 0, w = 0; - while (e != NULL) { - if (w == 0) { - // if we're currently at zero, we need to record the edge start point - x0 = e->x; w += e->dir; - } else { - int x1 = e->x; w += e->dir; - // if we went to zero, we need to draw + if (fillRule == NSVG_FILLRULE_NONZERO) { + // Non-zero + while (e != NULL) { if (w == 0) { - int i = x0 >> NSVG__FIXSHIFT; - int j = x1 >> NSVG__FIXSHIFT; - if (i < *xmin) *xmin = i; - if (j > *xmax) *xmax = j; - if (i < len && j >= 0) { - if (i == j) { - // x0,x1 are the same pixel, so compute combined coverage - scanline[i] += (unsigned char)((x1 - x0) * maxWeight >> NSVG__FIXSHIFT); - } else { - if (i >= 0) // add antialiasing for x0 - scanline[i] += (unsigned char)(((NSVG__FIX - (x0 & NSVG__FIXMASK)) * maxWeight) >> NSVG__FIXSHIFT); - else - i = -1; // clip - - if (j < len) // add antialiasing for x1 - scanline[j] += (unsigned char)(((x1 & NSVG__FIXMASK) * maxWeight) >> NSVG__FIXSHIFT); - else - j = len; // clip - - for (++i; i < j; ++i) // fill pixels between x0 and x1 - scanline[i] += (unsigned char)maxWeight; - } - } + // if we're currently at zero, we need to record the edge start point + x0 = e->x; w += e->dir; + } else { + int x1 = e->x; w += e->dir; + // if we went to zero, we need to draw + if (w == 0) + nsvg__fillScanline(scanline, len, x0, x1, maxWeight, xmin, xmax); } + e = e->next; + } + } else if (fillRule == NSVG_FILLRULE_EVENODD) { + // Even-odd + while (e != NULL) { + if (w == 0) { + // if we're currently at zero, we need to record the edge start point + x0 = e->x; w = 1; + } else { + int x1 = e->x; w = 0; + nsvg__fillScanline(scanline, len, x0, x1, maxWeight, xmin, xmax); + } + e = e->next; } - e = e->next; } } @@ -386,26 +955,31 @@ static unsigned int nsvg__RGBA(unsigned char r, unsigned char g, unsigned char b static unsigned int nsvg__lerpRGBA(unsigned int c0, unsigned int c1, float u) { - int iu = (float)(nsvg__clampf(u, 0.0f, 1.0f) * 256.0f); + int iu = (int)(nsvg__clampf(u, 0.0f, 1.0f) * 256.0f); int r = (((c0) & 0xff)*(256-iu) + (((c1) & 0xff)*iu)) >> 8; int g = (((c0>>8) & 0xff)*(256-iu) + (((c1>>8) & 0xff)*iu)) >> 8; int b = (((c0>>16) & 0xff)*(256-iu) + (((c1>>16) & 0xff)*iu)) >> 8; int a = (((c0>>24) & 0xff)*(256-iu) + (((c1>>24) & 0xff)*iu)) >> 8; - return nsvg__RGBA(r,g,b,a); + return nsvg__RGBA((unsigned char)r, (unsigned char)g, (unsigned char)b, (unsigned char)a); } static unsigned int nsvg__applyOpacity(unsigned int c, float u) { - int iu = (float)(nsvg__clampf(u, 0.0f, 1.0f) * 256.0f); + int iu = (int)(nsvg__clampf(u, 0.0f, 1.0f) * 256.0f); int r = (c) & 0xff; int g = (c>>8) & 0xff; int b = (c>>16) & 0xff; int a = (((c>>24) & 0xff)*iu) >> 8; - return nsvg__RGBA(r,g,b,a); + return nsvg__RGBA((unsigned char)r, (unsigned char)g, (unsigned char)b, (unsigned char)a); +} + +static inline int nsvg__div255(int x) +{ + return ((x+1) * 257) >> 16; } static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* cover, int x, int y, - float tx, float ty, float scale, struct NSVGcachedPaint* cache) + float tx, float ty, float scale, NSVGcachedPaint* cache) { if (cache->type == NSVG_PAINT_COLOR) { @@ -417,18 +991,18 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co for (i = 0; i < count; i++) { int r,g,b; - int a = ((int)cover[0] * ca) >> 8; + int a = nsvg__div255((int)cover[0] * ca); int ia = 255 - a; // Premultiply - r = (cr * a) >> 8; - g = (cg * a) >> 8; - b = (cb * a) >> 8; + r = nsvg__div255(cr * a); + g = nsvg__div255(cg * a); + b = nsvg__div255(cb * a); // Blend over - r += ((ia * (int)dst[0]) >> 8); - g += ((ia * (int)dst[1]) >> 8); - b += ((ia * (int)dst[2]) >> 8); - a += ((ia * (int)dst[3]) >> 8); + r += nsvg__div255(ia * (int)dst[0]); + g += nsvg__div255(ia * (int)dst[1]); + b += nsvg__div255(ia * (int)dst[2]); + a += nsvg__div255(ia * (int)dst[3]); dst[0] = (unsigned char)r; dst[1] = (unsigned char)g; @@ -459,19 +1033,19 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co cb = (c >> 16) & 0xff; ca = (c >> 24) & 0xff; - a = ((int)cover[0] * ca) >> 8; + a = nsvg__div255((int)cover[0] * ca); ia = 255 - a; // Premultiply - r = (cr * a) >> 8; - g = (cg * a) >> 8; - b = (cb * a) >> 8; + r = nsvg__div255(cr * a); + g = nsvg__div255(cg * a); + b = nsvg__div255(cb * a); // Blend over - r += ((ia * (int)dst[0]) >> 8); - g += ((ia * (int)dst[1]) >> 8); - b += ((ia * (int)dst[2]) >> 8); - a += ((ia * (int)dst[3]) >> 8); + r += nsvg__div255(ia * (int)dst[0]); + g += nsvg__div255(ia * (int)dst[1]); + b += nsvg__div255(ia * (int)dst[2]); + a += nsvg__div255(ia * (int)dst[3]); dst[0] = (unsigned char)r; dst[1] = (unsigned char)g; @@ -506,19 +1080,19 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co cb = (c >> 16) & 0xff; ca = (c >> 24) & 0xff; - a = ((int)cover[0] * ca) >> 8; + a = nsvg__div255((int)cover[0] * ca); ia = 255 - a; // Premultiply - r = (cr * a) >> 8; - g = (cg * a) >> 8; - b = (cb * a) >> 8; + r = nsvg__div255(cr * a); + g = nsvg__div255(cg * a); + b = nsvg__div255(cb * a); // Blend over - r += ((ia * (int)dst[0]) >> 8); - g += ((ia * (int)dst[1]) >> 8); - b += ((ia * (int)dst[2]) >> 8); - a += ((ia * (int)dst[3]) >> 8); + r += nsvg__div255(ia * (int)dst[0]); + g += nsvg__div255(ia * (int)dst[1]); + b += nsvg__div255(ia * (int)dst[2]); + a += nsvg__div255(ia * (int)dst[3]); dst[0] = (unsigned char)r; dst[1] = (unsigned char)g; @@ -532,9 +1106,9 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co } } -static void nsvg__rasterizeSortedEdges(struct NSVGrasterizer *r, float tx, float ty, float scale, struct NSVGcachedPaint* cache) +static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, float scale, NSVGcachedPaint* cache, char fillRule) { - struct NSVGactiveEdge *active = NULL; + NSVGactiveEdge *active = NULL; int y, s; int e = 0; int maxWeight = (255 / NSVG__SUBSAMPLES); // weight per vertical scanline @@ -547,12 +1121,12 @@ static void nsvg__rasterizeSortedEdges(struct NSVGrasterizer *r, float tx, float for (s = 0; s < NSVG__SUBSAMPLES; ++s) { // find center of pixel for this scanline float scany = y*NSVG__SUBSAMPLES + s + 0.5f; - struct NSVGactiveEdge **step = &active; + NSVGactiveEdge **step = &active; // update all active edges; // remove all active edges that terminate before the center of this scanline while (*step) { - struct NSVGactiveEdge *z = *step; + NSVGactiveEdge *z = *step; if (z->ey <= scany) { *step = z->next; // delete from list // NSVG__assert(z->valid); @@ -569,8 +1143,8 @@ static void nsvg__rasterizeSortedEdges(struct NSVGrasterizer *r, float tx, float step = &active; while (*step && (*step)->next) { if ((*step)->x > (*step)->next->x) { - struct NSVGactiveEdge* t = *step; - struct NSVGactiveEdge* q = t->next; + NSVGactiveEdge* t = *step; + NSVGactiveEdge* q = t->next; t->next = q->next; q->next = t; *step = q; @@ -584,7 +1158,7 @@ static void nsvg__rasterizeSortedEdges(struct NSVGrasterizer *r, float tx, float // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline while (e < r->nedges && r->edges[e].y0 <= scany) { if (r->edges[e].y1 > scany) { - struct NSVGactiveEdge* z = nsvg__addActive(r, &r->edges[e], scany); + NSVGactiveEdge* z = nsvg__addActive(r, &r->edges[e], scany); if (z == NULL) break; // find insertion point if (active == NULL) { @@ -595,7 +1169,7 @@ static void nsvg__rasterizeSortedEdges(struct NSVGrasterizer *r, float tx, float active = z; } else { // find thing to insert AFTER - struct NSVGactiveEdge* p = active; + NSVGactiveEdge* p = active; while (p->next && p->next->x < z->x) p = p->next; // at this point, p->next->x is NOT < z->x @@ -608,13 +1182,13 @@ static void nsvg__rasterizeSortedEdges(struct NSVGrasterizer *r, float tx, float // now process all active edges in non-zero fashion if (active != NULL) - nsvg__fillActiveEdges(r->scanline, r->width, active, maxWeight, &xmin, &xmax); + nsvg__fillActiveEdges(r->scanline, r->width, active, maxWeight, &xmin, &xmax, fillRule); } // Blit if (xmin < 0) xmin = 0; if (xmax > r->width-1) xmax = r->width-1; if (xmin <= xmax) { - nsvg__scanlineSolid(&r->bitmap[y * r->stride] + xmin*4, xmax-xmin+1, &r->scanline[xmin], xmin, y, tx,ty,scale,cache); + nsvg__scanlineSolid(&r->bitmap[y * r->stride] + xmin*4, xmax-xmin+1, &r->scanline[xmin], xmin, y, tx,ty, scale, cache); } } @@ -630,9 +1204,9 @@ static void nsvg__unpremultiplyAlpha(unsigned char* image, int w, int h, int str for (x = 0; x < w; x++) { int r = row[0], g = row[1], b = row[2], a = row[3]; if (a != 0) { - row[0] = (int)(r*255/a); - row[1] = (int)(g*255/a); - row[2] = (int)(b*255/a); + row[0] = (unsigned char)(r*255/a); + row[1] = (unsigned char)(g*255/a); + row[2] = (unsigned char)(b*255/a); } row += 4; } @@ -669,9 +1243,9 @@ static void nsvg__unpremultiplyAlpha(unsigned char* image, int w, int h, int str n++; } if (n > 0) { - row[0] = r/n; - row[1] = g/n; - row[2] = b/n; + row[0] = (unsigned char)(r/n); + row[1] = (unsigned char)(g/n); + row[2] = (unsigned char)(b/n); } } row += 4; @@ -680,10 +1254,10 @@ static void nsvg__unpremultiplyAlpha(unsigned char* image, int w, int h, int str } -static void nsvg__initPaint(struct NSVGcachedPaint* cache, struct NSVGpaint* paint, float opacity) +static void nsvg__initPaint(NSVGcachedPaint* cache, NSVGpaint* paint, float opacity) { int i, j; - struct NSVGgradient* grad; + NSVGgradient* grad; cache->type = paint->type; @@ -704,15 +1278,15 @@ static void nsvg__initPaint(struct NSVGcachedPaint* cache, struct NSVGpaint* pai for (i = 0; i < 256; i++) cache->colors[i] = nsvg__applyOpacity(grad->stops[i].color, opacity); } else { - unsigned int ca, cb; + unsigned int ca, cb = 0; float ua, ub, du, u; int ia, ib, count; ca = nsvg__applyOpacity(grad->stops[0].color, opacity); ua = nsvg__clampf(grad->stops[0].offset, 0, 1); ub = nsvg__clampf(grad->stops[grad->nstops-1].offset, ua, 1); - ia = ua * 255.0f; - ib = ub * 255.0f; + ia = (int)(ua * 255.0f); + ib = (int)(ub * 255.0f); for (i = 0; i < ia; i++) { cache->colors[i] = ca; } @@ -722,8 +1296,8 @@ static void nsvg__initPaint(struct NSVGcachedPaint* cache, struct NSVGpaint* pai cb = nsvg__applyOpacity(grad->stops[i+1].color, opacity); ua = nsvg__clampf(grad->stops[i].offset, 0, 1); ub = nsvg__clampf(grad->stops[i+1].offset, 0, 1); - ia = ua * 255.0f; - ib = ub * 255.0f; + ia = (int)(ua * 255.0f); + ib = (int)(ub * 255.0f); count = ib - ia; if (count <= 0) continue; u = 0; @@ -740,15 +1314,52 @@ static void nsvg__initPaint(struct NSVGcachedPaint* cache, struct NSVGpaint* pai } -void nsvgRasterize(struct NSVGrasterizer* r, - struct NSVGimage* image, float tx, float ty, float scale, +/* +static void dumpEdges(NSVGrasterizer* r, const char* name) +{ + float xmin = 0, xmax = 0, ymin = 0, ymax = 0; + NSVGedge *e = NULL; + int i; + if (r->nedges == 0) return; + FILE* fp = fopen(name, "w"); + if (fp == NULL) return; + xmin = xmax = r->edges[0].x0; + ymin = ymax = r->edges[0].y0; + for (i = 0; i < r->nedges; i++) { + e = &r->edges[i]; + xmin = nsvg__minf(xmin, e->x0); + xmin = nsvg__minf(xmin, e->x1); + xmax = nsvg__maxf(xmax, e->x0); + xmax = nsvg__maxf(xmax, e->x1); + ymin = nsvg__minf(ymin, e->y0); + ymin = nsvg__minf(ymin, e->y1); + ymax = nsvg__maxf(ymax, e->y0); + ymax = nsvg__maxf(ymax, e->y1); + } + fprintf(fp, "", xmin, ymin, (xmax - xmin), (ymax - ymin)); + for (i = 0; i < r->nedges; i++) { + e = &r->edges[i]; + fprintf(fp ,"", e->x0,e->y0, e->x1,e->y1); + } + for (i = 0; i < r->npoints; i++) { + if (i+1 < r->npoints) + fprintf(fp ,"", r->points[i].x, r->points[i].y, r->points[i+1].x, r->points[i+1].y); + fprintf(fp ,"", r->points[i].x, r->points[i].y, r->points[i].flags == 0 ? "#f00" : "#0f0"); + } + fprintf(fp, ""); + fclose(fp); +} +*/ + +void nsvgRasterize(NSVGrasterizer* r, + NSVGimage* image, float tx, float ty, float scale, unsigned char* dst, int w, int h, int stride) { - struct NSVGshape *shape = NULL; - struct NSVGedge *e = NULL; - struct NSVGcachedPaint cache; + NSVGshape *shape = NULL; + NSVGedge *e = NULL; + NSVGcachedPaint cache; int i; - + r->bitmap = dst; r->width = w; r->height = h; @@ -764,32 +1375,59 @@ void nsvgRasterize(struct NSVGrasterizer* r, memset(&dst[i*stride], 0, w*4); for (shape = image->shapes; shape != NULL; shape = shape->next) { - - if (shape->fill.type == NSVG_PAINT_NONE) + if (!(shape->flags & NSVG_FLAGS_VISIBLE)) continue; - nsvg__resetPool(r); - r->freelist = NULL; - r->nedges = 0; + if (shape->fill.type != NSVG_PAINT_NONE) { + nsvg__resetPool(r); + r->freelist = NULL; + r->nedges = 0; + + nsvg__flattenShape(r, shape, scale); - nsvg__flattenShape(r, shape, scale); + // Scale and translate edges + for (i = 0; i < r->nedges; i++) { + e = &r->edges[i]; + e->x0 = tx + e->x0; + e->y0 = (ty + e->y0) * NSVG__SUBSAMPLES; + e->x1 = tx + e->x1; + e->y1 = (ty + e->y1) * NSVG__SUBSAMPLES; + } - // Scale and translate edges - for (i = 0; i < r->nedges; i++) { - e = &r->edges[i]; - e->x0 = tx + e->x0 * scale; - e->y0 = (ty + e->y0 * scale) * NSVG__SUBSAMPLES; - e->x1 = tx + e->x1 * scale; - e->y1 = (ty + e->y1 * scale) * NSVG__SUBSAMPLES; + // Rasterize edges + qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); + + // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule + nsvg__initPaint(&cache, &shape->fill, shape->opacity); + + nsvg__rasterizeSortedEdges(r, tx,ty,scale, &cache, shape->fillRule); } + if (shape->stroke.type != NSVG_PAINT_NONE && (shape->strokeWidth * scale) > 0.01f) { + nsvg__resetPool(r); + r->freelist = NULL; + r->nedges = 0; + + nsvg__flattenShapeStroke(r, shape, scale); + +// dumpEdges(r, "edge.svg"); + + // Scale and translate edges + for (i = 0; i < r->nedges; i++) { + e = &r->edges[i]; + e->x0 = tx + e->x0; + e->y0 = (ty + e->y0) * NSVG__SUBSAMPLES; + e->x1 = tx + e->x1; + e->y1 = (ty + e->y1) * NSVG__SUBSAMPLES; + } - // Rasterize edges - qsort(r->edges, r->nedges, sizeof(struct NSVGedge), nsvg__cmpEdge); + // Rasterize edges + qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); - // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule - nsvg__initPaint(&cache, &shape->fill, shape->opacity); - - nsvg__rasterizeSortedEdges(r, tx,ty,scale, &cache); + // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule + nsvg__initPaint(&cache, &shape->stroke, shape->opacity); + + nsvg__rasterizeSortedEdges(r, tx,ty,scale, &cache, NSVG_FILLRULE_NONZERO); + } } nsvg__unpremultiplyAlpha(dst, w, h, stride); From 23d96b6a5667c6db1c1876b99841161f8478729a Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Wed, 20 Apr 2016 23:22:10 +0100 Subject: [PATCH 020/603] allow emulationstation.sh to be called from any location (gets basename from $0) --- emulationstation.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/emulationstation.sh b/emulationstation.sh index cc48aed670..227078f06d 100755 --- a/emulationstation.sh +++ b/emulationstation.sh @@ -1,8 +1,9 @@ #!/bin/sh +esdir="$(dirname $0)" while true; do rm -f /tmp/es-restart /tmp/es-sysrestart /tmp/es-shutdown - ./emulationstation "$@" + "$esdir/emulationstation" "$@" [ -f /tmp/es-restart ] && continue if [ -f /tmp/es-sysrestart ]; then rm -f /tmp/es-sysrestart From 004243bb764132655a22fa538d0b85c233103364 Mon Sep 17 00:00:00 2001 From: HerbFargus Date: Thu, 23 Jun 2016 19:47:41 -0600 Subject: [PATCH 021/603] add black splash --- data/converted/splash_svg.cpp | 3386 +++++++++++++++++---------------- data/resources/splash.svg | 220 +-- es-core/src/Window.cpp | 2 +- 3 files changed, 1809 insertions(+), 1799 deletions(-) diff --git a/data/converted/splash_svg.cpp b/data/converted/splash_svg.cpp index e2e3391b59..4a7c8c4fdd 100644 --- a/data/converted/splash_svg.cpp +++ b/data/converted/splash_svg.cpp @@ -2,63 +2,66 @@ #include "../Resources.h" -const size_t splash_svg_size = 17764; -const unsigned char splash_svg_data[17764] = { +const size_t splash_svg_size = 19024; +const unsigned char splash_svg_data[19024] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, + 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x30,0x2c, + 0x6f,0x72,0x20,0x31,0x33,0x2e,0x30,0x2e,0x30,0x2c, 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, + 0x42,0x75,0x69,0x6c,0x64,0x20,0x31,0x34,0x39,0x34, + 0x38,0x29,0x20,0x20,0x2d,0x2d,0x3e,0x0a,0x3c,0x21, + 0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76, + 0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22, + 0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54, + 0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f, + 0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70, + 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, + 0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69, + 0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31, + 0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31, + 0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73,0x76, + 0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d, + 0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e, + 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32, - 0x38,0x30,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x37,0x32,0x30,0x70,0x78,0x22, - 0x20,0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22, - 0x30,0x20,0x30,0x20,0x31,0x32,0x38,0x30,0x20,0x37, - 0x32,0x30,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x31,0x32,0x38,0x30,0x20,0x37,0x32,0x30,0x22, - 0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65, - 0x3d,0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65, - 0x22,0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30,0x30, - 0x31,0x32,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33, - 0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x34,0x32,0x2e, - 0x30,0x39,0x37,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32, - 0x39,0x2c,0x34,0x34,0x32,0x2e,0x30,0x39,0x37,0x4c, - 0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x34, - 0x32,0x2e,0x30,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a, + 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, + 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, + 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, + 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, + 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, + 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, + 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x20, + 0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32,0x38, + 0x30,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67,0x68, + 0x74,0x3d,0x22,0x37,0x32,0x30,0x70,0x78,0x22,0x20, + 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, + 0x20,0x30,0x20,0x31,0x32,0x38,0x30,0x20,0x37,0x32, + 0x30,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d, + 0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64, + 0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20, + 0x31,0x32,0x38,0x30,0x20,0x37,0x32,0x30,0x22,0x20, + 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, + 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, + 0x3e,0x0a,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x4c, + 0x61,0x79,0x65,0x72,0x5f,0x32,0x22,0x3e,0x0a,0x3c, + 0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x69,0x64,0x3d, + 0x22,0x45,0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e, + 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31, + 0x32,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31, + 0x2e,0x35,0x32,0x39,0x2c,0x34,0x34,0x32,0x2e,0x30, + 0x39,0x37,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, + 0x2c,0x34,0x34,0x32,0x2e,0x30,0x39,0x37,0x4c,0x34, + 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x34,0x32, + 0x2e,0x30,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09, 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, 0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22, 0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35, @@ -66,78 +69,103 @@ const unsigned char splash_svg_data[17764] = { 0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x33, 0x35,0x39,0x2e,0x32,0x31,0x36,0x4c,0x34,0x33,0x31, 0x2e,0x35,0x32,0x39,0x2c,0x33,0x35,0x39,0x2e,0x32, - 0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x43,0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c, - 0x32,0x37,0x36,0x2e,0x33,0x30,0x36,0x4c,0x34,0x33, - 0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x37,0x36,0x2e, - 0x33,0x30,0x36,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32, - 0x39,0x2c,0x32,0x37,0x36,0x2e,0x33,0x30,0x36,0x7a, - 0x22,0x2f,0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30, - 0x30,0x31,0x32,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34, - 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x33,0x31,0x37, - 0x2e,0x37,0x35,0x33,0x4c,0x34,0x33,0x31,0x2e,0x35, - 0x32,0x39,0x2c,0x33,0x31,0x37,0x2e,0x37,0x35,0x33, - 0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x33, - 0x31,0x37,0x2e,0x37,0x35,0x33,0x7a,0x22,0x2f,0x3e, - 0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31,0x32, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e, - 0x35,0x32,0x39,0x2c,0x34,0x38,0x33,0x2e,0x35,0x34, - 0x34,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c, - 0x34,0x38,0x33,0x2e,0x35,0x34,0x34,0x4c,0x34,0x33, - 0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x38,0x33,0x2e, - 0x35,0x34,0x34,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x70, + 0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70, 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, 0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x64, 0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, + 0x2c,0x32,0x37,0x36,0x2e,0x33,0x30,0x36,0x4c,0x34, + 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x37,0x36, + 0x2e,0x33,0x30,0x36,0x4c,0x34,0x33,0x31,0x2e,0x35, + 0x32,0x39,0x2c,0x32,0x37,0x36,0x2e,0x33,0x30,0x36, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43, + 0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x33, + 0x31,0x37,0x2e,0x37,0x35,0x33,0x4c,0x34,0x33,0x31, + 0x2e,0x35,0x32,0x39,0x2c,0x33,0x31,0x37,0x2e,0x37, + 0x35,0x33,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, + 0x2c,0x33,0x31,0x37,0x2e,0x37,0x35,0x33,0x7a,0x22, + 0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30, + 0x30,0x31,0x32,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34, + 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x38,0x33, + 0x2e,0x35,0x34,0x34,0x4c,0x34,0x33,0x31,0x2e,0x35, + 0x32,0x39,0x2c,0x34,0x38,0x33,0x2e,0x35,0x34,0x34, + 0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34, + 0x38,0x33,0x2e,0x35,0x34,0x34,0x7a,0x22,0x2f,0x3e, + 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31, + 0x32,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31, + 0x2e,0x35,0x32,0x39,0x2c,0x34,0x30,0x30,0x2e,0x36, + 0x34,0x32,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, 0x2c,0x34,0x30,0x30,0x2e,0x36,0x34,0x32,0x4c,0x34, 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x30,0x30, - 0x2e,0x36,0x34,0x32,0x4c,0x34,0x33,0x31,0x2e,0x35, - 0x32,0x39,0x2c,0x34,0x30,0x30,0x2e,0x36,0x34,0x32, - 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39, - 0x30,0x30,0x31,0x32,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x33, - 0x34,0x2e,0x38,0x34,0x32,0x4c,0x34,0x33,0x31,0x2e, - 0x35,0x32,0x39,0x2c,0x32,0x33,0x34,0x2e,0x38,0x34, - 0x32,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c, - 0x32,0x33,0x34,0x2e,0x38,0x34,0x32,0x7a,0x22,0x2f, - 0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x30,0x30,0x34,0x45,0x37, - 0x33,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31, - 0x2e,0x35,0x32,0x39,0x2c,0x32,0x34,0x35,0x2e,0x39, - 0x35,0x31,0x63,0x30,0x2d,0x36,0x2e,0x31,0x31,0x2d, - 0x34,0x2e,0x39,0x39,0x39,0x2d,0x31,0x31,0x2e,0x31, - 0x30,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x35,0x2d, - 0x31,0x31,0x2e,0x31,0x30,0x38,0x48,0x36,0x39,0x2e, - 0x35,0x36,0x33,0x63,0x2d,0x36,0x2e,0x31,0x31,0x32, - 0x2c,0x30,0x2d,0x31,0x34,0x2e,0x36,0x34,0x34,0x2c, - 0x33,0x2e,0x35,0x33,0x34,0x2d,0x31,0x38,0x2e,0x39, - 0x36,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35,0x0a,0x09, - 0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34,0x35,0x2c,0x32, - 0x35,0x2e,0x37,0x34,0x35,0x43,0x32,0x30,0x2e,0x35, - 0x33,0x33,0x2c,0x32,0x37,0x32,0x2e,0x37,0x36,0x34, - 0x2c,0x31,0x37,0x2c,0x32,0x38,0x31,0x2e,0x32,0x39, - 0x36,0x2c,0x31,0x37,0x2c,0x32,0x38,0x37,0x2e,0x34, - 0x30,0x36,0x76,0x32,0x32,0x36,0x2e,0x34,0x36,0x38, - 0x63,0x30,0x2c,0x36,0x2e,0x31,0x31,0x31,0x2c,0x34, - 0x2e,0x39,0x39,0x39,0x2c,0x31,0x31,0x2e,0x31,0x30, - 0x39,0x2c,0x31,0x31,0x2e,0x31,0x30,0x36,0x2c,0x31, - 0x31,0x2e,0x31,0x30,0x39,0x68,0x33,0x35,0x30,0x2e, - 0x38,0x36,0x0a,0x09,0x63,0x36,0x2e,0x31,0x30,0x37, - 0x2c,0x30,0x2c,0x31,0x34,0x2e,0x36,0x34,0x33,0x2d, - 0x33,0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e,0x39, - 0x36,0x33,0x2d,0x37,0x2e,0x38,0x35,0x34,0x6c,0x32, - 0x35,0x2e,0x37,0x34,0x31,0x2d,0x32,0x35,0x2e,0x37, - 0x33,0x36,0x63,0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e, - 0x33,0x31,0x37,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d, - 0x31,0x32,0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e,0x38, - 0x35,0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x35,0x4c, - 0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x34, - 0x35,0x2e,0x39,0x35,0x31,0x7a,0x22,0x2f,0x3e,0x0a, + 0x2e,0x36,0x34,0x32,0x7a,0x22,0x2f,0x3e,0x0a,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35, + 0x32,0x39,0x2c,0x32,0x33,0x34,0x2e,0x38,0x34,0x32, + 0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32, + 0x33,0x34,0x2e,0x38,0x34,0x32,0x4c,0x34,0x33,0x31, + 0x2e,0x35,0x32,0x39,0x2c,0x32,0x33,0x34,0x2e,0x38, + 0x34,0x32,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x6c, + 0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69, + 0x65,0x6e,0x74,0x20,0x69,0x64,0x3d,0x22,0x53,0x56, + 0x47,0x49,0x44,0x5f,0x31,0x5f,0x22,0x20,0x67,0x72, + 0x61,0x64,0x69,0x65,0x6e,0x74,0x55,0x6e,0x69,0x74, + 0x73,0x3d,0x22,0x75,0x73,0x65,0x72,0x53,0x70,0x61, + 0x63,0x65,0x4f,0x6e,0x55,0x73,0x65,0x22,0x20,0x78, + 0x31,0x3d,0x22,0x31,0x31,0x38,0x2e,0x33,0x31,0x32, + 0x35,0x22,0x20,0x79,0x31,0x3d,0x22,0x35,0x34,0x32, + 0x2e,0x33,0x32,0x32,0x33,0x22,0x20,0x78,0x32,0x3d, + 0x22,0x33,0x32,0x33,0x2e,0x38,0x30,0x31,0x38,0x22, + 0x20,0x79,0x32,0x3d,0x22,0x32,0x32,0x37,0x2e,0x33, + 0x33,0x38,0x34,0x22,0x3e,0x0a,0x09,0x09,0x3c,0x73, + 0x74,0x6f,0x70,0x20,0x6f,0x66,0x66,0x73,0x65,0x74, + 0x3d,0x22,0x30,0x22,0x20,0x73,0x74,0x79,0x6c,0x65, + 0x3d,0x22,0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c, + 0x6f,0x72,0x3a,0x23,0x30,0x30,0x34,0x45,0x37,0x33, + 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x73,0x74,0x6f, + 0x70,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3d,0x22, + 0x31,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22, + 0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72, + 0x3a,0x23,0x30,0x30,0x41,0x31,0x42,0x30,0x22,0x2f, + 0x3e,0x0a,0x09,0x3c,0x2f,0x6c,0x69,0x6e,0x65,0x61, + 0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x3e, + 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x75,0x72,0x6c,0x28,0x23,0x53, + 0x56,0x47,0x49,0x44,0x5f,0x31,0x5f,0x29,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35,0x32, + 0x39,0x2c,0x32,0x34,0x35,0x2e,0x39,0x35,0x31,0x63, + 0x30,0x2d,0x36,0x2e,0x31,0x31,0x2d,0x34,0x2e,0x39, + 0x39,0x39,0x2d,0x31,0x31,0x2e,0x31,0x30,0x38,0x2d, + 0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x31,0x31,0x2e, + 0x31,0x30,0x38,0x48,0x36,0x39,0x2e,0x35,0x36,0x33, + 0x63,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2d, + 0x31,0x34,0x2e,0x36,0x34,0x34,0x2c,0x33,0x2e,0x35, + 0x33,0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c, + 0x37,0x2e,0x38,0x35,0x35,0x20,0x20,0x20,0x6c,0x2d, + 0x32,0x35,0x2e,0x37,0x34,0x35,0x2c,0x32,0x35,0x2e, + 0x37,0x34,0x35,0x43,0x32,0x30,0x2e,0x35,0x33,0x33, + 0x2c,0x32,0x37,0x32,0x2e,0x37,0x36,0x34,0x2c,0x31, + 0x37,0x2c,0x32,0x38,0x31,0x2e,0x32,0x39,0x36,0x2c, + 0x31,0x37,0x2c,0x32,0x38,0x37,0x2e,0x34,0x30,0x36, + 0x76,0x32,0x32,0x36,0x2e,0x34,0x36,0x38,0x63,0x30, + 0x2c,0x36,0x2e,0x31,0x31,0x31,0x2c,0x34,0x2e,0x39, + 0x39,0x39,0x2c,0x31,0x31,0x2e,0x31,0x30,0x39,0x2c, + 0x31,0x31,0x2e,0x31,0x30,0x36,0x2c,0x31,0x31,0x2e, + 0x31,0x30,0x39,0x68,0x33,0x35,0x30,0x2e,0x38,0x36, + 0x20,0x20,0x20,0x63,0x36,0x2e,0x31,0x30,0x37,0x2c, + 0x30,0x2c,0x31,0x34,0x2e,0x36,0x34,0x34,0x2d,0x33, + 0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e,0x39,0x36, + 0x33,0x2d,0x37,0x2e,0x38,0x35,0x34,0x6c,0x32,0x35, + 0x2e,0x37,0x34,0x31,0x2d,0x32,0x35,0x2e,0x37,0x33, + 0x36,0x63,0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e,0x33, + 0x31,0x36,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31, + 0x32,0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35, + 0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x35,0x4c,0x34, + 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x34,0x35, + 0x2e,0x39,0x35,0x31,0x7a,0x22,0x2f,0x3e,0x0a,0x09, 0x3c,0x70,0x61,0x74,0x68,0x20,0x6f,0x70,0x61,0x63, 0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x32,0x22,0x20, 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, @@ -145,623 +173,687 @@ const unsigned char splash_svg_data[17764] = { 0x65,0x77,0x20,0x20,0x20,0x20,0x22,0x20,0x64,0x3d, 0x22,0x4d,0x33,0x38,0x32,0x2e,0x32,0x32,0x2c,0x33, 0x39,0x32,0x2e,0x37,0x38,0x39,0x6c,0x2d,0x32,0x35, - 0x2e,0x37,0x33,0x2d,0x32,0x35,0x2e,0x37,0x32,0x39, - 0x63,0x2d,0x34,0x2e,0x33,0x31,0x39,0x2d,0x34,0x2e, - 0x33,0x31,0x38,0x2d,0x31,0x32,0x2e,0x38,0x35,0x34, - 0x2d,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x38,0x2e, - 0x39,0x36,0x33,0x2d,0x37,0x2e,0x38,0x35,0x32,0x48, - 0x33,0x31,0x38,0x2e,0x32,0x38,0x0a,0x09,0x63,0x2d, - 0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2e,0x30,0x30, - 0x31,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c,0x30,0x2e, + 0x2e,0x37,0x32,0x39,0x2d,0x32,0x35,0x2e,0x37,0x32, + 0x39,0x63,0x2d,0x34,0x2e,0x33,0x31,0x39,0x2d,0x34, + 0x2e,0x33,0x31,0x38,0x2d,0x31,0x32,0x2e,0x38,0x35, + 0x34,0x2d,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x38, + 0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e,0x38,0x35,0x33, + 0x48,0x33,0x31,0x38,0x2e,0x32,0x38,0x20,0x20,0x20, + 0x63,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2e, 0x30,0x30,0x31,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c, - 0x30,0x2e,0x30,0x30,0x31,0x73,0x33,0x2e,0x35,0x33, - 0x32,0x2d,0x33,0x2e,0x35,0x33,0x34,0x2c,0x37,0x2e, - 0x38,0x35,0x34,0x2d,0x37,0x2e,0x38,0x35,0x35,0x6c, - 0x36,0x37,0x2e,0x31,0x39,0x37,0x2d,0x36,0x37,0x2e, - 0x31,0x39,0x33,0x63,0x34,0x2e,0x33,0x32,0x2d,0x34, - 0x2e,0x33,0x32,0x31,0x2c,0x32,0x2e,0x38,0x35,0x34, - 0x2d,0x37,0x2e,0x38,0x35,0x35,0x2d,0x33,0x2e,0x32, - 0x35,0x33,0x2d,0x37,0x2e,0x38,0x35,0x35,0x48,0x32, - 0x37,0x36,0x2e,0x38,0x33,0x32,0x0a,0x09,0x63,0x2d, - 0x36,0x2e,0x31,0x31,0x31,0x2c,0x30,0x2d,0x31,0x34, - 0x2e,0x36,0x34,0x33,0x2c,0x33,0x2e,0x35,0x33,0x34, - 0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e, - 0x38,0x35,0x35,0x4c,0x32,0x35,0x2e,0x31,0x34,0x32, - 0x2c,0x35,0x31,0x36,0x2e,0x38,0x36,0x63,0x2d,0x31, - 0x2e,0x38,0x32,0x35,0x2c,0x31,0x2e,0x38,0x32,0x32, - 0x2d,0x33,0x2e,0x35,0x31,0x37,0x2c,0x33,0x2e,0x35, - 0x31,0x34,0x2d,0x34,0x2e,0x38,0x37,0x31,0x2c,0x34, - 0x2e,0x38,0x36,0x37,0x63,0x32,0x2e,0x30,0x31,0x32, - 0x2c,0x32,0x2e,0x30,0x31,0x2c,0x34,0x2e,0x37,0x38, - 0x36,0x2c,0x33,0x2e,0x32,0x35,0x38,0x2c,0x37,0x2e, - 0x38,0x33,0x36,0x2c,0x33,0x2e,0x32,0x35,0x38,0x0a, - 0x09,0x63,0x30,0x2e,0x30,0x30,0x35,0x2c,0x30,0x2c, - 0x30,0x2e,0x30,0x31,0x2c,0x30,0x2c,0x30,0x2e,0x30, - 0x31,0x36,0x2c,0x30,0x68,0x39,0x39,0x2e,0x39,0x35, - 0x33,0x68,0x31,0x36,0x37,0x2e,0x39,0x38,0x38,0x63, - 0x36,0x2e,0x31,0x31,0x31,0x2c,0x30,0x2c,0x31,0x31, - 0x2e,0x31,0x32,0x32,0x2d,0x30,0x2e,0x30,0x31,0x32, - 0x2c,0x31,0x31,0x2e,0x31,0x33,0x33,0x2d,0x30,0x2e, - 0x30,0x32,0x33,0x63,0x30,0x2e,0x30,0x31,0x35,0x2d, - 0x30,0x2e,0x30,0x31,0x36,0x2c,0x33,0x2e,0x35,0x35, - 0x39,0x2d,0x33,0x2e,0x35,0x36,0x32,0x2c,0x37,0x2e, - 0x38,0x38,0x2d,0x37,0x2e,0x38,0x38,0x6c,0x36,0x37, - 0x2e,0x31,0x34,0x34,0x2d,0x36,0x37,0x2e,0x31,0x33, - 0x32,0x0a,0x09,0x63,0x34,0x2e,0x33,0x32,0x2d,0x34, - 0x2e,0x33,0x31,0x36,0x2c,0x37,0x2e,0x38,0x35,0x33, - 0x2d,0x31,0x32,0x2e,0x38,0x35,0x32,0x2c,0x37,0x2e, - 0x38,0x35,0x33,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33, - 0x76,0x2d,0x31,0x39,0x2e,0x32,0x33,0x35,0x43,0x33, - 0x39,0x30,0x2e,0x30,0x37,0x33,0x2c,0x34,0x30,0x35, - 0x2e,0x36,0x34,0x2c,0x33,0x38,0x36,0x2e,0x35,0x34, - 0x2c,0x33,0x39,0x37,0x2e,0x31,0x30,0x34,0x2c,0x33, - 0x38,0x32,0x2e,0x32,0x32,0x2c,0x33,0x39,0x32,0x2e, - 0x37,0x38,0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x37,0x36,0x2e,0x38,0x32,0x34, - 0x2c,0x34,0x30,0x30,0x2e,0x36,0x34,0x39,0x63,0x2d, - 0x36,0x2e,0x31,0x30,0x38,0x2c,0x30,0x2d,0x31,0x34, - 0x2e,0x36,0x34,0x33,0x2d,0x33,0x2e,0x35,0x33,0x36, - 0x2d,0x31,0x38,0x2e,0x39,0x36,0x2d,0x37,0x2e,0x38, - 0x35,0x37,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x31,0x2d, - 0x32,0x35,0x2e,0x37,0x31,0x38,0x63,0x2d,0x34,0x2e, - 0x33,0x32,0x31,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2d, - 0x37,0x2e,0x38,0x35,0x37,0x2d,0x31,0x32,0x2e,0x38, - 0x35,0x35,0x2d,0x37,0x2e,0x38,0x36,0x35,0x2d,0x31, - 0x38,0x2e,0x39,0x36,0x36,0x0a,0x09,0x6c,0x2d,0x30, - 0x2e,0x30,0x31,0x32,0x2d,0x31,0x39,0x2e,0x32,0x34, - 0x36,0x63,0x2d,0x30,0x2e,0x30,0x30,0x38,0x2d,0x36, - 0x2e,0x31,0x31,0x2c,0x33,0x2e,0x35,0x32,0x35,0x2d, - 0x31,0x34,0x2e,0x36,0x34,0x33,0x2c,0x37,0x2e,0x38, - 0x34,0x36,0x2d,0x31,0x38,0x2e,0x39,0x36,0x34,0x6c, - 0x32,0x35,0x2e,0x37,0x34,0x31,0x2d,0x32,0x35,0x2e, - 0x37,0x33,0x37,0x63,0x34,0x2e,0x33,0x32,0x31,0x2d, + 0x30,0x2e,0x30,0x30,0x31,0x2d,0x31,0x31,0x2e,0x31, + 0x31,0x2c,0x30,0x2e,0x30,0x30,0x31,0x73,0x33,0x2e, + 0x35,0x33,0x32,0x2d,0x33,0x2e,0x35,0x33,0x34,0x2c, + 0x37,0x2e,0x38,0x35,0x34,0x2d,0x37,0x2e,0x38,0x35, + 0x35,0x6c,0x36,0x37,0x2e,0x31,0x39,0x36,0x2d,0x36, + 0x37,0x2e,0x31,0x39,0x33,0x63,0x34,0x2e,0x33,0x32, + 0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x32,0x2e,0x38, + 0x35,0x34,0x2d,0x37,0x2e,0x38,0x35,0x35,0x2d,0x33, + 0x2e,0x32,0x35,0x33,0x2d,0x37,0x2e,0x38,0x35,0x35, + 0x48,0x32,0x37,0x36,0x2e,0x38,0x33,0x32,0x20,0x20, + 0x20,0x63,0x2d,0x36,0x2e,0x31,0x31,0x31,0x2c,0x30, + 0x2d,0x31,0x34,0x2e,0x36,0x34,0x33,0x2c,0x33,0x2e, + 0x35,0x33,0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33, + 0x2c,0x37,0x2e,0x38,0x35,0x35,0x4c,0x32,0x35,0x2e, + 0x31,0x34,0x32,0x2c,0x35,0x31,0x36,0x2e,0x38,0x36, + 0x63,0x2d,0x31,0x2e,0x38,0x32,0x35,0x2c,0x31,0x2e, + 0x38,0x32,0x31,0x2d,0x33,0x2e,0x35,0x31,0x37,0x2c, + 0x33,0x2e,0x35,0x31,0x34,0x2d,0x34,0x2e,0x38,0x37, + 0x31,0x2c,0x34,0x2e,0x38,0x36,0x36,0x63,0x32,0x2e, + 0x30,0x31,0x32,0x2c,0x32,0x2e,0x30,0x31,0x31,0x2c, + 0x34,0x2e,0x37,0x38,0x36,0x2c,0x33,0x2e,0x32,0x35, + 0x39,0x2c,0x37,0x2e,0x38,0x33,0x36,0x2c,0x33,0x2e, + 0x32,0x35,0x39,0x20,0x20,0x20,0x63,0x30,0x2e,0x30, + 0x30,0x35,0x2c,0x30,0x2c,0x30,0x2e,0x30,0x31,0x2c, + 0x30,0x2c,0x30,0x2e,0x30,0x31,0x36,0x2c,0x30,0x68, + 0x39,0x39,0x2e,0x39,0x35,0x33,0x68,0x31,0x36,0x37, + 0x2e,0x39,0x38,0x38,0x63,0x36,0x2e,0x31,0x31,0x31, + 0x2c,0x30,0x2c,0x31,0x31,0x2e,0x31,0x32,0x32,0x2d, + 0x30,0x2e,0x30,0x31,0x33,0x2c,0x31,0x31,0x2e,0x31, + 0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x33,0x63,0x30, + 0x2e,0x30,0x31,0x35,0x2d,0x30,0x2e,0x30,0x31,0x36, + 0x2c,0x33,0x2e,0x35,0x35,0x39,0x2d,0x33,0x2e,0x35, + 0x36,0x32,0x2c,0x37,0x2e,0x38,0x38,0x2d,0x37,0x2e, + 0x38,0x38,0x6c,0x36,0x37,0x2e,0x31,0x34,0x34,0x2d, + 0x36,0x37,0x2e,0x31,0x33,0x32,0x20,0x20,0x20,0x63, + 0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e,0x33,0x31,0x36, + 0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x32,0x2e, + 0x38,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d, + 0x31,0x38,0x2e,0x39,0x36,0x33,0x76,0x2d,0x31,0x39, + 0x2e,0x32,0x33,0x35,0x43,0x33,0x39,0x30,0x2e,0x30, + 0x37,0x33,0x2c,0x34,0x30,0x35,0x2e,0x36,0x34,0x2c, + 0x33,0x38,0x36,0x2e,0x35,0x34,0x2c,0x33,0x39,0x37, + 0x2e,0x31,0x30,0x34,0x2c,0x33,0x38,0x32,0x2e,0x32, + 0x32,0x2c,0x33,0x39,0x32,0x2e,0x37,0x38,0x39,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x6e,0x65, + 0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74, + 0x20,0x69,0x64,0x3d,0x22,0x53,0x56,0x47,0x49,0x44, + 0x5f,0x32,0x5f,0x22,0x20,0x67,0x72,0x61,0x64,0x69, + 0x65,0x6e,0x74,0x55,0x6e,0x69,0x74,0x73,0x3d,0x22, + 0x75,0x73,0x65,0x72,0x53,0x70,0x61,0x63,0x65,0x4f, + 0x6e,0x55,0x73,0x65,0x22,0x20,0x78,0x31,0x3d,0x22, + 0x31,0x34,0x34,0x2e,0x38,0x31,0x33,0x22,0x20,0x79, + 0x31,0x3d,0x22,0x35,0x34,0x30,0x2e,0x33,0x37,0x33, + 0x22,0x20,0x78,0x32,0x3d,0x22,0x33,0x39,0x39,0x2e, + 0x38,0x30,0x30,0x33,0x22,0x20,0x79,0x32,0x3d,0x22, + 0x32,0x38,0x38,0x2e,0x33,0x38,0x35,0x37,0x22,0x3e, + 0x0a,0x09,0x09,0x3c,0x73,0x74,0x6f,0x70,0x20,0x6f, + 0x66,0x66,0x73,0x65,0x74,0x3d,0x22,0x30,0x2e,0x33, + 0x30,0x37,0x37,0x22,0x20,0x73,0x74,0x79,0x6c,0x65, + 0x3d,0x22,0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c, + 0x6f,0x72,0x3a,0x23,0x44,0x33,0x44,0x33,0x44,0x33, + 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x73,0x74,0x6f, + 0x70,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3d,0x22, + 0x30,0x2e,0x36,0x37,0x35,0x32,0x22,0x20,0x73,0x74, + 0x79,0x6c,0x65,0x3d,0x22,0x73,0x74,0x6f,0x70,0x2d, + 0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, + 0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64, + 0x69,0x65,0x6e,0x74,0x3e,0x0a,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x75, + 0x72,0x6c,0x28,0x23,0x53,0x56,0x47,0x49,0x44,0x5f, + 0x32,0x5f,0x29,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, + 0x37,0x36,0x2e,0x38,0x32,0x34,0x2c,0x34,0x30,0x30, + 0x2e,0x36,0x34,0x39,0x63,0x2d,0x36,0x2e,0x31,0x30, + 0x38,0x2c,0x30,0x2d,0x31,0x34,0x2e,0x36,0x34,0x33, + 0x2d,0x33,0x2e,0x35,0x33,0x36,0x2d,0x31,0x38,0x2e, + 0x39,0x36,0x2d,0x37,0x2e,0x38,0x35,0x37,0x6c,0x2d, + 0x32,0x35,0x2e,0x37,0x31,0x2d,0x32,0x35,0x2e,0x37, + 0x31,0x38,0x20,0x20,0x20,0x63,0x2d,0x34,0x2e,0x33, + 0x32,0x31,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2d,0x37, + 0x2e,0x38,0x35,0x37,0x2d,0x31,0x32,0x2e,0x38,0x35, + 0x35,0x2d,0x37,0x2e,0x38,0x36,0x35,0x2d,0x31,0x38, + 0x2e,0x39,0x36,0x36,0x6c,0x2d,0x30,0x2e,0x30,0x31, + 0x32,0x2d,0x31,0x39,0x2e,0x32,0x34,0x36,0x63,0x2d, + 0x30,0x2e,0x30,0x30,0x38,0x2d,0x36,0x2e,0x31,0x31, + 0x2c,0x33,0x2e,0x35,0x32,0x35,0x2d,0x31,0x34,0x2e, + 0x36,0x34,0x33,0x2c,0x37,0x2e,0x38,0x34,0x36,0x2d, + 0x31,0x38,0x2e,0x39,0x36,0x34,0x6c,0x32,0x35,0x2e, + 0x37,0x34,0x31,0x2d,0x32,0x35,0x2e,0x37,0x33,0x37, + 0x20,0x20,0x20,0x63,0x34,0x2e,0x33,0x32,0x31,0x2d, 0x34,0x2e,0x33,0x32,0x31,0x2c,0x31,0x32,0x2e,0x38, 0x35,0x32,0x2d,0x37,0x2e,0x38,0x35,0x35,0x2c,0x31, 0x38,0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e,0x38,0x35, - 0x35,0x68,0x31,0x30,0x32,0x2e,0x31,0x34,0x0a,0x09, - 0x63,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30,0x2c,0x37, - 0x2e,0x35,0x37,0x33,0x2c,0x33,0x2e,0x35,0x33,0x34, - 0x2c,0x33,0x2e,0x32,0x35,0x33,0x2c,0x37,0x2e,0x38, - 0x35,0x35,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34,0x31, - 0x2c,0x32,0x35,0x2e,0x37,0x33,0x37,0x63,0x2d,0x34, - 0x2e,0x33,0x32,0x31,0x2c,0x34,0x2e,0x33,0x32,0x31, + 0x35,0x68,0x31,0x30,0x32,0x2e,0x31,0x34,0x63,0x36, + 0x2e,0x31,0x30,0x37,0x2c,0x30,0x2c,0x37,0x2e,0x35, + 0x37,0x33,0x2c,0x33,0x2e,0x35,0x33,0x34,0x2c,0x33, + 0x2e,0x32,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35, + 0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34,0x31,0x2c,0x32, + 0x35,0x2e,0x37,0x33,0x37,0x20,0x20,0x20,0x63,0x2d, + 0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33,0x32,0x31, 0x2d,0x31,0x32,0x2e,0x38,0x35,0x32,0x2c,0x37,0x2e, 0x38,0x35,0x35,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33, 0x2c,0x37,0x2e,0x38,0x35,0x35,0x68,0x2d,0x36,0x30, - 0x2e,0x36,0x38,0x38,0x0a,0x09,0x63,0x2d,0x36,0x2e, - 0x31,0x31,0x32,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x31, - 0x31,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2d,0x31,0x31, - 0x2e,0x31,0x31,0x2c,0x31,0x31,0x2e,0x31,0x30,0x38, - 0x76,0x31,0x39,0x2e,0x32,0x34,0x36,0x63,0x30,0x2c, - 0x36,0x2e,0x31,0x31,0x2c,0x34,0x2e,0x39,0x39,0x38, - 0x2c,0x31,0x31,0x2e,0x31,0x30,0x38,0x2c,0x31,0x31, - 0x2e,0x31,0x30,0x36,0x2c,0x31,0x31,0x2e,0x31,0x30, - 0x36,0x6c,0x36,0x30,0x2e,0x37,0x30,0x32,0x2d,0x30, - 0x2e,0x30,0x30,0x37,0x63,0x36,0x2e,0x31,0x30,0x38, - 0x2d,0x30,0x2e,0x30,0x30,0x32,0x2c,0x31,0x34,0x2e, - 0x36,0x34,0x34,0x2c,0x33,0x2e,0x35,0x33,0x33,0x2c, - 0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e,0x38, - 0x35,0x32,0x0a,0x09,0x6c,0x32,0x35,0x2e,0x37,0x33, + 0x2e,0x36,0x38,0x38,0x63,0x2d,0x36,0x2e,0x31,0x31, + 0x32,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c, + 0x34,0x2e,0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31, + 0x31,0x2c,0x31,0x31,0x2e,0x31,0x30,0x38,0x76,0x31, + 0x39,0x2e,0x32,0x34,0x36,0x63,0x30,0x2c,0x36,0x2e, + 0x31,0x31,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2c,0x31, + 0x31,0x2e,0x31,0x30,0x38,0x2c,0x31,0x31,0x2e,0x31, + 0x30,0x36,0x2c,0x31,0x31,0x2e,0x31,0x30,0x36,0x20, + 0x20,0x20,0x6c,0x36,0x30,0x2e,0x37,0x30,0x32,0x2d, + 0x30,0x2e,0x30,0x30,0x37,0x63,0x36,0x2e,0x31,0x30, + 0x37,0x2d,0x30,0x2e,0x30,0x30,0x32,0x2c,0x31,0x34, + 0x2e,0x36,0x34,0x34,0x2c,0x33,0x2e,0x35,0x33,0x33, + 0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e, + 0x38,0x35,0x33,0x6c,0x32,0x35,0x2e,0x37,0x32,0x39, 0x2c,0x32,0x35,0x2e,0x37,0x32,0x39,0x63,0x34,0x2e, - 0x33,0x32,0x2c,0x34,0x2e,0x33,0x31,0x35,0x2c,0x37, - 0x2e,0x38,0x35,0x33,0x2c,0x31,0x32,0x2e,0x38,0x35, - 0x31,0x2c,0x37,0x2e,0x38,0x35,0x33,0x2c,0x31,0x38, + 0x33,0x32,0x2c,0x34,0x2e,0x33,0x31,0x34,0x2c,0x37, + 0x2e,0x38,0x35,0x34,0x2c,0x31,0x32,0x2e,0x38,0x35, + 0x31,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2c,0x31,0x38, 0x2e,0x39,0x36,0x33,0x76,0x31,0x39,0x2e,0x32,0x33, - 0x35,0x63,0x30,0x2c,0x36,0x2e,0x31,0x31,0x2d,0x33, - 0x2e,0x35,0x33,0x32,0x2c,0x31,0x34,0x2e,0x36,0x34, - 0x36,0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c,0x31,0x38, - 0x2e,0x39,0x36,0x33,0x6c,0x2d,0x32,0x35,0x2e,0x37, - 0x34,0x31,0x2c,0x32,0x35,0x2e,0x37,0x34,0x0a,0x09, - 0x63,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x34,0x2e, - 0x33,0x31,0x37,0x2d,0x31,0x32,0x2e,0x38,0x35,0x32, - 0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x38,0x2e, - 0x39,0x36,0x33,0x2c,0x37,0x2e,0x38,0x35,0x34,0x68, - 0x2d,0x36,0x30,0x2e,0x36,0x38,0x38,0x63,0x2d,0x36, - 0x2e,0x31,0x31,0x32,0x2c,0x30,0x2d,0x31,0x34,0x2e, - 0x36,0x34,0x33,0x2d,0x33,0x2e,0x35,0x33,0x36,0x2d, - 0x31,0x38,0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e,0x38, - 0x35,0x34,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34,0x31, - 0x2d,0x32,0x35,0x2e,0x37,0x34,0x0a,0x09,0x63,0x2d, - 0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e,0x33,0x31,0x36, - 0x2d,0x32,0x2e,0x38,0x35,0x38,0x2d,0x37,0x2e,0x38, - 0x35,0x34,0x2c,0x33,0x2e,0x32,0x35,0x33,0x2d,0x37, - 0x2e,0x38,0x35,0x34,0x68,0x31,0x30,0x32,0x2e,0x31, - 0x34,0x63,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2c, - 0x31,0x31,0x2e,0x31,0x31,0x2d,0x34,0x2e,0x39,0x39, - 0x38,0x2c,0x31,0x31,0x2e,0x31,0x31,0x2d,0x31,0x31, - 0x2e,0x31,0x30,0x39,0x56,0x34,0x31,0x31,0x2e,0x37, - 0x35,0x63,0x30,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c, - 0x30,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c,0x30,0x2e, - 0x30,0x30,0x33,0x2d,0x31,0x31,0x2e,0x31,0x31,0x0a, - 0x09,0x63,0x30,0x2e,0x30,0x30,0x34,0x2c,0x30,0x2d, - 0x34,0x2e,0x39,0x39,0x34,0x2c,0x30,0x2d,0x31,0x31, - 0x2e,0x31,0x30,0x33,0x2c,0x30,0x4c,0x32,0x37,0x36, - 0x2e,0x38,0x32,0x34,0x2c,0x34,0x30,0x30,0x2e,0x36, - 0x34,0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x67,0x20, - 0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30, - 0x2e,0x32,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x37,0x2e,0x30, - 0x30,0x38,0x2c,0x33,0x37,0x30,0x2e,0x38,0x37,0x37, - 0x63,0x30,0x2d,0x36,0x2e,0x31,0x31,0x2c,0x30,0x2d, - 0x31,0x31,0x2e,0x32,0x33,0x38,0x2c,0x30,0x2d,0x31, - 0x31,0x2e,0x33,0x39,0x33,0x63,0x30,0x2d,0x30,0x2e, - 0x31,0x35,0x35,0x2c,0x33,0x2e,0x35,0x33,0x32,0x2d, - 0x33,0x2e,0x38,0x31,0x38,0x2c,0x37,0x2e,0x38,0x35, - 0x34,0x2d,0x38,0x2e,0x31,0x33,0x38,0x6c,0x36,0x37, - 0x2e,0x31,0x38,0x35,0x2d,0x36,0x37,0x2e,0x31,0x38, - 0x36,0x0a,0x09,0x09,0x63,0x34,0x2e,0x33,0x32,0x31, - 0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x31,0x32,0x2e, - 0x38,0x35,0x35,0x2d,0x37,0x2e,0x38,0x35,0x35,0x2c, - 0x31,0x38,0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e,0x38, - 0x35,0x35,0x68,0x31,0x30,0x32,0x2e,0x31,0x35,0x63, - 0x36,0x2e,0x31,0x30,0x38,0x2c,0x30,0x2c,0x37,0x2e, - 0x35,0x37,0x34,0x2c,0x33,0x2e,0x35,0x33,0x34,0x2c, - 0x33,0x2e,0x32,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35, - 0x35,0x6c,0x2d,0x36,0x37,0x2e,0x31,0x39,0x37,0x2c, - 0x36,0x37,0x2e,0x31,0x38,0x32,0x0a,0x09,0x09,0x63, - 0x2d,0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33,0x32, - 0x31,0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e, - 0x38,0x35,0x35,0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c, - 0x37,0x2e,0x38,0x35,0x35,0x73,0x34,0x2e,0x39,0x39, - 0x38,0x2c,0x30,0x2e,0x30,0x30,0x32,0x2c,0x31,0x31, - 0x2e,0x31,0x31,0x2c,0x30,0x2e,0x30,0x30,0x36,0x6c, - 0x31,0x39,0x2e,0x32,0x32,0x38,0x2c,0x30,0x2e,0x30, - 0x30,0x37,0x63,0x36,0x2e,0x31,0x30,0x38,0x2c,0x30, - 0x2e,0x30,0x30,0x34,0x2c,0x31,0x30,0x2e,0x37,0x35, - 0x2c,0x34,0x2e,0x39,0x39,0x33,0x2c,0x31,0x30,0x2e, - 0x33,0x31,0x38,0x2c,0x31,0x31,0x2e,0x30,0x38,0x36, - 0x6c,0x2d,0x31,0x2e,0x31,0x31,0x34,0x2c,0x31,0x35, - 0x2e,0x35,0x39,0x32,0x0a,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x34,0x33,0x33,0x2c,0x36,0x2e,0x30,0x39,0x32, - 0x2d,0x31,0x2e,0x37,0x30,0x37,0x2c,0x31,0x31,0x2e, - 0x39,0x39,0x38,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c, - 0x31,0x33,0x2e,0x31,0x32,0x33,0x63,0x2d,0x31,0x2e, - 0x31,0x32,0x35,0x2c,0x31,0x2e,0x31,0x32,0x35,0x2d, - 0x35,0x2e,0x35,0x37,0x36,0x2c,0x35,0x2e,0x35,0x38, - 0x2d,0x39,0x2e,0x38,0x39,0x36,0x2c,0x39,0x2e,0x38, - 0x39,0x36,0x6c,0x2d,0x32,0x35,0x2e,0x32,0x30,0x31, - 0x2c,0x32,0x35,0x2e,0x32,0x30,0x31,0x63,0x2d,0x34, - 0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33,0x31,0x36,0x2d, - 0x37,0x2e,0x38,0x38,0x35,0x2c,0x37,0x2e,0x38,0x38, - 0x35,0x2d,0x37,0x2e,0x39,0x32,0x32,0x2c,0x37,0x2e, - 0x39,0x31,0x38,0x0a,0x09,0x09,0x63,0x2d,0x30,0x2e, - 0x30,0x33,0x34,0x2c,0x30,0x2e,0x30,0x33,0x35,0x2c, + 0x35,0x20,0x20,0x20,0x63,0x30,0x2c,0x36,0x2e,0x31, + 0x30,0x39,0x2d,0x33,0x2e,0x35,0x33,0x32,0x2c,0x31, + 0x34,0x2e,0x36,0x34,0x36,0x2d,0x37,0x2e,0x38,0x35, + 0x34,0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x6c,0x2d, + 0x32,0x35,0x2e,0x37,0x34,0x2c,0x32,0x35,0x2e,0x37, + 0x34,0x63,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x34, + 0x2e,0x33,0x31,0x36,0x2d,0x31,0x32,0x2e,0x38,0x35, + 0x33,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x38, + 0x2e,0x39,0x36,0x34,0x2c,0x37,0x2e,0x38,0x35,0x34, + 0x68,0x2d,0x36,0x30,0x2e,0x36,0x38,0x38,0x20,0x20, + 0x20,0x63,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30, + 0x2d,0x31,0x34,0x2e,0x36,0x34,0x33,0x2d,0x33,0x2e, + 0x35,0x33,0x36,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33, + 0x2d,0x37,0x2e,0x38,0x35,0x34,0x6c,0x2d,0x32,0x35, + 0x2e,0x37,0x34,0x31,0x2d,0x32,0x35,0x2e,0x37,0x34, + 0x63,0x2d,0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e,0x33, + 0x31,0x36,0x2d,0x32,0x2e,0x38,0x35,0x38,0x2d,0x37, + 0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x32,0x35,0x33, + 0x2d,0x37,0x2e,0x38,0x35,0x34,0x68,0x31,0x30,0x32, + 0x2e,0x31,0x34,0x63,0x36,0x2e,0x31,0x31,0x32,0x2c, + 0x30,0x2c,0x31,0x31,0x2e,0x31,0x31,0x2d,0x34,0x2e, + 0x39,0x39,0x38,0x2c,0x31,0x31,0x2e,0x31,0x31,0x2d, + 0x31,0x31,0x2e,0x31,0x30,0x38,0x20,0x20,0x20,0x56, + 0x34,0x31,0x31,0x2e,0x37,0x35,0x63,0x30,0x2d,0x36, + 0x2e,0x31,0x31,0x32,0x2c,0x30,0x2d,0x31,0x31,0x2e, + 0x31,0x31,0x2c,0x30,0x2e,0x30,0x30,0x33,0x2d,0x31, + 0x31,0x2e,0x31,0x31,0x63,0x30,0x2e,0x30,0x30,0x34, + 0x2c,0x30,0x2d,0x34,0x2e,0x39,0x39,0x34,0x2c,0x30, + 0x2d,0x31,0x31,0x2e,0x31,0x30,0x33,0x2c,0x30,0x4c, + 0x32,0x37,0x36,0x2e,0x38,0x32,0x34,0x2c,0x34,0x30, + 0x30,0x2e,0x36,0x34,0x39,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74, + 0x79,0x3d,0x22,0x30,0x2e,0x32,0x22,0x3e,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, + 0x4d,0x31,0x37,0x2e,0x30,0x30,0x38,0x2c,0x33,0x37, + 0x30,0x2e,0x38,0x37,0x37,0x63,0x30,0x2d,0x36,0x2e, + 0x31,0x30,0x39,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x32, + 0x33,0x38,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x33,0x39, + 0x33,0x63,0x30,0x2d,0x30,0x2e,0x31,0x35,0x35,0x2c, + 0x33,0x2e,0x35,0x33,0x32,0x2d,0x33,0x2e,0x38,0x31, + 0x38,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x38,0x2e, + 0x31,0x33,0x38,0x6c,0x36,0x37,0x2e,0x31,0x38,0x35, + 0x2d,0x36,0x37,0x2e,0x31,0x38,0x36,0x20,0x20,0x20, + 0x20,0x63,0x34,0x2e,0x33,0x32,0x31,0x2d,0x34,0x2e, + 0x33,0x32,0x31,0x2c,0x31,0x32,0x2e,0x38,0x35,0x35, + 0x2d,0x37,0x2e,0x38,0x35,0x35,0x2c,0x31,0x38,0x2e, + 0x39,0x36,0x33,0x2d,0x37,0x2e,0x38,0x35,0x35,0x68, + 0x31,0x30,0x32,0x2e,0x31,0x35,0x63,0x36,0x2e,0x31, + 0x30,0x38,0x2c,0x30,0x2c,0x37,0x2e,0x35,0x37,0x34, + 0x2c,0x33,0x2e,0x35,0x33,0x34,0x2c,0x33,0x2e,0x32, + 0x35,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35,0x6c,0x2d, + 0x36,0x37,0x2e,0x31,0x39,0x37,0x2c,0x36,0x37,0x2e, + 0x31,0x38,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x34, + 0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33,0x32,0x31,0x2d, + 0x37,0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35, + 0x35,0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e, + 0x38,0x35,0x35,0x73,0x34,0x2e,0x39,0x39,0x38,0x2c, + 0x30,0x2e,0x30,0x30,0x32,0x2c,0x31,0x31,0x2e,0x31, + 0x31,0x2c,0x30,0x2e,0x30,0x30,0x36,0x6c,0x31,0x39, + 0x2e,0x32,0x32,0x38,0x2c,0x30,0x2e,0x30,0x30,0x37, + 0x63,0x36,0x2e,0x31,0x30,0x38,0x2c,0x30,0x2e,0x30, + 0x30,0x34,0x2c,0x31,0x30,0x2e,0x37,0x35,0x2c,0x34, + 0x2e,0x39,0x39,0x33,0x2c,0x31,0x30,0x2e,0x33,0x31, + 0x38,0x2c,0x31,0x31,0x2e,0x30,0x38,0x36,0x6c,0x2d, + 0x31,0x2e,0x31,0x31,0x34,0x2c,0x31,0x35,0x2e,0x35, + 0x39,0x33,0x20,0x20,0x20,0x20,0x63,0x2d,0x30,0x2e, + 0x34,0x33,0x33,0x2c,0x36,0x2e,0x30,0x39,0x32,0x2d, + 0x31,0x2e,0x37,0x30,0x37,0x2c,0x31,0x31,0x2e,0x39, + 0x39,0x37,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c,0x31, + 0x33,0x2e,0x31,0x32,0x32,0x63,0x2d,0x31,0x2e,0x31, + 0x32,0x35,0x2c,0x31,0x2e,0x31,0x32,0x35,0x2d,0x35, + 0x2e,0x35,0x37,0x36,0x2c,0x35,0x2e,0x35,0x38,0x2d, + 0x39,0x2e,0x38,0x39,0x36,0x2c,0x39,0x2e,0x38,0x39, + 0x36,0x6c,0x2d,0x32,0x35,0x2e,0x32,0x30,0x31,0x2c, + 0x32,0x35,0x2e,0x32,0x30,0x31,0x20,0x20,0x20,0x20, + 0x63,0x2d,0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33, + 0x31,0x35,0x2d,0x37,0x2e,0x38,0x38,0x35,0x2c,0x37, + 0x2e,0x38,0x38,0x35,0x2d,0x37,0x2e,0x39,0x32,0x32, + 0x2c,0x37,0x2e,0x39,0x31,0x38,0x63,0x2d,0x30,0x2e, + 0x30,0x33,0x34,0x2c,0x30,0x2e,0x30,0x33,0x34,0x2c, 0x34,0x2e,0x39,0x33,0x33,0x2c,0x30,0x2e,0x30,0x36, - 0x35,0x2c,0x31,0x31,0x2e,0x30,0x34,0x31,0x2c,0x30, + 0x34,0x2c,0x31,0x31,0x2e,0x30,0x34,0x31,0x2c,0x30, 0x2e,0x30,0x36,0x32,0x68,0x31,0x37,0x2e,0x39,0x37, 0x39,0x63,0x36,0x2e,0x31,0x30,0x38,0x2d,0x30,0x2e, 0x30,0x30,0x34,0x2c,0x31,0x34,0x2e,0x37,0x38,0x34, 0x2c,0x33,0x2e,0x33,0x37,0x39,0x2c,0x31,0x39,0x2e, - 0x32,0x38,0x31,0x2c,0x37,0x2e,0x35,0x31,0x38,0x6c, - 0x32,0x36,0x2e,0x38,0x33,0x36,0x2c,0x32,0x34,0x2e, - 0x36,0x39,0x35,0x0a,0x09,0x09,0x63,0x34,0x2e,0x34, - 0x39,0x37,0x2c,0x34,0x2e,0x31,0x33,0x37,0x2c,0x38, - 0x2e,0x31,0x38,0x31,0x2c,0x37,0x2e,0x36,0x32,0x33, - 0x2c,0x38,0x2e,0x30,0x35,0x38,0x2c,0x37,0x2e,0x37, - 0x35,0x63,0x2d,0x30,0x2e,0x31,0x32,0x36,0x2c,0x30, - 0x2e,0x31,0x32,0x36,0x2d,0x33,0x2e,0x37,0x36,0x36, - 0x2c,0x33,0x2e,0x37,0x36,0x32,0x2d,0x38,0x2e,0x30, - 0x38,0x37,0x2c,0x38,0x2e,0x30,0x38,0x33,0x6c,0x2d, - 0x33,0x34,0x2e,0x38,0x32,0x37,0x2c,0x33,0x34,0x2e, - 0x38,0x34,0x39,0x6c,0x2d,0x31,0x34,0x37,0x2e,0x32, - 0x31,0x32,0x2c,0x30,0x2e,0x30,0x30,0x32,0x0a,0x09, - 0x09,0x63,0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30, - 0x2d,0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x34,0x2e, - 0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x35, - 0x2d,0x31,0x31,0x2e,0x31,0x31,0x4c,0x31,0x37,0x2e, - 0x30,0x30,0x38,0x2c,0x33,0x37,0x30,0x2e,0x38,0x37, - 0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e, - 0x0a,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x31,0x31,0x2e, - 0x30,0x31,0x2c,0x34,0x34,0x32,0x2e,0x30,0x39,0x37, - 0x63,0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30,0x2d, - 0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x34,0x2e,0x39, - 0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x35,0x2d, - 0x31,0x31,0x2e,0x31,0x30,0x39,0x76,0x2d,0x31,0x39, - 0x2e,0x32,0x33,0x35,0x63,0x30,0x2d,0x36,0x2e,0x31, - 0x31,0x32,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2d,0x31, - 0x31,0x2e,0x31,0x31,0x2c,0x31,0x31,0x2e,0x31,0x30, - 0x35,0x2d,0x31,0x31,0x2e,0x31,0x31,0x68,0x36,0x30, - 0x2e,0x36,0x39,0x0a,0x09,0x63,0x36,0x2e,0x31,0x30, - 0x38,0x2c,0x30,0x2c,0x31,0x31,0x2e,0x31,0x30,0x36, - 0x2d,0x34,0x2e,0x39,0x39,0x38,0x2c,0x31,0x31,0x2e, - 0x31,0x30,0x36,0x2d,0x31,0x31,0x2e,0x31,0x30,0x39, - 0x76,0x2d,0x31,0x39,0x2e,0x32,0x30,0x34,0x63,0x30, - 0x2d,0x36,0x2e,0x31,0x31,0x32,0x2d,0x34,0x2e,0x39, - 0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2d,0x31, + 0x32,0x38,0x31,0x2c,0x37,0x2e,0x35,0x31,0x39,0x20, + 0x20,0x20,0x20,0x6c,0x32,0x36,0x2e,0x38,0x33,0x36, + 0x2c,0x32,0x34,0x2e,0x36,0x39,0x34,0x63,0x34,0x2e, + 0x34,0x39,0x37,0x2c,0x34,0x2e,0x31,0x33,0x37,0x2c, + 0x38,0x2e,0x31,0x38,0x31,0x2c,0x37,0x2e,0x36,0x32, + 0x33,0x2c,0x38,0x2e,0x30,0x35,0x38,0x2c,0x37,0x2e, + 0x37,0x35,0x63,0x2d,0x30,0x2e,0x31,0x32,0x36,0x2c, + 0x30,0x2e,0x31,0x32,0x36,0x2d,0x33,0x2e,0x37,0x36, + 0x36,0x2c,0x33,0x2e,0x37,0x36,0x32,0x2d,0x38,0x2e, + 0x30,0x38,0x37,0x2c,0x38,0x2e,0x30,0x38,0x33,0x6c, + 0x2d,0x33,0x34,0x2e,0x38,0x32,0x37,0x2c,0x33,0x34, + 0x2e,0x38,0x35,0x6c,0x2d,0x31,0x34,0x37,0x2e,0x32, + 0x31,0x32,0x2c,0x30,0x2e,0x30,0x30,0x32,0x20,0x20, + 0x20,0x20,0x63,0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c, + 0x30,0x2d,0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x34, + 0x2e,0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30, + 0x35,0x2d,0x31,0x31,0x2e,0x31,0x31,0x4c,0x31,0x37, + 0x2e,0x30,0x30,0x38,0x2c,0x33,0x37,0x30,0x2e,0x38, + 0x37,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, + 0x67,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x6e,0x65,0x61, + 0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x20, + 0x69,0x64,0x3d,0x22,0x53,0x56,0x47,0x49,0x44,0x5f, + 0x33,0x5f,0x22,0x20,0x67,0x72,0x61,0x64,0x69,0x65, + 0x6e,0x74,0x55,0x6e,0x69,0x74,0x73,0x3d,0x22,0x75, + 0x73,0x65,0x72,0x53,0x70,0x61,0x63,0x65,0x4f,0x6e, + 0x55,0x73,0x65,0x22,0x20,0x78,0x31,0x3d,0x22,0x37, + 0x31,0x2e,0x32,0x37,0x22,0x20,0x79,0x31,0x3d,0x22, + 0x34,0x36,0x35,0x2e,0x39,0x35,0x34,0x31,0x22,0x20, + 0x78,0x32,0x3d,0x22,0x33,0x32,0x36,0x2e,0x32,0x35, + 0x37,0x33,0x22,0x20,0x79,0x32,0x3d,0x22,0x32,0x31, + 0x33,0x2e,0x39,0x36,0x36,0x38,0x22,0x3e,0x0a,0x09, + 0x09,0x3c,0x73,0x74,0x6f,0x70,0x20,0x6f,0x66,0x66, + 0x73,0x65,0x74,0x3d,0x22,0x30,0x2e,0x33,0x30,0x37, + 0x37,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22, + 0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72, + 0x3a,0x23,0x44,0x33,0x44,0x33,0x44,0x33,0x22,0x2f, + 0x3e,0x0a,0x09,0x09,0x3c,0x73,0x74,0x6f,0x70,0x20, + 0x6f,0x66,0x66,0x73,0x65,0x74,0x3d,0x22,0x30,0x2e, + 0x36,0x37,0x35,0x32,0x22,0x20,0x73,0x74,0x79,0x6c, + 0x65,0x3d,0x22,0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f, + 0x6c,0x6f,0x72,0x3a,0x23,0x46,0x46,0x46,0x46,0x46, + 0x46,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x6c,0x69, + 0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65, + 0x6e,0x74,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x75,0x72,0x6c, + 0x28,0x23,0x53,0x56,0x47,0x49,0x44,0x5f,0x33,0x5f, + 0x29,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x31,0x31, + 0x2e,0x30,0x31,0x2c,0x34,0x34,0x32,0x2e,0x30,0x39, + 0x37,0x63,0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30, + 0x2d,0x31,0x31,0x2e,0x31,0x30,0x34,0x2d,0x34,0x2e, + 0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x34, + 0x2d,0x31,0x31,0x2e,0x31,0x30,0x38,0x76,0x2d,0x31, + 0x39,0x2e,0x32,0x33,0x35,0x63,0x30,0x2d,0x36,0x2e, + 0x31,0x31,0x32,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2d, + 0x31,0x31,0x2e,0x31,0x31,0x2c,0x31,0x31,0x2e,0x31, + 0x30,0x34,0x2d,0x31,0x31,0x2e,0x31,0x31,0x20,0x20, + 0x20,0x68,0x36,0x30,0x2e,0x36,0x39,0x63,0x36,0x2e, + 0x31,0x30,0x38,0x2c,0x30,0x2c,0x31,0x31,0x2e,0x31, + 0x30,0x36,0x2d,0x34,0x2e,0x39,0x39,0x38,0x2c,0x31, 0x31,0x2e,0x31,0x30,0x36,0x2d,0x31,0x31,0x2e,0x31, - 0x31,0x68,0x2d,0x36,0x30,0x2e,0x36,0x39,0x63,0x2d, - 0x36,0x2e,0x31,0x30,0x37,0x2c,0x30,0x2d,0x31,0x31, - 0x2e,0x31,0x30,0x35,0x2d,0x34,0x2e,0x39,0x39,0x38, - 0x2d,0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x31,0x31, - 0x2e,0x31,0x30,0x38,0x76,0x2d,0x31,0x39,0x2e,0x32, - 0x34,0x36,0x0a,0x09,0x63,0x30,0x2d,0x36,0x2e,0x31, - 0x31,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2d,0x31,0x31, - 0x2e,0x31,0x30,0x38,0x2c,0x31,0x31,0x2e,0x31,0x30, - 0x35,0x2d,0x31,0x31,0x2e,0x31,0x30,0x38,0x68,0x36, - 0x30,0x2e,0x36,0x39,0x63,0x36,0x2e,0x31,0x30,0x38, - 0x2c,0x30,0x2c,0x31,0x34,0x2e,0x36,0x34,0x33,0x2d, - 0x33,0x2e,0x35,0x33,0x34,0x2c,0x31,0x38,0x2e,0x39, - 0x36,0x34,0x2d,0x37,0x2e,0x38,0x35,0x34,0x6c,0x32, - 0x35,0x2e,0x37,0x34,0x39,0x2d,0x32,0x35,0x2e,0x37, - 0x34,0x31,0x63,0x34,0x2e,0x33,0x32,0x31,0x2d,0x34, - 0x2e,0x33,0x31,0x39,0x2c,0x32,0x2e,0x38,0x35,0x35, - 0x2d,0x37,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e,0x32, - 0x35,0x33,0x2d,0x37,0x2e,0x38,0x35,0x33,0x0a,0x09, - 0x48,0x31,0x31,0x31,0x2e,0x30,0x31,0x63,0x2d,0x36, - 0x2e,0x31,0x30,0x37,0x2c,0x30,0x2d,0x31,0x34,0x2e, - 0x36,0x34,0x33,0x2c,0x33,0x2e,0x35,0x33,0x34,0x2d, - 0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e,0x38, - 0x35,0x35,0x4c,0x36,0x36,0x2e,0x33,0x31,0x2c,0x33, - 0x30,0x39,0x2e,0x39,0x63,0x2d,0x34,0x2e,0x33,0x32, - 0x2c,0x34,0x2e,0x33,0x32,0x31,0x2d,0x37,0x2e,0x38, - 0x35,0x37,0x2c,0x31,0x32,0x2e,0x38,0x35,0x34,0x2d, - 0x37,0x2e,0x38,0x35,0x37,0x2c,0x31,0x38,0x2e,0x39, - 0x36,0x34,0x76,0x31,0x30,0x32,0x2e,0x31,0x32,0x35, - 0x0a,0x09,0x63,0x30,0x2c,0x36,0x2e,0x31,0x31,0x31, - 0x2c,0x33,0x2e,0x35,0x33,0x37,0x2c,0x31,0x34,0x2e, - 0x36,0x34,0x36,0x2c,0x37,0x2e,0x38,0x35,0x37,0x2c, - 0x31,0x38,0x2e,0x39,0x36,0x33,0x6c,0x32,0x35,0x2e, - 0x37,0x33,0x37,0x2c,0x32,0x35,0x2e,0x37,0x34,0x63, - 0x34,0x2e,0x33,0x32,0x31,0x2c,0x34,0x2e,0x33,0x31, - 0x37,0x2c,0x31,0x32,0x2e,0x38,0x35,0x35,0x2c,0x37, - 0x2e,0x38,0x35,0x34,0x2c,0x31,0x38,0x2e,0x39,0x36, - 0x33,0x2c,0x37,0x2e,0x38,0x35,0x34,0x68,0x31,0x30, - 0x32,0x2e,0x31,0x34,0x33,0x63,0x36,0x2e,0x31,0x31, - 0x32,0x2c,0x30,0x2c,0x37,0x2e,0x35,0x37,0x34,0x2d, - 0x33,0x2e,0x35,0x33,0x36,0x2c,0x33,0x2e,0x32,0x35, - 0x33,0x2d,0x37,0x2e,0x38,0x35,0x36,0x0a,0x09,0x6c, - 0x2d,0x32,0x35,0x2e,0x37,0x34,0x31,0x2d,0x32,0x35, - 0x2e,0x37,0x34,0x34,0x63,0x2d,0x34,0x2e,0x33,0x32, - 0x2d,0x34,0x2e,0x33,0x32,0x31,0x2d,0x31,0x32,0x2e, - 0x38,0x35,0x34,0x2d,0x37,0x2e,0x38,0x35,0x37,0x2d, - 0x31,0x38,0x2e,0x39,0x36,0x34,0x2d,0x37,0x2e,0x38, - 0x35,0x37,0x4c,0x31,0x31,0x31,0x2e,0x30,0x31,0x2c, - 0x34,0x34,0x32,0x2e,0x30,0x39,0x37,0x7a,0x22,0x2f, - 0x3e,0x0a,0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x35,0x35,0x38, - 0x2e,0x36,0x30,0x35,0x2c,0x33,0x32,0x36,0x2e,0x35, - 0x36,0x32,0x63,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2c, - 0x33,0x2e,0x38,0x2d,0x33,0x2e,0x38,0x35,0x2c,0x37, - 0x2e,0x31,0x31,0x35,0x2d,0x36,0x2e,0x36,0x38,0x32, - 0x2c,0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x32,0x2e, - 0x38,0x33,0x32,0x2c,0x32,0x2e,0x38,0x33,0x36,0x2d, - 0x36,0x2e,0x31,0x34,0x36,0x2c,0x35,0x2e,0x30,0x36, - 0x2d,0x39,0x2e,0x39,0x34,0x37,0x2c,0x36,0x2e,0x36, - 0x38,0x32,0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x37, - 0x39,0x36,0x2c,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37, - 0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34, - 0x2d,0x31,0x32,0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e, - 0x34,0x33,0x34,0x68,0x2d,0x38,0x2e,0x34,0x39,0x36, - 0x63,0x2d,0x34,0x2e,0x32,0x38,0x33,0x2c,0x30,0x2d, - 0x38,0x2e,0x33,0x32,0x34,0x2d,0x30,0x2e,0x38,0x31, - 0x32,0x2d,0x31,0x32,0x2e,0x31,0x32,0x31,0x2d,0x32, - 0x2e,0x34,0x33,0x34,0x63,0x2d,0x33,0x2e,0x38,0x2d, - 0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x31, - 0x35,0x2d,0x33,0x2e,0x38,0x34,0x36,0x2d,0x39,0x2e, - 0x39,0x34,0x32,0x2d,0x36,0x2e,0x36,0x38,0x32,0x0a, - 0x09,0x09,0x63,0x2d,0x32,0x2e,0x38,0x33,0x36,0x2d, - 0x32,0x2e,0x38,0x32,0x38,0x2d,0x35,0x2e,0x30,0x36, - 0x33,0x2d,0x36,0x2e,0x31,0x34,0x33,0x2d,0x36,0x2e, - 0x36,0x38,0x33,0x2d,0x39,0x2e,0x39,0x34,0x33,0x63, - 0x2d,0x31,0x2e,0x36,0x32,0x36,0x2d,0x33,0x2e,0x37, - 0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x37, - 0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x34, - 0x2d,0x31,0x32,0x2e,0x31,0x32,0x31,0x76,0x2d,0x34, - 0x37,0x2e,0x38,0x35,0x38,0x63,0x30,0x2d,0x34,0x2e, - 0x32,0x38,0x32,0x2c,0x30,0x2e,0x38,0x30,0x38,0x2d, - 0x38,0x2e,0x33,0x32,0x34,0x2c,0x32,0x2e,0x34,0x33, - 0x34,0x2d,0x31,0x32,0x2e,0x31,0x32,0x0a,0x09,0x09, - 0x63,0x31,0x2e,0x36,0x31,0x39,0x2d,0x33,0x2e,0x38, - 0x30,0x31,0x2c,0x33,0x2e,0x38,0x34,0x37,0x2d,0x37, - 0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e,0x36,0x38,0x33, - 0x2d,0x39,0x2e,0x39,0x34,0x37,0x63,0x32,0x2e,0x38, - 0x32,0x37,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c,0x36, - 0x2e,0x31,0x34,0x33,0x2d,0x35,0x2e,0x30,0x35,0x36, - 0x2c,0x39,0x2e,0x39,0x34,0x32,0x2d,0x36,0x2e,0x36, - 0x38,0x32,0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31, - 0x2e,0x36,0x31,0x39,0x2c,0x37,0x2e,0x38,0x33,0x38, - 0x2d,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, - 0x31,0x32,0x31,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68, - 0x38,0x2e,0x34,0x39,0x36,0x0a,0x09,0x09,0x63,0x34, - 0x2e,0x32,0x37,0x39,0x2c,0x30,0x2c,0x38,0x2e,0x33, - 0x32,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32, - 0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34, + 0x30,0x38,0x56,0x33,0x37,0x30,0x2e,0x33,0x33,0x63, + 0x30,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2d,0x34,0x2e, + 0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2d, + 0x31,0x31,0x2e,0x31,0x30,0x36,0x2d,0x31,0x31,0x2e, + 0x31,0x31,0x68,0x2d,0x36,0x30,0x2e,0x36,0x39,0x63, + 0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30,0x2d,0x31, + 0x31,0x2e,0x31,0x30,0x34,0x2d,0x34,0x2e,0x39,0x39, + 0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x34,0x2d,0x31, + 0x31,0x2e,0x31,0x30,0x38,0x20,0x20,0x20,0x76,0x2d, + 0x31,0x39,0x2e,0x32,0x34,0x36,0x63,0x30,0x2d,0x36, + 0x2e,0x31,0x31,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2d, + 0x31,0x31,0x2e,0x31,0x30,0x38,0x2c,0x31,0x31,0x2e, + 0x31,0x30,0x34,0x2d,0x31,0x31,0x2e,0x31,0x30,0x38, + 0x68,0x36,0x30,0x2e,0x36,0x39,0x63,0x36,0x2e,0x31, + 0x30,0x38,0x2c,0x30,0x2c,0x31,0x34,0x2e,0x36,0x34, + 0x33,0x2d,0x33,0x2e,0x35,0x33,0x34,0x2c,0x31,0x38, + 0x2e,0x39,0x36,0x34,0x2d,0x37,0x2e,0x38,0x35,0x34, + 0x6c,0x32,0x35,0x2e,0x37,0x34,0x39,0x2d,0x32,0x35, + 0x2e,0x37,0x34,0x31,0x20,0x20,0x20,0x63,0x34,0x2e, + 0x33,0x32,0x31,0x2d,0x34,0x2e,0x33,0x31,0x39,0x2c, + 0x32,0x2e,0x38,0x35,0x35,0x2d,0x37,0x2e,0x38,0x35, + 0x33,0x2d,0x33,0x2e,0x32,0x35,0x33,0x2d,0x37,0x2e, + 0x38,0x35,0x33,0x48,0x31,0x31,0x31,0x2e,0x30,0x31, + 0x63,0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30,0x2d, + 0x31,0x34,0x2e,0x36,0x34,0x33,0x2c,0x33,0x2e,0x35, + 0x33,0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c, + 0x37,0x2e,0x38,0x35,0x35,0x4c,0x36,0x36,0x2e,0x33, + 0x31,0x2c,0x33,0x30,0x39,0x2e,0x39,0x20,0x20,0x20, + 0x63,0x2d,0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33, + 0x32,0x31,0x2d,0x37,0x2e,0x38,0x35,0x37,0x2c,0x31, + 0x32,0x2e,0x38,0x35,0x34,0x2d,0x37,0x2e,0x38,0x35, + 0x37,0x2c,0x31,0x38,0x2e,0x39,0x36,0x34,0x76,0x31, + 0x30,0x32,0x2e,0x31,0x32,0x35,0x63,0x30,0x2c,0x36, + 0x2e,0x31,0x31,0x2c,0x33,0x2e,0x35,0x33,0x37,0x2c, + 0x31,0x34,0x2e,0x36,0x34,0x36,0x2c,0x37,0x2e,0x38, + 0x35,0x37,0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x6c, + 0x32,0x35,0x2e,0x37,0x33,0x37,0x2c,0x32,0x35,0x2e, + 0x37,0x34,0x20,0x20,0x20,0x63,0x34,0x2e,0x33,0x32, + 0x31,0x2c,0x34,0x2e,0x33,0x31,0x36,0x2c,0x31,0x32, + 0x2e,0x38,0x35,0x35,0x2c,0x37,0x2e,0x38,0x35,0x34, + 0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e, + 0x38,0x35,0x34,0x68,0x31,0x30,0x32,0x2e,0x31,0x34, + 0x33,0x63,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2c, + 0x37,0x2e,0x35,0x37,0x34,0x2d,0x33,0x2e,0x35,0x33, + 0x36,0x2c,0x33,0x2e,0x32,0x35,0x33,0x2d,0x37,0x2e, + 0x38,0x35,0x35,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34, + 0x31,0x2d,0x32,0x35,0x2e,0x37,0x34,0x34,0x20,0x20, + 0x20,0x63,0x2d,0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e, + 0x33,0x32,0x31,0x2d,0x31,0x32,0x2e,0x38,0x35,0x34, + 0x2d,0x37,0x2e,0x38,0x35,0x37,0x2d,0x31,0x38,0x2e, + 0x39,0x36,0x34,0x2d,0x37,0x2e,0x38,0x35,0x37,0x4c, + 0x31,0x31,0x31,0x2e,0x30,0x31,0x2c,0x34,0x34,0x32, + 0x2e,0x30,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09, + 0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x35,0x35,0x38,0x2e,0x36,0x30,0x35,0x2c,0x33, + 0x32,0x36,0x2e,0x35,0x36,0x32,0x63,0x2d,0x31,0x2e, + 0x36,0x32,0x33,0x2c,0x33,0x2e,0x38,0x2d,0x33,0x2e, + 0x38,0x35,0x31,0x2c,0x37,0x2e,0x31,0x31,0x35,0x2d, + 0x36,0x2e,0x36,0x38,0x33,0x2c,0x39,0x2e,0x39,0x34, + 0x33,0x63,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x32, + 0x2e,0x38,0x33,0x36,0x2d,0x36,0x2e,0x31,0x34,0x36, + 0x2c,0x35,0x2e,0x30,0x36,0x2d,0x39,0x2e,0x39,0x34, + 0x37,0x2c,0x36,0x2e,0x36,0x38,0x32,0x20,0x20,0x20, + 0x20,0x63,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2c,0x31, + 0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x38,0x33,0x38, + 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32,0x2e, + 0x31,0x31,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34,0x68, + 0x2d,0x38,0x2e,0x34,0x39,0x36,0x63,0x2d,0x34,0x2e, + 0x32,0x38,0x33,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32, + 0x34,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32, + 0x2e,0x31,0x32,0x31,0x2d,0x32,0x2e,0x34,0x33,0x34, + 0x63,0x2d,0x33,0x2e,0x38,0x2d,0x31,0x2e,0x36,0x32, + 0x33,0x2d,0x37,0x2e,0x31,0x31,0x35,0x2d,0x33,0x2e, + 0x38,0x34,0x36,0x2d,0x39,0x2e,0x39,0x34,0x32,0x2d, + 0x36,0x2e,0x36,0x38,0x32,0x20,0x20,0x20,0x20,0x63, + 0x2d,0x32,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x38, + 0x32,0x38,0x2d,0x35,0x2e,0x30,0x36,0x33,0x2d,0x36, + 0x2e,0x31,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x33, + 0x2d,0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x31,0x2e, + 0x36,0x32,0x36,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d, + 0x32,0x2e,0x34,0x33,0x35,0x2d,0x37,0x2e,0x38,0x33, + 0x38,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31,0x32, + 0x2e,0x31,0x32,0x31,0x76,0x2d,0x34,0x37,0x2e,0x38, + 0x35,0x38,0x63,0x30,0x2d,0x34,0x2e,0x32,0x38,0x32, + 0x2c,0x30,0x2e,0x38,0x30,0x39,0x2d,0x38,0x2e,0x33, + 0x32,0x34,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31, + 0x32,0x2e,0x31,0x32,0x20,0x20,0x20,0x20,0x63,0x31, + 0x2e,0x36,0x31,0x39,0x2d,0x33,0x2e,0x38,0x30,0x31, + 0x2c,0x33,0x2e,0x38,0x34,0x37,0x2d,0x37,0x2e,0x31, + 0x31,0x35,0x2c,0x36,0x2e,0x36,0x38,0x33,0x2d,0x39, + 0x2e,0x39,0x34,0x37,0x63,0x32,0x2e,0x38,0x32,0x37, + 0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c,0x36,0x2e,0x31, + 0x34,0x34,0x2d,0x35,0x2e,0x30,0x35,0x36,0x2c,0x39, + 0x2e,0x39,0x34,0x32,0x2d,0x36,0x2e,0x36,0x38,0x32, + 0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e,0x36, + 0x31,0x39,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d,0x32, + 0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x32, + 0x31,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68,0x38,0x2e, + 0x34,0x39,0x36,0x20,0x20,0x20,0x20,0x63,0x34,0x2e, + 0x32,0x37,0x38,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x31, + 0x39,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32, + 0x2e,0x31,0x31,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34, 0x63,0x33,0x2e,0x38,0x2c,0x31,0x2e,0x36,0x32,0x36, 0x2c,0x37,0x2e,0x31,0x31,0x35,0x2c,0x33,0x2e,0x38, 0x35,0x2c,0x39,0x2e,0x39,0x34,0x37,0x2c,0x36,0x2e, 0x36,0x38,0x32,0x73,0x35,0x2e,0x30,0x36,0x2c,0x36, - 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x32, + 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x33, 0x2c,0x39,0x2e,0x39,0x34,0x37,0x63,0x31,0x2e,0x36, 0x32,0x33,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32, 0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38, 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, - 0x31,0x32,0x0a,0x09,0x09,0x76,0x32,0x34,0x2e,0x39, - 0x36,0x34,0x68,0x2d,0x35,0x38,0x2e,0x31,0x31,0x34, - 0x76,0x32,0x33,0x2e,0x36,0x31,0x38,0x63,0x30,0x2c, - 0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38, - 0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e, - 0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x63,0x30, - 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32,0x34,0x33, - 0x2c,0x32,0x2e,0x32,0x37,0x37,0x2c,0x34,0x2e,0x31, - 0x39,0x35,0x2c,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35, - 0x2e,0x38,0x35,0x32,0x63,0x31,0x2e,0x36,0x36,0x31, + 0x31,0x32,0x20,0x20,0x20,0x20,0x76,0x32,0x34,0x2e, + 0x39,0x36,0x34,0x68,0x2d,0x35,0x38,0x2e,0x31,0x31, + 0x34,0x76,0x32,0x33,0x2e,0x36,0x31,0x38,0x63,0x30, + 0x2c,0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34, + 0x38,0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31, + 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x63, + 0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32,0x34, + 0x33,0x2c,0x32,0x2e,0x32,0x37,0x37,0x2c,0x34,0x2e, + 0x31,0x39,0x35,0x2c,0x33,0x2e,0x39,0x33,0x36,0x2c, + 0x35,0x2e,0x38,0x35,0x32,0x63,0x31,0x2e,0x36,0x36, 0x2c,0x31,0x2e,0x36,0x35,0x37,0x2c,0x33,0x2e,0x36, - 0x30,0x39,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e, - 0x38,0x35,0x35,0x2c,0x33,0x2e,0x39,0x33,0x38,0x0a, - 0x09,0x09,0x63,0x32,0x2e,0x32,0x34,0x33,0x2c,0x30, - 0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34,0x33, - 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x31, - 0x39,0x39,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38, - 0x2e,0x34,0x39,0x36,0x63,0x32,0x2e,0x35,0x35,0x33, - 0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x32,0x2d,0x30, - 0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e,0x31,0x39,0x39, - 0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32,0x2e,0x32, - 0x34,0x33,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c,0x34, - 0x2e,0x31,0x39,0x35,0x2d,0x32,0x2e,0x32,0x38,0x31, - 0x2c,0x35,0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e,0x39, - 0x33,0x38,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x35, - 0x37,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32,0x2e, - 0x39,0x37,0x31,0x2d,0x33,0x2e,0x36,0x30,0x39,0x2c, - 0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38,0x35, - 0x32,0x63,0x30,0x2e,0x39,0x36,0x34,0x2d,0x32,0x2e, - 0x32,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35,0x31,0x2d, - 0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35, - 0x31,0x2d,0x37,0x2e,0x32,0x30,0x32,0x76,0x2d,0x37, - 0x2e,0x30,0x34,0x32,0x6c,0x31,0x32,0x2e,0x37,0x33, - 0x39,0x2c,0x32,0x2e,0x30,0x37,0x76,0x34,0x2e,0x32, - 0x34,0x38,0x0a,0x09,0x09,0x43,0x35,0x36,0x31,0x2e, - 0x30,0x33,0x38,0x2c,0x33,0x31,0x38,0x2e,0x37,0x32, - 0x34,0x2c,0x35,0x36,0x30,0x2e,0x32,0x32,0x38,0x2c, - 0x33,0x32,0x32,0x2e,0x37,0x36,0x35,0x2c,0x35,0x35, - 0x38,0x2e,0x36,0x30,0x35,0x2c,0x33,0x32,0x36,0x2e, - 0x35,0x36,0x32,0x7a,0x20,0x4d,0x35,0x34,0x38,0x2e, + 0x30,0x38,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e, + 0x38,0x35,0x34,0x2c,0x33,0x2e,0x39,0x33,0x38,0x20, + 0x20,0x20,0x20,0x63,0x32,0x2e,0x32,0x34,0x33,0x2c, + 0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34, + 0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e, + 0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68, + 0x38,0x2e,0x34,0x39,0x35,0x63,0x32,0x2e,0x35,0x35, + 0x34,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x33,0x2d, + 0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e,0x31,0x39, + 0x39,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32,0x2e, + 0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c, + 0x34,0x2e,0x31,0x39,0x35,0x2d,0x32,0x2e,0x32,0x38, + 0x31,0x2c,0x35,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e, + 0x39,0x33,0x38,0x20,0x20,0x20,0x20,0x63,0x31,0x2e, + 0x36,0x35,0x37,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c, + 0x32,0x2e,0x39,0x37,0x31,0x2d,0x33,0x2e,0x36,0x30, + 0x39,0x2c,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, + 0x38,0x35,0x32,0x63,0x30,0x2e,0x39,0x36,0x34,0x2d, + 0x32,0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35, + 0x31,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e, + 0x34,0x35,0x31,0x2d,0x37,0x2e,0x32,0x30,0x32,0x76, + 0x2d,0x37,0x2e,0x30,0x34,0x32,0x6c,0x31,0x32,0x2e, + 0x37,0x33,0x39,0x2c,0x32,0x2e,0x30,0x37,0x76,0x34, + 0x2e,0x32,0x34,0x38,0x20,0x20,0x20,0x20,0x43,0x35, + 0x36,0x31,0x2e,0x30,0x33,0x38,0x2c,0x33,0x31,0x38, + 0x2e,0x37,0x32,0x34,0x2c,0x35,0x36,0x30,0x2e,0x32, + 0x32,0x39,0x2c,0x33,0x32,0x32,0x2e,0x37,0x36,0x35, + 0x2c,0x35,0x35,0x38,0x2e,0x36,0x30,0x35,0x2c,0x33, + 0x32,0x36,0x2e,0x35,0x36,0x32,0x7a,0x20,0x4d,0x35, + 0x34,0x38,0x2e,0x32,0x39,0x39,0x2c,0x32,0x36,0x35, + 0x2e,0x38,0x35,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35, + 0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x36,0x2d,0x34, + 0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x31, + 0x2d,0x37,0x2e,0x31,0x39,0x39,0x20,0x20,0x20,0x20, + 0x63,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2d,0x32,0x2e, + 0x32,0x34,0x33,0x2d,0x32,0x2e,0x32,0x38,0x2d,0x34, + 0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38, + 0x2d,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x31,0x2e, + 0x36,0x35,0x36,0x2d,0x31,0x2e,0x36,0x35,0x38,0x2d, + 0x33,0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37, + 0x2d,0x35,0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e,0x39, + 0x33,0x38,0x63,0x2d,0x32,0x2e,0x32,0x34,0x38,0x2d, + 0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34, + 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31, + 0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d,0x38, + 0x2e,0x34,0x39,0x36,0x20,0x20,0x20,0x20,0x63,0x2d, + 0x32,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e, + 0x39,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d, + 0x37,0x2e,0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x35, + 0x63,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x30,0x2e, + 0x39,0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c, + 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35, + 0x35,0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x31, + 0x2e,0x36,0x35,0x36,0x2c,0x31,0x2e,0x36,0x35,0x37, + 0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x30, + 0x39,0x2d,0x33,0x2e,0x39,0x33,0x34,0x2c,0x35,0x2e, + 0x38,0x35,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x30, + 0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37, + 0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x34,0x2e,0x36, + 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x37, + 0x2e,0x31,0x39,0x39,0x56,0x32,0x38,0x31,0x2e,0x36, + 0x68,0x34,0x35,0x2e,0x33,0x37,0x35,0x56,0x32,0x36, + 0x35,0x2e,0x38,0x35,0x35,0x4c,0x35,0x34,0x38,0x2e, 0x32,0x39,0x39,0x2c,0x32,0x36,0x35,0x2e,0x38,0x35, - 0x35,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x33,0x2d, - 0x30,0x2e,0x34,0x38,0x36,0x2d,0x34,0x2e,0x39,0x35, - 0x32,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2d,0x37,0x2e, - 0x31,0x39,0x39,0x0a,0x09,0x09,0x63,0x2d,0x30,0x2e, - 0x39,0x36,0x38,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d, - 0x32,0x2e,0x32,0x38,0x31,0x2d,0x34,0x2e,0x31,0x39, + 0x35,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x36,0x39,0x38,0x2e,0x35,0x30,0x36, + 0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x76,0x2d,0x37, + 0x37,0x2e,0x36,0x39,0x35,0x63,0x30,0x2d,0x32,0x2e, + 0x35,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2d, + 0x34,0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e,0x34,0x35, + 0x2d,0x37,0x2e,0x31,0x39,0x39,0x63,0x2d,0x30,0x2e, + 0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d, + 0x32,0x2e,0x32,0x37,0x36,0x2d,0x34,0x2e,0x31,0x39, 0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, - 0x38,0x35,0x32,0x63,0x2d,0x31,0x2e,0x36,0x35,0x36, - 0x2d,0x31,0x2e,0x36,0x35,0x38,0x2d,0x33,0x2e,0x36, - 0x30,0x38,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e, - 0x38,0x35,0x32,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63, - 0x2d,0x32,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x39, - 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, - 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d, - 0x31,0x2e,0x34,0x35,0x68,0x2d,0x38,0x2e,0x34,0x39, - 0x36,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x35, - 0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c, - 0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x31,0x39, - 0x39,0x2c,0x31,0x2e,0x34,0x35,0x63,0x2d,0x32,0x2e, - 0x32,0x34,0x36,0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d, - 0x34,0x2e,0x31,0x39,0x34,0x2c,0x32,0x2e,0x32,0x38, - 0x31,0x2d,0x35,0x2e,0x38,0x35,0x35,0x2c,0x33,0x2e, - 0x39,0x33,0x38,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37, - 0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39, - 0x37,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e, - 0x39,0x33,0x34,0x2c,0x35,0x2e,0x38,0x35,0x32,0x0a, - 0x09,0x09,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2c, - 0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e,0x34,0x35, - 0x31,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, - 0x34,0x35,0x31,0x2c,0x37,0x2e,0x31,0x39,0x39,0x56, - 0x32,0x38,0x31,0x2e,0x36,0x68,0x34,0x35,0x2e,0x33, - 0x37,0x35,0x4c,0x35,0x34,0x38,0x2e,0x32,0x39,0x39, - 0x2c,0x32,0x36,0x35,0x2e,0x38,0x35,0x35,0x4c,0x35, - 0x34,0x38,0x2e,0x32,0x39,0x39,0x2c,0x32,0x36,0x35, - 0x2e,0x38,0x35,0x35,0x7a,0x22,0x2f,0x3e,0x0a,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, - 0x36,0x39,0x38,0x2e,0x35,0x30,0x36,0x2c,0x33,0x34, - 0x33,0x2e,0x35,0x35,0x76,0x2d,0x37,0x37,0x2e,0x36, - 0x39,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x33, - 0x2d,0x30,0x2e,0x34,0x38,0x32,0x2d,0x34,0x2e,0x39, - 0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, - 0x31,0x39,0x39,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39, - 0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x32,0x2e,0x32, - 0x37,0x37,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33, - 0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38,0x35,0x32, - 0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36,0x35,0x32, - 0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x36, - 0x30,0x38,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e, - 0x38,0x35,0x32,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63, - 0x2d,0x32,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x39, - 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, - 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d, - 0x31,0x2e,0x34,0x35,0x68,0x2d,0x36,0x2e,0x33,0x31, - 0x37,0x63,0x2d,0x32,0x2e,0x35,0x35,0x38,0x2c,0x30, - 0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c,0x30,0x2e,0x34, - 0x38,0x36,0x2d,0x37,0x2e,0x32,0x30,0x32,0x2c,0x31, - 0x2e,0x34,0x35,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e, - 0x32,0x34,0x33,0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d, - 0x34,0x2e,0x32,0x31,0x2c,0x32,0x2e,0x32,0x38,0x31, - 0x2d,0x35,0x2e,0x39,0x30,0x32,0x2c,0x33,0x2e,0x39, - 0x33,0x38,0x63,0x2d,0x31,0x2e,0x36,0x39,0x35,0x2c, - 0x31,0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x30,0x32, - 0x33,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e, - 0x39,0x39,0x31,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63, - 0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32, - 0x34,0x37,0x2d,0x31,0x2e,0x34,0x34,0x35,0x2c,0x34, - 0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x34,0x35, - 0x2c,0x37,0x2e,0x31,0x39,0x39,0x76,0x37,0x37,0x2e, - 0x36,0x39,0x35,0x68,0x2d,0x31,0x32,0x2e,0x36,0x34, - 0x33,0x0a,0x09,0x09,0x76,0x2d,0x37,0x37,0x2e,0x36, - 0x39,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x33, - 0x2d,0x30,0x2e,0x34,0x38,0x32,0x2d,0x34,0x2e,0x39, - 0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, - 0x31,0x39,0x39,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38, - 0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x32,0x2e,0x32, - 0x39,0x36,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33, - 0x2e,0x39,0x38,0x37,0x2d,0x35,0x2e,0x38,0x35,0x32, - 0x63,0x2d,0x31,0x2e,0x36,0x39,0x31,0x2d,0x31,0x2e, - 0x36,0x35,0x37,0x2d,0x33,0x2e,0x36,0x35,0x38,0x2d, - 0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e,0x39,0x30,0x35, - 0x2d,0x33,0x2e,0x39,0x33,0x38,0x0a,0x09,0x09,0x63, - 0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d,0x30,0x2e,0x39, - 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x33,0x2d,0x31, - 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d, - 0x31,0x2e,0x34,0x35,0x68,0x2d,0x36,0x2e,0x33,0x31, - 0x38,0x63,0x2d,0x32,0x2e,0x35,0x35,0x37,0x2c,0x30, - 0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c,0x30,0x2e,0x34, - 0x38,0x36,0x2d,0x37,0x2e,0x31,0x39,0x38,0x2c,0x31, - 0x2e,0x34,0x35,0x63,0x2d,0x32,0x2e,0x32,0x34,0x37, - 0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d,0x34,0x2e,0x31, - 0x39,0x35,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35, - 0x2e,0x38,0x35,0x35,0x2c,0x33,0x2e,0x39,0x33,0x38, - 0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37, - 0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39, - 0x37,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e, - 0x39,0x33,0x35,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63, - 0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e,0x32, - 0x34,0x37,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e, - 0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37, - 0x2e,0x31,0x39,0x39,0x76,0x37,0x37,0x2e,0x36,0x39, - 0x35,0x68,0x2d,0x31,0x32,0x2e,0x37,0x34,0x31,0x56, - 0x32,0x33,0x37,0x2e,0x34,0x37,0x34,0x68,0x34,0x2e, - 0x32,0x34,0x34,0x6c,0x36,0x2e,0x39,0x34,0x33,0x2c, - 0x31,0x30,0x2e,0x37,0x37,0x33,0x0a,0x09,0x09,0x63, - 0x32,0x2e,0x38,0x39,0x39,0x2d,0x33,0x2e,0x39,0x33, - 0x38,0x2c,0x36,0x2e,0x35,0x34,0x2d,0x37,0x2e,0x30, - 0x36,0x31,0x2c,0x31,0x30,0x2e,0x39,0x33,0x2d,0x39, - 0x2e,0x33,0x37,0x36,0x63,0x34,0x2e,0x33,0x38,0x32, - 0x2d,0x32,0x2e,0x33,0x31,0x32,0x2c,0x39,0x2e,0x31, - 0x36,0x36,0x2d,0x33,0x2e,0x34,0x37,0x31,0x2c,0x31, - 0x34,0x2e,0x33,0x34,0x34,0x2d,0x33,0x2e,0x34,0x37, - 0x31,0x68,0x31,0x2e,0x30,0x33,0x37,0x63,0x36,0x2e, - 0x30,0x30,0x39,0x2c,0x30,0x2c,0x31,0x31,0x2e,0x34, - 0x32,0x38,0x2c,0x31,0x2e,0x34,0x38,0x35,0x2c,0x31, - 0x36,0x2e,0x32,0x36,0x36,0x2c,0x34,0x2e,0x34,0x35, - 0x35,0x0a,0x09,0x09,0x63,0x34,0x2e,0x38,0x33,0x33, + 0x38,0x35,0x33,0x20,0x20,0x20,0x20,0x63,0x2d,0x31, + 0x2e,0x36,0x35,0x32,0x2d,0x31,0x2e,0x36,0x35,0x37, + 0x2d,0x33,0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39, + 0x37,0x2d,0x35,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e, + 0x39,0x33,0x38,0x63,0x2d,0x32,0x2e,0x32,0x34,0x36, + 0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36, + 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, + 0x31,0x39,0x38,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d, + 0x36,0x2e,0x33,0x31,0x37,0x63,0x2d,0x32,0x2e,0x35, + 0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36, + 0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x32, + 0x30,0x32,0x2c,0x31,0x2e,0x34,0x35,0x20,0x20,0x20, + 0x20,0x63,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2c,0x30, + 0x2e,0x39,0x36,0x39,0x2d,0x34,0x2e,0x32,0x31,0x2c, + 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x39,0x30, + 0x31,0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x31, + 0x2e,0x36,0x39,0x35,0x2c,0x31,0x2e,0x36,0x35,0x37, + 0x2d,0x33,0x2e,0x30,0x32,0x33,0x2c,0x33,0x2e,0x36, + 0x30,0x39,0x2d,0x33,0x2e,0x39,0x39,0x31,0x2c,0x35, + 0x2e,0x38,0x35,0x33,0x63,0x2d,0x30,0x2e,0x39,0x36, + 0x36,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e, + 0x34,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d, + 0x31,0x2e,0x34,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39, + 0x39,0x76,0x37,0x37,0x2e,0x36,0x39,0x35,0x68,0x2d, + 0x31,0x32,0x2e,0x36,0x34,0x34,0x20,0x20,0x20,0x20, + 0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x35,0x63,0x30, + 0x2d,0x32,0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34, + 0x38,0x31,0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31, + 0x2e,0x34,0x34,0x39,0x2d,0x37,0x2e,0x31,0x39,0x39, + 0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e, + 0x32,0x34,0x33,0x2d,0x32,0x2e,0x32,0x39,0x36,0x2d, + 0x34,0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x38, + 0x37,0x2d,0x35,0x2e,0x38,0x35,0x33,0x63,0x2d,0x31, + 0x2e,0x36,0x39,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d, + 0x33,0x2e,0x36,0x35,0x38,0x2d,0x32,0x2e,0x39,0x37, + 0x2d,0x35,0x2e,0x39,0x30,0x35,0x2d,0x33,0x2e,0x39, + 0x33,0x38,0x20,0x20,0x20,0x20,0x63,0x2d,0x32,0x2e, + 0x32,0x34,0x32,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d, + 0x34,0x2e,0x36,0x34,0x33,0x2d,0x31,0x2e,0x34,0x35, + 0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34, + 0x35,0x68,0x2d,0x36,0x2e,0x33,0x31,0x37,0x63,0x2d, + 0x32,0x2e,0x35,0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e, + 0x39,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d, + 0x37,0x2e,0x31,0x39,0x38,0x2c,0x31,0x2e,0x34,0x35, + 0x63,0x2d,0x32,0x2e,0x32,0x34,0x37,0x2c,0x30,0x2e, + 0x39,0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x35,0x2c, + 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35, + 0x34,0x2c,0x33,0x2e,0x39,0x33,0x38,0x20,0x20,0x20, + 0x20,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x31, + 0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39,0x37,0x2c, + 0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e,0x39,0x33, + 0x36,0x2c,0x35,0x2e,0x38,0x35,0x33,0x63,0x2d,0x30, + 0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e,0x32,0x34,0x37, + 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34, + 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31, + 0x39,0x39,0x76,0x37,0x37,0x2e,0x36,0x39,0x35,0x68, + 0x2d,0x31,0x32,0x2e,0x37,0x34,0x56,0x32,0x33,0x37, + 0x2e,0x34,0x37,0x34,0x68,0x34,0x2e,0x32,0x34,0x34, + 0x6c,0x36,0x2e,0x39,0x34,0x32,0x2c,0x31,0x30,0x2e, + 0x37,0x37,0x33,0x20,0x20,0x20,0x20,0x63,0x32,0x2e, + 0x38,0x39,0x39,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c, + 0x36,0x2e,0x35,0x34,0x2d,0x37,0x2e,0x30,0x36,0x31, + 0x2c,0x31,0x30,0x2e,0x39,0x33,0x31,0x2d,0x39,0x2e, + 0x33,0x37,0x36,0x63,0x34,0x2e,0x33,0x38,0x32,0x2d, + 0x32,0x2e,0x33,0x31,0x32,0x2c,0x39,0x2e,0x31,0x36, + 0x36,0x2d,0x33,0x2e,0x34,0x37,0x31,0x2c,0x31,0x34, + 0x2e,0x33,0x34,0x34,0x2d,0x33,0x2e,0x34,0x37,0x31, + 0x68,0x31,0x2e,0x30,0x33,0x37,0x63,0x36,0x2e,0x30, + 0x30,0x39,0x2c,0x30,0x2c,0x31,0x31,0x2e,0x34,0x32, + 0x38,0x2c,0x31,0x2e,0x34,0x38,0x35,0x2c,0x31,0x36, + 0x2e,0x32,0x36,0x36,0x2c,0x34,0x2e,0x34,0x35,0x35, + 0x20,0x20,0x20,0x20,0x63,0x34,0x2e,0x38,0x33,0x33, 0x2c,0x32,0x2e,0x39,0x37,0x2c,0x38,0x2e,0x35,0x36, - 0x32,0x2c,0x36,0x2e,0x39,0x30,0x38,0x2c,0x31,0x31, - 0x2e,0x31,0x38,0x37,0x2c,0x31,0x31,0x2e,0x38,0x31, + 0x33,0x2c,0x36,0x2e,0x39,0x30,0x38,0x2c,0x31,0x31, + 0x2e,0x31,0x38,0x38,0x2c,0x31,0x31,0x2e,0x38,0x31, 0x31,0x63,0x31,0x2e,0x33,0x31,0x32,0x2d,0x32,0x2e, 0x34,0x31,0x39,0x2c,0x32,0x2e,0x39,0x33,0x36,0x2d, 0x34,0x2e,0x36,0x32,0x37,0x2c,0x34,0x2e,0x38,0x36, - 0x39,0x2d,0x36,0x2e,0x36,0x32,0x39,0x63,0x31,0x2e, - 0x39,0x33,0x33,0x2d,0x32,0x2e,0x30,0x30,0x35,0x2c, + 0x38,0x2d,0x36,0x2e,0x36,0x32,0x39,0x63,0x31,0x2e, + 0x39,0x33,0x34,0x2d,0x32,0x2e,0x30,0x30,0x35,0x2c, 0x34,0x2e,0x30,0x37,0x35,0x2d,0x33,0x2e,0x37,0x31, - 0x32,0x2c,0x36,0x2e,0x34,0x32,0x32,0x2d,0x35,0x2e, - 0x31,0x32,0x38,0x0a,0x09,0x09,0x63,0x32,0x2e,0x33, - 0x35,0x2d,0x31,0x2e,0x34,0x31,0x36,0x2c,0x34,0x2e, - 0x39,0x30,0x36,0x2d,0x32,0x2e,0x35,0x32,0x32,0x2c, - 0x37,0x2e,0x36,0x36,0x39,0x2d,0x33,0x2e,0x33,0x31, - 0x38,0x63,0x32,0x2e,0x37,0x36,0x2d,0x30,0x2e,0x37, - 0x39,0x32,0x2c,0x35,0x2e,0x36,0x32,0x36,0x2d,0x31, - 0x2e,0x31,0x39,0x2c,0x38,0x2e,0x35,0x39,0x36,0x2d, - 0x31,0x2e,0x31,0x39,0x68,0x31,0x2e,0x30,0x33,0x37, - 0x63,0x34,0x2e,0x32,0x37,0x39,0x2c,0x30,0x2c,0x38, - 0x2e,0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c, - 0x31,0x32,0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e,0x34, - 0x33,0x34,0x0a,0x09,0x09,0x63,0x33,0x2e,0x37,0x39, - 0x36,0x2c,0x31,0x2e,0x36,0x32,0x36,0x2c,0x37,0x2e, - 0x31,0x31,0x34,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39, - 0x2e,0x39,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x32, - 0x63,0x32,0x2e,0x38,0x32,0x38,0x2c,0x32,0x2e,0x38, - 0x33,0x32,0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c,0x36, - 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x33, - 0x2c,0x39,0x2e,0x39,0x34,0x37,0x63,0x31,0x2e,0x36, - 0x31,0x38,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32, - 0x2e,0x34,0x33,0x35,0x2c,0x37,0x2e,0x38,0x33,0x38, - 0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32,0x2e, - 0x31,0x32,0x76,0x37,0x36,0x2e,0x39,0x36,0x38,0x68, - 0x2d,0x31,0x32,0x2e,0x37,0x34,0x37,0x0a,0x09,0x09, - 0x56,0x33,0x34,0x33,0x2e,0x35,0x35,0x7a,0x22,0x2f, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x38,0x30,0x33,0x2e,0x33,0x34,0x33, - 0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x6c,0x2d,0x37, - 0x2e,0x30,0x34,0x36,0x2d,0x31,0x30,0x2e,0x37,0x37, - 0x33,0x63,0x2d,0x32,0x2e,0x39,0x30,0x31,0x2c,0x33, - 0x2e,0x39,0x33,0x38,0x2d,0x36,0x2e,0x35,0x32,0x35, - 0x2c,0x37,0x2e,0x30,0x36,0x31,0x2d,0x31,0x30,0x2e, - 0x38,0x37,0x38,0x2c,0x39,0x2e,0x33,0x37,0x36,0x63, + 0x32,0x2c,0x36,0x2e,0x34,0x32,0x33,0x2d,0x35,0x2e, + 0x31,0x32,0x38,0x20,0x20,0x20,0x20,0x63,0x32,0x2e, + 0x33,0x35,0x2d,0x31,0x2e,0x34,0x31,0x36,0x2c,0x34, + 0x2e,0x39,0x30,0x35,0x2d,0x32,0x2e,0x35,0x32,0x32, + 0x2c,0x37,0x2e,0x36,0x36,0x38,0x2d,0x33,0x2e,0x33, + 0x31,0x38,0x63,0x32,0x2e,0x37,0x36,0x31,0x2d,0x30, + 0x2e,0x37,0x39,0x32,0x2c,0x35,0x2e,0x36,0x32,0x37, + 0x2d,0x31,0x2e,0x31,0x39,0x2c,0x38,0x2e,0x35,0x39, + 0x37,0x2d,0x31,0x2e,0x31,0x39,0x68,0x31,0x2e,0x30, + 0x33,0x37,0x63,0x34,0x2e,0x32,0x37,0x38,0x2c,0x30, + 0x2c,0x38,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x38, + 0x31,0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x2c,0x32, + 0x2e,0x34,0x33,0x34,0x20,0x20,0x20,0x20,0x63,0x33, + 0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e,0x36,0x32,0x36, + 0x2c,0x37,0x2e,0x31,0x31,0x34,0x2c,0x33,0x2e,0x38, + 0x35,0x2c,0x39,0x2e,0x39,0x34,0x36,0x2c,0x36,0x2e, + 0x36,0x38,0x32,0x63,0x32,0x2e,0x38,0x32,0x38,0x2c, + 0x32,0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e,0x30,0x35, + 0x37,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e, + 0x36,0x38,0x34,0x2c,0x39,0x2e,0x39,0x34,0x37,0x63, + 0x31,0x2e,0x36,0x31,0x38,0x2c,0x33,0x2e,0x37,0x39, + 0x36,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c,0x37,0x2e, + 0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c, + 0x31,0x32,0x2e,0x31,0x32,0x76,0x37,0x36,0x2e,0x39, + 0x36,0x38,0x68,0x2d,0x31,0x32,0x2e,0x37,0x34,0x37, + 0x20,0x20,0x20,0x20,0x76,0x2d,0x30,0x2e,0x30,0x30, + 0x32,0x48,0x36,0x39,0x38,0x2e,0x35,0x30,0x36,0x7a, + 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, + 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, + 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, + 0x4d,0x38,0x30,0x33,0x2e,0x33,0x34,0x33,0x2c,0x33, + 0x34,0x33,0x2e,0x35,0x35,0x6c,0x2d,0x37,0x2e,0x30, + 0x34,0x36,0x2d,0x31,0x30,0x2e,0x37,0x37,0x33,0x63, + 0x2d,0x32,0x2e,0x39,0x2c,0x33,0x2e,0x39,0x33,0x38, + 0x2d,0x36,0x2e,0x35,0x32,0x35,0x2c,0x37,0x2e,0x30, + 0x36,0x31,0x2d,0x31,0x30,0x2e,0x38,0x37,0x38,0x2c, + 0x39,0x2e,0x33,0x37,0x36,0x20,0x20,0x20,0x20,0x63, 0x2d,0x34,0x2e,0x33,0x34,0x38,0x2c,0x32,0x2e,0x33, 0x31,0x32,0x2d,0x39,0x2e,0x31,0x31,0x35,0x2c,0x33, 0x2e,0x34,0x36,0x37,0x2d,0x31,0x34,0x2e,0x32,0x39, 0x34,0x2c,0x33,0x2e,0x34,0x36,0x37,0x68,0x2d,0x33, - 0x2e,0x32,0x31,0x31,0x0a,0x09,0x09,0x63,0x2d,0x34, - 0x2e,0x32,0x38,0x36,0x2c,0x30,0x2d,0x38,0x2e,0x33, - 0x32,0x33,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31, - 0x32,0x2e,0x31,0x32,0x2d,0x32,0x2e,0x34,0x33,0x34, - 0x63,0x2d,0x33,0x2e,0x38,0x30,0x31,0x2d,0x31,0x2e, - 0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x31,0x34,0x2d, - 0x33,0x2e,0x38,0x34,0x36,0x2d,0x39,0x2e,0x39,0x34, - 0x36,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63,0x2d,0x32, - 0x2e,0x38,0x33,0x32,0x2d,0x32,0x2e,0x38,0x32,0x38, - 0x2d,0x35,0x2e,0x30,0x36,0x31,0x2d,0x36,0x2e,0x31, - 0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x34,0x2d,0x39, - 0x2e,0x39,0x34,0x33,0x0a,0x09,0x09,0x63,0x2d,0x31, - 0x2e,0x36,0x32,0x32,0x2d,0x33,0x2e,0x37,0x39,0x36, - 0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x37,0x2e,0x38, - 0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31, - 0x32,0x2e,0x31,0x32,0x31,0x76,0x2d,0x37,0x36,0x2e, - 0x39,0x36,0x36,0x68,0x31,0x32,0x2e,0x37,0x34,0x34, - 0x76,0x37,0x37,0x2e,0x36,0x39,0x31,0x63,0x30,0x2c, - 0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38, - 0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e, - 0x34,0x34,0x36,0x2c,0x37,0x2e,0x32,0x30,0x32,0x0a, - 0x09,0x09,0x63,0x30,0x2e,0x39,0x36,0x39,0x2c,0x32, - 0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x38,0x2c, - 0x34,0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e,0x39,0x33, - 0x38,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x31,0x2e, - 0x36,0x35,0x37,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2c, - 0x33,0x2e,0x36,0x30,0x39,0x2c,0x32,0x2e,0x39,0x37, - 0x2c,0x35,0x2e,0x38,0x35,0x32,0x2c,0x33,0x2e,0x39, - 0x33,0x38,0x63,0x32,0x2e,0x32,0x34,0x32,0x2c,0x30, - 0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34,0x36, - 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x32, - 0x30,0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38, - 0x2e,0x34,0x39,0x36,0x0a,0x09,0x09,0x63,0x32,0x2e, + 0x2e,0x32,0x31,0x31,0x63,0x2d,0x34,0x2e,0x32,0x38, + 0x36,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32,0x33,0x2d, + 0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x31, + 0x32,0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d,0x33, + 0x2e,0x38,0x30,0x31,0x2d,0x31,0x2e,0x36,0x32,0x33, + 0x2d,0x37,0x2e,0x31,0x31,0x34,0x2d,0x33,0x2e,0x38, + 0x34,0x36,0x2d,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36, + 0x2e,0x36,0x38,0x32,0x20,0x20,0x20,0x20,0x63,0x2d, + 0x32,0x2e,0x38,0x33,0x32,0x2d,0x32,0x2e,0x38,0x32, + 0x38,0x2d,0x35,0x2e,0x30,0x36,0x31,0x2d,0x36,0x2e, + 0x31,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x34,0x2d, + 0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x31,0x2e,0x36, + 0x32,0x32,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32, + 0x2e,0x34,0x33,0x34,0x2d,0x37,0x2e,0x38,0x33,0x38, + 0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32,0x2e, + 0x31,0x32,0x31,0x76,0x2d,0x37,0x36,0x2e,0x39,0x36, + 0x36,0x68,0x31,0x32,0x2e,0x37,0x34,0x33,0x76,0x37, + 0x37,0x2e,0x36,0x39,0x31,0x20,0x20,0x20,0x20,0x63, + 0x30,0x2c,0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e, + 0x34,0x38,0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c, + 0x31,0x2e,0x34,0x34,0x36,0x2c,0x37,0x2e,0x32,0x30, + 0x32,0x63,0x30,0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e, + 0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x38,0x2c,0x34, + 0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e,0x39,0x33,0x38, + 0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x31,0x2e,0x36, + 0x35,0x37,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2c,0x33, + 0x2e,0x36,0x30,0x39,0x2c,0x32,0x2e,0x39,0x37,0x2c, + 0x35,0x2e,0x38,0x35,0x33,0x2c,0x33,0x2e,0x39,0x33, + 0x38,0x20,0x20,0x20,0x20,0x63,0x32,0x2e,0x32,0x34, + 0x32,0x2c,0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e, + 0x36,0x34,0x36,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c, + 0x37,0x2e,0x32,0x30,0x33,0x2c,0x31,0x2e,0x34,0x34, + 0x37,0x68,0x38,0x2e,0x34,0x39,0x36,0x63,0x32,0x2e, 0x35,0x34,0x39,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35, 0x32,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e, - 0x31,0x39,0x34,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63, + 0x31,0x39,0x33,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63, 0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36, 0x38,0x2c,0x34,0x2e,0x31,0x39,0x38,0x2d,0x32,0x2e, 0x32,0x38,0x31,0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d, - 0x33,0x2e,0x39,0x33,0x38,0x63,0x31,0x2e,0x36,0x35, - 0x37,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32,0x2e, - 0x39,0x37,0x31,0x2d,0x33,0x2e,0x36,0x30,0x39,0x2c, - 0x33,0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e,0x38,0x35, - 0x32,0x0a,0x09,0x09,0x63,0x30,0x2e,0x39,0x36,0x39, - 0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e,0x34, - 0x35,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31, - 0x2e,0x34,0x35,0x34,0x2d,0x37,0x2e,0x32,0x30,0x32, - 0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x31,0x68,0x31, - 0x32,0x2e,0x37,0x33,0x36,0x56,0x33,0x34,0x33,0x2e, - 0x35,0x35,0x48,0x38,0x30,0x33,0x2e,0x33,0x34,0x33, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x64,0x3d,0x22,0x4d,0x38,0x33,0x37,0x2e, - 0x33,0x31,0x39,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35, - 0x56,0x31,0x39,0x35,0x68,0x31,0x32,0x2e,0x37,0x34, - 0x76,0x31,0x34,0x38,0x2e,0x35,0x35,0x48,0x38,0x33, - 0x37,0x2e,0x33,0x31,0x39,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, - 0x4d,0x39,0x34,0x36,0x2e,0x34,0x30,0x34,0x2c,0x33, - 0x34,0x33,0x2e,0x35,0x35,0x6c,0x2d,0x37,0x2e,0x30, - 0x34,0x36,0x2d,0x31,0x30,0x2e,0x35,0x36,0x37,0x63, - 0x2d,0x32,0x2e,0x39,0x2c,0x33,0x2e,0x38,0x2d,0x36, - 0x2e,0x35,0x32,0x35,0x2c,0x36,0x2e,0x38,0x35,0x34, - 0x2d,0x31,0x30,0x2e,0x38,0x38,0x31,0x2c,0x39,0x2e, - 0x31,0x37,0x63,0x2d,0x34,0x2e,0x33,0x34,0x38,0x2c, - 0x32,0x2e,0x33,0x31,0x32,0x2d,0x39,0x2e,0x31,0x31, - 0x36,0x2c,0x33,0x2e,0x34,0x36,0x37,0x2d,0x31,0x34, - 0x2e,0x32,0x39,0x2c,0x33,0x2e,0x34,0x36,0x37,0x68, - 0x2d,0x33,0x2e,0x32,0x31,0x35,0x0a,0x09,0x09,0x63, - 0x2d,0x34,0x2e,0x32,0x38,0x32,0x2c,0x30,0x2d,0x38, - 0x2e,0x33,0x32,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d, - 0x31,0x32,0x2e,0x31,0x31,0x36,0x2d,0x32,0x2e,0x34, - 0x33,0x34,0x63,0x2d,0x33,0x2e,0x38,0x30,0x35,0x2d, - 0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x31, - 0x39,0x2d,0x33,0x2e,0x38,0x34,0x36,0x2d,0x39,0x2e, - 0x39,0x34,0x37,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63, - 0x2d,0x32,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x38, - 0x32,0x38,0x2d,0x35,0x2e,0x30,0x36,0x32,0x2d,0x36, - 0x2e,0x31,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x32, - 0x2d,0x39,0x2e,0x39,0x34,0x33,0x0a,0x09,0x09,0x63, + 0x33,0x2e,0x39,0x33,0x38,0x20,0x20,0x20,0x20,0x63, + 0x31,0x2e,0x36,0x35,0x37,0x2d,0x31,0x2e,0x36,0x35, + 0x37,0x2c,0x32,0x2e,0x39,0x37,0x31,0x2d,0x33,0x2e, + 0x36,0x30,0x39,0x2c,0x33,0x2e,0x39,0x33,0x36,0x2d, + 0x35,0x2e,0x38,0x35,0x32,0x63,0x30,0x2e,0x39,0x36, + 0x39,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e, + 0x34,0x35,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c, + 0x31,0x2e,0x34,0x35,0x34,0x2d,0x37,0x2e,0x32,0x30, + 0x32,0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x31,0x68, + 0x31,0x32,0x2e,0x37,0x33,0x36,0x56,0x33,0x34,0x33, + 0x2e,0x35,0x35,0x48,0x38,0x30,0x33,0x2e,0x33,0x34, + 0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x38,0x33,0x37,0x2e,0x33,0x31,0x39, + 0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x56,0x31,0x39, + 0x35,0x68,0x31,0x32,0x2e,0x37,0x33,0x39,0x76,0x31, + 0x34,0x38,0x2e,0x35,0x35,0x48,0x38,0x33,0x37,0x2e, + 0x33,0x31,0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x39,0x34,0x36,0x2e,0x34, + 0x30,0x34,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x6c, + 0x2d,0x37,0x2e,0x30,0x34,0x37,0x2d,0x31,0x30,0x2e, + 0x35,0x36,0x37,0x63,0x2d,0x32,0x2e,0x38,0x39,0x39, + 0x2c,0x33,0x2e,0x38,0x2d,0x36,0x2e,0x35,0x32,0x34, + 0x2c,0x36,0x2e,0x38,0x35,0x34,0x2d,0x31,0x30,0x2e, + 0x38,0x38,0x31,0x2c,0x39,0x2e,0x31,0x37,0x63,0x2d, + 0x34,0x2e,0x33,0x34,0x38,0x2c,0x32,0x2e,0x33,0x31, + 0x32,0x2d,0x39,0x2e,0x31,0x31,0x35,0x2c,0x33,0x2e, + 0x34,0x36,0x37,0x2d,0x31,0x34,0x2e,0x32,0x38,0x39, + 0x2c,0x33,0x2e,0x34,0x36,0x37,0x20,0x20,0x20,0x20, + 0x68,0x2d,0x33,0x2e,0x32,0x31,0x36,0x63,0x2d,0x34, + 0x2e,0x32,0x38,0x32,0x2c,0x30,0x2d,0x38,0x2e,0x33, + 0x31,0x39,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31, + 0x32,0x2e,0x31,0x31,0x36,0x2d,0x32,0x2e,0x34,0x33, + 0x34,0x63,0x2d,0x33,0x2e,0x38,0x30,0x35,0x2d,0x31, + 0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x31,0x38, + 0x2d,0x33,0x2e,0x38,0x34,0x36,0x2d,0x39,0x2e,0x39, + 0x34,0x36,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63,0x2d, + 0x32,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x38,0x32, + 0x38,0x2d,0x35,0x2e,0x30,0x36,0x33,0x2d,0x36,0x2e, + 0x31,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x33,0x2d, + 0x39,0x2e,0x39,0x34,0x33,0x20,0x20,0x20,0x20,0x63, 0x2d,0x31,0x2e,0x36,0x32,0x37,0x2d,0x33,0x2e,0x37, 0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x36,0x2d,0x37, 0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x36, @@ -771,124 +863,125 @@ const unsigned char splash_svg_data[17764] = { 0x2e,0x33,0x32,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2d, 0x31,0x32,0x2e,0x31,0x32,0x31,0x63,0x31,0x2e,0x36, 0x31,0x38,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2c,0x33, - 0x2e,0x38,0x34,0x36,0x2d,0x37,0x2e,0x31,0x31,0x31, - 0x2c,0x36,0x2e,0x36,0x38,0x32,0x2d,0x39,0x2e,0x39, - 0x34,0x33,0x0a,0x09,0x09,0x63,0x32,0x2e,0x38,0x32, - 0x38,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x36,0x2e, - 0x31,0x34,0x34,0x2d,0x35,0x2e,0x30,0x36,0x2c,0x39, - 0x2e,0x39,0x34,0x37,0x2d,0x36,0x2e,0x36,0x38,0x32, - 0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e,0x36, - 0x32,0x33,0x2c,0x37,0x2e,0x38,0x33,0x34,0x2d,0x32, - 0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31, - 0x36,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68,0x32,0x36, - 0x2e,0x39,0x33,0x36,0x76,0x2d,0x31,0x36,0x2e,0x33, - 0x36,0x38,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x33, - 0x2d,0x30,0x2e,0x34,0x38,0x31,0x2d,0x34,0x2e,0x39, - 0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, - 0x31,0x39,0x39,0x0a,0x09,0x09,0x63,0x2d,0x30,0x2e, - 0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d, - 0x32,0x2e,0x32,0x37,0x36,0x2d,0x34,0x2e,0x31,0x39, - 0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, - 0x38,0x35,0x32,0x63,0x2d,0x31,0x2e,0x36,0x35,0x33, - 0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x36, - 0x30,0x39,0x2d,0x32,0x2e,0x39,0x37,0x2d,0x35,0x2e, - 0x38,0x35,0x33,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63, - 0x2d,0x32,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e,0x39, - 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, - 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x38,0x2d, - 0x31,0x2e,0x34,0x35,0x68,0x2d,0x37,0x2e,0x34,0x35, - 0x39,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x35, - 0x38,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c, - 0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x31,0x39, - 0x38,0x2c,0x31,0x2e,0x34,0x35,0x63,0x2d,0x32,0x2e, - 0x32,0x34,0x37,0x2c,0x30,0x2e,0x39,0x36,0x39,0x2d, - 0x34,0x2e,0x31,0x39,0x35,0x2c,0x32,0x2e,0x32,0x38, - 0x31,0x2d,0x35,0x2e,0x38,0x35,0x36,0x2c,0x33,0x2e, - 0x39,0x33,0x38,0x63,0x2d,0x31,0x2e,0x36,0x35,0x32, - 0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39, - 0x37,0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e, - 0x39,0x33,0x34,0x2c,0x35,0x2e,0x38,0x35,0x32,0x0a, - 0x09,0x09,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2c, - 0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e,0x34,0x35, - 0x31,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, - 0x34,0x35,0x31,0x2c,0x37,0x2e,0x31,0x39,0x39,0x76, - 0x33,0x2e,0x38,0x33,0x35,0x6c,0x2d,0x31,0x32,0x2e, - 0x37,0x34,0x2d,0x32,0x2e,0x30,0x37,0x35,0x76,0x2d, - 0x31,0x2e,0x30,0x33,0x33,0x63,0x30,0x2d,0x34,0x2e, - 0x32,0x38,0x32,0x2c,0x30,0x2e,0x38,0x31,0x32,0x2d, - 0x38,0x2e,0x33,0x32,0x34,0x2c,0x32,0x2e,0x34,0x33, - 0x36,0x2d,0x31,0x32,0x2e,0x31,0x32,0x0a,0x09,0x09, - 0x63,0x31,0x2e,0x36,0x32,0x32,0x2d,0x33,0x2e,0x38, - 0x30,0x31,0x2c,0x33,0x2e,0x38,0x35,0x2d,0x37,0x2e, - 0x31,0x31,0x35,0x2c,0x36,0x2e,0x36,0x38,0x32,0x2d, - 0x39,0x2e,0x39,0x34,0x37,0x63,0x32,0x2e,0x38,0x32, - 0x38,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c,0x36,0x2e, - 0x31,0x34,0x36,0x2d,0x35,0x2e,0x30,0x35,0x36,0x2c, - 0x39,0x2e,0x39,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38, - 0x32,0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e, - 0x36,0x31,0x39,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d, + 0x2e,0x38,0x34,0x37,0x2d,0x37,0x2e,0x31,0x31,0x31, + 0x2c,0x36,0x2e,0x36,0x38,0x33,0x2d,0x39,0x2e,0x39, + 0x34,0x33,0x20,0x20,0x20,0x20,0x63,0x32,0x2e,0x38, + 0x32,0x38,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x36, + 0x2e,0x31,0x34,0x34,0x2d,0x35,0x2e,0x30,0x36,0x2c, + 0x39,0x2e,0x39,0x34,0x36,0x2d,0x36,0x2e,0x36,0x38, + 0x32,0x63,0x33,0x2e,0x37,0x39,0x37,0x2d,0x31,0x2e, + 0x36,0x32,0x33,0x2c,0x37,0x2e,0x38,0x33,0x34,0x2d, 0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31, - 0x32,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68,0x37,0x2e, - 0x34,0x35,0x39,0x0a,0x09,0x09,0x63,0x34,0x2e,0x32, - 0x37,0x38,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32,0x2e, - 0x31,0x31,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34,0x63, - 0x33,0x2e,0x38,0x2c,0x31,0x2e,0x36,0x32,0x36,0x2c, - 0x37,0x2e,0x31,0x31,0x33,0x2c,0x33,0x2e,0x38,0x35, - 0x2c,0x39,0x2e,0x39,0x34,0x39,0x2c,0x36,0x2e,0x36, - 0x38,0x32,0x63,0x32,0x2e,0x38,0x32,0x38,0x2c,0x32, - 0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e,0x30,0x35,0x37, - 0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36, - 0x38,0x2c,0x39,0x2e,0x39,0x34,0x37,0x0a,0x09,0x09, - 0x63,0x31,0x2e,0x36,0x32,0x32,0x2c,0x33,0x2e,0x37, - 0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x37, - 0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34, - 0x2c,0x31,0x32,0x2e,0x31,0x32,0x76,0x37,0x36,0x2e, - 0x39,0x36,0x38,0x48,0x39,0x34,0x36,0x2e,0x34,0x30, - 0x34,0x4c,0x39,0x34,0x36,0x2e,0x34,0x30,0x34,0x2c, - 0x33,0x34,0x33,0x2e,0x35,0x35,0x7a,0x20,0x4d,0x39, - 0x33,0x37,0x2e,0x39,0x30,0x37,0x2c,0x32,0x39,0x32, - 0x2e,0x31,0x36,0x37,0x68,0x2d,0x32,0x36,0x2e,0x39, - 0x33,0x36,0x63,0x2d,0x32,0x2e,0x35,0x35,0x38,0x2c, - 0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c,0x30,0x2e, - 0x34,0x38,0x36,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2c, - 0x31,0x2e,0x34,0x35,0x31,0x0a,0x09,0x09,0x63,0x2d, - 0x32,0x2e,0x32,0x34,0x36,0x2c,0x30,0x2e,0x39,0x36, - 0x38,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c,0x32,0x2e, - 0x32,0x39,0x36,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c, - 0x33,0x2e,0x39,0x38,0x38,0x63,0x2d,0x31,0x2e,0x36, - 0x36,0x31,0x2c,0x31,0x2e,0x36,0x39,0x35,0x2d,0x32, - 0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e,0x36,0x36,0x33, - 0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x39, - 0x30,0x35,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2c, - 0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e,0x34,0x35, - 0x31,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, - 0x34,0x35,0x31,0x2c,0x37,0x2e,0x32,0x30,0x33,0x76, - 0x34,0x2e,0x34,0x35,0x31,0x0a,0x09,0x09,0x63,0x30, - 0x2c,0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34, - 0x38,0x32,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31, - 0x2e,0x34,0x35,0x31,0x2c,0x37,0x2e,0x32,0x30,0x32, - 0x63,0x30,0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e,0x32, - 0x34,0x33,0x2c,0x32,0x2e,0x32,0x37,0x36,0x2c,0x34, - 0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e,0x39,0x33,0x38, - 0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x31,0x2e,0x36, - 0x35,0x36,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2c,0x33, - 0x2e,0x36,0x30,0x34,0x2c,0x32,0x2e,0x39,0x37,0x2c, - 0x35,0x2e,0x38,0x35,0x32,0x2c,0x33,0x2e,0x39,0x33, - 0x38,0x0a,0x09,0x09,0x63,0x32,0x2e,0x32,0x34,0x33, - 0x2c,0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36, - 0x34,0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37, - 0x2e,0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x34,0x37, - 0x68,0x38,0x2e,0x34,0x39,0x36,0x63,0x32,0x2e,0x35, - 0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x32, - 0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e,0x31, - 0x39,0x38,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32, - 0x2e,0x32,0x34,0x32,0x2d,0x30,0x2e,0x39,0x36,0x38, - 0x2c,0x34,0x2e,0x31,0x39,0x38,0x2d,0x32,0x2e,0x32, - 0x38,0x31,0x2c,0x35,0x2e,0x38,0x35,0x33,0x2d,0x33, - 0x2e,0x39,0x33,0x38,0x0a,0x09,0x09,0x63,0x31,0x2e, - 0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c, - 0x32,0x2e,0x39,0x37,0x2d,0x33,0x2e,0x36,0x30,0x39, + 0x31,0x36,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68,0x32, + 0x36,0x2e,0x39,0x33,0x37,0x76,0x2d,0x31,0x36,0x2e, + 0x33,0x36,0x38,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35, + 0x33,0x2d,0x30,0x2e,0x34,0x38,0x31,0x2d,0x34,0x2e, + 0x39,0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37, + 0x2e,0x31,0x39,0x39,0x20,0x20,0x20,0x20,0x63,0x2d, + 0x30,0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34, + 0x33,0x2d,0x32,0x2e,0x32,0x37,0x36,0x2d,0x34,0x2e, + 0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d, + 0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x31,0x2e,0x36, + 0x35,0x32,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33, + 0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37,0x2d, + 0x35,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e,0x39,0x33, + 0x38,0x63,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2d,0x30, + 0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36, + 0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39, + 0x38,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d,0x37,0x2e, + 0x34,0x35,0x39,0x20,0x20,0x20,0x20,0x63,0x2d,0x32, + 0x2e,0x35,0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e,0x39, + 0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37, + 0x2e,0x31,0x39,0x37,0x2c,0x31,0x2e,0x34,0x35,0x63, + 0x2d,0x32,0x2e,0x32,0x34,0x38,0x2c,0x30,0x2e,0x39, + 0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x35,0x2c,0x32, + 0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x36, + 0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x31,0x2e, + 0x36,0x35,0x32,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d, + 0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x30,0x39, + 0x2d,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35,0x2e,0x38, + 0x35,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x30,0x2e, + 0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d, + 0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36, + 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39, + 0x39,0x76,0x33,0x2e,0x38,0x33,0x35,0x6c,0x2d,0x31, + 0x32,0x2e,0x37,0x34,0x2d,0x32,0x2e,0x30,0x37,0x35, + 0x76,0x2d,0x31,0x2e,0x30,0x33,0x33,0x63,0x30,0x2d, + 0x34,0x2e,0x32,0x38,0x32,0x2c,0x30,0x2e,0x38,0x31, + 0x32,0x2d,0x38,0x2e,0x33,0x32,0x34,0x2c,0x32,0x2e, + 0x34,0x33,0x36,0x2d,0x31,0x32,0x2e,0x31,0x32,0x20, + 0x20,0x20,0x20,0x63,0x31,0x2e,0x36,0x32,0x32,0x2d, + 0x33,0x2e,0x38,0x30,0x31,0x2c,0x33,0x2e,0x38,0x35, + 0x31,0x2d,0x37,0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e, + 0x36,0x38,0x33,0x2d,0x39,0x2e,0x39,0x34,0x37,0x63, + 0x32,0x2e,0x38,0x32,0x38,0x2d,0x32,0x2e,0x38,0x33, + 0x33,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2d,0x35,0x2e, + 0x30,0x35,0x36,0x2c,0x39,0x2e,0x39,0x34,0x32,0x2d, + 0x36,0x2e,0x36,0x38,0x32,0x63,0x33,0x2e,0x37,0x39, + 0x36,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x37,0x2e, + 0x38,0x33,0x39,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2c, + 0x31,0x32,0x2e,0x31,0x32,0x2d,0x32,0x2e,0x34,0x33, + 0x34,0x68,0x37,0x2e,0x34,0x35,0x39,0x20,0x20,0x20, + 0x20,0x63,0x34,0x2e,0x32,0x37,0x38,0x2c,0x30,0x2c, + 0x38,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x38,0x31, + 0x35,0x2c,0x31,0x32,0x2e,0x31,0x31,0x37,0x2c,0x32, + 0x2e,0x34,0x33,0x34,0x63,0x33,0x2e,0x38,0x2c,0x31, + 0x2e,0x36,0x32,0x36,0x2c,0x37,0x2e,0x31,0x31,0x33, + 0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39,0x34, + 0x39,0x2c,0x36,0x2e,0x36,0x38,0x32,0x63,0x32,0x2e, + 0x38,0x32,0x38,0x2c,0x32,0x2e,0x38,0x33,0x32,0x2c, + 0x35,0x2e,0x30,0x35,0x37,0x2c,0x36,0x2e,0x31,0x34, + 0x36,0x2c,0x36,0x2e,0x36,0x38,0x2c,0x39,0x2e,0x39, + 0x34,0x37,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x36, + 0x32,0x32,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32, + 0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38, + 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, + 0x31,0x32,0x76,0x37,0x36,0x2e,0x39,0x36,0x38,0x48, + 0x39,0x34,0x36,0x2e,0x34,0x30,0x34,0x4c,0x39,0x34, + 0x36,0x2e,0x34,0x30,0x34,0x2c,0x33,0x34,0x33,0x2e, + 0x35,0x35,0x7a,0x20,0x4d,0x39,0x33,0x37,0x2e,0x39, + 0x30,0x37,0x2c,0x32,0x39,0x32,0x2e,0x31,0x36,0x37, + 0x68,0x2d,0x32,0x36,0x2e,0x39,0x33,0x37,0x63,0x2d, + 0x32,0x2e,0x35,0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e, + 0x39,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d, + 0x37,0x2e,0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x35, + 0x31,0x20,0x20,0x20,0x20,0x63,0x2d,0x32,0x2e,0x32, + 0x34,0x35,0x2c,0x30,0x2e,0x39,0x36,0x38,0x2d,0x34, + 0x2e,0x31,0x39,0x33,0x2c,0x32,0x2e,0x32,0x39,0x36, + 0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c,0x33,0x2e,0x39, + 0x38,0x38,0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c, + 0x31,0x2e,0x36,0x39,0x35,0x2d,0x32,0x2e,0x39,0x37, + 0x31,0x2c,0x33,0x2e,0x36,0x36,0x33,0x2d,0x33,0x2e, + 0x39,0x33,0x38,0x2c,0x35,0x2e,0x39,0x30,0x35,0x63, + 0x2d,0x30,0x2e,0x39,0x37,0x2c,0x32,0x2e,0x32,0x34, + 0x37,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x34,0x2e, + 0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c, + 0x37,0x2e,0x32,0x30,0x33,0x76,0x34,0x2e,0x34,0x35, + 0x31,0x20,0x20,0x20,0x20,0x63,0x30,0x2c,0x32,0x2e, + 0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2c, + 0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e,0x34,0x35, + 0x31,0x2c,0x37,0x2e,0x32,0x30,0x32,0x63,0x30,0x2e, + 0x39,0x36,0x38,0x2c,0x32,0x2e,0x32,0x34,0x33,0x2c, + 0x32,0x2e,0x32,0x37,0x35,0x2c,0x34,0x2e,0x31,0x39, + 0x35,0x2c,0x33,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e, + 0x38,0x35,0x32,0x63,0x31,0x2e,0x36,0x35,0x36,0x2c, + 0x31,0x2e,0x36,0x35,0x37,0x2c,0x33,0x2e,0x36,0x30, + 0x34,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e,0x38, + 0x35,0x32,0x2c,0x33,0x2e,0x39,0x33,0x38,0x20,0x20, + 0x20,0x20,0x63,0x32,0x2e,0x32,0x34,0x33,0x2c,0x30, + 0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34,0x34, + 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x31, + 0x39,0x39,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38, + 0x2e,0x34,0x39,0x36,0x63,0x32,0x2e,0x35,0x35,0x33, + 0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x32,0x2d,0x30, + 0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e,0x31,0x39,0x38, + 0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32,0x2e,0x32, + 0x34,0x32,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c,0x34, + 0x2e,0x31,0x39,0x38,0x2d,0x32,0x2e,0x32,0x38,0x31, + 0x2c,0x35,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e,0x39, + 0x33,0x38,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x36, + 0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32, + 0x2e,0x39,0x37,0x31,0x2d,0x33,0x2e,0x36,0x30,0x39, 0x2c,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38, 0x35,0x32,0x63,0x30,0x2e,0x39,0x36,0x39,0x2d,0x32, 0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35,0x2d, @@ -897,41 +990,43 @@ const unsigned char splash_svg_data[17764] = { 0x2e,0x39,0x30,0x37,0x2c,0x32,0x39,0x32,0x2e,0x31, 0x36,0x37,0x4c,0x39,0x33,0x37,0x2e,0x39,0x30,0x37, 0x2c,0x32,0x39,0x32,0x2e,0x31,0x36,0x37,0x7a,0x22, - 0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x64,0x3d,0x22,0x4d,0x31,0x30,0x31,0x34,0x2e,0x37, - 0x37,0x32,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x63, - 0x2d,0x33,0x2e,0x38,0x36,0x35,0x2c,0x30,0x2d,0x37, - 0x2e,0x35,0x30,0x39,0x2d,0x30,0x2e,0x37,0x32,0x34, - 0x2d,0x31,0x30,0x2e,0x39,0x33,0x31,0x2d,0x32,0x2e, - 0x31,0x37,0x34,0x63,0x2d,0x33,0x2e,0x34,0x31,0x38, - 0x2d,0x31,0x2e,0x34,0x35,0x31,0x2d,0x36,0x2e,0x33, - 0x38,0x39,0x2d,0x33,0x2e,0x34,0x35,0x36,0x2d,0x38, - 0x2e,0x39,0x30,0x39,0x2d,0x36,0x2e,0x30,0x30,0x39, - 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x32,0x2d, - 0x32,0x2e,0x35,0x35,0x37,0x2d,0x34,0x2e,0x35,0x32, - 0x34,0x2d,0x35,0x2e,0x35,0x32,0x36,0x2d,0x36,0x2e, - 0x30,0x30,0x39,0x2d,0x38,0x2e,0x39,0x31,0x63,0x2d, - 0x31,0x2e,0x34,0x38,0x35,0x2d,0x33,0x2e,0x33,0x38, - 0x33,0x2d,0x32,0x2e,0x32,0x32,0x35,0x2d,0x37,0x2e, - 0x30,0x30,0x37,0x2d,0x32,0x2e,0x32,0x32,0x35,0x2d, - 0x31,0x30,0x2e,0x38,0x37,0x36,0x56,0x32,0x34,0x39, - 0x2e,0x35,0x39,0x68,0x2d,0x31,0x39,0x2e,0x30,0x36, - 0x32,0x76,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x68, - 0x31,0x39,0x2e,0x30,0x36,0x32,0x76,0x2d,0x32,0x35, - 0x2e,0x34,0x38,0x35,0x6c,0x31,0x32,0x2e,0x37,0x34, - 0x2d,0x32,0x2e,0x30,0x37,0x0a,0x09,0x09,0x76,0x32, - 0x37,0x2e,0x35,0x35,0x35,0x68,0x32,0x36,0x2e,0x39, - 0x33,0x36,0x76,0x31,0x32,0x2e,0x31,0x31,0x36,0x68, - 0x2d,0x32,0x36,0x2e,0x39,0x33,0x36,0x76,0x36,0x36, - 0x2e,0x36,0x31,0x31,0x63,0x30,0x2c,0x32,0x2e,0x31, - 0x34,0x33,0x2c,0x30,0x2e,0x33,0x39,0x38,0x2c,0x34, - 0x2e,0x31,0x32,0x39,0x2c,0x31,0x2e,0x31,0x39,0x34, - 0x2c,0x35,0x2e,0x39,0x35,0x35,0x63,0x30,0x2e,0x37, - 0x38,0x38,0x2c,0x31,0x2e,0x38,0x33,0x33,0x2c,0x31, - 0x2e,0x38,0x37,0x39,0x2c,0x33,0x2e,0x34,0x33,0x37, - 0x2c,0x33,0x2e,0x32,0x36,0x31,0x2c,0x34,0x2e,0x38, - 0x31,0x38,0x0a,0x09,0x09,0x63,0x31,0x2e,0x33,0x38, - 0x32,0x2c,0x31,0x2e,0x33,0x38,0x31,0x2c,0x33,0x2e, + 0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x31,0x30,0x31,0x34,0x2e,0x37,0x37,0x31,0x2c,0x33, + 0x34,0x33,0x2e,0x35,0x35,0x63,0x2d,0x33,0x2e,0x38, + 0x36,0x34,0x2c,0x30,0x2d,0x37,0x2e,0x35,0x30,0x39, + 0x2d,0x30,0x2e,0x37,0x32,0x34,0x2d,0x31,0x30,0x2e, + 0x39,0x33,0x31,0x2d,0x32,0x2e,0x31,0x37,0x34,0x63, + 0x2d,0x33,0x2e,0x34,0x31,0x38,0x2d,0x31,0x2e,0x34, + 0x35,0x31,0x2d,0x36,0x2e,0x33,0x38,0x39,0x2d,0x33, + 0x2e,0x34,0x35,0x36,0x2d,0x38,0x2e,0x39,0x30,0x39, + 0x2d,0x36,0x2e,0x30,0x30,0x39,0x20,0x20,0x20,0x20, + 0x63,0x2d,0x32,0x2e,0x35,0x32,0x2d,0x32,0x2e,0x35, + 0x35,0x37,0x2d,0x34,0x2e,0x35,0x32,0x33,0x2d,0x35, + 0x2e,0x35,0x32,0x36,0x2d,0x36,0x2e,0x30,0x30,0x39, + 0x2d,0x38,0x2e,0x39,0x31,0x63,0x2d,0x31,0x2e,0x34, + 0x38,0x35,0x2d,0x33,0x2e,0x33,0x38,0x33,0x2d,0x32, + 0x2e,0x32,0x32,0x35,0x2d,0x37,0x2e,0x30,0x30,0x37, + 0x2d,0x32,0x2e,0x32,0x32,0x35,0x2d,0x31,0x30,0x2e, + 0x38,0x37,0x36,0x56,0x32,0x34,0x39,0x2e,0x35,0x39, + 0x68,0x2d,0x31,0x39,0x2e,0x30,0x36,0x33,0x76,0x2d, + 0x31,0x32,0x2e,0x31,0x31,0x36,0x68,0x31,0x39,0x2e, + 0x30,0x36,0x33,0x76,0x2d,0x32,0x35,0x2e,0x34,0x38, + 0x35,0x6c,0x31,0x32,0x2e,0x37,0x33,0x39,0x2d,0x32, + 0x2e,0x30,0x37,0x20,0x20,0x20,0x20,0x76,0x32,0x37, + 0x2e,0x35,0x35,0x35,0x68,0x32,0x36,0x2e,0x39,0x33, + 0x37,0x76,0x31,0x32,0x2e,0x31,0x31,0x36,0x68,0x2d, + 0x32,0x36,0x2e,0x39,0x33,0x37,0x76,0x36,0x36,0x2e, + 0x36,0x31,0x31,0x63,0x30,0x2c,0x32,0x2e,0x31,0x34, + 0x33,0x2c,0x30,0x2e,0x33,0x39,0x38,0x2c,0x34,0x2e, + 0x31,0x32,0x39,0x2c,0x31,0x2e,0x31,0x39,0x34,0x2c, + 0x35,0x2e,0x39,0x35,0x35,0x63,0x30,0x2e,0x37,0x38, + 0x38,0x2c,0x31,0x2e,0x38,0x33,0x33,0x2c,0x31,0x2e, + 0x38,0x37,0x39,0x2c,0x33,0x2e,0x34,0x33,0x37,0x2c, + 0x33,0x2e,0x32,0x36,0x31,0x2c,0x34,0x2e,0x38,0x31, + 0x38,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x33,0x38, + 0x33,0x2c,0x31,0x2e,0x33,0x38,0x31,0x2c,0x33,0x2e, 0x30,0x30,0x34,0x2c,0x32,0x2e,0x34,0x37,0x32,0x2c, 0x34,0x2e,0x38,0x36,0x38,0x2c,0x33,0x2e,0x32,0x36, 0x34,0x63,0x31,0x2e,0x38,0x36,0x36,0x2c,0x30,0x2e, @@ -939,80 +1034,84 @@ const unsigned char splash_svg_data[17764] = { 0x31,0x2e,0x31,0x38,0x39,0x2c,0x36,0x2e,0x30,0x30, 0x39,0x2c,0x31,0x2e,0x31,0x38,0x39,0x68,0x31,0x31, 0x2e,0x36,0x30,0x34,0x76,0x31,0x32,0x2e,0x31,0x32, - 0x31,0x4c,0x31,0x30,0x31,0x34,0x2e,0x37,0x37,0x32, + 0x31,0x4c,0x31,0x30,0x31,0x34,0x2e,0x37,0x37,0x31, 0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x4c,0x31,0x30, - 0x31,0x34,0x2e,0x37,0x37,0x32,0x2c,0x33,0x34,0x33, - 0x2e,0x35,0x35,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x30,0x35,0x32,0x2e,0x39,0x39,0x36,0x2c,0x32,0x31, - 0x31,0x2e,0x39,0x38,0x39,0x56,0x31,0x39,0x35,0x68, - 0x31,0x34,0x2e,0x38,0x31,0x35,0x76,0x31,0x36,0x2e, - 0x39,0x38,0x39,0x48,0x31,0x30,0x35,0x32,0x2e,0x39, - 0x39,0x36,0x7a,0x20,0x4d,0x31,0x30,0x35,0x34,0x2e, - 0x30,0x33,0x33,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35, - 0x56,0x32,0x33,0x37,0x2e,0x34,0x37,0x34,0x68,0x31, - 0x32,0x2e,0x37,0x34,0x31,0x56,0x33,0x34,0x33,0x2e, - 0x35,0x35,0x48,0x31,0x30,0x35,0x34,0x2e,0x30,0x33, - 0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x31,0x36, - 0x34,0x2e,0x39,0x33,0x2c,0x33,0x32,0x36,0x2e,0x35, - 0x36,0x32,0x63,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2c, - 0x33,0x2e,0x38,0x2d,0x33,0x2e,0x38,0x35,0x32,0x2c, - 0x37,0x2e,0x31,0x31,0x35,0x2d,0x36,0x2e,0x36,0x37, - 0x39,0x2c,0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x32, - 0x2e,0x38,0x33,0x37,0x2c,0x32,0x2e,0x38,0x33,0x36, - 0x2d,0x36,0x2e,0x31,0x35,0x2c,0x35,0x2e,0x30,0x36, - 0x2d,0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x36,0x38, - 0x32,0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x37,0x39, - 0x37,0x2c,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e, - 0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2d, - 0x31,0x32,0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e,0x34, - 0x33,0x34,0x68,0x2d,0x38,0x2e,0x34,0x39,0x36,0x63, - 0x2d,0x34,0x2e,0x32,0x38,0x32,0x2c,0x30,0x2d,0x38, - 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x38,0x31,0x32, - 0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x2d,0x32,0x2e, - 0x34,0x33,0x34,0x63,0x2d,0x33,0x2e,0x38,0x30,0x35, - 0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31, - 0x31,0x39,0x2d,0x33,0x2e,0x38,0x34,0x36,0x2d,0x39, - 0x2e,0x39,0x34,0x36,0x2d,0x36,0x2e,0x36,0x38,0x32, - 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x38,0x33,0x37, - 0x2d,0x32,0x2e,0x38,0x32,0x38,0x2d,0x35,0x2e,0x30, - 0x36,0x32,0x2d,0x36,0x2e,0x31,0x34,0x33,0x2d,0x36, - 0x2e,0x36,0x38,0x33,0x2d,0x39,0x2e,0x39,0x34,0x33, - 0x63,0x2d,0x31,0x2e,0x36,0x32,0x37,0x2d,0x33,0x2e, - 0x37,0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d, - 0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33, - 0x35,0x2d,0x31,0x32,0x2e,0x31,0x32,0x31,0x76,0x2d, - 0x34,0x37,0x2e,0x38,0x35,0x38,0x63,0x30,0x2d,0x34, - 0x2e,0x32,0x38,0x32,0x2c,0x30,0x2e,0x38,0x30,0x38, - 0x2d,0x38,0x2e,0x33,0x32,0x34,0x2c,0x32,0x2e,0x34, - 0x33,0x35,0x2d,0x31,0x32,0x2e,0x31,0x32,0x0a,0x09, - 0x09,0x63,0x31,0x2e,0x36,0x31,0x39,0x2d,0x33,0x2e, - 0x38,0x30,0x31,0x2c,0x33,0x2e,0x38,0x34,0x36,0x2d, - 0x37,0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e,0x36,0x38, - 0x33,0x2d,0x39,0x2e,0x39,0x34,0x37,0x63,0x32,0x2e, - 0x38,0x32,0x37,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c, - 0x36,0x2e,0x31,0x34,0x33,0x2d,0x35,0x2e,0x30,0x35, - 0x36,0x2c,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36,0x2e, - 0x36,0x38,0x32,0x63,0x33,0x2e,0x37,0x39,0x37,0x2d, - 0x31,0x2e,0x36,0x31,0x39,0x2c,0x37,0x2e,0x38,0x33, - 0x34,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32, - 0x2e,0x31,0x31,0x36,0x2d,0x32,0x2e,0x34,0x33,0x34, - 0x68,0x38,0x2e,0x34,0x39,0x36,0x0a,0x09,0x09,0x63, - 0x34,0x2e,0x32,0x37,0x39,0x2c,0x30,0x2c,0x38,0x2e, - 0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31, - 0x32,0x2e,0x31,0x31,0x37,0x2c,0x32,0x2e,0x34,0x33, - 0x34,0x63,0x33,0x2e,0x38,0x2c,0x31,0x2e,0x36,0x32, - 0x36,0x2c,0x37,0x2e,0x31,0x31,0x34,0x2c,0x33,0x2e, - 0x38,0x35,0x2c,0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e, - 0x36,0x38,0x32,0x63,0x32,0x2e,0x38,0x32,0x37,0x2c, - 0x32,0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e,0x30,0x35, - 0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e, - 0x36,0x37,0x39,0x2c,0x39,0x2e,0x39,0x34,0x37,0x0a, - 0x09,0x09,0x63,0x31,0x2e,0x36,0x32,0x32,0x2c,0x33, - 0x2e,0x37,0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34, + 0x31,0x34,0x2e,0x37,0x37,0x31,0x2c,0x33,0x34,0x33, + 0x2e,0x35,0x35,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09, + 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, + 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, + 0x20,0x64,0x3d,0x22,0x4d,0x31,0x30,0x35,0x32,0x2e, + 0x39,0x39,0x36,0x2c,0x32,0x31,0x31,0x2e,0x39,0x38, + 0x39,0x56,0x31,0x39,0x35,0x68,0x31,0x34,0x2e,0x38, + 0x31,0x34,0x76,0x31,0x36,0x2e,0x39,0x38,0x39,0x48, + 0x31,0x30,0x35,0x32,0x2e,0x39,0x39,0x36,0x7a,0x20, + 0x4d,0x31,0x30,0x35,0x34,0x2e,0x30,0x33,0x33,0x2c, + 0x33,0x34,0x33,0x2e,0x35,0x35,0x56,0x32,0x33,0x37, + 0x2e,0x34,0x37,0x34,0x68,0x31,0x32,0x2e,0x37,0x34, + 0x56,0x33,0x34,0x33,0x2e,0x35,0x35,0x48,0x31,0x30, + 0x35,0x34,0x2e,0x30,0x33,0x33,0x7a,0x22,0x2f,0x3e, + 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, + 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, + 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x31, + 0x36,0x34,0x2e,0x39,0x33,0x2c,0x33,0x32,0x36,0x2e, + 0x35,0x36,0x32,0x63,0x2d,0x31,0x2e,0x36,0x32,0x33, + 0x2c,0x33,0x2e,0x38,0x2d,0x33,0x2e,0x38,0x35,0x32, + 0x2c,0x37,0x2e,0x31,0x31,0x35,0x2d,0x36,0x2e,0x36, + 0x37,0x39,0x2c,0x39,0x2e,0x39,0x34,0x33,0x63,0x2d, + 0x32,0x2e,0x38,0x33,0x37,0x2c,0x32,0x2e,0x38,0x33, + 0x36,0x2d,0x36,0x2e,0x31,0x34,0x39,0x2c,0x35,0x2e, + 0x30,0x36,0x2d,0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e, + 0x36,0x38,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x33, + 0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e,0x36,0x32,0x33, + 0x2d,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34, + 0x33,0x34,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x2c, + 0x32,0x2e,0x34,0x33,0x34,0x68,0x2d,0x38,0x2e,0x34, + 0x39,0x36,0x63,0x2d,0x34,0x2e,0x32,0x38,0x32,0x2c, + 0x30,0x2d,0x38,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e, + 0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36, + 0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d,0x33,0x2e, + 0x38,0x30,0x35,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d, + 0x37,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x38,0x34, + 0x36,0x2d,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36,0x2e, + 0x36,0x38,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x32, + 0x2e,0x38,0x33,0x37,0x2d,0x32,0x2e,0x38,0x32,0x38, + 0x2d,0x35,0x2e,0x30,0x36,0x32,0x2d,0x36,0x2e,0x31, + 0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x33,0x2d,0x39, + 0x2e,0x39,0x34,0x33,0x63,0x2d,0x31,0x2e,0x36,0x32, + 0x37,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32,0x2e, + 0x34,0x33,0x36,0x2d,0x37,0x2e,0x38,0x33,0x38,0x2d, + 0x32,0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e,0x31, + 0x32,0x31,0x76,0x2d,0x34,0x37,0x2e,0x38,0x35,0x38, + 0x63,0x30,0x2d,0x34,0x2e,0x32,0x38,0x32,0x2c,0x30, + 0x2e,0x38,0x30,0x39,0x2d,0x38,0x2e,0x33,0x32,0x34, + 0x2c,0x32,0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e, + 0x31,0x32,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x36, + 0x31,0x39,0x2d,0x33,0x2e,0x38,0x30,0x31,0x2c,0x33, + 0x2e,0x38,0x34,0x36,0x2d,0x37,0x2e,0x31,0x31,0x35, + 0x2c,0x36,0x2e,0x36,0x38,0x33,0x2d,0x39,0x2e,0x39, + 0x34,0x37,0x63,0x32,0x2e,0x38,0x32,0x37,0x2d,0x32, + 0x2e,0x38,0x33,0x33,0x2c,0x36,0x2e,0x31,0x34,0x34, + 0x2d,0x35,0x2e,0x30,0x35,0x36,0x2c,0x39,0x2e,0x39, + 0x34,0x36,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63,0x33, + 0x2e,0x37,0x39,0x37,0x2d,0x31,0x2e,0x36,0x31,0x39, + 0x2c,0x37,0x2e,0x38,0x33,0x34,0x2d,0x32,0x2e,0x34, + 0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31,0x36,0x2d, + 0x32,0x2e,0x34,0x33,0x34,0x68,0x38,0x2e,0x34,0x39, + 0x36,0x20,0x20,0x20,0x20,0x63,0x34,0x2e,0x32,0x37, + 0x38,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x31,0x39,0x2c, + 0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32,0x2e,0x31, + 0x31,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34,0x63,0x33, + 0x2e,0x38,0x30,0x31,0x2c,0x31,0x2e,0x36,0x32,0x36, + 0x2c,0x37,0x2e,0x31,0x31,0x34,0x2c,0x33,0x2e,0x38, + 0x35,0x2c,0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x36, + 0x38,0x32,0x63,0x32,0x2e,0x38,0x32,0x37,0x2c,0x32, + 0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e,0x30,0x35,0x36, + 0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36, + 0x37,0x39,0x2c,0x39,0x2e,0x39,0x34,0x37,0x20,0x20, + 0x20,0x20,0x63,0x31,0x2e,0x36,0x32,0x32,0x2c,0x33, + 0x2e,0x37,0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x35, 0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34, - 0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x32,0x76,0x34, + 0x33,0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x76,0x34, 0x37,0x2e,0x38,0x35,0x38,0x43,0x31,0x31,0x36,0x37, 0x2e,0x33,0x36,0x33,0x2c,0x33,0x31,0x38,0x2e,0x37, 0x32,0x34,0x2c,0x31,0x31,0x36,0x36,0x2e,0x35,0x35, @@ -1020,199 +1119,204 @@ const unsigned char splash_svg_data[17764] = { 0x31,0x31,0x36,0x34,0x2e,0x39,0x33,0x2c,0x33,0x32, 0x36,0x2e,0x35,0x36,0x32,0x7a,0x20,0x4d,0x31,0x31, 0x35,0x34,0x2e,0x36,0x32,0x32,0x2c,0x32,0x36,0x35, - 0x2e,0x38,0x35,0x35,0x0a,0x09,0x09,0x63,0x30,0x2d, - 0x32,0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38, - 0x31,0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e, - 0x34,0x34,0x39,0x2d,0x37,0x2e,0x31,0x39,0x39,0x63, - 0x2d,0x30,0x2e,0x39,0x37,0x2d,0x32,0x2e,0x32,0x34, - 0x33,0x2d,0x32,0x2e,0x32,0x37,0x37,0x2d,0x34,0x2e, - 0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d, - 0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x31,0x2e,0x36, - 0x35,0x33,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33, - 0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37,0x2d, - 0x35,0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e,0x39,0x33, - 0x38,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34, - 0x36,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e, - 0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37, - 0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x68, - 0x2d,0x38,0x2e,0x34,0x39,0x36,0x63,0x2d,0x32,0x2e, - 0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35, - 0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e, - 0x31,0x39,0x38,0x2c,0x31,0x2e,0x34,0x35,0x63,0x2d, - 0x32,0x2e,0x32,0x34,0x37,0x2c,0x30,0x2e,0x39,0x36, - 0x39,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c,0x32,0x2e, - 0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c, - 0x33,0x2e,0x39,0x33,0x38,0x0a,0x09,0x09,0x63,0x2d, - 0x31,0x2e,0x36,0x36,0x31,0x2c,0x31,0x2e,0x36,0x35, - 0x37,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e, - 0x36,0x30,0x39,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c, - 0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x30,0x2e,0x39, - 0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d,0x31, - 0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d, - 0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39,0x39, - 0x76,0x34,0x39,0x2e,0x33,0x30,0x39,0x63,0x30,0x2c, - 0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38, - 0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e, - 0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x0a,0x09, - 0x09,0x63,0x30,0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e, - 0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x37,0x37,0x2c, - 0x34,0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e,0x39,0x33, - 0x38,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x31,0x2e, - 0x36,0x35,0x36,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2c, - 0x33,0x2e,0x36,0x30,0x34,0x2c,0x32,0x2e,0x39,0x37, - 0x2c,0x35,0x2e,0x38,0x35,0x32,0x2c,0x33,0x2e,0x39, - 0x33,0x38,0x63,0x32,0x2e,0x32,0x34,0x32,0x2c,0x30, - 0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34,0x33, - 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x31, - 0x39,0x38,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38, - 0x2e,0x34,0x39,0x36,0x0a,0x09,0x09,0x63,0x32,0x2e, - 0x35,0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35, - 0x33,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e, - 0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63, - 0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36, - 0x38,0x2c,0x34,0x2e,0x31,0x39,0x37,0x2d,0x32,0x2e, - 0x32,0x38,0x31,0x2c,0x35,0x2e,0x38,0x35,0x32,0x2d, - 0x33,0x2e,0x39,0x33,0x38,0x63,0x31,0x2e,0x36,0x36, - 0x31,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32,0x2e, - 0x39,0x37,0x2d,0x33,0x2e,0x36,0x30,0x39,0x2c,0x33, - 0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38,0x35,0x32, - 0x0a,0x09,0x09,0x63,0x30,0x2e,0x39,0x36,0x38,0x2d, - 0x32,0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e,0x34,0x34, - 0x39,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e, - 0x34,0x34,0x39,0x2d,0x37,0x2e,0x32,0x30,0x32,0x56, - 0x32,0x36,0x35,0x2e,0x38,0x35,0x35,0x7a,0x22,0x2f, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, + 0x2e,0x38,0x35,0x35,0x20,0x20,0x20,0x20,0x63,0x30, + 0x2d,0x32,0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34, + 0x38,0x31,0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31, + 0x2e,0x34,0x34,0x39,0x2d,0x37,0x2e,0x31,0x39,0x39, + 0x63,0x2d,0x30,0x2e,0x39,0x37,0x2d,0x32,0x2e,0x32, + 0x34,0x33,0x2d,0x32,0x2e,0x32,0x37,0x36,0x2d,0x34, + 0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38, + 0x2d,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x31,0x2e, + 0x36,0x35,0x33,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d, + 0x33,0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37, + 0x2d,0x35,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e,0x39, + 0x33,0x38,0x20,0x20,0x20,0x20,0x63,0x2d,0x32,0x2e, + 0x32,0x34,0x36,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d, + 0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35, + 0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34, + 0x35,0x68,0x2d,0x38,0x2e,0x34,0x39,0x36,0x63,0x2d, + 0x32,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e, + 0x39,0x35,0x35,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d, + 0x37,0x2e,0x31,0x39,0x37,0x2c,0x31,0x2e,0x34,0x35, + 0x63,0x2d,0x32,0x2e,0x32,0x34,0x37,0x2c,0x30,0x2e, + 0x39,0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c, + 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35, + 0x33,0x2c,0x33,0x2e,0x39,0x33,0x38,0x20,0x20,0x20, + 0x20,0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x31, + 0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39,0x37,0x31, + 0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e,0x39, + 0x33,0x38,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d, + 0x30,0x2e,0x39,0x37,0x2c,0x32,0x2e,0x32,0x34,0x37, + 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34, + 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31, + 0x39,0x39,0x76,0x34,0x39,0x2e,0x33,0x30,0x39,0x63, + 0x30,0x2c,0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e, + 0x34,0x38,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31, + 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x20, + 0x20,0x20,0x20,0x63,0x30,0x2e,0x39,0x36,0x38,0x2c, + 0x32,0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x37, + 0x36,0x2c,0x34,0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e, + 0x39,0x33,0x38,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63, + 0x31,0x2e,0x36,0x35,0x36,0x2c,0x31,0x2e,0x36,0x35, + 0x37,0x2c,0x33,0x2e,0x36,0x30,0x34,0x2c,0x32,0x2e, + 0x39,0x37,0x2c,0x35,0x2e,0x38,0x35,0x33,0x2c,0x33, + 0x2e,0x39,0x33,0x38,0x63,0x32,0x2e,0x32,0x34,0x32, + 0x2c,0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36, + 0x34,0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37, + 0x2e,0x31,0x39,0x37,0x2c,0x31,0x2e,0x34,0x34,0x37, + 0x68,0x38,0x2e,0x34,0x39,0x36,0x20,0x20,0x20,0x20, + 0x63,0x32,0x2e,0x35,0x35,0x34,0x2c,0x30,0x2c,0x34, + 0x2e,0x39,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x32, + 0x2c,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34, + 0x34,0x37,0x63,0x32,0x2e,0x32,0x34,0x33,0x2d,0x30, + 0x2e,0x39,0x36,0x38,0x2c,0x34,0x2e,0x31,0x39,0x37, + 0x2d,0x32,0x2e,0x32,0x38,0x31,0x2c,0x35,0x2e,0x38, + 0x35,0x33,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63,0x31, + 0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x37, + 0x2c,0x32,0x2e,0x39,0x37,0x2d,0x33,0x2e,0x36,0x30, + 0x39,0x2c,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, + 0x38,0x35,0x32,0x20,0x20,0x20,0x20,0x63,0x30,0x2e, + 0x39,0x36,0x38,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c, + 0x31,0x2e,0x34,0x34,0x39,0x2d,0x34,0x2e,0x36,0x34, + 0x36,0x2c,0x31,0x2e,0x34,0x34,0x39,0x2d,0x37,0x2e, + 0x32,0x30,0x32,0x56,0x32,0x36,0x35,0x2e,0x38,0x35, + 0x35,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, 0x3d,0x22,0x4d,0x31,0x32,0x35,0x30,0x2e,0x39,0x36, 0x34,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x76,0x2d, 0x37,0x37,0x2e,0x36,0x39,0x35,0x63,0x30,0x2d,0x32, - 0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x36, + 0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x35, 0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e,0x34, 0x35,0x31,0x2d,0x37,0x2e,0x31,0x39,0x39,0x63,0x2d, 0x30,0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34, 0x33,0x2d,0x32,0x2e,0x32,0x38,0x2d,0x34,0x2e,0x31, 0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x35,0x2d,0x35, - 0x2e,0x38,0x35,0x32,0x0a,0x09,0x09,0x63,0x2d,0x31, - 0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x37, - 0x2d,0x33,0x2e,0x36,0x31,0x32,0x2d,0x32,0x2e,0x39, - 0x37,0x2d,0x35,0x2e,0x38,0x35,0x35,0x2d,0x33,0x2e, - 0x39,0x33,0x38,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32, - 0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36, - 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, - 0x31,0x39,0x38,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d, - 0x38,0x2e,0x34,0x39,0x32,0x63,0x2d,0x32,0x2e,0x35, - 0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x36,0x2c, - 0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x32,0x30, - 0x33,0x2c,0x31,0x2e,0x34,0x35,0x0a,0x09,0x09,0x63, - 0x2d,0x32,0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x39, - 0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x33,0x2c,0x32, - 0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x34, - 0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x31,0x2e, - 0x36,0x35,0x33,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d, - 0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x30,0x39, - 0x2d,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35,0x2e,0x38, - 0x35,0x32,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2c, - 0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e,0x34,0x35, - 0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34, - 0x35,0x2c,0x37,0x2e,0x31,0x39,0x39,0x76,0x37,0x37, - 0x2e,0x36,0x39,0x35,0x68,0x2d,0x31,0x32,0x2e,0x37, - 0x34,0x0a,0x09,0x09,0x56,0x32,0x33,0x37,0x2e,0x34, - 0x37,0x34,0x68,0x34,0x2e,0x32,0x34,0x38,0x6c,0x36, - 0x2e,0x39,0x33,0x38,0x2c,0x31,0x30,0x2e,0x37,0x37, - 0x33,0x63,0x32,0x2e,0x39,0x2d,0x33,0x2e,0x39,0x33, - 0x38,0x2c,0x36,0x2e,0x35,0x34,0x31,0x2d,0x37,0x2e, - 0x30,0x36,0x31,0x2c,0x31,0x30,0x2e,0x39,0x33,0x31, - 0x2d,0x39,0x2e,0x33,0x37,0x36,0x63,0x34,0x2e,0x33, - 0x38,0x32,0x2d,0x32,0x2e,0x33,0x31,0x32,0x2c,0x39, - 0x2e,0x31,0x36,0x36,0x2d,0x33,0x2e,0x34,0x37,0x31, - 0x2c,0x31,0x34,0x2e,0x33,0x34,0x38,0x2d,0x33,0x2e, - 0x34,0x37,0x31,0x68,0x33,0x2e,0x32,0x31,0x31,0x0a, - 0x09,0x09,0x63,0x34,0x2e,0x32,0x38,0x32,0x2c,0x30, - 0x2c,0x38,0x2e,0x33,0x32,0x2c,0x30,0x2e,0x38,0x31, - 0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x2c,0x32,0x2e, - 0x34,0x33,0x34,0x63,0x33,0x2e,0x37,0x39,0x37,0x2c, - 0x31,0x2e,0x36,0x32,0x36,0x2c,0x37,0x2e,0x31,0x31, - 0x31,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39, - 0x34,0x33,0x2c,0x36,0x2e,0x36,0x38,0x32,0x73,0x35, - 0x2e,0x30,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c, - 0x36,0x2e,0x36,0x38,0x32,0x2c,0x39,0x2e,0x39,0x34, - 0x37,0x63,0x31,0x2e,0x36,0x32,0x33,0x2c,0x33,0x2e, - 0x37,0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2c, - 0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33, - 0x36,0x2c,0x31,0x32,0x2e,0x31,0x32,0x0a,0x09,0x09, - 0x76,0x37,0x36,0x2e,0x39,0x36,0x38,0x4c,0x31,0x32, - 0x35,0x30,0x2e,0x39,0x36,0x34,0x2c,0x33,0x34,0x33, - 0x2e,0x35,0x35,0x4c,0x31,0x32,0x35,0x30,0x2e,0x39, - 0x36,0x34,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x64,0x3d,0x22,0x4d,0x35,0x36,0x33,0x2e,0x31, - 0x30,0x39,0x2c,0x34,0x39,0x36,0x2e,0x32,0x35,0x38, - 0x63,0x30,0x2c,0x34,0x2e,0x32,0x37,0x38,0x2d,0x30, - 0x2e,0x38,0x36,0x35,0x2c,0x38,0x2e,0x31,0x39,0x38, - 0x2d,0x32,0x2e,0x35,0x38,0x37,0x2c,0x31,0x31,0x2e, - 0x37,0x35,0x37,0x63,0x2d,0x31,0x2e,0x37,0x32,0x39, - 0x2c,0x33,0x2e,0x35,0x36,0x31,0x2d,0x34,0x2e,0x30, - 0x37,0x36,0x2c,0x36,0x2e,0x36,0x31,0x33,0x2d,0x37, - 0x2e,0x30,0x34,0x36,0x2c,0x39,0x2e,0x31,0x37,0x0a, - 0x09,0x09,0x63,0x2d,0x32,0x2e,0x39,0x37,0x2c,0x32, - 0x2e,0x35,0x35,0x38,0x2d,0x36,0x2e,0x34,0x30,0x36, - 0x2c,0x34,0x2e,0x35,0x33,0x39,0x2d,0x31,0x30,0x2e, - 0x33,0x30,0x37,0x2c,0x35,0x2e,0x39,0x35,0x35,0x63, - 0x2d,0x33,0x2e,0x39,0x30,0x33,0x2c,0x31,0x2e,0x34, - 0x31,0x36,0x2d,0x37,0x2e,0x39,0x39,0x35,0x2c,0x32, - 0x2e,0x31,0x32,0x2d,0x31,0x32,0x2e,0x32,0x37,0x37, - 0x2c,0x32,0x2e,0x31,0x32,0x48,0x35,0x32,0x32,0x2e, - 0x34,0x63,0x2d,0x34,0x2e,0x32,0x38,0x33,0x2c,0x30, - 0x2d,0x38,0x2e,0x33,0x37,0x37,0x2d,0x30,0x2e,0x38, - 0x31,0x32,0x2d,0x31,0x32,0x2e,0x32,0x37,0x37,0x2d, - 0x32,0x2e,0x34,0x33,0x34,0x0a,0x09,0x09,0x63,0x2d, - 0x33,0x2e,0x39,0x30,0x33,0x2d,0x31,0x2e,0x36,0x32, - 0x33,0x2d,0x37,0x2e,0x33,0x32,0x2d,0x33,0x2e,0x38, - 0x34,0x33,0x2d,0x31,0x30,0x2e,0x32,0x35,0x37,0x2d, - 0x36,0x2e,0x36,0x38,0x33,0x63,0x2d,0x32,0x2e,0x39, - 0x33,0x36,0x2d,0x32,0x2e,0x38,0x32,0x34,0x2d,0x35, - 0x2e,0x32,0x38,0x2d,0x36,0x2e,0x31,0x34,0x2d,0x37, - 0x2e,0x30,0x34,0x32,0x2d,0x39,0x2e,0x39,0x34,0x33, - 0x63,0x2d,0x31,0x2e,0x37,0x36,0x2d,0x33,0x2e,0x37, - 0x39,0x37,0x2d,0x32,0x2e,0x36,0x34,0x31,0x2d,0x37, - 0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x36,0x34,0x31, - 0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x76,0x2d,0x34, - 0x2e,0x32,0x34,0x38,0x0a,0x09,0x09,0x6c,0x31,0x32, - 0x2e,0x37,0x34,0x2d,0x32,0x2e,0x30,0x37,0x34,0x76, - 0x37,0x2e,0x30,0x34,0x32,0x63,0x30,0x2c,0x32,0x2e, - 0x35,0x35,0x37,0x2c,0x30,0x2e,0x35,0x33,0x31,0x2c, - 0x34,0x2e,0x39,0x36,0x31,0x2c,0x31,0x2e,0x36,0x30, - 0x34,0x2c,0x37,0x2e,0x32,0x30,0x32,0x63,0x31,0x2e, - 0x30,0x37,0x31,0x2c,0x32,0x2e,0x32,0x34,0x33,0x2c, - 0x32,0x2e,0x35,0x30,0x33,0x2c,0x34,0x2e,0x31,0x39, - 0x34,0x2c,0x34,0x2e,0x33,0x30,0x31,0x2c,0x35,0x2e, - 0x38,0x35,0x34,0x63,0x31,0x2e,0x37,0x39,0x35,0x2c, - 0x31,0x2e,0x36,0x35,0x34,0x2c,0x33,0x2e,0x38,0x36, - 0x36,0x2c,0x32,0x2e,0x39,0x37,0x31,0x2c,0x36,0x2e, - 0x32,0x31,0x37,0x2c,0x33,0x2e,0x39,0x33,0x36,0x0a, - 0x09,0x09,0x63,0x32,0x2e,0x33,0x34,0x36,0x2c,0x30, - 0x2e,0x39,0x36,0x35,0x2c,0x34,0x2e,0x37,0x39,0x39, - 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x33, - 0x35,0x34,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38, - 0x2e,0x34,0x39,0x32,0x63,0x32,0x2e,0x35,0x35,0x37, - 0x2c,0x30,0x2c,0x35,0x2e,0x30,0x30,0x36,0x2d,0x30, - 0x2e,0x33,0x37,0x36,0x2c,0x37,0x2e,0x33,0x35,0x35, - 0x2d,0x31,0x2e,0x31,0x33,0x35,0x63,0x32,0x2e,0x33, - 0x34,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35,0x2c,0x34, - 0x2e,0x34,0x33,0x37,0x2d,0x31,0x2e,0x38,0x35,0x32, - 0x2c,0x36,0x2e,0x32,0x37,0x2d,0x33,0x2e,0x32,0x36, - 0x38,0x0a,0x09,0x09,0x63,0x31,0x2e,0x38,0x32,0x39, - 0x2d,0x31,0x2e,0x34,0x31,0x36,0x2c,0x33,0x2e,0x32, - 0x38,0x2d,0x33,0x2e,0x31,0x32,0x33,0x2c,0x34,0x2e, - 0x33,0x35,0x31,0x2d,0x35,0x2e,0x31,0x32,0x39,0x63, - 0x31,0x2e,0x30,0x36,0x38,0x2d,0x31,0x2e,0x39,0x39, - 0x37,0x2c,0x31,0x2e,0x36,0x30,0x34,0x2d,0x34,0x2e, - 0x32,0x37,0x37,0x2c,0x31,0x2e,0x36,0x30,0x34,0x2d, - 0x36,0x2e,0x38,0x33,0x35,0x63,0x30,0x2d,0x33,0x2e, - 0x37,0x39,0x37,0x2d,0x30,0x2e,0x38,0x32,0x37,0x2d, - 0x36,0x2e,0x39,0x30,0x33,0x2d,0x32,0x2e,0x34,0x38, - 0x38,0x2d,0x39,0x2e,0x33,0x32,0x33,0x0a,0x09,0x09, - 0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e, - 0x34,0x31,0x39,0x2d,0x33,0x2e,0x38,0x35,0x2d,0x34, + 0x2e,0x38,0x35,0x33,0x20,0x20,0x20,0x20,0x63,0x2d, + 0x31,0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35, + 0x37,0x2d,0x33,0x2e,0x36,0x31,0x32,0x2d,0x32,0x2e, + 0x39,0x37,0x2d,0x35,0x2e,0x38,0x35,0x35,0x2d,0x33, + 0x2e,0x39,0x33,0x38,0x63,0x2d,0x32,0x2e,0x32,0x34, + 0x32,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e, + 0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37, + 0x2e,0x31,0x39,0x37,0x2d,0x31,0x2e,0x34,0x35,0x68, + 0x2d,0x38,0x2e,0x34,0x39,0x32,0x63,0x2d,0x32,0x2e, + 0x35,0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x36, + 0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x32, + 0x30,0x33,0x2c,0x31,0x2e,0x34,0x35,0x20,0x20,0x20, + 0x20,0x63,0x2d,0x32,0x2e,0x32,0x34,0x31,0x2c,0x30, + 0x2e,0x39,0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x33, + 0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38, + 0x35,0x34,0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d, + 0x31,0x2e,0x36,0x35,0x32,0x2c,0x31,0x2e,0x36,0x35, + 0x37,0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36, + 0x30,0x39,0x2d,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35, + 0x2e,0x38,0x35,0x33,0x63,0x2d,0x30,0x2e,0x39,0x36, + 0x39,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e, + 0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39,0x39,0x76, + 0x37,0x37,0x2e,0x36,0x39,0x35,0x68,0x2d,0x31,0x32, + 0x2e,0x37,0x34,0x20,0x20,0x20,0x20,0x56,0x32,0x33, + 0x37,0x2e,0x34,0x37,0x34,0x68,0x34,0x2e,0x32,0x34, + 0x38,0x6c,0x36,0x2e,0x39,0x33,0x38,0x2c,0x31,0x30, + 0x2e,0x37,0x37,0x33,0x63,0x32,0x2e,0x39,0x2d,0x33, + 0x2e,0x39,0x33,0x38,0x2c,0x36,0x2e,0x35,0x34,0x31, + 0x2d,0x37,0x2e,0x30,0x36,0x31,0x2c,0x31,0x30,0x2e, + 0x39,0x33,0x31,0x2d,0x39,0x2e,0x33,0x37,0x36,0x63, + 0x34,0x2e,0x33,0x38,0x32,0x2d,0x32,0x2e,0x33,0x31, + 0x32,0x2c,0x39,0x2e,0x31,0x36,0x36,0x2d,0x33,0x2e, + 0x34,0x37,0x31,0x2c,0x31,0x34,0x2e,0x33,0x34,0x39, + 0x2d,0x33,0x2e,0x34,0x37,0x31,0x68,0x33,0x2e,0x32, + 0x31,0x31,0x20,0x20,0x20,0x20,0x63,0x34,0x2e,0x32, + 0x38,0x31,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x31,0x39, + 0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32,0x2e, + 0x31,0x32,0x2c,0x32,0x2e,0x34,0x33,0x34,0x63,0x33, + 0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e,0x36,0x32,0x36, + 0x2c,0x37,0x2e,0x31,0x31,0x2c,0x33,0x2e,0x38,0x35, + 0x2c,0x39,0x2e,0x39,0x34,0x32,0x2c,0x36,0x2e,0x36, + 0x38,0x32,0x73,0x35,0x2e,0x30,0x36,0x31,0x2c,0x36, + 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x33, + 0x2c,0x39,0x2e,0x39,0x34,0x37,0x20,0x20,0x20,0x20, + 0x63,0x31,0x2e,0x36,0x32,0x33,0x2c,0x33,0x2e,0x37, + 0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2c,0x37, + 0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x36, + 0x2c,0x31,0x32,0x2e,0x31,0x32,0x76,0x37,0x36,0x2e, + 0x39,0x36,0x38,0x4c,0x31,0x32,0x35,0x30,0x2e,0x39, + 0x36,0x34,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x4c, + 0x31,0x32,0x35,0x30,0x2e,0x39,0x36,0x34,0x2c,0x33, + 0x34,0x33,0x2e,0x35,0x35,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, + 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x35,0x36,0x33, + 0x2e,0x31,0x30,0x39,0x2c,0x34,0x39,0x36,0x2e,0x32, + 0x35,0x38,0x63,0x30,0x2c,0x34,0x2e,0x32,0x37,0x38, + 0x2d,0x30,0x2e,0x38,0x36,0x35,0x2c,0x38,0x2e,0x31, + 0x39,0x38,0x2d,0x32,0x2e,0x35,0x38,0x38,0x2c,0x31, + 0x31,0x2e,0x37,0x35,0x37,0x63,0x2d,0x31,0x2e,0x37, + 0x32,0x39,0x2c,0x33,0x2e,0x35,0x36,0x32,0x2d,0x34, + 0x2e,0x30,0x37,0x35,0x2c,0x36,0x2e,0x36,0x31,0x33, + 0x2d,0x37,0x2e,0x30,0x34,0x35,0x2c,0x39,0x2e,0x31, + 0x37,0x20,0x20,0x20,0x20,0x63,0x2d,0x32,0x2e,0x39, + 0x37,0x31,0x2c,0x32,0x2e,0x35,0x35,0x39,0x2d,0x36, + 0x2e,0x34,0x30,0x36,0x2c,0x34,0x2e,0x35,0x33,0x39, + 0x2d,0x31,0x30,0x2e,0x33,0x30,0x38,0x2c,0x35,0x2e, + 0x39,0x35,0x35,0x63,0x2d,0x33,0x2e,0x39,0x30,0x33, + 0x2c,0x31,0x2e,0x34,0x31,0x36,0x2d,0x37,0x2e,0x39, + 0x39,0x35,0x2c,0x32,0x2e,0x31,0x32,0x2d,0x31,0x32, + 0x2e,0x32,0x37,0x36,0x2c,0x32,0x2e,0x31,0x32,0x48, + 0x35,0x32,0x32,0x2e,0x34,0x63,0x2d,0x34,0x2e,0x32, + 0x38,0x33,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x37,0x37, + 0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e, + 0x32,0x37,0x37,0x2d,0x32,0x2e,0x34,0x33,0x34,0x20, + 0x20,0x20,0x20,0x63,0x2d,0x33,0x2e,0x39,0x30,0x33, + 0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x33, + 0x32,0x2d,0x33,0x2e,0x38,0x34,0x33,0x2d,0x31,0x30, + 0x2e,0x32,0x35,0x37,0x2d,0x36,0x2e,0x36,0x38,0x34, + 0x63,0x2d,0x32,0x2e,0x39,0x33,0x37,0x2d,0x32,0x2e, + 0x38,0x32,0x33,0x2d,0x35,0x2e,0x32,0x38,0x2d,0x36, + 0x2e,0x31,0x34,0x2d,0x37,0x2e,0x30,0x34,0x32,0x2d, + 0x39,0x2e,0x39,0x34,0x32,0x63,0x2d,0x31,0x2e,0x37, + 0x36,0x2d,0x33,0x2e,0x37,0x39,0x37,0x2d,0x32,0x2e, + 0x36,0x34,0x31,0x2d,0x37,0x2e,0x38,0x33,0x38,0x2d, + 0x32,0x2e,0x36,0x34,0x31,0x2d,0x31,0x32,0x2e,0x31, + 0x31,0x36,0x76,0x2d,0x34,0x2e,0x32,0x34,0x38,0x20, + 0x20,0x20,0x20,0x6c,0x31,0x32,0x2e,0x37,0x33,0x39, + 0x2d,0x32,0x2e,0x30,0x37,0x34,0x76,0x37,0x2e,0x30, + 0x34,0x32,0x63,0x30,0x2c,0x32,0x2e,0x35,0x35,0x38, + 0x2c,0x30,0x2e,0x35,0x33,0x31,0x2c,0x34,0x2e,0x39, + 0x36,0x31,0x2c,0x31,0x2e,0x36,0x30,0x34,0x2c,0x37, + 0x2e,0x32,0x30,0x32,0x63,0x31,0x2e,0x30,0x37,0x2c, + 0x32,0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e,0x35,0x30, + 0x33,0x2c,0x34,0x2e,0x31,0x39,0x34,0x2c,0x34,0x2e, + 0x33,0x30,0x31,0x2c,0x35,0x2e,0x38,0x35,0x34,0x63, + 0x31,0x2e,0x37,0x39,0x35,0x2c,0x31,0x2e,0x36,0x35, + 0x33,0x2c,0x33,0x2e,0x38,0x36,0x36,0x2c,0x32,0x2e, + 0x39,0x37,0x31,0x2c,0x36,0x2e,0x32,0x31,0x37,0x2c, + 0x33,0x2e,0x39,0x33,0x36,0x20,0x20,0x20,0x20,0x63, + 0x32,0x2e,0x33,0x34,0x36,0x2c,0x30,0x2e,0x39,0x36, + 0x35,0x2c,0x34,0x2e,0x37,0x39,0x39,0x2c,0x31,0x2e, + 0x34,0x34,0x37,0x2c,0x37,0x2e,0x33,0x35,0x34,0x2c, + 0x31,0x2e,0x34,0x34,0x37,0x68,0x38,0x2e,0x34,0x39, + 0x31,0x63,0x32,0x2e,0x35,0x35,0x38,0x2c,0x30,0x2c, + 0x35,0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37, + 0x36,0x2c,0x37,0x2e,0x33,0x35,0x35,0x2d,0x31,0x2e, + 0x31,0x33,0x35,0x63,0x32,0x2e,0x33,0x34,0x37,0x2d, + 0x30,0x2e,0x37,0x36,0x36,0x2c,0x34,0x2e,0x34,0x33, + 0x38,0x2d,0x31,0x2e,0x38,0x35,0x33,0x2c,0x36,0x2e, + 0x32,0x37,0x2d,0x33,0x2e,0x32,0x36,0x39,0x20,0x20, + 0x20,0x20,0x63,0x31,0x2e,0x38,0x32,0x39,0x2d,0x31, + 0x2e,0x34,0x31,0x36,0x2c,0x33,0x2e,0x32,0x38,0x2d, + 0x33,0x2e,0x31,0x32,0x33,0x2c,0x34,0x2e,0x33,0x35, + 0x32,0x2d,0x35,0x2e,0x31,0x32,0x39,0x63,0x31,0x2e, + 0x30,0x36,0x38,0x2d,0x31,0x2e,0x39,0x39,0x37,0x2c, + 0x31,0x2e,0x36,0x30,0x34,0x2d,0x34,0x2e,0x32,0x37, + 0x37,0x2c,0x31,0x2e,0x36,0x30,0x34,0x2d,0x36,0x2e, + 0x38,0x33,0x35,0x63,0x30,0x2d,0x33,0x2e,0x37,0x39, + 0x37,0x2d,0x30,0x2e,0x38,0x32,0x36,0x2d,0x36,0x2e, + 0x39,0x30,0x33,0x2d,0x32,0x2e,0x34,0x38,0x37,0x2d, + 0x39,0x2e,0x33,0x32,0x33,0x20,0x20,0x20,0x20,0x63, + 0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x34, + 0x31,0x39,0x2d,0x33,0x2e,0x38,0x35,0x31,0x2d,0x34, 0x2e,0x34,0x33,0x38,0x2d,0x36,0x2e,0x35,0x37,0x35, 0x2d,0x36,0x2e,0x30,0x36,0x32,0x63,0x2d,0x32,0x2e, 0x37,0x32,0x39,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d, @@ -1220,566 +1324,588 @@ const unsigned char splash_svg_data[17764] = { 0x34,0x2d,0x39,0x2e,0x33,0x32,0x32,0x2d,0x34,0x2e, 0x30,0x33,0x34,0x63,0x2d,0x33,0x2e,0x34,0x39,0x2d, 0x31,0x2e,0x30,0x37,0x31,0x2d,0x37,0x2e,0x30,0x36, - 0x35,0x2d,0x32,0x2e,0x31,0x34,0x35,0x2d,0x31,0x30, + 0x34,0x2d,0x32,0x2e,0x31,0x34,0x35,0x2d,0x31,0x30, 0x2e,0x37,0x32,0x35,0x2d,0x33,0x2e,0x32,0x31,0x35, - 0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x36,0x36,0x33, - 0x2d,0x31,0x2e,0x30,0x37,0x31,0x2d,0x37,0x2e,0x32, - 0x33,0x36,0x2d,0x32,0x2e,0x32,0x39,0x36,0x2d,0x31, - 0x30,0x2e,0x37,0x32,0x34,0x2d,0x33,0x2e,0x36,0x37, - 0x34,0x63,0x2d,0x33,0x2e,0x34,0x38,0x36,0x2d,0x31, - 0x2e,0x33,0x38,0x37,0x2d,0x36,0x2e,0x35,0x39,0x34, - 0x2d,0x33,0x2e,0x32,0x2d,0x39,0x2e,0x33,0x32,0x33, - 0x2d,0x35,0x2e,0x34,0x34,0x32,0x63,0x2d,0x32,0x2e, - 0x37,0x32,0x39,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d, - 0x34,0x2e,0x39,0x31,0x38,0x2d,0x35,0x2e,0x30,0x36, - 0x2d,0x36,0x2e,0x35,0x37,0x35,0x2d,0x38,0x2e,0x34, - 0x34,0x32,0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e,0x36, - 0x36,0x31,0x2d,0x33,0x2e,0x33,0x38,0x34,0x2d,0x32, - 0x2e,0x34,0x38,0x37,0x2d,0x37,0x2e,0x35,0x39,0x33, - 0x2d,0x32,0x2e,0x34,0x38,0x37,0x2d,0x31,0x32,0x2e, - 0x36,0x33,0x38,0x63,0x30,0x2d,0x34,0x2e,0x32,0x37, - 0x38,0x2c,0x30,0x2e,0x38,0x32,0x36,0x2d,0x38,0x2e, - 0x31,0x39,0x36,0x2c,0x32,0x2e,0x34,0x38,0x37,0x2d, - 0x31,0x31,0x2e,0x37,0x35,0x37,0x63,0x31,0x2e,0x36, - 0x35,0x37,0x2d,0x33,0x2e,0x35,0x36,0x31,0x2c,0x33, - 0x2e,0x39,0x2d,0x36,0x2e,0x36,0x31,0x33,0x2c,0x36, - 0x2e,0x37,0x33,0x32,0x2d,0x39,0x2e,0x31,0x37,0x0a, - 0x09,0x09,0x73,0x36,0x2e,0x31,0x32,0x37,0x2d,0x34, - 0x2e,0x35,0x33,0x39,0x2c,0x39,0x2e,0x38,0x39,0x33, - 0x2d,0x35,0x2e,0x39,0x35,0x35,0x63,0x33,0x2e,0x37, - 0x36,0x33,0x2d,0x31,0x2e,0x34,0x31,0x36,0x2c,0x37, - 0x2e,0x37,0x38,0x35,0x2d,0x32,0x2e,0x31,0x32,0x38, - 0x2c,0x31,0x32,0x2e,0x30,0x36,0x37,0x2d,0x32,0x2e, - 0x31,0x32,0x38,0x68,0x37,0x2e,0x34,0x35,0x39,0x63, - 0x34,0x2e,0x32,0x38,0x33,0x2c,0x30,0x2c,0x38,0x2e, - 0x33,0x32,0x34,0x2c,0x30,0x2e,0x38,0x31,0x39,0x2c, - 0x31,0x32,0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e,0x34, - 0x33,0x35,0x0a,0x09,0x09,0x63,0x33,0x2e,0x37,0x39, - 0x36,0x2c,0x31,0x2e,0x36,0x33,0x31,0x2c,0x37,0x2e, - 0x31,0x31,0x35,0x2c,0x33,0x2e,0x38,0x35,0x31,0x2c, - 0x39,0x2e,0x39,0x34,0x37,0x2c,0x36,0x2e,0x36,0x38, - 0x32,0x63,0x32,0x2e,0x38,0x32,0x37,0x2c,0x32,0x2e, - 0x38,0x33,0x34,0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c, - 0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38, - 0x32,0x2c,0x39,0x2e,0x39,0x35,0x31,0x63,0x31,0x2e, - 0x36,0x31,0x39,0x2c,0x33,0x2e,0x37,0x39,0x37,0x2c, - 0x32,0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33, - 0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32, - 0x2e,0x31,0x31,0x37,0x76,0x30,0x2e,0x34,0x31,0x33, - 0x0a,0x09,0x09,0x6c,0x2d,0x31,0x32,0x2e,0x37,0x34, - 0x34,0x2c,0x32,0x2e,0x30,0x37,0x34,0x76,0x2d,0x33, - 0x2e,0x32,0x31,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35, - 0x35,0x2d,0x30,0x2e,0x34,0x38,0x31,0x2d,0x34,0x2e, - 0x39,0x35,0x33,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37, - 0x2e,0x31,0x39,0x35,0x63,0x2d,0x30,0x2e,0x39,0x37, - 0x2d,0x32,0x2e,0x32,0x34,0x31,0x2d,0x32,0x2e,0x32, - 0x37,0x37,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2d,0x33, - 0x2e,0x39,0x33,0x35,0x2d,0x35,0x2e,0x38,0x35,0x34, - 0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x31,0x2e, - 0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x30,0x38,0x2d, - 0x32,0x2e,0x39,0x37,0x31,0x2d,0x35,0x2e,0x38,0x35, - 0x34,0x2d,0x33,0x2e,0x39,0x33,0x36,0x0a,0x09,0x09, - 0x63,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e, - 0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x34,0x2d, - 0x31,0x2e,0x34,0x35,0x33,0x2d,0x37,0x2e,0x31,0x39, - 0x39,0x2d,0x31,0x2e,0x34,0x35,0x33,0x68,0x2d,0x37, - 0x2e,0x34,0x35,0x39,0x63,0x2d,0x32,0x2e,0x35,0x35, - 0x33,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c, - 0x30,0x2e,0x33,0x38,0x33,0x2d,0x37,0x2e,0x31,0x39, - 0x39,0x2c,0x31,0x2e,0x31,0x34,0x31,0x63,0x2d,0x32, - 0x2e,0x32,0x34,0x33,0x2c,0x30,0x2e,0x37,0x36,0x36, - 0x2d,0x34,0x2e,0x31,0x39,0x35,0x2c,0x31,0x2e,0x38, - 0x35,0x33,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c,0x33, - 0x2e,0x32,0x36,0x31,0x0a,0x09,0x09,0x63,0x2d,0x31, - 0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e,0x34,0x32,0x34, - 0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e,0x31, - 0x33,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e, - 0x31,0x32,0x38,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39, - 0x2c,0x32,0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x34, - 0x35,0x31,0x2c,0x34,0x2e,0x32,0x38,0x37,0x2d,0x31, - 0x2e,0x34,0x35,0x31,0x2c,0x36,0x2e,0x38,0x34,0x34, - 0x63,0x30,0x2c,0x33,0x2e,0x36,0x35,0x38,0x2c,0x30, - 0x2e,0x38,0x33,0x31,0x2c,0x36,0x2e,0x36,0x34,0x35, - 0x2c,0x32,0x2e,0x34,0x38,0x38,0x2c,0x38,0x2e,0x39, - 0x35,0x35,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x35, - 0x37,0x2c,0x32,0x2e,0x33,0x31,0x39,0x2c,0x33,0x2e, - 0x38,0x35,0x2c,0x34,0x2e,0x32,0x37,0x31,0x2c,0x36, - 0x2e,0x35,0x37,0x39,0x2c,0x35,0x2e,0x38,0x35,0x35, - 0x63,0x32,0x2e,0x37,0x32,0x35,0x2c,0x31,0x2e,0x35, - 0x39,0x32,0x2c,0x35,0x2e,0x38,0x33,0x33,0x2c,0x32, - 0x2e,0x39,0x31,0x36,0x2c,0x39,0x2e,0x33,0x32,0x33, - 0x2c,0x33,0x2e,0x39,0x38,0x36,0x63,0x33,0x2e,0x34, - 0x38,0x36,0x2c,0x31,0x2e,0x30,0x37,0x32,0x2c,0x37, - 0x2e,0x30,0x34,0x32,0x2c,0x32,0x2e,0x31,0x37,0x34, - 0x2c,0x31,0x30,0x2e,0x36,0x37,0x2c,0x33,0x2e,0x33, - 0x31,0x34,0x0a,0x09,0x09,0x63,0x33,0x2e,0x36,0x32, - 0x35,0x2c,0x31,0x2e,0x31,0x34,0x31,0x2c,0x37,0x2e, - 0x31,0x38,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2c,0x31, - 0x30,0x2e,0x36,0x37,0x2c,0x33,0x2e,0x38,0x38,0x39, - 0x63,0x33,0x2e,0x34,0x38,0x36,0x2c,0x31,0x2e,0x34, - 0x34,0x36,0x2c,0x36,0x2e,0x35,0x39,0x34,0x2c,0x33, - 0x2e,0x33,0x31,0x34,0x2c,0x39,0x2e,0x33,0x32,0x33, - 0x2c,0x35,0x2e,0x35,0x38,0x38,0x63,0x32,0x2e,0x37, - 0x32,0x39,0x2c,0x32,0x2e,0x32,0x38,0x2c,0x34,0x2e, - 0x39,0x32,0x32,0x2c,0x35,0x2e,0x31,0x32,0x39,0x2c, - 0x36,0x2e,0x35,0x37,0x39,0x2c,0x38,0x2e,0x35,0x35, - 0x31,0x0a,0x09,0x09,0x43,0x35,0x36,0x32,0x2e,0x32, + 0x20,0x20,0x20,0x20,0x63,0x2d,0x33,0x2e,0x36,0x36, + 0x33,0x2d,0x31,0x2e,0x30,0x37,0x31,0x2d,0x37,0x2e, + 0x32,0x33,0x36,0x2d,0x32,0x2e,0x32,0x39,0x36,0x2d, + 0x31,0x30,0x2e,0x37,0x32,0x35,0x2d,0x33,0x2e,0x36, + 0x37,0x34,0x63,0x2d,0x33,0x2e,0x34,0x38,0x35,0x2d, + 0x31,0x2e,0x33,0x38,0x38,0x2d,0x36,0x2e,0x35,0x39, + 0x34,0x2d,0x33,0x2e,0x32,0x2d,0x39,0x2e,0x33,0x32, + 0x32,0x2d,0x35,0x2e,0x34,0x34,0x32,0x63,0x2d,0x32, + 0x2e,0x37,0x32,0x39,0x2d,0x32,0x2e,0x32,0x34,0x32, + 0x2d,0x34,0x2e,0x39,0x31,0x38,0x2d,0x35,0x2e,0x30, + 0x36,0x2d,0x36,0x2e,0x35,0x37,0x35,0x2d,0x38,0x2e, + 0x34,0x34,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x31, + 0x2e,0x36,0x36,0x31,0x2d,0x33,0x2e,0x33,0x38,0x34, + 0x2d,0x32,0x2e,0x34,0x38,0x37,0x2d,0x37,0x2e,0x35, + 0x39,0x33,0x2d,0x32,0x2e,0x34,0x38,0x37,0x2d,0x31, + 0x32,0x2e,0x36,0x33,0x38,0x63,0x30,0x2d,0x34,0x2e, + 0x32,0x37,0x38,0x2c,0x30,0x2e,0x38,0x32,0x36,0x2d, + 0x38,0x2e,0x31,0x39,0x36,0x2c,0x32,0x2e,0x34,0x38, + 0x37,0x2d,0x31,0x31,0x2e,0x37,0x35,0x37,0x63,0x31, + 0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x35,0x36,0x31, + 0x2c,0x33,0x2e,0x38,0x39,0x39,0x2d,0x36,0x2e,0x36, + 0x31,0x33,0x2c,0x36,0x2e,0x37,0x33,0x31,0x2d,0x39, + 0x2e,0x31,0x37,0x20,0x20,0x20,0x20,0x73,0x36,0x2e, + 0x31,0x32,0x37,0x2d,0x34,0x2e,0x35,0x33,0x39,0x2c, + 0x39,0x2e,0x38,0x39,0x34,0x2d,0x35,0x2e,0x39,0x35, + 0x35,0x63,0x33,0x2e,0x37,0x36,0x33,0x2d,0x31,0x2e, + 0x34,0x31,0x36,0x2c,0x37,0x2e,0x37,0x38,0x35,0x2d, + 0x32,0x2e,0x31,0x32,0x38,0x2c,0x31,0x32,0x2e,0x30, + 0x36,0x37,0x2d,0x32,0x2e,0x31,0x32,0x38,0x68,0x37, + 0x2e,0x34,0x35,0x39,0x63,0x34,0x2e,0x32,0x38,0x32, + 0x2c,0x30,0x2c,0x38,0x2e,0x33,0x32,0x33,0x2c,0x30, + 0x2e,0x38,0x31,0x39,0x2c,0x31,0x32,0x2e,0x31,0x32, + 0x2c,0x32,0x2e,0x34,0x33,0x35,0x20,0x20,0x20,0x20, + 0x63,0x33,0x2e,0x37,0x39,0x36,0x2c,0x31,0x2e,0x36, + 0x33,0x31,0x2c,0x37,0x2e,0x31,0x31,0x35,0x2c,0x33, + 0x2e,0x38,0x35,0x32,0x2c,0x39,0x2e,0x39,0x34,0x37, + 0x2c,0x36,0x2e,0x36,0x38,0x33,0x63,0x32,0x2e,0x38, + 0x32,0x37,0x2c,0x32,0x2e,0x38,0x33,0x34,0x2c,0x35, + 0x2e,0x30,0x35,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36, + 0x2c,0x36,0x2e,0x36,0x38,0x33,0x2c,0x39,0x2e,0x39, + 0x35,0x31,0x63,0x31,0x2e,0x36,0x31,0x38,0x2c,0x33, + 0x2e,0x37,0x39,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34, + 0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34, + 0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31,0x36,0x76, + 0x30,0x2e,0x34,0x31,0x33,0x20,0x20,0x20,0x20,0x6c, + 0x2d,0x31,0x32,0x2e,0x37,0x34,0x34,0x2c,0x32,0x2e, + 0x30,0x37,0x34,0x76,0x2d,0x33,0x2e,0x32,0x31,0x35, + 0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x2d,0x30,0x2e, + 0x34,0x38,0x2d,0x34,0x2e,0x39,0x35,0x33,0x2d,0x31, + 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x35,0x63, + 0x2d,0x30,0x2e,0x39,0x37,0x2d,0x32,0x2e,0x32,0x34, + 0x31,0x2d,0x32,0x2e,0x32,0x37,0x36,0x2d,0x34,0x2e, + 0x31,0x39,0x33,0x2d,0x33,0x2e,0x39,0x33,0x35,0x2d, + 0x35,0x2e,0x38,0x35,0x34,0x63,0x2d,0x31,0x2e,0x36, + 0x35,0x37,0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d,0x33, + 0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37,0x32, + 0x2d,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33,0x2e,0x39, + 0x33,0x37,0x20,0x20,0x20,0x20,0x63,0x2d,0x32,0x2e, + 0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d, + 0x34,0x2e,0x36,0x34,0x34,0x2d,0x31,0x2e,0x34,0x35, + 0x33,0x2d,0x37,0x2e,0x31,0x39,0x38,0x2d,0x31,0x2e, + 0x34,0x35,0x33,0x68,0x2d,0x37,0x2e,0x34,0x35,0x39, + 0x63,0x2d,0x32,0x2e,0x35,0x35,0x34,0x2c,0x30,0x2d, + 0x34,0x2e,0x39,0x35,0x37,0x2c,0x30,0x2e,0x33,0x38, + 0x34,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2c,0x31,0x2e, + 0x31,0x34,0x32,0x63,0x2d,0x32,0x2e,0x32,0x34,0x33, + 0x2c,0x30,0x2e,0x37,0x36,0x36,0x2d,0x34,0x2e,0x31, + 0x39,0x35,0x2c,0x31,0x2e,0x38,0x35,0x33,0x2d,0x35, + 0x2e,0x38,0x35,0x33,0x2c,0x33,0x2e,0x32,0x36,0x31, + 0x20,0x20,0x20,0x20,0x63,0x2d,0x31,0x2e,0x36,0x35, + 0x37,0x2c,0x31,0x2e,0x34,0x32,0x34,0x2d,0x32,0x2e, + 0x39,0x37,0x31,0x2c,0x33,0x2e,0x31,0x33,0x2d,0x33, + 0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x31,0x32,0x38, + 0x63,0x2d,0x30,0x2e,0x39,0x37,0x2c,0x32,0x2e,0x30, + 0x30,0x36,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x34, + 0x2e,0x32,0x38,0x37,0x2d,0x31,0x2e,0x34,0x35,0x31, + 0x2c,0x36,0x2e,0x38,0x34,0x34,0x63,0x30,0x2c,0x33, + 0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e,0x38,0x33,0x31, + 0x2c,0x36,0x2e,0x36,0x34,0x36,0x2c,0x32,0x2e,0x34, + 0x38,0x38,0x2c,0x38,0x2e,0x39,0x35,0x35,0x20,0x20, + 0x20,0x20,0x63,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32, + 0x2e,0x33,0x31,0x39,0x2c,0x33,0x2e,0x38,0x35,0x2c, + 0x34,0x2e,0x32,0x37,0x31,0x2c,0x36,0x2e,0x35,0x37, + 0x39,0x2c,0x35,0x2e,0x38,0x35,0x35,0x63,0x32,0x2e, + 0x37,0x32,0x35,0x2c,0x31,0x2e,0x35,0x39,0x32,0x2c, + 0x35,0x2e,0x38,0x33,0x33,0x2c,0x32,0x2e,0x39,0x31, + 0x36,0x2c,0x39,0x2e,0x33,0x32,0x32,0x2c,0x33,0x2e, + 0x39,0x38,0x35,0x63,0x33,0x2e,0x34,0x38,0x36,0x2c, + 0x31,0x2e,0x30,0x37,0x32,0x2c,0x37,0x2e,0x30,0x34, + 0x32,0x2c,0x32,0x2e,0x31,0x37,0x35,0x2c,0x31,0x30, + 0x2e,0x36,0x37,0x2c,0x33,0x2e,0x33,0x31,0x34,0x20, + 0x20,0x20,0x20,0x63,0x33,0x2e,0x36,0x32,0x35,0x2c, + 0x31,0x2e,0x31,0x34,0x31,0x2c,0x37,0x2e,0x31,0x38, + 0x31,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2c,0x31,0x30, + 0x2e,0x36,0x37,0x2c,0x33,0x2e,0x38,0x38,0x39,0x63, + 0x33,0x2e,0x34,0x38,0x36,0x2c,0x31,0x2e,0x34,0x34, + 0x36,0x2c,0x36,0x2e,0x35,0x39,0x35,0x2c,0x33,0x2e, + 0x33,0x31,0x34,0x2c,0x39,0x2e,0x33,0x32,0x33,0x2c, + 0x35,0x2e,0x35,0x38,0x38,0x63,0x32,0x2e,0x37,0x32, + 0x39,0x2c,0x32,0x2e,0x32,0x38,0x2c,0x34,0x2e,0x39, + 0x32,0x32,0x2c,0x35,0x2e,0x31,0x32,0x39,0x2c,0x36, + 0x2e,0x35,0x37,0x39,0x2c,0x38,0x2e,0x35,0x35,0x32, + 0x20,0x20,0x20,0x20,0x43,0x35,0x36,0x32,0x2e,0x32, 0x38,0x32,0x2c,0x34,0x38,0x36,0x2e,0x39,0x38,0x39, 0x2c,0x35,0x36,0x33,0x2e,0x31,0x30,0x39,0x2c,0x34, 0x39,0x31,0x2e,0x32,0x31,0x34,0x2c,0x35,0x36,0x33, 0x2e,0x31,0x30,0x39,0x2c,0x34,0x39,0x36,0x2e,0x32, - 0x35,0x38,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x36,0x32, - 0x36,0x2e,0x31,0x39,0x36,0x2c,0x35,0x32,0x33,0x2e, - 0x31,0x39,0x34,0x63,0x2d,0x33,0x2e,0x38,0x36,0x35, - 0x2c,0x30,0x2d,0x37,0x2e,0x35,0x30,0x39,0x2d,0x30, - 0x2e,0x37,0x32,0x39,0x2d,0x31,0x30,0x2e,0x39,0x32, - 0x36,0x2d,0x32,0x2e,0x31,0x37,0x34,0x63,0x2d,0x33, - 0x2e,0x34,0x32,0x31,0x2d,0x31,0x2e,0x34,0x35,0x35, - 0x2d,0x36,0x2e,0x33,0x39,0x32,0x2d,0x33,0x2e,0x34, - 0x36,0x31,0x2d,0x38,0x2e,0x39,0x31,0x2d,0x36,0x2e, - 0x30,0x31,0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35, - 0x32,0x31,0x2d,0x32,0x2e,0x35,0x35,0x37,0x2d,0x34, - 0x2e,0x35,0x32,0x32,0x2d,0x35,0x2e,0x35,0x32,0x35, - 0x2d,0x36,0x2e,0x30,0x30,0x38,0x2d,0x38,0x2e,0x39, - 0x30,0x38,0x63,0x2d,0x31,0x2e,0x34,0x38,0x35,0x2d, - 0x33,0x2e,0x33,0x38,0x35,0x2d,0x32,0x2e,0x32,0x32, - 0x39,0x2d,0x37,0x2e,0x30,0x31,0x33,0x2d,0x32,0x2e, - 0x32,0x32,0x39,0x2d,0x31,0x30,0x2e,0x38,0x37,0x37, - 0x76,0x2d,0x36,0x35,0x2e,0x39,0x39,0x36,0x68,0x2d, - 0x31,0x39,0x2e,0x30,0x35,0x39,0x76,0x2d,0x31,0x32, - 0x2e,0x31,0x31,0x37,0x68,0x31,0x39,0x2e,0x30,0x35, - 0x39,0x76,0x2d,0x32,0x35,0x2e,0x34,0x37,0x39,0x6c, - 0x31,0x32,0x2e,0x37,0x34,0x2d,0x32,0x2e,0x30,0x37, - 0x33,0x0a,0x09,0x09,0x76,0x32,0x37,0x2e,0x35,0x35, - 0x35,0x48,0x36,0x33,0x37,0x2e,0x38,0x76,0x31,0x32, - 0x2e,0x31,0x31,0x37,0x68,0x2d,0x32,0x36,0x2e,0x39, - 0x33,0x37,0x76,0x36,0x36,0x2e,0x36,0x31,0x34,0x63, - 0x30,0x2c,0x32,0x2e,0x31,0x34,0x34,0x2c,0x30,0x2e, - 0x33,0x39,0x38,0x2c,0x34,0x2e,0x31,0x32,0x36,0x2c, - 0x31,0x2e,0x31,0x39,0x34,0x2c,0x35,0x2e,0x39,0x35, - 0x35,0x63,0x30,0x2e,0x37,0x39,0x32,0x2c,0x31,0x2e, - 0x38,0x32,0x39,0x2c,0x31,0x2e,0x38,0x37,0x39,0x2c, - 0x33,0x2e,0x34,0x33,0x37,0x2c,0x33,0x2e,0x32,0x36, - 0x31,0x2c,0x34,0x2e,0x38,0x31,0x33,0x0a,0x09,0x09, + 0x35,0x38,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c, + 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, + 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, + 0x64,0x3d,0x22,0x4d,0x36,0x32,0x36,0x2e,0x31,0x39, + 0x36,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x63, + 0x2d,0x33,0x2e,0x38,0x36,0x35,0x2c,0x30,0x2d,0x37, + 0x2e,0x35,0x30,0x39,0x2d,0x30,0x2e,0x37,0x32,0x39, + 0x2d,0x31,0x30,0x2e,0x39,0x32,0x37,0x2d,0x32,0x2e, + 0x31,0x37,0x35,0x63,0x2d,0x33,0x2e,0x34,0x32,0x31, + 0x2d,0x31,0x2e,0x34,0x35,0x35,0x2d,0x36,0x2e,0x33, + 0x39,0x32,0x2d,0x33,0x2e,0x34,0x36,0x31,0x2d,0x38, + 0x2e,0x39,0x30,0x39,0x2d,0x36,0x2e,0x30,0x31,0x20, + 0x20,0x20,0x20,0x63,0x2d,0x32,0x2e,0x35,0x32,0x31, + 0x2d,0x32,0x2e,0x35,0x35,0x37,0x2d,0x34,0x2e,0x35, + 0x32,0x32,0x2d,0x35,0x2e,0x35,0x32,0x34,0x2d,0x36, + 0x2e,0x30,0x30,0x39,0x2d,0x38,0x2e,0x39,0x30,0x38, + 0x63,0x2d,0x31,0x2e,0x34,0x38,0x34,0x2d,0x33,0x2e, + 0x33,0x38,0x35,0x2d,0x32,0x2e,0x32,0x32,0x39,0x2d, + 0x37,0x2e,0x30,0x31,0x33,0x2d,0x32,0x2e,0x32,0x32, + 0x39,0x2d,0x31,0x30,0x2e,0x38,0x37,0x37,0x76,0x2d, + 0x36,0x35,0x2e,0x39,0x39,0x36,0x68,0x2d,0x31,0x39, + 0x2e,0x30,0x35,0x39,0x76,0x2d,0x31,0x32,0x2e,0x31, + 0x31,0x36,0x68,0x31,0x39,0x2e,0x30,0x35,0x39,0x76, + 0x2d,0x32,0x35,0x2e,0x34,0x37,0x39,0x20,0x20,0x20, + 0x20,0x6c,0x31,0x32,0x2e,0x37,0x34,0x2d,0x32,0x2e, + 0x30,0x37,0x32,0x76,0x32,0x37,0x2e,0x35,0x35,0x35, + 0x48,0x36,0x33,0x37,0x2e,0x38,0x76,0x31,0x32,0x2e, + 0x31,0x31,0x37,0x68,0x2d,0x32,0x36,0x2e,0x39,0x33, + 0x37,0x76,0x36,0x36,0x2e,0x36,0x31,0x33,0x63,0x30, + 0x2c,0x32,0x2e,0x31,0x34,0x35,0x2c,0x30,0x2e,0x33, + 0x39,0x37,0x2c,0x34,0x2e,0x31,0x32,0x36,0x2c,0x31, + 0x2e,0x31,0x39,0x33,0x2c,0x35,0x2e,0x39,0x35,0x35, + 0x63,0x30,0x2e,0x37,0x39,0x32,0x2c,0x31,0x2e,0x38, + 0x32,0x39,0x2c,0x31,0x2e,0x38,0x37,0x39,0x2c,0x33, + 0x2e,0x34,0x33,0x38,0x2c,0x33,0x2e,0x32,0x36,0x32, + 0x2c,0x34,0x2e,0x38,0x31,0x33,0x20,0x20,0x20,0x20, 0x63,0x31,0x2e,0x33,0x38,0x31,0x2c,0x31,0x2e,0x33, 0x38,0x36,0x2c,0x33,0x2e,0x30,0x30,0x34,0x2c,0x32, - 0x2e,0x34,0x37,0x33,0x2c,0x34,0x2e,0x38,0x36,0x38, + 0x2e,0x34,0x37,0x33,0x2c,0x34,0x2e,0x38,0x36,0x37, 0x2c,0x33,0x2e,0x32,0x37,0x63,0x31,0x2e,0x38,0x36, 0x38,0x2c,0x30,0x2e,0x37,0x38,0x38,0x2c,0x33,0x2e, 0x38,0x36,0x39,0x2c,0x31,0x2e,0x31,0x38,0x38,0x2c, 0x36,0x2e,0x30,0x30,0x38,0x2c,0x31,0x2e,0x31,0x38, 0x38,0x68,0x31,0x31,0x2e,0x36,0x30,0x34,0x76,0x31, - 0x32,0x2e,0x31,0x32,0x33,0x48,0x36,0x32,0x36,0x2e, - 0x31,0x39,0x36,0x4c,0x36,0x32,0x36,0x2e,0x31,0x39, - 0x36,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x64,0x3d,0x22,0x4d,0x37,0x32,0x37,0x2e,0x38, - 0x32,0x31,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34, - 0x6c,0x2d,0x37,0x2e,0x30,0x34,0x32,0x2d,0x31,0x30, - 0x2e,0x35,0x37,0x63,0x2d,0x32,0x2e,0x38,0x39,0x39, - 0x2c,0x33,0x2e,0x38,0x30,0x34,0x2d,0x36,0x2e,0x35, - 0x32,0x37,0x2c,0x36,0x2e,0x38,0x35,0x37,0x2d,0x31, - 0x30,0x2e,0x38,0x37,0x36,0x2c,0x39,0x2e,0x31,0x36, - 0x39,0x63,0x2d,0x34,0x2e,0x33,0x35,0x32,0x2c,0x32, - 0x2e,0x33,0x31,0x32,0x2d,0x39,0x2e,0x31,0x31,0x36, - 0x2c,0x33,0x2e,0x34,0x36,0x38,0x2d,0x31,0x34,0x2e, - 0x32,0x39,0x39,0x2c,0x33,0x2e,0x34,0x36,0x38,0x68, - 0x2d,0x33,0x2e,0x32,0x30,0x37,0x0a,0x09,0x09,0x63, - 0x2d,0x34,0x2e,0x32,0x38,0x36,0x2c,0x30,0x2d,0x38, - 0x2e,0x33,0x32,0x38,0x2d,0x30,0x2e,0x38,0x31,0x32, - 0x2d,0x31,0x32,0x2e,0x31,0x32,0x34,0x2d,0x32,0x2e, - 0x34,0x33,0x34,0x63,0x2d,0x33,0x2e,0x38,0x30,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31, - 0x31,0x34,0x2d,0x33,0x2e,0x38,0x34,0x34,0x2d,0x39, - 0x2e,0x39,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x34, - 0x63,0x2d,0x32,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e, - 0x38,0x32,0x34,0x2d,0x35,0x2e,0x30,0x36,0x32,0x2d, - 0x36,0x2e,0x31,0x33,0x39,0x2d,0x36,0x2e,0x36,0x38, - 0x32,0x2d,0x39,0x2e,0x39,0x34,0x32,0x0a,0x09,0x09, - 0x63,0x2d,0x31,0x2e,0x36,0x32,0x37,0x2d,0x33,0x2e, - 0x37,0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d, - 0x37,0x2e,0x38,0x33,0x39,0x2d,0x32,0x2e,0x34,0x33, - 0x35,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x76,0x2d, - 0x31,0x2e,0x30,0x34,0x31,0x63,0x30,0x2d,0x34,0x2e, - 0x32,0x37,0x37,0x2c,0x30,0x2e,0x38,0x30,0x38,0x2d, - 0x38,0x2e,0x33,0x32,0x2c,0x32,0x2e,0x34,0x33,0x35, - 0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x63,0x31,0x2e, - 0x36,0x31,0x38,0x2d,0x33,0x2e,0x37,0x39,0x37,0x2c, - 0x33,0x2e,0x38,0x34,0x36,0x2d,0x37,0x2e,0x31,0x31, - 0x2c,0x36,0x2e,0x36,0x38,0x32,0x2d,0x39,0x2e,0x39, - 0x34,0x32,0x0a,0x09,0x09,0x63,0x32,0x2e,0x38,0x32, - 0x39,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x36,0x2e, - 0x31,0x34,0x34,0x2d,0x35,0x2e,0x30,0x36,0x31,0x2c, - 0x39,0x2e,0x39,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38, - 0x33,0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e, - 0x36,0x32,0x32,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d, - 0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32,0x2e,0x31, - 0x32,0x34,0x2d,0x32,0x2e,0x34,0x33,0x35,0x68,0x32, - 0x36,0x2e,0x39,0x33,0x32,0x76,0x2d,0x31,0x36,0x2e, - 0x33,0x37,0x32,0x63,0x30,0x2d,0x32,0x2e,0x35,0x34, + 0x32,0x2e,0x31,0x32,0x33,0x4c,0x36,0x32,0x36,0x2e, + 0x31,0x39,0x36,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39, + 0x34,0x4c,0x36,0x32,0x36,0x2e,0x31,0x39,0x36,0x2c, + 0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x7a,0x22,0x2f, + 0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, + 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, + 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37, + 0x32,0x37,0x2e,0x38,0x32,0x31,0x2c,0x35,0x32,0x33, + 0x2e,0x31,0x39,0x34,0x6c,0x2d,0x37,0x2e,0x30,0x34, + 0x32,0x2d,0x31,0x30,0x2e,0x35,0x37,0x63,0x2d,0x32, + 0x2e,0x38,0x39,0x39,0x2c,0x33,0x2e,0x38,0x30,0x34, + 0x2d,0x36,0x2e,0x35,0x32,0x37,0x2c,0x36,0x2e,0x38, + 0x35,0x36,0x2d,0x31,0x30,0x2e,0x38,0x37,0x36,0x2c, + 0x39,0x2e,0x31,0x36,0x39,0x20,0x20,0x20,0x20,0x63, + 0x2d,0x34,0x2e,0x33,0x35,0x33,0x2c,0x32,0x2e,0x33, + 0x31,0x33,0x2d,0x39,0x2e,0x31,0x31,0x36,0x2c,0x33, + 0x2e,0x34,0x36,0x38,0x2d,0x31,0x34,0x2e,0x33,0x2c, + 0x33,0x2e,0x34,0x36,0x38,0x68,0x2d,0x33,0x2e,0x32, + 0x30,0x37,0x63,0x2d,0x34,0x2e,0x32,0x38,0x35,0x2c, + 0x30,0x2d,0x38,0x2e,0x33,0x32,0x37,0x2d,0x30,0x2e, + 0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x31,0x32,0x33, + 0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d,0x33,0x2e, + 0x38,0x30,0x32,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d, + 0x37,0x2e,0x31,0x31,0x34,0x2d,0x33,0x2e,0x38,0x34, + 0x34,0x2d,0x39,0x2e,0x39,0x34,0x33,0x2d,0x36,0x2e, + 0x36,0x38,0x35,0x20,0x20,0x20,0x20,0x63,0x2d,0x32, + 0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x38,0x32,0x33, + 0x2d,0x35,0x2e,0x30,0x36,0x33,0x2d,0x36,0x2e,0x31, + 0x33,0x39,0x2d,0x36,0x2e,0x36,0x38,0x32,0x2d,0x39, + 0x2e,0x39,0x34,0x31,0x63,0x2d,0x31,0x2e,0x36,0x32, + 0x37,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32,0x2e, + 0x34,0x33,0x36,0x2d,0x37,0x2e,0x38,0x33,0x39,0x2d, + 0x32,0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e,0x31, + 0x31,0x36,0x76,0x2d,0x31,0x2e,0x30,0x34,0x31,0x63, + 0x30,0x2d,0x34,0x2e,0x32,0x37,0x37,0x2c,0x30,0x2e, + 0x38,0x30,0x39,0x2d,0x38,0x2e,0x33,0x32,0x2c,0x32, + 0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e,0x31,0x31, + 0x36,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x36,0x31, + 0x37,0x2d,0x33,0x2e,0x37,0x39,0x37,0x2c,0x33,0x2e, + 0x38,0x34,0x36,0x2d,0x37,0x2e,0x31,0x30,0x39,0x2c, + 0x36,0x2e,0x36,0x38,0x32,0x2d,0x39,0x2e,0x39,0x34, + 0x31,0x63,0x32,0x2e,0x38,0x32,0x39,0x2d,0x32,0x2e, + 0x38,0x33,0x32,0x2c,0x36,0x2e,0x31,0x34,0x34,0x2d, + 0x35,0x2e,0x30,0x36,0x32,0x2c,0x39,0x2e,0x39,0x34, + 0x33,0x2d,0x36,0x2e,0x36,0x38,0x34,0x63,0x33,0x2e, + 0x37,0x39,0x36,0x2d,0x31,0x2e,0x36,0x32,0x32,0x2c, + 0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33, + 0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x33,0x2d,0x32, + 0x2e,0x34,0x33,0x35,0x68,0x32,0x36,0x2e,0x39,0x33, + 0x33,0x76,0x2d,0x31,0x36,0x2e,0x33,0x37,0x32,0x20, + 0x20,0x20,0x20,0x63,0x30,0x2d,0x32,0x2e,0x35,0x34, 0x39,0x2d,0x30,0x2e,0x34,0x38,0x35,0x2d,0x34,0x2e, 0x39,0x35,0x33,0x2d,0x31,0x2e,0x34,0x34,0x39,0x2d, - 0x37,0x2e,0x31,0x39,0x35,0x0a,0x09,0x09,0x63,0x2d, - 0x30,0x2e,0x39,0x37,0x2d,0x32,0x2e,0x32,0x34,0x31, - 0x2d,0x32,0x2e,0x32,0x38,0x31,0x2d,0x34,0x2e,0x31, - 0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x36,0x2d,0x35, - 0x2e,0x38,0x35,0x34,0x63,0x2d,0x31,0x2e,0x36,0x36, - 0x31,0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d,0x33,0x2e, - 0x36,0x31,0x32,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2d, - 0x35,0x2e,0x38,0x35,0x34,0x2d,0x33,0x2e,0x39,0x33, - 0x36,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d,0x30, + 0x37,0x2e,0x31,0x39,0x35,0x63,0x2d,0x30,0x2e,0x39, + 0x37,0x2d,0x32,0x2e,0x32,0x34,0x31,0x2d,0x32,0x2e, + 0x32,0x38,0x2d,0x34,0x2e,0x31,0x39,0x33,0x2d,0x33, + 0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e,0x38,0x35,0x34, + 0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e, + 0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x31,0x32,0x2d, + 0x32,0x2e,0x39,0x37,0x32,0x2d,0x35,0x2e,0x38,0x35, + 0x34,0x2d,0x33,0x2e,0x39,0x33,0x37,0x20,0x20,0x20, + 0x20,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d,0x30, 0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36, 0x2d,0x31,0x2e,0x34,0x35,0x33,0x2d,0x37,0x2e,0x31, 0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x33,0x68,0x2d, - 0x37,0x2e,0x34,0x35,0x39,0x0a,0x09,0x09,0x63,0x2d, - 0x32,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e, - 0x39,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x39,0x2d, - 0x37,0x2e,0x32,0x30,0x32,0x2c,0x31,0x2e,0x34,0x35, - 0x33,0x63,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2c,0x30, - 0x2e,0x39,0x36,0x35,0x2d,0x34,0x2e,0x31,0x39,0x34, - 0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38, - 0x35,0x32,0x2c,0x33,0x2e,0x39,0x33,0x36,0x63,0x2d, - 0x31,0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e,0x36,0x36, - 0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e,0x36, - 0x31,0x33,0x2d,0x33,0x2e,0x39,0x33,0x36,0x2c,0x35, - 0x2e,0x38,0x35,0x34,0x0a,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x32, - 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34, - 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31, - 0x39,0x35,0x76,0x33,0x2e,0x38,0x33,0x34,0x6c,0x2d, - 0x31,0x32,0x2e,0x37,0x34,0x34,0x2d,0x32,0x2e,0x30, - 0x37,0x34,0x76,0x2d,0x31,0x2e,0x30,0x33,0x32,0x63, - 0x30,0x2d,0x34,0x2e,0x32,0x37,0x39,0x2c,0x30,0x2e, - 0x38,0x31,0x32,0x2d,0x38,0x2e,0x33,0x32,0x2c,0x32, - 0x2e,0x34,0x33,0x35,0x2d,0x31,0x32,0x2e,0x31,0x31, - 0x37,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x32,0x33, - 0x2d,0x33,0x2e,0x38,0x30,0x35,0x2c,0x33,0x2e,0x38, - 0x35,0x2d,0x37,0x2e,0x31,0x31,0x37,0x2c,0x36,0x2e, - 0x36,0x38,0x33,0x2d,0x39,0x2e,0x39,0x35,0x63,0x32, - 0x2e,0x38,0x33,0x32,0x2d,0x32,0x2e,0x38,0x33,0x32, - 0x2c,0x36,0x2e,0x31,0x34,0x36,0x2d,0x35,0x2e,0x30, - 0x35,0x32,0x2c,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36, - 0x2e,0x36,0x38,0x33,0x63,0x33,0x2e,0x37,0x39,0x36, - 0x2d,0x31,0x2e,0x36,0x31,0x35,0x2c,0x37,0x2e,0x38, - 0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31, - 0x32,0x2e,0x31,0x32,0x2d,0x32,0x2e,0x34,0x33,0x35, - 0x68,0x37,0x2e,0x34,0x35,0x39,0x0a,0x09,0x09,0x63, - 0x34,0x2e,0x32,0x38,0x33,0x2c,0x30,0x2c,0x38,0x2e, - 0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x39,0x2c,0x31, - 0x32,0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e,0x34,0x33, - 0x35,0x63,0x33,0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e, - 0x36,0x33,0x31,0x2c,0x37,0x2e,0x31,0x30,0x39,0x2c, - 0x33,0x2e,0x38,0x35,0x31,0x2c,0x39,0x2e,0x39,0x34, - 0x31,0x2c,0x36,0x2e,0x36,0x38,0x33,0x63,0x32,0x2e, - 0x38,0x33,0x32,0x2c,0x32,0x2e,0x38,0x33,0x33,0x2c, - 0x35,0x2e,0x30,0x36,0x31,0x2c,0x36,0x2e,0x31,0x34, - 0x36,0x2c,0x36,0x2e,0x36,0x38,0x34,0x2c,0x39,0x2e, - 0x39,0x35,0x0a,0x09,0x09,0x63,0x31,0x2e,0x36,0x32, - 0x33,0x2c,0x33,0x2e,0x37,0x39,0x37,0x2c,0x32,0x2e, - 0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c, - 0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31, - 0x31,0x37,0x76,0x37,0x36,0x2e,0x39,0x37,0x31,0x48, - 0x37,0x32,0x37,0x2e,0x38,0x32,0x31,0x4c,0x37,0x32, + 0x37,0x2e,0x34,0x35,0x39,0x63,0x2d,0x32,0x2e,0x35, + 0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x35, + 0x2c,0x30,0x2e,0x34,0x38,0x39,0x2d,0x37,0x2e,0x32, + 0x30,0x31,0x2c,0x31,0x2e,0x34,0x35,0x33,0x63,0x2d, + 0x32,0x2e,0x32,0x34,0x33,0x2c,0x30,0x2e,0x39,0x36, + 0x35,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c,0x32,0x2e, + 0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x33,0x2c, + 0x33,0x2e,0x39,0x33,0x37,0x20,0x20,0x20,0x20,0x63, + 0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e,0x36, + 0x36,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e, + 0x36,0x31,0x32,0x2d,0x33,0x2e,0x39,0x33,0x36,0x2c, + 0x35,0x2e,0x38,0x35,0x34,0x63,0x2d,0x30,0x2e,0x39, + 0x37,0x2c,0x32,0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e, + 0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39,0x35,0x76, + 0x33,0x2e,0x38,0x33,0x34,0x6c,0x2d,0x31,0x32,0x2e, + 0x37,0x34,0x34,0x2d,0x32,0x2e,0x30,0x37,0x34,0x76, + 0x2d,0x31,0x2e,0x30,0x33,0x32,0x20,0x20,0x20,0x20, + 0x63,0x30,0x2d,0x34,0x2e,0x32,0x37,0x38,0x2c,0x30, + 0x2e,0x38,0x31,0x33,0x2d,0x38,0x2e,0x33,0x31,0x39, + 0x2c,0x32,0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e, + 0x31,0x31,0x36,0x63,0x31,0x2e,0x36,0x32,0x33,0x2d, + 0x33,0x2e,0x38,0x30,0x36,0x2c,0x33,0x2e,0x38,0x35, + 0x2d,0x37,0x2e,0x31,0x31,0x37,0x2c,0x36,0x2e,0x36, + 0x38,0x33,0x2d,0x39,0x2e,0x39,0x35,0x63,0x32,0x2e, + 0x38,0x33,0x32,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c, + 0x36,0x2e,0x31,0x34,0x36,0x2d,0x35,0x2e,0x30,0x35, + 0x32,0x2c,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36,0x2e, + 0x36,0x38,0x34,0x20,0x20,0x20,0x20,0x63,0x33,0x2e, + 0x37,0x39,0x36,0x2d,0x31,0x2e,0x36,0x31,0x34,0x2c, + 0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33, + 0x35,0x2c,0x31,0x32,0x2e,0x31,0x31,0x39,0x2d,0x32, + 0x2e,0x34,0x33,0x35,0x68,0x37,0x2e,0x34,0x35,0x39, + 0x63,0x34,0x2e,0x32,0x38,0x33,0x2c,0x30,0x2c,0x38, + 0x2e,0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x38,0x2c, + 0x31,0x32,0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e,0x34, + 0x33,0x35,0x63,0x33,0x2e,0x37,0x39,0x37,0x2c,0x31, + 0x2e,0x36,0x33,0x32,0x2c,0x37,0x2e,0x31,0x30,0x39, + 0x2c,0x33,0x2e,0x38,0x35,0x32,0x2c,0x39,0x2e,0x39, + 0x34,0x31,0x2c,0x36,0x2e,0x36,0x38,0x34,0x20,0x20, + 0x20,0x20,0x63,0x32,0x2e,0x38,0x33,0x32,0x2c,0x32, + 0x2e,0x38,0x33,0x33,0x2c,0x35,0x2e,0x30,0x36,0x31, + 0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36, + 0x38,0x34,0x2c,0x39,0x2e,0x39,0x35,0x63,0x31,0x2e, + 0x36,0x32,0x33,0x2c,0x33,0x2e,0x37,0x39,0x37,0x2c, + 0x32,0x2e,0x34,0x33,0x35,0x2c,0x37,0x2e,0x38,0x33, + 0x38,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32, + 0x2e,0x31,0x31,0x36,0x76,0x37,0x36,0x2e,0x39,0x37, + 0x32,0x4c,0x37,0x32,0x37,0x2e,0x38,0x32,0x31,0x2c, + 0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x4c,0x37,0x32, 0x37,0x2e,0x38,0x32,0x31,0x2c,0x35,0x32,0x33,0x2e, - 0x31,0x39,0x34,0x7a,0x20,0x4d,0x37,0x31,0x39,0x2e, - 0x33,0x32,0x38,0x2c,0x34,0x37,0x31,0x2e,0x38,0x31, - 0x68,0x2d,0x32,0x36,0x2e,0x39,0x33,0x32,0x63,0x2d, - 0x32,0x2e,0x35,0x36,0x31,0x2c,0x30,0x2d,0x34,0x2e, - 0x39,0x36,0x2c,0x30,0x2e,0x34,0x38,0x32,0x2d,0x37, - 0x2e,0x32,0x30,0x32,0x2c,0x31,0x2e,0x34,0x34,0x37, - 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34,0x37, - 0x2c,0x30,0x2e,0x39,0x37,0x33,0x2d,0x34,0x2e,0x31, - 0x39,0x33,0x2c,0x32,0x2e,0x32,0x39,0x36,0x2d,0x35, - 0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x39,0x38,0x38, - 0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e, - 0x36,0x39,0x39,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c, - 0x33,0x2e,0x36,0x36,0x36,0x2d,0x33,0x2e,0x39,0x33, - 0x36,0x2c,0x35,0x2e,0x39,0x30,0x38,0x63,0x2d,0x30, - 0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x32, - 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34, - 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x32, - 0x30,0x33,0x76,0x34,0x2e,0x34,0x34,0x36,0x0a,0x09, - 0x09,0x63,0x30,0x2c,0x32,0x2e,0x35,0x35,0x38,0x2c, - 0x30,0x2e,0x34,0x38,0x31,0x2c,0x34,0x2e,0x39,0x36, - 0x2c,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x32,0x30, - 0x32,0x63,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, - 0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x37,0x37,0x2c, - 0x34,0x2e,0x31,0x39,0x34,0x2c,0x33,0x2e,0x39,0x33, - 0x36,0x2c,0x35,0x2e,0x38,0x35,0x35,0x63,0x31,0x2e, - 0x36,0x36,0x31,0x2c,0x31,0x2e,0x36,0x35,0x32,0x2c, - 0x33,0x2e,0x36,0x30,0x37,0x2c,0x32,0x2e,0x39,0x37, - 0x2c,0x35,0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x39, - 0x33,0x35,0x0a,0x09,0x09,0x63,0x32,0x2e,0x32,0x34, - 0x32,0x2c,0x30,0x2e,0x39,0x36,0x35,0x2c,0x34,0x2e, - 0x36,0x34,0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c, - 0x37,0x2e,0x32,0x30,0x32,0x2c,0x31,0x2e,0x34,0x34, - 0x37,0x68,0x38,0x2e,0x34,0x39,0x32,0x63,0x32,0x2e, - 0x35,0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35, - 0x37,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e, - 0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63, - 0x32,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x39,0x36, - 0x35,0x2c,0x34,0x2e,0x31,0x39,0x33,0x2d,0x32,0x2e, - 0x32,0x38,0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33, - 0x2e,0x39,0x33,0x35,0x0a,0x09,0x09,0x63,0x31,0x2e, - 0x36,0x35,0x33,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c, - 0x32,0x2e,0x39,0x36,0x36,0x2d,0x33,0x2e,0x36,0x31, - 0x32,0x2c,0x33,0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e, - 0x38,0x35,0x35,0x63,0x30,0x2e,0x39,0x36,0x34,0x2d, - 0x32,0x2e,0x32,0x34,0x32,0x2c,0x31,0x2e,0x34,0x34, - 0x39,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e, - 0x34,0x34,0x39,0x2d,0x37,0x2e,0x32,0x30,0x32,0x4c, + 0x31,0x39,0x34,0x7a,0x20,0x20,0x20,0x20,0x20,0x4d, 0x37,0x31,0x39,0x2e,0x33,0x32,0x38,0x2c,0x34,0x37, - 0x31,0x2e,0x38,0x31,0x4c,0x37,0x31,0x39,0x2e,0x33, - 0x32,0x38,0x2c,0x34,0x37,0x31,0x2e,0x38,0x31,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x64,0x3d,0x22,0x4d,0x37,0x39,0x36,0x2e,0x31, + 0x31,0x2e,0x38,0x31,0x68,0x2d,0x32,0x36,0x2e,0x39, + 0x33,0x32,0x63,0x2d,0x32,0x2e,0x35,0x36,0x32,0x2c, + 0x30,0x2d,0x34,0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e, + 0x34,0x38,0x32,0x2d,0x37,0x2e,0x32,0x30,0x32,0x2c, + 0x31,0x2e,0x34,0x34,0x37,0x63,0x2d,0x32,0x2e,0x32, + 0x34,0x37,0x2c,0x30,0x2e,0x39,0x37,0x34,0x2d,0x34, + 0x2e,0x31,0x39,0x33,0x2c,0x32,0x2e,0x32,0x39,0x36, + 0x2d,0x35,0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x39, + 0x38,0x38,0x20,0x20,0x20,0x20,0x63,0x2d,0x31,0x2e, + 0x36,0x35,0x37,0x2c,0x31,0x2e,0x36,0x39,0x39,0x2d, + 0x32,0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e,0x36,0x36, + 0x36,0x2d,0x33,0x2e,0x39,0x33,0x36,0x2c,0x35,0x2e, + 0x39,0x30,0x38,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39, + 0x2c,0x32,0x2e,0x32,0x34,0x31,0x2d,0x31,0x2e,0x34, + 0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, + 0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x76,0x34, + 0x2e,0x34,0x34,0x36,0x63,0x30,0x2c,0x32,0x2e,0x35, + 0x35,0x39,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2c,0x34, + 0x2e,0x39,0x36,0x2c,0x31,0x2e,0x34,0x35,0x2c,0x37, + 0x2e,0x32,0x30,0x32,0x20,0x20,0x20,0x20,0x63,0x30, + 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32,0x34,0x33, + 0x2c,0x32,0x2e,0x32,0x37,0x36,0x2c,0x34,0x2e,0x31, + 0x39,0x34,0x2c,0x33,0x2e,0x39,0x33,0x36,0x2c,0x35, + 0x2e,0x38,0x35,0x35,0x63,0x31,0x2e,0x36,0x36,0x31, + 0x2c,0x31,0x2e,0x36,0x35,0x31,0x2c,0x33,0x2e,0x36, + 0x30,0x37,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e, + 0x38,0x35,0x34,0x2c,0x33,0x2e,0x39,0x33,0x35,0x63, + 0x32,0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x39,0x36, + 0x35,0x2c,0x34,0x2e,0x36,0x34,0x33,0x2c,0x31,0x2e, + 0x34,0x34,0x37,0x2c,0x37,0x2e,0x32,0x30,0x32,0x2c, + 0x31,0x2e,0x34,0x34,0x37,0x68,0x38,0x2e,0x34,0x39, + 0x31,0x20,0x20,0x20,0x20,0x63,0x32,0x2e,0x35,0x35, + 0x34,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x37,0x2d, + 0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e,0x31,0x39, + 0x39,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32,0x2e, + 0x32,0x34,0x31,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, + 0x34,0x2e,0x31,0x39,0x33,0x2d,0x32,0x2e,0x32,0x38, + 0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33,0x2e,0x39, + 0x33,0x35,0x63,0x31,0x2e,0x36,0x35,0x32,0x2d,0x31, + 0x2e,0x36,0x36,0x31,0x2c,0x32,0x2e,0x39,0x36,0x36, + 0x2d,0x33,0x2e,0x36,0x31,0x32,0x2c,0x33,0x2e,0x39, + 0x33,0x36,0x2d,0x35,0x2e,0x38,0x35,0x35,0x20,0x20, + 0x20,0x20,0x63,0x30,0x2e,0x39,0x36,0x34,0x2d,0x32, + 0x2e,0x32,0x34,0x32,0x2c,0x31,0x2e,0x34,0x34,0x39, + 0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34, + 0x34,0x39,0x2d,0x37,0x2e,0x32,0x30,0x32,0x4c,0x37, + 0x31,0x39,0x2e,0x33,0x32,0x38,0x2c,0x34,0x37,0x31, + 0x2e,0x38,0x31,0x4c,0x37,0x31,0x39,0x2e,0x33,0x32, + 0x38,0x2c,0x34,0x37,0x31,0x2e,0x38,0x31,0x7a,0x22, + 0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, + 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, + 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, + 0x37,0x39,0x36,0x2e,0x31,0x39,0x33,0x2c,0x35,0x32, + 0x33,0x2e,0x31,0x39,0x34,0x63,0x2d,0x33,0x2e,0x38, + 0x36,0x39,0x2c,0x30,0x2d,0x37,0x2e,0x35,0x31,0x34, + 0x2d,0x30,0x2e,0x37,0x32,0x39,0x2d,0x31,0x30,0x2e, + 0x39,0x32,0x38,0x2d,0x32,0x2e,0x31,0x37,0x35,0x63, + 0x2d,0x33,0x2e,0x34,0x32,0x31,0x2d,0x31,0x2e,0x34, + 0x35,0x35,0x2d,0x36,0x2e,0x33,0x39,0x32,0x2d,0x33, + 0x2e,0x34,0x36,0x31,0x2d,0x38,0x2e,0x39,0x30,0x38, + 0x2d,0x36,0x2e,0x30,0x31,0x20,0x20,0x20,0x20,0x63, + 0x2d,0x32,0x2e,0x35,0x32,0x36,0x2d,0x32,0x2e,0x35, + 0x35,0x37,0x2d,0x34,0x2e,0x35,0x32,0x33,0x2d,0x35, + 0x2e,0x35,0x32,0x34,0x2d,0x36,0x2e,0x30,0x31,0x2d, + 0x38,0x2e,0x39,0x30,0x38,0x63,0x2d,0x31,0x2e,0x34, + 0x38,0x34,0x2d,0x33,0x2e,0x33,0x38,0x35,0x2d,0x32, + 0x2e,0x32,0x32,0x39,0x2d,0x37,0x2e,0x30,0x31,0x33, + 0x2d,0x32,0x2e,0x32,0x32,0x39,0x2d,0x31,0x30,0x2e, + 0x38,0x37,0x37,0x76,0x2d,0x36,0x35,0x2e,0x39,0x39, + 0x36,0x68,0x2d,0x31,0x39,0x2e,0x30,0x35,0x39,0x76, + 0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x68,0x31,0x39, + 0x2e,0x30,0x35,0x39,0x76,0x2d,0x32,0x35,0x2e,0x34, + 0x37,0x39,0x20,0x20,0x20,0x20,0x6c,0x31,0x32,0x2e, + 0x37,0x34,0x31,0x2d,0x32,0x2e,0x30,0x37,0x32,0x76, + 0x32,0x37,0x2e,0x35,0x35,0x35,0x68,0x32,0x36,0x2e, + 0x39,0x33,0x32,0x76,0x31,0x32,0x2e,0x31,0x31,0x37, + 0x48,0x37,0x38,0x30,0x2e,0x38,0x36,0x76,0x36,0x36, + 0x2e,0x36,0x31,0x33,0x63,0x30,0x2c,0x32,0x2e,0x31, + 0x34,0x35,0x2c,0x30,0x2e,0x33,0x39,0x35,0x2c,0x34, + 0x2e,0x31,0x32,0x36,0x2c,0x31,0x2e,0x31,0x38,0x38, + 0x2c,0x35,0x2e,0x39,0x35,0x35,0x63,0x30,0x2e,0x37, + 0x39,0x36,0x2c,0x31,0x2e,0x38,0x32,0x39,0x2c,0x31, + 0x2e,0x38,0x38,0x33,0x2c,0x33,0x2e,0x34,0x33,0x38, + 0x2c,0x33,0x2e,0x32,0x36,0x36,0x2c,0x34,0x2e,0x38, + 0x31,0x33,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x33, + 0x38,0x32,0x2c,0x31,0x2e,0x33,0x38,0x36,0x2c,0x33, + 0x2e,0x30,0x30,0x35,0x2c,0x32,0x2e,0x34,0x37,0x33, + 0x2c,0x34,0x2e,0x38,0x36,0x37,0x2c,0x33,0x2e,0x32, + 0x37,0x63,0x31,0x2e,0x38,0x36,0x34,0x2c,0x30,0x2e, + 0x37,0x38,0x38,0x2c,0x33,0x2e,0x38,0x36,0x39,0x2c, + 0x31,0x2e,0x31,0x38,0x38,0x2c,0x36,0x2e,0x30,0x31, + 0x2c,0x31,0x2e,0x31,0x38,0x38,0x68,0x31,0x31,0x2e, + 0x36,0x76,0x31,0x32,0x2e,0x31,0x32,0x33,0x4c,0x37, + 0x39,0x36,0x2e,0x31,0x39,0x33,0x2c,0x35,0x32,0x33, + 0x2e,0x31,0x39,0x34,0x4c,0x37,0x39,0x36,0x2e,0x31, 0x39,0x33,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34, - 0x63,0x2d,0x33,0x2e,0x38,0x36,0x39,0x2c,0x30,0x2d, - 0x37,0x2e,0x35,0x31,0x33,0x2d,0x30,0x2e,0x37,0x32, - 0x39,0x2d,0x31,0x30,0x2e,0x39,0x32,0x37,0x2d,0x32, - 0x2e,0x31,0x37,0x34,0x63,0x2d,0x33,0x2e,0x34,0x32, - 0x31,0x2d,0x31,0x2e,0x34,0x35,0x35,0x2d,0x36,0x2e, - 0x33,0x39,0x32,0x2d,0x33,0x2e,0x34,0x36,0x31,0x2d, - 0x38,0x2e,0x39,0x30,0x39,0x2d,0x36,0x2e,0x30,0x31, - 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x35,0x32,0x36, - 0x2d,0x32,0x2e,0x35,0x35,0x37,0x2d,0x34,0x2e,0x35, - 0x32,0x33,0x2d,0x35,0x2e,0x35,0x32,0x35,0x2d,0x36, - 0x2e,0x30,0x30,0x39,0x2d,0x38,0x2e,0x39,0x30,0x38, - 0x63,0x2d,0x31,0x2e,0x34,0x38,0x35,0x2d,0x33,0x2e, - 0x33,0x38,0x35,0x2d,0x32,0x2e,0x32,0x32,0x39,0x2d, - 0x37,0x2e,0x30,0x31,0x33,0x2d,0x32,0x2e,0x32,0x32, - 0x39,0x2d,0x31,0x30,0x2e,0x38,0x37,0x37,0x76,0x2d, - 0x36,0x35,0x2e,0x39,0x39,0x36,0x68,0x2d,0x31,0x39, - 0x2e,0x30,0x35,0x39,0x76,0x2d,0x31,0x32,0x2e,0x31, - 0x31,0x37,0x68,0x31,0x39,0x2e,0x30,0x35,0x39,0x76, - 0x2d,0x32,0x35,0x2e,0x34,0x37,0x39,0x0a,0x09,0x09, - 0x6c,0x31,0x32,0x2e,0x37,0x34,0x31,0x2d,0x32,0x2e, - 0x30,0x37,0x33,0x76,0x32,0x37,0x2e,0x35,0x35,0x35, - 0x68,0x32,0x36,0x2e,0x39,0x33,0x32,0x76,0x31,0x32, - 0x2e,0x31,0x31,0x37,0x68,0x2d,0x32,0x36,0x2e,0x39, - 0x33,0x32,0x76,0x36,0x36,0x2e,0x36,0x31,0x34,0x63, - 0x30,0x2c,0x32,0x2e,0x31,0x34,0x34,0x2c,0x30,0x2e, - 0x33,0x39,0x35,0x2c,0x34,0x2e,0x31,0x32,0x36,0x2c, - 0x31,0x2e,0x31,0x38,0x39,0x2c,0x35,0x2e,0x39,0x35, - 0x35,0x63,0x30,0x2e,0x37,0x39,0x36,0x2c,0x31,0x2e, - 0x38,0x32,0x39,0x2c,0x31,0x2e,0x38,0x38,0x33,0x2c, - 0x33,0x2e,0x34,0x33,0x37,0x2c,0x33,0x2e,0x32,0x36, - 0x35,0x2c,0x34,0x2e,0x38,0x31,0x33,0x0a,0x09,0x09, - 0x63,0x31,0x2e,0x33,0x38,0x32,0x2c,0x31,0x2e,0x33, - 0x38,0x36,0x2c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x32, - 0x2e,0x34,0x37,0x33,0x2c,0x34,0x2e,0x38,0x36,0x38, - 0x2c,0x33,0x2e,0x32,0x37,0x63,0x31,0x2e,0x38,0x36, - 0x34,0x2c,0x30,0x2e,0x37,0x38,0x38,0x2c,0x33,0x2e, - 0x38,0x36,0x39,0x2c,0x31,0x2e,0x31,0x38,0x38,0x2c, - 0x36,0x2e,0x30,0x30,0x39,0x2c,0x31,0x2e,0x31,0x38, - 0x38,0x68,0x31,0x31,0x2e,0x36,0x76,0x31,0x32,0x2e, - 0x31,0x32,0x33,0x48,0x37,0x39,0x36,0x2e,0x31,0x39, - 0x33,0x4c,0x37,0x39,0x36,0x2e,0x31,0x39,0x33,0x2c, - 0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x7a,0x22,0x2f, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x38,0x33,0x34,0x2e,0x34,0x31,0x39, - 0x2c,0x33,0x39,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d, - 0x31,0x36,0x2e,0x39,0x38,0x38,0x68,0x31,0x34,0x2e, - 0x38,0x31,0x33,0x76,0x31,0x36,0x2e,0x39,0x38,0x38, - 0x48,0x38,0x33,0x34,0x2e,0x34,0x31,0x39,0x7a,0x20, - 0x4d,0x38,0x33,0x35,0x2e,0x34,0x35,0x35,0x2c,0x35, - 0x32,0x33,0x2e,0x31,0x39,0x34,0x56,0x34,0x31,0x37, - 0x2e,0x31,0x31,0x33,0x68,0x31,0x32,0x2e,0x37,0x34, - 0x76,0x31,0x30,0x36,0x2e,0x30,0x38,0x31,0x48,0x38, - 0x33,0x35,0x2e,0x34,0x35,0x35,0x7a,0x22,0x2f,0x3e, - 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d, - 0x22,0x4d,0x39,0x34,0x36,0x2e,0x33,0x35,0x31,0x2c, - 0x35,0x30,0x36,0x2e,0x32,0x30,0x31,0x63,0x2d,0x31, - 0x2e,0x36,0x32,0x33,0x2c,0x33,0x2e,0x38,0x30,0x35, - 0x2d,0x33,0x2e,0x38,0x35,0x2c,0x37,0x2e,0x31,0x31, - 0x38,0x2d,0x36,0x2e,0x36,0x38,0x32,0x2c,0x39,0x2e, - 0x39,0x34,0x32,0x63,0x2d,0x32,0x2e,0x38,0x33,0x32, - 0x2c,0x32,0x2e,0x38,0x34,0x2d,0x36,0x2e,0x31,0x34, - 0x36,0x2c,0x35,0x2e,0x30,0x36,0x31,0x2d,0x39,0x2e, - 0x39,0x34,0x33,0x2c,0x36,0x2e,0x36,0x38,0x34,0x0a, - 0x09,0x09,0x63,0x2d,0x33,0x2e,0x38,0x30,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x32,0x2d,0x37,0x2e,0x38,0x33, - 0x38,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32, - 0x2e,0x31,0x32,0x2c,0x32,0x2e,0x34,0x33,0x34,0x68, - 0x2d,0x38,0x2e,0x34,0x39,0x33,0x63,0x2d,0x34,0x2e, - 0x32,0x38,0x36,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32, - 0x37,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32, - 0x2e,0x31,0x32,0x34,0x2d,0x32,0x2e,0x34,0x33,0x34, - 0x63,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e, - 0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x30,0x39,0x2d, - 0x33,0x2e,0x38,0x34,0x34,0x2d,0x39,0x2e,0x39,0x34, - 0x31,0x2d,0x36,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, + 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, + 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, + 0x22,0x4d,0x38,0x33,0x34,0x2e,0x34,0x31,0x39,0x2c, + 0x33,0x39,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x31, + 0x36,0x2e,0x39,0x38,0x37,0x68,0x31,0x34,0x2e,0x38, + 0x31,0x33,0x76,0x31,0x36,0x2e,0x39,0x38,0x37,0x48, + 0x38,0x33,0x34,0x2e,0x34,0x31,0x39,0x7a,0x20,0x4d, + 0x38,0x33,0x35,0x2e,0x34,0x35,0x35,0x2c,0x35,0x32, + 0x33,0x2e,0x31,0x39,0x34,0x56,0x34,0x31,0x37,0x2e, + 0x31,0x31,0x33,0x68,0x31,0x32,0x2e,0x37,0x34,0x76, + 0x31,0x30,0x36,0x2e,0x30,0x38,0x31,0x48,0x38,0x33, + 0x35,0x2e,0x34,0x35,0x35,0x20,0x20,0x20,0x20,0x4c, + 0x38,0x33,0x35,0x2e,0x34,0x35,0x35,0x2c,0x35,0x32, + 0x33,0x2e,0x31,0x39,0x34,0x7a,0x22,0x2f,0x3e,0x0a, + 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, + 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, + 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x34,0x36, + 0x2e,0x33,0x35,0x32,0x2c,0x35,0x30,0x36,0x2e,0x32, + 0x30,0x31,0x63,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2c, + 0x33,0x2e,0x38,0x30,0x35,0x2d,0x33,0x2e,0x38,0x35, + 0x31,0x2c,0x37,0x2e,0x31,0x31,0x38,0x2d,0x36,0x2e, + 0x36,0x38,0x33,0x2c,0x39,0x2e,0x39,0x34,0x31,0x63, + 0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x32,0x2e,0x38, + 0x34,0x31,0x2d,0x36,0x2e,0x31,0x34,0x36,0x2c,0x35, + 0x2e,0x30,0x36,0x32,0x2d,0x39,0x2e,0x39,0x34,0x32, + 0x2c,0x36,0x2e,0x36,0x38,0x35,0x20,0x20,0x20,0x20, + 0x63,0x2d,0x33,0x2e,0x38,0x30,0x32,0x2c,0x31,0x2e, + 0x36,0x32,0x32,0x2d,0x37,0x2e,0x38,0x33,0x39,0x2c, + 0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32,0x2e,0x31, + 0x32,0x31,0x2c,0x32,0x2e,0x34,0x33,0x34,0x68,0x2d, + 0x38,0x2e,0x34,0x39,0x32,0x63,0x2d,0x34,0x2e,0x32, + 0x38,0x36,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32,0x37, + 0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e, + 0x31,0x32,0x34,0x2d,0x32,0x2e,0x34,0x33,0x34,0x63, + 0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e,0x36, + 0x32,0x33,0x2d,0x37,0x2e,0x31,0x30,0x39,0x2d,0x33, + 0x2e,0x38,0x34,0x34,0x2d,0x39,0x2e,0x39,0x34,0x31, + 0x2d,0x36,0x2e,0x36,0x38,0x35,0x20,0x20,0x20,0x20, 0x63,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2d,0x32,0x2e, - 0x38,0x32,0x34,0x2d,0x35,0x2e,0x30,0x36,0x31,0x2d, + 0x38,0x32,0x33,0x2d,0x35,0x2e,0x30,0x36,0x31,0x2d, 0x36,0x2e,0x31,0x33,0x39,0x2d,0x36,0x2e,0x36,0x38, - 0x34,0x2d,0x39,0x2e,0x39,0x34,0x32,0x63,0x2d,0x31, + 0x34,0x2d,0x39,0x2e,0x39,0x34,0x31,0x63,0x2d,0x31, 0x2e,0x36,0x32,0x33,0x2d,0x33,0x2e,0x37,0x39,0x36, - 0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d,0x37,0x2e,0x38, - 0x33,0x39,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31, + 0x2d,0x32,0x2e,0x34,0x33,0x36,0x2d,0x37,0x2e,0x38, + 0x33,0x39,0x2d,0x32,0x2e,0x34,0x33,0x36,0x2d,0x31, 0x32,0x2e,0x31,0x31,0x36,0x76,0x2d,0x34,0x37,0x2e, 0x38,0x36,0x31,0x63,0x30,0x2d,0x34,0x2e,0x32,0x37, - 0x39,0x2c,0x30,0x2e,0x38,0x31,0x32,0x2d,0x38,0x2e, - 0x33,0x32,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31, - 0x32,0x2e,0x31,0x31,0x37,0x0a,0x09,0x09,0x63,0x31, - 0x2e,0x36,0x32,0x33,0x2d,0x33,0x2e,0x38,0x30,0x35, - 0x2c,0x33,0x2e,0x38,0x35,0x32,0x2d,0x37,0x2e,0x31, - 0x31,0x37,0x2c,0x36,0x2e,0x36,0x38,0x34,0x2d,0x39, - 0x2e,0x39,0x35,0x63,0x32,0x2e,0x38,0x33,0x31,0x2d, - 0x32,0x2e,0x38,0x33,0x32,0x2c,0x36,0x2e,0x31,0x34, - 0x36,0x2d,0x35,0x2e,0x30,0x35,0x32,0x2c,0x39,0x2e, - 0x39,0x34,0x31,0x2d,0x36,0x2e,0x36,0x38,0x33,0x63, - 0x33,0x2e,0x37,0x39,0x37,0x2d,0x31,0x2e,0x36,0x31, - 0x35,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e, - 0x34,0x33,0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x34, - 0x2d,0x32,0x2e,0x34,0x33,0x35,0x68,0x38,0x2e,0x34, - 0x39,0x33,0x0a,0x09,0x09,0x63,0x34,0x2e,0x32,0x38, - 0x32,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x31,0x39,0x2c, - 0x30,0x2e,0x38,0x31,0x39,0x2c,0x31,0x32,0x2e,0x31, - 0x32,0x2c,0x32,0x2e,0x34,0x33,0x35,0x63,0x33,0x2e, - 0x37,0x39,0x37,0x2c,0x31,0x2e,0x36,0x33,0x31,0x2c, - 0x37,0x2e,0x31,0x31,0x31,0x2c,0x33,0x2e,0x38,0x35, - 0x31,0x2c,0x39,0x2e,0x39,0x34,0x33,0x2c,0x36,0x2e, - 0x36,0x38,0x33,0x63,0x32,0x2e,0x38,0x33,0x31,0x2c, - 0x32,0x2e,0x38,0x33,0x33,0x2c,0x35,0x2e,0x30,0x35, - 0x39,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e, - 0x36,0x38,0x32,0x2c,0x39,0x2e,0x39,0x35,0x0a,0x09, - 0x09,0x63,0x31,0x2e,0x36,0x32,0x33,0x2c,0x33,0x2e, - 0x37,0x39,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c, - 0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33, - 0x34,0x2c,0x31,0x32,0x2e,0x31,0x31,0x37,0x76,0x34, - 0x37,0x2e,0x38,0x36,0x31,0x43,0x39,0x34,0x38,0x2e, - 0x37,0x38,0x33,0x2c,0x34,0x39,0x38,0x2e,0x33,0x36, - 0x33,0x2c,0x39,0x34,0x37,0x2e,0x39,0x37,0x34,0x2c, - 0x35,0x30,0x32,0x2e,0x34,0x30,0x35,0x2c,0x39,0x34, - 0x36,0x2e,0x33,0x35,0x31,0x2c,0x35,0x30,0x36,0x2e, - 0x32,0x30,0x31,0x7a,0x20,0x4d,0x39,0x33,0x36,0x2e, - 0x30,0x34,0x34,0x2c,0x34,0x34,0x35,0x2e,0x34,0x39, - 0x36,0x0a,0x09,0x09,0x63,0x30,0x2d,0x32,0x2e,0x35, - 0x34,0x39,0x2d,0x30,0x2e,0x34,0x38,0x35,0x2d,0x34, - 0x2e,0x39,0x35,0x33,0x2d,0x31,0x2e,0x34,0x35,0x2d, - 0x37,0x2e,0x31,0x39,0x35,0x63,0x2d,0x30,0x2e,0x39, - 0x36,0x38,0x2d,0x32,0x2e,0x32,0x34,0x31,0x2d,0x32, - 0x2e,0x32,0x38,0x31,0x2d,0x34,0x2e,0x31,0x39,0x34, - 0x2d,0x33,0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e,0x38, - 0x35,0x34,0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2d, - 0x31,0x2e,0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x31, - 0x31,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2d,0x35,0x2e, - 0x38,0x35,0x34,0x2d,0x33,0x2e,0x39,0x33,0x36,0x0a, - 0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d, - 0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34, - 0x36,0x2d,0x31,0x2e,0x34,0x35,0x33,0x2d,0x37,0x2e, - 0x31,0x39,0x38,0x2d,0x31,0x2e,0x34,0x35,0x33,0x68, - 0x2d,0x38,0x2e,0x34,0x39,0x33,0x63,0x2d,0x32,0x2e, - 0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x36, - 0x2c,0x30,0x2e,0x34,0x38,0x39,0x2d,0x37,0x2e,0x32, - 0x30,0x32,0x2c,0x31,0x2e,0x34,0x35,0x33,0x63,0x2d, - 0x32,0x2e,0x32,0x34,0x32,0x2c,0x30,0x2e,0x39,0x36, - 0x35,0x2d,0x34,0x2e,0x31,0x39,0x33,0x2c,0x32,0x2e, - 0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x34,0x2c, - 0x33,0x2e,0x39,0x33,0x36,0x0a,0x09,0x09,0x63,0x2d, - 0x31,0x2e,0x36,0x35,0x33,0x2c,0x31,0x2e,0x36,0x36, - 0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x31, - 0x33,0x2d,0x33,0x2e,0x39,0x33,0x36,0x2c,0x35,0x2e, - 0x38,0x35,0x34,0x63,0x2d,0x30,0x2e,0x39,0x36,0x38, - 0x2c,0x32,0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e,0x34, - 0x34,0x39,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, - 0x2e,0x34,0x34,0x39,0x2c,0x37,0x2e,0x31,0x39,0x35, - 0x76,0x34,0x39,0x2e,0x33,0x31,0x63,0x30,0x2c,0x32, - 0x2e,0x35,0x35,0x37,0x2c,0x30,0x2e,0x34,0x38,0x31, - 0x2c,0x34,0x2e,0x39,0x35,0x39,0x2c,0x31,0x2e,0x34, - 0x34,0x39,0x2c,0x37,0x2e,0x32,0x30,0x31,0x0a,0x09, - 0x09,0x63,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32,0x2e, - 0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2c, - 0x34,0x2e,0x31,0x39,0x34,0x2c,0x33,0x2e,0x39,0x33, - 0x36,0x2c,0x35,0x2e,0x38,0x35,0x35,0x63,0x31,0x2e, - 0x36,0x36,0x31,0x2c,0x31,0x2e,0x36,0x35,0x32,0x2c, - 0x33,0x2e,0x36,0x31,0x32,0x2c,0x32,0x2e,0x39,0x37, - 0x2c,0x35,0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x39, - 0x33,0x35,0x63,0x32,0x2e,0x32,0x34,0x32,0x2c,0x30, - 0x2e,0x39,0x36,0x36,0x2c,0x34,0x2e,0x36,0x34,0x36, - 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x32, - 0x30,0x32,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38, - 0x2e,0x34,0x39,0x33,0x0a,0x09,0x09,0x63,0x32,0x2e, - 0x35,0x35,0x33,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35, - 0x36,0x2d,0x30,0x2e,0x34,0x38,0x31,0x2c,0x37,0x2e, - 0x31,0x39,0x38,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63, - 0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36, - 0x35,0x2c,0x34,0x2e,0x31,0x39,0x33,0x2d,0x32,0x2e, - 0x32,0x38,0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33, - 0x2e,0x39,0x33,0x35,0x63,0x31,0x2e,0x36,0x35,0x33, - 0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x32,0x2e,0x39, - 0x36,0x38,0x2d,0x33,0x2e,0x36,0x31,0x32,0x2c,0x33, - 0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e,0x38,0x35,0x35, - 0x0a,0x09,0x09,0x63,0x30,0x2e,0x39,0x36,0x35,0x2d, - 0x32,0x2e,0x32,0x34,0x32,0x2c,0x31,0x2e,0x34,0x35, - 0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34, - 0x35,0x2d,0x37,0x2e,0x32,0x30,0x31,0x56,0x34,0x34, - 0x35,0x2e,0x34,0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, - 0x4d,0x31,0x30,0x33,0x32,0x2e,0x33,0x38,0x35,0x2c, - 0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x76,0x2d,0x37, - 0x37,0x2e,0x36,0x39,0x38,0x63,0x30,0x2d,0x32,0x2e, - 0x35,0x34,0x39,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2d, - 0x34,0x2e,0x39,0x35,0x33,0x2d,0x31,0x2e,0x34,0x35, - 0x2d,0x37,0x2e,0x31,0x39,0x35,0x63,0x2d,0x30,0x2e, - 0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34,0x31,0x2d, - 0x32,0x2e,0x32,0x37,0x37,0x2d,0x34,0x2e,0x31,0x39, - 0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, - 0x38,0x35,0x34,0x0a,0x09,0x09,0x63,0x2d,0x31,0x2e, - 0x36,0x35,0x32,0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d, - 0x33,0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37, - 0x31,0x2d,0x35,0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e, - 0x39,0x33,0x36,0x63,0x2d,0x32,0x2e,0x32,0x34,0x37, - 0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36, - 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x33,0x2d,0x37, - 0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x33, - 0x68,0x2d,0x38,0x2e,0x34,0x39,0x36,0x63,0x2d,0x32, - 0x2e,0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39, - 0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x39,0x2d,0x37, - 0x2e,0x31,0x39,0x38,0x2c,0x31,0x2e,0x34,0x35,0x33, - 0x0a,0x09,0x09,0x63,0x2d,0x32,0x2e,0x32,0x34,0x36, + 0x38,0x2c,0x30,0x2e,0x38,0x31,0x33,0x2d,0x38,0x2e, + 0x33,0x31,0x39,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2d, + 0x31,0x32,0x2e,0x31,0x31,0x36,0x20,0x20,0x20,0x20, + 0x63,0x31,0x2e,0x36,0x32,0x33,0x2d,0x33,0x2e,0x38, + 0x30,0x36,0x2c,0x33,0x2e,0x38,0x35,0x32,0x2d,0x37, + 0x2e,0x31,0x31,0x37,0x2c,0x36,0x2e,0x36,0x38,0x34, + 0x2d,0x39,0x2e,0x39,0x35,0x63,0x32,0x2e,0x38,0x33, + 0x31,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x36,0x2e, + 0x31,0x34,0x36,0x2d,0x35,0x2e,0x30,0x35,0x32,0x2c, + 0x39,0x2e,0x39,0x34,0x31,0x2d,0x36,0x2e,0x36,0x38, + 0x34,0x63,0x33,0x2e,0x37,0x39,0x37,0x2d,0x31,0x2e, + 0x36,0x31,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d, + 0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32,0x2e,0x31, + 0x32,0x34,0x2d,0x32,0x2e,0x34,0x33,0x35,0x68,0x38, + 0x2e,0x34,0x39,0x32,0x20,0x20,0x20,0x20,0x63,0x34, + 0x2e,0x32,0x38,0x32,0x2c,0x30,0x2c,0x38,0x2e,0x33, + 0x31,0x39,0x2c,0x30,0x2e,0x38,0x31,0x39,0x2c,0x31, + 0x32,0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e,0x34,0x33, + 0x35,0x63,0x33,0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e, + 0x36,0x33,0x32,0x2c,0x37,0x2e,0x31,0x31,0x2c,0x33, + 0x2e,0x38,0x35,0x32,0x2c,0x39,0x2e,0x39,0x34,0x32, + 0x2c,0x36,0x2e,0x36,0x38,0x34,0x63,0x32,0x2e,0x38, + 0x33,0x31,0x2c,0x32,0x2e,0x38,0x33,0x33,0x2c,0x35, + 0x2e,0x30,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c, + 0x36,0x2e,0x36,0x38,0x33,0x2c,0x39,0x2e,0x39,0x35, + 0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x36,0x32,0x32, + 0x2c,0x33,0x2e,0x37,0x39,0x37,0x2c,0x32,0x2e,0x34, + 0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32, + 0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31, + 0x36,0x76,0x34,0x37,0x2e,0x38,0x36,0x31,0x43,0x39, + 0x34,0x38,0x2e,0x37,0x38,0x33,0x2c,0x34,0x39,0x38, + 0x2e,0x33,0x36,0x33,0x2c,0x39,0x34,0x37,0x2e,0x39, + 0x37,0x34,0x2c,0x35,0x30,0x32,0x2e,0x34,0x30,0x35, + 0x2c,0x39,0x34,0x36,0x2e,0x33,0x35,0x32,0x2c,0x35, + 0x30,0x36,0x2e,0x32,0x30,0x31,0x7a,0x20,0x4d,0x39, + 0x33,0x36,0x2e,0x30,0x34,0x34,0x2c,0x34,0x34,0x35, + 0x2e,0x34,0x39,0x36,0x20,0x20,0x20,0x20,0x63,0x30, + 0x2d,0x32,0x2e,0x35,0x34,0x39,0x2d,0x30,0x2e,0x34, + 0x38,0x35,0x2d,0x34,0x2e,0x39,0x35,0x33,0x2d,0x31, + 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x35,0x63, + 0x2d,0x30,0x2e,0x39,0x36,0x38,0x2d,0x32,0x2e,0x32, + 0x34,0x31,0x2d,0x32,0x2e,0x32,0x38,0x31,0x2d,0x34, + 0x2e,0x31,0x39,0x33,0x2d,0x33,0x2e,0x39,0x33,0x36, + 0x2d,0x35,0x2e,0x38,0x35,0x34,0x63,0x2d,0x31,0x2e, + 0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d, + 0x33,0x2e,0x36,0x31,0x31,0x2d,0x32,0x2e,0x39,0x37, + 0x32,0x2d,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33,0x2e, + 0x39,0x33,0x37,0x20,0x20,0x20,0x20,0x63,0x2d,0x32, + 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x39,0x36,0x34, + 0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34, + 0x35,0x33,0x2d,0x37,0x2e,0x31,0x39,0x38,0x2d,0x31, + 0x2e,0x34,0x35,0x33,0x68,0x2d,0x38,0x2e,0x34,0x39, + 0x32,0x63,0x2d,0x32,0x2e,0x35,0x35,0x38,0x2c,0x30, + 0x2d,0x34,0x2e,0x39,0x36,0x2c,0x30,0x2e,0x34,0x38, + 0x39,0x2d,0x37,0x2e,0x32,0x30,0x32,0x2c,0x31,0x2e, + 0x34,0x35,0x33,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32, 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2d,0x34,0x2e,0x31, - 0x39,0x34,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35, - 0x2e,0x38,0x35,0x33,0x2c,0x33,0x2e,0x39,0x33,0x36, - 0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x31,0x2e, - 0x36,0x36,0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e, - 0x36,0x31,0x33,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c, - 0x35,0x2e,0x38,0x35,0x34,0x63,0x2d,0x30,0x2e,0x39, - 0x37,0x2c,0x32,0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e, - 0x34,0x35,0x31,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d, - 0x31,0x2e,0x34,0x35,0x31,0x2c,0x37,0x2e,0x31,0x39, - 0x35,0x76,0x37,0x37,0x2e,0x36,0x39,0x38,0x68,0x2d, - 0x31,0x32,0x2e,0x37,0x34,0x0a,0x09,0x09,0x56,0x34, - 0x31,0x37,0x2e,0x31,0x31,0x33,0x68,0x34,0x2e,0x32, - 0x34,0x34,0x6c,0x36,0x2e,0x39,0x34,0x32,0x2c,0x31, - 0x30,0x2e,0x37,0x37,0x36,0x63,0x32,0x2e,0x39,0x2d, - 0x33,0x2e,0x39,0x34,0x2c,0x36,0x2e,0x35,0x34,0x35, + 0x39,0x33,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35, + 0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x39,0x33,0x37, + 0x20,0x20,0x20,0x20,0x63,0x2d,0x31,0x2e,0x36,0x35, + 0x32,0x2c,0x31,0x2e,0x36,0x36,0x2d,0x32,0x2e,0x39, + 0x37,0x2c,0x33,0x2e,0x36,0x31,0x32,0x2d,0x33,0x2e, + 0x39,0x33,0x36,0x2c,0x35,0x2e,0x38,0x35,0x34,0x63, + 0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e,0x32, + 0x34,0x32,0x2d,0x31,0x2e,0x34,0x34,0x39,0x2c,0x34, + 0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x34,0x39, + 0x2c,0x37,0x2e,0x31,0x39,0x35,0x76,0x34,0x39,0x2e, + 0x33,0x31,0x63,0x30,0x2c,0x32,0x2e,0x35,0x35,0x38, + 0x2c,0x30,0x2e,0x34,0x38,0x31,0x2c,0x34,0x2e,0x39, + 0x35,0x39,0x2c,0x31,0x2e,0x34,0x34,0x39,0x2c,0x37, + 0x2e,0x32,0x30,0x31,0x20,0x20,0x20,0x20,0x63,0x30, + 0x2e,0x39,0x36,0x36,0x2c,0x32,0x2e,0x32,0x34,0x33, + 0x2c,0x32,0x2e,0x32,0x38,0x31,0x2c,0x34,0x2e,0x31, + 0x39,0x34,0x2c,0x33,0x2e,0x39,0x33,0x36,0x2c,0x35, + 0x2e,0x38,0x35,0x35,0x63,0x31,0x2e,0x36,0x36,0x31, + 0x2c,0x31,0x2e,0x36,0x35,0x31,0x2c,0x33,0x2e,0x36, + 0x31,0x32,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e, + 0x38,0x35,0x34,0x2c,0x33,0x2e,0x39,0x33,0x35,0x63, + 0x32,0x2e,0x32,0x34,0x32,0x2c,0x30,0x2e,0x39,0x36, + 0x36,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e, + 0x34,0x34,0x37,0x2c,0x37,0x2e,0x32,0x30,0x32,0x2c, + 0x31,0x2e,0x34,0x34,0x37,0x68,0x38,0x2e,0x34,0x39, + 0x32,0x20,0x20,0x20,0x20,0x63,0x32,0x2e,0x35,0x35, + 0x34,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x37,0x2d, + 0x30,0x2e,0x34,0x38,0x31,0x2c,0x37,0x2e,0x31,0x39, + 0x38,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32,0x2e, + 0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, + 0x34,0x2e,0x31,0x39,0x33,0x2d,0x32,0x2e,0x32,0x38, + 0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33,0x2e,0x39, + 0x33,0x35,0x63,0x31,0x2e,0x36,0x35,0x32,0x2d,0x31, + 0x2e,0x36,0x36,0x31,0x2c,0x32,0x2e,0x39,0x36,0x38, + 0x2d,0x33,0x2e,0x36,0x31,0x32,0x2c,0x33,0x2e,0x39, + 0x33,0x36,0x2d,0x35,0x2e,0x38,0x35,0x35,0x20,0x20, + 0x20,0x20,0x63,0x30,0x2e,0x39,0x36,0x35,0x2d,0x32, + 0x2e,0x32,0x34,0x32,0x2c,0x31,0x2e,0x34,0x35,0x2d, + 0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35, + 0x2d,0x37,0x2e,0x32,0x30,0x31,0x56,0x34,0x34,0x35, + 0x2e,0x34,0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x09, + 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, + 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, + 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x30,0x33,0x32, + 0x2e,0x33,0x38,0x35,0x2c,0x35,0x32,0x33,0x2e,0x31, + 0x39,0x34,0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x38, + 0x63,0x30,0x2d,0x32,0x2e,0x35,0x34,0x39,0x2d,0x30, + 0x2e,0x34,0x38,0x31,0x2d,0x34,0x2e,0x39,0x35,0x33, + 0x2d,0x31,0x2e,0x34,0x34,0x39,0x2d,0x37,0x2e,0x31, + 0x39,0x35,0x63,0x2d,0x30,0x2e,0x39,0x37,0x2d,0x32, + 0x2e,0x32,0x34,0x31,0x2d,0x32,0x2e,0x32,0x37,0x37, + 0x2d,0x34,0x2e,0x31,0x39,0x33,0x2d,0x33,0x2e,0x39, + 0x33,0x38,0x2d,0x35,0x2e,0x38,0x35,0x34,0x20,0x20, + 0x20,0x20,0x63,0x2d,0x31,0x2e,0x36,0x35,0x32,0x2d, + 0x31,0x2e,0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x30, + 0x38,0x2d,0x32,0x2e,0x39,0x37,0x32,0x2d,0x35,0x2e, + 0x38,0x35,0x33,0x2d,0x33,0x2e,0x39,0x33,0x37,0x63, + 0x2d,0x32,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e,0x39, + 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, + 0x2e,0x34,0x35,0x33,0x2d,0x37,0x2e,0x31,0x39,0x38, + 0x2d,0x31,0x2e,0x34,0x35,0x33,0x68,0x2d,0x38,0x2e, + 0x34,0x39,0x36,0x63,0x2d,0x32,0x2e,0x35,0x35,0x38, + 0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c,0x30, + 0x2e,0x34,0x38,0x39,0x2d,0x37,0x2e,0x31,0x39,0x38, + 0x2c,0x31,0x2e,0x34,0x35,0x33,0x20,0x20,0x20,0x20, + 0x63,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x30,0x2e, + 0x39,0x36,0x35,0x2d,0x34,0x2e,0x31,0x39,0x33,0x2c, + 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35, + 0x33,0x2c,0x33,0x2e,0x39,0x33,0x37,0x63,0x2d,0x31, + 0x2e,0x36,0x36,0x31,0x2c,0x31,0x2e,0x36,0x36,0x2d, + 0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x31,0x32, + 0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x38, + 0x35,0x34,0x63,0x2d,0x30,0x2e,0x39,0x37,0x2c,0x32, + 0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e,0x34,0x35,0x31, + 0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34, + 0x35,0x31,0x2c,0x37,0x2e,0x31,0x39,0x35,0x76,0x37, + 0x37,0x2e,0x36,0x39,0x38,0x68,0x2d,0x31,0x32,0x2e, + 0x37,0x33,0x39,0x20,0x20,0x20,0x20,0x56,0x34,0x31, + 0x37,0x2e,0x31,0x31,0x33,0x68,0x34,0x2e,0x32,0x34, + 0x33,0x6c,0x36,0x2e,0x39,0x34,0x32,0x2c,0x31,0x30, + 0x2e,0x37,0x37,0x35,0x63,0x32,0x2e,0x39,0x2d,0x33, + 0x2e,0x39,0x33,0x39,0x2c,0x36,0x2e,0x35,0x34,0x35, 0x2d,0x37,0x2e,0x30,0x36,0x33,0x2c,0x31,0x30,0x2e, 0x39,0x33,0x31,0x2d,0x39,0x2e,0x33,0x37,0x35,0x63, - 0x34,0x2e,0x33,0x38,0x36,0x2d,0x32,0x2e,0x33,0x31, + 0x34,0x2e,0x33,0x38,0x37,0x2d,0x32,0x2e,0x33,0x31, 0x32,0x2c,0x39,0x2e,0x31,0x37,0x2d,0x33,0x2e,0x34, - 0x37,0x37,0x2c,0x31,0x34,0x2e,0x33,0x34,0x34,0x2d, + 0x37,0x37,0x2c,0x31,0x34,0x2e,0x33,0x34,0x35,0x2d, 0x33,0x2e,0x34,0x37,0x37,0x68,0x33,0x2e,0x32,0x31, - 0x35,0x0a,0x09,0x09,0x63,0x34,0x2e,0x32,0x37,0x38, - 0x2c,0x30,0x2c,0x38,0x2e,0x33,0x32,0x2c,0x30,0x2e, - 0x38,0x31,0x38,0x2c,0x31,0x32,0x2e,0x31,0x31,0x37, - 0x2c,0x32,0x2e,0x34,0x33,0x36,0x63,0x33,0x2e,0x38, - 0x2c,0x31,0x2e,0x36,0x32,0x39,0x2c,0x37,0x2e,0x31, - 0x31,0x34,0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e, - 0x39,0x35,0x2c,0x36,0x2e,0x36,0x38,0x32,0x63,0x32, - 0x2e,0x38,0x32,0x38,0x2c,0x32,0x2e,0x38,0x33,0x33, - 0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c,0x36,0x2e,0x31, - 0x34,0x36,0x2c,0x36,0x2e,0x36,0x37,0x39,0x2c,0x39, - 0x2e,0x39,0x35,0x31,0x0a,0x09,0x09,0x63,0x31,0x2e, - 0x36,0x32,0x32,0x2c,0x33,0x2e,0x37,0x39,0x35,0x2c, - 0x32,0x2e,0x34,0x33,0x35,0x2c,0x37,0x2e,0x38,0x33, - 0x38,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32, - 0x2e,0x31,0x31,0x35,0x76,0x37,0x36,0x2e,0x39,0x37, - 0x33,0x48,0x31,0x30,0x33,0x32,0x2e,0x33,0x38,0x35, - 0x4c,0x31,0x30,0x33,0x32,0x2e,0x33,0x38,0x35,0x2c, - 0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x7a,0x22,0x2f, - 0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73, - 0x76,0x67,0x3e,0x0a + 0x35,0x20,0x20,0x20,0x20,0x63,0x34,0x2e,0x32,0x37, + 0x38,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x32,0x2c,0x30, + 0x2e,0x38,0x31,0x38,0x2c,0x31,0x32,0x2e,0x31,0x31, + 0x37,0x2c,0x32,0x2e,0x34,0x33,0x36,0x63,0x33,0x2e, + 0x38,0x2c,0x31,0x2e,0x36,0x32,0x39,0x2c,0x37,0x2e, + 0x31,0x31,0x34,0x2c,0x33,0x2e,0x38,0x35,0x31,0x2c, + 0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x36,0x38,0x33, + 0x63,0x32,0x2e,0x38,0x32,0x37,0x2c,0x32,0x2e,0x38, + 0x33,0x33,0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c,0x36, + 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x37,0x39, + 0x2c,0x39,0x2e,0x39,0x35,0x31,0x20,0x20,0x20,0x20, + 0x63,0x31,0x2e,0x36,0x32,0x32,0x2c,0x33,0x2e,0x37, + 0x39,0x35,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c,0x37, + 0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x35, + 0x2c,0x31,0x32,0x2e,0x31,0x31,0x34,0x76,0x37,0x36, + 0x2e,0x39,0x37,0x34,0x48,0x31,0x30,0x33,0x32,0x2e, + 0x33,0x38,0x35,0x4c,0x31,0x30,0x33,0x32,0x2e,0x33, + 0x38,0x35,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34, + 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e, + 0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x69, + 0x64,0x3d,0x22,0x4c,0x61,0x79,0x65,0x72,0x5f,0x33, + 0x22,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f, + 0x73,0x76,0x67,0x3e }; diff --git a/data/resources/splash.svg b/data/resources/splash.svg index 67af3660f2..b15cdec4e2 100644 --- a/data/resources/splash.svg +++ b/data/resources/splash.svg @@ -1,171 +1,55 @@ - - + + - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + \ No newline at end of file diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 76bb1754e3..3fb5ef5c5b 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -228,7 +228,7 @@ void Window::renderLoadingScreen() { Eigen::Affine3f trans = Eigen::Affine3f::Identity(); Renderer::setMatrix(trans); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0xFFFFFFFF); + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF); ImageComponent splash(this); splash.setResize(Renderer::getScreenWidth() * 0.6f, 0.0f); From ab8409da4137c5a328419c3cfed6a691aa395e5e Mon Sep 17 00:00:00 2001 From: Ken Taylor Date: Fri, 1 Jul 2016 22:14:41 -0700 Subject: [PATCH 022/603] Always reload input config after running onfinish script --- es-core/src/InputManager.cpp | 4 ++++ es-core/src/guis/GuiDetectDevice.cpp | 1 - es-core/src/guis/GuiInputConfig.cpp | 3 +-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 81bbb57704..04ca793647 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -348,6 +348,10 @@ void InputManager::writeDeviceConfig(InputConfig* config) config->writeToXML(root); doc.save_file(path.c_str()); + + // execute any onFinish commands and re-load the config for changes + doOnFinish(); + loadInputConfig(config); } void InputManager::doOnFinish() diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index b7fae13654..bf8e8e4cbe 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -107,7 +107,6 @@ void GuiDetectDevice::update(int deltaTime) // If ES starts and if a known device is connected after startup skip controller configuration if(mFirstRun && fs::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) { - InputManager::getInstance()->doOnFinish(); // execute possible onFinish commands if(mDoneCallback) mDoneCallback(); delete this; // delete GUI element diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index 78f598ff10..f03144e11e 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -259,7 +259,6 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi std::vector< std::shared_ptr > buttons; buttons.push_back(std::make_shared(mWindow, "OK", "ok", [this, okCallback] { InputManager::getInstance()->writeDeviceConfig(mTargetConfig); // save - InputManager::getInstance()->doOnFinish(); // execute possible onFinish commands if(okCallback) okCallback(); delete this; @@ -388,4 +387,4 @@ bool GuiInputConfig::assign(Input input, int inputId) void GuiInputConfig::clearAssignment(int inputId) { mTargetConfig->unmapInput(inputName[inputId]); -} \ No newline at end of file +} From a78c9721be5fd3f535b21a78e73d337174955d4d Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 4 Jul 2016 00:29:53 +0100 Subject: [PATCH 023/603] rename buttons to avoid confusion (bottom -> shoulder / top -> trigger). --- es-core/src/guis/GuiInputConfig.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index 78f598ff10..c28bfee05f 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -28,10 +28,10 @@ static const char* inputName[inputCount] = "B", "X", "Y", - "LeftBottom", - "RightBottom", - "LeftTop", - "RightTop", + "LeftShoulder", + "RightShoulder", + "LeftTrigger", + "RightTrigger", "LeftThumb", "RightThumb", "LeftAnalogUp", @@ -82,10 +82,10 @@ static const char* inputDispName[inputCount] = "B", "X", "Y", - "LEFT BOTTOM", - "RIGHT BOTTOM", - "LEFT TOP", - "RIGHT TOP", + "LEFT SHOULDER", + "RIGHT SHOULDER", + "LEFT TRIGGER", + "RIGHT TRIGGER", "LEFT THUMB", "RIGHT THUMB", "LEFT ANALOG UP", From f3cf36fd94aa57e577d5c44ae0fa5c9bd011df52 Mon Sep 17 00:00:00 2001 From: "M. Broncano" Date: Sat, 23 Jul 2016 04:11:44 +0000 Subject: [PATCH 024/603] Fixes libGL problem --- es-core/src/Window.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 76bb1754e3..d9dea20508 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -13,7 +13,6 @@ Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCoun { mHelp = new HelpComponent(this); mBackgroundOverlay = new ImageComponent(this); - mBackgroundOverlay->setImage(":/scroll_gradient.png"); } Window::~Window() @@ -65,6 +64,8 @@ bool Window::init(unsigned int width, unsigned int height) return false; } + mBackgroundOverlay->setImage(":/scroll_gradient.png"); + InputManager::getInstance()->init(); ResourceManager::getInstance()->reloadAll(); From 0ab75f8996c01d27972a2cac4e86d72fa6939f3e Mon Sep 17 00:00:00 2001 From: Alex Jones Date: Wed, 3 Aug 2016 19:09:59 +0100 Subject: [PATCH 025/603] Add eclipse files to .gitignore --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 063da9dcf9..0686c4180e 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,8 @@ CMakeCache.txt CMakeFiles cmake_install.cmake Makefile + +# Eclipse +.cproject +.project +.settings/ From fa513e4c2de1897484a4f64981938ca6f80033b7 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Wed, 10 Aug 2016 02:48:04 +0100 Subject: [PATCH 026/603] cosmetic - spaces -> tabs to match rest of file --- es-core/src/InputManager.cpp | 172 ++++++++++++------------ es-core/src/guis/GuiInputConfig.cpp | 194 ++++++++++++++-------------- 2 files changed, 183 insertions(+), 183 deletions(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 04ca793647..f03fbc14ec 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -293,54 +293,54 @@ void InputManager::loadDefaultKBConfig() void InputManager::writeDeviceConfig(InputConfig* config) { - assert(initialized()); - - std::string path = getConfigPath(); - - pugi::xml_document doc; - - if(fs::exists(path)) - { - // merge files - pugi::xml_parse_result result = doc.load_file(path.c_str()); - if(!result) - { - LOG(LogError) << "Error parsing input config: " << result.description(); - } - else - { - // successfully loaded, delete the old entry if it exists - pugi::xml_node root = doc.child("inputList"); - if(root) - { - // if inputAction @type=onfinish is set, let onfinish command take care for creating input configuration. - // we just put the input configuration into a temporary input config file. - pugi::xml_node actionnode = root.find_child_by_attribute("inputAction", "type", "onfinish"); - if(actionnode) - { - path = getTemporaryConfigPath(); - doc.reset(); - root = doc.append_child("inputList"); - root.append_copy(actionnode); - } - else - { - pugi::xml_node oldEntry = root.find_child_by_attribute("inputConfig", "deviceGUID", - config->getDeviceGUIDString().c_str()); - if(oldEntry) - { - root.remove_child(oldEntry); - } - oldEntry = root.find_child_by_attribute("inputConfig", "deviceName", - config->getDeviceName().c_str()); - if(oldEntry) - { - root.remove_child(oldEntry); - } - } - } - } - } + assert(initialized()); + + std::string path = getConfigPath(); + + pugi::xml_document doc; + + if(fs::exists(path)) + { + // merge files + pugi::xml_parse_result result = doc.load_file(path.c_str()); + if(!result) + { + LOG(LogError) << "Error parsing input config: " << result.description(); + } + else + { + // successfully loaded, delete the old entry if it exists + pugi::xml_node root = doc.child("inputList"); + if(root) + { + // if inputAction @type=onfinish is set, let onfinish command take care for creating input configuration. + // we just put the input configuration into a temporary input config file. + pugi::xml_node actionnode = root.find_child_by_attribute("inputAction", "type", "onfinish"); + if(actionnode) + { + path = getTemporaryConfigPath(); + doc.reset(); + root = doc.append_child("inputList"); + root.append_copy(actionnode); + } + else + { + pugi::xml_node oldEntry = root.find_child_by_attribute("inputConfig", "deviceGUID", + config->getDeviceGUIDString().c_str()); + if(oldEntry) + { + root.remove_child(oldEntry); + } + oldEntry = root.find_child_by_attribute("inputConfig", "deviceName", + config->getDeviceName().c_str()); + if(oldEntry) + { + root.remove_child(oldEntry); + } + } + } + } + } pugi::xml_node root = doc.child("inputList"); if(!root) @@ -356,44 +356,44 @@ void InputManager::writeDeviceConfig(InputConfig* config) void InputManager::doOnFinish() { - assert(initialized()); - std::string path = getConfigPath(); - pugi::xml_document doc; - - if(fs::exists(path)) - { - pugi::xml_parse_result result = doc.load_file(path.c_str()); - if(!result) - { - LOG(LogError) << "Error parsing input config: " << result.description(); - } - else - { - pugi::xml_node root = doc.child("inputList"); - if(root) - { - root = root.find_child_by_attribute("inputAction", "type", "onfinish"); - if(root) - { - for(pugi::xml_node command = root.child("command"); command; - command = command.next_sibling("command")) - { - std::string tocall = command.text().get(); - - LOG(LogInfo) << " " << tocall; - std::cout << "==============================================\ninput config finish command:\n"; - int exitCode = runSystemCommand(tocall); - std::cout << "==============================================\n"; - - if(exitCode != 0) - { - LOG(LogWarning) << "...launch terminated with nonzero exit code " << exitCode << "!"; - } - } - } - } - } - } + assert(initialized()); + std::string path = getConfigPath(); + pugi::xml_document doc; + + if(fs::exists(path)) + { + pugi::xml_parse_result result = doc.load_file(path.c_str()); + if(!result) + { + LOG(LogError) << "Error parsing input config: " << result.description(); + } + else + { + pugi::xml_node root = doc.child("inputList"); + if(root) + { + root = root.find_child_by_attribute("inputAction", "type", "onfinish"); + if(root) + { + for(pugi::xml_node command = root.child("command"); command; + command = command.next_sibling("command")) + { + std::string tocall = command.text().get(); + + LOG(LogInfo) << " " << tocall; + std::cout << "==============================================\ninput config finish command:\n"; + int exitCode = runSystemCommand(tocall); + std::cout << "==============================================\n"; + + if(exitCode != 0) + { + LOG(LogWarning) << "...launch terminated with nonzero exit code " << exitCode << "!"; + } + } + } + } + } + } } std::string InputManager::getConfigPath() diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index d0238ebe8c..996133596b 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -18,111 +18,111 @@ static const int inputCount = 24; static const char* inputName[inputCount] = { - "Up", - "Down", - "Left", - "Right", - "Start", - "Select", - "A", - "B", - "X", - "Y", - "LeftShoulder", - "RightShoulder", - "LeftTrigger", - "RightTrigger", - "LeftThumb", - "RightThumb", - "LeftAnalogUp", - "LeftAnalogDown", - "LeftAnalogLeft", - "LeftAnalogRight", - "RightAnalogUp", - "RightAnalogDown", - "RightAnalogLeft", - "RightAnalogRight" + "Up", + "Down", + "Left", + "Right", + "Start", + "Select", + "A", + "B", + "X", + "Y", + "LeftShoulder", + "RightShoulder", + "LeftTrigger", + "RightTrigger", + "LeftThumb", + "RightThumb", + "LeftAnalogUp", + "LeftAnalogDown", + "LeftAnalogLeft", + "LeftAnalogRight", + "RightAnalogUp", + "RightAnalogDown", + "RightAnalogLeft", + "RightAnalogRight" }; static const bool inputSkippable[inputCount] = { - false, - false, - false, - false, - true, - true, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true + false, + false, + false, + false, + true, + true, + false, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true }; static const char* inputDispName[inputCount] = { - "D-PAD UP", - "D-PAD DOWN", - "D-PAD LEFT", - "D-PAD RIGHT", - "START", - "SELECT", - "A", - "B", - "X", - "Y", - "LEFT SHOULDER", - "RIGHT SHOULDER", - "LEFT TRIGGER", - "RIGHT TRIGGER", - "LEFT THUMB", - "RIGHT THUMB", - "LEFT ANALOG UP", - "LEFT ANALOG DOWN", - "LEFT ANALOG LEFT", - "LEFT ANALOG RIGHT", - "RIGHT ANALOG UP", - "RIGHT ANALOG DOWN", - "RIGHT ANALOG LEFT", - "RIGHT ANALOG RIGHT" + "D-PAD UP", + "D-PAD DOWN", + "D-PAD LEFT", + "D-PAD RIGHT", + "START", + "SELECT", + "A", + "B", + "X", + "Y", + "LEFT SHOULDER", + "RIGHT SHOULDER", + "LEFT TRIGGER", + "RIGHT TRIGGER", + "LEFT THUMB", + "RIGHT THUMB", + "LEFT ANALOG UP", + "LEFT ANALOG DOWN", + "LEFT ANALOG LEFT", + "LEFT ANALOG RIGHT", + "RIGHT ANALOG UP", + "RIGHT ANALOG DOWN", + "RIGHT ANALOG LEFT", + "RIGHT ANALOG RIGHT" }; static const char* inputIcon[inputCount] = { - ":/help/dpad_up.svg", - ":/help/dpad_down.svg", - ":/help/dpad_left.svg", - ":/help/dpad_right.svg", - ":/help/button_start.svg", - ":/help/button_select.svg", - ":/help/button_a.svg", - ":/help/button_b.svg", - ":/help/button_x.svg", - ":/help/button_y.svg", - ":/help/button_l.svg", - ":/help/button_r.svg", - ":/help/button_l.svg", - ":/help/button_r.svg", - ":/help/analog_thumb.svg", - ":/help/analog_thumb.svg", - ":/help/analog_up.svg", - ":/help/analog_down.svg", - ":/help/analog_left.svg", - ":/help/analog_right.svg", - ":/help/analog_up.svg", - ":/help/analog_down.svg", - ":/help/analog_left.svg", - ":/help/analog_right.svg" + ":/help/dpad_up.svg", + ":/help/dpad_down.svg", + ":/help/dpad_left.svg", + ":/help/dpad_right.svg", + ":/help/button_start.svg", + ":/help/button_select.svg", + ":/help/button_a.svg", + ":/help/button_b.svg", + ":/help/button_x.svg", + ":/help/button_y.svg", + ":/help/button_l.svg", + ":/help/button_r.svg", + ":/help/button_l.svg", + ":/help/button_r.svg", + ":/help/analog_thumb.svg", + ":/help/analog_thumb.svg", + ":/help/analog_up.svg", + ":/help/analog_down.svg", + ":/help/analog_left.svg", + ":/help/analog_right.svg", + ":/help/analog_up.svg", + ":/help/analog_down.svg", + ":/help/analog_left.svg", + ":/help/analog_right.svg" }; //MasterVolUp and MasterVolDown are also hooked up, but do not appear on this screen. @@ -285,7 +285,7 @@ void GuiInputConfig::onSizeChanged() mGrid.setRowHeightPerc(5, (mList->getRowHeight(0) * 5 + 2) / mSize.y()); mGrid.setRowHeightPerc(6, mButtonGrid->getSize().y() / mSize.y()); - mBusyAnim.setSize(mSize); + mBusyAnim.setSize(mSize); } void GuiInputConfig::update(int deltaTime) From 454a18f9ec0ba6ff83d565914d1c87c03dd0f5be Mon Sep 17 00:00:00 2001 From: Alex Jones Date: Tue, 9 Aug 2016 21:26:30 +0100 Subject: [PATCH 027/603] Trust the gamelist by not checking whether files exist and also improve the algorithm for parsing the gamelist. --- es-app/src/FileData.cpp | 15 ++++++++++----- es-app/src/FileData.h | 5 ++++- es-app/src/Gamelist.cpp | 35 ++++++++++++++++++++--------------- es-app/src/SystemData.cpp | 4 ++-- es-core/src/Util.cpp | 14 ++++++++++++++ es-core/src/Util.h | 1 + 6 files changed, 51 insertions(+), 23 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index f9f28185b8..0b151b6e20 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -56,8 +56,7 @@ FileData::~FileData() if(mParent) mParent->removeChild(this); - while(mChildren.size()) - delete mChildren.back(); + mChildren.clear(); } std::string FileData::getDisplayName() const @@ -107,15 +106,20 @@ void FileData::addChild(FileData* file) assert(mType == FOLDER); assert(file->getParent() == NULL); - mChildren.push_back(file); - file->mParent = this; + const std::string key = file->getPath().filename().string(); + if (mChildrenByFilename.find(key) == mChildrenByFilename.end()) + { + mChildrenByFilename[key] = file; + mChildren.push_back(file); + file->mParent = this; + } } void FileData::removeChild(FileData* file) { assert(mType == FOLDER); assert(file->getParent() == this); - + mChildrenByFilename.erase(file->getPath().filename().string()); for(auto it = mChildren.begin(); it != mChildren.end(); it++) { if(*it == file) @@ -127,6 +131,7 @@ void FileData::removeChild(FileData* file) // File somehow wasn't in our children. assert(false); + } void FileData::sort(ComparisonFunction& comparator, bool ascending) diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 99fba06710..f21ca8f9dc 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -1,7 +1,8 @@ #pragma once -#include +#include #include +#include #include #include "MetaData.h" @@ -39,6 +40,7 @@ class FileData inline FileType getType() const { return mType; } inline const boost::filesystem::path& getPath() const { return mPath; } inline FileData* getParent() const { return mParent; } + inline const std::unordered_map& getChildrenByFilename() const { return mChildrenByFilename; } inline const std::vector& getChildren() const { return mChildren; } inline SystemData* getSystem() const { return mSystem; } @@ -76,5 +78,6 @@ class FileData boost::filesystem::path mPath; SystemData* mSystem; FileData* mParent; + std::unordered_map mChildrenByFilename; std::vector mChildren; }; diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 9caeda354e..8f3db352d0 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -8,13 +8,21 @@ namespace fs = boost::filesystem; -FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& path, FileType type) +FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& path, FileType type, bool trustGamelist) { // first, verify that path is within the system's root folder FileData* root = system->getRootFolder(); - + + fs::path relative; bool contains = false; - fs::path relative = removeCommonPath(path, root->getPath(), contains); + if (trustGamelist) + { + relative = removeCommonPathUsingStrings(path, root->getPath(), contains); + } + else + { + relative = removeCommonPath(path, root->getPath(), contains); + } if(!contains) { LOG(LogError) << "File path \"" << path << "\" is outside system path \"" << system->getStartPath() << "\""; @@ -26,16 +34,12 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa bool found = false; while(path_it != relative.end()) { - const std::vector& children = treeNode->getChildren(); - found = false; - for(auto child_it = children.begin(); child_it != children.end(); child_it++) - { - if((*child_it)->getPath().filename() == *path_it) - { - treeNode = *child_it; - found = true; - break; - } + const std::unordered_map& children = treeNode->getChildrenByFilename(); + + std::string key = path_it->string(); + found = children.find(key) != children.end(); + if (found) { + treeNode = children.at(key); } // this is the end @@ -79,6 +83,7 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa void parseGamelist(SystemData* system) { + bool trustGamelist = Settings::getInstance()->getBool("ParseGamelistOnly"); std::string xmlpath = system->getGamelistPath(false); if(!boost::filesystem::exists(xmlpath)) @@ -114,13 +119,13 @@ void parseGamelist(SystemData* system) { fs::path path = resolvePath(fileNode.child("path").text().get(), relativeTo, false); - if(!boost::filesystem::exists(path)) + if(!trustGamelist && !boost::filesystem::exists(path)) { LOG(LogWarning) << "File \"" << path << "\" does not exist! Ignoring."; continue; } - FileData* file = findOrCreateFile(system, path, type); + FileData* file = findOrCreateFile(system, path, type, trustGamelist); if(!file) { LOG(LogError) << "Error finding/creating FileData for \"" << path << "\", skipping."; diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 95345ed636..cb46f1c47c 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -198,7 +198,7 @@ void SystemData::populateFolder(FileData* folder) populateFolder(newFolder); //ignore folders that do not contain games - if(newFolder->getChildren().size() == 0) + if(newFolder->getChildrenByFilename().size() == 0) delete newFolder; else folder->addChild(newFolder); @@ -311,7 +311,7 @@ bool SystemData::loadConfig() path = genericPath.generic_string(); SystemData* newSys = new SystemData(name, fullname, path, extensions, cmd, platformIds, themeFolder); - if(newSys->getRootFolder()->getChildren().size() == 0) + if(newSys->getRootFolder()->getChildrenByFilename().size() == 0) { LOG(LogWarning) << "System \"" << name << "\" has no games! Ignoring it."; delete newSys; diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index 8c7dc0c921..80560a2baa 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -100,6 +100,20 @@ fs::path resolvePath(const fs::path& path, const fs::path& relativeTo, bool allo return path; } +fs::path removeCommonPathUsingStrings(const fs::path& path, const fs::path& relativeTo, bool& contains) +{ + std::string pathStr = path.c_str(); + std::string relativeToStr = relativeTo.c_str(); + if (pathStr.find_first_of(relativeToStr) == 0) { + contains = true; + return pathStr.substr(relativeToStr.size() + 1); + } + else { + contains = false; + return path; + } +} + // example: removeCommonPath("/home/pi/roms/nes/foo/bar.nes", "/home/pi/roms/nes/") returns "foo/bar.nes" fs::path removeCommonPath(const fs::path& path, const fs::path& relativeTo, bool& contains) { diff --git a/es-core/src/Util.h b/es-core/src/Util.h index 5bf2a12752..507ceecfd6 100644 --- a/es-core/src/Util.h +++ b/es-core/src/Util.h @@ -19,6 +19,7 @@ float round(float num); std::string getCanonicalPath(const std::string& str); +boost::filesystem::path removeCommonPathUsingStrings(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains); // example: removeCommonPath("/home/pi/roms/nes/foo/bar.nes", "/home/pi/roms/nes/") returns "foo/bar.nes" boost::filesystem::path removeCommonPath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains); From c5b74947a0f85c2cababf790e02ed781eb48e557 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 13 Aug 2016 01:40:50 +0100 Subject: [PATCH 028/603] workaround for analogue trigger configuration - eg with xpad. Unlike other axis, they don't default to 0, but instead start at -32768 and go to +32767 when pressed. This confuses the current ES code axis code. As a workaround, we get the initial value and if it is -32767, we add 32767 and divide by two. This gives it a range that can be handled with the current code (from 0 to 32767). Note on my X11 machine, I had to plug the joystick in after ES was loaded or it get 0 as the initial axis value for the triggers. This seems ok on the RPI though, so possible some SDL issue. With this change on a 360 controller the triggers should be correctly detected as +2 and +5 without seeing two presses for each trigger press. --- es-core/src/InputManager.cpp | 24 +++++++++++++++++++----- es-core/src/InputManager.h | 1 + 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index f03fbc14ec..c1d2db5a97 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -89,7 +89,14 @@ void InputManager::addJoystickByDeviceIndex(int id) // set up the prevAxisValues int numAxes = SDL_JoystickNumAxes(joy); mPrevAxisValues[joyId] = new int[numAxes]; - std::fill(mPrevAxisValues[joyId], mPrevAxisValues[joyId] + numAxes, 0); //initialize array to 0 + mInitAxisValues[joyId] = new int[numAxes]; + + int axis; + for (int i = 0; i< numAxes; i++) { + axis = SDL_JoystickGetAxis(joy, i); + mInitAxisValues[joyId][i] = axis; + mPrevAxisValues[joyId][i] = axis; + } } void InputManager::removeJoystickByJoystickID(SDL_JoystickID joyId) @@ -170,21 +177,28 @@ InputConfig* InputManager::getInputConfigByDevice(int device) bool InputManager::parseEvent(const SDL_Event& ev, Window* window) { bool causedEvent = false; + int axis; + int deadzone = DEADZONE; switch(ev.type) { case SDL_JOYAXISMOTION: + axis = ev.jaxis.value; + if (mInitAxisValues[ev.jaxis.which][ev.jaxis.axis] == -32768) + { + deadzone /= 2; + axis = (axis + 32767) / 2; + } //if it switched boundaries - if((abs(ev.jaxis.value) > DEADZONE) != (abs(mPrevAxisValues[ev.jaxis.which][ev.jaxis.axis]) > DEADZONE)) + if((abs(axis) > deadzone) != (abs(mPrevAxisValues[ev.jaxis.which][ev.jaxis.axis]) > deadzone)) { int normValue; - if(abs(ev.jaxis.value) <= DEADZONE) + if(abs(axis) <= deadzone) normValue = 0; else - if(ev.jaxis.value > 0) + if(axis > 0) normValue = 1; else normValue = -1; - window->input(getInputConfigByDevice(ev.jaxis.which), Input(ev.jaxis.which, TYPE_AXIS, ev.jaxis.axis, normValue, false)); causedEvent = true; } diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index 7408356342..295fa87f74 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -26,6 +26,7 @@ class InputManager InputConfig* mKeyboardInputConfig; std::map mPrevAxisValues; + std::map mInitAxisValues; bool initialized() const; From 3eba889bdf4466bb6f39c144ef58959033907dbe Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sun, 14 Aug 2016 20:24:39 +0100 Subject: [PATCH 029/603] Revert "workaround for analogue trigger configuration - eg with xpad." --- es-core/src/InputManager.cpp | 24 +++++------------------- es-core/src/InputManager.h | 1 - 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index c1d2db5a97..f03fbc14ec 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -89,14 +89,7 @@ void InputManager::addJoystickByDeviceIndex(int id) // set up the prevAxisValues int numAxes = SDL_JoystickNumAxes(joy); mPrevAxisValues[joyId] = new int[numAxes]; - mInitAxisValues[joyId] = new int[numAxes]; - - int axis; - for (int i = 0; i< numAxes; i++) { - axis = SDL_JoystickGetAxis(joy, i); - mInitAxisValues[joyId][i] = axis; - mPrevAxisValues[joyId][i] = axis; - } + std::fill(mPrevAxisValues[joyId], mPrevAxisValues[joyId] + numAxes, 0); //initialize array to 0 } void InputManager::removeJoystickByJoystickID(SDL_JoystickID joyId) @@ -177,28 +170,21 @@ InputConfig* InputManager::getInputConfigByDevice(int device) bool InputManager::parseEvent(const SDL_Event& ev, Window* window) { bool causedEvent = false; - int axis; - int deadzone = DEADZONE; switch(ev.type) { case SDL_JOYAXISMOTION: - axis = ev.jaxis.value; - if (mInitAxisValues[ev.jaxis.which][ev.jaxis.axis] == -32768) - { - deadzone /= 2; - axis = (axis + 32767) / 2; - } //if it switched boundaries - if((abs(axis) > deadzone) != (abs(mPrevAxisValues[ev.jaxis.which][ev.jaxis.axis]) > deadzone)) + if((abs(ev.jaxis.value) > DEADZONE) != (abs(mPrevAxisValues[ev.jaxis.which][ev.jaxis.axis]) > DEADZONE)) { int normValue; - if(abs(axis) <= deadzone) + if(abs(ev.jaxis.value) <= DEADZONE) normValue = 0; else - if(axis > 0) + if(ev.jaxis.value > 0) normValue = 1; else normValue = -1; + window->input(getInputConfigByDevice(ev.jaxis.which), Input(ev.jaxis.which, TYPE_AXIS, ev.jaxis.axis, normValue, false)); causedEvent = true; } diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index 295fa87f74..7408356342 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -26,7 +26,6 @@ class InputManager InputConfig* mKeyboardInputConfig; std::map mPrevAxisValues; - std::map mInitAxisValues; bool initialized() const; From cdd819e041104a78dd072b637d5adc8a36390ae9 Mon Sep 17 00:00:00 2001 From: Joseph Mann Date: Thu, 30 Jun 2016 12:05:50 -0600 Subject: [PATCH 030/603] Fix linux (fedora) compilation issues --- es-core/src/Util.cpp | 2 +- es-core/src/Util.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index 80560a2baa..34be52494c 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -26,7 +26,7 @@ std::string strToUpper(const std::string& str) } -#if _MSC_VER < 1800 +#if defined(_WIN32) && _MSC_VER < 1800 float round(float num) { return (float)((int)(num + 0.5f)); diff --git a/es-core/src/Util.h b/es-core/src/Util.h index 507ceecfd6..d26aee08bb 100644 --- a/es-core/src/Util.h +++ b/es-core/src/Util.h @@ -15,7 +15,9 @@ Eigen::Affine3f roundMatrix(const Eigen::Affine3f& mat); Eigen::Vector3f roundVector(const Eigen::Vector3f& vec); Eigen::Vector2f roundVector(const Eigen::Vector2f& vec); +#if defined(_WIN32) && _MSC_VER < 1800 float round(float num); +#endif std::string getCanonicalPath(const std::string& str); From 0213bef499dd9e67286c33b56dcf1145cb54e132 Mon Sep 17 00:00:00 2001 From: Jacob Karleskint Date: Sat, 3 Sep 2016 15:45:52 -0500 Subject: [PATCH 031/603] Checks if game has metadata Adds a function to metadata "isDefault()" which will return true if all metadata is still set to default values and false if any values are not set to default When saving, a game that has no metadata would also not be saved in the gamelist xml. so now it will just ignore looking for that game instead of looping through every node until it reaches the end of the tree. --- es-app/src/Gamelist.cpp | 6 ++++++ es-app/src/MetaData.cpp | 9 +++++++++ es-app/src/MetaData.h | 2 ++ 3 files changed, 17 insertions(+) diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 8f3db352d0..aeb8d0580f 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -215,6 +215,12 @@ void updateGamelist(SystemData* system) { const char* tag = ((*fit)->getType() == GAME) ? "game" : "folder"; + // check if current file has metadata, if no, skip it as it wont be in the gamelist anyway. + if ((*fit)->metadata.isDefault()) { + ++fit; + continue; + } + // check if the file already exists in the XML // if it does, remove it before adding for(pugi::xml_node fileNode = root.child(tag); fileNode; fileNode = fileNode.next_sibling(tag)) diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 2d5340bd24..76c82b9d69 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -133,3 +133,12 @@ boost::posix_time::ptime MetaDataList::getTime(const std::string& key) const { return string_to_ptime(get(key), "%Y%m%dT%H%M%S%F%q"); } + +bool MetaDataList::isDefault() +{ + for (int i = 1; i < mMap.size(); i++) { + if (mMap.at(gameDecls[i].key) != gameDecls[i].defaultValue) return false; + } + + return true; +} diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 1143d9204b..d111cec786 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -56,6 +56,8 @@ class MetaDataList float getFloat(const std::string& key) const; boost::posix_time::ptime getTime(const std::string& key) const; + bool isDefault(); + inline MetaDataListType getType() const { return mType; } inline const std::vector& getMDD() const { return getMDDByType(getType()); } From 8fe0202c2e06e961de1687ccc1f772b9aeaf23a8 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 12 Sep 2016 19:04:39 +0100 Subject: [PATCH 032/603] restore cursor on exit --- emulationstation.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/emulationstation.sh b/emulationstation.sh index 227078f06d..42df2e7acc 100755 --- a/emulationstation.sh +++ b/emulationstation.sh @@ -15,5 +15,6 @@ while true; do sudo poweroff break fi + tput cnorm break done From 5b74b877ef734a027b0b1fed74a75091bfbf8ab4 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 12 Sep 2016 19:11:25 +0100 Subject: [PATCH 033/603] Revert "restore cursor on exit" This reverts commit 8fe0202c2e06e961de1687ccc1f772b9aeaf23a8. Better to do this in the RP ES launch script --- emulationstation.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/emulationstation.sh b/emulationstation.sh index 42df2e7acc..227078f06d 100755 --- a/emulationstation.sh +++ b/emulationstation.sh @@ -15,6 +15,5 @@ while true; do sudo poweroff break fi - tput cnorm break done From b1daeafe24bfb93f75f4c7e63f52f8dcc09cdc2b Mon Sep 17 00:00:00 2001 From: vbs Date: Mon, 12 Sep 2016 13:31:44 +0200 Subject: [PATCH 034/603] Added flag for GUI components to indicate activate background processing. ES won't enter sleep mode if any component has the processing flag set. (In sleep mode no more calls to update() on any components are invoked) --- es-app/src/guis/GuiScraperMulti.cpp | 4 ++++ es-core/src/GuiComponent.cpp | 8 +++++++- es-core/src/GuiComponent.h | 5 +++++ es-core/src/Window.cpp | 8 +++++++- es-core/src/Window.h | 3 +++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index afbfe0a3d1..8da0377dfe 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -21,6 +21,8 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queuepushGui(new GuiMsgBox(mWindow, ss.str(), "OK", [&] { delete this; })); + + mIsProcessing = false; } std::vector GuiScraperMulti::getHelpPrompts() diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 2b4fbe3c13..d079930ded 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -6,7 +6,8 @@ #include "ThemeData.h" GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), - mPosition(Eigen::Vector3f::Zero()), mSize(Eigen::Vector2f::Zero()), mTransform(Eigen::Affine3f::Identity()) + mPosition(Eigen::Vector3f::Zero()), mSize(Eigen::Vector2f::Zero()), mTransform(Eigen::Affine3f::Identity()), + mIsProcessing(false) { for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) mAnimationMap[i] = NULL; @@ -339,3 +340,8 @@ HelpStyle GuiComponent::getHelpStyle() { return HelpStyle(); } + +bool GuiComponent::isProcessing() const +{ + return mIsProcessing; +} diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 0b8734a2f2..566b2a615f 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -90,6 +90,9 @@ class GuiComponent virtual HelpStyle getHelpStyle(); + // Returns true if the component is busy doing background processing (e.g. HTTP downloads) + bool isProcessing() const; + protected: void renderChildren(const Eigen::Affine3f& transform) const; void updateSelf(int deltaTime); // updates animations @@ -104,6 +107,8 @@ class GuiComponent Eigen::Vector3f mPosition; Eigen::Vector2f mSize; + bool mIsProcessing; + public: const static unsigned char MAX_ANIMATIONS = 4; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index d9dea20508..c8db08089c 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -4,6 +4,7 @@ #include "AudioManager.h" #include "Log.h" #include "Settings.h" +#include #include #include "components/HelpComponent.h" #include "components/ImageComponent.h" @@ -202,7 +203,7 @@ void Window::render() } unsigned int screensaverTime = (unsigned int)Settings::getInstance()->getInt("ScreenSaverTime"); - if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0 && mAllowSleep) + if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0 && !isProcessing() && mAllowSleep) { // go to sleep mSleeping = true; @@ -335,3 +336,8 @@ void Window::onWake() { } + +bool Window::isProcessing() +{ + return count_if(mGuiStack.begin(), mGuiStack.end(), [](GuiComponent* c) { return c->isProcessing(); }) > 0; +} diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 6576cb04a3..54e014c762 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -41,6 +41,9 @@ class Window void onSleep(); void onWake(); + // Returns true if at least one component on the stack is processing + bool isProcessing(); + HelpComponent* mHelp; ImageComponent* mBackgroundOverlay; From 329730cc3eac734f4fda4e317e9378db098d9768 Mon Sep 17 00:00:00 2001 From: verybadsoldier Date: Sat, 17 Sep 2016 15:21:24 +0200 Subject: [PATCH 035/603] Decoupled screensaver and sleep mode: background jobs will only prevent sleep mode but screen saver (dimming) will still be active. --- es-core/src/Window.cpp | 23 ++++++++++++++++------- es-core/src/Window.h | 1 + 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index c8db08089c..e5622e8ca5 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -203,11 +203,16 @@ void Window::render() } unsigned int screensaverTime = (unsigned int)Settings::getInstance()->getInt("ScreenSaverTime"); - if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0 && !isProcessing() && mAllowSleep) + if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0) { - // go to sleep - mSleeping = true; - onSleep(); + renderScreenSaver(); + + if (!isProcessing() && mAllowSleep) + { + // go to sleep + mSleeping = true; + onSleep(); + } } } @@ -327,9 +332,6 @@ void Window::setHelpPrompts(const std::vector& prompts, const HelpSt void Window::onSleep() { - Renderer::setMatrix(Eigen::Affine3f::Identity()); - unsigned char opacity = Settings::getInstance()->getString("ScreenSaverBehavior") == "dim" ? 0xA0 : 0xFF; - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity); } void Window::onWake() @@ -341,3 +343,10 @@ bool Window::isProcessing() { return count_if(mGuiStack.begin(), mGuiStack.end(), [](GuiComponent* c) { return c->isProcessing(); }) > 0; } + +void Window::renderScreenSaver() +{ + Renderer::setMatrix(Eigen::Affine3f::Identity()); + unsigned char opacity = Settings::getInstance()->getString("ScreenSaverBehavior") == "dim" ? 0xA0 : 0xFF; + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity); +} diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 54e014c762..5eee873a2c 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -43,6 +43,7 @@ class Window // Returns true if at least one component on the stack is processing bool isProcessing(); + void renderScreenSaver(); HelpComponent* mHelp; ImageComponent* mBackgroundOverlay; From 1c343c999b1a1a4e1405f2a5926b8b9e3d7c1b68 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 8 Nov 2016 19:38:10 +0000 Subject: [PATCH 036/603] show "CONFIGURATION" instead of "X GAMES AVAILABLE" for the retropie menu --- es-app/src/views/SystemView.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 54987fdf87..013490aca9 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -177,8 +177,10 @@ void SystemView::onCursorChanged(const CursorState& state) setAnimation(infoFadeOut, 0, [this, gameCount] { std::stringstream ss; + if (getSelected()->getName() == "retropie") + ss << "CONFIGURATION"; // only display a game count if there are at least 2 games - if(gameCount > 1) + else if(gameCount > 1) ss << gameCount << " GAMES AVAILABLE"; mSystemInfo.setText(ss.str()); From 4d27443f335ef2ab22d5f6ba670e9ec879bff3f2 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Wed, 30 Nov 2016 18:15:13 +0000 Subject: [PATCH 037/603] emulationstation - add additional scroll speed tier, and slow down fastest speed --- es-core/src/components/IList.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index 85d8064961..ede3360a9d 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -36,10 +36,11 @@ struct ScrollTierList // default scroll tiers const ScrollTier QUICK_SCROLL_TIERS[] = { {500, 500}, - {5000, 114}, - {0, 8} + {2000, 114}, + {4000, 32}, + {0, 16} }; -const ScrollTierList LIST_SCROLL_STYLE_QUICK = { 3, QUICK_SCROLL_TIERS }; +const ScrollTierList LIST_SCROLL_STYLE_QUICK = { 4, QUICK_SCROLL_TIERS }; const ScrollTier SLOW_SCROLL_TIERS[] = { {500, 500}, From 3ccc380c2b56747cf579947ade02f888723222d3 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 3 Dec 2016 02:22:59 +0000 Subject: [PATCH 038/603] added confirmation to "CONFIGURE INPUT". fixes #75 --- es-app/src/guis/GuiMenu.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 032706b939..d005fc04ec 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -184,8 +184,13 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN }); addEntry("CONFIGURE INPUT", 0x777777FF, true, - [this] { - mWindow->pushGui(new GuiDetectDevice(mWindow, false, nullptr)); + [this] { + Window* window = mWindow; + window->pushGui(new GuiMsgBox(window, "ARE YOU SURE YOU WANT TO CONFIGURE INPUT?", "YES", + [window] { + window->pushGui(new GuiDetectDevice(window, false, nullptr)); + }, "NO", nullptr) + ); }); addEntry("QUIT", 0x777777FF, true, From 25e1067794760523a331c07c1c0b23922b9644f2 Mon Sep 17 00:00:00 2001 From: fieldofcows Date: Sun, 4 Dec 2016 23:47:34 +0000 Subject: [PATCH 039/603] Add video view that is based on detail view but allows themes to include a video preview of the selected game along with a marquee image --- CMake/Packages/FindVLC.cmake | 55 ++ CMake/Packages/MacroEnsureVersion.cmake | 117 ++++ CMakeLists.txt | 3 + README.md | 5 +- es-app/CMakeLists.txt | 2 + es-app/src/FileData.cpp | 26 + es-app/src/FileData.h | 2 + es-app/src/MetaData.cpp | 17 +- es-app/src/MetaData.h | 2 +- es-app/src/views/ViewController.cpp | 39 +- .../src/views/gamelist/VideoGameListView.cpp | 345 ++++++++++++ es-app/src/views/gamelist/VideoGameListView.h | 53 ++ es-core/CMakeLists.txt | 2 + es-core/src/GuiComponent.cpp | 14 + es-core/src/GuiComponent.h | 3 + es-core/src/ThemeData.cpp | 10 +- es-core/src/ThemeData.h | 1 + es-core/src/Window.cpp | 5 + es-core/src/components/VideoComponent.cpp | 518 ++++++++++++++++++ es-core/src/components/VideoComponent.h | 112 ++++ 20 files changed, 1318 insertions(+), 13 deletions(-) create mode 100644 CMake/Packages/FindVLC.cmake create mode 100644 CMake/Packages/MacroEnsureVersion.cmake create mode 100644 es-app/src/views/gamelist/VideoGameListView.cpp create mode 100644 es-app/src/views/gamelist/VideoGameListView.h create mode 100644 es-core/src/components/VideoComponent.cpp create mode 100644 es-core/src/components/VideoComponent.h diff --git a/CMake/Packages/FindVLC.cmake b/CMake/Packages/FindVLC.cmake new file mode 100644 index 0000000000..eec5c57092 --- /dev/null +++ b/CMake/Packages/FindVLC.cmake @@ -0,0 +1,55 @@ +# - Try to find VLC library +# Once done this will define +# +# VLC_FOUND - system has VLC +# VLC_INCLUDE_DIR - The VLC include directory +# VLC_LIBRARIES - The libraries needed to use VLC +# VLC_DEFINITIONS - Compiler switches required for using VLC +# +# Copyright (C) 2008, Tanguy Krotoff +# Copyright (C) 2008, Lukas Durfina +# Copyright (c) 2009, Fathi Boudra +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# + +if(VLC_INCLUDE_DIR AND VLC_LIBRARIES) + # in cache already + set(VLC_FIND_QUIETLY TRUE) +endif(VLC_INCLUDE_DIR AND VLC_LIBRARIES) + +# use pkg-config to get the directories and then use these values +# in the FIND_PATH() and FIND_LIBRARY() calls +if(NOT WIN32) + find_package(PkgConfig) + pkg_check_modules(VLC libvlc>=1.0.0) + set(VLC_DEFINITIONS ${VLC_CFLAGS}) + set(VLC_LIBRARIES ${VLC_LDFLAGS}) +endif(NOT WIN32) + +# TODO add argument support to pass version on find_package +include(MacroEnsureVersion) +macro_ensure_version(1.0.0 ${VLC_VERSION} VLC_VERSION_OK) +if(VLC_VERSION_OK) + set(VLC_FOUND TRUE) + message(STATUS "VLC library found") +else(VLC_VERSION_OK) + set(VLC_FOUND FALSE) + message(FATAL_ERROR "VLC library not found") +endif(VLC_VERSION_OK) + +find_path(VLC_INCLUDE_DIR + NAMES vlc.h + PATHS ${VLC_INCLUDE_DIRS} + PATH_SUFFIXES vlc) + +find_library(VLC_LIBRARIES + NAMES vlc + PATHS ${VLC_LIBRARY_DIRS}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(VLC DEFAULT_MSG VLC_INCLUDE_DIR VLC_LIBRARIES) + +# show the VLC_INCLUDE_DIR and VLC_LIBRARIES variables only in the advanced view +mark_as_advanced(VLC_INCLUDE_DIR VLC_LIBRARIES) diff --git a/CMake/Packages/MacroEnsureVersion.cmake b/CMake/Packages/MacroEnsureVersion.cmake new file mode 100644 index 0000000000..6797e5b7db --- /dev/null +++ b/CMake/Packages/MacroEnsureVersion.cmake @@ -0,0 +1,117 @@ +# This file defines the following macros for developers to use in ensuring +# that installed software is of the right version: +# +# MACRO_ENSURE_VERSION - test that a version number is greater than +# or equal to some minimum +# MACRO_ENSURE_VERSION_RANGE - test that a version number is greater than +# or equal to some minimum and less than some +# maximum +# MACRO_ENSURE_VERSION2 - deprecated, do not use in new code +# + +# MACRO_ENSURE_VERSION +# This macro compares version numbers of the form "x.y.z" or "x.y" +# MACRO_ENSURE_VERSION( FOO_MIN_VERSION FOO_VERSION_FOUND FOO_VERSION_OK) +# will set FOO_VERSION_OK to true if FOO_VERSION_FOUND >= FOO_MIN_VERSION +# Leading and trailing text is ok, e.g. +# MACRO_ENSURE_VERSION( "2.5.31" "flex 2.5.4a" VERSION_OK) +# which means 2.5.31 is required and "flex 2.5.4a" is what was found on the system + +# Copyright (c) 2006, David Faure, +# Copyright (c) 2007, Will Stephenson +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +# MACRO_ENSURE_VERSION_RANGE +# This macro ensures that a version number of the form +# "x.y.z" or "x.y" falls within a range defined by +# min_version <= found_version < max_version. +# If this expression holds, FOO_VERSION_OK will be set TRUE +# +# Example: MACRO_ENSURE_VERSION_RANGE3( "0.1.0" ${FOOCODE_VERSION} "0.7.0" FOO_VERSION_OK ) +# +# This macro will break silently if any of x,y,z are greater than 100. +# +# Copyright (c) 2007, Will Stephenson +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +# NORMALIZE_VERSION +# Helper macro to convert version numbers of the form "x.y.z" +# to an integer equal to 10^4 * x + 10^2 * y + z +# +# This macro will break silently if any of x,y,z are greater than 100. +# +# Copyright (c) 2006, David Faure, +# Copyright (c) 2007, Will Stephenson +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +# CHECK_RANGE_INCLUSIVE_LOWER +# Helper macro to check whether x <= y < z +# +# Copyright (c) 2007, Will Stephenson +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + + +MACRO(NORMALIZE_VERSION _requested_version _normalized_version) + STRING(REGEX MATCH "[^0-9]*[0-9]+\\.[0-9]+\\.[0-9]+.*" _threePartMatch "${_requested_version}") + if (_threePartMatch) + # parse the parts of the version string + STRING(REGEX REPLACE "[^0-9]*([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" _major_vers "${_requested_version}") + STRING(REGEX REPLACE "[^0-9]*[0-9]+\\.([0-9]+)\\.[0-9]+.*" "\\1" _minor_vers "${_requested_version}") + STRING(REGEX REPLACE "[^0-9]*[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" _patch_vers "${_requested_version}") + else (_threePartMatch) + STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+" "\\1" _major_vers "${_requested_version}") + STRING(REGEX REPLACE "[0-9]+\\.([0-9]+)" "\\1" _minor_vers "${_requested_version}") + set(_patch_vers "0") + endif (_threePartMatch) + + # compute an overall version number which can be compared at once + MATH(EXPR ${_normalized_version} "${_major_vers}*10000 + ${_minor_vers}*100 + ${_patch_vers}") +ENDMACRO(NORMALIZE_VERSION) + +MACRO(MACRO_CHECK_RANGE_INCLUSIVE_LOWER _lower_limit _value _upper_limit _ok) + if (${_value} LESS ${_lower_limit}) + set( ${_ok} FALSE ) + elseif (${_value} EQUAL ${_lower_limit}) + set( ${_ok} TRUE ) + elseif (${_value} EQUAL ${_upper_limit}) + set( ${_ok} FALSE ) + elseif (${_value} GREATER ${_upper_limit}) + set( ${_ok} FALSE ) + else (${_value} LESS ${_lower_limit}) + set( ${_ok} TRUE ) + endif (${_value} LESS ${_lower_limit}) +ENDMACRO(MACRO_CHECK_RANGE_INCLUSIVE_LOWER) + +MACRO(MACRO_ENSURE_VERSION requested_version found_version var_too_old) + NORMALIZE_VERSION( ${requested_version} req_vers_num ) + NORMALIZE_VERSION( ${found_version} found_vers_num ) + + if (found_vers_num LESS req_vers_num) + set( ${var_too_old} FALSE ) + else (found_vers_num LESS req_vers_num) + set( ${var_too_old} TRUE ) + endif (found_vers_num LESS req_vers_num) + +ENDMACRO(MACRO_ENSURE_VERSION) + +MACRO(MACRO_ENSURE_VERSION2 requested_version2 found_version2 var_too_old2) + MACRO_ENSURE_VERSION( ${requested_version2} ${found_version2} ${var_too_old2}) +ENDMACRO(MACRO_ENSURE_VERSION2) + +MACRO(MACRO_ENSURE_VERSION_RANGE min_version found_version max_version var_ok) + NORMALIZE_VERSION( ${min_version} req_vers_num ) + NORMALIZE_VERSION( ${found_version} found_vers_num ) + NORMALIZE_VERSION( ${max_version} max_vers_num ) + + MACRO_CHECK_RANGE_INCLUSIVE_LOWER( ${req_vers_num} ${found_vers_num} ${max_vers_num} ${var_ok}) +ENDMACRO(MACRO_ENSURE_VERSION_RANGE) + + diff --git a/CMakeLists.txt b/CMakeLists.txt index 784c2d0ac0..48143a5230 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,6 +48,7 @@ find_package(SDL2 REQUIRED) find_package(Boost REQUIRED COMPONENTS system filesystem date_time locale) find_package(Eigen3 REQUIRED) find_package(CURL REQUIRED) +find_package(VLC REQUIRED) #add ALSA for Linux if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") @@ -99,6 +100,7 @@ set(COMMON_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} ${CURL_INCLUDE_DIR} + ${VLC_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/external ${CMAKE_CURRENT_SOURCE_DIR}/es-core/src ) @@ -148,6 +150,7 @@ set(COMMON_LIBRARIES ${FreeImage_LIBRARIES} ${SDL2_LIBRARY} ${CURL_LIBRARIES} + ${VLC_LIBRARIES} pugixml nanosvg ) diff --git a/README.md b/README.md index ff02eae137..1113c6d03f 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,10 @@ EmulationStation has a few dependencies. For building, you'll need CMake, SDL2, **On Debian/Ubuntu:** All of this be easily installed with apt-get: ```bash -sudo apt-get install libsdl2-dev libboost-system-dev libboost-filesystem-dev libboost-date-time-dev libboost-locale-dev libfreeimage-dev libfreetype6-dev libeigen3-dev libcurl4-openssl-dev libasound2-dev libgl1-mesa-dev build-essential cmake fonts-droid +sudo apt-get install libsdl2-dev libboost-system-dev libboost-filesystem-dev libboost-date-time-dev \ + libboost-locale-dev libfreeimage-dev libfreetype6-dev libeigen3-dev libcurl4-openssl-dev \ + libasound2-dev libgl1-mesa-dev build-essential cmake fonts-droid \ + libvlc-dev libvlccore-dev vlc-nox ``` Then, generate and build the Makefile with CMake: diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 6f1de88be4..47dfd131c5 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -38,6 +38,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/VideoGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h @@ -84,6 +85,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGameListView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/VideoGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp ) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 0b151b6e20..c8409d4d59 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -81,6 +81,32 @@ const std::string& FileData::getThumbnailPath() const return metadata.get("image"); } +const std::string& FileData::getVideoPath() const +{ + if (mType == GAME) + { + return metadata.get("video"); + } + else + { + static std::string empty; + return empty; + } +} + +const std::string& FileData::getMarqueePath() const +{ + if (mType == GAME) + { + return metadata.get("marquee"); + } + else + { + static std::string empty; + return empty; + } +} + std::vector FileData::getFilesRecursive(unsigned int typeMask) const { diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index f21ca8f9dc..bd59ac0710 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -45,6 +45,8 @@ class FileData inline SystemData* getSystem() const { return mSystem; } virtual const std::string& getThumbnailPath() const; + virtual const std::string& getVideoPath() const; + virtual const std::string& getMarqueePath() const; std::vector getFilesRecursive(unsigned int typeMask) const; diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 76c82b9d69..3f5da45c67 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -9,8 +9,10 @@ MetaDataDecl gameDecls[] = { // key, type, default, statistic, name in GuiMetaDataEd, prompt in GuiMetaDataEd {"name", MD_STRING, "", false, "name", "enter game name"}, {"desc", MD_MULTILINE_STRING, "", false, "description", "enter description"}, - {"image", MD_IMAGE_PATH, "", false, "image", "enter path to image"}, - {"thumbnail", MD_IMAGE_PATH, "", false, "thumbnail", "enter path to thumbnail"}, + {"image", MD_PATH, "", false, "image", "enter path to image"}, + {"video", MD_PATH , "", false, "video", "enter path to video"}, + {"marquee", MD_PATH, "", false, "marquee", "enter path to marquee"}, + {"thumbnail", MD_PATH, "", false, "thumbnail", "enter path to thumbnail"}, {"rating", MD_RATING, "0.000000", false, "rating", "enter rating"}, {"releasedate", MD_DATE, "not-a-date-time", false, "release date", "enter release date"}, {"developer", MD_STRING, "unknown", false, "developer", "enter game developer"}, @@ -25,8 +27,8 @@ const std::vector gameMDD(gameDecls, gameDecls + sizeof(gameDecls) MetaDataDecl folderDecls[] = { {"name", MD_STRING, "", false}, {"desc", MD_MULTILINE_STRING, "", false}, - {"image", MD_IMAGE_PATH, "", false}, - {"thumbnail", MD_IMAGE_PATH, "", false}, + {"image", MD_PATH, "", false}, + {"thumbnail", MD_PATH, "", false}, }; const std::vector folderMDD(folderDecls, folderDecls + sizeof(folderDecls) / sizeof(folderDecls[0])); @@ -68,9 +70,10 @@ MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node n { // if it's a path, resolve relative paths std::string value = md.text().get(); - if(iter->type == MD_IMAGE_PATH) + if (iter->type == MD_PATH) + { value = resolvePath(value, relativeTo, true).generic_string(); - + } mdl.set(iter->key, value); }else{ mdl.set(iter->key, iter->defaultValue); @@ -96,7 +99,7 @@ void MetaDataList::appendToXML(pugi::xml_node parent, bool ignoreDefaults, const // try and make paths relative if we can std::string value = mapIter->second; - if(mddIter->type == MD_IMAGE_PATH) + if (mddIter->type == MD_PATH) value = makeRelativePath(value, relativeTo, true).generic_string(); parent.append_child(mapIter->first.c_str()).text().set(value.c_str()); diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index d111cec786..136a8b2f6a 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -16,7 +16,7 @@ enum MetaDataType //specialized types MD_MULTILINE_STRING, - MD_IMAGE_PATH, + MD_PATH, MD_RATING, MD_DATE, MD_TIME //used for lastplayed diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 5a94d97c2b..1e10c91753 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -5,12 +5,14 @@ #include "views/gamelist/BasicGameListView.h" #include "views/gamelist/DetailedGameListView.h" +#include "views/gamelist/VideoGameListView.h" #include "views/gamelist/GridGameListView.h" #include "guis/GuiMenu.h" #include "guis/GuiMsgBox.h" #include "animations/LaunchAnimation.h" #include "animations/MoveCameraAnimation.h" #include "animations/LambdaAnimation.h" +#include ViewController* ViewController::sInstance = NULL; @@ -55,6 +57,12 @@ int ViewController::getSystemId(SystemData* system) void ViewController::goToSystemView(SystemData* system) { + // Tell any current view it's about to be hidden + if (mCurrentView) + { + mCurrentView->onHide(); + } + mState.viewing = SYSTEM_SELECT; mState.system = system; @@ -99,7 +107,15 @@ void ViewController::goToGameList(SystemData* system) mState.viewing = GAME_LIST; mState.system = system; + if (mCurrentView) + { + mCurrentView->onHide(); + } mCurrentView = getGameListView(system); + if (mCurrentView) + { + mCurrentView->onShow(); + } playViewTransition(); } @@ -163,6 +179,10 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) return; } + // Hide the current view + if (mCurrentView) + mCurrentView->onHide(); + Eigen::Affine3f origCamera = mCamera; origCamera.translation() = -mCurrentView->getPosition(); @@ -210,17 +230,26 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste //decide type bool detailed = false; + bool video = false; std::vector files = system->getRootFolder()->getFilesRecursive(GAME | FOLDER); for(auto it = files.begin(); it != files.end(); it++) { - if(!(*it)->getThumbnailPath().empty()) + if(!(*it)->getVideoPath().empty()) { - detailed = true; + video = true; break; } + else if(!(*it)->getThumbnailPath().empty()) + { + detailed = true; + // Don't break out in case any subsequent files have video + } } - if(detailed) + if (video) + // Create the view + view = std::shared_ptr(new VideoGameListView(mWindow, system->getRootFolder())); + else if(detailed) view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); else view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); @@ -347,6 +376,10 @@ void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) break; } } + // Redisplay the current view + if (mCurrentView) + mCurrentView->onShow(); + } void ViewController::reloadAll() diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp new file mode 100644 index 0000000000..2a270be028 --- /dev/null +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -0,0 +1,345 @@ +#include "views/gamelist/VideoGameListView.h" +#include "views/ViewController.h" +#include "Window.h" +#include "animations/LambdaAnimation.h" +#include +#include + +VideoGameListView::VideoGameListView(Window* window, FileData* root) : + BasicGameListView(window, root), + mDescContainer(window), mDescription(window), + mMarquee(window), + mImage(window), + mVideo(window), + mVideoPlaying(false), + + mLblRating(window), mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), + mLblGenre(window), mLblPlayers(window), mLblLastPlayed(window), mLblPlayCount(window), + + mRating(window), mReleaseDate(window), mDeveloper(window), mPublisher(window), + mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window) +{ + const float padding = 0.01f; + + mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); + mList.setSize(mSize.x() * (0.50f - padding), mList.getSize().y()); + mList.setAlignment(TextListComponent::ALIGN_LEFT); + mList.setCursorChangedCallback([&](const CursorState& state) { updateInfoPanel(); }); + + // Marquee + mMarquee.setOrigin(0.5f, 0.5f); + mMarquee.setPosition(mSize.x() * 0.25f, mSize.y() * 0.10f); + mMarquee.setMaxSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.18f); + addChild(&mMarquee); + + // Image + mImage.setOrigin(0.5f, 0.5f); + // Default to off the screen + mImage.setPosition(2.0f, 2.0f); + mImage.setMaxSize(1.0f, 1.0f); + addChild(&mImage); + + // video + mVideo.setOrigin(0.5f, 0.5f); + mVideo.setPosition(mSize.x() * 0.25f, mSize.y() * 0.4f); + mVideo.setSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.4f); + addChild(&mVideo); + + // We want the video to be in front of the background but behind any 'extra' images + for (std::vector::iterator it = mChildren.begin(); it != mChildren.end(); ++it) + { + if (*it == &mThemeExtras) + { + mChildren.insert(it, &mVideo); + mChildren.pop_back(); + break; + } + } + + // metadata labels + values + mLblRating.setText("Rating: "); + addChild(&mLblRating); + addChild(&mRating); + mLblReleaseDate.setText("Released: "); + addChild(&mLblReleaseDate); + addChild(&mReleaseDate); + mLblDeveloper.setText("Developer: "); + addChild(&mLblDeveloper); + addChild(&mDeveloper); + mLblPublisher.setText("Publisher: "); + addChild(&mLblPublisher); + addChild(&mPublisher); + mLblGenre.setText("Genre: "); + addChild(&mLblGenre); + addChild(&mGenre); + mLblPlayers.setText("Players: "); + addChild(&mLblPlayers); + addChild(&mPlayers); + mLblLastPlayed.setText("Last played: "); + addChild(&mLblLastPlayed); + mLastPlayed.setDisplayMode(DateTimeComponent::DISP_RELATIVE_TO_NOW); + addChild(&mLastPlayed); + mLblPlayCount.setText("Times played: "); + addChild(&mLblPlayCount); + addChild(&mPlayCount); + + mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.65f); + mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), mSize.y() - mDescContainer.getPosition().y()); + mDescContainer.setAutoScroll(true); + addChild(&mDescContainer); + + mDescription.setFont(Font::get(FONT_SIZE_SMALL)); + mDescription.setSize(mDescContainer.getSize().x(), 0); + mDescContainer.addChild(&mDescription); + + initMDLabels(); + initMDValues(); + updateInfoPanel(); +} + +VideoGameListView::~VideoGameListView() +{ +} + +void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) +{ + BasicGameListView::onThemeChanged(theme); + + using namespace ThemeFlags; + mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE); + mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE); + mVideo.applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY); + + initMDLabels(); + std::vector labels = getMDLabels(); + assert(labels.size() == 8); + const char* lblElements[8] = { + "md_lbl_rating", "md_lbl_releasedate", "md_lbl_developer", "md_lbl_publisher", + "md_lbl_genre", "md_lbl_players", "md_lbl_lastplayed", "md_lbl_playcount" + }; + + for(unsigned int i = 0; i < labels.size(); i++) + { + labels[i]->applyTheme(theme, getName(), lblElements[i], ALL); + } + + + initMDValues(); + std::vector values = getMDValues(); + assert(values.size() == 8); + const char* valElements[8] = { + "md_rating", "md_releasedate", "md_developer", "md_publisher", + "md_genre", "md_players", "md_lastplayed", "md_playcount" + }; + + for(unsigned int i = 0; i < values.size(); i++) + { + values[i]->applyTheme(theme, getName(), valElements[i], ALL ^ ThemeFlags::TEXT); + } + + mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE); + mDescription.setSize(mDescContainer.getSize().x(), 0); + mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | TEXT)); +} + +void VideoGameListView::initMDLabels() +{ + using namespace Eigen; + + std::vector components = getMDLabels(); + + const unsigned int colCount = 2; + const unsigned int rowCount = components.size() / 2; + + Vector3f start(mSize.x() * 0.01f, mSize.y() * 0.625f, 0.0f); + + const float colSize = (mSize.x() * 0.48f) / colCount; + const float rowPadding = 0.01f * mSize.y(); + + for(unsigned int i = 0; i < components.size(); i++) + { + const unsigned int row = i % rowCount; + Vector3f pos(0.0f, 0.0f, 0.0f); + if(row == 0) + { + pos = start + Vector3f(colSize * (i / rowCount), 0, 0); + }else{ + // work from the last component + GuiComponent* lc = components[i-1]; + pos = lc->getPosition() + Vector3f(0, lc->getSize().y() + rowPadding, 0); + } + + components[i]->setFont(Font::get(FONT_SIZE_SMALL)); + components[i]->setPosition(pos); + } +} + +void VideoGameListView::initMDValues() +{ + using namespace Eigen; + + std::vector labels = getMDLabels(); + std::vector values = getMDValues(); + + std::shared_ptr defaultFont = Font::get(FONT_SIZE_SMALL); + mRating.setSize(defaultFont->getHeight() * 5.0f, (float)defaultFont->getHeight()); + mReleaseDate.setFont(defaultFont); + mDeveloper.setFont(defaultFont); + mPublisher.setFont(defaultFont); + mGenre.setFont(defaultFont); + mPlayers.setFont(defaultFont); + mLastPlayed.setFont(defaultFont); + mPlayCount.setFont(defaultFont); + + float bottom = 0.0f; + + const float colSize = (mSize.x() * 0.48f) / 2; + for(unsigned int i = 0; i < labels.size(); i++) + { + const float heightDiff = (labels[i]->getSize().y() - values[i]->getSize().y()) / 2; + values[i]->setPosition(labels[i]->getPosition() + Vector3f(labels[i]->getSize().x(), heightDiff, 0)); + values[i]->setSize(colSize - labels[i]->getSize().x(), values[i]->getSize().y()); + + float testBot = values[i]->getPosition().y() + values[i]->getSize().y(); + if(testBot > bottom) + bottom = testBot; + } + + mDescContainer.setPosition(mDescContainer.getPosition().x(), bottom + mSize.y() * 0.01f); + mDescContainer.setSize(mDescContainer.getSize().x(), mSize.y() - mDescContainer.getPosition().y()); +} + + + +void VideoGameListView::updateInfoPanel() +{ + FileData* file = (mList.size() == 0 || mList.isScrolling()) ? NULL : mList.getSelected(); + + bool fadingOut; + if(file == NULL) + { + mVideo.setVideo(""); + mVideo.setImage(""); + mVideoPlaying = false; + //mMarquee.setImage(""); + //mDescription.setText(""); + fadingOut = true; + + }else{ + std::string video_path; + std::string marquee_path; + std::string thumbnail_path; + video_path = file->getVideoPath(); + marquee_path = file->getMarqueePath(); + thumbnail_path = file->getThumbnailPath(); + + if (!video_path.empty() && (video_path[0] == '~')) + { + video_path.erase(0, 1); + video_path.insert(0, getHomePath()); + } + if (!marquee_path.empty() && (marquee_path[0] == '~')) + { + marquee_path.erase(0, 1); + marquee_path.insert(0, getHomePath()); + } + if (!thumbnail_path.empty() && (thumbnail_path[0] == '~')) + { + thumbnail_path.erase(0, 1); + thumbnail_path.insert(0, getHomePath()); + } + if (!mVideo.setVideo(video_path)) + mVideo.setDefaultVideo(); + mVideoPlaying = true; + + mVideo.setImage(thumbnail_path); + mMarquee.setImage(marquee_path); + mImage.setImage(thumbnail_path); + + mDescription.setText(file->metadata.get("desc")); + mDescContainer.reset(); + + if(file->getType() == GAME) + { + mRating.setValue(file->metadata.get("rating")); + mReleaseDate.setValue(file->metadata.get("releasedate")); + mDeveloper.setValue(file->metadata.get("developer")); + mPublisher.setValue(file->metadata.get("publisher")); + mGenre.setValue(file->metadata.get("genre")); + mPlayers.setValue(file->metadata.get("players")); + mLastPlayed.setValue(file->metadata.get("lastplayed")); + mPlayCount.setValue(file->metadata.get("playcount")); + } + + fadingOut = false; + } + + std::vector comps = getMDValues(); + comps.push_back(&mMarquee); + comps.push_back(&mVideo); + comps.push_back(&mDescription); + comps.push_back(&mImage); + std::vector labels = getMDLabels(); + comps.insert(comps.end(), labels.begin(), labels.end()); + + for(auto it = comps.begin(); it != comps.end(); it++) + { + GuiComponent* comp = *it; + // an animation is playing + // then animate if reverse != fadingOut + // an animation is not playing + // then animate if opacity != our target opacity + if((comp->isAnimationPlaying(0) && comp->isAnimationReversed(0) != fadingOut) || + (!comp->isAnimationPlaying(0) && comp->getOpacity() != (fadingOut ? 0 : 255))) + { + auto func = [comp](float t) + { + comp->setOpacity((unsigned char)(lerp(0.0f, 1.0f, t)*255)); + }; + comp->setAnimation(new LambdaAnimation(func, 150), 0, nullptr, fadingOut); + } + } +} + +void VideoGameListView::launch(FileData* game) +{ + Eigen::Vector3f target(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0); + if(mMarquee.hasImage()) + target << mVideo.getCenter().x(), mVideo.getCenter().y(), 0; + + ViewController::get()->launch(game, target); +} + +std::vector VideoGameListView::getMDLabels() +{ + std::vector ret; + ret.push_back(&mLblRating); + ret.push_back(&mLblReleaseDate); + ret.push_back(&mLblDeveloper); + ret.push_back(&mLblPublisher); + ret.push_back(&mLblGenre); + ret.push_back(&mLblPlayers); + ret.push_back(&mLblLastPlayed); + ret.push_back(&mLblPlayCount); + return ret; +} + +std::vector VideoGameListView::getMDValues() +{ + std::vector ret; + ret.push_back(&mRating); + ret.push_back(&mReleaseDate); + ret.push_back(&mDeveloper); + ret.push_back(&mPublisher); + ret.push_back(&mGenre); + ret.push_back(&mPlayers); + ret.push_back(&mLastPlayed); + ret.push_back(&mPlayCount); + return ret; +} + +void VideoGameListView::update(int deltaTime) +{ + BasicGameListView::update(deltaTime); + mVideo.update(deltaTime); +} diff --git a/es-app/src/views/gamelist/VideoGameListView.h b/es-app/src/views/gamelist/VideoGameListView.h new file mode 100644 index 0000000000..b0673d396d --- /dev/null +++ b/es-app/src/views/gamelist/VideoGameListView.h @@ -0,0 +1,53 @@ +#pragma once + +#include "views/gamelist/BasicGameListView.h" +#include "components/ScrollableContainer.h" +#include "components/RatingComponent.h" +#include "components/DateTimeComponent.h" +#include "components/VideoComponent.h" + +class VideoGameListView : public BasicGameListView +{ +public: + VideoGameListView(Window* window, FileData* root); + virtual ~VideoGameListView(); + + virtual void onThemeChanged(const std::shared_ptr& theme) override; + + virtual const char* getName() const override { return "video"; } + +protected: + virtual void launch(FileData* game) override; + + virtual void update(int deltaTime) override; + +private: + void updateInfoPanel(); + + void initMDLabels(); + void initMDValues(); + + ImageComponent mMarquee; + VideoComponent mVideo; + ImageComponent mImage; + + TextComponent mLblRating, mLblReleaseDate, mLblDeveloper, mLblPublisher, mLblGenre, mLblPlayers, mLblLastPlayed, mLblPlayCount; + + RatingComponent mRating; + DateTimeComponent mReleaseDate; + TextComponent mDeveloper; + TextComponent mPublisher; + TextComponent mGenre; + TextComponent mPlayers; + DateTimeComponent mLastPlayed; + TextComponent mPlayCount; + + std::vector getMDLabels(); + std::vector getMDValues(); + + ScrollableContainer mDescContainer; + TextComponent mDescription; + + bool mVideoPlaying; + +}; diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 09219d6739..cf0cfb3ea3 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -42,6 +42,7 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoComponent.h # Guis ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.h @@ -96,6 +97,7 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/SwitchComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoComponent.cpp # Guis ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.cpp diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index d079930ded..6ba531f2bf 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -345,3 +345,17 @@ bool GuiComponent::isProcessing() const { return mIsProcessing; } + +void GuiComponent::onShow() +{ + for(unsigned int i = 0; i < getChildCount(); i++) + getChild(i)->onShow(); +} + +void GuiComponent::onHide() +{ + for(unsigned int i = 0; i < getChildCount(); i++) + getChild(i)->onHide(); +} + + diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 566b2a615f..e37abe69f0 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -77,6 +77,9 @@ class GuiComponent virtual void onFocusGained() {}; virtual void onFocusLost() {}; + + virtual void onShow(); + virtual void onHide(); // Default implementation just handles and tags as normalized float pairs. // You probably want to keep this behavior for any derived classes as well as add your own. diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index fce86628f3..871e7dead0 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -82,7 +82,15 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("textColor", COLOR) ("iconColor", COLOR) ("fontPath", PATH) - ("fontSize", FLOAT))); + ("fontSize", FLOAT))) + ("video", makeMap(boost::assign::map_list_of + ("pos", NORMALIZED_PAIR) + ("size", NORMALIZED_PAIR) + ("origin", NORMALIZED_PAIR) + ("default", PATH) + ("delay", FLOAT) + ("showSnapshotNoVideo", BOOLEAN) + ("showSnapshotDelay", BOOLEAN))); namespace fs = boost::filesystem; diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 268f0753f1..32702a15c8 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -37,6 +37,7 @@ namespace ThemeFlags TEXT = 512, FORCE_UPPERCASE = 1024, LINE_SPACING = 2048, + DELAY = 4096, ALL = 0xFFFFFFFF }; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index e5622e8ca5..761df4abc4 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -90,6 +90,11 @@ bool Window::init(unsigned int width, unsigned int height) void Window::deinit() { + // Hide all GUI elements on uninitialisation - this disable + for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) + { + (*i)->onHide(); + } InputManager::getInstance()->deinit(); ResourceManager::getInstance()->unloadAll(); Renderer::deinit(); diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp new file mode 100644 index 0000000000..6f41ffd786 --- /dev/null +++ b/es-core/src/components/VideoComponent.cpp @@ -0,0 +1,518 @@ +#include "components/VideoComponent.h" +#include "Renderer.h" +#include "ThemeData.h" +#include "Util.h" +#ifdef WIN32 +#include +#endif + +#define FADE_TIME_MS 200 + +libvlc_instance_t* VideoComponent::mVLC = NULL; + +// VLC prepares to render a video frame. +static void *lock(void *data, void **p_pixels) { + struct VideoContext *c = (struct VideoContext *)data; + SDL_LockMutex(c->mutex); + SDL_LockSurface(c->surface); + *p_pixels = c->surface->pixels; + return NULL; // Picture identifier, not needed here. +} + +// VLC just rendered a video frame. +static void unlock(void *data, void *id, void *const *p_pixels) { + struct VideoContext *c = (struct VideoContext *)data; + SDL_UnlockSurface(c->surface); + SDL_UnlockMutex(c->mutex); +} + +// VLC wants to display a video frame. +static void display(void *data, void *id) { + //Data to be displayed +} + +VideoComponent::VideoComponent(Window* window) : + GuiComponent(window), + mStaticImage(window), + mMediaPlayer(nullptr), + mVideoHeight(0), + mVideoWidth(0), + mStartDelayed(false), + mIsPlaying(false), + mShowing(false) +{ + memset(&mContext, 0, sizeof(mContext)); + + // Setup the default configuration + mConfig.showSnapshotDelay = false; + mConfig.showSnapshotNoVideo = false; + mConfig.startDelay = 0; + + // Get an empty texture for rendering the video + mTexture = TextureResource::get(""); + + // Make sure VLC has been initialised + setupVLC(); +} + +VideoComponent::~VideoComponent() +{ + // Stop any currently running video + stopVideo(); +} + +void VideoComponent::setOrigin(float originX, float originY) +{ + mOrigin << originX, originY; + + // Update the embeded static image + mStaticImage.setOrigin(originX, originY); +} + +Eigen::Vector2f VideoComponent::getCenter() const +{ + return Eigen::Vector2f(mPosition.x() - (getSize().x() * mOrigin.x()) + getSize().x() / 2, + mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); +} + +void VideoComponent::onSizeChanged() +{ + // Update the embeded static image + mStaticImage.onSizeChanged(); +} + +bool VideoComponent::setVideo(std::string path) +{ + // Convert the path into a format VLC can understand + boost::filesystem::path fullPath = getCanonicalPath(path); + fullPath.make_preferred().native(); + + // Check that it's changed + if (fullPath == mVideoPath) + return !path.empty(); + + // Store the path + mVideoPath = fullPath; + + // If the file exists then set the new video + if (!fullPath.empty() && ResourceManager::getInstance()->fileExists(fullPath.generic_string())) + { + // Return true to show that we are going to attempt to play a video + return true; + } + // Return false to show that no video will be displayed + return false; +} + +void VideoComponent::setImage(std::string path) +{ + // Check that the image has changed + if (path == mStaticImagePath) + return; + + mStaticImage.setImage(path); + // Make the image stretch to fill the video region + mStaticImage.setSize(getSize()); + mFadeIn = 0.0f; + mStaticImagePath = path; +} + +void VideoComponent::setDefaultVideo() +{ + setVideo(mConfig.defaultVideoPath); +} + +void VideoComponent::setOpacity(unsigned char opacity) +{ + mOpacity = opacity; + // Update the embeded static image + mStaticImage.setOpacity(opacity); +} + +void VideoComponent::render(const Eigen::Affine3f& parentTrans) +{ + float x, y; + + Eigen::Affine3f trans = parentTrans * getTransform(); + GuiComponent::renderChildren(trans); + + Renderer::setMatrix(trans); + + // Handle the case where the video is delayed + handleStartDelay(); + + // Handle looping of the video + handleLooping(); + + if (mIsPlaying && mContext.valid) + { + float tex_offs_x = 0.0f; + float tex_offs_y = 0.0f; + float x2; + float y2; + + x = -(float)mSize.x() * mOrigin.x(); + y = -(float)mSize.y() * mOrigin.y(); + x2 = x+mSize.x(); + y2 = y+mSize.y(); + + // Define a structure to contain the data for each vertex + struct Vertex + { + Eigen::Vector2f pos; + Eigen::Vector2f tex; + Eigen::Vector4f colour; + } vertices[6]; + + // We need two triangles to cover the rectangular area + vertices[0].pos[0] = x; vertices[0].pos[1] = y; + vertices[1].pos[0] = x; vertices[1].pos[1] = y2; + vertices[2].pos[0] = x2; vertices[2].pos[1] = y; + + vertices[3].pos[0] = x2; vertices[3].pos[1] = y; + vertices[4].pos[0] = x; vertices[4].pos[1] = y2; + vertices[5].pos[0] = x2; vertices[5].pos[1] = y2; + + // Texture coordinates + vertices[0].tex[0] = -tex_offs_x; vertices[0].tex[1] = -tex_offs_y; + vertices[1].tex[0] = -tex_offs_x; vertices[1].tex[1] = 1.0f + tex_offs_y; + vertices[2].tex[0] = 1.0f + tex_offs_x; vertices[2].tex[1] = -tex_offs_y; + + vertices[3].tex[0] = 1.0f + tex_offs_x; vertices[3].tex[1] = -tex_offs_y; + vertices[4].tex[0] = -tex_offs_x; vertices[4].tex[1] = 1.0f + tex_offs_y; + vertices[5].tex[0] = 1.0f + tex_offs_x; vertices[5].tex[1] = 1.0f + tex_offs_y; + + // Colours - use this to fade the video in and out + for (int i = 0; i < (4 * 6); ++i) { + if ((i%4) < 3) + vertices[i / 4].colour[i % 4] = mFadeIn; + else + vertices[i / 4].colour[i % 4] = 1.0f; + } + + glEnable(GL_TEXTURE_2D); + + // Build a texture for the video frame + mTexture->initFromPixels((unsigned char*)mContext.surface->pixels, mContext.surface->w, mContext.surface->h); + mTexture->bind(); + + // Render it + glEnableClientState(GL_COLOR_ARRAY); + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + + glColorPointer(4, GL_FLOAT, sizeof(Vertex), &vertices[0].colour); + glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].pos); + glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].tex); + + glDrawArrays(GL_TRIANGLES, 0, 6); + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + + glDisable(GL_TEXTURE_2D); + } + else + { + // This is the case where the video is not currently being displayed. Work out + // if we need to display a static image + if ((mConfig.showSnapshotNoVideo && mVideoPath.empty()) || (mStartDelayed && mConfig.showSnapshotDelay)) + { + // Display the static image instead + mStaticImage.setOpacity((unsigned char)(mFadeIn * 255.0f)); + mStaticImage.render(parentTrans); + } + } + +} + +void VideoComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +{ + using namespace ThemeFlags; + + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "video"); + if(!elem) + { + return; + } + + Eigen::Vector2f scale = getParent() ? getParent()->getSize() : Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + + if ((properties & POSITION) && elem->has("pos")) + { + Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); + setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); + } + + if ((properties & ThemeFlags::SIZE) && elem->has("size")) + { + setSize(elem->get("size").cwiseProduct(scale)); + } + + // position + size also implies origin + if (((properties & ORIGIN) || ((properties & POSITION) && (properties & ThemeFlags::SIZE))) && elem->has("origin")) + setOrigin(elem->get("origin")); + + if(elem->has("default")) + mConfig.defaultVideoPath = elem->get("default"); + + if((properties & ThemeFlags::DELAY) && elem->has("delay")) + mConfig.startDelay = (unsigned)(elem->get("delay") * 1000.0f); + + if (elem->has("showSnapshotNoVideo")) + mConfig.showSnapshotNoVideo = elem->get("showSnapshotNoVideo"); + + if (elem->has("showSnapshotDelay")) + mConfig.showSnapshotDelay = elem->get("showSnapshotDelay"); + + // Update the embeded static image + mStaticImage.setPosition(getPosition()); + mStaticImage.setMaxSize(getSize()); + mStaticImage.setSize(getSize()); +} + +std::vector VideoComponent::getHelpPrompts() +{ + std::vector ret; + ret.push_back(HelpPrompt("a", "select")); + return ret; +} + +void VideoComponent::setupContext() +{ + if (!mContext.valid) + { + // Create an RGBA surface to render the video into + mContext.surface = SDL_CreateRGBSurface(SDL_SWSURFACE, (int)mVideoWidth, (int)mVideoHeight, 32, 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff); + mContext.mutex = SDL_CreateMutex(); + mContext.valid = true; + } +} + +void VideoComponent::freeContext() +{ + if (mContext.valid) + { + SDL_FreeSurface(mContext.surface); + SDL_DestroyMutex(mContext.mutex); + mContext.valid = false; + } +} + +void VideoComponent::setupVLC() +{ + // If VLC hasn't been initialised yet then do it now + if (!mVLC) + { + const char* args[] = { "--quiet" }; + mVLC = libvlc_new(sizeof(args) / sizeof(args[0]), args); + } +} + +void VideoComponent::handleStartDelay() +{ + // Only play if any delay has timed out + if (mStartDelayed) + { + if (mStartTime > SDL_GetTicks()) + { + // Timeout not yet completed + return; + } + // Completed + mStartDelayed = false; + // Clear the playing flag so startVideo works + mIsPlaying = false; + startVideo(); + } +} + +void VideoComponent::handleLooping() +{ + if (mIsPlaying && mMediaPlayer) + { + libvlc_state_t state = libvlc_media_player_get_state(mMediaPlayer); + if (state == libvlc_Ended) + { + //libvlc_media_player_set_position(mMediaPlayer, 0.0f); + libvlc_media_player_set_media(mMediaPlayer, mMedia); + libvlc_media_player_play(mMediaPlayer); + } + } +} + +void VideoComponent::startVideo() +{ + if (!mIsPlaying) { + mVideoWidth = 0; + mVideoHeight = 0; + +#ifdef WIN32 + std::wstring_convert, wchar_t> wton; + std::string path = wton.to_bytes(mVideoPath.c_str()); +#else + std::string path(mVideoPath.c_str()); +#endif + // Make sure we have a video path + if (mVLC && (path.size() > 0)) + { + // Set the video that we are going to be playing so we don't attempt to restart it + mPlayingVideoPath = mVideoPath; + + // Open the media + mMedia = libvlc_media_new_path(mVLC, path.c_str()); + if (mMedia) + { + unsigned track_count; + // Get the media metadata so we can find the aspect ratio + libvlc_media_parse(mMedia); + libvlc_media_track_t** tracks; + track_count = libvlc_media_tracks_get(mMedia, &tracks); + for (unsigned track = 0; track < track_count; ++track) + { + if (tracks[track]->i_type == libvlc_track_video) + { + mVideoWidth = tracks[track]->video->i_width; + mVideoHeight = tracks[track]->video->i_height; + break; + } + } + libvlc_media_tracks_release(tracks, track_count); + + // Make sure we found a valid video track + if ((mVideoWidth > 0) && (mVideoHeight > 0)) + { + setupContext(); + + // Setup the media player + mMediaPlayer = libvlc_media_player_new_from_media(mMedia); + libvlc_media_player_play(mMediaPlayer); + libvlc_video_set_callbacks(mMediaPlayer, lock, unlock, display, (void*)&mContext); + libvlc_video_set_format(mMediaPlayer, "RGBA", (int)mVideoWidth, (int)mVideoHeight, (int)mVideoWidth * 4); + + // Update the playing state + mIsPlaying = true; + mFadeIn = 0.0f; + } + } + } + } +} + +void VideoComponent::startVideoWithDelay() +{ + // If not playing then either start the video or initiate the delay + if (!mIsPlaying) + { + // Set the video that we are going to be playing so we don't attempt to restart it + mPlayingVideoPath = mVideoPath; + + if (mConfig.startDelay == 0) + { + // No delay. Just start the video + mStartDelayed = false; + startVideo(); + } + else + { + // Configure the start delay + mStartDelayed = true; + mFadeIn = 0.0f; + mStartTime = SDL_GetTicks() + mConfig.startDelay; + } + mIsPlaying = true; + } +} + +void VideoComponent::stopVideo() +{ + mIsPlaying = false; + mStartDelayed = false; + // Release the media player so it stops calling back to us + if (mMediaPlayer) + { + libvlc_media_player_stop(mMediaPlayer); + libvlc_media_player_release(mMediaPlayer); + libvlc_media_release(mMedia); + mMediaPlayer = NULL; + freeContext(); + } +} + +void VideoComponent::update(int deltaTime) +{ + manageState(); + + // If the video start is delayed and there is less than the fade time then set the image fade + // accordingly + if (mStartDelayed) + { + Uint32 ticks = SDL_GetTicks(); + if (mStartTime > ticks) + { + Uint32 diff = mStartTime - ticks; + if (diff < FADE_TIME_MS) + { + mFadeIn = (float)diff / (float)FADE_TIME_MS; + return; + } + } + } + // If the fade in is less than 1 then increment it + if (mFadeIn < 1.0f) + { + mFadeIn += deltaTime / (float)FADE_TIME_MS; + if (mFadeIn > 1.0f) + mFadeIn = 1.0f; + } + GuiComponent::update(deltaTime); +} + +void VideoComponent::manageState() +{ + // We will only show if the component is on display + bool show = mShowing; + + // See if we're already playing + if (mIsPlaying) + { + // If we are not on display then stop the video from playing + if (!show) + { + stopVideo(); + } + else + { + if (mVideoPath != mPlayingVideoPath) + { + // Path changed. Stop the video. We will start it again below because + // mIsPlaying will be modified by stopVideo to be false + stopVideo(); + } + } + } + // Need to recheck variable rather than 'else' because it may be modified above + if (!mIsPlaying) + { + // If we are on display then see if we should start the video + if (show && !mVideoPath.empty()) + { + startVideoWithDelay(); + } + } +} + +void VideoComponent::onShow() +{ + mShowing = true; + manageState(); +} + +void VideoComponent::onHide() +{ + mShowing = false; + manageState(); +} + + diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h new file mode 100644 index 0000000000..f8376cfe90 --- /dev/null +++ b/es-core/src/components/VideoComponent.h @@ -0,0 +1,112 @@ +#ifndef _VIDEOCOMPONENT_H_ +#define _VIDEOCOMPONENT_H_ + +#include "platform.h" +#include GLHEADER + +#include "GuiComponent.h" +#include "ImageComponent.h" +#include +#include +#include "resources/TextureResource.h" +#include +#include +#include +#include + +struct VideoContext { + SDL_Surface* surface; + SDL_mutex* mutex; + bool valid; +}; + +class VideoComponent : public GuiComponent +{ + // Structure that groups together the configuration of the video component + struct Configuration + { + unsigned startDelay; + bool showSnapshotNoVideo; + bool showSnapshotDelay; + std::string defaultVideoPath; + }; + +public: + static void setupVLC(); + + VideoComponent(Window* window); + virtual ~VideoComponent(); + + // Loads the video at the given filepath + bool setVideo(std::string path); + // Loads a static image that is displayed if the video cannot be played + void setImage(std::string path); + + // Configures the component to show the default video + void setDefaultVideo(); + + virtual void onShow() override; + virtual void onHide() override; + + //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) + void setOrigin(float originX, float originY); + inline void setOrigin(Eigen::Vector2f origin) { setOrigin(origin.x(), origin.y()); } + + void onSizeChanged() override; + void setOpacity(unsigned char opacity) override; + + void render(const Eigen::Affine3f& parentTrans) override; + + virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; + + virtual std::vector getHelpPrompts() override; + + // Returns the center point of the video (takes origin into account). + Eigen::Vector2f getCenter() const; + + virtual void update(int deltaTime); + +private: + // Start the video Immediately + void startVideo(); + // Start the video after any configured delay + void startVideoWithDelay(); + // Stop the video + void stopVideo(); + + void setupContext(); + void freeContext(); + + // Handle any delay to the start of playing the video clip. Must be called periodically + void handleStartDelay(); + + // Handle looping the video. Must be called periodically + void handleLooping(); + + // Manage the playing state of the component + void manageState(); + +private: + static libvlc_instance_t* mVLC; + libvlc_media_t* mMedia; + libvlc_media_player_t* mMediaPlayer; + VideoContext mContext; + unsigned mVideoWidth; + unsigned mVideoHeight; + Eigen::Vector2f mOrigin; + std::shared_ptr mTexture; + float mFadeIn; + std::string mStaticImagePath; + ImageComponent mStaticImage; + + boost::filesystem::path mVideoPath; + boost::filesystem::path mPlayingVideoPath; + bool mStartDelayed; + unsigned mStartTime; + bool mIsPlaying; + bool mShowing; + + Configuration mConfig; +}; + +#endif From e2bb889d016a15e9313dadb2b910db3e9852be04 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 12 Dec 2016 17:04:20 +0000 Subject: [PATCH 040/603] bumped version number to 2.1.0rp --- es-app/src/EmulationStation.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 3fbb279050..99cdb39a70 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -3,11 +3,11 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 0 -#define PROGRAM_VERSION_MAINTENANCE 1 -#define PROGRAM_VERSION_STRING "2.0.1a" +#define PROGRAM_VERSION_MINOR 1 +#define PROGRAM_VERSION_MAINTENANCE 0 +#define PROGRAM_VERSION_STRING "2.1.0rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,0,1\0" +#define RESOURCE_VERSION_STRING "2,1,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From a97a8a30901d8e0b025f283a44b99b2fd4411755 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 15 Dec 2016 17:57:20 +0000 Subject: [PATCH 041/603] check for libMali.so in additional locations --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 48143a5230..261215014f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,9 +26,11 @@ else() endif() #------------------------------------------------------------------------------- -#check if we're running on olinuxino +#check if we're running on olinuxino / odroid / etc MESSAGE("Looking for libMali.so") -if(EXISTS "/usr/lib/libMali.so") +if(EXISTS "/usr/lib/libMali.so" OR + EXISTS "/usr/lib/arm-linux-gnueabihf/libMali.so" OR + EXISTS "/usr/lib/aarch64-linux-gnu/libMali.so") MESSAGE("libMali.so found") set(GLSystem "OpenGL ES") else() From 44ea23ae6ae8ace74193ebdc0a6e70f7f43b8e10 Mon Sep 17 00:00:00 2001 From: verybadsoldier Date: Mon, 19 Dec 2016 16:59:40 +0100 Subject: [PATCH 042/603] when saving gamelist.xml only save metadata that has been changed (to speed things up) --- es-app/src/Gamelist.cpp | 29 +++++++++++++++++++---------- es-app/src/MetaData.cpp | 15 +++++++++++++-- es-app/src/MetaData.h | 4 ++++ 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index aeb8d0580f..dacf88fd4f 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -139,6 +139,8 @@ void parseGamelist(SystemData* system) //make sure name gets set if one didn't exist if(file->metadata.get("name").empty()) file->metadata.set("name", defaultName); + + file->metadata.resetChangedFlag(); } } } @@ -207,20 +209,24 @@ void updateGamelist(SystemData* system) FileData* rootFolder = system->getRootFolder(); if (rootFolder != nullptr) { + int numUpdated = 0; + //get only files, no folders std::vector files = rootFolder->getFilesRecursive(GAME | FOLDER); //iterate through all files, checking if they're already in the XML - std::vector::const_iterator fit = files.cbegin(); - while(fit != files.cend()) + for(std::vector::const_iterator fit = files.cbegin(); fit != files.cend(); ++fit) { const char* tag = ((*fit)->getType() == GAME) ? "game" : "folder"; // check if current file has metadata, if no, skip it as it wont be in the gamelist anyway. if ((*fit)->metadata.isDefault()) { - ++fit; continue; } + // do not touch if it wasn't changed anyway + if (!(*fit)->metadata.wasChanged()) + continue; + // check if the file already exists in the XML // if it does, remove it before adding for(pugi::xml_node fileNode = root.child(tag); fileNode; fileNode = fileNode.next_sibling(tag)) @@ -244,18 +250,21 @@ void updateGamelist(SystemData* system) // it was either removed or never existed to begin with; either way, we can add it now addFileDataNode(root, *fit, tag, system); - - ++fit; + ++numUpdated; } //now write the file - //make sure the folders leading up to this path exist (or the write will fail) - boost::filesystem::path xmlWritePath(system->getGamelistPath(true)); - boost::filesystem::create_directories(xmlWritePath.parent_path()); + if (numUpdated > 0) { + //make sure the folders leading up to this path exist (or the write will fail) + boost::filesystem::path xmlWritePath(system->getGamelistPath(true)); + boost::filesystem::create_directories(xmlWritePath.parent_path()); + + LOG(LogInfo) << "Added/Updated " << numUpdated << " entities in '" << xmlReadPath << "'"; - if (!doc.save_file(xmlWritePath.c_str())) { - LOG(LogError) << "Error saving gamelist.xml to \"" << xmlWritePath << "\" (for system " << system->getName() << ")!"; + if (!doc.save_file(xmlWritePath.c_str())) { + LOG(LogError) << "Error saving gamelist.xml to \"" << xmlWritePath << "\" (for system " << system->getName() << ")!"; + } } }else{ LOG(LogError) << "Found no root folder for system \"" << system->getName() << "\"!"; diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 3f5da45c67..390ed4efb9 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -49,7 +49,7 @@ const std::vector& getMDDByType(MetaDataListType type) MetaDataList::MetaDataList(MetaDataListType type) - : mType(type) + : mType(type), mWasChanged(false) { const std::vector& mdd = getMDD(); for(auto iter = mdd.begin(); iter != mdd.end(); iter++) @@ -110,11 +110,12 @@ void MetaDataList::appendToXML(pugi::xml_node parent, bool ignoreDefaults, const void MetaDataList::set(const std::string& key, const std::string& value) { mMap[key] = value; + mWasChanged = true; } void MetaDataList::setTime(const std::string& key, const boost::posix_time::ptime& time) { - mMap[key] = boost::posix_time::to_iso_string(time); + set(key, boost::posix_time::to_iso_string(time)); } const std::string& MetaDataList::get(const std::string& key) const @@ -145,3 +146,13 @@ bool MetaDataList::isDefault() return true; } + +bool MetaDataList::wasChanged() const +{ + return mWasChanged; +} + +void MetaDataList::resetChangedFlag() +{ + mWasChanged = false; +} diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 136a8b2f6a..df444e9d4c 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -58,10 +58,14 @@ class MetaDataList bool isDefault(); + bool wasChanged() const; + void resetChangedFlag(); + inline MetaDataListType getType() const { return mType; } inline const std::vector& getMDD() const { return getMDDByType(getType()); } private: MetaDataListType mType; std::map mMap; + bool mWasChanged; }; From 9ad911c18d8b7e9a769c0f7b09013c63d6202d2e Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 20 Dec 2016 14:46:55 +0000 Subject: [PATCH 043/603] fixes crash when saving meta data - #79 --- es-app/src/MetaData.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 3f5da45c67..09305a0c46 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -139,8 +139,10 @@ boost::posix_time::ptime MetaDataList::getTime(const std::string& key) const bool MetaDataList::isDefault() { + const std::vector& mdd = getMDD(); + for (int i = 1; i < mMap.size(); i++) { - if (mMap.at(gameDecls[i].key) != gameDecls[i].defaultValue) return false; + if (mMap.at(mdd[i].key) != mdd[i].defaultValue) return false; } return true; From 747a78bd456c763feab17a71f308aad80dc7e3ed Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 20 Dec 2016 14:49:43 +0000 Subject: [PATCH 044/603] bump version number to 2.1.1rp --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 99cdb39a70..12cfb2e678 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_MAINTENANCE 0 -#define PROGRAM_VERSION_STRING "2.1.0rp" +#define PROGRAM_VERSION_MAINTENANCE 1 +#define PROGRAM_VERSION_STRING "2.1.1rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,1,0\0" +#define RESOURCE_VERSION_STRING "2,1,1\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 56971d54a54f5670e8178c9e92491eaed328e6b8 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 20 Dec 2016 18:01:07 +0000 Subject: [PATCH 045/603] bump version to 2.1.2 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 12cfb2e678..da8d26ed7d 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_MAINTENANCE 1 -#define PROGRAM_VERSION_STRING "2.1.1rp" +#define PROGRAM_VERSION_MAINTENANCE 2 +#define PROGRAM_VERSION_STRING "2.1.2rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,1,1\0" +#define RESOURCE_VERSION_STRING "2,1,2\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From d6b726cc34a84d21ec4fafb6c25bb73c76adfaa9 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Fri, 30 Dec 2016 21:35:10 +0000 Subject: [PATCH 046/603] return es error code --- emulationstation.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/emulationstation.sh b/emulationstation.sh index 227078f06d..c6915bafdf 100755 --- a/emulationstation.sh +++ b/emulationstation.sh @@ -4,6 +4,7 @@ esdir="$(dirname $0)" while true; do rm -f /tmp/es-restart /tmp/es-sysrestart /tmp/es-shutdown "$esdir/emulationstation" "$@" + ret=$? [ -f /tmp/es-restart ] && continue if [ -f /tmp/es-sysrestart ]; then rm -f /tmp/es-sysrestart @@ -17,3 +18,4 @@ while true; do fi break done +exit $ret From e974cd9d43d1f86677e5cd7b261eefc92a9b4b83 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Thu, 12 Jan 2017 19:17:53 +0000 Subject: [PATCH 047/603] Added a --no-splash option for disableing the ES logo fix indentation --- es-app/src/main.cpp | 8 ++++++-- es-core/src/Settings.cpp | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 393f199fd3..6753b9ae31 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -55,6 +55,9 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height }else if(strcmp(argv[i], "--no-exit") == 0) { Settings::getInstance()->setBool("ShowExit", false); + }else if(strcmp(argv[i], "--no-splash") == 0) + { + Settings::getInstance()->setBool("SplashScreen", false); }else if(strcmp(argv[i], "--debug") == 0) { Settings::getInstance()->setBool("Debug", true); @@ -91,6 +94,7 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height "--ignore-gamelist ignore the gamelist (useful for troubleshooting)\n" "--draw-framerate display the framerate\n" "--no-exit don't show the exit option in the menu\n" + "--no-splash don't show the splash screen\n" "--debug more logging, show console on Windows\n" "--scrape scrape using command line interface\n" "--windowed not fullscreen, should be used with --resolution\n" @@ -225,8 +229,8 @@ int main(int argc, char* argv[]) std::string glExts = (const char*)glGetString(GL_EXTENSIONS); LOG(LogInfo) << "Checking available OpenGL extensions..."; LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (glExts.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); - - window.renderLoadingScreen(); + if(Settings::getInstance()->getBool("SplashScreen")) + window.renderLoadingScreen(); } const char* errorMsg = NULL; diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 67f12150df..337dcaac13 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -17,7 +17,8 @@ std::vector settings_dont_save = boost::assign::list_of ("Windowed") ("VSync") ("HideConsole") - ("IgnoreGamelist"); + ("IgnoreGamelist") + ("SplashScreen"); Settings::Settings() { @@ -43,6 +44,7 @@ void Settings::setDefaults() mBoolMap["DrawFramerate"] = false; mBoolMap["ShowExit"] = true; mBoolMap["Windowed"] = false; + mBoolMap["SplashScreen"] = true; #ifdef _RPI_ // don't enable VSync by default on the Pi, since it already From df9f5b8c3f34e682ba0e395b20cf3ab28b0fa043 Mon Sep 17 00:00:00 2001 From: Steven Selph Date: Wed, 18 Jan 2017 21:43:50 -0500 Subject: [PATCH 048/603] Remove TheArchive scraper --- es-app/CMakeLists.txt | 2 - es-app/src/guis/GuiMenu.cpp | 2 - es-app/src/scrapers/Scraper.cpp | 4 +- es-app/src/scrapers/TheArchiveScraper.cpp | 66 ----------------------- es-app/src/scrapers/TheArchiveScraper.h | 16 ------ 5 files changed, 1 insertion(+), 89 deletions(-) delete mode 100644 es-app/src/scrapers/TheArchiveScraper.cpp delete mode 100644 es-app/src/scrapers/TheArchiveScraper.h diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 47dfd131c5..04cbf509c0 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -30,7 +30,6 @@ set(ES_HEADERS # Scrapers ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.h # Views ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.h @@ -77,7 +76,6 @@ set(ES_SOURCES # Scrapers ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/TheArchiveScraper.cpp # Views ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.cpp diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index d005fc04ec..71ac7272bc 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -17,8 +17,6 @@ #include "components/OptionListComponent.h" #include "components/MenuComponent.h" #include "VolumeControl.h" -#include "scrapers/GamesDBScraper.h" -#include "scrapers/TheArchiveScraper.h" GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU"), mVersion(window) { diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index c827a4755f..ff4ba88db1 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -6,11 +6,9 @@ #include #include "GamesDBScraper.h" -#include "TheArchiveScraper.h" const std::map scraper_request_funcs = boost::assign::map_list_of - ("TheGamesDB", &thegamesdb_generate_scraper_requests) - ("TheArchive", &thearchive_generate_scraper_requests); + ("TheGamesDB", &thegamesdb_generate_scraper_requests); std::unique_ptr startScraperSearch(const ScraperSearchParams& params) { diff --git a/es-app/src/scrapers/TheArchiveScraper.cpp b/es-app/src/scrapers/TheArchiveScraper.cpp deleted file mode 100644 index fe490ca555..0000000000 --- a/es-app/src/scrapers/TheArchiveScraper.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include "TheArchiveScraper.h" -#include "Log.h" -#include "pugixml/pugixml.hpp" - -void thearchive_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, - std::vector& results) -{ - std::string path = "api.archive.vg/2.0/Archive.search/xml/7TTRM4MNTIKR2NNAGASURHJOZJ3QXQC5/"; - - std::string cleanName = params.nameOverride; - if(cleanName.empty()) - cleanName = params.game->getCleanName(); - - path += HttpReq::urlEncode(cleanName); - //platform TODO, should use some params.system get method - - requests.push(std::unique_ptr(new TheArchiveRequest(results, path))); -} - -void TheArchiveRequest::process(const std::unique_ptr& req, std::vector& results) -{ - assert(req->status() == HttpReq::REQ_SUCCESS); - - pugi::xml_document doc; - pugi::xml_parse_result parseResult = doc.load(req->getContent().c_str()); - if(!parseResult) - { - std::stringstream ss; - ss << "TheArchiveRequest - error parsing XML.\n\t" << parseResult.description(); - std::string err = ss.str(); - setError(err); - LOG(LogError) << err; - return; - } - - pugi::xml_node data = doc.child("OpenSearchDescription").child("games"); - - pugi::xml_node game = data.child("game"); - while(game && results.size() < MAX_SCRAPER_RESULTS) - { - ScraperSearchResult result; - - result.mdl.set("name", game.child("title").text().get()); - result.mdl.set("desc", game.child("description").text().get()); - - //Archive.search does not return ratings - - result.mdl.set("developer", game.child("developer").text().get()); - - std::string genre = game.child("genre").text().get(); - size_t search = genre.find_last_of(" > "); - genre = genre.substr(search == std::string::npos ? 0 : search, std::string::npos); - result.mdl.set("genre", genre); - - pugi::xml_node image = game.child("box_front"); - pugi::xml_node thumbnail = game.child("box_front_small"); - - if(image) - result.imageUrl = image.text().get(); - if(thumbnail) - result.thumbnailUrl = thumbnail.text().get(); - - results.push_back(result); - game = game.next_sibling("game"); - } -} diff --git a/es-app/src/scrapers/TheArchiveScraper.h b/es-app/src/scrapers/TheArchiveScraper.h deleted file mode 100644 index 9837539a4e..0000000000 --- a/es-app/src/scrapers/TheArchiveScraper.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "scrapers/Scraper.h" - -void thearchive_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, - std::vector& results); - -void thearchive_process_httpreq(const std::unique_ptr& req, std::vector& results); - -class TheArchiveRequest : public ScraperHttpRequest -{ -public: - TheArchiveRequest(std::vector& resultsWrite, const std::string& url) : ScraperHttpRequest(resultsWrite, url) {} -protected: - void process(const std::unique_ptr& req, std::vector& results) override; -}; \ No newline at end of file From 454473224240b3106d7f14fcff9f2d30e2e771b3 Mon Sep 17 00:00:00 2001 From: fieldofcows Date: Sun, 22 Jan 2017 23:28:06 +0000 Subject: [PATCH 049/603] Fix WSOD by loading textures on demand in a separate thread when a user configurable texture memory threshold is reached --- es-app/src/components/RatingComponent.cpp | 12 +- es-app/src/guis/GuiMenu.cpp | 6 + es-app/src/main.cpp | 5 + es-app/src/views/SystemView.cpp | 4 +- es-app/src/views/ViewController.cpp | 4 +- es-core/CMakeLists.txt | 6 +- es-core/src/Settings.cpp | 3 +- es-core/src/Window.cpp | 9 +- es-core/src/components/ImageComponent.cpp | 66 ++++- es-core/src/components/ImageComponent.h | 7 +- es-core/src/resources/SVGResource.cpp | 101 -------- es-core/src/resources/SVGResource.h | 27 -- es-core/src/resources/TextureData.cpp | 259 +++++++++++++++++++ es-core/src/resources/TextureData.h | 63 +++++ es-core/src/resources/TextureDataManager.cpp | 226 ++++++++++++++++ es-core/src/resources/TextureDataManager.h | 86 ++++++ es-core/src/resources/TextureResource.cpp | 245 +++++++++++------- es-core/src/resources/TextureResource.h | 49 ++-- 18 files changed, 897 insertions(+), 281 deletions(-) delete mode 100644 es-core/src/resources/SVGResource.cpp delete mode 100644 es-core/src/resources/SVGResource.h create mode 100644 es-core/src/resources/TextureData.cpp create mode 100644 es-core/src/resources/TextureData.h create mode 100644 es-core/src/resources/TextureDataManager.cpp create mode 100644 es-core/src/resources/TextureDataManager.h diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index 12f39a3090..3dbc36a0a4 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -2,7 +2,6 @@ #include "Renderer.h" #include "Window.h" #include "Util.h" -#include "resources/SVGResource.h" RatingComponent::RatingComponent(Window* window) : GuiComponent(window) { @@ -45,16 +44,13 @@ void RatingComponent::onSizeChanged() else if(mSize.x() == 0) mSize[0] = mSize.y() * NUM_RATING_STARS; - auto filledSVG = dynamic_cast(mFilledTexture.get()); - auto unfilledSVG = dynamic_cast(mUnfilledTexture.get()); - if(mSize.y() > 0) { size_t heightPx = (size_t)round(mSize.y()); - if(filledSVG) - filledSVG->rasterizeAt(heightPx, heightPx); - if(unfilledSVG) - unfilledSVG->rasterizeAt(heightPx, heightPx); + if (mFilledTexture) + mFilledTexture->rasterizeAt(heightPx, heightPx); + if(mUnfilledTexture) + mUnfilledTexture->rasterizeAt(heightPx, heightPx); } updateVertices(); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 71ac7272bc..68b1a355d1 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -178,6 +178,12 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("PARSE GAMESLISTS ONLY", parse_gamelists); s->addSaveFunc([parse_gamelists] { Settings::getInstance()->setBool("ParseGamelistOnly", parse_gamelists->getState()); }); + // maximum vram + auto max_vram = std::make_shared(mWindow, 0.f, 1000.f, 10.f, "Mb"); + max_vram->setValue((float)(Settings::getInstance()->getInt("MaxVRAM"))); + s->addWithLabel("VRAM LIMIT", max_vram); + s->addSaveFunc([max_vram] { Settings::getInstance()->setInt("MaxVRAM", (int)round(max_vram->getValue())); }); + mWindow->pushGui(s); }); diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 6753b9ae31..c3d030ec4b 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -74,6 +74,10 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height }else if(strcmp(argv[i], "--scrape") == 0) { scrape_cmdline = true; + }else if(strcmp(argv[i], "--max-vram") == 0) + { + int maxVRAM = atoi(argv[i + 1]); + Settings::getInstance()->setInt("MaxVRAM", maxVRAM); }else if(strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { #ifdef WIN32 @@ -99,6 +103,7 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height "--scrape scrape using command line interface\n" "--windowed not fullscreen, should be used with --resolution\n" "--vsync [1/on or 0/off] turn vsync on or off (default is on)\n" + "--max-vram [size] Max VRAM to use in Mb before swapping. 0 for unlimited\n" "--help, -h summon a sentient, angry tuba\n\n" "More information available in README.md.\n"; return false; //exit after printing help diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 013490aca9..c760125b97 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -43,13 +43,13 @@ void SystemView::populate() // make logo if(theme->getElement("system", "logo", "image")) { - ImageComponent* logo = new ImageComponent(mWindow); + ImageComponent* logo = new ImageComponent(mWindow, false, false); logo->setMaxSize(Eigen::Vector2f(logoSize().x(), logoSize().y())); logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, (logoSize().y() - logo->getSize().y()) / 2); // center e.data.logo = std::shared_ptr(logo); - ImageComponent* logoSelected = new ImageComponent(mWindow); + ImageComponent* logoSelected = new ImageComponent(mWindow, false, false); logoSelected->setMaxSize(Eigen::Vector2f(logoSize().x() * SELECTED_SCALE, logoSize().y() * SELECTED_SCALE * 0.70f)); logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logoSelected->setPosition((logoSize().x() - logoSelected->getSize().x()) / 2, diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 1e10c91753..d9093e8e10 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -406,7 +406,9 @@ void ViewController::reloadAll() mCurrentView = getGameListView(mState.getSystem()); }else if(mState.viewing == SYSTEM_SELECT) { - mSystemListView->goToSystem(mState.getSystem(), false); + SystemData* system = mState.getSystem(); + goToSystemView(SystemData::sSystemVector.front()); + mSystemListView->goToSystem(system, false); mCurrentView = mSystemListView; }else{ goToSystemView(SystemData::sSystemVector.front()); diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index cf0cfb3ea3..f05aec77c3 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -53,8 +53,9 @@ set(CORE_HEADERS # Resources ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.h # Embedded assets (needed by ResourceManager) ${emulationstation-all_SOURCE_DIR}/data/Resources.h @@ -108,8 +109,9 @@ set(CORE_SOURCES # Resources ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.cpp ) set(EMBEDDED_ASSET_SOURCES diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 337dcaac13..df90ba7b65 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -69,6 +69,7 @@ void Settings::setDefaults() mIntMap["ScreenSaverTime"] = 5*60*1000; // 5 minutes mIntMap["ScraperResizeWidth"] = 400; mIntMap["ScraperResizeHeight"] = 0; + mIntMap["MaxVRAM"] = 100; mStringMap["TransitionStyle"] = "fade"; mStringMap["ThemeSet"] = ""; @@ -154,4 +155,4 @@ void Settings::setMethodName(const std::string& name, type value) \ SETTINGS_GETSET(bool, mBoolMap, getBool, setBool); SETTINGS_GETSET(int, mIntMap, getInt, setInt); SETTINGS_GETSET(float, mFloatMap, getFloat, setFloat); -SETTINGS_GETSET(const std::string&, mStringMap, getString, setString); \ No newline at end of file +SETTINGS_GETSET(const std::string&, mStringMap, getString, setString); diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 761df4abc4..e402162c3d 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -160,11 +160,12 @@ void Window::update(int deltaTime) ss << std::fixed << std::setprecision(2) << ((float)mFrameTimeElapsed / (float)mFrameCountElapsed) << "ms"; // vram - float textureVramUsageMb = TextureResource::getTotalMemUsage() / 1000.0f / 1000.0f;; + float textureVramUsageMb = TextureResource::getTotalMemUsage() / 1000.0f / 1000.0f; + float textureTotalUsageMb = TextureResource::getTotalTextureSize() / 1000.0f / 1000.0f; float fontVramUsageMb = Font::getTotalMemUsage() / 1000.0f / 1000.0f;; - float totalVramUsageMb = textureVramUsageMb + fontVramUsageMb; - ss << "\nVRAM: " << totalVramUsageMb << "mb (texs: " << textureVramUsageMb << "mb, fonts: " << fontVramUsageMb << "mb)"; + ss << "\nFont VRAM: " << fontVramUsageMb << " Tex VRAM: " << textureVramUsageMb << + " Tex Max: " << textureTotalUsageMb; mFrameDataText = std::unique_ptr(mDefaultFonts.at(1)->buildTextCache(ss.str(), 50.f, 50.f, 0xFF00FFFF)); } @@ -242,7 +243,7 @@ void Window::renderLoadingScreen() Renderer::setMatrix(trans); Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0xFFFFFFFF); - ImageComponent splash(this); + ImageComponent splash(this, true); splash.setResize(Renderer::getScreenWidth() * 0.6f, 0.0f); splash.setImage(":/splash.svg"); splash.setPosition((Renderer::getScreenWidth() - splash.getSize().x()) / 2, (Renderer::getScreenHeight() - splash.getSize().y()) / 2 * 0.6f); diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 2898c6f732..1ae62314d8 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -6,7 +6,6 @@ #include "Renderer.h" #include "ThemeData.h" #include "Util.h" -#include "resources/SVGResource.h" Eigen::Vector2i ImageComponent::getTextureSize() const { @@ -22,8 +21,9 @@ Eigen::Vector2f ImageComponent::getCenter() const mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); } -ImageComponent::ImageComponent(Window* window) : GuiComponent(window), - mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF) +ImageComponent::ImageComponent(Window* window, bool forceLoad, bool dynamic) : GuiComponent(window), + mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF), + mForceLoad(forceLoad), mDynamic(dynamic) { updateColors(); } @@ -37,9 +37,7 @@ void ImageComponent::resize() if(!mTexture) return; - SVGResource* svg = dynamic_cast(mTexture.get()); - - const Eigen::Vector2f textureSize = svg ? svg->getSourceImageSize() : Eigen::Vector2f((float)mTexture->getSize().x(), (float)mTexture->getSize().y()); + const Eigen::Vector2f textureSize = mTexture->getSourceImageSize(); if(textureSize.isZero()) return; @@ -90,12 +88,8 @@ void ImageComponent::resize() } } } - - if(svg) - { - // mSize.y() should already be rounded - svg->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); - } + // mSize.y() should already be rounded + mTexture->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); onSizeChanged(); } @@ -110,7 +104,7 @@ void ImageComponent::setImage(std::string path, bool tile) if(path.empty() || !ResourceManager::getInstance()->fileExists(path)) mTexture.reset(); else - mTexture = TextureResource::get(path, tile); + mTexture = TextureResource::get(path, tile, mForceLoad, mDynamic); resize(); } @@ -247,7 +241,10 @@ void ImageComponent::render(const Eigen::Affine3f& parentTrans) if(mTexture->isInitialized()) { // actually draw the image - mTexture->bind(); + // The bind() function returns false if the texture is not currently loaded. A blank + // texture is bound in this case but we want to handle a fade so it doesn't just 'jump' in + // when it finally loads + fadeIn(mTexture->bind()); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); @@ -278,6 +275,47 @@ void ImageComponent::render(const Eigen::Affine3f& parentTrans) GuiComponent::renderChildren(trans); } +void ImageComponent::fadeIn(bool textureLoaded) +{ + if (!mForceLoad) + { + if (!textureLoaded) + { + // Start the fade if this is the first time we've encountered the unloaded texture + if (!mFading) + { + // Start with a zero opacity and flag it as fading + mFadeOpacity = 0; + mFading = true; + // Set the colours to be translucent + mColorShift = (mColorShift >> 8 << 8) | 0; + updateColors(); + } + } + else if (mFading) + { + // The texture is loaded and we need to fade it in. The fade is based on the frame rate + // and is 1/4 second if running at 60 frames per second although the actual value is not + // that important + int opacity = mFadeOpacity + 255 / 15; + // See if we've finished fading + if (opacity >= 255) + { + mFadeOpacity = 255; + mFading = false; + } + else + { + mFadeOpacity = (unsigned char)opacity; + } + // Apply the combination of the target opacity and current fade + float newOpacity = (float)mOpacity * ((float)mFadeOpacity / 255.0f); + mColorShift = (mColorShift >> 8 << 8) | (unsigned char)newOpacity; + updateColors(); + } + } +} + bool ImageComponent::hasImage() { return (bool)mTexture; diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 939c6c7cd2..3ff1ffbb27 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -12,7 +12,7 @@ class ImageComponent : public GuiComponent { public: - ImageComponent(Window* window); + ImageComponent(Window* window, bool forceLoad = false, bool dynamic = true); virtual ~ImageComponent(); //Loads the image at the given filepath. Will tile if tile is true (retrieves texture as tiling, creates vertices accordingly). @@ -81,10 +81,15 @@ class ImageComponent : public GuiComponent void updateVertices(); void updateColors(); + void fadeIn(bool textureLoaded); unsigned int mColorShift; std::shared_ptr mTexture; + unsigned char mFadeOpacity; + bool mFading; + bool mForceLoad; + bool mDynamic; }; #endif diff --git a/es-core/src/resources/SVGResource.cpp b/es-core/src/resources/SVGResource.cpp deleted file mode 100644 index 1a4ea16fca..0000000000 --- a/es-core/src/resources/SVGResource.cpp +++ /dev/null @@ -1,101 +0,0 @@ -#include "SVGResource.h" -#include "nanosvg/nanosvg.h" -#include "nanosvg/nanosvgrast.h" -#include "Log.h" -#include "Util.h" -#include "ImageIO.h" - -#define DPI 96 - -SVGResource::SVGResource(const std::string& path, bool tile) : TextureResource(path, tile), mSVGImage(NULL) -{ - mLastWidth = 0; - mLastHeight = 0; -} - -SVGResource::~SVGResource() -{ - deinitSVG(); -} - -void SVGResource::unload(std::shared_ptr& rm) -{ - deinitSVG(); - TextureResource::unload(rm); -} - -void SVGResource::initFromMemory(const char* file, size_t length) -{ - deinit(); - deinitSVG(); - - // nsvgParse excepts a modifiable, null-terminated string - char* copy = (char*)malloc(length + 1); - assert(copy != NULL); - memcpy(copy, file, length); - copy[length] = '\0'; - - mSVGImage = nsvgParse(copy, "px", DPI); - free(copy); - - if(!mSVGImage) - { - LOG(LogError) << "Error parsing SVG image."; - return; - } - - if(mLastWidth && mLastHeight) - rasterizeAt(mLastWidth, mLastHeight); - else - rasterizeAt((size_t)round(mSVGImage->width), (size_t)round(mSVGImage->height)); -} - -void SVGResource::rasterizeAt(size_t width, size_t height) -{ - if(!mSVGImage || (width == 0 && height == 0)) - return; - - if(width == 0) - { - // auto scale width to keep aspect - width = (size_t)round((height / mSVGImage->height) * mSVGImage->width); - }else if(height == 0) - { - // auto scale height to keep aspect - height = (size_t)round((width / mSVGImage->width) * mSVGImage->height); - } - - if(width != (size_t)round(mSVGImage->width) && height != (size_t)round(mSVGImage->height)) - { - mLastWidth = width; - mLastHeight = height; - } - - unsigned char* imagePx = (unsigned char*)malloc(width * height * 4); - assert(imagePx != NULL); - - NSVGrasterizer* rast = nsvgCreateRasterizer(); - nsvgRasterize(rast, mSVGImage, 0, 0, height / mSVGImage->height, imagePx, width, height, width * 4); - nsvgDeleteRasterizer(rast); - - ImageIO::flipPixelsVert(imagePx, width, height); - - initFromPixels(imagePx, width, height); - free(imagePx); -} - -Eigen::Vector2f SVGResource::getSourceImageSize() const -{ - if(mSVGImage) - return Eigen::Vector2f(mSVGImage->width, mSVGImage->height); - - return Eigen::Vector2f::Zero(); -} - -void SVGResource::deinitSVG() -{ - if(mSVGImage) - nsvgDelete(mSVGImage); - - mSVGImage = NULL; -} diff --git a/es-core/src/resources/SVGResource.h b/es-core/src/resources/SVGResource.h deleted file mode 100644 index 87479c0cf1..0000000000 --- a/es-core/src/resources/SVGResource.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include "resources/TextureResource.h" - -struct NSVGimage; - -class SVGResource : public TextureResource -{ -public: - virtual ~SVGResource(); - - virtual void unload(std::shared_ptr& rm) override; - - virtual void initFromMemory(const char* image, size_t length) override; - - void rasterizeAt(size_t width, size_t height); - Eigen::Vector2f getSourceImageSize() const; - -protected: - friend TextureResource; - SVGResource(const std::string& path, bool tile); - void deinitSVG(); - - NSVGimage* mSVGImage; - size_t mLastWidth; - size_t mLastHeight; -}; diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp new file mode 100644 index 0000000000..15a3da116e --- /dev/null +++ b/es-core/src/resources/TextureData.cpp @@ -0,0 +1,259 @@ +#include "resources/TextureData.h" +#include "resources/ResourceManager.h" +#include "Log.h" +#include "ImageIO.h" +#include "string.h" +#include "Util.h" +#include "nanosvg/nanosvg.h" +#include "nanosvg/nanosvgrast.h" +#include + +#define DPI 96 + +TextureData::TextureData(bool tile) : mTile(tile), mTextureID(0), mDataRGBA(nullptr), mScalable(false), + mWidth(0), mHeight(0), mSourceWidth(0.0f), mSourceHeight(0.0f) +{ +} + +TextureData::~TextureData() +{ + releaseVRAM(); + releaseRAM(); +} + +void TextureData::initFromPath(const std::string& path) +{ + // Just set the path. It will be loaded later + mPath = path; + // Only textures with paths are reloadable + mReloadable = true; +} + +bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length) +{ + // If already initialised then don't read again + { + std::unique_lock lock(mMutex); + if (mDataRGBA) + return true; + } + + // nsvgParse excepts a modifiable, null-terminated string + char* copy = (char*)malloc(length + 1); + assert(copy != NULL); + memcpy(copy, fileData, length); + copy[length] = '\0'; + + NSVGimage* svgImage = nsvgParse(copy, "px", DPI); + free(copy); + if (!svgImage) + { + LOG(LogError) << "Error parsing SVG image."; + return false; + } + + // We want to rasterise this texture at a specific resolution. If the source size + // variables are set then use them otherwise set them from the parsed file + if ((mSourceWidth == 0.0f) && (mSourceHeight == 0.0f)) + { + mSourceWidth = svgImage->width; + mSourceHeight = svgImage->height; + } + mWidth = (size_t)round(mSourceWidth); + mHeight = (size_t)round(mSourceHeight); + + if (mWidth == 0) + { + // auto scale width to keep aspect + mWidth = (size_t)round(((float)mHeight / svgImage->height) * svgImage->width); + } + else if (mHeight == 0) + { + // auto scale height to keep aspect + mHeight = (size_t)round(((float)mWidth / svgImage->width) * svgImage->height); + } + + unsigned char* dataRGBA = new unsigned char[mWidth * mHeight * 4]; + + NSVGrasterizer* rast = nsvgCreateRasterizer(); + nsvgRasterize(rast, svgImage, 0, 0, mHeight / svgImage->height, dataRGBA, mWidth, mHeight, mWidth * 4); + nsvgDeleteRasterizer(rast); + + ImageIO::flipPixelsVert(dataRGBA, mWidth, mHeight); + + std::unique_lock lock(mMutex); + mDataRGBA = dataRGBA; + + return true; +} + +bool TextureData::initImageFromMemory(const unsigned char* fileData, size_t length) +{ + size_t width, height; + + // If already initialised then don't read again + { + std::unique_lock lock(mMutex); + if (mDataRGBA) + return true; + } + + std::vector imageRGBA = ImageIO::loadFromMemoryRGBA32((const unsigned char*)(fileData), length, width, height); + if (imageRGBA.size() == 0) + { + LOG(LogError) << "Could not initialize texture from memory, invalid data! (file path: " << mPath << ", data ptr: " << (size_t)fileData << ", reported size: " << length << ")"; + return false; + } + + mSourceWidth = width; + mSourceHeight = height; + mScalable = false; + + return initFromRGBA(imageRGBA.data(), width, height); +} + +bool TextureData::initFromRGBA(const unsigned char* dataRGBA, size_t width, size_t height) +{ + // If already initialised then don't read again + std::unique_lock lock(mMutex); + if (mDataRGBA) + return true; + + // Take a copy + mDataRGBA = new unsigned char[width * height * 4]; + memcpy(mDataRGBA, dataRGBA, width * height * 4); + mWidth = width; + mHeight = height; + return true; +} + +bool TextureData::load() +{ + bool retval = false; + + // Need to load. See if there is a file + if (!mPath.empty()) + { + std::shared_ptr& rm = ResourceManager::getInstance(); + const ResourceData& data = rm->getFileData(mPath); + // is it an SVG? + if (mPath.substr(mPath.size() - 4, std::string::npos) == ".svg") + { + mScalable = true; + retval = initSVGFromMemory((const unsigned char*)data.ptr.get(), data.length); + } + else + retval = initImageFromMemory((const unsigned char*)data.ptr.get(), data.length); + } + return retval; +} + +bool TextureData::isLoaded() +{ + std::unique_lock lock(mMutex); + if (mDataRGBA || (mTextureID != 0)) + return true; + return false; +} + +bool TextureData::uploadAndBind() +{ + // See if it's already been uploaded + std::unique_lock lock(mMutex); + if (mTextureID != 0) + { + glBindTexture(GL_TEXTURE_2D, mTextureID); + } + else + { + // Load it if necessary + if (!mDataRGBA) + { + return false; + } + // Make sure we're ready to upload + if ((mWidth == 0) || (mHeight == 0) || (mDataRGBA == nullptr)) + return false; + glGetError(); + //now for the openGL texture stuff + glGenTextures(1, &mTextureID); + glBindTexture(GL_TEXTURE_2D, mTextureID); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mWidth, mHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, mDataRGBA); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + const GLint wrapMode = mTile ? GL_REPEAT : GL_CLAMP_TO_EDGE; + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); + } + return true; +} + +void TextureData::releaseVRAM() +{ + std::unique_lock lock(mMutex); + if (mTextureID != 0) + { + glDeleteTextures(1, &mTextureID); + mTextureID = 0; + } +} + +void TextureData::releaseRAM() +{ + std::unique_lock lock(mMutex); + delete[] mDataRGBA; + mDataRGBA = 0; +} + +size_t TextureData::width() +{ + if (mWidth == 0) + load(); + return mWidth; +} + +size_t TextureData::height() +{ + if (mHeight == 0) + load(); + return mHeight; +} + +float TextureData::sourceWidth() +{ + if (mSourceWidth == 0) + load(); + return mSourceWidth; +} + +float TextureData::sourceHeight() +{ + if (mSourceHeight == 0) + load(); + return mSourceHeight; +} + +void TextureData::setSourceSize(float width, float height) +{ + if (mScalable) + { + if ((mSourceWidth != width) || (mSourceHeight != height)) + { + mSourceWidth = width; + mSourceHeight = height; + releaseVRAM(); + releaseRAM(); + } + } +} + +size_t TextureData::getVRAMUsage() +{ + if ((mTextureID != 0) || (mDataRGBA != nullptr)) + return mWidth * mHeight * 4; + else + return 0; +} diff --git a/es-core/src/resources/TextureData.h b/es-core/src/resources/TextureData.h new file mode 100644 index 0000000000..76ca6a0b4d --- /dev/null +++ b/es-core/src/resources/TextureData.h @@ -0,0 +1,63 @@ +#pragma once + +#include +#include +#include "platform.h" +#include +#include GLHEADER + +class TextureResource; + +class TextureData +{ +public: + TextureData(bool tile); + ~TextureData(); + + // These functions populate mDataRGBA but do not upload the texture to VRAM + + //!!!! Needs to be canonical path. Caller should check for duplicates before calling this + void initFromPath(const std::string& path); + bool initSVGFromMemory(const unsigned char* fileData, size_t length); + bool initImageFromMemory(const unsigned char* fileData, size_t length); + bool initFromRGBA(const unsigned char* dataRGBA, size_t width, size_t height); + + // Read the data into memory if necessary + bool load(); + + bool isLoaded(); + + // Upload the texture to VRAM if necessary and bind. Returns true if bound ok or + // false if either not loaded + bool uploadAndBind(); + + // Release the texture from VRAM + void releaseVRAM(); + + // Release the texture from conventional RAM + void releaseRAM(); + + // Get the amount of VRAM currenty used by this texture + size_t getVRAMUsage(); + + size_t width(); + size_t height(); + float sourceWidth(); + float sourceHeight(); + void setSourceSize(float width, float height); + + bool tiled() { return mTile; } + +private: + std::mutex mMutex; + bool mTile; + std::string mPath; + GLuint mTextureID; + unsigned char* mDataRGBA; + size_t mWidth; + size_t mHeight; + float mSourceWidth; + float mSourceHeight; + bool mScalable; + bool mReloadable; +}; diff --git a/es-core/src/resources/TextureDataManager.cpp b/es-core/src/resources/TextureDataManager.cpp new file mode 100644 index 0000000000..55720d14ac --- /dev/null +++ b/es-core/src/resources/TextureDataManager.cpp @@ -0,0 +1,226 @@ +#include "resources/TextureDataManager.h" +#include "resources/TextureResource.h" +#include "Settings.h" + +TextureDataManager::TextureDataManager() +{ + unsigned char data[5 * 5 * 4]; + mBlank = std::shared_ptr(new TextureData(false)); + for (int i = 0; i < (5 * 5); ++i) + { + data[i*4] = (i % 2) * 255; + data[i*4+1] = (i % 2) * 255; + data[i*4+2] = (i % 2) * 255; + data[i*4+3] = 0; + } + mBlank->initFromRGBA(data, 5, 5); + mLoader = new TextureLoader; +} + +TextureDataManager::~TextureDataManager() +{ + delete mLoader; +} + +std::shared_ptr TextureDataManager::add(const TextureResource* key, bool tiled) +{ + remove(key); + std::shared_ptr data(new TextureData(tiled)); + mTextures.push_front(data); + mTextureLookup[key] = mTextures.begin(); + return data; +} + +void TextureDataManager::remove(const TextureResource* key) +{ + // Find the entry in the list + auto it = mTextureLookup.find(key); + if (it != mTextureLookup.end()) + { + // Remove the list entry + mTextures.erase((*it).second); + // And the lookup + mTextureLookup.erase(it); + } +} + +std::shared_ptr TextureDataManager::get(const TextureResource* key) +{ + // If it's in the cache then we want to remove it from it's current location and + // move it to the top + std::shared_ptr tex; + auto it = mTextureLookup.find(key); + if (it != mTextureLookup.end()) + { + tex = *(*it).second; + // Remove the list entry + mTextures.erase((*it).second); + // Put it at the top + mTextures.push_front(tex); + // Store it back in the lookup + mTextureLookup[key] = mTextures.begin(); + + // Make sure it's loaded or queued for loading + load(tex); + } + return tex; +} + +bool TextureDataManager::bind(const TextureResource* key) +{ + std::shared_ptr tex = get(key); + bool bound = false; + if (tex != nullptr) + bound = tex->uploadAndBind(); + if (!bound) + mBlank->uploadAndBind(); + return bound; +} + +size_t TextureDataManager::getTotalSize() +{ + size_t total = 0; + for (auto tex : mTextures) + total += tex->width() * tex->height() * 4; + return total; +} + +size_t TextureDataManager::getCommittedSize() +{ + size_t total = 0; + for (auto tex : mTextures) + total += tex->getVRAMUsage(); + return total; +} + +size_t TextureDataManager::getQueueSize() +{ + return mLoader->getQueueSize(); +} + +void TextureDataManager::load(std::shared_ptr tex, bool block) +{ + // See if it's already loaded + if (tex->isLoaded()) + return; + // Not loaded. Make sure there is room + size_t size = TextureResource::getTotalMemUsage(); + size_t max_texture = (size_t)Settings::getInstance()->getInt("MaxVRAM") * 1024 * 1024; + + size_t in = size; + + for (auto it = mTextures.rbegin(); it != mTextures.rend(); ++it) + { + if (size < max_texture) + break; + //size -= (*it)->getVRAMUsage(); + (*it)->releaseVRAM(); + (*it)->releaseRAM(); + // It may be already in the loader queue. In this case it wouldn't have been using + // any VRAM yet but it will be. Remove it from the loader queue + mLoader->remove(*it); + size = TextureResource::getTotalMemUsage(); + } + if (!block) + mLoader->load(tex); + else + tex->load(); +} + +TextureLoader::TextureLoader() : mExit(false) +{ + mThread = new std::thread(&TextureLoader::threadProc, this); +} + +TextureLoader::~TextureLoader() +{ + // Just abort any waiting texture + mTextureDataQ.clear(); + mTextureDataLookup.clear(); + + // Exit the thread + mExit = true; + mEvent.notify_one(); + mThread->join(); + delete mThread; +} + +void TextureLoader::threadProc() +{ + while (!mExit) + { + std::shared_ptr textureData; + { + // Wait for an event to say there is something in the queue + std::unique_lock lock(mMutex); + mEvent.wait(lock); + if (!mTextureDataQ.empty()) + { + textureData = mTextureDataQ.front(); + mTextureDataQ.pop_front(); + mTextureDataLookup.erase(mTextureDataLookup.find(textureData.get())); + } + } + // Queue has been released here but we might have a texture to process + while (textureData) + { + textureData->load(); + + // See if there is another item in the queue + textureData = nullptr; + std::unique_lock lock(mMutex); + if (!mTextureDataQ.empty()) + { + textureData = mTextureDataQ.front(); + mTextureDataQ.pop_front(); + mTextureDataLookup.erase(mTextureDataLookup.find(textureData.get())); + } + } + } +} + +void TextureLoader::load(std::shared_ptr textureData) +{ + // Make sure it's not already loaded + if (!textureData->isLoaded()) + { + std::unique_lock lock(mMutex); + // Remove it from the queue if it is already there + auto td = mTextureDataLookup.find(textureData.get()); + if (td != mTextureDataLookup.end()) + { + mTextureDataQ.erase((*td).second); + mTextureDataLookup.erase(td); + } + + // Put it on the start of the queue as we want the newly requested textures to load first + mTextureDataQ.push_front(textureData); + mTextureDataLookup[textureData.get()] = mTextureDataQ.begin(); + mEvent.notify_one(); + } +} + +void TextureLoader::remove(std::shared_ptr textureData) +{ + // Just remove it from the queue so we don't attempt to load it + std::unique_lock lock(mMutex); + auto td = mTextureDataLookup.find(textureData.get()); + if (td != mTextureDataLookup.end()) + { + mTextureDataQ.erase((*td).second); + mTextureDataLookup.erase(td); + } +} + +size_t TextureLoader::getQueueSize() +{ + // Gets the amount of video memory that will be used once all textures in + // the queue are loaded + size_t mem = 0; + std::unique_lock lock(mMutex); + for (auto tex : mTextureDataQ) + { + mem += tex->width() * tex->height() * 4; + } + return mem; +} diff --git a/es-core/src/resources/TextureDataManager.h b/es-core/src/resources/TextureDataManager.h new file mode 100644 index 0000000000..414804aba9 --- /dev/null +++ b/es-core/src/resources/TextureDataManager.h @@ -0,0 +1,86 @@ +#pragma once + +#include "resources/ResourceManager.h" +#include "platform.h" +#include "resources/TextureData.h" +#include +#include +#include +#include +#include +#include + +class TextureResource; + +class TextureLoader +{ +public: + TextureLoader(); + ~TextureLoader(); + + void load(std::shared_ptr textureData); + void remove(std::shared_ptr textureData); + + size_t getQueueSize(); + +private: + void processQueue(); + void threadProc(); + + std::list > mTextureDataQ; + std::map >::iterator > mTextureDataLookup; + + std::thread* mThread; + std::mutex mMutex; + std::condition_variable mEvent; + bool mExit; +}; + +// +// This class manages the loading and unloading of textures +// +// When textures are added, the texture data is just stored as-is. The texture +// data should only have been constructed and not loaded for this to work correctly. +// When the get() function is called it indicates that a texture wants to be used so +// at this point the texture data is loaded (via a call to load()). +// +// Once the load is complete (which may not be on the first call to get() if the +// data is loaded in a background thread) then the get() function call uploadAndBind() +// to upload to VRAM if necessary and bind the texture. This is followed by a call +// to releaseRAM() which frees the memory buffer if the texture can be reloaded from +// disk if needed again +// +class TextureDataManager +{ +public: + TextureDataManager(); + ~TextureDataManager(); + + std::shared_ptr add(const TextureResource* key, bool tiled); + + // The texturedata being removed may be loading in a different thread. However it will + // be referenced by a smart point so we only need to remove it from our array and it + // will be deleted when the other thread has finished with it + void remove(const TextureResource* key); + + std::shared_ptr get(const TextureResource* key); + bool bind(const TextureResource* key); + + // Get the total size of all textures managed by this object, loaded and unloaded in bytes + size_t getTotalSize(); + // Get the total size of all committed textures (in VRAM) in bytes + size_t getCommittedSize(); + // Get the total size of all load-pending textures in the queue - these will + // be committed to VRAM as the queue is processed + size_t getQueueSize(); + // Load a texture, freeing resources as necessary to make space + void load(std::shared_ptr tex, bool block = false); + +private: + + std::list > mTextures; + std::map >::iterator > mTextureLookup; + std::shared_ptr mBlank; + TextureLoader* mLoader; +}; + diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index e6657dcc20..6400d74b9b 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -5,108 +5,113 @@ #include "ImageIO.h" #include "Renderer.h" #include "Util.h" -#include "resources/SVGResource.h" +#include "Settings.h" +TextureDataManager TextureResource::sTextureDataManager; std::map< TextureResource::TextureKeyType, std::weak_ptr > TextureResource::sTextureMap; -std::list< std::weak_ptr > TextureResource::sTextureList; +std::set TextureResource::sAllTextures; -TextureResource::TextureResource(const std::string& path, bool tile) : - mTextureID(0), mPath(path), mTextureSize(Eigen::Vector2i::Zero()), mTile(tile) +TextureResource::TextureResource(const std::string& path, bool tile, bool dynamic) : mTextureData(nullptr), mForceLoad(false) { -} - -TextureResource::~TextureResource() -{ - deinit(); -} - -void TextureResource::unload(std::shared_ptr& rm) -{ - deinit(); -} + // Create a texture data object for this texture + if (!path.empty()) + { + // If there is a path then the 'dynamic' flag tells us whether to use the texture + // data manager to manage loading/unloading of this texture + std::shared_ptr data; + if (dynamic) + { + data = sTextureDataManager.add(this, tile); + data->initFromPath(path); + // Force the texture manager to load it using a blocking load + sTextureDataManager.load(data, true); + } + else + { + mTextureData = std::shared_ptr(new TextureData(tile)); + data = mTextureData; + data->initFromPath(path); + // Load it so we can read the width/height + data->load(); + } -void TextureResource::reload(std::shared_ptr& rm) -{ - if(!mPath.empty()) + mSize << data->width(), data->height(); + mSourceSize << data->sourceWidth(), data->sourceHeight(); + } + else { - const ResourceData& data = rm->getFileData(mPath); - initFromMemory((const char*)data.ptr.get(), data.length); + // Create a texture managed by this class because it cannot be dynamically loaded and unloaded + mTextureData = std::shared_ptr(new TextureData(tile)); } + sAllTextures.insert(this); } -void TextureResource::initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height) +TextureResource::~TextureResource() { - deinit(); - - assert(width > 0 && height > 0); - - //now for the openGL texture stuff - glGenTextures(1, &mTextureID); - glBindTexture(GL_TEXTURE_2D, mTextureID); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, dataRGBA); + if (mTextureData == nullptr) + sTextureDataManager.remove(this); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - const GLint wrapMode = mTile ? GL_REPEAT : GL_CLAMP_TO_EDGE; - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); - - mTextureSize << width, height; + sAllTextures.erase(sAllTextures.find(this)); } -void TextureResource::initFromMemory(const char* data, size_t length) +void TextureResource::initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height) { - size_t width, height; - std::vector imageRGBA = ImageIO::loadFromMemoryRGBA32((const unsigned char*)(data), length, width, height); - - if(imageRGBA.size() == 0) - { - LOG(LogError) << "Could not initialize texture from memory, invalid data! (file path: " << mPath << ", data ptr: " << (size_t)data << ", reported size: " << length << ")"; - return; - } - - initFromPixels(imageRGBA.data(), width, height); + // This is only valid if we have a local texture data object + assert(mTextureData != nullptr); + mTextureData->releaseVRAM(); + mTextureData->releaseRAM(); + mTextureData->initFromRGBA(dataRGBA, width, height); + // Cache the image dimensions + mSize << width, height; + mSourceSize << mTextureData->sourceWidth(), mTextureData->sourceHeight(); } -void TextureResource::deinit() +void TextureResource::initFromMemory(const char* data, size_t length) { - if(mTextureID != 0) - { - glDeleteTextures(1, &mTextureID); - mTextureID = 0; - } + // This is only valid if we have a local texture data object + assert(mTextureData != nullptr); + mTextureData->releaseVRAM(); + mTextureData->releaseRAM(); + mTextureData->initImageFromMemory((const unsigned char*)data, length); + // Get the size from the texture data + mSize << mTextureData->width(), mTextureData->height(); + mSourceSize << mTextureData->sourceWidth(), mTextureData->sourceHeight(); } -const Eigen::Vector2i& TextureResource::getSize() const +const Eigen::Vector2i TextureResource::getSize() const { - return mTextureSize; + return mSize; } bool TextureResource::isTiled() const { - return mTile; + if (mTextureData != nullptr) + return mTextureData->tiled(); + std::shared_ptr data = sTextureDataManager.get(this); + return data->tiled(); } -void TextureResource::bind() const +bool TextureResource::bind() { - if(mTextureID != 0) - glBindTexture(GL_TEXTURE_2D, mTextureID); + if (mTextureData != nullptr) + { + mTextureData->uploadAndBind(); + return true; + } else - LOG(LogError) << "Tried to bind uninitialized texture!"; + { + return sTextureDataManager.bind(this); + } } - -std::shared_ptr TextureResource::get(const std::string& path, bool tile) +std::shared_ptr TextureResource::get(const std::string& path, bool tile, bool forceLoad, bool dynamic) { std::shared_ptr& rm = ResourceManager::getInstance(); const std::string canonicalPath = getCanonicalPath(path); - if(canonicalPath.empty()) { - std::shared_ptr tex(new TextureResource("", tile)); + std::shared_ptr tex(new TextureResource("", tile, false)); rm->addReloadable(tex); //make sure we get properly deinitialized even though we do nothing on reinitialization return tex; } @@ -121,58 +126,100 @@ std::shared_ptr TextureResource::get(const std::string& path, b // need to create it std::shared_ptr tex; + tex = std::shared_ptr(new TextureResource(key.first, tile, dynamic)); + std::shared_ptr data = sTextureDataManager.get(tex.get()); // is it an SVG? - if(key.first.substr(key.first.size() - 4, std::string::npos) == ".svg") + if(key.first.substr(key.first.size() - 4, std::string::npos) != ".svg") { - // probably - // don't add it to our map because 2 svgs might be rasterized at different sizes - tex = std::shared_ptr(new SVGResource(key.first, tile)); - sTextureList.push_back(tex); // add it to our list though - rm->addReloadable(tex); - tex->reload(rm); - return tex; - }else{ - // normal texture - tex = std::shared_ptr(new TextureResource(key.first, tile)); + // Probably not. Add it to our map. We don't add SVGs because 2 svgs might be rasterized at different sizes sTextureMap[key] = std::weak_ptr(tex); - sTextureList.push_back(tex); - rm->addReloadable(tex); - tex->reload(ResourceManager::getInstance()); - return tex; } + + // Add it to the reloadable list + rm->addReloadable(tex); + + // Force load it if necessary. Note that it may get dumped from VRAM if we run low + if (forceLoad) + { + tex->mForceLoad = forceLoad; + data->load(); + } + + return tex; } -bool TextureResource::isInitialized() const +// For scalable source images in textures we want to set the resolution to rasterize at +void TextureResource::rasterizeAt(size_t width, size_t height) { - return mTextureID != 0; + std::shared_ptr data; + if (mTextureData != nullptr) + data = mTextureData; + else + data = sTextureDataManager.get(this); + mSourceSize << (float)width, (float)height; + data->setSourceSize((float)width, (float)height); + if (mForceLoad || (mTextureData != nullptr)) + data->load(); } -size_t TextureResource::getMemUsage() const +Eigen::Vector2f TextureResource::getSourceImageSize() const { - if(!mTextureID || mTextureSize.x() == 0 || mTextureSize.y() == 0) - return 0; + return mSourceSize; +} - return mTextureSize.x() * mTextureSize.y() * 4; +bool TextureResource::isInitialized() const +{ + return true; } size_t TextureResource::getTotalMemUsage() { size_t total = 0; - - auto it = sTextureList.begin(); - while(it != sTextureList.end()) + // Count up all textures that manage their own texture data + for (auto tex : sAllTextures) { - if((*it).expired()) - { - // remove expired textures from the list - it = sTextureList.erase(it); - continue; - } - - total += (*it).lock()->getMemUsage(); - it++; + if (tex->mTextureData != nullptr) + total += tex->mTextureData->getVRAMUsage(); } + // Now get the committed memory from the manager + total += sTextureDataManager.getCommittedSize(); + // And the size of the loading queue + total += sTextureDataManager.getQueueSize(); + return total; +} +size_t TextureResource::getTotalTextureSize() +{ + size_t total = 0; + // Count up all textures that manage their own texture data + for (auto tex : sAllTextures) + { + if (tex->mTextureData != nullptr) + total += tex->getSize().x() * tex->getSize().y() * 4; + } + // Now get the total memory from the manager + total += sTextureDataManager.getTotalSize(); return total; } + +void TextureResource::unload(std::shared_ptr& rm) +{ + // Release the texture's resources + std::shared_ptr data; + if (mTextureData == nullptr) + data = sTextureDataManager.get(this); + else + data = mTextureData; + + data->releaseVRAM(); + data->releaseRAM(); +} + +void TextureResource::reload(std::shared_ptr& rm) +{ + // For dynamically loaded textures the texture manager will load them on demand. + // For manually loaded textures we have to reload them here + if (mTextureData) + mTextureData->load(); +} diff --git a/es-core/src/resources/TextureResource.h b/es-core/src/resources/TextureResource.h index 811e71de37..7623e8b1c2 100644 --- a/es-core/src/resources/TextureResource.h +++ b/es-core/src/resources/TextureResource.h @@ -3,8 +3,12 @@ #include "resources/ResourceManager.h" #include +#include +#include #include #include "platform.h" +#include "resources/TextureData.h" +#include "resources/TextureDataManager.h" #include GLHEADER // An OpenGL texture. @@ -12,40 +16,43 @@ class TextureResource : public IReloadable { public: - static std::shared_ptr get(const std::string& path, bool tile = false); + static std::shared_ptr get(const std::string& path, bool tile = false, bool forceLoad = false, bool dynamic = true); + void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height); + virtual void initFromMemory(const char* file, size_t length); + + // For scalable source images in textures we want to set the resolution to rasterize at + void rasterizeAt(size_t width, size_t height); + Eigen::Vector2f getSourceImageSize() const; virtual ~TextureResource(); - virtual void unload(std::shared_ptr& rm) override; - virtual void reload(std::shared_ptr& rm) override; - bool isInitialized() const; bool isTiled() const; - const Eigen::Vector2i& getSize() const; - void bind() const; - - // Warning: will NOT correctly reinitialize when this texture is reloaded (e.g. ES starts/stops playing a game). - virtual void initFromMemory(const char* file, size_t length); - // Warning: will NOT correctly reinitialize when this texture is reloaded (e.g. ES starts/stops playing a game). - void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height); + const Eigen::Vector2i getSize() const; + bool bind(); - size_t getMemUsage() const; // returns an approximation of the VRAM used by this texture (in bytes) static size_t getTotalMemUsage(); // returns an approximation of total VRAM used by textures (in bytes) + static size_t getTotalTextureSize(); // returns the number of bytes that would be used if all textures were in memory protected: - TextureResource(const std::string& path, bool tile); - void deinit(); - - Eigen::Vector2i mTextureSize; - const std::string mPath; - const bool mTile; + TextureResource(const std::string& path, bool tile, bool dynamic); + virtual void unload(std::shared_ptr& rm); + virtual void reload(std::shared_ptr& rm); private: - GLuint mTextureID; + // mTextureData is used for textures that are not loaded from a file - these ones + // are permanently allocated and cannot be loaded and unloaded based on resources + std::shared_ptr mTextureData; + + // The texture data manager manages loading and unloading of filesystem based textures + static TextureDataManager sTextureDataManager; + + Eigen::Vector2i mSize; + Eigen::Vector2f mSourceSize; + bool mForceLoad; typedef std::pair TextureKeyType; static std::map< TextureKeyType, std::weak_ptr > sTextureMap; // map of textures, used to prevent duplicate textures - - static std::list< std::weak_ptr > sTextureList; // list of all textures, used for memory approximations + static std::set sAllTextures; // Set of all textures, used for memory management }; From c02900cfd7b7d7d2885501bace6e6f0e900acfc8 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 28 Jan 2017 00:31:34 +0000 Subject: [PATCH 050/603] bumped version to 2.1.3 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index da8d26ed7d..632d9917e3 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_MAINTENANCE 2 -#define PROGRAM_VERSION_STRING "2.1.2rp" +#define PROGRAM_VERSION_MAINTENANCE 3 +#define PROGRAM_VERSION_STRING "2.1.3rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,1,2\0" +#define RESOURCE_VERSION_STRING "2,1,3\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 03687180cb4458906477b541f04ed757f36d529f Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 28 Jan 2017 02:24:40 +0000 Subject: [PATCH 051/603] =?UTF-8?q?Revert=20"Fix=20WSOD=20by=20loading=20t?= =?UTF-8?q?extures=20on=20demand=20in=20a=20separate=20thread=20when=20a?= =?UTF-8?q?=20us=E2=80=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- es-app/src/components/RatingComponent.cpp | 12 +- es-app/src/guis/GuiMenu.cpp | 6 - es-app/src/main.cpp | 5 - es-app/src/views/SystemView.cpp | 4 +- es-app/src/views/ViewController.cpp | 4 +- es-core/CMakeLists.txt | 6 +- es-core/src/Settings.cpp | 3 +- es-core/src/Window.cpp | 9 +- es-core/src/components/ImageComponent.cpp | 66 +---- es-core/src/components/ImageComponent.h | 7 +- es-core/src/resources/SVGResource.cpp | 101 ++++++++ es-core/src/resources/SVGResource.h | 27 ++ es-core/src/resources/TextureData.cpp | 259 ------------------- es-core/src/resources/TextureData.h | 63 ----- es-core/src/resources/TextureDataManager.cpp | 226 ---------------- es-core/src/resources/TextureDataManager.h | 86 ------ es-core/src/resources/TextureResource.cpp | 245 +++++++----------- es-core/src/resources/TextureResource.h | 49 ++-- 18 files changed, 281 insertions(+), 897 deletions(-) create mode 100644 es-core/src/resources/SVGResource.cpp create mode 100644 es-core/src/resources/SVGResource.h delete mode 100644 es-core/src/resources/TextureData.cpp delete mode 100644 es-core/src/resources/TextureData.h delete mode 100644 es-core/src/resources/TextureDataManager.cpp delete mode 100644 es-core/src/resources/TextureDataManager.h diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index 3dbc36a0a4..12f39a3090 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -2,6 +2,7 @@ #include "Renderer.h" #include "Window.h" #include "Util.h" +#include "resources/SVGResource.h" RatingComponent::RatingComponent(Window* window) : GuiComponent(window) { @@ -44,13 +45,16 @@ void RatingComponent::onSizeChanged() else if(mSize.x() == 0) mSize[0] = mSize.y() * NUM_RATING_STARS; + auto filledSVG = dynamic_cast(mFilledTexture.get()); + auto unfilledSVG = dynamic_cast(mUnfilledTexture.get()); + if(mSize.y() > 0) { size_t heightPx = (size_t)round(mSize.y()); - if (mFilledTexture) - mFilledTexture->rasterizeAt(heightPx, heightPx); - if(mUnfilledTexture) - mUnfilledTexture->rasterizeAt(heightPx, heightPx); + if(filledSVG) + filledSVG->rasterizeAt(heightPx, heightPx); + if(unfilledSVG) + unfilledSVG->rasterizeAt(heightPx, heightPx); } updateVertices(); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 68b1a355d1..71ac7272bc 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -178,12 +178,6 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("PARSE GAMESLISTS ONLY", parse_gamelists); s->addSaveFunc([parse_gamelists] { Settings::getInstance()->setBool("ParseGamelistOnly", parse_gamelists->getState()); }); - // maximum vram - auto max_vram = std::make_shared(mWindow, 0.f, 1000.f, 10.f, "Mb"); - max_vram->setValue((float)(Settings::getInstance()->getInt("MaxVRAM"))); - s->addWithLabel("VRAM LIMIT", max_vram); - s->addSaveFunc([max_vram] { Settings::getInstance()->setInt("MaxVRAM", (int)round(max_vram->getValue())); }); - mWindow->pushGui(s); }); diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index c3d030ec4b..6753b9ae31 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -74,10 +74,6 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height }else if(strcmp(argv[i], "--scrape") == 0) { scrape_cmdline = true; - }else if(strcmp(argv[i], "--max-vram") == 0) - { - int maxVRAM = atoi(argv[i + 1]); - Settings::getInstance()->setInt("MaxVRAM", maxVRAM); }else if(strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { #ifdef WIN32 @@ -103,7 +99,6 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height "--scrape scrape using command line interface\n" "--windowed not fullscreen, should be used with --resolution\n" "--vsync [1/on or 0/off] turn vsync on or off (default is on)\n" - "--max-vram [size] Max VRAM to use in Mb before swapping. 0 for unlimited\n" "--help, -h summon a sentient, angry tuba\n\n" "More information available in README.md.\n"; return false; //exit after printing help diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index c760125b97..013490aca9 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -43,13 +43,13 @@ void SystemView::populate() // make logo if(theme->getElement("system", "logo", "image")) { - ImageComponent* logo = new ImageComponent(mWindow, false, false); + ImageComponent* logo = new ImageComponent(mWindow); logo->setMaxSize(Eigen::Vector2f(logoSize().x(), logoSize().y())); logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, (logoSize().y() - logo->getSize().y()) / 2); // center e.data.logo = std::shared_ptr(logo); - ImageComponent* logoSelected = new ImageComponent(mWindow, false, false); + ImageComponent* logoSelected = new ImageComponent(mWindow); logoSelected->setMaxSize(Eigen::Vector2f(logoSize().x() * SELECTED_SCALE, logoSize().y() * SELECTED_SCALE * 0.70f)); logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logoSelected->setPosition((logoSize().x() - logoSelected->getSize().x()) / 2, diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index d9093e8e10..1e10c91753 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -406,9 +406,7 @@ void ViewController::reloadAll() mCurrentView = getGameListView(mState.getSystem()); }else if(mState.viewing == SYSTEM_SELECT) { - SystemData* system = mState.getSystem(); - goToSystemView(SystemData::sSystemVector.front()); - mSystemListView->goToSystem(system, false); + mSystemListView->goToSystem(mState.getSystem(), false); mCurrentView = mSystemListView; }else{ goToSystemView(SystemData::sSystemVector.front()); diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index f05aec77c3..cf0cfb3ea3 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -53,9 +53,8 @@ set(CORE_HEADERS # Resources ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.h # Embedded assets (needed by ResourceManager) ${emulationstation-all_SOURCE_DIR}/data/Resources.h @@ -109,9 +108,8 @@ set(CORE_SOURCES # Resources ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.cpp ) set(EMBEDDED_ASSET_SOURCES diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index df90ba7b65..337dcaac13 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -69,7 +69,6 @@ void Settings::setDefaults() mIntMap["ScreenSaverTime"] = 5*60*1000; // 5 minutes mIntMap["ScraperResizeWidth"] = 400; mIntMap["ScraperResizeHeight"] = 0; - mIntMap["MaxVRAM"] = 100; mStringMap["TransitionStyle"] = "fade"; mStringMap["ThemeSet"] = ""; @@ -155,4 +154,4 @@ void Settings::setMethodName(const std::string& name, type value) \ SETTINGS_GETSET(bool, mBoolMap, getBool, setBool); SETTINGS_GETSET(int, mIntMap, getInt, setInt); SETTINGS_GETSET(float, mFloatMap, getFloat, setFloat); -SETTINGS_GETSET(const std::string&, mStringMap, getString, setString); +SETTINGS_GETSET(const std::string&, mStringMap, getString, setString); \ No newline at end of file diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index e402162c3d..761df4abc4 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -160,12 +160,11 @@ void Window::update(int deltaTime) ss << std::fixed << std::setprecision(2) << ((float)mFrameTimeElapsed / (float)mFrameCountElapsed) << "ms"; // vram - float textureVramUsageMb = TextureResource::getTotalMemUsage() / 1000.0f / 1000.0f; - float textureTotalUsageMb = TextureResource::getTotalTextureSize() / 1000.0f / 1000.0f; + float textureVramUsageMb = TextureResource::getTotalMemUsage() / 1000.0f / 1000.0f;; float fontVramUsageMb = Font::getTotalMemUsage() / 1000.0f / 1000.0f;; + float totalVramUsageMb = textureVramUsageMb + fontVramUsageMb; + ss << "\nVRAM: " << totalVramUsageMb << "mb (texs: " << textureVramUsageMb << "mb, fonts: " << fontVramUsageMb << "mb)"; - ss << "\nFont VRAM: " << fontVramUsageMb << " Tex VRAM: " << textureVramUsageMb << - " Tex Max: " << textureTotalUsageMb; mFrameDataText = std::unique_ptr(mDefaultFonts.at(1)->buildTextCache(ss.str(), 50.f, 50.f, 0xFF00FFFF)); } @@ -243,7 +242,7 @@ void Window::renderLoadingScreen() Renderer::setMatrix(trans); Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0xFFFFFFFF); - ImageComponent splash(this, true); + ImageComponent splash(this); splash.setResize(Renderer::getScreenWidth() * 0.6f, 0.0f); splash.setImage(":/splash.svg"); splash.setPosition((Renderer::getScreenWidth() - splash.getSize().x()) / 2, (Renderer::getScreenHeight() - splash.getSize().y()) / 2 * 0.6f); diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 1ae62314d8..2898c6f732 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -6,6 +6,7 @@ #include "Renderer.h" #include "ThemeData.h" #include "Util.h" +#include "resources/SVGResource.h" Eigen::Vector2i ImageComponent::getTextureSize() const { @@ -21,9 +22,8 @@ Eigen::Vector2f ImageComponent::getCenter() const mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); } -ImageComponent::ImageComponent(Window* window, bool forceLoad, bool dynamic) : GuiComponent(window), - mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF), - mForceLoad(forceLoad), mDynamic(dynamic) +ImageComponent::ImageComponent(Window* window) : GuiComponent(window), + mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF) { updateColors(); } @@ -37,7 +37,9 @@ void ImageComponent::resize() if(!mTexture) return; - const Eigen::Vector2f textureSize = mTexture->getSourceImageSize(); + SVGResource* svg = dynamic_cast(mTexture.get()); + + const Eigen::Vector2f textureSize = svg ? svg->getSourceImageSize() : Eigen::Vector2f((float)mTexture->getSize().x(), (float)mTexture->getSize().y()); if(textureSize.isZero()) return; @@ -88,8 +90,12 @@ void ImageComponent::resize() } } } - // mSize.y() should already be rounded - mTexture->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); + + if(svg) + { + // mSize.y() should already be rounded + svg->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); + } onSizeChanged(); } @@ -104,7 +110,7 @@ void ImageComponent::setImage(std::string path, bool tile) if(path.empty() || !ResourceManager::getInstance()->fileExists(path)) mTexture.reset(); else - mTexture = TextureResource::get(path, tile, mForceLoad, mDynamic); + mTexture = TextureResource::get(path, tile); resize(); } @@ -241,10 +247,7 @@ void ImageComponent::render(const Eigen::Affine3f& parentTrans) if(mTexture->isInitialized()) { // actually draw the image - // The bind() function returns false if the texture is not currently loaded. A blank - // texture is bound in this case but we want to handle a fade so it doesn't just 'jump' in - // when it finally loads - fadeIn(mTexture->bind()); + mTexture->bind(); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); @@ -275,47 +278,6 @@ void ImageComponent::render(const Eigen::Affine3f& parentTrans) GuiComponent::renderChildren(trans); } -void ImageComponent::fadeIn(bool textureLoaded) -{ - if (!mForceLoad) - { - if (!textureLoaded) - { - // Start the fade if this is the first time we've encountered the unloaded texture - if (!mFading) - { - // Start with a zero opacity and flag it as fading - mFadeOpacity = 0; - mFading = true; - // Set the colours to be translucent - mColorShift = (mColorShift >> 8 << 8) | 0; - updateColors(); - } - } - else if (mFading) - { - // The texture is loaded and we need to fade it in. The fade is based on the frame rate - // and is 1/4 second if running at 60 frames per second although the actual value is not - // that important - int opacity = mFadeOpacity + 255 / 15; - // See if we've finished fading - if (opacity >= 255) - { - mFadeOpacity = 255; - mFading = false; - } - else - { - mFadeOpacity = (unsigned char)opacity; - } - // Apply the combination of the target opacity and current fade - float newOpacity = (float)mOpacity * ((float)mFadeOpacity / 255.0f); - mColorShift = (mColorShift >> 8 << 8) | (unsigned char)newOpacity; - updateColors(); - } - } -} - bool ImageComponent::hasImage() { return (bool)mTexture; diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 3ff1ffbb27..939c6c7cd2 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -12,7 +12,7 @@ class ImageComponent : public GuiComponent { public: - ImageComponent(Window* window, bool forceLoad = false, bool dynamic = true); + ImageComponent(Window* window); virtual ~ImageComponent(); //Loads the image at the given filepath. Will tile if tile is true (retrieves texture as tiling, creates vertices accordingly). @@ -81,15 +81,10 @@ class ImageComponent : public GuiComponent void updateVertices(); void updateColors(); - void fadeIn(bool textureLoaded); unsigned int mColorShift; std::shared_ptr mTexture; - unsigned char mFadeOpacity; - bool mFading; - bool mForceLoad; - bool mDynamic; }; #endif diff --git a/es-core/src/resources/SVGResource.cpp b/es-core/src/resources/SVGResource.cpp new file mode 100644 index 0000000000..1a4ea16fca --- /dev/null +++ b/es-core/src/resources/SVGResource.cpp @@ -0,0 +1,101 @@ +#include "SVGResource.h" +#include "nanosvg/nanosvg.h" +#include "nanosvg/nanosvgrast.h" +#include "Log.h" +#include "Util.h" +#include "ImageIO.h" + +#define DPI 96 + +SVGResource::SVGResource(const std::string& path, bool tile) : TextureResource(path, tile), mSVGImage(NULL) +{ + mLastWidth = 0; + mLastHeight = 0; +} + +SVGResource::~SVGResource() +{ + deinitSVG(); +} + +void SVGResource::unload(std::shared_ptr& rm) +{ + deinitSVG(); + TextureResource::unload(rm); +} + +void SVGResource::initFromMemory(const char* file, size_t length) +{ + deinit(); + deinitSVG(); + + // nsvgParse excepts a modifiable, null-terminated string + char* copy = (char*)malloc(length + 1); + assert(copy != NULL); + memcpy(copy, file, length); + copy[length] = '\0'; + + mSVGImage = nsvgParse(copy, "px", DPI); + free(copy); + + if(!mSVGImage) + { + LOG(LogError) << "Error parsing SVG image."; + return; + } + + if(mLastWidth && mLastHeight) + rasterizeAt(mLastWidth, mLastHeight); + else + rasterizeAt((size_t)round(mSVGImage->width), (size_t)round(mSVGImage->height)); +} + +void SVGResource::rasterizeAt(size_t width, size_t height) +{ + if(!mSVGImage || (width == 0 && height == 0)) + return; + + if(width == 0) + { + // auto scale width to keep aspect + width = (size_t)round((height / mSVGImage->height) * mSVGImage->width); + }else if(height == 0) + { + // auto scale height to keep aspect + height = (size_t)round((width / mSVGImage->width) * mSVGImage->height); + } + + if(width != (size_t)round(mSVGImage->width) && height != (size_t)round(mSVGImage->height)) + { + mLastWidth = width; + mLastHeight = height; + } + + unsigned char* imagePx = (unsigned char*)malloc(width * height * 4); + assert(imagePx != NULL); + + NSVGrasterizer* rast = nsvgCreateRasterizer(); + nsvgRasterize(rast, mSVGImage, 0, 0, height / mSVGImage->height, imagePx, width, height, width * 4); + nsvgDeleteRasterizer(rast); + + ImageIO::flipPixelsVert(imagePx, width, height); + + initFromPixels(imagePx, width, height); + free(imagePx); +} + +Eigen::Vector2f SVGResource::getSourceImageSize() const +{ + if(mSVGImage) + return Eigen::Vector2f(mSVGImage->width, mSVGImage->height); + + return Eigen::Vector2f::Zero(); +} + +void SVGResource::deinitSVG() +{ + if(mSVGImage) + nsvgDelete(mSVGImage); + + mSVGImage = NULL; +} diff --git a/es-core/src/resources/SVGResource.h b/es-core/src/resources/SVGResource.h new file mode 100644 index 0000000000..87479c0cf1 --- /dev/null +++ b/es-core/src/resources/SVGResource.h @@ -0,0 +1,27 @@ +#pragma once + +#include "resources/TextureResource.h" + +struct NSVGimage; + +class SVGResource : public TextureResource +{ +public: + virtual ~SVGResource(); + + virtual void unload(std::shared_ptr& rm) override; + + virtual void initFromMemory(const char* image, size_t length) override; + + void rasterizeAt(size_t width, size_t height); + Eigen::Vector2f getSourceImageSize() const; + +protected: + friend TextureResource; + SVGResource(const std::string& path, bool tile); + void deinitSVG(); + + NSVGimage* mSVGImage; + size_t mLastWidth; + size_t mLastHeight; +}; diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp deleted file mode 100644 index 15a3da116e..0000000000 --- a/es-core/src/resources/TextureData.cpp +++ /dev/null @@ -1,259 +0,0 @@ -#include "resources/TextureData.h" -#include "resources/ResourceManager.h" -#include "Log.h" -#include "ImageIO.h" -#include "string.h" -#include "Util.h" -#include "nanosvg/nanosvg.h" -#include "nanosvg/nanosvgrast.h" -#include - -#define DPI 96 - -TextureData::TextureData(bool tile) : mTile(tile), mTextureID(0), mDataRGBA(nullptr), mScalable(false), - mWidth(0), mHeight(0), mSourceWidth(0.0f), mSourceHeight(0.0f) -{ -} - -TextureData::~TextureData() -{ - releaseVRAM(); - releaseRAM(); -} - -void TextureData::initFromPath(const std::string& path) -{ - // Just set the path. It will be loaded later - mPath = path; - // Only textures with paths are reloadable - mReloadable = true; -} - -bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length) -{ - // If already initialised then don't read again - { - std::unique_lock lock(mMutex); - if (mDataRGBA) - return true; - } - - // nsvgParse excepts a modifiable, null-terminated string - char* copy = (char*)malloc(length + 1); - assert(copy != NULL); - memcpy(copy, fileData, length); - copy[length] = '\0'; - - NSVGimage* svgImage = nsvgParse(copy, "px", DPI); - free(copy); - if (!svgImage) - { - LOG(LogError) << "Error parsing SVG image."; - return false; - } - - // We want to rasterise this texture at a specific resolution. If the source size - // variables are set then use them otherwise set them from the parsed file - if ((mSourceWidth == 0.0f) && (mSourceHeight == 0.0f)) - { - mSourceWidth = svgImage->width; - mSourceHeight = svgImage->height; - } - mWidth = (size_t)round(mSourceWidth); - mHeight = (size_t)round(mSourceHeight); - - if (mWidth == 0) - { - // auto scale width to keep aspect - mWidth = (size_t)round(((float)mHeight / svgImage->height) * svgImage->width); - } - else if (mHeight == 0) - { - // auto scale height to keep aspect - mHeight = (size_t)round(((float)mWidth / svgImage->width) * svgImage->height); - } - - unsigned char* dataRGBA = new unsigned char[mWidth * mHeight * 4]; - - NSVGrasterizer* rast = nsvgCreateRasterizer(); - nsvgRasterize(rast, svgImage, 0, 0, mHeight / svgImage->height, dataRGBA, mWidth, mHeight, mWidth * 4); - nsvgDeleteRasterizer(rast); - - ImageIO::flipPixelsVert(dataRGBA, mWidth, mHeight); - - std::unique_lock lock(mMutex); - mDataRGBA = dataRGBA; - - return true; -} - -bool TextureData::initImageFromMemory(const unsigned char* fileData, size_t length) -{ - size_t width, height; - - // If already initialised then don't read again - { - std::unique_lock lock(mMutex); - if (mDataRGBA) - return true; - } - - std::vector imageRGBA = ImageIO::loadFromMemoryRGBA32((const unsigned char*)(fileData), length, width, height); - if (imageRGBA.size() == 0) - { - LOG(LogError) << "Could not initialize texture from memory, invalid data! (file path: " << mPath << ", data ptr: " << (size_t)fileData << ", reported size: " << length << ")"; - return false; - } - - mSourceWidth = width; - mSourceHeight = height; - mScalable = false; - - return initFromRGBA(imageRGBA.data(), width, height); -} - -bool TextureData::initFromRGBA(const unsigned char* dataRGBA, size_t width, size_t height) -{ - // If already initialised then don't read again - std::unique_lock lock(mMutex); - if (mDataRGBA) - return true; - - // Take a copy - mDataRGBA = new unsigned char[width * height * 4]; - memcpy(mDataRGBA, dataRGBA, width * height * 4); - mWidth = width; - mHeight = height; - return true; -} - -bool TextureData::load() -{ - bool retval = false; - - // Need to load. See if there is a file - if (!mPath.empty()) - { - std::shared_ptr& rm = ResourceManager::getInstance(); - const ResourceData& data = rm->getFileData(mPath); - // is it an SVG? - if (mPath.substr(mPath.size() - 4, std::string::npos) == ".svg") - { - mScalable = true; - retval = initSVGFromMemory((const unsigned char*)data.ptr.get(), data.length); - } - else - retval = initImageFromMemory((const unsigned char*)data.ptr.get(), data.length); - } - return retval; -} - -bool TextureData::isLoaded() -{ - std::unique_lock lock(mMutex); - if (mDataRGBA || (mTextureID != 0)) - return true; - return false; -} - -bool TextureData::uploadAndBind() -{ - // See if it's already been uploaded - std::unique_lock lock(mMutex); - if (mTextureID != 0) - { - glBindTexture(GL_TEXTURE_2D, mTextureID); - } - else - { - // Load it if necessary - if (!mDataRGBA) - { - return false; - } - // Make sure we're ready to upload - if ((mWidth == 0) || (mHeight == 0) || (mDataRGBA == nullptr)) - return false; - glGetError(); - //now for the openGL texture stuff - glGenTextures(1, &mTextureID); - glBindTexture(GL_TEXTURE_2D, mTextureID); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mWidth, mHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, mDataRGBA); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - const GLint wrapMode = mTile ? GL_REPEAT : GL_CLAMP_TO_EDGE; - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); - } - return true; -} - -void TextureData::releaseVRAM() -{ - std::unique_lock lock(mMutex); - if (mTextureID != 0) - { - glDeleteTextures(1, &mTextureID); - mTextureID = 0; - } -} - -void TextureData::releaseRAM() -{ - std::unique_lock lock(mMutex); - delete[] mDataRGBA; - mDataRGBA = 0; -} - -size_t TextureData::width() -{ - if (mWidth == 0) - load(); - return mWidth; -} - -size_t TextureData::height() -{ - if (mHeight == 0) - load(); - return mHeight; -} - -float TextureData::sourceWidth() -{ - if (mSourceWidth == 0) - load(); - return mSourceWidth; -} - -float TextureData::sourceHeight() -{ - if (mSourceHeight == 0) - load(); - return mSourceHeight; -} - -void TextureData::setSourceSize(float width, float height) -{ - if (mScalable) - { - if ((mSourceWidth != width) || (mSourceHeight != height)) - { - mSourceWidth = width; - mSourceHeight = height; - releaseVRAM(); - releaseRAM(); - } - } -} - -size_t TextureData::getVRAMUsage() -{ - if ((mTextureID != 0) || (mDataRGBA != nullptr)) - return mWidth * mHeight * 4; - else - return 0; -} diff --git a/es-core/src/resources/TextureData.h b/es-core/src/resources/TextureData.h deleted file mode 100644 index 76ca6a0b4d..0000000000 --- a/es-core/src/resources/TextureData.h +++ /dev/null @@ -1,63 +0,0 @@ -#pragma once - -#include -#include -#include "platform.h" -#include -#include GLHEADER - -class TextureResource; - -class TextureData -{ -public: - TextureData(bool tile); - ~TextureData(); - - // These functions populate mDataRGBA but do not upload the texture to VRAM - - //!!!! Needs to be canonical path. Caller should check for duplicates before calling this - void initFromPath(const std::string& path); - bool initSVGFromMemory(const unsigned char* fileData, size_t length); - bool initImageFromMemory(const unsigned char* fileData, size_t length); - bool initFromRGBA(const unsigned char* dataRGBA, size_t width, size_t height); - - // Read the data into memory if necessary - bool load(); - - bool isLoaded(); - - // Upload the texture to VRAM if necessary and bind. Returns true if bound ok or - // false if either not loaded - bool uploadAndBind(); - - // Release the texture from VRAM - void releaseVRAM(); - - // Release the texture from conventional RAM - void releaseRAM(); - - // Get the amount of VRAM currenty used by this texture - size_t getVRAMUsage(); - - size_t width(); - size_t height(); - float sourceWidth(); - float sourceHeight(); - void setSourceSize(float width, float height); - - bool tiled() { return mTile; } - -private: - std::mutex mMutex; - bool mTile; - std::string mPath; - GLuint mTextureID; - unsigned char* mDataRGBA; - size_t mWidth; - size_t mHeight; - float mSourceWidth; - float mSourceHeight; - bool mScalable; - bool mReloadable; -}; diff --git a/es-core/src/resources/TextureDataManager.cpp b/es-core/src/resources/TextureDataManager.cpp deleted file mode 100644 index 55720d14ac..0000000000 --- a/es-core/src/resources/TextureDataManager.cpp +++ /dev/null @@ -1,226 +0,0 @@ -#include "resources/TextureDataManager.h" -#include "resources/TextureResource.h" -#include "Settings.h" - -TextureDataManager::TextureDataManager() -{ - unsigned char data[5 * 5 * 4]; - mBlank = std::shared_ptr(new TextureData(false)); - for (int i = 0; i < (5 * 5); ++i) - { - data[i*4] = (i % 2) * 255; - data[i*4+1] = (i % 2) * 255; - data[i*4+2] = (i % 2) * 255; - data[i*4+3] = 0; - } - mBlank->initFromRGBA(data, 5, 5); - mLoader = new TextureLoader; -} - -TextureDataManager::~TextureDataManager() -{ - delete mLoader; -} - -std::shared_ptr TextureDataManager::add(const TextureResource* key, bool tiled) -{ - remove(key); - std::shared_ptr data(new TextureData(tiled)); - mTextures.push_front(data); - mTextureLookup[key] = mTextures.begin(); - return data; -} - -void TextureDataManager::remove(const TextureResource* key) -{ - // Find the entry in the list - auto it = mTextureLookup.find(key); - if (it != mTextureLookup.end()) - { - // Remove the list entry - mTextures.erase((*it).second); - // And the lookup - mTextureLookup.erase(it); - } -} - -std::shared_ptr TextureDataManager::get(const TextureResource* key) -{ - // If it's in the cache then we want to remove it from it's current location and - // move it to the top - std::shared_ptr tex; - auto it = mTextureLookup.find(key); - if (it != mTextureLookup.end()) - { - tex = *(*it).second; - // Remove the list entry - mTextures.erase((*it).second); - // Put it at the top - mTextures.push_front(tex); - // Store it back in the lookup - mTextureLookup[key] = mTextures.begin(); - - // Make sure it's loaded or queued for loading - load(tex); - } - return tex; -} - -bool TextureDataManager::bind(const TextureResource* key) -{ - std::shared_ptr tex = get(key); - bool bound = false; - if (tex != nullptr) - bound = tex->uploadAndBind(); - if (!bound) - mBlank->uploadAndBind(); - return bound; -} - -size_t TextureDataManager::getTotalSize() -{ - size_t total = 0; - for (auto tex : mTextures) - total += tex->width() * tex->height() * 4; - return total; -} - -size_t TextureDataManager::getCommittedSize() -{ - size_t total = 0; - for (auto tex : mTextures) - total += tex->getVRAMUsage(); - return total; -} - -size_t TextureDataManager::getQueueSize() -{ - return mLoader->getQueueSize(); -} - -void TextureDataManager::load(std::shared_ptr tex, bool block) -{ - // See if it's already loaded - if (tex->isLoaded()) - return; - // Not loaded. Make sure there is room - size_t size = TextureResource::getTotalMemUsage(); - size_t max_texture = (size_t)Settings::getInstance()->getInt("MaxVRAM") * 1024 * 1024; - - size_t in = size; - - for (auto it = mTextures.rbegin(); it != mTextures.rend(); ++it) - { - if (size < max_texture) - break; - //size -= (*it)->getVRAMUsage(); - (*it)->releaseVRAM(); - (*it)->releaseRAM(); - // It may be already in the loader queue. In this case it wouldn't have been using - // any VRAM yet but it will be. Remove it from the loader queue - mLoader->remove(*it); - size = TextureResource::getTotalMemUsage(); - } - if (!block) - mLoader->load(tex); - else - tex->load(); -} - -TextureLoader::TextureLoader() : mExit(false) -{ - mThread = new std::thread(&TextureLoader::threadProc, this); -} - -TextureLoader::~TextureLoader() -{ - // Just abort any waiting texture - mTextureDataQ.clear(); - mTextureDataLookup.clear(); - - // Exit the thread - mExit = true; - mEvent.notify_one(); - mThread->join(); - delete mThread; -} - -void TextureLoader::threadProc() -{ - while (!mExit) - { - std::shared_ptr textureData; - { - // Wait for an event to say there is something in the queue - std::unique_lock lock(mMutex); - mEvent.wait(lock); - if (!mTextureDataQ.empty()) - { - textureData = mTextureDataQ.front(); - mTextureDataQ.pop_front(); - mTextureDataLookup.erase(mTextureDataLookup.find(textureData.get())); - } - } - // Queue has been released here but we might have a texture to process - while (textureData) - { - textureData->load(); - - // See if there is another item in the queue - textureData = nullptr; - std::unique_lock lock(mMutex); - if (!mTextureDataQ.empty()) - { - textureData = mTextureDataQ.front(); - mTextureDataQ.pop_front(); - mTextureDataLookup.erase(mTextureDataLookup.find(textureData.get())); - } - } - } -} - -void TextureLoader::load(std::shared_ptr textureData) -{ - // Make sure it's not already loaded - if (!textureData->isLoaded()) - { - std::unique_lock lock(mMutex); - // Remove it from the queue if it is already there - auto td = mTextureDataLookup.find(textureData.get()); - if (td != mTextureDataLookup.end()) - { - mTextureDataQ.erase((*td).second); - mTextureDataLookup.erase(td); - } - - // Put it on the start of the queue as we want the newly requested textures to load first - mTextureDataQ.push_front(textureData); - mTextureDataLookup[textureData.get()] = mTextureDataQ.begin(); - mEvent.notify_one(); - } -} - -void TextureLoader::remove(std::shared_ptr textureData) -{ - // Just remove it from the queue so we don't attempt to load it - std::unique_lock lock(mMutex); - auto td = mTextureDataLookup.find(textureData.get()); - if (td != mTextureDataLookup.end()) - { - mTextureDataQ.erase((*td).second); - mTextureDataLookup.erase(td); - } -} - -size_t TextureLoader::getQueueSize() -{ - // Gets the amount of video memory that will be used once all textures in - // the queue are loaded - size_t mem = 0; - std::unique_lock lock(mMutex); - for (auto tex : mTextureDataQ) - { - mem += tex->width() * tex->height() * 4; - } - return mem; -} diff --git a/es-core/src/resources/TextureDataManager.h b/es-core/src/resources/TextureDataManager.h deleted file mode 100644 index 414804aba9..0000000000 --- a/es-core/src/resources/TextureDataManager.h +++ /dev/null @@ -1,86 +0,0 @@ -#pragma once - -#include "resources/ResourceManager.h" -#include "platform.h" -#include "resources/TextureData.h" -#include -#include -#include -#include -#include -#include - -class TextureResource; - -class TextureLoader -{ -public: - TextureLoader(); - ~TextureLoader(); - - void load(std::shared_ptr textureData); - void remove(std::shared_ptr textureData); - - size_t getQueueSize(); - -private: - void processQueue(); - void threadProc(); - - std::list > mTextureDataQ; - std::map >::iterator > mTextureDataLookup; - - std::thread* mThread; - std::mutex mMutex; - std::condition_variable mEvent; - bool mExit; -}; - -// -// This class manages the loading and unloading of textures -// -// When textures are added, the texture data is just stored as-is. The texture -// data should only have been constructed and not loaded for this to work correctly. -// When the get() function is called it indicates that a texture wants to be used so -// at this point the texture data is loaded (via a call to load()). -// -// Once the load is complete (which may not be on the first call to get() if the -// data is loaded in a background thread) then the get() function call uploadAndBind() -// to upload to VRAM if necessary and bind the texture. This is followed by a call -// to releaseRAM() which frees the memory buffer if the texture can be reloaded from -// disk if needed again -// -class TextureDataManager -{ -public: - TextureDataManager(); - ~TextureDataManager(); - - std::shared_ptr add(const TextureResource* key, bool tiled); - - // The texturedata being removed may be loading in a different thread. However it will - // be referenced by a smart point so we only need to remove it from our array and it - // will be deleted when the other thread has finished with it - void remove(const TextureResource* key); - - std::shared_ptr get(const TextureResource* key); - bool bind(const TextureResource* key); - - // Get the total size of all textures managed by this object, loaded and unloaded in bytes - size_t getTotalSize(); - // Get the total size of all committed textures (in VRAM) in bytes - size_t getCommittedSize(); - // Get the total size of all load-pending textures in the queue - these will - // be committed to VRAM as the queue is processed - size_t getQueueSize(); - // Load a texture, freeing resources as necessary to make space - void load(std::shared_ptr tex, bool block = false); - -private: - - std::list > mTextures; - std::map >::iterator > mTextureLookup; - std::shared_ptr mBlank; - TextureLoader* mLoader; -}; - diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index 6400d74b9b..e6657dcc20 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -5,113 +5,108 @@ #include "ImageIO.h" #include "Renderer.h" #include "Util.h" -#include "Settings.h" +#include "resources/SVGResource.h" -TextureDataManager TextureResource::sTextureDataManager; std::map< TextureResource::TextureKeyType, std::weak_ptr > TextureResource::sTextureMap; -std::set TextureResource::sAllTextures; +std::list< std::weak_ptr > TextureResource::sTextureList; -TextureResource::TextureResource(const std::string& path, bool tile, bool dynamic) : mTextureData(nullptr), mForceLoad(false) +TextureResource::TextureResource(const std::string& path, bool tile) : + mTextureID(0), mPath(path), mTextureSize(Eigen::Vector2i::Zero()), mTile(tile) { - // Create a texture data object for this texture - if (!path.empty()) - { - // If there is a path then the 'dynamic' flag tells us whether to use the texture - // data manager to manage loading/unloading of this texture - std::shared_ptr data; - if (dynamic) - { - data = sTextureDataManager.add(this, tile); - data->initFromPath(path); - // Force the texture manager to load it using a blocking load - sTextureDataManager.load(data, true); - } - else - { - mTextureData = std::shared_ptr(new TextureData(tile)); - data = mTextureData; - data->initFromPath(path); - // Load it so we can read the width/height - data->load(); - } - - mSize << data->width(), data->height(); - mSourceSize << data->sourceWidth(), data->sourceHeight(); - } - else - { - // Create a texture managed by this class because it cannot be dynamically loaded and unloaded - mTextureData = std::shared_ptr(new TextureData(tile)); - } - sAllTextures.insert(this); } TextureResource::~TextureResource() { - if (mTextureData == nullptr) - sTextureDataManager.remove(this); + deinit(); +} - sAllTextures.erase(sAllTextures.find(this)); +void TextureResource::unload(std::shared_ptr& rm) +{ + deinit(); +} + +void TextureResource::reload(std::shared_ptr& rm) +{ + if(!mPath.empty()) + { + const ResourceData& data = rm->getFileData(mPath); + initFromMemory((const char*)data.ptr.get(), data.length); + } } void TextureResource::initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height) { - // This is only valid if we have a local texture data object - assert(mTextureData != nullptr); - mTextureData->releaseVRAM(); - mTextureData->releaseRAM(); - mTextureData->initFromRGBA(dataRGBA, width, height); - // Cache the image dimensions - mSize << width, height; - mSourceSize << mTextureData->sourceWidth(), mTextureData->sourceHeight(); + deinit(); + + assert(width > 0 && height > 0); + + //now for the openGL texture stuff + glGenTextures(1, &mTextureID); + glBindTexture(GL_TEXTURE_2D, mTextureID); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, dataRGBA); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + const GLint wrapMode = mTile ? GL_REPEAT : GL_CLAMP_TO_EDGE; + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); + + mTextureSize << width, height; } void TextureResource::initFromMemory(const char* data, size_t length) { - // This is only valid if we have a local texture data object - assert(mTextureData != nullptr); - mTextureData->releaseVRAM(); - mTextureData->releaseRAM(); - mTextureData->initImageFromMemory((const unsigned char*)data, length); - // Get the size from the texture data - mSize << mTextureData->width(), mTextureData->height(); - mSourceSize << mTextureData->sourceWidth(), mTextureData->sourceHeight(); + size_t width, height; + std::vector imageRGBA = ImageIO::loadFromMemoryRGBA32((const unsigned char*)(data), length, width, height); + + if(imageRGBA.size() == 0) + { + LOG(LogError) << "Could not initialize texture from memory, invalid data! (file path: " << mPath << ", data ptr: " << (size_t)data << ", reported size: " << length << ")"; + return; + } + + initFromPixels(imageRGBA.data(), width, height); +} + +void TextureResource::deinit() +{ + if(mTextureID != 0) + { + glDeleteTextures(1, &mTextureID); + mTextureID = 0; + } } -const Eigen::Vector2i TextureResource::getSize() const +const Eigen::Vector2i& TextureResource::getSize() const { - return mSize; + return mTextureSize; } bool TextureResource::isTiled() const { - if (mTextureData != nullptr) - return mTextureData->tiled(); - std::shared_ptr data = sTextureDataManager.get(this); - return data->tiled(); + return mTile; } -bool TextureResource::bind() +void TextureResource::bind() const { - if (mTextureData != nullptr) - { - mTextureData->uploadAndBind(); - return true; - } + if(mTextureID != 0) + glBindTexture(GL_TEXTURE_2D, mTextureID); else - { - return sTextureDataManager.bind(this); - } + LOG(LogError) << "Tried to bind uninitialized texture!"; } -std::shared_ptr TextureResource::get(const std::string& path, bool tile, bool forceLoad, bool dynamic) + +std::shared_ptr TextureResource::get(const std::string& path, bool tile) { std::shared_ptr& rm = ResourceManager::getInstance(); const std::string canonicalPath = getCanonicalPath(path); + if(canonicalPath.empty()) { - std::shared_ptr tex(new TextureResource("", tile, false)); + std::shared_ptr tex(new TextureResource("", tile)); rm->addReloadable(tex); //make sure we get properly deinitialized even though we do nothing on reinitialization return tex; } @@ -126,100 +121,58 @@ std::shared_ptr TextureResource::get(const std::string& path, b // need to create it std::shared_ptr tex; - tex = std::shared_ptr(new TextureResource(key.first, tile, dynamic)); - std::shared_ptr data = sTextureDataManager.get(tex.get()); // is it an SVG? - if(key.first.substr(key.first.size() - 4, std::string::npos) != ".svg") + if(key.first.substr(key.first.size() - 4, std::string::npos) == ".svg") { - // Probably not. Add it to our map. We don't add SVGs because 2 svgs might be rasterized at different sizes + // probably + // don't add it to our map because 2 svgs might be rasterized at different sizes + tex = std::shared_ptr(new SVGResource(key.first, tile)); + sTextureList.push_back(tex); // add it to our list though + rm->addReloadable(tex); + tex->reload(rm); + return tex; + }else{ + // normal texture + tex = std::shared_ptr(new TextureResource(key.first, tile)); sTextureMap[key] = std::weak_ptr(tex); + sTextureList.push_back(tex); + rm->addReloadable(tex); + tex->reload(ResourceManager::getInstance()); + return tex; } - - // Add it to the reloadable list - rm->addReloadable(tex); - - // Force load it if necessary. Note that it may get dumped from VRAM if we run low - if (forceLoad) - { - tex->mForceLoad = forceLoad; - data->load(); - } - - return tex; } -// For scalable source images in textures we want to set the resolution to rasterize at -void TextureResource::rasterizeAt(size_t width, size_t height) +bool TextureResource::isInitialized() const { - std::shared_ptr data; - if (mTextureData != nullptr) - data = mTextureData; - else - data = sTextureDataManager.get(this); - mSourceSize << (float)width, (float)height; - data->setSourceSize((float)width, (float)height); - if (mForceLoad || (mTextureData != nullptr)) - data->load(); + return mTextureID != 0; } -Eigen::Vector2f TextureResource::getSourceImageSize() const +size_t TextureResource::getMemUsage() const { - return mSourceSize; -} + if(!mTextureID || mTextureSize.x() == 0 || mTextureSize.y() == 0) + return 0; -bool TextureResource::isInitialized() const -{ - return true; + return mTextureSize.x() * mTextureSize.y() * 4; } size_t TextureResource::getTotalMemUsage() { size_t total = 0; - // Count up all textures that manage their own texture data - for (auto tex : sAllTextures) - { - if (tex->mTextureData != nullptr) - total += tex->mTextureData->getVRAMUsage(); - } - // Now get the committed memory from the manager - total += sTextureDataManager.getCommittedSize(); - // And the size of the loading queue - total += sTextureDataManager.getQueueSize(); - return total; -} -size_t TextureResource::getTotalTextureSize() -{ - size_t total = 0; - // Count up all textures that manage their own texture data - for (auto tex : sAllTextures) + auto it = sTextureList.begin(); + while(it != sTextureList.end()) { - if (tex->mTextureData != nullptr) - total += tex->getSize().x() * tex->getSize().y() * 4; - } - // Now get the total memory from the manager - total += sTextureDataManager.getTotalSize(); - return total; -} - -void TextureResource::unload(std::shared_ptr& rm) -{ - // Release the texture's resources - std::shared_ptr data; - if (mTextureData == nullptr) - data = sTextureDataManager.get(this); - else - data = mTextureData; + if((*it).expired()) + { + // remove expired textures from the list + it = sTextureList.erase(it); + continue; + } - data->releaseVRAM(); - data->releaseRAM(); -} + total += (*it).lock()->getMemUsage(); + it++; + } -void TextureResource::reload(std::shared_ptr& rm) -{ - // For dynamically loaded textures the texture manager will load them on demand. - // For manually loaded textures we have to reload them here - if (mTextureData) - mTextureData->load(); + return total; } diff --git a/es-core/src/resources/TextureResource.h b/es-core/src/resources/TextureResource.h index 7623e8b1c2..811e71de37 100644 --- a/es-core/src/resources/TextureResource.h +++ b/es-core/src/resources/TextureResource.h @@ -3,12 +3,8 @@ #include "resources/ResourceManager.h" #include -#include -#include #include #include "platform.h" -#include "resources/TextureData.h" -#include "resources/TextureDataManager.h" #include GLHEADER // An OpenGL texture. @@ -16,43 +12,40 @@ class TextureResource : public IReloadable { public: - static std::shared_ptr get(const std::string& path, bool tile = false, bool forceLoad = false, bool dynamic = true); - void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height); - virtual void initFromMemory(const char* file, size_t length); - - // For scalable source images in textures we want to set the resolution to rasterize at - void rasterizeAt(size_t width, size_t height); - Eigen::Vector2f getSourceImageSize() const; + static std::shared_ptr get(const std::string& path, bool tile = false); virtual ~TextureResource(); + virtual void unload(std::shared_ptr& rm) override; + virtual void reload(std::shared_ptr& rm) override; + bool isInitialized() const; bool isTiled() const; + const Eigen::Vector2i& getSize() const; + void bind() const; + + // Warning: will NOT correctly reinitialize when this texture is reloaded (e.g. ES starts/stops playing a game). + virtual void initFromMemory(const char* file, size_t length); - const Eigen::Vector2i getSize() const; - bool bind(); + // Warning: will NOT correctly reinitialize when this texture is reloaded (e.g. ES starts/stops playing a game). + void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height); + size_t getMemUsage() const; // returns an approximation of the VRAM used by this texture (in bytes) static size_t getTotalMemUsage(); // returns an approximation of total VRAM used by textures (in bytes) - static size_t getTotalTextureSize(); // returns the number of bytes that would be used if all textures were in memory protected: - TextureResource(const std::string& path, bool tile, bool dynamic); - virtual void unload(std::shared_ptr& rm); - virtual void reload(std::shared_ptr& rm); + TextureResource(const std::string& path, bool tile); + void deinit(); -private: - // mTextureData is used for textures that are not loaded from a file - these ones - // are permanently allocated and cannot be loaded and unloaded based on resources - std::shared_ptr mTextureData; - - // The texture data manager manages loading and unloading of filesystem based textures - static TextureDataManager sTextureDataManager; + Eigen::Vector2i mTextureSize; + const std::string mPath; + const bool mTile; - Eigen::Vector2i mSize; - Eigen::Vector2f mSourceSize; - bool mForceLoad; +private: + GLuint mTextureID; typedef std::pair TextureKeyType; static std::map< TextureKeyType, std::weak_ptr > sTextureMap; // map of textures, used to prevent duplicate textures - static std::set sAllTextures; // Set of all textures, used for memory management + + static std::list< std::weak_ptr > sTextureList; // list of all textures, used for memory approximations }; From 6872f472772f2d6a2ae5b3971a4434330b5b9ca3 Mon Sep 17 00:00:00 2001 From: fieldofcows Date: Sun, 22 Jan 2017 23:28:06 +0000 Subject: [PATCH 052/603] Fix WSOD by loading textures on demand in a separate thread when a user configurable texture memory threshold is reached --- es-app/src/components/RatingComponent.cpp | 12 +- es-app/src/guis/GuiMenu.cpp | 6 + es-app/src/main.cpp | 5 + es-app/src/views/SystemView.cpp | 4 +- es-app/src/views/ViewController.cpp | 4 +- es-core/CMakeLists.txt | 6 +- es-core/src/Settings.cpp | 3 +- es-core/src/Window.cpp | 9 +- es-core/src/components/ImageComponent.cpp | 69 ++++- es-core/src/components/ImageComponent.h | 7 +- es-core/src/resources/SVGResource.cpp | 101 -------- es-core/src/resources/SVGResource.h | 27 -- es-core/src/resources/TextureData.cpp | 259 +++++++++++++++++++ es-core/src/resources/TextureData.h | 63 +++++ es-core/src/resources/TextureDataManager.cpp | 226 ++++++++++++++++ es-core/src/resources/TextureDataManager.h | 86 ++++++ es-core/src/resources/TextureResource.cpp | 245 +++++++++++------- es-core/src/resources/TextureResource.h | 49 ++-- 18 files changed, 900 insertions(+), 281 deletions(-) delete mode 100644 es-core/src/resources/SVGResource.cpp delete mode 100644 es-core/src/resources/SVGResource.h create mode 100644 es-core/src/resources/TextureData.cpp create mode 100644 es-core/src/resources/TextureData.h create mode 100644 es-core/src/resources/TextureDataManager.cpp create mode 100644 es-core/src/resources/TextureDataManager.h diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index 12f39a3090..3dbc36a0a4 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -2,7 +2,6 @@ #include "Renderer.h" #include "Window.h" #include "Util.h" -#include "resources/SVGResource.h" RatingComponent::RatingComponent(Window* window) : GuiComponent(window) { @@ -45,16 +44,13 @@ void RatingComponent::onSizeChanged() else if(mSize.x() == 0) mSize[0] = mSize.y() * NUM_RATING_STARS; - auto filledSVG = dynamic_cast(mFilledTexture.get()); - auto unfilledSVG = dynamic_cast(mUnfilledTexture.get()); - if(mSize.y() > 0) { size_t heightPx = (size_t)round(mSize.y()); - if(filledSVG) - filledSVG->rasterizeAt(heightPx, heightPx); - if(unfilledSVG) - unfilledSVG->rasterizeAt(heightPx, heightPx); + if (mFilledTexture) + mFilledTexture->rasterizeAt(heightPx, heightPx); + if(mUnfilledTexture) + mUnfilledTexture->rasterizeAt(heightPx, heightPx); } updateVertices(); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 71ac7272bc..68b1a355d1 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -178,6 +178,12 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("PARSE GAMESLISTS ONLY", parse_gamelists); s->addSaveFunc([parse_gamelists] { Settings::getInstance()->setBool("ParseGamelistOnly", parse_gamelists->getState()); }); + // maximum vram + auto max_vram = std::make_shared(mWindow, 0.f, 1000.f, 10.f, "Mb"); + max_vram->setValue((float)(Settings::getInstance()->getInt("MaxVRAM"))); + s->addWithLabel("VRAM LIMIT", max_vram); + s->addSaveFunc([max_vram] { Settings::getInstance()->setInt("MaxVRAM", (int)round(max_vram->getValue())); }); + mWindow->pushGui(s); }); diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 6753b9ae31..c3d030ec4b 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -74,6 +74,10 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height }else if(strcmp(argv[i], "--scrape") == 0) { scrape_cmdline = true; + }else if(strcmp(argv[i], "--max-vram") == 0) + { + int maxVRAM = atoi(argv[i + 1]); + Settings::getInstance()->setInt("MaxVRAM", maxVRAM); }else if(strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { #ifdef WIN32 @@ -99,6 +103,7 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height "--scrape scrape using command line interface\n" "--windowed not fullscreen, should be used with --resolution\n" "--vsync [1/on or 0/off] turn vsync on or off (default is on)\n" + "--max-vram [size] Max VRAM to use in Mb before swapping. 0 for unlimited\n" "--help, -h summon a sentient, angry tuba\n\n" "More information available in README.md.\n"; return false; //exit after printing help diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 013490aca9..c760125b97 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -43,13 +43,13 @@ void SystemView::populate() // make logo if(theme->getElement("system", "logo", "image")) { - ImageComponent* logo = new ImageComponent(mWindow); + ImageComponent* logo = new ImageComponent(mWindow, false, false); logo->setMaxSize(Eigen::Vector2f(logoSize().x(), logoSize().y())); logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, (logoSize().y() - logo->getSize().y()) / 2); // center e.data.logo = std::shared_ptr(logo); - ImageComponent* logoSelected = new ImageComponent(mWindow); + ImageComponent* logoSelected = new ImageComponent(mWindow, false, false); logoSelected->setMaxSize(Eigen::Vector2f(logoSize().x() * SELECTED_SCALE, logoSize().y() * SELECTED_SCALE * 0.70f)); logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logoSelected->setPosition((logoSize().x() - logoSelected->getSize().x()) / 2, diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 1e10c91753..d9093e8e10 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -406,7 +406,9 @@ void ViewController::reloadAll() mCurrentView = getGameListView(mState.getSystem()); }else if(mState.viewing == SYSTEM_SELECT) { - mSystemListView->goToSystem(mState.getSystem(), false); + SystemData* system = mState.getSystem(); + goToSystemView(SystemData::sSystemVector.front()); + mSystemListView->goToSystem(system, false); mCurrentView = mSystemListView; }else{ goToSystemView(SystemData::sSystemVector.front()); diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index cf0cfb3ea3..f05aec77c3 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -53,8 +53,9 @@ set(CORE_HEADERS # Resources ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.h # Embedded assets (needed by ResourceManager) ${emulationstation-all_SOURCE_DIR}/data/Resources.h @@ -108,8 +109,9 @@ set(CORE_SOURCES # Resources ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/SVGResource.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.cpp ) set(EMBEDDED_ASSET_SOURCES diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 337dcaac13..df90ba7b65 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -69,6 +69,7 @@ void Settings::setDefaults() mIntMap["ScreenSaverTime"] = 5*60*1000; // 5 minutes mIntMap["ScraperResizeWidth"] = 400; mIntMap["ScraperResizeHeight"] = 0; + mIntMap["MaxVRAM"] = 100; mStringMap["TransitionStyle"] = "fade"; mStringMap["ThemeSet"] = ""; @@ -154,4 +155,4 @@ void Settings::setMethodName(const std::string& name, type value) \ SETTINGS_GETSET(bool, mBoolMap, getBool, setBool); SETTINGS_GETSET(int, mIntMap, getInt, setInt); SETTINGS_GETSET(float, mFloatMap, getFloat, setFloat); -SETTINGS_GETSET(const std::string&, mStringMap, getString, setString); \ No newline at end of file +SETTINGS_GETSET(const std::string&, mStringMap, getString, setString); diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 761df4abc4..e402162c3d 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -160,11 +160,12 @@ void Window::update(int deltaTime) ss << std::fixed << std::setprecision(2) << ((float)mFrameTimeElapsed / (float)mFrameCountElapsed) << "ms"; // vram - float textureVramUsageMb = TextureResource::getTotalMemUsage() / 1000.0f / 1000.0f;; + float textureVramUsageMb = TextureResource::getTotalMemUsage() / 1000.0f / 1000.0f; + float textureTotalUsageMb = TextureResource::getTotalTextureSize() / 1000.0f / 1000.0f; float fontVramUsageMb = Font::getTotalMemUsage() / 1000.0f / 1000.0f;; - float totalVramUsageMb = textureVramUsageMb + fontVramUsageMb; - ss << "\nVRAM: " << totalVramUsageMb << "mb (texs: " << textureVramUsageMb << "mb, fonts: " << fontVramUsageMb << "mb)"; + ss << "\nFont VRAM: " << fontVramUsageMb << " Tex VRAM: " << textureVramUsageMb << + " Tex Max: " << textureTotalUsageMb; mFrameDataText = std::unique_ptr(mDefaultFonts.at(1)->buildTextCache(ss.str(), 50.f, 50.f, 0xFF00FFFF)); } @@ -242,7 +243,7 @@ void Window::renderLoadingScreen() Renderer::setMatrix(trans); Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0xFFFFFFFF); - ImageComponent splash(this); + ImageComponent splash(this, true); splash.setResize(Renderer::getScreenWidth() * 0.6f, 0.0f); splash.setImage(":/splash.svg"); splash.setPosition((Renderer::getScreenWidth() - splash.getSize().x()) / 2, (Renderer::getScreenHeight() - splash.getSize().y()) / 2 * 0.6f); diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 2898c6f732..0705e0c28f 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -6,7 +6,6 @@ #include "Renderer.h" #include "ThemeData.h" #include "Util.h" -#include "resources/SVGResource.h" Eigen::Vector2i ImageComponent::getTextureSize() const { @@ -22,8 +21,9 @@ Eigen::Vector2f ImageComponent::getCenter() const mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); } -ImageComponent::ImageComponent(Window* window) : GuiComponent(window), - mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF) +ImageComponent::ImageComponent(Window* window, bool forceLoad, bool dynamic) : GuiComponent(window), + mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF), + mForceLoad(forceLoad), mDynamic(dynamic), mFadeOpacity(0.0f), mFading(false) { updateColors(); } @@ -37,9 +37,7 @@ void ImageComponent::resize() if(!mTexture) return; - SVGResource* svg = dynamic_cast(mTexture.get()); - - const Eigen::Vector2f textureSize = svg ? svg->getSourceImageSize() : Eigen::Vector2f((float)mTexture->getSize().x(), (float)mTexture->getSize().y()); + const Eigen::Vector2f textureSize = mTexture->getSourceImageSize(); if(textureSize.isZero()) return; @@ -90,12 +88,8 @@ void ImageComponent::resize() } } } - - if(svg) - { - // mSize.y() should already be rounded - svg->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); - } + // mSize.y() should already be rounded + mTexture->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); onSizeChanged(); } @@ -110,7 +104,7 @@ void ImageComponent::setImage(std::string path, bool tile) if(path.empty() || !ResourceManager::getInstance()->fileExists(path)) mTexture.reset(); else - mTexture = TextureResource::get(path, tile); + mTexture = TextureResource::get(path, tile, mForceLoad, mDynamic); resize(); } @@ -166,6 +160,9 @@ void ImageComponent::setFlipY(bool flip) void ImageComponent::setColorShift(unsigned int color) { mColorShift = color; + // Grab the opacity from the color shift because we may need to apply it if + // fading textures in + mOpacity = color & 0xff; updateColors(); } @@ -247,7 +244,10 @@ void ImageComponent::render(const Eigen::Affine3f& parentTrans) if(mTexture->isInitialized()) { // actually draw the image - mTexture->bind(); + // The bind() function returns false if the texture is not currently loaded. A blank + // texture is bound in this case but we want to handle a fade so it doesn't just 'jump' in + // when it finally loads + fadeIn(mTexture->bind()); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); @@ -278,6 +278,47 @@ void ImageComponent::render(const Eigen::Affine3f& parentTrans) GuiComponent::renderChildren(trans); } +void ImageComponent::fadeIn(bool textureLoaded) +{ + if (!mForceLoad) + { + if (!textureLoaded) + { + // Start the fade if this is the first time we've encountered the unloaded texture + if (!mFading) + { + // Start with a zero opacity and flag it as fading + mFadeOpacity = 0; + mFading = true; + // Set the colours to be translucent + mColorShift = (mColorShift >> 8 << 8) | 0; + updateColors(); + } + } + else if (mFading) + { + // The texture is loaded and we need to fade it in. The fade is based on the frame rate + // and is 1/4 second if running at 60 frames per second although the actual value is not + // that important + int opacity = mFadeOpacity + 255 / 15; + // See if we've finished fading + if (opacity >= 255) + { + mFadeOpacity = 255; + mFading = false; + } + else + { + mFadeOpacity = (unsigned char)opacity; + } + // Apply the combination of the target opacity and current fade + float newOpacity = (float)mOpacity * ((float)mFadeOpacity / 255.0f); + mColorShift = (mColorShift >> 8 << 8) | (unsigned char)newOpacity; + updateColors(); + } + } +} + bool ImageComponent::hasImage() { return (bool)mTexture; diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 939c6c7cd2..3ff1ffbb27 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -12,7 +12,7 @@ class ImageComponent : public GuiComponent { public: - ImageComponent(Window* window); + ImageComponent(Window* window, bool forceLoad = false, bool dynamic = true); virtual ~ImageComponent(); //Loads the image at the given filepath. Will tile if tile is true (retrieves texture as tiling, creates vertices accordingly). @@ -81,10 +81,15 @@ class ImageComponent : public GuiComponent void updateVertices(); void updateColors(); + void fadeIn(bool textureLoaded); unsigned int mColorShift; std::shared_ptr mTexture; + unsigned char mFadeOpacity; + bool mFading; + bool mForceLoad; + bool mDynamic; }; #endif diff --git a/es-core/src/resources/SVGResource.cpp b/es-core/src/resources/SVGResource.cpp deleted file mode 100644 index 1a4ea16fca..0000000000 --- a/es-core/src/resources/SVGResource.cpp +++ /dev/null @@ -1,101 +0,0 @@ -#include "SVGResource.h" -#include "nanosvg/nanosvg.h" -#include "nanosvg/nanosvgrast.h" -#include "Log.h" -#include "Util.h" -#include "ImageIO.h" - -#define DPI 96 - -SVGResource::SVGResource(const std::string& path, bool tile) : TextureResource(path, tile), mSVGImage(NULL) -{ - mLastWidth = 0; - mLastHeight = 0; -} - -SVGResource::~SVGResource() -{ - deinitSVG(); -} - -void SVGResource::unload(std::shared_ptr& rm) -{ - deinitSVG(); - TextureResource::unload(rm); -} - -void SVGResource::initFromMemory(const char* file, size_t length) -{ - deinit(); - deinitSVG(); - - // nsvgParse excepts a modifiable, null-terminated string - char* copy = (char*)malloc(length + 1); - assert(copy != NULL); - memcpy(copy, file, length); - copy[length] = '\0'; - - mSVGImage = nsvgParse(copy, "px", DPI); - free(copy); - - if(!mSVGImage) - { - LOG(LogError) << "Error parsing SVG image."; - return; - } - - if(mLastWidth && mLastHeight) - rasterizeAt(mLastWidth, mLastHeight); - else - rasterizeAt((size_t)round(mSVGImage->width), (size_t)round(mSVGImage->height)); -} - -void SVGResource::rasterizeAt(size_t width, size_t height) -{ - if(!mSVGImage || (width == 0 && height == 0)) - return; - - if(width == 0) - { - // auto scale width to keep aspect - width = (size_t)round((height / mSVGImage->height) * mSVGImage->width); - }else if(height == 0) - { - // auto scale height to keep aspect - height = (size_t)round((width / mSVGImage->width) * mSVGImage->height); - } - - if(width != (size_t)round(mSVGImage->width) && height != (size_t)round(mSVGImage->height)) - { - mLastWidth = width; - mLastHeight = height; - } - - unsigned char* imagePx = (unsigned char*)malloc(width * height * 4); - assert(imagePx != NULL); - - NSVGrasterizer* rast = nsvgCreateRasterizer(); - nsvgRasterize(rast, mSVGImage, 0, 0, height / mSVGImage->height, imagePx, width, height, width * 4); - nsvgDeleteRasterizer(rast); - - ImageIO::flipPixelsVert(imagePx, width, height); - - initFromPixels(imagePx, width, height); - free(imagePx); -} - -Eigen::Vector2f SVGResource::getSourceImageSize() const -{ - if(mSVGImage) - return Eigen::Vector2f(mSVGImage->width, mSVGImage->height); - - return Eigen::Vector2f::Zero(); -} - -void SVGResource::deinitSVG() -{ - if(mSVGImage) - nsvgDelete(mSVGImage); - - mSVGImage = NULL; -} diff --git a/es-core/src/resources/SVGResource.h b/es-core/src/resources/SVGResource.h deleted file mode 100644 index 87479c0cf1..0000000000 --- a/es-core/src/resources/SVGResource.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include "resources/TextureResource.h" - -struct NSVGimage; - -class SVGResource : public TextureResource -{ -public: - virtual ~SVGResource(); - - virtual void unload(std::shared_ptr& rm) override; - - virtual void initFromMemory(const char* image, size_t length) override; - - void rasterizeAt(size_t width, size_t height); - Eigen::Vector2f getSourceImageSize() const; - -protected: - friend TextureResource; - SVGResource(const std::string& path, bool tile); - void deinitSVG(); - - NSVGimage* mSVGImage; - size_t mLastWidth; - size_t mLastHeight; -}; diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp new file mode 100644 index 0000000000..15a3da116e --- /dev/null +++ b/es-core/src/resources/TextureData.cpp @@ -0,0 +1,259 @@ +#include "resources/TextureData.h" +#include "resources/ResourceManager.h" +#include "Log.h" +#include "ImageIO.h" +#include "string.h" +#include "Util.h" +#include "nanosvg/nanosvg.h" +#include "nanosvg/nanosvgrast.h" +#include + +#define DPI 96 + +TextureData::TextureData(bool tile) : mTile(tile), mTextureID(0), mDataRGBA(nullptr), mScalable(false), + mWidth(0), mHeight(0), mSourceWidth(0.0f), mSourceHeight(0.0f) +{ +} + +TextureData::~TextureData() +{ + releaseVRAM(); + releaseRAM(); +} + +void TextureData::initFromPath(const std::string& path) +{ + // Just set the path. It will be loaded later + mPath = path; + // Only textures with paths are reloadable + mReloadable = true; +} + +bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length) +{ + // If already initialised then don't read again + { + std::unique_lock lock(mMutex); + if (mDataRGBA) + return true; + } + + // nsvgParse excepts a modifiable, null-terminated string + char* copy = (char*)malloc(length + 1); + assert(copy != NULL); + memcpy(copy, fileData, length); + copy[length] = '\0'; + + NSVGimage* svgImage = nsvgParse(copy, "px", DPI); + free(copy); + if (!svgImage) + { + LOG(LogError) << "Error parsing SVG image."; + return false; + } + + // We want to rasterise this texture at a specific resolution. If the source size + // variables are set then use them otherwise set them from the parsed file + if ((mSourceWidth == 0.0f) && (mSourceHeight == 0.0f)) + { + mSourceWidth = svgImage->width; + mSourceHeight = svgImage->height; + } + mWidth = (size_t)round(mSourceWidth); + mHeight = (size_t)round(mSourceHeight); + + if (mWidth == 0) + { + // auto scale width to keep aspect + mWidth = (size_t)round(((float)mHeight / svgImage->height) * svgImage->width); + } + else if (mHeight == 0) + { + // auto scale height to keep aspect + mHeight = (size_t)round(((float)mWidth / svgImage->width) * svgImage->height); + } + + unsigned char* dataRGBA = new unsigned char[mWidth * mHeight * 4]; + + NSVGrasterizer* rast = nsvgCreateRasterizer(); + nsvgRasterize(rast, svgImage, 0, 0, mHeight / svgImage->height, dataRGBA, mWidth, mHeight, mWidth * 4); + nsvgDeleteRasterizer(rast); + + ImageIO::flipPixelsVert(dataRGBA, mWidth, mHeight); + + std::unique_lock lock(mMutex); + mDataRGBA = dataRGBA; + + return true; +} + +bool TextureData::initImageFromMemory(const unsigned char* fileData, size_t length) +{ + size_t width, height; + + // If already initialised then don't read again + { + std::unique_lock lock(mMutex); + if (mDataRGBA) + return true; + } + + std::vector imageRGBA = ImageIO::loadFromMemoryRGBA32((const unsigned char*)(fileData), length, width, height); + if (imageRGBA.size() == 0) + { + LOG(LogError) << "Could not initialize texture from memory, invalid data! (file path: " << mPath << ", data ptr: " << (size_t)fileData << ", reported size: " << length << ")"; + return false; + } + + mSourceWidth = width; + mSourceHeight = height; + mScalable = false; + + return initFromRGBA(imageRGBA.data(), width, height); +} + +bool TextureData::initFromRGBA(const unsigned char* dataRGBA, size_t width, size_t height) +{ + // If already initialised then don't read again + std::unique_lock lock(mMutex); + if (mDataRGBA) + return true; + + // Take a copy + mDataRGBA = new unsigned char[width * height * 4]; + memcpy(mDataRGBA, dataRGBA, width * height * 4); + mWidth = width; + mHeight = height; + return true; +} + +bool TextureData::load() +{ + bool retval = false; + + // Need to load. See if there is a file + if (!mPath.empty()) + { + std::shared_ptr& rm = ResourceManager::getInstance(); + const ResourceData& data = rm->getFileData(mPath); + // is it an SVG? + if (mPath.substr(mPath.size() - 4, std::string::npos) == ".svg") + { + mScalable = true; + retval = initSVGFromMemory((const unsigned char*)data.ptr.get(), data.length); + } + else + retval = initImageFromMemory((const unsigned char*)data.ptr.get(), data.length); + } + return retval; +} + +bool TextureData::isLoaded() +{ + std::unique_lock lock(mMutex); + if (mDataRGBA || (mTextureID != 0)) + return true; + return false; +} + +bool TextureData::uploadAndBind() +{ + // See if it's already been uploaded + std::unique_lock lock(mMutex); + if (mTextureID != 0) + { + glBindTexture(GL_TEXTURE_2D, mTextureID); + } + else + { + // Load it if necessary + if (!mDataRGBA) + { + return false; + } + // Make sure we're ready to upload + if ((mWidth == 0) || (mHeight == 0) || (mDataRGBA == nullptr)) + return false; + glGetError(); + //now for the openGL texture stuff + glGenTextures(1, &mTextureID); + glBindTexture(GL_TEXTURE_2D, mTextureID); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mWidth, mHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, mDataRGBA); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + const GLint wrapMode = mTile ? GL_REPEAT : GL_CLAMP_TO_EDGE; + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); + } + return true; +} + +void TextureData::releaseVRAM() +{ + std::unique_lock lock(mMutex); + if (mTextureID != 0) + { + glDeleteTextures(1, &mTextureID); + mTextureID = 0; + } +} + +void TextureData::releaseRAM() +{ + std::unique_lock lock(mMutex); + delete[] mDataRGBA; + mDataRGBA = 0; +} + +size_t TextureData::width() +{ + if (mWidth == 0) + load(); + return mWidth; +} + +size_t TextureData::height() +{ + if (mHeight == 0) + load(); + return mHeight; +} + +float TextureData::sourceWidth() +{ + if (mSourceWidth == 0) + load(); + return mSourceWidth; +} + +float TextureData::sourceHeight() +{ + if (mSourceHeight == 0) + load(); + return mSourceHeight; +} + +void TextureData::setSourceSize(float width, float height) +{ + if (mScalable) + { + if ((mSourceWidth != width) || (mSourceHeight != height)) + { + mSourceWidth = width; + mSourceHeight = height; + releaseVRAM(); + releaseRAM(); + } + } +} + +size_t TextureData::getVRAMUsage() +{ + if ((mTextureID != 0) || (mDataRGBA != nullptr)) + return mWidth * mHeight * 4; + else + return 0; +} diff --git a/es-core/src/resources/TextureData.h b/es-core/src/resources/TextureData.h new file mode 100644 index 0000000000..76ca6a0b4d --- /dev/null +++ b/es-core/src/resources/TextureData.h @@ -0,0 +1,63 @@ +#pragma once + +#include +#include +#include "platform.h" +#include +#include GLHEADER + +class TextureResource; + +class TextureData +{ +public: + TextureData(bool tile); + ~TextureData(); + + // These functions populate mDataRGBA but do not upload the texture to VRAM + + //!!!! Needs to be canonical path. Caller should check for duplicates before calling this + void initFromPath(const std::string& path); + bool initSVGFromMemory(const unsigned char* fileData, size_t length); + bool initImageFromMemory(const unsigned char* fileData, size_t length); + bool initFromRGBA(const unsigned char* dataRGBA, size_t width, size_t height); + + // Read the data into memory if necessary + bool load(); + + bool isLoaded(); + + // Upload the texture to VRAM if necessary and bind. Returns true if bound ok or + // false if either not loaded + bool uploadAndBind(); + + // Release the texture from VRAM + void releaseVRAM(); + + // Release the texture from conventional RAM + void releaseRAM(); + + // Get the amount of VRAM currenty used by this texture + size_t getVRAMUsage(); + + size_t width(); + size_t height(); + float sourceWidth(); + float sourceHeight(); + void setSourceSize(float width, float height); + + bool tiled() { return mTile; } + +private: + std::mutex mMutex; + bool mTile; + std::string mPath; + GLuint mTextureID; + unsigned char* mDataRGBA; + size_t mWidth; + size_t mHeight; + float mSourceWidth; + float mSourceHeight; + bool mScalable; + bool mReloadable; +}; diff --git a/es-core/src/resources/TextureDataManager.cpp b/es-core/src/resources/TextureDataManager.cpp new file mode 100644 index 0000000000..55720d14ac --- /dev/null +++ b/es-core/src/resources/TextureDataManager.cpp @@ -0,0 +1,226 @@ +#include "resources/TextureDataManager.h" +#include "resources/TextureResource.h" +#include "Settings.h" + +TextureDataManager::TextureDataManager() +{ + unsigned char data[5 * 5 * 4]; + mBlank = std::shared_ptr(new TextureData(false)); + for (int i = 0; i < (5 * 5); ++i) + { + data[i*4] = (i % 2) * 255; + data[i*4+1] = (i % 2) * 255; + data[i*4+2] = (i % 2) * 255; + data[i*4+3] = 0; + } + mBlank->initFromRGBA(data, 5, 5); + mLoader = new TextureLoader; +} + +TextureDataManager::~TextureDataManager() +{ + delete mLoader; +} + +std::shared_ptr TextureDataManager::add(const TextureResource* key, bool tiled) +{ + remove(key); + std::shared_ptr data(new TextureData(tiled)); + mTextures.push_front(data); + mTextureLookup[key] = mTextures.begin(); + return data; +} + +void TextureDataManager::remove(const TextureResource* key) +{ + // Find the entry in the list + auto it = mTextureLookup.find(key); + if (it != mTextureLookup.end()) + { + // Remove the list entry + mTextures.erase((*it).second); + // And the lookup + mTextureLookup.erase(it); + } +} + +std::shared_ptr TextureDataManager::get(const TextureResource* key) +{ + // If it's in the cache then we want to remove it from it's current location and + // move it to the top + std::shared_ptr tex; + auto it = mTextureLookup.find(key); + if (it != mTextureLookup.end()) + { + tex = *(*it).second; + // Remove the list entry + mTextures.erase((*it).second); + // Put it at the top + mTextures.push_front(tex); + // Store it back in the lookup + mTextureLookup[key] = mTextures.begin(); + + // Make sure it's loaded or queued for loading + load(tex); + } + return tex; +} + +bool TextureDataManager::bind(const TextureResource* key) +{ + std::shared_ptr tex = get(key); + bool bound = false; + if (tex != nullptr) + bound = tex->uploadAndBind(); + if (!bound) + mBlank->uploadAndBind(); + return bound; +} + +size_t TextureDataManager::getTotalSize() +{ + size_t total = 0; + for (auto tex : mTextures) + total += tex->width() * tex->height() * 4; + return total; +} + +size_t TextureDataManager::getCommittedSize() +{ + size_t total = 0; + for (auto tex : mTextures) + total += tex->getVRAMUsage(); + return total; +} + +size_t TextureDataManager::getQueueSize() +{ + return mLoader->getQueueSize(); +} + +void TextureDataManager::load(std::shared_ptr tex, bool block) +{ + // See if it's already loaded + if (tex->isLoaded()) + return; + // Not loaded. Make sure there is room + size_t size = TextureResource::getTotalMemUsage(); + size_t max_texture = (size_t)Settings::getInstance()->getInt("MaxVRAM") * 1024 * 1024; + + size_t in = size; + + for (auto it = mTextures.rbegin(); it != mTextures.rend(); ++it) + { + if (size < max_texture) + break; + //size -= (*it)->getVRAMUsage(); + (*it)->releaseVRAM(); + (*it)->releaseRAM(); + // It may be already in the loader queue. In this case it wouldn't have been using + // any VRAM yet but it will be. Remove it from the loader queue + mLoader->remove(*it); + size = TextureResource::getTotalMemUsage(); + } + if (!block) + mLoader->load(tex); + else + tex->load(); +} + +TextureLoader::TextureLoader() : mExit(false) +{ + mThread = new std::thread(&TextureLoader::threadProc, this); +} + +TextureLoader::~TextureLoader() +{ + // Just abort any waiting texture + mTextureDataQ.clear(); + mTextureDataLookup.clear(); + + // Exit the thread + mExit = true; + mEvent.notify_one(); + mThread->join(); + delete mThread; +} + +void TextureLoader::threadProc() +{ + while (!mExit) + { + std::shared_ptr textureData; + { + // Wait for an event to say there is something in the queue + std::unique_lock lock(mMutex); + mEvent.wait(lock); + if (!mTextureDataQ.empty()) + { + textureData = mTextureDataQ.front(); + mTextureDataQ.pop_front(); + mTextureDataLookup.erase(mTextureDataLookup.find(textureData.get())); + } + } + // Queue has been released here but we might have a texture to process + while (textureData) + { + textureData->load(); + + // See if there is another item in the queue + textureData = nullptr; + std::unique_lock lock(mMutex); + if (!mTextureDataQ.empty()) + { + textureData = mTextureDataQ.front(); + mTextureDataQ.pop_front(); + mTextureDataLookup.erase(mTextureDataLookup.find(textureData.get())); + } + } + } +} + +void TextureLoader::load(std::shared_ptr textureData) +{ + // Make sure it's not already loaded + if (!textureData->isLoaded()) + { + std::unique_lock lock(mMutex); + // Remove it from the queue if it is already there + auto td = mTextureDataLookup.find(textureData.get()); + if (td != mTextureDataLookup.end()) + { + mTextureDataQ.erase((*td).second); + mTextureDataLookup.erase(td); + } + + // Put it on the start of the queue as we want the newly requested textures to load first + mTextureDataQ.push_front(textureData); + mTextureDataLookup[textureData.get()] = mTextureDataQ.begin(); + mEvent.notify_one(); + } +} + +void TextureLoader::remove(std::shared_ptr textureData) +{ + // Just remove it from the queue so we don't attempt to load it + std::unique_lock lock(mMutex); + auto td = mTextureDataLookup.find(textureData.get()); + if (td != mTextureDataLookup.end()) + { + mTextureDataQ.erase((*td).second); + mTextureDataLookup.erase(td); + } +} + +size_t TextureLoader::getQueueSize() +{ + // Gets the amount of video memory that will be used once all textures in + // the queue are loaded + size_t mem = 0; + std::unique_lock lock(mMutex); + for (auto tex : mTextureDataQ) + { + mem += tex->width() * tex->height() * 4; + } + return mem; +} diff --git a/es-core/src/resources/TextureDataManager.h b/es-core/src/resources/TextureDataManager.h new file mode 100644 index 0000000000..414804aba9 --- /dev/null +++ b/es-core/src/resources/TextureDataManager.h @@ -0,0 +1,86 @@ +#pragma once + +#include "resources/ResourceManager.h" +#include "platform.h" +#include "resources/TextureData.h" +#include +#include +#include +#include +#include +#include + +class TextureResource; + +class TextureLoader +{ +public: + TextureLoader(); + ~TextureLoader(); + + void load(std::shared_ptr textureData); + void remove(std::shared_ptr textureData); + + size_t getQueueSize(); + +private: + void processQueue(); + void threadProc(); + + std::list > mTextureDataQ; + std::map >::iterator > mTextureDataLookup; + + std::thread* mThread; + std::mutex mMutex; + std::condition_variable mEvent; + bool mExit; +}; + +// +// This class manages the loading and unloading of textures +// +// When textures are added, the texture data is just stored as-is. The texture +// data should only have been constructed and not loaded for this to work correctly. +// When the get() function is called it indicates that a texture wants to be used so +// at this point the texture data is loaded (via a call to load()). +// +// Once the load is complete (which may not be on the first call to get() if the +// data is loaded in a background thread) then the get() function call uploadAndBind() +// to upload to VRAM if necessary and bind the texture. This is followed by a call +// to releaseRAM() which frees the memory buffer if the texture can be reloaded from +// disk if needed again +// +class TextureDataManager +{ +public: + TextureDataManager(); + ~TextureDataManager(); + + std::shared_ptr add(const TextureResource* key, bool tiled); + + // The texturedata being removed may be loading in a different thread. However it will + // be referenced by a smart point so we only need to remove it from our array and it + // will be deleted when the other thread has finished with it + void remove(const TextureResource* key); + + std::shared_ptr get(const TextureResource* key); + bool bind(const TextureResource* key); + + // Get the total size of all textures managed by this object, loaded and unloaded in bytes + size_t getTotalSize(); + // Get the total size of all committed textures (in VRAM) in bytes + size_t getCommittedSize(); + // Get the total size of all load-pending textures in the queue - these will + // be committed to VRAM as the queue is processed + size_t getQueueSize(); + // Load a texture, freeing resources as necessary to make space + void load(std::shared_ptr tex, bool block = false); + +private: + + std::list > mTextures; + std::map >::iterator > mTextureLookup; + std::shared_ptr mBlank; + TextureLoader* mLoader; +}; + diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index e6657dcc20..6400d74b9b 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -5,108 +5,113 @@ #include "ImageIO.h" #include "Renderer.h" #include "Util.h" -#include "resources/SVGResource.h" +#include "Settings.h" +TextureDataManager TextureResource::sTextureDataManager; std::map< TextureResource::TextureKeyType, std::weak_ptr > TextureResource::sTextureMap; -std::list< std::weak_ptr > TextureResource::sTextureList; +std::set TextureResource::sAllTextures; -TextureResource::TextureResource(const std::string& path, bool tile) : - mTextureID(0), mPath(path), mTextureSize(Eigen::Vector2i::Zero()), mTile(tile) +TextureResource::TextureResource(const std::string& path, bool tile, bool dynamic) : mTextureData(nullptr), mForceLoad(false) { -} - -TextureResource::~TextureResource() -{ - deinit(); -} - -void TextureResource::unload(std::shared_ptr& rm) -{ - deinit(); -} + // Create a texture data object for this texture + if (!path.empty()) + { + // If there is a path then the 'dynamic' flag tells us whether to use the texture + // data manager to manage loading/unloading of this texture + std::shared_ptr data; + if (dynamic) + { + data = sTextureDataManager.add(this, tile); + data->initFromPath(path); + // Force the texture manager to load it using a blocking load + sTextureDataManager.load(data, true); + } + else + { + mTextureData = std::shared_ptr(new TextureData(tile)); + data = mTextureData; + data->initFromPath(path); + // Load it so we can read the width/height + data->load(); + } -void TextureResource::reload(std::shared_ptr& rm) -{ - if(!mPath.empty()) + mSize << data->width(), data->height(); + mSourceSize << data->sourceWidth(), data->sourceHeight(); + } + else { - const ResourceData& data = rm->getFileData(mPath); - initFromMemory((const char*)data.ptr.get(), data.length); + // Create a texture managed by this class because it cannot be dynamically loaded and unloaded + mTextureData = std::shared_ptr(new TextureData(tile)); } + sAllTextures.insert(this); } -void TextureResource::initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height) +TextureResource::~TextureResource() { - deinit(); - - assert(width > 0 && height > 0); - - //now for the openGL texture stuff - glGenTextures(1, &mTextureID); - glBindTexture(GL_TEXTURE_2D, mTextureID); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, dataRGBA); + if (mTextureData == nullptr) + sTextureDataManager.remove(this); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - const GLint wrapMode = mTile ? GL_REPEAT : GL_CLAMP_TO_EDGE; - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); - - mTextureSize << width, height; + sAllTextures.erase(sAllTextures.find(this)); } -void TextureResource::initFromMemory(const char* data, size_t length) +void TextureResource::initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height) { - size_t width, height; - std::vector imageRGBA = ImageIO::loadFromMemoryRGBA32((const unsigned char*)(data), length, width, height); - - if(imageRGBA.size() == 0) - { - LOG(LogError) << "Could not initialize texture from memory, invalid data! (file path: " << mPath << ", data ptr: " << (size_t)data << ", reported size: " << length << ")"; - return; - } - - initFromPixels(imageRGBA.data(), width, height); + // This is only valid if we have a local texture data object + assert(mTextureData != nullptr); + mTextureData->releaseVRAM(); + mTextureData->releaseRAM(); + mTextureData->initFromRGBA(dataRGBA, width, height); + // Cache the image dimensions + mSize << width, height; + mSourceSize << mTextureData->sourceWidth(), mTextureData->sourceHeight(); } -void TextureResource::deinit() +void TextureResource::initFromMemory(const char* data, size_t length) { - if(mTextureID != 0) - { - glDeleteTextures(1, &mTextureID); - mTextureID = 0; - } + // This is only valid if we have a local texture data object + assert(mTextureData != nullptr); + mTextureData->releaseVRAM(); + mTextureData->releaseRAM(); + mTextureData->initImageFromMemory((const unsigned char*)data, length); + // Get the size from the texture data + mSize << mTextureData->width(), mTextureData->height(); + mSourceSize << mTextureData->sourceWidth(), mTextureData->sourceHeight(); } -const Eigen::Vector2i& TextureResource::getSize() const +const Eigen::Vector2i TextureResource::getSize() const { - return mTextureSize; + return mSize; } bool TextureResource::isTiled() const { - return mTile; + if (mTextureData != nullptr) + return mTextureData->tiled(); + std::shared_ptr data = sTextureDataManager.get(this); + return data->tiled(); } -void TextureResource::bind() const +bool TextureResource::bind() { - if(mTextureID != 0) - glBindTexture(GL_TEXTURE_2D, mTextureID); + if (mTextureData != nullptr) + { + mTextureData->uploadAndBind(); + return true; + } else - LOG(LogError) << "Tried to bind uninitialized texture!"; + { + return sTextureDataManager.bind(this); + } } - -std::shared_ptr TextureResource::get(const std::string& path, bool tile) +std::shared_ptr TextureResource::get(const std::string& path, bool tile, bool forceLoad, bool dynamic) { std::shared_ptr& rm = ResourceManager::getInstance(); const std::string canonicalPath = getCanonicalPath(path); - if(canonicalPath.empty()) { - std::shared_ptr tex(new TextureResource("", tile)); + std::shared_ptr tex(new TextureResource("", tile, false)); rm->addReloadable(tex); //make sure we get properly deinitialized even though we do nothing on reinitialization return tex; } @@ -121,58 +126,100 @@ std::shared_ptr TextureResource::get(const std::string& path, b // need to create it std::shared_ptr tex; + tex = std::shared_ptr(new TextureResource(key.first, tile, dynamic)); + std::shared_ptr data = sTextureDataManager.get(tex.get()); // is it an SVG? - if(key.first.substr(key.first.size() - 4, std::string::npos) == ".svg") + if(key.first.substr(key.first.size() - 4, std::string::npos) != ".svg") { - // probably - // don't add it to our map because 2 svgs might be rasterized at different sizes - tex = std::shared_ptr(new SVGResource(key.first, tile)); - sTextureList.push_back(tex); // add it to our list though - rm->addReloadable(tex); - tex->reload(rm); - return tex; - }else{ - // normal texture - tex = std::shared_ptr(new TextureResource(key.first, tile)); + // Probably not. Add it to our map. We don't add SVGs because 2 svgs might be rasterized at different sizes sTextureMap[key] = std::weak_ptr(tex); - sTextureList.push_back(tex); - rm->addReloadable(tex); - tex->reload(ResourceManager::getInstance()); - return tex; } + + // Add it to the reloadable list + rm->addReloadable(tex); + + // Force load it if necessary. Note that it may get dumped from VRAM if we run low + if (forceLoad) + { + tex->mForceLoad = forceLoad; + data->load(); + } + + return tex; } -bool TextureResource::isInitialized() const +// For scalable source images in textures we want to set the resolution to rasterize at +void TextureResource::rasterizeAt(size_t width, size_t height) { - return mTextureID != 0; + std::shared_ptr data; + if (mTextureData != nullptr) + data = mTextureData; + else + data = sTextureDataManager.get(this); + mSourceSize << (float)width, (float)height; + data->setSourceSize((float)width, (float)height); + if (mForceLoad || (mTextureData != nullptr)) + data->load(); } -size_t TextureResource::getMemUsage() const +Eigen::Vector2f TextureResource::getSourceImageSize() const { - if(!mTextureID || mTextureSize.x() == 0 || mTextureSize.y() == 0) - return 0; + return mSourceSize; +} - return mTextureSize.x() * mTextureSize.y() * 4; +bool TextureResource::isInitialized() const +{ + return true; } size_t TextureResource::getTotalMemUsage() { size_t total = 0; - - auto it = sTextureList.begin(); - while(it != sTextureList.end()) + // Count up all textures that manage their own texture data + for (auto tex : sAllTextures) { - if((*it).expired()) - { - // remove expired textures from the list - it = sTextureList.erase(it); - continue; - } - - total += (*it).lock()->getMemUsage(); - it++; + if (tex->mTextureData != nullptr) + total += tex->mTextureData->getVRAMUsage(); } + // Now get the committed memory from the manager + total += sTextureDataManager.getCommittedSize(); + // And the size of the loading queue + total += sTextureDataManager.getQueueSize(); + return total; +} +size_t TextureResource::getTotalTextureSize() +{ + size_t total = 0; + // Count up all textures that manage their own texture data + for (auto tex : sAllTextures) + { + if (tex->mTextureData != nullptr) + total += tex->getSize().x() * tex->getSize().y() * 4; + } + // Now get the total memory from the manager + total += sTextureDataManager.getTotalSize(); return total; } + +void TextureResource::unload(std::shared_ptr& rm) +{ + // Release the texture's resources + std::shared_ptr data; + if (mTextureData == nullptr) + data = sTextureDataManager.get(this); + else + data = mTextureData; + + data->releaseVRAM(); + data->releaseRAM(); +} + +void TextureResource::reload(std::shared_ptr& rm) +{ + // For dynamically loaded textures the texture manager will load them on demand. + // For manually loaded textures we have to reload them here + if (mTextureData) + mTextureData->load(); +} diff --git a/es-core/src/resources/TextureResource.h b/es-core/src/resources/TextureResource.h index 811e71de37..7623e8b1c2 100644 --- a/es-core/src/resources/TextureResource.h +++ b/es-core/src/resources/TextureResource.h @@ -3,8 +3,12 @@ #include "resources/ResourceManager.h" #include +#include +#include #include #include "platform.h" +#include "resources/TextureData.h" +#include "resources/TextureDataManager.h" #include GLHEADER // An OpenGL texture. @@ -12,40 +16,43 @@ class TextureResource : public IReloadable { public: - static std::shared_ptr get(const std::string& path, bool tile = false); + static std::shared_ptr get(const std::string& path, bool tile = false, bool forceLoad = false, bool dynamic = true); + void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height); + virtual void initFromMemory(const char* file, size_t length); + + // For scalable source images in textures we want to set the resolution to rasterize at + void rasterizeAt(size_t width, size_t height); + Eigen::Vector2f getSourceImageSize() const; virtual ~TextureResource(); - virtual void unload(std::shared_ptr& rm) override; - virtual void reload(std::shared_ptr& rm) override; - bool isInitialized() const; bool isTiled() const; - const Eigen::Vector2i& getSize() const; - void bind() const; - - // Warning: will NOT correctly reinitialize when this texture is reloaded (e.g. ES starts/stops playing a game). - virtual void initFromMemory(const char* file, size_t length); - // Warning: will NOT correctly reinitialize when this texture is reloaded (e.g. ES starts/stops playing a game). - void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height); + const Eigen::Vector2i getSize() const; + bool bind(); - size_t getMemUsage() const; // returns an approximation of the VRAM used by this texture (in bytes) static size_t getTotalMemUsage(); // returns an approximation of total VRAM used by textures (in bytes) + static size_t getTotalTextureSize(); // returns the number of bytes that would be used if all textures were in memory protected: - TextureResource(const std::string& path, bool tile); - void deinit(); - - Eigen::Vector2i mTextureSize; - const std::string mPath; - const bool mTile; + TextureResource(const std::string& path, bool tile, bool dynamic); + virtual void unload(std::shared_ptr& rm); + virtual void reload(std::shared_ptr& rm); private: - GLuint mTextureID; + // mTextureData is used for textures that are not loaded from a file - these ones + // are permanently allocated and cannot be loaded and unloaded based on resources + std::shared_ptr mTextureData; + + // The texture data manager manages loading and unloading of filesystem based textures + static TextureDataManager sTextureDataManager; + + Eigen::Vector2i mSize; + Eigen::Vector2f mSourceSize; + bool mForceLoad; typedef std::pair TextureKeyType; static std::map< TextureKeyType, std::weak_ptr > sTextureMap; // map of textures, used to prevent duplicate textures - - static std::list< std::weak_ptr > sTextureList; // list of all textures, used for memory approximations + static std::set sAllTextures; // Set of all textures, used for memory management }; From e95eb4eea6fbe9b2357963a7a7d33eba275ab41d Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 2 Feb 2017 00:20:17 +0000 Subject: [PATCH 053/603] bump version to 2.1.4rp --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 632d9917e3..213832cc82 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_MAINTENANCE 3 -#define PROGRAM_VERSION_STRING "2.1.3rp" +#define PROGRAM_VERSION_MAINTENANCE 4 +#define PROGRAM_VERSION_STRING "2.1.4rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,1,3\0" +#define RESOURCE_VERSION_STRING "2,1,4\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From b851f91bd37859b66eba30e0ccf0af562bc82342 Mon Sep 17 00:00:00 2001 From: dirk-de-bugger Date: Sat, 18 Feb 2017 23:35:12 +0100 Subject: [PATCH 054/603] Fix initial text positioning and improve keyboard handling in TextEditComponent --- es-core/src/components/TextEditComponent.cpp | 40 ++++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index af57991924..c5ff4f75ea 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -20,7 +20,7 @@ TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), onFocusLost(); - setSize(256, mFont->getHeight() + TEXT_PADDING_VERT); + setSize(4096, mFont->getHeight() + TEXT_PADDING_VERT); } void TextEditComponent::onFocusGained() @@ -91,15 +91,20 @@ void TextEditComponent::stopEditing() bool TextEditComponent::input(InputConfig* config, Input input) { + bool const cursor_left = (config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedTo("left", input)) || + (config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_LEFT); + bool const cursor_right = (config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedTo("right", input)) || + (config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_RIGHT); + if(input.value == 0) { - if(config->isMappedTo("left", input) || config->isMappedTo("right", input)) + if(cursor_left || cursor_right) mCursorRepeatDir = 0; return false; } - if(config->isMappedTo("a", input) && mFocused && !mEditing) + if((config->isMappedTo("a", input) || (config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_RETURN)) && mFocused && !mEditing) { startEditing(); return true; @@ -125,17 +130,38 @@ bool TextEditComponent::input(InputConfig* config, Input input) return true; } - if(config->isMappedTo("up", input)) + if(config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedTo("up", input)) { // TODO - }else if(config->isMappedTo("down", input)) + }else if(config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedTo("down", input)) { // TODO - }else if(config->isMappedTo("left", input) || config->isMappedTo("right", input)) + }else if(cursor_left || cursor_right) { - mCursorRepeatDir = config->isMappedTo("left", input) ? -1 : 1; + mCursorRepeatDir = cursor_left ? -1 : 1; mCursorRepeatTimer = -(CURSOR_REPEAT_START_DELAY - CURSOR_REPEAT_SPEED); moveCursor(mCursorRepeatDir); + } else if(config->getDeviceId() == DEVICE_KEYBOARD) + { + switch(input.id) + { + case SDLK_HOME: + setCursor(0); + break; + + case SDLK_END: + setCursor(std::string::npos); + break; + + case SDLK_DELETE: + if(mCursor < mText.length()) + { + // Fake as Backspace one char to the right + moveCursor(1); + textInput("\b"); + } + break; + } } //consume all input when editing text From 44f886c961bd32e9a5c75e84a7fdf0945a73a468 Mon Sep 17 00:00:00 2001 From: jrassa Date: Thu, 23 Feb 2017 20:42:35 -0500 Subject: [PATCH 055/603] implement maxSize for videos implement maxSize for videos --- es-core/src/ThemeData.cpp | 1 + es-core/src/components/VideoComponent.cpp | 98 ++++++++++++++++++++--- es-core/src/components/VideoComponent.h | 19 +++++ 3 files changed, 108 insertions(+), 10 deletions(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 871e7dead0..cd35d06a66 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -86,6 +86,7 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("video", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) + ("maxSize", NORMALIZED_PAIR) ("origin", NORMALIZED_PAIR) ("default", PATH) ("delay", FLOAT) diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 6f41ffd786..268a45316d 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -39,7 +39,10 @@ VideoComponent::VideoComponent(Window* window) : mVideoWidth(0), mStartDelayed(false), mIsPlaying(false), - mShowing(false) + mShowing(false), + mTargetIsMax(false), + mOrigin(0, 0), + mTargetSize(0, 0) { memset(&mContext, 0, sizeof(mContext)); @@ -69,12 +72,89 @@ void VideoComponent::setOrigin(float originX, float originY) mStaticImage.setOrigin(originX, originY); } +void VideoComponent::setResize(float width, float height) +{ + mTargetSize << width, height; + mTargetIsMax = false; + mStaticImage.setResize(width, height); + resize(); +} + +void VideoComponent::setMaxSize(float width, float height) +{ + mTargetSize << width, height; + mTargetIsMax = true; + mStaticImage.setMaxSize(width, height); + resize(); +} + Eigen::Vector2f VideoComponent::getCenter() const { return Eigen::Vector2f(mPosition.x() - (getSize().x() * mOrigin.x()) + getSize().x() / 2, mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); } +void VideoComponent::resize() +{ + if(!mTexture) + return; + + const Eigen::Vector2f textureSize(mVideoWidth, mVideoHeight); + + if(textureSize.isZero()) + return; + + // SVG rasterization is determined by height (see SVGResource.cpp), and rasterization is done in terms of pixels + // if rounding is off enough in the rasterization step (for images with extreme aspect ratios), it can cause cutoff when the aspect ratio breaks + // so, we always make sure the resultant height is an integer to make sure cutoff doesn't happen, and scale width from that + // (you'll see this scattered throughout the function) + // this is probably not the best way, so if you're familiar with this problem and have a better solution, please make a pull request! + + if(mTargetIsMax) + { + + mSize = textureSize; + + Eigen::Vector2f resizeScale((mTargetSize.x() / mSize.x()), (mTargetSize.y() / mSize.y())); + + if(resizeScale.x() < resizeScale.y()) + { + mSize[0] *= resizeScale.x(); + mSize[1] *= resizeScale.x(); + }else{ + mSize[0] *= resizeScale.y(); + mSize[1] *= resizeScale.y(); + } + + // for SVG rasterization, always calculate width from rounded height (see comment above) + mSize[1] = round(mSize[1]); + mSize[0] = (mSize[1] / textureSize.y()) * textureSize.x(); + + }else{ + // if both components are set, we just stretch + // if no components are set, we don't resize at all + mSize = mTargetSize.isZero() ? textureSize : mTargetSize; + + // if only one component is set, we resize in a way that maintains aspect ratio + // for SVG rasterization, we always calculate width from rounded height (see comment above) + if(!mTargetSize.x() && mTargetSize.y()) + { + mSize[1] = round(mTargetSize.y()); + mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); + }else if(mTargetSize.x() && !mTargetSize.y()) + { + mSize[1] = round((mTargetSize.x() / textureSize.x()) * textureSize.y()); + mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); + } + } + + // mSize.y() should already be rounded + mTexture->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); + + onSizeChanged(); +} + + void VideoComponent::onSizeChanged() { // Update the embeded static image @@ -111,8 +191,6 @@ void VideoComponent::setImage(std::string path) return; mStaticImage.setImage(path); - // Make the image stretch to fill the video region - mStaticImage.setSize(getSize()); mFadeIn = 0.0f; mStaticImagePath = path; } @@ -243,11 +321,15 @@ void VideoComponent::applyTheme(const std::shared_ptr& theme, const s { Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); + mStaticImage.setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); } - if ((properties & ThemeFlags::SIZE) && elem->has("size")) + if(properties & ThemeFlags::SIZE) { - setSize(elem->get("size").cwiseProduct(scale)); + if(elem->has("size")) + setResize(elem->get("size").cwiseProduct(scale)); + else if(elem->has("maxSize")) + setMaxSize(elem->get("maxSize").cwiseProduct(scale)); } // position + size also implies origin @@ -265,11 +347,6 @@ void VideoComponent::applyTheme(const std::shared_ptr& theme, const s if (elem->has("showSnapshotDelay")) mConfig.showSnapshotDelay = elem->get("showSnapshotDelay"); - - // Update the embeded static image - mStaticImage.setPosition(getPosition()); - mStaticImage.setMaxSize(getSize()); - mStaticImage.setSize(getSize()); } std::vector VideoComponent::getHelpPrompts() @@ -287,6 +364,7 @@ void VideoComponent::setupContext() mContext.surface = SDL_CreateRGBSurface(SDL_SWSURFACE, (int)mVideoWidth, (int)mVideoHeight, 32, 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff); mContext.mutex = SDL_CreateMutex(); mContext.valid = true; + resize(); } } diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index f8376cfe90..14179defa3 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -55,6 +55,19 @@ class VideoComponent : public GuiComponent void onSizeChanged() override; void setOpacity(unsigned char opacity) override; + // Resize the video to fit this size. If one axis is zero, scale that axis to maintain aspect ratio. + // If both are non-zero, potentially break the aspect ratio. If both are zero, no resizing. + // Can be set before or after a video is loaded. + // setMaxSize() and setResize() are mutually exclusive. + void setResize(float width, float height); + inline void setResize(const Eigen::Vector2f& size) { setResize(size.x(), size.y()); } + + // Resize the video to be as large as possible but fit within a box of this size. + // Can be set before or after a video is loaded. + // Never breaks the aspect ratio. setMaxSize() and setResize() are mutually exclusive. + void setMaxSize(float width, float height); + inline void setMaxSize(const Eigen::Vector2f& size) { setMaxSize(size.x(), size.y()); } + void render(const Eigen::Affine3f& parentTrans) override; virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; @@ -67,6 +80,10 @@ class VideoComponent : public GuiComponent virtual void update(int deltaTime); private: + // Calculates the correct mSize from our resizing information (set by setResize/setMaxSize). + // Used internally whenever the resizing parameters or texture change. + void resize(); + // Start the video Immediately void startVideo(); // Start the video after any configured delay @@ -94,6 +111,7 @@ class VideoComponent : public GuiComponent unsigned mVideoWidth; unsigned mVideoHeight; Eigen::Vector2f mOrigin; + Eigen::Vector2f mTargetSize; std::shared_ptr mTexture; float mFadeIn; std::string mStaticImagePath; @@ -105,6 +123,7 @@ class VideoComponent : public GuiComponent unsigned mStartTime; bool mIsPlaying; bool mShowing; + bool mTargetIsMax; Configuration mConfig; }; From e2374271f2919b77cb04c0d15569e5e47529d8e4 Mon Sep 17 00:00:00 2001 From: jrassa Date: Fri, 24 Feb 2017 23:19:29 -0500 Subject: [PATCH 056/603] don't enable video view if current theme doesn't support it --- es-app/src/views/ViewController.cpp | 4 +++- es-core/src/ThemeData.cpp | 5 +++++ es-core/src/ThemeData.h | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index d9093e8e10..ce29025e05 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -228,13 +228,15 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste //if we didn't, make it, remember it, and return it std::shared_ptr view; + bool themeHasVideoView = system->getTheme()->hasView("video"); + //decide type bool detailed = false; bool video = false; std::vector files = system->getRootFolder()->getFilesRecursive(GAME | FOLDER); for(auto it = files.begin(); it != files.end(); it++) { - if(!(*it)->getVideoPath().empty()) + if(themeHasVideoView && !(*it)->getVideoPath().empty()) { video = true; break; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 871e7dead0..9ed9e093e5 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -343,6 +343,11 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::map Date: Fri, 3 Mar 2017 21:34:57 +0000 Subject: [PATCH 057/603] Update GamesDBScraper.cpp Fixes platform name for Neo Geo so that the scraper works --- es-app/src/scrapers/GamesDBScraper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index ea78e374e1..74ecc37b75 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -29,7 +29,7 @@ const std::map gamesdb_platformid_map = boost::assign:: (XBOX, "Microsoft Xbox") (XBOX_360, "Microsoft Xbox 360") // missing MSX - (NEOGEO, "NeoGeo") + (NEOGEO, "Neo Geo") (NEOGEO_POCKET, "Neo Geo Pocket") (NEOGEO_POCKET_COLOR, "Neo Geo Pocket Color") (NINTENDO_3DS, "Nintendo 3DS") From 25960c4505251e2dfd36088db13f8b66ad9a242c Mon Sep 17 00:00:00 2001 From: John Rassa Date: Tue, 7 Mar 2017 15:01:30 -0500 Subject: [PATCH 058/603] add video documentation add documentation for video view and video element. --- THEMES.md | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/THEMES.md b/THEMES.md index d4a2bdd63f..a8a111fa13 100644 --- a/THEMES.md +++ b/THEMES.md @@ -332,6 +332,57 @@ Reference * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR - Text is the "desc" metadata. If no `pos`/`size` is specified, will move and resize to fit under the lowest label and reach to the bottom of the screen. +#### video +* `helpsystem name="help"` - ALL + - The help system style for this view. +* `image name="background"` - ALL + - This is a background image that exists for convenience. It goes from (0, 0) to (1, 1). +* `text name="logoText"` - ALL + - Displays the name of the system. Only present if no "logo" image is specified. Displayed at the top of the screen, centered by default. +* `image name="logo"` - ALL + - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. +* `textlist name="gamelist"` - ALL + - The gamelist. `primaryColor` is for games, `secondaryColor` is for folders. Left aligned by default. + +* Metadata + * Labels + * `text name="md_lbl_rating"` - ALL + * `text name="md_lbl_releasedate"` - ALL + * `text name="md_lbl_developer"` - ALL + * `text name="md_lbl_publisher"` - ALL + * `text name="md_lbl_genre"` - ALL + * `text name="md_lbl_players"` - ALL + * `text name="md_lbl_lastplayed"` - ALL + * `text name="md_lbl_playcount"` - ALL + + * Values + * All values will follow to the right of their labels if a position isn't specified. + + * `image name="md_image"` - POSITION | SIZE + - Path is the "image" metadata for the currently selected game. + * `image name="md_marquee"` - POSITION | SIZE + - Path is the "marquee" metadata for the currently selected game. + * `video name="md_video"` - POSITION | SIZE + - Path is the "video" metadata for the currently selected game. + * `rating name="md_rating"` - ALL + - The "rating" metadata. + * `datetime name="md_releasedate"` - ALL + - The "releasedate" metadata. + * `text name="md_developer"` - ALL + - The "developer" metadata. + * `text name="md_publisher"` - ALL + - The "publisher" metadata. + * `text name="md_genre"` - ALL + - The "genre" metadata. + * `text name="md_players"` - ALL + - The "players" metadata (number of players the game supports). + * `datetime name="md_lastplayed"` - ALL + - The "lastplayed" metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago"). + * `text name="md_playcount"` - ALL + - The "playcount" metadata (number of times the game has been played). + * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR + - Text is the "desc" metadata. If no `pos`/`size` is specified, will move and resize to fit under the lowest label and reach to the bottom of the screen. + --- #### grid @@ -389,6 +440,21 @@ Can be created as an extra. - If true, the image will be tiled instead of stretched to fit its size. Useful for backgrounds. * `color` - type: COLOR. - Multiply each pixel's color by this color. For example, an all-white image with `FF0000` would become completely red. You can also control the transparency of an image with `FFFFFFAA` - keeping all the pixels their normal color and only affecting the alpha channel. + +#### video + +* `pos` - type: NORMALIZED_PAIR. +* `size` - type: NORMALIZED_PAIR. +* `origin` - type: NORMALIZED_PAIR. + - Where on the image `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the image exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. +* `delay` - type: FLOAT. Default is false. + - Delay in seconds before video will start playing. +* `default` - type: PATH. + - Path to default video file. Default video will be played when selected game does not have a video. +* `showSnapshotNoVideo` - type: BOOLEAN + - If true, image will be shown when selected game does not have a video and no `default` video is configured. +* `showSnapshotDelay` - type: BOOLEAN + - If true, playing of video will be delayed for `delayed` seconds, when game is selected. #### text From 49940d62d78b2b9601402b22107f9ab79176f70b Mon Sep 17 00:00:00 2001 From: John Rassa Date: Fri, 10 Mar 2017 13:49:15 -0500 Subject: [PATCH 059/603] =?UTF-8?q?implemented=20feature=20element=20to=20?= =?UTF-8?q?allow=20themes=20to=20support=20new=20features=20w=E2=80=A6=20(?= =?UTF-8?q?#96)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * implemented feature element to allow themes to support new features without breaking older versions of ES * supported attribute should only allow one value --- es-core/src/ThemeData.cpp | 31 +++++++++++++++++++++++++++++-- es-core/src/ThemeData.h | 3 +++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 9ed9e093e5..e216633e4b 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -23,6 +23,9 @@ ElementMapType makeMap(const T& mapInit) return m; } +std::vector ThemeData::sSupportedViews = boost::assign::list_of("system")("basic")("detailed")("video"); +std::vector ThemeData::sSupportedFeatures = boost::assign::list_of("video"); + std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign::map_list_of ("image", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) @@ -181,6 +184,7 @@ void ThemeData::loadFile(const std::string& path) parseIncludes(root); parseViews(root); + parseFeatures(root); } @@ -211,11 +215,31 @@ void ThemeData::parseIncludes(const pugi::xml_node& root) parseIncludes(root); parseViews(root); + parseFeatures(root); mPaths.pop_back(); } } +void ThemeData::parseFeatures(const pugi::xml_node& root) +{ + ThemeException error; + error.setFiles(mPaths); + + for(pugi::xml_node node = root.child("feature"); node; node = node.next_sibling("feature")) + { + if(!node.attribute("supported")) + throw error << "Feature missing \"supported\" attribute!"; + + const std::string supportedAttr = node.attribute("supported").as_string(); + + if (std::find(sSupportedFeatures.begin(), sSupportedFeatures.end(), supportedAttr) != sSupportedFeatures.end()) + { + parseViews(node); + } + } +} + void ThemeData::parseViews(const pugi::xml_node& root) { ThemeException error; @@ -238,8 +262,11 @@ void ThemeData::parseViews(const pugi::xml_node& root) prevOff = nameAttr.find_first_not_of(delim, off); off = nameAttr.find_first_of(delim, prevOff); - ThemeView& view = mViews.insert(std::pair(viewKey, ThemeView())).first->second; - parseView(node, view); + if (std::find(sSupportedViews.begin(), sSupportedViews.end(), viewKey) != sSupportedViews.end()) + { + ThemeView& view = mViews.insert(std::pair(viewKey, ThemeView())).first->second; + parseView(node, view); + } } } } diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 408d0c52c3..082b736849 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -149,10 +149,13 @@ class ThemeData private: static std::map< std::string, std::map > sElementMap; + static std::vector sSupportedFeatures; + static std::vector sSupportedViews; std::deque mPaths; float mVersion; + void parseFeatures(const pugi::xml_node& themeRoot); void parseIncludes(const pugi::xml_node& themeRoot); void parseViews(const pugi::xml_node& themeRoot); void parseView(const pugi::xml_node& viewNode, ThemeView& view); From baa4e2590db418c345e53a42e70be24a29805104 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 13 Mar 2017 18:16:57 +0000 Subject: [PATCH 060/603] make jump to letter move to first occurrence of the letter --- es-app/src/guis/GuiGamelistOptions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 1c8948cc5b..cb8f45d68b 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -104,7 +104,7 @@ void GuiGamelistOptions::jumpToLetter() if(checkLetter < letter) min = mid + 1; - else if(checkLetter > letter) + else if(checkLetter > letter || (mid > 0 && (letter == toupper(files.at(mid - 1)->getName()[0])))) max = mid - 1; else break; //exact match found From cdc189021210aa62b1f656c2f5bf5991e684e693 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 13 Mar 2017 18:19:51 +0000 Subject: [PATCH 061/603] bump to version 2.1.5 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 213832cc82..0c6b1dddc4 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_MAINTENANCE 4 -#define PROGRAM_VERSION_STRING "2.1.4rp" +#define PROGRAM_VERSION_MAINTENANCE 5 +#define PROGRAM_VERSION_STRING "2.1.5rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,1,4\0" +#define RESOURCE_VERSION_STRING "2,1,5\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 867db8ac9cb1d9611300b038f4a07b616cd0042a Mon Sep 17 00:00:00 2001 From: John Rassa Date: Tue, 14 Mar 2017 10:01:39 -0400 Subject: [PATCH 062/603] add maxSize documentation for video --- THEMES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/THEMES.md b/THEMES.md index a8a111fa13..a321229fa5 100644 --- a/THEMES.md +++ b/THEMES.md @@ -445,6 +445,9 @@ Can be created as an extra. * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. + - If only one axis is specified (and the other is zero), the other will be automatically calculated in accordance with the video's aspect ratio. +* `maxSize` - type: NORMALIZED_PAIR. + - The video will be resized as large as possible so that it fits within this size and maintains its aspect ratio. Use this instead of `size` when you don't know what kind of video you're using so it doesn't get grossly oversized on one axis (e.g. with a game's video metadata). * `origin` - type: NORMALIZED_PAIR. - Where on the image `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the image exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. * `delay` - type: FLOAT. Default is false. From 6cb81ab1af8889c965dafc21ba9cef7c39ac20fb Mon Sep 17 00:00:00 2001 From: "D. Polders" Date: Thu, 17 Nov 2016 21:37:44 +0100 Subject: [PATCH 063/603] Small changes to facilitate building on Windows platform using VS2015 --- .gitignore | 3 +++ CMakeLists.txt | 9 +++++++++ es-core/src/Util.cpp | 5 +++++ es-core/src/platform.cpp | 6 ++++++ 4 files changed, 23 insertions(+) diff --git a/.gitignore b/.gitignore index 0686c4180e..685ee8c426 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ Makefile .cproject .project .settings/ + +# WinMerge +.bak \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 261215014f..d15b4303eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,7 +47,11 @@ endif() find_package(Freetype REQUIRED) find_package(FreeImage REQUIRED) find_package(SDL2 REQUIRED) +if(MSVC) +find_package(Boost REQUIRED COMPONENTS system date_time locale) +else() find_package(Boost REQUIRED COMPONENTS system filesystem date_time locale) +endif() find_package(Eigen3 REQUIRED) find_package(CURL REQUIRED) find_package(VLC REQUIRED) @@ -81,9 +85,14 @@ if(CMAKE_COMPILER_IS_GNUCXX) endif() #set up compiler flags for GCC +if (CMAKE_BUILD_TYPE MATCHES Debug) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O0") #support C++11 for std::, optimize + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O0") +else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O3") #support C++11 for std::, optimize set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O3") #-s = strip binary endif() +endif() if(${GLSystem} MATCHES "Desktop OpenGL") add_definitions(-DUSE_OPENGL_DESKTOP) diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index 34be52494c..8d88104252 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -102,8 +102,13 @@ fs::path resolvePath(const fs::path& path, const fs::path& relativeTo, bool allo fs::path removeCommonPathUsingStrings(const fs::path& path, const fs::path& relativeTo, bool& contains) { +#ifdef WIN32 + std::wstring pathStr = path.c_str(); + std::wstring relativeToStr = relativeTo.c_str(); +#else std::string pathStr = path.c_str(); std::string relativeToStr = relativeTo.c_str(); +#endif if (pathStr.find_first_of(relativeToStr) == 0) { contains = true; return pathStr.substr(relativeToStr.size() + 1); diff --git a/es-core/src/platform.cpp b/es-core/src/platform.cpp index 31127a9cab..04d02b98f6 100644 --- a/es-core/src/platform.cpp +++ b/es-core/src/platform.cpp @@ -84,7 +84,13 @@ int quitES(const std::string& filename) void touch(const std::string& filename) { +#ifdef WIN32 + FILE* fp = fopen(filename.c_str(), "ab+"); + if (fp != NULL) + fclose(fp); +#else int fd = open(filename.c_str(), O_CREAT|O_WRONLY, 0644); if (fd >= 0) close(fd); +#endif } \ No newline at end of file From ac5e3ad95f34ac52bc925d618f37fe9b1717b42b Mon Sep 17 00:00:00 2001 From: "D. Polders" Date: Mon, 13 Mar 2017 22:11:07 +0100 Subject: [PATCH 064/603] System Carousel feature, now with only a single commit! --- .gitignore | 3 - CMakeLists.txt | 2 +- THEMES.md | 23 ++ es-app/src/views/SystemView.cpp | 294 ++++++++++++++++------- es-app/src/views/SystemView.h | 32 ++- es-app/src/views/ViewController.cpp | 2 +- es-core/src/ThemeData.cpp | 20 +- es-core/src/components/TextComponent.cpp | 55 +++-- es-core/src/components/TextComponent.h | 7 +- 9 files changed, 315 insertions(+), 123 deletions(-) diff --git a/.gitignore b/.gitignore index 685ee8c426..0686c4180e 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,3 @@ Makefile .cproject .project .settings/ - -# WinMerge -.bak \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index d15b4303eb..1b98f16216 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,7 +86,7 @@ if(CMAKE_COMPILER_IS_GNUCXX) #set up compiler flags for GCC if (CMAKE_BUILD_TYPE MATCHES Debug) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O0") #support C++11 for std::, optimize + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O0") #support C++11 for std::, optimize set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O0") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O3") #support C++11 for std::, optimize diff --git a/THEMES.md b/THEMES.md index a8a111fa13..1c518dafd5 100644 --- a/THEMES.md +++ b/THEMES.md @@ -400,8 +400,12 @@ Reference #### system * `helpsystem name="help"` - ALL - The help system style for this view. +* `carousel name="systemcarousel"` -ALL + - The system logo carousel * `image name="logo"` - PATH - A logo image, to be displayed in the system logo carousel. +* `text name="systemInfo"` - ALL + - Displays details of the system currently selected in the carousel. * You can use extra elements (elements with `extra="true"`) to add your own backgrounds, etc. They will be displayed behind the carousel, and scroll relative to the carousel. @@ -468,6 +472,7 @@ Can be created as an extra. - `w h` - works like a "text box." If `h` is non-zero and `h` <= `fontSize` (implying it should be a single line of text), text that goes beyond `w` will be truncated with an elipses (...). * `text` - type: STRING. * `color` - type: COLOR. +* `backgroundColor` - type: COLOR; * `fontPath` - type: PATH. - Path to a truetype font (.ttf). * `fontSize` - type: FLOAT. @@ -541,6 +546,24 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice * `fontPath` - type: PATH. * `fontSize` - type: FLOAT. +#### carousel + +* `type` - type: STRING. + * Accepted values are "HORIZONTAL" or "VERTICAL". Sets the scoll direction of the carousel. + * Default is "HORIZONTAL". +* `size` - type: NORMALIZED_PAIR. Default is "1 0.2325" +* `pos` - type: NORMALIZED_PAIR. Default is "0 0.38375". +* `color` - type: COLOR. + * Controls the color of the carousel background. + * Default is FFFFFFD8 +* `logoSize` - type: NORMALIZED_PAIR. Default is "0.25 0.155" +* `logoScale` - type: FLOAT. + * Selected logo is increased in size by this scale + * Default is 1.5 +* `maxLogoCount` - type: FLOAT. + * Sets the number of logos to display in the carousel. + * Default is 3 + The help system is a special element that displays a context-sensitive list of actions the user can take at any time. You should try and keep the position constant throughout every screen. Keep in mind the "default" settings (including position) are used whenever the user opens a menu. [*Check out the "official" themes for some more examples!*](http://aloshi.com/emulationstation#themes) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index c760125b97..272d4c6342 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -9,22 +9,15 @@ #include "Settings.h" #include "Util.h" -#define SELECTED_SCALE 1.5f -#define LOGO_PADDING ((logoSize().x() * (SELECTED_SCALE - 1)/2) + (mSize.x() * 0.06f)) -#define BAND_HEIGHT (logoSize().y() * SELECTED_SCALE) - SystemView::SystemView(Window* window) : IList(window, LIST_SCROLL_STYLE_SLOW, LIST_ALWAYS_LOOP), - mSystemInfo(window, "SYSTEM INFO", Font::get(FONT_SIZE_SMALL), 0x33333300, ALIGN_CENTER) + mViewNeedsReload(true), + mSystemInfo(window, "SYSTEM INFO", Font::get(FONT_SIZE_SMALL), 0x33333300, ALIGN_CENTER) { mCamOffset = 0; mExtrasCamOffset = 0; mExtrasFadeOpacity = 0.0f; setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - - mSystemInfo.setSize(mSize.x(), mSystemInfo.getSize().y() * 1.333f); - mSystemInfo.setPosition(0, (mSize.y() + BAND_HEIGHT) / 2); - populate(); } @@ -36,6 +29,9 @@ void SystemView::populate() { const std::shared_ptr& theme = (*it)->getTheme(); + if(mViewNeedsReload) + getViewElements(theme); + Entry e; e.name = (*it)->getName(); e.object = *it; @@ -43,18 +39,20 @@ void SystemView::populate() // make logo if(theme->getElement("system", "logo", "image")) { - ImageComponent* logo = new ImageComponent(mWindow, false, false); - logo->setMaxSize(Eigen::Vector2f(logoSize().x(), logoSize().y())); + ImageComponent* logo = new ImageComponent(mWindow); + logo->setMaxSize(Eigen::Vector2f(mCarousel.logoSize.x(), mCarousel.logoSize.y())); logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); - logo->setPosition((logoSize().x() - logo->getSize().x()) / 2, (logoSize().y() - logo->getSize().y()) / 2); // center + logo->setPosition((mCarousel.logoSize.x() - logo->getSize().x()) / 2, + (mCarousel.logoSize.y() - logo->getSize().y()) / 2); // center e.data.logo = std::shared_ptr(logo); - ImageComponent* logoSelected = new ImageComponent(mWindow, false, false); - logoSelected->setMaxSize(Eigen::Vector2f(logoSize().x() * SELECTED_SCALE, logoSize().y() * SELECTED_SCALE * 0.70f)); - logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); - logoSelected->setPosition((logoSize().x() - logoSelected->getSize().x()) / 2, - (logoSize().y() - logoSelected->getSize().y()) / 2); // center + ImageComponent* logoSelected = new ImageComponent(mWindow); + logoSelected->setMaxSize(Eigen::Vector2f(mCarousel.logoSize.x() * mCarousel.logoScale, mCarousel.logoSize.y() * mCarousel.logoScale)); + logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); + logoSelected->setPosition((mCarousel.logoSize.x() - logoSelected->getSize().x()) / 2, + (mCarousel.logoSize.y() - logoSelected->getSize().y()) / 2); // center e.data.logoSelected = std::shared_ptr(logoSelected); + }else{ // no logo in theme; use text TextComponent* text = new TextComponent(mWindow, @@ -62,15 +60,15 @@ void SystemView::populate() Font::get(FONT_SIZE_LARGE), 0x000000FF, ALIGN_CENTER); - text->setSize(logoSize()); + text->setSize(mCarousel.logoSize); e.data.logo = std::shared_ptr(text); TextComponent* textSelected = new TextComponent(mWindow, (*it)->getName(), - Font::get((int)(FONT_SIZE_LARGE * SELECTED_SCALE)), + Font::get((int)(FONT_SIZE_LARGE * 1.5)), 0x000000FF, ALIGN_CENTER); - textSelected->setSize(logoSize()); + textSelected->setSize(mCarousel.logoSize); e.data.logoSelected = std::shared_ptr(textSelected); } @@ -96,26 +94,40 @@ bool SystemView::input(InputConfig* config, Input input) { if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_r && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) { - LOG(LogInfo) << " Reloading SystemList view"; - - // reload themes - for(auto it = mEntries.begin(); it != mEntries.end(); it++) - it->object->loadTheme(); - - populate(); - updateHelpPrompts(); + LOG(LogInfo) << " Reloading all"; + ViewController::get()->reloadAll(); return true; } - if(config->isMappedTo("left", input)) - { - listInput(-1); - return true; - } - if(config->isMappedTo("right", input)) + + switch (mCarousel.type) { - listInput(1); - return true; + case VERTICAL: + if (config->isMappedTo("up", input)) + { + listInput(-1); + return true; + } + if (config->isMappedTo("down", input)) + { + listInput(1); + return true; + } + break; + case HORIZONTAL: + default: + if (config->isMappedTo("left", input)) + { + listInput(-1); + return true; + } + if (config->isMappedTo("right", input)) + { + listInput(1); + return true; + } + break; } + if(config->isMappedTo("a", input)) { stopScrolling(); @@ -123,7 +135,10 @@ bool SystemView::input(InputConfig* config, Input input) return true; } }else{ - if(config->isMappedTo("left", input) || config->isMappedTo("right", input)) + if(config->isMappedTo("left", input) || + config->isMappedTo("right", input) || + config->isMappedTo("up", input) || + config->isMappedTo("down", input)) listInput(0); } @@ -254,94 +269,191 @@ void SystemView::onCursorChanged(const CursorState& state) void SystemView::render(const Eigen::Affine3f& parentTrans) { if(size() == 0) - return; - - Eigen::Affine3f trans = getTransform() * parentTrans; + return; // nothing to render - // draw the list elements (titles, backgrounds, logos) - const float logoSizeX = logoSize().x() + LOGO_PADDING; + Eigen::Affine3f trans = getTransform() * parentTrans; - int logoCount = (int)(mSize.x() / logoSizeX) + 2; // how many logos we need to draw - int center = (int)(mCamOffset); + renderExtras(trans); + renderCarousel(trans); + renderInfoBar(trans); +} - if(mEntries.size() == 1) - logoCount = 1; +std::vector SystemView::getHelpPrompts() +{ + std::vector prompts; + if (mCarousel.type == VERTICAL) + prompts.push_back(HelpPrompt("up/down", "choose")); + else + prompts.push_back(HelpPrompt("left/right", "choose")); + prompts.push_back(HelpPrompt("a", "select")); + return prompts; +} - // draw background extras - Eigen::Affine3f extrasTrans = trans; - int extrasCenter = (int)mExtrasCamOffset; - for(int i = extrasCenter - 1; i < extrasCenter + 2; i++) - { - int index = i; - while(index < 0) - index += mEntries.size(); - while(index >= (int)mEntries.size()) - index -= mEntries.size(); +HelpStyle SystemView::getHelpStyle() +{ + HelpStyle style; + style.applyTheme(mEntries.at(mCursor).object->getTheme(), "system"); + return style; +} - extrasTrans.translation() = trans.translation() + Eigen::Vector3f((i - mExtrasCamOffset) * mSize.x(), 0, 0); +void SystemView::onThemeChanged(const std::shared_ptr& theme) +{ + LOG(LogDebug) << "SystemView::onThemeChanged()"; + mViewNeedsReload = true; + populate(); +} - Eigen::Vector2i clipRect = Eigen::Vector2i((int)((i - mExtrasCamOffset) * mSize.x()), 0); - Renderer::pushClipRect(clipRect, mSize.cast()); - mEntries.at(index).data.backgroundExtras->render(extrasTrans); - Renderer::popClipRect(); - } +// Get the ThemeElements that make up the SystemView. +void SystemView::getViewElements(const std::shared_ptr& theme) +{ + LOG(LogDebug) << "SystemView::getViewElements()"; - // fade extras if necessary - if(mExtrasFadeOpacity) - { - Renderer::setMatrix(trans); - Renderer::drawRect(0.0f, 0.0f, mSize.x(), mSize.y(), 0x00000000 | (unsigned char)(mExtrasFadeOpacity * 255)); - } + getDefaultElements(); - // draw logos - float xOff = (mSize.x() - logoSize().x())/2 - (mCamOffset * logoSizeX); - float yOff = (mSize.y() - logoSize().y())/2; + const ThemeData::ThemeElement* carouselElem = theme->getElement("system", "systemcarousel", "carousel"); + if (carouselElem) + getCarouselFromTheme(carouselElem); + + const ThemeData::ThemeElement* sysInfoElem = theme->getElement("system", "systemInfo", "text"); + if (sysInfoElem) + mSystemInfo.applyTheme(theme, "system", "systemInfo", ThemeFlags::ALL); + + mViewNeedsReload = false; +} + +// Render system carousel +void SystemView::renderCarousel(const Eigen::Affine3f& trans) +{ + Eigen::Vector2i clipPos((int)mCarousel.pos.x(), (int)mCarousel.pos.y()); + Eigen::Vector2i clipSize((int)mCarousel.size.x(), (int)mCarousel.size.y()); - // background behind the logos + Renderer::pushClipRect(clipPos, clipSize); + + // background box behind logos Renderer::setMatrix(trans); - Renderer::drawRect(0.f, (mSize.y() - BAND_HEIGHT) / 2, mSize.x(), BAND_HEIGHT, 0xFFFFFFD8); + Renderer::drawRect(mCarousel.pos.x(), mCarousel.pos.y(), mCarousel.size.x(), mCarousel.size.y(), mCarousel.color); + + // draw logos + Eigen::Vector2f logoSpacing(0.0, 0.0); // NB: logoSpacing will include the size of the logo itself as well! + float xOff = 0.0; + float yOff = 0.0; + + switch (mCarousel.type) + { + case VERTICAL: + logoSpacing[1] = ((mCarousel.size.y() - (mCarousel.logoSize.y() * mCarousel.maxLogoCount)) / (mCarousel.maxLogoCount)) + mCarousel.logoSize.y(); + xOff = mCarousel.pos.x() + (mCarousel.size.x() / 2) - (mCarousel.logoSize.x() / 2); + yOff = mCarousel.pos.y() + (mCarousel.size.y() - mCarousel.logoSize.y()) / 2 - (mCamOffset * logoSpacing[1]); + break; + case HORIZONTAL: + default: + logoSpacing[0] = ((mCarousel.size.x() - (mCarousel.logoSize.x() * mCarousel.maxLogoCount)) / (mCarousel.maxLogoCount)) + mCarousel.logoSize.x(); + xOff = mCarousel.pos.x() + (mCarousel.size.x() - mCarousel.logoSize.x()) / 2 - (mCamOffset * logoSpacing[0]); + yOff = mCarousel.pos.y() + (mCarousel.size.y() / 2) - (mCarousel.logoSize.y() / 2); + break; + } Eigen::Affine3f logoTrans = trans; - for(int i = center - logoCount/2; i < center + logoCount/2 + 1; i++) + int center = (int)(mCamOffset); + int logoCount = std::min(mCarousel.maxLogoCount, (int)mEntries.size()) + 2; + + for (int i = center - logoCount / 2; i < center + logoCount / 2 + 1; i++) { int index = i; - while(index < 0) + while (index < 0) index += mEntries.size(); - while(index >= (int)mEntries.size()) + while (index >= (int)mEntries.size()) index -= mEntries.size(); - logoTrans.translation() = trans.translation() + Eigen::Vector3f(i * logoSizeX + xOff, yOff, 0); + logoTrans.translation() = trans.translation() + Eigen::Vector3f(i * logoSpacing[0] + xOff, i * logoSpacing [1] + yOff, 0); - if(index == mCursor) //scale our selection up + if (index == mCursor) //Selected System { - // selected const std::shared_ptr& comp = mEntries.at(index).data.logoSelected; comp->setOpacity(0xFF); comp->render(logoTrans); - }else{ - // not selected + } + else { // not selected systems const std::shared_ptr& comp = mEntries.at(index).data.logo; comp->setOpacity(0x80); comp->render(logoTrans); } } + Renderer::popClipRect(); +} +void SystemView::renderInfoBar(const Eigen::Affine3f& trans) +{ Renderer::setMatrix(trans); - Renderer::drawRect(mSystemInfo.getPosition().x(), mSystemInfo.getPosition().y() - 1, mSize.x(), mSystemInfo.getSize().y(), 0xDDDDDD00 | (unsigned char)(mSystemInfo.getOpacity() / 255.f * 0xD8)); mSystemInfo.render(trans); } -std::vector SystemView::getHelpPrompts() +// Draw background extras +void SystemView::renderExtras(const Eigen::Affine3f& trans) { - std::vector prompts; - prompts.push_back(HelpPrompt("left/right", "choose")); - prompts.push_back(HelpPrompt("a", "select")); - return prompts; + Eigen::Affine3f extrasTrans = trans; + int extrasCenter = (int)mExtrasCamOffset; + for (int i = extrasCenter - 1; i < extrasCenter + 2; i++) + { + int index = i; + while (index < 0) + index += mEntries.size(); + while (index >= (int)mEntries.size()) + index -= mEntries.size(); + + extrasTrans.translation() = trans.translation() + Eigen::Vector3f((i - mExtrasCamOffset) * mSize.x(), 0, 0); + + Eigen::Vector2i clipRect = Eigen::Vector2i((int)((i - mExtrasCamOffset) * mSize.x()), 0); + Renderer::pushClipRect(clipRect, mSize.cast()); + mEntries.at(index).data.backgroundExtras->render(extrasTrans); + Renderer::popClipRect(); + } + + // fade extras if necessary + if (mExtrasFadeOpacity) + { + Renderer::setMatrix(trans); + Renderer::drawRect(0.0f, 0.0f, mSize.x(), mSize.y(), 0x00000000 | (unsigned char)(mExtrasFadeOpacity * 255)); + } } -HelpStyle SystemView::getHelpStyle() +// Populate the system carousel with the legacy values +void SystemView::getDefaultElements(void) { - HelpStyle style; - style.applyTheme(mEntries.at(mCursor).object->getTheme(), "system"); - return style; + // Carousel + mCarousel.type = HORIZONTAL; + mCarousel.size.x() = mSize.x(); + mCarousel.size.y() = 0.2325f * mSize.y(); + mCarousel.pos.x() = 0.0f; + mCarousel.pos.y() = 0.5f * (mSize.y() - mCarousel.size.y()); + mCarousel.color = 0xFFFFFFD8; + mCarousel.logoScale = 1.5f; + mCarousel.logoSize.x() = 0.25f * mSize.x(); + mCarousel.logoSize.y() = 0.155f * mSize.y(); + mCarousel.maxLogoCount = 3; + + // System Info Bar + mSystemInfo.setSize(mSize.x(), mSystemInfo.getFont()->getLetterHeight()*2.2f); + mSystemInfo.setPosition(0, (mCarousel.pos.y() + mCarousel.size.y())); + mSystemInfo.setBackgroundColor(0xDDDDDDD8); + mSystemInfo.setFont(Font::get((int)(0.035f * mSize.y()), Font::getDefaultPath())); + mSystemInfo.setColor(0x000000FF); +} + +void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) +{ + if (elem->has("type")) + mCarousel.type = !(elem->get("type").compare("vertical")) ? VERTICAL : HORIZONTAL; + if (elem->has("size")) + mCarousel.size = elem->get("size").cwiseProduct(mSize); + if (elem->has("pos")) + mCarousel.pos = elem->get("pos").cwiseProduct(mSize); + if (elem->has("color")) + mCarousel.color = elem->get("color"); + if (elem->has("logoScale")) + mCarousel.logoScale = elem->get("logoScale"); + if (elem->has("logoSize")) + mCarousel.logoSize = elem->get("logoSize").cwiseProduct(mSize); + if (elem->has("maxLogoCount")) + mCarousel.maxLogoCount = std::round(elem->get("maxLogoCount")); } diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index 15200b9038..209c4b0e95 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -10,6 +10,12 @@ class SystemData; class AnimatedImageComponent; +enum CarouselType : unsigned int +{ + HORIZONTAL = 0, + VERTICAL = 1 +}; + struct SystemViewData { std::shared_ptr logo; @@ -17,6 +23,18 @@ struct SystemViewData std::shared_ptr backgroundExtras; }; +struct SystemViewCarousel +{ + CarouselType type; + Eigen::Vector2f pos; + Eigen::Vector2f size; + float logoScale; + Eigen::Vector2f logoSpacing; + unsigned int color; + int maxLogoCount; // number of logos shown on the carousel + Eigen::Vector2f logoSize; +}; + class SystemView : public IList { public: @@ -28,6 +46,8 @@ class SystemView : public IList void update(int deltaTime) override; void render(const Eigen::Affine3f& parentTrans) override; + void onThemeChanged(const std::shared_ptr& theme); + std::vector getHelpPrompts() override; virtual HelpStyle getHelpStyle() override; @@ -35,14 +55,22 @@ class SystemView : public IList void onCursorChanged(const CursorState& state) override; private: - inline Eigen::Vector2f logoSize() const { return Eigen::Vector2f(mSize.x() * 0.25f, mSize.y() * 0.155f); } - void populate(); + void getViewElements(const std::shared_ptr& theme); + void getDefaultElements(void); + void getCarouselFromTheme(const ThemeData::ThemeElement* elem); + void renderCarousel(const Eigen::Affine3f& parentTrans); + void renderExtras(const Eigen::Affine3f& parentTrans); + void renderInfoBar(const Eigen::Affine3f& trans); + + SystemViewCarousel mCarousel; TextComponent mSystemInfo; // unit is list index float mCamOffset; float mExtrasCamOffset; float mExtrasFadeOpacity; + + bool mViewNeedsReload; }; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index ce29025e05..cc83eece51 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -12,7 +12,7 @@ #include "animations/LaunchAnimation.h" #include "animations/MoveCameraAnimation.h" #include "animations/LambdaAnimation.h" -#include +#include ViewController* ViewController::sInstance = NULL; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 2b38ce817c..ae00a0b205 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -24,7 +24,7 @@ ElementMapType makeMap(const T& mapInit) } std::vector ThemeData::sSupportedViews = boost::assign::list_of("system")("basic")("detailed")("video"); -std::vector ThemeData::sSupportedFeatures = boost::assign::list_of("video"); +std::vector ThemeData::sSupportedFeatures = boost::assign::list_of("video")("carousel"); std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign::map_list_of ("image", makeMap(boost::assign::map_list_of @@ -39,12 +39,14 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) ("text", STRING) - ("color", COLOR) + ("backgroundColor", COLOR) ("fontPath", PATH) ("fontSize", FLOAT) + ("color", COLOR) ("alignment", STRING) ("forceUppercase", BOOLEAN) - ("lineSpacing", FLOAT))) + ("lineSpacing", FLOAT) + ("value", STRING))) ("textlist", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) @@ -94,12 +96,20 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("default", PATH) ("delay", FLOAT) ("showSnapshotNoVideo", BOOLEAN) - ("showSnapshotDelay", BOOLEAN))); + ("showSnapshotDelay", BOOLEAN))) + ("carousel", makeMap(boost::assign::map_list_of + ("type", STRING) + ("size", NORMALIZED_PAIR) + ("pos", NORMALIZED_PAIR) + ("color", COLOR) + ("logoScale", FLOAT) + ("logoSize", NORMALIZED_PAIR) + ("maxLogoCount", FLOAT))); namespace fs = boost::filesystem; #define MINIMUM_THEME_FORMAT_VERSION 3 -#define CURRENT_THEME_FORMAT_VERSION 3 +#define CURRENT_THEME_FORMAT_VERSION 4 // helper unsigned int getHexColor(const char* str) diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index bce50da12c..9ab5effa54 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -1,4 +1,5 @@ #include "components/TextComponent.h" + #include "Renderer.h" #include "Log.h" #include "Window.h" @@ -7,16 +8,17 @@ #include "Settings.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), - mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT), mLineSpacing(1.5f) + mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT), mLineSpacing(1.5f), mBgColor(NULL) { } TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Alignment align, - Eigen::Vector3f pos, Eigen::Vector2f size) : GuiComponent(window), - mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align), mLineSpacing(1.5f) + Eigen::Vector3f pos, Eigen::Vector2f size, unsigned int bgcolor) : GuiComponent(window), + mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align), mLineSpacing(1.5f), mBgColor(NULL) { setFont(font); setColor(color); + setBackgroundColor(bgcolor); setText(text); setPosition(pos); setSize(size); @@ -34,19 +36,34 @@ void TextComponent::setFont(const std::shared_ptr& font) onTextChanged(); } +// Set the color of the font/text void TextComponent::setColor(unsigned int color) { mColor = color; - - unsigned char opacity = mColor & 0x000000FF; - GuiComponent::setOpacity(opacity); - + mColorOpacity = mColor & 0x000000FF; onColorChanged(); } +// Set the color of the background box +void TextComponent::setBackgroundColor(unsigned int color) +{ + mBgColor = color; + mBgColorOpacity = mBgColor & 0x000000FF; +} + +// Scale the opacity void TextComponent::setOpacity(unsigned char opacity) { - mColor = (mColor & 0xFFFFFF00) | opacity; + // This method is mostly called to do fading in-out of the Text component element. + // Therefore, we assume here that opacity is a fractional value (expressed as an int 0-255), + // of the opacity originally set with setColor() or setBackgroundColor(). + + unsigned char o = (unsigned char)((float)opacity / 255.f * (float) mColorOpacity); + mColor = (mColor & 0xFFFFFF00) | (unsigned char) o; + + unsigned char bgo = (unsigned char)((float)opacity / 255.f * (float)mBgColorOpacity); + mBgColor = (mBgColor & 0xFFFFFF00) | (unsigned char)bgo; + onColorChanged(); GuiComponent::setOpacity(opacity); @@ -73,11 +90,11 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - /*Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); - dim = trans * dim - trans.translation(); - Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), - Eigen::Vector2i((int)(dim.x() + 0.5f), (int)(dim.y() + 0.5f))); - */ + if (mBgColor) + { + Renderer::drawRect(getPosition().x(), getPosition().y() - 1, + getSize().x(), getSize().y(), mBgColor); + } if(mTextCache) { @@ -90,7 +107,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) Renderer::setMatrix(trans); Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), 0xFF000033); } - + trans.translate(off); trans = roundMatrix(trans); Renderer::setMatrix(trans); @@ -111,11 +128,8 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) break; } } - mFont->renderTextCache(mTextCache.get()); } - - //Renderer::popClipRect(); } void TextComponent::calculateExtent() @@ -216,8 +230,11 @@ void TextComponent::applyTheme(const std::shared_ptr& theme, const st if(!elem) return; - if(properties & COLOR && elem->has("color")) - setColor(elem->get("color")); + if (properties & COLOR && elem->has("color")) + setColor(elem->get("color")); + + if (properties & COLOR && elem->has("backgroundColor")) + setBackgroundColor(elem->get("backgroundColor")); if(properties & ALIGNMENT && elem->has("alignment")) { diff --git a/es-core/src/components/TextComponent.h b/es-core/src/components/TextComponent.h index 4a4a33fcde..a0dc4a5543 100644 --- a/es-core/src/components/TextComponent.h +++ b/es-core/src/components/TextComponent.h @@ -16,7 +16,7 @@ class TextComponent : public GuiComponent public: TextComponent(Window* window); TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color = 0x000000FF, Alignment align = ALIGN_LEFT, - Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero()); + Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero(), unsigned int bgcolor = 0x00000000); void setFont(const std::shared_ptr& font); void setUppercase(bool uppercase); @@ -25,6 +25,7 @@ class TextComponent : public GuiComponent void setColor(unsigned int color); void setAlignment(Alignment align); void setLineSpacing(float spacing); + void setBackgroundColor(unsigned int color); void render(const Eigen::Affine3f& parentTrans) override; @@ -45,6 +46,10 @@ class TextComponent : public GuiComponent void onColorChanged(); unsigned int mColor; + unsigned int mBgColor; + unsigned char mColorOpacity; + unsigned char mBgColorOpacity; + std::shared_ptr mFont; bool mUppercase; Eigen::Matrix mAutoCalcExtent; From 003d9edbf962a58ad98fd80c661c4dc21d47d466 Mon Sep 17 00:00:00 2001 From: "D. Polders" Date: Fri, 24 Mar 2017 20:30:20 +0100 Subject: [PATCH 065/603] Add Explicit Gamelist Type selection to GUI menu. Currently supports Basic, Detailed, Video, and Automatic types. The Automatic type checks for the availability of first video's, then screenshots, defaulting to Basic view if none are present. --- es-app/src/guis/GuiMenu.cpp | 18 ++++++++ es-app/src/views/ViewController.cpp | 64 ++++++++++++++++++----------- es-app/src/views/ViewController.h | 9 ++++ es-core/src/Settings.cpp | 1 + 4 files changed, 69 insertions(+), 23 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 68b1a355d1..b210c283b1 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -160,6 +160,24 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN }); } + // GameList view style + auto gamelist_style = std::make_shared< OptionListComponent >(mWindow, "GAMELIST VIEW STYLE", false); + std::vector styles; + styles.push_back("automatic"); + styles.push_back("basic"); + styles.push_back("detailed"); + styles.push_back("video"); + for (auto it = styles.begin(); it != styles.end(); it++) + gamelist_style->add(*it, *it, Settings::getInstance()->getString("GamelistViewStyle") == *it); + s->addWithLabel("GAMELIST VIEW STYLE", gamelist_style); + s->addSaveFunc([gamelist_style] { + bool needReload = false; + if (Settings::getInstance()->getString("GamelistViewStyle") != gamelist_style->getSelected()) + needReload = true; + Settings::getInstance()->setString("GamelistViewStyle", gamelist_style->getSelected()); + if (needReload) + ViewController::get()->reloadAll(); + }); mWindow->pushGui(s); }); diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index cc83eece51..294f953cd1 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -231,33 +231,51 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste bool themeHasVideoView = system->getTheme()->hasView("video"); //decide type - bool detailed = false; - bool video = false; - std::vector files = system->getRootFolder()->getFilesRecursive(GAME | FOLDER); - for(auto it = files.begin(); it != files.end(); it++) + GameListViewType selectedViewType = AUTOMATIC; + + std::string viewPreference = Settings::getInstance()->getString("GamelistViewStyle"); + if (viewPreference.compare("basic") == 0) + selectedViewType = BASIC; + if (viewPreference.compare("detailed") == 0) + selectedViewType = DETAILED; + if (viewPreference.compare("video") == 0) + selectedViewType = VIDEO; + + if (selectedViewType == AUTOMATIC) { - if(themeHasVideoView && !(*it)->getVideoPath().empty()) - { - video = true; - break; - } - else if(!(*it)->getThumbnailPath().empty()) + std::vector files = system->getRootFolder()->getFilesRecursive(GAME | FOLDER); + for (auto it = files.begin(); it != files.end(); it++) { - detailed = true; - // Don't break out in case any subsequent files have video + if (themeHasVideoView && !(*it)->getVideoPath().empty()) + { + selectedViewType = VIDEO; + break; + } + else if (!(*it)->getThumbnailPath().empty()) + { + selectedViewType = DETAILED; + // Don't break out in case any subsequent files have video + } } } - - if (video) - // Create the view - view = std::shared_ptr(new VideoGameListView(mWindow, system->getRootFolder())); - else if(detailed) - view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); - else - view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); - - // uncomment for experimental "image grid" view - //view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); + + // Create the view + switch (selectedViewType) + { + case VIDEO: + view = std::shared_ptr(new VideoGameListView(mWindow, system->getRootFolder())); + break; + case DETAILED: + view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); + break; + // case GRID placeholder for future implementation. + // view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); + // break; + case BASIC: + default: + view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); + break; + } view->setTheme(system->getTheme()); diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 2658f44a9f..78051650f6 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -49,6 +49,15 @@ class ViewController : public GuiComponent GAME_LIST }; + enum GameListViewType + { + AUTOMATIC, + BASIC, + DETAILED, + VIDEO + // GRID TODO! + }; + struct State { ViewMode viewing; diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index df90ba7b65..0c4305dfe5 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -75,6 +75,7 @@ void Settings::setDefaults() mStringMap["ThemeSet"] = ""; mStringMap["ScreenSaverBehavior"] = "dim"; mStringMap["Scraper"] = "TheGamesDB"; + mStringMap["GamelistViewStyle"] = "automatic"; } template From 82ddaa1813420491a26fafbdf691ab0de06f4501 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 30 Mar 2017 21:47:11 +0100 Subject: [PATCH 066/603] added additional search path for libmali.so (needed on Ubuntu 16.04 / Odroid XU4) --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b98f16216..5961fff7bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,8 @@ endif() MESSAGE("Looking for libMali.so") if(EXISTS "/usr/lib/libMali.so" OR EXISTS "/usr/lib/arm-linux-gnueabihf/libMali.so" OR - EXISTS "/usr/lib/aarch64-linux-gnu/libMali.so") + EXISTS "/usr/lib/aarch64-linux-gnu/libMali.so" OR + EXISTS "/usr/lib/arm-linux-gnueabihf/mali-egl/libmali.so") MESSAGE("libMali.so found") set(GLSystem "OpenGL ES") else() From 61a493c38a4804903a3d61e41dc39e972e5508f1 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 3 Apr 2017 19:41:21 +0100 Subject: [PATCH 067/603] fix warning --- es-core/src/components/TextComponent.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index 9ab5effa54..c7b7a490d6 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -8,13 +8,13 @@ #include "Settings.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), - mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT), mLineSpacing(1.5f), mBgColor(NULL) + mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT), mLineSpacing(1.5f), mBgColor(0) { } TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Alignment align, Eigen::Vector3f pos, Eigen::Vector2f size, unsigned int bgcolor) : GuiComponent(window), - mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align), mLineSpacing(1.5f), mBgColor(NULL) + mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align), mLineSpacing(1.5f), mBgColor(0) { setFont(font); setColor(color); From 752472355a073853abf4f1b8b7609a27d3d1bd83 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 3 Apr 2017 19:45:28 +0100 Subject: [PATCH 068/603] convert pugixml to git submodule and update to v1.8.1 --- .gitmodules | 3 + es-app/src/Gamelist.cpp | 2 +- es-app/src/MetaData.h | 2 +- es-app/src/scrapers/GamesDBScraper.cpp | 2 +- es-core/src/InputConfig.h | 2 +- es-core/src/InputManager.cpp | 2 +- es-core/src/Settings.cpp | 2 +- es-core/src/ThemeData.cpp | 2 +- es-core/src/ThemeData.h | 2 +- external/pugixml | 1 + external/pugixml/CMakeLists.txt | 13 - external/pugixml/pugiconfig.hpp | 69 - external/pugixml/pugixml.hpp | 1265 --- external/pugixml/pugixml_license.txt | 27 - external/pugixml/src/pugixml.cpp | 10250 ----------------------- 15 files changed, 12 insertions(+), 11632 deletions(-) create mode 100644 .gitmodules create mode 160000 external/pugixml delete mode 100644 external/pugixml/CMakeLists.txt delete mode 100644 external/pugixml/pugiconfig.hpp delete mode 100644 external/pugixml/pugixml.hpp delete mode 100644 external/pugixml/pugixml_license.txt delete mode 100644 external/pugixml/src/pugixml.cpp diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..ab38f31f31 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "external/pugixml"] + path = external/pugixml + url = https://github.com/zeux/pugixml.git diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index dacf88fd4f..e5bc7da3bc 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -1,6 +1,6 @@ #include "Gamelist.h" #include "SystemData.h" -#include "pugixml/pugixml.hpp" +#include "pugixml/src/pugixml.hpp" #include #include "Log.h" #include "Settings.h" diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index df444e9d4c..f9b867450d 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -1,6 +1,6 @@ #pragma once -#include "pugixml/pugixml.hpp" +#include "pugixml/src/pugixml.hpp" #include #include #include "GuiComponent.h" diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 74ecc37b75..80a679e982 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -1,6 +1,6 @@ #include "scrapers/GamesDBScraper.h" #include "Log.h" -#include "pugixml/pugixml.hpp" +#include "pugixml/src/pugixml.hpp" #include "MetaData.h" #include "Settings.h" #include "Util.h" diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index 4fa3980ac6..ca2b9ece85 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -6,7 +6,7 @@ #include #include #include -#include "pugixml/pugixml.hpp" +#include "pugixml/src/pugixml.hpp" #define DEVICE_KEYBOARD -1 diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index f03fbc14ec..3bc7574166 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -3,7 +3,7 @@ #include "Settings.h" #include "Window.h" #include "Log.h" -#include "pugixml/pugixml.hpp" +#include "pugixml/src/pugixml.hpp" #include #include "platform.h" diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index df90ba7b65..05c286dba3 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -1,6 +1,6 @@ #include "Settings.h" #include "Log.h" -#include "pugixml/pugixml.hpp" +#include "pugixml/src/pugixml.hpp" #include "platform.h" #include #include diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index ae00a0b205..50958b11f8 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -5,7 +5,7 @@ #include "resources/TextureResource.h" #include "Log.h" #include "Settings.h" -#include "pugixml/pugixml.hpp" +#include "pugixml/src/pugixml.hpp" #include #include "components/ImageComponent.h" diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 082b736849..8231e07ede 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -9,7 +9,7 @@ #include #include #include -#include "pugixml/pugixml.hpp" +#include "pugixml/src/pugixml.hpp" #include "GuiComponent.h" template diff --git a/external/pugixml b/external/pugixml new file mode 160000 index 0000000000..d2deb420bc --- /dev/null +++ b/external/pugixml @@ -0,0 +1 @@ +Subproject commit d2deb420bc70369faa12785df2b5dd4d390e523d diff --git a/external/pugixml/CMakeLists.txt b/external/pugixml/CMakeLists.txt deleted file mode 100644 index fb01783b12..0000000000 --- a/external/pugixml/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -project("pugixml") - -set(PUGI_HEADERS - ${CMAKE_CURRENT_SOURCE_DIR}/pugiconfig.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/pugixml.hpp -) - -set(PUGI_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/src/pugixml.cpp -) - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}) -add_library(pugixml STATIC ${PUGI_SOURCES} ${PUG_HEADERS}) diff --git a/external/pugixml/pugiconfig.hpp b/external/pugixml/pugiconfig.hpp deleted file mode 100644 index c2196715cd..0000000000 --- a/external/pugixml/pugiconfig.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/** - * pugixml parser - version 1.2 - * -------------------------------------------------------- - * Copyright (C) 2006-2012, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) - * Report bugs and download new versions at http://pugixml.org/ - * - * This library is distributed under the MIT License. See notice at the end - * of this file. - * - * This work is based on the pugxml parser, which is: - * Copyright (C) 2003, by Kristen Wegner (kristen@tima.net) - */ - -#ifndef HEADER_PUGICONFIG_HPP -#define HEADER_PUGICONFIG_HPP - -// Uncomment this to enable wchar_t mode -// #define PUGIXML_WCHAR_MODE - -// Uncomment this to disable XPath -// #define PUGIXML_NO_XPATH - -// Uncomment this to disable STL -// #define PUGIXML_NO_STL - -// Uncomment this to disable exceptions -// #define PUGIXML_NO_EXCEPTIONS - -// Set this to control attributes for public classes/functions, i.e.: -// #define PUGIXML_API __declspec(dllexport) // to export all public symbols from DLL -// #define PUGIXML_CLASS __declspec(dllimport) // to import all classes from DLL -// #define PUGIXML_FUNCTION __fastcall // to set calling conventions to all public functions to fastcall -// In absence of PUGIXML_CLASS/PUGIXML_FUNCTION definitions PUGIXML_API is used instead - -// Uncomment this to switch to header-only version -// #define PUGIXML_HEADER_ONLY -// #include "pugixml.cpp" - -// Tune these constants to adjust memory-related behavior -// #define PUGIXML_MEMORY_PAGE_SIZE 32768 -// #define PUGIXML_MEMORY_OUTPUT_STACK 10240 -// #define PUGIXML_MEMORY_XPATH_PAGE_SIZE 4096 - -#endif - -/** - * Copyright (c) 2006-2012 Arseny Kapoulkine - * - * 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. - */ diff --git a/external/pugixml/pugixml.hpp b/external/pugixml/pugixml.hpp deleted file mode 100644 index 77b4dcf474..0000000000 --- a/external/pugixml/pugixml.hpp +++ /dev/null @@ -1,1265 +0,0 @@ -/** - * pugixml parser - version 1.2 - * -------------------------------------------------------- - * Copyright (C) 2006-2012, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) - * Report bugs and download new versions at http://pugixml.org/ - * - * This library is distributed under the MIT License. See notice at the end - * of this file. - * - * This work is based on the pugxml parser, which is: - * Copyright (C) 2003, by Kristen Wegner (kristen@tima.net) - */ - -#ifndef PUGIXML_VERSION -// Define version macro; evaluates to major * 100 + minor so that it's safe to use in less-than comparisons -# define PUGIXML_VERSION 120 -#endif - -// Include user configuration file (this can define various configuration macros) -#include "pugiconfig.hpp" - -#ifndef HEADER_PUGIXML_HPP -#define HEADER_PUGIXML_HPP - -// Include stddef.h for size_t and ptrdiff_t -#include - -// Include exception header for XPath -#if !defined(PUGIXML_NO_XPATH) && !defined(PUGIXML_NO_EXCEPTIONS) -# include -#endif - -// Include STL headers -#ifndef PUGIXML_NO_STL -# include -# include -# include -#endif - -// Macro for deprecated features -#ifndef PUGIXML_DEPRECATED -# if defined(__GNUC__) -# define PUGIXML_DEPRECATED __attribute__((deprecated)) -# elif defined(_MSC_VER) && _MSC_VER >= 1300 -# define PUGIXML_DEPRECATED __declspec(deprecated) -# else -# define PUGIXML_DEPRECATED -# endif -#endif - -// If no API is defined, assume default -#ifndef PUGIXML_API -# define PUGIXML_API -#endif - -// If no API for classes is defined, assume default -#ifndef PUGIXML_CLASS -# define PUGIXML_CLASS PUGIXML_API -#endif - -// If no API for functions is defined, assume default -#ifndef PUGIXML_FUNCTION -# define PUGIXML_FUNCTION PUGIXML_API -#endif - -// Character interface macros -#ifdef PUGIXML_WCHAR_MODE -# define PUGIXML_TEXT(t) L ## t -# define PUGIXML_CHAR wchar_t -#else -# define PUGIXML_TEXT(t) t -# define PUGIXML_CHAR char -#endif - -namespace pugi -{ - // Character type used for all internal storage and operations; depends on PUGIXML_WCHAR_MODE - typedef PUGIXML_CHAR char_t; - -#ifndef PUGIXML_NO_STL - // String type used for operations that work with STL string; depends on PUGIXML_WCHAR_MODE - typedef std::basic_string, std::allocator > string_t; -#endif -} - -// The PugiXML namespace -namespace pugi -{ - // Tree node types - enum xml_node_type - { - node_null, // Empty (null) node handle - node_document, // A document tree's absolute root - node_element, // Element tag, i.e. '' - node_pcdata, // Plain character data, i.e. 'text' - node_cdata, // Character data, i.e. '' - node_comment, // Comment tag, i.e. '' - node_pi, // Processing instruction, i.e. '' - node_declaration, // Document declaration, i.e. '' - node_doctype // Document type declaration, i.e. '' - }; - - // Parsing options - - // Minimal parsing mode (equivalent to turning all other flags off). - // Only elements and PCDATA sections are added to the DOM tree, no text conversions are performed. - const unsigned int parse_minimal = 0x0000; - - // This flag determines if processing instructions (node_pi) are added to the DOM tree. This flag is off by default. - const unsigned int parse_pi = 0x0001; - - // This flag determines if comments (node_comment) are added to the DOM tree. This flag is off by default. - const unsigned int parse_comments = 0x0002; - - // This flag determines if CDATA sections (node_cdata) are added to the DOM tree. This flag is on by default. - const unsigned int parse_cdata = 0x0004; - - // This flag determines if plain character data (node_pcdata) that consist only of whitespace are added to the DOM tree. - // This flag is off by default; turning it on usually results in slower parsing and more memory consumption. - const unsigned int parse_ws_pcdata = 0x0008; - - // This flag determines if character and entity references are expanded during parsing. This flag is on by default. - const unsigned int parse_escapes = 0x0010; - - // This flag determines if EOL characters are normalized (converted to #xA) during parsing. This flag is on by default. - const unsigned int parse_eol = 0x0020; - - // This flag determines if attribute values are normalized using CDATA normalization rules during parsing. This flag is on by default. - const unsigned int parse_wconv_attribute = 0x0040; - - // This flag determines if attribute values are normalized using NMTOKENS normalization rules during parsing. This flag is off by default. - const unsigned int parse_wnorm_attribute = 0x0080; - - // This flag determines if document declaration (node_declaration) is added to the DOM tree. This flag is off by default. - const unsigned int parse_declaration = 0x0100; - - // This flag determines if document type declaration (node_doctype) is added to the DOM tree. This flag is off by default. - const unsigned int parse_doctype = 0x0200; - - // This flag determines if plain character data (node_pcdata) that is the only child of the parent node and that consists only - // of whitespace is added to the DOM tree. - // This flag is off by default; turning it on may result in slower parsing and more memory consumption. - const unsigned int parse_ws_pcdata_single = 0x0400; - - // The default parsing mode. - // Elements, PCDATA and CDATA sections are added to the DOM tree, character/reference entities are expanded, - // End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. - const unsigned int parse_default = parse_cdata | parse_escapes | parse_wconv_attribute | parse_eol; - - // The full parsing mode. - // Nodes of all types are added to the DOM tree, character/reference entities are expanded, - // End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. - const unsigned int parse_full = parse_default | parse_pi | parse_comments | parse_declaration | parse_doctype; - - // These flags determine the encoding of input data for XML document - enum xml_encoding - { - encoding_auto, // Auto-detect input encoding using BOM or < / class xml_object_range - { - public: - typedef It const_iterator; - - xml_object_range(It b, It e): _begin(b), _end(e) - { - } - - It begin() const { return _begin; } - It end() const { return _end; } - - private: - It _begin, _end; - }; - - // Writer interface for node printing (see xml_node::print) - class PUGIXML_CLASS xml_writer - { - public: - virtual ~xml_writer() {} - - // Write memory chunk into stream/file/whatever - virtual void write(const void* data, size_t size) = 0; - }; - - // xml_writer implementation for FILE* - class PUGIXML_CLASS xml_writer_file: public xml_writer - { - public: - // Construct writer from a FILE* object; void* is used to avoid header dependencies on stdio - xml_writer_file(void* file); - - virtual void write(const void* data, size_t size); - - private: - void* file; - }; - - #ifndef PUGIXML_NO_STL - // xml_writer implementation for streams - class PUGIXML_CLASS xml_writer_stream: public xml_writer - { - public: - // Construct writer from an output stream object - xml_writer_stream(std::basic_ostream >& stream); - xml_writer_stream(std::basic_ostream >& stream); - - virtual void write(const void* data, size_t size); - - private: - std::basic_ostream >* narrow_stream; - std::basic_ostream >* wide_stream; - }; - #endif - - // A light-weight handle for manipulating attributes in DOM tree - class PUGIXML_CLASS xml_attribute - { - friend class xml_attribute_iterator; - friend class xml_node; - - private: - xml_attribute_struct* _attr; - - typedef void (*unspecified_bool_type)(xml_attribute***); - - public: - // Default constructor. Constructs an empty attribute. - xml_attribute(); - - // Constructs attribute from internal pointer - explicit xml_attribute(xml_attribute_struct* attr); - - // Safe bool conversion operator - operator unspecified_bool_type() const; - - // Borland C++ workaround - bool operator!() const; - - // Comparison operators (compares wrapped attribute pointers) - bool operator==(const xml_attribute& r) const; - bool operator!=(const xml_attribute& r) const; - bool operator<(const xml_attribute& r) const; - bool operator>(const xml_attribute& r) const; - bool operator<=(const xml_attribute& r) const; - bool operator>=(const xml_attribute& r) const; - - // Check if attribute is empty - bool empty() const; - - // Get attribute name/value, or "" if attribute is empty - const char_t* name() const; - const char_t* value() const; - - // Get attribute value, or the default value if attribute is empty - const char_t* as_string(const char_t* def = PUGIXML_TEXT("")) const; - - // Get attribute value as a number, or the default value if conversion did not succeed or attribute is empty - int as_int(int def = 0) const; - unsigned int as_uint(unsigned int def = 0) const; - double as_double(double def = 0) const; - float as_float(float def = 0) const; - - // Get attribute value as bool (returns true if first character is in '1tTyY' set), or the default value if attribute is empty - bool as_bool(bool def = false) const; - - // Set attribute name/value (returns false if attribute is empty or there is not enough memory) - bool set_name(const char_t* rhs); - bool set_value(const char_t* rhs); - - // Set attribute value with type conversion (numbers are converted to strings, boolean is converted to "true"/"false") - bool set_value(int rhs); - bool set_value(unsigned int rhs); - bool set_value(double rhs); - bool set_value(bool rhs); - - // Set attribute value (equivalent to set_value without error checking) - xml_attribute& operator=(const char_t* rhs); - xml_attribute& operator=(int rhs); - xml_attribute& operator=(unsigned int rhs); - xml_attribute& operator=(double rhs); - xml_attribute& operator=(bool rhs); - - // Get next/previous attribute in the attribute list of the parent node - xml_attribute next_attribute() const; - xml_attribute previous_attribute() const; - - // Get hash value (unique for handles to the same object) - size_t hash_value() const; - - // Get internal pointer - xml_attribute_struct* internal_object() const; - }; - -#ifdef __BORLANDC__ - // Borland C++ workaround - bool PUGIXML_FUNCTION operator&&(const xml_attribute& lhs, bool rhs); - bool PUGIXML_FUNCTION operator||(const xml_attribute& lhs, bool rhs); -#endif - - // A light-weight handle for manipulating nodes in DOM tree - class PUGIXML_CLASS xml_node - { - friend class xml_attribute_iterator; - friend class xml_node_iterator; - friend class xml_named_node_iterator; - - protected: - xml_node_struct* _root; - - typedef void (*unspecified_bool_type)(xml_node***); - - public: - // Default constructor. Constructs an empty node. - xml_node(); - - // Constructs node from internal pointer - explicit xml_node(xml_node_struct* p); - - // Safe bool conversion operator - operator unspecified_bool_type() const; - - // Borland C++ workaround - bool operator!() const; - - // Comparison operators (compares wrapped node pointers) - bool operator==(const xml_node& r) const; - bool operator!=(const xml_node& r) const; - bool operator<(const xml_node& r) const; - bool operator>(const xml_node& r) const; - bool operator<=(const xml_node& r) const; - bool operator>=(const xml_node& r) const; - - // Check if node is empty. - bool empty() const; - - // Get node type - xml_node_type type() const; - - // Get node name/value, or "" if node is empty or it has no name/value - const char_t* name() const; - const char_t* value() const; - - // Get attribute list - xml_attribute first_attribute() const; - xml_attribute last_attribute() const; - - // Get children list - xml_node first_child() const; - xml_node last_child() const; - - // Get next/previous sibling in the children list of the parent node - xml_node next_sibling() const; - xml_node previous_sibling() const; - - // Get parent node - xml_node parent() const; - - // Get root of DOM tree this node belongs to - xml_node root() const; - - // Get text object for the current node - xml_text text() const; - - // Get child, attribute or next/previous sibling with the specified name - xml_node child(const char_t* name) const; - xml_attribute attribute(const char_t* name) const; - xml_node next_sibling(const char_t* name) const; - xml_node previous_sibling(const char_t* name) const; - - // Get child value of current node; that is, value of the first child node of type PCDATA/CDATA - const char_t* child_value() const; - - // Get child value of child with specified name. Equivalent to child(name).child_value(). - const char_t* child_value(const char_t* name) const; - - // Set node name/value (returns false if node is empty, there is not enough memory, or node can not have name/value) - bool set_name(const char_t* rhs); - bool set_value(const char_t* rhs); - - // Add attribute with specified name. Returns added attribute, or empty attribute on errors. - xml_attribute append_attribute(const char_t* name); - xml_attribute prepend_attribute(const char_t* name); - xml_attribute insert_attribute_after(const char_t* name, const xml_attribute& attr); - xml_attribute insert_attribute_before(const char_t* name, const xml_attribute& attr); - - // Add a copy of the specified attribute. Returns added attribute, or empty attribute on errors. - xml_attribute append_copy(const xml_attribute& proto); - xml_attribute prepend_copy(const xml_attribute& proto); - xml_attribute insert_copy_after(const xml_attribute& proto, const xml_attribute& attr); - xml_attribute insert_copy_before(const xml_attribute& proto, const xml_attribute& attr); - - // Add child node with specified type. Returns added node, or empty node on errors. - xml_node append_child(xml_node_type type = node_element); - xml_node prepend_child(xml_node_type type = node_element); - xml_node insert_child_after(xml_node_type type, const xml_node& node); - xml_node insert_child_before(xml_node_type type, const xml_node& node); - - // Add child element with specified name. Returns added node, or empty node on errors. - xml_node append_child(const char_t* name); - xml_node prepend_child(const char_t* name); - xml_node insert_child_after(const char_t* name, const xml_node& node); - xml_node insert_child_before(const char_t* name, const xml_node& node); - - // Add a copy of the specified node as a child. Returns added node, or empty node on errors. - xml_node append_copy(const xml_node& proto); - xml_node prepend_copy(const xml_node& proto); - xml_node insert_copy_after(const xml_node& proto, const xml_node& node); - xml_node insert_copy_before(const xml_node& proto, const xml_node& node); - - // Remove specified attribute - bool remove_attribute(const xml_attribute& a); - bool remove_attribute(const char_t* name); - - // Remove specified child - bool remove_child(const xml_node& n); - bool remove_child(const char_t* name); - - // Find attribute using predicate. Returns first attribute for which predicate returned true. - template xml_attribute find_attribute(Predicate pred) const - { - if (!_root) return xml_attribute(); - - for (xml_attribute attrib = first_attribute(); attrib; attrib = attrib.next_attribute()) - if (pred(attrib)) - return attrib; - - return xml_attribute(); - } - - // Find child node using predicate. Returns first child for which predicate returned true. - template xml_node find_child(Predicate pred) const - { - if (!_root) return xml_node(); - - for (xml_node node = first_child(); node; node = node.next_sibling()) - if (pred(node)) - return node; - - return xml_node(); - } - - // Find node from subtree using predicate. Returns first node from subtree (depth-first), for which predicate returned true. - template xml_node find_node(Predicate pred) const - { - if (!_root) return xml_node(); - - xml_node cur = first_child(); - - while (cur._root && cur._root != _root) - { - if (pred(cur)) return cur; - - if (cur.first_child()) cur = cur.first_child(); - else if (cur.next_sibling()) cur = cur.next_sibling(); - else - { - while (!cur.next_sibling() && cur._root != _root) cur = cur.parent(); - - if (cur._root != _root) cur = cur.next_sibling(); - } - } - - return xml_node(); - } - - // Find child node by attribute name/value - xml_node find_child_by_attribute(const char_t* name, const char_t* attr_name, const char_t* attr_value) const; - xml_node find_child_by_attribute(const char_t* attr_name, const char_t* attr_value) const; - - #ifndef PUGIXML_NO_STL - // Get the absolute node path from root as a text string. - string_t path(char_t delimiter = '/') const; - #endif - - // Search for a node by path consisting of node names and . or .. elements. - xml_node first_element_by_path(const char_t* path, char_t delimiter = '/') const; - - // Recursively traverse subtree with xml_tree_walker - bool traverse(xml_tree_walker& walker); - - #ifndef PUGIXML_NO_XPATH - // Select single node by evaluating XPath query. Returns first node from the resulting node set. - xpath_node select_single_node(const char_t* query, xpath_variable_set* variables = 0) const; - xpath_node select_single_node(const xpath_query& query) const; - - // Select node set by evaluating XPath query - xpath_node_set select_nodes(const char_t* query, xpath_variable_set* variables = 0) const; - xpath_node_set select_nodes(const xpath_query& query) const; - #endif - - // Print subtree using a writer object - void print(xml_writer& writer, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto, unsigned int depth = 0) const; - - #ifndef PUGIXML_NO_STL - // Print subtree to stream - void print(std::basic_ostream >& os, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto, unsigned int depth = 0) const; - void print(std::basic_ostream >& os, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, unsigned int depth = 0) const; - #endif - - // Child nodes iterators - typedef xml_node_iterator iterator; - - iterator begin() const; - iterator end() const; - - // Attribute iterators - typedef xml_attribute_iterator attribute_iterator; - - attribute_iterator attributes_begin() const; - attribute_iterator attributes_end() const; - - // Range-based for support - xml_object_range children() const; - xml_object_range children(const char_t* name) const; - xml_object_range attributes() const; - - // Get node offset in parsed file/string (in char_t units) for debugging purposes - ptrdiff_t offset_debug() const; - - // Get hash value (unique for handles to the same object) - size_t hash_value() const; - - // Get internal pointer - xml_node_struct* internal_object() const; - }; - -#ifdef __BORLANDC__ - // Borland C++ workaround - bool PUGIXML_FUNCTION operator&&(const xml_node& lhs, bool rhs); - bool PUGIXML_FUNCTION operator||(const xml_node& lhs, bool rhs); -#endif - - // A helper for working with text inside PCDATA nodes - class PUGIXML_CLASS xml_text - { - friend class xml_node; - - xml_node_struct* _root; - - typedef void (*unspecified_bool_type)(xml_text***); - - explicit xml_text(xml_node_struct* root); - - xml_node_struct* _data_new(); - xml_node_struct* _data() const; - - public: - // Default constructor. Constructs an empty object. - xml_text(); - - // Safe bool conversion operator - operator unspecified_bool_type() const; - - // Borland C++ workaround - bool operator!() const; - - // Check if text object is empty - bool empty() const; - - // Get text, or "" if object is empty - const char_t* get() const; - - // Get text, or the default value if object is empty - const char_t* as_string(const char_t* def = PUGIXML_TEXT("")) const; - - // Get text as a number, or the default value if conversion did not succeed or object is empty - int as_int(int def = 0) const; - unsigned int as_uint(unsigned int def = 0) const; - double as_double(double def = 0) const; - float as_float(float def = 0) const; - - // Get text as bool (returns true if first character is in '1tTyY' set), or the default value if object is empty - bool as_bool(bool def = false) const; - - // Set text (returns false if object is empty or there is not enough memory) - bool set(const char_t* rhs); - - // Set text with type conversion (numbers are converted to strings, boolean is converted to "true"/"false") - bool set(int rhs); - bool set(unsigned int rhs); - bool set(double rhs); - bool set(bool rhs); - - // Set text (equivalent to set without error checking) - xml_text& operator=(const char_t* rhs); - xml_text& operator=(int rhs); - xml_text& operator=(unsigned int rhs); - xml_text& operator=(double rhs); - xml_text& operator=(bool rhs); - - // Get the data node (node_pcdata or node_cdata) for this object - xml_node data() const; - }; - -#ifdef __BORLANDC__ - // Borland C++ workaround - bool PUGIXML_FUNCTION operator&&(const xml_text& lhs, bool rhs); - bool PUGIXML_FUNCTION operator||(const xml_text& lhs, bool rhs); -#endif - - // Child node iterator (a bidirectional iterator over a collection of xml_node) - class PUGIXML_CLASS xml_node_iterator - { - friend class xml_node; - - private: - mutable xml_node _wrap; - xml_node _parent; - - xml_node_iterator(xml_node_struct* ref, xml_node_struct* parent); - - public: - // Iterator traits - typedef ptrdiff_t difference_type; - typedef xml_node value_type; - typedef xml_node* pointer; - typedef xml_node& reference; - - #ifndef PUGIXML_NO_STL - typedef std::bidirectional_iterator_tag iterator_category; - #endif - - // Default constructor - xml_node_iterator(); - - // Construct an iterator which points to the specified node - xml_node_iterator(const xml_node& node); - - // Iterator operators - bool operator==(const xml_node_iterator& rhs) const; - bool operator!=(const xml_node_iterator& rhs) const; - - xml_node& operator*() const; - xml_node* operator->() const; - - const xml_node_iterator& operator++(); - xml_node_iterator operator++(int); - - const xml_node_iterator& operator--(); - xml_node_iterator operator--(int); - }; - - // Attribute iterator (a bidirectional iterator over a collection of xml_attribute) - class PUGIXML_CLASS xml_attribute_iterator - { - friend class xml_node; - - private: - mutable xml_attribute _wrap; - xml_node _parent; - - xml_attribute_iterator(xml_attribute_struct* ref, xml_node_struct* parent); - - public: - // Iterator traits - typedef ptrdiff_t difference_type; - typedef xml_attribute value_type; - typedef xml_attribute* pointer; - typedef xml_attribute& reference; - - #ifndef PUGIXML_NO_STL - typedef std::bidirectional_iterator_tag iterator_category; - #endif - - // Default constructor - xml_attribute_iterator(); - - // Construct an iterator which points to the specified attribute - xml_attribute_iterator(const xml_attribute& attr, const xml_node& parent); - - // Iterator operators - bool operator==(const xml_attribute_iterator& rhs) const; - bool operator!=(const xml_attribute_iterator& rhs) const; - - xml_attribute& operator*() const; - xml_attribute* operator->() const; - - const xml_attribute_iterator& operator++(); - xml_attribute_iterator operator++(int); - - const xml_attribute_iterator& operator--(); - xml_attribute_iterator operator--(int); - }; - - // Named node range helper - class xml_named_node_iterator - { - public: - // Iterator traits - typedef ptrdiff_t difference_type; - typedef xml_node value_type; - typedef xml_node* pointer; - typedef xml_node& reference; - - #ifndef PUGIXML_NO_STL - typedef std::forward_iterator_tag iterator_category; - #endif - - // Default constructor - xml_named_node_iterator(); - - // Construct an iterator which points to the specified node - xml_named_node_iterator(const xml_node& node, const char_t* name); - - // Iterator operators - bool operator==(const xml_named_node_iterator& rhs) const; - bool operator!=(const xml_named_node_iterator& rhs) const; - - xml_node& operator*() const; - xml_node* operator->() const; - - const xml_named_node_iterator& operator++(); - xml_named_node_iterator operator++(int); - - private: - mutable xml_node _node; - const char_t* _name; - }; - - // Abstract tree walker class (see xml_node::traverse) - class PUGIXML_CLASS xml_tree_walker - { - friend class xml_node; - - private: - int _depth; - - protected: - // Get current traversal depth - int depth() const; - - public: - xml_tree_walker(); - virtual ~xml_tree_walker(); - - // Callback that is called when traversal begins - virtual bool begin(xml_node& node); - - // Callback that is called for each node traversed - virtual bool for_each(xml_node& node) = 0; - - // Callback that is called when traversal ends - virtual bool end(xml_node& node); - }; - - // Parsing status, returned as part of xml_parse_result object - enum xml_parse_status - { - status_ok = 0, // No error - - status_file_not_found, // File was not found during load_file() - status_io_error, // Error reading from file/stream - status_out_of_memory, // Could not allocate memory - status_internal_error, // Internal error occurred - - status_unrecognized_tag, // Parser could not determine tag type - - status_bad_pi, // Parsing error occurred while parsing document declaration/processing instruction - status_bad_comment, // Parsing error occurred while parsing comment - status_bad_cdata, // Parsing error occurred while parsing CDATA section - status_bad_doctype, // Parsing error occurred while parsing document type declaration - status_bad_pcdata, // Parsing error occurred while parsing PCDATA section - status_bad_start_element, // Parsing error occurred while parsing start element tag - status_bad_attribute, // Parsing error occurred while parsing element attribute - status_bad_end_element, // Parsing error occurred while parsing end element tag - status_end_element_mismatch // There was a mismatch of start-end tags (closing tag had incorrect name, some tag was not closed or there was an excessive closing tag) - }; - - // Parsing result - struct PUGIXML_CLASS xml_parse_result - { - // Parsing status (see xml_parse_status) - xml_parse_status status; - - // Last parsed offset (in char_t units from start of input data) - ptrdiff_t offset; - - // Source document encoding - xml_encoding encoding; - - // Default constructor, initializes object to failed state - xml_parse_result(); - - // Cast to bool operator - operator bool() const; - - // Get error description - const char* description() const; - }; - - // Document class (DOM tree root) - class PUGIXML_CLASS xml_document: public xml_node - { - private: - char_t* _buffer; - - char _memory[192]; - - // Non-copyable semantics - xml_document(const xml_document&); - const xml_document& operator=(const xml_document&); - - void create(); - void destroy(); - - xml_parse_result load_buffer_impl(void* contents, size_t size, unsigned int options, xml_encoding encoding, bool is_mutable, bool own); - - public: - // Default constructor, makes empty document - xml_document(); - - // Destructor, invalidates all node/attribute handles to this document - ~xml_document(); - - // Removes all nodes, leaving the empty document - void reset(); - - // Removes all nodes, then copies the entire contents of the specified document - void reset(const xml_document& proto); - - #ifndef PUGIXML_NO_STL - // Load document from stream. - xml_parse_result load(std::basic_istream >& stream, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); - xml_parse_result load(std::basic_istream >& stream, unsigned int options = parse_default); - #endif - - // Load document from zero-terminated string. No encoding conversions are applied. - xml_parse_result load(const char_t* contents, unsigned int options = parse_default); - - // Load document from file - xml_parse_result load_file(const char* path, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); - xml_parse_result load_file(const wchar_t* path, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); - - // Load document from buffer. Copies/converts the buffer, so it may be deleted or changed after the function returns. - xml_parse_result load_buffer(const void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); - - // Load document from buffer, using the buffer for in-place parsing (the buffer is modified and used for storage of document data). - // You should ensure that buffer data will persist throughout the document's lifetime, and free the buffer memory manually once document is destroyed. - xml_parse_result load_buffer_inplace(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); - - // Load document from buffer, using the buffer for in-place parsing (the buffer is modified and used for storage of document data). - // You should allocate the buffer with pugixml allocation function; document will free the buffer when it is no longer needed (you can't use it anymore). - xml_parse_result load_buffer_inplace_own(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); - - // Save XML document to writer (semantics is slightly different from xml_node::print, see documentation for details). - void save(xml_writer& writer, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; - - #ifndef PUGIXML_NO_STL - // Save XML document to stream (semantics is slightly different from xml_node::print, see documentation for details). - void save(std::basic_ostream >& stream, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; - void save(std::basic_ostream >& stream, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default) const; - #endif - - // Save XML to file - bool save_file(const char* path, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; - bool save_file(const wchar_t* path, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; - - // Get document element - xml_node document_element() const; - }; - -#ifndef PUGIXML_NO_XPATH - // XPath query return type - enum xpath_value_type - { - xpath_type_none, // Unknown type (query failed to compile) - xpath_type_node_set, // Node set (xpath_node_set) - xpath_type_number, // Number - xpath_type_string, // String - xpath_type_boolean // Boolean - }; - - // XPath parsing result - struct PUGIXML_CLASS xpath_parse_result - { - // Error message (0 if no error) - const char* error; - - // Last parsed offset (in char_t units from string start) - ptrdiff_t offset; - - // Default constructor, initializes object to failed state - xpath_parse_result(); - - // Cast to bool operator - operator bool() const; - - // Get error description - const char* description() const; - }; - - // A single XPath variable - class PUGIXML_CLASS xpath_variable - { - friend class xpath_variable_set; - - protected: - xpath_value_type _type; - xpath_variable* _next; - - xpath_variable(); - - // Non-copyable semantics - xpath_variable(const xpath_variable&); - xpath_variable& operator=(const xpath_variable&); - - public: - // Get variable name - const char_t* name() const; - - // Get variable type - xpath_value_type type() const; - - // Get variable value; no type conversion is performed, default value (false, NaN, empty string, empty node set) is returned on type mismatch error - bool get_boolean() const; - double get_number() const; - const char_t* get_string() const; - const xpath_node_set& get_node_set() const; - - // Set variable value; no type conversion is performed, false is returned on type mismatch error - bool set(bool value); - bool set(double value); - bool set(const char_t* value); - bool set(const xpath_node_set& value); - }; - - // A set of XPath variables - class PUGIXML_CLASS xpath_variable_set - { - private: - xpath_variable* _data[64]; - - // Non-copyable semantics - xpath_variable_set(const xpath_variable_set&); - xpath_variable_set& operator=(const xpath_variable_set&); - - xpath_variable* find(const char_t* name) const; - - public: - // Default constructor/destructor - xpath_variable_set(); - ~xpath_variable_set(); - - // Add a new variable or get the existing one, if the types match - xpath_variable* add(const char_t* name, xpath_value_type type); - - // Set value of an existing variable; no type conversion is performed, false is returned if there is no such variable or if types mismatch - bool set(const char_t* name, bool value); - bool set(const char_t* name, double value); - bool set(const char_t* name, const char_t* value); - bool set(const char_t* name, const xpath_node_set& value); - - // Get existing variable by name - xpath_variable* get(const char_t* name); - const xpath_variable* get(const char_t* name) const; - }; - - // A compiled XPath query object - class PUGIXML_CLASS xpath_query - { - private: - void* _impl; - xpath_parse_result _result; - - typedef void (*unspecified_bool_type)(xpath_query***); - - // Non-copyable semantics - xpath_query(const xpath_query&); - xpath_query& operator=(const xpath_query&); - - public: - // Construct a compiled object from XPath expression. - // If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on compilation errors. - explicit xpath_query(const char_t* query, xpath_variable_set* variables = 0); - - // Destructor - ~xpath_query(); - - // Get query expression return type - xpath_value_type return_type() const; - - // Evaluate expression as boolean value in the specified context; performs type conversion if necessary. - // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. - bool evaluate_boolean(const xpath_node& n) const; - - // Evaluate expression as double value in the specified context; performs type conversion if necessary. - // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. - double evaluate_number(const xpath_node& n) const; - - #ifndef PUGIXML_NO_STL - // Evaluate expression as string value in the specified context; performs type conversion if necessary. - // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. - string_t evaluate_string(const xpath_node& n) const; - #endif - - // Evaluate expression as string value in the specified context; performs type conversion if necessary. - // At most capacity characters are written to the destination buffer, full result size is returned (includes terminating zero). - // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. - // If PUGIXML_NO_EXCEPTIONS is defined, returns empty set instead. - size_t evaluate_string(char_t* buffer, size_t capacity, const xpath_node& n) const; - - // Evaluate expression as node set in the specified context. - // If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on type mismatch and std::bad_alloc on out of memory errors. - // If PUGIXML_NO_EXCEPTIONS is defined, returns empty node set instead. - xpath_node_set evaluate_node_set(const xpath_node& n) const; - - // Get parsing result (used to get compilation errors in PUGIXML_NO_EXCEPTIONS mode) - const xpath_parse_result& result() const; - - // Safe bool conversion operator - operator unspecified_bool_type() const; - - // Borland C++ workaround - bool operator!() const; - }; - - #ifndef PUGIXML_NO_EXCEPTIONS - // XPath exception class - class PUGIXML_CLASS xpath_exception: public std::exception - { - private: - xpath_parse_result _result; - - public: - // Construct exception from parse result - explicit xpath_exception(const xpath_parse_result& result); - - // Get error message - virtual const char* what() const throw(); - - // Get parse result - const xpath_parse_result& result() const; - }; - #endif - - // XPath node class (either xml_node or xml_attribute) - class PUGIXML_CLASS xpath_node - { - private: - xml_node _node; - xml_attribute _attribute; - - typedef void (*unspecified_bool_type)(xpath_node***); - - public: - // Default constructor; constructs empty XPath node - xpath_node(); - - // Construct XPath node from XML node/attribute - xpath_node(const xml_node& node); - xpath_node(const xml_attribute& attribute, const xml_node& parent); - - // Get node/attribute, if any - xml_node node() const; - xml_attribute attribute() const; - - // Get parent of contained node/attribute - xml_node parent() const; - - // Safe bool conversion operator - operator unspecified_bool_type() const; - - // Borland C++ workaround - bool operator!() const; - - // Comparison operators - bool operator==(const xpath_node& n) const; - bool operator!=(const xpath_node& n) const; - }; - -#ifdef __BORLANDC__ - // Borland C++ workaround - bool PUGIXML_FUNCTION operator&&(const xpath_node& lhs, bool rhs); - bool PUGIXML_FUNCTION operator||(const xpath_node& lhs, bool rhs); -#endif - - // A fixed-size collection of XPath nodes - class PUGIXML_CLASS xpath_node_set - { - public: - // Collection type - enum type_t - { - type_unsorted, // Not ordered - type_sorted, // Sorted by document order (ascending) - type_sorted_reverse // Sorted by document order (descending) - }; - - // Constant iterator type - typedef const xpath_node* const_iterator; - - // Default constructor. Constructs empty set. - xpath_node_set(); - - // Constructs a set from iterator range; data is not checked for duplicates and is not sorted according to provided type, so be careful - xpath_node_set(const_iterator begin, const_iterator end, type_t type = type_unsorted); - - // Destructor - ~xpath_node_set(); - - // Copy constructor/assignment operator - xpath_node_set(const xpath_node_set& ns); - xpath_node_set& operator=(const xpath_node_set& ns); - - // Get collection type - type_t type() const; - - // Get collection size - size_t size() const; - - // Indexing operator - const xpath_node& operator[](size_t index) const; - - // Collection iterators - const_iterator begin() const; - const_iterator end() const; - - // Sort the collection in ascending/descending order by document order - void sort(bool reverse = false); - - // Get first node in the collection by document order - xpath_node first() const; - - // Check if collection is empty - bool empty() const; - - private: - type_t _type; - - xpath_node _storage; - - xpath_node* _begin; - xpath_node* _end; - - void _assign(const_iterator begin, const_iterator end); - }; -#endif - -#ifndef PUGIXML_NO_STL - // Convert wide string to UTF8 - std::basic_string, std::allocator > PUGIXML_FUNCTION as_utf8(const wchar_t* str); - std::basic_string, std::allocator > PUGIXML_FUNCTION as_utf8(const std::basic_string, std::allocator >& str); - - // Convert UTF8 to wide string - std::basic_string, std::allocator > PUGIXML_FUNCTION as_wide(const char* str); - std::basic_string, std::allocator > PUGIXML_FUNCTION as_wide(const std::basic_string, std::allocator >& str); -#endif - - // Memory allocation function interface; returns pointer to allocated memory or NULL on failure - typedef void* (*allocation_function)(size_t size); - - // Memory deallocation function interface - typedef void (*deallocation_function)(void* ptr); - - // Override default memory management functions. All subsequent allocations/deallocations will be performed via supplied functions. - void PUGIXML_FUNCTION set_memory_management_functions(allocation_function allocate, deallocation_function deallocate); - - // Get current memory management functions - allocation_function PUGIXML_FUNCTION get_memory_allocation_function(); - deallocation_function PUGIXML_FUNCTION get_memory_deallocation_function(); -} - -#if !defined(PUGIXML_NO_STL) && (defined(_MSC_VER) || defined(__ICC)) -namespace std -{ - // Workarounds for (non-standard) iterator category detection for older versions (MSVC7/IC8 and earlier) - std::bidirectional_iterator_tag PUGIXML_FUNCTION _Iter_cat(const pugi::xml_node_iterator&); - std::bidirectional_iterator_tag PUGIXML_FUNCTION _Iter_cat(const pugi::xml_attribute_iterator&); - std::forward_iterator_tag PUGIXML_FUNCTION _Iter_cat(const pugi::xml_named_node_iterator&); -} -#endif - -#if !defined(PUGIXML_NO_STL) && defined(__SUNPRO_CC) -namespace std -{ - // Workarounds for (non-standard) iterator category detection - std::bidirectional_iterator_tag PUGIXML_FUNCTION __iterator_category(const pugi::xml_node_iterator&); - std::bidirectional_iterator_tag PUGIXML_FUNCTION __iterator_category(const pugi::xml_attribute_iterator&); - std::forward_iterator_tag PUGIXML_FUNCTION __iterator_category(const pugi::xml_named_node_iterator&); -} -#endif - -#endif - -/** - * Copyright (c) 2006-2012 Arseny Kapoulkine - * - * 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. - */ diff --git a/external/pugixml/pugixml_license.txt b/external/pugixml/pugixml_license.txt deleted file mode 100644 index ad0bc4607e..0000000000 --- a/external/pugixml/pugixml_license.txt +++ /dev/null @@ -1,27 +0,0 @@ -pugixml 1.2 - an XML processing library - - -This library is distributed under the MIT License: - -Copyright (c) 2006-2012 Arseny Kapoulkine - -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. diff --git a/external/pugixml/src/pugixml.cpp b/external/pugixml/src/pugixml.cpp deleted file mode 100644 index 4035ab1cfd..0000000000 --- a/external/pugixml/src/pugixml.cpp +++ /dev/null @@ -1,10250 +0,0 @@ -/** - * pugixml parser - version 1.2 - * -------------------------------------------------------- - * Copyright (C) 2006-2012, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) - * Report bugs and download new versions at http://pugixml.org/ - * - * This library is distributed under the MIT License. See notice at the end - * of this file. - * - * This work is based on the pugxml parser, which is: - * Copyright (C) 2003, by Kristen Wegner (kristen@tima.net) - */ - -#ifndef SOURCE_PUGIXML_CPP -#define SOURCE_PUGIXML_CPP - -#include "pugixml.hpp" - -#include -#include -#include -#include -#include - -#ifndef PUGIXML_NO_XPATH -# include -# include -# ifdef PUGIXML_NO_EXCEPTIONS -# include -# endif -#endif - -#ifndef PUGIXML_NO_STL -# include -# include -# include -#endif - -// For placement new -#include - -#ifdef _MSC_VER -# pragma warning(push) -# pragma warning(disable: 4127) // conditional expression is constant -# pragma warning(disable: 4324) // structure was padded due to __declspec(align()) -# pragma warning(disable: 4611) // interaction between '_setjmp' and C++ object destruction is non-portable -# pragma warning(disable: 4702) // unreachable code -# pragma warning(disable: 4996) // this function or variable may be unsafe -# pragma warning(disable: 4793) // function compiled as native: presence of '_setjmp' makes a function unmanaged -#endif - -#ifdef __INTEL_COMPILER -# pragma warning(disable: 177) // function was declared but never referenced -# pragma warning(disable: 279) // controlling expression is constant -# pragma warning(disable: 1478 1786) // function was declared "deprecated" -# pragma warning(disable: 1684) // conversion from pointer to same-sized integral type -#endif - -#if defined(__BORLANDC__) && defined(PUGIXML_HEADER_ONLY) -# pragma warn -8080 // symbol is declared but never used; disabling this inside push/pop bracket does not make the warning go away -#endif - -#ifdef __BORLANDC__ -# pragma option push -# pragma warn -8008 // condition is always false -# pragma warn -8066 // unreachable code -#endif - -#ifdef __SNC__ -// Using diag_push/diag_pop does not disable the warnings inside templates due to a compiler bug -# pragma diag_suppress=178 // function was declared but never referenced -# pragma diag_suppress=237 // controlling expression is constant -#endif - -// Inlining controls -#if defined(_MSC_VER) && _MSC_VER >= 1300 -# define PUGI__NO_INLINE __declspec(noinline) -#elif defined(__GNUC__) -# define PUGI__NO_INLINE __attribute__((noinline)) -#else -# define PUGI__NO_INLINE -#endif - -// Simple static assertion -#define PUGI__STATIC_ASSERT(cond) { static const char condition_failed[(cond) ? 1 : -1] = {0}; (void)condition_failed[0]; } - -// Digital Mars C++ bug workaround for passing char loaded from memory via stack -#ifdef __DMC__ -# define PUGI__DMC_VOLATILE volatile -#else -# define PUGI__DMC_VOLATILE -#endif - -// Borland C++ bug workaround for not defining ::memcpy depending on header include order (can't always use std::memcpy because some compilers don't have it at all) -#if defined(__BORLANDC__) && !defined(__MEM_H_USING_LIST) -using std::memcpy; -using std::memmove; -#endif - -// In some environments MSVC is a compiler but the CRT lacks certain MSVC-specific features -#if defined(_MSC_VER) && !defined(__S3E__) -# define PUGI__MSVC_CRT_VERSION _MSC_VER -#endif - -#ifdef PUGIXML_HEADER_ONLY -# define PUGI__NS_BEGIN namespace pugi { namespace impl { -# define PUGI__NS_END } } -# define PUGI__FN inline -# define PUGI__FN_NO_INLINE inline -#else -# if defined(_MSC_VER) && _MSC_VER < 1300 // MSVC6 seems to have an amusing bug with anonymous namespaces inside namespaces -# define PUGI__NS_BEGIN namespace pugi { namespace impl { -# define PUGI__NS_END } } -# else -# define PUGI__NS_BEGIN namespace pugi { namespace impl { namespace { -# define PUGI__NS_END } } } -# endif -# define PUGI__FN -# define PUGI__FN_NO_INLINE PUGI__NO_INLINE -#endif - -// uintptr_t -#if !defined(_MSC_VER) || _MSC_VER >= 1600 -# include -#else -# ifndef _UINTPTR_T_DEFINED -// No native uintptr_t in MSVC6 and in some WinCE versions -typedef size_t uintptr_t; -#define _UINTPTR_T_DEFINED -# endif -PUGI__NS_BEGIN - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; -PUGI__NS_END -#endif - -// Memory allocation -PUGI__NS_BEGIN - PUGI__FN void* default_allocate(size_t size) - { - return malloc(size); - } - - PUGI__FN void default_deallocate(void* ptr) - { - free(ptr); - } - - template - struct xml_memory_management_function_storage - { - static allocation_function allocate; - static deallocation_function deallocate; - }; - - template allocation_function xml_memory_management_function_storage::allocate = default_allocate; - template deallocation_function xml_memory_management_function_storage::deallocate = default_deallocate; - - typedef xml_memory_management_function_storage xml_memory; -PUGI__NS_END - -// String utilities -PUGI__NS_BEGIN - // Get string length - PUGI__FN size_t strlength(const char_t* s) - { - assert(s); - - #ifdef PUGIXML_WCHAR_MODE - return wcslen(s); - #else - return strlen(s); - #endif - } - - // Compare two strings - PUGI__FN bool strequal(const char_t* src, const char_t* dst) - { - assert(src && dst); - - #ifdef PUGIXML_WCHAR_MODE - return wcscmp(src, dst) == 0; - #else - return strcmp(src, dst) == 0; - #endif - } - - // Compare lhs with [rhs_begin, rhs_end) - PUGI__FN bool strequalrange(const char_t* lhs, const char_t* rhs, size_t count) - { - for (size_t i = 0; i < count; ++i) - if (lhs[i] != rhs[i]) - return false; - - return lhs[count] == 0; - } - -#ifdef PUGIXML_WCHAR_MODE - // Convert string to wide string, assuming all symbols are ASCII - PUGI__FN void widen_ascii(wchar_t* dest, const char* source) - { - for (const char* i = source; *i; ++i) *dest++ = *i; - *dest = 0; - } -#endif -PUGI__NS_END - -#if !defined(PUGIXML_NO_STL) || !defined(PUGIXML_NO_XPATH) -// auto_ptr-like buffer holder for exception recovery -PUGI__NS_BEGIN - struct buffer_holder - { - void* data; - void (*deleter)(void*); - - buffer_holder(void* data_, void (*deleter_)(void*)): data(data_), deleter(deleter_) - { - } - - ~buffer_holder() - { - if (data) deleter(data); - } - - void* release() - { - void* result = data; - data = 0; - return result; - } - }; -PUGI__NS_END -#endif - -PUGI__NS_BEGIN - static const size_t xml_memory_page_size = - #ifdef PUGIXML_MEMORY_PAGE_SIZE - PUGIXML_MEMORY_PAGE_SIZE - #else - 32768 - #endif - ; - - static const uintptr_t xml_memory_page_alignment = 32; - static const uintptr_t xml_memory_page_pointer_mask = ~(xml_memory_page_alignment - 1); - static const uintptr_t xml_memory_page_name_allocated_mask = 16; - static const uintptr_t xml_memory_page_value_allocated_mask = 8; - static const uintptr_t xml_memory_page_type_mask = 7; - - struct xml_allocator; - - struct xml_memory_page - { - static xml_memory_page* construct(void* memory) - { - if (!memory) return 0; //$ redundant, left for performance - - xml_memory_page* result = static_cast(memory); - - result->allocator = 0; - result->memory = 0; - result->prev = 0; - result->next = 0; - result->busy_size = 0; - result->freed_size = 0; - - return result; - } - - xml_allocator* allocator; - - void* memory; - - xml_memory_page* prev; - xml_memory_page* next; - - size_t busy_size; - size_t freed_size; - - char data[1]; - }; - - struct xml_memory_string_header - { - uint16_t page_offset; // offset from page->data - uint16_t full_size; // 0 if string occupies whole page - }; - - struct xml_allocator - { - xml_allocator(xml_memory_page* root): _root(root), _busy_size(root->busy_size) - { - } - - xml_memory_page* allocate_page(size_t data_size) - { - size_t size = offsetof(xml_memory_page, data) + data_size; - - // allocate block with some alignment, leaving memory for worst-case padding - void* memory = xml_memory::allocate(size + xml_memory_page_alignment); - if (!memory) return 0; - - // align upwards to page boundary - void* page_memory = reinterpret_cast((reinterpret_cast(memory) + (xml_memory_page_alignment - 1)) & ~(xml_memory_page_alignment - 1)); - - // prepare page structure - xml_memory_page* page = xml_memory_page::construct(page_memory); - - page->memory = memory; - page->allocator = _root->allocator; - - return page; - } - - static void deallocate_page(xml_memory_page* page) - { - xml_memory::deallocate(page->memory); - } - - void* allocate_memory_oob(size_t size, xml_memory_page*& out_page); - - void* allocate_memory(size_t size, xml_memory_page*& out_page) - { - if (_busy_size + size > xml_memory_page_size) return allocate_memory_oob(size, out_page); - - void* buf = _root->data + _busy_size; - - _busy_size += size; - - out_page = _root; - - return buf; - } - - void deallocate_memory(void* ptr, size_t size, xml_memory_page* page) - { - if (page == _root) page->busy_size = _busy_size; - - assert(ptr >= page->data && ptr < page->data + page->busy_size); - (void)!ptr; - - page->freed_size += size; - assert(page->freed_size <= page->busy_size); - - if (page->freed_size == page->busy_size) - { - if (page->next == 0) - { - assert(_root == page); - - // top page freed, just reset sizes - page->busy_size = page->freed_size = 0; - _busy_size = 0; - } - else - { - assert(_root != page); - assert(page->prev); - - // remove from the list - page->prev->next = page->next; - page->next->prev = page->prev; - - // deallocate - deallocate_page(page); - } - } - } - - char_t* allocate_string(size_t length) - { - // allocate memory for string and header block - size_t size = sizeof(xml_memory_string_header) + length * sizeof(char_t); - - // round size up to pointer alignment boundary - size_t full_size = (size + (sizeof(void*) - 1)) & ~(sizeof(void*) - 1); - - xml_memory_page* page; - xml_memory_string_header* header = static_cast(allocate_memory(full_size, page)); - - if (!header) return 0; - - // setup header - ptrdiff_t page_offset = reinterpret_cast(header) - page->data; - - assert(page_offset >= 0 && page_offset < (1 << 16)); - header->page_offset = static_cast(page_offset); - - // full_size == 0 for large strings that occupy the whole page - assert(full_size < (1 << 16) || (page->busy_size == full_size && page_offset == 0)); - header->full_size = static_cast(full_size < (1 << 16) ? full_size : 0); - - // round-trip through void* to avoid 'cast increases required alignment of target type' warning - // header is guaranteed a pointer-sized alignment, which should be enough for char_t - return static_cast(static_cast(header + 1)); - } - - void deallocate_string(char_t* string) - { - // this function casts pointers through void* to avoid 'cast increases required alignment of target type' warnings - // we're guaranteed the proper (pointer-sized) alignment on the input string if it was allocated via allocate_string - - // get header - xml_memory_string_header* header = static_cast(static_cast(string)) - 1; - - // deallocate - size_t page_offset = offsetof(xml_memory_page, data) + header->page_offset; - xml_memory_page* page = reinterpret_cast(static_cast(reinterpret_cast(header) - page_offset)); - - // if full_size == 0 then this string occupies the whole page - size_t full_size = header->full_size == 0 ? page->busy_size : header->full_size; - - deallocate_memory(header, full_size, page); - } - - xml_memory_page* _root; - size_t _busy_size; - }; - - PUGI__FN_NO_INLINE void* xml_allocator::allocate_memory_oob(size_t size, xml_memory_page*& out_page) - { - const size_t large_allocation_threshold = xml_memory_page_size / 4; - - xml_memory_page* page = allocate_page(size <= large_allocation_threshold ? xml_memory_page_size : size); - out_page = page; - - if (!page) return 0; - - if (size <= large_allocation_threshold) - { - _root->busy_size = _busy_size; - - // insert page at the end of linked list - page->prev = _root; - _root->next = page; - _root = page; - - _busy_size = size; - } - else - { - // insert page before the end of linked list, so that it is deleted as soon as possible - // the last page is not deleted even if it's empty (see deallocate_memory) - assert(_root->prev); - - page->prev = _root->prev; - page->next = _root; - - _root->prev->next = page; - _root->prev = page; - } - - // allocate inside page - page->busy_size = size; - - return page->data; - } -PUGI__NS_END - -namespace pugi -{ - /// A 'name=value' XML attribute structure. - struct xml_attribute_struct - { - /// Default ctor - xml_attribute_struct(impl::xml_memory_page* page): header(reinterpret_cast(page)), name(0), value(0), prev_attribute_c(0), next_attribute(0) - { - } - - uintptr_t header; - - char_t* name; ///< Pointer to attribute name. - char_t* value; ///< Pointer to attribute value. - - xml_attribute_struct* prev_attribute_c; ///< Previous attribute (cyclic list) - xml_attribute_struct* next_attribute; ///< Next attribute - }; - - /// An XML document tree node. - struct xml_node_struct - { - /// Default ctor - /// \param type - node type - xml_node_struct(impl::xml_memory_page* page, xml_node_type type): header(reinterpret_cast(page) | (type - 1)), parent(0), name(0), value(0), first_child(0), prev_sibling_c(0), next_sibling(0), first_attribute(0) - { - } - - uintptr_t header; - - xml_node_struct* parent; ///< Pointer to parent - - char_t* name; ///< Pointer to element name. - char_t* value; ///< Pointer to any associated string data. - - xml_node_struct* first_child; ///< First child - - xml_node_struct* prev_sibling_c; ///< Left brother (cyclic list) - xml_node_struct* next_sibling; ///< Right brother - - xml_attribute_struct* first_attribute; ///< First attribute - }; -} - -PUGI__NS_BEGIN - struct xml_document_struct: public xml_node_struct, public xml_allocator - { - xml_document_struct(xml_memory_page* page): xml_node_struct(page, node_document), xml_allocator(page), buffer(0) - { - } - - const char_t* buffer; - }; - - inline xml_allocator& get_allocator(const xml_node_struct* node) - { - assert(node); - - return *reinterpret_cast(node->header & xml_memory_page_pointer_mask)->allocator; - } -PUGI__NS_END - -// Low-level DOM operations -PUGI__NS_BEGIN - inline xml_attribute_struct* allocate_attribute(xml_allocator& alloc) - { - xml_memory_page* page; - void* memory = alloc.allocate_memory(sizeof(xml_attribute_struct), page); - - return new (memory) xml_attribute_struct(page); - } - - inline xml_node_struct* allocate_node(xml_allocator& alloc, xml_node_type type) - { - xml_memory_page* page; - void* memory = alloc.allocate_memory(sizeof(xml_node_struct), page); - - return new (memory) xml_node_struct(page, type); - } - - inline void destroy_attribute(xml_attribute_struct* a, xml_allocator& alloc) - { - uintptr_t header = a->header; - - if (header & impl::xml_memory_page_name_allocated_mask) alloc.deallocate_string(a->name); - if (header & impl::xml_memory_page_value_allocated_mask) alloc.deallocate_string(a->value); - - alloc.deallocate_memory(a, sizeof(xml_attribute_struct), reinterpret_cast(header & xml_memory_page_pointer_mask)); - } - - inline void destroy_node(xml_node_struct* n, xml_allocator& alloc) - { - uintptr_t header = n->header; - - if (header & impl::xml_memory_page_name_allocated_mask) alloc.deallocate_string(n->name); - if (header & impl::xml_memory_page_value_allocated_mask) alloc.deallocate_string(n->value); - - for (xml_attribute_struct* attr = n->first_attribute; attr; ) - { - xml_attribute_struct* next = attr->next_attribute; - - destroy_attribute(attr, alloc); - - attr = next; - } - - for (xml_node_struct* child = n->first_child; child; ) - { - xml_node_struct* next = child->next_sibling; - - destroy_node(child, alloc); - - child = next; - } - - alloc.deallocate_memory(n, sizeof(xml_node_struct), reinterpret_cast(header & xml_memory_page_pointer_mask)); - } - - PUGI__FN_NO_INLINE xml_node_struct* append_node(xml_node_struct* node, xml_allocator& alloc, xml_node_type type = node_element) - { - xml_node_struct* child = allocate_node(alloc, type); - if (!child) return 0; - - child->parent = node; - - xml_node_struct* first_child = node->first_child; - - if (first_child) - { - xml_node_struct* last_child = first_child->prev_sibling_c; - - last_child->next_sibling = child; - child->prev_sibling_c = last_child; - first_child->prev_sibling_c = child; - } - else - { - node->first_child = child; - child->prev_sibling_c = child; - } - - return child; - } - - PUGI__FN_NO_INLINE xml_attribute_struct* append_attribute_ll(xml_node_struct* node, xml_allocator& alloc) - { - xml_attribute_struct* a = allocate_attribute(alloc); - if (!a) return 0; - - xml_attribute_struct* first_attribute = node->first_attribute; - - if (first_attribute) - { - xml_attribute_struct* last_attribute = first_attribute->prev_attribute_c; - - last_attribute->next_attribute = a; - a->prev_attribute_c = last_attribute; - first_attribute->prev_attribute_c = a; - } - else - { - node->first_attribute = a; - a->prev_attribute_c = a; - } - - return a; - } -PUGI__NS_END - -// Helper classes for code generation -PUGI__NS_BEGIN - struct opt_false - { - enum { value = 0 }; - }; - - struct opt_true - { - enum { value = 1 }; - }; -PUGI__NS_END - -// Unicode utilities -PUGI__NS_BEGIN - inline uint16_t endian_swap(uint16_t value) - { - return static_cast(((value & 0xff) << 8) | (value >> 8)); - } - - inline uint32_t endian_swap(uint32_t value) - { - return ((value & 0xff) << 24) | ((value & 0xff00) << 8) | ((value & 0xff0000) >> 8) | (value >> 24); - } - - struct utf8_counter - { - typedef size_t value_type; - - static value_type low(value_type result, uint32_t ch) - { - // U+0000..U+007F - if (ch < 0x80) return result + 1; - // U+0080..U+07FF - else if (ch < 0x800) return result + 2; - // U+0800..U+FFFF - else return result + 3; - } - - static value_type high(value_type result, uint32_t) - { - // U+10000..U+10FFFF - return result + 4; - } - }; - - struct utf8_writer - { - typedef uint8_t* value_type; - - static value_type low(value_type result, uint32_t ch) - { - // U+0000..U+007F - if (ch < 0x80) - { - *result = static_cast(ch); - return result + 1; - } - // U+0080..U+07FF - else if (ch < 0x800) - { - result[0] = static_cast(0xC0 | (ch >> 6)); - result[1] = static_cast(0x80 | (ch & 0x3F)); - return result + 2; - } - // U+0800..U+FFFF - else - { - result[0] = static_cast(0xE0 | (ch >> 12)); - result[1] = static_cast(0x80 | ((ch >> 6) & 0x3F)); - result[2] = static_cast(0x80 | (ch & 0x3F)); - return result + 3; - } - } - - static value_type high(value_type result, uint32_t ch) - { - // U+10000..U+10FFFF - result[0] = static_cast(0xF0 | (ch >> 18)); - result[1] = static_cast(0x80 | ((ch >> 12) & 0x3F)); - result[2] = static_cast(0x80 | ((ch >> 6) & 0x3F)); - result[3] = static_cast(0x80 | (ch & 0x3F)); - return result + 4; - } - - static value_type any(value_type result, uint32_t ch) - { - return (ch < 0x10000) ? low(result, ch) : high(result, ch); - } - }; - - struct utf16_counter - { - typedef size_t value_type; - - static value_type low(value_type result, uint32_t) - { - return result + 1; - } - - static value_type high(value_type result, uint32_t) - { - return result + 2; - } - }; - - struct utf16_writer - { - typedef uint16_t* value_type; - - static value_type low(value_type result, uint32_t ch) - { - *result = static_cast(ch); - - return result + 1; - } - - static value_type high(value_type result, uint32_t ch) - { - uint32_t msh = static_cast(ch - 0x10000) >> 10; - uint32_t lsh = static_cast(ch - 0x10000) & 0x3ff; - - result[0] = static_cast(0xD800 + msh); - result[1] = static_cast(0xDC00 + lsh); - - return result + 2; - } - - static value_type any(value_type result, uint32_t ch) - { - return (ch < 0x10000) ? low(result, ch) : high(result, ch); - } - }; - - struct utf32_counter - { - typedef size_t value_type; - - static value_type low(value_type result, uint32_t) - { - return result + 1; - } - - static value_type high(value_type result, uint32_t) - { - return result + 1; - } - }; - - struct utf32_writer - { - typedef uint32_t* value_type; - - static value_type low(value_type result, uint32_t ch) - { - *result = ch; - - return result + 1; - } - - static value_type high(value_type result, uint32_t ch) - { - *result = ch; - - return result + 1; - } - - static value_type any(value_type result, uint32_t ch) - { - *result = ch; - - return result + 1; - } - }; - - struct latin1_writer - { - typedef uint8_t* value_type; - - static value_type low(value_type result, uint32_t ch) - { - *result = static_cast(ch > 255 ? '?' : ch); - - return result + 1; - } - - static value_type high(value_type result, uint32_t ch) - { - (void)ch; - - *result = '?'; - - return result + 1; - } - }; - - template struct wchar_selector; - - template <> struct wchar_selector<2> - { - typedef uint16_t type; - typedef utf16_counter counter; - typedef utf16_writer writer; - }; - - template <> struct wchar_selector<4> - { - typedef uint32_t type; - typedef utf32_counter counter; - typedef utf32_writer writer; - }; - - typedef wchar_selector::counter wchar_counter; - typedef wchar_selector::writer wchar_writer; - - template struct utf_decoder - { - static inline typename Traits::value_type decode_utf8_block(const uint8_t* data, size_t size, typename Traits::value_type result) - { - const uint8_t utf8_byte_mask = 0x3f; - - while (size) - { - uint8_t lead = *data; - - // 0xxxxxxx -> U+0000..U+007F - if (lead < 0x80) - { - result = Traits::low(result, lead); - data += 1; - size -= 1; - - // process aligned single-byte (ascii) blocks - if ((reinterpret_cast(data) & 3) == 0) - { - // round-trip through void* to silence 'cast increases required alignment of target type' warnings - while (size >= 4 && (*static_cast(static_cast(data)) & 0x80808080) == 0) - { - result = Traits::low(result, data[0]); - result = Traits::low(result, data[1]); - result = Traits::low(result, data[2]); - result = Traits::low(result, data[3]); - data += 4; - size -= 4; - } - } - } - // 110xxxxx -> U+0080..U+07FF - else if (static_cast(lead - 0xC0) < 0x20 && size >= 2 && (data[1] & 0xc0) == 0x80) - { - result = Traits::low(result, ((lead & ~0xC0) << 6) | (data[1] & utf8_byte_mask)); - data += 2; - size -= 2; - } - // 1110xxxx -> U+0800-U+FFFF - else if (static_cast(lead - 0xE0) < 0x10 && size >= 3 && (data[1] & 0xc0) == 0x80 && (data[2] & 0xc0) == 0x80) - { - result = Traits::low(result, ((lead & ~0xE0) << 12) | ((data[1] & utf8_byte_mask) << 6) | (data[2] & utf8_byte_mask)); - data += 3; - size -= 3; - } - // 11110xxx -> U+10000..U+10FFFF - else if (static_cast(lead - 0xF0) < 0x08 && size >= 4 && (data[1] & 0xc0) == 0x80 && (data[2] & 0xc0) == 0x80 && (data[3] & 0xc0) == 0x80) - { - result = Traits::high(result, ((lead & ~0xF0) << 18) | ((data[1] & utf8_byte_mask) << 12) | ((data[2] & utf8_byte_mask) << 6) | (data[3] & utf8_byte_mask)); - data += 4; - size -= 4; - } - // 10xxxxxx or 11111xxx -> invalid - else - { - data += 1; - size -= 1; - } - } - - return result; - } - - static inline typename Traits::value_type decode_utf16_block(const uint16_t* data, size_t size, typename Traits::value_type result) - { - const uint16_t* end = data + size; - - while (data < end) - { - uint16_t lead = opt_swap::value ? endian_swap(*data) : *data; - - // U+0000..U+D7FF - if (lead < 0xD800) - { - result = Traits::low(result, lead); - data += 1; - } - // U+E000..U+FFFF - else if (static_cast(lead - 0xE000) < 0x2000) - { - result = Traits::low(result, lead); - data += 1; - } - // surrogate pair lead - else if (static_cast(lead - 0xD800) < 0x400 && data + 1 < end) - { - uint16_t next = opt_swap::value ? endian_swap(data[1]) : data[1]; - - if (static_cast(next - 0xDC00) < 0x400) - { - result = Traits::high(result, 0x10000 + ((lead & 0x3ff) << 10) + (next & 0x3ff)); - data += 2; - } - else - { - data += 1; - } - } - else - { - data += 1; - } - } - - return result; - } - - static inline typename Traits::value_type decode_utf32_block(const uint32_t* data, size_t size, typename Traits::value_type result) - { - const uint32_t* end = data + size; - - while (data < end) - { - uint32_t lead = opt_swap::value ? endian_swap(*data) : *data; - - // U+0000..U+FFFF - if (lead < 0x10000) - { - result = Traits::low(result, lead); - data += 1; - } - // U+10000..U+10FFFF - else - { - result = Traits::high(result, lead); - data += 1; - } - } - - return result; - } - - static inline typename Traits::value_type decode_latin1_block(const uint8_t* data, size_t size, typename Traits::value_type result) - { - for (size_t i = 0; i < size; ++i) - { - result = Traits::low(result, data[i]); - } - - return result; - } - - static inline typename Traits::value_type decode_wchar_block_impl(const uint16_t* data, size_t size, typename Traits::value_type result) - { - return decode_utf16_block(data, size, result); - } - - static inline typename Traits::value_type decode_wchar_block_impl(const uint32_t* data, size_t size, typename Traits::value_type result) - { - return decode_utf32_block(data, size, result); - } - - static inline typename Traits::value_type decode_wchar_block(const wchar_t* data, size_t size, typename Traits::value_type result) - { - return decode_wchar_block_impl(reinterpret_cast::type*>(data), size, result); - } - }; - - template PUGI__FN void convert_utf_endian_swap(T* result, const T* data, size_t length) - { - for (size_t i = 0; i < length; ++i) result[i] = endian_swap(data[i]); - } - -#ifdef PUGIXML_WCHAR_MODE - PUGI__FN void convert_wchar_endian_swap(wchar_t* result, const wchar_t* data, size_t length) - { - for (size_t i = 0; i < length; ++i) result[i] = static_cast(endian_swap(static_cast::type>(data[i]))); - } -#endif -PUGI__NS_END - -PUGI__NS_BEGIN - enum chartype_t - { - ct_parse_pcdata = 1, // \0, &, \r, < - ct_parse_attr = 2, // \0, &, \r, ', " - ct_parse_attr_ws = 4, // \0, &, \r, ', ", \n, tab - ct_space = 8, // \r, \n, space, tab - ct_parse_cdata = 16, // \0, ], >, \r - ct_parse_comment = 32, // \0, -, >, \r - ct_symbol = 64, // Any symbol > 127, a-z, A-Z, 0-9, _, :, -, . - ct_start_symbol = 128 // Any symbol > 127, a-z, A-Z, _, : - }; - - static const unsigned char chartype_table[256] = - { - 55, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 0, 0, 63, 0, 0, // 0-15 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31 - 8, 0, 6, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 96, 64, 0, // 32-47 - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 192, 0, 1, 0, 48, 0, // 48-63 - 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, // 64-79 - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 0, 16, 0, 192, // 80-95 - 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, // 96-111 - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 0, 0, 0, 0, // 112-127 - - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, // 128+ - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192 - }; - - enum chartypex_t - { - ctx_special_pcdata = 1, // Any symbol >= 0 and < 32 (except \t, \r, \n), &, <, > - ctx_special_attr = 2, // Any symbol >= 0 and < 32 (except \t), &, <, >, " - ctx_start_symbol = 4, // Any symbol > 127, a-z, A-Z, _ - ctx_digit = 8, // 0-9 - ctx_symbol = 16 // Any symbol > 127, a-z, A-Z, 0-9, _, -, . - }; - - static const unsigned char chartypex_table[256] = - { - 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 2, 3, 3, 2, 3, 3, // 0-15 - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 16-31 - 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 16, 16, 0, // 32-47 - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 3, 0, 3, 0, // 48-63 - - 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 64-79 - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 20, // 80-95 - 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 96-111 - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, // 112-127 - - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 128+ - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 - }; - -#ifdef PUGIXML_WCHAR_MODE - #define PUGI__IS_CHARTYPE_IMPL(c, ct, table) ((static_cast(c) < 128 ? table[static_cast(c)] : table[128]) & (ct)) -#else - #define PUGI__IS_CHARTYPE_IMPL(c, ct, table) (table[static_cast(c)] & (ct)) -#endif - - #define PUGI__IS_CHARTYPE(c, ct) PUGI__IS_CHARTYPE_IMPL(c, ct, chartype_table) - #define PUGI__IS_CHARTYPEX(c, ct) PUGI__IS_CHARTYPE_IMPL(c, ct, chartypex_table) - - PUGI__FN bool is_little_endian() - { - unsigned int ui = 1; - - return *reinterpret_cast(&ui) == 1; - } - - PUGI__FN xml_encoding get_wchar_encoding() - { - PUGI__STATIC_ASSERT(sizeof(wchar_t) == 2 || sizeof(wchar_t) == 4); - - if (sizeof(wchar_t) == 2) - return is_little_endian() ? encoding_utf16_le : encoding_utf16_be; - else - return is_little_endian() ? encoding_utf32_le : encoding_utf32_be; - } - - PUGI__FN xml_encoding guess_buffer_encoding(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) - { - // look for BOM in first few bytes - if (d0 == 0 && d1 == 0 && d2 == 0xfe && d3 == 0xff) return encoding_utf32_be; - if (d0 == 0xff && d1 == 0xfe && d2 == 0 && d3 == 0) return encoding_utf32_le; - if (d0 == 0xfe && d1 == 0xff) return encoding_utf16_be; - if (d0 == 0xff && d1 == 0xfe) return encoding_utf16_le; - if (d0 == 0xef && d1 == 0xbb && d2 == 0xbf) return encoding_utf8; - - // look for <, (contents); - - PUGI__DMC_VOLATILE uint8_t d0 = data[0], d1 = data[1], d2 = data[2], d3 = data[3]; - - return guess_buffer_encoding(d0, d1, d2, d3); - } - - PUGI__FN bool get_mutable_buffer(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, bool is_mutable) - { - if (is_mutable) - { - out_buffer = static_cast(const_cast(contents)); - } - else - { - void* buffer = xml_memory::allocate(size > 0 ? size : 1); - if (!buffer) return false; - - memcpy(buffer, contents, size); - - out_buffer = static_cast(buffer); - } - - out_length = size / sizeof(char_t); - - return true; - } - -#ifdef PUGIXML_WCHAR_MODE - PUGI__FN bool need_endian_swap_utf(xml_encoding le, xml_encoding re) - { - return (le == encoding_utf16_be && re == encoding_utf16_le) || (le == encoding_utf16_le && re == encoding_utf16_be) || - (le == encoding_utf32_be && re == encoding_utf32_le) || (le == encoding_utf32_le && re == encoding_utf32_be); - } - - PUGI__FN bool convert_buffer_endian_swap(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, bool is_mutable) - { - const char_t* data = static_cast(contents); - - if (is_mutable) - { - out_buffer = const_cast(data); - } - else - { - out_buffer = static_cast(xml_memory::allocate(size > 0 ? size : 1)); - if (!out_buffer) return false; - } - - out_length = size / sizeof(char_t); - - convert_wchar_endian_swap(out_buffer, data, out_length); - - return true; - } - - PUGI__FN bool convert_buffer_utf8(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size) - { - const uint8_t* data = static_cast(contents); - - // first pass: get length in wchar_t units - out_length = utf_decoder::decode_utf8_block(data, size, 0); - - // allocate buffer of suitable length - out_buffer = static_cast(xml_memory::allocate((out_length > 0 ? out_length : 1) * sizeof(char_t))); - if (!out_buffer) return false; - - // second pass: convert utf8 input to wchar_t - wchar_writer::value_type out_begin = reinterpret_cast(out_buffer); - wchar_writer::value_type out_end = utf_decoder::decode_utf8_block(data, size, out_begin); - - assert(out_end == out_begin + out_length); - (void)!out_end; - - return true; - } - - template PUGI__FN bool convert_buffer_utf16(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, opt_swap) - { - const uint16_t* data = static_cast(contents); - size_t length = size / sizeof(uint16_t); - - // first pass: get length in wchar_t units - out_length = utf_decoder::decode_utf16_block(data, length, 0); - - // allocate buffer of suitable length - out_buffer = static_cast(xml_memory::allocate((out_length > 0 ? out_length : 1) * sizeof(char_t))); - if (!out_buffer) return false; - - // second pass: convert utf16 input to wchar_t - wchar_writer::value_type out_begin = reinterpret_cast(out_buffer); - wchar_writer::value_type out_end = utf_decoder::decode_utf16_block(data, length, out_begin); - - assert(out_end == out_begin + out_length); - (void)!out_end; - - return true; - } - - template PUGI__FN bool convert_buffer_utf32(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, opt_swap) - { - const uint32_t* data = static_cast(contents); - size_t length = size / sizeof(uint32_t); - - // first pass: get length in wchar_t units - out_length = utf_decoder::decode_utf32_block(data, length, 0); - - // allocate buffer of suitable length - out_buffer = static_cast(xml_memory::allocate((out_length > 0 ? out_length : 1) * sizeof(char_t))); - if (!out_buffer) return false; - - // second pass: convert utf32 input to wchar_t - wchar_writer::value_type out_begin = reinterpret_cast(out_buffer); - wchar_writer::value_type out_end = utf_decoder::decode_utf32_block(data, length, out_begin); - - assert(out_end == out_begin + out_length); - (void)!out_end; - - return true; - } - - PUGI__FN bool convert_buffer_latin1(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size) - { - const uint8_t* data = static_cast(contents); - - // get length in wchar_t units - out_length = size; - - // allocate buffer of suitable length - out_buffer = static_cast(xml_memory::allocate((out_length > 0 ? out_length : 1) * sizeof(char_t))); - if (!out_buffer) return false; - - // convert latin1 input to wchar_t - wchar_writer::value_type out_begin = reinterpret_cast(out_buffer); - wchar_writer::value_type out_end = utf_decoder::decode_latin1_block(data, size, out_begin); - - assert(out_end == out_begin + out_length); - (void)!out_end; - - return true; - } - - PUGI__FN bool convert_buffer(char_t*& out_buffer, size_t& out_length, xml_encoding encoding, const void* contents, size_t size, bool is_mutable) - { - // get native encoding - xml_encoding wchar_encoding = get_wchar_encoding(); - - // fast path: no conversion required - if (encoding == wchar_encoding) return get_mutable_buffer(out_buffer, out_length, contents, size, is_mutable); - - // only endian-swapping is required - if (need_endian_swap_utf(encoding, wchar_encoding)) return convert_buffer_endian_swap(out_buffer, out_length, contents, size, is_mutable); - - // source encoding is utf8 - if (encoding == encoding_utf8) return convert_buffer_utf8(out_buffer, out_length, contents, size); - - // source encoding is utf16 - if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) - { - xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; - - return (native_encoding == encoding) ? - convert_buffer_utf16(out_buffer, out_length, contents, size, opt_false()) : - convert_buffer_utf16(out_buffer, out_length, contents, size, opt_true()); - } - - // source encoding is utf32 - if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) - { - xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; - - return (native_encoding == encoding) ? - convert_buffer_utf32(out_buffer, out_length, contents, size, opt_false()) : - convert_buffer_utf32(out_buffer, out_length, contents, size, opt_true()); - } - - // source encoding is latin1 - if (encoding == encoding_latin1) return convert_buffer_latin1(out_buffer, out_length, contents, size); - - assert(!"Invalid encoding"); - return false; - } -#else - template PUGI__FN bool convert_buffer_utf16(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, opt_swap) - { - const uint16_t* data = static_cast(contents); - size_t length = size / sizeof(uint16_t); - - // first pass: get length in utf8 units - out_length = utf_decoder::decode_utf16_block(data, length, 0); - - // allocate buffer of suitable length - out_buffer = static_cast(xml_memory::allocate((out_length > 0 ? out_length : 1) * sizeof(char_t))); - if (!out_buffer) return false; - - // second pass: convert utf16 input to utf8 - uint8_t* out_begin = reinterpret_cast(out_buffer); - uint8_t* out_end = utf_decoder::decode_utf16_block(data, length, out_begin); - - assert(out_end == out_begin + out_length); - (void)!out_end; - - return true; - } - - template PUGI__FN bool convert_buffer_utf32(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, opt_swap) - { - const uint32_t* data = static_cast(contents); - size_t length = size / sizeof(uint32_t); - - // first pass: get length in utf8 units - out_length = utf_decoder::decode_utf32_block(data, length, 0); - - // allocate buffer of suitable length - out_buffer = static_cast(xml_memory::allocate((out_length > 0 ? out_length : 1) * sizeof(char_t))); - if (!out_buffer) return false; - - // second pass: convert utf32 input to utf8 - uint8_t* out_begin = reinterpret_cast(out_buffer); - uint8_t* out_end = utf_decoder::decode_utf32_block(data, length, out_begin); - - assert(out_end == out_begin + out_length); - (void)!out_end; - - return true; - } - - PUGI__FN size_t get_latin1_7bit_prefix_length(const uint8_t* data, size_t size) - { - for (size_t i = 0; i < size; ++i) - if (data[i] > 127) - return i; - - return size; - } - - PUGI__FN bool convert_buffer_latin1(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, bool is_mutable) - { - const uint8_t* data = static_cast(contents); - - // get size of prefix that does not need utf8 conversion - size_t prefix_length = get_latin1_7bit_prefix_length(data, size); - assert(prefix_length <= size); - - const uint8_t* postfix = data + prefix_length; - size_t postfix_length = size - prefix_length; - - // if no conversion is needed, just return the original buffer - if (postfix_length == 0) return get_mutable_buffer(out_buffer, out_length, contents, size, is_mutable); - - // first pass: get length in utf8 units - out_length = prefix_length + utf_decoder::decode_latin1_block(postfix, postfix_length, 0); - - // allocate buffer of suitable length - out_buffer = static_cast(xml_memory::allocate((out_length > 0 ? out_length : 1) * sizeof(char_t))); - if (!out_buffer) return false; - - // second pass: convert latin1 input to utf8 - memcpy(out_buffer, data, prefix_length); - - uint8_t* out_begin = reinterpret_cast(out_buffer); - uint8_t* out_end = utf_decoder::decode_latin1_block(postfix, postfix_length, out_begin + prefix_length); - - assert(out_end == out_begin + out_length); - (void)!out_end; - - return true; - } - - PUGI__FN bool convert_buffer(char_t*& out_buffer, size_t& out_length, xml_encoding encoding, const void* contents, size_t size, bool is_mutable) - { - // fast path: no conversion required - if (encoding == encoding_utf8) return get_mutable_buffer(out_buffer, out_length, contents, size, is_mutable); - - // source encoding is utf16 - if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) - { - xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; - - return (native_encoding == encoding) ? - convert_buffer_utf16(out_buffer, out_length, contents, size, opt_false()) : - convert_buffer_utf16(out_buffer, out_length, contents, size, opt_true()); - } - - // source encoding is utf32 - if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) - { - xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; - - return (native_encoding == encoding) ? - convert_buffer_utf32(out_buffer, out_length, contents, size, opt_false()) : - convert_buffer_utf32(out_buffer, out_length, contents, size, opt_true()); - } - - // source encoding is latin1 - if (encoding == encoding_latin1) return convert_buffer_latin1(out_buffer, out_length, contents, size, is_mutable); - - assert(!"Invalid encoding"); - return false; - } -#endif - - PUGI__FN size_t as_utf8_begin(const wchar_t* str, size_t length) - { - // get length in utf8 characters - return utf_decoder::decode_wchar_block(str, length, 0); - } - - PUGI__FN void as_utf8_end(char* buffer, size_t size, const wchar_t* str, size_t length) - { - // convert to utf8 - uint8_t* begin = reinterpret_cast(buffer); - uint8_t* end = utf_decoder::decode_wchar_block(str, length, begin); - - assert(begin + size == end); - (void)!end; - - // zero-terminate - buffer[size] = 0; - } - -#ifndef PUGIXML_NO_STL - PUGI__FN std::string as_utf8_impl(const wchar_t* str, size_t length) - { - // first pass: get length in utf8 characters - size_t size = as_utf8_begin(str, length); - - // allocate resulting string - std::string result; - result.resize(size); - - // second pass: convert to utf8 - if (size > 0) as_utf8_end(&result[0], size, str, length); - - return result; - } - - PUGI__FN std::basic_string as_wide_impl(const char* str, size_t size) - { - const uint8_t* data = reinterpret_cast(str); - - // first pass: get length in wchar_t units - size_t length = utf_decoder::decode_utf8_block(data, size, 0); - - // allocate resulting string - std::basic_string result; - result.resize(length); - - // second pass: convert to wchar_t - if (length > 0) - { - wchar_writer::value_type begin = reinterpret_cast(&result[0]); - wchar_writer::value_type end = utf_decoder::decode_utf8_block(data, size, begin); - - assert(begin + length == end); - (void)!end; - } - - return result; - } -#endif - - inline bool strcpy_insitu_allow(size_t length, uintptr_t allocated, char_t* target) - { - assert(target); - size_t target_length = strlength(target); - - // always reuse document buffer memory if possible - if (!allocated) return target_length >= length; - - // reuse heap memory if waste is not too great - const size_t reuse_threshold = 32; - - return target_length >= length && (target_length < reuse_threshold || target_length - length < target_length / 2); - } - - PUGI__FN bool strcpy_insitu(char_t*& dest, uintptr_t& header, uintptr_t header_mask, const char_t* source) - { - size_t source_length = strlength(source); - - if (source_length == 0) - { - // empty string and null pointer are equivalent, so just deallocate old memory - xml_allocator* alloc = reinterpret_cast(header & xml_memory_page_pointer_mask)->allocator; - - if (header & header_mask) alloc->deallocate_string(dest); - - // mark the string as not allocated - dest = 0; - header &= ~header_mask; - - return true; - } - else if (dest && strcpy_insitu_allow(source_length, header & header_mask, dest)) - { - // we can reuse old buffer, so just copy the new data (including zero terminator) - memcpy(dest, source, (source_length + 1) * sizeof(char_t)); - - return true; - } - else - { - xml_allocator* alloc = reinterpret_cast(header & xml_memory_page_pointer_mask)->allocator; - - // allocate new buffer - char_t* buf = alloc->allocate_string(source_length + 1); - if (!buf) return false; - - // copy the string (including zero terminator) - memcpy(buf, source, (source_length + 1) * sizeof(char_t)); - - // deallocate old buffer (*after* the above to protect against overlapping memory and/or allocation failures) - if (header & header_mask) alloc->deallocate_string(dest); - - // the string is now allocated, so set the flag - dest = buf; - header |= header_mask; - - return true; - } - } - - struct gap - { - char_t* end; - size_t size; - - gap(): end(0), size(0) - { - } - - // Push new gap, move s count bytes further (skipping the gap). - // Collapse previous gap. - void push(char_t*& s, size_t count) - { - if (end) // there was a gap already; collapse it - { - // Move [old_gap_end, new_gap_start) to [old_gap_start, ...) - assert(s >= end); - memmove(end - size, end, reinterpret_cast(s) - reinterpret_cast(end)); - } - - s += count; // end of current gap - - // "merge" two gaps - end = s; - size += count; - } - - // Collapse all gaps, return past-the-end pointer - char_t* flush(char_t* s) - { - if (end) - { - // Move [old_gap_end, current_pos) to [old_gap_start, ...) - assert(s >= end); - memmove(end - size, end, reinterpret_cast(s) - reinterpret_cast(end)); - - return s - size; - } - else return s; - } - }; - - PUGI__FN char_t* strconv_escape(char_t* s, gap& g) - { - char_t* stre = s + 1; - - switch (*stre) - { - case '#': // &#... - { - unsigned int ucsc = 0; - - if (stre[1] == 'x') // &#x... (hex code) - { - stre += 2; - - char_t ch = *stre; - - if (ch == ';') return stre; - - for (;;) - { - if (static_cast(ch - '0') <= 9) - ucsc = 16 * ucsc + (ch - '0'); - else if (static_cast((ch | ' ') - 'a') <= 5) - ucsc = 16 * ucsc + ((ch | ' ') - 'a' + 10); - else if (ch == ';') - break; - else // cancel - return stre; - - ch = *++stre; - } - - ++stre; - } - else // &#... (dec code) - { - char_t ch = *++stre; - - if (ch == ';') return stre; - - for (;;) - { - if (static_cast(ch - '0') <= 9) - ucsc = 10 * ucsc + (ch - '0'); - else if (ch == ';') - break; - else // cancel - return stre; - - ch = *++stre; - } - - ++stre; - } - - #ifdef PUGIXML_WCHAR_MODE - s = reinterpret_cast(wchar_writer::any(reinterpret_cast(s), ucsc)); - #else - s = reinterpret_cast(utf8_writer::any(reinterpret_cast(s), ucsc)); - #endif - - g.push(s, stre - s); - return stre; - } - - case 'a': // &a - { - ++stre; - - if (*stre == 'm') // &am - { - if (*++stre == 'p' && *++stre == ';') // & - { - *s++ = '&'; - ++stre; - - g.push(s, stre - s); - return stre; - } - } - else if (*stre == 'p') // &ap - { - if (*++stre == 'o' && *++stre == 's' && *++stre == ';') // ' - { - *s++ = '\''; - ++stre; - - g.push(s, stre - s); - return stre; - } - } - break; - } - - case 'g': // &g - { - if (*++stre == 't' && *++stre == ';') // > - { - *s++ = '>'; - ++stre; - - g.push(s, stre - s); - return stre; - } - break; - } - - case 'l': // &l - { - if (*++stre == 't' && *++stre == ';') // < - { - *s++ = '<'; - ++stre; - - g.push(s, stre - s); - return stre; - } - break; - } - - case 'q': // &q - { - if (*++stre == 'u' && *++stre == 'o' && *++stre == 't' && *++stre == ';') // " - { - *s++ = '"'; - ++stre; - - g.push(s, stre - s); - return stre; - } - break; - } - - default: - break; - } - - return stre; - } - - // Utility macro for last character handling - #define ENDSWITH(c, e) ((c) == (e) || ((c) == 0 && endch == (e))) - - PUGI__FN char_t* strconv_comment(char_t* s, char_t endch) - { - gap g; - - while (true) - { - while (!PUGI__IS_CHARTYPE(*s, ct_parse_comment)) ++s; - - if (*s == '\r') // Either a single 0x0d or 0x0d 0x0a pair - { - *s++ = '\n'; // replace first one with 0x0a - - if (*s == '\n') g.push(s, 1); - } - else if (s[0] == '-' && s[1] == '-' && ENDSWITH(s[2], '>')) // comment ends here - { - *g.flush(s) = 0; - - return s + (s[2] == '>' ? 3 : 2); - } - else if (*s == 0) - { - return 0; - } - else ++s; - } - } - - PUGI__FN char_t* strconv_cdata(char_t* s, char_t endch) - { - gap g; - - while (true) - { - while (!PUGI__IS_CHARTYPE(*s, ct_parse_cdata)) ++s; - - if (*s == '\r') // Either a single 0x0d or 0x0d 0x0a pair - { - *s++ = '\n'; // replace first one with 0x0a - - if (*s == '\n') g.push(s, 1); - } - else if (s[0] == ']' && s[1] == ']' && ENDSWITH(s[2], '>')) // CDATA ends here - { - *g.flush(s) = 0; - - return s + 1; - } - else if (*s == 0) - { - return 0; - } - else ++s; - } - } - - typedef char_t* (*strconv_pcdata_t)(char_t*); - - template struct strconv_pcdata_impl - { - static char_t* parse(char_t* s) - { - gap g; - - while (true) - { - while (!PUGI__IS_CHARTYPE(*s, ct_parse_pcdata)) ++s; - - if (*s == '<') // PCDATA ends here - { - *g.flush(s) = 0; - - return s + 1; - } - else if (opt_eol::value && *s == '\r') // Either a single 0x0d or 0x0d 0x0a pair - { - *s++ = '\n'; // replace first one with 0x0a - - if (*s == '\n') g.push(s, 1); - } - else if (opt_escape::value && *s == '&') - { - s = strconv_escape(s, g); - } - else if (*s == 0) - { - return s; - } - else ++s; - } - } - }; - - PUGI__FN strconv_pcdata_t get_strconv_pcdata(unsigned int optmask) - { - PUGI__STATIC_ASSERT(parse_escapes == 0x10 && parse_eol == 0x20); - - switch ((optmask >> 4) & 3) // get bitmask for flags (eol escapes) - { - case 0: return strconv_pcdata_impl::parse; - case 1: return strconv_pcdata_impl::parse; - case 2: return strconv_pcdata_impl::parse; - case 3: return strconv_pcdata_impl::parse; - default: return 0; // should not get here - } - } - - typedef char_t* (*strconv_attribute_t)(char_t*, char_t); - - template struct strconv_attribute_impl - { - static char_t* parse_wnorm(char_t* s, char_t end_quote) - { - gap g; - - // trim leading whitespaces - if (PUGI__IS_CHARTYPE(*s, ct_space)) - { - char_t* str = s; - - do ++str; - while (PUGI__IS_CHARTYPE(*str, ct_space)); - - g.push(s, str - s); - } - - while (true) - { - while (!PUGI__IS_CHARTYPE(*s, ct_parse_attr_ws | ct_space)) ++s; - - if (*s == end_quote) - { - char_t* str = g.flush(s); - - do *str-- = 0; - while (PUGI__IS_CHARTYPE(*str, ct_space)); - - return s + 1; - } - else if (PUGI__IS_CHARTYPE(*s, ct_space)) - { - *s++ = ' '; - - if (PUGI__IS_CHARTYPE(*s, ct_space)) - { - char_t* str = s + 1; - while (PUGI__IS_CHARTYPE(*str, ct_space)) ++str; - - g.push(s, str - s); - } - } - else if (opt_escape::value && *s == '&') - { - s = strconv_escape(s, g); - } - else if (!*s) - { - return 0; - } - else ++s; - } - } - - static char_t* parse_wconv(char_t* s, char_t end_quote) - { - gap g; - - while (true) - { - while (!PUGI__IS_CHARTYPE(*s, ct_parse_attr_ws)) ++s; - - if (*s == end_quote) - { - *g.flush(s) = 0; - - return s + 1; - } - else if (PUGI__IS_CHARTYPE(*s, ct_space)) - { - if (*s == '\r') - { - *s++ = ' '; - - if (*s == '\n') g.push(s, 1); - } - else *s++ = ' '; - } - else if (opt_escape::value && *s == '&') - { - s = strconv_escape(s, g); - } - else if (!*s) - { - return 0; - } - else ++s; - } - } - - static char_t* parse_eol(char_t* s, char_t end_quote) - { - gap g; - - while (true) - { - while (!PUGI__IS_CHARTYPE(*s, ct_parse_attr)) ++s; - - if (*s == end_quote) - { - *g.flush(s) = 0; - - return s + 1; - } - else if (*s == '\r') - { - *s++ = '\n'; - - if (*s == '\n') g.push(s, 1); - } - else if (opt_escape::value && *s == '&') - { - s = strconv_escape(s, g); - } - else if (!*s) - { - return 0; - } - else ++s; - } - } - - static char_t* parse_simple(char_t* s, char_t end_quote) - { - gap g; - - while (true) - { - while (!PUGI__IS_CHARTYPE(*s, ct_parse_attr)) ++s; - - if (*s == end_quote) - { - *g.flush(s) = 0; - - return s + 1; - } - else if (opt_escape::value && *s == '&') - { - s = strconv_escape(s, g); - } - else if (!*s) - { - return 0; - } - else ++s; - } - } - }; - - PUGI__FN strconv_attribute_t get_strconv_attribute(unsigned int optmask) - { - PUGI__STATIC_ASSERT(parse_escapes == 0x10 && parse_eol == 0x20 && parse_wconv_attribute == 0x40 && parse_wnorm_attribute == 0x80); - - switch ((optmask >> 4) & 15) // get bitmask for flags (wconv wnorm eol escapes) - { - case 0: return strconv_attribute_impl::parse_simple; - case 1: return strconv_attribute_impl::parse_simple; - case 2: return strconv_attribute_impl::parse_eol; - case 3: return strconv_attribute_impl::parse_eol; - case 4: return strconv_attribute_impl::parse_wconv; - case 5: return strconv_attribute_impl::parse_wconv; - case 6: return strconv_attribute_impl::parse_wconv; - case 7: return strconv_attribute_impl::parse_wconv; - case 8: return strconv_attribute_impl::parse_wnorm; - case 9: return strconv_attribute_impl::parse_wnorm; - case 10: return strconv_attribute_impl::parse_wnorm; - case 11: return strconv_attribute_impl::parse_wnorm; - case 12: return strconv_attribute_impl::parse_wnorm; - case 13: return strconv_attribute_impl::parse_wnorm; - case 14: return strconv_attribute_impl::parse_wnorm; - case 15: return strconv_attribute_impl::parse_wnorm; - default: return 0; // should not get here - } - } - - inline xml_parse_result make_parse_result(xml_parse_status status, ptrdiff_t offset = 0) - { - xml_parse_result result; - result.status = status; - result.offset = offset; - - return result; - } - - struct xml_parser - { - xml_allocator alloc; - char_t* error_offset; - xml_parse_status error_status; - - // Parser utilities. - #define PUGI__SKIPWS() { while (PUGI__IS_CHARTYPE(*s, ct_space)) ++s; } - #define PUGI__OPTSET(OPT) ( optmsk & (OPT) ) - #define PUGI__PUSHNODE(TYPE) { cursor = append_node(cursor, alloc, TYPE); if (!cursor) PUGI__THROW_ERROR(status_out_of_memory, s); } - #define PUGI__POPNODE() { cursor = cursor->parent; } - #define PUGI__SCANFOR(X) { while (*s != 0 && !(X)) ++s; } - #define PUGI__SCANWHILE(X) { while ((X)) ++s; } - #define PUGI__ENDSEG() { ch = *s; *s = 0; ++s; } - #define PUGI__THROW_ERROR(err, m) return error_offset = m, error_status = err, static_cast(0) - #define PUGI__CHECK_ERROR(err, m) { if (*s == 0) PUGI__THROW_ERROR(err, m); } - - xml_parser(const xml_allocator& alloc_): alloc(alloc_), error_offset(0), error_status(status_ok) - { - } - - // DOCTYPE consists of nested sections of the following possible types: - // , , "...", '...' - // - // - // First group can not contain nested groups - // Second group can contain nested groups of the same type - // Third group can contain all other groups - char_t* parse_doctype_primitive(char_t* s) - { - if (*s == '"' || *s == '\'') - { - // quoted string - char_t ch = *s++; - PUGI__SCANFOR(*s == ch); - if (!*s) PUGI__THROW_ERROR(status_bad_doctype, s); - - s++; - } - else if (s[0] == '<' && s[1] == '?') - { - // - s += 2; - PUGI__SCANFOR(s[0] == '?' && s[1] == '>'); // no need for ENDSWITH because ?> can't terminate proper doctype - if (!*s) PUGI__THROW_ERROR(status_bad_doctype, s); - - s += 2; - } - else if (s[0] == '<' && s[1] == '!' && s[2] == '-' && s[3] == '-') - { - s += 4; - PUGI__SCANFOR(s[0] == '-' && s[1] == '-' && s[2] == '>'); // no need for ENDSWITH because --> can't terminate proper doctype - if (!*s) PUGI__THROW_ERROR(status_bad_doctype, s); - - s += 4; - } - else PUGI__THROW_ERROR(status_bad_doctype, s); - - return s; - } - - char_t* parse_doctype_ignore(char_t* s) - { - assert(s[0] == '<' && s[1] == '!' && s[2] == '['); - s++; - - while (*s) - { - if (s[0] == '<' && s[1] == '!' && s[2] == '[') - { - // nested ignore section - s = parse_doctype_ignore(s); - if (!s) return s; - } - else if (s[0] == ']' && s[1] == ']' && s[2] == '>') - { - // ignore section end - s += 3; - - return s; - } - else s++; - } - - PUGI__THROW_ERROR(status_bad_doctype, s); - } - - char_t* parse_doctype_group(char_t* s, char_t endch, bool toplevel) - { - assert(s[0] == '<' && s[1] == '!'); - s++; - - while (*s) - { - if (s[0] == '<' && s[1] == '!' && s[2] != '-') - { - if (s[2] == '[') - { - // ignore - s = parse_doctype_ignore(s); - if (!s) return s; - } - else - { - // some control group - s = parse_doctype_group(s, endch, false); - if (!s) return s; - } - } - else if (s[0] == '<' || s[0] == '"' || s[0] == '\'') - { - // unknown tag (forbidden), or some primitive group - s = parse_doctype_primitive(s); - if (!s) return s; - } - else if (*s == '>') - { - s++; - - return s; - } - else s++; - } - - if (!toplevel || endch != '>') PUGI__THROW_ERROR(status_bad_doctype, s); - - return s; - } - - char_t* parse_exclamation(char_t* s, xml_node_struct* cursor, unsigned int optmsk, char_t endch) - { - // parse node contents, starting with exclamation mark - ++s; - - if (*s == '-') // 'value = s; // Save the offset. - } - - if (PUGI__OPTSET(parse_eol) && PUGI__OPTSET(parse_comments)) - { - s = strconv_comment(s, endch); - - if (!s) PUGI__THROW_ERROR(status_bad_comment, cursor->value); - } - else - { - // Scan for terminating '-->'. - PUGI__SCANFOR(s[0] == '-' && s[1] == '-' && ENDSWITH(s[2], '>')); - PUGI__CHECK_ERROR(status_bad_comment, s); - - if (PUGI__OPTSET(parse_comments)) - *s = 0; // Zero-terminate this segment at the first terminating '-'. - - s += (s[2] == '>' ? 3 : 2); // Step over the '\0->'. - } - } - else PUGI__THROW_ERROR(status_bad_comment, s); - } - else if (*s == '[') - { - // 'value = s; // Save the offset. - - if (PUGI__OPTSET(parse_eol)) - { - s = strconv_cdata(s, endch); - - if (!s) PUGI__THROW_ERROR(status_bad_cdata, cursor->value); - } - else - { - // Scan for terminating ']]>'. - PUGI__SCANFOR(s[0] == ']' && s[1] == ']' && ENDSWITH(s[2], '>')); - PUGI__CHECK_ERROR(status_bad_cdata, s); - - *s++ = 0; // Zero-terminate this segment. - } - } - else // Flagged for discard, but we still have to scan for the terminator. - { - // Scan for terminating ']]>'. - PUGI__SCANFOR(s[0] == ']' && s[1] == ']' && ENDSWITH(s[2], '>')); - PUGI__CHECK_ERROR(status_bad_cdata, s); - - ++s; - } - - s += (s[1] == '>' ? 2 : 1); // Step over the last ']>'. - } - else PUGI__THROW_ERROR(status_bad_cdata, s); - } - else if (s[0] == 'D' && s[1] == 'O' && s[2] == 'C' && s[3] == 'T' && s[4] == 'Y' && s[5] == 'P' && ENDSWITH(s[6], 'E')) - { - s -= 2; - - if (cursor->parent) PUGI__THROW_ERROR(status_bad_doctype, s); - - char_t* mark = s + 9; - - s = parse_doctype_group(s, endch, true); - if (!s) return s; - - if (PUGI__OPTSET(parse_doctype)) - { - while (PUGI__IS_CHARTYPE(*mark, ct_space)) ++mark; - - PUGI__PUSHNODE(node_doctype); - - cursor->value = mark; - - assert((s[0] == 0 && endch == '>') || s[-1] == '>'); - s[*s == 0 ? 0 : -1] = 0; - - PUGI__POPNODE(); - } - } - else if (*s == 0 && endch == '-') PUGI__THROW_ERROR(status_bad_comment, s); - else if (*s == 0 && endch == '[') PUGI__THROW_ERROR(status_bad_cdata, s); - else PUGI__THROW_ERROR(status_unrecognized_tag, s); - - return s; - } - - char_t* parse_question(char_t* s, xml_node_struct*& ref_cursor, unsigned int optmsk, char_t endch) - { - // load into registers - xml_node_struct* cursor = ref_cursor; - char_t ch = 0; - - // parse node contents, starting with question mark - ++s; - - // read PI target - char_t* target = s; - - if (!PUGI__IS_CHARTYPE(*s, ct_start_symbol)) PUGI__THROW_ERROR(status_bad_pi, s); - - PUGI__SCANWHILE(PUGI__IS_CHARTYPE(*s, ct_symbol)); - PUGI__CHECK_ERROR(status_bad_pi, s); - - // determine node type; stricmp / strcasecmp is not portable - bool declaration = (target[0] | ' ') == 'x' && (target[1] | ' ') == 'm' && (target[2] | ' ') == 'l' && target + 3 == s; - - if (declaration ? PUGI__OPTSET(parse_declaration) : PUGI__OPTSET(parse_pi)) - { - if (declaration) - { - // disallow non top-level declarations - if (cursor->parent) PUGI__THROW_ERROR(status_bad_pi, s); - - PUGI__PUSHNODE(node_declaration); - } - else - { - PUGI__PUSHNODE(node_pi); - } - - cursor->name = target; - - PUGI__ENDSEG(); - - // parse value/attributes - if (ch == '?') - { - // empty node - if (!ENDSWITH(*s, '>')) PUGI__THROW_ERROR(status_bad_pi, s); - s += (*s == '>'); - - PUGI__POPNODE(); - } - else if (PUGI__IS_CHARTYPE(ch, ct_space)) - { - PUGI__SKIPWS(); - - // scan for tag end - char_t* value = s; - - PUGI__SCANFOR(s[0] == '?' && ENDSWITH(s[1], '>')); - PUGI__CHECK_ERROR(status_bad_pi, s); - - if (declaration) - { - // replace ending ? with / so that 'element' terminates properly - *s = '/'; - - // we exit from this function with cursor at node_declaration, which is a signal to parse() to go to LOC_ATTRIBUTES - s = value; - } - else - { - // store value and step over > - cursor->value = value; - PUGI__POPNODE(); - - PUGI__ENDSEG(); - - s += (*s == '>'); - } - } - else PUGI__THROW_ERROR(status_bad_pi, s); - } - else - { - // scan for tag end - PUGI__SCANFOR(s[0] == '?' && ENDSWITH(s[1], '>')); - PUGI__CHECK_ERROR(status_bad_pi, s); - - s += (s[1] == '>' ? 2 : 1); - } - - // store from registers - ref_cursor = cursor; - - return s; - } - - char_t* parse(char_t* s, xml_node_struct* xmldoc, unsigned int optmsk, char_t endch) - { - strconv_attribute_t strconv_attribute = get_strconv_attribute(optmsk); - strconv_pcdata_t strconv_pcdata = get_strconv_pcdata(optmsk); - - char_t ch = 0; - xml_node_struct* cursor = xmldoc; - char_t* mark = s; - - while (*s != 0) - { - if (*s == '<') - { - ++s; - - LOC_TAG: - if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) // '<#...' - { - PUGI__PUSHNODE(node_element); // Append a new node to the tree. - - cursor->name = s; - - PUGI__SCANWHILE(PUGI__IS_CHARTYPE(*s, ct_symbol)); // Scan for a terminator. - PUGI__ENDSEG(); // Save char in 'ch', terminate & step over. - - if (ch == '>') - { - // end of tag - } - else if (PUGI__IS_CHARTYPE(ch, ct_space)) - { - LOC_ATTRIBUTES: - while (true) - { - PUGI__SKIPWS(); // Eat any whitespace. - - if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) // <... #... - { - xml_attribute_struct* a = append_attribute_ll(cursor, alloc); // Make space for this attribute. - if (!a) PUGI__THROW_ERROR(status_out_of_memory, s); - - a->name = s; // Save the offset. - - PUGI__SCANWHILE(PUGI__IS_CHARTYPE(*s, ct_symbol)); // Scan for a terminator. - PUGI__CHECK_ERROR(status_bad_attribute, s); //$ redundant, left for performance - - PUGI__ENDSEG(); // Save char in 'ch', terminate & step over. - PUGI__CHECK_ERROR(status_bad_attribute, s); //$ redundant, left for performance - - if (PUGI__IS_CHARTYPE(ch, ct_space)) - { - PUGI__SKIPWS(); // Eat any whitespace. - PUGI__CHECK_ERROR(status_bad_attribute, s); //$ redundant, left for performance - - ch = *s; - ++s; - } - - if (ch == '=') // '<... #=...' - { - PUGI__SKIPWS(); // Eat any whitespace. - - if (*s == '"' || *s == '\'') // '<... #="...' - { - ch = *s; // Save quote char to avoid breaking on "''" -or- '""'. - ++s; // Step over the quote. - a->value = s; // Save the offset. - - s = strconv_attribute(s, ch); - - if (!s) PUGI__THROW_ERROR(status_bad_attribute, a->value); - - // After this line the loop continues from the start; - // Whitespaces, / and > are ok, symbols and EOF are wrong, - // everything else will be detected - if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) PUGI__THROW_ERROR(status_bad_attribute, s); - } - else PUGI__THROW_ERROR(status_bad_attribute, s); - } - else PUGI__THROW_ERROR(status_bad_attribute, s); - } - else if (*s == '/') - { - ++s; - - if (*s == '>') - { - PUGI__POPNODE(); - s++; - break; - } - else if (*s == 0 && endch == '>') - { - PUGI__POPNODE(); - break; - } - else PUGI__THROW_ERROR(status_bad_start_element, s); - } - else if (*s == '>') - { - ++s; - - break; - } - else if (*s == 0 && endch == '>') - { - break; - } - else PUGI__THROW_ERROR(status_bad_start_element, s); - } - - // !!! - } - else if (ch == '/') // '<#.../' - { - if (!ENDSWITH(*s, '>')) PUGI__THROW_ERROR(status_bad_start_element, s); - - PUGI__POPNODE(); // Pop. - - s += (*s == '>'); - } - else if (ch == 0) - { - // we stepped over null terminator, backtrack & handle closing tag - --s; - - if (endch != '>') PUGI__THROW_ERROR(status_bad_start_element, s); - } - else PUGI__THROW_ERROR(status_bad_start_element, s); - } - else if (*s == '/') - { - ++s; - - char_t* name = cursor->name; - if (!name) PUGI__THROW_ERROR(status_end_element_mismatch, s); - - while (PUGI__IS_CHARTYPE(*s, ct_symbol)) - { - if (*s++ != *name++) PUGI__THROW_ERROR(status_end_element_mismatch, s); - } - - if (*name) - { - if (*s == 0 && name[0] == endch && name[1] == 0) PUGI__THROW_ERROR(status_bad_end_element, s); - else PUGI__THROW_ERROR(status_end_element_mismatch, s); - } - - PUGI__POPNODE(); // Pop. - - PUGI__SKIPWS(); - - if (*s == 0) - { - if (endch != '>') PUGI__THROW_ERROR(status_bad_end_element, s); - } - else - { - if (*s != '>') PUGI__THROW_ERROR(status_bad_end_element, s); - ++s; - } - } - else if (*s == '?') // 'header & xml_memory_page_type_mask) + 1 == node_declaration) goto LOC_ATTRIBUTES; - } - else if (*s == '!') // 'first_child) continue; - } - } - - s = mark; - - if (cursor->parent) - { - PUGI__PUSHNODE(node_pcdata); // Append a new node on the tree. - cursor->value = s; // Save the offset. - - s = strconv_pcdata(s); - - PUGI__POPNODE(); // Pop since this is a standalone. - - if (!*s) break; - } - else - { - PUGI__SCANFOR(*s == '<'); // '...<' - if (!*s) break; - - ++s; - } - - // We're after '<' - goto LOC_TAG; - } - } - - // check that last tag is closed - if (cursor != xmldoc) PUGI__THROW_ERROR(status_end_element_mismatch, s); - - return s; - } - - static xml_parse_result parse(char_t* buffer, size_t length, xml_node_struct* root, unsigned int optmsk) - { - xml_document_struct* xmldoc = static_cast(root); - - // store buffer for offset_debug - xmldoc->buffer = buffer; - - // early-out for empty documents - if (length == 0) return make_parse_result(status_ok); - - // create parser on stack - xml_parser parser(*xmldoc); - - // save last character and make buffer zero-terminated (speeds up parsing) - char_t endch = buffer[length - 1]; - buffer[length - 1] = 0; - - // perform actual parsing - parser.parse(buffer, xmldoc, optmsk, endch); - - xml_parse_result result = make_parse_result(parser.error_status, parser.error_offset ? parser.error_offset - buffer : 0); - assert(result.offset >= 0 && static_cast(result.offset) <= length); - - // update allocator state - *static_cast(xmldoc) = parser.alloc; - - // since we removed last character, we have to handle the only possible false positive - if (result && endch == '<') - { - // there's no possible well-formed document with < at the end - return make_parse_result(status_unrecognized_tag, length); - } - - return result; - } - }; - - // Output facilities - PUGI__FN xml_encoding get_write_native_encoding() - { - #ifdef PUGIXML_WCHAR_MODE - return get_wchar_encoding(); - #else - return encoding_utf8; - #endif - } - - PUGI__FN xml_encoding get_write_encoding(xml_encoding encoding) - { - // replace wchar encoding with utf implementation - if (encoding == encoding_wchar) return get_wchar_encoding(); - - // replace utf16 encoding with utf16 with specific endianness - if (encoding == encoding_utf16) return is_little_endian() ? encoding_utf16_le : encoding_utf16_be; - - // replace utf32 encoding with utf32 with specific endianness - if (encoding == encoding_utf32) return is_little_endian() ? encoding_utf32_le : encoding_utf32_be; - - // only do autodetection if no explicit encoding is requested - if (encoding != encoding_auto) return encoding; - - // assume utf8 encoding - return encoding_utf8; - } - -#ifdef PUGIXML_WCHAR_MODE - PUGI__FN size_t get_valid_length(const char_t* data, size_t length) - { - assert(length > 0); - - // discard last character if it's the lead of a surrogate pair - return (sizeof(wchar_t) == 2 && static_cast(static_cast(data[length - 1]) - 0xD800) < 0x400) ? length - 1 : length; - } - - PUGI__FN size_t convert_buffer(char_t* r_char, uint8_t* r_u8, uint16_t* r_u16, uint32_t* r_u32, const char_t* data, size_t length, xml_encoding encoding) - { - // only endian-swapping is required - if (need_endian_swap_utf(encoding, get_wchar_encoding())) - { - convert_wchar_endian_swap(r_char, data, length); - - return length * sizeof(char_t); - } - - // convert to utf8 - if (encoding == encoding_utf8) - { - uint8_t* dest = r_u8; - uint8_t* end = utf_decoder::decode_wchar_block(data, length, dest); - - return static_cast(end - dest); - } - - // convert to utf16 - if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) - { - uint16_t* dest = r_u16; - - // convert to native utf16 - uint16_t* end = utf_decoder::decode_wchar_block(data, length, dest); - - // swap if necessary - xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; - - if (native_encoding != encoding) convert_utf_endian_swap(dest, dest, static_cast(end - dest)); - - return static_cast(end - dest) * sizeof(uint16_t); - } - - // convert to utf32 - if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) - { - uint32_t* dest = r_u32; - - // convert to native utf32 - uint32_t* end = utf_decoder::decode_wchar_block(data, length, dest); - - // swap if necessary - xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; - - if (native_encoding != encoding) convert_utf_endian_swap(dest, dest, static_cast(end - dest)); - - return static_cast(end - dest) * sizeof(uint32_t); - } - - // convert to latin1 - if (encoding == encoding_latin1) - { - uint8_t* dest = r_u8; - uint8_t* end = utf_decoder::decode_wchar_block(data, length, dest); - - return static_cast(end - dest); - } - - assert(!"Invalid encoding"); - return 0; - } -#else - PUGI__FN size_t get_valid_length(const char_t* data, size_t length) - { - assert(length > 4); - - for (size_t i = 1; i <= 4; ++i) - { - uint8_t ch = static_cast(data[length - i]); - - // either a standalone character or a leading one - if ((ch & 0xc0) != 0x80) return length - i; - } - - // there are four non-leading characters at the end, sequence tail is broken so might as well process the whole chunk - return length; - } - - PUGI__FN size_t convert_buffer(char_t* /* r_char */, uint8_t* r_u8, uint16_t* r_u16, uint32_t* r_u32, const char_t* data, size_t length, xml_encoding encoding) - { - if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) - { - uint16_t* dest = r_u16; - - // convert to native utf16 - uint16_t* end = utf_decoder::decode_utf8_block(reinterpret_cast(data), length, dest); - - // swap if necessary - xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; - - if (native_encoding != encoding) convert_utf_endian_swap(dest, dest, static_cast(end - dest)); - - return static_cast(end - dest) * sizeof(uint16_t); - } - - if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) - { - uint32_t* dest = r_u32; - - // convert to native utf32 - uint32_t* end = utf_decoder::decode_utf8_block(reinterpret_cast(data), length, dest); - - // swap if necessary - xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; - - if (native_encoding != encoding) convert_utf_endian_swap(dest, dest, static_cast(end - dest)); - - return static_cast(end - dest) * sizeof(uint32_t); - } - - if (encoding == encoding_latin1) - { - uint8_t* dest = r_u8; - uint8_t* end = utf_decoder::decode_utf8_block(reinterpret_cast(data), length, dest); - - return static_cast(end - dest); - } - - assert(!"Invalid encoding"); - return 0; - } -#endif - - class xml_buffered_writer - { - xml_buffered_writer(const xml_buffered_writer&); - xml_buffered_writer& operator=(const xml_buffered_writer&); - - public: - xml_buffered_writer(xml_writer& writer_, xml_encoding user_encoding): writer(writer_), bufsize(0), encoding(get_write_encoding(user_encoding)) - { - PUGI__STATIC_ASSERT(bufcapacity >= 8); - } - - ~xml_buffered_writer() - { - flush(); - } - - void flush() - { - flush(buffer, bufsize); - bufsize = 0; - } - - void flush(const char_t* data, size_t size) - { - if (size == 0) return; - - // fast path, just write data - if (encoding == get_write_native_encoding()) - writer.write(data, size * sizeof(char_t)); - else - { - // convert chunk - size_t result = convert_buffer(scratch.data_char, scratch.data_u8, scratch.data_u16, scratch.data_u32, data, size, encoding); - assert(result <= sizeof(scratch)); - - // write data - writer.write(scratch.data_u8, result); - } - } - - void write(const char_t* data, size_t length) - { - if (bufsize + length > bufcapacity) - { - // flush the remaining buffer contents - flush(); - - // handle large chunks - if (length > bufcapacity) - { - if (encoding == get_write_native_encoding()) - { - // fast path, can just write data chunk - writer.write(data, length * sizeof(char_t)); - return; - } - - // need to convert in suitable chunks - while (length > bufcapacity) - { - // get chunk size by selecting such number of characters that are guaranteed to fit into scratch buffer - // and form a complete codepoint sequence (i.e. discard start of last codepoint if necessary) - size_t chunk_size = get_valid_length(data, bufcapacity); - - // convert chunk and write - flush(data, chunk_size); - - // iterate - data += chunk_size; - length -= chunk_size; - } - - // small tail is copied below - bufsize = 0; - } - } - - memcpy(buffer + bufsize, data, length * sizeof(char_t)); - bufsize += length; - } - - void write(const char_t* data) - { - write(data, strlength(data)); - } - - void write(char_t d0) - { - if (bufsize + 1 > bufcapacity) flush(); - - buffer[bufsize + 0] = d0; - bufsize += 1; - } - - void write(char_t d0, char_t d1) - { - if (bufsize + 2 > bufcapacity) flush(); - - buffer[bufsize + 0] = d0; - buffer[bufsize + 1] = d1; - bufsize += 2; - } - - void write(char_t d0, char_t d1, char_t d2) - { - if (bufsize + 3 > bufcapacity) flush(); - - buffer[bufsize + 0] = d0; - buffer[bufsize + 1] = d1; - buffer[bufsize + 2] = d2; - bufsize += 3; - } - - void write(char_t d0, char_t d1, char_t d2, char_t d3) - { - if (bufsize + 4 > bufcapacity) flush(); - - buffer[bufsize + 0] = d0; - buffer[bufsize + 1] = d1; - buffer[bufsize + 2] = d2; - buffer[bufsize + 3] = d3; - bufsize += 4; - } - - void write(char_t d0, char_t d1, char_t d2, char_t d3, char_t d4) - { - if (bufsize + 5 > bufcapacity) flush(); - - buffer[bufsize + 0] = d0; - buffer[bufsize + 1] = d1; - buffer[bufsize + 2] = d2; - buffer[bufsize + 3] = d3; - buffer[bufsize + 4] = d4; - bufsize += 5; - } - - void write(char_t d0, char_t d1, char_t d2, char_t d3, char_t d4, char_t d5) - { - if (bufsize + 6 > bufcapacity) flush(); - - buffer[bufsize + 0] = d0; - buffer[bufsize + 1] = d1; - buffer[bufsize + 2] = d2; - buffer[bufsize + 3] = d3; - buffer[bufsize + 4] = d4; - buffer[bufsize + 5] = d5; - bufsize += 6; - } - - // utf8 maximum expansion: x4 (-> utf32) - // utf16 maximum expansion: x2 (-> utf32) - // utf32 maximum expansion: x1 - enum - { - bufcapacitybytes = - #ifdef PUGIXML_MEMORY_OUTPUT_STACK - PUGIXML_MEMORY_OUTPUT_STACK - #else - 10240 - #endif - , - bufcapacity = bufcapacitybytes / (sizeof(char_t) + 4) - }; - - char_t buffer[bufcapacity]; - - union - { - uint8_t data_u8[4 * bufcapacity]; - uint16_t data_u16[2 * bufcapacity]; - uint32_t data_u32[bufcapacity]; - char_t data_char[bufcapacity]; - } scratch; - - xml_writer& writer; - size_t bufsize; - xml_encoding encoding; - }; - - PUGI__FN void text_output_escaped(xml_buffered_writer& writer, const char_t* s, chartypex_t type) - { - while (*s) - { - const char_t* prev = s; - - // While *s is a usual symbol - while (!PUGI__IS_CHARTYPEX(*s, type)) ++s; - - writer.write(prev, static_cast(s - prev)); - - switch (*s) - { - case 0: break; - case '&': - writer.write('&', 'a', 'm', 'p', ';'); - ++s; - break; - case '<': - writer.write('&', 'l', 't', ';'); - ++s; - break; - case '>': - writer.write('&', 'g', 't', ';'); - ++s; - break; - case '"': - writer.write('&', 'q', 'u', 'o', 't', ';'); - ++s; - break; - default: // s is not a usual symbol - { - unsigned int ch = static_cast(*s++); - assert(ch < 32); - - writer.write('&', '#', static_cast((ch / 10) + '0'), static_cast((ch % 10) + '0'), ';'); - } - } - } - } - - PUGI__FN void text_output(xml_buffered_writer& writer, const char_t* s, chartypex_t type, unsigned int flags) - { - if (flags & format_no_escapes) - writer.write(s); - else - text_output_escaped(writer, s, type); - } - - PUGI__FN void text_output_cdata(xml_buffered_writer& writer, const char_t* s) - { - do - { - writer.write('<', '!', '[', 'C', 'D'); - writer.write('A', 'T', 'A', '['); - - const char_t* prev = s; - - // look for ]]> sequence - we can't output it as is since it terminates CDATA - while (*s && !(s[0] == ']' && s[1] == ']' && s[2] == '>')) ++s; - - // skip ]] if we stopped at ]]>, > will go to the next CDATA section - if (*s) s += 2; - - writer.write(prev, static_cast(s - prev)); - - writer.write(']', ']', '>'); - } - while (*s); - } - - PUGI__FN void node_output_attributes(xml_buffered_writer& writer, const xml_node& node, unsigned int flags) - { - const char_t* default_name = PUGIXML_TEXT(":anonymous"); - - for (xml_attribute a = node.first_attribute(); a; a = a.next_attribute()) - { - writer.write(' '); - writer.write(a.name()[0] ? a.name() : default_name); - writer.write('=', '"'); - - text_output(writer, a.value(), ctx_special_attr, flags); - - writer.write('"'); - } - } - - PUGI__FN void node_output(xml_buffered_writer& writer, const xml_node& node, const char_t* indent, unsigned int flags, unsigned int depth) - { - const char_t* default_name = PUGIXML_TEXT(":anonymous"); - - if ((flags & format_indent) != 0 && (flags & format_raw) == 0) - for (unsigned int i = 0; i < depth; ++i) writer.write(indent); - - switch (node.type()) - { - case node_document: - { - for (xml_node n = node.first_child(); n; n = n.next_sibling()) - node_output(writer, n, indent, flags, depth); - break; - } - - case node_element: - { - const char_t* name = node.name()[0] ? node.name() : default_name; - - writer.write('<'); - writer.write(name); - - node_output_attributes(writer, node, flags); - - if (flags & format_raw) - { - if (!node.first_child()) - writer.write(' ', '/', '>'); - else - { - writer.write('>'); - - for (xml_node n = node.first_child(); n; n = n.next_sibling()) - node_output(writer, n, indent, flags, depth + 1); - - writer.write('<', '/'); - writer.write(name); - writer.write('>'); - } - } - else if (!node.first_child()) - writer.write(' ', '/', '>', '\n'); - else if (node.first_child() == node.last_child() && (node.first_child().type() == node_pcdata || node.first_child().type() == node_cdata)) - { - writer.write('>'); - - if (node.first_child().type() == node_pcdata) - text_output(writer, node.first_child().value(), ctx_special_pcdata, flags); - else - text_output_cdata(writer, node.first_child().value()); - - writer.write('<', '/'); - writer.write(name); - writer.write('>', '\n'); - } - else - { - writer.write('>', '\n'); - - for (xml_node n = node.first_child(); n; n = n.next_sibling()) - node_output(writer, n, indent, flags, depth + 1); - - if ((flags & format_indent) != 0 && (flags & format_raw) == 0) - for (unsigned int i = 0; i < depth; ++i) writer.write(indent); - - writer.write('<', '/'); - writer.write(name); - writer.write('>', '\n'); - } - - break; - } - - case node_pcdata: - text_output(writer, node.value(), ctx_special_pcdata, flags); - if ((flags & format_raw) == 0) writer.write('\n'); - break; - - case node_cdata: - text_output_cdata(writer, node.value()); - if ((flags & format_raw) == 0) writer.write('\n'); - break; - - case node_comment: - writer.write('<', '!', '-', '-'); - writer.write(node.value()); - writer.write('-', '-', '>'); - if ((flags & format_raw) == 0) writer.write('\n'); - break; - - case node_pi: - case node_declaration: - writer.write('<', '?'); - writer.write(node.name()[0] ? node.name() : default_name); - - if (node.type() == node_declaration) - { - node_output_attributes(writer, node, flags); - } - else if (node.value()[0]) - { - writer.write(' '); - writer.write(node.value()); - } - - writer.write('?', '>'); - if ((flags & format_raw) == 0) writer.write('\n'); - break; - - case node_doctype: - writer.write('<', '!', 'D', 'O', 'C'); - writer.write('T', 'Y', 'P', 'E'); - - if (node.value()[0]) - { - writer.write(' '); - writer.write(node.value()); - } - - writer.write('>'); - if ((flags & format_raw) == 0) writer.write('\n'); - break; - - default: - assert(!"Invalid node type"); - } - } - - inline bool has_declaration(const xml_node& node) - { - for (xml_node child = node.first_child(); child; child = child.next_sibling()) - { - xml_node_type type = child.type(); - - if (type == node_declaration) return true; - if (type == node_element) return false; - } - - return false; - } - - inline bool allow_insert_child(xml_node_type parent, xml_node_type child) - { - if (parent != node_document && parent != node_element) return false; - if (child == node_document || child == node_null) return false; - if (parent != node_document && (child == node_declaration || child == node_doctype)) return false; - - return true; - } - - PUGI__FN void recursive_copy_skip(xml_node& dest, const xml_node& source, const xml_node& skip) - { - assert(dest.type() == source.type()); - - switch (source.type()) - { - case node_element: - { - dest.set_name(source.name()); - - for (xml_attribute a = source.first_attribute(); a; a = a.next_attribute()) - dest.append_attribute(a.name()).set_value(a.value()); - - for (xml_node c = source.first_child(); c; c = c.next_sibling()) - { - if (c == skip) continue; - - xml_node cc = dest.append_child(c.type()); - assert(cc); - - recursive_copy_skip(cc, c, skip); - } - - break; - } - - case node_pcdata: - case node_cdata: - case node_comment: - case node_doctype: - dest.set_value(source.value()); - break; - - case node_pi: - dest.set_name(source.name()); - dest.set_value(source.value()); - break; - - case node_declaration: - { - dest.set_name(source.name()); - - for (xml_attribute a = source.first_attribute(); a; a = a.next_attribute()) - dest.append_attribute(a.name()).set_value(a.value()); - - break; - } - - default: - assert(!"Invalid node type"); - } - } - - inline bool is_text_node(xml_node_struct* node) - { - xml_node_type type = static_cast((node->header & impl::xml_memory_page_type_mask) + 1); - - return type == node_pcdata || type == node_cdata; - } - - // get value with conversion functions - PUGI__FN int get_value_int(const char_t* value, int def) - { - if (!value) return def; - - #ifdef PUGIXML_WCHAR_MODE - return static_cast(wcstol(value, 0, 10)); - #else - return static_cast(strtol(value, 0, 10)); - #endif - } - - PUGI__FN unsigned int get_value_uint(const char_t* value, unsigned int def) - { - if (!value) return def; - - #ifdef PUGIXML_WCHAR_MODE - return static_cast(wcstoul(value, 0, 10)); - #else - return static_cast(strtoul(value, 0, 10)); - #endif - } - - PUGI__FN double get_value_double(const char_t* value, double def) - { - if (!value) return def; - - #ifdef PUGIXML_WCHAR_MODE - return wcstod(value, 0); - #else - return strtod(value, 0); - #endif - } - - PUGI__FN float get_value_float(const char_t* value, float def) - { - if (!value) return def; - - #ifdef PUGIXML_WCHAR_MODE - return static_cast(wcstod(value, 0)); - #else - return static_cast(strtod(value, 0)); - #endif - } - - PUGI__FN bool get_value_bool(const char_t* value, bool def) - { - if (!value) return def; - - // only look at first char - char_t first = *value; - - // 1*, t* (true), T* (True), y* (yes), Y* (YES) - return (first == '1' || first == 't' || first == 'T' || first == 'y' || first == 'Y'); - } - - // set value with conversion functions - PUGI__FN bool set_value_buffer(char_t*& dest, uintptr_t& header, uintptr_t header_mask, char (&buf)[128]) - { - #ifdef PUGIXML_WCHAR_MODE - char_t wbuf[128]; - impl::widen_ascii(wbuf, buf); - - return strcpy_insitu(dest, header, header_mask, wbuf); - #else - return strcpy_insitu(dest, header, header_mask, buf); - #endif - } - - PUGI__FN bool set_value_convert(char_t*& dest, uintptr_t& header, uintptr_t header_mask, int value) - { - char buf[128]; - sprintf(buf, "%d", value); - - return set_value_buffer(dest, header, header_mask, buf); - } - - PUGI__FN bool set_value_convert(char_t*& dest, uintptr_t& header, uintptr_t header_mask, unsigned int value) - { - char buf[128]; - sprintf(buf, "%u", value); - - return set_value_buffer(dest, header, header_mask, buf); - } - - PUGI__FN bool set_value_convert(char_t*& dest, uintptr_t& header, uintptr_t header_mask, double value) - { - char buf[128]; - sprintf(buf, "%g", value); - - return set_value_buffer(dest, header, header_mask, buf); - } - - PUGI__FN bool set_value_convert(char_t*& dest, uintptr_t& header, uintptr_t header_mask, bool value) - { - return strcpy_insitu(dest, header, header_mask, value ? PUGIXML_TEXT("true") : PUGIXML_TEXT("false")); - } - - // we need to get length of entire file to load it in memory; the only (relatively) sane way to do it is via seek/tell trick - PUGI__FN xml_parse_status get_file_size(FILE* file, size_t& out_result) - { - #if defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 && !defined(_WIN32_WCE) - // there are 64-bit versions of fseek/ftell, let's use them - typedef __int64 length_type; - - _fseeki64(file, 0, SEEK_END); - length_type length = _ftelli64(file); - _fseeki64(file, 0, SEEK_SET); - #elif defined(__MINGW32__) && !defined(__NO_MINGW_LFS) && !defined(__STRICT_ANSI__) - // there are 64-bit versions of fseek/ftell, let's use them - typedef off64_t length_type; - - fseeko64(file, 0, SEEK_END); - length_type length = ftello64(file); - fseeko64(file, 0, SEEK_SET); - #else - // if this is a 32-bit OS, long is enough; if this is a unix system, long is 64-bit, which is enough; otherwise we can't do anything anyway. - typedef long length_type; - - fseek(file, 0, SEEK_END); - length_type length = ftell(file); - fseek(file, 0, SEEK_SET); - #endif - - // check for I/O errors - if (length < 0) return status_io_error; - - // check for overflow - size_t result = static_cast(length); - - if (static_cast(result) != length) return status_out_of_memory; - - // finalize - out_result = result; - - return status_ok; - } - - PUGI__FN xml_parse_result load_file_impl(xml_document& doc, FILE* file, unsigned int options, xml_encoding encoding) - { - if (!file) return make_parse_result(status_file_not_found); - - // get file size (can result in I/O errors) - size_t size = 0; - xml_parse_status size_status = get_file_size(file, size); - - if (size_status != status_ok) - { - fclose(file); - return make_parse_result(size_status); - } - - // allocate buffer for the whole file - char* contents = static_cast(xml_memory::allocate(size > 0 ? size : 1)); - - if (!contents) - { - fclose(file); - return make_parse_result(status_out_of_memory); - } - - // read file in memory - size_t read_size = fread(contents, 1, size, file); - fclose(file); - - if (read_size != size) - { - xml_memory::deallocate(contents); - return make_parse_result(status_io_error); - } - - return doc.load_buffer_inplace_own(contents, size, options, encoding); - } - -#ifndef PUGIXML_NO_STL - template struct xml_stream_chunk - { - static xml_stream_chunk* create() - { - void* memory = xml_memory::allocate(sizeof(xml_stream_chunk)); - - return new (memory) xml_stream_chunk(); - } - - static void destroy(void* ptr) - { - xml_stream_chunk* chunk = static_cast(ptr); - - // free chunk chain - while (chunk) - { - xml_stream_chunk* next = chunk->next; - xml_memory::deallocate(chunk); - chunk = next; - } - } - - xml_stream_chunk(): next(0), size(0) - { - } - - xml_stream_chunk* next; - size_t size; - - T data[xml_memory_page_size / sizeof(T)]; - }; - - template PUGI__FN xml_parse_status load_stream_data_noseek(std::basic_istream& stream, void** out_buffer, size_t* out_size) - { - buffer_holder chunks(0, xml_stream_chunk::destroy); - - // read file to a chunk list - size_t total = 0; - xml_stream_chunk* last = 0; - - while (!stream.eof()) - { - // allocate new chunk - xml_stream_chunk* chunk = xml_stream_chunk::create(); - if (!chunk) return status_out_of_memory; - - // append chunk to list - if (last) last = last->next = chunk; - else chunks.data = last = chunk; - - // read data to chunk - stream.read(chunk->data, static_cast(sizeof(chunk->data) / sizeof(T))); - chunk->size = static_cast(stream.gcount()) * sizeof(T); - - // read may set failbit | eofbit in case gcount() is less than read length, so check for other I/O errors - if (stream.bad() || (!stream.eof() && stream.fail())) return status_io_error; - - // guard against huge files (chunk size is small enough to make this overflow check work) - if (total + chunk->size < total) return status_out_of_memory; - total += chunk->size; - } - - // copy chunk list to a contiguous buffer - char* buffer = static_cast(xml_memory::allocate(total)); - if (!buffer) return status_out_of_memory; - - char* write = buffer; - - for (xml_stream_chunk* chunk = static_cast*>(chunks.data); chunk; chunk = chunk->next) - { - assert(write + chunk->size <= buffer + total); - memcpy(write, chunk->data, chunk->size); - write += chunk->size; - } - - assert(write == buffer + total); - - // return buffer - *out_buffer = buffer; - *out_size = total; - - return status_ok; - } - - template PUGI__FN xml_parse_status load_stream_data_seek(std::basic_istream& stream, void** out_buffer, size_t* out_size) - { - // get length of remaining data in stream - typename std::basic_istream::pos_type pos = stream.tellg(); - stream.seekg(0, std::ios::end); - std::streamoff length = stream.tellg() - pos; - stream.seekg(pos); - - if (stream.fail() || pos < 0) return status_io_error; - - // guard against huge files - size_t read_length = static_cast(length); - - if (static_cast(read_length) != length || length < 0) return status_out_of_memory; - - // read stream data into memory (guard against stream exceptions with buffer holder) - buffer_holder buffer(xml_memory::allocate((read_length > 0 ? read_length : 1) * sizeof(T)), xml_memory::deallocate); - if (!buffer.data) return status_out_of_memory; - - stream.read(static_cast(buffer.data), static_cast(read_length)); - - // read may set failbit | eofbit in case gcount() is less than read_length (i.e. line ending conversion), so check for other I/O errors - if (stream.bad() || (!stream.eof() && stream.fail())) return status_io_error; - - // return buffer - size_t actual_length = static_cast(stream.gcount()); - assert(actual_length <= read_length); - - *out_buffer = buffer.release(); - *out_size = actual_length * sizeof(T); - - return status_ok; - } - - template PUGI__FN xml_parse_result load_stream_impl(xml_document& doc, std::basic_istream& stream, unsigned int options, xml_encoding encoding) - { - void* buffer = 0; - size_t size = 0; - - // load stream to memory (using seek-based implementation if possible, since it's faster and takes less memory) - xml_parse_status status = (stream.tellg() < 0) ? load_stream_data_noseek(stream, &buffer, &size) : load_stream_data_seek(stream, &buffer, &size); - if (status != status_ok) return make_parse_result(status); - - return doc.load_buffer_inplace_own(buffer, size, options, encoding); - } -#endif - -#if defined(PUGI__MSVC_CRT_VERSION) || defined(__BORLANDC__) || (defined(__MINGW32__) && !defined(__STRICT_ANSI__)) - PUGI__FN FILE* open_file_wide(const wchar_t* path, const wchar_t* mode) - { - return _wfopen(path, mode); - } -#else - PUGI__FN char* convert_path_heap(const wchar_t* str) - { - assert(str); - - // first pass: get length in utf8 characters - size_t length = wcslen(str); - size_t size = as_utf8_begin(str, length); - - // allocate resulting string - char* result = static_cast(xml_memory::allocate(size + 1)); - if (!result) return 0; - - // second pass: convert to utf8 - as_utf8_end(result, size, str, length); - - return result; - } - - PUGI__FN FILE* open_file_wide(const wchar_t* path, const wchar_t* mode) - { - // there is no standard function to open wide paths, so our best bet is to try utf8 path - char* path_utf8 = convert_path_heap(path); - if (!path_utf8) return 0; - - // convert mode to ASCII (we mirror _wfopen interface) - char mode_ascii[4] = {0}; - for (size_t i = 0; mode[i]; ++i) mode_ascii[i] = static_cast(mode[i]); - - // try to open the utf8 path - FILE* result = fopen(path_utf8, mode_ascii); - - // free dummy buffer - xml_memory::deallocate(path_utf8); - - return result; - } -#endif - - PUGI__FN bool save_file_impl(const xml_document& doc, FILE* file, const char_t* indent, unsigned int flags, xml_encoding encoding) - { - if (!file) return false; - - xml_writer_file writer(file); - doc.save(writer, indent, flags, encoding); - - int result = ferror(file); - - fclose(file); - - return result == 0; - } -PUGI__NS_END - -namespace pugi -{ - PUGI__FN xml_writer_file::xml_writer_file(void* file_): file(file_) - { - } - - PUGI__FN void xml_writer_file::write(const void* data, size_t size) - { - size_t result = fwrite(data, 1, size, static_cast(file)); - (void)!result; // unfortunately we can't do proper error handling here - } - -#ifndef PUGIXML_NO_STL - PUGI__FN xml_writer_stream::xml_writer_stream(std::basic_ostream >& stream): narrow_stream(&stream), wide_stream(0) - { - } - - PUGI__FN xml_writer_stream::xml_writer_stream(std::basic_ostream >& stream): narrow_stream(0), wide_stream(&stream) - { - } - - PUGI__FN void xml_writer_stream::write(const void* data, size_t size) - { - if (narrow_stream) - { - assert(!wide_stream); - narrow_stream->write(reinterpret_cast(data), static_cast(size)); - } - else - { - assert(wide_stream); - assert(size % sizeof(wchar_t) == 0); - - wide_stream->write(reinterpret_cast(data), static_cast(size / sizeof(wchar_t))); - } - } -#endif - - PUGI__FN xml_tree_walker::xml_tree_walker(): _depth(0) - { - } - - PUGI__FN xml_tree_walker::~xml_tree_walker() - { - } - - PUGI__FN int xml_tree_walker::depth() const - { - return _depth; - } - - PUGI__FN bool xml_tree_walker::begin(xml_node&) - { - return true; - } - - PUGI__FN bool xml_tree_walker::end(xml_node&) - { - return true; - } - - PUGI__FN xml_attribute::xml_attribute(): _attr(0) - { - } - - PUGI__FN xml_attribute::xml_attribute(xml_attribute_struct* attr): _attr(attr) - { - } - - PUGI__FN static void unspecified_bool_xml_attribute(xml_attribute***) - { - } - - PUGI__FN xml_attribute::operator xml_attribute::unspecified_bool_type() const - { - return _attr ? unspecified_bool_xml_attribute : 0; - } - - PUGI__FN bool xml_attribute::operator!() const - { - return !_attr; - } - - PUGI__FN bool xml_attribute::operator==(const xml_attribute& r) const - { - return (_attr == r._attr); - } - - PUGI__FN bool xml_attribute::operator!=(const xml_attribute& r) const - { - return (_attr != r._attr); - } - - PUGI__FN bool xml_attribute::operator<(const xml_attribute& r) const - { - return (_attr < r._attr); - } - - PUGI__FN bool xml_attribute::operator>(const xml_attribute& r) const - { - return (_attr > r._attr); - } - - PUGI__FN bool xml_attribute::operator<=(const xml_attribute& r) const - { - return (_attr <= r._attr); - } - - PUGI__FN bool xml_attribute::operator>=(const xml_attribute& r) const - { - return (_attr >= r._attr); - } - - PUGI__FN xml_attribute xml_attribute::next_attribute() const - { - return _attr ? xml_attribute(_attr->next_attribute) : xml_attribute(); - } - - PUGI__FN xml_attribute xml_attribute::previous_attribute() const - { - return _attr && _attr->prev_attribute_c->next_attribute ? xml_attribute(_attr->prev_attribute_c) : xml_attribute(); - } - - PUGI__FN const char_t* xml_attribute::as_string(const char_t* def) const - { - return (_attr && _attr->value) ? _attr->value : def; - } - - PUGI__FN int xml_attribute::as_int(int def) const - { - return impl::get_value_int(_attr ? _attr->value : 0, def); - } - - PUGI__FN unsigned int xml_attribute::as_uint(unsigned int def) const - { - return impl::get_value_uint(_attr ? _attr->value : 0, def); - } - - PUGI__FN double xml_attribute::as_double(double def) const - { - return impl::get_value_double(_attr ? _attr->value : 0, def); - } - - PUGI__FN float xml_attribute::as_float(float def) const - { - return impl::get_value_float(_attr ? _attr->value : 0, def); - } - - PUGI__FN bool xml_attribute::as_bool(bool def) const - { - return impl::get_value_bool(_attr ? _attr->value : 0, def); - } - - PUGI__FN bool xml_attribute::empty() const - { - return !_attr; - } - - PUGI__FN const char_t* xml_attribute::name() const - { - return (_attr && _attr->name) ? _attr->name : PUGIXML_TEXT(""); - } - - PUGI__FN const char_t* xml_attribute::value() const - { - return (_attr && _attr->value) ? _attr->value : PUGIXML_TEXT(""); - } - - PUGI__FN size_t xml_attribute::hash_value() const - { - return static_cast(reinterpret_cast(_attr) / sizeof(xml_attribute_struct)); - } - - PUGI__FN xml_attribute_struct* xml_attribute::internal_object() const - { - return _attr; - } - - PUGI__FN xml_attribute& xml_attribute::operator=(const char_t* rhs) - { - set_value(rhs); - return *this; - } - - PUGI__FN xml_attribute& xml_attribute::operator=(int rhs) - { - set_value(rhs); - return *this; - } - - PUGI__FN xml_attribute& xml_attribute::operator=(unsigned int rhs) - { - set_value(rhs); - return *this; - } - - PUGI__FN xml_attribute& xml_attribute::operator=(double rhs) - { - set_value(rhs); - return *this; - } - - PUGI__FN xml_attribute& xml_attribute::operator=(bool rhs) - { - set_value(rhs); - return *this; - } - - PUGI__FN bool xml_attribute::set_name(const char_t* rhs) - { - if (!_attr) return false; - - return impl::strcpy_insitu(_attr->name, _attr->header, impl::xml_memory_page_name_allocated_mask, rhs); - } - - PUGI__FN bool xml_attribute::set_value(const char_t* rhs) - { - if (!_attr) return false; - - return impl::strcpy_insitu(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs); - } - - PUGI__FN bool xml_attribute::set_value(int rhs) - { - if (!_attr) return false; - - return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs); - } - - PUGI__FN bool xml_attribute::set_value(unsigned int rhs) - { - if (!_attr) return false; - - return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs); - } - - PUGI__FN bool xml_attribute::set_value(double rhs) - { - if (!_attr) return false; - - return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs); - } - - PUGI__FN bool xml_attribute::set_value(bool rhs) - { - if (!_attr) return false; - - return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs); - } - -#ifdef __BORLANDC__ - PUGI__FN bool operator&&(const xml_attribute& lhs, bool rhs) - { - return (bool)lhs && rhs; - } - - PUGI__FN bool operator||(const xml_attribute& lhs, bool rhs) - { - return (bool)lhs || rhs; - } -#endif - - PUGI__FN xml_node::xml_node(): _root(0) - { - } - - PUGI__FN xml_node::xml_node(xml_node_struct* p): _root(p) - { - } - - PUGI__FN static void unspecified_bool_xml_node(xml_node***) - { - } - - PUGI__FN xml_node::operator xml_node::unspecified_bool_type() const - { - return _root ? unspecified_bool_xml_node : 0; - } - - PUGI__FN bool xml_node::operator!() const - { - return !_root; - } - - PUGI__FN xml_node::iterator xml_node::begin() const - { - return iterator(_root ? _root->first_child : 0, _root); - } - - PUGI__FN xml_node::iterator xml_node::end() const - { - return iterator(0, _root); - } - - PUGI__FN xml_node::attribute_iterator xml_node::attributes_begin() const - { - return attribute_iterator(_root ? _root->first_attribute : 0, _root); - } - - PUGI__FN xml_node::attribute_iterator xml_node::attributes_end() const - { - return attribute_iterator(0, _root); - } - - PUGI__FN xml_object_range xml_node::children() const - { - return xml_object_range(begin(), end()); - } - - PUGI__FN xml_object_range xml_node::children(const char_t* name_) const - { - return xml_object_range(xml_named_node_iterator(child(name_), name_), xml_named_node_iterator()); - } - - PUGI__FN xml_object_range xml_node::attributes() const - { - return xml_object_range(attributes_begin(), attributes_end()); - } - - PUGI__FN bool xml_node::operator==(const xml_node& r) const - { - return (_root == r._root); - } - - PUGI__FN bool xml_node::operator!=(const xml_node& r) const - { - return (_root != r._root); - } - - PUGI__FN bool xml_node::operator<(const xml_node& r) const - { - return (_root < r._root); - } - - PUGI__FN bool xml_node::operator>(const xml_node& r) const - { - return (_root > r._root); - } - - PUGI__FN bool xml_node::operator<=(const xml_node& r) const - { - return (_root <= r._root); - } - - PUGI__FN bool xml_node::operator>=(const xml_node& r) const - { - return (_root >= r._root); - } - - PUGI__FN bool xml_node::empty() const - { - return !_root; - } - - PUGI__FN const char_t* xml_node::name() const - { - return (_root && _root->name) ? _root->name : PUGIXML_TEXT(""); - } - - PUGI__FN xml_node_type xml_node::type() const - { - return _root ? static_cast((_root->header & impl::xml_memory_page_type_mask) + 1) : node_null; - } - - PUGI__FN const char_t* xml_node::value() const - { - return (_root && _root->value) ? _root->value : PUGIXML_TEXT(""); - } - - PUGI__FN xml_node xml_node::child(const char_t* name_) const - { - if (!_root) return xml_node(); - - for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) - if (i->name && impl::strequal(name_, i->name)) return xml_node(i); - - return xml_node(); - } - - PUGI__FN xml_attribute xml_node::attribute(const char_t* name_) const - { - if (!_root) return xml_attribute(); - - for (xml_attribute_struct* i = _root->first_attribute; i; i = i->next_attribute) - if (i->name && impl::strequal(name_, i->name)) - return xml_attribute(i); - - return xml_attribute(); - } - - PUGI__FN xml_node xml_node::next_sibling(const char_t* name_) const - { - if (!_root) return xml_node(); - - for (xml_node_struct* i = _root->next_sibling; i; i = i->next_sibling) - if (i->name && impl::strequal(name_, i->name)) return xml_node(i); - - return xml_node(); - } - - PUGI__FN xml_node xml_node::next_sibling() const - { - if (!_root) return xml_node(); - - if (_root->next_sibling) return xml_node(_root->next_sibling); - else return xml_node(); - } - - PUGI__FN xml_node xml_node::previous_sibling(const char_t* name_) const - { - if (!_root) return xml_node(); - - for (xml_node_struct* i = _root->prev_sibling_c; i->next_sibling; i = i->prev_sibling_c) - if (i->name && impl::strequal(name_, i->name)) return xml_node(i); - - return xml_node(); - } - - PUGI__FN xml_node xml_node::previous_sibling() const - { - if (!_root) return xml_node(); - - if (_root->prev_sibling_c->next_sibling) return xml_node(_root->prev_sibling_c); - else return xml_node(); - } - - PUGI__FN xml_node xml_node::parent() const - { - return _root ? xml_node(_root->parent) : xml_node(); - } - - PUGI__FN xml_node xml_node::root() const - { - if (!_root) return xml_node(); - - impl::xml_memory_page* page = reinterpret_cast(_root->header & impl::xml_memory_page_pointer_mask); - - return xml_node(static_cast(page->allocator)); - } - - PUGI__FN xml_text xml_node::text() const - { - return xml_text(_root); - } - - PUGI__FN const char_t* xml_node::child_value() const - { - if (!_root) return PUGIXML_TEXT(""); - - for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) - if (i->value && impl::is_text_node(i)) - return i->value; - - return PUGIXML_TEXT(""); - } - - PUGI__FN const char_t* xml_node::child_value(const char_t* name_) const - { - return child(name_).child_value(); - } - - PUGI__FN xml_attribute xml_node::first_attribute() const - { - return _root ? xml_attribute(_root->first_attribute) : xml_attribute(); - } - - PUGI__FN xml_attribute xml_node::last_attribute() const - { - return _root && _root->first_attribute ? xml_attribute(_root->first_attribute->prev_attribute_c) : xml_attribute(); - } - - PUGI__FN xml_node xml_node::first_child() const - { - return _root ? xml_node(_root->first_child) : xml_node(); - } - - PUGI__FN xml_node xml_node::last_child() const - { - return _root && _root->first_child ? xml_node(_root->first_child->prev_sibling_c) : xml_node(); - } - - PUGI__FN bool xml_node::set_name(const char_t* rhs) - { - switch (type()) - { - case node_pi: - case node_declaration: - case node_element: - return impl::strcpy_insitu(_root->name, _root->header, impl::xml_memory_page_name_allocated_mask, rhs); - - default: - return false; - } - } - - PUGI__FN bool xml_node::set_value(const char_t* rhs) - { - switch (type()) - { - case node_pi: - case node_cdata: - case node_pcdata: - case node_comment: - case node_doctype: - return impl::strcpy_insitu(_root->value, _root->header, impl::xml_memory_page_value_allocated_mask, rhs); - - default: - return false; - } - } - - PUGI__FN xml_attribute xml_node::append_attribute(const char_t* name_) - { - if (type() != node_element && type() != node_declaration) return xml_attribute(); - - xml_attribute a(impl::append_attribute_ll(_root, impl::get_allocator(_root))); - a.set_name(name_); - - return a; - } - - PUGI__FN xml_attribute xml_node::prepend_attribute(const char_t* name_) - { - if (type() != node_element && type() != node_declaration) return xml_attribute(); - - xml_attribute a(impl::allocate_attribute(impl::get_allocator(_root))); - if (!a) return xml_attribute(); - - a.set_name(name_); - - xml_attribute_struct* head = _root->first_attribute; - - if (head) - { - a._attr->prev_attribute_c = head->prev_attribute_c; - head->prev_attribute_c = a._attr; - } - else - a._attr->prev_attribute_c = a._attr; - - a._attr->next_attribute = head; - _root->first_attribute = a._attr; - - return a; - } - - PUGI__FN xml_attribute xml_node::insert_attribute_before(const char_t* name_, const xml_attribute& attr) - { - if ((type() != node_element && type() != node_declaration) || attr.empty()) return xml_attribute(); - - // check that attribute belongs to *this - xml_attribute_struct* cur = attr._attr; - - while (cur->prev_attribute_c->next_attribute) cur = cur->prev_attribute_c; - - if (cur != _root->first_attribute) return xml_attribute(); - - xml_attribute a(impl::allocate_attribute(impl::get_allocator(_root))); - if (!a) return xml_attribute(); - - a.set_name(name_); - - if (attr._attr->prev_attribute_c->next_attribute) - attr._attr->prev_attribute_c->next_attribute = a._attr; - else - _root->first_attribute = a._attr; - - a._attr->prev_attribute_c = attr._attr->prev_attribute_c; - a._attr->next_attribute = attr._attr; - attr._attr->prev_attribute_c = a._attr; - - return a; - } - - PUGI__FN xml_attribute xml_node::insert_attribute_after(const char_t* name_, const xml_attribute& attr) - { - if ((type() != node_element && type() != node_declaration) || attr.empty()) return xml_attribute(); - - // check that attribute belongs to *this - xml_attribute_struct* cur = attr._attr; - - while (cur->prev_attribute_c->next_attribute) cur = cur->prev_attribute_c; - - if (cur != _root->first_attribute) return xml_attribute(); - - xml_attribute a(impl::allocate_attribute(impl::get_allocator(_root))); - if (!a) return xml_attribute(); - - a.set_name(name_); - - if (attr._attr->next_attribute) - attr._attr->next_attribute->prev_attribute_c = a._attr; - else - _root->first_attribute->prev_attribute_c = a._attr; - - a._attr->next_attribute = attr._attr->next_attribute; - a._attr->prev_attribute_c = attr._attr; - attr._attr->next_attribute = a._attr; - - return a; - } - - PUGI__FN xml_attribute xml_node::append_copy(const xml_attribute& proto) - { - if (!proto) return xml_attribute(); - - xml_attribute result = append_attribute(proto.name()); - result.set_value(proto.value()); - - return result; - } - - PUGI__FN xml_attribute xml_node::prepend_copy(const xml_attribute& proto) - { - if (!proto) return xml_attribute(); - - xml_attribute result = prepend_attribute(proto.name()); - result.set_value(proto.value()); - - return result; - } - - PUGI__FN xml_attribute xml_node::insert_copy_after(const xml_attribute& proto, const xml_attribute& attr) - { - if (!proto) return xml_attribute(); - - xml_attribute result = insert_attribute_after(proto.name(), attr); - result.set_value(proto.value()); - - return result; - } - - PUGI__FN xml_attribute xml_node::insert_copy_before(const xml_attribute& proto, const xml_attribute& attr) - { - if (!proto) return xml_attribute(); - - xml_attribute result = insert_attribute_before(proto.name(), attr); - result.set_value(proto.value()); - - return result; - } - - PUGI__FN xml_node xml_node::append_child(xml_node_type type_) - { - if (!impl::allow_insert_child(this->type(), type_)) return xml_node(); - - xml_node n(impl::append_node(_root, impl::get_allocator(_root), type_)); - - if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); - - return n; - } - - PUGI__FN xml_node xml_node::prepend_child(xml_node_type type_) - { - if (!impl::allow_insert_child(this->type(), type_)) return xml_node(); - - xml_node n(impl::allocate_node(impl::get_allocator(_root), type_)); - if (!n) return xml_node(); - - n._root->parent = _root; - - xml_node_struct* head = _root->first_child; - - if (head) - { - n._root->prev_sibling_c = head->prev_sibling_c; - head->prev_sibling_c = n._root; - } - else - n._root->prev_sibling_c = n._root; - - n._root->next_sibling = head; - _root->first_child = n._root; - - if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); - - return n; - } - - PUGI__FN xml_node xml_node::insert_child_before(xml_node_type type_, const xml_node& node) - { - if (!impl::allow_insert_child(this->type(), type_)) return xml_node(); - if (!node._root || node._root->parent != _root) return xml_node(); - - xml_node n(impl::allocate_node(impl::get_allocator(_root), type_)); - if (!n) return xml_node(); - - n._root->parent = _root; - - if (node._root->prev_sibling_c->next_sibling) - node._root->prev_sibling_c->next_sibling = n._root; - else - _root->first_child = n._root; - - n._root->prev_sibling_c = node._root->prev_sibling_c; - n._root->next_sibling = node._root; - node._root->prev_sibling_c = n._root; - - if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); - - return n; - } - - PUGI__FN xml_node xml_node::insert_child_after(xml_node_type type_, const xml_node& node) - { - if (!impl::allow_insert_child(this->type(), type_)) return xml_node(); - if (!node._root || node._root->parent != _root) return xml_node(); - - xml_node n(impl::allocate_node(impl::get_allocator(_root), type_)); - if (!n) return xml_node(); - - n._root->parent = _root; - - if (node._root->next_sibling) - node._root->next_sibling->prev_sibling_c = n._root; - else - _root->first_child->prev_sibling_c = n._root; - - n._root->next_sibling = node._root->next_sibling; - n._root->prev_sibling_c = node._root; - node._root->next_sibling = n._root; - - if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); - - return n; - } - - PUGI__FN xml_node xml_node::append_child(const char_t* name_) - { - xml_node result = append_child(node_element); - - result.set_name(name_); - - return result; - } - - PUGI__FN xml_node xml_node::prepend_child(const char_t* name_) - { - xml_node result = prepend_child(node_element); - - result.set_name(name_); - - return result; - } - - PUGI__FN xml_node xml_node::insert_child_after(const char_t* name_, const xml_node& node) - { - xml_node result = insert_child_after(node_element, node); - - result.set_name(name_); - - return result; - } - - PUGI__FN xml_node xml_node::insert_child_before(const char_t* name_, const xml_node& node) - { - xml_node result = insert_child_before(node_element, node); - - result.set_name(name_); - - return result; - } - - PUGI__FN xml_node xml_node::append_copy(const xml_node& proto) - { - xml_node result = append_child(proto.type()); - - if (result) impl::recursive_copy_skip(result, proto, result); - - return result; - } - - PUGI__FN xml_node xml_node::prepend_copy(const xml_node& proto) - { - xml_node result = prepend_child(proto.type()); - - if (result) impl::recursive_copy_skip(result, proto, result); - - return result; - } - - PUGI__FN xml_node xml_node::insert_copy_after(const xml_node& proto, const xml_node& node) - { - xml_node result = insert_child_after(proto.type(), node); - - if (result) impl::recursive_copy_skip(result, proto, result); - - return result; - } - - PUGI__FN xml_node xml_node::insert_copy_before(const xml_node& proto, const xml_node& node) - { - xml_node result = insert_child_before(proto.type(), node); - - if (result) impl::recursive_copy_skip(result, proto, result); - - return result; - } - - PUGI__FN bool xml_node::remove_attribute(const char_t* name_) - { - return remove_attribute(attribute(name_)); - } - - PUGI__FN bool xml_node::remove_attribute(const xml_attribute& a) - { - if (!_root || !a._attr) return false; - - // check that attribute belongs to *this - xml_attribute_struct* attr = a._attr; - - while (attr->prev_attribute_c->next_attribute) attr = attr->prev_attribute_c; - - if (attr != _root->first_attribute) return false; - - if (a._attr->next_attribute) a._attr->next_attribute->prev_attribute_c = a._attr->prev_attribute_c; - else if (_root->first_attribute) _root->first_attribute->prev_attribute_c = a._attr->prev_attribute_c; - - if (a._attr->prev_attribute_c->next_attribute) a._attr->prev_attribute_c->next_attribute = a._attr->next_attribute; - else _root->first_attribute = a._attr->next_attribute; - - impl::destroy_attribute(a._attr, impl::get_allocator(_root)); - - return true; - } - - PUGI__FN bool xml_node::remove_child(const char_t* name_) - { - return remove_child(child(name_)); - } - - PUGI__FN bool xml_node::remove_child(const xml_node& n) - { - if (!_root || !n._root || n._root->parent != _root) return false; - - if (n._root->next_sibling) n._root->next_sibling->prev_sibling_c = n._root->prev_sibling_c; - else if (_root->first_child) _root->first_child->prev_sibling_c = n._root->prev_sibling_c; - - if (n._root->prev_sibling_c->next_sibling) n._root->prev_sibling_c->next_sibling = n._root->next_sibling; - else _root->first_child = n._root->next_sibling; - - impl::destroy_node(n._root, impl::get_allocator(_root)); - - return true; - } - - PUGI__FN xml_node xml_node::find_child_by_attribute(const char_t* name_, const char_t* attr_name, const char_t* attr_value) const - { - if (!_root) return xml_node(); - - for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) - if (i->name && impl::strequal(name_, i->name)) - { - for (xml_attribute_struct* a = i->first_attribute; a; a = a->next_attribute) - if (impl::strequal(attr_name, a->name) && impl::strequal(attr_value, a->value)) - return xml_node(i); - } - - return xml_node(); - } - - PUGI__FN xml_node xml_node::find_child_by_attribute(const char_t* attr_name, const char_t* attr_value) const - { - if (!_root) return xml_node(); - - for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) - for (xml_attribute_struct* a = i->first_attribute; a; a = a->next_attribute) - if (impl::strequal(attr_name, a->name) && impl::strequal(attr_value, a->value)) - return xml_node(i); - - return xml_node(); - } - -#ifndef PUGIXML_NO_STL - PUGI__FN string_t xml_node::path(char_t delimiter) const - { - xml_node cursor = *this; // Make a copy. - - string_t result = cursor.name(); - - while (cursor.parent()) - { - cursor = cursor.parent(); - - string_t temp = cursor.name(); - temp += delimiter; - temp += result; - result.swap(temp); - } - - return result; - } -#endif - - PUGI__FN xml_node xml_node::first_element_by_path(const char_t* path_, char_t delimiter) const - { - xml_node found = *this; // Current search context. - - if (!_root || !path_ || !path_[0]) return found; - - if (path_[0] == delimiter) - { - // Absolute path; e.g. '/foo/bar' - found = found.root(); - ++path_; - } - - const char_t* path_segment = path_; - - while (*path_segment == delimiter) ++path_segment; - - const char_t* path_segment_end = path_segment; - - while (*path_segment_end && *path_segment_end != delimiter) ++path_segment_end; - - if (path_segment == path_segment_end) return found; - - const char_t* next_segment = path_segment_end; - - while (*next_segment == delimiter) ++next_segment; - - if (*path_segment == '.' && path_segment + 1 == path_segment_end) - return found.first_element_by_path(next_segment, delimiter); - else if (*path_segment == '.' && *(path_segment+1) == '.' && path_segment + 2 == path_segment_end) - return found.parent().first_element_by_path(next_segment, delimiter); - else - { - for (xml_node_struct* j = found._root->first_child; j; j = j->next_sibling) - { - if (j->name && impl::strequalrange(j->name, path_segment, static_cast(path_segment_end - path_segment))) - { - xml_node subsearch = xml_node(j).first_element_by_path(next_segment, delimiter); - - if (subsearch) return subsearch; - } - } - - return xml_node(); - } - } - - PUGI__FN bool xml_node::traverse(xml_tree_walker& walker) - { - walker._depth = -1; - - xml_node arg_begin = *this; - if (!walker.begin(arg_begin)) return false; - - xml_node cur = first_child(); - - if (cur) - { - ++walker._depth; - - do - { - xml_node arg_for_each = cur; - if (!walker.for_each(arg_for_each)) - return false; - - if (cur.first_child()) - { - ++walker._depth; - cur = cur.first_child(); - } - else if (cur.next_sibling()) - cur = cur.next_sibling(); - else - { - // Borland C++ workaround - while (!cur.next_sibling() && cur != *this && !cur.parent().empty()) - { - --walker._depth; - cur = cur.parent(); - } - - if (cur != *this) - cur = cur.next_sibling(); - } - } - while (cur && cur != *this); - } - - assert(walker._depth == -1); - - xml_node arg_end = *this; - return walker.end(arg_end); - } - - PUGI__FN size_t xml_node::hash_value() const - { - return static_cast(reinterpret_cast(_root) / sizeof(xml_node_struct)); - } - - PUGI__FN xml_node_struct* xml_node::internal_object() const - { - return _root; - } - - PUGI__FN void xml_node::print(xml_writer& writer, const char_t* indent, unsigned int flags, xml_encoding encoding, unsigned int depth) const - { - if (!_root) return; - - impl::xml_buffered_writer buffered_writer(writer, encoding); - - impl::node_output(buffered_writer, *this, indent, flags, depth); - } - -#ifndef PUGIXML_NO_STL - PUGI__FN void xml_node::print(std::basic_ostream >& stream, const char_t* indent, unsigned int flags, xml_encoding encoding, unsigned int depth) const - { - xml_writer_stream writer(stream); - - print(writer, indent, flags, encoding, depth); - } - - PUGI__FN void xml_node::print(std::basic_ostream >& stream, const char_t* indent, unsigned int flags, unsigned int depth) const - { - xml_writer_stream writer(stream); - - print(writer, indent, flags, encoding_wchar, depth); - } -#endif - - PUGI__FN ptrdiff_t xml_node::offset_debug() const - { - xml_node_struct* r = root()._root; - - if (!r) return -1; - - const char_t* buffer = static_cast(r)->buffer; - - if (!buffer) return -1; - - switch (type()) - { - case node_document: - return 0; - - case node_element: - case node_declaration: - case node_pi: - return (_root->header & impl::xml_memory_page_name_allocated_mask) ? -1 : _root->name - buffer; - - case node_pcdata: - case node_cdata: - case node_comment: - case node_doctype: - return (_root->header & impl::xml_memory_page_value_allocated_mask) ? -1 : _root->value - buffer; - - default: - return -1; - } - } - -#ifdef __BORLANDC__ - PUGI__FN bool operator&&(const xml_node& lhs, bool rhs) - { - return (bool)lhs && rhs; - } - - PUGI__FN bool operator||(const xml_node& lhs, bool rhs) - { - return (bool)lhs || rhs; - } -#endif - - PUGI__FN xml_text::xml_text(xml_node_struct* root): _root(root) - { - } - - PUGI__FN xml_node_struct* xml_text::_data() const - { - if (!_root || impl::is_text_node(_root)) return _root; - - for (xml_node_struct* node = _root->first_child; node; node = node->next_sibling) - if (impl::is_text_node(node)) - return node; - - return 0; - } - - PUGI__FN xml_node_struct* xml_text::_data_new() - { - xml_node_struct* d = _data(); - if (d) return d; - - return xml_node(_root).append_child(node_pcdata).internal_object(); - } - - PUGI__FN xml_text::xml_text(): _root(0) - { - } - - PUGI__FN static void unspecified_bool_xml_text(xml_text***) - { - } - - PUGI__FN xml_text::operator xml_text::unspecified_bool_type() const - { - return _data() ? unspecified_bool_xml_text : 0; - } - - PUGI__FN bool xml_text::operator!() const - { - return !_data(); - } - - PUGI__FN bool xml_text::empty() const - { - return _data() == 0; - } - - PUGI__FN const char_t* xml_text::get() const - { - xml_node_struct* d = _data(); - - return (d && d->value) ? d->value : PUGIXML_TEXT(""); - } - - PUGI__FN const char_t* xml_text::as_string(const char_t* def) const - { - xml_node_struct* d = _data(); - - return (d && d->value) ? d->value : def; - } - - PUGI__FN int xml_text::as_int(int def) const - { - xml_node_struct* d = _data(); - - return impl::get_value_int(d ? d->value : 0, def); - } - - PUGI__FN unsigned int xml_text::as_uint(unsigned int def) const - { - xml_node_struct* d = _data(); - - return impl::get_value_uint(d ? d->value : 0, def); - } - - PUGI__FN double xml_text::as_double(double def) const - { - xml_node_struct* d = _data(); - - return impl::get_value_double(d ? d->value : 0, def); - } - - PUGI__FN float xml_text::as_float(float def) const - { - xml_node_struct* d = _data(); - - return impl::get_value_float(d ? d->value : 0, def); - } - - PUGI__FN bool xml_text::as_bool(bool def) const - { - xml_node_struct* d = _data(); - - return impl::get_value_bool(d ? d->value : 0, def); - } - - PUGI__FN bool xml_text::set(const char_t* rhs) - { - xml_node_struct* dn = _data_new(); - - return dn ? impl::strcpy_insitu(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs) : false; - } - - PUGI__FN bool xml_text::set(int rhs) - { - xml_node_struct* dn = _data_new(); - - return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs) : false; - } - - PUGI__FN bool xml_text::set(unsigned int rhs) - { - xml_node_struct* dn = _data_new(); - - return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs) : false; - } - - PUGI__FN bool xml_text::set(double rhs) - { - xml_node_struct* dn = _data_new(); - - return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs) : false; - } - - PUGI__FN bool xml_text::set(bool rhs) - { - xml_node_struct* dn = _data_new(); - - return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs) : false; - } - - PUGI__FN xml_text& xml_text::operator=(const char_t* rhs) - { - set(rhs); - return *this; - } - - PUGI__FN xml_text& xml_text::operator=(int rhs) - { - set(rhs); - return *this; - } - - PUGI__FN xml_text& xml_text::operator=(unsigned int rhs) - { - set(rhs); - return *this; - } - - PUGI__FN xml_text& xml_text::operator=(double rhs) - { - set(rhs); - return *this; - } - - PUGI__FN xml_text& xml_text::operator=(bool rhs) - { - set(rhs); - return *this; - } - - PUGI__FN xml_node xml_text::data() const - { - return xml_node(_data()); - } - -#ifdef __BORLANDC__ - PUGI__FN bool operator&&(const xml_text& lhs, bool rhs) - { - return (bool)lhs && rhs; - } - - PUGI__FN bool operator||(const xml_text& lhs, bool rhs) - { - return (bool)lhs || rhs; - } -#endif - - PUGI__FN xml_node_iterator::xml_node_iterator() - { - } - - PUGI__FN xml_node_iterator::xml_node_iterator(const xml_node& node): _wrap(node), _parent(node.parent()) - { - } - - PUGI__FN xml_node_iterator::xml_node_iterator(xml_node_struct* ref, xml_node_struct* parent): _wrap(ref), _parent(parent) - { - } - - PUGI__FN bool xml_node_iterator::operator==(const xml_node_iterator& rhs) const - { - return _wrap._root == rhs._wrap._root && _parent._root == rhs._parent._root; - } - - PUGI__FN bool xml_node_iterator::operator!=(const xml_node_iterator& rhs) const - { - return _wrap._root != rhs._wrap._root || _parent._root != rhs._parent._root; - } - - PUGI__FN xml_node& xml_node_iterator::operator*() const - { - assert(_wrap._root); - return _wrap; - } - - PUGI__FN xml_node* xml_node_iterator::operator->() const - { - assert(_wrap._root); - return const_cast(&_wrap); // BCC32 workaround - } - - PUGI__FN const xml_node_iterator& xml_node_iterator::operator++() - { - assert(_wrap._root); - _wrap._root = _wrap._root->next_sibling; - return *this; - } - - PUGI__FN xml_node_iterator xml_node_iterator::operator++(int) - { - xml_node_iterator temp = *this; - ++*this; - return temp; - } - - PUGI__FN const xml_node_iterator& xml_node_iterator::operator--() - { - _wrap = _wrap._root ? _wrap.previous_sibling() : _parent.last_child(); - return *this; - } - - PUGI__FN xml_node_iterator xml_node_iterator::operator--(int) - { - xml_node_iterator temp = *this; - --*this; - return temp; - } - - PUGI__FN xml_attribute_iterator::xml_attribute_iterator() - { - } - - PUGI__FN xml_attribute_iterator::xml_attribute_iterator(const xml_attribute& attr, const xml_node& parent): _wrap(attr), _parent(parent) - { - } - - PUGI__FN xml_attribute_iterator::xml_attribute_iterator(xml_attribute_struct* ref, xml_node_struct* parent): _wrap(ref), _parent(parent) - { - } - - PUGI__FN bool xml_attribute_iterator::operator==(const xml_attribute_iterator& rhs) const - { - return _wrap._attr == rhs._wrap._attr && _parent._root == rhs._parent._root; - } - - PUGI__FN bool xml_attribute_iterator::operator!=(const xml_attribute_iterator& rhs) const - { - return _wrap._attr != rhs._wrap._attr || _parent._root != rhs._parent._root; - } - - PUGI__FN xml_attribute& xml_attribute_iterator::operator*() const - { - assert(_wrap._attr); - return _wrap; - } - - PUGI__FN xml_attribute* xml_attribute_iterator::operator->() const - { - assert(_wrap._attr); - return const_cast(&_wrap); // BCC32 workaround - } - - PUGI__FN const xml_attribute_iterator& xml_attribute_iterator::operator++() - { - assert(_wrap._attr); - _wrap._attr = _wrap._attr->next_attribute; - return *this; - } - - PUGI__FN xml_attribute_iterator xml_attribute_iterator::operator++(int) - { - xml_attribute_iterator temp = *this; - ++*this; - return temp; - } - - PUGI__FN const xml_attribute_iterator& xml_attribute_iterator::operator--() - { - _wrap = _wrap._attr ? _wrap.previous_attribute() : _parent.last_attribute(); - return *this; - } - - PUGI__FN xml_attribute_iterator xml_attribute_iterator::operator--(int) - { - xml_attribute_iterator temp = *this; - --*this; - return temp; - } - - PUGI__FN xml_named_node_iterator::xml_named_node_iterator(): _name(0) - { - } - - PUGI__FN xml_named_node_iterator::xml_named_node_iterator(const xml_node& node, const char_t* name): _node(node), _name(name) - { - } - - PUGI__FN bool xml_named_node_iterator::operator==(const xml_named_node_iterator& rhs) const - { - return _node == rhs._node; - } - - PUGI__FN bool xml_named_node_iterator::operator!=(const xml_named_node_iterator& rhs) const - { - return _node != rhs._node; - } - - PUGI__FN xml_node& xml_named_node_iterator::operator*() const - { - assert(_node._root); - return _node; - } - - PUGI__FN xml_node* xml_named_node_iterator::operator->() const - { - assert(_node._root); - return const_cast(&_node); // BCC32 workaround - } - - PUGI__FN const xml_named_node_iterator& xml_named_node_iterator::operator++() - { - assert(_node._root); - _node = _node.next_sibling(_name); - return *this; - } - - PUGI__FN xml_named_node_iterator xml_named_node_iterator::operator++(int) - { - xml_named_node_iterator temp = *this; - ++*this; - return temp; - } - - PUGI__FN xml_parse_result::xml_parse_result(): status(status_internal_error), offset(0), encoding(encoding_auto) - { - } - - PUGI__FN xml_parse_result::operator bool() const - { - return status == status_ok; - } - - PUGI__FN const char* xml_parse_result::description() const - { - switch (status) - { - case status_ok: return "No error"; - - case status_file_not_found: return "File was not found"; - case status_io_error: return "Error reading from file/stream"; - case status_out_of_memory: return "Could not allocate memory"; - case status_internal_error: return "Internal error occurred"; - - case status_unrecognized_tag: return "Could not determine tag type"; - - case status_bad_pi: return "Error parsing document declaration/processing instruction"; - case status_bad_comment: return "Error parsing comment"; - case status_bad_cdata: return "Error parsing CDATA section"; - case status_bad_doctype: return "Error parsing document type declaration"; - case status_bad_pcdata: return "Error parsing PCDATA section"; - case status_bad_start_element: return "Error parsing start element tag"; - case status_bad_attribute: return "Error parsing element attribute"; - case status_bad_end_element: return "Error parsing end element tag"; - case status_end_element_mismatch: return "Start-end tags mismatch"; - - default: return "Unknown error"; - } - } - - PUGI__FN xml_document::xml_document(): _buffer(0) - { - create(); - } - - PUGI__FN xml_document::~xml_document() - { - destroy(); - } - - PUGI__FN void xml_document::reset() - { - destroy(); - create(); - } - - PUGI__FN void xml_document::reset(const xml_document& proto) - { - reset(); - - for (xml_node cur = proto.first_child(); cur; cur = cur.next_sibling()) - append_copy(cur); - } - - PUGI__FN void xml_document::create() - { - // initialize sentinel page - PUGI__STATIC_ASSERT(offsetof(impl::xml_memory_page, data) + sizeof(impl::xml_document_struct) + impl::xml_memory_page_alignment <= sizeof(_memory)); - - // align upwards to page boundary - void* page_memory = reinterpret_cast((reinterpret_cast(_memory) + (impl::xml_memory_page_alignment - 1)) & ~(impl::xml_memory_page_alignment - 1)); - - // prepare page structure - impl::xml_memory_page* page = impl::xml_memory_page::construct(page_memory); - - page->busy_size = impl::xml_memory_page_size; - - // allocate new root - _root = new (page->data) impl::xml_document_struct(page); - _root->prev_sibling_c = _root; - - // setup sentinel page - page->allocator = static_cast(_root); - } - - PUGI__FN void xml_document::destroy() - { - // destroy static storage - if (_buffer) - { - impl::xml_memory::deallocate(_buffer); - _buffer = 0; - } - - // destroy dynamic storage, leave sentinel page (it's in static memory) - if (_root) - { - impl::xml_memory_page* root_page = reinterpret_cast(_root->header & impl::xml_memory_page_pointer_mask); - assert(root_page && !root_page->prev && !root_page->memory); - - // destroy all pages - for (impl::xml_memory_page* page = root_page->next; page; ) - { - impl::xml_memory_page* next = page->next; - - impl::xml_allocator::deallocate_page(page); - - page = next; - } - - // cleanup root page - root_page->allocator = 0; - root_page->next = 0; - root_page->busy_size = root_page->freed_size = 0; - - _root = 0; - } - } - -#ifndef PUGIXML_NO_STL - PUGI__FN xml_parse_result xml_document::load(std::basic_istream >& stream, unsigned int options, xml_encoding encoding) - { - reset(); - - return impl::load_stream_impl(*this, stream, options, encoding); - } - - PUGI__FN xml_parse_result xml_document::load(std::basic_istream >& stream, unsigned int options) - { - reset(); - - return impl::load_stream_impl(*this, stream, options, encoding_wchar); - } -#endif - - PUGI__FN xml_parse_result xml_document::load(const char_t* contents, unsigned int options) - { - // Force native encoding (skip autodetection) - #ifdef PUGIXML_WCHAR_MODE - xml_encoding encoding = encoding_wchar; - #else - xml_encoding encoding = encoding_utf8; - #endif - - return load_buffer(contents, impl::strlength(contents) * sizeof(char_t), options, encoding); - } - - PUGI__FN xml_parse_result xml_document::load_file(const char* path_, unsigned int options, xml_encoding encoding) - { - reset(); - - FILE* file = fopen(path_, "rb"); - - return impl::load_file_impl(*this, file, options, encoding); - } - - PUGI__FN xml_parse_result xml_document::load_file(const wchar_t* path_, unsigned int options, xml_encoding encoding) - { - reset(); - - FILE* file = impl::open_file_wide(path_, L"rb"); - - return impl::load_file_impl(*this, file, options, encoding); - } - - PUGI__FN xml_parse_result xml_document::load_buffer_impl(void* contents, size_t size, unsigned int options, xml_encoding encoding, bool is_mutable, bool own) - { - reset(); - - // check input buffer - assert(contents || size == 0); - - // get actual encoding - xml_encoding buffer_encoding = impl::get_buffer_encoding(encoding, contents, size); - - // get private buffer - char_t* buffer = 0; - size_t length = 0; - - if (!impl::convert_buffer(buffer, length, buffer_encoding, contents, size, is_mutable)) return impl::make_parse_result(status_out_of_memory); - - // delete original buffer if we performed a conversion - if (own && buffer != contents && contents) impl::xml_memory::deallocate(contents); - - // parse - xml_parse_result res = impl::xml_parser::parse(buffer, length, _root, options); - - // remember encoding - res.encoding = buffer_encoding; - - // grab onto buffer if it's our buffer, user is responsible for deallocating contens himself - if (own || buffer != contents) _buffer = buffer; - - return res; - } - - PUGI__FN xml_parse_result xml_document::load_buffer(const void* contents, size_t size, unsigned int options, xml_encoding encoding) - { - return load_buffer_impl(const_cast(contents), size, options, encoding, false, false); - } - - PUGI__FN xml_parse_result xml_document::load_buffer_inplace(void* contents, size_t size, unsigned int options, xml_encoding encoding) - { - return load_buffer_impl(contents, size, options, encoding, true, false); - } - - PUGI__FN xml_parse_result xml_document::load_buffer_inplace_own(void* contents, size_t size, unsigned int options, xml_encoding encoding) - { - return load_buffer_impl(contents, size, options, encoding, true, true); - } - - PUGI__FN void xml_document::save(xml_writer& writer, const char_t* indent, unsigned int flags, xml_encoding encoding) const - { - impl::xml_buffered_writer buffered_writer(writer, encoding); - - if ((flags & format_write_bom) && encoding != encoding_latin1) - { - // BOM always represents the codepoint U+FEFF, so just write it in native encoding - #ifdef PUGIXML_WCHAR_MODE - unsigned int bom = 0xfeff; - buffered_writer.write(static_cast(bom)); - #else - buffered_writer.write('\xef', '\xbb', '\xbf'); - #endif - } - - if (!(flags & format_no_declaration) && !impl::has_declaration(*this)) - { - buffered_writer.write(PUGIXML_TEXT("'); - if (!(flags & format_raw)) buffered_writer.write('\n'); - } - - impl::node_output(buffered_writer, *this, indent, flags, 0); - } - -#ifndef PUGIXML_NO_STL - PUGI__FN void xml_document::save(std::basic_ostream >& stream, const char_t* indent, unsigned int flags, xml_encoding encoding) const - { - xml_writer_stream writer(stream); - - save(writer, indent, flags, encoding); - } - - PUGI__FN void xml_document::save(std::basic_ostream >& stream, const char_t* indent, unsigned int flags) const - { - xml_writer_stream writer(stream); - - save(writer, indent, flags, encoding_wchar); - } -#endif - - PUGI__FN bool xml_document::save_file(const char* path_, const char_t* indent, unsigned int flags, xml_encoding encoding) const - { - FILE* file = fopen(path_, (flags & format_save_file_text) ? "w" : "wb"); - return impl::save_file_impl(*this, file, indent, flags, encoding); - } - - PUGI__FN bool xml_document::save_file(const wchar_t* path_, const char_t* indent, unsigned int flags, xml_encoding encoding) const - { - FILE* file = impl::open_file_wide(path_, (flags & format_save_file_text) ? L"w" : L"wb"); - return impl::save_file_impl(*this, file, indent, flags, encoding); - } - - PUGI__FN xml_node xml_document::document_element() const - { - for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) - if ((i->header & impl::xml_memory_page_type_mask) + 1 == node_element) - return xml_node(i); - - return xml_node(); - } - -#ifndef PUGIXML_NO_STL - PUGI__FN std::string PUGIXML_FUNCTION as_utf8(const wchar_t* str) - { - assert(str); - - return impl::as_utf8_impl(str, wcslen(str)); - } - - PUGI__FN std::string PUGIXML_FUNCTION as_utf8(const std::basic_string& str) - { - return impl::as_utf8_impl(str.c_str(), str.size()); - } - - PUGI__FN std::basic_string PUGIXML_FUNCTION as_wide(const char* str) - { - assert(str); - - return impl::as_wide_impl(str, strlen(str)); - } - - PUGI__FN std::basic_string PUGIXML_FUNCTION as_wide(const std::string& str) - { - return impl::as_wide_impl(str.c_str(), str.size()); - } -#endif - - PUGI__FN void PUGIXML_FUNCTION set_memory_management_functions(allocation_function allocate, deallocation_function deallocate) - { - impl::xml_memory::allocate = allocate; - impl::xml_memory::deallocate = deallocate; - } - - PUGI__FN allocation_function PUGIXML_FUNCTION get_memory_allocation_function() - { - return impl::xml_memory::allocate; - } - - PUGI__FN deallocation_function PUGIXML_FUNCTION get_memory_deallocation_function() - { - return impl::xml_memory::deallocate; - } -} - -#if !defined(PUGIXML_NO_STL) && (defined(_MSC_VER) || defined(__ICC)) -namespace std -{ - // Workarounds for (non-standard) iterator category detection for older versions (MSVC7/IC8 and earlier) - PUGI__FN std::bidirectional_iterator_tag _Iter_cat(const pugi::xml_node_iterator&) - { - return std::bidirectional_iterator_tag(); - } - - PUGI__FN std::bidirectional_iterator_tag _Iter_cat(const pugi::xml_attribute_iterator&) - { - return std::bidirectional_iterator_tag(); - } - - PUGI__FN std::forward_iterator_tag _Iter_cat(const pugi::xml_named_node_iterator&) - { - return std::forward_iterator_tag(); - } -} -#endif - -#if !defined(PUGIXML_NO_STL) && defined(__SUNPRO_CC) -namespace std -{ - // Workarounds for (non-standard) iterator category detection - PUGI__FN std::bidirectional_iterator_tag __iterator_category(const pugi::xml_node_iterator&) - { - return std::bidirectional_iterator_tag(); - } - - PUGI__FN std::bidirectional_iterator_tag __iterator_category(const pugi::xml_attribute_iterator&) - { - return std::bidirectional_iterator_tag(); - } - - PUGI__FN std::forward_iterator_tag __iterator_category(const pugi::xml_named_node_iterator&) - { - return std::forward_iterator_tag(); - } -} -#endif - -#ifndef PUGIXML_NO_XPATH - -// STL replacements -PUGI__NS_BEGIN - struct equal_to - { - template bool operator()(const T& lhs, const T& rhs) const - { - return lhs == rhs; - } - }; - - struct not_equal_to - { - template bool operator()(const T& lhs, const T& rhs) const - { - return lhs != rhs; - } - }; - - struct less - { - template bool operator()(const T& lhs, const T& rhs) const - { - return lhs < rhs; - } - }; - - struct less_equal - { - template bool operator()(const T& lhs, const T& rhs) const - { - return lhs <= rhs; - } - }; - - template void swap(T& lhs, T& rhs) - { - T temp = lhs; - lhs = rhs; - rhs = temp; - } - - template I min_element(I begin, I end, const Pred& pred) - { - I result = begin; - - for (I it = begin + 1; it != end; ++it) - if (pred(*it, *result)) - result = it; - - return result; - } - - template void reverse(I begin, I end) - { - while (begin + 1 < end) swap(*begin++, *--end); - } - - template I unique(I begin, I end) - { - // fast skip head - while (begin + 1 < end && *begin != *(begin + 1)) begin++; - - if (begin == end) return begin; - - // last written element - I write = begin++; - - // merge unique elements - while (begin != end) - { - if (*begin != *write) - *++write = *begin++; - else - begin++; - } - - // past-the-end (write points to live element) - return write + 1; - } - - template void copy_backwards(I begin, I end, I target) - { - while (begin != end) *--target = *--end; - } - - template void insertion_sort(I begin, I end, const Pred& pred, T*) - { - assert(begin != end); - - for (I it = begin + 1; it != end; ++it) - { - T val = *it; - - if (pred(val, *begin)) - { - // move to front - copy_backwards(begin, it, it + 1); - *begin = val; - } - else - { - I hole = it; - - // move hole backwards - while (pred(val, *(hole - 1))) - { - *hole = *(hole - 1); - hole--; - } - - // fill hole with element - *hole = val; - } - } - } - - // std variant for elements with == - template void partition(I begin, I middle, I end, const Pred& pred, I* out_eqbeg, I* out_eqend) - { - I eqbeg = middle, eqend = middle + 1; - - // expand equal range - while (eqbeg != begin && *(eqbeg - 1) == *eqbeg) --eqbeg; - while (eqend != end && *eqend == *eqbeg) ++eqend; - - // process outer elements - I ltend = eqbeg, gtbeg = eqend; - - for (;;) - { - // find the element from the right side that belongs to the left one - for (; gtbeg != end; ++gtbeg) - if (!pred(*eqbeg, *gtbeg)) - { - if (*gtbeg == *eqbeg) swap(*gtbeg, *eqend++); - else break; - } - - // find the element from the left side that belongs to the right one - for (; ltend != begin; --ltend) - if (!pred(*(ltend - 1), *eqbeg)) - { - if (*eqbeg == *(ltend - 1)) swap(*(ltend - 1), *--eqbeg); - else break; - } - - // scanned all elements - if (gtbeg == end && ltend == begin) - { - *out_eqbeg = eqbeg; - *out_eqend = eqend; - return; - } - - // make room for elements by moving equal area - if (gtbeg == end) - { - if (--ltend != --eqbeg) swap(*ltend, *eqbeg); - swap(*eqbeg, *--eqend); - } - else if (ltend == begin) - { - if (eqend != gtbeg) swap(*eqbeg, *eqend); - ++eqend; - swap(*gtbeg++, *eqbeg++); - } - else swap(*gtbeg++, *--ltend); - } - } - - template void median3(I first, I middle, I last, const Pred& pred) - { - if (pred(*middle, *first)) swap(*middle, *first); - if (pred(*last, *middle)) swap(*last, *middle); - if (pred(*middle, *first)) swap(*middle, *first); - } - - template void median(I first, I middle, I last, const Pred& pred) - { - if (last - first <= 40) - { - // median of three for small chunks - median3(first, middle, last, pred); - } - else - { - // median of nine - size_t step = (last - first + 1) / 8; - - median3(first, first + step, first + 2 * step, pred); - median3(middle - step, middle, middle + step, pred); - median3(last - 2 * step, last - step, last, pred); - median3(first + step, middle, last - step, pred); - } - } - - template void sort(I begin, I end, const Pred& pred) - { - // sort large chunks - while (end - begin > 32) - { - // find median element - I middle = begin + (end - begin) / 2; - median(begin, middle, end - 1, pred); - - // partition in three chunks (< = >) - I eqbeg, eqend; - partition(begin, middle, end, pred, &eqbeg, &eqend); - - // loop on larger half - if (eqbeg - begin > end - eqend) - { - sort(eqend, end, pred); - end = eqbeg; - } - else - { - sort(begin, eqbeg, pred); - begin = eqend; - } - } - - // insertion sort small chunk - if (begin != end) insertion_sort(begin, end, pred, &*begin); - } -PUGI__NS_END - -// Allocator used for AST and evaluation stacks -PUGI__NS_BEGIN - struct xpath_memory_block - { - xpath_memory_block* next; - - char data[ - #ifdef PUGIXML_MEMORY_XPATH_PAGE_SIZE - PUGIXML_MEMORY_XPATH_PAGE_SIZE - #else - 4096 - #endif - ]; - }; - - class xpath_allocator - { - xpath_memory_block* _root; - size_t _root_size; - - public: - #ifdef PUGIXML_NO_EXCEPTIONS - jmp_buf* error_handler; - #endif - - xpath_allocator(xpath_memory_block* root, size_t root_size = 0): _root(root), _root_size(root_size) - { - #ifdef PUGIXML_NO_EXCEPTIONS - error_handler = 0; - #endif - } - - void* allocate_nothrow(size_t size) - { - const size_t block_capacity = sizeof(_root->data); - - // align size so that we're able to store pointers in subsequent blocks - size = (size + sizeof(void*) - 1) & ~(sizeof(void*) - 1); - - if (_root_size + size <= block_capacity) - { - void* buf = _root->data + _root_size; - _root_size += size; - return buf; - } - else - { - size_t block_data_size = (size > block_capacity) ? size : block_capacity; - size_t block_size = block_data_size + offsetof(xpath_memory_block, data); - - xpath_memory_block* block = static_cast(xml_memory::allocate(block_size)); - if (!block) return 0; - - block->next = _root; - - _root = block; - _root_size = size; - - return block->data; - } - } - - void* allocate(size_t size) - { - void* result = allocate_nothrow(size); - - if (!result) - { - #ifdef PUGIXML_NO_EXCEPTIONS - assert(error_handler); - longjmp(*error_handler, 1); - #else - throw std::bad_alloc(); - #endif - } - - return result; - } - - void* reallocate(void* ptr, size_t old_size, size_t new_size) - { - // align size so that we're able to store pointers in subsequent blocks - old_size = (old_size + sizeof(void*) - 1) & ~(sizeof(void*) - 1); - new_size = (new_size + sizeof(void*) - 1) & ~(sizeof(void*) - 1); - - // we can only reallocate the last object - assert(ptr == 0 || static_cast(ptr) + old_size == _root->data + _root_size); - - // adjust root size so that we have not allocated the object at all - bool only_object = (_root_size == old_size); - - if (ptr) _root_size -= old_size; - - // allocate a new version (this will obviously reuse the memory if possible) - void* result = allocate(new_size); - assert(result); - - // we have a new block - if (result != ptr && ptr) - { - // copy old data - assert(new_size > old_size); - memcpy(result, ptr, old_size); - - // free the previous page if it had no other objects - if (only_object) - { - assert(_root->data == result); - assert(_root->next); - - xpath_memory_block* next = _root->next->next; - - if (next) - { - // deallocate the whole page, unless it was the first one - xml_memory::deallocate(_root->next); - _root->next = next; - } - } - } - - return result; - } - - void revert(const xpath_allocator& state) - { - // free all new pages - xpath_memory_block* cur = _root; - - while (cur != state._root) - { - xpath_memory_block* next = cur->next; - - xml_memory::deallocate(cur); - - cur = next; - } - - // restore state - _root = state._root; - _root_size = state._root_size; - } - - void release() - { - xpath_memory_block* cur = _root; - assert(cur); - - while (cur->next) - { - xpath_memory_block* next = cur->next; - - xml_memory::deallocate(cur); - - cur = next; - } - } - }; - - struct xpath_allocator_capture - { - xpath_allocator_capture(xpath_allocator* alloc): _target(alloc), _state(*alloc) - { - } - - ~xpath_allocator_capture() - { - _target->revert(_state); - } - - xpath_allocator* _target; - xpath_allocator _state; - }; - - struct xpath_stack - { - xpath_allocator* result; - xpath_allocator* temp; - }; - - struct xpath_stack_data - { - xpath_memory_block blocks[2]; - xpath_allocator result; - xpath_allocator temp; - xpath_stack stack; - - #ifdef PUGIXML_NO_EXCEPTIONS - jmp_buf error_handler; - #endif - - xpath_stack_data(): result(blocks + 0), temp(blocks + 1) - { - blocks[0].next = blocks[1].next = 0; - - stack.result = &result; - stack.temp = &temp; - - #ifdef PUGIXML_NO_EXCEPTIONS - result.error_handler = temp.error_handler = &error_handler; - #endif - } - - ~xpath_stack_data() - { - result.release(); - temp.release(); - } - }; -PUGI__NS_END - -// String class -PUGI__NS_BEGIN - class xpath_string - { - const char_t* _buffer; - bool _uses_heap; - - static char_t* duplicate_string(const char_t* string, size_t length, xpath_allocator* alloc) - { - char_t* result = static_cast(alloc->allocate((length + 1) * sizeof(char_t))); - assert(result); - - memcpy(result, string, length * sizeof(char_t)); - result[length] = 0; - - return result; - } - - static char_t* duplicate_string(const char_t* string, xpath_allocator* alloc) - { - return duplicate_string(string, strlength(string), alloc); - } - - public: - xpath_string(): _buffer(PUGIXML_TEXT("")), _uses_heap(false) - { - } - - explicit xpath_string(const char_t* str, xpath_allocator* alloc) - { - bool empty_ = (*str == 0); - - _buffer = empty_ ? PUGIXML_TEXT("") : duplicate_string(str, alloc); - _uses_heap = !empty_; - } - - explicit xpath_string(const char_t* str, bool use_heap): _buffer(str), _uses_heap(use_heap) - { - } - - xpath_string(const char_t* begin, const char_t* end, xpath_allocator* alloc) - { - assert(begin <= end); - - bool empty_ = (begin == end); - - _buffer = empty_ ? PUGIXML_TEXT("") : duplicate_string(begin, static_cast(end - begin), alloc); - _uses_heap = !empty_; - } - - void append(const xpath_string& o, xpath_allocator* alloc) - { - // skip empty sources - if (!*o._buffer) return; - - // fast append for constant empty target and constant source - if (!*_buffer && !_uses_heap && !o._uses_heap) - { - _buffer = o._buffer; - } - else - { - // need to make heap copy - size_t target_length = strlength(_buffer); - size_t source_length = strlength(o._buffer); - size_t result_length = target_length + source_length; - - // allocate new buffer - char_t* result = static_cast(alloc->reallocate(_uses_heap ? const_cast(_buffer) : 0, (target_length + 1) * sizeof(char_t), (result_length + 1) * sizeof(char_t))); - assert(result); - - // append first string to the new buffer in case there was no reallocation - if (!_uses_heap) memcpy(result, _buffer, target_length * sizeof(char_t)); - - // append second string to the new buffer - memcpy(result + target_length, o._buffer, source_length * sizeof(char_t)); - result[result_length] = 0; - - // finalize - _buffer = result; - _uses_heap = true; - } - } - - const char_t* c_str() const - { - return _buffer; - } - - size_t length() const - { - return strlength(_buffer); - } - - char_t* data(xpath_allocator* alloc) - { - // make private heap copy - if (!_uses_heap) - { - _buffer = duplicate_string(_buffer, alloc); - _uses_heap = true; - } - - return const_cast(_buffer); - } - - bool empty() const - { - return *_buffer == 0; - } - - bool operator==(const xpath_string& o) const - { - return strequal(_buffer, o._buffer); - } - - bool operator!=(const xpath_string& o) const - { - return !strequal(_buffer, o._buffer); - } - - bool uses_heap() const - { - return _uses_heap; - } - }; - - PUGI__FN xpath_string xpath_string_const(const char_t* str) - { - return xpath_string(str, false); - } -PUGI__NS_END - -PUGI__NS_BEGIN - PUGI__FN bool starts_with(const char_t* string, const char_t* pattern) - { - while (*pattern && *string == *pattern) - { - string++; - pattern++; - } - - return *pattern == 0; - } - - PUGI__FN const char_t* find_char(const char_t* s, char_t c) - { - #ifdef PUGIXML_WCHAR_MODE - return wcschr(s, c); - #else - return strchr(s, c); - #endif - } - - PUGI__FN const char_t* find_substring(const char_t* s, const char_t* p) - { - #ifdef PUGIXML_WCHAR_MODE - // MSVC6 wcsstr bug workaround (if s is empty it always returns 0) - return (*p == 0) ? s : wcsstr(s, p); - #else - return strstr(s, p); - #endif - } - - // Converts symbol to lower case, if it is an ASCII one - PUGI__FN char_t tolower_ascii(char_t ch) - { - return static_cast(ch - 'A') < 26 ? static_cast(ch | ' ') : ch; - } - - PUGI__FN xpath_string string_value(const xpath_node& na, xpath_allocator* alloc) - { - if (na.attribute()) - return xpath_string_const(na.attribute().value()); - else - { - const xml_node& n = na.node(); - - switch (n.type()) - { - case node_pcdata: - case node_cdata: - case node_comment: - case node_pi: - return xpath_string_const(n.value()); - - case node_document: - case node_element: - { - xpath_string result; - - xml_node cur = n.first_child(); - - while (cur && cur != n) - { - if (cur.type() == node_pcdata || cur.type() == node_cdata) - result.append(xpath_string_const(cur.value()), alloc); - - if (cur.first_child()) - cur = cur.first_child(); - else if (cur.next_sibling()) - cur = cur.next_sibling(); - else - { - while (!cur.next_sibling() && cur != n) - cur = cur.parent(); - - if (cur != n) cur = cur.next_sibling(); - } - } - - return result; - } - - default: - return xpath_string(); - } - } - } - - PUGI__FN unsigned int node_height(xml_node n) - { - unsigned int result = 0; - - while (n) - { - ++result; - n = n.parent(); - } - - return result; - } - - PUGI__FN bool node_is_before(xml_node ln, unsigned int lh, xml_node rn, unsigned int rh) - { - // normalize heights - for (unsigned int i = rh; i < lh; i++) ln = ln.parent(); - for (unsigned int j = lh; j < rh; j++) rn = rn.parent(); - - // one node is the ancestor of the other - if (ln == rn) return lh < rh; - - // find common ancestor - while (ln.parent() != rn.parent()) - { - ln = ln.parent(); - rn = rn.parent(); - } - - // there is no common ancestor (the shared parent is null), nodes are from different documents - if (!ln.parent()) return ln < rn; - - // determine sibling order - for (; ln; ln = ln.next_sibling()) - if (ln == rn) - return true; - - return false; - } - - PUGI__FN bool node_is_ancestor(xml_node parent, xml_node node) - { - while (node && node != parent) node = node.parent(); - - return parent && node == parent; - } - - PUGI__FN const void* document_order(const xpath_node& xnode) - { - xml_node_struct* node = xnode.node().internal_object(); - - if (node) - { - if (node->name && (node->header & xml_memory_page_name_allocated_mask) == 0) return node->name; - if (node->value && (node->header & xml_memory_page_value_allocated_mask) == 0) return node->value; - return 0; - } - - xml_attribute_struct* attr = xnode.attribute().internal_object(); - - if (attr) - { - if ((attr->header & xml_memory_page_name_allocated_mask) == 0) return attr->name; - if ((attr->header & xml_memory_page_value_allocated_mask) == 0) return attr->value; - return 0; - } - - return 0; - } - - struct document_order_comparator - { - bool operator()(const xpath_node& lhs, const xpath_node& rhs) const - { - // optimized document order based check - const void* lo = document_order(lhs); - const void* ro = document_order(rhs); - - if (lo && ro) return lo < ro; - - // slow comparison - xml_node ln = lhs.node(), rn = rhs.node(); - - // compare attributes - if (lhs.attribute() && rhs.attribute()) - { - // shared parent - if (lhs.parent() == rhs.parent()) - { - // determine sibling order - for (xml_attribute a = lhs.attribute(); a; a = a.next_attribute()) - if (a == rhs.attribute()) - return true; - - return false; - } - - // compare attribute parents - ln = lhs.parent(); - rn = rhs.parent(); - } - else if (lhs.attribute()) - { - // attributes go after the parent element - if (lhs.parent() == rhs.node()) return false; - - ln = lhs.parent(); - } - else if (rhs.attribute()) - { - // attributes go after the parent element - if (rhs.parent() == lhs.node()) return true; - - rn = rhs.parent(); - } - - if (ln == rn) return false; - - unsigned int lh = node_height(ln); - unsigned int rh = node_height(rn); - - return node_is_before(ln, lh, rn, rh); - } - }; - - struct duplicate_comparator - { - bool operator()(const xpath_node& lhs, const xpath_node& rhs) const - { - if (lhs.attribute()) return rhs.attribute() ? lhs.attribute() < rhs.attribute() : true; - else return rhs.attribute() ? false : lhs.node() < rhs.node(); - } - }; - - PUGI__FN double gen_nan() - { - #if defined(__STDC_IEC_559__) || ((FLT_RADIX - 0 == 2) && (FLT_MAX_EXP - 0 == 128) && (FLT_MANT_DIG - 0 == 24)) - union { float f; uint32_t i; } u[sizeof(float) == sizeof(uint32_t) ? 1 : -1]; - u[0].i = 0x7fc00000; - return u[0].f; - #else - // fallback - const volatile double zero = 0.0; - return zero / zero; - #endif - } - - PUGI__FN bool is_nan(double value) - { - #if defined(PUGI__MSVC_CRT_VERSION) || defined(__BORLANDC__) - return !!_isnan(value); - #elif defined(fpclassify) && defined(FP_NAN) - return fpclassify(value) == FP_NAN; - #else - // fallback - const volatile double v = value; - return v != v; - #endif - } - - PUGI__FN const char_t* convert_number_to_string_special(double value) - { - #if defined(PUGI__MSVC_CRT_VERSION) || defined(__BORLANDC__) - if (_finite(value)) return (value == 0) ? PUGIXML_TEXT("0") : 0; - if (_isnan(value)) return PUGIXML_TEXT("NaN"); - return value > 0 ? PUGIXML_TEXT("Infinity") : PUGIXML_TEXT("-Infinity"); - #elif defined(fpclassify) && defined(FP_NAN) && defined(FP_INFINITE) && defined(FP_ZERO) - switch (fpclassify(value)) - { - case FP_NAN: - return PUGIXML_TEXT("NaN"); - - case FP_INFINITE: - return value > 0 ? PUGIXML_TEXT("Infinity") : PUGIXML_TEXT("-Infinity"); - - case FP_ZERO: - return PUGIXML_TEXT("0"); - - default: - return 0; - } - #else - // fallback - const volatile double v = value; - - if (v == 0) return PUGIXML_TEXT("0"); - if (v != v) return PUGIXML_TEXT("NaN"); - if (v * 2 == v) return value > 0 ? PUGIXML_TEXT("Infinity") : PUGIXML_TEXT("-Infinity"); - return 0; - #endif - } - - PUGI__FN bool convert_number_to_boolean(double value) - { - return (value != 0 && !is_nan(value)); - } - - PUGI__FN void truncate_zeros(char* begin, char* end) - { - while (begin != end && end[-1] == '0') end--; - - *end = 0; - } - - // gets mantissa digits in the form of 0.xxxxx with 0. implied and the exponent -#if defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 && !defined(_WIN32_WCE) - PUGI__FN void convert_number_to_mantissa_exponent(double value, char* buffer, size_t buffer_size, char** out_mantissa, int* out_exponent) - { - // get base values - int sign, exponent; - _ecvt_s(buffer, buffer_size, value, DBL_DIG + 1, &exponent, &sign); - - // truncate redundant zeros - truncate_zeros(buffer, buffer + strlen(buffer)); - - // fill results - *out_mantissa = buffer; - *out_exponent = exponent; - } -#else - PUGI__FN void convert_number_to_mantissa_exponent(double value, char* buffer, size_t buffer_size, char** out_mantissa, int* out_exponent) - { - // get a scientific notation value with IEEE DBL_DIG decimals - sprintf(buffer, "%.*e", DBL_DIG, value); - assert(strlen(buffer) < buffer_size); - (void)!buffer_size; - - // get the exponent (possibly negative) - char* exponent_string = strchr(buffer, 'e'); - assert(exponent_string); - - int exponent = atoi(exponent_string + 1); - - // extract mantissa string: skip sign - char* mantissa = buffer[0] == '-' ? buffer + 1 : buffer; - assert(mantissa[0] != '0' && mantissa[1] == '.'); - - // divide mantissa by 10 to eliminate integer part - mantissa[1] = mantissa[0]; - mantissa++; - exponent++; - - // remove extra mantissa digits and zero-terminate mantissa - truncate_zeros(mantissa, exponent_string); - - // fill results - *out_mantissa = mantissa; - *out_exponent = exponent; - } -#endif - - PUGI__FN xpath_string convert_number_to_string(double value, xpath_allocator* alloc) - { - // try special number conversion - const char_t* special = convert_number_to_string_special(value); - if (special) return xpath_string_const(special); - - // get mantissa + exponent form - char mantissa_buffer[64]; - - char* mantissa; - int exponent; - convert_number_to_mantissa_exponent(value, mantissa_buffer, sizeof(mantissa_buffer), &mantissa, &exponent); - - // make the number! - char_t result[512]; - char_t* s = result; - - // sign - if (value < 0) *s++ = '-'; - - // integer part - if (exponent <= 0) - { - *s++ = '0'; - } - else - { - while (exponent > 0) - { - assert(*mantissa == 0 || static_cast(*mantissa - '0') <= 9); - *s++ = *mantissa ? *mantissa++ : '0'; - exponent--; - } - } - - // fractional part - if (*mantissa) - { - // decimal point - *s++ = '.'; - - // extra zeroes from negative exponent - while (exponent < 0) - { - *s++ = '0'; - exponent++; - } - - // extra mantissa digits - while (*mantissa) - { - assert(static_cast(*mantissa - '0') <= 9); - *s++ = *mantissa++; - } - } - - // zero-terminate - assert(s < result + sizeof(result) / sizeof(result[0])); - *s = 0; - - return xpath_string(result, alloc); - } - - PUGI__FN bool check_string_to_number_format(const char_t* string) - { - // parse leading whitespace - while (PUGI__IS_CHARTYPE(*string, ct_space)) ++string; - - // parse sign - if (*string == '-') ++string; - - if (!*string) return false; - - // if there is no integer part, there should be a decimal part with at least one digit - if (!PUGI__IS_CHARTYPEX(string[0], ctx_digit) && (string[0] != '.' || !PUGI__IS_CHARTYPEX(string[1], ctx_digit))) return false; - - // parse integer part - while (PUGI__IS_CHARTYPEX(*string, ctx_digit)) ++string; - - // parse decimal part - if (*string == '.') - { - ++string; - - while (PUGI__IS_CHARTYPEX(*string, ctx_digit)) ++string; - } - - // parse trailing whitespace - while (PUGI__IS_CHARTYPE(*string, ct_space)) ++string; - - return *string == 0; - } - - PUGI__FN double convert_string_to_number(const char_t* string) - { - // check string format - if (!check_string_to_number_format(string)) return gen_nan(); - - // parse string - #ifdef PUGIXML_WCHAR_MODE - return wcstod(string, 0); - #else - return atof(string); - #endif - } - - PUGI__FN bool convert_string_to_number(const char_t* begin, const char_t* end, double* out_result) - { - char_t buffer[32]; - - size_t length = static_cast(end - begin); - char_t* scratch = buffer; - - if (length >= sizeof(buffer) / sizeof(buffer[0])) - { - // need to make dummy on-heap copy - scratch = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); - if (!scratch) return false; - } - - // copy string to zero-terminated buffer and perform conversion - memcpy(scratch, begin, length * sizeof(char_t)); - scratch[length] = 0; - - *out_result = convert_string_to_number(scratch); - - // free dummy buffer - if (scratch != buffer) xml_memory::deallocate(scratch); - - return true; - } - - PUGI__FN double round_nearest(double value) - { - return floor(value + 0.5); - } - - PUGI__FN double round_nearest_nzero(double value) - { - // same as round_nearest, but returns -0 for [-0.5, -0] - // ceil is used to differentiate between +0 and -0 (we return -0 for [-0.5, -0] and +0 for +0) - return (value >= -0.5 && value <= 0) ? ceil(value) : floor(value + 0.5); - } - - PUGI__FN const char_t* qualified_name(const xpath_node& node) - { - return node.attribute() ? node.attribute().name() : node.node().name(); - } - - PUGI__FN const char_t* local_name(const xpath_node& node) - { - const char_t* name = qualified_name(node); - const char_t* p = find_char(name, ':'); - - return p ? p + 1 : name; - } - - struct namespace_uri_predicate - { - const char_t* prefix; - size_t prefix_length; - - namespace_uri_predicate(const char_t* name) - { - const char_t* pos = find_char(name, ':'); - - prefix = pos ? name : 0; - prefix_length = pos ? static_cast(pos - name) : 0; - } - - bool operator()(const xml_attribute& a) const - { - const char_t* name = a.name(); - - if (!starts_with(name, PUGIXML_TEXT("xmlns"))) return false; - - return prefix ? name[5] == ':' && strequalrange(name + 6, prefix, prefix_length) : name[5] == 0; - } - }; - - PUGI__FN const char_t* namespace_uri(const xml_node& node) - { - namespace_uri_predicate pred = node.name(); - - xml_node p = node; - - while (p) - { - xml_attribute a = p.find_attribute(pred); - - if (a) return a.value(); - - p = p.parent(); - } - - return PUGIXML_TEXT(""); - } - - PUGI__FN const char_t* namespace_uri(const xml_attribute& attr, const xml_node& parent) - { - namespace_uri_predicate pred = attr.name(); - - // Default namespace does not apply to attributes - if (!pred.prefix) return PUGIXML_TEXT(""); - - xml_node p = parent; - - while (p) - { - xml_attribute a = p.find_attribute(pred); - - if (a) return a.value(); - - p = p.parent(); - } - - return PUGIXML_TEXT(""); - } - - PUGI__FN const char_t* namespace_uri(const xpath_node& node) - { - return node.attribute() ? namespace_uri(node.attribute(), node.parent()) : namespace_uri(node.node()); - } - - PUGI__FN void normalize_space(char_t* buffer) - { - char_t* write = buffer; - - for (char_t* it = buffer; *it; ) - { - char_t ch = *it++; - - if (PUGI__IS_CHARTYPE(ch, ct_space)) - { - // replace whitespace sequence with single space - while (PUGI__IS_CHARTYPE(*it, ct_space)) it++; - - // avoid leading spaces - if (write != buffer) *write++ = ' '; - } - else *write++ = ch; - } - - // remove trailing space - if (write != buffer && PUGI__IS_CHARTYPE(write[-1], ct_space)) write--; - - // zero-terminate - *write = 0; - } - - PUGI__FN void translate(char_t* buffer, const char_t* from, const char_t* to) - { - size_t to_length = strlength(to); - - char_t* write = buffer; - - while (*buffer) - { - PUGI__DMC_VOLATILE char_t ch = *buffer++; - - const char_t* pos = find_char(from, ch); - - if (!pos) - *write++ = ch; // do not process - else if (static_cast(pos - from) < to_length) - *write++ = to[pos - from]; // replace - } - - // zero-terminate - *write = 0; - } - - struct xpath_variable_boolean: xpath_variable - { - xpath_variable_boolean(): value(false) - { - } - - bool value; - char_t name[1]; - }; - - struct xpath_variable_number: xpath_variable - { - xpath_variable_number(): value(0) - { - } - - double value; - char_t name[1]; - }; - - struct xpath_variable_string: xpath_variable - { - xpath_variable_string(): value(0) - { - } - - ~xpath_variable_string() - { - if (value) xml_memory::deallocate(value); - } - - char_t* value; - char_t name[1]; - }; - - struct xpath_variable_node_set: xpath_variable - { - xpath_node_set value; - char_t name[1]; - }; - - static const xpath_node_set dummy_node_set; - - PUGI__FN unsigned int hash_string(const char_t* str) - { - // Jenkins one-at-a-time hash (http://en.wikipedia.org/wiki/Jenkins_hash_function#one-at-a-time) - unsigned int result = 0; - - while (*str) - { - result += static_cast(*str++); - result += result << 10; - result ^= result >> 6; - } - - result += result << 3; - result ^= result >> 11; - result += result << 15; - - return result; - } - - template PUGI__FN T* new_xpath_variable(const char_t* name) - { - size_t length = strlength(name); - if (length == 0) return 0; // empty variable names are invalid - - // $$ we can't use offsetof(T, name) because T is non-POD, so we just allocate additional length characters - void* memory = xml_memory::allocate(sizeof(T) + length * sizeof(char_t)); - if (!memory) return 0; - - T* result = new (memory) T(); - - memcpy(result->name, name, (length + 1) * sizeof(char_t)); - - return result; - } - - PUGI__FN xpath_variable* new_xpath_variable(xpath_value_type type, const char_t* name) - { - switch (type) - { - case xpath_type_node_set: - return new_xpath_variable(name); - - case xpath_type_number: - return new_xpath_variable(name); - - case xpath_type_string: - return new_xpath_variable(name); - - case xpath_type_boolean: - return new_xpath_variable(name); - - default: - return 0; - } - } - - template PUGI__FN void delete_xpath_variable(T* var) - { - var->~T(); - xml_memory::deallocate(var); - } - - PUGI__FN void delete_xpath_variable(xpath_value_type type, xpath_variable* var) - { - switch (type) - { - case xpath_type_node_set: - delete_xpath_variable(static_cast(var)); - break; - - case xpath_type_number: - delete_xpath_variable(static_cast(var)); - break; - - case xpath_type_string: - delete_xpath_variable(static_cast(var)); - break; - - case xpath_type_boolean: - delete_xpath_variable(static_cast(var)); - break; - - default: - assert(!"Invalid variable type"); - } - } - - PUGI__FN xpath_variable* get_variable(xpath_variable_set* set, const char_t* begin, const char_t* end) - { - char_t buffer[32]; - - size_t length = static_cast(end - begin); - char_t* scratch = buffer; - - if (length >= sizeof(buffer) / sizeof(buffer[0])) - { - // need to make dummy on-heap copy - scratch = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); - if (!scratch) return 0; - } - - // copy string to zero-terminated buffer and perform lookup - memcpy(scratch, begin, length * sizeof(char_t)); - scratch[length] = 0; - - xpath_variable* result = set->get(scratch); - - // free dummy buffer - if (scratch != buffer) xml_memory::deallocate(scratch); - - return result; - } -PUGI__NS_END - -// Internal node set class -PUGI__NS_BEGIN - PUGI__FN xpath_node_set::type_t xpath_sort(xpath_node* begin, xpath_node* end, xpath_node_set::type_t type, bool rev) - { - xpath_node_set::type_t order = rev ? xpath_node_set::type_sorted_reverse : xpath_node_set::type_sorted; - - if (type == xpath_node_set::type_unsorted) - { - sort(begin, end, document_order_comparator()); - - type = xpath_node_set::type_sorted; - } - - if (type != order) reverse(begin, end); - - return order; - } - - PUGI__FN xpath_node xpath_first(const xpath_node* begin, const xpath_node* end, xpath_node_set::type_t type) - { - if (begin == end) return xpath_node(); - - switch (type) - { - case xpath_node_set::type_sorted: - return *begin; - - case xpath_node_set::type_sorted_reverse: - return *(end - 1); - - case xpath_node_set::type_unsorted: - return *min_element(begin, end, document_order_comparator()); - - default: - assert(!"Invalid node set type"); - return xpath_node(); - } - } - - class xpath_node_set_raw - { - xpath_node_set::type_t _type; - - xpath_node* _begin; - xpath_node* _end; - xpath_node* _eos; - - public: - xpath_node_set_raw(): _type(xpath_node_set::type_unsorted), _begin(0), _end(0), _eos(0) - { - } - - xpath_node* begin() const - { - return _begin; - } - - xpath_node* end() const - { - return _end; - } - - bool empty() const - { - return _begin == _end; - } - - size_t size() const - { - return static_cast(_end - _begin); - } - - xpath_node first() const - { - return xpath_first(_begin, _end, _type); - } - - void push_back(const xpath_node& node, xpath_allocator* alloc) - { - if (_end == _eos) - { - size_t capacity = static_cast(_eos - _begin); - - // get new capacity (1.5x rule) - size_t new_capacity = capacity + capacity / 2 + 1; - - // reallocate the old array or allocate a new one - xpath_node* data = static_cast(alloc->reallocate(_begin, capacity * sizeof(xpath_node), new_capacity * sizeof(xpath_node))); - assert(data); - - // finalize - _begin = data; - _end = data + capacity; - _eos = data + new_capacity; - } - - *_end++ = node; - } - - void append(const xpath_node* begin_, const xpath_node* end_, xpath_allocator* alloc) - { - size_t size_ = static_cast(_end - _begin); - size_t capacity = static_cast(_eos - _begin); - size_t count = static_cast(end_ - begin_); - - if (size_ + count > capacity) - { - // reallocate the old array or allocate a new one - xpath_node* data = static_cast(alloc->reallocate(_begin, capacity * sizeof(xpath_node), (size_ + count) * sizeof(xpath_node))); - assert(data); - - // finalize - _begin = data; - _end = data + size_; - _eos = data + size_ + count; - } - - memcpy(_end, begin_, count * sizeof(xpath_node)); - _end += count; - } - - void sort_do() - { - _type = xpath_sort(_begin, _end, _type, false); - } - - void truncate(xpath_node* pos) - { - assert(_begin <= pos && pos <= _end); - - _end = pos; - } - - void remove_duplicates() - { - if (_type == xpath_node_set::type_unsorted) - sort(_begin, _end, duplicate_comparator()); - - _end = unique(_begin, _end); - } - - xpath_node_set::type_t type() const - { - return _type; - } - - void set_type(xpath_node_set::type_t value) - { - _type = value; - } - }; -PUGI__NS_END - -PUGI__NS_BEGIN - struct xpath_context - { - xpath_node n; - size_t position, size; - - xpath_context(const xpath_node& n_, size_t position_, size_t size_): n(n_), position(position_), size(size_) - { - } - }; - - enum lexeme_t - { - lex_none = 0, - lex_equal, - lex_not_equal, - lex_less, - lex_greater, - lex_less_or_equal, - lex_greater_or_equal, - lex_plus, - lex_minus, - lex_multiply, - lex_union, - lex_var_ref, - lex_open_brace, - lex_close_brace, - lex_quoted_string, - lex_number, - lex_slash, - lex_double_slash, - lex_open_square_brace, - lex_close_square_brace, - lex_string, - lex_comma, - lex_axis_attribute, - lex_dot, - lex_double_dot, - lex_double_colon, - lex_eof - }; - - struct xpath_lexer_string - { - const char_t* begin; - const char_t* end; - - xpath_lexer_string(): begin(0), end(0) - { - } - - bool operator==(const char_t* other) const - { - size_t length = static_cast(end - begin); - - return strequalrange(other, begin, length); - } - }; - - class xpath_lexer - { - const char_t* _cur; - const char_t* _cur_lexeme_pos; - xpath_lexer_string _cur_lexeme_contents; - - lexeme_t _cur_lexeme; - - public: - explicit xpath_lexer(const char_t* query): _cur(query) - { - next(); - } - - const char_t* state() const - { - return _cur; - } - - void next() - { - const char_t* cur = _cur; - - while (PUGI__IS_CHARTYPE(*cur, ct_space)) ++cur; - - // save lexeme position for error reporting - _cur_lexeme_pos = cur; - - switch (*cur) - { - case 0: - _cur_lexeme = lex_eof; - break; - - case '>': - if (*(cur+1) == '=') - { - cur += 2; - _cur_lexeme = lex_greater_or_equal; - } - else - { - cur += 1; - _cur_lexeme = lex_greater; - } - break; - - case '<': - if (*(cur+1) == '=') - { - cur += 2; - _cur_lexeme = lex_less_or_equal; - } - else - { - cur += 1; - _cur_lexeme = lex_less; - } - break; - - case '!': - if (*(cur+1) == '=') - { - cur += 2; - _cur_lexeme = lex_not_equal; - } - else - { - _cur_lexeme = lex_none; - } - break; - - case '=': - cur += 1; - _cur_lexeme = lex_equal; - - break; - - case '+': - cur += 1; - _cur_lexeme = lex_plus; - - break; - - case '-': - cur += 1; - _cur_lexeme = lex_minus; - - break; - - case '*': - cur += 1; - _cur_lexeme = lex_multiply; - - break; - - case '|': - cur += 1; - _cur_lexeme = lex_union; - - break; - - case '$': - cur += 1; - - if (PUGI__IS_CHARTYPEX(*cur, ctx_start_symbol)) - { - _cur_lexeme_contents.begin = cur; - - while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; - - if (cur[0] == ':' && PUGI__IS_CHARTYPEX(cur[1], ctx_symbol)) // qname - { - cur++; // : - - while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; - } - - _cur_lexeme_contents.end = cur; - - _cur_lexeme = lex_var_ref; - } - else - { - _cur_lexeme = lex_none; - } - - break; - - case '(': - cur += 1; - _cur_lexeme = lex_open_brace; - - break; - - case ')': - cur += 1; - _cur_lexeme = lex_close_brace; - - break; - - case '[': - cur += 1; - _cur_lexeme = lex_open_square_brace; - - break; - - case ']': - cur += 1; - _cur_lexeme = lex_close_square_brace; - - break; - - case ',': - cur += 1; - _cur_lexeme = lex_comma; - - break; - - case '/': - if (*(cur+1) == '/') - { - cur += 2; - _cur_lexeme = lex_double_slash; - } - else - { - cur += 1; - _cur_lexeme = lex_slash; - } - break; - - case '.': - if (*(cur+1) == '.') - { - cur += 2; - _cur_lexeme = lex_double_dot; - } - else if (PUGI__IS_CHARTYPEX(*(cur+1), ctx_digit)) - { - _cur_lexeme_contents.begin = cur; // . - - ++cur; - - while (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) cur++; - - _cur_lexeme_contents.end = cur; - - _cur_lexeme = lex_number; - } - else - { - cur += 1; - _cur_lexeme = lex_dot; - } - break; - - case '@': - cur += 1; - _cur_lexeme = lex_axis_attribute; - - break; - - case '"': - case '\'': - { - char_t terminator = *cur; - - ++cur; - - _cur_lexeme_contents.begin = cur; - while (*cur && *cur != terminator) cur++; - _cur_lexeme_contents.end = cur; - - if (!*cur) - _cur_lexeme = lex_none; - else - { - cur += 1; - _cur_lexeme = lex_quoted_string; - } - - break; - } - - case ':': - if (*(cur+1) == ':') - { - cur += 2; - _cur_lexeme = lex_double_colon; - } - else - { - _cur_lexeme = lex_none; - } - break; - - default: - if (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) - { - _cur_lexeme_contents.begin = cur; - - while (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) cur++; - - if (*cur == '.') - { - cur++; - - while (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) cur++; - } - - _cur_lexeme_contents.end = cur; - - _cur_lexeme = lex_number; - } - else if (PUGI__IS_CHARTYPEX(*cur, ctx_start_symbol)) - { - _cur_lexeme_contents.begin = cur; - - while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; - - if (cur[0] == ':') - { - if (cur[1] == '*') // namespace test ncname:* - { - cur += 2; // :* - } - else if (PUGI__IS_CHARTYPEX(cur[1], ctx_symbol)) // namespace test qname - { - cur++; // : - - while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; - } - } - - _cur_lexeme_contents.end = cur; - - _cur_lexeme = lex_string; - } - else - { - _cur_lexeme = lex_none; - } - } - - _cur = cur; - } - - lexeme_t current() const - { - return _cur_lexeme; - } - - const char_t* current_pos() const - { - return _cur_lexeme_pos; - } - - const xpath_lexer_string& contents() const - { - assert(_cur_lexeme == lex_var_ref || _cur_lexeme == lex_number || _cur_lexeme == lex_string || _cur_lexeme == lex_quoted_string); - - return _cur_lexeme_contents; - } - }; - - enum ast_type_t - { - ast_op_or, // left or right - ast_op_and, // left and right - ast_op_equal, // left = right - ast_op_not_equal, // left != right - ast_op_less, // left < right - ast_op_greater, // left > right - ast_op_less_or_equal, // left <= right - ast_op_greater_or_equal, // left >= right - ast_op_add, // left + right - ast_op_subtract, // left - right - ast_op_multiply, // left * right - ast_op_divide, // left / right - ast_op_mod, // left % right - ast_op_negate, // left - right - ast_op_union, // left | right - ast_predicate, // apply predicate to set; next points to next predicate - ast_filter, // select * from left where right - ast_filter_posinv, // select * from left where right; proximity position invariant - ast_string_constant, // string constant - ast_number_constant, // number constant - ast_variable, // variable - ast_func_last, // last() - ast_func_position, // position() - ast_func_count, // count(left) - ast_func_id, // id(left) - ast_func_local_name_0, // local-name() - ast_func_local_name_1, // local-name(left) - ast_func_namespace_uri_0, // namespace-uri() - ast_func_namespace_uri_1, // namespace-uri(left) - ast_func_name_0, // name() - ast_func_name_1, // name(left) - ast_func_string_0, // string() - ast_func_string_1, // string(left) - ast_func_concat, // concat(left, right, siblings) - ast_func_starts_with, // starts_with(left, right) - ast_func_contains, // contains(left, right) - ast_func_substring_before, // substring-before(left, right) - ast_func_substring_after, // substring-after(left, right) - ast_func_substring_2, // substring(left, right) - ast_func_substring_3, // substring(left, right, third) - ast_func_string_length_0, // string-length() - ast_func_string_length_1, // string-length(left) - ast_func_normalize_space_0, // normalize-space() - ast_func_normalize_space_1, // normalize-space(left) - ast_func_translate, // translate(left, right, third) - ast_func_boolean, // boolean(left) - ast_func_not, // not(left) - ast_func_true, // true() - ast_func_false, // false() - ast_func_lang, // lang(left) - ast_func_number_0, // number() - ast_func_number_1, // number(left) - ast_func_sum, // sum(left) - ast_func_floor, // floor(left) - ast_func_ceiling, // ceiling(left) - ast_func_round, // round(left) - ast_step, // process set left with step - ast_step_root // select root node - }; - - enum axis_t - { - axis_ancestor, - axis_ancestor_or_self, - axis_attribute, - axis_child, - axis_descendant, - axis_descendant_or_self, - axis_following, - axis_following_sibling, - axis_namespace, - axis_parent, - axis_preceding, - axis_preceding_sibling, - axis_self - }; - - enum nodetest_t - { - nodetest_none, - nodetest_name, - nodetest_type_node, - nodetest_type_comment, - nodetest_type_pi, - nodetest_type_text, - nodetest_pi, - nodetest_all, - nodetest_all_in_namespace - }; - - template struct axis_to_type - { - static const axis_t axis; - }; - - template const axis_t axis_to_type::axis = N; - - class xpath_ast_node - { - private: - // node type - char _type; - char _rettype; - - // for ast_step / ast_predicate - char _axis; - char _test; - - // tree node structure - xpath_ast_node* _left; - xpath_ast_node* _right; - xpath_ast_node* _next; - - union - { - // value for ast_string_constant - const char_t* string; - // value for ast_number_constant - double number; - // variable for ast_variable - xpath_variable* variable; - // node test for ast_step (node name/namespace/node type/pi target) - const char_t* nodetest; - } _data; - - xpath_ast_node(const xpath_ast_node&); - xpath_ast_node& operator=(const xpath_ast_node&); - - template static bool compare_eq(xpath_ast_node* lhs, xpath_ast_node* rhs, const xpath_context& c, const xpath_stack& stack, const Comp& comp) - { - xpath_value_type lt = lhs->rettype(), rt = rhs->rettype(); - - if (lt != xpath_type_node_set && rt != xpath_type_node_set) - { - if (lt == xpath_type_boolean || rt == xpath_type_boolean) - return comp(lhs->eval_boolean(c, stack), rhs->eval_boolean(c, stack)); - else if (lt == xpath_type_number || rt == xpath_type_number) - return comp(lhs->eval_number(c, stack), rhs->eval_number(c, stack)); - else if (lt == xpath_type_string || rt == xpath_type_string) - { - xpath_allocator_capture cr(stack.result); - - xpath_string ls = lhs->eval_string(c, stack); - xpath_string rs = rhs->eval_string(c, stack); - - return comp(ls, rs); - } - } - else if (lt == xpath_type_node_set && rt == xpath_type_node_set) - { - xpath_allocator_capture cr(stack.result); - - xpath_node_set_raw ls = lhs->eval_node_set(c, stack); - xpath_node_set_raw rs = rhs->eval_node_set(c, stack); - - for (const xpath_node* li = ls.begin(); li != ls.end(); ++li) - for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) - { - xpath_allocator_capture cri(stack.result); - - if (comp(string_value(*li, stack.result), string_value(*ri, stack.result))) - return true; - } - - return false; - } - else - { - if (lt == xpath_type_node_set) - { - swap(lhs, rhs); - swap(lt, rt); - } - - if (lt == xpath_type_boolean) - return comp(lhs->eval_boolean(c, stack), rhs->eval_boolean(c, stack)); - else if (lt == xpath_type_number) - { - xpath_allocator_capture cr(stack.result); - - double l = lhs->eval_number(c, stack); - xpath_node_set_raw rs = rhs->eval_node_set(c, stack); - - for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) - { - xpath_allocator_capture cri(stack.result); - - if (comp(l, convert_string_to_number(string_value(*ri, stack.result).c_str()))) - return true; - } - - return false; - } - else if (lt == xpath_type_string) - { - xpath_allocator_capture cr(stack.result); - - xpath_string l = lhs->eval_string(c, stack); - xpath_node_set_raw rs = rhs->eval_node_set(c, stack); - - for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) - { - xpath_allocator_capture cri(stack.result); - - if (comp(l, string_value(*ri, stack.result))) - return true; - } - - return false; - } - } - - assert(!"Wrong types"); - return false; - } - - template static bool compare_rel(xpath_ast_node* lhs, xpath_ast_node* rhs, const xpath_context& c, const xpath_stack& stack, const Comp& comp) - { - xpath_value_type lt = lhs->rettype(), rt = rhs->rettype(); - - if (lt != xpath_type_node_set && rt != xpath_type_node_set) - return comp(lhs->eval_number(c, stack), rhs->eval_number(c, stack)); - else if (lt == xpath_type_node_set && rt == xpath_type_node_set) - { - xpath_allocator_capture cr(stack.result); - - xpath_node_set_raw ls = lhs->eval_node_set(c, stack); - xpath_node_set_raw rs = rhs->eval_node_set(c, stack); - - for (const xpath_node* li = ls.begin(); li != ls.end(); ++li) - { - xpath_allocator_capture cri(stack.result); - - double l = convert_string_to_number(string_value(*li, stack.result).c_str()); - - for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) - { - xpath_allocator_capture crii(stack.result); - - if (comp(l, convert_string_to_number(string_value(*ri, stack.result).c_str()))) - return true; - } - } - - return false; - } - else if (lt != xpath_type_node_set && rt == xpath_type_node_set) - { - xpath_allocator_capture cr(stack.result); - - double l = lhs->eval_number(c, stack); - xpath_node_set_raw rs = rhs->eval_node_set(c, stack); - - for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) - { - xpath_allocator_capture cri(stack.result); - - if (comp(l, convert_string_to_number(string_value(*ri, stack.result).c_str()))) - return true; - } - - return false; - } - else if (lt == xpath_type_node_set && rt != xpath_type_node_set) - { - xpath_allocator_capture cr(stack.result); - - xpath_node_set_raw ls = lhs->eval_node_set(c, stack); - double r = rhs->eval_number(c, stack); - - for (const xpath_node* li = ls.begin(); li != ls.end(); ++li) - { - xpath_allocator_capture cri(stack.result); - - if (comp(convert_string_to_number(string_value(*li, stack.result).c_str()), r)) - return true; - } - - return false; - } - else - { - assert(!"Wrong types"); - return false; - } - } - - void apply_predicate(xpath_node_set_raw& ns, size_t first, xpath_ast_node* expr, const xpath_stack& stack) - { - assert(ns.size() >= first); - - size_t i = 1; - size_t size = ns.size() - first; - - xpath_node* last = ns.begin() + first; - - // remove_if... or well, sort of - for (xpath_node* it = last; it != ns.end(); ++it, ++i) - { - xpath_context c(*it, i, size); - - if (expr->rettype() == xpath_type_number) - { - if (expr->eval_number(c, stack) == i) - *last++ = *it; - } - else if (expr->eval_boolean(c, stack)) - *last++ = *it; - } - - ns.truncate(last); - } - - void apply_predicates(xpath_node_set_raw& ns, size_t first, const xpath_stack& stack) - { - if (ns.size() == first) return; - - for (xpath_ast_node* pred = _right; pred; pred = pred->_next) - { - apply_predicate(ns, first, pred->_left, stack); - } - } - - void step_push(xpath_node_set_raw& ns, const xml_attribute& a, const xml_node& parent, xpath_allocator* alloc) - { - if (!a) return; - - const char_t* name = a.name(); - - // There are no attribute nodes corresponding to attributes that declare namespaces - // That is, "xmlns:..." or "xmlns" - if (starts_with(name, PUGIXML_TEXT("xmlns")) && (name[5] == 0 || name[5] == ':')) return; - - switch (_test) - { - case nodetest_name: - if (strequal(name, _data.nodetest)) ns.push_back(xpath_node(a, parent), alloc); - break; - - case nodetest_type_node: - case nodetest_all: - ns.push_back(xpath_node(a, parent), alloc); - break; - - case nodetest_all_in_namespace: - if (starts_with(name, _data.nodetest)) - ns.push_back(xpath_node(a, parent), alloc); - break; - - default: - ; - } - } - - void step_push(xpath_node_set_raw& ns, const xml_node& n, xpath_allocator* alloc) - { - if (!n) return; - - switch (_test) - { - case nodetest_name: - if (n.type() == node_element && strequal(n.name(), _data.nodetest)) ns.push_back(n, alloc); - break; - - case nodetest_type_node: - ns.push_back(n, alloc); - break; - - case nodetest_type_comment: - if (n.type() == node_comment) - ns.push_back(n, alloc); - break; - - case nodetest_type_text: - if (n.type() == node_pcdata || n.type() == node_cdata) - ns.push_back(n, alloc); - break; - - case nodetest_type_pi: - if (n.type() == node_pi) - ns.push_back(n, alloc); - break; - - case nodetest_pi: - if (n.type() == node_pi && strequal(n.name(), _data.nodetest)) - ns.push_back(n, alloc); - break; - - case nodetest_all: - if (n.type() == node_element) - ns.push_back(n, alloc); - break; - - case nodetest_all_in_namespace: - if (n.type() == node_element && starts_with(n.name(), _data.nodetest)) - ns.push_back(n, alloc); - break; - - default: - assert(!"Unknown axis"); - } - } - - template void step_fill(xpath_node_set_raw& ns, const xml_node& n, xpath_allocator* alloc, T) - { - const axis_t axis = T::axis; - - switch (axis) - { - case axis_attribute: - { - for (xml_attribute a = n.first_attribute(); a; a = a.next_attribute()) - step_push(ns, a, n, alloc); - - break; - } - - case axis_child: - { - for (xml_node c = n.first_child(); c; c = c.next_sibling()) - step_push(ns, c, alloc); - - break; - } - - case axis_descendant: - case axis_descendant_or_self: - { - if (axis == axis_descendant_or_self) - step_push(ns, n, alloc); - - xml_node cur = n.first_child(); - - while (cur && cur != n) - { - step_push(ns, cur, alloc); - - if (cur.first_child()) - cur = cur.first_child(); - else if (cur.next_sibling()) - cur = cur.next_sibling(); - else - { - while (!cur.next_sibling() && cur != n) - cur = cur.parent(); - - if (cur != n) cur = cur.next_sibling(); - } - } - - break; - } - - case axis_following_sibling: - { - for (xml_node c = n.next_sibling(); c; c = c.next_sibling()) - step_push(ns, c, alloc); - - break; - } - - case axis_preceding_sibling: - { - for (xml_node c = n.previous_sibling(); c; c = c.previous_sibling()) - step_push(ns, c, alloc); - - break; - } - - case axis_following: - { - xml_node cur = n; - - // exit from this node so that we don't include descendants - while (cur && !cur.next_sibling()) cur = cur.parent(); - cur = cur.next_sibling(); - - for (;;) - { - step_push(ns, cur, alloc); - - if (cur.first_child()) - cur = cur.first_child(); - else if (cur.next_sibling()) - cur = cur.next_sibling(); - else - { - while (cur && !cur.next_sibling()) cur = cur.parent(); - cur = cur.next_sibling(); - - if (!cur) break; - } - } - - break; - } - - case axis_preceding: - { - xml_node cur = n; - - while (cur && !cur.previous_sibling()) cur = cur.parent(); - cur = cur.previous_sibling(); - - for (;;) - { - if (cur.last_child()) - cur = cur.last_child(); - else - { - // leaf node, can't be ancestor - step_push(ns, cur, alloc); - - if (cur.previous_sibling()) - cur = cur.previous_sibling(); - else - { - do - { - cur = cur.parent(); - if (!cur) break; - - if (!node_is_ancestor(cur, n)) step_push(ns, cur, alloc); - } - while (!cur.previous_sibling()); - - cur = cur.previous_sibling(); - - if (!cur) break; - } - } - } - - break; - } - - case axis_ancestor: - case axis_ancestor_or_self: - { - if (axis == axis_ancestor_or_self) - step_push(ns, n, alloc); - - xml_node cur = n.parent(); - - while (cur) - { - step_push(ns, cur, alloc); - - cur = cur.parent(); - } - - break; - } - - case axis_self: - { - step_push(ns, n, alloc); - - break; - } - - case axis_parent: - { - if (n.parent()) step_push(ns, n.parent(), alloc); - - break; - } - - default: - assert(!"Unimplemented axis"); - } - } - - template void step_fill(xpath_node_set_raw& ns, const xml_attribute& a, const xml_node& p, xpath_allocator* alloc, T v) - { - const axis_t axis = T::axis; - - switch (axis) - { - case axis_ancestor: - case axis_ancestor_or_self: - { - if (axis == axis_ancestor_or_self && _test == nodetest_type_node) // reject attributes based on principal node type test - step_push(ns, a, p, alloc); - - xml_node cur = p; - - while (cur) - { - step_push(ns, cur, alloc); - - cur = cur.parent(); - } - - break; - } - - case axis_descendant_or_self: - case axis_self: - { - if (_test == nodetest_type_node) // reject attributes based on principal node type test - step_push(ns, a, p, alloc); - - break; - } - - case axis_following: - { - xml_node cur = p; - - for (;;) - { - if (cur.first_child()) - cur = cur.first_child(); - else if (cur.next_sibling()) - cur = cur.next_sibling(); - else - { - while (cur && !cur.next_sibling()) cur = cur.parent(); - cur = cur.next_sibling(); - - if (!cur) break; - } - - step_push(ns, cur, alloc); - } - - break; - } - - case axis_parent: - { - step_push(ns, p, alloc); - - break; - } - - case axis_preceding: - { - // preceding:: axis does not include attribute nodes and attribute ancestors (they are the same as parent's ancestors), so we can reuse node preceding - step_fill(ns, p, alloc, v); - break; - } - - default: - assert(!"Unimplemented axis"); - } - } - - template xpath_node_set_raw step_do(const xpath_context& c, const xpath_stack& stack, T v) - { - const axis_t axis = T::axis; - bool attributes = (axis == axis_ancestor || axis == axis_ancestor_or_self || axis == axis_descendant_or_self || axis == axis_following || axis == axis_parent || axis == axis_preceding || axis == axis_self); - - xpath_node_set_raw ns; - ns.set_type((axis == axis_ancestor || axis == axis_ancestor_or_self || axis == axis_preceding || axis == axis_preceding_sibling) ? xpath_node_set::type_sorted_reverse : xpath_node_set::type_sorted); - - if (_left) - { - xpath_node_set_raw s = _left->eval_node_set(c, stack); - - // self axis preserves the original order - if (axis == axis_self) ns.set_type(s.type()); - - for (const xpath_node* it = s.begin(); it != s.end(); ++it) - { - size_t size = ns.size(); - - // in general, all axes generate elements in a particular order, but there is no order guarantee if axis is applied to two nodes - if (axis != axis_self && size != 0) ns.set_type(xpath_node_set::type_unsorted); - - if (it->node()) - step_fill(ns, it->node(), stack.result, v); - else if (attributes) - step_fill(ns, it->attribute(), it->parent(), stack.result, v); - - apply_predicates(ns, size, stack); - } - } - else - { - if (c.n.node()) - step_fill(ns, c.n.node(), stack.result, v); - else if (attributes) - step_fill(ns, c.n.attribute(), c.n.parent(), stack.result, v); - - apply_predicates(ns, 0, stack); - } - - // child, attribute and self axes always generate unique set of nodes - // for other axis, if the set stayed sorted, it stayed unique because the traversal algorithms do not visit the same node twice - if (axis != axis_child && axis != axis_attribute && axis != axis_self && ns.type() == xpath_node_set::type_unsorted) - ns.remove_duplicates(); - - return ns; - } - - public: - xpath_ast_node(ast_type_t type, xpath_value_type rettype_, const char_t* value): - _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(0), _right(0), _next(0) - { - assert(type == ast_string_constant); - _data.string = value; - } - - xpath_ast_node(ast_type_t type, xpath_value_type rettype_, double value): - _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(0), _right(0), _next(0) - { - assert(type == ast_number_constant); - _data.number = value; - } - - xpath_ast_node(ast_type_t type, xpath_value_type rettype_, xpath_variable* value): - _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(0), _right(0), _next(0) - { - assert(type == ast_variable); - _data.variable = value; - } - - xpath_ast_node(ast_type_t type, xpath_value_type rettype_, xpath_ast_node* left = 0, xpath_ast_node* right = 0): - _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(left), _right(right), _next(0) - { - } - - xpath_ast_node(ast_type_t type, xpath_ast_node* left, axis_t axis, nodetest_t test, const char_t* contents): - _type(static_cast(type)), _rettype(xpath_type_node_set), _axis(static_cast(axis)), _test(static_cast(test)), _left(left), _right(0), _next(0) - { - _data.nodetest = contents; - } - - void set_next(xpath_ast_node* value) - { - _next = value; - } - - void set_right(xpath_ast_node* value) - { - _right = value; - } - - bool eval_boolean(const xpath_context& c, const xpath_stack& stack) - { - switch (_type) - { - case ast_op_or: - return _left->eval_boolean(c, stack) || _right->eval_boolean(c, stack); - - case ast_op_and: - return _left->eval_boolean(c, stack) && _right->eval_boolean(c, stack); - - case ast_op_equal: - return compare_eq(_left, _right, c, stack, equal_to()); - - case ast_op_not_equal: - return compare_eq(_left, _right, c, stack, not_equal_to()); - - case ast_op_less: - return compare_rel(_left, _right, c, stack, less()); - - case ast_op_greater: - return compare_rel(_right, _left, c, stack, less()); - - case ast_op_less_or_equal: - return compare_rel(_left, _right, c, stack, less_equal()); - - case ast_op_greater_or_equal: - return compare_rel(_right, _left, c, stack, less_equal()); - - case ast_func_starts_with: - { - xpath_allocator_capture cr(stack.result); - - xpath_string lr = _left->eval_string(c, stack); - xpath_string rr = _right->eval_string(c, stack); - - return starts_with(lr.c_str(), rr.c_str()); - } - - case ast_func_contains: - { - xpath_allocator_capture cr(stack.result); - - xpath_string lr = _left->eval_string(c, stack); - xpath_string rr = _right->eval_string(c, stack); - - return find_substring(lr.c_str(), rr.c_str()) != 0; - } - - case ast_func_boolean: - return _left->eval_boolean(c, stack); - - case ast_func_not: - return !_left->eval_boolean(c, stack); - - case ast_func_true: - return true; - - case ast_func_false: - return false; - - case ast_func_lang: - { - if (c.n.attribute()) return false; - - xpath_allocator_capture cr(stack.result); - - xpath_string lang = _left->eval_string(c, stack); - - for (xml_node n = c.n.node(); n; n = n.parent()) - { - xml_attribute a = n.attribute(PUGIXML_TEXT("xml:lang")); - - if (a) - { - const char_t* value = a.value(); - - // strnicmp / strncasecmp is not portable - for (const char_t* lit = lang.c_str(); *lit; ++lit) - { - if (tolower_ascii(*lit) != tolower_ascii(*value)) return false; - ++value; - } - - return *value == 0 || *value == '-'; - } - } - - return false; - } - - case ast_variable: - { - assert(_rettype == _data.variable->type()); - - if (_rettype == xpath_type_boolean) - return _data.variable->get_boolean(); - - // fallthrough to type conversion - } - - default: - { - switch (_rettype) - { - case xpath_type_number: - return convert_number_to_boolean(eval_number(c, stack)); - - case xpath_type_string: - { - xpath_allocator_capture cr(stack.result); - - return !eval_string(c, stack).empty(); - } - - case xpath_type_node_set: - { - xpath_allocator_capture cr(stack.result); - - return !eval_node_set(c, stack).empty(); - } - - default: - assert(!"Wrong expression for return type boolean"); - return false; - } - } - } - } - - double eval_number(const xpath_context& c, const xpath_stack& stack) - { - switch (_type) - { - case ast_op_add: - return _left->eval_number(c, stack) + _right->eval_number(c, stack); - - case ast_op_subtract: - return _left->eval_number(c, stack) - _right->eval_number(c, stack); - - case ast_op_multiply: - return _left->eval_number(c, stack) * _right->eval_number(c, stack); - - case ast_op_divide: - return _left->eval_number(c, stack) / _right->eval_number(c, stack); - - case ast_op_mod: - return fmod(_left->eval_number(c, stack), _right->eval_number(c, stack)); - - case ast_op_negate: - return -_left->eval_number(c, stack); - - case ast_number_constant: - return _data.number; - - case ast_func_last: - return static_cast(c.size); - - case ast_func_position: - return static_cast(c.position); - - case ast_func_count: - { - xpath_allocator_capture cr(stack.result); - - return static_cast(_left->eval_node_set(c, stack).size()); - } - - case ast_func_string_length_0: - { - xpath_allocator_capture cr(stack.result); - - return static_cast(string_value(c.n, stack.result).length()); - } - - case ast_func_string_length_1: - { - xpath_allocator_capture cr(stack.result); - - return static_cast(_left->eval_string(c, stack).length()); - } - - case ast_func_number_0: - { - xpath_allocator_capture cr(stack.result); - - return convert_string_to_number(string_value(c.n, stack.result).c_str()); - } - - case ast_func_number_1: - return _left->eval_number(c, stack); - - case ast_func_sum: - { - xpath_allocator_capture cr(stack.result); - - double r = 0; - - xpath_node_set_raw ns = _left->eval_node_set(c, stack); - - for (const xpath_node* it = ns.begin(); it != ns.end(); ++it) - { - xpath_allocator_capture cri(stack.result); - - r += convert_string_to_number(string_value(*it, stack.result).c_str()); - } - - return r; - } - - case ast_func_floor: - { - double r = _left->eval_number(c, stack); - - return r == r ? floor(r) : r; - } - - case ast_func_ceiling: - { - double r = _left->eval_number(c, stack); - - return r == r ? ceil(r) : r; - } - - case ast_func_round: - return round_nearest_nzero(_left->eval_number(c, stack)); - - case ast_variable: - { - assert(_rettype == _data.variable->type()); - - if (_rettype == xpath_type_number) - return _data.variable->get_number(); - - // fallthrough to type conversion - } - - default: - { - switch (_rettype) - { - case xpath_type_boolean: - return eval_boolean(c, stack) ? 1 : 0; - - case xpath_type_string: - { - xpath_allocator_capture cr(stack.result); - - return convert_string_to_number(eval_string(c, stack).c_str()); - } - - case xpath_type_node_set: - { - xpath_allocator_capture cr(stack.result); - - return convert_string_to_number(eval_string(c, stack).c_str()); - } - - default: - assert(!"Wrong expression for return type number"); - return 0; - } - - } - } - } - - xpath_string eval_string_concat(const xpath_context& c, const xpath_stack& stack) - { - assert(_type == ast_func_concat); - - xpath_allocator_capture ct(stack.temp); - - // count the string number - size_t count = 1; - for (xpath_ast_node* nc = _right; nc; nc = nc->_next) count++; - - // gather all strings - xpath_string static_buffer[4]; - xpath_string* buffer = static_buffer; - - // allocate on-heap for large concats - if (count > sizeof(static_buffer) / sizeof(static_buffer[0])) - { - buffer = static_cast(stack.temp->allocate(count * sizeof(xpath_string))); - assert(buffer); - } - - // evaluate all strings to temporary stack - xpath_stack swapped_stack = {stack.temp, stack.result}; - - buffer[0] = _left->eval_string(c, swapped_stack); - - size_t pos = 1; - for (xpath_ast_node* n = _right; n; n = n->_next, ++pos) buffer[pos] = n->eval_string(c, swapped_stack); - assert(pos == count); - - // get total length - size_t length = 0; - for (size_t i = 0; i < count; ++i) length += buffer[i].length(); - - // create final string - char_t* result = static_cast(stack.result->allocate((length + 1) * sizeof(char_t))); - assert(result); - - char_t* ri = result; - - for (size_t j = 0; j < count; ++j) - for (const char_t* bi = buffer[j].c_str(); *bi; ++bi) - *ri++ = *bi; - - *ri = 0; - - return xpath_string(result, true); - } - - xpath_string eval_string(const xpath_context& c, const xpath_stack& stack) - { - switch (_type) - { - case ast_string_constant: - return xpath_string_const(_data.string); - - case ast_func_local_name_0: - { - xpath_node na = c.n; - - return xpath_string_const(local_name(na)); - } - - case ast_func_local_name_1: - { - xpath_allocator_capture cr(stack.result); - - xpath_node_set_raw ns = _left->eval_node_set(c, stack); - xpath_node na = ns.first(); - - return xpath_string_const(local_name(na)); - } - - case ast_func_name_0: - { - xpath_node na = c.n; - - return xpath_string_const(qualified_name(na)); - } - - case ast_func_name_1: - { - xpath_allocator_capture cr(stack.result); - - xpath_node_set_raw ns = _left->eval_node_set(c, stack); - xpath_node na = ns.first(); - - return xpath_string_const(qualified_name(na)); - } - - case ast_func_namespace_uri_0: - { - xpath_node na = c.n; - - return xpath_string_const(namespace_uri(na)); - } - - case ast_func_namespace_uri_1: - { - xpath_allocator_capture cr(stack.result); - - xpath_node_set_raw ns = _left->eval_node_set(c, stack); - xpath_node na = ns.first(); - - return xpath_string_const(namespace_uri(na)); - } - - case ast_func_string_0: - return string_value(c.n, stack.result); - - case ast_func_string_1: - return _left->eval_string(c, stack); - - case ast_func_concat: - return eval_string_concat(c, stack); - - case ast_func_substring_before: - { - xpath_allocator_capture cr(stack.temp); - - xpath_stack swapped_stack = {stack.temp, stack.result}; - - xpath_string s = _left->eval_string(c, swapped_stack); - xpath_string p = _right->eval_string(c, swapped_stack); - - const char_t* pos = find_substring(s.c_str(), p.c_str()); - - return pos ? xpath_string(s.c_str(), pos, stack.result) : xpath_string(); - } - - case ast_func_substring_after: - { - xpath_allocator_capture cr(stack.temp); - - xpath_stack swapped_stack = {stack.temp, stack.result}; - - xpath_string s = _left->eval_string(c, swapped_stack); - xpath_string p = _right->eval_string(c, swapped_stack); - - const char_t* pos = find_substring(s.c_str(), p.c_str()); - if (!pos) return xpath_string(); - - const char_t* result = pos + p.length(); - - return s.uses_heap() ? xpath_string(result, stack.result) : xpath_string_const(result); - } - - case ast_func_substring_2: - { - xpath_allocator_capture cr(stack.temp); - - xpath_stack swapped_stack = {stack.temp, stack.result}; - - xpath_string s = _left->eval_string(c, swapped_stack); - size_t s_length = s.length(); - - double first = round_nearest(_right->eval_number(c, stack)); - - if (is_nan(first)) return xpath_string(); // NaN - else if (first >= s_length + 1) return xpath_string(); - - size_t pos = first < 1 ? 1 : static_cast(first); - assert(1 <= pos && pos <= s_length + 1); - - const char_t* rbegin = s.c_str() + (pos - 1); - - return s.uses_heap() ? xpath_string(rbegin, stack.result) : xpath_string_const(rbegin); - } - - case ast_func_substring_3: - { - xpath_allocator_capture cr(stack.temp); - - xpath_stack swapped_stack = {stack.temp, stack.result}; - - xpath_string s = _left->eval_string(c, swapped_stack); - size_t s_length = s.length(); - - double first = round_nearest(_right->eval_number(c, stack)); - double last = first + round_nearest(_right->_next->eval_number(c, stack)); - - if (is_nan(first) || is_nan(last)) return xpath_string(); - else if (first >= s_length + 1) return xpath_string(); - else if (first >= last) return xpath_string(); - else if (last < 1) return xpath_string(); - - size_t pos = first < 1 ? 1 : static_cast(first); - size_t end = last >= s_length + 1 ? s_length + 1 : static_cast(last); - - assert(1 <= pos && pos <= end && end <= s_length + 1); - const char_t* rbegin = s.c_str() + (pos - 1); - const char_t* rend = s.c_str() + (end - 1); - - return (end == s_length + 1 && !s.uses_heap()) ? xpath_string_const(rbegin) : xpath_string(rbegin, rend, stack.result); - } - - case ast_func_normalize_space_0: - { - xpath_string s = string_value(c.n, stack.result); - - normalize_space(s.data(stack.result)); - - return s; - } - - case ast_func_normalize_space_1: - { - xpath_string s = _left->eval_string(c, stack); - - normalize_space(s.data(stack.result)); - - return s; - } - - case ast_func_translate: - { - xpath_allocator_capture cr(stack.temp); - - xpath_stack swapped_stack = {stack.temp, stack.result}; - - xpath_string s = _left->eval_string(c, stack); - xpath_string from = _right->eval_string(c, swapped_stack); - xpath_string to = _right->_next->eval_string(c, swapped_stack); - - translate(s.data(stack.result), from.c_str(), to.c_str()); - - return s; - } - - case ast_variable: - { - assert(_rettype == _data.variable->type()); - - if (_rettype == xpath_type_string) - return xpath_string_const(_data.variable->get_string()); - - // fallthrough to type conversion - } - - default: - { - switch (_rettype) - { - case xpath_type_boolean: - return xpath_string_const(eval_boolean(c, stack) ? PUGIXML_TEXT("true") : PUGIXML_TEXT("false")); - - case xpath_type_number: - return convert_number_to_string(eval_number(c, stack), stack.result); - - case xpath_type_node_set: - { - xpath_allocator_capture cr(stack.temp); - - xpath_stack swapped_stack = {stack.temp, stack.result}; - - xpath_node_set_raw ns = eval_node_set(c, swapped_stack); - return ns.empty() ? xpath_string() : string_value(ns.first(), stack.result); - } - - default: - assert(!"Wrong expression for return type string"); - return xpath_string(); - } - } - } - } - - xpath_node_set_raw eval_node_set(const xpath_context& c, const xpath_stack& stack) - { - switch (_type) - { - case ast_op_union: - { - xpath_allocator_capture cr(stack.temp); - - xpath_stack swapped_stack = {stack.temp, stack.result}; - - xpath_node_set_raw ls = _left->eval_node_set(c, swapped_stack); - xpath_node_set_raw rs = _right->eval_node_set(c, stack); - - // we can optimize merging two sorted sets, but this is a very rare operation, so don't bother - rs.set_type(xpath_node_set::type_unsorted); - - rs.append(ls.begin(), ls.end(), stack.result); - rs.remove_duplicates(); - - return rs; - } - - case ast_filter: - case ast_filter_posinv: - { - xpath_node_set_raw set = _left->eval_node_set(c, stack); - - // either expression is a number or it contains position() call; sort by document order - if (_type == ast_filter) set.sort_do(); - - apply_predicate(set, 0, _right, stack); - - return set; - } - - case ast_func_id: - return xpath_node_set_raw(); - - case ast_step: - { - switch (_axis) - { - case axis_ancestor: - return step_do(c, stack, axis_to_type()); - - case axis_ancestor_or_self: - return step_do(c, stack, axis_to_type()); - - case axis_attribute: - return step_do(c, stack, axis_to_type()); - - case axis_child: - return step_do(c, stack, axis_to_type()); - - case axis_descendant: - return step_do(c, stack, axis_to_type()); - - case axis_descendant_or_self: - return step_do(c, stack, axis_to_type()); - - case axis_following: - return step_do(c, stack, axis_to_type()); - - case axis_following_sibling: - return step_do(c, stack, axis_to_type()); - - case axis_namespace: - // namespaced axis is not supported - return xpath_node_set_raw(); - - case axis_parent: - return step_do(c, stack, axis_to_type()); - - case axis_preceding: - return step_do(c, stack, axis_to_type()); - - case axis_preceding_sibling: - return step_do(c, stack, axis_to_type()); - - case axis_self: - return step_do(c, stack, axis_to_type()); - - default: - assert(!"Unknown axis"); - return xpath_node_set_raw(); - } - } - - case ast_step_root: - { - assert(!_right); // root step can't have any predicates - - xpath_node_set_raw ns; - - ns.set_type(xpath_node_set::type_sorted); - - if (c.n.node()) ns.push_back(c.n.node().root(), stack.result); - else if (c.n.attribute()) ns.push_back(c.n.parent().root(), stack.result); - - return ns; - } - - case ast_variable: - { - assert(_rettype == _data.variable->type()); - - if (_rettype == xpath_type_node_set) - { - const xpath_node_set& s = _data.variable->get_node_set(); - - xpath_node_set_raw ns; - - ns.set_type(s.type()); - ns.append(s.begin(), s.end(), stack.result); - - return ns; - } - - // fallthrough to type conversion - } - - default: - assert(!"Wrong expression for return type node set"); - return xpath_node_set_raw(); - } - } - - bool is_posinv() - { - switch (_type) - { - case ast_func_position: - return false; - - case ast_string_constant: - case ast_number_constant: - case ast_variable: - return true; - - case ast_step: - case ast_step_root: - return true; - - case ast_predicate: - case ast_filter: - case ast_filter_posinv: - return true; - - default: - if (_left && !_left->is_posinv()) return false; - - for (xpath_ast_node* n = _right; n; n = n->_next) - if (!n->is_posinv()) return false; - - return true; - } - } - - xpath_value_type rettype() const - { - return static_cast(_rettype); - } - }; - - struct xpath_parser - { - xpath_allocator* _alloc; - xpath_lexer _lexer; - - const char_t* _query; - xpath_variable_set* _variables; - - xpath_parse_result* _result; - - #ifdef PUGIXML_NO_EXCEPTIONS - jmp_buf _error_handler; - #endif - - void throw_error(const char* message) - { - _result->error = message; - _result->offset = _lexer.current_pos() - _query; - - #ifdef PUGIXML_NO_EXCEPTIONS - longjmp(_error_handler, 1); - #else - throw xpath_exception(*_result); - #endif - } - - void throw_error_oom() - { - #ifdef PUGIXML_NO_EXCEPTIONS - throw_error("Out of memory"); - #else - throw std::bad_alloc(); - #endif - } - - void* alloc_node() - { - void* result = _alloc->allocate_nothrow(sizeof(xpath_ast_node)); - - if (!result) throw_error_oom(); - - return result; - } - - const char_t* alloc_string(const xpath_lexer_string& value) - { - if (value.begin) - { - size_t length = static_cast(value.end - value.begin); - - char_t* c = static_cast(_alloc->allocate_nothrow((length + 1) * sizeof(char_t))); - if (!c) throw_error_oom(); - - memcpy(c, value.begin, length * sizeof(char_t)); - c[length] = 0; - - return c; - } - else return 0; - } - - xpath_ast_node* parse_function_helper(ast_type_t type0, ast_type_t type1, size_t argc, xpath_ast_node* args[2]) - { - assert(argc <= 1); - - if (argc == 1 && args[0]->rettype() != xpath_type_node_set) throw_error("Function has to be applied to node set"); - - return new (alloc_node()) xpath_ast_node(argc == 0 ? type0 : type1, xpath_type_string, args[0]); - } - - xpath_ast_node* parse_function(const xpath_lexer_string& name, size_t argc, xpath_ast_node* args[2]) - { - switch (name.begin[0]) - { - case 'b': - if (name == PUGIXML_TEXT("boolean") && argc == 1) - return new (alloc_node()) xpath_ast_node(ast_func_boolean, xpath_type_boolean, args[0]); - - break; - - case 'c': - if (name == PUGIXML_TEXT("count") && argc == 1) - { - if (args[0]->rettype() != xpath_type_node_set) throw_error("Function has to be applied to node set"); - return new (alloc_node()) xpath_ast_node(ast_func_count, xpath_type_number, args[0]); - } - else if (name == PUGIXML_TEXT("contains") && argc == 2) - return new (alloc_node()) xpath_ast_node(ast_func_contains, xpath_type_string, args[0], args[1]); - else if (name == PUGIXML_TEXT("concat") && argc >= 2) - return new (alloc_node()) xpath_ast_node(ast_func_concat, xpath_type_string, args[0], args[1]); - else if (name == PUGIXML_TEXT("ceiling") && argc == 1) - return new (alloc_node()) xpath_ast_node(ast_func_ceiling, xpath_type_number, args[0]); - - break; - - case 'f': - if (name == PUGIXML_TEXT("false") && argc == 0) - return new (alloc_node()) xpath_ast_node(ast_func_false, xpath_type_boolean); - else if (name == PUGIXML_TEXT("floor") && argc == 1) - return new (alloc_node()) xpath_ast_node(ast_func_floor, xpath_type_number, args[0]); - - break; - - case 'i': - if (name == PUGIXML_TEXT("id") && argc == 1) - return new (alloc_node()) xpath_ast_node(ast_func_id, xpath_type_node_set, args[0]); - - break; - - case 'l': - if (name == PUGIXML_TEXT("last") && argc == 0) - return new (alloc_node()) xpath_ast_node(ast_func_last, xpath_type_number); - else if (name == PUGIXML_TEXT("lang") && argc == 1) - return new (alloc_node()) xpath_ast_node(ast_func_lang, xpath_type_boolean, args[0]); - else if (name == PUGIXML_TEXT("local-name") && argc <= 1) - return parse_function_helper(ast_func_local_name_0, ast_func_local_name_1, argc, args); - - break; - - case 'n': - if (name == PUGIXML_TEXT("name") && argc <= 1) - return parse_function_helper(ast_func_name_0, ast_func_name_1, argc, args); - else if (name == PUGIXML_TEXT("namespace-uri") && argc <= 1) - return parse_function_helper(ast_func_namespace_uri_0, ast_func_namespace_uri_1, argc, args); - else if (name == PUGIXML_TEXT("normalize-space") && argc <= 1) - return new (alloc_node()) xpath_ast_node(argc == 0 ? ast_func_normalize_space_0 : ast_func_normalize_space_1, xpath_type_string, args[0], args[1]); - else if (name == PUGIXML_TEXT("not") && argc == 1) - return new (alloc_node()) xpath_ast_node(ast_func_not, xpath_type_boolean, args[0]); - else if (name == PUGIXML_TEXT("number") && argc <= 1) - return new (alloc_node()) xpath_ast_node(argc == 0 ? ast_func_number_0 : ast_func_number_1, xpath_type_number, args[0]); - - break; - - case 'p': - if (name == PUGIXML_TEXT("position") && argc == 0) - return new (alloc_node()) xpath_ast_node(ast_func_position, xpath_type_number); - - break; - - case 'r': - if (name == PUGIXML_TEXT("round") && argc == 1) - return new (alloc_node()) xpath_ast_node(ast_func_round, xpath_type_number, args[0]); - - break; - - case 's': - if (name == PUGIXML_TEXT("string") && argc <= 1) - return new (alloc_node()) xpath_ast_node(argc == 0 ? ast_func_string_0 : ast_func_string_1, xpath_type_string, args[0]); - else if (name == PUGIXML_TEXT("string-length") && argc <= 1) - return new (alloc_node()) xpath_ast_node(argc == 0 ? ast_func_string_length_0 : ast_func_string_length_1, xpath_type_string, args[0]); - else if (name == PUGIXML_TEXT("starts-with") && argc == 2) - return new (alloc_node()) xpath_ast_node(ast_func_starts_with, xpath_type_boolean, args[0], args[1]); - else if (name == PUGIXML_TEXT("substring-before") && argc == 2) - return new (alloc_node()) xpath_ast_node(ast_func_substring_before, xpath_type_string, args[0], args[1]); - else if (name == PUGIXML_TEXT("substring-after") && argc == 2) - return new (alloc_node()) xpath_ast_node(ast_func_substring_after, xpath_type_string, args[0], args[1]); - else if (name == PUGIXML_TEXT("substring") && (argc == 2 || argc == 3)) - return new (alloc_node()) xpath_ast_node(argc == 2 ? ast_func_substring_2 : ast_func_substring_3, xpath_type_string, args[0], args[1]); - else if (name == PUGIXML_TEXT("sum") && argc == 1) - { - if (args[0]->rettype() != xpath_type_node_set) throw_error("Function has to be applied to node set"); - return new (alloc_node()) xpath_ast_node(ast_func_sum, xpath_type_number, args[0]); - } - - break; - - case 't': - if (name == PUGIXML_TEXT("translate") && argc == 3) - return new (alloc_node()) xpath_ast_node(ast_func_translate, xpath_type_string, args[0], args[1]); - else if (name == PUGIXML_TEXT("true") && argc == 0) - return new (alloc_node()) xpath_ast_node(ast_func_true, xpath_type_boolean); - - break; - - default: - break; - } - - throw_error("Unrecognized function or wrong parameter count"); - - return 0; - } - - axis_t parse_axis_name(const xpath_lexer_string& name, bool& specified) - { - specified = true; - - switch (name.begin[0]) - { - case 'a': - if (name == PUGIXML_TEXT("ancestor")) - return axis_ancestor; - else if (name == PUGIXML_TEXT("ancestor-or-self")) - return axis_ancestor_or_self; - else if (name == PUGIXML_TEXT("attribute")) - return axis_attribute; - - break; - - case 'c': - if (name == PUGIXML_TEXT("child")) - return axis_child; - - break; - - case 'd': - if (name == PUGIXML_TEXT("descendant")) - return axis_descendant; - else if (name == PUGIXML_TEXT("descendant-or-self")) - return axis_descendant_or_self; - - break; - - case 'f': - if (name == PUGIXML_TEXT("following")) - return axis_following; - else if (name == PUGIXML_TEXT("following-sibling")) - return axis_following_sibling; - - break; - - case 'n': - if (name == PUGIXML_TEXT("namespace")) - return axis_namespace; - - break; - - case 'p': - if (name == PUGIXML_TEXT("parent")) - return axis_parent; - else if (name == PUGIXML_TEXT("preceding")) - return axis_preceding; - else if (name == PUGIXML_TEXT("preceding-sibling")) - return axis_preceding_sibling; - - break; - - case 's': - if (name == PUGIXML_TEXT("self")) - return axis_self; - - break; - - default: - break; - } - - specified = false; - return axis_child; - } - - nodetest_t parse_node_test_type(const xpath_lexer_string& name) - { - switch (name.begin[0]) - { - case 'c': - if (name == PUGIXML_TEXT("comment")) - return nodetest_type_comment; - - break; - - case 'n': - if (name == PUGIXML_TEXT("node")) - return nodetest_type_node; - - break; - - case 'p': - if (name == PUGIXML_TEXT("processing-instruction")) - return nodetest_type_pi; - - break; - - case 't': - if (name == PUGIXML_TEXT("text")) - return nodetest_type_text; - - break; - - default: - break; - } - - return nodetest_none; - } - - // PrimaryExpr ::= VariableReference | '(' Expr ')' | Literal | Number | FunctionCall - xpath_ast_node* parse_primary_expression() - { - switch (_lexer.current()) - { - case lex_var_ref: - { - xpath_lexer_string name = _lexer.contents(); - - if (!_variables) - throw_error("Unknown variable: variable set is not provided"); - - xpath_variable* var = get_variable(_variables, name.begin, name.end); - - if (!var) - throw_error("Unknown variable: variable set does not contain the given name"); - - _lexer.next(); - - return new (alloc_node()) xpath_ast_node(ast_variable, var->type(), var); - } - - case lex_open_brace: - { - _lexer.next(); - - xpath_ast_node* n = parse_expression(); - - if (_lexer.current() != lex_close_brace) - throw_error("Unmatched braces"); - - _lexer.next(); - - return n; - } - - case lex_quoted_string: - { - const char_t* value = alloc_string(_lexer.contents()); - - xpath_ast_node* n = new (alloc_node()) xpath_ast_node(ast_string_constant, xpath_type_string, value); - _lexer.next(); - - return n; - } - - case lex_number: - { - double value = 0; - - if (!convert_string_to_number(_lexer.contents().begin, _lexer.contents().end, &value)) - throw_error_oom(); - - xpath_ast_node* n = new (alloc_node()) xpath_ast_node(ast_number_constant, xpath_type_number, value); - _lexer.next(); - - return n; - } - - case lex_string: - { - xpath_ast_node* args[2] = {0}; - size_t argc = 0; - - xpath_lexer_string function = _lexer.contents(); - _lexer.next(); - - xpath_ast_node* last_arg = 0; - - if (_lexer.current() != lex_open_brace) - throw_error("Unrecognized function call"); - _lexer.next(); - - if (_lexer.current() != lex_close_brace) - args[argc++] = parse_expression(); - - while (_lexer.current() != lex_close_brace) - { - if (_lexer.current() != lex_comma) - throw_error("No comma between function arguments"); - _lexer.next(); - - xpath_ast_node* n = parse_expression(); - - if (argc < 2) args[argc] = n; - else last_arg->set_next(n); - - argc++; - last_arg = n; - } - - _lexer.next(); - - return parse_function(function, argc, args); - } - - default: - throw_error("Unrecognizable primary expression"); - - return 0; - } - } - - // FilterExpr ::= PrimaryExpr | FilterExpr Predicate - // Predicate ::= '[' PredicateExpr ']' - // PredicateExpr ::= Expr - xpath_ast_node* parse_filter_expression() - { - xpath_ast_node* n = parse_primary_expression(); - - while (_lexer.current() == lex_open_square_brace) - { - _lexer.next(); - - xpath_ast_node* expr = parse_expression(); - - if (n->rettype() != xpath_type_node_set) throw_error("Predicate has to be applied to node set"); - - bool posinv = expr->rettype() != xpath_type_number && expr->is_posinv(); - - n = new (alloc_node()) xpath_ast_node(posinv ? ast_filter_posinv : ast_filter, xpath_type_node_set, n, expr); - - if (_lexer.current() != lex_close_square_brace) - throw_error("Unmatched square brace"); - - _lexer.next(); - } - - return n; - } - - // Step ::= AxisSpecifier NodeTest Predicate* | AbbreviatedStep - // AxisSpecifier ::= AxisName '::' | '@'? - // NodeTest ::= NameTest | NodeType '(' ')' | 'processing-instruction' '(' Literal ')' - // NameTest ::= '*' | NCName ':' '*' | QName - // AbbreviatedStep ::= '.' | '..' - xpath_ast_node* parse_step(xpath_ast_node* set) - { - if (set && set->rettype() != xpath_type_node_set) - throw_error("Step has to be applied to node set"); - - bool axis_specified = false; - axis_t axis = axis_child; // implied child axis - - if (_lexer.current() == lex_axis_attribute) - { - axis = axis_attribute; - axis_specified = true; - - _lexer.next(); - } - else if (_lexer.current() == lex_dot) - { - _lexer.next(); - - return new (alloc_node()) xpath_ast_node(ast_step, set, axis_self, nodetest_type_node, 0); - } - else if (_lexer.current() == lex_double_dot) - { - _lexer.next(); - - return new (alloc_node()) xpath_ast_node(ast_step, set, axis_parent, nodetest_type_node, 0); - } - - nodetest_t nt_type = nodetest_none; - xpath_lexer_string nt_name; - - if (_lexer.current() == lex_string) - { - // node name test - nt_name = _lexer.contents(); - _lexer.next(); - - // was it an axis name? - if (_lexer.current() == lex_double_colon) - { - // parse axis name - if (axis_specified) throw_error("Two axis specifiers in one step"); - - axis = parse_axis_name(nt_name, axis_specified); - - if (!axis_specified) throw_error("Unknown axis"); - - // read actual node test - _lexer.next(); - - if (_lexer.current() == lex_multiply) - { - nt_type = nodetest_all; - nt_name = xpath_lexer_string(); - _lexer.next(); - } - else if (_lexer.current() == lex_string) - { - nt_name = _lexer.contents(); - _lexer.next(); - } - else throw_error("Unrecognized node test"); - } - - if (nt_type == nodetest_none) - { - // node type test or processing-instruction - if (_lexer.current() == lex_open_brace) - { - _lexer.next(); - - if (_lexer.current() == lex_close_brace) - { - _lexer.next(); - - nt_type = parse_node_test_type(nt_name); - - if (nt_type == nodetest_none) throw_error("Unrecognized node type"); - - nt_name = xpath_lexer_string(); - } - else if (nt_name == PUGIXML_TEXT("processing-instruction")) - { - if (_lexer.current() != lex_quoted_string) - throw_error("Only literals are allowed as arguments to processing-instruction()"); - - nt_type = nodetest_pi; - nt_name = _lexer.contents(); - _lexer.next(); - - if (_lexer.current() != lex_close_brace) - throw_error("Unmatched brace near processing-instruction()"); - _lexer.next(); - } - else - throw_error("Unmatched brace near node type test"); - - } - // QName or NCName:* - else - { - if (nt_name.end - nt_name.begin > 2 && nt_name.end[-2] == ':' && nt_name.end[-1] == '*') // NCName:* - { - nt_name.end--; // erase * - - nt_type = nodetest_all_in_namespace; - } - else nt_type = nodetest_name; - } - } - } - else if (_lexer.current() == lex_multiply) - { - nt_type = nodetest_all; - _lexer.next(); - } - else throw_error("Unrecognized node test"); - - xpath_ast_node* n = new (alloc_node()) xpath_ast_node(ast_step, set, axis, nt_type, alloc_string(nt_name)); - - xpath_ast_node* last = 0; - - while (_lexer.current() == lex_open_square_brace) - { - _lexer.next(); - - xpath_ast_node* expr = parse_expression(); - - xpath_ast_node* pred = new (alloc_node()) xpath_ast_node(ast_predicate, xpath_type_node_set, expr); - - if (_lexer.current() != lex_close_square_brace) - throw_error("Unmatched square brace"); - _lexer.next(); - - if (last) last->set_next(pred); - else n->set_right(pred); - - last = pred; - } - - return n; - } - - // RelativeLocationPath ::= Step | RelativeLocationPath '/' Step | RelativeLocationPath '//' Step - xpath_ast_node* parse_relative_location_path(xpath_ast_node* set) - { - xpath_ast_node* n = parse_step(set); - - while (_lexer.current() == lex_slash || _lexer.current() == lex_double_slash) - { - lexeme_t l = _lexer.current(); - _lexer.next(); - - if (l == lex_double_slash) - n = new (alloc_node()) xpath_ast_node(ast_step, n, axis_descendant_or_self, nodetest_type_node, 0); - - n = parse_step(n); - } - - return n; - } - - // LocationPath ::= RelativeLocationPath | AbsoluteLocationPath - // AbsoluteLocationPath ::= '/' RelativeLocationPath? | '//' RelativeLocationPath - xpath_ast_node* parse_location_path() - { - if (_lexer.current() == lex_slash) - { - _lexer.next(); - - xpath_ast_node* n = new (alloc_node()) xpath_ast_node(ast_step_root, xpath_type_node_set); - - // relative location path can start from axis_attribute, dot, double_dot, multiply and string lexemes; any other lexeme means standalone root path - lexeme_t l = _lexer.current(); - - if (l == lex_string || l == lex_axis_attribute || l == lex_dot || l == lex_double_dot || l == lex_multiply) - return parse_relative_location_path(n); - else - return n; - } - else if (_lexer.current() == lex_double_slash) - { - _lexer.next(); - - xpath_ast_node* n = new (alloc_node()) xpath_ast_node(ast_step_root, xpath_type_node_set); - n = new (alloc_node()) xpath_ast_node(ast_step, n, axis_descendant_or_self, nodetest_type_node, 0); - - return parse_relative_location_path(n); - } - - // else clause moved outside of if because of bogus warning 'control may reach end of non-void function being inlined' in gcc 4.0.1 - return parse_relative_location_path(0); - } - - // PathExpr ::= LocationPath - // | FilterExpr - // | FilterExpr '/' RelativeLocationPath - // | FilterExpr '//' RelativeLocationPath - xpath_ast_node* parse_path_expression() - { - // Clarification. - // PathExpr begins with either LocationPath or FilterExpr. - // FilterExpr begins with PrimaryExpr - // PrimaryExpr begins with '$' in case of it being a variable reference, - // '(' in case of it being an expression, string literal, number constant or - // function call. - - if (_lexer.current() == lex_var_ref || _lexer.current() == lex_open_brace || - _lexer.current() == lex_quoted_string || _lexer.current() == lex_number || - _lexer.current() == lex_string) - { - if (_lexer.current() == lex_string) - { - // This is either a function call, or not - if not, we shall proceed with location path - const char_t* state = _lexer.state(); - - while (PUGI__IS_CHARTYPE(*state, ct_space)) ++state; - - if (*state != '(') return parse_location_path(); - - // This looks like a function call; however this still can be a node-test. Check it. - if (parse_node_test_type(_lexer.contents()) != nodetest_none) return parse_location_path(); - } - - xpath_ast_node* n = parse_filter_expression(); - - if (_lexer.current() == lex_slash || _lexer.current() == lex_double_slash) - { - lexeme_t l = _lexer.current(); - _lexer.next(); - - if (l == lex_double_slash) - { - if (n->rettype() != xpath_type_node_set) throw_error("Step has to be applied to node set"); - - n = new (alloc_node()) xpath_ast_node(ast_step, n, axis_descendant_or_self, nodetest_type_node, 0); - } - - // select from location path - return parse_relative_location_path(n); - } - - return n; - } - else return parse_location_path(); - } - - // UnionExpr ::= PathExpr | UnionExpr '|' PathExpr - xpath_ast_node* parse_union_expression() - { - xpath_ast_node* n = parse_path_expression(); - - while (_lexer.current() == lex_union) - { - _lexer.next(); - - xpath_ast_node* expr = parse_union_expression(); - - if (n->rettype() != xpath_type_node_set || expr->rettype() != xpath_type_node_set) - throw_error("Union operator has to be applied to node sets"); - - n = new (alloc_node()) xpath_ast_node(ast_op_union, xpath_type_node_set, n, expr); - } - - return n; - } - - // UnaryExpr ::= UnionExpr | '-' UnaryExpr - xpath_ast_node* parse_unary_expression() - { - if (_lexer.current() == lex_minus) - { - _lexer.next(); - - xpath_ast_node* expr = parse_unary_expression(); - - return new (alloc_node()) xpath_ast_node(ast_op_negate, xpath_type_number, expr); - } - else return parse_union_expression(); - } - - // MultiplicativeExpr ::= UnaryExpr - // | MultiplicativeExpr '*' UnaryExpr - // | MultiplicativeExpr 'div' UnaryExpr - // | MultiplicativeExpr 'mod' UnaryExpr - xpath_ast_node* parse_multiplicative_expression() - { - xpath_ast_node* n = parse_unary_expression(); - - while (_lexer.current() == lex_multiply || (_lexer.current() == lex_string && - (_lexer.contents() == PUGIXML_TEXT("mod") || _lexer.contents() == PUGIXML_TEXT("div")))) - { - ast_type_t op = _lexer.current() == lex_multiply ? ast_op_multiply : - _lexer.contents().begin[0] == 'd' ? ast_op_divide : ast_op_mod; - _lexer.next(); - - xpath_ast_node* expr = parse_unary_expression(); - - n = new (alloc_node()) xpath_ast_node(op, xpath_type_number, n, expr); - } - - return n; - } - - // AdditiveExpr ::= MultiplicativeExpr - // | AdditiveExpr '+' MultiplicativeExpr - // | AdditiveExpr '-' MultiplicativeExpr - xpath_ast_node* parse_additive_expression() - { - xpath_ast_node* n = parse_multiplicative_expression(); - - while (_lexer.current() == lex_plus || _lexer.current() == lex_minus) - { - lexeme_t l = _lexer.current(); - - _lexer.next(); - - xpath_ast_node* expr = parse_multiplicative_expression(); - - n = new (alloc_node()) xpath_ast_node(l == lex_plus ? ast_op_add : ast_op_subtract, xpath_type_number, n, expr); - } - - return n; - } - - // RelationalExpr ::= AdditiveExpr - // | RelationalExpr '<' AdditiveExpr - // | RelationalExpr '>' AdditiveExpr - // | RelationalExpr '<=' AdditiveExpr - // | RelationalExpr '>=' AdditiveExpr - xpath_ast_node* parse_relational_expression() - { - xpath_ast_node* n = parse_additive_expression(); - - while (_lexer.current() == lex_less || _lexer.current() == lex_less_or_equal || - _lexer.current() == lex_greater || _lexer.current() == lex_greater_or_equal) - { - lexeme_t l = _lexer.current(); - _lexer.next(); - - xpath_ast_node* expr = parse_additive_expression(); - - n = new (alloc_node()) xpath_ast_node(l == lex_less ? ast_op_less : l == lex_greater ? ast_op_greater : - l == lex_less_or_equal ? ast_op_less_or_equal : ast_op_greater_or_equal, xpath_type_boolean, n, expr); - } - - return n; - } - - // EqualityExpr ::= RelationalExpr - // | EqualityExpr '=' RelationalExpr - // | EqualityExpr '!=' RelationalExpr - xpath_ast_node* parse_equality_expression() - { - xpath_ast_node* n = parse_relational_expression(); - - while (_lexer.current() == lex_equal || _lexer.current() == lex_not_equal) - { - lexeme_t l = _lexer.current(); - - _lexer.next(); - - xpath_ast_node* expr = parse_relational_expression(); - - n = new (alloc_node()) xpath_ast_node(l == lex_equal ? ast_op_equal : ast_op_not_equal, xpath_type_boolean, n, expr); - } - - return n; - } - - // AndExpr ::= EqualityExpr | AndExpr 'and' EqualityExpr - xpath_ast_node* parse_and_expression() - { - xpath_ast_node* n = parse_equality_expression(); - - while (_lexer.current() == lex_string && _lexer.contents() == PUGIXML_TEXT("and")) - { - _lexer.next(); - - xpath_ast_node* expr = parse_equality_expression(); - - n = new (alloc_node()) xpath_ast_node(ast_op_and, xpath_type_boolean, n, expr); - } - - return n; - } - - // OrExpr ::= AndExpr | OrExpr 'or' AndExpr - xpath_ast_node* parse_or_expression() - { - xpath_ast_node* n = parse_and_expression(); - - while (_lexer.current() == lex_string && _lexer.contents() == PUGIXML_TEXT("or")) - { - _lexer.next(); - - xpath_ast_node* expr = parse_and_expression(); - - n = new (alloc_node()) xpath_ast_node(ast_op_or, xpath_type_boolean, n, expr); - } - - return n; - } - - // Expr ::= OrExpr - xpath_ast_node* parse_expression() - { - return parse_or_expression(); - } - - xpath_parser(const char_t* query, xpath_variable_set* variables, xpath_allocator* alloc, xpath_parse_result* result): _alloc(alloc), _lexer(query), _query(query), _variables(variables), _result(result) - { - } - - xpath_ast_node* parse() - { - xpath_ast_node* result = parse_expression(); - - if (_lexer.current() != lex_eof) - { - // there are still unparsed tokens left, error - throw_error("Incorrect query"); - } - - return result; - } - - static xpath_ast_node* parse(const char_t* query, xpath_variable_set* variables, xpath_allocator* alloc, xpath_parse_result* result) - { - xpath_parser parser(query, variables, alloc, result); - - #ifdef PUGIXML_NO_EXCEPTIONS - int error = setjmp(parser._error_handler); - - return (error == 0) ? parser.parse() : 0; - #else - return parser.parse(); - #endif - } - }; - - struct xpath_query_impl - { - static xpath_query_impl* create() - { - void* memory = xml_memory::allocate(sizeof(xpath_query_impl)); - - return new (memory) xpath_query_impl(); - } - - static void destroy(void* ptr) - { - if (!ptr) return; - - // free all allocated pages - static_cast(ptr)->alloc.release(); - - // free allocator memory (with the first page) - xml_memory::deallocate(ptr); - } - - xpath_query_impl(): root(0), alloc(&block) - { - block.next = 0; - } - - xpath_ast_node* root; - xpath_allocator alloc; - xpath_memory_block block; - }; - - PUGI__FN xpath_string evaluate_string_impl(xpath_query_impl* impl, const xpath_node& n, xpath_stack_data& sd) - { - if (!impl) return xpath_string(); - - #ifdef PUGIXML_NO_EXCEPTIONS - if (setjmp(sd.error_handler)) return xpath_string(); - #endif - - xpath_context c(n, 1, 1); - - return impl->root->eval_string(c, sd.stack); - } -PUGI__NS_END - -namespace pugi -{ -#ifndef PUGIXML_NO_EXCEPTIONS - PUGI__FN xpath_exception::xpath_exception(const xpath_parse_result& result_): _result(result_) - { - assert(_result.error); - } - - PUGI__FN const char* xpath_exception::what() const throw() - { - return _result.error; - } - - PUGI__FN const xpath_parse_result& xpath_exception::result() const - { - return _result; - } -#endif - - PUGI__FN xpath_node::xpath_node() - { - } - - PUGI__FN xpath_node::xpath_node(const xml_node& node_): _node(node_) - { - } - - PUGI__FN xpath_node::xpath_node(const xml_attribute& attribute_, const xml_node& parent_): _node(attribute_ ? parent_ : xml_node()), _attribute(attribute_) - { - } - - PUGI__FN xml_node xpath_node::node() const - { - return _attribute ? xml_node() : _node; - } - - PUGI__FN xml_attribute xpath_node::attribute() const - { - return _attribute; - } - - PUGI__FN xml_node xpath_node::parent() const - { - return _attribute ? _node : _node.parent(); - } - - PUGI__FN static void unspecified_bool_xpath_node(xpath_node***) - { - } - - PUGI__FN xpath_node::operator xpath_node::unspecified_bool_type() const - { - return (_node || _attribute) ? unspecified_bool_xpath_node : 0; - } - - PUGI__FN bool xpath_node::operator!() const - { - return !(_node || _attribute); - } - - PUGI__FN bool xpath_node::operator==(const xpath_node& n) const - { - return _node == n._node && _attribute == n._attribute; - } - - PUGI__FN bool xpath_node::operator!=(const xpath_node& n) const - { - return _node != n._node || _attribute != n._attribute; - } - -#ifdef __BORLANDC__ - PUGI__FN bool operator&&(const xpath_node& lhs, bool rhs) - { - return (bool)lhs && rhs; - } - - PUGI__FN bool operator||(const xpath_node& lhs, bool rhs) - { - return (bool)lhs || rhs; - } -#endif - - PUGI__FN void xpath_node_set::_assign(const_iterator begin_, const_iterator end_) - { - assert(begin_ <= end_); - - size_t size_ = static_cast(end_ - begin_); - - if (size_ <= 1) - { - // deallocate old buffer - if (_begin != &_storage) impl::xml_memory::deallocate(_begin); - - // use internal buffer - if (begin_ != end_) _storage = *begin_; - - _begin = &_storage; - _end = &_storage + size_; - } - else - { - // make heap copy - xpath_node* storage = static_cast(impl::xml_memory::allocate(size_ * sizeof(xpath_node))); - - if (!storage) - { - #ifdef PUGIXML_NO_EXCEPTIONS - return; - #else - throw std::bad_alloc(); - #endif - } - - memcpy(storage, begin_, size_ * sizeof(xpath_node)); - - // deallocate old buffer - if (_begin != &_storage) impl::xml_memory::deallocate(_begin); - - // finalize - _begin = storage; - _end = storage + size_; - } - } - - PUGI__FN xpath_node_set::xpath_node_set(): _type(type_unsorted), _begin(&_storage), _end(&_storage) - { - } - - PUGI__FN xpath_node_set::xpath_node_set(const_iterator begin_, const_iterator end_, type_t type_): _type(type_), _begin(&_storage), _end(&_storage) - { - _assign(begin_, end_); - } - - PUGI__FN xpath_node_set::~xpath_node_set() - { - if (_begin != &_storage) impl::xml_memory::deallocate(_begin); - } - - PUGI__FN xpath_node_set::xpath_node_set(const xpath_node_set& ns): _type(ns._type), _begin(&_storage), _end(&_storage) - { - _assign(ns._begin, ns._end); - } - - PUGI__FN xpath_node_set& xpath_node_set::operator=(const xpath_node_set& ns) - { - if (this == &ns) return *this; - - _type = ns._type; - _assign(ns._begin, ns._end); - - return *this; - } - - PUGI__FN xpath_node_set::type_t xpath_node_set::type() const - { - return _type; - } - - PUGI__FN size_t xpath_node_set::size() const - { - return _end - _begin; - } - - PUGI__FN bool xpath_node_set::empty() const - { - return _begin == _end; - } - - PUGI__FN const xpath_node& xpath_node_set::operator[](size_t index) const - { - assert(index < size()); - return _begin[index]; - } - - PUGI__FN xpath_node_set::const_iterator xpath_node_set::begin() const - { - return _begin; - } - - PUGI__FN xpath_node_set::const_iterator xpath_node_set::end() const - { - return _end; - } - - PUGI__FN void xpath_node_set::sort(bool reverse) - { - _type = impl::xpath_sort(_begin, _end, _type, reverse); - } - - PUGI__FN xpath_node xpath_node_set::first() const - { - return impl::xpath_first(_begin, _end, _type); - } - - PUGI__FN xpath_parse_result::xpath_parse_result(): error("Internal error"), offset(0) - { - } - - PUGI__FN xpath_parse_result::operator bool() const - { - return error == 0; - } - - PUGI__FN const char* xpath_parse_result::description() const - { - return error ? error : "No error"; - } - - PUGI__FN xpath_variable::xpath_variable() - { - } - - PUGI__FN const char_t* xpath_variable::name() const - { - switch (_type) - { - case xpath_type_node_set: - return static_cast(this)->name; - - case xpath_type_number: - return static_cast(this)->name; - - case xpath_type_string: - return static_cast(this)->name; - - case xpath_type_boolean: - return static_cast(this)->name; - - default: - assert(!"Invalid variable type"); - return 0; - } - } - - PUGI__FN xpath_value_type xpath_variable::type() const - { - return _type; - } - - PUGI__FN bool xpath_variable::get_boolean() const - { - return (_type == xpath_type_boolean) ? static_cast(this)->value : false; - } - - PUGI__FN double xpath_variable::get_number() const - { - return (_type == xpath_type_number) ? static_cast(this)->value : impl::gen_nan(); - } - - PUGI__FN const char_t* xpath_variable::get_string() const - { - const char_t* value = (_type == xpath_type_string) ? static_cast(this)->value : 0; - return value ? value : PUGIXML_TEXT(""); - } - - PUGI__FN const xpath_node_set& xpath_variable::get_node_set() const - { - return (_type == xpath_type_node_set) ? static_cast(this)->value : impl::dummy_node_set; - } - - PUGI__FN bool xpath_variable::set(bool value) - { - if (_type != xpath_type_boolean) return false; - - static_cast(this)->value = value; - return true; - } - - PUGI__FN bool xpath_variable::set(double value) - { - if (_type != xpath_type_number) return false; - - static_cast(this)->value = value; - return true; - } - - PUGI__FN bool xpath_variable::set(const char_t* value) - { - if (_type != xpath_type_string) return false; - - impl::xpath_variable_string* var = static_cast(this); - - // duplicate string - size_t size = (impl::strlength(value) + 1) * sizeof(char_t); - - char_t* copy = static_cast(impl::xml_memory::allocate(size)); - if (!copy) return false; - - memcpy(copy, value, size); - - // replace old string - if (var->value) impl::xml_memory::deallocate(var->value); - var->value = copy; - - return true; - } - - PUGI__FN bool xpath_variable::set(const xpath_node_set& value) - { - if (_type != xpath_type_node_set) return false; - - static_cast(this)->value = value; - return true; - } - - PUGI__FN xpath_variable_set::xpath_variable_set() - { - for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) _data[i] = 0; - } - - PUGI__FN xpath_variable_set::~xpath_variable_set() - { - for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) - { - xpath_variable* var = _data[i]; - - while (var) - { - xpath_variable* next = var->_next; - - impl::delete_xpath_variable(var->_type, var); - - var = next; - } - } - } - - PUGI__FN xpath_variable* xpath_variable_set::find(const char_t* name) const - { - const size_t hash_size = sizeof(_data) / sizeof(_data[0]); - size_t hash = impl::hash_string(name) % hash_size; - - // look for existing variable - for (xpath_variable* var = _data[hash]; var; var = var->_next) - if (impl::strequal(var->name(), name)) - return var; - - return 0; - } - - PUGI__FN xpath_variable* xpath_variable_set::add(const char_t* name, xpath_value_type type) - { - const size_t hash_size = sizeof(_data) / sizeof(_data[0]); - size_t hash = impl::hash_string(name) % hash_size; - - // look for existing variable - for (xpath_variable* var = _data[hash]; var; var = var->_next) - if (impl::strequal(var->name(), name)) - return var->type() == type ? var : 0; - - // add new variable - xpath_variable* result = impl::new_xpath_variable(type, name); - - if (result) - { - result->_type = type; - result->_next = _data[hash]; - - _data[hash] = result; - } - - return result; - } - - PUGI__FN bool xpath_variable_set::set(const char_t* name, bool value) - { - xpath_variable* var = add(name, xpath_type_boolean); - return var ? var->set(value) : false; - } - - PUGI__FN bool xpath_variable_set::set(const char_t* name, double value) - { - xpath_variable* var = add(name, xpath_type_number); - return var ? var->set(value) : false; - } - - PUGI__FN bool xpath_variable_set::set(const char_t* name, const char_t* value) - { - xpath_variable* var = add(name, xpath_type_string); - return var ? var->set(value) : false; - } - - PUGI__FN bool xpath_variable_set::set(const char_t* name, const xpath_node_set& value) - { - xpath_variable* var = add(name, xpath_type_node_set); - return var ? var->set(value) : false; - } - - PUGI__FN xpath_variable* xpath_variable_set::get(const char_t* name) - { - return find(name); - } - - PUGI__FN const xpath_variable* xpath_variable_set::get(const char_t* name) const - { - return find(name); - } - - PUGI__FN xpath_query::xpath_query(const char_t* query, xpath_variable_set* variables): _impl(0) - { - impl::xpath_query_impl* qimpl = impl::xpath_query_impl::create(); - - if (!qimpl) - { - #ifdef PUGIXML_NO_EXCEPTIONS - _result.error = "Out of memory"; - #else - throw std::bad_alloc(); - #endif - } - else - { - impl::buffer_holder impl_holder(qimpl, impl::xpath_query_impl::destroy); - - qimpl->root = impl::xpath_parser::parse(query, variables, &qimpl->alloc, &_result); - - if (qimpl->root) - { - _impl = static_cast(impl_holder.release()); - _result.error = 0; - } - } - } - - PUGI__FN xpath_query::~xpath_query() - { - impl::xpath_query_impl::destroy(_impl); - } - - PUGI__FN xpath_value_type xpath_query::return_type() const - { - if (!_impl) return xpath_type_none; - - return static_cast(_impl)->root->rettype(); - } - - PUGI__FN bool xpath_query::evaluate_boolean(const xpath_node& n) const - { - if (!_impl) return false; - - impl::xpath_context c(n, 1, 1); - impl::xpath_stack_data sd; - - #ifdef PUGIXML_NO_EXCEPTIONS - if (setjmp(sd.error_handler)) return false; - #endif - - return static_cast(_impl)->root->eval_boolean(c, sd.stack); - } - - PUGI__FN double xpath_query::evaluate_number(const xpath_node& n) const - { - if (!_impl) return impl::gen_nan(); - - impl::xpath_context c(n, 1, 1); - impl::xpath_stack_data sd; - - #ifdef PUGIXML_NO_EXCEPTIONS - if (setjmp(sd.error_handler)) return impl::gen_nan(); - #endif - - return static_cast(_impl)->root->eval_number(c, sd.stack); - } - -#ifndef PUGIXML_NO_STL - PUGI__FN string_t xpath_query::evaluate_string(const xpath_node& n) const - { - impl::xpath_stack_data sd; - - return impl::evaluate_string_impl(static_cast(_impl), n, sd).c_str(); - } -#endif - - PUGI__FN size_t xpath_query::evaluate_string(char_t* buffer, size_t capacity, const xpath_node& n) const - { - impl::xpath_stack_data sd; - - impl::xpath_string r = impl::evaluate_string_impl(static_cast(_impl), n, sd); - - size_t full_size = r.length() + 1; - - if (capacity > 0) - { - size_t size = (full_size < capacity) ? full_size : capacity; - assert(size > 0); - - memcpy(buffer, r.c_str(), (size - 1) * sizeof(char_t)); - buffer[size - 1] = 0; - } - - return full_size; - } - - PUGI__FN xpath_node_set xpath_query::evaluate_node_set(const xpath_node& n) const - { - if (!_impl) return xpath_node_set(); - - impl::xpath_ast_node* root = static_cast(_impl)->root; - - if (root->rettype() != xpath_type_node_set) - { - #ifdef PUGIXML_NO_EXCEPTIONS - return xpath_node_set(); - #else - xpath_parse_result res; - res.error = "Expression does not evaluate to node set"; - - throw xpath_exception(res); - #endif - } - - impl::xpath_context c(n, 1, 1); - impl::xpath_stack_data sd; - - #ifdef PUGIXML_NO_EXCEPTIONS - if (setjmp(sd.error_handler)) return xpath_node_set(); - #endif - - impl::xpath_node_set_raw r = root->eval_node_set(c, sd.stack); - - return xpath_node_set(r.begin(), r.end(), r.type()); - } - - PUGI__FN const xpath_parse_result& xpath_query::result() const - { - return _result; - } - - PUGI__FN static void unspecified_bool_xpath_query(xpath_query***) - { - } - - PUGI__FN xpath_query::operator xpath_query::unspecified_bool_type() const - { - return _impl ? unspecified_bool_xpath_query : 0; - } - - PUGI__FN bool xpath_query::operator!() const - { - return !_impl; - } - - PUGI__FN xpath_node xml_node::select_single_node(const char_t* query, xpath_variable_set* variables) const - { - xpath_query q(query, variables); - return select_single_node(q); - } - - PUGI__FN xpath_node xml_node::select_single_node(const xpath_query& query) const - { - xpath_node_set s = query.evaluate_node_set(*this); - return s.empty() ? xpath_node() : s.first(); - } - - PUGI__FN xpath_node_set xml_node::select_nodes(const char_t* query, xpath_variable_set* variables) const - { - xpath_query q(query, variables); - return select_nodes(q); - } - - PUGI__FN xpath_node_set xml_node::select_nodes(const xpath_query& query) const - { - return query.evaluate_node_set(*this); - } -} - -#endif - -#ifdef __BORLANDC__ -# pragma option pop -#endif - -// Intel C++ does not properly keep warning state for function templates, -// so popping warning state at the end of translation unit leads to warnings in the middle. -#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) -# pragma warning(pop) -#endif - -// Undefine all local macros (makes sure we're not leaking macros in header-only mode) -#undef PUGI__NO_INLINE -#undef PUGI__STATIC_ASSERT -#undef PUGI__DMC_VOLATILE -#undef PUGI__MSVC_CRT_VERSION -#undef PUGI__NS_BEGIN -#undef PUGI__NS_END -#undef PUGI__FN -#undef PUGI__FN_NO_INLINE -#undef PUGI__IS_CHARTYPE_IMPL -#undef PUGI__IS_CHARTYPE -#undef PUGI__IS_CHARTYPEX -#undef PUGI__SKIPWS -#undef PUGI__OPTSET -#undef PUGI__PUSHNODE -#undef PUGI__POPNODE -#undef PUGI__SCANFOR -#undef PUGI__SCANWHILE -#undef PUGI__ENDSEG -#undef PUGI__THROW_ERROR -#undef PUGI__CHECK_ERROR - -#endif - -/** - * Copyright (c) 2006-2012 Arseny Kapoulkine - * - * 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. - */ From 0a7605cae11fc5278c4cde0850154c625a45103b Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 4 Apr 2017 03:06:07 +0100 Subject: [PATCH 069/603] we map to pageup/pagedown not leftbottom/rightbottom - fixes page up / down buttons in date input etc --- es-core/src/InputManager.cpp | 4 ++-- es-core/src/components/ComponentList.cpp | 4 ++-- es-core/src/components/DateTimeComponent.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index f03fbc14ec..e109dd99ac 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -287,8 +287,8 @@ void InputManager::loadDefaultKBConfig() cfg->mapInput("start", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_F1, 1, true)); cfg->mapInput("select", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_F2, 1, true)); - cfg->mapInput("leftbottom", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_RIGHTBRACKET, 1, true)); - cfg->mapInput("rightbottom", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_LEFTBRACKET, 1, true)); + cfg->mapInput("pageup", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_RIGHTBRACKET, 1, true)); + cfg->mapInput("pagedown", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_LEFTBRACKET, 1, true)); } void InputManager::writeDeviceConfig(InputConfig* config) diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 77b9ae83bc..a16bcb0975 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -81,10 +81,10 @@ bool ComponentList::input(InputConfig* config, Input input) }else if(config->isMappedTo("down", input)) { return listInput(input.value != 0 ? 1 : 0); - }else if(config->isMappedTo("leftbottom", input)) + }else if(config->isMappedTo("pageup", input)) { return listInput(input.value != 0 ? -7 : 0); - }else if(config->isMappedTo("rightbottom", input)){ + }else if(config->isMappedTo("pagedown", input)){ return listInput(input.value != 0 ? 7 : 0); } diff --git a/es-core/src/components/DateTimeComponent.cpp b/es-core/src/components/DateTimeComponent.cpp index a360be44f3..7113ec4950 100644 --- a/es-core/src/components/DateTimeComponent.cpp +++ b/es-core/src/components/DateTimeComponent.cpp @@ -54,9 +54,9 @@ bool DateTimeComponent::input(InputConfig* config, Input input) } int incDir = 0; - if(config->isMappedTo("up", input) || config->isMappedTo("leftbottom", input)) + if(config->isMappedTo("up", input) || config->isMappedTo("pageup", input)) incDir = 1; - else if(config->isMappedTo("down", input) || config->isMappedTo("rightbottom", input)) + else if(config->isMappedTo("down", input) || config->isMappedTo("pagedown", input)) incDir = -1; if(incDir != 0) From fbf349d61adfe5acbb760b981438f56840294da3 Mon Sep 17 00:00:00 2001 From: jrassa Date: Mon, 3 Apr 2017 22:24:52 -0400 Subject: [PATCH 070/603] fix image ratio for first image in video game list view --- es-app/src/views/gamelist/VideoGameListView.cpp | 7 ++++++- es-app/src/views/gamelist/VideoGameListView.h | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 2a270be028..a12e3fddf2 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -94,7 +94,6 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : initMDLabels(); initMDValues(); - updateInfoPanel(); } VideoGameListView::~VideoGameListView() @@ -343,3 +342,9 @@ void VideoGameListView::update(int deltaTime) BasicGameListView::update(deltaTime); mVideo.update(deltaTime); } + +void VideoGameListView::onShow() +{ + GuiComponent::onShow(); + updateInfoPanel(); +} diff --git a/es-app/src/views/gamelist/VideoGameListView.h b/es-app/src/views/gamelist/VideoGameListView.h index b0673d396d..0857f6ce25 100644 --- a/es-app/src/views/gamelist/VideoGameListView.h +++ b/es-app/src/views/gamelist/VideoGameListView.h @@ -12,6 +12,8 @@ class VideoGameListView : public BasicGameListView VideoGameListView(Window* window, FileData* root); virtual ~VideoGameListView(); + virtual void onShow() override; + virtual void onThemeChanged(const std::shared_ptr& theme) override; virtual const char* getName() const override { return "video"; } From e740e58004ec054e21f493fbb83e6f26433aa3d3 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 4 Apr 2017 04:30:17 +0100 Subject: [PATCH 071/603] bump version to 2.1.6 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 0c6b1dddc4..b543edca00 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_MAINTENANCE 5 -#define PROGRAM_VERSION_STRING "2.1.5rp" +#define PROGRAM_VERSION_MAINTENANCE 6 +#define PROGRAM_VERSION_STRING "2.1.6rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,1,5\0" +#define RESOURCE_VERSION_STRING "2,1,6\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 4cc0ced851fc8bcbebeeba14d349e400a6722890 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 4 Apr 2017 04:54:04 +0100 Subject: [PATCH 072/603] use -O2 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5961fff7bc..2f8e4e2d65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,8 +90,8 @@ if (CMAKE_BUILD_TYPE MATCHES Debug) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O0") #support C++11 for std::, optimize set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O0") else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O3") #support C++11 for std::, optimize - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O3") #-s = strip binary + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O2") #support C++11 for std::, optimize + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2") #-s = strip binary endif() endif() From 77e09864d9fa80c04cfac67d7db0b9743528daa2 Mon Sep 17 00:00:00 2001 From: pjft Date: Fri, 17 Mar 2017 15:33:46 +0000 Subject: [PATCH 073/603] Adding metadata to folders --- es-app/src/FileData.cpp | 20 ++----------------- es-app/src/MetaData.cpp | 16 +++++++++++---- .../views/gamelist/DetailedGameListView.cpp | 13 ++++++------ .../src/views/gamelist/VideoGameListView.cpp | 13 ++++++------ 4 files changed, 28 insertions(+), 34 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index c8409d4d59..798909ea36 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -83,28 +83,12 @@ const std::string& FileData::getThumbnailPath() const const std::string& FileData::getVideoPath() const { - if (mType == GAME) - { - return metadata.get("video"); - } - else - { - static std::string empty; - return empty; - } + return metadata.get("video"); } const std::string& FileData::getMarqueePath() const { - if (mType == GAME) - { - return metadata.get("marquee"); - } - else - { - static std::string empty; - return empty; - } + return metadata.get("marquee"); } diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 1f99228235..8dd6426ef6 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -25,10 +25,18 @@ MetaDataDecl gameDecls[] = { const std::vector gameMDD(gameDecls, gameDecls + sizeof(gameDecls) / sizeof(gameDecls[0])); MetaDataDecl folderDecls[] = { - {"name", MD_STRING, "", false}, - {"desc", MD_MULTILINE_STRING, "", false}, - {"image", MD_PATH, "", false}, - {"thumbnail", MD_PATH, "", false}, + {"name", MD_STRING, "", false, "name", "enter game name"}, + {"desc", MD_MULTILINE_STRING, "", false, "description", "enter description"}, + {"image", MD_PATH, "", false, "image", "enter path to image"}, + {"thumbnail", MD_PATH, "", false, "thumbnail", "enter path to thumbnail"}, + {"video", MD_PATH, "", false, "video", "enter path to video"}, + {"marquee", MD_PATH, "", false, "marquee", "enter path to marquee"}, + {"rating", MD_RATING, "0.000000", false, "rating", "enter rating"}, + {"releasedate", MD_DATE, "not-a-date-time", false, "release date", "enter release date"}, + {"developer", MD_STRING, "unknown", false, "developer", "enter game developer"}, + {"publisher", MD_STRING, "unknown", false, "publisher", "enter game publisher"}, + {"genre", MD_STRING, "unknown", false, "genre", "enter game genre"}, + {"players", MD_INT, "1", false, "players", "enter number of players"} }; const std::vector folderMDD(folderDecls, folderDecls + sizeof(folderDecls) / sizeof(folderDecls[0])); diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index de16110145..d042352bc1 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -192,14 +192,15 @@ void DetailedGameListView::updateInfoPanel() mDescription.setText(file->metadata.get("desc")); mDescContainer.reset(); + mRating.setValue(file->metadata.get("rating")); + mReleaseDate.setValue(file->metadata.get("releasedate")); + mDeveloper.setValue(file->metadata.get("developer")); + mPublisher.setValue(file->metadata.get("publisher")); + mGenre.setValue(file->metadata.get("genre")); + mPlayers.setValue(file->metadata.get("players")); + if(file->getType() == GAME) { - mRating.setValue(file->metadata.get("rating")); - mReleaseDate.setValue(file->metadata.get("releasedate")); - mDeveloper.setValue(file->metadata.get("developer")); - mPublisher.setValue(file->metadata.get("publisher")); - mGenre.setValue(file->metadata.get("genre")); - mPlayers.setValue(file->metadata.get("players")); mLastPlayed.setValue(file->metadata.get("lastplayed")); mPlayCount.setValue(file->metadata.get("playcount")); } diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 2a270be028..b5d3bcceef 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -259,14 +259,15 @@ void VideoGameListView::updateInfoPanel() mDescription.setText(file->metadata.get("desc")); mDescContainer.reset(); + mRating.setValue(file->metadata.get("rating")); + mReleaseDate.setValue(file->metadata.get("releasedate")); + mDeveloper.setValue(file->metadata.get("developer")); + mPublisher.setValue(file->metadata.get("publisher")); + mGenre.setValue(file->metadata.get("genre")); + mPlayers.setValue(file->metadata.get("players")); + if(file->getType() == GAME) { - mRating.setValue(file->metadata.get("rating")); - mReleaseDate.setValue(file->metadata.get("releasedate")); - mDeveloper.setValue(file->metadata.get("developer")); - mPublisher.setValue(file->metadata.get("publisher")); - mGenre.setValue(file->metadata.get("genre")); - mPlayers.setValue(file->metadata.get("players")); mLastPlayed.setValue(file->metadata.get("lastplayed")); mPlayCount.setValue(file->metadata.get("playcount")); } From ebab4844be35e5b8fcfc7a1ba4bae3c0925ee2f0 Mon Sep 17 00:00:00 2001 From: pjft Date: Mon, 3 Apr 2017 08:08:14 +0100 Subject: [PATCH 074/603] Hiding "Delete" button for folders --- es-app/src/guis/GuiGamelistOptions.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index cb8f45d68b..cfa957469e 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -74,10 +74,22 @@ void GuiGamelistOptions::openMetaDataEd() ScraperSearchParams p; p.game = file; p.system = file->getSystem(); - mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), - std::bind(&IGameListView::onFileChanged, getGamelist(), file, FILE_METADATA_CHANGED), [this, file] { + + std::function deleteBtnFunc; + + if (file->getType() == FOLDER) + { + deleteBtnFunc = NULL; + } + else + { + deleteBtnFunc = [this, file] { getGamelist()->remove(file); - })); + }; + } + + mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), + std::bind(&IGameListView::onFileChanged, getGamelist(), file, FILE_METADATA_CHANGED), deleteBtnFunc)); } void GuiGamelistOptions::jumpToLetter() From 7b8192c879c8d5a0877b1b2a561e83ed0a02ea5e Mon Sep 17 00:00:00 2001 From: jrassa Date: Thu, 6 Apr 2017 17:24:32 -0400 Subject: [PATCH 075/603] when loading carousel theme, keep checking system themes until one is found with a system view defined --- es-app/src/views/SystemView.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 272d4c6342..03cac7ad92 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -310,6 +310,9 @@ void SystemView::getViewElements(const std::shared_ptr& theme) getDefaultElements(); + if (!theme->hasView("system")) + return; + const ThemeData::ThemeElement* carouselElem = theme->getElement("system", "systemcarousel", "carousel"); if (carouselElem) getCarouselFromTheme(carouselElem); From 3d215a1f2f83e0a45f9fa08000584e46ae9a5d60 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 8 Apr 2017 18:16:30 +0100 Subject: [PATCH 076/603] remove some references to old ES site and old RetroPie github from the README.md --- README.md | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 1113c6d03f..ecb5307e03 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,8 @@ EmulationStation ================ -A cross-platform graphical front-end for emulators with controller navigation. - -Project website: http://emulationstation.org - -**Raspberry Pi users:** -A cool guy named petrockblog made a script which automatically installs many emulators and ES. It also includes options for configuring your RPi and setting it up to boot directly into ES. You can find it here: https://github.com/petrockblog/RetroPie-Setup - -Download -======== - -Download a pre-compiled version at [emulationstation.org](http://emulationstation.org#download). - - -I found a bug! I have a problem! -================================ - -- First, try to check the [issue list](https://github.com/Aloshi/EmulationStation/issues?state=open) for some entries that might match your problem. Make sure to check closed issues too! - -- If you're running EmulationStation on a on Raspberry Pi and have problems with config file changes not taking effect, content missing after editing, etc., check if your SD card is corrupted (see issues [#78](https://github.com/Aloshi/EmulationStation/issues/78) and [#107](https://github.com/Aloshi/EmulationStation/issues/107)). You can do this with free tools like [h2testw](http://www.heise.de/download/h2testw.html) or [F3](http://oss.digirati.com.br/f3/). - -- Try to update to the latest version of EmulationStation using git (you might need to delete your `es_input.cfg` and `es_settings.cfg` after that to reset them to default values): -```bash -cd YourEmulationStationDirectory -git pull -cmake . -make -``` - -- If your problem still isn't gone, the best way to report a bug is to post an issue on GitHub. Try to post the simplest steps possible to reproduce the bug. Include files you think might be related (except for ROMs, of course). If you haven't re-run ES since the crash, the log file `~/.emulationstation/es_log.txt` is also helpful. +This is a fork of EmulationStation for RetroPie. +EmulationStation is a cross-platform graphical front-end for emulators with controller navigation. Building ======== From 3c76a4b5a784f2d30cf97f202666ad80a97b00d2 Mon Sep 17 00:00:00 2001 From: "D. Polders" Date: Tue, 20 Dec 2016 21:25:35 +0100 Subject: [PATCH 077/603] Go-to Random Game feature --- es-app/src/guis/GuiGamelistOptions.cpp | 13 ++++++++ es-app/src/main.cpp | 2 ++ es-app/src/views/SystemView.cpp | 6 ++++ es-app/src/views/ViewController.cpp | 31 +++++++++++++++++++ es-app/src/views/ViewController.h | 1 + .../src/views/gamelist/BasicGameListView.cpp | 1 + .../views/gamelist/ISimpleGameListView.cpp | 4 +++ 7 files changed, 58 insertions(+) diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index cb8f45d68b..9d2b3f8ab6 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -35,6 +35,19 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui }; mMenu.addRow(row); + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "SURPRISE ME!", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.input_handler = [&](InputConfig* config, Input input) { + if (config->isMappedTo("a", input) && input.value) + { + ViewController::get()->goToRandomGame(); + delete this; + return true; + } + return false; + }; + mMenu.addRow(row); + // sort list by mListSort = std::make_shared(mWindow, "SORT GAMES BY", false); for(unsigned int i = 0; i < FileSorts::SortTypes.size(); i++) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index c3d030ec4b..dec399bded 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -166,6 +166,8 @@ void onExit() int main(int argc, char* argv[]) { + srand((unsigned int)time(NULL)); + unsigned int width = 0; unsigned int height = 0; diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 272d4c6342..47ede5124f 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -134,6 +134,11 @@ bool SystemView::input(InputConfig* config, Input input) ViewController::get()->goToGameList(getSelected()); return true; } + if (config->isMappedTo("x", input)) + { + ViewController::get()->goToRandomGame(); + return true; + } }else{ if(config->isMappedTo("left", input) || config->isMappedTo("right", input) || @@ -286,6 +291,7 @@ std::vector SystemView::getHelpPrompts() else prompts.push_back(HelpPrompt("left/right", "choose")); prompts.push_back(HelpPrompt("a", "select")); + prompts.push_back(HelpPrompt("x", "random")); return prompts; } diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index cc83eece51..de35e614e8 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -119,6 +119,37 @@ void ViewController::goToGameList(SystemData* system) playViewTransition(); } +void ViewController::goToRandomGame() +{ + unsigned int total = 0; + for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) + { + if ((*it)->getName() != "retropie") + total += (*it)->getGameCount(); + } + + // get random number in range + int target = std::round(((double)std::rand() / (double)RAND_MAX) * total); + + for (auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) + { + if ((*it)->getName() != "retropie") + { + if ((target - (int)(*it)->getGameCount()) >= 0) + { + target -= (int)(*it)->getGameCount(); + } + else + { + goToGameList(*it); + std::vector list = (*it)->getRootFolder()->getFilesRecursive(GAME); + getGameListView(*it)->setCursor(list.at(target)); + return; + } + } + } +} + void ViewController::playViewTransition() { Eigen::Vector3f target(Eigen::Vector3f::Identity()); diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 2658f44a9f..24f6343994 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -30,6 +30,7 @@ class ViewController : public GuiComponent void goToGameList(SystemData* system); void goToSystemView(SystemData* system); void goToStart(); + void goToRandomGame(); void onFileChanged(FileData* file, FileChangeType change); diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index d3cbc017a1..0cd5b023c2 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -118,5 +118,6 @@ std::vector BasicGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("a", "launch")); prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("select", "options")); + prompts.push_back(HelpPrompt("x", "random")); return prompts; } diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index dd6df5b634..6fae300598 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -102,6 +102,10 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) ViewController::get()->goToPrevGameList(); return true; } + }else if (config->isMappedTo("x", input)) + { + ViewController::get()->goToRandomGame(); + return true; } } From 7f84eeea9459ddd61ed0b63d0c495d159b0ccfc9 Mon Sep 17 00:00:00 2001 From: pjft Date: Sat, 18 Mar 2017 17:54:39 +0000 Subject: [PATCH 078/603] Adding generic gamelist filter funcionality for ES, specifically genre, players, ratings and publisher/developer --- es-app/CMakeLists.txt | 4 + es-app/src/FileData.cpp | 31 +- es-app/src/FileData.h | 9 +- es-app/src/FileFilterIndex.cpp | 377 ++++++++++++++++++ es-app/src/FileFilterIndex.h | 79 ++++ es-app/src/Gamelist.cpp | 8 + es-app/src/SystemData.cpp | 8 + es-app/src/SystemData.h | 6 + es-app/src/guis/GuiGamelistFilter.cpp | 112 ++++++ es-app/src/guis/GuiGamelistFilter.h | 34 ++ es-app/src/guis/GuiGamelistOptions.cpp | 127 ++++-- es-app/src/guis/GuiGamelistOptions.h | 4 + es-app/src/guis/GuiMetaDataEd.cpp | 6 + es-app/src/views/ViewController.cpp | 14 +- .../src/views/gamelist/BasicGameListView.cpp | 23 +- .../src/views/gamelist/GridGameListView.cpp | 4 +- .../views/gamelist/ISimpleGameListView.cpp | 13 +- .../src/views/gamelist/VideoGameListView.cpp | 2 + es-core/src/components/ComponentList.cpp | 5 +- es-core/src/components/OptionListComponent.h | 18 + 20 files changed, 816 insertions(+), 68 deletions(-) create mode 100644 es-app/src/FileFilterIndex.cpp create mode 100644 es-app/src/FileFilterIndex.h create mode 100644 es-app/src/guis/GuiGamelistFilter.cpp create mode 100644 es-app/src/guis/GuiGamelistFilter.h diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 04cbf509c0..1ae077006b 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -10,6 +10,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.h # GuiComponents ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h @@ -26,6 +27,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistFilter.h # Scrapers ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h @@ -57,6 +59,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.cpp # GuiComponents ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp @@ -72,6 +75,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistFilter.cpp # Scrapers ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 798909ea36..53cae33a36 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -81,6 +81,26 @@ const std::string& FileData::getThumbnailPath() const return metadata.get("image"); } +const std::vector& FileData::getChildrenListToDisplay() { + + FileFilterIndex* idx = mSystem->getIndex(); + if (idx->isFiltered()) { + mFilteredChildren.clear(); + for(auto it = mChildren.begin(); it != mChildren.end(); it++) + { + if (idx->showFile((*it))) { + mFilteredChildren.push_back(*it); + } + } + + return mFilteredChildren; + } + else + { + return mChildren; + } +} + const std::string& FileData::getVideoPath() const { return metadata.get("video"); @@ -91,19 +111,22 @@ const std::string& FileData::getMarqueePath() const return metadata.get("marquee"); } - -std::vector FileData::getFilesRecursive(unsigned int typeMask) const +std::vector FileData::getFilesRecursive(unsigned int typeMask, bool displayedOnly) const { std::vector out; + FileFilterIndex* idx = mSystem->getIndex(); for(auto it = mChildren.begin(); it != mChildren.end(); it++) { if((*it)->getType() & typeMask) - out.push_back(*it); + { + if (!displayedOnly || !idx->isFiltered() || idx->showFile(*it)) + out.push_back(*it); + } if((*it)->getChildren().size() > 0) { - std::vector subchildren = (*it)->getFilesRecursive(typeMask); + std::vector subchildren = (*it)->getFilesRecursive(typeMask, displayedOnly); out.insert(out.end(), subchildren.cbegin(), subchildren.cend()); } } diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index bd59ac0710..3dd3e059c6 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -11,7 +11,8 @@ class SystemData; enum FileType { GAME = 1, // Cannot have children. - FOLDER = 2 + FOLDER = 2, + PLACEHOLDER = 3 }; enum FileChangeType @@ -48,11 +49,14 @@ class FileData virtual const std::string& getVideoPath() const; virtual const std::string& getMarqueePath() const; - std::vector getFilesRecursive(unsigned int typeMask) const; + const std::vector& getChildrenListToDisplay(); + std::vector getFilesRecursive(unsigned int typeMask, bool displayedOnly = false) const; void addChild(FileData* file); // Error if mType != FOLDER void removeChild(FileData* file); //Error if mType != FOLDER + inline bool isPlaceHolder() { return mType == PLACEHOLDER; }; + // Returns our best guess at the "real" name for this file (will attempt to perform MAME name translation) std::string getDisplayName() const; @@ -82,4 +86,5 @@ class FileData FileData* mParent; std::unordered_map mChildrenByFilename; std::vector mChildren; + std::vector mFilteredChildren; }; diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp new file mode 100644 index 0000000000..a02e22d18d --- /dev/null +++ b/es-app/src/FileFilterIndex.cpp @@ -0,0 +1,377 @@ +#include "FileFilterIndex.h" + +#define UNKNOWN_LABEL "UNKNOWN" +#define INCLUDE_UNKNOWN false; + +FileFilterIndex::FileFilterIndex() + : filterByGenre(false), filterByPlayers(false), filterByPubDev(false), filterByRatings(false) +{ + FilterDataDecl filterDecls[] = { + //type //allKeys //filteredBy //filteredKeys //primaryKey //hasSecondaryKey //secondaryKey //menuLabel + { GENRE_FILTER, &genreIndexAllKeys, &filterByGenre, &genreIndexFilteredKeys, "genre", true, "genre", "GENRE" }, + { PLAYER_FILTER, &playersIndexAllKeys, &filterByPlayers, &playersIndexFilteredKeys, "players", false, "", "PLAYERS" }, + { PUBDEV_FILTER, &pubDevIndexAllKeys, &filterByPubDev, &pubDevIndexFilteredKeys, "developer", true, "publisher", "PUBLISHER / DEVELOPER" }, + { RATINGS_FILTER, &ratingsIndexAllKeys, &filterByRatings, &ratingsIndexFilteredKeys, "rating", false, "", "RATING" } + }; + + filterDataDecl = std::vector(filterDecls, filterDecls + sizeof(filterDecls) / sizeof(filterDecls[0])); +} + +FileFilterIndex::~FileFilterIndex() +{ + clearIndex(genreIndexAllKeys); + clearIndex(playersIndexAllKeys); + clearIndex(pubDevIndexAllKeys); + clearIndex(ratingsIndexAllKeys); + +} + +std::vector& FileFilterIndex::getFilterDataDecls() +{ + return filterDataDecl; +} + +std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary) +{ + std::string key = ""; + switch(type) + { + case GENRE_FILTER: + { + key = strToUpper(game->metadata.get("genre")); + boost::trim(key); + if (getSecondary && !key.empty()) { + std::istringstream f(key); + std::string newKey; + getline(f, newKey, '/'); + if (!newKey.empty() && newKey != key) + { + key = newKey; + } + else + { + key = std::string(); + } + } + break; + } + case PLAYER_FILTER: + { + if (getSecondary) + break; + + key = game->metadata.get("players"); + break; + } + case PUBDEV_FILTER: + { + key = strToUpper(game->metadata.get("publisher")); + boost::trim(key); + + if ((getSecondary && !key.empty()) || (!getSecondary && key.empty())) + key = strToUpper(game->metadata.get("developer")); + else + key = strToUpper(game->metadata.get("publisher")); + break; + } + case RATINGS_FILTER: + { + int ratingNumber = 0; + if (!getSecondary) + { + std::string ratingString = game->metadata.get("rating"); + if (!ratingString.empty()) { + try { + ratingNumber = boost::math::iround(std::stod(ratingString)*5); + if (ratingNumber < 0) + ratingNumber = 0; + + key = std::to_string(ratingNumber) + " STARS"; + } + catch (int e) + { + LOG(LogError) << "Error parsing Rating (invalid value, expected decimal): " << ratingString; + } + } + } + break; + } + } + boost::trim(key); + if (key.empty() || (type == RATINGS_FILTER && key == "0 STARS")) { + key = UNKNOWN_LABEL; + } + return key; +} + +void FileFilterIndex::addToIndex(FileData* game) +{ + manageGenreEntryInIndex(game); + managePlayerEntryInIndex(game); + managePubDevEntryInIndex(game); + manageRatingsEntryInIndex(game); +} + +void FileFilterIndex::removeFromIndex(FileData* game) +{ + manageGenreEntryInIndex(game, true); + managePlayerEntryInIndex(game, true); + managePubDevEntryInIndex(game, true); + manageRatingsEntryInIndex(game, true); +} + +void FileFilterIndex::setFilter(FilterIndexType type, std::vector* values) +{ + // test if it exists before setting + if(type == NONE) + { + clearAllFilters(); + } + else + { + for (std::vector::iterator it = filterDataDecl.begin(); it != filterDataDecl.end(); ++it ) { + if ((*it).type == type) + { + FilterDataDecl filterData = (*it); + *(filterData.filteredByRef) = values->size() > 0; + filterData.currentFilteredKeys->clear(); + for (std::vector::iterator vit = values->begin(); vit != values->end(); ++vit ) { + // check if exists + if (filterData.allIndexKeys->find(*vit) != filterData.allIndexKeys->end()) { + filterData.currentFilteredKeys->push_back(std::string(*vit)); + } + } + } + } + } + return; +} + +void FileFilterIndex::clearAllFilters() +{ + for (std::vector::iterator it = filterDataDecl.begin(); it != filterDataDecl.end(); ++it ) { + FilterDataDecl filterData = (*it); + *(filterData.filteredByRef) = false; + filterData.currentFilteredKeys->clear(); + } + return; +} + +void FileFilterIndex::debugPrintIndexes() +{ + LOG(LogInfo) << "Printing Indexes..."; + for (auto x: playersIndexAllKeys) { + LOG(LogInfo) << "Multiplayer Index: " << x.first << ": " << x.second; + } + for (auto x: genreIndexAllKeys) { + LOG(LogInfo) << "Genre Index: " << x.first << ": " << x.second; + } + for (auto x: ratingsIndexAllKeys) { + LOG(LogInfo) << "Ratings Index: " << x.first << ": " << x.second; + } + for (auto x: pubDevIndexAllKeys) { + LOG(LogInfo) << "PubDev Index: " << x.first << ": " << x.second; + } +} + +bool FileFilterIndex::showFile(FileData* game) +{ + // this shouldn't happen, but just in case let's get it out of the way + if (!isFiltered()) + return true; + + // if folder, needs further inspection - i.e. see if folder contains at least one element + // that should be shown + if (game->getType() == FOLDER) { + std::vector children = game->getChildren(); + // iterate through all of the children, until there's a match + + for (std::vector::iterator it = children.begin(); it != children.end(); ++it ) { + if (showFile(*it)) + { + return true; + } + } + return false; + } + + bool keepGoing = false; + + for (std::vector::iterator it = filterDataDecl.begin(); it != filterDataDecl.end(); ++it ) { + FilterDataDecl filterData = (*it); + if(*(filterData.filteredByRef)) { + // try to find a match + std::string key = getIndexableKey(game, filterData.type, false); + keepGoing = isKeyBeingFilteredBy(key, filterData.type); + + // if we didn't find a match, try for secondary keys - i.e. publisher and dev, or first genre + if (!keepGoing) { + if (!filterData.hasSecondaryKey) + { + return false; + } + std::string secKey = getIndexableKey(game, filterData.type, true); + if (secKey != UNKNOWN_LABEL) + { + keepGoing = isKeyBeingFilteredBy(secKey, filterData.type); + } + } + // if still nothing, then it's not a match + if (!keepGoing) + return false; + + } + + } + + return keepGoing; +} + +bool FileFilterIndex::isKeyBeingFilteredBy(std::string key, FilterIndexType type) { + const FilterIndexType filterTypes[4] = { PLAYER_FILTER, RATINGS_FILTER, GENRE_FILTER, PUBDEV_FILTER }; + std::vector filterKeysList[4] = { playersIndexFilteredKeys, ratingsIndexFilteredKeys, genreIndexFilteredKeys, pubDevIndexFilteredKeys }; + + for (int i = 0; i < 4; i++) { + if (filterTypes[i] == type) { + for (std::vector::iterator it = filterKeysList[i].begin(); it != filterKeysList[i].end(); ++it ) { + if (key == (*it)) + { + return true; + } + } + return false; + } + } + + return false; +} + +void FileFilterIndex::manageGenreEntryInIndex(FileData* game, bool remove) +{ + + std::string key = getIndexableKey(game, GENRE_FILTER, false); + + // flag for including unknowns + bool includeUnknown = INCLUDE_UNKNOWN; + + // only add unknown in pubdev IF both dev and pub are empty + if (!includeUnknown && (key == UNKNOWN_LABEL || key == "BIOS")) { + // no valid genre info found + return; + } + + manageIndexEntry(&genreIndexAllKeys, key, remove); + + key = getIndexableKey(game, GENRE_FILTER, true); + if (!includeUnknown && key == UNKNOWN_LABEL) + { + manageIndexEntry(&genreIndexAllKeys, key, remove); + } +} + +void FileFilterIndex::managePlayerEntryInIndex(FileData* game, bool remove) +{ + // flag for including unknowns + bool includeUnknown = INCLUDE_UNKNOWN; + std::string key = getIndexableKey(game, PLAYER_FILTER, false); + + // only add unknown in pubdev IF both dev and pub are empty + if (!includeUnknown && key == UNKNOWN_LABEL) { + // no valid player info found + return; + } + + manageIndexEntry(&playersIndexAllKeys, key, remove); +} + +void FileFilterIndex::managePubDevEntryInIndex(FileData* game, bool remove) +{ + std::string pub = getIndexableKey(game, PUBDEV_FILTER, false); + std::string dev = getIndexableKey(game, PUBDEV_FILTER, true); + + // flag for including unknowns + bool includeUnknown = INCLUDE_UNKNOWN; + bool unknownPub = false; + bool unknownDev = false; + + if (pub == UNKNOWN_LABEL) { + unknownPub = true; + } + if (dev == UNKNOWN_LABEL) { + unknownDev = true; + } + + if (!includeUnknown && unknownDev && unknownPub) { + // no valid rating info found + return; + } + + if (unknownDev && unknownPub) { + // if no info at all + manageIndexEntry(&pubDevIndexAllKeys, pub, remove); + } + else + { + if (!unknownDev) { + // if no info at all + manageIndexEntry(&pubDevIndexAllKeys, dev, remove); + } + if (!unknownPub) { + // if no info at all + manageIndexEntry(&pubDevIndexAllKeys, pub, remove); + } + } +} + +void FileFilterIndex::manageRatingsEntryInIndex(FileData* game, bool remove) +{ + std::string key = getIndexableKey(game, RATINGS_FILTER, false); + + // flag for including unknowns + bool includeUnknown = INCLUDE_UNKNOWN; + + if (!includeUnknown && key == UNKNOWN_LABEL) { + // no valid rating info found + return; + } + + manageIndexEntry(&ratingsIndexAllKeys, key, remove); +} + +void FileFilterIndex::manageIndexEntry(std::map* index, std::string key, bool remove) { + bool includeUnknown = INCLUDE_UNKNOWN; + if (!includeUnknown && key == UNKNOWN_LABEL) + return; + if (remove) { + // removing entry + if (index->find(key) == index->end()) + { + // this shouldn't happen + LOG(LogError) << "Couldn't find entry in index! " << key; + } + else + { + (index->at(key))--; + if(index->at(key) <= 0) { + index->erase(key); + } + } + } + else + { + // adding entry + if (index->find(key) == index->end()) + { + (*index)[key] = 1; + } + else + { + (index->at(key))++; + } + } +} + +void FileFilterIndex::clearIndex(std::map indexMap) +{ + indexMap.clear(); +} \ No newline at end of file diff --git a/es-app/src/FileFilterIndex.h b/es-app/src/FileFilterIndex.h new file mode 100644 index 0000000000..fffdaccf2d --- /dev/null +++ b/es-app/src/FileFilterIndex.h @@ -0,0 +1,79 @@ +#pragma once + +#include +#include "FileData.h" +#include "Log.h" +#include +#include +#include +#include +#include "Util.h" + +enum FilterIndexType +{ + NONE, + GENRE_FILTER, + PLAYER_FILTER, + PUBDEV_FILTER, + RATINGS_FILTER +}; + +struct FilterDataDecl +{ + FilterIndexType type; // type of filter + std::map* allIndexKeys; // all possible filters for this type + bool* filteredByRef; // is it filtered by this type + std::vector* currentFilteredKeys; // current keys being filtered for + std::string primaryKey; // primary key in metadata + bool hasSecondaryKey; // has secondary key for comparison + std::string secondaryKey; // what's the secondary key + std::string menuLabel; // text to show in menu +}; + +class FileFilterIndex +{ +public: + FileFilterIndex(); + ~FileFilterIndex(); + void addToIndex(FileData* game); + void removeFromIndex(FileData* game); + void setFilter(FilterIndexType type, std::vector* values); + void clearAllFilters(); + void debugPrintIndexes(); + bool showFile(FileData* game); + bool isFiltered() { return (filterByGenre || filterByPlayers || filterByPubDev || filterByRatings); }; + bool isKeyBeingFilteredBy(std::string key, FilterIndexType type); + std::map* getGenreAllIndexedKeys() { return &genreIndexAllKeys; }; + std::vector* getGenreFilteredKeys() { return &genreIndexFilteredKeys; }; + std::vector& getFilterDataDecls(); +private: + std::vector filterDataDecl; + std::string getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary); + + void manageGenreEntryInIndex(FileData* game, bool remove = false); + void managePlayerEntryInIndex(FileData* game, bool remove = false); + void managePubDevEntryInIndex(FileData* game, bool remove = false); + void manageRatingsEntryInIndex(FileData* game, bool remove = false); + + void manageIndexEntry(std::map* index, std::string key, bool remove); + + void clearIndex(std::map indexMap); + + bool filterByGenre; + bool filterByPlayers; + bool filterByPubDev; + bool filterByRatings; + + std::map genreIndexAllKeys; + std::map playersIndexAllKeys; + std::map pubDevIndexAllKeys; + std::map ratingsIndexAllKeys; + + std::vector genreIndexFilteredKeys; + std::vector playersIndexFilteredKeys; + std::vector pubDevIndexFilteredKeys; + std::vector ratingsIndexFilteredKeys; + + FileData* mRootFolder; + +}; \ No newline at end of file diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index e5bc7da3bc..99ecad3b16 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -141,6 +141,14 @@ void parseGamelist(SystemData* system) file->metadata.set("name", defaultName); file->metadata.resetChangedFlag(); + + // index if it's a game! + if(type == GAME) + { + FileFilterIndex* index = system->getIndex(); + index->addToIndex(file); + } + } } } diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index cb46f1c47c..a5f6429899 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -36,6 +36,8 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, con mPlatformIds = platformIds; mThemeFolder = themeFolder; + mFilterIndex = new FileFilterIndex(); + mRootFolder = new FileData(FOLDER, mStartPath, this); mRootFolder->metadata.set("name", mFullName); @@ -59,6 +61,7 @@ SystemData::~SystemData() } delete mRootFolder; + delete mFilterIndex; } @@ -429,6 +432,11 @@ unsigned int SystemData::getGameCount() const return mRootFolder->getFilesRecursive(GAME).size(); } +unsigned int SystemData::getDisplayedGameCount() const +{ + return mRootFolder->getFilesRecursive(GAME, true).size(); +} + void SystemData::loadTheme() { mTheme = std::make_shared(); diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index 2a0ac81886..2e332f9add 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -7,6 +7,7 @@ #include "MetaData.h" #include "PlatformId.h" #include "ThemeData.h" +#include "FileFilterIndex.h" class SystemData { @@ -32,6 +33,7 @@ class SystemData std::string getThemePath() const; unsigned int getGameCount() const; + unsigned int getDisplayedGameCount() const; void launchGame(Window* window, FileData* game); @@ -64,6 +66,8 @@ class SystemData // Load or re-load theme. void loadTheme(); + FileFilterIndex* getIndex() { return mFilterIndex; }; + private: std::string mName; std::string mFullName; @@ -76,5 +80,7 @@ class SystemData void populateFolder(FileData* folder); + FileFilterIndex* mFilterIndex; + FileData* mRootFolder; }; diff --git a/es-app/src/guis/GuiGamelistFilter.cpp b/es-app/src/guis/GuiGamelistFilter.cpp new file mode 100644 index 0000000000..1112b2826a --- /dev/null +++ b/es-app/src/guis/GuiGamelistFilter.cpp @@ -0,0 +1,112 @@ +#include "guis/GuiGamelistFilter.h" +#include "guis/GuiMsgBox.h" +#include "views/ViewController.h" + +#include "components/TextComponent.h" +#include "components/OptionListComponent.h" + +GuiGamelistFilter::GuiGamelistFilter(Window* window, SystemData* system) : GuiComponent(window), mMenu(window, "FILTER GAMELIST BY"), mSystem(system) +{ + initializeMenu(); +} + +void GuiGamelistFilter::initializeMenu() +{ + addChild(&mMenu); + + // get filters from system + + mFilterIndex = mSystem->getIndex(); + + ComponentListRow row; + + // show filtered menu + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "RESET ALL FILTERS", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.makeAcceptInputHandler(std::bind(&GuiGamelistFilter::resetAllFilters, this)); + mMenu.addRow(row); + row.elements.clear(); + + addFiltersToMenu(); + + mMenu.addButton("BACK", "back", std::bind(&GuiGamelistFilter::applyFilters, this)); + + mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); +} + +void GuiGamelistFilter::resetAllFilters() +{ + mFilterIndex->clearAllFilters(); + for (std::map >>::iterator it = mFilterOptions.begin(); it != mFilterOptions.end(); ++it ) { + std::shared_ptr< OptionListComponent > optionList = it->second; + optionList->selectNone(); + } +} + +GuiGamelistFilter::~GuiGamelistFilter() +{ + mFilterOptions.clear(); +} + +void GuiGamelistFilter::addFiltersToMenu() +{ + std::vector decls = mFilterIndex->getFilterDataDecls(); + for (std::vector::iterator it = decls.begin(); it != decls.end(); ++it ) { + + FilterIndexType type = (*it).type; // type of filter + std::map* allKeys = (*it).allIndexKeys; // all possible filters for this type + std::vector* allFilteredKeys = (*it).currentFilteredKeys; // current keys being filtered for + std::string menuLabel = (*it).menuLabel; // text to show in menu + std::shared_ptr< OptionListComponent > optionList; + + + // add filters (with first one selected) + ComponentListRow row; + + // add genres + optionList = std::make_shared< OptionListComponent >(mWindow, menuLabel, true); + for(auto it: *allKeys) + { + optionList->add(it.first, it.first, mFilterIndex->isKeyBeingFilteredBy(it.first, type)); + } + if (allKeys->size() > 0) + mMenu.addWithLabel(menuLabel, optionList); + + mFilterOptions[type] = optionList; + } +} + +void GuiGamelistFilter::applyFilters() +{ + std::vector decls = mFilterIndex->getFilterDataDecls(); + for (std::map >>::iterator it = mFilterOptions.begin(); it != mFilterOptions.end(); ++it ) { + std::shared_ptr< OptionListComponent > optionList = it->second; + std::vector filters = optionList->getSelectedObjects(); + mFilterIndex->setFilter(it->first, &filters); + } + + delete this; + +} + +bool GuiGamelistFilter::input(InputConfig* config, Input input) +{ + bool consumed = GuiComponent::input(config, input); + if(consumed) + return true; + + if(config->isMappedTo("b", input) && input.value != 0) + { + applyFilters(); + } + + + return false; +} + +std::vector GuiGamelistFilter::getHelpPrompts() +{ + std::vector prompts = mMenu.getHelpPrompts(); + prompts.push_back(HelpPrompt("b", "back")); + return prompts; +} diff --git a/es-app/src/guis/GuiGamelistFilter.h b/es-app/src/guis/GuiGamelistFilter.h new file mode 100644 index 0000000000..8462b0400d --- /dev/null +++ b/es-app/src/guis/GuiGamelistFilter.h @@ -0,0 +1,34 @@ +#pragma once + +#include "GuiComponent.h" +#include "SystemData.h" +#include "components/MenuComponent.h" +#include "FileFilterIndex.h" +#include "Log.h" + + +template +class OptionListComponent; + + +class GuiGamelistFilter : public GuiComponent +{ +public: + GuiGamelistFilter(Window* window, SystemData* system); + ~GuiGamelistFilter(); + bool input(InputConfig* config, Input input) override; + + virtual std::vector getHelpPrompts() override; + +private: + void initializeMenu(); + void applyFilters(); + void resetAllFilters(); + void addFiltersToMenu(); + + std::map >> mFilterOptions; + + MenuComponent mMenu; + SystemData* mSystem; + FileFilterIndex* mFilterIndex; +}; diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 22548c2007..4c65b9dfb7 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -4,35 +4,21 @@ #include "views/ViewController.h" GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : GuiComponent(window), - mSystem(system), - mMenu(window, "OPTIONS") + mSystem(system), mMenu(window, "OPTIONS"), fromPlaceholder(false), mFiltersChanged(false) { addChild(&mMenu); - // jump to letter - char curChar = toupper(getGamelist()->getCursor()->getName()[0]); - if(curChar < 'A' || curChar > 'Z') - curChar = 'A'; - - mJumpToLetterList = std::make_shared(mWindow, "JUMP TO LETTER", false); - for(char c = 'A'; c <= 'Z'; c++) - mJumpToLetterList->add(std::string(1, c), c, c == curChar); - + // check it's not a placeholder folder - if it is, only show "Filter Options" + FileData* file = getGamelist()->getCursor(); + fromPlaceholder = file->isPlaceHolder(); + bool isFiltered = system->getIndex()->isFiltered(); ComponentListRow row; - row.addElement(std::make_shared(mWindow, "JUMP TO LETTER", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.addElement(mJumpToLetterList, false); - row.input_handler = [&](InputConfig* config, Input input) { - if(config->isMappedTo("a", input) && input.value) - { - jumpToLetter(); - return true; - } - else if(mJumpToLetterList->input(config, input)) - { - return true; - } - return false; - }; + + // show filtered menu + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "FILTER GAMELIST", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(makeArrow(mWindow), false); + row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openGamelistFilter, this)); mMenu.addRow(row); row.elements.clear(); @@ -48,22 +34,52 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui }; mMenu.addRow(row); - // sort list by - mListSort = std::make_shared(mWindow, "SORT GAMES BY", false); - for(unsigned int i = 0; i < FileSorts::SortTypes.size(); i++) - { - const FileData::SortType& sort = FileSorts::SortTypes.at(i); - mListSort->add(sort.description, &sort, i == 0); // TODO - actually make the sort type persistent - } + if (!fromPlaceholder) { + + if (!isFiltered) { + // jump to letter + row.elements.clear(); + char curChar = toupper(getGamelist()->getCursor()->getName()[0]); + if(curChar < 'A' || curChar > 'Z') + curChar = 'A'; + + mJumpToLetterList = std::make_shared(mWindow, "JUMP TO LETTER", false); + for(char c = 'A'; c <= 'Z'; c++) + mJumpToLetterList->add(std::string(1, c), c, c == curChar); + + row.addElement(std::make_shared(mWindow, "JUMP TO LETTER", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(mJumpToLetterList, false); + row.input_handler = [&](InputConfig* config, Input input) { + if(config->isMappedTo("a", input) && input.value) + { + jumpToLetter(); + return true; + } + else if(mJumpToLetterList->input(config, input)) + { + return true; + } + return false; + }; + mMenu.addRow(row); + } - mMenu.addWithLabel("SORT GAMES BY", mListSort); + // sort list by + mListSort = std::make_shared(mWindow, "SORT GAMES BY", false); + for(unsigned int i = 0; i < FileSorts::SortTypes.size(); i++) + { + const FileData::SortType& sort = FileSorts::SortTypes.at(i); + mListSort->add(sort.description, &sort, i == 0); // TODO - actually make the sort type persistent + } - // edit game metadata - row.elements.clear(); - row.addElement(std::make_shared(mWindow, "EDIT THIS GAME'S METADATA", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.addElement(makeArrow(mWindow), false); - row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openMetaDataEd, this)); - mMenu.addRow(row); + mMenu.addWithLabel("SORT GAMES BY", mListSort); + + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "EDIT THIS GAME'S METADATA", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(makeArrow(mWindow), false); + row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openMetaDataEd, this)); + mMenu.addRow(row); + } // center the menu setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); @@ -73,13 +89,36 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui GuiGamelistOptions::~GuiGamelistOptions() { // apply sort - FileData* root = getGamelist()->getCursor()->getSystem()->getRootFolder(); - root->sort(*mListSort->getSelected()); // will also recursively sort children - - // notify that the root folder was sorted - getGamelist()->onFileChanged(root, FILE_SORTED); + if (!fromPlaceholder) { + FileData* root = getGamelist()->getCursor()->getSystem()->getRootFolder(); + root->sort(*mListSort->getSelected()); // will also recursively sort children + + // notify that the root folder was sorted + getGamelist()->onFileChanged(root, FILE_SORTED); + } + if (mFiltersChanged) + { + if (!fromPlaceholder) { + FileData* root = getGamelist()->getCursor()->getSystem()->getRootFolder(); + getGamelist()->onFileChanged(root, FILE_SORTED); + } + else + { + // only reload full view if we came from a placeholder + // as we need to re-display the remaining elements for whatever new + // game is selected + ViewController::get()->reloadGameListView(mSystem); + } + } } +void GuiGamelistOptions::openGamelistFilter() +{ + mFiltersChanged = true; + GuiGamelistFilter* ggf = new GuiGamelistFilter(mWindow, mSystem); + mWindow->pushGui(ggf); +} + void GuiGamelistOptions::openMetaDataEd() { // open metadata editor diff --git a/es-app/src/guis/GuiGamelistOptions.h b/es-app/src/guis/GuiGamelistOptions.h index 2ce685c9e7..151f4ab6cc 100644 --- a/es-app/src/guis/GuiGamelistOptions.h +++ b/es-app/src/guis/GuiGamelistOptions.h @@ -1,6 +1,7 @@ #include "GuiComponent.h" #include "components/MenuComponent.h" #include "components/OptionListComponent.h" +#include "GuiGamelistFilter.h" #include "FileSorts.h" class IGameListView; @@ -15,6 +16,7 @@ class GuiGamelistOptions : public GuiComponent virtual std::vector getHelpPrompts() override; private: + void openGamelistFilter(); void openMetaDataEd(); void jumpToLetter(); @@ -28,4 +30,6 @@ class GuiGamelistOptions : public GuiComponent SystemData* mSystem; IGameListView* getGamelist(); + bool fromPlaceholder; + bool mFiltersChanged; }; diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index 11367c2ad2..7630cb6a58 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -170,6 +170,9 @@ void GuiMetaDataEd::onSizeChanged() void GuiMetaDataEd::save() { + // remove game from index + mScraperParams.system->getIndex()->removeFromIndex(mScraperParams.game); + for(unsigned int i = 0; i < mEditors.size(); i++) { if(mMetaDataDecl.at(i).isStatistic) @@ -178,6 +181,9 @@ void GuiMetaDataEd::save() mMetaData->set(mMetaDataDecl.at(i).key, mEditors.at(i)->getValue()); } + // enter game in index + mScraperParams.system->getIndex()->addToIndex(mScraperParams.game); + if(mSavedCallback) mSavedCallback(); } diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index de35e614e8..15d50043f3 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -125,7 +125,7 @@ void ViewController::goToRandomGame() for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { if ((*it)->getName() != "retropie") - total += (*it)->getGameCount(); + total += (*it)->getDisplayedGameCount(); } // get random number in range @@ -135,14 +135,14 @@ void ViewController::goToRandomGame() { if ((*it)->getName() != "retropie") { - if ((target - (int)(*it)->getGameCount()) >= 0) + if ((target - (int)(*it)->getDisplayedGameCount()) >= 0) { - target -= (int)(*it)->getGameCount(); + target -= (int)(*it)->getDisplayedGameCount(); } else { goToGameList(*it); - std::vector list = (*it)->getRootFolder()->getFilesRecursive(GAME); + std::vector list = (*it)->getRootFolder()->getFilesRecursive(GAME, true); getGameListView(*it)->setCursor(list.at(target)); return; } @@ -401,7 +401,11 @@ void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) system->loadTheme(); std::shared_ptr newView = getGameListView(system); - newView->setCursor(cursor); + + // to counter having come from a placeholder + if (!cursor->isPlaceHolder()) { + newView->setCursor(cursor); + } if(isCurrent) mCurrentView = newView; diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 0cd5b023c2..23a39ead3c 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -5,6 +5,7 @@ #include "ThemeData.h" #include "SystemData.h" #include "Settings.h" +#include "FileFilterIndex.h" BasicGameListView::BasicGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), mList(window) @@ -13,7 +14,7 @@ BasicGameListView::BasicGameListView(Window* window, FileData* root) mList.setPosition(0, mSize.y() * 0.2f); addChild(&mList); - populateList(root->getChildren()); + populateList(root->getChildrenListToDisplay()); } void BasicGameListView::onThemeChanged(const std::shared_ptr& theme) @@ -38,12 +39,20 @@ void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) void BasicGameListView::populateList(const std::vector& files) { mList.clear(); + if (files.size() > 0) + { + mHeaderText.setText(files.at(0)->getSystem()->getFullName()); - mHeaderText.setText(files.at(0)->getSystem()->getFullName()); - - for(auto it = files.begin(); it != files.end(); it++) + for(auto it = files.begin(); it != files.end(); it++) + { + mList.add((*it)->getName(), *it, ((*it)->getType() == FOLDER)); + } + } + else { - mList.add((*it)->getName(), *it, ((*it)->getType() == FOLDER)); + // empty list - add a placeholder + FileData* placeholder = new FileData(PLACEHOLDER, "", this->mRoot->getSystem()); + mList.add(placeholder->getName(), placeholder, (placeholder->getType() == PLACEHOLDER)); } } @@ -54,9 +63,11 @@ FileData* BasicGameListView::getCursor() void BasicGameListView::setCursor(FileData* cursor) { + if (cursor->isPlaceHolder()) + return; if(!mList.setCursor(cursor)) { - populateList(cursor->getParent()->getChildren()); + populateList(cursor->getParent()->getChildrenListToDisplay()); mList.setCursor(cursor); // update our cursor stack in case our cursor just got set to some folder we weren't in before diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index c34b4b8ba0..77f9a6f86c 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -10,7 +10,7 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : ISimpleGame mGrid.setSize(mSize.x(), mSize.y() * 0.8f); addChild(&mGrid); - populateList(root->getChildren()); + populateList(root->getChildrenListToDisplay()); } FileData* GridGameListView::getCursor() @@ -22,7 +22,7 @@ void GridGameListView::setCursor(FileData* file) { if(!mGrid.setCursor(file)) { - populateList(file->getParent()->getChildren()); + populateList(file->getParent()->getChildrenListToDisplay()); mGrid.setCursor(file); } } diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 6fae300598..fa9b6944b1 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -47,8 +47,15 @@ void ISimpleGameListView::onFileChanged(FileData* file, FileChangeType change) // we could be tricky here to be efficient; // but this shouldn't happen very often so we'll just always repopulate FileData* cursor = getCursor(); - populateList(cursor->getParent()->getChildren()); - setCursor(cursor); + if (!cursor->isPlaceHolder()) { + populateList(cursor->getParent()->getChildrenListToDisplay()); + setCursor(cursor); + } + else + { + populateList(mRoot->getChildrenListToDisplay()); + setCursor(cursor); + } } bool ISimpleGameListView::input(InputConfig* config, Input input) @@ -67,7 +74,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) if(cursor->getChildren().size() > 0) { mCursorStack.push(cursor); - populateList(cursor->getChildren()); + populateList(cursor->getChildrenListToDisplay()); } } diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index bb4bf3b5b5..266225231b 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -248,7 +248,9 @@ void VideoGameListView::updateInfoPanel() thumbnail_path.insert(0, getHomePath()); } if (!mVideo.setVideo(video_path)) + { mVideo.setDefaultVideo(); + } mVideoPlaying = true; mVideo.setImage(thumbnail_path); diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index a16bcb0975..f4a313c4d9 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -81,11 +81,12 @@ bool ComponentList::input(InputConfig* config, Input input) }else if(config->isMappedTo("down", input)) { return listInput(input.value != 0 ? 1 : 0); + }else if(config->isMappedTo("pageup", input)) { - return listInput(input.value != 0 ? -7 : 0); + return listInput(input.value != 0 ? -6 : 0); }else if(config->isMappedTo("pagedown", input)){ - return listInput(input.value != 0 ? 7 : 0); + return listInput(input.value != 0 ? 6 : 0); } return false; diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index 40ff34ffff..45d12f3363 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -251,6 +251,24 @@ class OptionListComponent : public GuiComponent onSelectedChanged(); } + void selectAll() + { + for(unsigned int i = 0; i < mEntries.size(); i++) + { + mEntries.at(i).selected = true; + } + onSelectedChanged(); + } + + void selectNone() + { + for(unsigned int i = 0; i < mEntries.size(); i++) + { + mEntries.at(i).selected = false; + } + onSelectedChanged(); + } + private: unsigned int getSelectedId() { From 474891f4a3015ed9abdd6c1e557329dfbcc32ea8 Mon Sep 17 00:00:00 2001 From: jrassa Date: Sun, 30 Apr 2017 22:54:27 -0400 Subject: [PATCH 079/603] fix black boxes appearing on gamelist after scrolling --- es-app/src/views/SystemView.cpp | 3 ++- es-core/src/components/TextComponent.cpp | 24 ++++++++++++++++-------- es-core/src/components/TextComponent.h | 2 ++ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 1cc4532f62..1024d84f33 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -443,8 +443,9 @@ void SystemView::getDefaultElements(void) // System Info Bar mSystemInfo.setSize(mSize.x(), mSystemInfo.getFont()->getLetterHeight()*2.2f); - mSystemInfo.setPosition(0, (mCarousel.pos.y() + mCarousel.size.y())); + mSystemInfo.setPosition(0, (mCarousel.pos.y() + mCarousel.size.y() - 0.2f)); mSystemInfo.setBackgroundColor(0xDDDDDDD8); + mSystemInfo.setRenderBackground(true); mSystemInfo.setFont(Font::get((int)(0.035f * mSize.y()), Font::getDefaultPath())); mSystemInfo.setColor(0x000000FF); } diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index c7b7a490d6..bb1edfb5db 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -8,13 +8,13 @@ #include "Settings.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), - mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT), mLineSpacing(1.5f), mBgColor(0) + mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT), mLineSpacing(1.5f), mBgColor(0), mRenderBackground(false) { } TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Alignment align, Eigen::Vector3f pos, Eigen::Vector2f size, unsigned int bgcolor) : GuiComponent(window), - mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align), mLineSpacing(1.5f), mBgColor(0) + mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align), mLineSpacing(1.5f), mBgColor(0), mRenderBackground(false) { setFont(font); setColor(color); @@ -51,6 +51,11 @@ void TextComponent::setBackgroundColor(unsigned int color) mBgColorOpacity = mBgColor & 0x000000FF; } +void TextComponent::setRenderBackground(bool render) +{ + mRenderBackground = render; +} + // Scale the opacity void TextComponent::setOpacity(unsigned char opacity) { @@ -60,10 +65,10 @@ void TextComponent::setOpacity(unsigned char opacity) unsigned char o = (unsigned char)((float)opacity / 255.f * (float) mColorOpacity); mColor = (mColor & 0xFFFFFF00) | (unsigned char) o; - + unsigned char bgo = (unsigned char)((float)opacity / 255.f * (float)mBgColorOpacity); mBgColor = (mBgColor & 0xFFFFFF00) | (unsigned char)bgo; - + onColorChanged(); GuiComponent::setOpacity(opacity); @@ -90,10 +95,10 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - if (mBgColor) + if (mRenderBackground) { - Renderer::drawRect(getPosition().x(), getPosition().y() - 1, - getSize().x(), getSize().y(), mBgColor); + Renderer::setMatrix(trans); + Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), mBgColor); } if(mTextCache) @@ -233,8 +238,11 @@ void TextComponent::applyTheme(const std::shared_ptr& theme, const st if (properties & COLOR && elem->has("color")) setColor(elem->get("color")); - if (properties & COLOR && elem->has("backgroundColor")) + setRenderBackground(false); + if (properties & COLOR && elem->has("backgroundColor")) { setBackgroundColor(elem->get("backgroundColor")); + setRenderBackground(true); + } if(properties & ALIGNMENT && elem->has("alignment")) { diff --git a/es-core/src/components/TextComponent.h b/es-core/src/components/TextComponent.h index a0dc4a5543..2f2f8e4e60 100644 --- a/es-core/src/components/TextComponent.h +++ b/es-core/src/components/TextComponent.h @@ -26,6 +26,7 @@ class TextComponent : public GuiComponent void setAlignment(Alignment align); void setLineSpacing(float spacing); void setBackgroundColor(unsigned int color); + void setRenderBackground(bool render); void render(const Eigen::Affine3f& parentTrans) override; @@ -49,6 +50,7 @@ class TextComponent : public GuiComponent unsigned int mBgColor; unsigned char mColorOpacity; unsigned char mBgColorOpacity; + bool mRenderBackground; std::shared_ptr mFont; bool mUppercase; From ab9faa8d3d7926dc2dc30478914c3deb790c494e Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 2 May 2017 00:14:34 +0100 Subject: [PATCH 080/603] bump version to 2.1.7 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index b543edca00..b8a93fb931 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_MAINTENANCE 6 -#define PROGRAM_VERSION_STRING "2.1.6rp" +#define PROGRAM_VERSION_MAINTENANCE 7 +#define PROGRAM_VERSION_STRING "2.1.7rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,1,6\0" +#define RESOURCE_VERSION_STRING "2,1,7\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From c2b76aaa73e2db87599321d8a6990fd63ab1e033 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 4 May 2017 11:33:45 -0400 Subject: [PATCH 081/603] #69: Fixing user input from scraper. It now does an exact name search (#123) * #69: Fixing user input from scraper. It now does an exact name search for the game. Anything not found by the normal game search can be found through this. It does not fail on special characters or when there are only three letter words. --- es-app/src/scrapers/GamesDBScraper.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 80a679e982..0584474414 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -70,10 +70,15 @@ void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std std::string path = "thegamesdb.net/api/GetGame.php?"; std::string cleanName = params.nameOverride; - if(cleanName.empty()) + if (cleanName.empty()) + { cleanName = params.game->getCleanName(); - - path += "name=" + HttpReq::urlEncode(cleanName); + path += "name=" + HttpReq::urlEncode(cleanName); + } + else + { + path += "exactname=" + HttpReq::urlEncode(cleanName); + } if(params.system->getPlatformIds().empty()) { From 884cae4c37655ad9f558bf792edd7d6d00b31586 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 4 May 2017 18:49:35 +0100 Subject: [PATCH 082/603] use 1.2f as carousel logo scale default - fixes #126 --- es-app/src/views/SystemView.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 1024d84f33..9794ea91ab 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -436,7 +436,7 @@ void SystemView::getDefaultElements(void) mCarousel.pos.x() = 0.0f; mCarousel.pos.y() = 0.5f * (mSize.y() - mCarousel.size.y()); mCarousel.color = 0xFFFFFFD8; - mCarousel.logoScale = 1.5f; + mCarousel.logoScale = 1.2f; mCarousel.logoSize.x() = 0.25f * mSize.x(); mCarousel.logoSize.y() = 0.155f * mSize.y(); mCarousel.maxLogoCount = 3; From 4ab3980078091178fcc933391b18db901ba85a16 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 4 May 2017 18:53:29 +0100 Subject: [PATCH 083/603] bump version to 2.1.8 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index b8a93fb931..cc26192d74 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_MAINTENANCE 7 -#define PROGRAM_VERSION_STRING "2.1.7rp" +#define PROGRAM_VERSION_MAINTENANCE 8 +#define PROGRAM_VERSION_STRING "2.1.8rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,1,7\0" +#define RESOURCE_VERSION_STRING "2,1,8\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 6c7b2c8f3993b722f29f88bc8322b0950e1fc5c4 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 4 May 2017 19:06:09 +0100 Subject: [PATCH 084/603] update default image scale value in documentation - #126 --- THEMES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/THEMES.md b/THEMES.md index a361cfca67..1c42102c3f 100644 --- a/THEMES.md +++ b/THEMES.md @@ -562,7 +562,7 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice * `logoSize` - type: NORMALIZED_PAIR. Default is "0.25 0.155" * `logoScale` - type: FLOAT. * Selected logo is increased in size by this scale - * Default is 1.5 + * Default is 1.2 * `maxLogoCount` - type: FLOAT. * Sets the number of logos to display in the carousel. * Default is 3 From 6178e8f9818092c4b5cf18b6b564088052549116 Mon Sep 17 00:00:00 2001 From: ottopower Date: Wed, 10 May 2017 01:31:30 +0200 Subject: [PATCH 085/603] Update GamesDBScraper.cpp --- es-app/src/scrapers/GamesDBScraper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 0584474414..b348fabad1 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -56,7 +56,7 @@ const std::map gamesdb_platformid_map = boost::assign:: (PLAYSTATION_3, "Sony Playstation 3") (PLAYSTATION_4, "Sony Playstation 4") (PLAYSTATION_VITA, "Sony Playstation Vita") - (PLAYSTATION_PORTABLE, "Sony PSP") + (PLAYSTATION_PORTABLE, "Sony Playstation Portable") (SUPER_NINTENDO, "Super Nintendo (SNES)") (TURBOGRAFX_16, "TurboGrafx 16") (WONDERSWAN, "WonderSwan") From 4e5c1ce49e320dd5e1e8b979adce654d5cc49185 Mon Sep 17 00:00:00 2001 From: pjft Date: Wed, 17 May 2017 13:01:15 +0100 Subject: [PATCH 086/603] Changes to mitigate white flashes ES navigation - Set default GL clear color to black, rather than white - Revert changes to ImageComponent intialization that cause white flashes - Increased ALSA buffer to prevent buffer underruns which stall CPU momentarily - Improved carousel texture buffering based on navigation direction and speed --- es-app/src/views/SystemView.cpp | 21 ++++++++++++++++----- es-core/src/AudioManager.cpp | 2 +- es-core/src/Renderer_init_sdlgl.cpp | 2 +- es-core/src/components/IList.h | 7 ++++++- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 9794ea91ab..06668796af 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -9,6 +9,10 @@ #include "Settings.h" #include "Util.h" +// buffer values for scrolling velocity (left, stopped, right) +const int logoBuffersLeft[] = { -5, -2, -1 }; +const int logoBuffersRight[] = { 1, 2, 5 }; + SystemView::SystemView(Window* window) : IList(window, LIST_SCROLL_STYLE_SLOW, LIST_ALWAYS_LOOP), mViewNeedsReload(true), mSystemInfo(window, "SYSTEM INFO", Font::get(FONT_SIZE_SMALL), 0x33333300, ALIGN_CENTER) @@ -39,14 +43,14 @@ void SystemView::populate() // make logo if(theme->getElement("system", "logo", "image")) { - ImageComponent* logo = new ImageComponent(mWindow); + ImageComponent* logo = new ImageComponent(mWindow, false, false); logo->setMaxSize(Eigen::Vector2f(mCarousel.logoSize.x(), mCarousel.logoSize.y())); logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); logo->setPosition((mCarousel.logoSize.x() - logo->getSize().x()) / 2, (mCarousel.logoSize.y() - logo->getSize().y()) / 2); // center e.data.logo = std::shared_ptr(logo); - ImageComponent* logoSelected = new ImageComponent(mWindow); + ImageComponent* logoSelected = new ImageComponent(mWindow, false, false); logoSelected->setMaxSize(Eigen::Vector2f(mCarousel.logoSize.x() * mCarousel.logoScale, mCarousel.logoSize.y() * mCarousel.logoScale)); logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); logoSelected->setPosition((mCarousel.logoSize.x() - logoSelected->getSize().x()) / 2, @@ -364,9 +368,12 @@ void SystemView::renderCarousel(const Eigen::Affine3f& trans) Eigen::Affine3f logoTrans = trans; int center = (int)(mCamOffset); - int logoCount = std::min(mCarousel.maxLogoCount, (int)mEntries.size()) + 2; + int logoCount = std::min(mCarousel.maxLogoCount, (int)mEntries.size()); - for (int i = center - logoCount / 2; i < center + logoCount / 2 + 1; i++) + // Adding texture loading buffers depending on scrolling speed and status + int bufferIndex = getScrollingVelocity() + 1; + + for (int i = center - logoCount / 2 + logoBuffersLeft[bufferIndex]; i <= center + logoCount / 2 + logoBuffersRight[bufferIndex]; i++) { int index = i; while (index < 0) @@ -402,7 +409,11 @@ void SystemView::renderExtras(const Eigen::Affine3f& trans) { Eigen::Affine3f extrasTrans = trans; int extrasCenter = (int)mExtrasCamOffset; - for (int i = extrasCenter - 1; i < extrasCenter + 2; i++) + + // Adding texture loading buffers depending on scrolling speed and status + int bufferIndex = getScrollingVelocity() + 1; + + for (int i = extrasCenter + logoBuffersLeft[bufferIndex]; i <= extrasCenter + logoBuffersRight[bufferIndex]; i++) { int index = i; while (index < 0) diff --git a/es-core/src/AudioManager.cpp b/es-core/src/AudioManager.cpp index c75d3c4caa..cbc0821ed6 100644 --- a/es-core/src/AudioManager.cpp +++ b/es-core/src/AudioManager.cpp @@ -89,7 +89,7 @@ void AudioManager::init() sAudioFormat.freq = 44100; sAudioFormat.format = AUDIO_S16; sAudioFormat.channels = 2; - sAudioFormat.samples = 1024; + sAudioFormat.samples = 4096; sAudioFormat.callback = mixAudio; sAudioFormat.userdata = NULL; diff --git a/es-core/src/Renderer_init_sdlgl.cpp b/es-core/src/Renderer_init_sdlgl.cpp index ab0bfb56a4..b34e066646 100644 --- a/es-core/src/Renderer_init_sdlgl.cpp +++ b/es-core/src/Renderer_init_sdlgl.cpp @@ -151,7 +151,7 @@ namespace Renderer glMatrixMode(GL_PROJECTION); glOrtho(0, display_width, display_height, 0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); - glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); return true; } diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index ede3360a9d..5543fae067 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -44,7 +44,7 @@ const ScrollTierList LIST_SCROLL_STYLE_QUICK = { 4, QUICK_SCROLL_TIERS }; const ScrollTier SLOW_SCROLL_TIERS[] = { {500, 500}, - {0, 150} + {0, 200} }; const ScrollTierList LIST_SCROLL_STYLE_SLOW = { 2, SLOW_SCROLL_TIERS }; @@ -100,6 +100,11 @@ class IList : public GuiComponent return (mScrollVelocity != 0 && mScrollTier > 0); } + int getScrollingVelocity() + { + return mScrollVelocity; + } + void stopScrolling() { listInput(0); From 80526c777eeeff081fd08abfd10ac5de2ff7fb59 Mon Sep 17 00:00:00 2001 From: pjft Date: Thu, 18 May 2017 11:16:57 +0100 Subject: [PATCH 087/603] Fixing whitespaces and indentation (tabs) --- es-app/CMakeLists.txt | 2 +- es-app/src/FileData.cpp | 6 +- es-app/src/FileData.h | 6 +- es-app/src/FileFilterIndex.cpp | 155 +++++++++--------- es-app/src/FileFilterIndex.h | 4 +- es-app/src/Gamelist.cpp | 8 +- es-app/src/SystemData.cpp | 8 +- es-app/src/SystemData.h | 6 +- es-app/src/guis/GuiGamelistFilter.cpp | 16 +- es-app/src/guis/GuiGamelistFilter.h | 2 +- es-app/src/guis/GuiGamelistOptions.cpp | 14 +- es-app/src/guis/GuiGamelistOptions.h | 4 +- es-app/src/guis/GuiMetaDataEd.cpp | 20 +-- es-app/src/views/ViewController.cpp | 12 +- .../src/views/gamelist/BasicGameListView.cpp | 2 +- .../views/gamelist/ISimpleGameListView.cpp | 6 +- .../src/views/gamelist/VideoGameListView.cpp | 16 +- es-core/src/components/ComponentList.cpp | 14 +- es-core/src/components/OptionListComponent.h | 12 +- 19 files changed, 160 insertions(+), 153 deletions(-) diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 1ae077006b..1b062b6928 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -108,7 +108,7 @@ target_link_libraries(emulationstation ${COMMON_LIBRARIES} es-core) # special properties for Windows builds if(MSVC) - # Always compile with the "WINDOWS" subsystem to avoid console window flashing at startup + # Always compile with the "WINDOWS" subsystem to avoid console window flashing at startup # when --debug is not set (see es-core/src/main.cpp for explanation). # The console will still be shown if launched with --debug. # Note that up to CMake 2.8.10 this feature is broken: http://public.kitware.com/Bug/view.php?id=12566 diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 53cae33a36..54e6f38563 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -82,7 +82,7 @@ const std::string& FileData::getThumbnailPath() const } const std::vector& FileData::getChildrenListToDisplay() { - + FileFilterIndex* idx = mSystem->getIndex(); if (idx->isFiltered()) { mFilteredChildren.clear(); @@ -95,7 +95,7 @@ const std::vector& FileData::getChildrenListToDisplay() { return mFilteredChildren; } - else + else { return mChildren; } @@ -123,7 +123,7 @@ std::vector FileData::getFilesRecursive(unsigned int typeMask, bool d if (!displayedOnly || !idx->isFiltered() || idx->showFile(*it)) out.push_back(*it); } - + if((*it)->getChildren().size() > 0) { std::vector subchildren = (*it)->getFilesRecursive(typeMask, displayedOnly); diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 3dd3e059c6..fbc53738e7 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -44,13 +44,13 @@ class FileData inline const std::unordered_map& getChildrenByFilename() const { return mChildrenByFilename; } inline const std::vector& getChildren() const { return mChildren; } inline SystemData* getSystem() const { return mSystem; } - + virtual const std::string& getThumbnailPath() const; virtual const std::string& getVideoPath() const; virtual const std::string& getMarqueePath() const; const std::vector& getChildrenListToDisplay(); - std::vector getFilesRecursive(unsigned int typeMask, bool displayedOnly = false) const; + std::vector getFilesRecursive(unsigned int typeMask, bool displayedOnly = false) const; void addChild(FileData* file); // Error if mType != FOLDER void removeChild(FileData* file); //Error if mType != FOLDER @@ -70,7 +70,7 @@ class FileData bool ascending; std::string description; - SortType(ComparisonFunction* sortFunction, bool sortAscending, const std::string & sortDescription) + SortType(ComparisonFunction* sortFunction, bool sortAscending, const std::string & sortDescription) : comparisonFunction(sortFunction), ascending(sortAscending), description(sortDescription) {} }; diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index a02e22d18d..5fe6a94c3b 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -3,7 +3,7 @@ #define UNKNOWN_LABEL "UNKNOWN" #define INCLUDE_UNKNOWN false; -FileFilterIndex::FileFilterIndex() +FileFilterIndex::FileFilterIndex() : filterByGenre(false), filterByPlayers(false), filterByPubDev(false), filterByRatings(false) { FilterDataDecl filterDecls[] = { @@ -26,7 +26,7 @@ FileFilterIndex::~FileFilterIndex() } -std::vector& FileFilterIndex::getFilterDataDecls() +std::vector& FileFilterIndex::getFilterDataDecls() { return filterDataDecl; } @@ -34,7 +34,7 @@ std::vector& FileFilterIndex::getFilterDataDecls() std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary) { std::string key = ""; - switch(type) + switch(type) { case GENRE_FILTER: { @@ -42,24 +42,24 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ boost::trim(key); if (getSecondary && !key.empty()) { std::istringstream f(key); - std::string newKey; - getline(f, newKey, '/'); - if (!newKey.empty() && newKey != key) - { - key = newKey; - } - else - { - key = std::string(); - } - } + std::string newKey; + getline(f, newKey, '/'); + if (!newKey.empty() && newKey != key) + { + key = newKey; + } + else + { + key = std::string(); + } + } break; } case PLAYER_FILTER: { if (getSecondary) break; - + key = game->metadata.get("players"); break; } @@ -77,8 +77,8 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ case RATINGS_FILTER: { int ratingNumber = 0; - if (!getSecondary) - { + if (!getSecondary) + { std::string ratingString = game->metadata.get("rating"); if (!ratingString.empty()) { try { @@ -87,11 +87,11 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ ratingNumber = 0; key = std::to_string(ratingNumber) + " STARS"; - } - catch (int e) + } + catch (int e) { LOG(LogError) << "Error parsing Rating (invalid value, expected decimal): " << ratingString; - } + } } } break; @@ -120,7 +120,7 @@ void FileFilterIndex::removeFromIndex(FileData* game) manageRatingsEntryInIndex(game, true); } -void FileFilterIndex::setFilter(FilterIndexType type, std::vector* values) +void FileFilterIndex::setFilter(FilterIndexType type, std::vector* values) { // test if it exists before setting if(type == NONE) @@ -128,7 +128,7 @@ void FileFilterIndex::setFilter(FilterIndexType type, std::vector* clearAllFilters(); } else - { + { for (std::vector::iterator it = filterDataDecl.begin(); it != filterDataDecl.end(); ++it ) { if ((*it).type == type) { @@ -136,20 +136,21 @@ void FileFilterIndex::setFilter(FilterIndexType type, std::vector* *(filterData.filteredByRef) = values->size() > 0; filterData.currentFilteredKeys->clear(); for (std::vector::iterator vit = values->begin(); vit != values->end(); ++vit ) { - // check if exists - if (filterData.allIndexKeys->find(*vit) != filterData.allIndexKeys->end()) { - filterData.currentFilteredKeys->push_back(std::string(*vit)); - } - } + // check if exists + if (filterData.allIndexKeys->find(*vit) != filterData.allIndexKeys->end()) { + filterData.currentFilteredKeys->push_back(std::string(*vit)); + } + } } } } return; } -void FileFilterIndex::clearAllFilters() +void FileFilterIndex::clearAllFilters() { - for (std::vector::iterator it = filterDataDecl.begin(); it != filterDataDecl.end(); ++it ) { + for (std::vector::iterator it = filterDataDecl.begin(); it != filterDataDecl.end(); ++it ) + { FilterDataDecl filterData = (*it); *(filterData.filteredByRef) = false; filterData.currentFilteredKeys->clear(); @@ -157,36 +158,36 @@ void FileFilterIndex::clearAllFilters() return; } -void FileFilterIndex::debugPrintIndexes() +void FileFilterIndex::debugPrintIndexes() { LOG(LogInfo) << "Printing Indexes..."; for (auto x: playersIndexAllKeys) { - LOG(LogInfo) << "Multiplayer Index: " << x.first << ": " << x.second; + LOG(LogInfo) << "Multiplayer Index: " << x.first << ": " << x.second; } for (auto x: genreIndexAllKeys) { - LOG(LogInfo) << "Genre Index: " << x.first << ": " << x.second; + LOG(LogInfo) << "Genre Index: " << x.first << ": " << x.second; } for (auto x: ratingsIndexAllKeys) { - LOG(LogInfo) << "Ratings Index: " << x.first << ": " << x.second; + LOG(LogInfo) << "Ratings Index: " << x.first << ": " << x.second; } for (auto x: pubDevIndexAllKeys) { - LOG(LogInfo) << "PubDev Index: " << x.first << ": " << x.second; + LOG(LogInfo) << "PubDev Index: " << x.first << ": " << x.second; } } bool FileFilterIndex::showFile(FileData* game) -{ +{ // this shouldn't happen, but just in case let's get it out of the way if (!isFiltered()) return true; // if folder, needs further inspection - i.e. see if folder contains at least one element // that should be shown - if (game->getType() == FOLDER) { + if (game->getType() == FOLDER) { std::vector children = game->getChildren(); // iterate through all of the children, until there's a match - - for (std::vector::iterator it = children.begin(); it != children.end(); ++it ) { + + for (std::vector::iterator it = children.begin(); it != children.end(); ++it ) { if (showFile(*it)) { return true; @@ -199,47 +200,53 @@ bool FileFilterIndex::showFile(FileData* game) for (std::vector::iterator it = filterDataDecl.begin(); it != filterDataDecl.end(); ++it ) { FilterDataDecl filterData = (*it); - if(*(filterData.filteredByRef)) { + if(*(filterData.filteredByRef)) + { // try to find a match - std::string key = getIndexableKey(game, filterData.type, false); - keepGoing = isKeyBeingFilteredBy(key, filterData.type); + std::string key = getIndexableKey(game, filterData.type, false); + keepGoing = isKeyBeingFilteredBy(key, filterData.type); // if we didn't find a match, try for secondary keys - i.e. publisher and dev, or first genre - if (!keepGoing) { - if (!filterData.hasSecondaryKey) - { - return false; - } - std::string secKey = getIndexableKey(game, filterData.type, true); - if (secKey != UNKNOWN_LABEL) - { - keepGoing = isKeyBeingFilteredBy(secKey, filterData.type); - } - } - // if still nothing, then it's not a match - if (!keepGoing) + if (!keepGoing) + { + if (!filterData.hasSecondaryKey) + { + return false; + } + std::string secKey = getIndexableKey(game, filterData.type, true); + if (secKey != UNKNOWN_LABEL) + { + keepGoing = isKeyBeingFilteredBy(secKey, filterData.type); + } + } + // if still nothing, then it's not a match + if (!keepGoing) return false; - + } - + } return keepGoing; } -bool FileFilterIndex::isKeyBeingFilteredBy(std::string key, FilterIndexType type) { +bool FileFilterIndex::isKeyBeingFilteredBy(std::string key, FilterIndexType type) +{ const FilterIndexType filterTypes[4] = { PLAYER_FILTER, RATINGS_FILTER, GENRE_FILTER, PUBDEV_FILTER }; std::vector filterKeysList[4] = { playersIndexFilteredKeys, ratingsIndexFilteredKeys, genreIndexFilteredKeys, pubDevIndexFilteredKeys }; - for (int i = 0; i < 4; i++) { - if (filterTypes[i] == type) { - for (std::vector::iterator it = filterKeysList[i].begin(); it != filterKeysList[i].end(); ++it ) { - if (key == (*it)) + for (int i = 0; i < 4; i++) + { + if (filterTypes[i] == type) + { + for (std::vector::iterator it = filterKeysList[i].begin(); it != filterKeysList[i].end(); ++it ) + { + if (key == (*it)) { return true; } - } - return false; + } + return false; } } @@ -258,7 +265,7 @@ void FileFilterIndex::manageGenreEntryInIndex(FileData* game, bool remove) if (!includeUnknown && (key == UNKNOWN_LABEL || key == "BIOS")) { // no valid genre info found return; - } + } manageIndexEntry(&genreIndexAllKeys, key, remove); @@ -279,7 +286,7 @@ void FileFilterIndex::managePlayerEntryInIndex(FileData* game, bool remove) if (!includeUnknown && key == UNKNOWN_LABEL) { // no valid player info found return; - } + } manageIndexEntry(&playersIndexAllKeys, key, remove); } @@ -304,13 +311,13 @@ void FileFilterIndex::managePubDevEntryInIndex(FileData* game, bool remove) if (!includeUnknown && unknownDev && unknownPub) { // no valid rating info found return; - } + } if (unknownDev && unknownPub) { // if no info at all manageIndexEntry(&pubDevIndexAllKeys, pub, remove); } - else + else { if (!unknownDev) { // if no info at all @@ -333,7 +340,7 @@ void FileFilterIndex::manageRatingsEntryInIndex(FileData* game, bool remove) if (!includeUnknown && key == UNKNOWN_LABEL) { // no valid rating info found return; - } + } manageIndexEntry(&ratingsIndexAllKeys, key, remove); } @@ -348,7 +355,7 @@ void FileFilterIndex::manageIndexEntry(std::map* index, std::s { // this shouldn't happen LOG(LogError) << "Couldn't find entry in index! " << key; - } + } else { (index->at(key))--; @@ -356,22 +363,22 @@ void FileFilterIndex::manageIndexEntry(std::map* index, std::s index->erase(key); } } - } - else + } + else { // adding entry if (index->find(key) == index->end()) { (*index)[key] = 1; - } + } else { (index->at(key))++; } - } + } } void FileFilterIndex::clearIndex(std::map indexMap) { - indexMap.clear(); + indexMap.clear(); } \ No newline at end of file diff --git a/es-app/src/FileFilterIndex.h b/es-app/src/FileFilterIndex.h index fffdaccf2d..7402c1e0ec 100644 --- a/es-app/src/FileFilterIndex.h +++ b/es-app/src/FileFilterIndex.h @@ -38,7 +38,7 @@ class FileFilterIndex void addToIndex(FileData* game); void removeFromIndex(FileData* game); void setFilter(FilterIndexType type, std::vector* values); - void clearAllFilters(); + void clearAllFilters(); void debugPrintIndexes(); bool showFile(FileData* game); bool isFiltered() { return (filterByGenre || filterByPlayers || filterByPubDev || filterByRatings); }; @@ -49,7 +49,7 @@ class FileFilterIndex private: std::vector filterDataDecl; std::string getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary); - + void manageGenreEntryInIndex(FileData* game, bool remove = false); void managePlayerEntryInIndex(FileData* game, bool remove = false); void managePubDevEntryInIndex(FileData* game, bool remove = false); diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 99ecad3b16..b6da7018a6 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -68,7 +68,7 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa LOG(LogWarning) << "gameList: folder doesn't already exist, won't create"; return NULL; } - + // create missing folder FileData* folder = new FileData(FOLDER, treeNode->getPath().stem() / *path_it, system); treeNode->addChild(folder); @@ -118,7 +118,7 @@ void parseGamelist(SystemData* system) for(pugi::xml_node fileNode = root.child(tag); fileNode; fileNode = fileNode.next_sibling(tag)) { fs::path path = resolvePath(fileNode.child("path").text().get(), relativeTo, false); - + if(!trustGamelist && !boost::filesystem::exists(path)) { LOG(LogWarning) << "File \"" << path << "\" does not exist! Ignoring."; @@ -160,7 +160,7 @@ void addFileDataNode(pugi::xml_node& parent, const FileData* file, const char* t //write metadata file->metadata.appendToXML(newNode, true, system->getStartPath()); - + if(newNode.children().begin() == newNode.child("name") //first element is name && ++newNode.children().begin() == newNode.children().end() //theres only one element && newNode.child("name").text().get() == file->getDisplayName()) //the name is the default @@ -194,7 +194,7 @@ void updateGamelist(SystemData* system) { //parse an existing file first pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); - + if(!result) { LOG(LogError) << "Error parsing XML file \"" << xmlReadPath << "\"!\n " << result.description(); diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index a5f6429899..41efa64cb9 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -17,7 +17,7 @@ std::vector SystemData::sSystemVector; namespace fs = boost::filesystem; -SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, +SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, const std::string& command, const std::vector& platformIds, const std::string& themeFolder) { mName = name; @@ -70,7 +70,7 @@ std::string strreplace(std::string str, const std::string& replace, const std::s size_t pos; while((pos = str.find(replace)) != std::string::npos) str = str.replace(pos, replace.length(), with.c_str(), with.length()); - + return str; } @@ -182,7 +182,7 @@ void SystemData::populateFolder(FileData* folder) //this is a little complicated because we allow a list of extensions to be defined (delimited with a space) //we first get the extension of the file itself: extension = filePath.extension().string(); - + //fyi, folders *can* also match the extension and be added as games - this is mostly just to support higan //see issue #75: https://github.com/Aloshi/EmulationStation/issues/75 @@ -283,7 +283,7 @@ bool SystemData::loadConfig() { const char* str = it->c_str(); PlatformIds::PlatformId platformId = PlatformIds::getPlatformId(str); - + if(platformId == PlatformIds::PLATFORM_IGNORE) { // when platform is ignore, do not allow other platforms diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index 2e332f9add..7916f18258 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -12,7 +12,7 @@ class SystemData { public: - SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, + SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, const std::string& command, const std::vector& platformIds, const std::string& themeFolder); ~SystemData(); @@ -31,7 +31,7 @@ class SystemData std::string getGamelistPath(bool forWrite) const; bool hasGamelist() const; std::string getThemePath() const; - + unsigned int getGameCount() const; unsigned int getDisplayedGameCount() const; @@ -46,7 +46,7 @@ class SystemData inline std::vector::const_iterator getIterator() const { return std::find(sSystemVector.begin(), sSystemVector.end(), this); }; inline std::vector::const_reverse_iterator getRevIterator() const { return std::find(sSystemVector.rbegin(), sSystemVector.rend(), this); }; - + inline SystemData* getNext() const { auto it = getIterator(); diff --git a/es-app/src/guis/GuiGamelistFilter.cpp b/es-app/src/guis/GuiGamelistFilter.cpp index 1112b2826a..0ecb857108 100644 --- a/es-app/src/guis/GuiGamelistFilter.cpp +++ b/es-app/src/guis/GuiGamelistFilter.cpp @@ -10,11 +10,11 @@ GuiGamelistFilter::GuiGamelistFilter(Window* window, SystemData* system) : GuiCo initializeMenu(); } -void GuiGamelistFilter::initializeMenu() +void GuiGamelistFilter::initializeMenu() { addChild(&mMenu); - // get filters from system + // get filters from system mFilterIndex = mSystem->getIndex(); @@ -45,10 +45,10 @@ void GuiGamelistFilter::resetAllFilters() GuiGamelistFilter::~GuiGamelistFilter() { - mFilterOptions.clear(); + mFilterOptions.clear(); } -void GuiGamelistFilter::addFiltersToMenu() +void GuiGamelistFilter::addFiltersToMenu() { std::vector decls = mFilterIndex->getFilterDataDecls(); for (std::vector::iterator it = decls.begin(); it != decls.end(); ++it ) { @@ -59,9 +59,9 @@ void GuiGamelistFilter::addFiltersToMenu() std::string menuLabel = (*it).menuLabel; // text to show in menu std::shared_ptr< OptionListComponent > optionList; - + // add filters (with first one selected) - ComponentListRow row; + ComponentListRow row; // add genres optionList = std::make_shared< OptionListComponent >(mWindow, menuLabel, true); @@ -72,7 +72,7 @@ void GuiGamelistFilter::addFiltersToMenu() if (allKeys->size() > 0) mMenu.addWithLabel(menuLabel, optionList); - mFilterOptions[type] = optionList; + mFilterOptions[type] = optionList; } } @@ -86,7 +86,7 @@ void GuiGamelistFilter::applyFilters() } delete this; - + } bool GuiGamelistFilter::input(InputConfig* config, Input input) diff --git a/es-app/src/guis/GuiGamelistFilter.h b/es-app/src/guis/GuiGamelistFilter.h index 8462b0400d..990300a4af 100644 --- a/es-app/src/guis/GuiGamelistFilter.h +++ b/es-app/src/guis/GuiGamelistFilter.h @@ -25,7 +25,7 @@ class GuiGamelistFilter : public GuiComponent void applyFilters(); void resetAllFilters(); void addFiltersToMenu(); - + std::map >> mFilterOptions; MenuComponent mMenu; diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 4c65b9dfb7..0f38a932d7 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -3,7 +3,7 @@ #include "views/gamelist/IGameListView.h" #include "views/ViewController.h" -GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : GuiComponent(window), +GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : GuiComponent(window), mSystem(system), mMenu(window, "OPTIONS"), fromPlaceholder(false), mFiltersChanged(false) { addChild(&mMenu); @@ -95,8 +95,8 @@ GuiGamelistOptions::~GuiGamelistOptions() // notify that the root folder was sorted getGamelist()->onFileChanged(root, FILE_SORTED); - } - if (mFiltersChanged) + } + if (mFiltersChanged) { if (!fromPlaceholder) { FileData* root = getGamelist()->getCursor()->getSystem()->getRootFolder(); @@ -108,7 +108,7 @@ GuiGamelistOptions::~GuiGamelistOptions() // as we need to re-display the remaining elements for whatever new // game is selected ViewController::get()->reloadGameListView(mSystem); - } + } } } @@ -117,7 +117,7 @@ void GuiGamelistOptions::openGamelistFilter() mFiltersChanged = true; GuiGamelistFilter* ggf = new GuiGamelistFilter(mWindow, mSystem); mWindow->pushGui(ggf); -} +} void GuiGamelistOptions::openMetaDataEd() { @@ -140,7 +140,7 @@ void GuiGamelistOptions::openMetaDataEd() }; } - mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), + mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), std::bind(&IGameListView::onFileChanged, getGamelist(), file, FILE_METADATA_CHANGED), deleteBtnFunc)); } @@ -151,7 +151,7 @@ void GuiGamelistOptions::jumpToLetter() // this is a really shitty way to get a list of files const std::vector& files = gamelist->getCursor()->getParent()->getChildren(); - + long min = 0; long max = files.size() - 1; long mid = 0; diff --git a/es-app/src/guis/GuiGamelistOptions.h b/es-app/src/guis/GuiGamelistOptions.h index 151f4ab6cc..d856cd175c 100644 --- a/es-app/src/guis/GuiGamelistOptions.h +++ b/es-app/src/guis/GuiGamelistOptions.h @@ -19,7 +19,7 @@ class GuiGamelistOptions : public GuiComponent void openGamelistFilter(); void openMetaDataEd(); void jumpToLetter(); - + MenuComponent mMenu; typedef OptionListComponent LetterList; @@ -27,7 +27,7 @@ class GuiGamelistOptions : public GuiComponent typedef OptionListComponent SortList; std::shared_ptr mListSort; - + SystemData* mSystem; IGameListView* getGamelist(); bool fromPlaceholder; diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index 7630cb6a58..586b3279f2 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -15,24 +15,24 @@ using namespace Eigen; -GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams scraperParams, - const std::string& header, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), - mScraperParams(scraperParams), +GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams scraperParams, + const std::string& header, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), + mScraperParams(scraperParams), - mBackground(window, ":/frame.png"), + mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 3)), - mMetaDataDecl(mdd), - mMetaData(md), + mMetaDataDecl(mdd), + mMetaData(md), mSavedCallback(saveCallback), mDeleteFunc(deleteFunc) { addChild(&mBackground); addChild(&mGrid); mHeaderGrid = std::make_shared(mWindow, Vector2i(1, 5)); - + mTitle = std::make_shared(mWindow, "EDIT METADATA", Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); - mSubtitle = std::make_shared(mWindow, strToUpper(scraperParams.game->getPath().filename().generic_string()), + mSubtitle = std::make_shared(mWindow, strToUpper(scraperParams.game->getPath().filename().generic_string()), Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_CENTER); mHeaderGrid->setEntry(mTitle, Vector2i(0, 1), false, true); mHeaderGrid->setEntry(mSubtitle, Vector2i(0, 3), false, true); @@ -101,7 +101,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector // MD_STRING ed = std::make_shared(window, "", Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT), 0x777777FF, ALIGN_RIGHT); row.addElement(ed, true); - + auto spacer = std::make_shared(mWindow); spacer->setSize(Renderer::getScreenWidth() * 0.005f, 0); row.addElement(spacer, false); @@ -236,7 +236,7 @@ void GuiMetaDataEd::close(bool closeAllWindows) if(dirty) { // changes were made, ask if the user wants to save them - mWindow->pushGui(new GuiMsgBox(mWindow, + mWindow->pushGui(new GuiMsgBox(mWindow, "SAVE CHANGES?", "YES", [this, closeFunc] { save(); closeFunc(); }, "NO", closeFunc diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index fa07317b7b..fffed0a4f9 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -127,10 +127,10 @@ void ViewController::goToRandomGame() if ((*it)->getName() != "retropie") total += (*it)->getDisplayedGameCount(); } - + // get random number in range int target = std::round(((double)std::rand() / (double)RAND_MAX) * total); - + for (auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { if ((*it)->getName() != "retropie") @@ -153,7 +153,7 @@ void ViewController::goToRandomGame() void ViewController::playViewTransition() { Eigen::Vector3f target(Eigen::Vector3f::Identity()); - if(mCurrentView) + if(mCurrentView) target = mCurrentView->getPosition(); // no need to animate, we're not going anywhere (probably goToNextGamelist() or goToPrevGamelist() when there's only 1 system) @@ -238,7 +238,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) }); }else{ // move camera to zoom in on center + fade out, launch game, come back in - setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), 0, [this, origCamera, center, game] + setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), 0, [this, origCamera, center, game] { game->getSystem()->launchGame(mWindow, game); mCamera = origCamera; @@ -372,7 +372,7 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) // draw systemview getSystemListView()->render(trans); - + // draw gamelists for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) { @@ -477,7 +477,7 @@ std::vector ViewController::getHelpPrompts() std::vector prompts; if(!mCurrentView) return prompts; - + prompts = mCurrentView->getHelpPrompts(); prompts.push_back(HelpPrompt("start", "menu")); diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 23a39ead3c..54a8742c7e 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -80,7 +80,7 @@ void BasicGameListView::setCursor(FileData* cursor) tmp.push(ptr); ptr = ptr->getParent(); } - + // flip the stack and put it in mCursorStack mCursorStack = std::stack(); while(!tmp.empty()) diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index fa9b6944b1..a0029361f9 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -12,7 +12,7 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame mHeaderText.setSize(mSize.x(), 0); mHeaderText.setPosition(0, 0); mHeaderText.setAlignment(ALIGN_CENTER); - + mHeaderImage.setResize(0, mSize.y() * 0.185f); mHeaderImage.setOrigin(0.5f, 0.0f); mHeaderImage.setPosition(mSize.x() / 2, 0); @@ -51,7 +51,7 @@ void ISimpleGameListView::onFileChanged(FileData* file, FileChangeType change) populateList(cursor->getParent()->getChildrenListToDisplay()); setCursor(cursor); } - else + else { populateList(mRoot->getChildrenListToDisplay()); setCursor(cursor); @@ -77,7 +77,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) populateList(cursor->getChildrenListToDisplay()); } } - + return true; }else if(config->isMappedTo("b", input)) { diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 266225231b..eeefe643d6 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -6,17 +6,17 @@ #include VideoGameListView::VideoGameListView(Window* window, FileData* root) : - BasicGameListView(window, root), - mDescContainer(window), mDescription(window), + BasicGameListView(window, root), + mDescContainer(window), mDescription(window), mMarquee(window), mImage(window), mVideo(window), mVideoPlaying(false), - mLblRating(window), mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), + mLblRating(window), mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), mLblGenre(window), mLblPlayers(window), mLblLastPlayed(window), mLblPlayCount(window), - mRating(window), mReleaseDate(window), mDeveloper(window), mPublisher(window), + mRating(window), mReleaseDate(window), mDeveloper(window), mPublisher(window), mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window) { const float padding = 0.01f; @@ -151,7 +151,7 @@ void VideoGameListView::initMDLabels() const unsigned int rowCount = components.size() / 2; Vector3f start(mSize.x() * 0.01f, mSize.y() * 0.625f, 0.0f); - + const float colSize = (mSize.x() * 0.48f) / colCount; const float rowPadding = 0.01f * mSize.y(); @@ -266,13 +266,13 @@ void VideoGameListView::updateInfoPanel() mPublisher.setValue(file->metadata.get("publisher")); mGenre.setValue(file->metadata.get("genre")); mPlayers.setValue(file->metadata.get("players")); - + if(file->getType() == GAME) { mLastPlayed.setValue(file->metadata.get("lastplayed")); mPlayCount.setValue(file->metadata.get("playcount")); } - + fadingOut = false; } @@ -291,7 +291,7 @@ void VideoGameListView::updateInfoPanel() // then animate if reverse != fadingOut // an animation is not playing // then animate if opacity != our target opacity - if((comp->isAnimationPlaying(0) && comp->isAnimationReversed(0) != fadingOut) || + if((comp->isAnimationPlaying(0) && comp->isAnimationReversed(0) != fadingOut) || (!comp->isAnimationPlaying(0) && comp->getOpacity() != (fadingOut ? 0 : 255))) { auto func = [comp](float t) diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index f4a313c4d9..9abd1ef8c3 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -121,7 +121,7 @@ void ComponentList::onCursorChanged(const CursorState& state) { for(auto it = mEntries.begin(); it != mEntries.end(); it++) it->data.elements.back().component->onFocusLost(); - + mEntries.at(mCursor).data.elements.back().component->onFocusGained(); } @@ -167,7 +167,7 @@ void ComponentList::render(const Eigen::Affine3f& parentTrans) // clip everything to be inside our bounds Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); - Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), + Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), Eigen::Vector2i((int)round(dim.x()), (int)round(dim.y() + 1))); // scroll the camera @@ -201,20 +201,20 @@ void ComponentList::render(const Eigen::Affine3f& parentTrans) // need a function that goes roughly 0x777777 -> 0xFFFFFF // and 0xFFFFFF -> 0x777777 // (1 - dst) + 0x77 - + const float selectedRowHeight = getRowHeight(mEntries.at(mCursor).data); Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0xFFFFFFFF, GL_ONE_MINUS_DST_COLOR, GL_ZERO); Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0x777777FF, GL_ONE, GL_ONE); - + // hack to draw 2px dark on left/right of the bar Renderer::drawRect(0.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF); Renderer::drawRect(mSize.x() - 2.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF); for(auto it = drawAfterCursor.begin(); it != drawAfterCursor.end(); it++) (*it)->render(trans); - + // reset matrix if one of these components changed it if(drawAfterCursor.size()) Renderer::setMatrix(trans); @@ -335,7 +335,7 @@ std::vector ComponentList::getHelpPrompts() bool ComponentList::moveCursor(int amt) { - bool ret = listInput(amt); - listInput(0); + bool ret = listInput(amt); + listInput(0); return ret; } diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index 45d12f3363..9f3eec5215 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -138,7 +138,7 @@ class OptionListComponent : public GuiComponent }; public: - OptionListComponent(Window* window, const std::string& name, bool multiSelect = false) : GuiComponent(window), mMultiSelect(multiSelect), mName(name), + OptionListComponent(Window* window, const std::string& name, bool multiSelect = false) : GuiComponent(window), mMultiSelect(multiSelect), mName(name), mText(window), mLeftArrow(window), mRightArrow(window) { auto font = Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT); @@ -251,20 +251,20 @@ class OptionListComponent : public GuiComponent onSelectedChanged(); } - void selectAll() + void selectAll() { for(unsigned int i = 0; i < mEntries.size(); i++) { - mEntries.at(i).selected = true; + mEntries.at(i).selected = true; } onSelectedChanged(); } - void selectNone() + void selectNone() { for(unsigned int i = 0; i < mEntries.size(); i++) { - mEntries.at(i).selected = false; + mEntries.at(i).selected = false; } onSelectedChanged(); } @@ -322,7 +322,7 @@ class OptionListComponent : public GuiComponent std::vector prompts; if(!mMultiSelect) prompts.push_back(HelpPrompt("left/right", "change")); - + prompts.push_back(HelpPrompt("a", "select")); return prompts; } From 354d3b9decf3b5ab4b539f45fc2beaacb9f45496 Mon Sep 17 00:00:00 2001 From: jrassa Date: Sat, 22 Apr 2017 10:15:16 -0400 Subject: [PATCH 088/603] implement z-index support for themeing system view and gamelist views --- THEMES.md | 80 ++++++++++++++++--- es-app/src/views/SystemView.cpp | 58 ++++++++++++-- es-app/src/views/SystemView.h | 7 +- .../src/views/gamelist/BasicGameListView.cpp | 3 + .../views/gamelist/DetailedGameListView.cpp | 8 +- .../views/gamelist/ISimpleGameListView.cpp | 24 +++++- .../src/views/gamelist/ISimpleGameListView.h | 4 +- .../src/views/gamelist/VideoGameListView.cpp | 27 +++---- es-core/src/GuiComponent.cpp | 32 ++++++++ es-core/src/GuiComponent.h | 10 +++ es-core/src/ThemeData.cpp | 46 +++++------ es-core/src/ThemeData.h | 14 +--- es-core/src/components/ImageComponent.cpp | 5 ++ es-core/src/components/VideoComponent.cpp | 5 ++ 14 files changed, 239 insertions(+), 84 deletions(-) diff --git a/THEMES.md b/THEMES.md index 1c42102c3f..6b7db4714e 100644 --- a/THEMES.md +++ b/THEMES.md @@ -265,6 +265,48 @@ Which is equivalent to: Just remember, *this only works if the elements have the same type!* +### Element rendering order with z-index + +You can now change the order in which elements are rendered by setting `zIndex` values. Default values correspond to the default rendering order while allowing elements to easily be shifted without having to set `zIndex` values for every element. Elements will be rendered in order from smallest z-index to largest. + +#### Defaults + +##### system +* Extra Elements `extra="true"` - 10 +* `carousel name="systemcarousel"` - 40 +* `text name="systemInfo"` - 50 + +##### basic, detailed, video +* `image name="background"` - 0 +* Extra Elements `extra="true"` - 10 +* `textlist name="gamelist"` - 20 +* Media + * `image name="md_image"` - 30 + * `video name="md_video"` - 30 + * `image name="md_marquee"` - 35 +* Metadata - 40 + * Labels + * `text name="md_lbl_rating"` + * `text name="md_lbl_releasedate"` + * `text name="md_lbl_developer"` + * `text name="md_lbl_publisher"` + * `text name="md_lbl_genre"` + * `text name="md_lbl_players"` + * `text name="md_lbl_lastplayed"` + * `text name="md_lbl_playcount"` + * Values + * `rating name="md_rating"` + * `datetime name="md_releasedate"` + * `text name="md_developer"` + * `text name="md_publisher"` + * `text name="md_genre"` + * `text name="md_players"` + * `datetime name="md_lastplayed"` + * `text name="md_playcount"` + * `text name="md_description"` +* System Logo/Text - 50 + * `text name="logoText"` + * `image name="logo"` Reference ========= @@ -311,7 +353,7 @@ Reference * Values * All values will follow to the right of their labels if a position isn't specified. - * `image name="md_image"` - POSITION | SIZE + * `image name="md_image"` - POSITION | SIZE | Z_INDEX - Path is the "image" metadata for the currently selected game. * `rating name="md_rating"` - ALL - The "rating" metadata. @@ -329,7 +371,7 @@ Reference - The "lastplayed" metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago"). * `text name="md_playcount"` - ALL - The "playcount" metadata (number of times the game has been played). - * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR + * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR | Z_INDEX - Text is the "desc" metadata. If no `pos`/`size` is specified, will move and resize to fit under the lowest label and reach to the bottom of the screen. #### video @@ -358,11 +400,11 @@ Reference * Values * All values will follow to the right of their labels if a position isn't specified. - * `image name="md_image"` - POSITION | SIZE + * `image name="md_image"` - POSITION | SIZE | Z_INDEX - Path is the "image" metadata for the currently selected game. - * `image name="md_marquee"` - POSITION | SIZE + * `image name="md_marquee"` - POSITION | SIZE | Z_INDEX - Path is the "marquee" metadata for the currently selected game. - * `video name="md_video"` - POSITION | SIZE + * `video name="md_video"` - POSITION | SIZE | Z_INDEX - Path is the "video" metadata for the currently selected game. * `rating name="md_rating"` - ALL - The "rating" metadata. @@ -380,7 +422,7 @@ Reference - The "lastplayed" metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago"). * `text name="md_playcount"` - ALL - The "playcount" metadata (number of times the game has been played). - * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR + * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR | Z_INDEX - Text is the "desc" metadata. If no `pos`/`size` is specified, will move and resize to fit under the lowest label and reach to the bottom of the screen. --- @@ -444,6 +486,8 @@ Can be created as an extra. - If true, the image will be tiled instead of stretched to fit its size. Useful for backgrounds. * `color` - type: COLOR. - Multiply each pixel's color by this color. For example, an all-white image with `FF0000` would become completely red. You can also control the transparency of an image with `FFFFFFAA` - keeping all the pixels their normal color and only affecting the alpha channel. +* `zIndex` - type: FLOAT. + - z-index value for component. Components will be rendered in order of z-index value from low to high. #### video @@ -462,6 +506,8 @@ Can be created as an extra. - If true, image will be shown when selected game does not have a video and no `default` video is configured. * `showSnapshotDelay` - type: BOOLEAN - If true, playing of video will be delayed for `delayed` seconds, when game is selected. +* `zIndex` - type: FLOAT. + - z-index value for component. Components will be rendered in order of z-index value from low to high. #### text @@ -484,6 +530,8 @@ Can be created as an extra. - Valid values are "left", "center", or "right". Controls alignment on the X axis. "center" will also align vertically. * `forceUppercase` - type: BOOLEAN. Draw text in uppercase. * `lineSpacing` - type: FLOAT. Controls the space between lines (as a multiple of font height). Default is 1.5. +* `zIndex` - type: FLOAT. + - z-index value for component. Components will be rendered in order of z-index value from low to high. #### textlist @@ -507,6 +555,8 @@ Can be created as an extra. - Horizontal offset for text from the alignment point. If `alignment` is "left", offsets the text to the right. If `alignment` is "right", offsets text to the left. No effect if `alignment` is "center". Given as a percentage of the element's parent's width (same unit as `size`'s X value). * `forceUppercase` - type: BOOLEAN. Draw text in uppercase. * `lineSpacing` - type: FLOAT. Controls the space between lines (as a multiple of font height). Default is 1.5. +* `zIndex` - type: FLOAT. + - z-index value for component. Components will be rendered in order of z-index value from low to high. #### ninepatch @@ -515,6 +565,8 @@ Can be created as an extra. * `path` - type: PATH. EmulationStation borrows the concept of "nine patches" from Android (or "9-Slices"). Currently the implementation is very simple and hard-coded to only use 48x48px images (16x16px for each "patch"). Check the `data/resources` directory for some examples (button.png, frame.png). +* `zIndex` - type: FLOAT. + - z-index value for component. Components will be rendered in order of z-index value from low to high. #### rating @@ -525,6 +577,8 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice - Path to the "filled star" image. Image must be square (width equals height). * `unfilledPath` - type: PATH. - Path to the "unfilled star" image. Image must be square (width equals height). +* `zIndex` - type: FLOAT. + - z-index value for component. Components will be rendered in order of z-index value from low to high. #### datetime @@ -552,20 +606,22 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice #### carousel * `type` - type: STRING. - * Accepted values are "HORIZONTAL" or "VERTICAL". Sets the scoll direction of the carousel. - * Default is "HORIZONTAL". + - Accepted values are "horizontal" or "vertical". Sets the scoll direction of the carousel. + - Default is "horizontal". * `size` - type: NORMALIZED_PAIR. Default is "1 0.2325" * `pos` - type: NORMALIZED_PAIR. Default is "0 0.38375". * `color` - type: COLOR. - * Controls the color of the carousel background. - * Default is FFFFFFD8 + - Controls the color of the carousel background. + - Default is FFFFFFD8 * `logoSize` - type: NORMALIZED_PAIR. Default is "0.25 0.155" * `logoScale` - type: FLOAT. * Selected logo is increased in size by this scale * Default is 1.2 * `maxLogoCount` - type: FLOAT. - * Sets the number of logos to display in the carousel. - * Default is 3 + - Sets the number of logos to display in the carousel. + - Default is 3 +* `zIndex` - type: FLOAT. + - z-index value for component. Components will be rendered in order of z-index value from low to high. The help system is a special element that displays a context-sensitive list of actions the user can take at any time. You should try and keep the position constant throughout every screen. Keep in mind the "default" settings (including position) are used whenever the user opens a menu. diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 06668796af..0b2a950c25 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -76,9 +76,18 @@ void SystemView::populate() e.data.logoSelected = std::shared_ptr(textSelected); } + // delete any existing extras + for (auto extra : e.data.backgroundExtras) + delete extra; + e.data.backgroundExtras.clear(); + // make background extras - e.data.backgroundExtras = std::shared_ptr(new ThemeExtras(mWindow)); - e.data.backgroundExtras->setExtras(ThemeData::makeExtras((*it)->getTheme(), "system", mWindow)); + e.data.backgroundExtras = ThemeData::makeExtras((*it)->getTheme(), "system", mWindow); + + // sort the extras by z-index + std:stable_sort(e.data.backgroundExtras.begin(), e.data.backgroundExtras.end(), [](GuiComponent* a, GuiComponent* b) { + return b->getZIndex() > a->getZIndex(); + }); this->add(e); } @@ -282,9 +291,27 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) Eigen::Affine3f trans = getTransform() * parentTrans; - renderExtras(trans); - renderCarousel(trans); - renderInfoBar(trans); + auto systemInfoZIndex = mSystemInfo.getZIndex(); + auto minMax = std::minmax(mCarousel.zIndex, systemInfoZIndex); + + renderExtras(trans, INT16_MIN, minMax.first); + renderFade(trans); + + if (mCarousel.zIndex > mSystemInfo.getZIndex()) { + renderInfoBar(trans); + } else { + renderCarousel(trans); + } + + renderExtras(trans, minMax.first, minMax.second); + + if (mCarousel.zIndex > mSystemInfo.getZIndex()) { + renderCarousel(trans); + } else { + renderInfoBar(trans); + } + + renderExtras(trans, minMax.second, INT16_MAX); } std::vector SystemView::getHelpPrompts() @@ -405,7 +432,7 @@ void SystemView::renderInfoBar(const Eigen::Affine3f& trans) } // Draw background extras -void SystemView::renderExtras(const Eigen::Affine3f& trans) +void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float upper) { Eigen::Affine3f extrasTrans = trans; int extrasCenter = (int)mExtrasCamOffset; @@ -425,10 +452,22 @@ void SystemView::renderExtras(const Eigen::Affine3f& trans) Eigen::Vector2i clipRect = Eigen::Vector2i((int)((i - mExtrasCamOffset) * mSize.x()), 0); Renderer::pushClipRect(clipRect, mSize.cast()); - mEntries.at(index).data.backgroundExtras->render(extrasTrans); + + SystemViewData data = mEntries.at(index).data; + for(unsigned int j = 0; j < data.backgroundExtras.size(); j++) + { + GuiComponent* extra = data.backgroundExtras[j]; + if (extra->getZIndex() >= lower && extra->getZIndex() < upper) { + extra->render(extrasTrans); + } + } + Renderer::popClipRect(); } +} +void SystemView::renderFade(const Eigen::Affine3f& trans) +{ // fade extras if necessary if (mExtrasFadeOpacity) { @@ -451,6 +490,7 @@ void SystemView::getDefaultElements(void) mCarousel.logoSize.x() = 0.25f * mSize.x(); mCarousel.logoSize.y() = 0.155f * mSize.y(); mCarousel.maxLogoCount = 3; + mCarousel.zIndex = 40; // System Info Bar mSystemInfo.setSize(mSize.x(), mSystemInfo.getFont()->getLetterHeight()*2.2f); @@ -459,6 +499,8 @@ void SystemView::getDefaultElements(void) mSystemInfo.setRenderBackground(true); mSystemInfo.setFont(Font::get((int)(0.035f * mSize.y()), Font::getDefaultPath())); mSystemInfo.setColor(0x000000FF); + mSystemInfo.setZIndex(50); + mSystemInfo.setDefaultZIndex(50); } void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) @@ -477,4 +519,6 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) mCarousel.logoSize = elem->get("logoSize").cwiseProduct(mSize); if (elem->has("maxLogoCount")) mCarousel.maxLogoCount = std::round(elem->get("maxLogoCount")); + if (elem->has("zIndex")) + mCarousel.zIndex = elem->get("zIndex"); } diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index 209c4b0e95..c766c5902b 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -20,7 +20,7 @@ struct SystemViewData { std::shared_ptr logo; std::shared_ptr logoSelected; - std::shared_ptr backgroundExtras; + std::vector backgroundExtras; }; struct SystemViewCarousel @@ -33,6 +33,7 @@ struct SystemViewCarousel unsigned int color; int maxLogoCount; // number of logos shown on the carousel Eigen::Vector2f logoSize; + float zIndex; }; class SystemView : public IList @@ -61,8 +62,10 @@ class SystemView : public IList void getCarouselFromTheme(const ThemeData::ThemeElement* elem); void renderCarousel(const Eigen::Affine3f& parentTrans); - void renderExtras(const Eigen::Affine3f& parentTrans); + void renderExtras(const Eigen::Affine3f& parentTrans, float lower, float upper); void renderInfoBar(const Eigen::Affine3f& trans); + void renderFade(const Eigen::Affine3f& trans); + SystemViewCarousel mCarousel; TextComponent mSystemInfo; diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 54a8742c7e..d7fe8ec2bf 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -12,6 +12,7 @@ BasicGameListView::BasicGameListView(Window* window, FileData* root) { mList.setSize(mSize.x(), mSize.y() * 0.8f); mList.setPosition(0, mSize.y() * 0.2f); + mList.setDefaultZIndex(20); addChild(&mList); populateList(root->getChildrenListToDisplay()); @@ -22,6 +23,8 @@ void BasicGameListView::onThemeChanged(const std::shared_ptr& theme) ISimpleGameListView::onThemeChanged(theme); using namespace ThemeFlags; mList.applyTheme(theme, getName(), "gamelist", ALL); + + sortChildren(); } void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index d042352bc1..460f608278 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -27,6 +27,7 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mImage.setOrigin(0.5f, 0.5f); mImage.setPosition(mSize.x() * 0.25f, mList.getPosition().y() + mSize.y() * 0.2125f); mImage.setMaxSize(mSize.x() * (0.50f - 2*padding), mSize.y() * 0.4f); + mImage.setDefaultZIndex(30); addChild(&mImage); // metadata labels + values @@ -59,6 +60,7 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.65f); mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), mSize.y() - mDescContainer.getPosition().y()); mDescContainer.setAutoScroll(true); + mDescContainer.setDefaultZIndex(40); addChild(&mDescContainer); mDescription.setFont(Font::get(FONT_SIZE_SMALL)); @@ -76,7 +78,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them BasicGameListView::onThemeChanged(theme); using namespace ThemeFlags; - mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE); + mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX); initMDLabels(); std::vector labels = getMDLabels(); @@ -105,9 +107,11 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them values[i]->applyTheme(theme, getName(), valElements[i], ALL ^ ThemeFlags::TEXT); } - mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE); + mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE | Z_INDEX); mDescription.setSize(mDescContainer.getSize().x(), 0); mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | TEXT)); + + sortChildren(); } void DetailedGameListView::initMDLabels() diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index a0029361f9..617b613504 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -6,22 +6,24 @@ #include "Settings.h" ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGameListView(window, root), - mHeaderText(window), mHeaderImage(window), mBackground(window), mThemeExtras(window) + mHeaderText(window), mHeaderImage(window), mBackground(window) { mHeaderText.setText("Logo Text"); mHeaderText.setSize(mSize.x(), 0); mHeaderText.setPosition(0, 0); mHeaderText.setAlignment(ALIGN_CENTER); - + mHeaderText.setDefaultZIndex(50); + mHeaderImage.setResize(0, mSize.y() * 0.185f); mHeaderImage.setOrigin(0.5f, 0.0f); mHeaderImage.setPosition(mSize.x() / 2, 0); + mHeaderImage.setDefaultZIndex(50); mBackground.setResize(mSize.x(), mSize.y()); + mBackground.setDefaultZIndex(0); addChild(&mHeaderText); addChild(&mBackground); - addChild(&mThemeExtras); } void ISimpleGameListView::onThemeChanged(const std::shared_ptr& theme) @@ -30,7 +32,21 @@ void ISimpleGameListView::onThemeChanged(const std::shared_ptr& theme mBackground.applyTheme(theme, getName(), "background", ALL); mHeaderImage.applyTheme(theme, getName(), "logo", ALL); mHeaderText.applyTheme(theme, getName(), "logoText", ALL); - mThemeExtras.setExtras(ThemeData::makeExtras(theme, getName(), mWindow)); + + // Remove old theme extras + for (auto extra : mThemeExtras) + { + removeChild(extra); + delete extra; + } + mThemeExtras.clear(); + + // Add new theme extras + mThemeExtras = ThemeData::makeExtras(theme, getName(), mWindow); + for (auto extra : mThemeExtras) + { + addChild(extra); + } if(mHeaderImage.hasImage()) { diff --git a/es-app/src/views/gamelist/ISimpleGameListView.h b/es-app/src/views/gamelist/ISimpleGameListView.h index 9022cde73e..ff405b42a7 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.h +++ b/es-app/src/views/gamelist/ISimpleGameListView.h @@ -31,8 +31,8 @@ class ISimpleGameListView : public IGameListView TextComponent mHeaderText; ImageComponent mHeaderImage; ImageComponent mBackground; - - ThemeExtras mThemeExtras; + + std::vector mThemeExtras; std::stack mCursorStack; }; diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index eeefe643d6..620c288f1b 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -30,6 +30,7 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : mMarquee.setOrigin(0.5f, 0.5f); mMarquee.setPosition(mSize.x() * 0.25f, mSize.y() * 0.10f); mMarquee.setMaxSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.18f); + mMarquee.setDefaultZIndex(35); addChild(&mMarquee); // Image @@ -37,25 +38,16 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : // Default to off the screen mImage.setPosition(2.0f, 2.0f); mImage.setMaxSize(1.0f, 1.0f); + mImage.setDefaultZIndex(30); addChild(&mImage); // video mVideo.setOrigin(0.5f, 0.5f); mVideo.setPosition(mSize.x() * 0.25f, mSize.y() * 0.4f); mVideo.setSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.4f); + mVideo.setDefaultZIndex(30); addChild(&mVideo); - // We want the video to be in front of the background but behind any 'extra' images - for (std::vector::iterator it = mChildren.begin(); it != mChildren.end(); ++it) - { - if (*it == &mThemeExtras) - { - mChildren.insert(it, &mVideo); - mChildren.pop_back(); - break; - } - } - // metadata labels + values mLblRating.setText("Rating: "); addChild(&mLblRating); @@ -86,6 +78,7 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.65f); mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), mSize.y() - mDescContainer.getPosition().y()); mDescContainer.setAutoScroll(true); + mDescContainer.setDefaultZIndex(40); addChild(&mDescContainer); mDescription.setFont(Font::get(FONT_SIZE_SMALL)); @@ -105,9 +98,9 @@ void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) BasicGameListView::onThemeChanged(theme); using namespace ThemeFlags; - mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE); - mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE); - mVideo.applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY); + mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE | Z_INDEX); + mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX); + mVideo.applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY | Z_INDEX); initMDLabels(); std::vector labels = getMDLabels(); @@ -136,9 +129,11 @@ void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) values[i]->applyTheme(theme, getName(), valElements[i], ALL ^ ThemeFlags::TEXT); } - mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE); + mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE | Z_INDEX); mDescription.setSize(mDescContainer.getSize().x(), 0); mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | TEXT)); + + sortChildren(); } void VideoGameListView::initMDLabels() @@ -170,6 +165,7 @@ void VideoGameListView::initMDLabels() components[i]->setFont(Font::get(FONT_SIZE_SMALL)); components[i]->setPosition(pos); + components[i]->setDefaultZIndex(40); } } @@ -198,6 +194,7 @@ void VideoGameListView::initMDValues() const float heightDiff = (labels[i]->getSize().y() - values[i]->getSize().y()) / 2; values[i]->setPosition(labels[i]->getPosition() + Vector3f(labels[i]->getSize().x(), heightDiff, 0)); values[i]->setSize(colSize - labels[i]->getSize().x(), values[i]->getSize().y()); + values[i]->setDefaultZIndex(40); float testBot = values[i]->getPosition().y() + values[i]->getSize().y(); if(testBot > bottom) diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 6ba531f2bf..21d093d3ca 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -105,6 +105,26 @@ void GuiComponent::setSize(float w, float h) onSizeChanged(); } +float GuiComponent::getZIndex() const +{ + return mZIndex; +} + +void GuiComponent::setZIndex(float z) +{ + mZIndex = z; +} + +float GuiComponent::getDefaultZIndex() const +{ + return mDefaultZIndex; +} + +void GuiComponent::setDefaultZIndex(float z) +{ + mDefaultZIndex = z; +} + //Children stuff. void GuiComponent::addChild(GuiComponent* cmp) { @@ -143,6 +163,13 @@ void GuiComponent::clearChildren() mChildren.clear(); } +void GuiComponent::sortChildren() +{ + std:stable_sort(mChildren.begin(), mChildren.end(), [](GuiComponent* a, GuiComponent* b) { + return b->getZIndex() > a->getZIndex(); + }); +} + unsigned int GuiComponent::getChildCount() const { return mChildren.size(); @@ -320,6 +347,11 @@ void GuiComponent::applyTheme(const std::shared_ptr& theme, const std if(properties & ThemeFlags::SIZE && elem->has("size")) setSize(elem->get("size").cwiseProduct(scale)); + + if(properties & ThemeFlags::Z_INDEX && elem->has("zIndex")) + setZIndex(elem->get("zIndex")); + else + setZIndex(getDefaultZIndex()); } void GuiComponent::updateHelpPrompts() diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index e37abe69f0..ec57662e0b 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -46,12 +46,19 @@ class GuiComponent void setSize(float w, float h); virtual void onSizeChanged() {}; + float getZIndex() const; + void setZIndex(float zIndex); + + float getDefaultZIndex() const; + void setDefaultZIndex(float zIndex); + void setParent(GuiComponent* parent); GuiComponent* getParent() const; void addChild(GuiComponent* cmp); void removeChild(GuiComponent* cmp); void clearChildren(); + void sortChildren(); unsigned int getChildCount() const; GuiComponent* getChild(unsigned int i) const; @@ -110,6 +117,9 @@ class GuiComponent Eigen::Vector3f mPosition; Eigen::Vector2f mSize; + float mDefaultZIndex = 0; + float mZIndex = 0; + bool mIsProcessing; public: diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 50958b11f8..b54299d102 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -24,7 +24,7 @@ ElementMapType makeMap(const T& mapInit) } std::vector ThemeData::sSupportedViews = boost::assign::list_of("system")("basic")("detailed")("video"); -std::vector ThemeData::sSupportedFeatures = boost::assign::list_of("video")("carousel"); +std::vector ThemeData::sSupportedFeatures = boost::assign::list_of("video")("carousel")("z-index"); std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign::map_list_of ("image", makeMap(boost::assign::map_list_of @@ -34,7 +34,8 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("origin", NORMALIZED_PAIR) ("path", PATH) ("tile", BOOLEAN) - ("color", COLOR))) + ("color", COLOR) + ("zIndex", FLOAT))) ("text", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) @@ -46,7 +47,8 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("alignment", STRING) ("forceUppercase", BOOLEAN) ("lineSpacing", FLOAT) - ("value", STRING))) + ("value", STRING) + ("zIndex", FLOAT))) ("textlist", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) @@ -60,26 +62,31 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("alignment", STRING) ("horizontalMargin", FLOAT) ("forceUppercase", BOOLEAN) - ("lineSpacing", FLOAT))) + ("lineSpacing", FLOAT) + ("zIndex", FLOAT))) ("container", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) - ("size", NORMALIZED_PAIR))) + ("size", NORMALIZED_PAIR) + ("zIndex", FLOAT))) ("ninepatch", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) - ("path", PATH))) + ("path", PATH) + ("zIndex", FLOAT))) ("datetime", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) ("color", COLOR) ("fontPath", PATH) ("fontSize", FLOAT) - ("forceUppercase", BOOLEAN))) + ("forceUppercase", BOOLEAN) + ("zIndex", FLOAT))) ("rating", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) ("filledPath", PATH) - ("unfilledPath", PATH))) + ("unfilledPath", PATH) + ("zIndex", FLOAT))) ("sound", makeMap(boost::assign::map_list_of ("path", PATH))) ("helpsystem", makeMap(boost::assign::map_list_of @@ -95,6 +102,7 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("origin", NORMALIZED_PAIR) ("default", PATH) ("delay", FLOAT) + ("zIndex", FLOAT) ("showSnapshotNoVideo", BOOLEAN) ("showSnapshotDelay", BOOLEAN))) ("carousel", makeMap(boost::assign::map_list_of @@ -104,7 +112,8 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("color", COLOR) ("logoScale", FLOAT) ("logoSize", NORMALIZED_PAIR) - ("maxLogoCount", FLOAT))); + ("maxLogoCount", FLOAT) + ("zIndex", FLOAT))); namespace fs = boost::filesystem; @@ -450,6 +459,7 @@ std::vector ThemeData::makeExtras(const std::shared_ptrsetDefaultZIndex(10); comp->applyTheme(theme, view, *it, ThemeFlags::ALL); comps.push_back(comp); } @@ -458,24 +468,6 @@ std::vector ThemeData::makeExtras(const std::shared_ptr& extras) -{ - // delete old extras (if any) - for(auto it = mExtras.begin(); it != mExtras.end(); it++) - delete *it; - - mExtras = extras; - for(auto it = mExtras.begin(); it != mExtras.end(); it++) - addChild(*it); -} - -ThemeExtras::~ThemeExtras() -{ - for(auto it = mExtras.begin(); it != mExtras.end(); it++) - delete *it; -} - - std::map ThemeData::getThemeSets() { std::map sets; diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 8231e07ede..e0e7bb1299 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -38,6 +38,7 @@ namespace ThemeFlags FORCE_UPPERCASE = 1024, LINE_SPACING = 2048, DELAY = 4096, + Z_INDEX = 8192, ALL = 0xFFFFFFFF }; @@ -71,19 +72,6 @@ ThemeException& operator<<(ThemeException& e, T appendMsg) return e; } -class ThemeExtras : public GuiComponent -{ -public: - ThemeExtras(Window* window) : GuiComponent(window) {}; - virtual ~ThemeExtras(); - - // will take ownership of the components within extras (delete them in destructor or when setExtras is called again) - void setExtras(const std::vector& extras); - -private: - std::vector mExtras; -}; - struct ThemeSet { boost::filesystem::path path; diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 0705e0c28f..8e28b7cf4a 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -362,6 +362,11 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s if(properties & COLOR && elem->has("color")) setColorShift(elem->get("color")); + + if(properties & ThemeFlags::Z_INDEX && elem->has("zIndex")) + setZIndex(elem->get("zIndex")); + else + setZIndex(getDefaultZIndex()); } std::vector ImageComponent::getHelpPrompts() diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 268a45316d..6d7f9e0e75 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -347,6 +347,11 @@ void VideoComponent::applyTheme(const std::shared_ptr& theme, const s if (elem->has("showSnapshotDelay")) mConfig.showSnapshotDelay = elem->get("showSnapshotDelay"); + + if(properties & ThemeFlags::Z_INDEX && elem->has("zIndex")) + setZIndex(elem->get("zIndex")); + else + setZIndex(getDefaultZIndex()); } std::vector VideoComponent::getHelpPrompts() From 2b907b86742984effc90ffb4bc597aa0bce251ad Mon Sep 17 00:00:00 2001 From: jrassa Date: Thu, 18 May 2017 23:04:41 -0400 Subject: [PATCH 089/603] slide transition will slide vertically for vertical carousel --- es-app/src/views/SystemView.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 0b2a950c25..aaff444deb 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -434,12 +434,13 @@ void SystemView::renderInfoBar(const Eigen::Affine3f& trans) // Draw background extras void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float upper) { - Eigen::Affine3f extrasTrans = trans; int extrasCenter = (int)mExtrasCamOffset; // Adding texture loading buffers depending on scrolling speed and status int bufferIndex = getScrollingVelocity() + 1; - + + Renderer::pushClipRect(Eigen::Vector2i(0, 0), mSize.cast()); + for (int i = extrasCenter + logoBuffersLeft[bufferIndex]; i <= extrasCenter + logoBuffersRight[bufferIndex]; i++) { int index = i; @@ -448,10 +449,11 @@ void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float u while (index >= (int)mEntries.size()) index -= mEntries.size(); - extrasTrans.translation() = trans.translation() + Eigen::Vector3f((i - mExtrasCamOffset) * mSize.x(), 0, 0); - - Eigen::Vector2i clipRect = Eigen::Vector2i((int)((i - mExtrasCamOffset) * mSize.x()), 0); - Renderer::pushClipRect(clipRect, mSize.cast()); + Eigen::Affine3f extrasTrans = trans; + if (mCarousel.type == HORIZONTAL) + extrasTrans.translate(Eigen::Vector3f((i - mExtrasCamOffset) * mSize.x(), 0, 0)); + else + extrasTrans.translate(Eigen::Vector3f(0, (i - mExtrasCamOffset) * mSize.y(), 0)); SystemViewData data = mEntries.at(index).data; for(unsigned int j = 0; j < data.backgroundExtras.size(); j++) @@ -461,9 +463,8 @@ void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float u extra->render(extrasTrans); } } - - Renderer::popClipRect(); } + Renderer::popClipRect(); } void SystemView::renderFade(const Eigen::Affine3f& trans) From 6de94ecbfb23d345e9eb1f498066bc043e8280a5 Mon Sep 17 00:00:00 2001 From: Daniel Mota Date: Sat, 20 May 2017 21:02:41 +0100 Subject: [PATCH 090/603] Additional sorting options - fixes #124 * Adding sorting options for the number of players, release date, genre, developer and publisher. --- es-app/src/FileSorts.cpp | 77 +++++++++++++++++++++++++++++----------- es-app/src/FileSorts.h | 5 +++ 2 files changed, 62 insertions(+), 20 deletions(-) diff --git a/es-app/src/FileSorts.cpp b/es-app/src/FileSorts.cpp index b985c0ae69..7a431a9a91 100644 --- a/es-app/src/FileSorts.cpp +++ b/es-app/src/FileSorts.cpp @@ -13,7 +13,22 @@ namespace FileSorts FileData::SortType(&compareTimesPlayed, false, "times played, descending"), FileData::SortType(&compareLastPlayed, true, "last played, ascending"), - FileData::SortType(&compareLastPlayed, false, "last played, descending") + FileData::SortType(&compareLastPlayed, false, "last played, descending"), + + FileData::SortType(&compareNumPlayers, true, "number players, ascending"), + FileData::SortType(&compareNumPlayers, false, "number players, descending"), + + FileData::SortType(&compareReleaseDate, true, "release date, ascending"), + FileData::SortType(&compareReleaseDate, false, "release date, descending"), + + FileData::SortType(&compareGenre, true, "genre, ascending"), + FileData::SortType(&compareGenre, false, "genre, descending"), + + FileData::SortType(&compareDeveloper, true, "developer, ascending"), + FileData::SortType(&compareDeveloper, false, "developer, descending"), + + FileData::SortType(&comparePublisher, true, "publisher, ascending"), + FileData::SortType(&comparePublisher, false, "publisher, descending") }; const std::vector SortTypes(typesArr, typesArr + sizeof(typesArr)/sizeof(typesArr[0])); @@ -23,29 +38,14 @@ namespace FileSorts { std::string name1 = file1->getName(); std::string name2 = file2->getName(); - - //min of name1/name2 .length()s - unsigned int count = name1.length() > name2.length() ? name2.length() : name1.length(); - for(unsigned int i = 0; i < count; i++) - { - if(toupper(name1[i]) != toupper(name2[i])) - { - return toupper(name1[i]) < toupper(name2[i]); - } - } - - return name1.length() < name2.length(); + transform(name1.begin(), name1.end(), name1.begin(), ::toupper); + transform(name2.begin(), name2.end(), name2.begin(), ::toupper); + return name1.compare(name2) < 0; } bool compareRating(const FileData* file1, const FileData* file2) { - //only games have rating metadata - if(file1->metadata.getType() == GAME_METADATA && file2->metadata.getType() == GAME_METADATA) - { - return file1->metadata.getFloat("rating") < file2->metadata.getFloat("rating"); - } - - return false; + return file1->metadata.getFloat("rating") < file2->metadata.getFloat("rating"); } bool compareTimesPlayed(const FileData* file1, const FileData* file2) @@ -69,4 +69,41 @@ namespace FileSorts return false; } + + bool compareNumPlayers(const FileData* file1, const FileData* file2) + { + return (file1)->metadata.getInt("players") < (file2)->metadata.getInt("players"); + } + + bool compareReleaseDate(const FileData* file1, const FileData* file2) + { + return (file1)->metadata.getTime("releasedate") < (file2)->metadata.getTime("releasedate"); + } + + bool compareGenre(const FileData* file1, const FileData* file2) + { + std::string genre1 = file1->metadata.get("genre"); + std::string genre2 = file2->metadata.get("genre"); + transform(genre1.begin(), genre1.end(), genre1.begin(), ::toupper); + transform(genre2.begin(), genre2.end(), genre2.begin(), ::toupper); + return genre1.compare(genre2) < 0; + } + + bool compareDeveloper(const FileData* file1, const FileData* file2) + { + std::string developer1 = file1->metadata.get("developer"); + std::string developer2 = file2->metadata.get("developer"); + transform(developer1.begin(), developer1.end(), developer1.begin(), ::toupper); + transform(developer2.begin(), developer2.end(), developer2.begin(), ::toupper); + return developer1.compare(developer2) < 0; + } + + bool comparePublisher(const FileData* file1, const FileData* file2) + { + std::string publisher1 = file1->metadata.get("publisher"); + std::string publisher2 = file2->metadata.get("publisher"); + transform(publisher1.begin(), publisher1.end(), publisher1.begin(), ::toupper); + transform(publisher2.begin(), publisher2.end(), publisher2.begin(), ::toupper); + return publisher1.compare(publisher2) < 0; + } }; diff --git a/es-app/src/FileSorts.h b/es-app/src/FileSorts.h index e9f662437b..b27925097e 100644 --- a/es-app/src/FileSorts.h +++ b/es-app/src/FileSorts.h @@ -9,6 +9,11 @@ namespace FileSorts bool compareRating(const FileData* file1, const FileData* file2); bool compareTimesPlayed(const FileData* file1, const FileData* fil2); bool compareLastPlayed(const FileData* file1, const FileData* file2); + bool compareNumPlayers(const FileData* file1, const FileData* file2); + bool compareReleaseDate(const FileData* file1, const FileData* file2); + bool compareGenre(const FileData* file1, const FileData* file2); + bool compareDeveloper(const FileData* file1, const FileData* file2); + bool comparePublisher(const FileData* file1, const FileData* file2); extern const std::vector SortTypes; }; From 54931f12bdb7103e4e164e72660de880a6c3e8ca Mon Sep 17 00:00:00 2001 From: zefie Date: Mon, 22 May 2017 14:28:04 -0400 Subject: [PATCH 091/603] add Famicom Disk System to scraper --- es-app/src/PlatformId.cpp | 1 + es-app/src/PlatformId.h | 1 + es-app/src/scrapers/GamesDBScraper.cpp | 1 + 3 files changed, 3 insertions(+) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 2242396d34..935da954d1 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -35,6 +35,7 @@ namespace PlatformIds "n3ds", // nintendo 3DS "n64", // nintendo 64 "nds", // nintendo DS + "fds", // Famicom Disk System "nes", // nintendo entertainment system "gb", // game boy "gba", // game boy advance diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index 59c2156448..fa31d0525c 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -35,6 +35,7 @@ namespace PlatformIds NINTENDO_3DS, NINTENDO_64, NINTENDO_DS, + FAMICOM_DISK_SYSTEM, NINTENDO_ENTERTAINMENT_SYSTEM, GAME_BOY, GAME_BOY_ADVANCE, diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index b348fabad1..d39dc9f392 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -35,6 +35,7 @@ const std::map gamesdb_platformid_map = boost::assign:: (NINTENDO_3DS, "Nintendo 3DS") (NINTENDO_64, "Nintendo 64") (NINTENDO_DS, "Nintendo DS") + (FAMICOM_DISK_SYSTEM, "Famicom Disk System") (NINTENDO_ENTERTAINMENT_SYSTEM, "Nintendo Entertainment System (NES)") (GAME_BOY, "Nintendo Game Boy") (GAME_BOY_ADVANCE, "Nintendo Game Boy Advance") From 8ed179291399fd9e2376f736bfaf779d4df2fd05 Mon Sep 17 00:00:00 2001 From: zefie Date: Mon, 22 May 2017 14:58:30 -0400 Subject: [PATCH 092/603] add support to search for specific game id using id:### --- es-app/src/scrapers/GamesDBScraper.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index d39dc9f392..d330bf6c7f 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -69,6 +69,7 @@ void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std std::vector& results) { std::string path = "thegamesdb.net/api/GetGame.php?"; + bool usingGameID = false; std::string cleanName = params.nameOverride; if (cleanName.empty()) @@ -78,10 +79,17 @@ void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std } else { - path += "exactname=" + HttpReq::urlEncode(cleanName); + if (cleanName.substr(0,3) == "id:") { + std::string gameID = cleanName.substr(3,-1); + path += "id=" + HttpReq::urlEncode(gameID); + usingGameID = true; + } + else { + path += "exactname=" + HttpReq::urlEncode(cleanName); + } } - if(params.system->getPlatformIds().empty()) + if(params.system->getPlatformIds().empty() || usingGameID) { // no platform specified, we're done requests.push(std::unique_ptr(new TheGamesDBRequest(results, path))); From 256f64126bab3988b249c6ae6960edca0bff154f Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 23 May 2017 18:44:51 +0100 Subject: [PATCH 093/603] bump version to 2.1.9 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index cc26192d74..2a58266edf 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_MAINTENANCE 8 -#define PROGRAM_VERSION_STRING "2.1.8rp" +#define PROGRAM_VERSION_MAINTENANCE 9 +#define PROGRAM_VERSION_STRING "2.1.9rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,1,8\0" +#define RESOURCE_VERSION_STRING "2,1,9\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 0cf21a09fd929431238f2096159692795ead7fee Mon Sep 17 00:00:00 2001 From: "Leonardo S. Meira" Date: Tue, 23 May 2017 17:22:34 -0300 Subject: [PATCH 094/603] Add new platforms to scraper --- es-app/src/PlatformId.cpp | 7 +++++++ es-app/src/PlatformId.h | 7 +++++++ es-app/src/scrapers/GamesDBScraper.cpp | 12 +++++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 935da954d1..5b9aaa9f03 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -43,6 +43,8 @@ namespace PlatformIds "gc", // gamecube "wii", "wiiu", + "virtualboy", + "gameandwatch", "pc", "sega32x", "segacd", @@ -52,6 +54,7 @@ namespace PlatformIds "mastersystem", // sega master system "megadrive", // sega megadrive "saturn", // sega saturn + "sg-1000", "psx", "ps2", "ps3", @@ -63,6 +66,10 @@ namespace PlatformIds "wonderswan", "wonderswancolor", "zxspectrum", + "videopac", + "vectrex", + "trs-80", + "coco", "ignore", // do not allow scraping for this system "invalid" diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index fa31d0525c..569f843e58 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -43,6 +43,8 @@ namespace PlatformIds NINTENDO_GAMECUBE, NINTENDO_WII, NINTENDO_WII_U, + NINTENDO_VIRTUAL_BOY, + NINTENDO_GAME_AND_WATCH, PC, SEGA_32X, SEGA_CD, @@ -52,6 +54,7 @@ namespace PlatformIds SEGA_MASTER_SYSTEM, SEGA_MEGA_DRIVE, SEGA_SATURN, + SEGA_SG1000, PLAYSTATION, PLAYSTATION_2, PLAYSTATION_3, @@ -63,6 +66,10 @@ namespace PlatformIds WONDERSWAN, WONDERSWAN_COLOR, ZX_SPECTRUM, + VIDEOPAC_ODYSSEY2, + VECTREX, + TRS80_COLOR_COMPUTER, + TANDY, PLATFORM_IGNORE, // do not allow scraping for this system PLATFORM_COUNT diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index d330bf6c7f..47d4aa2834 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -28,7 +28,7 @@ const std::map gamesdb_platformid_map = boost::assign:: (MAC_OS, "Mac OS") (XBOX, "Microsoft Xbox") (XBOX_360, "Microsoft Xbox 360") - // missing MSX + (MSX, "MSX") (NEOGEO, "Neo Geo") (NEOGEO_POCKET, "Neo Geo Pocket") (NEOGEO_POCKET_COLOR, "Neo Geo Pocket Color") @@ -43,6 +43,8 @@ const std::map gamesdb_platformid_map = boost::assign:: (NINTENDO_GAMECUBE, "Nintendo GameCube") (NINTENDO_WII, "Nintendo Wii") (NINTENDO_WII_U, "Nintendo Wii U") + (NINTENDO_VIRTUAL_BOY, "Nintendo Virtual Boy") + (NINTENDO_GAME_AND_WATCH, "Game & Watch") (PC, "PC") (SEGA_32X, "Sega 32X") (SEGA_CD, "Sega CD") @@ -52,6 +54,7 @@ const std::map gamesdb_platformid_map = boost::assign:: (SEGA_MASTER_SYSTEM, "Sega Master System") (SEGA_MEGA_DRIVE, "Sega Mega Drive") (SEGA_SATURN, "Sega Saturn") + (SEGA_SG1000, "SEGA SG-1000") (PLAYSTATION, "Sony Playstation") (PLAYSTATION_2, "Sony Playstation 2") (PLAYSTATION_3, "Sony Playstation 3") @@ -62,8 +65,11 @@ const std::map gamesdb_platformid_map = boost::assign:: (TURBOGRAFX_16, "TurboGrafx 16") (WONDERSWAN, "WonderSwan") (WONDERSWAN_COLOR, "WonderSwan Color") - (ZX_SPECTRUM, "Sinclair ZX Spectrum"); - + (ZX_SPECTRUM, "Sinclair ZX Spectrum") + (VIDEOPAC_ODYSSEY2, "Magnavox Odyssey 2") + (VECTREX, "Vectrex") + (TRS80_COLOR_COMPUTER, "TRS-80 Color Computer") + (TANDY, "TRS-80 Color Computer"); void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, std::vector& results) From 2faeb50ef096c2c099578b4f778f6f8ba1aeece9 Mon Sep 17 00:00:00 2001 From: jrassa Date: Wed, 24 May 2017 21:26:07 -0400 Subject: [PATCH 095/603] fix default z-index values for metadata fields on detail view --- es-app/src/views/gamelist/DetailedGameListView.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 460f608278..b5e42758c4 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -143,6 +143,7 @@ void DetailedGameListView::initMDLabels() components[i]->setFont(Font::get(FONT_SIZE_SMALL)); components[i]->setPosition(pos); + components[i]->setDefaultZIndex(40); } } @@ -171,6 +172,7 @@ void DetailedGameListView::initMDValues() const float heightDiff = (labels[i]->getSize().y() - values[i]->getSize().y()) / 2; values[i]->setPosition(labels[i]->getPosition() + Vector3f(labels[i]->getSize().x(), heightDiff, 0)); values[i]->setSize(colSize - labels[i]->getSize().x(), values[i]->getSize().y()); + values[i]->setDefaultZIndex(40); float testBot = values[i]->getPosition().y() + values[i]->getSize().y(); if(testBot > bottom) From d2eb7079e1fece6001faec7b52c25bca68ef8fd4 Mon Sep 17 00:00:00 2001 From: dirk-de-bugger Date: Thu, 25 May 2017 19:56:06 +0200 Subject: [PATCH 096/603] Make ScraperSearchHandle::update() non-blocking and ScraperSearchComponent::search() show the busy animation. --- es-app/src/components/ScraperSearchComponent.cpp | 2 ++ es-app/src/scrapers/Scraper.cpp | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index 9cfda3de62..89d9549315 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -205,6 +205,8 @@ void ScraperSearchComponent::updateViewStyle() void ScraperSearchComponent::search(const ScraperSearchParams& params) { + mBlockAccept = true; + mResultList->clear(); mScraperResults.clear(); mThumbnailReq.reset(); diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index ff4ba88db1..5bc9b0ef67 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -41,7 +41,7 @@ void ScraperSearchHandle::update() if(mStatus == ASYNC_DONE) return; - while(!mRequestQueue.empty()) + if(!mRequestQueue.empty()) { auto& req = mRequestQueue.front(); AsyncHandleStatus status = req->status(); @@ -62,7 +62,6 @@ void ScraperSearchHandle::update() if(status == ASYNC_DONE) { mRequestQueue.pop(); - continue; } // status == ASYNC_IN_PROGRESS From 04d080a93b09836ac122abbce91599de344b7aa2 Mon Sep 17 00:00:00 2001 From: pjft Date: Sat, 27 May 2017 08:40:18 +0100 Subject: [PATCH 097/603] Fix for Game Count display in System View when filtered --- es-app/src/views/SystemView.cpp | 40 ++++++++++++++++----------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index aaff444deb..d77b192e8c 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -56,21 +56,21 @@ void SystemView::populate() logoSelected->setPosition((mCarousel.logoSize.x() - logoSelected->getSize().x()) / 2, (mCarousel.logoSize.y() - logoSelected->getSize().y()) / 2); // center e.data.logoSelected = std::shared_ptr(logoSelected); - + }else{ // no logo in theme; use text - TextComponent* text = new TextComponent(mWindow, - (*it)->getName(), - Font::get(FONT_SIZE_LARGE), - 0x000000FF, + TextComponent* text = new TextComponent(mWindow, + (*it)->getName(), + Font::get(FONT_SIZE_LARGE), + 0x000000FF, ALIGN_CENTER); text->setSize(mCarousel.logoSize); e.data.logo = std::shared_ptr(text); - TextComponent* textSelected = new TextComponent(mWindow, - (*it)->getName(), + TextComponent* textSelected = new TextComponent(mWindow, + (*it)->getName(), Font::get((int)(FONT_SIZE_LARGE * 1.5)), - 0x000000FF, + 0x000000FF, ALIGN_CENTER); textSelected->setSize(mCarousel.logoSize); e.data.logoSelected = std::shared_ptr(textSelected); @@ -153,9 +153,9 @@ bool SystemView::input(InputConfig* config, Input input) return true; } }else{ - if(config->isMappedTo("left", input) || + if(config->isMappedTo("left", input) || config->isMappedTo("right", input) || - config->isMappedTo("up", input) || + config->isMappedTo("up", input) || config->isMappedTo("down", input)) listInput(0); } @@ -184,13 +184,13 @@ void SystemView::onCursorChanged(const CursorState& state) float endPos = target; // directly float dist = abs(endPos - startPos); - + if(abs(target + posMax - startPos) < dist) endPos = target + posMax; // loop around the end (0 -> max) if(abs(target - posMax - startPos) < dist) endPos = target - posMax; // loop around the start (max - 1 -> -1) - + // animate mSystemInfo's opacity (fade out, wait, fade back in) cancelAnimation(1); @@ -204,19 +204,19 @@ void SystemView::onCursorChanged(const CursorState& state) mSystemInfo.setOpacity((unsigned char)(lerp(infoStartOpacity, 0.f, t) * 255)); }, (int)(infoStartOpacity * 150)); - unsigned int gameCount = getSelected()->getGameCount(); + unsigned int gameCount = getSelected()->getDisplayedGameCount(); // also change the text after we've fully faded out setAnimation(infoFadeOut, 0, [this, gameCount] { std::stringstream ss; - + if (getSelected()->getName() == "retropie") ss << "CONFIGURATION"; // only display a game count if there are at least 2 games else if(gameCount > 1) ss << gameCount << " GAMES AVAILABLE"; - mSystemInfo.setText(ss.str()); + mSystemInfo.setText(ss.str()); }, false, 1); // only display a game count if there are at least 2 games @@ -288,7 +288,7 @@ void SystemView::render(const Eigen::Affine3f& parentTrans) { if(size() == 0) return; // nothing to render - + Eigen::Affine3f trans = getTransform() * parentTrans; auto systemInfoZIndex = mSystemInfo.getZIndex(); @@ -397,9 +397,9 @@ void SystemView::renderCarousel(const Eigen::Affine3f& trans) int center = (int)(mCamOffset); int logoCount = std::min(mCarousel.maxLogoCount, (int)mEntries.size()); - // Adding texture loading buffers depending on scrolling speed and status - int bufferIndex = getScrollingVelocity() + 1; - + // Adding texture loading buffers depending on scrolling speed and status + int bufferIndex = getScrollingVelocity() + 1; + for (int i = center - logoCount / 2 + logoBuffersLeft[bufferIndex]; i <= center + logoCount / 2 + logoBuffersRight[bufferIndex]; i++) { int index = i; @@ -435,7 +435,7 @@ void SystemView::renderInfoBar(const Eigen::Affine3f& trans) void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float upper) { int extrasCenter = (int)mExtrasCamOffset; - + // Adding texture loading buffers depending on scrolling speed and status int bufferIndex = getScrollingVelocity() + 1; From e27e7cfd195a9aba78413d7b5dadef088648f558 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sun, 28 May 2017 17:43:41 +0100 Subject: [PATCH 098/603] move setImage in Window::init * part of https://github.com/RetroPie/EmulationStation/pull/39/commits/4802d128fe716fa74f5ff736f7103eddfb808d51 that said it tried to call GL functions before initialised. Didn't confirm this, but looks reasonable. --- es-core/src/Window.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 355aa80d10..a15405e0c9 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -65,8 +65,6 @@ bool Window::init(unsigned int width, unsigned int height) return false; } - mBackgroundOverlay->setImage(":/scroll_gradient.png"); - InputManager::getInstance()->init(); ResourceManager::getInstance()->reloadAll(); @@ -79,6 +77,7 @@ bool Window::init(unsigned int width, unsigned int height) mDefaultFonts.push_back(Font::get(FONT_SIZE_LARGE)); } + mBackgroundOverlay->setImage(":/scroll_gradient.png"); mBackgroundOverlay->setResize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); // update our help because font sizes probably changed From 070ce4c21f43f08bd7c5bee64b3ada36f1e7f863 Mon Sep 17 00:00:00 2001 From: hex007 Date: Sun, 28 May 2017 11:13:00 -0700 Subject: [PATCH 099/603] Consistent Help Style --- es-app/src/guis/GuiGamelistOptions.cpp | 7 +++++++ es-app/src/guis/GuiGamelistOptions.h | 1 + es-app/src/guis/GuiMenu.cpp | 7 +++++++ es-app/src/guis/GuiMenu.h | 1 + es-app/src/guis/GuiSettings.cpp | 7 +++++++ es-app/src/guis/GuiSettings.h | 2 ++ 6 files changed, 25 insertions(+) diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 0f38a932d7..d3afd0077a 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -190,6 +190,13 @@ bool GuiGamelistOptions::input(InputConfig* config, Input input) return mMenu.input(config, input); } +HelpStyle GuiGamelistOptions::getHelpStyle() +{ + HelpStyle style = HelpStyle(); + style.applyTheme(mSystem->getTheme(), "system"); + return style; +} + std::vector GuiGamelistOptions::getHelpPrompts() { auto prompts = mMenu.getHelpPrompts(); diff --git a/es-app/src/guis/GuiGamelistOptions.h b/es-app/src/guis/GuiGamelistOptions.h index d856cd175c..8088997d10 100644 --- a/es-app/src/guis/GuiGamelistOptions.h +++ b/es-app/src/guis/GuiGamelistOptions.h @@ -14,6 +14,7 @@ class GuiGamelistOptions : public GuiComponent virtual bool input(InputConfig* config, Input input) override; virtual std::vector getHelpPrompts() override; + virtual HelpStyle getHelpStyle() override; private: void openGamelistFilter(); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index b210c283b1..154e422125 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -323,6 +323,13 @@ bool GuiMenu::input(InputConfig* config, Input input) return false; } +HelpStyle GuiMenu::getHelpStyle() +{ + HelpStyle style = HelpStyle(); + style.applyTheme(ViewController::get()->getState().getSystem()->getTheme(), "system"); + return style; +} + std::vector GuiMenu::getHelpPrompts() { std::vector prompts; diff --git a/es-app/src/guis/GuiMenu.h b/es-app/src/guis/GuiMenu.h index eff9ebd3f4..19fa1d3343 100644 --- a/es-app/src/guis/GuiMenu.h +++ b/es-app/src/guis/GuiMenu.h @@ -12,6 +12,7 @@ class GuiMenu : public GuiComponent bool input(InputConfig* config, Input input) override; void onSizeChanged() override; std::vector getHelpPrompts() override; + HelpStyle getHelpStyle() override; private: void addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func); diff --git a/es-app/src/guis/GuiSettings.cpp b/es-app/src/guis/GuiSettings.cpp index 806dae2c98..d1ed7ad608 100644 --- a/es-app/src/guis/GuiSettings.cpp +++ b/es-app/src/guis/GuiSettings.cpp @@ -49,6 +49,13 @@ bool GuiSettings::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } +HelpStyle GuiSettings::getHelpStyle() +{ + HelpStyle style = HelpStyle(); + style.applyTheme(ViewController::get()->getState().getSystem()->getTheme(), "system"); + return style; +} + std::vector GuiSettings::getHelpPrompts() { std::vector prompts = mMenu.getHelpPrompts(); diff --git a/es-app/src/guis/GuiSettings.h b/es-app/src/guis/GuiSettings.h index 06e88d3225..573e4e57c6 100644 --- a/es-app/src/guis/GuiSettings.h +++ b/es-app/src/guis/GuiSettings.h @@ -1,5 +1,6 @@ #include "GuiComponent.h" #include "components/MenuComponent.h" +#include "SystemData.h" // This is just a really simple template for a GUI that calls some save functions when closed. class GuiSettings : public GuiComponent @@ -15,6 +16,7 @@ class GuiSettings : public GuiComponent bool input(InputConfig* config, Input input) override; std::vector getHelpPrompts() override; + HelpStyle getHelpStyle() override; private: MenuComponent mMenu; From 34ea9caa89c19473b5ca6f5cfbe76e8229b7d5c8 Mon Sep 17 00:00:00 2001 From: fieldofcows Date: Wed, 25 Jan 2017 15:00:56 +0000 Subject: [PATCH 100/603] Adding experimental OMX video player component. Squashed from fieldofcows' work (by pjft). --- .gitmodules | 3 - .../src/views/gamelist/VideoGameListView.cpp | 44 ++- es-app/src/views/gamelist/VideoGameListView.h | 2 +- es-core/CMakeLists.txt | 4 + es-core/src/GuiComponent.cpp | 18 +- es-core/src/GuiComponent.h | 9 +- es-core/src/Settings.cpp | 10 +- es-core/src/Window.cpp | 8 + es-core/src/components/VideoComponent.cpp | 251 ++---------------- es-core/src/components/VideoComponent.h | 42 +-- .../src/components/VideoPlayerComponent.cpp | 98 +++++++ es-core/src/components/VideoPlayerComponent.h | 30 +++ es-core/src/components/VideoVlcComponent.cpp | 247 +++++++++++++++++ es-core/src/components/VideoVlcComponent.h | 55 ++++ external/pugixml | 1 - 15 files changed, 545 insertions(+), 277 deletions(-) create mode 100644 es-core/src/components/VideoPlayerComponent.cpp create mode 100644 es-core/src/components/VideoPlayerComponent.h create mode 100644 es-core/src/components/VideoVlcComponent.cpp create mode 100644 es-core/src/components/VideoVlcComponent.h delete mode 160000 external/pugixml diff --git a/.gitmodules b/.gitmodules index ab38f31f31..e69de29bb2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "external/pugixml"] - path = external/pugixml - url = https://github.com/zeux/pugixml.git diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 620c288f1b..7cf23cf697 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -4,13 +4,18 @@ #include "animations/LambdaAnimation.h" #include #include +#ifdef _RPI_ +#include "components/VideoPlayerComponent.h" +#include "Settings.h" +#endif +#include "components/VideoVlcComponent.h" VideoGameListView::VideoGameListView(Window* window, FileData* root) : BasicGameListView(window, root), mDescContainer(window), mDescription(window), mMarquee(window), mImage(window), - mVideo(window), + mVideo(nullptr), mVideoPlaying(false), mLblRating(window), mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), @@ -21,6 +26,16 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : { const float padding = 0.01f; + // Create the correct type of video window +#ifdef _RPI_ + if (Settings::getInstance()->getBool("VideoOmxPlayer")) + mVideo = new VideoPlayerComponent(window); + else + mVideo = new VideoVlcComponent(window); +#else + mVideo = new VideoVlcComponent(window); +#endif + mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); mList.setSize(mSize.x() * (0.50f - padding), mList.getSize().y()); mList.setAlignment(TextListComponent::ALIGN_LEFT); @@ -42,10 +57,10 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : addChild(&mImage); // video - mVideo.setOrigin(0.5f, 0.5f); - mVideo.setPosition(mSize.x() * 0.25f, mSize.y() * 0.4f); - mVideo.setSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.4f); - mVideo.setDefaultZIndex(30); + mVideo->setOrigin(0.5f, 0.5f); + mVideo->setPosition(mSize.x() * 0.25f, mSize.y() * 0.4f); + mVideo->setSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.4f); + mVideo->setDefaultZIndex(30); addChild(&mVideo); // metadata labels + values @@ -91,6 +106,7 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : VideoGameListView::~VideoGameListView() { + delete mVideo; } void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) @@ -100,7 +116,7 @@ void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) using namespace ThemeFlags; mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE | Z_INDEX); mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX); - mVideo.applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY | Z_INDEX); + mVideo->applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY | Z_INDEX); initMDLabels(); std::vector labels = getMDLabels(); @@ -214,8 +230,8 @@ void VideoGameListView::updateInfoPanel() bool fadingOut; if(file == NULL) { - mVideo.setVideo(""); - mVideo.setImage(""); + mVideo->setVideo(""); + mVideo->setImage(""); mVideoPlaying = false; //mMarquee.setImage(""); //mDescription.setText(""); @@ -244,13 +260,13 @@ void VideoGameListView::updateInfoPanel() thumbnail_path.erase(0, 1); thumbnail_path.insert(0, getHomePath()); } - if (!mVideo.setVideo(video_path)) + if (!mVideo->setVideo(video_path)) { - mVideo.setDefaultVideo(); + mVideo->setDefaultVideo(); } mVideoPlaying = true; - mVideo.setImage(thumbnail_path); + mVideo->setImage(thumbnail_path); mMarquee.setImage(marquee_path); mImage.setImage(thumbnail_path); @@ -275,7 +291,7 @@ void VideoGameListView::updateInfoPanel() std::vector comps = getMDValues(); comps.push_back(&mMarquee); - comps.push_back(&mVideo); + comps.push_back(mVideo); comps.push_back(&mDescription); comps.push_back(&mImage); std::vector labels = getMDLabels(); @@ -304,7 +320,7 @@ void VideoGameListView::launch(FileData* game) { Eigen::Vector3f target(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0); if(mMarquee.hasImage()) - target << mVideo.getCenter().x(), mVideo.getCenter().y(), 0; + target << mVideo->getCenter().x(), mVideo->getCenter().y(), 0; ViewController::get()->launch(game, target); } @@ -340,7 +356,7 @@ std::vector VideoGameListView::getMDValues() void VideoGameListView::update(int deltaTime) { BasicGameListView::update(deltaTime); - mVideo.update(deltaTime); + mVideo->update(deltaTime); } void VideoGameListView::onShow() diff --git a/es-app/src/views/gamelist/VideoGameListView.h b/es-app/src/views/gamelist/VideoGameListView.h index 0857f6ce25..09b12f6020 100644 --- a/es-app/src/views/gamelist/VideoGameListView.h +++ b/es-app/src/views/gamelist/VideoGameListView.h @@ -30,7 +30,7 @@ class VideoGameListView : public BasicGameListView void initMDValues(); ImageComponent mMarquee; - VideoComponent mVideo; + VideoComponent* mVideo; ImageComponent mImage; TextComponent mLblRating, mLblReleaseDate, mLblDeveloper, mLblPublisher, mLblGenre, mLblPlayers, mLblLastPlayed, mLblPlayCount; diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index f05aec77c3..dd8d1ae418 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -43,6 +43,8 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoPlayerComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoVlcComponent.h # Guis ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.h @@ -99,6 +101,8 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/TextEditComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoPlayerComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/VideoVlcComponent.cpp # Guis ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiDetectDevice.cpp diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 21d093d3ca..c419aedab0 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -5,7 +5,7 @@ #include "animations/AnimationController.h" #include "ThemeData.h" -GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), +GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), mPosition(Eigen::Vector3f::Zero()), mSize(Eigen::Vector2f::Zero()), mTransform(Eigen::Affine3f::Identity()), mIsProcessing(false) { @@ -390,4 +390,20 @@ void GuiComponent::onHide() getChild(i)->onHide(); } +void GuiComponent::onScreenSaverActivate() +{ + for(unsigned int i = 0; i < getChildCount(); i++) + getChild(i)->onScreenSaverActivate(); +} +void GuiComponent::onScreenSaverDeactivate() +{ + for(unsigned int i = 0; i < getChildCount(); i++) + getChild(i)->onScreenSaverDeactivate(); +} + +void GuiComponent::topWindow(bool isTop) +{ + for(unsigned int i = 0; i < getChildCount(); i++) + getChild(i)->topWindow(isTop); +} \ No newline at end of file diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index ec57662e0b..66b921b885 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -45,7 +45,7 @@ class GuiComponent void setSize(const Eigen::Vector2f& size); void setSize(float w, float h); virtual void onSizeChanged() {}; - + float getZIndex() const; void setZIndex(float zIndex); @@ -84,9 +84,12 @@ class GuiComponent virtual void onFocusGained() {}; virtual void onFocusLost() {}; - + virtual void onShow(); virtual void onHide(); + virtual void onScreenSaverActivate(); + virtual void onScreenSaverDeactivate(); + virtual void topWindow(bool isTop); // Default implementation just handles and tags as normalized float pairs. // You probably want to keep this behavior for any derived classes as well as add your own. @@ -97,7 +100,7 @@ class GuiComponent // Called whenever help prompts change. void updateHelpPrompts(); - + virtual HelpStyle getHelpStyle(); // Returns true if the component is busy doing background processing (e.g. HTTP downloads) diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index d85a1b9912..fa9067f304 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -47,7 +47,7 @@ void Settings::setDefaults() mBoolMap["SplashScreen"] = true; #ifdef _RPI_ - // don't enable VSync by default on the Pi, since it already + // don't enable VSync by default on the Pi, since it already // has trouble trying to render things at 60fps in certain menus mBoolMap["VSync"] = false; #else @@ -76,6 +76,14 @@ void Settings::setDefaults() mStringMap["ScreenSaverBehavior"] = "dim"; mStringMap["Scraper"] = "TheGamesDB"; mStringMap["GamelistViewStyle"] = "automatic"; + + // This setting only applies to raspberry pi but set it for all platforms so + // we don't get a warning if we encounter it on a different platform +#ifdef _RPI_ + mBoolMap["VideoOmxPlayer"] = true; +#else + mBoolMap["VideoOmxPlayer"] = false; +#endif } template diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index a15405e0c9..78fe8ea6cd 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -29,6 +29,11 @@ Window::~Window() void Window::pushGui(GuiComponent* gui) { + if (mGuiStack.size() > 0) + { + auto& top = mGuiStack.back(); + top->topWindow(false); + } mGuiStack.push_back(gui); gui->updateHelpPrompts(); } @@ -42,7 +47,10 @@ void Window::removeGui(GuiComponent* gui) i = mGuiStack.erase(i); if(i == mGuiStack.end() && mGuiStack.size()) // we just popped the stack and the stack is not empty + { mGuiStack.back()->updateHelpPrompts(); + mGuiStack.back()->topWindow(true); + } return; } diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 6d7f9e0e75..2c49a44e6a 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -8,54 +8,24 @@ #define FADE_TIME_MS 200 -libvlc_instance_t* VideoComponent::mVLC = NULL; - -// VLC prepares to render a video frame. -static void *lock(void *data, void **p_pixels) { - struct VideoContext *c = (struct VideoContext *)data; - SDL_LockMutex(c->mutex); - SDL_LockSurface(c->surface); - *p_pixels = c->surface->pixels; - return NULL; // Picture identifier, not needed here. -} - -// VLC just rendered a video frame. -static void unlock(void *data, void *id, void *const *p_pixels) { - struct VideoContext *c = (struct VideoContext *)data; - SDL_UnlockSurface(c->surface); - SDL_UnlockMutex(c->mutex); -} - -// VLC wants to display a video frame. -static void display(void *data, void *id) { - //Data to be displayed -} - VideoComponent::VideoComponent(Window* window) : GuiComponent(window), mStaticImage(window), - mMediaPlayer(nullptr), mVideoHeight(0), mVideoWidth(0), mStartDelayed(false), mIsPlaying(false), mShowing(false), + mScreensaverActive(false), + mDisable(false), mTargetIsMax(false), mOrigin(0, 0), mTargetSize(0, 0) { - memset(&mContext, 0, sizeof(mContext)); - // Setup the default configuration mConfig.showSnapshotDelay = false; mConfig.showSnapshotNoVideo = false; mConfig.startDelay = 0; - - // Get an empty texture for rendering the video - mTexture = TextureResource::get(""); - - // Make sure VLC has been initialised - setupVLC(); } VideoComponent::~VideoComponent() @@ -163,7 +133,7 @@ void VideoComponent::onSizeChanged() bool VideoComponent::setVideo(std::string path) { - // Convert the path into a format VLC can understand + // Convert the path into a generic format boost::filesystem::path fullPath = getCanonicalPath(path); fullPath.make_preferred().native(); @@ -189,7 +159,7 @@ void VideoComponent::setImage(std::string path) // Check that the image has changed if (path == mStaticImagePath) return; - + mStaticImage.setImage(path); mFadeIn = 0.0f; mStaticImagePath = path; @@ -215,83 +185,14 @@ void VideoComponent::render(const Eigen::Affine3f& parentTrans) GuiComponent::renderChildren(trans); Renderer::setMatrix(trans); - + // Handle the case where the video is delayed handleStartDelay(); // Handle looping of the video handleLooping(); - if (mIsPlaying && mContext.valid) - { - float tex_offs_x = 0.0f; - float tex_offs_y = 0.0f; - float x2; - float y2; - - x = -(float)mSize.x() * mOrigin.x(); - y = -(float)mSize.y() * mOrigin.y(); - x2 = x+mSize.x(); - y2 = y+mSize.y(); - - // Define a structure to contain the data for each vertex - struct Vertex - { - Eigen::Vector2f pos; - Eigen::Vector2f tex; - Eigen::Vector4f colour; - } vertices[6]; - - // We need two triangles to cover the rectangular area - vertices[0].pos[0] = x; vertices[0].pos[1] = y; - vertices[1].pos[0] = x; vertices[1].pos[1] = y2; - vertices[2].pos[0] = x2; vertices[2].pos[1] = y; - - vertices[3].pos[0] = x2; vertices[3].pos[1] = y; - vertices[4].pos[0] = x; vertices[4].pos[1] = y2; - vertices[5].pos[0] = x2; vertices[5].pos[1] = y2; - - // Texture coordinates - vertices[0].tex[0] = -tex_offs_x; vertices[0].tex[1] = -tex_offs_y; - vertices[1].tex[0] = -tex_offs_x; vertices[1].tex[1] = 1.0f + tex_offs_y; - vertices[2].tex[0] = 1.0f + tex_offs_x; vertices[2].tex[1] = -tex_offs_y; - - vertices[3].tex[0] = 1.0f + tex_offs_x; vertices[3].tex[1] = -tex_offs_y; - vertices[4].tex[0] = -tex_offs_x; vertices[4].tex[1] = 1.0f + tex_offs_y; - vertices[5].tex[0] = 1.0f + tex_offs_x; vertices[5].tex[1] = 1.0f + tex_offs_y; - - // Colours - use this to fade the video in and out - for (int i = 0; i < (4 * 6); ++i) { - if ((i%4) < 3) - vertices[i / 4].colour[i % 4] = mFadeIn; - else - vertices[i / 4].colour[i % 4] = 1.0f; - } - - glEnable(GL_TEXTURE_2D); - - // Build a texture for the video frame - mTexture->initFromPixels((unsigned char*)mContext.surface->pixels, mContext.surface->w, mContext.surface->h); - mTexture->bind(); - - // Render it - glEnableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - - glColorPointer(4, GL_FLOAT, sizeof(Vertex), &vertices[0].colour); - glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].pos); - glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].tex); - - glDrawArrays(GL_TRIANGLES, 0, 6); - - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - - glDisable(GL_TEXTURE_2D); - } - else + if (!mIsPlaying) { // This is the case where the video is not currently being displayed. Work out // if we need to display a static image @@ -361,38 +262,6 @@ std::vector VideoComponent::getHelpPrompts() return ret; } -void VideoComponent::setupContext() -{ - if (!mContext.valid) - { - // Create an RGBA surface to render the video into - mContext.surface = SDL_CreateRGBSurface(SDL_SWSURFACE, (int)mVideoWidth, (int)mVideoHeight, 32, 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff); - mContext.mutex = SDL_CreateMutex(); - mContext.valid = true; - resize(); - } -} - -void VideoComponent::freeContext() -{ - if (mContext.valid) - { - SDL_FreeSurface(mContext.surface); - SDL_DestroyMutex(mContext.mutex); - mContext.valid = false; - } -} - -void VideoComponent::setupVLC() -{ - // If VLC hasn't been initialised yet then do it now - if (!mVLC) - { - const char* args[] = { "--quiet" }; - mVLC = libvlc_new(sizeof(args) / sizeof(args[0]), args); - } -} - void VideoComponent::handleStartDelay() { // Only play if any delay has timed out @@ -413,74 +282,6 @@ void VideoComponent::handleStartDelay() void VideoComponent::handleLooping() { - if (mIsPlaying && mMediaPlayer) - { - libvlc_state_t state = libvlc_media_player_get_state(mMediaPlayer); - if (state == libvlc_Ended) - { - //libvlc_media_player_set_position(mMediaPlayer, 0.0f); - libvlc_media_player_set_media(mMediaPlayer, mMedia); - libvlc_media_player_play(mMediaPlayer); - } - } -} - -void VideoComponent::startVideo() -{ - if (!mIsPlaying) { - mVideoWidth = 0; - mVideoHeight = 0; - -#ifdef WIN32 - std::wstring_convert, wchar_t> wton; - std::string path = wton.to_bytes(mVideoPath.c_str()); -#else - std::string path(mVideoPath.c_str()); -#endif - // Make sure we have a video path - if (mVLC && (path.size() > 0)) - { - // Set the video that we are going to be playing so we don't attempt to restart it - mPlayingVideoPath = mVideoPath; - - // Open the media - mMedia = libvlc_media_new_path(mVLC, path.c_str()); - if (mMedia) - { - unsigned track_count; - // Get the media metadata so we can find the aspect ratio - libvlc_media_parse(mMedia); - libvlc_media_track_t** tracks; - track_count = libvlc_media_tracks_get(mMedia, &tracks); - for (unsigned track = 0; track < track_count; ++track) - { - if (tracks[track]->i_type == libvlc_track_video) - { - mVideoWidth = tracks[track]->video->i_width; - mVideoHeight = tracks[track]->video->i_height; - break; - } - } - libvlc_media_tracks_release(tracks, track_count); - - // Make sure we found a valid video track - if ((mVideoWidth > 0) && (mVideoHeight > 0)) - { - setupContext(); - - // Setup the media player - mMediaPlayer = libvlc_media_player_new_from_media(mMedia); - libvlc_media_player_play(mMediaPlayer); - libvlc_video_set_callbacks(mMediaPlayer, lock, unlock, display, (void*)&mContext); - libvlc_video_set_format(mMediaPlayer, "RGBA", (int)mVideoWidth, (int)mVideoHeight, (int)mVideoWidth * 4); - - // Update the playing state - mIsPlaying = true; - mFadeIn = 0.0f; - } - } - } - } } void VideoComponent::startVideoWithDelay() @@ -508,21 +309,6 @@ void VideoComponent::startVideoWithDelay() } } -void VideoComponent::stopVideo() -{ - mIsPlaying = false; - mStartDelayed = false; - // Release the media player so it stops calling back to us - if (mMediaPlayer) - { - libvlc_media_player_stop(mMediaPlayer); - libvlc_media_player_release(mMediaPlayer); - libvlc_media_release(mMedia); - mMediaPlayer = NULL; - freeContext(); - } -} - void VideoComponent::update(int deltaTime) { manageState(); @@ -532,10 +318,10 @@ void VideoComponent::update(int deltaTime) if (mStartDelayed) { Uint32 ticks = SDL_GetTicks(); - if (mStartTime > ticks) + if (mStartTime > ticks) { Uint32 diff = mStartTime - ticks; - if (diff < FADE_TIME_MS) + if (diff < FADE_TIME_MS) { mFadeIn = (float)diff / (float)FADE_TIME_MS; return; @@ -554,8 +340,9 @@ void VideoComponent::update(int deltaTime) void VideoComponent::manageState() { - // We will only show if the component is on display - bool show = mShowing; + // We will only show if the component is on display and the screensaver + // is not active + bool show = mShowing && !mScreensaverActive && !mDisable; // See if we're already playing if (mIsPlaying) @@ -598,4 +385,20 @@ void VideoComponent::onHide() manageState(); } +void VideoComponent::onScreenSaverActivate() +{ + mScreensaverActive = true; + manageState(); +} + +void VideoComponent::onScreenSaverDeactivate() +{ + mScreensaverActive = false; + manageState(); +} +void VideoComponent::topWindow(bool isTop) +{ + mDisable = !isTop; + manageState(); +} diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index 14179defa3..db3d9500f6 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -8,18 +8,10 @@ #include "ImageComponent.h" #include #include -#include "resources/TextureResource.h" -#include #include #include #include -struct VideoContext { - SDL_Surface* surface; - SDL_mutex* mutex; - bool valid; -}; - class VideoComponent : public GuiComponent { // Structure that groups together the configuration of the video component @@ -32,8 +24,6 @@ class VideoComponent : public GuiComponent }; public: - static void setupVLC(); - VideoComponent(Window* window); virtual ~VideoComponent(); @@ -44,9 +34,12 @@ class VideoComponent : public GuiComponent // Configures the component to show the default video void setDefaultVideo(); - + virtual void onShow() override; virtual void onHide() override; + virtual void onScreenSaverActivate() override; + virtual void onScreenSaverDeactivate() override; + virtual void topWindow(bool isTop) override; //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) void setOrigin(float originX, float originY); @@ -80,34 +73,23 @@ class VideoComponent : public GuiComponent virtual void update(int deltaTime); private: - // Calculates the correct mSize from our resizing information (set by setResize/setMaxSize). - // Used internally whenever the resizing parameters or texture change. - void resize(); - // Start the video Immediately - void startVideo(); - // Start the video after any configured delay - void startVideoWithDelay(); + virtual void startVideo() = 0; // Stop the video - void stopVideo(); + virtual void stopVideo() { }; + // Handle looping the video. Must be called periodically + virtual void handleLooping(); - void setupContext(); - void freeContext(); + // Start the video after any configured delay + void startVideoWithDelay(); // Handle any delay to the start of playing the video clip. Must be called periodically void handleStartDelay(); - // Handle looping the video. Must be called periodically - void handleLooping(); - // Manage the playing state of the component void manageState(); -private: - static libvlc_instance_t* mVLC; - libvlc_media_t* mMedia; - libvlc_media_player_t* mMediaPlayer; - VideoContext mContext; +protected: unsigned mVideoWidth; unsigned mVideoHeight; Eigen::Vector2f mOrigin; @@ -123,6 +105,8 @@ class VideoComponent : public GuiComponent unsigned mStartTime; bool mIsPlaying; bool mShowing; + bool mDisable; + bool mScreensaverActive; bool mTargetIsMax; Configuration mConfig; diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp new file mode 100644 index 0000000000..fb44eb25d3 --- /dev/null +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -0,0 +1,98 @@ +#ifdef _RPI_ +#include "components/VideoPlayerComponent.h" +#include "Renderer.h" +#include "ThemeData.h" +#include "Util.h" +#include +#include +#include +#include +#include + +VideoPlayerComponent::VideoPlayerComponent(Window* window) : + VideoComponent(window), + mPlayerPid(-1) +{ +} + +VideoPlayerComponent::~VideoPlayerComponent() +{ +} + +void VideoPlayerComponent::render(const Eigen::Affine3f& parentTrans) +{ + VideoComponent::render(parentTrans); +} + +void VideoPlayerComponent::startVideo() +{ + if (!mIsPlaying) { + mVideoWidth = 0; + mVideoHeight = 0; + + std::string path(mVideoPath.c_str()); + + // Make sure we have a video path + if ((path.size() > 0) && (mPlayerPid == -1)) + { + // Set the video that we are going to be playing so we don't attempt to restart it + mPlayingVideoPath = mVideoPath; + + // Start the player process + pid_t pid = fork(); + if (pid == -1) + { + // Failed + mPlayingVideoPath = ""; + } + else if (pid > 0) + { + mPlayerPid = pid; + // Update the playing state + mIsPlaying = true; + mFadeIn = 0.0f; + } + else + { + // Find out the pixel position of the video view and build a command line for + // omxplayer to position it in the right place + char buf[32]; + float x = mPosition.x() - (mOrigin.x() * mSize.x()); + float y = mPosition.y() - (mOrigin.y() * mSize.y()); + sprintf(buf, "%d,%d,%d,%d", (int)x, (int)y, (int)(x + mSize.x()), (int)(y + mSize.y())); + // We need to specify the layer of 10000 or above to ensure the video is displayed on top + // of our SDL display + const char* argv[] = { "", "--win", buf, "--layer", "10000", "--loop", "--no-osd", "", NULL }; + const char* env[] = { "LD_LIBRARY_PATH=/opt/vc/libs:/usr/lib/omxplayer", NULL }; + // Fill in the empty argument with the video path + argv[7] = mPlayingVideoPath.c_str(); + // Redirect stdout + int fdin = open("/dev/null", O_RDONLY); + int fdout = open("/dev/null", O_WRONLY); + dup2(fdin, 0); + dup2(fdout, 1); + // Run the omxplayer binary + execve("/usr/bin/omxplayer.bin", (char**)argv, (char**)env); + _exit(EXIT_FAILURE); + } + } + } +} + +void VideoPlayerComponent::stopVideo() +{ + mIsPlaying = false; + mStartDelayed = false; + + // Stop the player process + if (mPlayerPid != -1) + { + int status; + kill(mPlayerPid, SIGKILL); + waitpid(mPlayerPid, &status, WNOHANG); + mPlayerPid = -1; + } +} + +#endif + diff --git a/es-core/src/components/VideoPlayerComponent.h b/es-core/src/components/VideoPlayerComponent.h new file mode 100644 index 0000000000..45517e91af --- /dev/null +++ b/es-core/src/components/VideoPlayerComponent.h @@ -0,0 +1,30 @@ +#ifdef _RPI_ +#ifndef _VIDEOPLAYERCOMPONENT_H_ +#define _VIDEOPLAYERCOMPONENT_H_ + +#include "platform.h" +#include GLHEADER + +#include "components/VideoComponent.h" + +class VideoPlayerComponent : public VideoComponent +{ +public: + VideoPlayerComponent(Window* window); + virtual ~VideoPlayerComponent(); + + void render(const Eigen::Affine3f& parentTrans) override; + +private: + // Start the video Immediately + virtual void startVideo(); + // Stop the video + virtual void stopVideo(); + +private: + pid_t mPlayerPid; +}; + +#endif +#endif + diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp new file mode 100644 index 0000000000..e0da5003ef --- /dev/null +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -0,0 +1,247 @@ +#include "components/VideoVlcComponent.h" +#include "Renderer.h" +#include "ThemeData.h" +#include "Util.h" +#ifdef WIN32 +#include +#endif + +libvlc_instance_t* VideoVlcComponent::mVLC = NULL; + +// VLC prepares to render a video frame. +static void *lock(void *data, void **p_pixels) { + struct VideoContext *c = (struct VideoContext *)data; + SDL_LockMutex(c->mutex); + SDL_LockSurface(c->surface); + *p_pixels = c->surface->pixels; + return NULL; // Picture identifier, not needed here. +} + +// VLC just rendered a video frame. +static void unlock(void *data, void *id, void *const *p_pixels) { + struct VideoContext *c = (struct VideoContext *)data; + SDL_UnlockSurface(c->surface); + SDL_UnlockMutex(c->mutex); +} + +// VLC wants to display a video frame. +static void display(void *data, void *id) { + //Data to be displayed +} + +VideoVlcComponent::VideoVlcComponent(Window* window) : + VideoComponent(window), + mMediaPlayer(nullptr) +{ + memset(&mContext, 0, sizeof(mContext)); + + // Get an empty texture for rendering the video + mTexture = TextureResource::get(""); + + // Make sure VLC has been initialised + setupVLC(); +} + +VideoVlcComponent::~VideoVlcComponent() +{ +} + +void VideoVlcComponent::render(const Eigen::Affine3f& parentTrans) +{ + VideoComponent::render(parentTrans); + float x, y; + + Eigen::Affine3f trans = parentTrans * getTransform(); + GuiComponent::renderChildren(trans); + + Renderer::setMatrix(trans); + + if (mIsPlaying && mContext.valid) + { + float tex_offs_x = 0.0f; + float tex_offs_y = 0.0f; + float x2; + float y2; + + x = -(float)mSize.x() * mOrigin.x(); + y = -(float)mSize.y() * mOrigin.y(); + x2 = x+mSize.x(); + y2 = y+mSize.y(); + + // Define a structure to contain the data for each vertex + struct Vertex + { + Eigen::Vector2f pos; + Eigen::Vector2f tex; + Eigen::Vector4f colour; + } vertices[6]; + + // We need two triangles to cover the rectangular area + vertices[0].pos[0] = x; vertices[0].pos[1] = y; + vertices[1].pos[0] = x; vertices[1].pos[1] = y2; + vertices[2].pos[0] = x2; vertices[2].pos[1] = y; + + vertices[3].pos[0] = x2; vertices[3].pos[1] = y; + vertices[4].pos[0] = x; vertices[4].pos[1] = y2; + vertices[5].pos[0] = x2; vertices[5].pos[1] = y2; + + // Texture coordinates + vertices[0].tex[0] = -tex_offs_x; vertices[0].tex[1] = -tex_offs_y; + vertices[1].tex[0] = -tex_offs_x; vertices[1].tex[1] = 1.0f + tex_offs_y; + vertices[2].tex[0] = 1.0f + tex_offs_x; vertices[2].tex[1] = -tex_offs_y; + + vertices[3].tex[0] = 1.0f + tex_offs_x; vertices[3].tex[1] = -tex_offs_y; + vertices[4].tex[0] = -tex_offs_x; vertices[4].tex[1] = 1.0f + tex_offs_y; + vertices[5].tex[0] = 1.0f + tex_offs_x; vertices[5].tex[1] = 1.0f + tex_offs_y; + + // Colours - use this to fade the video in and out + for (int i = 0; i < (4 * 6); ++i) { + if ((i%4) < 3) + vertices[i / 4].colour[i % 4] = mFadeIn; + else + vertices[i / 4].colour[i % 4] = 1.0f; + } + + glEnable(GL_TEXTURE_2D); + + // Build a texture for the video frame + mTexture->initFromPixels((unsigned char*)mContext.surface->pixels, mContext.surface->w, mContext.surface->h); + mTexture->bind(); + + // Render it + glEnableClientState(GL_COLOR_ARRAY); + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + + glColorPointer(4, GL_FLOAT, sizeof(Vertex), &vertices[0].colour); + glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].pos); + glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].tex); + + glDrawArrays(GL_TRIANGLES, 0, 6); + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + + glDisable(GL_TEXTURE_2D); + } +} + +void VideoVlcComponent::setupContext() +{ + if (!mContext.valid) + { + // Create an RGBA surface to render the video into + mContext.surface = SDL_CreateRGBSurface(SDL_SWSURFACE, (int)mVideoWidth, (int)mVideoHeight, 32, 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff); + mContext.mutex = SDL_CreateMutex(); + mContext.valid = true; + } +} + +void VideoVlcComponent::freeContext() +{ + if (mContext.valid) + { + SDL_FreeSurface(mContext.surface); + SDL_DestroyMutex(mContext.mutex); + mContext.valid = false; + } +} + +void VideoVlcComponent::setupVLC() +{ + // If VLC hasn't been initialised yet then do it now + if (!mVLC) + { + const char* args[] = { "--quiet" }; + mVLC = libvlc_new(sizeof(args) / sizeof(args[0]), args); + } +} + +void VideoVlcComponent::handleLooping() +{ + if (mIsPlaying && mMediaPlayer) + { + libvlc_state_t state = libvlc_media_player_get_state(mMediaPlayer); + if (state == libvlc_Ended) + { + //libvlc_media_player_set_position(mMediaPlayer, 0.0f); + libvlc_media_player_set_media(mMediaPlayer, mMedia); + libvlc_media_player_play(mMediaPlayer); + } + } +} + +void VideoVlcComponent::startVideo() +{ + if (!mIsPlaying) { + mVideoWidth = 0; + mVideoHeight = 0; + +#ifdef WIN32 + std::wstring_convert, wchar_t> wton; + std::string path = wton.to_bytes(mVideoPath.c_str()); +#else + std::string path(mVideoPath.c_str()); +#endif + // Make sure we have a video path + if (mVLC && (path.size() > 0)) + { + // Set the video that we are going to be playing so we don't attempt to restart it + mPlayingVideoPath = mVideoPath; + + // Open the media + mMedia = libvlc_media_new_path(mVLC, path.c_str()); + if (mMedia) + { + unsigned track_count; + // Get the media metadata so we can find the aspect ratio + libvlc_media_parse(mMedia); + libvlc_media_track_t** tracks; + track_count = libvlc_media_tracks_get(mMedia, &tracks); + for (unsigned track = 0; track < track_count; ++track) + { + if (tracks[track]->i_type == libvlc_track_video) + { + mVideoWidth = tracks[track]->video->i_width; + mVideoHeight = tracks[track]->video->i_height; + break; + } + } + libvlc_media_tracks_release(tracks, track_count); + + // Make sure we found a valid video track + if ((mVideoWidth > 0) && (mVideoHeight > 0)) + { + setupContext(); + + // Setup the media player + mMediaPlayer = libvlc_media_player_new_from_media(mMedia); + libvlc_media_player_play(mMediaPlayer); + libvlc_video_set_callbacks(mMediaPlayer, lock, unlock, display, (void*)&mContext); + libvlc_video_set_format(mMediaPlayer, "RGBA", (int)mVideoWidth, (int)mVideoHeight, (int)mVideoWidth * 4); + + // Update the playing state + mIsPlaying = true; + mFadeIn = 0.0f; + } + } + } + } +} + +void VideoVlcComponent::stopVideo() +{ + mIsPlaying = false; + mStartDelayed = false; + // Release the media player so it stops calling back to us + if (mMediaPlayer) + { + libvlc_media_player_stop(mMediaPlayer); + libvlc_media_player_release(mMediaPlayer); + libvlc_media_release(mMedia); + mMediaPlayer = NULL; + freeContext(); + } +} + diff --git a/es-core/src/components/VideoVlcComponent.h b/es-core/src/components/VideoVlcComponent.h new file mode 100644 index 0000000000..2700317a28 --- /dev/null +++ b/es-core/src/components/VideoVlcComponent.h @@ -0,0 +1,55 @@ +#ifndef _VIDEOVLCCOMPONENT_H_ +#define _VIDEOVLCCOMPONENT_H_ + +#include "platform.h" +#include GLHEADER + +#include "VideoComponent.h" +#include +#include "resources/TextureResource.h" + +struct VideoContext { + SDL_Surface* surface; + SDL_mutex* mutex; + bool valid; +}; + +class VideoVlcComponent : public VideoComponent +{ + // Structure that groups together the configuration of the video component + struct Configuration + { + unsigned startDelay; + bool showSnapshotNoVideo; + bool showSnapshotDelay; + std::string defaultVideoPath; + }; + +public: + static void setupVLC(); + + VideoVlcComponent(Window* window); + virtual ~VideoVlcComponent(); + + void render(const Eigen::Affine3f& parentTrans) override; + +private: + // Start the video Immediately + virtual void startVideo(); + // Stop the video + virtual void stopVideo(); + // Handle looping the video. Must be called periodically + virtual void handleLooping(); + + void setupContext(); + void freeContext(); + +private: + static libvlc_instance_t* mVLC; + libvlc_media_t* mMedia; + libvlc_media_player_t* mMediaPlayer; + VideoContext mContext; + std::shared_ptr mTexture; +}; + +#endif diff --git a/external/pugixml b/external/pugixml deleted file mode 160000 index d2deb420bc..0000000000 --- a/external/pugixml +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d2deb420bc70369faa12785df2b5dd4d390e523d From 029e8bd0400fe20362217dd2e6d607395d663b9d Mon Sep 17 00:00:00 2001 From: pjft Date: Sat, 25 Mar 2017 17:02:28 +0000 Subject: [PATCH 101/603] Fixes and tweaks to OMXPlayer work, by pjft - Correct handling of zombie processes left in memory - Add options to mute video - Fix resizing to work with theme refactorings introduced by jdrassa and zigurana --- .gitmodules | 3 + es-app/src/guis/GuiMenu.cpp | 66 ++++++++++---- .../src/views/gamelist/VideoGameListView.cpp | 2 +- es-core/src/Settings.cpp | 6 +- es-core/src/Window.cpp | 35 ++++++-- es-core/src/Window.h | 4 +- es-core/src/components/VideoComponent.cpp | 84 ++--------------- es-core/src/components/VideoComponent.h | 26 +++--- .../src/components/VideoPlayerComponent.cpp | 50 ++++++++++- es-core/src/components/VideoPlayerComponent.h | 13 +++ es-core/src/components/VideoVlcComponent.cpp | 89 ++++++++++++++++++- es-core/src/components/VideoVlcComponent.h | 15 ++++ external/pugixml | 1 + 13 files changed, 266 insertions(+), 128 deletions(-) create mode 160000 external/pugixml diff --git a/.gitmodules b/.gitmodules index e69de29bb2..ab38f31f31 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "external/pugixml"] + path = external/pugixml + url = https://github.com/zeux/pugixml.git diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index b210c283b1..98a00526d2 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -31,8 +31,8 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN // [version] auto openScrapeNow = [this] { mWindow->pushGui(new GuiScraperStart(mWindow)); }; - addEntry("SCRAPER", 0x777777FF, true, - [this, openScrapeNow] { + addEntry("SCRAPER", 0x777777FF, true, + [this, openScrapeNow] { auto s = new GuiSettings(mWindow, "SCRAPER"); // scrape from @@ -65,7 +65,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN mWindow->pushGui(s); }); - addEntry("SOUND SETTINGS", 0x777777FF, true, + addEntry("SOUND SETTINGS", 0x777777FF, true, [this] { auto s = new GuiSettings(mWindow, "SOUND SETTINGS"); @@ -74,11 +74,11 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN volume->setValue((float)VolumeControl::getInstance()->getVolume()); s->addWithLabel("SYSTEM VOLUME", volume); s->addSaveFunc([volume] { VolumeControl::getInstance()->setVolume((int)round(volume->getValue())); }); - + // disable sounds auto sounds_enabled = std::make_shared(mWindow); sounds_enabled->setState(Settings::getInstance()->getBool("EnableSounds")); - s->addWithLabel("ENABLE SOUNDS", sounds_enabled); + s->addWithLabel("ENABLE NAVIGATION SOUNDS", sounds_enabled); s->addSaveFunc([sounds_enabled] { Settings::getInstance()->setBool("EnableSounds", sounds_enabled->getState()); }); mWindow->pushGui(s); @@ -147,7 +147,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("THEME SET", theme_set); Window* window = mWindow; - s->addSaveFunc([window, theme_set] + s->addSaveFunc([window, theme_set] { bool needReload = false; if(Settings::getInstance()->getString("ThemeSet") != theme_set->getSelected()) @@ -174,13 +174,43 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN bool needReload = false; if (Settings::getInstance()->getString("GamelistViewStyle") != gamelist_style->getSelected()) needReload = true; - Settings::getInstance()->setString("GamelistViewStyle", gamelist_style->getSelected()); + Settings::getInstance()->setString("GamelistViewStyle", gamelist_style->getSelected()); if (needReload) ViewController::get()->reloadAll(); }); mWindow->pushGui(s); }); + addEntry("VIDEO PLAYER SETTINGS", 0x777777FF, true, + [this] { + auto s = new GuiSettings(mWindow, "VIDEO PLAYER SETTINGS"); + +#ifdef _RPI_ + // Video Player - VideoOmxPlayer + auto omx_player = std::make_shared(mWindow); + omx_player->setState(Settings::getInstance()->getBool("VideoOmxPlayer")); + s->addWithLabel("USE OMX VIDEO PLAYER (HW ACCELERATED)", omx_player); + s->addSaveFunc([omx_player] + { + // need to reload all views to re-create the right video components + bool needReload = false; + if(Settings::getInstance()->getBool("VideoOmxPlayer") != omx_player->getState()) + needReload = true; + + Settings::getInstance()->setBool("VideoOmxPlayer", omx_player->getState()); + + if(needReload) + ViewController::get()->reloadAll(); + }); +#endif + auto video_audio = std::make_shared(mWindow); + video_audio->setState(Settings::getInstance()->getBool("VideoAudio")); + s->addWithLabel("ENABLE VIDEO AUDIO", video_audio); + s->addSaveFunc([video_audio] { Settings::getInstance()->setBool("VideoAudio", video_audio->getState()); }); + + mWindow->pushGui(s); + }); + addEntry("OTHER SETTINGS", 0x777777FF, true, [this] { auto s = new GuiSettings(mWindow, "OTHER SETTINGS"); @@ -205,7 +235,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN mWindow->pushGui(s); }); - addEntry("CONFIGURE INPUT", 0x777777FF, true, + addEntry("CONFIGURE INPUT", 0x777777FF, true, [this] { Window* window = mWindow; window->pushGui(new GuiMsgBox(window, "ARE YOU SURE YOU WANT TO CONFIGURE INPUT?", "YES", @@ -215,10 +245,10 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN ); }); - addEntry("QUIT", 0x777777FF, true, + addEntry("QUIT", 0x777777FF, true, [this] { auto s = new GuiSettings(mWindow, "QUIT"); - + Window* window = mWindow; ComponentListRow row; @@ -234,8 +264,8 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN row.elements.clear(); row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", - [] { + window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", + [] { if(quitES("/tmp/es-sysrestart") != 0) LOG(LogWarning) << "Restart terminated with non-zero result!"; }, "NO", nullptr)); @@ -245,8 +275,8 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN row.elements.clear(); row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBox(window, "REALLY SHUTDOWN?", "YES", - [] { + window->pushGui(new GuiMsgBox(window, "REALLY SHUTDOWN?", "YES", + [] { if(quitES("/tmp/es-shutdown") != 0) LOG(LogWarning) << "Shutdown terminated with non-zero result!"; }, "NO", nullptr)); @@ -258,8 +288,8 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN { row.elements.clear(); row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBox(window, "REALLY QUIT?", "YES", - [] { + window->pushGui(new GuiMsgBox(window, "REALLY QUIT?", "YES", + [] { SDL_Event ev; ev.type = SDL_QUIT; SDL_PushEvent(&ev); @@ -293,7 +323,7 @@ void GuiMenu::onSizeChanged() void GuiMenu::addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func) { std::shared_ptr font = Font::get(FONT_SIZE_MEDIUM); - + // populate the list ComponentListRow row; row.addElement(std::make_shared(mWindow, name, font, color), true); @@ -303,7 +333,7 @@ void GuiMenu::addEntry(const char* name, unsigned int color, bool add_arrow, con std::shared_ptr bracket = makeArrow(mWindow); row.addElement(bracket, false); } - + row.makeAcceptInputHandler(func); mMenu.addRow(row); diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 7cf23cf697..9967497aae 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -61,7 +61,7 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : mVideo->setPosition(mSize.x() * 0.25f, mSize.y() * 0.4f); mVideo->setSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.4f); mVideo->setDefaultZIndex(30); - addChild(&mVideo); + addChild(mVideo); // metadata labels + values mLblRating.setText("Rating: "); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index fa9067f304..aa816fb6c2 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -79,11 +79,9 @@ void Settings::setDefaults() // This setting only applies to raspberry pi but set it for all platforms so // we don't get a warning if we encounter it on a different platform -#ifdef _RPI_ - mBoolMap["VideoOmxPlayer"] = true; -#else mBoolMap["VideoOmxPlayer"] = false; -#endif + mBoolMap["VideoAudio"] = true; + } template diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 78fe8ea6cd..b8c6bc1444 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -9,7 +9,7 @@ #include "components/HelpComponent.h" #include "components/ImageComponent.h" -Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), +Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), mAllowSleep(true), mSleeping(false), mTimeSinceLastInput(0) { mHelp = new HelpComponent(this); @@ -23,7 +23,7 @@ Window::~Window() // delete all our GUIs while(peekGui()) delete peekGui(); - + delete mHelp; } @@ -115,10 +115,20 @@ void Window::textInput(const char* text) void Window::input(InputConfig* config, Input input) { + if (mRenderScreenSaver) + { + mRenderScreenSaver = false; + + // Tell the GUI components the screensaver has stopped + for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) + (*i)->onScreenSaverDeactivate(); + } + if(mSleeping) { // wake up mTimeSinceLastInput = 0; + mSleeping = false; onWake(); return; @@ -157,11 +167,11 @@ void Window::update(int deltaTime) if(mFrameTimeElapsed > 500) { mAverageDeltaTime = mFrameTimeElapsed / mFrameCountElapsed; - + if(Settings::getInstance()->getBool("DrawFramerate")) { std::stringstream ss; - + // fps ss << std::fixed << std::setprecision(1) << (1000.0f * (float)mFrameCountElapsed / (float)mFrameTimeElapsed) << "fps, "; ss << std::fixed << std::setprecision(2) << ((float)mFrameTimeElapsed / (float)mFrameCountElapsed) << "ms"; @@ -218,6 +228,13 @@ void Window::render() unsigned int screensaverTime = (unsigned int)Settings::getInstance()->getInt("ScreenSaverTime"); if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0) { + if (!mRenderScreenSaver) + { + for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) + (*i)->onScreenSaverActivate(); + mRenderScreenSaver = true; + } + renderScreenSaver(); if (!isProcessing() && mAllowSleep) @@ -258,7 +275,7 @@ void Window::renderLoadingScreen() auto& font = mDefaultFonts.at(1); TextCache* cache = font->buildTextCache("LOADING...", 0, 0, 0x656565FF); - trans = trans.translate(Eigen::Vector3f(round((Renderer::getScreenWidth() - cache->metrics.size.x()) / 2.0f), + trans = trans.translate(Eigen::Vector3f(round((Renderer::getScreenWidth() - cache->metrics.size.x()) / 2.0f), round(Renderer::getScreenHeight() * 0.835f), 0.0f)); Renderer::setMatrix(trans); font->renderTextCache(cache); @@ -314,16 +331,16 @@ void Window::setHelpPrompts(const std::vector& prompts, const HelpSt // sort prompts so it goes [dpad_all] [dpad_u/d] [dpad_l/r] [a/b/x/y/l/r] [start/select] std::sort(addPrompts.begin(), addPrompts.end(), [](const HelpPrompt& a, const HelpPrompt& b) -> bool { - + static const char* map[] = { "up/down/left/right", "up/down", "left/right", - "a", "b", "x", "y", "l", "r", - "start", "select", + "a", "b", "x", "y", "l", "r", + "start", "select", NULL }; - + int i = 0; int aVal = 0; int bVal = 0; diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 5eee873a2c..6e2c93d3aa 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -17,6 +17,7 @@ class Window void pushGui(GuiComponent* gui); void removeGui(GuiComponent* gui); GuiComponent* peekGui(); + inline int getGuiStackSize() { return mGuiStack.size(); } void textInput(const char* text); void input(InputConfig* config, Input input); @@ -31,7 +32,7 @@ class Window inline bool isSleeping() const { return mSleeping; } bool getAllowSleep(); void setAllowSleep(bool sleep); - + void renderLoadingScreen(); void renderHelpPromptsEarly(); // used to render HelpPrompts before a fade @@ -55,6 +56,7 @@ class Window int mFrameTimeElapsed; int mFrameCountElapsed; int mAverageDeltaTime; + bool mRenderScreenSaver; std::unique_ptr mFrameDataText; diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 2c49a44e6a..f940ea86a3 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -2,6 +2,7 @@ #include "Renderer.h" #include "ThemeData.h" #include "Util.h" +#include "Window.h" #ifdef WIN32 #include #endif @@ -26,6 +27,10 @@ VideoComponent::VideoComponent(Window* window) : mConfig.showSnapshotDelay = false; mConfig.showSnapshotNoVideo = false; mConfig.startDelay = 0; + if (mWindow->getGuiStackSize() > 1) { + topWindow(false); + } + } VideoComponent::~VideoComponent() @@ -42,89 +47,12 @@ void VideoComponent::setOrigin(float originX, float originY) mStaticImage.setOrigin(originX, originY); } -void VideoComponent::setResize(float width, float height) -{ - mTargetSize << width, height; - mTargetIsMax = false; - mStaticImage.setResize(width, height); - resize(); -} - -void VideoComponent::setMaxSize(float width, float height) -{ - mTargetSize << width, height; - mTargetIsMax = true; - mStaticImage.setMaxSize(width, height); - resize(); -} - Eigen::Vector2f VideoComponent::getCenter() const { return Eigen::Vector2f(mPosition.x() - (getSize().x() * mOrigin.x()) + getSize().x() / 2, mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); } -void VideoComponent::resize() -{ - if(!mTexture) - return; - - const Eigen::Vector2f textureSize(mVideoWidth, mVideoHeight); - - if(textureSize.isZero()) - return; - - // SVG rasterization is determined by height (see SVGResource.cpp), and rasterization is done in terms of pixels - // if rounding is off enough in the rasterization step (for images with extreme aspect ratios), it can cause cutoff when the aspect ratio breaks - // so, we always make sure the resultant height is an integer to make sure cutoff doesn't happen, and scale width from that - // (you'll see this scattered throughout the function) - // this is probably not the best way, so if you're familiar with this problem and have a better solution, please make a pull request! - - if(mTargetIsMax) - { - - mSize = textureSize; - - Eigen::Vector2f resizeScale((mTargetSize.x() / mSize.x()), (mTargetSize.y() / mSize.y())); - - if(resizeScale.x() < resizeScale.y()) - { - mSize[0] *= resizeScale.x(); - mSize[1] *= resizeScale.x(); - }else{ - mSize[0] *= resizeScale.y(); - mSize[1] *= resizeScale.y(); - } - - // for SVG rasterization, always calculate width from rounded height (see comment above) - mSize[1] = round(mSize[1]); - mSize[0] = (mSize[1] / textureSize.y()) * textureSize.x(); - - }else{ - // if both components are set, we just stretch - // if no components are set, we don't resize at all - mSize = mTargetSize.isZero() ? textureSize : mTargetSize; - - // if only one component is set, we resize in a way that maintains aspect ratio - // for SVG rasterization, we always calculate width from rounded height (see comment above) - if(!mTargetSize.x() && mTargetSize.y()) - { - mSize[1] = round(mTargetSize.y()); - mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); - }else if(mTargetSize.x() && !mTargetSize.y()) - { - mSize[1] = round((mTargetSize.x() / textureSize.x()) * textureSize.y()); - mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); - } - } - - // mSize.y() should already be rounded - mTexture->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); - - onSizeChanged(); -} - - void VideoComponent::onSizeChanged() { // Update the embeded static image @@ -161,6 +89,8 @@ void VideoComponent::setImage(std::string path) return; mStaticImage.setImage(path); + // Make the image stretch to fill the video region + mStaticImage.setSize(getSize()); mFadeIn = 0.0f; mStaticImagePath = path; } diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index db3d9500f6..e172a11727 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -48,19 +48,6 @@ class VideoComponent : public GuiComponent void onSizeChanged() override; void setOpacity(unsigned char opacity) override; - // Resize the video to fit this size. If one axis is zero, scale that axis to maintain aspect ratio. - // If both are non-zero, potentially break the aspect ratio. If both are zero, no resizing. - // Can be set before or after a video is loaded. - // setMaxSize() and setResize() are mutually exclusive. - void setResize(float width, float height); - inline void setResize(const Eigen::Vector2f& size) { setResize(size.x(), size.y()); } - - // Resize the video to be as large as possible but fit within a box of this size. - // Can be set before or after a video is loaded. - // Never breaks the aspect ratio. setMaxSize() and setResize() are mutually exclusive. - void setMaxSize(float width, float height); - inline void setMaxSize(const Eigen::Vector2f& size) { setMaxSize(size.x(), size.y()); } - void render(const Eigen::Affine3f& parentTrans) override; virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; @@ -72,6 +59,19 @@ class VideoComponent : public GuiComponent virtual void update(int deltaTime); + // Resize the video to fit this size. If one axis is zero, scale that axis to maintain aspect ratio. + // If both are non-zero, potentially break the aspect ratio. If both are zero, no resizing. + // Can be set before or after a video is loaded. + // setMaxSize() and setResize() are mutually exclusive. + virtual void setResize(float width, float height) = 0; + inline void setResize(const Eigen::Vector2f& size) { setResize(size.x(), size.y()); } + + // Resize the video to be as large as possible but fit within a box of this size. + // Can be set before or after a video is loaded. + // Never breaks the aspect ratio. setMaxSize() and setResize() are mutually exclusive. + virtual void setMaxSize(float width, float height) = 0; + inline void setMaxSize(const Eigen::Vector2f& size) { setMaxSize(size.x(), size.y()); } + private: // Start the video Immediately virtual void startVideo() = 0; diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index fb44eb25d3..cc4645e1d2 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -2,6 +2,7 @@ #include "components/VideoPlayerComponent.h" #include "Renderer.h" #include "ThemeData.h" +#include "Settings.h" #include "Util.h" #include #include @@ -24,6 +25,24 @@ void VideoPlayerComponent::render(const Eigen::Affine3f& parentTrans) VideoComponent::render(parentTrans); } +void VideoPlayerComponent::setResize(float width, float height) +{ + setSize(width, height); + mTargetSize << width, height; + mTargetIsMax = false; + mStaticImage.setSize(width, height); + onSizeChanged(); +} + +void VideoPlayerComponent::setMaxSize(float width, float height) +{ + setSize(width, height); + mTargetSize << width, height; + mTargetIsMax = true; + mStaticImage.setMaxSize(width, height); + onSizeChanged(); +} + void VideoPlayerComponent::startVideo() { if (!mIsPlaying) { @@ -49,11 +68,13 @@ void VideoPlayerComponent::startVideo() { mPlayerPid = pid; // Update the playing state + signal(SIGCHLD, catch_child); mIsPlaying = true; mFadeIn = 0.0f; } else { + // Find out the pixel position of the video view and build a command line for // omxplayer to position it in the right place char buf[32]; @@ -62,10 +83,25 @@ void VideoPlayerComponent::startVideo() sprintf(buf, "%d,%d,%d,%d", (int)x, (int)y, (int)(x + mSize.x()), (int)(y + mSize.y())); // We need to specify the layer of 10000 or above to ensure the video is displayed on top // of our SDL display - const char* argv[] = { "", "--win", buf, "--layer", "10000", "--loop", "--no-osd", "", NULL }; + + const char* argv[] = { "", "--layer", "10010", "--loop", "--no-osd", "--aspect-mode", "letterbox", "--vol", "0", "--win", buf, "-b", "", "", "", "", NULL }; + + // check if we want to mute the audio + if (!Settings::getInstance()->getBool("VideoAudio")) + { + argv[8] = "-1000000"; + } + + // if we are rendering a video gamelist + if (!mTargetIsMax) + { + argv[6] = "stretch"; + } + + argv[11] = mPlayingVideoPath.c_str(); + const char* env[] = { "LD_LIBRARY_PATH=/opt/vc/libs:/usr/lib/omxplayer", NULL }; - // Fill in the empty argument with the video path - argv[7] = mPlayingVideoPath.c_str(); + // Redirect stdout int fdin = open("/dev/null", O_RDONLY); int fdout = open("/dev/null", O_WRONLY); @@ -73,12 +109,20 @@ void VideoPlayerComponent::startVideo() dup2(fdout, 1); // Run the omxplayer binary execve("/usr/bin/omxplayer.bin", (char**)argv, (char**)env); + _exit(EXIT_FAILURE); } } } } +void catch_child(int sig_num) +{ + /* when we get here, we know there's a zombie child waiting */ + int child_status; + wait(&child_status); +} + void VideoPlayerComponent::stopVideo() { mIsPlaying = false; diff --git a/es-core/src/components/VideoPlayerComponent.h b/es-core/src/components/VideoPlayerComponent.h index 45517e91af..27a098115e 100644 --- a/es-core/src/components/VideoPlayerComponent.h +++ b/es-core/src/components/VideoPlayerComponent.h @@ -7,6 +7,8 @@ #include "components/VideoComponent.h" +void catch_child(int sig_num); + class VideoPlayerComponent : public VideoComponent { public: @@ -15,6 +17,17 @@ class VideoPlayerComponent : public VideoComponent void render(const Eigen::Affine3f& parentTrans) override; + // Resize the video to fit this size. If one axis is zero, scale that axis to maintain aspect ratio. + // If both are non-zero, potentially break the aspect ratio. If both are zero, no resizing. + // Can be set before or after a video is loaded. + // setMaxSize() and setResize() are mutually exclusive. + void setResize(float width, float height); + + // Resize the video to be as large as possible but fit within a box of this size. + // Can be set before or after a video is loaded. + // Never breaks the aspect ratio. setMaxSize() and setResize() are mutually exclusive. + void setMaxSize(float width, float height); + private: // Start the video Immediately virtual void startVideo(); diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index e0da5003ef..47853e97f8 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -2,6 +2,7 @@ #include "Renderer.h" #include "ThemeData.h" #include "Util.h" +#include "Settings.h" #ifdef WIN32 #include #endif @@ -46,6 +47,82 @@ VideoVlcComponent::~VideoVlcComponent() { } +void VideoVlcComponent::setResize(float width, float height) +{ + mTargetSize << width, height; + mTargetIsMax = false; + mStaticImage.setResize(width, height); + resize(); +} + +void VideoVlcComponent::setMaxSize(float width, float height) +{ + mTargetSize << width, height; + mTargetIsMax = true; + mStaticImage.setMaxSize(width, height); + resize(); +} + +void VideoVlcComponent::resize() +{ + if(!mTexture) + return; + + const Eigen::Vector2f textureSize(mVideoWidth, mVideoHeight); + + if(textureSize.isZero()) + return; + + // SVG rasterization is determined by height (see SVGResource.cpp), and rasterization is done in terms of pixels + // if rounding is off enough in the rasterization step (for images with extreme aspect ratios), it can cause cutoff when the aspect ratio breaks + // so, we always make sure the resultant height is an integer to make sure cutoff doesn't happen, and scale width from that + // (you'll see this scattered throughout the function) + // this is probably not the best way, so if you're familiar with this problem and have a better solution, please make a pull request! + + if(mTargetIsMax) + { + + mSize = textureSize; + + Eigen::Vector2f resizeScale((mTargetSize.x() / mSize.x()), (mTargetSize.y() / mSize.y())); + + if(resizeScale.x() < resizeScale.y()) + { + mSize[0] *= resizeScale.x(); + mSize[1] *= resizeScale.x(); + }else{ + mSize[0] *= resizeScale.y(); + mSize[1] *= resizeScale.y(); + } + + // for SVG rasterization, always calculate width from rounded height (see comment above) + mSize[1] = round(mSize[1]); + mSize[0] = (mSize[1] / textureSize.y()) * textureSize.x(); + + }else{ + // if both components are set, we just stretch + // if no components are set, we don't resize at all + mSize = mTargetSize.isZero() ? textureSize : mTargetSize; + + // if only one component is set, we resize in a way that maintains aspect ratio + // for SVG rasterization, we always calculate width from rounded height (see comment above) + if(!mTargetSize.x() && mTargetSize.y()) + { + mSize[1] = round(mTargetSize.y()); + mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); + }else if(mTargetSize.x() && !mTargetSize.y()) + { + mSize[1] = round((mTargetSize.x() / textureSize.x()) * textureSize.y()); + mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); + } + } + + // mSize.y() should already be rounded + mTexture->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); + + onSizeChanged(); +} + void VideoVlcComponent::render(const Eigen::Affine3f& parentTrans) { VideoComponent::render(parentTrans); @@ -55,7 +132,7 @@ void VideoVlcComponent::render(const Eigen::Affine3f& parentTrans) GuiComponent::renderChildren(trans); Renderer::setMatrix(trans); - + if (mIsPlaying && mContext.valid) { float tex_offs_x = 0.0f; @@ -135,6 +212,7 @@ void VideoVlcComponent::setupContext() mContext.surface = SDL_CreateRGBSurface(SDL_SWSURFACE, (int)mVideoWidth, (int)mVideoHeight, 32, 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff); mContext.mutex = SDL_CreateMutex(); mContext.valid = true; + resize(); } } @@ -153,7 +231,9 @@ void VideoVlcComponent::setupVLC() // If VLC hasn't been initialised yet then do it now if (!mVLC) { - const char* args[] = { "--quiet" }; + const char* args[] = { "--quiet", "", "", "" }; + // check if we want to mute the audio + mVLC = libvlc_new(sizeof(args) / sizeof(args[0]), args); } } @@ -217,6 +297,11 @@ void VideoVlcComponent::startVideo() // Setup the media player mMediaPlayer = libvlc_media_player_new_from_media(mMedia); + if (!Settings::getInstance()->getBool("VideoAudio")) + { + libvlc_audio_set_mute(mMediaPlayer, 1); + } + libvlc_media_player_play(mMediaPlayer); libvlc_video_set_callbacks(mMediaPlayer, lock, unlock, display, (void*)&mContext); libvlc_video_set_format(mMediaPlayer, "RGBA", (int)mVideoWidth, (int)mVideoHeight, (int)mVideoWidth * 4); diff --git a/es-core/src/components/VideoVlcComponent.h b/es-core/src/components/VideoVlcComponent.h index 2700317a28..c3c6ad5495 100644 --- a/es-core/src/components/VideoVlcComponent.h +++ b/es-core/src/components/VideoVlcComponent.h @@ -33,7 +33,22 @@ class VideoVlcComponent : public VideoComponent void render(const Eigen::Affine3f& parentTrans) override; + + // Resize the video to fit this size. If one axis is zero, scale that axis to maintain aspect ratio. + // If both are non-zero, potentially break the aspect ratio. If both are zero, no resizing. + // Can be set before or after a video is loaded. + // setMaxSize() and setResize() are mutually exclusive. + void setResize(float width, float height); + + // Resize the video to be as large as possible but fit within a box of this size. + // Can be set before or after a video is loaded. + // Never breaks the aspect ratio. setMaxSize() and setResize() are mutually exclusive. + void setMaxSize(float width, float height); + private: + // Calculates the correct mSize from our resizing information (set by setResize/setMaxSize). + // Used internally whenever the resizing parameters or texture change. + void resize(); // Start the video Immediately virtual void startVideo(); // Stop the video diff --git a/external/pugixml b/external/pugixml new file mode 160000 index 0000000000..d2deb420bc --- /dev/null +++ b/external/pugixml @@ -0,0 +1 @@ +Subproject commit d2deb420bc70369faa12785df2b5dd4d390e523d From c32dee41caad5751071af4dff49773dad8b0f8c9 Mon Sep 17 00:00:00 2001 From: hex007 Date: Tue, 30 May 2017 09:12:57 -0700 Subject: [PATCH 102/603] Bug fixes : - Incorrect strech in VideoComponent - Reboved blank params in VideoVlcComponent --- es-core/src/components/VideoComponent.cpp | 2 -- es-core/src/components/VideoVlcComponent.cpp | 4 +--- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index f940ea86a3..0edae8deb6 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -89,8 +89,6 @@ void VideoComponent::setImage(std::string path) return; mStaticImage.setImage(path); - // Make the image stretch to fill the video region - mStaticImage.setSize(getSize()); mFadeIn = 0.0f; mStaticImagePath = path; } diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 47853e97f8..5e1be839c7 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -231,9 +231,7 @@ void VideoVlcComponent::setupVLC() // If VLC hasn't been initialised yet then do it now if (!mVLC) { - const char* args[] = { "--quiet", "", "", "" }; - // check if we want to mute the audio - + const char* args[] = { "--quiet" }; mVLC = libvlc_new(sizeof(args) / sizeof(args[0]), args); } } From fb93a4d2b632a1b3d762c88ff28a78bd81a94ba7 Mon Sep 17 00:00:00 2001 From: hex007 Date: Tue, 23 May 2017 17:41:14 -0700 Subject: [PATCH 103/603] Added None Transition --- es-app/src/guis/GuiMenu.cpp | 1 + es-app/src/views/SystemView.cpp | 15 ++++++++++++--- es-app/src/views/ViewController.cpp | 21 +++++++++++++++++++-- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 98a00526d2..5bdc9232f5 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -127,6 +127,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN std::vector transitions; transitions.push_back("fade"); transitions.push_back("slide"); + transitions.push_back("none"); for(auto it = transitions.begin(); it != transitions.end(); it++) transition_style->add(*it, *it, Settings::getInstance()->getString("TransitionStyle") == *it); s->addWithLabel("TRANSITION STYLE", transition_style); diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index d77b192e8c..30294bbb23 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -264,10 +264,10 @@ void SystemView::onCursorChanged(const CursorState& state) this->mExtrasCamOffset = endPos; }, 500); - } - else{ // slide + } else if (Settings::getInstance()->getString("TransitionStyle") == "slide") { + // slide anim = new LambdaAnimation( - [startPos, endPos, posMax, this](float t) + [this, startPos, endPos, posMax](float t) { t -= 1; float f = lerp(startPos, endPos, t*t*t + 1); @@ -279,8 +279,17 @@ void SystemView::onCursorChanged(const CursorState& state) this->mCamOffset = f; this->mExtrasCamOffset = f; }, 500); + } else { + // None + anim = new LambdaAnimation( + [this, endPos](float t) + { + this->mCamOffset = endPos; + this->mExtrasCamOffset = endPos; + }, 1); } + setAnimation(anim, 0, nullptr, false, 0); } diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index fffed0a4f9..81fef58518 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -188,10 +188,18 @@ void ViewController::playViewTransition() }else{ advanceAnimation(0, (int)(mFadeOpacity * FADE_DURATION)); } - }else{ + } else if (Settings::getInstance()->getString("TransitionStyle") == "slide"){ // slide setAnimation(new MoveCameraAnimation(mCamera, target)); updateHelpPrompts(); // update help prompts immediately + } else { + // none + setAnimation(new LambdaAnimation( + [this, target](float t) + { + this->mCamera.translation() = -target; + }, 1)); + updateHelpPrompts(); } } @@ -236,7 +244,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) setAnimation(new LambdaAnimation(fadeFunc, 800), 0, nullptr, true); this->onFileChanged(game, FILE_METADATA_CHANGED); }); - }else{ + } else if (Settings::getInstance()->getString("TransitionStyle") == "slide"){ // move camera to zoom in on center + fade out, launch game, come back in setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), 0, [this, origCamera, center, game] { @@ -246,6 +254,15 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), 0, nullptr, true); this->onFileChanged(game, FILE_METADATA_CHANGED); }); + } else { + setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 10), 0, [this, origCamera, center, game] + { + game->getSystem()->launchGame(mWindow, game); + mCamera = origCamera; + mLockInput = false; + setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 10), 0, nullptr, true); + this->onFileChanged(game, FILE_METADATA_CHANGED); + }); } } From 2ec037de2f73bf826bab32eefb198cfab82de020 Mon Sep 17 00:00:00 2001 From: hex007 Date: Thu, 25 May 2017 17:52:49 -0700 Subject: [PATCH 104/603] Added Instant Transition --- es-app/src/guis/GuiMenu.cpp | 1 + es-app/src/views/SystemView.cpp | 20 ++++++++++++++++++-- es-app/src/views/ViewController.cpp | 10 ++++++---- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 5bdc9232f5..6298cf9362 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -127,6 +127,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN std::vector transitions; transitions.push_back("fade"); transitions.push_back("slide"); + transitions.push_back("instant"); transitions.push_back("none"); for(auto it = transitions.begin(); it != transitions.end(); it++) transition_style->add(*it, *it, Settings::getInstance()->getString("TransitionStyle") == *it); diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 30294bbb23..1103470f6a 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -237,7 +237,8 @@ void SystemView::onCursorChanged(const CursorState& state) return; Animation* anim; - if(Settings::getInstance()->getString("TransitionStyle") == "fade") + std::string transition_style = Settings::getInstance()->getString("TransitionStyle"); + if(transition_style == "fade") { float startExtrasFade = mExtrasFadeOpacity; anim = new LambdaAnimation( @@ -264,7 +265,7 @@ void SystemView::onCursorChanged(const CursorState& state) this->mExtrasCamOffset = endPos; }, 500); - } else if (Settings::getInstance()->getString("TransitionStyle") == "slide") { + } else if (transition_style == "slide") { // slide anim = new LambdaAnimation( [this, startPos, endPos, posMax](float t) @@ -279,6 +280,21 @@ void SystemView::onCursorChanged(const CursorState& state) this->mCamOffset = f; this->mExtrasCamOffset = f; }, 500); + } else if (transition_style == "instant") { + // instant + anim = new LambdaAnimation( + [this, startPos, endPos, posMax](float t) + { + t -= 1; + float f = lerp(startPos, endPos, t*t*t + 1); + if(f < 0) + f += posMax; + if(f >= posMax) + f -= posMax; + + this->mCamOffset = f; + this->mExtrasCamOffset = endPos; + }, 500); } else { // None anim = new LambdaAnimation( diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 81fef58518..e0836e12f1 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -160,7 +160,8 @@ void ViewController::playViewTransition() if(target == -mCamera.translation() && !isAnimationPlaying(0)) return; - if(Settings::getInstance()->getString("TransitionStyle") == "fade") + std::string transition_style = Settings::getInstance()->getString("TransitionStyle"); + if(transition_style == "fade") { // fade // stop whatever's currently playing, leaving mFadeOpacity wherever it is @@ -188,7 +189,7 @@ void ViewController::playViewTransition() }else{ advanceAnimation(0, (int)(mFadeOpacity * FADE_DURATION)); } - } else if (Settings::getInstance()->getString("TransitionStyle") == "slide"){ + } else if (transition_style == "slide" || transition_style == "instant"){ // slide setAnimation(new MoveCameraAnimation(mCamera, target)); updateHelpPrompts(); // update help prompts immediately @@ -229,7 +230,8 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) stopAnimation(1); // make sure the fade in isn't still playing mLockInput = true; - if(Settings::getInstance()->getString("TransitionStyle") == "fade") + std::string transition_style = Settings::getInstance()->getString("TransitionStyle"); + if(transition_style == "fade") { // fade out, launch game, fade back in auto fadeFunc = [this](float t) { @@ -244,7 +246,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) setAnimation(new LambdaAnimation(fadeFunc, 800), 0, nullptr, true); this->onFileChanged(game, FILE_METADATA_CHANGED); }); - } else if (Settings::getInstance()->getString("TransitionStyle") == "slide"){ + } else if (transition_style == "slide" || transition_style == "instant"){ // move camera to zoom in on center + fade out, launch game, come back in setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), 0, [this, origCamera, center, game] { From de643bb1140d75b6a8605f79866c4f1f2a7340e3 Mon Sep 17 00:00:00 2001 From: jrassa Date: Tue, 30 May 2017 22:41:41 -0400 Subject: [PATCH 105/603] use clip rects to prevent views overflow onto other views --- es-app/src/views/SystemView.cpp | 2 ++ es-app/src/views/gamelist/IGameListView.cpp | 8 ++++++++ es-app/src/views/gamelist/IGameListView.h | 2 ++ 3 files changed, 12 insertions(+) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index d77b192e8c..c7ec55e63b 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -455,6 +455,7 @@ void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float u else extrasTrans.translate(Eigen::Vector3f(0, (i - mExtrasCamOffset) * mSize.y(), 0)); + Renderer::pushClipRect(Eigen::Vector2i(extrasTrans.translation()[0], extrasTrans.translation()[1]), mSize.cast()); SystemViewData data = mEntries.at(index).data; for(unsigned int j = 0; j < data.backgroundExtras.size(); j++) { @@ -463,6 +464,7 @@ void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float u extra->render(extrasTrans); } } + Renderer::popClipRect(); } Renderer::popClipRect(); } diff --git a/es-app/src/views/gamelist/IGameListView.cpp b/es-app/src/views/gamelist/IGameListView.cpp index 69799cdd90..5ea2ce83f9 100644 --- a/es-app/src/views/gamelist/IGameListView.cpp +++ b/es-app/src/views/gamelist/IGameListView.cpp @@ -41,3 +41,11 @@ HelpStyle IGameListView::getHelpStyle() style.applyTheme(mTheme, getName()); return style; } + +void IGameListView::render(const Eigen::Affine3f& parentTrans) +{ + Eigen::Affine3f trans = parentTrans * getTransform(); + Renderer::pushClipRect(Eigen::Vector2i(trans.translation()[0],trans.translation()[1]), Eigen::Vector2i(Renderer::getScreenWidth(), Renderer::getScreenHeight())); + renderChildren(trans); + Renderer::popClipRect(); +} diff --git a/es-app/src/views/gamelist/IGameListView.h b/es-app/src/views/gamelist/IGameListView.h index ec98a9de97..5a44fbbee1 100644 --- a/es-app/src/views/gamelist/IGameListView.h +++ b/es-app/src/views/gamelist/IGameListView.h @@ -37,6 +37,8 @@ class IGameListView : public GuiComponent virtual const char* getName() const = 0; virtual HelpStyle getHelpStyle() override; + + void render(const Eigen::Affine3f& parentTrans) override; protected: FileData* mRoot; std::shared_ptr mTheme; From fc3e08b449c62414b526bc260956edb1022b41a5 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Fri, 2 Dec 2016 23:00:10 +0000 Subject: [PATCH 106/603] Allow configuring of the hotkey button * add hotkey button gfx and hotkey to input configuration * prompt user if no hotkey set, and offer to use select * if no hotkey is set, still save an entry with key id 0, for backward compatibility --- data/ResourceUtil.cpp | 146 ++++++++-------- data/Resources.h | 147 ++++++++-------- data/converted/help_button_hotkey_svg.cpp | 199 ++++++++++++++++++++++ data/resources/help/button_hotkey.svg | 22 +++ es-core/CMakeLists.txt | 1 + es-core/src/InputConfig.h | 8 +- es-core/src/guis/GuiInputConfig.cpp | 40 ++++- 7 files changed, 409 insertions(+), 154 deletions(-) create mode 100644 data/converted/help_button_hotkey_svg.cpp create mode 100644 data/resources/help/button_hotkey.svg diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index 48b92defe1..c54676a990 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -2,101 +2,103 @@ #include "Resources.h" -const size_t res2hNrOfFiles = 45; +const size_t res2hNrOfFiles = 46; const Res2hEntry res2hFiles[res2hNrOfFiles] = { + {":/busy_2.svg", busy_2_svg_size, busy_2_svg_data}, + {":/frame.png", frame_png_size, frame_png_data}, {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, + {":/busy_0.svg", busy_0_svg_size, busy_0_svg_data}, {":/star_filled.svg", star_filled_svg_size, star_filled_svg_data}, - {":/window_icon_256.png", window_icon_256_png_size, window_icon_256_png_data}, - {":/off.svg", off_svg_size, off_svg_data}, - {":/button_filled.png", button_filled_png_size, button_filled_png_data}, - {":/checkbox_unchecked.svg", checkbox_unchecked_svg_size, checkbox_unchecked_svg_data}, - {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, + {":/button.png", button_png_size, button_png_data}, + {":/option_arrow.svg", option_arrow_svg_size, option_arrow_svg_data}, {":/on.svg", on_svg_size, on_svg_data}, - {":/busy_3.svg", busy_3_svg_size, busy_3_svg_data}, - {":/opensans_hebrew_condensed_light.ttf", opensans_hebrew_condensed_light_ttf_size, opensans_hebrew_condensed_light_ttf_data}, - {":/checkbox_checked.svg", checkbox_checked_svg_size, checkbox_checked_svg_data}, + {":/busy_1.svg", busy_1_svg_size, busy_1_svg_data}, + {":/arrow.svg", arrow_svg_size, arrow_svg_data}, {":/textinput_ninepatch.png", textinput_ninepatch_png_size, textinput_ninepatch_png_data}, - {":/option_arrow.svg", option_arrow_svg_size, option_arrow_svg_data}, - {":/textinput_ninepatch_active.png", textinput_ninepatch_active_png_size, textinput_ninepatch_active_png_data}, {":/splash.svg", splash_svg_size, splash_svg_data}, - {":/frame.png", frame_png_size, frame_png_data}, - {":/slider_knob.svg", slider_knob_svg_size, slider_knob_svg_data}, - {":/button.png", button_png_size, button_png_data}, - {":/busy_1.svg", busy_1_svg_size, busy_1_svg_data}, + {":/window_icon_256.png", window_icon_256_png_size, window_icon_256_png_data}, {":/fav_remove.svg", fav_remove_svg_size, fav_remove_svg_data}, - {":/arrow.svg", arrow_svg_size, arrow_svg_data}, - {":/star_unfilled.svg", star_unfilled_svg_size, star_unfilled_svg_data}, - {":/busy_2.svg", busy_2_svg_size, busy_2_svg_data}, - {":/busy_0.svg", busy_0_svg_size, busy_0_svg_data}, + {":/slider_knob.svg", slider_knob_svg_size, slider_knob_svg_data}, {":/fav_add.svg", fav_add_svg_size, fav_add_svg_data}, - {":/help/dpad_leftright.svg", help_dpad_leftright_svg_size, help_dpad_leftright_svg_data}, + {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, + {":/off.svg", off_svg_size, off_svg_data}, + {":/textinput_ninepatch_active.png", textinput_ninepatch_active_png_size, textinput_ninepatch_active_png_data}, + {":/busy_3.svg", busy_3_svg_size, busy_3_svg_data}, + {":/star_unfilled.svg", star_unfilled_svg_size, star_unfilled_svg_data}, + {":/checkbox_checked.svg", checkbox_checked_svg_size, checkbox_checked_svg_data}, + {":/button_filled.png", button_filled_png_size, button_filled_png_data}, + {":/checkbox_unchecked.svg", checkbox_unchecked_svg_size, checkbox_unchecked_svg_data}, + {":/opensans_hebrew_condensed_light.ttf", opensans_hebrew_condensed_light_ttf_size, opensans_hebrew_condensed_light_ttf_data}, + {":/help/dpad_right.svg", help_dpad_right_svg_size, help_dpad_right_svg_data}, {":/help/dpad_all.svg", help_dpad_all_svg_size, help_dpad_all_svg_data}, {":/help/button_x.svg", help_button_x_svg_size, help_button_x_svg_data}, - {":/help/button_a.svg", help_button_a_svg_size, help_button_a_svg_data}, - {":/help/button_l.svg", help_button_l_svg_size, help_button_l_svg_data}, - {":/help/dpad_down.svg", help_dpad_down_svg_size, help_dpad_down_svg_data}, - {":/help/analog_up.svg", help_analog_up_svg_size, help_analog_up_svg_data}, - {":/help/dpad_left.svg", help_dpad_left_svg_size, help_dpad_left_svg_data}, - {":/help/button_start.svg", help_button_start_svg_size, help_button_start_svg_data}, {":/help/dpad_up.svg", help_dpad_up_svg_size, help_dpad_up_svg_data}, + {":/help/dpad_updown.svg", help_dpad_updown_svg_size, help_dpad_updown_svg_data}, {":/help/analog_down.svg", help_analog_down_svg_size, help_analog_down_svg_data}, - {":/help/button_y.svg", help_button_y_svg_size, help_button_y_svg_data}, + {":/help/button_r.svg", help_button_r_svg_size, help_button_r_svg_data}, + {":/help/analog_up.svg", help_analog_up_svg_size, help_analog_up_svg_data}, + {":/help/button_start.svg", help_button_start_svg_size, help_button_start_svg_data}, + {":/help/button_a.svg", help_button_a_svg_size, help_button_a_svg_data}, + {":/help/analog_right.svg", help_analog_right_svg_size, help_analog_right_svg_data}, + {":/help/button_hotkey.svg", help_button_hotkey_svg_size, help_button_hotkey_svg_data}, + {":/help/dpad_left.svg", help_dpad_left_svg_size, help_dpad_left_svg_data}, {":/help/button_select.svg", help_button_select_svg_size, help_button_select_svg_data}, + {":/help/button_l.svg", help_button_l_svg_size, help_button_l_svg_data}, + {":/help/analog_left.svg", help_analog_left_svg_size, help_analog_left_svg_data}, {":/help/button_b.svg", help_button_b_svg_size, help_button_b_svg_data}, - {":/help/dpad_updown.svg", help_dpad_updown_svg_size, help_dpad_updown_svg_data}, - {":/help/dpad_right.svg", help_dpad_right_svg_size, help_dpad_right_svg_data}, - {":/help/button_r.svg", help_button_r_svg_size, help_button_r_svg_data}, {":/help/analog_thumb.svg", help_analog_thumb_svg_size, help_analog_thumb_svg_data}, - {":/help/analog_left.svg", help_analog_left_svg_size, help_analog_left_svg_data}, - {":/help/analog_right.svg", help_analog_right_svg_size, help_analog_right_svg_data} + {":/help/dpad_down.svg", help_dpad_down_svg_size, help_dpad_down_svg_data}, + {":/help/dpad_leftright.svg", help_dpad_leftright_svg_size, help_dpad_leftright_svg_data}, + {":/help/button_y.svg", help_button_y_svg_size, help_button_y_svg_data} }; res2hMapType::value_type mapTemp[] = { - std::make_pair(":/scroll_gradient.png", res2hFiles[0]), - std::make_pair(":/star_filled.svg", res2hFiles[1]), - std::make_pair(":/window_icon_256.png", res2hFiles[2]), - std::make_pair(":/off.svg", res2hFiles[3]), - std::make_pair(":/button_filled.png", res2hFiles[4]), - std::make_pair(":/checkbox_unchecked.svg", res2hFiles[5]), - std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[6]), + std::make_pair(":/busy_2.svg", res2hFiles[0]), + std::make_pair(":/frame.png", res2hFiles[1]), + std::make_pair(":/scroll_gradient.png", res2hFiles[2]), + std::make_pair(":/busy_0.svg", res2hFiles[3]), + std::make_pair(":/star_filled.svg", res2hFiles[4]), + std::make_pair(":/button.png", res2hFiles[5]), + std::make_pair(":/option_arrow.svg", res2hFiles[6]), std::make_pair(":/on.svg", res2hFiles[7]), - std::make_pair(":/busy_3.svg", res2hFiles[8]), - std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[9]), - std::make_pair(":/checkbox_checked.svg", res2hFiles[10]), - std::make_pair(":/textinput_ninepatch.png", res2hFiles[11]), - std::make_pair(":/option_arrow.svg", res2hFiles[12]), - std::make_pair(":/textinput_ninepatch_active.png", res2hFiles[13]), - std::make_pair(":/splash.svg", res2hFiles[14]), - std::make_pair(":/frame.png", res2hFiles[15]), - std::make_pair(":/slider_knob.svg", res2hFiles[16]), - std::make_pair(":/button.png", res2hFiles[17]), - std::make_pair(":/busy_1.svg", res2hFiles[18]), - std::make_pair(":/fav_remove.svg", res2hFiles[19]), - std::make_pair(":/arrow.svg", res2hFiles[20]), - std::make_pair(":/star_unfilled.svg", res2hFiles[21]), - std::make_pair(":/busy_2.svg", res2hFiles[22]), - std::make_pair(":/busy_0.svg", res2hFiles[23]), - std::make_pair(":/fav_add.svg", res2hFiles[24]), - std::make_pair(":/help/dpad_leftright.svg", res2hFiles[25]), + std::make_pair(":/busy_1.svg", res2hFiles[8]), + std::make_pair(":/arrow.svg", res2hFiles[9]), + std::make_pair(":/textinput_ninepatch.png", res2hFiles[10]), + std::make_pair(":/splash.svg", res2hFiles[11]), + std::make_pair(":/window_icon_256.png", res2hFiles[12]), + std::make_pair(":/fav_remove.svg", res2hFiles[13]), + std::make_pair(":/slider_knob.svg", res2hFiles[14]), + std::make_pair(":/fav_add.svg", res2hFiles[15]), + std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[16]), + std::make_pair(":/off.svg", res2hFiles[17]), + std::make_pair(":/textinput_ninepatch_active.png", res2hFiles[18]), + std::make_pair(":/busy_3.svg", res2hFiles[19]), + std::make_pair(":/star_unfilled.svg", res2hFiles[20]), + std::make_pair(":/checkbox_checked.svg", res2hFiles[21]), + std::make_pair(":/button_filled.png", res2hFiles[22]), + std::make_pair(":/checkbox_unchecked.svg", res2hFiles[23]), + std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[24]), + std::make_pair(":/help/dpad_right.svg", res2hFiles[25]), std::make_pair(":/help/dpad_all.svg", res2hFiles[26]), std::make_pair(":/help/button_x.svg", res2hFiles[27]), - std::make_pair(":/help/button_a.svg", res2hFiles[28]), - std::make_pair(":/help/button_l.svg", res2hFiles[29]), - std::make_pair(":/help/dpad_down.svg", res2hFiles[30]), - std::make_pair(":/help/analog_up.svg", res2hFiles[31]), - std::make_pair(":/help/dpad_left.svg", res2hFiles[32]), + std::make_pair(":/help/dpad_up.svg", res2hFiles[28]), + std::make_pair(":/help/dpad_updown.svg", res2hFiles[29]), + std::make_pair(":/help/analog_down.svg", res2hFiles[30]), + std::make_pair(":/help/button_r.svg", res2hFiles[31]), + std::make_pair(":/help/analog_up.svg", res2hFiles[32]), std::make_pair(":/help/button_start.svg", res2hFiles[33]), - std::make_pair(":/help/dpad_up.svg", res2hFiles[34]), - std::make_pair(":/help/analog_down.svg", res2hFiles[35]), - std::make_pair(":/help/button_y.svg", res2hFiles[36]), - std::make_pair(":/help/button_select.svg", res2hFiles[37]), - std::make_pair(":/help/button_b.svg", res2hFiles[38]), - std::make_pair(":/help/dpad_updown.svg", res2hFiles[39]), - std::make_pair(":/help/dpad_right.svg", res2hFiles[40]), - std::make_pair(":/help/button_r.svg", res2hFiles[41]), + std::make_pair(":/help/button_a.svg", res2hFiles[34]), + std::make_pair(":/help/analog_right.svg", res2hFiles[35]), + std::make_pair(":/help/button_hotkey.svg", res2hFiles[36]), + std::make_pair(":/help/dpad_left.svg", res2hFiles[37]), + std::make_pair(":/help/button_select.svg", res2hFiles[38]), + std::make_pair(":/help/button_l.svg", res2hFiles[39]), + std::make_pair(":/help/analog_left.svg", res2hFiles[40]), + std::make_pair(":/help/button_b.svg", res2hFiles[41]), std::make_pair(":/help/analog_thumb.svg", res2hFiles[42]), - std::make_pair(":/help/analog_left.svg", res2hFiles[43]), - std::make_pair(":/help/analog_right.svg", res2hFiles[44]) + std::make_pair(":/help/dpad_down.svg", res2hFiles[43]), + std::make_pair(":/help/dpad_leftright.svg", res2hFiles[44]), + std::make_pair(":/help/button_y.svg", res2hFiles[45]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 25268351fb..578d07e243 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -5,83 +5,83 @@ #include #include +extern const size_t busy_2_svg_size; +extern const unsigned char busy_2_svg_data[]; + +extern const size_t frame_png_size; +extern const unsigned char frame_png_data[]; + extern const size_t scroll_gradient_png_size; extern const unsigned char scroll_gradient_png_data[]; +extern const size_t busy_0_svg_size; +extern const unsigned char busy_0_svg_data[]; + extern const size_t star_filled_svg_size; extern const unsigned char star_filled_svg_data[]; -extern const size_t window_icon_256_png_size; -extern const unsigned char window_icon_256_png_data[]; - -extern const size_t off_svg_size; -extern const unsigned char off_svg_data[]; - -extern const size_t button_filled_png_size; -extern const unsigned char button_filled_png_data[]; - -extern const size_t checkbox_unchecked_svg_size; -extern const unsigned char checkbox_unchecked_svg_data[]; +extern const size_t button_png_size; +extern const unsigned char button_png_data[]; -extern const size_t opensans_hebrew_condensed_regular_ttf_size; -extern const unsigned char opensans_hebrew_condensed_regular_ttf_data[]; +extern const size_t option_arrow_svg_size; +extern const unsigned char option_arrow_svg_data[]; extern const size_t on_svg_size; extern const unsigned char on_svg_data[]; -extern const size_t busy_3_svg_size; -extern const unsigned char busy_3_svg_data[]; - -extern const size_t opensans_hebrew_condensed_light_ttf_size; -extern const unsigned char opensans_hebrew_condensed_light_ttf_data[]; +extern const size_t busy_1_svg_size; +extern const unsigned char busy_1_svg_data[]; -extern const size_t checkbox_checked_svg_size; -extern const unsigned char checkbox_checked_svg_data[]; +extern const size_t arrow_svg_size; +extern const unsigned char arrow_svg_data[]; extern const size_t textinput_ninepatch_png_size; extern const unsigned char textinput_ninepatch_png_data[]; -extern const size_t option_arrow_svg_size; -extern const unsigned char option_arrow_svg_data[]; - -extern const size_t textinput_ninepatch_active_png_size; -extern const unsigned char textinput_ninepatch_active_png_data[]; - extern const size_t splash_svg_size; extern const unsigned char splash_svg_data[]; -extern const size_t frame_png_size; -extern const unsigned char frame_png_data[]; +extern const size_t window_icon_256_png_size; +extern const unsigned char window_icon_256_png_data[]; + +extern const size_t fav_remove_svg_size; +extern const unsigned char fav_remove_svg_data[]; extern const size_t slider_knob_svg_size; extern const unsigned char slider_knob_svg_data[]; -extern const size_t button_png_size; -extern const unsigned char button_png_data[]; +extern const size_t fav_add_svg_size; +extern const unsigned char fav_add_svg_data[]; -extern const size_t busy_1_svg_size; -extern const unsigned char busy_1_svg_data[]; +extern const size_t opensans_hebrew_condensed_regular_ttf_size; +extern const unsigned char opensans_hebrew_condensed_regular_ttf_data[]; -extern const size_t fav_remove_svg_size; -extern const unsigned char fav_remove_svg_data[]; +extern const size_t off_svg_size; +extern const unsigned char off_svg_data[]; -extern const size_t arrow_svg_size; -extern const unsigned char arrow_svg_data[]; +extern const size_t textinput_ninepatch_active_png_size; +extern const unsigned char textinput_ninepatch_active_png_data[]; + +extern const size_t busy_3_svg_size; +extern const unsigned char busy_3_svg_data[]; extern const size_t star_unfilled_svg_size; extern const unsigned char star_unfilled_svg_data[]; -extern const size_t busy_2_svg_size; -extern const unsigned char busy_2_svg_data[]; +extern const size_t checkbox_checked_svg_size; +extern const unsigned char checkbox_checked_svg_data[]; -extern const size_t busy_0_svg_size; -extern const unsigned char busy_0_svg_data[]; +extern const size_t button_filled_png_size; +extern const unsigned char button_filled_png_data[]; -extern const size_t fav_add_svg_size; -extern const unsigned char fav_add_svg_data[]; +extern const size_t checkbox_unchecked_svg_size; +extern const unsigned char checkbox_unchecked_svg_data[]; -extern const size_t help_dpad_leftright_svg_size; -extern const unsigned char help_dpad_leftright_svg_data[]; +extern const size_t opensans_hebrew_condensed_light_ttf_size; +extern const unsigned char opensans_hebrew_condensed_light_ttf_data[]; + +extern const size_t help_dpad_right_svg_size; +extern const unsigned char help_dpad_right_svg_data[]; extern const size_t help_dpad_all_svg_size; extern const unsigned char help_dpad_all_svg_data[]; @@ -89,56 +89,59 @@ extern const unsigned char help_dpad_all_svg_data[]; extern const size_t help_button_x_svg_size; extern const unsigned char help_button_x_svg_data[]; -extern const size_t help_button_a_svg_size; -extern const unsigned char help_button_a_svg_data[]; +extern const size_t help_dpad_up_svg_size; +extern const unsigned char help_dpad_up_svg_data[]; -extern const size_t help_button_l_svg_size; -extern const unsigned char help_button_l_svg_data[]; +extern const size_t help_dpad_updown_svg_size; +extern const unsigned char help_dpad_updown_svg_data[]; -extern const size_t help_dpad_down_svg_size; -extern const unsigned char help_dpad_down_svg_data[]; +extern const size_t help_analog_down_svg_size; +extern const unsigned char help_analog_down_svg_data[]; + +extern const size_t help_button_r_svg_size; +extern const unsigned char help_button_r_svg_data[]; extern const size_t help_analog_up_svg_size; extern const unsigned char help_analog_up_svg_data[]; -extern const size_t help_dpad_left_svg_size; -extern const unsigned char help_dpad_left_svg_data[]; - extern const size_t help_button_start_svg_size; extern const unsigned char help_button_start_svg_data[]; -extern const size_t help_dpad_up_svg_size; -extern const unsigned char help_dpad_up_svg_data[]; +extern const size_t help_button_a_svg_size; +extern const unsigned char help_button_a_svg_data[]; -extern const size_t help_analog_down_svg_size; -extern const unsigned char help_analog_down_svg_data[]; +extern const size_t help_analog_right_svg_size; +extern const unsigned char help_analog_right_svg_data[]; -extern const size_t help_button_y_svg_size; -extern const unsigned char help_button_y_svg_data[]; +extern const size_t help_button_hotkey_svg_size; +extern const unsigned char help_button_hotkey_svg_data[]; + +extern const size_t help_dpad_left_svg_size; +extern const unsigned char help_dpad_left_svg_data[]; extern const size_t help_button_select_svg_size; extern const unsigned char help_button_select_svg_data[]; -extern const size_t help_button_b_svg_size; -extern const unsigned char help_button_b_svg_data[]; - -extern const size_t help_dpad_updown_svg_size; -extern const unsigned char help_dpad_updown_svg_data[]; +extern const size_t help_button_l_svg_size; +extern const unsigned char help_button_l_svg_data[]; -extern const size_t help_dpad_right_svg_size; -extern const unsigned char help_dpad_right_svg_data[]; +extern const size_t help_analog_left_svg_size; +extern const unsigned char help_analog_left_svg_data[]; -extern const size_t help_button_r_svg_size; -extern const unsigned char help_button_r_svg_data[]; +extern const size_t help_button_b_svg_size; +extern const unsigned char help_button_b_svg_data[]; extern const size_t help_analog_thumb_svg_size; extern const unsigned char help_analog_thumb_svg_data[]; -extern const size_t help_analog_left_svg_size; -extern const unsigned char help_analog_left_svg_data[]; +extern const size_t help_dpad_down_svg_size; +extern const unsigned char help_dpad_down_svg_data[]; -extern const size_t help_analog_right_svg_size; -extern const unsigned char help_analog_right_svg_data[]; +extern const size_t help_dpad_leftright_svg_size; +extern const unsigned char help_dpad_leftright_svg_data[]; + +extern const size_t help_button_y_svg_size; +extern const unsigned char help_button_y_svg_data[]; struct Res2hEntry { const std::string relativeFileName; diff --git a/data/converted/help_button_hotkey_svg.cpp b/data/converted/help_button_hotkey_svg.cpp new file mode 100644 index 0000000000..5bf78e40c3 --- /dev/null +++ b/data/converted/help_button_hotkey_svg.cpp @@ -0,0 +1,199 @@ +//this file was auto-generated from "button_hotkey.svg" by res2h + +#include "../Resources.h" + +const size_t help_button_hotkey_svg_size = 1905; +const unsigned char help_button_hotkey_svg_data[1905] = { + 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, + 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, + 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, + 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, + 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, + 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, + 0x74,0x6f,0x72,0x20,0x31,0x33,0x2e,0x30,0x2e,0x30, + 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, + 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, + 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, + 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, + 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x31,0x34,0x39, + 0x34,0x38,0x29,0x20,0x20,0x2d,0x2d,0x3e,0x0d,0x0a, + 0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20, + 0x73,0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43, + 0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f, + 0x44,0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e, + 0x31,0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77, + 0x33,0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70, + 0x68,0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31, + 0x2e,0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67, + 0x31,0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0d,0x0a, + 0x3c,0x73,0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69, + 0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x69, + 0x64,0x3d,0x22,0x5f,0x78,0x33,0x30,0x5f,0x22,0x20, + 0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74, + 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, + 0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f, + 0x73,0x76,0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, + 0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77, + 0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39, + 0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d, + 0x22,0x30,0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30, + 0x70,0x78,0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64, + 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74, + 0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78, + 0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d, + 0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36, + 0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20, + 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, + 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, + 0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, + 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, + 0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63, + 0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76, + 0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a, + 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, + 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, + 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, + 0x3d,0x22,0x4d,0x31,0x39,0x2e,0x31,0x36,0x35,0x2c, + 0x31,0x30,0x2e,0x34,0x36,0x39,0x63,0x2d,0x30,0x2e, + 0x37,0x35,0x32,0x2c,0x30,0x2d,0x31,0x2e,0x33,0x36, + 0x2c,0x30,0x2e,0x32,0x34,0x33,0x2d,0x31,0x2e,0x38, + 0x32,0x32,0x2c,0x30,0x2e,0x37,0x32,0x37,0x63,0x2d, + 0x30,0x2e,0x34,0x36,0x31,0x2c,0x30,0x2e,0x34,0x38, + 0x35,0x2d,0x30,0x2e,0x36,0x39,0x31,0x2c,0x31,0x2e, + 0x32,0x31,0x36,0x2d,0x30,0x2e,0x36,0x39,0x31,0x2c, + 0x32,0x2e,0x31,0x39,0x34,0x0d,0x0a,0x09,0x09,0x09, + 0x63,0x30,0x2c,0x30,0x2e,0x39,0x36,0x31,0x2c,0x30, + 0x2e,0x32,0x33,0x37,0x2c,0x31,0x2e,0x36,0x39,0x31, + 0x2c,0x30,0x2e,0x37,0x31,0x2c,0x32,0x2e,0x31,0x38, + 0x37,0x63,0x30,0x2e,0x34,0x37,0x33,0x2c,0x30,0x2e, + 0x34,0x39,0x37,0x2c,0x31,0x2e,0x30,0x37,0x35,0x2c, + 0x30,0x2e,0x37,0x34,0x35,0x2c,0x31,0x2e,0x38,0x30, + 0x33,0x2c,0x30,0x2e,0x37,0x34,0x35,0x63,0x30,0x2e, + 0x37,0x32,0x39,0x2c,0x30,0x2c,0x31,0x2e,0x33,0x32, + 0x39,0x2d,0x30,0x2e,0x32,0x34,0x37,0x2c,0x31,0x2e, + 0x37,0x39,0x35,0x2d,0x30,0x2e,0x37,0x33,0x39,0x0d, + 0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x34,0x36,0x38, + 0x2d,0x30,0x2e,0x34,0x39,0x32,0x2c,0x30,0x2e,0x37, + 0x30,0x32,0x2d,0x31,0x2e,0x32,0x33,0x31,0x2c,0x30, + 0x2e,0x37,0x30,0x32,0x2d,0x32,0x2e,0x32,0x31,0x36, + 0x63,0x30,0x2d,0x30,0x2e,0x39,0x37,0x33,0x2d,0x30, + 0x2e,0x32,0x32,0x39,0x2d,0x31,0x2e,0x37,0x2d,0x30, + 0x2e,0x36,0x38,0x33,0x2d,0x32,0x2e,0x31,0x37,0x39, + 0x43,0x32,0x30,0x2e,0x35,0x32,0x35,0x2c,0x31,0x30, + 0x2e,0x37,0x30,0x38,0x2c,0x31,0x39,0x2e,0x39,0x32, + 0x31,0x2c,0x31,0x30,0x2e,0x34,0x36,0x39,0x2c,0x31, + 0x39,0x2e,0x31,0x36,0x35,0x2c,0x31,0x30,0x2e,0x34, + 0x36,0x39,0x7a,0x20,0x4d,0x32,0x38,0x2e,0x37,0x35, + 0x38,0x2c,0x31,0x2e,0x35,0x36,0x35,0x0d,0x0a,0x09, + 0x09,0x09,0x48,0x38,0x2e,0x31,0x31,0x31,0x63,0x2d, + 0x33,0x2e,0x36,0x30,0x31,0x2c,0x30,0x2d,0x36,0x2e, + 0x35,0x32,0x2c,0x32,0x2e,0x39,0x31,0x39,0x2d,0x36, + 0x2e,0x35,0x32,0x2c,0x36,0x2e,0x35,0x32,0x76,0x32, + 0x30,0x2e,0x36,0x34,0x36,0x63,0x30,0x2c,0x33,0x2e, + 0x36,0x30,0x33,0x2c,0x32,0x2e,0x39,0x31,0x39,0x2c, + 0x36,0x2e,0x35,0x32,0x31,0x2c,0x36,0x2e,0x35,0x32, + 0x2c,0x36,0x2e,0x35,0x32,0x31,0x68,0x32,0x30,0x2e, + 0x36,0x34,0x37,0x63,0x33,0x2e,0x36,0x30,0x32,0x2c, + 0x30,0x2c,0x36,0x2e,0x35,0x32,0x31,0x2d,0x32,0x2e, + 0x39,0x31,0x38,0x2c,0x36,0x2e,0x35,0x32,0x31,0x2d, + 0x36,0x2e,0x35,0x32,0x31,0x56,0x38,0x2e,0x30,0x38, + 0x35,0x0d,0x0a,0x09,0x09,0x09,0x43,0x33,0x35,0x2e, + 0x32,0x37,0x39,0x2c,0x34,0x2e,0x34,0x38,0x35,0x2c, + 0x33,0x32,0x2e,0x33,0x36,0x2c,0x31,0x2e,0x35,0x36, + 0x35,0x2c,0x32,0x38,0x2e,0x37,0x35,0x38,0x2c,0x31, + 0x2e,0x35,0x36,0x35,0x7a,0x20,0x4d,0x36,0x2e,0x30, + 0x30,0x38,0x2c,0x39,0x2e,0x31,0x34,0x38,0x68,0x31, + 0x2e,0x38,0x32,0x38,0x76,0x33,0x2e,0x33,0x34,0x33, + 0x68,0x33,0x2e,0x35,0x38,0x33,0x56,0x39,0x2e,0x31, + 0x34,0x38,0x68,0x31,0x2e,0x38,0x32,0x39,0x76,0x38, + 0x2e,0x34,0x39,0x34,0x68,0x2d,0x31,0x2e,0x38,0x32, + 0x39,0x76,0x2d,0x33,0x2e,0x37,0x31,0x34,0x48,0x37, + 0x2e,0x38,0x33,0x36,0x76,0x33,0x2e,0x37,0x31,0x34, + 0x48,0x36,0x2e,0x30,0x30,0x38,0x0d,0x0a,0x09,0x09, + 0x09,0x56,0x39,0x2e,0x31,0x34,0x38,0x7a,0x20,0x4d, + 0x31,0x31,0x2e,0x38,0x32,0x37,0x2c,0x32,0x38,0x2e, + 0x35,0x30,0x38,0x6c,0x2d,0x32,0x2e,0x34,0x39,0x2d, + 0x33,0x2e,0x39,0x38,0x36,0x4c,0x37,0x2e,0x38,0x35, + 0x35,0x2c,0x32,0x35,0x2e,0x39,0x34,0x76,0x32,0x2e, + 0x35,0x36,0x38,0x48,0x36,0x2e,0x30,0x32,0x36,0x76, + 0x2d,0x38,0x2e,0x34,0x39,0x34,0x68,0x31,0x2e,0x38, + 0x32,0x39,0x76,0x33,0x2e,0x37,0x37,0x31,0x6c,0x33, + 0x2e,0x36,0x39,0x34,0x2d,0x33,0x2e,0x37,0x37,0x31, + 0x68,0x32,0x2e,0x34,0x35,0x39,0x6c,0x2d,0x33,0x2e, + 0x34,0x31,0x2c,0x33,0x2e,0x33,0x30,0x39,0x6c,0x33, + 0x2e,0x35,0x39,0x35,0x2c,0x35,0x2e,0x31,0x38,0x36, + 0x0d,0x0a,0x09,0x09,0x09,0x48,0x31,0x31,0x2e,0x38, + 0x32,0x37,0x7a,0x20,0x4d,0x32,0x32,0x2e,0x30,0x32, + 0x36,0x2c,0x32,0x38,0x2e,0x35,0x30,0x38,0x68,0x2d, + 0x36,0x2e,0x38,0x38,0x37,0x76,0x2d,0x38,0x2e,0x34, + 0x39,0x34,0x68,0x36,0x2e,0x37,0x31,0x35,0x76,0x31, + 0x2e,0x34,0x33,0x37,0x68,0x2d,0x34,0x2e,0x38,0x38, + 0x36,0x76,0x31,0x2e,0x38,0x38,0x33,0x68,0x34,0x2e, + 0x35,0x34,0x35,0x76,0x31,0x2e,0x34,0x33,0x33,0x68, + 0x2d,0x34,0x2e,0x35,0x34,0x35,0x76,0x32,0x2e,0x33, + 0x31,0x68,0x35,0x2e,0x30,0x35,0x38,0x56,0x32,0x38, + 0x2e,0x35,0x30,0x38,0x7a,0x20,0x4d,0x31,0x39,0x2e, + 0x31,0x37,0x32,0x2c,0x31,0x37,0x2e,0x37,0x38,0x37, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x31,0x2e,0x33, + 0x34,0x36,0x2c,0x30,0x2d,0x32,0x2e,0x34,0x31,0x37, + 0x2d,0x30,0x2e,0x33,0x38,0x35,0x2d,0x33,0x2e,0x32, + 0x31,0x32,0x2d,0x31,0x2e,0x31,0x35,0x36,0x63,0x2d, + 0x30,0x2e,0x37,0x39,0x34,0x2d,0x30,0x2e,0x37,0x37, + 0x31,0x2d,0x31,0x2e,0x31,0x39,0x32,0x2d,0x31,0x2e, + 0x38,0x33,0x32,0x2d,0x31,0x2e,0x31,0x39,0x32,0x2d, + 0x33,0x2e,0x31,0x38,0x34,0x63,0x30,0x2d,0x30,0x2e, + 0x38,0x36,0x36,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2d, + 0x31,0x2e,0x35,0x39,0x32,0x2c,0x30,0x2e,0x34,0x31, + 0x34,0x2d,0x32,0x2e,0x31,0x37,0x39,0x0d,0x0a,0x09, + 0x09,0x09,0x63,0x30,0x2e,0x32,0x30,0x36,0x2d,0x30, + 0x2e,0x34,0x33,0x33,0x2c,0x30,0x2e,0x34,0x38,0x37, + 0x2d,0x30,0x2e,0x38,0x32,0x31,0x2c,0x30,0x2e,0x38, + 0x34,0x33,0x2d,0x31,0x2e,0x31,0x36,0x35,0x63,0x30, + 0x2e,0x33,0x35,0x37,0x2d,0x30,0x2e,0x33,0x34,0x33, + 0x2c,0x30,0x2e,0x37,0x34,0x37,0x2d,0x30,0x2e,0x35, + 0x39,0x38,0x2c,0x31,0x2e,0x31,0x37,0x31,0x2d,0x30, + 0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x35,0x36,0x34, + 0x2d,0x30,0x2e,0x32,0x32,0x34,0x2c,0x31,0x2e,0x32, + 0x31,0x35,0x2d,0x30,0x2e,0x33,0x33,0x36,0x2c,0x31, + 0x2e,0x39,0x35,0x32,0x2d,0x30,0x2e,0x33,0x33,0x36, + 0x0d,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x33,0x33, + 0x35,0x2c,0x30,0x2c,0x32,0x2e,0x34,0x30,0x32,0x2c, + 0x30,0x2e,0x33,0x38,0x39,0x2c,0x33,0x2e,0x32,0x30, + 0x33,0x2c,0x31,0x2e,0x31,0x36,0x35,0x63,0x30,0x2e, + 0x38,0x2c,0x30,0x2e,0x37,0x37,0x36,0x2c,0x31,0x2e, + 0x32,0x30,0x31,0x2c,0x31,0x2e,0x38,0x35,0x36,0x2c, + 0x31,0x2e,0x32,0x30,0x31,0x2c,0x33,0x2e,0x32,0x33, + 0x39,0x63,0x30,0x2c,0x31,0x2e,0x33,0x37,0x32,0x2d, + 0x30,0x2e,0x33,0x39,0x36,0x2c,0x32,0x2e,0x34,0x34, + 0x34,0x2d,0x31,0x2e,0x31,0x39,0x32,0x2c,0x33,0x2e, + 0x32,0x31,0x39,0x0d,0x0a,0x09,0x09,0x09,0x43,0x32, + 0x31,0x2e,0x35,0x36,0x36,0x2c,0x31,0x37,0x2e,0x34, + 0x2c,0x32,0x30,0x2e,0x35,0x30,0x32,0x2c,0x31,0x37, + 0x2e,0x37,0x38,0x37,0x2c,0x31,0x39,0x2e,0x31,0x37, + 0x32,0x2c,0x31,0x37,0x2e,0x37,0x38,0x37,0x7a,0x20, + 0x4d,0x32,0x37,0x2e,0x37,0x37,0x38,0x2c,0x32,0x34, + 0x2e,0x39,0x34,0x35,0x76,0x33,0x2e,0x35,0x36,0x33, + 0x68,0x2d,0x31,0x2e,0x38,0x32,0x33,0x76,0x2d,0x33, + 0x2e,0x35,0x37,0x33,0x6c,0x2d,0x33,0x2e,0x33,0x31, + 0x37,0x2d,0x34,0x2e,0x39,0x32,0x31,0x68,0x32,0x2e, + 0x31,0x34,0x34,0x6c,0x32,0x2e,0x31,0x33,0x32,0x2c, + 0x33,0x2e,0x33,0x36,0x4c,0x32,0x39,0x2c,0x32,0x30, + 0x2e,0x30,0x31,0x34,0x68,0x32,0x2e,0x31,0x30,0x36, + 0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32,0x37,0x2e,0x37, + 0x37,0x38,0x2c,0x32,0x34,0x2e,0x39,0x34,0x35,0x7a, + 0x20,0x4d,0x33,0x31,0x2e,0x35,0x32,0x37,0x2c,0x31, + 0x30,0x2e,0x35,0x38,0x35,0x68,0x2d,0x32,0x2e,0x36, + 0x38,0x31,0x76,0x37,0x2e,0x30,0x35,0x37,0x68,0x2d, + 0x31,0x2e,0x38,0x32,0x38,0x76,0x2d,0x37,0x2e,0x30, + 0x35,0x37,0x68,0x2d,0x32,0x2e,0x36,0x38,0x37,0x56, + 0x39,0x2e,0x31,0x34,0x38,0x68,0x37,0x2e,0x31,0x39, + 0x35,0x56,0x31,0x30,0x2e,0x35,0x38,0x35,0x7a,0x22, + 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, + 0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73, + 0x76,0x67,0x3e,0x0d,0x0a +}; + diff --git a/data/resources/help/button_hotkey.svg b/data/resources/help/button_hotkey.svg new file mode 100644 index 0000000000..1446a58418 --- /dev/null +++ b/data/resources/help/button_hotkey.svg @@ -0,0 +1,22 @@ + + + + + + + + + + diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index f05aec77c3..9729e498e7 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -138,6 +138,7 @@ set(EMBEDDED_ASSET_SOURCES ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_r_svg.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_start_svg.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_select_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_hotkey_svg.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/help_dpad_up_svg.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/help_dpad_down_svg.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/help_dpad_left_svg.cpp diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index ca2b9ece85..7f3acf066b 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -99,16 +99,16 @@ class InputConfig //Returns a list of names this input is mapped to. std::vector getMappedTo(Input input); + // Returns true if there is an Input mapped to this name, false otherwise. + // Writes Input mapped to this name to result if true. + bool getInputByName(const std::string& name, Input* result); + void loadFromXML(pugi::xml_node root); void writeToXML(pugi::xml_node parent); bool isConfigured(); private: - // Returns true if there is an Input mapped to this name, false otherwise. - // Writes Input mapped to this name to result if true. - bool getInputByName(const std::string& name, Input* result); - std::map mNameMap; const int mDeviceId; const std::string mDeviceName; diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index 996133596b..e83e468fe6 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -1,4 +1,5 @@ #include "guis/GuiInputConfig.h" +#include "guis/GuiMsgBox.h" #include "Window.h" #include "Log.h" #include "components/TextComponent.h" @@ -15,7 +16,7 @@ // ":/help/button_a.svg", ":/help/button_b.svg", ":/help/button_start.svg", ":/help/button_select.svg", // ":/help/button_l.svg", ":/help/button_r.svg" }; -static const int inputCount = 24; +static const int inputCount = 25; static const char* inputName[inputCount] = { "Up", @@ -41,7 +42,8 @@ static const char* inputName[inputCount] = "RightAnalogUp", "RightAnalogDown", "RightAnalogLeft", - "RightAnalogRight" + "RightAnalogRight", + "HotKeyEnable" }; static const bool inputSkippable[inputCount] = { @@ -68,6 +70,7 @@ static const bool inputSkippable[inputCount] = true, true, true, + true, true }; static const char* inputDispName[inputCount] = @@ -95,7 +98,8 @@ static const char* inputDispName[inputCount] = "RIGHT ANALOG UP", "RIGHT ANALOG DOWN", "RIGHT ANALOG LEFT", - "RIGHT ANALOG RIGHT" + "RIGHT ANALOG RIGHT", + "HOTKEY ENABLE" }; static const char* inputIcon[inputCount] = { @@ -122,7 +126,8 @@ static const char* inputIcon[inputCount] = ":/help/analog_up.svg", ":/help/analog_down.svg", ":/help/analog_left.svg", - ":/help/analog_right.svg" + ":/help/analog_right.svg", + ":/help/button_hotkey.svg" }; //MasterVolUp and MasterVolDown are also hooked up, but do not appear on this screen. @@ -257,11 +262,34 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi // buttons std::vector< std::shared_ptr > buttons; - buttons.push_back(std::make_shared(mWindow, "OK", "ok", [this, okCallback] { + std::function okFunction = [this, okCallback] { InputManager::getInstance()->writeDeviceConfig(mTargetConfig); // save if(okCallback) okCallback(); delete this; + }; + buttons.push_back(std::make_shared(mWindow, "OK", "ok", [this, okFunction] { + // check if the hotkey enable button is set. if not prompt the user to use select or nothing. + Input input; + if (!mTargetConfig->getInputByName("HotKeyEnable", &input)) { + mWindow->pushGui(new GuiMsgBox(mWindow, + "YOU DIDN'T CHOOSE A HOTKEY ENABLE BUTTON. THIS IS REQUIRED FOR EXITING GAMES WITH A CONTROLLER. DO YOU WANT TO USE THE SELECT BUTTON DEFAULT ? PLEASE ANSWER YES TO USE SELECT OR NO TO NOT SET A HOTKEY ENABLE BUTTON.", + "YES", [this, okFunction] { + Input input; + mTargetConfig->getInputByName("Select", &input); + mTargetConfig->mapInput("HotKeyEnable", input); + okFunction(); + }, + "NO", [this, okFunction] { + // for a disabled hotkey enable button, set to a key with id 0, + // so the input configuration script can be backwards compatible. + mTargetConfig->mapInput("HotKeyEnable", Input(DEVICE_KEYBOARD, TYPE_KEY, 0, 1, true)); + okFunction(); + } + )); + } else { + okFunction(); + } })); mButtonGrid = makeButtonGrid(mWindow, buttons); mGrid.setEntry(mButtonGrid, Vector2i(0, 6), true, false); @@ -368,7 +396,7 @@ bool GuiInputConfig::assign(Input input, int inputId) // if this input is mapped to something other than "nothing" or the current row, error // (if it's the same as what it was before, allow it) - if(mTargetConfig->getMappedTo(input).size() > 0 && !mTargetConfig->isMappedTo(inputName[inputId], input)) + if(mTargetConfig->getMappedTo(input).size() > 0 && !mTargetConfig->isMappedTo(inputName[inputId], input) && inputName[inputId] != "HotKeyEnable") { error(mMappings.at(inputId), "Already mapped!"); return false; From 1da0c780b29b80aef9ecf868da75837d73319c54 Mon Sep 17 00:00:00 2001 From: hex007 Date: Wed, 31 May 2017 09:54:11 -0700 Subject: [PATCH 107/603] Renamed additional transitions - instant -> simple slide - none -> instant --- es-app/src/guis/GuiMenu.cpp | 2 +- es-app/src/views/SystemView.cpp | 6 +++--- es-app/src/views/ViewController.cpp | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 6298cf9362..6c8dbe7c6e 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -127,8 +127,8 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN std::vector transitions; transitions.push_back("fade"); transitions.push_back("slide"); + transitions.push_back("simple slide"); transitions.push_back("instant"); - transitions.push_back("none"); for(auto it = transitions.begin(); it != transitions.end(); it++) transition_style->add(*it, *it, Settings::getInstance()->getString("TransitionStyle") == *it); s->addWithLabel("TRANSITION STYLE", transition_style); diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 1103470f6a..b049966074 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -280,8 +280,8 @@ void SystemView::onCursorChanged(const CursorState& state) this->mCamOffset = f; this->mExtrasCamOffset = f; }, 500); - } else if (transition_style == "instant") { - // instant + } else if (transition_style == "simple slide") { + // simple slide anim = new LambdaAnimation( [this, startPos, endPos, posMax](float t) { @@ -296,7 +296,7 @@ void SystemView::onCursorChanged(const CursorState& state) this->mExtrasCamOffset = endPos; }, 500); } else { - // None + // instant anim = new LambdaAnimation( [this, endPos](float t) { diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index e0836e12f1..7e3c242b6b 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -189,12 +189,12 @@ void ViewController::playViewTransition() }else{ advanceAnimation(0, (int)(mFadeOpacity * FADE_DURATION)); } - } else if (transition_style == "slide" || transition_style == "instant"){ - // slide + } else if (transition_style == "slide" || transition_style == "simple slide"){ + // slide or simple slide setAnimation(new MoveCameraAnimation(mCamera, target)); updateHelpPrompts(); // update help prompts immediately } else { - // none + // instant setAnimation(new LambdaAnimation( [this, target](float t) { @@ -246,7 +246,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) setAnimation(new LambdaAnimation(fadeFunc, 800), 0, nullptr, true); this->onFileChanged(game, FILE_METADATA_CHANGED); }); - } else if (transition_style == "slide" || transition_style == "instant"){ + } else if (transition_style == "slide" || transition_style == "simple slide"){ // move camera to zoom in on center + fade out, launch game, come back in setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), 0, [this, origCamera, center, game] { From 0772c1f84f3fa6b7de469050a666faa3d4a761a9 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Wed, 31 May 2017 17:58:16 +0100 Subject: [PATCH 108/603] bump version to 2.2.0 --- es-app/src/EmulationStation.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 2a58266edf..5a915ae0a4 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -3,11 +3,11 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 1 -#define PROGRAM_VERSION_MAINTENANCE 9 -#define PROGRAM_VERSION_STRING "2.1.9rp" +#define PROGRAM_VERSION_MINOR 2 +#define PROGRAM_VERSION_MAINTENANCE 0 +#define PROGRAM_VERSION_STRING "2.2.0rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,1,9\0" +#define RESOURCE_VERSION_STRING "2,2,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From b3181a2c090f10a3702445d2f9b134dd1d0d0d91 Mon Sep 17 00:00:00 2001 From: jrassa Date: Thu, 1 Jun 2017 22:25:02 -0400 Subject: [PATCH 109/603] fix #151 zoom launch transition by extracting scale factor from transform --- es-app/src/views/gamelist/IGameListView.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/es-app/src/views/gamelist/IGameListView.cpp b/es-app/src/views/gamelist/IGameListView.cpp index 5ea2ce83f9..d81604a0bd 100644 --- a/es-app/src/views/gamelist/IGameListView.cpp +++ b/es-app/src/views/gamelist/IGameListView.cpp @@ -45,7 +45,14 @@ HelpStyle IGameListView::getHelpStyle() void IGameListView::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = parentTrans * getTransform(); - Renderer::pushClipRect(Eigen::Vector2i(trans.translation()[0],trans.translation()[1]), Eigen::Vector2i(Renderer::getScreenWidth(), Renderer::getScreenHeight())); + + float scaleX = trans.linear()(0,0); + float scaleY = trans.linear()(1,1); + + Eigen::Vector2i pos(trans.translation()[0], trans.translation()[1]); + Eigen::Vector2i size(mSize.x() * scaleX, mSize.y() * scaleY); + + Renderer::pushClipRect(pos, size); renderChildren(trans); Renderer::popClipRect(); } From f3fbffcbe26451cf6f6f2f35213bd747018c3f90 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Fri, 2 Jun 2017 07:35:00 +0100 Subject: [PATCH 110/603] bump version to 2.2.1 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 5a915ae0a4..55d42d8102 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 2 -#define PROGRAM_VERSION_MAINTENANCE 0 -#define PROGRAM_VERSION_STRING "2.2.0rp" +#define PROGRAM_VERSION_MAINTENANCE 1 +#define PROGRAM_VERSION_STRING "2.2.1rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,2,0\0" +#define RESOURCE_VERSION_STRING "2,2,1\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 2d38605a08f32c2ec08720b044e596621728b68a Mon Sep 17 00:00:00 2001 From: hex007 Date: Fri, 2 Jun 2017 08:58:44 -0700 Subject: [PATCH 111/603] Fixes for USB sound cards - Ability to change device used for Volume control (PCM/Speaker/Master) only on Pi. - Ability to change Audio device used for OMX player (local/hdmi/both/ALSA:HW:0,0/ALSA:HW:1,0) --- es-app/src/VolumeControl.cpp | 5 +++ es-app/src/guis/GuiMenu.cpp | 34 +++++++++++++++++++ es-core/src/Settings.cpp | 9 +++++ .../src/components/VideoPlayerComponent.cpp | 12 +++++-- 4 files changed, 58 insertions(+), 2 deletions(-) diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index 989d8e323f..3349876648 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -1,4 +1,5 @@ #include "VolumeControl.h" +#include "Settings.h" #include "Log.h" @@ -73,6 +74,10 @@ void VolumeControl::init() //try to open mixer device if (mixerHandle == nullptr) { + #ifdef _RPI_ + mixerName = Settings::getInstance()->getString("AudioDevice").c_str(); + #endif + snd_mixer_selem_id_alloca(&mixerSelemId); //sets simple-mixer index and name snd_mixer_selem_id_set_index(mixerSelemId, mixerIndex); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 0d826ccb16..9735b0f603 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -69,6 +69,23 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN [this] { auto s = new GuiSettings(mWindow, "SOUND SETTINGS"); + #ifdef _RPI_ + // volume control device + auto vol_dev = std::make_shared< OptionListComponent >(mWindow, "AUDIO DEVICE", false); + std::vector transitions; + transitions.push_back("PCM"); + transitions.push_back("Speaker"); + transitions.push_back("Master"); + for(auto it = transitions.begin(); it != transitions.end(); it++) + vol_dev->add(*it, *it, Settings::getInstance()->getString("AudioDevice") == *it); + s->addWithLabel("AUDIO DEVICE", vol_dev); + s->addSaveFunc([vol_dev] { + Settings::getInstance()->setString("AudioDevice", vol_dev->getSelected()); + VolumeControl::getInstance()->deinit(); + VolumeControl::getInstance()->init(); + }); + #endif + // volume auto volume = std::make_shared(mWindow, 0.f, 100.f, 1.f, "%"); volume->setValue((float)VolumeControl::getInstance()->getVolume()); @@ -204,6 +221,23 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN if(needReload) ViewController::get()->reloadAll(); }); + + // OMX player Audio Device + auto omx_audio_dev = std::make_shared< OptionListComponent >(mWindow, "OMX PLAYER AUDIO DEVICE", false); + std::vector devices; + devices.push_back("local"); + devices.push_back("hdmi"); + devices.push_back("both"); + // USB audio + devices.push_back("alsa:hw:0,0"); + devices.push_back("alsa:hw:1,0"); + for (auto it = devices.begin(); it != devices.end(); it++) + omx_audio_dev->add(*it, *it, Settings::getInstance()->getString("OMXAudioDev") == *it); + s->addWithLabel("OMX PLAYER AUDIO DEVICE", omx_audio_dev); + s->addSaveFunc([omx_audio_dev] { + if (Settings::getInstance()->getString("OMXAudioDev") != omx_audio_dev->getSelected()) + Settings::getInstance()->setString("OMXAudioDev", omx_audio_dev->getSelected()); + }); #endif auto video_audio = std::make_shared(mWindow); video_audio->setState(Settings::getInstance()->getBool("VideoAudio")); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index aa816fb6c2..ac74ad68e5 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -81,6 +81,15 @@ void Settings::setDefaults() // we don't get a warning if we encounter it on a different platform mBoolMap["VideoOmxPlayer"] = false; mBoolMap["VideoAudio"] = true; + // Audio out device for Video playback using OMX player. + mStringMap["OMXAudioDev"] = "both"; + + // Audio out device for volume control + #ifdef _RPI_ + mStringMap["AudioDevice"] = "PCM"; + #else + mStringMap["AudioDevice"] = "Master"; + #endif } diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index cc4645e1d2..3096688fac 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -1,5 +1,6 @@ #ifdef _RPI_ #include "components/VideoPlayerComponent.h" +#include "AudioManager.h" #include "Renderer.h" #include "ThemeData.h" #include "Settings.h" @@ -57,6 +58,9 @@ void VideoPlayerComponent::startVideo() // Set the video that we are going to be playing so we don't attempt to restart it mPlayingVideoPath = mVideoPath; + // Disable AudioManager so video can play + AudioManager::getInstance()->deinit(); + // Start the player process pid_t pid = fork(); if (pid == -1) @@ -84,7 +88,7 @@ void VideoPlayerComponent::startVideo() // We need to specify the layer of 10000 or above to ensure the video is displayed on top // of our SDL display - const char* argv[] = { "", "--layer", "10010", "--loop", "--no-osd", "--aspect-mode", "letterbox", "--vol", "0", "--win", buf, "-b", "", "", "", "", NULL }; + const char* argv[] = { "", "--layer", "10010", "--loop", "--no-osd", "--aspect-mode", "letterbox", "--vol", "0", "-o", "both","--win", buf, "-b", "", "", "", "", NULL }; // check if we want to mute the audio if (!Settings::getInstance()->getBool("VideoAudio")) @@ -98,7 +102,9 @@ void VideoPlayerComponent::startVideo() argv[6] = "stretch"; } - argv[11] = mPlayingVideoPath.c_str(); + argv[10] = Settings::getInstance()->getString("OMXAudioDev").c_str(); + + argv[13] = mPlayingVideoPath.c_str(); const char* env[] = { "LD_LIBRARY_PATH=/opt/vc/libs:/usr/lib/omxplayer", NULL }; @@ -134,6 +140,8 @@ void VideoPlayerComponent::stopVideo() int status; kill(mPlayerPid, SIGKILL); waitpid(mPlayerPid, &status, WNOHANG); + // Restart AudioManager + AudioManager::getInstance()->init(); mPlayerPid = -1; } } From 3a98bd38471bd2ae3fff2ad67b92bd3ed9b9c171 Mon Sep 17 00:00:00 2001 From: jrassa Date: Sun, 28 May 2017 21:08:07 -0400 Subject: [PATCH 112/603] fixes for gamelist bugs; added option to specify image for selctor bar --- THEMES.md | 8 +++ es-app/src/components/TextListComponent.h | 62 +++++++++++++++++++---- es-core/src/ThemeData.cpp | 4 ++ 3 files changed, 63 insertions(+), 11 deletions(-) diff --git a/THEMES.md b/THEMES.md index 6b7db4714e..1cd0f5f659 100644 --- a/THEMES.md +++ b/THEMES.md @@ -539,6 +539,14 @@ Can be created as an extra. * `size` - type: NORMALIZED_PAIR. * `selectorColor` - type: COLOR. - Color of the "selector bar." +* `selectorImagePath` - type: PATH. + - Path to image to render in place of "selector bar." +* `selectorImageTile` - type: BOOLEAN. + - If true, the selector image will be tiled instead of stretched to fit its size. +* `selectorHeight` - type: FLOAT. + - Height of the "selector bar". +* `selectorOffsetY` - type: FLOAT. + - Allows moving of the "selector bar" up or down from its computed position. Useful for fine tuning the position of the "selector bar" relative to the text. * `selectedColor` - type: COLOR. - Color of the highlighted entry text. * `primaryColor` - type: COLOR. diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 8067cd7391..f6a1313b76 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -72,6 +72,8 @@ class TextListComponent : public IList it->data.textCache.reset(); } + inline void setSelectorHeight(float selectorScale) { mSelectorHeight = selectorScale; } + inline void setSelectorOffsetY(float selectorOffsetY) { mSelectorOffsetY = selectorOffsetY; } inline void setSelectorColor(unsigned int color) { mSelectorColor = color; } inline void setSelectedColor(unsigned int color) { mSelectedColor = color; } inline void setScrollSound(const std::shared_ptr& sound) { mScrollSound = sound; } @@ -99,16 +101,20 @@ class TextListComponent : public IList std::shared_ptr mFont; bool mUppercase; float mLineSpacing; + float mSelectorHeight; + float mSelectorOffsetY; unsigned int mSelectorColor; unsigned int mSelectedColor; std::shared_ptr mScrollSound; static const unsigned int COLOR_ID_COUNT = 2; unsigned int mColors[COLOR_ID_COUNT]; + + ImageComponent mSelectorImage; }; template TextListComponent::TextListComponent(Window* window) : - IList(window) + IList(window), mSelectorImage(window) { mMarqueeOffset = 0; mMarqueeTime = -MARQUEE_DELAY; @@ -119,6 +125,8 @@ TextListComponent::TextListComponent(Window* window) : mFont = Font::get(FONT_SIZE_MEDIUM); mUppercase = false; mLineSpacing = 1.5f; + mSelectorHeight = mFont->getSize() * 1.5f; + mSelectorOffsetY = 0; mSelectorColor = 0x000000FF; mSelectedColor = 0; mColors[0] = 0x0000FFFF; @@ -135,7 +143,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(size() == 0) return; - const float entrySize = round(font->getHeight(mLineSpacing)); + const float entrySize = font->getSize() * mLineSpacing; int startEntry = 0; @@ -160,8 +168,13 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) // draw selector bar if(startEntry < listCutoff) { - Renderer::setMatrix(trans); - Renderer::drawRect(0.f, (mCursor - startEntry)*entrySize + (entrySize - font->getHeight())/2, mSize.x(), font->getHeight(), mSelectorColor); + if (mSelectorImage.hasImage()) { + mSelectorImage.setPosition(0.f, (mCursor - startEntry)*entrySize + mSelectorOffsetY, 0.f); + mSelectorImage.render(trans); + } else { + Renderer::setMatrix(trans); + Renderer::drawRect(0.f, (mCursor - startEntry)*entrySize + mSelectorOffsetY, mSize.x(), mSelectorHeight, mSelectorColor); + } } // clip to inside margins @@ -194,14 +207,14 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) break; case ALIGN_CENTER: offset[0] = (mSize.x() - entry.data.textCache->metrics.size.x()) / 2; - if(offset[0] < 0) - offset[0] = 0; + if(offset[0] < mHorizontalMargin) + offset[0] = mHorizontalMargin; break; case ALIGN_RIGHT: offset[0] = (mSize.x() - entry.data.textCache->metrics.size.x()); offset[0] -= mHorizontalMargin; - if(offset[0] < 0) - offset[0] = 0; + if(offset[0] < mHorizontalMargin) + offset[0] = mHorizontalMargin; break; } @@ -277,7 +290,7 @@ void TextListComponent::update(int deltaTime) Eigen::Vector2f textSize = mFont->sizeText(text); //it's long enough to marquee - if(textSize.x() - mMarqueeOffset > mSize.x() - 12 - (mAlignment != ALIGN_CENTER ? mHorizontalMargin : 0)) + if(textSize.x() - mMarqueeOffset > mSize.x() - 12 - mHorizontalMargin * 2) { mMarqueeTime += deltaTime; while(mMarqueeTime > MARQUEE_SPEED) @@ -364,6 +377,33 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c if(properties & FORCE_UPPERCASE && elem->has("forceUppercase")) setUppercase(elem->get("forceUppercase")); - if(properties & LINE_SPACING && elem->has("lineSpacing")) - setLineSpacing(elem->get("lineSpacing")); + if(properties & LINE_SPACING) + { + if(elem->has("lineSpacing")) + setLineSpacing(elem->get("lineSpacing")); + if(elem->has("selectorHeight")) + { + setSelectorHeight(elem->get("selectorHeight") * Renderer::getScreenHeight()); + } else { + setSelectorHeight(mFont->getSize() * 1.5); + } + if(elem->has("selectorOffsetY")) + { + float scale = this->mParent ? this->mParent->getSize().y() : (float)Renderer::getScreenHeight(); + setSelectorOffsetY(elem->get("selectorOffsetY") * scale); + } else { + setSelectorOffsetY(0.0); + } + } + + if (elem->has("selectorImagePath")) + { + std::string path = elem->get("selectorImagePath"); + bool tile = elem->has("selectorImageTile") && elem->get("selectorImageTile"); + mSelectorImage.setImage(path, tile); + mSelectorImage.setSize(mSize.x(), mSelectorHeight); + mSelectorImage.setColorShift(mSelectorColor); + } else { + mSelectorImage.setImage(""); + } } diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index b54299d102..ed6980613e 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -52,7 +52,11 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("textlist", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) + ("selectorHeight", FLOAT) + ("selectorOffsetY", FLOAT) ("selectorColor", COLOR) + ("selectorImagePath", PATH) + ("selectorImageTile", BOOLEAN) ("selectedColor", COLOR) ("primaryColor", COLOR) ("secondaryColor", COLOR) From 0d046339549a5ce097a18f45ff6d6437e57992df Mon Sep 17 00:00:00 2001 From: fieldofcows Date: Wed, 14 Dec 2016 08:30:54 +0000 Subject: [PATCH 113/603] Changes from fieldofcows to separate screensaver into separate module, squashed by pjft. --- es-app/CMakeLists.txt | 2 + es-app/src/SystemScreenSaver.cpp | 217 ++++++++++++++++++ es-app/src/SystemScreenSaver.h | 39 ++++ es-app/src/guis/GuiMenu.cpp | 3 +- es-app/src/main.cpp | 2 + es-core/src/GuiComponent.h | 1 + es-core/src/Window.cpp | 65 ++++-- es-core/src/Window.h | 15 ++ .../src/components/VideoPlayerComponent.cpp | 1 + es-core/src/components/VideoVlcComponent.cpp | 1 + 10 files changed, 327 insertions(+), 19 deletions(-) create mode 100644 es-app/src/SystemScreenSaver.cpp create mode 100644 es-app/src/SystemScreenSaver.h diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 1b062b6928..2378348c4e 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -11,6 +11,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.h ${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemScreenSaver.h # GuiComponents ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h @@ -60,6 +61,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/VolumeControl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemScreenSaver.cpp # GuiComponents ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp new file mode 100644 index 0000000000..3d3c46a62a --- /dev/null +++ b/es-app/src/SystemScreenSaver.cpp @@ -0,0 +1,217 @@ +#include "SystemScreenSaver.h" +#ifdef _RPI_ +#include "components/VideoPlayerComponent.h" +#endif +#include "components/VideoVlcComponent.h" +#include "Renderer.h" +#include "Settings.h" +#include "SystemData.h" +#include "Util.h" + +#define FADE_TIME 3000 +#define SWAP_VIDEO_TIMEOUT 30000 + +SystemScreenSaver::SystemScreenSaver(Window* window) : + mVideoScreensaver(NULL), + mWindow(window), + mCounted(false), + mVideoCount(0), + mState(STATE_INACTIVE), + mOpacity(0.0f), + mTimer(0) +{ + mWindow->setScreenSaver(this); +} + +SystemScreenSaver::~SystemScreenSaver() +{ + delete mVideoScreensaver; +} + +bool SystemScreenSaver::allowSleep() +{ + return false; +} + +void SystemScreenSaver::startScreenSaver() +{ + if (!mVideoScreensaver && (Settings::getInstance()->getString("ScreenSaverBehavior") == "random video")) + { + // Configure to fade out the windows + mState = STATE_FADE_OUT_WINDOW; + mOpacity = 0.0f; + + // Load a random video + std::string path; + pickRandomVideo(path); + if (!path.empty()) + { + // Create the correct type of video component +#ifdef _RPI_ + if (Settings::getInstance()->getBool("VideoOmxPlayer")) + mVideoScreensaver = new VideoPlayerComponent(mWindow); + else + mVideoScreensaver = new VideoVlcComponent(mWindow); +#else + mVideoScreensaver = new VideoVlcComponent(mWindow); +#endif + + + mVideoScreensaver->setOrigin(0.0f, 0.0f); + mVideoScreensaver->setPosition(0.0f, 0.0f); + mVideoScreensaver->setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + mVideoScreensaver->setVideo(path); + mVideoScreensaver->onShow(); + mTimer = 0; + } + else + { + // No videos. Just use a standard screensaver + mState = STATE_SCREENSAVER_ACTIVE; + } + } +} + +void SystemScreenSaver::stopScreenSaver() +{ + delete mVideoScreensaver; + mVideoScreensaver = NULL; + mState = STATE_INACTIVE; +} + +void SystemScreenSaver::renderScreenSaver() +{ + if (mVideoScreensaver) + { + // Only render the video if the state requires it + if ((int)mState >= STATE_FADE_IN_VIDEO) + { + Eigen::Affine3f transform = Eigen::Affine3f::Identity(); + mVideoScreensaver->render(transform); + } + // Handle any fade + Renderer::setMatrix(Eigen::Affine3f::Identity()); + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), (unsigned char)(mOpacity * 255)); + } + else if (mState != STATE_INACTIVE) + { + Renderer::setMatrix(Eigen::Affine3f::Identity()); + unsigned char opacity = Settings::getInstance()->getString("ScreenSaverBehavior") == "dim" ? 0xA0 : 0xFF; + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity); + } +} + +void SystemScreenSaver::countVideos() +{ + if (!mCounted) + { + mVideoCount = 0; + mCounted = true; + std::vector:: iterator it; + for (it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); ++it) + { + pugi::xml_document doc; + pugi::xml_node root; + std::string xmlReadPath = (*it)->getGamelistPath(false); + + if(boost::filesystem::exists(xmlReadPath)) + { + pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); + if (!result) + continue; + root = doc.child("gameList"); + if (!root) + continue; + for(pugi::xml_node fileNode = root.child("game"); fileNode; fileNode = fileNode.next_sibling("game")) + { + pugi::xml_node videoNode = fileNode.child("video"); + if (videoNode) + ++mVideoCount; + } + } + } + } +} + +void SystemScreenSaver::pickRandomVideo(std::string& path) +{ + countVideos(); + if (mVideoCount > 0) + { + srand((unsigned int)time(NULL)); + int video = (int)(((float)rand() / float(RAND_MAX)) * (float)mVideoCount); + + std::vector:: iterator it; + for (it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); ++it) + { + pugi::xml_document doc; + pugi::xml_node root; + std::string xmlReadPath = (*it)->getGamelistPath(false); + + if(boost::filesystem::exists(xmlReadPath)) + { + pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); + if (!result) + continue; + root = doc.child("gameList"); + if (!root) + continue; + for(pugi::xml_node fileNode = root.child("game"); fileNode; fileNode = fileNode.next_sibling("game")) + { + pugi::xml_node videoNode = fileNode.child("video"); + if (videoNode) + { + // See if this is the randomly selected video + if (video-- == 0) + { + // Yes. Resolve to a full path + path = resolvePath(videoNode.text().get(), (*it)->getStartPath(), true).generic_string(); + return; + } + } + } + } + } + } +} + +void SystemScreenSaver::update(int deltaTime) +{ + // Use this to update the fade value for the current fade stage + if (mState == STATE_FADE_OUT_WINDOW) + { + mOpacity += (float)deltaTime / FADE_TIME; + if (mOpacity >= 1.0f) + { + mOpacity = 1.0f; + + // Update to the next state + mState = STATE_FADE_IN_VIDEO; + } + } + else if (mState == STATE_FADE_IN_VIDEO) + { + mOpacity -= (float)deltaTime / FADE_TIME; + if (mOpacity <= 0.0f) + { + mOpacity = 0.0f; + // Update to the next state + mState = STATE_SCREENSAVER_ACTIVE; + } + } + else if (mState == STATE_SCREENSAVER_ACTIVE) + { + // Update the timer that swaps the videos + mTimer += deltaTime; + if (mTimer > SWAP_VIDEO_TIMEOUT) + { + stopScreenSaver(); + startScreenSaver(); + mState = STATE_SCREENSAVER_ACTIVE; + } + } + + // If we have a loaded video then update it + if (mVideoScreensaver) + mVideoScreensaver->update(deltaTime); +} diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h new file mode 100644 index 0000000000..2e693e5968 --- /dev/null +++ b/es-app/src/SystemScreenSaver.h @@ -0,0 +1,39 @@ +#pragma once + +#include "Window.h" + +class VideoComponent; + +// Screensaver implementation for main window +class SystemScreenSaver : public Window::ScreenSaver +{ +public: + SystemScreenSaver(Window* window); + virtual ~SystemScreenSaver(); + + virtual void startScreenSaver(); + virtual void stopScreenSaver(); + virtual void renderScreenSaver(); + virtual bool allowSleep(); + virtual void update(int deltaTime); + +private: + void countVideos(); + void pickRandomVideo(std::string& path); + + enum STATE { + STATE_INACTIVE, + STATE_FADE_OUT_WINDOW, + STATE_FADE_IN_VIDEO, + STATE_SCREENSAVER_ACTIVE + }; + +private: + bool mCounted; + unsigned long mVideoCount; + VideoComponent* mVideoScreensaver; + Window* mWindow; + STATE mState; + float mOpacity; + int mTimer; +}; diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 9735b0f603..3d3e8d3a2d 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -112,10 +112,11 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addSaveFunc([screensaver_time] { Settings::getInstance()->setInt("ScreenSaverTime", (int)round(screensaver_time->getValue()) * (1000 * 60)); }); // screensaver behavior - auto screensaver_behavior = std::make_shared< OptionListComponent >(mWindow, "TRANSITION STYLE", false); + auto screensaver_behavior = std::make_shared< OptionListComponent >(mWindow, "STYLE", false); std::vector screensavers; screensavers.push_back("dim"); screensavers.push_back("black"); + screensavers.push_back("random video"); for(auto it = screensavers.begin(); it != screensavers.end(); it++) screensaver_behavior->add(*it, *it, Settings::getInstance()->getString("ScreenSaverBehavior") == *it); s->addWithLabel("SCREENSAVER BEHAVIOR", screensaver_behavior); diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index dec399bded..0128089be1 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -14,6 +14,7 @@ #include "platform.h" #include "Log.h" #include "Window.h" +#include "SystemScreenSaver.h" #include "EmulationStation.h" #include "Settings.h" #include "ScraperCmdLine.h" @@ -222,6 +223,7 @@ int main(int argc, char* argv[]) atexit(&onExit); Window window; + SystemScreenSaver screensaver(&window); ViewController::init(&window); window.pushGui(ViewController::get()); diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 66b921b885..6172cd5288 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -87,6 +87,7 @@ class GuiComponent virtual void onShow(); virtual void onHide(); + virtual void onScreenSaverActivate(); virtual void onScreenSaverDeactivate(); virtual void topWindow(bool isTop); diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index b8c6bc1444..8bf64fd732 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -10,7 +10,7 @@ #include "components/ImageComponent.h" Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), - mAllowSleep(true), mSleeping(false), mTimeSinceLastInput(0) + mAllowSleep(true), mSleeping(false), mTimeSinceLastInput(0), mScreenSaver(NULL), mRenderScreenSaver(false) { mHelp = new HelpComponent(this); mBackgroundOverlay = new ImageComponent(this); @@ -128,13 +128,14 @@ void Window::input(InputConfig* config, Input input) { // wake up mTimeSinceLastInput = 0; - + cancelScreenSaver(); mSleeping = false; onWake(); return; } mTimeSinceLastInput = 0; + cancelScreenSaver(); if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_g && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) { @@ -194,6 +195,10 @@ void Window::update(int deltaTime) if(peekGui()) peekGui()->update(deltaTime); + + // Update the screensaver + if (mScreenSaver) + mScreenSaver->update(deltaTime); } void Window::render() @@ -226,18 +231,16 @@ void Window::render() } unsigned int screensaverTime = (unsigned int)Settings::getInstance()->getInt("ScreenSaverTime"); + if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0) + startScreenSaver(); + + // Always call the screensaver render function regardless of whether the screensaver is active + // or not because it may perform a fade on transition + renderScreenSaver(); + if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0) { - if (!mRenderScreenSaver) - { - for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) - (*i)->onScreenSaverActivate(); - mRenderScreenSaver = true; - } - - renderScreenSaver(); - - if (!isProcessing() && mAllowSleep) + if (!isProcessing() && mAllowSleep && (!mScreenSaver || mScreenSaver->allowSleep())) { // go to sleep mSleeping = true; @@ -374,9 +377,35 @@ bool Window::isProcessing() return count_if(mGuiStack.begin(), mGuiStack.end(), [](GuiComponent* c) { return c->isProcessing(); }) > 0; } -void Window::renderScreenSaver() -{ - Renderer::setMatrix(Eigen::Affine3f::Identity()); - unsigned char opacity = Settings::getInstance()->getString("ScreenSaverBehavior") == "dim" ? 0xA0 : 0xFF; - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity); -} +void Window::startScreenSaver() + { + if (mScreenSaver && !mRenderScreenSaver) + { + // Tell the GUI components the screensaver is starting + for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) + (*i)->onScreenSaverActivate(); + + mScreenSaver->startScreenSaver(); + mRenderScreenSaver = true; + } + } + + void Window::cancelScreenSaver() + { + if (mScreenSaver && mRenderScreenSaver) + { + mScreenSaver->stopScreenSaver(); + mRenderScreenSaver = false; + + // Tell the GUI components the screensaver has stopped + for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) + (*i)->onScreenSaverDeactivate(); + } + } + + void Window::renderScreenSaver() + { + if (mScreenSaver) + mScreenSaver->renderScreenSaver(); + } + diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 6e2c93d3aa..d1e6bdd394 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -11,6 +11,15 @@ class ImageComponent; class Window { public: + class ScreenSaver { + public: + virtual void startScreenSaver() = 0; + virtual void stopScreenSaver() = 0; + virtual void renderScreenSaver() = 0; + virtual bool allowSleep() = 0; + virtual void update(int deltaTime) = 0; + }; + Window(); ~Window(); @@ -38,6 +47,8 @@ class Window void renderHelpPromptsEarly(); // used to render HelpPrompts before a fade void setHelpPrompts(const std::vector& prompts, const HelpStyle& style); + void setScreenSaver(ScreenSaver* screenSaver) { mScreenSaver = screenSaver; } + private: void onSleep(); void onWake(); @@ -45,9 +56,13 @@ class Window // Returns true if at least one component on the stack is processing bool isProcessing(); void renderScreenSaver(); + void startScreenSaver(); + void cancelScreenSaver(); HelpComponent* mHelp; ImageComponent* mBackgroundOverlay; + ScreenSaver* mScreenSaver; + bool mRenderScreenSaver; std::vector mGuiStack; diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 3096688fac..bd9b68087b 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -19,6 +19,7 @@ VideoPlayerComponent::VideoPlayerComponent(Window* window) : VideoPlayerComponent::~VideoPlayerComponent() { + stopVideo(); } void VideoPlayerComponent::render(const Eigen::Affine3f& parentTrans) diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 5e1be839c7..8adedf6289 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -45,6 +45,7 @@ VideoVlcComponent::VideoVlcComponent(Window* window) : VideoVlcComponent::~VideoVlcComponent() { + stopVideo(); } void VideoVlcComponent::setResize(float width, float height) From bd348f03a2dbc740e5c1b339badd6fae049e337c Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 8 Jun 2017 15:57:01 +0100 Subject: [PATCH 114/603] added additional libmali.so search path for the tinker board. --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f8e4e2d65..aa442ea2c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,7 +31,8 @@ MESSAGE("Looking for libMali.so") if(EXISTS "/usr/lib/libMali.so" OR EXISTS "/usr/lib/arm-linux-gnueabihf/libMali.so" OR EXISTS "/usr/lib/aarch64-linux-gnu/libMali.so" OR - EXISTS "/usr/lib/arm-linux-gnueabihf/mali-egl/libmali.so") + EXISTS "/usr/lib/arm-linux-gnueabihf/mali-egl/libmali.so" OR + EXISTS "/usr/lib/arm-linux-gnueabihf/libmali.so") MESSAGE("libMali.so found") set(GLSystem "OpenGL ES") else() From 1a6beb552024990469f666e0dbb9f9870db1a446 Mon Sep 17 00:00:00 2001 From: jrassa Date: Thu, 8 Jun 2017 19:18:27 -0400 Subject: [PATCH 115/603] make color themable for ratings like normal images --- es-app/src/components/RatingComponent.cpp | 34 +++++++++++++++++++---- es-app/src/components/RatingComponent.h | 11 ++++++++ es-core/src/ThemeData.cpp | 1 + 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index 3dbc36a0a4..56923807eb 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -3,7 +3,7 @@ #include "Window.h" #include "Util.h" -RatingComponent::RatingComponent(Window* window) : GuiComponent(window) +RatingComponent::RatingComponent(Window* window) : GuiComponent(window), mColorShift(0xFFFFFFFF) { mFilledTexture = TextureResource::get(":/star_filled.svg", true); mUnfilledTexture = TextureResource::get(":/star_unfilled.svg", true); @@ -37,6 +37,22 @@ std::string RatingComponent::getValue() const return ss.str(); } +void RatingComponent::setOpacity(unsigned char opacity) +{ + mOpacity = opacity; + mColorShift = (mColorShift >> 8 << 8) | mOpacity; + updateColors(); +} + +void RatingComponent::setColorShift(unsigned int color) +{ + mColorShift = color; + // Grab the opacity from the color shift because we may need to apply it if + // fading textures in + mOpacity = color & 0xff; + updateColors(); +} + void RatingComponent::onSizeChanged() { if(mSize.y() == 0) @@ -87,6 +103,11 @@ void RatingComponent::updateVertices() mVertices[11] = mVertices[7]; } +void RatingComponent::updateColors() +{ + Renderer::buildGLColorArray(mColors, mColorShift, 12); +} + void RatingComponent::render(const Eigen::Affine3f& parentTrans) { Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); @@ -96,13 +117,13 @@ void RatingComponent::render(const Eigen::Affine3f& parentTrans) glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glColor4ub(255, 255, 255, getOpacity()); - glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].pos); glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].tex); + glColorPointer(4, GL_UNSIGNED_BYTE, 0, mColors); mFilledTexture->bind(); glDrawArrays(GL_TRIANGLES, 0, 6); @@ -112,12 +133,11 @@ void RatingComponent::render(const Eigen::Affine3f& parentTrans) glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); - glColor4ub(255, 255, 255, 255); - renderChildren(trans); } @@ -157,6 +177,10 @@ void RatingComponent::applyTheme(const std::shared_ptr& theme, const imgChanged = true; } + + if(properties & COLOR && elem->has("color")) + setColorShift(elem->get("color")); + if(imgChanged) onSizeChanged(); } diff --git a/es-app/src/components/RatingComponent.h b/es-app/src/components/RatingComponent.h index a275c2701e..5723aef9b2 100644 --- a/es-app/src/components/RatingComponent.h +++ b/es-app/src/components/RatingComponent.h @@ -23,12 +23,18 @@ class RatingComponent : public GuiComponent void onSizeChanged() override; + void setOpacity(unsigned char opacity) override; + + // Multiply all pixels in the image by this color when rendering. + void setColorShift(unsigned int color); + virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; virtual std::vector getHelpPrompts() override; private: void updateVertices(); + void updateColors(); float mValue; @@ -38,6 +44,11 @@ class RatingComponent : public GuiComponent Eigen::Vector2f tex; } mVertices[12]; + + GLubyte mColors[12*4]; + + unsigned int mColorShift; + std::shared_ptr mFilledTexture; std::shared_ptr mUnfilledTexture; }; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index ed6980613e..ff92d60285 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -88,6 +88,7 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("rating", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) + ("color", COLOR) ("filledPath", PATH) ("unfilledPath", PATH) ("zIndex", FLOAT))) From 59d7516a1618604644067101aed87a4cc13f3fe0 Mon Sep 17 00:00:00 2001 From: pjft Date: Thu, 1 Jun 2017 21:08:44 +0100 Subject: [PATCH 116/603] Random Game Screensaver, Game Name and Controls - Final changes for VLC screensaver support as well - ALSA de-init/re-init only when needed - Adding screensaver options menu inside UI settings - Slightly moved options (Show Frameskip to "Other Settings", sorting within same menu) - Adding info popups on random video screensaver and OMX + Game Info setting --- es-app/CMakeLists.txt | 2 + es-app/src/SystemScreenSaver.cpp | 153 +++++++++++++++--- es-app/src/SystemScreenSaver.h | 10 ++ es-app/src/guis/GuiMenu.cpp | 130 ++++++++------- es-app/src/guis/GuiMenu.h | 2 +- es-app/src/guis/GuiScreensaverOptions.cpp | 125 ++++++++++++++ es-app/src/guis/GuiScreensaverOptions.h | 24 +++ es-app/src/views/SystemView.cpp | 10 ++ es-app/src/views/gamelist/BasicGameListView.h | 2 +- .../src/views/gamelist/DetailedGameListView.h | 1 - es-app/src/views/gamelist/GridGameListView.h | 2 +- es-app/src/views/gamelist/IGameListView.h | 1 + .../src/views/gamelist/ISimpleGameListView.h | 2 +- .../src/views/gamelist/VideoGameListView.cpp | 8 +- es-app/src/views/gamelist/VideoGameListView.h | 3 +- es-core/src/Settings.cpp | 12 ++ es-core/src/Window.cpp | 97 ++++++----- es-core/src/Window.h | 15 +- es-core/src/components/VideoComponent.cpp | 45 ++++++ es-core/src/components/VideoComponent.h | 8 + .../src/components/VideoPlayerComponent.cpp | 60 +++++-- es-core/src/components/VideoPlayerComponent.h | 3 +- es-core/src/components/VideoVlcComponent.cpp | 61 +++++-- es-core/src/components/VideoVlcComponent.h | 5 +- es-core/src/platform.h | 1 + 25 files changed, 621 insertions(+), 161 deletions(-) create mode 100644 es-app/src/guis/GuiScreensaverOptions.cpp create mode 100644 es-app/src/guis/GuiScreensaverOptions.h diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 2378348c4e..d44c16ac1c 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -24,6 +24,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScreensaverOptions.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.h @@ -73,6 +74,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMetaDataEd.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScreensaverOptions.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.cpp diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 3d3c46a62a..242d3ef9c1 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -3,12 +3,17 @@ #include "components/VideoPlayerComponent.h" #endif #include "components/VideoVlcComponent.h" +#include "platform.h" #include "Renderer.h" #include "Settings.h" #include "SystemData.h" #include "Util.h" +#include "Log.h" +#include "views/ViewController.h" +#include "views/gamelist/IGameListView.h" +#include -#define FADE_TIME 3000 +#define FADE_TIME 300 #define SWAP_VIDEO_TIMEOUT 30000 SystemScreenSaver::SystemScreenSaver(Window* window) : @@ -18,19 +23,35 @@ SystemScreenSaver::SystemScreenSaver(Window* window) : mVideoCount(0), mState(STATE_INACTIVE), mOpacity(0.0f), - mTimer(0) + mTimer(0), + mSystemName(""), + mGameName(""), + mCurrentGame(NULL) { mWindow->setScreenSaver(this); + std::string path = getTitleFolder(); + if(!boost::filesystem::exists(path)) + boost::filesystem::create_directory(path); + srand((unsigned int)time(NULL)); } SystemScreenSaver::~SystemScreenSaver() { + // Delete subtitle file, if existing + remove(getTitlePath().c_str()); + mCurrentGame = NULL; delete mVideoScreensaver; } bool SystemScreenSaver::allowSleep() { - return false; + //return false; + return (mVideoScreensaver == NULL); +} + +bool SystemScreenSaver::isScreenSaverActive() +{ + return (mState != STATE_INACTIVE); } void SystemScreenSaver::startScreenSaver() @@ -42,34 +63,50 @@ void SystemScreenSaver::startScreenSaver() mOpacity = 0.0f; // Load a random video - std::string path; + std::string path = ""; pickRandomVideo(path); - if (!path.empty()) + + int retry = 200; + while(retry > 0 && ((path.empty() || !boost::filesystem::exists(path)) || mCurrentGame == NULL)) { - // Create the correct type of video component + retry--; + pickRandomVideo(path); + } + + if (!path.empty() && boost::filesystem::exists(path)) + { + // Create the correct type of video component + #ifdef _RPI_ - if (Settings::getInstance()->getBool("VideoOmxPlayer")) - mVideoScreensaver = new VideoPlayerComponent(mWindow); + if (Settings::getInstance()->getBool("ScreenSaverOmxPlayer")) + mVideoScreensaver = new VideoPlayerComponent(mWindow, getTitlePath()); else - mVideoScreensaver = new VideoVlcComponent(mWindow); + mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); #else - mVideoScreensaver = new VideoVlcComponent(mWindow); + mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); #endif + mVideoScreensaver->setOrigin(0.5f, 0.5f); + mVideoScreensaver->setPosition(Renderer::getScreenWidth()/2, Renderer::getScreenHeight()/2); - mVideoScreensaver->setOrigin(0.0f, 0.0f); - mVideoScreensaver->setPosition(0.0f, 0.0f); - mVideoScreensaver->setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + if (Settings::getInstance()->getBool("StretchVideoOnScreenSaver")) + { + mVideoScreensaver->setResize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + } + else + { + mVideoScreensaver->setMaxSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + } mVideoScreensaver->setVideo(path); + mVideoScreensaver->setScreensaverMode(true); mVideoScreensaver->onShow(); mTimer = 0; - } - else - { - // No videos. Just use a standard screensaver - mState = STATE_SCREENSAVER_ACTIVE; + return; } } + // No videos. Just use a standard screensaver + mState = STATE_SCREENSAVER_ACTIVE; + mCurrentGame = NULL; } void SystemScreenSaver::stopScreenSaver() @@ -81,17 +118,18 @@ void SystemScreenSaver::stopScreenSaver() void SystemScreenSaver::renderScreenSaver() { - if (mVideoScreensaver) + if (mVideoScreensaver && Settings::getInstance()->getString("ScreenSaverBehavior") == "random video") { + // Render black background + Renderer::setMatrix(Eigen::Affine3f::Identity()); + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), (unsigned char)(255)); + // Only render the video if the state requires it if ((int)mState >= STATE_FADE_IN_VIDEO) { Eigen::Affine3f transform = Eigen::Affine3f::Identity(); mVideoScreensaver->render(transform); } - // Handle any fade - Renderer::setMatrix(Eigen::Affine3f::Identity()); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), (unsigned char)(mOpacity * 255)); } else if (mState != STATE_INACTIVE) { @@ -136,9 +174,9 @@ void SystemScreenSaver::countVideos() void SystemScreenSaver::pickRandomVideo(std::string& path) { countVideos(); + mCurrentGame = NULL; if (mVideoCount > 0) { - srand((unsigned int)time(NULL)); int video = (int)(((float)rand() / float(RAND_MAX)) * (float)mVideoCount); std::vector:: iterator it; @@ -166,6 +204,48 @@ void SystemScreenSaver::pickRandomVideo(std::string& path) { // Yes. Resolve to a full path path = resolvePath(videoNode.text().get(), (*it)->getStartPath(), true).generic_string(); + mSystemName = (*it)->getFullName(); + mGameName = fileNode.child("name").text().get(); + + // getting corresponding FileData + + // try the easy way. Should work for the majority of cases, unless in subfolders + FileData* rootFileData = (*it)->getRootFolder(); + std::string gamePath = resolvePath(fileNode.child("path").text().get(), (*it)->getStartPath(), false).string(); + + std::string shortPath = gamePath; + shortPath = shortPath.replace(0, (*it)->getStartPath().length()+1, ""); + + const std::unordered_map& children = rootFileData->getChildrenByFilename(); + std::unordered_map::const_iterator screenSaverGame = children.find(shortPath); + + if (screenSaverGame != children.end()) + { + // Found the corresponding FileData + mCurrentGame = screenSaverGame->second; + } + else + { + // Couldn't find FileData. Going for the full iteration. + // iterate on children + FileType type = GAME; + std::vector allFiles = rootFileData->getFilesRecursive(type); + std::vector::iterator itf; // declare an iterator to a vector of strings + + int i = 0; + for(itf=allFiles.begin() ; itf < allFiles.end(); itf++,i++ ) { + if ((*itf)->getPath() == gamePath) + { + mCurrentGame = (*itf); + break; + } + } + } + + // end of getting FileData + if (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never") + writeSubtitle(mGameName.c_str(), mSystemName.c_str(), + (Settings::getInstance()->getString("ScreenSaverGameInfo") == "always")); return; } } @@ -205,9 +285,7 @@ void SystemScreenSaver::update(int deltaTime) mTimer += deltaTime; if (mTimer > SWAP_VIDEO_TIMEOUT) { - stopScreenSaver(); - startScreenSaver(); - mState = STATE_SCREENSAVER_ACTIVE; + nextVideo(); } } @@ -215,3 +293,26 @@ void SystemScreenSaver::update(int deltaTime) if (mVideoScreensaver) mVideoScreensaver->update(deltaTime); } + +void SystemScreenSaver::nextVideo() { + stopScreenSaver(); + startScreenSaver(); + mState = STATE_SCREENSAVER_ACTIVE; +} + +FileData* SystemScreenSaver::getCurrentGame() +{ + return mCurrentGame; +} + +void SystemScreenSaver::launchGame() +{ + // launching Game + ViewController::get()->goToGameList(mCurrentGame->getSystem()); + IGameListView* view = ViewController::get()->getGameListView(mCurrentGame->getSystem()).get(); + view->setCursor(mCurrentGame); + if (Settings::getInstance()->getBool("ScreenSaverControls")) + { + view->launch(mCurrentGame); + } +} \ No newline at end of file diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index 2e693e5968..55d99c1610 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -13,14 +13,21 @@ class SystemScreenSaver : public Window::ScreenSaver virtual void startScreenSaver(); virtual void stopScreenSaver(); + virtual void nextVideo(); virtual void renderScreenSaver(); virtual bool allowSleep(); virtual void update(int deltaTime); + virtual bool isScreenSaverActive(); + + virtual FileData* getCurrentGame(); + virtual void launchGame(); private: void countVideos(); void pickRandomVideo(std::string& path); + void input(InputConfig* config, Input input); + enum STATE { STATE_INACTIVE, STATE_FADE_OUT_WINDOW, @@ -36,4 +43,7 @@ class SystemScreenSaver : public Window::ScreenSaver STATE mState; float mOpacity; int mTimer; + FileData* mCurrentGame; + std::string mGameName; + std::string mSystemName; }; diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 3d3e8d3a2d..43ced83309 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -6,6 +6,7 @@ #include "Settings.h" #include "guis/GuiMsgBox.h" #include "guis/GuiSettings.h" +#include "guis/GuiScreensaverOptions.h" #include "guis/GuiScraperStart.h" #include "guis/GuiDetectDevice.h" #include "views/ViewController.h" @@ -98,6 +99,30 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("ENABLE NAVIGATION SOUNDS", sounds_enabled); s->addSaveFunc([sounds_enabled] { Settings::getInstance()->setBool("EnableSounds", sounds_enabled->getState()); }); + auto video_audio = std::make_shared(mWindow); + video_audio->setState(Settings::getInstance()->getBool("VideoAudio")); + s->addWithLabel("ENABLE VIDEO AUDIO", video_audio); + s->addSaveFunc([video_audio] { Settings::getInstance()->setBool("VideoAudio", video_audio->getState()); }); + +#ifdef _RPI_ + // OMX player Audio Device + auto omx_audio_dev = std::make_shared< OptionListComponent >(mWindow, "OMX PLAYER AUDIO DEVICE", false); + std::vector devices; + devices.push_back("local"); + devices.push_back("hdmi"); + devices.push_back("both"); + // USB audio + devices.push_back("alsa:hw:0,0"); + devices.push_back("alsa:hw:1,0"); + for (auto it = devices.begin(); it != devices.end(); it++) + omx_audio_dev->add(*it, *it, Settings::getInstance()->getString("OMXAudioDev") == *it); + s->addWithLabel("OMX PLAYER AUDIO DEVICE", omx_audio_dev); + s->addSaveFunc([omx_audio_dev] { + if (Settings::getInstance()->getString("OMXAudioDev") != omx_audio_dev->getSelected()) + Settings::getInstance()->setString("OMXAudioDev", omx_audio_dev->getSelected()); + }); +#endif + mWindow->pushGui(s); }); @@ -112,7 +137,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addSaveFunc([screensaver_time] { Settings::getInstance()->setInt("ScreenSaverTime", (int)round(screensaver_time->getValue()) * (1000 * 60)); }); // screensaver behavior - auto screensaver_behavior = std::make_shared< OptionListComponent >(mWindow, "STYLE", false); + auto screensaver_behavior = std::make_shared< OptionListComponent >(mWindow, "SCREENSAVER BEHAVIOR", false); std::vector screensavers; screensavers.push_back("dim"); screensavers.push_back("black"); @@ -120,19 +145,24 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN for(auto it = screensavers.begin(); it != screensavers.end(); it++) screensaver_behavior->add(*it, *it, Settings::getInstance()->getString("ScreenSaverBehavior") == *it); s->addWithLabel("SCREENSAVER BEHAVIOR", screensaver_behavior); - s->addSaveFunc([screensaver_behavior] { Settings::getInstance()->setString("ScreenSaverBehavior", screensaver_behavior->getSelected()); }); + s->addSaveFunc([this, screensaver_behavior] { + if (Settings::getInstance()->getString("ScreenSaverBehavior") != "random video" && screensaver_behavior->getSelected() == "random video") { + // if before it wasn't risky but now there's a risk of problems, show warning + mWindow->pushGui(new GuiMsgBox(mWindow, + "The \"Random Video\" screensaver shows videos from your gamelist.\n\nIf you do not have videos, or if in several consecutive attempts the games it selects don't have videos it will default to black.\n\nMore options in the \"UI Settings\" > \"Video Screensaver\" menu.", + "OK", [] { return; })); + } + Settings::getInstance()->setString("ScreenSaverBehavior", screensaver_behavior->getSelected()); + }); - // framerate - auto framerate = std::make_shared(mWindow); - framerate->setState(Settings::getInstance()->getBool("DrawFramerate")); - s->addWithLabel("SHOW FRAMERATE", framerate); - s->addSaveFunc([framerate] { Settings::getInstance()->setBool("DrawFramerate", framerate->getState()); }); + ComponentListRow row; - // show help - auto show_help = std::make_shared(mWindow); - show_help->setState(Settings::getInstance()->getBool("ShowHelpPrompts")); - s->addWithLabel("ON-SCREEN HELP", show_help); - s->addSaveFunc([show_help] { Settings::getInstance()->setBool("ShowHelpPrompts", show_help->getState()); }); + // show filtered menu + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "VIDEO SCREENSAVER SETTINGS", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(makeArrow(mWindow), false); + row.makeAcceptInputHandler(std::bind(&GuiMenu::openScreensaverOptions, this)); + s->addRow(row); // quick system select (left/right in game list view) auto quick_sys_select = std::make_shared(mWindow); @@ -198,18 +228,36 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN if (needReload) ViewController::get()->reloadAll(); }); + + // show help + auto show_help = std::make_shared(mWindow); + show_help->setState(Settings::getInstance()->getBool("ShowHelpPrompts")); + s->addWithLabel("ON-SCREEN HELP", show_help); + s->addSaveFunc([show_help] { Settings::getInstance()->setBool("ShowHelpPrompts", show_help->getState()); }); + mWindow->pushGui(s); }); - addEntry("VIDEO PLAYER SETTINGS", 0x777777FF, true, + addEntry("OTHER SETTINGS", 0x777777FF, true, [this] { - auto s = new GuiSettings(mWindow, "VIDEO PLAYER SETTINGS"); + auto s = new GuiSettings(mWindow, "OTHER SETTINGS"); + + // gamelists + auto save_gamelists = std::make_shared(mWindow); + save_gamelists->setState(Settings::getInstance()->getBool("SaveGamelistsOnExit")); + s->addWithLabel("SAVE METADATA ON EXIT", save_gamelists); + s->addSaveFunc([save_gamelists] { Settings::getInstance()->setBool("SaveGamelistsOnExit", save_gamelists->getState()); }); + + auto parse_gamelists = std::make_shared(mWindow); + parse_gamelists->setState(Settings::getInstance()->getBool("ParseGamelistOnly")); + s->addWithLabel("PARSE GAMESLISTS ONLY", parse_gamelists); + s->addSaveFunc([parse_gamelists] { Settings::getInstance()->setBool("ParseGamelistOnly", parse_gamelists->getState()); }); #ifdef _RPI_ // Video Player - VideoOmxPlayer auto omx_player = std::make_shared(mWindow); omx_player->setState(Settings::getInstance()->getBool("VideoOmxPlayer")); - s->addWithLabel("USE OMX VIDEO PLAYER (HW ACCELERATED)", omx_player); + s->addWithLabel("USE OMX PLAYER (HW ACCELERATED)", omx_player); s->addSaveFunc([omx_player] { // need to reload all views to re-create the right video components @@ -222,46 +270,8 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN if(needReload) ViewController::get()->reloadAll(); }); - - // OMX player Audio Device - auto omx_audio_dev = std::make_shared< OptionListComponent >(mWindow, "OMX PLAYER AUDIO DEVICE", false); - std::vector devices; - devices.push_back("local"); - devices.push_back("hdmi"); - devices.push_back("both"); - // USB audio - devices.push_back("alsa:hw:0,0"); - devices.push_back("alsa:hw:1,0"); - for (auto it = devices.begin(); it != devices.end(); it++) - omx_audio_dev->add(*it, *it, Settings::getInstance()->getString("OMXAudioDev") == *it); - s->addWithLabel("OMX PLAYER AUDIO DEVICE", omx_audio_dev); - s->addSaveFunc([omx_audio_dev] { - if (Settings::getInstance()->getString("OMXAudioDev") != omx_audio_dev->getSelected()) - Settings::getInstance()->setString("OMXAudioDev", omx_audio_dev->getSelected()); - }); -#endif - auto video_audio = std::make_shared(mWindow); - video_audio->setState(Settings::getInstance()->getBool("VideoAudio")); - s->addWithLabel("ENABLE VIDEO AUDIO", video_audio); - s->addSaveFunc([video_audio] { Settings::getInstance()->setBool("VideoAudio", video_audio->getState()); }); - mWindow->pushGui(s); - }); - - addEntry("OTHER SETTINGS", 0x777777FF, true, - [this] { - auto s = new GuiSettings(mWindow, "OTHER SETTINGS"); - - // gamelists - auto save_gamelists = std::make_shared(mWindow); - save_gamelists->setState(Settings::getInstance()->getBool("SaveGamelistsOnExit")); - s->addWithLabel("SAVE METADATA ON EXIT", save_gamelists); - s->addSaveFunc([save_gamelists] { Settings::getInstance()->setBool("SaveGamelistsOnExit", save_gamelists->getState()); }); - - auto parse_gamelists = std::make_shared(mWindow); - parse_gamelists->setState(Settings::getInstance()->getBool("ParseGamelistOnly")); - s->addWithLabel("PARSE GAMESLISTS ONLY", parse_gamelists); - s->addSaveFunc([parse_gamelists] { Settings::getInstance()->setBool("ParseGamelistOnly", parse_gamelists->getState()); }); +#endif // maximum vram auto max_vram = std::make_shared(mWindow, 0.f, 1000.f, 10.f, "Mb"); @@ -269,6 +279,13 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("VRAM LIMIT", max_vram); s->addSaveFunc([max_vram] { Settings::getInstance()->setInt("MaxVRAM", (int)round(max_vram->getValue())); }); + // framerate + auto framerate = std::make_shared(mWindow); + framerate->setState(Settings::getInstance()->getBool("DrawFramerate")); + s->addWithLabel("SHOW FRAMERATE", framerate); + s->addSaveFunc([framerate] { Settings::getInstance()->setBool("DrawFramerate", framerate->getState()); }); + + mWindow->pushGui(s); }); @@ -351,6 +368,11 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, Renderer::getScreenHeight() * 0.15f); } +void GuiMenu::openScreensaverOptions() { + GuiScreensaverOptions* ggf = new GuiScreensaverOptions(mWindow, "VIDEO SCREENSAVER"); + mWindow->pushGui(ggf); +} + void GuiMenu::onSizeChanged() { mVersion.setSize(mSize.x(), 0); diff --git a/es-app/src/guis/GuiMenu.h b/es-app/src/guis/GuiMenu.h index 19fa1d3343..42862d24af 100644 --- a/es-app/src/guis/GuiMenu.h +++ b/es-app/src/guis/GuiMenu.h @@ -16,7 +16,7 @@ class GuiMenu : public GuiComponent private: void addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func); - + void openScreensaverOptions(); MenuComponent mMenu; TextComponent mVersion; }; diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp new file mode 100644 index 0000000000..51eb8fc50c --- /dev/null +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -0,0 +1,125 @@ +#include "guis/GuiScreensaverOptions.h" +#include "Window.h" +#include "Settings.h" +#include "views/ViewController.h" + +#include "components/ButtonComponent.h" +#include "components/SwitchComponent.h" +#include "components/SliderComponent.h" +#include "components/TextComponent.h" +#include "components/OptionListComponent.h" +#include "components/MenuComponent.h" +#include "guis/GuiMsgBox.h" + +GuiScreensaverOptions::GuiScreensaverOptions(Window* window, const char* title) : GuiComponent(window), mMenu(window, title) +{ + addChild(&mMenu); + +#ifdef _RPI_ + auto ss_omx = std::make_shared(mWindow); + ss_omx->setState(Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); + addWithLabel("USE OMX PLAYER FOR SCREENSAVER", ss_omx); + addSaveFunc([ss_omx, this] { Settings::getInstance()->setBool("ScreenSaverOmxPlayer", ss_omx->getState()); }); +#endif + + // Allow ScreenSaver Controls - ScreenSaverControls + auto ss_controls = std::make_shared(mWindow); + ss_controls->setState(Settings::getInstance()->getBool("ScreenSaverControls")); + addWithLabel("SCREENSAVER CONTROLS", ss_controls); + addSaveFunc([ss_controls] { Settings::getInstance()->setBool("ScreenSaverControls", ss_controls->getState()); }); + + // Render Video Game Name as subtitles + auto ss_info = std::make_shared< OptionListComponent >(mWindow, "SHOW GAME INFO", false); + std::vector info_type; + info_type.push_back("always"); + info_type.push_back("start & end"); + info_type.push_back("never"); + for(auto it = info_type.begin(); it != info_type.end(); it++) + ss_info->add(*it, *it, Settings::getInstance()->getString("ScreenSaverGameInfo") == *it); + addWithLabel("SHOW GAME INFO ON SCREENSAVER", ss_info); + addSaveFunc([ss_info, this] { Settings::getInstance()->setString("ScreenSaverGameInfo", ss_info->getSelected()); }); + +#ifndef _RPI_ + auto captions_compatibility = std::make_shared(mWindow); + captions_compatibility->setState(Settings::getInstance()->getBool("CaptionsCompatibility")); + addWithLabel("USE COMPATIBLE LOW RESOLUTION FOR CAPTIONS", captions_compatibility); + addSaveFunc([captions_compatibility] { Settings::getInstance()->setBool("CaptionsCompatibility", captions_compatibility->getState()); }); +#endif + + auto stretch_screensaver = std::make_shared(mWindow); + stretch_screensaver->setState(Settings::getInstance()->getBool("StretchVideoOnScreenSaver")); + addWithLabel("STRETCH VIDEO ON SCREENSAVER", stretch_screensaver); + addSaveFunc([stretch_screensaver] { Settings::getInstance()->setBool("StretchVideoOnScreenSaver", stretch_screensaver->getState()); }); + + mMenu.addButton("BACK", "go back", [this] { delete this; }); + + setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); +} + +GuiScreensaverOptions::~GuiScreensaverOptions() +{ + save(); +} + +void GuiScreensaverOptions::save() +{ + if(!mSaveFuncs.size()) + return; + +#ifdef _RPI_ + bool startingStatusNotRisky = (Settings::getInstance()->getString("ScreenSaverGameInfo") == "never" || !Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); +#endif + + for(auto it = mSaveFuncs.begin(); it != mSaveFuncs.end(); it++) + (*it)(); + + Settings::getInstance()->saveFile(); + +#ifdef _RPI_ + bool endStatusRisky = (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never" && Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); + if (startingStatusNotRisky && endStatusRisky) { + // if before it wasn't risky but now there's a risk of problems, show warning + mWindow->pushGui(new GuiMsgBox(mWindow, + "Using OMX Player and displaying Game Info may result in the video flickering in some TV modes. If that happens, consider:\n\n• Disabling the \"Show Game Info\" option;\n• Disabling \"Overscan\" on the Pi configuration menu might help:\nRetroPie > Raspi-Config > Advanced Options > Overscan > \"No\".\n• Disabling the use of OMX Player for the screensaver.", + "GOT IT!", [] { return; })); + } +#endif +} + +bool GuiScreensaverOptions::input(InputConfig* config, Input input) +{ + if(config->isMappedTo("b", input) && input.value != 0) + { + delete this; + return true; + } + + if(config->isMappedTo("start", input) && input.value != 0) + { + // close everything + Window* window = mWindow; + while(window->peekGui() && window->peekGui() != ViewController::get()) + delete window->peekGui(); + return true; + } + + return GuiComponent::input(config, input); +} + +HelpStyle GuiScreensaverOptions::getHelpStyle() +{ + HelpStyle style = HelpStyle(); + style.applyTheme(ViewController::get()->getState().getSystem()->getTheme(), "system"); + return style; +} + +std::vector GuiScreensaverOptions::getHelpPrompts() +{ + std::vector prompts = mMenu.getHelpPrompts(); + + prompts.push_back(HelpPrompt("b", "back")); + prompts.push_back(HelpPrompt("start", "close")); + + return prompts; +} diff --git a/es-app/src/guis/GuiScreensaverOptions.h b/es-app/src/guis/GuiScreensaverOptions.h new file mode 100644 index 0000000000..e90dceee54 --- /dev/null +++ b/es-app/src/guis/GuiScreensaverOptions.h @@ -0,0 +1,24 @@ +#include "GuiComponent.h" +#include "components/MenuComponent.h" +#include "SystemData.h" + +// This is just a really simple template for a GUI that calls some save functions when closed. +class GuiScreensaverOptions : public GuiComponent +{ +public: + GuiScreensaverOptions(Window* window, const char* title); + virtual ~GuiScreensaverOptions(); // just calls save(); + + void save(); + inline void addRow(const ComponentListRow& row) { mMenu.addRow(row); }; + inline void addWithLabel(const std::string& label, const std::shared_ptr& comp) { mMenu.addWithLabel(label, comp); }; + inline void addSaveFunc(const std::function& func) { mSaveFuncs.push_back(func); }; + + bool input(InputConfig* config, Input input) override; + std::vector getHelpPrompts() override; + HelpStyle getHelpStyle() override; + +private: + MenuComponent mMenu; + std::vector< std::function > mSaveFuncs; +}; \ No newline at end of file diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index d31df73efe..3252c8a5fd 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -158,6 +158,12 @@ bool SystemView::input(InputConfig* config, Input input) config->isMappedTo("up", input) || config->isMappedTo("down", input)) listInput(0); + if(config->isMappedTo("select", input) && Settings::getInstance()->getBool("ScreenSaverControls")) + { + mWindow->startScreenSaver(); + mWindow->renderScreenSaver(); + return true; + } } return GuiComponent::input(config, input); @@ -348,6 +354,10 @@ std::vector SystemView::getHelpPrompts() prompts.push_back(HelpPrompt("left/right", "choose")); prompts.push_back(HelpPrompt("a", "select")); prompts.push_back(HelpPrompt("x", "random")); + + if (Settings::getInstance()->getBool("ScreenSaverControls")) + prompts.push_back(HelpPrompt("select", "launch screensaver")); + return prompts; } diff --git a/es-app/src/views/gamelist/BasicGameListView.h b/es-app/src/views/gamelist/BasicGameListView.h index a1bf0b5d6f..00998cd8c4 100644 --- a/es-app/src/views/gamelist/BasicGameListView.h +++ b/es-app/src/views/gamelist/BasicGameListView.h @@ -19,10 +19,10 @@ class BasicGameListView : public ISimpleGameListView virtual const char* getName() const override { return "basic"; } virtual std::vector getHelpPrompts() override; + virtual void launch(FileData* game) override; protected: virtual void populateList(const std::vector& files) override; - virtual void launch(FileData* game) override; virtual void remove(FileData* game) override; TextListComponent mList; diff --git a/es-app/src/views/gamelist/DetailedGameListView.h b/es-app/src/views/gamelist/DetailedGameListView.h index 30396e04c7..3b470d34e4 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.h +++ b/es-app/src/views/gamelist/DetailedGameListView.h @@ -14,7 +14,6 @@ class DetailedGameListView : public BasicGameListView virtual const char* getName() const override { return "detailed"; } -protected: virtual void launch(FileData* game) override; private: diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index 81bf455850..5451410bd7 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -20,10 +20,10 @@ class GridGameListView : public ISimpleGameListView virtual const char* getName() const override { return "grid"; } virtual std::vector getHelpPrompts() override; + virtual void launch(FileData* game) override; protected: virtual void populateList(const std::vector& files) override; - virtual void launch(FileData* game) override; ImageGridComponent mGrid; }; diff --git a/es-app/src/views/gamelist/IGameListView.h b/es-app/src/views/gamelist/IGameListView.h index 5a44fbbee1..eb7610790b 100644 --- a/es-app/src/views/gamelist/IGameListView.h +++ b/es-app/src/views/gamelist/IGameListView.h @@ -35,6 +35,7 @@ class IGameListView : public GuiComponent virtual void remove(FileData* game) = 0; virtual const char* getName() const = 0; + virtual void launch(FileData* game) = 0; virtual HelpStyle getHelpStyle() override; diff --git a/es-app/src/views/gamelist/ISimpleGameListView.h b/es-app/src/views/gamelist/ISimpleGameListView.h index ff405b42a7..c629fc9604 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.h +++ b/es-app/src/views/gamelist/ISimpleGameListView.h @@ -23,10 +23,10 @@ class ISimpleGameListView : public IGameListView virtual void setCursor(FileData*) = 0; virtual bool input(InputConfig* config, Input input) override; + virtual void launch(FileData* game) = 0; protected: virtual void populateList(const std::vector& files) = 0; - virtual void launch(FileData* game) = 0; TextComponent mHeaderText; ImageComponent mHeaderImage; diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 9967497aae..09c6bbe7c4 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -29,11 +29,11 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : // Create the correct type of video window #ifdef _RPI_ if (Settings::getInstance()->getBool("VideoOmxPlayer")) - mVideo = new VideoPlayerComponent(window); + mVideo = new VideoPlayerComponent(window, ""); else - mVideo = new VideoVlcComponent(window); + mVideo = new VideoVlcComponent(window, getTitlePath()); #else - mVideo = new VideoVlcComponent(window); + mVideo = new VideoVlcComponent(window, getTitlePath()); #endif mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); @@ -227,6 +227,8 @@ void VideoGameListView::updateInfoPanel() { FileData* file = (mList.size() == 0 || mList.isScrolling()) ? NULL : mList.getSelected(); + boost::filesystem::remove(getTitlePath().c_str()); + bool fadingOut; if(file == NULL) { diff --git a/es-app/src/views/gamelist/VideoGameListView.h b/es-app/src/views/gamelist/VideoGameListView.h index 09b12f6020..6a14b15704 100644 --- a/es-app/src/views/gamelist/VideoGameListView.h +++ b/es-app/src/views/gamelist/VideoGameListView.h @@ -17,10 +17,9 @@ class VideoGameListView : public BasicGameListView virtual void onThemeChanged(const std::shared_ptr& theme) override; virtual const char* getName() const override { return "video"; } + virtual void launch(FileData* game) override; protected: - virtual void launch(FileData* game) override; - virtual void update(int deltaTime) override; private: diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index ac74ad68e5..3f88c8758e 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -77,10 +77,22 @@ void Settings::setDefaults() mStringMap["Scraper"] = "TheGamesDB"; mStringMap["GamelistViewStyle"] = "automatic"; + mBoolMap["ScreenSaverControls"] = true; + mStringMap["ScreenSaverGameInfo"] = "never"; + mBoolMap["StretchVideoOnScreenSaver"] = false; + // This setting only applies to raspberry pi but set it for all platforms so // we don't get a warning if we encounter it on a different platform mBoolMap["VideoOmxPlayer"] = false; + #ifdef _RPI_ + // we're defaulting to OMX Player for full screen video on the Pi + mBoolMap["ScreenSaverOmxPlayer"] = true; + #else + mBoolMap["ScreenSaverOmxPlayer"] = false; + #endif + mBoolMap["VideoAudio"] = true; + mBoolMap["CaptionsCompatibility"] = true; // Audio out device for Video playback using OMX player. mStringMap["OMXAudioDev"] = "both"; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 8bf64fd732..4101df0df6 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -115,13 +115,34 @@ void Window::textInput(const char* text) void Window::input(InputConfig* config, Input input) { - if (mRenderScreenSaver) - { - mRenderScreenSaver = false; - - // Tell the GUI components the screensaver has stopped - for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) - (*i)->onScreenSaverDeactivate(); + if (mScreenSaver) { + if(mScreenSaver->isScreenSaverActive() && Settings::getInstance()->getBool("ScreenSaverControls") && + (Settings::getInstance()->getString("ScreenSaverBehavior") == "random video")) + { + if(mScreenSaver->getCurrentGame() != NULL && (config->isMappedTo("right", input) || config->isMappedTo("start", input) || config->isMappedTo("select", input))) + { + if(config->isMappedTo("right", input) || config->isMappedTo("select", input)) + { + if (input.value != 0) { + // handle screensaver control + mScreenSaver->nextVideo(); + } + return; + } + else if(config->isMappedTo("start", input)) + { + // launch game! + cancelScreenSaver(); + mScreenSaver->launchGame(); + // to force handling the wake up process + mSleeping = true; + } + } + else if(input.value != 0) + { + return; + } + } } if(mSleeping) @@ -377,35 +398,35 @@ bool Window::isProcessing() return count_if(mGuiStack.begin(), mGuiStack.end(), [](GuiComponent* c) { return c->isProcessing(); }) > 0; } -void Window::startScreenSaver() - { - if (mScreenSaver && !mRenderScreenSaver) - { - // Tell the GUI components the screensaver is starting - for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) - (*i)->onScreenSaverActivate(); - - mScreenSaver->startScreenSaver(); - mRenderScreenSaver = true; - } - } - - void Window::cancelScreenSaver() - { - if (mScreenSaver && mRenderScreenSaver) - { - mScreenSaver->stopScreenSaver(); - mRenderScreenSaver = false; - - // Tell the GUI components the screensaver has stopped - for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) - (*i)->onScreenSaverDeactivate(); - } - } - - void Window::renderScreenSaver() - { - if (mScreenSaver) - mScreenSaver->renderScreenSaver(); +void Window::startScreenSaver() + { + if (mScreenSaver && !mRenderScreenSaver) + { + // Tell the GUI components the screensaver is starting + for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) + (*i)->onScreenSaverActivate(); + + mScreenSaver->startScreenSaver(); + mRenderScreenSaver = true; + } + } + + void Window::cancelScreenSaver() + { + if (mScreenSaver && mRenderScreenSaver) + { + mScreenSaver->stopScreenSaver(); + mRenderScreenSaver = false; + + // Tell the GUI components the screensaver has stopped + for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) + (*i)->onScreenSaverDeactivate(); + } + } + + void Window::renderScreenSaver() + { + if (mScreenSaver) + mScreenSaver->renderScreenSaver(); } - + diff --git a/es-core/src/Window.h b/es-core/src/Window.h index d1e6bdd394..7b92605e22 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -5,6 +5,7 @@ #include "resources/Font.h" #include "InputManager.h" +class FileData; class HelpComponent; class ImageComponent; @@ -15,9 +16,13 @@ class Window public: virtual void startScreenSaver() = 0; virtual void stopScreenSaver() = 0; + virtual void nextVideo() = 0; virtual void renderScreenSaver() = 0; virtual bool allowSleep() = 0; virtual void update(int deltaTime) = 0; + virtual bool isScreenSaverActive() = 0; + virtual FileData* getCurrentGame() = 0; + virtual void launchGame() = 0; }; Window(); @@ -49,16 +54,17 @@ class Window void setScreenSaver(ScreenSaver* screenSaver) { mScreenSaver = screenSaver; } + void startScreenSaver(); + void cancelScreenSaver(); + void renderScreenSaver(); + private: void onSleep(); void onWake(); // Returns true if at least one component on the stack is processing bool isProcessing(); - void renderScreenSaver(); - void startScreenSaver(); - void cancelScreenSaver(); - + HelpComponent* mHelp; ImageComponent* mBackgroundOverlay; ScreenSaver* mScreenSaver; @@ -71,7 +77,6 @@ class Window int mFrameTimeElapsed; int mFrameCountElapsed; int mAverageDeltaTime; - bool mRenderScreenSaver; std::unique_ptr mFrameDataText; diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 0edae8deb6..e015d34ce3 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -9,6 +9,45 @@ #define FADE_TIME_MS 200 +std::string getTitlePath() { + std::string titleFolder = getTitleFolder(); + return titleFolder + "last_title.srt"; +} + +std::string getTitleFolder() { + std::string home = getHomePath(); + return home + "/.emulationstation/tmp/"; +} + +void writeSubtitle(const char* gameName, const char* systemName, bool always) +{ + FILE* file = fopen(getTitlePath().c_str(), "w"); + if (always) { + fprintf(file, "1\n00:00:01,000 --> 00:00:30,000\n"); + } + else + { + fprintf(file, "1\n00:00:01,000 --> 00:00:08,000\n"); + } + fprintf(file, "%s\n", gameName); + fprintf(file, "%s\n\n", systemName); + + if (!always) { + fprintf(file, "2\n00:00:26,000 --> 00:00:30,000\n"); + fprintf(file, "%s\n", gameName); + fprintf(file, "%s\n", systemName); + } + + fflush(file); + fclose(file); + file = NULL; +} + +void VideoComponent::setScreensaverMode(bool isScreensaver) +{ + mScreensaverMode = isScreensaver; +} + VideoComponent::VideoComponent(Window* window) : GuiComponent(window), mStaticImage(window), @@ -19,6 +58,7 @@ VideoComponent::VideoComponent(Window* window) : mShowing(false), mScreensaverActive(false), mDisable(false), + mScreensaverMode(false), mTargetIsMax(false), mOrigin(0, 0), mTargetSize(0, 0) @@ -31,12 +71,17 @@ VideoComponent::VideoComponent(Window* window) : topWindow(false); } + std::string path = getTitleFolder(); + if(!boost::filesystem::exists(path)) + boost::filesystem::create_directory(path); } VideoComponent::~VideoComponent() { // Stop any currently running video stopVideo(); + // Delete subtitle file, if existing + remove(getTitlePath().c_str()); } void VideoComponent::setOrigin(float originX, float originY) diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index e172a11727..414c511447 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -12,6 +12,10 @@ #include #include +std::string getTitlePath(); +std::string getTitleFolder(); +void writeSubtitle(const char* gameName, const char* systemName, bool always); + class VideoComponent : public GuiComponent { // Structure that groups together the configuration of the video component @@ -35,6 +39,9 @@ class VideoComponent : public GuiComponent // Configures the component to show the default video void setDefaultVideo(); + // sets whether it's going to render in screensaver mode + void setScreensaverMode(bool isScreensaver); + virtual void onShow() override; virtual void onHide() override; virtual void onScreenSaverActivate() override; @@ -107,6 +114,7 @@ class VideoComponent : public GuiComponent bool mShowing; bool mDisable; bool mScreensaverActive; + bool mScreensaverMode; bool mTargetIsMax; Configuration mConfig; diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index bd9b68087b..33599b9062 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -1,5 +1,6 @@ #ifdef _RPI_ #include "components/VideoPlayerComponent.h" +#include #include "AudioManager.h" #include "Renderer.h" #include "ThemeData.h" @@ -11,9 +12,10 @@ #include #include -VideoPlayerComponent::VideoPlayerComponent(Window* window) : +VideoPlayerComponent::VideoPlayerComponent(Window* window, std::string path) : VideoComponent(window), - mPlayerPid(-1) + mPlayerPid(-1), + subtitlePath(path) { } @@ -47,7 +49,8 @@ void VideoPlayerComponent::setMaxSize(float width, float height) void VideoPlayerComponent::startVideo() { - if (!mIsPlaying) { + if (!mIsPlaying) + { mVideoWidth = 0; mVideoHeight = 0; @@ -59,8 +62,11 @@ void VideoPlayerComponent::startVideo() // Set the video that we are going to be playing so we don't attempt to restart it mPlayingVideoPath = mVideoPath; - // Disable AudioManager so video can play - AudioManager::getInstance()->deinit(); + // Disable AudioManager so video can play, in case we're requesting ALSA + if (boost::starts_with(Settings::getInstance()->getString("OMXAudioDev").c_str(), "alsa")) + { + AudioManager::getInstance()->deinit(); + } // Start the player process pid_t pid = fork(); @@ -89,7 +95,7 @@ void VideoPlayerComponent::startVideo() // We need to specify the layer of 10000 or above to ensure the video is displayed on top // of our SDL display - const char* argv[] = { "", "--layer", "10010", "--loop", "--no-osd", "--aspect-mode", "letterbox", "--vol", "0", "-o", "both","--win", buf, "-b", "", "", "", "", NULL }; + const char* argv[] = { "", "--layer", "10010", "--loop", "--no-osd", "--aspect-mode", "letterbox", "--vol", "0", "-o", "both","--win", buf, "--no-ghost-box", "", "", "", "", NULL }; // check if we want to mute the audio if (!Settings::getInstance()->getBool("VideoAudio")) @@ -97,16 +103,43 @@ void VideoPlayerComponent::startVideo() argv[8] = "-1000000"; } - // if we are rendering a video gamelist - if (!mTargetIsMax) + // test if there's a path for possible subtitles, meaning we're a screensaver video + if (!subtitlePath.empty()) + { + // if we are rendering a screensaver + + // check if we want to stretch the image + if (Settings::getInstance()->getBool("StretchVideoOnScreenSaver")) + { + argv[6] = "stretch"; + } + + if (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never") + { + // if we have chosen to render subtitles + argv[13] = "--subtitles"; + argv[14] = subtitlePath.c_str(); + argv[15] = mPlayingVideoPath.c_str(); + } + else + { + // if we have chosen NOT to render subtitles in the screensaver + argv[13] = mPlayingVideoPath.c_str(); + } + } + else { - argv[6] = "stretch"; + // if we are rendering a video gamelist + if (!mTargetIsMax) + { + argv[6] = "stretch"; + } + argv[13] = mPlayingVideoPath.c_str(); } argv[10] = Settings::getInstance()->getString("OMXAudioDev").c_str(); - argv[13] = mPlayingVideoPath.c_str(); - + //const char* argv[] = args; const char* env[] = { "LD_LIBRARY_PATH=/opt/vc/libs:/usr/lib/omxplayer", NULL }; // Redirect stdout @@ -142,7 +175,10 @@ void VideoPlayerComponent::stopVideo() kill(mPlayerPid, SIGKILL); waitpid(mPlayerPid, &status, WNOHANG); // Restart AudioManager - AudioManager::getInstance()->init(); + if (boost::starts_with(Settings::getInstance()->getString("OMXAudioDev").c_str(), "alsa")) + { + AudioManager::getInstance()->init(); + } mPlayerPid = -1; } } diff --git a/es-core/src/components/VideoPlayerComponent.h b/es-core/src/components/VideoPlayerComponent.h index 27a098115e..effb5942ba 100644 --- a/es-core/src/components/VideoPlayerComponent.h +++ b/es-core/src/components/VideoPlayerComponent.h @@ -12,7 +12,7 @@ void catch_child(int sig_num); class VideoPlayerComponent : public VideoComponent { public: - VideoPlayerComponent(Window* window); + VideoPlayerComponent(Window* window, std::string path); virtual ~VideoPlayerComponent(); void render(const Eigen::Affine3f& parentTrans) override; @@ -36,6 +36,7 @@ class VideoPlayerComponent : public VideoComponent private: pid_t mPlayerPid; + std::string subtitlePath; }; #endif diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 8adedf6289..10c2118e50 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -11,26 +11,26 @@ libvlc_instance_t* VideoVlcComponent::mVLC = NULL; // VLC prepares to render a video frame. static void *lock(void *data, void **p_pixels) { - struct VideoContext *c = (struct VideoContext *)data; - SDL_LockMutex(c->mutex); - SDL_LockSurface(c->surface); + struct VideoContext *c = (struct VideoContext *)data; + SDL_LockMutex(c->mutex); + SDL_LockSurface(c->surface); *p_pixels = c->surface->pixels; - return NULL; // Picture identifier, not needed here. + return NULL; // Picture identifier, not needed here. } // VLC just rendered a video frame. static void unlock(void *data, void *id, void *const *p_pixels) { - struct VideoContext *c = (struct VideoContext *)data; - SDL_UnlockSurface(c->surface); - SDL_UnlockMutex(c->mutex); + struct VideoContext *c = (struct VideoContext *)data; + SDL_UnlockSurface(c->surface); + SDL_UnlockMutex(c->mutex); } // VLC wants to display a video frame. static void display(void *data, void *id) { - //Data to be displayed + //Data to be displayed } -VideoVlcComponent::VideoVlcComponent(Window* window) : +VideoVlcComponent::VideoVlcComponent(Window* window, std::string subtitles) : VideoComponent(window), mMediaPlayer(nullptr) { @@ -40,7 +40,7 @@ VideoVlcComponent::VideoVlcComponent(Window* window) : mTexture = TextureResource::get(""); // Make sure VLC has been initialised - setupVLC(); + setupVLC(subtitles); } VideoVlcComponent::~VideoVlcComponent() @@ -227,13 +227,27 @@ void VideoVlcComponent::freeContext() } } -void VideoVlcComponent::setupVLC() +void VideoVlcComponent::setupVLC(std::string subtitles) { // If VLC hasn't been initialised yet then do it now if (!mVLC) { - const char* args[] = { "--quiet" }; - mVLC = libvlc_new(sizeof(args) / sizeof(args[0]), args); + const char** args; + const char* newargs[] = { "--quiet", "--sub-file", subtitles.c_str() }; + const char* singleargs[] = { "--quiet" }; + int argslen = 0; + + if (!subtitles.empty()) + { + argslen = sizeof(newargs) / sizeof(newargs[0]); + args = newargs; + } + else + { + argslen = sizeof(singleargs) / sizeof(singleargs[0]); + args = singleargs; + } + mVLC = libvlc_new(argslen, args); } } @@ -292,10 +306,31 @@ void VideoVlcComponent::startVideo() // Make sure we found a valid video track if ((mVideoWidth > 0) && (mVideoHeight > 0)) { +#ifndef _RPI_ + if (mScreensaverMode) + { + if(!Settings::getInstance()->getBool("CaptionsCompatibility")) { + + Eigen::Vector2f resizeScale((Renderer::getScreenWidth() / mVideoWidth), (Renderer::getScreenHeight() / mVideoHeight)); + + if(resizeScale.x() < resizeScale.y()) + { + mVideoWidth *= resizeScale.x(); + mVideoHeight *= resizeScale.x(); + }else{ + mVideoWidth *= resizeScale.y(); + mVideoHeight *= resizeScale.y(); + } + mVideoHeight = round(mVideoHeight); + mVideoWidth = round(mVideoWidth); + } + } +#endif setupContext(); // Setup the media player mMediaPlayer = libvlc_media_player_new_from_media(mMedia); + if (!Settings::getInstance()->getBool("VideoAudio")) { libvlc_audio_set_mute(mMediaPlayer, 1); diff --git a/es-core/src/components/VideoVlcComponent.h b/es-core/src/components/VideoVlcComponent.h index c3c6ad5495..796c970da2 100644 --- a/es-core/src/components/VideoVlcComponent.h +++ b/es-core/src/components/VideoVlcComponent.h @@ -6,6 +6,7 @@ #include "VideoComponent.h" #include +#include #include "resources/TextureResource.h" struct VideoContext { @@ -26,9 +27,9 @@ class VideoVlcComponent : public VideoComponent }; public: - static void setupVLC(); + static void setupVLC(std::string subtitles); - VideoVlcComponent(Window* window); + VideoVlcComponent(Window* window, std::string subtitles); virtual ~VideoVlcComponent(); void render(const Eigen::Affine3f& parentTrans) override; diff --git a/es-core/src/platform.h b/es-core/src/platform.h index 0760b565c1..0b15ab25df 100644 --- a/es-core/src/platform.h +++ b/es-core/src/platform.h @@ -19,6 +19,7 @@ std::string getHomePath(); + int runShutdownCommand(); // shut down the system (returns 0 if successful) int runRestartCommand(); // restart the system (returns 0 if successful) int runSystemCommand(const std::string& cmd_utf8); // run a utf-8 encoded in the shell (requires wstring conversion on Windows) From 6e7f5d1609d6945093d1c62a6eaff41f5193a184 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 12 Jun 2017 16:44:58 +0100 Subject: [PATCH 117/603] bump version to 2.3.0 --- es-app/src/EmulationStation.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 55d42d8102..8ed209b995 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -3,11 +3,11 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 2 -#define PROGRAM_VERSION_MAINTENANCE 1 -#define PROGRAM_VERSION_STRING "2.2.1rp" +#define PROGRAM_VERSION_MINOR 3 +#define PROGRAM_VERSION_MAINTENANCE 0 +#define PROGRAM_VERSION_STRING "2.3.0rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,2,1\0" +#define RESOURCE_VERSION_STRING "2,3,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 8f7b6247afacce8aad5371398eac5876ca98dfe8 Mon Sep 17 00:00:00 2001 From: jrassa Date: Tue, 13 Jun 2017 21:01:08 -0400 Subject: [PATCH 118/603] fix default color for rating component --- es-app/src/components/RatingComponent.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index 56923807eb..1fbf6eedd0 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -10,6 +10,7 @@ RatingComponent::RatingComponent(Window* window) : GuiComponent(window), mColorS mValue = 0.5f; mSize << 64 * NUM_RATING_STARS, 64; updateVertices(); + updateColors(); } void RatingComponent::setValue(const std::string& value) From 2c217ec4c1a4d401327aba2d97740437a08f6fb1 Mon Sep 17 00:00:00 2001 From: jrassa Date: Tue, 13 Jun 2017 18:57:18 -0400 Subject: [PATCH 119/603] fix show snapshot on video delay --- es-core/src/components/VideoComponent.cpp | 19 +++++++++---------- es-core/src/components/VideoComponent.h | 1 + .../src/components/VideoPlayerComponent.cpp | 3 +++ es-core/src/components/VideoVlcComponent.cpp | 2 ++ 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index e015d34ce3..623bf5d03c 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -164,19 +164,18 @@ void VideoComponent::render(const Eigen::Affine3f& parentTrans) // Handle looping of the video handleLooping(); +} - if (!mIsPlaying) +void VideoComponent::renderSnapshot(const Eigen::Affine3f& parentTrans) +{ + // This is the case where the video is not currently being displayed. Work out + // if we need to display a static image + if ((mConfig.showSnapshotNoVideo && mVideoPath.empty()) || (mStartDelayed && mConfig.showSnapshotDelay)) { - // This is the case where the video is not currently being displayed. Work out - // if we need to display a static image - if ((mConfig.showSnapshotNoVideo && mVideoPath.empty()) || (mStartDelayed && mConfig.showSnapshotDelay)) - { - // Display the static image instead - mStaticImage.setOpacity((unsigned char)(mFadeIn * 255.0f)); - mStaticImage.render(parentTrans); - } + // Display the static image instead + mStaticImage.setOpacity((unsigned char)(mFadeIn * 255.0f)); + mStaticImage.render(parentTrans); } - } void VideoComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index 414c511447..a729b70632 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -56,6 +56,7 @@ class VideoComponent : public GuiComponent void setOpacity(unsigned char opacity) override; void render(const Eigen::Affine3f& parentTrans) override; + void renderSnapshot(const Eigen::Affine3f& parentTrans); virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 33599b9062..5561236489 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -27,6 +27,9 @@ VideoPlayerComponent::~VideoPlayerComponent() void VideoPlayerComponent::render(const Eigen::Affine3f& parentTrans) { VideoComponent::render(parentTrans); + + if (!mIsPlaying || mPlayerPid == -1) + VideoComponent::renderSnapshot(parentTrans); } void VideoPlayerComponent::setResize(float width, float height) diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 10c2118e50..d042374cc1 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -202,6 +202,8 @@ void VideoVlcComponent::render(const Eigen::Affine3f& parentTrans) glDisableClientState(GL_COLOR_ARRAY); glDisable(GL_TEXTURE_2D); + } else { + VideoComponent::renderSnapshot(parentTrans); } } From c874c506d98252b6564fd42b22d62865d6f4a676 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Fri, 16 Jun 2017 17:11:38 +0100 Subject: [PATCH 120/603] bump version to 2.3.1 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 8ed209b995..cccd99352b 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 3 -#define PROGRAM_VERSION_MAINTENANCE 0 -#define PROGRAM_VERSION_STRING "2.3.0rp" +#define PROGRAM_VERSION_MAINTENANCE 1 +#define PROGRAM_VERSION_STRING "2.3.1rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,3,0\0" +#define RESOURCE_VERSION_STRING "2,3,1\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 2d6871dd97f2cbbb4517523b98470e27524dbf79 Mon Sep 17 00:00:00 2001 From: jrassa Date: Mon, 26 Jun 2017 23:34:37 -0400 Subject: [PATCH 121/603] fix gamelist sizing by using max of computed size vs set size --- es-app/src/components/TextListComponent.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index f6a1313b76..b39dda3ce1 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -143,7 +143,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(size() == 0) return; - const float entrySize = font->getSize() * mLineSpacing; + const float entrySize = std::max(font->getHeight(1.0), (float)font->getSize()) * mLineSpacing; int startEntry = 0; @@ -350,7 +350,9 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c } setFont(Font::getFromTheme(elem, properties, mFont)); - + const float selectorHeight = std::max(mFont->getHeight(1.0), (float)mFont->getSize()) * mLineSpacing; + setSelectorHeight(selectorHeight); + if(properties & SOUND && elem->has("scrollSound")) setSound(Sound::get(elem->get("scrollSound"))); @@ -384,8 +386,6 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c if(elem->has("selectorHeight")) { setSelectorHeight(elem->get("selectorHeight") * Renderer::getScreenHeight()); - } else { - setSelectorHeight(mFont->getSize() * 1.5); } if(elem->has("selectorOffsetY")) { From 6722c3453a9226be454be05ba8d0cf027cc42925 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 27 Jun 2017 19:59:18 +0100 Subject: [PATCH 122/603] bump version to v2.3.2 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index cccd99352b..1f21a31953 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 3 -#define PROGRAM_VERSION_MAINTENANCE 1 -#define PROGRAM_VERSION_STRING "2.3.1rp" +#define PROGRAM_VERSION_MAINTENANCE 2 +#define PROGRAM_VERSION_STRING "2.3.2rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,3,1\0" +#define RESOURCE_VERSION_STRING "2,3,2\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 64effcc69c9ff1e08d8e4edc281b047b1335c286 Mon Sep 17 00:00:00 2001 From: hex007 Date: Wed, 28 Jun 2017 09:50:37 -0700 Subject: [PATCH 123/603] Move Carousel transition to separate switch - Removed Simple Slide - Added Switch to control Carousel transition --- es-app/src/guis/GuiMenu.cpp | 7 ++++++- es-app/src/views/SystemView.cpp | 27 ++++++++++----------------- es-app/src/views/ViewController.cpp | 4 ++-- es-core/src/Settings.cpp | 1 + 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 43ced83309..d15ce18976 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -170,12 +170,17 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("QUICK SYSTEM SELECT", quick_sys_select); s->addSaveFunc([quick_sys_select] { Settings::getInstance()->setBool("QuickSystemSelect", quick_sys_select->getState()); }); + // carousel transition option + auto move_carousel = std::make_shared(mWindow); + move_carousel->setState(Settings::getInstance()->getBool("MoveCarousel")); + s->addWithLabel("CAROUSEL TRANSITIONS", move_carousel); + s->addSaveFunc([move_carousel] { Settings::getInstance()->setBool("MoveCarousel", move_carousel->getState()); }); + // transition style auto transition_style = std::make_shared< OptionListComponent >(mWindow, "TRANSITION STYLE", false); std::vector transitions; transitions.push_back("fade"); transitions.push_back("slide"); - transitions.push_back("simple slide"); transitions.push_back("instant"); for(auto it = transitions.begin(); it != transitions.end(); it++) transition_style->add(*it, *it, Settings::getInstance()->getString("TransitionStyle") == *it); diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 3252c8a5fd..df50fd1ef7 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -243,12 +243,13 @@ void SystemView::onCursorChanged(const CursorState& state) return; Animation* anim; + bool move_carousel = Settings::getInstance()->getBool("MoveCarousel"); std::string transition_style = Settings::getInstance()->getString("TransitionStyle"); if(transition_style == "fade") { float startExtrasFade = mExtrasFadeOpacity; anim = new LambdaAnimation( - [startExtrasFade, startPos, endPos, posMax, this](float t) + [this, startExtrasFade, startPos, endPos, posMax, move_carousel](float t) { t -= 1; float f = lerp(startPos, endPos, t*t*t + 1); @@ -257,7 +258,7 @@ void SystemView::onCursorChanged(const CursorState& state) if(f >= posMax) f -= posMax; - this->mCamOffset = f; + this->mCamOffset = move_carousel ? f : endPos; t += 1; if(t < 0.3f) @@ -274,7 +275,7 @@ void SystemView::onCursorChanged(const CursorState& state) } else if (transition_style == "slide") { // slide anim = new LambdaAnimation( - [this, startPos, endPos, posMax](float t) + [this, startPos, endPos, posMax, move_carousel](float t) { t -= 1; float f = lerp(startPos, endPos, t*t*t + 1); @@ -283,13 +284,13 @@ void SystemView::onCursorChanged(const CursorState& state) if(f >= posMax) f -= posMax; - this->mCamOffset = f; + this->mCamOffset = move_carousel ? f : endPos; this->mExtrasCamOffset = f; }, 500); - } else if (transition_style == "simple slide") { - // simple slide + } else { + // instant anim = new LambdaAnimation( - [this, startPos, endPos, posMax](float t) + [this, startPos, endPos, posMax, move_carousel ](float t) { t -= 1; float f = lerp(startPos, endPos, t*t*t + 1); @@ -298,17 +299,9 @@ void SystemView::onCursorChanged(const CursorState& state) if(f >= posMax) f -= posMax; - this->mCamOffset = f; - this->mExtrasCamOffset = endPos; - }, 500); - } else { - // instant - anim = new LambdaAnimation( - [this, endPos](float t) - { - this->mCamOffset = endPos; + this->mCamOffset = move_carousel ? f : endPos; this->mExtrasCamOffset = endPos; - }, 1); + }, move_carousel ? 500 : 1); } diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 7e3c242b6b..46f7d02ea6 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -189,7 +189,7 @@ void ViewController::playViewTransition() }else{ advanceAnimation(0, (int)(mFadeOpacity * FADE_DURATION)); } - } else if (transition_style == "slide" || transition_style == "simple slide"){ + } else if (transition_style == "slide"){ // slide or simple slide setAnimation(new MoveCameraAnimation(mCamera, target)); updateHelpPrompts(); // update help prompts immediately @@ -246,7 +246,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) setAnimation(new LambdaAnimation(fadeFunc, 800), 0, nullptr, true); this->onFileChanged(game, FILE_METADATA_CHANGED); }); - } else if (transition_style == "slide" || transition_style == "simple slide"){ + } else if (transition_style == "slide"){ // move camera to zoom in on center + fade out, launch game, come back in setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), 0, [this, origCamera, center, game] { diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 3f88c8758e..4063a9775f 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -60,6 +60,7 @@ void Settings::setDefaults() mBoolMap["IgnoreGamelist"] = false; mBoolMap["HideConsole"] = true; mBoolMap["QuickSystemSelect"] = true; + mBoolMap["MoveCarousel"] = true; mBoolMap["SaveGamelistsOnExit"] = true; mBoolMap["Debug"] = false; From 2bacc9c43193ce63d5d4dc3d466f6d0f12f16227 Mon Sep 17 00:00:00 2001 From: jrassa Date: Sun, 14 May 2017 00:07:28 -0400 Subject: [PATCH 124/603] variable support for themes --- THEMES.md | 41 ++++++++++++++++- es-app/src/SystemData.cpp | 23 ++++++++-- es-app/src/views/SystemView.cpp | 44 ++++++++++-------- es-core/src/ThemeData.cpp | 79 ++++++++++++++++++++++++++++----- es-core/src/ThemeData.h | 4 +- 5 files changed, 155 insertions(+), 36 deletions(-) diff --git a/THEMES.md b/THEMES.md index 1cd0f5f659..fec2e61aa3 100644 --- a/THEMES.md +++ b/THEMES.md @@ -6,7 +6,7 @@ EmulationStation allows each system to have its own "theme." A theme is a collec The first place ES will check for a theme is in the system's `` folder, for a theme.xml file: * `[SYSTEM_PATH]/theme.xml` -If that file doesn't exist, ES will try to find the theme in the current **theme set**. Theme sets are just a collection of individual system themes arranged in the "themes" folder under some name. Here's an example: +If that file doesn't exist, ES will try to find the theme in the current **theme set**. Theme sets are just a collection of individual system themes arranged in the "themes" folder under some name. A theme set can provide a default theme that will be used if there is no matching system theme. Here's an example: ``` ... @@ -23,6 +23,7 @@ If that file doesn't exist, ES will try to find the theme in the current **theme common_resources/ scroll_sound.wav + theme.xml (Default theme) another_theme_set/ snes/ theme.xml @@ -308,6 +309,40 @@ You can now change the order in which elements are rendered by setting `zIndex` * `text name="logoText"` * `image name="logo"` +### Theme variables + +Theme variables can be used to simplify theme construction. There are 2 types of variables available. +* System Variables +* Theme Defined Variables + +#### System Variables + +System variables are system specific and are derived from the values in es_systems.cfg. +* `system.name` +* `system.fullName` +* `system.theme` + +#### Theme Defined Variables +Variables can also be defined in the theme. +``` + + 8b0000 + +``` + +#### Usage in themes +Variables can be used to specify the value of a theme property: +``` +${themeColor} +``` + +or to specify only a portion of the value of a theme property: + +``` +${themeColor}c0 +./art/logo/${system.theme}.svg +```` + Reference ========= @@ -444,8 +479,10 @@ Reference - The help system style for this view. * `carousel name="systemcarousel"` -ALL - The system logo carousel -* `image name="logo"` - PATH +* `image name="logo"` - PATH | COLOR - A logo image, to be displayed in the system logo carousel. +* `text name="logoText"` - FONT_PATH | COLOR | FORCE_UPPERCASE + - A logo text, to be displayed system name in the system logo carousel when no logo is available. * `text name="systemInfo"` - ALL - Displays details of the system currently selected in the carousel. * You can use extra elements (elements with `extra="true"`) to add your own backgrounds, etc. They will be displayed behind the carousel, and scroll relative to the carousel. diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 41efa64cb9..d41577c324 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -411,15 +411,24 @@ std::string SystemData::getThemePath() const { // where we check for themes, in order: // 1. [SYSTEM_PATH]/theme.xml - // 2. currently selected theme set + // 2. system theme from currently selected theme set [CURRENT_THEME_PATH]/[SYSTEM]/theme.xml + // 3. default system theme from currently selected theme set [CURRENT_THEME_PATH]/theme.xml // first, check game folder fs::path localThemePath = mRootFolder->getPath() / "theme.xml"; if(fs::exists(localThemePath)) return localThemePath.generic_string(); - // not in game folder, try theme sets - return ThemeData::getThemeFromCurrentSet(mThemeFolder).generic_string(); + // not in game folder, try system theme in theme sets + localThemePath = ThemeData::getThemeFromCurrentSet(mThemeFolder); + + if (fs::exists(localThemePath)) + return localThemePath.generic_string(); + + // not system theme, try default system theme in theme set + localThemePath = localThemePath.parent_path().parent_path() / "theme.xml"; + + return localThemePath.generic_string(); } bool SystemData::hasGamelist() const @@ -448,7 +457,13 @@ void SystemData::loadTheme() try { - mTheme->loadFile(path); + // build map with system variables for theme to use, + std::map sysData; + sysData.insert(std::pair("system.name", getName())); + sysData.insert(std::pair("system.theme", getThemeFolder())); + sysData.insert(std::pair("system.fullName", getFullName())); + + mTheme->loadFile(sysData, path); } catch(ThemeException& e) { LOG(LogError) << e.what(); diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 3252c8a5fd..e4635c55dc 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -43,21 +43,27 @@ void SystemView::populate() // make logo if(theme->getElement("system", "logo", "image")) { - ImageComponent* logo = new ImageComponent(mWindow, false, false); - logo->setMaxSize(Eigen::Vector2f(mCarousel.logoSize.x(), mCarousel.logoSize.y())); - logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH); - logo->setPosition((mCarousel.logoSize.x() - logo->getSize().x()) / 2, - (mCarousel.logoSize.y() - logo->getSize().y()) / 2); // center - e.data.logo = std::shared_ptr(logo); - - ImageComponent* logoSelected = new ImageComponent(mWindow, false, false); - logoSelected->setMaxSize(Eigen::Vector2f(mCarousel.logoSize.x() * mCarousel.logoScale, mCarousel.logoSize.y() * mCarousel.logoScale)); - logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); - logoSelected->setPosition((mCarousel.logoSize.x() - logoSelected->getSize().x()) / 2, - (mCarousel.logoSize.y() - logoSelected->getSize().y()) / 2); // center - e.data.logoSelected = std::shared_ptr(logoSelected); - - }else{ + std::string path = theme->getElement("system", "logo", "image")->get("path"); + + if(!path.empty() && ResourceManager::getInstance()->fileExists(path)) + { + ImageComponent* logo = new ImageComponent(mWindow, false, false); + logo->setMaxSize(Eigen::Vector2f(mCarousel.logoSize.x(), mCarousel.logoSize.y())); + logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); + logo->setPosition((mCarousel.logoSize.x() - logo->getSize().x()) / 2, + (mCarousel.logoSize.y() - logo->getSize().y()) / 2); // center + e.data.logo = std::shared_ptr(logo); + + ImageComponent* logoSelected = new ImageComponent(mWindow, false, false); + logoSelected->setMaxSize(Eigen::Vector2f(mCarousel.logoSize.x() * mCarousel.logoScale, mCarousel.logoSize.y() * mCarousel.logoScale)); + logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); + logoSelected->setPosition((mCarousel.logoSize.x() - logoSelected->getSize().x()) / 2, + (mCarousel.logoSize.y() - logoSelected->getSize().y()) / 2); // center + e.data.logoSelected = std::shared_ptr(logoSelected); + } + } + if (!e.data.logo) + { // no logo in theme; use text TextComponent* text = new TextComponent(mWindow, (*it)->getName(), @@ -65,14 +71,16 @@ void SystemView::populate() 0x000000FF, ALIGN_CENTER); text->setSize(mCarousel.logoSize); + text->applyTheme((*it)->getTheme(), "system", "logoText", ThemeFlags::FONT_PATH | ThemeFlags::COLOR | ThemeFlags::FORCE_UPPERCASE); e.data.logo = std::shared_ptr(text); - TextComponent* textSelected = new TextComponent(mWindow, - (*it)->getName(), - Font::get((int)(FONT_SIZE_LARGE * 1.5)), + TextComponent* textSelected = new TextComponent(mWindow, + (*it)->getName(), + Font::get((int)(FONT_SIZE_LARGE * mCarousel.logoScale)), 0x000000FF, ALIGN_CENTER); textSelected->setSize(mCarousel.logoSize); + textSelected->applyTheme((*it)->getTheme(), "system", "logoText", ThemeFlags::FONT_PATH | ThemeFlags::COLOR | ThemeFlags::FORCE_UPPERCASE); e.data.logoSelected = std::shared_ptr(textSelected); } diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index ff92d60285..43b76deb69 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -7,6 +7,7 @@ #include "Settings.h" #include "pugixml/src/pugixml.hpp" #include +#include #include "components/ImageComponent.h" #include "components/TextComponent.h" @@ -123,7 +124,7 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: namespace fs = boost::filesystem; #define MINIMUM_THEME_FORMAT_VERSION 3 -#define CURRENT_THEME_FORMAT_VERSION 4 +#define CURRENT_THEME_FORMAT_VERSION 5 // helper unsigned int getHexColor(const char* str) @@ -170,14 +171,34 @@ std::string resolvePath(const char* in, const fs::path& relative) return path.generic_string(); } +std::map mVariables; +std::string &format_variables(const boost::xpressive::smatch &what) +{ + return mVariables[what[1].str()]; +} + +std::string resolvePlaceholders(const char* in) +{ + if(!in || in[0] == '\0') + return std::string(in); + + std::string inStr(in); + + using namespace boost::xpressive; + sregex rex = "${" >> (s1 = +('.' | _w)) >> '}'; + + std::string output = regex_replace(inStr, rex, format_variables); + + return output; +} ThemeData::ThemeData() { mVersion = 0; } -void ThemeData::loadFile(const std::string& path) +void ThemeData::loadFile(std::map sysDataMap, const std::string& path) { mPaths.push_back(path); @@ -189,6 +210,9 @@ void ThemeData::loadFile(const std::string& path) mVersion = 0; mViews.clear(); + mVariables.clear(); + + mVariables.insert(sysDataMap.begin(), sysDataMap.end()); pugi::xml_document doc; pugi::xml_parse_result res = doc.load_file(path.c_str()); @@ -207,12 +231,12 @@ void ThemeData::loadFile(const std::string& path) if(mVersion < MINIMUM_THEME_FORMAT_VERSION) throw error << "Theme uses format version " << mVersion << ". Minimum supported version is " << MINIMUM_THEME_FORMAT_VERSION << "."; + parseVariables(root); parseIncludes(root); parseViews(root); parseFeatures(root); } - void ThemeData::parseIncludes(const pugi::xml_node& root) { ThemeException error; @@ -238,6 +262,7 @@ void ThemeData::parseIncludes(const pugi::xml_node& root) if(!root) throw error << "Missing tag!"; + parseVariables(root); parseIncludes(root); parseViews(root); parseFeatures(root); @@ -265,6 +290,26 @@ void ThemeData::parseFeatures(const pugi::xml_node& root) } } +void ThemeData::parseVariables(const pugi::xml_node& root) +{ + ThemeException error; + error.setFiles(mPaths); + + pugi::xml_node variables = root.child("variables"); + + if(!variables) + return; + + for(pugi::xml_node_iterator it = variables.begin(); it != variables.end(); ++it) + { + std::string key = it->name(); + std::string val = it->text().as_string(); + + if (!val.empty()) + mVariables.insert(std::pair(key, val)); + } +} + void ThemeData::parseViews(const pugi::xml_node& root) { ThemeException error; @@ -344,12 +389,12 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::mapsecond) { case NORMALIZED_PAIR: { - std::string str = std::string(node.text().as_string()); - size_t divider = str.find(' '); if(divider == std::string::npos) throw error << "invalid normalized pair (property \"" << node.name() << "\", value \"" << str.c_str() << "\")"; @@ -363,11 +408,11 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::mapfileExists(path)) { std::stringstream ss; @@ -381,14 +426,25 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::map(strtod(str.c_str(), 0)); + element.properties[node.name()] = floatVal; break; + } + case BOOLEAN: - element.properties[node.name()] = node.text().as_bool(); + { + // only look at first char + char first = str[0]; + // 1*, t* (true), T* (True), y* (yes), Y* (YES) + bool boolVal = (first == '1' || first == 't' || first == 'T' || first == 'y' || first == 'Y'); + + element.properties[node.name()] = boolVal; break; + } default: throw error << "Unknown ElementPropertyType for \"" << root.attribute("name").as_string() << "\", property " << node.name(); } @@ -432,7 +488,8 @@ const std::shared_ptr& ThemeData::getDefault() { try { - theme->loadFile(path); + std::map emptyMap; + theme->loadFile(emptyMap, path); } catch(ThemeException& e) { LOG(LogError) << e.what(); diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index e0e7bb1299..a4e483b624 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include "pugixml/src/pugixml.hpp" #include "GuiComponent.h" @@ -111,7 +112,7 @@ class ThemeData ThemeData(); // throws ThemeException - void loadFile(const std::string& path); + void loadFile(std::map sysDataMap, const std::string& path); enum ElementPropertyType { @@ -145,6 +146,7 @@ class ThemeData void parseFeatures(const pugi::xml_node& themeRoot); void parseIncludes(const pugi::xml_node& themeRoot); + void parseVariables(const pugi::xml_node& root); void parseViews(const pugi::xml_node& themeRoot); void parseView(const pugi::xml_node& viewNode, ThemeView& view); void parseElement(const pugi::xml_node& elementNode, const std::map& typeMap, ThemeElement& element); From 040ee4f52121ad9835757cc237eb696f8ed00af0 Mon Sep 17 00:00:00 2001 From: Chris Bransden Date: Wed, 5 Jul 2017 11:50:01 +0100 Subject: [PATCH 125/603] Returned 'JUMP TO LETTER' option back to top of menu, as it is the most used/useful feature. --- es-app/src/guis/GuiGamelistOptions.cpp | 40 +++++++++++++------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index d3afd0077a..86fd849dd5 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -14,26 +14,6 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui bool isFiltered = system->getIndex()->isFiltered(); ComponentListRow row; - // show filtered menu - row.elements.clear(); - row.addElement(std::make_shared(mWindow, "FILTER GAMELIST", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.addElement(makeArrow(mWindow), false); - row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openGamelistFilter, this)); - mMenu.addRow(row); - - row.elements.clear(); - row.addElement(std::make_shared(mWindow, "SURPRISE ME!", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.input_handler = [&](InputConfig* config, Input input) { - if (config->isMappedTo("a", input) && input.value) - { - ViewController::get()->goToRandomGame(); - delete this; - return true; - } - return false; - }; - mMenu.addRow(row); - if (!fromPlaceholder) { if (!isFiltered) { @@ -81,6 +61,26 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui mMenu.addRow(row); } + // show filtered menu + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "FILTER GAMELIST", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(makeArrow(mWindow), false); + row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openGamelistFilter, this)); + mMenu.addRow(row); + + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "SURPRISE ME!", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.input_handler = [&](InputConfig* config, Input input) { + if (config->isMappedTo("a", input) && input.value) + { + ViewController::get()->goToRandomGame(); + delete this; + return true; + } + return false; + }; + mMenu.addRow(row); + // center the menu setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); From d0cdbf215958e01ffea585a1c6fd75c03b306c46 Mon Sep 17 00:00:00 2001 From: pjft Date: Mon, 12 Jun 2017 17:38:59 +0100 Subject: [PATCH 126/603] Adding support for Virtual Systems - Refactoring System Environment data - Added Virtual System Manager class - Added "all", "favorites" and "last played" systems - Added GuiInfoPopup class for notifications - Added Favorites to metadata, as well as a shortcut to toggle favorites - Added warning if enabling systems but themes don't support it - Added "filter by favorites" per system - Adjusted "Go to Random Game" behavior to account for the fact that we now have an "All Games" system - Added "sort by system name" for the collections --- es-app/CMakeLists.txt | 6 + es-app/src/CollectionSystemManager.cpp | 441 ++++++++++++++++++ es-app/src/CollectionSystemManager.h | 74 +++ es-app/src/FileData.cpp | 167 +++++-- es-app/src/FileData.h | 43 +- es-app/src/FileFilterIndex.cpp | 48 +- es-app/src/FileFilterIndex.h | 11 +- es-app/src/FileSorts.cpp | 29 +- es-app/src/FileSorts.h | 4 +- es-app/src/Gamelist.cpp | 4 +- es-app/src/MetaData.cpp | 59 +-- es-app/src/MetaData.h | 1 + es-app/src/SystemData.cpp | 195 ++++---- es-app/src/SystemData.h | 38 +- es-app/src/SystemScreenSaver.cpp | 33 +- .../src/guis/GuiCollectionSystemsOptions.cpp | 105 +++++ es-app/src/guis/GuiCollectionSystemsOptions.h | 31 ++ es-app/src/guis/GuiFastSelect.cpp | 2 +- es-app/src/guis/GuiGamelistOptions.cpp | 9 +- es-app/src/guis/GuiInfoPopup.cpp | 114 +++++ es-app/src/guis/GuiInfoPopup.h | 27 ++ es-app/src/guis/GuiMenu.cpp | 17 +- es-app/src/guis/GuiMenu.h | 1 + es-app/src/guis/GuiMetaDataEd.cpp | 11 +- es-app/src/main.cpp | 1 + es-app/src/views/SystemView.cpp | 7 +- es-app/src/views/ViewController.cpp | 13 +- .../src/views/gamelist/BasicGameListView.cpp | 32 +- es-app/src/views/gamelist/BasicGameListView.h | 3 +- es-app/src/views/gamelist/IGameListView.h | 2 +- .../views/gamelist/ISimpleGameListView.cpp | 25 +- es-core/src/Settings.cpp | 1 + es-core/src/Util.cpp | 101 ++++ es-core/src/Util.h | 13 + es-core/src/Window.cpp | 13 +- es-core/src/Window.h | 10 + es-core/src/components/MenuComponent.cpp | 2 +- es-core/src/components/SwitchComponent.cpp | 17 + es-core/src/components/SwitchComponent.h | 2 + es-core/src/resources/Font.h | 1 + 40 files changed, 1428 insertions(+), 285 deletions(-) create mode 100644 es-app/src/CollectionSystemManager.cpp create mode 100644 es-app/src/CollectionSystemManager.h create mode 100644 es-app/src/guis/GuiCollectionSystemsOptions.cpp create mode 100644 es-app/src/guis/GuiCollectionSystemsOptions.h create mode 100644 es-app/src/guis/GuiInfoPopup.cpp create mode 100644 es-app/src/guis/GuiInfoPopup.h diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index d44c16ac1c..3cff331c28 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -12,6 +12,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.h ${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.h ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemScreenSaver.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/CollectionSystemManager.h # GuiComponents ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.h @@ -30,6 +31,8 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistFilter.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiCollectionSystemsOptions.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInfoPopup.h # Scrapers ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h @@ -63,6 +66,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Gamelist.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/SystemScreenSaver.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/CollectionSystemManager.cpp # GuiComponents ${CMAKE_CURRENT_SOURCE_DIR}/src/components/AsyncReqComponent.cpp @@ -80,6 +84,8 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperStart.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistFilter.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiCollectionSystemsOptions.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiInfoPopup.cpp # Scrapers ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp new file mode 100644 index 0000000000..eb8761ecb2 --- /dev/null +++ b/es-app/src/CollectionSystemManager.cpp @@ -0,0 +1,441 @@ +#include "SystemData.h" +#include "Gamelist.h" +#include +#include "Util.h" +#include +#include +#include +#include +#include "Renderer.h" +#include "Log.h" +#include "InputManager.h" +#include +#include "Settings.h" +#include "FileSorts.h" +#include "pugixml/src/pugixml.hpp" +#include "guis/GuiInfoPopup.h" + +namespace fs = boost::filesystem; + +CollectionSystemManager* CollectionSystemManager::sInstance = NULL; + +CollectionSystemManager* CollectionSystemManager::get() +{ + assert(sInstance); + return sInstance; +} + +void CollectionSystemManager::init(Window* window) +{ + assert(!sInstance); + sInstance = new CollectionSystemManager(window); +} + +CollectionSystemManager::CollectionSystemManager(Window* window) : mWindow(window) +{ + CollectionSystemDecl systemDecls[] = { + //type name long name //default sort // theme folder // isCustom + { AUTO_ALL_GAMES, "all", "all games", "filename, ascending", "auto-allgames", false }, + { AUTO_LAST_PLAYED, "recent", "last played", "last played, descending", "auto-lastplayed", false }, + { AUTO_FAVORITES, "favorites", "favorites", "filename, ascending", "auto-favorites", false }, + { CUSTOM_COLLECTION, "custom", "custom", "filename, ascending", "custom-collections", true } + }; + + // create a map + std::vector tempSystemDecl = std::vector(systemDecls, systemDecls + sizeof(systemDecls) / sizeof(systemDecls[0])); + + for (std::vector::iterator it = tempSystemDecl.begin(); it != tempSystemDecl.end(); ++it ) + { + mCollectionSystemDecls[(*it).name] = (*it); + //mCollectionSystemDecls.insert(std::make_pair((*it).name,(*it))); + } + + // creating standard environment data + mCollectionEnvData = new SystemEnvironmentData; + mCollectionEnvData->mStartPath = ""; + std::vector exts; + mCollectionEnvData->mSearchExtensions = exts; + mCollectionEnvData->mLaunchCommand = ""; + std::vector allPlatformIds; + allPlatformIds.push_back(PlatformIds::PLATFORM_IGNORE); + mCollectionEnvData->mPlatformIds = allPlatformIds; + + // TO DO: Create custom editing help style + +} + +CollectionSystemManager::~CollectionSystemManager() +{ + assert(sInstance == this); + sInstance = NULL; +} + +void CollectionSystemManager::loadEnabledListFromSettings() +{ + // we parse the settings + std::vector selected = commaStringToVector(Settings::getInstance()->getString("CollectionSystemsAuto")); + + // iterate the map + for(std::map::iterator it = mAllCollectionSystems.begin() ; it != mAllCollectionSystems.end() ; it++ ) + { + it->second.isEnabled = (std::find(selected.begin(), selected.end(), it->first) != selected.end()); + } +} + +void CollectionSystemManager::initAvailableSystemsList() +{ + +} + +std::vector CollectionSystemManager::getSystemsFromConfig() +{ + std::vector systems; + std::string path = SystemData::getConfigPath(false); + + if(!fs::exists(path)) + { + return systems; + } + + pugi::xml_document doc; + pugi::xml_parse_result res = doc.load_file(path.c_str()); + + if(!res) + { + return systems; + } + + //actually read the file + pugi::xml_node systemList = doc.child("systemList"); + + if(!systemList) + { + return systems; + } + + for(pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) + { + // theme folder + std::string themeFolder = system.child("theme").text().get(); + systems.push_back(themeFolder); + } + std::sort(systems.begin(), systems.end()); + return systems; +} + +std::vector CollectionSystemManager::getSystemsFromTheme() +{ + std::vector systems; + auto themeSets = ThemeData::getThemeSets(); + if(themeSets.empty()) + { + // no theme sets available + return systems; + } + + auto set = themeSets.find(Settings::getInstance()->getString("ThemeSet")); + if(set == themeSets.end()) + { + // currently selected theme set is missing, so just pick the first available set + set = themeSets.begin(); + Settings::getInstance()->setString("ThemeSet", set->first); + } + + boost::filesystem::path themePath = set->second.path; + + if (fs::exists(themePath)) + { + fs::directory_iterator end_itr; // default construction yields past-the-end + for (fs::directory_iterator itr(themePath); itr != end_itr; ++itr) + { + if (fs::is_directory(itr->status())) + { + //... here you have a directory + std::string folder = itr->path().string(); + folder = folder.substr(themePath.string().size()+1); + + if(fs::exists(set->second.getThemePath(folder))) + { + systems.push_back(folder); + } + } + } + } + std::sort(systems.begin(), systems.end()); + return systems; +} + +std::vector CollectionSystemManager::getAutoThemeFolders() +{ + std::vector systems; + for(std::map::iterator it = mCollectionSystemDecls.begin() ; it != mCollectionSystemDecls.end() ; it++ ) + { + CollectionSystemDecl sysDecl = it->second; + if (!sysDecl.isCustom) + { + systems.push_back(sysDecl.themeFolder); + } + } + return systems; +} + +bool CollectionSystemManager::isThemeAutoCompatible() +{ + std::vector cfgSys = getAutoThemeFolders(); + for(auto sysIt = cfgSys.begin(); sysIt != cfgSys.end(); sysIt++) + { + if(!themeFolderExists(*sysIt)) + return false; + } + return true; +} + +bool CollectionSystemManager::themeFolderExists(std::string folder) +{ + std::vector themeSys = getSystemsFromTheme(); + return std::find(themeSys.begin(), themeSys.end(), folder) != themeSys.end(); +} + +std::vector CollectionSystemManager::getUnusedSystemsFromTheme() +{ + std::vector cfgSys = getSystemsFromConfig(); + std::vector themeSys = getSystemsFromTheme(); + for(auto sysIt = themeSys.begin(); sysIt != themeSys.end(); ) + { + if (std::find(cfgSys.begin(), cfgSys.end(), *sysIt) != cfgSys.end()) + { + sysIt = themeSys.erase(sysIt); + } + else + { + sysIt++; + } + } + return themeSys; +} + +FileData::SortType CollectionSystemManager::getSortType(std::string desc) { + std::vector SortTypes = FileSorts::SortTypes; + // find it + for(unsigned int i = 0; i < FileSorts::SortTypes.size(); i++) + { + const FileData::SortType& sort = FileSorts::SortTypes.at(i); + if(sort.description == desc) + { + return sort; + } + } + // if not found default to name, ascending + return FileSorts::SortTypes.at(0); +} + +void CollectionSystemManager::loadCollectionSystems() +{ + loadAutoCollectionSystems(); + // we will also load custom systems here in the future + loadCustomCollectionSystems(); + // Now see which ones are enabled + loadEnabledListFromSettings(); + // add to the main System Vector, and create Views as needed + updateSystemsList(); +} + +void CollectionSystemManager::updateSystemsList() +{ + // remove all Collection Systems + for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); ) + { + if ((*sysIt)->isCollection()) + { + sysIt = SystemData::sSystemVector.erase(sysIt); + } + else + { + sysIt++; + } + } + + // add enabled ones + for(std::map::iterator it = mAllCollectionSystems.begin() ; it != mAllCollectionSystems.end() ; it++ ) + { + if(it->second.isEnabled) + { + SystemData::sSystemVector.push_back(it->second.system); + } + } + + // remove disabled gamelist views + // create gamelist views if needed + // iterate the map +} + +void CollectionSystemManager::loadAutoCollectionSystems() +{ + for(std::map::iterator it = mCollectionSystemDecls.begin() ; it != mCollectionSystemDecls.end() ; it++ ) + { + CollectionSystemDecl sysDecl = it->second; + if (!sysDecl.isCustom && !findCollectionSystem(sysDecl.name)) + { + SystemData* newSys = new SystemData(sysDecl.name, sysDecl.longName, mCollectionEnvData, sysDecl.themeFolder, true); + + FileData* rootFolder = newSys->getRootFolder(); + FileFilterIndex* index = newSys->getIndex(); + for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) + { + if ((*sysIt)->isGameSystem()) { + std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(GAME); + for(auto gameIt = files.begin(); gameIt != files.end(); gameIt++) + { + bool include = includeFileInAutoCollections((*gameIt)); + switch(sysDecl.type) { + case AUTO_LAST_PLAYED: + include = include && (*gameIt)->metadata.get("playcount") > "0"; + break; + case AUTO_FAVORITES: + // we may still want to add files we don't want in auto collections in "favorites" + include = (*gameIt)->metadata.get("favorite") == "true"; + break; + } + + if (include) { + CollectionFileData* newGame = new CollectionFileData(*gameIt, newSys); + rootFolder->addChild(newGame); + index->addToIndex(newGame); + } + } + } + } + rootFolder->sort(getSortType(sysDecl.defaultSort)); + mAutoCollectionSystems.push_back(newSys); + + CollectionSystemData newCollectionData; + newCollectionData.system = newSys; + newCollectionData.decl = sysDecl; + newCollectionData.isEnabled = false; + mAllCollectionSystems[sysDecl.name] = newCollectionData; + } + } +} + +void CollectionSystemManager::loadCustomCollectionSystems() +{ + // Load custom systems into memory + // Check unassigned theme folders + // Check settings string for selected/enabled systems, if there are any that aren't in the theme + // Check saved preferences for each of those and load them if we can + // Load settings to see which systems are Enabled +} + +SystemData* CollectionSystemManager::findCollectionSystem(std::string name) +{ + for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) + { + if ((*sysIt)->getName() == name) { + // found it! + return (*sysIt); + } + } + return NULL; +} + +// this updates all collection files related to the argument file +void CollectionSystemManager::updateCollectionSystems(FileData* file) +{ + // collection files use the full path as key, to avoid clashes + std::string key = file->getFullPath(); + // find games in collection systems + for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) + { + if ((*sysIt)->isCollection()) { + const std::unordered_map& children = (*sysIt)->getRootFolder()->getChildrenByFilename(); + bool found = children.find(key) != children.end(); + FileData* rootFolder = (*sysIt)->getRootFolder(); + FileFilterIndex* fileIndex = (*sysIt)->getIndex(); + std::string name = (*sysIt)->getName(); + if (found) { + // if we found it, we need to update it + FileData* collectionEntry = children.at(key); + // remove from index, so we can re-index metadata after refreshing + fileIndex->removeFromIndex(collectionEntry); + collectionEntry->refreshMetadata(); + if (name == "favorites" && file->metadata.get("favorite") == "false") { + // need to check if still marked as favorite, if not remove + ViewController::get()->getGameListView((*sysIt)).get()->remove(collectionEntry, false); + ViewController::get()->onFileChanged((*sysIt)->getRootFolder(), FILE_REMOVED); + } + else + { + // re-index with new metadata + fileIndex->addToIndex(collectionEntry); + ViewController::get()->onFileChanged(collectionEntry, FILE_METADATA_CHANGED); + } + } + else + { + // we didn't find it here - we need to check if we should add it + if (name == "recent" && file->metadata.get("playcount") > "0" || + name == "favorites" && file->metadata.get("favorite") == "true") { + CollectionFileData* newGame = new CollectionFileData(file, (*sysIt)); + rootFolder->addChild(newGame); + fileIndex->addToIndex(newGame); + ViewController::get()->onFileChanged(file, FILE_METADATA_CHANGED); + ViewController::get()->getGameListView((*sysIt))->onFileChanged(newGame, FILE_METADATA_CHANGED); + } + } + rootFolder->sort(getSortType(mCollectionSystemDecls[name].defaultSort)); + ViewController::get()->onFileChanged(rootFolder, FILE_SORTED); + } + } +} + +// this deletes collection files from collection systems +void CollectionSystemManager::deleteCollectionFiles(FileData* file) +{ + // collection files use the full path as key, to avoid clashes + std::string key = file->getFullPath(); + // find games in collection systems + for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) + { + if ((*sysIt)->isCollection()) { + const std::unordered_map& children = (*sysIt)->getRootFolder()->getChildrenByFilename(); + + bool found = children.find(key) != children.end(); + if (found) { + FileData* collectionEntry = children.at(key); + ViewController::get()->getGameListView((*sysIt)).get()->remove(collectionEntry, false); + } + } + } +} + +bool CollectionSystemManager::toggleGameInCollection(FileData* file, std::string collection) +{ + if (file->getType() == GAME) + { + GuiInfoPopup* s; + + MetaDataList* md = &file->getSourceFileData()->metadata; + std::string value = md->get("favorite"); + if (value == "false") + { + md->set("favorite", "true"); + s = new GuiInfoPopup(mWindow, "Added '" + removeParenthesis(file->getName()) + "' to 'Favorites'", 4000); + }else + { + md->set("favorite", "false"); + s = new GuiInfoPopup(mWindow, "Removed '" + removeParenthesis(file->getName()) + "' from 'Favorites'", 4000); + } + mWindow->setInfoPopup(s); + updateCollectionSystems(file->getSourceFileData()); + return true; + } + return false; +} + +bool CollectionSystemManager::includeFileInAutoCollections(FileData* file) +{ + // we exclude non-game files from collections (i.e. "kodi", at least) + // if/when there are more in the future, maybe this can be a more complex method, with a proper list + // but for now a simple string comparison is more performant + return file->getName() != "kodi"; +} \ No newline at end of file diff --git a/es-app/src/CollectionSystemManager.h b/es-app/src/CollectionSystemManager.h new file mode 100644 index 0000000000..9482786d29 --- /dev/null +++ b/es-app/src/CollectionSystemManager.h @@ -0,0 +1,74 @@ +#pragma once + +#include +#include +#include "FileData.h" +#include "Window.h" +#include "MetaData.h" +#include "PlatformId.h" +#include "ThemeData.h" +#include "FileFilterIndex.h" +#include "SystemData.h" +#include "views/ViewController.h" + +enum CollectionSystemType +{ + AUTO_ALL_GAMES, + AUTO_LAST_PLAYED, + AUTO_FAVORITES, + CUSTOM_COLLECTION +}; + +struct CollectionSystemDecl +{ + CollectionSystemType type; // type of system + std::string name; + std::string longName; + std::string defaultSort; + std::string themeFolder; + bool isCustom; +}; + +struct CollectionSystemData +{ + SystemData* system; + CollectionSystemDecl decl; + bool isEnabled; +}; + +class CollectionSystemManager +{ +public: + CollectionSystemManager(Window* window); + ~CollectionSystemManager(); + static void init(Window* window); + static CollectionSystemManager* get(); + void loadEnabledListFromSettings(); + void loadCollectionSystems(); + void updateCollectionSystems(FileData* file); + void deleteCollectionFiles(FileData* file); + inline std::map getCollectionSystems() { return mAllCollectionSystems; }; + void updateSystemsList(); + bool isThemeAutoCompatible(); + bool toggleGameInCollection(FileData* file, std::string collection); + +private: + static CollectionSystemManager* sInstance; + std::map mCollectionSystemDecls; + SystemEnvironmentData* mCollectionEnvData; + static FileData::SortType getSortType(std::string desc); + void initAvailableSystemsList(); + std::vector getSystemsFromConfig(); + std::vector getSystemsFromTheme(); + std::vector getUnusedSystemsFromTheme(); + std::vector getAutoThemeFolders(); + bool themeFolderExists(std::string folder); + void loadAutoCollectionSystems(); + void loadCustomCollectionSystems(); // TO DO NEXT + SystemData* findCollectionSystem(std::string name); + bool includeFileInAutoCollections(FileData* file); + std::map mAllCollectionSystems; + std::vector mAutoCollectionSystems; + std::vector mCustomCollectionSystems; + Window* mWindow; +}; diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 54e6f38563..8352b6c520 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -1,54 +1,21 @@ #include "FileData.h" +#include "FileSorts.h" +#include "views/ViewController.h" #include "SystemData.h" +#include "Log.h" +#include "AudioManager.h" +#include "VolumeControl.h" +#include "Util.h" namespace fs = boost::filesystem; -std::string removeParenthesis(const std::string& str) -{ - // remove anything in parenthesis or brackets - // should be roughly equivalent to the regex replace "\((.*)\)|\[(.*)\]" with "" - // I would love to just use regex, but it's not worth pulling in another boost lib for one function that is used once - - std::string ret = str; - size_t start, end; - - static const int NUM_TO_REPLACE = 2; - static const char toReplace[NUM_TO_REPLACE*2] = { '(', ')', '[', ']' }; - - bool done = false; - while(!done) - { - done = true; - for(int i = 0; i < NUM_TO_REPLACE; i++) - { - end = ret.find_first_of(toReplace[i*2+1]); - start = ret.find_last_of(toReplace[i*2], end); - - if(start != std::string::npos && end != std::string::npos) - { - ret.erase(start, end - start + 1); - done = false; - } - } - } - - // also strip whitespace - end = ret.find_last_not_of(' '); - if(end != std::string::npos) - end++; - - ret = ret.substr(0, end); - - return ret; -} - - -FileData::FileData(FileType type, const fs::path& path, SystemData* system) - : mType(type), mPath(path), mSystem(system), mParent(NULL), metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA) // metadata is REALLY set in the constructor! +FileData::FileData(FileType type, const fs::path& path, SystemEnvironmentData* envData, SystemData* system) + : mType(type), mPath(path), mSystem(system), mEnvData(envData), mSourceFileData(NULL), mParent(NULL), metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA) // metadata is REALLY set in the constructor! { // metadata needs at least a name field (since that's what getName() will return) if(metadata.get("name").empty()) metadata.set("name", getDisplayName()); + mSystemName = system->getName(); } FileData::~FileData() @@ -56,7 +23,9 @@ FileData::~FileData() if(mParent) mParent->removeChild(this); - mChildren.clear(); + mSystem->getIndex()->removeFromIndex(this); + + mChildren.clear(); } std::string FileData::getDisplayName() const @@ -81,6 +50,11 @@ const std::string& FileData::getThumbnailPath() const return metadata.get("image"); } +const std::string& FileData::getName() +{ + return metadata.get("name"); +} + const std::vector& FileData::getChildrenListToDisplay() { FileFilterIndex* idx = mSystem->getIndex(); @@ -134,12 +108,21 @@ std::vector FileData::getFilesRecursive(unsigned int typeMask, bool d return out; } +std::string FileData::getKey() { + return getFileName(); +} + +FileData* FileData::getSourceFileData() +{ + return this; +} + void FileData::addChild(FileData* file) { assert(mType == FOLDER); assert(file->getParent() == NULL); - const std::string key = file->getPath().filename().string(); + const std::string key = file->getKey(); if (mChildrenByFilename.find(key) == mChildrenByFilename.end()) { mChildrenByFilename[key] = file; @@ -152,7 +135,7 @@ void FileData::removeChild(FileData* file) { assert(mType == FOLDER); assert(file->getParent() == this); - mChildrenByFilename.erase(file->getPath().filename().string()); + mChildrenByFilename.erase(file->getKey()); for(auto it = mChildren.begin(); it != mChildren.end(); it++) { if(*it == file) @@ -169,7 +152,7 @@ void FileData::removeChild(FileData* file) void FileData::sort(ComparisonFunction& comparator, bool ascending) { - std::sort(mChildren.begin(), mChildren.end(), comparator); + std::stable_sort(mChildren.begin(), mChildren.end(), comparator); for(auto it = mChildren.begin(); it != mChildren.end(); it++) { @@ -185,3 +168,95 @@ void FileData::sort(const SortType& type) { sort(*type.comparisonFunction, type.ascending); } + +void FileData::launchGame(Window* window) +{ + LOG(LogInfo) << "Attempting to launch game..."; + + AudioManager::getInstance()->deinit(); + VolumeControl::getInstance()->deinit(); + window->deinit(); + + std::string command = mEnvData->mLaunchCommand; + + const std::string rom = escapePath(getPath()); + const std::string basename = getPath().stem().string(); + const std::string rom_raw = fs::path(getPath()).make_preferred().string(); + + command = strreplace(command, "%ROM%", rom); + command = strreplace(command, "%BASENAME%", basename); + command = strreplace(command, "%ROM_RAW%", rom_raw); + + LOG(LogInfo) << " " << command; + int exitCode = runSystemCommand(command); + + if(exitCode != 0) + { + LOG(LogWarning) << "...launch terminated with nonzero exit code " << exitCode << "!"; + } + + window->init(); + VolumeControl::getInstance()->init(); + AudioManager::getInstance()->init(); + window->normalizeNextUpdate(); + + //update number of times the game has been launched + + FileData* gameToUpdate = getSourceFileData(); + + int timesPlayed = gameToUpdate->metadata.getInt("playcount") + 1; + gameToUpdate->metadata.set("playcount", std::to_string(static_cast(timesPlayed))); + + //update last played time + boost::posix_time::ptime time = boost::posix_time::second_clock::universal_time(); + gameToUpdate->metadata.setTime("lastplayed", time); + CollectionSystemManager::get()->updateCollectionSystems(gameToUpdate); +} + +CollectionFileData::CollectionFileData(FileData* file, SystemData* system) + : FileData(file->getType(), file->getPath(), file->getSystemEnvData(), system)/*, + mSourceFileData(file->getSourceFileData()), + mParent(NULL), + metadata(file->getSourceFileData()->metadata)*/ +{ + // we use this constructor to create a clone of the filedata, and change its system + mSourceFileData = file->getSourceFileData(); + refreshMetadata(); + mParent = NULL; + metadata = mSourceFileData->metadata; + mSystemName = mSourceFileData->getSystem()->getName(); +} + +CollectionFileData::~CollectionFileData() +{ + // need to remove collection file data at the collection object destructor + if(mParent) + mParent->removeChild(this); + mParent = NULL; +} + +std::string CollectionFileData::getKey() { + return getFullPath(); +} + +FileData* CollectionFileData::getSourceFileData() +{ + return mSourceFileData; +} + +void CollectionFileData::refreshMetadata() +{ + metadata = mSourceFileData->metadata; + mDirty = true; +} + +const std::string& CollectionFileData::getName() +{ + if (mDirty) { + mCollectionFileName = removeParenthesis(mSourceFileData->metadata.get("name")); + boost::trim(mCollectionFileName); + mCollectionFileName += " [" + strToUpper(mSourceFileData->getSystem()->getName()) + "]"; + mDirty = false; + } + return mCollectionFileName; +} \ No newline at end of file diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index fbc53738e7..425f7f9817 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -7,6 +7,7 @@ #include "MetaData.h" class SystemData; +struct SystemEnvironmentData; enum FileType { @@ -27,24 +28,21 @@ enum FileChangeType const char* fileTypeToString(FileType type); FileType stringToFileType(const char* str); -// Remove (.*) and [.*] from str -std::string removeParenthesis(const std::string& str); - // A tree node that holds information for a file. class FileData { public: - FileData(FileType type, const boost::filesystem::path& path, SystemData* system); + FileData(FileType type, const boost::filesystem::path& path, SystemEnvironmentData* envData, SystemData* system); virtual ~FileData(); - inline const std::string& getName() const { return metadata.get("name"); } + virtual const std::string& getName(); inline FileType getType() const { return mType; } inline const boost::filesystem::path& getPath() const { return mPath; } inline FileData* getParent() const { return mParent; } inline const std::unordered_map& getChildrenByFilename() const { return mChildrenByFilename; } inline const std::vector& getChildren() const { return mChildren; } inline SystemData* getSystem() const { return mSystem; } - + inline SystemEnvironmentData* getSystemEnvData() const { return mEnvData; } virtual const std::string& getThumbnailPath() const; virtual const std::string& getVideoPath() const; virtual const std::string& getMarqueePath() const; @@ -57,12 +55,22 @@ class FileData inline bool isPlaceHolder() { return mType == PLACEHOLDER; }; + virtual inline void refreshMetadata() { return; }; + + virtual std::string getKey(); + inline std::string getFullPath() { return getPath().string(); }; + inline std::string getFileName() { return getPath().filename().string(); }; + virtual FileData* getSourceFileData(); + inline std::string getSystemName() const { return mSystemName; }; + // Returns our best guess at the "real" name for this file (will attempt to perform MAME name translation) std::string getDisplayName() const; // As above, but also remove parenthesis std::string getCleanName() const; + void launchGame(Window* window); + typedef bool ComparisonFunction(const FileData* a, const FileData* b); struct SortType { @@ -76,15 +84,34 @@ class FileData void sort(ComparisonFunction& comparator, bool ascending = true); void sort(const SortType& type); - MetaDataList metadata; +protected: + FileData* mSourceFileData; + FileData* mParent; + std::string mSystemName; + private: FileType mType; boost::filesystem::path mPath; + SystemEnvironmentData* mEnvData; SystemData* mSystem; - FileData* mParent; std::unordered_map mChildrenByFilename; std::vector mChildren; std::vector mFilteredChildren; }; + +class CollectionFileData : public FileData +{ +public: + CollectionFileData(FileData* file, SystemData* system); + ~CollectionFileData(); + const std::string& getName(); + void refreshMetadata(); + FileData* getSourceFileData(); + std::string getKey(); +private: + // needs to be updated when metadata changes + std::string mCollectionFileName; + bool mDirty; +}; \ No newline at end of file diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index 5fe6a94c3b..3f60539d80 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -4,10 +4,11 @@ #define INCLUDE_UNKNOWN false; FileFilterIndex::FileFilterIndex() - : filterByGenre(false), filterByPlayers(false), filterByPubDev(false), filterByRatings(false) + : filterByGenre(false), filterByPlayers(false), filterByPubDev(false), filterByRatings(false), filterByFavorites(false) { FilterDataDecl filterDecls[] = { //type //allKeys //filteredBy //filteredKeys //primaryKey //hasSecondaryKey //secondaryKey //menuLabel + { FAVORITES_FILTER, &favoritesIndexAllKeys, &filterByFavorites, &favoritesIndexFilteredKeys,"favorite", false, "", "FAVORITES" }, { GENRE_FILTER, &genreIndexAllKeys, &filterByGenre, &genreIndexFilteredKeys, "genre", true, "genre", "GENRE" }, { PLAYER_FILTER, &playersIndexAllKeys, &filterByPlayers, &playersIndexFilteredKeys, "players", false, "", "PLAYERS" }, { PUBDEV_FILTER, &pubDevIndexAllKeys, &filterByPubDev, &pubDevIndexFilteredKeys, "developer", true, "publisher", "PUBLISHER / DEVELOPER" }, @@ -23,7 +24,7 @@ FileFilterIndex::~FileFilterIndex() clearIndex(playersIndexAllKeys); clearIndex(pubDevIndexAllKeys); clearIndex(ratingsIndexAllKeys); - + clearIndex(favoritesIndexAllKeys); } std::vector& FileFilterIndex::getFilterDataDecls() @@ -96,6 +97,13 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ } break; } + case FAVORITES_FILTER: + { + if (game->getType() != GAME) + return "FALSE"; + key = strToUpper(game->metadata.get("favorite")); + break; + } } boost::trim(key); if (key.empty() || (type == RATINGS_FILTER && key == "0 STARS")) { @@ -110,6 +118,7 @@ void FileFilterIndex::addToIndex(FileData* game) managePlayerEntryInIndex(game); managePubDevEntryInIndex(game); manageRatingsEntryInIndex(game); + manageFavoritesEntryInIndex(game); } void FileFilterIndex::removeFromIndex(FileData* game) @@ -118,6 +127,7 @@ void FileFilterIndex::removeFromIndex(FileData* game) managePlayerEntryInIndex(game, true); managePubDevEntryInIndex(game, true); manageRatingsEntryInIndex(game, true); + manageFavoritesEntryInIndex(game, true); } void FileFilterIndex::setFilter(FilterIndexType type, std::vector* values) @@ -160,18 +170,21 @@ void FileFilterIndex::clearAllFilters() void FileFilterIndex::debugPrintIndexes() { - LOG(LogInfo) << "Printing Indexes..."; + LOG(LogError) << "Printing Indexes..."; for (auto x: playersIndexAllKeys) { - LOG(LogInfo) << "Multiplayer Index: " << x.first << ": " << x.second; + LOG(LogError) << "Multiplayer Index: " << x.first << ": " << x.second; } for (auto x: genreIndexAllKeys) { - LOG(LogInfo) << "Genre Index: " << x.first << ": " << x.second; + LOG(LogError) << "Genre Index: " << x.first << ": " << x.second; } for (auto x: ratingsIndexAllKeys) { - LOG(LogInfo) << "Ratings Index: " << x.first << ": " << x.second; + LOG(LogError) << "Ratings Index: " << x.first << ": " << x.second; } for (auto x: pubDevIndexAllKeys) { - LOG(LogInfo) << "PubDev Index: " << x.first << ": " << x.second; + LOG(LogError) << "PubDev Index: " << x.first << ": " << x.second; + } + for (auto x: favoritesIndexAllKeys) { + LOG(LogError) << "Favorites Index: " << x.first << ": " << x.second; } } @@ -232,10 +245,10 @@ bool FileFilterIndex::showFile(FileData* game) bool FileFilterIndex::isKeyBeingFilteredBy(std::string key, FilterIndexType type) { - const FilterIndexType filterTypes[4] = { PLAYER_FILTER, RATINGS_FILTER, GENRE_FILTER, PUBDEV_FILTER }; - std::vector filterKeysList[4] = { playersIndexFilteredKeys, ratingsIndexFilteredKeys, genreIndexFilteredKeys, pubDevIndexFilteredKeys }; + const FilterIndexType filterTypes[5] = { FAVORITES_FILTER, PLAYER_FILTER, RATINGS_FILTER, GENRE_FILTER, PUBDEV_FILTER }; + std::vector filterKeysList[5] = { favoritesIndexFilteredKeys, playersIndexFilteredKeys, ratingsIndexFilteredKeys, genreIndexFilteredKeys, pubDevIndexFilteredKeys }; - for (int i = 0; i < 4; i++) + for (int i = 0; i < 5; i++) { if (filterTypes[i] == type) { @@ -345,6 +358,19 @@ void FileFilterIndex::manageRatingsEntryInIndex(FileData* game, bool remove) manageIndexEntry(&ratingsIndexAllKeys, key, remove); } +void FileFilterIndex::manageFavoritesEntryInIndex(FileData* game, bool remove) +{ + // flag for including unknowns + bool includeUnknown = INCLUDE_UNKNOWN; + std::string key = getIndexableKey(game, FAVORITES_FILTER, false); + if (!includeUnknown && key == UNKNOWN_LABEL) { + // no valid favorites info found + return; + } + + manageIndexEntry(&favoritesIndexAllKeys, key, remove); +} + void FileFilterIndex::manageIndexEntry(std::map* index, std::string key, bool remove) { bool includeUnknown = INCLUDE_UNKNOWN; if (!includeUnknown && key == UNKNOWN_LABEL) @@ -354,7 +380,7 @@ void FileFilterIndex::manageIndexEntry(std::map* index, std::s if (index->find(key) == index->end()) { // this shouldn't happen - LOG(LogError) << "Couldn't find entry in index! " << key; + LOG(LogInfo) << "Couldn't find entry in index! " << key; } else { diff --git a/es-app/src/FileFilterIndex.h b/es-app/src/FileFilterIndex.h index 7402c1e0ec..d1e62d9487 100644 --- a/es-app/src/FileFilterIndex.h +++ b/es-app/src/FileFilterIndex.h @@ -15,7 +15,8 @@ enum FilterIndexType GENRE_FILTER, PLAYER_FILTER, PUBDEV_FILTER, - RATINGS_FILTER + RATINGS_FILTER, + FAVORITES_FILTER }; struct FilterDataDecl @@ -41,10 +42,8 @@ class FileFilterIndex void clearAllFilters(); void debugPrintIndexes(); bool showFile(FileData* game); - bool isFiltered() { return (filterByGenre || filterByPlayers || filterByPubDev || filterByRatings); }; + bool isFiltered() { return (filterByGenre || filterByPlayers || filterByPubDev || filterByRatings || filterByFavorites); }; bool isKeyBeingFilteredBy(std::string key, FilterIndexType type); - std::map* getGenreAllIndexedKeys() { return &genreIndexAllKeys; }; - std::vector* getGenreFilteredKeys() { return &genreIndexFilteredKeys; }; std::vector& getFilterDataDecls(); private: std::vector filterDataDecl; @@ -54,6 +53,7 @@ class FileFilterIndex void managePlayerEntryInIndex(FileData* game, bool remove = false); void managePubDevEntryInIndex(FileData* game, bool remove = false); void manageRatingsEntryInIndex(FileData* game, bool remove = false); + void manageFavoritesEntryInIndex(FileData* game, bool remove = false); void manageIndexEntry(std::map* index, std::string key, bool remove); @@ -63,16 +63,19 @@ class FileFilterIndex bool filterByPlayers; bool filterByPubDev; bool filterByRatings; + bool filterByFavorites; std::map genreIndexAllKeys; std::map playersIndexAllKeys; std::map pubDevIndexAllKeys; std::map ratingsIndexAllKeys; + std::map favoritesIndexAllKeys; std::vector genreIndexFilteredKeys; std::vector playersIndexFilteredKeys; std::vector pubDevIndexFilteredKeys; std::vector ratingsIndexFilteredKeys; + std::vector favoritesIndexFilteredKeys; FileData* mRootFolder; diff --git a/es-app/src/FileSorts.cpp b/es-app/src/FileSorts.cpp index 7a431a9a91..101b913f1f 100644 --- a/es-app/src/FileSorts.cpp +++ b/es-app/src/FileSorts.cpp @@ -3,8 +3,8 @@ namespace FileSorts { const FileData::SortType typesArr[] = { - FileData::SortType(&compareFileName, true, "filename, ascending"), - FileData::SortType(&compareFileName, false, "filename, descending"), + FileData::SortType(&compareName, true, "filename, ascending"), + FileData::SortType(&compareName, false, "filename, descending"), FileData::SortType(&compareRating, true, "rating, ascending"), FileData::SortType(&compareRating, false, "rating, descending"), @@ -28,16 +28,20 @@ namespace FileSorts FileData::SortType(&compareDeveloper, false, "developer, descending"), FileData::SortType(&comparePublisher, true, "publisher, ascending"), - FileData::SortType(&comparePublisher, false, "publisher, descending") + FileData::SortType(&comparePublisher, false, "publisher, descending"), + + FileData::SortType(&compareSystem, true, "system, ascending"), + FileData::SortType(&compareSystem, false, "system, descending") }; const std::vector SortTypes(typesArr, typesArr + sizeof(typesArr)/sizeof(typesArr[0])); //returns if file1 should come before file2 - bool compareFileName(const FileData* file1, const FileData* file2) + bool compareName(const FileData* file1, const FileData* file2) { - std::string name1 = file1->getName(); - std::string name2 = file2->getName(); + // we compare the actual metadata name, as collection files have the system appended which messes up the order + std::string name1 = file1->metadata.get("name"); + std::string name2 = file2->metadata.get("name"); transform(name1.begin(), name1.end(), name1.begin(), ::toupper); transform(name2.begin(), name2.end(), name2.begin(), ::toupper); return name1.compare(name2) < 0; @@ -62,9 +66,11 @@ namespace FileSorts bool compareLastPlayed(const FileData* file1, const FileData* file2) { //only games have lastplayed metadata + // since it's stored as a POSIX string (YYYYMMDDTHHMMSS,fffffffff), we can compare as a string + // as it's a lot faster than the time casts and then time comparisons if(file1->metadata.getType() == GAME_METADATA && file2->metadata.getType() == GAME_METADATA) { - return (file1)->metadata.getTime("lastplayed") < (file2)->metadata.getTime("lastplayed"); + return (file1)->metadata.get("lastplayed") < (file2)->metadata.get("lastplayed"); } return false; @@ -106,4 +112,13 @@ namespace FileSorts transform(publisher2.begin(), publisher2.end(), publisher2.begin(), ::toupper); return publisher1.compare(publisher2) < 0; } + + bool compareSystem(const FileData* file1, const FileData* file2) + { + std::string system1 = file1->getSystemName(); + std::string system2 = file2->getSystemName(); + transform(system1.begin(), system1.end(), system1.begin(), ::toupper); + transform(system2.begin(), system2.end(), system2.begin(), ::toupper); + return system1.compare(system2) < 0; + } }; diff --git a/es-app/src/FileSorts.h b/es-app/src/FileSorts.h index b27925097e..ac24a1db39 100644 --- a/es-app/src/FileSorts.h +++ b/es-app/src/FileSorts.h @@ -2,10 +2,11 @@ #include #include "FileData.h" +#include "SystemData.h" namespace FileSorts { - bool compareFileName(const FileData* file1, const FileData* file2); + bool compareName(const FileData* file1, const FileData* file2); bool compareRating(const FileData* file1, const FileData* file2); bool compareTimesPlayed(const FileData* file1, const FileData* fil2); bool compareLastPlayed(const FileData* file1, const FileData* file2); @@ -14,6 +15,7 @@ namespace FileSorts bool compareGenre(const FileData* file1, const FileData* file2); bool compareDeveloper(const FileData* file1, const FileData* file2); bool comparePublisher(const FileData* file1, const FileData* file2); + bool compareSystem(const FileData* file1, const FileData* file2); extern const std::vector SortTypes; }; diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index b6da7018a6..cae840264b 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -54,7 +54,7 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa return NULL; } - FileData* file = new FileData(type, path, system); + FileData* file = new FileData(type, path, system->getSystemEnvData(), system); treeNode->addChild(file); return file; } @@ -70,7 +70,7 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa } // create missing folder - FileData* folder = new FileData(FOLDER, treeNode->getPath().stem() / *path_it, system); + FileData* folder = new FileData(FOLDER, treeNode->getPath().stem() / *path_it, system->getSystemEnvData(), system); treeNode->addChild(folder); treeNode = folder; } diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 8dd6426ef6..2eb1e5effe 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -5,38 +5,39 @@ namespace fs = boost::filesystem; -MetaDataDecl gameDecls[] = { - // key, type, default, statistic, name in GuiMetaDataEd, prompt in GuiMetaDataEd - {"name", MD_STRING, "", false, "name", "enter game name"}, - {"desc", MD_MULTILINE_STRING, "", false, "description", "enter description"}, - {"image", MD_PATH, "", false, "image", "enter path to image"}, - {"video", MD_PATH , "", false, "video", "enter path to video"}, - {"marquee", MD_PATH, "", false, "marquee", "enter path to marquee"}, - {"thumbnail", MD_PATH, "", false, "thumbnail", "enter path to thumbnail"}, - {"rating", MD_RATING, "0.000000", false, "rating", "enter rating"}, - {"releasedate", MD_DATE, "not-a-date-time", false, "release date", "enter release date"}, - {"developer", MD_STRING, "unknown", false, "developer", "enter game developer"}, - {"publisher", MD_STRING, "unknown", false, "publisher", "enter game publisher"}, - {"genre", MD_STRING, "unknown", false, "genre", "enter game genre"}, - {"players", MD_INT, "1", false, "players", "enter number of players"}, - {"playcount", MD_INT, "0", true, "play count", "enter number of times played"}, - {"lastplayed", MD_TIME, "0", true, "last played", "enter last played date"} +MetaDataDecl gameDecls[] = { + // key, type, default, statistic, name in GuiMetaDataEd, prompt in GuiMetaDataEd + {"name", MD_STRING, "", false, "name", "enter game name"}, + {"desc", MD_MULTILINE_STRING, "", false, "description", "enter description"}, + {"image", MD_PATH, "", false, "image", "enter path to image"}, + {"video", MD_PATH , "", false, "video", "enter path to video"}, + {"marquee", MD_PATH, "", false, "marquee", "enter path to marquee"}, + {"thumbnail", MD_PATH, "", false, "thumbnail", "enter path to thumbnail"}, + {"rating", MD_RATING, "0.000000", false, "rating", "enter rating"}, + {"releasedate", MD_DATE, "not-a-date-time", false, "release date", "enter release date"}, + {"developer", MD_STRING, "unknown", false, "developer", "enter game developer"}, + {"publisher", MD_STRING, "unknown", false, "publisher", "enter game publisher"}, + {"genre", MD_STRING, "unknown", false, "genre", "enter game genre"}, + {"players", MD_INT, "1", false, "players", "enter number of players"}, + {"favorite", MD_BOOL, "false", false, "favorite", "enter favorite off/on"}, + {"playcount", MD_INT, "0", true, "play count", "enter number of times played"}, + {"lastplayed", MD_TIME, "0", true, "last played", "enter last played date"} }; const std::vector gameMDD(gameDecls, gameDecls + sizeof(gameDecls) / sizeof(gameDecls[0])); -MetaDataDecl folderDecls[] = { - {"name", MD_STRING, "", false, "name", "enter game name"}, - {"desc", MD_MULTILINE_STRING, "", false, "description", "enter description"}, - {"image", MD_PATH, "", false, "image", "enter path to image"}, - {"thumbnail", MD_PATH, "", false, "thumbnail", "enter path to thumbnail"}, - {"video", MD_PATH, "", false, "video", "enter path to video"}, - {"marquee", MD_PATH, "", false, "marquee", "enter path to marquee"}, - {"rating", MD_RATING, "0.000000", false, "rating", "enter rating"}, - {"releasedate", MD_DATE, "not-a-date-time", false, "release date", "enter release date"}, - {"developer", MD_STRING, "unknown", false, "developer", "enter game developer"}, - {"publisher", MD_STRING, "unknown", false, "publisher", "enter game publisher"}, - {"genre", MD_STRING, "unknown", false, "genre", "enter game genre"}, - {"players", MD_INT, "1", false, "players", "enter number of players"} +MetaDataDecl folderDecls[] = { + {"name", MD_STRING, "", false, "name", "enter game name"}, + {"desc", MD_MULTILINE_STRING, "", false, "description", "enter description"}, + {"image", MD_PATH, "", false, "image", "enter path to image"}, + {"thumbnail", MD_PATH, "", false, "thumbnail", "enter path to thumbnail"}, + {"video", MD_PATH, "", false, "video", "enter path to video"}, + {"marquee", MD_PATH, "", false, "marquee", "enter path to marquee"}, + {"rating", MD_RATING, "0.000000", false, "rating", "enter rating"}, + {"releasedate", MD_DATE, "not-a-date-time", false, "release date", "enter release date"}, + {"developer", MD_STRING, "unknown", false, "developer", "enter game developer"}, + {"publisher", MD_STRING, "unknown", false, "publisher", "enter game publisher"}, + {"genre", MD_STRING, "unknown", false, "genre", "enter game genre"}, + {"players", MD_INT, "1", false, "players", "enter number of players"} }; const std::vector folderMDD(folderDecls, folderDecls + sizeof(folderDecls) / sizeof(folderDecls[0])); diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index f9b867450d..62c9869e61 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -13,6 +13,7 @@ enum MetaDataType MD_STRING, MD_INT, MD_FLOAT, + MD_BOOL, //specialized types MD_MULTILINE_STRING, diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 41efa64cb9..91b55c30d9 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -5,8 +5,6 @@ #include #include #include "Renderer.h" -#include "AudioManager.h" -#include "VolumeControl.h" #include "Log.h" #include "InputManager.h" #include @@ -17,45 +15,38 @@ std::vector SystemData::sSystemVector; namespace fs = boost::filesystem; -SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, - const std::string& command, const std::vector& platformIds, const std::string& themeFolder) +SystemData::SystemData(const std::string& name, const std::string& fullName, SystemEnvironmentData* envData, const std::string& themeFolder, bool CollectionSystem) : + mName(name), mFullName(fullName), mEnvData(envData), mThemeFolder(themeFolder), mIsCollectionSystem(CollectionSystem), mIsGameSystem(true) { - mName = name; - mFullName = fullName; - mStartPath = startPath; - - //expand home symbol if the startpath contains ~ - if(mStartPath[0] == '~') - { - mStartPath.erase(0, 1); - mStartPath.insert(0, getHomePath()); - } - - mSearchExtensions = extensions; - mLaunchCommand = command; - mPlatformIds = platformIds; - mThemeFolder = themeFolder; - mFilterIndex = new FileFilterIndex(); - mRootFolder = new FileData(FOLDER, mStartPath, this); - mRootFolder->metadata.set("name", mFullName); - - if(!Settings::getInstance()->getBool("ParseGamelistOnly")) - populateFolder(mRootFolder); + // if it's an actual system, initialize it, if not, just create the data structure + if(!CollectionSystem) + { + mRootFolder = new FileData(FOLDER, mEnvData->mStartPath, mEnvData, this); + mRootFolder->metadata.set("name", mFullName); - if(!Settings::getInstance()->getBool("IgnoreGamelist")) - parseGamelist(this); + if(!Settings::getInstance()->getBool("ParseGamelistOnly")) + populateFolder(mRootFolder); - mRootFolder->sort(FileSorts::SortTypes.at(0)); + if(!Settings::getInstance()->getBool("IgnoreGamelist")) + parseGamelist(this); + mRootFolder->sort(FileSorts::SortTypes.at(0)); + } + else + { + // virtual systems are updated afterwards, we're just creating the data structure + mRootFolder = new FileData(FOLDER, "" + name, mEnvData, this); + } + setIsGameSystemStatus(); loadTheme(); } SystemData::~SystemData() { //save changed game data back to xml - if(!Settings::getInstance()->getBool("IgnoreGamelist") && Settings::getInstance()->getBool("SaveGamelistsOnExit")) + if(!Settings::getInstance()->getBool("IgnoreGamelist") && Settings::getInstance()->getBool("SaveGamelistsOnExit") && !mIsCollectionSystem) { updateGamelist(this); } @@ -64,87 +55,12 @@ SystemData::~SystemData() delete mFilterIndex; } - -std::string strreplace(std::string str, const std::string& replace, const std::string& with) -{ - size_t pos; - while((pos = str.find(replace)) != std::string::npos) - str = str.replace(pos, replace.length(), with.c_str(), with.length()); - - return str; -} - -// plaform-specific escape path function -// on windows: just puts the path in quotes -// everything else: assume bash and escape special characters with backslashes -std::string escapePath(const boost::filesystem::path& path) +void SystemData::setIsGameSystemStatus() { -#ifdef WIN32 - // windows escapes stuff by just putting everything in quotes - return '"' + fs::path(path).make_preferred().string() + '"'; -#else - // a quick and dirty way to insert a backslash before most characters that would mess up a bash path - std::string pathStr = path.string(); - - const char* invalidChars = " '\"\\!$^&*(){}[]?;<>"; - for(unsigned int i = 0; i < pathStr.length(); i++) - { - char c; - unsigned int charNum = 0; - do { - c = invalidChars[charNum]; - if(pathStr[i] == c) - { - pathStr.insert(i, "\\"); - i++; - break; - } - charNum++; - } while(c != '\0'); - } - - return pathStr; -#endif -} - -void SystemData::launchGame(Window* window, FileData* game) -{ - LOG(LogInfo) << "Attempting to launch game..."; - - AudioManager::getInstance()->deinit(); - VolumeControl::getInstance()->deinit(); - window->deinit(); - - std::string command = mLaunchCommand; - - const std::string rom = escapePath(game->getPath()); - const std::string basename = game->getPath().stem().string(); - const std::string rom_raw = fs::path(game->getPath()).make_preferred().string(); - - command = strreplace(command, "%ROM%", rom); - command = strreplace(command, "%BASENAME%", basename); - command = strreplace(command, "%ROM_RAW%", rom_raw); - - LOG(LogInfo) << " " << command; - int exitCode = runSystemCommand(command); - - if(exitCode != 0) - { - LOG(LogWarning) << "...launch terminated with nonzero exit code " << exitCode << "!"; - } - - window->init(); - VolumeControl::getInstance()->init(); - AudioManager::getInstance()->init(); - window->normalizeNextUpdate(); - - //update number of times the game has been launched - int timesPlayed = game->metadata.getInt("playcount") + 1; - game->metadata.set("playcount", std::to_string(static_cast(timesPlayed))); - - //update last played time - boost::posix_time::ptime time = boost::posix_time::second_clock::universal_time(); - game->metadata.setTime("lastplayed", time); + // we exclude non-game systems from specific operations (i.e. the "RetroPie" system, at least) + // if/when there are more in the future, maybe this can be a more complex method, with a proper list + // but for now a simple string comparison is more performant + mIsGameSystem = (mName != "retropie"); } void SystemData::populateFolder(FileData* folder) @@ -187,9 +103,9 @@ void SystemData::populateFolder(FileData* folder) //see issue #75: https://github.com/Aloshi/EmulationStation/issues/75 isGame = false; - if(std::find(mSearchExtensions.begin(), mSearchExtensions.end(), extension) != mSearchExtensions.end()) + if(std::find(mEnvData->mSearchExtensions.begin(), mEnvData->mSearchExtensions.end(), extension) != mEnvData->mSearchExtensions.end()) { - FileData* newGame = new FileData(GAME, filePath.generic_string(), this); + FileData* newGame = new FileData(GAME, filePath.generic_string(), mEnvData, this); folder->addChild(newGame); isGame = true; } @@ -197,7 +113,7 @@ void SystemData::populateFolder(FileData* folder) //add directories that also do not match an extension as folders if(!isGame && fs::is_directory(filePath)) { - FileData* newFolder = new FileData(FOLDER, filePath.generic_string(), this); + FileData* newFolder = new FileData(FOLDER, filePath.generic_string(), mEnvData, this); populateFolder(newFolder); //ignore folders that do not contain games @@ -313,7 +229,21 @@ bool SystemData::loadConfig() boost::filesystem::path genericPath(path); path = genericPath.generic_string(); - SystemData* newSys = new SystemData(name, fullname, path, extensions, cmd, platformIds, themeFolder); + //expand home symbol if the startpath contains ~ + if(path[0] == '~') + { + path.erase(0, 1); + path.insert(0, getHomePath()); + } + + //create the system runtime environment data + SystemEnvironmentData* envData = new SystemEnvironmentData; + envData->mStartPath = path; + envData->mSearchExtensions = extensions; + envData->mLaunchCommand = cmd; + envData->mPlatformIds = platformIds; + + SystemData* newSys = new SystemData(name, fullname, envData, themeFolder); if(newSys->getRootFolder()->getChildrenByFilename().size() == 0) { LOG(LogWarning) << "System \"" << name << "\" has no games! Ignoring it."; @@ -322,6 +252,7 @@ bool SystemData::loadConfig() sSystemVector.push_back(newSys); } } + CollectionSystemManager::get()->loadCollectionSystems(); return true; } @@ -432,6 +363,44 @@ unsigned int SystemData::getGameCount() const return mRootFolder->getFilesRecursive(GAME).size(); } +SystemData* SystemData::getRandomSystem() +{ + // this is a bit brute force. It might be more efficient to just to a while (!gameSystem) do random again... + unsigned int total = 0; + for(auto it = sSystemVector.begin(); it != sSystemVector.end(); it++) + { + if ((*it)->isGameSystem()) + total ++; + } + + // get random number in range + int target = std::round(((double)std::rand() / (double)RAND_MAX) * total); + + for (auto it = sSystemVector.begin(); it != sSystemVector.end(); it++) + { + if ((*it)->isGameSystem()) + { + if (target >= 0) + { + target--; + } + else + { + return (*it); + } + } + } +} + +FileData* SystemData::getRandomGame() +{ + std::vector list = mRootFolder->getFilesRecursive(GAME, true); + unsigned int total = list.size(); + // get random number in range + int target = std::round(((double)std::rand() / (double)RAND_MAX) * total); + return list.at(target); +} + unsigned int SystemData::getDisplayedGameCount() const { return mRootFolder->getFilesRecursive(GAME, true).size(); diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index 7916f18258..cb44a1c11e 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -8,23 +8,31 @@ #include "PlatformId.h" #include "ThemeData.h" #include "FileFilterIndex.h" +#include "CollectionSystemManager.h" + +struct SystemEnvironmentData +{ + std::string mStartPath; + std::vector mSearchExtensions; + std::string mLaunchCommand; + std::vector mPlatformIds; +}; class SystemData { public: - SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector& extensions, - const std::string& command, const std::vector& platformIds, const std::string& themeFolder); + SystemData(const std::string& name, const std::string& fullName, SystemEnvironmentData* envData, const std::string& themeFolder, bool CollectionSystem = false); ~SystemData(); inline FileData* getRootFolder() const { return mRootFolder; }; inline const std::string& getName() const { return mName; } inline const std::string& getFullName() const { return mFullName; } - inline const std::string& getStartPath() const { return mStartPath; } - inline const std::vector& getExtensions() const { return mSearchExtensions; } + inline const std::string& getStartPath() const { return mEnvData->mStartPath; } + inline const std::vector& getExtensions() const { return mEnvData->mSearchExtensions; } inline const std::string& getThemeFolder() const { return mThemeFolder; } - - inline const std::vector& getPlatformIds() const { return mPlatformIds; } - inline bool hasPlatformId(PlatformIds::PlatformId id) { return std::find(mPlatformIds.begin(), mPlatformIds.end(), id) != mPlatformIds.end(); } + inline SystemEnvironmentData* getSystemEnvData() const { return mEnvData; } + inline const std::vector& getPlatformIds() const { return mEnvData->mPlatformIds; } + inline bool hasPlatformId(PlatformIds::PlatformId id) { if (!mEnvData) return false; return std::find(mEnvData->mPlatformIds.begin(), mEnvData->mPlatformIds.end(), id) != mEnvData->mPlatformIds.end(); } inline const std::shared_ptr& getTheme() const { return mTheme; } @@ -35,8 +43,6 @@ class SystemData unsigned int getGameCount() const; unsigned int getDisplayedGameCount() const; - void launchGame(Window* window, FileData* game); - static void deleteSystems(); static bool loadConfig(); //Load the system config file at getConfigPath(). Returns true if no errors were encountered. An example will be written if the file doesn't exist. static void writeExampleConfig(const std::string& path); @@ -46,7 +52,8 @@ class SystemData inline std::vector::const_iterator getIterator() const { return std::find(sSystemVector.begin(), sSystemVector.end(), this); }; inline std::vector::const_reverse_iterator getRevIterator() const { return std::find(sSystemVector.rbegin(), sSystemVector.rend(), this); }; - + inline bool isCollection() { return mIsCollectionSystem; }; + inline bool isGameSystem() { return mIsGameSystem; } inline SystemData* getNext() const { auto it = getIterator(); @@ -63,22 +70,25 @@ class SystemData return *it; } + static SystemData* getRandomSystem(); + FileData* getRandomGame(); + // Load or re-load theme. void loadTheme(); FileFilterIndex* getIndex() { return mFilterIndex; }; private: + bool mIsCollectionSystem; + bool mIsGameSystem; std::string mName; std::string mFullName; - std::string mStartPath; - std::vector mSearchExtensions; - std::string mLaunchCommand; - std::vector mPlatformIds; + SystemEnvironmentData* mEnvData; std::string mThemeFolder; std::shared_ptr mTheme; void populateFolder(FileData* folder); + void setIsGameSystemStatus(); FileFilterIndex* mFilterIndex; diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 242d3ef9c1..6136e6d16c 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -148,23 +148,26 @@ void SystemScreenSaver::countVideos() std::vector:: iterator it; for (it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); ++it) { - pugi::xml_document doc; - pugi::xml_node root; - std::string xmlReadPath = (*it)->getGamelistPath(false); - - if(boost::filesystem::exists(xmlReadPath)) + if (!(*it)->isCollection()) { - pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); - if (!result) - continue; - root = doc.child("gameList"); - if (!root) - continue; - for(pugi::xml_node fileNode = root.child("game"); fileNode; fileNode = fileNode.next_sibling("game")) + pugi::xml_document doc; + pugi::xml_node root; + std::string xmlReadPath = (*it)->getGamelistPath(false); + + if(boost::filesystem::exists(xmlReadPath)) { - pugi::xml_node videoNode = fileNode.child("video"); - if (videoNode) - ++mVideoCount; + pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); + if (!result) + continue; + root = doc.child("gameList"); + if (!root) + continue; + for(pugi::xml_node fileNode = root.child("game"); fileNode; fileNode = fileNode.next_sibling("game")) + { + pugi::xml_node videoNode = fileNode.child("video"); + if (videoNode) + ++mVideoCount; + } } } } diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.cpp b/es-app/src/guis/GuiCollectionSystemsOptions.cpp new file mode 100644 index 0000000000..23833a1143 --- /dev/null +++ b/es-app/src/guis/GuiCollectionSystemsOptions.cpp @@ -0,0 +1,105 @@ +#include "guis/GuiCollectionSystemsOptions.h" +#include "guis/GuiMsgBox.h" +#include "Settings.h" +#include "views/ViewController.h" + +#include "components/TextComponent.h" +#include "components/OptionListComponent.h" + +GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(Window* window) : GuiComponent(window), mMenu(window, "GAME COLLECTION SETTINGS") +{ + initializeMenu(); +} + +void GuiCollectionSystemsOptions::initializeMenu() +{ + addChild(&mMenu); + + // get virtual systems + + addSystemsToMenu(); + + mMenu.addButton("BACK", "back", std::bind(&GuiCollectionSystemsOptions::applySettings, this)); + + mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); +} + +GuiCollectionSystemsOptions::~GuiCollectionSystemsOptions() +{ + //mSystemOptions.clear(); +} + +void GuiCollectionSystemsOptions::addSystemsToMenu() +{ + + std::map vSystems = CollectionSystemManager::get()->getCollectionSystems(); + + autoOptionList = std::make_shared< OptionListComponent >(mWindow, "SELECT COLLECTIONS", true); + + // add Systems + ComponentListRow row; + + for(std::map::iterator it = vSystems.begin() ; it != vSystems.end() ; it++ ) + { + autoOptionList->add(it->second.decl.longName, it->second.decl.name, it->second.isEnabled); + } + mMenu.addWithLabel("AUTOMATIC COLLECTIONS", autoOptionList); +} + +void GuiCollectionSystemsOptions::applySettings() +{ + std::string out = commaStringToVector(autoOptionList->getSelectedObjects()); + std::string prev = Settings::getInstance()->getString("CollectionSystemsAuto"); + if (out != "" && !CollectionSystemManager::get()->isThemeAutoCompatible()) + { + mWindow->pushGui(new GuiMsgBox(mWindow, + "Your theme does not support game collections. Please update your theme, or ensure that you use a theme that contains the folders:\n\n• auto-favorites\n• auto-lastplayed\n• auto-allgames\n\nDo you still want to enable collections?", + "YES", [this, out, prev] { + if (prev != out) + { + updateSettings(out); + } + delete this; }, + "NO", [this] { delete this; })); + } + else + { + if (prev != out) + { + updateSettings(out); + } + delete this; + } +} + +void GuiCollectionSystemsOptions::updateSettings(std::string newSettings) +{ + Settings::getInstance()->setString("CollectionSystemsAuto", newSettings); + Settings::getInstance()->saveFile(); + CollectionSystemManager::get()->loadEnabledListFromSettings(); + CollectionSystemManager::get()->updateSystemsList(); + ViewController::get()->goToStart(); + ViewController::get()->reloadAll(); +} + +bool GuiCollectionSystemsOptions::input(InputConfig* config, Input input) +{ + bool consumed = GuiComponent::input(config, input); + if(consumed) + return true; + + if(config->isMappedTo("b", input) && input.value != 0) + { + applySettings(); + } + + + return false; +} + +std::vector GuiCollectionSystemsOptions::getHelpPrompts() +{ + std::vector prompts = mMenu.getHelpPrompts(); + prompts.push_back(HelpPrompt("b", "back")); + return prompts; +} diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.h b/es-app/src/guis/GuiCollectionSystemsOptions.h new file mode 100644 index 0000000000..739aecd1b2 --- /dev/null +++ b/es-app/src/guis/GuiCollectionSystemsOptions.h @@ -0,0 +1,31 @@ +#pragma once + +#include "GuiComponent.h" +#include "SystemData.h" +#include "components/MenuComponent.h" +#include "CollectionSystemManager.h" +#include "Log.h" + + +template +class OptionListComponent; + + +class GuiCollectionSystemsOptions : public GuiComponent +{ +public: + GuiCollectionSystemsOptions(Window* window); + ~GuiCollectionSystemsOptions(); + bool input(InputConfig* config, Input input) override; + + virtual std::vector getHelpPrompts() override; + +private: + void initializeMenu(); + void applySettings(); + void addSystemsToMenu(); + void updateSettings(std::string newSettings); + std::shared_ptr< OptionListComponent > autoOptionList; + MenuComponent mMenu; + SystemData* mSystem; +}; diff --git a/es-app/src/guis/GuiFastSelect.cpp b/es-app/src/guis/GuiFastSelect.cpp index 31db350414..75b7fbe62b 100644 --- a/es-app/src/guis/GuiFastSelect.cpp +++ b/es-app/src/guis/GuiFastSelect.cpp @@ -145,7 +145,7 @@ void GuiFastSelect::updateGameListCursor() // only skip by letter when the sort mode is alphabetical const FileData::SortType& sort = FileSorts::SortTypes.at(mSortId); - if(sort.comparisonFunction != &FileSorts::compareFileName) + if(sort.comparisonFunction != &FileSorts::compareName) return; // find the first entry in the list that either exactly matches our target letter or is beyond our target letter diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index d3afd0077a..e8f579f757 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -2,6 +2,7 @@ #include "GuiMetaDataEd.h" #include "views/gamelist/IGameListView.h" #include "views/ViewController.h" +#include "CollectionSystemManager.h" GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : GuiComponent(window), mSystem(system), mMenu(window, "OPTIONS"), fromPlaceholder(false), mFiltersChanged(false) @@ -122,7 +123,8 @@ void GuiGamelistOptions::openGamelistFilter() void GuiGamelistOptions::openMetaDataEd() { // open metadata editor - FileData* file = getGamelist()->getCursor(); + // get the FileData that hosts the original metadata + FileData* file = getGamelist()->getCursor()->getSourceFileData(); ScraperSearchParams p; p.game = file; p.system = file->getSystem(); @@ -136,12 +138,13 @@ void GuiGamelistOptions::openMetaDataEd() else { deleteBtnFunc = [this, file] { - getGamelist()->remove(file); + CollectionSystemManager::get()->deleteCollectionFiles(file); + ViewController::get()->getGameListView(file->getSystem()).get()->remove(file, true); }; } mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), - std::bind(&IGameListView::onFileChanged, getGamelist(), file, FILE_METADATA_CHANGED), deleteBtnFunc)); + std::bind(&IGameListView::onFileChanged, ViewController::get()->getGameListView(file->getSystem()).get(), file, FILE_METADATA_CHANGED), deleteBtnFunc)); } void GuiGamelistOptions::jumpToLetter() diff --git a/es-app/src/guis/GuiInfoPopup.cpp b/es-app/src/guis/GuiInfoPopup.cpp new file mode 100644 index 0000000000..7fd78fd183 --- /dev/null +++ b/es-app/src/guis/GuiInfoPopup.cpp @@ -0,0 +1,114 @@ +#include "guis/GuiInfoPopup.h" +#include "Renderer.h" +#include "components/TextComponent.h" +#include "Log.h" + +GuiInfoPopup::GuiInfoPopup(Window* window, std::string message, int duration) : + GuiComponent(window), mMessage(message), mDuration(duration), running(true) +{ + mFrame = new NinePatchComponent(window); + float maxWidth = Renderer::getScreenWidth() * 0.9f; + float maxHeight = Renderer::getScreenHeight() * 0.2f; + + std::shared_ptr s = std::make_shared(mWindow, + "", + Font::get(FONT_SIZE_MINI), + 0x444444FF, + ALIGN_CENTER); + + // we do this to force the text container to resize and return an actual expected popup size + s->setSize(0,0); + s->setText(message); + mSize = s->getSize(); + + // confirm the size isn't larger than the screen width, otherwise cap it + if (mSize.x() > maxWidth) { + s->setSize(maxWidth, mSize[1]); + mSize[0] = maxWidth; + } + if (mSize.y() > maxHeight) { + s->setSize(mSize[0], maxHeight); + mSize[1] = maxHeight; + } + + // add a padding to the box + int paddingX = Renderer::getScreenWidth() * 0.03f; + int paddingY = Renderer::getScreenHeight() * 0.02f; + mSize[0] = mSize.x() + paddingX; + mSize[1] = mSize.y() + paddingY; + + float posX = Renderer::getScreenWidth()*0.5f - mSize.x()*0.5f; + float posY = Renderer::getScreenHeight() * 0.02f; + + setPosition(posX, posY, 0); + + mFrame->setImagePath(":/frame.png"); + mFrame->fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + addChild(mFrame); + + // we only init the actual time when we first start to render + mStartTime = 0; + + mGrid = new ComponentGrid(window, Eigen::Vector2i(1, 3)); + mGrid->setSize(mSize); + mGrid->setEntry(s, Eigen::Vector2i(0, 1), false, true); + addChild(mGrid); +} + +GuiInfoPopup::~GuiInfoPopup() +{ + +} + +void GuiInfoPopup::render(const Eigen::Affine3f& parentTrans) +{ + // we use identity as we want to render on a specific window position, not on the view + Eigen::Affine3f trans = getTransform() * Eigen::Affine3f::Identity(); + if(running && updateState()) + { + // if we're still supposed to be rendering it + Renderer::setMatrix(trans); + renderChildren(trans); + } +} + +bool GuiInfoPopup::updateState() +{ + int curTime = SDL_GetTicks(); + + // we only init the actual time when we first start to render + if(mStartTime == 0) + { + mStartTime = curTime; + } + + // compute fade in effect + if (curTime - mStartTime > mDuration) + { + // we're past the popup duration, no need to render + running = false; + return false; + } + else if (curTime < mStartTime) { + // if SDL reset + running = false; + return false; + } + else if (curTime - mStartTime <= 500) { + alpha = ((curTime - mStartTime)*255/500); + } + else if (curTime - mStartTime < mDuration - 500) + { + alpha = 255; + } + else + { + alpha = ((-(curTime - mStartTime - mDuration)*255)/500); + } + mGrid->setOpacity(alpha); + + // apply fade in effect to popup frame + mFrame->setEdgeColor(0xFFFFFF00 | (unsigned char)(alpha)); + mFrame->setCenterColor(0xFFFFFF00 | (unsigned char)(alpha)); + return true; +} \ No newline at end of file diff --git a/es-app/src/guis/GuiInfoPopup.h b/es-app/src/guis/GuiInfoPopup.h new file mode 100644 index 0000000000..6b899680ed --- /dev/null +++ b/es-app/src/guis/GuiInfoPopup.h @@ -0,0 +1,27 @@ +#pragma once + +#include "GuiComponent.h" +#include "components/NinePatchComponent.h" +#include "components/ComponentGrid.h" +#include "Window.h" +#include "Log.h" + + + +class GuiInfoPopup : public GuiComponent, public Window::InfoPopup +{ +public: + GuiInfoPopup(Window* window, std::string message, int duration); + ~GuiInfoPopup(); + void render(const Eigen::Affine3f& parentTrans) override; + inline void stop() { running = false; }; +private: + std::string mMessage; + int mDuration; + int alpha; + bool updateState(); + int mStartTime; + ComponentGrid* mGrid; + NinePatchComponent* mFrame; + bool running; +}; diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 43ced83309..f645b8ba96 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -7,6 +7,7 @@ #include "guis/GuiMsgBox.h" #include "guis/GuiSettings.h" #include "guis/GuiScreensaverOptions.h" +#include "guis/GuiCollectionSystemsOptions.h" #include "guis/GuiScraperStart.h" #include "guis/GuiDetectDevice.h" #include "views/ViewController.h" @@ -238,6 +239,9 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN mWindow->pushGui(s); }); + addEntry("GAME COLLECTION SETTINGS", 0x777777FF, true, + [this] { openCollectionSystemSettings(); + }); addEntry("OTHER SETTINGS", 0x777777FF, true, [this] { auto s = new GuiSettings(mWindow, "OTHER SETTINGS"); @@ -364,13 +368,20 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN addChild(&mMenu); addChild(&mVersion); + /*int menuWidth = Renderer::getScreenWidth() * 0.4f; + int menuHeight = Renderer::getScreenHeight() * 0.74f; + mMenu.setSize(menuWidth, menuHeight);*/ + setSize(mMenu.getSize()); - setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, Renderer::getScreenHeight() * 0.15f); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, Renderer::getScreenHeight() * 0.13f); } void GuiMenu::openScreensaverOptions() { - GuiScreensaverOptions* ggf = new GuiScreensaverOptions(mWindow, "VIDEO SCREENSAVER"); - mWindow->pushGui(ggf); + mWindow->pushGui(new GuiScreensaverOptions(mWindow, "VIDEO SCREENSAVER")); +} + +void GuiMenu::openCollectionSystemSettings() { + mWindow->pushGui(new GuiCollectionSystemsOptions(mWindow)); } void GuiMenu::onSizeChanged() diff --git a/es-app/src/guis/GuiMenu.h b/es-app/src/guis/GuiMenu.h index 42862d24af..8d99f14e46 100644 --- a/es-app/src/guis/GuiMenu.h +++ b/es-app/src/guis/GuiMenu.h @@ -17,6 +17,7 @@ class GuiMenu : public GuiComponent private: void addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func); void openScreensaverOptions(); + void openCollectionSystemSettings(); MenuComponent mMenu; TextComponent mVersion; }; diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index 586b3279f2..e6a722ce00 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -11,6 +11,7 @@ #include "components/TextEditComponent.h" #include "components/DateTimeComponent.h" #include "components/RatingComponent.h" +#include "components/SwitchComponent.h" #include "guis/GuiTextEditPopup.h" using namespace Eigen; @@ -59,6 +60,12 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector switch(iter->type) { + case MD_BOOL: + { + ed = std::make_shared(window); + row.addElement(ed, false, true); + break; + } case MD_RATING: { ed = std::make_shared(window); @@ -177,7 +184,6 @@ void GuiMetaDataEd::save() { if(mMetaDataDecl.at(i).isStatistic) continue; - mMetaData->set(mMetaDataDecl.at(i).key, mEditors.at(i)->getValue()); } @@ -186,6 +192,9 @@ void GuiMetaDataEd::save() if(mSavedCallback) mSavedCallback(); + + // update respective Collection Entries + CollectionSystemManager::get()->updateCollectionSystems(mScraperParams.game); } void GuiMetaDataEd::fetch() diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 0128089be1..120febc25f 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -225,6 +225,7 @@ int main(int argc, char* argv[]) Window window; SystemScreenSaver screensaver(&window); ViewController::init(&window); + CollectionSystemManager::init(&window); window.pushGui(ViewController::get()); if(!scrape_cmdline) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 3252c8a5fd..2646a1d36e 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -149,7 +149,10 @@ bool SystemView::input(InputConfig* config, Input input) } if (config->isMappedTo("x", input)) { - ViewController::get()->goToRandomGame(); + // get random system + // go to system + setCursor(SystemData::getRandomSystem()); + //ViewController::get()->goToRandomGame(); return true; } }else{ @@ -216,7 +219,7 @@ void SystemView::onCursorChanged(const CursorState& state) setAnimation(infoFadeOut, 0, [this, gameCount] { std::stringstream ss; - if (getSelected()->getName() == "retropie") + if (!getSelected()->isGameSystem()) ss << "CONFIGURATION"; // only display a game count if there are at least 2 games else if(gameCount > 1) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 7e3c242b6b..625aadf2f8 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -124,7 +124,7 @@ void ViewController::goToRandomGame() unsigned int total = 0; for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { - if ((*it)->getName() != "retropie") + if ((*it)->isGameSystem()) total += (*it)->getDisplayedGameCount(); } @@ -133,7 +133,7 @@ void ViewController::goToRandomGame() for (auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { - if ((*it)->getName() != "retropie") + if ((*it)->isGameSystem()) { if ((target - (int)(*it)->getDisplayedGameCount()) >= 0) { @@ -228,6 +228,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) center += mCurrentView->getPosition(); stopAnimation(1); // make sure the fade in isn't still playing + mWindow->stopInfoPopup(); // make sure we disable any existing info popup mLockInput = true; std::string transition_style = Settings::getInstance()->getString("TransitionStyle"); @@ -241,7 +242,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) }; setAnimation(new LambdaAnimation(fadeFunc, 800), 0, [this, game, fadeFunc] { - game->getSystem()->launchGame(mWindow, game); + game->launchGame(mWindow); mLockInput = false; setAnimation(new LambdaAnimation(fadeFunc, 800), 0, nullptr, true); this->onFileChanged(game, FILE_METADATA_CHANGED); @@ -250,7 +251,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) // move camera to zoom in on center + fade out, launch game, come back in setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 1500), 0, [this, origCamera, center, game] { - game->getSystem()->launchGame(mWindow, game); + game->launchGame(mWindow); mCamera = origCamera; mLockInput = false; setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), 0, nullptr, true); @@ -259,7 +260,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) } else { setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 10), 0, [this, origCamera, center, game] { - game->getSystem()->launchGame(mWindow, game); + game->launchGame(mWindow); mCamera = origCamera; mLockInput = false; setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 10), 0, nullptr, true); @@ -436,14 +437,12 @@ void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) if(reloadTheme) system->loadTheme(); - std::shared_ptr newView = getGameListView(system); // to counter having come from a placeholder if (!cursor->isPlaceHolder()) { newView->setCursor(cursor); } - if(isCurrent) mCurrentView = newView; diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index d7fe8ec2bf..1202da1186 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -53,9 +53,7 @@ void BasicGameListView::populateList(const std::vector& files) } else { - // empty list - add a placeholder - FileData* placeholder = new FileData(PLACEHOLDER, "", this->mRoot->getSystem()); - mList.add(placeholder->getName(), placeholder, (placeholder->getType() == PLACEHOLDER)); + addPlaceholder(); } } @@ -66,9 +64,7 @@ FileData* BasicGameListView::getCursor() void BasicGameListView::setCursor(FileData* cursor) { - if (cursor->isPlaceHolder()) - return; - if(!mList.setCursor(cursor)) + if(!mList.setCursor(cursor) && (!cursor->isPlaceHolder())) { populateList(cursor->getParent()->getChildrenListToDisplay()); mList.setCursor(cursor); @@ -95,17 +91,26 @@ void BasicGameListView::setCursor(FileData* cursor) } } +void BasicGameListView::addPlaceholder() +{ + // empty list - add a placeholder + FileData* placeholder = new FileData(PLACEHOLDER, "", this->mRoot->getSystem()->getSystemEnvData(), this->mRoot->getSystem()); + mList.add(placeholder->getName(), placeholder, (placeholder->getType() == PLACEHOLDER)); +} + void BasicGameListView::launch(FileData* game) { ViewController::get()->launch(game); } -void BasicGameListView::remove(FileData *game) +void BasicGameListView::remove(FileData *game, bool deleteFile) { - boost::filesystem::remove(game->getPath()); // actually delete the file on the filesystem + if (deleteFile) + boost::filesystem::remove(game->getPath()); // actually delete the file on the filesystem + FileData* parent = game->getParent(); if (getCursor() == game) // Select next element in list, or prev if none { - std::vector siblings = game->getParent()->getChildren(); + std::vector siblings = parent->getChildrenListToDisplay(); auto gameIter = std::find(siblings.begin(), siblings.end(), game); auto gamePos = std::distance(siblings.begin(), gameIter); if (gameIter != siblings.end()) @@ -118,8 +123,13 @@ void BasicGameListView::remove(FileData *game) } } } + mList.remove(game); + if(mList.size() == 0) + { + addPlaceholder(); + } delete game; // remove before repopulating (removes from parent) - onFileChanged(game, FILE_REMOVED); // update the view, with game removed + onFileChanged(parent, FILE_REMOVED); // update the view, with game removed } std::vector BasicGameListView::getHelpPrompts() @@ -133,5 +143,7 @@ std::vector BasicGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("select", "options")); prompts.push_back(HelpPrompt("x", "random")); + if(Settings::getInstance()->getString("CollectionSystemsAuto").find("favorites") != std::string::npos && mRoot->getSystem()->isGameSystem()) + prompts.push_back(HelpPrompt("y", "favorite")); return prompts; } diff --git a/es-app/src/views/gamelist/BasicGameListView.h b/es-app/src/views/gamelist/BasicGameListView.h index 00998cd8c4..82a15a19a1 100644 --- a/es-app/src/views/gamelist/BasicGameListView.h +++ b/es-app/src/views/gamelist/BasicGameListView.h @@ -23,7 +23,8 @@ class BasicGameListView : public ISimpleGameListView protected: virtual void populateList(const std::vector& files) override; - virtual void remove(FileData* game) override; + virtual void remove(FileData* game, bool deleteFile) override; + virtual void addPlaceholder(); TextListComponent mList; }; diff --git a/es-app/src/views/gamelist/IGameListView.h b/es-app/src/views/gamelist/IGameListView.h index eb7610790b..23f1bd78bd 100644 --- a/es-app/src/views/gamelist/IGameListView.h +++ b/es-app/src/views/gamelist/IGameListView.h @@ -32,7 +32,7 @@ class IGameListView : public GuiComponent virtual void setCursor(FileData*) = 0; virtual bool input(InputConfig* config, Input input) override; - virtual void remove(FileData* game) = 0; + virtual void remove(FileData* game, bool deleteFile) = 0; virtual const char* getName() const = 0; virtual void launch(FileData* game) = 0; diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 617b613504..3b468f4458 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -3,7 +3,9 @@ #include "Window.h" #include "views/ViewController.h" #include "Sound.h" +#include "Log.h" #include "Settings.h" +#include "CollectionSystemManager.h" ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGameListView(window, root), mHeaderText(window), mHeaderImage(window), mBackground(window) @@ -127,10 +129,31 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) } }else if (config->isMappedTo("x", input)) { - ViewController::get()->goToRandomGame(); + // go to random system game + setCursor(mRoot->getSystem()->getRandomGame()); + //ViewController::get()->goToRandomGame(); return true; + }else if (config->isMappedTo("y", input)) + { + if(Settings::getInstance()->getString("CollectionSystemsAuto").find("favorites") != std::string::npos && mRoot->getSystem()->isGameSystem()) + { + if(CollectionSystemManager::get()->toggleGameInCollection(getCursor(), "favorites")) + { + return true; + } + } } } return IGameListView::input(config, input); } + + + + + + + + + + diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 3f88c8758e..4bd3a18b7d 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -95,6 +95,7 @@ void Settings::setDefaults() mBoolMap["CaptionsCompatibility"] = true; // Audio out device for Video playback using OMX player. mStringMap["OMXAudioDev"] = "both"; + mStringMap["CollectionSystemsAuto"] = ""; // Audio out device for volume control #ifdef _RPI_ diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index 8d88104252..3a323ff0b8 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -1,6 +1,7 @@ #include "Util.h" #include "resources/ResourceManager.h" #include "platform.h" +#include namespace fs = boost::filesystem; @@ -208,3 +209,103 @@ boost::posix_time::ptime string_to_ptime(const std::string& str, const std::stri return time; } + +std::string strreplace(std::string str, const std::string& replace, const std::string& with) +{ + size_t pos; + while((pos = str.find(replace)) != std::string::npos) + str = str.replace(pos, replace.length(), with.c_str(), with.length()); + + return str; +} + +// plaform-specific escape path function +// on windows: just puts the path in quotes +// everything else: assume bash and escape special characters with backslashes +std::string escapePath(const boost::filesystem::path& path) +{ +#ifdef WIN32 + // windows escapes stuff by just putting everything in quotes + return '"' + fs::path(path).make_preferred().string() + '"'; +#else + // a quick and dirty way to insert a backslash before most characters that would mess up a bash path + std::string pathStr = path.string(); + + const char* invalidChars = " '\"\\!$^&*(){}[]?;<>"; + for(unsigned int i = 0; i < pathStr.length(); i++) + { + char c; + unsigned int charNum = 0; + do { + c = invalidChars[charNum]; + if(pathStr[i] == c) + { + pathStr.insert(i, "\\"); + i++; + break; + } + charNum++; + } while(c != '\0'); + } + + return pathStr; +#endif +} + +std::string removeParenthesis(const std::string& str) +{ + // remove anything in parenthesis or brackets + // should be roughly equivalent to the regex replace "\((.*)\)|\[(.*)\]" with "" + // I would love to just use regex, but it's not worth pulling in another boost lib for one function that is used once + + std::string ret = str; + size_t start, end; + + static const int NUM_TO_REPLACE = 2; + static const char toReplace[NUM_TO_REPLACE*2] = { '(', ')', '[', ']' }; + + bool done = false; + while(!done) + { + done = true; + for(int i = 0; i < NUM_TO_REPLACE; i++) + { + end = ret.find_first_of(toReplace[i*2+1]); + start = ret.find_last_of(toReplace[i*2], end); + + if(start != std::string::npos && end != std::string::npos) + { + ret.erase(start, end - start + 1); + done = false; + } + } + } + + // also strip whitespace + end = ret.find_last_not_of(' '); + if(end != std::string::npos) + end++; + + ret = ret.substr(0, end); + + return ret; +} + +std::vector commaStringToVector(std::string commaString) +{ + // from a comma separated string, get a vector of strings + std::vector strs; + boost::split(strs, commaString, boost::is_any_of(",")); + return strs; +} + +std::string commaStringToVector(std::vector stringVector) +{ + std::string out = ""; + // from a vector of system names get comma separated string + for(std::vector::iterator it = stringVector.begin() ; it != stringVector.end() ; it++ ) + { + out = out + (out == "" ? "" : ",") + (*it); + } + return out; +} \ No newline at end of file diff --git a/es-core/src/Util.h b/es-core/src/Util.h index d26aee08bb..f75d152148 100644 --- a/es-core/src/Util.h +++ b/es-core/src/Util.h @@ -34,3 +34,16 @@ boost::filesystem::path makeRelativePath(const boost::filesystem::path& path, co boost::filesystem::path resolvePath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool allowHome); boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt = "%Y%m%dT%H%M%S%F%q"); + +std::string escapePath(const boost::filesystem::path& path); + +std::string strreplace(std::string str, const std::string& replace, const std::string& with); + +// Remove (.*) and [.*] from str +std::string removeParenthesis(const std::string& str); + +// split a comma-separated string into a vector +std::vector commaStringToVector(std::string commaString); + +// turn a vector of strings into a comma-separated string +std::string commaStringToVector(std::vector stringVector); \ No newline at end of file diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 4101df0df6..957a7e1b25 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -10,7 +10,7 @@ #include "components/ImageComponent.h" Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), - mAllowSleep(true), mSleeping(false), mTimeSinceLastInput(0), mScreenSaver(NULL), mRenderScreenSaver(false) + mAllowSleep(true), mSleeping(false), mTimeSinceLastInput(0), mScreenSaver(NULL), mRenderScreenSaver(false), mInfoPopup(NULL) { mHelp = new HelpComponent(this); mBackgroundOverlay = new ImageComponent(this); @@ -129,7 +129,7 @@ void Window::input(InputConfig* config, Input input) } return; } - else if(config->isMappedTo("start", input)) + else if(config->isMappedTo("start", input) && input.value != 0) { // launch game! cancelScreenSaver(); @@ -138,10 +138,10 @@ void Window::input(InputConfig* config, Input input) mSleeping = true; } } - else if(input.value != 0) + /*else if(input.value != 0) { return; - } + }*/ } } @@ -258,6 +258,11 @@ void Window::render() // Always call the screensaver render function regardless of whether the screensaver is active // or not because it may perform a fade on transition renderScreenSaver(); + + if(!mRenderScreenSaver && mInfoPopup) + { + mInfoPopup->render(transform); + } if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0) { diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 7b92605e22..75b78e6c5a 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -25,6 +25,13 @@ class Window virtual void launchGame() = 0; }; + class InfoPopup { + public: + virtual void render(const Eigen::Affine3f& parentTrans) = 0; + virtual void stop() = 0; + virtual ~InfoPopup() {}; + }; + Window(); ~Window(); @@ -53,6 +60,8 @@ class Window void setHelpPrompts(const std::vector& prompts, const HelpStyle& style); void setScreenSaver(ScreenSaver* screenSaver) { mScreenSaver = screenSaver; } + void setInfoPopup(InfoPopup* infoPopup) { delete mInfoPopup; mInfoPopup = infoPopup; } + inline void stopInfoPopup() { if (mInfoPopup) mInfoPopup->stop(); }; void startScreenSaver(); void cancelScreenSaver(); @@ -68,6 +77,7 @@ class Window HelpComponent* mHelp; ImageComponent* mBackgroundOverlay; ScreenSaver* mScreenSaver; + InfoPopup* mInfoPopup; bool mRenderScreenSaver; std::vector mGuiStack; diff --git a/es-core/src/components/MenuComponent.cpp b/es-core/src/components/MenuComponent.cpp index 589bc6fab5..58462dd9c9 100644 --- a/es-core/src/components/MenuComponent.cpp +++ b/es-core/src/components/MenuComponent.cpp @@ -46,7 +46,7 @@ float MenuComponent::getButtonGridHeight() const void MenuComponent::updateSize() { - const float maxHeight = Renderer::getScreenHeight() * 0.7f; + const float maxHeight = Renderer::getScreenHeight() * 0.75f; float height = TITLE_HEIGHT + mList->getTotalRowHeight() + getButtonGridHeight() + 2; if(height > maxHeight) { diff --git a/es-core/src/components/SwitchComponent.cpp b/es-core/src/components/SwitchComponent.cpp index 07b425b259..c74a751b52 100644 --- a/es-core/src/components/SwitchComponent.cpp +++ b/es-core/src/components/SwitchComponent.cpp @@ -47,6 +47,23 @@ void SwitchComponent::setState(bool state) onStateChanged(); } +std::string SwitchComponent::getValue() const +{ + return mState ? "true" : "false"; +} + +void SwitchComponent::setValue(const std::string& statestring) +{ + if (statestring == "true") + { + mState = true; + }else + { + mState = false; + } + onStateChanged(); +} + void SwitchComponent::onStateChanged() { mImage.setImage(mState ? ":/on.svg" : ":/off.svg"); diff --git a/es-core/src/components/SwitchComponent.h b/es-core/src/components/SwitchComponent.h index e173762a74..46096b35a6 100644 --- a/es-core/src/components/SwitchComponent.h +++ b/es-core/src/components/SwitchComponent.h @@ -16,6 +16,8 @@ class SwitchComponent : public GuiComponent bool getState() const; void setState(bool state); + std::string getValue() const; + void setValue(const std::string& statestring) override; virtual std::vector getHelpPrompts() override; diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index daaecbead6..fcd45f50a2 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -11,6 +11,7 @@ class TextCache; +#define FONT_SIZE_MINI ((unsigned int)(0.030f * Renderer::getScreenHeight())) #define FONT_SIZE_SMALL ((unsigned int)(0.035f * Renderer::getScreenHeight())) #define FONT_SIZE_MEDIUM ((unsigned int)(0.045f * Renderer::getScreenHeight())) #define FONT_SIZE_LARGE ((unsigned int)(0.085f * Renderer::getScreenHeight())) From 535a665fa669cd7c4fc4fc70f93ed45dcf406046 Mon Sep 17 00:00:00 2001 From: pjft Date: Fri, 7 Jul 2017 20:42:30 +0100 Subject: [PATCH 127/603] Moving slider entries in the menus back to the top MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As some controllers have trouble navigating the menus when sliders are not on top. The component hasn’t been changed since Aloshi’s time, so this probably has been around since ever. Alas, I cannot reproduce it with my controller, so this is the best I can do for the time being. --- es-app/src/guis/GuiMenu.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index d15ce18976..361cf89e7a 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -70,6 +70,12 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN [this] { auto s = new GuiSettings(mWindow, "SOUND SETTINGS"); + // volume + auto volume = std::make_shared(mWindow, 0.f, 100.f, 1.f, "%"); + volume->setValue((float)VolumeControl::getInstance()->getVolume()); + s->addWithLabel("SYSTEM VOLUME", volume); + s->addSaveFunc([volume] { VolumeControl::getInstance()->setVolume((int)round(volume->getValue())); }); + #ifdef _RPI_ // volume control device auto vol_dev = std::make_shared< OptionListComponent >(mWindow, "AUDIO DEVICE", false); @@ -87,12 +93,6 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN }); #endif - // volume - auto volume = std::make_shared(mWindow, 0.f, 100.f, 1.f, "%"); - volume->setValue((float)VolumeControl::getInstance()->getVolume()); - s->addWithLabel("SYSTEM VOLUME", volume); - s->addSaveFunc([volume] { VolumeControl::getInstance()->setVolume((int)round(volume->getValue())); }); - // disable sounds auto sounds_enabled = std::make_shared(mWindow); sounds_enabled->setState(Settings::getInstance()->getBool("EnableSounds")); @@ -247,6 +247,12 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN [this] { auto s = new GuiSettings(mWindow, "OTHER SETTINGS"); + // maximum vram + auto max_vram = std::make_shared(mWindow, 0.f, 1000.f, 10.f, "Mb"); + max_vram->setValue((float)(Settings::getInstance()->getInt("MaxVRAM"))); + s->addWithLabel("VRAM LIMIT", max_vram); + s->addSaveFunc([max_vram] { Settings::getInstance()->setInt("MaxVRAM", (int)round(max_vram->getValue())); }); + // gamelists auto save_gamelists = std::make_shared(mWindow); save_gamelists->setState(Settings::getInstance()->getBool("SaveGamelistsOnExit")); @@ -278,12 +284,6 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN #endif - // maximum vram - auto max_vram = std::make_shared(mWindow, 0.f, 1000.f, 10.f, "Mb"); - max_vram->setValue((float)(Settings::getInstance()->getInt("MaxVRAM"))); - s->addWithLabel("VRAM LIMIT", max_vram); - s->addSaveFunc([max_vram] { Settings::getInstance()->setInt("MaxVRAM", (int)round(max_vram->getValue())); }); - // framerate auto framerate = std::make_shared(mWindow); framerate->setState(Settings::getInstance()->getBool("DrawFramerate")); From 92fbec47c21609261729e48e75ba4c997ee02c0e Mon Sep 17 00:00:00 2001 From: pjft Date: Fri, 7 Jul 2017 20:48:50 +0100 Subject: [PATCH 128/603] Fix for lack of zoom transition on video view for systems without marquees --- .../src/views/gamelist/VideoGameListView.cpp | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 09c6bbe7c4..ec139b0fb8 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -320,9 +320,34 @@ void VideoGameListView::updateInfoPanel() void VideoGameListView::launch(FileData* game) { - Eigen::Vector3f target(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0); - if(mMarquee.hasImage()) + float screenWidth = Renderer::getScreenWidth(); + float screenHeight = Renderer::getScreenHeight(); + + Eigen::Vector3f target(screenWidth / 2.0f, screenHeight / 2.0f, 0); + + if(mMarquee.hasImage() && + (mMarquee.getPosition().x() < screenWidth && mMarquee.getPosition().x() > 0.0f && + mMarquee.getPosition().y() < screenHeight && mMarquee.getPosition().y() > 0.0f)) + { + target << mMarquee.getCenter().x(), mMarquee.getCenter().y(), 0; + } + else if(mImage.hasImage() && + (mImage.getPosition().x() < screenWidth && mImage.getPosition().x() > 2.0f && + mImage.getPosition().y() < screenHeight && mImage.getPosition().y() > 2.0f)) + { + target << mImage.getCenter().x(), mImage.getCenter().y(), 0; + } + else if(mHeaderImage.hasImage() && + (mHeaderImage.getPosition().x() < screenWidth && mHeaderImage.getPosition().x() > 0.0f && + mHeaderImage.getPosition().y() < screenHeight && mHeaderImage.getPosition().y() > 0.0f)) + { + target << mHeaderImage.getCenter().x(), mHeaderImage.getCenter().y(), 0; + } + else if(mVideo->getPosition().x() < screenWidth && mVideo->getPosition().x() > 0.0f && + mVideo->getPosition().y() < screenHeight && mVideo->getPosition().y() > 0.0f) + { target << mVideo->getCenter().x(), mVideo->getCenter().y(), 0; + } ViewController::get()->launch(game, target); } From 2decb2b6a48641ecf9e8049713ea9352613bb972 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 8 Jul 2017 18:55:48 +0100 Subject: [PATCH 129/603] bump version to 2.4.0 --- es-app/src/EmulationStation.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 1f21a31953..778bafe1d1 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -3,11 +3,11 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 3 -#define PROGRAM_VERSION_MAINTENANCE 2 -#define PROGRAM_VERSION_STRING "2.3.2rp" +#define PROGRAM_VERSION_MINOR 4 +#define PROGRAM_VERSION_MAINTENANCE 0 +#define PROGRAM_VERSION_STRING "2.4.0rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,3,2\0" +#define RESOURCE_VERSION_STRING "2,4,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From a035433d1df4eb4803d865ef72d9f05792050275 Mon Sep 17 00:00:00 2001 From: pjft Date: Tue, 11 Jul 2017 10:07:44 +0100 Subject: [PATCH 130/603] Fixing random game selection, and aligning menus - Fixing off-by-one error - Update menu alignment --- es-app/src/SystemData.cpp | 7 +++---- es-app/src/guis/GuiGamelistOptions.cpp | 13 ------------- es-app/src/guis/GuiMenu.cpp | 6 +----- 3 files changed, 4 insertions(+), 22 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index e802cbe0bb..b43ddf8053 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -383,13 +383,12 @@ SystemData* SystemData::getRandomSystem() } // get random number in range - int target = std::round(((double)std::rand() / (double)RAND_MAX) * total); - + int target = std::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); for (auto it = sSystemVector.begin(); it != sSystemVector.end(); it++) { if ((*it)->isGameSystem()) { - if (target >= 0) + if (target > 0) { target--; } @@ -406,7 +405,7 @@ FileData* SystemData::getRandomGame() std::vector list = mRootFolder->getFilesRecursive(GAME, true); unsigned int total = list.size(); // get random number in range - int target = std::round(((double)std::rand() / (double)RAND_MAX) * total); + int target = std::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); return list.at(target); } diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 455ba7ef45..9fc36694a4 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -69,19 +69,6 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openGamelistFilter, this)); mMenu.addRow(row); - row.elements.clear(); - row.addElement(std::make_shared(mWindow, "SURPRISE ME!", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.input_handler = [&](InputConfig* config, Input input) { - if (config->isMappedTo("a", input) && input.value) - { - ViewController::get()->goToRandomGame(); - delete this; - return true; - } - return false; - }; - mMenu.addRow(row); - // center the menu setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 6620f97b19..88a972acdb 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -373,12 +373,8 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN addChild(&mMenu); addChild(&mVersion); - /*int menuWidth = Renderer::getScreenWidth() * 0.4f; - int menuHeight = Renderer::getScreenHeight() * 0.74f; - mMenu.setSize(menuWidth, menuHeight);*/ - setSize(mMenu.getSize()); - setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, Renderer::getScreenHeight() * 0.13f); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, Renderer::getScreenHeight() * 0.15f); } void GuiMenu::openScreensaverOptions() { From b28fa2ce9f6a4f9b0d8ad3af7bf09fc008c80d59 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 11 Jul 2017 16:20:03 +0100 Subject: [PATCH 131/603] bump version to 2.4.1 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 778bafe1d1..41d828f4b8 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 4 -#define PROGRAM_VERSION_MAINTENANCE 0 -#define PROGRAM_VERSION_STRING "2.4.0rp" +#define PROGRAM_VERSION_MAINTENANCE 1 +#define PROGRAM_VERSION_STRING "2.4.1rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,4,0\0" +#define RESOURCE_VERSION_STRING "2,4,1\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 45694cf1a4133435a0cd5bd1ddd9ffcccc8a293f Mon Sep 17 00:00:00 2001 From: hex007 Date: Thu, 20 Jul 2017 00:07:02 -0700 Subject: [PATCH 132/603] Power Saver Feature - Change Power Saver (PS) from Other Settings menu - 4 Modes are available : Disabled, Default [default], Enhanced, Instant - All modes work well with Screensavers and Video previews. - PS is disabled while running Videos through VLC. - PS is disabled while Scrapping - Game counts are shown immidiately if in Instant Mode - PS mode defaults if Transitions are changed while in Instant Mode --- es-app/src/components/TextListComponent.h | 2 +- es-app/src/guis/GuiGameScraper.cpp | 3 + es-app/src/guis/GuiMenu.cpp | 52 +++++++++++++++- es-app/src/guis/GuiScraperMulti.cpp | 3 + es-app/src/main.cpp | 61 +++++++++++++------ es-app/src/views/SystemView.cpp | 25 ++++---- es-app/src/views/ViewController.cpp | 2 + es-core/CMakeLists.txt | 2 + es-core/src/PowerSaver.cpp | 44 +++++++++++++ es-core/src/PowerSaver.h | 17 ++++++ es-core/src/Settings.cpp | 1 + .../src/components/ScrollableContainer.cpp | 4 +- es-core/src/components/VideoVlcComponent.cpp | 8 ++- 13 files changed, 182 insertions(+), 42 deletions(-) create mode 100644 es-core/src/PowerSaver.cpp create mode 100644 es-core/src/PowerSaver.h diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index b39dda3ce1..0aa078ac20 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -86,7 +86,7 @@ class TextListComponent : public IList virtual void onCursorChanged(const CursorState& state); private: - static const int MARQUEE_DELAY = 2000; + static const int MARQUEE_DELAY = 1000; static const int MARQUEE_SPEED = 8; static const int MARQUEE_RATE = 1; diff --git a/es-app/src/guis/GuiGameScraper.cpp b/es-app/src/guis/GuiGameScraper.cpp index a54304c774..141d65262d 100644 --- a/es-app/src/guis/GuiGameScraper.cpp +++ b/es-app/src/guis/GuiGameScraper.cpp @@ -6,6 +6,7 @@ #include "scrapers/Scraper.h" #include "Renderer.h" #include "Log.h" +#include "PowerSaver.h" #include "Settings.h" GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc) : GuiComponent(window), @@ -14,6 +15,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mSearchParams(params), mClose(false) { + PowerSaver::setState(false); addChild(&mBox); addChild(&mGrid); @@ -96,6 +98,7 @@ bool GuiGameScraper::input(InputConfig* config, Input input) { if(config->isMappedTo("b", input) && input.value) { + PowerSaver::setState(true); delete this; return true; } diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 88a972acdb..1e8ade6ba4 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -4,6 +4,7 @@ #include "Sound.h" #include "Log.h" #include "Settings.h" +#include "PowerSaver.h" #include "guis/GuiMsgBox.h" #include "guis/GuiSettings.h" #include "guis/GuiScreensaverOptions.h" @@ -175,7 +176,16 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN auto move_carousel = std::make_shared(mWindow); move_carousel->setState(Settings::getInstance()->getBool("MoveCarousel")); s->addWithLabel("CAROUSEL TRANSITIONS", move_carousel); - s->addSaveFunc([move_carousel] { Settings::getInstance()->setBool("MoveCarousel", move_carousel->getState()); }); + s->addSaveFunc([move_carousel] { + if (move_carousel->getState() + && !Settings::getInstance()->getBool("MoveCarousel") + && PowerSaver::ps_instant == PowerSaver::getTimeout()) + { + Settings::getInstance()->setString("PowerSaverMode", "default"); + PowerSaver::init(); + } + Settings::getInstance()->setBool("MoveCarousel", move_carousel->getState()); + }); // transition style auto transition_style = std::make_shared< OptionListComponent >(mWindow, "TRANSITION STYLE", false); @@ -186,7 +196,16 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN for(auto it = transitions.begin(); it != transitions.end(); it++) transition_style->add(*it, *it, Settings::getInstance()->getString("TransitionStyle") == *it); s->addWithLabel("TRANSITION STYLE", transition_style); - s->addSaveFunc([transition_style] { Settings::getInstance()->setString("TransitionStyle", transition_style->getSelected()); }); + s->addSaveFunc([transition_style] { + if (Settings::getInstance()->getString("TransitionStyle") == "instant" + && transition_style->getSelected() != "instant" + && PowerSaver::ps_instant == PowerSaver::getTimeout()) + { + Settings::getInstance()->setString("PowerSaverMode", "default"); + PowerSaver::init(); + } + Settings::getInstance()->setString("TransitionStyle", transition_style->getSelected()); + }); // theme set auto themeSets = ThemeData::getThemeSets(); @@ -247,6 +266,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN addEntry("GAME COLLECTION SETTINGS", 0x777777FF, true, [this] { openCollectionSystemSettings(); }); + addEntry("OTHER SETTINGS", 0x777777FF, true, [this] { auto s = new GuiSettings(mWindow, "OTHER SETTINGS"); @@ -257,6 +277,32 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("VRAM LIMIT", max_vram); s->addSaveFunc([max_vram] { Settings::getInstance()->setInt("MaxVRAM", (int)round(max_vram->getValue())); }); + // power saver + auto power_saver = std::make_shared< OptionListComponent >(mWindow, "POWER SAVER MODES", false); + std::vector modes; + modes.push_back("disabled"); + modes.push_back("default"); + modes.push_back("enhanced"); + modes.push_back("instant"); + for (auto it = modes.begin(); it != modes.end(); it++) + power_saver->add(*it, *it, Settings::getInstance()->getString("PowerSaverMode") == *it); + s->addWithLabel("POWER SAVER MODES", power_saver); + s->addSaveFunc([this, power_saver] { + if (Settings::getInstance()->getString("PowerSaverMode") != "instant" && power_saver->getSelected() == "instant"){ + mWindow->pushGui(new GuiMsgBox(mWindow, "Setting Power Saver to Instant Mode disables Carousel transition and sets Transition Style to Instant. Would you like to continue?" + , "YES", [] { + Settings::getInstance()->setString("TransitionStyle", "instant"); + Settings::getInstance()->setString("PowerSaverMode", "instant"); + Settings::getInstance()->setBool("MoveCarousel", false); + PowerSaver::init(); + }, "NO", nullptr) + ); + } else { + Settings::getInstance()->setString("PowerSaverMode", power_saver->getSelected()); + PowerSaver::init(); + } + }); + // gamelists auto save_gamelists = std::make_shared(mWindow); save_gamelists->setState(Settings::getInstance()->getBool("SaveGamelistsOnExit")); @@ -366,7 +412,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN }); mVersion.setFont(Font::get(FONT_SIZE_SMALL)); - mVersion.setColor(0xC6C6C6FF); + mVersion.setColor(0x5E5E5EFF); mVersion.setText("EMULATIONSTATION V" + strToUpper(PROGRAM_VERSION_STRING)); mVersion.setAlignment(ALIGN_CENTER); diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index 8da0377dfe..841a7b9b9a 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -3,6 +3,7 @@ #include "Log.h" #include "views/ViewController.h" #include "Gamelist.h" +#include "PowerSaver.h" #include "components/TextComponent.h" #include "components/ButtonComponent.h" @@ -18,6 +19,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue @@ -224,6 +225,7 @@ int main(int argc, char* argv[]) Window window; SystemScreenSaver screensaver(&window); + PowerSaver::init(); ViewController::init(&window); CollectionSystemManager::init(&window); window.pushGui(ViewController::get()); @@ -293,31 +295,50 @@ int main(int argc, char* argv[]) SDL_JoystickEventState(SDL_ENABLE); int lastTime = SDL_GetTicks(); + int ps_time = SDL_GetTicks(); + bool running = true; + bool ps_standby = false; + + // assuming screensaver timeout is not updated regularly. + int timeout = (unsigned int) Settings::getInstance()->getInt("ScreenSaverTime"); while(running) { SDL_Event event; - while(SDL_PollEvent(&event)) + bool ps_standby = PowerSaver::getState() && SDL_GetTicks() - ps_time > PowerSaver::getTimeout(); + + if(ps_standby ? SDL_WaitEventTimeout(&event, timeout - 100) : SDL_PollEvent(&event)) { - switch(event.type) + do { - case SDL_JOYHATMOTION: - case SDL_JOYBUTTONDOWN: - case SDL_JOYBUTTONUP: - case SDL_KEYDOWN: - case SDL_KEYUP: - case SDL_JOYAXISMOTION: - case SDL_TEXTINPUT: - case SDL_TEXTEDITING: - case SDL_JOYDEVICEADDED: - case SDL_JOYDEVICEREMOVED: - InputManager::getInstance()->parseEvent(event, &window); - break; - case SDL_QUIT: - running = false; - break; - } + switch(event.type) + { + case SDL_JOYHATMOTION: + case SDL_JOYBUTTONDOWN: + case SDL_JOYBUTTONUP: + case SDL_KEYDOWN: + case SDL_KEYUP: + case SDL_JOYAXISMOTION: + case SDL_TEXTINPUT: + case SDL_TEXTEDITING: + case SDL_JOYDEVICEADDED: + case SDL_JOYDEVICEREMOVED: + InputManager::getInstance()->parseEvent(event, &window); + break; + case SDL_QUIT: + running = false; + break; + } + } while(SDL_PollEvent(&event)); + + // triggered if exiting from SDL_WaitEvent + if (ps_standby) + // show as if continuing from last event + lastTime = SDL_GetTicks(); + + // reset counter + ps_time = SDL_GetTicks(); } if(window.isSleeping()) @@ -331,8 +352,8 @@ int main(int argc, char* argv[]) int deltaTime = curTime - lastTime; lastTime = curTime; - // cap deltaTime at 1000 - if(deltaTime > 1000 || deltaTime < 0) + // cap deltaTime + if(deltaTime > timeout || deltaTime < 0) deltaTime = 1000; window.update(deltaTime); diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 9bb7786dff..acb14c8cfe 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -5,6 +5,7 @@ #include "Window.h" #include "views/ViewController.h" #include "animations/LambdaAnimation.h" +#include "PowerSaver.h" #include "SystemData.h" #include "Settings.h" #include "Util.h" @@ -213,13 +214,15 @@ void SystemView::onCursorChanged(const CursorState& state) cancelAnimation(1); cancelAnimation(2); + std::string transition_style = Settings::getInstance()->getString("TransitionStyle"); + bool goFast = transition_style == "instant"; const float infoStartOpacity = mSystemInfo.getOpacity() / 255.f; Animation* infoFadeOut = new LambdaAnimation( [infoStartOpacity, this] (float t) { mSystemInfo.setOpacity((unsigned char)(lerp(infoStartOpacity, 0.f, t) * 255)); - }, (int)(infoStartOpacity * 150)); + }, (int)(infoStartOpacity * (goFast ? 10 : 150))); unsigned int gameCount = getSelected()->getDisplayedGameCount(); @@ -229,25 +232,20 @@ void SystemView::onCursorChanged(const CursorState& state) if (!getSelected()->isGameSystem()) ss << "CONFIGURATION"; - // only display a game count if there are at least 2 games - else if(gameCount > 1) + else ss << gameCount << " GAMES AVAILABLE"; mSystemInfo.setText(ss.str()); }, false, 1); - // only display a game count if there are at least 2 games - if(gameCount > 1) + Animation* infoFadeIn = new LambdaAnimation( + [this](float t) { - Animation* infoFadeIn = new LambdaAnimation( - [this](float t) - { - mSystemInfo.setOpacity((unsigned char)(lerp(0.f, 1.f, t) * 255)); - }, 300); + mSystemInfo.setOpacity((unsigned char)(lerp(0.f, 1.f, t) * 255)); + }, goFast ? 10 : 300); - // wait 600ms to fade in - setAnimation(infoFadeIn, 2000, nullptr, false, 2); - } + // wait 600ms to fade in + setAnimation(infoFadeIn, goFast ? 0 : 2000, nullptr, false, 2); // no need to animate transition, we're not going anywhere (probably mEntries.size() == 1) if(endPos == mCamOffset && endPos == mExtrasCamOffset) @@ -255,7 +253,6 @@ void SystemView::onCursorChanged(const CursorState& state) Animation* anim; bool move_carousel = Settings::getInstance()->getBool("MoveCarousel"); - std::string transition_style = Settings::getInstance()->getString("TransitionStyle"); if(transition_style == "fade") { float startExtrasFade = mExtrasFadeOpacity; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 254e846471..cb7b66a496 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -2,6 +2,7 @@ #include "Log.h" #include "SystemData.h" #include "Settings.h" +#include "PowerSaver.h" #include "views/gamelist/BasicGameListView.h" #include "views/gamelist/DetailedGameListView.h" @@ -71,6 +72,7 @@ void ViewController::goToSystemView(SystemData* system) systemList->goToSystem(system, false); mCurrentView = systemList; + PowerSaver::setState(true); playViewTransition(); } diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index c6b0ea8b6a..825208d1fe 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -11,6 +11,7 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Log.h ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/PowerSaver.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h @@ -73,6 +74,7 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Log.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/PowerSaver.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_draw_gl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init_sdlgl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.cpp diff --git a/es-core/src/PowerSaver.cpp b/es-core/src/PowerSaver.cpp new file mode 100644 index 0000000000..d12886a153 --- /dev/null +++ b/es-core/src/PowerSaver.cpp @@ -0,0 +1,44 @@ +#include "PowerSaver.h" +#include "Settings.h" +#include + +bool PowerSaver::mState = true; +int PowerSaver::mTimeout = PowerSaver::ps_default; + +void PowerSaver::init(bool state) +{ + setState(true); + updateTimeout(); +} + +int PowerSaver::getTimeout() +{ + return mTimeout; +} + +void PowerSaver::updateTimeout() +{ + std::string mode = Settings::getInstance()->getString("PowerSaverMode"); + + if (mode == "disabled") { + mTimeout = ps_disabled; + } else if (mode == "instant") { + mTimeout = ps_instant; + } else if (mode == "enhanced") { + mTimeout = ps_enhanced; + } else { // default + mTimeout = ps_default; + } +} + +bool PowerSaver::getState() +{ + return mState; +} + +void PowerSaver::setState(bool state) +{ + bool ps_enabled = Settings::getInstance()->getString("PowerSaverMode") != "disabled"; + mState = ps_enabled && state; +} + diff --git a/es-core/src/PowerSaver.h b/es-core/src/PowerSaver.h new file mode 100644 index 0000000000..b6fd2a67f3 --- /dev/null +++ b/es-core/src/PowerSaver.h @@ -0,0 +1,17 @@ +class PowerSaver +{ +public: + enum ps_state : int { ps_disabled = -1, ps_instant = 200, ps_enhanced = 3000, ps_default = 10000 }; + + static void init(bool state = true); + + static int getTimeout(); + static void updateTimeout(); + + static bool getState(); + static void setState(bool state); + +private: + static bool mState; + static int mTimeout; +}; diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 1a5554a1c0..395708efd7 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -81,6 +81,7 @@ void Settings::setDefaults() mBoolMap["ScreenSaverControls"] = true; mStringMap["ScreenSaverGameInfo"] = "never"; mBoolMap["StretchVideoOnScreenSaver"] = false; + mStringMap["PowerSaverMode"] = "default"; // This setting only applies to raspberry pi but set it for all platforms so // we don't get a warning if we encounter it on a different platform diff --git a/es-core/src/components/ScrollableContainer.cpp b/es-core/src/components/ScrollableContainer.cpp index f709c062fd..0c8440969f 100644 --- a/es-core/src/components/ScrollableContainer.cpp +++ b/es-core/src/components/ScrollableContainer.cpp @@ -2,8 +2,8 @@ #include "Renderer.h" #include "Log.h" -#define AUTO_SCROLL_RESET_DELAY 10000 // ms to reset to top after we reach the bottom -#define AUTO_SCROLL_DELAY 8000 // ms to wait before we start to scroll +#define AUTO_SCROLL_RESET_DELAY 3000 // ms to reset to top after we reach the bottom +#define AUTO_SCROLL_DELAY 1000 // ms to wait before we start to scroll #define AUTO_SCROLL_SPEED 50 // ms between scrolls ScrollableContainer::ScrollableContainer(Window* window) : GuiComponent(window), diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index d042374cc1..7cba4ba3ba 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -3,11 +3,13 @@ #include "ThemeData.h" #include "Util.h" #include "Settings.h" +#include "PowerSaver.h" + #ifdef WIN32 #include #endif -libvlc_instance_t* VideoVlcComponent::mVLC = NULL; +libvlc_instance_t* VideoVlcComponent::mVLC = NULL; // VLC prepares to render a video frame. static void *lock(void *data, void **p_pixels) { @@ -289,7 +291,7 @@ void VideoVlcComponent::startVideo() mMedia = libvlc_media_new_path(mVLC, path.c_str()); if (mMedia) { - unsigned track_count; + unsigned track_count; // Get the media metadata so we can find the aspect ratio libvlc_media_parse(mMedia); libvlc_media_track_t** tracks; @@ -328,6 +330,7 @@ void VideoVlcComponent::startVideo() } } #endif + PowerSaver::setState(false); setupContext(); // Setup the media player @@ -358,6 +361,7 @@ void VideoVlcComponent::stopVideo() // Release the media player so it stops calling back to us if (mMediaPlayer) { + PowerSaver::setState(true); libvlc_media_player_stop(mMediaPlayer); libvlc_media_player_release(mMediaPlayer); libvlc_media_release(mMedia); From 60971b2c7366890fa0a17068349f963280104a6b Mon Sep 17 00:00:00 2001 From: jrassa Date: Thu, 27 Jul 2017 23:05:46 -0400 Subject: [PATCH 133/603] fix default font sizes when running in vertical orientation --- es-core/src/resources/Font.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index fcd45f50a2..376a7d6396 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -11,10 +11,10 @@ class TextCache; -#define FONT_SIZE_MINI ((unsigned int)(0.030f * Renderer::getScreenHeight())) -#define FONT_SIZE_SMALL ((unsigned int)(0.035f * Renderer::getScreenHeight())) -#define FONT_SIZE_MEDIUM ((unsigned int)(0.045f * Renderer::getScreenHeight())) -#define FONT_SIZE_LARGE ((unsigned int)(0.085f * Renderer::getScreenHeight())) +#define FONT_SIZE_MINI ((unsigned int)(0.030f * std::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) +#define FONT_SIZE_SMALL ((unsigned int)(0.035f * std::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) +#define FONT_SIZE_MEDIUM ((unsigned int)(0.045f * std::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) +#define FONT_SIZE_LARGE ((unsigned int)(0.085f * std::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) #define FONT_PATH_LIGHT ":/opensans_hebrew_condensed_light.ttf" #define FONT_PATH_REGULAR ":/opensans_hebrew_condensed_regular.ttf" From 419e6c43e0dabc12ec622882a01e03ea3c0ea9f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nico=20Schl=C3=B6mer?= Date: Fri, 28 Jul 2017 09:57:37 +0200 Subject: [PATCH 134/603] various code fixes From . --- es-app/src/VolumeControl.cpp | 12 ++++++++++-- es-core/src/Window.cpp | 4 ++-- es-core/src/animations/LambdaAnimation.h | 2 ++ es-core/src/components/ComponentGrid.cpp | 6 +++--- es-core/src/components/ComponentList.cpp | 2 +- es-core/src/guis/GuiInputConfig.cpp | 2 +- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index 3349876648..b072130a54 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -21,7 +21,7 @@ VolumeControl::VolumeControl() #if defined (__APPLE__) #error TODO: Not implemented for MacOS yet!!! #elif defined(__linux__) - , mixerIndex(0), mixerHandle(nullptr), mixerElem(nullptr), mixerSelemId(nullptr) + , mixerIndex(0), mixerHandle(nullptr), mixerElem(nullptr), mixerSelemId(nullptr) #elif defined(WIN32) || defined(_WIN32) , mixerHandle(nullptr), endpointVolume(nullptr) #endif @@ -32,7 +32,15 @@ VolumeControl::VolumeControl() originalVolume = getVolume(); } -VolumeControl::VolumeControl(const VolumeControl & right) +VolumeControl::VolumeControl(const VolumeControl & right): + originalVolume(0), internalVolume(0) +#if defined (__APPLE__) + #error TODO: Not implemented for MacOS yet!!! +#elif defined(__linux__) + , mixerIndex(0), mixerHandle(nullptr), mixerElem(nullptr), mixerSelemId(nullptr) +#elif defined(WIN32) || defined(_WIN32) + , mixerHandle(nullptr), endpointVolume(nullptr) +#endif { sInstance = right.sInstance; } diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 4101df0df6..97684dc91a 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -335,8 +335,8 @@ void Window::setHelpPrompts(const std::vector& prompts, const HelpSt // yes, it has! // can we combine? (dpad only) - if((it->first == "up/down" && addPrompts.at(mappedTo->second).first == "left/right") || - (it->first == "left/right" && addPrompts.at(mappedTo->second).first == "up/down")) + if((strcmp(it->first, "up/down") == 0 && strcmp(addPrompts.at(mappedTo->second).first, "left/right")) || + (strcmp(it->first, "left/right") == 0 && strcmp(addPrompts.at(mappedTo->second).first, "up/down"))) { // yes! addPrompts.at(mappedTo->second).first = "up/down/left/right"; diff --git a/es-core/src/animations/LambdaAnimation.h b/es-core/src/animations/LambdaAnimation.h index 35e1f958a9..afc7d84397 100644 --- a/es-core/src/animations/LambdaAnimation.h +++ b/es-core/src/animations/LambdaAnimation.h @@ -8,6 +8,8 @@ class LambdaAnimation : public Animation public: LambdaAnimation(const std::function& func, int duration) : mFunction(func), mDuration(duration) {} + virtual ~LambdaAnimation() = default; + int getDuration() const override { return mDuration; } void apply(float t) override diff --git a/es-core/src/components/ComponentGrid.cpp b/es-core/src/components/ComponentGrid.cpp index 89dd157cc0..e35d9a572f 100644 --- a/es-core/src/components/ComponentGrid.cpp +++ b/es-core/src/components/ComponentGrid.cpp @@ -430,15 +430,15 @@ std::vector ComponentGrid::getHelpPrompts() bool canScrollHoriz = mGridSize.x() > 1; for(auto it = prompts.begin(); it != prompts.end(); it++) { - if(it->first == "up/down/left/right") + if(strcmp(it->first, "up/down/left/right") == 0) { canScrollHoriz = false; canScrollVert = false; break; - }else if(it->first == "up/down") + }else if(strcmp(it->first, "up/down") == 0) { canScrollVert = false; - }else if(it->first == "left/right") + }else if(strcmp(it->first, "left/right") == 0) { canScrollHoriz = false; } diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 9abd1ef8c3..4c6ae96c7d 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -319,7 +319,7 @@ std::vector ComponentList::getHelpPrompts() bool addMovePrompt = true; for(auto it = prompts.begin(); it != prompts.end(); it++) { - if(it->first == "up/down" || it->first == "up/down/left/right") + if(strcmp(it->first, "up/down") == 0 || strcmp(it->first, "up/down/left/right") == 0) { addMovePrompt = false; break; diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index e83e468fe6..337c2ba7e7 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -396,7 +396,7 @@ bool GuiInputConfig::assign(Input input, int inputId) // if this input is mapped to something other than "nothing" or the current row, error // (if it's the same as what it was before, allow it) - if(mTargetConfig->getMappedTo(input).size() > 0 && !mTargetConfig->isMappedTo(inputName[inputId], input) && inputName[inputId] != "HotKeyEnable") + if(mTargetConfig->getMappedTo(input).size() > 0 && !mTargetConfig->isMappedTo(inputName[inputId], input) && strcmp(inputName[inputId], "HotKeyEnable") != 0) { error(mMappings.at(inputId), "Already mapped!"); return false; From 5d41e3ad30d7f9786fdf4126f9ea66bd62a1e6e8 Mon Sep 17 00:00:00 2001 From: dankcushions Date: Tue, 25 Jul 2017 00:12:40 +0100 Subject: [PATCH 135/603] Skip hidden *nix files when populating gamelists. --- es-app/src/SystemData.cpp | 22 ++++++++++++++++++++++ es-app/src/guis/GuiMenu.cpp | 8 ++++++++ es-app/src/main.cpp | 5 +++++ es-core/src/Settings.cpp | 1 + 4 files changed, 36 insertions(+) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index b43ddf8053..afb426c95c 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -63,6 +63,21 @@ void SystemData::setIsGameSystemStatus() mIsGameSystem = (mName != "retropie"); } +#ifndef WIN32 +// test to see if a file is hidden in *nix (dot-prefixed) +// could be expanded to check for Windows hidden attribute +bool isHidden(const fs::path &filePath) +{ + fs::path::string_type fileName = filePath.filename().string(); + if(fileName[0] == '.') + { + return true; + } + + return false; +} +#endif + void SystemData::populateFolder(FileData* folder) { const fs::path& folderPath = folder->getPath(); @@ -88,6 +103,7 @@ void SystemData::populateFolder(FileData* folder) fs::path filePath; std::string extension; bool isGame; + bool showHidden = Settings::getInstance()->getBool("ShowHiddenFiles"); for(fs::directory_iterator end, dir(folderPath); dir != end; ++dir) { filePath = (*dir).path(); @@ -105,6 +121,12 @@ void SystemData::populateFolder(FileData* folder) isGame = false; if(std::find(mEnvData->mSearchExtensions.begin(), mEnvData->mSearchExtensions.end(), extension) != mEnvData->mSearchExtensions.end()) { +#ifndef WIN32 + // skip hidden files + if(!showHidden && isHidden(filePath)) + continue; +#endif + FileData* newGame = new FileData(GAME, filePath.generic_string(), mEnvData, this); folder->addChild(newGame); isGame = true; diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 88a972acdb..d9023602bc 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -268,6 +268,14 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addWithLabel("PARSE GAMESLISTS ONLY", parse_gamelists); s->addSaveFunc([parse_gamelists] { Settings::getInstance()->setBool("ParseGamelistOnly", parse_gamelists->getState()); }); +#ifndef WIN32 + // hidden files + auto hidden_files = std::make_shared(mWindow); + hidden_files->setState(Settings::getInstance()->getBool("ShowHiddenFiles")); + s->addWithLabel("SHOW HIDDEN FILES", hidden_files); + s->addSaveFunc([hidden_files] { Settings::getInstance()->setBool("ShowHiddenFiles", hidden_files->getState()); }); +#endif + #ifdef _RPI_ // Video Player - VideoOmxPlayer auto omx_player = std::make_shared(mWindow); diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 120febc25f..034d8b08d0 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -50,6 +50,11 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height }else if(strcmp(argv[i], "--ignore-gamelist") == 0) { Settings::getInstance()->setBool("IgnoreGamelist", true); +#ifndef WIN32 + }else if(strcmp(argv[i], "--show-hidden-files") == 0) + { + Settings::getInstance()->setBool("ShowHiddenFiles", true); +#endif }else if(strcmp(argv[i], "--draw-framerate") == 0) { Settings::getInstance()->setBool("DrawFramerate", true); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 1a5554a1c0..d0271580ed 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -41,6 +41,7 @@ void Settings::setDefaults() mBoolMap["BackgroundJoystickInput"] = false; mBoolMap["ParseGamelistOnly"] = false; + mBoolMap["ShowHiddenFiles"] = false; mBoolMap["DrawFramerate"] = false; mBoolMap["ShowExit"] = true; mBoolMap["Windowed"] = false; From 5befdbf3326cab01378f24d9f51d863b9c23fa4c Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 31 Jul 2017 18:41:06 +0100 Subject: [PATCH 136/603] bump version to 2.5.0 --- es-app/src/EmulationStation.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 41d828f4b8..ba237b81a3 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -3,11 +3,11 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 4 -#define PROGRAM_VERSION_MAINTENANCE 1 -#define PROGRAM_VERSION_STRING "2.4.1rp" +#define PROGRAM_VERSION_MINOR 5 +#define PROGRAM_VERSION_MAINTENANCE 0 +#define PROGRAM_VERSION_STRING "2.5.0rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,4,1\0" +#define RESOURCE_VERSION_STRING "2,5,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From c150d63d54ce97fea41ec1cfe9224864b2a4b56c Mon Sep 17 00:00:00 2001 From: pjft Date: Tue, 1 Aug 2017 11:34:49 +0100 Subject: [PATCH 137/603] Backup previous session's Log file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Always keeps one session’s log backup file. --- es-app/src/main.cpp | 1 + es-core/src/Log.cpp | 9 +++++++++ es-core/src/Log.h | 1 + 3 files changed, 11 insertions(+) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 49bd9c058c..46085e5913 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -222,6 +222,7 @@ int main(int argc, char* argv[]) return 1; //start the logger + Log::init(); Log::open(); LOG(LogInfo) << "EmulationStation - v" << PROGRAM_VERSION_STRING << ", built " << PROGRAM_BUILT_STRING; diff --git a/es-core/src/Log.cpp b/es-core/src/Log.cpp index 643aef16ae..811bbb8cc0 100644 --- a/es-core/src/Log.cpp +++ b/es-core/src/Log.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "platform.h" LogLevel Log::reportingLevel = LogInfo; @@ -23,6 +24,14 @@ void Log::setReportingLevel(LogLevel level) reportingLevel = level; } +void Log::init() +{ + remove((getLogPath() + ".bak").c_str()); + // rename previous log file + rename(getLogPath().c_str(), (getLogPath() + ".bak").c_str()); + return; +} + void Log::open() { file = fopen(getLogPath().c_str(), "w"); diff --git a/es-core/src/Log.h b/es-core/src/Log.h index fbc033d402..b0f985984b 100644 --- a/es-core/src/Log.h +++ b/es-core/src/Log.h @@ -24,6 +24,7 @@ class Log static std::string getLogPath(); static void flush(); + static void init(); static void open(); static void close(); protected: From d953d6b5cfc1428974968816378ef802d08d60bb Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Wed, 2 Aug 2017 17:42:18 +0100 Subject: [PATCH 138/603] bump version to 2.5.1 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index ba237b81a3..cea9751ddf 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 5 -#define PROGRAM_VERSION_MAINTENANCE 0 -#define PROGRAM_VERSION_STRING "2.5.0rp" +#define PROGRAM_VERSION_MAINTENANCE 1 +#define PROGRAM_VERSION_STRING "2.5.1rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,5,0\0" +#define RESOURCE_VERSION_STRING "2,5,1\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From e924b5d14cc83d037e927f40289ed0f0d522f1c6 Mon Sep 17 00:00:00 2001 From: hex007 Date: Wed, 2 Aug 2017 12:56:33 -0700 Subject: [PATCH 139/603] PowerSaver Updates - Removed warning while enabling Instant mode - Fixes Instant mode setting not being saved - Added methods to support changing screensaver videos after timeout while using OMX. - Added methods to support changing Screensaver play next video timeout - Handled fast animations when Screen saver was disabled by setting timeout to 0 - Minor fixes --- es-app/src/SystemScreenSaver.cpp | 5 +++- es-app/src/SystemScreenSaver.h | 2 +- es-app/src/guis/GuiMenu.cpp | 32 ++++++++++------------- es-app/src/main.cpp | 31 ++++++++++------------ es-core/src/PowerSaver.cpp | 45 +++++++++++++++++++++++--------- es-core/src/PowerSaver.h | 23 +++++++++++----- 6 files changed, 82 insertions(+), 56 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 6136e6d16c..10f791c6d9 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -4,6 +4,7 @@ #endif #include "components/VideoVlcComponent.h" #include "platform.h" +#include "PowerSaver.h" #include "Renderer.h" #include "Settings.h" #include "SystemData.h" @@ -100,6 +101,7 @@ void SystemScreenSaver::startScreenSaver() mVideoScreensaver->setVideo(path); mVideoScreensaver->setScreensaverMode(true); mVideoScreensaver->onShow(); + PowerSaver::runningScreenSaver(true); mTimer = 0; return; } @@ -114,6 +116,7 @@ void SystemScreenSaver::stopScreenSaver() delete mVideoScreensaver; mVideoScreensaver = NULL; mState = STATE_INACTIVE; + PowerSaver::runningScreenSaver(false); } void SystemScreenSaver::renderScreenSaver() @@ -318,4 +321,4 @@ void SystemScreenSaver::launchGame() { view->launch(mCurrentGame); } -} \ No newline at end of file +} diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index 55d99c1610..1865d3aff7 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -45,5 +45,5 @@ class SystemScreenSaver : public Window::ScreenSaver int mTimer; FileData* mCurrentGame; std::string mGameName; - std::string mSystemName; + std::string mSystemName; }; diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 62a8738d2a..696e444e2c 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -88,7 +88,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN for(auto it = transitions.begin(); it != transitions.end(); it++) vol_dev->add(*it, *it, Settings::getInstance()->getString("AudioDevice") == *it); s->addWithLabel("AUDIO DEVICE", vol_dev); - s->addSaveFunc([vol_dev] { + s->addSaveFunc([vol_dev] { Settings::getInstance()->setString("AudioDevice", vol_dev->getSelected()); VolumeControl::getInstance()->deinit(); VolumeControl::getInstance()->init(); @@ -136,7 +136,10 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN auto screensaver_time = std::make_shared(mWindow, 0.f, 30.f, 1.f, "m"); screensaver_time->setValue((float)(Settings::getInstance()->getInt("ScreenSaverTime") / (1000 * 60))); s->addWithLabel("SCREENSAVER AFTER", screensaver_time); - s->addSaveFunc([screensaver_time] { Settings::getInstance()->setInt("ScreenSaverTime", (int)round(screensaver_time->getValue()) * (1000 * 60)); }); + s->addSaveFunc([screensaver_time] { + Settings::getInstance()->setInt("ScreenSaverTime", (int)round(screensaver_time->getValue()) * (1000 * 60)); + PowerSaver::updateTimeouts(); + }); // screensaver behavior auto screensaver_behavior = std::make_shared< OptionListComponent >(mWindow, "SCREENSAVER BEHAVIOR", false); @@ -179,7 +182,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addSaveFunc([move_carousel] { if (move_carousel->getState() && !Settings::getInstance()->getBool("MoveCarousel") - && PowerSaver::ps_instant == PowerSaver::getTimeout()) + && PowerSaver::getMode() == PowerSaver::INSTANT) { Settings::getInstance()->setString("PowerSaverMode", "default"); PowerSaver::init(); @@ -199,7 +202,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN s->addSaveFunc([transition_style] { if (Settings::getInstance()->getString("TransitionStyle") == "instant" && transition_style->getSelected() != "instant" - && PowerSaver::ps_instant == PowerSaver::getTimeout()) + && PowerSaver::getMode() == PowerSaver::INSTANT) { Settings::getInstance()->setString("PowerSaverMode", "default"); PowerSaver::init(); @@ -266,7 +269,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN addEntry("GAME COLLECTION SETTINGS", 0x777777FF, true, [this] { openCollectionSystemSettings(); }); - + addEntry("OTHER SETTINGS", 0x777777FF, true, [this] { auto s = new GuiSettings(mWindow, "OTHER SETTINGS"); @@ -288,21 +291,14 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN power_saver->add(*it, *it, Settings::getInstance()->getString("PowerSaverMode") == *it); s->addWithLabel("POWER SAVER MODES", power_saver); s->addSaveFunc([this, power_saver] { - if (Settings::getInstance()->getString("PowerSaverMode") != "instant" && power_saver->getSelected() == "instant"){ - mWindow->pushGui(new GuiMsgBox(mWindow, "Setting Power Saver to Instant Mode disables Carousel transition and sets Transition Style to Instant. Would you like to continue?" - , "YES", [] { - Settings::getInstance()->setString("TransitionStyle", "instant"); - Settings::getInstance()->setString("PowerSaverMode", "instant"); - Settings::getInstance()->setBool("MoveCarousel", false); - PowerSaver::init(); - }, "NO", nullptr) - ); - } else { - Settings::getInstance()->setString("PowerSaverMode", power_saver->getSelected()); - PowerSaver::init(); + if (Settings::getInstance()->getString("PowerSaverMode") != "instant" && power_saver->getSelected() == "instant") { + Settings::getInstance()->setString("TransitionStyle", "instant"); + Settings::getInstance()->setBool("MoveCarousel", false); } + Settings::getInstance()->setString("PowerSaverMode", power_saver->getSelected()); + PowerSaver::init(); }); - + // gamelists auto save_gamelists = std::make_shared(mWindow); save_gamelists->setState(Settings::getInstance()->getBool("SaveGamelistsOnExit")); diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 46085e5913..e0f2d49061 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -54,7 +54,7 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height #ifndef WIN32 }else if(strcmp(argv[i], "--show-hidden-files") == 0) { - Settings::getInstance()->setBool("ShowHiddenFiles", true); + Settings::getInstance()->setBool("ShowHiddenFiles", true); #endif }else if(strcmp(argv[i], "--draw-framerate") == 0) { @@ -95,7 +95,7 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height AttachConsole(ATTACH_PARENT_PROCESS); freopen("CONOUT$", "wb", stdout); #endif - std::cout << + std::cout << "EmulationStation, a graphical front-end for ROM browsing.\n" "Written by Alec \"Aloshi\" Lofquist.\n" "Version " << PROGRAM_VERSION_STRING << ", built " << PROGRAM_BUILT_STRING << "\n\n" @@ -139,7 +139,7 @@ bool verifyHomeFolderExists() return true; } -// Returns true if everything is OK, +// Returns true if everything is OK, bool loadSystemConfigFile(const char** errorString) { *errorString = NULL; @@ -187,8 +187,8 @@ int main(int argc, char* argv[]) // only show the console on Windows if HideConsole is false #ifdef WIN32 // MSVC has a "SubSystem" option, with two primary options: "WINDOWS" and "CONSOLE". - // In "WINDOWS" mode, no console is automatically created for us. This is good, - // because we can choose to only create the console window if the user explicitly + // In "WINDOWS" mode, no console is automatically created for us. This is good, + // because we can choose to only create the console window if the user explicitly // asks for it, preventing it from flashing open and then closing. // In "CONSOLE" mode, a console is always automatically created for us before we // enter main. In this case, we can only hide the console after the fact, which @@ -210,7 +210,7 @@ int main(int argc, char* argv[]) }else{ // we want to hide the console // if we're compiled with the "WINDOWS" subsystem, this is already done. - // if we're compiled with the "CONSOLE" subsystem, a console is already created; + // if we're compiled with the "CONSOLE" subsystem, a console is already created; // it'll flash open, but we hide it nearly immediately if(GetConsoleWindow()) // should only pass in "CONSOLE" mode ShowWindow(GetConsoleWindow(), SW_HIDE); @@ -266,7 +266,7 @@ int main(int argc, char* argv[]) // we can't handle es_systems.cfg file problems inside ES itself, so display the error message then quit window.pushGui(new GuiMsgBox(&window, errorMsg, - "QUIT", [] { + "QUIT", [] { SDL_Event* quit = new SDL_Event(); quit->type = SDL_QUIT; SDL_PushEvent(quit); @@ -302,19 +302,16 @@ int main(int argc, char* argv[]) int lastTime = SDL_GetTicks(); int ps_time = SDL_GetTicks(); - + bool running = true; bool ps_standby = false; - // assuming screensaver timeout is not updated regularly. - int timeout = (unsigned int) Settings::getInstance()->getInt("ScreenSaverTime"); - while(running) { SDL_Event event; - bool ps_standby = PowerSaver::getState() && SDL_GetTicks() - ps_time > PowerSaver::getTimeout(); - - if(ps_standby ? SDL_WaitEventTimeout(&event, timeout - 100) : SDL_PollEvent(&event)) + bool ps_standby = PowerSaver::getState() && SDL_GetTicks() - ps_time > PowerSaver::getMode(); + + if(ps_standby ? SDL_WaitEventTimeout(&event, PowerSaver::getTimeout()) : SDL_PollEvent(&event)) { do { @@ -337,12 +334,12 @@ int main(int argc, char* argv[]) break; } } while(SDL_PollEvent(&event)); - + // triggered if exiting from SDL_WaitEvent if (ps_standby) // show as if continuing from last event lastTime = SDL_GetTicks(); - + // reset counter ps_time = SDL_GetTicks(); } @@ -359,7 +356,7 @@ int main(int argc, char* argv[]) lastTime = curTime; // cap deltaTime - if(deltaTime > timeout || deltaTime < 0) + if((deltaTime > PowerSaver::getTimeout() && PowerSaver::getTimeout() > 0) || deltaTime < 0) deltaTime = 1000; window.update(deltaTime); diff --git a/es-core/src/PowerSaver.cpp b/es-core/src/PowerSaver.cpp index d12886a153..90a617ec64 100644 --- a/es-core/src/PowerSaver.cpp +++ b/es-core/src/PowerSaver.cpp @@ -2,32 +2,49 @@ #include "Settings.h" #include -bool PowerSaver::mState = true; -int PowerSaver::mTimeout = PowerSaver::ps_default; +bool PowerSaver::mState = false; +bool PowerSaver::mRunningScreenSaver = false; -void PowerSaver::init(bool state) +int PowerSaver::mPlayNextTimeout = -1; +int PowerSaver::mScreenSaverTimeout = -1; +PowerSaver::mode PowerSaver::mMode = PowerSaver::DISABLED; + +void PowerSaver::init() { setState(true); - updateTimeout(); + updateTimeouts(); + updateMode(); } int PowerSaver::getTimeout() { - return mTimeout; + return mRunningScreenSaver ? mPlayNextTimeout : mScreenSaverTimeout; +} + +void PowerSaver::updateTimeouts() +{ + mScreenSaverTimeout = (unsigned int) Settings::getInstance()->getInt("ScreenSaverTime"); + mScreenSaverTimeout = mScreenSaverTimeout > 0 ? mScreenSaverTimeout - 100 : -1; + mPlayNextTimeout = 30000; +} + +PowerSaver::mode PowerSaver::getMode() +{ + return mMode; } -void PowerSaver::updateTimeout() +void PowerSaver::updateMode() { std::string mode = Settings::getInstance()->getString("PowerSaverMode"); - + if (mode == "disabled") { - mTimeout = ps_disabled; + mMode = DISABLED; } else if (mode == "instant") { - mTimeout = ps_instant; + mMode = INSTANT; } else if (mode == "enhanced") { - mTimeout = ps_enhanced; - } else { // default - mTimeout = ps_default; + mMode = ENHANCED; + } else { + mMode = DEFAULT; } } @@ -42,3 +59,7 @@ void PowerSaver::setState(bool state) mState = ps_enabled && state; } +void PowerSaver::runningScreenSaver(bool state) +{ + mRunningScreenSaver = state; +} diff --git a/es-core/src/PowerSaver.h b/es-core/src/PowerSaver.h index b6fd2a67f3..32b0de4d8f 100644 --- a/es-core/src/PowerSaver.h +++ b/es-core/src/PowerSaver.h @@ -1,17 +1,26 @@ class PowerSaver { public: - enum ps_state : int { ps_disabled = -1, ps_instant = 200, ps_enhanced = 3000, ps_default = 10000 }; - - static void init(bool state = true); - + enum mode : int { DISABLED = -1, INSTANT = 200, ENHANCED = 3000, DEFAULT = 10000 }; + + static void init(); + static int getTimeout(); - static void updateTimeout(); + static void updateTimeouts(); + + static mode getMode(); + static void updateMode(); static bool getState(); static void setState(bool state); - + + static void runningScreenSaver(bool state); + private: static bool mState; - static int mTimeout; + static bool mRunningScreenSaver; + + static mode mMode; + static int mPlayNextTimeout; + static int mScreenSaverTimeout; }; From 2377175a1995ae4cf707bce90005c14028db75ed Mon Sep 17 00:00:00 2001 From: jrassa Date: Sun, 16 Jul 2017 23:10:29 -0400 Subject: [PATCH 140/603] added origin and rotation support to guicomponent, exposed as theme options for several components --- THEMES.md | 22 +++++ .../views/gamelist/DetailedGameListView.cpp | 4 +- .../src/views/gamelist/VideoGameListView.cpp | 8 +- es-core/src/GuiComponent.cpp | 93 ++++++++++++++++--- es-core/src/GuiComponent.h | 30 +++++- es-core/src/ThemeData.cpp | 12 +++ es-core/src/ThemeData.h | 2 +- es-core/src/components/ImageComponent.cpp | 39 +++----- es-core/src/components/ImageComponent.h | 8 -- es-core/src/components/VideoComponent.cpp | 20 ++-- es-core/src/components/VideoComponent.h | 9 +- es-core/src/components/VideoVlcComponent.cpp | 8 +- 12 files changed, 177 insertions(+), 78 deletions(-) diff --git a/THEMES.md b/THEMES.md index fec2e61aa3..f1b7fa2a6e 100644 --- a/THEMES.md +++ b/THEMES.md @@ -517,6 +517,10 @@ Can be created as an extra. - The image will be resized as large as possible so that it fits within this size and maintains its aspect ratio. Use this instead of `size` when you don't know what kind of image you're using so it doesn't get grossly oversized on one axis (e.g. with a game's image metadata). * `origin` - type: NORMALIZED_PAIR. - Where on the image `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the image exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. +* `rotation` - type: FLOAT. + - angle in degrees that the image should be rotated. Positive values will rotate clockwise, negative values will rotate counterclockwise. +* `rotationOrigin` - type: NORMALIZED_PAIR. + - Point around which the image will be rotated. Defaults to `0.5 0.5`. * `path` - type: PATH. - Path to the image file. Most common extensions are supported (including .jpg, .png, and unanimated .gif). * `tile` - type: BOOLEAN. @@ -535,6 +539,10 @@ Can be created as an extra. - The video will be resized as large as possible so that it fits within this size and maintains its aspect ratio. Use this instead of `size` when you don't know what kind of video you're using so it doesn't get grossly oversized on one axis (e.g. with a game's video metadata). * `origin` - type: NORMALIZED_PAIR. - Where on the image `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the image exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. +* `rotation` - type: FLOAT. + - angle in degrees that the text should be rotated. Positive values will rotate clockwise, negative values will rotate counterclockwise. +* `rotationOrigin` - type: NORMALIZED_PAIR. + - Point around which the text will be rotated. Defaults to `0.5 0.5`. * `delay` - type: FLOAT. Default is false. - Delay in seconds before video will start playing. * `default` - type: PATH. @@ -556,6 +564,12 @@ Can be created as an extra. - `0 0` - automatically size so text fits on one line (expanding horizontally). - `w 0` - automatically wrap text so it doesn't go beyond `w` (expanding vertically). - `w h` - works like a "text box." If `h` is non-zero and `h` <= `fontSize` (implying it should be a single line of text), text that goes beyond `w` will be truncated with an elipses (...). +* `origin` - type: NORMALIZED_PAIR. + - Where on the component `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the component exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. +* `rotation` - type: FLOAT. + - angle in degrees that the text should be rotated. Positive values will rotate clockwise, negative values will rotate counterclockwise. +* `rotationOrigin` - type: NORMALIZED_PAIR. + - Point around which the text will be rotated. Defaults to `0.5 0.5`. * `text` - type: STRING. * `color` - type: COLOR. * `backgroundColor` - type: COLOR; @@ -574,6 +588,8 @@ Can be created as an extra. * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. +* `origin` - type: NORMALIZED_PAIR. + - Where on the component `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the component exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. * `selectorColor` - type: COLOR. - Color of the "selector bar." * `selectorImagePath` - type: PATH. @@ -618,6 +634,12 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. - Only one value is actually used. The other value should be zero. (e.g. specify width OR height, but not both. This is done to maintain the aspect ratio.) +* `origin` - type: NORMALIZED_PAIR. + - Where on the component `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the component exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. +* `rotation` - type: FLOAT. + - angle in degrees that the rating should be rotated. Positive values will rotate clockwise, negative values will rotate counterclockwise. +* `rotationOrigin` - type: NORMALIZED_PAIR. + - Point around which the rating will be rotated. Defaults to `0.5 0.5`. * `filledPath` - type: PATH. - Path to the "filled star" image. Image must be square (width equals height). * `unfilledPath` - type: PATH. diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index b5e42758c4..9d5d950029 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -78,7 +78,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them BasicGameListView::onThemeChanged(theme); using namespace ThemeFlags; - mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX); + mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION); initMDLabels(); std::vector labels = getMDLabels(); @@ -109,7 +109,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE | Z_INDEX); mDescription.setSize(mDescContainer.getSize().x(), 0); - mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | TEXT)); + mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | ThemeFlags::ORIGIN | TEXT | ROTATION)); sortChildren(); } diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index ec139b0fb8..0813098db5 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -114,9 +114,9 @@ void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) BasicGameListView::onThemeChanged(theme); using namespace ThemeFlags; - mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE | Z_INDEX); - mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX); - mVideo->applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY | Z_INDEX); + mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION); + mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION); + mVideo->applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY | Z_INDEX | ROTATION); initMDLabels(); std::vector labels = getMDLabels(); @@ -147,7 +147,7 @@ void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE | Z_INDEX); mDescription.setSize(mDescContainer.getSize().x(), 0); - mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | TEXT)); + mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | ThemeFlags::ORIGIN | TEXT | ROTATION)); sortChildren(); } diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index c419aedab0..07feb0afc3 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -6,8 +6,8 @@ #include "ThemeData.h" GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), - mPosition(Eigen::Vector3f::Zero()), mSize(Eigen::Vector2f::Zero()), mTransform(Eigen::Affine3f::Identity()), - mIsProcessing(false) + mPosition(Eigen::Vector3f::Zero()), mOrigin(Eigen::Vector2f::Zero()), mRotationOrigin(0.5, 0.5), + mSize(Eigen::Vector2f::Zero()), mTransform(Eigen::Affine3f::Identity()), mIsProcessing(false) { for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) mAnimationMap[i] = NULL; @@ -76,27 +76,36 @@ Eigen::Vector3f GuiComponent::getPosition() const return mPosition; } -void GuiComponent::setPosition(const Eigen::Vector3f& offset) +void GuiComponent::setPosition(float x, float y, float z) { - mPosition = offset; + mPosition << x, y, z; onPositionChanged(); } -void GuiComponent::setPosition(float x, float y, float z) +Eigen::Vector2f GuiComponent::getOrigin() const { - mPosition << x, y, z; - onPositionChanged(); + return mOrigin; } -Eigen::Vector2f GuiComponent::getSize() const +void GuiComponent::setOrigin(float x, float y) { - return mSize; + mOrigin << x, y; + onOriginChanged(); } -void GuiComponent::setSize(const Eigen::Vector2f& size) +Eigen::Vector2f GuiComponent::getRotationOrigin() const { - mSize = size; - onSizeChanged(); + return mRotationOrigin; +} + +void GuiComponent::setRotationOrigin(float x, float y) +{ + mRotationOrigin << x, y;; +} + +Eigen::Vector2f GuiComponent::getSize() const +{ + return mSize; } void GuiComponent::setSize(float w, float h) @@ -105,6 +114,27 @@ void GuiComponent::setSize(float w, float h) onSizeChanged(); } +float GuiComponent::getRotation() const +{ + return mRotation; +} + +void GuiComponent::setRotation(float rotation) +{ + mRotation = rotation; +} + +float GuiComponent::getScale() const +{ + return mScale; +} + +void GuiComponent::setScale(float scale) +{ + mScale = scale; + onSizeChanged(); +} + float GuiComponent::getZIndex() const { return mZIndex; @@ -125,6 +155,12 @@ void GuiComponent::setDefaultZIndex(float z) mDefaultZIndex = z; } +Eigen::Vector2f GuiComponent::getCenter() const +{ + return Eigen::Vector2f(mPosition.x() - (getSize().x() * mOrigin.x()) + getSize().x() / 2, + mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); +} + //Children stuff. void GuiComponent::addChild(GuiComponent* cmp) { @@ -208,6 +244,28 @@ const Eigen::Affine3f& GuiComponent::getTransform() { mTransform.setIdentity(); mTransform.translate(mPosition); + if (mScale != 1.0) + { + mTransform *= Eigen::Scaling(mScale); + } + if (mRotation != 0.0) + { + // Calculate offset as difference between origin and rotation origin + float xOff = (mOrigin.x() - mRotationOrigin.x()) * mSize.x(); + float yOff = (mOrigin.y() - mRotationOrigin.y()) * mSize.y(); + + // transform to offset point + if (xOff != 0.0 || yOff != 0.0) + mTransform.translate(Eigen::Vector3f(xOff * -1, yOff * -1, 0.0f)); + + // apply rotation transorm + mTransform *= Eigen::AngleAxisf(mRotation, Eigen::Vector3f::UnitZ()); + + // Tranform back to original point + if (xOff != 0.0 || yOff != 0.0) + mTransform.translate(Eigen::Vector3f(xOff, yOff, 0.0f)); + } + mTransform.translate(Eigen::Vector3f(mOrigin.x() * mSize.x() * -1, mOrigin.y() * mSize.y() * -1, 0.0f)); return mTransform; } @@ -348,6 +406,17 @@ void GuiComponent::applyTheme(const std::shared_ptr& theme, const std if(properties & ThemeFlags::SIZE && elem->has("size")) setSize(elem->get("size").cwiseProduct(scale)); + // position + size also implies origin + if((properties & ORIGIN || (properties & POSITION && properties & ThemeFlags::SIZE)) && elem->has("origin")) + setOrigin(elem->get("origin")); + + if(properties & ThemeFlags::ROTATION) { + if(elem->has("rotation")) + setRotationDegrees(elem->get("rotation")); + if(elem->has("rotationOrigin")) + setRotationOrigin(elem->get("rotationOrigin")); + } + if(properties & ThemeFlags::Z_INDEX && elem->has("zIndex")) setZIndex(elem->get("zIndex")); else diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 6172cd5288..5f07f0ef4c 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -37,21 +37,42 @@ class GuiComponent virtual void render(const Eigen::Affine3f& parentTrans); Eigen::Vector3f getPosition() const; - void setPosition(const Eigen::Vector3f& offset); + inline void setPosition(const Eigen::Vector3f& offset) { setPosition(offset.x(), offset.y(), offset.z()); } void setPosition(float x, float y, float z = 0.0f); virtual void onPositionChanged() {}; + //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) + Eigen::Vector2f getOrigin() const; + void setOrigin(float originX, float originY); + inline void setOrigin(Eigen::Vector2f origin) { setOrigin(origin.x(), origin.y()); } + virtual void onOriginChanged() {}; + + //Sets the rotation origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) + Eigen::Vector2f getRotationOrigin() const; + void setRotationOrigin(float originX, float originY); + inline void setRotationOrigin(Eigen::Vector2f origin) { setRotationOrigin(origin.x(), origin.y()); } + Eigen::Vector2f getSize() const; - void setSize(const Eigen::Vector2f& size); + inline void setSize(const Eigen::Vector2f& size) { setSize(size.x(), size.y()); } void setSize(float w, float h); virtual void onSizeChanged() {}; + float getRotation() const; + void setRotation(float rotation); + inline void setRotationDegrees(float rotation) { setRotation(rotation * M_PI / 180); } + + float getScale() const; + void setScale(float scale); + float getZIndex() const; void setZIndex(float zIndex); float getDefaultZIndex() const; void setDefaultZIndex(float zIndex); + // Returns the center point of the image (takes origin into account). + Eigen::Vector2f getCenter() const; + void setParent(GuiComponent* parent); GuiComponent* getParent() const; @@ -119,8 +140,13 @@ class GuiComponent std::vector mChildren; Eigen::Vector3f mPosition; + Eigen::Vector2f mOrigin; + Eigen::Vector2f mRotationOrigin; Eigen::Vector2f mSize; + float mRotation = 0.0; + float mScale = 1.0; + float mDefaultZIndex = 0; float mZIndex = 0; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 43b76deb69..ed5b240e35 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -33,6 +33,8 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("size", NORMALIZED_PAIR) ("maxSize", NORMALIZED_PAIR) ("origin", NORMALIZED_PAIR) + ("rotation", FLOAT) + ("rotationOrigin", NORMALIZED_PAIR) ("path", PATH) ("tile", BOOLEAN) ("color", COLOR) @@ -40,6 +42,9 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("text", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) + ("origin", NORMALIZED_PAIR) + ("rotation", FLOAT) + ("rotationOrigin", NORMALIZED_PAIR) ("text", STRING) ("backgroundColor", COLOR) ("fontPath", PATH) @@ -53,6 +58,7 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("textlist", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) + ("origin", NORMALIZED_PAIR) ("selectorHeight", FLOAT) ("selectorOffsetY", FLOAT) ("selectorColor", COLOR) @@ -72,6 +78,7 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("container", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) + ("origin", NORMALIZED_PAIR) ("zIndex", FLOAT))) ("ninepatch", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) @@ -89,6 +96,9 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("rating", makeMap(boost::assign::map_list_of ("pos", NORMALIZED_PAIR) ("size", NORMALIZED_PAIR) + ("origin", NORMALIZED_PAIR) + ("rotation", FLOAT) + ("rotationOrigin", NORMALIZED_PAIR) ("color", COLOR) ("filledPath", PATH) ("unfilledPath", PATH) @@ -106,6 +116,8 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("size", NORMALIZED_PAIR) ("maxSize", NORMALIZED_PAIR) ("origin", NORMALIZED_PAIR) + ("rotation", FLOAT) + ("rotationOrigin", NORMALIZED_PAIR) ("default", PATH) ("delay", FLOAT) ("zIndex", FLOAT) diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index a4e483b624..ba58bcf73c 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -40,7 +40,7 @@ namespace ThemeFlags LINE_SPACING = 2048, DELAY = 4096, Z_INDEX = 8192, - + ROTATION = 16384, ALL = 0xFFFFFFFF }; } diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 8e28b7cf4a..7ab8f9c90b 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -12,17 +12,11 @@ Eigen::Vector2i ImageComponent::getTextureSize() const if(mTexture) return mTexture->getSize(); else - return Eigen::Vector2i(0, 0); -} - -Eigen::Vector2f ImageComponent::getCenter() const -{ - return Eigen::Vector2f(mPosition.x() - (getSize().x() * mOrigin.x()) + getSize().x() / 2, - mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); + return Eigen::Vector2i::Zero(); } ImageComponent::ImageComponent(Window* window, bool forceLoad, bool dynamic) : GuiComponent(window), - mTargetIsMax(false), mFlipX(false), mFlipY(false), mOrigin(0.0, 0.0), mTargetSize(0, 0), mColorShift(0xFFFFFFFF), + mTargetIsMax(false), mFlipX(false), mFlipY(false), mTargetSize(0, 0), mColorShift(0xFFFFFFFF), mForceLoad(forceLoad), mDynamic(dynamic), mFadeOpacity(0.0f), mFading(false) { updateColors(); @@ -125,12 +119,6 @@ void ImageComponent::setImage(const std::shared_ptr& texture) resize(); } -void ImageComponent::setOrigin(float originX, float originY) -{ - mOrigin << originX, originY; - updateVertices(); -} - void ImageComponent::setResize(float width, float height) { mTargetSize << width, height; @@ -180,16 +168,8 @@ void ImageComponent::updateVertices() // we go through this mess to make sure everything is properly rounded // if we just round vertices at the end, edge cases occur near sizes of 0.5 - Eigen::Vector2f topLeft(-mSize.x() * mOrigin.x(), -mSize.y() * mOrigin.y()); - Eigen::Vector2f bottomRight(mSize.x() * (1 -mOrigin.x()), mSize.y() * (1 - mOrigin.y())); - - const float width = round(bottomRight.x() - topLeft.x()); - const float height = round(bottomRight.y() - topLeft.y()); - - topLeft[0] = floor(topLeft[0]); - topLeft[1] = floor(topLeft[1]); - bottomRight[0] = topLeft[0] + width; - bottomRight[1] = topLeft[1] + height; + Eigen::Vector2f topLeft(0.0, 0.0); + Eigen::Vector2f bottomRight(round(mSize.x()), round(mSize.y())); mVertices[0].pos << topLeft.x(), topLeft.y(); mVertices[1].pos << topLeft.x(), bottomRight.y(); @@ -236,9 +216,9 @@ void ImageComponent::updateColors() void ImageComponent::render(const Eigen::Affine3f& parentTrans) { - Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); + Eigen::Affine3f trans = parentTrans * getTransform(); Renderer::setMatrix(trans); - + if(mTexture && mOpacity > 0) { if(mTexture->isInitialized()) @@ -363,6 +343,13 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s if(properties & COLOR && elem->has("color")) setColorShift(elem->get("color")); + if(properties & ThemeFlags::ROTATION) { + if(elem->has("rotation")) + setRotationDegrees(elem->get("rotation")); + if(elem->has("rotationOrigin")) + setRotationOrigin(elem->get("rotationOrigin")); + } + if(properties & ThemeFlags::Z_INDEX && elem->has("zIndex")) setZIndex(elem->get("zIndex")); else diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 3ff1ffbb27..2ed005fc2d 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -25,10 +25,6 @@ class ImageComponent : public GuiComponent void onSizeChanged() override; void setOpacity(unsigned char opacity) override; - //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) - void setOrigin(float originX, float originY); - inline void setOrigin(Eigen::Vector2f origin) { setOrigin(origin.x(), origin.y()); } - // Resize the image to fit this size. If one axis is zero, scale that axis to maintain aspect ratio. // If both are non-zero, potentially break the aspect ratio. If both are zero, no resizing. // Can be set before or after an image is loaded. @@ -51,9 +47,6 @@ class ImageComponent : public GuiComponent // Returns the size of the current texture, or (0, 0) if none is loaded. May be different than drawn size (use getSize() for that). Eigen::Vector2i getTextureSize() const; - // Returns the center point of the image (takes origin into account). - Eigen::Vector2f getCenter() const; - bool hasImage(); void render(const Eigen::Affine3f& parentTrans) override; @@ -63,7 +56,6 @@ class ImageComponent : public GuiComponent virtual std::vector getHelpPrompts() override; private: Eigen::Vector2f mTargetSize; - Eigen::Vector2f mOrigin; bool mFlipX, mFlipY, mTargetIsMax; diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 623bf5d03c..4e931e1900 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -60,7 +60,6 @@ VideoComponent::VideoComponent(Window* window) : mDisable(false), mScreensaverMode(false), mTargetIsMax(false), - mOrigin(0, 0), mTargetSize(0, 0) { // Setup the default configuration @@ -84,18 +83,10 @@ VideoComponent::~VideoComponent() remove(getTitlePath().c_str()); } -void VideoComponent::setOrigin(float originX, float originY) +void VideoComponent::onOriginChanged() { - mOrigin << originX, originY; - // Update the embeded static image - mStaticImage.setOrigin(originX, originY); -} - -Eigen::Vector2f VideoComponent::getCenter() const -{ - return Eigen::Vector2f(mPosition.x() - (getSize().x() * mOrigin.x()) + getSize().x() / 2, - mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); + mStaticImage.setOrigin(mOrigin); } void VideoComponent::onSizeChanged() @@ -221,6 +212,13 @@ void VideoComponent::applyTheme(const std::shared_ptr& theme, const s if (elem->has("showSnapshotDelay")) mConfig.showSnapshotDelay = elem->get("showSnapshotDelay"); + if(properties & ThemeFlags::ROTATION) { + if(elem->has("rotation")) + setRotationDegrees(elem->get("rotation")); + if(elem->has("rotationOrigin")) + setRotationOrigin(elem->get("rotationOrigin")); + } + if(properties & ThemeFlags::Z_INDEX && elem->has("zIndex")) setZIndex(elem->get("zIndex")); else diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index a729b70632..f5c1f01e16 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -48,10 +48,7 @@ class VideoComponent : public GuiComponent virtual void onScreenSaverDeactivate() override; virtual void topWindow(bool isTop) override; - //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) - void setOrigin(float originX, float originY); - inline void setOrigin(Eigen::Vector2f origin) { setOrigin(origin.x(), origin.y()); } - + void onOriginChanged() override; void onSizeChanged() override; void setOpacity(unsigned char opacity) override; @@ -62,9 +59,6 @@ class VideoComponent : public GuiComponent virtual std::vector getHelpPrompts() override; - // Returns the center point of the video (takes origin into account). - Eigen::Vector2f getCenter() const; - virtual void update(int deltaTime); // Resize the video to fit this size. If one axis is zero, scale that axis to maintain aspect ratio. @@ -100,7 +94,6 @@ class VideoComponent : public GuiComponent protected: unsigned mVideoWidth; unsigned mVideoHeight; - Eigen::Vector2f mOrigin; Eigen::Vector2f mTargetSize; std::shared_ptr mTexture; float mFadeIn; diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index d042374cc1..2b2bf1b1af 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -141,10 +141,10 @@ void VideoVlcComponent::render(const Eigen::Affine3f& parentTrans) float x2; float y2; - x = -(float)mSize.x() * mOrigin.x(); - y = -(float)mSize.y() * mOrigin.y(); - x2 = x+mSize.x(); - y2 = y+mSize.y(); + x = 0.0; + y = 0.0; + x2 = mSize.x(); + y2 = mSize.y(); // Define a structure to contain the data for each vertex struct Vertex From 90cd10b4218b208870899b74ee518682a4c0e6c1 Mon Sep 17 00:00:00 2001 From: hex007 Date: Fri, 11 Aug 2017 10:03:12 -0700 Subject: [PATCH 141/603] PowerSaver updates: - Video Screensaver to skip fade in/out if Instant - Video Previews to skip fade in/out if Instant - Added Pause/Resume methods to PS for better description - Added basic documentation to PS header file - Added trailing after waking up from SS - Added proper timing offsets after PS is triggered - PS set to Disabled by default - some whitespace edits --- es-app/src/SystemScreenSaver.cpp | 16 +++++++++------- es-app/src/guis/GuiGameScraper.cpp | 20 ++++++++++---------- es-app/src/guis/GuiScraperMulti.cpp | 18 +++++++++--------- es-app/src/main.cpp | 12 +++++++++--- es-core/src/PowerSaver.cpp | 12 +++++++++--- es-core/src/PowerSaver.h | 14 ++++++++++++++ es-core/src/Settings.cpp | 2 +- es-core/src/components/VideoComponent.cpp | 3 ++- es-core/src/components/VideoVlcComponent.cpp | 5 ++--- 9 files changed, 65 insertions(+), 37 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 10f791c6d9..c632c70ef4 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -59,8 +59,10 @@ void SystemScreenSaver::startScreenSaver() { if (!mVideoScreensaver && (Settings::getInstance()->getString("ScreenSaverBehavior") == "random video")) { - // Configure to fade out the windows - mState = STATE_FADE_OUT_WINDOW; + // Configure to fade out the windows, Skip Fading if Instant mode + mState = PowerSaver::getMode() == PowerSaver::INSTANT + ? STATE_SCREENSAVER_ACTIVE + : STATE_FADE_OUT_WINDOW; mOpacity = 0.0f; // Load a random video @@ -316,9 +318,9 @@ void SystemScreenSaver::launchGame() // launching Game ViewController::get()->goToGameList(mCurrentGame->getSystem()); IGameListView* view = ViewController::get()->getGameListView(mCurrentGame->getSystem()).get(); - view->setCursor(mCurrentGame); - if (Settings::getInstance()->getBool("ScreenSaverControls")) - { - view->launch(mCurrentGame); - } + view->setCursor(mCurrentGame); + if (Settings::getInstance()->getBool("ScreenSaverControls")) + { + view->launch(mCurrentGame); + } } diff --git a/es-app/src/guis/GuiGameScraper.cpp b/es-app/src/guis/GuiGameScraper.cpp index 141d65262d..5b2ba7a58c 100644 --- a/es-app/src/guis/GuiGameScraper.cpp +++ b/es-app/src/guis/GuiGameScraper.cpp @@ -9,25 +9,25 @@ #include "PowerSaver.h" #include "Settings.h" -GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc) : GuiComponent(window), - mGrid(window, Eigen::Vector2i(1, 7)), +GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc) : GuiComponent(window), + mGrid(window, Eigen::Vector2i(1, 7)), mBox(window, ":/frame.png"), mSearchParams(params), mClose(false) { - PowerSaver::setState(false); + PowerSaver::pause(); addChild(&mBox); addChild(&mGrid); // row 0 is a spacer - mGameName = std::make_shared(mWindow, strToUpper(mSearchParams.game->getPath().filename().generic_string()), + mGameName = std::make_shared(mWindow, strToUpper(mSearchParams.game->getPath().filename().generic_string()), Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_CENTER); mGrid.setEntry(mGameName, Eigen::Vector2i(0, 1), false, true); // row 2 is a spacer - mSystemName = std::make_shared(mWindow, strToUpper(mSearchParams.system->getFullName()), Font::get(FONT_SIZE_SMALL), + mSystemName = std::make_shared(mWindow, strToUpper(mSearchParams.system->getFullName()), Font::get(FONT_SIZE_SMALL), 0x888888FF, ALIGN_CENTER); mGrid.setEntry(mSystemName, Eigen::Vector2i(0, 3), false, true); @@ -40,9 +40,9 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: // buttons std::vector< std::shared_ptr > buttons; - buttons.push_back(std::make_shared(mWindow, "INPUT", "search", [&] { - mSearch->openInputScreen(mSearchParams); - mGrid.resetCursor(); + buttons.push_back(std::make_shared(mWindow, "INPUT", "search", [&] { + mSearch->openInputScreen(mSearchParams); + mGrid.resetCursor(); })); buttons.push_back(std::make_shared(mWindow, "CANCEL", "cancel", [&] { delete this; })); mButtonGrid = makeButtonGrid(mWindow, buttons); @@ -98,7 +98,7 @@ bool GuiGameScraper::input(InputConfig* config, Input input) { if(config->isMappedTo("b", input) && input.value) { - PowerSaver::setState(true); + PowerSaver::resume(); delete this; return true; } @@ -122,4 +122,4 @@ std::vector GuiGameScraper::getHelpPrompts() void GuiGameScraper::close() { mClose = true; -} \ No newline at end of file +} diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index 841a7b9b9a..0b838422ad 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -13,16 +13,16 @@ using namespace Eigen; -GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue& searches, bool approveResults) : - GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)), +GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue& searches, bool approveResults) : + GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)), mSearchQueue(searches) { assert(mSearchQueue.size()); - PowerSaver::setState(false); addChild(&mBackground); addChild(&mGrid); + PowerSaver::pause(); mIsProcessing = true; mTotalGames = mSearchQueue.size(); @@ -40,7 +40,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue(mWindow, "subtitle text", Font::get(FONT_SIZE_SMALL), 0x888888FF, ALIGN_CENTER); mGrid.setEntry(mSubtitle, Vector2i(0, 2), false, true); - mSearchComp = std::make_shared(mWindow, + mSearchComp = std::make_shared(mWindow, approveResults ? ScraperSearchComponent::ALWAYS_ACCEPT_MATCHING_CRC : ScraperSearchComponent::ALWAYS_ACCEPT_FIRST_RESULT); mSearchComp->setAcceptCallback(std::bind(&GuiScraperMulti::acceptResult, this, std::placeholders::_1)); mSearchComp->setSkipCallback(std::bind(&GuiScraperMulti::skip, this)); @@ -51,9 +51,9 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue(mWindow, "INPUT", "search", [&] { - mSearchComp->openInputScreen(mSearchQueue.front()); - mGrid.resetCursor(); + buttons.push_back(std::make_shared(mWindow, "INPUT", "search", [&] { + mSearchComp->openInputScreen(mSearchQueue.front()); + mGrid.resetCursor(); })); buttons.push_back(std::make_shared(mWindow, "SKIP", "skip", [&] { @@ -95,7 +95,6 @@ void GuiScraperMulti::doNextSearch() { if(mSearchQueue.empty()) { - PowerSaver::setState(true); finish(); return; } @@ -146,10 +145,11 @@ void GuiScraperMulti::finish() ss << "\n" << mTotalSkipped << " GAME" << ((mTotalSkipped > 1) ? "S" : "") << " SKIPPED."; } - mWindow->pushGui(new GuiMsgBox(mWindow, ss.str(), + mWindow->pushGui(new GuiMsgBox(mWindow, ss.str(), "OK", [&] { delete this; })); mIsProcessing = false; + PowerSaver::resume(); } std::vector GuiScraperMulti::getHelpPrompts() diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index e0f2d49061..414f2b145b 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -335,7 +335,7 @@ int main(int argc, char* argv[]) } } while(SDL_PollEvent(&event)); - // triggered if exiting from SDL_WaitEvent + // triggered if exiting from SDL_WaitEvent due to event if (ps_standby) // show as if continuing from last event lastTime = SDL_GetTicks(); @@ -343,6 +343,12 @@ int main(int argc, char* argv[]) // reset counter ps_time = SDL_GetTicks(); } + else if (ps_standby) + { + // If exitting SDL_WaitEventTimeout due to timeout. Trail considering + // timeout as an event + ps_time = SDL_GetTicks(); + } if(window.isSleeping()) { @@ -355,8 +361,8 @@ int main(int argc, char* argv[]) int deltaTime = curTime - lastTime; lastTime = curTime; - // cap deltaTime - if((deltaTime > PowerSaver::getTimeout() && PowerSaver::getTimeout() > 0) || deltaTime < 0) + // cap deltaTime if it ever goes negative + if(deltaTime < 0) deltaTime = 1000; window.update(deltaTime); diff --git a/es-core/src/PowerSaver.cpp b/es-core/src/PowerSaver.cpp index 90a617ec64..1a4863e2be 100644 --- a/es-core/src/PowerSaver.cpp +++ b/es-core/src/PowerSaver.cpp @@ -12,20 +12,20 @@ PowerSaver::mode PowerSaver::mMode = PowerSaver::DISABLED; void PowerSaver::init() { setState(true); - updateTimeouts(); updateMode(); } int PowerSaver::getTimeout() { + // Used only for SDL_WaitEventTimeout. Use `getMode()` for modes. return mRunningScreenSaver ? mPlayNextTimeout : mScreenSaverTimeout; } void PowerSaver::updateTimeouts() { mScreenSaverTimeout = (unsigned int) Settings::getInstance()->getInt("ScreenSaverTime"); - mScreenSaverTimeout = mScreenSaverTimeout > 0 ? mScreenSaverTimeout - 100 : -1; - mPlayNextTimeout = 30000; + mScreenSaverTimeout = mScreenSaverTimeout > 0 ? mScreenSaverTimeout - getMode() : -1; + mPlayNextTimeout = 30000 - getMode(); } PowerSaver::mode PowerSaver::getMode() @@ -46,6 +46,7 @@ void PowerSaver::updateMode() } else { mMode = DEFAULT; } + updateTimeouts(); } bool PowerSaver::getState() @@ -63,3 +64,8 @@ void PowerSaver::runningScreenSaver(bool state) { mRunningScreenSaver = state; } + +bool PowerSaver::isScreenSaverActive() +{ + return mRunningScreenSaver; +} diff --git a/es-core/src/PowerSaver.h b/es-core/src/PowerSaver.h index 32b0de4d8f..f51c8bde8b 100644 --- a/es-core/src/PowerSaver.h +++ b/es-core/src/PowerSaver.h @@ -3,18 +3,32 @@ class PowerSaver public: enum mode : int { DISABLED = -1, INSTANT = 200, ENHANCED = 3000, DEFAULT = 10000 }; + // Call when you want PS to reload all state and settings static void init(); + // Get timeout to wake up from for the next event static int getTimeout(); + // Update currently set timeouts after User changes Timeout settings static void updateTimeouts(); + // Use this to check which mode you are in or get the mode timeout static mode getMode(); + // Called when user changes mode from Settings static void updateMode(); + // Get current state of PS. Not to be confused with Mode static bool getState(); + // State is used to temporarily pause and resume PS static void setState(bool state); + // Paired calls when you want to pause PS briefly till you finish animating + // or processing over cycles + static void pause() { setState(false); } + static void resume() { setState(true); } + + // This is used by ScreenSaver to let PS know when to switch to SS timeouts static void runningScreenSaver(bool state); + static bool isScreenSaverActive(); private: static bool mState; diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index b7f79c9335..bca120639b 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -82,7 +82,7 @@ void Settings::setDefaults() mBoolMap["ScreenSaverControls"] = true; mStringMap["ScreenSaverGameInfo"] = "never"; mBoolMap["StretchVideoOnScreenSaver"] = false; - mStringMap["PowerSaverMode"] = "default"; + mStringMap["PowerSaverMode"] = "disabled"; // This setting only applies to raspberry pi but set it for all platforms so // we don't get a warning if we encounter it on a different platform diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 623bf5d03c..d82b1b8b05 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -3,6 +3,7 @@ #include "ThemeData.h" #include "Util.h" #include "Window.h" +#include "PowerSaver.h" #ifdef WIN32 #include #endif @@ -264,7 +265,7 @@ void VideoComponent::startVideoWithDelay() // Set the video that we are going to be playing so we don't attempt to restart it mPlayingVideoPath = mVideoPath; - if (mConfig.startDelay == 0) + if (mConfig.startDelay == 0 || PowerSaver::getMode() == PowerSaver::INSTANT) { // No delay. Just start the video mStartDelayed = false; diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 7cba4ba3ba..85f8b15462 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -330,7 +330,7 @@ void VideoVlcComponent::startVideo() } } #endif - PowerSaver::setState(false); + PowerSaver::pause(); setupContext(); // Setup the media player @@ -361,12 +361,11 @@ void VideoVlcComponent::stopVideo() // Release the media player so it stops calling back to us if (mMediaPlayer) { - PowerSaver::setState(true); libvlc_media_player_stop(mMediaPlayer); libvlc_media_player_release(mMediaPlayer); libvlc_media_release(mMedia); mMediaPlayer = NULL; freeContext(); + PowerSaver::resume(); } } - From be192be8a2f89c9293868fbd18ef92664fcdeb11 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Fri, 11 Aug 2017 19:31:32 +0100 Subject: [PATCH 142/603] bump version to v2.5.2 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index cea9751ddf..1173856890 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 5 -#define PROGRAM_VERSION_MAINTENANCE 1 -#define PROGRAM_VERSION_STRING "2.5.1rp" +#define PROGRAM_VERSION_MAINTENANCE 2 +#define PROGRAM_VERSION_STRING "2.5.2rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,5,1\0" +#define RESOURCE_VERSION_STRING "2,5,2\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 01a55ba6a2971a70e425ac2402bcbe0ad1bb1143 Mon Sep 17 00:00:00 2001 From: pjft Date: Tue, 18 Jul 2017 10:45:50 +0100 Subject: [PATCH 143/603] Added support for custom Game Collection creation - Create from a theme folder - Create by specifying a name - Refactored collection creation to be on-demand rather than on startup --- es-app/src/CollectionSystemManager.cpp | 1065 +++++++++++++---- es-app/src/CollectionSystemManager.h | 79 +- es-app/src/FileData.cpp | 29 +- es-app/src/FileData.h | 4 +- es-app/src/FileFilterIndex.cpp | 62 +- es-app/src/FileFilterIndex.h | 3 + es-app/src/SystemData.cpp | 5 +- .../src/guis/GuiCollectionSystemsOptions.cpp | 169 ++- es-app/src/guis/GuiCollectionSystemsOptions.h | 9 +- es-app/src/guis/GuiGamelistOptions.cpp | 80 +- es-app/src/guis/GuiGamelistOptions.h | 2 + es-app/src/guis/GuiMenu.cpp | 3 + es-app/src/guis/GuiMetaDataEd.cpp | 2 +- es-app/src/main.cpp | 1 + es-app/src/views/ViewController.cpp | 11 + es-app/src/views/ViewController.h | 1 + .../src/views/gamelist/BasicGameListView.cpp | 10 +- .../views/gamelist/ISimpleGameListView.cpp | 20 +- es-core/src/Settings.cpp | 3 + es-core/src/Util.cpp | 4 +- es-core/src/Util.h | 2 +- 21 files changed, 1222 insertions(+), 342 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index eb8761ecb2..5896a11a3e 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -1,6 +1,8 @@ #include "SystemData.h" #include "Gamelist.h" #include +#include +#include #include "Util.h" #include #include @@ -11,34 +13,24 @@ #include "InputManager.h" #include #include "Settings.h" -#include "FileSorts.h" #include "pugixml/src/pugixml.hpp" #include "guis/GuiInfoPopup.h" namespace fs = boost::filesystem; +std::string myCollectionsName = "collections"; +/* Handling the getting, initialization, deinitialization, saving and deletion of + * a CollectionSystemManager Instance */ CollectionSystemManager* CollectionSystemManager::sInstance = NULL; -CollectionSystemManager* CollectionSystemManager::get() -{ - assert(sInstance); - return sInstance; -} - -void CollectionSystemManager::init(Window* window) -{ - assert(!sInstance); - sInstance = new CollectionSystemManager(window); -} - CollectionSystemManager::CollectionSystemManager(Window* window) : mWindow(window) { CollectionSystemDecl systemDecls[] = { - //type name long name //default sort // theme folder // isCustom - { AUTO_ALL_GAMES, "all", "all games", "filename, ascending", "auto-allgames", false }, - { AUTO_LAST_PLAYED, "recent", "last played", "last played, descending", "auto-lastplayed", false }, - { AUTO_FAVORITES, "favorites", "favorites", "filename, ascending", "auto-favorites", false }, - { CUSTOM_COLLECTION, "custom", "custom", "filename, ascending", "custom-collections", true } + //type name long name //default sort // theme folder // isCustom + { AUTO_ALL_GAMES, "all", "all games", "filename, ascending", "auto-allgames", false }, + { AUTO_LAST_PLAYED, "recent", "last played", "last played, descending", "auto-lastplayed", false }, + { AUTO_FAVORITES, "favorites", "favorites", "filename, ascending", "auto-favorites", false }, + { CUSTOM_COLLECTION, myCollectionsName, "collections", "filename, ascending", "custom-collections", true } }; // create a map @@ -46,8 +38,7 @@ CollectionSystemManager::CollectionSystemManager(Window* window) : mWindow(windo for (std::vector::iterator it = tempSystemDecl.begin(); it != tempSystemDecl.end(); ++it ) { - mCollectionSystemDecls[(*it).name] = (*it); - //mCollectionSystemDecls.insert(std::make_pair((*it).name,(*it))); + mCollectionSystemDeclsIndex[(*it).name] = (*it); } // creating standard environment data @@ -60,187 +51,706 @@ CollectionSystemManager::CollectionSystemManager(Window* window) : mWindow(windo allPlatformIds.push_back(PlatformIds::PLATFORM_IGNORE); mCollectionEnvData->mPlatformIds = allPlatformIds; - // TO DO: Create custom editing help style + std::string path = getCollectionsFolder(); + if(!fs::exists(path)) + fs::create_directory(path); + mIsEditingCustom = false; + mEditingCollection = "Favorites"; + mEditingCollectionSystemData = NULL; + mCustomCollectionsBundle = NULL; } CollectionSystemManager::~CollectionSystemManager() { assert(sInstance == this); + removeCollectionsFromDisplayedSystems(); + + // iterate the map + for(std::map::iterator it = mCustomCollectionSystemsData.begin() ; it != mCustomCollectionSystemsData.end() ; it++ ) + { + if (it->second.isPopulated) + { + saveCustomCollection(it->second.system); + } + delete it->second.system; + } sInstance = NULL; } +CollectionSystemManager* CollectionSystemManager::get() +{ + assert(sInstance); + return sInstance; +} + +void CollectionSystemManager::init(Window* window) +{ + assert(!sInstance); + sInstance = new CollectionSystemManager(window); +} + +void CollectionSystemManager::deinit() +{ + if (sInstance) + { + delete sInstance; + } +} + +void CollectionSystemManager::saveCustomCollection(SystemData* sys) +{ + std::string name = sys->getName(); + std::unordered_map games = sys->getRootFolder()->getChildrenByFilename(); + bool found = mCustomCollectionSystemsData.find(name) != mCustomCollectionSystemsData.end(); + if (found) { + CollectionSystemData sysData = mCustomCollectionSystemsData.at(name); + if (sysData.needsSave) + { + std::ofstream configFile; + configFile.open(getCustomCollectionConfigPath(name)); + for(std::unordered_map::iterator iter = games.begin(); iter != games.end(); ++iter) + { + std::string path = iter->first; + configFile << path << std::endl; + } + configFile.close(); + } + } + else + { + LOG(LogError) << "Couldn't find collection to save! " << name; + } +} + +/* Methods to load all Collections into memory, and handle enabling the active ones */ +// loads all Collection Systems +void CollectionSystemManager::loadCollectionSystems() +{ + initAutoCollectionSystems(); + CollectionSystemDecl decl = mCollectionSystemDeclsIndex[myCollectionsName]; + mCustomCollectionsBundle = createNewCollectionEntry(decl.name, decl, false); + // we will also load custom systems here + initCustomCollectionSystems(); + if(Settings::getInstance()->getString("CollectionSystemsAuto") != "" || Settings::getInstance()->getString("CollectionSystemsCustom") != "") + { + // Now see which ones are enabled + loadEnabledListFromSettings(); + // add to the main System Vector, and create Views as needed + updateSystemsList(); + } +} + +// loads settings void CollectionSystemManager::loadEnabledListFromSettings() { - // we parse the settings - std::vector selected = commaStringToVector(Settings::getInstance()->getString("CollectionSystemsAuto")); + // we parse the auto collection settings list + std::vector autoSelected = commaStringToVector(Settings::getInstance()->getString("CollectionSystemsAuto")); // iterate the map - for(std::map::iterator it = mAllCollectionSystems.begin() ; it != mAllCollectionSystems.end() ; it++ ) + for(std::map::iterator it = mAutoCollectionSystemsData.begin() ; it != mAutoCollectionSystemsData.end() ; it++ ) { - it->second.isEnabled = (std::find(selected.begin(), selected.end(), it->first) != selected.end()); + it->second.isEnabled = (std::find(autoSelected.begin(), autoSelected.end(), it->first) != autoSelected.end()); + } + + // we parse the custom collection settings list + std::vector customSelected = commaStringToVector(Settings::getInstance()->getString("CollectionSystemsCustom")); + + // iterate the map + for(std::map::iterator it = mCustomCollectionSystemsData.begin() ; it != mCustomCollectionSystemsData.end() ; it++ ) + { + it->second.isEnabled = (std::find(customSelected.begin(), customSelected.end(), it->first) != customSelected.end()); } } -void CollectionSystemManager::initAvailableSystemsList() +// updates enabled system list in System View +void CollectionSystemManager::updateSystemsList() { + // remove all Collection Systems + removeCollectionsFromDisplayedSystems(); + // add custom enabled ones + addEnabledCollectionsToDisplayedSystems(&mCustomCollectionSystemsData); + if(Settings::getInstance()->getBool("SortAllSystems")) + { + // sort custom individual systems with other systems + std::sort(SystemData::sSystemVector.begin(), SystemData::sSystemVector.end(), systemSort); + + // move RetroPie system to end, before auto collections + for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); ) + { + if ((*sysIt)->getName() == "retropie") + { + SystemData* retroPieSystem = (*sysIt); + sysIt = SystemData::sSystemVector.erase(sysIt); + SystemData::sSystemVector.push_back(retroPieSystem); + break; + } + else + { + sysIt++; + } + } + } + + if(mCustomCollectionsBundle->getRootFolder()->getChildren().size() > 0) + { + mCustomCollectionsBundle->getRootFolder()->sort(getSortTypeFromString(mCollectionSystemDeclsIndex[myCollectionsName].defaultSort)); + SystemData::sSystemVector.push_back(mCustomCollectionsBundle); + } + + // add auto enabled ones + addEnabledCollectionsToDisplayedSystems(&mAutoCollectionSystemsData); + + // create views for collections, before reload + for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) + { + if ((*sysIt)->isCollection()) + { + ViewController::get()->getGameListView((*sysIt)); + } + } + + // if we were editing a custom collection, and it's no longer enabled, exit edit mode + if(mIsEditingCustom && !mEditingCollectionSystemData->isEnabled) + { + exitEditMode(); + } } -std::vector CollectionSystemManager::getSystemsFromConfig() +/* Methods to manage collection files related to a source FileData */ +// updates all collection files related to the source file +void CollectionSystemManager::refreshCollectionSystems(FileData* file) { - std::vector systems; - std::string path = SystemData::getConfigPath(false); + if (!file->getSystem()->isGameSystem()) + return; - if(!fs::exists(path)) + std::map allCollections; + allCollections.insert(mAutoCollectionSystemsData.begin(), mAutoCollectionSystemsData.end()); + allCollections.insert(mCustomCollectionSystemsData.begin(), mCustomCollectionSystemsData.end()); + + for(auto sysDataIt = allCollections.begin(); sysDataIt != allCollections.end(); sysDataIt++) { - return systems; + updateCollectionSystem(file, sysDataIt->second); } +} - pugi::xml_document doc; - pugi::xml_parse_result res = doc.load_file(path.c_str()); - - if(!res) +void CollectionSystemManager::updateCollectionSystem(FileData* file, CollectionSystemData sysData) +{ + if (sysData.isPopulated) { - return systems; + // collection files use the full path as key, to avoid clashes + std::string key = file->getFullPath(); + + SystemData* curSys = sysData.system; + const std::unordered_map& children = curSys->getRootFolder()->getChildrenByFilename(); + bool found = children.find(key) != children.end(); + FileData* rootFolder = curSys->getRootFolder(); + FileFilterIndex* fileIndex = curSys->getIndex(); + std::string name = curSys->getName(); + + if (found) { + // if we found it, we need to update it + FileData* collectionEntry = children.at(key); + // remove from index, so we can re-index metadata after refreshing + fileIndex->removeFromIndex(collectionEntry); + collectionEntry->refreshMetadata(); + // found and we are removing + if (name == "favorites" && file->metadata.get("favorite") == "false") { + // need to check if still marked as favorite, if not remove + ViewController::get()->getGameListView(curSys).get()->remove(collectionEntry, false); + } + else + { + // re-index with new metadata + fileIndex->addToIndex(collectionEntry); + ViewController::get()->onFileChanged(collectionEntry, FILE_METADATA_CHANGED); + } + } + else + { + // we didn't find it here - we need to check if we should add it + if (name == "recent" && file->metadata.get("playcount") > "0" && includeFileInAutoCollections(file) || + name == "favorites" && file->metadata.get("favorite") == "true") { + CollectionFileData* newGame = new CollectionFileData(file, curSys); + rootFolder->addChild(newGame); + fileIndex->addToIndex(newGame); + ViewController::get()->onFileChanged(file, FILE_METADATA_CHANGED); + ViewController::get()->getGameListView(curSys)->onFileChanged(newGame, FILE_METADATA_CHANGED); + } + } + rootFolder->sort(getSortTypeFromString(mCollectionSystemDeclsIndex[name].defaultSort)); + ViewController::get()->onFileChanged(rootFolder, FILE_SORTED); } +} - //actually read the file - pugi::xml_node systemList = doc.child("systemList"); +// deletes all collection files from collection systems related to the source file +void CollectionSystemManager::deleteCollectionFiles(FileData* file) +{ + // collection files use the full path as key, to avoid clashes + std::string key = file->getFullPath(); + // find games in collection systems + std::map allCollections; + allCollections.insert(mAutoCollectionSystemsData.begin(), mAutoCollectionSystemsData.end()); + allCollections.insert(mCustomCollectionSystemsData.begin(), mCustomCollectionSystemsData.end()); - if(!systemList) + for(auto sysDataIt = allCollections.begin(); sysDataIt != allCollections.end(); sysDataIt++) { - return systems; + if (sysDataIt->second.isPopulated) + { + const std::unordered_map& children = (sysDataIt->second.system)->getRootFolder()->getChildrenByFilename(); + + bool found = children.find(key) != children.end(); + if (found) { + sysDataIt->second.needsSave = true; + FileData* collectionEntry = children.at(key); + ViewController::get()->getGameListView(sysDataIt->second.system).get()->remove(collectionEntry, false); + } + } } +} - for(pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) +// returns whether the current theme is compatible with Automatic or Custom Collections +bool CollectionSystemManager::isThemeGenericCollectionCompatible(bool genericCustomCollections) +{ + std::vector cfgSys = getCollectionThemeFolders(genericCustomCollections); + for(auto sysIt = cfgSys.begin(); sysIt != cfgSys.end(); sysIt++) { - // theme folder - std::string themeFolder = system.child("theme").text().get(); - systems.push_back(themeFolder); + if(!themeFolderExists(*sysIt)) + return false; } - std::sort(systems.begin(), systems.end()); - return systems; + return true; } -std::vector CollectionSystemManager::getSystemsFromTheme() +bool CollectionSystemManager::isThemeCustomCollectionCompatible(std::vector stringVector) { - std::vector systems; + if (isThemeGenericCollectionCompatible(true)) + return true; + + // get theme path auto themeSets = ThemeData::getThemeSets(); - if(themeSets.empty()) + auto set = themeSets.find(Settings::getInstance()->getString("ThemeSet")); + if(set != themeSets.end()) { - // no theme sets available - return systems; + std::string defaultThemeFilePath = set->second.path.string() + "/theme.xml"; + if (fs::exists(defaultThemeFilePath)) + { + return true; + } } - auto set = themeSets.find(Settings::getInstance()->getString("ThemeSet")); - if(set == themeSets.end()) + for(auto sysIt = stringVector.begin(); sysIt != stringVector.end(); sysIt++) { - // currently selected theme set is missing, so just pick the first available set - set = themeSets.begin(); - Settings::getInstance()->setString("ThemeSet", set->first); + if(!themeFolderExists(*sysIt)) + return false; } + return true; +} - boost::filesystem::path themePath = set->second.path; +std::string CollectionSystemManager::getValidNewCollectionName(std::string inName, int index) +{ + // filter name - [^A-Za-z0-9\[\]\(\)\s] + using namespace boost::xpressive; + std::string name; + sregex regexp = sregex::compile("[^A-Za-z0-9\\-\\[\\]\\(\\)\\s']"); + if (index == 0) + { + name = regex_replace(inName, regexp, ""); + if (name == "") + { + name = "New Collection"; + } + } + else + { + name = inName + " (" + std::to_string(index) + ")"; + } + if(name != inName) + { + LOG(LogInfo) << "Had to change name, from: " << inName << " to: " << name; + } + // get used systems in es_systems.cfg + std::vector systemsInUse = getSystemsFromConfig(); + // get folders assigned to custom collections + std::vector autoSys = getCollectionThemeFolders(false); + // get folder assigned to custom collections + std::vector customSys = getCollectionThemeFolders(true); + // get folders assigned to user collections + std::vector userSys = getUserCollectionThemeFolders(); + // add them all to the list of systems in use + systemsInUse.insert(systemsInUse.end(), autoSys.begin(), autoSys.end()); + systemsInUse.insert(systemsInUse.end(), customSys.begin(), customSys.end()); + systemsInUse.insert(systemsInUse.end(), userSys.begin(), userSys.end()); + for(auto sysIt = systemsInUse.begin(); sysIt != systemsInUse.end(); sysIt++) + { + if (*sysIt == name) + { + if(index > 0) { + name = name.substr(0, name.size()-4); + } + return getValidNewCollectionName(name, index+1); + } + } + // if it matches one of the custom collections reserved names + if (mCollectionSystemDeclsIndex.find(name) != mCollectionSystemDeclsIndex.end()) + return getValidNewCollectionName(name, index+1); + return name; +} - if (fs::exists(themePath)) +void CollectionSystemManager::setEditMode(std::string collectionName) +{ + if (mCustomCollectionSystemsData.find(collectionName) == mCustomCollectionSystemsData.end()) { - fs::directory_iterator end_itr; // default construction yields past-the-end - for (fs::directory_iterator itr(themePath); itr != end_itr; ++itr) + LOG(LogError) << "Tried to edit a non-existing collection: " << collectionName; + return; + } + mIsEditingCustom = true; + mEditingCollection = collectionName; + + CollectionSystemData* sysData = &(mCustomCollectionSystemsData.at(mEditingCollection)); + if (!sysData->isPopulated) + { + populateCustomCollection(sysData); + } + // if it's bundled, this needs to be the bundle system + mEditingCollectionSystemData = sysData; + + GuiInfoPopup* s = new GuiInfoPopup(mWindow, "Editing the '" + strToUpper(collectionName) + "' Collection. Add/remove games with Y.", 10000); + mWindow->setInfoPopup(s); +} + +void CollectionSystemManager::exitEditMode() +{ + GuiInfoPopup* s = new GuiInfoPopup(mWindow, "Finished editing the '" + mEditingCollection + "' Collection.", 4000); + mWindow->setInfoPopup(s); + mIsEditingCustom = false; + mEditingCollection = "Favorites"; +} + +// adds or removes a game from a specific collection +bool CollectionSystemManager::toggleGameInCollection(FileData* file) +{ + if (file->getType() == GAME) + { + GuiInfoPopup* s; + bool adding = true; + std::string name = file->getName(); + std::string sysName = mEditingCollection; + if (mIsEditingCustom) { - if (fs::is_directory(itr->status())) + SystemData* sysData = mEditingCollectionSystemData->system; + mEditingCollectionSystemData->needsSave = true; + if (!mEditingCollectionSystemData->isPopulated) { - //... here you have a directory - std::string folder = itr->path().string(); - folder = folder.substr(themePath.string().size()+1); + populateCustomCollection(mEditingCollectionSystemData); + } + std::string key = file->getFullPath(); + FileData* rootFolder = sysData->getRootFolder(); + const std::unordered_map& children = rootFolder->getChildrenByFilename(); + bool found = children.find(key) != children.end(); + FileFilterIndex* fileIndex = sysData->getIndex(); + std::string name = sysData->getName(); - if(fs::exists(set->second.getThemePath(folder))) + SystemData* systemViewToUpdate = getSystemToView(sysData); + + if (found) { + adding = false; + // if we found it, we need to remove it + FileData* collectionEntry = children.at(key); + // remove from index + fileIndex->removeFromIndex(collectionEntry); + // remove from bundle index as well, if needed + if(systemViewToUpdate != sysData) { - systems.push_back(folder); + systemViewToUpdate->getIndex()->removeFromIndex(collectionEntry); + } + ViewController::get()->getGameListView(systemViewToUpdate).get()->remove(collectionEntry, false); + } + else + { + // we didn't find it here, we should add it + CollectionFileData* newGame = new CollectionFileData(file, sysData); + rootFolder->addChild(newGame); + fileIndex->addToIndex(newGame); + ViewController::get()->getGameListView(systemViewToUpdate)->onFileChanged(newGame, FILE_METADATA_CHANGED); + rootFolder->sort(getSortTypeFromString(mEditingCollectionSystemData->decl.defaultSort)); + ViewController::get()->onFileChanged(systemViewToUpdate->getRootFolder(), FILE_SORTED); + // add to bundle index as well, if needed + if(systemViewToUpdate != sysData) + { + systemViewToUpdate->getIndex()->addToIndex(newGame); } } + updateCollectionFolderMetadata(sysData); } + else + { + MetaDataList* md = &file->getSourceFileData()->metadata; + std::string value = md->get("favorite"); + if (value == "false") + { + md->set("favorite", "true"); + } + else + { + adding = false; + md->set("favorite", "false"); + } + refreshCollectionSystems(file->getSourceFileData()); + } + if (adding) + { + s = new GuiInfoPopup(mWindow, "Added '" + removeParenthesis(name) + "' to '" + strToUpper(sysName) + "'", 4000); + } + else + { + s = new GuiInfoPopup(mWindow, "Removed '" + removeParenthesis(name) + "' from '" + strToUpper(sysName) + "'", 4000); + } + mWindow->setInfoPopup(s); + return true; } - std::sort(systems.begin(), systems.end()); - return systems; + return false; } -std::vector CollectionSystemManager::getAutoThemeFolders() +SystemData* CollectionSystemManager::getSystemToView(SystemData* sys) { - std::vector systems; - for(std::map::iterator it = mCollectionSystemDecls.begin() ; it != mCollectionSystemDecls.end() ; it++ ) + SystemData* systemToView = sys; + FileData* rootFolder = sys->getRootFolder(); + + FileData* bundleRootFolder = mCustomCollectionsBundle->getRootFolder(); + const std::unordered_map& bundleChildren = bundleRootFolder->getChildrenByFilename(); + + // is the rootFolder bundled in the "My Collections" system? + bool sysFoundInBundle = bundleChildren.find(rootFolder->getKey()) != bundleChildren.end(); + + if (sysFoundInBundle && sys->isCollection()) + { + systemToView = mCustomCollectionsBundle; + } + return systemToView; +} + +/* Handles loading a collection system, creating an empty one, and populating on demand */ +// loads Automatic Collection systems (All, Favorites, Last Played) +void CollectionSystemManager::initAutoCollectionSystems() +{ + for(std::map::iterator it = mCollectionSystemDeclsIndex.begin() ; it != mCollectionSystemDeclsIndex.end() ; it++ ) { CollectionSystemDecl sysDecl = it->second; if (!sysDecl.isCustom) { - systems.push_back(sysDecl.themeFolder); + createNewCollectionEntry(sysDecl.name, sysDecl); } } - return systems; } -bool CollectionSystemManager::isThemeAutoCompatible() +// this may come in handy if at any point in time in the future we want to +// automatically generate metadata for a folder +void CollectionSystemManager::updateCollectionFolderMetadata(SystemData* sys) { - std::vector cfgSys = getAutoThemeFolders(); - for(auto sysIt = cfgSys.begin(); sysIt != cfgSys.end(); sysIt++) + FileData* rootFolder = sys->getRootFolder(); + + std::string desc = "This collection is empty."; + std::string rating = "0"; + std::string players = "1"; + std::string releasedate = "N/A"; + std::string developer = "None"; + std::string genre = "None"; + std::string video = ""; + std::string thumbnail = ""; + + std::unordered_map games = rootFolder->getChildrenByFilename(); + + if(games.size() > 0) { - if(!themeFolderExists(*sysIt)) - return false; + std::string games_list = ""; + int games_counter = 0; + for(std::unordered_map::iterator iter = games.begin(); iter != games.end(); ++iter) + { + games_counter++; + FileData* file = iter->second; + + std::string new_rating = file->metadata.get("rating"); + std::string new_releasedate = file->metadata.get("releasedate"); + std::string new_developer = file->metadata.get("developer"); + std::string new_genre = file->metadata.get("genre"); + std::string new_players = file->metadata.get("players"); + + rating = (new_rating > rating ? (new_rating != "" ? new_rating : rating) : rating); + players = (new_players > players ? (new_players != "" ? new_players : players) : players); + releasedate = (new_releasedate < releasedate ? (new_releasedate != "" ? new_releasedate : releasedate) : releasedate); + developer = (developer == "None" ? new_developer : (new_developer != developer ? "Various" : new_developer)); + genre = (genre == "None" ? new_genre : (new_genre != genre ? "Various" : new_genre)); + + switch(games_counter) + { + case 2: + case 3: + games_list += ", "; + case 1: + games_list += "'" + file->getName() + "'"; + break; + case 4: + games_list += " among other titles."; + } + } + + desc = "This collection contains " + std::to_string(games_counter) + " games, including " + games_list; + + FileData* randomGame = sys->getRandomGame(); + + video = randomGame->getVideoPath(); + thumbnail = randomGame->getThumbnailPath(); } - return true; + + + rootFolder->metadata.set("desc", desc); + rootFolder->metadata.set("rating", rating); + rootFolder->metadata.set("players", players); + rootFolder->metadata.set("genre", genre); + rootFolder->metadata.set("releasedate", releasedate); + rootFolder->metadata.set("developer", developer); + rootFolder->metadata.set("video", video); + rootFolder->metadata.set("image", thumbnail); } -bool CollectionSystemManager::themeFolderExists(std::string folder) +void CollectionSystemManager::initCustomCollectionSystems() { - std::vector themeSys = getSystemsFromTheme(); - return std::find(themeSys.begin(), themeSys.end(), folder) != themeSys.end(); + std::vector systems = getCollectionsFromConfigFolder(); + for (auto nameIt = systems.begin(); nameIt != systems.end(); nameIt++) + { + addNewCustomCollection(*nameIt); + } } -std::vector CollectionSystemManager::getUnusedSystemsFromTheme() +SystemData* CollectionSystemManager::getAllGamesCollection() { - std::vector cfgSys = getSystemsFromConfig(); - std::vector themeSys = getSystemsFromTheme(); - for(auto sysIt = themeSys.begin(); sysIt != themeSys.end(); ) + CollectionSystemData* allSysData = &mAutoCollectionSystemsData["all"]; + if (!allSysData->isPopulated) + { + populateAutoCollection(allSysData); + } + return allSysData->system; +} + +SystemData* CollectionSystemManager::addNewCustomCollection(std::string name) +{ + CollectionSystemDecl decl = mCollectionSystemDeclsIndex[myCollectionsName]; + decl.themeFolder = name; + decl.name = name; + decl.longName = name; + return createNewCollectionEntry(name, decl); +} + +// creates a new, empty Collection system, based on the name and declaration +SystemData* CollectionSystemManager::createNewCollectionEntry(std::string name, CollectionSystemDecl sysDecl, bool index) +{ + SystemData* newSys = new SystemData(name, sysDecl.longName, mCollectionEnvData, sysDecl.themeFolder, true); + + CollectionSystemData newCollectionData; + newCollectionData.system = newSys; + newCollectionData.decl = sysDecl; + newCollectionData.isEnabled = false; + newCollectionData.isPopulated = false; + newCollectionData.needsSave = false; + + if (index) { - if (std::find(cfgSys.begin(), cfgSys.end(), *sysIt) != cfgSys.end()) + if (!sysDecl.isCustom) { - sysIt = themeSys.erase(sysIt); + mAutoCollectionSystemsData[name] = newCollectionData; } else { - sysIt++; + mCustomCollectionSystemsData[name] = newCollectionData; } } - return themeSys; + + return newSys; } -FileData::SortType CollectionSystemManager::getSortType(std::string desc) { - std::vector SortTypes = FileSorts::SortTypes; - // find it - for(unsigned int i = 0; i < FileSorts::SortTypes.size(); i++) +// populates an Automatic Collection System +void CollectionSystemManager::populateAutoCollection(CollectionSystemData* sysData) +{ + SystemData* newSys = sysData->system; + CollectionSystemDecl sysDecl = sysData->decl; + FileData* rootFolder = newSys->getRootFolder(); + FileFilterIndex* index = newSys->getIndex(); + for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) { - const FileData::SortType& sort = FileSorts::SortTypes.at(i); - if(sort.description == desc) - { - return sort; + // we won't iterate all collections + if ((*sysIt)->isGameSystem() && !(*sysIt)->isCollection()) { + std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(GAME); + for(auto gameIt = files.begin(); gameIt != files.end(); gameIt++) + { + bool include = includeFileInAutoCollections((*gameIt)); + switch(sysDecl.type) { + case AUTO_LAST_PLAYED: + include = include && (*gameIt)->metadata.get("playcount") > "0"; + break; + case AUTO_FAVORITES: + // we may still want to add files we don't want in auto collections in "favorites" + include = (*gameIt)->metadata.get("favorite") == "true"; + break; + } + + if (include) { + CollectionFileData* newGame = new CollectionFileData(*gameIt, newSys); + rootFolder->addChild(newGame); + index->addToIndex(newGame); + } + } } } - // if not found default to name, ascending - return FileSorts::SortTypes.at(0); + rootFolder->sort(getSortTypeFromString(sysDecl.defaultSort)); + sysData->isPopulated = true; } -void CollectionSystemManager::loadCollectionSystems() +// populates a Custom Collection System +void CollectionSystemManager::populateCustomCollection(CollectionSystemData* sysData) { - loadAutoCollectionSystems(); - // we will also load custom systems here in the future - loadCustomCollectionSystems(); - // Now see which ones are enabled - loadEnabledListFromSettings(); - // add to the main System Vector, and create Views as needed - updateSystemsList(); + SystemData* newSys = sysData->system; + sysData->isPopulated = true; + CollectionSystemDecl sysDecl = sysData->decl; + std::string path = getCustomCollectionConfigPath(newSys->getName()); + + if(!fs::exists(path)) + { + LOG(LogInfo) << "Couldn't find custom collection config file at " << path; + return; + } + LOG(LogInfo) << "Loading custom collection config file at " << path; + + FileData* rootFolder = newSys->getRootFolder(); + FileFilterIndex* index = newSys->getIndex(); + + // get Configuration for this Custom System + std::ifstream input(path); + + // get all files map + std::unordered_map allFilesMap = getAllGamesCollection()->getRootFolder()->getChildrenByFilename(); + + // iterate list of files in config file + + for(std::string gameKey; getline(input, gameKey); ) + { + std::unordered_map::iterator it = allFilesMap.find(gameKey); + if (it != allFilesMap.end()) { + CollectionFileData* newGame = new CollectionFileData(it->second, newSys); + rootFolder->addChild(newGame); + index->addToIndex(newGame); + } + else + { + LOG(LogInfo) << "Couldn't find game referenced at '" << gameKey << "' for system config '" << path << "'"; + } + } + rootFolder->sort(getSortTypeFromString(sysDecl.defaultSort)); + updateCollectionFolderMetadata(newSys); } -void CollectionSystemManager::updateSystemsList() +/* Handle System View removal and insertion of Collections */ +void CollectionSystemManager::removeCollectionsFromDisplayedSystems() { // remove all Collection Systems for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); ) @@ -255,187 +765,260 @@ void CollectionSystemManager::updateSystemsList() } } - // add enabled ones - for(std::map::iterator it = mAllCollectionSystems.begin() ; it != mAllCollectionSystems.end() ; it++ ) + // remove all custom collections in bundle + // this should not delete the objects from memory! + FileData* customRoot = mCustomCollectionsBundle->getRootFolder(); + std::vector mChildren = customRoot->getChildren(); + for(auto it = mChildren.begin(); it != mChildren.end(); it++) + { + customRoot->removeChild(*it); + } + // clear index + mCustomCollectionsBundle->getIndex()->resetIndex(); + // remove view so it's re-created as needed + ViewController::get()->removeGameListView(mCustomCollectionsBundle); +} + +void CollectionSystemManager::addEnabledCollectionsToDisplayedSystems(std::map* colSystemData) +{ + // add auto enabled ones + for(std::map::iterator it = colSystemData->begin() ; it != colSystemData->end() ; it++ ) { if(it->second.isEnabled) { - SystemData::sSystemVector.push_back(it->second.system); + // check if populated, otherwise populate + if (!it->second.isPopulated) + { + if(it->second.decl.isCustom) + { + populateCustomCollection(&(it->second)); + } + else + { + populateAutoCollection(&(it->second)); + } + } + // check if it has its own view + if(!it->second.decl.isCustom || themeFolderExists(it->first) || !Settings::getInstance()->getBool("UseCustomCollectionsSystem")) + { + // exists theme folder, or we chose not to bundle it under the custom-collections system + // so we need to create a view + SystemData::sSystemVector.push_back(it->second.system); + } + else + { + FileData* newSysRootFolder = it->second.system->getRootFolder(); + mCustomCollectionsBundle->getRootFolder()->addChild(newSysRootFolder); + mCustomCollectionsBundle->getIndex()->importIndex(it->second.system->getIndex()); + } } } +} + +/* Auxiliary methods to get available custom collection possibilities */ +std::vector CollectionSystemManager::getSystemsFromConfig() +{ + std::vector systems; + std::string path = SystemData::getConfigPath(false); + + if(!fs::exists(path)) + { + return systems; + } - // remove disabled gamelist views - // create gamelist views if needed - // iterate the map + pugi::xml_document doc; + pugi::xml_parse_result res = doc.load_file(path.c_str()); + + if(!res) + { + return systems; + } + + //actually read the file + pugi::xml_node systemList = doc.child("systemList"); + + if(!systemList) + { + return systems; + } + + for(pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) + { + // theme folder + std::string themeFolder = system.child("theme").text().get(); + systems.push_back(themeFolder); + } + std::sort(systems.begin(), systems.end()); + return systems; } -void CollectionSystemManager::loadAutoCollectionSystems() +// gets all folders from the current theme path +std::vector CollectionSystemManager::getSystemsFromTheme() { - for(std::map::iterator it = mCollectionSystemDecls.begin() ; it != mCollectionSystemDecls.end() ; it++ ) + std::vector systems; + + auto themeSets = ThemeData::getThemeSets(); + if(themeSets.empty()) { - CollectionSystemDecl sysDecl = it->second; - if (!sysDecl.isCustom && !findCollectionSystem(sysDecl.name)) - { - SystemData* newSys = new SystemData(sysDecl.name, sysDecl.longName, mCollectionEnvData, sysDecl.themeFolder, true); + // no theme sets available + return systems; + } + + auto set = themeSets.find(Settings::getInstance()->getString("ThemeSet")); + if(set == themeSets.end()) + { + // currently selected theme set is missing, so just pick the first available set + set = themeSets.begin(); + Settings::getInstance()->setString("ThemeSet", set->first); + } - FileData* rootFolder = newSys->getRootFolder(); - FileFilterIndex* index = newSys->getIndex(); - for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) + fs::path themePath = set->second.path; + + if (fs::exists(themePath)) + { + fs::directory_iterator end_itr; // default construction yields past-the-end + for (fs::directory_iterator itr(themePath); itr != end_itr; ++itr) + { + if (fs::is_directory(itr->status())) { - if ((*sysIt)->isGameSystem()) { - std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(GAME); - for(auto gameIt = files.begin(); gameIt != files.end(); gameIt++) - { - bool include = includeFileInAutoCollections((*gameIt)); - switch(sysDecl.type) { - case AUTO_LAST_PLAYED: - include = include && (*gameIt)->metadata.get("playcount") > "0"; - break; - case AUTO_FAVORITES: - // we may still want to add files we don't want in auto collections in "favorites" - include = (*gameIt)->metadata.get("favorite") == "true"; - break; - } - - if (include) { - CollectionFileData* newGame = new CollectionFileData(*gameIt, newSys); - rootFolder->addChild(newGame); - index->addToIndex(newGame); - } - } + //... here you have a directory + std::string folder = itr->path().string(); + folder = folder.substr(themePath.string().size()+1); + + if(fs::exists(set->second.getThemePath(folder))) + { + systems.push_back(folder); } } - rootFolder->sort(getSortType(sysDecl.defaultSort)); - mAutoCollectionSystems.push_back(newSys); - - CollectionSystemData newCollectionData; - newCollectionData.system = newSys; - newCollectionData.decl = sysDecl; - newCollectionData.isEnabled = false; - mAllCollectionSystems[sysDecl.name] = newCollectionData; } } + std::sort(systems.begin(), systems.end()); + return systems; } -void CollectionSystemManager::loadCustomCollectionSystems() +// returns the unused folders from current theme path +std::vector CollectionSystemManager::getUnusedSystemsFromTheme() { - // Load custom systems into memory - // Check unassigned theme folders - // Check settings string for selected/enabled systems, if there are any that aren't in the theme - // Check saved preferences for each of those and load them if we can - // Load settings to see which systems are Enabled -} + // get used systems in es_systems.cfg + std::vector systemsInUse = getSystemsFromConfig(); + // get available folders in theme + std::vector themeSys = getSystemsFromTheme(); + // get folders assigned to custom collections + std::vector autoSys = getCollectionThemeFolders(false); + // get folder assigned to custom collections + std::vector customSys = getCollectionThemeFolders(true); + // get folders assigned to user collections + std::vector userSys = getUserCollectionThemeFolders(); + // add them all to the list of systems in use + systemsInUse.insert(systemsInUse.end(), autoSys.begin(), autoSys.end()); + systemsInUse.insert(systemsInUse.end(), customSys.begin(), customSys.end()); + systemsInUse.insert(systemsInUse.end(), userSys.begin(), userSys.end()); -SystemData* CollectionSystemManager::findCollectionSystem(std::string name) -{ - for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) + for(auto sysIt = themeSys.begin(); sysIt != themeSys.end(); ) { - if ((*sysIt)->getName() == name) { - // found it! - return (*sysIt); + if (std::find(systemsInUse.begin(), systemsInUse.end(), *sysIt) != systemsInUse.end()) + { + sysIt = themeSys.erase(sysIt); + } + else + { + sysIt++; } } - return NULL; + return themeSys; } -// this updates all collection files related to the argument file -void CollectionSystemManager::updateCollectionSystems(FileData* file) +// returns which collection config files exist in the user folder +std::vector CollectionSystemManager::getCollectionsFromConfigFolder() { - // collection files use the full path as key, to avoid clashes - std::string key = file->getFullPath(); - // find games in collection systems - for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) + std::vector systems; + fs::path configPath = getCollectionsFolder(); + + if (fs::exists(configPath)) { - if ((*sysIt)->isCollection()) { - const std::unordered_map& children = (*sysIt)->getRootFolder()->getChildrenByFilename(); - bool found = children.find(key) != children.end(); - FileData* rootFolder = (*sysIt)->getRootFolder(); - FileFilterIndex* fileIndex = (*sysIt)->getIndex(); - std::string name = (*sysIt)->getName(); - if (found) { - // if we found it, we need to update it - FileData* collectionEntry = children.at(key); - // remove from index, so we can re-index metadata after refreshing - fileIndex->removeFromIndex(collectionEntry); - collectionEntry->refreshMetadata(); - if (name == "favorites" && file->metadata.get("favorite") == "false") { - // need to check if still marked as favorite, if not remove - ViewController::get()->getGameListView((*sysIt)).get()->remove(collectionEntry, false); - ViewController::get()->onFileChanged((*sysIt)->getRootFolder(), FILE_REMOVED); + fs::directory_iterator end_itr; // default construction yields past-the-end + for (fs::directory_iterator itr(configPath); itr != end_itr; ++itr) + { + if (fs::is_regular_file(itr->status())) + { + // it's a file + std::string file = itr->path().string(); + std::string filename = file.substr(configPath.string().size()); + + // need to confirm filename matches config format + if (boost::algorithm::ends_with(filename, ".cfg") && boost::algorithm::starts_with(filename, "custom-") && filename != "custom-.cfg") + { + filename = filename.substr(7, filename.size()-11); + systems.push_back(filename); } else { - // re-index with new metadata - fileIndex->addToIndex(collectionEntry); - ViewController::get()->onFileChanged(collectionEntry, FILE_METADATA_CHANGED); - } - } - else - { - // we didn't find it here - we need to check if we should add it - if (name == "recent" && file->metadata.get("playcount") > "0" || - name == "favorites" && file->metadata.get("favorite") == "true") { - CollectionFileData* newGame = new CollectionFileData(file, (*sysIt)); - rootFolder->addChild(newGame); - fileIndex->addToIndex(newGame); - ViewController::get()->onFileChanged(file, FILE_METADATA_CHANGED); - ViewController::get()->getGameListView((*sysIt))->onFileChanged(newGame, FILE_METADATA_CHANGED); + LOG(LogInfo) << "Found non-collection config file in collections folder: " << filename; } } - rootFolder->sort(getSortType(mCollectionSystemDecls[name].defaultSort)); - ViewController::get()->onFileChanged(rootFolder, FILE_SORTED); } } + return systems; } -// this deletes collection files from collection systems -void CollectionSystemManager::deleteCollectionFiles(FileData* file) +// returns the theme folders for Automatic Collections (All, Favorites, Last Played) or generic Custom Collections folder +std::vector CollectionSystemManager::getCollectionThemeFolders(bool custom) { - // collection files use the full path as key, to avoid clashes - std::string key = file->getFullPath(); - // find games in collection systems - for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) + std::vector systems; + for(std::map::iterator it = mCollectionSystemDeclsIndex.begin() ; it != mCollectionSystemDeclsIndex.end() ; it++ ) { - if ((*sysIt)->isCollection()) { - const std::unordered_map& children = (*sysIt)->getRootFolder()->getChildrenByFilename(); - - bool found = children.find(key) != children.end(); - if (found) { - FileData* collectionEntry = children.at(key); - ViewController::get()->getGameListView((*sysIt)).get()->remove(collectionEntry, false); - } + CollectionSystemDecl sysDecl = it->second; + if (sysDecl.isCustom == custom) + { + systems.push_back(sysDecl.themeFolder); } } + return systems; } -bool CollectionSystemManager::toggleGameInCollection(FileData* file, std::string collection) +// returns the theme folders in use for the user-defined Custom Collections +std::vector CollectionSystemManager::getUserCollectionThemeFolders() { - if (file->getType() == GAME) + std::vector systems; + for(std::map::iterator it = mCustomCollectionSystemsData.begin() ; it != mCustomCollectionSystemsData.end() ; it++ ) { - GuiInfoPopup* s; - - MetaDataList* md = &file->getSourceFileData()->metadata; - std::string value = md->get("favorite"); - if (value == "false") - { - md->set("favorite", "true"); - s = new GuiInfoPopup(mWindow, "Added '" + removeParenthesis(file->getName()) + "' to 'Favorites'", 4000); - }else - { - md->set("favorite", "false"); - s = new GuiInfoPopup(mWindow, "Removed '" + removeParenthesis(file->getName()) + "' from 'Favorites'", 4000); - } - mWindow->setInfoPopup(s); - updateCollectionSystems(file->getSourceFileData()); - return true; + systems.push_back(it->second.decl.themeFolder); } - return false; + return systems; +} + +// returns whether a specific folder exists in the theme +bool CollectionSystemManager::themeFolderExists(std::string folder) +{ + std::vector themeSys = getSystemsFromTheme(); + return std::find(themeSys.begin(), themeSys.end(), folder) != themeSys.end(); } bool CollectionSystemManager::includeFileInAutoCollections(FileData* file) { - // we exclude non-game files from collections (i.e. "kodi", at least) + // we exclude non-game files from collections (i.e. "kodi", entries from non-game systems) // if/when there are more in the future, maybe this can be a more complex method, with a proper list // but for now a simple string comparison is more performant - return file->getName() != "kodi"; + return file->getName() != "kodi" && file->getSystem()->isGameSystem(); +} + + +std::string getCustomCollectionConfigPath(std::string collectionName) +{ + fs::path path = getCollectionsFolder() + "custom-" + collectionName + ".cfg"; + return path.generic_string(); +} + +std::string getCollectionsFolder() +{ + return getHomePath() + "/.emulationstation/collections/"; +} + +bool systemSort(SystemData* sys1, SystemData* sys2) +{ + std::string name1 = sys1->getName(); + std::string name2 = sys2->getName(); + transform(name1.begin(), name1.end(), name1.begin(), ::toupper); + transform(name2.begin(), name2.end(), name2.begin(), ::toupper); + return name1.compare(name2) < 0; } \ No newline at end of file diff --git a/es-app/src/CollectionSystemManager.h b/es-app/src/CollectionSystemManager.h index 9482786d29..87993d4bfb 100644 --- a/es-app/src/CollectionSystemManager.h +++ b/es-app/src/CollectionSystemManager.h @@ -34,6 +34,8 @@ struct CollectionSystemData SystemData* system; CollectionSystemDecl decl; bool isEnabled; + bool isPopulated; + bool needsSave; }; class CollectionSystemManager @@ -41,34 +43,73 @@ class CollectionSystemManager public: CollectionSystemManager(Window* window); ~CollectionSystemManager(); - static void init(Window* window); + static CollectionSystemManager* get(); - void loadEnabledListFromSettings(); + static void init(Window* window); + static void deinit(); + void saveCustomCollection(SystemData* sys); + void loadCollectionSystems(); - void updateCollectionSystems(FileData* file); - void deleteCollectionFiles(FileData* file); - inline std::map getCollectionSystems() { return mAllCollectionSystems; }; + void loadEnabledListFromSettings(); void updateSystemsList(); - bool isThemeAutoCompatible(); - bool toggleGameInCollection(FileData* file, std::string collection); + + void refreshCollectionSystems(FileData* file); + void updateCollectionSystem(FileData* file, CollectionSystemData sysData); + void deleteCollectionFiles(FileData* file); + + inline std::map getAutoCollectionSystems() { return mAutoCollectionSystemsData; }; + inline std::map getCustomCollectionSystems() { return mCustomCollectionSystemsData; }; + inline SystemData* getCustomCollectionsBundle() { return mCustomCollectionsBundle; }; + std::vector getUnusedSystemsFromTheme(); + SystemData* addNewCustomCollection(std::string name); + + bool isThemeGenericCollectionCompatible(bool genericCustomCollections); + bool isThemeCustomCollectionCompatible(std::vector stringVector); + std::string getValidNewCollectionName(std::string name, int index = 0); + + void setEditMode(std::string collectionName); + void exitEditMode(); + inline bool isEditing() { return mIsEditingCustom; }; + inline std::string getEditingCollection() { std::string res = mEditingCollection; return res; }; + bool toggleGameInCollection(FileData* file); + + SystemData* getSystemToView(SystemData* sys); + void updateCollectionFolderMetadata(SystemData* sys); private: static CollectionSystemManager* sInstance; - std::map mCollectionSystemDecls; SystemEnvironmentData* mCollectionEnvData; - static FileData::SortType getSortType(std::string desc); - void initAvailableSystemsList(); + std::map mCollectionSystemDeclsIndex; + std::map mAutoCollectionSystemsData; + std::map mCustomCollectionSystemsData; + Window* mWindow; + bool mIsEditingCustom; + std::string mEditingCollection; + CollectionSystemData* mEditingCollectionSystemData; + + void initAutoCollectionSystems(); + void initCustomCollectionSystems(); + SystemData* getAllGamesCollection(); + SystemData* createNewCollectionEntry(std::string name, CollectionSystemDecl sysDecl, bool index = true); + void populateAutoCollection(CollectionSystemData* sysData); + void populateCustomCollection(CollectionSystemData* sysData); + + void removeCollectionsFromDisplayedSystems(); + void addEnabledCollectionsToDisplayedSystems(std::map* colSystemData); + std::vector getSystemsFromConfig(); std::vector getSystemsFromTheme(); - std::vector getUnusedSystemsFromTheme(); - std::vector getAutoThemeFolders(); + std::vector getCollectionsFromConfigFolder(); + std::vector getCollectionThemeFolders(bool custom); + std::vector getUserCollectionThemeFolders(); + bool themeFolderExists(std::string folder); - void loadAutoCollectionSystems(); - void loadCustomCollectionSystems(); // TO DO NEXT - SystemData* findCollectionSystem(std::string name); + bool includeFileInAutoCollections(FileData* file); - std::map mAllCollectionSystems; - std::vector mAutoCollectionSystems; - std::vector mCustomCollectionSystems; - Window* mWindow; + + SystemData* mCustomCollectionsBundle; }; + +std::string getCustomCollectionConfigPath(std::string collectionName); +std::string getCollectionsFolder(); +bool systemSort(SystemData* sys1, SystemData* sys2); diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 8352b6c520..892c701a35 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -23,7 +23,8 @@ FileData::~FileData() if(mParent) mParent->removeChild(this); - mSystem->getIndex()->removeFromIndex(this); + if(mType == GAME) + mSystem->getIndex()->removeFromIndex(this); mChildren.clear(); } @@ -57,7 +58,7 @@ const std::string& FileData::getName() const std::vector& FileData::getChildrenListToDisplay() { - FileFilterIndex* idx = mSystem->getIndex(); + FileFilterIndex* idx = CollectionSystemManager::get()->getSystemToView(mSystem)->getIndex(); if (idx->isFiltered()) { mFilteredChildren.clear(); for(auto it = mChildren.begin(); it != mChildren.end(); it++) @@ -140,6 +141,7 @@ void FileData::removeChild(FileData* file) { if(*it == file) { + file->mParent = NULL; mChildren.erase(it); return; } @@ -210,14 +212,11 @@ void FileData::launchGame(Window* window) //update last played time boost::posix_time::ptime time = boost::posix_time::second_clock::universal_time(); gameToUpdate->metadata.setTime("lastplayed", time); - CollectionSystemManager::get()->updateCollectionSystems(gameToUpdate); + CollectionSystemManager::get()->refreshCollectionSystems(gameToUpdate); } CollectionFileData::CollectionFileData(FileData* file, SystemData* system) - : FileData(file->getType(), file->getPath(), file->getSystemEnvData(), system)/*, - mSourceFileData(file->getSourceFileData()), - mParent(NULL), - metadata(file->getSourceFileData()->metadata)*/ + : FileData(file->getSourceFileData()->getType(), file->getSourceFileData()->getPath(), file->getSourceFileData()->getSystemEnvData(), system) { // we use this constructor to create a clone of the filedata, and change its system mSourceFileData = file->getSourceFileData(); @@ -259,4 +258,20 @@ const std::string& CollectionFileData::getName() mDirty = false; } return mCollectionFileName; +} + +// returns Sort Type based on a string description +FileData::SortType getSortTypeFromString(std::string desc) { + std::vector SortTypes = FileSorts::SortTypes; + // find it + for(unsigned int i = 0; i < FileSorts::SortTypes.size(); i++) + { + const FileData::SortType& sort = FileSorts::SortTypes.at(i); + if(sort.description == desc) + { + return sort; + } + } + // if not found default to name, ascending + return FileSorts::SortTypes.at(0); } \ No newline at end of file diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 425f7f9817..0ce34f9bb2 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -114,4 +114,6 @@ class CollectionFileData : public FileData // needs to be updated when metadata changes std::string mCollectionFileName; bool mDirty; -}; \ No newline at end of file +}; + +FileData::SortType getSortTypeFromString(std::string desc); \ No newline at end of file diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index 3f60539d80..0f35db14b6 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -20,11 +20,7 @@ FileFilterIndex::FileFilterIndex() FileFilterIndex::~FileFilterIndex() { - clearIndex(genreIndexAllKeys); - clearIndex(playersIndexAllKeys); - clearIndex(pubDevIndexAllKeys); - clearIndex(ratingsIndexAllKeys); - clearIndex(favoritesIndexAllKeys); + resetIndex(); } std::vector& FileFilterIndex::getFilterDataDecls() @@ -32,6 +28,50 @@ std::vector& FileFilterIndex::getFilterDataDecls() return filterDataDecl; } +void FileFilterIndex::importIndex(FileFilterIndex* indexToImport) +{ + struct IndexImportStructure + { + std::map* destinationIndex; + std::map* sourceIndex; + }; + + IndexImportStructure indexStructDecls[] = { + { &genreIndexAllKeys, &(indexToImport->genreIndexAllKeys) }, + { &playersIndexAllKeys, &(indexToImport->playersIndexAllKeys) }, + { &pubDevIndexAllKeys, &(indexToImport->pubDevIndexAllKeys) }, + { &ratingsIndexAllKeys, &(indexToImport->ratingsIndexAllKeys) }, + { &favoritesIndexAllKeys, &(indexToImport->favoritesIndexAllKeys) } + }; + + std::vector indexImportDecl = std::vector(indexStructDecls, indexStructDecls + sizeof(indexStructDecls) / sizeof(indexStructDecls[0])); + + for (std::vector::iterator indexesIt = indexImportDecl.begin(); indexesIt != indexImportDecl.end(); ++indexesIt ) + { + for (std::map::iterator sourceIt = (*indexesIt).sourceIndex->begin(); sourceIt != (*indexesIt).sourceIndex->end(); ++sourceIt ) + { + if ((*indexesIt).destinationIndex->find((*sourceIt).first) == (*indexesIt).destinationIndex->end()) + { + // entry doesn't exist + (*((*indexesIt).destinationIndex))[(*sourceIt).first] = (*sourceIt).second; + } + else + { + (*((*indexesIt).destinationIndex))[(*sourceIt).first] += (*sourceIt).second; + } + } + } +} +void FileFilterIndex::resetIndex() +{ + clearAllFilters(); + clearIndex(genreIndexAllKeys); + clearIndex(playersIndexAllKeys); + clearIndex(pubDevIndexAllKeys); + clearIndex(ratingsIndexAllKeys); + clearIndex(favoritesIndexAllKeys); +} + std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary) { std::string key = ""; @@ -170,21 +210,21 @@ void FileFilterIndex::clearAllFilters() void FileFilterIndex::debugPrintIndexes() { - LOG(LogError) << "Printing Indexes..."; + LOG(LogInfo) << "Printing Indexes..."; for (auto x: playersIndexAllKeys) { - LOG(LogError) << "Multiplayer Index: " << x.first << ": " << x.second; + LOG(LogInfo) << "Multiplayer Index: " << x.first << ": " << x.second; } for (auto x: genreIndexAllKeys) { - LOG(LogError) << "Genre Index: " << x.first << ": " << x.second; + LOG(LogInfo) << "Genre Index: " << x.first << ": " << x.second; } for (auto x: ratingsIndexAllKeys) { - LOG(LogError) << "Ratings Index: " << x.first << ": " << x.second; + LOG(LogInfo) << "Ratings Index: " << x.first << ": " << x.second; } for (auto x: pubDevIndexAllKeys) { - LOG(LogError) << "PubDev Index: " << x.first << ": " << x.second; + LOG(LogInfo) << "PubDev Index: " << x.first << ": " << x.second; } for (auto x: favoritesIndexAllKeys) { - LOG(LogError) << "Favorites Index: " << x.first << ": " << x.second; + LOG(LogInfo) << "Favorites Index: " << x.first << ": " << x.second; } } diff --git a/es-app/src/FileFilterIndex.h b/es-app/src/FileFilterIndex.h index d1e62d9487..8865883119 100644 --- a/es-app/src/FileFilterIndex.h +++ b/es-app/src/FileFilterIndex.h @@ -45,6 +45,9 @@ class FileFilterIndex bool isFiltered() { return (filterByGenre || filterByPlayers || filterByPubDev || filterByRatings || filterByFavorites); }; bool isKeyBeingFilteredBy(std::string key, FilterIndexType type); std::vector& getFilterDataDecls(); + + void importIndex(FileFilterIndex* indexToImport); + void resetIndex(); private: std::vector filterDataDecl; std::string getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary); diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index afb426c95c..29e09e975e 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -426,8 +426,11 @@ FileData* SystemData::getRandomGame() { std::vector list = mRootFolder->getFilesRecursive(GAME, true); unsigned int total = list.size(); + int target = 0; // get random number in range - int target = std::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); + if (total == 0) + return NULL; + target = std::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); return list.at(target); } diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.cpp b/es-app/src/guis/GuiCollectionSystemsOptions.cpp index 23833a1143..d3487542b1 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.cpp +++ b/es-app/src/guis/GuiCollectionSystemsOptions.cpp @@ -1,8 +1,11 @@ #include "guis/GuiCollectionSystemsOptions.h" #include "guis/GuiMsgBox.h" +#include "guis/GuiTextEditPopup.h" #include "Settings.h" #include "views/ViewController.h" +#include "guis/GuiSettings.h" +#include "Util.h" #include "components/TextComponent.h" #include "components/OptionListComponent.h" @@ -15,66 +18,172 @@ void GuiCollectionSystemsOptions::initializeMenu() { addChild(&mMenu); - // get virtual systems + // get collections addSystemsToMenu(); + // add "Create New Custom Collection from Theme" + + std::vector unusedFolders = CollectionSystemManager::get()->getUnusedSystemsFromTheme(); + if (unusedFolders.size() > 0) + { + addEntry("CREATE NEW CUSTOM COLLECTION FROM THEME", 0x777777FF, true, + [this, unusedFolders] { + auto s = new GuiSettings(mWindow, "SELECT THEME FOLDER"); + std::shared_ptr< OptionListComponent > folderThemes = std::make_shared< OptionListComponent >(mWindow, "SELECT THEME FOLDER", true); + + // add Custom Systems + for(auto it = unusedFolders.begin() ; it != unusedFolders.end() ; it++ ) + { + ComponentListRow row; + std::string name = *it; + + std::function createCollectionCall = [name, this, s] { + createCollection(name); + }; + row.makeAcceptInputHandler(createCollectionCall); + + auto themeFolder = std::make_shared(mWindow, strToUpper(name), Font::get(FONT_SIZE_SMALL), 0x777777FF); + row.addElement(themeFolder, true); + s->addRow(row); + } + mWindow->pushGui(s); + }); + } + + ComponentListRow row; + row.addElement(std::make_shared(mWindow, "CREATE NEW CUSTOM COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + auto createCustomCollection = [this](const std::string& newVal) { + std::string name = newVal; + // we need to store the first Gui and remove it, as it'll be deleted by the actual Gui + Window* window = mWindow; + GuiComponent* topGui = window->peekGui(); + window->removeGui(topGui); + createCollection(name); + }; + row.makeAcceptInputHandler([this, createCustomCollection] { + mWindow->pushGui(new GuiTextEditPopup(mWindow, "New Collection Name", "", createCustomCollection, false)); + }); + + mMenu.addRow(row); + + bundleCustomCollections = std::make_shared(mWindow); + bundleCustomCollections->setState(Settings::getInstance()->getBool("UseCustomCollectionsSystem")); + mMenu.addWithLabel("GROUP UNTHEMED CUSTOM COLLECTIONS", bundleCustomCollections); + + sortAllSystemsSwitch = std::make_shared(mWindow); + sortAllSystemsSwitch->setState(Settings::getInstance()->getBool("SortAllSystems")); + mMenu.addWithLabel("SORT CUSTOM COLLECTIONS AND SYSTEMS", sortAllSystemsSwitch); + + if(CollectionSystemManager::get()->isEditing()) + { + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "FINISH EDITING '" + strToUpper(CollectionSystemManager::get()->getEditingCollection()) + "' COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.makeAcceptInputHandler(std::bind(&GuiCollectionSystemsOptions::exitEditMode, this)); + mMenu.addRow(row); + } + mMenu.addButton("BACK", "back", std::bind(&GuiCollectionSystemsOptions::applySettings, this)); mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); } +void GuiCollectionSystemsOptions::addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func) +{ + std::shared_ptr font = Font::get(FONT_SIZE_MEDIUM); + + // populate the list + ComponentListRow row; + row.addElement(std::make_shared(mWindow, name, font, color), true); + + if(add_arrow) + { + std::shared_ptr bracket = makeArrow(mWindow); + row.addElement(bracket, false); + } + + row.makeAcceptInputHandler(func); + + mMenu.addRow(row); +} + +void GuiCollectionSystemsOptions::createCollection(std::string inName) { + std::string name = CollectionSystemManager::get()->getValidNewCollectionName(inName); + SystemData* newSys = CollectionSystemManager::get()->addNewCustomCollection(name); + customOptionList->add(name, name, true); + std::string outAuto = vectorToCommaString(autoOptionList->getSelectedObjects()); + std::string outCustom = vectorToCommaString(customOptionList->getSelectedObjects()); + updateSettings(outAuto, outCustom); + ViewController::get()->goToSystemView(newSys); + + Window* window = mWindow; + CollectionSystemManager::get()->setEditMode(name); + while(window->peekGui() && window->peekGui() != ViewController::get()) + delete window->peekGui(); + return; +} + +void GuiCollectionSystemsOptions::exitEditMode() +{ + CollectionSystemManager::get()->exitEditMode(); + applySettings(); +} + GuiCollectionSystemsOptions::~GuiCollectionSystemsOptions() { - //mSystemOptions.clear(); + } void GuiCollectionSystemsOptions::addSystemsToMenu() { - std::map vSystems = CollectionSystemManager::get()->getCollectionSystems(); + std::map autoSystems = CollectionSystemManager::get()->getAutoCollectionSystems(); autoOptionList = std::make_shared< OptionListComponent >(mWindow, "SELECT COLLECTIONS", true); - // add Systems - ComponentListRow row; - - for(std::map::iterator it = vSystems.begin() ; it != vSystems.end() ; it++ ) + // add Auto Systems + for(std::map::iterator it = autoSystems.begin() ; it != autoSystems.end() ; it++ ) { autoOptionList->add(it->second.decl.longName, it->second.decl.name, it->second.isEnabled); } - mMenu.addWithLabel("AUTOMATIC COLLECTIONS", autoOptionList); + mMenu.addWithLabel("AUTOMATIC GAME COLLECTIONS", autoOptionList); + + std::map customSystems = CollectionSystemManager::get()->getCustomCollectionSystems(); + + customOptionList = std::make_shared< OptionListComponent >(mWindow, "SELECT COLLECTIONS", true); + + // add Custom Systems + for(std::map::iterator it = customSystems.begin() ; it != customSystems.end() ; it++ ) + { + customOptionList->add(it->second.decl.longName, it->second.decl.name, it->second.isEnabled); + } + mMenu.addWithLabel("CUSTOM GAME COLLECTIONS", customOptionList); } void GuiCollectionSystemsOptions::applySettings() { - std::string out = commaStringToVector(autoOptionList->getSelectedObjects()); - std::string prev = Settings::getInstance()->getString("CollectionSystemsAuto"); - if (out != "" && !CollectionSystemManager::get()->isThemeAutoCompatible()) - { - mWindow->pushGui(new GuiMsgBox(mWindow, - "Your theme does not support game collections. Please update your theme, or ensure that you use a theme that contains the folders:\n\n• auto-favorites\n• auto-lastplayed\n• auto-allgames\n\nDo you still want to enable collections?", - "YES", [this, out, prev] { - if (prev != out) - { - updateSettings(out); - } - delete this; }, - "NO", [this] { delete this; })); - } - else + std::string outAuto = vectorToCommaString(autoOptionList->getSelectedObjects()); + std::string prevAuto = Settings::getInstance()->getString("CollectionSystemsAuto"); + std::string outCustom = vectorToCommaString(customOptionList->getSelectedObjects()); + std::string prevCustom = Settings::getInstance()->getString("CollectionSystemsCustom"); + bool outSort = sortAllSystemsSwitch->getState(); + bool prevSort = Settings::getInstance()->getBool("SortAllSystems"); + bool outBundle = bundleCustomCollections->getState(); + bool prevBundle = Settings::getInstance()->getBool("UseCustomCollectionsSystem"); + bool needUpdateSettings = prevAuto != outAuto || prevCustom != outCustom || outSort != prevSort || outBundle != prevBundle; + if (needUpdateSettings) { - if (prev != out) - { - updateSettings(out); - } - delete this; + updateSettings(outAuto, outCustom); } + delete this; } -void GuiCollectionSystemsOptions::updateSettings(std::string newSettings) +void GuiCollectionSystemsOptions::updateSettings(std::string newAutoSettings, std::string newCustomSettings) { - Settings::getInstance()->setString("CollectionSystemsAuto", newSettings); + Settings::getInstance()->setString("CollectionSystemsAuto", newAutoSettings); + Settings::getInstance()->setString("CollectionSystemsCustom", newCustomSettings); + Settings::getInstance()->setBool("SortAllSystems", sortAllSystemsSwitch->getState()); + Settings::getInstance()->setBool("UseCustomCollectionsSystem", bundleCustomCollections->getState()); Settings::getInstance()->saveFile(); CollectionSystemManager::get()->loadEnabledListFromSettings(); CollectionSystemManager::get()->updateSystemsList(); diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.h b/es-app/src/guis/GuiCollectionSystemsOptions.h index 739aecd1b2..39748e7c8d 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.h +++ b/es-app/src/guis/GuiCollectionSystemsOptions.h @@ -4,6 +4,7 @@ #include "SystemData.h" #include "components/MenuComponent.h" #include "CollectionSystemManager.h" +#include "components/SwitchComponent.h" #include "Log.h" @@ -24,8 +25,14 @@ class GuiCollectionSystemsOptions : public GuiComponent void initializeMenu(); void applySettings(); void addSystemsToMenu(); - void updateSettings(std::string newSettings); + void addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func); + void updateSettings(std::string newAutoSettings, std::string newCustomSettings); + void createCollection(std::string inName); + void exitEditMode(); std::shared_ptr< OptionListComponent > autoOptionList; + std::shared_ptr< OptionListComponent > customOptionList; + std::shared_ptr sortAllSystemsSwitch; + std::shared_ptr bundleCustomCollections; MenuComponent mMenu; SystemData* mSystem; }; diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 9fc36694a4..ef48600cda 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -1,5 +1,6 @@ #include "GuiGamelistOptions.h" #include "GuiMetaDataEd.h" +#include "Util.h" #include "views/gamelist/IGameListView.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" @@ -54,14 +55,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui } mMenu.addWithLabel("SORT GAMES BY", mListSort); - - row.elements.clear(); - row.addElement(std::make_shared(mWindow, "EDIT THIS GAME'S METADATA", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.addElement(makeArrow(mWindow), false); - row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openMetaDataEd, this)); - mMenu.addRow(row); } - // show filtered menu row.elements.clear(); row.addElement(std::make_shared(mWindow, "FILTER GAMELIST", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); @@ -69,6 +63,33 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openGamelistFilter, this)); mMenu.addRow(row); + std::map customCollections = CollectionSystemManager::get()->getCustomCollectionSystems(); + if((customCollections.find(system->getName()) != customCollections.end() && CollectionSystemManager::get()->getEditingCollection() != system->getName()) || + CollectionSystemManager::get()->getCustomCollectionsBundle()->getName() == system->getName()) + { + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "ADD/REMOVE GAMES TO THIS GAME COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::startEditMode, this)); + mMenu.addRow(row); + } + + if(CollectionSystemManager::get()->isEditing()) + { + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "FINISH EDITING '" + strToUpper(CollectionSystemManager::get()->getEditingCollection()) + "' COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::exitEditMode, this)); + mMenu.addRow(row); + } + + if (!fromPlaceholder && !(mSystem->isCollection() && file->getType() == FOLDER)) { + + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "EDIT THIS GAME'S METADATA", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(makeArrow(mWindow), false); + row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openMetaDataEd, this)); + mMenu.addRow(row); + } + // center the menu setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, (mSize.y() - mMenu.getSize().y()) / 2); @@ -78,7 +99,7 @@ GuiGamelistOptions::~GuiGamelistOptions() { // apply sort if (!fromPlaceholder) { - FileData* root = getGamelist()->getCursor()->getSystem()->getRootFolder(); + FileData* root = mSystem->getRootFolder(); root->sort(*mListSort->getSelected()); // will also recursively sort children // notify that the root folder was sorted @@ -86,17 +107,10 @@ GuiGamelistOptions::~GuiGamelistOptions() } if (mFiltersChanged) { - if (!fromPlaceholder) { - FileData* root = getGamelist()->getCursor()->getSystem()->getRootFolder(); - getGamelist()->onFileChanged(root, FILE_SORTED); - } - else - { - // only reload full view if we came from a placeholder - // as we need to re-display the remaining elements for whatever new - // game is selected - ViewController::get()->reloadGameListView(mSystem); - } + // only reload full view if we came from a placeholder + // as we need to re-display the remaining elements for whatever new + // game is selected + ViewController::get()->reloadGameListView(mSystem); } } @@ -107,6 +121,34 @@ void GuiGamelistOptions::openGamelistFilter() mWindow->pushGui(ggf); } +void GuiGamelistOptions::startEditMode() +{ + std::string editingSystem = mSystem->getName(); + // need to check if we're editing the collections bundle, as we will want to edit the selected collection within + if(editingSystem == CollectionSystemManager::get()->getCustomCollectionsBundle()->getName()) + { + FileData* file = getGamelist()->getCursor(); + // do we have the cursor on a specific collection? + if (file->getType() == FOLDER) + { + editingSystem = file->getName(); + } + else + { + // we are inside a specific collection. We want to edit that one. + editingSystem = file->getSystem()->getName(); + } + } + CollectionSystemManager::get()->setEditMode(editingSystem); + delete this; +} + +void GuiGamelistOptions::exitEditMode() +{ + CollectionSystemManager::get()->exitEditMode(); + delete this; +} + void GuiGamelistOptions::openMetaDataEd() { // open metadata editor diff --git a/es-app/src/guis/GuiGamelistOptions.h b/es-app/src/guis/GuiGamelistOptions.h index 8088997d10..04854e0c1d 100644 --- a/es-app/src/guis/GuiGamelistOptions.h +++ b/es-app/src/guis/GuiGamelistOptions.h @@ -19,6 +19,8 @@ class GuiGamelistOptions : public GuiComponent private: void openGamelistFilter(); void openMetaDataEd(); + void startEditMode(); + void exitEditMode(); void jumpToLetter(); MenuComponent mMenu; diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 696e444e2c..8973cc0f04 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -234,7 +234,10 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN Settings::getInstance()->setString("ThemeSet", theme_set->getSelected()); if(needReload) + { + CollectionSystemManager::get()->updateSystemsList(); ViewController::get()->reloadAll(); // TODO - replace this with some sort of signal-based implementation + } }); } diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index e6a722ce00..45f31b8c60 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -194,7 +194,7 @@ void GuiMetaDataEd::save() mSavedCallback(); // update respective Collection Entries - CollectionSystemManager::get()->updateCollectionSystems(mScraperParams.game); + CollectionSystemManager::get()->refreshCollectionSystems(mScraperParams.game); } void GuiMetaDataEd::fetch() diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 414f2b145b..058121e65a 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -376,6 +376,7 @@ int main(int argc, char* argv[]) delete window.peekGui(); window.deinit(); + CollectionSystemManager::deinit(); SystemData::deleteSystems(); LOG(LogInfo) << "EmulationStation cleanly shutting down."; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index cb7b66a496..c3cb1484d0 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -271,6 +271,17 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) } } +void ViewController::removeGameListView(SystemData* system) +{ + //if we already made one, return that one + auto exists = mGameListViews.find(system); + if(exists != mGameListViews.end()) + { + exists->second.reset(); + mGameListViews.erase(system); + } +} + std::shared_ptr ViewController::getGameListView(SystemData* system) { //if we already made one, return that one diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 623796ac83..94ed9f5625 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -77,6 +77,7 @@ class ViewController : public GuiComponent std::shared_ptr getGameListView(SystemData* system); std::shared_ptr getSystemListView(); + void removeGameListView(SystemData* system); private: ViewController(Window* window); diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 1202da1186..38c47ea96c 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -42,10 +42,9 @@ void BasicGameListView::onFileChanged(FileData* file, FileChangeType change) void BasicGameListView::populateList(const std::vector& files) { mList.clear(); + mHeaderText.setText(mRoot->getSystem()->getFullName()); if (files.size() > 0) { - mHeaderText.setText(files.at(0)->getSystem()->getFullName()); - for(auto it = files.begin(); it != files.end(); it++) { mList.add((*it)->getName(), *it, ((*it)->getType() == FOLDER)); @@ -143,7 +142,10 @@ std::vector BasicGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("select", "options")); prompts.push_back(HelpPrompt("x", "random")); - if(Settings::getInstance()->getString("CollectionSystemsAuto").find("favorites") != std::string::npos && mRoot->getSystem()->isGameSystem()) - prompts.push_back(HelpPrompt("y", "favorite")); + if(mRoot->getSystem()->isGameSystem()) + { + const char* prompt = CollectionSystemManager::get()->getEditingCollection().c_str(); + prompts.push_back(HelpPrompt("y", prompt)); + } return prompts; } diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 3b468f4458..63325b520f 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -93,6 +93,8 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) { mCursorStack.push(cursor); populateList(cursor->getChildrenListToDisplay()); + FileData* cursor = getCursor(); + setCursor(cursor); } } @@ -107,7 +109,12 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) Sound::getFromTheme(getTheme(), getName(), "back")->play(); }else{ onFocusLost(); - ViewController::get()->goToSystemView(getCursor()->getSystem()); + SystemData* systemToView = getCursor()->getSystem(); + if (systemToView->isCollection()) + { + systemToView = CollectionSystemManager::get()->getSystemToView(systemToView); + } + ViewController::get()->goToSystemView(systemToView); } return true; @@ -130,14 +137,17 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) }else if (config->isMappedTo("x", input)) { // go to random system game - setCursor(mRoot->getSystem()->getRandomGame()); - //ViewController::get()->goToRandomGame(); + FileData* randomGame = getCursor()->getSystem()->getRandomGame(); + if (randomGame) + { + setCursor(randomGame); + } return true; }else if (config->isMappedTo("y", input)) { - if(Settings::getInstance()->getString("CollectionSystemsAuto").find("favorites") != std::string::npos && mRoot->getSystem()->isGameSystem()) + if(mRoot->getSystem()->isGameSystem()) { - if(CollectionSystemManager::get()->toggleGameInCollection(getCursor(), "favorites")) + if(CollectionSystemManager::get()->toggleGameInCollection(getCursor())) { return true; } diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index bca120639b..936d5b84f0 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -99,6 +99,9 @@ void Settings::setDefaults() // Audio out device for Video playback using OMX player. mStringMap["OMXAudioDev"] = "both"; mStringMap["CollectionSystemsAuto"] = ""; + mStringMap["CollectionSystemsCustom"] = ""; + mBoolMap["SortAllSystems"] = false; + mBoolMap["UseCustomCollectionsSystem"] = true; // Audio out device for volume control #ifdef _RPI_ diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index 3a323ff0b8..cc6981e852 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -296,12 +296,14 @@ std::vector commaStringToVector(std::string commaString) // from a comma separated string, get a vector of strings std::vector strs; boost::split(strs, commaString, boost::is_any_of(",")); + std::sort(strs.begin(), strs.end()); return strs; } -std::string commaStringToVector(std::vector stringVector) +std::string vectorToCommaString(std::vector stringVector) { std::string out = ""; + std::sort(stringVector.begin(), stringVector.end()); // from a vector of system names get comma separated string for(std::vector::iterator it = stringVector.begin() ; it != stringVector.end() ; it++ ) { diff --git a/es-core/src/Util.h b/es-core/src/Util.h index f75d152148..66568d8235 100644 --- a/es-core/src/Util.h +++ b/es-core/src/Util.h @@ -46,4 +46,4 @@ std::string removeParenthesis(const std::string& str); std::vector commaStringToVector(std::string commaString); // turn a vector of strings into a comma-separated string -std::string commaStringToVector(std::vector stringVector); \ No newline at end of file +std::string vectorToCommaString(std::vector stringVector); \ No newline at end of file From 7a1ad26a93f18de9a9f9de59fdbb35f52af91604 Mon Sep 17 00:00:00 2001 From: Benjamin D Date: Thu, 17 Aug 2017 19:36:32 +0200 Subject: [PATCH 144/603] Res2h Update The ressources were regenerated using lastest version of Res2h (last commit : 6 Febrary 2017 added 32/64 bits archive support) --- data/ResourceUtil.cpp | 174 ++++++++-------- data/Resources.h | 192 +++++++++--------- data/converted/arrow_svg.cpp | 6 +- data/converted/busy_0_svg.cpp | 6 +- data/converted/busy_1_svg.cpp | 6 +- data/converted/busy_2_svg.cpp | 6 +- data/converted/busy_3_svg.cpp | 6 +- data/converted/button_filled_png.cpp | 6 +- data/converted/button_png.cpp | 6 +- data/converted/checkbox_checked_svg.cpp | 6 +- data/converted/checkbox_unchecked_svg.cpp | 6 +- data/converted/fav_add_svg.cpp | 6 +- data/converted/fav_remove_svg.cpp | 6 +- data/converted/frame_png.cpp | 6 +- ...down_svg.cpp => help__analog_down_svg.cpp} | 6 +- ...left_svg.cpp => help__analog_left_svg.cpp} | 6 +- ...ght_svg.cpp => help__analog_right_svg.cpp} | 6 +- ...umb_svg.cpp => help__analog_thumb_svg.cpp} | 6 +- ...log_up_svg.cpp => help__analog_up_svg.cpp} | 6 +- ...utton_a_svg.cpp => help__button_a_svg.cpp} | 6 +- ...utton_b_svg.cpp => help__button_b_svg.cpp} | 6 +- ...ey_svg.cpp => help__button_hotkey_svg.cpp} | 6 +- ...utton_l_svg.cpp => help__button_l_svg.cpp} | 6 +- ...utton_r_svg.cpp => help__button_r_svg.cpp} | 6 +- ...ct_svg.cpp => help__button_select_svg.cpp} | 6 +- ...art_svg.cpp => help__button_start_svg.cpp} | 6 +- ...utton_x_svg.cpp => help__button_x_svg.cpp} | 6 +- ...utton_y_svg.cpp => help__button_y_svg.cpp} | 6 +- ...pad_all_svg.cpp => help__dpad_all_svg.cpp} | 6 +- ...d_down_svg.cpp => help__dpad_down_svg.cpp} | 6 +- ...d_left_svg.cpp => help__dpad_left_svg.cpp} | 6 +- ...t_svg.cpp => help__dpad_leftright_svg.cpp} | 6 +- ...right_svg.cpp => help__dpad_right_svg.cpp} | 6 +- ..._dpad_up_svg.cpp => help__dpad_up_svg.cpp} | 6 +- ...down_svg.cpp => help__dpad_updown_svg.cpp} | 6 +- data/converted/off_svg.cpp | 6 +- data/converted/on_svg.cpp | 6 +- .../opensans_hebrew_condensed_light_ttf.cpp | 6 +- .../opensans_hebrew_condensed_regular_ttf.cpp | 6 +- data/converted/option_arrow_svg.cpp | 6 +- data/converted/scroll_gradient_png.cpp | 6 +- data/converted/slider_knob_svg.cpp | 6 +- data/converted/splash_svg.cpp | 6 +- data/converted/star_filled_svg.cpp | 6 +- data/converted/star_unfilled_svg.cpp | 6 +- .../textinput_ninepatch_active_png.cpp | 6 +- data/converted/textinput_ninepatch_png.cpp | 6 +- data/converted/window_icon_256_png.cpp | 6 +- es-core/CMakeLists.txt | 42 ++-- 49 files changed, 342 insertions(+), 342 deletions(-) rename data/converted/{help_analog_down_svg.cpp => help__analog_down_svg.cpp} (98%) rename data/converted/{help_analog_left_svg.cpp => help__analog_left_svg.cpp} (98%) rename data/converted/{help_analog_right_svg.cpp => help__analog_right_svg.cpp} (98%) rename data/converted/{help_analog_thumb_svg.cpp => help__analog_thumb_svg.cpp} (98%) rename data/converted/{help_analog_up_svg.cpp => help__analog_up_svg.cpp} (98%) rename data/converted/{help_button_a_svg.cpp => help__button_a_svg.cpp} (97%) rename data/converted/{help_button_b_svg.cpp => help__button_b_svg.cpp} (98%) rename data/converted/{help_button_hotkey_svg.cpp => help__button_hotkey_svg.cpp} (98%) rename data/converted/{help_button_l_svg.cpp => help__button_l_svg.cpp} (97%) rename data/converted/{help_button_r_svg.cpp => help__button_r_svg.cpp} (97%) rename data/converted/{help_button_select_svg.cpp => help__button_select_svg.cpp} (98%) rename data/converted/{help_button_start_svg.cpp => help__button_start_svg.cpp} (98%) rename data/converted/{help_button_x_svg.cpp => help__button_x_svg.cpp} (97%) rename data/converted/{help_button_y_svg.cpp => help__button_y_svg.cpp} (97%) rename data/converted/{help_dpad_all_svg.cpp => help__dpad_all_svg.cpp} (99%) rename data/converted/{help_dpad_down_svg.cpp => help__dpad_down_svg.cpp} (99%) rename data/converted/{help_dpad_left_svg.cpp => help__dpad_left_svg.cpp} (99%) rename data/converted/{help_dpad_leftright_svg.cpp => help__dpad_leftright_svg.cpp} (99%) rename data/converted/{help_dpad_right_svg.cpp => help__dpad_right_svg.cpp} (99%) rename data/converted/{help_dpad_up_svg.cpp => help__dpad_up_svg.cpp} (99%) rename data/converted/{help_dpad_updown_svg.cpp => help__dpad_updown_svg.cpp} (99%) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp index c54676a990..025f219a5e 100644 --- a/data/ResourceUtil.cpp +++ b/data/ResourceUtil.cpp @@ -1,104 +1,104 @@ -//this file was auto-generated by res2h +// this file was auto-generated by res2h #include "Resources.h" -const size_t res2hNrOfFiles = 46; +const uint32_t res2hNrOfFiles = 46; const Res2hEntry res2hFiles[res2hNrOfFiles] = { - {":/busy_2.svg", busy_2_svg_size, busy_2_svg_data}, - {":/frame.png", frame_png_size, frame_png_data}, - {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, - {":/busy_0.svg", busy_0_svg_size, busy_0_svg_data}, - {":/star_filled.svg", star_filled_svg_size, star_filled_svg_data}, - {":/button.png", button_png_size, button_png_data}, - {":/option_arrow.svg", option_arrow_svg_size, option_arrow_svg_data}, - {":/on.svg", on_svg_size, on_svg_data}, - {":/busy_1.svg", busy_1_svg_size, busy_1_svg_data}, - {":/arrow.svg", arrow_svg_size, arrow_svg_data}, - {":/textinput_ninepatch.png", textinput_ninepatch_png_size, textinput_ninepatch_png_data}, {":/splash.svg", splash_svg_size, splash_svg_data}, + {":/opensans_hebrew_condensed_light.ttf", opensans_hebrew_condensed_light_ttf_size, opensans_hebrew_condensed_light_ttf_data}, + {":/frame.png", frame_png_size, frame_png_data}, + {":/textinput_ninepatch_active.png", textinput_ninepatch_active_png_size, textinput_ninepatch_active_png_data}, {":/window_icon_256.png", window_icon_256_png_size, window_icon_256_png_data}, - {":/fav_remove.svg", fav_remove_svg_size, fav_remove_svg_data}, {":/slider_knob.svg", slider_knob_svg_size, slider_knob_svg_data}, - {":/fav_add.svg", fav_add_svg_size, fav_add_svg_data}, - {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, + {":/fav_remove.svg", fav_remove_svg_size, fav_remove_svg_data}, {":/off.svg", off_svg_size, off_svg_data}, - {":/textinput_ninepatch_active.png", textinput_ninepatch_active_png_size, textinput_ninepatch_active_png_data}, + {":/fav_add.svg", fav_add_svg_size, fav_add_svg_data}, + {":/star_filled.svg", star_filled_svg_size, star_filled_svg_data}, + {":/busy_0.svg", busy_0_svg_size, busy_0_svg_data}, + {":/checkbox_unchecked.svg", checkbox_unchecked_svg_size, checkbox_unchecked_svg_data}, {":/busy_3.svg", busy_3_svg_size, busy_3_svg_data}, - {":/star_unfilled.svg", star_unfilled_svg_size, star_unfilled_svg_data}, - {":/checkbox_checked.svg", checkbox_checked_svg_size, checkbox_checked_svg_data}, + {":/textinput_ninepatch.png", textinput_ninepatch_png_size, textinput_ninepatch_png_data}, {":/button_filled.png", button_filled_png_size, button_filled_png_data}, - {":/checkbox_unchecked.svg", checkbox_unchecked_svg_size, checkbox_unchecked_svg_data}, - {":/opensans_hebrew_condensed_light.ttf", opensans_hebrew_condensed_light_ttf_size, opensans_hebrew_condensed_light_ttf_data}, - {":/help/dpad_right.svg", help_dpad_right_svg_size, help_dpad_right_svg_data}, - {":/help/dpad_all.svg", help_dpad_all_svg_size, help_dpad_all_svg_data}, - {":/help/button_x.svg", help_button_x_svg_size, help_button_x_svg_data}, - {":/help/dpad_up.svg", help_dpad_up_svg_size, help_dpad_up_svg_data}, - {":/help/dpad_updown.svg", help_dpad_updown_svg_size, help_dpad_updown_svg_data}, - {":/help/analog_down.svg", help_analog_down_svg_size, help_analog_down_svg_data}, - {":/help/button_r.svg", help_button_r_svg_size, help_button_r_svg_data}, - {":/help/analog_up.svg", help_analog_up_svg_size, help_analog_up_svg_data}, - {":/help/button_start.svg", help_button_start_svg_size, help_button_start_svg_data}, - {":/help/button_a.svg", help_button_a_svg_size, help_button_a_svg_data}, - {":/help/analog_right.svg", help_analog_right_svg_size, help_analog_right_svg_data}, - {":/help/button_hotkey.svg", help_button_hotkey_svg_size, help_button_hotkey_svg_data}, - {":/help/dpad_left.svg", help_dpad_left_svg_size, help_dpad_left_svg_data}, - {":/help/button_select.svg", help_button_select_svg_size, help_button_select_svg_data}, - {":/help/button_l.svg", help_button_l_svg_size, help_button_l_svg_data}, - {":/help/analog_left.svg", help_analog_left_svg_size, help_analog_left_svg_data}, - {":/help/button_b.svg", help_button_b_svg_size, help_button_b_svg_data}, - {":/help/analog_thumb.svg", help_analog_thumb_svg_size, help_analog_thumb_svg_data}, - {":/help/dpad_down.svg", help_dpad_down_svg_size, help_dpad_down_svg_data}, - {":/help/dpad_leftright.svg", help_dpad_leftright_svg_size, help_dpad_leftright_svg_data}, - {":/help/button_y.svg", help_button_y_svg_size, help_button_y_svg_data} + {":/option_arrow.svg", option_arrow_svg_size, option_arrow_svg_data}, + {":/busy_1.svg", busy_1_svg_size, busy_1_svg_data}, + {":/checkbox_checked.svg", checkbox_checked_svg_size, checkbox_checked_svg_data}, + {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, + {":/star_unfilled.svg", star_unfilled_svg_size, star_unfilled_svg_data}, + {":/busy_2.svg", busy_2_svg_size, busy_2_svg_data}, + {":/on.svg", on_svg_size, on_svg_data}, + {":/button.png", button_png_size, button_png_data}, + {":/arrow.svg", arrow_svg_size, arrow_svg_data}, + {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, + {":/help/analog_thumb.svg", help__analog_thumb_svg_size, help__analog_thumb_svg_data}, + {":/help/button_x.svg", help__button_x_svg_size, help__button_x_svg_data}, + {":/help/dpad_leftright.svg", help__dpad_leftright_svg_size, help__dpad_leftright_svg_data}, + {":/help/dpad_right.svg", help__dpad_right_svg_size, help__dpad_right_svg_data}, + {":/help/dpad_down.svg", help__dpad_down_svg_size, help__dpad_down_svg_data}, + {":/help/button_y.svg", help__button_y_svg_size, help__button_y_svg_data}, + {":/help/analog_up.svg", help__analog_up_svg_size, help__analog_up_svg_data}, + {":/help/button_r.svg", help__button_r_svg_size, help__button_r_svg_data}, + {":/help/button_b.svg", help__button_b_svg_size, help__button_b_svg_data}, + {":/help/button_l.svg", help__button_l_svg_size, help__button_l_svg_data}, + {":/help/button_hotkey.svg", help__button_hotkey_svg_size, help__button_hotkey_svg_data}, + {":/help/button_start.svg", help__button_start_svg_size, help__button_start_svg_data}, + {":/help/dpad_all.svg", help__dpad_all_svg_size, help__dpad_all_svg_data}, + {":/help/button_select.svg", help__button_select_svg_size, help__button_select_svg_data}, + {":/help/dpad_up.svg", help__dpad_up_svg_size, help__dpad_up_svg_data}, + {":/help/button_a.svg", help__button_a_svg_size, help__button_a_svg_data}, + {":/help/dpad_left.svg", help__dpad_left_svg_size, help__dpad_left_svg_data}, + {":/help/analog_left.svg", help__analog_left_svg_size, help__analog_left_svg_data}, + {":/help/analog_right.svg", help__analog_right_svg_size, help__analog_right_svg_data}, + {":/help/analog_down.svg", help__analog_down_svg_size, help__analog_down_svg_data}, + {":/help/dpad_updown.svg", help__dpad_updown_svg_size, help__dpad_updown_svg_data} }; res2hMapType::value_type mapTemp[] = { - std::make_pair(":/busy_2.svg", res2hFiles[0]), - std::make_pair(":/frame.png", res2hFiles[1]), - std::make_pair(":/scroll_gradient.png", res2hFiles[2]), - std::make_pair(":/busy_0.svg", res2hFiles[3]), - std::make_pair(":/star_filled.svg", res2hFiles[4]), - std::make_pair(":/button.png", res2hFiles[5]), - std::make_pair(":/option_arrow.svg", res2hFiles[6]), - std::make_pair(":/on.svg", res2hFiles[7]), - std::make_pair(":/busy_1.svg", res2hFiles[8]), - std::make_pair(":/arrow.svg", res2hFiles[9]), - std::make_pair(":/textinput_ninepatch.png", res2hFiles[10]), - std::make_pair(":/splash.svg", res2hFiles[11]), - std::make_pair(":/window_icon_256.png", res2hFiles[12]), - std::make_pair(":/fav_remove.svg", res2hFiles[13]), - std::make_pair(":/slider_knob.svg", res2hFiles[14]), - std::make_pair(":/fav_add.svg", res2hFiles[15]), - std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[16]), - std::make_pair(":/off.svg", res2hFiles[17]), - std::make_pair(":/textinput_ninepatch_active.png", res2hFiles[18]), - std::make_pair(":/busy_3.svg", res2hFiles[19]), - std::make_pair(":/star_unfilled.svg", res2hFiles[20]), - std::make_pair(":/checkbox_checked.svg", res2hFiles[21]), - std::make_pair(":/button_filled.png", res2hFiles[22]), - std::make_pair(":/checkbox_unchecked.svg", res2hFiles[23]), - std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[24]), - std::make_pair(":/help/dpad_right.svg", res2hFiles[25]), - std::make_pair(":/help/dpad_all.svg", res2hFiles[26]), - std::make_pair(":/help/button_x.svg", res2hFiles[27]), - std::make_pair(":/help/dpad_up.svg", res2hFiles[28]), - std::make_pair(":/help/dpad_updown.svg", res2hFiles[29]), - std::make_pair(":/help/analog_down.svg", res2hFiles[30]), - std::make_pair(":/help/button_r.svg", res2hFiles[31]), - std::make_pair(":/help/analog_up.svg", res2hFiles[32]), - std::make_pair(":/help/button_start.svg", res2hFiles[33]), - std::make_pair(":/help/button_a.svg", res2hFiles[34]), - std::make_pair(":/help/analog_right.svg", res2hFiles[35]), - std::make_pair(":/help/button_hotkey.svg", res2hFiles[36]), - std::make_pair(":/help/dpad_left.svg", res2hFiles[37]), + std::make_pair(":/splash.svg", res2hFiles[0]), + std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[1]), + std::make_pair(":/frame.png", res2hFiles[2]), + std::make_pair(":/textinput_ninepatch_active.png", res2hFiles[3]), + std::make_pair(":/window_icon_256.png", res2hFiles[4]), + std::make_pair(":/slider_knob.svg", res2hFiles[5]), + std::make_pair(":/fav_remove.svg", res2hFiles[6]), + std::make_pair(":/off.svg", res2hFiles[7]), + std::make_pair(":/fav_add.svg", res2hFiles[8]), + std::make_pair(":/star_filled.svg", res2hFiles[9]), + std::make_pair(":/busy_0.svg", res2hFiles[10]), + std::make_pair(":/checkbox_unchecked.svg", res2hFiles[11]), + std::make_pair(":/busy_3.svg", res2hFiles[12]), + std::make_pair(":/textinput_ninepatch.png", res2hFiles[13]), + std::make_pair(":/button_filled.png", res2hFiles[14]), + std::make_pair(":/option_arrow.svg", res2hFiles[15]), + std::make_pair(":/busy_1.svg", res2hFiles[16]), + std::make_pair(":/checkbox_checked.svg", res2hFiles[17]), + std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[18]), + std::make_pair(":/star_unfilled.svg", res2hFiles[19]), + std::make_pair(":/busy_2.svg", res2hFiles[20]), + std::make_pair(":/on.svg", res2hFiles[21]), + std::make_pair(":/button.png", res2hFiles[22]), + std::make_pair(":/arrow.svg", res2hFiles[23]), + std::make_pair(":/scroll_gradient.png", res2hFiles[24]), + std::make_pair(":/help/analog_thumb.svg", res2hFiles[25]), + std::make_pair(":/help/button_x.svg", res2hFiles[26]), + std::make_pair(":/help/dpad_leftright.svg", res2hFiles[27]), + std::make_pair(":/help/dpad_right.svg", res2hFiles[28]), + std::make_pair(":/help/dpad_down.svg", res2hFiles[29]), + std::make_pair(":/help/button_y.svg", res2hFiles[30]), + std::make_pair(":/help/analog_up.svg", res2hFiles[31]), + std::make_pair(":/help/button_r.svg", res2hFiles[32]), + std::make_pair(":/help/button_b.svg", res2hFiles[33]), + std::make_pair(":/help/button_l.svg", res2hFiles[34]), + std::make_pair(":/help/button_hotkey.svg", res2hFiles[35]), + std::make_pair(":/help/button_start.svg", res2hFiles[36]), + std::make_pair(":/help/dpad_all.svg", res2hFiles[37]), std::make_pair(":/help/button_select.svg", res2hFiles[38]), - std::make_pair(":/help/button_l.svg", res2hFiles[39]), - std::make_pair(":/help/analog_left.svg", res2hFiles[40]), - std::make_pair(":/help/button_b.svg", res2hFiles[41]), - std::make_pair(":/help/analog_thumb.svg", res2hFiles[42]), - std::make_pair(":/help/dpad_down.svg", res2hFiles[43]), - std::make_pair(":/help/dpad_leftright.svg", res2hFiles[44]), - std::make_pair(":/help/button_y.svg", res2hFiles[45]) + std::make_pair(":/help/dpad_up.svg", res2hFiles[39]), + std::make_pair(":/help/button_a.svg", res2hFiles[40]), + std::make_pair(":/help/dpad_left.svg", res2hFiles[41]), + std::make_pair(":/help/analog_left.svg", res2hFiles[42]), + std::make_pair(":/help/analog_right.svg", res2hFiles[43]), + std::make_pair(":/help/analog_down.svg", res2hFiles[44]), + std::make_pair(":/help/dpad_updown.svg", res2hFiles[45]) }; res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h index 578d07e243..2b286238a3 100644 --- a/data/Resources.h +++ b/data/Resources.h @@ -1,155 +1,155 @@ -//this file was auto-generated by res2h +// this file was auto-generated by res2h #pragma once #include #include -extern const size_t busy_2_svg_size; -extern const unsigned char busy_2_svg_data[]; +extern const uint16_t splash_svg_size; +extern const uint8_t splash_svg_data[]; -extern const size_t frame_png_size; -extern const unsigned char frame_png_data[]; +extern const uint16_t opensans_hebrew_condensed_light_ttf_size; +extern const uint8_t opensans_hebrew_condensed_light_ttf_data[]; -extern const size_t scroll_gradient_png_size; -extern const unsigned char scroll_gradient_png_data[]; +extern const uint16_t frame_png_size; +extern const uint8_t frame_png_data[]; -extern const size_t busy_0_svg_size; -extern const unsigned char busy_0_svg_data[]; +extern const uint16_t textinput_ninepatch_active_png_size; +extern const uint8_t textinput_ninepatch_active_png_data[]; -extern const size_t star_filled_svg_size; -extern const unsigned char star_filled_svg_data[]; +extern const uint16_t window_icon_256_png_size; +extern const uint8_t window_icon_256_png_data[]; -extern const size_t button_png_size; -extern const unsigned char button_png_data[]; +extern const uint16_t slider_knob_svg_size; +extern const uint8_t slider_knob_svg_data[]; -extern const size_t option_arrow_svg_size; -extern const unsigned char option_arrow_svg_data[]; +extern const uint16_t fav_remove_svg_size; +extern const uint8_t fav_remove_svg_data[]; -extern const size_t on_svg_size; -extern const unsigned char on_svg_data[]; +extern const uint16_t off_svg_size; +extern const uint8_t off_svg_data[]; -extern const size_t busy_1_svg_size; -extern const unsigned char busy_1_svg_data[]; +extern const uint16_t fav_add_svg_size; +extern const uint8_t fav_add_svg_data[]; -extern const size_t arrow_svg_size; -extern const unsigned char arrow_svg_data[]; +extern const uint16_t star_filled_svg_size; +extern const uint8_t star_filled_svg_data[]; -extern const size_t textinput_ninepatch_png_size; -extern const unsigned char textinput_ninepatch_png_data[]; +extern const uint16_t busy_0_svg_size; +extern const uint8_t busy_0_svg_data[]; -extern const size_t splash_svg_size; -extern const unsigned char splash_svg_data[]; +extern const uint16_t checkbox_unchecked_svg_size; +extern const uint8_t checkbox_unchecked_svg_data[]; -extern const size_t window_icon_256_png_size; -extern const unsigned char window_icon_256_png_data[]; +extern const uint16_t busy_3_svg_size; +extern const uint8_t busy_3_svg_data[]; -extern const size_t fav_remove_svg_size; -extern const unsigned char fav_remove_svg_data[]; +extern const uint16_t textinput_ninepatch_png_size; +extern const uint8_t textinput_ninepatch_png_data[]; -extern const size_t slider_knob_svg_size; -extern const unsigned char slider_knob_svg_data[]; +extern const uint16_t button_filled_png_size; +extern const uint8_t button_filled_png_data[]; -extern const size_t fav_add_svg_size; -extern const unsigned char fav_add_svg_data[]; +extern const uint16_t option_arrow_svg_size; +extern const uint8_t option_arrow_svg_data[]; -extern const size_t opensans_hebrew_condensed_regular_ttf_size; -extern const unsigned char opensans_hebrew_condensed_regular_ttf_data[]; +extern const uint16_t busy_1_svg_size; +extern const uint8_t busy_1_svg_data[]; -extern const size_t off_svg_size; -extern const unsigned char off_svg_data[]; +extern const uint16_t checkbox_checked_svg_size; +extern const uint8_t checkbox_checked_svg_data[]; -extern const size_t textinput_ninepatch_active_png_size; -extern const unsigned char textinput_ninepatch_active_png_data[]; +extern const uint16_t opensans_hebrew_condensed_regular_ttf_size; +extern const uint8_t opensans_hebrew_condensed_regular_ttf_data[]; -extern const size_t busy_3_svg_size; -extern const unsigned char busy_3_svg_data[]; +extern const uint16_t star_unfilled_svg_size; +extern const uint8_t star_unfilled_svg_data[]; -extern const size_t star_unfilled_svg_size; -extern const unsigned char star_unfilled_svg_data[]; +extern const uint16_t busy_2_svg_size; +extern const uint8_t busy_2_svg_data[]; -extern const size_t checkbox_checked_svg_size; -extern const unsigned char checkbox_checked_svg_data[]; +extern const uint16_t on_svg_size; +extern const uint8_t on_svg_data[]; -extern const size_t button_filled_png_size; -extern const unsigned char button_filled_png_data[]; +extern const uint16_t button_png_size; +extern const uint8_t button_png_data[]; -extern const size_t checkbox_unchecked_svg_size; -extern const unsigned char checkbox_unchecked_svg_data[]; +extern const uint16_t arrow_svg_size; +extern const uint8_t arrow_svg_data[]; -extern const size_t opensans_hebrew_condensed_light_ttf_size; -extern const unsigned char opensans_hebrew_condensed_light_ttf_data[]; +extern const uint32_t scroll_gradient_png_size; +extern const uint8_t scroll_gradient_png_data[]; -extern const size_t help_dpad_right_svg_size; -extern const unsigned char help_dpad_right_svg_data[]; +extern const uint16_t help__analog_thumb_svg_size; +extern const uint8_t help__analog_thumb_svg_data[]; -extern const size_t help_dpad_all_svg_size; -extern const unsigned char help_dpad_all_svg_data[]; +extern const uint16_t help__button_x_svg_size; +extern const uint8_t help__button_x_svg_data[]; -extern const size_t help_button_x_svg_size; -extern const unsigned char help_button_x_svg_data[]; +extern const uint16_t help__dpad_leftright_svg_size; +extern const uint8_t help__dpad_leftright_svg_data[]; -extern const size_t help_dpad_up_svg_size; -extern const unsigned char help_dpad_up_svg_data[]; +extern const uint16_t help__dpad_right_svg_size; +extern const uint8_t help__dpad_right_svg_data[]; -extern const size_t help_dpad_updown_svg_size; -extern const unsigned char help_dpad_updown_svg_data[]; +extern const uint16_t help__dpad_down_svg_size; +extern const uint8_t help__dpad_down_svg_data[]; -extern const size_t help_analog_down_svg_size; -extern const unsigned char help_analog_down_svg_data[]; +extern const uint16_t help__button_y_svg_size; +extern const uint8_t help__button_y_svg_data[]; -extern const size_t help_button_r_svg_size; -extern const unsigned char help_button_r_svg_data[]; +extern const uint16_t help__analog_up_svg_size; +extern const uint8_t help__analog_up_svg_data[]; -extern const size_t help_analog_up_svg_size; -extern const unsigned char help_analog_up_svg_data[]; +extern const uint16_t help__button_r_svg_size; +extern const uint8_t help__button_r_svg_data[]; -extern const size_t help_button_start_svg_size; -extern const unsigned char help_button_start_svg_data[]; +extern const uint16_t help__button_b_svg_size; +extern const uint8_t help__button_b_svg_data[]; -extern const size_t help_button_a_svg_size; -extern const unsigned char help_button_a_svg_data[]; +extern const uint16_t help__button_l_svg_size; +extern const uint8_t help__button_l_svg_data[]; -extern const size_t help_analog_right_svg_size; -extern const unsigned char help_analog_right_svg_data[]; +extern const uint16_t help__button_hotkey_svg_size; +extern const uint8_t help__button_hotkey_svg_data[]; -extern const size_t help_button_hotkey_svg_size; -extern const unsigned char help_button_hotkey_svg_data[]; +extern const uint16_t help__button_start_svg_size; +extern const uint8_t help__button_start_svg_data[]; -extern const size_t help_dpad_left_svg_size; -extern const unsigned char help_dpad_left_svg_data[]; +extern const uint16_t help__dpad_all_svg_size; +extern const uint8_t help__dpad_all_svg_data[]; -extern const size_t help_button_select_svg_size; -extern const unsigned char help_button_select_svg_data[]; +extern const uint16_t help__button_select_svg_size; +extern const uint8_t help__button_select_svg_data[]; -extern const size_t help_button_l_svg_size; -extern const unsigned char help_button_l_svg_data[]; +extern const uint16_t help__dpad_up_svg_size; +extern const uint8_t help__dpad_up_svg_data[]; -extern const size_t help_analog_left_svg_size; -extern const unsigned char help_analog_left_svg_data[]; +extern const uint16_t help__button_a_svg_size; +extern const uint8_t help__button_a_svg_data[]; -extern const size_t help_button_b_svg_size; -extern const unsigned char help_button_b_svg_data[]; +extern const uint16_t help__dpad_left_svg_size; +extern const uint8_t help__dpad_left_svg_data[]; -extern const size_t help_analog_thumb_svg_size; -extern const unsigned char help_analog_thumb_svg_data[]; +extern const uint16_t help__analog_left_svg_size; +extern const uint8_t help__analog_left_svg_data[]; -extern const size_t help_dpad_down_svg_size; -extern const unsigned char help_dpad_down_svg_data[]; +extern const uint16_t help__analog_right_svg_size; +extern const uint8_t help__analog_right_svg_data[]; -extern const size_t help_dpad_leftright_svg_size; -extern const unsigned char help_dpad_leftright_svg_data[]; +extern const uint16_t help__analog_down_svg_size; +extern const uint8_t help__analog_down_svg_data[]; -extern const size_t help_button_y_svg_size; -extern const unsigned char help_button_y_svg_data[]; +extern const uint16_t help__dpad_updown_svg_size; +extern const uint8_t help__dpad_updown_svg_data[]; struct Res2hEntry { const std::string relativeFileName; - const size_t size; - const unsigned char * data; + const uint32_t size; + const uint8_t * data; }; -extern const size_t res2hNrOfFiles; +extern const uint32_t res2hNrOfFiles; extern const Res2hEntry res2hFiles[]; typedef const std::map res2hMapType; diff --git a/data/converted/arrow_svg.cpp b/data/converted/arrow_svg.cpp index 8b9af722e3..4e57f4ae1d 100644 --- a/data/converted/arrow_svg.cpp +++ b/data/converted/arrow_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "arrow.svg" by res2h +// this file was auto-generated from "arrow.svg" by res2h #include "../Resources.h" -const size_t arrow_svg_size = 838; -const unsigned char arrow_svg_data[838] = { +const uint16_t arrow_svg_size = 838; +const uint8_t arrow_svg_data[838] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/busy_0_svg.cpp b/data/converted/busy_0_svg.cpp index d7146d82a1..f52ef911da 100644 --- a/data/converted/busy_0_svg.cpp +++ b/data/converted/busy_0_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "busy_0.svg" by res2h +// this file was auto-generated from "busy_0.svg" by res2h #include "../Resources.h" -const size_t busy_0_svg_size = 1347; -const unsigned char busy_0_svg_data[1347] = { +const uint16_t busy_0_svg_size = 1347; +const uint8_t busy_0_svg_data[1347] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/busy_1_svg.cpp b/data/converted/busy_1_svg.cpp index d7f7f68324..3653b6f095 100644 --- a/data/converted/busy_1_svg.cpp +++ b/data/converted/busy_1_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "busy_1.svg" by res2h +// this file was auto-generated from "busy_1.svg" by res2h #include "../Resources.h" -const size_t busy_1_svg_size = 1347; -const unsigned char busy_1_svg_data[1347] = { +const uint16_t busy_1_svg_size = 1347; +const uint8_t busy_1_svg_data[1347] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/busy_2_svg.cpp b/data/converted/busy_2_svg.cpp index 543b728a91..b803569f87 100644 --- a/data/converted/busy_2_svg.cpp +++ b/data/converted/busy_2_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "busy_2.svg" by res2h +// this file was auto-generated from "busy_2.svg" by res2h #include "../Resources.h" -const size_t busy_2_svg_size = 1347; -const unsigned char busy_2_svg_data[1347] = { +const uint16_t busy_2_svg_size = 1347; +const uint8_t busy_2_svg_data[1347] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/busy_3_svg.cpp b/data/converted/busy_3_svg.cpp index 49a16d2680..4c6a2dc87d 100644 --- a/data/converted/busy_3_svg.cpp +++ b/data/converted/busy_3_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "busy_3.svg" by res2h +// this file was auto-generated from "busy_3.svg" by res2h #include "../Resources.h" -const size_t busy_3_svg_size = 1347; -const unsigned char busy_3_svg_data[1347] = { +const uint16_t busy_3_svg_size = 1347; +const uint8_t busy_3_svg_data[1347] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/button_filled_png.cpp b/data/converted/button_filled_png.cpp index e85f96e5cf..2e876b41bd 100644 --- a/data/converted/button_filled_png.cpp +++ b/data/converted/button_filled_png.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "button_filled.png" by res2h +// this file was auto-generated from "button_filled.png" by res2h #include "../Resources.h" -const size_t button_filled_png_size = 1168; -const unsigned char button_filled_png_data[1168] = { +const uint16_t button_filled_png_size = 1168; +const uint8_t button_filled_png_data[1168] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, diff --git a/data/converted/button_png.cpp b/data/converted/button_png.cpp index 72603af201..9466771fc1 100644 --- a/data/converted/button_png.cpp +++ b/data/converted/button_png.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "button.png" by res2h +// this file was auto-generated from "button.png" by res2h #include "../Resources.h" -const size_t button_png_size = 1231; -const unsigned char button_png_data[1231] = { +const uint16_t button_png_size = 1231; +const uint8_t button_png_data[1231] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, diff --git a/data/converted/checkbox_checked_svg.cpp b/data/converted/checkbox_checked_svg.cpp index 5a3acb2fb8..79726fbbdd 100644 --- a/data/converted/checkbox_checked_svg.cpp +++ b/data/converted/checkbox_checked_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "checkbox_checked.svg" by res2h +// this file was auto-generated from "checkbox_checked.svg" by res2h #include "../Resources.h" -const size_t checkbox_checked_svg_size = 1314; -const unsigned char checkbox_checked_svg_data[1314] = { +const uint16_t checkbox_checked_svg_size = 1314; +const uint8_t checkbox_checked_svg_data[1314] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/checkbox_unchecked_svg.cpp b/data/converted/checkbox_unchecked_svg.cpp index bc31f03740..42e6cadef0 100644 --- a/data/converted/checkbox_unchecked_svg.cpp +++ b/data/converted/checkbox_unchecked_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "checkbox_unchecked.svg" by res2h +// this file was auto-generated from "checkbox_unchecked.svg" by res2h #include "../Resources.h" -const size_t checkbox_unchecked_svg_size = 850; -const unsigned char checkbox_unchecked_svg_data[850] = { +const uint16_t checkbox_unchecked_svg_size = 850; +const uint8_t checkbox_unchecked_svg_data[850] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/fav_add_svg.cpp b/data/converted/fav_add_svg.cpp index 02365f5fee..f82b73067a 100644 --- a/data/converted/fav_add_svg.cpp +++ b/data/converted/fav_add_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "fav_add.svg" by res2h +// this file was auto-generated from "fav_add.svg" by res2h #include "../Resources.h" -const size_t fav_add_svg_size = 638; -const unsigned char fav_add_svg_data[638] = { +const uint16_t fav_add_svg_size = 638; +const uint8_t fav_add_svg_data[638] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/fav_remove_svg.cpp b/data/converted/fav_remove_svg.cpp index 07ea8f7593..b62b60710b 100644 --- a/data/converted/fav_remove_svg.cpp +++ b/data/converted/fav_remove_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "fav_remove.svg" by res2h +// this file was auto-generated from "fav_remove.svg" by res2h #include "../Resources.h" -const size_t fav_remove_svg_size = 567; -const unsigned char fav_remove_svg_data[567] = { +const uint16_t fav_remove_svg_size = 567; +const uint8_t fav_remove_svg_data[567] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/frame_png.cpp b/data/converted/frame_png.cpp index 2afd0f94e8..bfdc12cb9d 100644 --- a/data/converted/frame_png.cpp +++ b/data/converted/frame_png.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "frame.png" by res2h +// this file was auto-generated from "frame.png" by res2h #include "../Resources.h" -const size_t frame_png_size = 1729; -const unsigned char frame_png_data[1729] = { +const uint16_t frame_png_size = 1729; +const uint8_t frame_png_data[1729] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, diff --git a/data/converted/help_analog_down_svg.cpp b/data/converted/help__analog_down_svg.cpp similarity index 98% rename from data/converted/help_analog_down_svg.cpp rename to data/converted/help__analog_down_svg.cpp index 1a58a01893..d37e6c98c9 100644 --- a/data/converted/help_analog_down_svg.cpp +++ b/data/converted/help__analog_down_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "analog_down.svg" by res2h +// this file was auto-generated from "analog_down.svg" by res2h #include "../Resources.h" -const size_t help_analog_down_svg_size = 2809; -const unsigned char help_analog_down_svg_data[2809] = { +const uint16_t help__analog_down_svg_size = 2809; +const uint8_t help__analog_down_svg_data[2809] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_analog_left_svg.cpp b/data/converted/help__analog_left_svg.cpp similarity index 98% rename from data/converted/help_analog_left_svg.cpp rename to data/converted/help__analog_left_svg.cpp index 16f889cf78..ec8bd27b18 100644 --- a/data/converted/help_analog_left_svg.cpp +++ b/data/converted/help__analog_left_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "analog_left.svg" by res2h +// this file was auto-generated from "analog_left.svg" by res2h #include "../Resources.h" -const size_t help_analog_left_svg_size = 2834; -const unsigned char help_analog_left_svg_data[2834] = { +const uint16_t help__analog_left_svg_size = 2834; +const uint8_t help__analog_left_svg_data[2834] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_analog_right_svg.cpp b/data/converted/help__analog_right_svg.cpp similarity index 98% rename from data/converted/help_analog_right_svg.cpp rename to data/converted/help__analog_right_svg.cpp index 2f66a33acc..4a4dbe2223 100644 --- a/data/converted/help_analog_right_svg.cpp +++ b/data/converted/help__analog_right_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "analog_right.svg" by res2h +// this file was auto-generated from "analog_right.svg" by res2h #include "../Resources.h" -const size_t help_analog_right_svg_size = 2813; -const unsigned char help_analog_right_svg_data[2813] = { +const uint16_t help__analog_right_svg_size = 2813; +const uint8_t help__analog_right_svg_data[2813] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_analog_thumb_svg.cpp b/data/converted/help__analog_thumb_svg.cpp similarity index 98% rename from data/converted/help_analog_thumb_svg.cpp rename to data/converted/help__analog_thumb_svg.cpp index 5bb06b9ad7..ca41d87b9a 100644 --- a/data/converted/help_analog_thumb_svg.cpp +++ b/data/converted/help__analog_thumb_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "analog_thumb.svg" by res2h +// this file was auto-generated from "analog_thumb.svg" by res2h #include "../Resources.h" -const size_t help_analog_thumb_svg_size = 2894; -const unsigned char help_analog_thumb_svg_data[2894] = { +const uint16_t help__analog_thumb_svg_size = 2894; +const uint8_t help__analog_thumb_svg_data[2894] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_analog_up_svg.cpp b/data/converted/help__analog_up_svg.cpp similarity index 98% rename from data/converted/help_analog_up_svg.cpp rename to data/converted/help__analog_up_svg.cpp index bed20f9264..56fd50e7b7 100644 --- a/data/converted/help_analog_up_svg.cpp +++ b/data/converted/help__analog_up_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "analog_up.svg" by res2h +// this file was auto-generated from "analog_up.svg" by res2h #include "../Resources.h" -const size_t help_analog_up_svg_size = 2853; -const unsigned char help_analog_up_svg_data[2853] = { +const uint16_t help__analog_up_svg_size = 2853; +const uint8_t help__analog_up_svg_data[2853] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_button_a_svg.cpp b/data/converted/help__button_a_svg.cpp similarity index 97% rename from data/converted/help_button_a_svg.cpp rename to data/converted/help__button_a_svg.cpp index cedb8d212a..0c24630f3a 100644 --- a/data/converted/help_button_a_svg.cpp +++ b/data/converted/help__button_a_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "button_a.svg" by res2h +// this file was auto-generated from "button_a.svg" by res2h #include "../Resources.h" -const size_t help_button_a_svg_size = 965; -const unsigned char help_button_a_svg_data[965] = { +const uint16_t help__button_a_svg_size = 965; +const uint8_t help__button_a_svg_data[965] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_button_b_svg.cpp b/data/converted/help__button_b_svg.cpp similarity index 98% rename from data/converted/help_button_b_svg.cpp rename to data/converted/help__button_b_svg.cpp index 94da0650dd..57403aa864 100644 --- a/data/converted/help_button_b_svg.cpp +++ b/data/converted/help__button_b_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "button_b.svg" by res2h +// this file was auto-generated from "button_b.svg" by res2h #include "../Resources.h" -const size_t help_button_b_svg_size = 1483; -const unsigned char help_button_b_svg_data[1483] = { +const uint16_t help__button_b_svg_size = 1483; +const uint8_t help__button_b_svg_data[1483] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_button_hotkey_svg.cpp b/data/converted/help__button_hotkey_svg.cpp similarity index 98% rename from data/converted/help_button_hotkey_svg.cpp rename to data/converted/help__button_hotkey_svg.cpp index 5bf78e40c3..0c5b590792 100644 --- a/data/converted/help_button_hotkey_svg.cpp +++ b/data/converted/help__button_hotkey_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "button_hotkey.svg" by res2h +// this file was auto-generated from "button_hotkey.svg" by res2h #include "../Resources.h" -const size_t help_button_hotkey_svg_size = 1905; -const unsigned char help_button_hotkey_svg_data[1905] = { +const uint16_t help__button_hotkey_svg_size = 1905; +const uint8_t help__button_hotkey_svg_data[1905] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_button_l_svg.cpp b/data/converted/help__button_l_svg.cpp similarity index 97% rename from data/converted/help_button_l_svg.cpp rename to data/converted/help__button_l_svg.cpp index fb8eb343b7..a34482f467 100644 --- a/data/converted/help_button_l_svg.cpp +++ b/data/converted/help__button_l_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "button_l.svg" by res2h +// this file was auto-generated from "button_l.svg" by res2h #include "../Resources.h" -const size_t help_button_l_svg_size = 1013; -const unsigned char help_button_l_svg_data[1013] = { +const uint16_t help__button_l_svg_size = 1013; +const uint8_t help__button_l_svg_data[1013] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_button_r_svg.cpp b/data/converted/help__button_r_svg.cpp similarity index 97% rename from data/converted/help_button_r_svg.cpp rename to data/converted/help__button_r_svg.cpp index ea1eceb7a3..79f5a5e747 100644 --- a/data/converted/help_button_r_svg.cpp +++ b/data/converted/help__button_r_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "button_r.svg" by res2h +// this file was auto-generated from "button_r.svg" by res2h #include "../Resources.h" -const size_t help_button_r_svg_size = 1315; -const unsigned char help_button_r_svg_data[1315] = { +const uint16_t help__button_r_svg_size = 1315; +const uint8_t help__button_r_svg_data[1315] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_button_select_svg.cpp b/data/converted/help__button_select_svg.cpp similarity index 98% rename from data/converted/help_button_select_svg.cpp rename to data/converted/help__button_select_svg.cpp index b43a0ba62e..5092d70ff2 100644 --- a/data/converted/help_button_select_svg.cpp +++ b/data/converted/help__button_select_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "button_select.svg" by res2h +// this file was auto-generated from "button_select.svg" by res2h #include "../Resources.h" -const size_t help_button_select_svg_size = 1866; -const unsigned char help_button_select_svg_data[1866] = { +const uint16_t help__button_select_svg_size = 1866; +const uint8_t help__button_select_svg_data[1866] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_button_start_svg.cpp b/data/converted/help__button_start_svg.cpp similarity index 98% rename from data/converted/help_button_start_svg.cpp rename to data/converted/help__button_start_svg.cpp index 06c552c910..0ba7caf37e 100644 --- a/data/converted/help_button_start_svg.cpp +++ b/data/converted/help__button_start_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "button_start.svg" by res2h +// this file was auto-generated from "button_start.svg" by res2h #include "../Resources.h" -const size_t help_button_start_svg_size = 1769; -const unsigned char help_button_start_svg_data[1769] = { +const uint16_t help__button_start_svg_size = 1769; +const uint8_t help__button_start_svg_data[1769] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_button_x_svg.cpp b/data/converted/help__button_x_svg.cpp similarity index 97% rename from data/converted/help_button_x_svg.cpp rename to data/converted/help__button_x_svg.cpp index 3d1d3093e6..1f57cedf9a 100644 --- a/data/converted/help_button_x_svg.cpp +++ b/data/converted/help__button_x_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "button_x.svg" by res2h +// this file was auto-generated from "button_x.svg" by res2h #include "../Resources.h" -const size_t help_button_x_svg_size = 949; -const unsigned char help_button_x_svg_data[949] = { +const uint16_t help__button_x_svg_size = 949; +const uint8_t help__button_x_svg_data[949] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_button_y_svg.cpp b/data/converted/help__button_y_svg.cpp similarity index 97% rename from data/converted/help_button_y_svg.cpp rename to data/converted/help__button_y_svg.cpp index c05fc3b76c..3f00065af3 100644 --- a/data/converted/help_button_y_svg.cpp +++ b/data/converted/help__button_y_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "button_y.svg" by res2h +// this file was auto-generated from "button_y.svg" by res2h #include "../Resources.h" -const size_t help_button_y_svg_size = 911; -const unsigned char help_button_y_svg_data[911] = { +const uint16_t help__button_y_svg_size = 911; +const uint8_t help__button_y_svg_data[911] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_dpad_all_svg.cpp b/data/converted/help__dpad_all_svg.cpp similarity index 99% rename from data/converted/help_dpad_all_svg.cpp rename to data/converted/help__dpad_all_svg.cpp index 226a111d53..e001a0b7c7 100644 --- a/data/converted/help_dpad_all_svg.cpp +++ b/data/converted/help__dpad_all_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "dpad_all.svg" by res2h +// this file was auto-generated from "dpad_all.svg" by res2h #include "../Resources.h" -const size_t help_dpad_all_svg_size = 3470; -const unsigned char help_dpad_all_svg_data[3470] = { +const uint16_t help__dpad_all_svg_size = 3470; +const uint8_t help__dpad_all_svg_data[3470] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_dpad_down_svg.cpp b/data/converted/help__dpad_down_svg.cpp similarity index 99% rename from data/converted/help_dpad_down_svg.cpp rename to data/converted/help__dpad_down_svg.cpp index 11fa7c3139..f2371f0c2c 100644 --- a/data/converted/help_dpad_down_svg.cpp +++ b/data/converted/help__dpad_down_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "dpad_down.svg" by res2h +// this file was auto-generated from "dpad_down.svg" by res2h #include "../Resources.h" -const size_t help_dpad_down_svg_size = 3167; -const unsigned char help_dpad_down_svg_data[3167] = { +const uint16_t help__dpad_down_svg_size = 3167; +const uint8_t help__dpad_down_svg_data[3167] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_dpad_left_svg.cpp b/data/converted/help__dpad_left_svg.cpp similarity index 99% rename from data/converted/help_dpad_left_svg.cpp rename to data/converted/help__dpad_left_svg.cpp index dbf730d608..e4d755c613 100644 --- a/data/converted/help_dpad_left_svg.cpp +++ b/data/converted/help__dpad_left_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "dpad_left.svg" by res2h +// this file was auto-generated from "dpad_left.svg" by res2h #include "../Resources.h" -const size_t help_dpad_left_svg_size = 3164; -const unsigned char help_dpad_left_svg_data[3164] = { +const uint16_t help__dpad_left_svg_size = 3164; +const uint8_t help__dpad_left_svg_data[3164] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_dpad_leftright_svg.cpp b/data/converted/help__dpad_leftright_svg.cpp similarity index 99% rename from data/converted/help_dpad_leftright_svg.cpp rename to data/converted/help__dpad_leftright_svg.cpp index 315f94c0de..3984364a88 100644 --- a/data/converted/help_dpad_leftright_svg.cpp +++ b/data/converted/help__dpad_leftright_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "dpad_leftright.svg" by res2h +// this file was auto-generated from "dpad_leftright.svg" by res2h #include "../Resources.h" -const size_t help_dpad_leftright_svg_size = 3241; -const unsigned char help_dpad_leftright_svg_data[3241] = { +const uint16_t help__dpad_leftright_svg_size = 3241; +const uint8_t help__dpad_leftright_svg_data[3241] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_dpad_right_svg.cpp b/data/converted/help__dpad_right_svg.cpp similarity index 99% rename from data/converted/help_dpad_right_svg.cpp rename to data/converted/help__dpad_right_svg.cpp index 214053557c..7005f3f831 100644 --- a/data/converted/help_dpad_right_svg.cpp +++ b/data/converted/help__dpad_right_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "dpad_right.svg" by res2h +// this file was auto-generated from "dpad_right.svg" by res2h #include "../Resources.h" -const size_t help_dpad_right_svg_size = 3168; -const unsigned char help_dpad_right_svg_data[3168] = { +const uint16_t help__dpad_right_svg_size = 3168; +const uint8_t help__dpad_right_svg_data[3168] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_dpad_up_svg.cpp b/data/converted/help__dpad_up_svg.cpp similarity index 99% rename from data/converted/help_dpad_up_svg.cpp rename to data/converted/help__dpad_up_svg.cpp index a816609fe3..5ce8aa3310 100644 --- a/data/converted/help_dpad_up_svg.cpp +++ b/data/converted/help__dpad_up_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "dpad_up.svg" by res2h +// this file was auto-generated from "dpad_up.svg" by res2h #include "../Resources.h" -const size_t help_dpad_up_svg_size = 3165; -const unsigned char help_dpad_up_svg_data[3165] = { +const uint16_t help__dpad_up_svg_size = 3165; +const uint8_t help__dpad_up_svg_data[3165] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/help_dpad_updown_svg.cpp b/data/converted/help__dpad_updown_svg.cpp similarity index 99% rename from data/converted/help_dpad_updown_svg.cpp rename to data/converted/help__dpad_updown_svg.cpp index f1612667d0..163d2773bd 100644 --- a/data/converted/help_dpad_updown_svg.cpp +++ b/data/converted/help__dpad_updown_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "dpad_updown.svg" by res2h +// this file was auto-generated from "dpad_updown.svg" by res2h #include "../Resources.h" -const size_t help_dpad_updown_svg_size = 3241; -const unsigned char help_dpad_updown_svg_data[3241] = { +const uint16_t help__dpad_updown_svg_size = 3241; +const uint8_t help__dpad_updown_svg_data[3241] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/off_svg.cpp b/data/converted/off_svg.cpp index f89baaee74..38ee78893a 100644 --- a/data/converted/off_svg.cpp +++ b/data/converted/off_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "off.svg" by res2h +// this file was auto-generated from "off.svg" by res2h #include "../Resources.h" -const size_t off_svg_size = 1325; -const unsigned char off_svg_data[1325] = { +const uint16_t off_svg_size = 1325; +const uint8_t off_svg_data[1325] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/on_svg.cpp b/data/converted/on_svg.cpp index afd33eee67..27a1fe8c19 100644 --- a/data/converted/on_svg.cpp +++ b/data/converted/on_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "on.svg" by res2h +// this file was auto-generated from "on.svg" by res2h #include "../Resources.h" -const size_t on_svg_size = 1132; -const unsigned char on_svg_data[1132] = { +const uint16_t on_svg_size = 1132; +const uint8_t on_svg_data[1132] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/opensans_hebrew_condensed_light_ttf.cpp b/data/converted/opensans_hebrew_condensed_light_ttf.cpp index c40c808a8b..7255a45a90 100644 --- a/data/converted/opensans_hebrew_condensed_light_ttf.cpp +++ b/data/converted/opensans_hebrew_condensed_light_ttf.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "opensans_hebrew_condensed_light.ttf" by res2h +// this file was auto-generated from "opensans_hebrew_condensed_light.ttf" by res2h #include "../Resources.h" -const size_t opensans_hebrew_condensed_light_ttf_size = 32868; -const unsigned char opensans_hebrew_condensed_light_ttf_data[32868] = { +const uint16_t opensans_hebrew_condensed_light_ttf_size = 32868; +const uint8_t opensans_hebrew_condensed_light_ttf_data[32868] = { 0x00,0x01,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x04, 0x00,0x00,0x46,0x46,0x54,0x4d,0x67,0x7f,0x0d,0x13, 0x00,0x00,0x7c,0xb4,0x00,0x00,0x00,0x1c,0x47,0x44, diff --git a/data/converted/opensans_hebrew_condensed_regular_ttf.cpp b/data/converted/opensans_hebrew_condensed_regular_ttf.cpp index 5c79a51087..c89da4c625 100644 --- a/data/converted/opensans_hebrew_condensed_regular_ttf.cpp +++ b/data/converted/opensans_hebrew_condensed_regular_ttf.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "opensans_hebrew_condensed_regular.ttf" by res2h +// this file was auto-generated from "opensans_hebrew_condensed_regular.ttf" by res2h #include "../Resources.h" -const size_t opensans_hebrew_condensed_regular_ttf_size = 32364; -const unsigned char opensans_hebrew_condensed_regular_ttf_data[32364] = { +const uint16_t opensans_hebrew_condensed_regular_ttf_size = 32364; +const uint8_t opensans_hebrew_condensed_regular_ttf_data[32364] = { 0x00,0x01,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x04, 0x00,0x10,0x44,0x53,0x49,0x47,0x00,0x00,0x00,0x01, 0x00,0x00,0x7e,0x64,0x00,0x00,0x00,0x08,0x46,0x46, diff --git a/data/converted/option_arrow_svg.cpp b/data/converted/option_arrow_svg.cpp index caaaad54ac..edd4c0bbc8 100644 --- a/data/converted/option_arrow_svg.cpp +++ b/data/converted/option_arrow_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "option_arrow.svg" by res2h +// this file was auto-generated from "option_arrow.svg" by res2h #include "../Resources.h" -const size_t option_arrow_svg_size = 839; -const unsigned char option_arrow_svg_data[839] = { +const uint16_t option_arrow_svg_size = 839; +const uint8_t option_arrow_svg_data[839] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/scroll_gradient_png.cpp b/data/converted/scroll_gradient_png.cpp index 77b84a54e0..ee0f88a0ce 100644 --- a/data/converted/scroll_gradient_png.cpp +++ b/data/converted/scroll_gradient_png.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "scroll_gradient.png" by res2h +// this file was auto-generated from "scroll_gradient.png" by res2h #include "../Resources.h" -const size_t scroll_gradient_png_size = 83384; -const unsigned char scroll_gradient_png_data[83384] = { +const uint32_t scroll_gradient_png_size = 83384; +const uint8_t scroll_gradient_png_data[83384] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x02,0x40, 0x00,0x00,0x01,0x44,0x08,0x06,0x00,0x00,0x00,0xcf, diff --git a/data/converted/slider_knob_svg.cpp b/data/converted/slider_knob_svg.cpp index 8b99255f25..80233717df 100644 --- a/data/converted/slider_knob_svg.cpp +++ b/data/converted/slider_knob_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "slider_knob.svg" by res2h +// this file was auto-generated from "slider_knob.svg" by res2h #include "../Resources.h" -const size_t slider_knob_svg_size = 619; -const unsigned char slider_knob_svg_data[619] = { +const uint16_t slider_knob_svg_size = 619; +const uint8_t slider_knob_svg_data[619] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/splash_svg.cpp b/data/converted/splash_svg.cpp index 4a7c8c4fdd..1a9ff3f12b 100644 --- a/data/converted/splash_svg.cpp +++ b/data/converted/splash_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "splash.svg" by res2h +// this file was auto-generated from "splash.svg" by res2h #include "../Resources.h" -const size_t splash_svg_size = 19024; -const unsigned char splash_svg_data[19024] = { +const uint16_t splash_svg_size = 19024; +const uint8_t splash_svg_data[19024] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/star_filled_svg.cpp b/data/converted/star_filled_svg.cpp index 0778724565..69ff258b21 100644 --- a/data/converted/star_filled_svg.cpp +++ b/data/converted/star_filled_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "star_filled.svg" by res2h +// this file was auto-generated from "star_filled.svg" by res2h #include "../Resources.h" -const size_t star_filled_svg_size = 1152; -const unsigned char star_filled_svg_data[1152] = { +const uint16_t star_filled_svg_size = 1152; +const uint8_t star_filled_svg_data[1152] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/star_unfilled_svg.cpp b/data/converted/star_unfilled_svg.cpp index aae8f75a1d..3414ea5b4a 100644 --- a/data/converted/star_unfilled_svg.cpp +++ b/data/converted/star_unfilled_svg.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "star_unfilled.svg" by res2h +// this file was auto-generated from "star_unfilled.svg" by res2h #include "../Resources.h" -const size_t star_unfilled_svg_size = 1871; -const unsigned char star_unfilled_svg_data[1871] = { +const uint16_t star_unfilled_svg_size = 1871; +const uint8_t star_unfilled_svg_data[1871] = { 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, diff --git a/data/converted/textinput_ninepatch_active_png.cpp b/data/converted/textinput_ninepatch_active_png.cpp index 664b3f79ef..3783e02071 100644 --- a/data/converted/textinput_ninepatch_active_png.cpp +++ b/data/converted/textinput_ninepatch_active_png.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "textinput_ninepatch_active.png" by res2h +// this file was auto-generated from "textinput_ninepatch_active.png" by res2h #include "../Resources.h" -const size_t textinput_ninepatch_active_png_size = 3084; -const unsigned char textinput_ninepatch_active_png_data[3084] = { +const uint16_t textinput_ninepatch_active_png_size = 3084; +const uint8_t textinput_ninepatch_active_png_data[3084] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, diff --git a/data/converted/textinput_ninepatch_png.cpp b/data/converted/textinput_ninepatch_png.cpp index 6d1fb2de9c..4bafbcfc15 100644 --- a/data/converted/textinput_ninepatch_png.cpp +++ b/data/converted/textinput_ninepatch_png.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "textinput_ninepatch.png" by res2h +// this file was auto-generated from "textinput_ninepatch.png" by res2h #include "../Resources.h" -const size_t textinput_ninepatch_png_size = 1275; -const unsigned char textinput_ninepatch_png_data[1275] = { +const uint16_t textinput_ninepatch_png_size = 1275; +const uint8_t textinput_ninepatch_png_data[1275] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, diff --git a/data/converted/window_icon_256_png.cpp b/data/converted/window_icon_256_png.cpp index 20c5839c63..f102f29385 100644 --- a/data/converted/window_icon_256_png.cpp +++ b/data/converted/window_icon_256_png.cpp @@ -1,9 +1,9 @@ -//this file was auto-generated from "window_icon_256.png" by res2h +// this file was auto-generated from "window_icon_256.png" by res2h #include "../Resources.h" -const size_t window_icon_256_png_size = 4870; -const unsigned char window_icon_256_png_data[4870] = { +const uint16_t window_icon_256_png_size = 4870; +const uint8_t window_icon_256_png_data[4870] = { 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x01,0x00, 0x00,0x00,0x01,0x00,0x08,0x06,0x00,0x00,0x00,0x5c, diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 825208d1fe..91c945c5fe 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -131,27 +131,27 @@ set(EMBEDDED_ASSET_SOURCES ${emulationstation-all_SOURCE_DIR}/data/converted/frame_png.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/scroll_gradient_png.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_analog_left_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_analog_right_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_analog_up_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_analog_down_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_analog_thumb_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_a_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_b_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_x_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_y_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_l_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_r_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_start_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_select_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_button_hotkey_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_dpad_up_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_dpad_down_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_dpad_left_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_dpad_right_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_dpad_updown_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_dpad_leftright_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help_dpad_all_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__analog_left_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__analog_right_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__analog_up_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__analog_down_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__analog_thumb_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_a_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_b_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_x_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_y_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_l_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_r_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_start_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_select_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_hotkey_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_up_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_down_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_left_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_right_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_updown_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_leftright_svg.cpp + ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_all_svg.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_regular_ttf.cpp ${emulationstation-all_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_light_ttf.cpp From 471b1e66a607190352148b652fc68c6e7ac6dfbf Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Fri, 18 Aug 2017 09:38:13 +0100 Subject: [PATCH 145/603] bump version to 2.6.0 --- es-app/src/EmulationStation.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 1173856890..117ed197c9 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -3,11 +3,11 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 5 -#define PROGRAM_VERSION_MAINTENANCE 2 -#define PROGRAM_VERSION_STRING "2.5.2rp" +#define PROGRAM_VERSION_MINOR 6 +#define PROGRAM_VERSION_MAINTENANCE 0 +#define PROGRAM_VERSION_STRING "2.6.0rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,5,2\0" +#define RESOURCE_VERSION_STRING "2,6,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From c7b3db244e226a9e85b4aa6871955ef11bb98257 Mon Sep 17 00:00:00 2001 From: jrassa Date: Mon, 14 Aug 2017 22:34:34 -0400 Subject: [PATCH 146/603] carousel enhancements --- THEMES.md | 23 +- es-app/src/guis/GuiFastSelect.cpp | 4 +- es-app/src/guis/GuiMenu.cpp | 2 +- es-app/src/views/SystemView.cpp | 200 +++++++++++++----- es-app/src/views/SystemView.h | 13 +- es-app/src/views/ViewController.cpp | 1 + .../views/gamelist/ISimpleGameListView.cpp | 2 +- es-core/src/GuiComponent.cpp | 1 - es-core/src/ThemeData.cpp | 4 + es-core/src/components/MenuComponent.cpp | 2 +- es-core/src/components/OptionListComponent.h | 2 +- es-core/src/components/TextComponent.cpp | 44 +++- es-core/src/components/TextComponent.h | 6 +- es-core/src/resources/Font.h | 4 +- 14 files changed, 222 insertions(+), 86 deletions(-) diff --git a/THEMES.md b/THEMES.md index f1b7fa2a6e..e6845c8522 100644 --- a/THEMES.md +++ b/THEMES.md @@ -673,17 +673,32 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice #### carousel * `type` - type: STRING. - - Accepted values are "horizontal" or "vertical". Sets the scoll direction of the carousel. - - Default is "horizontal". + - Sets the scoll direction of the carousel. + - Accepted values are "horizontal", "vertical" or "vertical_wheel". + - Default is "horizontal". * `size` - type: NORMALIZED_PAIR. Default is "1 0.2325" * `pos` - type: NORMALIZED_PAIR. Default is "0 0.38375". +* `origin` - type: NORMALIZED_PAIR. + - Where on the carousel `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the carousel exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. * `color` - type: COLOR. - Controls the color of the carousel background. - Default is FFFFFFD8 * `logoSize` - type: NORMALIZED_PAIR. Default is "0.25 0.155" * `logoScale` - type: FLOAT. - * Selected logo is increased in size by this scale - * Default is 1.2 + - Selected logo is increased in size by this scale + - Default is 1.2 +* `logoRotation` - type: FLOAT. + - Angle in degrees that the logos should be rotated. Value should be positive. + - Default is 7.5 + - This property only applies when `type` is "vertical_wheel". +* `logoRotationOrigin` - type: NORMALIZED_PAIR. + - Point around which the logos will be rotated. Defaults to `-5 0.5`. + - This property only applies when `type` is "vertical_wheel". +* `logoAlignment` - type: STRING. + - Sets the alignment of the logos relative to the carousel. + - Accepted values are "top", "bottom" or "center" when `type` is "horizontal". + - Accepted values are "left", "right" or "center" when `type` is "vertical" or "vertical_wheel". + - Default is "center" * `maxLogoCount` - type: FLOAT. - Sets the number of logos to display in the carousel. - Default is 3 diff --git a/es-app/src/guis/GuiFastSelect.cpp b/es-app/src/guis/GuiFastSelect.cpp index 75b7fbe62b..59715e9ffd 100644 --- a/es-app/src/guis/GuiFastSelect.cpp +++ b/es-app/src/guis/GuiFastSelect.cpp @@ -19,14 +19,14 @@ GuiFastSelect::GuiFastSelect(Window* window, IGameListView* gamelist) : GuiCompo addChild(&mBackground); mLetterText.setSize(mSize.x(), mSize.y() * 0.75f); - mLetterText.setAlignment(ALIGN_CENTER); + mLetterText.setHorizontalAlignment(ALIGN_CENTER); mLetterText.applyTheme(theme, "fastSelect", "letter", FONT_PATH | COLOR); // TODO - set font size addChild(&mLetterText); mSortText.setPosition(0, mSize.y() * 0.75f); mSortText.setSize(mSize.x(), mSize.y() * 0.25f); - mSortText.setAlignment(ALIGN_CENTER); + mSortText.setHorizontalAlignment(ALIGN_CENTER); mSortText.applyTheme(theme, "fastSelect", "subtext", FONT_PATH | COLOR); // TODO - set font size addChild(&mSortText); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 696e444e2c..c46a56e64a 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -418,7 +418,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN mVersion.setFont(Font::get(FONT_SIZE_SMALL)); mVersion.setColor(0x5E5E5EFF); mVersion.setText("EMULATIONSTATION V" + strToUpper(PROGRAM_VERSION_STRING)); - mVersion.setAlignment(ALIGN_CENTER); + mVersion.setHorizontalAlignment(ALIGN_CENTER); addChild(&mMenu); addChild(&mVersion); diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index acb14c8cfe..999ac79cad 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -49,18 +49,10 @@ void SystemView::populate() if(!path.empty() && ResourceManager::getInstance()->fileExists(path)) { ImageComponent* logo = new ImageComponent(mWindow, false, false); - logo->setMaxSize(Eigen::Vector2f(mCarousel.logoSize.x(), mCarousel.logoSize.y())); + logo->setMaxSize(mCarousel.logoSize * mCarousel.logoScale); logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); - logo->setPosition((mCarousel.logoSize.x() - logo->getSize().x()) / 2, - (mCarousel.logoSize.y() - logo->getSize().y()) / 2); // center - e.data.logo = std::shared_ptr(logo); - ImageComponent* logoSelected = new ImageComponent(mWindow, false, false); - logoSelected->setMaxSize(Eigen::Vector2f(mCarousel.logoSize.x() * mCarousel.logoScale, mCarousel.logoSize.y() * mCarousel.logoScale)); - logoSelected->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); - logoSelected->setPosition((mCarousel.logoSize.x() - logoSelected->getSize().x()) / 2, - (mCarousel.logoSize.y() - logoSelected->getSize().y()) / 2); // center - e.data.logoSelected = std::shared_ptr(logoSelected); + e.data.logo = std::shared_ptr(logo); } } if (!e.data.logo) @@ -71,20 +63,36 @@ void SystemView::populate() Font::get(FONT_SIZE_LARGE), 0x000000FF, ALIGN_CENTER); - text->setSize(mCarousel.logoSize); - text->applyTheme((*it)->getTheme(), "system", "logoText", ThemeFlags::FONT_PATH | ThemeFlags::COLOR | ThemeFlags::FORCE_UPPERCASE); + text->setSize(mCarousel.logoSize * mCarousel.logoScale); + text->applyTheme((*it)->getTheme(), "system", "logoText", ThemeFlags::FONT_PATH | ThemeFlags::FONT_SIZE | ThemeFlags::COLOR | ThemeFlags::FORCE_UPPERCASE); e.data.logo = std::shared_ptr(text); - TextComponent* textSelected = new TextComponent(mWindow, - (*it)->getName(), - Font::get((int)(FONT_SIZE_LARGE * mCarousel.logoScale)), - 0x000000FF, - ALIGN_CENTER); - textSelected->setSize(mCarousel.logoSize); - textSelected->applyTheme((*it)->getTheme(), "system", "logoText", ThemeFlags::FONT_PATH | ThemeFlags::COLOR | ThemeFlags::FORCE_UPPERCASE); - e.data.logoSelected = std::shared_ptr(textSelected); + if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) + text->setHorizontalAlignment(mCarousel.logoAlignment); + else + text->setVerticalAlignment(mCarousel.logoAlignment); + } + + if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) + { + if (mCarousel.logoAlignment == ALIGN_LEFT) + e.data.logo->setOrigin(0, 0.5); + else if (mCarousel.logoAlignment == ALIGN_RIGHT) + e.data.logo->setOrigin(1.0, 0.5); + else + e.data.logo->setOrigin(0.5, 0.5); + } else { + if (mCarousel.logoAlignment == ALIGN_TOP) + e.data.logo->setOrigin(0.5, 0); + else if (mCarousel.logoAlignment == ALIGN_BOTTOM) + e.data.logo->setOrigin(0.5, 1); + else + e.data.logo->setOrigin(0.5, 0.5); } + Eigen::Vector2f denormalized = mCarousel.logoSize.cwiseProduct(e.data.logo->getOrigin()); + e.data.logo->setPosition(denormalized.x(), denormalized.y(), 0.0); + // delete any existing extras for (auto extra : e.data.backgroundExtras) delete extra; @@ -94,7 +102,7 @@ void SystemView::populate() e.data.backgroundExtras = ThemeData::makeExtras((*it)->getTheme(), "system", mWindow); // sort the extras by z-index - std:stable_sort(e.data.backgroundExtras.begin(), e.data.backgroundExtras.end(), [](GuiComponent* a, GuiComponent* b) { + std::stable_sort(e.data.backgroundExtras.begin(), e.data.backgroundExtras.end(), [](GuiComponent* a, GuiComponent* b) { return b->getZIndex() > a->getZIndex(); }); @@ -124,6 +132,7 @@ bool SystemView::input(InputConfig* config, Input input) switch (mCarousel.type) { case VERTICAL: + case VERTICAL_WHEEL: if (config->isMappedTo("up", input)) { listInput(-1); @@ -400,14 +409,16 @@ void SystemView::getViewElements(const std::shared_ptr& theme) // Render system carousel void SystemView::renderCarousel(const Eigen::Affine3f& trans) { - Eigen::Vector2i clipPos((int)mCarousel.pos.x(), (int)mCarousel.pos.y()); - Eigen::Vector2i clipSize((int)mCarousel.size.x(), (int)mCarousel.size.y()); + // background box behind logos + Eigen::Affine3f carouselTrans = trans; + carouselTrans.translate(Eigen::Vector3f(mCarousel.pos.x(), mCarousel.pos.y(), 0.0)); + carouselTrans.translate(Eigen::Vector3f(mCarousel.origin.x() * mCarousel.size.x() * -1, mCarousel.origin.y() * mCarousel.size.y() * -1, 0.0f)); - Renderer::pushClipRect(clipPos, clipSize); + Eigen::Vector2f clipPos(carouselTrans.translation().x(), carouselTrans.translation().y()); + Renderer::pushClipRect(clipPos.cast(), mCarousel.size.cast()); - // background box behind logos - Renderer::setMatrix(trans); - Renderer::drawRect(mCarousel.pos.x(), mCarousel.pos.y(), mCarousel.size.x(), mCarousel.size.y(), mCarousel.color); + Renderer::setMatrix(carouselTrans); + Renderer::drawRect(0.0, 0.0, mCarousel.size.x(), mCarousel.size.y(), mCarousel.color); // draw logos Eigen::Vector2f logoSpacing(0.0, 0.0); // NB: logoSpacing will include the size of the logo itself as well! @@ -416,20 +427,40 @@ void SystemView::renderCarousel(const Eigen::Affine3f& trans) switch (mCarousel.type) { + case VERTICAL_WHEEL: + yOff = (mCarousel.size.y() - mCarousel.logoSize.y()) / 2 - (mCamOffset * logoSpacing[1]); + if (mCarousel.logoAlignment == ALIGN_LEFT) + xOff = mCarousel.logoSize.x() / 10; + else if (mCarousel.logoAlignment == ALIGN_RIGHT) + xOff = mCarousel.size.x() - (mCarousel.logoSize.x() * 1.1); + else + xOff = (mCarousel.size.x() - mCarousel.logoSize.x()) / 2; + break; case VERTICAL: logoSpacing[1] = ((mCarousel.size.y() - (mCarousel.logoSize.y() * mCarousel.maxLogoCount)) / (mCarousel.maxLogoCount)) + mCarousel.logoSize.y(); - xOff = mCarousel.pos.x() + (mCarousel.size.x() / 2) - (mCarousel.logoSize.x() / 2); - yOff = mCarousel.pos.y() + (mCarousel.size.y() - mCarousel.logoSize.y()) / 2 - (mCamOffset * logoSpacing[1]); + yOff = (mCarousel.size.y() - mCarousel.logoSize.y()) / 2 - (mCamOffset * logoSpacing[1]); + + if (mCarousel.logoAlignment == ALIGN_LEFT) + xOff = mCarousel.logoSize.x() / 10; + else if (mCarousel.logoAlignment == ALIGN_RIGHT) + xOff = mCarousel.size.x() - (mCarousel.logoSize.x() * 1.1); + else + xOff = (mCarousel.size.x() - mCarousel.logoSize.x()) / 2; break; case HORIZONTAL: default: logoSpacing[0] = ((mCarousel.size.x() - (mCarousel.logoSize.x() * mCarousel.maxLogoCount)) / (mCarousel.maxLogoCount)) + mCarousel.logoSize.x(); - xOff = mCarousel.pos.x() + (mCarousel.size.x() - mCarousel.logoSize.x()) / 2 - (mCamOffset * logoSpacing[0]); - yOff = mCarousel.pos.y() + (mCarousel.size.y() / 2) - (mCarousel.logoSize.y() / 2); + xOff = (mCarousel.size.x() - mCarousel.logoSize.x()) / 2 - (mCamOffset * logoSpacing[0]); + + if (mCarousel.logoAlignment == ALIGN_TOP) + yOff = mCarousel.logoSize.y() / 10; + else if (mCarousel.logoAlignment == ALIGN_BOTTOM) + yOff = mCarousel.size.y() - (mCarousel.logoSize.y() * 1.1); + else + yOff = (mCarousel.size.y() - mCarousel.logoSize.y()) / 2; break; } - Eigen::Affine3f logoTrans = trans; int center = (int)(mCamOffset); int logoCount = std::min(mCarousel.maxLogoCount, (int)mEntries.size()); @@ -444,19 +475,26 @@ void SystemView::renderCarousel(const Eigen::Affine3f& trans) while (index >= (int)mEntries.size()) index -= mEntries.size(); - logoTrans.translation() = trans.translation() + Eigen::Vector3f(i * logoSpacing[0] + xOff, i * logoSpacing [1] + yOff, 0); + Eigen::Affine3f logoTrans = carouselTrans; + logoTrans.translate(Eigen::Vector3f(i * logoSpacing[0] + xOff, i * logoSpacing[1] + yOff, 0)); - if (index == mCursor) //Selected System - { - const std::shared_ptr& comp = mEntries.at(index).data.logoSelected; - comp->setOpacity(0xFF); - comp->render(logoTrans); - } - else { // not selected systems - const std::shared_ptr& comp = mEntries.at(index).data.logo; - comp->setOpacity(0x80); - comp->render(logoTrans); + float distance = i - mCamOffset; + + float scale = 1.0 + ((mCarousel.logoScale - 1.0) * (1 - fabs(distance))); + scale = std::min(mCarousel.logoScale, std::max(1.0f, scale)); + scale /= mCarousel.logoScale; + + int opacity = round(0x80 + ((0xFF - 0x80) * (1 - fabs(distance)))); + opacity = std::max((int) 0x80, opacity); + + const std::shared_ptr &comp = mEntries.at(index).data.logo; + if (mCarousel.type == VERTICAL_WHEEL) { + comp->setRotationDegrees(mCarousel.logoRotation * distance); + comp->setRotationOrigin(mCarousel.logoRotationOrigin); } + comp->setScale(scale); + comp->setOpacity(opacity); + comp->render(logoTrans); } Renderer::popClipRect(); } @@ -475,7 +513,7 @@ void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float u // Adding texture loading buffers depending on scrolling speed and status int bufferIndex = getScrollingVelocity() + 1; - Renderer::pushClipRect(Eigen::Vector2i(0, 0), mSize.cast()); + Renderer::pushClipRect(Eigen::Vector2i::Zero(), mSize.cast()); for (int i = extrasCenter + logoBuffersLeft[bufferIndex]; i <= extrasCenter + logoBuffersRight[bufferIndex]; i++) { @@ -485,22 +523,26 @@ void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float u while (index >= (int)mEntries.size()) index -= mEntries.size(); - Eigen::Affine3f extrasTrans = trans; - if (mCarousel.type == HORIZONTAL) - extrasTrans.translate(Eigen::Vector3f((i - mExtrasCamOffset) * mSize.x(), 0, 0)); - else - extrasTrans.translate(Eigen::Vector3f(0, (i - mExtrasCamOffset) * mSize.y(), 0)); - - Renderer::pushClipRect(Eigen::Vector2i(extrasTrans.translation()[0], extrasTrans.translation()[1]), mSize.cast()); - SystemViewData data = mEntries.at(index).data; - for(unsigned int j = 0; j < data.backgroundExtras.size(); j++) + //Only render selected system when not showing + if (mShowing || index == mCursor) { - GuiComponent* extra = data.backgroundExtras[j]; - if (extra->getZIndex() >= lower && extra->getZIndex() < upper) { - extra->render(extrasTrans); + Eigen::Affine3f extrasTrans = trans; + if (mCarousel.type == HORIZONTAL) + extrasTrans.translate(Eigen::Vector3f((i - mExtrasCamOffset) * mSize.x(), 0, 0)); + else + extrasTrans.translate(Eigen::Vector3f(0, (i - mExtrasCamOffset) * mSize.y(), 0)); + + Renderer::pushClipRect(Eigen::Vector2i(extrasTrans.translation()[0], extrasTrans.translation()[1]), + mSize.cast()); + SystemViewData data = mEntries.at(index).data; + for (unsigned int j = 0; j < data.backgroundExtras.size(); j++) { + GuiComponent *extra = data.backgroundExtras[j]; + if (extra->getZIndex() >= lower && extra->getZIndex() < upper) { + extra->render(extrasTrans); + } } + Renderer::popClipRect(); } - Renderer::popClipRect(); } Renderer::popClipRect(); } @@ -520,12 +562,18 @@ void SystemView::getDefaultElements(void) { // Carousel mCarousel.type = HORIZONTAL; + mCarousel.logoAlignment = ALIGN_CENTER; mCarousel.size.x() = mSize.x(); mCarousel.size.y() = 0.2325f * mSize.y(); mCarousel.pos.x() = 0.0f; mCarousel.pos.y() = 0.5f * (mSize.y() - mCarousel.size.y()); + mCarousel.origin.x() = 0.0f; + mCarousel.origin.y() = 0.0f; mCarousel.color = 0xFFFFFFD8; mCarousel.logoScale = 1.2f; + mCarousel.logoRotation = 7.5; + mCarousel.logoRotationOrigin.x() = -5; + mCarousel.logoRotationOrigin.y() = 0.5; mCarousel.logoSize.x() = 0.25f * mSize.x(); mCarousel.logoSize.y() = 0.155f * mSize.y(); mCarousel.maxLogoCount = 3; @@ -545,11 +593,20 @@ void SystemView::getDefaultElements(void) void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) { if (elem->has("type")) - mCarousel.type = !(elem->get("type").compare("vertical")) ? VERTICAL : HORIZONTAL; + { + if (!(elem->get("type").compare("vertical"))) + mCarousel.type = VERTICAL; + else if (!(elem->get("type").compare("vertical_wheel"))) + mCarousel.type = VERTICAL_WHEEL; + else + mCarousel.type = HORIZONTAL; + } if (elem->has("size")) mCarousel.size = elem->get("size").cwiseProduct(mSize); if (elem->has("pos")) mCarousel.pos = elem->get("pos").cwiseProduct(mSize); + if (elem->has("origin")) + mCarousel.origin = elem->get("origin"); if (elem->has("color")) mCarousel.color = elem->get("color"); if (elem->has("logoScale")) @@ -560,4 +617,31 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) mCarousel.maxLogoCount = std::round(elem->get("maxLogoCount")); if (elem->has("zIndex")) mCarousel.zIndex = elem->get("zIndex"); + if (elem->has("logoRotation")) + mCarousel.logoRotation = elem->get("logoRotation"); + if (elem->has("logoRotationOrigin")) + mCarousel.logoRotationOrigin = elem->get("logoRotationOrigin"); + if (elem->has("logoAlignment")) + { + if (!(elem->get("logoAlignment").compare("left"))) + mCarousel.logoAlignment = ALIGN_LEFT; + else if (!(elem->get("logoAlignment").compare("right"))) + mCarousel.logoAlignment = ALIGN_RIGHT; + else if (!(elem->get("logoAlignment").compare("top"))) + mCarousel.logoAlignment = ALIGN_TOP; + else if (!(elem->get("logoAlignment").compare("bottom"))) + mCarousel.logoAlignment = ALIGN_BOTTOM; + else + mCarousel.logoAlignment = ALIGN_CENTER; + } +} + +void SystemView::onShow() +{ + mShowing = true; +} + +void SystemView::onHide() +{ + mShowing = false; } diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index c766c5902b..50689eb923 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -13,13 +13,13 @@ class AnimatedImageComponent; enum CarouselType : unsigned int { HORIZONTAL = 0, - VERTICAL = 1 + VERTICAL = 1, + VERTICAL_WHEEL = 2 }; struct SystemViewData { std::shared_ptr logo; - std::shared_ptr logoSelected; std::vector backgroundExtras; }; @@ -28,8 +28,11 @@ struct SystemViewCarousel CarouselType type; Eigen::Vector2f pos; Eigen::Vector2f size; + Eigen::Vector2f origin; float logoScale; - Eigen::Vector2f logoSpacing; + float logoRotation; + Eigen::Vector2f logoRotationOrigin; + Alignment logoAlignment; unsigned int color; int maxLogoCount; // number of logos shown on the carousel Eigen::Vector2f logoSize; @@ -41,6 +44,9 @@ class SystemView : public IList public: SystemView(Window* window); + virtual void onShow() override; + virtual void onHide() override; + void goToSystem(SystemData* system, bool animate); bool input(InputConfig* config, Input input) override; @@ -76,4 +82,5 @@ class SystemView : public IList float mExtrasFadeOpacity; bool mViewNeedsReload; + bool mShowing; }; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index cb7b66a496..729c1b4931 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -72,6 +72,7 @@ void ViewController::goToSystemView(SystemData* system) systemList->goToSystem(system, false); mCurrentView = systemList; + mCurrentView->onShow(); PowerSaver::setState(true); playViewTransition(); diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 3b468f4458..064aa67960 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -13,7 +13,7 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame mHeaderText.setText("Logo Text"); mHeaderText.setSize(mSize.x(), 0); mHeaderText.setPosition(0, 0); - mHeaderText.setAlignment(ALIGN_CENTER); + mHeaderText.setHorizontalAlignment(ALIGN_CENTER); mHeaderText.setDefaultZIndex(50); mHeaderImage.setResize(0, mSize.y() * 0.185f); diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 07feb0afc3..43a79b41ac 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -132,7 +132,6 @@ float GuiComponent::getScale() const void GuiComponent::setScale(float scale) { mScale = scale; - onSizeChanged(); } float GuiComponent::getZIndex() const diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index ed5b240e35..dc5c6deae7 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -127,9 +127,13 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("type", STRING) ("size", NORMALIZED_PAIR) ("pos", NORMALIZED_PAIR) + ("origin", NORMALIZED_PAIR) ("color", COLOR) ("logoScale", FLOAT) + ("logoRotation", FLOAT) + ("logoRotationOrigin", NORMALIZED_PAIR) ("logoSize", NORMALIZED_PAIR) + ("logoAlignment", STRING) ("maxLogoCount", FLOAT) ("zIndex", FLOAT))); diff --git a/es-core/src/components/MenuComponent.cpp b/es-core/src/components/MenuComponent.cpp index 58462dd9c9..376ebca780 100644 --- a/es-core/src/components/MenuComponent.cpp +++ b/es-core/src/components/MenuComponent.cpp @@ -18,7 +18,7 @@ MenuComponent::MenuComponent(Window* window, const char* title, const std::share // set up title mTitle = std::make_shared(mWindow); - mTitle->setAlignment(ALIGN_CENTER); + mTitle->setHorizontalAlignment(ALIGN_CENTER); mTitle->setColor(0x555555FF); setTitle(title, titleFont); mGrid.setEntry(mTitle, Vector2i(0, 0), false); diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index 9f3eec5215..5ba88fca10 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -144,7 +144,7 @@ class OptionListComponent : public GuiComponent auto font = Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT); mText.setFont(font); mText.setColor(0x777777FF); - mText.setAlignment(ALIGN_CENTER); + mText.setHorizontalAlignment(ALIGN_CENTER); addChild(&mText); if(mMultiSelect) diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index bb1edfb5db..c718f99260 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -8,13 +8,17 @@ #include "Settings.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), - mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(ALIGN_LEFT), mLineSpacing(1.5f), mBgColor(0), mRenderBackground(false) + mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), + mHorizontalAlignment(ALIGN_LEFT), mVerticalAlignment(ALIGN_CENTER), mLineSpacing(1.5f), mBgColor(0), + mRenderBackground(false) { } TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Alignment align, Eigen::Vector3f pos, Eigen::Vector2f size, unsigned int bgcolor) : GuiComponent(window), - mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mAlignment(align), mLineSpacing(1.5f), mBgColor(0), mRenderBackground(false) + mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), + mHorizontalAlignment(align), mVerticalAlignment(ALIGN_CENTER), mLineSpacing(1.5f), mBgColor(0), + mRenderBackground(false) { setFont(font); setColor(color); @@ -104,7 +108,20 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) if(mTextCache) { const Eigen::Vector2f& textSize = mTextCache->metrics.size; - Eigen::Vector3f off(0, (getSize().y() - textSize.y()) / 2.0f, 0); + float yOff; + switch(mVerticalAlignment) + { + case ALIGN_TOP: + yOff = 0; + break; + case ALIGN_BOTTOM: + yOff = (getSize().y() - textSize.y()); + break; + case ALIGN_CENTER: + yOff = (getSize().y() - textSize.y()) / 2.0f; + break; + } + Eigen::Vector3f off(0, yOff, 0); if(Settings::getInstance()->getBool("DebugText")) { @@ -120,7 +137,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) // draw the text area, where the text actually is going if(Settings::getInstance()->getBool("DebugText")) { - switch(mAlignment) + switch(mHorizontalAlignment) { case ALIGN_LEFT: Renderer::drawRect(0.0f, 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033); @@ -189,9 +206,9 @@ void TextComponent::onTextChanged() text.append(abbrev); - mTextCache = std::shared_ptr(f->buildTextCache(text, Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment, mLineSpacing)); + mTextCache = std::shared_ptr(f->buildTextCache(text, Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mHorizontalAlignment, mLineSpacing)); }else{ - mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(text, mSize.x()), Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mAlignment, mLineSpacing)); + mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(text, mSize.x()), Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mHorizontalAlignment, mLineSpacing)); } } @@ -203,12 +220,17 @@ void TextComponent::onColorChanged() } } -void TextComponent::setAlignment(Alignment align) +void TextComponent::setHorizontalAlignment(Alignment align) { - mAlignment = align; + mHorizontalAlignment = align; onTextChanged(); } +void TextComponent::setVerticalAlignment(Alignment align) +{ + mVerticalAlignment = align; +} + void TextComponent::setLineSpacing(float spacing) { mLineSpacing = spacing; @@ -248,11 +270,11 @@ void TextComponent::applyTheme(const std::shared_ptr& theme, const st { std::string str = elem->get("alignment"); if(str == "left") - setAlignment(ALIGN_LEFT); + setHorizontalAlignment(ALIGN_LEFT); else if(str == "center") - setAlignment(ALIGN_CENTER); + setHorizontalAlignment(ALIGN_CENTER); else if(str == "right") - setAlignment(ALIGN_RIGHT); + setHorizontalAlignment(ALIGN_RIGHT); else LOG(LogError) << "Unknown text alignment string: " << str; } diff --git a/es-core/src/components/TextComponent.h b/es-core/src/components/TextComponent.h index 2f2f8e4e60..2e9938c589 100644 --- a/es-core/src/components/TextComponent.h +++ b/es-core/src/components/TextComponent.h @@ -23,7 +23,8 @@ class TextComponent : public GuiComponent void onSizeChanged() override; void setText(const std::string& text); void setColor(unsigned int color); - void setAlignment(Alignment align); + void setHorizontalAlignment(Alignment align); + void setVerticalAlignment(Alignment align); void setLineSpacing(float spacing); void setBackgroundColor(unsigned int color); void setRenderBackground(bool render); @@ -57,7 +58,8 @@ class TextComponent : public GuiComponent Eigen::Matrix mAutoCalcExtent; std::string mText; std::shared_ptr mTextCache; - Alignment mAlignment; + Alignment mHorizontalAlignment; + Alignment mVerticalAlignment; float mLineSpacing; }; diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index 376a7d6396..0dee2aa6c2 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -25,7 +25,9 @@ enum Alignment { ALIGN_LEFT, ALIGN_CENTER, // centers both horizontally and vertically - ALIGN_RIGHT + ALIGN_RIGHT, + ALIGN_TOP, + ALIGN_BOTTOM }; //A TrueType Font renderer that uses FreeType and OpenGL. From 43c9043856c96d148f20453ce7116728328e8b5e Mon Sep 17 00:00:00 2001 From: gizmo98 Date: Sat, 19 Aug 2017 14:33:50 +0200 Subject: [PATCH 147/603] Add options for GL and GLES selection Fallback to autodetect or OpenGL Desktop if no option is selected. --- CMakeLists.txt | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aa442ea2c1..f0b8f75bc2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,8 @@ cmake_minimum_required(VERSION 2.8) +option(GLES "Set to ON if targeting OpenGL ES" ${GLES}) +option(GL "Set to ON if targeting Desktop OpenGL" ${GL}) + project(emulationstation-all) #------------------------------------------------------------------------------- @@ -11,33 +14,30 @@ LIST(APPEND CMAKE_MODULE_PATH #------------------------------------------------------------------------------- #set up OpenGL system variable -set(GLSystem "Desktop OpenGL" CACHE STRING "The OpenGL system to be used") -set_property(CACHE GLSystem PROPERTY STRINGS "Desktop OpenGL" "OpenGL ES") - +if(GLES) + set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") +elseif(GL) + set(GLSystem "Desktop OpenGL" CACHE STRING "The OpenGL system to be used") #------------------------------------------------------------------------------- #check if we're running on Raspberry Pi -MESSAGE("Looking for bcm_host.h") -if(EXISTS "/opt/vc/include/bcm_host.h") +elseif(EXISTS "/opt/vc/include/bcm_host.h") MESSAGE("bcm_host.h found") set(BCMHOST found) - set(GLSystem "OpenGL ES") -else() - MESSAGE("bcm_host.h not found") -endif() - + set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") #------------------------------------------------------------------------------- #check if we're running on olinuxino / odroid / etc -MESSAGE("Looking for libMali.so") -if(EXISTS "/usr/lib/libMali.so" OR - EXISTS "/usr/lib/arm-linux-gnueabihf/libMali.so" OR - EXISTS "/usr/lib/aarch64-linux-gnu/libMali.so" OR - EXISTS "/usr/lib/arm-linux-gnueabihf/mali-egl/libmali.so" OR - EXISTS "/usr/lib/arm-linux-gnueabihf/libmali.so") +elseif(EXISTS "/usr/lib/libMali.so" OR + EXISTS "/usr/lib/arm-linux-gnueabihf/libMali.so" OR + EXISTS "/usr/lib/aarch64-linux-gnu/libMali.so" OR + EXISTS "/usr/lib/arm-linux-gnueabihf/mali-egl/libmali.so" OR + EXISTS "/usr/lib/arm-linux-gnueabihf/libmali.so") MESSAGE("libMali.so found") - set(GLSystem "OpenGL ES") + set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") else() - MESSAGE("libMali.so not found") -endif() + set(GLSystem "Desktop OpenGL" CACHE STRING "The OpenGL system to be used") +endif(GLES) + +set_property(CACHE GLSystem PROPERTY STRINGS "Desktop OpenGL" "OpenGL ES") #finding necessary packages #------------------------------------------------------------------------------- From cf3b641c3c49fc2826392ed326ffed79e6acad81 Mon Sep 17 00:00:00 2001 From: pjft Date: Tue, 22 Aug 2017 20:34:59 +0100 Subject: [PATCH 148/603] Making OMXPlayer respect sound settings --- es-core/src/components/VideoPlayerComponent.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 5561236489..abeae844c2 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -11,6 +11,14 @@ #include #include #include +#include + +class VolumeControl +{ +public: + static std::shared_ptr & getInstance(); + int getVolume() const; +}; VideoPlayerComponent::VideoPlayerComponent(Window* window, std::string path) : VideoComponent(window), @@ -101,10 +109,16 @@ void VideoPlayerComponent::startVideo() const char* argv[] = { "", "--layer", "10010", "--loop", "--no-osd", "--aspect-mode", "letterbox", "--vol", "0", "-o", "both","--win", buf, "--no-ghost-box", "", "", "", "", NULL }; // check if we want to mute the audio - if (!Settings::getInstance()->getBool("VideoAudio")) + if (!Settings::getInstance()->getBool("VideoAudio") || (float)VolumeControl::getInstance()->getVolume() == 0) { argv[8] = "-1000000"; } + else + { + float percentVolume = (float)VolumeControl::getInstance()->getVolume(); + int OMXVolume = (int)(log(percentVolume/100)*2000); + argv[8] = std::to_string(OMXVolume).c_str(); + } // test if there's a path for possible subtitles, meaning we're a screensaver video if (!subtitlePath.empty()) From 5a62040f63e7cf23eb2824b0ac456bdf35fcdaf4 Mon Sep 17 00:00:00 2001 From: hex007 Date: Tue, 22 Aug 2017 14:33:26 -0700 Subject: [PATCH 149/603] Fixes blank screen on key press while exiting game --- es-app/src/views/ViewController.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 2b7b9fbdd0..2b0016b8cf 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -239,15 +239,12 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) { // fade out, launch game, fade back in auto fadeFunc = [this](float t) { - //t -= 1; - //mFadeOpacity = lerp(0.0f, 1.0f, t*t*t + 1); mFadeOpacity = lerp(0.0f, 1.0f, t); }; setAnimation(new LambdaAnimation(fadeFunc, 800), 0, [this, game, fadeFunc] { game->launchGame(mWindow); - mLockInput = false; - setAnimation(new LambdaAnimation(fadeFunc, 800), 0, nullptr, true); + setAnimation(new LambdaAnimation(fadeFunc, 800), 0, [this] { mLockInput = false; }, true); this->onFileChanged(game, FILE_METADATA_CHANGED); }); } else if (transition_style == "slide"){ @@ -256,17 +253,15 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) { game->launchGame(mWindow); mCamera = origCamera; - mLockInput = false; - setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), 0, nullptr, true); + setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), 0, [this] { mLockInput = false; }, true); this->onFileChanged(game, FILE_METADATA_CHANGED); }); - } else { + } else { // instant setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 10), 0, [this, origCamera, center, game] { game->launchGame(mWindow); mCamera = origCamera; - mLockInput = false; - setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 10), 0, nullptr, true); + setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 10), 0, [this] { mLockInput = false; }, true); this->onFileChanged(game, FILE_METADATA_CHANGED); }); } From 7caf70a5e5a78989f88d4f07efdb8143fb6e02e6 Mon Sep 17 00:00:00 2001 From: pjft Date: Wed, 23 Aug 2017 09:21:31 +0100 Subject: [PATCH 150/603] Adding slider to control screensaver swap time --- es-app/src/SystemScreenSaver.cpp | 6 ++++-- es-app/src/SystemScreenSaver.h | 1 + es-app/src/guis/GuiScreensaverOptions.cpp | 10 ++++++++++ es-core/src/PowerSaver.cpp | 2 +- es-core/src/PowerSaver.h | 2 ++ es-core/src/Settings.cpp | 2 ++ es-core/src/components/VideoComponent.cpp | 19 +++++++++++++++---- 7 files changed, 35 insertions(+), 7 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index c632c70ef4..5078e9bd5e 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -15,7 +15,6 @@ #include #define FADE_TIME 300 -#define SWAP_VIDEO_TIMEOUT 30000 SystemScreenSaver::SystemScreenSaver(Window* window) : mVideoScreensaver(NULL), @@ -34,6 +33,7 @@ SystemScreenSaver::SystemScreenSaver(Window* window) : if(!boost::filesystem::exists(path)) boost::filesystem::create_directory(path); srand((unsigned int)time(NULL)); + mVideoChangeTime = 30000; } SystemScreenSaver::~SystemScreenSaver() @@ -63,6 +63,7 @@ void SystemScreenSaver::startScreenSaver() mState = PowerSaver::getMode() == PowerSaver::INSTANT ? STATE_SCREENSAVER_ACTIVE : STATE_FADE_OUT_WINDOW; + mVideoChangeTime = Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout"); mOpacity = 0.0f; // Load a random video @@ -117,6 +118,7 @@ void SystemScreenSaver::stopScreenSaver() { delete mVideoScreensaver; mVideoScreensaver = NULL; + // we need this to loop through different videos mState = STATE_INACTIVE; PowerSaver::runningScreenSaver(false); } @@ -291,7 +293,7 @@ void SystemScreenSaver::update(int deltaTime) { // Update the timer that swaps the videos mTimer += deltaTime; - if (mTimer > SWAP_VIDEO_TIMEOUT) + if (mTimer > mVideoChangeTime) { nextVideo(); } diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index 1865d3aff7..c1c2dc2b37 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -46,4 +46,5 @@ class SystemScreenSaver : public Window::ScreenSaver FileData* mCurrentGame; std::string mGameName; std::string mSystemName; + int mVideoChangeTime; }; diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index 51eb8fc50c..c057c959da 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -10,11 +10,21 @@ #include "components/OptionListComponent.h" #include "components/MenuComponent.h" #include "guis/GuiMsgBox.h" +#include "PowerSaver.h" GuiScreensaverOptions::GuiScreensaverOptions(Window* window, const char* title) : GuiComponent(window), mMenu(window, title) { addChild(&mMenu); + // timeout to swap videos + auto swap = std::make_shared(mWindow, 10.f, 1000.f, 1.f, "s"); + swap->setValue((float)(Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") / (1000))); + addWithLabel("SWAP VIDEO AFTER (SECS)", swap); + addSaveFunc([swap] { + Settings::getInstance()->setInt("ScreenSaverSwapVideoTimeout", (int)round(swap->getValue()) * (1000)); + PowerSaver::updateTimeouts(); + }); + #ifdef _RPI_ auto ss_omx = std::make_shared(mWindow); ss_omx->setState(Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); diff --git a/es-core/src/PowerSaver.cpp b/es-core/src/PowerSaver.cpp index 1a4863e2be..cfdb86d069 100644 --- a/es-core/src/PowerSaver.cpp +++ b/es-core/src/PowerSaver.cpp @@ -25,7 +25,7 @@ void PowerSaver::updateTimeouts() { mScreenSaverTimeout = (unsigned int) Settings::getInstance()->getInt("ScreenSaverTime"); mScreenSaverTimeout = mScreenSaverTimeout > 0 ? mScreenSaverTimeout - getMode() : -1; - mPlayNextTimeout = 30000 - getMode(); + mPlayNextTimeout = Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") - getMode(); } PowerSaver::mode PowerSaver::getMode() diff --git a/es-core/src/PowerSaver.h b/es-core/src/PowerSaver.h index f51c8bde8b..fb34865c79 100644 --- a/es-core/src/PowerSaver.h +++ b/es-core/src/PowerSaver.h @@ -1,3 +1,5 @@ +#pragma once + class PowerSaver { public: diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 936d5b84f0..381b42aced 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -94,6 +94,8 @@ void Settings::setDefaults() mBoolMap["ScreenSaverOmxPlayer"] = false; #endif + mIntMap["ScreenSaverSwapVideoTimeout"] = 30000; + mBoolMap["VideoAudio"] = true; mBoolMap["CaptionsCompatibility"] = true; // Audio out device for Video playback using OMX player. diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 1ab5b04748..38cda4f95c 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -1,6 +1,7 @@ #include "components/VideoComponent.h" #include "Renderer.h" #include "ThemeData.h" +#include "Settings.h" #include "Util.h" #include "Window.h" #include "PowerSaver.h" @@ -23,8 +24,11 @@ std::string getTitleFolder() { void writeSubtitle(const char* gameName, const char* systemName, bool always) { FILE* file = fopen(getTitlePath().c_str(), "w"); + int end = (int)(Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") / (1000)); if (always) { - fprintf(file, "1\n00:00:01,000 --> 00:00:30,000\n"); + fprintf(file, "1\n00:00:01,000 --> 00:00:"); + fprintf(file, std::to_string(end).c_str()); + fprintf(file, ",000\n"); } else { @@ -34,9 +38,16 @@ void writeSubtitle(const char* gameName, const char* systemName, bool always) fprintf(file, "%s\n\n", systemName); if (!always) { - fprintf(file, "2\n00:00:26,000 --> 00:00:30,000\n"); - fprintf(file, "%s\n", gameName); - fprintf(file, "%s\n", systemName); + if (end > 12) + { + fprintf(file, "2\n00:00:"); + fprintf(file, std::to_string(end - 4).c_str()); + fprintf(file, ",000 --> 00:00:"); + fprintf(file, std::to_string(end).c_str()); + fprintf(file, ",000\n"); + fprintf(file, "%s\n", gameName); + fprintf(file, "%s\n", systemName); + } } fflush(file); From c6a0449be00b43956b8be9a303791fc5c94c31d0 Mon Sep 17 00:00:00 2001 From: jrassa Date: Wed, 23 Aug 2017 21:49:47 -0400 Subject: [PATCH 151/603] properly render carousel for system configured with only 1 system --- es-app/src/views/SystemView.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 999ac79cad..b6f4090622 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -466,8 +466,15 @@ void SystemView::renderCarousel(const Eigen::Affine3f& trans) // Adding texture loading buffers depending on scrolling speed and status int bufferIndex = getScrollingVelocity() + 1; + int bufferLeft = logoBuffersLeft[bufferIndex]; + int bufferRight = logoBuffersRight[bufferIndex]; + if (logoCount == 1) + { + bufferLeft = 0; + bufferRight = 0; + } - for (int i = center - logoCount / 2 + logoBuffersLeft[bufferIndex]; i <= center + logoCount / 2 + logoBuffersRight[bufferIndex]; i++) + for (int i = center - logoCount / 2 + bufferLeft; i <= center + logoCount / 2 + bufferRight; i++) { int index = i; while (index < 0) From 6b217f375119580472c7cd74d5a1d65073d913b6 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Fri, 25 Aug 2017 23:57:59 +0100 Subject: [PATCH 152/603] bump version to v2.6.1 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 117ed197c9..80fa8a317e 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 6 -#define PROGRAM_VERSION_MAINTENANCE 0 -#define PROGRAM_VERSION_STRING "2.6.0rp" +#define PROGRAM_VERSION_MAINTENANCE 1 +#define PROGRAM_VERSION_STRING "2.6.1rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,6,0\0" +#define RESOURCE_VERSION_STRING "2,6,1\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From b6a12341680592e32637e7a16ed56e5c00582402 Mon Sep 17 00:00:00 2001 From: pjft Date: Mon, 28 Aug 2017 11:08:56 +0100 Subject: [PATCH 153/603] Setting VRAM default at 80 for the Pi More often than not users are running into glGetErrors 505 (running out of video memory) when using heavy themes with the default 100 VRAM setting. The advice of setting it to 80 is often the solution. Until we have a proper/better GPU management solution, this is probably a better default. --- es-core/src/Settings.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 381b42aced..6f36432a34 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -71,7 +71,11 @@ void Settings::setDefaults() mIntMap["ScreenSaverTime"] = 5*60*1000; // 5 minutes mIntMap["ScraperResizeWidth"] = 400; mIntMap["ScraperResizeHeight"] = 0; - mIntMap["MaxVRAM"] = 100; + #ifdef _RPI_ + mIntMap["MaxVRAM"] = 80; + #else + mIntMap["MaxVRAM"] = 100; + #endif mStringMap["TransitionStyle"] = "fade"; mStringMap["ThemeSet"] = ""; From 8670a04ec21909986493421fa508acd786882ac1 Mon Sep 17 00:00:00 2001 From: pjft Date: Tue, 29 Aug 2017 15:04:23 +0100 Subject: [PATCH 154/603] Revert Help Text getting string pointer --- es-app/src/views/gamelist/BasicGameListView.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 38c47ea96c..bfda3b77d2 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -144,8 +144,7 @@ std::vector BasicGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("x", "random")); if(mRoot->getSystem()->isGameSystem()) { - const char* prompt = CollectionSystemManager::get()->getEditingCollection().c_str(); - prompts.push_back(HelpPrompt("y", prompt)); + prompts.push_back(HelpPrompt("y", "toggle")); } return prompts; } From 597128b4ee32c5449d30d8e9ca81d6dc55d86f64 Mon Sep 17 00:00:00 2001 From: hex007 Date: Tue, 29 Aug 2017 17:47:04 -0700 Subject: [PATCH 155/603] Better handle Menu width --- es-app/src/guis/GuiMetaDataEd.cpp | 3 ++- es-core/src/components/MenuComponent.cpp | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index 45f31b8c60..17070cc917 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -153,7 +153,8 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mGrid.setEntry(mButtons, Vector2i(0, 2), true, false); // resize + center - setSize(Renderer::getScreenWidth() * 0.5f, Renderer::getScreenHeight() * 0.82f); + float width = std::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); + setSize(width, Renderer::getScreenHeight() * 0.82f); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); } diff --git a/es-core/src/components/MenuComponent.cpp b/es-core/src/components/MenuComponent.cpp index 376ebca780..4b33cc08dd 100644 --- a/es-core/src/components/MenuComponent.cpp +++ b/es-core/src/components/MenuComponent.cpp @@ -8,9 +8,9 @@ using namespace Eigen; -MenuComponent::MenuComponent(Window* window, const char* title, const std::shared_ptr& titleFont) : GuiComponent(window), +MenuComponent::MenuComponent(Window* window, const char* title, const std::shared_ptr& titleFont) : GuiComponent(window), mBackground(window), mGrid(window, Vector2i(1, 3)) -{ +{ addChild(&mBackground); addChild(&mGrid); @@ -63,7 +63,8 @@ void MenuComponent::updateSize() } } - setSize(Renderer::getScreenWidth() * 0.5f, height); + float width = std::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); + setSize(width, height); } void MenuComponent::onSizeChanged() @@ -73,7 +74,7 @@ void MenuComponent::onSizeChanged() // update grid row/col sizes mGrid.setRowHeightPerc(0, TITLE_HEIGHT / mSize.y()); mGrid.setRowHeightPerc(2, getButtonGridHeight() / mSize.y()); - + mGrid.setSize(mSize); } @@ -117,7 +118,7 @@ std::shared_ptr makeButtonGrid(Window* window, const std::vector< { buttonGrid->setColWidthPerc(i, (buttons.at(i)->getSize().x() + BUTTON_GRID_HORIZ_PADDING) / buttonGridWidth); } - + buttonGrid->setSize(buttonGridWidth, buttons.at(0)->getSize().y() + BUTTON_GRID_VERT_PADDING + 2); buttonGrid->setRowHeightPerc(1, 2 / buttonGrid->getSize().y()); // spacer row to deal with dropshadow to make buttons look centered From 96d7ac003d85fd13446e235610aa59764c2a58f0 Mon Sep 17 00:00:00 2001 From: Markus Pointner Date: Wed, 23 Aug 2017 01:21:33 +0200 Subject: [PATCH 156/603] fix delete-after-use issue with temporary string --- es-app/src/CollectionSystemManager.h | 2 +- es-app/src/views/gamelist/BasicGameListView.cpp | 3 ++- es-core/src/GuiComponent.h | 3 ++- es-core/src/Window.cpp | 8 ++++---- es-core/src/components/ComponentGrid.cpp | 6 +++--- es-core/src/components/ComponentList.cpp | 2 +- es-core/src/components/HelpComponent.cpp | 2 +- 7 files changed, 14 insertions(+), 12 deletions(-) diff --git a/es-app/src/CollectionSystemManager.h b/es-app/src/CollectionSystemManager.h index 87993d4bfb..90ea67a581 100644 --- a/es-app/src/CollectionSystemManager.h +++ b/es-app/src/CollectionSystemManager.h @@ -70,7 +70,7 @@ class CollectionSystemManager void setEditMode(std::string collectionName); void exitEditMode(); inline bool isEditing() { return mIsEditingCustom; }; - inline std::string getEditingCollection() { std::string res = mEditingCollection; return res; }; + inline std::string getEditingCollection() { return mEditingCollection; }; bool toggleGameInCollection(FileData* file); SystemData* getSystemToView(SystemData* sys); diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index bfda3b77d2..b025a4fc61 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -144,7 +144,8 @@ std::vector BasicGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("x", "random")); if(mRoot->getSystem()->isGameSystem()) { - prompts.push_back(HelpPrompt("y", "toggle")); + std::string prompt = CollectionSystemManager::get()->getEditingCollection(); + prompts.push_back(HelpPrompt("y", prompt)); } return prompts; } diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 5f07f0ef4c..9fa587aeb1 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -2,6 +2,7 @@ #include "InputConfig.h" #include +#include #include #include "HelpStyle.h" @@ -11,7 +12,7 @@ class AnimationController; class ThemeData; class Font; -typedef std::pair HelpPrompt; +typedef std::pair HelpPrompt; class GuiComponent { diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index f7bd40cbd6..4f6b8037da 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -331,7 +331,7 @@ void Window::setHelpPrompts(const std::vector& prompts, const HelpSt for(auto it = prompts.begin(); it != prompts.end(); it++) { // only add it if the same icon hasn't already been added - if(inputSeenMap.insert(std::make_pair(it->first, true)).second) + if(inputSeenMap.emplace(it->first, true).second) { // this symbol hasn't been seen yet, what about the action name? auto mappedTo = mappedToSeenMap.find(it->second); @@ -340,8 +340,8 @@ void Window::setHelpPrompts(const std::vector& prompts, const HelpSt // yes, it has! // can we combine? (dpad only) - if((strcmp(it->first, "up/down") == 0 && strcmp(addPrompts.at(mappedTo->second).first, "left/right")) || - (strcmp(it->first, "left/right") == 0 && strcmp(addPrompts.at(mappedTo->second).first, "up/down"))) + if((it->first == "up/down" && addPrompts.at(mappedTo->second).first != "left/right") || + (it->first == "left/right" && addPrompts.at(mappedTo->second).first != "up/down")) { // yes! addPrompts.at(mappedTo->second).first = "up/down/left/right"; @@ -352,7 +352,7 @@ void Window::setHelpPrompts(const std::vector& prompts, const HelpSt } }else{ // no, it hasn't! - mappedToSeenMap.insert(std::pair(it->second, addPrompts.size())); + mappedToSeenMap.emplace(it->second, addPrompts.size()); addPrompts.push_back(*it); } } diff --git a/es-core/src/components/ComponentGrid.cpp b/es-core/src/components/ComponentGrid.cpp index e35d9a572f..89dd157cc0 100644 --- a/es-core/src/components/ComponentGrid.cpp +++ b/es-core/src/components/ComponentGrid.cpp @@ -430,15 +430,15 @@ std::vector ComponentGrid::getHelpPrompts() bool canScrollHoriz = mGridSize.x() > 1; for(auto it = prompts.begin(); it != prompts.end(); it++) { - if(strcmp(it->first, "up/down/left/right") == 0) + if(it->first == "up/down/left/right") { canScrollHoriz = false; canScrollVert = false; break; - }else if(strcmp(it->first, "up/down") == 0) + }else if(it->first == "up/down") { canScrollVert = false; - }else if(strcmp(it->first, "left/right") == 0) + }else if(it->first == "left/right") { canScrollHoriz = false; } diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 4c6ae96c7d..9abd1ef8c3 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -319,7 +319,7 @@ std::vector ComponentList::getHelpPrompts() bool addMovePrompt = true; for(auto it = prompts.begin(); it != prompts.end(); it++) { - if(strcmp(it->first, "up/down") == 0 || strcmp(it->first, "up/down/left/right") == 0) + if(it->first == "up/down" || it->first == "up/down/left/right") { addMovePrompt = false; break; diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index fdaecd360e..504f32619f 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -72,7 +72,7 @@ void HelpComponent::updateGrid() for(auto it = mPrompts.begin(); it != mPrompts.end(); it++) { auto icon = std::make_shared(mWindow); - icon->setImage(getIconTexture(it->first)); + icon->setImage(getIconTexture(it->first.c_str())); icon->setColorShift(mStyle.iconColor); icon->setResize(0, height); icons.push_back(icon); From a7e32119966bc81493a773f7c3e59db76df83ade Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 31 Aug 2017 19:06:49 +0100 Subject: [PATCH 157/603] bump version to v2.6.2 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 80fa8a317e..c2aec73707 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 6 -#define PROGRAM_VERSION_MAINTENANCE 1 -#define PROGRAM_VERSION_STRING "2.6.1rp" +#define PROGRAM_VERSION_MAINTENANCE 2 +#define PROGRAM_VERSION_STRING "2.6.2rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,6,1\0" +#define RESOURCE_VERSION_STRING "2,6,2\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From da81347dfc571d8999105599f32bdfb14b013bf3 Mon Sep 17 00:00:00 2001 From: hex007 Date: Sun, 3 Sep 2017 19:35:50 -0700 Subject: [PATCH 158/603] Disable PS when swap timeout < PS mode --- es-core/src/PowerSaver.cpp | 21 ++++++++++++++++++--- es-core/src/PowerSaver.h | 4 +++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/es-core/src/PowerSaver.cpp b/es-core/src/PowerSaver.cpp index cfdb86d069..5804d7cf30 100644 --- a/es-core/src/PowerSaver.cpp +++ b/es-core/src/PowerSaver.cpp @@ -5,7 +5,7 @@ bool PowerSaver::mState = false; bool PowerSaver::mRunningScreenSaver = false; -int PowerSaver::mPlayNextTimeout = -1; +int PowerSaver::mWakeupTimeout = -1; int PowerSaver::mScreenSaverTimeout = -1; PowerSaver::mode PowerSaver::mMode = PowerSaver::DISABLED; @@ -18,14 +18,24 @@ void PowerSaver::init() int PowerSaver::getTimeout() { // Used only for SDL_WaitEventTimeout. Use `getMode()` for modes. - return mRunningScreenSaver ? mPlayNextTimeout : mScreenSaverTimeout; + return mRunningScreenSaver ? mWakeupTimeout : mScreenSaverTimeout; +} + +void PowerSaver::loadWakeupTime() +{ + // TODO : Move this to Screensaver Class + std::string behaviour = Settings::getInstance()->getString("ScreenSaverBehavior"); + if (behaviour == "random video") + mWakeupTimeout = Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") - getMode(); + else // Dim and Blank + mWakeupTimeout = -1; } void PowerSaver::updateTimeouts() { mScreenSaverTimeout = (unsigned int) Settings::getInstance()->getInt("ScreenSaverTime"); mScreenSaverTimeout = mScreenSaverTimeout > 0 ? mScreenSaverTimeout - getMode() : -1; - mPlayNextTimeout = Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") - getMode(); + loadWakeupTime(); } PowerSaver::mode PowerSaver::getMode() @@ -63,6 +73,11 @@ void PowerSaver::setState(bool state) void PowerSaver::runningScreenSaver(bool state) { mRunningScreenSaver = state; + if (mWakeupTimeout < mMode) + { + // Disable PS if wake up time is less than mode as PS will never trigger + setState(!state); + } } bool PowerSaver::isScreenSaverActive() diff --git a/es-core/src/PowerSaver.h b/es-core/src/PowerSaver.h index fb34865c79..476ee4e6b8 100644 --- a/es-core/src/PowerSaver.h +++ b/es-core/src/PowerSaver.h @@ -37,6 +37,8 @@ class PowerSaver static bool mRunningScreenSaver; static mode mMode; - static int mPlayNextTimeout; + static int mWakeupTimeout; static int mScreenSaverTimeout; + + static void loadWakeupTime(); }; From ddf94786f49bca0c4b4fcb3c8d97943ac0481bf5 Mon Sep 17 00:00:00 2001 From: sal Date: Fri, 8 Sep 2017 21:45:50 -0600 Subject: [PATCH 159/603] Add image slideshow screensaver mode This change adds an image slideshow screensaver mode with optional background audio. The existing menu and video screensaver have been refactored to include this new mode. By default, the slideshow screensaver will show images from the game list, but it can be configured in the menu to use a custom directory instead. --- es-app/CMakeLists.txt | 6 + es-app/src/SystemScreenSaver.cpp | 411 ++++++++++++++---- es-app/src/SystemScreenSaver.h | 22 +- .../src/guis/GuiGeneralScreensaverOptions.cpp | 77 ++++ .../src/guis/GuiGeneralScreensaverOptions.h | 18 + es-app/src/guis/GuiMenu.cpp | 46 +- es-app/src/guis/GuiScreensaverOptions.cpp | 66 --- es-app/src/guis/GuiScreensaverOptions.h | 11 +- .../guis/GuiSlideshowScreensaverOptions.cpp | 115 +++++ .../src/guis/GuiSlideshowScreensaverOptions.h | 18 + .../src/guis/GuiVideoScreensaverOptions.cpp | 82 ++++ es-app/src/guis/GuiVideoScreensaverOptions.h | 16 + es-core/src/PowerSaver.cpp | 2 + es-core/src/Settings.cpp | 8 + 14 files changed, 690 insertions(+), 208 deletions(-) create mode 100644 es-app/src/guis/GuiGeneralScreensaverOptions.cpp create mode 100644 es-app/src/guis/GuiGeneralScreensaverOptions.h create mode 100644 es-app/src/guis/GuiSlideshowScreensaverOptions.cpp create mode 100644 es-app/src/guis/GuiSlideshowScreensaverOptions.h create mode 100644 es-app/src/guis/GuiVideoScreensaverOptions.cpp create mode 100644 es-app/src/guis/GuiVideoScreensaverOptions.h diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 3cff331c28..60c5e56163 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -26,6 +26,9 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScreensaverOptions.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGeneralScreensaverOptions.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiVideoScreensaverOptions.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSlideshowScreensaverOptions.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.h @@ -79,6 +82,9 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGameScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGamelistOptions.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScreensaverOptions.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiGeneralScreensaverOptions.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiVideoScreensaverOptions.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSlideshowScreensaverOptions.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiSettings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiScraperMulti.cpp diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 5078e9bd5e..905ff8b57d 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -3,6 +3,7 @@ #include "components/VideoPlayerComponent.h" #endif #include "components/VideoVlcComponent.h" +#include "components/ImageComponent.h" #include "platform.h" #include "PowerSaver.h" #include "Renderer.h" @@ -10,6 +11,8 @@ #include "SystemData.h" #include "Util.h" #include "Log.h" +#include "AudioManager.h" +#include "Sound.h" #include "views/ViewController.h" #include "views/gamelist/IGameListView.h" #include @@ -18,15 +21,19 @@ SystemScreenSaver::SystemScreenSaver(Window* window) : mVideoScreensaver(NULL), + mImageScreensaver(NULL), mWindow(window), - mCounted(false), + mVideosCounted(false), mVideoCount(0), + mImagesCounted(false), + mImageCount(0), mState(STATE_INACTIVE), mOpacity(0.0f), mTimer(0), mSystemName(""), mGameName(""), - mCurrentGame(NULL) + mCurrentGame(NULL), + mStopBackgroundAudio(true) { mWindow->setScreenSaver(this); std::string path = getTitleFolder(); @@ -42,12 +49,13 @@ SystemScreenSaver::~SystemScreenSaver() remove(getTitlePath().c_str()); mCurrentGame = NULL; delete mVideoScreensaver; + delete mImageScreensaver; } bool SystemScreenSaver::allowSleep() { //return false; - return (mVideoScreensaver == NULL); + return ((mVideoScreensaver == NULL) && (mImageScreensaver == NULL)); } bool SystemScreenSaver::isScreenSaverActive() @@ -57,7 +65,8 @@ bool SystemScreenSaver::isScreenSaverActive() void SystemScreenSaver::startScreenSaver() { - if (!mVideoScreensaver && (Settings::getInstance()->getString("ScreenSaverBehavior") == "random video")) + std::string screensaver_behavior = Settings::getInstance()->getString("ScreenSaverBehavior"); + if (!mVideoScreensaver && (screensaver_behavior == "random video")) { // Configure to fade out the windows, Skip Fading if Instant mode mState = PowerSaver::getMode() == PowerSaver::INSTANT @@ -79,9 +88,8 @@ void SystemScreenSaver::startScreenSaver() if (!path.empty() && boost::filesystem::exists(path)) { - // Create the correct type of video component - #ifdef _RPI_ + // Create the correct type of video component if (Settings::getInstance()->getBool("ScreenSaverOmxPlayer")) mVideoScreensaver = new VideoPlayerComponent(mWindow, getTitlePath()); else @@ -109,6 +117,64 @@ void SystemScreenSaver::startScreenSaver() return; } } + else if (screensaver_behavior == "slideshow") + { + // Configure to fade out the windows, Skip Fading if Instant mode + mState = PowerSaver::getMode() == PowerSaver::INSTANT + ? STATE_SCREENSAVER_ACTIVE + : STATE_FADE_OUT_WINDOW; + mVideoChangeTime = Settings::getInstance()->getInt("ScreenSaverSwapImageTimeout"); + mOpacity = 0.0f; + + // Load a random image + std::string path = ""; + if (Settings::getInstance()->getBool("SlideshowScreenSaverCustomImageSource")) + { + pickRandomCustomImage(path); + // Custom images are not tied to the game list + mCurrentGame = NULL; + } + else + { + pickRandomGameListImage(path); + } + + if (!mImageScreensaver) + { + mImageScreensaver = new ImageComponent(mWindow, false, false); + } + + mTimer = 0; + + mImageScreensaver->setImage(path); + mImageScreensaver->setOrigin(0.5f, 0.5f); + mImageScreensaver->setPosition(Renderer::getScreenWidth()/2, Renderer::getScreenHeight()/2); + + if (Settings::getInstance()->getBool("SlideshowScreenSaverStretch")) + { + mImageScreensaver->setResize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + } + else + { + mImageScreensaver->setMaxSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + } + + std::string bg_audio_file = Settings::getInstance()->getString("SlideshowScreenSaverBackgroundAudioFile"); + if ((!mBackgroundAudio) && (bg_audio_file != "")) + { + if (boost::filesystem::exists(bg_audio_file)) + { + // paused PS so that the background audio keeps playing + PowerSaver::pause(); + mBackgroundAudio = Sound::get(bg_audio_file); + mBackgroundAudio->play(); + } + } + + PowerSaver::runningScreenSaver(true); + mTimer = 0; + return; + } // No videos. Just use a standard screensaver mState = STATE_SCREENSAVER_ACTIVE; mCurrentGame = NULL; @@ -116,8 +182,22 @@ void SystemScreenSaver::startScreenSaver() void SystemScreenSaver::stopScreenSaver() { + if ((mBackgroundAudio) && (mStopBackgroundAudio)) + { + mBackgroundAudio->stop(); + mBackgroundAudio.reset(); + // if we were playing audio, we paused PS + PowerSaver::resume(); + } + + // so that we stop the background audio next time, unless we're restarting the screensaver + mStopBackgroundAudio = true; + delete mVideoScreensaver; mVideoScreensaver = NULL; + delete mImageScreensaver; + mImageScreensaver = NULL; + // we need this to loop through different videos mState = STATE_INACTIVE; PowerSaver::runningScreenSaver(false); @@ -125,7 +205,8 @@ void SystemScreenSaver::stopScreenSaver() void SystemScreenSaver::renderScreenSaver() { - if (mVideoScreensaver && Settings::getInstance()->getString("ScreenSaverBehavior") == "random video") + std::string screensaver_behavior = Settings::getInstance()->getString("ScreenSaverBehavior"); + if (mVideoScreensaver && screensaver_behavior == "random video") { // Render black background Renderer::setMatrix(Eigen::Affine3f::Identity()); @@ -138,59 +219,49 @@ void SystemScreenSaver::renderScreenSaver() mVideoScreensaver->render(transform); } } - else if (mState != STATE_INACTIVE) + else if (mImageScreensaver && screensaver_behavior == "slideshow") { + // Render black background Renderer::setMatrix(Eigen::Affine3f::Identity()); - unsigned char opacity = Settings::getInstance()->getString("ScreenSaverBehavior") == "dim" ? 0xA0 : 0xFF; - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity); - } -} + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), (unsigned char)(255)); -void SystemScreenSaver::countVideos() -{ - if (!mCounted) - { - mVideoCount = 0; - mCounted = true; - std::vector:: iterator it; - for (it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); ++it) + // Only render the video if the state requires it + if ((int)mState >= STATE_FADE_IN_VIDEO) { - if (!(*it)->isCollection()) + if (mImageScreensaver->hasImage()) { - pugi::xml_document doc; - pugi::xml_node root; - std::string xmlReadPath = (*it)->getGamelistPath(false); + mImageScreensaver->setOpacity(255-mOpacity); - if(boost::filesystem::exists(xmlReadPath)) - { - pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); - if (!result) - continue; - root = doc.child("gameList"); - if (!root) - continue; - for(pugi::xml_node fileNode = root.child("game"); fileNode; fileNode = fileNode.next_sibling("game")) - { - pugi::xml_node videoNode = fileNode.child("video"); - if (videoNode) - ++mVideoCount; - } - } + Eigen::Affine3f transform = Eigen::Affine3f::Identity(); + mImageScreensaver->render(transform); + } + } + + // Check if we need to restart the background audio + if ((mBackgroundAudio) && (Settings::getInstance()->getString("SlideshowScreenSaverBackgroundAudioFile") != "")) + { + if (!mBackgroundAudio->isPlaying()) + { + mBackgroundAudio->play(); } } } + else if (mState != STATE_INACTIVE) + { + Renderer::setMatrix(Eigen::Affine3f::Identity()); + unsigned char opacity = screensaver_behavior == "dim" ? 0xA0 : 0xFF; + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity); + } } -void SystemScreenSaver::pickRandomVideo(std::string& path) +unsigned long SystemScreenSaver::countGameListNodes(const char *nodeName) { - countVideos(); - mCurrentGame = NULL; - if (mVideoCount > 0) + unsigned long nodeCount = 0; + std::vector:: iterator it; + for (it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); ++it) { - int video = (int)(((float)rand() / float(RAND_MAX)) * (float)mVideoCount); - - std::vector:: iterator it; - for (it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); ++it) + // We only want images and videos from game systems that are not collections + if (!(*it)->isCollection() && (*it)->isGameSystem()) { pugi::xml_document doc; pugi::xml_node root; @@ -206,58 +277,109 @@ void SystemScreenSaver::pickRandomVideo(std::string& path) continue; for(pugi::xml_node fileNode = root.child("game"); fileNode; fileNode = fileNode.next_sibling("game")) { - pugi::xml_node videoNode = fileNode.child("video"); - if (videoNode) + pugi::xml_node node = fileNode.child(nodeName); + if (node) + ++nodeCount; + } + } + } + } + return nodeCount; +} + +void SystemScreenSaver::countVideos() +{ + if (!mVideosCounted) + { + mVideoCount = countGameListNodes("video"); + mVideosCounted = true; + } +} + +void SystemScreenSaver::countImages() +{ + if (!mImagesCounted) + { + mImageCount = countGameListNodes("image"); + mImagesCounted = true; + } +} + +void SystemScreenSaver::pickGameListNode(unsigned long index, const char *nodeName, std::string& path) +{ + std::vector:: iterator it; + for (it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); ++it) + { + pugi::xml_document doc; + pugi::xml_node root; + + // We only want nodes from game systems that are not collections + if (!(*it)->isGameSystem() || (*it)->isCollection()) + continue; + + std::string xmlReadPath = (*it)->getGamelistPath(false); + + if(boost::filesystem::exists(xmlReadPath)) + { + pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); + if (!result) + continue; + root = doc.child("gameList"); + if (!root) + continue; + for(pugi::xml_node fileNode = root.child("game"); fileNode; fileNode = fileNode.next_sibling("game")) + { + pugi::xml_node node = fileNode.child(nodeName); + if (node) + { + // See if this is the desired index + if (index-- == 0) { - // See if this is the randomly selected video - if (video-- == 0) - { - // Yes. Resolve to a full path - path = resolvePath(videoNode.text().get(), (*it)->getStartPath(), true).generic_string(); - mSystemName = (*it)->getFullName(); - mGameName = fileNode.child("name").text().get(); + // Yes. Resolve to a full path + path = resolvePath(node.text().get(), (*it)->getStartPath(), true).generic_string(); + mSystemName = (*it)->getFullName(); + mGameName = fileNode.child("name").text().get(); - // getting corresponding FileData + // getting corresponding FileData - // try the easy way. Should work for the majority of cases, unless in subfolders - FileData* rootFileData = (*it)->getRootFolder(); - std::string gamePath = resolvePath(fileNode.child("path").text().get(), (*it)->getStartPath(), false).string(); + // try the easy way. Should work for the majority of cases, unless in subfolders + FileData* rootFileData = (*it)->getRootFolder(); + std::string gamePath = resolvePath(fileNode.child("path").text().get(), (*it)->getStartPath(), false).string(); - std::string shortPath = gamePath; - shortPath = shortPath.replace(0, (*it)->getStartPath().length()+1, ""); + std::string shortPath = gamePath; + shortPath = shortPath.replace(0, (*it)->getStartPath().length()+1, ""); - const std::unordered_map& children = rootFileData->getChildrenByFilename(); - std::unordered_map::const_iterator screenSaverGame = children.find(shortPath); + const std::unordered_map& children = rootFileData->getChildrenByFilename(); + std::unordered_map::const_iterator screenSaverGame = children.find(shortPath); - if (screenSaverGame != children.end()) - { - // Found the corresponding FileData - mCurrentGame = screenSaverGame->second; - } - else - { - // Couldn't find FileData. Going for the full iteration. - // iterate on children - FileType type = GAME; - std::vector allFiles = rootFileData->getFilesRecursive(type); - std::vector::iterator itf; // declare an iterator to a vector of strings - - int i = 0; - for(itf=allFiles.begin() ; itf < allFiles.end(); itf++,i++ ) { - if ((*itf)->getPath() == gamePath) - { - mCurrentGame = (*itf); - break; - } + if (screenSaverGame != children.end()) + { + // Found the corresponding FileData + mCurrentGame = screenSaverGame->second; + } + else + { + // Couldn't find FileData. Going for the full iteration. + // iterate on children + FileType type = GAME; + std::vector allFiles = rootFileData->getFilesRecursive(type); + std::vector::iterator itf; // declare an iterator to a vector of strings + + int i = 0; + for(itf=allFiles.begin() ; itf < allFiles.end(); itf++,i++ ) { + if ((*itf)->getPath() == gamePath) + { + mCurrentGame = (*itf); + break; } } - - // end of getting FileData - if (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never") - writeSubtitle(mGameName.c_str(), mSystemName.c_str(), - (Settings::getInstance()->getString("ScreenSaverGameInfo") == "always")); - return; } + + // end of getting FileData + if (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never") + writeSubtitle(mGameName.c_str(), mSystemName.c_str(), + (Settings::getInstance()->getString("ScreenSaverGameInfo") == "always")); + return; } } } @@ -265,6 +387,97 @@ void SystemScreenSaver::pickRandomVideo(std::string& path) } } +void SystemScreenSaver::pickRandomVideo(std::string& path) +{ + countVideos(); + mCurrentGame = NULL; + if (mVideoCount > 0) + { + int video = (int)(((float)rand() / float(RAND_MAX)) * (float)mVideoCount); + + pickGameListNode(video, "video", path); + } +} + +void SystemScreenSaver::pickRandomGameListImage(std::string& path) +{ + countImages(); + mCurrentGame = NULL; + if (mImageCount > 0) + { + int image = (int)(((float)rand() / float(RAND_MAX)) * (float)mImageCount); + + pickGameListNode(image, "image", path); + } +} + +void SystemScreenSaver::pickRandomCustomImage(std::string& path) +{ + std::string imageDir = Settings::getInstance()->getString("SlideshowScreenSaverImageDir"); + if ((imageDir != "") && (boost::filesystem::exists(imageDir))) + { + std::string imageFilter = Settings::getInstance()->getString("SlideshowScreenSaverImageFilter"); + + std::vector matchingFiles; + + if (Settings::getInstance()->getBool("SlideshowScreenSaverRecurse")) + { + boost::filesystem::recursive_directory_iterator end_iter; + boost::filesystem::recursive_directory_iterator iter(imageDir); + + // TODO: Figure out how to remove this duplication in the else block + for (iter; iter != end_iter; ++iter) + { + if (boost::filesystem::is_regular_file(iter->status())) + { + // If the image filter is empty, or the file extension is in the filter string, + // add it to the matching files list + if ((imageFilter.length() <= 0) || + (imageFilter.find(iter->path().extension().string()) != std::string::npos)) + { + matchingFiles.push_back(iter->path().string()); + } + } + } + } + else + { + boost::filesystem::directory_iterator end_iter; + boost::filesystem::directory_iterator iter(imageDir); + + for (iter; iter != end_iter; ++iter) + { + if (boost::filesystem::is_regular_file(iter->status())) + { + // If the image filter is empty, or the file extension is in the filter string, + // add it to the matching files list + if ((imageFilter.length() <= 0) || + (imageFilter.find(iter->path().extension().string()) != std::string::npos)) + { + matchingFiles.push_back(iter->path().string()); + } + } + } + } + + int fileCount = matchingFiles.size(); + if (fileCount > 0) + { + // get a random index in the range 0 to fileCount (exclusive) + int randomIndex = rand() % fileCount; + path = matchingFiles[randomIndex]; + } + else + { + LOG(LogError) << "Slideshow Screensaver - No image files found\n"; + } + } + else + { + LOG(LogError) << "Slideshow Screensaver - Image directory does not exist: " << imageDir << "\n"; + } +} + void SystemScreenSaver::update(int deltaTime) { // Use this to update the fade value for the current fade stage @@ -302,9 +515,12 @@ void SystemScreenSaver::update(int deltaTime) // If we have a loaded video then update it if (mVideoScreensaver) mVideoScreensaver->update(deltaTime); + if (mImageScreensaver) + mImageScreensaver->update(deltaTime); } void SystemScreenSaver::nextVideo() { + mStopBackgroundAudio = false; stopScreenSaver(); startScreenSaver(); mState = STATE_SCREENSAVER_ACTIVE; @@ -317,12 +533,15 @@ FileData* SystemScreenSaver::getCurrentGame() void SystemScreenSaver::launchGame() { - // launching Game - ViewController::get()->goToGameList(mCurrentGame->getSystem()); - IGameListView* view = ViewController::get()->getGameListView(mCurrentGame->getSystem()).get(); - view->setCursor(mCurrentGame); - if (Settings::getInstance()->getBool("ScreenSaverControls")) + if (mCurrentGame != NULL) { - view->launch(mCurrentGame); + // launching Game + ViewController::get()->goToGameList(mCurrentGame->getSystem()); + IGameListView* view = ViewController::get()->getGameListView(mCurrentGame->getSystem()).get(); + view->setCursor(mCurrentGame); + if (Settings::getInstance()->getBool("ScreenSaverControls")) + { + view->launch(mCurrentGame); + } } } diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index c1c2dc2b37..4ca3ae23bc 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -3,6 +3,8 @@ #include "Window.h" class VideoComponent; +class ImageComponent; +class Sound; // Screensaver implementation for main window class SystemScreenSaver : public Window::ScreenSaver @@ -23,8 +25,13 @@ class SystemScreenSaver : public Window::ScreenSaver virtual void launchGame(); private: - void countVideos(); - void pickRandomVideo(std::string& path); + unsigned long countGameListNodes(const char *nodeName); + void countVideos(); + void countImages(); + void pickGameListNode(unsigned long index, const char *nodeName, std::string& path); + void pickRandomVideo(std::string& path); + void pickRandomGameListImage(std::string& path); + void pickRandomCustomImage(std::string& path); void input(InputConfig* config, Input input); @@ -36,9 +43,12 @@ class SystemScreenSaver : public Window::ScreenSaver }; private: - bool mCounted; - unsigned long mVideoCount; - VideoComponent* mVideoScreensaver; + bool mVideosCounted; + unsigned long mVideoCount; + VideoComponent* mVideoScreensaver; + bool mImagesCounted; + unsigned long mImageCount; + ImageComponent* mImageScreensaver; Window* mWindow; STATE mState; float mOpacity; @@ -47,4 +57,6 @@ class SystemScreenSaver : public Window::ScreenSaver std::string mGameName; std::string mSystemName; int mVideoChangeTime; + std::shared_ptr mBackgroundAudio; + bool mStopBackgroundAudio; }; diff --git a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp new file mode 100644 index 0000000000..758e783625 --- /dev/null +++ b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp @@ -0,0 +1,77 @@ +#include "guis/GuiGeneralScreensaverOptions.h" +#include "Window.h" +#include "Settings.h" +#include "PowerSaver.h" +#include "views/ViewController.h" + +#include "components/ButtonComponent.h" +#include "components/SwitchComponent.h" +#include "components/SliderComponent.h" +#include "components/TextComponent.h" +//#include "components/TextEditComponent.h" +#include "components/OptionListComponent.h" +#include "components/MenuComponent.h" +#include "guis/GuiMsgBox.h" +#include "guis/GuiVideoScreensaverOptions.h" +#include "guis/GuiSlideshowScreensaverOptions.h" + +GuiGeneralScreensaverOptions::GuiGeneralScreensaverOptions(Window* window, const char* title) : GuiScreensaverOptions(window, title) +{ + // screensaver time + auto screensaver_time = std::make_shared(mWindow, 0.f, 30.f, 1.f, "m"); + screensaver_time->setValue((float)(Settings::getInstance()->getInt("ScreenSaverTime") / (1000 * 60))); + addWithLabel("SCREENSAVER AFTER", screensaver_time); + addSaveFunc([screensaver_time] { + Settings::getInstance()->setInt("ScreenSaverTime", (int)round(screensaver_time->getValue()) * (1000 * 60)); + PowerSaver::updateTimeouts(); + }); + + // screensaver behavior + auto screensaver_behavior = std::make_shared< OptionListComponent >(mWindow, "SCREENSAVER BEHAVIOR", false); + std::vector screensavers; + screensavers.push_back("dim"); + screensavers.push_back("black"); + screensavers.push_back("random video"); + screensavers.push_back("slideshow"); + for(auto it = screensavers.begin(); it != screensavers.end(); it++) + screensaver_behavior->add(*it, *it, Settings::getInstance()->getString("ScreenSaverBehavior") == *it); + addWithLabel("SCREENSAVER BEHAVIOR", screensaver_behavior); + addSaveFunc([this, screensaver_behavior] { + if (Settings::getInstance()->getString("ScreenSaverBehavior") != "random video" && screensaver_behavior->getSelected() == "random video") { + // if before it wasn't risky but now there's a risk of problems, show warning + mWindow->pushGui(new GuiMsgBox(mWindow, + "The \"Random Video\" screensaver shows videos from your gamelist.\n\nIf you do not have videos, or if in several consecutive attempts the games it selects don't have videos it will default to black.\n\nMore options in the \"UI Settings\" > \"Video Screensaver\" menu.", + "OK", [] { return; })); + } + Settings::getInstance()->setString("ScreenSaverBehavior", screensaver_behavior->getSelected()); + PowerSaver::updateTimeouts(); + }); + + ComponentListRow row; + + // show filtered menu + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "VIDEO SCREENSAVER SETTINGS", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(makeArrow(mWindow), false); + row.makeAcceptInputHandler(std::bind(&GuiGeneralScreensaverOptions::openVideoScreensaverOptions, this)); + addRow(row); + + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "SLIDESHOW SCREENSAVER SETTINGS", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(makeArrow(mWindow), false); + row.makeAcceptInputHandler(std::bind(&GuiGeneralScreensaverOptions::openSlideshowScreensaverOptions, this)); + addRow(row); +} + +GuiGeneralScreensaverOptions::~GuiGeneralScreensaverOptions() +{ +} + +void GuiGeneralScreensaverOptions::openVideoScreensaverOptions() { + mWindow->pushGui(new GuiVideoScreensaverOptions(mWindow, "VIDEO SCREENSAVER")); +} + +void GuiGeneralScreensaverOptions::openSlideshowScreensaverOptions() { + mWindow->pushGui(new GuiSlideshowScreensaverOptions(mWindow, "SLIDESHOW SCREENSAVER")); +} + diff --git a/es-app/src/guis/GuiGeneralScreensaverOptions.h b/es-app/src/guis/GuiGeneralScreensaverOptions.h new file mode 100644 index 0000000000..a48eb890a2 --- /dev/null +++ b/es-app/src/guis/GuiGeneralScreensaverOptions.h @@ -0,0 +1,18 @@ +#ifndef _GUI_GENERAL_SCREENSAVER_OPTIONS_H_ +#define _GUI_GENERAL_SCREENSAVER_OPTIONS_H_ + +#include "components/MenuComponent.h" +#include "GuiScreensaverOptions.h" + +class GuiGeneralScreensaverOptions : public GuiScreensaverOptions +{ +public: + GuiGeneralScreensaverOptions(Window* window, const char* title); + virtual ~GuiGeneralScreensaverOptions(); + +private: + void openVideoScreensaverOptions(); + void openSlideshowScreensaverOptions(); +}; + +#endif // _GUI_GENERAL_SCREENSAVER_OPTIONS_H_ diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 07298c06fe..a9e19e2680 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -7,7 +7,7 @@ #include "PowerSaver.h" #include "guis/GuiMsgBox.h" #include "guis/GuiSettings.h" -#include "guis/GuiScreensaverOptions.h" +#include "guis/GuiGeneralScreensaverOptions.h" #include "guis/GuiCollectionSystemsOptions.h" #include "guis/GuiScraperStart.h" #include "guis/GuiDetectDevice.h" @@ -132,42 +132,12 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN [this] { auto s = new GuiSettings(mWindow, "UI SETTINGS"); - // screensaver time - auto screensaver_time = std::make_shared(mWindow, 0.f, 30.f, 1.f, "m"); - screensaver_time->setValue((float)(Settings::getInstance()->getInt("ScreenSaverTime") / (1000 * 60))); - s->addWithLabel("SCREENSAVER AFTER", screensaver_time); - s->addSaveFunc([screensaver_time] { - Settings::getInstance()->setInt("ScreenSaverTime", (int)round(screensaver_time->getValue()) * (1000 * 60)); - PowerSaver::updateTimeouts(); - }); - - // screensaver behavior - auto screensaver_behavior = std::make_shared< OptionListComponent >(mWindow, "SCREENSAVER BEHAVIOR", false); - std::vector screensavers; - screensavers.push_back("dim"); - screensavers.push_back("black"); - screensavers.push_back("random video"); - for(auto it = screensavers.begin(); it != screensavers.end(); it++) - screensaver_behavior->add(*it, *it, Settings::getInstance()->getString("ScreenSaverBehavior") == *it); - s->addWithLabel("SCREENSAVER BEHAVIOR", screensaver_behavior); - s->addSaveFunc([this, screensaver_behavior] { - if (Settings::getInstance()->getString("ScreenSaverBehavior") != "random video" && screensaver_behavior->getSelected() == "random video") { - // if before it wasn't risky but now there's a risk of problems, show warning - mWindow->pushGui(new GuiMsgBox(mWindow, - "The \"Random Video\" screensaver shows videos from your gamelist.\n\nIf you do not have videos, or if in several consecutive attempts the games it selects don't have videos it will default to black.\n\nMore options in the \"UI Settings\" > \"Video Screensaver\" menu.", - "OK", [] { return; })); - } - Settings::getInstance()->setString("ScreenSaverBehavior", screensaver_behavior->getSelected()); - }); - - ComponentListRow row; - - // show filtered menu - row.elements.clear(); - row.addElement(std::make_shared(mWindow, "VIDEO SCREENSAVER SETTINGS", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.addElement(makeArrow(mWindow), false); - row.makeAcceptInputHandler(std::bind(&GuiMenu::openScreensaverOptions, this)); - s->addRow(row); + ComponentListRow screensaver_row; + screensaver_row.elements.clear(); + screensaver_row.addElement(std::make_shared(mWindow, "SCREENSAVER SETTINGS", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + screensaver_row.addElement(makeArrow(mWindow), false); + screensaver_row.makeAcceptInputHandler(std::bind(&GuiMenu::openScreensaverOptions, this)); + s->addRow(screensaver_row); // quick system select (left/right in game list view) auto quick_sys_select = std::make_shared(mWindow); @@ -431,7 +401,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN } void GuiMenu::openScreensaverOptions() { - mWindow->pushGui(new GuiScreensaverOptions(mWindow, "VIDEO SCREENSAVER")); + mWindow->pushGui(new GuiGeneralScreensaverOptions(mWindow, "SCREENSAVER SETTINGS")); } void GuiMenu::openCollectionSystemSettings() { diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index c057c959da..bfb15421ba 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -4,63 +4,11 @@ #include "views/ViewController.h" #include "components/ButtonComponent.h" -#include "components/SwitchComponent.h" -#include "components/SliderComponent.h" -#include "components/TextComponent.h" -#include "components/OptionListComponent.h" -#include "components/MenuComponent.h" -#include "guis/GuiMsgBox.h" -#include "PowerSaver.h" GuiScreensaverOptions::GuiScreensaverOptions(Window* window, const char* title) : GuiComponent(window), mMenu(window, title) { addChild(&mMenu); - // timeout to swap videos - auto swap = std::make_shared(mWindow, 10.f, 1000.f, 1.f, "s"); - swap->setValue((float)(Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") / (1000))); - addWithLabel("SWAP VIDEO AFTER (SECS)", swap); - addSaveFunc([swap] { - Settings::getInstance()->setInt("ScreenSaverSwapVideoTimeout", (int)round(swap->getValue()) * (1000)); - PowerSaver::updateTimeouts(); - }); - -#ifdef _RPI_ - auto ss_omx = std::make_shared(mWindow); - ss_omx->setState(Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); - addWithLabel("USE OMX PLAYER FOR SCREENSAVER", ss_omx); - addSaveFunc([ss_omx, this] { Settings::getInstance()->setBool("ScreenSaverOmxPlayer", ss_omx->getState()); }); -#endif - - // Allow ScreenSaver Controls - ScreenSaverControls - auto ss_controls = std::make_shared(mWindow); - ss_controls->setState(Settings::getInstance()->getBool("ScreenSaverControls")); - addWithLabel("SCREENSAVER CONTROLS", ss_controls); - addSaveFunc([ss_controls] { Settings::getInstance()->setBool("ScreenSaverControls", ss_controls->getState()); }); - - // Render Video Game Name as subtitles - auto ss_info = std::make_shared< OptionListComponent >(mWindow, "SHOW GAME INFO", false); - std::vector info_type; - info_type.push_back("always"); - info_type.push_back("start & end"); - info_type.push_back("never"); - for(auto it = info_type.begin(); it != info_type.end(); it++) - ss_info->add(*it, *it, Settings::getInstance()->getString("ScreenSaverGameInfo") == *it); - addWithLabel("SHOW GAME INFO ON SCREENSAVER", ss_info); - addSaveFunc([ss_info, this] { Settings::getInstance()->setString("ScreenSaverGameInfo", ss_info->getSelected()); }); - -#ifndef _RPI_ - auto captions_compatibility = std::make_shared(mWindow); - captions_compatibility->setState(Settings::getInstance()->getBool("CaptionsCompatibility")); - addWithLabel("USE COMPATIBLE LOW RESOLUTION FOR CAPTIONS", captions_compatibility); - addSaveFunc([captions_compatibility] { Settings::getInstance()->setBool("CaptionsCompatibility", captions_compatibility->getState()); }); -#endif - - auto stretch_screensaver = std::make_shared(mWindow); - stretch_screensaver->setState(Settings::getInstance()->getBool("StretchVideoOnScreenSaver")); - addWithLabel("STRETCH VIDEO ON SCREENSAVER", stretch_screensaver); - addSaveFunc([stretch_screensaver] { Settings::getInstance()->setBool("StretchVideoOnScreenSaver", stretch_screensaver->getState()); }); - mMenu.addButton("BACK", "go back", [this] { delete this; }); setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); @@ -77,24 +25,10 @@ void GuiScreensaverOptions::save() if(!mSaveFuncs.size()) return; -#ifdef _RPI_ - bool startingStatusNotRisky = (Settings::getInstance()->getString("ScreenSaverGameInfo") == "never" || !Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); -#endif - for(auto it = mSaveFuncs.begin(); it != mSaveFuncs.end(); it++) (*it)(); Settings::getInstance()->saveFile(); - -#ifdef _RPI_ - bool endStatusRisky = (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never" && Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); - if (startingStatusNotRisky && endStatusRisky) { - // if before it wasn't risky but now there's a risk of problems, show warning - mWindow->pushGui(new GuiMsgBox(mWindow, - "Using OMX Player and displaying Game Info may result in the video flickering in some TV modes. If that happens, consider:\n\n• Disabling the \"Show Game Info\" option;\n• Disabling \"Overscan\" on the Pi configuration menu might help:\nRetroPie > Raspi-Config > Advanced Options > Overscan > \"No\".\n• Disabling the use of OMX Player for the screensaver.", - "GOT IT!", [] { return; })); - } -#endif } bool GuiScreensaverOptions::input(InputConfig* config, Input input) diff --git a/es-app/src/guis/GuiScreensaverOptions.h b/es-app/src/guis/GuiScreensaverOptions.h index e90dceee54..b7fd98fabb 100644 --- a/es-app/src/guis/GuiScreensaverOptions.h +++ b/es-app/src/guis/GuiScreensaverOptions.h @@ -1,3 +1,6 @@ +#ifndef _GUI_SCREENSAVER_OPTIONS_H_ +#define _GUI_SCREENSAVER_OPTIONS_H_ + #include "GuiComponent.h" #include "components/MenuComponent.h" #include "SystemData.h" @@ -9,7 +12,7 @@ class GuiScreensaverOptions : public GuiComponent GuiScreensaverOptions(Window* window, const char* title); virtual ~GuiScreensaverOptions(); // just calls save(); - void save(); + virtual void save(); inline void addRow(const ComponentListRow& row) { mMenu.addRow(row); }; inline void addWithLabel(const std::string& label, const std::shared_ptr& comp) { mMenu.addWithLabel(label, comp); }; inline void addSaveFunc(const std::function& func) { mSaveFuncs.push_back(func); }; @@ -18,7 +21,9 @@ class GuiScreensaverOptions : public GuiComponent std::vector getHelpPrompts() override; HelpStyle getHelpStyle() override; -private: +protected: MenuComponent mMenu; std::vector< std::function > mSaveFuncs; -}; \ No newline at end of file +}; + +#endif // _GUI_SCREENSAVER_OPTIONS_H_ diff --git a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp new file mode 100644 index 0000000000..d13ce5374c --- /dev/null +++ b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp @@ -0,0 +1,115 @@ +#include "guis/GuiSlideshowScreensaverOptions.h" +#include "Window.h" +#include "Settings.h" +#include "views/ViewController.h" + +#include "components/SwitchComponent.h" +#include "components/SliderComponent.h" +#include "components/TextComponent.h" +#include "components/OptionListComponent.h" +#include "components/MenuComponent.h" +#include "guis/GuiMsgBox.h" +#include "guis/GuiTextEditPopup.h" +#include "PowerSaver.h" + +GuiSlideshowScreensaverOptions::GuiSlideshowScreensaverOptions(Window* window, const char* title) : GuiScreensaverOptions(window, title) +{ + ComponentListRow row; + + // image duration (seconds) + auto sss_image_sec = std::make_shared(mWindow, 1.f, 60.f, 1.f, "s"); + sss_image_sec->setValue((float)(Settings::getInstance()->getInt("ScreenSaverSwapImageTimeout") / (1000))); + addWithLabel(row, "SWAP IMAGE AFTER (SECS)", sss_image_sec); + addSaveFunc([sss_image_sec] { + int playNextTimeout = (int)round(sss_image_sec->getValue()) * (1000); + Settings::getInstance()->setInt("ScreenSaverSwapImageTimeout", playNextTimeout); + PowerSaver::updateTimeouts(); + }); + + // stretch + auto sss_stretch = std::make_shared(mWindow); + sss_stretch->setState(Settings::getInstance()->getBool("SlideshowScreenSaverStretch")); + addWithLabel(row, "STRETCH IMAGES", sss_stretch); + addSaveFunc([sss_stretch] { + Settings::getInstance()->setBool("SlideshowScreenSaverStretch", sss_stretch->getState()); + }); + + // background audio file + auto sss_bg_audio_file = std::make_shared(mWindow, "", Font::get(FONT_SIZE_SMALL), 0x777777FF); + addEditableTextComponent(row, "BACKGROUND AUDIO", sss_bg_audio_file, Settings::getInstance()->getString("SlideshowScreenSaverBackgroundAudioFile")); + addSaveFunc([sss_bg_audio_file] { + Settings::getInstance()->setString("SlideshowScreenSaverBackgroundAudioFile", sss_bg_audio_file->getValue()); + }); + + // image source + auto sss_custom_source = std::make_shared(mWindow); + sss_custom_source->setState(Settings::getInstance()->getBool("SlideshowScreenSaverCustomImageSource")); + addWithLabel(row, "USE CUSTOM IMAGES", sss_custom_source); + addSaveFunc([sss_custom_source] { Settings::getInstance()->setBool("SlideshowScreenSaverCustomImageSource", sss_custom_source->getState()); }); + + // custom image directory + auto sss_image_dir = std::make_shared(mWindow, "", Font::get(FONT_SIZE_SMALL), 0x777777FF); + addEditableTextComponent(row, "CUSTOM IMAGE DIR", sss_image_dir, Settings::getInstance()->getString("SlideshowScreenSaverImageDir")); + addSaveFunc([sss_image_dir] { + Settings::getInstance()->setString("SlideshowScreenSaverImageDir", sss_image_dir->getValue()); + }); + + // recurse custom image directory + auto sss_recurse = std::make_shared(mWindow); + sss_recurse->setState(Settings::getInstance()->getBool("SlideshowScreenSaverRecurse")); + addWithLabel(row, "CUSTOM IMAGE DIR RECURSIVE", sss_recurse); + addSaveFunc([sss_recurse] { + Settings::getInstance()->setBool("SlideshowScreenSaverRecurse", sss_recurse->getState()); + }); + + // custom image filter + auto sss_image_filter = std::make_shared(mWindow, "", Font::get(FONT_SIZE_SMALL), 0x777777FF); + addEditableTextComponent(row, "CUSTOM IMAGE FILTER", sss_image_filter, Settings::getInstance()->getString("SlideshowScreenSaverImageFilter")); + addSaveFunc([sss_image_filter] { + Settings::getInstance()->setString("SlideshowScreenSaverImageFilter", sss_image_filter->getValue()); + }); +} + +GuiSlideshowScreensaverOptions::~GuiSlideshowScreensaverOptions() +{ +} + +void GuiSlideshowScreensaverOptions::addWithLabel(ComponentListRow row, const std::string label, std::shared_ptr component) +{ + row.elements.clear(); + + auto lbl = std::make_shared(mWindow, strToUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF); + row.addElement(lbl, true); // label + + row.addElement(component, false, true); + + addRow(row); +} + +void GuiSlideshowScreensaverOptions::addEditableTextComponent(ComponentListRow row, const std::string label, std::shared_ptr ed, std::string value) +{ + row.elements.clear(); + + auto lbl = std::make_shared(mWindow, strToUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF); + row.addElement(lbl, true); // label + + row.addElement(ed, true); + + auto spacer = std::make_shared(mWindow); + spacer->setSize(Renderer::getScreenWidth() * 0.005f, 0); + row.addElement(spacer, false); + + auto bracket = std::make_shared(mWindow); + bracket->setImage(":/arrow.svg"); + bracket->setResize(Eigen::Vector2f(0, lbl->getFont()->getLetterHeight())); + row.addElement(bracket, false); + + auto updateVal = [ed](const std::string& newVal) { ed->setValue(newVal); }; // ok callback (apply new value to ed) + row.makeAcceptInputHandler([this, label, ed, updateVal] { + mWindow->pushGui(new GuiTextEditPopup(mWindow, label, ed->getValue(), updateVal, false)); + }); + + assert(ed); + addRow(row); + ed->setValue(value); +} diff --git a/es-app/src/guis/GuiSlideshowScreensaverOptions.h b/es-app/src/guis/GuiSlideshowScreensaverOptions.h new file mode 100644 index 0000000000..c3f5a63bce --- /dev/null +++ b/es-app/src/guis/GuiSlideshowScreensaverOptions.h @@ -0,0 +1,18 @@ +#ifndef _GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H_ +#define _GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H_ + +#include "components/MenuComponent.h" +#include "GuiScreensaverOptions.h" + +class GuiSlideshowScreensaverOptions : public GuiScreensaverOptions +{ +public: + GuiSlideshowScreensaverOptions(Window* window, const char* title); + virtual ~GuiSlideshowScreensaverOptions(); + +private: + void addWithLabel(ComponentListRow row, const std::string label, std::shared_ptr component); + void addEditableTextComponent(ComponentListRow row, const std::string label, std::shared_ptr ed, std::string value); +}; + +#endif // _GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H_ diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.cpp b/es-app/src/guis/GuiVideoScreensaverOptions.cpp new file mode 100644 index 0000000000..efa940cfca --- /dev/null +++ b/es-app/src/guis/GuiVideoScreensaverOptions.cpp @@ -0,0 +1,82 @@ +#include "guis/GuiVideoScreensaverOptions.h" +#include "Window.h" +#include "Settings.h" +#include "views/ViewController.h" + +#include "components/SwitchComponent.h" +#include "components/SliderComponent.h" +#include "components/OptionListComponent.h" +#include "components/MenuComponent.h" +#include "guis/GuiMsgBox.h" +#include "PowerSaver.h" + +GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const char* title) : GuiScreensaverOptions(window, title) +{ + // timeout to swap videos + auto swap = std::make_shared(mWindow, 10.f, 1000.f, 1.f, "s"); + swap->setValue((float)(Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") / (1000))); + addWithLabel("SWAP VIDEO AFTER (SECS)", swap); + addSaveFunc([swap] { + int playNextTimeout = (int)round(swap->getValue()) * (1000); + Settings::getInstance()->setInt("ScreenSaverSwapVideoTimeout", playNextTimeout); + PowerSaver::updateTimeouts(); + }); + +#ifdef _RPI_ + auto ss_omx = std::make_shared(mWindow); + ss_omx->setState(Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); + addWithLabel("USE OMX PLAYER FOR SCREENSAVER", ss_omx); + addSaveFunc([ss_omx, this] { Settings::getInstance()->setBool("ScreenSaverOmxPlayer", ss_omx->getState()); }); +#endif + + // Allow ScreenSaver Controls - ScreenSaverControls + auto ss_controls = std::make_shared(mWindow); + ss_controls->setState(Settings::getInstance()->getBool("ScreenSaverControls")); + addWithLabel("SCREENSAVER CONTROLS", ss_controls); + addSaveFunc([ss_controls] { Settings::getInstance()->setBool("ScreenSaverControls", ss_controls->getState()); }); + + // Render Video Game Name as subtitles + auto ss_info = std::make_shared< OptionListComponent >(mWindow, "SHOW GAME INFO", false); + std::vector info_type; + info_type.push_back("always"); + info_type.push_back("start & end"); + info_type.push_back("never"); + for(auto it = info_type.begin(); it != info_type.end(); it++) + ss_info->add(*it, *it, Settings::getInstance()->getString("ScreenSaverGameInfo") == *it); + addWithLabel("SHOW GAME INFO ON SCREENSAVER", ss_info); + addSaveFunc([ss_info, this] { Settings::getInstance()->setString("ScreenSaverGameInfo", ss_info->getSelected()); }); + +#ifndef _RPI_ + auto captions_compatibility = std::make_shared(mWindow); + captions_compatibility->setState(Settings::getInstance()->getBool("CaptionsCompatibility")); + addWithLabel("USE COMPATIBLE LOW RESOLUTION FOR CAPTIONS", captions_compatibility); + addSaveFunc([captions_compatibility] { Settings::getInstance()->setBool("CaptionsCompatibility", captions_compatibility->getState()); }); +#endif + + auto stretch_screensaver = std::make_shared(mWindow); + stretch_screensaver->setState(Settings::getInstance()->getBool("StretchVideoOnScreenSaver")); + addWithLabel("STRETCH VIDEO ON SCREENSAVER", stretch_screensaver); + addSaveFunc([stretch_screensaver] { Settings::getInstance()->setBool("StretchVideoOnScreenSaver", stretch_screensaver->getState()); }); +} + +GuiVideoScreensaverOptions::~GuiVideoScreensaverOptions() +{ +} + +void GuiVideoScreensaverOptions::save() +{ +#ifdef _RPI_ + bool startingStatusNotRisky = (Settings::getInstance()->getString("ScreenSaverGameInfo") == "never" || !Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); +#endif + GuiScreensaverOptions::save(); + +#ifdef _RPI_ + bool endStatusRisky = (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never" && Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); + if (startingStatusNotRisky && endStatusRisky) { + // if before it wasn't risky but now there's a risk of problems, show warning + mWindow->pushGui(new GuiMsgBox(mWindow, + "Using OMX Player and displaying Game Info may result in the video flickering in some TV modes. If that happens, consider:\n\n• Disabling the \"Show Game Info\" option;\n• Disabling \"Overscan\" on the Pi configuration menu might help:\nRetroPie > Raspi-Config > Advanced Options > Overscan > \"No\".\n• Disabling the use of OMX Player for the screensaver.", + "GOT IT!", [] { return; })); + } +#endif +} diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.h b/es-app/src/guis/GuiVideoScreensaverOptions.h new file mode 100644 index 0000000000..260c4fd16a --- /dev/null +++ b/es-app/src/guis/GuiVideoScreensaverOptions.h @@ -0,0 +1,16 @@ +#ifndef _GUI_VIDEO_SCREENSAVER_OPTIONS_H_ +#define _GUI_VIDEO_SCREENSAVER_OPTIONS_H_ + +#include "components/MenuComponent.h" +#include "GuiScreensaverOptions.h" + +class GuiVideoScreensaverOptions : public GuiScreensaverOptions +{ +public: + GuiVideoScreensaverOptions(Window* window, const char* title); + virtual ~GuiVideoScreensaverOptions(); + + void save() override; +}; + +#endif // _GUI_VIDEO_SCREENSAVER_OPTIONS_H_ diff --git a/es-core/src/PowerSaver.cpp b/es-core/src/PowerSaver.cpp index 5804d7cf30..cfa6488565 100644 --- a/es-core/src/PowerSaver.cpp +++ b/es-core/src/PowerSaver.cpp @@ -27,6 +27,8 @@ void PowerSaver::loadWakeupTime() std::string behaviour = Settings::getInstance()->getString("ScreenSaverBehavior"); if (behaviour == "random video") mWakeupTimeout = Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") - getMode(); + else if (behaviour == "slideshow") + mWakeupTimeout = Settings::getInstance()->getInt("ScreenSaverSwapImageTimeout") - getMode(); else // Dim and Blank mWakeupTimeout = -1; } diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 6f36432a34..1397dee3b9 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -88,6 +88,14 @@ void Settings::setDefaults() mBoolMap["StretchVideoOnScreenSaver"] = false; mStringMap["PowerSaverMode"] = "disabled"; + mIntMap["ScreenSaverSwapImageTimeout"] = 10000; + mBoolMap["SlideshowScreenSaverStretch"] = false; + mStringMap["SlideshowScreenSaverBackgroundAudioFile"] = getHomePath() + "/.emulationstation/slideshow/audio/slideshow_bg.wav"; + mBoolMap["SlideshowScreenSaverCustomImageSource"] = false; + mStringMap["SlideshowScreenSaverImageDir"] = getHomePath() + "/.emulationstation/slideshow/image"; + mStringMap["SlideshowScreenSaverImageFilter"] = ".png,.jpg"; + mBoolMap["SlideshowScreenSaverRecurse"] = false; + // This setting only applies to raspberry pi but set it for all platforms so // we don't get a warning if we encounter it on a different platform mBoolMap["VideoOmxPlayer"] = false; From 8e7ee6c93190bc8ca1879f3877184cffff530496 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sun, 10 Sep 2017 10:39:45 +0100 Subject: [PATCH 160/603] bump version to 2.6.3 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index c2aec73707..6122b479d8 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 6 -#define PROGRAM_VERSION_MAINTENANCE 2 -#define PROGRAM_VERSION_STRING "2.6.2rp" +#define PROGRAM_VERSION_MAINTENANCE 3 +#define PROGRAM_VERSION_STRING "2.6.3rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,6,2\0" +#define RESOURCE_VERSION_STRING "2,6,3\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 7a7550cde93fcc525296ea41f947b9f0299e2626 Mon Sep 17 00:00:00 2001 From: "D. Polders" Date: Fri, 8 Sep 2017 16:49:47 +0200 Subject: [PATCH 161/603] Introducing Kiosk UI mode, allowing users to hide menu items that might change system configuration settings. --- README.md | 7 +- es-app/src/guis/GuiGamelistOptions.cpp | 13 +- es-app/src/guis/GuiMenu.cpp | 674 +++++++++++++------------ es-app/src/guis/GuiMenu.h | 10 +- es-app/src/main.cpp | 5 + es-app/src/views/ViewController.cpp | 24 +- es-app/src/views/ViewController.h | 7 + es-core/src/Settings.cpp | 12 +- es-core/src/Window.cpp | 48 +- es-core/src/Window.h | 18 +- 10 files changed, 481 insertions(+), 337 deletions(-) diff --git a/README.md b/README.md index ecb5307e03..eb90824035 100644 --- a/README.md +++ b/README.md @@ -86,9 +86,12 @@ You can use `--help` or `-h` to view a list of command-line options. Briefly out --draw-framerate - draw the framerate. --no-exit - do not display 'exit' in the ES menu. --debug - show the console window on Windows, do slightly more logging ---windowed - run ES in a window, works best in conjunction with --resolution [w] [h]. +--windowed - run ES in a window, works best in conjunction with --resolution [w] [h]. --vsync [1/on or 0/off] - turn vsync on or off (default is on). ---scrape - run the interactive command-line metadata scraper. +--scrape - run the interactive command-line metadata scraper. +--no-splash - don't show the splash screen. +--max-vram [size] - Max VRAM to use in Mb before swapping. 0 for unlimited. +--force-kiosk - Force the UI mode to be Kiosk. ``` As long as ES hasn't frozen, you can always press F4 to close the application. diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index ef48600cda..b02f21a197 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -1,6 +1,7 @@ #include "GuiGamelistOptions.h" #include "GuiMetaDataEd.h" #include "Util.h" +#include "Settings.h" #include "views/gamelist/IGameListView.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" @@ -64,8 +65,10 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui mMenu.addRow(row); std::map customCollections = CollectionSystemManager::get()->getCustomCollectionSystems(); - if((customCollections.find(system->getName()) != customCollections.end() && CollectionSystemManager::get()->getEditingCollection() != system->getName()) || - CollectionSystemManager::get()->getCustomCollectionsBundle()->getName() == system->getName()) + + if(ViewController::get()->isUIModeFull() && + ((customCollections.find(system->getName()) != customCollections.end() && CollectionSystemManager::get()->getEditingCollection() != system->getName()) || + CollectionSystemManager::get()->getCustomCollectionsBundle()->getName() == system->getName())) { row.elements.clear(); row.addElement(std::make_shared(mWindow, "ADD/REMOVE GAMES TO THIS GAME COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); @@ -73,7 +76,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui mMenu.addRow(row); } - if(CollectionSystemManager::get()->isEditing()) + if(ViewController::get()->isUIModeFull() && CollectionSystemManager::get()->isEditing()) { row.elements.clear(); row.addElement(std::make_shared(mWindow, "FINISH EDITING '" + strToUpper(CollectionSystemManager::get()->getEditingCollection()) + "' COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); @@ -81,8 +84,8 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui mMenu.addRow(row); } - if (!fromPlaceholder && !(mSystem->isCollection() && file->getType() == FOLDER)) { - + if (ViewController::get()->isUIModeFull() && !fromPlaceholder && !(mSystem->isCollection() && file->getType() == FOLDER)) + { row.elements.clear(); row.addElement(std::make_shared(mWindow, "EDIT THIS GAME'S METADATA", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); row.addElement(makeArrow(mWindow), false); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index a9e19e2680..05a7822893 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -23,381 +23,419 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU"), mVersion(window) { - // MAIN MENU + bool isFullUI = ViewController::get()->isUIModeFull(); - // SCRAPER > - // SOUND SETTINGS > - // UI SETTINGS > - // CONFIGURE INPUT > - // QUIT > + if (isFullUI) + addEntry("SCRAPER", 0x777777FF, true, [this] { openScraperSettings(); }); - // [version] + addEntry("SOUND SETTINGS", 0x777777FF, true, [this] { openSoundSettings(); }); + + if (isFullUI) + addEntry("UI SETTINGS", 0x777777FF, true, [this] { openUISettings(); }); + + if (isFullUI) + addEntry("GAME COLLECTION SETTINGS", 0x777777FF, true, [this] { openCollectionSystemSettings(); }); + + if (isFullUI) + addEntry("OTHER SETTINGS", 0x777777FF, true, [this] { openOtherSettings(); }); + + if (isFullUI) + addEntry("CONFIGURE INPUT", 0x777777FF, true, [this] { openConfigInput(); }); + + addEntry("QUIT", 0x777777FF, true, [this] {openQuitMenu(); }); + + addChild(&mMenu); + addVersionInfo(); + setSize(mMenu.getSize()); + setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, Renderer::getScreenHeight() * 0.15f); +} + +void GuiMenu::openScraperSettings() +{ + auto s = new GuiSettings(mWindow, "SCRAPER"); + + // scrape from + auto scraper_list = std::make_shared< OptionListComponent< std::string > >(mWindow, "SCRAPE FROM", false); + std::vector scrapers = getScraperList(); + for(auto it = scrapers.begin(); it != scrapers.end(); it++) + scraper_list->add(*it, *it, *it == Settings::getInstance()->getString("Scraper")); + + s->addWithLabel("SCRAPE FROM", scraper_list); + s->addSaveFunc([scraper_list] { Settings::getInstance()->setString("Scraper", scraper_list->getSelected()); }); + + // scrape ratings + auto scrape_ratings = std::make_shared(mWindow); + scrape_ratings->setState(Settings::getInstance()->getBool("ScrapeRatings")); + s->addWithLabel("SCRAPE RATINGS", scrape_ratings); + s->addSaveFunc([scrape_ratings] { Settings::getInstance()->setBool("ScrapeRatings", scrape_ratings->getState()); }); + + // scrape now + ComponentListRow row; auto openScrapeNow = [this] { mWindow->pushGui(new GuiScraperStart(mWindow)); }; - addEntry("SCRAPER", 0x777777FF, true, - [this, openScrapeNow] { - auto s = new GuiSettings(mWindow, "SCRAPER"); - - // scrape from - auto scraper_list = std::make_shared< OptionListComponent< std::string > >(mWindow, "SCRAPE FROM", false); - std::vector scrapers = getScraperList(); - for(auto it = scrapers.begin(); it != scrapers.end(); it++) - scraper_list->add(*it, *it, *it == Settings::getInstance()->getString("Scraper")); - - s->addWithLabel("SCRAPE FROM", scraper_list); - s->addSaveFunc([scraper_list] { Settings::getInstance()->setString("Scraper", scraper_list->getSelected()); }); - - // scrape ratings - auto scrape_ratings = std::make_shared(mWindow); - scrape_ratings->setState(Settings::getInstance()->getBool("ScrapeRatings")); - s->addWithLabel("SCRAPE RATINGS", scrape_ratings); - s->addSaveFunc([scrape_ratings] { Settings::getInstance()->setBool("ScrapeRatings", scrape_ratings->getState()); }); - - // scrape now - ComponentListRow row; - std::function openAndSave = openScrapeNow; - openAndSave = [s, openAndSave] { s->save(); openAndSave(); }; - row.makeAcceptInputHandler(openAndSave); - - auto scrape_now = std::make_shared(mWindow, "SCRAPE NOW", Font::get(FONT_SIZE_MEDIUM), 0x777777FF); - auto bracket = makeArrow(mWindow); - row.addElement(scrape_now, true); - row.addElement(bracket, false); - s->addRow(row); + std::function openAndSave = openScrapeNow; + openAndSave = [s, openAndSave] { s->save(); openAndSave(); }; + row.makeAcceptInputHandler(openAndSave); - mWindow->pushGui(s); - }); + auto scrape_now = std::make_shared(mWindow, "SCRAPE NOW", Font::get(FONT_SIZE_MEDIUM), 0x777777FF); + auto bracket = makeArrow(mWindow); + row.addElement(scrape_now, true); + row.addElement(bracket, false); + s->addRow(row); - addEntry("SOUND SETTINGS", 0x777777FF, true, - [this] { - auto s = new GuiSettings(mWindow, "SOUND SETTINGS"); - - // volume - auto volume = std::make_shared(mWindow, 0.f, 100.f, 1.f, "%"); - volume->setValue((float)VolumeControl::getInstance()->getVolume()); - s->addWithLabel("SYSTEM VOLUME", volume); - s->addSaveFunc([volume] { VolumeControl::getInstance()->setVolume((int)round(volume->getValue())); }); - - #ifdef _RPI_ - // volume control device - auto vol_dev = std::make_shared< OptionListComponent >(mWindow, "AUDIO DEVICE", false); - std::vector transitions; - transitions.push_back("PCM"); - transitions.push_back("Speaker"); - transitions.push_back("Master"); - for(auto it = transitions.begin(); it != transitions.end(); it++) - vol_dev->add(*it, *it, Settings::getInstance()->getString("AudioDevice") == *it); - s->addWithLabel("AUDIO DEVICE", vol_dev); - s->addSaveFunc([vol_dev] { - Settings::getInstance()->setString("AudioDevice", vol_dev->getSelected()); - VolumeControl::getInstance()->deinit(); - VolumeControl::getInstance()->init(); - }); - #endif - - // disable sounds - auto sounds_enabled = std::make_shared(mWindow); - sounds_enabled->setState(Settings::getInstance()->getBool("EnableSounds")); - s->addWithLabel("ENABLE NAVIGATION SOUNDS", sounds_enabled); - s->addSaveFunc([sounds_enabled] { Settings::getInstance()->setBool("EnableSounds", sounds_enabled->getState()); }); - - auto video_audio = std::make_shared(mWindow); - video_audio->setState(Settings::getInstance()->getBool("VideoAudio")); - s->addWithLabel("ENABLE VIDEO AUDIO", video_audio); - s->addSaveFunc([video_audio] { Settings::getInstance()->setBool("VideoAudio", video_audio->getState()); }); + mWindow->pushGui(s); +} + +void GuiMenu::openSoundSettings() +{ + auto s = new GuiSettings(mWindow, "SOUND SETTINGS"); + // volume + auto volume = std::make_shared(mWindow, 0.f, 100.f, 1.f, "%"); + volume->setValue((float)VolumeControl::getInstance()->getVolume()); + s->addWithLabel("SYSTEM VOLUME", volume); + s->addSaveFunc([volume] { VolumeControl::getInstance()->setVolume((int)round(volume->getValue())); }); + + if (ViewController::get()->isUIModeFull()) + { #ifdef _RPI_ - // OMX player Audio Device - auto omx_audio_dev = std::make_shared< OptionListComponent >(mWindow, "OMX PLAYER AUDIO DEVICE", false); - std::vector devices; - devices.push_back("local"); - devices.push_back("hdmi"); - devices.push_back("both"); - // USB audio - devices.push_back("alsa:hw:0,0"); - devices.push_back("alsa:hw:1,0"); - for (auto it = devices.begin(); it != devices.end(); it++) - omx_audio_dev->add(*it, *it, Settings::getInstance()->getString("OMXAudioDev") == *it); - s->addWithLabel("OMX PLAYER AUDIO DEVICE", omx_audio_dev); - s->addSaveFunc([omx_audio_dev] { - if (Settings::getInstance()->getString("OMXAudioDev") != omx_audio_dev->getSelected()) - Settings::getInstance()->setString("OMXAudioDev", omx_audio_dev->getSelected()); - }); + // volume control device + auto vol_dev = std::make_shared< OptionListComponent >(mWindow, "AUDIO DEVICE", false); + std::vector transitions; + transitions.push_back("PCM"); + transitions.push_back("Speaker"); + transitions.push_back("Master"); + for(auto it = transitions.begin(); it != transitions.end(); it++) + vol_dev->add(*it, *it, Settings::getInstance()->getString("AudioDevice") == *it); + s->addWithLabel("AUDIO DEVICE", vol_dev); + s->addSaveFunc([vol_dev] { + Settings::getInstance()->setString("AudioDevice", vol_dev->getSelected()); + VolumeControl::getInstance()->deinit(); + VolumeControl::getInstance()->init(); + }); +#endif + + // disable sounds + auto sounds_enabled = std::make_shared(mWindow); + sounds_enabled->setState(Settings::getInstance()->getBool("EnableSounds")); + s->addWithLabel("ENABLE NAVIGATION SOUNDS", sounds_enabled); + s->addSaveFunc([sounds_enabled] { Settings::getInstance()->setBool("EnableSounds", sounds_enabled->getState()); }); + + auto video_audio = std::make_shared(mWindow); + video_audio->setState(Settings::getInstance()->getBool("VideoAudio")); + s->addWithLabel("ENABLE VIDEO AUDIO", video_audio); + s->addSaveFunc([video_audio] { Settings::getInstance()->setBool("VideoAudio", video_audio->getState()); }); + +#ifdef _RPI_ + // OMX player Audio Device + auto omx_audio_dev = std::make_shared< OptionListComponent >(mWindow, "OMX PLAYER AUDIO DEVICE", false); + std::vector devices; + devices.push_back("local"); + devices.push_back("hdmi"); + devices.push_back("both"); + // USB audio + devices.push_back("alsa:hw:0,0"); + devices.push_back("alsa:hw:1,0"); + for (auto it = devices.begin(); it != devices.end(); it++) + omx_audio_dev->add(*it, *it, Settings::getInstance()->getString("OMXAudioDev") == *it); + s->addWithLabel("OMX PLAYER AUDIO DEVICE", omx_audio_dev); + s->addSaveFunc([omx_audio_dev] { + if (Settings::getInstance()->getString("OMXAudioDev") != omx_audio_dev->getSelected()) + Settings::getInstance()->setString("OMXAudioDev", omx_audio_dev->getSelected()); + }); #endif + } + + mWindow->pushGui(s); + +} + +void GuiMenu::openUISettings() +{ + auto s = new GuiSettings(mWindow, "UI SETTINGS"); + + //UI mode + auto UImodeSelection = std::make_shared< OptionListComponent >(mWindow, "UI MODE", false); + std::vector UImodes = ViewController::get()->getUIModes(); + for (auto it = UImodes.begin(); it != UImodes.end(); it++) + UImodeSelection->add(*it, *it, Settings::getInstance()->getString("UIMode") == *it); + s->addWithLabel("UI MODE", UImodeSelection); + Window* window = mWindow; + s->addSaveFunc([UImodeSelection, window] + { + LOG(LogDebug) << "Setting UI mode to" << UImodeSelection->getSelected(); + Settings::getInstance()->setString("UIMode", UImodeSelection->getSelected()); + }); - mWindow->pushGui(s); + // screensaver + ComponentListRow screensaver_row; + screensaver_row.elements.clear(); + screensaver_row.addElement(std::make_shared(mWindow, "SCREENSAVER SETTINGS", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + screensaver_row.addElement(makeArrow(mWindow), false); + screensaver_row.makeAcceptInputHandler(std::bind(&GuiMenu::openScreensaverOptions, this)); + s->addRow(screensaver_row); + + // quick system select (left/right in game list view) + auto quick_sys_select = std::make_shared(mWindow); + quick_sys_select->setState(Settings::getInstance()->getBool("QuickSystemSelect")); + s->addWithLabel("QUICK SYSTEM SELECT", quick_sys_select); + s->addSaveFunc([quick_sys_select] { Settings::getInstance()->setBool("QuickSystemSelect", quick_sys_select->getState()); }); + + // carousel transition option + auto move_carousel = std::make_shared(mWindow); + move_carousel->setState(Settings::getInstance()->getBool("MoveCarousel")); + s->addWithLabel("CAROUSEL TRANSITIONS", move_carousel); + s->addSaveFunc([move_carousel] { + if (move_carousel->getState() + && !Settings::getInstance()->getBool("MoveCarousel") + && PowerSaver::getMode() == PowerSaver::INSTANT) + { + Settings::getInstance()->setString("PowerSaverMode", "default"); + PowerSaver::init(); + } + Settings::getInstance()->setBool("MoveCarousel", move_carousel->getState()); }); - addEntry("UI SETTINGS", 0x777777FF, true, - [this] { - auto s = new GuiSettings(mWindow, "UI SETTINGS"); - - ComponentListRow screensaver_row; - screensaver_row.elements.clear(); - screensaver_row.addElement(std::make_shared(mWindow, "SCREENSAVER SETTINGS", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - screensaver_row.addElement(makeArrow(mWindow), false); - screensaver_row.makeAcceptInputHandler(std::bind(&GuiMenu::openScreensaverOptions, this)); - s->addRow(screensaver_row); - - // quick system select (left/right in game list view) - auto quick_sys_select = std::make_shared(mWindow); - quick_sys_select->setState(Settings::getInstance()->getBool("QuickSystemSelect")); - s->addWithLabel("QUICK SYSTEM SELECT", quick_sys_select); - s->addSaveFunc([quick_sys_select] { Settings::getInstance()->setBool("QuickSystemSelect", quick_sys_select->getState()); }); - - // carousel transition option - auto move_carousel = std::make_shared(mWindow); - move_carousel->setState(Settings::getInstance()->getBool("MoveCarousel")); - s->addWithLabel("CAROUSEL TRANSITIONS", move_carousel); - s->addSaveFunc([move_carousel] { - if (move_carousel->getState() - && !Settings::getInstance()->getBool("MoveCarousel") - && PowerSaver::getMode() == PowerSaver::INSTANT) - { - Settings::getInstance()->setString("PowerSaverMode", "default"); - PowerSaver::init(); - } - Settings::getInstance()->setBool("MoveCarousel", move_carousel->getState()); - }); + // transition style + auto transition_style = std::make_shared< OptionListComponent >(mWindow, "TRANSITION STYLE", false); + std::vector transitions; + transitions.push_back("fade"); + transitions.push_back("slide"); + transitions.push_back("instant"); + for(auto it = transitions.begin(); it != transitions.end(); it++) + transition_style->add(*it, *it, Settings::getInstance()->getString("TransitionStyle") == *it); + s->addWithLabel("TRANSITION STYLE", transition_style); + s->addSaveFunc([transition_style] { + if (Settings::getInstance()->getString("TransitionStyle") == "instant" + && transition_style->getSelected() != "instant" + && PowerSaver::getMode() == PowerSaver::INSTANT) + { + Settings::getInstance()->setString("PowerSaverMode", "default"); + PowerSaver::init(); + } + Settings::getInstance()->setString("TransitionStyle", transition_style->getSelected()); + }); - // transition style - auto transition_style = std::make_shared< OptionListComponent >(mWindow, "TRANSITION STYLE", false); - std::vector transitions; - transitions.push_back("fade"); - transitions.push_back("slide"); - transitions.push_back("instant"); - for(auto it = transitions.begin(); it != transitions.end(); it++) - transition_style->add(*it, *it, Settings::getInstance()->getString("TransitionStyle") == *it); - s->addWithLabel("TRANSITION STYLE", transition_style); - s->addSaveFunc([transition_style] { - if (Settings::getInstance()->getString("TransitionStyle") == "instant" - && transition_style->getSelected() != "instant" - && PowerSaver::getMode() == PowerSaver::INSTANT) - { - Settings::getInstance()->setString("PowerSaverMode", "default"); - PowerSaver::init(); - } - Settings::getInstance()->setString("TransitionStyle", transition_style->getSelected()); - }); + // theme set + auto themeSets = ThemeData::getThemeSets(); - // theme set - auto themeSets = ThemeData::getThemeSets(); + if(!themeSets.empty()) + { + auto selectedSet = themeSets.find(Settings::getInstance()->getString("ThemeSet")); + if(selectedSet == themeSets.end()) + selectedSet = themeSets.begin(); + + auto theme_set = std::make_shared< OptionListComponent >(mWindow, "THEME SET", false); + for(auto it = themeSets.begin(); it != themeSets.end(); it++) + theme_set->add(it->first, it->first, it == selectedSet); + s->addWithLabel("THEME SET", theme_set); + + Window* window = mWindow; + s->addSaveFunc([window, theme_set] + { + bool needReload = false; + if(Settings::getInstance()->getString("ThemeSet") != theme_set->getSelected()) + needReload = true; - if(!themeSets.empty()) + Settings::getInstance()->setString("ThemeSet", theme_set->getSelected()); + + if(needReload) { - auto selectedSet = themeSets.find(Settings::getInstance()->getString("ThemeSet")); - if(selectedSet == themeSets.end()) - selectedSet = themeSets.begin(); - - auto theme_set = std::make_shared< OptionListComponent >(mWindow, "THEME SET", false); - for(auto it = themeSets.begin(); it != themeSets.end(); it++) - theme_set->add(it->first, it->first, it == selectedSet); - s->addWithLabel("THEME SET", theme_set); - - Window* window = mWindow; - s->addSaveFunc([window, theme_set] - { - bool needReload = false; - if(Settings::getInstance()->getString("ThemeSet") != theme_set->getSelected()) - needReload = true; - - Settings::getInstance()->setString("ThemeSet", theme_set->getSelected()); - - if(needReload) - { - CollectionSystemManager::get()->updateSystemsList(); - ViewController::get()->reloadAll(); // TODO - replace this with some sort of signal-based implementation - } - }); + CollectionSystemManager::get()->updateSystemsList(); + ViewController::get()->reloadAll(); // TODO - replace this with some sort of signal-based implementation } + }); + } - // GameList view style - auto gamelist_style = std::make_shared< OptionListComponent >(mWindow, "GAMELIST VIEW STYLE", false); - std::vector styles; - styles.push_back("automatic"); - styles.push_back("basic"); - styles.push_back("detailed"); - styles.push_back("video"); - for (auto it = styles.begin(); it != styles.end(); it++) - gamelist_style->add(*it, *it, Settings::getInstance()->getString("GamelistViewStyle") == *it); - s->addWithLabel("GAMELIST VIEW STYLE", gamelist_style); - s->addSaveFunc([gamelist_style] { - bool needReload = false; - if (Settings::getInstance()->getString("GamelistViewStyle") != gamelist_style->getSelected()) - needReload = true; - Settings::getInstance()->setString("GamelistViewStyle", gamelist_style->getSelected()); - if (needReload) - ViewController::get()->reloadAll(); - }); + // GameList view style + auto gamelist_style = std::make_shared< OptionListComponent >(mWindow, "GAMELIST VIEW STYLE", false); + std::vector styles; + styles.push_back("automatic"); + styles.push_back("basic"); + styles.push_back("detailed"); + styles.push_back("video"); + for (auto it = styles.begin(); it != styles.end(); it++) + gamelist_style->add(*it, *it, Settings::getInstance()->getString("GamelistViewStyle") == *it); + s->addWithLabel("GAMELIST VIEW STYLE", gamelist_style); + s->addSaveFunc([gamelist_style] { + bool needReload = false; + if (Settings::getInstance()->getString("GamelistViewStyle") != gamelist_style->getSelected()) + needReload = true; + Settings::getInstance()->setString("GamelistViewStyle", gamelist_style->getSelected()); + if (needReload) + ViewController::get()->reloadAll(); + }); - // show help - auto show_help = std::make_shared(mWindow); - show_help->setState(Settings::getInstance()->getBool("ShowHelpPrompts")); - s->addWithLabel("ON-SCREEN HELP", show_help); - s->addSaveFunc([show_help] { Settings::getInstance()->setBool("ShowHelpPrompts", show_help->getState()); }); + // show help + auto show_help = std::make_shared(mWindow); + show_help->setState(Settings::getInstance()->getBool("ShowHelpPrompts")); + s->addWithLabel("ON-SCREEN HELP", show_help); + s->addSaveFunc([show_help] { Settings::getInstance()->setBool("ShowHelpPrompts", show_help->getState()); }); - mWindow->pushGui(s); - }); + mWindow->pushGui(s); - addEntry("GAME COLLECTION SETTINGS", 0x777777FF, true, - [this] { openCollectionSystemSettings(); - }); +} - addEntry("OTHER SETTINGS", 0x777777FF, true, - [this] { - auto s = new GuiSettings(mWindow, "OTHER SETTINGS"); - - // maximum vram - auto max_vram = std::make_shared(mWindow, 0.f, 1000.f, 10.f, "Mb"); - max_vram->setValue((float)(Settings::getInstance()->getInt("MaxVRAM"))); - s->addWithLabel("VRAM LIMIT", max_vram); - s->addSaveFunc([max_vram] { Settings::getInstance()->setInt("MaxVRAM", (int)round(max_vram->getValue())); }); - - // power saver - auto power_saver = std::make_shared< OptionListComponent >(mWindow, "POWER SAVER MODES", false); - std::vector modes; - modes.push_back("disabled"); - modes.push_back("default"); - modes.push_back("enhanced"); - modes.push_back("instant"); - for (auto it = modes.begin(); it != modes.end(); it++) - power_saver->add(*it, *it, Settings::getInstance()->getString("PowerSaverMode") == *it); - s->addWithLabel("POWER SAVER MODES", power_saver); - s->addSaveFunc([this, power_saver] { - if (Settings::getInstance()->getString("PowerSaverMode") != "instant" && power_saver->getSelected() == "instant") { - Settings::getInstance()->setString("TransitionStyle", "instant"); - Settings::getInstance()->setBool("MoveCarousel", false); - } - Settings::getInstance()->setString("PowerSaverMode", power_saver->getSelected()); - PowerSaver::init(); - }); +void GuiMenu::openOtherSettings() +{ + auto s = new GuiSettings(mWindow, "OTHER SETTINGS"); + + // maximum vram + auto max_vram = std::make_shared(mWindow, 0.f, 1000.f, 10.f, "Mb"); + max_vram->setValue((float)(Settings::getInstance()->getInt("MaxVRAM"))); + s->addWithLabel("VRAM LIMIT", max_vram); + s->addSaveFunc([max_vram] { Settings::getInstance()->setInt("MaxVRAM", (int)round(max_vram->getValue())); }); + + // power saver + auto power_saver = std::make_shared< OptionListComponent >(mWindow, "POWER SAVER MODES", false); + std::vector modes; + modes.push_back("disabled"); + modes.push_back("default"); + modes.push_back("enhanced"); + modes.push_back("instant"); + for (auto it = modes.begin(); it != modes.end(); it++) + power_saver->add(*it, *it, Settings::getInstance()->getString("PowerSaverMode") == *it); + s->addWithLabel("POWER SAVER MODES", power_saver); + s->addSaveFunc([this, power_saver] { + if (Settings::getInstance()->getString("PowerSaverMode") != "instant" && power_saver->getSelected() == "instant") { + Settings::getInstance()->setString("TransitionStyle", "instant"); + Settings::getInstance()->setBool("MoveCarousel", false); + } + Settings::getInstance()->setString("PowerSaverMode", power_saver->getSelected()); + PowerSaver::init(); + }); - // gamelists - auto save_gamelists = std::make_shared(mWindow); - save_gamelists->setState(Settings::getInstance()->getBool("SaveGamelistsOnExit")); - s->addWithLabel("SAVE METADATA ON EXIT", save_gamelists); - s->addSaveFunc([save_gamelists] { Settings::getInstance()->setBool("SaveGamelistsOnExit", save_gamelists->getState()); }); + // gamelists + auto save_gamelists = std::make_shared(mWindow); + save_gamelists->setState(Settings::getInstance()->getBool("SaveGamelistsOnExit")); + s->addWithLabel("SAVE METADATA ON EXIT", save_gamelists); + s->addSaveFunc([save_gamelists] { Settings::getInstance()->setBool("SaveGamelistsOnExit", save_gamelists->getState()); }); - auto parse_gamelists = std::make_shared(mWindow); - parse_gamelists->setState(Settings::getInstance()->getBool("ParseGamelistOnly")); - s->addWithLabel("PARSE GAMESLISTS ONLY", parse_gamelists); - s->addSaveFunc([parse_gamelists] { Settings::getInstance()->setBool("ParseGamelistOnly", parse_gamelists->getState()); }); + auto parse_gamelists = std::make_shared(mWindow); + parse_gamelists->setState(Settings::getInstance()->getBool("ParseGamelistOnly")); + s->addWithLabel("PARSE GAMESLISTS ONLY", parse_gamelists); + s->addSaveFunc([parse_gamelists] { Settings::getInstance()->setBool("ParseGamelistOnly", parse_gamelists->getState()); }); #ifndef WIN32 - // hidden files - auto hidden_files = std::make_shared(mWindow); - hidden_files->setState(Settings::getInstance()->getBool("ShowHiddenFiles")); - s->addWithLabel("SHOW HIDDEN FILES", hidden_files); - s->addSaveFunc([hidden_files] { Settings::getInstance()->setBool("ShowHiddenFiles", hidden_files->getState()); }); + // hidden files + auto hidden_files = std::make_shared(mWindow); + hidden_files->setState(Settings::getInstance()->getBool("ShowHiddenFiles")); + s->addWithLabel("SHOW HIDDEN FILES", hidden_files); + s->addSaveFunc([hidden_files] { Settings::getInstance()->setBool("ShowHiddenFiles", hidden_files->getState()); }); #endif #ifdef _RPI_ - // Video Player - VideoOmxPlayer - auto omx_player = std::make_shared(mWindow); - omx_player->setState(Settings::getInstance()->getBool("VideoOmxPlayer")); - s->addWithLabel("USE OMX PLAYER (HW ACCELERATED)", omx_player); - s->addSaveFunc([omx_player] - { - // need to reload all views to re-create the right video components - bool needReload = false; - if(Settings::getInstance()->getBool("VideoOmxPlayer") != omx_player->getState()) - needReload = true; + // Video Player - VideoOmxPlayer + auto omx_player = std::make_shared(mWindow); + omx_player->setState(Settings::getInstance()->getBool("VideoOmxPlayer")); + s->addWithLabel("USE OMX PLAYER (HW ACCELERATED)", omx_player); + s->addSaveFunc([omx_player] + { + // need to reload all views to re-create the right video components + bool needReload = false; + if(Settings::getInstance()->getBool("VideoOmxPlayer") != omx_player->getState()) + needReload = true; - Settings::getInstance()->setBool("VideoOmxPlayer", omx_player->getState()); + Settings::getInstance()->setBool("VideoOmxPlayer", omx_player->getState()); - if(needReload) - ViewController::get()->reloadAll(); - }); + if(needReload) + ViewController::get()->reloadAll(); + }); #endif - // framerate - auto framerate = std::make_shared(mWindow); - framerate->setState(Settings::getInstance()->getBool("DrawFramerate")); - s->addWithLabel("SHOW FRAMERATE", framerate); - s->addSaveFunc([framerate] { Settings::getInstance()->setBool("DrawFramerate", framerate->getState()); }); + // framerate + auto framerate = std::make_shared(mWindow); + framerate->setState(Settings::getInstance()->getBool("DrawFramerate")); + s->addWithLabel("SHOW FRAMERATE", framerate); + s->addSaveFunc([framerate] { Settings::getInstance()->setBool("DrawFramerate", framerate->getState()); }); - mWindow->pushGui(s); - }); + mWindow->pushGui(s); - addEntry("CONFIGURE INPUT", 0x777777FF, true, - [this] { - Window* window = mWindow; - window->pushGui(new GuiMsgBox(window, "ARE YOU SURE YOU WANT TO CONFIGURE INPUT?", "YES", - [window] { - window->pushGui(new GuiDetectDevice(window, false, nullptr)); - }, "NO", nullptr) - ); - }); +} - addEntry("QUIT", 0x777777FF, true, - [this] { - auto s = new GuiSettings(mWindow, "QUIT"); +void GuiMenu::openConfigInput() +{ + Window* window = mWindow; + window->pushGui(new GuiMsgBox(window, "ARE YOU SURE YOU WANT TO CONFIGURE INPUT?", "YES", + [window] { + window->pushGui(new GuiDetectDevice(window, false, nullptr)); + }, "NO", nullptr) + ); - Window* window = mWindow; +} - ComponentListRow row; - row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", - [] { - if(quitES("/tmp/es-restart") != 0) - LOG(LogWarning) << "Restart terminated with non-zero result!"; - }, "NO", nullptr)); - }); - row.addElement(std::make_shared(window, "RESTART EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - s->addRow(row); +void GuiMenu::openQuitMenu() +{ + auto s = new GuiSettings(mWindow, "QUIT"); - row.elements.clear(); - row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", + Window* window = mWindow; + + ComponentListRow row; + if (ViewController::get()->isUIModeFull()) + { + row.makeAcceptInputHandler([window] { + window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", [] { - if(quitES("/tmp/es-sysrestart") != 0) - LOG(LogWarning) << "Restart terminated with non-zero result!"; - }, "NO", nullptr)); - }); - row.addElement(std::make_shared(window, "RESTART SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - s->addRow(row); + if(quitES("/tmp/es-restart") != 0) + LOG(LogWarning) << "Restart terminated with non-zero result!"; + }, "NO", nullptr)); + }); + row.addElement(std::make_shared(window, "RESTART EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + s->addRow(row); + + + if(Settings::getInstance()->getBool("ShowExit")) + { row.elements.clear(); row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBox(window, "REALLY SHUTDOWN?", "YES", - [] { - if(quitES("/tmp/es-shutdown") != 0) - LOG(LogWarning) << "Shutdown terminated with non-zero result!"; + window->pushGui(new GuiMsgBox(window, "REALLY QUIT?", "YES", + [] { + SDL_Event ev; + ev.type = SDL_QUIT; + SDL_PushEvent(&ev); }, "NO", nullptr)); }); - row.addElement(std::make_shared(window, "SHUTDOWN SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(std::make_shared(window, "QUIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); s->addRow(row); + } + } - if(Settings::getInstance()->getBool("ShowExit")) - { - row.elements.clear(); - row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBox(window, "REALLY QUIT?", "YES", - [] { - SDL_Event ev; - ev.type = SDL_QUIT; - SDL_PushEvent(&ev); - }, "NO", nullptr)); - }); - row.addElement(std::make_shared(window, "QUIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - s->addRow(row); - } - - mWindow->pushGui(s); + row.elements.clear(); + row.makeAcceptInputHandler([window] { + window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", + [] { + if(quitES("/tmp/es-sysrestart") != 0) + LOG(LogWarning) << "Restart terminated with non-zero result!"; + }, "NO", nullptr)); + }); + row.addElement(std::make_shared(window, "RESTART SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + s->addRow(row); + + row.elements.clear(); + row.makeAcceptInputHandler([window] { + window->pushGui(new GuiMsgBox(window, "REALLY SHUTDOWN?", "YES", + [] { + if (quitES("/tmp/es-shutdown") != 0) + LOG(LogWarning) << "Shutdown terminated with non-zero result!"; + }, "NO", nullptr)); }); + row.addElement(std::make_shared(window, "SHUTDOWN SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + s->addRow(row); + + mWindow->pushGui(s); +} +void GuiMenu::addVersionInfo() +{ mVersion.setFont(Font::get(FONT_SIZE_SMALL)); mVersion.setColor(0x5E5E5EFF); mVersion.setText("EMULATIONSTATION V" + strToUpper(PROGRAM_VERSION_STRING)); mVersion.setHorizontalAlignment(ALIGN_CENTER); - - addChild(&mMenu); addChild(&mVersion); - setSize(mMenu.getSize()); - setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, Renderer::getScreenHeight() * 0.15f); } void GuiMenu::openScreensaverOptions() { diff --git a/es-app/src/guis/GuiMenu.h b/es-app/src/guis/GuiMenu.h index 8d99f14e46..f52987fa09 100644 --- a/es-app/src/guis/GuiMenu.h +++ b/es-app/src/guis/GuiMenu.h @@ -16,8 +16,16 @@ class GuiMenu : public GuiComponent private: void addEntry(const char* name, unsigned int color, bool add_arrow, const std::function& func); - void openScreensaverOptions(); + void addVersionInfo(); void openCollectionSystemSettings(); + void openConfigInput(); + void openOtherSettings(); + void openQuitMenu(); + void openScraperSettings(); + void openScreensaverOptions(); + void openSoundSettings(); + void openUISettings(); + MenuComponent mMenu; TextComponent mVersion; }; diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 058121e65a..9f89b38d46 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -85,6 +85,10 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height { int maxVRAM = atoi(argv[i + 1]); Settings::getInstance()->setInt("MaxVRAM", maxVRAM); + } + else if (strcmp(argv[i], "--force-kiosk") == 0) + { + Settings::getInstance()->setBool("ForceKiosk", true); }else if(strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { #ifdef WIN32 @@ -111,6 +115,7 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height "--windowed not fullscreen, should be used with --resolution\n" "--vsync [1/on or 0/off] turn vsync on or off (default is on)\n" "--max-vram [size] Max VRAM to use in Mb before swapping. 0 for unlimited\n" + "--force-kiosk Force the UI mode to be Kiosk\n" "--help, -h summon a sentient, angry tuba\n\n" "More information available in README.md.\n"; return false; //exit after printing help diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 2b0016b8cf..abba8b3806 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -33,6 +33,7 @@ ViewController::ViewController(Window* window) : GuiComponent(window), mCurrentView(nullptr), mCamera(Eigen::Affine3f::Identity()), mFadeOpacity(0), mLockInput(false) { mState.viewing = NOTHING; + mCurUIMode = Settings::getInstance()->getString("UIMode"); } ViewController::~ViewController() @@ -43,10 +44,6 @@ ViewController::~ViewController() void ViewController::goToStart() { - // TODO - /* mState.viewing = START_SCREEN; - mCurrentView.reset(); - playViewTransition(); */ goToSystemView(SystemData::sSystemVector.at(0)); } @@ -399,6 +396,9 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) Eigen::Vector3f viewStart = trans.inverse().translation(); Eigen::Vector3f viewEnd = trans.inverse() * Eigen::Vector3f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), 0); + // Keep track of UI mode changes. + monitorUIMode(); + // draw systemview getSystemListView()->render(trans); @@ -499,6 +499,22 @@ void ViewController::reloadAll() updateHelpPrompts(); } +void ViewController::monitorUIMode() +{ + std::string uimode = Settings::getInstance()->getString("UIMode"); + if (uimode != mCurUIMode) // UIMODE HAS CHANGED + { + mCurUIMode = uimode; + reloadAll(); + goToStart(); + } +} + +bool ViewController::isUIModeFull() +{ + return ((mCurUIMode == "Full") && ! Settings::getInstance()->getBool("ForceKiosk")); +} + std::vector ViewController::getHelpPrompts() { std::vector prompts; diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 94ed9f5625..1b93fc5ed0 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -5,6 +5,8 @@ class SystemData; +const std::vector UIModes = { "Full", "Kiosk" }; + // Used to smoothly transition the camera between multiple views (e.g. from system to system, from gamelist to gamelist). class ViewController : public GuiComponent { @@ -24,6 +26,10 @@ class ViewController : public GuiComponent inline void reloadGameListView(SystemData* system, bool reloadTheme = false) { reloadGameListView(getGameListView(system).get(), reloadTheme); } void reloadAll(); // Reload everything with a theme. Used when the "ThemeSet" setting changes. + void monitorUIMode(); + bool isUIModeFull(); + inline std::vector getUIModes() { return UIModes; }; + // Navigation. void goToNextGameList(); void goToPrevGameList(); @@ -95,4 +101,5 @@ class ViewController : public GuiComponent bool mLockInput; State mState; + std::string mCurUIMode; }; diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 1397dee3b9..c72cf81eeb 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -13,12 +13,13 @@ std::vector settings_dont_save = boost::assign::list_of ("Debug") ("DebugGrid") ("DebugText") + ("ForceKiosk") + ("IgnoreGamelist") + ("HideConsole") ("ShowExit") - ("Windowed") + ("SplashScreen") ("VSync") - ("HideConsole") - ("IgnoreGamelist") - ("SplashScreen"); + ("Windowed"); Settings::Settings() { @@ -124,6 +125,9 @@ void Settings::setDefaults() mStringMap["AudioDevice"] = "Master"; #endif + mStringMap["UIMode"] = "Full"; + mStringMap["UIMode_passkey"] = "uuddlrlrba"; + mBoolMap["ForceKiosk"] = false; } template diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 4f6b8037da..89b2543ae7 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -14,6 +14,7 @@ Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCoun { mHelp = new HelpComponent(this); mBackgroundOverlay = new ImageComponent(this); + mPassKeyListener = new PassKeyListener; } Window::~Window() @@ -170,8 +171,11 @@ void Window::input(InputConfig* config, Input input) } else { - if(peekGui()) - this->peekGui()->input(config, input); + if (!mPassKeyListener->isUIModeChanged(config, input, this) && // check if UI mode has changed due to passphrase completion + peekGui()) + { + this->peekGui()->input(config, input); // this is where the majority of inputs will be consumed: the GuiComponent Stack + } } } @@ -435,3 +439,43 @@ void Window::startScreenSaver() mScreenSaver->renderScreenSaver(); } +bool Window::PassKeyListener::isUIModeChanged(InputConfig * config, Input input, Window* window) +{ + // This function reads the current input to listen for the passkey + // sequence to unlock the UI mode. The progress is saved in mPassKeyCounter + // supported sequence-inputs: u (up), d (down), l (left), r (right), a, b, x, y + // default passkeyseq = "uuddlrlrba", as defined in the setting 'UIMode_passkey'. + + if ((Settings::getInstance()->getString("UIMode") == "Full") || (!input.value)) + { + return false; // Already unlocked, or no keydown, nothing to do here. + } + + bool foundMatch = false; + + for (auto valstring : mInputVals) + { + if (config->isMappedTo(valstring, input) && + (this->mPassKeySequence[this->mPassKeyCounter] == valstring[0])) + { + this->mPassKeyCounter ++; + foundMatch = true; + } + } + + if (!foundMatch) + { + this->mPassKeyCounter = 0; // current input is incorrect, reset counter + } + + if (this->mPassKeyCounter == (this->mPassKeySequence.length())) + { + // When we have reached the end of the list, trigger UI_mode unlock + LOG(LogDebug) << " Window::PassKeyListener::isUIModeChanged(): Passkey sequence completed, switching UIMode to full"; + Settings::getInstance()->setString("UIMode", "Full"); + Settings::getInstance()->saveFile(); + this->mPassKeyCounter = 0; + return true; + } + return false; +} diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 75b78e6c5a..3cd363657c 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -1,9 +1,10 @@ #pragma once #include "GuiComponent.h" +#include "InputManager.h" +#include "Settings.h" #include #include "resources/Font.h" -#include "InputManager.h" class FileData; class HelpComponent; @@ -32,6 +33,20 @@ class Window virtual ~InfoPopup() {}; }; + class PassKeyListener { + public: + bool isUIModeChanged(InputConfig* config, Input input, Window* window); + PassKeyListener() + { + mPassKeySequence = Settings::getInstance()->getString("UIMode_passkey"); + mPassKeyCounter = 0; + } + private: + std::string mPassKeySequence; + int mPassKeyCounter; + const std::vector mInputVals = { "up", "down", "left", "right", "a", "b", "x", "y" }; + }; + Window(); ~Window(); @@ -79,6 +94,7 @@ class Window ScreenSaver* mScreenSaver; InfoPopup* mInfoPopup; bool mRenderScreenSaver; + PassKeyListener* mPassKeyListener; std::vector mGuiStack; From 8d4a69cacf9595546089b2b538bc88e81c6141d0 Mon Sep 17 00:00:00 2001 From: hex007 Date: Thu, 21 Sep 2017 10:44:00 -0700 Subject: [PATCH 162/603] Handle longclick in PS:Instant mode --- es-core/src/components/IList.h | 3 +++ es-core/src/guis/GuiDetectDevice.cpp | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index 5543fae067..41dcfc0a2e 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -7,6 +7,7 @@ #include "components/ImageComponent.h" #include "resources/Font.h" #include "Renderer.h" +#include "PowerSaver.h" enum CursorState { @@ -191,6 +192,8 @@ class IList : public GuiComponent bool listInput(int velocity) // a velocity of 0 = stop scrolling { + PowerSaver::setState(velocity == 0); + // generate an onCursorChanged event in the stopped state when the user lets go of the key if(velocity == 0 && mScrollVelocity != 0) onCursorChanged(CURSOR_STOPPED); diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index bf8e8e4cbe..b883885c10 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -1,6 +1,7 @@ #include "guis/GuiDetectDevice.h" #include "Window.h" #include "Renderer.h" +#include "PowerSaver.h" #include "resources/Font.h" #include "guis/GuiInputConfig.h" #include "components/TextComponent.h" @@ -74,9 +75,12 @@ void GuiDetectDevice::onSizeChanged() bool GuiDetectDevice::input(InputConfig* config, Input input) { + PowerSaver::pause(); + if(!mFirstRun && input.device == DEVICE_KEYBOARD && input.type == TYPE_KEY && input.value && input.id == SDLK_ESCAPE) { // cancel configuring + PowerSaver::resume(); delete this; return true; } @@ -109,6 +113,7 @@ void GuiDetectDevice::update(int deltaTime) { if(mDoneCallback) mDoneCallback(); + PowerSaver::resume(); delete this; // delete GUI element } else @@ -121,6 +126,7 @@ void GuiDetectDevice::update(int deltaTime) { // picked one! mWindow->pushGui(new GuiInputConfig(mWindow, mHoldingConfig, true, mDoneCallback)); + PowerSaver::resume(); delete this; } } From fecf345e1133fccec2e174f9b618b8c3772655e0 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 28 Sep 2017 08:34:45 +0100 Subject: [PATCH 163/603] added a note in the docs regarding git submodules --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index ecb5307e03..a17dcf6a67 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,20 @@ sudo apt-get install libsdl2-dev libboost-system-dev libboost-filesystem-dev lib libvlc-dev libvlccore-dev vlc-nox ``` +Note this Repository uses a git submodule - to checkout the source and all submodules, use + +```bash +git clone --recursive https://github.com/RetroPie/EmulationStation.git +``` + +or + +```bash +git clone https://github.com/RetroPie/EmulationStation.git +cd EmulationStation +git submodule init --update +``` + Then, generate and build the Makefile with CMake: ```bash cd YourEmulationStationDirectory From 0974f1c6c7d1d367149b4da53ffec431022205ab Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 28 Sep 2017 18:10:06 +0100 Subject: [PATCH 164/603] bump version to v2.6.4 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 6122b479d8..08159a007c 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 6 -#define PROGRAM_VERSION_MAINTENANCE 3 -#define PROGRAM_VERSION_STRING "2.6.3rp" +#define PROGRAM_VERSION_MAINTENANCE 4 +#define PROGRAM_VERSION_STRING "2.6.4rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,6,3\0" +#define RESOURCE_VERSION_STRING "2,6,4\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From dca648c160071caa0ad2af196eab8f747d6e9434 Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Thu, 14 Sep 2017 02:18:52 +0100 Subject: [PATCH 165/603] TextListComponent: rework onScroll function Modify onScroll so that AudioManager is initialized only when playback is necessary. Before this change, ViewController::preload() was initializing audio during startup for any theme that has the scroll sound, even if navigation sounds are disabled in the settings. --- es-app/src/components/TextListComponent.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 0aa078ac20..336cbac500 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -76,13 +76,11 @@ class TextListComponent : public IList inline void setSelectorOffsetY(float selectorOffsetY) { mSelectorOffsetY = selectorOffsetY; } inline void setSelectorColor(unsigned int color) { mSelectorColor = color; } inline void setSelectedColor(unsigned int color) { mSelectedColor = color; } - inline void setScrollSound(const std::shared_ptr& sound) { mScrollSound = sound; } inline void setColor(unsigned int id, unsigned int color) { mColors[id] = color; } - inline void setSound(const std::shared_ptr& sound) { mScrollSound = sound; } inline void setLineSpacing(float lineSpacing) { mLineSpacing = lineSpacing; } protected: - virtual void onScroll(int amt) { if(mScrollSound) mScrollSound->play(); } + virtual void onScroll(int amt) { if(!mScrollSound.empty()) Sound::get(mScrollSound)->play(); } virtual void onCursorChanged(const CursorState& state); private: @@ -105,7 +103,7 @@ class TextListComponent : public IList float mSelectorOffsetY; unsigned int mSelectorColor; unsigned int mSelectedColor; - std::shared_ptr mScrollSound; + std::string mScrollSound; static const unsigned int COLOR_ID_COUNT = 2; unsigned int mColors[COLOR_ID_COUNT]; @@ -354,7 +352,7 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c setSelectorHeight(selectorHeight); if(properties & SOUND && elem->has("scrollSound")) - setSound(Sound::get(elem->get("scrollSound"))); + mScrollSound = elem->get("scrollSound"); if(properties & ALIGNMENT) { From c08c24e615fc41f05e3ba437adaa64c5fe19665f Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Thu, 14 Sep 2017 02:26:33 +0100 Subject: [PATCH 166/603] Remove explicit calls to AudioManager::init() and fix deinit() behaviour Ensure that deinit() removes the current sInstance so that the next call to AudioManager::getInstance() will re-initialize audio correctly. Remove explicit calls to AudioManager::init() and instead rely on Sound::play() to initialize audio when needed. --- es-app/src/FileData.cpp | 3 +-- es-core/src/AudioManager.cpp | 1 + es-core/src/Sound.cpp | 2 ++ es-core/src/components/VideoPlayerComponent.cpp | 5 ----- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 892c701a35..f77756cd84 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -199,7 +199,6 @@ void FileData::launchGame(Window* window) window->init(); VolumeControl::getInstance()->init(); - AudioManager::getInstance()->init(); window->normalizeNextUpdate(); //update number of times the game has been launched @@ -274,4 +273,4 @@ FileData::SortType getSortTypeFromString(std::string desc) { } // if not found default to name, ascending return FileSorts::SortTypes.at(0); -} \ No newline at end of file +} diff --git a/es-core/src/AudioManager.cpp b/es-core/src/AudioManager.cpp index cbc0821ed6..e4e3dce127 100644 --- a/es-core/src/AudioManager.cpp +++ b/es-core/src/AudioManager.cpp @@ -106,6 +106,7 @@ void AudioManager::deinit() //completely tear down SDL audio. else SDL hogs audio resources and emulators might fail to start... SDL_CloseAudio(); SDL_QuitSubSystem(SDL_INIT_AUDIO); + sInstance = NULL; } void AudioManager::registerSound(std::shared_ptr & sound) diff --git a/es-core/src/Sound.cpp b/es-core/src/Sound.cpp index c915ea5448..22d17b9590 100644 --- a/es-core/src/Sound.cpp +++ b/es-core/src/Sound.cpp @@ -114,6 +114,8 @@ void Sound::play() if(!Settings::getInstance()->getBool("EnableSounds")) return; + AudioManager::getInstance(); + SDL_LockAudio(); if (playing) { diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index abeae844c2..b1aa98617b 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -191,11 +191,6 @@ void VideoPlayerComponent::stopVideo() int status; kill(mPlayerPid, SIGKILL); waitpid(mPlayerPid, &status, WNOHANG); - // Restart AudioManager - if (boost::starts_with(Settings::getInstance()->getString("OMXAudioDev").c_str(), "alsa")) - { - AudioManager::getInstance()->init(); - } mPlayerPid = -1; } } From 1bfcfb1f16dc4c16acc6335dd3ac498be899042c Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Thu, 14 Sep 2017 02:33:21 +0100 Subject: [PATCH 167/603] PowerSaver: close audio during PS when possible If SDL audio device is paused, deinit audio when PS mode kicks in so that full power savings can be achieved. --- es-core/src/PowerSaver.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/es-core/src/PowerSaver.cpp b/es-core/src/PowerSaver.cpp index cfa6488565..a7805ca71c 100644 --- a/es-core/src/PowerSaver.cpp +++ b/es-core/src/PowerSaver.cpp @@ -1,4 +1,5 @@ #include "PowerSaver.h" +#include "AudioManager.h" #include "Settings.h" #include @@ -17,6 +18,9 @@ void PowerSaver::init() int PowerSaver::getTimeout() { + if (SDL_GetAudioStatus() == SDL_AUDIO_PAUSED) + AudioManager::getInstance()->deinit(); + // Used only for SDL_WaitEventTimeout. Use `getMode()` for modes. return mRunningScreenSaver ? mWakeupTimeout : mScreenSaverTimeout; } From 35abc91d30b883e432463d59e07805a0814dbac5 Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Thu, 14 Sep 2017 04:45:28 +0100 Subject: [PATCH 168/603] PowerSaver: force-disable sounds for INSTANT profile --- es-app/src/guis/GuiMenu.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 05a7822893..76f2f0a26e 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -119,7 +119,16 @@ void GuiMenu::openSoundSettings() auto sounds_enabled = std::make_shared(mWindow); sounds_enabled->setState(Settings::getInstance()->getBool("EnableSounds")); s->addWithLabel("ENABLE NAVIGATION SOUNDS", sounds_enabled); - s->addSaveFunc([sounds_enabled] { Settings::getInstance()->setBool("EnableSounds", sounds_enabled->getState()); }); + s->addSaveFunc([sounds_enabled] { + if (sounds_enabled->getState() + && !Settings::getInstance()->getBool("EnableSounds") + && PowerSaver::getMode() == PowerSaver::INSTANT) + { + Settings::getInstance()->setString("PowerSaverMode", "default"); + PowerSaver::init(); + } + Settings::getInstance()->setBool("EnableSounds", sounds_enabled->getState()); + }); auto video_audio = std::make_shared(mWindow); video_audio->setState(Settings::getInstance()->getBool("VideoAudio")); @@ -300,6 +309,7 @@ void GuiMenu::openOtherSettings() if (Settings::getInstance()->getString("PowerSaverMode") != "instant" && power_saver->getSelected() == "instant") { Settings::getInstance()->setString("TransitionStyle", "instant"); Settings::getInstance()->setBool("MoveCarousel", false); + Settings::getInstance()->setBool("EnableSounds", false); } Settings::getInstance()->setString("PowerSaverMode", power_saver->getSelected()); PowerSaver::init(); From 98c170f8298f8ff2947fc0a1f7677cd05030dbab Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Thu, 14 Sep 2017 07:20:46 +0100 Subject: [PATCH 169/603] AudioManager: don't initialize when unnecessary If navigation sounds are disabled, don't initialize AudioManager unnecessarily. --- es-core/src/AudioManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/es-core/src/AudioManager.cpp b/es-core/src/AudioManager.cpp index e4e3dce127..735099bc8c 100644 --- a/es-core/src/AudioManager.cpp +++ b/es-core/src/AudioManager.cpp @@ -1,4 +1,5 @@ #include "AudioManager.h" +#include "Settings.h" #include #include "Log.h" @@ -62,7 +63,7 @@ AudioManager::~AudioManager() std::shared_ptr & AudioManager::getInstance() { //check if an AudioManager instance is already created, if not create one - if (sInstance == nullptr) { + if (sInstance == nullptr && Settings::getInstance()->getBool("EnableSounds")) { sInstance = std::shared_ptr(new AudioManager); } return sInstance; From d75510bde12945ce8d58029861c9d1330ff812e2 Mon Sep 17 00:00:00 2001 From: Markus Pointner Date: Sun, 3 Sep 2017 21:11:38 +0200 Subject: [PATCH 170/603] TheGamesDB scrapper should use GetGameList.php Previously GetGame.php was used, but GetGamesList.php is the "search" API call and more reliably returns the correct game. --- .../src/components/ScraperSearchComponent.cpp | 6 +- es-app/src/scrapers/GamesDBScraper.cpp | 68 +++++++++++++------ es-app/src/scrapers/GamesDBScraper.h | 13 +++- es-app/src/scrapers/Scraper.cpp | 8 ++- 4 files changed, 66 insertions(+), 29 deletions(-) diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index 89d9549315..736cbe1be2 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -231,11 +231,9 @@ void ScraperSearchComponent::onSearchDone(const std::vector mScraperResults = results; - const int end = results.size() > MAX_SCRAPER_RESULTS ? MAX_SCRAPER_RESULTS : results.size(); // at max display 5 - auto font = Font::get(FONT_SIZE_MEDIUM); unsigned int color = 0x777777FF; - if(end == 0) + if(results.empty()) { ComponentListRow row; row.addElement(std::make_shared(mWindow, "NO GAMES FOUND - SKIP", font, color), true); @@ -247,7 +245,7 @@ void ScraperSearchComponent::onSearchDone(const std::vector mGrid.resetCursor(); }else{ ComponentListRow row; - for(int i = 0; i < end; i++) + for(size_t i = 0; i < results.size(); i++) { row.elements.clear(); row.addElement(std::make_shared(mWindow, strToUpper(results.at(i).mdl.get("name")), font, color), true); diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 47d4aa2834..2a92e891f9 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -74,31 +74,28 @@ const std::map gamesdb_platformid_map = boost::assign:: void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, std::vector& results) { - std::string path = "thegamesdb.net/api/GetGame.php?"; + std::string path; bool usingGameID = false; std::string cleanName = params.nameOverride; - if (cleanName.empty()) + if (!cleanName.empty() && cleanName.substr(0,3) == "id:") { - cleanName = params.game->getCleanName(); - path += "name=" + HttpReq::urlEncode(cleanName); - } - else - { - if (cleanName.substr(0,3) == "id:") { - std::string gameID = cleanName.substr(3,-1); - path += "id=" + HttpReq::urlEncode(gameID); - usingGameID = true; - } - else { - path += "exactname=" + HttpReq::urlEncode(cleanName); - } + std::string gameID = cleanName.substr(3); + path = "thegamesdb.net/api/GetGame.php?id=" + HttpReq::urlEncode(gameID); + usingGameID = true; + }else{ + if (cleanName.empty()) + cleanName = params.game->getCleanName(); + path += "thegamesdb.net/api/GetGamesList.php?name=" + HttpReq::urlEncode(cleanName); } - if(params.system->getPlatformIds().empty() || usingGameID) + if(usingGameID) { - // no platform specified, we're done + // if we have the ID already, we don't need the GetGameList request requests.push(std::unique_ptr(new TheGamesDBRequest(results, path))); + }else if(params.system->getPlatformIds().empty()){ + // no platform specified, we're done + requests.push(std::unique_ptr(new TheGamesDBRequest(requests, results, path))); }else{ // go through the list, we need to split this into multiple requests // because TheGamesDB API either sucks or I don't know how to use it properly... @@ -116,7 +113,7 @@ void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std LOG(LogWarning) << "TheGamesDB scraper warning - no support for platform " << getPlatformName(*platformIt); } - requests.push(std::unique_ptr(new TheGamesDBRequest(results, path))); + requests.push(std::unique_ptr(new TheGamesDBRequest(requests, results, path))); } } } @@ -130,19 +127,27 @@ void TheGamesDBRequest::process(const std::unique_ptr& req, std::vector if(!parseResult) { std::stringstream ss; - ss << "GamesDBRequest - Error parsing XML. \n\t" << parseResult.description() << ""; + ss << "TheGamesDBRequest - Error parsing XML. \n\t" << parseResult.description() << ""; std::string err = ss.str(); setError(err); LOG(LogError) << err; return; } - pugi::xml_node data = doc.child("Data"); + if (isGameRequest()) + processGame(doc, results); + else + processList(doc, results); +} + +void TheGamesDBRequest::processGame(const pugi::xml_document& xmldoc, std::vector& results) +{ + pugi::xml_node data = xmldoc.child("Data"); std::string baseImageUrl = data.child("baseImgUrl").text().get(); pugi::xml_node game = data.child("Game"); - while(game && results.size() < MAX_SCRAPER_RESULTS) + if(game) { ScraperSearchResult result; @@ -179,6 +184,27 @@ void TheGamesDBRequest::process(const std::unique_ptr& req, std::vector } results.push_back(result); + } +} + +void TheGamesDBRequest::processList(const pugi::xml_document& xmldoc, std::vector& results) +{ + assert(mRequestQueue != nullptr); + + pugi::xml_node data = xmldoc.child("Data"); + pugi::xml_node game = data.child("Game"); + + // limit the number of results per platform, not in total. + // otherwise if the first platform returns >= 7 games + // but the second platform contains the relevant game, + // the relevant result would not be shown. + for(int i = 0; game && i < MAX_SCRAPER_RESULTS; i++) + { + std::string id = game.child("id").text().get(); + std::string path = "thegamesdb.net/api/GetGame.php?id=" + id; + + mRequestQueue->push(std::unique_ptr(new TheGamesDBRequest(results, path))); + game = game.next_sibling("Game"); } } diff --git a/es-app/src/scrapers/GamesDBScraper.h b/es-app/src/scrapers/GamesDBScraper.h index cf5f69ede4..f692b131aa 100644 --- a/es-app/src/scrapers/GamesDBScraper.h +++ b/es-app/src/scrapers/GamesDBScraper.h @@ -2,13 +2,24 @@ #include "scrapers/Scraper.h" +namespace pugi { class xml_document; } + void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, std::vector& results); class TheGamesDBRequest : public ScraperHttpRequest { public: - TheGamesDBRequest(std::vector& resultsWrite, const std::string& url) : ScraperHttpRequest(resultsWrite, url) {} + // ctor for a GetGameList request + TheGamesDBRequest(std::queue< std::unique_ptr >& requestsWrite, std::vector& resultsWrite, const std::string& url) : ScraperHttpRequest(resultsWrite, url), mRequestQueue(&requestsWrite) {} + // ctor for a GetGame request + TheGamesDBRequest(std::vector& resultsWrite, const std::string& url) : ScraperHttpRequest(resultsWrite, url), mRequestQueue(nullptr) {} + protected: void process(const std::unique_ptr& req, std::vector& results) override; + void processList(const pugi::xml_document& xmldoc, std::vector& results); + void processGame(const pugi::xml_document& xmldoc, std::vector& results); + bool isGameRequest() { return !mRequestQueue; } + + std::queue< std::unique_ptr >* mRequestQueue; }; diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index 5bc9b0ef67..72ec9e6d4a 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -43,13 +43,15 @@ void ScraperSearchHandle::update() if(!mRequestQueue.empty()) { - auto& req = mRequestQueue.front(); - AsyncHandleStatus status = req->status(); + // a request can add more requests to the queue while running, + // so be careful with references into the queue + auto& req = *(mRequestQueue.front()); + AsyncHandleStatus status = req.status(); if(status == ASYNC_ERROR) { // propegate error - setError(req->getStatusString()); + setError(req.getStatusString()); // empty our queue while(!mRequestQueue.empty()) From 24f1b969bf258022304ecc059bb9e34f7d958b3e Mon Sep 17 00:00:00 2001 From: jrassa Date: Sat, 30 Sep 2017 23:17:58 -0400 Subject: [PATCH 171/603] add support for default image path in themes --- THEMES.md | 2 ++ es-app/src/views/SystemView.cpp | 12 +++++++----- es-core/src/ThemeData.cpp | 1 + es-core/src/components/ImageComponent.cpp | 18 ++++++++++++++++-- es-core/src/components/ImageComponent.h | 4 ++++ 5 files changed, 30 insertions(+), 7 deletions(-) diff --git a/THEMES.md b/THEMES.md index e6845c8522..504730ce81 100644 --- a/THEMES.md +++ b/THEMES.md @@ -523,6 +523,8 @@ Can be created as an extra. - Point around which the image will be rotated. Defaults to `0.5 0.5`. * `path` - type: PATH. - Path to the image file. Most common extensions are supported (including .jpg, .png, and unanimated .gif). +* `default` - type: PATH. + - Path to default image file. Default image will be displayed when selected game does not have an image. * `tile` - type: BOOLEAN. - If true, the image will be tiled instead of stretched to fit its size. Useful for backgrounds. * `color` - type: COLOR. diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index b6f4090622..f2ef3da1aa 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -42,15 +42,17 @@ void SystemView::populate() e.object = *it; // make logo - if(theme->getElement("system", "logo", "image")) + const ThemeData::ThemeElement* logoElem = theme->getElement("system", "logo", "image"); + if(logoElem) { - std::string path = theme->getElement("system", "logo", "image")->get("path"); - - if(!path.empty() && ResourceManager::getInstance()->fileExists(path)) + std::string path = logoElem->get("path"); + std::string defaultPath = logoElem->has("default") ? logoElem->get("default") : ""; + if((!path.empty() && ResourceManager::getInstance()->fileExists(path)) + || (!defaultPath.empty() && ResourceManager::getInstance()->fileExists(defaultPath))) { ImageComponent* logo = new ImageComponent(mWindow, false, false); logo->setMaxSize(mCarousel.logoSize * mCarousel.logoScale); - logo->applyTheme((*it)->getTheme(), "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); + logo->applyTheme(theme, "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); e.data.logo = std::shared_ptr(logo); } diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index dc5c6deae7..5cecba10dc 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -36,6 +36,7 @@ std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign:: ("rotation", FLOAT) ("rotationOrigin", NORMALIZED_PAIR) ("path", PATH) + ("default", PATH) ("tile", BOOLEAN) ("color", COLOR) ("zIndex", FLOAT))) diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 7ab8f9c90b..d39f5916c2 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -93,12 +93,22 @@ void ImageComponent::onSizeChanged() updateVertices(); } +void ImageComponent::setDefaultImage(std::string path) +{ + mDefaultPath = path; +} + void ImageComponent::setImage(std::string path, bool tile) { if(path.empty() || !ResourceManager::getInstance()->fileExists(path)) - mTexture.reset(); - else + { + if(mDefaultPath.empty() || !ResourceManager::getInstance()->fileExists(mDefaultPath)) + mTexture.reset(); + else + mTexture = TextureResource::get(mDefaultPath, tile, mForceLoad, mDynamic); + } else { mTexture = TextureResource::get(path, tile, mForceLoad, mDynamic); + } resize(); } @@ -334,6 +344,10 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s if((properties & ORIGIN || (properties & POSITION && properties & ThemeFlags::SIZE)) && elem->has("origin")) setOrigin(elem->get("origin")); + if(elem->has("default")) { + setDefaultImage(elem->get("default")); + } + if(properties & PATH && elem->has("path")) { bool tile = (elem->has("tile") && elem->get("tile")); diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 2ed005fc2d..98087ba0e4 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -15,6 +15,8 @@ class ImageComponent : public GuiComponent ImageComponent(Window* window, bool forceLoad = false, bool dynamic = true); virtual ~ImageComponent(); + void setDefaultImage(std::string path); + //Loads the image at the given filepath. Will tile if tile is true (retrieves texture as tiling, creates vertices accordingly). void setImage(std::string path, bool tile = false); //Loads an image from memory. @@ -77,6 +79,8 @@ class ImageComponent : public GuiComponent unsigned int mColorShift; + std::string mDefaultPath; + std::shared_ptr mTexture; unsigned char mFadeOpacity; bool mFading; From d6adf6b71eb25c1e7efb414a056208e3e5c0d514 Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Wed, 4 Oct 2017 04:19:02 +0000 Subject: [PATCH 172/603] CMake: use correct Raspberry Pi library names & fix generic GLES support * For BCMHOST build, use brcmEGL / brcmGLESv2 libraries, and don't look at Mesa includes (so libraspberrypi-dev and libgles*-mesa-dev can coexist). * If overridden via -DGLES=On, don't present vendor includes to build to make absolutely sure that the Mesa includes are used. Fixes stretch vendor library building & generic Mesa GLES compatibility. --- CMake/Packages/FindOpenGLES.cmake | 42 ++++++++++++++++++++----------- CMakeLists.txt | 2 +- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/CMake/Packages/FindOpenGLES.cmake b/CMake/Packages/FindOpenGLES.cmake index 535cdb15a4..ac3e943e2f 100644 --- a/CMake/Packages/FindOpenGLES.cmake +++ b/CMake/Packages/FindOpenGLES.cmake @@ -42,21 +42,33 @@ ELSE (WIN32) ELSE(APPLE) - FIND_PATH(OPENGLES_INCLUDE_DIR GLES/gl.h - /usr/openwin/share/include - /opt/graphics/OpenGL/include /usr/X11R6/include - /usr/include - /opt/vc/include - ) - - FIND_LIBRARY(OPENGLES_gl_LIBRARY - NAMES GLES_CM GLESv1_CM - PATHS /opt/graphics/OpenGL/lib - /usr/openwin/lib - /usr/shlib /usr/X11R6/lib - /usr/lib - /opt/vc/lib - ) + IF (DEFINED BCMHOST) + FIND_PATH(OPENGLES_INCLUDE_DIR GLES/gl.h + /opt/vc/include + NO_DEFAULT_PATH + ) + + FIND_LIBRARY(OPENGLES_gl_LIBRARY + NAMES brcmGLESv2 + PATHS /opt/vc/lib + ) + + ELSE (DEFINED BCMHOST) + + FIND_PATH(OPENGLES_INCLUDE_DIR GLES/gl.h + /usr/openwin/share/include + /opt/graphics/OpenGL/include /usr/X11R6/include + /usr/include + ) + + FIND_LIBRARY(OPENGLES_gl_LIBRARY + NAMES GLES_CM GLESv1_CM + PATHS /opt/graphics/OpenGL/lib + /usr/openwin/lib + /usr/shlib /usr/X11R6/lib + /usr/lib + ) + ENDIF (DEFINED BCMHOST) # On Unix OpenGL most certainly always requires X11. # Feel free to tighten up these conditions if you don't diff --git a/CMakeLists.txt b/CMakeLists.txt index f0b8f75bc2..8865c9663e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -178,7 +178,7 @@ endif() if(DEFINED BCMHOST) LIST(APPEND COMMON_LIBRARIES bcm_host - EGL + brcmEGL ${OPENGLES_LIBRARIES} ) else() From a5655ed040fb5109bbe2affa72f71fc5c3fd0471 Mon Sep 17 00:00:00 2001 From: pjft Date: Sat, 7 Oct 2017 08:58:09 +0100 Subject: [PATCH 173/603] Second stab at normalizing volume scale for OMX Player --- es-core/src/components/VideoPlayerComponent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index abeae844c2..df79149915 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -116,7 +116,7 @@ void VideoPlayerComponent::startVideo() else { float percentVolume = (float)VolumeControl::getInstance()->getVolume(); - int OMXVolume = (int)(log(percentVolume/100)*2000); + int OMXVolume = (int)((percentVolume-98)*105); argv[8] = std::to_string(OMXVolume).c_str(); } From 2ee3d6313a298ac3a7ecc0639f7aa6e428292af5 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Fri, 13 Oct 2017 16:46:07 +0100 Subject: [PATCH 174/603] bump version to v2.6.5 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 08159a007c..6dbd22454c 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -4,10 +4,10 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 6 -#define PROGRAM_VERSION_MAINTENANCE 4 -#define PROGRAM_VERSION_STRING "2.6.4rp" +#define PROGRAM_VERSION_MAINTENANCE 5 +#define PROGRAM_VERSION_STRING "2.6.5rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,6,4\0" +#define RESOURCE_VERSION_STRING "2,6,5\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE From 7bd68501a1fce882b632ec43d7fc0b1d83c26e51 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Tue, 17 Oct 2017 22:05:12 +0200 Subject: [PATCH 175/603] Support FreeImage as a static library --- es-app/src/main.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 9f89b38d46..a64a1ad69c 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -21,6 +21,7 @@ #include "ScraperCmdLine.h" #include #include +#include #ifdef WIN32 #include @@ -222,6 +223,11 @@ int main(int argc, char* argv[]) } #endif + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_Initialise(); +#endif + //if ~/.emulationstation doesn't exist and cannot be created, bail if(!verifyHomeFolderExists()) return 1; @@ -384,6 +390,11 @@ int main(int argc, char* argv[]) CollectionSystemManager::deinit(); SystemData::deleteSystems(); + // call this ONLY when linking with FreeImage as a static library +#ifdef FREEIMAGE_LIB + FreeImage_DeInitialise(); +#endif + LOG(LogInfo) << "EmulationStation cleanly shutting down."; return 0; From fd40e84ba54a28e4749c653bca72880802ce04aa Mon Sep 17 00:00:00 2001 From: "D. Polders" Date: Wed, 18 Oct 2017 16:19:32 +0200 Subject: [PATCH 176/603] Fix build warnings (mostly adding explicit type casting) --- es-app/src/FileFilterIndex.cpp | 2 +- es-app/src/MetaData.cpp | 2 +- es-app/src/SystemData.cpp | 7 +++-- es-app/src/SystemScreenSaver.cpp | 6 ++-- es-app/src/guis/GuiInfoPopup.cpp | 4 +-- es-app/src/guis/GuiMetaDataEd.cpp | 4 +-- es-app/src/main.cpp | 2 +- es-app/src/views/SystemView.cpp | 29 +++++++++-------- es-app/src/views/ViewController.cpp | 31 ------------------- es-app/src/views/ViewController.h | 1 - .../src/views/gamelist/BasicGameListView.cpp | 2 +- .../src/views/gamelist/VideoGameListView.cpp | 4 +-- es-core/src/GuiComponent.cpp | 2 +- es-core/src/GuiComponent.h | 2 +- es-core/src/components/ImageComponent.cpp | 2 +- es-core/src/components/MenuComponent.cpp | 2 +- es-core/src/components/TextEditComponent.h | 2 +- es-core/src/components/VideoComponent.cpp | 2 -- es-core/src/components/VideoVlcComponent.cpp | 12 +++---- es-core/src/resources/TextureData.cpp | 4 +-- 20 files changed, 45 insertions(+), 77 deletions(-) diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index 0f35db14b6..dd34c1418a 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -131,7 +131,7 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ } catch (int e) { - LOG(LogError) << "Error parsing Rating (invalid value, expected decimal): " << ratingString; + LOG(LogError) << "Error parsing Rating (invalid value, exception nr.): " << ratingString << ", " << e; } } } diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 2eb1e5effe..56ae351505 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -151,7 +151,7 @@ bool MetaDataList::isDefault() { const std::vector& mdd = getMDD(); - for (int i = 1; i < mMap.size(); i++) { + for (unsigned int i = 1; i < mMap.size(); i++) { if (mMap.at(mdd[i].key) != mdd[i].defaultValue) return false; } diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 29e09e975e..f71e1fb574 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -405,7 +405,7 @@ SystemData* SystemData::getRandomSystem() } // get random number in range - int target = std::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); + int target = (int) std::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); for (auto it = sSystemVector.begin(); it != sSystemVector.end(); it++) { if ((*it)->isGameSystem()) @@ -420,6 +420,9 @@ SystemData* SystemData::getRandomSystem() } } } + + // if we end up here, there is no valid system + return NULL; } FileData* SystemData::getRandomGame() @@ -430,7 +433,7 @@ FileData* SystemData::getRandomGame() // get random number in range if (total == 0) return NULL; - target = std::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); + target = (int) std::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); return list.at(target); } diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 905ff8b57d..8c5f85f187 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -99,7 +99,7 @@ void SystemScreenSaver::startScreenSaver() #endif mVideoScreensaver->setOrigin(0.5f, 0.5f); - mVideoScreensaver->setPosition(Renderer::getScreenWidth()/2, Renderer::getScreenHeight()/2); + mVideoScreensaver->setPosition(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f); if (Settings::getInstance()->getBool("StretchVideoOnScreenSaver")) { @@ -148,7 +148,7 @@ void SystemScreenSaver::startScreenSaver() mImageScreensaver->setImage(path); mImageScreensaver->setOrigin(0.5f, 0.5f); - mImageScreensaver->setPosition(Renderer::getScreenWidth()/2, Renderer::getScreenHeight()/2); + mImageScreensaver->setPosition(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f); if (Settings::getInstance()->getBool("SlideshowScreenSaverStretch")) { @@ -230,7 +230,7 @@ void SystemScreenSaver::renderScreenSaver() { if (mImageScreensaver->hasImage()) { - mImageScreensaver->setOpacity(255-mOpacity); + mImageScreensaver->setOpacity(255- (unsigned char) (mOpacity * 255)); Eigen::Affine3f transform = Eigen::Affine3f::Identity(); mImageScreensaver->render(transform); diff --git a/es-app/src/guis/GuiInfoPopup.cpp b/es-app/src/guis/GuiInfoPopup.cpp index 7fd78fd183..08d2418277 100644 --- a/es-app/src/guis/GuiInfoPopup.cpp +++ b/es-app/src/guis/GuiInfoPopup.cpp @@ -32,8 +32,8 @@ GuiInfoPopup::GuiInfoPopup(Window* window, std::string message, int duration) : } // add a padding to the box - int paddingX = Renderer::getScreenWidth() * 0.03f; - int paddingY = Renderer::getScreenHeight() * 0.02f; + int paddingX = (int) (Renderer::getScreenWidth() * 0.03f); + int paddingY = (int) (Renderer::getScreenHeight() * 0.02f); mSize[0] = mSize.x() + paddingX; mSize[1] = mSize.y() + paddingY; diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index 17070cc917..0479afdaea 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -152,8 +152,8 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mButtons = makeButtonGrid(mWindow, buttons); mGrid.setEntry(mButtons, Vector2i(0, 2), true, false); - // resize + center - float width = std::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); + // resize + center + float width = (float) std::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); setSize(width, Renderer::getScreenHeight() * 0.82f); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); } diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 9f89b38d46..cf5a7a2b60 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -314,7 +314,7 @@ int main(int argc, char* argv[]) while(running) { SDL_Event event; - bool ps_standby = PowerSaver::getState() && SDL_GetTicks() - ps_time > PowerSaver::getMode(); + bool ps_standby = PowerSaver::getState() && (int) SDL_GetTicks() - ps_time > PowerSaver::getMode(); if(ps_standby ? SDL_WaitEventTimeout(&event, PowerSaver::getTimeout()) : SDL_PollEvent(&event)) { diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index f2ef3da1aa..6e28a46b1d 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -172,7 +172,6 @@ bool SystemView::input(InputConfig* config, Input input) // get random system // go to system setCursor(SystemData::getRandomSystem()); - //ViewController::get()->goToRandomGame(); return true; } }else{ @@ -430,36 +429,36 @@ void SystemView::renderCarousel(const Eigen::Affine3f& trans) switch (mCarousel.type) { case VERTICAL_WHEEL: - yOff = (mCarousel.size.y() - mCarousel.logoSize.y()) / 2 - (mCamOffset * logoSpacing[1]); + yOff = (mCarousel.size.y() - mCarousel.logoSize.y()) / 2.f - (mCamOffset * logoSpacing[1]); if (mCarousel.logoAlignment == ALIGN_LEFT) - xOff = mCarousel.logoSize.x() / 10; + xOff = mCarousel.logoSize.x() / 10.f; else if (mCarousel.logoAlignment == ALIGN_RIGHT) - xOff = mCarousel.size.x() - (mCarousel.logoSize.x() * 1.1); + xOff = mCarousel.size.x() - (mCarousel.logoSize.x() * 1.1f); else - xOff = (mCarousel.size.x() - mCarousel.logoSize.x()) / 2; + xOff = (mCarousel.size.x() - mCarousel.logoSize.x()) / 2.f; break; case VERTICAL: logoSpacing[1] = ((mCarousel.size.y() - (mCarousel.logoSize.y() * mCarousel.maxLogoCount)) / (mCarousel.maxLogoCount)) + mCarousel.logoSize.y(); - yOff = (mCarousel.size.y() - mCarousel.logoSize.y()) / 2 - (mCamOffset * logoSpacing[1]); + yOff = (mCarousel.size.y() - mCarousel.logoSize.y()) / 2.f - (mCamOffset * logoSpacing[1]); if (mCarousel.logoAlignment == ALIGN_LEFT) - xOff = mCarousel.logoSize.x() / 10; + xOff = mCarousel.logoSize.x() / 10.f; else if (mCarousel.logoAlignment == ALIGN_RIGHT) - xOff = mCarousel.size.x() - (mCarousel.logoSize.x() * 1.1); + xOff = mCarousel.size.x() - (mCarousel.logoSize.x() * 1.1f); else xOff = (mCarousel.size.x() - mCarousel.logoSize.x()) / 2; break; case HORIZONTAL: default: logoSpacing[0] = ((mCarousel.size.x() - (mCarousel.logoSize.x() * mCarousel.maxLogoCount)) / (mCarousel.maxLogoCount)) + mCarousel.logoSize.x(); - xOff = (mCarousel.size.x() - mCarousel.logoSize.x()) / 2 - (mCamOffset * logoSpacing[0]); + xOff = (mCarousel.size.x() - mCarousel.logoSize.x()) / 2.f - (mCamOffset * logoSpacing[0]); if (mCarousel.logoAlignment == ALIGN_TOP) - yOff = mCarousel.logoSize.y() / 10; + yOff = mCarousel.logoSize.y() / 10.f; else if (mCarousel.logoAlignment == ALIGN_BOTTOM) - yOff = mCarousel.size.y() - (mCarousel.logoSize.y() * 1.1); + yOff = mCarousel.size.y() - (mCarousel.logoSize.y() * 1.1f); else - yOff = (mCarousel.size.y() - mCarousel.logoSize.y()) / 2; + yOff = (mCarousel.size.y() - mCarousel.logoSize.y()) / 2.f; break; } @@ -489,11 +488,11 @@ void SystemView::renderCarousel(const Eigen::Affine3f& trans) float distance = i - mCamOffset; - float scale = 1.0 + ((mCarousel.logoScale - 1.0) * (1 - fabs(distance))); + float scale = 1.0f + ((mCarousel.logoScale - 1.0f) * (1.0f - fabs(distance))); scale = std::min(mCarousel.logoScale, std::max(1.0f, scale)); scale /= mCarousel.logoScale; - int opacity = round(0x80 + ((0xFF - 0x80) * (1 - fabs(distance)))); + int opacity = (int) round(0x80 + ((0xFF - 0x80) * (1.0f - fabs(distance)))); opacity = std::max((int) 0x80, opacity); const std::shared_ptr &comp = mEntries.at(index).data.logo; @@ -623,7 +622,7 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) if (elem->has("logoSize")) mCarousel.logoSize = elem->get("logoSize").cwiseProduct(mSize); if (elem->has("maxLogoCount")) - mCarousel.maxLogoCount = std::round(elem->get("maxLogoCount")); + mCarousel.maxLogoCount = (int) std::round(elem->get("maxLogoCount")); if (elem->has("zIndex")) mCarousel.zIndex = elem->get("zIndex"); if (elem->has("logoRotation")) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index abba8b3806..689f83d4f5 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -119,37 +119,6 @@ void ViewController::goToGameList(SystemData* system) playViewTransition(); } -void ViewController::goToRandomGame() -{ - unsigned int total = 0; - for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) - { - if ((*it)->isGameSystem()) - total += (*it)->getDisplayedGameCount(); - } - - // get random number in range - int target = std::round(((double)std::rand() / (double)RAND_MAX) * total); - - for (auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) - { - if ((*it)->isGameSystem()) - { - if ((target - (int)(*it)->getDisplayedGameCount()) >= 0) - { - target -= (int)(*it)->getDisplayedGameCount(); - } - else - { - goToGameList(*it); - std::vector list = (*it)->getRootFolder()->getFilesRecursive(GAME, true); - getGameListView(*it)->setCursor(list.at(target)); - return; - } - } - } -} - void ViewController::playViewTransition() { Eigen::Vector3f target(Eigen::Vector3f::Identity()); diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 1b93fc5ed0..124b98e249 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -36,7 +36,6 @@ class ViewController : public GuiComponent void goToGameList(SystemData* system); void goToSystemView(SystemData* system); void goToStart(); - void goToRandomGame(); void onFileChanged(FileData* file, FileChangeType change); diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index b025a4fc61..0a79250d4d 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -111,7 +111,7 @@ void BasicGameListView::remove(FileData *game, bool deleteFile) { std::vector siblings = parent->getChildrenListToDisplay(); auto gameIter = std::find(siblings.begin(), siblings.end(), game); - auto gamePos = std::distance(siblings.begin(), gameIter); + unsigned int gamePos = std::distance(siblings.begin(), gameIter); if (gameIter != siblings.end()) { if ((gamePos + 1) < siblings.size()) diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 0813098db5..729bc1c3d9 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -320,8 +320,8 @@ void VideoGameListView::updateInfoPanel() void VideoGameListView::launch(FileData* game) { - float screenWidth = Renderer::getScreenWidth(); - float screenHeight = Renderer::getScreenHeight(); + float screenWidth = (float) Renderer::getScreenWidth(); + float screenHeight = (float) Renderer::getScreenHeight(); Eigen::Vector3f target(screenWidth / 2.0f, screenHeight / 2.0f, 0); diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 43a79b41ac..358c4f5329 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -200,7 +200,7 @@ void GuiComponent::clearChildren() void GuiComponent::sortChildren() { - std:stable_sort(mChildren.begin(), mChildren.end(), [](GuiComponent* a, GuiComponent* b) { + std::stable_sort(mChildren.begin(), mChildren.end(), [](GuiComponent* a, GuiComponent* b) { return b->getZIndex() > a->getZIndex(); }); } diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 9fa587aeb1..7bdec4f159 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -60,7 +60,7 @@ class GuiComponent float getRotation() const; void setRotation(float rotation); - inline void setRotationDegrees(float rotation) { setRotation(rotation * M_PI / 180); } + inline void setRotationDegrees(float rotation) { setRotation((float) (rotation * M_PI / 180)); } float getScale() const; void setScale(float scale); diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index d39f5916c2..77f0c6657a 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -17,7 +17,7 @@ Eigen::Vector2i ImageComponent::getTextureSize() const ImageComponent::ImageComponent(Window* window, bool forceLoad, bool dynamic) : GuiComponent(window), mTargetIsMax(false), mFlipX(false), mFlipY(false), mTargetSize(0, 0), mColorShift(0xFFFFFFFF), - mForceLoad(forceLoad), mDynamic(dynamic), mFadeOpacity(0.0f), mFading(false) + mForceLoad(forceLoad), mDynamic(dynamic), mFadeOpacity(0), mFading(false) { updateColors(); } diff --git a/es-core/src/components/MenuComponent.cpp b/es-core/src/components/MenuComponent.cpp index 4b33cc08dd..68245d4853 100644 --- a/es-core/src/components/MenuComponent.cpp +++ b/es-core/src/components/MenuComponent.cpp @@ -63,7 +63,7 @@ void MenuComponent::updateSize() } } - float width = std::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); + float width = (float) std::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); setSize(width, height); } diff --git a/es-core/src/components/TextEditComponent.h b/es-core/src/components/TextEditComponent.h index 56179af1a8..394c048ba4 100644 --- a/es-core/src/components/TextEditComponent.h +++ b/es-core/src/components/TextEditComponent.h @@ -49,7 +49,7 @@ class TextEditComponent : public GuiComponent std::string mText; bool mFocused; bool mEditing; - int mCursor; // cursor position in characters + unsigned int mCursor; // cursor position in characters int mCursorRepeatTimer; int mCursorRepeatDir; diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 38cda4f95c..b942f2e03f 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -155,8 +155,6 @@ void VideoComponent::setOpacity(unsigned char opacity) void VideoComponent::render(const Eigen::Affine3f& parentTrans) { - float x, y; - Eigen::Affine3f trans = parentTrans * getTransform(); GuiComponent::renderChildren(trans); diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index c031336c68..8a67de8d1d 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -319,14 +319,14 @@ void VideoVlcComponent::startVideo() if(resizeScale.x() < resizeScale.y()) { - mVideoWidth *= resizeScale.x(); - mVideoHeight *= resizeScale.x(); + mVideoWidth = (unsigned int) (mVideoWidth * resizeScale.x()); + mVideoHeight = (unsigned int) (mVideoHeight * resizeScale.x()); }else{ - mVideoWidth *= resizeScale.y(); - mVideoHeight *= resizeScale.y(); + mVideoWidth = (unsigned int) (mVideoWidth * resizeScale.y()); + mVideoHeight = (unsigned int) (mVideoHeight * resizeScale.y()); } - mVideoHeight = round(mVideoHeight); - mVideoWidth = round(mVideoWidth); + mVideoHeight = (unsigned int) round(mVideoHeight); + mVideoWidth = (unsigned int) round(mVideoWidth); } } #endif diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index 15a3da116e..f614e0ad81 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -105,8 +105,8 @@ bool TextureData::initImageFromMemory(const unsigned char* fileData, size_t leng return false; } - mSourceWidth = width; - mSourceHeight = height; + mSourceWidth = (float) width; + mSourceHeight = (float) height; mScalable = false; return initFromRGBA(imageRGBA.data(), width, height); From cd2f2ee42b911711db6bd6e0276bea494a389e88 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 23 Oct 2017 01:04:17 +0200 Subject: [PATCH 177/603] Use local game art ( image, marquee and video ) from romfolder/images if the gamelist didn't specify a path --- es-app/src/FileData.cpp | 87 +++++++++++++++++-- es-app/src/FileData.h | 7 +- .../views/gamelist/DetailedGameListView.cpp | 2 +- .../src/views/gamelist/VideoGameListView.cpp | 30 +------ 4 files changed, 87 insertions(+), 39 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 892c701a35..9fa60a3438 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -43,12 +43,32 @@ std::string FileData::getCleanName() const return removeParenthesis(this->getDisplayName()); } -const std::string& FileData::getThumbnailPath() const +const std::string FileData::getThumbnailPath() const { - if(!metadata.get("thumbnail").empty()) - return metadata.get("thumbnail"); - else - return metadata.get("image"); + std::string thumbnail = metadata.get("thumbnail"); + + // no thumbnail, try image + if(thumbnail.empty()) + { + thumbnail = metadata.get("image"); + + // no image, try to use local image + if(thumbnail.empty()) + { + const char* extList[2] = { ".png", ".jpg" }; + for(int i = 0; i < 2; i++) + { + if(thumbnail.empty()) + { + std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-image" + extList[i]; + if(boost::filesystem::exists(path)) + thumbnail = path; + } + } + } + } + + return thumbnail; } const std::string& FileData::getName() @@ -76,14 +96,63 @@ const std::vector& FileData::getChildrenListToDisplay() { } } -const std::string& FileData::getVideoPath() const +const std::string FileData::getVideoPath() const +{ + std::string video = metadata.get("video"); + + // no video, try to use local video + if(video.empty()) + { + std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-video.mp4"; + if(boost::filesystem::exists(path)) + video = path; + } + + return video; +} + +const std::string FileData::getMarqueePath() const { - return metadata.get("video"); + std::string marquee = metadata.get("marquee"); + + // no marquee, try to use local marquee + if(marquee.empty()) + { + const char* extList[2] = { ".png", ".jpg" }; + for(int i = 0; i < 2; i++) + { + if(marquee.empty()) + { + std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-marquee" + extList[i]; + if(boost::filesystem::exists(path)) + marquee = path; + } + } + } + + return marquee; } -const std::string& FileData::getMarqueePath() const +const std::string FileData::getImagePath() const { - return metadata.get("marquee"); + std::string image = metadata.get("image"); + + // no image, try to use local image + if(image.empty()) + { + const char* extList[2] = { ".png", ".jpg" }; + for(int i = 0; i < 2; i++) + { + if(image.empty()) + { + std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-image" + extList[i]; + if(boost::filesystem::exists(path)) + image = path; + } + } + } + + return image; } std::vector FileData::getFilesRecursive(unsigned int typeMask, bool displayedOnly) const diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 0ce34f9bb2..39c271a790 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -43,9 +43,10 @@ class FileData inline const std::vector& getChildren() const { return mChildren; } inline SystemData* getSystem() const { return mSystem; } inline SystemEnvironmentData* getSystemEnvData() const { return mEnvData; } - virtual const std::string& getThumbnailPath() const; - virtual const std::string& getVideoPath() const; - virtual const std::string& getMarqueePath() const; + virtual const std::string getThumbnailPath() const; + virtual const std::string getVideoPath() const; + virtual const std::string getMarqueePath() const; + virtual const std::string getImagePath() const; const std::vector& getChildrenListToDisplay(); std::vector getFilesRecursive(unsigned int typeMask, bool displayedOnly = false) const; diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 9d5d950029..dfad3478b7 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -194,7 +194,7 @@ void DetailedGameListView::updateInfoPanel() //mDescription.setText(""); fadingOut = true; }else{ - mImage.setImage(file->metadata.get("image")); + mImage.setImage(file->getImagePath()); mDescription.setText(file->metadata.get("desc")); mDescContainer.reset(); diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 729bc1c3d9..62f66b9fe6 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -240,37 +240,15 @@ void VideoGameListView::updateInfoPanel() fadingOut = true; }else{ - std::string video_path; - std::string marquee_path; - std::string thumbnail_path; - video_path = file->getVideoPath(); - marquee_path = file->getMarqueePath(); - thumbnail_path = file->getThumbnailPath(); - - if (!video_path.empty() && (video_path[0] == '~')) - { - video_path.erase(0, 1); - video_path.insert(0, getHomePath()); - } - if (!marquee_path.empty() && (marquee_path[0] == '~')) - { - marquee_path.erase(0, 1); - marquee_path.insert(0, getHomePath()); - } - if (!thumbnail_path.empty() && (thumbnail_path[0] == '~')) - { - thumbnail_path.erase(0, 1); - thumbnail_path.insert(0, getHomePath()); - } - if (!mVideo->setVideo(video_path)) + if (!mVideo->setVideo(file->getVideoPath())) { mVideo->setDefaultVideo(); } mVideoPlaying = true; - mVideo->setImage(thumbnail_path); - mMarquee.setImage(marquee_path); - mImage.setImage(thumbnail_path); + mVideo->setImage(file->getThumbnailPath()); + mMarquee.setImage(file->getMarqueePath()); + mImage.setImage(file->getThumbnailPath()); mDescription.setText(file->metadata.get("desc")); mDescContainer.reset(); From ee4d0d95fa0cf99912fa03d4240b917fc01e073d Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 23 Oct 2017 14:43:06 +0200 Subject: [PATCH 178/603] Fix vsync off, SDL_GL_SetSwapInterval(0) is not always default --- es-core/src/Renderer_init_sdlgl.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/es-core/src/Renderer_init_sdlgl.cpp b/es-core/src/Renderer_init_sdlgl.cpp index b34e066646..f064223039 100644 --- a/es-core/src/Renderer_init_sdlgl.cpp +++ b/es-core/src/Renderer_init_sdlgl.cpp @@ -110,6 +110,8 @@ namespace Renderer if(SDL_GL_SetSwapInterval(-1) != 0 && SDL_GL_SetSwapInterval(1) != 0) LOG(LogWarning) << "Tried to enable vsync, but failed! (" << SDL_GetError() << ")"; } + else + SDL_GL_SetSwapInterval(0); return true; } From 294aeaad3fd40c279c41738bf8ad9a7061785ee9 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 21 Oct 2017 17:13:40 +0200 Subject: [PATCH 179/603] Add windows support to isHidden --- es-app/src/SystemData.cpp | 19 +++++++------------ es-app/src/main.cpp | 2 -- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index f71e1fb574..ff00963325 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -63,20 +63,17 @@ void SystemData::setIsGameSystemStatus() mIsGameSystem = (mName != "retropie"); } -#ifndef WIN32 -// test to see if a file is hidden in *nix (dot-prefixed) -// could be expanded to check for Windows hidden attribute +// test to see if a file is hidden bool isHidden(const fs::path &filePath) { +#ifdef WIN32 + const DWORD Attributes = GetFileAttributes(filePath.generic_string().c_str()); + return (Attributes != INVALID_FILE_ATTRIBUTES) && (Attributes & FILE_ATTRIBUTE_HIDDEN); +#else fs::path::string_type fileName = filePath.filename().string(); - if(fileName[0] == '.') - { - return true; - } - - return false; -} + return fileName[0] == '.'; #endif +} void SystemData::populateFolder(FileData* folder) { @@ -121,11 +118,9 @@ void SystemData::populateFolder(FileData* folder) isGame = false; if(std::find(mEnvData->mSearchExtensions.begin(), mEnvData->mSearchExtensions.end(), extension) != mEnvData->mSearchExtensions.end()) { -#ifndef WIN32 // skip hidden files if(!showHidden && isHidden(filePath)) continue; -#endif FileData* newGame = new FileData(GAME, filePath.generic_string(), mEnvData, this); folder->addChild(newGame); diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 0578167d72..a0cfc5d8de 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -52,11 +52,9 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height }else if(strcmp(argv[i], "--ignore-gamelist") == 0) { Settings::getInstance()->setBool("IgnoreGamelist", true); -#ifndef WIN32 }else if(strcmp(argv[i], "--show-hidden-files") == 0) { Settings::getInstance()->setBool("ShowHiddenFiles", true); -#endif }else if(strcmp(argv[i], "--draw-framerate") == 0) { Settings::getInstance()->setBool("DrawFramerate", true); From c1f836c713c28640cdb0c92d5fea37f4249be758 Mon Sep 17 00:00:00 2001 From: Rael Gugelmin Cunha Date: Tue, 24 Oct 2017 13:38:25 -0200 Subject: [PATCH 180/603] Add an UI option to automatically load a system gamelist (Fixes #253) --- es-app/src/guis/GuiMenu.cpp | 16 ++++++++++++++++ es-app/src/views/ViewController.cpp | 14 +++++++++++++- es-core/src/Settings.cpp | 1 + 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 05a7822893..9a0b797398 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -3,6 +3,7 @@ #include "Window.h" #include "Sound.h" #include "Log.h" +#include "SystemData.h" #include "Settings.h" #include "PowerSaver.h" #include "guis/GuiMsgBox.h" @@ -266,6 +267,21 @@ void GuiMenu::openUISettings() ViewController::get()->reloadAll(); }); + // Optionally start in selected system + auto systemfocus_list = std::make_shared< OptionListComponent >(mWindow, "START ON SYSTEM", false); + systemfocus_list->add("NONE", "", Settings::getInstance()->getString("StartupSystem") == ""); + for (auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) + { + if ("retropie" != (*it)->getName()) + { + systemfocus_list->add((*it)->getName(), (*it)->getName(), Settings::getInstance()->getString("StartupSystem") == (*it)->getName()); + } + } + s->addWithLabel("START ON SYSTEM", systemfocus_list); + s->addSaveFunc([systemfocus_list] { + Settings::getInstance()->setString("StartupSystem", systemfocus_list->getSelected()); + }); + // show help auto show_help = std::make_shared(mWindow); show_help->setState(Settings::getInstance()->getBool("ShowHelpPrompts")); diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index abba8b3806..01af2fbe00 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -44,6 +44,18 @@ ViewController::~ViewController() void ViewController::goToStart() { + // If specific system is requested, go directly to the game list + auto requestedSystem = Settings::getInstance()->getString("StartupSystem"); + if("" != requestedSystem && "retropie" != requestedSystem) + { + for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++){ + if ((*it)->getName() == requestedSystem) + { + goToGameList(*it); + return; + } + } + } goToSystemView(SystemData::sSystemVector.at(0)); } @@ -503,7 +515,7 @@ void ViewController::monitorUIMode() { std::string uimode = Settings::getInstance()->getString("UIMode"); if (uimode != mCurUIMode) // UIMODE HAS CHANGED - { + { mCurUIMode = uimode; reloadAll(); goToStart(); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index c72cf81eeb..e85f00366d 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -47,6 +47,7 @@ void Settings::setDefaults() mBoolMap["ShowExit"] = true; mBoolMap["Windowed"] = false; mBoolMap["SplashScreen"] = true; + mStringMap["StartupSystem"] = ""; #ifdef _RPI_ // don't enable VSync by default on the Pi, since it already From cdda38d05ba6e23041da1af4d5c4cbda2c78c605 Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Fri, 27 Oct 2017 01:03:13 +0000 Subject: [PATCH 181/603] Pi: use vsync by default and fix vsync on case * Now that vsync off explicitly sets swap interval, it's clear that we've been using driver defaults (vsync on) up until now. * Try to enable normal vsync before late swap tearing. The latter doesn't constrain framerate and looks basically identical to vsync off. --- es-core/src/Renderer_init_sdlgl.cpp | 4 ++-- es-core/src/Settings.cpp | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/es-core/src/Renderer_init_sdlgl.cpp b/es-core/src/Renderer_init_sdlgl.cpp index f064223039..b203f58f6f 100644 --- a/es-core/src/Renderer_init_sdlgl.cpp +++ b/es-core/src/Renderer_init_sdlgl.cpp @@ -105,9 +105,9 @@ namespace Renderer // 1 for updates synchronized with the vertical retrace, // or -1 for late swap tearing. // SDL_GL_SetSwapInterval returns 0 on success, -1 on error. - // if vsync is requested, try late swap tearing; if that doesn't work, try normal vsync + // if vsync is requested, try normal vsync; if that doesn't work, try late swap tearing // if that doesn't work, report an error - if(SDL_GL_SetSwapInterval(-1) != 0 && SDL_GL_SetSwapInterval(1) != 0) + if(SDL_GL_SetSwapInterval(1) != 0 && SDL_GL_SetSwapInterval(-1) != 0) LOG(LogWarning) << "Tried to enable vsync, but failed! (" << SDL_GetError() << ")"; } else diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index e85f00366d..faf9529ba9 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -49,13 +49,7 @@ void Settings::setDefaults() mBoolMap["SplashScreen"] = true; mStringMap["StartupSystem"] = ""; -#ifdef _RPI_ - // don't enable VSync by default on the Pi, since it already - // has trouble trying to render things at 60fps in certain menus - mBoolMap["VSync"] = false; -#else mBoolMap["VSync"] = true; -#endif mBoolMap["EnableSounds"] = true; mBoolMap["ShowHelpPrompts"] = true; From d3e87739e3a94d7882e8e71d17ac91d1a0cd7fcc Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 28 Oct 2017 22:07:31 +0200 Subject: [PATCH 182/603] fix warnings --- es-app/src/SystemData.cpp | 1 - es-app/src/guis/GuiGamelistFilter.cpp | 1 - es-app/src/main.cpp | 1 - es-app/src/scrapers/Scraper.cpp | 2 +- es-core/src/HttpReq.cpp | 2 +- es-core/src/ImageIO.cpp | 2 -- es-core/src/ThemeData.cpp | 12 ++++++------ es-core/src/components/ComponentList.cpp | 2 +- es-core/src/components/ImageGridComponent.h | 3 +-- es-core/src/resources/Font.cpp | 3 ++- es-core/src/resources/TextureDataManager.cpp | 2 -- 11 files changed, 12 insertions(+), 19 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index ff00963325..984fe6086a 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -197,7 +197,6 @@ bool SystemData::loadConfig() for(pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) { std::string name, fullname, path, cmd, themeFolder; - PlatformIds::PlatformId platformId = PlatformIds::PLATFORM_UNKNOWN; name = system.child("name").text().get(); fullname = system.child("fullname").text().get(); diff --git a/es-app/src/guis/GuiGamelistFilter.cpp b/es-app/src/guis/GuiGamelistFilter.cpp index 0ecb857108..8a59a1f29a 100644 --- a/es-app/src/guis/GuiGamelistFilter.cpp +++ b/es-app/src/guis/GuiGamelistFilter.cpp @@ -55,7 +55,6 @@ void GuiGamelistFilter::addFiltersToMenu() FilterIndexType type = (*it).type; // type of filter std::map* allKeys = (*it).allIndexKeys; // all possible filters for this type - std::vector* allFilteredKeys = (*it).currentFilteredKeys; // current keys being filtered for std::string menuLabel = (*it).menuLabel; // text to show in menu std::shared_ptr< OptionListComponent > optionList; diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index a0cfc5d8de..2fc749ded1 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -313,7 +313,6 @@ int main(int argc, char* argv[]) int ps_time = SDL_GetTicks(); bool running = true; - bool ps_standby = false; while(running) { diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index 72ec9e6d4a..bf91491cb1 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -258,7 +258,7 @@ bool resizeImage(const std::string& path, int maxWidth, int maxHeight) return false; } - bool saved = FreeImage_Save(format, imageRescaled, path.c_str()); + bool saved = (FreeImage_Save(format, imageRescaled, path.c_str()) != 0); FreeImage_Unload(imageRescaled); if(!saved) diff --git a/es-core/src/HttpReq.cpp b/es-core/src/HttpReq.cpp index dfece200b9..ca32b205bb 100644 --- a/es-core/src/HttpReq.cpp +++ b/es-core/src/HttpReq.cpp @@ -117,7 +117,7 @@ HttpReq::Status HttpReq::status() int msgs_left; CURLMsg* msg; - while(msg = curl_multi_info_read(s_multi_handle, &msgs_left)) + while((msg = curl_multi_info_read(s_multi_handle, &msgs_left)) != nullptr) { if(msg->msg == CURLMSG_DONE) { diff --git a/es-core/src/ImageIO.cpp b/es-core/src/ImageIO.cpp index b6b5c80675..982aa97be0 100644 --- a/es-core/src/ImageIO.cpp +++ b/es-core/src/ImageIO.cpp @@ -21,7 +21,6 @@ std::vector ImageIO::loadFromMemoryRGBA32(const unsigned char * d if (fiBitmap != nullptr) { //loaded. convert to 32bit if necessary - FIBITMAP * fiConverted = nullptr; if (FreeImage_GetBPP(fiBitmap) != 32) { FIBITMAP * fiConverted = FreeImage_ConvertTo32Bits(fiBitmap); @@ -36,7 +35,6 @@ std::vector ImageIO::loadFromMemoryRGBA32(const unsigned char * d { width = FreeImage_GetWidth(fiBitmap); height = FreeImage_GetHeight(fiBitmap); - unsigned int pitch = FreeImage_GetPitch(fiBitmap); //loop through scanlines and add all pixel data to the return vector //this is necessary, because width*height*bpp might not be == pitch unsigned char * tempData = new unsigned char[width * height * 4]; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 5cecba10dc..b1e57b3945 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -275,14 +275,14 @@ void ThemeData::parseIncludes(const pugi::xml_node& root) if(!result) throw error << "Error parsing file: \n " << result.description(); - pugi::xml_node root = includeDoc.child("theme"); - if(!root) + pugi::xml_node theme = includeDoc.child("theme"); + if(!theme) throw error << "Missing tag!"; - parseVariables(root); - parseIncludes(root); - parseViews(root); - parseFeatures(root); + parseVariables(theme); + parseIncludes(theme); + parseViews(theme); + parseFeatures(theme); mPaths.pop_back(); } diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 9abd1ef8c3..933b674c92 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -179,7 +179,7 @@ void ComponentList::render(const Eigen::Affine3f& parentTrans) for(unsigned int i = 0; i < mEntries.size(); i++) { auto& entry = mEntries.at(i); - drawAll = !mFocused || i != mCursor; + drawAll = !mFocused || i != (unsigned int)mCursor; for(auto it = entry.data.elements.begin(); it != entry.data.elements.end(); it++) { if(drawAll || it->invert_when_selected) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index b00a6c624b..d7701bdfdc 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -218,7 +218,6 @@ void ImageGridComponent::updateImages() Eigen::Vector2i gridSize = getGridSize(); int cursorRow = mCursor / gridSize.x(); - int cursorCol = mCursor % gridSize.x(); int start = (cursorRow - (gridSize.y() / 2)) * gridSize.x(); @@ -240,7 +239,7 @@ void ImageGridComponent::updateImages() } Eigen::Vector2f squareSize = getSquareSize(mEntries.at(i).data.texture); - if(i == mCursor) + if(i == (unsigned int)mCursor) { image.setColorShift(0xFFFFFFFF); image.setResize(squareSize.x() + getPadding().x() * 0.95f, squareSize.y() + getPadding().y() * 0.95f); diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index 7e02249b18..b31a69861e 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -142,7 +142,8 @@ Font::FontFace::FontFace(ResourceData&& d, int size) : data(d) int err = FT_New_Memory_Face(sLibrary, data.ptr.get(), data.length, 0, &face); assert(!err); - FT_Set_Pixel_Sizes(face, 0, size); + if(!err) + FT_Set_Pixel_Sizes(face, 0, size); } Font::FontFace::~FontFace() diff --git a/es-core/src/resources/TextureDataManager.cpp b/es-core/src/resources/TextureDataManager.cpp index 55720d14ac..bd1f04d3ed 100644 --- a/es-core/src/resources/TextureDataManager.cpp +++ b/es-core/src/resources/TextureDataManager.cpp @@ -107,8 +107,6 @@ void TextureDataManager::load(std::shared_ptr tex, bool block) size_t size = TextureResource::getTotalMemUsage(); size_t max_texture = (size_t)Settings::getInstance()->getInt("MaxVRAM") * 1024 * 1024; - size_t in = size; - for (auto it = mTextures.rbegin(); it != mTextures.rend(); ++it) { if (size < max_texture) From 73a2f6b716849d6dcbd2366af57764078a1fd969 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 28 Oct 2017 22:24:35 +0200 Subject: [PATCH 183/603] Replace Eigen with "inhouse" vector and matrix math --- CMake/Packages/FindEigen3.cmake | 80 -------- CMakeLists.txt | 4 - es-app/CMakeLists.txt | 2 +- es-app/src/SystemScreenSaver.cpp | 10 +- es-app/src/animations/LaunchAnimation.h | 17 +- es-app/src/animations/MoveCameraAnimation.h | 10 +- es-app/src/components/AsyncReqComponent.cpp | 8 +- es-app/src/components/AsyncReqComponent.h | 2 +- es-app/src/components/RatingComponent.cpp | 31 +-- es-app/src/components/RatingComponent.h | 6 +- .../src/components/ScraperSearchComponent.cpp | 10 +- .../src/components/ScraperSearchComponent.h | 2 +- es-app/src/components/TextListComponent.h | 18 +- es-app/src/guis/GuiGameScraper.cpp | 12 +- es-app/src/guis/GuiInfoPopup.cpp | 10 +- es-app/src/guis/GuiInfoPopup.h | 2 +- es-app/src/guis/GuiMetaDataEd.cpp | 4 +- es-app/src/guis/GuiScraperMulti.cpp | 2 - .../guis/GuiSlideshowScreensaverOptions.cpp | 2 +- es-app/src/views/SystemView.cpp | 52 ++--- es-app/src/views/SystemView.h | 20 +- es-app/src/views/ViewController.cpp | 21 +- es-app/src/views/ViewController.h | 6 +- .../views/gamelist/DetailedGameListView.cpp | 8 +- es-app/src/views/gamelist/IGameListView.cpp | 12 +- es-app/src/views/gamelist/IGameListView.h | 2 +- .../src/views/gamelist/VideoGameListView.cpp | 14 +- es-core/src/GuiComponent.cpp | 60 +++--- es-core/src/GuiComponent.h | 39 ++-- es-core/src/HelpStyle.cpp | 4 +- es-core/src/HelpStyle.h | 4 +- es-core/src/Renderer.h | 8 +- es-core/src/Renderer_draw_gl.cpp | 66 ++++--- es-core/src/ThemeData.cpp | 2 +- es-core/src/ThemeData.h | 3 +- es-core/src/Util.cpp | 32 ---- es-core/src/Util.h | 9 +- es-core/src/Window.cpp | 10 +- es-core/src/Window.h | 2 +- es-core/src/animations/Animation.h | 2 - .../src/components/AnimatedImageComponent.cpp | 2 +- .../src/components/AnimatedImageComponent.h | 2 +- es-core/src/components/BusyComponent.cpp | 2 - es-core/src/components/ButtonComponent.cpp | 11 +- es-core/src/components/ButtonComponent.h | 2 +- es-core/src/components/ComponentGrid.cpp | 42 ++-- es-core/src/components/ComponentGrid.h | 25 +-- es-core/src/components/ComponentList.cpp | 13 +- es-core/src/components/ComponentList.h | 2 +- es-core/src/components/DateTimeComponent.cpp | 20 +- es-core/src/components/DateTimeComponent.h | 4 +- es-core/src/components/HelpComponent.cpp | 8 +- es-core/src/components/HelpComponent.h | 2 +- es-core/src/components/IList.h | 6 +- es-core/src/components/ImageComponent.cpp | 62 +++--- es-core/src/components/ImageComponent.h | 14 +- es-core/src/components/ImageGridComponent.h | 46 ++--- es-core/src/components/MenuComponent.cpp | 4 +- es-core/src/components/NinePatchComponent.cpp | 75 ++++---- es-core/src/components/NinePatchComponent.h | 10 +- .../src/components/ScrollableContainer.cpp | 32 ++-- es-core/src/components/ScrollableContainer.h | 12 +- es-core/src/components/SliderComponent.cpp | 7 +- es-core/src/components/SliderComponent.h | 2 +- es-core/src/components/SwitchComponent.cpp | 4 +- es-core/src/components/SwitchComponent.h | 2 +- es-core/src/components/TextComponent.cpp | 22 +-- es-core/src/components/TextComponent.h | 6 +- es-core/src/components/TextEditComponent.cpp | 32 ++-- es-core/src/components/TextEditComponent.h | 8 +- es-core/src/components/VideoComponent.cpp | 22 +-- es-core/src/components/VideoComponent.h | 10 +- .../src/components/VideoPlayerComponent.cpp | 2 +- es-core/src/components/VideoPlayerComponent.h | 2 +- es-core/src/components/VideoVlcComponent.cpp | 24 +-- es-core/src/components/VideoVlcComponent.h | 2 +- es-core/src/guis/GuiDetectDevice.cpp | 2 - es-core/src/guis/GuiInputConfig.cpp | 2 - es-core/src/guis/GuiMsgBox.cpp | 8 +- es-core/src/guis/GuiTextEditPopup.cpp | 4 +- es-core/src/math/Matrix3x3f.h | 77 ++++++++ es-core/src/math/Matrix4x4f.h | 179 ++++++++++++++++++ es-core/src/math/Rotation3x3f.h | 39 ++++ es-core/src/math/Scale3x3f.h | 26 +++ es-core/src/math/Transform4x4f.h | 126 ++++++++++++ es-core/src/math/Vector2f.h | 65 +++++++ es-core/src/math/Vector2i.h | 58 ++++++ es-core/src/math/Vector3f.h | 73 +++++++ es-core/src/math/Vector4f.h | 82 ++++++++ es-core/src/resources/Font.cpp | 70 +++---- es-core/src/resources/Font.h | 32 ++-- es-core/src/resources/TextureResource.cpp | 18 +- es-core/src/resources/TextureResource.h | 11 +- 93 files changed, 1305 insertions(+), 716 deletions(-) delete mode 100644 CMake/Packages/FindEigen3.cmake create mode 100644 es-core/src/math/Matrix3x3f.h create mode 100644 es-core/src/math/Matrix4x4f.h create mode 100644 es-core/src/math/Rotation3x3f.h create mode 100644 es-core/src/math/Scale3x3f.h create mode 100644 es-core/src/math/Transform4x4f.h create mode 100644 es-core/src/math/Vector2f.h create mode 100644 es-core/src/math/Vector2i.h create mode 100644 es-core/src/math/Vector3f.h create mode 100644 es-core/src/math/Vector4f.h diff --git a/CMake/Packages/FindEigen3.cmake b/CMake/Packages/FindEigen3.cmake deleted file mode 100644 index deab9ce7ac..0000000000 --- a/CMake/Packages/FindEigen3.cmake +++ /dev/null @@ -1,80 +0,0 @@ -# - Try to find Eigen3 lib -# -# This module supports requiring a minimum version, e.g. you can do -# find_package(Eigen3 3.1.2) -# to require version 3.1.2 or newer of Eigen3. -# -# Once done this will define -# -# EIGEN3_FOUND - system has eigen lib with correct version -# EIGEN3_INCLUDE_DIR - the eigen include directory -# EIGEN3_VERSION - eigen version - -# Copyright (c) 2006, 2007 Montel Laurent, -# Copyright (c) 2008, 2009 Gael Guennebaud, -# Copyright (c) 2009 Benoit Jacob -# Redistribution and use is allowed according to the terms of the 2-clause BSD license. - -if(NOT Eigen3_FIND_VERSION) - if(NOT Eigen3_FIND_VERSION_MAJOR) - set(Eigen3_FIND_VERSION_MAJOR 2) - endif(NOT Eigen3_FIND_VERSION_MAJOR) - if(NOT Eigen3_FIND_VERSION_MINOR) - set(Eigen3_FIND_VERSION_MINOR 91) - endif(NOT Eigen3_FIND_VERSION_MINOR) - if(NOT Eigen3_FIND_VERSION_PATCH) - set(Eigen3_FIND_VERSION_PATCH 0) - endif(NOT Eigen3_FIND_VERSION_PATCH) - - set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}") -endif(NOT Eigen3_FIND_VERSION) - -macro(_eigen3_check_version) - file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header) - - string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}") - set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}") - string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}") - set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}") - string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}") - set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}") - - set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION}) - if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) - set(EIGEN3_VERSION_OK FALSE) - else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) - set(EIGEN3_VERSION_OK TRUE) - endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) - - if(NOT EIGEN3_VERSION_OK) - - message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, " - "but at least version ${Eigen3_FIND_VERSION} is required") - endif(NOT EIGEN3_VERSION_OK) -endmacro(_eigen3_check_version) - -if (EIGEN3_INCLUDE_DIR) - - # in cache already - _eigen3_check_version() - set(EIGEN3_FOUND ${EIGEN3_VERSION_OK}) - -else (EIGEN3_INCLUDE_DIR) - - find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library - PATHS - ${CMAKE_INSTALL_PREFIX}/include - ${KDE4_INCLUDE_DIR} - PATH_SUFFIXES eigen3 eigen Eigen - ) - - if(EIGEN3_INCLUDE_DIR) - _eigen3_check_version() - endif(EIGEN3_INCLUDE_DIR) - - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK) - - mark_as_advanced(EIGEN3_INCLUDE_DIR) - -endif(EIGEN3_INCLUDE_DIR) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8865c9663e..7d82c09107 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,6 @@ find_package(Boost REQUIRED COMPONENTS system date_time locale) else() find_package(Boost REQUIRED COMPONENTS system filesystem date_time locale) endif() -find_package(Eigen3 REQUIRED) find_package(CURL REQUIRED) find_package(VLC REQUIRED) @@ -102,8 +101,6 @@ else() add_definitions(-DUSE_OPENGL_ES) endif() -add_definitions(-DEIGEN_DONT_ALIGN) - #------------------------------------------------------------------------------- #add include directories set(COMMON_INCLUDE_DIRS @@ -111,7 +108,6 @@ set(COMMON_INCLUDE_DIRS ${FreeImage_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} - ${EIGEN3_INCLUDE_DIR} ${CURL_INCLUDE_DIR} ${VLC_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/external diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 60c5e56163..42b492c240 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -154,7 +154,7 @@ SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Alec Lofquist ") SET(CPACK_DEBIAN_PACKAGE_SECTION "misc") SET(CPACK_DEBIAN_PACKAGE_PRIORITY "extra") SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libsdl2-2.0-0, libboost-system${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}, libboost-filesystem${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}, libfreeimage3, libfreetype6, libcurl3, libasound2") -SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS "debhelper (>= 8.0.0), cmake, g++ (>= 4.8), libsdl2-dev, libboost-system-dev, libboost-filesystem-dev, libboost-date-time-dev, libfreeimage-dev, libfreetype6-dev, libeigen3-dev, libcurl4-openssl-dev, libasound2-dev, libgl1-mesa-dev") +SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS "debhelper (>= 8.0.0), cmake, g++ (>= 4.8), libsdl2-dev, libboost-system-dev, libboost-filesystem-dev, libboost-date-time-dev, libfreeimage-dev, libfreetype6-dev, libcurl4-openssl-dev, libasound2-dev, libgl1-mesa-dev") SET(CPACK_PACKAGE_VENDOR "emulationstation.org") SET(CPACK_PACKAGE_VERSION "2.0.0~rc1") diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 8c5f85f187..ba1e5ecd0d 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -209,20 +209,20 @@ void SystemScreenSaver::renderScreenSaver() if (mVideoScreensaver && screensaver_behavior == "random video") { // Render black background - Renderer::setMatrix(Eigen::Affine3f::Identity()); + Renderer::setMatrix(Transform4x4f::Identity()); Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), (unsigned char)(255)); // Only render the video if the state requires it if ((int)mState >= STATE_FADE_IN_VIDEO) { - Eigen::Affine3f transform = Eigen::Affine3f::Identity(); + Transform4x4f transform = Transform4x4f::Identity(); mVideoScreensaver->render(transform); } } else if (mImageScreensaver && screensaver_behavior == "slideshow") { // Render black background - Renderer::setMatrix(Eigen::Affine3f::Identity()); + Renderer::setMatrix(Transform4x4f::Identity()); Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), (unsigned char)(255)); // Only render the video if the state requires it @@ -232,7 +232,7 @@ void SystemScreenSaver::renderScreenSaver() { mImageScreensaver->setOpacity(255- (unsigned char) (mOpacity * 255)); - Eigen::Affine3f transform = Eigen::Affine3f::Identity(); + Transform4x4f transform = Transform4x4f::Identity(); mImageScreensaver->render(transform); } } @@ -248,7 +248,7 @@ void SystemScreenSaver::renderScreenSaver() } else if (mState != STATE_INACTIVE) { - Renderer::setMatrix(Eigen::Affine3f::Identity()); + Renderer::setMatrix(Transform4x4f::Identity()); unsigned char opacity = screensaver_behavior == "dim" ? 0xA0 : 0xFF; Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity); } diff --git a/es-app/src/animations/LaunchAnimation.h b/es-app/src/animations/LaunchAnimation.h index cfd9f06d06..78574ae764 100644 --- a/es-app/src/animations/LaunchAnimation.h +++ b/es-app/src/animations/LaunchAnimation.h @@ -2,6 +2,7 @@ #include "animations/Animation.h" #include "Log.h" +#include "math/Scale3x3f.h" // let's look at the game launch effect: // -move camera to center on point P (interpolation method: linear) @@ -31,34 +32,34 @@ class LaunchAnimation : public Animation { public: //Target is a centerpoint - LaunchAnimation(Eigen::Affine3f& camera, float& fade, const Eigen::Vector3f& target, int duration) : + LaunchAnimation(Transform4x4f& camera, float& fade, const Vector3f& target, int duration) : mCameraStart(camera), mTarget(target), mDuration(duration), cameraOut(camera), fadeOut(fade) {} int getDuration() const override { return mDuration; } void apply(float t) override { - cameraOut = Eigen::Affine3f::Identity(); + cameraOut = Transform4x4f::Identity(); float zoom = lerp(1.0, 4.25f, t*t); - cameraOut.scale(Eigen::Vector3f(zoom, zoom, 1)); + cameraOut *= Scale3x3f(Vector3f(zoom, zoom, 1)); const float sw = (float)Renderer::getScreenWidth() / zoom; const float sh = (float)Renderer::getScreenHeight() / zoom; - Eigen::Vector3f centerPoint = lerp(-mCameraStart.translation() + Eigen::Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0), + Vector3f centerPoint = lerp(-mCameraStart.translation() + Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0), mTarget, smoothStep(0.0, 1.0, t)); - cameraOut.translate(Eigen::Vector3f((sw / 2) - centerPoint.x(), (sh / 2) - centerPoint.y(), 0)); + cameraOut.translate(Vector3f((sw / 2) - centerPoint.x(), (sh / 2) - centerPoint.y(), 0)); fadeOut = lerp(0.0, 1.0, t*t); } private: - Eigen::Affine3f mCameraStart; - Eigen::Vector3f mTarget; + Transform4x4f mCameraStart; + Vector3f mTarget; int mDuration; - Eigen::Affine3f& cameraOut; + Transform4x4f& cameraOut; float& fadeOut; }; diff --git a/es-app/src/animations/MoveCameraAnimation.h b/es-app/src/animations/MoveCameraAnimation.h index 1f1689bb29..8eee0ea22a 100644 --- a/es-app/src/animations/MoveCameraAnimation.h +++ b/es-app/src/animations/MoveCameraAnimation.h @@ -5,7 +5,7 @@ class MoveCameraAnimation : public Animation { public: - MoveCameraAnimation(Eigen::Affine3f& camera, const Eigen::Vector3f& target) : mCameraStart(camera), mTarget(target), cameraOut(camera) {} + MoveCameraAnimation(Transform4x4f& camera, const Vector3f& target) : mCameraStart(camera), mTarget(target), cameraOut(camera) {} int getDuration() const override { return 400; } @@ -13,12 +13,12 @@ class MoveCameraAnimation : public Animation { // cubic ease out t -= 1; - cameraOut.translation() = -lerp(-mCameraStart.translation(), mTarget, t*t*t + 1); + cameraOut.translation() = -lerp(-mCameraStart.translation(), mTarget, t*t*t + 1); } private: - Eigen::Affine3f mCameraStart; - Eigen::Vector3f mTarget; + Transform4x4f mCameraStart; + Vector3f mTarget; - Eigen::Affine3f& cameraOut; + Transform4x4f& cameraOut; }; diff --git a/es-app/src/components/AsyncReqComponent.cpp b/es-app/src/components/AsyncReqComponent.cpp index a38b588803..c2ee7d1dcb 100644 --- a/es-app/src/components/AsyncReqComponent.cpp +++ b/es-app/src/components/AsyncReqComponent.cpp @@ -33,13 +33,13 @@ void AsyncReqComponent::update(int deltaTime) mTime += deltaTime; } -void AsyncReqComponent::render(const Eigen::Affine3f& parentTrans) +void AsyncReqComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = Eigen::Affine3f::Identity(); - trans = trans.translate(Eigen::Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0)); + Transform4x4f trans = Transform4x4f::Identity(); + trans = trans.translate(Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0)); Renderer::setMatrix(trans); - Eigen::Vector3f point(cos(mTime * 0.01f) * 12, sin(mTime * 0.01f) * 12, 0); + Vector3f point(cos(mTime * 0.01f) * 12, sin(mTime * 0.01f) * 12, 0); Renderer::drawRect((int)point.x(), (int)point.y(), 8, 8, 0x0000FFFF); } diff --git a/es-app/src/components/AsyncReqComponent.h b/es-app/src/components/AsyncReqComponent.h index 11478fe091..8c74c76ca2 100644 --- a/es-app/src/components/AsyncReqComponent.h +++ b/es-app/src/components/AsyncReqComponent.h @@ -33,7 +33,7 @@ class AsyncReqComponent : public GuiComponent bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; virtual std::vector getHelpPrompts() override; private: diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index 1fbf6eedd0..d89305abe0 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -8,7 +8,7 @@ RatingComponent::RatingComponent(Window* window) : GuiComponent(window), mColorS mFilledTexture = TextureResource::get(":/star_filled.svg", true); mUnfilledTexture = TextureResource::get(":/star_unfilled.svg", true); mValue = 0.5f; - mSize << 64 * NUM_RATING_STARS, 64; + mSize = Vector2f(64 * NUM_RATING_STARS, 64); updateVertices(); updateColors(); } @@ -81,26 +81,26 @@ void RatingComponent::updateVertices() const float w = round(h * mValue * numStars); const float fw = round(h * numStars); - mVertices[0].pos << 0.0f, 0.0f; - mVertices[0].tex << 0.0f, 1.0f; - mVertices[1].pos << w, h; - mVertices[1].tex << mValue * numStars, 0.0f; - mVertices[2].pos << 0.0f, h; - mVertices[2].tex << 0.0f, 0.0f; + mVertices[0].pos = Vector2f(0.0f, 0.0f); + mVertices[0].tex = Vector2f(0.0f, 1.0f); + mVertices[1].pos = Vector2f(w, h); + mVertices[1].tex = Vector2f(mValue * numStars, 0.0f); + mVertices[2].pos = Vector2f(0.0f, h); + mVertices[2].tex = Vector2f(0.0f, 0.0f); mVertices[3] = mVertices[0]; - mVertices[4].pos << w, 0.0f; - mVertices[4].tex << mValue * numStars, 1.0f; + mVertices[4].pos = Vector2f(w, 0.0f); + mVertices[4].tex = Vector2f(mValue * numStars, 1.0f); mVertices[5] = mVertices[1]; mVertices[6] = mVertices[4]; - mVertices[7].pos << fw, h; - mVertices[7].tex << numStars, 0.0f; + mVertices[7].pos = Vector2f(fw, h); + mVertices[7].tex = Vector2f(numStars, 0.0f); mVertices[8] = mVertices[1]; mVertices[9] = mVertices[6]; - mVertices[10].pos << fw, 0.0f; - mVertices[10].tex << numStars, 1.0f; + mVertices[10].pos = Vector2f(fw, 0.0f); + mVertices[10].tex = Vector2f(numStars, 1.0f); mVertices[11] = mVertices[7]; } @@ -109,9 +109,10 @@ void RatingComponent::updateColors() Renderer::buildGLColorArray(mColors, mColorShift, 12); } -void RatingComponent::render(const Eigen::Affine3f& parentTrans) +void RatingComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); + Transform4x4f trans = parentTrans * getTransform(); + trans.round(); Renderer::setMatrix(trans); glEnable(GL_TEXTURE_2D); diff --git a/es-app/src/components/RatingComponent.h b/es-app/src/components/RatingComponent.h index 5723aef9b2..c3694d8e70 100644 --- a/es-app/src/components/RatingComponent.h +++ b/es-app/src/components/RatingComponent.h @@ -19,7 +19,7 @@ class RatingComponent : public GuiComponent void setValue(const std::string& value) override; // Should be a normalized float (in the range [0..1]) - if it's not, it will be clamped. bool input(InputConfig* config, Input input) override; - void render(const Eigen::Affine3f& parentTrans); + void render(const Transform4x4f& parentTrans); void onSizeChanged() override; @@ -40,8 +40,8 @@ class RatingComponent : public GuiComponent struct Vertex { - Eigen::Vector2f pos; - Eigen::Vector2f tex; + Vector2f pos; + Vector2f tex; } mVertices[12]; diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index 736cbe1be2..9594a33289 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -15,15 +15,13 @@ #include "guis/GuiTextEditPopup.h" ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) : GuiComponent(window), - mGrid(window, Eigen::Vector2i(4, 3)), mBusyAnim(window), + mGrid(window, Vector2i(4, 3)), mBusyAnim(window), mSearchType(type) { addChild(&mGrid); mBlockAccept = false; - using namespace Eigen; - // left spacer (empty component, needed for borders) mGrid.setEntry(std::make_shared(mWindow), Vector2i(0, 0), false, false, Vector2i(1, 3), GridFlags::BORDER_TOP | GridFlags::BORDER_BOTTOM); @@ -171,8 +169,6 @@ void ScraperSearchComponent::resizeMetadata() void ScraperSearchComponent::updateViewStyle() { - using namespace Eigen; - // unlink description and result list and result name mGrid.removeEntry(mResultName); mGrid.removeEntry(mResultDesc); @@ -345,9 +341,9 @@ bool ScraperSearchComponent::input(InputConfig* config, Input input) return GuiComponent::input(config, input); } -void ScraperSearchComponent::render(const Eigen::Affine3f& parentTrans) +void ScraperSearchComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); renderChildren(trans); diff --git a/es-app/src/components/ScraperSearchComponent.h b/es-app/src/components/ScraperSearchComponent.h index f4fb43f518..90033fb77a 100644 --- a/es-app/src/components/ScraperSearchComponent.h +++ b/es-app/src/components/ScraperSearchComponent.h @@ -39,7 +39,7 @@ class ScraperSearchComponent : public GuiComponent bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; std::vector getHelpPrompts() override; void onSizeChanged() override; void onFocusGained() override; diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 336cbac500..749b4871bf 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -42,7 +42,7 @@ class TextListComponent : public IList bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; void add(const std::string& name, const T& obj, unsigned int colorId); @@ -132,9 +132,9 @@ TextListComponent::TextListComponent(Window* window) : } template -void TextListComponent::render(const Eigen::Affine3f& parentTrans) +void TextListComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); std::shared_ptr& font = mFont; @@ -176,10 +176,10 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) } // clip to inside margins - Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); + Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); - Renderer::pushClipRect(Eigen::Vector2i((int)(trans.translation().x() + mHorizontalMargin), (int)trans.translation().y()), - Eigen::Vector2i((int)(dim.x() - mHorizontalMargin*2), (int)dim.y())); + Renderer::pushClipRect(Vector2i((int)(trans.translation().x() + mHorizontalMargin), (int)trans.translation().y()), + Vector2i((int)(dim.x() - mHorizontalMargin*2), (int)dim.y())); for(int i = startEntry; i < listCutoff; i++) { @@ -196,7 +196,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) entry.data.textCache->setColor(color); - Eigen::Vector3f offset(0, y, 0); + Vector3f offset(0, y, 0); switch(mAlignment) { @@ -219,7 +219,7 @@ void TextListComponent::render(const Eigen::Affine3f& parentTrans) if(mCursor == i) offset[0] -= mMarqueeOffset; - Eigen::Affine3f drawTrans = trans; + Transform4x4f drawTrans = trans; drawTrans.translate(offset); Renderer::setMatrix(drawTrans); @@ -285,7 +285,7 @@ void TextListComponent::update(int deltaTime) //if we're not scrolling and this object's text goes outside our size, marquee it! const std::string& text = mEntries.at((unsigned int)mCursor).name; - Eigen::Vector2f textSize = mFont->sizeText(text); + Vector2f textSize = mFont->sizeText(text); //it's long enough to marquee if(textSize.x() - mMarqueeOffset > mSize.x() - 12 - mHorizontalMargin * 2) diff --git a/es-app/src/guis/GuiGameScraper.cpp b/es-app/src/guis/GuiGameScraper.cpp index 5b2ba7a58c..99293cebce 100644 --- a/es-app/src/guis/GuiGameScraper.cpp +++ b/es-app/src/guis/GuiGameScraper.cpp @@ -10,7 +10,7 @@ #include "Settings.h" GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc) : GuiComponent(window), - mGrid(window, Eigen::Vector2i(1, 7)), + mGrid(window, Vector2i(1, 7)), mBox(window, ":/frame.png"), mSearchParams(params), mClose(false) @@ -23,19 +23,19 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: mGameName = std::make_shared(mWindow, strToUpper(mSearchParams.game->getPath().filename().generic_string()), Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_CENTER); - mGrid.setEntry(mGameName, Eigen::Vector2i(0, 1), false, true); + mGrid.setEntry(mGameName, Vector2i(0, 1), false, true); // row 2 is a spacer mSystemName = std::make_shared(mWindow, strToUpper(mSearchParams.system->getFullName()), Font::get(FONT_SIZE_SMALL), 0x888888FF, ALIGN_CENTER); - mGrid.setEntry(mSystemName, Eigen::Vector2i(0, 3), false, true); + mGrid.setEntry(mSystemName, Vector2i(0, 3), false, true); // row 4 is a spacer // ScraperSearchComponent mSearch = std::make_shared(window, ScraperSearchComponent::NEVER_AUTO_ACCEPT); - mGrid.setEntry(mSearch, Eigen::Vector2i(0, 5), true); + mGrid.setEntry(mSearch, Vector2i(0, 5), true); // buttons std::vector< std::shared_ptr > buttons; @@ -47,7 +47,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: buttons.push_back(std::make_shared(mWindow, "CANCEL", "cancel", [&] { delete this; })); mButtonGrid = makeButtonGrid(mWindow, buttons); - mGrid.setEntry(mButtonGrid, Eigen::Vector2i(0, 6), true, false); + mGrid.setEntry(mButtonGrid, Vector2i(0, 6), true, false); // we call this->close() instead of just delete this; in the accept callback: // this is because of how GuiComponent::update works. if it was just delete this, this would happen when the metadata resolver is done: @@ -83,7 +83,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: void GuiGameScraper::onSizeChanged() { - mBox.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + mBox.fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); mGrid.setRowHeightPerc(0, 0.04f, false); mGrid.setRowHeightPerc(1, mGameName->getFont()->getLetterHeight() / mSize.y(), false); // game name diff --git a/es-app/src/guis/GuiInfoPopup.cpp b/es-app/src/guis/GuiInfoPopup.cpp index 08d2418277..33f738af13 100644 --- a/es-app/src/guis/GuiInfoPopup.cpp +++ b/es-app/src/guis/GuiInfoPopup.cpp @@ -43,15 +43,15 @@ GuiInfoPopup::GuiInfoPopup(Window* window, std::string message, int duration) : setPosition(posX, posY, 0); mFrame->setImagePath(":/frame.png"); - mFrame->fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + mFrame->fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); addChild(mFrame); // we only init the actual time when we first start to render mStartTime = 0; - mGrid = new ComponentGrid(window, Eigen::Vector2i(1, 3)); + mGrid = new ComponentGrid(window, Vector2i(1, 3)); mGrid->setSize(mSize); - mGrid->setEntry(s, Eigen::Vector2i(0, 1), false, true); + mGrid->setEntry(s, Vector2i(0, 1), false, true); addChild(mGrid); } @@ -60,10 +60,10 @@ GuiInfoPopup::~GuiInfoPopup() } -void GuiInfoPopup::render(const Eigen::Affine3f& parentTrans) +void GuiInfoPopup::render(const Transform4x4f& parentTrans) { // we use identity as we want to render on a specific window position, not on the view - Eigen::Affine3f trans = getTransform() * Eigen::Affine3f::Identity(); + Transform4x4f trans = getTransform() * Transform4x4f::Identity(); if(running && updateState()) { // if we're still supposed to be rendering it diff --git a/es-app/src/guis/GuiInfoPopup.h b/es-app/src/guis/GuiInfoPopup.h index 6b899680ed..f3ae988117 100644 --- a/es-app/src/guis/GuiInfoPopup.h +++ b/es-app/src/guis/GuiInfoPopup.h @@ -13,7 +13,7 @@ class GuiInfoPopup : public GuiComponent, public Window::InfoPopup public: GuiInfoPopup(Window* window, std::string message, int duration); ~GuiInfoPopup(); - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; inline void stop() { running = false; }; private: std::string mMessage; diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index 0479afdaea..e95cbdedb2 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -14,8 +14,6 @@ #include "components/SwitchComponent.h" #include "guis/GuiTextEditPopup.h" -using namespace Eigen; - GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams scraperParams, const std::string& header, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), mScraperParams(scraperParams), @@ -115,7 +113,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector auto bracket = std::make_shared(mWindow); bracket->setImage(":/arrow.svg"); - bracket->setResize(Eigen::Vector2f(0, lbl->getFont()->getLetterHeight())); + bracket->setResize(Vector2f(0, lbl->getFont()->getLetterHeight())); row.addElement(bracket, false); bool multiLine = iter->type == MD_MULTILINE_STRING; diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index 0b838422ad..53cf025296 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -11,8 +11,6 @@ #include "components/MenuComponent.h" // for makeButtonGrid #include "guis/GuiMsgBox.h" -using namespace Eigen; - GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue& searches, bool approveResults) : GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)), mSearchQueue(searches) diff --git a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp index d13ce5374c..d64709743c 100644 --- a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp +++ b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp @@ -101,7 +101,7 @@ void GuiSlideshowScreensaverOptions::addEditableTextComponent(ComponentListRow r auto bracket = std::make_shared(mWindow); bracket->setImage(":/arrow.svg"); - bracket->setResize(Eigen::Vector2f(0, lbl->getFont()->getLetterHeight())); + bracket->setResize(Vector2f(0, lbl->getFont()->getLetterHeight())); row.addElement(bracket, false); auto updateVal = [ed](const std::string& newVal) { ed->setValue(newVal); }; // ok callback (apply new value to ed) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 6e28a46b1d..beadcfab82 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -92,7 +92,7 @@ void SystemView::populate() e.data.logo->setOrigin(0.5, 0.5); } - Eigen::Vector2f denormalized = mCarousel.logoSize.cwiseProduct(e.data.logo->getOrigin()); + Vector2f denormalized = mCarousel.logoSize * e.data.logo->getOrigin(); e.data.logo->setPosition(denormalized.x(), denormalized.y(), 0.0); // delete any existing extras @@ -326,12 +326,12 @@ void SystemView::onCursorChanged(const CursorState& state) setAnimation(anim, 0, nullptr, false, 0); } -void SystemView::render(const Eigen::Affine3f& parentTrans) +void SystemView::render(const Transform4x4f& parentTrans) { if(size() == 0) return; // nothing to render - Eigen::Affine3f trans = getTransform() * parentTrans; + Transform4x4f trans = getTransform() * parentTrans; auto systemInfoZIndex = mSystemInfo.getZIndex(); auto minMax = std::minmax(mCarousel.zIndex, systemInfoZIndex); @@ -408,21 +408,21 @@ void SystemView::getViewElements(const std::shared_ptr& theme) } // Render system carousel -void SystemView::renderCarousel(const Eigen::Affine3f& trans) +void SystemView::renderCarousel(const Transform4x4f& trans) { // background box behind logos - Eigen::Affine3f carouselTrans = trans; - carouselTrans.translate(Eigen::Vector3f(mCarousel.pos.x(), mCarousel.pos.y(), 0.0)); - carouselTrans.translate(Eigen::Vector3f(mCarousel.origin.x() * mCarousel.size.x() * -1, mCarousel.origin.y() * mCarousel.size.y() * -1, 0.0f)); + Transform4x4f carouselTrans = trans; + carouselTrans.translate(Vector3f(mCarousel.pos.x(), mCarousel.pos.y(), 0.0)); + carouselTrans.translate(Vector3f(mCarousel.origin.x() * mCarousel.size.x() * -1, mCarousel.origin.y() * mCarousel.size.y() * -1, 0.0f)); - Eigen::Vector2f clipPos(carouselTrans.translation().x(), carouselTrans.translation().y()); - Renderer::pushClipRect(clipPos.cast(), mCarousel.size.cast()); + Vector2f clipPos(carouselTrans.translation().x(), carouselTrans.translation().y()); + Renderer::pushClipRect(Vector2i((int)clipPos.x(), (int)clipPos.y()), Vector2i((int)mCarousel.size.x(), (int)mCarousel.size.y())); Renderer::setMatrix(carouselTrans); Renderer::drawRect(0.0, 0.0, mCarousel.size.x(), mCarousel.size.y(), mCarousel.color); // draw logos - Eigen::Vector2f logoSpacing(0.0, 0.0); // NB: logoSpacing will include the size of the logo itself as well! + Vector2f logoSpacing(0.0, 0.0); // NB: logoSpacing will include the size of the logo itself as well! float xOff = 0.0; float yOff = 0.0; @@ -483,8 +483,8 @@ void SystemView::renderCarousel(const Eigen::Affine3f& trans) while (index >= (int)mEntries.size()) index -= mEntries.size(); - Eigen::Affine3f logoTrans = carouselTrans; - logoTrans.translate(Eigen::Vector3f(i * logoSpacing[0] + xOff, i * logoSpacing[1] + yOff, 0)); + Transform4x4f logoTrans = carouselTrans; + logoTrans.translate(Vector3f(i * logoSpacing[0] + xOff, i * logoSpacing[1] + yOff, 0)); float distance = i - mCamOffset; @@ -507,21 +507,21 @@ void SystemView::renderCarousel(const Eigen::Affine3f& trans) Renderer::popClipRect(); } -void SystemView::renderInfoBar(const Eigen::Affine3f& trans) +void SystemView::renderInfoBar(const Transform4x4f& trans) { Renderer::setMatrix(trans); mSystemInfo.render(trans); } // Draw background extras -void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float upper) +void SystemView::renderExtras(const Transform4x4f& trans, float lower, float upper) { int extrasCenter = (int)mExtrasCamOffset; // Adding texture loading buffers depending on scrolling speed and status int bufferIndex = getScrollingVelocity() + 1; - Renderer::pushClipRect(Eigen::Vector2i::Zero(), mSize.cast()); + Renderer::pushClipRect(Vector2i::Zero(), Vector2i((int)mSize.x(), (int)mSize.y())); for (int i = extrasCenter + logoBuffersLeft[bufferIndex]; i <= extrasCenter + logoBuffersRight[bufferIndex]; i++) { @@ -534,14 +534,14 @@ void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float u //Only render selected system when not showing if (mShowing || index == mCursor) { - Eigen::Affine3f extrasTrans = trans; + Transform4x4f extrasTrans = trans; if (mCarousel.type == HORIZONTAL) - extrasTrans.translate(Eigen::Vector3f((i - mExtrasCamOffset) * mSize.x(), 0, 0)); + extrasTrans.translate(Vector3f((i - mExtrasCamOffset) * mSize.x(), 0, 0)); else - extrasTrans.translate(Eigen::Vector3f(0, (i - mExtrasCamOffset) * mSize.y(), 0)); + extrasTrans.translate(Vector3f(0, (i - mExtrasCamOffset) * mSize.y(), 0)); - Renderer::pushClipRect(Eigen::Vector2i(extrasTrans.translation()[0], extrasTrans.translation()[1]), - mSize.cast()); + Renderer::pushClipRect(Vector2i((int)extrasTrans.translation()[0], (int)extrasTrans.translation()[1]), + Vector2i((int)mSize.x(), (int)mSize.y())); SystemViewData data = mEntries.at(index).data; for (unsigned int j = 0; j < data.backgroundExtras.size(); j++) { GuiComponent *extra = data.backgroundExtras[j]; @@ -555,7 +555,7 @@ void SystemView::renderExtras(const Eigen::Affine3f& trans, float lower, float u Renderer::popClipRect(); } -void SystemView::renderFade(const Eigen::Affine3f& trans) +void SystemView::renderFade(const Transform4x4f& trans) { // fade extras if necessary if (mExtrasFadeOpacity) @@ -610,17 +610,17 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) mCarousel.type = HORIZONTAL; } if (elem->has("size")) - mCarousel.size = elem->get("size").cwiseProduct(mSize); + mCarousel.size = elem->get("size") * mSize; if (elem->has("pos")) - mCarousel.pos = elem->get("pos").cwiseProduct(mSize); + mCarousel.pos = elem->get("pos") * mSize; if (elem->has("origin")) - mCarousel.origin = elem->get("origin"); + mCarousel.origin = elem->get("origin"); if (elem->has("color")) mCarousel.color = elem->get("color"); if (elem->has("logoScale")) mCarousel.logoScale = elem->get("logoScale"); if (elem->has("logoSize")) - mCarousel.logoSize = elem->get("logoSize").cwiseProduct(mSize); + mCarousel.logoSize = elem->get("logoSize") * mSize; if (elem->has("maxLogoCount")) mCarousel.maxLogoCount = (int) std::round(elem->get("maxLogoCount")); if (elem->has("zIndex")) @@ -628,7 +628,7 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) if (elem->has("logoRotation")) mCarousel.logoRotation = elem->get("logoRotation"); if (elem->has("logoRotationOrigin")) - mCarousel.logoRotationOrigin = elem->get("logoRotationOrigin"); + mCarousel.logoRotationOrigin = elem->get("logoRotationOrigin"); if (elem->has("logoAlignment")) { if (!(elem->get("logoAlignment").compare("left"))) diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index 50689eb923..a592e41ed5 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -26,16 +26,16 @@ struct SystemViewData struct SystemViewCarousel { CarouselType type; - Eigen::Vector2f pos; - Eigen::Vector2f size; - Eigen::Vector2f origin; + Vector2f pos; + Vector2f size; + Vector2f origin; float logoScale; float logoRotation; - Eigen::Vector2f logoRotationOrigin; + Vector2f logoRotationOrigin; Alignment logoAlignment; unsigned int color; int maxLogoCount; // number of logos shown on the carousel - Eigen::Vector2f logoSize; + Vector2f logoSize; float zIndex; }; @@ -51,7 +51,7 @@ class SystemView : public IList bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; void onThemeChanged(const std::shared_ptr& theme); @@ -67,10 +67,10 @@ class SystemView : public IList void getDefaultElements(void); void getCarouselFromTheme(const ThemeData::ThemeElement* elem); - void renderCarousel(const Eigen::Affine3f& parentTrans); - void renderExtras(const Eigen::Affine3f& parentTrans, float lower, float upper); - void renderInfoBar(const Eigen::Affine3f& trans); - void renderFade(const Eigen::Affine3f& trans); + void renderCarousel(const Transform4x4f& parentTrans); + void renderExtras(const Transform4x4f& parentTrans, float lower, float upper); + void renderInfoBar(const Transform4x4f& trans); + void renderFade(const Transform4x4f& trans); SystemViewCarousel mCarousel; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 46009d7ac5..f9a3f8e8c5 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -30,7 +30,7 @@ void ViewController::init(Window* window) } ViewController::ViewController(Window* window) - : GuiComponent(window), mCurrentView(nullptr), mCamera(Eigen::Affine3f::Identity()), mFadeOpacity(0), mLockInput(false) + : GuiComponent(window), mCurrentView(nullptr), mCamera(Transform4x4f::Identity()), mFadeOpacity(0), mLockInput(false) { mState.viewing = NOTHING; mCurUIMode = Settings::getInstance()->getString("UIMode"); @@ -133,7 +133,7 @@ void ViewController::goToGameList(SystemData* system) void ViewController::playViewTransition() { - Eigen::Vector3f target(Eigen::Vector3f::Identity()); + Vector3f target(Vector3f::Zero()); if(mCurrentView) target = mCurrentView->getPosition(); @@ -192,7 +192,7 @@ void ViewController::onFileChanged(FileData* file, FileChangeType change) it->second->onFileChanged(file, change); } -void ViewController::launch(FileData* game, Eigen::Vector3f center) +void ViewController::launch(FileData* game, Vector3f center) { if(game->getType() != GAME) { @@ -204,7 +204,7 @@ void ViewController::launch(FileData* game, Eigen::Vector3f center) if (mCurrentView) mCurrentView->onHide(); - Eigen::Affine3f origCamera = mCamera; + Transform4x4f origCamera = mCamera; origCamera.translation() = -mCurrentView->getPosition(); center += mCurrentView->getPosition(); @@ -369,13 +369,14 @@ void ViewController::update(int deltaTime) updateSelf(deltaTime); } -void ViewController::render(const Eigen::Affine3f& parentTrans) +void ViewController::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = mCamera * parentTrans; + Transform4x4f trans = mCamera * parentTrans; + Transform4x4f transInverse = trans.inverse(); // camera position, position + size - Eigen::Vector3f viewStart = trans.inverse().translation(); - Eigen::Vector3f viewEnd = trans.inverse() * Eigen::Vector3f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), 0); + Vector3f viewStart = transInverse.translation(); + Vector3f viewEnd = transInverse * Vector3f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), 0); // Keep track of UI mode changes. monitorUIMode(); @@ -387,8 +388,8 @@ void ViewController::render(const Eigen::Affine3f& parentTrans) for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) { // clipping - Eigen::Vector3f guiStart = it->second->getPosition(); - Eigen::Vector3f guiEnd = it->second->getPosition() + Eigen::Vector3f(it->second->getSize().x(), it->second->getSize().y(), 0); + Vector3f guiStart = it->second->getPosition(); + Vector3f guiEnd = it->second->getPosition() + Vector3f(it->second->getSize().x(), it->second->getSize().y(), 0); if(guiEnd.x() >= viewStart.x() && guiEnd.y() >= viewStart.y() && guiStart.x() <= viewEnd.x() && guiStart.y() <= viewEnd.y()) diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 124b98e249..5b6bc78473 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -41,11 +41,11 @@ class ViewController : public GuiComponent // Plays a nice launch effect and launches the game at the end of it. // Once the game terminates, plays a return effect. - void launch(FileData* game, Eigen::Vector3f centerCameraOn = Eigen::Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0)); + void launch(FileData* game, Vector3f centerCameraOn = Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0)); bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; enum ViewMode { @@ -95,7 +95,7 @@ class ViewController : public GuiComponent std::map< SystemData*, std::shared_ptr > mGameListViews; std::shared_ptr mSystemListView; - Eigen::Affine3f mCamera; + Transform4x4f mCamera; float mFadeOpacity; bool mLockInput; diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index dfad3478b7..145409286a 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -116,8 +116,6 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them void DetailedGameListView::initMDLabels() { - using namespace Eigen; - std::vector components = getMDLabels(); const unsigned int colCount = 2; @@ -149,8 +147,6 @@ void DetailedGameListView::initMDLabels() void DetailedGameListView::initMDValues() { - using namespace Eigen; - std::vector labels = getMDLabels(); std::vector values = getMDValues(); @@ -241,9 +237,9 @@ void DetailedGameListView::updateInfoPanel() void DetailedGameListView::launch(FileData* game) { - Eigen::Vector3f target(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0); + Vector3f target(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0); if(mImage.hasImage()) - target << mImage.getCenter().x(), mImage.getCenter().y(), 0; + target = Vector3f(mImage.getCenter().x(), mImage.getCenter().y(), 0); ViewController::get()->launch(game, target); } diff --git a/es-app/src/views/gamelist/IGameListView.cpp b/es-app/src/views/gamelist/IGameListView.cpp index d81604a0bd..7a70359f2d 100644 --- a/es-app/src/views/gamelist/IGameListView.cpp +++ b/es-app/src/views/gamelist/IGameListView.cpp @@ -42,15 +42,15 @@ HelpStyle IGameListView::getHelpStyle() return style; } -void IGameListView::render(const Eigen::Affine3f& parentTrans) +void IGameListView::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); - float scaleX = trans.linear()(0,0); - float scaleY = trans.linear()(1,1); + float scaleX = trans[0]; + float scaleY = trans[5]; - Eigen::Vector2i pos(trans.translation()[0], trans.translation()[1]); - Eigen::Vector2i size(mSize.x() * scaleX, mSize.y() * scaleY); + Vector2i pos(trans.translation()[0], trans.translation()[1]); + Vector2i size(mSize.x() * scaleX, mSize.y() * scaleY); Renderer::pushClipRect(pos, size); renderChildren(trans); diff --git a/es-app/src/views/gamelist/IGameListView.h b/es-app/src/views/gamelist/IGameListView.h index 23f1bd78bd..b84214c933 100644 --- a/es-app/src/views/gamelist/IGameListView.h +++ b/es-app/src/views/gamelist/IGameListView.h @@ -39,7 +39,7 @@ class IGameListView : public GuiComponent virtual HelpStyle getHelpStyle() override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; protected: FileData* mRoot; std::shared_ptr mTheme; diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 62f66b9fe6..b84f8ed6b3 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -154,8 +154,6 @@ void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) void VideoGameListView::initMDLabels() { - using namespace Eigen; - std::vector components = getMDLabels(); const unsigned int colCount = 2; @@ -187,8 +185,6 @@ void VideoGameListView::initMDLabels() void VideoGameListView::initMDValues() { - using namespace Eigen; - std::vector labels = getMDLabels(); std::vector values = getMDValues(); @@ -301,30 +297,30 @@ void VideoGameListView::launch(FileData* game) float screenWidth = (float) Renderer::getScreenWidth(); float screenHeight = (float) Renderer::getScreenHeight(); - Eigen::Vector3f target(screenWidth / 2.0f, screenHeight / 2.0f, 0); + Vector3f target(screenWidth / 2.0f, screenHeight / 2.0f, 0); if(mMarquee.hasImage() && (mMarquee.getPosition().x() < screenWidth && mMarquee.getPosition().x() > 0.0f && mMarquee.getPosition().y() < screenHeight && mMarquee.getPosition().y() > 0.0f)) { - target << mMarquee.getCenter().x(), mMarquee.getCenter().y(), 0; + target = Vector3f(mMarquee.getCenter().x(), mMarquee.getCenter().y(), 0); } else if(mImage.hasImage() && (mImage.getPosition().x() < screenWidth && mImage.getPosition().x() > 2.0f && mImage.getPosition().y() < screenHeight && mImage.getPosition().y() > 2.0f)) { - target << mImage.getCenter().x(), mImage.getCenter().y(), 0; + target = Vector3f(mImage.getCenter().x(), mImage.getCenter().y(), 0); } else if(mHeaderImage.hasImage() && (mHeaderImage.getPosition().x() < screenWidth && mHeaderImage.getPosition().x() > 0.0f && mHeaderImage.getPosition().y() < screenHeight && mHeaderImage.getPosition().y() > 0.0f)) { - target << mHeaderImage.getCenter().x(), mHeaderImage.getCenter().y(), 0; + target = Vector3f(mHeaderImage.getCenter().x(), mHeaderImage.getCenter().y(), 0); } else if(mVideo->getPosition().x() < screenWidth && mVideo->getPosition().x() > 0.0f && mVideo->getPosition().y() < screenHeight && mVideo->getPosition().y() > 0.0f) { - target << mVideo->getCenter().x(), mVideo->getCenter().y(), 0; + target = Vector3f(mVideo->getCenter().x(), mVideo->getCenter().y(), 0); } ViewController::get()->launch(game, target); diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 358c4f5329..ec380374ce 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -4,10 +4,12 @@ #include "Renderer.h" #include "animations/AnimationController.h" #include "ThemeData.h" +#include "math/Rotation3x3f.h" +#include "math/Scale3x3f.h" GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), - mPosition(Eigen::Vector3f::Zero()), mOrigin(Eigen::Vector2f::Zero()), mRotationOrigin(0.5, 0.5), - mSize(Eigen::Vector2f::Zero()), mTransform(Eigen::Affine3f::Identity()), mIsProcessing(false) + mPosition(Vector3f::Zero()), mOrigin(Vector2f::Zero()), mRotationOrigin(0.5, 0.5), + mSize(Vector2f::Zero()), mTransform(Transform4x4f::Identity()), mIsProcessing(false) { for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) mAnimationMap[i] = NULL; @@ -57,13 +59,13 @@ void GuiComponent::update(int deltaTime) updateChildren(deltaTime); } -void GuiComponent::render(const Eigen::Affine3f& parentTrans) +void GuiComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); renderChildren(trans); } -void GuiComponent::renderChildren(const Eigen::Affine3f& transform) const +void GuiComponent::renderChildren(const Transform4x4f& transform) const { for(unsigned int i = 0; i < getChildCount(); i++) { @@ -71,46 +73,46 @@ void GuiComponent::renderChildren(const Eigen::Affine3f& transform) const } } -Eigen::Vector3f GuiComponent::getPosition() const +Vector3f GuiComponent::getPosition() const { return mPosition; } void GuiComponent::setPosition(float x, float y, float z) { - mPosition << x, y, z; + mPosition = Vector3f(x, y, z); onPositionChanged(); } -Eigen::Vector2f GuiComponent::getOrigin() const +Vector2f GuiComponent::getOrigin() const { return mOrigin; } void GuiComponent::setOrigin(float x, float y) { - mOrigin << x, y; + mOrigin = Vector2f(x, y); onOriginChanged(); } -Eigen::Vector2f GuiComponent::getRotationOrigin() const +Vector2f GuiComponent::getRotationOrigin() const { return mRotationOrigin; } void GuiComponent::setRotationOrigin(float x, float y) { - mRotationOrigin << x, y;; + mRotationOrigin = Vector2f(x, y); } -Eigen::Vector2f GuiComponent::getSize() const +Vector2f GuiComponent::getSize() const { return mSize; } void GuiComponent::setSize(float w, float h) { - mSize << w, h; + mSize = Vector2f(w, h); onSizeChanged(); } @@ -154,10 +156,10 @@ void GuiComponent::setDefaultZIndex(float z) mDefaultZIndex = z; } -Eigen::Vector2f GuiComponent::getCenter() const +Vector2f GuiComponent::getCenter() const { - return Eigen::Vector2f(mPosition.x() - (getSize().x() * mOrigin.x()) + getSize().x() / 2, - mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); + return Vector2f(mPosition.x() - (getSize().x() * mOrigin.x()) + getSize().x() / 2, + mPosition.y() - (getSize().y() * mOrigin.y()) + getSize().y() / 2); } //Children stuff. @@ -239,13 +241,13 @@ void GuiComponent::setOpacity(unsigned char opacity) } } -const Eigen::Affine3f& GuiComponent::getTransform() +const Transform4x4f& GuiComponent::getTransform() { - mTransform.setIdentity(); + mTransform = Transform4x4f::Identity(); mTransform.translate(mPosition); if (mScale != 1.0) { - mTransform *= Eigen::Scaling(mScale); + mTransform *= Scale3x3f(mScale); } if (mRotation != 0.0) { @@ -255,16 +257,16 @@ const Eigen::Affine3f& GuiComponent::getTransform() // transform to offset point if (xOff != 0.0 || yOff != 0.0) - mTransform.translate(Eigen::Vector3f(xOff * -1, yOff * -1, 0.0f)); + mTransform.translate(Vector3f(xOff * -1, yOff * -1, 0.0f)); // apply rotation transorm - mTransform *= Eigen::AngleAxisf(mRotation, Eigen::Vector3f::UnitZ()); + mTransform *= Rotation3x3f(mRotation, Vector3f::UnitZ()); // Tranform back to original point if (xOff != 0.0 || yOff != 0.0) - mTransform.translate(Eigen::Vector3f(xOff, yOff, 0.0f)); + mTransform.translate(Vector3f(xOff, yOff, 0.0f)); } - mTransform.translate(Eigen::Vector3f(mOrigin.x() * mSize.x() * -1, mOrigin.y() * mSize.y() * -1, 0.0f)); + mTransform.translate(Vector3f(mOrigin.x() * mSize.x() * -1, mOrigin.y() * mSize.y() * -1, 0.0f)); return mTransform; } @@ -389,7 +391,7 @@ int GuiComponent::getAnimationTime(unsigned char slot) const void GuiComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { - Eigen::Vector2f scale = getParent() ? getParent()->getSize() : Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + Vector2f scale = getParent() ? getParent()->getSize() : Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); const ThemeData::ThemeElement* elem = theme->getElement(view, element, ""); if(!elem) @@ -398,22 +400,22 @@ void GuiComponent::applyTheme(const std::shared_ptr& theme, const std using namespace ThemeFlags; if(properties & POSITION && elem->has("pos")) { - Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); - setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); + Vector2f denormalized = elem->get("pos") * scale; + setPosition(Vector3f(denormalized.x(), denormalized.y(), 0)); } if(properties & ThemeFlags::SIZE && elem->has("size")) - setSize(elem->get("size").cwiseProduct(scale)); + setSize(elem->get("size") * scale); // position + size also implies origin if((properties & ORIGIN || (properties & POSITION && properties & ThemeFlags::SIZE)) && elem->has("origin")) - setOrigin(elem->get("origin")); + setOrigin(elem->get("origin")); if(properties & ThemeFlags::ROTATION) { if(elem->has("rotation")) setRotationDegrees(elem->get("rotation")); if(elem->has("rotationOrigin")) - setRotationOrigin(elem->get("rotationOrigin")); + setRotationOrigin(elem->get("rotationOrigin")); } if(properties & ThemeFlags::Z_INDEX && elem->has("zIndex")) diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 7bdec4f159..0553965d91 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -3,8 +3,9 @@ #include "InputConfig.h" #include #include -#include +#include #include "HelpStyle.h" +#include "math/Transform4x4f.h" class Window; class Animation; @@ -31,30 +32,30 @@ class GuiComponent //Called when it's time to render. By default, just calls renderChildren(parentTrans * getTransform()). //You probably want to override this like so: - //1. Calculate the new transform that your control will draw at with Eigen::Affine3f t = parentTrans * getTransform(). + //1. Calculate the new transform that your control will draw at with Transform4x4f t = parentTrans * getTransform(). //2. Set the renderer to use that new transform as the model matrix - Renderer::setMatrix(t); //3. Draw your component. //4. Tell your children to render, based on your component's transform - renderChildren(t). - virtual void render(const Eigen::Affine3f& parentTrans); + virtual void render(const Transform4x4f& parentTrans); - Eigen::Vector3f getPosition() const; - inline void setPosition(const Eigen::Vector3f& offset) { setPosition(offset.x(), offset.y(), offset.z()); } + Vector3f getPosition() const; + inline void setPosition(const Vector3f& offset) { setPosition(offset.x(), offset.y(), offset.z()); } void setPosition(float x, float y, float z = 0.0f); virtual void onPositionChanged() {}; //Sets the origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) - Eigen::Vector2f getOrigin() const; + Vector2f getOrigin() const; void setOrigin(float originX, float originY); - inline void setOrigin(Eigen::Vector2f origin) { setOrigin(origin.x(), origin.y()); } + inline void setOrigin(Vector2f origin) { setOrigin(origin.x(), origin.y()); } virtual void onOriginChanged() {}; //Sets the rotation origin as a percentage of this image (e.g. (0, 0) is top left, (0.5, 0.5) is the center) - Eigen::Vector2f getRotationOrigin() const; + Vector2f getRotationOrigin() const; void setRotationOrigin(float originX, float originY); - inline void setRotationOrigin(Eigen::Vector2f origin) { setRotationOrigin(origin.x(), origin.y()); } + inline void setRotationOrigin(Vector2f origin) { setRotationOrigin(origin.x(), origin.y()); } - Eigen::Vector2f getSize() const; - inline void setSize(const Eigen::Vector2f& size) { setSize(size.x(), size.y()); } + Vector2f getSize() const; + inline void setSize(const Vector2f& size) { setSize(size.x(), size.y()); } void setSize(float w, float h); virtual void onSizeChanged() {}; @@ -72,7 +73,7 @@ class GuiComponent void setDefaultZIndex(float zIndex); // Returns the center point of the image (takes origin into account). - Eigen::Vector2f getCenter() const; + Vector2f getCenter() const; void setParent(GuiComponent* parent); GuiComponent* getParent() const; @@ -99,7 +100,7 @@ class GuiComponent virtual unsigned char getOpacity() const; virtual void setOpacity(unsigned char opacity); - const Eigen::Affine3f& getTransform(); + const Transform4x4f& getTransform(); virtual std::string getValue() const; virtual void setValue(const std::string& value); @@ -130,7 +131,7 @@ class GuiComponent bool isProcessing() const; protected: - void renderChildren(const Eigen::Affine3f& transform) const; + void renderChildren(const Transform4x4f& transform) const; void updateSelf(int deltaTime); // updates animations void updateChildren(int deltaTime); // updates animations @@ -140,10 +141,10 @@ class GuiComponent GuiComponent* mParent; std::vector mChildren; - Eigen::Vector3f mPosition; - Eigen::Vector2f mOrigin; - Eigen::Vector2f mRotationOrigin; - Eigen::Vector2f mSize; + Vector3f mPosition; + Vector2f mOrigin; + Vector2f mRotationOrigin; + Vector2f mSize; float mRotation = 0.0; float mScale = 1.0; @@ -157,6 +158,6 @@ class GuiComponent const static unsigned char MAX_ANIMATIONS = 4; private: - Eigen::Affine3f mTransform; //Don't access this directly! Use getTransform()! + Transform4x4f mTransform; //Don't access this directly! Use getTransform()! AnimationController* mAnimationMap[MAX_ANIMATIONS]; }; diff --git a/es-core/src/HelpStyle.cpp b/es-core/src/HelpStyle.cpp index 59a329d7cb..24807c610c 100644 --- a/es-core/src/HelpStyle.cpp +++ b/es-core/src/HelpStyle.cpp @@ -5,7 +5,7 @@ HelpStyle::HelpStyle() { - position = Eigen::Vector2f(Renderer::getScreenWidth() * 0.012f, Renderer::getScreenHeight() * 0.9515f); + position = Vector2f(Renderer::getScreenWidth() * 0.012f, Renderer::getScreenHeight() * 0.9515f); iconColor = 0x777777FF; textColor = 0x777777FF; @@ -22,7 +22,7 @@ void HelpStyle::applyTheme(const std::shared_ptr& theme, const std::s return; if(elem->has("pos")) - position = elem->get("pos").cwiseProduct(Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight())); + position = elem->get("pos") * Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); if(elem->has("textColor")) textColor = elem->get("textColor"); diff --git a/es-core/src/HelpStyle.h b/es-core/src/HelpStyle.h index 204c444238..ff9309d75c 100644 --- a/es-core/src/HelpStyle.h +++ b/es-core/src/HelpStyle.h @@ -1,6 +1,6 @@ #pragma once -#include +#include "math/Vector2f.h" #include #include @@ -9,7 +9,7 @@ class Font; struct HelpStyle { - Eigen::Vector2f position; + Vector2f position; unsigned int iconColor; unsigned int textColor; std::shared_ptr font; diff --git a/es-core/src/Renderer.h b/es-core/src/Renderer.h index 5de4de81b1..8b1234e863 100644 --- a/es-core/src/Renderer.h +++ b/es-core/src/Renderer.h @@ -4,8 +4,9 @@ #include #include #include "platform.h" -#include #include GLHEADER +#include "math/Transform4x4f.h" +#include "math/Vector2i.h" class GuiComponent; class Font; @@ -26,11 +27,10 @@ namespace Renderer //graphics commands void swapBuffers(); - void pushClipRect(Eigen::Vector2i pos, Eigen::Vector2i dim); + void pushClipRect(Vector2i pos, Vector2i dim); void popClipRect(); - void setMatrix(float* mat); - void setMatrix(const Eigen::Affine3f& transform); + void setMatrix(const Transform4x4f& transform); void drawRect(int x, int y, int w, int h, unsigned int color, GLenum blend_sfactor = GL_SRC_ALPHA, GLenum blend_dfactor = GL_ONE_MINUS_SRC_ALPHA); void drawRect(float x, float y, float w, float h, unsigned int color, GLenum blend_sfactor = GL_SRC_ALPHA, GLenum blend_dfactor = GL_ONE_MINUS_SRC_ALPHA); diff --git a/es-core/src/Renderer_draw_gl.cpp b/es-core/src/Renderer_draw_gl.cpp index 3d0a39914d..6677efe433 100644 --- a/es-core/src/Renderer_draw_gl.cpp +++ b/es-core/src/Renderer_draw_gl.cpp @@ -9,7 +9,16 @@ #include "Util.h" namespace Renderer { - std::stack clipStack; + struct ClipRect { + ClipRect(const int x, const int y, const int w, const int h) : + x(x), y(y), w(w), h(h) {}; + int x; + int y; + int w; + int h; + }; + + std::stack clipStack; void setColor4bArray(GLubyte* array, unsigned int color) { @@ -29,41 +38,41 @@ namespace Renderer { } } - void pushClipRect(Eigen::Vector2i pos, Eigen::Vector2i dim) + void pushClipRect(Vector2i pos, Vector2i dim) { - Eigen::Vector4i box(pos.x(), pos.y(), dim.x(), dim.y()); - if(box[2] == 0) - box[2] = Renderer::getScreenWidth() - box.x(); - if(box[3] == 0) - box[3] = Renderer::getScreenHeight() - box.y(); + ClipRect box(pos.x(), pos.y(), dim.x(), dim.y()); + if(box.w == 0) + box.w = Renderer::getScreenWidth() - box.x; + if(box.h == 0) + box.h = Renderer::getScreenHeight() - box.y; //glScissor starts at the bottom left of the window //so (0, 0, 1, 1) is the bottom left pixel //everything else uses y+ = down, so flip it to be consistent //rect.pos.y = Renderer::getScreenHeight() - rect.pos.y - rect.size.y; - box[1] = Renderer::getScreenHeight() - box.y() - box[3]; + box.y = Renderer::getScreenHeight() - box.y - box.h; //make sure the box fits within clipStack.top(), and clip further accordingly if(clipStack.size()) { - Eigen::Vector4i& top = clipStack.top(); - if(top[0] > box[0]) - box[0] = top[0]; - if(top[1] > box[1]) - box[1] = top[1]; - if(top[0] + top[2] < box[0] + box[2]) - box[2] = (top[0] + top[2]) - box[0]; - if(top[1] + top[3] < box[1] + box[3]) - box[3] = (top[1] + top[3]) - box[1]; + const ClipRect& top = clipStack.top(); + if(top.x > box.x) + box.x = top.x; + if(top.y > box.y) + box.y = top.y; + if(top.x + top.w < box.x + box.w) + box.w = (top.x + top.w) - box.x; + if(top.y + top.h < box.y + box.h) + box.h = (top.y + top.h) - box.y; } - if(box[2] < 0) - box[2] = 0; - if(box[3] < 0) - box[3] = 0; + if(box.w < 0) + box.w = 0; + if(box.h < 0) + box.h = 0; clipStack.push(box); - glScissor(box[0], box[1], box[2], box[3]); + glScissor(box.x, box.y, box.w, box.h); glEnable(GL_SCISSOR_TEST); } @@ -80,8 +89,8 @@ namespace Renderer { { glDisable(GL_SCISSOR_TEST); }else{ - Eigen::Vector4i top = clipStack.top(); - glScissor(top[0], top[1], top[2], top[3]); + const ClipRect& top = clipStack.top(); + glScissor(top.x, top.y, top.w, top.h); } } @@ -128,13 +137,8 @@ namespace Renderer { glDisableClientState(GL_COLOR_ARRAY); } - void setMatrix(float* matrix) - { - glLoadMatrixf(matrix); - } - - void setMatrix(const Eigen::Affine3f& matrix) + void setMatrix(const Transform4x4f& matrix) { - setMatrix((float*)matrix.data()); + glLoadMatrixf((GLfloat*)&matrix); } }; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index b1e57b3945..c684e8bdd2 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -419,7 +419,7 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::map #include #include -#include #include "pugixml/src/pugixml.hpp" #include "GuiComponent.h" @@ -91,7 +90,7 @@ class ThemeData bool extra; std::string type; - std::map< std::string, boost::variant > properties; + std::map< std::string, boost::variant > properties; template T get(const std::string& prop) const { return boost::get(properties.at(prop)); } diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index cc6981e852..a56050faad 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -26,7 +26,6 @@ std::string strToUpper(const std::string& str) return strToUpper(str.c_str()); } - #if defined(_WIN32) && _MSC_VER < 1800 float round(float num) { @@ -34,37 +33,6 @@ float round(float num) } #endif -Eigen::Affine3f& roundMatrix(Eigen::Affine3f& mat) -{ - mat.translation()[0] = round(mat.translation()[0]); - mat.translation()[1] = round(mat.translation()[1]); - return mat; -} - -Eigen::Affine3f roundMatrix(const Eigen::Affine3f& mat) -{ - Eigen::Affine3f ret = mat; - roundMatrix(ret); - return ret; -} - -Eigen::Vector3f roundVector(const Eigen::Vector3f& vec) -{ - Eigen::Vector3f ret = vec; - ret[0] = round(ret[0]); - ret[1] = round(ret[1]); - ret[2] = round(ret[2]); - return ret; -} - -Eigen::Vector2f roundVector(const Eigen::Vector2f& vec) -{ - Eigen::Vector2f ret = vec; - ret[0] = round(ret[0]); - ret[1] = round(ret[1]); - return ret; -} - // embedded resources, e.g. ":/font.ttf", need to be properly handled too std::string getCanonicalPath(const std::string& path) { diff --git a/es-core/src/Util.h b/es-core/src/Util.h index 66568d8235..b5a23e67d0 100644 --- a/es-core/src/Util.h +++ b/es-core/src/Util.h @@ -1,20 +1,15 @@ #pragma once #include -#include #include #include +#include "math/Transform4x4f.h" +#include "math/Vector2f.h" std::string strToUpper(const char* from); std::string& strToUpper(std::string& str); std::string strToUpper(const std::string& str); -Eigen::Affine3f& roundMatrix(Eigen::Affine3f& mat); -Eigen::Affine3f roundMatrix(const Eigen::Affine3f& mat); - -Eigen::Vector3f roundVector(const Eigen::Vector3f& vec); -Eigen::Vector2f roundVector(const Eigen::Vector2f& vec); - #if defined(_WIN32) && _MSC_VER < 1800 float round(float num); #endif diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 89b2543ae7..81dcc1226a 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -228,7 +228,7 @@ void Window::update(int deltaTime) void Window::render() { - Eigen::Affine3f transform = Eigen::Affine3f::Identity(); + Transform4x4f transform = Transform4x4f::Identity(); mRenderedHelpPrompts = false; @@ -251,7 +251,7 @@ void Window::render() if(Settings::getInstance()->getBool("DrawFramerate") && mFrameDataText) { - Renderer::setMatrix(Eigen::Affine3f::Identity()); + Renderer::setMatrix(Transform4x4f::Identity()); mDefaultFonts.at(1)->renderTextCache(mFrameDataText.get()); } @@ -296,7 +296,7 @@ void Window::setAllowSleep(bool sleep) void Window::renderLoadingScreen() { - Eigen::Affine3f trans = Eigen::Affine3f::Identity(); + Transform4x4f trans = Transform4x4f::Identity(); Renderer::setMatrix(trans); Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF); @@ -308,7 +308,7 @@ void Window::renderLoadingScreen() auto& font = mDefaultFonts.at(1); TextCache* cache = font->buildTextCache("LOADING...", 0, 0, 0x656565FF); - trans = trans.translate(Eigen::Vector3f(round((Renderer::getScreenWidth() - cache->metrics.size.x()) / 2.0f), + trans = trans.translate(Vector3f(round((Renderer::getScreenWidth() - cache->metrics.size.x()) / 2.0f), round(Renderer::getScreenHeight() * 0.835f), 0.0f)); Renderer::setMatrix(trans); font->renderTextCache(cache); @@ -319,7 +319,7 @@ void Window::renderLoadingScreen() void Window::renderHelpPromptsEarly() { - mHelp->render(Eigen::Affine3f::Identity()); + mHelp->render(Transform4x4f::Identity()); mRenderedHelpPrompts = true; } diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 3cd363657c..e0577bac05 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -28,7 +28,7 @@ class Window class InfoPopup { public: - virtual void render(const Eigen::Affine3f& parentTrans) = 0; + virtual void render(const Transform4x4f& parentTrans) = 0; virtual void stop() = 0; virtual ~InfoPopup() {}; }; diff --git a/es-core/src/animations/Animation.h b/es-core/src/animations/Animation.h index e34dfb4384..3d69e35a39 100644 --- a/es-core/src/animations/Animation.h +++ b/es-core/src/animations/Animation.h @@ -1,7 +1,5 @@ #pragma once -#include - class Animation { public: diff --git a/es-core/src/components/AnimatedImageComponent.cpp b/es-core/src/components/AnimatedImageComponent.cpp index b13415309f..6ecb8722fc 100644 --- a/es-core/src/components/AnimatedImageComponent.cpp +++ b/es-core/src/components/AnimatedImageComponent.cpp @@ -76,7 +76,7 @@ void AnimatedImageComponent::update(int deltaTime) } } -void AnimatedImageComponent::render(const Eigen::Affine3f& trans) +void AnimatedImageComponent::render(const Transform4x4f& trans) { if(mFrames.size()) mFrames.at(mCurrentFrame).first->render(getTransform() * trans); diff --git a/es-core/src/components/AnimatedImageComponent.h b/es-core/src/components/AnimatedImageComponent.h index da5918879f..aa3657d016 100644 --- a/es-core/src/components/AnimatedImageComponent.h +++ b/es-core/src/components/AnimatedImageComponent.h @@ -24,7 +24,7 @@ class AnimatedImageComponent : public GuiComponent void reset(); // set to frame 0 void update(int deltaTime) override; - void render(const Eigen::Affine3f& trans) override; + void render(const Transform4x4f& trans) override; void onSizeChanged() override; diff --git a/es-core/src/components/BusyComponent.cpp b/es-core/src/components/BusyComponent.cpp index 184adcbc05..39826f9060 100644 --- a/es-core/src/components/BusyComponent.cpp +++ b/es-core/src/components/BusyComponent.cpp @@ -13,8 +13,6 @@ AnimationFrame BUSY_ANIMATION_FRAMES[] = { }; const AnimationDef BUSY_ANIMATION_DEF = { BUSY_ANIMATION_FRAMES, 4, true }; -using namespace Eigen; - BusyComponent::BusyComponent(Window* window) : GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(5, 3)) { diff --git a/es-core/src/components/ButtonComponent.cpp b/es-core/src/components/ButtonComponent.cpp index 33f662589e..fce92ca9cc 100644 --- a/es-core/src/components/ButtonComponent.cpp +++ b/es-core/src/components/ButtonComponent.cpp @@ -18,7 +18,7 @@ ButtonComponent::ButtonComponent(Window* window, const std::string& text, const void ButtonComponent::onSizeChanged() { - mBox.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + mBox.fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); } void ButtonComponent::setPressedFunc(std::function f) @@ -84,16 +84,17 @@ void ButtonComponent::updateImage() mBox.setImagePath(mFocused ? ":/button_filled.png" : ":/button.png"); } -void ButtonComponent::render(const Eigen::Affine3f& parentTrans) +void ButtonComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); + Transform4x4f trans = parentTrans * getTransform(); + trans.round(); mBox.render(trans); if(mTextCache) { - Eigen::Vector3f centerOffset((mSize.x() - mTextCache->metrics.size.x()) / 2, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); - centerOffset = roundVector(centerOffset); + Vector3f centerOffset((mSize.x() - mTextCache->metrics.size.x()) / 2, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); + centerOffset.round(); trans = trans.translate(centerOffset); Renderer::setMatrix(trans); diff --git a/es-core/src/components/ButtonComponent.h b/es-core/src/components/ButtonComponent.h index 25cb76e4c9..4f74af714d 100644 --- a/es-core/src/components/ButtonComponent.h +++ b/es-core/src/components/ButtonComponent.h @@ -15,7 +15,7 @@ class ButtonComponent : public GuiComponent void setEnabled(bool enable); bool input(InputConfig* config, Input input) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; void setText(const std::string& text, const std::string& helpText); diff --git a/es-core/src/components/ComponentGrid.cpp b/es-core/src/components/ComponentGrid.cpp index 89dd157cc0..dd54cc7d82 100644 --- a/es-core/src/components/ComponentGrid.cpp +++ b/es-core/src/components/ComponentGrid.cpp @@ -5,7 +5,7 @@ using namespace GridFlags; -ComponentGrid::ComponentGrid(Window* window, const Eigen::Vector2i& gridDimensions) : GuiComponent(window), +ComponentGrid::ComponentGrid(Window* window, const Vector2i& gridDimensions) : GuiComponent(window), mGridSize(gridDimensions), mCursor(0, 0) { assert(gridDimensions.x() > 0 && gridDimensions.y() > 0); @@ -82,7 +82,7 @@ void ComponentGrid::setRowHeightPerc(int row, float height, bool update) onSizeChanged(); } -void ComponentGrid::setEntry(const std::shared_ptr& comp, const Eigen::Vector2i& pos, bool canFocus, bool resize, const Eigen::Vector2i& size, +void ComponentGrid::setEntry(const std::shared_ptr& comp, const Vector2i& pos, bool canFocus, bool resize, const Vector2i& size, unsigned int border, GridFlags::UpdateType updateType) { assert(pos.x() >= 0 && pos.x() < mGridSize.x() && pos.y() >= 0 && pos.y() < mGridSize.y()); @@ -123,7 +123,7 @@ bool ComponentGrid::removeEntry(const std::shared_ptr& comp) void ComponentGrid::updateCellComponent(const GridEntry& cell) { // size - Eigen::Vector2f size(0, 0); + Vector2f size(0, 0); for(int x = cell.pos.x(); x < cell.pos.x() + cell.dim.x(); x++) size[0] += getColWidth(x); for(int y = cell.pos.y(); y < cell.pos.y() + cell.dim.y(); y++) @@ -134,7 +134,7 @@ void ComponentGrid::updateCellComponent(const GridEntry& cell) // position // find top left corner - Eigen::Vector3f pos(0, 0, 0); + Vector3f pos(0, 0, 0); for(int x = 0; x < cell.pos.x(); x++) pos[0] += getColWidth(x); for(int y = 0; y < cell.pos.y(); y++) @@ -153,16 +153,16 @@ void ComponentGrid::updateSeparators() bool drawAll = Settings::getInstance()->getBool("DebugGrid"); - Eigen::Vector2f pos; - Eigen::Vector2f size; + Vector2f pos; + Vector2f size; for(auto it = mCells.begin(); it != mCells.end(); it++) { if(!it->border && !drawAll) continue; // find component position + size - pos << 0, 0; - size << 0, 0; + pos = Vector2f(0, 0); + size = Vector2f(0, 0); for(int x = 0; x < it->pos.x(); x++) pos[0] += getColWidth(x); for(int y = 0; y < it->pos.y(); y++) @@ -235,19 +235,19 @@ bool ComponentGrid::input(InputConfig* config, Input input) if(config->isMappedTo("down", input)) { - return moveCursor(Eigen::Vector2i(0, 1)); + return moveCursor(Vector2i(0, 1)); } if(config->isMappedTo("up", input)) { - return moveCursor(Eigen::Vector2i(0, -1)); + return moveCursor(Vector2i(0, -1)); } if(config->isMappedTo("left", input)) { - return moveCursor(Eigen::Vector2i(-1, 0)); + return moveCursor(Vector2i(-1, 0)); } if(config->isMappedTo("right", input)) { - return moveCursor(Eigen::Vector2i(1, 0)); + return moveCursor(Vector2i(1, 0)); } return false; @@ -262,7 +262,7 @@ void ComponentGrid::resetCursor() { if(it->canFocus) { - Eigen::Vector2i origCursor = mCursor; + Vector2i origCursor = mCursor; mCursor = it->pos; onCursorMoved(origCursor, mCursor); break; @@ -270,21 +270,21 @@ void ComponentGrid::resetCursor() } } -bool ComponentGrid::moveCursor(Eigen::Vector2i dir) +bool ComponentGrid::moveCursor(Vector2i dir) { assert(dir.x() || dir.y()); - const Eigen::Vector2i origCursor = mCursor; + const Vector2i origCursor = mCursor; GridEntry* currentCursorEntry = getCellAt(mCursor); - Eigen::Vector2i searchAxis(dir.x() == 0, dir.y() == 0); + Vector2i searchAxis(dir.x() == 0, dir.y() == 0); while(mCursor.x() >= 0 && mCursor.y() >= 0 && mCursor.x() < mGridSize.x() && mCursor.y() < mGridSize.y()) { mCursor = mCursor + dir; - Eigen::Vector2i curDirPos = mCursor; + Vector2i curDirPos = mCursor; GridEntry* cursorEntry; //spread out on search axis+ @@ -355,9 +355,9 @@ void ComponentGrid::update(int deltaTime) } } -void ComponentGrid::render(const Eigen::Affine3f& parentTrans) +void ComponentGrid::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); renderChildren(trans); @@ -389,7 +389,7 @@ void ComponentGrid::textInput(const char* text) selectedEntry->component->textInput(text); } -void ComponentGrid::onCursorMoved(Eigen::Vector2i from, Eigen::Vector2i to) +void ComponentGrid::onCursorMoved(Vector2i from, Vector2i to) { GridEntry* cell = getCellAt(from); if(cell) @@ -408,7 +408,7 @@ void ComponentGrid::setCursorTo(const std::shared_ptr& comp) { if(it->component == comp) { - Eigen::Vector2i oldCursor = mCursor; + Vector2i oldCursor = mCursor; mCursor = it->pos; onCursorMoved(oldCursor, mCursor); return; diff --git a/es-core/src/components/ComponentGrid.h b/es-core/src/components/ComponentGrid.h index ee1547c1cd..42399630d9 100644 --- a/es-core/src/components/ComponentGrid.h +++ b/es-core/src/components/ComponentGrid.h @@ -1,6 +1,7 @@ #pragma once #include "GuiComponent.h" +#include "math/Vector2i.h" namespace GridFlags { @@ -26,18 +27,18 @@ namespace GridFlags class ComponentGrid : public GuiComponent { public: - ComponentGrid(Window* window, const Eigen::Vector2i& gridDimensions); + ComponentGrid(Window* window, const Vector2i& gridDimensions); virtual ~ComponentGrid(); bool removeEntry(const std::shared_ptr& comp); - void setEntry(const std::shared_ptr& comp, const Eigen::Vector2i& pos, bool canFocus, bool resize = true, - const Eigen::Vector2i& size = Eigen::Vector2i(1, 1), unsigned int border = GridFlags::BORDER_NONE, GridFlags::UpdateType updateType = GridFlags::UPDATE_ALWAYS); + void setEntry(const std::shared_ptr& comp, const Vector2i& pos, bool canFocus, bool resize = true, + const Vector2i& size = Vector2i(1, 1), unsigned int border = GridFlags::BORDER_NONE, GridFlags::UpdateType updateType = GridFlags::UPDATE_ALWAYS); void textInput(const char* text) override; bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; void onSizeChanged() override; void resetCursor(); @@ -49,7 +50,7 @@ class ComponentGrid : public GuiComponent void setColWidthPerc(int col, float width, bool update = true); // if update is false, will not call an onSizeChanged() which triggers a (potentially costly) repositioning + resizing of every element void setRowHeightPerc(int row, float height, bool update = true); // if update is false, will not call an onSizeChanged() which triggers a (potentially costly) repositioning + resizing of every element - bool moveCursor(Eigen::Vector2i dir); + bool moveCursor(Vector2i dir); void setCursorTo(const std::shared_ptr& comp); inline std::shared_ptr getSelectedComponent() @@ -70,15 +71,15 @@ class ComponentGrid : public GuiComponent class GridEntry { public: - Eigen::Vector2i pos; - Eigen::Vector2i dim; + Vector2i pos; + Vector2i dim; std::shared_ptr component; bool canFocus; bool resize; GridFlags::UpdateType updateType; unsigned int border; - GridEntry(const Eigen::Vector2i& p = Eigen::Vector2i::Zero(), const Eigen::Vector2i& d = Eigen::Vector2i::Zero(), + GridEntry(const Vector2i& p = Vector2i::Zero(), const Vector2i& d = Vector2i::Zero(), const std::shared_ptr& cmp = nullptr, bool f = false, bool r = true, GridFlags::UpdateType u = GridFlags::UPDATE_ALWAYS, unsigned int b = GridFlags::BORDER_NONE) : pos(p), dim(d), component(cmp), canFocus(f), resize(r), updateType(u), border(b) @@ -108,12 +109,12 @@ class ComponentGrid : public GuiComponent void updateSeparators(); GridEntry* getCellAt(int x, int y); - inline GridEntry* getCellAt(const Eigen::Vector2i& pos) { return getCellAt(pos.x(), pos.y()); } + inline GridEntry* getCellAt(const Vector2i& pos) { return getCellAt(pos.x(), pos.y()); } - Eigen::Vector2i mGridSize; + Vector2i mGridSize; std::vector mCells; - void onCursorMoved(Eigen::Vector2i from, Eigen::Vector2i to); - Eigen::Vector2i mCursor; + void onCursorMoved(Vector2i from, Vector2i to); + Vector2i mCursor; }; diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 933b674c92..7f2a2fc265 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -157,21 +157,22 @@ void ComponentList::updateCameraOffset() } } -void ComponentList::render(const Eigen::Affine3f& parentTrans) +void ComponentList::render(const Transform4x4f& parentTrans) { if(!size()) return; - Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); + Transform4x4f trans = parentTrans * getTransform(); + trans.round(); // clip everything to be inside our bounds - Eigen::Vector3f dim(mSize.x(), mSize.y(), 0); + Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); - Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), - Eigen::Vector2i((int)round(dim.x()), (int)round(dim.y() + 1))); + Renderer::pushClipRect(Vector2i((int)trans.translation().x(), (int)trans.translation().y()), + Vector2i((int)round(dim.x()), (int)round(dim.y() + 1))); // scroll the camera - trans.translate(Eigen::Vector3f(0, -round(mCameraOffset), 0)); + trans.translate(Vector3f(0, -round(mCameraOffset), 0)); // draw our entries std::vector drawAfterCursor; diff --git a/es-core/src/components/ComponentList.h b/es-core/src/components/ComponentList.h index 99f06a4ecc..94141cce5d 100644 --- a/es-core/src/components/ComponentList.h +++ b/es-core/src/components/ComponentList.h @@ -52,7 +52,7 @@ class ComponentList : public IList void textInput(const char* text) override; bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; virtual std::vector getHelpPrompts() override; void onSizeChanged() override; diff --git a/es-core/src/components/DateTimeComponent.cpp b/es-core/src/components/DateTimeComponent.cpp index 7113ec4950..2c0f316d8d 100644 --- a/es-core/src/components/DateTimeComponent.cpp +++ b/es-core/src/components/DateTimeComponent.cpp @@ -134,16 +134,16 @@ void DateTimeComponent::update(int deltaTime) GuiComponent::update(deltaTime); } -void DateTimeComponent::render(const Eigen::Affine3f& parentTrans) +void DateTimeComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); if(mTextCache) { // vertically center - Eigen::Vector3f off(0, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); + Vector3f off(0, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); trans.translate(off); - trans = roundMatrix(trans); + trans.round(); Renderer::setMatrix(trans); @@ -269,22 +269,22 @@ void DateTimeComponent::updateTextCache() return; //month - Eigen::Vector2f start(0, 0); - Eigen::Vector2f end = font->sizeText(dispString.substr(0, 2)); - Eigen::Vector2f diff = end - start; - mCursorBoxes.push_back(Eigen::Vector4f(start[0], start[1], diff[0], diff[1])); + Vector2f start(0, 0); + Vector2f end = font->sizeText(dispString.substr(0, 2)); + Vector2f diff = end - start; + mCursorBoxes.push_back(Vector4f(start[0], start[1], diff[0], diff[1])); //day start[0] = font->sizeText(dispString.substr(0, 3)).x(); end = font->sizeText(dispString.substr(0, 5)); diff = end - start; - mCursorBoxes.push_back(Eigen::Vector4f(start[0], start[1], diff[0], diff[1])); + mCursorBoxes.push_back(Vector4f(start[0], start[1], diff[0], diff[1])); //year start[0] = font->sizeText(dispString.substr(0, 6)).x(); end = font->sizeText(dispString.substr(0, 10)); diff = end - start; - mCursorBoxes.push_back(Eigen::Vector4f(start[0], start[1], diff[0], diff[1])); + mCursorBoxes.push_back(Vector4f(start[0], start[1], diff[0], diff[1])); //if mode == DISP_DATE_TIME do times too but I don't wanna do the logic for editing times because no one will ever use it so screw it } diff --git a/es-core/src/components/DateTimeComponent.h b/es-core/src/components/DateTimeComponent.h index bc0083fd7e..54e892c2e6 100644 --- a/es-core/src/components/DateTimeComponent.h +++ b/es-core/src/components/DateTimeComponent.h @@ -22,7 +22,7 @@ class DateTimeComponent : public GuiComponent bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; void onSizeChanged() override; // Set how the point in time will be displayed: @@ -56,7 +56,7 @@ class DateTimeComponent : public GuiComponent int mRelativeUpdateAccumulator; std::unique_ptr mTextCache; - std::vector mCursorBoxes; + std::vector mCursorBoxes; unsigned int mColor; std::shared_ptr mFont; diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index 504f32619f..ff6ca5c215 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -14,8 +14,6 @@ #define ICON_TEXT_SPACING 8 // space between [icon] and [text] (px) #define ENTRY_SPACING 16 // space between [text] and next [icon] (px) -using namespace Eigen; - static const std::map ICON_PATH_MAP = boost::assign::map_list_of ("up/down", ":/help/dpad_updown.svg") ("left/right", ":/help/dpad_leftright.svg") @@ -95,7 +93,7 @@ void HelpComponent::updateGrid() mGrid->setEntry(labels.at(i), Vector2i(col + 2, 0), false, false); } - mGrid->setPosition(Eigen::Vector3f(mStyle.position.x(), mStyle.position.y(), 0.0f)); + mGrid->setPosition(Vector3f(mStyle.position.x(), mStyle.position.y(), 0.0f)); //mGrid->setPosition(OFFSET_X, Renderer::getScreenHeight() - mGrid->getSize().y() - OFFSET_Y); } @@ -132,9 +130,9 @@ void HelpComponent::setOpacity(unsigned char opacity) } } -void HelpComponent::render(const Eigen::Affine3f& parentTrans) +void HelpComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); if(mGrid) mGrid->render(trans); diff --git a/es-core/src/components/HelpComponent.h b/es-core/src/components/HelpComponent.h index 464e353dc7..50a9669c39 100644 --- a/es-core/src/components/HelpComponent.h +++ b/es-core/src/components/HelpComponent.h @@ -15,7 +15,7 @@ class HelpComponent : public GuiComponent void clearPrompts(); void setPrompts(const std::vector& prompts); - void render(const Eigen::Affine3f& parent) override; + void render(const Transform4x4f& parent) override; void setOpacity(unsigned char opacity) override; void setStyle(const HelpStyle& style); diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index 41dcfc0a2e..a0486aed28 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -247,7 +247,7 @@ class IList : public GuiComponent scroll(mScrollVelocity); } - void listRenderTitleOverlay(const Eigen::Affine3f& trans) + void listRenderTitleOverlay(const Transform4x4f& trans) { if(size() == 0 || !mTitleOverlayFont || mTitleOverlayOpacity == 0) return; @@ -255,11 +255,11 @@ class IList : public GuiComponent // we don't bother caching this because it's only two letters and will change pretty much every frame if we're scrolling const std::string text = getSelectedName().size() >= 2 ? getSelectedName().substr(0, 2) : "??"; - Eigen::Vector2f off = mTitleOverlayFont->sizeText(text); + Vector2f off = mTitleOverlayFont->sizeText(text); off[0] = (Renderer::getScreenWidth() - off.x()) * 0.5f; off[1] = (Renderer::getScreenHeight() - off.y()) * 0.5f; - Eigen::Affine3f identTrans = Eigen::Affine3f::Identity(); + Transform4x4f identTrans = Transform4x4f::Identity(); mGradient.setOpacity(mTitleOverlayOpacity); mGradient.render(identTrans); diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 77f0c6657a..6db4424a3a 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -7,12 +7,12 @@ #include "ThemeData.h" #include "Util.h" -Eigen::Vector2i ImageComponent::getTextureSize() const +Vector2i ImageComponent::getTextureSize() const { if(mTexture) return mTexture->getSize(); else - return Eigen::Vector2i::Zero(); + return Vector2i::Zero(); } ImageComponent::ImageComponent(Window* window, bool forceLoad, bool dynamic) : GuiComponent(window), @@ -31,8 +31,8 @@ void ImageComponent::resize() if(!mTexture) return; - const Eigen::Vector2f textureSize = mTexture->getSourceImageSize(); - if(textureSize.isZero()) + const Vector2f textureSize = mTexture->getSourceImageSize(); + if(textureSize == Vector2f::Zero()) return; if(mTexture->isTiled()) @@ -49,7 +49,7 @@ void ImageComponent::resize() { mSize = textureSize; - Eigen::Vector2f resizeScale((mTargetSize.x() / mSize.x()), (mTargetSize.y() / mSize.y())); + Vector2f resizeScale((mTargetSize.x() / mSize.x()), (mTargetSize.y() / mSize.y())); if(resizeScale.x() < resizeScale.y()) { @@ -67,7 +67,7 @@ void ImageComponent::resize() }else{ // if both components are set, we just stretch // if no components are set, we don't resize at all - mSize = mTargetSize.isZero() ? textureSize : mTargetSize; + mSize = mTargetSize == Vector2f::Zero() ? textureSize : mTargetSize; // if only one component is set, we resize in a way that maintains aspect ratio // for SVG rasterization, we always calculate width from rounded height (see comment above) @@ -131,14 +131,14 @@ void ImageComponent::setImage(const std::shared_ptr& texture) void ImageComponent::setResize(float width, float height) { - mTargetSize << width, height; + mTargetSize = Vector2f(width, height); mTargetIsMax = false; resize(); } void ImageComponent::setMaxSize(float width, float height) { - mTargetSize << width, height; + mTargetSize = Vector2f(width, height); mTargetIsMax = true; resize(); } @@ -178,16 +178,16 @@ void ImageComponent::updateVertices() // we go through this mess to make sure everything is properly rounded // if we just round vertices at the end, edge cases occur near sizes of 0.5 - Eigen::Vector2f topLeft(0.0, 0.0); - Eigen::Vector2f bottomRight(round(mSize.x()), round(mSize.y())); + Vector2f topLeft(0.0, 0.0); + Vector2f bottomRight(round(mSize.x()), round(mSize.y())); - mVertices[0].pos << topLeft.x(), topLeft.y(); - mVertices[1].pos << topLeft.x(), bottomRight.y(); - mVertices[2].pos << bottomRight.x(), topLeft.y(); + mVertices[0].pos = Vector2f(topLeft.x(), topLeft.y()); + mVertices[1].pos = Vector2f(topLeft.x(), bottomRight.y()); + mVertices[2].pos = Vector2f(bottomRight.x(), topLeft.y()); - mVertices[3].pos << bottomRight.x(), topLeft.y(); - mVertices[4].pos << topLeft.x(), bottomRight.y(); - mVertices[5].pos << bottomRight.x(), bottomRight.y(); + mVertices[3].pos = Vector2f(bottomRight.x(), topLeft.y()); + mVertices[4].pos = Vector2f(topLeft.x(), bottomRight.y()); + mVertices[5].pos = Vector2f(bottomRight.x(), bottomRight.y()); float px, py; if(mTexture->isTiled()) @@ -199,13 +199,13 @@ void ImageComponent::updateVertices() py = 1; } - mVertices[0].tex << 0, py; - mVertices[1].tex << 0, 0; - mVertices[2].tex << px, py; + mVertices[0].tex = Vector2f(0, py); + mVertices[1].tex = Vector2f(0, 0); + mVertices[2].tex = Vector2f(px, py); - mVertices[3].tex << px, py; - mVertices[4].tex << 0, 0; - mVertices[5].tex << px, 0; + mVertices[3].tex = Vector2f(px, py); + mVertices[4].tex = Vector2f(0, 0); + mVertices[5].tex = Vector2f(px, 0); if(mFlipX) { @@ -224,9 +224,9 @@ void ImageComponent::updateColors() Renderer::buildGLColorArray(mColors, mColorShift, 6); } -void ImageComponent::render(const Eigen::Affine3f& parentTrans) +void ImageComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); Renderer::setMatrix(trans); if(mTexture && mOpacity > 0) @@ -324,25 +324,25 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s return; } - Eigen::Vector2f scale = getParent() ? getParent()->getSize() : Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + Vector2f scale = getParent() ? getParent()->getSize() : Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); if(properties & POSITION && elem->has("pos")) { - Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); - setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); + Vector2f denormalized = elem->get("pos") * scale; + setPosition(Vector3f(denormalized.x(), denormalized.y(), 0)); } if(properties & ThemeFlags::SIZE) { if(elem->has("size")) - setResize(elem->get("size").cwiseProduct(scale)); + setResize(elem->get("size") * scale); else if(elem->has("maxSize")) - setMaxSize(elem->get("maxSize").cwiseProduct(scale)); + setMaxSize(elem->get("maxSize") * scale); } // position + size also implies origin if((properties & ORIGIN || (properties & POSITION && properties & ThemeFlags::SIZE)) && elem->has("origin")) - setOrigin(elem->get("origin")); + setOrigin(elem->get("origin")); if(elem->has("default")) { setDefaultImage(elem->get("default")); @@ -361,7 +361,7 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s if(elem->has("rotation")) setRotationDegrees(elem->get("rotation")); if(elem->has("rotationOrigin")) - setRotationOrigin(elem->get("rotationOrigin")); + setRotationOrigin(elem->get("rotationOrigin")); } if(properties & ThemeFlags::Z_INDEX && elem->has("zIndex")) diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 98087ba0e4..4d214d91e6 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -32,13 +32,13 @@ class ImageComponent : public GuiComponent // Can be set before or after an image is loaded. // setMaxSize() and setResize() are mutually exclusive. void setResize(float width, float height); - inline void setResize(const Eigen::Vector2f& size) { setResize(size.x(), size.y()); } + inline void setResize(const Vector2f& size) { setResize(size.x(), size.y()); } // Resize the image to be as large as possible but fit within a box of this size. // Can be set before or after an image is loaded. // Never breaks the aspect ratio. setMaxSize() and setResize() are mutually exclusive. void setMaxSize(float width, float height); - inline void setMaxSize(const Eigen::Vector2f& size) { setMaxSize(size.x(), size.y()); } + inline void setMaxSize(const Vector2f& size) { setMaxSize(size.x(), size.y()); } // Multiply all pixels in the image by this color when rendering. void setColorShift(unsigned int color); @@ -47,17 +47,17 @@ class ImageComponent : public GuiComponent void setFlipY(bool flip); // Mirror on the Y axis. // Returns the size of the current texture, or (0, 0) if none is loaded. May be different than drawn size (use getSize() for that). - Eigen::Vector2i getTextureSize() const; + Vector2i getTextureSize() const; bool hasImage(); - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; virtual std::vector getHelpPrompts() override; private: - Eigen::Vector2f mTargetSize; + Vector2f mTargetSize; bool mFlipX, mFlipY, mTargetIsMax; @@ -67,8 +67,8 @@ class ImageComponent : public GuiComponent struct Vertex { - Eigen::Vector2f pos; - Eigen::Vector2f tex; + Vector2f pos; + Vector2f tex; } mVertices[6]; GLubyte mColors[6*4]; diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index d7701bdfdc..be32b90aa5 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -37,16 +37,16 @@ class ImageGridComponent : public IList bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; private: - Eigen::Vector2f getSquareSize(std::shared_ptr tex = nullptr) const + Vector2f getSquareSize(std::shared_ptr tex = nullptr) const { - Eigen::Vector2f aspect(1, 1); + Vector2f aspect(1, 1); if(tex) { - const Eigen::Vector2i& texSize = tex->getSize(); + const Vector2i& texSize = tex->getSize(); if(texSize.x() > texSize.y()) aspect[0] = (float)texSize.x() / texSize.y(); @@ -54,17 +54,17 @@ class ImageGridComponent : public IList aspect[1] = (float)texSize.y() / texSize.x(); } - return Eigen::Vector2f(156 * aspect.x(), 156 * aspect.y()); + return Vector2f(156 * aspect.x(), 156 * aspect.y()); }; - Eigen::Vector2f getMaxSquareSize() const + Vector2f getMaxSquareSize() const { - Eigen::Vector2f squareSize(32, 32); + Vector2f squareSize(32, 32); // calc biggest square size for(auto it = mEntries.begin(); it != mEntries.end(); it++) { - Eigen::Vector2f chkSize = getSquareSize(it->data.texture); + Vector2f chkSize = getSquareSize(it->data.texture); if(chkSize.x() > squareSize.x()) squareSize[0] = chkSize[0]; if(chkSize.y() > squareSize.y()) @@ -74,14 +74,14 @@ class ImageGridComponent : public IList return squareSize; }; - Eigen::Vector2i getGridSize() const + Vector2i getGridSize() const { - Eigen::Vector2f squareSize = getMaxSquareSize(); - Eigen::Vector2i gridSize(mSize.x() / (squareSize.x() + getPadding().x()), mSize.y() / (squareSize.y() + getPadding().y())); + Vector2f squareSize = getMaxSquareSize(); + Vector2i gridSize(mSize.x() / (squareSize.x() + getPadding().x()), mSize.y() / (squareSize.y() + getPadding().y())); return gridSize; }; - Eigen::Vector2f getPadding() const { return Eigen::Vector2f(24, 24); } + Vector2f getPadding() const { return Vector2f(24, 24); } void buildImages(); void updateImages(); @@ -115,7 +115,7 @@ bool ImageGridComponent::input(InputConfig* config, Input input) { if(input.value != 0) { - Eigen::Vector2i dir = Eigen::Vector2i::Zero(); + Vector2i dir = Vector2i::Zero(); if(config->isMappedTo("up", input)) dir[1] = -1; else if(config->isMappedTo("down", input)) @@ -125,7 +125,7 @@ bool ImageGridComponent::input(InputConfig* config, Input input) else if(config->isMappedTo("right", input)) dir[0] = 1; - if(dir != Eigen::Vector2i::Zero()) + if(dir != Vector2i::Zero()) { listInput(dir.x() + dir.y() * getGridSize().x()); return true; @@ -147,9 +147,9 @@ void ImageGridComponent::update(int deltaTime) } template -void ImageGridComponent::render(const Eigen::Affine3f& parentTrans) +void ImageGridComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = getTransform() * parentTrans; + Transform4x4f trans = getTransform() * parentTrans; if(mEntriesDirty) { @@ -185,13 +185,13 @@ void ImageGridComponent::buildImages() { mImages.clear(); - Eigen::Vector2i gridSize = getGridSize(); - Eigen::Vector2f squareSize = getMaxSquareSize(); - Eigen::Vector2f padding = getPadding(); + Vector2i gridSize = getGridSize(); + Vector2f squareSize = getMaxSquareSize(); + Vector2f padding = getPadding(); // attempt to center within our size - Eigen::Vector2f totalSize(gridSize.x() * (squareSize.x() + padding.x()), gridSize.y() * (squareSize.y() + padding.y())); - Eigen::Vector2f offset(mSize.x() - totalSize.x(), mSize.y() - totalSize.y()); + Vector2f totalSize(gridSize.x() * (squareSize.x() + padding.x()), gridSize.y() * (squareSize.y() + padding.y())); + Vector2f offset(mSize.x() - totalSize.x(), mSize.y() - totalSize.y()); offset /= 2; for(int y = 0; y < gridSize.y(); y++) @@ -215,7 +215,7 @@ void ImageGridComponent::updateImages() if(mImages.empty()) buildImages(); - Eigen::Vector2i gridSize = getGridSize(); + Vector2i gridSize = getGridSize(); int cursorRow = mCursor / gridSize.x(); @@ -238,7 +238,7 @@ void ImageGridComponent::updateImages() continue; } - Eigen::Vector2f squareSize = getSquareSize(mEntries.at(i).data.texture); + Vector2f squareSize = getSquareSize(mEntries.at(i).data.texture); if(i == (unsigned int)mCursor) { image.setColorShift(0xFFFFFFFF); diff --git a/es-core/src/components/MenuComponent.cpp b/es-core/src/components/MenuComponent.cpp index 68245d4853..ad3c089a12 100644 --- a/es-core/src/components/MenuComponent.cpp +++ b/es-core/src/components/MenuComponent.cpp @@ -6,8 +6,6 @@ #define TITLE_HEIGHT (mTitle->getFont()->getLetterHeight() + TITLE_VERT_PADDING) -using namespace Eigen; - MenuComponent::MenuComponent(Window* window, const char* title, const std::shared_ptr& titleFont) : GuiComponent(window), mBackground(window), mGrid(window, Vector2i(1, 3)) { @@ -69,7 +67,7 @@ void MenuComponent::updateSize() void MenuComponent::onSizeChanged() { - mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + mBackground.fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); // update grid row/col sizes mGrid.setRowHeightPerc(0, TITLE_HEIGHT / mSize.y()); diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index 1b1eba3ab7..b003777ded 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -39,7 +39,7 @@ void NinePatchComponent::buildVertices() mTexture = TextureResource::get(mPath); - if(mTexture->getSize() == Eigen::Vector2i::Zero()) + if(mTexture->getSize() == Vector2i::Zero()) { mVertices = NULL; mColors = NULL; @@ -51,22 +51,22 @@ void NinePatchComponent::buildVertices() mColors = new GLubyte[6 * 9 * 4]; updateColors(); - const Eigen::Vector2f ts = mTexture->getSize().cast(); + const Vector2f ts = Vector2f(mTexture->getSize().x(), mTexture->getSize().y()); //coordinates on the image in pixels, top left origin - const Eigen::Vector2f pieceCoords[9] = { - Eigen::Vector2f(0, 0), - Eigen::Vector2f(16, 0), - Eigen::Vector2f(32, 0), - Eigen::Vector2f(0, 16), - Eigen::Vector2f(16, 16), - Eigen::Vector2f(32, 16), - Eigen::Vector2f(0, 32), - Eigen::Vector2f(16, 32), - Eigen::Vector2f(32, 32), + const Vector2f pieceCoords[9] = { + Vector2f(0, 0), + Vector2f(16, 0), + Vector2f(32, 0), + Vector2f(0, 16), + Vector2f(16, 16), + Vector2f(32, 16), + Vector2f(0, 32), + Vector2f(16, 32), + Vector2f(32, 32), }; - const Eigen::Vector2f pieceSizes = getCornerSize(); + const Vector2f pieceSizes = getCornerSize(); //corners never stretch, so we calculate a width and height for slices 1, 3, 5, and 7 float borderWidth = mSize.x() - (pieceSizes.x() * 2); //should be pieceSizes[0] and pieceSizes[2] @@ -79,20 +79,20 @@ void NinePatchComponent::buildVertices() mVertices[0 * 6].pos = pieceCoords[0]; //top left mVertices[1 * 6].pos = pieceCoords[1]; //top middle - mVertices[2 * 6].pos = pieceCoords[1] + Eigen::Vector2f(borderWidth, 0); //top right + mVertices[2 * 6].pos = pieceCoords[1] + Vector2f(borderWidth, 0); //top right - mVertices[3 * 6].pos = mVertices[0 * 6].pos + Eigen::Vector2f(0, pieceSizes.y()); //mid left - mVertices[4 * 6].pos = mVertices[3 * 6].pos + Eigen::Vector2f(pieceSizes.x(), 0); //mid middle - mVertices[5 * 6].pos = mVertices[4 * 6].pos + Eigen::Vector2f(borderWidth, 0); //mid right + mVertices[3 * 6].pos = mVertices[0 * 6].pos + Vector2f(0, pieceSizes.y()); //mid left + mVertices[4 * 6].pos = mVertices[3 * 6].pos + Vector2f(pieceSizes.x(), 0); //mid middle + mVertices[5 * 6].pos = mVertices[4 * 6].pos + Vector2f(borderWidth, 0); //mid right - mVertices[6 * 6].pos = mVertices[3 * 6].pos + Eigen::Vector2f(0, borderHeight); //bot left - mVertices[7 * 6].pos = mVertices[6 * 6].pos + Eigen::Vector2f(pieceSizes.x(), 0); //bot middle - mVertices[8 * 6].pos = mVertices[7 * 6].pos + Eigen::Vector2f(borderWidth, 0); //bot right + mVertices[6 * 6].pos = mVertices[3 * 6].pos + Vector2f(0, borderHeight); //bot left + mVertices[7 * 6].pos = mVertices[6 * 6].pos + Vector2f(pieceSizes.x(), 0); //bot middle + mVertices[8 * 6].pos = mVertices[7 * 6].pos + Vector2f(borderWidth, 0); //bot right int v = 0; for(int slice = 0; slice < 9; slice++) { - Eigen::Vector2f size; + Vector2f size; //corners if(slice == 0 || slice == 2 || slice == 6 || slice == 8) @@ -100,32 +100,32 @@ void NinePatchComponent::buildVertices() //vertical borders if(slice == 1 || slice == 7) - size << borderWidth, pieceSizes.y(); + size = Vector2f(borderWidth, pieceSizes.y()); //horizontal borders if(slice == 3 || slice == 5) - size << pieceSizes.x(), borderHeight; + size = Vector2f(pieceSizes.x(), borderHeight); //center if(slice == 4) - size << borderWidth, borderHeight; + size = Vector2f(borderWidth, borderHeight); //no resizing will be necessary //mVertices[v + 0] is already correct mVertices[v + 1].pos = mVertices[v + 0].pos + size; - mVertices[v + 2].pos << mVertices[v + 0].pos.x(), mVertices[v + 1].pos.y(); + mVertices[v + 2].pos = Vector2f(mVertices[v + 0].pos.x(), mVertices[v + 1].pos.y()); - mVertices[v + 3].pos << mVertices[v + 1].pos.x(), mVertices[v + 0].pos.y(); + mVertices[v + 3].pos = Vector2f(mVertices[v + 1].pos.x(), mVertices[v + 0].pos.y()); mVertices[v + 4].pos = mVertices[v + 1].pos; mVertices[v + 5].pos = mVertices[v + 0].pos; //texture coordinates //the y = (1 - y) is to deal with texture coordinates having a bottom left corner origin vs. verticies having a top left origin - mVertices[v + 0].tex << pieceCoords[slice].x() / ts.x(), 1 - (pieceCoords[slice].y() / ts.y()); - mVertices[v + 1].tex << (pieceCoords[slice].x() + pieceSizes.x()) / ts.x(), 1 - ((pieceCoords[slice].y() + pieceSizes.y()) / ts.y()); - mVertices[v + 2].tex << mVertices[v + 0].tex.x(), mVertices[v + 1].tex.y(); + mVertices[v + 0].tex = Vector2f(pieceCoords[slice].x() / ts.x(), 1 - (pieceCoords[slice].y() / ts.y())); + mVertices[v + 1].tex = Vector2f((pieceCoords[slice].x() + pieceSizes.x()) / ts.x(), 1 - ((pieceCoords[slice].y() + pieceSizes.y()) / ts.y())); + mVertices[v + 2].tex = Vector2f(mVertices[v + 0].tex.x(), mVertices[v + 1].tex.y()); - mVertices[v + 3].tex << mVertices[v + 1].tex.x(), mVertices[v + 0].tex.y(); + mVertices[v + 3].tex = Vector2f(mVertices[v + 1].tex.x(), mVertices[v + 0].tex.y()); mVertices[v + 4].tex = mVertices[v + 1].tex; mVertices[v + 5].tex = mVertices[v + 0].tex; @@ -135,13 +135,14 @@ void NinePatchComponent::buildVertices() // round vertices for(int i = 0; i < 6*9; i++) { - mVertices[i].pos = roundVector(mVertices[i].pos); + mVertices[i].pos.round(); } } -void NinePatchComponent::render(const Eigen::Affine3f& parentTrans) +void NinePatchComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); + Transform4x4f trans = parentTrans * getTransform(); + trans.round(); if(mTexture && mVertices != NULL) { @@ -179,18 +180,18 @@ void NinePatchComponent::onSizeChanged() buildVertices(); } -Eigen::Vector2f NinePatchComponent::getCornerSize() const +Vector2f NinePatchComponent::getCornerSize() const { - return Eigen::Vector2f(16, 16); + return Vector2f(16, 16); } -void NinePatchComponent::fitTo(Eigen::Vector2f size, Eigen::Vector3f position, Eigen::Vector2f padding) +void NinePatchComponent::fitTo(Vector2f size, Vector3f position, Vector2f padding) { size += padding; position[0] -= padding.x() / 2; position[1] -= padding.y() / 2; - setSize(size + Eigen::Vector2f(getCornerSize().x() * 2, getCornerSize().y() * 2)); + setSize(size + Vector2f(getCornerSize().x() * 2, getCornerSize().y() * 2)); setPosition(-getCornerSize().x() + position.x(), -getCornerSize().y() + position.y()); } diff --git a/es-core/src/components/NinePatchComponent.h b/es-core/src/components/NinePatchComponent.h index 1fcfcb8812..2f306f2f16 100644 --- a/es-core/src/components/NinePatchComponent.h +++ b/es-core/src/components/NinePatchComponent.h @@ -20,11 +20,11 @@ class NinePatchComponent : public GuiComponent NinePatchComponent(Window* window, const std::string& path = "", unsigned int edgeColor = 0xFFFFFFFF, unsigned int centerColor = 0xFFFFFFFF); virtual ~NinePatchComponent(); - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; void onSizeChanged() override; - void fitTo(Eigen::Vector2f size, Eigen::Vector3f position = Eigen::Vector3f::Zero(), Eigen::Vector2f padding = Eigen::Vector2f::Zero()); + void fitTo(Vector2f size, Vector3f position = Vector3f::Zero(), Vector2f padding = Vector2f::Zero()); void setImagePath(const std::string& path); void setEdgeColor(unsigned int edgeColor); // Apply a color shift to the "edge" parts of the ninepatch. @@ -33,15 +33,15 @@ class NinePatchComponent : public GuiComponent virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; private: - Eigen::Vector2f getCornerSize() const; + Vector2f getCornerSize() const; void buildVertices(); void updateColors(); struct Vertex { - Eigen::Vector2f pos; - Eigen::Vector2f tex; + Vector2f pos; + Vector2f tex; }; Vertex* mVertices; diff --git a/es-core/src/components/ScrollableContainer.cpp b/es-core/src/components/ScrollableContainer.cpp index 0c8440969f..cca09f967d 100644 --- a/es-core/src/components/ScrollableContainer.cpp +++ b/es-core/src/components/ScrollableContainer.cpp @@ -11,18 +11,18 @@ ScrollableContainer::ScrollableContainer(Window* window) : GuiComponent(window), { } -void ScrollableContainer::render(const Eigen::Affine3f& parentTrans) +void ScrollableContainer::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); - Eigen::Vector2i clipPos((int)trans.translation().x(), (int)trans.translation().y()); + Vector2i clipPos((int)trans.translation().x(), (int)trans.translation().y()); - Eigen::Vector3f dimScaled = trans * Eigen::Vector3f(mSize.x(), mSize.y(), 0); - Eigen::Vector2i clipDim((int)dimScaled.x() - trans.translation().x(), (int)dimScaled.y() - trans.translation().y()); + Vector3f dimScaled = trans * Vector3f(mSize.x(), mSize.y(), 0); + Vector2i clipDim((int)dimScaled.x() - trans.translation().x(), (int)dimScaled.y() - trans.translation().y()); Renderer::pushClipRect(clipPos, clipDim); - trans.translate(-Eigen::Vector3f(mScrollPos.x(), mScrollPos.y(), 0)); + trans.translate(-Vector3f(mScrollPos.x(), mScrollPos.y(), 0)); Renderer::setMatrix(trans); GuiComponent::renderChildren(trans); @@ -34,24 +34,24 @@ void ScrollableContainer::setAutoScroll(bool autoScroll) { if(autoScroll) { - mScrollDir << 0, 1; + mScrollDir = Vector2f(0, 1); mAutoScrollDelay = AUTO_SCROLL_DELAY; mAutoScrollSpeed = AUTO_SCROLL_SPEED; reset(); }else{ - mScrollDir << 0, 0; + mScrollDir = Vector2f(0, 0); mAutoScrollDelay = 0; mAutoScrollSpeed = 0; mAutoScrollAccumulator = 0; } } -Eigen::Vector2f ScrollableContainer::getScrollPos() const +Vector2f ScrollableContainer::getScrollPos() const { return mScrollPos; } -void ScrollableContainer::setScrollPos(const Eigen::Vector2f& pos) +void ScrollableContainer::setScrollPos(const Vector2f& pos) { mScrollPos = pos; } @@ -77,7 +77,7 @@ void ScrollableContainer::update(int deltaTime) if(mScrollPos.y() < 0) mScrollPos[1] = 0; - const Eigen::Vector2f contentSize = getContentSize(); + const Vector2f contentSize = getContentSize(); if(mScrollPos.x() + getSize().x() > contentSize.x()) { mScrollPos[0] = contentSize.x() - getSize().x(); @@ -104,13 +104,13 @@ void ScrollableContainer::update(int deltaTime) } //this should probably return a box to allow for when controls don't start at 0,0 -Eigen::Vector2f ScrollableContainer::getContentSize() +Vector2f ScrollableContainer::getContentSize() { - Eigen::Vector2f max(0, 0); + Vector2f max(0, 0); for(unsigned int i = 0; i < mChildren.size(); i++) { - Eigen::Vector2f pos(mChildren.at(i)->getPosition()[0], mChildren.at(i)->getPosition()[1]); - Eigen::Vector2f bottomRight = mChildren.at(i)->getSize() + pos; + Vector2f pos(mChildren.at(i)->getPosition()[0], mChildren.at(i)->getPosition()[1]); + Vector2f bottomRight = mChildren.at(i)->getSize() + pos; if(bottomRight.x() > max.x()) max.x() = bottomRight.x(); if(bottomRight.y() > max.y()) @@ -122,7 +122,7 @@ Eigen::Vector2f ScrollableContainer::getContentSize() void ScrollableContainer::reset() { - mScrollPos << 0, 0; + mScrollPos = Vector2f(0, 0); mAutoScrollResetAccumulator = 0; mAutoScrollAccumulator = -mAutoScrollDelay + mAutoScrollSpeed; mAtEnd = false; diff --git a/es-core/src/components/ScrollableContainer.h b/es-core/src/components/ScrollableContainer.h index 79ae943595..2448c792e2 100644 --- a/es-core/src/components/ScrollableContainer.h +++ b/es-core/src/components/ScrollableContainer.h @@ -7,19 +7,19 @@ class ScrollableContainer : public GuiComponent public: ScrollableContainer(Window* window); - Eigen::Vector2f getScrollPos() const; - void setScrollPos(const Eigen::Vector2f& pos); + Vector2f getScrollPos() const; + void setScrollPos(const Vector2f& pos); void setAutoScroll(bool autoScroll); void reset(); void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; private: - Eigen::Vector2f getContentSize(); + Vector2f getContentSize(); - Eigen::Vector2f mScrollPos; - Eigen::Vector2f mScrollDir; + Vector2f mScrollPos; + Vector2f mScrollDir; int mAutoScrollDelay; // ms to wait before starting to autoscroll int mAutoScrollSpeed; // ms to wait before scrolling down by mScrollDir int mAutoScrollAccumulator; diff --git a/es-core/src/components/SliderComponent.cpp b/es-core/src/components/SliderComponent.cpp index 71a7fe8fa8..b169c7c733 100644 --- a/es-core/src/components/SliderComponent.cpp +++ b/es-core/src/components/SliderComponent.cpp @@ -61,9 +61,10 @@ void SliderComponent::update(int deltaTime) GuiComponent::update(deltaTime); } -void SliderComponent::render(const Eigen::Affine3f& parentTrans) +void SliderComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform()); + Transform4x4f trans = parentTrans * getTransform(); + trans.round(); Renderer::setMatrix(trans); // render suffix @@ -126,7 +127,7 @@ void SliderComponent::onValueChanged() ss << mSuffix; const std::string max = ss.str(); - Eigen::Vector2f textSize = mFont->sizeText(max); + Vector2f textSize = mFont->sizeText(max); mValueCache = std::shared_ptr(mFont->buildTextCache(val, mSize.x() - textSize.x(), (mSize.y() - textSize.y()) / 2, 0x777777FF)); mValueCache->metrics.size[0] = textSize.x(); // fudge the width } diff --git a/es-core/src/components/SliderComponent.h b/es-core/src/components/SliderComponent.h index 900178c7e3..b1b0f551ad 100644 --- a/es-core/src/components/SliderComponent.h +++ b/es-core/src/components/SliderComponent.h @@ -18,7 +18,7 @@ class SliderComponent : public GuiComponent bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; void onSizeChanged() override; diff --git a/es-core/src/components/SwitchComponent.cpp b/es-core/src/components/SwitchComponent.cpp index c74a751b52..f199109a6e 100644 --- a/es-core/src/components/SwitchComponent.cpp +++ b/es-core/src/components/SwitchComponent.cpp @@ -27,9 +27,9 @@ bool SwitchComponent::input(InputConfig* config, Input input) return false; } -void SwitchComponent::render(const Eigen::Affine3f& parentTrans) +void SwitchComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); mImage.render(trans); diff --git a/es-core/src/components/SwitchComponent.h b/es-core/src/components/SwitchComponent.h index 46096b35a6..f26aa69c60 100644 --- a/es-core/src/components/SwitchComponent.h +++ b/es-core/src/components/SwitchComponent.h @@ -11,7 +11,7 @@ class SwitchComponent : public GuiComponent SwitchComponent(Window* window, bool state = false); bool input(InputConfig* config, Input input) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; void onSizeChanged() override; bool getState() const; diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index c718f99260..29cdc0d9da 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -15,7 +15,7 @@ TextComponent::TextComponent(Window* window) : GuiComponent(window), } TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Alignment align, - Eigen::Vector3f pos, Eigen::Vector2f size, unsigned int bgcolor) : GuiComponent(window), + Vector3f pos, Vector2f size, unsigned int bgcolor) : GuiComponent(window), mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mHorizontalAlignment(align), mVerticalAlignment(ALIGN_CENTER), mLineSpacing(1.5f), mBgColor(0), mRenderBackground(false) @@ -30,7 +30,7 @@ TextComponent::TextComponent(Window* window, const std::string& text, const std: void TextComponent::onSizeChanged() { - mAutoCalcExtent << (getSize().x() == 0), (getSize().y() == 0); + mAutoCalcExtent = Vector2i((getSize().x() == 0), (getSize().y() == 0)); onTextChanged(); } @@ -95,9 +95,9 @@ void TextComponent::setUppercase(bool uppercase) onTextChanged(); } -void TextComponent::render(const Eigen::Affine3f& parentTrans) +void TextComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); if (mRenderBackground) { @@ -107,7 +107,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) if(mTextCache) { - const Eigen::Vector2f& textSize = mTextCache->metrics.size; + const Vector2f& textSize = mTextCache->metrics.size; float yOff; switch(mVerticalAlignment) { @@ -121,7 +121,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) yOff = (getSize().y() - textSize.y()) / 2.0f; break; } - Eigen::Vector3f off(0, yOff, 0); + Vector3f off(0, yOff, 0); if(Settings::getInstance()->getBool("DebugText")) { @@ -131,7 +131,7 @@ void TextComponent::render(const Eigen::Affine3f& parentTrans) } trans.translate(off); - trans = roundMatrix(trans); + trans.round(); Renderer::setMatrix(trans); // draw the text area, where the text actually is going @@ -190,12 +190,12 @@ void TextComponent::onTextChanged() addAbbrev = newline != std::string::npos; } - Eigen::Vector2f size = f->sizeText(text); + Vector2f size = f->sizeText(text); if(!isMultiline && mSize.x() && text.size() && (size.x() > mSize.x() || addAbbrev)) { // abbreviate text const std::string abbrev = "..."; - Eigen::Vector2f abbrevSize = f->sizeText(abbrev); + Vector2f abbrevSize = f->sizeText(abbrev); while(text.size() && size.x() + abbrevSize.x() > mSize.x()) { @@ -206,9 +206,9 @@ void TextComponent::onTextChanged() text.append(abbrev); - mTextCache = std::shared_ptr(f->buildTextCache(text, Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mHorizontalAlignment, mLineSpacing)); + mTextCache = std::shared_ptr(f->buildTextCache(text, Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mHorizontalAlignment, mLineSpacing)); }else{ - mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(text, mSize.x()), Eigen::Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mHorizontalAlignment, mLineSpacing)); + mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(text, mSize.x()), Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mHorizontalAlignment, mLineSpacing)); } } diff --git a/es-core/src/components/TextComponent.h b/es-core/src/components/TextComponent.h index 2e9938c589..02a5246ad7 100644 --- a/es-core/src/components/TextComponent.h +++ b/es-core/src/components/TextComponent.h @@ -16,7 +16,7 @@ class TextComponent : public GuiComponent public: TextComponent(Window* window); TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color = 0x000000FF, Alignment align = ALIGN_LEFT, - Eigen::Vector3f pos = Eigen::Vector3f::Zero(), Eigen::Vector2f size = Eigen::Vector2f::Zero(), unsigned int bgcolor = 0x00000000); + Vector3f pos = Vector3f::Zero(), Vector2f size = Vector2f::Zero(), unsigned int bgcolor = 0x00000000); void setFont(const std::shared_ptr& font); void setUppercase(bool uppercase); @@ -29,7 +29,7 @@ class TextComponent : public GuiComponent void setBackgroundColor(unsigned int color); void setRenderBackground(bool render); - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; std::string getValue() const override; void setValue(const std::string& value) override; @@ -55,7 +55,7 @@ class TextComponent : public GuiComponent std::shared_ptr mFont; bool mUppercase; - Eigen::Matrix mAutoCalcExtent; + Vector2i mAutoCalcExtent; std::string mText; std::shared_ptr mTextCache; Alignment mHorizontalAlignment; diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index c5ff4f75ea..10e4e192c3 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -37,7 +37,7 @@ void TextEditComponent::onFocusLost() void TextEditComponent::onSizeChanged() { - mBox.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-34, -32 - TEXT_PADDING_VERT)); + mBox.fitTo(mSize, Vector3f::Zero(), Vector2f(-34, -32 - TEXT_PADDING_VERT)); onTextChanged(); // wrap point probably changed } @@ -219,7 +219,7 @@ void TextEditComponent::onCursorChanged() { if(isMultiline()) { - Eigen::Vector2f textSize = mFont->getWrappedTextCursorOffset(mText, getTextAreaSize().x(), mCursor); + Vector2f textSize = mFont->getWrappedTextCursorOffset(mText, getTextAreaSize().x(), mCursor); if(mScrollOffset.y() + getTextAreaSize().y() < textSize.y() + mFont->getHeight()) //need to scroll down? { @@ -229,7 +229,7 @@ void TextEditComponent::onCursorChanged() mScrollOffset[1] = textSize.y(); } }else{ - Eigen::Vector2f cursorPos = mFont->sizeText(mText.substr(0, mCursor)); + Vector2f cursorPos = mFont->sizeText(mText.substr(0, mCursor)); if(mScrollOffset.x() + getTextAreaSize().x() < cursorPos.x()) { @@ -241,22 +241,22 @@ void TextEditComponent::onCursorChanged() } } -void TextEditComponent::render(const Eigen::Affine3f& parentTrans) +void TextEditComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = getTransform() * parentTrans; + Transform4x4f trans = getTransform() * parentTrans; renderChildren(trans); // text + cursor rendering // offset into our "text area" (padding) - trans.translation() += Eigen::Vector3f(getTextAreaPos().x(), getTextAreaPos().y(), 0); + trans.translation() += Vector3f(getTextAreaPos().x(), getTextAreaPos().y(), 0); - Eigen::Vector2i clipPos((int)trans.translation().x(), (int)trans.translation().y()); - Eigen::Vector3f dimScaled = trans * Eigen::Vector3f(getTextAreaSize().x(), getTextAreaSize().y(), 0); // use "text area" size for clipping - Eigen::Vector2i clipDim((int)dimScaled.x() - trans.translation().x(), (int)dimScaled.y() - trans.translation().y()); + Vector2i clipPos((int)trans.translation().x(), (int)trans.translation().y()); + Vector3f dimScaled = trans * Vector3f(getTextAreaSize().x(), getTextAreaSize().y(), 0); // use "text area" size for clipping + Vector2i clipDim((int)dimScaled.x() - trans.translation().x(), (int)dimScaled.y() - trans.translation().y()); Renderer::pushClipRect(clipPos, clipDim); - trans.translate(Eigen::Vector3f(-mScrollOffset.x(), -mScrollOffset.y(), 0)); - trans = roundMatrix(trans); + trans.translate(Vector3f(-mScrollOffset.x(), -mScrollOffset.y(), 0)); + trans.round(); Renderer::setMatrix(trans); @@ -271,7 +271,7 @@ void TextEditComponent::render(const Eigen::Affine3f& parentTrans) // draw cursor if(mEditing) { - Eigen::Vector2f cursorPos; + Vector2f cursorPos; if(isMultiline()) { cursorPos = mFont->getWrappedTextCursorOffset(mText, getTextAreaSize().x(), mCursor); @@ -290,14 +290,14 @@ bool TextEditComponent::isMultiline() return (getSize().y() > mFont->getHeight() * 1.25f); } -Eigen::Vector2f TextEditComponent::getTextAreaPos() const +Vector2f TextEditComponent::getTextAreaPos() const { - return Eigen::Vector2f(TEXT_PADDING_HORIZ / 2.0f, TEXT_PADDING_VERT / 2.0f); + return Vector2f(TEXT_PADDING_HORIZ / 2.0f, TEXT_PADDING_VERT / 2.0f); } -Eigen::Vector2f TextEditComponent::getTextAreaSize() const +Vector2f TextEditComponent::getTextAreaSize() const { - return Eigen::Vector2f(mSize.x() - TEXT_PADDING_HORIZ, mSize.y() - TEXT_PADDING_VERT); + return Vector2f(mSize.x() - TEXT_PADDING_HORIZ, mSize.y() - TEXT_PADDING_VERT); } std::vector TextEditComponent::getHelpPrompts() diff --git a/es-core/src/components/TextEditComponent.h b/es-core/src/components/TextEditComponent.h index 394c048ba4..78feefba73 100644 --- a/es-core/src/components/TextEditComponent.h +++ b/es-core/src/components/TextEditComponent.h @@ -15,7 +15,7 @@ class TextEditComponent : public GuiComponent void textInput(const char* text) override; bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; void onFocusGained() override; void onFocusLost() override; @@ -43,8 +43,8 @@ class TextEditComponent : public GuiComponent void moveCursor(int amt); bool isMultiline(); - Eigen::Vector2f getTextAreaPos() const; - Eigen::Vector2f getTextAreaSize() const; + Vector2f getTextAreaPos() const; + Vector2f getTextAreaSize() const; std::string mText; bool mFocused; @@ -54,7 +54,7 @@ class TextEditComponent : public GuiComponent int mCursorRepeatTimer; int mCursorRepeatDir; - Eigen::Vector2f mScrollOffset; + Vector2f mScrollOffset; NinePatchComponent mBox; diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index b942f2e03f..7ecb95c486 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -153,9 +153,9 @@ void VideoComponent::setOpacity(unsigned char opacity) mStaticImage.setOpacity(opacity); } -void VideoComponent::render(const Eigen::Affine3f& parentTrans) +void VideoComponent::render(const Transform4x4f& parentTrans) { - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); GuiComponent::renderChildren(trans); Renderer::setMatrix(trans); @@ -167,7 +167,7 @@ void VideoComponent::render(const Eigen::Affine3f& parentTrans) handleLooping(); } -void VideoComponent::renderSnapshot(const Eigen::Affine3f& parentTrans) +void VideoComponent::renderSnapshot(const Transform4x4f& parentTrans) { // This is the case where the video is not currently being displayed. Work out // if we need to display a static image @@ -189,26 +189,26 @@ void VideoComponent::applyTheme(const std::shared_ptr& theme, const s return; } - Eigen::Vector2f scale = getParent() ? getParent()->getSize() : Eigen::Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + Vector2f scale = getParent() ? getParent()->getSize() : Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); if ((properties & POSITION) && elem->has("pos")) { - Eigen::Vector2f denormalized = elem->get("pos").cwiseProduct(scale); - setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); - mStaticImage.setPosition(Eigen::Vector3f(denormalized.x(), denormalized.y(), 0)); + Vector2f denormalized = elem->get("pos") * scale; + setPosition(Vector3f(denormalized.x(), denormalized.y(), 0)); + mStaticImage.setPosition(Vector3f(denormalized.x(), denormalized.y(), 0)); } if(properties & ThemeFlags::SIZE) { if(elem->has("size")) - setResize(elem->get("size").cwiseProduct(scale)); + setResize(elem->get("size") * scale); else if(elem->has("maxSize")) - setMaxSize(elem->get("maxSize").cwiseProduct(scale)); + setMaxSize(elem->get("maxSize") * scale); } // position + size also implies origin if (((properties & ORIGIN) || ((properties & POSITION) && (properties & ThemeFlags::SIZE))) && elem->has("origin")) - setOrigin(elem->get("origin")); + setOrigin(elem->get("origin")); if(elem->has("default")) mConfig.defaultVideoPath = elem->get("default"); @@ -226,7 +226,7 @@ void VideoComponent::applyTheme(const std::shared_ptr& theme, const s if(elem->has("rotation")) setRotationDegrees(elem->get("rotation")); if(elem->has("rotationOrigin")) - setRotationOrigin(elem->get("rotationOrigin")); + setRotationOrigin(elem->get("rotationOrigin")); } if(properties & ThemeFlags::Z_INDEX && elem->has("zIndex")) diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index f5c1f01e16..e07c4f7b9e 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -52,8 +52,8 @@ class VideoComponent : public GuiComponent void onSizeChanged() override; void setOpacity(unsigned char opacity) override; - void render(const Eigen::Affine3f& parentTrans) override; - void renderSnapshot(const Eigen::Affine3f& parentTrans); + void render(const Transform4x4f& parentTrans) override; + void renderSnapshot(const Transform4x4f& parentTrans); virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; @@ -66,13 +66,13 @@ class VideoComponent : public GuiComponent // Can be set before or after a video is loaded. // setMaxSize() and setResize() are mutually exclusive. virtual void setResize(float width, float height) = 0; - inline void setResize(const Eigen::Vector2f& size) { setResize(size.x(), size.y()); } + inline void setResize(const Vector2f& size) { setResize(size.x(), size.y()); } // Resize the video to be as large as possible but fit within a box of this size. // Can be set before or after a video is loaded. // Never breaks the aspect ratio. setMaxSize() and setResize() are mutually exclusive. virtual void setMaxSize(float width, float height) = 0; - inline void setMaxSize(const Eigen::Vector2f& size) { setMaxSize(size.x(), size.y()); } + inline void setMaxSize(const Vector2f& size) { setMaxSize(size.x(), size.y()); } private: // Start the video Immediately @@ -94,7 +94,7 @@ class VideoComponent : public GuiComponent protected: unsigned mVideoWidth; unsigned mVideoHeight; - Eigen::Vector2f mTargetSize; + Vector2f mTargetSize; std::shared_ptr mTexture; float mFadeIn; std::string mStaticImagePath; diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 5d309dfa35..897b52ab45 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -32,7 +32,7 @@ VideoPlayerComponent::~VideoPlayerComponent() stopVideo(); } -void VideoPlayerComponent::render(const Eigen::Affine3f& parentTrans) +void VideoPlayerComponent::render(const Transform4x4f& parentTrans) { VideoComponent::render(parentTrans); diff --git a/es-core/src/components/VideoPlayerComponent.h b/es-core/src/components/VideoPlayerComponent.h index effb5942ba..7704106035 100644 --- a/es-core/src/components/VideoPlayerComponent.h +++ b/es-core/src/components/VideoPlayerComponent.h @@ -15,7 +15,7 @@ class VideoPlayerComponent : public VideoComponent VideoPlayerComponent(Window* window, std::string path); virtual ~VideoPlayerComponent(); - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; // Resize the video to fit this size. If one axis is zero, scale that axis to maintain aspect ratio. // If both are non-zero, potentially break the aspect ratio. If both are zero, no resizing. diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 8a67de8d1d..cc3fe15480 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -52,7 +52,7 @@ VideoVlcComponent::~VideoVlcComponent() void VideoVlcComponent::setResize(float width, float height) { - mTargetSize << width, height; + mTargetSize = Vector2f(width, height); mTargetIsMax = false; mStaticImage.setResize(width, height); resize(); @@ -60,7 +60,7 @@ void VideoVlcComponent::setResize(float width, float height) void VideoVlcComponent::setMaxSize(float width, float height) { - mTargetSize << width, height; + mTargetSize = Vector2f(width, height); mTargetIsMax = true; mStaticImage.setMaxSize(width, height); resize(); @@ -71,9 +71,9 @@ void VideoVlcComponent::resize() if(!mTexture) return; - const Eigen::Vector2f textureSize(mVideoWidth, mVideoHeight); + const Vector2f textureSize(mVideoWidth, mVideoHeight); - if(textureSize.isZero()) + if(textureSize == Vector2f::Zero()) return; // SVG rasterization is determined by height (see SVGResource.cpp), and rasterization is done in terms of pixels @@ -87,7 +87,7 @@ void VideoVlcComponent::resize() mSize = textureSize; - Eigen::Vector2f resizeScale((mTargetSize.x() / mSize.x()), (mTargetSize.y() / mSize.y())); + Vector2f resizeScale((mTargetSize.x() / mSize.x()), (mTargetSize.y() / mSize.y())); if(resizeScale.x() < resizeScale.y()) { @@ -105,7 +105,7 @@ void VideoVlcComponent::resize() }else{ // if both components are set, we just stretch // if no components are set, we don't resize at all - mSize = mTargetSize.isZero() ? textureSize : mTargetSize; + mSize = mTargetSize == Vector2f::Zero() ? textureSize : mTargetSize; // if only one component is set, we resize in a way that maintains aspect ratio // for SVG rasterization, we always calculate width from rounded height (see comment above) @@ -126,12 +126,12 @@ void VideoVlcComponent::resize() onSizeChanged(); } -void VideoVlcComponent::render(const Eigen::Affine3f& parentTrans) +void VideoVlcComponent::render(const Transform4x4f& parentTrans) { VideoComponent::render(parentTrans); float x, y; - Eigen::Affine3f trans = parentTrans * getTransform(); + Transform4x4f trans = parentTrans * getTransform(); GuiComponent::renderChildren(trans); Renderer::setMatrix(trans); @@ -151,9 +151,9 @@ void VideoVlcComponent::render(const Eigen::Affine3f& parentTrans) // Define a structure to contain the data for each vertex struct Vertex { - Eigen::Vector2f pos; - Eigen::Vector2f tex; - Eigen::Vector4f colour; + Vector2f pos; + Vector2f tex; + Vector4f colour; } vertices[6]; // We need two triangles to cover the rectangular area @@ -315,7 +315,7 @@ void VideoVlcComponent::startVideo() { if(!Settings::getInstance()->getBool("CaptionsCompatibility")) { - Eigen::Vector2f resizeScale((Renderer::getScreenWidth() / mVideoWidth), (Renderer::getScreenHeight() / mVideoHeight)); + Vector2f resizeScale((Renderer::getScreenWidth() / mVideoWidth), (Renderer::getScreenHeight() / mVideoHeight)); if(resizeScale.x() < resizeScale.y()) { diff --git a/es-core/src/components/VideoVlcComponent.h b/es-core/src/components/VideoVlcComponent.h index 796c970da2..98adf80adf 100644 --- a/es-core/src/components/VideoVlcComponent.h +++ b/es-core/src/components/VideoVlcComponent.h @@ -32,7 +32,7 @@ class VideoVlcComponent : public VideoComponent VideoVlcComponent(Window* window, std::string subtitles); virtual ~VideoVlcComponent(); - void render(const Eigen::Affine3f& parentTrans) override; + void render(const Transform4x4f& parentTrans) override; // Resize the video to fit this size. If one axis is zero, scale that axis to maintain aspect ratio. diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index b883885c10..536553705a 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -14,8 +14,6 @@ #define HOLD_TIME 1000 -using namespace Eigen; - namespace fs = boost::filesystem; GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun, const std::function& doneCallback) : GuiComponent(window), mFirstRun(firstRun), diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index 337c2ba7e7..bd51f2954e 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -133,8 +133,6 @@ static const char* inputIcon[inputCount] = //MasterVolUp and MasterVolDown are also hooked up, but do not appear on this screen. //If you want, you can manually add them to es_input.cfg. -using namespace Eigen; - #define HOLD_TO_SKIP_MS 1000 GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function& okCallback) : GuiComponent(window), diff --git a/es-core/src/guis/GuiMsgBox.cpp b/es-core/src/guis/GuiMsgBox.cpp index 73f4e07a65..68c2a2b080 100644 --- a/es-core/src/guis/GuiMsgBox.cpp +++ b/es-core/src/guis/GuiMsgBox.cpp @@ -12,13 +12,13 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, const std::string& name1, const std::function& func1, const std::string& name2, const std::function& func2, const std::string& name3, const std::function& func3) : GuiComponent(window), - mBackground(window, ":/frame.png"), mGrid(window, Eigen::Vector2i(1, 2)) + mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 2)) { float width = Renderer::getScreenWidth() * 0.6f; // max width float minWidth = Renderer::getScreenWidth() * 0.3f; // minimum width mMsg = std::make_shared(mWindow, text, Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_CENTER); - mGrid.setEntry(mMsg, Eigen::Vector2i(0, 0), false, false); + mGrid.setEntry(mMsg, Vector2i(0, 0), false, false); // create the buttons mButtons.push_back(std::make_shared(mWindow, name1, name1, std::bind(&GuiMsgBox::deleteMeAndCall, this, func1))); @@ -44,7 +44,7 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, // put the buttons into a ComponentGrid mButtonGrid = makeButtonGrid(mWindow, mButtons); - mGrid.setEntry(mButtonGrid, Eigen::Vector2i(0, 1), true, false, Eigen::Vector2i(1, 1), GridFlags::BORDER_TOP); + mGrid.setEntry(mButtonGrid, Vector2i(0, 1), true, false, Vector2i(1, 1), GridFlags::BORDER_TOP); // decide final width if(mMsg->getSize().x() < width && mButtonGrid->getSize().x() < width) @@ -94,7 +94,7 @@ void GuiMsgBox::onSizeChanged() mMsg->setSize(mSize.x() - HORIZONTAL_PADDING_PX*2, mGrid.getRowHeight(0)); mGrid.onSizeChanged(); - mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + mBackground.fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); } void GuiMsgBox::deleteMeAndCall(const std::function& func) diff --git a/es-core/src/guis/GuiTextEditPopup.cpp b/es-core/src/guis/GuiTextEditPopup.cpp index dcb4a47f74..06cf20a276 100644 --- a/es-core/src/guis/GuiTextEditPopup.cpp +++ b/es-core/src/guis/GuiTextEditPopup.cpp @@ -1,8 +1,6 @@ #include "guis/GuiTextEditPopup.h" #include "components/MenuComponent.h" -using namespace Eigen; - GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, const std::string& initValue, const std::function& okCallback, bool multiLine, const char* acceptBtnText) : GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 3)), mMultiLine(multiLine) @@ -39,7 +37,7 @@ GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, con void GuiTextEditPopup::onSizeChanged() { - mBackground.fitTo(mSize, Eigen::Vector3f::Zero(), Eigen::Vector2f(-32, -32)); + mBackground.fitTo(mSize, Vector3f::Zero(), Vector2f(-32, -32)); mText->setSize(mSize.x() - 40, mText->getSize().y()); diff --git a/es-core/src/math/Matrix3x3f.h b/es-core/src/math/Matrix3x3f.h new file mode 100644 index 0000000000..dbdf1371ee --- /dev/null +++ b/es-core/src/math/Matrix3x3f.h @@ -0,0 +1,77 @@ +#ifndef _MATRIX3X3F_H_ +#define _MATRIX3X3F_H_ + +#include +#include + +class Matrix3x3f +{ +public: + + Matrix3x3f() { } + Matrix3x3f(const Vector3f& r0, const Vector3f& r1, const Vector3f& r2) : mR0(r0), mR1(r1), mR2(r2) { } + + const bool operator==(const Matrix3x3f& other) const { return ((mR0 == other.mR0) && (mR1 == other.mR1) && (mR2 == other.mR2)); } + const bool operator!=(const Matrix3x3f& other) const { return ((mR0 != other.mR0) || (mR1 != other.mR1) || (mR2 != other.mR2)); } + + const Matrix3x3f operator*(const Matrix3x3f& other) const + { + const float* tm = (float*)this; + const float* om = (float*)&other; + + return + { + { + tm[0] * om[0] + tm[1] * om[3] + tm[2] * om[6], + tm[0] * om[1] + tm[1] * om[4] + tm[2] * om[7], + tm[0] * om[2] + tm[1] * om[5] + tm[2] * om[8] + }, + { + tm[3] * om[0] + tm[4] * om[3] + tm[5] * om[6], + tm[3] * om[1] + tm[4] * om[4] + tm[5] * om[7], + tm[3] * om[2] + tm[4] * om[5] + tm[5] * om[8] + }, + { + tm[6] * om[0] + tm[7] * om[3] + tm[8] * om[6], + tm[6] * om[1] + tm[7] * om[4] + tm[8] * om[7], + tm[6] * om[2] + tm[7] * om[5] + tm[8] * om[8] + } + }; + } + + const Vector3f operator*(const Vector3f& other) const + { + const float* tm = (float*)this; + const float* ov = (float*)&other; + + return + { + tm[0] * ov[0] + tm[3] * ov[1] + tm[6] * ov[2], + tm[1] * ov[0] + tm[4] * ov[1] + tm[7] * ov[2], + tm[2] * ov[0] + tm[5] * ov[1] + tm[8] * ov[2] + }; + } + + Matrix3x3f& operator*=(const Matrix3x3f& other) { *this = *this * other; return *this; } + + float& operator[](const int index) { assert(index < 9 && "index out of range"); return ((float*)&mR0)[index]; } + const float& operator[](const int index) const { assert(index < 9 && "index out of range"); return ((float*)&mR0)[index]; } + + Vector3f& r0() { return mR0; } + Vector3f& r1() { return mR1; } + Vector3f& r2() { return mR2; } + const Vector3f& r0() const { return mR0; } + const Vector3f& r1() const { return mR1; } + const Vector3f& r2() const { return mR2; } + + static const Matrix3x3f Identity() { return { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }; } + +protected: + + Vector3f mR0; + Vector3f mR1; + Vector3f mR2; + +}; + +#endif diff --git a/es-core/src/math/Matrix4x4f.h b/es-core/src/math/Matrix4x4f.h new file mode 100644 index 0000000000..4cd68ba9f9 --- /dev/null +++ b/es-core/src/math/Matrix4x4f.h @@ -0,0 +1,179 @@ +#ifndef _MATRIX4X4F_H_ +#define _MATRIX4X4F_H_ + +#include +#include +#include + +class Matrix4x4f +{ +public: + + friend class Transform4x4f; + + Matrix4x4f() { } + Matrix4x4f(const Vector4f& r0, const Vector4f& r1, const Vector4f& r2, const Vector4f& r3) : mR0(r0), mR1(r1), mR2(r2), mR3(r3) { } + + const bool operator==(const Matrix4x4f& other) const { return ((mR0 == other.mR0) && (mR1 == other.mR1) && (mR2 == other.mR2) && (mR3 == other.mR3)); } + const bool operator!=(const Matrix4x4f& other) const { return ((mR0 != other.mR0) || (mR1 != other.mR1) || (mR2 != other.mR2) || (mR3 != other.mR3)); } + + const Matrix4x4f operator*(const Matrix4x4f& other) const + { + const float* tm = (float*)this; + const float* om = (float*)&other; + + return + { + { + tm[ 0] * om[ 0] + tm[ 1] * om[ 4] + tm[ 2] * om[ 8] + tm[ 3] * om[12], + tm[ 0] * om[ 1] + tm[ 1] * om[ 5] + tm[ 2] * om[ 9] + tm[ 3] * om[13], + tm[ 0] * om[ 2] + tm[ 1] * om[ 6] + tm[ 2] * om[10] + tm[ 3] * om[14], + tm[ 0] * om[ 3] + tm[ 1] * om[ 7] + tm[ 2] * om[11] + tm[ 3] * om[15] + }, + { + tm[ 4] * om[ 0] + tm[ 5] * om[ 4] + tm[ 6] * om[ 8] + tm[ 7] * om[12], + tm[ 4] * om[ 1] + tm[ 5] * om[ 5] + tm[ 6] * om[ 9] + tm[ 7] * om[13], + tm[ 4] * om[ 2] + tm[ 5] * om[ 6] + tm[ 6] * om[10] + tm[ 7] * om[14], + tm[ 4] * om[ 3] + tm[ 5] * om[ 7] + tm[ 6] * om[11] + tm[ 7] * om[15] + }, + { + tm[ 8] * om[ 0] + tm[ 9] * om[ 4] + tm[10] * om[ 8] + tm[11] * om[12], + tm[ 8] * om[ 1] + tm[ 9] * om[ 5] + tm[10] * om[ 9] + tm[11] * om[13], + tm[ 8] * om[ 2] + tm[ 9] * om[ 6] + tm[10] * om[10] + tm[11] * om[14], + tm[ 8] * om[ 3] + tm[ 9] * om[ 7] + tm[10] * om[11] + tm[11] * om[15] + }, + { + tm[12] * om[ 0] + tm[13] * om[ 4] + tm[14] * om[ 8] + tm[15] * om[12], + tm[12] * om[ 1] + tm[13] * om[ 5] + tm[14] * om[ 9] + tm[15] * om[13], + tm[12] * om[ 2] + tm[13] * om[ 6] + tm[14] * om[10] + tm[15] * om[14], + tm[12] * om[ 3] + tm[13] * om[ 7] + tm[14] * om[11] + tm[15] * om[15] + } + }; + } + + const Matrix4x4f operator*(const Matrix3x3f& other) const + { + const float* tm = (float*)this; + const float* om = (float*)&other; + + return + { + { + tm[ 0] * om[0] + tm[ 1] * om[3] + tm[ 2] * om[6], + tm[ 0] * om[1] + tm[ 1] * om[4] + tm[ 2] * om[7], + tm[ 0] * om[2] + tm[ 1] * om[5] + tm[ 2] * om[8], + tm[ 3] + }, + { + tm[ 4] * om[0] + tm[ 5] * om[3] + tm[ 6] * om[6], + tm[ 4] * om[1] + tm[ 5] * om[4] + tm[ 6] * om[7], + tm[ 4] * om[2] + tm[ 5] * om[5] + tm[ 6] * om[8], + tm[ 7] + }, + { + tm[ 8] * om[0] + tm[ 9] * om[3] + tm[10] * om[6], + tm[ 8] * om[1] + tm[ 9] * om[4] + tm[10] * om[7], + tm[ 8] * om[2] + tm[ 9] * om[5] + tm[10] * om[8], + tm[11] + }, + { + tm[12], + tm[13], + tm[14], + tm[15] + } + }; + } + + Matrix4x4f& operator*=(const Matrix4x4f& other) { *this = *this * other; return *this; } + Matrix4x4f& operator*=(const Matrix3x3f& other) { *this = *this * other; return *this; } + + float& operator[](const int index) { assert(index < 16 && "index out of range"); return ((float*)&mR0)[index]; } + const float& operator[](const int index) const { assert(index < 16 && "index out of range"); return ((float*)&mR0)[index]; } + + Vector4f& r0() { return mR0; } + Vector4f& r1() { return mR1; } + Vector4f& r2() { return mR2; } + Vector4f& r3() { return mR3; } + const Vector4f& r0() const { return mR0; } + const Vector4f& r1() const { return mR1; } + const Vector4f& r2() const { return mR2; } + const Vector4f& r3() const { return mR3; } + + Matrix4x4f& invert(const Matrix4x4f& other) + { + auto Determinant2x2 = [=](const float x1, const float x2, + const float y1, const float y2) + { + return x1 * y2 - x2 * y1; + }; + + auto Determinant3x3 = [=](const float x1, const float x2, const float x3, + const float y1, const float y2, const float y3, + const float z1, const float z2, const float z3) + { + return x1 * Determinant2x2(y2, y3, z2, z3) - + y1 * Determinant2x2(x2, x3, z2, z3) + + z1 * Determinant2x2(x2, x3, y2, y3); + }; + + float* tm = (float*)this; + const float* om = (float*)&other; + + tm[ 0] = Determinant3x3(om[ 5], om[ 6], om[ 7], om[ 9], om[10], om[11], om[13], om[14], om[15]); + tm[ 1] = -Determinant3x3(om[ 1], om[ 2], om[ 3], om[ 9], om[10], om[11], om[13], om[14], om[15]); + tm[ 2] = Determinant3x3(om[ 1], om[ 2], om[ 3], om[ 5], om[ 6], om[ 7], om[13], om[14], om[15]); + tm[ 3] = -Determinant3x3(om[ 1], om[ 2], om[ 3], om[ 5], om[ 6], om[ 7], om[ 9], om[10], om[11]); + tm[ 4] = -Determinant3x3(om[ 4], om[ 6], om[ 7], om[ 8], om[10], om[11], om[12], om[14], om[15]); + tm[ 5] = Determinant3x3(om[ 0], om[ 2], om[ 3], om[ 8], om[10], om[11], om[12], om[14], om[15]); + tm[ 6] = -Determinant3x3(om[ 0], om[ 2], om[ 3], om[ 4], om[ 6], om[ 7], om[12], om[14], om[15]); + tm[ 7] = Determinant3x3(om[ 0], om[ 2], om[ 3], om[ 4], om[ 6], om[ 7], om[ 8], om[10], om[11]); + tm[ 8] = Determinant3x3(om[ 4], om[ 5], om[ 7], om[ 8], om[ 9], om[11], om[12], om[13], om[15]); + tm[ 9] = -Determinant3x3(om[ 0], om[ 1], om[ 3], om[ 8], om[ 9], om[11], om[12], om[13], om[15]); + tm[10] = Determinant3x3(om[ 0], om[ 1], om[ 3], om[ 4], om[ 5], om[ 7], om[12], om[13], om[15]); + tm[11] = -Determinant3x3(om[ 0], om[ 1], om[ 3], om[ 4], om[ 5], om[ 7], om[ 8], om[ 9], om[11]); + tm[12] = -Determinant3x3(om[ 4], om[ 5], om[ 6], om[ 8], om[ 9], om[10], om[12], om[13], om[14]); + tm[13] = Determinant3x3(om[ 0], om[ 1], om[ 2], om[ 8], om[ 9], om[10], om[12], om[13], om[14]); + tm[14] = -Determinant3x3(om[ 0], om[ 1], om[ 2], om[ 4], om[ 5], om[ 6], om[12], om[13], om[14]); + tm[15] = Determinant3x3(om[ 0], om[ 1], om[ 2], om[ 4], om[ 5], om[ 6], om[ 8], om[ 9], om[10]); + + float Determinant = om[ 0] * tm[ 0] + + om[ 4] * tm[ 1] + + om[ 8] * tm[ 2] + + om[12] * tm[ 3]; + + if(Determinant != 0) + Determinant = 1 / Determinant; + + mR0 *= Determinant; + mR1 *= Determinant; + mR2 *= Determinant; + mR3 *= Determinant; + + return *this; + } + + Matrix4x4f& invert() + { + return invert(Matrix4x4f(*this)); + } + + Matrix4x4f inverse() + { + Matrix4x4f m; + m.invert(*this); + return m; + } + + static const Matrix4x4f Identity() { return { { 1, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 1, 0 }, { 0, 0, 0, 1 } }; } + +protected: + + Vector4f mR0; + Vector4f mR1; + Vector4f mR2; + Vector4f mR3; + +}; + +#endif diff --git a/es-core/src/math/Rotation3x3f.h b/es-core/src/math/Rotation3x3f.h new file mode 100644 index 0000000000..186eb6ade3 --- /dev/null +++ b/es-core/src/math/Rotation3x3f.h @@ -0,0 +1,39 @@ +#ifndef _ROTATION3X3F_H_ +#define _ROTATION3X3F_H_ + +class Rotation3x3f : public Matrix3x3f +{ +public: + + Rotation3x3f(const float angle, const Vector3f& axis) + { + float* tm = (float*)this; + const float* av = (float*)&axis; + + const float s = sin(-angle); + const float c = cos(-angle); + const float t = 1 - c; + const float x = av[0]; + const float y = av[1]; + const float z = av[2]; + const float tx = t * x; + const float ty = t * y; + const float tz = t * z; + const float sx = s * x; + const float sy = s * y; + const float sz = s * z; + + tm[0] = tx * x + c; + tm[1] = tx * y - sz; + tm[2] = tx * z + sy; + tm[3] = ty * x + sz; + tm[4] = ty * y + c; + tm[5] = ty * z - sy; + tm[6] = tz * x - sy; + tm[7] = tz * y + sx; + tm[8] = tz * z + c; + }; + +}; + +#endif diff --git a/es-core/src/math/Scale3x3f.h b/es-core/src/math/Scale3x3f.h new file mode 100644 index 0000000000..8471cfe659 --- /dev/null +++ b/es-core/src/math/Scale3x3f.h @@ -0,0 +1,26 @@ +#ifndef _SCALE3X3F_H_ +#define _SCALE3X3F_H_ + +class Scale3x3f : public Matrix3x3f +{ +public: + + Scale3x3f(const Vector3f& scale) + { + float* tm = (float*)this; + const float* sv = (float*)&scale; + + tm[0] = sv[0]; + tm[1] = 0; + tm[2] = 0; + tm[3] = 0; + tm[4] = sv[1]; + tm[5] = 0; + tm[6] = 0; + tm[7] = 0; + tm[8] = sv[2]; + }; + +}; + +#endif diff --git a/es-core/src/math/Transform4x4f.h b/es-core/src/math/Transform4x4f.h new file mode 100644 index 0000000000..492771c447 --- /dev/null +++ b/es-core/src/math/Transform4x4f.h @@ -0,0 +1,126 @@ +#ifndef _TRANSFORM4X4F_H_ +#define _TRANSFORM4X4F_H_ + +#include +#include + +class Transform4x4f : public Matrix4x4f +{ +public: + + Transform4x4f() { } + Transform4x4f(const Matrix4x4f& m) : Matrix4x4f(m) { } + Transform4x4f(const Vector4f& r0, const Vector4f& r1, const Vector4f& r2, const Vector4f& r3) : Matrix4x4f(r0, r1, r2, r3) { } + + const Transform4x4f operator*(const Matrix4x4f& other) const + { + const float* tm = (float*)this; + const float* om = (float*)&other; + + return + { + { + tm[ 0] * om[ 0] + tm[ 1] * om[ 4] + tm[ 2] * om[ 8], + tm[ 0] * om[ 1] + tm[ 1] * om[ 5] + tm[ 2] * om[ 9], + tm[ 0] * om[ 2] + tm[ 1] * om[ 6] + tm[ 2] * om[10], + 0 + }, + { + tm[ 4] * om[ 0] + tm[ 5] * om[ 4] + tm[ 6] * om[ 8], + tm[ 4] * om[ 1] + tm[ 5] * om[ 5] + tm[ 6] * om[ 9], + tm[ 4] * om[ 2] + tm[ 5] * om[ 6] + tm[ 6] * om[10], + 0 + }, + { + tm[ 8] * om[ 0] + tm[ 9] * om[ 4] + tm[10] * om[ 8], + tm[ 8] * om[ 1] + tm[ 9] * om[ 5] + tm[10] * om[ 9], + tm[ 8] * om[ 2] + tm[ 9] * om[ 6] + tm[10] * om[10], + 0 + }, + { + tm[ 0] * om[12] + tm[ 4] * om[13] + tm[ 8] * om[14] + tm[12], + tm[ 1] * om[12] + tm[ 5] * om[13] + tm[ 9] * om[14] + tm[13], + tm[ 2] * om[12] + tm[ 6] * om[13] + tm[10] * om[14] + tm[14], + 1 + } + }; + } + + const Transform4x4f operator*(const Matrix3x3f& other) const + { + const float* tm = (float*)this; + const float* om = (float*)&other; + + return + { + { + tm[ 0] * om[0] + tm[ 1] * om[3] + tm[ 2] * om[6], + tm[ 0] * om[1] + tm[ 1] * om[4] + tm[ 2] * om[7], + tm[ 0] * om[2] + tm[ 1] * om[5] + tm[ 2] * om[8], + 0 + }, + { + tm[ 4] * om[0] + tm[ 5] * om[3] + tm[ 6] * om[6], + tm[ 4] * om[1] + tm[ 5] * om[4] + tm[ 6] * om[7], + tm[ 4] * om[2] + tm[ 5] * om[5] + tm[ 6] * om[8], + 0 + }, + { + tm[ 8] * om[0] + tm[ 9] * om[3] + tm[10] * om[6], + tm[ 8] * om[1] + tm[ 9] * om[4] + tm[10] * om[7], + tm[ 8] * om[2] + tm[ 9] * om[5] + tm[10] * om[8], + 0 + }, + { + tm[12], + tm[13], + tm[14], + 1 + } + }; + } + + const Vector3f operator*(const Vector3f& other) const + { + const float* tm = (float*)this; + const float* ov = (float*)&other; + + return + { + tm[ 0] * ov[0] + tm[ 4] * ov[1] + tm[ 8] * ov[2] + tm[12], + tm[ 1] * ov[0] + tm[ 5] * ov[1] + tm[ 9] * ov[2] + tm[13], + tm[ 2] * ov[0] + tm[ 6] * ov[1] + tm[10] * ov[2] + tm[14] + }; + } + + Transform4x4f& operator*=(const Matrix4x4f& other) { *this = *this * other; return *this; } + Transform4x4f& operator*=(const Matrix3x3f& other) { *this = *this * other; return *this; } + + inline Vector3f& translation() { return mR3.v3(); } + inline const Vector3f& translation() const { return mR3.v3(); } + + inline Transform4x4f& translate(const Vector3f& translation) + { + float* tm = (float*)this; + const float* tv = (float*)&translation; + + tm[12] += tm[ 0] * tv[0] + tm[ 4] * tv[1] + tm[ 8] * tv[2]; + tm[13] += tm[ 1] * tv[0] + tm[ 5] * tv[1] + tm[ 9] * tv[2]; + tm[14] += tm[ 2] * tv[0] + tm[ 6] * tv[1] + tm[10] * tv[2]; + + return *this; + } + + inline Transform4x4f& round() + { + float* tm = (float*)this; + + tm[12] = (int)(tm[12] + 0.5f); + tm[13] = (int)(tm[13] + 0.5f); + + return *this; + } + +}; + +#endif diff --git a/es-core/src/math/Vector2f.h b/es-core/src/math/Vector2f.h new file mode 100644 index 0000000000..13f3454268 --- /dev/null +++ b/es-core/src/math/Vector2f.h @@ -0,0 +1,65 @@ +#ifndef _VECTOR2F_H_ +#define _VECTOR2F_H_ + +#include + +class Vector3f; +class Vector4f; + +class Vector2f +{ +public: + + Vector2f() { } + Vector2f(const float f) : mX(f), mY(f) { } + Vector2f(const float x, const float y) : mX(x), mY(y) { } + explicit Vector2f(const Vector3f& v) : mX(((Vector2f&)v).mX), mY(((Vector2f&)v).mY) { } + explicit Vector2f(const Vector4f& v) : mX(((Vector2f&)v).mX), mY(((Vector2f&)v).mY) { } + + const bool operator==(const Vector2f& other) const { return ((mX == other.mX) && (mY == other.mY)); } + const bool operator!=(const Vector2f& other) const { return ((mX != other.mX) || (mY != other.mY)); } + + const Vector2f operator+(const Vector2f& other) const { return { mX + other.mX, mY + other.mY }; } + const Vector2f operator-(const Vector2f& other) const { return { mX - other.mX, mY - other.mY }; } + const Vector2f operator*(const Vector2f& other) const { return { mX * other.mX, mY * other.mY }; } + const Vector2f operator/(const Vector2f& other) const { return { mX / other.mX, mY / other.mY }; } + + const Vector2f operator+(const float& other) const { return { mX + other, mY + other }; } + const Vector2f operator-(const float& other) const { return { mX - other, mY - other }; } + const Vector2f operator*(const float& other) const { return { mX * other, mY * other }; } + const Vector2f operator/(const float& other) const { return { mX / other, mY / other }; } + + const Vector2f operator-() const { return { -mX , -mY }; } + + Vector2f& operator+=(const Vector2f& other) { *this = *this + other; return *this; } + Vector2f& operator-=(const Vector2f& other) { *this = *this - other; return *this; } + Vector2f& operator*=(const Vector2f& other) { *this = *this * other; return *this; } + Vector2f& operator/=(const Vector2f& other) { *this = *this / other; return *this; } + + Vector2f& operator+=(const float& other) { *this = *this + other; return *this; } + Vector2f& operator-=(const float& other) { *this = *this - other; return *this; } + Vector2f& operator*=(const float& other) { *this = *this * other; return *this; } + Vector2f& operator/=(const float& other) { *this = *this / other; return *this; } + + float& operator[](const int index) { assert(index < 2 && "index out of range"); return (&mX)[index]; } + const float& operator[](const int index) const { assert(index < 2 && "index out of range"); return (&mX)[index]; } + + float& x() { return mX; } + float& y() { return mY; } + const float& x() const { return mX; } + const float& y() const { return mY; } + + inline Vector2f& round() { mX = (int)(mX + 0.5f); mY = (int)(mY + 0.5f); return *this; } + + static const Vector2f Zero() { return { 0, 0 }; } + static const Vector2f UnitX() { return { 1, 0 }; } + static const Vector2f UnitY() { return { 0, 1 }; } + +private: + + float mX; + float mY; + +}; + +#endif diff --git a/es-core/src/math/Vector2i.h b/es-core/src/math/Vector2i.h new file mode 100644 index 0000000000..4ba51498df --- /dev/null +++ b/es-core/src/math/Vector2i.h @@ -0,0 +1,58 @@ +#ifndef _VECTOR2I_H_ +#define _VECTOR2I_H_ + +#include + +class Vector2i +{ +public: + + Vector2i() { } + Vector2i(const int i) : mX(i), mY(i) { } + Vector2i(const int x, const int y) : mX(x), mY(y) { } + + const bool operator==(const Vector2i& other) const { return ((mX == other.mX) && (mY == other.mY)); } + const bool operator!=(const Vector2i& other) const { return ((mX != other.mX) || (mY != other.mY)); } + + const Vector2i operator+(const Vector2i& other) const { return { mX + other.mX, mY + other.mY }; } + const Vector2i operator-(const Vector2i& other) const { return { mX - other.mX, mY - other.mY }; } + const Vector2i operator*(const Vector2i& other) const { return { mX * other.mX, mY * other.mY }; } + const Vector2i operator/(const Vector2i& other) const { return { mX / other.mX, mY / other.mY }; } + + const Vector2i operator+(const int& other) const { return { mX + other, mY + other }; } + const Vector2i operator-(const int& other) const { return { mX - other, mY - other }; } + const Vector2i operator*(const int& other) const { return { mX * other, mY * other }; } + const Vector2i operator/(const int& other) const { return { mX / other, mY / other }; } + + const Vector2i operator-() const { return { -mX , -mY }; } + + Vector2i& operator+=(const Vector2i& other) { *this = *this + other; return *this; } + Vector2i& operator-=(const Vector2i& other) { *this = *this - other; return *this; } + Vector2i& operator*=(const Vector2i& other) { *this = *this * other; return *this; } + Vector2i& operator/=(const Vector2i& other) { *this = *this / other; return *this; } + + Vector2i& operator+=(const int& other) { *this = *this + other; return *this; } + Vector2i& operator-=(const int& other) { *this = *this - other; return *this; } + Vector2i& operator*=(const int& other) { *this = *this * other; return *this; } + Vector2i& operator/=(const int& other) { *this = *this / other; return *this; } + + int& operator[](const int index) { assert(index < 2 && "index out of range"); return (&mX)[index]; } + const int& operator[](const int index) const { assert(index < 2 && "index out of range"); return (&mX)[index]; } + + int& x() { return mX; } + int& y() { return mY; } + const int& x() const { return mX; } + const int& y() const { return mY; } + + static const Vector2i Zero() { return { 0, 0 }; } + static const Vector2i UnitX() { return { 1, 0 }; } + static const Vector2i UnitY() { return { 0, 1 }; } + +private: + + int mX; + int mY; + +}; + +#endif diff --git a/es-core/src/math/Vector3f.h b/es-core/src/math/Vector3f.h new file mode 100644 index 0000000000..bef670902c --- /dev/null +++ b/es-core/src/math/Vector3f.h @@ -0,0 +1,73 @@ +#ifndef _VECTOR3F_H_ +#define _VECTOR3F_H_ + +#include + +class Vector2f; +class Vector4f; + +class Vector3f +{ +public: + + Vector3f() { } + Vector3f(const float f) : mX(f), mY(f), mZ(f) { } + Vector3f(const float x, const float y, const float z) : mX(x), mY(y), mZ(z) { } + explicit Vector3f(const Vector2f& v) : mX(((Vector3f&)v).mX), mY(((Vector3f&)v).mY), mZ(0) { } + explicit Vector3f(const Vector2f& v, const float z) : mX(((Vector3f&)v).mX), mY(((Vector3f&)v).mY), mZ(z) { } + explicit Vector3f(const Vector4f& v) : mX(((Vector3f&)v).mX), mY(((Vector3f&)v).mY), mZ(((Vector3f&)v).mZ) { } + + const bool operator==(const Vector3f& other) const { return ((mX == other.mX) && (mY == other.mY) && (mZ == other.mZ)); } + const bool operator!=(const Vector3f& other) const { return ((mX != other.mX) || (mY != other.mY) || (mZ != other.mZ)); } + + const Vector3f operator+(const Vector3f& other) const { return { mX + other.mX, mY + other.mY, mZ + other.mZ }; } + const Vector3f operator-(const Vector3f& other) const { return { mX - other.mX, mY - other.mY, mZ - other.mZ }; } + const Vector3f operator*(const Vector3f& other) const { return { mX * other.mX, mY * other.mY, mZ * other.mZ }; } + const Vector3f operator/(const Vector3f& other) const { return { mX / other.mX, mY / other.mY, mZ / other.mZ }; } + + const Vector3f operator+(const float& other) const { return { mX + other, mY + other, mZ + other }; } + const Vector3f operator-(const float& other) const { return { mX - other, mY - other, mZ - other }; } + const Vector3f operator*(const float& other) const { return { mX * other, mY * other, mZ * other }; } + const Vector3f operator/(const float& other) const { return { mX / other, mY / other, mZ / other }; } + + const Vector3f operator-() const { return { -mX , -mY, -mZ }; } + + Vector3f& operator+=(const Vector3f& other) { *this = *this + other; return *this; } + Vector3f& operator-=(const Vector3f& other) { *this = *this - other; return *this; } + Vector3f& operator*=(const Vector3f& other) { *this = *this * other; return *this; } + Vector3f& operator/=(const Vector3f& other) { *this = *this / other; return *this; } + + Vector3f& operator+=(const float& other) { *this = *this + other; return *this; } + Vector3f& operator-=(const float& other) { *this = *this - other; return *this; } + Vector3f& operator*=(const float& other) { *this = *this * other; return *this; } + Vector3f& operator/=(const float& other) { *this = *this / other; return *this; } + + float& operator[](const int index) { assert(index < 3 && "index out of range"); return (&mX)[index]; } + const float& operator[](const int index) const { assert(index < 3 && "index out of range"); return (&mX)[index]; } + + float& x() { return mX; } + float& y() { return mY; } + float& z() { return mZ; } + const float& x() const { return mX; } + const float& y() const { return mY; } + const float& z() const { return mZ; } + + inline Vector2f& v2() { return *(Vector2f*)this; } + inline const Vector2f& v2() const { return *(Vector2f*)this; } + + inline Vector3f& round() { mX = (int)(mX + 0.5f); mY = (int)(mY + 0.5f); mZ = (int)(mZ + 0.5f); return *this; } + + static const Vector3f Zero() { return { 0, 0, 0 }; } + static const Vector3f UnitX() { return { 1, 0, 0 }; } + static const Vector3f UnitY() { return { 0, 1, 0 }; } + static const Vector3f UnitZ() { return { 0, 0, 1 }; } + +private: + + float mX; + float mY; + float mZ; + +}; + +#endif diff --git a/es-core/src/math/Vector4f.h b/es-core/src/math/Vector4f.h new file mode 100644 index 0000000000..2d5181da77 --- /dev/null +++ b/es-core/src/math/Vector4f.h @@ -0,0 +1,82 @@ +#ifndef _VECTOR4F_H_ +#define _VECTOR4F_H_ + +#include + +class Vector2f; +class Vector3f; + +class Vector4f +{ +public: + + Vector4f() { } + Vector4f(const float f) : mX(f), mY(f), mZ(f), mW(f) { } + Vector4f(const float x, const float y, const float z, const float w) : mX(x), mY(y), mZ(z), mW(w) { } + explicit Vector4f(const Vector2f& v) : mX(((Vector4f&)v).mX), mY(((Vector4f&)v).mY), mZ(0), mW(0) { } + explicit Vector4f(const Vector2f& v, const float z) : mX(((Vector4f&)v).mX), mY(((Vector4f&)v).mY), mZ(z), mW(0) { } + explicit Vector4f(const Vector2f& v, const float z, const float w) : mX(((Vector4f&)v).mX), mY(((Vector4f&)v).mY), mZ(z), mW(w) { } + explicit Vector4f(const Vector3f& v) : mX(((Vector4f&)v).mX), mY(((Vector4f&)v).mY), mZ(((Vector4f&)v).mZ), mW(0) { } + explicit Vector4f(const Vector3f& v, const float w) : mX(((Vector4f&)v).mX), mY(((Vector4f&)v).mY), mZ(((Vector4f&)v).mZ), mW(w) { } + + const bool operator==(const Vector4f& other) const { return ((mX == other.mX) && (mY == other.mY) && (mZ == other.mZ) && (mW == other.mW)); } + const bool operator!=(const Vector4f& other) const { return ((mX != other.mX) || (mY != other.mY) || (mZ != other.mZ) || (mW != other.mW)); } + + const Vector4f operator+(const Vector4f& other) const { return { mX + other.mX, mY + other.mY, mZ + other.mZ, mW + other.mW }; } + const Vector4f operator-(const Vector4f& other) const { return { mX - other.mX, mY - other.mY, mZ - other.mZ, mW - other.mW }; } + const Vector4f operator*(const Vector4f& other) const { return { mX * other.mX, mY * other.mY, mZ * other.mZ, mW * other.mW }; } + const Vector4f operator/(const Vector4f& other) const { return { mX / other.mX, mY / other.mY, mZ / other.mZ, mW / other.mW }; } + + const Vector4f operator+(const float& other) const { return { mX + other, mY + other, mZ + other, mW + other }; } + const Vector4f operator-(const float& other) const { return { mX - other, mY - other, mZ - other, mW - other }; } + const Vector4f operator*(const float& other) const { return { mX * other, mY * other, mZ * other, mW * other }; } + const Vector4f operator/(const float& other) const { return { mX / other, mY / other, mZ / other, mW / other }; } + + const Vector4f operator-() const { return {-mX , -mY, -mZ, -mW }; } + + Vector4f& operator+=(const Vector4f& other) { *this = *this + other; return *this; } + Vector4f& operator-=(const Vector4f& other) { *this = *this - other; return *this; } + Vector4f& operator*=(const Vector4f& other) { *this = *this * other; return *this; } + Vector4f& operator/=(const Vector4f& other) { *this = *this / other; return *this; } + + Vector4f& operator+=(const float& other) { *this = *this + other; return *this; } + Vector4f& operator-=(const float& other) { *this = *this - other; return *this; } + Vector4f& operator*=(const float& other) { *this = *this * other; return *this; } + Vector4f& operator/=(const float& other) { *this = *this / other; return *this; } + + float& operator[](const int index) { assert(index < 4 && "index out of range"); return (&mX)[index]; } + const float& operator[](const int index) const { assert(index < 4 && "index out of range"); return (&mX)[index]; } + + float& x() { return mX; } + float& y() { return mY; } + float& z() { return mZ; } + float& w() { return mW; } + const float& x() const { return mX; } + const float& y() const { return mY; } + const float& z() const { return mZ; } + const float& w() const { return mW; } + + inline Vector2f& v2() { return *(Vector2f*)this; } + inline const Vector2f& v2() const { return *(Vector2f*)this; } + + inline Vector3f& v3() { return *(Vector3f*)this; } + inline const Vector3f& v3() const { return *(Vector3f*)this; } + + inline Vector4f& round() { mX = (int)(mX + 0.5f); mY = (int)(mY + 0.5f); mZ = (int)(mZ + 0.5f); mW = (int)(mW + 0.5f); return *this; } + + static const Vector4f Zero() { return { 0, 0, 0, 0 }; } + static const Vector4f UnitX() { return { 1, 0, 0, 0 }; } + static const Vector4f UnitY() { return { 0, 1, 0, 0 }; } + static const Vector4f UnitZ() { return { 0, 0, 1, 0 }; } + static const Vector4f UnitW() { return { 0, 0, 0, 1 }; } + +private: + + float mX; + float mY; + float mZ; + float mW; + +}; + +#endif diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index b31a69861e..b2356c9f0d 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -254,8 +254,8 @@ void Font::unloadTextures() Font::FontTexture::FontTexture() { textureId = 0; - textureSize << 2048, 512; - writePos = Eigen::Vector2i::Zero(); + textureSize = Vector2i(2048, 512); + writePos = Vector2i::Zero(); rowHeight = 0; } @@ -264,7 +264,7 @@ Font::FontTexture::~FontTexture() deinitTexture(); } -bool Font::FontTexture::findEmpty(const Eigen::Vector2i& size, Eigen::Vector2i& cursor_out) +bool Font::FontTexture::findEmpty(const Vector2i& size, Vector2i& cursor_out) { if(size.x() >= textureSize.x() || size.y() >= textureSize.y()) return false; @@ -274,7 +274,7 @@ bool Font::FontTexture::findEmpty(const Eigen::Vector2i& size, Eigen::Vector2i& { // row full, but it should fit on the next row // move cursor to next row - writePos << 0, writePos.y() + rowHeight + 1; // leave 1px of space between glyphs + writePos = Vector2i(0, writePos.y() + rowHeight + 1); // leave 1px of space between glyphs rowHeight = 0; } @@ -322,7 +322,7 @@ void Font::FontTexture::deinitTexture() } } -void Font::getTextureForNewGlyph(const Eigen::Vector2i& glyphSize, FontTexture*& tex_out, Eigen::Vector2i& cursor_out) +void Font::getTextureForNewGlyph(const Vector2i& glyphSize, FontTexture*& tex_out, Vector2i& cursor_out) { if(mTextures.size()) { @@ -456,10 +456,10 @@ Font::Glyph* Font::getGlyph(UnicodeChar id) return NULL; } - Eigen::Vector2i glyphSize(g->bitmap.width, g->bitmap.rows); + Vector2i glyphSize(g->bitmap.width, g->bitmap.rows); FontTexture* tex = NULL; - Eigen::Vector2i cursor; + Vector2i cursor; getTextureForNewGlyph(glyphSize, tex, cursor); // getTextureForNewGlyph can fail if the glyph is bigger than the max texture size (absurdly large font size) @@ -473,11 +473,11 @@ Font::Glyph* Font::getGlyph(UnicodeChar id) Glyph& glyph = mGlyphMap[id]; glyph.texture = tex; - glyph.texPos << cursor.x() / (float)tex->textureSize.x(), cursor.y() / (float)tex->textureSize.y(); - glyph.texSize << glyphSize.x() / (float)tex->textureSize.x(), glyphSize.y() / (float)tex->textureSize.y(); + glyph.texPos = Vector2f(cursor.x() / (float)tex->textureSize.x(), cursor.y() / (float)tex->textureSize.y()); + glyph.texSize = Vector2f(glyphSize.x() / (float)tex->textureSize.x(), glyphSize.y() / (float)tex->textureSize.y()); - glyph.advance << (float)g->metrics.horiAdvance / 64.0f, (float)g->metrics.vertAdvance / 64.0f; - glyph.bearing << (float)g->metrics.horiBearingX / 64.0f, (float)g->metrics.horiBearingY / 64.0f; + glyph.advance = Vector2f((float)g->metrics.horiAdvance / 64.0f, (float)g->metrics.vertAdvance / 64.0f); + glyph.bearing = Vector2f((float)g->metrics.horiBearingX / 64.0f, (float)g->metrics.horiBearingY / 64.0f); // upload glyph bitmap to texture glBindTexture(GL_TEXTURE_2D, tex->textureId); @@ -513,8 +513,8 @@ void Font::rebuildTextures() FontTexture* tex = it->second.texture; // find the position/size - Eigen::Vector2i cursor(it->second.texPos.x() * tex->textureSize.x(), it->second.texPos.y() * tex->textureSize.y()); - Eigen::Vector2i glyphSize(it->second.texSize.x() * tex->textureSize.x(), it->second.texSize.y() * tex->textureSize.y()); + Vector2i cursor(it->second.texPos.x() * tex->textureSize.x(), it->second.texPos.y() * tex->textureSize.y()); + Vector2i glyphSize(it->second.texSize.x() * tex->textureSize.x(), it->second.texSize.y() * tex->textureSize.y()); // upload to texture glBindTexture(GL_TEXTURE_2D, tex->textureId); @@ -547,8 +547,8 @@ void Font::renderTextCache(TextCache* cache) glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_COLOR_ARRAY); - glVertexPointer(2, GL_FLOAT, sizeof(TextCache::Vertex), it->verts[0].pos.data()); - glTexCoordPointer(2, GL_FLOAT, sizeof(TextCache::Vertex), it->verts[0].tex.data()); + glVertexPointer(2, GL_FLOAT, sizeof(TextCache::Vertex), &it->verts[0].pos); + glTexCoordPointer(2, GL_FLOAT, sizeof(TextCache::Vertex), &it->verts[0].tex); glColorPointer(4, GL_UNSIGNED_BYTE, 0, it->colors.data()); glDrawArrays(GL_TRIANGLES, 0, it->verts.size()); @@ -562,7 +562,7 @@ void Font::renderTextCache(TextCache* cache) } } -Eigen::Vector2f Font::sizeText(std::string text, float lineSpacing) +Vector2f Font::sizeText(std::string text, float lineSpacing) { float lineWidth = 0.0f; float highestWidth = 0.0f; @@ -593,7 +593,7 @@ Eigen::Vector2f Font::sizeText(std::string text, float lineSpacing) if(lineWidth > highestWidth) highestWidth = lineWidth; - return Eigen::Vector2f(highestWidth, y); + return Vector2f(highestWidth, y); } float Font::getHeight(float lineSpacing) const @@ -617,7 +617,7 @@ std::string Font::wrapText(std::string text, float xLen) std::string line, word, temp; size_t space; - Eigen::Vector2f textSize; + Vector2f textSize; while(text.length() > 0) //while there's text or we still have text to render { @@ -650,13 +650,13 @@ std::string Font::wrapText(std::string text, float xLen) return out; } -Eigen::Vector2f Font::sizeWrappedText(std::string text, float xLen, float lineSpacing) +Vector2f Font::sizeWrappedText(std::string text, float xLen, float lineSpacing) { text = wrapText(text, xLen); return sizeText(text, lineSpacing); } -Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, size_t stop, float lineSpacing) +Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, size_t stop, float lineSpacing) { std::string wrappedText = wrapText(text, xLen); @@ -693,7 +693,7 @@ Eigen::Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, s lineWidth += glyph->advance.x(); } - return Eigen::Vector2f(lineWidth, y); + return Vector2f(lineWidth, y); } //============================================================================================================= @@ -726,7 +726,7 @@ inline float font_round(float v) return round(v); } -TextCache* Font::buildTextCache(const std::string& text, Eigen::Vector2f offset, unsigned int color, float xLen, Alignment alignment, float lineSpacing) +TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsigned int color, float xLen, Alignment alignment, float lineSpacing) { float x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, 0, xLen, alignment) : 0); @@ -766,30 +766,30 @@ TextCache* Font::buildTextCache(const std::string& text, Eigen::Vector2f offset, const float glyphStartX = x + glyph->bearing.x(); - const Eigen::Vector2i& textureSize = glyph->texture->textureSize; + const Vector2i& textureSize = glyph->texture->textureSize; // triangle 1 // round to fix some weird "cut off" text bugs - tri[0].pos << font_round(glyphStartX), font_round(y + (glyph->texSize.y() * textureSize.y() - glyph->bearing.y())); - tri[1].pos << font_round(glyphStartX + glyph->texSize.x() * textureSize.x()), font_round(y - glyph->bearing.y()); - tri[2].pos << tri[0].pos.x(), tri[1].pos.y(); + tri[0].pos = Vector2f(font_round(glyphStartX), font_round(y + (glyph->texSize.y() * textureSize.y() - glyph->bearing.y()))); + tri[1].pos = Vector2f(font_round(glyphStartX + glyph->texSize.x() * textureSize.x()), font_round(y - glyph->bearing.y())); + tri[2].pos = Vector2f(tri[0].pos.x(), tri[1].pos.y()); - //tri[0].tex << 0, 0; - //tri[0].tex << 1, 1; - //tri[0].tex << 0, 1; + //tri[0].tex = Vector2f(0, 0); + //tri[0].tex = Vector2f(1, 1); + //tri[0].tex = Vector2f(0, 1); - tri[0].tex << glyph->texPos.x(), glyph->texPos.y() + glyph->texSize.y(); - tri[1].tex << glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y(); - tri[2].tex << tri[0].tex.x(), tri[1].tex.y(); + tri[0].tex = Vector2f(glyph->texPos.x(), glyph->texPos.y() + glyph->texSize.y()); + tri[1].tex = Vector2f(glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y()); + tri[2].tex = Vector2f(tri[0].tex.x(), tri[1].tex.y()); // triangle 2 tri[3].pos = tri[0].pos; tri[4].pos = tri[1].pos; - tri[5].pos << tri[1].pos.x(), tri[0].pos.y(); + tri[5].pos = Vector2f(tri[1].pos.x(), tri[0].pos.y()); tri[3].tex = tri[0].tex; tri[4].tex = tri[1].tex; - tri[5].tex << tri[1].tex.x(), tri[0].tex.y(); + tri[5].tex = Vector2f(tri[1].tex.x(), tri[0].tex.y()); // advance x += glyph->advance.x(); @@ -820,7 +820,7 @@ TextCache* Font::buildTextCache(const std::string& text, Eigen::Vector2f offset, TextCache* Font::buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color) { - return buildTextCache(text, Eigen::Vector2f(offsetX, offsetY), color, 0.0f); + return buildTextCache(text, Vector2f(offsetX, offsetY), color, 0.0f); } void TextCache::setColor(unsigned int color) diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index 0dee2aa6c2..a5d15c7159 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -5,9 +5,9 @@ #include GLHEADER #include #include FT_FREETYPE_H -#include #include "resources/ResourceManager.h" #include "ThemeData.h" +#include "math/Vector2i.h" class TextCache; @@ -41,14 +41,14 @@ class Font : public IReloadable virtual ~Font(); - Eigen::Vector2f sizeText(std::string text, float lineSpacing = 1.5f); // Returns the expected size of a string when rendered. Extra spacing is applied to the Y axis. + Vector2f sizeText(std::string text, float lineSpacing = 1.5f); // Returns the expected size of a string when rendered. Extra spacing is applied to the Y axis. TextCache* buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color); - TextCache* buildTextCache(const std::string& text, Eigen::Vector2f offset, unsigned int color, float xLen, Alignment alignment = ALIGN_LEFT, float lineSpacing = 1.5f); + TextCache* buildTextCache(const std::string& text, Vector2f offset, unsigned int color, float xLen, Alignment alignment = ALIGN_LEFT, float lineSpacing = 1.5f); void renderTextCache(TextCache* cache); std::string wrapText(std::string text, float xLen); // Inserts newlines into text to make it wrap properly. - Eigen::Vector2f sizeWrappedText(std::string text, float xLen, float lineSpacing = 1.5f); // Returns the expected size of a string after wrapping is applied. - Eigen::Vector2f getWrappedTextCursorOffset(std::string text, float xLen, size_t cursor, float lineSpacing = 1.5f); // Returns the position of of the cursor after moving "cursor" characters. + Vector2f sizeWrappedText(std::string text, float xLen, float lineSpacing = 1.5f); // Returns the expected size of a string after wrapping is applied. + Vector2f getWrappedTextCursorOffset(std::string text, float xLen, size_t cursor, float lineSpacing = 1.5f); // Returns the position of of the cursor after moving "cursor" characters. float getHeight(float lineSpacing = 1.5f) const; float getLetterHeight(); @@ -81,14 +81,14 @@ class Font : public IReloadable struct FontTexture { GLuint textureId; - Eigen::Vector2i textureSize; + Vector2i textureSize; - Eigen::Vector2i writePos; + Vector2i writePos; int rowHeight; FontTexture(); ~FontTexture(); - bool findEmpty(const Eigen::Vector2i& size, Eigen::Vector2i& cursor_out); + bool findEmpty(const Vector2i& size, Vector2i& cursor_out); // you must call initTexture() after creating a FontTexture to get a textureId void initTexture(); // initializes the OpenGL texture according to this FontTexture's settings, updating textureId @@ -109,7 +109,7 @@ class Font : public IReloadable std::vector mTextures; - void getTextureForNewGlyph(const Eigen::Vector2i& glyphSize, FontTexture*& tex_out, Eigen::Vector2i& cursor_out); + void getTextureForNewGlyph(const Vector2i& glyphSize, FontTexture*& tex_out, Vector2i& cursor_out); std::map< unsigned int, std::unique_ptr > mFaceCache; FT_Face getFaceForChar(UnicodeChar id); @@ -119,11 +119,11 @@ class Font : public IReloadable { FontTexture* texture; - Eigen::Vector2f texPos; - Eigen::Vector2f texSize; // in texels! + Vector2f texPos; + Vector2f texSize; // in texels! - Eigen::Vector2f advance; - Eigen::Vector2f bearing; + Vector2f advance; + Vector2f bearing; }; std::map mGlyphMap; @@ -149,8 +149,8 @@ class TextCache protected: struct Vertex { - Eigen::Vector2f pos; - Eigen::Vector2f tex; + Vector2f pos; + Vector2f tex; }; struct VertexList @@ -165,7 +165,7 @@ class TextCache public: struct CacheMetrics { - Eigen::Vector2f size; + Vector2f size; } metrics; void setColor(unsigned int color); diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index 6400d74b9b..5c2cfdf0a0 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -35,8 +35,8 @@ TextureResource::TextureResource(const std::string& path, bool tile, bool dynami data->load(); } - mSize << data->width(), data->height(); - mSourceSize << data->sourceWidth(), data->sourceHeight(); + mSize = Vector2i(data->width(), data->height()); + mSourceSize = Vector2f(data->sourceWidth(), data->sourceHeight()); } else { @@ -62,8 +62,8 @@ void TextureResource::initFromPixels(const unsigned char* dataRGBA, size_t width mTextureData->releaseRAM(); mTextureData->initFromRGBA(dataRGBA, width, height); // Cache the image dimensions - mSize << width, height; - mSourceSize << mTextureData->sourceWidth(), mTextureData->sourceHeight(); + mSize = Vector2i(width, height); + mSourceSize = Vector2f(mTextureData->sourceWidth(), mTextureData->sourceHeight()); } void TextureResource::initFromMemory(const char* data, size_t length) @@ -74,11 +74,11 @@ void TextureResource::initFromMemory(const char* data, size_t length) mTextureData->releaseRAM(); mTextureData->initImageFromMemory((const unsigned char*)data, length); // Get the size from the texture data - mSize << mTextureData->width(), mTextureData->height(); - mSourceSize << mTextureData->sourceWidth(), mTextureData->sourceHeight(); + mSize = Vector2i(mTextureData->width(), mTextureData->height()); + mSourceSize = Vector2f(mTextureData->sourceWidth(), mTextureData->sourceHeight()); } -const Eigen::Vector2i TextureResource::getSize() const +const Vector2i TextureResource::getSize() const { return mSize; } @@ -157,13 +157,13 @@ void TextureResource::rasterizeAt(size_t width, size_t height) data = mTextureData; else data = sTextureDataManager.get(this); - mSourceSize << (float)width, (float)height; + mSourceSize = Vector2f((float)width, (float)height); data->setSourceSize((float)width, (float)height); if (mForceLoad || (mTextureData != nullptr)) data->load(); } -Eigen::Vector2f TextureResource::getSourceImageSize() const +Vector2f TextureResource::getSourceImageSize() const { return mSourceSize; } diff --git a/es-core/src/resources/TextureResource.h b/es-core/src/resources/TextureResource.h index 7623e8b1c2..d1c39e2bb8 100644 --- a/es-core/src/resources/TextureResource.h +++ b/es-core/src/resources/TextureResource.h @@ -5,11 +5,12 @@ #include #include #include -#include #include "platform.h" #include "resources/TextureData.h" #include "resources/TextureDataManager.h" #include GLHEADER +#include "math/Vector2i.h" +#include "math/Vector2f.h" // An OpenGL texture. // Automatically recreates the texture with renderer deinit/reinit. @@ -22,14 +23,14 @@ class TextureResource : public IReloadable // For scalable source images in textures we want to set the resolution to rasterize at void rasterizeAt(size_t width, size_t height); - Eigen::Vector2f getSourceImageSize() const; + Vector2f getSourceImageSize() const; virtual ~TextureResource(); bool isInitialized() const; bool isTiled() const; - const Eigen::Vector2i getSize() const; + const Vector2i getSize() const; bool bind(); static size_t getTotalMemUsage(); // returns an approximation of total VRAM used by textures (in bytes) @@ -48,8 +49,8 @@ class TextureResource : public IReloadable // The texture data manager manages loading and unloading of filesystem based textures static TextureDataManager sTextureDataManager; - Eigen::Vector2i mSize; - Eigen::Vector2f mSourceSize; + Vector2i mSize; + Vector2f mSourceSize; bool mForceLoad; typedef std::pair TextureKeyType; From 1cc60594200a651af49bc62289be0a42c23f8e44 Mon Sep 17 00:00:00 2001 From: pjft Date: Sat, 28 Oct 2017 21:21:48 +0100 Subject: [PATCH 184/603] Warning Fixes --- es-core/src/components/VideoComponent.cpp | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index b942f2e03f..c850927899 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -26,9 +26,7 @@ void writeSubtitle(const char* gameName, const char* systemName, bool always) FILE* file = fopen(getTitlePath().c_str(), "w"); int end = (int)(Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") / (1000)); if (always) { - fprintf(file, "1\n00:00:01,000 --> 00:00:"); - fprintf(file, std::to_string(end).c_str()); - fprintf(file, ",000\n"); + fprintf(file, "1\n00:00:01,000 --> 00:00:%d,000\n", end); } else { @@ -40,13 +38,7 @@ void writeSubtitle(const char* gameName, const char* systemName, bool always) if (!always) { if (end > 12) { - fprintf(file, "2\n00:00:"); - fprintf(file, std::to_string(end - 4).c_str()); - fprintf(file, ",000 --> 00:00:"); - fprintf(file, std::to_string(end).c_str()); - fprintf(file, ",000\n"); - fprintf(file, "%s\n", gameName); - fprintf(file, "%s\n", systemName); + fprintf(file, "2\n00:00:%d,000 --> 00:00:%d,000\n%s\n%s\n", end-4, end, gameName, systemName); } } From 9a8b9c7413ce9e3915cb09c840e1da5cbce63aa7 Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Sat, 28 Oct 2017 23:19:19 +0000 Subject: [PATCH 185/603] Implement missed inhouse vector replacements Needed to fix build on Pi after https://github.com/RetroPie/EmulationStation/pull/263. --- es-core/src/components/VideoPlayerComponent.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 897b52ab45..ef31f58139 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -43,7 +43,7 @@ void VideoPlayerComponent::render(const Transform4x4f& parentTrans) void VideoPlayerComponent::setResize(float width, float height) { setSize(width, height); - mTargetSize << width, height; + mTargetSize = Vector2f(width, height); mTargetIsMax = false; mStaticImage.setSize(width, height); onSizeChanged(); @@ -52,7 +52,7 @@ void VideoPlayerComponent::setResize(float width, float height) void VideoPlayerComponent::setMaxSize(float width, float height) { setSize(width, height); - mTargetSize << width, height; + mTargetSize = Vector2f(width, height); mTargetIsMax = true; mStaticImage.setMaxSize(width, height); onSizeChanged(); From d3966da2b7ed13f39b2b90e6ba008c4dfdb84de6 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 30 Oct 2017 10:29:08 +0100 Subject: [PATCH 186/603] Replace boost::locale with std::locale --- CMakeLists.txt | 4 ++-- es-app/src/main.cpp | 3 +-- es-core/src/guis/GuiDetectDevice.cpp | 1 - 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d82c09107..8e95d34090 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,9 +50,9 @@ find_package(Freetype REQUIRED) find_package(FreeImage REQUIRED) find_package(SDL2 REQUIRED) if(MSVC) -find_package(Boost REQUIRED COMPONENTS system date_time locale) +find_package(Boost REQUIRED COMPONENTS system date_time) else() -find_package(Boost REQUIRED COMPONENTS system filesystem date_time locale) +find_package(Boost REQUIRED COMPONENTS system filesystem date_time) endif() find_package(CURL REQUIRED) find_package(VLC REQUIRED) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 2fc749ded1..e2352ae19b 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -20,7 +20,6 @@ #include "Settings.h" #include "ScraperCmdLine.h" #include -#include #include #ifdef WIN32 @@ -182,7 +181,7 @@ int main(int argc, char* argv[]) unsigned int width = 0; unsigned int height = 0; - std::locale::global(boost::locale::generator().generate("")); + std::locale::global(std::locale(std::locale(""), "C", std::locale::numeric)); boost::filesystem::path::imbue(std::locale()); if(!parseArgs(argc, argv, &width, &height)) diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index 536553705a..80f79fb385 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -10,7 +10,6 @@ #include #include "Util.h" #include -#include #define HOLD_TIME 1000 From 44e3e3908359254bec651930646c61fa61c4efe1 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Tue, 31 Oct 2017 18:12:50 +0100 Subject: [PATCH 187/603] Add pragma once and ifndef header guards to all headers --- es-app/src/CollectionSystemManager.h | 4 ++++ es-app/src/EmulationStation.h | 4 ++++ es-app/src/FileData.h | 6 +++++- es-app/src/FileFilterIndex.h | 6 +++++- es-app/src/FileSorts.h | 4 ++++ es-app/src/Gamelist.h | 4 ++++ es-app/src/MetaData.h | 4 ++++ es-app/src/PlatformId.h | 4 ++++ es-app/src/ScraperCmdLine.h | 4 ++++ es-app/src/SystemData.h | 4 ++++ es-app/src/SystemScreenSaver.h | 4 ++++ es-app/src/VolumeControl.h | 4 ++++ es-app/src/animations/LaunchAnimation.h | 4 ++++ es-app/src/animations/MoveCameraAnimation.h | 4 ++++ es-app/src/components/AsyncReqComponent.h | 4 ++++ es-app/src/components/RatingComponent.h | 3 +++ es-app/src/components/ScraperSearchComponent.h | 4 ++++ es-app/src/components/TextListComponent.h | 4 ++++ es-app/src/guis/GuiCollectionSystemsOptions.h | 4 ++++ es-app/src/guis/GuiFastSelect.h | 4 ++++ es-app/src/guis/GuiGameScraper.h | 4 ++++ es-app/src/guis/GuiGamelistFilter.h | 4 ++++ es-app/src/guis/GuiGamelistOptions.h | 6 ++++++ es-app/src/guis/GuiGeneralScreensaverOptions.h | 7 ++++--- es-app/src/guis/GuiInfoPopup.h | 4 ++++ es-app/src/guis/GuiMenu.h | 4 ++++ es-app/src/guis/GuiMetaDataEd.h | 4 ++++ es-app/src/guis/GuiScraperMulti.h | 4 ++++ es-app/src/guis/GuiScraperStart.h | 4 ++++ es-app/src/guis/GuiScreensaverOptions.h | 7 ++++--- es-app/src/guis/GuiSettings.h | 8 +++++++- es-app/src/guis/GuiSlideshowScreensaverOptions.h | 7 ++++--- es-app/src/guis/GuiVideoScreensaverOptions.h | 7 ++++--- es-app/src/scrapers/GamesDBScraper.h | 4 ++++ es-app/src/scrapers/Scraper.h | 4 ++++ es-app/src/views/SystemView.h | 4 ++++ es-app/src/views/ViewController.h | 4 ++++ es-app/src/views/gamelist/BasicGameListView.h | 4 ++++ es-app/src/views/gamelist/DetailedGameListView.h | 4 ++++ es-app/src/views/gamelist/GridGameListView.h | 4 ++++ es-app/src/views/gamelist/IGameListView.h | 4 ++++ es-app/src/views/gamelist/ISimpleGameListView.h | 4 ++++ es-app/src/views/gamelist/VideoGameListView.h | 4 ++++ es-core/src/AsyncHandle.h | 4 ++++ es-core/src/AudioManager.h | 7 ++++--- es-core/src/GuiComponent.h | 4 ++++ es-core/src/HelpStyle.h | 6 +++++- es-core/src/HttpReq.h | 4 ++++ es-core/src/ImageIO.h | 6 +++++- es-core/src/InputConfig.h | 7 ++++--- es-core/src/InputManager.h | 7 ++++--- es-core/src/Log.h | 7 ++++--- es-core/src/PowerSaver.h | 4 ++++ es-core/src/Renderer.h | 7 ++++--- es-core/src/Settings.h | 5 +++++ es-core/src/Sound.h | 7 ++++--- es-core/src/ThemeData.h | 4 ++++ es-core/src/Util.h | 6 +++++- es-core/src/Window.h | 4 ++++ es-core/src/animations/Animation.h | 4 ++++ es-core/src/animations/AnimationController.h | 4 ++++ es-core/src/animations/LambdaAnimation.h | 4 ++++ es-core/src/components/AnimatedImageComponent.h | 6 ++++++ es-core/src/components/BusyComponent.h | 6 ++++++ es-core/src/components/ButtonComponent.h | 4 ++++ es-core/src/components/ComponentGrid.h | 4 ++++ es-core/src/components/ComponentList.h | 4 ++++ es-core/src/components/DateTimeComponent.h | 4 ++++ es-core/src/components/HelpComponent.h | 4 ++++ es-core/src/components/IList.h | 4 ++++ es-core/src/components/ImageComponent.h | 7 ++++--- es-core/src/components/ImageGridComponent.h | 4 ++++ es-core/src/components/MenuComponent.h | 4 ++++ es-core/src/components/NinePatchComponent.h | 4 ++++ es-core/src/components/OptionListComponent.h | 4 ++++ es-core/src/components/ScrollableContainer.h | 4 ++++ es-core/src/components/SliderComponent.h | 4 ++++ es-core/src/components/SwitchComponent.h | 4 ++++ es-core/src/components/TextComponent.h | 7 ++++--- es-core/src/components/TextEditComponent.h | 4 ++++ es-core/src/components/VideoComponent.h | 7 ++++--- es-core/src/components/VideoPlayerComponent.h | 10 +++++----- es-core/src/components/VideoVlcComponent.h | 7 ++++--- es-core/src/guis/GuiDetectDevice.h | 4 ++++ es-core/src/guis/GuiInputConfig.h | 4 ++++ es-core/src/guis/GuiMsgBox.h | 4 ++++ es-core/src/guis/GuiTextEditPopup.h | 6 ++++++ es-core/src/math/Matrix3x3f.h | 7 ++++--- es-core/src/math/Matrix4x4f.h | 7 ++++--- es-core/src/math/Rotation3x3f.h | 7 ++++--- es-core/src/math/Scale3x3f.h | 7 ++++--- es-core/src/math/Transform4x4f.h | 7 ++++--- es-core/src/math/Vector2f.h | 7 ++++--- es-core/src/math/Vector2i.h | 7 ++++--- es-core/src/math/Vector3f.h | 7 ++++--- es-core/src/math/Vector4f.h | 7 ++++--- es-core/src/platform.h | 6 ++++++ es-core/src/resources/Font.h | 4 ++++ es-core/src/resources/ResourceManager.h | 4 ++++ es-core/src/resources/TextureData.h | 4 ++++ es-core/src/resources/TextureDataManager.h | 3 +++ es-core/src/resources/TextureResource.h | 4 ++++ 102 files changed, 426 insertions(+), 80 deletions(-) diff --git a/es-app/src/CollectionSystemManager.h b/es-app/src/CollectionSystemManager.h index 90ea67a581..5ec40673a6 100644 --- a/es-app/src/CollectionSystemManager.h +++ b/es-app/src/CollectionSystemManager.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_COLLECTION_SYSTEM_MANAGER_H +#define ES_APP_COLLECTION_SYSTEM_MANAGER_H #include #include @@ -113,3 +115,5 @@ class CollectionSystemManager std::string getCustomCollectionConfigPath(std::string collectionName); std::string getCollectionsFolder(); bool systemSort(SystemData* sys1, SystemData* sys2); + +#endif // ES_APP_COLLECTION_SYSTEM_MANAGER_H diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 6dbd22454c..afc84ef7cf 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_EMULATION_STATION_H +#define ES_APP_EMULATION_STATION_H // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. @@ -11,3 +13,5 @@ #define RESOURCE_VERSION_STRING "2,6,5\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE + +#endif // ES_APP_EMULATION_STATION_H diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 39c271a790..753c1484e1 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_FILE_DATA_H +#define ES_APP_FILE_DATA_H #include #include @@ -117,4 +119,6 @@ class CollectionFileData : public FileData bool mDirty; }; -FileData::SortType getSortTypeFromString(std::string desc); \ No newline at end of file +FileData::SortType getSortTypeFromString(std::string desc); + +#endif // ES_APP_FILE_DATA_H diff --git a/es-app/src/FileFilterIndex.h b/es-app/src/FileFilterIndex.h index 8865883119..1a6e3c8df9 100644 --- a/es-app/src/FileFilterIndex.h +++ b/es-app/src/FileFilterIndex.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_FILE_FILTER_INDEX_H +#define ES_APP_FILE_FILTER_INDEX_H #include #include "FileData.h" @@ -82,4 +84,6 @@ class FileFilterIndex FileData* mRootFolder; -}; \ No newline at end of file +}; + +#endif // ES_APP_FILE_FILTER_INDEX_H diff --git a/es-app/src/FileSorts.h b/es-app/src/FileSorts.h index ac24a1db39..f4403115c0 100644 --- a/es-app/src/FileSorts.h +++ b/es-app/src/FileSorts.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_FILE_SORTS_H +#define ES_APP_FILE_SORTS_H #include #include "FileData.h" @@ -19,3 +21,5 @@ namespace FileSorts extern const std::vector SortTypes; }; + +#endif // ES_APP_FILE_SORTS_H diff --git a/es-app/src/Gamelist.h b/es-app/src/Gamelist.h index b681e91604..d9502a196d 100644 --- a/es-app/src/Gamelist.h +++ b/es-app/src/Gamelist.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_GAME_LIST_H +#define ES_APP_GAME_LIST_H class SystemData; @@ -7,3 +9,5 @@ void parseGamelist(SystemData* system); // Writes currently loaded metadata for a SystemData to gamelist.xml. void updateGamelist(SystemData* system); + +#endif // ES_APP_GAME_LIST_H diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 62c9869e61..467659ac7a 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_META_DATA_H +#define ES_APP_META_DATA_H #include "pugixml/src/pugixml.hpp" #include @@ -70,3 +72,5 @@ class MetaDataList std::map mMap; bool mWasChanged; }; + +#endif // ES_APP_META_DATA_H diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index 569f843e58..55197cc671 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_PLATFORM_ID_H +#define ES_APP_PLATFORM_ID_H #include @@ -80,3 +82,5 @@ namespace PlatformIds const char* getCleanMameName(const char* from); } + +#endif // ES_APP_PLATFORM_ID_H diff --git a/es-app/src/ScraperCmdLine.h b/es-app/src/ScraperCmdLine.h index 657c0186e8..32f238eaf5 100644 --- a/es-app/src/ScraperCmdLine.h +++ b/es-app/src/ScraperCmdLine.h @@ -1,3 +1,7 @@ #pragma once +#ifndef ES_APP_SCRAPER_CMD_LINE_H +#define ES_APP_SCRAPER_CMD_LINE_H int run_scraper_cmdline(); + +#endif // ES_APP_SCRAPER_CMD_LINE_H diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index cb44a1c11e..eab061ebeb 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_SYSTEM_DATA_H +#define ES_APP_SYSTEM_DATA_H #include #include @@ -94,3 +96,5 @@ class SystemData FileData* mRootFolder; }; + +#endif // ES_APP_SYSTEM_DATA_H diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index 4ca3ae23bc..4e085265cf 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_SYSTEM_SCREEN_SAVER_H +#define ES_APP_SYSTEM_SCREEN_SAVER_H #include "Window.h" @@ -60,3 +62,5 @@ class SystemScreenSaver : public Window::ScreenSaver std::shared_ptr mBackgroundAudio; bool mStopBackgroundAudio; }; + +#endif // ES_APP_SYSTEM_SCREEN_SAVER_H diff --git a/es-app/src/VolumeControl.h b/es-app/src/VolumeControl.h index 8f35ea2c27..821676fc34 100644 --- a/es-app/src/VolumeControl.h +++ b/es-app/src/VolumeControl.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_VOLUME_CONTROL_H +#define ES_APP_VOLUME_CONTROL_H #include #include @@ -56,3 +58,5 @@ class VolumeControl ~VolumeControl(); }; + +#endif // ES_APP_VOLUME_CONTROL_H diff --git a/es-app/src/animations/LaunchAnimation.h b/es-app/src/animations/LaunchAnimation.h index 78574ae764..e6df933fe4 100644 --- a/es-app/src/animations/LaunchAnimation.h +++ b/es-app/src/animations/LaunchAnimation.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_ANIMATIONS_LAUNCH_ANIMATION_H +#define ES_APP_ANIMATIONS_LAUNCH_ANIMATION_H #include "animations/Animation.h" #include "Log.h" @@ -63,3 +65,5 @@ class LaunchAnimation : public Animation Transform4x4f& cameraOut; float& fadeOut; }; + +#endif // ES_APP_ANIMATIONS_LAUNCH_ANIMATION_H diff --git a/es-app/src/animations/MoveCameraAnimation.h b/es-app/src/animations/MoveCameraAnimation.h index 8eee0ea22a..b901a0f841 100644 --- a/es-app/src/animations/MoveCameraAnimation.h +++ b/es-app/src/animations/MoveCameraAnimation.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_ANIMATIONS_MOVE_CAMERA_ANIMATION_H +#define ES_APP_ANIMATIONS_MOVE_CAMERA_ANIMATION_H #include "animations/Animation.h" @@ -22,3 +24,5 @@ class MoveCameraAnimation : public Animation Transform4x4f& cameraOut; }; + +#endif // ES_APP_ANIMATIONS_MOVE_CAMERA_ANIMATION_H diff --git a/es-app/src/components/AsyncReqComponent.h b/es-app/src/components/AsyncReqComponent.h index 8c74c76ca2..ab3ff013f2 100644 --- a/es-app/src/components/AsyncReqComponent.h +++ b/es-app/src/components/AsyncReqComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_COMPONENTS_ASYNC_REQ_COMPONENT_H +#define ES_APP_COMPONENTS_ASYNC_REQ_COMPONENT_H #include "GuiComponent.h" #include "HttpReq.h" @@ -43,3 +45,5 @@ class AsyncReqComponent : public GuiComponent unsigned int mTime; std::shared_ptr mRequest; }; + +#endif // ES_APP_COMPONENTS_ASYNC_REQ_COMPONENT_H diff --git a/es-app/src/components/RatingComponent.h b/es-app/src/components/RatingComponent.h index c3694d8e70..714532d0dc 100644 --- a/es-app/src/components/RatingComponent.h +++ b/es-app/src/components/RatingComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_COMPONENTS_RATING_COMPONENT_H +#define ES_APP_COMPONENTS_RATING_COMPONENT_H #include "GuiComponent.h" #include "resources/TextureResource.h" @@ -53,3 +55,4 @@ class RatingComponent : public GuiComponent std::shared_ptr mUnfilledTexture; }; +#endif // ES_APP_COMPONENTS_RATING_COMPONENT_H diff --git a/es-app/src/components/ScraperSearchComponent.h b/es-app/src/components/ScraperSearchComponent.h index 90033fb77a..e6f8fc31a5 100644 --- a/es-app/src/components/ScraperSearchComponent.h +++ b/es-app/src/components/ScraperSearchComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_COMPONENTS_SCRAPER_SEARCH_COMPONENT_H +#define ES_APP_COMPONENTS_SCRAPER_SEARCH_COMPONENT_H #include "GuiComponent.h" #include "scrapers/Scraper.h" @@ -102,3 +104,5 @@ class ScraperSearchComponent : public GuiComponent BusyComponent mBusyAnim; }; + +#endif // ES_APP_COMPONENTS_SCRAPER_SEARCH_COMPONENT_H diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 749b4871bf..4eb2780f44 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_COMPONENTS_TEXT_LIST_COMPONENT_H +#define ES_APP_COMPONENTS_TEXT_LIST_COMPONENT_H #include "components/IList.h" #include "Renderer.h" @@ -405,3 +407,5 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c mSelectorImage.setImage(""); } } + +#endif // ES_APP_COMPONENTS_TEXT_LIST_COMPONENT_H diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.h b/es-app/src/guis/GuiCollectionSystemsOptions.h index 39748e7c8d..6b3945e2c0 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.h +++ b/es-app/src/guis/GuiCollectionSystemsOptions.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_GUIS_GUI_COLLECTION_SYSTEM_OPTIONS_H +#define ES_APP_GUIS_GUI_COLLECTION_SYSTEM_OPTIONS_H #include "GuiComponent.h" #include "SystemData.h" @@ -36,3 +38,5 @@ class GuiCollectionSystemsOptions : public GuiComponent MenuComponent mMenu; SystemData* mSystem; }; + +#endif // ES_APP_GUIS_GUI_COLLECTION_SYSTEM_OPTIONS_H diff --git a/es-app/src/guis/GuiFastSelect.h b/es-app/src/guis/GuiFastSelect.h index 012c06de62..5a880dc6f8 100644 --- a/es-app/src/guis/GuiFastSelect.h +++ b/es-app/src/guis/GuiFastSelect.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_GUIS_GUI_FAST_SELECT_H +#define ES_APP_GUIS_GUI_FAST_SELECT_H #include "GuiComponent.h" #include "views/gamelist/IGameListView.h" @@ -33,3 +35,5 @@ class GuiFastSelect : public GuiComponent IGameListView* mGameList; }; + +#endif // ES_APP_GUIS_GUI_FAST_SELECT_H diff --git a/es-app/src/guis/GuiGameScraper.h b/es-app/src/guis/GuiGameScraper.h index 354aba7e10..12bd7a1ffb 100644 --- a/es-app/src/guis/GuiGameScraper.h +++ b/es-app/src/guis/GuiGameScraper.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_GUIS_GUI_GAME_SCRAPER_H +#define ES_APP_GUIS_GUI_GAME_SCRAPER_H #include "GuiComponent.h" #include "components/ScraperSearchComponent.h" @@ -31,3 +33,5 @@ class GuiGameScraper : public GuiComponent std::function mCancelFunc; }; + +#endif // ES_APP_GUIS_GUI_GAME_SCRAPER_H diff --git a/es-app/src/guis/GuiGamelistFilter.h b/es-app/src/guis/GuiGamelistFilter.h index 990300a4af..560501aae3 100644 --- a/es-app/src/guis/GuiGamelistFilter.h +++ b/es-app/src/guis/GuiGamelistFilter.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_GUIS_GUI_GAME_LIST_FILTER_H +#define ES_APP_GUIS_GUI_GAME_LIST_FILTER_H #include "GuiComponent.h" #include "SystemData.h" @@ -32,3 +34,5 @@ class GuiGamelistFilter : public GuiComponent SystemData* mSystem; FileFilterIndex* mFilterIndex; }; + +#endif // ES_APP_GUIS_GUI_GAME_LIST_FILTER_H diff --git a/es-app/src/guis/GuiGamelistOptions.h b/es-app/src/guis/GuiGamelistOptions.h index 04854e0c1d..1c5b16026f 100644 --- a/es-app/src/guis/GuiGamelistOptions.h +++ b/es-app/src/guis/GuiGamelistOptions.h @@ -1,3 +1,7 @@ +#pragma once +#ifndef ES_APP_GUIS_GUI_GAME_LIST_OPTIONS_H +#define ES_APP_GUIS_GUI_GAME_LIST_OPTIONS_H + #include "GuiComponent.h" #include "components/MenuComponent.h" #include "components/OptionListComponent.h" @@ -36,3 +40,5 @@ class GuiGamelistOptions : public GuiComponent bool fromPlaceholder; bool mFiltersChanged; }; + +#endif // ES_APP_GUIS_GUI_GAME_LIST_OPTIONS_H diff --git a/es-app/src/guis/GuiGeneralScreensaverOptions.h b/es-app/src/guis/GuiGeneralScreensaverOptions.h index a48eb890a2..75f4f4c78a 100644 --- a/es-app/src/guis/GuiGeneralScreensaverOptions.h +++ b/es-app/src/guis/GuiGeneralScreensaverOptions.h @@ -1,5 +1,6 @@ -#ifndef _GUI_GENERAL_SCREENSAVER_OPTIONS_H_ -#define _GUI_GENERAL_SCREENSAVER_OPTIONS_H_ +#pragma once +#ifndef ES_APP_GUIS_GUI_GENERAL_SCREENSAVER_OPTIONS_H +#define ES_APP_GUIS_GUI_GENERAL_SCREENSAVER_OPTIONS_H #include "components/MenuComponent.h" #include "GuiScreensaverOptions.h" @@ -15,4 +16,4 @@ class GuiGeneralScreensaverOptions : public GuiScreensaverOptions void openSlideshowScreensaverOptions(); }; -#endif // _GUI_GENERAL_SCREENSAVER_OPTIONS_H_ +#endif // ES_APP_GUIS_GUI_GENERAL_SCREENSAVER_OPTIONS_H diff --git a/es-app/src/guis/GuiInfoPopup.h b/es-app/src/guis/GuiInfoPopup.h index f3ae988117..4e8a3baa16 100644 --- a/es-app/src/guis/GuiInfoPopup.h +++ b/es-app/src/guis/GuiInfoPopup.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_GUIS_GUI_INFO_POPUP_H +#define ES_APP_GUIS_GUI_INFO_POPUP_H #include "GuiComponent.h" #include "components/NinePatchComponent.h" @@ -25,3 +27,5 @@ class GuiInfoPopup : public GuiComponent, public Window::InfoPopup NinePatchComponent* mFrame; bool running; }; + +#endif // ES_APP_GUIS_GUI_INFO_POPUP_H diff --git a/es-app/src/guis/GuiMenu.h b/es-app/src/guis/GuiMenu.h index f52987fa09..5eda41ddbd 100644 --- a/es-app/src/guis/GuiMenu.h +++ b/es-app/src/guis/GuiMenu.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_GUIS_GUI_MENU_H +#define ES_APP_GUIS_GUI_MENU_H #include "GuiComponent.h" #include "components/MenuComponent.h" @@ -29,3 +31,5 @@ class GuiMenu : public GuiComponent MenuComponent mMenu; TextComponent mVersion; }; + +#endif // ES_APP_GUIS_GUI_MENU_H diff --git a/es-app/src/guis/GuiMetaDataEd.h b/es-app/src/guis/GuiMetaDataEd.h index 923696428d..d93b3c2315 100644 --- a/es-app/src/guis/GuiMetaDataEd.h +++ b/es-app/src/guis/GuiMetaDataEd.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_GUIS_GUI_META_DATA_ED_H +#define ES_APP_GUIS_GUI_META_DATA_ED_H #include "GuiComponent.h" #include "components/MenuComponent.h" @@ -41,3 +43,5 @@ class GuiMetaDataEd : public GuiComponent std::function mSavedCallback; std::function mDeleteFunc; }; + +#endif // ES_APP_GUIS_GUI_META_DATA_ED_H diff --git a/es-app/src/guis/GuiScraperMulti.h b/es-app/src/guis/GuiScraperMulti.h index ff18c12c02..f4ce4ea439 100644 --- a/es-app/src/guis/GuiScraperMulti.h +++ b/es-app/src/guis/GuiScraperMulti.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_GUIS_GUI_SCRAPER_MULTI_H +#define ES_APP_GUIS_GUI_SCRAPER_MULTI_H #include "GuiComponent.h" #include "components/NinePatchComponent.h" @@ -41,3 +43,5 @@ class GuiScraperMulti : public GuiComponent std::shared_ptr mSearchComp; std::shared_ptr mButtonGrid; }; + +#endif // ES_APP_GUIS_GUI_SCRAPER_MULTI_H diff --git a/es-app/src/guis/GuiScraperStart.h b/es-app/src/guis/GuiScraperStart.h index 0d453ca0fe..8b494b4692 100644 --- a/es-app/src/guis/GuiScraperStart.h +++ b/es-app/src/guis/GuiScraperStart.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_GUIS_GUI_SCRAPER_START_H +#define ES_APP_GUIS_GUI_SCRAPER_START_H #include "GuiComponent.h" #include "SystemData.h" @@ -36,3 +38,5 @@ class GuiScraperStart : public GuiComponent MenuComponent mMenu; }; + +#endif // ES_APP_GUIS_GUI_SCRAPER_START_H diff --git a/es-app/src/guis/GuiScreensaverOptions.h b/es-app/src/guis/GuiScreensaverOptions.h index b7fd98fabb..95ecbb5498 100644 --- a/es-app/src/guis/GuiScreensaverOptions.h +++ b/es-app/src/guis/GuiScreensaverOptions.h @@ -1,5 +1,6 @@ -#ifndef _GUI_SCREENSAVER_OPTIONS_H_ -#define _GUI_SCREENSAVER_OPTIONS_H_ +#pragma once +#ifndef ES_APP_GUIS_GUI_SCREENSAVER_OPTIONS_H +#define ES_APP_GUIS_GUI_SCREENSAVER_OPTIONS_H #include "GuiComponent.h" #include "components/MenuComponent.h" @@ -26,4 +27,4 @@ class GuiScreensaverOptions : public GuiComponent std::vector< std::function > mSaveFuncs; }; -#endif // _GUI_SCREENSAVER_OPTIONS_H_ +#endif // ES_APP_GUIS_GUI_SCREENSAVER_OPTIONS_H diff --git a/es-app/src/guis/GuiSettings.h b/es-app/src/guis/GuiSettings.h index 573e4e57c6..a1dc8ef569 100644 --- a/es-app/src/guis/GuiSettings.h +++ b/es-app/src/guis/GuiSettings.h @@ -1,3 +1,7 @@ +#pragma once +#ifndef ES_APP_GUIS_GUI_SETTINGS_H +#define ES_APP_GUIS_GUI_SETTINGS_H + #include "GuiComponent.h" #include "components/MenuComponent.h" #include "SystemData.h" @@ -21,4 +25,6 @@ class GuiSettings : public GuiComponent private: MenuComponent mMenu; std::vector< std::function > mSaveFuncs; -}; \ No newline at end of file +}; + +#endif // ES_APP_GUIS_GUI_SETTINGS_H diff --git a/es-app/src/guis/GuiSlideshowScreensaverOptions.h b/es-app/src/guis/GuiSlideshowScreensaverOptions.h index c3f5a63bce..012c38578f 100644 --- a/es-app/src/guis/GuiSlideshowScreensaverOptions.h +++ b/es-app/src/guis/GuiSlideshowScreensaverOptions.h @@ -1,5 +1,6 @@ -#ifndef _GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H_ -#define _GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H_ +#pragma once +#ifndef ES_APP_GUIS_GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H +#define ES_APP_GUIS_GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H #include "components/MenuComponent.h" #include "GuiScreensaverOptions.h" @@ -15,4 +16,4 @@ class GuiSlideshowScreensaverOptions : public GuiScreensaverOptions void addEditableTextComponent(ComponentListRow row, const std::string label, std::shared_ptr ed, std::string value); }; -#endif // _GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H_ +#endif // ES_APP_GUIS_GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.h b/es-app/src/guis/GuiVideoScreensaverOptions.h index 260c4fd16a..55fa013ce5 100644 --- a/es-app/src/guis/GuiVideoScreensaverOptions.h +++ b/es-app/src/guis/GuiVideoScreensaverOptions.h @@ -1,5 +1,6 @@ -#ifndef _GUI_VIDEO_SCREENSAVER_OPTIONS_H_ -#define _GUI_VIDEO_SCREENSAVER_OPTIONS_H_ +#pragma once +#ifndef ES_APP_GUIS_GUI_VIDEO_SCREENSAVER_OPTIONS_H +#define ES_APP_GUIS_GUI_VIDEO_SCREENSAVER_OPTIONS_H #include "components/MenuComponent.h" #include "GuiScreensaverOptions.h" @@ -13,4 +14,4 @@ class GuiVideoScreensaverOptions : public GuiScreensaverOptions void save() override; }; -#endif // _GUI_VIDEO_SCREENSAVER_OPTIONS_H_ +#endif // ES_APP_GUIS_GUI_VIDEO_SCREENSAVER_OPTIONS_H diff --git a/es-app/src/scrapers/GamesDBScraper.h b/es-app/src/scrapers/GamesDBScraper.h index f692b131aa..092366bd1d 100644 --- a/es-app/src/scrapers/GamesDBScraper.h +++ b/es-app/src/scrapers/GamesDBScraper.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_SCRAPERS_GAMES_DB_SCRAPER_H +#define ES_APP_SCRAPERS_GAMES_DB_SCRAPER_H #include "scrapers/Scraper.h" @@ -23,3 +25,5 @@ class TheGamesDBRequest : public ScraperHttpRequest std::queue< std::unique_ptr >* mRequestQueue; }; + +#endif // ES_APP_SCRAPERS_GAMES_DB_SCRAPER_H diff --git a/es-app/src/scrapers/Scraper.h b/es-app/src/scrapers/Scraper.h index 87ab2502a7..1539ac9a55 100644 --- a/es-app/src/scrapers/Scraper.h +++ b/es-app/src/scrapers/Scraper.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_SCRAPERS_SCRAPER_H +#define ES_APP_SCRAPERS_SCRAPER_H #include "MetaData.h" #include "SystemData.h" @@ -154,3 +156,5 @@ std::unique_ptr resolveMetaDataAssets(const ScraperSearchResult //Will overwrite the image at [path] with the new resized one. //Returns true if successful, false otherwise. bool resizeImage(const std::string& path, int maxWidth, int maxHeight); + +#endif // ES_APP_SCRAPERS_SCRAPER_H diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index a592e41ed5..27e805ca0d 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_VIEWS_SYSTEM_VIEW_H +#define ES_APP_VIEWS_SYSTEM_VIEW_H #include "GuiComponent.h" #include "components/ImageComponent.h" @@ -84,3 +86,5 @@ class SystemView : public IList bool mViewNeedsReload; bool mShowing; }; + +#endif // ES_APP_VIEWS_SYSTEM_VIEW_H diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 5b6bc78473..9e8f2ce301 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_VIEWS_VIEW_CONTROLLER_H +#define ES_APP_VIEWS_VIEW_CONTROLLER_H #include "views/gamelist/IGameListView.h" #include "views/SystemView.h" @@ -102,3 +104,5 @@ class ViewController : public GuiComponent State mState; std::string mCurUIMode; }; + +#endif // ES_APP_VIEWS_VIEW_CONTROLLER_H diff --git a/es-app/src/views/gamelist/BasicGameListView.h b/es-app/src/views/gamelist/BasicGameListView.h index 82a15a19a1..0ea7c10586 100644 --- a/es-app/src/views/gamelist/BasicGameListView.h +++ b/es-app/src/views/gamelist/BasicGameListView.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_VIEWS_GAME_LIST_BASIC_GAME_LIST_VIEW_H +#define ES_APP_VIEWS_GAME_LIST_BASIC_GAME_LIST_VIEW_H #include "views/gamelist/ISimpleGameListView.h" #include "components/TextListComponent.h" @@ -28,3 +30,5 @@ class BasicGameListView : public ISimpleGameListView TextListComponent mList; }; + +#endif // ES_APP_VIEWS_GAME_LIST_BASIC_GAME_LIST_VIEW_H diff --git a/es-app/src/views/gamelist/DetailedGameListView.h b/es-app/src/views/gamelist/DetailedGameListView.h index 3b470d34e4..bf7eb748fc 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.h +++ b/es-app/src/views/gamelist/DetailedGameListView.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_VIEWS_GAME_LIST_DETAILED_GAME_LIST_VIEW_H +#define ES_APP_VIEWS_GAME_LIST_DETAILED_GAME_LIST_VIEW_H #include "views/gamelist/BasicGameListView.h" #include "components/ScrollableContainer.h" @@ -41,3 +43,5 @@ class DetailedGameListView : public BasicGameListView ScrollableContainer mDescContainer; TextComponent mDescription; }; + +#endif // ES_APP_VIEWS_GAME_LIST_DETAILED_GAME_LIST_VIEW_H diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index 5451410bd7..acfa20a6dc 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_VIEWS_GAME_LIST_GRID_GAME_LIST_VIEW_H +#define ES_APP_VIEWS_GAME_LIST_GRID_GAME_LIST_VIEW_H #include "views/gamelist/ISimpleGameListView.h" #include "components/ImageGridComponent.h" @@ -27,3 +29,5 @@ class GridGameListView : public ISimpleGameListView ImageGridComponent mGrid; }; + +#endif // ES_APP_VIEWS_GAME_LIST_GRID_GAME_LIST_VIEW_H diff --git a/es-app/src/views/gamelist/IGameListView.h b/es-app/src/views/gamelist/IGameListView.h index b84214c933..da7fd9afde 100644 --- a/es-app/src/views/gamelist/IGameListView.h +++ b/es-app/src/views/gamelist/IGameListView.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_VIEWS_GAME_LIST_IGAME_LIST_VIEW_H +#define ES_APP_VIEWS_GAME_LIST_IGAME_LIST_VIEW_H #include "FileData.h" #include "Renderer.h" @@ -44,3 +46,5 @@ class IGameListView : public GuiComponent FileData* mRoot; std::shared_ptr mTheme; }; + +#endif // ES_APP_VIEWS_GAME_LIST_IGAME_LIST_VIEW_H diff --git a/es-app/src/views/gamelist/ISimpleGameListView.h b/es-app/src/views/gamelist/ISimpleGameListView.h index c629fc9604..41a56777ea 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.h +++ b/es-app/src/views/gamelist/ISimpleGameListView.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_VIEWS_GAME_LIST_ISIMPLE_GAME_LIST_VIEW_H +#define ES_APP_VIEWS_GAME_LIST_ISIMPLE_GAME_LIST_VIEW_H #include "views/gamelist/IGameListView.h" @@ -36,3 +38,5 @@ class ISimpleGameListView : public IGameListView std::stack mCursorStack; }; + +#endif // ES_APP_VIEWS_GAME_LIST_ISIMPLE_GAME_LIST_VIEW_H diff --git a/es-app/src/views/gamelist/VideoGameListView.h b/es-app/src/views/gamelist/VideoGameListView.h index 6a14b15704..f321056bc4 100644 --- a/es-app/src/views/gamelist/VideoGameListView.h +++ b/es-app/src/views/gamelist/VideoGameListView.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_APP_VIEWS_GAME_LIST_VIDEO_GAME_LIST_VIEW_H +#define ES_APP_VIEWS_GAME_LIST_VIDEO_GAME_LIST_VIEW_H #include "views/gamelist/BasicGameListView.h" #include "components/ScrollableContainer.h" @@ -52,3 +54,5 @@ class VideoGameListView : public BasicGameListView bool mVideoPlaying; }; + +#endif // ES_APP_VIEWS_GAME_LIST_VIDEO_GAME_LIST_VIEW_H diff --git a/es-core/src/AsyncHandle.h b/es-core/src/AsyncHandle.h index 7f2e26667d..063983ce2d 100644 --- a/es-core/src/AsyncHandle.h +++ b/es-core/src/AsyncHandle.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_ASYNC_HANDLE_H +#define ES_CORE_ASYNC_HANDLE_H enum AsyncHandleStatus { @@ -42,3 +44,5 @@ class AsyncHandle std::string mError; AsyncHandleStatus mStatus; }; + +#endif // ES_CORE_ASYNC_HANDLE_H diff --git a/es-core/src/AudioManager.h b/es-core/src/AudioManager.h index 37b6d9f7b2..2777dad59b 100644 --- a/es-core/src/AudioManager.h +++ b/es-core/src/AudioManager.h @@ -1,5 +1,6 @@ -#ifndef _AUDIOMANAGER_H_ -#define _AUDIOMANAGER_H_ +#pragma once +#ifndef ES_CORE_AUDIO_MANAGER_H +#define ES_CORE_AUDIO_MANAGER_H #include #include @@ -34,4 +35,4 @@ class AudioManager virtual ~AudioManager(); }; -#endif +#endif // ES_CORE_AUDIO_MANAGER_H diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 0553965d91..6af92a743a 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_GUI_COMPONENT_H +#define ES_CORE_GUI_COMPONENT_H #include "InputConfig.h" #include @@ -161,3 +163,5 @@ class GuiComponent Transform4x4f mTransform; //Don't access this directly! Use getTransform()! AnimationController* mAnimationMap[MAX_ANIMATIONS]; }; + +#endif // ES_CORE_GUI_COMPONENT_H diff --git a/es-core/src/HelpStyle.h b/es-core/src/HelpStyle.h index ff9309d75c..00f8eee98f 100644 --- a/es-core/src/HelpStyle.h +++ b/es-core/src/HelpStyle.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_HELP_STYLE_H +#define ES_CORE_HELP_STYLE_H #include "math/Vector2f.h" #include @@ -16,4 +18,6 @@ struct HelpStyle HelpStyle(); // default values void applyTheme(const std::shared_ptr& theme, const std::string& view); -}; \ No newline at end of file +}; + +#endif // ES_CORE_HELP_STYLE_H diff --git a/es-core/src/HttpReq.h b/es-core/src/HttpReq.h index 9c4f220349..76b2c905db 100644 --- a/es-core/src/HttpReq.h +++ b/es-core/src/HttpReq.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_HTTP_REQ_H +#define ES_CORE_HTTP_REQ_H #include #include @@ -66,3 +68,5 @@ class HttpReq std::stringstream mContent; std::string mErrorMsg; }; + +#endif // ES_CORE_HTTP_REQ_H diff --git a/es-core/src/ImageIO.h b/es-core/src/ImageIO.h index ca48d70abc..440efc5d02 100644 --- a/es-core/src/ImageIO.h +++ b/es-core/src/ImageIO.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_IMAGE_IO +#define ES_CORE_IMAGE_IO #include #include @@ -8,4 +10,6 @@ class ImageIO public: static std::vector loadFromMemoryRGBA32(const unsigned char * data, const size_t size, size_t & width, size_t & height); static void flipPixelsVert(unsigned char* imagePx, const size_t& width, const size_t& height); -}; \ No newline at end of file +}; + +#endif // ES_CORE_IMAGE_IO diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index 7f3acf066b..2eaa7de977 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -1,5 +1,6 @@ -#ifndef _INPUTCONFIG_H_ -#define _INPUTCONFIG_H_ +#pragma once +#ifndef ES_CORE_INPUT_CONFIG_H +#define ES_CORE_INPUT_CONFIG_H #include #include @@ -115,4 +116,4 @@ class InputConfig const std::string mDeviceGUID; }; -#endif +#endif // ES_CORE_INPUT_CONFIG_H diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index 7408356342..7404e9ccf9 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -1,5 +1,6 @@ -#ifndef _INPUTMANAGER_H_ -#define _INPUTMANAGER_H_ +#pragma once +#ifndef ES_CORE_INPUT_MANAGER_H +#define ES_CORE_INPUT_MANAGER_H #include #include @@ -57,4 +58,4 @@ class InputManager bool parseEvent(const SDL_Event& ev, Window* window); }; -#endif +#endif // ES_CORE_INPUT_MANAGER_H diff --git a/es-core/src/Log.h b/es-core/src/Log.h index b0f985984b..1ef6e32b77 100644 --- a/es-core/src/Log.h +++ b/es-core/src/Log.h @@ -1,5 +1,6 @@ -#ifndef _LOG_H_ -#define _LOG_H_ +#pragma once +#ifndef ES_CORE_LOG_H +#define ES_CORE_LOG_H #define LOG(level) \ if(level > Log::getReportingLevel()) ; \ @@ -36,4 +37,4 @@ class Log LogLevel messageLevel; }; -#endif +#endif // ES_CORE_LOG_H diff --git a/es-core/src/PowerSaver.h b/es-core/src/PowerSaver.h index 476ee4e6b8..4ed9a8acf6 100644 --- a/es-core/src/PowerSaver.h +++ b/es-core/src/PowerSaver.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_POWER_SAVER_H +#define ES_CORE_POWER_SAVER_H class PowerSaver { @@ -42,3 +44,5 @@ class PowerSaver static void loadWakeupTime(); }; + +#endif // ES_CORE_POWER_SAVER_H diff --git a/es-core/src/Renderer.h b/es-core/src/Renderer.h index 8b1234e863..2700867c48 100644 --- a/es-core/src/Renderer.h +++ b/es-core/src/Renderer.h @@ -1,5 +1,6 @@ -#ifndef _RENDERER_H_ -#define _RENDERER_H_ +#pragma once +#ifndef ES_CORE_RENDERER_H +#define ES_CORE_RENDERER_H #include #include @@ -36,4 +37,4 @@ namespace Renderer void drawRect(float x, float y, float w, float h, unsigned int color, GLenum blend_sfactor = GL_SRC_ALPHA, GLenum blend_dfactor = GL_ONE_MINUS_SRC_ALPHA); } -#endif +#endif // ES_CORE_RENDERER_H diff --git a/es-core/src/Settings.h b/es-core/src/Settings.h index 6b56400fed..6ab80c8fc6 100644 --- a/es-core/src/Settings.h +++ b/es-core/src/Settings.h @@ -1,4 +1,7 @@ #pragma once +#ifndef ES_CORE_SETTINGS_H +#define ES_CORE_SETTINGS_H + #include #include @@ -35,3 +38,5 @@ class Settings std::map mFloatMap; std::map mStringMap; }; + +#endif // ES_CORE_SETTINGS_H diff --git a/es-core/src/Sound.h b/es-core/src/Sound.h index 2eb430ce04..1f14219322 100644 --- a/es-core/src/Sound.h +++ b/es-core/src/Sound.h @@ -1,5 +1,6 @@ -#ifndef _SOUND_H_ -#define _SOUND_H_ +#pragma once +#ifndef ES_CORE_SOUND_H +#define ES_CORE_SOUND_H #include #include @@ -43,4 +44,4 @@ class Sound static std::map< std::string, std::shared_ptr > sMap; }; -#endif +#endif // ES_CORE_SOUND_H diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index c13a295bd9..530e624552 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_THEME_DATA_H +#define ES_CORE_THEME_DATA_H #include #include @@ -152,3 +154,5 @@ class ThemeData std::map mViews; }; + +#endif // ES_CORE_THEME_DATA_H diff --git a/es-core/src/Util.h b/es-core/src/Util.h index b5a23e67d0..c0d91ecb5a 100644 --- a/es-core/src/Util.h +++ b/es-core/src/Util.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_UTIL_H +#define ES_CORE_UTIL_H #include #include @@ -41,4 +43,6 @@ std::string removeParenthesis(const std::string& str); std::vector commaStringToVector(std::string commaString); // turn a vector of strings into a comma-separated string -std::string vectorToCommaString(std::vector stringVector); \ No newline at end of file +std::string vectorToCommaString(std::vector stringVector); + +#endif // ES_CORE_UTIL_H diff --git a/es-core/src/Window.h b/es-core/src/Window.h index e0577bac05..751bc12c14 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_WINDOW_H +#define ES_CORE_WInDOW_H #include "GuiComponent.h" #include "InputManager.h" @@ -114,3 +116,5 @@ class Window bool mRenderedHelpPrompts; }; + +#endif // ES_CORE_WINDOW_H diff --git a/es-core/src/animations/Animation.h b/es-core/src/animations/Animation.h index 3d69e35a39..2039dd965b 100644 --- a/es-core/src/animations/Animation.h +++ b/es-core/src/animations/Animation.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_ANIMATIONS_ANIMATION_H +#define ES_CORE_ANIMATIONS_ANIMATION_H class Animation { @@ -39,3 +41,5 @@ T lerp(const T& start, const T& end, float t) return (start * (1 - t) + end * t); } + +#endif // ES_CORE_ANIMATIONS_ANIMATION_H diff --git a/es-core/src/animations/AnimationController.h b/es-core/src/animations/AnimationController.h index 2d14f3d8e8..b9c8cf60a2 100644 --- a/es-core/src/animations/AnimationController.h +++ b/es-core/src/animations/AnimationController.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_ANIMATIONS_ANIMATION_CONTROLLER_H +#define ES_CORE_ANIMATIONS_ANIMATION_CONTROLLER_H #include #include @@ -29,3 +31,5 @@ class AnimationController int mTime; int mDelay; }; + +#endif // ES_CORE_ANIMATIONS_ANIMATION_CONTROLLER_H diff --git a/es-core/src/animations/LambdaAnimation.h b/es-core/src/animations/LambdaAnimation.h index afc7d84397..4066e1d52c 100644 --- a/es-core/src/animations/LambdaAnimation.h +++ b/es-core/src/animations/LambdaAnimation.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_ANIMATIONS_LAMBDA_ANIMATION_H +#define ES_CORE_ANIMATIONS_LAMBDA_ANIMATION_H #include "animations/Animation.h" @@ -21,3 +23,5 @@ class LambdaAnimation : public Animation std::function mFunction; int mDuration; }; + +#endif // ES_CORE_ANIMATIONS_LAMBDA_ANIMATION_H diff --git a/es-core/src/components/AnimatedImageComponent.h b/es-core/src/components/AnimatedImageComponent.h index aa3657d016..3d35e044de 100644 --- a/es-core/src/components/AnimatedImageComponent.h +++ b/es-core/src/components/AnimatedImageComponent.h @@ -1,3 +1,7 @@ +#pragma once +#ifndef ES_CORE_COMPONENTS_ANIMATED_IMAGE_COMPONENT_H +#define ES_CORE_COMPONENTS_ANIMATED_IMAGE_COMPONENT_H + #include "GuiComponent.h" #include "ImageComponent.h" @@ -38,3 +42,5 @@ class AnimatedImageComponent : public GuiComponent int mFrameAccumulator; int mCurrentFrame; }; + +#endif // ES_CORE_COMPONENTS_ANIMATED_IMAGE_COMPONENT_H diff --git a/es-core/src/components/BusyComponent.h b/es-core/src/components/BusyComponent.h index 88f35dacb1..1831f205bd 100644 --- a/es-core/src/components/BusyComponent.h +++ b/es-core/src/components/BusyComponent.h @@ -1,3 +1,7 @@ +#pragma once +#ifndef ES_CORE_COMPONENTS_BUSY_COMPONENT_H +#define ES_CORE_COMPONENTS_BUSY_COMPONENT_H + #include "GuiComponent.h" #include "components/ComponentGrid.h" #include "components/NinePatchComponent.h" @@ -21,3 +25,5 @@ class BusyComponent : public GuiComponent std::shared_ptr mAnimation; std::shared_ptr mText; }; + +#endif // ES_CORE_COMPONENTS_BUSY_COMPONENT_H diff --git a/es-core/src/components/ButtonComponent.h b/es-core/src/components/ButtonComponent.h index 4f74af714d..5a8c1c6ac6 100644 --- a/es-core/src/components/ButtonComponent.h +++ b/es-core/src/components/ButtonComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_BUTTON_COMPONENT_H +#define ES_CORE_COMPONENTS_BUTTON_COMPONENT_H #include "GuiComponent.h" #include @@ -45,3 +47,5 @@ class ButtonComponent : public GuiComponent std::unique_ptr mTextCache; NinePatchComponent mBox; }; + +#endif // ES_CORE_COMPONENTS_BUTTON_COMPONENT_H diff --git a/es-core/src/components/ComponentGrid.h b/es-core/src/components/ComponentGrid.h index 42399630d9..19297d917c 100644 --- a/es-core/src/components/ComponentGrid.h +++ b/es-core/src/components/ComponentGrid.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_COMPONENT_GRID_H +#define ES_CORE_COMPONENTS_COMPONENT_GRID_H #include "GuiComponent.h" #include "math/Vector2i.h" @@ -118,3 +120,5 @@ class ComponentGrid : public GuiComponent void onCursorMoved(Vector2i from, Vector2i to); Vector2i mCursor; }; + +#endif // ES_CORE_COMPONENTS_COMPONENT_GRID_H diff --git a/es-core/src/components/ComponentList.h b/es-core/src/components/ComponentList.h index 94141cce5d..b021969447 100644 --- a/es-core/src/components/ComponentList.h +++ b/es-core/src/components/ComponentList.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_COMPONENT_LIST_H +#define ES_CORE_COMPONENTS_COMPONENT_LIST_H #include "IList.h" #include @@ -85,3 +87,5 @@ class ComponentList : public IList std::function mCursorChangedCallback; }; + +#endif // ES_CORE_COMPONENTS_COMPONENT_LIST_H diff --git a/es-core/src/components/DateTimeComponent.h b/es-core/src/components/DateTimeComponent.h index 54e892c2e6..303c848dfa 100644 --- a/es-core/src/components/DateTimeComponent.h +++ b/es-core/src/components/DateTimeComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_DATE_TIME_COMPONENT_H +#define ES_CORE_COMPONENTS_DATE_TIME_COMPONENT_H #include "GuiComponent.h" #include @@ -64,3 +66,5 @@ class DateTimeComponent : public GuiComponent bool mAutoSize; }; + +#endif // ES_CORE_COMPONENTS_DATE_TIME_COMPONENT_H diff --git a/es-core/src/components/HelpComponent.h b/es-core/src/components/HelpComponent.h index 50a9669c39..49710dea6d 100644 --- a/es-core/src/components/HelpComponent.h +++ b/es-core/src/components/HelpComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_HELP_COMPONENT_H +#define ES_CORE_COMPONENTS_HELP_COMPONENT_H #include "GuiComponent.h" #include "HelpStyle.h" @@ -30,3 +32,5 @@ class HelpComponent : public GuiComponent std::vector mPrompts; HelpStyle mStyle; }; + +#endif // ES_CORE_COMPONENTS_HELP_COMPONENT_H diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index a0486aed28..261c63b70b 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_ILIST_H +#define ES_CORE_COMPONENTS_ILIST_H #include #include @@ -311,3 +313,5 @@ class IList : public GuiComponent virtual void onCursorChanged(const CursorState& state) {} virtual void onScroll(int amt) {} }; + +#endif // ES_CORE_COMPONENTS_ILIST_H diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 4d214d91e6..7f0ef8379f 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -1,5 +1,6 @@ -#ifndef _IMAGECOMPONENT_H_ -#define _IMAGECOMPONENT_H_ +#pragma once +#ifndef ES_CORE_COMPONENTS_IMAGE_COMPONENT_H +#define ES_CORE_COMPONENTS_IMAGE_COMPONENT_H #include "platform.h" #include GLHEADER @@ -88,4 +89,4 @@ class ImageComponent : public GuiComponent bool mDynamic; }; -#endif +#endif // ES_CORE_COMPONENTS_IMAGE_COMPONENT_H diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index be32b90aa5..9c1b8645d7 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_IMAGE_GRID_COMPONENT_H +#define ES_CORE_COMPONENTS_IMAGE_GRID_COMPONENT_H #include "GuiComponent.h" #include "components/IList.h" @@ -252,3 +254,5 @@ void ImageGridComponent::updateImages() i++; } } + +#endif // ES_CORE_COMPONENTS_IMAGE_GRID_COMPONENT_H diff --git a/es-core/src/components/MenuComponent.h b/es-core/src/components/MenuComponent.h index f818521273..221f1724d6 100644 --- a/es-core/src/components/MenuComponent.h +++ b/es-core/src/components/MenuComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_MENU_COMPONENT_H +#define ES_CORE_COMPONENTS_MENU_COMPONENT_H #include "components/NinePatchComponent.h" #include "components/ComponentList.h" @@ -53,3 +55,5 @@ class MenuComponent : public GuiComponent std::shared_ptr mButtonGrid; std::vector< std::shared_ptr > mButtons; }; + +#endif // ES_CORE_COMPONENTS_MENU_COMPONENT_H diff --git a/es-core/src/components/NinePatchComponent.h b/es-core/src/components/NinePatchComponent.h index 2f306f2f16..43a634db55 100644 --- a/es-core/src/components/NinePatchComponent.h +++ b/es-core/src/components/NinePatchComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_NINE_PATCH_COMPONENT_H +#define ES_CORE_COMPONENTS_NINE_PATCH_COMPONENT_H #include "GuiComponent.h" #include "resources/TextureResource.h" @@ -52,3 +54,5 @@ class NinePatchComponent : public GuiComponent unsigned int mCenterColor; std::shared_ptr mTexture; }; + +#endif // ES_CORE_COMPONENTS_NINE_PATCH_COMPONENT_H diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index 5ba88fca10..9047ee7f52 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_OPTION_LIST_COMPONENT_H +#define ES_CORE_COMPONENTS_OPTION_LIST_COMPONENT_H #include "GuiComponent.h" #include "resources/Font.h" @@ -336,3 +338,5 @@ class OptionListComponent : public GuiComponent std::vector mEntries; }; + +#endif // ES_CORE_COMPONENTS_OPTION_LIST_COMPONENT_H diff --git a/es-core/src/components/ScrollableContainer.h b/es-core/src/components/ScrollableContainer.h index 2448c792e2..6700a78cb8 100644 --- a/es-core/src/components/ScrollableContainer.h +++ b/es-core/src/components/ScrollableContainer.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_SCROLLABLE_CONTAINER_H +#define ES_CORE_COMPONENTS_SCROLLABLE_CONTAINER_H #include "GuiComponent.h" @@ -26,3 +28,5 @@ class ScrollableContainer : public GuiComponent bool mAtEnd; int mAutoScrollResetAccumulator; }; + +#endif // ES_CORE_COMPONENTS_SCROLLABLE_CONTAINER_H diff --git a/es-core/src/components/SliderComponent.h b/es-core/src/components/SliderComponent.h index b1b0f551ad..2dc784c8b7 100644 --- a/es-core/src/components/SliderComponent.h +++ b/es-core/src/components/SliderComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_SLIDER_COMPONENT_H +#define ES_CORE_COMPONENTS_SLIDER_COMPONENT_H #include "GuiComponent.h" #include "components/ImageComponent.h" @@ -39,3 +41,5 @@ class SliderComponent : public GuiComponent std::shared_ptr mFont; std::shared_ptr mValueCache; }; + +#endif // ES_CORE_COMPONENTS_SLIDER_COMPONENT_H diff --git a/es-core/src/components/SwitchComponent.h b/es-core/src/components/SwitchComponent.h index f26aa69c60..1cff70e383 100644 --- a/es-core/src/components/SwitchComponent.h +++ b/es-core/src/components/SwitchComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_SWITCH_COMPONENT_H +#define ES_CORE_COMPONENTS_SWITCH_COMPONENT_H #include "GuiComponent.h" #include "components/ImageComponent.h" @@ -27,3 +29,5 @@ class SwitchComponent : public GuiComponent ImageComponent mImage; bool mState; }; + +#endif // ES_CORE_COMPONENTS_SWITCH_COMPONENT_H diff --git a/es-core/src/components/TextComponent.h b/es-core/src/components/TextComponent.h index 02a5246ad7..1fc9c8036a 100644 --- a/es-core/src/components/TextComponent.h +++ b/es-core/src/components/TextComponent.h @@ -1,5 +1,6 @@ -#ifndef _TEXTCOMPONENT_H_ -#define _TEXTCOMPONENT_H_ +#pragma once +#ifndef ES_CORE_COMPONENTS_TEXT_COMPONENT_H +#define ES_CORE_COMPONENTS_TEXT_COMPONENT_H #include "GuiComponent.h" #include "resources/Font.h" @@ -63,4 +64,4 @@ class TextComponent : public GuiComponent float mLineSpacing; }; -#endif +#endif // ES_CORE_COMPONENTS_TEXT_COMPONENT_H diff --git a/es-core/src/components/TextEditComponent.h b/es-core/src/components/TextEditComponent.h index 78feefba73..57ef54d138 100644 --- a/es-core/src/components/TextEditComponent.h +++ b/es-core/src/components/TextEditComponent.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_COMPONENTS_TEXT_EDIT_COMPONENT_H +#define ES_CORE_COMPONENTS_TEXT_EDIT_COMPONENT_H #include "GuiComponent.h" #include "components/NinePatchComponent.h" @@ -61,3 +63,5 @@ class TextEditComponent : public GuiComponent std::shared_ptr mFont; std::unique_ptr mTextCache; }; + +#endif // ES_CORE_COMPONENTS_TEXT_EDIT_COMPONENT_H diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index e07c4f7b9e..55258c1aa9 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -1,5 +1,6 @@ -#ifndef _VIDEOCOMPONENT_H_ -#define _VIDEOCOMPONENT_H_ +#pragma once +#ifndef ES_CORE_COMPONENTS_VIDEO_COMPONENT_H +#define ES_CORE_COMPONENTS_VIDEO_COMPONENT_H #include "platform.h" #include GLHEADER @@ -114,4 +115,4 @@ class VideoComponent : public GuiComponent Configuration mConfig; }; -#endif +#endif // ES_CORE_COMPONENTS_VIDEO_COMPONENT_H diff --git a/es-core/src/components/VideoPlayerComponent.h b/es-core/src/components/VideoPlayerComponent.h index 7704106035..cb6eedb886 100644 --- a/es-core/src/components/VideoPlayerComponent.h +++ b/es-core/src/components/VideoPlayerComponent.h @@ -1,6 +1,7 @@ #ifdef _RPI_ -#ifndef _VIDEOPLAYERCOMPONENT_H_ -#define _VIDEOPLAYERCOMPONENT_H_ +#pragma once +#ifndef ES_CORE_COMPONENTS_VIDEO_PLAYER_COMPONENT_H +#define ES_CORE_COMPONENTS_VIDEO_PLAYER_COMPONENT_H #include "platform.h" #include GLHEADER @@ -39,6 +40,5 @@ class VideoPlayerComponent : public VideoComponent std::string subtitlePath; }; -#endif -#endif - +#endif // ES_CORE_COMPONENTS_VIDEO_PLAYER_COMPONENT_H +#endif // _RPI_ diff --git a/es-core/src/components/VideoVlcComponent.h b/es-core/src/components/VideoVlcComponent.h index 98adf80adf..f31aa6bfd7 100644 --- a/es-core/src/components/VideoVlcComponent.h +++ b/es-core/src/components/VideoVlcComponent.h @@ -1,5 +1,6 @@ -#ifndef _VIDEOVLCCOMPONENT_H_ -#define _VIDEOVLCCOMPONENT_H_ +#pragma once +#ifndef ES_CORE_COMPONENTS_VIDEO_VLC_COMPONENT_H +#define ES_CORE_COMPONENTS_VIDEO_VLC_COMPONENT_H #include "platform.h" #include GLHEADER @@ -68,4 +69,4 @@ class VideoVlcComponent : public VideoComponent std::shared_ptr mTexture; }; -#endif +#endif // ES_CORE_COMPONENTS_VIDEO_VLC_COMPONENT_H diff --git a/es-core/src/guis/GuiDetectDevice.h b/es-core/src/guis/GuiDetectDevice.h index f03f940ac3..cd77ecd80d 100644 --- a/es-core/src/guis/GuiDetectDevice.h +++ b/es-core/src/guis/GuiDetectDevice.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_GUIS_GUI_DETECT_DEVICE_H +#define ES_CORE_GUIS_GUI_DETECT_DEVICE_H #include "GuiComponent.h" #include "components/NinePatchComponent.h" @@ -31,3 +33,5 @@ class GuiDetectDevice : public GuiComponent std::function mDoneCallback; }; + +#endif ES_CORE_GUIS_GUI_DETECT_DEVICE_H diff --git a/es-core/src/guis/GuiInputConfig.h b/es-core/src/guis/GuiInputConfig.h index 0c93cb3667..8c54d7e4b6 100644 --- a/es-core/src/guis/GuiInputConfig.h +++ b/es-core/src/guis/GuiInputConfig.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_GUIS_GUI_INPUT_CONFIG_H +#define ES_CORE_GUIS_GUI_INPUT_CONFIG_H #include "GuiComponent.h" #include "components/NinePatchComponent.h" @@ -50,3 +52,5 @@ class GuiInputConfig : public GuiComponent BusyComponent mBusyAnim; }; + +#endif // ES_CORE_GUIS_GUI_INPUT_CONFIG_H diff --git a/es-core/src/guis/GuiMsgBox.h b/es-core/src/guis/GuiMsgBox.h index 6da2469164..be01435ccd 100644 --- a/es-core/src/guis/GuiMsgBox.h +++ b/es-core/src/guis/GuiMsgBox.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_GUIS_GUI_MSG_BOX_H +#define ES_CORE_GUIS_GUI_MSG_BOX_H #include "GuiComponent.h" #include "components/NinePatchComponent.h" @@ -31,3 +33,5 @@ class GuiMsgBox : public GuiComponent std::shared_ptr mButtonGrid; std::function mAcceleratorFunc; }; + +#endif // ES_CORE_GUIS_GUI_MSG_BOX_H diff --git a/es-core/src/guis/GuiTextEditPopup.h b/es-core/src/guis/GuiTextEditPopup.h index 9cba8df3d8..58293330aa 100644 --- a/es-core/src/guis/GuiTextEditPopup.h +++ b/es-core/src/guis/GuiTextEditPopup.h @@ -1,3 +1,7 @@ +#pragma once +#ifndef ES_CORE_GUIS_GUI_TEXT_EDIT_POPUP_H +#define ES_CORE_GUIS_GUI_TEXT_EDIT_POPUP_H + #include "GuiComponent.h" #include "components/NinePatchComponent.h" @@ -26,3 +30,5 @@ class GuiTextEditPopup : public GuiComponent bool mMultiLine; }; + +#endif // ES_CORE_GUIS_GUI_TEXT_EDIT_POPUP_H diff --git a/es-core/src/math/Matrix3x3f.h b/es-core/src/math/Matrix3x3f.h index dbdf1371ee..d349f9b6b6 100644 --- a/es-core/src/math/Matrix3x3f.h +++ b/es-core/src/math/Matrix3x3f.h @@ -1,5 +1,6 @@ -#ifndef _MATRIX3X3F_H_ -#define _MATRIX3X3F_H_ +#pragma once +#ifndef ES_CORE_MATH_MATRIX3X3F_H +#define ES_CORE_MATH_MATRIX3X3F_H #include #include @@ -74,4 +75,4 @@ class Matrix3x3f }; -#endif +#endif // ES_CORE_MATH_MATRIX3X3F_H diff --git a/es-core/src/math/Matrix4x4f.h b/es-core/src/math/Matrix4x4f.h index 4cd68ba9f9..fe5e62c68b 100644 --- a/es-core/src/math/Matrix4x4f.h +++ b/es-core/src/math/Matrix4x4f.h @@ -1,5 +1,6 @@ -#ifndef _MATRIX4X4F_H_ -#define _MATRIX4X4F_H_ +#pragma once +#ifndef ES_CORE_MATH_MATRIX4X4F_H +#define ES_CORE_MATH_MATRIX4X4F_H #include #include @@ -176,4 +177,4 @@ class Matrix4x4f }; -#endif +#endif // ES_CORE_MATH_MATRIX4X4F_H diff --git a/es-core/src/math/Rotation3x3f.h b/es-core/src/math/Rotation3x3f.h index 186eb6ade3..c7aeb09c35 100644 --- a/es-core/src/math/Rotation3x3f.h +++ b/es-core/src/math/Rotation3x3f.h @@ -1,5 +1,6 @@ -#ifndef _ROTATION3X3F_H_ -#define _ROTATION3X3F_H_ +#pragma once +#ifndef ES_CORE_MATH_ROTATION3X3F_H +#define ES_CORE_MATH_ROTATION3X3F_H class Rotation3x3f : public Matrix3x3f { @@ -36,4 +37,4 @@ class Rotation3x3f : public Matrix3x3f }; -#endif +#endif // ES_CORE_MATH_ROTATION3X3F_H diff --git a/es-core/src/math/Scale3x3f.h b/es-core/src/math/Scale3x3f.h index 8471cfe659..36b56ab07e 100644 --- a/es-core/src/math/Scale3x3f.h +++ b/es-core/src/math/Scale3x3f.h @@ -1,5 +1,6 @@ -#ifndef _SCALE3X3F_H_ -#define _SCALE3X3F_H_ +#pragma once +#ifndef ES_CORE_MATH_SCALE3X3F_H +#define ES_CORE_MATH_SCALE3X3F_H class Scale3x3f : public Matrix3x3f { @@ -23,4 +24,4 @@ class Scale3x3f : public Matrix3x3f }; -#endif +#endif // ES_CORE_MATH_SCALE3X3F_H diff --git a/es-core/src/math/Transform4x4f.h b/es-core/src/math/Transform4x4f.h index 492771c447..9df4bf8b40 100644 --- a/es-core/src/math/Transform4x4f.h +++ b/es-core/src/math/Transform4x4f.h @@ -1,5 +1,6 @@ -#ifndef _TRANSFORM4X4F_H_ -#define _TRANSFORM4X4F_H_ +#pragma once +#ifndef ES_CORE_MATH_TRANSFORM4X4F_H +#define ES_CORE_MATH_TRANSFORM4X4F_H #include #include @@ -123,4 +124,4 @@ class Transform4x4f : public Matrix4x4f }; -#endif +#endif // ES_CORE_MATH_TRANSFORM4X4F_H diff --git a/es-core/src/math/Vector2f.h b/es-core/src/math/Vector2f.h index 13f3454268..9e924c40a9 100644 --- a/es-core/src/math/Vector2f.h +++ b/es-core/src/math/Vector2f.h @@ -1,5 +1,6 @@ -#ifndef _VECTOR2F_H_ -#define _VECTOR2F_H_ +#pragma once +#ifndef ES_CORE_MATH_VECTOR2F_H +#define ES_CORE_MATH_VECTOR2F_H #include @@ -62,4 +63,4 @@ class Vector2f }; -#endif +#endif // ES_CORE_MATH_VECTOR2F_H diff --git a/es-core/src/math/Vector2i.h b/es-core/src/math/Vector2i.h index 4ba51498df..08432b4e00 100644 --- a/es-core/src/math/Vector2i.h +++ b/es-core/src/math/Vector2i.h @@ -1,5 +1,6 @@ -#ifndef _VECTOR2I_H_ -#define _VECTOR2I_H_ +#pragma once +#ifndef ES_CORE_MATH_VECTOR2I_H +#define ES_CORE_MATH_VECTOR2I_H #include @@ -55,4 +56,4 @@ class Vector2i }; -#endif +#endif // ES_CORE_MATH_VECTOR2I_H diff --git a/es-core/src/math/Vector3f.h b/es-core/src/math/Vector3f.h index bef670902c..f76e7504e8 100644 --- a/es-core/src/math/Vector3f.h +++ b/es-core/src/math/Vector3f.h @@ -1,5 +1,6 @@ -#ifndef _VECTOR3F_H_ -#define _VECTOR3F_H_ +#pragma once +#ifndef ES_CORE_MATH_VECTOR3F_H +#define ES_CORE_MATH_VECTOR3F_H #include @@ -70,4 +71,4 @@ class Vector3f }; -#endif +#endif // ES_CORE_MATH_VECTOR3F_H diff --git a/es-core/src/math/Vector4f.h b/es-core/src/math/Vector4f.h index 2d5181da77..f263db58bb 100644 --- a/es-core/src/math/Vector4f.h +++ b/es-core/src/math/Vector4f.h @@ -1,5 +1,6 @@ -#ifndef _VECTOR4F_H_ -#define _VECTOR4F_H_ +#pragma once +#ifndef ES_CORE_MATH_VECTOR4F_H +#define ES_CORE_MATH_VECTOR4F_H #include @@ -79,4 +80,4 @@ class Vector4f }; -#endif +#endif // ES_CORE_MATH_VECTOR4F_H diff --git a/es-core/src/platform.h b/es-core/src/platform.h index 0b15ab25df..11ffc10955 100644 --- a/es-core/src/platform.h +++ b/es-core/src/platform.h @@ -1,3 +1,7 @@ +#pragma once +#ifndef ES_CORE_PLATFORM_H +#define ES_CORE_PLATFORM_H + //the Makefile defines one of these: //#define USE_OPENGL_ES //#define USE_OPENGL_DESKTOP @@ -25,3 +29,5 @@ int runRestartCommand(); // restart the system (returns 0 if successful) int runSystemCommand(const std::string& cmd_utf8); // run a utf-8 encoded in the shell (requires wstring conversion on Windows) int quitES(const std::string& filename); void touch(const std::string& filename); + +#endif // ES_CORE_PLATFORM_H diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index a5d15c7159..d11f6dc7a3 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_RESOURCES_FONT_H +#define ES_CORE_RESOURCES_FONT_H #include #include "platform.h" @@ -172,3 +174,5 @@ class TextCache friend Font; }; + +#endif // ES_CORE_RESOURCES_FONT_H diff --git a/es-core/src/resources/ResourceManager.h b/es-core/src/resources/ResourceManager.h index d9d4aa3b8a..edfbcb031d 100644 --- a/es-core/src/resources/ResourceManager.h +++ b/es-core/src/resources/ResourceManager.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_RESOURCES_RESOURCE_MANAGER_H +#define ES_CORE_RESOURCES_RESOURCE_MANAGER_H #include #include @@ -46,3 +48,5 @@ class ResourceManager std::list< std::weak_ptr > mReloadables; }; + +#endif // ES_CORE_RESOURCES_RESOURCE_MANAGER_H diff --git a/es-core/src/resources/TextureData.h b/es-core/src/resources/TextureData.h index 76ca6a0b4d..362cdf0b12 100644 --- a/es-core/src/resources/TextureData.h +++ b/es-core/src/resources/TextureData.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_RESOURCES_TEXTURE_DATA_H +#define ES_CORE_RESOURCES_TEXTURE_DATA_H #include #include @@ -61,3 +63,5 @@ class TextureData bool mScalable; bool mReloadable; }; + +#endif // ES_CORE_RESOURCES_TEXTURE_DATA_H diff --git a/es-core/src/resources/TextureDataManager.h b/es-core/src/resources/TextureDataManager.h index 414804aba9..bc0da25118 100644 --- a/es-core/src/resources/TextureDataManager.h +++ b/es-core/src/resources/TextureDataManager.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_RESOURCES_TEXTURE_DATA_MANAGER_H +#define ES_CORE_RESOURCES_TEXTURE_DATA_MANAGER_H #include "resources/ResourceManager.h" #include "platform.h" @@ -84,3 +86,4 @@ class TextureDataManager TextureLoader* mLoader; }; +#endif // ES_CORE_RESOURCES_TEXTURE_DATA_MANAGER_H diff --git a/es-core/src/resources/TextureResource.h b/es-core/src/resources/TextureResource.h index d1c39e2bb8..4cff40780d 100644 --- a/es-core/src/resources/TextureResource.h +++ b/es-core/src/resources/TextureResource.h @@ -1,4 +1,6 @@ #pragma once +#ifndef ES_CORE_RESOURCES_TEXTURE_RESOURCE_H +#define ES_CORE_RESOURCES_TEXTURE_RESOURCE_H #include "resources/ResourceManager.h" @@ -57,3 +59,5 @@ class TextureResource : public IReloadable static std::map< TextureKeyType, std::weak_ptr > sTextureMap; // map of textures, used to prevent duplicate textures static std::set sAllTextures; // Set of all textures, used for memory management }; + +#endif // ES_CORE_RESOURCES_TEXTURE_RESOURCE_H From 226c9fe923f55c63e1754a07a8224a32a9924e9d Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Wed, 1 Nov 2017 14:09:38 +0100 Subject: [PATCH 188/603] Fix #endif comment --- es-core/src/guis/GuiDetectDevice.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/guis/GuiDetectDevice.h b/es-core/src/guis/GuiDetectDevice.h index cd77ecd80d..a9150bff28 100644 --- a/es-core/src/guis/GuiDetectDevice.h +++ b/es-core/src/guis/GuiDetectDevice.h @@ -34,4 +34,4 @@ class GuiDetectDevice : public GuiComponent std::function mDoneCallback; }; -#endif ES_CORE_GUIS_GUI_DETECT_DEVICE_H +#endif // ES_CORE_GUIS_GUI_DETECT_DEVICE_H From 8f5fbb0b26d0c5433810745aa20366aa8db82bba Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 30 Oct 2017 20:43:58 +0100 Subject: [PATCH 189/603] Got rid of Matrix3x3f, Matrix4x4f, Rotation3x3f and Scale3x3f Everything is now handled by Transform4x4f which now does it way more optimized than previous version --- es-app/src/animations/LaunchAnimation.h | 3 +- es-app/src/views/ViewController.cpp | 3 +- es-app/src/views/gamelist/IGameListView.cpp | 4 +- es-core/src/GuiComponent.cpp | 8 +- es-core/src/math/Matrix3x3f.h | 78 ------ es-core/src/math/Matrix4x4f.h | 180 ------------- es-core/src/math/Rotation3x3f.h | 40 --- es-core/src/math/Scale3x3f.h | 27 -- es-core/src/math/Transform4x4f.h | 271 ++++++++++++++++---- 9 files changed, 234 insertions(+), 380 deletions(-) delete mode 100644 es-core/src/math/Matrix3x3f.h delete mode 100644 es-core/src/math/Matrix4x4f.h delete mode 100644 es-core/src/math/Rotation3x3f.h delete mode 100644 es-core/src/math/Scale3x3f.h diff --git a/es-app/src/animations/LaunchAnimation.h b/es-app/src/animations/LaunchAnimation.h index e6df933fe4..c9120f2384 100644 --- a/es-app/src/animations/LaunchAnimation.h +++ b/es-app/src/animations/LaunchAnimation.h @@ -4,7 +4,6 @@ #include "animations/Animation.h" #include "Log.h" -#include "math/Scale3x3f.h" // let's look at the game launch effect: // -move camera to center on point P (interpolation method: linear) @@ -44,7 +43,7 @@ class LaunchAnimation : public Animation cameraOut = Transform4x4f::Identity(); float zoom = lerp(1.0, 4.25f, t*t); - cameraOut *= Scale3x3f(Vector3f(zoom, zoom, 1)); + cameraOut.scale(zoom); const float sw = (float)Renderer::getScreenWidth() / zoom; const float sh = (float)Renderer::getScreenHeight() / zoom; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index f9a3f8e8c5..ee41d1d6c2 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -372,7 +372,8 @@ void ViewController::update(int deltaTime) void ViewController::render(const Transform4x4f& parentTrans) { Transform4x4f trans = mCamera * parentTrans; - Transform4x4f transInverse = trans.inverse(); + Transform4x4f transInverse; + transInverse.invert(trans); // camera position, position + size Vector3f viewStart = transInverse.translation(); diff --git a/es-app/src/views/gamelist/IGameListView.cpp b/es-app/src/views/gamelist/IGameListView.cpp index 7a70359f2d..93586893bd 100644 --- a/es-app/src/views/gamelist/IGameListView.cpp +++ b/es-app/src/views/gamelist/IGameListView.cpp @@ -46,8 +46,8 @@ void IGameListView::render(const Transform4x4f& parentTrans) { Transform4x4f trans = parentTrans * getTransform(); - float scaleX = trans[0]; - float scaleY = trans[5]; + float scaleX = trans.r0().x(); + float scaleY = trans.r1().y(); Vector2i pos(trans.translation()[0], trans.translation()[1]); Vector2i size(mSize.x() * scaleX, mSize.y() * scaleY); diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index ec380374ce..8d0b633c56 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -4,8 +4,6 @@ #include "Renderer.h" #include "animations/AnimationController.h" #include "ThemeData.h" -#include "math/Rotation3x3f.h" -#include "math/Scale3x3f.h" GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), mPosition(Vector3f::Zero()), mOrigin(Vector2f::Zero()), mRotationOrigin(0.5, 0.5), @@ -247,7 +245,7 @@ const Transform4x4f& GuiComponent::getTransform() mTransform.translate(mPosition); if (mScale != 1.0) { - mTransform *= Scale3x3f(mScale); + mTransform.scale(mScale); } if (mRotation != 0.0) { @@ -259,8 +257,8 @@ const Transform4x4f& GuiComponent::getTransform() if (xOff != 0.0 || yOff != 0.0) mTransform.translate(Vector3f(xOff * -1, yOff * -1, 0.0f)); - // apply rotation transorm - mTransform *= Rotation3x3f(mRotation, Vector3f::UnitZ()); + // apply rotation transform + mTransform.rotateZ(mRotation); // Tranform back to original point if (xOff != 0.0 || yOff != 0.0) diff --git a/es-core/src/math/Matrix3x3f.h b/es-core/src/math/Matrix3x3f.h deleted file mode 100644 index d349f9b6b6..0000000000 --- a/es-core/src/math/Matrix3x3f.h +++ /dev/null @@ -1,78 +0,0 @@ -#pragma once -#ifndef ES_CORE_MATH_MATRIX3X3F_H -#define ES_CORE_MATH_MATRIX3X3F_H - -#include -#include - -class Matrix3x3f -{ -public: - - Matrix3x3f() { } - Matrix3x3f(const Vector3f& r0, const Vector3f& r1, const Vector3f& r2) : mR0(r0), mR1(r1), mR2(r2) { } - - const bool operator==(const Matrix3x3f& other) const { return ((mR0 == other.mR0) && (mR1 == other.mR1) && (mR2 == other.mR2)); } - const bool operator!=(const Matrix3x3f& other) const { return ((mR0 != other.mR0) || (mR1 != other.mR1) || (mR2 != other.mR2)); } - - const Matrix3x3f operator*(const Matrix3x3f& other) const - { - const float* tm = (float*)this; - const float* om = (float*)&other; - - return - { - { - tm[0] * om[0] + tm[1] * om[3] + tm[2] * om[6], - tm[0] * om[1] + tm[1] * om[4] + tm[2] * om[7], - tm[0] * om[2] + tm[1] * om[5] + tm[2] * om[8] - }, - { - tm[3] * om[0] + tm[4] * om[3] + tm[5] * om[6], - tm[3] * om[1] + tm[4] * om[4] + tm[5] * om[7], - tm[3] * om[2] + tm[4] * om[5] + tm[5] * om[8] - }, - { - tm[6] * om[0] + tm[7] * om[3] + tm[8] * om[6], - tm[6] * om[1] + tm[7] * om[4] + tm[8] * om[7], - tm[6] * om[2] + tm[7] * om[5] + tm[8] * om[8] - } - }; - } - - const Vector3f operator*(const Vector3f& other) const - { - const float* tm = (float*)this; - const float* ov = (float*)&other; - - return - { - tm[0] * ov[0] + tm[3] * ov[1] + tm[6] * ov[2], - tm[1] * ov[0] + tm[4] * ov[1] + tm[7] * ov[2], - tm[2] * ov[0] + tm[5] * ov[1] + tm[8] * ov[2] - }; - } - - Matrix3x3f& operator*=(const Matrix3x3f& other) { *this = *this * other; return *this; } - - float& operator[](const int index) { assert(index < 9 && "index out of range"); return ((float*)&mR0)[index]; } - const float& operator[](const int index) const { assert(index < 9 && "index out of range"); return ((float*)&mR0)[index]; } - - Vector3f& r0() { return mR0; } - Vector3f& r1() { return mR1; } - Vector3f& r2() { return mR2; } - const Vector3f& r0() const { return mR0; } - const Vector3f& r1() const { return mR1; } - const Vector3f& r2() const { return mR2; } - - static const Matrix3x3f Identity() { return { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }; } - -protected: - - Vector3f mR0; - Vector3f mR1; - Vector3f mR2; - -}; - -#endif // ES_CORE_MATH_MATRIX3X3F_H diff --git a/es-core/src/math/Matrix4x4f.h b/es-core/src/math/Matrix4x4f.h deleted file mode 100644 index fe5e62c68b..0000000000 --- a/es-core/src/math/Matrix4x4f.h +++ /dev/null @@ -1,180 +0,0 @@ -#pragma once -#ifndef ES_CORE_MATH_MATRIX4X4F_H -#define ES_CORE_MATH_MATRIX4X4F_H - -#include -#include -#include - -class Matrix4x4f -{ -public: - - friend class Transform4x4f; - - Matrix4x4f() { } - Matrix4x4f(const Vector4f& r0, const Vector4f& r1, const Vector4f& r2, const Vector4f& r3) : mR0(r0), mR1(r1), mR2(r2), mR3(r3) { } - - const bool operator==(const Matrix4x4f& other) const { return ((mR0 == other.mR0) && (mR1 == other.mR1) && (mR2 == other.mR2) && (mR3 == other.mR3)); } - const bool operator!=(const Matrix4x4f& other) const { return ((mR0 != other.mR0) || (mR1 != other.mR1) || (mR2 != other.mR2) || (mR3 != other.mR3)); } - - const Matrix4x4f operator*(const Matrix4x4f& other) const - { - const float* tm = (float*)this; - const float* om = (float*)&other; - - return - { - { - tm[ 0] * om[ 0] + tm[ 1] * om[ 4] + tm[ 2] * om[ 8] + tm[ 3] * om[12], - tm[ 0] * om[ 1] + tm[ 1] * om[ 5] + tm[ 2] * om[ 9] + tm[ 3] * om[13], - tm[ 0] * om[ 2] + tm[ 1] * om[ 6] + tm[ 2] * om[10] + tm[ 3] * om[14], - tm[ 0] * om[ 3] + tm[ 1] * om[ 7] + tm[ 2] * om[11] + tm[ 3] * om[15] - }, - { - tm[ 4] * om[ 0] + tm[ 5] * om[ 4] + tm[ 6] * om[ 8] + tm[ 7] * om[12], - tm[ 4] * om[ 1] + tm[ 5] * om[ 5] + tm[ 6] * om[ 9] + tm[ 7] * om[13], - tm[ 4] * om[ 2] + tm[ 5] * om[ 6] + tm[ 6] * om[10] + tm[ 7] * om[14], - tm[ 4] * om[ 3] + tm[ 5] * om[ 7] + tm[ 6] * om[11] + tm[ 7] * om[15] - }, - { - tm[ 8] * om[ 0] + tm[ 9] * om[ 4] + tm[10] * om[ 8] + tm[11] * om[12], - tm[ 8] * om[ 1] + tm[ 9] * om[ 5] + tm[10] * om[ 9] + tm[11] * om[13], - tm[ 8] * om[ 2] + tm[ 9] * om[ 6] + tm[10] * om[10] + tm[11] * om[14], - tm[ 8] * om[ 3] + tm[ 9] * om[ 7] + tm[10] * om[11] + tm[11] * om[15] - }, - { - tm[12] * om[ 0] + tm[13] * om[ 4] + tm[14] * om[ 8] + tm[15] * om[12], - tm[12] * om[ 1] + tm[13] * om[ 5] + tm[14] * om[ 9] + tm[15] * om[13], - tm[12] * om[ 2] + tm[13] * om[ 6] + tm[14] * om[10] + tm[15] * om[14], - tm[12] * om[ 3] + tm[13] * om[ 7] + tm[14] * om[11] + tm[15] * om[15] - } - }; - } - - const Matrix4x4f operator*(const Matrix3x3f& other) const - { - const float* tm = (float*)this; - const float* om = (float*)&other; - - return - { - { - tm[ 0] * om[0] + tm[ 1] * om[3] + tm[ 2] * om[6], - tm[ 0] * om[1] + tm[ 1] * om[4] + tm[ 2] * om[7], - tm[ 0] * om[2] + tm[ 1] * om[5] + tm[ 2] * om[8], - tm[ 3] - }, - { - tm[ 4] * om[0] + tm[ 5] * om[3] + tm[ 6] * om[6], - tm[ 4] * om[1] + tm[ 5] * om[4] + tm[ 6] * om[7], - tm[ 4] * om[2] + tm[ 5] * om[5] + tm[ 6] * om[8], - tm[ 7] - }, - { - tm[ 8] * om[0] + tm[ 9] * om[3] + tm[10] * om[6], - tm[ 8] * om[1] + tm[ 9] * om[4] + tm[10] * om[7], - tm[ 8] * om[2] + tm[ 9] * om[5] + tm[10] * om[8], - tm[11] - }, - { - tm[12], - tm[13], - tm[14], - tm[15] - } - }; - } - - Matrix4x4f& operator*=(const Matrix4x4f& other) { *this = *this * other; return *this; } - Matrix4x4f& operator*=(const Matrix3x3f& other) { *this = *this * other; return *this; } - - float& operator[](const int index) { assert(index < 16 && "index out of range"); return ((float*)&mR0)[index]; } - const float& operator[](const int index) const { assert(index < 16 && "index out of range"); return ((float*)&mR0)[index]; } - - Vector4f& r0() { return mR0; } - Vector4f& r1() { return mR1; } - Vector4f& r2() { return mR2; } - Vector4f& r3() { return mR3; } - const Vector4f& r0() const { return mR0; } - const Vector4f& r1() const { return mR1; } - const Vector4f& r2() const { return mR2; } - const Vector4f& r3() const { return mR3; } - - Matrix4x4f& invert(const Matrix4x4f& other) - { - auto Determinant2x2 = [=](const float x1, const float x2, - const float y1, const float y2) - { - return x1 * y2 - x2 * y1; - }; - - auto Determinant3x3 = [=](const float x1, const float x2, const float x3, - const float y1, const float y2, const float y3, - const float z1, const float z2, const float z3) - { - return x1 * Determinant2x2(y2, y3, z2, z3) - - y1 * Determinant2x2(x2, x3, z2, z3) + - z1 * Determinant2x2(x2, x3, y2, y3); - }; - - float* tm = (float*)this; - const float* om = (float*)&other; - - tm[ 0] = Determinant3x3(om[ 5], om[ 6], om[ 7], om[ 9], om[10], om[11], om[13], om[14], om[15]); - tm[ 1] = -Determinant3x3(om[ 1], om[ 2], om[ 3], om[ 9], om[10], om[11], om[13], om[14], om[15]); - tm[ 2] = Determinant3x3(om[ 1], om[ 2], om[ 3], om[ 5], om[ 6], om[ 7], om[13], om[14], om[15]); - tm[ 3] = -Determinant3x3(om[ 1], om[ 2], om[ 3], om[ 5], om[ 6], om[ 7], om[ 9], om[10], om[11]); - tm[ 4] = -Determinant3x3(om[ 4], om[ 6], om[ 7], om[ 8], om[10], om[11], om[12], om[14], om[15]); - tm[ 5] = Determinant3x3(om[ 0], om[ 2], om[ 3], om[ 8], om[10], om[11], om[12], om[14], om[15]); - tm[ 6] = -Determinant3x3(om[ 0], om[ 2], om[ 3], om[ 4], om[ 6], om[ 7], om[12], om[14], om[15]); - tm[ 7] = Determinant3x3(om[ 0], om[ 2], om[ 3], om[ 4], om[ 6], om[ 7], om[ 8], om[10], om[11]); - tm[ 8] = Determinant3x3(om[ 4], om[ 5], om[ 7], om[ 8], om[ 9], om[11], om[12], om[13], om[15]); - tm[ 9] = -Determinant3x3(om[ 0], om[ 1], om[ 3], om[ 8], om[ 9], om[11], om[12], om[13], om[15]); - tm[10] = Determinant3x3(om[ 0], om[ 1], om[ 3], om[ 4], om[ 5], om[ 7], om[12], om[13], om[15]); - tm[11] = -Determinant3x3(om[ 0], om[ 1], om[ 3], om[ 4], om[ 5], om[ 7], om[ 8], om[ 9], om[11]); - tm[12] = -Determinant3x3(om[ 4], om[ 5], om[ 6], om[ 8], om[ 9], om[10], om[12], om[13], om[14]); - tm[13] = Determinant3x3(om[ 0], om[ 1], om[ 2], om[ 8], om[ 9], om[10], om[12], om[13], om[14]); - tm[14] = -Determinant3x3(om[ 0], om[ 1], om[ 2], om[ 4], om[ 5], om[ 6], om[12], om[13], om[14]); - tm[15] = Determinant3x3(om[ 0], om[ 1], om[ 2], om[ 4], om[ 5], om[ 6], om[ 8], om[ 9], om[10]); - - float Determinant = om[ 0] * tm[ 0] + - om[ 4] * tm[ 1] + - om[ 8] * tm[ 2] + - om[12] * tm[ 3]; - - if(Determinant != 0) - Determinant = 1 / Determinant; - - mR0 *= Determinant; - mR1 *= Determinant; - mR2 *= Determinant; - mR3 *= Determinant; - - return *this; - } - - Matrix4x4f& invert() - { - return invert(Matrix4x4f(*this)); - } - - Matrix4x4f inverse() - { - Matrix4x4f m; - m.invert(*this); - return m; - } - - static const Matrix4x4f Identity() { return { { 1, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 1, 0 }, { 0, 0, 0, 1 } }; } - -protected: - - Vector4f mR0; - Vector4f mR1; - Vector4f mR2; - Vector4f mR3; - -}; - -#endif // ES_CORE_MATH_MATRIX4X4F_H diff --git a/es-core/src/math/Rotation3x3f.h b/es-core/src/math/Rotation3x3f.h deleted file mode 100644 index c7aeb09c35..0000000000 --- a/es-core/src/math/Rotation3x3f.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once -#ifndef ES_CORE_MATH_ROTATION3X3F_H -#define ES_CORE_MATH_ROTATION3X3F_H - -class Rotation3x3f : public Matrix3x3f -{ -public: - - Rotation3x3f(const float angle, const Vector3f& axis) - { - float* tm = (float*)this; - const float* av = (float*)&axis; - - const float s = sin(-angle); - const float c = cos(-angle); - const float t = 1 - c; - const float x = av[0]; - const float y = av[1]; - const float z = av[2]; - const float tx = t * x; - const float ty = t * y; - const float tz = t * z; - const float sx = s * x; - const float sy = s * y; - const float sz = s * z; - - tm[0] = tx * x + c; - tm[1] = tx * y - sz; - tm[2] = tx * z + sy; - tm[3] = ty * x + sz; - tm[4] = ty * y + c; - tm[5] = ty * z - sy; - tm[6] = tz * x - sy; - tm[7] = tz * y + sx; - tm[8] = tz * z + c; - }; - -}; - -#endif // ES_CORE_MATH_ROTATION3X3F_H diff --git a/es-core/src/math/Scale3x3f.h b/es-core/src/math/Scale3x3f.h deleted file mode 100644 index 36b56ab07e..0000000000 --- a/es-core/src/math/Scale3x3f.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once -#ifndef ES_CORE_MATH_SCALE3X3F_H -#define ES_CORE_MATH_SCALE3X3F_H - -class Scale3x3f : public Matrix3x3f -{ -public: - - Scale3x3f(const Vector3f& scale) - { - float* tm = (float*)this; - const float* sv = (float*)&scale; - - tm[0] = sv[0]; - tm[1] = 0; - tm[2] = 0; - tm[3] = 0; - tm[4] = sv[1]; - tm[5] = 0; - tm[6] = 0; - tm[7] = 0; - tm[8] = sv[2]; - }; - -}; - -#endif // ES_CORE_MATH_SCALE3X3F_H diff --git a/es-core/src/math/Transform4x4f.h b/es-core/src/math/Transform4x4f.h index 9df4bf8b40..43c4c9e49a 100644 --- a/es-core/src/math/Transform4x4f.h +++ b/es-core/src/math/Transform4x4f.h @@ -2,18 +2,18 @@ #ifndef ES_CORE_MATH_TRANSFORM4X4F_H #define ES_CORE_MATH_TRANSFORM4X4F_H -#include -#include +#include "math/Vector4f.h" +#include "math/Vector3f.h" +#include -class Transform4x4f : public Matrix4x4f +class Transform4x4f { public: - Transform4x4f() { } - Transform4x4f(const Matrix4x4f& m) : Matrix4x4f(m) { } - Transform4x4f(const Vector4f& r0, const Vector4f& r1, const Vector4f& r2, const Vector4f& r3) : Matrix4x4f(r0, r1, r2, r3) { } + Transform4x4f() { } + Transform4x4f(const Vector4f& r0, const Vector4f& r1, const Vector4f& r2, const Vector4f& r3) : mR0(r0), mR1(r1), mR2(r2), mR3(r3) { } - const Transform4x4f operator*(const Matrix4x4f& other) const + const Transform4x4f operator*(const Transform4x4f& other) const { const float* tm = (float*)this; const float* om = (float*)&other; @@ -47,40 +47,6 @@ class Transform4x4f : public Matrix4x4f }; } - const Transform4x4f operator*(const Matrix3x3f& other) const - { - const float* tm = (float*)this; - const float* om = (float*)&other; - - return - { - { - tm[ 0] * om[0] + tm[ 1] * om[3] + tm[ 2] * om[6], - tm[ 0] * om[1] + tm[ 1] * om[4] + tm[ 2] * om[7], - tm[ 0] * om[2] + tm[ 1] * om[5] + tm[ 2] * om[8], - 0 - }, - { - tm[ 4] * om[0] + tm[ 5] * om[3] + tm[ 6] * om[6], - tm[ 4] * om[1] + tm[ 5] * om[4] + tm[ 6] * om[7], - tm[ 4] * om[2] + tm[ 5] * om[5] + tm[ 6] * om[8], - 0 - }, - { - tm[ 8] * om[0] + tm[ 9] * om[3] + tm[10] * om[6], - tm[ 8] * om[1] + tm[ 9] * om[4] + tm[10] * om[7], - tm[ 8] * om[2] + tm[ 9] * om[5] + tm[10] * om[8], - 0 - }, - { - tm[12], - tm[13], - tm[14], - 1 - } - }; - } - const Vector3f operator*(const Vector3f& other) const { const float* tm = (float*)this; @@ -94,11 +60,213 @@ class Transform4x4f : public Matrix4x4f }; } - Transform4x4f& operator*=(const Matrix4x4f& other) { *this = *this * other; return *this; } - Transform4x4f& operator*=(const Matrix3x3f& other) { *this = *this * other; return *this; } + Transform4x4f& operator*=(const Transform4x4f& other) { *this = *this * other; return *this; } - inline Vector3f& translation() { return mR3.v3(); } - inline const Vector3f& translation() const { return mR3.v3(); } + inline Vector4f& r0() { return mR0; } + inline Vector4f& r1() { return mR1; } + inline Vector4f& r2() { return mR2; } + inline Vector4f& r3() { return mR3; } + inline const Vector4f& r0() const { return mR0; } + inline const Vector4f& r1() const { return mR1; } + inline const Vector4f& r2() const { return mR2; } + inline const Vector4f& r3() const { return mR3; } + + inline Transform4x4f& invert(const Transform4x4f& other) + { + float* tm = (float*)this; + const float* om = (float*)&other; + + // Full invert + // tm[ 0] = ((om[ 5] * (om[10] * om[15] - om[11] * om[14])) - (om[ 9] * (om[ 6] * om[15] - om[ 7] * om[14])) + (om[13] * (om[ 6] * om[11] - om[ 7] * om[10]))); + // tm[ 1] = -((om[ 1] * (om[10] * om[15] - om[11] * om[14])) - (om[ 9] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[13] * (om[ 2] * om[11] - om[ 3] * om[10]))); + // tm[ 2] = ((om[ 1] * (om[ 6] * om[15] - om[ 7] * om[14])) - (om[ 5] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[13] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); + // tm[ 3] = -((om[ 1] * (om[ 6] * om[11] - om[ 7] * om[10])) - (om[ 5] * (om[ 2] * om[11] - om[ 3] * om[10])) + (om[ 9] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); + // tm[ 4] = -((om[ 4] * (om[10] * om[15] - om[11] * om[14])) - (om[ 8] * (om[ 6] * om[15] - om[ 7] * om[14])) + (om[12] * (om[ 6] * om[11] - om[ 7] * om[10]))); + // tm[ 5] = ((om[ 0] * (om[10] * om[15] - om[11] * om[14])) - (om[ 8] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[12] * (om[ 2] * om[11] - om[ 3] * om[10]))); + // tm[ 6] = -((om[ 0] * (om[ 6] * om[15] - om[ 7] * om[14])) - (om[ 4] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[12] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); + // tm[ 7] = ((om[ 0] * (om[ 6] * om[11] - om[ 7] * om[10])) - (om[ 4] * (om[ 2] * om[11] - om[ 3] * om[10])) + (om[ 8] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); + // tm[ 8] = ((om[ 4] * (om[ 9] * om[15] - om[11] * om[13])) - (om[ 8] * (om[ 5] * om[15] - om[ 7] * om[13])) + (om[12] * (om[ 5] * om[11] - om[ 7] * om[ 9]))); + // tm[ 9] = -((om[ 0] * (om[ 9] * om[15] - om[11] * om[13])) - (om[ 8] * (om[ 1] * om[15] - om[ 3] * om[13])) + (om[12] * (om[ 1] * om[11] - om[ 3] * om[ 9]))); + // tm[10] = ((om[ 0] * (om[ 5] * om[15] - om[ 7] * om[13])) - (om[ 4] * (om[ 1] * om[15] - om[ 3] * om[13])) + (om[12] * (om[ 1] * om[ 7] - om[ 3] * om[ 5]))); + // tm[11] = -((om[ 0] * (om[ 5] * om[11] - om[ 7] * om[ 9])) - (om[ 4] * (om[ 1] * om[11] - om[ 3] * om[ 9])) + (om[ 8] * (om[ 1] * om[ 7] - om[ 3] * om[ 5]))); + // tm[12] = -((om[ 4] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 5] * om[14] - om[ 6] * om[13])) + (om[12] * (om[ 5] * om[10] - om[ 6] * om[ 9]))); + // tm[13] = ((om[ 0] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[10] - om[ 2] * om[ 9]))); + // tm[14] = -((om[ 0] * (om[ 5] * om[14] - om[ 6] * om[13])) - (om[ 4] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[ 6] - om[ 2] * om[ 5]))); + // tm[15] = ((om[ 0] * (om[ 5] * om[10] - om[ 6] * om[ 9])) - (om[ 4] * (om[ 1] * om[10] - om[ 2] * om[ 9])) + (om[ 8] * (om[ 1] * om[ 6] - om[ 2] * om[ 5]))); + + // Optimized invert ( om[3, 7 and 11] is always 0, and om[15] is always 1 ) + tm[ 0] = ((om[ 5] * om[10]) - (om[ 9] * om[ 6])); + tm[ 1] = -((om[ 1] * om[10]) - (om[ 9] * om[ 2])); + tm[ 2] = ((om[ 1] * om[ 6]) - (om[ 5] * om[ 2])); + tm[ 3] = 0; + tm[ 4] = -((om[ 4] * om[10]) - (om[ 8] * om[ 6])); + tm[ 5] = ((om[ 0] * om[10]) - (om[ 8] * om[ 2])); + tm[ 6] = -((om[ 0] * om[ 6]) - (om[ 4] * om[ 2])); + tm[ 7] = 0; + tm[ 8] = ((om[ 4] * om[ 9]) - (om[ 8] * om[ 5])); + tm[ 9] = -((om[ 0] * om[ 9]) - (om[ 8] * om[ 1])); + tm[10] = ((om[ 0] * om[ 5]) - (om[ 4] * om[ 1])); + tm[11] = 0; + tm[12] = -((om[ 4] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 5] * om[14] - om[ 6] * om[13])) + (om[12] * (om[ 5] * om[10] - om[ 6] * om[ 9]))); + tm[13] = ((om[ 0] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[10] - om[ 2] * om[ 9]))); + tm[14] = -((om[ 0] * (om[ 5] * om[14] - om[ 6] * om[13])) - (om[ 4] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[ 6] - om[ 2] * om[ 5]))); + tm[15] = 1; + + float Determinant = om[ 0] * tm[ 0] + + om[ 4] * tm[ 1] + + om[ 8] * tm[ 2] + + om[12] * tm[ 3]; + + if(Determinant != 0) + Determinant = 1 / Determinant; + + tm[ 0] *= Determinant; + tm[ 1] *= Determinant; + tm[ 2] *= Determinant; + tm[ 4] *= Determinant; + tm[ 5] *= Determinant; + tm[ 6] *= Determinant; + tm[ 8] *= Determinant; + tm[ 9] *= Determinant; + tm[10] *= Determinant; + tm[12] *= Determinant; + tm[13] *= Determinant; + tm[14] *= Determinant; + + return *this; + } + + inline Transform4x4f& scale(const Vector3f& scale) + { + float* tm = (float*)this; + const float* sv = (float*)&scale; + + tm[ 0] *= sv[0]; + tm[ 1] *= sv[1]; + tm[ 2] *= sv[2]; + tm[ 4] *= sv[0]; + tm[ 5] *= sv[1]; + tm[ 6] *= sv[2]; + tm[ 8] *= sv[0]; + tm[ 9] *= sv[1]; + tm[10] *= sv[2]; + + return *this; + } + + inline Transform4x4f& rotate(const float angle, const Vector3f& axis) + { + float* tm = (float*)this; + const float* av = (float*)&axis; + const float s = sin(-angle); + const float c = cos(-angle); + const float t = 1 - c; + const float x = av[0]; + const float y = av[1]; + const float z = av[2]; + const float tx = t * x; + const float ty = t * y; + const float tz = t * z; + const float sx = s * x; + const float sy = s * y; + const float sz = s * z; + const float r[9] = { tx * x + c, + tx * y - sz, + tx * z + sy, + ty * x + sz, + ty * y + c, + ty * z - sx, + tz * x - sy, + tz * y + sx, + tz * z + c }; + const float temp[9] = { tm[ 0] * r[0] + tm[ 1] * r[3] + tm[ 2] * r[6], + tm[ 0] * r[1] + tm[ 1] * r[4] + tm[ 2] * r[7], + tm[ 0] * r[2] + tm[ 1] * r[5] + tm[ 2] * r[8], + tm[ 4] * r[0] + tm[ 5] * r[3] + tm[ 6] * r[6], + tm[ 4] * r[1] + tm[ 5] * r[4] + tm[ 6] * r[7], + tm[ 4] * r[2] + tm[ 5] * r[5] + tm[ 6] * r[8], + tm[ 8] * r[0] + tm[ 9] * r[3] + tm[10] * r[6], + tm[ 8] * r[1] + tm[ 9] * r[4] + tm[10] * r[7], + tm[ 8] * r[2] + tm[ 9] * r[5] + tm[10] * r[8] }; + + tm[ 0] = temp[0]; + tm[ 1] = temp[1]; + tm[ 2] = temp[2]; + tm[ 4] = temp[3]; + tm[ 5] = temp[4]; + tm[ 6] = temp[5]; + tm[ 8] = temp[6]; + tm[ 9] = temp[7]; + tm[10] = temp[8]; + + return *this; + }; + + inline Transform4x4f& rotateX(const float angle) + { + float* tm = (float*)this; + const float s = sin(-angle); + const float c = cos(-angle); + const float temp[6] = { tm[ 1] * c + tm[ 2] * s, + tm[ 1] * -s + tm[ 2] * c, + tm[ 5] * c + tm[ 6] * s, + tm[ 5] * -s + tm[ 6] * c, + tm[ 9] * c + tm[10] * s, + tm[ 9] * -s + tm[10] * c }; + + tm[ 1] = temp[0]; + tm[ 2] = temp[1]; + tm[ 5] = temp[2]; + tm[ 6] = temp[3]; + tm[ 9] = temp[4]; + tm[10] = temp[5]; + + return *this; + }; + + inline Transform4x4f& rotateY(const float angle) + { + float* tm = (float*)this; + const float s = sin(-angle); + const float c = cos(-angle); + const float temp[6] = { tm[ 0] * c + tm[ 2] * -s, + tm[ 0] * s + tm[ 2] * c, + tm[ 4] * c + tm[ 6] * -s, + tm[ 4] * s + tm[ 6] * c, + tm[ 8] * c + tm[10] * -s, + tm[ 8] * s + tm[10] * c }; + + tm[ 0] = temp[0]; + tm[ 2] = temp[1]; + tm[ 4] = temp[2]; + tm[ 6] = temp[3]; + tm[ 8] = temp[4]; + tm[10] = temp[5]; + + return *this; + }; + + inline Transform4x4f& rotateZ(const float angle) + { + float* tm = (float*)this; + const float s = sin(-angle); + const float c = cos(-angle); + const float temp[6] = { tm[ 0] * c + tm[ 1] * s, + tm[ 0] * -s + tm[ 1] * c, + tm[ 4] * c + tm[ 5] * s, + tm[ 4] * -s + tm[ 5] * c, + tm[ 8] * c + tm[ 9] * s, + tm[ 8] * -s + tm[ 9] * c }; + + tm[ 0] = temp[0]; + tm[ 1] = temp[1]; + tm[ 4] = temp[2]; + tm[ 5] = temp[3]; + tm[ 8] = temp[4]; + tm[ 9] = temp[5]; + + return *this; + }; inline Transform4x4f& translate(const Vector3f& translation) { @@ -118,10 +286,23 @@ class Transform4x4f : public Matrix4x4f tm[12] = (int)(tm[12] + 0.5f); tm[13] = (int)(tm[13] + 0.5f); + tm[14] = (int)(tm[14] + 0.5f); return *this; } + inline Vector3f& translation() { return mR3.v3(); } + inline const Vector3f& translation() const { return mR3.v3(); } + + static const Transform4x4f Identity() { return { { 1, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 1, 0 }, { 0, 0, 0, 1 } }; } + +protected: + + Vector4f mR0; + Vector4f mR1; + Vector4f mR2; + Vector4f mR3; + }; #endif // ES_CORE_MATH_TRANSFORM4X4F_H From a8fc56074983c3dfb47adc303aeb442a03e77a42 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Wed, 1 Nov 2017 23:21:10 +0100 Subject: [PATCH 190/603] Header inclusion cleanup --- es-app/src/CollectionSystemManager.cpp | 28 ++++++++--------- es-app/src/CollectionSystemManager.h | 16 +++++----- es-app/src/FileData.cpp | 15 ++++++--- es-app/src/FileData.h | 7 ++--- es-app/src/FileFilterIndex.cpp | 7 ++++- es-app/src/FileFilterIndex.h | 10 ++---- es-app/src/FileSorts.h | 3 +- es-app/src/Gamelist.cpp | 9 ++++-- es-app/src/MetaData.cpp | 3 +- es-app/src/MetaData.h | 9 ++---- es-app/src/PlatformId.cpp | 1 + es-app/src/PlatformId.h | 2 -- es-app/src/ScraperCmdLine.cpp | 13 +++++--- es-app/src/SystemData.cpp | 19 +++++++----- es-app/src/SystemData.h | 16 +++++----- es-app/src/SystemScreenSaver.cpp | 18 +++++------ es-app/src/SystemScreenSaver.h | 2 +- es-app/src/VolumeControl.cpp | 6 ++-- es-app/src/VolumeControl.h | 4 +-- es-app/src/animations/LaunchAnimation.h | 1 - es-app/src/components/AsyncReqComponent.cpp | 2 ++ es-app/src/components/AsyncReqComponent.h | 5 ++- es-app/src/components/RatingComponent.cpp | 5 +-- es-app/src/components/RatingComponent.h | 5 ++- .../src/components/ScraperSearchComponent.cpp | 18 +++++------ .../src/components/ScraperSearchComponent.h | 13 +++----- es-app/src/components/TextListComponent.h | 11 ++----- .../src/guis/GuiCollectionSystemsOptions.cpp | 13 ++++---- es-app/src/guis/GuiCollectionSystemsOptions.h | 9 ++---- es-app/src/guis/GuiFastSelect.cpp | 3 +- es-app/src/guis/GuiFastSelect.h | 6 ++-- es-app/src/guis/GuiGameScraper.cpp | 10 +++--- es-app/src/guis/GuiGameScraper.h | 4 +-- es-app/src/guis/GuiGamelistFilter.cpp | 4 +-- es-app/src/guis/GuiGamelistFilter.h | 7 ++--- es-app/src/guis/GuiGamelistOptions.cpp | 10 ++++-- es-app/src/guis/GuiGamelistOptions.h | 6 ++-- .../src/guis/GuiGeneralScreensaverOptions.cpp | 14 ++------- .../src/guis/GuiGeneralScreensaverOptions.h | 1 - es-app/src/guis/GuiInfoPopup.cpp | 7 +++-- es-app/src/guis/GuiInfoPopup.h | 6 ++-- es-app/src/guis/GuiMenu.cpp | 30 +++++++----------- es-app/src/guis/GuiMenu.h | 3 +- es-app/src/guis/GuiMetaDataEd.cpp | 23 ++++++++------ es-app/src/guis/GuiMetaDataEd.h | 8 +++-- es-app/src/guis/GuiScraperMulti.cpp | 14 ++++----- es-app/src/guis/GuiScraperMulti.h | 6 ++-- es-app/src/guis/GuiScraperStart.cpp | 9 +++--- es-app/src/guis/GuiScraperStart.h | 12 +++---- es-app/src/guis/GuiScreensaverOptions.cpp | 8 ++--- es-app/src/guis/GuiScreensaverOptions.h | 2 -- es-app/src/guis/GuiSettings.cpp | 6 ++-- es-app/src/guis/GuiSettings.h | 2 -- .../guis/GuiSlideshowScreensaverOptions.cpp | 12 ++----- .../src/guis/GuiSlideshowScreensaverOptions.h | 1 - .../src/guis/GuiVideoScreensaverOptions.cpp | 10 ++---- es-app/src/guis/GuiVideoScreensaverOptions.h | 1 - es-app/src/main.cpp | 31 +++++++++---------- es-app/src/scrapers/GamesDBScraper.cpp | 8 +++-- es-app/src/scrapers/Scraper.cpp | 12 ++++--- es-app/src/scrapers/Scraper.h | 10 +++--- es-app/src/views/SystemView.cpp | 14 ++++----- es-app/src/views/SystemView.h | 11 +++---- es-app/src/views/ViewController.cpp | 23 +++++++------- es-app/src/views/ViewController.h | 8 +++-- .../src/views/gamelist/BasicGameListView.cpp | 9 +++--- es-app/src/views/gamelist/BasicGameListView.h | 2 +- .../views/gamelist/DetailedGameListView.cpp | 4 +-- .../src/views/gamelist/DetailedGameListView.h | 6 ++-- .../src/views/gamelist/GridGameListView.cpp | 3 +- es-app/src/views/gamelist/GridGameListView.h | 4 +-- es-app/src/views/gamelist/IGameListView.cpp | 7 ++--- es-app/src/views/gamelist/IGameListView.h | 5 ++- .../views/gamelist/ISimpleGameListView.cpp | 9 +++--- .../src/views/gamelist/ISimpleGameListView.h | 6 ++-- .../src/views/gamelist/VideoGameListView.cpp | 11 ++++--- es-app/src/views/gamelist/VideoGameListView.h | 9 +++--- es-core/src/AsyncHandle.h | 2 ++ es-core/src/AudioManager.cpp | 5 +-- es-core/src/AudioManager.h | 8 ++--- es-core/src/GuiComponent.cpp | 6 ++-- es-core/src/GuiComponent.h | 15 +++++---- es-core/src/HelpPrompt.h | 9 ++++++ es-core/src/HelpStyle.cpp | 4 +-- es-core/src/HelpStyle.h | 2 +- es-core/src/HttpReq.cpp | 4 +-- es-core/src/HttpReq.h | 2 +- es-core/src/ImageIO.cpp | 5 ++- es-core/src/ImageIO.h | 2 +- es-core/src/InputConfig.cpp | 6 +--- es-core/src/InputConfig.h | 8 ++--- es-core/src/InputManager.cpp | 10 +++--- es-core/src/InputManager.h | 5 ++- es-core/src/Log.cpp | 6 ++-- es-core/src/Log.h | 6 ++-- es-core/src/PowerSaver.cpp | 2 +- es-core/src/Renderer.h | 8 ++--- es-core/src/Renderer_draw_gl.cpp | 8 ++--- es-core/src/Renderer_init_sdlgl.cpp | 11 +++---- es-core/src/Settings.cpp | 7 +++-- es-core/src/Settings.h | 1 - es-core/src/Sound.cpp | 1 + es-core/src/Sound.h | 3 +- es-core/src/ThemeData.cpp | 16 ++++------ es-core/src/ThemeData.h | 20 ++++++------ es-core/src/Util.cpp | 7 +++-- es-core/src/Util.h | 7 ++--- es-core/src/Window.cpp | 14 ++++----- es-core/src/Window.h | 14 ++++++--- .../src/animations/AnimationController.cpp | 2 ++ es-core/src/animations/AnimationController.h | 4 +-- .../src/components/AnimatedImageComponent.cpp | 3 ++ .../src/components/AnimatedImageComponent.h | 3 +- es-core/src/components/BusyComponent.cpp | 1 + es-core/src/components/BusyComponent.h | 2 +- es-core/src/components/ButtonComponent.cpp | 4 +-- es-core/src/components/ButtonComponent.h | 6 ++-- es-core/src/components/ComponentGrid.cpp | 2 +- es-core/src/components/ComponentGrid.h | 2 +- es-core/src/components/ComponentList.cpp | 4 +-- es-core/src/components/ComponentList.h | 1 - es-core/src/components/DateTimeComponent.cpp | 5 +-- es-core/src/components/DateTimeComponent.h | 5 +-- es-core/src/components/HelpComponent.cpp | 13 ++++---- es-core/src/components/HelpComponent.h | 2 +- es-core/src/components/IList.h | 5 --- es-core/src/components/ImageComponent.cpp | 6 ++-- es-core/src/components/ImageComponent.h | 7 ++--- es-core/src/components/ImageGridComponent.h | 4 +-- es-core/src/components/MenuComponent.cpp | 1 + es-core/src/components/MenuComponent.h | 5 +-- es-core/src/components/NinePatchComponent.cpp | 4 +-- es-core/src/components/NinePatchComponent.h | 5 ++- es-core/src/components/OptionListComponent.h | 8 +---- .../src/components/ScrollableContainer.cpp | 2 +- es-core/src/components/SliderComponent.cpp | 6 ++-- es-core/src/components/SliderComponent.h | 4 +-- es-core/src/components/SwitchComponent.cpp | 4 +-- es-core/src/components/SwitchComponent.h | 2 +- es-core/src/components/TextComponent.cpp | 6 ++-- es-core/src/components/TextComponent.h | 2 +- es-core/src/components/TextEditComponent.cpp | 4 +-- es-core/src/components/TextEditComponent.h | 2 +- es-core/src/components/VideoComponent.cpp | 10 +++--- es-core/src/components/VideoComponent.h | 12 +++---- .../src/components/VideoPlayerComponent.cpp | 12 ++----- es-core/src/components/VideoPlayerComponent.h | 3 -- es-core/src/components/VideoVlcComponent.cpp | 8 +++-- es-core/src/components/VideoVlcComponent.h | 12 +++---- es-core/src/guis/GuiDetectDevice.cpp | 16 +++++----- es-core/src/guis/GuiDetectDevice.h | 4 +-- es-core/src/guis/GuiInputConfig.cpp | 11 +++---- es-core/src/guis/GuiInputConfig.h | 8 ++--- es-core/src/guis/GuiMsgBox.cpp | 7 ++--- es-core/src/guis/GuiMsgBox.h | 6 ++-- es-core/src/guis/GuiTextEditPopup.cpp | 3 ++ es-core/src/guis/GuiTextEditPopup.h | 9 +++--- es-core/src/platform.cpp | 8 ++--- es-core/src/platform.h | 4 +-- es-core/src/resources/Font.cpp | 7 ++--- es-core/src/resources/Font.h | 12 +++---- es-core/src/resources/ResourceManager.cpp | 4 +-- es-core/src/resources/ResourceManager.h | 4 +-- es-core/src/resources/TextureData.cpp | 15 +++++---- es-core/src/resources/TextureData.h | 5 ++- es-core/src/resources/TextureDataManager.cpp | 2 ++ es-core/src/resources/TextureDataManager.h | 10 +++--- es-core/src/resources/TextureResource.cpp | 8 ++--- es-core/src/resources/TextureResource.h | 15 ++++----- 169 files changed, 596 insertions(+), 666 deletions(-) create mode 100644 es-core/src/HelpPrompt.h diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 5896a11a3e..8233663f19 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -1,20 +1,20 @@ +#include "CollectionSystemManager.h" + +#include "guis/GuiInfoPopup.h" +#include "views/gamelist/IGameListView.h" +#include "views/ViewController.h" +#include "FileData.h" +#include "FileFilterIndex.h" +#include "Log.h" +#include "Settings.h" #include "SystemData.h" -#include "Gamelist.h" -#include -#include -#include +#include "ThemeData.h" #include "Util.h" -#include +#include +#include +#include #include -#include -#include -#include "Renderer.h" -#include "Log.h" -#include "InputManager.h" -#include -#include "Settings.h" -#include "pugixml/src/pugixml.hpp" -#include "guis/GuiInfoPopup.h" +#include namespace fs = boost::filesystem; std::string myCollectionsName = "collections"; diff --git a/es-app/src/CollectionSystemManager.h b/es-app/src/CollectionSystemManager.h index 5ec40673a6..71709f8e31 100644 --- a/es-app/src/CollectionSystemManager.h +++ b/es-app/src/CollectionSystemManager.h @@ -2,16 +2,14 @@ #ifndef ES_APP_COLLECTION_SYSTEM_MANAGER_H #define ES_APP_COLLECTION_SYSTEM_MANAGER_H -#include +#include #include -#include "FileData.h" -#include "Window.h" -#include "MetaData.h" -#include "PlatformId.h" -#include "ThemeData.h" -#include "FileFilterIndex.h" -#include "SystemData.h" -#include "views/ViewController.h" +#include + +class FileData; +class SystemData; +class Window; +struct SystemEnvironmentData; enum CollectionSystemType { diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 05f994e06b..49206227c8 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -1,11 +1,18 @@ #include "FileData.h" + +#include "AudioManager.h" +#include "CollectionSystemManager.h" +#include "FileFilterIndex.h" #include "FileSorts.h" -#include "views/ViewController.h" -#include "SystemData.h" #include "Log.h" -#include "AudioManager.h" -#include "VolumeControl.h" +#include "platform.h" +#include "SystemData.h" #include "Util.h" +#include "VolumeControl.h" +#include "Window.h" +#include +#include +#include namespace fs = boost::filesystem; diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 753c1484e1..49c88630a4 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -2,13 +2,12 @@ #ifndef ES_APP_FILE_DATA_H #define ES_APP_FILE_DATA_H -#include -#include -#include -#include #include "MetaData.h" +#include +#include class SystemData; +class Window; struct SystemEnvironmentData; enum FileType diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index dd34c1418a..1013bb77c3 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -1,5 +1,10 @@ #include "FileFilterIndex.h" +#include "FileData.h" +#include "Log.h" +#include "Util.h" +#include + #define UNKNOWN_LABEL "UNKNOWN" #define INCLUDE_UNKNOWN false; @@ -123,7 +128,7 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ std::string ratingString = game->metadata.get("rating"); if (!ratingString.empty()) { try { - ratingNumber = boost::math::iround(std::stod(ratingString)*5); + ratingNumber = (int)((std::stod(ratingString)*5)+0.5); if (ratingNumber < 0) ratingNumber = 0; diff --git a/es-app/src/FileFilterIndex.h b/es-app/src/FileFilterIndex.h index 1a6e3c8df9..57575a1721 100644 --- a/es-app/src/FileFilterIndex.h +++ b/es-app/src/FileFilterIndex.h @@ -3,13 +3,9 @@ #define ES_APP_FILE_FILTER_INDEX_H #include -#include "FileData.h" -#include "Log.h" -#include -#include -#include -#include -#include "Util.h" +#include + +class FileData; enum FilterIndexType { diff --git a/es-app/src/FileSorts.h b/es-app/src/FileSorts.h index f4403115c0..d821ba0f9d 100644 --- a/es-app/src/FileSorts.h +++ b/es-app/src/FileSorts.h @@ -2,9 +2,8 @@ #ifndef ES_APP_FILE_SORTS_H #define ES_APP_FILE_SORTS_H -#include #include "FileData.h" -#include "SystemData.h" +#include namespace FileSorts { diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index cae840264b..e1994e9c7b 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -1,10 +1,13 @@ #include "Gamelist.h" -#include "SystemData.h" -#include "pugixml/src/pugixml.hpp" -#include + +#include "FileData.h" +#include "FileFilterIndex.h" #include "Log.h" #include "Settings.h" +#include "SystemData.h" #include "Util.h" +#include +#include namespace fs = boost::filesystem; diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 56ae351505..161f6da843 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -1,7 +1,8 @@ #include "MetaData.h" -#include "components/TextComponent.h" + #include "Log.h" #include "Util.h" +#include namespace fs = boost::filesystem; diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 467659ac7a..0fe4a9cc00 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -2,12 +2,9 @@ #ifndef ES_APP_META_DATA_H #define ES_APP_META_DATA_H -#include "pugixml/src/pugixml.hpp" -#include -#include -#include "GuiComponent.h" -#include -#include +#include +#include +#include enum MetaDataType { diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 5b9aaa9f03..bf37bc52b1 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -1,4 +1,5 @@ #include "PlatformId.h" + #include extern const char* mameNameToRealName[]; diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index 55197cc671..8b08cde0fd 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -2,8 +2,6 @@ #ifndef ES_APP_PLATFORM_ID_H #define ES_APP_PLATFORM_ID_H -#include - namespace PlatformIds { enum PlatformId : unsigned int diff --git a/es-app/src/ScraperCmdLine.cpp b/es-app/src/ScraperCmdLine.cpp index f6f6952525..1ac73afdfc 100644 --- a/es-app/src/ScraperCmdLine.cpp +++ b/es-app/src/ScraperCmdLine.cpp @@ -1,10 +1,15 @@ #include "ScraperCmdLine.h" -#include -#include + +#include "Log.h" +#include "platform.h" #include "SystemData.h" -#include "Settings.h" +#include #include -#include "Log.h" +#if defined(__linux__) +#include +#elif defined(WIN32) +#include +#endif std::ostream& out = std::cout; diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 984fe6086a..ee659dd0ba 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -1,15 +1,18 @@ #include "SystemData.h" + +#include "CollectionSystemManager.h" +#include "FileFilterIndex.h" +#include "FileSorts.h" #include "Gamelist.h" -#include -#include -#include -#include -#include "Renderer.h" #include "Log.h" -#include "InputManager.h" -#include +#include "platform.h" #include "Settings.h" -#include "FileSorts.h" +#include "ThemeData.h" +#include +#include +#ifdef WIN32 +#include +#endif std::vector SystemData::sSystemVector; diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index eab061ebeb..09690f273c 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -2,15 +2,15 @@ #ifndef ES_APP_SYSTEM_DATA_H #define ES_APP_SYSTEM_DATA_H -#include -#include -#include "FileData.h" -#include "Window.h" -#include "MetaData.h" #include "PlatformId.h" -#include "ThemeData.h" -#include "FileFilterIndex.h" -#include "CollectionSystemManager.h" +#include +#include +#include +#include + +class FileData; +class FileFilterIndex; +class ThemeData; struct SystemEnvironmentData { diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index ba1e5ecd0d..bdb7e76792 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -1,21 +1,21 @@ #include "SystemScreenSaver.h" + #ifdef _RPI_ #include "components/VideoPlayerComponent.h" #endif #include "components/VideoVlcComponent.h" -#include "components/ImageComponent.h" -#include "platform.h" +#include "views/gamelist/IGameListView.h" +#include "views/ViewController.h" +#include "FileData.h" +#include "FileFilterIndex.h" +#include "Log.h" #include "PowerSaver.h" #include "Renderer.h" -#include "Settings.h" +#include "Sound.h" #include "SystemData.h" #include "Util.h" -#include "Log.h" -#include "AudioManager.h" -#include "Sound.h" -#include "views/ViewController.h" -#include "views/gamelist/IGameListView.h" -#include +#include +#include #define FADE_TIME 300 diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index 4e085265cf..e96a6b01ee 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -4,9 +4,9 @@ #include "Window.h" -class VideoComponent; class ImageComponent; class Sound; +class VideoComponent; // Screensaver implementation for main window class SystemScreenSaver : public Window::ScreenSaver diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index b072130a54..c721183073 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -1,8 +1,10 @@ #include "VolumeControl.h" -#include "Settings.h" #include "Log.h" - +#include "Settings.h" +#ifdef WIN32 +#include +#endif #if defined(__linux__) #ifdef _RPI_ diff --git a/es-app/src/VolumeControl.h b/es-app/src/VolumeControl.h index 821676fc34..75f598ffcf 100644 --- a/es-app/src/VolumeControl.h +++ b/es-app/src/VolumeControl.h @@ -3,7 +3,6 @@ #define ES_APP_VOLUME_CONTROL_H #include -#include #if defined (__APPLE__) #error TODO: Not implemented for MacOS yet!!! @@ -13,9 +12,8 @@ #include #elif defined(WIN32) || defined(_WIN32) #include - #include - #include #include + #include #endif /*! diff --git a/es-app/src/animations/LaunchAnimation.h b/es-app/src/animations/LaunchAnimation.h index c9120f2384..be5327915e 100644 --- a/es-app/src/animations/LaunchAnimation.h +++ b/es-app/src/animations/LaunchAnimation.h @@ -3,7 +3,6 @@ #define ES_APP_ANIMATIONS_LAUNCH_ANIMATION_H #include "animations/Animation.h" -#include "Log.h" // let's look at the game launch effect: // -move camera to center on point P (interpolation method: linear) diff --git a/es-app/src/components/AsyncReqComponent.cpp b/es-app/src/components/AsyncReqComponent.cpp index c2ee7d1dcb..e05baa34a5 100644 --- a/es-app/src/components/AsyncReqComponent.cpp +++ b/es-app/src/components/AsyncReqComponent.cpp @@ -1,4 +1,6 @@ #include "components/AsyncReqComponent.h" + +#include "HttpReq.h" #include "Renderer.h" AsyncReqComponent::AsyncReqComponent(Window* window, std::shared_ptr req, std::function)> onSuccess, std::function onCancel) diff --git a/es-app/src/components/AsyncReqComponent.h b/es-app/src/components/AsyncReqComponent.h index ab3ff013f2..35cb017340 100644 --- a/es-app/src/components/AsyncReqComponent.h +++ b/es-app/src/components/AsyncReqComponent.h @@ -3,9 +3,8 @@ #define ES_APP_COMPONENTS_ASYNC_REQ_COMPONENT_H #include "GuiComponent.h" -#include "HttpReq.h" -#include -#include + +class HttpReq; /* Used to asynchronously run an HTTP request. diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index d89305abe0..3c39e92cd1 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -1,7 +1,8 @@ #include "components/RatingComponent.h" + +#include "resources/TextureResource.h" #include "Renderer.h" -#include "Window.h" -#include "Util.h" +#include "ThemeData.h" RatingComponent::RatingComponent(Window* window) : GuiComponent(window), mColorShift(0xFFFFFFFF) { diff --git a/es-app/src/components/RatingComponent.h b/es-app/src/components/RatingComponent.h index 714532d0dc..6c47f00d23 100644 --- a/es-app/src/components/RatingComponent.h +++ b/es-app/src/components/RatingComponent.h @@ -3,7 +3,10 @@ #define ES_APP_COMPONENTS_RATING_COMPONENT_H #include "GuiComponent.h" -#include "resources/TextureResource.h" +#include "platform.h" +#include GLHEADER + +class TextureResource; #define NUM_RATING_STARS 5 diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index 9594a33289..fe8c6d006b 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -1,18 +1,18 @@ #include "components/ScraperSearchComponent.h" -#include "guis/GuiMsgBox.h" -#include "components/TextComponent.h" -#include "components/ScrollableContainer.h" +#include "components/ComponentList.h" +#include "components/DateTimeComponent.h" #include "components/ImageComponent.h" #include "components/RatingComponent.h" -#include "components/DateTimeComponent.h" -#include "components/AnimatedImageComponent.h" -#include "components/ComponentList.h" -#include "HttpReq.h" -#include "Settings.h" +#include "components/ScrollableContainer.h" +#include "components/TextComponent.h" +#include "guis/GuiMsgBox.h" +#include "guis/GuiTextEditPopup.h" +#include "resources/Font.h" +#include "FileData.h" #include "Log.h" #include "Util.h" -#include "guis/GuiTextEditPopup.h" +#include "Window.h" ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) : GuiComponent(window), mGrid(window, Vector2i(4, 3)), mBusyAnim(window), diff --git a/es-app/src/components/ScraperSearchComponent.h b/es-app/src/components/ScraperSearchComponent.h index e6f8fc31a5..cb3ac6cae3 100644 --- a/es-app/src/components/ScraperSearchComponent.h +++ b/es-app/src/components/ScraperSearchComponent.h @@ -2,20 +2,17 @@ #ifndef ES_APP_COMPONENTS_SCRAPER_SEARCH_COMPONENT_H #define ES_APP_COMPONENTS_SCRAPER_SEARCH_COMPONENT_H -#include "GuiComponent.h" -#include "scrapers/Scraper.h" -#include "components/ComponentGrid.h" #include "components/BusyComponent.h" -#include +#include "components/ComponentGrid.h" +#include "scrapers/Scraper.h" +#include "GuiComponent.h" class ComponentList; +class DateTimeComponent; class ImageComponent; class RatingComponent; -class TextComponent; -class DateTimeComponent; class ScrollableContainer; -class HttpReq; -class AnimatedImageComponent; +class TextComponent; class ScraperSearchComponent : public GuiComponent { diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 4eb2780f44..f33b1f034f 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -3,17 +3,12 @@ #define ES_APP_COMPONENTS_TEXT_LIST_COMPONENT_H #include "components/IList.h" -#include "Renderer.h" -#include "resources/Font.h" -#include "InputManager.h" -#include "Sound.h" #include "Log.h" -#include "ThemeData.h" +#include "Sound.h" #include "Util.h" -#include -#include #include -#include + +class TextCache; struct TextListData { diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.cpp b/es-app/src/guis/GuiCollectionSystemsOptions.cpp index d3487542b1..c91968a8d8 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.cpp +++ b/es-app/src/guis/GuiCollectionSystemsOptions.cpp @@ -1,13 +1,12 @@ #include "guis/GuiCollectionSystemsOptions.h" -#include "guis/GuiMsgBox.h" -#include "guis/GuiTextEditPopup.h" -#include "Settings.h" -#include "views/ViewController.h" -#include "guis/GuiSettings.h" -#include "Util.h" -#include "components/TextComponent.h" #include "components/OptionListComponent.h" +#include "components/SwitchComponent.h" +#include "guis/GuiSettings.h" +#include "guis/GuiTextEditPopup.h" +#include "views/ViewController.h" +#include "CollectionSystemManager.h" +#include "Window.h" GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(Window* window) : GuiComponent(window), mMenu(window, "GAME COLLECTION SETTINGS") { diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.h b/es-app/src/guis/GuiCollectionSystemsOptions.h index 6b3945e2c0..fc6113e0a2 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.h +++ b/es-app/src/guis/GuiCollectionSystemsOptions.h @@ -2,17 +2,12 @@ #ifndef ES_APP_GUIS_GUI_COLLECTION_SYSTEM_OPTIONS_H #define ES_APP_GUIS_GUI_COLLECTION_SYSTEM_OPTIONS_H -#include "GuiComponent.h" -#include "SystemData.h" #include "components/MenuComponent.h" -#include "CollectionSystemManager.h" -#include "components/SwitchComponent.h" -#include "Log.h" - template class OptionListComponent; - +class SwitchComponent; +class SystemData; class GuiCollectionSystemsOptions : public GuiComponent { diff --git a/es-app/src/guis/GuiFastSelect.cpp b/es-app/src/guis/GuiFastSelect.cpp index 59715e9ffd..bec8a06aed 100644 --- a/es-app/src/guis/GuiFastSelect.cpp +++ b/es-app/src/guis/GuiFastSelect.cpp @@ -1,5 +1,6 @@ #include "guis/GuiFastSelect.h" -#include "ThemeData.h" + +#include "views/gamelist/IGameListView.h" #include "FileSorts.h" #include "SystemData.h" diff --git a/es-app/src/guis/GuiFastSelect.h b/es-app/src/guis/GuiFastSelect.h index 5a880dc6f8..3028250593 100644 --- a/es-app/src/guis/GuiFastSelect.h +++ b/es-app/src/guis/GuiFastSelect.h @@ -2,11 +2,11 @@ #ifndef ES_APP_GUIS_GUI_FAST_SELECT_H #define ES_APP_GUIS_GUI_FAST_SELECT_H -#include "GuiComponent.h" -#include "views/gamelist/IGameListView.h" - #include "components/NinePatchComponent.h" #include "components/TextComponent.h" +#include "GuiComponent.h" + +class IGameListView; class GuiFastSelect : public GuiComponent { diff --git a/es-app/src/guis/GuiGameScraper.cpp b/es-app/src/guis/GuiGameScraper.cpp index 99293cebce..a1e92a1cdd 100644 --- a/es-app/src/guis/GuiGameScraper.cpp +++ b/es-app/src/guis/GuiGameScraper.cpp @@ -1,13 +1,11 @@ #include "guis/GuiGameScraper.h" -#include "guis/GuiTextEditPopup.h" -#include "components/TextComponent.h" + #include "components/ButtonComponent.h" #include "components/MenuComponent.h" -#include "scrapers/Scraper.h" -#include "Renderer.h" -#include "Log.h" +#include "components/TextComponent.h" +#include "FileData.h" #include "PowerSaver.h" -#include "Settings.h" +#include "SystemData.h" GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std::function doneFunc) : GuiComponent(window), mGrid(window, Vector2i(1, 7)), diff --git a/es-app/src/guis/GuiGameScraper.h b/es-app/src/guis/GuiGameScraper.h index 12bd7a1ffb..2f3da8b47b 100644 --- a/es-app/src/guis/GuiGameScraper.h +++ b/es-app/src/guis/GuiGameScraper.h @@ -2,9 +2,9 @@ #ifndef ES_APP_GUIS_GUI_GAME_SCRAPER_H #define ES_APP_GUIS_GUI_GAME_SCRAPER_H -#include "GuiComponent.h" -#include "components/ScraperSearchComponent.h" #include "components/NinePatchComponent.h" +#include "components/ScraperSearchComponent.h" +#include "GuiComponent.h" class GuiGameScraper : public GuiComponent { diff --git a/es-app/src/guis/GuiGamelistFilter.cpp b/es-app/src/guis/GuiGamelistFilter.cpp index 8a59a1f29a..a2c7f24b75 100644 --- a/es-app/src/guis/GuiGamelistFilter.cpp +++ b/es-app/src/guis/GuiGamelistFilter.cpp @@ -1,9 +1,7 @@ #include "guis/GuiGamelistFilter.h" -#include "guis/GuiMsgBox.h" -#include "views/ViewController.h" -#include "components/TextComponent.h" #include "components/OptionListComponent.h" +#include "SystemData.h" GuiGamelistFilter::GuiGamelistFilter(Window* window, SystemData* system) : GuiComponent(window), mMenu(window, "FILTER GAMELIST BY"), mSystem(system) { diff --git a/es-app/src/guis/GuiGamelistFilter.h b/es-app/src/guis/GuiGamelistFilter.h index 560501aae3..003b72e2ac 100644 --- a/es-app/src/guis/GuiGamelistFilter.h +++ b/es-app/src/guis/GuiGamelistFilter.h @@ -2,16 +2,13 @@ #ifndef ES_APP_GUIS_GUI_GAME_LIST_FILTER_H #define ES_APP_GUIS_GUI_GAME_LIST_FILTER_H -#include "GuiComponent.h" -#include "SystemData.h" #include "components/MenuComponent.h" #include "FileFilterIndex.h" -#include "Log.h" - +#include "GuiComponent.h" template class OptionListComponent; - +class SystemData; class GuiGamelistFilter : public GuiComponent { diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index b02f21a197..fc419ea1f2 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -1,10 +1,14 @@ #include "GuiGamelistOptions.h" -#include "GuiMetaDataEd.h" -#include "Util.h" -#include "Settings.h" + +#include "guis/GuiGamelistFilter.h" +#include "scrapers/Scraper.h" #include "views/gamelist/IGameListView.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" +#include "FileFilterIndex.h" +#include "FileSorts.h" +#include "GuiMetaDataEd.h" +#include "SystemData.h" GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : GuiComponent(window), mSystem(system), mMenu(window, "OPTIONS"), fromPlaceholder(false), mFiltersChanged(false) diff --git a/es-app/src/guis/GuiGamelistOptions.h b/es-app/src/guis/GuiGamelistOptions.h index 1c5b16026f..acf861669a 100644 --- a/es-app/src/guis/GuiGamelistOptions.h +++ b/es-app/src/guis/GuiGamelistOptions.h @@ -2,13 +2,13 @@ #ifndef ES_APP_GUIS_GUI_GAME_LIST_OPTIONS_H #define ES_APP_GUIS_GUI_GAME_LIST_OPTIONS_H -#include "GuiComponent.h" #include "components/MenuComponent.h" #include "components/OptionListComponent.h" -#include "GuiGamelistFilter.h" -#include "FileSorts.h" +#include "FileData.h" +#include "GuiComponent.h" class IGameListView; +class SystemData; class GuiGamelistOptions : public GuiComponent { diff --git a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp index 758e783625..88f71502e4 100644 --- a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp +++ b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp @@ -1,19 +1,11 @@ #include "guis/GuiGeneralScreensaverOptions.h" -#include "Window.h" -#include "Settings.h" -#include "PowerSaver.h" -#include "views/ViewController.h" -#include "components/ButtonComponent.h" -#include "components/SwitchComponent.h" -#include "components/SliderComponent.h" -#include "components/TextComponent.h" -//#include "components/TextEditComponent.h" #include "components/OptionListComponent.h" -#include "components/MenuComponent.h" +#include "components/SliderComponent.h" #include "guis/GuiMsgBox.h" -#include "guis/GuiVideoScreensaverOptions.h" #include "guis/GuiSlideshowScreensaverOptions.h" +#include "guis/GuiVideoScreensaverOptions.h" +#include "Settings.h" GuiGeneralScreensaverOptions::GuiGeneralScreensaverOptions(Window* window, const char* title) : GuiScreensaverOptions(window, title) { diff --git a/es-app/src/guis/GuiGeneralScreensaverOptions.h b/es-app/src/guis/GuiGeneralScreensaverOptions.h index 75f4f4c78a..1992d9ad15 100644 --- a/es-app/src/guis/GuiGeneralScreensaverOptions.h +++ b/es-app/src/guis/GuiGeneralScreensaverOptions.h @@ -2,7 +2,6 @@ #ifndef ES_APP_GUIS_GUI_GENERAL_SCREENSAVER_OPTIONS_H #define ES_APP_GUIS_GUI_GENERAL_SCREENSAVER_OPTIONS_H -#include "components/MenuComponent.h" #include "GuiScreensaverOptions.h" class GuiGeneralScreensaverOptions : public GuiScreensaverOptions diff --git a/es-app/src/guis/GuiInfoPopup.cpp b/es-app/src/guis/GuiInfoPopup.cpp index 33f738af13..e390762638 100644 --- a/es-app/src/guis/GuiInfoPopup.cpp +++ b/es-app/src/guis/GuiInfoPopup.cpp @@ -1,7 +1,10 @@ #include "guis/GuiInfoPopup.h" -#include "Renderer.h" + +#include "components/ComponentGrid.h" +#include "components/NinePatchComponent.h" #include "components/TextComponent.h" -#include "Log.h" +#include "Renderer.h" +#include GuiInfoPopup::GuiInfoPopup(Window* window, std::string message, int duration) : GuiComponent(window), mMessage(message), mDuration(duration), running(true) diff --git a/es-app/src/guis/GuiInfoPopup.h b/es-app/src/guis/GuiInfoPopup.h index 4e8a3baa16..8d4d3cfd17 100644 --- a/es-app/src/guis/GuiInfoPopup.h +++ b/es-app/src/guis/GuiInfoPopup.h @@ -3,12 +3,10 @@ #define ES_APP_GUIS_GUI_INFO_POPUP_H #include "GuiComponent.h" -#include "components/NinePatchComponent.h" -#include "components/ComponentGrid.h" #include "Window.h" -#include "Log.h" - +class ComponentGrid; +class NinePatchComponent; class GuiInfoPopup : public GuiComponent, public Window::InfoPopup { diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 69a542514c..85014f2a21 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1,26 +1,20 @@ -#include "EmulationStation.h" #include "guis/GuiMenu.h" -#include "Window.h" -#include "Sound.h" -#include "Log.h" -#include "SystemData.h" -#include "Settings.h" -#include "PowerSaver.h" -#include "guis/GuiMsgBox.h" -#include "guis/GuiSettings.h" -#include "guis/GuiGeneralScreensaverOptions.h" + +#include "components/OptionListComponent.h" +#include "components/SliderComponent.h" +#include "components/SwitchComponent.h" #include "guis/GuiCollectionSystemsOptions.h" -#include "guis/GuiScraperStart.h" #include "guis/GuiDetectDevice.h" +#include "guis/GuiGeneralScreensaverOptions.h" +#include "guis/GuiMsgBox.h" +#include "guis/GuiScraperStart.h" +#include "guis/GuiSettings.h" #include "views/ViewController.h" - -#include "components/ButtonComponent.h" -#include "components/SwitchComponent.h" -#include "components/SliderComponent.h" -#include "components/TextComponent.h" -#include "components/OptionListComponent.h" -#include "components/MenuComponent.h" +#include "CollectionSystemManager.h" +#include "EmulationStation.h" +#include "SystemData.h" #include "VolumeControl.h" +#include GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU"), mVersion(window) { diff --git a/es-app/src/guis/GuiMenu.h b/es-app/src/guis/GuiMenu.h index 5eda41ddbd..da8406bb79 100644 --- a/es-app/src/guis/GuiMenu.h +++ b/es-app/src/guis/GuiMenu.h @@ -2,9 +2,8 @@ #ifndef ES_APP_GUIS_GUI_MENU_H #define ES_APP_GUIS_GUI_MENU_H -#include "GuiComponent.h" #include "components/MenuComponent.h" -#include +#include "GuiComponent.h" class GuiMenu : public GuiComponent { diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index e95cbdedb2..fb55a9e82b 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -1,18 +1,23 @@ #include "guis/GuiMetaDataEd.h" -#include "Renderer.h" -#include "Log.h" -#include "components/AsyncReqComponent.h" -#include "Settings.h" -#include "views/ViewController.h" -#include "guis/GuiGameScraper.h" -#include "guis/GuiMsgBox.h" -#include -#include "components/TextEditComponent.h" +#include "components/ButtonComponent.h" +#include "components/ComponentList.h" #include "components/DateTimeComponent.h" +#include "components/MenuComponent.h" #include "components/RatingComponent.h" #include "components/SwitchComponent.h" +#include "components/TextComponent.h" +#include "guis/GuiGameScraper.h" +#include "guis/GuiMsgBox.h" #include "guis/GuiTextEditPopup.h" +#include "resources/Font.h" +#include "views/ViewController.h" +#include "CollectionSystemManager.h" +#include "FileData.h" +#include "FileFilterIndex.h" +#include "SystemData.h" +#include "Util.h" +#include "Window.h" GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams scraperParams, const std::string& header, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), diff --git a/es-app/src/guis/GuiMetaDataEd.h b/es-app/src/guis/GuiMetaDataEd.h index d93b3c2315..ee192f982b 100644 --- a/es-app/src/guis/GuiMetaDataEd.h +++ b/es-app/src/guis/GuiMetaDataEd.h @@ -2,12 +2,14 @@ #ifndef ES_APP_GUIS_GUI_META_DATA_ED_H #define ES_APP_GUIS_GUI_META_DATA_ED_H +#include "components/ComponentGrid.h" +#include "components/NinePatchComponent.h" +#include "scrapers/Scraper.h" #include "GuiComponent.h" -#include "components/MenuComponent.h" #include "MetaData.h" -#include "scrapers/Scraper.h" -#include +class ComponentList; +class TextComponent; class GuiMetaDataEd : public GuiComponent { diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index 53cf025296..e25fc9c085 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -1,15 +1,15 @@ #include "guis/GuiScraperMulti.h" -#include "Renderer.h" -#include "Log.h" -#include "views/ViewController.h" -#include "Gamelist.h" -#include "PowerSaver.h" -#include "components/TextComponent.h" #include "components/ButtonComponent.h" +#include "components/MenuComponent.h" #include "components/ScraperSearchComponent.h" -#include "components/MenuComponent.h" // for makeButtonGrid +#include "components/TextComponent.h" #include "guis/GuiMsgBox.h" +#include "views/ViewController.h" +#include "Gamelist.h" +#include "PowerSaver.h" +#include "SystemData.h" +#include "Window.h" GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue& searches, bool approveResults) : GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)), diff --git a/es-app/src/guis/GuiScraperMulti.h b/es-app/src/guis/GuiScraperMulti.h index f4ce4ea439..39d4d52134 100644 --- a/es-app/src/guis/GuiScraperMulti.h +++ b/es-app/src/guis/GuiScraperMulti.h @@ -2,12 +2,10 @@ #ifndef ES_APP_GUIS_GUI_SCRAPER_MULTI_H #define ES_APP_GUIS_GUI_SCRAPER_MULTI_H -#include "GuiComponent.h" -#include "components/NinePatchComponent.h" #include "components/ComponentGrid.h" +#include "components/NinePatchComponent.h" #include "scrapers/Scraper.h" - -#include +#include "GuiComponent.h" class ScraperSearchComponent; class TextComponent; diff --git a/es-app/src/guis/GuiScraperStart.cpp b/es-app/src/guis/GuiScraperStart.cpp index 7d1ebab436..9092d1fa3f 100644 --- a/es-app/src/guis/GuiScraperStart.cpp +++ b/es-app/src/guis/GuiScraperStart.cpp @@ -1,11 +1,12 @@ #include "guis/GuiScraperStart.h" -#include "guis/GuiScraperMulti.h" -#include "guis/GuiMsgBox.h" -#include "views/ViewController.h" -#include "components/TextComponent.h" #include "components/OptionListComponent.h" #include "components/SwitchComponent.h" +#include "guis/GuiMsgBox.h" +#include "guis/GuiScraperMulti.h" +#include "views/ViewController.h" +#include "FileData.h" +#include "SystemData.h" GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), mMenu(window, "SCRAPE NOW") diff --git a/es-app/src/guis/GuiScraperStart.h b/es-app/src/guis/GuiScraperStart.h index 8b494b4692..6c442b9fe0 100644 --- a/es-app/src/guis/GuiScraperStart.h +++ b/es-app/src/guis/GuiScraperStart.h @@ -2,18 +2,16 @@ #ifndef ES_APP_GUIS_GUI_SCRAPER_START_H #define ES_APP_GUIS_GUI_SCRAPER_START_H -#include "GuiComponent.h" -#include "SystemData.h" -#include "scrapers/Scraper.h" #include "components/MenuComponent.h" -#include - -typedef std::function GameFilterFunc; +#include "scrapers/Scraper.h" +class FileData; template class OptionListComponent; - class SwitchComponent; +class SystemData; + +typedef std::function GameFilterFunc; //The starting point for a multi-game scrape. //Allows the user to set various parameters (to set filters, to set which systems to scrape, to enable manual mode). diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index bfb15421ba..aae8c0c2fb 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -1,9 +1,9 @@ #include "guis/GuiScreensaverOptions.h" -#include "Window.h" -#include "Settings.h" -#include "views/ViewController.h" -#include "components/ButtonComponent.h" +#include "views/ViewController.h" +#include "Settings.h" +#include "SystemData.h" +#include "Window.h" GuiScreensaverOptions::GuiScreensaverOptions(Window* window, const char* title) : GuiComponent(window), mMenu(window, title) { diff --git a/es-app/src/guis/GuiScreensaverOptions.h b/es-app/src/guis/GuiScreensaverOptions.h index 95ecbb5498..6f61489f8b 100644 --- a/es-app/src/guis/GuiScreensaverOptions.h +++ b/es-app/src/guis/GuiScreensaverOptions.h @@ -2,9 +2,7 @@ #ifndef ES_APP_GUIS_GUI_SCREENSAVER_OPTIONS_H #define ES_APP_GUIS_GUI_SCREENSAVER_OPTIONS_H -#include "GuiComponent.h" #include "components/MenuComponent.h" -#include "SystemData.h" // This is just a really simple template for a GUI that calls some save functions when closed. class GuiScreensaverOptions : public GuiComponent diff --git a/es-app/src/guis/GuiSettings.cpp b/es-app/src/guis/GuiSettings.cpp index d1ed7ad608..99d986a620 100644 --- a/es-app/src/guis/GuiSettings.cpp +++ b/es-app/src/guis/GuiSettings.cpp @@ -1,7 +1,9 @@ #include "guis/GuiSettings.h" -#include "Window.h" -#include "Settings.h" + #include "views/ViewController.h" +#include "Settings.h" +#include "SystemData.h" +#include "Window.h" GuiSettings::GuiSettings(Window* window, const char* title) : GuiComponent(window), mMenu(window, title) { diff --git a/es-app/src/guis/GuiSettings.h b/es-app/src/guis/GuiSettings.h index a1dc8ef569..d5b0d97998 100644 --- a/es-app/src/guis/GuiSettings.h +++ b/es-app/src/guis/GuiSettings.h @@ -2,9 +2,7 @@ #ifndef ES_APP_GUIS_GUI_SETTINGS_H #define ES_APP_GUIS_GUI_SETTINGS_H -#include "GuiComponent.h" #include "components/MenuComponent.h" -#include "SystemData.h" // This is just a really simple template for a GUI that calls some save functions when closed. class GuiSettings : public GuiComponent diff --git a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp index d64709743c..3ddfe904f4 100644 --- a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp +++ b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp @@ -1,16 +1,10 @@ #include "guis/GuiSlideshowScreensaverOptions.h" -#include "Window.h" -#include "Settings.h" -#include "views/ViewController.h" -#include "components/SwitchComponent.h" #include "components/SliderComponent.h" -#include "components/TextComponent.h" -#include "components/OptionListComponent.h" -#include "components/MenuComponent.h" -#include "guis/GuiMsgBox.h" +#include "components/SwitchComponent.h" #include "guis/GuiTextEditPopup.h" -#include "PowerSaver.h" +#include "Settings.h" +#include "Window.h" GuiSlideshowScreensaverOptions::GuiSlideshowScreensaverOptions(Window* window, const char* title) : GuiScreensaverOptions(window, title) { diff --git a/es-app/src/guis/GuiSlideshowScreensaverOptions.h b/es-app/src/guis/GuiSlideshowScreensaverOptions.h index 012c38578f..70705d0d29 100644 --- a/es-app/src/guis/GuiSlideshowScreensaverOptions.h +++ b/es-app/src/guis/GuiSlideshowScreensaverOptions.h @@ -2,7 +2,6 @@ #ifndef ES_APP_GUIS_GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H #define ES_APP_GUIS_GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H -#include "components/MenuComponent.h" #include "GuiScreensaverOptions.h" class GuiSlideshowScreensaverOptions : public GuiScreensaverOptions diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.cpp b/es-app/src/guis/GuiVideoScreensaverOptions.cpp index efa940cfca..49307587f9 100644 --- a/es-app/src/guis/GuiVideoScreensaverOptions.cpp +++ b/es-app/src/guis/GuiVideoScreensaverOptions.cpp @@ -1,14 +1,10 @@ #include "guis/GuiVideoScreensaverOptions.h" -#include "Window.h" -#include "Settings.h" -#include "views/ViewController.h" -#include "components/SwitchComponent.h" -#include "components/SliderComponent.h" #include "components/OptionListComponent.h" -#include "components/MenuComponent.h" +#include "components/SliderComponent.h" +#include "components/SwitchComponent.h" #include "guis/GuiMsgBox.h" -#include "PowerSaver.h" +#include "Settings.h" GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const char* title) : GuiScreensaverOptions(window, title) { diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.h b/es-app/src/guis/GuiVideoScreensaverOptions.h index 55fa013ce5..ecf4e4b2dd 100644 --- a/es-app/src/guis/GuiVideoScreensaverOptions.h +++ b/es-app/src/guis/GuiVideoScreensaverOptions.h @@ -2,7 +2,6 @@ #ifndef ES_APP_GUIS_GUI_VIDEO_SCREENSAVER_OPTIONS_H #define ES_APP_GUIS_GUI_VIDEO_SCREENSAVER_OPTIONS_H -#include "components/MenuComponent.h" #include "GuiScreensaverOptions.h" class GuiVideoScreensaverOptions : public GuiScreensaverOptions diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index e2352ae19b..2e9344a18a 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -1,31 +1,30 @@ //EmulationStation, a graphical front-end for ROM browsing. Created by Alec "Aloshi" Lofquist. //http://www.aloshi.com -#include -#include -#include -#include "Renderer.h" -#include "views/ViewController.h" -#include "SystemData.h" -#include #include "guis/GuiDetectDevice.h" #include "guis/GuiMsgBox.h" -#include "AudioManager.h" -#include "platform.h" -#include "Log.h" -#include "Window.h" -#include "SystemScreenSaver.h" +#include "views/ViewController.h" +#include "CollectionSystemManager.h" #include "EmulationStation.h" +#include "InputManager.h" +#include "Log.h" +#include "platform.h" #include "PowerSaver.h" -#include "Settings.h" #include "ScraperCmdLine.h" -#include -#include - +#include "Settings.h" +#include "SystemData.h" +#include "SystemScreenSaver.h" +#include +#include +#include +#include +#include #ifdef WIN32 #include #endif +#include + namespace fs = boost::filesystem; bool scrape_cmdline = false; diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 2a92e891f9..53b1b13026 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -1,10 +1,12 @@ #include "scrapers/GamesDBScraper.h" + +#include "FileData.h" #include "Log.h" -#include "pugixml/src/pugixml.hpp" -#include "MetaData.h" +#include "PlatformId.h" #include "Settings.h" +#include "SystemData.h" #include "Util.h" -#include +#include using namespace PlatformIds; const std::map gamesdb_platformid_map = boost::assign::map_list_of diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index bf91491cb1..8d24d63f11 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -1,11 +1,15 @@ #include "scrapers/Scraper.h" + +#include "FileData.h" +#include "GamesDBScraper.h" #include "Log.h" +#include "platform.h" #include "Settings.h" +#include "SystemData.h" +#include +#include #include -#include -#include - -#include "GamesDBScraper.h" +#include const std::map scraper_request_funcs = boost::assign::map_list_of ("TheGamesDB", &thegamesdb_generate_scraper_requests); diff --git a/es-app/src/scrapers/Scraper.h b/es-app/src/scrapers/Scraper.h index 1539ac9a55..c22344637f 100644 --- a/es-app/src/scrapers/Scraper.h +++ b/es-app/src/scrapers/Scraper.h @@ -2,16 +2,16 @@ #ifndef ES_APP_SCRAPERS_SCRAPER_H #define ES_APP_SCRAPERS_SCRAPER_H -#include "MetaData.h" -#include "SystemData.h" -#include "HttpReq.h" #include "AsyncHandle.h" -#include -#include +#include "HttpReq.h" +#include "MetaData.h" #include #define MAX_SCRAPER_RESULTS 7 +class FileData; +class SystemData; + struct ScraperSearchParams { SystemData* system; diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index beadcfab82..b055669258 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -1,14 +1,12 @@ #include "views/SystemView.h" -#include "SystemData.h" -#include "Renderer.h" -#include "Log.h" -#include "Window.h" -#include "views/ViewController.h" + #include "animations/LambdaAnimation.h" -#include "PowerSaver.h" -#include "SystemData.h" +#include "views/ViewController.h" +#include "Log.h" +#include "Renderer.h" #include "Settings.h" -#include "Util.h" +#include "SystemData.h" +#include "Window.h" // buffer values for scrolling velocity (left, stopped, right) const int logoBuffersLeft[] = { -5, -2, -1 }; diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index 27e805ca0d..02fdf1defa 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -2,15 +2,14 @@ #ifndef ES_APP_VIEWS_SYSTEM_VIEW_H #define ES_APP_VIEWS_SYSTEM_VIEW_H -#include "GuiComponent.h" -#include "components/ImageComponent.h" -#include "components/TextComponent.h" -#include "components/ScrollableContainer.h" #include "components/IList.h" -#include "resources/TextureResource.h" +#include "components/TextComponent.h" +#include "resources/Font.h" +#include "GuiComponent.h" +#include -class SystemData; class AnimatedImageComponent; +class SystemData; enum CarouselType : unsigned int { diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index ee41d1d6c2..3ae32b1a4c 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -1,19 +1,18 @@ #include "views/ViewController.h" -#include "Log.h" -#include "SystemData.h" -#include "Settings.h" -#include "PowerSaver.h" -#include "views/gamelist/BasicGameListView.h" -#include "views/gamelist/DetailedGameListView.h" -#include "views/gamelist/VideoGameListView.h" -#include "views/gamelist/GridGameListView.h" -#include "guis/GuiMenu.h" -#include "guis/GuiMsgBox.h" +#include "animations/Animation.h" +#include "animations/LambdaAnimation.h" #include "animations/LaunchAnimation.h" #include "animations/MoveCameraAnimation.h" -#include "animations/LambdaAnimation.h" -#include +#include "guis/GuiMenu.h" +#include "views/gamelist/DetailedGameListView.h" +#include "views/gamelist/IGameListView.h" +#include "views/gamelist/VideoGameListView.h" +#include "views/SystemView.h" +#include "Log.h" +#include "Settings.h" +#include "SystemData.h" +#include "Window.h" ViewController* ViewController::sInstance = NULL; diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 9e8f2ce301..985df16a8f 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -2,10 +2,14 @@ #ifndef ES_APP_VIEWS_VIEW_CONTROLLER_H #define ES_APP_VIEWS_VIEW_CONTROLLER_H -#include "views/gamelist/IGameListView.h" -#include "views/SystemView.h" +#include "FileData.h" +#include "GuiComponent.h" +#include "Renderer.h" +#include +class IGameListView; class SystemData; +class SystemView; const std::vector UIModes = { "Full", "Kiosk" }; diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 0a79250d4d..b81e6462de 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -1,11 +1,10 @@ #include "views/gamelist/BasicGameListView.h" + #include "views/ViewController.h" -#include "Renderer.h" -#include "Window.h" -#include "ThemeData.h" -#include "SystemData.h" +#include "CollectionSystemManager.h" #include "Settings.h" -#include "FileFilterIndex.h" +#include "SystemData.h" +#include BasicGameListView::BasicGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), mList(window) diff --git a/es-app/src/views/gamelist/BasicGameListView.h b/es-app/src/views/gamelist/BasicGameListView.h index 0ea7c10586..fe16b96367 100644 --- a/es-app/src/views/gamelist/BasicGameListView.h +++ b/es-app/src/views/gamelist/BasicGameListView.h @@ -2,8 +2,8 @@ #ifndef ES_APP_VIEWS_GAME_LIST_BASIC_GAME_LIST_VIEW_H #define ES_APP_VIEWS_GAME_LIST_BASIC_GAME_LIST_VIEW_H -#include "views/gamelist/ISimpleGameListView.h" #include "components/TextListComponent.h" +#include "views/gamelist/ISimpleGameListView.h" class BasicGameListView : public ISimpleGameListView { diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 145409286a..e9d0e49e97 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -1,7 +1,7 @@ #include "views/gamelist/DetailedGameListView.h" -#include "views/ViewController.h" -#include "Window.h" + #include "animations/LambdaAnimation.h" +#include "views/ViewController.h" DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : BasicGameListView(window, root), diff --git a/es-app/src/views/gamelist/DetailedGameListView.h b/es-app/src/views/gamelist/DetailedGameListView.h index bf7eb748fc..dfcd389e35 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.h +++ b/es-app/src/views/gamelist/DetailedGameListView.h @@ -2,10 +2,10 @@ #ifndef ES_APP_VIEWS_GAME_LIST_DETAILED_GAME_LIST_VIEW_H #define ES_APP_VIEWS_GAME_LIST_DETAILED_GAME_LIST_VIEW_H -#include "views/gamelist/BasicGameListView.h" -#include "components/ScrollableContainer.h" -#include "components/RatingComponent.h" #include "components/DateTimeComponent.h" +#include "components/RatingComponent.h" +#include "components/ScrollableContainer.h" +#include "views/gamelist/BasicGameListView.h" class DetailedGameListView : public BasicGameListView { diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 77f9a6f86c..cc7680dcec 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -1,6 +1,5 @@ #include "views/gamelist/GridGameListView.h" -#include "ThemeData.h" -#include "Window.h" + #include "views/ViewController.h" GridGameListView::GridGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index acfa20a6dc..b5072cdfe7 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -2,10 +2,8 @@ #ifndef ES_APP_VIEWS_GAME_LIST_GRID_GAME_LIST_VIEW_H #define ES_APP_VIEWS_GAME_LIST_GRID_GAME_LIST_VIEW_H -#include "views/gamelist/ISimpleGameListView.h" #include "components/ImageGridComponent.h" -#include "components/ImageComponent.h" -#include +#include "views/gamelist/ISimpleGameListView.h" class GridGameListView : public ISimpleGameListView { diff --git a/es-app/src/views/gamelist/IGameListView.cpp b/es-app/src/views/gamelist/IGameListView.cpp index 93586893bd..5238bb970c 100644 --- a/es-app/src/views/gamelist/IGameListView.cpp +++ b/es-app/src/views/gamelist/IGameListView.cpp @@ -1,12 +1,9 @@ #include "views/gamelist/IGameListView.h" -#include "Window.h" -#include "guis/GuiMetaDataEd.h" -#include "guis/GuiMenu.h" + #include "guis/GuiGamelistOptions.h" #include "views/ViewController.h" -#include "Settings.h" -#include "Log.h" #include "Sound.h" +#include "Window.h" bool IGameListView::input(InputConfig* config, Input input) { diff --git a/es-app/src/views/gamelist/IGameListView.h b/es-app/src/views/gamelist/IGameListView.h index da7fd9afde..988981593b 100644 --- a/es-app/src/views/gamelist/IGameListView.h +++ b/es-app/src/views/gamelist/IGameListView.h @@ -3,12 +3,11 @@ #define ES_APP_VIEWS_GAME_LIST_IGAME_LIST_VIEW_H #include "FileData.h" +#include "GuiComponent.h" #include "Renderer.h" -class Window; -class GuiComponent; -class FileData; class ThemeData; +class Window; // This is an interface that defines the minimum for a GameListView. class IGameListView : public GuiComponent diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index e7566eaa77..de7e83cf5b 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -1,11 +1,10 @@ #include "views/gamelist/ISimpleGameListView.h" -#include "ThemeData.h" -#include "Window.h" + #include "views/ViewController.h" -#include "Sound.h" -#include "Log.h" -#include "Settings.h" #include "CollectionSystemManager.h" +#include "Settings.h" +#include "Sound.h" +#include "SystemData.h" ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGameListView(window, root), mHeaderText(window), mHeaderImage(window), mBackground(window) diff --git a/es-app/src/views/gamelist/ISimpleGameListView.h b/es-app/src/views/gamelist/ISimpleGameListView.h index 41a56777ea..f2d83b748e 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.h +++ b/es-app/src/views/gamelist/ISimpleGameListView.h @@ -2,10 +2,10 @@ #ifndef ES_APP_VIEWS_GAME_LIST_ISIMPLE_GAME_LIST_VIEW_H #define ES_APP_VIEWS_GAME_LIST_ISIMPLE_GAME_LIST_VIEW_H -#include "views/gamelist/IGameListView.h" - -#include "components/TextComponent.h" #include "components/ImageComponent.h" +#include "components/TextComponent.h" +#include "views/gamelist/IGameListView.h" +#include class ISimpleGameListView : public IGameListView { diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index b84f8ed6b3..8f4da1115a 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -1,14 +1,15 @@ #include "views/gamelist/VideoGameListView.h" -#include "views/ViewController.h" -#include "Window.h" + #include "animations/LambdaAnimation.h" -#include -#include #ifdef _RPI_ #include "components/VideoPlayerComponent.h" -#include "Settings.h" #endif #include "components/VideoVlcComponent.h" +#include "views/ViewController.h" +#ifdef _RPI_ +#include "Settings.h" +#endif +#include VideoGameListView::VideoGameListView(Window* window, FileData* root) : BasicGameListView(window, root), diff --git a/es-app/src/views/gamelist/VideoGameListView.h b/es-app/src/views/gamelist/VideoGameListView.h index f321056bc4..37ba2253fb 100644 --- a/es-app/src/views/gamelist/VideoGameListView.h +++ b/es-app/src/views/gamelist/VideoGameListView.h @@ -2,11 +2,12 @@ #ifndef ES_APP_VIEWS_GAME_LIST_VIDEO_GAME_LIST_VIEW_H #define ES_APP_VIEWS_GAME_LIST_VIDEO_GAME_LIST_VIEW_H -#include "views/gamelist/BasicGameListView.h" -#include "components/ScrollableContainer.h" -#include "components/RatingComponent.h" #include "components/DateTimeComponent.h" -#include "components/VideoComponent.h" +#include "components/RatingComponent.h" +#include "components/ScrollableContainer.h" +#include "views/gamelist/BasicGameListView.h" + +class VideoComponent; class VideoGameListView : public BasicGameListView { diff --git a/es-core/src/AsyncHandle.h b/es-core/src/AsyncHandle.h index 063983ce2d..65ffb5317a 100644 --- a/es-core/src/AsyncHandle.h +++ b/es-core/src/AsyncHandle.h @@ -2,6 +2,8 @@ #ifndef ES_CORE_ASYNC_HANDLE_H #define ES_CORE_ASYNC_HANDLE_H +#include + enum AsyncHandleStatus { ASYNC_IN_PROGRESS, diff --git a/es-core/src/AudioManager.cpp b/es-core/src/AudioManager.cpp index 735099bc8c..1f298c6fa1 100644 --- a/es-core/src/AudioManager.cpp +++ b/es-core/src/AudioManager.cpp @@ -1,8 +1,9 @@ #include "AudioManager.h" -#include "Settings.h" -#include #include "Log.h" +#include "Settings.h" +#include "Sound.h" +#include std::vector> AudioManager::sSoundVector; SDL_AudioSpec AudioManager::sAudioFormat; diff --git a/es-core/src/AudioManager.h b/es-core/src/AudioManager.h index 2777dad59b..e27ce1dc2e 100644 --- a/es-core/src/AudioManager.h +++ b/es-core/src/AudioManager.h @@ -2,13 +2,11 @@ #ifndef ES_CORE_AUDIO_MANAGER_H #define ES_CORE_AUDIO_MANAGER_H -#include +#include #include +#include -#include "SDL_audio.h" - -#include "Sound.h" - +class Sound; class AudioManager { diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 8d0b633c56..7211a63bd8 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -1,9 +1,11 @@ #include "GuiComponent.h" -#include "Window.h" + +#include "animations/Animation.h" +#include "animations/AnimationController.h" #include "Log.h" #include "Renderer.h" -#include "animations/AnimationController.h" #include "ThemeData.h" +#include "Window.h" GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), mPosition(Vector3f::Zero()), mOrigin(Vector2f::Zero()), mRotationOrigin(0.5, 0.5), diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 6af92a743a..ef1352d104 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -2,20 +2,19 @@ #ifndef ES_CORE_GUI_COMPONENT_H #define ES_CORE_GUI_COMPONENT_H +#include "math/Transform4x4f.h" +#include "HelpPrompt.h" +#include "HelpStyle.h" #include "InputConfig.h" -#include -#include #include -#include "HelpStyle.h" -#include "math/Transform4x4f.h" +#include -class Window; class Animation; class AnimationController; -class ThemeData; class Font; - -typedef std::pair HelpPrompt; +class InputConfig; +class ThemeData; +class Window; class GuiComponent { diff --git a/es-core/src/HelpPrompt.h b/es-core/src/HelpPrompt.h new file mode 100644 index 0000000000..f5145624af --- /dev/null +++ b/es-core/src/HelpPrompt.h @@ -0,0 +1,9 @@ +#pragma once +#ifndef ES_CORE_HELP_PROMPT_H +#define ES_CORE_HELP_PROMPT_H + +#include + +typedef std::pair HelpPrompt; + +#endif // ES_CORE_HELP_PROMPT_H diff --git a/es-core/src/HelpStyle.cpp b/es-core/src/HelpStyle.cpp index 24807c610c..97e679ab55 100644 --- a/es-core/src/HelpStyle.cpp +++ b/es-core/src/HelpStyle.cpp @@ -1,7 +1,7 @@ #include "HelpStyle.h" -#include "ThemeData.h" -#include "Renderer.h" + #include "resources/Font.h" +#include "Renderer.h" HelpStyle::HelpStyle() { diff --git a/es-core/src/HelpStyle.h b/es-core/src/HelpStyle.h index 00f8eee98f..22f0e77d44 100644 --- a/es-core/src/HelpStyle.h +++ b/es-core/src/HelpStyle.h @@ -6,8 +6,8 @@ #include #include -class ThemeData; class Font; +class ThemeData; struct HelpStyle { diff --git a/es-core/src/HttpReq.cpp b/es-core/src/HttpReq.cpp index ca32b205bb..f30d663c5f 100644 --- a/es-core/src/HttpReq.cpp +++ b/es-core/src/HttpReq.cpp @@ -1,7 +1,7 @@ -#include #include "HttpReq.h" + #include "Log.h" -#include +#include CURLM* HttpReq::s_multi_handle = curl_multi_init(); diff --git a/es-core/src/HttpReq.h b/es-core/src/HttpReq.h index 76b2c905db..d5c55b420a 100644 --- a/es-core/src/HttpReq.h +++ b/es-core/src/HttpReq.h @@ -3,8 +3,8 @@ #define ES_CORE_HTTP_REQ_H #include -#include #include +#include /* Usage: * HttpReq myRequest("www.google.com", "/index.html"); diff --git a/es-core/src/ImageIO.cpp b/es-core/src/ImageIO.cpp index 982aa97be0..61c1c0c5f8 100644 --- a/es-core/src/ImageIO.cpp +++ b/es-core/src/ImageIO.cpp @@ -1,9 +1,8 @@ #include "ImageIO.h" -#include - #include "Log.h" - +#include +#include std::vector ImageIO::loadFromMemoryRGBA32(const unsigned char * data, const size_t size, size_t & width, size_t & height) { diff --git a/es-core/src/ImageIO.h b/es-core/src/ImageIO.h index 440efc5d02..ad8ab48069 100644 --- a/es-core/src/ImageIO.h +++ b/es-core/src/ImageIO.h @@ -2,8 +2,8 @@ #ifndef ES_CORE_IMAGE_IO #define ES_CORE_IMAGE_IO +#include #include -#include class ImageIO { diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index 90b2729390..23c6dd6ce5 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -1,10 +1,6 @@ #include "InputConfig.h" -#include -#include -#include -#include + #include "Log.h" -#include "InputManager.h" //some util functions std::string inputTypeToString(InputType type) diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index 2eaa7de977..d3d0be99e7 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -2,12 +2,12 @@ #ifndef ES_CORE_INPUT_CONFIG_H #define ES_CORE_INPUT_CONFIG_H +#include +#include +#include #include -#include -#include -#include #include -#include "pugixml/src/pugixml.hpp" +#include #define DEVICE_KEYBOARD -1 diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 610b2d0d2d..f102c49119 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -1,11 +1,11 @@ #include "InputManager.h" -#include "InputConfig.h" -#include "Settings.h" -#include "Window.h" + #include "Log.h" -#include "pugixml/src/pugixml.hpp" -#include #include "platform.h" +#include "Window.h" +#include +#include +#include #define KEYBOARD_GUID_STRING "-1" diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index 7404e9ccf9..6d24c0f4b4 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -2,13 +2,12 @@ #ifndef ES_CORE_INPUT_MANAGER_H #define ES_CORE_INPUT_MANAGER_H -#include -#include +#include #include -#include class InputConfig; class Window; +union SDL_Event; //you should only ever instantiate one of these, by the way class InputManager diff --git a/es-core/src/Log.cpp b/es-core/src/Log.cpp index 811bbb8cc0..536144aa28 100644 --- a/es-core/src/Log.cpp +++ b/es-core/src/Log.cpp @@ -1,9 +1,7 @@ #include "Log.h" -#include -#include -#include -#include + #include "platform.h" +#include LogLevel Log::reportingLevel = LogInfo; FILE* Log::file = NULL; //fopen(getLogPath().c_str(), "w"); diff --git a/es-core/src/Log.h b/es-core/src/Log.h index 1ef6e32b77..0b69a74feb 100644 --- a/es-core/src/Log.h +++ b/es-core/src/Log.h @@ -2,14 +2,12 @@ #ifndef ES_CORE_LOG_H #define ES_CORE_LOG_H +#include + #define LOG(level) \ if(level > Log::getReportingLevel()) ; \ else Log().get(level) -#include -#include -#include - enum LogLevel { LogError, LogWarning, LogInfo, LogDebug }; class Log diff --git a/es-core/src/PowerSaver.cpp b/es-core/src/PowerSaver.cpp index a7805ca71c..8c68955f90 100644 --- a/es-core/src/PowerSaver.cpp +++ b/es-core/src/PowerSaver.cpp @@ -1,7 +1,7 @@ #include "PowerSaver.h" + #include "AudioManager.h" #include "Settings.h" -#include bool PowerSaver::mState = false; bool PowerSaver::mRunningScreenSaver = false; diff --git a/es-core/src/Renderer.h b/es-core/src/Renderer.h index 2700867c48..3a84ba3609 100644 --- a/es-core/src/Renderer.h +++ b/es-core/src/Renderer.h @@ -2,15 +2,13 @@ #ifndef ES_CORE_RENDERER_H #define ES_CORE_RENDERER_H -#include -#include +#include "math/Vector2i.h" #include "platform.h" #include GLHEADER -#include "math/Transform4x4f.h" -#include "math/Vector2i.h" -class GuiComponent; class Font; +class GuiComponent; +class Transform4x4f; //The Renderer provides several higher-level functions for drawing (rectangles, text, etc.). //Renderer_draw_gl.cpp has most of the higher-level functions and wrappers. diff --git a/es-core/src/Renderer_draw_gl.cpp b/es-core/src/Renderer_draw_gl.cpp index 6677efe433..539ef5d6ed 100644 --- a/es-core/src/Renderer_draw_gl.cpp +++ b/es-core/src/Renderer_draw_gl.cpp @@ -1,12 +1,8 @@ -#include "platform.h" #include "Renderer.h" -#include GLHEADER -#include -#include "resources/Font.h" -#include + #include "Log.h" +#include #include -#include "Util.h" namespace Renderer { struct ClipRect { diff --git a/es-core/src/Renderer_init_sdlgl.cpp b/es-core/src/Renderer_init_sdlgl.cpp index b203f58f6f..8e161405ad 100644 --- a/es-core/src/Renderer_init_sdlgl.cpp +++ b/es-core/src/Renderer_init_sdlgl.cpp @@ -1,13 +1,10 @@ #include "Renderer.h" -#include -#include "platform.h" -#include GLHEADER -#include "resources/Font.h" -#include -#include "Log.h" -#include "ImageIO.h" + #include "../data/Resources.h" +#include "ImageIO.h" +#include "Log.h" #include "Settings.h" +#include #ifdef USE_OPENGL_ES #define glOrtho glOrthof diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index faf9529ba9..cb1ff06d83 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -1,9 +1,10 @@ #include "Settings.h" + #include "Log.h" -#include "pugixml/src/pugixml.hpp" #include "platform.h" -#include -#include +#include +#include +#include Settings* Settings::sInstance = NULL; diff --git a/es-core/src/Settings.h b/es-core/src/Settings.h index 6ab80c8fc6..413694b719 100644 --- a/es-core/src/Settings.h +++ b/es-core/src/Settings.h @@ -2,7 +2,6 @@ #ifndef ES_CORE_SETTINGS_H #define ES_CORE_SETTINGS_H -#include #include //This is a singleton for storing settings. diff --git a/es-core/src/Sound.cpp b/es-core/src/Sound.cpp index 22d17b9590..bf879379ac 100644 --- a/es-core/src/Sound.cpp +++ b/es-core/src/Sound.cpp @@ -1,4 +1,5 @@ #include "Sound.h" + #include "AudioManager.h" #include "Log.h" #include "Settings.h" diff --git a/es-core/src/Sound.h b/es-core/src/Sound.h index 1f14219322..d54688d8d8 100644 --- a/es-core/src/Sound.h +++ b/es-core/src/Sound.h @@ -2,10 +2,9 @@ #ifndef ES_CORE_SOUND_H #define ES_CORE_SOUND_H -#include +#include "SDL_audio.h" #include #include -#include "SDL_audio.h" class ThemeData; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index c684e8bdd2..0ed7bb9daf 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -1,17 +1,13 @@ #include "ThemeData.h" -#include "Renderer.h" -#include "resources/Font.h" -#include "Sound.h" -#include "resources/TextureResource.h" -#include "Log.h" -#include "Settings.h" -#include "pugixml/src/pugixml.hpp" -#include -#include #include "components/ImageComponent.h" #include "components/TextComponent.h" - +#include "Log.h" +#include "platform.h" +#include "Settings.h" +#include +#include +#include // This is a work around for some ambiguity that is introduced in C++11 that boost::assign::map_list_of leave open. // We use makeMap(actualmap) to implicitly convert the boost::assign::map_list_of's return type to ElementMapType. diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 530e624552..55efdbec1b 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -2,24 +2,22 @@ #ifndef ES_CORE_THEME_DATA_H #define ES_CORE_THEME_DATA_H -#include -#include -#include -#include +#include "math/Vector2f.h" +#include +#include +#include +#include #include -#include -#include -#include -#include -#include "pugixml/src/pugixml.hpp" -#include "GuiComponent.h" +#include +#include template class TextListComponent; -class Sound; +class GuiComponent; class ImageComponent; class NinePatchComponent; +class Sound; class TextComponent; class Window; diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index a56050faad..b36d4d2330 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -1,7 +1,10 @@ #include "Util.h" -#include "resources/ResourceManager.h" + #include "platform.h" -#include +#include +#include +#include +#include namespace fs = boost::filesystem; diff --git a/es-core/src/Util.h b/es-core/src/Util.h index c0d91ecb5a..44091ca357 100644 --- a/es-core/src/Util.h +++ b/es-core/src/Util.h @@ -2,11 +2,8 @@ #ifndef ES_CORE_UTIL_H #define ES_CORE_UTIL_H -#include -#include -#include -#include "math/Transform4x4f.h" -#include "math/Vector2f.h" +#include +#include std::string strToUpper(const char* from); std::string& strToUpper(std::string& str); diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 81dcc1226a..a5493cff2c 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -1,13 +1,13 @@ #include "Window.h" -#include -#include "Renderer.h" -#include "AudioManager.h" -#include "Log.h" -#include "Settings.h" -#include -#include + #include "components/HelpComponent.h" #include "components/ImageComponent.h" +#include "resources/Font.h" +#include "resources/TextureResource.h" +#include "InputManager.h" +#include "Log.h" +#include "Renderer.h" +#include Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), mAllowSleep(true), mSleeping(false), mTimeSinceLastInput(0), mScreenSaver(NULL), mRenderScreenSaver(false), mInfoPopup(NULL) diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 751bc12c14..3ae2203989 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -2,15 +2,21 @@ #ifndef ES_CORE_WINDOW_H #define ES_CORE_WInDOW_H -#include "GuiComponent.h" -#include "InputManager.h" +#include "HelpPrompt.h" +#include "InputConfig.h" #include "Settings.h" -#include -#include "resources/Font.h" + +#include class FileData; +class Font; +class GuiComponent; class HelpComponent; class ImageComponent; +class InputConfig; +class TextCache; +class Transform4x4f; +struct HelpStyle; class Window { diff --git a/es-core/src/animations/AnimationController.cpp b/es-core/src/animations/AnimationController.cpp index 245aeb9269..b872af3d07 100644 --- a/es-core/src/animations/AnimationController.cpp +++ b/es-core/src/animations/AnimationController.cpp @@ -1,5 +1,7 @@ #include "animations/AnimationController.h" +#include "animations/Animation.h" + AnimationController::AnimationController(Animation* anim, int delay, std::function finishedCallback, bool reverse) : mAnimation(anim), mFinishedCallback(finishedCallback), mReverse(reverse), mTime(-delay), mDelay(delay) { diff --git a/es-core/src/animations/AnimationController.h b/es-core/src/animations/AnimationController.h index b9c8cf60a2..202a7a7b60 100644 --- a/es-core/src/animations/AnimationController.h +++ b/es-core/src/animations/AnimationController.h @@ -2,9 +2,9 @@ #ifndef ES_CORE_ANIMATIONS_ANIMATION_CONTROLLER_H #define ES_CORE_ANIMATIONS_ANIMATION_CONTROLLER_H -#include #include -#include "animations/Animation.h" + +class Animation; class AnimationController { diff --git a/es-core/src/components/AnimatedImageComponent.cpp b/es-core/src/components/AnimatedImageComponent.cpp index 6ecb8722fc..6b36b10aac 100644 --- a/es-core/src/components/AnimatedImageComponent.cpp +++ b/es-core/src/components/AnimatedImageComponent.cpp @@ -1,4 +1,7 @@ #include "components/AnimatedImageComponent.h" + +#include "components/ImageComponent.h" +#include "resources/ResourceManager.h" #include "Log.h" AnimatedImageComponent::AnimatedImageComponent(Window* window) : GuiComponent(window), mEnabled(false) diff --git a/es-core/src/components/AnimatedImageComponent.h b/es-core/src/components/AnimatedImageComponent.h index 3d35e044de..dce1b90790 100644 --- a/es-core/src/components/AnimatedImageComponent.h +++ b/es-core/src/components/AnimatedImageComponent.h @@ -3,7 +3,8 @@ #define ES_CORE_COMPONENTS_ANIMATED_IMAGE_COMPONENT_H #include "GuiComponent.h" -#include "ImageComponent.h" + +class ImageComponent; struct AnimationFrame { diff --git a/es-core/src/components/BusyComponent.cpp b/es-core/src/components/BusyComponent.cpp index 39826f9060..17f36df08d 100644 --- a/es-core/src/components/BusyComponent.cpp +++ b/es-core/src/components/BusyComponent.cpp @@ -1,6 +1,7 @@ #include "BusyComponent.h" #include "components/AnimatedImageComponent.h" +#include "components/ImageComponent.h" #include "components/TextComponent.h" #include "Renderer.h" diff --git a/es-core/src/components/BusyComponent.h b/es-core/src/components/BusyComponent.h index 1831f205bd..fe996a31cc 100644 --- a/es-core/src/components/BusyComponent.h +++ b/es-core/src/components/BusyComponent.h @@ -2,9 +2,9 @@ #ifndef ES_CORE_COMPONENTS_BUSY_COMPONENT_H #define ES_CORE_COMPONENTS_BUSY_COMPONENT_H -#include "GuiComponent.h" #include "components/ComponentGrid.h" #include "components/NinePatchComponent.h" +#include "GuiComponent.h" class AnimatedImageComponent; class TextComponent; diff --git a/es-core/src/components/ButtonComponent.cpp b/es-core/src/components/ButtonComponent.cpp index fce92ca9cc..4ef9984062 100644 --- a/es-core/src/components/ButtonComponent.cpp +++ b/es-core/src/components/ButtonComponent.cpp @@ -1,8 +1,8 @@ #include "components/ButtonComponent.h" + +#include "resources/Font.h" #include "Renderer.h" -#include "Window.h" #include "Util.h" -#include "Log.h" ButtonComponent::ButtonComponent(Window* window, const std::string& text, const std::string& helpText, const std::function& func) : GuiComponent(window), mBox(window, ":/button.png"), diff --git a/es-core/src/components/ButtonComponent.h b/es-core/src/components/ButtonComponent.h index 5a8c1c6ac6..65288209cd 100644 --- a/es-core/src/components/ButtonComponent.h +++ b/es-core/src/components/ButtonComponent.h @@ -2,10 +2,10 @@ #ifndef ES_CORE_COMPONENTS_BUTTON_COMPONENT_H #define ES_CORE_COMPONENTS_BUTTON_COMPONENT_H -#include "GuiComponent.h" -#include -#include "resources/Font.h" #include "components/NinePatchComponent.h" +#include "GuiComponent.h" + +class TextCache; class ButtonComponent : public GuiComponent { diff --git a/es-core/src/components/ComponentGrid.cpp b/es-core/src/components/ComponentGrid.cpp index dd54cc7d82..5d004d6d8d 100644 --- a/es-core/src/components/ComponentGrid.cpp +++ b/es-core/src/components/ComponentGrid.cpp @@ -1,5 +1,5 @@ #include "components/ComponentGrid.h" -#include "Log.h" + #include "Renderer.h" #include "Settings.h" diff --git a/es-core/src/components/ComponentGrid.h b/es-core/src/components/ComponentGrid.h index 19297d917c..c6b26c347a 100644 --- a/es-core/src/components/ComponentGrid.h +++ b/es-core/src/components/ComponentGrid.h @@ -2,8 +2,8 @@ #ifndef ES_CORE_COMPONENTS_COMPONENT_GRID_H #define ES_CORE_COMPONENTS_COMPONENT_GRID_H -#include "GuiComponent.h" #include "math/Vector2i.h" +#include "GuiComponent.h" namespace GridFlags { diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 7f2a2fc265..1e28afffa6 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -1,6 +1,6 @@ #include "components/ComponentList.h" -#include "Util.h" -#include "Log.h" + +#include "Renderer.h" #define TOTAL_HORIZONTAL_PADDING_PX 20 diff --git a/es-core/src/components/ComponentList.h b/es-core/src/components/ComponentList.h index b021969447..429b5f5d65 100644 --- a/es-core/src/components/ComponentList.h +++ b/es-core/src/components/ComponentList.h @@ -3,7 +3,6 @@ #define ES_CORE_COMPONENTS_COMPONENT_LIST_H #include "IList.h" -#include struct ComponentListElement { diff --git a/es-core/src/components/DateTimeComponent.cpp b/es-core/src/components/DateTimeComponent.cpp index 2c0f316d8d..7d3433439b 100644 --- a/es-core/src/components/DateTimeComponent.cpp +++ b/es-core/src/components/DateTimeComponent.cpp @@ -1,8 +1,9 @@ #include "components/DateTimeComponent.h" + +#include "resources/Font.h" #include "Renderer.h" -#include "Window.h" -#include "Log.h" #include "Util.h" +#include DateTimeComponent::DateTimeComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), diff --git a/es-core/src/components/DateTimeComponent.h b/es-core/src/components/DateTimeComponent.h index 303c848dfa..29e940c676 100644 --- a/es-core/src/components/DateTimeComponent.h +++ b/es-core/src/components/DateTimeComponent.h @@ -3,8 +3,9 @@ #define ES_CORE_COMPONENTS_DATE_TIME_COMPONENT_H #include "GuiComponent.h" -#include -#include "resources/Font.h" +#include + +class TextCache; // Used to enter or display a specific point in time. class DateTimeComponent : public GuiComponent diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index ff6ca5c215..a54cdbf9a4 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -1,12 +1,13 @@ #include "components/HelpComponent.h" -#include "Renderer.h" -#include "Settings.h" -#include "Log.h" -#include "Util.h" + +#include "components/ComponentGrid.h" #include "components/ImageComponent.h" #include "components/TextComponent.h" -#include "components/ComponentGrid.h" -#include +#include "resources/TextureResource.h" +#include "Log.h" +#include "Settings.h" +#include "Util.h" +#include #define OFFSET_X 12 // move the entire thing right by this amount (px) #define OFFSET_Y 12 // move the entire thing up by this amount (px) diff --git a/es-core/src/components/HelpComponent.h b/es-core/src/components/HelpComponent.h index 49710dea6d..e9c5d2e07d 100644 --- a/es-core/src/components/HelpComponent.h +++ b/es-core/src/components/HelpComponent.h @@ -5,9 +5,9 @@ #include "GuiComponent.h" #include "HelpStyle.h" +class ComponentGrid; class ImageComponent; class TextureResource; -class ComponentGrid; class HelpComponent : public GuiComponent { diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index 261c63b70b..dd584e7a02 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -2,13 +2,8 @@ #ifndef ES_CORE_COMPONENTS_ILIST_H #define ES_CORE_COMPONENTS_ILIST_H -#include -#include -#include -#include "GuiComponent.h" #include "components/ImageComponent.h" #include "resources/Font.h" -#include "Renderer.h" #include "PowerSaver.h" enum CursorState diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 6db4424a3a..5cadc55342 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -1,11 +1,9 @@ #include "components/ImageComponent.h" -#include -#include -#include + +#include "resources/TextureResource.h" #include "Log.h" #include "Renderer.h" #include "ThemeData.h" -#include "Util.h" Vector2i ImageComponent::getTextureSize() const { diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 7f0ef8379f..d95fd6c18a 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -2,13 +2,12 @@ #ifndef ES_CORE_COMPONENTS_IMAGE_COMPONENT_H #define ES_CORE_COMPONENTS_IMAGE_COMPONENT_H +#include "math/Vector2i.h" +#include "GuiComponent.h" #include "platform.h" #include GLHEADER -#include "GuiComponent.h" -#include -#include -#include "resources/TextureResource.h" +class TextureResource; class ImageComponent : public GuiComponent { diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 9c1b8645d7..8f76f4c241 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -2,10 +2,8 @@ #ifndef ES_CORE_COMPONENTS_IMAGE_GRID_COMPONENT_H #define ES_CORE_COMPONENTS_IMAGE_GRID_COMPONENT_H -#include "GuiComponent.h" #include "components/IList.h" -#include "components/ImageComponent.h" -#include "Log.h" +#include "resources/TextureResource.h" struct ImageGridData { diff --git a/es-core/src/components/MenuComponent.cpp b/es-core/src/components/MenuComponent.cpp index ad3c089a12..63348d6c4d 100644 --- a/es-core/src/components/MenuComponent.cpp +++ b/es-core/src/components/MenuComponent.cpp @@ -1,4 +1,5 @@ #include "components/MenuComponent.h" + #include "components/ButtonComponent.h" #define BUTTON_GRID_VERT_PADDING 32 diff --git a/es-core/src/components/MenuComponent.h b/es-core/src/components/MenuComponent.h index 221f1724d6..8574d8823d 100644 --- a/es-core/src/components/MenuComponent.h +++ b/es-core/src/components/MenuComponent.h @@ -2,10 +2,11 @@ #ifndef ES_CORE_COMPONENTS_MENU_COMPONENT_H #define ES_CORE_COMPONENTS_MENU_COMPONENT_H -#include "components/NinePatchComponent.h" +#include "components/ComponentGrid.h" #include "components/ComponentList.h" +#include "components/NinePatchComponent.h" #include "components/TextComponent.h" -#include "components/ComponentGrid.h" +#include "Renderer.h" #include "Util.h" class ButtonComponent; diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index b003777ded..cc346c0db2 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -1,9 +1,9 @@ #include "components/NinePatchComponent.h" -#include "Window.h" + +#include "resources/TextureResource.h" #include "Log.h" #include "Renderer.h" #include "ThemeData.h" -#include "Util.h" NinePatchComponent::NinePatchComponent(Window* window, const std::string& path, unsigned int edgeColor, unsigned int centerColor) : GuiComponent(window), mEdgeColor(edgeColor), mCenterColor(centerColor), diff --git a/es-core/src/components/NinePatchComponent.h b/es-core/src/components/NinePatchComponent.h index 43a634db55..5d08ecd64d 100644 --- a/es-core/src/components/NinePatchComponent.h +++ b/es-core/src/components/NinePatchComponent.h @@ -3,7 +3,10 @@ #define ES_CORE_COMPONENTS_NINE_PATCH_COMPONENT_H #include "GuiComponent.h" -#include "resources/TextureResource.h" +#include "platform.h" +#include GLHEADER + +class TextureResource; // Display an image in a way so that edges don't get too distorted no matter the final size. Useful for UI elements like backgrounds, buttons, etc. // This is accomplished by splitting an image into 9 pieces: diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index 9047ee7f52..59585b296b 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -3,14 +3,8 @@ #define ES_CORE_COMPONENTS_OPTION_LIST_COMPONENT_H #include "GuiComponent.h" -#include "resources/Font.h" -#include "Renderer.h" -#include "Window.h" -#include "components/TextComponent.h" -#include "components/ImageComponent.h" -#include "components/MenuComponent.h" -#include #include "Log.h" +#include "Window.h" //Used to display a list of options. //Can select one or multiple options. diff --git a/es-core/src/components/ScrollableContainer.cpp b/es-core/src/components/ScrollableContainer.cpp index cca09f967d..489263e158 100644 --- a/es-core/src/components/ScrollableContainer.cpp +++ b/es-core/src/components/ScrollableContainer.cpp @@ -1,6 +1,6 @@ #include "components/ScrollableContainer.h" + #include "Renderer.h" -#include "Log.h" #define AUTO_SCROLL_RESET_DELAY 3000 // ms to reset to top after we reach the bottom #define AUTO_SCROLL_DELAY 1000 // ms to wait before we start to scroll diff --git a/es-core/src/components/SliderComponent.cpp b/es-core/src/components/SliderComponent.cpp index b169c7c733..b2e9f61eb2 100644 --- a/es-core/src/components/SliderComponent.cpp +++ b/es-core/src/components/SliderComponent.cpp @@ -1,9 +1,7 @@ #include "components/SliderComponent.h" -#include -#include "Renderer.h" + #include "resources/Font.h" -#include "Log.h" -#include "Util.h" +#include "Renderer.h" #define MOVE_REPEAT_DELAY 500 #define MOVE_REPEAT_RATE 40 diff --git a/es-core/src/components/SliderComponent.h b/es-core/src/components/SliderComponent.h index 2dc784c8b7..e4297d5b7b 100644 --- a/es-core/src/components/SliderComponent.h +++ b/es-core/src/components/SliderComponent.h @@ -2,11 +2,11 @@ #ifndef ES_CORE_COMPONENTS_SLIDER_COMPONENT_H #define ES_CORE_COMPONENTS_SLIDER_COMPONENT_H -#include "GuiComponent.h" #include "components/ImageComponent.h" +#include "GuiComponent.h" -class TextCache; class Font; +class TextCache; // Used to display/edit a value between some min and max values. class SliderComponent : public GuiComponent diff --git a/es-core/src/components/SwitchComponent.cpp b/es-core/src/components/SwitchComponent.cpp index f199109a6e..ec549020bc 100644 --- a/es-core/src/components/SwitchComponent.cpp +++ b/es-core/src/components/SwitchComponent.cpp @@ -1,7 +1,7 @@ #include "SwitchComponent.h" -#include "Renderer.h" + #include "resources/Font.h" -#include "Window.h" +#include "Renderer.h" SwitchComponent::SwitchComponent(Window* window, bool state) : GuiComponent(window), mImage(window), mState(state) { diff --git a/es-core/src/components/SwitchComponent.h b/es-core/src/components/SwitchComponent.h index 1cff70e383..2e2d83f6b4 100644 --- a/es-core/src/components/SwitchComponent.h +++ b/es-core/src/components/SwitchComponent.h @@ -2,8 +2,8 @@ #ifndef ES_CORE_COMPONENTS_SWITCH_COMPONENT_H #define ES_CORE_COMPONENTS_SWITCH_COMPONENT_H -#include "GuiComponent.h" #include "components/ImageComponent.h" +#include "GuiComponent.h" // A very simple "on/off" switch. // Should hopefully be switched to use images instead of text in the future. diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index 29cdc0d9da..633d939d6d 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -1,11 +1,9 @@ #include "components/TextComponent.h" -#include "Renderer.h" #include "Log.h" -#include "Window.h" -#include "ThemeData.h" -#include "Util.h" +#include "Renderer.h" #include "Settings.h" +#include "Util.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), diff --git a/es-core/src/components/TextComponent.h b/es-core/src/components/TextComponent.h index 1fc9c8036a..2603327f97 100644 --- a/es-core/src/components/TextComponent.h +++ b/es-core/src/components/TextComponent.h @@ -2,8 +2,8 @@ #ifndef ES_CORE_COMPONENTS_TEXT_COMPONENT_H #define ES_CORE_COMPONENTS_TEXT_COMPONENT_H -#include "GuiComponent.h" #include "resources/Font.h" +#include "GuiComponent.h" class ThemeData; diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index 10e4e192c3..2fb4f16c42 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -1,9 +1,7 @@ #include "components/TextEditComponent.h" -#include "Log.h" + #include "resources/Font.h" -#include "Window.h" #include "Renderer.h" -#include "Util.h" #define TEXT_PADDING_HORIZ 10 #define TEXT_PADDING_VERT 2 diff --git a/es-core/src/components/TextEditComponent.h b/es-core/src/components/TextEditComponent.h index 57ef54d138..74e743a2e9 100644 --- a/es-core/src/components/TextEditComponent.h +++ b/es-core/src/components/TextEditComponent.h @@ -2,8 +2,8 @@ #ifndef ES_CORE_COMPONENTS_TEXT_EDIT_COMPONENT_H #define ES_CORE_COMPONENTS_TEXT_EDIT_COMPONENT_H -#include "GuiComponent.h" #include "components/NinePatchComponent.h" +#include "GuiComponent.h" class Font; class TextCache; diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index b71d73fdbc..9b4f585f6e 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -1,13 +1,13 @@ #include "components/VideoComponent.h" + +#include "resources/ResourceManager.h" +#include "PowerSaver.h" #include "Renderer.h" #include "ThemeData.h" -#include "Settings.h" #include "Util.h" #include "Window.h" -#include "PowerSaver.h" -#ifdef WIN32 -#include -#endif +#include +#include #define FADE_TIME_MS 200 diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index 55258c1aa9..97f2dfc350 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -2,16 +2,12 @@ #ifndef ES_CORE_COMPONENTS_VIDEO_COMPONENT_H #define ES_CORE_COMPONENTS_VIDEO_COMPONENT_H -#include "platform.h" -#include GLHEADER - +#include "components/ImageComponent.h" #include "GuiComponent.h" -#include "ImageComponent.h" +#include #include -#include -#include -#include -#include + +class TextureResource; std::string getTitlePath(); std::string getTitleFolder(); diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index ef31f58139..dd2e950b64 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -1,17 +1,11 @@ #ifdef _RPI_ #include "components/VideoPlayerComponent.h" -#include + #include "AudioManager.h" -#include "Renderer.h" -#include "ThemeData.h" #include "Settings.h" -#include "Util.h" -#include -#include -#include -#include +#include #include -#include +#include class VolumeControl { diff --git a/es-core/src/components/VideoPlayerComponent.h b/es-core/src/components/VideoPlayerComponent.h index cb6eedb886..a68c337a31 100644 --- a/es-core/src/components/VideoPlayerComponent.h +++ b/es-core/src/components/VideoPlayerComponent.h @@ -3,9 +3,6 @@ #ifndef ES_CORE_COMPONENTS_VIDEO_PLAYER_COMPONENT_H #define ES_CORE_COMPONENTS_VIDEO_PLAYER_COMPONENT_H -#include "platform.h" -#include GLHEADER - #include "components/VideoComponent.h" void catch_child(int sig_num); diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index cc3fe15480..2d0ab0d557 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -1,9 +1,11 @@ #include "components/VideoVlcComponent.h" + +#include "resources/TextureResource.h" +#include "PowerSaver.h" #include "Renderer.h" -#include "ThemeData.h" -#include "Util.h" #include "Settings.h" -#include "PowerSaver.h" +#include +#include #ifdef WIN32 #include diff --git a/es-core/src/components/VideoVlcComponent.h b/es-core/src/components/VideoVlcComponent.h index f31aa6bfd7..c350b8cb3c 100644 --- a/es-core/src/components/VideoVlcComponent.h +++ b/es-core/src/components/VideoVlcComponent.h @@ -2,13 +2,13 @@ #ifndef ES_CORE_COMPONENTS_VIDEO_VLC_COMPONENT_H #define ES_CORE_COMPONENTS_VIDEO_VLC_COMPONENT_H -#include "platform.h" -#include GLHEADER - #include "VideoComponent.h" -#include -#include -#include "resources/TextureResource.h" + +struct SDL_mutex; +struct SDL_Surface; +struct libvlc_instance_t; +struct libvlc_media_t; +struct libvlc_media_player_t; struct VideoContext { SDL_Surface* surface; diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index 80f79fb385..8aa263cd81 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -1,15 +1,13 @@ #include "guis/GuiDetectDevice.h" -#include "Window.h" -#include "Renderer.h" -#include "PowerSaver.h" -#include "resources/Font.h" -#include "guis/GuiInputConfig.h" + #include "components/TextComponent.h" -#include -#include -#include +#include "guis/GuiInputConfig.h" +#include "InputManager.h" +#include "PowerSaver.h" +#include "Renderer.h" #include "Util.h" -#include +#include "Window.h" +#include #define HOLD_TIME 1000 diff --git a/es-core/src/guis/GuiDetectDevice.h b/es-core/src/guis/GuiDetectDevice.h index a9150bff28..f1b0f603d1 100644 --- a/es-core/src/guis/GuiDetectDevice.h +++ b/es-core/src/guis/GuiDetectDevice.h @@ -2,9 +2,9 @@ #ifndef ES_CORE_GUIS_GUI_DETECT_DEVICE_H #define ES_CORE_GUIS_GUI_DETECT_DEVICE_H -#include "GuiComponent.h" -#include "components/NinePatchComponent.h" #include "components/ComponentGrid.h" +#include "components/NinePatchComponent.h" +#include "GuiComponent.h" class TextComponent; diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index bd51f2954e..b13474c14e 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -1,12 +1,11 @@ #include "guis/GuiInputConfig.h" + +#include "components/ButtonComponent.h" +#include "components/MenuComponent.h" #include "guis/GuiMsgBox.h" -#include "Window.h" +#include "InputManager.h" #include "Log.h" -#include "components/TextComponent.h" -#include "components/ImageComponent.h" -#include "components/MenuComponent.h" -#include "components/ButtonComponent.h" -#include "Util.h" +#include "Window.h" // static const int inputCount = 10; // static const char* inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "PageUp", "PageDown" }; diff --git a/es-core/src/guis/GuiInputConfig.h b/es-core/src/guis/GuiInputConfig.h index 8c54d7e4b6..134ad39036 100644 --- a/es-core/src/guis/GuiInputConfig.h +++ b/es-core/src/guis/GuiInputConfig.h @@ -2,12 +2,12 @@ #ifndef ES_CORE_GUIS_GUI_INPUT_CONFIG_H #define ES_CORE_GUIS_GUI_INPUT_CONFIG_H -#include "GuiComponent.h" -#include "components/NinePatchComponent.h" -#include "components/ComponentGrid.h" -#include "components/ComponentList.h" #include "components/BusyComponent.h" +#include "components/ComponentGrid.h" +#include "components/NinePatchComponent.h" +#include "GuiComponent.h" +class ComponentList; class TextComponent; class GuiInputConfig : public GuiComponent diff --git a/es-core/src/guis/GuiMsgBox.cpp b/es-core/src/guis/GuiMsgBox.cpp index 68c2a2b080..5e2a9989a0 100644 --- a/es-core/src/guis/GuiMsgBox.cpp +++ b/es-core/src/guis/GuiMsgBox.cpp @@ -1,10 +1,7 @@ #include "guis/GuiMsgBox.h" -#include "Renderer.h" -#include "components/TextComponent.h" + #include "components/ButtonComponent.h" -#include "components/MenuComponent.h" // for makeButtonGrid -#include "Util.h" -#include "Log.h" +#include "components/MenuComponent.h" #define HORIZONTAL_PADDING_PX 20 diff --git a/es-core/src/guis/GuiMsgBox.h b/es-core/src/guis/GuiMsgBox.h index be01435ccd..0719183451 100644 --- a/es-core/src/guis/GuiMsgBox.h +++ b/es-core/src/guis/GuiMsgBox.h @@ -2,12 +2,12 @@ #ifndef ES_CORE_GUIS_GUI_MSG_BOX_H #define ES_CORE_GUIS_GUI_MSG_BOX_H -#include "GuiComponent.h" -#include "components/NinePatchComponent.h" #include "components/ComponentGrid.h" +#include "components/NinePatchComponent.h" +#include "GuiComponent.h" -class TextComponent; class ButtonComponent; +class TextComponent; class GuiMsgBox : public GuiComponent { diff --git a/es-core/src/guis/GuiTextEditPopup.cpp b/es-core/src/guis/GuiTextEditPopup.cpp index 06cf20a276..a96dfddab2 100644 --- a/es-core/src/guis/GuiTextEditPopup.cpp +++ b/es-core/src/guis/GuiTextEditPopup.cpp @@ -1,5 +1,8 @@ #include "guis/GuiTextEditPopup.h" + +#include "components/ButtonComponent.h" #include "components/MenuComponent.h" +#include "components/TextEditComponent.h" GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, const std::string& initValue, const std::function& okCallback, bool multiLine, const char* acceptBtnText) diff --git a/es-core/src/guis/GuiTextEditPopup.h b/es-core/src/guis/GuiTextEditPopup.h index 58293330aa..eca29ec41a 100644 --- a/es-core/src/guis/GuiTextEditPopup.h +++ b/es-core/src/guis/GuiTextEditPopup.h @@ -2,13 +2,12 @@ #ifndef ES_CORE_GUIS_GUI_TEXT_EDIT_POPUP_H #define ES_CORE_GUIS_GUI_TEXT_EDIT_POPUP_H +#include "components/ComponentGrid.h" +#include "components/NinePatchComponent.h" #include "GuiComponent.h" -#include "components/NinePatchComponent.h" -#include "components/ButtonComponent.h" -#include "components/ComponentGrid.h" -#include "components/TextEditComponent.h" -#include "components/TextComponent.h" +class TextComponent; +class TextEditComponent; class GuiTextEditPopup : public GuiComponent { diff --git a/es-core/src/platform.cpp b/es-core/src/platform.cpp index 04d02b98f6..b698765a7b 100644 --- a/es-core/src/platform.cpp +++ b/es-core/src/platform.cpp @@ -1,13 +1,11 @@ #include "platform.h" -#include -#include -#include -#include -#include +#include +#include #ifdef WIN32 #include #endif +#include std::string getHomePath() { diff --git a/es-core/src/platform.h b/es-core/src/platform.h index 11ffc10955..98826ac294 100644 --- a/es-core/src/platform.h +++ b/es-core/src/platform.h @@ -2,6 +2,8 @@ #ifndef ES_CORE_PLATFORM_H #define ES_CORE_PLATFORM_H +#include + //the Makefile defines one of these: //#define USE_OPENGL_ES //#define USE_OPENGL_DESKTOP @@ -19,8 +21,6 @@ #define GLHEADER #endif -#include - std::string getHomePath(); diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index b2356c9f0d..4b88d9d76d 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -1,10 +1,7 @@ #include "resources/Font.h" -#include -#include -#include -#include -#include "Renderer.h" + #include "Log.h" +#include "Renderer.h" #include "Util.h" FT_Library Font::sLibrary = NULL; diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index d11f6dc7a3..acf55ca7e6 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -2,14 +2,14 @@ #ifndef ES_CORE_RESOURCES_FONT_H #define ES_CORE_RESOURCES_FONT_H -#include -#include "platform.h" -#include GLHEADER -#include -#include FT_FREETYPE_H +#include "math/Vector2f.h" +#include "math/Vector2i.h" #include "resources/ResourceManager.h" +#include "Renderer.h" #include "ThemeData.h" -#include "math/Vector2i.h" +#include +#include FT_FREETYPE_H +#include class TextCache; diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index b495c860ff..a851baf528 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -1,8 +1,8 @@ #include "ResourceManager.h" -#include "Log.h" + #include "../data/Resources.h" +#include #include -#include namespace fs = boost::filesystem; diff --git a/es-core/src/resources/ResourceManager.h b/es-core/src/resources/ResourceManager.h index edfbcb031d..1bcf07f409 100644 --- a/es-core/src/resources/ResourceManager.h +++ b/es-core/src/resources/ResourceManager.h @@ -2,10 +2,8 @@ #ifndef ES_CORE_RESOURCES_RESOURCE_MANAGER_H #define ES_CORE_RESOURCES_RESOURCE_MANAGER_H -#include -#include -#include #include +#include //The ResourceManager exists to... //Allow loading resources embedded into the executable like an actual file. diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index f614e0ad81..18faf6cbd5 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -1,12 +1,15 @@ #include "resources/TextureData.h" + #include "resources/ResourceManager.h" -#include "Log.h" #include "ImageIO.h" -#include "string.h" -#include "Util.h" -#include "nanosvg/nanosvg.h" -#include "nanosvg/nanosvgrast.h" -#include +#include "Log.h" +#include "platform.h" +#include GLHEADER +#include +#include +#include +#include +#include #define DPI 96 diff --git a/es-core/src/resources/TextureData.h b/es-core/src/resources/TextureData.h index 362cdf0b12..3ac6f239ef 100644 --- a/es-core/src/resources/TextureData.h +++ b/es-core/src/resources/TextureData.h @@ -2,11 +2,10 @@ #ifndef ES_CORE_RESOURCES_TEXTURE_DATA_H #define ES_CORE_RESOURCES_TEXTURE_DATA_H -#include -#include #include "platform.h" -#include #include GLHEADER +#include +#include class TextureResource; diff --git a/es-core/src/resources/TextureDataManager.cpp b/es-core/src/resources/TextureDataManager.cpp index bd1f04d3ed..9ac155b0f6 100644 --- a/es-core/src/resources/TextureDataManager.cpp +++ b/es-core/src/resources/TextureDataManager.cpp @@ -1,4 +1,6 @@ #include "resources/TextureDataManager.h" + +#include "resources/TextureData.h" #include "resources/TextureResource.h" #include "Settings.h" diff --git a/es-core/src/resources/TextureDataManager.h b/es-core/src/resources/TextureDataManager.h index bc0da25118..a9c871596f 100644 --- a/es-core/src/resources/TextureDataManager.h +++ b/es-core/src/resources/TextureDataManager.h @@ -2,16 +2,14 @@ #ifndef ES_CORE_RESOURCES_TEXTURE_DATA_MANAGER_H #define ES_CORE_RESOURCES_TEXTURE_DATA_MANAGER_H -#include "resources/ResourceManager.h" -#include "platform.h" -#include "resources/TextureData.h" +#include +#include #include #include -#include #include -#include -#include +#include +class TextureData; class TextureResource; class TextureLoader diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index 5c2cfdf0a0..b63f0bc60f 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -1,11 +1,7 @@ #include "resources/TextureResource.h" -#include "Log.h" -#include "platform.h" -#include GLHEADER -#include "ImageIO.h" -#include "Renderer.h" + +#include "resources/TextureData.h" #include "Util.h" -#include "Settings.h" TextureDataManager TextureResource::sTextureDataManager; std::map< TextureResource::TextureKeyType, std::weak_ptr > TextureResource::sTextureMap; diff --git a/es-core/src/resources/TextureResource.h b/es-core/src/resources/TextureResource.h index 4cff40780d..c2be59f1d7 100644 --- a/es-core/src/resources/TextureResource.h +++ b/es-core/src/resources/TextureResource.h @@ -2,17 +2,14 @@ #ifndef ES_CORE_RESOURCES_TEXTURE_RESOURCE_H #define ES_CORE_RESOURCES_TEXTURE_RESOURCE_H -#include "resources/ResourceManager.h" - -#include -#include -#include -#include "platform.h" -#include "resources/TextureData.h" -#include "resources/TextureDataManager.h" -#include GLHEADER #include "math/Vector2i.h" #include "math/Vector2f.h" +#include "resources/ResourceManager.h" +#include "resources/TextureDataManager.h" +#include +#include + +class TextureData; // An OpenGL texture. // Automatically recreates the texture with renderer deinit/reinit. From 189eb05fee3144b368dd7ca3ea5dca00ce8fcbc3 Mon Sep 17 00:00:00 2001 From: "D. Polders" Date: Fri, 8 Sep 2017 15:20:07 +0200 Subject: [PATCH 191/603] * Introduce KidMode: Prevent collection editing * Introduce FileData Filtering for Kiosk and Kid Modes to: 1. In Kiosk mode: Hide items with metadata tag `true` 2. In Kid mode: only show items with metadata tag `true` * ES will auto-revert UI mode back to Full when there is nothing at all to show. * Changing the setting hideQuitMenuOnKidUI to true will hide this menu. --- es-app/src/FileFilterIndex.cpp | 101 +++++++++++-- es-app/src/FileFilterIndex.h | 17 ++- es-app/src/MetaData.cpp | 2 + es-app/src/SystemData.cpp | 27 ++++ es-app/src/SystemData.h | 19 +-- es-app/src/guis/GuiGamelistFilter.cpp | 12 +- es-app/src/guis/GuiMenu.cpp | 7 +- es-app/src/main.cpp | 7 +- es-app/src/views/SystemView.cpp | 137 ++++++++++-------- es-app/src/views/ViewController.cpp | 16 +- es-app/src/views/ViewController.h | 5 +- .../src/views/gamelist/BasicGameListView.cpp | 2 +- .../views/gamelist/ISimpleGameListView.cpp | 2 +- es-core/src/Settings.cpp | 3 + 14 files changed, 254 insertions(+), 103 deletions(-) diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index 1013bb77c3..c2c1bc33e4 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -1,4 +1,6 @@ #include "FileFilterIndex.h" +#include "Settings.h" +#include "views/ViewController.h" #include "FileData.h" #include "Log.h" @@ -9,15 +11,18 @@ #define INCLUDE_UNKNOWN false; FileFilterIndex::FileFilterIndex() - : filterByGenre(false), filterByPlayers(false), filterByPubDev(false), filterByRatings(false), filterByFavorites(false) + : filterByFavorites(false), filterByGenre(false), filterByHidden(false), filterByKidGame(false), filterByPlayers(false), filterByPubDev(false), filterByRatings(false) { + clearAllFilters(); FilterDataDecl filterDecls[] = { //type //allKeys //filteredBy //filteredKeys //primaryKey //hasSecondaryKey //secondaryKey //menuLabel { FAVORITES_FILTER, &favoritesIndexAllKeys, &filterByFavorites, &favoritesIndexFilteredKeys,"favorite", false, "", "FAVORITES" }, { GENRE_FILTER, &genreIndexAllKeys, &filterByGenre, &genreIndexFilteredKeys, "genre", true, "genre", "GENRE" }, { PLAYER_FILTER, &playersIndexAllKeys, &filterByPlayers, &playersIndexFilteredKeys, "players", false, "", "PLAYERS" }, { PUBDEV_FILTER, &pubDevIndexAllKeys, &filterByPubDev, &pubDevIndexFilteredKeys, "developer", true, "publisher", "PUBLISHER / DEVELOPER" }, - { RATINGS_FILTER, &ratingsIndexAllKeys, &filterByRatings, &ratingsIndexFilteredKeys, "rating", false, "", "RATING" } + { RATINGS_FILTER, &ratingsIndexAllKeys, &filterByRatings, &ratingsIndexFilteredKeys, "rating", false, "", "RATING" }, + { KIDGAME_FILTER, &kidGameIndexAllKeys, &filterByKidGame, &kidGameIndexFilteredKeys, "kidgame", false, "", "KIDGAME" }, + { HIDDEN_FILTER, &hiddenIndexAllKeys, &filterByHidden, &hiddenIndexFilteredKeys, "hidden", false, "", "HIDDEN" } }; filterDataDecl = std::vector(filterDecls, filterDecls + sizeof(filterDecls) / sizeof(filterDecls[0])); @@ -36,17 +41,19 @@ std::vector& FileFilterIndex::getFilterDataDecls() void FileFilterIndex::importIndex(FileFilterIndex* indexToImport) { struct IndexImportStructure - { - std::map* destinationIndex; - std::map* sourceIndex; - }; + { + std::map* destinationIndex; + std::map* sourceIndex; + }; IndexImportStructure indexStructDecls[] = { { &genreIndexAllKeys, &(indexToImport->genreIndexAllKeys) }, { &playersIndexAllKeys, &(indexToImport->playersIndexAllKeys) }, { &pubDevIndexAllKeys, &(indexToImport->pubDevIndexAllKeys) }, { &ratingsIndexAllKeys, &(indexToImport->ratingsIndexAllKeys) }, - { &favoritesIndexAllKeys, &(indexToImport->favoritesIndexAllKeys) } + { &favoritesIndexAllKeys, &(indexToImport->favoritesIndexAllKeys) }, + { &hiddenIndexAllKeys, &(indexToImport->hiddenIndexAllKeys) }, + { &kidGameIndexAllKeys, &(indexToImport->kidGameIndexAllKeys) }, }; std::vector indexImportDecl = std::vector(indexStructDecls, indexStructDecls + sizeof(indexStructDecls) / sizeof(indexStructDecls[0])); @@ -75,6 +82,8 @@ void FileFilterIndex::resetIndex() clearIndex(pubDevIndexAllKeys); clearIndex(ratingsIndexAllKeys); clearIndex(favoritesIndexAllKeys); + clearIndex(hiddenIndexAllKeys); + clearIndex(kidGameIndexAllKeys); } std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary) @@ -149,6 +158,20 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ key = strToUpper(game->metadata.get("favorite")); break; } + case HIDDEN_FILTER: + { + if (game->getType() != GAME) + return "FALSE"; + key = strToUpper(game->metadata.get("hidden")); + break; + } + case KIDGAME_FILTER: + { + if (game->getType() != GAME) + return "FALSE"; + key = strToUpper(game->metadata.get("kidgame")); + break; + } } boost::trim(key); if (key.empty() || (type == RATINGS_FILTER && key == "0 STARS")) { @@ -164,6 +187,8 @@ void FileFilterIndex::addToIndex(FileData* game) managePubDevEntryInIndex(game); manageRatingsEntryInIndex(game); manageFavoritesEntryInIndex(game); + manageHiddenEntryInIndex(game); + manageKidGameEntryInIndex(game); } void FileFilterIndex::removeFromIndex(FileData* game) @@ -173,6 +198,8 @@ void FileFilterIndex::removeFromIndex(FileData* game) managePubDevEntryInIndex(game, true); manageRatingsEntryInIndex(game, true); manageFavoritesEntryInIndex(game, true); + manageHiddenEntryInIndex(game, true); + manageKidGameEntryInIndex(game, true); } void FileFilterIndex::setFilter(FilterIndexType type, std::vector* values) @@ -213,6 +240,28 @@ void FileFilterIndex::clearAllFilters() return; } +void FileFilterIndex::resetFilters() +{ + clearAllFilters(); + setUIModeFilters(); +} + +void FileFilterIndex::setUIModeFilters() +{ + if (!ViewController::get()->isUIModeFull()) + { + filterByHidden = true; + std::vector val = { "FALSE" }; + setFilter(HIDDEN_FILTER, &val); + } + if (ViewController::get()->isUIModeKid()) + { + filterByKidGame = true; + std::vector val = { "TRUE" }; + setFilter(KIDGAME_FILTER, &val); + } +} + void FileFilterIndex::debugPrintIndexes() { LOG(LogInfo) << "Printing Indexes..."; @@ -230,6 +279,12 @@ void FileFilterIndex::debugPrintIndexes() } for (auto x: favoritesIndexAllKeys) { LOG(LogInfo) << "Favorites Index: " << x.first << ": " << x.second; + } + for (auto x : hiddenIndexAllKeys) { + LOG(LogInfo) << "Hidden Index: " << x.first << ": " << x.second; + } + for (auto x : kidGameIndexAllKeys) { + LOG(LogInfo) << "KidGames Index: " << x.first << ": " << x.second; } } @@ -290,10 +345,10 @@ bool FileFilterIndex::showFile(FileData* game) bool FileFilterIndex::isKeyBeingFilteredBy(std::string key, FilterIndexType type) { - const FilterIndexType filterTypes[5] = { FAVORITES_FILTER, PLAYER_FILTER, RATINGS_FILTER, GENRE_FILTER, PUBDEV_FILTER }; - std::vector filterKeysList[5] = { favoritesIndexFilteredKeys, playersIndexFilteredKeys, ratingsIndexFilteredKeys, genreIndexFilteredKeys, pubDevIndexFilteredKeys }; + const FilterIndexType filterTypes[7] = { FAVORITES_FILTER, GENRE_FILTER, PLAYER_FILTER, PUBDEV_FILTER, RATINGS_FILTER,HIDDEN_FILTER, KIDGAME_FILTER }; + std::vector filterKeysList[7] = { favoritesIndexFilteredKeys, genreIndexFilteredKeys, playersIndexFilteredKeys, pubDevIndexFilteredKeys, ratingsIndexFilteredKeys, hiddenIndexFilteredKeys, kidGameIndexFilteredKeys }; - for (int i = 0; i < 5; i++) + for (int i = 0; i < 7; i++) { if (filterTypes[i] == type) { @@ -416,6 +471,32 @@ void FileFilterIndex::manageFavoritesEntryInIndex(FileData* game, bool remove) manageIndexEntry(&favoritesIndexAllKeys, key, remove); } +void FileFilterIndex::manageHiddenEntryInIndex(FileData* game, bool remove) +{ + // flag for including unknowns + bool includeUnknown = INCLUDE_UNKNOWN; + std::string key = getIndexableKey(game, HIDDEN_FILTER, false); + if (!includeUnknown && key == UNKNOWN_LABEL) { + // no valid hidden info found + return; + } + + manageIndexEntry(&hiddenIndexAllKeys, key, remove); +} + +void FileFilterIndex::manageKidGameEntryInIndex(FileData* game, bool remove) +{ + // flag for including unknowns + bool includeUnknown = INCLUDE_UNKNOWN; + std::string key = getIndexableKey(game, KIDGAME_FILTER, false); + if (!includeUnknown && key == UNKNOWN_LABEL) { + // no valid kidgame info found + return; + } + + manageIndexEntry(&kidGameIndexAllKeys, key, remove); +} + void FileFilterIndex::manageIndexEntry(std::map* index, std::string key, bool remove) { bool includeUnknown = INCLUDE_UNKNOWN; if (!includeUnknown && key == UNKNOWN_LABEL) diff --git a/es-app/src/FileFilterIndex.h b/es-app/src/FileFilterIndex.h index 57575a1721..93b9c8d9ff 100644 --- a/es-app/src/FileFilterIndex.h +++ b/es-app/src/FileFilterIndex.h @@ -14,7 +14,9 @@ enum FilterIndexType PLAYER_FILTER, PUBDEV_FILTER, RATINGS_FILTER, - FAVORITES_FILTER + FAVORITES_FILTER, + HIDDEN_FILTER, + KIDGAME_FILTER }; struct FilterDataDecl @@ -40,12 +42,15 @@ class FileFilterIndex void clearAllFilters(); void debugPrintIndexes(); bool showFile(FileData* game); - bool isFiltered() { return (filterByGenre || filterByPlayers || filterByPubDev || filterByRatings || filterByFavorites); }; + bool isFiltered() { return (filterByGenre || filterByPlayers || filterByPubDev || filterByRatings || filterByFavorites || filterByHidden || filterByKidGame); }; bool isKeyBeingFilteredBy(std::string key, FilterIndexType type); std::vector& getFilterDataDecls(); void importIndex(FileFilterIndex* indexToImport); void resetIndex(); + void resetFilters(); + void setUIModeFilters(); + private: std::vector filterDataDecl; std::string getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary); @@ -55,6 +60,8 @@ class FileFilterIndex void managePubDevEntryInIndex(FileData* game, bool remove = false); void manageRatingsEntryInIndex(FileData* game, bool remove = false); void manageFavoritesEntryInIndex(FileData* game, bool remove = false); + void manageHiddenEntryInIndex(FileData* game, bool remove = false); + void manageKidGameEntryInIndex(FileData* game, bool remove = false); void manageIndexEntry(std::map* index, std::string key, bool remove); @@ -65,18 +72,24 @@ class FileFilterIndex bool filterByPubDev; bool filterByRatings; bool filterByFavorites; + bool filterByHidden; + bool filterByKidGame; std::map genreIndexAllKeys; std::map playersIndexAllKeys; std::map pubDevIndexAllKeys; std::map ratingsIndexAllKeys; std::map favoritesIndexAllKeys; + std::map hiddenIndexAllKeys; + std::map kidGameIndexAllKeys; std::vector genreIndexFilteredKeys; std::vector playersIndexFilteredKeys; std::vector pubDevIndexFilteredKeys; std::vector ratingsIndexFilteredKeys; std::vector favoritesIndexFilteredKeys; + std::vector hiddenIndexFilteredKeys; + std::vector kidGameIndexFilteredKeys; FileData* mRootFolder; diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 161f6da843..5c6fb7f25c 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -21,6 +21,8 @@ MetaDataDecl gameDecls[] = { {"genre", MD_STRING, "unknown", false, "genre", "enter game genre"}, {"players", MD_INT, "1", false, "players", "enter number of players"}, {"favorite", MD_BOOL, "false", false, "favorite", "enter favorite off/on"}, + {"hidden", MD_BOOL, "false", false, "hidden", "enter hidden off/on" }, + {"kidgame", MD_BOOL, "false", false, "kidgame", "enter kidgame off/on" }, {"playcount", MD_INT, "0", true, "play count", "enter number of times played"}, {"lastplayed", MD_TIME, "0", true, "last played", "enter last played date"} }; diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index ee659dd0ba..148b91c139 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -340,6 +340,33 @@ std::string SystemData::getConfigPath(bool forWrite) return "/etc/emulationstation/es_systems.cfg"; } +SystemData* SystemData::getNext() const +{ + std::vector::const_iterator it = getIterator(); + + do { + it++; + if (it == sSystemVector.end()) + it = sSystemVector.begin(); + } while ((*it)->getDisplayedGameCount() == 0); + // as we are starting in a valid gamelistview, this will always succeed, even if we have to come full circle. + + return *it; +} + +SystemData* SystemData::getPrev() const +{ + auto it = getRevIterator(); + do { + it++; + if (it == sSystemVector.rend()) + it = sSystemVector.rbegin(); + } while ((*it)->getDisplayedGameCount() == 0); + // as we are starting in a valid gamelistview, this will always succeed, even if we have to come full circle. + + return *it; +} + std::string SystemData::getGamelistPath(bool forWrite) const { fs::path filePath; diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index 09690f273c..ede8edcd7e 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -56,22 +56,9 @@ class SystemData inline std::vector::const_reverse_iterator getRevIterator() const { return std::find(sSystemVector.rbegin(), sSystemVector.rend(), this); }; inline bool isCollection() { return mIsCollectionSystem; }; inline bool isGameSystem() { return mIsGameSystem; } - inline SystemData* getNext() const - { - auto it = getIterator(); - it++; - if(it == sSystemVector.end()) it = sSystemVector.begin(); - return *it; - } - - inline SystemData* getPrev() const - { - auto it = getRevIterator(); - it++; - if(it == sSystemVector.rend()) it = sSystemVector.rbegin(); - return *it; - } - + + SystemData* getNext() const; + SystemData* getPrev() const; static SystemData* getRandomSystem(); FileData* getRandomGame(); diff --git a/es-app/src/guis/GuiGamelistFilter.cpp b/es-app/src/guis/GuiGamelistFilter.cpp index a2c7f24b75..15be39d2e5 100644 --- a/es-app/src/guis/GuiGamelistFilter.cpp +++ b/es-app/src/guis/GuiGamelistFilter.cpp @@ -1,6 +1,7 @@ #include "guis/GuiGamelistFilter.h" #include "components/OptionListComponent.h" +#include "views/ViewController.h" #include "SystemData.h" GuiGamelistFilter::GuiGamelistFilter(Window* window, SystemData* system) : GuiComponent(window), mMenu(window, "FILTER GAMELIST BY"), mSystem(system) @@ -34,7 +35,7 @@ void GuiGamelistFilter::initializeMenu() void GuiGamelistFilter::resetAllFilters() { - mFilterIndex->clearAllFilters(); + mFilterIndex->resetFilters(); for (std::map >>::iterator it = mFilterOptions.begin(); it != mFilterOptions.end(); ++it ) { std::shared_ptr< OptionListComponent > optionList = it->second; optionList->selectNone(); @@ -49,7 +50,14 @@ GuiGamelistFilter::~GuiGamelistFilter() void GuiGamelistFilter::addFiltersToMenu() { std::vector decls = mFilterIndex->getFilterDataDecls(); - for (std::vector::iterator it = decls.begin(); it != decls.end(); ++it ) { + + int skip = 0; + if (!ViewController::get()->isUIModeFull()) + skip = 1; + if (ViewController::get()->isUIModeKid()) + skip = 2; + + for (std::vector::iterator it = decls.begin(); it != decls.end()-skip; ++it ) { FilterIndexType type = (*it).type; // type of filter std::map* allKeys = (*it).allIndexKeys; // all possible filters for this type diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 85014f2a21..b99ea8eea7 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -38,7 +38,8 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN if (isFullUI) addEntry("CONFIGURE INPUT", 0x777777FF, true, [this] { openConfigInput(); }); - addEntry("QUIT", 0x777777FF, true, [this] {openQuitMenu(); }); + if (!(ViewController::get()->isUIModeKid() && Settings::getInstance()->getBool("hideQuitMenuOnKidUI"))) + addEntry("QUIT", 0x777777FF, true, [this] {openQuitMenu(); }); addChild(&mMenu); addVersionInfo(); @@ -422,12 +423,11 @@ void GuiMenu::openQuitMenu() s->addRow(row); } } - row.elements.clear(); row.makeAcceptInputHandler([window] { window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", [] { - if(quitES("/tmp/es-sysrestart") != 0) + if (quitES("/tmp/es-sysrestart") != 0) LOG(LogWarning) << "Restart terminated with non-zero result!"; }, "NO", nullptr)); }); @@ -455,7 +455,6 @@ void GuiMenu::addVersionInfo() mVersion.setText("EMULATIONSTATION V" + strToUpper(PROGRAM_VERSION_STRING)); mVersion.setHorizontalAlignment(ALIGN_CENTER); addChild(&mVersion); - } void GuiMenu::openScreensaverOptions() { diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 2e9344a18a..68bb91b3b5 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -86,7 +86,12 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height else if (strcmp(argv[i], "--force-kiosk") == 0) { Settings::getInstance()->setBool("ForceKiosk", true); - }else if(strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) + } + else if (strcmp(argv[i], "--force-kid") == 0) + { + Settings::getInstance()->setBool("ForceKid", true); + } + else if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { #ifdef WIN32 // This is a bit of a hack, but otherwise output will go to nowhere diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index b055669258..99814b41e8 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -1,6 +1,7 @@ #include "views/SystemView.h" #include "animations/LambdaAnimation.h" +#include "guis/GuiMsgBox.h" #include "views/ViewController.h" #include "Log.h" #include "Renderer.h" @@ -35,78 +36,88 @@ void SystemView::populate() if(mViewNeedsReload) getViewElements(theme); - Entry e; - e.name = (*it)->getName(); - e.object = *it; - - // make logo - const ThemeData::ThemeElement* logoElem = theme->getElement("system", "logo", "image"); - if(logoElem) + if((*it)->getDisplayedGameCount() > 0) { - std::string path = logoElem->get("path"); - std::string defaultPath = logoElem->has("default") ? logoElem->get("default") : ""; - if((!path.empty() && ResourceManager::getInstance()->fileExists(path)) - || (!defaultPath.empty() && ResourceManager::getInstance()->fileExists(defaultPath))) - { - ImageComponent* logo = new ImageComponent(mWindow, false, false); - logo->setMaxSize(mCarousel.logoSize * mCarousel.logoScale); - logo->applyTheme(theme, "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); + Entry e; + e.name = (*it)->getName(); + e.object = *it; - e.data.logo = std::shared_ptr(logo); + // make logo + const ThemeData::ThemeElement* logoElem = theme->getElement("system", "logo", "image"); + if(logoElem) + { + std::string path = logoElem->get("path"); + std::string defaultPath = logoElem->has("default") ? logoElem->get("default") : ""; + if((!path.empty() && ResourceManager::getInstance()->fileExists(path)) + || (!defaultPath.empty() && ResourceManager::getInstance()->fileExists(defaultPath))) + { + ImageComponent* logo = new ImageComponent(mWindow, false, false); + logo->setMaxSize(mCarousel.logoSize * mCarousel.logoScale); + logo->applyTheme(theme, "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); + e.data.logo = std::shared_ptr(logo); + } + } + if (!e.data.logo) + { + // no logo in theme; use text + TextComponent* text = new TextComponent(mWindow, + (*it)->getName(), + Font::get(FONT_SIZE_LARGE), + 0x000000FF, + ALIGN_CENTER); + text->setSize(mCarousel.logoSize * mCarousel.logoScale); + text->applyTheme((*it)->getTheme(), "system", "logoText", ThemeFlags::FONT_PATH | ThemeFlags::FONT_SIZE | ThemeFlags::COLOR | ThemeFlags::FORCE_UPPERCASE); + e.data.logo = std::shared_ptr(text); + + if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) + text->setHorizontalAlignment(mCarousel.logoAlignment); + else + text->setVerticalAlignment(mCarousel.logoAlignment); } - } - if (!e.data.logo) - { - // no logo in theme; use text - TextComponent* text = new TextComponent(mWindow, - (*it)->getName(), - Font::get(FONT_SIZE_LARGE), - 0x000000FF, - ALIGN_CENTER); - text->setSize(mCarousel.logoSize * mCarousel.logoScale); - text->applyTheme((*it)->getTheme(), "system", "logoText", ThemeFlags::FONT_PATH | ThemeFlags::FONT_SIZE | ThemeFlags::COLOR | ThemeFlags::FORCE_UPPERCASE); - e.data.logo = std::shared_ptr(text); if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) - text->setHorizontalAlignment(mCarousel.logoAlignment); - else - text->setVerticalAlignment(mCarousel.logoAlignment); - } - - if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) - { - if (mCarousel.logoAlignment == ALIGN_LEFT) - e.data.logo->setOrigin(0, 0.5); - else if (mCarousel.logoAlignment == ALIGN_RIGHT) - e.data.logo->setOrigin(1.0, 0.5); - else - e.data.logo->setOrigin(0.5, 0.5); - } else { - if (mCarousel.logoAlignment == ALIGN_TOP) - e.data.logo->setOrigin(0.5, 0); - else if (mCarousel.logoAlignment == ALIGN_BOTTOM) - e.data.logo->setOrigin(0.5, 1); - else - e.data.logo->setOrigin(0.5, 0.5); - } - - Vector2f denormalized = mCarousel.logoSize * e.data.logo->getOrigin(); - e.data.logo->setPosition(denormalized.x(), denormalized.y(), 0.0); + { + if (mCarousel.logoAlignment == ALIGN_LEFT) + e.data.logo->setOrigin(0, 0.5); + else if (mCarousel.logoAlignment == ALIGN_RIGHT) + e.data.logo->setOrigin(1.0, 0.5); + else + e.data.logo->setOrigin(0.5, 0.5); + } else { + if (mCarousel.logoAlignment == ALIGN_TOP) + e.data.logo->setOrigin(0.5, 0); + else if (mCarousel.logoAlignment == ALIGN_BOTTOM) + e.data.logo->setOrigin(0.5, 1); + else + e.data.logo->setOrigin(0.5, 0.5); + } - // delete any existing extras - for (auto extra : e.data.backgroundExtras) - delete extra; - e.data.backgroundExtras.clear(); + Vector2f denormalized = mCarousel.logoSize * e.data.logo->getOrigin(); + e.data.logo->setPosition(denormalized.x(), denormalized.y(), 0.0); + // delete any existing extras + for (auto extra : e.data.backgroundExtras) + delete extra; + e.data.backgroundExtras.clear(); - // make background extras - e.data.backgroundExtras = ThemeData::makeExtras((*it)->getTheme(), "system", mWindow); + // make background extras + e.data.backgroundExtras = ThemeData::makeExtras((*it)->getTheme(), "system", mWindow); - // sort the extras by z-index - std::stable_sort(e.data.backgroundExtras.begin(), e.data.backgroundExtras.end(), [](GuiComponent* a, GuiComponent* b) { - return b->getZIndex() > a->getZIndex(); - }); + // sort the extras by z-index + std::stable_sort(e.data.backgroundExtras.begin(), e.data.backgroundExtras.end(), [](GuiComponent* a, GuiComponent* b) { + return b->getZIndex() > a->getZIndex(); + }); - this->add(e); + this->add(e); + } + } + if (mEntries.size() == 0) + { + // Something is wrong, there is not a single system to show, check if UI mode is not full + if (!ViewController::get()->isUIModeFull()) + { + Settings::getInstance()->setString("UIMode", "Full"); + mWindow->pushGui(new GuiMsgBox(mWindow, "The selected UI mode has nothing to show,\n returning to UI mode: FULL", "OK", nullptr)); + } } } diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 3ae32b1a4c..f81cba7e79 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -9,6 +9,7 @@ #include "views/gamelist/IGameListView.h" #include "views/gamelist/VideoGameListView.h" #include "views/SystemView.h" +#include "FileFilterIndex.h" #include "Log.h" #include "Settings.h" #include "SystemData.h" @@ -393,7 +394,7 @@ void ViewController::render(const Transform4x4f& parentTrans) if(guiEnd.x() >= viewStart.x() && guiEnd.y() >= viewStart.y() && guiStart.x() <= viewEnd.x() && guiStart.y() <= viewEnd.y()) - it->second->render(trans); + it->second->render(trans); } if(mWindow->peekGui() == this) @@ -411,6 +412,7 @@ void ViewController::preload() { for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) { + (*it)->getIndex()->resetFilters(); getGameListView(*it); } } @@ -448,6 +450,7 @@ void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) void ViewController::reloadAll() { + // clear all gamelistviews std::map cursorMap; for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) { @@ -455,12 +458,16 @@ void ViewController::reloadAll() } mGameListViews.clear(); + + // load themes, create gamelistviews and reset filters for(auto it = cursorMap.begin(); it != cursorMap.end(); it++) { it->first->loadTheme(); + it->first->getIndex()->resetFilters(); getGameListView(it->first)->setCursor(it->second); } + // Rebuild SystemListView mSystemListView.reset(); getSystemListView(); @@ -486,6 +493,7 @@ void ViewController::monitorUIMode() std::string uimode = Settings::getInstance()->getString("UIMode"); if (uimode != mCurUIMode) // UIMODE HAS CHANGED { + mWindow->renderLoadingScreen(); mCurUIMode = uimode; reloadAll(); goToStart(); @@ -497,6 +505,12 @@ bool ViewController::isUIModeFull() return ((mCurUIMode == "Full") && ! Settings::getInstance()->getBool("ForceKiosk")); } +bool ViewController::isUIModeKid() +{ + return (Settings::getInstance()->getBool("ForceKid") || + ((mCurUIMode == "Kid") && !Settings::getInstance()->getBool("ForceKiosk"))); +} + std::vector ViewController::getHelpPrompts() { std::vector prompts; diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 985df16a8f..a999edf9db 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -11,7 +11,7 @@ class IGameListView; class SystemData; class SystemView; -const std::vector UIModes = { "Full", "Kiosk" }; +const std::vector UIModes = { "Full", "Kiosk", "Kid" }; // Used to smoothly transition the camera between multiple views (e.g. from system to system, from gamelist to gamelist). class ViewController : public GuiComponent @@ -33,8 +33,9 @@ class ViewController : public GuiComponent void reloadAll(); // Reload everything with a theme. Used when the "ThemeSet" setting changes. void monitorUIMode(); - bool isUIModeFull(); inline std::vector getUIModes() { return UIModes; }; + bool isUIModeFull(); + bool isUIModeKid(); // Navigation. void goToNextGameList(); diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index b81e6462de..a8326f0c4b 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -141,7 +141,7 @@ std::vector BasicGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("select", "options")); prompts.push_back(HelpPrompt("x", "random")); - if(mRoot->getSystem()->isGameSystem()) + if(mRoot->getSystem()->isGameSystem() && !ViewController::get()->isUIModeKid()) { std::string prompt = CollectionSystemManager::get()->getEditingCollection(); prompts.push_back(HelpPrompt("y", prompt)); diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index de7e83cf5b..0ae982bcd1 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -142,7 +142,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) setCursor(randomGame); } return true; - }else if (config->isMappedTo("y", input)) + }else if (config->isMappedTo("y", input) && !(ViewController::get()->isUIModeKid())) { if(mRoot->getSystem()->isGameSystem()) { diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index cb1ff06d83..c52525e6b1 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -14,6 +14,7 @@ std::vector settings_dont_save = boost::assign::list_of ("Debug") ("DebugGrid") ("DebugText") + ("ForceKid") ("ForceKiosk") ("IgnoreGamelist") ("HideConsole") @@ -124,6 +125,8 @@ void Settings::setDefaults() mStringMap["UIMode"] = "Full"; mStringMap["UIMode_passkey"] = "uuddlrlrba"; mBoolMap["ForceKiosk"] = false; + mBoolMap["ForceKid"] = false; + mBoolMap["hideQuitMenuOnKidUI"] = false; } template From ac01e8fcd4307e4f0b03ae12449f55fcac63a16e Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 3 Nov 2017 01:33:08 +0100 Subject: [PATCH 192/603] Removed all boost::assign::list_of --- es-app/src/scrapers/GamesDBScraper.cpp | 122 ++++++------ es-app/src/scrapers/Scraper.cpp | 6 +- es-core/src/Settings.cpp | 26 +-- es-core/src/ThemeData.cpp | 239 +++++++++++------------ es-core/src/components/HelpComponent.cpp | 26 +-- 5 files changed, 204 insertions(+), 215 deletions(-) diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 53b1b13026..77c98ccccd 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -6,72 +6,72 @@ #include "Settings.h" #include "SystemData.h" #include "Util.h" -#include using namespace PlatformIds; -const std::map gamesdb_platformid_map = boost::assign::map_list_of - (THREEDO, "3DO") - (AMIGA, "Amiga") - (AMSTRAD_CPC, "Amstrad CPC") +const std::map gamesdb_platformid_map { + { THREEDO, "3DO" }, + { AMIGA, "Amiga" }, + { AMSTRAD_CPC, "Amstrad CPC" }, // missing apple2 - (ARCADE, "Arcade") + { ARCADE, "Arcade" }, // missing atari 800 - (ATARI_2600, "Atari 2600") - (ATARI_5200, "Atari 5200") - (ATARI_7800, "Atari 7800") - (ATARI_JAGUAR, "Atari Jaguar") - (ATARI_JAGUAR_CD, "Atari Jaguar CD") - (ATARI_LYNX, "Atari Lynx") + { ATARI_2600, "Atari 2600" }, + { ATARI_5200, "Atari 5200" }, + { ATARI_7800, "Atari 7800" }, + { ATARI_JAGUAR, "Atari Jaguar" }, + { ATARI_JAGUAR_CD, "Atari Jaguar CD" }, + { ATARI_LYNX, "Atari Lynx" }, // missing atari ST/STE/Falcon - (ATARI_XE, "Atari XE") - (COLECOVISION, "Colecovision") - (COMMODORE_64, "Commodore 64") - (INTELLIVISION, "Intellivision") - (MAC_OS, "Mac OS") - (XBOX, "Microsoft Xbox") - (XBOX_360, "Microsoft Xbox 360") - (MSX, "MSX") - (NEOGEO, "Neo Geo") - (NEOGEO_POCKET, "Neo Geo Pocket") - (NEOGEO_POCKET_COLOR, "Neo Geo Pocket Color") - (NINTENDO_3DS, "Nintendo 3DS") - (NINTENDO_64, "Nintendo 64") - (NINTENDO_DS, "Nintendo DS") - (FAMICOM_DISK_SYSTEM, "Famicom Disk System") - (NINTENDO_ENTERTAINMENT_SYSTEM, "Nintendo Entertainment System (NES)") - (GAME_BOY, "Nintendo Game Boy") - (GAME_BOY_ADVANCE, "Nintendo Game Boy Advance") - (GAME_BOY_COLOR, "Nintendo Game Boy Color") - (NINTENDO_GAMECUBE, "Nintendo GameCube") - (NINTENDO_WII, "Nintendo Wii") - (NINTENDO_WII_U, "Nintendo Wii U") - (NINTENDO_VIRTUAL_BOY, "Nintendo Virtual Boy") - (NINTENDO_GAME_AND_WATCH, "Game & Watch") - (PC, "PC") - (SEGA_32X, "Sega 32X") - (SEGA_CD, "Sega CD") - (SEGA_DREAMCAST, "Sega Dreamcast") - (SEGA_GAME_GEAR, "Sega Game Gear") - (SEGA_GENESIS, "Sega Genesis") - (SEGA_MASTER_SYSTEM, "Sega Master System") - (SEGA_MEGA_DRIVE, "Sega Mega Drive") - (SEGA_SATURN, "Sega Saturn") - (SEGA_SG1000, "SEGA SG-1000") - (PLAYSTATION, "Sony Playstation") - (PLAYSTATION_2, "Sony Playstation 2") - (PLAYSTATION_3, "Sony Playstation 3") - (PLAYSTATION_4, "Sony Playstation 4") - (PLAYSTATION_VITA, "Sony Playstation Vita") - (PLAYSTATION_PORTABLE, "Sony Playstation Portable") - (SUPER_NINTENDO, "Super Nintendo (SNES)") - (TURBOGRAFX_16, "TurboGrafx 16") - (WONDERSWAN, "WonderSwan") - (WONDERSWAN_COLOR, "WonderSwan Color") - (ZX_SPECTRUM, "Sinclair ZX Spectrum") - (VIDEOPAC_ODYSSEY2, "Magnavox Odyssey 2") - (VECTREX, "Vectrex") - (TRS80_COLOR_COMPUTER, "TRS-80 Color Computer") - (TANDY, "TRS-80 Color Computer"); + { ATARI_XE, "Atari XE" }, + { COLECOVISION, "Colecovision" }, + { COMMODORE_64, "Commodore 64" }, + { INTELLIVISION, "Intellivision" }, + { MAC_OS, "Mac OS" }, + { XBOX, "Microsoft Xbox" }, + { XBOX_360, "Microsoft Xbox 360" }, + { MSX, "MSX" }, + { NEOGEO, "Neo Geo" }, + { NEOGEO_POCKET, "Neo Geo Pocket" }, + { NEOGEO_POCKET_COLOR, "Neo Geo Pocket Color" }, + { NINTENDO_3DS, "Nintendo 3DS" }, + { NINTENDO_64, "Nintendo 64" }, + { NINTENDO_DS, "Nintendo DS" }, + { FAMICOM_DISK_SYSTEM, "Famicom Disk System" }, + { NINTENDO_ENTERTAINMENT_SYSTEM, "Nintendo Entertainment System { NES)" }, + { GAME_BOY, "Nintendo Game Boy" }, + { GAME_BOY_ADVANCE, "Nintendo Game Boy Advance" }, + { GAME_BOY_COLOR, "Nintendo Game Boy Color" }, + { NINTENDO_GAMECUBE, "Nintendo GameCube" }, + { NINTENDO_WII, "Nintendo Wii" }, + { NINTENDO_WII_U, "Nintendo Wii U" }, + { NINTENDO_VIRTUAL_BOY, "Nintendo Virtual Boy" }, + { NINTENDO_GAME_AND_WATCH, "Game & Watch" }, + { PC, "PC" }, + { SEGA_32X, "Sega 32X" }, + { SEGA_CD, "Sega CD" }, + { SEGA_DREAMCAST, "Sega Dreamcast" }, + { SEGA_GAME_GEAR, "Sega Game Gear" }, + { SEGA_GENESIS, "Sega Genesis" }, + { SEGA_MASTER_SYSTEM, "Sega Master System" }, + { SEGA_MEGA_DRIVE, "Sega Mega Drive" }, + { SEGA_SATURN, "Sega Saturn" }, + { SEGA_SG1000, "SEGA SG-1000" }, + { PLAYSTATION, "Sony Playstation" }, + { PLAYSTATION_2, "Sony Playstation 2" }, + { PLAYSTATION_3, "Sony Playstation 3" }, + { PLAYSTATION_4, "Sony Playstation 4" }, + { PLAYSTATION_VITA, "Sony Playstation Vita" }, + { PLAYSTATION_PORTABLE, "Sony Playstation Portable" }, + { SUPER_NINTENDO, "Super Nintendo { SNES)" }, + { TURBOGRAFX_16, "TurboGrafx 16" }, + { WONDERSWAN, "WonderSwan" }, + { WONDERSWAN_COLOR, "WonderSwan Color" }, + { ZX_SPECTRUM, "Sinclair ZX Spectrum" }, + { VIDEOPAC_ODYSSEY2, "Magnavox Odyssey 2" }, + { VECTREX, "Vectrex" }, + { TRS80_COLOR_COMPUTER, "TRS-80 Color Computer" }, + { TANDY, "TRS-80 Color Computer" } +}; void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, std::vector& results) diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index 8d24d63f11..2cc67ef289 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -6,13 +6,13 @@ #include "platform.h" #include "Settings.h" #include "SystemData.h" -#include #include #include #include -const std::map scraper_request_funcs = boost::assign::map_list_of - ("TheGamesDB", &thegamesdb_generate_scraper_requests); +const std::map scraper_request_funcs { + { "TheGamesDB", &thegamesdb_generate_scraper_requests } +}; std::unique_ptr startScraperSearch(const ScraperSearchParams& params) { diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index c52525e6b1..546cec5eb2 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -2,7 +2,6 @@ #include "Log.h" #include "platform.h" -#include #include #include @@ -10,18 +9,19 @@ Settings* Settings::sInstance = NULL; // these values are NOT saved to es_settings.xml // since they're set through command-line arguments, and not the in-program settings menu -std::vector settings_dont_save = boost::assign::list_of - ("Debug") - ("DebugGrid") - ("DebugText") - ("ForceKid") - ("ForceKiosk") - ("IgnoreGamelist") - ("HideConsole") - ("ShowExit") - ("SplashScreen") - ("VSync") - ("Windowed"); +std::vector settings_dont_save { + { "Debug" }, + { "DebugGrid" }, + { "DebugText" }, + { "ForceKid" }, + { "ForceKiosk" }, + { "IgnoreGamelist" }, + { "HideConsole" }, + { "ShowExit" }, + { "SplashScreen" }, + { "VSync" }, + { "Windowed" } +}; Settings::Settings() { diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 0ed7bb9daf..d25987b673 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -5,134 +5,123 @@ #include "Log.h" #include "platform.h" #include "Settings.h" -#include #include #include -// This is a work around for some ambiguity that is introduced in C++11 that boost::assign::map_list_of leave open. -// We use makeMap(actualmap) to implicitly convert the boost::assign::map_list_of's return type to ElementMapType. -// Problem exists with gcc 4.7 and Boost 1.51. Works fine with MSVC2010 without this hack. -typedef std::map ElementMapType; -template -ElementMapType makeMap(const T& mapInit) -{ - ElementMapType m = mapInit; - return m; -} - -std::vector ThemeData::sSupportedViews = boost::assign::list_of("system")("basic")("detailed")("video"); -std::vector ThemeData::sSupportedFeatures = boost::assign::list_of("video")("carousel")("z-index"); - -std::map< std::string, ElementMapType > ThemeData::sElementMap = boost::assign::map_list_of - ("image", makeMap(boost::assign::map_list_of - ("pos", NORMALIZED_PAIR) - ("size", NORMALIZED_PAIR) - ("maxSize", NORMALIZED_PAIR) - ("origin", NORMALIZED_PAIR) - ("rotation", FLOAT) - ("rotationOrigin", NORMALIZED_PAIR) - ("path", PATH) - ("default", PATH) - ("tile", BOOLEAN) - ("color", COLOR) - ("zIndex", FLOAT))) - ("text", makeMap(boost::assign::map_list_of - ("pos", NORMALIZED_PAIR) - ("size", NORMALIZED_PAIR) - ("origin", NORMALIZED_PAIR) - ("rotation", FLOAT) - ("rotationOrigin", NORMALIZED_PAIR) - ("text", STRING) - ("backgroundColor", COLOR) - ("fontPath", PATH) - ("fontSize", FLOAT) - ("color", COLOR) - ("alignment", STRING) - ("forceUppercase", BOOLEAN) - ("lineSpacing", FLOAT) - ("value", STRING) - ("zIndex", FLOAT))) - ("textlist", makeMap(boost::assign::map_list_of - ("pos", NORMALIZED_PAIR) - ("size", NORMALIZED_PAIR) - ("origin", NORMALIZED_PAIR) - ("selectorHeight", FLOAT) - ("selectorOffsetY", FLOAT) - ("selectorColor", COLOR) - ("selectorImagePath", PATH) - ("selectorImageTile", BOOLEAN) - ("selectedColor", COLOR) - ("primaryColor", COLOR) - ("secondaryColor", COLOR) - ("fontPath", PATH) - ("fontSize", FLOAT) - ("scrollSound", PATH) - ("alignment", STRING) - ("horizontalMargin", FLOAT) - ("forceUppercase", BOOLEAN) - ("lineSpacing", FLOAT) - ("zIndex", FLOAT))) - ("container", makeMap(boost::assign::map_list_of - ("pos", NORMALIZED_PAIR) - ("size", NORMALIZED_PAIR) - ("origin", NORMALIZED_PAIR) - ("zIndex", FLOAT))) - ("ninepatch", makeMap(boost::assign::map_list_of - ("pos", NORMALIZED_PAIR) - ("size", NORMALIZED_PAIR) - ("path", PATH) - ("zIndex", FLOAT))) - ("datetime", makeMap(boost::assign::map_list_of - ("pos", NORMALIZED_PAIR) - ("size", NORMALIZED_PAIR) - ("color", COLOR) - ("fontPath", PATH) - ("fontSize", FLOAT) - ("forceUppercase", BOOLEAN) - ("zIndex", FLOAT))) - ("rating", makeMap(boost::assign::map_list_of - ("pos", NORMALIZED_PAIR) - ("size", NORMALIZED_PAIR) - ("origin", NORMALIZED_PAIR) - ("rotation", FLOAT) - ("rotationOrigin", NORMALIZED_PAIR) - ("color", COLOR) - ("filledPath", PATH) - ("unfilledPath", PATH) - ("zIndex", FLOAT))) - ("sound", makeMap(boost::assign::map_list_of - ("path", PATH))) - ("helpsystem", makeMap(boost::assign::map_list_of - ("pos", NORMALIZED_PAIR) - ("textColor", COLOR) - ("iconColor", COLOR) - ("fontPath", PATH) - ("fontSize", FLOAT))) - ("video", makeMap(boost::assign::map_list_of - ("pos", NORMALIZED_PAIR) - ("size", NORMALIZED_PAIR) - ("maxSize", NORMALIZED_PAIR) - ("origin", NORMALIZED_PAIR) - ("rotation", FLOAT) - ("rotationOrigin", NORMALIZED_PAIR) - ("default", PATH) - ("delay", FLOAT) - ("zIndex", FLOAT) - ("showSnapshotNoVideo", BOOLEAN) - ("showSnapshotDelay", BOOLEAN))) - ("carousel", makeMap(boost::assign::map_list_of - ("type", STRING) - ("size", NORMALIZED_PAIR) - ("pos", NORMALIZED_PAIR) - ("origin", NORMALIZED_PAIR) - ("color", COLOR) - ("logoScale", FLOAT) - ("logoRotation", FLOAT) - ("logoRotationOrigin", NORMALIZED_PAIR) - ("logoSize", NORMALIZED_PAIR) - ("logoAlignment", STRING) - ("maxLogoCount", FLOAT) - ("zIndex", FLOAT))); +std::vector ThemeData::sSupportedViews { { "system" }, { "basic" }, { "detailed" }, { "video" } }; +std::vector ThemeData::sSupportedFeatures { { "video" }, { "carousel" }, { "z-index" } }; + +std::map> ThemeData::sElementMap { + { "image", { + { "pos", NORMALIZED_PAIR }, + { "size", NORMALIZED_PAIR }, + { "maxSize", NORMALIZED_PAIR }, + { "origin", NORMALIZED_PAIR }, + { "rotation", FLOAT }, + { "rotationOrigin", NORMALIZED_PAIR }, + { "path", PATH }, + { "default", PATH }, + { "tile", BOOLEAN }, + { "color", COLOR }, + { "zIndex", FLOAT } } }, + { "text", { + { "pos", NORMALIZED_PAIR }, + { "size", NORMALIZED_PAIR }, + { "origin", NORMALIZED_PAIR }, + { "rotation", FLOAT }, + { "rotationOrigin", NORMALIZED_PAIR }, + { "text", STRING }, + { "backgroundColor", COLOR }, + { "fontPath", PATH }, + { "fontSize", FLOAT }, + { "color", COLOR }, + { "alignment", STRING }, + { "forceUppercase", BOOLEAN }, + { "lineSpacing", FLOAT }, + { "value", STRING }, + { "zIndex", FLOAT } } }, + { "textlist", { + { "pos", NORMALIZED_PAIR }, + { "size", NORMALIZED_PAIR }, + { "origin", NORMALIZED_PAIR }, + { "selectorHeight", FLOAT }, + { "selectorOffsetY", FLOAT }, + { "selectorColor", COLOR }, + { "selectorImagePath", PATH }, + { "selectorImageTile", BOOLEAN }, + { "selectedColor", COLOR }, + { "primaryColor", COLOR }, + { "secondaryColor", COLOR }, + { "fontPath", PATH }, + { "fontSize", FLOAT }, + { "scrollSound", PATH }, + { "alignment", STRING }, + { "horizontalMargin", FLOAT }, + { "forceUppercase", BOOLEAN }, + { "lineSpacing", FLOAT }, + { "zIndex", FLOAT } } }, + { "container", { + { "pos", NORMALIZED_PAIR }, + { "size", NORMALIZED_PAIR }, + { "origin", NORMALIZED_PAIR }, + { "zIndex", FLOAT } } }, + { "ninepatch", { + { "pos", NORMALIZED_PAIR }, + { "size", NORMALIZED_PAIR }, + { "path", PATH }, + { "zIndex", FLOAT } } }, + { "datetime", { + { "pos", NORMALIZED_PAIR }, + { "size", NORMALIZED_PAIR }, + { "color", COLOR }, + { "fontPath", PATH }, + { "fontSize", FLOAT }, + { "forceUppercase", BOOLEAN }, + { "zIndex", FLOAT } } }, + { "rating", { + { "pos", NORMALIZED_PAIR }, + { "size", NORMALIZED_PAIR }, + { "origin", NORMALIZED_PAIR }, + { "rotation", FLOAT }, + { "rotationOrigin", NORMALIZED_PAIR }, + { "color", COLOR }, + { "filledPath", PATH }, + { "unfilledPath", PATH }, + { "zIndex", FLOAT } } }, + { "sound", { + { "path", PATH } } }, + { "helpsystem", { + { "pos", NORMALIZED_PAIR }, + { "textColor", COLOR }, + { "iconColor", COLOR }, + { "fontPath", PATH }, + { "fontSize", FLOAT } } }, + { "video", { + { "pos", NORMALIZED_PAIR }, + { "size", NORMALIZED_PAIR }, + { "maxSize", NORMALIZED_PAIR }, + { "origin", NORMALIZED_PAIR }, + { "rotation", FLOAT }, + { "rotationOrigin", NORMALIZED_PAIR }, + { "default", PATH }, + { "delay", FLOAT }, + { "zIndex", FLOAT }, + { "showSnapshotNoVideo", BOOLEAN }, + { "showSnapshotDelay", BOOLEAN } } }, + { "carousel", { + { "type", STRING }, + { "size", NORMALIZED_PAIR }, + { "pos", NORMALIZED_PAIR }, + { "origin", NORMALIZED_PAIR }, + { "color", COLOR }, + { "logoScale", FLOAT }, + { "logoRotation", FLOAT }, + { "logoRotationOrigin", NORMALIZED_PAIR }, + { "logoSize", NORMALIZED_PAIR }, + { "logoAlignment", STRING }, + { "maxLogoCount", FLOAT }, + { "zIndex", FLOAT } } } +}; namespace fs = boost::filesystem; diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index a54cdbf9a4..b1814a681a 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -7,7 +7,6 @@ #include "Log.h" #include "Settings.h" #include "Util.h" -#include #define OFFSET_X 12 // move the entire thing right by this amount (px) #define OFFSET_Y 12 // move the entire thing up by this amount (px) @@ -15,18 +14,19 @@ #define ICON_TEXT_SPACING 8 // space between [icon] and [text] (px) #define ENTRY_SPACING 16 // space between [text] and next [icon] (px) -static const std::map ICON_PATH_MAP = boost::assign::map_list_of - ("up/down", ":/help/dpad_updown.svg") - ("left/right", ":/help/dpad_leftright.svg") - ("up/down/left/right", ":/help/dpad_all.svg") - ("a", ":/help/button_a.svg") - ("b", ":/help/button_b.svg") - ("x", ":/help/button_x.svg") - ("y", ":/help/button_y.svg") - ("l", ":/help/button_l.svg") - ("r", ":/help/button_r.svg") - ("start", ":/help/button_start.svg") - ("select", ":/help/button_select.svg"); +static const std::map ICON_PATH_MAP { + { "up/down", ":/help/dpad_updown.svg" }, + { "left/right", ":/help/dpad_leftright.svg" }, + { "up/down/left/right", ":/help/dpad_all.svg" }, + { "a", ":/help/button_a.svg" }, + { "b", ":/help/button_b.svg" }, + { "x", ":/help/button_x.svg" }, + { "y", ":/help/button_y.svg" }, + { "l", ":/help/button_l.svg" }, + { "r", ":/help/button_r.svg" }, + { "start", ":/help/button_start.svg" }, + { "select", ":/help/button_select.svg" } +}; HelpComponent::HelpComponent(Window* window) : GuiComponent(window) { From 5693e4a20ccc8dcf1b6a6df49355e6e7b67e2064 Mon Sep 17 00:00:00 2001 From: "D. Polders" Date: Fri, 3 Nov 2017 12:11:11 +0100 Subject: [PATCH 193/603] Allow JUMP TO... in case of filtered lists (such as when UIMODE != FULL). Also add support for numbers and some symbols. --- es-app/src/guis/GuiGamelistOptions.cpp | 66 ++++++++++++++++---------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index fc419ea1f2..710df7e3d2 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -18,39 +18,53 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui // check it's not a placeholder folder - if it is, only show "Filter Options" FileData* file = getGamelist()->getCursor(); fromPlaceholder = file->isPlaceHolder(); - bool isFiltered = system->getIndex()->isFiltered(); ComponentListRow row; if (!fromPlaceholder) { + // jump to letter + row.elements.clear(); - if (!isFiltered) { - // jump to letter - row.elements.clear(); - char curChar = toupper(getGamelist()->getCursor()->getName()[0]); - if(curChar < 'A' || curChar > 'Z') - curChar = 'A'; - - mJumpToLetterList = std::make_shared(mWindow, "JUMP TO LETTER", false); - for(char c = 'A'; c <= 'Z'; c++) - mJumpToLetterList->add(std::string(1, c), c, c == curChar); - - row.addElement(std::make_shared(mWindow, "JUMP TO LETTER", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.addElement(mJumpToLetterList, false); - row.input_handler = [&](InputConfig* config, Input input) { - if(config->isMappedTo("a", input) && input.value) - { - jumpToLetter(); - return true; - } - else if(mJumpToLetterList->input(config, input)) + // define supported character range + // this range includes all numbers, capital letters, and most reasonable symbols + char startChar = '!'; + char endChar = '_'; + + char curChar = toupper(getGamelist()->getCursor()->getName()[0]); + if(curChar < startChar || curChar > endChar) + curChar = startChar; + + mJumpToLetterList = std::make_shared(mWindow, "JUMP TO...", false); + for (char c = startChar; c <= endChar; c++) + { + // check if c is a valid first letter in current list + const std::vector& files = getGamelist()->getCursor()->getParent()->getChildrenListToDisplay(); + for (auto file : files) + { + char candidate = toupper(file->getName()[0]); + if (c == candidate) { - return true; + mJumpToLetterList->add(std::string(1, c), c, c == curChar); + break; } - return false; - }; - mMenu.addRow(row); + } } + row.addElement(std::make_shared(mWindow, "JUMP TO...", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(mJumpToLetterList, false); + row.input_handler = [&](InputConfig* config, Input input) { + if(config->isMappedTo("a", input) && input.value) + { + jumpToLetter(); + return true; + } + else if(mJumpToLetterList->input(config, input)) + { + return true; + } + return false; + }; + mMenu.addRow(row); + // sort list by mListSort = std::make_shared(mWindow, "SORT GAMES BY", false); for(unsigned int i = 0; i < FileSorts::SortTypes.size(); i++) @@ -189,7 +203,7 @@ void GuiGamelistOptions::jumpToLetter() IGameListView* gamelist = getGamelist(); // this is a really shitty way to get a list of files - const std::vector& files = gamelist->getCursor()->getParent()->getChildren(); + const std::vector& files = gamelist->getCursor()->getParent()->getChildrenListToDisplay(); long min = 0; long max = files.size() - 1; From 92a3286fc835dc03fb422f15a7f46cac9769c32a Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 4 Nov 2017 17:03:24 +0100 Subject: [PATCH 194/603] Add SystemData::indexAllGameFilters that loops through all added games and add's their tags to the filter indexes This fixes the hidden filtering in Kiosk mode when not using gamelist.xml --- es-app/src/Gamelist.cpp | 8 -------- es-app/src/SystemData.cpp | 16 ++++++++++++++++ es-app/src/SystemData.h | 1 + 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index e1994e9c7b..8581d3329b 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -144,14 +144,6 @@ void parseGamelist(SystemData* system) file->metadata.set("name", defaultName); file->metadata.resetChangedFlag(); - - // index if it's a game! - if(type == GAME) - { - FileFilterIndex* index = system->getIndex(); - index->addToIndex(file); - } - } } } diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 148b91c139..2ee2d7bb54 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -36,6 +36,8 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, Sys parseGamelist(this); mRootFolder->sort(FileSorts::SortTypes.at(0)); + + indexAllGameFilters(mRootFolder); } else { @@ -145,6 +147,20 @@ void SystemData::populateFolder(FileData* folder) } } +void SystemData::indexAllGameFilters(const FileData* folder) +{ + const std::vector& children = folder->getChildren(); + + for(std::vector::const_iterator it = children.begin(); it != children.end(); ++it) + { + switch((*it)->getType()) + { + case GAME: { mFilterIndex->addToIndex(*it); } break; + case FOLDER: { indexAllGameFilters(*it); } break; + } + } +} + std::vector readList(const std::string& str, const char* delims = " \t\r\n,") { std::vector ret; diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index ede8edcd7e..73247f7e8a 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -77,6 +77,7 @@ class SystemData std::shared_ptr mTheme; void populateFolder(FileData* folder); + void indexAllGameFilters(const FileData* folder); void setIsGameSystemStatus(); FileFilterIndex* mFilterIndex; From d25e3b41ea02e59c4b0dd49a163e70d8fe141bca Mon Sep 17 00:00:00 2001 From: pjft Date: Sun, 5 Nov 2017 09:37:41 +0000 Subject: [PATCH 195/603] Fix for Video Screensaver not showing if menu is open --- es-app/src/SystemScreenSaver.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index bdb7e76792..931efcec06 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -98,6 +98,7 @@ void SystemScreenSaver::startScreenSaver() mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); #endif + mVideoScreensaver->topWindow(true); mVideoScreensaver->setOrigin(0.5f, 0.5f); mVideoScreensaver->setPosition(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f); From e37db2c2e02847bf5eb6dcfafa0705caa450e2e1 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sun, 5 Nov 2017 10:26:48 +0000 Subject: [PATCH 196/603] bump version to 2.7.0 --- es-app/src/EmulationStation.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index afc84ef7cf..3947c83193 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -5,13 +5,13 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 6 -#define PROGRAM_VERSION_MAINTENANCE 5 -#define PROGRAM_VERSION_STRING "2.6.5rp" +#define PROGRAM_VERSION_MINOR 7 +#define PROGRAM_VERSION_MAINTENANCE 0 +#define PROGRAM_VERSION_STRING "2.7.0rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,6,5\0" +#define RESOURCE_VERSION_STRING "2,7,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE #endif // ES_APP_EMULATION_STATION_H From dbdf6ed05479c061922b8ec4d9d39ba99c5b1b35 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 6 Nov 2017 11:46:15 +0100 Subject: [PATCH 197/603] Add math/Misc.h --- es-core/src/GuiComponent.h | 3 +- es-core/src/math/Misc.h | 61 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 es-core/src/math/Misc.h diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index ef1352d104..e53f63a15d 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -2,6 +2,7 @@ #ifndef ES_CORE_GUI_COMPONENT_H #define ES_CORE_GUI_COMPONENT_H +#include "math/Misc.h" #include "math/Transform4x4f.h" #include "HelpPrompt.h" #include "HelpStyle.h" @@ -62,7 +63,7 @@ class GuiComponent float getRotation() const; void setRotation(float rotation); - inline void setRotationDegrees(float rotation) { setRotation((float) (rotation * M_PI / 180)); } + inline void setRotationDegrees(float rotation) { setRotation((float)ES_DEG_TO_RAD(rotation)); } float getScale() const; void setScale(float scale); diff --git a/es-core/src/math/Misc.h b/es-core/src/math/Misc.h new file mode 100644 index 0000000000..7796eddf1c --- /dev/null +++ b/es-core/src/math/Misc.h @@ -0,0 +1,61 @@ +#pragma once +#ifndef ES_CORE_MATH_MISC_H +#define ES_CORE_MATH_MISC_H + +#include + +#define ES_PI (3.1415926535897932384626433832795028841971693993751058209749445923) +#define ES_RAD_TO_DEG(x) ((x) * (180.0 / ES_PI)) +#define ES_DEG_TO_RAD(x) ((x) * (ES_PI / 180.0)) + +namespace Math +{ + inline float scroll_bounce(const float delayTime, const float scrollTime, const float currentTime, const int scrollLength) + { + if(currentTime < delayTime) + { + // wait + return 0; + } + else if(currentTime < (delayTime + scrollTime)) + { + // lerp from 0 to scrollLength + const float fraction = (currentTime - delayTime) / scrollTime; + return (float)(((1.0 - cos(ES_PI * fraction)) * 0.5) * scrollLength); + } + else if(currentTime < (delayTime + scrollTime + delayTime)) + { + // wait some more + return scrollLength; + } + else if(currentTime < (delayTime + scrollTime + delayTime + scrollTime)) + { + // lerp back from scrollLength to 0 + const float fraction = 1.0 - (currentTime - delayTime - scrollTime - delayTime) / scrollTime; + return (float)(((1.0 - cos(ES_PI * fraction)) * 0.5) * scrollLength); + } + + // and back to waiting + return 0; + } + + inline float scroll_loop(const float delayTime, const float scrollTime, const float currentTime, const int scrollLength) + { + if(currentTime < delayTime) + { + // wait + return 0; + } + else if(currentTime < (delayTime + scrollTime)) + { + // lerp from 0 to scrollLength + const float fraction = (currentTime - delayTime) / scrollTime; + return fraction * scrollLength; + } + + // and back to waiting + return 0; + } +} + +#endif // ES_CORE_MATH_MISC_H From bc80308effaf327a54eb82ee3e9af1e48f4d55d0 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 6 Nov 2017 12:05:57 +0100 Subject: [PATCH 198/603] Improved long romname text scrolling --- es-app/src/components/TextListComponent.h | 74 ++++++++++++++++------- 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index f33b1f034f..8c539f5544 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -3,6 +3,7 @@ #define ES_APP_COMPONENTS_TEXT_LIST_COMPONENT_H #include "components/IList.h" +#include "math/Misc.h" #include "Log.h" #include "Sound.h" #include "Util.h" @@ -81,11 +82,8 @@ class TextListComponent : public IList virtual void onCursorChanged(const CursorState& state); private: - static const int MARQUEE_DELAY = 1000; - static const int MARQUEE_SPEED = 8; - static const int MARQUEE_RATE = 1; - int mMarqueeOffset; + int mMarqueeOffset2; int mMarqueeTime; Alignment mAlignment; @@ -112,7 +110,8 @@ TextListComponent::TextListComponent(Window* window) : IList(window), mSelectorImage(window) { mMarqueeOffset = 0; - mMarqueeTime = -MARQUEE_DELAY; + mMarqueeOffset2 = 0; + mMarqueeTime = 0; mHorizontalMargin = 0; mAlignment = ALIGN_CENTER; @@ -212,16 +211,29 @@ void TextListComponent::render(const Transform4x4f& parentTrans) offset[0] = mHorizontalMargin; break; } - - if(mCursor == i) - offset[0] -= mMarqueeOffset; - + + // render text Transform4x4f drawTrans = trans; - drawTrans.translate(offset); - Renderer::setMatrix(drawTrans); + // currently selected item text might be scrolling + if((mCursor == i) && (mMarqueeOffset > 0)) + drawTrans.translate(offset - Vector3f(mMarqueeOffset, 0, 0)); + else + drawTrans.translate(offset); + + Renderer::setMatrix(drawTrans); font->renderTextCache(entry.data.textCache.get()); - + + // render currently selected item text again if + // marquee is scrolled far enough for it to repeat + if((mCursor == i) && (mMarqueeOffset2 < 0)) + { + drawTrans = trans; + drawTrans.translate(offset - Vector3f(mMarqueeOffset2, 0, 0)); + Renderer::setMatrix(drawTrans); + font->renderTextCache(entry.data.textCache.get()); + } + y += entrySize; } @@ -277,22 +289,37 @@ template void TextListComponent::update(int deltaTime) { listUpdate(deltaTime); + if(!isScrolling() && size() > 0) { - //if we're not scrolling and this object's text goes outside our size, marquee it! - const std::string& text = mEntries.at((unsigned int)mCursor).name; + // always reset the marquee offsets + mMarqueeOffset = 0; + mMarqueeOffset2 = 0; - Vector2f textSize = mFont->sizeText(text); + // if we're not scrolling and this object's text goes outside our size, marquee it! + const float textLength = mFont->sizeText(mEntries.at((unsigned int)mCursor).name).x(); + const int limit = mSize.x() - mHorizontalMargin * 2; - //it's long enough to marquee - if(textSize.x() - mMarqueeOffset > mSize.x() - 12 - mHorizontalMargin * 2) + if(textLength > limit) { + // loop + // pixels per second ( based on nes-mini font at 1920x1080 to produce a speed of 200 ) + const float speed = mFont->sizeText("ABCDEFGHIJKLMNOPQRSTUVWXYZ").x() * 0.247f; + const int delay = 3000; + const int scrollLength = textLength; + const int returnLength = (int)(speed * 1.5); + const int scrollTime = (int)((scrollLength * 1000) / speed); + const int returnTime = (int)((returnLength * 1000) / speed); + const int maxTime = (delay + scrollTime + returnTime); + mMarqueeTime += deltaTime; - while(mMarqueeTime > MARQUEE_SPEED) - { - mMarqueeOffset += MARQUEE_RATE; - mMarqueeTime -= MARQUEE_SPEED; - } + while(mMarqueeTime > maxTime) + mMarqueeTime -= maxTime; + + mMarqueeOffset = Math::scroll_loop(delay, scrollTime + returnTime, mMarqueeTime, scrollLength + returnLength); + + if(mMarqueeOffset > (scrollLength - (limit - returnLength))) + mMarqueeOffset2 = mMarqueeOffset - (scrollLength + returnLength); } } @@ -316,7 +343,8 @@ template void TextListComponent::onCursorChanged(const CursorState& state) { mMarqueeOffset = 0; - mMarqueeTime = -MARQUEE_DELAY; + mMarqueeOffset2 = 0; + mMarqueeTime = 0; if(mCursorChangedCallback) mCursorChangedCallback(state); From 4d237cea5e880b84adca02ca6063f46ac644278c Mon Sep 17 00:00:00 2001 From: pjft Date: Tue, 7 Nov 2017 23:24:51 +0000 Subject: [PATCH 199/603] Fixing file deletion when present in "My Collections" bundle --- es-app/src/CollectionSystemManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 8233663f19..2a5933fe24 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -304,7 +304,8 @@ void CollectionSystemManager::deleteCollectionFiles(FileData* file) if (found) { sysDataIt->second.needsSave = true; FileData* collectionEntry = children.at(key); - ViewController::get()->getGameListView(sysDataIt->second.system).get()->remove(collectionEntry, false); + SystemData* systemViewToUpdate = getSystemToView(sysDataIt->second.system); + ViewController::get()->getGameListView(systemViewToUpdate).get()->remove(collectionEntry, false); } } } From b833b45832a7ed1a05ab42d458e834c10c2fdde8 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Wed, 8 Nov 2017 17:52:49 +0000 Subject: [PATCH 200/603] bump version to v2.7.1 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 3947c83193..e7537e1c68 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -6,12 +6,12 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 7 -#define PROGRAM_VERSION_MAINTENANCE 0 -#define PROGRAM_VERSION_STRING "2.7.0rp" +#define PROGRAM_VERSION_MAINTENANCE 1 +#define PROGRAM_VERSION_STRING "2.7.1rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,7,0\0" +#define RESOURCE_VERSION_STRING "2,7,1\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE #endif // ES_APP_EMULATION_STATION_H From 074e22ee37bec76327b36cd84a4425953ec7f880 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Wed, 8 Nov 2017 23:22:15 +0100 Subject: [PATCH 201/603] CEC Support --- CMake/Packages/FindlibCEC.cmake | 39 +++++++++ CMakeLists.txt | 22 ++++- es-app/src/main.cpp | 22 +---- es-core/CMakeLists.txt | 2 + es-core/src/CECInput.cpp | 125 +++++++++++++++++++++++++++ es-core/src/CECInput.h | 26 ++++++ es-core/src/InputConfig.cpp | 4 + es-core/src/InputConfig.h | 108 +++++++++++++++++++++++ es-core/src/InputManager.cpp | 40 +++++++++ es-core/src/InputManager.h | 1 + es-core/src/guis/GuiDetectDevice.cpp | 2 +- 11 files changed, 371 insertions(+), 20 deletions(-) create mode 100644 CMake/Packages/FindlibCEC.cmake create mode 100644 es-core/src/CECInput.cpp create mode 100644 es-core/src/CECInput.h diff --git a/CMake/Packages/FindlibCEC.cmake b/CMake/Packages/FindlibCEC.cmake new file mode 100644 index 0000000000..49c0da86a4 --- /dev/null +++ b/CMake/Packages/FindlibCEC.cmake @@ -0,0 +1,39 @@ +# - Try to find libCEC +# Once done, this will define +# +# libCEC_FOUND - system has libCEC +# libCEC_INCLUDE_DIRS - the libCEC include directories +# libCEC_LIBRARIES - link these to use libCEC + +include(FindPkgMacros) +findpkg_begin(libCEC) + +# Get path, convert backslashes as ${ENV_${var}} +getenv_path(LIBCEC_HOME) + +# construct search paths +set(libCEC_PREFIX_PATH ${LIBCEC_HOME} ${ENV_LIBCEC_HOME}) +create_search_paths(LIBCEC) +# redo search if prefix path changed +clear_if_changed(libCEC_PREFIX_PATH + libCEC_LIBRARY_FWK + libCEC_LIBRARY_REL + libCEC_LIBRARY_DBG + libCEC_INCLUDE_DIR +) + +set(libCEC_LIBRARY_NAMES libcec.so) +get_debug_names(libCEC_LIBRARY_NAMES) + +use_pkgconfig(libCEC_PKGC libcec) + +findpkg_framework(libCEC) + +find_path(libCEC_INCLUDE_DIR NAMES cec.h HINTS ${libCEC_INC_SEARCH_PATH} ${libCEC_PKGC_INCLUDE_DIRS}) + +find_library(libCEC_LIBRARY_REL NAMES ${libCEC_LIBRARY_NAMES} HINTS ${libCEC_LIB_SEARCH_PATH} ${libCEC_PKGC_LIBRARY_DIRS} PATH_SUFFIXES release relwithdebinfo minsizerel) +find_library(libCEC_LIBRARY_DBG NAMES ${libCEC_LIBRARY_NAMES_DBG} HINTS ${libCEC_LIB_SEARCH_PATH} ${libCEC_PKGC_LIBRARY_DIRS} PATH_SUFFIXES debug) + +make_library_set(libCEC_LIBRARY) + +findpkg_finish(libCEC) \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e95d34090..b9c7a03f37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,6 +56,7 @@ find_package(Boost REQUIRED COMPONENTS system filesystem date_time) endif() find_package(CURL REQUIRED) find_package(VLC REQUIRED) +find_package(libCEC) #add ALSA for Linux if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") @@ -68,6 +69,10 @@ if(DEFINED BCMHOST) add_definitions(-D_RPI_) endif() +if(DEFINED libCEC_FOUND) + add_definitions(-DHAVE_LIBCEC) +endif() + #------------------------------------------------------------------------------- if(MSVC) @@ -114,6 +119,13 @@ set(COMMON_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/es-core/src ) +#add libCEC_INCLUDE_DIR +if(DEFINED libCEC_FOUND) + LIST(APPEND COMMON_INCLUDE_DIRS + ${libCEC_INCLUDE_DIR} + ) +endif() + #add ALSA for Linux if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") LIST(APPEND COMMON_INCLUDE_DIRS @@ -157,13 +169,21 @@ set(COMMON_LIBRARIES ${Boost_LIBRARIES} ${FREETYPE_LIBRARIES} ${FreeImage_LIBRARIES} - ${SDL2_LIBRARY} + ${SDL2_LIBRARY} ${CURL_LIBRARIES} ${VLC_LIBRARIES} pugixml nanosvg ) +#add libCEC_LIBRARIES +if(DEFINED libCEC_FOUND) + LIST(APPEND COMMON_LIBRARIES + dl + ${libCEC_LIBRARIES} + ) +endif() + #add ALSA for Linux if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") LIST(APPEND COMMON_LIBRARIES diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 68bb91b3b5..e29308cbc7 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -326,24 +326,10 @@ int main(int argc, char* argv[]) { do { - switch(event.type) - { - case SDL_JOYHATMOTION: - case SDL_JOYBUTTONDOWN: - case SDL_JOYBUTTONUP: - case SDL_KEYDOWN: - case SDL_KEYUP: - case SDL_JOYAXISMOTION: - case SDL_TEXTINPUT: - case SDL_TEXTEDITING: - case SDL_JOYDEVICEADDED: - case SDL_JOYDEVICEREMOVED: - InputManager::getInstance()->parseEvent(event, &window); - break; - case SDL_QUIT: - running = false; - break; - } + InputManager::getInstance()->parseEvent(event, &window); + + if(event.type == SDL_QUIT) + running = false; } while(SDL_PollEvent(&event)); // triggered if exiting from SDL_WaitEvent due to event diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 91c945c5fe..fabae068f9 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -3,6 +3,7 @@ project("core") set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/AsyncHandle.h ${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/CECInput.h ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/HelpStyle.h ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.h @@ -66,6 +67,7 @@ set(CORE_HEADERS set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/CECInput.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/GuiComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/HelpStyle.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/HttpReq.cpp diff --git a/es-core/src/CECInput.cpp b/es-core/src/CECInput.cpp new file mode 100644 index 0000000000..ec41d7a43d --- /dev/null +++ b/es-core/src/CECInput.cpp @@ -0,0 +1,125 @@ +#include "CECInput.h" + +#ifdef HAVE_LIBCEC +#include "Log.h" +#include +#include // bad bad cecloader +#include +#include +#endif // HAVE_LIBCEC +#include + +// hack for cec support +extern int SDL_USER_CECBUTTONDOWN; +extern int SDL_USER_CECBUTTONUP; + +CECInput* CECInput::sInstance = nullptr; + +#ifdef HAVE_LIBCEC +static int onAlert(void* /*cbParam*/, const CEC::libcec_alert /*type*/, const CEC::libcec_parameter /*param*/) +{ + return 0; +} + +static int onCommand(void* /*cbParam*/, const CEC::cec_command /*command*/) +{ + return 0; +} + +static int onKeyPress(void* /*cbParam*/, const CEC::cec_keypress key) +{ + SDL_Event event; + event.type = (key.duration > 0) ? SDL_USER_CECBUTTONUP : SDL_USER_CECBUTTONDOWN; + event.user.code = key.keycode; + SDL_PushEvent(&event); + + return 0; +} + +static int onLogMessage(void* /*cbParam*/, const CEC::cec_log_message /*message*/) +{ + return 0; +} +#endif // HAVE_LIBCEC + +void CECInput::init() +{ + assert(!sInstance); + sInstance = new CECInput(); +} + +void CECInput::deinit() +{ + assert(sInstance); + delete sInstance; + sInstance = nullptr; +} + +CECInput::CECInput() : mlibCEC(nullptr) +{ + +#ifdef HAVE_LIBCEC + CEC::ICECCallbacks callbacks; + CEC::libcec_configuration config; + config.Clear(); + callbacks.Clear(); + + sprintf(config.strDeviceName, "RetroPie ES"); + config.clientVersion = CEC::LIBCEC_VERSION_CURRENT; + config.bActivateSource = 0; + config.callbacks = &callbacks; + config.deviceTypes.Add(CEC::CEC_DEVICE_TYPE_PLAYBACK_DEVICE); + + callbacks.CBCecAlert = &onAlert; + callbacks.CBCecCommand = &onCommand; + callbacks.CBCecKeyPress = &onKeyPress; + callbacks.CBCecLogMessage = &onLogMessage; + + mlibCEC = LibCecInitialise(&config); + + if(!mlibCEC) + { + LOG(LogInfo) << "CECInput::LibCecInitialise failed"; + return; + } + + CEC::cec_adapter adapters[10]; + int8_t numAdapters = mlibCEC->FindAdapters(adapters, 10, nullptr); + + if(numAdapters <= 0) + { + LOG(LogInfo) << "CECInput::mAdapter->FindAdapters failed"; + UnloadLibCec(mlibCEC); + mlibCEC = nullptr; + return; + } + + for(int i = 0; i < numAdapters; ++i) + LOG(LogDebug) << "adapter: " << i << " path: " << adapters[i].comm << " comm: " << adapters[i].comm; + + if(!mlibCEC->Open(adapters[0].comm)) + { + LOG(LogInfo) << "CECInput::mAdapter->Open failed"; + UnloadLibCec(mlibCEC); + mlibCEC = nullptr; + return; + } + + LOG(LogDebug) << "CECInput succeeded"; +#endif // HAVE_LIBCEC + +} + +CECInput::~CECInput() +{ + +#ifdef HAVE_LIBCEC + if(mlibCEC) + { + mlibCEC->Close(); + UnloadLibCec(mlibCEC); + mlibCEC = nullptr; + } +#endif // HAVE_LIBCEC + +} diff --git a/es-core/src/CECInput.h b/es-core/src/CECInput.h new file mode 100644 index 0000000000..f19b946eac --- /dev/null +++ b/es-core/src/CECInput.h @@ -0,0 +1,26 @@ +#pragma once +#ifndef ES_CORE_CECINPUT_H +#define ES_CORE_CECINPUT_H + +namespace CEC { class ICECAdapter; } +class Window; + +class CECInput +{ +public: + + ~CECInput(); + + static void init(); + static void deinit(); + +private: + + CECInput(); + static CECInput* sInstance; + + CEC::ICECAdapter* mlibCEC; + +}; + +#endif // ES_CORE_CECINPUT_H diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index 23c6dd6ce5..ea141ce675 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -15,6 +15,8 @@ std::string inputTypeToString(InputType type) return "hat"; case TYPE_KEY: return "key"; + case TYPE_CEC_BUTTON: + return "cec-button"; default: return "error"; } @@ -30,6 +32,8 @@ InputType stringToInputType(const std::string& type) return TYPE_HAT; if(type == "key") return TYPE_KEY; + if(type == "cec-button") + return TYPE_CEC_BUTTON; return TYPE_COUNT; } diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index d3d0be99e7..e217715cc2 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -2,6 +2,9 @@ #ifndef ES_CORE_INPUT_CONFIG_H #define ES_CORE_INPUT_CONFIG_H +#ifdef HAVE_LIBCEC +#include +#endif // HAVE_LIBCEC #include #include #include @@ -10,6 +13,7 @@ #include #define DEVICE_KEYBOARD -1 +#define DEVICE_CEC -2 enum InputType { @@ -17,6 +21,7 @@ enum InputType TYPE_BUTTON, TYPE_HAT, TYPE_KEY, + TYPE_CEC_BUTTON, TYPE_COUNT }; @@ -55,6 +60,106 @@ struct Input return "neutral?"; } + std::string getCECButtonName(int keycode) + { + +#ifdef HAVE_LIBCEC + switch(keycode) + { + case CEC::CEC_USER_CONTROL_CODE_SELECT: { return "Select"; } break; + case CEC::CEC_USER_CONTROL_CODE_UP: { return "Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_DOWN: { return "Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_LEFT: { return "Left"; } break; + case CEC::CEC_USER_CONTROL_CODE_RIGHT: { return "Right"; } break; + case CEC::CEC_USER_CONTROL_CODE_RIGHT_UP: { return "Right-Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_RIGHT_DOWN: { return "Left-Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_LEFT_UP: { return "Left-Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_LEFT_DOWN: { return "Left-Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_ROOT_MENU: { return "Root-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_SETUP_MENU: { return "Setup-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_CONTENTS_MENU: { return "Contents-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_FAVORITE_MENU: { return "Favorite-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_EXIT: { return "Exit"; } break; + case CEC::CEC_USER_CONTROL_CODE_TOP_MENU: { return "Top-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_DVD_MENU: { return "DVD-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER_ENTRY_MODE: { return "Number-Entry-Mode"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER11: { return "Number 11"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER12: { return "Number 12"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER0: { return "Number 0"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER1: { return "Number 1"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER2: { return "Number 2"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER3: { return "Number 3"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER4: { return "Number 4"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER5: { return "Number 5"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER6: { return "Number 6"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER7: { return "Number 7"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER8: { return "Number 8"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER9: { return "Number 9"; } break; + case CEC::CEC_USER_CONTROL_CODE_DOT: { return "Dot"; } break; + case CEC::CEC_USER_CONTROL_CODE_ENTER: { return "Enter"; } break; + case CEC::CEC_USER_CONTROL_CODE_CLEAR: { return "Clear"; } break; + case CEC::CEC_USER_CONTROL_CODE_NEXT_FAVORITE: { return "Next-Favorite"; } break; + case CEC::CEC_USER_CONTROL_CODE_CHANNEL_UP: { return "Channel-Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_CHANNEL_DOWN: { return "Channel-Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL: { return "Previous-Channel"; } break; + case CEC::CEC_USER_CONTROL_CODE_SOUND_SELECT: { return "Sound-Select"; } break; + case CEC::CEC_USER_CONTROL_CODE_INPUT_SELECT: { return "Input-Select"; } break; + case CEC::CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION: { return "Display-Information"; } break; + case CEC::CEC_USER_CONTROL_CODE_HELP: { return "Help"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAGE_UP: { return "Page-Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAGE_DOWN: { return "Page-Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_POWER: { return "Power"; } break; + case CEC::CEC_USER_CONTROL_CODE_VOLUME_UP: { return "Volume-Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_VOLUME_DOWN: { return "Volume-Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_MUTE: { return "Mute"; } break; + case CEC::CEC_USER_CONTROL_CODE_PLAY: { return "Play"; } break; + case CEC::CEC_USER_CONTROL_CODE_STOP: { return "Stop"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAUSE: { return "Pause"; } break; + case CEC::CEC_USER_CONTROL_CODE_RECORD: { return "Record"; } break; + case CEC::CEC_USER_CONTROL_CODE_REWIND: { return "Rewind"; } break; + case CEC::CEC_USER_CONTROL_CODE_FAST_FORWARD: { return "Fast-Forward"; } break; + case CEC::CEC_USER_CONTROL_CODE_EJECT: { return "Eject"; } break; + case CEC::CEC_USER_CONTROL_CODE_FORWARD: { return "Forward"; } break; + case CEC::CEC_USER_CONTROL_CODE_BACKWARD: { return "Backward"; } break; + case CEC::CEC_USER_CONTROL_CODE_STOP_RECORD: { return "Stop-Record"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAUSE_RECORD: { return "Pause-Record"; } break; + case CEC::CEC_USER_CONTROL_CODE_ANGLE: { return "Angle"; } break; + case CEC::CEC_USER_CONTROL_CODE_SUB_PICTURE: { return "Sub-Picture"; } break; + case CEC::CEC_USER_CONTROL_CODE_VIDEO_ON_DEMAND: { return "Video-On-Demand"; } break; + case CEC::CEC_USER_CONTROL_CODE_ELECTRONIC_PROGRAM_GUIDE: { return "Electronic-Program-Guide"; } break; + case CEC::CEC_USER_CONTROL_CODE_TIMER_PROGRAMMING: { return "Timer-Programming"; } break; + case CEC::CEC_USER_CONTROL_CODE_INITIAL_CONFIGURATION: { return "Initial-Configuration"; } break; + case CEC::CEC_USER_CONTROL_CODE_SELECT_BROADCAST_TYPE: { return "Select-Broadcast-Type"; } break; + case CEC::CEC_USER_CONTROL_CODE_SELECT_SOUND_PRESENTATION: { return "Select-Sound-Presentation"; } break; + case CEC::CEC_USER_CONTROL_CODE_PLAY_FUNCTION: { return "Play-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION: { return "Pause-Play-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_RECORD_FUNCTION: { return "Record-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAUSE_RECORD_FUNCTION: { return "Pause-Record-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_STOP_FUNCTION: { return "Stop-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_MUTE_FUNCTION: { return "Mute-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_RESTORE_VOLUME_FUNCTION: { return "Restore-Volume-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_TUNE_FUNCTION: { return "Tune-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_SELECT_MEDIA_FUNCTION: { return "Select-Media-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_SELECT_AV_INPUT_FUNCTION: { return "Select-AV-Input-function"; } break; + case CEC::CEC_USER_CONTROL_CODE_SELECT_AUDIO_INPUT_FUNCTION: { return "Select-Audio-Input-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_POWER_TOGGLE_FUNCTION: { return "Power-Toggle-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_POWER_OFF_FUNCTION: { return "Power-Off-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION: { return "Power-On-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_F1_BLUE: { return "F1-Blue"; } break; + case CEC::CEC_USER_CONTROL_CODE_F2_RED: { return "F2-Red"; } break; + case CEC::CEC_USER_CONTROL_CODE_F3_GREEN: { return "F3-Green"; } break; + case CEC::CEC_USER_CONTROL_CODE_F4_YELLOW: { return "F4-Yellow"; } break; + case CEC::CEC_USER_CONTROL_CODE_F5: { return "F5"; } break; + case CEC::CEC_USER_CONTROL_CODE_DATA: { return "Data"; } break; + case CEC::CEC_USER_CONTROL_CODE_AN_RETURN: { return "AN-Return"; } break; + case CEC::CEC_USER_CONTROL_CODE_AN_CHANNELS_LIST: { return "AN-Channels-List"; } break; + default: { return "UNKNOWN"; } + } +#endif // HAVE_LIBCEC + + return "UNKNOWN"; + } + std::string string() { std::stringstream stream; @@ -72,6 +177,9 @@ struct Input case TYPE_KEY: stream << "Key " << SDL_GetKeyName((SDL_Keycode)id); break; + case TYPE_CEC_BUTTON: + stream << "CEC-Button " << getCECButtonName(id); + break; default: stream << "Input to string error"; break; diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index f102c49119..b148f57455 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -1,5 +1,6 @@ #include "InputManager.h" +#include "CECInput.h" #include "Log.h" #include "platform.h" #include "Window.h" @@ -8,6 +9,7 @@ #include #define KEYBOARD_GUID_STRING "-1" +#define CEC_GUID_STRING "-2" // SO HEY POTENTIAL POOR SAP WHO IS TRYING TO MAKE SENSE OF ALL THIS (by which I mean my future self) // There are like four distinct IDs used for joysticks (crazy, right?) @@ -20,6 +22,10 @@ // 4. Joystick GUID - this is some squashed version of joystick vendor, version, and a bunch of other device-specific things. // It should remain the same across runs of the program/system restarts/device reordering and is what I use to identify which joystick to load. +// hack for cec support +int SDL_USER_CECBUTTONDOWN = -1; +int SDL_USER_CECBUTTONUP = -1; + namespace fs = boost::filesystem; InputManager* InputManager::mInstance = NULL; @@ -60,6 +66,12 @@ void InputManager::init() mKeyboardInputConfig = new InputConfig(DEVICE_KEYBOARD, "Keyboard", KEYBOARD_GUID_STRING); loadInputConfig(mKeyboardInputConfig); + + SDL_USER_CECBUTTONDOWN = SDL_RegisterEvents(2); + SDL_USER_CECBUTTONUP = SDL_USER_CECBUTTONDOWN + 1; + CECInput::init(); + mCECInputConfig = new InputConfig(DEVICE_CEC, "CEC", CEC_GUID_STRING); + loadInputConfig(mCECInputConfig); } void InputManager::addJoystickByDeviceIndex(int id) @@ -146,6 +158,14 @@ void InputManager::deinit() mKeyboardInputConfig = NULL; } + if(mCECInputConfig != NULL) + { + delete mCECInputConfig; + mCECInputConfig = NULL; + } + + CECInput::deinit(); + SDL_JoystickEventState(SDL_DISABLE); SDL_QuitSubSystem(SDL_INIT_JOYSTICK); } @@ -155,6 +175,12 @@ int InputManager::getButtonCountByDevice(SDL_JoystickID id) { if(id == DEVICE_KEYBOARD) return 120; //it's a lot, okay. + else if(id == DEVICE_CEC) +#ifdef HAVE_CECLIB + return CEC::CEC_USER_CONTROL_CODE_MAX; +#else // HAVE_LIBCEF + return 0; +#endif // HAVE_CECLIB else return SDL_JoystickNumButtons(mJoysticks[id]); } @@ -163,6 +189,8 @@ InputConfig* InputManager::getInputConfigByDevice(int device) { if(device == DEVICE_KEYBOARD) return mKeyboardInputConfig; + else if(device == DEVICE_CEC) + return mCECInputConfig; else return mInputConfigs[device]; } @@ -238,6 +266,12 @@ bool InputManager::parseEvent(const SDL_Event& ev, Window* window) return false; } + if((ev.type == (unsigned int)SDL_USER_CECBUTTONDOWN) || (ev.type == (unsigned int)SDL_USER_CECBUTTONUP)) + { + window->input(getInputConfigByDevice(DEVICE_CEC), Input(DEVICE_CEC, TYPE_CEC_BUTTON, ev.user.code, ev.type == (unsigned int)SDL_USER_CECBUTTONDOWN, false)); + return true; + } + return false; } @@ -427,6 +461,9 @@ int InputManager::getNumConfiguredDevices() if(mKeyboardInputConfig->isConfigured()) num++; + if(mCECInputConfig->isConfigured()) + num++; + return num; } @@ -435,6 +472,9 @@ std::string InputManager::getDeviceGUIDString(int deviceId) if(deviceId == DEVICE_KEYBOARD) return KEYBOARD_GUID_STRING; + if(deviceId == DEVICE_CEC) + return CEC_GUID_STRING; + auto it = mJoysticks.find(deviceId); if(it == mJoysticks.end()) { diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index 6d24c0f4b4..fde96f0921 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -24,6 +24,7 @@ class InputManager std::map mJoysticks; std::map mInputConfigs; InputConfig* mKeyboardInputConfig; + InputConfig* mCECInputConfig; std::map mPrevAxisValues; diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index 8aa263cd81..7f7ed06d51 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -80,7 +80,7 @@ bool GuiDetectDevice::input(InputConfig* config, Input input) return true; } - if(input.type == TYPE_BUTTON || input.type == TYPE_KEY) + if(input.type == TYPE_BUTTON || input.type == TYPE_KEY ||input.type == TYPE_CEC_BUTTON) { if(input.value && mHoldingConfig == NULL) { From df7ef94462469acdc2b34aed6637719bc1c339bd Mon Sep 17 00:00:00 2001 From: "D. Polders" Date: Thu, 9 Nov 2017 21:51:46 +0100 Subject: [PATCH 202/603] Add confirmation popup when changing to UI mode Kid or Kiosk. --- es-app/src/guis/GuiMenu.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index b99ea8eea7..174d4d141d 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -166,10 +166,23 @@ void GuiMenu::openUISettings() UImodeSelection->add(*it, *it, Settings::getInstance()->getString("UIMode") == *it); s->addWithLabel("UI MODE", UImodeSelection); Window* window = mWindow; - s->addSaveFunc([UImodeSelection, window] + s->addSaveFunc([ UImodeSelection, window] { - LOG(LogDebug) << "Setting UI mode to" << UImodeSelection->getSelected(); - Settings::getInstance()->setString("UIMode", UImodeSelection->getSelected()); + std::string selectedMode = UImodeSelection->getSelected(); + if (selectedMode != "Full") + { + std::string msg = "You are changing the UI to a restricted mode:\n" + selectedMode + "\n"; + msg += "This will hide most menu-options to prevent changes to the system.\n"; + msg += "To unlock and return to the full UI, enter this code: \n"; + msg += "Up, up, down, down, left, right, left, right, B, A. \n\n"; + msg += "Do you want to proceed?"; + + window->pushGui(new GuiMsgBox(window, msg, "YES", + [selectedMode] { + LOG(LogDebug) << "Setting UI mode to" << selectedMode; + Settings::getInstance()->setString("UIMode", selectedMode); + }, "NO", nullptr)); + } }); // screensaver From c66194e9c610c67f046f60f0e0075e438f717712 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 9 Nov 2017 23:08:51 +0100 Subject: [PATCH 203/603] Trying to fix japanese text --- es-app/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 68bb91b3b5..1be119e9e2 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -185,7 +185,7 @@ int main(int argc, char* argv[]) unsigned int width = 0; unsigned int height = 0; - std::locale::global(std::locale(std::locale(""), "C", std::locale::numeric)); + std::locale::global(std::locale("C")); boost::filesystem::path::imbue(std::locale()); if(!parseArgs(argc, argv, &width, &height)) From 232f36f8666637ed12942326ceeffc2d13f6e84b Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 10 Nov 2017 19:48:23 +0100 Subject: [PATCH 204/603] Implement StringUtil which has stolen some functions from Font and added unicode2Chars --- es-core/src/StringUtil.h | 136 ++++++++++++++++ es-core/src/components/TextComponent.cpp | 3 +- es-core/src/components/TextEditComponent.cpp | 5 +- es-core/src/resources/Font.cpp | 156 ++----------------- es-core/src/resources/Font.h | 14 +- 5 files changed, 160 insertions(+), 154 deletions(-) create mode 100644 es-core/src/StringUtil.h diff --git a/es-core/src/StringUtil.h b/es-core/src/StringUtil.h new file mode 100644 index 0000000000..a7f8f84e3f --- /dev/null +++ b/es-core/src/StringUtil.h @@ -0,0 +1,136 @@ +#pragma once +#ifndef ES_CORE_STRING_UTIL_H +#define ES_CORE_STRING_UTIL_H + +namespace StringUtil +{ + inline unsigned int chars2Unicode(const std::string& _string, size_t& _cursor) + { + const char& c = _string[_cursor]; + unsigned int result = '?'; + + if((c & 0x80) == 0) // 0xxxxxxx, one byte character + { + // 0xxxxxxx + result = ((_string[_cursor++] ) ); + } + else if((c & 0xE0) == 0xC0) // 110xxxxx, two byte character + { + // 110xxxxx 10xxxxxx + result = ((_string[_cursor++] & 0x1F) << 6) | + ((_string[_cursor++] & 0x3F) ); + } + else if((c & 0xF0) == 0xE0) // 1110xxxx, three byte character + { + // 1110xxxx 10xxxxxx 10xxxxxx + result = ((_string[_cursor++] & 0x0F) << 12) | + ((_string[_cursor++] & 0x3F) << 6) | + ((_string[_cursor++] & 0x3F) ); + } + else if((c & 0xF8) == 0xF0) // 11110xxx, four byte character + { + // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + result = ((_string[_cursor++] & 0x07) << 18) | + ((_string[_cursor++] & 0x3F) << 12) | + ((_string[_cursor++] & 0x3F) << 6) | + ((_string[_cursor++] & 0x3F) ); + } + else + { + // error, invalid unicode + ++_cursor; + } + + return result; + + } // chars2Unicode + + inline std::string unicode2Chars(const unsigned int _unicode) + { + std::string result; + + if(_unicode < 0x80) // one byte character + { + result += ((_unicode ) ); + } + else if(_unicode < 0x800) // two byte character + { + result += ((_unicode >> 6) ) | 0xC0; + result += ((_unicode ) & 0x3F) | 0x80; + } + else if(_unicode < 0xFFFF) // three byte character + { + result += ((_unicode >> 12) ) | 0xE0; + result += ((_unicode >> 6) & 0x3F) | 0x80; + result += ((_unicode ) & 0x3F) | 0x80; + } + else if(_unicode <= 0x1fffff) // four byte character + { + result += ((_unicode >> 18) ) | 0xF0; + result += ((_unicode >> 12) & 0x3F) | 0x80; + result += ((_unicode >> 6) & 0x3F) | 0x80; + result += ((_unicode ) & 0x3F) | 0x80; + } + else + { + // error, invalid unicode + result += '?'; + } + + return result; + + } // unicode2Chars + + inline size_t nextCursor(const std::string& _string, const size_t _cursor) + { + size_t result = _cursor; + + while(result < _string.length()) + { + ++result; + + if((_string[result] & 0xC0) != 0x80) // break if current character is not 10xxxxxx + break; + } + + return result; + + } // nextCursor + + inline size_t prevCursor(const std::string& _string, const size_t _cursor) + { + size_t result = _cursor; + + while(result > 0) + { + --result; + + if((_string[result] & 0xC0) != 0x80) // break if current character is not 10xxxxxx + break; + } + + return result; + + } // prevCursor + + inline size_t moveCursor(const std::string& _string, const size_t _cursor, const int _amount) + { + size_t result = _cursor; + + if(_amount > 0) + { + for(int i = 0; i < _amount; ++i) + result = nextCursor(_string, result); + } + else if(_amount < 0) + { + for(int i = _amount; i < 0; ++i) + result = prevCursor(_string, result); + } + + return result; + + } // moveCursor +} + +#endif // ES_CORE_STRING_UTIL_H diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index 633d939d6d..f7885139e6 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -3,6 +3,7 @@ #include "Log.h" #include "Renderer.h" #include "Settings.h" +#include "StringUtil.h" #include "Util.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), @@ -197,7 +198,7 @@ void TextComponent::onTextChanged() while(text.size() && size.x() + abbrevSize.x() > mSize.x()) { - size_t newSize = Font::getPrevCursor(text, text.size()); + size_t newSize = StringUtil::prevCursor(text, text.size()); text.erase(newSize, text.size() - newSize); size = f->sizeText(text); } diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index 2fb4f16c42..758b1aef9d 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -2,6 +2,7 @@ #include "resources/Font.h" #include "Renderer.h" +#include "StringUtil.h" #define TEXT_PADDING_HORIZ 10 #define TEXT_PADDING_VERT 2 @@ -59,7 +60,7 @@ void TextEditComponent::textInput(const char* text) { if(mCursor > 0) { - size_t newCursor = Font::getPrevCursor(mText, mCursor); + size_t newCursor = StringUtil::prevCursor(mText, mCursor); mText.erase(mText.begin() + newCursor, mText.begin() + mCursor); mCursor = newCursor; } @@ -190,7 +191,7 @@ void TextEditComponent::updateCursorRepeat(int deltaTime) void TextEditComponent::moveCursor(int amt) { - mCursor = Font::moveCursor(mText, mCursor, amt); + mCursor = StringUtil::moveCursor(mText, mCursor, amt); onCursorChanged(); } diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index 4b88d9d76d..5b7ef4128a 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -2,6 +2,7 @@ #include "Log.h" #include "Renderer.h" +#include "StringUtil.h" #include "Util.h" FT_Library Font::sLibrary = NULL; @@ -10,130 +11,6 @@ int Font::getSize() const { return mSize; } std::map< std::pair, std::weak_ptr > Font::sFontMap; - -// utf8 stuff -size_t Font::getNextCursor(const std::string& str, size_t cursor) -{ - // compare to character at the cursor - const char& c = str[cursor]; - - size_t result = cursor; - if((c & 0x80) == 0) // 0xxxxxxx, one byte character - { - result += 1; - } - else if((c & 0xE0) == 0xC0) // 110xxxxx, two bytes left in character - { - result += 2; - } - else if((c & 0xF0) == 0xE0) // 1110xxxx, three bytes left in character - { - result += 3; - } - else if((c & 0xF8) == 0xF0) // 11110xxx, four bytes left in character - { - result += 4; - } - else - { - // error, invalid utf8 string - - // if this assert is tripped, the cursor is in the middle of a utf8 code point - assert((c & 0xC0) != 0x80); // character is 10xxxxxx - - // if that wasn't it, something crazy happened - assert(false); - } - - if(str.length() < result || result < cursor) // don't go beyond the very end of the string, try and catch overflow - return cursor; - return result; -} - -// note: will happily accept malformed utf8 -size_t Font::getPrevCursor(const std::string& str, size_t cursor) -{ - if(cursor == 0) - return 0; - - do - { - cursor--; - } while(cursor > 0 && - (str[cursor] & 0xC0) == 0x80); // character is 10xxxxxx - - return cursor; -} - -size_t Font::moveCursor(const std::string& str, size_t cursor, int amt) -{ - if(amt > 0) - { - for(int i = 0; i < amt; i++) - cursor = Font::getNextCursor(str, cursor); - } - else if(amt < 0) - { - for(int i = amt; i < 0; i++) - cursor = Font::getPrevCursor(str, cursor); - } - - return cursor; -} - -UnicodeChar Font::readUnicodeChar(const std::string& str, size_t& cursor) -{ - const char& c = str[cursor]; - - if((c & 0x80) == 0) // 0xxxxxxx, one byte character - { - // 0xxxxxxx - cursor++; - return (UnicodeChar)c; - } - else if((c & 0xE0) == 0xC0) // 110xxxxx, two bytes left in character - { - // 110xxxxx 10xxxxxx - UnicodeChar val = ((str[cursor] & 0x1F) << 6) | - (str[cursor + 1] & 0x3F); - cursor += 2; - return val; - } - else if((c & 0xF0) == 0xE0) // 1110xxxx, three bytes left in character - { - // 1110xxxx 10xxxxxx 10xxxxxx - UnicodeChar val = ((str[cursor] & 0x0F) << 12) | - ((str[cursor + 1] & 0x3F) << 6) | - (str[cursor + 2] & 0x3F); - cursor += 3; - return val; - } - else if((c & 0xF8) == 0xF0) // 11110xxx, four bytes left in character - { - // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - UnicodeChar val = ((str[cursor] & 0x07) << 18) | - ((str[cursor + 1] & 0x3F) << 12) | - ((str[cursor + 2] & 0x3F) << 6) | - (str[cursor + 3] & 0x3F); - cursor += 4; - return val; - } - else - { - // error, invalid utf8 string - - // if this assert is tripped, the cursor is in the middle of a utf8 code point - assert((c & 0xC0) != 0x80); // character is 10xxxxxx - - // if that wasn't it, something crazy happened - assert(false); - } - - // error - return 0; -} - - Font::FontFace::FontFace(ResourceData&& d, int size) : data(d) { int err = FT_New_Memory_Face(sLibrary, data.ptr.get(), data.length, 0, &face); @@ -201,7 +78,7 @@ Font::Font(int size, const std::string& path) : mSize(size), mPath(path) initLibrary(); // always initialize ASCII characters - for(UnicodeChar i = 32; i < 128; i++) + for(unsigned int i = 32; i < 128; i++) getGlyph(i); clearFaceCache(); @@ -398,7 +275,7 @@ std::vector getFallbackFontPaths() #endif } -FT_Face Font::getFaceForChar(UnicodeChar id) +FT_Face Font::getFaceForChar(unsigned int id) { static const std::vector fallbackFonts = getFallbackFontPaths(); @@ -430,7 +307,7 @@ void Font::clearFaceCache() mFaceCache.clear(); } -Font::Glyph* Font::getGlyph(UnicodeChar id) +Font::Glyph* Font::getGlyph(unsigned int id) { // is it already loaded? auto it = mGlyphMap.find(id); @@ -571,9 +448,9 @@ Vector2f Font::sizeText(std::string text, float lineSpacing) size_t i = 0; while(i < text.length()) { - UnicodeChar character = readUnicodeChar(text, i); // advances i + unsigned int character = StringUtil::chars2Unicode(text, i); // advances i - if(character == (UnicodeChar)'\n') + if(character == '\n') { if(lineWidth > highestWidth) highestWidth = lineWidth; @@ -600,7 +477,7 @@ float Font::getHeight(float lineSpacing) const float Font::getLetterHeight() { - Glyph* glyph = getGlyph((UnicodeChar)'S'); + Glyph* glyph = getGlyph('S'); assert(glyph); return glyph->texSize.y() * glyph->texture->textureSize.y(); } @@ -664,21 +541,21 @@ Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, size_t s size_t cursor = 0; while(cursor < stop) { - UnicodeChar wrappedCharacter = readUnicodeChar(wrappedText, wrapCursor); - UnicodeChar character = readUnicodeChar(text, cursor); + unsigned int wrappedCharacter = StringUtil::chars2Unicode(wrappedText, wrapCursor); + unsigned int character = StringUtil::chars2Unicode(text, cursor); - if(wrappedCharacter == (UnicodeChar)'\n' && character != (UnicodeChar)'\n') + if(wrappedCharacter == '\n' && character != '\n') { //this is where the wordwrap inserted a newline //reset lineWidth and increment y, but don't consume a cursor character lineWidth = 0.0f; y += getHeight(lineSpacing); - cursor = getPrevCursor(text, cursor); // unconsume + cursor = StringUtil::prevCursor(text, cursor); // unconsume continue; } - if(character == (UnicodeChar)'\n') + if(character == '\n') { lineWidth = 0.0f; y += getHeight(lineSpacing); @@ -727,7 +604,7 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign { float x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, 0, xLen, alignment) : 0); - float yTop = getGlyph((UnicodeChar)'S')->bearing.y(); + float yTop = getGlyph('S')->bearing.y(); float yBot = getHeight(lineSpacing); float y = offset[1] + (yBot + yTop)/2.0f; @@ -735,17 +612,16 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign std::map< FontTexture*, std::vector > vertMap; size_t cursor = 0; - UnicodeChar character; - Glyph* glyph; while(cursor < text.length()) { - character = readUnicodeChar(text, cursor); // also advances cursor + unsigned int character = StringUtil::chars2Unicode(text, cursor); // also advances cursor + Glyph* glyph; // invalid character if(character == 0) continue; - if(character == (UnicodeChar)'\n') + if(character == '\n') { y += getHeight(lineSpacing); x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, cursor /* cursor is already advanced */, xLen, alignment) : 0); diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index acf55ca7e6..e24f7313c3 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -21,8 +21,6 @@ class TextCache; #define FONT_PATH_LIGHT ":/opensans_hebrew_condensed_light.ttf" #define FONT_PATH_REGULAR ":/opensans_hebrew_condensed_regular.ttf" -typedef unsigned long UnicodeChar; - enum Alignment { ALIGN_LEFT, @@ -68,12 +66,6 @@ class Font : public IReloadable size_t getMemUsage() const; // returns an approximation of VRAM used by this font's texture (in bytes) static size_t getTotalMemUsage(); // returns an approximation of total VRAM used by font textures (in bytes) - // utf8 stuff - static size_t getNextCursor(const std::string& str, size_t cursor); - static size_t getPrevCursor(const std::string& str, size_t cursor); - static size_t moveCursor(const std::string& str, size_t cursor, int moveAmt); // negative moveAmt = move backwards, positive = move forwards - static UnicodeChar readUnicodeChar(const std::string& str, size_t& cursor); // reads unicode character at cursor AND moves cursor to the next valid unicode char - private: static FT_Library sLibrary; static std::map< std::pair, std::weak_ptr > sFontMap; @@ -114,7 +106,7 @@ class Font : public IReloadable void getTextureForNewGlyph(const Vector2i& glyphSize, FontTexture*& tex_out, Vector2i& cursor_out); std::map< unsigned int, std::unique_ptr > mFaceCache; - FT_Face getFaceForChar(UnicodeChar id); + FT_Face getFaceForChar(unsigned int id); void clearFaceCache(); struct Glyph @@ -128,9 +120,9 @@ class Font : public IReloadable Vector2f bearing; }; - std::map mGlyphMap; + std::map mGlyphMap; - Glyph* getGlyph(UnicodeChar id); + Glyph* getGlyph(unsigned int id); int mMaxGlyphHeight; From 7719bff8aedae6be86b373c1be29228ef1af25f7 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 10 Nov 2017 20:16:42 +0100 Subject: [PATCH 205/603] Clean up pugixml.hpp includes --- es-app/src/CollectionSystemManager.cpp | 1 + es-app/src/Gamelist.cpp | 1 + es-app/src/MetaData.cpp | 5 +++-- es-app/src/MetaData.h | 7 ++++--- es-app/src/SystemData.cpp | 1 + es-app/src/SystemScreenSaver.cpp | 1 + es-app/src/scrapers/GamesDBScraper.cpp | 1 + es-core/src/InputConfig.cpp | 5 +++-- es-core/src/InputConfig.h | 7 ++++--- es-core/src/InputManager.cpp | 1 + es-core/src/ThemeData.cpp | 1 + es-core/src/ThemeData.h | 3 ++- 12 files changed, 23 insertions(+), 11 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 2a5933fe24..536a445ff8 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 8581d3329b..53c29ecdbc 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -8,6 +8,7 @@ #include "Util.h" #include #include +#include namespace fs = boost::filesystem; diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 5c6fb7f25c..7f96a8c806 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -3,6 +3,7 @@ #include "Log.h" #include "Util.h" #include +#include namespace fs = boost::filesystem; @@ -69,7 +70,7 @@ MetaDataList::MetaDataList(MetaDataListType type) } -MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node node, const fs::path& relativeTo) +MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node& node, const fs::path& relativeTo) { MetaDataList mdl(type); @@ -95,7 +96,7 @@ MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node n return mdl; } -void MetaDataList::appendToXML(pugi::xml_node parent, bool ignoreDefaults, const fs::path& relativeTo) const +void MetaDataList::appendToXML(pugi::xml_node& parent, bool ignoreDefaults, const fs::path& relativeTo) const { const std::vector& mdd = getMDD(); diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 0fe4a9cc00..57fd26b7e3 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -4,7 +4,8 @@ #include #include -#include + +namespace pugi { class xml_node; } enum MetaDataType { @@ -43,8 +44,8 @@ const std::vector& getMDDByType(MetaDataListType type); class MetaDataList { public: - static MetaDataList createFromXML(MetaDataListType type, pugi::xml_node node, const boost::filesystem::path& relativeTo); - void appendToXML(pugi::xml_node parent, bool ignoreDefaults, const boost::filesystem::path& relativeTo) const; + static MetaDataList createFromXML(MetaDataListType type, pugi::xml_node& node, const boost::filesystem::path& relativeTo); + void appendToXML(pugi::xml_node& parent, bool ignoreDefaults, const boost::filesystem::path& relativeTo) const; MetaDataList(MetaDataListType type); diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 2ee2d7bb54..620d334b19 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -9,6 +9,7 @@ #include "Settings.h" #include "ThemeData.h" #include +#include #include #ifdef WIN32 #include diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 931efcec06..3dc23abb1b 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -15,6 +15,7 @@ #include "SystemData.h" #include "Util.h" #include +#include #include #define FADE_TIME 300 diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 77c98ccccd..c265ce267a 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -6,6 +6,7 @@ #include "Settings.h" #include "SystemData.h" #include "Util.h" +#include using namespace PlatformIds; const std::map gamesdb_platformid_map { diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index ea141ce675..5323fbc588 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -1,6 +1,7 @@ #include "InputConfig.h" #include "Log.h" +#include //some util functions std::string inputTypeToString(InputType type) @@ -146,7 +147,7 @@ std::vector InputConfig::getMappedTo(Input input) return maps; } -void InputConfig::loadFromXML(pugi::xml_node node) +void InputConfig::loadFromXML(pugi::xml_node& node) { clear(); @@ -172,7 +173,7 @@ void InputConfig::loadFromXML(pugi::xml_node node) } } -void InputConfig::writeToXML(pugi::xml_node parent) +void InputConfig::writeToXML(pugi::xml_node& parent) { pugi::xml_node cfg = parent.append_child("inputConfig"); diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index e217715cc2..b1bd3c4e59 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -5,13 +5,14 @@ #ifdef HAVE_LIBCEC #include #endif // HAVE_LIBCEC -#include #include #include #include #include #include +namespace pugi { class xml_node; } + #define DEVICE_KEYBOARD -1 #define DEVICE_CEC -2 @@ -212,8 +213,8 @@ class InputConfig // Writes Input mapped to this name to result if true. bool getInputByName(const std::string& name, Input* result); - void loadFromXML(pugi::xml_node root); - void writeToXML(pugi::xml_node parent); + void loadFromXML(pugi::xml_node& root); + void writeToXML(pugi::xml_node& parent); bool isConfigured(); diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index b148f57455..4eeda88ad9 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -5,6 +5,7 @@ #include "platform.h" #include "Window.h" #include +#include #include #include diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index d25987b673..830f972524 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -7,6 +7,7 @@ #include "Settings.h" #include #include +#include std::vector ThemeData::sSupportedViews { { "system" }, { "basic" }, { "detailed" }, { "video" } }; std::vector ThemeData::sSupportedFeatures { { "video" }, { "carousel" }, { "z-index" } }; diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 55efdbec1b..461e965751 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -6,11 +6,12 @@ #include #include #include -#include #include #include #include +namespace pugi { class xml_node; } + template class TextListComponent; From 9fbe95daa3062b467c8fb1a025b8028efccf2987 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 11 Nov 2017 15:56:22 +0100 Subject: [PATCH 206/603] iterator -> const_iterator --- es-app/src/CollectionSystemManager.cpp | 96 +++++++++---------- es-app/src/FileData.cpp | 12 +-- es-app/src/FileFilterIndex.cpp | 24 ++--- es-app/src/FileSorts.cpp | 20 ++-- es-app/src/Gamelist.cpp | 2 +- es-app/src/MetaData.cpp | 8 +- es-app/src/ScraperCmdLine.cpp | 18 ++-- es-app/src/SystemData.cpp | 21 ++-- es-app/src/SystemData.h | 6 +- es-app/src/SystemScreenSaver.cpp | 14 +-- .../src/components/ScraperSearchComponent.cpp | 4 +- .../src/guis/GuiCollectionSystemsOptions.cpp | 6 +- es-app/src/guis/GuiGameScraper.cpp | 4 +- es-app/src/guis/GuiGamelistFilter.cpp | 6 +- es-app/src/guis/GuiGamelistOptions.cpp | 2 +- .../src/guis/GuiGeneralScreensaverOptions.cpp | 2 +- es-app/src/guis/GuiMenu.cpp | 24 ++--- es-app/src/guis/GuiMetaDataEd.cpp | 2 +- es-app/src/guis/GuiScraperMulti.cpp | 2 +- es-app/src/guis/GuiScraperStart.cpp | 8 +- es-app/src/guis/GuiScreensaverOptions.cpp | 2 +- es-app/src/guis/GuiSettings.cpp | 2 +- .../src/guis/GuiVideoScreensaverOptions.cpp | 2 +- es-app/src/scrapers/GamesDBScraper.cpp | 4 +- es-app/src/scrapers/Scraper.cpp | 6 +- es-app/src/views/SystemView.cpp | 2 +- es-app/src/views/ViewController.cpp | 24 ++--- .../src/views/gamelist/BasicGameListView.cpp | 8 +- .../views/gamelist/DetailedGameListView.cpp | 4 +- .../src/views/gamelist/GridGameListView.cpp | 2 +- .../src/views/gamelist/VideoGameListView.cpp | 4 +- es-core/src/AudioManager.cpp | 2 +- es-core/src/GuiComponent.cpp | 6 +- es-core/src/InputConfig.cpp | 12 +-- es-core/src/InputManager.cpp | 12 +-- es-core/src/Settings.cpp | 8 +- es-core/src/Sound.cpp | 2 +- es-core/src/ThemeData.cpp | 28 +++--- es-core/src/ThemeData.h | 4 +- es-core/src/Util.cpp | 2 +- es-core/src/Window.cpp | 16 ++-- .../src/components/AnimatedImageComponent.cpp | 2 +- es-core/src/components/ComponentGrid.cpp | 38 ++++---- es-core/src/components/ComponentGrid.h | 6 +- es-core/src/components/ComponentList.cpp | 22 ++--- es-core/src/components/HelpComponent.cpp | 6 +- es-core/src/components/IList.h | 16 ++-- es-core/src/components/ImageGridComponent.h | 2 +- es-core/src/components/OptionListComponent.h | 4 +- es-core/src/guis/GuiMsgBox.cpp | 2 +- es-core/src/resources/Font.cpp | 26 ++--- es-core/src/resources/ResourceManager.cpp | 12 +-- es-core/src/resources/TextureDataManager.cpp | 16 ++-- es-core/src/resources/TextureDataManager.h | 4 +- es-core/src/resources/TextureResource.cpp | 2 +- 55 files changed, 296 insertions(+), 295 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 536a445ff8..06a97355b1 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -37,7 +37,7 @@ CollectionSystemManager::CollectionSystemManager(Window* window) : mWindow(windo // create a map std::vector tempSystemDecl = std::vector(systemDecls, systemDecls + sizeof(systemDecls) / sizeof(systemDecls[0])); - for (std::vector::iterator it = tempSystemDecl.begin(); it != tempSystemDecl.end(); ++it ) + for (std::vector::const_iterator it = tempSystemDecl.cbegin(); it != tempSystemDecl.cend(); ++it ) { mCollectionSystemDeclsIndex[(*it).name] = (*it); } @@ -68,7 +68,7 @@ CollectionSystemManager::~CollectionSystemManager() removeCollectionsFromDisplayedSystems(); // iterate the map - for(std::map::iterator it = mCustomCollectionSystemsData.begin() ; it != mCustomCollectionSystemsData.end() ; it++ ) + for(std::map::const_iterator it = mCustomCollectionSystemsData.cbegin() ; it != mCustomCollectionSystemsData.cend() ; it++ ) { if (it->second.isPopulated) { @@ -103,14 +103,14 @@ void CollectionSystemManager::saveCustomCollection(SystemData* sys) { std::string name = sys->getName(); std::unordered_map games = sys->getRootFolder()->getChildrenByFilename(); - bool found = mCustomCollectionSystemsData.find(name) != mCustomCollectionSystemsData.end(); + bool found = mCustomCollectionSystemsData.find(name) != mCustomCollectionSystemsData.cend(); if (found) { CollectionSystemData sysData = mCustomCollectionSystemsData.at(name); if (sysData.needsSave) { std::ofstream configFile; configFile.open(getCustomCollectionConfigPath(name)); - for(std::unordered_map::iterator iter = games.begin(); iter != games.end(); ++iter) + for(std::unordered_map::const_iterator iter = games.cbegin(); iter != games.cend(); ++iter) { std::string path = iter->first; configFile << path << std::endl; @@ -151,7 +151,7 @@ void CollectionSystemManager::loadEnabledListFromSettings() // iterate the map for(std::map::iterator it = mAutoCollectionSystemsData.begin() ; it != mAutoCollectionSystemsData.end() ; it++ ) { - it->second.isEnabled = (std::find(autoSelected.begin(), autoSelected.end(), it->first) != autoSelected.end()); + it->second.isEnabled = (std::find(autoSelected.cbegin(), autoSelected.cend(), it->first) != autoSelected.cend()); } // we parse the custom collection settings list @@ -160,7 +160,7 @@ void CollectionSystemManager::loadEnabledListFromSettings() // iterate the map for(std::map::iterator it = mCustomCollectionSystemsData.begin() ; it != mCustomCollectionSystemsData.end() ; it++ ) { - it->second.isEnabled = (std::find(customSelected.begin(), customSelected.end(), it->first) != customSelected.end()); + it->second.isEnabled = (std::find(customSelected.cbegin(), customSelected.cend(), it->first) != customSelected.cend()); } } @@ -178,7 +178,7 @@ void CollectionSystemManager::updateSystemsList() std::sort(SystemData::sSystemVector.begin(), SystemData::sSystemVector.end(), systemSort); // move RetroPie system to end, before auto collections - for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); ) + for(auto sysIt = SystemData::sSystemVector.cbegin(); sysIt != SystemData::sSystemVector.cend(); ) { if ((*sysIt)->getName() == "retropie") { @@ -204,7 +204,7 @@ void CollectionSystemManager::updateSystemsList() addEnabledCollectionsToDisplayedSystems(&mAutoCollectionSystemsData); // create views for collections, before reload - for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) + for(auto sysIt = SystemData::sSystemVector.cbegin(); sysIt != SystemData::sSystemVector.cend(); sysIt++) { if ((*sysIt)->isCollection()) { @@ -227,10 +227,10 @@ void CollectionSystemManager::refreshCollectionSystems(FileData* file) return; std::map allCollections; - allCollections.insert(mAutoCollectionSystemsData.begin(), mAutoCollectionSystemsData.end()); - allCollections.insert(mCustomCollectionSystemsData.begin(), mCustomCollectionSystemsData.end()); + allCollections.insert(mAutoCollectionSystemsData.cbegin(), mAutoCollectionSystemsData.cend()); + allCollections.insert(mCustomCollectionSystemsData.cbegin(), mCustomCollectionSystemsData.cend()); - for(auto sysDataIt = allCollections.begin(); sysDataIt != allCollections.end(); sysDataIt++) + for(auto sysDataIt = allCollections.cbegin(); sysDataIt != allCollections.cend(); sysDataIt++) { updateCollectionSystem(file, sysDataIt->second); } @@ -245,7 +245,7 @@ void CollectionSystemManager::updateCollectionSystem(FileData* file, CollectionS SystemData* curSys = sysData.system; const std::unordered_map& children = curSys->getRootFolder()->getChildrenByFilename(); - bool found = children.find(key) != children.end(); + bool found = children.find(key) != children.cend(); FileData* rootFolder = curSys->getRootFolder(); FileFilterIndex* fileIndex = curSys->getIndex(); std::string name = curSys->getName(); @@ -292,8 +292,8 @@ void CollectionSystemManager::deleteCollectionFiles(FileData* file) std::string key = file->getFullPath(); // find games in collection systems std::map allCollections; - allCollections.insert(mAutoCollectionSystemsData.begin(), mAutoCollectionSystemsData.end()); - allCollections.insert(mCustomCollectionSystemsData.begin(), mCustomCollectionSystemsData.end()); + allCollections.insert(mAutoCollectionSystemsData.cbegin(), mAutoCollectionSystemsData.cend()); + allCollections.insert(mCustomCollectionSystemsData.cbegin(), mCustomCollectionSystemsData.cend()); for(auto sysDataIt = allCollections.begin(); sysDataIt != allCollections.end(); sysDataIt++) { @@ -301,7 +301,7 @@ void CollectionSystemManager::deleteCollectionFiles(FileData* file) { const std::unordered_map& children = (sysDataIt->second.system)->getRootFolder()->getChildrenByFilename(); - bool found = children.find(key) != children.end(); + bool found = children.find(key) != children.cend(); if (found) { sysDataIt->second.needsSave = true; FileData* collectionEntry = children.at(key); @@ -316,7 +316,7 @@ void CollectionSystemManager::deleteCollectionFiles(FileData* file) bool CollectionSystemManager::isThemeGenericCollectionCompatible(bool genericCustomCollections) { std::vector cfgSys = getCollectionThemeFolders(genericCustomCollections); - for(auto sysIt = cfgSys.begin(); sysIt != cfgSys.end(); sysIt++) + for(auto sysIt = cfgSys.cbegin(); sysIt != cfgSys.cend(); sysIt++) { if(!themeFolderExists(*sysIt)) return false; @@ -332,7 +332,7 @@ bool CollectionSystemManager::isThemeCustomCollectionCompatible(std::vectorgetString("ThemeSet")); - if(set != themeSets.end()) + if(set != themeSets.cend()) { std::string defaultThemeFilePath = set->second.path.string() + "/theme.xml"; if (fs::exists(defaultThemeFilePath)) @@ -341,7 +341,7 @@ bool CollectionSystemManager::isThemeCustomCollectionCompatible(std::vector userSys = getUserCollectionThemeFolders(); // add them all to the list of systems in use - systemsInUse.insert(systemsInUse.end(), autoSys.begin(), autoSys.end()); - systemsInUse.insert(systemsInUse.end(), customSys.begin(), customSys.end()); - systemsInUse.insert(systemsInUse.end(), userSys.begin(), userSys.end()); - for(auto sysIt = systemsInUse.begin(); sysIt != systemsInUse.end(); sysIt++) + systemsInUse.insert(systemsInUse.cend(), autoSys.cbegin(), autoSys.cend()); + systemsInUse.insert(systemsInUse.cend(), customSys.cbegin(), customSys.cend()); + systemsInUse.insert(systemsInUse.cend(), userSys.cbegin(), userSys.cend()); + for(auto sysIt = systemsInUse.cbegin(); sysIt != systemsInUse.cend(); sysIt++) { if (*sysIt == name) { @@ -394,14 +394,14 @@ std::string CollectionSystemManager::getValidNewCollectionName(std::string inNam } } // if it matches one of the custom collections reserved names - if (mCollectionSystemDeclsIndex.find(name) != mCollectionSystemDeclsIndex.end()) + if (mCollectionSystemDeclsIndex.find(name) != mCollectionSystemDeclsIndex.cend()) return getValidNewCollectionName(name, index+1); return name; } void CollectionSystemManager::setEditMode(std::string collectionName) { - if (mCustomCollectionSystemsData.find(collectionName) == mCustomCollectionSystemsData.end()) + if (mCustomCollectionSystemsData.find(collectionName) == mCustomCollectionSystemsData.cend()) { LOG(LogError) << "Tried to edit a non-existing collection: " << collectionName; return; @@ -449,7 +449,7 @@ bool CollectionSystemManager::toggleGameInCollection(FileData* file) std::string key = file->getFullPath(); FileData* rootFolder = sysData->getRootFolder(); const std::unordered_map& children = rootFolder->getChildrenByFilename(); - bool found = children.find(key) != children.end(); + bool found = children.find(key) != children.cend(); FileFilterIndex* fileIndex = sysData->getIndex(); std::string name = sysData->getName(); @@ -523,7 +523,7 @@ SystemData* CollectionSystemManager::getSystemToView(SystemData* sys) const std::unordered_map& bundleChildren = bundleRootFolder->getChildrenByFilename(); // is the rootFolder bundled in the "My Collections" system? - bool sysFoundInBundle = bundleChildren.find(rootFolder->getKey()) != bundleChildren.end(); + bool sysFoundInBundle = bundleChildren.find(rootFolder->getKey()) != bundleChildren.cend(); if (sysFoundInBundle && sys->isCollection()) { @@ -536,7 +536,7 @@ SystemData* CollectionSystemManager::getSystemToView(SystemData* sys) // loads Automatic Collection systems (All, Favorites, Last Played) void CollectionSystemManager::initAutoCollectionSystems() { - for(std::map::iterator it = mCollectionSystemDeclsIndex.begin() ; it != mCollectionSystemDeclsIndex.end() ; it++ ) + for(std::map::const_iterator it = mCollectionSystemDeclsIndex.cbegin() ; it != mCollectionSystemDeclsIndex.cend() ; it++ ) { CollectionSystemDecl sysDecl = it->second; if (!sysDecl.isCustom) @@ -567,7 +567,7 @@ void CollectionSystemManager::updateCollectionFolderMetadata(SystemData* sys) { std::string games_list = ""; int games_counter = 0; - for(std::unordered_map::iterator iter = games.begin(); iter != games.end(); ++iter) + for(std::unordered_map::const_iterator iter = games.cbegin(); iter != games.cend(); ++iter) { games_counter++; FileData* file = iter->second; @@ -619,7 +619,7 @@ void CollectionSystemManager::updateCollectionFolderMetadata(SystemData* sys) void CollectionSystemManager::initCustomCollectionSystems() { std::vector systems = getCollectionsFromConfigFolder(); - for (auto nameIt = systems.begin(); nameIt != systems.end(); nameIt++) + for (auto nameIt = systems.cbegin(); nameIt != systems.cend(); nameIt++) { addNewCustomCollection(*nameIt); } @@ -678,12 +678,12 @@ void CollectionSystemManager::populateAutoCollection(CollectionSystemData* sysDa CollectionSystemDecl sysDecl = sysData->decl; FileData* rootFolder = newSys->getRootFolder(); FileFilterIndex* index = newSys->getIndex(); - for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); sysIt++) + for(auto sysIt = SystemData::sSystemVector.cbegin(); sysIt != SystemData::sSystemVector.cend(); sysIt++) { // we won't iterate all collections if ((*sysIt)->isGameSystem() && !(*sysIt)->isCollection()) { std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(GAME); - for(auto gameIt = files.begin(); gameIt != files.end(); gameIt++) + for(auto gameIt = files.cbegin(); gameIt != files.cend(); gameIt++) { bool include = includeFileInAutoCollections((*gameIt)); switch(sysDecl.type) { @@ -736,8 +736,8 @@ void CollectionSystemManager::populateCustomCollection(CollectionSystemData* sys for(std::string gameKey; getline(input, gameKey); ) { - std::unordered_map::iterator it = allFilesMap.find(gameKey); - if (it != allFilesMap.end()) { + std::unordered_map::const_iterator it = allFilesMap.find(gameKey); + if (it != allFilesMap.cend()) { CollectionFileData* newGame = new CollectionFileData(it->second, newSys); rootFolder->addChild(newGame); index->addToIndex(newGame); @@ -755,7 +755,7 @@ void CollectionSystemManager::populateCustomCollection(CollectionSystemData* sys void CollectionSystemManager::removeCollectionsFromDisplayedSystems() { // remove all Collection Systems - for(auto sysIt = SystemData::sSystemVector.begin(); sysIt != SystemData::sSystemVector.end(); ) + for(auto sysIt = SystemData::sSystemVector.cbegin(); sysIt != SystemData::sSystemVector.cend(); ) { if ((*sysIt)->isCollection()) { @@ -771,7 +771,7 @@ void CollectionSystemManager::removeCollectionsFromDisplayedSystems() // this should not delete the objects from memory! FileData* customRoot = mCustomCollectionsBundle->getRootFolder(); std::vector mChildren = customRoot->getChildren(); - for(auto it = mChildren.begin(); it != mChildren.end(); it++) + for(auto it = mChildren.cbegin(); it != mChildren.cend(); it++) { customRoot->removeChild(*it); } @@ -866,11 +866,11 @@ std::vector CollectionSystemManager::getSystemsFromTheme() return systems; } - auto set = themeSets.find(Settings::getInstance()->getString("ThemeSet")); - if(set == themeSets.end()) + std::map::const_iterator set = themeSets.find(Settings::getInstance()->getString("ThemeSet")); + if(set == themeSets.cend()) { // currently selected theme set is missing, so just pick the first available set - set = themeSets.begin(); + set = themeSets.cbegin(); Settings::getInstance()->setString("ThemeSet", set->first); } @@ -912,13 +912,13 @@ std::vector CollectionSystemManager::getUnusedSystemsFromTheme() // get folders assigned to user collections std::vector userSys = getUserCollectionThemeFolders(); // add them all to the list of systems in use - systemsInUse.insert(systemsInUse.end(), autoSys.begin(), autoSys.end()); - systemsInUse.insert(systemsInUse.end(), customSys.begin(), customSys.end()); - systemsInUse.insert(systemsInUse.end(), userSys.begin(), userSys.end()); + systemsInUse.insert(systemsInUse.cend(), autoSys.cbegin(), autoSys.cend()); + systemsInUse.insert(systemsInUse.cend(), customSys.cbegin(), customSys.cend()); + systemsInUse.insert(systemsInUse.cend(), userSys.cbegin(), userSys.cend()); - for(auto sysIt = themeSys.begin(); sysIt != themeSys.end(); ) + for(auto sysIt = themeSys.cbegin(); sysIt != themeSys.cend(); ) { - if (std::find(systemsInUse.begin(), systemsInUse.end(), *sysIt) != systemsInUse.end()) + if (std::find(systemsInUse.cbegin(), systemsInUse.cend(), *sysIt) != systemsInUse.cend()) { sysIt = themeSys.erase(sysIt); } @@ -967,7 +967,7 @@ std::vector CollectionSystemManager::getCollectionsFromConfigFolder std::vector CollectionSystemManager::getCollectionThemeFolders(bool custom) { std::vector systems; - for(std::map::iterator it = mCollectionSystemDeclsIndex.begin() ; it != mCollectionSystemDeclsIndex.end() ; it++ ) + for(std::map::const_iterator it = mCollectionSystemDeclsIndex.cbegin() ; it != mCollectionSystemDeclsIndex.cend() ; it++ ) { CollectionSystemDecl sysDecl = it->second; if (sysDecl.isCustom == custom) @@ -982,7 +982,7 @@ std::vector CollectionSystemManager::getCollectionThemeFolders(bool std::vector CollectionSystemManager::getUserCollectionThemeFolders() { std::vector systems; - for(std::map::iterator it = mCustomCollectionSystemsData.begin() ; it != mCustomCollectionSystemsData.end() ; it++ ) + for(std::map::const_iterator it = mCustomCollectionSystemsData.cbegin() ; it != mCustomCollectionSystemsData.cend() ; it++ ) { systems.push_back(it->second.decl.themeFolder); } @@ -993,7 +993,7 @@ std::vector CollectionSystemManager::getUserCollectionThemeFolders( bool CollectionSystemManager::themeFolderExists(std::string folder) { std::vector themeSys = getSystemsFromTheme(); - return std::find(themeSys.begin(), themeSys.end(), folder) != themeSys.end(); + return std::find(themeSys.cbegin(), themeSys.cend(), folder) != themeSys.cend(); } bool CollectionSystemManager::includeFileInAutoCollections(FileData* file) @@ -1020,7 +1020,7 @@ bool systemSort(SystemData* sys1, SystemData* sys2) { std::string name1 = sys1->getName(); std::string name2 = sys2->getName(); - transform(name1.begin(), name1.end(), name1.begin(), ::toupper); - transform(name2.begin(), name2.end(), name2.begin(), ::toupper); + transform(name1.cbegin(), name1.cend(), name1.begin(), ::toupper); + transform(name2.cbegin(), name2.cend(), name2.begin(), ::toupper); return name1.compare(name2) < 0; } \ No newline at end of file diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 49206227c8..0a26c21ac6 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -88,7 +88,7 @@ const std::vector& FileData::getChildrenListToDisplay() { FileFilterIndex* idx = CollectionSystemManager::get()->getSystemToView(mSystem)->getIndex(); if (idx->isFiltered()) { mFilteredChildren.clear(); - for(auto it = mChildren.begin(); it != mChildren.end(); it++) + for(auto it = mChildren.cbegin(); it != mChildren.cend(); it++) { if (idx->showFile((*it))) { mFilteredChildren.push_back(*it); @@ -167,7 +167,7 @@ std::vector FileData::getFilesRecursive(unsigned int typeMask, bool d std::vector out; FileFilterIndex* idx = mSystem->getIndex(); - for(auto it = mChildren.begin(); it != mChildren.end(); it++) + for(auto it = mChildren.cbegin(); it != mChildren.cend(); it++) { if((*it)->getType() & typeMask) { @@ -178,7 +178,7 @@ std::vector FileData::getFilesRecursive(unsigned int typeMask, bool d if((*it)->getChildren().size() > 0) { std::vector subchildren = (*it)->getFilesRecursive(typeMask, displayedOnly); - out.insert(out.end(), subchildren.cbegin(), subchildren.cend()); + out.insert(out.cend(), subchildren.cbegin(), subchildren.cend()); } } @@ -200,7 +200,7 @@ void FileData::addChild(FileData* file) assert(file->getParent() == NULL); const std::string key = file->getKey(); - if (mChildrenByFilename.find(key) == mChildrenByFilename.end()) + if (mChildrenByFilename.find(key) == mChildrenByFilename.cend()) { mChildrenByFilename[key] = file; mChildren.push_back(file); @@ -213,7 +213,7 @@ void FileData::removeChild(FileData* file) assert(mType == FOLDER); assert(file->getParent() == this); mChildrenByFilename.erase(file->getKey()); - for(auto it = mChildren.begin(); it != mChildren.end(); it++) + for(auto it = mChildren.cbegin(); it != mChildren.cend(); it++) { if(*it == file) { @@ -232,7 +232,7 @@ void FileData::sort(ComparisonFunction& comparator, bool ascending) { std::stable_sort(mChildren.begin(), mChildren.end(), comparator); - for(auto it = mChildren.begin(); it != mChildren.end(); it++) + for(auto it = mChildren.cbegin(); it != mChildren.cend(); it++) { if((*it)->getChildren().size() > 0) (*it)->sort(comparator, ascending); diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index c2c1bc33e4..666cacc47f 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -58,11 +58,11 @@ void FileFilterIndex::importIndex(FileFilterIndex* indexToImport) std::vector indexImportDecl = std::vector(indexStructDecls, indexStructDecls + sizeof(indexStructDecls) / sizeof(indexStructDecls[0])); - for (std::vector::iterator indexesIt = indexImportDecl.begin(); indexesIt != indexImportDecl.end(); ++indexesIt ) + for (std::vector::const_iterator indexesIt = indexImportDecl.cbegin(); indexesIt != indexImportDecl.cend(); ++indexesIt ) { - for (std::map::iterator sourceIt = (*indexesIt).sourceIndex->begin(); sourceIt != (*indexesIt).sourceIndex->end(); ++sourceIt ) + for (std::map::const_iterator sourceIt = (*indexesIt).sourceIndex->cbegin(); sourceIt != (*indexesIt).sourceIndex->cend(); ++sourceIt ) { - if ((*indexesIt).destinationIndex->find((*sourceIt).first) == (*indexesIt).destinationIndex->end()) + if ((*indexesIt).destinationIndex->find((*sourceIt).first) == (*indexesIt).destinationIndex->cend()) { // entry doesn't exist (*((*indexesIt).destinationIndex))[(*sourceIt).first] = (*sourceIt).second; @@ -211,15 +211,15 @@ void FileFilterIndex::setFilter(FilterIndexType type, std::vector* } else { - for (std::vector::iterator it = filterDataDecl.begin(); it != filterDataDecl.end(); ++it ) { + for (std::vector::const_iterator it = filterDataDecl.cbegin(); it != filterDataDecl.cend(); ++it ) { if ((*it).type == type) { FilterDataDecl filterData = (*it); *(filterData.filteredByRef) = values->size() > 0; filterData.currentFilteredKeys->clear(); - for (std::vector::iterator vit = values->begin(); vit != values->end(); ++vit ) { + for (std::vector::const_iterator vit = values->cbegin(); vit != values->cend(); ++vit ) { // check if exists - if (filterData.allIndexKeys->find(*vit) != filterData.allIndexKeys->end()) { + if (filterData.allIndexKeys->find(*vit) != filterData.allIndexKeys->cend()) { filterData.currentFilteredKeys->push_back(std::string(*vit)); } } @@ -231,7 +231,7 @@ void FileFilterIndex::setFilter(FilterIndexType type, std::vector* void FileFilterIndex::clearAllFilters() { - for (std::vector::iterator it = filterDataDecl.begin(); it != filterDataDecl.end(); ++it ) + for (std::vector::const_iterator it = filterDataDecl.cbegin(); it != filterDataDecl.cend(); ++it ) { FilterDataDecl filterData = (*it); *(filterData.filteredByRef) = false; @@ -300,7 +300,7 @@ bool FileFilterIndex::showFile(FileData* game) std::vector children = game->getChildren(); // iterate through all of the children, until there's a match - for (std::vector::iterator it = children.begin(); it != children.end(); ++it ) { + for (std::vector::const_iterator it = children.cbegin(); it != children.cend(); ++it ) { if (showFile(*it)) { return true; @@ -311,7 +311,7 @@ bool FileFilterIndex::showFile(FileData* game) bool keepGoing = false; - for (std::vector::iterator it = filterDataDecl.begin(); it != filterDataDecl.end(); ++it ) { + for (std::vector::const_iterator it = filterDataDecl.cbegin(); it != filterDataDecl.cend(); ++it ) { FilterDataDecl filterData = (*it); if(*(filterData.filteredByRef)) { @@ -352,7 +352,7 @@ bool FileFilterIndex::isKeyBeingFilteredBy(std::string key, FilterIndexType type { if (filterTypes[i] == type) { - for (std::vector::iterator it = filterKeysList[i].begin(); it != filterKeysList[i].end(); ++it ) + for (std::vector::const_iterator it = filterKeysList[i].cbegin(); it != filterKeysList[i].cend(); ++it ) { if (key == (*it)) { @@ -503,7 +503,7 @@ void FileFilterIndex::manageIndexEntry(std::map* index, std::s return; if (remove) { // removing entry - if (index->find(key) == index->end()) + if (index->find(key) == index->cend()) { // this shouldn't happen LOG(LogInfo) << "Couldn't find entry in index! " << key; @@ -519,7 +519,7 @@ void FileFilterIndex::manageIndexEntry(std::map* index, std::s else { // adding entry - if (index->find(key) == index->end()) + if (index->find(key) == index->cend()) { (*index)[key] = 1; } diff --git a/es-app/src/FileSorts.cpp b/es-app/src/FileSorts.cpp index 101b913f1f..e99f26decf 100644 --- a/es-app/src/FileSorts.cpp +++ b/es-app/src/FileSorts.cpp @@ -42,8 +42,8 @@ namespace FileSorts // we compare the actual metadata name, as collection files have the system appended which messes up the order std::string name1 = file1->metadata.get("name"); std::string name2 = file2->metadata.get("name"); - transform(name1.begin(), name1.end(), name1.begin(), ::toupper); - transform(name2.begin(), name2.end(), name2.begin(), ::toupper); + transform(name1.cbegin(), name1.cend(), name1.begin(), ::toupper); + transform(name2.cbegin(), name2.cend(), name2.begin(), ::toupper); return name1.compare(name2) < 0; } @@ -90,8 +90,8 @@ namespace FileSorts { std::string genre1 = file1->metadata.get("genre"); std::string genre2 = file2->metadata.get("genre"); - transform(genre1.begin(), genre1.end(), genre1.begin(), ::toupper); - transform(genre2.begin(), genre2.end(), genre2.begin(), ::toupper); + transform(genre1.cbegin(), genre1.cend(), genre1.begin(), ::toupper); + transform(genre2.cbegin(), genre2.cend(), genre2.begin(), ::toupper); return genre1.compare(genre2) < 0; } @@ -99,8 +99,8 @@ namespace FileSorts { std::string developer1 = file1->metadata.get("developer"); std::string developer2 = file2->metadata.get("developer"); - transform(developer1.begin(), developer1.end(), developer1.begin(), ::toupper); - transform(developer2.begin(), developer2.end(), developer2.begin(), ::toupper); + transform(developer1.cbegin(), developer1.cend(), developer1.begin(), ::toupper); + transform(developer2.cbegin(), developer2.cend(), developer2.begin(), ::toupper); return developer1.compare(developer2) < 0; } @@ -108,8 +108,8 @@ namespace FileSorts { std::string publisher1 = file1->metadata.get("publisher"); std::string publisher2 = file2->metadata.get("publisher"); - transform(publisher1.begin(), publisher1.end(), publisher1.begin(), ::toupper); - transform(publisher2.begin(), publisher2.end(), publisher2.begin(), ::toupper); + transform(publisher1.cbegin(), publisher1.cend(), publisher1.begin(), ::toupper); + transform(publisher2.cbegin(), publisher2.cend(), publisher2.begin(), ::toupper); return publisher1.compare(publisher2) < 0; } @@ -117,8 +117,8 @@ namespace FileSorts { std::string system1 = file1->getSystemName(); std::string system2 = file2->getSystemName(); - transform(system1.begin(), system1.end(), system1.begin(), ::toupper); - transform(system2.begin(), system2.end(), system2.begin(), ::toupper); + transform(system1.cbegin(), system1.cend(), system1.begin(), ::toupper); + transform(system2.cbegin(), system2.cend(), system2.begin(), ::toupper); return system1.compare(system2) < 0; } }; diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 53c29ecdbc..81e4da20cb 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -41,7 +41,7 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa const std::unordered_map& children = treeNode->getChildrenByFilename(); std::string key = path_it->string(); - found = children.find(key) != children.end(); + found = children.find(key) != children.cend(); if (found) { treeNode = children.at(key); } diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 7f96a8c806..7a1c6563a7 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -65,7 +65,7 @@ MetaDataList::MetaDataList(MetaDataListType type) : mType(type), mWasChanged(false) { const std::vector& mdd = getMDD(); - for(auto iter = mdd.begin(); iter != mdd.end(); iter++) + for(auto iter = mdd.cbegin(); iter != mdd.cend(); iter++) set(iter->key, iter->defaultValue); } @@ -76,7 +76,7 @@ MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node& const std::vector& mdd = mdl.getMDD(); - for(auto iter = mdd.begin(); iter != mdd.end(); iter++) + for(auto iter = mdd.cbegin(); iter != mdd.cend(); iter++) { pugi::xml_node md = node.child(iter->key.c_str()); if(md) @@ -100,10 +100,10 @@ void MetaDataList::appendToXML(pugi::xml_node& parent, bool ignoreDefaults, cons { const std::vector& mdd = getMDD(); - for(auto mddIter = mdd.begin(); mddIter != mdd.end(); mddIter++) + for(auto mddIter = mdd.cbegin(); mddIter != mdd.cend(); mddIter++) { auto mapIter = mMap.find(mddIter->key); - if(mapIter != mMap.end()) + if(mapIter != mMap.cend()) { // we have this value! // if it's just the default (and we ignore defaults), don't write it diff --git a/es-app/src/ScraperCmdLine.cpp b/es-app/src/ScraperCmdLine.cpp index 1ac73afdfc..1a47abbdde 100644 --- a/es-app/src/ScraperCmdLine.cpp +++ b/es-app/src/ScraperCmdLine.cpp @@ -68,7 +68,7 @@ int run_scraper_cmdline() if(system_choice == "y" || system_choice == "Y") { out << "Will scrape all platforms.\n"; - for(auto i = SystemData::sSystemVector.begin(); i != SystemData::sSystemVector.end(); i++) + for(auto i = SystemData::sSystemVector.cbegin(); i != SystemData::sSystemVector.cend(); i++) { out << " " << (*i)->getName() << " (" << (*i)->getGameCount() << " games)\n"; systems.push_back(*i); @@ -81,9 +81,9 @@ int run_scraper_cmdline() out << "Type nothing and press enter when you are ready to continue.\n"; do { - for(auto i = SystemData::sSystemVector.begin(); i != SystemData::sSystemVector.end(); i++) + for(auto i = SystemData::sSystemVector.cbegin(); i != SystemData::sSystemVector.cend(); i++) { - if(std::find(systems.begin(), systems.end(), (*i)) != systems.end()) + if(std::find(systems.cbegin(), systems.cend(), (*i)) != systems.cend()) out << " C "; else out << " "; @@ -97,7 +97,7 @@ int run_scraper_cmdline() break; bool found = false; - for(auto i = SystemData::sSystemVector.begin(); i != SystemData::sSystemVector.end(); i++) + for(auto i = SystemData::sSystemVector.cbegin(); i != SystemData::sSystemVector.cend(); i++) { if((*i)->getName() == sys_name) { @@ -145,14 +145,14 @@ int run_scraper_cmdline() /* std::shared_ptr scraper = Settings::getInstance()->getScraper(); - for(auto sysIt = systems.begin(); sysIt != systems.end(); sysIt++) + for(auto sysIt = systems.cbegin(); sysIt != systems.cend(); sysIt++) { std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(GAME); ScraperSearchParams params; params.system = (*sysIt); - for(auto gameIt = files.begin(); gameIt != files.end(); gameIt++) + for(auto gameIt = files.cbegin(); gameIt != files.cend(); gameIt++) { params.nameOverride = ""; params.game = *gameIt; @@ -242,15 +242,15 @@ int run_scraper_cmdline() out << "\n\n"; out << "Downloading boxart...\n"; - for(auto sysIt = systems.begin(); sysIt != systems.end(); sysIt++) + for(auto sysIt = systems.cbegin(); sysIt != systems.cend(); sysIt++) { std::vector files = (*sysIt)->getRootFolder()->getFilesRecursive(GAME); - for(auto gameIt = files.begin(); gameIt != files.end(); gameIt++) + for(auto gameIt = files.cbegin(); gameIt != files.cend(); gameIt++) { FileData* game = *gameIt; const std::vector& mdd = game->metadata.getMDD(); - for(auto i = mdd.begin(); i != mdd.end(); i++) + for(auto i = mdd.cbegin(); i != mdd.cend(); i++) { std::string key = i->key; std::string url = game->metadata.get(key); diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 620d334b19..da84f5455d 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -122,7 +122,7 @@ void SystemData::populateFolder(FileData* folder) //see issue #75: https://github.com/Aloshi/EmulationStation/issues/75 isGame = false; - if(std::find(mEnvData->mSearchExtensions.begin(), mEnvData->mSearchExtensions.end(), extension) != mEnvData->mSearchExtensions.end()) + if(std::find(mEnvData->mSearchExtensions.cbegin(), mEnvData->mSearchExtensions.cend(), extension) != mEnvData->mSearchExtensions.cend()) { // skip hidden files if(!showHidden && isHidden(filePath)) @@ -152,7 +152,7 @@ void SystemData::indexAllGameFilters(const FileData* folder) { const std::vector& children = folder->getChildren(); - for(std::vector::const_iterator it = children.begin(); it != children.end(); ++it) + for(std::vector::const_iterator it = children.cbegin(); it != children.cend(); ++it) { switch((*it)->getType()) { @@ -231,7 +231,7 @@ bool SystemData::loadConfig() const char* platformList = system.child("platform").text().get(); std::vector platformStrs = readList(platformList); std::vector platformIds; - for(auto it = platformStrs.begin(); it != platformStrs.end(); it++) + for(auto it = platformStrs.cbegin(); it != platformStrs.cend(); it++) { const char* str = it->c_str(); PlatformIds::PlatformId platformId = PlatformIds::getPlatformId(str); @@ -363,8 +363,8 @@ SystemData* SystemData::getNext() const do { it++; - if (it == sSystemVector.end()) - it = sSystemVector.begin(); + if (it == sSystemVector.cend()) + it = sSystemVector.cbegin(); } while ((*it)->getDisplayedGameCount() == 0); // as we are starting in a valid gamelistview, this will always succeed, even if we have to come full circle. @@ -373,11 +373,12 @@ SystemData* SystemData::getNext() const SystemData* SystemData::getPrev() const { - auto it = getRevIterator(); + std::vector::const_reverse_iterator it = getRevIterator(); + do { it++; - if (it == sSystemVector.rend()) - it = sSystemVector.rbegin(); + if (it == sSystemVector.crend()) + it = sSystemVector.crbegin(); } while ((*it)->getDisplayedGameCount() == 0); // as we are starting in a valid gamelistview, this will always succeed, even if we have to come full circle. @@ -439,7 +440,7 @@ SystemData* SystemData::getRandomSystem() { // this is a bit brute force. It might be more efficient to just to a while (!gameSystem) do random again... unsigned int total = 0; - for(auto it = sSystemVector.begin(); it != sSystemVector.end(); it++) + for(auto it = sSystemVector.cbegin(); it != sSystemVector.cend(); it++) { if ((*it)->isGameSystem()) total ++; @@ -447,7 +448,7 @@ SystemData* SystemData::getRandomSystem() // get random number in range int target = (int) std::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); - for (auto it = sSystemVector.begin(); it != sSystemVector.end(); it++) + for (auto it = sSystemVector.cbegin(); it != sSystemVector.cend(); it++) { if ((*it)->isGameSystem()) { diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index 73247f7e8a..24597cd540 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -34,7 +34,7 @@ class SystemData inline const std::string& getThemeFolder() const { return mThemeFolder; } inline SystemEnvironmentData* getSystemEnvData() const { return mEnvData; } inline const std::vector& getPlatformIds() const { return mEnvData->mPlatformIds; } - inline bool hasPlatformId(PlatformIds::PlatformId id) { if (!mEnvData) return false; return std::find(mEnvData->mPlatformIds.begin(), mEnvData->mPlatformIds.end(), id) != mEnvData->mPlatformIds.end(); } + inline bool hasPlatformId(PlatformIds::PlatformId id) { if (!mEnvData) return false; return std::find(mEnvData->mPlatformIds.cbegin(), mEnvData->mPlatformIds.cend(), id) != mEnvData->mPlatformIds.cend(); } inline const std::shared_ptr& getTheme() const { return mTheme; } @@ -52,8 +52,8 @@ class SystemData static std::vector sSystemVector; - inline std::vector::const_iterator getIterator() const { return std::find(sSystemVector.begin(), sSystemVector.end(), this); }; - inline std::vector::const_reverse_iterator getRevIterator() const { return std::find(sSystemVector.rbegin(), sSystemVector.rend(), this); }; + inline std::vector::const_iterator getIterator() const { return std::find(sSystemVector.cbegin(), sSystemVector.cend(), this); }; + inline std::vector::const_reverse_iterator getRevIterator() const { return std::find(sSystemVector.crbegin(), sSystemVector.crend(), this); }; inline bool isCollection() { return mIsCollectionSystem; }; inline bool isGameSystem() { return mIsGameSystem; } diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 3dc23abb1b..03ac51f096 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -259,8 +259,8 @@ void SystemScreenSaver::renderScreenSaver() unsigned long SystemScreenSaver::countGameListNodes(const char *nodeName) { unsigned long nodeCount = 0; - std::vector:: iterator it; - for (it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); ++it) + std::vector::const_iterator it; + for (it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); ++it) { // We only want images and videos from game systems that are not collections if (!(*it)->isCollection() && (*it)->isGameSystem()) @@ -309,8 +309,8 @@ void SystemScreenSaver::countImages() void SystemScreenSaver::pickGameListNode(unsigned long index, const char *nodeName, std::string& path) { - std::vector:: iterator it; - for (it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); ++it) + std::vector::const_iterator it; + for (it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); ++it) { pugi::xml_document doc; pugi::xml_node root; @@ -354,7 +354,7 @@ void SystemScreenSaver::pickGameListNode(unsigned long index, const char *nodeNa const std::unordered_map& children = rootFileData->getChildrenByFilename(); std::unordered_map::const_iterator screenSaverGame = children.find(shortPath); - if (screenSaverGame != children.end()) + if (screenSaverGame != children.cend()) { // Found the corresponding FileData mCurrentGame = screenSaverGame->second; @@ -365,10 +365,10 @@ void SystemScreenSaver::pickGameListNode(unsigned long index, const char *nodeNa // iterate on children FileType type = GAME; std::vector allFiles = rootFileData->getFilesRecursive(type); - std::vector::iterator itf; // declare an iterator to a vector of strings + std::vector::const_iterator itf; // declare an iterator to a vector of strings int i = 0; - for(itf=allFiles.begin() ; itf < allFiles.end(); itf++,i++ ) { + for(itf=allFiles.cbegin() ; itf < allFiles.cend(); itf++,i++ ) { if ((*itf)->getPath() == gamePath) { mCurrentGame = (*itf); diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index fe8c6d006b..9a3898cd70 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -59,7 +59,7 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) mMD_Grid = std::make_shared(mWindow, Vector2i(2, mMD_Pairs.size()*2 - 1)); unsigned int i = 0; - for(auto it = mMD_Pairs.begin(); it != mMD_Pairs.end(); it++) + for(auto it = mMD_Pairs.cbegin(); it != mMD_Pairs.cend(); it++) { mMD_Grid->setEntry(it->first, Vector2i(0, i), false, true); mMD_Grid->setEntry(it->second, Vector2i(1, i), false, it->resize); @@ -136,7 +136,7 @@ void ScraperSearchComponent::resizeMetadata() // update label fonts float maxLblWidth = 0; - for(auto it = mMD_Pairs.begin(); it != mMD_Pairs.end(); it++) + for(auto it = mMD_Pairs.cbegin(); it != mMD_Pairs.cend(); it++) { it->first->setFont(fontLbl); it->first->setSize(0, 0); diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.cpp b/es-app/src/guis/GuiCollectionSystemsOptions.cpp index c91968a8d8..410578f63c 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.cpp +++ b/es-app/src/guis/GuiCollectionSystemsOptions.cpp @@ -32,7 +32,7 @@ void GuiCollectionSystemsOptions::initializeMenu() std::shared_ptr< OptionListComponent > folderThemes = std::make_shared< OptionListComponent >(mWindow, "SELECT THEME FOLDER", true); // add Custom Systems - for(auto it = unusedFolders.begin() ; it != unusedFolders.end() ; it++ ) + for(auto it = unusedFolders.cbegin() ; it != unusedFolders.cend() ; it++ ) { ComponentListRow row; std::string name = *it; @@ -141,7 +141,7 @@ void GuiCollectionSystemsOptions::addSystemsToMenu() autoOptionList = std::make_shared< OptionListComponent >(mWindow, "SELECT COLLECTIONS", true); // add Auto Systems - for(std::map::iterator it = autoSystems.begin() ; it != autoSystems.end() ; it++ ) + for(std::map::const_iterator it = autoSystems.cbegin() ; it != autoSystems.cend() ; it++ ) { autoOptionList->add(it->second.decl.longName, it->second.decl.name, it->second.isEnabled); } @@ -152,7 +152,7 @@ void GuiCollectionSystemsOptions::addSystemsToMenu() customOptionList = std::make_shared< OptionListComponent >(mWindow, "SELECT COLLECTIONS", true); // add Custom Systems - for(std::map::iterator it = customSystems.begin() ; it != customSystems.end() ; it++ ) + for(std::map::const_iterator it = customSystems.cbegin() ; it != customSystems.cend() ; it++ ) { customOptionList->add(it->second.decl.longName, it->second.decl.name, it->second.isEnabled); } diff --git a/es-app/src/guis/GuiGameScraper.cpp b/es-app/src/guis/GuiGameScraper.cpp index a1e92a1cdd..6fd0670965 100644 --- a/es-app/src/guis/GuiGameScraper.cpp +++ b/es-app/src/guis/GuiGameScraper.cpp @@ -51,7 +51,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: // this is because of how GuiComponent::update works. if it was just delete this, this would happen when the metadata resolver is done: // GuiGameScraper::update() // GuiComponent::update() - // it = mChildren.begin(); + // it = mChildren.cbegin(); // mBox::update() // it++; // mSearchComponent::update() @@ -61,7 +61,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: // so instead we do this: // GuiGameScraper::update() // GuiComponent::update() - // it = mChildren.begin(); + // it = mChildren.cbegin(); // mBox::update() // it++; // mSearchComponent::update() diff --git a/es-app/src/guis/GuiGamelistFilter.cpp b/es-app/src/guis/GuiGamelistFilter.cpp index 15be39d2e5..4d70901cc2 100644 --- a/es-app/src/guis/GuiGamelistFilter.cpp +++ b/es-app/src/guis/GuiGamelistFilter.cpp @@ -36,7 +36,7 @@ void GuiGamelistFilter::initializeMenu() void GuiGamelistFilter::resetAllFilters() { mFilterIndex->resetFilters(); - for (std::map >>::iterator it = mFilterOptions.begin(); it != mFilterOptions.end(); ++it ) { + for (std::map >>::const_iterator it = mFilterOptions.cbegin(); it != mFilterOptions.cend(); ++it ) { std::shared_ptr< OptionListComponent > optionList = it->second; optionList->selectNone(); } @@ -57,7 +57,7 @@ void GuiGamelistFilter::addFiltersToMenu() if (ViewController::get()->isUIModeKid()) skip = 2; - for (std::vector::iterator it = decls.begin(); it != decls.end()-skip; ++it ) { + for (std::vector::const_iterator it = decls.cbegin(); it != decls.cend()-skip; ++it ) { FilterIndexType type = (*it).type; // type of filter std::map* allKeys = (*it).allIndexKeys; // all possible filters for this type @@ -84,7 +84,7 @@ void GuiGamelistFilter::addFiltersToMenu() void GuiGamelistFilter::applyFilters() { std::vector decls = mFilterIndex->getFilterDataDecls(); - for (std::map >>::iterator it = mFilterOptions.begin(); it != mFilterOptions.end(); ++it ) { + for (std::map >>::const_iterator it = mFilterOptions.cbegin(); it != mFilterOptions.cend(); ++it ) { std::shared_ptr< OptionListComponent > optionList = it->second; std::vector filters = optionList->getSelectedObjects(); mFilterIndex->setFilter(it->first, &filters); diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 710df7e3d2..fa8e03f28e 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -85,7 +85,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui std::map customCollections = CollectionSystemManager::get()->getCustomCollectionSystems(); if(ViewController::get()->isUIModeFull() && - ((customCollections.find(system->getName()) != customCollections.end() && CollectionSystemManager::get()->getEditingCollection() != system->getName()) || + ((customCollections.find(system->getName()) != customCollections.cend() && CollectionSystemManager::get()->getEditingCollection() != system->getName()) || CollectionSystemManager::get()->getCustomCollectionsBundle()->getName() == system->getName())) { row.elements.clear(); diff --git a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp index 88f71502e4..99d583fb48 100644 --- a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp +++ b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp @@ -25,7 +25,7 @@ GuiGeneralScreensaverOptions::GuiGeneralScreensaverOptions(Window* window, const screensavers.push_back("black"); screensavers.push_back("random video"); screensavers.push_back("slideshow"); - for(auto it = screensavers.begin(); it != screensavers.end(); it++) + for(auto it = screensavers.cbegin(); it != screensavers.cend(); it++) screensaver_behavior->add(*it, *it, Settings::getInstance()->getString("ScreenSaverBehavior") == *it); addWithLabel("SCREENSAVER BEHAVIOR", screensaver_behavior); addSaveFunc([this, screensaver_behavior] { diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 174d4d141d..b030149ca9 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -54,7 +54,7 @@ void GuiMenu::openScraperSettings() // scrape from auto scraper_list = std::make_shared< OptionListComponent< std::string > >(mWindow, "SCRAPE FROM", false); std::vector scrapers = getScraperList(); - for(auto it = scrapers.begin(); it != scrapers.end(); it++) + for(auto it = scrapers.cbegin(); it != scrapers.cend(); it++) scraper_list->add(*it, *it, *it == Settings::getInstance()->getString("Scraper")); s->addWithLabel("SCRAPE FROM", scraper_list); @@ -101,7 +101,7 @@ void GuiMenu::openSoundSettings() transitions.push_back("PCM"); transitions.push_back("Speaker"); transitions.push_back("Master"); - for(auto it = transitions.begin(); it != transitions.end(); it++) + for(auto it = transitions.cbegin(); it != transitions.cend(); it++) vol_dev->add(*it, *it, Settings::getInstance()->getString("AudioDevice") == *it); s->addWithLabel("AUDIO DEVICE", vol_dev); s->addSaveFunc([vol_dev] { @@ -141,7 +141,7 @@ void GuiMenu::openSoundSettings() // USB audio devices.push_back("alsa:hw:0,0"); devices.push_back("alsa:hw:1,0"); - for (auto it = devices.begin(); it != devices.end(); it++) + for (auto it = devices.cbegin(); it != devices.cend(); it++) omx_audio_dev->add(*it, *it, Settings::getInstance()->getString("OMXAudioDev") == *it); s->addWithLabel("OMX PLAYER AUDIO DEVICE", omx_audio_dev); s->addSaveFunc([omx_audio_dev] { @@ -162,7 +162,7 @@ void GuiMenu::openUISettings() //UI mode auto UImodeSelection = std::make_shared< OptionListComponent >(mWindow, "UI MODE", false); std::vector UImodes = ViewController::get()->getUIModes(); - for (auto it = UImodes.begin(); it != UImodes.end(); it++) + for (auto it = UImodes.cbegin(); it != UImodes.cend(); it++) UImodeSelection->add(*it, *it, Settings::getInstance()->getString("UIMode") == *it); s->addWithLabel("UI MODE", UImodeSelection); Window* window = mWindow; @@ -220,7 +220,7 @@ void GuiMenu::openUISettings() transitions.push_back("fade"); transitions.push_back("slide"); transitions.push_back("instant"); - for(auto it = transitions.begin(); it != transitions.end(); it++) + for(auto it = transitions.cbegin(); it != transitions.cend(); it++) transition_style->add(*it, *it, Settings::getInstance()->getString("TransitionStyle") == *it); s->addWithLabel("TRANSITION STYLE", transition_style); s->addSaveFunc([transition_style] { @@ -239,12 +239,12 @@ void GuiMenu::openUISettings() if(!themeSets.empty()) { - auto selectedSet = themeSets.find(Settings::getInstance()->getString("ThemeSet")); - if(selectedSet == themeSets.end()) - selectedSet = themeSets.begin(); + std::map::const_iterator selectedSet = themeSets.find(Settings::getInstance()->getString("ThemeSet")); + if(selectedSet == themeSets.cend()) + selectedSet = themeSets.cbegin(); auto theme_set = std::make_shared< OptionListComponent >(mWindow, "THEME SET", false); - for(auto it = themeSets.begin(); it != themeSets.end(); it++) + for(auto it = themeSets.cbegin(); it != themeSets.cend(); it++) theme_set->add(it->first, it->first, it == selectedSet); s->addWithLabel("THEME SET", theme_set); @@ -272,7 +272,7 @@ void GuiMenu::openUISettings() styles.push_back("basic"); styles.push_back("detailed"); styles.push_back("video"); - for (auto it = styles.begin(); it != styles.end(); it++) + for (auto it = styles.cbegin(); it != styles.cend(); it++) gamelist_style->add(*it, *it, Settings::getInstance()->getString("GamelistViewStyle") == *it); s->addWithLabel("GAMELIST VIEW STYLE", gamelist_style); s->addSaveFunc([gamelist_style] { @@ -287,7 +287,7 @@ void GuiMenu::openUISettings() // Optionally start in selected system auto systemfocus_list = std::make_shared< OptionListComponent >(mWindow, "START ON SYSTEM", false); systemfocus_list->add("NONE", "", Settings::getInstance()->getString("StartupSystem") == ""); - for (auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) + for (auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++) { if ("retropie" != (*it)->getName()) { @@ -326,7 +326,7 @@ void GuiMenu::openOtherSettings() modes.push_back("default"); modes.push_back("enhanced"); modes.push_back("instant"); - for (auto it = modes.begin(); it != modes.end(); it++) + for (auto it = modes.cbegin(); it != modes.cend(); it++) power_saver->add(*it, *it, Settings::getInstance()->getString("PowerSaverMode") == *it); s->addWithLabel("POWER SAVER MODES", power_saver); s->addSaveFunc([this, power_saver] { diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index fb55a9e82b..c81463c080 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -47,7 +47,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mGrid.setEntry(mList, Vector2i(0, 1), true, true); // populate list - for(auto iter = mdd.begin(); iter != mdd.end(); iter++) + for(auto iter = mdd.cbegin(); iter != mdd.cend(); iter++) { std::shared_ptr ed; diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index e25fc9c085..8f75b56b05 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -74,7 +74,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue detailed) - for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) + for(auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++) ViewController::get()->reloadGameListView(*it, false); } diff --git a/es-app/src/guis/GuiScraperStart.cpp b/es-app/src/guis/GuiScraperStart.cpp index 9092d1fa3f..75649d5af4 100644 --- a/es-app/src/guis/GuiScraperStart.cpp +++ b/es-app/src/guis/GuiScraperStart.cpp @@ -23,7 +23,7 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), //add systems (all with a platformid specified selected) mSystems = std::make_shared< OptionListComponent >(mWindow, "SCRAPE THESE SYSTEMS", true); - for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) + for(auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++) { if(!(*it)->hasPlatformId(PlatformIds::PLATFORM_IGNORE)) mSystems->add((*it)->getFullName(), *it, !(*it)->getPlatformIds().empty()); @@ -43,7 +43,7 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), void GuiScraperStart::pressedStart() { std::vector sys = mSystems->getSelectedObjects(); - for(auto it = sys.begin(); it != sys.end(); it++) + for(auto it = sys.cbegin(); it != sys.cend(); it++) { if((*it)->getPlatformIds().empty()) { @@ -76,10 +76,10 @@ void GuiScraperStart::start() std::queue GuiScraperStart::getSearches(std::vector systems, GameFilterFunc selector) { std::queue queue; - for(auto sys = systems.begin(); sys != systems.end(); sys++) + for(auto sys = systems.cbegin(); sys != systems.cend(); sys++) { std::vector games = (*sys)->getRootFolder()->getFilesRecursive(GAME); - for(auto game = games.begin(); game != games.end(); game++) + for(auto game = games.cbegin(); game != games.cend(); game++) { if(selector((*sys), (*game))) { diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index aae8c0c2fb..e9d2f068c3 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -25,7 +25,7 @@ void GuiScreensaverOptions::save() if(!mSaveFuncs.size()) return; - for(auto it = mSaveFuncs.begin(); it != mSaveFuncs.end(); it++) + for(auto it = mSaveFuncs.cbegin(); it != mSaveFuncs.cend(); it++) (*it)(); Settings::getInstance()->saveFile(); diff --git a/es-app/src/guis/GuiSettings.cpp b/es-app/src/guis/GuiSettings.cpp index 99d986a620..53f96c439e 100644 --- a/es-app/src/guis/GuiSettings.cpp +++ b/es-app/src/guis/GuiSettings.cpp @@ -25,7 +25,7 @@ void GuiSettings::save() if(!mSaveFuncs.size()) return; - for(auto it = mSaveFuncs.begin(); it != mSaveFuncs.end(); it++) + for(auto it = mSaveFuncs.cbegin(); it != mSaveFuncs.cend(); it++) (*it)(); Settings::getInstance()->saveFile(); diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.cpp b/es-app/src/guis/GuiVideoScreensaverOptions.cpp index 49307587f9..c29dc8d793 100644 --- a/es-app/src/guis/GuiVideoScreensaverOptions.cpp +++ b/es-app/src/guis/GuiVideoScreensaverOptions.cpp @@ -37,7 +37,7 @@ GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const cha info_type.push_back("always"); info_type.push_back("start & end"); info_type.push_back("never"); - for(auto it = info_type.begin(); it != info_type.end(); it++) + for(auto it = info_type.cbegin(); it != info_type.cend(); it++) ss_info->add(*it, *it, Settings::getInstance()->getString("ScreenSaverGameInfo") == *it); addWithLabel("SHOW GAME INFO ON SCREENSAVER", ss_info); addSaveFunc([ss_info, this] { Settings::getInstance()->setString("ScreenSaverGameInfo", ss_info->getSelected()); }); diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index c265ce267a..97b8639637 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -104,11 +104,11 @@ void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std // because TheGamesDB API either sucks or I don't know how to use it properly... std::string urlBase = path; auto& platforms = params.system->getPlatformIds(); - for(auto platformIt = platforms.begin(); platformIt != platforms.end(); platformIt++) + for(auto platformIt = platforms.cbegin(); platformIt != platforms.cend(); platformIt++) { path = urlBase; auto mapIt = gamesdb_platformid_map.find(*platformIt); - if(mapIt != gamesdb_platformid_map.end()) + if(mapIt != gamesdb_platformid_map.cend()) { path += "&platform="; path += HttpReq::urlEncode(mapIt->second); diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index 2cc67ef289..af970891d1 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -26,7 +26,7 @@ std::unique_ptr startScraperSearch(const ScraperSearchParam std::vector getScraperList() { std::vector list; - for(auto it = scraper_request_funcs.begin(); it != scraper_request_funcs.end(); it++) + for(auto it = scraper_request_funcs.cbegin(); it != scraper_request_funcs.cend(); it++) { list.push_back(it->first); } @@ -142,8 +142,8 @@ void MDResolveHandle::update() if(mStatus == ASYNC_DONE || mStatus == ASYNC_ERROR) return; - auto it = mFuncs.begin(); - while(it != mFuncs.end()) + auto it = mFuncs.cbegin(); + while(it != mFuncs.cend()) { if(it->first->status() == ASYNC_ERROR) { diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 99814b41e8..50aeaf4a33 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -29,7 +29,7 @@ void SystemView::populate() { mEntries.clear(); - for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) + for(auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++) { const std::shared_ptr& theme = (*it)->getTheme(); diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index f81cba7e79..b8f646cb78 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -48,7 +48,7 @@ void ViewController::goToStart() auto requestedSystem = Settings::getInstance()->getString("StartupSystem"); if("" != requestedSystem && "retropie" != requestedSystem) { - for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++){ + for(auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++){ if ((*it)->getName() == requestedSystem) { goToGameList(*it); @@ -62,7 +62,7 @@ void ViewController::goToStart() int ViewController::getSystemId(SystemData* system) { std::vector& sysVec = SystemData::sSystemVector; - return std::find(sysVec.begin(), sysVec.end(), system) - sysVec.begin(); + return std::find(sysVec.cbegin(), sysVec.cend(), system) - sysVec.cbegin(); } void ViewController::goToSystemView(SystemData* system) @@ -188,7 +188,7 @@ void ViewController::playViewTransition() void ViewController::onFileChanged(FileData* file, FileChangeType change) { auto it = mGameListViews.find(file->getSystem()); - if(it != mGameListViews.end()) + if(it != mGameListViews.cend()) it->second->onFileChanged(file, change); } @@ -249,7 +249,7 @@ void ViewController::removeGameListView(SystemData* system) { //if we already made one, return that one auto exists = mGameListViews.find(system); - if(exists != mGameListViews.end()) + if(exists != mGameListViews.cend()) { exists->second.reset(); mGameListViews.erase(system); @@ -260,7 +260,7 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste { //if we already made one, return that one auto exists = mGameListViews.find(system); - if(exists != mGameListViews.end()) + if(exists != mGameListViews.cend()) return exists->second; //if we didn't, make it, remember it, and return it @@ -282,7 +282,7 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste if (selectedViewType == AUTOMATIC) { std::vector files = system->getRootFolder()->getFilesRecursive(GAME | FOLDER); - for (auto it = files.begin(); it != files.end(); it++) + for (auto it = files.cbegin(); it != files.cend(); it++) { if (themeHasVideoView && !(*it)->getVideoPath().empty()) { @@ -318,7 +318,7 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste view->setTheme(system->getTheme()); std::vector& sysVec = SystemData::sSystemVector; - int id = std::find(sysVec.begin(), sysVec.end(), system) - sysVec.begin(); + int id = std::find(sysVec.cbegin(), sysVec.cend(), system) - sysVec.cbegin(); view->setPosition(id * (float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight() * 2); addChild(view.get()); @@ -386,7 +386,7 @@ void ViewController::render(const Transform4x4f& parentTrans) getSystemListView()->render(trans); // draw gamelists - for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) + for(auto it = mGameListViews.cbegin(); it != mGameListViews.cend(); it++) { // clipping Vector3f guiStart = it->second->getPosition(); @@ -410,7 +410,7 @@ void ViewController::render(const Transform4x4f& parentTrans) void ViewController::preload() { - for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++) + for(auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++) { (*it)->getIndex()->resetFilters(); getGameListView(*it); @@ -419,7 +419,7 @@ void ViewController::preload() void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) { - for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) + for(auto it = mGameListViews.cbegin(); it != mGameListViews.cend(); it++) { if(it->second.get() == view) { @@ -452,7 +452,7 @@ void ViewController::reloadAll() { // clear all gamelistviews std::map cursorMap; - for(auto it = mGameListViews.begin(); it != mGameListViews.end(); it++) + for(auto it = mGameListViews.cbegin(); it != mGameListViews.cend(); it++) { cursorMap[it->first] = it->second->getCursor(); } @@ -460,7 +460,7 @@ void ViewController::reloadAll() // load themes, create gamelistviews and reset filters - for(auto it = cursorMap.begin(); it != cursorMap.end(); it++) + for(auto it = cursorMap.cbegin(); it != cursorMap.cend(); it++) { it->first->loadTheme(); it->first->getIndex()->resetFilters(); diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index a8326f0c4b..30271232b9 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -44,7 +44,7 @@ void BasicGameListView::populateList(const std::vector& files) mHeaderText.setText(mRoot->getSystem()->getFullName()); if (files.size() > 0) { - for(auto it = files.begin(); it != files.end(); it++) + for(auto it = files.cbegin(); it != files.cend(); it++) { mList.add((*it)->getName(), *it, ((*it)->getType() == FOLDER)); } @@ -109,9 +109,9 @@ void BasicGameListView::remove(FileData *game, bool deleteFile) if (getCursor() == game) // Select next element in list, or prev if none { std::vector siblings = parent->getChildrenListToDisplay(); - auto gameIter = std::find(siblings.begin(), siblings.end(), game); - unsigned int gamePos = std::distance(siblings.begin(), gameIter); - if (gameIter != siblings.end()) + auto gameIter = std::find(siblings.cbegin(), siblings.cend(), game); + unsigned int gamePos = std::distance(siblings.cbegin(), gameIter); + if (gameIter != siblings.cend()) { if ((gamePos + 1) < siblings.size()) { diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index e9d0e49e97..59805fb38b 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -214,9 +214,9 @@ void DetailedGameListView::updateInfoPanel() comps.push_back(&mImage); comps.push_back(&mDescription); std::vector labels = getMDLabels(); - comps.insert(comps.end(), labels.begin(), labels.end()); + comps.insert(comps.cend(), labels.cbegin(), labels.cend()); - for(auto it = comps.begin(); it != comps.end(); it++) + for(auto it = comps.cbegin(); it != comps.cend(); it++) { GuiComponent* comp = *it; // an animation is playing diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index cc7680dcec..82a916f3e4 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -37,7 +37,7 @@ bool GridGameListView::input(InputConfig* config, Input input) void GridGameListView::populateList(const std::vector& files) { mGrid.clear(); - for(auto it = files.begin(); it != files.end(); it++) + for(auto it = files.cbegin(); it != files.cend(); it++) { mGrid.add((*it)->getName(), (*it)->getThumbnailPath(), *it); } diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 8f4da1115a..b992863b64 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -272,9 +272,9 @@ void VideoGameListView::updateInfoPanel() comps.push_back(&mDescription); comps.push_back(&mImage); std::vector labels = getMDLabels(); - comps.insert(comps.end(), labels.begin(), labels.end()); + comps.insert(comps.cend(), labels.cbegin(), labels.cend()); - for(auto it = comps.begin(); it != comps.end(); it++) + for(auto it = comps.cbegin(); it != comps.cend(); it++) { GuiComponent* comp = *it; // an animation is playing diff --git a/es-core/src/AudioManager.cpp b/es-core/src/AudioManager.cpp index 1f298c6fa1..744d229179 100644 --- a/es-core/src/AudioManager.cpp +++ b/es-core/src/AudioManager.cpp @@ -125,7 +125,7 @@ void AudioManager::unregisterSound(std::shared_ptr & sound) if(sSoundVector.at(i) == sound) { sSoundVector[i]->stop(); - sSoundVector.erase(sSoundVector.begin() + i); + sSoundVector.erase(sSoundVector.cbegin() + i); return; } } diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 7211a63bd8..104c556265 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -185,7 +185,7 @@ void GuiComponent::removeChild(GuiComponent* cmp) cmp->setParent(NULL); - for(auto i = mChildren.begin(); i != mChildren.end(); i++) + for(auto i = mChildren.cbegin(); i != mChildren.cend(); i++) { if(*i == cmp) { @@ -235,7 +235,7 @@ unsigned char GuiComponent::getOpacity() const void GuiComponent::setOpacity(unsigned char opacity) { mOpacity = opacity; - for(auto it = mChildren.begin(); it != mChildren.end(); it++) + for(auto it = mChildren.cbegin(); it != mChildren.cend(); it++) { (*it)->setOpacity(opacity); } @@ -281,7 +281,7 @@ std::string GuiComponent::getValue() const void GuiComponent::textInput(const char* text) { - for(auto iter = mChildren.begin(); iter != mChildren.end(); iter++) + for(auto iter = mChildren.cbegin(); iter != mChildren.cend(); iter++) { (*iter)->textInput(text); } diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index 5323fbc588..aa460e472f 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -72,14 +72,14 @@ void InputConfig::mapInput(const std::string& name, Input input) void InputConfig::unmapInput(const std::string& name) { auto it = mNameMap.find(toLower(name)); - if(it != mNameMap.end()) + if(it != mNameMap.cend()) mNameMap.erase(it); } bool InputConfig::getInputByName(const std::string& name, Input* result) { auto it = mNameMap.find(toLower(name)); - if(it != mNameMap.end()) + if(it != mNameMap.cend()) { *result = it->second; return true; @@ -115,8 +115,8 @@ std::vector InputConfig::getMappedTo(Input input) { std::vector maps; - typedef std::map::iterator it_type; - for(it_type iterator = mNameMap.begin(); iterator != mNameMap.end(); iterator++) + typedef std::map::const_iterator it_type; + for(it_type iterator = mNameMap.cbegin(); iterator != mNameMap.cend(); iterator++) { Input chk = iterator->second; @@ -188,8 +188,8 @@ void InputConfig::writeToXML(pugi::xml_node& parent) cfg.append_attribute("deviceGUID") = mDeviceGUID.c_str(); - typedef std::map::iterator it_type; - for(it_type iterator = mNameMap.begin(); iterator != mNameMap.end(); iterator++) + typedef std::map::const_iterator it_type; + for(it_type iterator = mNameMap.cbegin(); iterator != mNameMap.cend(); iterator++) { if(!iterator->second.configured) continue; diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 4eeda88ad9..ce545aa3b1 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -121,7 +121,7 @@ void InputManager::removeJoystickByJoystickID(SDL_JoystickID joyId) // close the joystick auto joyIt = mJoysticks.find(joyId); - if(joyIt != mJoysticks.end()) + if(joyIt != mJoysticks.cend()) { SDL_JoystickClose(joyIt->second); mJoysticks.erase(joyIt); @@ -135,19 +135,19 @@ void InputManager::deinit() if(!initialized()) return; - for(auto iter = mJoysticks.begin(); iter != mJoysticks.end(); iter++) + for(auto iter = mJoysticks.cbegin(); iter != mJoysticks.cend(); iter++) { SDL_JoystickClose(iter->second); } mJoysticks.clear(); - for(auto iter = mInputConfigs.begin(); iter != mInputConfigs.end(); iter++) + for(auto iter = mInputConfigs.cbegin(); iter != mInputConfigs.cend(); iter++) { delete iter->second; } mInputConfigs.clear(); - for(auto iter = mPrevAxisValues.begin(); iter != mPrevAxisValues.end(); iter++) + for(auto iter = mPrevAxisValues.cbegin(); iter != mPrevAxisValues.cend(); iter++) { delete[] iter->second; } @@ -453,7 +453,7 @@ bool InputManager::initialized() const int InputManager::getNumConfiguredDevices() { int num = 0; - for(auto it = mInputConfigs.begin(); it != mInputConfigs.end(); it++) + for(auto it = mInputConfigs.cbegin(); it != mInputConfigs.cend(); it++) { if(it->second->isConfigured()) num++; @@ -477,7 +477,7 @@ std::string InputManager::getDeviceGUIDString(int deviceId) return CEC_GUID_STRING; auto it = mJoysticks.find(deviceId); - if(it == mJoysticks.end()) + if(it == mJoysticks.cend()) { LOG(LogError) << "getDeviceGUIDString - deviceId " << deviceId << " not found!"; return "something went horribly wrong"; diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 546cec5eb2..7a27c5cf98 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -132,10 +132,10 @@ void Settings::setDefaults() template void saveMap(pugi::xml_document& doc, std::map& map, const char* type) { - for(auto iter = map.begin(); iter != map.end(); iter++) + for(auto iter = map.cbegin(); iter != map.cend(); iter++) { // key is on the "don't save" list, so don't save it - if(std::find(settings_dont_save.begin(), settings_dont_save.end(), iter->first) != settings_dont_save.end()) + if(std::find(settings_dont_save.cbegin(), settings_dont_save.cend(), iter->first) != settings_dont_save.cend()) continue; pugi::xml_node node = doc.append_child(type); @@ -155,7 +155,7 @@ void Settings::saveFile() saveMap(doc, mFloatMap, "float"); //saveMap(doc, mStringMap, "string"); - for(auto iter = mStringMap.begin(); iter != mStringMap.end(); iter++) + for(auto iter = mStringMap.cbegin(); iter != mStringMap.cend(); iter++) { pugi::xml_node node = doc.append_child("string"); node.append_attribute("name").set_value(iter->first.c_str()); @@ -193,7 +193,7 @@ void Settings::loadFile() //Print a warning message if the setting we're trying to get doesn't already exist in the map, then return the value in the map. #define SETTINGS_GETSET(type, mapName, getMethodName, setMethodName) type Settings::getMethodName(const std::string& name) \ { \ - if(mapName.find(name) == mapName.end()) \ + if(mapName.find(name) == mapName.cend()) \ { \ LOG(LogError) << "Tried to use unset setting " << name << "!"; \ } \ diff --git a/es-core/src/Sound.cpp b/es-core/src/Sound.cpp index bf879379ac..af0b63f903 100644 --- a/es-core/src/Sound.cpp +++ b/es-core/src/Sound.cpp @@ -10,7 +10,7 @@ std::map< std::string, std::shared_ptr > Sound::sMap; std::shared_ptr Sound::get(const std::string& path) { auto it = sMap.find(path); - if(it != sMap.end()) + if(it != sMap.cend()) return it->second; std::shared_ptr sound = std::shared_ptr(new Sound(path)); diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 830f972524..eee91dc1a3 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -215,7 +215,7 @@ void ThemeData::loadFile(std::map sysDataMap, const st mViews.clear(); mVariables.clear(); - mVariables.insert(sysDataMap.begin(), sysDataMap.end()); + mVariables.insert(sysDataMap.cbegin(), sysDataMap.cend()); pugi::xml_document doc; pugi::xml_parse_result res = doc.load_file(path.c_str()); @@ -286,7 +286,7 @@ void ThemeData::parseFeatures(const pugi::xml_node& root) const std::string supportedAttr = node.attribute("supported").as_string(); - if (std::find(sSupportedFeatures.begin(), sSupportedFeatures.end(), supportedAttr) != sSupportedFeatures.end()) + if (std::find(sSupportedFeatures.cbegin(), sSupportedFeatures.cend(), supportedAttr) != sSupportedFeatures.cend()) { parseViews(node); } @@ -335,7 +335,7 @@ void ThemeData::parseViews(const pugi::xml_node& root) prevOff = nameAttr.find_first_not_of(delim, off); off = nameAttr.find_first_of(delim, prevOff); - if (std::find(sSupportedViews.begin(), sSupportedViews.end(), viewKey) != sSupportedViews.end()) + if (std::find(sSupportedViews.cbegin(), sSupportedViews.cend(), viewKey) != sSupportedViews.cend()) { ThemeView& view = mViews.insert(std::pair(viewKey, ThemeView())).first->second; parseView(node, view); @@ -355,7 +355,7 @@ void ThemeData::parseView(const pugi::xml_node& root, ThemeView& view) throw error << "Element of type \"" << node.name() << "\" missing \"name\" attribute!"; auto elemTypeIt = sElementMap.find(node.name()); - if(elemTypeIt == sElementMap.end()) + if(elemTypeIt == sElementMap.cend()) throw error << "Unknown element of type \"" << node.name() << "\"!"; const char* delim = " \t\r\n,"; @@ -371,7 +371,7 @@ void ThemeData::parseView(const pugi::xml_node& root, ThemeView& view) parseElement(node, elemTypeIt->second, view.elements.insert(std::pair(elemKey, ThemeElement())).first->second); - if(std::find(view.orderedKeys.begin(), view.orderedKeys.end(), elemKey) == view.orderedKeys.end()) + if(std::find(view.orderedKeys.cbegin(), view.orderedKeys.cend(), elemKey) == view.orderedKeys.cend()) view.orderedKeys.push_back(elemKey); } } @@ -389,7 +389,7 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::mapsecond.elements.find(element); - if(elemIt == viewIt->second.elements.end()) return NULL; + if(elemIt == viewIt->second.elements.cend()) return NULL; if(elemIt->second.type != expectedType && !expectedType.empty()) { @@ -509,10 +509,10 @@ std::vector ThemeData::makeExtras(const std::shared_ptr comps; auto viewIt = theme->mViews.find(view); - if(viewIt == theme->mViews.end()) + if(viewIt == theme->mViews.cend()) return comps; - for(auto it = viewIt->second.orderedKeys.begin(); it != viewIt->second.orderedKeys.end(); it++) + for(auto it = viewIt->second.orderedKeys.cbegin(); it != viewIt->second.orderedKeys.cend(); it++) { ThemeElement& elem = viewIt->second.elements.at(*it); if(elem.extra) @@ -572,11 +572,11 @@ fs::path ThemeData::getThemeFromCurrentSet(const std::string& system) return ""; } - auto set = themeSets.find(Settings::getInstance()->getString("ThemeSet")); - if(set == themeSets.end()) + std::map::const_iterator set = themeSets.find(Settings::getInstance()->getString("ThemeSet")); + if(set == themeSets.cend()) { // currently selected theme set is missing, so just pick the first available set - set = themeSets.begin(); + set = themeSets.cbegin(); Settings::getInstance()->setString("ThemeSet", set->first); } diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 461e965751..fb244e5ae3 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -58,7 +58,7 @@ class ThemeException : public std::exception inline void setFiles(const std::deque& deque) { *this << "from theme \"" << deque.front().string() << "\"\n"; - for(auto it = deque.begin() + 1; it != deque.end(); it++) + for(auto it = deque.cbegin() + 1; it != deque.cend(); it++) *this << " (from included file \"" << (*it).string() << "\")\n"; *this << " "; } @@ -96,7 +96,7 @@ class ThemeData template T get(const std::string& prop) const { return boost::get(properties.at(prop)); } - inline bool has(const std::string& prop) const { return (properties.find(prop) != properties.end()); } + inline bool has(const std::string& prop) const { return (properties.find(prop) != properties.cend()); } }; private: diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index b36d4d2330..6171ca2b24 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -276,7 +276,7 @@ std::string vectorToCommaString(std::vector stringVector) std::string out = ""; std::sort(stringVector.begin(), stringVector.end()); // from a vector of system names get comma separated string - for(std::vector::iterator it = stringVector.begin() ; it != stringVector.end() ; it++ ) + for(std::vector::const_iterator it = stringVector.cbegin() ; it != stringVector.cend() ; it++ ) { out = out + (out == "" ? "" : ",") + (*it); } diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index a5493cff2c..691810ddc3 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -41,13 +41,13 @@ void Window::pushGui(GuiComponent* gui) void Window::removeGui(GuiComponent* gui) { - for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) + for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) { if(*i == gui) { i = mGuiStack.erase(i); - if(i == mGuiStack.end() && mGuiStack.size()) // we just popped the stack and the stack is not empty + if(i == mGuiStack.cend() && mGuiStack.size()) // we just popped the stack and the stack is not empty { mGuiStack.back()->updateHelpPrompts(); mGuiStack.back()->topWindow(true); @@ -99,7 +99,7 @@ bool Window::init(unsigned int width, unsigned int height) void Window::deinit() { // Hide all GUI elements on uninitialisation - this disable - for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) + for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) { (*i)->onHide(); } @@ -332,14 +332,14 @@ void Window::setHelpPrompts(const std::vector& prompts, const HelpSt std::map inputSeenMap; std::map mappedToSeenMap; - for(auto it = prompts.begin(); it != prompts.end(); it++) + for(auto it = prompts.cbegin(); it != prompts.cend(); it++) { // only add it if the same icon hasn't already been added if(inputSeenMap.emplace(it->first, true).second) { // this symbol hasn't been seen yet, what about the action name? auto mappedTo = mappedToSeenMap.find(it->second); - if(mappedTo != mappedToSeenMap.end()) + if(mappedTo != mappedToSeenMap.cend()) { // yes, it has! @@ -404,7 +404,7 @@ void Window::onWake() bool Window::isProcessing() { - return count_if(mGuiStack.begin(), mGuiStack.end(), [](GuiComponent* c) { return c->isProcessing(); }) > 0; + return count_if(mGuiStack.cbegin(), mGuiStack.cend(), [](GuiComponent* c) { return c->isProcessing(); }) > 0; } void Window::startScreenSaver() @@ -412,7 +412,7 @@ void Window::startScreenSaver() if (mScreenSaver && !mRenderScreenSaver) { // Tell the GUI components the screensaver is starting - for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) + for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) (*i)->onScreenSaverActivate(); mScreenSaver->startScreenSaver(); @@ -428,7 +428,7 @@ void Window::startScreenSaver() mRenderScreenSaver = false; // Tell the GUI components the screensaver has stopped - for(auto i = mGuiStack.begin(); i != mGuiStack.end(); i++) + for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) (*i)->onScreenSaverDeactivate(); } } diff --git a/es-core/src/components/AnimatedImageComponent.cpp b/es-core/src/components/AnimatedImageComponent.cpp index 6b36b10aac..8e981f840e 100644 --- a/es-core/src/components/AnimatedImageComponent.cpp +++ b/es-core/src/components/AnimatedImageComponent.cpp @@ -44,7 +44,7 @@ void AnimatedImageComponent::reset() void AnimatedImageComponent::onSizeChanged() { - for(auto it = mFrames.begin(); it != mFrames.end(); it++) + for(auto it = mFrames.cbegin(); it != mFrames.cend(); it++) { it->first->setResize(mSize.x(), mSize.y()); } diff --git a/es-core/src/components/ComponentGrid.cpp b/es-core/src/components/ComponentGrid.cpp index 5d004d6d8d..69037bde3c 100644 --- a/es-core/src/components/ComponentGrid.cpp +++ b/es-core/src/components/ComponentGrid.cpp @@ -107,7 +107,7 @@ void ComponentGrid::setEntry(const std::shared_ptr& comp, const Ve bool ComponentGrid::removeEntry(const std::shared_ptr& comp) { - for(auto it = mCells.begin(); it != mCells.end(); it++) + for(auto it = mCells.cbegin(); it != mCells.cend(); it++) { if(it->component == comp) { @@ -155,7 +155,7 @@ void ComponentGrid::updateSeparators() Vector2f pos; Vector2f size; - for(auto it = mCells.begin(); it != mCells.end(); it++) + for(auto it = mCells.cbegin(); it != mCells.cend(); it++) { if(!it->border && !drawAll) continue; @@ -200,17 +200,17 @@ void ComponentGrid::updateSeparators() void ComponentGrid::onSizeChanged() { - for(auto it = mCells.begin(); it != mCells.end(); it++) + for(auto it = mCells.cbegin(); it != mCells.cend(); it++) updateCellComponent(*it); updateSeparators(); } -ComponentGrid::GridEntry* ComponentGrid::getCellAt(int x, int y) +const ComponentGrid::GridEntry* ComponentGrid::getCellAt(int x, int y) const { assert(x >= 0 && x < mGridSize.x() && y >= 0 && y < mGridSize.y()); - for(auto it = mCells.begin(); it != mCells.end(); it++) + for(auto it = mCells.cbegin(); it != mCells.cend(); it++) { int xmin = it->pos.x(); int xmax = xmin + it->dim.x(); @@ -226,7 +226,7 @@ ComponentGrid::GridEntry* ComponentGrid::getCellAt(int x, int y) bool ComponentGrid::input(InputConfig* config, Input input) { - GridEntry* cursorEntry = getCellAt(mCursor); + const GridEntry* cursorEntry = getCellAt(mCursor); if(cursorEntry && cursorEntry->component->input(config, input)) return true; @@ -258,7 +258,7 @@ void ComponentGrid::resetCursor() if(!mCells.size()) return; - for(auto it = mCells.begin(); it != mCells.end(); it++) + for(auto it = mCells.cbegin(); it != mCells.cend(); it++) { if(it->canFocus) { @@ -276,7 +276,7 @@ bool ComponentGrid::moveCursor(Vector2i dir) const Vector2i origCursor = mCursor; - GridEntry* currentCursorEntry = getCellAt(mCursor); + const GridEntry* currentCursorEntry = getCellAt(mCursor); Vector2i searchAxis(dir.x() == 0, dir.y() == 0); @@ -286,7 +286,7 @@ bool ComponentGrid::moveCursor(Vector2i dir) Vector2i curDirPos = mCursor; - GridEntry* cursorEntry; + const GridEntry* cursorEntry; //spread out on search axis+ while(mCursor.x() < mGridSize.x() && mCursor.y() < mGridSize.y() && mCursor.x() >= 0 && mCursor.y() >= 0) @@ -326,29 +326,29 @@ bool ComponentGrid::moveCursor(Vector2i dir) void ComponentGrid::onFocusLost() { - GridEntry* cursorEntry = getCellAt(mCursor); + const GridEntry* cursorEntry = getCellAt(mCursor); if(cursorEntry) cursorEntry->component->onFocusLost(); } void ComponentGrid::onFocusGained() { - GridEntry* cursorEntry = getCellAt(mCursor); + const GridEntry* cursorEntry = getCellAt(mCursor); if(cursorEntry) cursorEntry->component->onFocusGained(); } bool ComponentGrid::cursorValid() { - GridEntry* e = getCellAt(mCursor); + const GridEntry* e = getCellAt(mCursor); return (e != NULL && e->canFocus); } void ComponentGrid::update(int deltaTime) { // update ALL THE THINGS - GridEntry* cursorEntry = getCellAt(mCursor); - for(auto it = mCells.begin(); it != mCells.end(); it++) + const GridEntry* cursorEntry = getCellAt(mCursor); + for(auto it = mCells.cbegin(); it != mCells.cend(); it++) { if(it->updateType == UPDATE_ALWAYS || (it->updateType == UPDATE_WHEN_SELECTED && cursorEntry == &(*it))) it->component->update(deltaTime); @@ -384,14 +384,14 @@ void ComponentGrid::render(const Transform4x4f& parentTrans) void ComponentGrid::textInput(const char* text) { - GridEntry* selectedEntry = getCellAt(mCursor); + const GridEntry* selectedEntry = getCellAt(mCursor); if(selectedEntry != NULL && selectedEntry->canFocus) selectedEntry->component->textInput(text); } void ComponentGrid::onCursorMoved(Vector2i from, Vector2i to) { - GridEntry* cell = getCellAt(from); + const GridEntry* cell = getCellAt(from); if(cell) cell->component->onFocusLost(); @@ -404,7 +404,7 @@ void ComponentGrid::onCursorMoved(Vector2i from, Vector2i to) void ComponentGrid::setCursorTo(const std::shared_ptr& comp) { - for(auto it = mCells.begin(); it != mCells.end(); it++) + for(auto it = mCells.cbegin(); it != mCells.cend(); it++) { if(it->component == comp) { @@ -422,13 +422,13 @@ void ComponentGrid::setCursorTo(const std::shared_ptr& comp) std::vector ComponentGrid::getHelpPrompts() { std::vector prompts; - GridEntry* e = getCellAt(mCursor); + const GridEntry* e = getCellAt(mCursor); if(e) prompts = e->component->getHelpPrompts(); bool canScrollVert = mGridSize.y() > 1; bool canScrollHoriz = mGridSize.x() > 1; - for(auto it = prompts.begin(); it != prompts.end(); it++) + for(auto it = prompts.cbegin(); it != prompts.cend(); it++) { if(it->first == "up/down/left/right") { diff --git a/es-core/src/components/ComponentGrid.h b/es-core/src/components/ComponentGrid.h index c6b26c347a..aa6519175f 100644 --- a/es-core/src/components/ComponentGrid.h +++ b/es-core/src/components/ComponentGrid.h @@ -57,7 +57,7 @@ class ComponentGrid : public GuiComponent inline std::shared_ptr getSelectedComponent() { - GridEntry* e = getCellAt(mCursor); + const GridEntry* e = getCellAt(mCursor); if(e) return e->component; else @@ -110,8 +110,8 @@ class ComponentGrid : public GuiComponent void updateCellComponent(const GridEntry& cell); void updateSeparators(); - GridEntry* getCellAt(int x, int y); - inline GridEntry* getCellAt(const Vector2i& pos) { return getCellAt(pos.x(), pos.y()); } + const GridEntry* getCellAt(int x, int y) const; + inline const GridEntry* getCellAt(const Vector2i& pos) const { return getCellAt(pos.x(), pos.y()); } Vector2i mGridSize; diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 1e28afffa6..148873b60e 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -20,7 +20,7 @@ void ComponentList::addRow(const ComponentListRow& row, bool setCursorHere) this->add(e); - for(auto it = mEntries.back().data.elements.begin(); it != mEntries.back().data.elements.end(); it++) + for(auto it = mEntries.back().data.elements.cbegin(); it != mEntries.back().data.elements.cend(); it++) addChild(it->component.get()); updateElementSize(mEntries.back().data); @@ -35,7 +35,7 @@ void ComponentList::addRow(const ComponentListRow& row, bool setCursorHere) void ComponentList::onSizeChanged() { - for(auto it = mEntries.begin(); it != mEntries.end(); it++) + for(auto it = mEntries.cbegin(); it != mEntries.cend(); it++) { updateElementSize(it->data); updateElementPosition(it->data); @@ -99,7 +99,7 @@ void ComponentList::update(int deltaTime) if(size()) { // update our currently selected row - for(auto it = mEntries.at(mCursor).data.elements.begin(); it != mEntries.at(mCursor).data.elements.end(); it++) + for(auto it = mEntries.at(mCursor).data.elements.cbegin(); it != mEntries.at(mCursor).data.elements.cend(); it++) it->component->update(deltaTime); } } @@ -119,7 +119,7 @@ void ComponentList::onCursorChanged(const CursorState& state) // this is terribly inefficient but we don't know what we came from so... if(size()) { - for(auto it = mEntries.begin(); it != mEntries.end(); it++) + for(auto it = mEntries.cbegin(); it != mEntries.cend(); it++) it->data.elements.back().component->onFocusLost(); mEntries.at(mCursor).data.elements.back().component->onFocusGained(); @@ -181,7 +181,7 @@ void ComponentList::render(const Transform4x4f& parentTrans) { auto& entry = mEntries.at(i); drawAll = !mFocused || i != (unsigned int)mCursor; - for(auto it = entry.data.elements.begin(); it != entry.data.elements.end(); it++) + for(auto it = entry.data.elements.cbegin(); it != entry.data.elements.cend(); it++) { if(drawAll || it->invert_when_selected) { @@ -213,7 +213,7 @@ void ComponentList::render(const Transform4x4f& parentTrans) Renderer::drawRect(0.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF); Renderer::drawRect(mSize.x() - 2.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF); - for(auto it = drawAfterCursor.begin(); it != drawAfterCursor.end(); it++) + for(auto it = drawAfterCursor.cbegin(); it != drawAfterCursor.cend(); it++) (*it)->render(trans); // reset matrix if one of these components changed it @@ -249,7 +249,7 @@ float ComponentList::getRowHeight(const ComponentListRow& row) const float ComponentList::getTotalRowHeight() const { float height = 0; - for(auto it = mEntries.begin(); it != mEntries.end(); it++) + for(auto it = mEntries.cbegin(); it != mEntries.cend(); it++) { height += getRowHeight(it->data); } @@ -260,7 +260,7 @@ float ComponentList::getTotalRowHeight() const void ComponentList::updateElementPosition(const ComponentListRow& row) { float yOffset = 0; - for(auto it = mEntries.begin(); it != mEntries.end() && &it->data != &row; it++) + for(auto it = mEntries.cbegin(); it != mEntries.cend() && &it->data != &row; it++) { yOffset += getRowHeight(it->data); } @@ -284,7 +284,7 @@ void ComponentList::updateElementSize(const ComponentListRow& row) float width = mSize.x() - TOTAL_HORIZONTAL_PADDING_PX; std::vector< std::shared_ptr > resizeVec; - for(auto it = row.elements.begin(); it != row.elements.end(); it++) + for(auto it = row.elements.cbegin(); it != row.elements.cend(); it++) { if(it->resize_width) resizeVec.push_back(it->component); @@ -294,7 +294,7 @@ void ComponentList::updateElementSize(const ComponentListRow& row) // redistribute the "unused" width equally among the components with resize_width set to true width = width / resizeVec.size(); - for(auto it = resizeVec.begin(); it != resizeVec.end(); it++) + for(auto it = resizeVec.cbegin(); it != resizeVec.cend(); it++) { (*it)->setSize(width, (*it)->getSize().y()); } @@ -318,7 +318,7 @@ std::vector ComponentList::getHelpPrompts() if(size() > 1) { bool addMovePrompt = true; - for(auto it = prompts.begin(); it != prompts.end(); it++) + for(auto it = prompts.cbegin(); it != prompts.cend(); it++) { if(it->first == "up/down" || it->first == "up/down/left/right") { diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index b1814a681a..6789716655 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -68,7 +68,7 @@ void HelpComponent::updateGrid() float width = 0; const float height = round(font->getLetterHeight() * 1.25f); - for(auto it = mPrompts.begin(); it != mPrompts.end(); it++) + for(auto it = mPrompts.cbegin(); it != mPrompts.cend(); it++) { auto icon = std::make_shared(mWindow); icon->setImage(getIconTexture(it->first.c_str())); @@ -101,11 +101,11 @@ void HelpComponent::updateGrid() std::shared_ptr HelpComponent::getIconTexture(const char* name) { auto it = mIconCache.find(name); - if(it != mIconCache.end()) + if(it != mIconCache.cend()) return it->second; auto pathLookup = ICON_PATH_MAP.find(name); - if(pathLookup == ICON_PATH_MAP.end()) + if(pathLookup == ICON_PATH_MAP.cend()) { LOG(LogError) << "Unknown help icon \"" << name << "\"!"; return nullptr; diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index dd584e7a02..1f6caa104d 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -129,21 +129,21 @@ class IList : public GuiComponent return mEntries.at(mCursor).object; } - void setCursor(typename std::vector::iterator& it) + void setCursor(typename std::vector::const_iterator& it) { - assert(it != mEntries.end()); - mCursor = it - mEntries.begin(); + assert(it != mEntries.cend()); + mCursor = it - mEntries.cbegin(); onCursorChanged(CURSOR_STOPPED); } // returns true if successful (select is in our list), false if not bool setCursor(const UserData& obj) { - for(auto it = mEntries.begin(); it != mEntries.end(); it++) + for(auto it = mEntries.cbegin(); it != mEntries.cend(); it++) { if((*it).object == obj) { - mCursor = it - mEntries.begin(); + mCursor = it - mEntries.cbegin(); onCursorChanged(CURSOR_STOPPED); return true; } @@ -160,7 +160,7 @@ class IList : public GuiComponent bool remove(const UserData& obj) { - for(auto it = mEntries.begin(); it != mEntries.end(); it++) + for(auto it = mEntries.cbegin(); it != mEntries.cend(); it++) { if((*it).object == obj) { @@ -175,9 +175,9 @@ class IList : public GuiComponent inline int size() const { return mEntries.size(); } protected: - void remove(typename std::vector::iterator& it) + void remove(typename std::vector::const_iterator& it) { - if(mCursor > 0 && it - mEntries.begin() <= mCursor) + if(mCursor > 0 && it - mEntries.cbegin() <= mCursor) { mCursor--; onCursorChanged(CURSOR_STOPPED); diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 8f76f4c241..1987a61337 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -62,7 +62,7 @@ class ImageGridComponent : public IList Vector2f squareSize(32, 32); // calc biggest square size - for(auto it = mEntries.begin(); it != mEntries.end(); it++) + for(auto it = mEntries.cbegin(); it != mEntries.cend(); it++) { Vector2f chkSize = getSquareSize(it->data.texture); if(chkSize.x() > squareSize.x()) diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index 59585b296b..7bbea70662 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -219,7 +219,7 @@ class OptionListComponent : public GuiComponent std::vector getSelectedObjects() { std::vector ret; - for(auto it = mEntries.begin(); it != mEntries.end(); it++) + for(auto it = mEntries.cbegin(); it != mEntries.cend(); it++) { if(it->selected) ret.push_back(it->object); @@ -298,7 +298,7 @@ class OptionListComponent : public GuiComponent mParent->onSizeChanged(); }else{ // display currently selected + l/r cursors - for(auto it = mEntries.begin(); it != mEntries.end(); it++) + for(auto it = mEntries.cbegin(); it != mEntries.cend(); it++) { if(it->selected) { diff --git a/es-core/src/guis/GuiMsgBox.cpp b/es-core/src/guis/GuiMsgBox.cpp index 5e2a9989a0..bd92cea70c 100644 --- a/es-core/src/guis/GuiMsgBox.cpp +++ b/es-core/src/guis/GuiMsgBox.cpp @@ -29,7 +29,7 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, { mAcceleratorFunc = mButtons.front()->getPressedFunc(); }else{ - for(auto it = mButtons.begin(); it != mButtons.end(); it++) + for(auto it = mButtons.cbegin(); it != mButtons.cend(); it++) { if(strToUpper((*it)->getText()) == "OK" || strToUpper((*it)->getText()) == "NO") { diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index 5b7ef4128a..a5ecd3c234 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -39,10 +39,10 @@ void Font::initLibrary() size_t Font::getMemUsage() const { size_t memUsage = 0; - for(auto it = mTextures.begin(); it != mTextures.end(); it++) + for(auto it = mTextures.cbegin(); it != mTextures.cend(); it++) memUsage += it->textureSize.x() * it->textureSize.y() * 4; - for(auto it = mFaceCache.begin(); it != mFaceCache.end(); it++) + for(auto it = mFaceCache.cbegin(); it != mFaceCache.cend(); it++) memUsage += it->second->data.length; return memUsage; @@ -52,8 +52,8 @@ size_t Font::getTotalMemUsage() { size_t total = 0; - auto it = sFontMap.begin(); - while(it != sFontMap.end()) + auto it = sFontMap.cbegin(); + while(it != sFontMap.cend()) { if(it->second.expired()) { @@ -105,7 +105,7 @@ std::shared_ptr Font::get(int size, const std::string& path) std::pair def(canonicalPath.empty() ? getDefaultPath() : canonicalPath, size); auto foundFont = sFontMap.find(def); - if(foundFont != sFontMap.end()) + if(foundFont != sFontMap.cend()) { if(!foundFont->second.expired()) return foundFont->second.lock(); @@ -284,7 +284,7 @@ FT_Face Font::getFaceForChar(unsigned int id) { auto fit = mFaceCache.find(i); - if(fit == mFaceCache.end()) // doesn't exist yet + if(fit == mFaceCache.cend()) // doesn't exist yet { // i == 0 -> mPath // otherwise, take from fallbackFonts @@ -299,7 +299,7 @@ FT_Face Font::getFaceForChar(unsigned int id) } // nothing has a valid glyph - return the "real" face so we get a "missing" character - return mFaceCache.begin()->second->face; + return mFaceCache.cbegin()->second->face; } void Font::clearFaceCache() @@ -311,7 +311,7 @@ Font::Glyph* Font::getGlyph(unsigned int id) { // is it already loaded? auto it = mGlyphMap.find(id); - if(it != mGlyphMap.end()) + if(it != mGlyphMap.cend()) return &it->second; // nope, need to make a glyph @@ -376,7 +376,7 @@ void Font::rebuildTextures() } // reupload the texture data - for(auto it = mGlyphMap.begin(); it != mGlyphMap.end(); it++) + for(auto it = mGlyphMap.cbegin(); it != mGlyphMap.cend(); it++) { FT_Face face = getFaceForChar(it->first); FT_GlyphSlot glyphSlot = face->glyph; @@ -406,7 +406,7 @@ void Font::renderTextCache(TextCache* cache) return; } - for(auto it = cache->vertexLists.begin(); it != cache->vertexLists.end(); it++) + for(auto it = cache->vertexLists.cbegin(); it != cache->vertexLists.cend(); it++) { assert(*it->textureIdPtr != 0); @@ -675,7 +675,7 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign cache->metrics = { sizeText(text, lineSpacing) }; unsigned int i = 0; - for(auto it = vertMap.begin(); it != vertMap.end(); it++) + for(auto it = vertMap.cbegin(); it != vertMap.cend(); it++) { TextCache::VertexList& vertList = cache->vertexLists.at(i); @@ -698,8 +698,8 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of void TextCache::setColor(unsigned int color) { - for(auto it = vertexLists.begin(); it != vertexLists.end(); it++) - Renderer::buildGLColorArray(it->colors.data(), color, it->verts.size()); + for(auto it = vertexLists.cbegin(); it != vertexLists.cend(); it++) + Renderer::buildGLColorArray((GLubyte*)(it->colors.data()), color, it->verts.size()); } std::shared_ptr Font::getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig) diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index a851baf528..882cefe137 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -27,7 +27,7 @@ const ResourceData ResourceManager::getFileData(const std::string& path) const { //check if its embedded - if(res2hMap.find(path) != res2hMap.end()) + if(res2hMap.find(path) != res2hMap.cend()) { //it is Res2hEntry embeddedEntry = res2hMap.find(path)->second; @@ -70,7 +70,7 @@ ResourceData ResourceManager::loadFile(const std::string& path) const bool ResourceManager::fileExists(const std::string& path) const { //if it exists as an embedded file, return true - if(res2hMap.find(path) != res2hMap.end()) + if(res2hMap.find(path) != res2hMap.cend()) return true; return fs::exists(path); @@ -78,8 +78,8 @@ bool ResourceManager::fileExists(const std::string& path) const void ResourceManager::unloadAll() { - auto iter = mReloadables.begin(); - while(iter != mReloadables.end()) + auto iter = mReloadables.cbegin(); + while(iter != mReloadables.cend()) { if(!iter->expired()) { @@ -93,8 +93,8 @@ void ResourceManager::unloadAll() void ResourceManager::reloadAll() { - auto iter = mReloadables.begin(); - while(iter != mReloadables.end()) + auto iter = mReloadables.cbegin(); + while(iter != mReloadables.cend()) { if(!iter->expired()) { diff --git a/es-core/src/resources/TextureDataManager.cpp b/es-core/src/resources/TextureDataManager.cpp index 9ac155b0f6..f64719003d 100644 --- a/es-core/src/resources/TextureDataManager.cpp +++ b/es-core/src/resources/TextureDataManager.cpp @@ -29,7 +29,7 @@ std::shared_ptr TextureDataManager::add(const TextureResource* key, remove(key); std::shared_ptr data(new TextureData(tiled)); mTextures.push_front(data); - mTextureLookup[key] = mTextures.begin(); + mTextureLookup[key] = mTextures.cbegin(); return data; } @@ -37,7 +37,7 @@ void TextureDataManager::remove(const TextureResource* key) { // Find the entry in the list auto it = mTextureLookup.find(key); - if (it != mTextureLookup.end()) + if (it != mTextureLookup.cend()) { // Remove the list entry mTextures.erase((*it).second); @@ -52,7 +52,7 @@ std::shared_ptr TextureDataManager::get(const TextureResource* key) // move it to the top std::shared_ptr tex; auto it = mTextureLookup.find(key); - if (it != mTextureLookup.end()) + if (it != mTextureLookup.cend()) { tex = *(*it).second; // Remove the list entry @@ -60,7 +60,7 @@ std::shared_ptr TextureDataManager::get(const TextureResource* key) // Put it at the top mTextures.push_front(tex); // Store it back in the lookup - mTextureLookup[key] = mTextures.begin(); + mTextureLookup[key] = mTextures.cbegin(); // Make sure it's loaded or queued for loading load(tex); @@ -109,7 +109,7 @@ void TextureDataManager::load(std::shared_ptr tex, bool block) size_t size = TextureResource::getTotalMemUsage(); size_t max_texture = (size_t)Settings::getInstance()->getInt("MaxVRAM") * 1024 * 1024; - for (auto it = mTextures.rbegin(); it != mTextures.rend(); ++it) + for (auto it = mTextures.crbegin(); it != mTextures.crend(); ++it) { if (size < max_texture) break; @@ -187,7 +187,7 @@ void TextureLoader::load(std::shared_ptr textureData) std::unique_lock lock(mMutex); // Remove it from the queue if it is already there auto td = mTextureDataLookup.find(textureData.get()); - if (td != mTextureDataLookup.end()) + if (td != mTextureDataLookup.cend()) { mTextureDataQ.erase((*td).second); mTextureDataLookup.erase(td); @@ -195,7 +195,7 @@ void TextureLoader::load(std::shared_ptr textureData) // Put it on the start of the queue as we want the newly requested textures to load first mTextureDataQ.push_front(textureData); - mTextureDataLookup[textureData.get()] = mTextureDataQ.begin(); + mTextureDataLookup[textureData.get()] = mTextureDataQ.cbegin(); mEvent.notify_one(); } } @@ -205,7 +205,7 @@ void TextureLoader::remove(std::shared_ptr textureData) // Just remove it from the queue so we don't attempt to load it std::unique_lock lock(mMutex); auto td = mTextureDataLookup.find(textureData.get()); - if (td != mTextureDataLookup.end()) + if (td != mTextureDataLookup.cend()) { mTextureDataQ.erase((*td).second); mTextureDataLookup.erase(td); diff --git a/es-core/src/resources/TextureDataManager.h b/es-core/src/resources/TextureDataManager.h index a9c871596f..c7b3a029d8 100644 --- a/es-core/src/resources/TextureDataManager.h +++ b/es-core/src/resources/TextureDataManager.h @@ -28,7 +28,7 @@ class TextureLoader void threadProc(); std::list > mTextureDataQ; - std::map >::iterator > mTextureDataLookup; + std::map >::const_iterator > mTextureDataLookup; std::thread* mThread; std::mutex mMutex; @@ -79,7 +79,7 @@ class TextureDataManager private: std::list > mTextures; - std::map >::iterator > mTextureLookup; + std::map >::const_iterator > mTextureLookup; std::shared_ptr mBlank; TextureLoader* mLoader; }; diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index b63f0bc60f..bef2fc7f44 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -114,7 +114,7 @@ std::shared_ptr TextureResource::get(const std::string& path, b TextureKeyType key(canonicalPath, tile); auto foundTexture = sTextureMap.find(key); - if(foundTexture != sTextureMap.end()) + if(foundTexture != sTextureMap.cend()) { if(!foundTexture->second.expired()) return foundTexture->second.lock(); From 223b68b949dd308bd223cccb00b1a3513b2647ca Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Sat, 11 Nov 2017 22:48:49 +0000 Subject: [PATCH 207/603] Implement libcec4 compatibility & fix debug logging Needed for Raspbian stretch. --- es-core/src/CECInput.cpp | 46 ++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/es-core/src/CECInput.cpp b/es-core/src/CECInput.cpp index ec41d7a43d..0f628b01d4 100644 --- a/es-core/src/CECInput.cpp +++ b/es-core/src/CECInput.cpp @@ -16,6 +16,32 @@ extern int SDL_USER_CECBUTTONUP; CECInput* CECInput::sInstance = nullptr; #ifdef HAVE_LIBCEC +#if CEC_LIB_VERSION_MAJOR >= 4 +static void onAlert(void* /*cbParam*/, const CEC::libcec_alert /*type*/, const CEC::libcec_parameter /*param*/) +{ + return; +} + +static void onCommand(void* /*cbParam*/, const CEC::cec_command* /*command*/) +{ + return; +} + +static void onKeyPress(void* /*cbParam*/, const CEC::cec_keypress* key) +{ + SDL_Event event; + event.type = (key->duration > 0) ? SDL_USER_CECBUTTONUP : SDL_USER_CECBUTTONDOWN; + event.user.code = key->keycode; + SDL_PushEvent(&event); + + return; +} + +static void onLogMessage(void* /*cbParam*/, const CEC::cec_log_message* /*message*/) +{ + return; +} +#else static int onAlert(void* /*cbParam*/, const CEC::libcec_alert /*type*/, const CEC::libcec_parameter /*param*/) { return 0; @@ -40,6 +66,7 @@ static int onLogMessage(void* /*cbParam*/, const CEC::cec_log_message /*message* { return 0; } +#endif #endif // HAVE_LIBCEC void CECInput::init() @@ -70,34 +97,41 @@ CECInput::CECInput() : mlibCEC(nullptr) config.callbacks = &callbacks; config.deviceTypes.Add(CEC::CEC_DEVICE_TYPE_PLAYBACK_DEVICE); +#if CEC_LIB_VERSION_MAJOR >= 4 + callbacks.alert = &onAlert; + callbacks.commandReceived = &onCommand; + callbacks.keyPress = &onKeyPress; + callbacks.logMessage = &onLogMessage; +#else callbacks.CBCecAlert = &onAlert; callbacks.CBCecCommand = &onCommand; callbacks.CBCecKeyPress = &onKeyPress; callbacks.CBCecLogMessage = &onLogMessage; +#endif mlibCEC = LibCecInitialise(&config); - + if(!mlibCEC) { LOG(LogInfo) << "CECInput::LibCecInitialise failed"; return; } - CEC::cec_adapter adapters[10]; - int8_t numAdapters = mlibCEC->FindAdapters(adapters, 10, nullptr); + CEC::cec_adapter_descriptor adapters[10]; + int8_t numAdapters = mlibCEC->DetectAdapters(adapters, 10, nullptr, true); if(numAdapters <= 0) { - LOG(LogInfo) << "CECInput::mAdapter->FindAdapters failed"; + LOG(LogInfo) << "CECInput::mAdapter->DetectAdapters failed"; UnloadLibCec(mlibCEC); mlibCEC = nullptr; return; } for(int i = 0; i < numAdapters; ++i) - LOG(LogDebug) << "adapter: " << i << " path: " << adapters[i].comm << " comm: " << adapters[i].comm; + LOG(LogDebug) << "adapter: " << i << " path: " << adapters[i].strComPath << " name: " << adapters[i].strComName; - if(!mlibCEC->Open(adapters[0].comm)) + if(!mlibCEC->Open(adapters[0].strComName)) { LOG(LogInfo) << "CECInput::mAdapter->Open failed"; UnloadLibCec(mlibCEC); From e0585cf501d83641934a914b9e2a50a6d25c07a2 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 13 Nov 2017 00:21:20 +0000 Subject: [PATCH 208/603] bump version to v2.7.2 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index e7537e1c68..627f8d60fc 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -6,12 +6,12 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 7 -#define PROGRAM_VERSION_MAINTENANCE 1 -#define PROGRAM_VERSION_STRING "2.7.1rp" +#define PROGRAM_VERSION_MAINTENANCE 2 +#define PROGRAM_VERSION_STRING "2.7.2rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,7,1\0" +#define RESOURCE_VERSION_STRING "2,7,2\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE #endif // ES_APP_EMULATION_STATION_H From 92b73bd84726ed4ea43d1878161918f4fccbbe37 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 13 Nov 2017 23:16:38 +0100 Subject: [PATCH 209/603] Cleaning up a lot of math functions --- es-app/src/SystemData.cpp | 4 +- es-app/src/VolumeControl.cpp | 5 +- es-app/src/animations/LaunchAnimation.h | 8 +- es-app/src/animations/MoveCameraAnimation.h | 2 +- es-app/src/components/AsyncReqComponent.cpp | 2 +- es-app/src/components/RatingComponent.cpp | 8 +- es-app/src/components/TextListComponent.h | 6 +- .../src/guis/GuiGeneralScreensaverOptions.cpp | 2 +- es-app/src/guis/GuiMenu.cpp | 4 +- es-app/src/guis/GuiMetaDataEd.cpp | 2 +- .../guis/GuiSlideshowScreensaverOptions.cpp | 2 +- .../src/guis/GuiVideoScreensaverOptions.cpp | 2 +- es-app/src/views/SystemView.cpp | 24 +- es-app/src/views/ViewController.cpp | 4 +- .../views/gamelist/DetailedGameListView.cpp | 2 +- .../src/views/gamelist/VideoGameListView.cpp | 2 +- es-core/CMakeLists.txt | 16 + es-core/src/Renderer_draw_gl.cpp | 4 +- es-core/src/Util.cpp | 7 - es-core/src/Util.h | 4 - es-core/src/Window.cpp | 4 +- es-core/src/animations/Animation.h | 33 -- es-core/src/components/ButtonComponent.cpp | 2 +- es-core/src/components/ComponentList.cpp | 4 +- es-core/src/components/HelpComponent.cpp | 2 +- es-core/src/components/ImageComponent.cpp | 10 +- es-core/src/components/MenuComponent.cpp | 4 +- es-core/src/components/TextComponent.cpp | 2 +- es-core/src/components/VideoVlcComponent.cpp | 12 +- es-core/src/guis/GuiMsgBox.cpp | 6 +- es-core/src/math/Misc.cpp | 117 +++++++ es-core/src/math/Misc.h | 63 ++-- es-core/src/math/Transform4x4f.cpp | 278 +++++++++++++++++ es-core/src/math/Transform4x4f.h | 285 +----------------- es-core/src/math/Vector2f.cpp | 19 ++ es-core/src/math/Vector2f.h | 56 ++-- es-core/src/math/Vector2i.cpp | 1 + es-core/src/math/Vector2i.h | 48 +-- es-core/src/math/Vector3f.cpp | 21 ++ es-core/src/math/Vector3f.h | 58 ++-- es-core/src/math/Vector4f.cpp | 23 ++ es-core/src/math/Vector4f.h | 62 ++-- es-core/src/resources/Font.cpp | 9 +- es-core/src/resources/Font.h | 8 +- es-core/src/resources/TextureData.cpp | 10 +- 45 files changed, 697 insertions(+), 550 deletions(-) create mode 100644 es-core/src/math/Misc.cpp create mode 100644 es-core/src/math/Transform4x4f.cpp create mode 100644 es-core/src/math/Vector2f.cpp create mode 100644 es-core/src/math/Vector2i.cpp create mode 100644 es-core/src/math/Vector3f.cpp create mode 100644 es-core/src/math/Vector4f.cpp diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index da84f5455d..f1d2b755ad 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -447,7 +447,7 @@ SystemData* SystemData::getRandomSystem() } // get random number in range - int target = (int) std::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); + int target = (int) Math::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); for (auto it = sSystemVector.cbegin(); it != sSystemVector.cend(); it++) { if ((*it)->isGameSystem()) @@ -475,7 +475,7 @@ FileData* SystemData::getRandomGame() // get random number in range if (total == 0) return NULL; - target = (int) std::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); + target = (int) Math::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); return list.at(target); } diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index c721183073..09e6530a05 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -1,5 +1,6 @@ #include "VolumeControl.h" +#include "math/Misc.h" #include "Log.h" #include "Settings.h" #ifdef WIN32 @@ -299,7 +300,7 @@ int VolumeControl::getVolume() const mixerControlDetails.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); if (mixerGetControlDetails((HMIXEROBJ)mixerHandle, &mixerControlDetails, MIXER_GETCONTROLDETAILSF_VALUE) == MMSYSERR_NOERROR) { - volume = (uint8_t)round((value.dwValue * 100) / 65535); + volume = (uint8_t)Math::round((value.dwValue * 100) / 65535); } else { @@ -312,7 +313,7 @@ int VolumeControl::getVolume() const float floatVolume = 0.0f; //0-1 if (endpointVolume->GetMasterVolumeLevelScalar(&floatVolume) == S_OK) { - volume = (uint8_t)round(floatVolume * 100.0f); + volume = (uint8_t)Math::round(floatVolume * 100.0f); LOG(LogInfo) << " getting volume as " << volume << " ( from float " << floatVolume << ")"; } else diff --git a/es-app/src/animations/LaunchAnimation.h b/es-app/src/animations/LaunchAnimation.h index be5327915e..40d9f093d9 100644 --- a/es-app/src/animations/LaunchAnimation.h +++ b/es-app/src/animations/LaunchAnimation.h @@ -41,18 +41,18 @@ class LaunchAnimation : public Animation { cameraOut = Transform4x4f::Identity(); - float zoom = lerp(1.0, 4.25f, t*t); + float zoom = Math::lerp(1.0, 4.25f, t*t); cameraOut.scale(zoom); const float sw = (float)Renderer::getScreenWidth() / zoom; const float sh = (float)Renderer::getScreenHeight() / zoom; - Vector3f centerPoint = lerp(-mCameraStart.translation() + Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0), - mTarget, smoothStep(0.0, 1.0, t)); + const Vector2f startPoint = Vector2f(-mCameraStart.translation()) + Vector2f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f); + const Vector2f centerPoint = Vector2f().lerp(startPoint, Vector2f(mTarget), Math::smootherStep(0.0, 1.0, t)); cameraOut.translate(Vector3f((sw / 2) - centerPoint.x(), (sh / 2) - centerPoint.y(), 0)); - fadeOut = lerp(0.0, 1.0, t*t); + fadeOut = Math::lerp(0.0, 1.0, t*t); } private: diff --git a/es-app/src/animations/MoveCameraAnimation.h b/es-app/src/animations/MoveCameraAnimation.h index b901a0f841..b5d05ec33e 100644 --- a/es-app/src/animations/MoveCameraAnimation.h +++ b/es-app/src/animations/MoveCameraAnimation.h @@ -15,7 +15,7 @@ class MoveCameraAnimation : public Animation { // cubic ease out t -= 1; - cameraOut.translation() = -lerp(-mCameraStart.translation(), mTarget, t*t*t + 1); + cameraOut.translation() = -Vector3f().lerp(-mCameraStart.translation(), mTarget, t*t*t + 1); } private: diff --git a/es-app/src/components/AsyncReqComponent.cpp b/es-app/src/components/AsyncReqComponent.cpp index e05baa34a5..0fae8130b1 100644 --- a/es-app/src/components/AsyncReqComponent.cpp +++ b/es-app/src/components/AsyncReqComponent.cpp @@ -41,7 +41,7 @@ void AsyncReqComponent::render(const Transform4x4f& parentTrans) trans = trans.translate(Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0)); Renderer::setMatrix(trans); - Vector3f point(cos(mTime * 0.01f) * 12, sin(mTime * 0.01f) * 12, 0); + Vector3f point(Math::cos(mTime * 0.01f) * 12, Math::sin(mTime * 0.01f) * 12, 0); Renderer::drawRect((int)point.x(), (int)point.y(), 8, 8, 0x0000FFFF); } diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index 3c39e92cd1..924a0cbccf 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -64,7 +64,7 @@ void RatingComponent::onSizeChanged() if(mSize.y() > 0) { - size_t heightPx = (size_t)round(mSize.y()); + size_t heightPx = (size_t)Math::round(mSize.y()); if (mFilledTexture) mFilledTexture->rasterizeAt(heightPx, heightPx); if(mUnfilledTexture) @@ -78,9 +78,9 @@ void RatingComponent::updateVertices() { const float numStars = NUM_RATING_STARS; - const float h = round(getSize().y()); // is the same as a single star's width - const float w = round(h * mValue * numStars); - const float fw = round(h * numStars); + const float h = Math::round(getSize().y()); // is the same as a single star's width + const float w = Math::round(h * mValue * numStars); + const float fw = Math::round(h * numStars); mVertices[0].pos = Vector2f(0.0f, 0.0f); mVertices[0].tex = Vector2f(0.0f, 1.0f); diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 8c539f5544..e81a6257ef 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -137,7 +137,7 @@ void TextListComponent::render(const Transform4x4f& parentTrans) if(size() == 0) return; - const float entrySize = std::max(font->getHeight(1.0), (float)font->getSize()) * mLineSpacing; + const float entrySize = Math::max(font->getHeight(1.0), (float)font->getSize()) * mLineSpacing; int startEntry = 0; @@ -316,7 +316,7 @@ void TextListComponent::update(int deltaTime) while(mMarqueeTime > maxTime) mMarqueeTime -= maxTime; - mMarqueeOffset = Math::scroll_loop(delay, scrollTime + returnTime, mMarqueeTime, scrollLength + returnLength); + mMarqueeOffset = Math::Scroll::loop(delay, scrollTime + returnTime, mMarqueeTime, scrollLength + returnLength); if(mMarqueeOffset > (scrollLength - (limit - returnLength))) mMarqueeOffset2 = mMarqueeOffset - (scrollLength + returnLength); @@ -373,7 +373,7 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c } setFont(Font::getFromTheme(elem, properties, mFont)); - const float selectorHeight = std::max(mFont->getHeight(1.0), (float)mFont->getSize()) * mLineSpacing; + const float selectorHeight = Math::max(mFont->getHeight(1.0), (float)mFont->getSize()) * mLineSpacing; setSelectorHeight(selectorHeight); if(properties & SOUND && elem->has("scrollSound")) diff --git a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp index 99d583fb48..40c8a25acc 100644 --- a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp +++ b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp @@ -14,7 +14,7 @@ GuiGeneralScreensaverOptions::GuiGeneralScreensaverOptions(Window* window, const screensaver_time->setValue((float)(Settings::getInstance()->getInt("ScreenSaverTime") / (1000 * 60))); addWithLabel("SCREENSAVER AFTER", screensaver_time); addSaveFunc([screensaver_time] { - Settings::getInstance()->setInt("ScreenSaverTime", (int)round(screensaver_time->getValue()) * (1000 * 60)); + Settings::getInstance()->setInt("ScreenSaverTime", (int)Math::round(screensaver_time->getValue()) * (1000 * 60)); PowerSaver::updateTimeouts(); }); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index b030149ca9..5ec03d65ef 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -90,7 +90,7 @@ void GuiMenu::openSoundSettings() auto volume = std::make_shared(mWindow, 0.f, 100.f, 1.f, "%"); volume->setValue((float)VolumeControl::getInstance()->getVolume()); s->addWithLabel("SYSTEM VOLUME", volume); - s->addSaveFunc([volume] { VolumeControl::getInstance()->setVolume((int)round(volume->getValue())); }); + s->addSaveFunc([volume] { VolumeControl::getInstance()->setVolume((int)Math::round(volume->getValue())); }); if (ViewController::get()->isUIModeFull()) { @@ -317,7 +317,7 @@ void GuiMenu::openOtherSettings() auto max_vram = std::make_shared(mWindow, 0.f, 1000.f, 10.f, "Mb"); max_vram->setValue((float)(Settings::getInstance()->getInt("MaxVRAM"))); s->addWithLabel("VRAM LIMIT", max_vram); - s->addSaveFunc([max_vram] { Settings::getInstance()->setInt("MaxVRAM", (int)round(max_vram->getValue())); }); + s->addSaveFunc([max_vram] { Settings::getInstance()->setInt("MaxVRAM", (int)Math::round(max_vram->getValue())); }); // power saver auto power_saver = std::make_shared< OptionListComponent >(mWindow, "POWER SAVER MODES", false); diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index c81463c080..8ee20c8f90 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -156,7 +156,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mGrid.setEntry(mButtons, Vector2i(0, 2), true, false); // resize + center - float width = (float) std::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); + float width = (float) Math::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); setSize(width, Renderer::getScreenHeight() * 0.82f); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); } diff --git a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp index 3ddfe904f4..57cc6cb172 100644 --- a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp +++ b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp @@ -15,7 +15,7 @@ GuiSlideshowScreensaverOptions::GuiSlideshowScreensaverOptions(Window* window, c sss_image_sec->setValue((float)(Settings::getInstance()->getInt("ScreenSaverSwapImageTimeout") / (1000))); addWithLabel(row, "SWAP IMAGE AFTER (SECS)", sss_image_sec); addSaveFunc([sss_image_sec] { - int playNextTimeout = (int)round(sss_image_sec->getValue()) * (1000); + int playNextTimeout = (int)Math::round(sss_image_sec->getValue()) * (1000); Settings::getInstance()->setInt("ScreenSaverSwapImageTimeout", playNextTimeout); PowerSaver::updateTimeouts(); }); diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.cpp b/es-app/src/guis/GuiVideoScreensaverOptions.cpp index c29dc8d793..2fcd111cf6 100644 --- a/es-app/src/guis/GuiVideoScreensaverOptions.cpp +++ b/es-app/src/guis/GuiVideoScreensaverOptions.cpp @@ -13,7 +13,7 @@ GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const cha swap->setValue((float)(Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") / (1000))); addWithLabel("SWAP VIDEO AFTER (SECS)", swap); addSaveFunc([swap] { - int playNextTimeout = (int)round(swap->getValue()) * (1000); + int playNextTimeout = (int)Math::round(swap->getValue()) * (1000); Settings::getInstance()->setInt("ScreenSaverSwapVideoTimeout", playNextTimeout); PowerSaver::updateTimeouts(); }); diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 50aeaf4a33..8fb3d6984a 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -240,7 +240,7 @@ void SystemView::onCursorChanged(const CursorState& state) Animation* infoFadeOut = new LambdaAnimation( [infoStartOpacity, this] (float t) { - mSystemInfo.setOpacity((unsigned char)(lerp(infoStartOpacity, 0.f, t) * 255)); + mSystemInfo.setOpacity((unsigned char)(Math::lerp(infoStartOpacity, 0.f, t) * 255)); }, (int)(infoStartOpacity * (goFast ? 10 : 150))); unsigned int gameCount = getSelected()->getDisplayedGameCount(); @@ -260,7 +260,7 @@ void SystemView::onCursorChanged(const CursorState& state) Animation* infoFadeIn = new LambdaAnimation( [this](float t) { - mSystemInfo.setOpacity((unsigned char)(lerp(0.f, 1.f, t) * 255)); + mSystemInfo.setOpacity((unsigned char)(Math::lerp(0.f, 1.f, t) * 255)); }, goFast ? 10 : 300); // wait 600ms to fade in @@ -279,7 +279,7 @@ void SystemView::onCursorChanged(const CursorState& state) [this, startExtrasFade, startPos, endPos, posMax, move_carousel](float t) { t -= 1; - float f = lerp(startPos, endPos, t*t*t + 1); + float f = Math::lerp(startPos, endPos, t*t*t + 1); if(f < 0) f += posMax; if(f >= posMax) @@ -289,11 +289,11 @@ void SystemView::onCursorChanged(const CursorState& state) t += 1; if(t < 0.3f) - this->mExtrasFadeOpacity = lerp(0.0f, 1.0f, t / 0.3f + startExtrasFade); + this->mExtrasFadeOpacity = Math::lerp(0.0f, 1.0f, t / 0.3f + startExtrasFade); else if(t < 0.7f) this->mExtrasFadeOpacity = 1.0f; else - this->mExtrasFadeOpacity = lerp(1.0f, 0.0f, (t - 0.7f) / 0.3f); + this->mExtrasFadeOpacity = Math::lerp(1.0f, 0.0f, (t - 0.7f) / 0.3f); if(t > 0.5f) this->mExtrasCamOffset = endPos; @@ -305,7 +305,7 @@ void SystemView::onCursorChanged(const CursorState& state) [this, startPos, endPos, posMax, move_carousel](float t) { t -= 1; - float f = lerp(startPos, endPos, t*t*t + 1); + float f = Math::lerp(startPos, endPos, t*t*t + 1); if(f < 0) f += posMax; if(f >= posMax) @@ -320,7 +320,7 @@ void SystemView::onCursorChanged(const CursorState& state) [this, startPos, endPos, posMax, move_carousel ](float t) { t -= 1; - float f = lerp(startPos, endPos, t*t*t + 1); + float f = Math::lerp(startPos, endPos, t*t*t + 1); if(f < 0) f += posMax; if(f >= posMax) @@ -472,7 +472,7 @@ void SystemView::renderCarousel(const Transform4x4f& trans) } int center = (int)(mCamOffset); - int logoCount = std::min(mCarousel.maxLogoCount, (int)mEntries.size()); + int logoCount = Math::min(mCarousel.maxLogoCount, (int)mEntries.size()); // Adding texture loading buffers depending on scrolling speed and status int bufferIndex = getScrollingVelocity() + 1; @@ -498,11 +498,11 @@ void SystemView::renderCarousel(const Transform4x4f& trans) float distance = i - mCamOffset; float scale = 1.0f + ((mCarousel.logoScale - 1.0f) * (1.0f - fabs(distance))); - scale = std::min(mCarousel.logoScale, std::max(1.0f, scale)); + scale = Math::min(mCarousel.logoScale, Math::max(1.0f, scale)); scale /= mCarousel.logoScale; - int opacity = (int) round(0x80 + ((0xFF - 0x80) * (1.0f - fabs(distance)))); - opacity = std::max((int) 0x80, opacity); + int opacity = (int) Math::round(0x80 + ((0xFF - 0x80) * (1.0f - fabs(distance)))); + opacity = Math::max((int) 0x80, opacity); const std::shared_ptr &comp = mEntries.at(index).data.logo; if (mCarousel.type == VERTICAL_WHEEL) { @@ -631,7 +631,7 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) if (elem->has("logoSize")) mCarousel.logoSize = elem->get("logoSize") * mSize; if (elem->has("maxLogoCount")) - mCarousel.maxLogoCount = (int) std::round(elem->get("maxLogoCount")); + mCarousel.maxLogoCount = (int) Math::round(elem->get("maxLogoCount")); if (elem->has("zIndex")) mCarousel.zIndex = elem->get("zIndex"); if (elem->has("logoRotation")) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index b8f646cb78..7a4f8f5b84 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -149,7 +149,7 @@ void ViewController::playViewTransition() cancelAnimation(0); auto fadeFunc = [this](float t) { - mFadeOpacity = lerp(0, 1, t); + mFadeOpacity = Math::lerp(0, 1, t); }; const static int FADE_DURATION = 240; // fade in/out time @@ -217,7 +217,7 @@ void ViewController::launch(FileData* game, Vector3f center) { // fade out, launch game, fade back in auto fadeFunc = [this](float t) { - mFadeOpacity = lerp(0.0f, 1.0f, t); + mFadeOpacity = Math::lerp(0.0f, 1.0f, t); }; setAnimation(new LambdaAnimation(fadeFunc, 800), 0, [this, game, fadeFunc] { diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 59805fb38b..e150dbe708 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -228,7 +228,7 @@ void DetailedGameListView::updateInfoPanel() { auto func = [comp](float t) { - comp->setOpacity((unsigned char)(lerp(0.0f, 1.0f, t)*255)); + comp->setOpacity((unsigned char)(Math::lerp(0.0f, 1.0f, t)*255)); }; comp->setAnimation(new LambdaAnimation(func, 150), 0, nullptr, fadingOut); } diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index b992863b64..20af43a558 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -286,7 +286,7 @@ void VideoGameListView::updateInfoPanel() { auto func = [comp](float t) { - comp->setOpacity((unsigned char)(lerp(0.0f, 1.0f, t)*255)); + comp->setOpacity((unsigned char)(Math::lerp(0.0f, 1.0f, t)*255)); }; comp->setAnimation(new LambdaAnimation(func, 150), 0, nullptr, fadingOut); } diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index fabae068f9..c0948a88cb 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -54,6 +54,14 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.h ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.h + # Math + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Misc.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Transform4x4f.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector2f.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector2i.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector3f.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector4f.h + # Resources ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h @@ -114,6 +122,14 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiMsgBox.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/guis/GuiTextEditPopup.cpp + # Math + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Misc.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Transform4x4f.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector2f.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector2i.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector3f.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector4f.cpp + # Resources ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp diff --git a/es-core/src/Renderer_draw_gl.cpp b/es-core/src/Renderer_draw_gl.cpp index 539ef5d6ed..ac3a89a5c6 100644 --- a/es-core/src/Renderer_draw_gl.cpp +++ b/es-core/src/Renderer_draw_gl.cpp @@ -1,7 +1,7 @@ #include "Renderer.h" +#include "math/Misc.h" #include "Log.h" -#include #include namespace Renderer { @@ -92,7 +92,7 @@ namespace Renderer { void drawRect(float x, float y, float w, float h, unsigned int color, GLenum blend_sfactor, GLenum blend_dfactor) { - drawRect((int)round(x), (int)round(y), (int)round(w), (int)round(h), color, blend_sfactor, blend_dfactor); + drawRect((int)Math::round(x), (int)Math::round(y), (int)Math::round(w), (int)Math::round(h), color, blend_sfactor, blend_dfactor); } void drawRect(int x, int y, int w, int h, unsigned int color, GLenum blend_sfactor, GLenum blend_dfactor) diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index 6171ca2b24..9c4b949b3f 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -29,13 +29,6 @@ std::string strToUpper(const std::string& str) return strToUpper(str.c_str()); } -#if defined(_WIN32) && _MSC_VER < 1800 -float round(float num) -{ - return (float)((int)(num + 0.5f)); -} -#endif - // embedded resources, e.g. ":/font.ttf", need to be properly handled too std::string getCanonicalPath(const std::string& path) { diff --git a/es-core/src/Util.h b/es-core/src/Util.h index 44091ca357..f48ff0ebb9 100644 --- a/es-core/src/Util.h +++ b/es-core/src/Util.h @@ -9,10 +9,6 @@ std::string strToUpper(const char* from); std::string& strToUpper(std::string& str); std::string strToUpper(const std::string& str); -#if defined(_WIN32) && _MSC_VER < 1800 -float round(float num); -#endif - std::string getCanonicalPath(const std::string& str); boost::filesystem::path removeCommonPathUsingStrings(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains); diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 691810ddc3..62abacf322 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -308,8 +308,8 @@ void Window::renderLoadingScreen() auto& font = mDefaultFonts.at(1); TextCache* cache = font->buildTextCache("LOADING...", 0, 0, 0x656565FF); - trans = trans.translate(Vector3f(round((Renderer::getScreenWidth() - cache->metrics.size.x()) / 2.0f), - round(Renderer::getScreenHeight() * 0.835f), 0.0f)); + trans = trans.translate(Vector3f(Math::round((Renderer::getScreenWidth() - cache->metrics.size.x()) / 2.0f), + Math::round(Renderer::getScreenHeight() * 0.835f), 0.0f)); Renderer::setMatrix(trans); font->renderTextCache(cache); delete cache; diff --git a/es-core/src/animations/Animation.h b/es-core/src/animations/Animation.h index 2039dd965b..ee2471d157 100644 --- a/es-core/src/animations/Animation.h +++ b/es-core/src/animations/Animation.h @@ -9,37 +9,4 @@ class Animation virtual void apply(float t) = 0; }; - -// useful helper/interpolation functions -inline float clamp(float min, float max, float val) -{ - if(val < min) - val = min; - else if(val > max) - val = max; - - return val; -} - -//http://en.wikipedia.org/wiki/Smoothstep -inline float smoothStep(float edge0, float edge1, float x) -{ - // Scale, and clamp x to 0..1 range - x = clamp(0, 1, (x - edge0)/(edge1 - edge0)); - - // Evaluate polynomial - return x*x*x*(x*(x*6 - 15) + 10); -} - -template -T lerp(const T& start, const T& end, float t) -{ - if(t <= 0.0f) - return start; - if(t >= 1.0f) - return end; - - return (start * (1 - t) + end * t); -} - #endif // ES_CORE_ANIMATIONS_ANIMATION_H diff --git a/es-core/src/components/ButtonComponent.cpp b/es-core/src/components/ButtonComponent.cpp index 4ef9984062..a04592898c 100644 --- a/es-core/src/components/ButtonComponent.cpp +++ b/es-core/src/components/ButtonComponent.cpp @@ -46,7 +46,7 @@ void ButtonComponent::setText(const std::string& text, const std::string& helpTe mTextCache = std::unique_ptr(mFont->buildTextCache(mText, 0, 0, getCurTextColor())); float minWidth = mFont->sizeText("DELETE").x() + 12; - setSize(std::max(mTextCache->metrics.size.x() + 12, minWidth), mTextCache->metrics.size.y()); + setSize(Math::max(mTextCache->metrics.size.x() + 12, minWidth), mTextCache->metrics.size.y()); updateHelpPrompts(); } diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 148873b60e..bd2abb3790 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -169,10 +169,10 @@ void ComponentList::render(const Transform4x4f& parentTrans) Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); Renderer::pushClipRect(Vector2i((int)trans.translation().x(), (int)trans.translation().y()), - Vector2i((int)round(dim.x()), (int)round(dim.y() + 1))); + Vector2i((int)Math::round(dim.x()), (int)Math::round(dim.y() + 1))); // scroll the camera - trans.translate(Vector3f(0, -round(mCameraOffset), 0)); + trans.translate(Vector3f(0, -Math::round(mCameraOffset), 0)); // draw our entries std::vector drawAfterCursor; diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index 6789716655..a89412f406 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -67,7 +67,7 @@ void HelpComponent::updateGrid() std::vector< std::shared_ptr > labels; float width = 0; - const float height = round(font->getLetterHeight() * 1.25f); + const float height = Math::round(font->getLetterHeight() * 1.25f); for(auto it = mPrompts.cbegin(); it != mPrompts.cend(); it++) { auto icon = std::make_shared(mWindow); diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 5cadc55342..fa9f73c186 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -59,7 +59,7 @@ void ImageComponent::resize() } // for SVG rasterization, always calculate width from rounded height (see comment above) - mSize[1] = round(mSize[1]); + mSize[1] = Math::round(mSize[1]); mSize[0] = (mSize[1] / textureSize.y()) * textureSize.x(); }else{ @@ -71,17 +71,17 @@ void ImageComponent::resize() // for SVG rasterization, we always calculate width from rounded height (see comment above) if(!mTargetSize.x() && mTargetSize.y()) { - mSize[1] = round(mTargetSize.y()); + mSize[1] = Math::round(mTargetSize.y()); mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); }else if(mTargetSize.x() && !mTargetSize.y()) { - mSize[1] = round((mTargetSize.x() / textureSize.x()) * textureSize.y()); + mSize[1] = Math::round((mTargetSize.x() / textureSize.x()) * textureSize.y()); mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); } } } // mSize.y() should already be rounded - mTexture->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); + mTexture->rasterizeAt((int)Math::round(mSize.x()), (int)Math::round(mSize.y())); onSizeChanged(); } @@ -177,7 +177,7 @@ void ImageComponent::updateVertices() // we go through this mess to make sure everything is properly rounded // if we just round vertices at the end, edge cases occur near sizes of 0.5 Vector2f topLeft(0.0, 0.0); - Vector2f bottomRight(round(mSize.x()), round(mSize.y())); + Vector2f bottomRight(Math::round(mSize.x()), Math::round(mSize.y())); mVertices[0].pos = Vector2f(topLeft.x(), topLeft.y()); mVertices[1].pos = Vector2f(topLeft.x(), bottomRight.y()); diff --git a/es-core/src/components/MenuComponent.cpp b/es-core/src/components/MenuComponent.cpp index 63348d6c4d..09c9dfdc86 100644 --- a/es-core/src/components/MenuComponent.cpp +++ b/es-core/src/components/MenuComponent.cpp @@ -62,7 +62,7 @@ void MenuComponent::updateSize() } } - float width = (float) std::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); + float width = (float) Math::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); setSize(width, height); } @@ -128,6 +128,6 @@ std::shared_ptr makeArrow(Window* window) { auto bracket = std::make_shared(window); bracket->setImage(":/arrow.svg"); - bracket->setResize(0, round(Font::get(FONT_SIZE_MEDIUM)->getLetterHeight())); + bracket->setResize(0, Math::round(Font::get(FONT_SIZE_MEDIUM)->getLetterHeight())); return bracket; } diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index f7885139e6..f0d18d307f 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -107,7 +107,7 @@ void TextComponent::render(const Transform4x4f& parentTrans) if(mTextCache) { const Vector2f& textSize = mTextCache->metrics.size; - float yOff; + float yOff = 0; switch(mVerticalAlignment) { case ALIGN_TOP: diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 2d0ab0d557..2385d03f25 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -101,7 +101,7 @@ void VideoVlcComponent::resize() } // for SVG rasterization, always calculate width from rounded height (see comment above) - mSize[1] = round(mSize[1]); + mSize[1] = Math::round(mSize[1]); mSize[0] = (mSize[1] / textureSize.y()) * textureSize.x(); }else{ @@ -113,17 +113,17 @@ void VideoVlcComponent::resize() // for SVG rasterization, we always calculate width from rounded height (see comment above) if(!mTargetSize.x() && mTargetSize.y()) { - mSize[1] = round(mTargetSize.y()); + mSize[1] = Math::round(mTargetSize.y()); mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); }else if(mTargetSize.x() && !mTargetSize.y()) { - mSize[1] = round((mTargetSize.x() / textureSize.x()) * textureSize.y()); + mSize[1] = Math::round((mTargetSize.x() / textureSize.x()) * textureSize.y()); mSize[0] = (mSize.y() / textureSize.y()) * textureSize.x(); } } // mSize.y() should already be rounded - mTexture->rasterizeAt((int)round(mSize.x()), (int)round(mSize.y())); + mTexture->rasterizeAt((int)Math::round(mSize.x()), (int)Math::round(mSize.y())); onSizeChanged(); } @@ -327,8 +327,8 @@ void VideoVlcComponent::startVideo() mVideoWidth = (unsigned int) (mVideoWidth * resizeScale.y()); mVideoHeight = (unsigned int) (mVideoHeight * resizeScale.y()); } - mVideoHeight = (unsigned int) round(mVideoHeight); - mVideoWidth = (unsigned int) round(mVideoWidth); + mVideoHeight = (unsigned int) Math::round(mVideoHeight); + mVideoWidth = (unsigned int) Math::round(mVideoWidth); } } #endif diff --git a/es-core/src/guis/GuiMsgBox.cpp b/es-core/src/guis/GuiMsgBox.cpp index bd92cea70c..2a39f5f90d 100644 --- a/es-core/src/guis/GuiMsgBox.cpp +++ b/es-core/src/guis/GuiMsgBox.cpp @@ -47,13 +47,13 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, if(mMsg->getSize().x() < width && mButtonGrid->getSize().x() < width) { // mMsg and buttons are narrower than width - width = std::max(mButtonGrid->getSize().x(), mMsg->getSize().x()); - width = std::max(width, minWidth); + width = Math::max(mButtonGrid->getSize().x(), mMsg->getSize().x()); + width = Math::max(width, minWidth); } // now that we know width, we can find height mMsg->setSize(width, 0); // mMsg->getSize.y() now returns the proper length - const float msgHeight = std::max(Font::get(FONT_SIZE_LARGE)->getHeight(), mMsg->getSize().y()*1.225f); + const float msgHeight = Math::max(Font::get(FONT_SIZE_LARGE)->getHeight(), mMsg->getSize().y()*1.225f); setSize(width + HORIZONTAL_PADDING_PX*2, msgHeight + mButtonGrid->getSize().y()); // center for good measure diff --git a/es-core/src/math/Misc.cpp b/es-core/src/math/Misc.cpp new file mode 100644 index 0000000000..6ea4fbffc7 --- /dev/null +++ b/es-core/src/math/Misc.cpp @@ -0,0 +1,117 @@ +#include "math/Misc.h" + +#include + +namespace Math +{ + // added here to avoid including math.h whenever these are used + double cos(const double _num) + { + return ::cos(_num); + + } // Math::cos + + double sin(const double _num) + { + return ::sin(_num); + + } // Math::sin + + float min(const float _num1, const float _num2) + { + return (_num1 < _num2) ? _num1 : _num2; + + } // Math::min + + float max(const float _num1, const float _num2) + { + return (_num1 > _num2) ? _num1 : _num2; + + } // Math::max + + float clamp(const float _min, const float _max, const float _num) + { + return max(min(_num, _max), _min); + + } // Math::clamp + + float round(const float _num) + { + return (int)(_num + 0.5); + + } // Math::round + + float lerp(const float _start, const float _end, const float _fraction) + { + return (_start + ((_end - _start) * clamp(0, 1, _fraction))); + + } // Math::lerp + + float smoothStep(const float _left, const float _right, const float _x) + { + const float x = clamp(0, 1, (_x - _left)/(_right - _left)); + return x * x * (3 - (2 * x)); + + } // Math::smoothStep + + float smootherStep(const float _left, const float _right, const float _x) + { + const float x = clamp(0, 1, (_x - _left)/(_right - _left)); + return x * x * x * (x * ((x * 6) - 15) + 10); + + } // Math::smootherStep + + namespace Scroll + { + float bounce(const float _delayTime, const float _scrollTime, const float _currentTime, const int _scrollLength) + { + if(_currentTime < _delayTime) + { + // wait + return 0; + } + else if(_currentTime < (_delayTime + _scrollTime)) + { + // lerp from 0 to scrollLength + const float fraction = (_currentTime - _delayTime) / _scrollTime; + return lerp(0.0f, _scrollLength, smootherStep(0, 1, fraction)); + } + else if(_currentTime < (_delayTime + _scrollTime + _delayTime)) + { + // wait some more + return _scrollLength; + } + else if(_currentTime < (_delayTime + _scrollTime + _delayTime + _scrollTime)) + { + // lerp back from scrollLength to 0 + const float fraction = (_currentTime - _delayTime - _scrollTime - _delayTime) / _scrollTime; + return lerp(_scrollLength, 0.0f, smootherStep(0, 1, fraction)); + } + + // and back to waiting + return 0; + + } // Math::Scroll::bounce + + float loop(const float _delayTime, const float _scrollTime, const float _currentTime, const int _scrollLength) + { + if(_currentTime < _delayTime) + { + // wait + return 0; + } + else if(_currentTime < (_delayTime + _scrollTime)) + { + // lerp from 0 to scrollLength + const float fraction = (_currentTime - _delayTime) / _scrollTime; + return lerp(0.0f, _scrollLength, fraction); + } + + // and back to waiting + return 0; + + } // Math::Scroll::loop + + } // Math::Scroll:: + +} // Math:: diff --git a/es-core/src/math/Misc.h b/es-core/src/math/Misc.h index 7796eddf1c..2aa7e497ca 100644 --- a/es-core/src/math/Misc.h +++ b/es-core/src/math/Misc.h @@ -2,60 +2,31 @@ #ifndef ES_CORE_MATH_MISC_H #define ES_CORE_MATH_MISC_H -#include - #define ES_PI (3.1415926535897932384626433832795028841971693993751058209749445923) #define ES_RAD_TO_DEG(x) ((x) * (180.0 / ES_PI)) #define ES_DEG_TO_RAD(x) ((x) * (ES_PI / 180.0)) namespace Math { - inline float scroll_bounce(const float delayTime, const float scrollTime, const float currentTime, const int scrollLength) - { - if(currentTime < delayTime) - { - // wait - return 0; - } - else if(currentTime < (delayTime + scrollTime)) - { - // lerp from 0 to scrollLength - const float fraction = (currentTime - delayTime) / scrollTime; - return (float)(((1.0 - cos(ES_PI * fraction)) * 0.5) * scrollLength); - } - else if(currentTime < (delayTime + scrollTime + delayTime)) - { - // wait some more - return scrollLength; - } - else if(currentTime < (delayTime + scrollTime + delayTime + scrollTime)) - { - // lerp back from scrollLength to 0 - const float fraction = 1.0 - (currentTime - delayTime - scrollTime - delayTime) / scrollTime; - return (float)(((1.0 - cos(ES_PI * fraction)) * 0.5) * scrollLength); - } + // added here to avoid including math.h whenever these are used + double cos(const double _num); + double sin(const double _num); - // and back to waiting - return 0; - } - - inline float scroll_loop(const float delayTime, const float scrollTime, const float currentTime, const int scrollLength) + float min(const float _num1, const float _num2); + float max(const float _num1, const float _num2); + float clamp(const float _num, const float _min, const float _max); + float round(const float _num); + float lerp(const float _start, const float _end, const float _fraction); + float smoothStep(const float _left, const float _right, const float _x); + float smootherStep(const float _left, const float _right, const float _x); + + namespace Scroll { - if(currentTime < delayTime) - { - // wait - return 0; - } - else if(currentTime < (delayTime + scrollTime)) - { - // lerp from 0 to scrollLength - const float fraction = (currentTime - delayTime) / scrollTime; - return fraction * scrollLength; - } + float bounce(const float _delayTime, const float _scrollTime, const float _currentTime, const int _scrollLength); + float loop(const float _delayTime, const float _scrollTime, const float _currentTime, const int _scrollLength); + + } // Math::Scroll:: - // and back to waiting - return 0; - } -} +} // Math:: #endif // ES_CORE_MATH_MISC_H diff --git a/es-core/src/math/Transform4x4f.cpp b/es-core/src/math/Transform4x4f.cpp new file mode 100644 index 0000000000..ea056711c4 --- /dev/null +++ b/es-core/src/math/Transform4x4f.cpp @@ -0,0 +1,278 @@ +#include "math/Transform4x4f.h" + +const Transform4x4f Transform4x4f::operator*(const Transform4x4f& _other) const +{ + const float* tm = (float*)this; + const float* om = (float*)&_other; + + return + { + { + tm[ 0] * om[ 0] + tm[ 1] * om[ 4] + tm[ 2] * om[ 8], + tm[ 0] * om[ 1] + tm[ 1] * om[ 5] + tm[ 2] * om[ 9], + tm[ 0] * om[ 2] + tm[ 1] * om[ 6] + tm[ 2] * om[10], + 0 + }, + { + tm[ 4] * om[ 0] + tm[ 5] * om[ 4] + tm[ 6] * om[ 8], + tm[ 4] * om[ 1] + tm[ 5] * om[ 5] + tm[ 6] * om[ 9], + tm[ 4] * om[ 2] + tm[ 5] * om[ 6] + tm[ 6] * om[10], + 0 + }, + { + tm[ 8] * om[ 0] + tm[ 9] * om[ 4] + tm[10] * om[ 8], + tm[ 8] * om[ 1] + tm[ 9] * om[ 5] + tm[10] * om[ 9], + tm[ 8] * om[ 2] + tm[ 9] * om[ 6] + tm[10] * om[10], + 0 + }, + { + tm[ 0] * om[12] + tm[ 4] * om[13] + tm[ 8] * om[14] + tm[12], + tm[ 1] * om[12] + tm[ 5] * om[13] + tm[ 9] * om[14] + tm[13], + tm[ 2] * om[12] + tm[ 6] * om[13] + tm[10] * om[14] + tm[14], + 1 + } + }; + +} // operator* + +const Vector3f Transform4x4f::operator*(const Vector3f& _other) const +{ + const float* tm = (float*)this; + const float* ov = (float*)&_other; + + return + { + tm[ 0] * ov[0] + tm[ 4] * ov[1] + tm[ 8] * ov[2] + tm[12], + tm[ 1] * ov[0] + tm[ 5] * ov[1] + tm[ 9] * ov[2] + tm[13], + tm[ 2] * ov[0] + tm[ 6] * ov[1] + tm[10] * ov[2] + tm[14] + }; + +} // operator* + +Transform4x4f& Transform4x4f::invert(const Transform4x4f& _other) +{ + float* tm = (float*)this; + const float* om = (float*)&_other; + + // Full invert + // tm[ 0] = ((om[ 5] * (om[10] * om[15] - om[11] * om[14])) - (om[ 9] * (om[ 6] * om[15] - om[ 7] * om[14])) + (om[13] * (om[ 6] * om[11] - om[ 7] * om[10]))); + // tm[ 1] = -((om[ 1] * (om[10] * om[15] - om[11] * om[14])) - (om[ 9] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[13] * (om[ 2] * om[11] - om[ 3] * om[10]))); + // tm[ 2] = ((om[ 1] * (om[ 6] * om[15] - om[ 7] * om[14])) - (om[ 5] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[13] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); + // tm[ 3] = -((om[ 1] * (om[ 6] * om[11] - om[ 7] * om[10])) - (om[ 5] * (om[ 2] * om[11] - om[ 3] * om[10])) + (om[ 9] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); + // tm[ 4] = -((om[ 4] * (om[10] * om[15] - om[11] * om[14])) - (om[ 8] * (om[ 6] * om[15] - om[ 7] * om[14])) + (om[12] * (om[ 6] * om[11] - om[ 7] * om[10]))); + // tm[ 5] = ((om[ 0] * (om[10] * om[15] - om[11] * om[14])) - (om[ 8] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[12] * (om[ 2] * om[11] - om[ 3] * om[10]))); + // tm[ 6] = -((om[ 0] * (om[ 6] * om[15] - om[ 7] * om[14])) - (om[ 4] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[12] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); + // tm[ 7] = ((om[ 0] * (om[ 6] * om[11] - om[ 7] * om[10])) - (om[ 4] * (om[ 2] * om[11] - om[ 3] * om[10])) + (om[ 8] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); + // tm[ 8] = ((om[ 4] * (om[ 9] * om[15] - om[11] * om[13])) - (om[ 8] * (om[ 5] * om[15] - om[ 7] * om[13])) + (om[12] * (om[ 5] * om[11] - om[ 7] * om[ 9]))); + // tm[ 9] = -((om[ 0] * (om[ 9] * om[15] - om[11] * om[13])) - (om[ 8] * (om[ 1] * om[15] - om[ 3] * om[13])) + (om[12] * (om[ 1] * om[11] - om[ 3] * om[ 9]))); + // tm[10] = ((om[ 0] * (om[ 5] * om[15] - om[ 7] * om[13])) - (om[ 4] * (om[ 1] * om[15] - om[ 3] * om[13])) + (om[12] * (om[ 1] * om[ 7] - om[ 3] * om[ 5]))); + // tm[11] = -((om[ 0] * (om[ 5] * om[11] - om[ 7] * om[ 9])) - (om[ 4] * (om[ 1] * om[11] - om[ 3] * om[ 9])) + (om[ 8] * (om[ 1] * om[ 7] - om[ 3] * om[ 5]))); + // tm[12] = -((om[ 4] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 5] * om[14] - om[ 6] * om[13])) + (om[12] * (om[ 5] * om[10] - om[ 6] * om[ 9]))); + // tm[13] = ((om[ 0] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[10] - om[ 2] * om[ 9]))); + // tm[14] = -((om[ 0] * (om[ 5] * om[14] - om[ 6] * om[13])) - (om[ 4] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[ 6] - om[ 2] * om[ 5]))); + // tm[15] = ((om[ 0] * (om[ 5] * om[10] - om[ 6] * om[ 9])) - (om[ 4] * (om[ 1] * om[10] - om[ 2] * om[ 9])) + (om[ 8] * (om[ 1] * om[ 6] - om[ 2] * om[ 5]))); + + // Optimized invert ( om[3, 7 and 11] is always 0, and om[15] is always 1 ) + tm[ 0] = ((om[ 5] * om[10]) - (om[ 9] * om[ 6])); + tm[ 1] = -((om[ 1] * om[10]) - (om[ 9] * om[ 2])); + tm[ 2] = ((om[ 1] * om[ 6]) - (om[ 5] * om[ 2])); + tm[ 3] = 0; + tm[ 4] = -((om[ 4] * om[10]) - (om[ 8] * om[ 6])); + tm[ 5] = ((om[ 0] * om[10]) - (om[ 8] * om[ 2])); + tm[ 6] = -((om[ 0] * om[ 6]) - (om[ 4] * om[ 2])); + tm[ 7] = 0; + tm[ 8] = ((om[ 4] * om[ 9]) - (om[ 8] * om[ 5])); + tm[ 9] = -((om[ 0] * om[ 9]) - (om[ 8] * om[ 1])); + tm[10] = ((om[ 0] * om[ 5]) - (om[ 4] * om[ 1])); + tm[11] = 0; + tm[12] = -((om[ 4] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 5] * om[14] - om[ 6] * om[13])) + (om[12] * (om[ 5] * om[10] - om[ 6] * om[ 9]))); + tm[13] = ((om[ 0] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[10] - om[ 2] * om[ 9]))); + tm[14] = -((om[ 0] * (om[ 5] * om[14] - om[ 6] * om[13])) - (om[ 4] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[ 6] - om[ 2] * om[ 5]))); + tm[15] = 1; + + float Determinant = om[ 0] * tm[ 0] + + om[ 4] * tm[ 1] + + om[ 8] * tm[ 2] + + om[12] * tm[ 3]; + + if(Determinant != 0) + Determinant = 1 / Determinant; + + tm[ 0] *= Determinant; + tm[ 1] *= Determinant; + tm[ 2] *= Determinant; + tm[ 4] *= Determinant; + tm[ 5] *= Determinant; + tm[ 6] *= Determinant; + tm[ 8] *= Determinant; + tm[ 9] *= Determinant; + tm[10] *= Determinant; + tm[12] *= Determinant; + tm[13] *= Determinant; + tm[14] *= Determinant; + + return *this; + +} // invert + +Transform4x4f& Transform4x4f::scale(const Vector3f& _scale) +{ + float* tm = (float*)this; + const float* sv = (float*)&_scale; + + tm[ 0] *= sv[0]; + tm[ 1] *= sv[1]; + tm[ 2] *= sv[2]; + tm[ 4] *= sv[0]; + tm[ 5] *= sv[1]; + tm[ 6] *= sv[2]; + tm[ 8] *= sv[0]; + tm[ 9] *= sv[1]; + tm[10] *= sv[2]; + + return *this; + +} // scale + +Transform4x4f& Transform4x4f::rotate(const float _angle, const Vector3f& _axis) +{ + float* tm = (float*)this; + const float* av = (float*)&_axis; + const float s = Math::sin(-_angle); + const float c = Math::cos(-_angle); + const float t = 1 - c; + const float x = av[0]; + const float y = av[1]; + const float z = av[2]; + const float tx = t * x; + const float ty = t * y; + const float tz = t * z; + const float sx = s * x; + const float sy = s * y; + const float sz = s * z; + const float r[9] = { tx * x + c, + tx * y - sz, + tx * z + sy, + ty * x + sz, + ty * y + c, + ty * z - sx, + tz * x - sy, + tz * y + sx, + tz * z + c }; + const float temp[9] = { tm[ 0] * r[0] + tm[ 1] * r[3] + tm[ 2] * r[6], + tm[ 0] * r[1] + tm[ 1] * r[4] + tm[ 2] * r[7], + tm[ 0] * r[2] + tm[ 1] * r[5] + tm[ 2] * r[8], + tm[ 4] * r[0] + tm[ 5] * r[3] + tm[ 6] * r[6], + tm[ 4] * r[1] + tm[ 5] * r[4] + tm[ 6] * r[7], + tm[ 4] * r[2] + tm[ 5] * r[5] + tm[ 6] * r[8], + tm[ 8] * r[0] + tm[ 9] * r[3] + tm[10] * r[6], + tm[ 8] * r[1] + tm[ 9] * r[4] + tm[10] * r[7], + tm[ 8] * r[2] + tm[ 9] * r[5] + tm[10] * r[8] }; + + tm[ 0] = temp[0]; + tm[ 1] = temp[1]; + tm[ 2] = temp[2]; + tm[ 4] = temp[3]; + tm[ 5] = temp[4]; + tm[ 6] = temp[5]; + tm[ 8] = temp[6]; + tm[ 9] = temp[7]; + tm[10] = temp[8]; + + return *this; + +}; // rotate + +Transform4x4f& Transform4x4f::rotateX(const float _angle) +{ + float* tm = (float*)this; + const float s = Math::sin(-_angle); + const float c = Math::cos(-_angle); + const float temp[6] = { tm[ 1] * c + tm[ 2] * s, + tm[ 1] * -s + tm[ 2] * c, + tm[ 5] * c + tm[ 6] * s, + tm[ 5] * -s + tm[ 6] * c, + tm[ 9] * c + tm[10] * s, + tm[ 9] * -s + tm[10] * c }; + + tm[ 1] = temp[0]; + tm[ 2] = temp[1]; + tm[ 5] = temp[2]; + tm[ 6] = temp[3]; + tm[ 9] = temp[4]; + tm[10] = temp[5]; + + return *this; + +}; // rotateX + +Transform4x4f& Transform4x4f::rotateY(const float _angle) +{ + float* tm = (float*)this; + const float s = Math::sin(-_angle); + const float c = Math::cos(-_angle); + const float temp[6] = { tm[ 0] * c + tm[ 2] * -s, + tm[ 0] * s + tm[ 2] * c, + tm[ 4] * c + tm[ 6] * -s, + tm[ 4] * s + tm[ 6] * c, + tm[ 8] * c + tm[10] * -s, + tm[ 8] * s + tm[10] * c }; + + tm[ 0] = temp[0]; + tm[ 2] = temp[1]; + tm[ 4] = temp[2]; + tm[ 6] = temp[3]; + tm[ 8] = temp[4]; + tm[10] = temp[5]; + + return *this; + +}; // rotateY + +Transform4x4f& Transform4x4f::rotateZ(const float _angle) +{ + float* tm = (float*)this; + const float s = Math::sin(-_angle); + const float c = Math::cos(-_angle); + const float temp[6] = { tm[ 0] * c + tm[ 1] * s, + tm[ 0] * -s + tm[ 1] * c, + tm[ 4] * c + tm[ 5] * s, + tm[ 4] * -s + tm[ 5] * c, + tm[ 8] * c + tm[ 9] * s, + tm[ 8] * -s + tm[ 9] * c }; + + tm[ 0] = temp[0]; + tm[ 1] = temp[1]; + tm[ 4] = temp[2]; + tm[ 5] = temp[3]; + tm[ 8] = temp[4]; + tm[ 9] = temp[5]; + + return *this; + +}; // rotateZ + +Transform4x4f& Transform4x4f::translate(const Vector3f& _translation) +{ + float* tm = (float*)this; + const float* tv = (float*)&_translation; + + tm[12] += tm[ 0] * tv[0] + tm[ 4] * tv[1] + tm[ 8] * tv[2]; + tm[13] += tm[ 1] * tv[0] + tm[ 5] * tv[1] + tm[ 9] * tv[2]; + tm[14] += tm[ 2] * tv[0] + tm[ 6] * tv[1] + tm[10] * tv[2]; + + return *this; + +} // translate + +Transform4x4f& Transform4x4f::round() +{ + float* tm = (float*)this; + + tm[12] = (int)(tm[12] + 0.5f); + tm[13] = (int)(tm[13] + 0.5f); + tm[14] = (int)(tm[14] + 0.5f); + + return *this; + +} // round diff --git a/es-core/src/math/Transform4x4f.h b/es-core/src/math/Transform4x4f.h index 43c4c9e49a..db20a303d4 100644 --- a/es-core/src/math/Transform4x4f.h +++ b/es-core/src/math/Transform4x4f.h @@ -4,63 +4,17 @@ #include "math/Vector4f.h" #include "math/Vector3f.h" -#include class Transform4x4f { public: - Transform4x4f() { } - Transform4x4f(const Vector4f& r0, const Vector4f& r1, const Vector4f& r2, const Vector4f& r3) : mR0(r0), mR1(r1), mR2(r2), mR3(r3) { } + Transform4x4f() { } + Transform4x4f(const Vector4f& _r0, const Vector4f& _r1, const Vector4f& _r2, const Vector4f& _r3) : mR0(_r0), mR1(_r1), mR2(_r2), mR3(_r3) { } - const Transform4x4f operator*(const Transform4x4f& other) const - { - const float* tm = (float*)this; - const float* om = (float*)&other; - - return - { - { - tm[ 0] * om[ 0] + tm[ 1] * om[ 4] + tm[ 2] * om[ 8], - tm[ 0] * om[ 1] + tm[ 1] * om[ 5] + tm[ 2] * om[ 9], - tm[ 0] * om[ 2] + tm[ 1] * om[ 6] + tm[ 2] * om[10], - 0 - }, - { - tm[ 4] * om[ 0] + tm[ 5] * om[ 4] + tm[ 6] * om[ 8], - tm[ 4] * om[ 1] + tm[ 5] * om[ 5] + tm[ 6] * om[ 9], - tm[ 4] * om[ 2] + tm[ 5] * om[ 6] + tm[ 6] * om[10], - 0 - }, - { - tm[ 8] * om[ 0] + tm[ 9] * om[ 4] + tm[10] * om[ 8], - tm[ 8] * om[ 1] + tm[ 9] * om[ 5] + tm[10] * om[ 9], - tm[ 8] * om[ 2] + tm[ 9] * om[ 6] + tm[10] * om[10], - 0 - }, - { - tm[ 0] * om[12] + tm[ 4] * om[13] + tm[ 8] * om[14] + tm[12], - tm[ 1] * om[12] + tm[ 5] * om[13] + tm[ 9] * om[14] + tm[13], - tm[ 2] * om[12] + tm[ 6] * om[13] + tm[10] * om[14] + tm[14], - 1 - } - }; - } - - const Vector3f operator*(const Vector3f& other) const - { - const float* tm = (float*)this; - const float* ov = (float*)&other; - - return - { - tm[ 0] * ov[0] + tm[ 4] * ov[1] + tm[ 8] * ov[2] + tm[12], - tm[ 1] * ov[0] + tm[ 5] * ov[1] + tm[ 9] * ov[2] + tm[13], - tm[ 2] * ov[0] + tm[ 6] * ov[1] + tm[10] * ov[2] + tm[14] - }; - } - - Transform4x4f& operator*=(const Transform4x4f& other) { *this = *this * other; return *this; } + const Transform4x4f operator*(const Transform4x4f& _other) const; + const Vector3f operator*(const Vector3f& _other) const; + Transform4x4f& operator*=(const Transform4x4f& _other) { *this = *this * _other; return *this; } inline Vector4f& r0() { return mR0; } inline Vector4f& r1() { return mR1; } @@ -71,225 +25,14 @@ class Transform4x4f inline const Vector4f& r2() const { return mR2; } inline const Vector4f& r3() const { return mR3; } - inline Transform4x4f& invert(const Transform4x4f& other) - { - float* tm = (float*)this; - const float* om = (float*)&other; - - // Full invert - // tm[ 0] = ((om[ 5] * (om[10] * om[15] - om[11] * om[14])) - (om[ 9] * (om[ 6] * om[15] - om[ 7] * om[14])) + (om[13] * (om[ 6] * om[11] - om[ 7] * om[10]))); - // tm[ 1] = -((om[ 1] * (om[10] * om[15] - om[11] * om[14])) - (om[ 9] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[13] * (om[ 2] * om[11] - om[ 3] * om[10]))); - // tm[ 2] = ((om[ 1] * (om[ 6] * om[15] - om[ 7] * om[14])) - (om[ 5] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[13] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); - // tm[ 3] = -((om[ 1] * (om[ 6] * om[11] - om[ 7] * om[10])) - (om[ 5] * (om[ 2] * om[11] - om[ 3] * om[10])) + (om[ 9] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); - // tm[ 4] = -((om[ 4] * (om[10] * om[15] - om[11] * om[14])) - (om[ 8] * (om[ 6] * om[15] - om[ 7] * om[14])) + (om[12] * (om[ 6] * om[11] - om[ 7] * om[10]))); - // tm[ 5] = ((om[ 0] * (om[10] * om[15] - om[11] * om[14])) - (om[ 8] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[12] * (om[ 2] * om[11] - om[ 3] * om[10]))); - // tm[ 6] = -((om[ 0] * (om[ 6] * om[15] - om[ 7] * om[14])) - (om[ 4] * (om[ 2] * om[15] - om[ 3] * om[14])) + (om[12] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); - // tm[ 7] = ((om[ 0] * (om[ 6] * om[11] - om[ 7] * om[10])) - (om[ 4] * (om[ 2] * om[11] - om[ 3] * om[10])) + (om[ 8] * (om[ 2] * om[ 7] - om[ 3] * om[ 6]))); - // tm[ 8] = ((om[ 4] * (om[ 9] * om[15] - om[11] * om[13])) - (om[ 8] * (om[ 5] * om[15] - om[ 7] * om[13])) + (om[12] * (om[ 5] * om[11] - om[ 7] * om[ 9]))); - // tm[ 9] = -((om[ 0] * (om[ 9] * om[15] - om[11] * om[13])) - (om[ 8] * (om[ 1] * om[15] - om[ 3] * om[13])) + (om[12] * (om[ 1] * om[11] - om[ 3] * om[ 9]))); - // tm[10] = ((om[ 0] * (om[ 5] * om[15] - om[ 7] * om[13])) - (om[ 4] * (om[ 1] * om[15] - om[ 3] * om[13])) + (om[12] * (om[ 1] * om[ 7] - om[ 3] * om[ 5]))); - // tm[11] = -((om[ 0] * (om[ 5] * om[11] - om[ 7] * om[ 9])) - (om[ 4] * (om[ 1] * om[11] - om[ 3] * om[ 9])) + (om[ 8] * (om[ 1] * om[ 7] - om[ 3] * om[ 5]))); - // tm[12] = -((om[ 4] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 5] * om[14] - om[ 6] * om[13])) + (om[12] * (om[ 5] * om[10] - om[ 6] * om[ 9]))); - // tm[13] = ((om[ 0] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[10] - om[ 2] * om[ 9]))); - // tm[14] = -((om[ 0] * (om[ 5] * om[14] - om[ 6] * om[13])) - (om[ 4] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[ 6] - om[ 2] * om[ 5]))); - // tm[15] = ((om[ 0] * (om[ 5] * om[10] - om[ 6] * om[ 9])) - (om[ 4] * (om[ 1] * om[10] - om[ 2] * om[ 9])) + (om[ 8] * (om[ 1] * om[ 6] - om[ 2] * om[ 5]))); - - // Optimized invert ( om[3, 7 and 11] is always 0, and om[15] is always 1 ) - tm[ 0] = ((om[ 5] * om[10]) - (om[ 9] * om[ 6])); - tm[ 1] = -((om[ 1] * om[10]) - (om[ 9] * om[ 2])); - tm[ 2] = ((om[ 1] * om[ 6]) - (om[ 5] * om[ 2])); - tm[ 3] = 0; - tm[ 4] = -((om[ 4] * om[10]) - (om[ 8] * om[ 6])); - tm[ 5] = ((om[ 0] * om[10]) - (om[ 8] * om[ 2])); - tm[ 6] = -((om[ 0] * om[ 6]) - (om[ 4] * om[ 2])); - tm[ 7] = 0; - tm[ 8] = ((om[ 4] * om[ 9]) - (om[ 8] * om[ 5])); - tm[ 9] = -((om[ 0] * om[ 9]) - (om[ 8] * om[ 1])); - tm[10] = ((om[ 0] * om[ 5]) - (om[ 4] * om[ 1])); - tm[11] = 0; - tm[12] = -((om[ 4] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 5] * om[14] - om[ 6] * om[13])) + (om[12] * (om[ 5] * om[10] - om[ 6] * om[ 9]))); - tm[13] = ((om[ 0] * (om[ 9] * om[14] - om[10] * om[13])) - (om[ 8] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[10] - om[ 2] * om[ 9]))); - tm[14] = -((om[ 0] * (om[ 5] * om[14] - om[ 6] * om[13])) - (om[ 4] * (om[ 1] * om[14] - om[ 2] * om[13])) + (om[12] * (om[ 1] * om[ 6] - om[ 2] * om[ 5]))); - tm[15] = 1; - - float Determinant = om[ 0] * tm[ 0] + - om[ 4] * tm[ 1] + - om[ 8] * tm[ 2] + - om[12] * tm[ 3]; - - if(Determinant != 0) - Determinant = 1 / Determinant; - - tm[ 0] *= Determinant; - tm[ 1] *= Determinant; - tm[ 2] *= Determinant; - tm[ 4] *= Determinant; - tm[ 5] *= Determinant; - tm[ 6] *= Determinant; - tm[ 8] *= Determinant; - tm[ 9] *= Determinant; - tm[10] *= Determinant; - tm[12] *= Determinant; - tm[13] *= Determinant; - tm[14] *= Determinant; - - return *this; - } - - inline Transform4x4f& scale(const Vector3f& scale) - { - float* tm = (float*)this; - const float* sv = (float*)&scale; - - tm[ 0] *= sv[0]; - tm[ 1] *= sv[1]; - tm[ 2] *= sv[2]; - tm[ 4] *= sv[0]; - tm[ 5] *= sv[1]; - tm[ 6] *= sv[2]; - tm[ 8] *= sv[0]; - tm[ 9] *= sv[1]; - tm[10] *= sv[2]; - - return *this; - } - - inline Transform4x4f& rotate(const float angle, const Vector3f& axis) - { - float* tm = (float*)this; - const float* av = (float*)&axis; - const float s = sin(-angle); - const float c = cos(-angle); - const float t = 1 - c; - const float x = av[0]; - const float y = av[1]; - const float z = av[2]; - const float tx = t * x; - const float ty = t * y; - const float tz = t * z; - const float sx = s * x; - const float sy = s * y; - const float sz = s * z; - const float r[9] = { tx * x + c, - tx * y - sz, - tx * z + sy, - ty * x + sz, - ty * y + c, - ty * z - sx, - tz * x - sy, - tz * y + sx, - tz * z + c }; - const float temp[9] = { tm[ 0] * r[0] + tm[ 1] * r[3] + tm[ 2] * r[6], - tm[ 0] * r[1] + tm[ 1] * r[4] + tm[ 2] * r[7], - tm[ 0] * r[2] + tm[ 1] * r[5] + tm[ 2] * r[8], - tm[ 4] * r[0] + tm[ 5] * r[3] + tm[ 6] * r[6], - tm[ 4] * r[1] + tm[ 5] * r[4] + tm[ 6] * r[7], - tm[ 4] * r[2] + tm[ 5] * r[5] + tm[ 6] * r[8], - tm[ 8] * r[0] + tm[ 9] * r[3] + tm[10] * r[6], - tm[ 8] * r[1] + tm[ 9] * r[4] + tm[10] * r[7], - tm[ 8] * r[2] + tm[ 9] * r[5] + tm[10] * r[8] }; - - tm[ 0] = temp[0]; - tm[ 1] = temp[1]; - tm[ 2] = temp[2]; - tm[ 4] = temp[3]; - tm[ 5] = temp[4]; - tm[ 6] = temp[5]; - tm[ 8] = temp[6]; - tm[ 9] = temp[7]; - tm[10] = temp[8]; - - return *this; - }; - - inline Transform4x4f& rotateX(const float angle) - { - float* tm = (float*)this; - const float s = sin(-angle); - const float c = cos(-angle); - const float temp[6] = { tm[ 1] * c + tm[ 2] * s, - tm[ 1] * -s + tm[ 2] * c, - tm[ 5] * c + tm[ 6] * s, - tm[ 5] * -s + tm[ 6] * c, - tm[ 9] * c + tm[10] * s, - tm[ 9] * -s + tm[10] * c }; - - tm[ 1] = temp[0]; - tm[ 2] = temp[1]; - tm[ 5] = temp[2]; - tm[ 6] = temp[3]; - tm[ 9] = temp[4]; - tm[10] = temp[5]; - - return *this; - }; - - inline Transform4x4f& rotateY(const float angle) - { - float* tm = (float*)this; - const float s = sin(-angle); - const float c = cos(-angle); - const float temp[6] = { tm[ 0] * c + tm[ 2] * -s, - tm[ 0] * s + tm[ 2] * c, - tm[ 4] * c + tm[ 6] * -s, - tm[ 4] * s + tm[ 6] * c, - tm[ 8] * c + tm[10] * -s, - tm[ 8] * s + tm[10] * c }; - - tm[ 0] = temp[0]; - tm[ 2] = temp[1]; - tm[ 4] = temp[2]; - tm[ 6] = temp[3]; - tm[ 8] = temp[4]; - tm[10] = temp[5]; - - return *this; - }; - - inline Transform4x4f& rotateZ(const float angle) - { - float* tm = (float*)this; - const float s = sin(-angle); - const float c = cos(-angle); - const float temp[6] = { tm[ 0] * c + tm[ 1] * s, - tm[ 0] * -s + tm[ 1] * c, - tm[ 4] * c + tm[ 5] * s, - tm[ 4] * -s + tm[ 5] * c, - tm[ 8] * c + tm[ 9] * s, - tm[ 8] * -s + tm[ 9] * c }; - - tm[ 0] = temp[0]; - tm[ 1] = temp[1]; - tm[ 4] = temp[2]; - tm[ 5] = temp[3]; - tm[ 8] = temp[4]; - tm[ 9] = temp[5]; - - return *this; - }; - - inline Transform4x4f& translate(const Vector3f& translation) - { - float* tm = (float*)this; - const float* tv = (float*)&translation; - - tm[12] += tm[ 0] * tv[0] + tm[ 4] * tv[1] + tm[ 8] * tv[2]; - tm[13] += tm[ 1] * tv[0] + tm[ 5] * tv[1] + tm[ 9] * tv[2]; - tm[14] += tm[ 2] * tv[0] + tm[ 6] * tv[1] + tm[10] * tv[2]; - - return *this; - } - - inline Transform4x4f& round() - { - float* tm = (float*)this; - - tm[12] = (int)(tm[12] + 0.5f); - tm[13] = (int)(tm[13] + 0.5f); - tm[14] = (int)(tm[14] + 0.5f); - - return *this; - } + Transform4x4f& invert(const Transform4x4f& _other); + Transform4x4f& scale(const Vector3f& _scale); + Transform4x4f& rotate(const float _angle, const Vector3f& _axis); + Transform4x4f& rotateX(const float _angle); + Transform4x4f& rotateY(const float _angle); + Transform4x4f& rotateZ(const float _angle); + Transform4x4f& translate(const Vector3f& _translation); + Transform4x4f& round(); inline Vector3f& translation() { return mR3.v3(); } inline const Vector3f& translation() const { return mR3.v3(); } @@ -303,6 +46,6 @@ class Transform4x4f Vector4f mR2; Vector4f mR3; -}; +}; // Transform4x4f #endif // ES_CORE_MATH_TRANSFORM4X4F_H diff --git a/es-core/src/math/Vector2f.cpp b/es-core/src/math/Vector2f.cpp new file mode 100644 index 0000000000..492e7b25e9 --- /dev/null +++ b/es-core/src/math/Vector2f.cpp @@ -0,0 +1,19 @@ +#include "math/Vector2f.h" + +Vector2f& Vector2f::round() +{ + mX = (int)(mX + 0.5f); + mY = (int)(mY + 0.5f); + + return *this; + +} // round + +Vector2f& Vector2f::lerp(const Vector2f& _start, const Vector2f& _end, const float _fraction) +{ + mX = Math::lerp(_start.x(), _end.x(), _fraction); + mY = Math::lerp(_start.y(), _end.y(), _fraction); + + return *this; + +} // lerp diff --git a/es-core/src/math/Vector2f.h b/es-core/src/math/Vector2f.h index 9e924c40a9..d8103da308 100644 --- a/es-core/src/math/Vector2f.h +++ b/es-core/src/math/Vector2f.h @@ -2,6 +2,7 @@ #ifndef ES_CORE_MATH_VECTOR2F_H #define ES_CORE_MATH_VECTOR2F_H +#include "math/Misc.h" #include class Vector3f; @@ -11,46 +12,47 @@ class Vector2f { public: - Vector2f() { } - Vector2f(const float f) : mX(f), mY(f) { } - Vector2f(const float x, const float y) : mX(x), mY(y) { } - explicit Vector2f(const Vector3f& v) : mX(((Vector2f&)v).mX), mY(((Vector2f&)v).mY) { } - explicit Vector2f(const Vector4f& v) : mX(((Vector2f&)v).mX), mY(((Vector2f&)v).mY) { } + Vector2f() { } + Vector2f(const float _f) : mX(_f), mY(_f) { } + Vector2f(const float _x, const float _y) : mX(_x), mY(_y) { } + explicit Vector2f(const Vector3f& _v) : mX(((Vector2f&)_v).mX), mY(((Vector2f&)_v).mY) { } + explicit Vector2f(const Vector4f& _v) : mX(((Vector2f&)_v).mX), mY(((Vector2f&)_v).mY) { } - const bool operator==(const Vector2f& other) const { return ((mX == other.mX) && (mY == other.mY)); } - const bool operator!=(const Vector2f& other) const { return ((mX != other.mX) || (mY != other.mY)); } + const bool operator==(const Vector2f& _other) const { return ((mX == _other.mX) && (mY == _other.mY)); } + const bool operator!=(const Vector2f& _other) const { return ((mX != _other.mX) || (mY != _other.mY)); } - const Vector2f operator+(const Vector2f& other) const { return { mX + other.mX, mY + other.mY }; } - const Vector2f operator-(const Vector2f& other) const { return { mX - other.mX, mY - other.mY }; } - const Vector2f operator*(const Vector2f& other) const { return { mX * other.mX, mY * other.mY }; } - const Vector2f operator/(const Vector2f& other) const { return { mX / other.mX, mY / other.mY }; } + const Vector2f operator+(const Vector2f& _other) const { return { mX + _other.mX, mY + _other.mY }; } + const Vector2f operator-(const Vector2f& _other) const { return { mX - _other.mX, mY - _other.mY }; } + const Vector2f operator*(const Vector2f& _other) const { return { mX * _other.mX, mY * _other.mY }; } + const Vector2f operator/(const Vector2f& _other) const { return { mX / _other.mX, mY / _other.mY }; } - const Vector2f operator+(const float& other) const { return { mX + other, mY + other }; } - const Vector2f operator-(const float& other) const { return { mX - other, mY - other }; } - const Vector2f operator*(const float& other) const { return { mX * other, mY * other }; } - const Vector2f operator/(const float& other) const { return { mX / other, mY / other }; } + const Vector2f operator+(const float& _other) const { return { mX + _other, mY + _other }; } + const Vector2f operator-(const float& _other) const { return { mX - _other, mY - _other }; } + const Vector2f operator*(const float& _other) const { return { mX * _other, mY * _other }; } + const Vector2f operator/(const float& _other) const { return { mX / _other, mY / _other }; } const Vector2f operator-() const { return { -mX , -mY }; } - Vector2f& operator+=(const Vector2f& other) { *this = *this + other; return *this; } - Vector2f& operator-=(const Vector2f& other) { *this = *this - other; return *this; } - Vector2f& operator*=(const Vector2f& other) { *this = *this * other; return *this; } - Vector2f& operator/=(const Vector2f& other) { *this = *this / other; return *this; } + Vector2f& operator+=(const Vector2f& _other) { *this = *this + _other; return *this; } + Vector2f& operator-=(const Vector2f& _other) { *this = *this - _other; return *this; } + Vector2f& operator*=(const Vector2f& _other) { *this = *this * _other; return *this; } + Vector2f& operator/=(const Vector2f& _other) { *this = *this / _other; return *this; } - Vector2f& operator+=(const float& other) { *this = *this + other; return *this; } - Vector2f& operator-=(const float& other) { *this = *this - other; return *this; } - Vector2f& operator*=(const float& other) { *this = *this * other; return *this; } - Vector2f& operator/=(const float& other) { *this = *this / other; return *this; } + Vector2f& operator+=(const float& _other) { *this = *this + _other; return *this; } + Vector2f& operator-=(const float& _other) { *this = *this - _other; return *this; } + Vector2f& operator*=(const float& _other) { *this = *this * _other; return *this; } + Vector2f& operator/=(const float& _other) { *this = *this / _other; return *this; } - float& operator[](const int index) { assert(index < 2 && "index out of range"); return (&mX)[index]; } - const float& operator[](const int index) const { assert(index < 2 && "index out of range"); return (&mX)[index]; } + float& operator[](const int _index) { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } + const float& operator[](const int _index) const { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } float& x() { return mX; } float& y() { return mY; } const float& x() const { return mX; } const float& y() const { return mY; } - inline Vector2f& round() { mX = (int)(mX + 0.5f); mY = (int)(mY + 0.5f); return *this; } + Vector2f& round(); + Vector2f& lerp(const Vector2f& _start, const Vector2f& _end, const float _fraction); static const Vector2f Zero() { return { 0, 0 }; } static const Vector2f UnitX() { return { 1, 0 }; } @@ -61,6 +63,6 @@ class Vector2f float mX; float mY; -}; +}; // Vector2f #endif // ES_CORE_MATH_VECTOR2F_H diff --git a/es-core/src/math/Vector2i.cpp b/es-core/src/math/Vector2i.cpp new file mode 100644 index 0000000000..dba964de6b --- /dev/null +++ b/es-core/src/math/Vector2i.cpp @@ -0,0 +1 @@ +#include "math/Vector2i.h" diff --git a/es-core/src/math/Vector2i.h b/es-core/src/math/Vector2i.h index 08432b4e00..693619da88 100644 --- a/es-core/src/math/Vector2i.h +++ b/es-core/src/math/Vector2i.h @@ -8,37 +8,37 @@ class Vector2i { public: - Vector2i() { } - Vector2i(const int i) : mX(i), mY(i) { } - Vector2i(const int x, const int y) : mX(x), mY(y) { } + Vector2i() { } + Vector2i(const int _i) : mX(_i), mY(_i) { } + Vector2i(const int _x, const int _y) : mX(_x), mY(_y) { } - const bool operator==(const Vector2i& other) const { return ((mX == other.mX) && (mY == other.mY)); } - const bool operator!=(const Vector2i& other) const { return ((mX != other.mX) || (mY != other.mY)); } + const bool operator==(const Vector2i& _other) const { return ((mX == _other.mX) && (mY == _other.mY)); } + const bool operator!=(const Vector2i& _other) const { return ((mX != _other.mX) || (mY != _other.mY)); } - const Vector2i operator+(const Vector2i& other) const { return { mX + other.mX, mY + other.mY }; } - const Vector2i operator-(const Vector2i& other) const { return { mX - other.mX, mY - other.mY }; } - const Vector2i operator*(const Vector2i& other) const { return { mX * other.mX, mY * other.mY }; } - const Vector2i operator/(const Vector2i& other) const { return { mX / other.mX, mY / other.mY }; } + const Vector2i operator+(const Vector2i& _other) const { return { mX + _other.mX, mY + _other.mY }; } + const Vector2i operator-(const Vector2i& _other) const { return { mX - _other.mX, mY - _other.mY }; } + const Vector2i operator*(const Vector2i& _other) const { return { mX * _other.mX, mY * _other.mY }; } + const Vector2i operator/(const Vector2i& _other) const { return { mX / _other.mX, mY / _other.mY }; } - const Vector2i operator+(const int& other) const { return { mX + other, mY + other }; } - const Vector2i operator-(const int& other) const { return { mX - other, mY - other }; } - const Vector2i operator*(const int& other) const { return { mX * other, mY * other }; } - const Vector2i operator/(const int& other) const { return { mX / other, mY / other }; } + const Vector2i operator+(const int& _other) const { return { mX + _other, mY + _other }; } + const Vector2i operator-(const int& _other) const { return { mX - _other, mY - _other }; } + const Vector2i operator*(const int& _other) const { return { mX * _other, mY * _other }; } + const Vector2i operator/(const int& _other) const { return { mX / _other, mY / _other }; } const Vector2i operator-() const { return { -mX , -mY }; } - Vector2i& operator+=(const Vector2i& other) { *this = *this + other; return *this; } - Vector2i& operator-=(const Vector2i& other) { *this = *this - other; return *this; } - Vector2i& operator*=(const Vector2i& other) { *this = *this * other; return *this; } - Vector2i& operator/=(const Vector2i& other) { *this = *this / other; return *this; } + Vector2i& operator+=(const Vector2i& _other) { *this = *this + _other; return *this; } + Vector2i& operator-=(const Vector2i& _other) { *this = *this - _other; return *this; } + Vector2i& operator*=(const Vector2i& _other) { *this = *this * _other; return *this; } + Vector2i& operator/=(const Vector2i& _other) { *this = *this / _other; return *this; } - Vector2i& operator+=(const int& other) { *this = *this + other; return *this; } - Vector2i& operator-=(const int& other) { *this = *this - other; return *this; } - Vector2i& operator*=(const int& other) { *this = *this * other; return *this; } - Vector2i& operator/=(const int& other) { *this = *this / other; return *this; } + Vector2i& operator+=(const int& _other) { *this = *this + _other; return *this; } + Vector2i& operator-=(const int& _other) { *this = *this - _other; return *this; } + Vector2i& operator*=(const int& _other) { *this = *this * _other; return *this; } + Vector2i& operator/=(const int& _other) { *this = *this / _other; return *this; } - int& operator[](const int index) { assert(index < 2 && "index out of range"); return (&mX)[index]; } - const int& operator[](const int index) const { assert(index < 2 && "index out of range"); return (&mX)[index]; } + int& operator[](const int _index) { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } + const int& operator[](const int _index) const { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } int& x() { return mX; } int& y() { return mY; } @@ -54,6 +54,6 @@ class Vector2i int mX; int mY; -}; +}; // Vector2i #endif // ES_CORE_MATH_VECTOR2I_H diff --git a/es-core/src/math/Vector3f.cpp b/es-core/src/math/Vector3f.cpp new file mode 100644 index 0000000000..4c5ccfcef6 --- /dev/null +++ b/es-core/src/math/Vector3f.cpp @@ -0,0 +1,21 @@ +#include "math/Vector3f.h" + +Vector3f& Vector3f::round() +{ + mX = (int)(mX + 0.5f); + mY = (int)(mY + 0.5f); + mZ = (int)(mZ + 0.5f); + + return *this; + +} // round + +Vector3f& Vector3f::lerp(const Vector3f& _start, const Vector3f& _end, const float _fraction) +{ + mX = Math::lerp(_start.x(), _end.x(), _fraction); + mY = Math::lerp(_start.y(), _end.y(), _fraction); + mZ = Math::lerp(_start.z(), _end.z(), _fraction); + + return *this; + +} // lerp diff --git a/es-core/src/math/Vector3f.h b/es-core/src/math/Vector3f.h index f76e7504e8..db33912f43 100644 --- a/es-core/src/math/Vector3f.h +++ b/es-core/src/math/Vector3f.h @@ -2,6 +2,7 @@ #ifndef ES_CORE_MATH_VECTOR3F_H #define ES_CORE_MATH_VECTOR3F_H +#include "math/Misc.h" #include class Vector2f; @@ -11,40 +12,40 @@ class Vector3f { public: - Vector3f() { } - Vector3f(const float f) : mX(f), mY(f), mZ(f) { } - Vector3f(const float x, const float y, const float z) : mX(x), mY(y), mZ(z) { } - explicit Vector3f(const Vector2f& v) : mX(((Vector3f&)v).mX), mY(((Vector3f&)v).mY), mZ(0) { } - explicit Vector3f(const Vector2f& v, const float z) : mX(((Vector3f&)v).mX), mY(((Vector3f&)v).mY), mZ(z) { } - explicit Vector3f(const Vector4f& v) : mX(((Vector3f&)v).mX), mY(((Vector3f&)v).mY), mZ(((Vector3f&)v).mZ) { } + Vector3f() { } + Vector3f(const float _f) : mX(_f), mY(_f), mZ(_f) { } + Vector3f(const float _x, const float _y, const float _z) : mX(_x), mY(_y), mZ(_z) { } + explicit Vector3f(const Vector2f& _v) : mX(((Vector3f&)_v).mX), mY(((Vector3f&)_v).mY), mZ(0) { } + explicit Vector3f(const Vector2f& _v, const float _z) : mX(((Vector3f&)_v).mX), mY(((Vector3f&)_v).mY), mZ(_z) { } + explicit Vector3f(const Vector4f& _v) : mX(((Vector3f&)_v).mX), mY(((Vector3f&)_v).mY), mZ(((Vector3f&)_v).mZ) { } - const bool operator==(const Vector3f& other) const { return ((mX == other.mX) && (mY == other.mY) && (mZ == other.mZ)); } - const bool operator!=(const Vector3f& other) const { return ((mX != other.mX) || (mY != other.mY) || (mZ != other.mZ)); } + const bool operator==(const Vector3f& _other) const { return ((mX == _other.mX) && (mY == _other.mY) && (mZ == _other.mZ)); } + const bool operator!=(const Vector3f& _other) const { return ((mX != _other.mX) || (mY != _other.mY) || (mZ != _other.mZ)); } - const Vector3f operator+(const Vector3f& other) const { return { mX + other.mX, mY + other.mY, mZ + other.mZ }; } - const Vector3f operator-(const Vector3f& other) const { return { mX - other.mX, mY - other.mY, mZ - other.mZ }; } - const Vector3f operator*(const Vector3f& other) const { return { mX * other.mX, mY * other.mY, mZ * other.mZ }; } - const Vector3f operator/(const Vector3f& other) const { return { mX / other.mX, mY / other.mY, mZ / other.mZ }; } + const Vector3f operator+(const Vector3f& _other) const { return { mX + _other.mX, mY + _other.mY, mZ + _other.mZ }; } + const Vector3f operator-(const Vector3f& _other) const { return { mX - _other.mX, mY - _other.mY, mZ - _other.mZ }; } + const Vector3f operator*(const Vector3f& _other) const { return { mX * _other.mX, mY * _other.mY, mZ * _other.mZ }; } + const Vector3f operator/(const Vector3f& _other) const { return { mX / _other.mX, mY / _other.mY, mZ / _other.mZ }; } - const Vector3f operator+(const float& other) const { return { mX + other, mY + other, mZ + other }; } - const Vector3f operator-(const float& other) const { return { mX - other, mY - other, mZ - other }; } - const Vector3f operator*(const float& other) const { return { mX * other, mY * other, mZ * other }; } - const Vector3f operator/(const float& other) const { return { mX / other, mY / other, mZ / other }; } + const Vector3f operator+(const float& _other) const { return { mX + _other, mY + _other, mZ + _other }; } + const Vector3f operator-(const float& _other) const { return { mX - _other, mY - _other, mZ - _other }; } + const Vector3f operator*(const float& _other) const { return { mX * _other, mY * _other, mZ * _other }; } + const Vector3f operator/(const float& _other) const { return { mX / _other, mY / _other, mZ / _other }; } const Vector3f operator-() const { return { -mX , -mY, -mZ }; } - Vector3f& operator+=(const Vector3f& other) { *this = *this + other; return *this; } - Vector3f& operator-=(const Vector3f& other) { *this = *this - other; return *this; } - Vector3f& operator*=(const Vector3f& other) { *this = *this * other; return *this; } - Vector3f& operator/=(const Vector3f& other) { *this = *this / other; return *this; } + Vector3f& operator+=(const Vector3f& _other) { *this = *this + _other; return *this; } + Vector3f& operator-=(const Vector3f& _other) { *this = *this - _other; return *this; } + Vector3f& operator*=(const Vector3f& _other) { *this = *this * _other; return *this; } + Vector3f& operator/=(const Vector3f& _other) { *this = *this / _other; return *this; } - Vector3f& operator+=(const float& other) { *this = *this + other; return *this; } - Vector3f& operator-=(const float& other) { *this = *this - other; return *this; } - Vector3f& operator*=(const float& other) { *this = *this * other; return *this; } - Vector3f& operator/=(const float& other) { *this = *this / other; return *this; } + Vector3f& operator+=(const float& _other) { *this = *this + _other; return *this; } + Vector3f& operator-=(const float& _other) { *this = *this - _other; return *this; } + Vector3f& operator*=(const float& _other) { *this = *this * _other; return *this; } + Vector3f& operator/=(const float& _other) { *this = *this / _other; return *this; } - float& operator[](const int index) { assert(index < 3 && "index out of range"); return (&mX)[index]; } - const float& operator[](const int index) const { assert(index < 3 && "index out of range"); return (&mX)[index]; } + float& operator[](const int _index) { assert(_index < 3 && "index out of range"); return (&mX)[_index]; } + const float& operator[](const int _index) const { assert(_index < 3 && "index out of range"); return (&mX)[_index]; } float& x() { return mX; } float& y() { return mY; } @@ -56,7 +57,8 @@ class Vector3f inline Vector2f& v2() { return *(Vector2f*)this; } inline const Vector2f& v2() const { return *(Vector2f*)this; } - inline Vector3f& round() { mX = (int)(mX + 0.5f); mY = (int)(mY + 0.5f); mZ = (int)(mZ + 0.5f); return *this; } + Vector3f& round(); + Vector3f& lerp(const Vector3f& _start, const Vector3f& _end, const float _fraction); static const Vector3f Zero() { return { 0, 0, 0 }; } static const Vector3f UnitX() { return { 1, 0, 0 }; } @@ -69,6 +71,6 @@ class Vector3f float mY; float mZ; -}; +}; // Vector3f #endif // ES_CORE_MATH_VECTOR3F_H diff --git a/es-core/src/math/Vector4f.cpp b/es-core/src/math/Vector4f.cpp new file mode 100644 index 0000000000..892b2d3857 --- /dev/null +++ b/es-core/src/math/Vector4f.cpp @@ -0,0 +1,23 @@ +#include "math/Vector4f.h" + +Vector4f& Vector4f::round() +{ + mX = (int)(mX + 0.5f); + mY = (int)(mY + 0.5f); + mZ = (int)(mZ + 0.5f); + mW = (int)(mW + 0.5f); + + return *this; + +} // round + +Vector4f& Vector4f::lerp(const Vector4f& _start, const Vector4f& _end, const float _fraction) +{ + mX = Math::lerp(_start.x(), _end.x(), _fraction); + mY = Math::lerp(_start.y(), _end.y(), _fraction); + mZ = Math::lerp(_start.z(), _end.z(), _fraction); + mW = Math::lerp(_start.w(), _end.w(), _fraction); + + return *this; + +} // lerp diff --git a/es-core/src/math/Vector4f.h b/es-core/src/math/Vector4f.h index f263db58bb..1cf1b0daca 100644 --- a/es-core/src/math/Vector4f.h +++ b/es-core/src/math/Vector4f.h @@ -2,6 +2,7 @@ #ifndef ES_CORE_MATH_VECTOR4F_H #define ES_CORE_MATH_VECTOR4F_H +#include "math/Misc.h" #include class Vector2f; @@ -11,42 +12,42 @@ class Vector4f { public: - Vector4f() { } - Vector4f(const float f) : mX(f), mY(f), mZ(f), mW(f) { } - Vector4f(const float x, const float y, const float z, const float w) : mX(x), mY(y), mZ(z), mW(w) { } - explicit Vector4f(const Vector2f& v) : mX(((Vector4f&)v).mX), mY(((Vector4f&)v).mY), mZ(0), mW(0) { } - explicit Vector4f(const Vector2f& v, const float z) : mX(((Vector4f&)v).mX), mY(((Vector4f&)v).mY), mZ(z), mW(0) { } - explicit Vector4f(const Vector2f& v, const float z, const float w) : mX(((Vector4f&)v).mX), mY(((Vector4f&)v).mY), mZ(z), mW(w) { } - explicit Vector4f(const Vector3f& v) : mX(((Vector4f&)v).mX), mY(((Vector4f&)v).mY), mZ(((Vector4f&)v).mZ), mW(0) { } - explicit Vector4f(const Vector3f& v, const float w) : mX(((Vector4f&)v).mX), mY(((Vector4f&)v).mY), mZ(((Vector4f&)v).mZ), mW(w) { } + Vector4f() { } + Vector4f(const float _f) : mX(_f), mY(_f), mZ(_f), mW(_f) { } + Vector4f(const float _x, const float _y, const float _z, const float _w) : mX(_x), mY(_y), mZ(_z), mW(_w) { } + explicit Vector4f(const Vector2f& _v) : mX(((Vector4f&)_v).mX), mY(((Vector4f&)_v).mY), mZ(0), mW(0) { } + explicit Vector4f(const Vector2f& _v, const float _z) : mX(((Vector4f&)_v).mX), mY(((Vector4f&)_v).mY), mZ(_z), mW(0) { } + explicit Vector4f(const Vector2f& _v, const float _z, const float _w) : mX(((Vector4f&)_v).mX), mY(((Vector4f&)_v).mY), mZ(_z), mW(_w) { } + explicit Vector4f(const Vector3f& _v) : mX(((Vector4f&)_v).mX), mY(((Vector4f&)_v).mY), mZ(((Vector4f&)_v).mZ), mW(0) { } + explicit Vector4f(const Vector3f& _v, const float _w) : mX(((Vector4f&)_v).mX), mY(((Vector4f&)_v).mY), mZ(((Vector4f&)_v).mZ), mW(_w) { } - const bool operator==(const Vector4f& other) const { return ((mX == other.mX) && (mY == other.mY) && (mZ == other.mZ) && (mW == other.mW)); } - const bool operator!=(const Vector4f& other) const { return ((mX != other.mX) || (mY != other.mY) || (mZ != other.mZ) || (mW != other.mW)); } + const bool operator==(const Vector4f& _other) const { return ((mX == _other.mX) && (mY == _other.mY) && (mZ == _other.mZ) && (mW == _other.mW)); } + const bool operator!=(const Vector4f& _other) const { return ((mX != _other.mX) || (mY != _other.mY) || (mZ != _other.mZ) || (mW != _other.mW)); } - const Vector4f operator+(const Vector4f& other) const { return { mX + other.mX, mY + other.mY, mZ + other.mZ, mW + other.mW }; } - const Vector4f operator-(const Vector4f& other) const { return { mX - other.mX, mY - other.mY, mZ - other.mZ, mW - other.mW }; } - const Vector4f operator*(const Vector4f& other) const { return { mX * other.mX, mY * other.mY, mZ * other.mZ, mW * other.mW }; } - const Vector4f operator/(const Vector4f& other) const { return { mX / other.mX, mY / other.mY, mZ / other.mZ, mW / other.mW }; } + const Vector4f operator+(const Vector4f& _other) const { return { mX + _other.mX, mY + _other.mY, mZ + _other.mZ, mW + _other.mW }; } + const Vector4f operator-(const Vector4f& _other) const { return { mX - _other.mX, mY - _other.mY, mZ - _other.mZ, mW - _other.mW }; } + const Vector4f operator*(const Vector4f& _other) const { return { mX * _other.mX, mY * _other.mY, mZ * _other.mZ, mW * _other.mW }; } + const Vector4f operator/(const Vector4f& _other) const { return { mX / _other.mX, mY / _other.mY, mZ / _other.mZ, mW / _other.mW }; } - const Vector4f operator+(const float& other) const { return { mX + other, mY + other, mZ + other, mW + other }; } - const Vector4f operator-(const float& other) const { return { mX - other, mY - other, mZ - other, mW - other }; } - const Vector4f operator*(const float& other) const { return { mX * other, mY * other, mZ * other, mW * other }; } - const Vector4f operator/(const float& other) const { return { mX / other, mY / other, mZ / other, mW / other }; } + const Vector4f operator+(const float& _other) const { return { mX + _other, mY + _other, mZ + _other, mW + _other }; } + const Vector4f operator-(const float& _other) const { return { mX - _other, mY - _other, mZ - _other, mW - _other }; } + const Vector4f operator*(const float& _other) const { return { mX * _other, mY * _other, mZ * _other, mW * _other }; } + const Vector4f operator/(const float& _other) const { return { mX / _other, mY / _other, mZ / _other, mW / _other }; } const Vector4f operator-() const { return {-mX , -mY, -mZ, -mW }; } - Vector4f& operator+=(const Vector4f& other) { *this = *this + other; return *this; } - Vector4f& operator-=(const Vector4f& other) { *this = *this - other; return *this; } - Vector4f& operator*=(const Vector4f& other) { *this = *this * other; return *this; } - Vector4f& operator/=(const Vector4f& other) { *this = *this / other; return *this; } + Vector4f& operator+=(const Vector4f& _other) { *this = *this + _other; return *this; } + Vector4f& operator-=(const Vector4f& _other) { *this = *this - _other; return *this; } + Vector4f& operator*=(const Vector4f& _other) { *this = *this * _other; return *this; } + Vector4f& operator/=(const Vector4f& _other) { *this = *this / _other; return *this; } - Vector4f& operator+=(const float& other) { *this = *this + other; return *this; } - Vector4f& operator-=(const float& other) { *this = *this - other; return *this; } - Vector4f& operator*=(const float& other) { *this = *this * other; return *this; } - Vector4f& operator/=(const float& other) { *this = *this / other; return *this; } + Vector4f& operator+=(const float& _other) { *this = *this + _other; return *this; } + Vector4f& operator-=(const float& _other) { *this = *this - _other; return *this; } + Vector4f& operator*=(const float& _other) { *this = *this * _other; return *this; } + Vector4f& operator/=(const float& _other) { *this = *this / _other; return *this; } - float& operator[](const int index) { assert(index < 4 && "index out of range"); return (&mX)[index]; } - const float& operator[](const int index) const { assert(index < 4 && "index out of range"); return (&mX)[index]; } + float& operator[](const int _index) { assert(_index < 4 && "index out of range"); return (&mX)[_index]; } + const float& operator[](const int _index) const { assert(_index < 4 && "index out of range"); return (&mX)[_index]; } float& x() { return mX; } float& y() { return mY; } @@ -63,7 +64,8 @@ class Vector4f inline Vector3f& v3() { return *(Vector3f*)this; } inline const Vector3f& v3() const { return *(Vector3f*)this; } - inline Vector4f& round() { mX = (int)(mX + 0.5f); mY = (int)(mY + 0.5f); mZ = (int)(mZ + 0.5f); mW = (int)(mW + 0.5f); return *this; } + Vector4f& round(); + Vector4f& lerp(const Vector4f& _start, const Vector4f& _end, const float _fraction); static const Vector4f Zero() { return { 0, 0, 0, 0 }; } static const Vector4f UnitX() { return { 1, 0, 0, 0 }; } @@ -78,6 +80,6 @@ class Vector4f float mZ; float mW; -}; +}; // Vector4f #endif // ES_CORE_MATH_VECTOR4F_H diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index a5ecd3c234..5f5552a132 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -595,11 +595,6 @@ float Font::getNewlineStartOffset(const std::string& text, const unsigned int& c } } -inline float font_round(float v) -{ - return round(v); -} - TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsigned int color, float xLen, Alignment alignment, float lineSpacing) { float x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, 0, xLen, alignment) : 0); @@ -643,8 +638,8 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign // triangle 1 // round to fix some weird "cut off" text bugs - tri[0].pos = Vector2f(font_round(glyphStartX), font_round(y + (glyph->texSize.y() * textureSize.y() - glyph->bearing.y()))); - tri[1].pos = Vector2f(font_round(glyphStartX + glyph->texSize.x() * textureSize.x()), font_round(y - glyph->bearing.y())); + tri[0].pos = Vector2f(Math::round(glyphStartX), Math::round(y + (glyph->texSize.y() * textureSize.y() - glyph->bearing.y()))); + tri[1].pos = Vector2f(Math::round(glyphStartX + glyph->texSize.x() * textureSize.x()), Math::round(y - glyph->bearing.y())); tri[2].pos = Vector2f(tri[0].pos.x(), tri[1].pos.y()); //tri[0].tex = Vector2f(0, 0); diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index e24f7313c3..97fd6eb539 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -13,10 +13,10 @@ class TextCache; -#define FONT_SIZE_MINI ((unsigned int)(0.030f * std::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) -#define FONT_SIZE_SMALL ((unsigned int)(0.035f * std::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) -#define FONT_SIZE_MEDIUM ((unsigned int)(0.045f * std::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) -#define FONT_SIZE_LARGE ((unsigned int)(0.085f * std::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) +#define FONT_SIZE_MINI ((unsigned int)(0.030f * Math::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) +#define FONT_SIZE_SMALL ((unsigned int)(0.035f * Math::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) +#define FONT_SIZE_MEDIUM ((unsigned int)(0.045f * Math::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) +#define FONT_SIZE_LARGE ((unsigned int)(0.085f * Math::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) #define FONT_PATH_LIGHT ":/opensans_hebrew_condensed_light.ttf" #define FONT_PATH_REGULAR ":/opensans_hebrew_condensed_regular.ttf" diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index 18faf6cbd5..7670dfaa47 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -1,5 +1,6 @@ #include "resources/TextureData.h" +#include "math/Misc.h" #include "resources/ResourceManager.h" #include "ImageIO.h" #include "Log.h" @@ -8,7 +9,6 @@ #include #include #include -#include #include #define DPI 96 @@ -62,18 +62,18 @@ bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length mSourceWidth = svgImage->width; mSourceHeight = svgImage->height; } - mWidth = (size_t)round(mSourceWidth); - mHeight = (size_t)round(mSourceHeight); + mWidth = (size_t)Math::round(mSourceWidth); + mHeight = (size_t)Math::round(mSourceHeight); if (mWidth == 0) { // auto scale width to keep aspect - mWidth = (size_t)round(((float)mHeight / svgImage->height) * svgImage->width); + mWidth = (size_t)Math::round(((float)mHeight / svgImage->height) * svgImage->width); } else if (mHeight == 0) { // auto scale height to keep aspect - mHeight = (size_t)round(((float)mWidth / svgImage->width) * svgImage->height); + mHeight = (size_t)Math::round(((float)mWidth / svgImage->width) * svgImage->height); } unsigned char* dataRGBA = new unsigned char[mWidth * mHeight * 4]; From ae5f9a0342c18cb5241453d3565a07c08e9ae10e Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Wed, 15 Nov 2017 16:59:39 +0100 Subject: [PATCH 210/603] Move StringUtil to utils subfolder Added utils/FileSystemUtils which will replace some boost::filesystem functions in the future --- es-core/CMakeLists.txt | 8 + es-core/src/StringUtil.h | 136 --------------- es-core/src/components/TextComponent.cpp | 4 +- es-core/src/components/TextEditComponent.cpp | 6 +- es-core/src/resources/Font.cpp | 12 +- es-core/src/utils/FileSystemUtil.cpp | 168 +++++++++++++++++++ es-core/src/utils/FileSystemUtil.h | 23 +++ es-core/src/utils/StringUtil.cpp | 156 +++++++++++++++++ es-core/src/utils/StringUtil.h | 22 +++ 9 files changed, 388 insertions(+), 147 deletions(-) delete mode 100644 es-core/src/StringUtil.h create mode 100644 es-core/src/utils/FileSystemUtil.cpp create mode 100644 es-core/src/utils/FileSystemUtil.h create mode 100644 es-core/src/utils/StringUtil.cpp create mode 100644 es-core/src/utils/StringUtil.h diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index fabae068f9..37d1ab9eef 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -61,6 +61,10 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.h + # Utils + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.h + # Embedded assets (needed by ResourceManager) ${emulationstation-all_SOURCE_DIR}/data/Resources.h ) @@ -120,6 +124,10 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureResource.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/TextureDataManager.cpp + + # Utils + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.cpp ) set(EMBEDDED_ASSET_SOURCES diff --git a/es-core/src/StringUtil.h b/es-core/src/StringUtil.h deleted file mode 100644 index a7f8f84e3f..0000000000 --- a/es-core/src/StringUtil.h +++ /dev/null @@ -1,136 +0,0 @@ -#pragma once -#ifndef ES_CORE_STRING_UTIL_H -#define ES_CORE_STRING_UTIL_H - -namespace StringUtil -{ - inline unsigned int chars2Unicode(const std::string& _string, size_t& _cursor) - { - const char& c = _string[_cursor]; - unsigned int result = '?'; - - if((c & 0x80) == 0) // 0xxxxxxx, one byte character - { - // 0xxxxxxx - result = ((_string[_cursor++] ) ); - } - else if((c & 0xE0) == 0xC0) // 110xxxxx, two byte character - { - // 110xxxxx 10xxxxxx - result = ((_string[_cursor++] & 0x1F) << 6) | - ((_string[_cursor++] & 0x3F) ); - } - else if((c & 0xF0) == 0xE0) // 1110xxxx, three byte character - { - // 1110xxxx 10xxxxxx 10xxxxxx - result = ((_string[_cursor++] & 0x0F) << 12) | - ((_string[_cursor++] & 0x3F) << 6) | - ((_string[_cursor++] & 0x3F) ); - } - else if((c & 0xF8) == 0xF0) // 11110xxx, four byte character - { - // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - result = ((_string[_cursor++] & 0x07) << 18) | - ((_string[_cursor++] & 0x3F) << 12) | - ((_string[_cursor++] & 0x3F) << 6) | - ((_string[_cursor++] & 0x3F) ); - } - else - { - // error, invalid unicode - ++_cursor; - } - - return result; - - } // chars2Unicode - - inline std::string unicode2Chars(const unsigned int _unicode) - { - std::string result; - - if(_unicode < 0x80) // one byte character - { - result += ((_unicode ) ); - } - else if(_unicode < 0x800) // two byte character - { - result += ((_unicode >> 6) ) | 0xC0; - result += ((_unicode ) & 0x3F) | 0x80; - } - else if(_unicode < 0xFFFF) // three byte character - { - result += ((_unicode >> 12) ) | 0xE0; - result += ((_unicode >> 6) & 0x3F) | 0x80; - result += ((_unicode ) & 0x3F) | 0x80; - } - else if(_unicode <= 0x1fffff) // four byte character - { - result += ((_unicode >> 18) ) | 0xF0; - result += ((_unicode >> 12) & 0x3F) | 0x80; - result += ((_unicode >> 6) & 0x3F) | 0x80; - result += ((_unicode ) & 0x3F) | 0x80; - } - else - { - // error, invalid unicode - result += '?'; - } - - return result; - - } // unicode2Chars - - inline size_t nextCursor(const std::string& _string, const size_t _cursor) - { - size_t result = _cursor; - - while(result < _string.length()) - { - ++result; - - if((_string[result] & 0xC0) != 0x80) // break if current character is not 10xxxxxx - break; - } - - return result; - - } // nextCursor - - inline size_t prevCursor(const std::string& _string, const size_t _cursor) - { - size_t result = _cursor; - - while(result > 0) - { - --result; - - if((_string[result] & 0xC0) != 0x80) // break if current character is not 10xxxxxx - break; - } - - return result; - - } // prevCursor - - inline size_t moveCursor(const std::string& _string, const size_t _cursor, const int _amount) - { - size_t result = _cursor; - - if(_amount > 0) - { - for(int i = 0; i < _amount; ++i) - result = nextCursor(_string, result); - } - else if(_amount < 0) - { - for(int i = _amount; i < 0; ++i) - result = prevCursor(_string, result); - } - - return result; - - } // moveCursor -} - -#endif // ES_CORE_STRING_UTIL_H diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index f7885139e6..0e451912eb 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -1,9 +1,9 @@ #include "components/TextComponent.h" +#include "utils/StringUtil.h" #include "Log.h" #include "Renderer.h" #include "Settings.h" -#include "StringUtil.h" #include "Util.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), @@ -198,7 +198,7 @@ void TextComponent::onTextChanged() while(text.size() && size.x() + abbrevSize.x() > mSize.x()) { - size_t newSize = StringUtil::prevCursor(text, text.size()); + size_t newSize = Utils::String::prevCursor(text, text.size()); text.erase(newSize, text.size() - newSize); size = f->sizeText(text); } diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index 758b1aef9d..5cb7fb2dcb 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -1,8 +1,8 @@ #include "components/TextEditComponent.h" #include "resources/Font.h" +#include "utils/StringUtil.h" #include "Renderer.h" -#include "StringUtil.h" #define TEXT_PADDING_HORIZ 10 #define TEXT_PADDING_VERT 2 @@ -60,7 +60,7 @@ void TextEditComponent::textInput(const char* text) { if(mCursor > 0) { - size_t newCursor = StringUtil::prevCursor(mText, mCursor); + size_t newCursor = Utils::String::prevCursor(mText, mCursor); mText.erase(mText.begin() + newCursor, mText.begin() + mCursor); mCursor = newCursor; } @@ -191,7 +191,7 @@ void TextEditComponent::updateCursorRepeat(int deltaTime) void TextEditComponent::moveCursor(int amt) { - mCursor = StringUtil::moveCursor(mText, mCursor, amt); + mCursor = Utils::String::moveCursor(mText, mCursor, amt); onCursorChanged(); } diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index a5ecd3c234..299267fd6f 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -1,8 +1,8 @@ #include "resources/Font.h" +#include "utils/StringUtil.h" #include "Log.h" #include "Renderer.h" -#include "StringUtil.h" #include "Util.h" FT_Library Font::sLibrary = NULL; @@ -448,7 +448,7 @@ Vector2f Font::sizeText(std::string text, float lineSpacing) size_t i = 0; while(i < text.length()) { - unsigned int character = StringUtil::chars2Unicode(text, i); // advances i + unsigned int character = Utils::String::chars2Unicode(text, i); // advances i if(character == '\n') { @@ -541,8 +541,8 @@ Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, size_t s size_t cursor = 0; while(cursor < stop) { - unsigned int wrappedCharacter = StringUtil::chars2Unicode(wrappedText, wrapCursor); - unsigned int character = StringUtil::chars2Unicode(text, cursor); + unsigned int wrappedCharacter = Utils::String::chars2Unicode(wrappedText, wrapCursor); + unsigned int character = Utils::String::chars2Unicode(text, cursor); if(wrappedCharacter == '\n' && character != '\n') { @@ -551,7 +551,7 @@ Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, size_t s lineWidth = 0.0f; y += getHeight(lineSpacing); - cursor = StringUtil::prevCursor(text, cursor); // unconsume + cursor = Utils::String::prevCursor(text, cursor); // unconsume continue; } @@ -614,7 +614,7 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign size_t cursor = 0; while(cursor < text.length()) { - unsigned int character = StringUtil::chars2Unicode(text, cursor); // also advances cursor + unsigned int character = Utils::String::chars2Unicode(text, cursor); // also advances cursor Glyph* glyph; // invalid character diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp new file mode 100644 index 0000000000..54e49d88c4 --- /dev/null +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -0,0 +1,168 @@ +#include "utils/FileSystemUtil.h" + +#include +#include + +#if defined(WIN32) +// because windows... +#include +#define snprintf _snprintf +#define mkdir(x,y) _mkdir(x) +#endif // WIN32 + +namespace Utils +{ + namespace FileSystem + { + bool createDirectory(const std::string& path) + { + // don't create if it already exists + if(exists(path)) + return true; + + // convert '\\' to '/' + fixSeparators(path); + + // try to create directory + if(mkdir(path.c_str(), 0755) == 0) + return true; + + // failed to create directory, try to create the parent + std::string parent = getParent(path); + + // only try to create parent if it's not identical to path + if(parent != path) + createDirectory(parent); + + // try to create directory again now that the parent should exist + return (mkdir(path.c_str(), 0755) == 0); + + } // createDirectory + + void fixSeparators(const std::string& path) + { + char* p = nullptr; + + // convert '\\' to '/' + for(p = (char*)path.c_str() + 1; *p; ++p) + { + if(*p == '\\') + *p = '/'; + } + + } // fixSeparators + + std::string escapePath(const std::string& path) + { + +#ifdef WIN32 + // windows escapes stuff by just putting everything in quotes + return '"' + path + '"'; +#else // WIN32 + // insert a backslash before most characters that would mess up a bash path + std::string escapedPath = path; + const char* invalidChars = "\\ '\"!$^&*(){}[]?;<>"; + const char* invalidChar = invalidChars; + + while(*invalidChar) + { + for(size_t i = 0; i < escapedPath.length(); ++i) + { + if(escapedPath[i] == *invalidChar) + { + escapedPath.insert(i, 1, '\\'); + ++i; + } + } + + ++invalidChar; + } + + return escapedPath; +#endif // WIN32 + + } // escapePath + + std::string getParent(const std::string& path) + { + // convert '\\' to '/' + fixSeparators(path); + + // make a copy of the path + char temp[512]; + size_t len = snprintf(temp, sizeof(temp), "%s", path.c_str()); + + // find last '/' and end the new path + while(len > 1) + { + if(temp[--len] == '/') + { + temp[len] = 0; + return temp; + } + } + + // no parent found + return path; + + } // getParent + + std::string getFileName(const std::string& path) + { + // convert '\\' to '/' + fixSeparators(path); + + // make a copy of the path + char temp[512]; + size_t len = snprintf(temp, sizeof(temp), "%s", path.c_str()); + + // find last '/' and return the filename + while(len > 1) + { + // return "." if this is the end of the path, otherwise return filename + if(temp[--len] == '/') + return ((temp[len + 1] == 0) ? "." : (temp + len + 1)); + } + + // no '/' found, entire path is a filename + return path; + + } // getFileName + + std::string getStem(const std::string& path) + { + std::string fileName = getFileName(path); + + // empty fileName + if(fileName == ".") + return fileName; + + // make a copy of the filename + char temp[512]; + size_t len = snprintf(temp, sizeof(temp), "%s", fileName.c_str()); + + // find last '.' and remove the extension + while(len > 1) + { + if(temp[--len] == '.') + { + temp[len] = 0; + return temp; + } + } + + // no '.' found, filename has no extension + return fileName; + + } // getStem + + bool exists(const std::string& path) + { + struct stat info; + return (stat(path.c_str(), &info) == 0); + + } // exists + + } // FileSystem:: + +} // Utils:: diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h new file mode 100644 index 0000000000..fe69296540 --- /dev/null +++ b/es-core/src/utils/FileSystemUtil.h @@ -0,0 +1,23 @@ +#pragma once +#ifndef ES_CORE_FILE_SYSTEM_UTIL_H +#define ES_CORE_FILE_SYSTEM_UTIL_H + +#include + +namespace Utils +{ + namespace FileSystem + { + bool createDirectory(const std::string& path); + void fixSeparators(const std::string& path); + std::string escapePath(const std::string& path); + std::string getParent(const std::string& path); + std::string getFileName(const std::string& path); + std::string getStem(const std::string& path); + bool exists(const std::string& path); + + } // FileSystem:: + +} // Utils:: + +#endif // ES_CORE_FILE_SYSTEM_UTIL_H diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp new file mode 100644 index 0000000000..684ec3c4a5 --- /dev/null +++ b/es-core/src/utils/StringUtil.cpp @@ -0,0 +1,156 @@ +#include "utils/StringUtil.h" + +namespace Utils +{ + namespace String + { + unsigned int chars2Unicode(const std::string& _string, size_t& _cursor) + { + const char& c = _string[_cursor]; + unsigned int result = '?'; + + if((c & 0x80) == 0) // 0xxxxxxx, one byte character + { + // 0xxxxxxx + result = ((_string[_cursor++] ) ); + } + else if((c & 0xE0) == 0xC0) // 110xxxxx, two byte character + { + // 110xxxxx 10xxxxxx + result = ((_string[_cursor++] & 0x1F) << 6) | + ((_string[_cursor++] & 0x3F) ); + } + else if((c & 0xF0) == 0xE0) // 1110xxxx, three byte character + { + // 1110xxxx 10xxxxxx 10xxxxxx + result = ((_string[_cursor++] & 0x0F) << 12) | + ((_string[_cursor++] & 0x3F) << 6) | + ((_string[_cursor++] & 0x3F) ); + } + else if((c & 0xF8) == 0xF0) // 11110xxx, four byte character + { + // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + result = ((_string[_cursor++] & 0x07) << 18) | + ((_string[_cursor++] & 0x3F) << 12) | + ((_string[_cursor++] & 0x3F) << 6) | + ((_string[_cursor++] & 0x3F) ); + } + else + { + // error, invalid unicode + ++_cursor; + } + + return result; + + } // chars2Unicode + + std::string unicode2Chars(const unsigned int _unicode) + { + std::string result; + + if(_unicode < 0x80) // one byte character + { + result += ((_unicode ) ); + } + else if(_unicode < 0x800) // two byte character + { + result += ((_unicode >> 6) ) | 0xC0; + result += ((_unicode ) & 0x3F) | 0x80; + } + else if(_unicode < 0xFFFF) // three byte character + { + result += ((_unicode >> 12) ) | 0xE0; + result += ((_unicode >> 6) & 0x3F) | 0x80; + result += ((_unicode ) & 0x3F) | 0x80; + } + else if(_unicode <= 0x1fffff) // four byte character + { + result += ((_unicode >> 18) ) | 0xF0; + result += ((_unicode >> 12) & 0x3F) | 0x80; + result += ((_unicode >> 6) & 0x3F) | 0x80; + result += ((_unicode ) & 0x3F) | 0x80; + } + else + { + // error, invalid unicode + result += '?'; + } + + return result; + + } // unicode2Chars + + size_t nextCursor(const std::string& _string, const size_t _cursor) + { + size_t result = _cursor; + + while(result < _string.length()) + { + ++result; + + if((_string[result] & 0xC0) != 0x80) // break if current character is not 10xxxxxx + break; + } + + return result; + + } // nextCursor + + size_t prevCursor(const std::string& _string, const size_t _cursor) + { + size_t result = _cursor; + + while(result > 0) + { + --result; + + if((_string[result] & 0xC0) != 0x80) // break if current character is not 10xxxxxx + break; + } + + return result; + + } // prevCursor + + size_t moveCursor(const std::string& _string, const size_t _cursor, const int _amount) + { + size_t result = _cursor; + + if(_amount > 0) + { + for(int i = 0; i < _amount; ++i) + result = nextCursor(_string, result); + } + else if(_amount < 0) + { + for(int i = _amount; i < 0; ++i) + result = prevCursor(_string, result); + } + + return result; + + } // moveCursor + + void trim(std::string& _string) + { + if(_string.size()) + { + size_t cursorB = 0; + size_t cursorE = _string.size(); + + while((cursorB < _string.size()) && _string[cursorB] == ' ') + ++cursorB; + + while((cursorE > 0) && _string[cursorE - 1] == ' ') + --cursorE; + + _string.erase(_string.begin() + cursorE, _string.end()); + _string.erase(_string.begin(), _string.begin() + cursorB); + } + + } // trim + + } // String:: + +} // Utils:: diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h new file mode 100644 index 0000000000..29d82c338b --- /dev/null +++ b/es-core/src/utils/StringUtil.h @@ -0,0 +1,22 @@ +#pragma once +#ifndef ES_CORE_STRING_UTIL_H +#define ES_CORE_STRING_UTIL_H + +#include + +namespace Utils +{ + namespace String + { + unsigned int chars2Unicode(const std::string& _string, size_t& _cursor); + std::string unicode2Chars(const unsigned int _unicode); + size_t nextCursor(const std::string& _string, const size_t _cursor); + size_t prevCursor(const std::string& _string, const size_t _cursor); + size_t moveCursor(const std::string& _string, const size_t _cursor, const int _amount); + void trim(std::string& _string); + + } // String:: + +} // Utils:: + +#endif // ES_CORE_STRING_UTIL_H From dc4f7e4cf20dcbf8df7b54dc649bc377b7d240da Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 17 Nov 2017 12:42:33 +0100 Subject: [PATCH 211/603] Fix for building ES on Windows using cmake --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index b9c7a03f37..d426f482fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,6 +79,7 @@ if(MSVC) set(CMAKE_DEBUG_POSTFIX "d") add_definitions(-D_CRT_SECURE_NO_DEPRECATE) add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) + add_definitions(-DNOMINMAX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") #multi-processor compilation set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") #multi-processor compilation endif() From 160ef73eee27f2fbd25063e7c4490bd09b15be4d Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 18 Nov 2017 18:11:58 +0100 Subject: [PATCH 212/603] Fix NES and SNES scraper that broke during boost cleanup --- es-app/src/scrapers/GamesDBScraper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 97b8639637..cc76d8903a 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -38,7 +38,7 @@ const std::map gamesdb_platformid_map { { NINTENDO_64, "Nintendo 64" }, { NINTENDO_DS, "Nintendo DS" }, { FAMICOM_DISK_SYSTEM, "Famicom Disk System" }, - { NINTENDO_ENTERTAINMENT_SYSTEM, "Nintendo Entertainment System { NES)" }, + { NINTENDO_ENTERTAINMENT_SYSTEM, "Nintendo Entertainment System (NES)" }, { GAME_BOY, "Nintendo Game Boy" }, { GAME_BOY_ADVANCE, "Nintendo Game Boy Advance" }, { GAME_BOY_COLOR, "Nintendo Game Boy Color" }, @@ -63,7 +63,7 @@ const std::map gamesdb_platformid_map { { PLAYSTATION_4, "Sony Playstation 4" }, { PLAYSTATION_VITA, "Sony Playstation Vita" }, { PLAYSTATION_PORTABLE, "Sony Playstation Portable" }, - { SUPER_NINTENDO, "Super Nintendo { SNES)" }, + { SUPER_NINTENDO, "Super Nintendo (SNES)" }, { TURBOGRAFX_16, "TurboGrafx 16" }, { WONDERSWAN, "WonderSwan" }, { WONDERSWAN_COLOR, "WonderSwan Color" }, From f35769de6bebea0df03d6621967a03dd814f18e5 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 18 Nov 2017 17:45:18 +0000 Subject: [PATCH 213/603] bump version to v2.7.3 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 627f8d60fc..bcd6b5b5f1 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -6,12 +6,12 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 7 -#define PROGRAM_VERSION_MAINTENANCE 2 -#define PROGRAM_VERSION_STRING "2.7.2rp" +#define PROGRAM_VERSION_MAINTENANCE 3 +#define PROGRAM_VERSION_STRING "2.7.3rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,7,2\0" +#define RESOURCE_VERSION_STRING "2,7,3\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE #endif // ES_APP_EMULATION_STATION_H From bd0c6beed547fa8e460bb2185a13b724d0e0adb8 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 17 Nov 2017 15:58:52 +0100 Subject: [PATCH 214/603] Silence warnings --- es-app/src/ScraperCmdLine.cpp | 2 +- es-app/src/SystemData.cpp | 10 ++--- es-app/src/SystemScreenSaver.cpp | 2 +- es-app/src/VolumeControl.cpp | 5 ++- es-app/src/components/AsyncReqComponent.cpp | 4 +- .../src/components/ScraperSearchComponent.cpp | 2 +- es-app/src/components/TextListComponent.h | 26 ++++++------- es-app/src/guis/GuiFastSelect.cpp | 10 ++--- es-app/src/guis/GuiGamelistOptions.cpp | 8 ++-- es-app/src/guis/GuiInfoPopup.cpp | 4 +- es-app/src/guis/GuiMetaDataEd.cpp | 4 +- es-app/src/guis/GuiScraperMulti.cpp | 2 +- es-app/src/views/SystemView.cpp | 18 ++++----- es-app/src/views/ViewController.cpp | 6 +-- .../src/views/gamelist/BasicGameListView.cpp | 2 +- .../views/gamelist/DetailedGameListView.cpp | 4 +- es-app/src/views/gamelist/IGameListView.cpp | 4 +- .../views/gamelist/ISimpleGameListView.cpp | 2 +- .../src/views/gamelist/VideoGameListView.cpp | 4 +- es-core/src/AudioManager.cpp | 2 +- es-core/src/GuiComponent.cpp | 4 +- es-core/src/ImageIO.cpp | 4 +- es-core/src/InputConfig.cpp | 2 +- es-core/src/InputConfig.h | 2 + es-core/src/InputManager.cpp | 2 +- es-core/src/Renderer_draw_gl.cpp | 8 ++-- es-core/src/Renderer_init_sdlgl.cpp | 2 +- es-core/src/ThemeData.cpp | 2 +- es-core/src/Util.cpp | 4 +- es-core/src/Window.cpp | 6 +-- es-core/src/Window.h | 2 +- .../src/components/AnimatedImageComponent.cpp | 2 +- es-core/src/components/ComponentGrid.cpp | 4 +- es-core/src/components/ComponentList.cpp | 2 +- es-core/src/components/DateTimeComponent.cpp | 2 +- es-core/src/components/HelpComponent.cpp | 2 +- es-core/src/components/IList.h | 10 ++--- es-core/src/components/ImageComponent.cpp | 2 +- es-core/src/components/ImageGridComponent.h | 4 +- es-core/src/components/MenuComponent.cpp | 4 +- es-core/src/components/NinePatchComponent.cpp | 2 +- es-core/src/components/OptionListComponent.h | 2 +- .../src/components/ScrollableContainer.cpp | 2 +- es-core/src/components/TextEditComponent.cpp | 12 +++--- es-core/src/components/VideoVlcComponent.cpp | 12 +++--- es-core/src/guis/GuiInputConfig.cpp | 4 +- es-core/src/math/Misc.cpp | 38 +++++++++++++++---- es-core/src/math/Misc.h | 12 ++++-- es-core/src/math/Transform4x4f.cpp | 22 +++++------ es-core/src/math/Vector2f.cpp | 4 +- es-core/src/math/Vector3f.cpp | 6 +-- es-core/src/math/Vector4f.cpp | 8 ++-- es-core/src/resources/Font.cpp | 22 +++++------ es-core/src/resources/Font.h | 8 ++-- es-core/src/resources/ResourceManager.cpp | 2 +- es-core/src/resources/TextureData.cpp | 4 +- es-core/src/resources/TextureResource.cpp | 10 ++--- es-core/src/utils/StringUtil.cpp | 8 ++-- 58 files changed, 199 insertions(+), 170 deletions(-) diff --git a/es-app/src/ScraperCmdLine.cpp b/es-app/src/ScraperCmdLine.cpp index 1a47abbdde..768808fcce 100644 --- a/es-app/src/ScraperCmdLine.cpp +++ b/es-app/src/ScraperCmdLine.cpp @@ -13,7 +13,7 @@ std::ostream& out = std::cout; -void handle_interrupt_signal(int p) +void handle_interrupt_signal(int /*p*/) { sleep(50); diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index f1d2b755ad..15787c0c36 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -433,7 +433,7 @@ bool SystemData::hasGamelist() const unsigned int SystemData::getGameCount() const { - return mRootFolder->getFilesRecursive(GAME).size(); + return (unsigned int)mRootFolder->getFilesRecursive(GAME).size(); } SystemData* SystemData::getRandomSystem() @@ -447,7 +447,7 @@ SystemData* SystemData::getRandomSystem() } // get random number in range - int target = (int) Math::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); + int target = (int)Math::round((std::rand() / (float)RAND_MAX) * (total - 1)); for (auto it = sSystemVector.cbegin(); it != sSystemVector.cend(); it++) { if ((*it)->isGameSystem()) @@ -470,18 +470,18 @@ SystemData* SystemData::getRandomSystem() FileData* SystemData::getRandomGame() { std::vector list = mRootFolder->getFilesRecursive(GAME, true); - unsigned int total = list.size(); + unsigned int total = (int)list.size(); int target = 0; // get random number in range if (total == 0) return NULL; - target = (int) Math::round(((double)std::rand() / (double)RAND_MAX) * (total - 1)); + target = (int)Math::round((std::rand() / (float)RAND_MAX) * (total - 1)); return list.at(target); } unsigned int SystemData::getDisplayedGameCount() const { - return mRootFolder->getFilesRecursive(GAME, true).size(); + return (unsigned int)mRootFolder->getFilesRecursive(GAME, true).size(); } void SystemData::loadTheme() diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 03ac51f096..e2efdf93fd 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -462,7 +462,7 @@ void SystemScreenSaver::pickRandomCustomImage(std::string& path) } } - int fileCount = matchingFiles.size(); + int fileCount = (int)matchingFiles.size(); if (fileCount > 0) { // get a random index in the range 0 to fileCount (exclusive) diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index 09e6530a05..29b3f3b28a 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -45,6 +45,7 @@ VolumeControl::VolumeControl(const VolumeControl & right): , mixerHandle(nullptr), endpointVolume(nullptr) #endif { + (void)right; sInstance = right.sInstance; } @@ -300,7 +301,7 @@ int VolumeControl::getVolume() const mixerControlDetails.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); if (mixerGetControlDetails((HMIXEROBJ)mixerHandle, &mixerControlDetails, MIXER_GETCONTROLDETAILSF_VALUE) == MMSYSERR_NOERROR) { - volume = (uint8_t)Math::round((value.dwValue * 100) / 65535); + volume = (int)Math::round((value.dwValue * 100) / 65535.0f); } else { @@ -313,7 +314,7 @@ int VolumeControl::getVolume() const float floatVolume = 0.0f; //0-1 if (endpointVolume->GetMasterVolumeLevelScalar(&floatVolume) == S_OK) { - volume = (uint8_t)Math::round(floatVolume * 100.0f); + volume = (int)Math::round(floatVolume * 100.0f); LOG(LogInfo) << " getting volume as " << volume << " ( from float " << floatVolume << ")"; } else diff --git a/es-app/src/components/AsyncReqComponent.cpp b/es-app/src/components/AsyncReqComponent.cpp index 0fae8130b1..5a95ae82c2 100644 --- a/es-app/src/components/AsyncReqComponent.cpp +++ b/es-app/src/components/AsyncReqComponent.cpp @@ -35,13 +35,13 @@ void AsyncReqComponent::update(int deltaTime) mTime += deltaTime; } -void AsyncReqComponent::render(const Transform4x4f& parentTrans) +void AsyncReqComponent::render(const Transform4x4f& /*parentTrans*/) { Transform4x4f trans = Transform4x4f::Identity(); trans = trans.translate(Vector3f(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f, 0)); Renderer::setMatrix(trans); - Vector3f point(Math::cos(mTime * 0.01f) * 12, Math::sin(mTime * 0.01f) * 12, 0); + Vector3f point(Math::cosf(mTime * 0.01f) * 12, Math::sinf(mTime * 0.01f) * 12, 0); Renderer::drawRect((int)point.x(), (int)point.y(), 8, 8, 0x0000FFFF); } diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index 9a3898cd70..62802c2480 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -57,7 +57,7 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "GENRE:", font, mdLblColor), mMD_Genre)); mMD_Pairs.push_back(MetaDataPair(std::make_shared(mWindow, "PLAYERS:", font, mdLblColor), mMD_Players)); - mMD_Grid = std::make_shared(mWindow, Vector2i(2, mMD_Pairs.size()*2 - 1)); + mMD_Grid = std::make_shared(mWindow, Vector2i(2, (int)mMD_Pairs.size()*2 - 1)); unsigned int i = 0; for(auto it = mMD_Pairs.cbegin(); it != mMD_Pairs.cend(); it++) { diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index e81a6257ef..8e8e7d4d6e 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -63,7 +63,7 @@ class TextListComponent : public IList it->data.textCache.reset(); } - inline void setUppercase(bool uppercase) + inline void setUppercase(bool /*uppercase*/) { mUppercase = true; for(auto it = mEntries.begin(); it != mEntries.end(); it++) @@ -78,7 +78,7 @@ class TextListComponent : public IList inline void setLineSpacing(float lineSpacing) { mLineSpacing = lineSpacing; } protected: - virtual void onScroll(int amt) { if(!mScrollSound.empty()) Sound::get(mScrollSound)->play(); } + virtual void onScroll(int /*amt*/) { if(!mScrollSound.empty()) Sound::get(mScrollSound)->play(); } virtual void onCursorChanged(const CursorState& state); private: @@ -217,7 +217,7 @@ void TextListComponent::render(const Transform4x4f& parentTrans) // currently selected item text might be scrolling if((mCursor == i) && (mMarqueeOffset > 0)) - drawTrans.translate(offset - Vector3f(mMarqueeOffset, 0, 0)); + drawTrans.translate(offset - Vector3f((float)mMarqueeOffset, 0, 0)); else drawTrans.translate(offset); @@ -229,7 +229,7 @@ void TextListComponent::render(const Transform4x4f& parentTrans) if((mCursor == i) && (mMarqueeOffset2 < 0)) { drawTrans = trans; - drawTrans.translate(offset - Vector3f(mMarqueeOffset2, 0, 0)); + drawTrans.translate(offset - Vector3f((float)mMarqueeOffset2, 0, 0)); Renderer::setMatrix(drawTrans); font->renderTextCache(entry.data.textCache.get()); } @@ -298,28 +298,28 @@ void TextListComponent::update(int deltaTime) // if we're not scrolling and this object's text goes outside our size, marquee it! const float textLength = mFont->sizeText(mEntries.at((unsigned int)mCursor).name).x(); - const int limit = mSize.x() - mHorizontalMargin * 2; + const float limit = mSize.x() - mHorizontalMargin * 2; if(textLength > limit) { // loop // pixels per second ( based on nes-mini font at 1920x1080 to produce a speed of 200 ) const float speed = mFont->sizeText("ABCDEFGHIJKLMNOPQRSTUVWXYZ").x() * 0.247f; - const int delay = 3000; - const int scrollLength = textLength; - const int returnLength = (int)(speed * 1.5); - const int scrollTime = (int)((scrollLength * 1000) / speed); - const int returnTime = (int)((returnLength * 1000) / speed); - const int maxTime = (delay + scrollTime + returnTime); + const float delay = 3000; + const float scrollLength = textLength; + const float returnLength = speed * 1.5f; + const float scrollTime = (scrollLength * 1000) / speed; + const float returnTime = (returnLength * 1000) / speed; + const int maxTime = (int)(delay + scrollTime + returnTime); mMarqueeTime += deltaTime; while(mMarqueeTime > maxTime) mMarqueeTime -= maxTime; - mMarqueeOffset = Math::Scroll::loop(delay, scrollTime + returnTime, mMarqueeTime, scrollLength + returnLength); + mMarqueeOffset = (int)(Math::Scroll::loop(delay, scrollTime + returnTime, (float)mMarqueeTime, scrollLength + returnLength)); if(mMarqueeOffset > (scrollLength - (limit - returnLength))) - mMarqueeOffset2 = mMarqueeOffset - (scrollLength + returnLength); + mMarqueeOffset2 = (int)(mMarqueeOffset - (scrollLength + returnLength)); } } diff --git a/es-app/src/guis/GuiFastSelect.cpp b/es-app/src/guis/GuiFastSelect.cpp index bec8a06aed..91bed6d5ff 100644 --- a/es-app/src/guis/GuiFastSelect.cpp +++ b/es-app/src/guis/GuiFastSelect.cpp @@ -35,8 +35,8 @@ GuiFastSelect::GuiFastSelect(Window* window, IGameListView* gamelist) : GuiCompo mSortId = 0; // TODO updateSortText(); - mLetterId = LETTERS.find(mGameList->getCursor()->getName()[0]); - if(mLetterId == std::string::npos) + mLetterId = (int)LETTERS.find(mGameList->getCursor()->getName()[0]); + if(mLetterId == (int)std::string::npos) mLetterId = 0; mScrollDir = 0; @@ -80,7 +80,7 @@ bool GuiFastSelect::input(InputConfig* config, Input input) { mSortId--; if(mSortId < 0) - mSortId += FileSorts::SortTypes.size(); + mSortId += (int)FileSorts::SortTypes.size(); updateSortText(); return true; @@ -115,9 +115,9 @@ void GuiFastSelect::scroll() { mLetterId += mScrollDir; if(mLetterId < 0) - mLetterId += LETTERS.length(); + mLetterId += (int)LETTERS.length(); else if(mLetterId >= (int)LETTERS.length()) - mLetterId -= LETTERS.length(); + mLetterId -= (int)LETTERS.length(); mLetterText.setText(LETTERS.substr(mLetterId, 1)); } diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index fa8e03f28e..74f8432ea7 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -29,7 +29,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui char startChar = '!'; char endChar = '_'; - char curChar = toupper(getGamelist()->getCursor()->getName()[0]); + char curChar = (char)toupper(getGamelist()->getCursor()->getName()[0]); if(curChar < startChar || curChar > endChar) curChar = startChar; @@ -40,7 +40,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui const std::vector& files = getGamelist()->getCursor()->getParent()->getChildrenListToDisplay(); for (auto file : files) { - char candidate = toupper(file->getName()[0]); + char candidate = (char)toupper(file->getName()[0]); if (c == candidate) { mJumpToLetterList->add(std::string(1, c), c, c == curChar); @@ -206,7 +206,7 @@ void GuiGamelistOptions::jumpToLetter() const std::vector& files = gamelist->getCursor()->getParent()->getChildrenListToDisplay(); long min = 0; - long max = files.size() - 1; + long max = (long)files.size() - 1; long mid = 0; while(max >= min) @@ -217,7 +217,7 @@ void GuiGamelistOptions::jumpToLetter() if(files.at(mid)->getName().empty()) continue; - char checkLetter = toupper(files.at(mid)->getName()[0]); + char checkLetter = (char)toupper(files.at(mid)->getName()[0]); if(checkLetter < letter) min = mid + 1; diff --git a/es-app/src/guis/GuiInfoPopup.cpp b/es-app/src/guis/GuiInfoPopup.cpp index e390762638..a7fff0951f 100644 --- a/es-app/src/guis/GuiInfoPopup.cpp +++ b/es-app/src/guis/GuiInfoPopup.cpp @@ -63,7 +63,7 @@ GuiInfoPopup::~GuiInfoPopup() } -void GuiInfoPopup::render(const Transform4x4f& parentTrans) +void GuiInfoPopup::render(const Transform4x4f& /*parentTrans*/) { // we use identity as we want to render on a specific window position, not on the view Transform4x4f trans = getTransform() * Transform4x4f::Identity(); @@ -108,7 +108,7 @@ bool GuiInfoPopup::updateState() { alpha = ((-(curTime - mStartTime - mDuration)*255)/500); } - mGrid->setOpacity(alpha); + mGrid->setOpacity((unsigned char)alpha); // apply fade in effect to popup frame mFrame->setEdgeColor(0xFFFFFF00 | (unsigned char)(alpha)); diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index 8ee20c8f90..0412d95662 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -20,7 +20,7 @@ #include "Window.h" GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams scraperParams, - const std::string& header, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), + const std::string& /*header*/, std::function saveCallback, std::function deleteFunc) : GuiComponent(window), mScraperParams(scraperParams), mBackground(window, ":/frame.png"), @@ -156,7 +156,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mGrid.setEntry(mButtons, Vector2i(0, 2), true, false); // resize + center - float width = (float) Math::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); + float width = (float)Math::min(Renderer::getScreenHeight(), (int)(Renderer::getScreenWidth() * 0.90f)); setSize(width, Renderer::getScreenHeight() * 0.82f); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); } diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index 8f75b56b05..0e05492e98 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -23,7 +23,7 @@ GuiScraperMulti::GuiScraperMulti(Window* window, const std::queue& theme) +void SystemView::onThemeChanged(const std::shared_ptr& /*theme*/) { LOG(LogDebug) << "SystemView::onThemeChanged()"; mViewNeedsReload = true; @@ -488,9 +488,9 @@ void SystemView::renderCarousel(const Transform4x4f& trans) { int index = i; while (index < 0) - index += mEntries.size(); + index += (int)mEntries.size(); while (index >= (int)mEntries.size()) - index -= mEntries.size(); + index -= (int)mEntries.size(); Transform4x4f logoTrans = carouselTrans; logoTrans.translate(Vector3f(i * logoSpacing[0] + xOff, i * logoSpacing[1] + yOff, 0)); @@ -501,7 +501,7 @@ void SystemView::renderCarousel(const Transform4x4f& trans) scale = Math::min(mCarousel.logoScale, Math::max(1.0f, scale)); scale /= mCarousel.logoScale; - int opacity = (int) Math::round(0x80 + ((0xFF - 0x80) * (1.0f - fabs(distance)))); + int opacity = (int)Math::round(0x80 + ((0xFF - 0x80) * (1.0f - fabs(distance)))); opacity = Math::max((int) 0x80, opacity); const std::shared_ptr &comp = mEntries.at(index).data.logo; @@ -510,7 +510,7 @@ void SystemView::renderCarousel(const Transform4x4f& trans) comp->setRotationOrigin(mCarousel.logoRotationOrigin); } comp->setScale(scale); - comp->setOpacity(opacity); + comp->setOpacity((unsigned char)opacity); comp->render(logoTrans); } Renderer::popClipRect(); @@ -536,9 +536,9 @@ void SystemView::renderExtras(const Transform4x4f& trans, float lower, float upp { int index = i; while (index < 0) - index += mEntries.size(); + index += (int)mEntries.size(); while (index >= (int)mEntries.size()) - index -= mEntries.size(); + index -= (int)mEntries.size(); //Only render selected system when not showing if (mShowing || index == mCursor) @@ -631,7 +631,7 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) if (elem->has("logoSize")) mCarousel.logoSize = elem->get("logoSize") * mSize; if (elem->has("maxLogoCount")) - mCarousel.maxLogoCount = (int) Math::round(elem->get("maxLogoCount")); + mCarousel.maxLogoCount = (int)Math::round(elem->get("maxLogoCount")); if (elem->has("zIndex")) mCarousel.zIndex = elem->get("zIndex"); if (elem->has("logoRotation")) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 7a4f8f5b84..ab0405ca09 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -62,7 +62,7 @@ void ViewController::goToStart() int ViewController::getSystemId(SystemData* system) { std::vector& sysVec = SystemData::sSystemVector; - return std::find(sysVec.cbegin(), sysVec.cend(), system) - sysVec.cbegin(); + return (int)(std::find(sysVec.cbegin(), sysVec.cend(), system) - sysVec.cbegin()); } void ViewController::goToSystemView(SystemData* system) @@ -177,7 +177,7 @@ void ViewController::playViewTransition() } else { // instant setAnimation(new LambdaAnimation( - [this, target](float t) + [this, target](float /*t*/) { this->mCamera.translation() = -target; }, 1)); @@ -318,7 +318,7 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste view->setTheme(system->getTheme()); std::vector& sysVec = SystemData::sSystemVector; - int id = std::find(sysVec.cbegin(), sysVec.cend(), system) - sysVec.cbegin(); + int id = (int)(std::find(sysVec.cbegin(), sysVec.cend(), system) - sysVec.cbegin()); view->setPosition(id * (float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight() * 2); addChild(view.get()); diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 30271232b9..b3294aaa99 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -110,7 +110,7 @@ void BasicGameListView::remove(FileData *game, bool deleteFile) { std::vector siblings = parent->getChildrenListToDisplay(); auto gameIter = std::find(siblings.cbegin(), siblings.cend(), game); - unsigned int gamePos = std::distance(siblings.cbegin(), gameIter); + unsigned int gamePos = (int)std::distance(siblings.cbegin(), gameIter); if (gameIter != siblings.cend()) { if ((gamePos + 1) < siblings.size()) diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index e150dbe708..e4b0203b04 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -21,7 +21,7 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); mList.setSize(mSize.x() * (0.50f - padding), mList.getSize().y()); mList.setAlignment(TextListComponent::ALIGN_LEFT); - mList.setCursorChangedCallback([&](const CursorState& state) { updateInfoPanel(); }); + mList.setCursorChangedCallback([&](const CursorState& /*state*/) { updateInfoPanel(); }); // image mImage.setOrigin(0.5f, 0.5f); @@ -119,7 +119,7 @@ void DetailedGameListView::initMDLabels() std::vector components = getMDLabels(); const unsigned int colCount = 2; - const unsigned int rowCount = components.size() / 2; + const unsigned int rowCount = (int)(components.size() / 2); Vector3f start(mSize.x() * 0.01f, mSize.y() * 0.625f, 0.0f); diff --git a/es-app/src/views/gamelist/IGameListView.cpp b/es-app/src/views/gamelist/IGameListView.cpp index 5238bb970c..a017d73bea 100644 --- a/es-app/src/views/gamelist/IGameListView.cpp +++ b/es-app/src/views/gamelist/IGameListView.cpp @@ -46,8 +46,8 @@ void IGameListView::render(const Transform4x4f& parentTrans) float scaleX = trans.r0().x(); float scaleY = trans.r1().y(); - Vector2i pos(trans.translation()[0], trans.translation()[1]); - Vector2i size(mSize.x() * scaleX, mSize.y() * scaleY); + Vector2i pos((int)Math::round(trans.translation()[0]), (int)Math::round(trans.translation()[1])); + Vector2i size((int)Math::round(mSize.x() * scaleX), (int)Math::round(mSize.y() * scaleY)); Renderer::pushClipRect(pos, size); renderChildren(trans); diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 0ae982bcd1..9114fef60d 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -59,7 +59,7 @@ void ISimpleGameListView::onThemeChanged(const std::shared_ptr& theme } } -void ISimpleGameListView::onFileChanged(FileData* file, FileChangeType change) +void ISimpleGameListView::onFileChanged(FileData* /*file*/, FileChangeType /*change*/) { // we could be tricky here to be efficient; // but this shouldn't happen very often so we'll just always repopulate diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 20af43a558..a75df55f9a 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -40,7 +40,7 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : mList.setPosition(mSize.x() * (0.50f + padding), mList.getPosition().y()); mList.setSize(mSize.x() * (0.50f - padding), mList.getSize().y()); mList.setAlignment(TextListComponent::ALIGN_LEFT); - mList.setCursorChangedCallback([&](const CursorState& state) { updateInfoPanel(); }); + mList.setCursorChangedCallback([&](const CursorState& /*state*/) { updateInfoPanel(); }); // Marquee mMarquee.setOrigin(0.5f, 0.5f); @@ -158,7 +158,7 @@ void VideoGameListView::initMDLabels() std::vector components = getMDLabels(); const unsigned int colCount = 2; - const unsigned int rowCount = components.size() / 2; + const unsigned int rowCount = (int)(components.size() / 2); Vector3f start(mSize.x() * 0.01f, mSize.y() * 0.625f, 0.0f); diff --git a/es-core/src/AudioManager.cpp b/es-core/src/AudioManager.cpp index 744d229179..1d0f8ac495 100644 --- a/es-core/src/AudioManager.cpp +++ b/es-core/src/AudioManager.cpp @@ -10,7 +10,7 @@ SDL_AudioSpec AudioManager::sAudioFormat; std::shared_ptr AudioManager::sInstance; -void AudioManager::mixAudio(void *unused, Uint8 *stream, int len) +void AudioManager::mixAudio(void* /*unused*/, Uint8 *stream, int len) { bool stillPlaying = false; diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 104c556265..336b92d68b 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -209,7 +209,7 @@ void GuiComponent::sortChildren() unsigned int GuiComponent::getChildCount() const { - return mChildren.size(); + return (int)mChildren.size(); } GuiComponent* GuiComponent::getChild(unsigned int i) const @@ -270,7 +270,7 @@ const Transform4x4f& GuiComponent::getTransform() return mTransform; } -void GuiComponent::setValue(const std::string& value) +void GuiComponent::setValue(const std::string& /*value*/) { } diff --git a/es-core/src/ImageIO.cpp b/es-core/src/ImageIO.cpp index 61c1c0c5f8..3285308cd2 100644 --- a/es-core/src/ImageIO.cpp +++ b/es-core/src/ImageIO.cpp @@ -9,7 +9,7 @@ std::vector ImageIO::loadFromMemoryRGBA32(const unsigned char * d std::vector rawData; width = 0; height = 0; - FIMEMORY * fiMemory = FreeImage_OpenMemory((BYTE *)data, size); + FIMEMORY * fiMemory = FreeImage_OpenMemory((BYTE *)data, (DWORD)size); if (fiMemory != nullptr) { //detect the filetype from data FREE_IMAGE_FORMAT format = FreeImage_GetFileTypeFromMemory(fiMemory); @@ -39,7 +39,7 @@ std::vector ImageIO::loadFromMemoryRGBA32(const unsigned char * d unsigned char * tempData = new unsigned char[width * height * 4]; for (size_t i = 0; i < height; i++) { - const BYTE * scanLine = FreeImage_GetScanLine(fiBitmap, i); + const BYTE * scanLine = FreeImage_GetScanLine(fiBitmap, (int)i); memcpy(tempData + (i * width * 4), scanLine, width * 4); } //convert from BGRA to RGBA diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index aa460e472f..424df2fd45 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -43,7 +43,7 @@ std::string toLower(std::string str) { for(unsigned int i = 0; i < str.length(); i++) { - str[i] = tolower(str[i]); + str[i] = (char)tolower(str[i]); } return str; diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index b1bd3c4e59..e80b89e18d 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -156,6 +156,8 @@ struct Input case CEC::CEC_USER_CONTROL_CODE_AN_CHANNELS_LIST: { return "AN-Channels-List"; } break; default: { return "UNKNOWN"; } } +#else // HAVE_LIBCEC + (void)keycode; #endif // HAVE_LIBCEC return "UNKNOWN"; diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index ce545aa3b1..536543e390 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -171,7 +171,7 @@ void InputManager::deinit() SDL_QuitSubSystem(SDL_INIT_JOYSTICK); } -int InputManager::getNumJoysticks() { return mJoysticks.size(); } +int InputManager::getNumJoysticks() { return (int)mJoysticks.size(); } int InputManager::getButtonCountByDevice(SDL_JoystickID id) { if(id == DEVICE_KEYBOARD) diff --git a/es-core/src/Renderer_draw_gl.cpp b/es-core/src/Renderer_draw_gl.cpp index ac3a89a5c6..bbadb841e5 100644 --- a/es-core/src/Renderer_draw_gl.cpp +++ b/es-core/src/Renderer_draw_gl.cpp @@ -18,10 +18,10 @@ namespace Renderer { void setColor4bArray(GLubyte* array, unsigned int color) { - array[0] = (color & 0xff000000) >> 24; - array[1] = (color & 0x00ff0000) >> 16; - array[2] = (color & 0x0000ff00) >> 8; - array[3] = (color & 0x000000ff); + array[0] = ((color & 0xff000000) >> 24) & 255; + array[1] = ((color & 0x00ff0000) >> 16) & 255; + array[2] = ((color & 0x0000ff00) >> 8) & 255; + array[3] = ((color & 0x000000ff) ) & 255; } void buildGLColorArray(GLubyte* ptr, unsigned int color, unsigned int vertCount) diff --git a/es-core/src/Renderer_init_sdlgl.cpp b/es-core/src/Renderer_init_sdlgl.cpp index 8e161405ad..328267c95b 100644 --- a/es-core/src/Renderer_init_sdlgl.cpp +++ b/es-core/src/Renderer_init_sdlgl.cpp @@ -85,7 +85,7 @@ namespace Renderer Uint32 rmask = 0x000000ff; Uint32 gmask = 0x0000ff00; Uint32 bmask = 0x00ff0000; Uint32 amask = 0xff000000; #endif //try creating SDL surface from logo data - SDL_Surface * logoSurface = SDL_CreateRGBSurfaceFrom((void *)rawData.data(), width, height, 32, width * 4, rmask, gmask, bmask, amask); + SDL_Surface * logoSurface = SDL_CreateRGBSurfaceFrom((void *)rawData.data(), (int)width, (int)height, 32, (int)(width * 4), rmask, gmask, bmask, amask); if (logoSurface != NULL) { SDL_SetWindowIcon(sdlWindow, logoSurface); diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index eee91dc1a3..625b1d8b72 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -405,7 +405,7 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::map& prompts, const HelpSt } }else{ // no, it hasn't! - mappedToSeenMap.emplace(it->second, addPrompts.size()); + mappedToSeenMap.emplace(it->second, (int)addPrompts.size()); addPrompts.push_back(*it); } } @@ -439,7 +439,7 @@ void Window::startScreenSaver() mScreenSaver->renderScreenSaver(); } -bool Window::PassKeyListener::isUIModeChanged(InputConfig * config, Input input, Window* window) +bool Window::PassKeyListener::isUIModeChanged(InputConfig * config, Input input, Window* /*window*/) { // This function reads the current input to listen for the passkey // sequence to unlock the UI mode. The progress is saved in mPassKeyCounter @@ -468,7 +468,7 @@ bool Window::PassKeyListener::isUIModeChanged(InputConfig * config, Input input, this->mPassKeyCounter = 0; // current input is incorrect, reset counter } - if (this->mPassKeyCounter == (this->mPassKeySequence.length())) + if (this->mPassKeyCounter == (int)(this->mPassKeySequence.length())) { // When we have reached the end of the list, trigger UI_mode unlock LOG(LogDebug) << " Window::PassKeyListener::isUIModeChanged(): Passkey sequence completed, switching UIMode to full"; diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 3ae2203989..6e718f6606 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -61,7 +61,7 @@ class Window void pushGui(GuiComponent* gui); void removeGui(GuiComponent* gui); GuiComponent* peekGui(); - inline int getGuiStackSize() { return mGuiStack.size(); } + inline int getGuiStackSize() { return (int)mGuiStack.size(); } void textInput(const char* text); void input(InputConfig* config, Input input); diff --git a/es-core/src/components/AnimatedImageComponent.cpp b/es-core/src/components/AnimatedImageComponent.cpp index 8e981f840e..347fc3c7a2 100644 --- a/es-core/src/components/AnimatedImageComponent.cpp +++ b/es-core/src/components/AnimatedImageComponent.cpp @@ -61,7 +61,7 @@ void AnimatedImageComponent::update(int deltaTime) { mCurrentFrame++; - if(mCurrentFrame == mFrames.size()) + if(mCurrentFrame == (int)mFrames.size()) { if(mLoop) { diff --git a/es-core/src/components/ComponentGrid.cpp b/es-core/src/components/ComponentGrid.cpp index 69037bde3c..f4e7619f43 100644 --- a/es-core/src/components/ComponentGrid.cpp +++ b/es-core/src/components/ComponentGrid.cpp @@ -195,7 +195,7 @@ void ComponentGrid::updateSeparators() } mLineColors.reserve(mLines.size()); - Renderer::buildGLColorArray((GLubyte*)mLineColors.data(), 0xC6C7C6FF, mLines.size()); + Renderer::buildGLColorArray((GLubyte*)mLineColors.data(), 0xC6C7C6FF, (unsigned int)mLines.size()); } void ComponentGrid::onSizeChanged() @@ -374,7 +374,7 @@ void ComponentGrid::render(const Transform4x4f& parentTrans) glVertexPointer(2, GL_FLOAT, 0, &mLines[0].x); glColorPointer(4, GL_UNSIGNED_BYTE, 0, mLineColors.data()); - glDrawArrays(GL_LINES, 0, mLines.size()); + glDrawArrays(GL_LINES, 0, (GLsizei)mLines.size()); glDisable(GL_BLEND); glDisableClientState(GL_VERTEX_ARRAY); diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index bd2abb3790..28cdf0cf7a 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -28,7 +28,7 @@ void ComponentList::addRow(const ComponentListRow& row, bool setCursorHere) if(setCursorHere) { - mCursor = mEntries.size() - 1; + mCursor = (int)mEntries.size() - 1; onCursorChanged(CURSOR_STOPPED); } } diff --git a/es-core/src/components/DateTimeComponent.cpp b/es-core/src/components/DateTimeComponent.cpp index 7d3433439b..5fddab9610 100644 --- a/es-core/src/components/DateTimeComponent.cpp +++ b/es-core/src/components/DateTimeComponent.cpp @@ -90,7 +90,7 @@ bool DateTimeComponent::input(InputConfig* config, Input input) } //validate day - int days_in_month = boost::gregorian::date(new_tm.tm_year + 1900, new_tm.tm_mon + 1, 1).end_of_month().day().as_number(); + int days_in_month = boost::gregorian::date((unsigned short)new_tm.tm_year + 1900, (unsigned short)new_tm.tm_mon + 1, 1).end_of_month().day().as_number(); if(new_tm.tm_mday > days_in_month) new_tm.tm_mday = days_in_month; diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index a89412f406..57c945fb2a 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -60,7 +60,7 @@ void HelpComponent::updateGrid() std::shared_ptr& font = mStyle.font; - mGrid = std::make_shared(mWindow, Vector2i(mPrompts.size() * 4, 1)); + mGrid = std::make_shared(mWindow, Vector2i((int)mPrompts.size() * 4, 1)); // [icon] [spacer1] [text] [spacer2] std::vector< std::shared_ptr > icons; diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index 1f6caa104d..4b75e0138f 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -143,7 +143,7 @@ class IList : public GuiComponent { if((*it).object == obj) { - mCursor = it - mEntries.cbegin(); + mCursor = (int)(it - mEntries.cbegin()); onCursorChanged(CURSOR_STOPPED); return true; } @@ -172,7 +172,7 @@ class IList : public GuiComponent return false; } - inline int size() const { return mEntries.size(); } + inline int size() const { return (int)mEntries.size(); } protected: void remove(typename std::vector::const_iterator& it) @@ -244,7 +244,7 @@ class IList : public GuiComponent scroll(mScrollVelocity); } - void listRenderTitleOverlay(const Transform4x4f& trans) + void listRenderTitleOverlay(const Transform4x4f& /*trans*/) { if(size() == 0 || !mTitleOverlayFont || mTitleOverlayOpacity == 0) return; @@ -305,8 +305,8 @@ class IList : public GuiComponent onCursorChanged((mScrollTier > 0) ? CURSOR_SCROLLING : CURSOR_STOPPED); } - virtual void onCursorChanged(const CursorState& state) {} - virtual void onScroll(int amt) {} + virtual void onCursorChanged(const CursorState& /*state*/) {} + virtual void onScroll(int /*amt*/) {} }; #endif // ES_CORE_COMPONENTS_ILIST_H diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index fa9f73c186..f51581547c 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -81,7 +81,7 @@ void ImageComponent::resize() } } // mSize.y() should already be rounded - mTexture->rasterizeAt((int)Math::round(mSize.x()), (int)Math::round(mSize.y())); + mTexture->rasterizeAt((size_t)Math::round(mSize.x()), (size_t)Math::round(mSize.y())); onSizeChanged(); } diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 1987a61337..440062c97e 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -77,7 +77,7 @@ class ImageGridComponent : public IList Vector2i getGridSize() const { Vector2f squareSize = getMaxSquareSize(); - Vector2i gridSize(mSize.x() / (squareSize.x() + getPadding().x()), mSize.y() / (squareSize.y() + getPadding().y())); + Vector2i gridSize((int)(mSize.x() / (squareSize.x() + getPadding().x())), (int)(mSize.y() / (squareSize.y() + getPadding().y()))); return gridSize; }; @@ -167,7 +167,7 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) } template -void ImageGridComponent::onCursorChanged(const CursorState& state) +void ImageGridComponent::onCursorChanged(const CursorState& /*state*/) { updateImages(); } diff --git a/es-core/src/components/MenuComponent.cpp b/es-core/src/components/MenuComponent.cpp index 09c9dfdc86..7921cab0c1 100644 --- a/es-core/src/components/MenuComponent.cpp +++ b/es-core/src/components/MenuComponent.cpp @@ -62,7 +62,7 @@ void MenuComponent::updateSize() } } - float width = (float) Math::min(Renderer::getScreenHeight(), (unsigned int) (Renderer::getScreenWidth() * 0.90f)); + float width = (float)Math::min((int)Renderer::getScreenHeight(), (int)(Renderer::getScreenWidth() * 0.90f)); setSize(width, height); } @@ -105,7 +105,7 @@ std::vector MenuComponent::getHelpPrompts() std::shared_ptr makeButtonGrid(Window* window, const std::vector< std::shared_ptr >& buttons) { - std::shared_ptr buttonGrid = std::make_shared(window, Vector2i(buttons.size(), 2)); + std::shared_ptr buttonGrid = std::make_shared(window, Vector2i((int)buttons.size(), 2)); float buttonGridWidth = (float)BUTTON_GRID_HORIZ_PADDING * buttons.size(); // initialize to padding for(int i = 0; i < (int)buttons.size(); i++) diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index cc346c0db2..994ba5838b 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -51,7 +51,7 @@ void NinePatchComponent::buildVertices() mColors = new GLubyte[6 * 9 * 4]; updateColors(); - const Vector2f ts = Vector2f(mTexture->getSize().x(), mTexture->getSize().y()); + const Vector2f ts = Vector2f((float)mTexture->getSize().x(), (float)mTexture->getSize().y()); //coordinates on the image in pixels, top left origin const Vector2f pieceCoords[9] = { diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index 7bbea70662..919f27f4c7 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -193,7 +193,7 @@ class OptionListComponent : public GuiComponent unsigned int i = getSelectedId(); int next = (int)i - 1; if(next < 0) - next += mEntries.size(); + next += (int)mEntries.size(); mEntries.at(i).selected = false; mEntries.at(next).selected = true; diff --git a/es-core/src/components/ScrollableContainer.cpp b/es-core/src/components/ScrollableContainer.cpp index 489263e158..cedc547ce9 100644 --- a/es-core/src/components/ScrollableContainer.cpp +++ b/es-core/src/components/ScrollableContainer.cpp @@ -18,7 +18,7 @@ void ScrollableContainer::render(const Transform4x4f& parentTrans) Vector2i clipPos((int)trans.translation().x(), (int)trans.translation().y()); Vector3f dimScaled = trans * Vector3f(mSize.x(), mSize.y(), 0); - Vector2i clipDim((int)dimScaled.x() - trans.translation().x(), (int)dimScaled.y() - trans.translation().y()); + Vector2i clipDim((int)(dimScaled.x() - trans.translation().x()), (int)(dimScaled.y() - trans.translation().y())); Renderer::pushClipRect(clipPos, clipDim); diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index 5cb7fb2dcb..d5e0758033 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -62,11 +62,11 @@ void TextEditComponent::textInput(const char* text) { size_t newCursor = Utils::String::prevCursor(mText, mCursor); mText.erase(mText.begin() + newCursor, mText.begin() + mCursor); - mCursor = newCursor; + mCursor = (unsigned int)newCursor; } }else{ mText.insert(mCursor, text); - mCursor += strlen(text); + mCursor += (unsigned int)strlen(text); } } @@ -191,14 +191,14 @@ void TextEditComponent::updateCursorRepeat(int deltaTime) void TextEditComponent::moveCursor(int amt) { - mCursor = Utils::String::moveCursor(mText, mCursor, amt); + mCursor = (unsigned int)Utils::String::moveCursor(mText, mCursor, amt); onCursorChanged(); } void TextEditComponent::setCursor(size_t pos) { if(pos == std::string::npos) - mCursor = mText.length(); + mCursor = (unsigned int)mText.length(); else mCursor = (int)pos; @@ -211,7 +211,7 @@ void TextEditComponent::onTextChanged() mTextCache = std::unique_ptr(mFont->buildTextCache(wrappedText, 0, 0, 0x77777700 | getOpacity())); if(mCursor > (int)mText.length()) - mCursor = mText.length(); + mCursor = (unsigned int)mText.length(); } void TextEditComponent::onCursorChanged() @@ -251,7 +251,7 @@ void TextEditComponent::render(const Transform4x4f& parentTrans) Vector2i clipPos((int)trans.translation().x(), (int)trans.translation().y()); Vector3f dimScaled = trans * Vector3f(getTextAreaSize().x(), getTextAreaSize().y(), 0); // use "text area" size for clipping - Vector2i clipDim((int)dimScaled.x() - trans.translation().x(), (int)dimScaled.y() - trans.translation().y()); + Vector2i clipDim((int)(dimScaled.x() - trans.translation().x()), (int)(dimScaled.y() - trans.translation().y())); Renderer::pushClipRect(clipPos, clipDim); trans.translate(Vector3f(-mScrollOffset.x(), -mScrollOffset.y(), 0)); diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 2385d03f25..d3ad3ab4fc 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -23,14 +23,14 @@ static void *lock(void *data, void **p_pixels) { } // VLC just rendered a video frame. -static void unlock(void *data, void *id, void *const *p_pixels) { +static void unlock(void *data, void* /*id*/, void *const* /*p_pixels*/) { struct VideoContext *c = (struct VideoContext *)data; SDL_UnlockSurface(c->surface); SDL_UnlockMutex(c->mutex); } // VLC wants to display a video frame. -static void display(void *data, void *id) { +static void display(void* /*data*/, void* /*id*/) { //Data to be displayed } @@ -73,7 +73,7 @@ void VideoVlcComponent::resize() if(!mTexture) return; - const Vector2f textureSize(mVideoWidth, mVideoHeight); + const Vector2f textureSize((float)mVideoWidth, (float)mVideoHeight); if(textureSize == Vector2f::Zero()) return; @@ -123,7 +123,7 @@ void VideoVlcComponent::resize() } // mSize.y() should already be rounded - mTexture->rasterizeAt((int)Math::round(mSize.x()), (int)Math::round(mSize.y())); + mTexture->rasterizeAt((size_t)Math::round(mSize.x()), (size_t)Math::round(mSize.y())); onSizeChanged(); } @@ -317,7 +317,7 @@ void VideoVlcComponent::startVideo() { if(!Settings::getInstance()->getBool("CaptionsCompatibility")) { - Vector2f resizeScale((Renderer::getScreenWidth() / mVideoWidth), (Renderer::getScreenHeight() / mVideoHeight)); + Vector2f resizeScale((Renderer::getScreenWidth() / (float)mVideoWidth), (Renderer::getScreenHeight() / (float)mVideoHeight)); if(resizeScale.x() < resizeScale.y()) { @@ -327,8 +327,6 @@ void VideoVlcComponent::startVideo() mVideoWidth = (unsigned int) (mVideoWidth * resizeScale.y()); mVideoHeight = (unsigned int) (mVideoHeight * resizeScale.y()); } - mVideoHeight = (unsigned int) Math::round(mVideoHeight); - mVideoWidth = (unsigned int) Math::round(mVideoWidth); } } #endif diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index b13474c14e..092e0beeb0 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -248,7 +248,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi } // only show "HOLD TO SKIP" if this input is skippable - mList->setCursorChangedCallback([this](CursorState state) { + mList->setCursorChangedCallback([this](CursorState /*state*/) { bool skippable = inputSkippable[mList->getCursorId()]; mSubtitle2->setOpacity(skippable * 255); }); @@ -381,7 +381,7 @@ void GuiInputConfig::setAssignedTo(const std::shared_ptr& text, I text->setColor(0x777777FF); } -void GuiInputConfig::error(const std::shared_ptr& text, const std::string& msg) +void GuiInputConfig::error(const std::shared_ptr& text, const std::string& /*msg*/) { text->setText("ALREADY TAKEN"); text->setColor(0x656565FF); diff --git a/es-core/src/math/Misc.cpp b/es-core/src/math/Misc.cpp index 6ea4fbffc7..384380d136 100644 --- a/es-core/src/math/Misc.cpp +++ b/es-core/src/math/Misc.cpp @@ -5,18 +5,42 @@ namespace Math { // added here to avoid including math.h whenever these are used - double cos(const double _num) + float cosf(const float _num) { - return ::cos(_num); + return ::cosf(_num); } // Math::cos - double sin(const double _num) + float sinf(const float _num) { - return ::sin(_num); + return ::sinf(_num); } // Math::sin + float floorf(const float _num) + { + return ::floorf(_num); + + } // Math::floor + + float ceilf(const float _num) + { + return ::ceilf(_num); + + } // Math::ceil + + int min(const int _num1, const int _num2) + { + return (_num1 < _num2) ? _num1 : _num2; + + } // Math::min + + int max(const int _num1, const int _num2) + { + return (_num1 > _num2) ? _num1 : _num2; + + } // Math::max + float min(const float _num1, const float _num2) { return (_num1 < _num2) ? _num1 : _num2; @@ -37,7 +61,7 @@ namespace Math float round(const float _num) { - return (int)(_num + 0.5); + return (float)(int)(_num + 0.5); } // Math::round @@ -63,7 +87,7 @@ namespace Math namespace Scroll { - float bounce(const float _delayTime, const float _scrollTime, const float _currentTime, const int _scrollLength) + float bounce(const float _delayTime, const float _scrollTime, const float _currentTime, const float _scrollLength) { if(_currentTime < _delayTime) { @@ -93,7 +117,7 @@ namespace Math } // Math::Scroll::bounce - float loop(const float _delayTime, const float _scrollTime, const float _currentTime, const int _scrollLength) + float loop(const float _delayTime, const float _scrollTime, const float _currentTime, const float _scrollLength) { if(_currentTime < _delayTime) { diff --git a/es-core/src/math/Misc.h b/es-core/src/math/Misc.h index 2aa7e497ca..094ecac3fe 100644 --- a/es-core/src/math/Misc.h +++ b/es-core/src/math/Misc.h @@ -9,9 +9,13 @@ namespace Math { // added here to avoid including math.h whenever these are used - double cos(const double _num); - double sin(const double _num); + float cosf(const float _num); + float sinf(const float _num); + float floorf(const float _num); + float ceilf(const float _num); + int min(const int _num1, const int _num2); + int max(const int _num1, const int _num2); float min(const float _num1, const float _num2); float max(const float _num1, const float _num2); float clamp(const float _num, const float _min, const float _max); @@ -22,8 +26,8 @@ namespace Math namespace Scroll { - float bounce(const float _delayTime, const float _scrollTime, const float _currentTime, const int _scrollLength); - float loop(const float _delayTime, const float _scrollTime, const float _currentTime, const int _scrollLength); + float bounce(const float _delayTime, const float _scrollTime, const float _currentTime, const float _scrollLength); + float loop(const float _delayTime, const float _scrollTime, const float _currentTime, const float _scrollLength); } // Math::Scroll:: diff --git a/es-core/src/math/Transform4x4f.cpp b/es-core/src/math/Transform4x4f.cpp index ea056711c4..b26e5a2fcb 100644 --- a/es-core/src/math/Transform4x4f.cpp +++ b/es-core/src/math/Transform4x4f.cpp @@ -138,8 +138,8 @@ Transform4x4f& Transform4x4f::rotate(const float _angle, const Vector3f& _axis) { float* tm = (float*)this; const float* av = (float*)&_axis; - const float s = Math::sin(-_angle); - const float c = Math::cos(-_angle); + const float s = Math::sinf(-_angle); + const float c = Math::cosf(-_angle); const float t = 1 - c; const float x = av[0]; const float y = av[1]; @@ -186,8 +186,8 @@ Transform4x4f& Transform4x4f::rotate(const float _angle, const Vector3f& _axis) Transform4x4f& Transform4x4f::rotateX(const float _angle) { float* tm = (float*)this; - const float s = Math::sin(-_angle); - const float c = Math::cos(-_angle); + const float s = Math::sinf(-_angle); + const float c = Math::cosf(-_angle); const float temp[6] = { tm[ 1] * c + tm[ 2] * s, tm[ 1] * -s + tm[ 2] * c, tm[ 5] * c + tm[ 6] * s, @@ -209,8 +209,8 @@ Transform4x4f& Transform4x4f::rotateX(const float _angle) Transform4x4f& Transform4x4f::rotateY(const float _angle) { float* tm = (float*)this; - const float s = Math::sin(-_angle); - const float c = Math::cos(-_angle); + const float s = Math::sinf(-_angle); + const float c = Math::cosf(-_angle); const float temp[6] = { tm[ 0] * c + tm[ 2] * -s, tm[ 0] * s + tm[ 2] * c, tm[ 4] * c + tm[ 6] * -s, @@ -232,8 +232,8 @@ Transform4x4f& Transform4x4f::rotateY(const float _angle) Transform4x4f& Transform4x4f::rotateZ(const float _angle) { float* tm = (float*)this; - const float s = Math::sin(-_angle); - const float c = Math::cos(-_angle); + const float s = Math::sinf(-_angle); + const float c = Math::cosf(-_angle); const float temp[6] = { tm[ 0] * c + tm[ 1] * s, tm[ 0] * -s + tm[ 1] * c, tm[ 4] * c + tm[ 5] * s, @@ -269,9 +269,9 @@ Transform4x4f& Transform4x4f::round() { float* tm = (float*)this; - tm[12] = (int)(tm[12] + 0.5f); - tm[13] = (int)(tm[13] + 0.5f); - tm[14] = (int)(tm[14] + 0.5f); + tm[12] = (float)(int)(tm[12] + 0.5f); + tm[13] = (float)(int)(tm[13] + 0.5f); + tm[14] = (float)(int)(tm[14] + 0.5f); return *this; diff --git a/es-core/src/math/Vector2f.cpp b/es-core/src/math/Vector2f.cpp index 492e7b25e9..6cb3416236 100644 --- a/es-core/src/math/Vector2f.cpp +++ b/es-core/src/math/Vector2f.cpp @@ -2,8 +2,8 @@ Vector2f& Vector2f::round() { - mX = (int)(mX + 0.5f); - mY = (int)(mY + 0.5f); + mX = (float)(int)(mX + 0.5f); + mY = (float)(int)(mY + 0.5f); return *this; diff --git a/es-core/src/math/Vector3f.cpp b/es-core/src/math/Vector3f.cpp index 4c5ccfcef6..3dd9b01d9a 100644 --- a/es-core/src/math/Vector3f.cpp +++ b/es-core/src/math/Vector3f.cpp @@ -2,9 +2,9 @@ Vector3f& Vector3f::round() { - mX = (int)(mX + 0.5f); - mY = (int)(mY + 0.5f); - mZ = (int)(mZ + 0.5f); + mX = (float)(int)(mX + 0.5f); + mY = (float)(int)(mY + 0.5f); + mZ = (float)(int)(mZ + 0.5f); return *this; diff --git a/es-core/src/math/Vector4f.cpp b/es-core/src/math/Vector4f.cpp index 892b2d3857..c0f933aa35 100644 --- a/es-core/src/math/Vector4f.cpp +++ b/es-core/src/math/Vector4f.cpp @@ -2,10 +2,10 @@ Vector4f& Vector4f::round() { - mX = (int)(mX + 0.5f); - mY = (int)(mY + 0.5f); - mZ = (int)(mZ + 0.5f); - mW = (int)(mW + 0.5f); + mX = (float)(int)(mX + 0.5f); + mY = (float)(int)(mY + 0.5f); + mZ = (float)(int)(mZ + 0.5f); + mW = (float)(int)(mW + 0.5f); return *this; diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index 96a9ec27a5..fe6f67d287 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -13,7 +13,7 @@ std::map< std::pair, std::weak_ptr > Font::sFontMap; Font::FontFace::FontFace(ResourceData&& d, int size) : data(d) { - int err = FT_New_Memory_Face(sLibrary, data.ptr.get(), data.length, 0, &face); + int err = FT_New_Memory_Face(sLibrary, data.ptr.get(), (FT_Long)data.length, 0, &face); assert(!err); if(!err) @@ -89,12 +89,12 @@ Font::~Font() unload(ResourceManager::getInstance()); } -void Font::reload(std::shared_ptr& rm) +void Font::reload(std::shared_ptr& /*rm*/) { rebuildTextures(); } -void Font::unload(std::shared_ptr& rm) +void Font::unload(std::shared_ptr& /*rm*/) { unloadTextures(); } @@ -387,8 +387,8 @@ void Font::rebuildTextures() FontTexture* tex = it->second.texture; // find the position/size - Vector2i cursor(it->second.texPos.x() * tex->textureSize.x(), it->second.texPos.y() * tex->textureSize.y()); - Vector2i glyphSize(it->second.texSize.x() * tex->textureSize.x(), it->second.texSize.y() * tex->textureSize.y()); + Vector2i cursor((int)(it->second.texPos.x() * tex->textureSize.x()), (int)(it->second.texPos.y() * tex->textureSize.y())); + Vector2i glyphSize((int)(it->second.texSize.x() * tex->textureSize.x()), (int)(it->second.texSize.y() * tex->textureSize.y())); // upload to texture glBindTexture(GL_TEXTURE_2D, tex->textureId); @@ -425,7 +425,7 @@ void Font::renderTextCache(TextCache* cache) glTexCoordPointer(2, GL_FLOAT, sizeof(TextCache::Vertex), &it->verts[0].tex); glColorPointer(4, GL_UNSIGNED_BYTE, 0, it->colors.data()); - glDrawArrays(GL_TRIANGLES, 0, it->verts.size()); + glDrawArrays(GL_TRIANGLES, 0, (GLsizei)(it->verts.size())); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); @@ -582,12 +582,12 @@ float Font::getNewlineStartOffset(const std::string& text, const unsigned int& c return 0; case ALIGN_CENTER: { - unsigned int endChar = text.find('\n', charStart); + unsigned int endChar = (unsigned int)text.find('\n', charStart); return (xLen - sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()) / 2.0f; } case ALIGN_RIGHT: { - unsigned int endChar = text.find('\n', charStart); + unsigned int endChar = (unsigned int)text.find('\n', charStart); return xLen - (sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()); } default: @@ -619,7 +619,7 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign if(character == '\n') { y += getHeight(lineSpacing); - x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, cursor /* cursor is already advanced */, xLen, alignment) : 0); + x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, (const unsigned int)cursor /* cursor is already advanced */, xLen, alignment) : 0); continue; } @@ -678,7 +678,7 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign vertList.verts = it->second; vertList.colors.resize(4 * it->second.size()); - Renderer::buildGLColorArray(vertList.colors.data(), color, it->second.size()); + Renderer::buildGLColorArray(vertList.colors.data(), color, (unsigned int)(it->second.size())); } clearFaceCache(); @@ -694,7 +694,7 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of void TextCache::setColor(unsigned int color) { for(auto it = vertexLists.cbegin(); it != vertexLists.cend(); it++) - Renderer::buildGLColorArray((GLubyte*)(it->colors.data()), color, it->verts.size()); + Renderer::buildGLColorArray((GLubyte*)(it->colors.data()), color, (unsigned int)(it->verts.size())); } std::shared_ptr Font::getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig) diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index 97fd6eb539..585c892461 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -13,10 +13,10 @@ class TextCache; -#define FONT_SIZE_MINI ((unsigned int)(0.030f * Math::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) -#define FONT_SIZE_SMALL ((unsigned int)(0.035f * Math::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) -#define FONT_SIZE_MEDIUM ((unsigned int)(0.045f * Math::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) -#define FONT_SIZE_LARGE ((unsigned int)(0.085f * Math::min(Renderer::getScreenHeight(), Renderer::getScreenWidth()))) +#define FONT_SIZE_MINI ((unsigned int)(0.030f * Math::min((int)Renderer::getScreenHeight(), (int)Renderer::getScreenWidth()))) +#define FONT_SIZE_SMALL ((unsigned int)(0.035f * Math::min((int)Renderer::getScreenHeight(), (int)Renderer::getScreenWidth()))) +#define FONT_SIZE_MEDIUM ((unsigned int)(0.045f * Math::min((int)Renderer::getScreenHeight(), (int)Renderer::getScreenWidth()))) +#define FONT_SIZE_LARGE ((unsigned int)(0.085f * Math::min((int)Renderer::getScreenHeight(), (int)Renderer::getScreenWidth()))) #define FONT_PATH_LIGHT ":/opensans_hebrew_condensed_light.ttf" #define FONT_PATH_REGULAR ":/opensans_hebrew_condensed_regular.ttf" diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index 882cefe137..43f97455c0 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -7,7 +7,7 @@ namespace fs = boost::filesystem; auto array_deleter = [](unsigned char* p) { delete[] p; }; -auto nop_deleter = [](unsigned char* p) { }; +auto nop_deleter = [](unsigned char* /*p*/) { }; std::shared_ptr ResourceManager::sInstance = nullptr; diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index 7670dfaa47..17e7cd6f7f 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -79,7 +79,7 @@ bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length unsigned char* dataRGBA = new unsigned char[mWidth * mHeight * 4]; NSVGrasterizer* rast = nsvgCreateRasterizer(); - nsvgRasterize(rast, svgImage, 0, 0, mHeight / svgImage->height, dataRGBA, mWidth, mHeight, mWidth * 4); + nsvgRasterize(rast, svgImage, 0, 0, mHeight / svgImage->height, dataRGBA, (int)mWidth, (int)mHeight, (int)mWidth * 4); nsvgDeleteRasterizer(rast); ImageIO::flipPixelsVert(dataRGBA, mWidth, mHeight); @@ -182,7 +182,7 @@ bool TextureData::uploadAndBind() glGenTextures(1, &mTextureID); glBindTexture(GL_TEXTURE_2D, mTextureID); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mWidth, mHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, mDataRGBA); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)mWidth, (GLsizei)mHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, mDataRGBA); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index bef2fc7f44..7768111fc5 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -31,7 +31,7 @@ TextureResource::TextureResource(const std::string& path, bool tile, bool dynami data->load(); } - mSize = Vector2i(data->width(), data->height()); + mSize = Vector2i((int)data->width(), (int)data->height()); mSourceSize = Vector2f(data->sourceWidth(), data->sourceHeight()); } else @@ -58,7 +58,7 @@ void TextureResource::initFromPixels(const unsigned char* dataRGBA, size_t width mTextureData->releaseRAM(); mTextureData->initFromRGBA(dataRGBA, width, height); // Cache the image dimensions - mSize = Vector2i(width, height); + mSize = Vector2i((int)width, (int)height); mSourceSize = Vector2f(mTextureData->sourceWidth(), mTextureData->sourceHeight()); } @@ -70,7 +70,7 @@ void TextureResource::initFromMemory(const char* data, size_t length) mTextureData->releaseRAM(); mTextureData->initImageFromMemory((const unsigned char*)data, length); // Get the size from the texture data - mSize = Vector2i(mTextureData->width(), mTextureData->height()); + mSize = Vector2i((int)mTextureData->width(), (int)mTextureData->height()); mSourceSize = Vector2f(mTextureData->sourceWidth(), mTextureData->sourceHeight()); } @@ -199,7 +199,7 @@ size_t TextureResource::getTotalTextureSize() return total; } -void TextureResource::unload(std::shared_ptr& rm) +void TextureResource::unload(std::shared_ptr& /*rm*/) { // Release the texture's resources std::shared_ptr data; @@ -212,7 +212,7 @@ void TextureResource::unload(std::shared_ptr& rm) data->releaseRAM(); } -void TextureResource::reload(std::shared_ptr& rm) +void TextureResource::reload(std::shared_ptr& /*rm*/) { // For dynamically loaded textures the texture manager will load them on demand. // For manually loaded textures we have to reload them here diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index 684ec3c4a5..52f426fba7 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -51,22 +51,22 @@ namespace Utils if(_unicode < 0x80) // one byte character { - result += ((_unicode ) ); + result += ((_unicode ) & 0xFF); } else if(_unicode < 0x800) // two byte character { - result += ((_unicode >> 6) ) | 0xC0; + result += ((_unicode >> 6) & 0xFF) | 0xC0; result += ((_unicode ) & 0x3F) | 0x80; } else if(_unicode < 0xFFFF) // three byte character { - result += ((_unicode >> 12) ) | 0xE0; + result += ((_unicode >> 12) & 0xFF) | 0xE0; result += ((_unicode >> 6) & 0x3F) | 0x80; result += ((_unicode ) & 0x3F) | 0x80; } else if(_unicode <= 0x1fffff) // four byte character { - result += ((_unicode >> 18) ) | 0xF0; + result += ((_unicode >> 18) & 0xFF) | 0xF0; result += ((_unicode >> 12) & 0x3F) | 0x80; result += ((_unicode >> 6) & 0x3F) | 0x80; result += ((_unicode ) & 0x3F) | 0x80; From 1ed075a5e4fb782ff544a92a07d7591dd3409507 Mon Sep 17 00:00:00 2001 From: "D. Polders" Date: Sat, 18 Nov 2017 23:23:56 +0100 Subject: [PATCH 215/603] * Add ConfirmationPopUp when switching UIMode. * Split out UIMode controller in separate class (in es-app). * Fix passphrase input for wX360 controllers by ignoring hat-inputs * Fix font fallback mechanism on rpi for non ascii characters using new Unicode2Chars() method. * Fix UIMode not being saved due to popup window. --- es-app/CMakeLists.txt | 2 + es-app/src/FileFilterIndex.cpp | 8 +- es-app/src/guis/GuiGamelistFilter.cpp | 6 +- es-app/src/guis/GuiGamelistOptions.cpp | 7 +- es-app/src/guis/GuiMenu.cpp | 23 +-- es-app/src/views/SystemView.cpp | 3 +- es-app/src/views/UIModeController.cpp | 162 ++++++++++++++++++ es-app/src/views/UIModeController.h | 50 ++++++ es-app/src/views/ViewController.cpp | 39 ++--- es-app/src/views/ViewController.h | 9 +- .../src/views/gamelist/BasicGameListView.cpp | 3 +- .../views/gamelist/ISimpleGameListView.cpp | 3 +- es-core/src/Settings.cpp | 1 + es-core/src/Window.cpp | 45 +---- es-core/src/Window.h | 15 -- es-core/src/resources/Font.cpp | 5 +- 16 files changed, 263 insertions(+), 118 deletions(-) create mode 100644 es-app/src/views/UIModeController.cpp create mode 100644 es-app/src/views/UIModeController.h diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 42b492c240..005c82488b 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -50,6 +50,7 @@ set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/VideoGameListView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/UIModeController.h # Animations ${CMAKE_CURRENT_SOURCE_DIR}/src/animations/LaunchAnimation.h @@ -106,6 +107,7 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/VideoGameListView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/ViewController.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/views/UIModeController.cpp ) #------------------------------------------------------------------------------- diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index 666cacc47f..bdef399464 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -1,9 +1,9 @@ #include "FileFilterIndex.h" -#include "Settings.h" -#include "views/ViewController.h" +#include "views/UIModeController.h" #include "FileData.h" #include "Log.h" +#include "Settings.h" #include "Util.h" #include @@ -248,13 +248,13 @@ void FileFilterIndex::resetFilters() void FileFilterIndex::setUIModeFilters() { - if (!ViewController::get()->isUIModeFull()) + if (!UIModeController::getInstance()->isUIModeFull()) { filterByHidden = true; std::vector val = { "FALSE" }; setFilter(HIDDEN_FILTER, &val); } - if (ViewController::get()->isUIModeKid()) + if (UIModeController::getInstance()->isUIModeKid()) { filterByKidGame = true; std::vector val = { "TRUE" }; diff --git a/es-app/src/guis/GuiGamelistFilter.cpp b/es-app/src/guis/GuiGamelistFilter.cpp index 4d70901cc2..8a3625a1e3 100644 --- a/es-app/src/guis/GuiGamelistFilter.cpp +++ b/es-app/src/guis/GuiGamelistFilter.cpp @@ -1,7 +1,7 @@ #include "guis/GuiGamelistFilter.h" #include "components/OptionListComponent.h" -#include "views/ViewController.h" +#include "views/UIModeController.h" #include "SystemData.h" GuiGamelistFilter::GuiGamelistFilter(Window* window, SystemData* system) : GuiComponent(window), mMenu(window, "FILTER GAMELIST BY"), mSystem(system) @@ -52,9 +52,9 @@ void GuiGamelistFilter::addFiltersToMenu() std::vector decls = mFilterIndex->getFilterDataDecls(); int skip = 0; - if (!ViewController::get()->isUIModeFull()) + if (!UIModeController::getInstance()->isUIModeFull()) skip = 1; - if (ViewController::get()->isUIModeKid()) + if (UIModeController::getInstance()->isUIModeKid()) skip = 2; for (std::vector::const_iterator it = decls.cbegin(); it != decls.cend()-skip; ++it ) { diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 74f8432ea7..82eab49b1a 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -3,6 +3,7 @@ #include "guis/GuiGamelistFilter.h" #include "scrapers/Scraper.h" #include "views/gamelist/IGameListView.h" +#include "views/UIModeController.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" #include "FileFilterIndex.h" @@ -84,7 +85,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui std::map customCollections = CollectionSystemManager::get()->getCustomCollectionSystems(); - if(ViewController::get()->isUIModeFull() && + if(UIModeController::getInstance()->isUIModeFull() && ((customCollections.find(system->getName()) != customCollections.cend() && CollectionSystemManager::get()->getEditingCollection() != system->getName()) || CollectionSystemManager::get()->getCustomCollectionsBundle()->getName() == system->getName())) { @@ -94,7 +95,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui mMenu.addRow(row); } - if(ViewController::get()->isUIModeFull() && CollectionSystemManager::get()->isEditing()) + if(UIModeController::getInstance()->isUIModeFull() && CollectionSystemManager::get()->isEditing()) { row.elements.clear(); row.addElement(std::make_shared(mWindow, "FINISH EDITING '" + strToUpper(CollectionSystemManager::get()->getEditingCollection()) + "' COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); @@ -102,7 +103,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui mMenu.addRow(row); } - if (ViewController::get()->isUIModeFull() && !fromPlaceholder && !(mSystem->isCollection() && file->getType() == FOLDER)) + if (UIModeController::getInstance()->isUIModeFull() && !fromPlaceholder && !(mSystem->isCollection() && file->getType() == FOLDER)) { row.elements.clear(); row.addElement(std::make_shared(mWindow, "EDIT THIS GAME'S METADATA", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 5ec03d65ef..2b04b3897a 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -9,6 +9,7 @@ #include "guis/GuiMsgBox.h" #include "guis/GuiScraperStart.h" #include "guis/GuiSettings.h" +#include "views/UIModeController.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" #include "EmulationStation.h" @@ -18,7 +19,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU"), mVersion(window) { - bool isFullUI = ViewController::get()->isUIModeFull(); + bool isFullUI = UIModeController::getInstance()->isUIModeFull(); if (isFullUI) addEntry("SCRAPER", 0x777777FF, true, [this] { openScraperSettings(); }); @@ -38,7 +39,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN if (isFullUI) addEntry("CONFIGURE INPUT", 0x777777FF, true, [this] { openConfigInput(); }); - if (!(ViewController::get()->isUIModeKid() && Settings::getInstance()->getBool("hideQuitMenuOnKidUI"))) + if (!(UIModeController::getInstance()->isUIModeKid() && Settings::getInstance()->getBool("hideQuitMenuOnKidUI"))) addEntry("QUIT", 0x777777FF, true, [this] {openQuitMenu(); }); addChild(&mMenu); @@ -92,7 +93,7 @@ void GuiMenu::openSoundSettings() s->addWithLabel("SYSTEM VOLUME", volume); s->addSaveFunc([volume] { VolumeControl::getInstance()->setVolume((int)Math::round(volume->getValue())); }); - if (ViewController::get()->isUIModeFull()) + if (UIModeController::getInstance()->isUIModeFull()) { #ifdef _RPI_ // volume control device @@ -161,7 +162,7 @@ void GuiMenu::openUISettings() //UI mode auto UImodeSelection = std::make_shared< OptionListComponent >(mWindow, "UI MODE", false); - std::vector UImodes = ViewController::get()->getUIModes(); + std::vector UImodes = UIModeController::getInstance()->getUIModes(); for (auto it = UImodes.cbegin(); it != UImodes.cend(); it++) UImodeSelection->add(*it, *it, Settings::getInstance()->getString("UIMode") == *it); s->addWithLabel("UI MODE", UImodeSelection); @@ -174,14 +175,14 @@ void GuiMenu::openUISettings() std::string msg = "You are changing the UI to a restricted mode:\n" + selectedMode + "\n"; msg += "This will hide most menu-options to prevent changes to the system.\n"; msg += "To unlock and return to the full UI, enter this code: \n"; - msg += "Up, up, down, down, left, right, left, right, B, A. \n\n"; + msg += "\"" + UIModeController::getInstance()->getFormattedPassKeyStr() + "\"\n\n"; msg += "Do you want to proceed?"; - - window->pushGui(new GuiMsgBox(window, msg, "YES", - [selectedMode] { - LOG(LogDebug) << "Setting UI mode to" << selectedMode; + window->pushGui(new GuiMsgBox(window, msg, + "YES", [selectedMode] { + LOG(LogDebug) << "Setting UI mode to " << selectedMode; Settings::getInstance()->setString("UIMode", selectedMode); - }, "NO", nullptr)); + Settings::getInstance()->saveFile(); + }, "NO",nullptr)); } }); @@ -407,7 +408,7 @@ void GuiMenu::openQuitMenu() Window* window = mWindow; ComponentListRow row; - if (ViewController::get()->isUIModeFull()) + if (UIModeController::getInstance()->isUIModeFull()) { row.makeAcceptInputHandler([window] { window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 0b21d7d6b9..5976226e0b 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -2,6 +2,7 @@ #include "animations/LambdaAnimation.h" #include "guis/GuiMsgBox.h" +#include "views/UIModeController.h" #include "views/ViewController.h" #include "Log.h" #include "Renderer.h" @@ -113,7 +114,7 @@ void SystemView::populate() if (mEntries.size() == 0) { // Something is wrong, there is not a single system to show, check if UI mode is not full - if (!ViewController::get()->isUIModeFull()) + if (!UIModeController::getInstance()->isUIModeFull()) { Settings::getInstance()->setString("UIMode", "Full"); mWindow->pushGui(new GuiMsgBox(mWindow, "The selected UI mode has nothing to show,\n returning to UI mode: FULL", "OK", nullptr)); diff --git a/es-app/src/views/UIModeController.cpp b/es-app/src/views/UIModeController.cpp new file mode 100644 index 0000000000..8123958457 --- /dev/null +++ b/es-app/src/views/UIModeController.cpp @@ -0,0 +1,162 @@ +#include "UIModeController.h" + +#include "utils/StringUtil.h" +#include "views/ViewController.h" +#include "Log.h" +#include "Window.h" + +UIModeController * UIModeController::sInstance = NULL; + +UIModeController * UIModeController::getInstance() +{ + if (sInstance == NULL) + sInstance = new UIModeController(); + + return sInstance; +} + +UIModeController::UIModeController() + :mPassKeyCounter(0) +{ + mPassKeySequence = Settings::getInstance()->getString("UIMode_passkey"); + mCurrentUIMode = Settings::getInstance()->getString("UIMode"); +} + +void UIModeController::monitorUIMode() +{ + std::string uimode = Settings::getInstance()->getString("UIMode"); + if (uimode != mCurrentUIMode) // UIMODE HAS CHANGED + { + mCurrentUIMode = uimode; + ViewController::get()->ReloadAndGoToStart(); + } +} + +bool UIModeController::listen(InputConfig * config, Input input) +{ + // Reads the current input to listen for the passkey + // sequence to unlock the UI mode. The progress is saved in mPassKeyCounter + if (Settings::getInstance()->getBool("Debug")) + { + logInput(config, input); + } + + if ((Settings::getInstance()->getString("UIMode") == "Full") || !isValidInput(config, input)) + { + return false; // Already unlocked, or invalid input, nothing to do here. + } + + + if (!inputIsMatch(config, input)) + { + mPassKeyCounter = 0; // current input is incorrect, reset counter + } + + if (mPassKeyCounter == (mPassKeySequence.length())) + { + unlockUIMode(); + return true; + } + return false; +} + +bool UIModeController::inputIsMatch(InputConfig * config, Input input) +{ + for (auto valstring : mInputVals) + { + if (config->isMappedTo(valstring, input) && + (mPassKeySequence[mPassKeyCounter] == valstring[0])) + { + mPassKeyCounter++; + return true; + } + } + return false; +} + +// When we have reached the end of the list, trigger UI_mode unlock +void UIModeController::unlockUIMode() +{ + LOG(LogDebug) << " UIModeController::listen(): Passkey sequence completed, switching UIMode to full"; + Settings::getInstance()->setString("UIMode", "Full"); + Settings::getInstance()->saveFile(); + mPassKeyCounter = 0; +} + +bool UIModeController::isUIModeFull() +{ + return ((mCurrentUIMode == "Full") && !Settings::getInstance()->getBool("ForceKiosk")); +} + +bool UIModeController::isUIModeKid() +{ + return (Settings::getInstance()->getBool("ForceKid") || + ((mCurrentUIMode == "Kid") && !Settings::getInstance()->getBool("ForceKiosk"))); +} + +std::string UIModeController::getFormattedPassKeyStr() +{ + // supported sequence-inputs: u (up), d (down), l (left), r (right), a, b, x, y + + std::string out = ""; + for (auto c : mPassKeySequence) + { + out += (out == "") ? "" : ", "; // add a comma after the first entry + + switch (c) + { + case 'u': + out += Utils::String::unicode2Chars(0x2191); // arrow pointing up + break; + case 'd': + out += Utils::String::unicode2Chars(0x2193); // arrow pointing down + break; + case 'l': + out += Utils::String::unicode2Chars(0x2190); // arrow pointing left + break; + case 'r': + out += Utils::String::unicode2Chars(0x2192); // arrow pointing right + break; + case 'a': + out += "A"; + break; + case 'b': + out += "B"; + break; + case 'x': + out += "X"; + break; + case 'y': + out += "Y"; + break; + } + } + return out; +} + + +void UIModeController::logInput(InputConfig * config, Input input) +{ + std::string mapname = ""; + std::vector maps = config->getMappedTo(input); + for( auto mn : maps) + { + mapname += mn; + mapname += ", "; + } + LOG(LogDebug) << "UIModeController::logInput( " << config->getDeviceName() <<" ):" << input.string() << ", isMappedTo= " << mapname << ", value=" << input.value; +} + +bool UIModeController::isValidInput(InputConfig * config, Input input) +{ + if((config->getMappedTo(input).size() == 0) || // not a mapped input, so ignore. + (input.type == TYPE_HAT) || // ignore all HAT inputs + (!input.value)) // not a key-down event + { + return false; + } + else + { + return true; + } +} \ No newline at end of file diff --git a/es-app/src/views/UIModeController.h b/es-app/src/views/UIModeController.h new file mode 100644 index 0000000000..38760cb217 --- /dev/null +++ b/es-app/src/views/UIModeController.h @@ -0,0 +1,50 @@ +#pragma once +#ifndef ES_APP_VIEWS_UI_MODE_CONTROLLER_H +#define ES_APP_VIEWS_UI_MODE_CONTROLLER_H + +//#include "InputConfig.h" +#include +#include + +class FileData; +class InputConfig; +class ViewController; + +struct Input; + +class UIModeController { +public: + static UIModeController* getInstance(); + + // Monitor input for UI mode change, returns true (consumes input) when UI mode change is triggered. + bool listen(InputConfig* config, Input input); + + // Get the current Passphrase as a (unicode) formatted, comma-separated, string. + std::string getFormattedPassKeyStr(); + + // Check for change in UI mode. + void monitorUIMode(); + + bool isUIModeFull(); + bool isUIModeKid(); + inline std::vector getUIModes() { return mUIModes; }; +private: + UIModeController(); + bool inputIsMatch(InputConfig * config, Input input); + bool isValidInput(InputConfig * config, Input input); + void logInput(InputConfig * config, Input input); + + // Return UI mode to 'FULL' + void unlockUIMode(); + + static UIModeController * sInstance; + const std::vector mUIModes = { "Full", "Kiosk", "Kid" }; + + // default passkeyseq = "uuddlrlrba", as defined in the setting 'UIMode_passkey'. + std::string mPassKeySequence; + int mPassKeyCounter; + const std::vector mInputVals = { "up", "down", "left", "right", "a", "b", "x", "y" }; + std::string mCurrentUIMode; +}; + +#endif // ES_APP_VIEWS_UI_MODE_CONTROLLER_H diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index ab0405ca09..0647f91937 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -9,6 +9,7 @@ #include "views/gamelist/IGameListView.h" #include "views/gamelist/VideoGameListView.h" #include "views/SystemView.h" +#include "views/UIModeController.h" #include "FileFilterIndex.h" #include "Log.h" #include "Settings.h" @@ -33,7 +34,6 @@ ViewController::ViewController(Window* window) : GuiComponent(window), mCurrentView(nullptr), mCamera(Transform4x4f::Identity()), mFadeOpacity(0), mLockInput(false) { mState.viewing = NOTHING; - mCurUIMode = Settings::getInstance()->getString("UIMode"); } ViewController::~ViewController() @@ -59,6 +59,13 @@ void ViewController::goToStart() goToSystemView(SystemData::sSystemVector.at(0)); } +void ViewController::ReloadAndGoToStart() +{ + mWindow->renderLoadingScreen(); + ViewController::get()->reloadAll(); + ViewController::get()->goToStart(); +} + int ViewController::getSystemId(SystemData* system) { std::vector& sysVec = SystemData::sSystemVector; @@ -353,6 +360,11 @@ bool ViewController::input(InputConfig* config, Input input) return true; } + if(UIModeController::getInstance()->listen(config, input)) // check if UI mode has changed due to passphrase completion + { + return true; + } + if(mCurrentView) return mCurrentView->input(config, input); @@ -380,7 +392,7 @@ void ViewController::render(const Transform4x4f& parentTrans) Vector3f viewEnd = transInverse * Vector3f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight(), 0); // Keep track of UI mode changes. - monitorUIMode(); + UIModeController::getInstance()->monitorUIMode(); // draw systemview getSystemListView()->render(trans); @@ -488,29 +500,6 @@ void ViewController::reloadAll() updateHelpPrompts(); } -void ViewController::monitorUIMode() -{ - std::string uimode = Settings::getInstance()->getString("UIMode"); - if (uimode != mCurUIMode) // UIMODE HAS CHANGED - { - mWindow->renderLoadingScreen(); - mCurUIMode = uimode; - reloadAll(); - goToStart(); - } -} - -bool ViewController::isUIModeFull() -{ - return ((mCurUIMode == "Full") && ! Settings::getInstance()->getBool("ForceKiosk")); -} - -bool ViewController::isUIModeKid() -{ - return (Settings::getInstance()->getBool("ForceKid") || - ((mCurUIMode == "Kid") && !Settings::getInstance()->getBool("ForceKiosk"))); -} - std::vector ViewController::getHelpPrompts() { std::vector prompts; diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index a999edf9db..10210ee7cf 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -11,8 +11,6 @@ class IGameListView; class SystemData; class SystemView; -const std::vector UIModes = { "Full", "Kiosk", "Kid" }; - // Used to smoothly transition the camera between multiple views (e.g. from system to system, from gamelist to gamelist). class ViewController : public GuiComponent { @@ -32,17 +30,13 @@ class ViewController : public GuiComponent inline void reloadGameListView(SystemData* system, bool reloadTheme = false) { reloadGameListView(getGameListView(system).get(), reloadTheme); } void reloadAll(); // Reload everything with a theme. Used when the "ThemeSet" setting changes. - void monitorUIMode(); - inline std::vector getUIModes() { return UIModes; }; - bool isUIModeFull(); - bool isUIModeKid(); - // Navigation. void goToNextGameList(); void goToPrevGameList(); void goToGameList(SystemData* system); void goToSystemView(SystemData* system); void goToStart(); + void ReloadAndGoToStart(); void onFileChanged(FileData* file, FileChangeType change); @@ -107,7 +101,6 @@ class ViewController : public GuiComponent bool mLockInput; State mState; - std::string mCurUIMode; }; #endif // ES_APP_VIEWS_VIEW_CONTROLLER_H diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index b3294aaa99..e4428c1ccd 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -1,5 +1,6 @@ #include "views/gamelist/BasicGameListView.h" +#include "views/UIModeController.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" #include "Settings.h" @@ -141,7 +142,7 @@ std::vector BasicGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("select", "options")); prompts.push_back(HelpPrompt("x", "random")); - if(mRoot->getSystem()->isGameSystem() && !ViewController::get()->isUIModeKid()) + if(mRoot->getSystem()->isGameSystem() && !UIModeController::getInstance()->isUIModeKid()) { std::string prompt = CollectionSystemManager::get()->getEditingCollection(); prompts.push_back(HelpPrompt("y", prompt)); diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 9114fef60d..860eda0ba2 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -1,5 +1,6 @@ #include "views/gamelist/ISimpleGameListView.h" +#include "views/UIModeController.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" #include "Settings.h" @@ -142,7 +143,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) setCursor(randomGame); } return true; - }else if (config->isMappedTo("y", input) && !(ViewController::get()->isUIModeKid())) + }else if (config->isMappedTo("y", input) && !(UIModeController::getInstance()->isUIModeKid())) { if(mRoot->getSystem()->isGameSystem()) { diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 7a27c5cf98..42d138bfc0 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -146,6 +146,7 @@ void saveMap(pugi::xml_document& doc, std::map& map, const char* type) void Settings::saveFile() { + LOG(LogDebug) << "Settings::saveFile() : Saving Settings to file."; const std::string path = getHomePath() + "/.emulationstation/es_settings.cfg"; pugi::xml_document doc; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 6eb374d9c2..a5a056f12e 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -14,7 +14,6 @@ Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCoun { mHelp = new HelpComponent(this); mBackgroundOverlay = new ImageComponent(this); - mPassKeyListener = new PassKeyListener; } Window::~Window() @@ -171,8 +170,7 @@ void Window::input(InputConfig* config, Input input) } else { - if (!mPassKeyListener->isUIModeChanged(config, input, this) && // check if UI mode has changed due to passphrase completion - peekGui()) + if (peekGui()) { this->peekGui()->input(config, input); // this is where the majority of inputs will be consumed: the GuiComponent Stack } @@ -438,44 +436,3 @@ void Window::startScreenSaver() if (mScreenSaver) mScreenSaver->renderScreenSaver(); } - -bool Window::PassKeyListener::isUIModeChanged(InputConfig * config, Input input, Window* /*window*/) -{ - // This function reads the current input to listen for the passkey - // sequence to unlock the UI mode. The progress is saved in mPassKeyCounter - // supported sequence-inputs: u (up), d (down), l (left), r (right), a, b, x, y - // default passkeyseq = "uuddlrlrba", as defined in the setting 'UIMode_passkey'. - - if ((Settings::getInstance()->getString("UIMode") == "Full") || (!input.value)) - { - return false; // Already unlocked, or no keydown, nothing to do here. - } - - bool foundMatch = false; - - for (auto valstring : mInputVals) - { - if (config->isMappedTo(valstring, input) && - (this->mPassKeySequence[this->mPassKeyCounter] == valstring[0])) - { - this->mPassKeyCounter ++; - foundMatch = true; - } - } - - if (!foundMatch) - { - this->mPassKeyCounter = 0; // current input is incorrect, reset counter - } - - if (this->mPassKeyCounter == (int)(this->mPassKeySequence.length())) - { - // When we have reached the end of the list, trigger UI_mode unlock - LOG(LogDebug) << " Window::PassKeyListener::isUIModeChanged(): Passkey sequence completed, switching UIMode to full"; - Settings::getInstance()->setString("UIMode", "Full"); - Settings::getInstance()->saveFile(); - this->mPassKeyCounter = 0; - return true; - } - return false; -} diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 6e718f6606..c14a28c4ce 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -41,20 +41,6 @@ class Window virtual ~InfoPopup() {}; }; - class PassKeyListener { - public: - bool isUIModeChanged(InputConfig* config, Input input, Window* window); - PassKeyListener() - { - mPassKeySequence = Settings::getInstance()->getString("UIMode_passkey"); - mPassKeyCounter = 0; - } - private: - std::string mPassKeySequence; - int mPassKeyCounter; - const std::vector mInputVals = { "up", "down", "left", "right", "a", "b", "x", "y" }; - }; - Window(); ~Window(); @@ -102,7 +88,6 @@ class Window ScreenSaver* mScreenSaver; InfoPopup* mInfoPopup; bool mRenderScreenSaver; - PassKeyListener* mPassKeyListener; std::vector mGuiStack; diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index fe6f67d287..918e7e3888 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -257,8 +257,9 @@ std::vector getFallbackFontPaths() #else // Linux - // TODO - const char* paths[] = { + const char* paths[] = { + "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", + "/usr/share/fonts/truetype/freefont/FreeMono.ttf", "/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf" // japanese, chinese, present on Debian }; From cfaa7c19d41ed61b664bb7270306bef90167f06f Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Wed, 22 Nov 2017 22:29:52 +0100 Subject: [PATCH 216/603] Cleanup a couple of classes --- es-core/src/math/Misc.h | 32 ++++++++--------- es-core/src/math/Transform4x4f.h | 20 +++++------ es-core/src/math/Vector2f.cpp | 4 +-- es-core/src/math/Vector2f.h | 46 ++++++++++++------------ es-core/src/math/Vector2i.h | 44 +++++++++++------------ es-core/src/math/Vector3f.cpp | 2 +- es-core/src/math/Vector3f.h | 46 ++++++++++++------------ es-core/src/math/Vector4f.cpp | 2 +- es-core/src/math/Vector4f.h | 46 ++++++++++++------------ es-core/src/utils/FileSystemUtil.cpp | 52 ++++++++++++++-------------- es-core/src/utils/FileSystemUtil.h | 22 ++++++------ es-core/src/utils/StringUtil.cpp | 19 ++++------ es-core/src/utils/StringUtil.h | 16 ++++----- 13 files changed, 172 insertions(+), 179 deletions(-) diff --git a/es-core/src/math/Misc.h b/es-core/src/math/Misc.h index 094ecac3fe..a571796f16 100644 --- a/es-core/src/math/Misc.h +++ b/es-core/src/math/Misc.h @@ -3,31 +3,31 @@ #define ES_CORE_MATH_MISC_H #define ES_PI (3.1415926535897932384626433832795028841971693993751058209749445923) -#define ES_RAD_TO_DEG(x) ((x) * (180.0 / ES_PI)) -#define ES_DEG_TO_RAD(x) ((x) * (ES_PI / 180.0)) +#define ES_RAD_TO_DEG(_x) ((_x) * (180.0 / ES_PI)) +#define ES_DEG_TO_RAD(_x) ((_x) * (ES_PI / 180.0)) namespace Math { // added here to avoid including math.h whenever these are used - float cosf(const float _num); - float sinf(const float _num); - float floorf(const float _num); - float ceilf(const float _num); + float cosf (const float _num); + float sinf (const float _num); + float floorf (const float _num); + float ceilf (const float _num); - int min(const int _num1, const int _num2); - int max(const int _num1, const int _num2); - float min(const float _num1, const float _num2); - float max(const float _num1, const float _num2); - float clamp(const float _num, const float _min, const float _max); - float round(const float _num); - float lerp(const float _start, const float _end, const float _fraction); - float smoothStep(const float _left, const float _right, const float _x); + int min (const int _num1, const int _num2); + int max (const int _num1, const int _num2); + float min (const float _num1, const float _num2); + float max (const float _num1, const float _num2); + float clamp (const float _num, const float _min, const float _max); + float round (const float _num); + float lerp (const float _start, const float _end, const float _fraction); + float smoothStep (const float _left, const float _right, const float _x); float smootherStep(const float _left, const float _right, const float _x); - + namespace Scroll { float bounce(const float _delayTime, const float _scrollTime, const float _currentTime, const float _scrollLength); - float loop(const float _delayTime, const float _scrollTime, const float _currentTime, const float _scrollLength); + float loop (const float _delayTime, const float _scrollTime, const float _currentTime, const float _scrollLength); } // Math::Scroll:: diff --git a/es-core/src/math/Transform4x4f.h b/es-core/src/math/Transform4x4f.h index db20a303d4..b1646a692d 100644 --- a/es-core/src/math/Transform4x4f.h +++ b/es-core/src/math/Transform4x4f.h @@ -12,9 +12,9 @@ class Transform4x4f Transform4x4f() { } Transform4x4f(const Vector4f& _r0, const Vector4f& _r1, const Vector4f& _r2, const Vector4f& _r3) : mR0(_r0), mR1(_r1), mR2(_r2), mR3(_r3) { } - const Transform4x4f operator*(const Transform4x4f& _other) const; - const Vector3f operator*(const Vector3f& _other) const; - Transform4x4f& operator*=(const Transform4x4f& _other) { *this = *this * _other; return *this; } + const Transform4x4f operator* (const Transform4x4f& _other) const; + const Vector3f operator* (const Vector3f& _other) const; + Transform4x4f& operator*=(const Transform4x4f& _other) { *this = *this * _other; return *this; } inline Vector4f& r0() { return mR0; } inline Vector4f& r1() { return mR1; } @@ -25,14 +25,14 @@ class Transform4x4f inline const Vector4f& r2() const { return mR2; } inline const Vector4f& r3() const { return mR3; } - Transform4x4f& invert(const Transform4x4f& _other); - Transform4x4f& scale(const Vector3f& _scale); - Transform4x4f& rotate(const float _angle, const Vector3f& _axis); - Transform4x4f& rotateX(const float _angle); - Transform4x4f& rotateY(const float _angle); - Transform4x4f& rotateZ(const float _angle); + Transform4x4f& invert (const Transform4x4f& _other); + Transform4x4f& scale (const Vector3f& _scale); + Transform4x4f& rotate (const float _angle, const Vector3f& _axis); + Transform4x4f& rotateX (const float _angle); + Transform4x4f& rotateY (const float _angle); + Transform4x4f& rotateZ (const float _angle); Transform4x4f& translate(const Vector3f& _translation); - Transform4x4f& round(); + Transform4x4f& round (); inline Vector3f& translation() { return mR3.v3(); } inline const Vector3f& translation() const { return mR3.v3(); } diff --git a/es-core/src/math/Vector2f.cpp b/es-core/src/math/Vector2f.cpp index 6cb3416236..f98f17194c 100644 --- a/es-core/src/math/Vector2f.cpp +++ b/es-core/src/math/Vector2f.cpp @@ -4,9 +4,9 @@ Vector2f& Vector2f::round() { mX = (float)(int)(mX + 0.5f); mY = (float)(int)(mY + 0.5f); - + return *this; - + } // round Vector2f& Vector2f::lerp(const Vector2f& _start, const Vector2f& _end, const float _fraction) diff --git a/es-core/src/math/Vector2f.h b/es-core/src/math/Vector2f.h index d8103da308..0616842845 100644 --- a/es-core/src/math/Vector2f.h +++ b/es-core/src/math/Vector2f.h @@ -18,33 +18,33 @@ class Vector2f explicit Vector2f(const Vector3f& _v) : mX(((Vector2f&)_v).mX), mY(((Vector2f&)_v).mY) { } explicit Vector2f(const Vector4f& _v) : mX(((Vector2f&)_v).mX), mY(((Vector2f&)_v).mY) { } - const bool operator==(const Vector2f& _other) const { return ((mX == _other.mX) && (mY == _other.mY)); } - const bool operator!=(const Vector2f& _other) const { return ((mX != _other.mX) || (mY != _other.mY)); } + const bool operator==(const Vector2f& _other) const { return ((mX == _other.mX) && (mY == _other.mY)); } + const bool operator!=(const Vector2f& _other) const { return ((mX != _other.mX) || (mY != _other.mY)); } - const Vector2f operator+(const Vector2f& _other) const { return { mX + _other.mX, mY + _other.mY }; } - const Vector2f operator-(const Vector2f& _other) const { return { mX - _other.mX, mY - _other.mY }; } - const Vector2f operator*(const Vector2f& _other) const { return { mX * _other.mX, mY * _other.mY }; } - const Vector2f operator/(const Vector2f& _other) const { return { mX / _other.mX, mY / _other.mY }; } + const Vector2f operator+ (const Vector2f& _other) const { return { mX + _other.mX, mY + _other.mY }; } + const Vector2f operator- (const Vector2f& _other) const { return { mX - _other.mX, mY - _other.mY }; } + const Vector2f operator* (const Vector2f& _other) const { return { mX * _other.mX, mY * _other.mY }; } + const Vector2f operator/ (const Vector2f& _other) const { return { mX / _other.mX, mY / _other.mY }; } - const Vector2f operator+(const float& _other) const { return { mX + _other, mY + _other }; } - const Vector2f operator-(const float& _other) const { return { mX - _other, mY - _other }; } - const Vector2f operator*(const float& _other) const { return { mX * _other, mY * _other }; } - const Vector2f operator/(const float& _other) const { return { mX / _other, mY / _other }; } + const Vector2f operator+ (const float& _other) const { return { mX + _other, mY + _other }; } + const Vector2f operator- (const float& _other) const { return { mX - _other, mY - _other }; } + const Vector2f operator* (const float& _other) const { return { mX * _other, mY * _other }; } + const Vector2f operator/ (const float& _other) const { return { mX / _other, mY / _other }; } - const Vector2f operator-() const { return { -mX , -mY }; } + const Vector2f operator- () const { return { -mX , -mY }; } - Vector2f& operator+=(const Vector2f& _other) { *this = *this + _other; return *this; } - Vector2f& operator-=(const Vector2f& _other) { *this = *this - _other; return *this; } - Vector2f& operator*=(const Vector2f& _other) { *this = *this * _other; return *this; } - Vector2f& operator/=(const Vector2f& _other) { *this = *this / _other; return *this; } + Vector2f& operator+=(const Vector2f& _other) { *this = *this + _other; return *this; } + Vector2f& operator-=(const Vector2f& _other) { *this = *this - _other; return *this; } + Vector2f& operator*=(const Vector2f& _other) { *this = *this * _other; return *this; } + Vector2f& operator/=(const Vector2f& _other) { *this = *this / _other; return *this; } - Vector2f& operator+=(const float& _other) { *this = *this + _other; return *this; } - Vector2f& operator-=(const float& _other) { *this = *this - _other; return *this; } - Vector2f& operator*=(const float& _other) { *this = *this * _other; return *this; } - Vector2f& operator/=(const float& _other) { *this = *this / _other; return *this; } + Vector2f& operator+=(const float& _other) { *this = *this + _other; return *this; } + Vector2f& operator-=(const float& _other) { *this = *this - _other; return *this; } + Vector2f& operator*=(const float& _other) { *this = *this * _other; return *this; } + Vector2f& operator/=(const float& _other) { *this = *this / _other; return *this; } - float& operator[](const int _index) { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } - const float& operator[](const int _index) const { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } + float& operator[](const int _index) { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } + const float& operator[](const int _index) const { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } float& x() { return mX; } float& y() { return mY; } @@ -52,9 +52,9 @@ class Vector2f const float& y() const { return mY; } Vector2f& round(); - Vector2f& lerp(const Vector2f& _start, const Vector2f& _end, const float _fraction); + Vector2f& lerp (const Vector2f& _start, const Vector2f& _end, const float _fraction); - static const Vector2f Zero() { return { 0, 0 }; } + static const Vector2f Zero () { return { 0, 0 }; } static const Vector2f UnitX() { return { 1, 0 }; } static const Vector2f UnitY() { return { 0, 1 }; } diff --git a/es-core/src/math/Vector2i.h b/es-core/src/math/Vector2i.h index 693619da88..7cc020ea54 100644 --- a/es-core/src/math/Vector2i.h +++ b/es-core/src/math/Vector2i.h @@ -12,40 +12,40 @@ class Vector2i Vector2i(const int _i) : mX(_i), mY(_i) { } Vector2i(const int _x, const int _y) : mX(_x), mY(_y) { } - const bool operator==(const Vector2i& _other) const { return ((mX == _other.mX) && (mY == _other.mY)); } - const bool operator!=(const Vector2i& _other) const { return ((mX != _other.mX) || (mY != _other.mY)); } + const bool operator==(const Vector2i& _other) const { return ((mX == _other.mX) && (mY == _other.mY)); } + const bool operator!=(const Vector2i& _other) const { return ((mX != _other.mX) || (mY != _other.mY)); } - const Vector2i operator+(const Vector2i& _other) const { return { mX + _other.mX, mY + _other.mY }; } - const Vector2i operator-(const Vector2i& _other) const { return { mX - _other.mX, mY - _other.mY }; } - const Vector2i operator*(const Vector2i& _other) const { return { mX * _other.mX, mY * _other.mY }; } - const Vector2i operator/(const Vector2i& _other) const { return { mX / _other.mX, mY / _other.mY }; } + const Vector2i operator+ (const Vector2i& _other) const { return { mX + _other.mX, mY + _other.mY }; } + const Vector2i operator- (const Vector2i& _other) const { return { mX - _other.mX, mY - _other.mY }; } + const Vector2i operator* (const Vector2i& _other) const { return { mX * _other.mX, mY * _other.mY }; } + const Vector2i operator/ (const Vector2i& _other) const { return { mX / _other.mX, mY / _other.mY }; } - const Vector2i operator+(const int& _other) const { return { mX + _other, mY + _other }; } - const Vector2i operator-(const int& _other) const { return { mX - _other, mY - _other }; } - const Vector2i operator*(const int& _other) const { return { mX * _other, mY * _other }; } - const Vector2i operator/(const int& _other) const { return { mX / _other, mY / _other }; } + const Vector2i operator+ (const int& _other) const { return { mX + _other, mY + _other }; } + const Vector2i operator- (const int& _other) const { return { mX - _other, mY - _other }; } + const Vector2i operator* (const int& _other) const { return { mX * _other, mY * _other }; } + const Vector2i operator/ (const int& _other) const { return { mX / _other, mY / _other }; } - const Vector2i operator-() const { return { -mX , -mY }; } + const Vector2i operator- () const { return { -mX , -mY }; } - Vector2i& operator+=(const Vector2i& _other) { *this = *this + _other; return *this; } - Vector2i& operator-=(const Vector2i& _other) { *this = *this - _other; return *this; } - Vector2i& operator*=(const Vector2i& _other) { *this = *this * _other; return *this; } - Vector2i& operator/=(const Vector2i& _other) { *this = *this / _other; return *this; } + Vector2i& operator+=(const Vector2i& _other) { *this = *this + _other; return *this; } + Vector2i& operator-=(const Vector2i& _other) { *this = *this - _other; return *this; } + Vector2i& operator*=(const Vector2i& _other) { *this = *this * _other; return *this; } + Vector2i& operator/=(const Vector2i& _other) { *this = *this / _other; return *this; } - Vector2i& operator+=(const int& _other) { *this = *this + _other; return *this; } - Vector2i& operator-=(const int& _other) { *this = *this - _other; return *this; } - Vector2i& operator*=(const int& _other) { *this = *this * _other; return *this; } - Vector2i& operator/=(const int& _other) { *this = *this / _other; return *this; } + Vector2i& operator+=(const int& _other) { *this = *this + _other; return *this; } + Vector2i& operator-=(const int& _other) { *this = *this - _other; return *this; } + Vector2i& operator*=(const int& _other) { *this = *this * _other; return *this; } + Vector2i& operator/=(const int& _other) { *this = *this / _other; return *this; } - int& operator[](const int _index) { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } - const int& operator[](const int _index) const { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } + int& operator[](const int _index) { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } + const int& operator[](const int _index) const { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } int& x() { return mX; } int& y() { return mY; } const int& x() const { return mX; } const int& y() const { return mY; } - static const Vector2i Zero() { return { 0, 0 }; } + static const Vector2i Zero () { return { 0, 0 }; } static const Vector2i UnitX() { return { 1, 0 }; } static const Vector2i UnitY() { return { 0, 1 }; } diff --git a/es-core/src/math/Vector3f.cpp b/es-core/src/math/Vector3f.cpp index 3dd9b01d9a..15fc22e7b5 100644 --- a/es-core/src/math/Vector3f.cpp +++ b/es-core/src/math/Vector3f.cpp @@ -5,7 +5,7 @@ Vector3f& Vector3f::round() mX = (float)(int)(mX + 0.5f); mY = (float)(int)(mY + 0.5f); mZ = (float)(int)(mZ + 0.5f); - + return *this; } // round diff --git a/es-core/src/math/Vector3f.h b/es-core/src/math/Vector3f.h index db33912f43..c6237bc2ce 100644 --- a/es-core/src/math/Vector3f.h +++ b/es-core/src/math/Vector3f.h @@ -19,33 +19,33 @@ class Vector3f explicit Vector3f(const Vector2f& _v, const float _z) : mX(((Vector3f&)_v).mX), mY(((Vector3f&)_v).mY), mZ(_z) { } explicit Vector3f(const Vector4f& _v) : mX(((Vector3f&)_v).mX), mY(((Vector3f&)_v).mY), mZ(((Vector3f&)_v).mZ) { } - const bool operator==(const Vector3f& _other) const { return ((mX == _other.mX) && (mY == _other.mY) && (mZ == _other.mZ)); } - const bool operator!=(const Vector3f& _other) const { return ((mX != _other.mX) || (mY != _other.mY) || (mZ != _other.mZ)); } + const bool operator==(const Vector3f& _other) const { return ((mX == _other.mX) && (mY == _other.mY) && (mZ == _other.mZ)); } + const bool operator!=(const Vector3f& _other) const { return ((mX != _other.mX) || (mY != _other.mY) || (mZ != _other.mZ)); } - const Vector3f operator+(const Vector3f& _other) const { return { mX + _other.mX, mY + _other.mY, mZ + _other.mZ }; } - const Vector3f operator-(const Vector3f& _other) const { return { mX - _other.mX, mY - _other.mY, mZ - _other.mZ }; } - const Vector3f operator*(const Vector3f& _other) const { return { mX * _other.mX, mY * _other.mY, mZ * _other.mZ }; } - const Vector3f operator/(const Vector3f& _other) const { return { mX / _other.mX, mY / _other.mY, mZ / _other.mZ }; } + const Vector3f operator+ (const Vector3f& _other) const { return { mX + _other.mX, mY + _other.mY, mZ + _other.mZ }; } + const Vector3f operator- (const Vector3f& _other) const { return { mX - _other.mX, mY - _other.mY, mZ - _other.mZ }; } + const Vector3f operator* (const Vector3f& _other) const { return { mX * _other.mX, mY * _other.mY, mZ * _other.mZ }; } + const Vector3f operator/ (const Vector3f& _other) const { return { mX / _other.mX, mY / _other.mY, mZ / _other.mZ }; } - const Vector3f operator+(const float& _other) const { return { mX + _other, mY + _other, mZ + _other }; } - const Vector3f operator-(const float& _other) const { return { mX - _other, mY - _other, mZ - _other }; } - const Vector3f operator*(const float& _other) const { return { mX * _other, mY * _other, mZ * _other }; } - const Vector3f operator/(const float& _other) const { return { mX / _other, mY / _other, mZ / _other }; } + const Vector3f operator+ (const float& _other) const { return { mX + _other, mY + _other, mZ + _other }; } + const Vector3f operator- (const float& _other) const { return { mX - _other, mY - _other, mZ - _other }; } + const Vector3f operator* (const float& _other) const { return { mX * _other, mY * _other, mZ * _other }; } + const Vector3f operator/ (const float& _other) const { return { mX / _other, mY / _other, mZ / _other }; } - const Vector3f operator-() const { return { -mX , -mY, -mZ }; } + const Vector3f operator- () const { return { -mX , -mY, -mZ }; } - Vector3f& operator+=(const Vector3f& _other) { *this = *this + _other; return *this; } - Vector3f& operator-=(const Vector3f& _other) { *this = *this - _other; return *this; } - Vector3f& operator*=(const Vector3f& _other) { *this = *this * _other; return *this; } - Vector3f& operator/=(const Vector3f& _other) { *this = *this / _other; return *this; } + Vector3f& operator+=(const Vector3f& _other) { *this = *this + _other; return *this; } + Vector3f& operator-=(const Vector3f& _other) { *this = *this - _other; return *this; } + Vector3f& operator*=(const Vector3f& _other) { *this = *this * _other; return *this; } + Vector3f& operator/=(const Vector3f& _other) { *this = *this / _other; return *this; } - Vector3f& operator+=(const float& _other) { *this = *this + _other; return *this; } - Vector3f& operator-=(const float& _other) { *this = *this - _other; return *this; } - Vector3f& operator*=(const float& _other) { *this = *this * _other; return *this; } - Vector3f& operator/=(const float& _other) { *this = *this / _other; return *this; } + Vector3f& operator+=(const float& _other) { *this = *this + _other; return *this; } + Vector3f& operator-=(const float& _other) { *this = *this - _other; return *this; } + Vector3f& operator*=(const float& _other) { *this = *this * _other; return *this; } + Vector3f& operator/=(const float& _other) { *this = *this / _other; return *this; } - float& operator[](const int _index) { assert(_index < 3 && "index out of range"); return (&mX)[_index]; } - const float& operator[](const int _index) const { assert(_index < 3 && "index out of range"); return (&mX)[_index]; } + float& operator[](const int _index) { assert(_index < 3 && "index out of range"); return (&mX)[_index]; } + const float& operator[](const int _index) const { assert(_index < 3 && "index out of range"); return (&mX)[_index]; } float& x() { return mX; } float& y() { return mY; } @@ -58,9 +58,9 @@ class Vector3f inline const Vector2f& v2() const { return *(Vector2f*)this; } Vector3f& round(); - Vector3f& lerp(const Vector3f& _start, const Vector3f& _end, const float _fraction); + Vector3f& lerp (const Vector3f& _start, const Vector3f& _end, const float _fraction); - static const Vector3f Zero() { return { 0, 0, 0 }; } + static const Vector3f Zero () { return { 0, 0, 0 }; } static const Vector3f UnitX() { return { 1, 0, 0 }; } static const Vector3f UnitY() { return { 0, 1, 0 }; } static const Vector3f UnitZ() { return { 0, 0, 1 }; } diff --git a/es-core/src/math/Vector4f.cpp b/es-core/src/math/Vector4f.cpp index c0f933aa35..0885521722 100644 --- a/es-core/src/math/Vector4f.cpp +++ b/es-core/src/math/Vector4f.cpp @@ -6,7 +6,7 @@ Vector4f& Vector4f::round() mY = (float)(int)(mY + 0.5f); mZ = (float)(int)(mZ + 0.5f); mW = (float)(int)(mW + 0.5f); - + return *this; } // round diff --git a/es-core/src/math/Vector4f.h b/es-core/src/math/Vector4f.h index 1cf1b0daca..518c1450b3 100644 --- a/es-core/src/math/Vector4f.h +++ b/es-core/src/math/Vector4f.h @@ -21,33 +21,33 @@ class Vector4f explicit Vector4f(const Vector3f& _v) : mX(((Vector4f&)_v).mX), mY(((Vector4f&)_v).mY), mZ(((Vector4f&)_v).mZ), mW(0) { } explicit Vector4f(const Vector3f& _v, const float _w) : mX(((Vector4f&)_v).mX), mY(((Vector4f&)_v).mY), mZ(((Vector4f&)_v).mZ), mW(_w) { } - const bool operator==(const Vector4f& _other) const { return ((mX == _other.mX) && (mY == _other.mY) && (mZ == _other.mZ) && (mW == _other.mW)); } - const bool operator!=(const Vector4f& _other) const { return ((mX != _other.mX) || (mY != _other.mY) || (mZ != _other.mZ) || (mW != _other.mW)); } + const bool operator==(const Vector4f& _other) const { return ((mX == _other.mX) && (mY == _other.mY) && (mZ == _other.mZ) && (mW == _other.mW)); } + const bool operator!=(const Vector4f& _other) const { return ((mX != _other.mX) || (mY != _other.mY) || (mZ != _other.mZ) || (mW != _other.mW)); } - const Vector4f operator+(const Vector4f& _other) const { return { mX + _other.mX, mY + _other.mY, mZ + _other.mZ, mW + _other.mW }; } - const Vector4f operator-(const Vector4f& _other) const { return { mX - _other.mX, mY - _other.mY, mZ - _other.mZ, mW - _other.mW }; } - const Vector4f operator*(const Vector4f& _other) const { return { mX * _other.mX, mY * _other.mY, mZ * _other.mZ, mW * _other.mW }; } - const Vector4f operator/(const Vector4f& _other) const { return { mX / _other.mX, mY / _other.mY, mZ / _other.mZ, mW / _other.mW }; } + const Vector4f operator+ (const Vector4f& _other) const { return { mX + _other.mX, mY + _other.mY, mZ + _other.mZ, mW + _other.mW }; } + const Vector4f operator- (const Vector4f& _other) const { return { mX - _other.mX, mY - _other.mY, mZ - _other.mZ, mW - _other.mW }; } + const Vector4f operator* (const Vector4f& _other) const { return { mX * _other.mX, mY * _other.mY, mZ * _other.mZ, mW * _other.mW }; } + const Vector4f operator/ (const Vector4f& _other) const { return { mX / _other.mX, mY / _other.mY, mZ / _other.mZ, mW / _other.mW }; } - const Vector4f operator+(const float& _other) const { return { mX + _other, mY + _other, mZ + _other, mW + _other }; } - const Vector4f operator-(const float& _other) const { return { mX - _other, mY - _other, mZ - _other, mW - _other }; } - const Vector4f operator*(const float& _other) const { return { mX * _other, mY * _other, mZ * _other, mW * _other }; } - const Vector4f operator/(const float& _other) const { return { mX / _other, mY / _other, mZ / _other, mW / _other }; } + const Vector4f operator+ (const float& _other) const { return { mX + _other, mY + _other, mZ + _other, mW + _other }; } + const Vector4f operator- (const float& _other) const { return { mX - _other, mY - _other, mZ - _other, mW - _other }; } + const Vector4f operator* (const float& _other) const { return { mX * _other, mY * _other, mZ * _other, mW * _other }; } + const Vector4f operator/ (const float& _other) const { return { mX / _other, mY / _other, mZ / _other, mW / _other }; } - const Vector4f operator-() const { return {-mX , -mY, -mZ, -mW }; } + const Vector4f operator- () const { return {-mX , -mY, -mZ, -mW }; } - Vector4f& operator+=(const Vector4f& _other) { *this = *this + _other; return *this; } - Vector4f& operator-=(const Vector4f& _other) { *this = *this - _other; return *this; } - Vector4f& operator*=(const Vector4f& _other) { *this = *this * _other; return *this; } - Vector4f& operator/=(const Vector4f& _other) { *this = *this / _other; return *this; } + Vector4f& operator+=(const Vector4f& _other) { *this = *this + _other; return *this; } + Vector4f& operator-=(const Vector4f& _other) { *this = *this - _other; return *this; } + Vector4f& operator*=(const Vector4f& _other) { *this = *this * _other; return *this; } + Vector4f& operator/=(const Vector4f& _other) { *this = *this / _other; return *this; } - Vector4f& operator+=(const float& _other) { *this = *this + _other; return *this; } - Vector4f& operator-=(const float& _other) { *this = *this - _other; return *this; } - Vector4f& operator*=(const float& _other) { *this = *this * _other; return *this; } - Vector4f& operator/=(const float& _other) { *this = *this / _other; return *this; } + Vector4f& operator+=(const float& _other) { *this = *this + _other; return *this; } + Vector4f& operator-=(const float& _other) { *this = *this - _other; return *this; } + Vector4f& operator*=(const float& _other) { *this = *this * _other; return *this; } + Vector4f& operator/=(const float& _other) { *this = *this / _other; return *this; } - float& operator[](const int _index) { assert(_index < 4 && "index out of range"); return (&mX)[_index]; } - const float& operator[](const int _index) const { assert(_index < 4 && "index out of range"); return (&mX)[_index]; } + float& operator[](const int _index) { assert(_index < 4 && "index out of range"); return (&mX)[_index]; } + const float& operator[](const int _index) const { assert(_index < 4 && "index out of range"); return (&mX)[_index]; } float& x() { return mX; } float& y() { return mY; } @@ -65,9 +65,9 @@ class Vector4f inline const Vector3f& v3() const { return *(Vector3f*)this; } Vector4f& round(); - Vector4f& lerp(const Vector4f& _start, const Vector4f& _end, const float _fraction); + Vector4f& lerp (const Vector4f& _start, const Vector4f& _end, const float _fraction); - static const Vector4f Zero() { return { 0, 0, 0, 0 }; } + static const Vector4f Zero () { return { 0, 0, 0, 0 }; } static const Vector4f UnitX() { return { 1, 0, 0, 0 }; } static const Vector4f UnitY() { return { 0, 1, 0, 0 }; } static const Vector4f UnitZ() { return { 0, 0, 1, 0 }; } diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 54e49d88c4..b15f037660 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -14,55 +14,55 @@ namespace Utils { namespace FileSystem { - bool createDirectory(const std::string& path) + bool createDirectory(const std::string& _path) { // don't create if it already exists - if(exists(path)) + if(exists(_path)) return true; // convert '\\' to '/' - fixSeparators(path); + makeGeneric(_path); // try to create directory - if(mkdir(path.c_str(), 0755) == 0) + if(mkdir(_path.c_str(), 0755) == 0) return true; // failed to create directory, try to create the parent - std::string parent = getParent(path); + std::string parent = getParent(_path); // only try to create parent if it's not identical to path - if(parent != path) + if(parent != _path) createDirectory(parent); // try to create directory again now that the parent should exist - return (mkdir(path.c_str(), 0755) == 0); + return (mkdir(_path.c_str(), 0755) == 0); } // createDirectory - void fixSeparators(const std::string& path) + void makeGeneric(const std::string& _path) { char* p = nullptr; // convert '\\' to '/' - for(p = (char*)path.c_str() + 1; *p; ++p) + for(p = (char*)_path.c_str() + 1; *p; ++p) { if(*p == '\\') *p = '/'; } - } // fixSeparators + } // makeGeneric - std::string escapePath(const std::string& path) + std::string escapePath(const std::string& _path) { #ifdef WIN32 // windows escapes stuff by just putting everything in quotes - return '"' + path + '"'; + return '"' + _path + '"'; #else // WIN32 // insert a backslash before most characters that would mess up a bash path - std::string escapedPath = path; + std::string escapedPath = _path; const char* invalidChars = "\\ '\"!$^&*(){}[]?;<>"; - const char* invalidChar = invalidChars; + const char* invalidChar = invalidChars; while(*invalidChar) { @@ -83,14 +83,14 @@ namespace Utils } // escapePath - std::string getParent(const std::string& path) + std::string getParent(const std::string& _path) { // convert '\\' to '/' - fixSeparators(path); + makeGeneric(_path); // make a copy of the path char temp[512]; - size_t len = snprintf(temp, sizeof(temp), "%s", path.c_str()); + size_t len = snprintf(temp, sizeof(temp), "%s", _path.c_str()); // find last '/' and end the new path while(len > 1) @@ -103,18 +103,18 @@ namespace Utils } // no parent found - return path; + return _path; } // getParent - std::string getFileName(const std::string& path) + std::string getFileName(const std::string& _path) { // convert '\\' to '/' - fixSeparators(path); + makeGeneric(_path); // make a copy of the path char temp[512]; - size_t len = snprintf(temp, sizeof(temp), "%s", path.c_str()); + size_t len = snprintf(temp, sizeof(temp), "%s", _path.c_str()); // find last '/' and return the filename while(len > 1) @@ -125,13 +125,13 @@ namespace Utils } // no '/' found, entire path is a filename - return path; + return _path; } // getFileName - std::string getStem(const std::string& path) + std::string getStem(const std::string& _path) { - std::string fileName = getFileName(path); + std::string fileName = getFileName(_path); // empty fileName if(fileName == ".") @@ -156,10 +156,10 @@ namespace Utils } // getStem - bool exists(const std::string& path) + bool exists(const std::string& _path) { struct stat info; - return (stat(path.c_str(), &info) == 0); + return (stat(_path.c_str(), &info) == 0); } // exists diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index fe69296540..d91b5666c1 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ES_CORE_FILE_SYSTEM_UTIL_H -#define ES_CORE_FILE_SYSTEM_UTIL_H +#ifndef ES_CORE_UTILS_FILE_SYSTEM_UTIL_H +#define ES_CORE_UTILS_FILE_SYSTEM_UTIL_H #include @@ -8,16 +8,16 @@ namespace Utils { namespace FileSystem { - bool createDirectory(const std::string& path); - void fixSeparators(const std::string& path); - std::string escapePath(const std::string& path); - std::string getParent(const std::string& path); - std::string getFileName(const std::string& path); - std::string getStem(const std::string& path); - bool exists(const std::string& path); + bool createDirectory(const std::string& _path); + void makeGeneric (const std::string& _path); + std::string escapePath (const std::string& _path); + std::string getParent (const std::string& _path); + std::string getFileName (const std::string& _path); + std::string getStem (const std::string& _path); + bool exists (const std::string& _path); - } // FileSystem:: + } // Utils::FileSystem:: } // Utils:: -#endif // ES_CORE_FILE_SYSTEM_UTIL_H +#endif // ES_CORE_UTILS_FILE_SYSTEM_UTIL_H diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index 52f426fba7..695695ab3c 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -132,22 +132,15 @@ namespace Utils } // moveCursor - void trim(std::string& _string) + std::string trim(const std::string& _path) { - if(_string.size()) - { - size_t cursorB = 0; - size_t cursorE = _string.size(); - - while((cursorB < _string.size()) && _string[cursorB] == ' ') - ++cursorB; + const size_t pathBegin = _path.find_first_not_of(" \t"); + const size_t pathEnd = _path.find_last_not_of(" \t"); - while((cursorE > 0) && _string[cursorE - 1] == ' ') - --cursorE; + if(pathBegin == std::string::npos) + return ""; - _string.erase(_string.begin() + cursorE, _string.end()); - _string.erase(_string.begin(), _string.begin() + cursorB); - } + return _path.substr(pathBegin, pathEnd - pathBegin + 1); } // trim diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h index 29d82c338b..3649ae4d8b 100644 --- a/es-core/src/utils/StringUtil.h +++ b/es-core/src/utils/StringUtil.h @@ -1,6 +1,6 @@ #pragma once -#ifndef ES_CORE_STRING_UTIL_H -#define ES_CORE_STRING_UTIL_H +#ifndef ES_CORE_UTILS_STRING_UTIL_H +#define ES_CORE_UTILS_STRING_UTIL_H #include @@ -10,13 +10,13 @@ namespace Utils { unsigned int chars2Unicode(const std::string& _string, size_t& _cursor); std::string unicode2Chars(const unsigned int _unicode); - size_t nextCursor(const std::string& _string, const size_t _cursor); - size_t prevCursor(const std::string& _string, const size_t _cursor); - size_t moveCursor(const std::string& _string, const size_t _cursor, const int _amount); - void trim(std::string& _string); + size_t nextCursor (const std::string& _string, const size_t _cursor); + size_t prevCursor (const std::string& _string, const size_t _cursor); + size_t moveCursor (const std::string& _string, const size_t _cursor, const int _amount); + std::string trim (const std::string& _path); - } // String:: + } // Utils::String:: } // Utils:: -#endif // ES_CORE_STRING_UTIL_H +#endif // ES_CORE_UTILS_STRING_UTIL_H From b6b6f73a243e9a25153983a423ef8ab96160d664 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 20 Nov 2017 00:06:04 +0100 Subject: [PATCH 217/603] Log everything CEC does Only support libcec4 --- CMakeLists.txt | 5 + es-core/src/CECInput.cpp | 335 +++++++++++++++++++++++----- es-core/src/CECInput.h | 20 +- es-core/src/InputConfig.cpp | 9 +- es-core/src/InputConfig.h | 103 +-------- es-core/src/guis/GuiInputConfig.cpp | 2 + 6 files changed, 302 insertions(+), 172 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d426f482fb..7264ba474a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -179,6 +179,11 @@ set(COMMON_LIBRARIES #add libCEC_LIBRARIES if(DEFINED libCEC_FOUND) +if(DEFINED BCMHOST) + LIST(APPEND COMMON_LIBRARIES + vchiq_arm + ) +endif() LIST(APPEND COMMON_LIBRARIES dl ${libCEC_LIBRARIES} diff --git a/es-core/src/CECInput.cpp b/es-core/src/CECInput.cpp index 0f628b01d4..7fb3c963dc 100644 --- a/es-core/src/CECInput.cpp +++ b/es-core/src/CECInput.cpp @@ -6,8 +6,14 @@ #include // bad bad cecloader #include #include +#ifdef _RPI_ +extern "C" { +#include +#include +#include +} +#endif // _RPI_ #endif // HAVE_LIBCEC -#include // hack for cec support extern int SDL_USER_CECBUTTONDOWN; @@ -16,80 +22,92 @@ extern int SDL_USER_CECBUTTONUP; CECInput* CECInput::sInstance = nullptr; #ifdef HAVE_LIBCEC -#if CEC_LIB_VERSION_MAJOR >= 4 -static void onAlert(void* /*cbParam*/, const CEC::libcec_alert /*type*/, const CEC::libcec_parameter /*param*/) +static void onAlert(void* /*cbParam*/, const CEC::libcec_alert type, const CEC::libcec_parameter param) { - return; -} + LOG(LogDebug) << "CECInput::onAlert type: " << CECInput::getAlertTypeString(type) << " parameter: " << (char*)(param.paramData); + +} // onAlert -static void onCommand(void* /*cbParam*/, const CEC::cec_command* /*command*/) +static void onCommand(void* /*cbParam*/, const CEC::cec_command* command) { - return; -} + LOG(LogDebug) << "CECInput::onCommand opcode: " << CECInput::getOpCodeString(command->opcode); + +} // onCommand static void onKeyPress(void* /*cbParam*/, const CEC::cec_keypress* key) { + LOG(LogDebug) << "CECInput::onKeyPress keycode: " << CECInput::getKeyCodeString(key->keycode); + SDL_Event event; event.type = (key->duration > 0) ? SDL_USER_CECBUTTONUP : SDL_USER_CECBUTTONDOWN; event.user.code = key->keycode; SDL_PushEvent(&event); - return; -} +} // onKeyPress -static void onLogMessage(void* /*cbParam*/, const CEC::cec_log_message* /*message*/) -{ - return; -} -#else -static int onAlert(void* /*cbParam*/, const CEC::libcec_alert /*type*/, const CEC::libcec_parameter /*param*/) +static void onLogMessage(void* /*cbParam*/, const CEC::cec_log_message* message) { - return 0; -} + LOG(LogDebug) << "CECInput::onLogMessage message: " << message->message; -static int onCommand(void* /*cbParam*/, const CEC::cec_command /*command*/) -{ - return 0; -} +} // onLogMessage -static int onKeyPress(void* /*cbParam*/, const CEC::cec_keypress key) +#ifdef _RPI_ +static void vchi_tv_and_cec_init() { - SDL_Event event; - event.type = (key.duration > 0) ? SDL_USER_CECBUTTONUP : SDL_USER_CECBUTTONDOWN; - event.user.code = key.keycode; - SDL_PushEvent(&event); + VCHI_INSTANCE_T vchi_instance; + VCHI_CONNECTION_T* vchi_connection; + vc_host_get_vchi_state(&vchi_instance, &vchi_connection); - return 0; -} + vc_vchi_tv_init(vchi_instance, &vchi_connection, 1); + vc_vchi_cec_init(vchi_instance, &vchi_connection, 1); -static int onLogMessage(void* /*cbParam*/, const CEC::cec_log_message /*message*/) +} // vchi_tv_and_cec_init + +static void vchi_tv_and_cec_deinit() { - return 0; -} -#endif + vc_vchi_cec_stop(); + vc_vchi_tv_stop(); + +} // vchi_tv_and_cec_deinit +#endif // _RPI_ #endif // HAVE_LIBCEC void CECInput::init() { - assert(!sInstance); - sInstance = new CECInput(); -} + if(!sInstance) + sInstance = new CECInput(); + +} // init void CECInput::deinit() { - assert(sInstance); - delete sInstance; - sInstance = nullptr; -} + if(sInstance) + { + delete sInstance; + sInstance = nullptr; + } + +} // deinit CECInput::CECInput() : mlibCEC(nullptr) { #ifdef HAVE_LIBCEC +#ifdef _RPI_ + // restart vchi tv and cec in case we just came back from another app using cec (like Kodi) + vchi_tv_and_cec_deinit(); + vchi_tv_and_cec_init(); +#endif // _RPI_ + CEC::ICECCallbacks callbacks; CEC::libcec_configuration config; - config.Clear(); callbacks.Clear(); + config.Clear(); + + callbacks.alert = &onAlert; + callbacks.commandReceived = &onCommand; + callbacks.keyPress = &onKeyPress; + callbacks.logMessage = &onLogMessage; sprintf(config.strDeviceName, "RetroPie ES"); config.clientVersion = CEC::LIBCEC_VERSION_CURRENT; @@ -97,52 +115,38 @@ CECInput::CECInput() : mlibCEC(nullptr) config.callbacks = &callbacks; config.deviceTypes.Add(CEC::CEC_DEVICE_TYPE_PLAYBACK_DEVICE); -#if CEC_LIB_VERSION_MAJOR >= 4 - callbacks.alert = &onAlert; - callbacks.commandReceived = &onCommand; - callbacks.keyPress = &onKeyPress; - callbacks.logMessage = &onLogMessage; -#else - callbacks.CBCecAlert = &onAlert; - callbacks.CBCecCommand = &onCommand; - callbacks.CBCecKeyPress = &onKeyPress; - callbacks.CBCecLogMessage = &onLogMessage; -#endif - mlibCEC = LibCecInitialise(&config); if(!mlibCEC) { - LOG(LogInfo) << "CECInput::LibCecInitialise failed"; + LOG(LogError) << "CECInput::LibCecInitialise failed"; return; } CEC::cec_adapter_descriptor adapters[10]; - int8_t numAdapters = mlibCEC->DetectAdapters(adapters, 10, nullptr, true); + int numAdapters = mlibCEC->DetectAdapters(adapters, 10, nullptr, true); if(numAdapters <= 0) { - LOG(LogInfo) << "CECInput::mAdapter->DetectAdapters failed"; + LOG(LogError) << "CECInput::mAdapter->DetectAdapters failed"; UnloadLibCec(mlibCEC); mlibCEC = nullptr; return; } for(int i = 0; i < numAdapters; ++i) - LOG(LogDebug) << "adapter: " << i << " path: " << adapters[i].strComPath << " name: " << adapters[i].strComName; + LOG(LogDebug) << "CEC adapter: " << i << " path: " << adapters[i].strComPath << " name: " << adapters[i].strComName; if(!mlibCEC->Open(adapters[0].strComName)) { - LOG(LogInfo) << "CECInput::mAdapter->Open failed"; + LOG(LogError) << "CECInput::mAdapter->Open failed"; UnloadLibCec(mlibCEC); mlibCEC = nullptr; return; } - - LOG(LogDebug) << "CECInput succeeded"; #endif // HAVE_LIBCEC -} +} // CECInput CECInput::~CECInput() { @@ -154,6 +158,213 @@ CECInput::~CECInput() UnloadLibCec(mlibCEC); mlibCEC = nullptr; } + +#ifdef _RPI_ + // deinit vchi tv and cec in case we are going to launch another app using cec (like Kodi) + vchi_tv_and_cec_deinit(); +#endif // _RPI_ #endif // HAVE_LIBCEC -} +} // ~CECInput + +std::string CECInput::getAlertTypeString(const unsigned int _type) +{ + +#ifdef HAVE_LIBCEC + switch(_type) + { + case CEC::CEC_ALERT_SERVICE_DEVICE: { return "Service-Device"; } break; + case CEC::CEC_ALERT_CONNECTION_LOST: { return "Connection-Lost"; } break; + case CEC::CEC_ALERT_PERMISSION_ERROR: { return "Permission-Error"; } break; + case CEC::CEC_ALERT_PORT_BUSY: { return "Port-Busy"; } break; + case CEC::CEC_ALERT_PHYSICAL_ADDRESS_ERROR: { return "Physical-Address-Error"; } break; + case CEC::CEC_ALERT_TV_POLL_FAILED: { return "TV-Poll-Failed"; } break; + } +#endif // HAVE_LIBCEC + + return "Unknown"; + +} // getAlertTypeString + +std::string CECInput::getOpCodeString(const unsigned int _opCode) +{ + +#ifdef HAVE_LIBCEC + switch(_opCode) + { + case CEC::CEC_OPCODE_ACTIVE_SOURCE: { return "Active-Source"; } break; + case CEC::CEC_OPCODE_IMAGE_VIEW_ON: { return "Image-View-On"; } break; + case CEC::CEC_OPCODE_TEXT_VIEW_ON: { return "Text-View-On"; } break; + case CEC::CEC_OPCODE_INACTIVE_SOURCE: { return "Inactive-Source"; } break; + case CEC::CEC_OPCODE_REQUEST_ACTIVE_SOURCE: { return "Request-Active-Source"; } break; + case CEC::CEC_OPCODE_ROUTING_CHANGE: { return "Routing-Change"; } break; + case CEC::CEC_OPCODE_ROUTING_INFORMATION: { return "Routing-Information"; } break; + case CEC::CEC_OPCODE_SET_STREAM_PATH: { return "Set-Stream-Path"; } break; + case CEC::CEC_OPCODE_STANDBY: { return "Standby"; } break; + case CEC::CEC_OPCODE_RECORD_OFF: { return "Record-Off"; } break; + case CEC::CEC_OPCODE_RECORD_ON: { return "Record-On"; } break; + case CEC::CEC_OPCODE_RECORD_STATUS: { return "Record-Status"; } break; + case CEC::CEC_OPCODE_RECORD_TV_SCREEN: { return "Record-TV-Screen"; } break; + case CEC::CEC_OPCODE_CLEAR_ANALOGUE_TIMER: { return "Clear-Analogue-Timer"; } break; + case CEC::CEC_OPCODE_CLEAR_DIGITAL_TIMER: { return "Clear-Digital-Timer"; } break; + case CEC::CEC_OPCODE_CLEAR_EXTERNAL_TIMER: { return "Clear-External-Timer"; } break; + case CEC::CEC_OPCODE_SET_ANALOGUE_TIMER: { return "Set-Analogue-Timer"; } break; + case CEC::CEC_OPCODE_SET_DIGITAL_TIMER: { return "Set-Digital-Timer"; } break; + case CEC::CEC_OPCODE_SET_EXTERNAL_TIMER: { return "Set-External-Timer"; } break; + case CEC::CEC_OPCODE_SET_TIMER_PROGRAM_TITLE: { return "Set-Timer-Program-Title"; } break; + case CEC::CEC_OPCODE_TIMER_CLEARED_STATUS: { return "Timer-Cleared-Status"; } break; + case CEC::CEC_OPCODE_TIMER_STATUS: { return "Timer-Status"; } break; + case CEC::CEC_OPCODE_CEC_VERSION: { return "CEC-Version"; } break; + case CEC::CEC_OPCODE_GET_CEC_VERSION: { return "Get-CEC-Version"; } break; + case CEC::CEC_OPCODE_GIVE_PHYSICAL_ADDRESS: { return "Give-Physical-Address"; } break; + case CEC::CEC_OPCODE_GET_MENU_LANGUAGE: { return "Get-Menu-Language"; } break; + case CEC::CEC_OPCODE_REPORT_PHYSICAL_ADDRESS: { return "Report-Physical-Address"; } break; + case CEC::CEC_OPCODE_SET_MENU_LANGUAGE: { return "Set-Menu-Language"; } break; + case CEC::CEC_OPCODE_DECK_CONTROL: { return "Deck-Control"; } break; + case CEC::CEC_OPCODE_DECK_STATUS: { return "Deck-Status"; } break; + case CEC::CEC_OPCODE_GIVE_DECK_STATUS: { return "Give-Deck-Status"; } break; + case CEC::CEC_OPCODE_PLAY: { return "Play"; } break; + case CEC::CEC_OPCODE_GIVE_TUNER_DEVICE_STATUS: { return "Give-Tuner-Device-Status"; } break; + case CEC::CEC_OPCODE_SELECT_ANALOGUE_SERVICE: { return "Select-Analogue-Service"; } break; + case CEC::CEC_OPCODE_SELECT_DIGITAL_SERVICE: { return "Select-Digital-Service"; } break; + case CEC::CEC_OPCODE_TUNER_DEVICE_STATUS: { return "Tuner-Device-Status"; } break; + case CEC::CEC_OPCODE_TUNER_STEP_DECREMENT: { return "Tuner-Step-Decrement"; } break; + case CEC::CEC_OPCODE_TUNER_STEP_INCREMENT: { return "Tuner-Step-Increment"; } break; + case CEC::CEC_OPCODE_DEVICE_VENDOR_ID: { return "Device-Vendor-ID"; } break; + case CEC::CEC_OPCODE_GIVE_DEVICE_VENDOR_ID: { return "Give-Device-Vendor-ID"; } break; + case CEC::CEC_OPCODE_VENDOR_COMMAND: { return "Vendor-Command"; } break; + case CEC::CEC_OPCODE_VENDOR_COMMAND_WITH_ID: { return "Vendor-Command-With-ID"; } break; + case CEC::CEC_OPCODE_VENDOR_REMOTE_BUTTON_DOWN: { return "Vendor-Remote-Button-Down"; } break; + case CEC::CEC_OPCODE_VENDOR_REMOTE_BUTTON_UP: { return "Vendor-Remote-Button-Up"; } break; + case CEC::CEC_OPCODE_SET_OSD_STRING: { return "Set-OSD-String"; } break; + case CEC::CEC_OPCODE_GIVE_OSD_NAME: { return "Give-OSD-Name"; } break; + case CEC::CEC_OPCODE_SET_OSD_NAME: { return "Set-OSD-Name"; } break; + case CEC::CEC_OPCODE_MENU_REQUEST: { return "Menu-Request"; } break; + case CEC::CEC_OPCODE_MENU_STATUS: { return "Menu-Status"; } break; + case CEC::CEC_OPCODE_USER_CONTROL_PRESSED: { return "User-Control-Pressed"; } break; + case CEC::CEC_OPCODE_USER_CONTROL_RELEASE: { return "User-Control-Release"; } break; + case CEC::CEC_OPCODE_GIVE_DEVICE_POWER_STATUS: { return "Give-Device-Power-Status"; } break; + case CEC::CEC_OPCODE_REPORT_POWER_STATUS: { return "Report-Power-Status"; } break; + case CEC::CEC_OPCODE_FEATURE_ABORT: { return "Feature-Abort"; } break; + case CEC::CEC_OPCODE_ABORT: { return "Abort"; } break; + case CEC::CEC_OPCODE_GIVE_AUDIO_STATUS: { return "Give-Audio-Status"; } break; + case CEC::CEC_OPCODE_GIVE_SYSTEM_AUDIO_MODE_STATUS: { return "Give-System-Audio-Mode-Status"; } break; + case CEC::CEC_OPCODE_REPORT_AUDIO_STATUS: { return "Report-Audio-Status"; } break; + case CEC::CEC_OPCODE_SET_SYSTEM_AUDIO_MODE: { return "Set-System-Audio-Mode"; } break; + case CEC::CEC_OPCODE_SYSTEM_AUDIO_MODE_REQUEST: { return "System-Audio-Mode-Request"; } break; + case CEC::CEC_OPCODE_SYSTEM_AUDIO_MODE_STATUS: { return "System-Audio-Mode-Status"; } break; + case CEC::CEC_OPCODE_SET_AUDIO_RATE: { return "Set-Audio-Rate"; } break; + case CEC::CEC_OPCODE_START_ARC: { return "Start-Arc"; } break; + case CEC::CEC_OPCODE_REPORT_ARC_STARTED: { return "Report-Arc-Started"; } break; + case CEC::CEC_OPCODE_REPORT_ARC_ENDED: { return "Report-Arc-Ended"; } break; + case CEC::CEC_OPCODE_REQUEST_ARC_START: { return "Request-Arc-Start"; } break; + case CEC::CEC_OPCODE_REQUEST_ARC_END: { return "Request-Arc-End"; } break; + case CEC::CEC_OPCODE_END_ARC: { return "End-Arc"; } break; + case CEC::CEC_OPCODE_CDC: { return "CDC"; } break; + case CEC::CEC_OPCODE_NONE: { return "None"; } break; + } +#endif // HAVE_LIBCEC + + return "Unknown"; + +} // getOpCodeString + +std::string CECInput::getKeyCodeString(const unsigned int _keyCode) +{ + +#ifdef HAVE_LIBCEC + switch(_keyCode) + { + case CEC::CEC_USER_CONTROL_CODE_SELECT: { return "Select"; } break; + case CEC::CEC_USER_CONTROL_CODE_UP: { return "Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_DOWN: { return "Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_LEFT: { return "Left"; } break; + case CEC::CEC_USER_CONTROL_CODE_RIGHT: { return "Right"; } break; + case CEC::CEC_USER_CONTROL_CODE_RIGHT_UP: { return "Right-Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_RIGHT_DOWN: { return "Right-Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_LEFT_UP: { return "Left-Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_LEFT_DOWN: { return "Left-Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_ROOT_MENU: { return "Root-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_SETUP_MENU: { return "Setup-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_CONTENTS_MENU: { return "Contents-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_FAVORITE_MENU: { return "Favorite-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_EXIT: { return "Exit"; } break; + case CEC::CEC_USER_CONTROL_CODE_TOP_MENU: { return "Top-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_DVD_MENU: { return "DVD-Menu"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER_ENTRY_MODE: { return "Number-Entry-Mode"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER11: { return "Number11"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER12: { return "Number12"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER0: { return "Number0"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER1: { return "Number1"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER2: { return "Number2"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER3: { return "Number3"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER4: { return "Number4"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER5: { return "Number5"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER6: { return "Number6"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER7: { return "Number7"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER8: { return "Number8"; } break; + case CEC::CEC_USER_CONTROL_CODE_NUMBER9: { return "Number9"; } break; + case CEC::CEC_USER_CONTROL_CODE_DOT: { return "Dot"; } break; + case CEC::CEC_USER_CONTROL_CODE_ENTER: { return "Enter"; } break; + case CEC::CEC_USER_CONTROL_CODE_CLEAR: { return "Clear"; } break; + case CEC::CEC_USER_CONTROL_CODE_NEXT_FAVORITE: { return "Next-Favorite"; } break; + case CEC::CEC_USER_CONTROL_CODE_CHANNEL_UP: { return "Channel-Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_CHANNEL_DOWN: { return "Channel-Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL: { return "Previous-Channel"; } break; + case CEC::CEC_USER_CONTROL_CODE_SOUND_SELECT: { return "Sound-Select"; } break; + case CEC::CEC_USER_CONTROL_CODE_INPUT_SELECT: { return "Input-Select"; } break; + case CEC::CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION: { return "Display-Information"; } break; + case CEC::CEC_USER_CONTROL_CODE_HELP: { return "Help"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAGE_UP: { return "Page-Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAGE_DOWN: { return "Page-Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_POWER: { return "Power"; } break; + case CEC::CEC_USER_CONTROL_CODE_VOLUME_UP: { return "Volume-Up"; } break; + case CEC::CEC_USER_CONTROL_CODE_VOLUME_DOWN: { return "Volume-Down"; } break; + case CEC::CEC_USER_CONTROL_CODE_MUTE: { return "Mute"; } break; + case CEC::CEC_USER_CONTROL_CODE_PLAY: { return "Play"; } break; + case CEC::CEC_USER_CONTROL_CODE_STOP: { return "Stop"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAUSE: { return "Pause"; } break; + case CEC::CEC_USER_CONTROL_CODE_RECORD: { return "Record"; } break; + case CEC::CEC_USER_CONTROL_CODE_REWIND: { return "Rewind"; } break; + case CEC::CEC_USER_CONTROL_CODE_FAST_FORWARD: { return "Fast-Forward"; } break; + case CEC::CEC_USER_CONTROL_CODE_EJECT: { return "Eject"; } break; + case CEC::CEC_USER_CONTROL_CODE_FORWARD: { return "Forward"; } break; + case CEC::CEC_USER_CONTROL_CODE_BACKWARD: { return "Backward"; } break; + case CEC::CEC_USER_CONTROL_CODE_STOP_RECORD: { return "Stop-Record"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAUSE_RECORD: { return "Pause-Record"; } break; + case CEC::CEC_USER_CONTROL_CODE_ANGLE: { return "Angle"; } break; + case CEC::CEC_USER_CONTROL_CODE_SUB_PICTURE: { return "Sub-Picture"; } break; + case CEC::CEC_USER_CONTROL_CODE_VIDEO_ON_DEMAND: { return "Video-On-Demand"; } break; + case CEC::CEC_USER_CONTROL_CODE_ELECTRONIC_PROGRAM_GUIDE: { return "Electronic-Program-Guide"; } break; + case CEC::CEC_USER_CONTROL_CODE_TIMER_PROGRAMMING: { return "Timer-Programming"; } break; + case CEC::CEC_USER_CONTROL_CODE_INITIAL_CONFIGURATION: { return "Initial-Configuration"; } break; + case CEC::CEC_USER_CONTROL_CODE_SELECT_BROADCAST_TYPE: { return "Select-Broadcast-Type"; } break; + case CEC::CEC_USER_CONTROL_CODE_SELECT_SOUND_PRESENTATION: { return "Select-Sound-Presentation"; } break; + case CEC::CEC_USER_CONTROL_CODE_PLAY_FUNCTION: { return "Play-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION: { return "Pause-Play-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_RECORD_FUNCTION: { return "Record-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_PAUSE_RECORD_FUNCTION: { return "Pause-Record-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_STOP_FUNCTION: { return "Stop-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_MUTE_FUNCTION: { return "Mute-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_RESTORE_VOLUME_FUNCTION: { return "Restore-Volume-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_TUNE_FUNCTION: { return "Tune-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_SELECT_MEDIA_FUNCTION: { return "Select-Media-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_SELECT_AV_INPUT_FUNCTION: { return "Select-AV-Input-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_SELECT_AUDIO_INPUT_FUNCTION: { return "Select-Audio-Input-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_POWER_TOGGLE_FUNCTION: { return "Power-Toggle-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_POWER_OFF_FUNCTION: { return "Power-Off-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION: { return "Power-On-Function"; } break; + case CEC::CEC_USER_CONTROL_CODE_F1_BLUE: { return "F1-Blue"; } break; + case CEC::CEC_USER_CONTROL_CODE_F2_RED: { return "F2-Red"; } break; + case CEC::CEC_USER_CONTROL_CODE_F3_GREEN: { return "F3-Green"; } break; + case CEC::CEC_USER_CONTROL_CODE_F4_YELLOW: { return "F4-Yellow"; } break; + case CEC::CEC_USER_CONTROL_CODE_F5: { return "F5"; } break; + case CEC::CEC_USER_CONTROL_CODE_DATA: { return "Data"; } break; + case CEC::CEC_USER_CONTROL_CODE_AN_RETURN: { return "AN-Return"; } break; + case CEC::CEC_USER_CONTROL_CODE_AN_CHANNELS_LIST: { return "AN-Channels-List"; } break; + } +#endif // HAVE_LIBCEC + + return "Unknown"; + +} // getKeyCodeString diff --git a/es-core/src/CECInput.h b/es-core/src/CECInput.h index f19b946eac..b752c50f05 100644 --- a/es-core/src/CECInput.h +++ b/es-core/src/CECInput.h @@ -2,25 +2,29 @@ #ifndef ES_CORE_CECINPUT_H #define ES_CORE_CECINPUT_H +#include + namespace CEC { class ICECAdapter; } -class Window; class CECInput { public: - ~CECInput(); - - static void init(); - static void deinit(); + static void init (); + static void deinit (); + static std::string getAlertTypeString(const unsigned int _type); + static std::string getOpCodeString (const unsigned int _opCode); + static std::string getKeyCodeString (const unsigned int _keyCode); private: - CECInput(); - static CECInput* sInstance; + CECInput(); + ~CECInput(); + + static CECInput* sInstance; CEC::ICECAdapter* mlibCEC; -}; +}; // CECInput #endif // ES_CORE_CECINPUT_H diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index 424df2fd45..c5c299fff6 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -181,7 +181,14 @@ void InputConfig::writeToXML(pugi::xml_node& parent) { cfg.append_attribute("type") = "keyboard"; cfg.append_attribute("deviceName") = "Keyboard"; - }else{ + } + else if(mDeviceId == DEVICE_CEC) + { + cfg.append_attribute("type") = "cec"; + cfg.append_attribute("deviceName") = "CEC"; + } + else + { cfg.append_attribute("type") = "joystick"; cfg.append_attribute("deviceName") = mDeviceName.c_str(); } diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index e80b89e18d..f3f1cbf055 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -2,9 +2,7 @@ #ifndef ES_CORE_INPUT_CONFIG_H #define ES_CORE_INPUT_CONFIG_H -#ifdef HAVE_LIBCEC -#include -#endif // HAVE_LIBCEC +#include #include #include #include @@ -63,104 +61,7 @@ struct Input std::string getCECButtonName(int keycode) { - -#ifdef HAVE_LIBCEC - switch(keycode) - { - case CEC::CEC_USER_CONTROL_CODE_SELECT: { return "Select"; } break; - case CEC::CEC_USER_CONTROL_CODE_UP: { return "Up"; } break; - case CEC::CEC_USER_CONTROL_CODE_DOWN: { return "Down"; } break; - case CEC::CEC_USER_CONTROL_CODE_LEFT: { return "Left"; } break; - case CEC::CEC_USER_CONTROL_CODE_RIGHT: { return "Right"; } break; - case CEC::CEC_USER_CONTROL_CODE_RIGHT_UP: { return "Right-Up"; } break; - case CEC::CEC_USER_CONTROL_CODE_RIGHT_DOWN: { return "Left-Down"; } break; - case CEC::CEC_USER_CONTROL_CODE_LEFT_UP: { return "Left-Up"; } break; - case CEC::CEC_USER_CONTROL_CODE_LEFT_DOWN: { return "Left-Down"; } break; - case CEC::CEC_USER_CONTROL_CODE_ROOT_MENU: { return "Root-Menu"; } break; - case CEC::CEC_USER_CONTROL_CODE_SETUP_MENU: { return "Setup-Menu"; } break; - case CEC::CEC_USER_CONTROL_CODE_CONTENTS_MENU: { return "Contents-Menu"; } break; - case CEC::CEC_USER_CONTROL_CODE_FAVORITE_MENU: { return "Favorite-Menu"; } break; - case CEC::CEC_USER_CONTROL_CODE_EXIT: { return "Exit"; } break; - case CEC::CEC_USER_CONTROL_CODE_TOP_MENU: { return "Top-Menu"; } break; - case CEC::CEC_USER_CONTROL_CODE_DVD_MENU: { return "DVD-Menu"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER_ENTRY_MODE: { return "Number-Entry-Mode"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER11: { return "Number 11"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER12: { return "Number 12"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER0: { return "Number 0"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER1: { return "Number 1"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER2: { return "Number 2"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER3: { return "Number 3"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER4: { return "Number 4"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER5: { return "Number 5"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER6: { return "Number 6"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER7: { return "Number 7"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER8: { return "Number 8"; } break; - case CEC::CEC_USER_CONTROL_CODE_NUMBER9: { return "Number 9"; } break; - case CEC::CEC_USER_CONTROL_CODE_DOT: { return "Dot"; } break; - case CEC::CEC_USER_CONTROL_CODE_ENTER: { return "Enter"; } break; - case CEC::CEC_USER_CONTROL_CODE_CLEAR: { return "Clear"; } break; - case CEC::CEC_USER_CONTROL_CODE_NEXT_FAVORITE: { return "Next-Favorite"; } break; - case CEC::CEC_USER_CONTROL_CODE_CHANNEL_UP: { return "Channel-Up"; } break; - case CEC::CEC_USER_CONTROL_CODE_CHANNEL_DOWN: { return "Channel-Down"; } break; - case CEC::CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL: { return "Previous-Channel"; } break; - case CEC::CEC_USER_CONTROL_CODE_SOUND_SELECT: { return "Sound-Select"; } break; - case CEC::CEC_USER_CONTROL_CODE_INPUT_SELECT: { return "Input-Select"; } break; - case CEC::CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION: { return "Display-Information"; } break; - case CEC::CEC_USER_CONTROL_CODE_HELP: { return "Help"; } break; - case CEC::CEC_USER_CONTROL_CODE_PAGE_UP: { return "Page-Up"; } break; - case CEC::CEC_USER_CONTROL_CODE_PAGE_DOWN: { return "Page-Down"; } break; - case CEC::CEC_USER_CONTROL_CODE_POWER: { return "Power"; } break; - case CEC::CEC_USER_CONTROL_CODE_VOLUME_UP: { return "Volume-Up"; } break; - case CEC::CEC_USER_CONTROL_CODE_VOLUME_DOWN: { return "Volume-Down"; } break; - case CEC::CEC_USER_CONTROL_CODE_MUTE: { return "Mute"; } break; - case CEC::CEC_USER_CONTROL_CODE_PLAY: { return "Play"; } break; - case CEC::CEC_USER_CONTROL_CODE_STOP: { return "Stop"; } break; - case CEC::CEC_USER_CONTROL_CODE_PAUSE: { return "Pause"; } break; - case CEC::CEC_USER_CONTROL_CODE_RECORD: { return "Record"; } break; - case CEC::CEC_USER_CONTROL_CODE_REWIND: { return "Rewind"; } break; - case CEC::CEC_USER_CONTROL_CODE_FAST_FORWARD: { return "Fast-Forward"; } break; - case CEC::CEC_USER_CONTROL_CODE_EJECT: { return "Eject"; } break; - case CEC::CEC_USER_CONTROL_CODE_FORWARD: { return "Forward"; } break; - case CEC::CEC_USER_CONTROL_CODE_BACKWARD: { return "Backward"; } break; - case CEC::CEC_USER_CONTROL_CODE_STOP_RECORD: { return "Stop-Record"; } break; - case CEC::CEC_USER_CONTROL_CODE_PAUSE_RECORD: { return "Pause-Record"; } break; - case CEC::CEC_USER_CONTROL_CODE_ANGLE: { return "Angle"; } break; - case CEC::CEC_USER_CONTROL_CODE_SUB_PICTURE: { return "Sub-Picture"; } break; - case CEC::CEC_USER_CONTROL_CODE_VIDEO_ON_DEMAND: { return "Video-On-Demand"; } break; - case CEC::CEC_USER_CONTROL_CODE_ELECTRONIC_PROGRAM_GUIDE: { return "Electronic-Program-Guide"; } break; - case CEC::CEC_USER_CONTROL_CODE_TIMER_PROGRAMMING: { return "Timer-Programming"; } break; - case CEC::CEC_USER_CONTROL_CODE_INITIAL_CONFIGURATION: { return "Initial-Configuration"; } break; - case CEC::CEC_USER_CONTROL_CODE_SELECT_BROADCAST_TYPE: { return "Select-Broadcast-Type"; } break; - case CEC::CEC_USER_CONTROL_CODE_SELECT_SOUND_PRESENTATION: { return "Select-Sound-Presentation"; } break; - case CEC::CEC_USER_CONTROL_CODE_PLAY_FUNCTION: { return "Play-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION: { return "Pause-Play-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_RECORD_FUNCTION: { return "Record-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_PAUSE_RECORD_FUNCTION: { return "Pause-Record-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_STOP_FUNCTION: { return "Stop-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_MUTE_FUNCTION: { return "Mute-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_RESTORE_VOLUME_FUNCTION: { return "Restore-Volume-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_TUNE_FUNCTION: { return "Tune-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_SELECT_MEDIA_FUNCTION: { return "Select-Media-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_SELECT_AV_INPUT_FUNCTION: { return "Select-AV-Input-function"; } break; - case CEC::CEC_USER_CONTROL_CODE_SELECT_AUDIO_INPUT_FUNCTION: { return "Select-Audio-Input-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_POWER_TOGGLE_FUNCTION: { return "Power-Toggle-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_POWER_OFF_FUNCTION: { return "Power-Off-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION: { return "Power-On-Function"; } break; - case CEC::CEC_USER_CONTROL_CODE_F1_BLUE: { return "F1-Blue"; } break; - case CEC::CEC_USER_CONTROL_CODE_F2_RED: { return "F2-Red"; } break; - case CEC::CEC_USER_CONTROL_CODE_F3_GREEN: { return "F3-Green"; } break; - case CEC::CEC_USER_CONTROL_CODE_F4_YELLOW: { return "F4-Yellow"; } break; - case CEC::CEC_USER_CONTROL_CODE_F5: { return "F5"; } break; - case CEC::CEC_USER_CONTROL_CODE_DATA: { return "Data"; } break; - case CEC::CEC_USER_CONTROL_CODE_AN_RETURN: { return "AN-Return"; } break; - case CEC::CEC_USER_CONTROL_CODE_AN_CHANNELS_LIST: { return "AN-Channels-List"; } break; - default: { return "UNKNOWN"; } - } -#else // HAVE_LIBCEC - (void)keycode; -#endif // HAVE_LIBCEC - - return "UNKNOWN"; + return CECInput::getKeyCodeString(keycode); } std::string string() diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index 092e0beeb0..cd7536558f 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -158,6 +158,8 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi std::stringstream ss; if(target->getDeviceId() == DEVICE_KEYBOARD) ss << "KEYBOARD"; + else if(target->getDeviceId() == DEVICE_CEC) + ss << "CEC"; else ss << "GAMEPAD " << (target->getDeviceId() + 1); mSubtitle1 = std::make_shared(mWindow, strToUpper(ss.str()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, ALIGN_CENTER); From f29452e533ff3148660b12d825c092a0b5be1c00 Mon Sep 17 00:00:00 2001 From: pjft Date: Fri, 1 Dec 2017 17:23:28 +0000 Subject: [PATCH 218/603] Fixes favorites crashing when removing last entry Regression somewhere down the line. --- es-app/src/views/gamelist/BasicGameListView.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index e4428c1ccd..d4803edd02 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -111,7 +111,7 @@ void BasicGameListView::remove(FileData *game, bool deleteFile) { std::vector siblings = parent->getChildrenListToDisplay(); auto gameIter = std::find(siblings.cbegin(), siblings.cend(), game); - unsigned int gamePos = (int)std::distance(siblings.cbegin(), gameIter); + int gamePos = (int)std::distance(siblings.cbegin(), gameIter); if (gameIter != siblings.cend()) { if ((gamePos + 1) < siblings.size()) From 11b8dbfc43deef3af5806624e6685552f1beb568 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Wed, 22 Nov 2017 22:01:12 +0100 Subject: [PATCH 219/603] Replaced boost::posix_time with Utils::Time --- es-app/src/FileData.cpp | 5 +- es-app/src/FileSorts.cpp | 14 +- es-app/src/MetaData.cpp | 11 - es-app/src/MetaData.h | 4 +- es-app/src/scrapers/GamesDBScraper.cpp | 6 +- es-core/CMakeLists.txt | 2 + es-core/src/Util.cpp | 11 - es-core/src/Util.h | 3 - es-core/src/components/DateTimeComponent.cpp | 73 +++-- es-core/src/components/DateTimeComponent.h | 6 +- es-core/src/utils/TimeUtil.cpp | 286 +++++++++++++++++++ es-core/src/utils/TimeUtil.h | 78 +++++ 12 files changed, 413 insertions(+), 86 deletions(-) create mode 100644 es-core/src/utils/TimeUtil.cpp create mode 100644 es-core/src/utils/TimeUtil.h diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 0a26c21ac6..7417bb7d4d 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -1,5 +1,6 @@ #include "FileData.h" +#include "utils/TimeUtil.h" #include "AudioManager.h" #include "CollectionSystemManager.h" #include "FileFilterIndex.h" @@ -11,7 +12,6 @@ #include "VolumeControl.h" #include "Window.h" #include -#include #include namespace fs = boost::filesystem; @@ -285,8 +285,7 @@ void FileData::launchGame(Window* window) gameToUpdate->metadata.set("playcount", std::to_string(static_cast(timesPlayed))); //update last played time - boost::posix_time::ptime time = boost::posix_time::second_clock::universal_time(); - gameToUpdate->metadata.setTime("lastplayed", time); + gameToUpdate->metadata.set("lastplayed", Utils::Time::DateTime(Utils::Time::now())); CollectionSystemManager::get()->refreshCollectionSystems(gameToUpdate); } diff --git a/es-app/src/FileSorts.cpp b/es-app/src/FileSorts.cpp index e99f26decf..2c4cac1697 100644 --- a/es-app/src/FileSorts.cpp +++ b/es-app/src/FileSorts.cpp @@ -65,15 +65,9 @@ namespace FileSorts bool compareLastPlayed(const FileData* file1, const FileData* file2) { - //only games have lastplayed metadata - // since it's stored as a POSIX string (YYYYMMDDTHHMMSS,fffffffff), we can compare as a string + // since it's stored as an ISO string (YYYYMMDDTHHMMSS), we can compare as a string // as it's a lot faster than the time casts and then time comparisons - if(file1->metadata.getType() == GAME_METADATA && file2->metadata.getType() == GAME_METADATA) - { - return (file1)->metadata.get("lastplayed") < (file2)->metadata.get("lastplayed"); - } - - return false; + return (file1)->metadata.get("lastplayed") < (file2)->metadata.get("lastplayed"); } bool compareNumPlayers(const FileData* file1, const FileData* file2) @@ -83,7 +77,9 @@ namespace FileSorts bool compareReleaseDate(const FileData* file1, const FileData* file2) { - return (file1)->metadata.getTime("releasedate") < (file2)->metadata.getTime("releasedate"); + // since it's stored as an ISO string (YYYYMMDDTHHMMSS), we can compare as a string + // as it's a lot faster than the time casts and then time comparisons + return (file1)->metadata.get("releasedate") < (file2)->metadata.get("releasedate"); } bool compareGenre(const FileData* file1, const FileData* file2) diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 7a1c6563a7..4f79df9fda 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -2,7 +2,6 @@ #include "Log.h" #include "Util.h" -#include #include namespace fs = boost::filesystem; @@ -126,11 +125,6 @@ void MetaDataList::set(const std::string& key, const std::string& value) mWasChanged = true; } -void MetaDataList::setTime(const std::string& key, const boost::posix_time::ptime& time) -{ - set(key, boost::posix_time::to_iso_string(time)); -} - const std::string& MetaDataList::get(const std::string& key) const { return mMap.at(key); @@ -146,11 +140,6 @@ float MetaDataList::getFloat(const std::string& key) const return (float)atof(get(key).c_str()); } -boost::posix_time::ptime MetaDataList::getTime(const std::string& key) const -{ - return string_to_ptime(get(key), "%Y%m%dT%H%M%S%F%q"); -} - bool MetaDataList::isDefault() { const std::vector& mdd = getMDD(); diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 57fd26b7e3..7efdcda41b 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -2,8 +2,8 @@ #ifndef ES_APP_META_DATA_H #define ES_APP_META_DATA_H -#include #include +#include namespace pugi { class xml_node; } @@ -50,12 +50,10 @@ class MetaDataList MetaDataList(MetaDataListType type); void set(const std::string& key, const std::string& value); - void setTime(const std::string& key, const boost::posix_time::ptime& time); //times are internally stored as ISO strings (e.g. boost::posix_time::to_iso_string(ptime)) const std::string& get(const std::string& key) const; int getInt(const std::string& key) const; float getFloat(const std::string& key) const; - boost::posix_time::ptime getTime(const std::string& key) const; bool isDefault(); diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index cc76d8903a..164570e40f 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -1,5 +1,6 @@ #include "scrapers/GamesDBScraper.h" +#include "utils/TimeUtil.h" #include "FileData.h" #include "Log.h" #include "PlatformId.h" @@ -156,10 +157,7 @@ void TheGamesDBRequest::processGame(const pugi::xml_document& xmldoc, std::vecto result.mdl.set("name", game.child("GameTitle").text().get()); result.mdl.set("desc", game.child("Overview").text().get()); - - boost::posix_time::ptime rd = string_to_ptime(game.child("ReleaseDate").text().get(), "%m/%d/%Y"); - result.mdl.setTime("releasedate", rd); - + result.mdl.set("releasedate", Utils::Time::DateTime(Utils::Time::stringToTime(game.child("ReleaseDate").text().get(), "%m/%d/%Y"))); result.mdl.set("developer", game.child("Developer").text().get()); result.mdl.set("publisher", game.child("Publisher").text().get()); result.mdl.set("genre", game.child("Genres").first_child().text().get()); diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 85975edea4..5c140cf263 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -72,6 +72,7 @@ set(CORE_HEADERS # Utils ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.h ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.h # Embedded assets (needed by ResourceManager) ${emulationstation-all_SOURCE_DIR}/data/Resources.h @@ -144,6 +145,7 @@ set(CORE_SOURCES # Utils ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.cpp ) set(EMBEDDED_ASSET_SOURCES diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index 6ff6af612d..3a52d48432 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -3,7 +3,6 @@ #include "platform.h" #include #include -#include #include namespace fs = boost::filesystem; @@ -164,16 +163,6 @@ fs::path makeRelativePath(const fs::path& path, const fs::path& relativeTo, bool return path; } -boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt) -{ - std::istringstream ss(str); - ss.imbue(std::locale(std::locale::classic(), new boost::posix_time::time_input_facet(fmt))); //std::locale handles deleting the facet - boost::posix_time::ptime time; - ss >> time; - - return time; -} - std::string strreplace(std::string str, const std::string& replace, const std::string& with) { size_t pos; diff --git a/es-core/src/Util.h b/es-core/src/Util.h index f48ff0ebb9..526cee99bd 100644 --- a/es-core/src/Util.h +++ b/es-core/src/Util.h @@ -2,7 +2,6 @@ #ifndef ES_CORE_UTIL_H #define ES_CORE_UTIL_H -#include #include std::string strToUpper(const char* from); @@ -23,8 +22,6 @@ boost::filesystem::path makeRelativePath(const boost::filesystem::path& path, co // if allowHome is true, also expands "~/my/path.sfc" to "/home/pi/my/path.sfc" boost::filesystem::path resolvePath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool allowHome); -boost::posix_time::ptime string_to_ptime(const std::string& str, const std::string& fmt = "%Y%m%dT%H%M%S%F%q"); - std::string escapePath(const boost::filesystem::path& path); std::string strreplace(std::string str, const std::string& replace, const std::string& with); diff --git a/es-core/src/components/DateTimeComponent.cpp b/es-core/src/components/DateTimeComponent.cpp index 5fddab9610..aba383f5af 100644 --- a/es-core/src/components/DateTimeComponent.cpp +++ b/es-core/src/components/DateTimeComponent.cpp @@ -3,7 +3,6 @@ #include "resources/Font.h" #include "Renderer.h" #include "Util.h" -#include DateTimeComponent::DateTimeComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), @@ -34,9 +33,9 @@ bool DateTimeComponent::input(InputConfig* config, Input input) mTimeBeforeEdit = mTime; //initialize to now if unset - if(mTime == boost::posix_time::not_a_date_time) + if(mTime.getTime() == Utils::Time::NOT_A_DATE_TIME) { - mTime = boost::posix_time::ptime(boost::gregorian::day_clock::local_day()); + mTime = Utils::Time::now(); updateTextCache(); } } @@ -62,39 +61,43 @@ bool DateTimeComponent::input(InputConfig* config, Input input) if(incDir != 0) { - tm new_tm = boost::posix_time::to_tm(mTime); + tm new_tm = mTime; if(mEditIndex == 0) { new_tm.tm_mon += incDir; if(new_tm.tm_mon > 11) - new_tm.tm_mon = 11; - else if(new_tm.tm_mon < 0) new_tm.tm_mon = 0; + else if(new_tm.tm_mon < 0) + new_tm.tm_mon = 11; - }else if(mEditIndex == 1) + } + else if(mEditIndex == 1) { + const int days_in_month = Utils::Time::daysInMonth(new_tm.tm_year + 1900, new_tm.tm_mon + 1); new_tm.tm_mday += incDir; - int days_in_month = mTime.date().end_of_month().day().as_number(); + if(new_tm.tm_mday > days_in_month) - new_tm.tm_mday = days_in_month; - else if(new_tm.tm_mday < 1) new_tm.tm_mday = 1; + else if(new_tm.tm_mday < 1) + new_tm.tm_mday = days_in_month; - }else if(mEditIndex == 2) + } + else if(mEditIndex == 2) { new_tm.tm_year += incDir; + if(new_tm.tm_year < 0) new_tm.tm_year = 0; } //validate day - int days_in_month = boost::gregorian::date((unsigned short)new_tm.tm_year + 1900, (unsigned short)new_tm.tm_mon + 1, 1).end_of_month().day().as_number(); + const int days_in_month = Utils::Time::daysInMonth(new_tm.tm_year + 1900, new_tm.tm_mon + 1); if(new_tm.tm_mday > days_in_month) new_tm.tm_mday = days_in_month; - mTime = boost::posix_time::ptime_from_tm(new_tm); + mTime = new_tm; updateTextCache(); return true; @@ -166,13 +169,13 @@ void DateTimeComponent::render(const Transform4x4f& parentTrans) void DateTimeComponent::setValue(const std::string& val) { - mTime = string_to_ptime(val); + mTime = val; updateTextCache(); } std::string DateTimeComponent::getValue() const { - return boost::posix_time::to_iso_string(mTime); + return mTime; } DateTimeComponent::DisplayMode DateTimeComponent::getCurrentDisplayMode() const @@ -203,40 +206,32 @@ std::string DateTimeComponent::getDisplayString(DisplayMode mode) const case DISP_RELATIVE_TO_NOW: { //relative time - using namespace boost::posix_time; - - if(mTime == not_a_date_time) + if(mTime.getTime() == 0) return "never"; - ptime now = second_clock::universal_time(); - time_duration dur = now - mTime; + Utils::Time::DateTime now(Utils::Time::now()); + Utils::Time::Duration dur(now.getTime() - mTime.getTime()); - if(dur < seconds(2)) - return "just now"; - if(dur < seconds(60)) - return std::to_string((long long)dur.seconds()) + " secs ago"; - if(dur < minutes(60)) - return std::to_string((long long)dur.minutes()) + " min" + (dur < minutes(2) ? "" : "s") + " ago"; - if(dur < hours(24)) - return std::to_string((long long)dur.hours()) + " hour" + (dur < hours(2) ? "" : "s") + " ago"; + char buf[64]; - long long days = (long long)(dur.hours() / 24); - return std::to_string(days) + " day" + (days < 2 ? "" : "s") + " ago"; + if(dur.getDays() > 0) + sprintf(buf, "%d day%s ago", dur.getDays(), (dur.getDays() > 1) ? "s" : ""); + else if(dur.getHours() > 0) + sprintf(buf, "%d hour%s ago", dur.getHours(), (dur.getHours() > 1) ? "s" : ""); + else if(dur.getMinutes() > 0) + sprintf(buf, "%d minute%s ago", dur.getMinutes(), (dur.getMinutes() > 1) ? "s" : ""); + else + sprintf(buf, "%d second%s ago", dur.getSeconds(), (dur.getSeconds() > 1) ? "s" : ""); + + return std::string(buf); } break; } - if(mTime == boost::posix_time::not_a_date_time) + if(mTime.getTime() == 0) return "unknown"; - boost::posix_time::time_facet* facet = new boost::posix_time::time_facet(); - facet->format(fmt.c_str()); - std::locale loc(std::locale::classic(), facet); - - std::stringstream ss; - ss.imbue(loc); - ss << mTime; - return ss.str(); + return Utils::Time::timeToString(mTime, fmt); } std::shared_ptr DateTimeComponent::getFont() const diff --git a/es-core/src/components/DateTimeComponent.h b/es-core/src/components/DateTimeComponent.h index 29e940c676..8e629c4917 100644 --- a/es-core/src/components/DateTimeComponent.h +++ b/es-core/src/components/DateTimeComponent.h @@ -2,8 +2,8 @@ #ifndef ES_CORE_COMPONENTS_DATE_TIME_COMPONENT_H #define ES_CORE_COMPONENTS_DATE_TIME_COMPONENT_H +#include "utils/TimeUtil.h" #include "GuiComponent.h" -#include class TextCache; @@ -49,8 +49,8 @@ class DateTimeComponent : public GuiComponent void updateTextCache(); - boost::posix_time::ptime mTime; - boost::posix_time::ptime mTimeBeforeEdit; + Utils::Time::DateTime mTime; + Utils::Time::DateTime mTimeBeforeEdit; bool mEditing; int mEditIndex; diff --git a/es-core/src/utils/TimeUtil.cpp b/es-core/src/utils/TimeUtil.cpp new file mode 100644 index 0000000000..39f3894640 --- /dev/null +++ b/es-core/src/utils/TimeUtil.cpp @@ -0,0 +1,286 @@ +#include "utils/TimeUtil.h" + +#include + +namespace Utils +{ + namespace Time + { + DateTime::DateTime() + { + mTime = 0; + mTimeStruct = { 0, 0, 0, 1, 0, 0, 0, 0, -1 }; + mIsoString = "00000000T000000"; + + } // Time + + DateTime::DateTime(const time_t& _time) + { + setTime(_time); + + } // Time + + DateTime::DateTime(const tm& _timeStruct) + { + setTimeStruct(_timeStruct); + + } // Time + + DateTime::DateTime(const std::string& _isoString) + { + setIsoString(_isoString); + + } // Time + + DateTime::~DateTime() + { + + } // ~Time + + void DateTime::setTime(const time_t& _time) + { + if(_time < 0) mTime = 0; + else mTime = _time; + mTimeStruct = *localtime(&mTime); + mIsoString = timeToString(mTime); + + } // setTime + + void DateTime::setTimeStruct(const tm& _timeStruct) + { + setTime(mktime((tm*)&_timeStruct)); + + } // setTimeStruct + + void DateTime::setIsoString(const std::string& _isoString) + { + setTime(stringToTime(_isoString)); + + } // setIsoString + + Duration::Duration(const time_t& _time) + { + mTotalSeconds = (unsigned int)_time; + mDays = (mTotalSeconds - (mTotalSeconds % (60*60*24))) / (60*60*24); + mHours = ((mTotalSeconds % (60*60*24)) - (mTotalSeconds % (60*60))) / (60*60); + mMinutes = ((mTotalSeconds % (60*60)) - (mTotalSeconds % (60))) / 60; + mSeconds = mTotalSeconds % 60; + + } // Duration + + Duration::~Duration() + { + + } // ~Duration + + time_t now() + { + time_t time; + ::time(&time); + return time; + + } // now + + time_t stringToTime(const std::string& _string, const std::string& _format) + { + const char* s = _string.c_str(); + const char* f = _format.c_str(); + tm timeStruct = { 0, 0, 0, 1, 0, 0, 0, 0, -1 }; + int parsedChars = 0; + + if(_string == "not-a-date-time") + return mktime(&timeStruct); + + while(*f && (parsedChars < _string.length())) + { + if(*f == '%') + { + ++f; + + switch(*f++) + { + case 'Y': // The year [1970,xxxx] + { + if((parsedChars + 4) <= _string.length()) + { + timeStruct.tm_year = (*s++ - '0') * 1000; + timeStruct.tm_year += (*s++ - '0') * 100; + timeStruct.tm_year += (*s++ - '0') * 10; + timeStruct.tm_year += (*s++ - '0'); + if(timeStruct.tm_year >= 1900) + timeStruct.tm_year -= 1900; + } + + parsedChars += 4; + } + break; + + case 'm': // The month number [01,12] + { + if((parsedChars + 2) <= _string.length()) + { + timeStruct.tm_mon = (*s++ - '0') * 10; + timeStruct.tm_mon += (*s++ - '0'); + if(timeStruct.tm_mon >= 1) + timeStruct.tm_mon -= 1; + } + + parsedChars += 2; + } + break; + + case 'd': // The day of the month [01,31] + { + if((parsedChars + 2) <= _string.length()) + { + timeStruct.tm_mday = (*s++ - '0') * 10; + timeStruct.tm_mday += (*s++ - '0'); + } + + parsedChars += 2; + } + break; + + case 'H': // The hour (24-hour clock) [00,23] + { + if((parsedChars + 2) <= _string.length()) + { + timeStruct.tm_hour = (*s++ - '0') * 10; + timeStruct.tm_hour += (*s++ - '0'); + } + + parsedChars += 2; + } + break; + + case 'M': // The minute [00,59] + { + if((parsedChars + 2) <= _string.length()) + { + timeStruct.tm_min = (*s++ - '0') * 10; + timeStruct.tm_min += (*s++ - '0'); + } + + parsedChars += 2; + } + break; + + case 'S': // The second [00,59] + { + if((parsedChars + 2) <= _string.length()) + { + timeStruct.tm_sec = (*s++ - '0') * 10; + timeStruct.tm_sec += (*s++ - '0'); + } + + parsedChars += 2; + } + break; + } + } + else + { + ++s; + ++f; + } + } + + return mktime(&timeStruct); + + } // stringToTime + + std::string timeToString(const time_t& _time, const std::string& _format) + { + const char* f = _format.c_str(); + const tm timeStruct = *localtime(&_time); + char buf[256] = { '\0' }; + char* s = buf; + + while(*f) + { + if(*f == '%') + { + ++f; + + switch(*f++) + { + case 'Y': // The year, including the century (1900) + { + const int year = timeStruct.tm_year + 1900; + *s++ = (char)((year - (year % 1000)) / 1000) + '0'; + *s++ = (char)(((year % 1000) - (year % 100)) / 100) + '0'; + *s++ = (char)(((year % 100) - (year % 10)) / 10) + '0'; + *s++ = (char)(year % 10) + '0'; + } + break; + + case 'm': // The month number [00,11] + { + const int mon = timeStruct.tm_mon + 1; + *s++ = (char)(mon / 10) + '0'; + *s++ = (char)(mon % 10) + '0'; + } + break; + + case 'd': // The day of the month [01,31] + { + *s++ = (char)(timeStruct.tm_mday / 10) + '0'; + *s++ = (char)(timeStruct.tm_mday % 10) + '0'; + } + break; + + case 'H': // The hour (24-hour clock) [00,23] + { + *s++ = (char)(timeStruct.tm_hour / 10) + '0'; + *s++ = (char)(timeStruct.tm_hour % 10) + '0'; + } + break; + + case 'M': // The minute [00,59] + { + *s++ = (char)(timeStruct.tm_min / 10) + '0'; + *s++ = (char)(timeStruct.tm_min % 10) + '0'; + } + break; + + case 'S': // The second [00,59] + { + *s++ = (char)(timeStruct.tm_sec / 10) + '0'; + *s++ = (char)(timeStruct.tm_sec % 10) + '0'; + } + break; + } + } + else + { + *s++ = *f++; + } + + *s = '\0'; + } + + return std::string(buf); + + } // timeToString + + int daysInMonth(const int _year, const int _month) + { + tm timeStruct = { 0, 0, 0, 0, _month, _year - 1900, 0, 0, -1 }; + mktime(&timeStruct); + + return timeStruct.tm_mday; + + } // daysInMonth + + int daysInYear(const int _year) + { + tm timeStruct = { 0, 0, 0, 0, 0, _year - 1900 + 1, 0, 0, -1 }; + mktime(&timeStruct); + + return timeStruct.tm_yday + 1; + + } // daysInYear + + } // Time:: + +} // Utils:: diff --git a/es-core/src/utils/TimeUtil.h b/es-core/src/utils/TimeUtil.h new file mode 100644 index 0000000000..9b44207b35 --- /dev/null +++ b/es-core/src/utils/TimeUtil.h @@ -0,0 +1,78 @@ +#pragma once +#ifndef ES_CORE_UTILS_TIME_UTIL_H +#define ES_CORE_UTILS_TIME_UTIL_H + +#include + +namespace Utils +{ + namespace Time + { + static int NOT_A_DATE_TIME = 0; + + class DateTime + { + public: + + DateTime(); + DateTime(const time_t& _time); + DateTime(const tm& _timeStruct); + DateTime(const std::string& _isoString); + ~DateTime(); + + const bool operator< (const DateTime& _other) const { return (mTime < _other.mTime); } + const bool operator<= (const DateTime& _other) const { return (mTime <= _other.mTime); } + const bool operator> (const DateTime& _other) const { return (mTime > _other.mTime); } + const bool operator>= (const DateTime& _other) const { return (mTime >= _other.mTime); } + operator time_t () const { return mTime; } + operator tm () const { return mTimeStruct; } + operator std::string() const { return mIsoString; } + + void setTime (const time_t& _time); + const time_t& getTime () const { return mTime; } + void setTimeStruct(const tm& _timeStruct); + const tm& getTimeStruct() const { return mTimeStruct; } + void setIsoString (const std::string& _isoString); + const std::string& getIsoString () const { return mIsoString; } + + private: + + time_t mTime; + tm mTimeStruct; + std::string mIsoString; + + }; // DateTime + + class Duration + { + public: + + Duration(const time_t& _time); + ~Duration(); + + unsigned int getDays () const { return mDays; } + unsigned int getHours () const { return mHours; } + unsigned int getMinutes() const { return mMinutes; } + unsigned int getSeconds() const { return mSeconds; } + + private: + + unsigned int mTotalSeconds; + unsigned int mDays; + unsigned int mHours; + unsigned int mMinutes; + unsigned int mSeconds; + + }; // Duration + + time_t now (); + time_t stringToTime(const std::string& _string, const std::string& _format = "%Y%m%dT%H%M%S"); + std::string timeToString(const time_t& _time, const std::string& _format = "%Y%m%dT%H%M%S"); + int daysInMonth (const int _year, const int _month); + int daysInYear (const int _year); + + } // Time:: + +} // Utils:: + +#endif // ES_CORE_UTILS_TIME_UTIL_H From 4425ea016554ce20fb77df31c157386103703d6e Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 1 Dec 2017 18:42:27 +0100 Subject: [PATCH 220/603] Implement --screensize and --screenoffset --- es-app/src/main.cpp | 41 ++++++++++++++++---- es-core/src/Renderer.h | 6 ++- es-core/src/Renderer_draw_gl.cpp | 5 ++- es-core/src/Renderer_init_sdlgl.cpp | 59 +++++++++++++++-------------- es-core/src/Settings.cpp | 15 +++++++- es-core/src/Window.cpp | 4 +- es-core/src/Window.h | 2 +- 7 files changed, 89 insertions(+), 43 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 16301cd88d..62321c7495 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -29,7 +29,7 @@ namespace fs = boost::filesystem; bool scrape_cmdline = false; -bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height) +bool parseArgs(int argc, char* argv[]) { for(int i = 1; i < argc; i++) { @@ -41,9 +41,37 @@ bool parseArgs(int argc, char* argv[], unsigned int* width, unsigned int* height return false; } - *width = atoi(argv[i + 1]); - *height = atoi(argv[i + 2]); + int width = atoi(argv[i + 1]); + int height = atoi(argv[i + 2]); i += 2; // skip the argument value + Settings::getInstance()->setInt("WindowWidth", width); + Settings::getInstance()->setInt("WindowHeight", height); + }else if(strcmp(argv[i], "--screensize") == 0) + { + if(i >= argc - 2) + { + std::cerr << "Invalid screensize supplied."; + return false; + } + + int width = atoi(argv[i + 1]); + int height = atoi(argv[i + 2]); + i += 2; // skip the argument value + Settings::getInstance()->setInt("ScreenWidth", width); + Settings::getInstance()->setInt("ScreenHeight", height); + }else if(strcmp(argv[i], "--screenoffset") == 0) + { + if(i >= argc - 2) + { + std::cerr << "Invalid screenoffset supplied."; + return false; + } + + int x = atoi(argv[i + 1]); + int y = atoi(argv[i + 2]); + i += 2; // skip the argument value + Settings::getInstance()->setInt("ScreenOffsetX", x); + Settings::getInstance()->setInt("ScreenOffsetY", y); }else if(strcmp(argv[i], "--gamelist-only") == 0) { Settings::getInstance()->setBool("ParseGamelistOnly", true); @@ -182,13 +210,10 @@ int main(int argc, char* argv[]) { srand((unsigned int)time(NULL)); - unsigned int width = 0; - unsigned int height = 0; - std::locale::global(std::locale("C")); boost::filesystem::path::imbue(std::locale()); - if(!parseArgs(argc, argv, &width, &height)) + if(!parseArgs(argc, argv)) return 0; // only show the console on Windows if HideConsole is false @@ -250,7 +275,7 @@ int main(int argc, char* argv[]) if(!scrape_cmdline) { - if(!window.init(width, height)) + if(!window.init()) { LOG(LogError) << "Window failed to initialize!"; return 1; diff --git a/es-core/src/Renderer.h b/es-core/src/Renderer.h index 3a84ba3609..6114163d65 100644 --- a/es-core/src/Renderer.h +++ b/es-core/src/Renderer.h @@ -15,11 +15,15 @@ class Transform4x4f; //Renderer_init_*.cpp has platform-specific renderer initialziation/deinitialziation code. (e.g. the Raspberry Pi sets up dispmanx/OpenGL ES) namespace Renderer { - bool init(int w, int h); + bool init(); void deinit(); + unsigned int getWindowWidth(); + unsigned int getWindowHeight(); unsigned int getScreenWidth(); unsigned int getScreenHeight(); + unsigned int getScreenOffsetX(); + unsigned int getScreenOffsetY(); void buildGLColorArray(GLubyte* ptr, unsigned int color, unsigned int vertCount); diff --git a/es-core/src/Renderer_draw_gl.cpp b/es-core/src/Renderer_draw_gl.cpp index bbadb841e5..9ed671a2b4 100644 --- a/es-core/src/Renderer_draw_gl.cpp +++ b/es-core/src/Renderer_draw_gl.cpp @@ -45,8 +45,9 @@ namespace Renderer { //glScissor starts at the bottom left of the window //so (0, 0, 1, 1) is the bottom left pixel //everything else uses y+ = down, so flip it to be consistent - //rect.pos.y = Renderer::getScreenHeight() - rect.pos.y - rect.size.y; - box.y = Renderer::getScreenHeight() - box.y - box.h; + //also take screen height and offset into account + box.x = Renderer::getScreenOffsetX() + box.x; + box.y = Renderer::getWindowHeight() - Renderer::getScreenOffsetY() - box.y - box.h; //make sure the box fits within clipStack.top(), and clip further accordingly if(clipStack.size()) diff --git a/es-core/src/Renderer_init_sdlgl.cpp b/es-core/src/Renderer_init_sdlgl.cpp index 328267c95b..b8fb9136ed 100644 --- a/es-core/src/Renderer_init_sdlgl.cpp +++ b/es-core/src/Renderer_init_sdlgl.cpp @@ -14,11 +14,19 @@ namespace Renderer { static bool initialCursorState; - unsigned int display_width = 0; - unsigned int display_height = 0; - - unsigned int getScreenWidth() { return display_width; } - unsigned int getScreenHeight() { return display_height; } + unsigned int windowWidth = 0; + unsigned int windowHeight = 0; + unsigned int screenWidth = 0; + unsigned int screenHeight = 0; + unsigned int screenOffsetX = 0; + unsigned int screenOffsetY = 0; + + unsigned int getWindowWidth() { return windowWidth; } + unsigned int getWindowHeight() { return windowHeight; } + unsigned int getScreenWidth() { return screenWidth; } + unsigned int getScreenHeight() { return screenHeight; } + unsigned int getScreenOffsetX() { return screenOffsetX; } + unsigned int getScreenOffsetY() { return screenOffsetY; } SDL_Window* sdlWindow = NULL; SDL_GLContext sdlContext = NULL; @@ -52,14 +60,16 @@ namespace Renderer SDL_DisplayMode dispMode; SDL_GetDesktopDisplayMode(0, &dispMode); - if(display_width == 0) - display_width = dispMode.w; - if(display_height == 0) - display_height = dispMode.h; + windowWidth = Settings::getInstance()->getInt("WindowWidth") ? Settings::getInstance()->getInt("WindowWidth") : dispMode.w; + windowHeight = Settings::getInstance()->getInt("WindowHeight") ? Settings::getInstance()->getInt("WindowHeight") : dispMode.h; + screenWidth = Settings::getInstance()->getInt("ScreenWidth") ? Settings::getInstance()->getInt("ScreenWidth") : windowWidth; + screenHeight = Settings::getInstance()->getInt("ScreenHeight") ? Settings::getInstance()->getInt("ScreenHeight") : windowHeight; + screenOffsetX = Settings::getInstance()->getInt("ScreenOffsetX") ? Settings::getInstance()->getInt("ScreenOffsetX") : 0; + screenOffsetY = Settings::getInstance()->getInt("ScreenOffsetY") ? Settings::getInstance()->getInt("ScreenOffsetY") : 0; sdlWindow = SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, - display_width, display_height, + windowWidth, windowHeight, SDL_WINDOW_OPENGL | (Settings::getInstance()->getBool("Windowed") ? 0 : SDL_WINDOW_FULLSCREEN)); if(sdlWindow == NULL) @@ -113,12 +123,6 @@ namespace Renderer return true; } - void swapBuffers() - { - SDL_GL_SwapWindow(sdlWindow); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - } - void destroySurface() { SDL_GL_DeleteContext(sdlContext); @@ -133,22 +137,15 @@ namespace Renderer SDL_Quit(); } - bool init(int w, int h) + bool init() { - if(w) - display_width = w; - if(h) - display_height = h; - - bool createdSurface = createSurface(); - - if(!createdSurface) + if(!createSurface()) return false; - glViewport(0, 0, display_width, display_height); - + //gotta flip y since y=0 is at the bottom + glViewport(screenOffsetX, windowHeight - screenHeight - screenOffsetY, screenWidth, screenHeight); glMatrixMode(GL_PROJECTION); - glOrtho(0, display_width, display_height, 0, -1.0, 1.0); + glOrtho(0, screenWidth, screenHeight, 0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); @@ -159,4 +156,10 @@ namespace Renderer { destroySurface(); } + + void swapBuffers() + { + SDL_GL_SwapWindow(sdlWindow); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + } }; diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 42d138bfc0..75bf095cde 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -20,7 +20,13 @@ std::vector settings_dont_save { { "ShowExit" }, { "SplashScreen" }, { "VSync" }, - { "Windowed" } + { "Windowed" }, + { "WindowWidth" }, + { "WindowHeight" }, + { "ScreenWidth" }, + { "ScreenHeight" }, + { "ScreenOffsetX" }, + { "ScreenOffsetY" } }; Settings::Settings() @@ -127,6 +133,13 @@ void Settings::setDefaults() mBoolMap["ForceKiosk"] = false; mBoolMap["ForceKid"] = false; mBoolMap["hideQuitMenuOnKidUI"] = false; + + mIntMap["WindowWidth"] = 0; + mIntMap["WindowHeight"] = 0; + mIntMap["ScreenWidth"] = 0; + mIntMap["ScreenHeight"] = 0; + mIntMap["ScreenOffsetX"] = 0; + mIntMap["ScreenOffsetY"] = 0; } template diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index a5a056f12e..bc4267e8bb 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -65,9 +65,9 @@ GuiComponent* Window::peekGui() return mGuiStack.back(); } -bool Window::init(unsigned int width, unsigned int height) +bool Window::init() { - if(!Renderer::init(width, height)) + if(!Renderer::init()) { LOG(LogError) << "Renderer failed to initialize!"; return false; diff --git a/es-core/src/Window.h b/es-core/src/Window.h index c14a28c4ce..0cc6009d03 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -54,7 +54,7 @@ class Window void update(int deltaTime); void render(); - bool init(unsigned int width = 0, unsigned int height = 0); + bool init(); void deinit(); void normalizeNextUpdate(); From 96ac974ecb7cfa485e527a76533a6c7c3b2a84bb Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Mon, 4 Dec 2017 19:35:47 +0000 Subject: [PATCH 221/603] bump version to v2.7.4 --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index bcd6b5b5f1..44d3247525 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -6,12 +6,12 @@ // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 #define PROGRAM_VERSION_MINOR 7 -#define PROGRAM_VERSION_MAINTENANCE 3 -#define PROGRAM_VERSION_STRING "2.7.3rp" +#define PROGRAM_VERSION_MAINTENANCE 4 +#define PROGRAM_VERSION_STRING "2.7.4rp" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,7,3\0" +#define RESOURCE_VERSION_STRING "2,7,4\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE #endif // ES_APP_EMULATION_STATION_H From d1d622bd93321c3c7cc3c3b9d9a0169b32e43bb2 Mon Sep 17 00:00:00 2001 From: Christopher Martin Date: Fri, 22 Dec 2017 14:54:28 -0500 Subject: [PATCH 222/603] fix audio mute during loop --- es-core/src/components/VideoVlcComponent.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index d3ad3ab4fc..94fc0e81bf 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -264,6 +264,10 @@ void VideoVlcComponent::handleLooping() libvlc_state_t state = libvlc_media_player_get_state(mMediaPlayer); if (state == libvlc_Ended) { + if (!Settings::getInstance()->getBool("VideoAudio")) + { + libvlc_audio_set_mute(mMediaPlayer, 1); + } //libvlc_media_player_set_position(mMediaPlayer, 0.0f); libvlc_media_player_set_media(mMediaPlayer, mMedia); libvlc_media_player_play(mMediaPlayer); From 5e8d6b7f45a829e27f40cb019e3a2c3459768f68 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Wed, 29 Nov 2017 20:57:43 +0100 Subject: [PATCH 223/603] Eliminated the need for boost::xpressive, boost::algorithm and boost::variant --- es-app/src/CollectionSystemManager.cpp | 30 +++++++++++-------- es-app/src/FileData.cpp | 4 +-- es-app/src/FileFilterIndex.cpp | 8 ++--- es-app/src/views/UIModeController.h | 1 - es-core/src/ThemeData.cpp | 29 +++++++++--------- es-core/src/ThemeData.h | 29 +++++++++++++++--- es-core/src/Util.cpp | 18 ++++++++--- .../src/components/VideoPlayerComponent.cpp | 4 +-- es-core/src/utils/StringUtil.cpp | 12 ++++++++ es-core/src/utils/StringUtil.h | 2 ++ 10 files changed, 93 insertions(+), 44 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 06a97355b1..1a86eff46b 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -1,6 +1,7 @@ #include "CollectionSystemManager.h" #include "guis/GuiInfoPopup.h" +#include "utils/StringUtil.h" #include "views/gamelist/IGameListView.h" #include "views/ViewController.h" #include "FileData.h" @@ -10,9 +11,7 @@ #include "SystemData.h" #include "ThemeData.h" #include "Util.h" -#include #include -#include #include #include #include @@ -351,26 +350,33 @@ bool CollectionSystemManager::isThemeCustomCollectionCompatible(std::vector systemsInUse = getSystemsFromConfig(); // get folders assigned to custom collections @@ -948,7 +954,7 @@ std::vector CollectionSystemManager::getCollectionsFromConfigFolder std::string filename = file.substr(configPath.string().size()); // need to confirm filename matches config format - if (boost::algorithm::ends_with(filename, ".cfg") && boost::algorithm::starts_with(filename, "custom-") && filename != "custom-.cfg") + if (filename != "custom-.cfg" && Utils::String::startsWith(filename, "custom-") && Utils::String::endsWith(filename, ".cfg")) { filename = filename.substr(7, filename.size()-11); systems.push_back(filename); diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 7417bb7d4d..9ba6c082d4 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -1,5 +1,6 @@ #include "FileData.h" +#include "utils/StringUtil.h" #include "utils/TimeUtil.h" #include "AudioManager.h" #include "CollectionSystemManager.h" @@ -11,7 +12,6 @@ #include "Util.h" #include "VolumeControl.h" #include "Window.h" -#include #include namespace fs = boost::filesystem; @@ -327,7 +327,7 @@ const std::string& CollectionFileData::getName() { if (mDirty) { mCollectionFileName = removeParenthesis(mSourceFileData->metadata.get("name")); - boost::trim(mCollectionFileName); + Utils::String::trim(mCollectionFileName); mCollectionFileName += " [" + strToUpper(mSourceFileData->getSystem()->getName()) + "]"; mDirty = false; } diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index bdef399464..1be1ca3f17 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -1,11 +1,11 @@ #include "FileFilterIndex.h" +#include "utils/StringUtil.h" #include "views/UIModeController.h" #include "FileData.h" #include "Log.h" #include "Settings.h" #include "Util.h" -#include #define UNKNOWN_LABEL "UNKNOWN" #define INCLUDE_UNKNOWN false; @@ -94,7 +94,7 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ case GENRE_FILTER: { key = strToUpper(game->metadata.get("genre")); - boost::trim(key); + Utils::String::trim(key); if (getSecondary && !key.empty()) { std::istringstream f(key); std::string newKey; @@ -121,7 +121,7 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ case PUBDEV_FILTER: { key = strToUpper(game->metadata.get("publisher")); - boost::trim(key); + Utils::String::trim(key); if ((getSecondary && !key.empty()) || (!getSecondary && key.empty())) key = strToUpper(game->metadata.get("developer")); @@ -173,7 +173,7 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ break; } } - boost::trim(key); + Utils::String::trim(key); if (key.empty() || (type == RATINGS_FILTER && key == "0 STARS")) { key = UNKNOWN_LABEL; } diff --git a/es-app/src/views/UIModeController.h b/es-app/src/views/UIModeController.h index 38760cb217..e26d68c2c7 100644 --- a/es-app/src/views/UIModeController.h +++ b/es-app/src/views/UIModeController.h @@ -2,7 +2,6 @@ #ifndef ES_APP_VIEWS_UI_MODE_CONTROLLER_H #define ES_APP_VIEWS_UI_MODE_CONTROLLER_H -//#include "InputConfig.h" #include #include diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 625b1d8b72..6e4168497e 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -6,7 +6,6 @@ #include "platform.h" #include "Settings.h" #include -#include #include std::vector ThemeData::sSupportedViews { { "system" }, { "basic" }, { "detailed" }, { "video" } }; @@ -176,24 +175,24 @@ std::string resolvePath(const char* in, const fs::path& relative) std::map mVariables; -std::string &format_variables(const boost::xpressive::smatch &what) -{ - return mVariables[what[1].str()]; -} - std::string resolvePlaceholders(const char* in) { - if(!in || in[0] == '\0') - return std::string(in); - std::string inStr(in); - - using namespace boost::xpressive; - sregex rex = "${" >> (s1 = +('.' | _w)) >> '}'; - - std::string output = regex_replace(inStr, rex, format_variables); - return output; + if(inStr.empty()) + return inStr; + + const size_t variableBegin = inStr.find("${"); + const size_t variableEnd = inStr.find("}", variableBegin); + + if((variableBegin == std::string::npos) || (variableEnd == std::string::npos)) + return inStr; + + std::string prefix = inStr.substr(0, variableBegin); + std::string replace = inStr.substr(variableBegin + 2, variableEnd - (variableBegin + 2)); + std::string suffix = inStr.substr(variableEnd + 1); + + return prefix + mVariables[replace] + suffix; } ThemeData::ThemeData() diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index fb244e5ae3..34e6a5c9d1 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -4,8 +4,6 @@ #include "math/Vector2f.h" #include -#include -#include #include #include #include @@ -91,10 +89,33 @@ class ThemeData bool extra; std::string type; - std::map< std::string, boost::variant > properties; + struct Property + { + void operator= (const Vector2f& value) { v = value; } + void operator= (const std::string& value) { s = value; } + void operator= (const unsigned int& value) { i = value; } + void operator= (const float& value) { f = value; } + void operator= (const bool& value) { b = value; } + + Vector2f v; + std::string s; + unsigned int i; + float f; + bool b; + }; + + std::map< std::string, Property > properties; template - T get(const std::string& prop) const { return boost::get(properties.at(prop)); } + const T get(const std::string& prop) const + { + if( std::is_same::value) return *(const T*)&properties.at(prop).v; + else if(std::is_same::value) return *(const T*)&properties.at(prop).s; + else if(std::is_same::value) return *(const T*)&properties.at(prop).i; + else if(std::is_same::value) return *(const T*)&properties.at(prop).f; + else if(std::is_same::value) return *(const T*)&properties.at(prop).b; + return T(); + } inline bool has(const std::string& prop) const { return (properties.find(prop) != properties.cend()); } }; diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index 3a52d48432..ad2bec45f8 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -1,8 +1,6 @@ #include "Util.h" #include "platform.h" -#include -#include #include namespace fs = boost::filesystem; @@ -248,8 +246,20 @@ std::vector commaStringToVector(std::string commaString) { // from a comma separated string, get a vector of strings std::vector strs; - boost::split(strs, commaString, boost::is_any_of(",")); - std::sort(strs.begin(), strs.end()); + size_t start = 0; + size_t comma = commaString.find(","); + strs.push_back(commaString.substr(start, comma)); + if(comma != std::string::npos) + { + start = comma + 1; + while((comma = commaString.find(",", start)) != std::string::npos) + { + strs.push_back(commaString.substr(start, comma - start)); + start = comma + 1; + } + strs.push_back(commaString.substr(start)); + std::sort(strs.begin(), strs.end()); + } return strs; } diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index dd2e950b64..64a67793fa 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -1,9 +1,9 @@ #ifdef _RPI_ #include "components/VideoPlayerComponent.h" +#include "utils/StringUtil.h" #include "AudioManager.h" #include "Settings.h" -#include #include #include @@ -68,7 +68,7 @@ void VideoPlayerComponent::startVideo() mPlayingVideoPath = mVideoPath; // Disable AudioManager so video can play, in case we're requesting ALSA - if (boost::starts_with(Settings::getInstance()->getString("OMXAudioDev").c_str(), "alsa")) + if (Utils::String::startsWith(Settings::getInstance()->getString("OMXAudioDev").c_str(), "alsa")) { AudioManager::getInstance()->deinit(); } diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index 695695ab3c..e1754e2158 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -144,6 +144,18 @@ namespace Utils } // trim + bool startsWith(const std::string& _string, const std::string& _test) + { + return (_string.find(_test) == 0); + + } // startsWith + + bool endsWith(const std::string& _string, const std::string& _test) + { + return (_string.find(_test) == (_string.size() - _test.size())); + + } // endsWith + } // String:: } // Utils:: diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h index 3649ae4d8b..c745d82e41 100644 --- a/es-core/src/utils/StringUtil.h +++ b/es-core/src/utils/StringUtil.h @@ -14,6 +14,8 @@ namespace Utils size_t prevCursor (const std::string& _string, const size_t _cursor); size_t moveCursor (const std::string& _string, const size_t _cursor, const int _amount); std::string trim (const std::string& _path); + bool startsWith (const std::string& _string, const std::string& _test); + bool endsWith (const std::string& _string, const std::string& _test); } // Utils::String:: From 05caef2f28391934a0af6d0cb7da1377ca796128 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Tue, 5 Dec 2017 00:30:25 +0100 Subject: [PATCH 224/603] Remove all namespace fs = boost::filesystem; --- es-app/src/CollectionSystemManager.cpp | 35 +++++++++--------- es-app/src/FileData.cpp | 6 ++-- es-app/src/FileData.h | 1 - es-app/src/Gamelist.cpp | 15 ++++---- es-app/src/MetaData.cpp | 6 ++-- es-app/src/SystemData.cpp | 44 +++++++++++------------ es-app/src/main.cpp | 10 +++--- es-core/src/InputManager.cpp | 9 +++-- es-core/src/ThemeData.cpp | 22 ++++++------ es-core/src/Util.cpp | 32 ++++++++--------- es-core/src/guis/GuiDetectDevice.cpp | 4 +-- es-core/src/resources/ResourceManager.cpp | 6 ++-- 12 files changed, 84 insertions(+), 106 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 1a86eff46b..60309c4400 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -16,7 +16,6 @@ #include #include -namespace fs = boost::filesystem; std::string myCollectionsName = "collections"; /* Handling the getting, initialization, deinitialization, saving and deletion of @@ -52,8 +51,8 @@ CollectionSystemManager::CollectionSystemManager(Window* window) : mWindow(windo mCollectionEnvData->mPlatformIds = allPlatformIds; std::string path = getCollectionsFolder(); - if(!fs::exists(path)) - fs::create_directory(path); + if(!boost::filesystem::exists(path)) + boost::filesystem::create_directory(path); mIsEditingCustom = false; mEditingCollection = "Favorites"; @@ -334,7 +333,7 @@ bool CollectionSystemManager::isThemeCustomCollectionCompatible(std::vectorsecond.path.string() + "/theme.xml"; - if (fs::exists(defaultThemeFilePath)) + if (boost::filesystem::exists(defaultThemeFilePath)) { return true; } @@ -722,7 +721,7 @@ void CollectionSystemManager::populateCustomCollection(CollectionSystemData* sys CollectionSystemDecl sysDecl = sysData->decl; std::string path = getCustomCollectionConfigPath(newSys->getName()); - if(!fs::exists(path)) + if(!boost::filesystem::exists(path)) { LOG(LogInfo) << "Couldn't find custom collection config file at " << path; return; @@ -829,7 +828,7 @@ std::vector CollectionSystemManager::getSystemsFromConfig() std::vector systems; std::string path = SystemData::getConfigPath(false); - if(!fs::exists(path)) + if(!boost::filesystem::exists(path)) { return systems; } @@ -880,20 +879,20 @@ std::vector CollectionSystemManager::getSystemsFromTheme() Settings::getInstance()->setString("ThemeSet", set->first); } - fs::path themePath = set->second.path; + boost::filesystem::path themePath = set->second.path; - if (fs::exists(themePath)) + if (boost::filesystem::exists(themePath)) { - fs::directory_iterator end_itr; // default construction yields past-the-end - for (fs::directory_iterator itr(themePath); itr != end_itr; ++itr) + boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end + for (boost::filesystem::directory_iterator itr(themePath); itr != end_itr; ++itr) { - if (fs::is_directory(itr->status())) + if (boost::filesystem::is_directory(itr->status())) { //... here you have a directory std::string folder = itr->path().string(); folder = folder.substr(themePath.string().size()+1); - if(fs::exists(set->second.getThemePath(folder))) + if(boost::filesystem::exists(set->second.getThemePath(folder))) { systems.push_back(folder); } @@ -940,14 +939,14 @@ std::vector CollectionSystemManager::getUnusedSystemsFromTheme() std::vector CollectionSystemManager::getCollectionsFromConfigFolder() { std::vector systems; - fs::path configPath = getCollectionsFolder(); + boost::filesystem::path configPath = getCollectionsFolder(); - if (fs::exists(configPath)) + if (boost::filesystem::exists(configPath)) { - fs::directory_iterator end_itr; // default construction yields past-the-end - for (fs::directory_iterator itr(configPath); itr != end_itr; ++itr) + boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end + for (boost::filesystem::directory_iterator itr(configPath); itr != end_itr; ++itr) { - if (fs::is_regular_file(itr->status())) + if (boost::filesystem::is_regular_file(itr->status())) { // it's a file std::string file = itr->path().string(); @@ -1013,7 +1012,7 @@ bool CollectionSystemManager::includeFileInAutoCollections(FileData* file) std::string getCustomCollectionConfigPath(std::string collectionName) { - fs::path path = getCollectionsFolder() + "custom-" + collectionName + ".cfg"; + boost::filesystem::path path = getCollectionsFolder() + "custom-" + collectionName + ".cfg"; return path.generic_string(); } diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 9ba6c082d4..8a8c2fb728 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -14,9 +14,7 @@ #include "Window.h" #include -namespace fs = boost::filesystem; - -FileData::FileData(FileType type, const fs::path& path, SystemEnvironmentData* envData, SystemData* system) +FileData::FileData(FileType type, const boost::filesystem::path& path, SystemEnvironmentData* envData, SystemData* system) : mType(type), mPath(path), mSystem(system), mEnvData(envData), mSourceFileData(NULL), mParent(NULL), metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA) // metadata is REALLY set in the constructor! { // metadata needs at least a name field (since that's what getName() will return) @@ -259,7 +257,7 @@ void FileData::launchGame(Window* window) const std::string rom = escapePath(getPath()); const std::string basename = getPath().stem().string(); - const std::string rom_raw = fs::path(getPath()).make_preferred().string(); + const std::string rom_raw = boost::filesystem::path(getPath()).make_preferred().string(); command = strreplace(command, "%ROM%", rom); command = strreplace(command, "%BASENAME%", basename); diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 49c88630a4..57a98b1a7e 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -3,7 +3,6 @@ #define ES_APP_FILE_DATA_H #include "MetaData.h" -#include #include class SystemData; diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 81e4da20cb..6c42932188 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -7,17 +7,14 @@ #include "SystemData.h" #include "Util.h" #include -#include #include -namespace fs = boost::filesystem; - FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& path, FileType type, bool trustGamelist) { // first, verify that path is within the system's root folder FileData* root = system->getRootFolder(); - fs::path relative; + boost::filesystem::path relative; bool contains = false; if (trustGamelist) { @@ -111,7 +108,7 @@ void parseGamelist(SystemData* system) return; } - fs::path relativeTo = system->getStartPath(); + boost::filesystem::path relativeTo = system->getStartPath(); const char* tagList[2] = { "game", "folder" }; FileType typeList[2] = { GAME, FOLDER }; @@ -121,7 +118,7 @@ void parseGamelist(SystemData* system) FileType type = typeList[i]; for(pugi::xml_node fileNode = root.child(tag); fileNode; fileNode = fileNode.next_sibling(tag)) { - fs::path path = resolvePath(fileNode.child("path").text().get(), relativeTo, false); + boost::filesystem::path path = resolvePath(fileNode.child("path").text().get(), relativeTo, false); if(!trustGamelist && !boost::filesystem::exists(path)) { @@ -242,9 +239,9 @@ void updateGamelist(SystemData* system) continue; } - fs::path nodePath = resolvePath(pathNode.text().get(), system->getStartPath(), true); - fs::path gamePath((*fit)->getPath()); - if(nodePath == gamePath || (fs::exists(nodePath) && fs::exists(gamePath) && fs::equivalent(nodePath, gamePath))) + boost::filesystem::path nodePath = resolvePath(pathNode.text().get(), system->getStartPath(), true); + boost::filesystem::path gamePath((*fit)->getPath()); + if(nodePath == gamePath || (boost::filesystem::exists(nodePath) && boost::filesystem::exists(gamePath) && boost::filesystem::equivalent(nodePath, gamePath))) { // found it root.remove_child(fileNode); diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 4f79df9fda..cf93013bd0 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -4,8 +4,6 @@ #include "Util.h" #include -namespace fs = boost::filesystem; - MetaDataDecl gameDecls[] = { // key, type, default, statistic, name in GuiMetaDataEd, prompt in GuiMetaDataEd {"name", MD_STRING, "", false, "name", "enter game name"}, @@ -69,7 +67,7 @@ MetaDataList::MetaDataList(MetaDataListType type) } -MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node& node, const fs::path& relativeTo) +MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node& node, const boost::filesystem::path& relativeTo) { MetaDataList mdl(type); @@ -95,7 +93,7 @@ MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node& return mdl; } -void MetaDataList::appendToXML(pugi::xml_node& parent, bool ignoreDefaults, const fs::path& relativeTo) const +void MetaDataList::appendToXML(pugi::xml_node& parent, bool ignoreDefaults, const boost::filesystem::path& relativeTo) const { const std::vector& mdd = getMDD(); diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 15787c0c36..ad9c1f84e8 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -17,8 +17,6 @@ std::vector SystemData::sSystemVector; -namespace fs = boost::filesystem; - SystemData::SystemData(const std::string& name, const std::string& fullName, SystemEnvironmentData* envData, const std::string& themeFolder, bool CollectionSystem) : mName(name), mFullName(fullName), mEnvData(envData), mThemeFolder(themeFolder), mIsCollectionSystem(CollectionSystem), mIsGameSystem(true) { @@ -70,21 +68,21 @@ void SystemData::setIsGameSystemStatus() } // test to see if a file is hidden -bool isHidden(const fs::path &filePath) +bool isHidden(const boost::filesystem::path &filePath) { #ifdef WIN32 const DWORD Attributes = GetFileAttributes(filePath.generic_string().c_str()); return (Attributes != INVALID_FILE_ATTRIBUTES) && (Attributes & FILE_ATTRIBUTE_HIDDEN); #else - fs::path::string_type fileName = filePath.filename().string(); + boost::filesystem::path::string_type fileName = filePath.filename().string(); return fileName[0] == '.'; #endif } void SystemData::populateFolder(FileData* folder) { - const fs::path& folderPath = folder->getPath(); - if(!fs::is_directory(folderPath)) + const boost::filesystem::path& folderPath = folder->getPath(); + if(!boost::filesystem::is_directory(folderPath)) { LOG(LogWarning) << "Error - folder with path \"" << folderPath << "\" is not a directory!"; return; @@ -93,21 +91,21 @@ void SystemData::populateFolder(FileData* folder) const std::string folderStr = folderPath.generic_string(); //make sure that this isn't a symlink to a thing we already have - if(fs::is_symlink(folderPath)) + if(boost::filesystem::is_symlink(folderPath)) { //if this symlink resolves to somewhere that's at the beginning of our path, it's gonna recurse - if(folderStr.find(fs::canonical(folderPath).generic_string()) == 0) + if(folderStr.find(boost::filesystem::canonical(folderPath).generic_string()) == 0) { LOG(LogWarning) << "Skipping infinitely recursive symlink \"" << folderPath << "\""; return; } } - fs::path filePath; + boost::filesystem::path filePath; std::string extension; bool isGame; bool showHidden = Settings::getInstance()->getBool("ShowHiddenFiles"); - for(fs::directory_iterator end, dir(folderPath); dir != end; ++dir) + for(boost::filesystem::directory_iterator end, dir(folderPath); dir != end; ++dir) { filePath = (*dir).path(); @@ -134,7 +132,7 @@ void SystemData::populateFolder(FileData* folder) } //add directories that also do not match an extension as folders - if(!isGame && fs::is_directory(filePath)) + if(!isGame && boost::filesystem::is_directory(filePath)) { FileData* newFolder = new FileData(FOLDER, filePath.generic_string(), mEnvData, this); populateFolder(newFolder); @@ -188,7 +186,7 @@ bool SystemData::loadConfig() LOG(LogInfo) << "Loading system config file " << path << "..."; - if(!fs::exists(path)) + if(!boost::filesystem::exists(path)) { LOG(LogError) << "es_systems.cfg file does not exist!"; writeExampleConfig(getConfigPath(true)); @@ -350,8 +348,8 @@ void SystemData::deleteSystems() std::string SystemData::getConfigPath(bool forWrite) { - fs::path path = getHomePath() + "/.emulationstation/es_systems.cfg"; - if(forWrite || fs::exists(path)) + boost::filesystem::path path = getHomePath() + "/.emulationstation/es_systems.cfg"; + if(forWrite || boost::filesystem::exists(path)) return path.generic_string(); return "/etc/emulationstation/es_systems.cfg"; @@ -387,16 +385,16 @@ SystemData* SystemData::getPrev() const std::string SystemData::getGamelistPath(bool forWrite) const { - fs::path filePath; + boost::filesystem::path filePath; filePath = mRootFolder->getPath() / "gamelist.xml"; - if(fs::exists(filePath)) + if(boost::filesystem::exists(filePath)) return filePath.generic_string(); filePath = getHomePath() + "/.emulationstation/gamelists/" + mName + "/gamelist.xml"; if(forWrite) // make sure the directory exists if we're going to write to it, or crashes will happen - fs::create_directories(filePath.parent_path()); - if(forWrite || fs::exists(filePath)) + boost::filesystem::create_directories(filePath.parent_path()); + if(forWrite || boost::filesystem::exists(filePath)) return filePath.generic_string(); return "/etc/emulationstation/gamelists/" + mName + "/gamelist.xml"; @@ -410,14 +408,14 @@ std::string SystemData::getThemePath() const // 3. default system theme from currently selected theme set [CURRENT_THEME_PATH]/theme.xml // first, check game folder - fs::path localThemePath = mRootFolder->getPath() / "theme.xml"; - if(fs::exists(localThemePath)) + boost::filesystem::path localThemePath = mRootFolder->getPath() / "theme.xml"; + if(boost::filesystem::exists(localThemePath)) return localThemePath.generic_string(); // not in game folder, try system theme in theme sets localThemePath = ThemeData::getThemeFromCurrentSet(mThemeFolder); - if (fs::exists(localThemePath)) + if (boost::filesystem::exists(localThemePath)) return localThemePath.generic_string(); // not system theme, try default system theme in theme set @@ -428,7 +426,7 @@ std::string SystemData::getThemePath() const bool SystemData::hasGamelist() const { - return (fs::exists(getGamelistPath(false))); + return (boost::filesystem::exists(getGamelistPath(false))); } unsigned int SystemData::getGameCount() const @@ -490,7 +488,7 @@ void SystemData::loadTheme() std::string path = getThemePath(); - if(!fs::exists(path)) // no theme available for this platform + if(!boost::filesystem::exists(path)) // no theme available for this platform return; try diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 62321c7495..0827e59323 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -25,8 +25,6 @@ #include -namespace fs = boost::filesystem; - bool scrape_cmdline = false; bool parseArgs(int argc, char* argv[]) @@ -160,11 +158,11 @@ bool verifyHomeFolderExists() //make sure the config directory exists std::string home = getHomePath(); std::string configDir = home + "/.emulationstation"; - if(!fs::exists(configDir)) + if(!boost::filesystem::exists(configDir)) { std::cout << "Creating config directory \"" << configDir << "\"\n"; - fs::create_directory(configDir); - if(!fs::exists(configDir)) + boost::filesystem::create_directory(configDir); + if(!boost::filesystem::exists(configDir)) { std::cerr << "Config directory could not be created!\n"; return false; @@ -326,7 +324,7 @@ int main(int argc, char* argv[]) //choose which GUI to open depending on if an input configuration already exists if(errorMsg == NULL) { - if(fs::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) + if(boost::filesystem::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) { ViewController::get()->goToStart(); }else{ diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 536543e390..9e7901312b 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #define KEYBOARD_GUID_STRING "-1" #define CEC_GUID_STRING "-2" @@ -27,8 +28,6 @@ int SDL_USER_CECBUTTONDOWN = -1; int SDL_USER_CECBUTTONUP = -1; -namespace fs = boost::filesystem; - InputManager* InputManager::mInstance = NULL; InputManager::InputManager() : mKeyboardInputConfig(NULL) @@ -279,7 +278,7 @@ bool InputManager::parseEvent(const SDL_Event& ev, Window* window) bool InputManager::loadInputConfig(InputConfig* config) { std::string path = getConfigPath(); - if(!fs::exists(path)) + if(!boost::filesystem::exists(path)) return false; pugi::xml_document doc; @@ -334,7 +333,7 @@ void InputManager::writeDeviceConfig(InputConfig* config) pugi::xml_document doc; - if(fs::exists(path)) + if(boost::filesystem::exists(path)) { // merge files pugi::xml_parse_result result = doc.load_file(path.c_str()); @@ -395,7 +394,7 @@ void InputManager::doOnFinish() std::string path = getConfigPath(); pugi::xml_document doc; - if(fs::exists(path)) + if(boost::filesystem::exists(path)) { pugi::xml_parse_result result = doc.load_file(path.c_str()); if(!result) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 6e4168497e..cc7a32c77b 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -123,8 +123,6 @@ std::map> The { "zIndex", FLOAT } } } }; -namespace fs = boost::filesystem; - #define MINIMUM_THEME_FORMAT_VERSION 3 #define CURRENT_THEME_FORMAT_VERSION 5 @@ -151,12 +149,12 @@ unsigned int getHexColor(const char* str) } // helper -std::string resolvePath(const char* in, const fs::path& relative) +std::string resolvePath(const char* in, const boost::filesystem::path& relative) { if(!in || in[0] == '\0') return in; - fs::path relPath = relative.parent_path(); + boost::filesystem::path relPath = relative.parent_path(); boost::filesystem::path path(in); @@ -207,7 +205,7 @@ void ThemeData::loadFile(std::map sysDataMap, const st ThemeException error; error.setFiles(mPaths); - if(!fs::exists(path)) + if(!boost::filesystem::exists(path)) throw error << "File does not exist!"; mVersion = 0; @@ -486,7 +484,7 @@ const std::shared_ptr& ThemeData::getDefault() theme = std::shared_ptr(new ThemeData()); const std::string path = getHomePath() + "/.emulationstation/es_theme_default.xml"; - if(fs::exists(path)) + if(boost::filesystem::exists(path)) { try { @@ -537,21 +535,21 @@ std::map ThemeData::getThemeSets() std::map sets; static const size_t pathCount = 2; - fs::path paths[pathCount] = { + boost::filesystem::path paths[pathCount] = { "/etc/emulationstation/themes", getHomePath() + "/.emulationstation/themes" }; - fs::directory_iterator end; + boost::filesystem::directory_iterator end; for(size_t i = 0; i < pathCount; i++) { - if(!fs::is_directory(paths[i])) + if(!boost::filesystem::is_directory(paths[i])) continue; - for(fs::directory_iterator it(paths[i]); it != end; ++it) + for(boost::filesystem::directory_iterator it(paths[i]); it != end; ++it) { - if(fs::is_directory(*it)) + if(boost::filesystem::is_directory(*it)) { ThemeSet set = {*it}; sets[set.getName()] = set; @@ -562,7 +560,7 @@ std::map ThemeData::getThemeSets() return sets; } -fs::path ThemeData::getThemeFromCurrentSet(const std::string& system) +boost::filesystem::path ThemeData::getThemeFromCurrentSet(const std::string& system) { auto themeSets = ThemeData::getThemeSets(); if(themeSets.empty()) diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index ad2bec45f8..79234c70f4 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -3,8 +3,6 @@ #include "platform.h" #include -namespace fs = boost::filesystem; - std::string strToUpper(const char* from) { std::string str(from); @@ -37,7 +35,7 @@ std::string getCanonicalPath(const std::string& path) // expands "./my/path.sfc" to "[relativeTo]/my/path.sfc" // if allowHome is true, also expands "~/my/path.sfc" to "/home/pi/my/path.sfc" -fs::path resolvePath(const fs::path& path, const fs::path& relativeTo, bool allowHome) +boost::filesystem::path resolvePath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool allowHome) { // nothing here if(path.begin() == path.end()) @@ -45,7 +43,7 @@ fs::path resolvePath(const fs::path& path, const fs::path& relativeTo, bool allo if(*path.begin() == ".") { - fs::path ret = relativeTo; + boost::filesystem::path ret = relativeTo; for(auto it = ++path.begin(); it != path.end(); ++it) ret /= *it; return ret; @@ -53,7 +51,7 @@ fs::path resolvePath(const fs::path& path, const fs::path& relativeTo, bool allo if(allowHome && *path.begin() == "~") { - fs::path ret = getHomePath(); + boost::filesystem::path ret = getHomePath(); for(auto it = ++path.begin(); it != path.end(); ++it) ret /= *it; return ret; @@ -62,7 +60,7 @@ fs::path resolvePath(const fs::path& path, const fs::path& relativeTo, bool allo return path; } -fs::path removeCommonPathUsingStrings(const fs::path& path, const fs::path& relativeTo, bool& contains) +boost::filesystem::path removeCommonPathUsingStrings(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains) { #ifdef WIN32 std::wstring pathStr = path.c_str(); @@ -82,18 +80,18 @@ fs::path removeCommonPathUsingStrings(const fs::path& path, const fs::path& rela } // example: removeCommonPath("/home/pi/roms/nes/foo/bar.nes", "/home/pi/roms/nes/") returns "foo/bar.nes" -fs::path removeCommonPath(const fs::path& path, const fs::path& relativeTo, bool& contains) +boost::filesystem::path removeCommonPath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains) { - // if either of these doesn't exist, fs::canonical() is going to throw an error - if(!fs::exists(path) || !fs::exists(relativeTo)) + // if either of these doesn't exist, boost::filesystem::canonical() is going to throw an error + if(!boost::filesystem::exists(path) || !boost::filesystem::exists(relativeTo)) { contains = false; return path; } - // if it's a symlink we don't want to apply fs::canonical on it, otherwise we'll lose the current parent_path - fs::path p = (fs::is_symlink(path) ? fs::canonical(path.parent_path()) / path.filename() : fs::canonical(path)); - fs::path r = fs::canonical(relativeTo); + // if it's a symlink we don't want to apply boost::filesystem::canonical on it, otherwise we'll lose the current parent_path + boost::filesystem::path p = (boost::filesystem::is_symlink(path) ? boost::filesystem::canonical(path.parent_path()) / path.filename() : boost::filesystem::canonical(path)); + boost::filesystem::path r = boost::filesystem::canonical(relativeTo); if(p.root_path() != r.root_path()) { @@ -101,7 +99,7 @@ fs::path removeCommonPath(const fs::path& path, const fs::path& relativeTo, bool return p; } - fs::path result; + boost::filesystem::path result; // find point of divergence auto itr_path = p.begin(); @@ -120,7 +118,7 @@ fs::path removeCommonPath(const fs::path& path, const fs::path& relativeTo, bool while(itr_path != p.end()) { - if(*itr_path != fs::path(".")) + if(*itr_path != boost::filesystem::path(".")) result = result / *itr_path; ++itr_path; @@ -132,11 +130,11 @@ fs::path removeCommonPath(const fs::path& path, const fs::path& relativeTo, bool // usage: makeRelativePath("/path/to/my/thing.sfc", "/path/to") -> "./my/thing.sfc" // usage: makeRelativePath("/home/pi/my/thing.sfc", "/path/to", true) -> "~/my/thing.sfc" -fs::path makeRelativePath(const fs::path& path, const fs::path& relativeTo, bool allowHome) +boost::filesystem::path makeRelativePath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool allowHome) { bool contains = false; - fs::path ret = removeCommonPath(path, relativeTo, contains); + boost::filesystem::path ret = removeCommonPath(path, relativeTo, contains); if(contains) { // success @@ -177,7 +175,7 @@ std::string escapePath(const boost::filesystem::path& path) { #ifdef WIN32 // windows escapes stuff by just putting everything in quotes - return '"' + fs::path(path).make_preferred().string() + '"'; + return '"' + boost::filesystem::path(path).make_preferred().string() + '"'; #else // a quick and dirty way to insert a backslash before most characters that would mess up a bash path std::string pathStr = path.string(); diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index 7f7ed06d51..6d3f5b0964 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -11,8 +11,6 @@ #define HOLD_TIME 1000 -namespace fs = boost::filesystem; - GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun, const std::function& doneCallback) : GuiComponent(window), mFirstRun(firstRun), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)) { @@ -104,7 +102,7 @@ void GuiDetectDevice::update(int deltaTime) if(mHoldingConfig) { // If ES starts and if a known device is connected after startup skip controller configuration - if(mFirstRun && fs::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) + if(mFirstRun && boost::filesystem::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) { if(mDoneCallback) mDoneCallback(); diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index 43f97455c0..5134a07313 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -4,8 +4,6 @@ #include #include -namespace fs = boost::filesystem; - auto array_deleter = [](unsigned char* p) { delete[] p; }; auto nop_deleter = [](unsigned char* /*p*/) { }; @@ -39,7 +37,7 @@ const ResourceData ResourceManager::getFileData(const std::string& path) const } //it's not embedded; load the file - if(!fs::exists(path)) + if(!boost::filesystem::exists(path)) { //if the file doesn't exist, return an "empty" ResourceData ResourceData data = {NULL, 0}; @@ -73,7 +71,7 @@ bool ResourceManager::fileExists(const std::string& path) const if(res2hMap.find(path) != res2hMap.cend()) return true; - return fs::exists(path); + return boost::filesystem::exists(path); } void ResourceManager::unloadAll() From 18d6b9341e446938f3e98afda87ef224cad2b089 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Tue, 5 Dec 2017 00:32:04 +0100 Subject: [PATCH 225/603] Add getDirContent, getHomePath, getCWDPath, canonicalPath, absolutePath, resolvePath, resolveSymlink, getExtension, removeFile, isAbsolute, isRegularFile, isDirectory, isSymlink, isHidden and isEquivalent Rename makeGeneric to genericPath and escapePath to escapedPath Add toUpper --- es-core/src/utils/FileSystemUtil.cpp | 522 +++++++++++++++++++++++---- es-core/src/utils/FileSystemUtil.h | 26 +- es-core/src/utils/StringUtil.cpp | 21 +- es-core/src/utils/StringUtil.h | 5 +- es-core/src/utils/TimeUtil.cpp | 22 +- 5 files changed, 494 insertions(+), 102 deletions(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index b15f037660..1d282cb620 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -3,166 +3,528 @@ #include #include -#if defined(WIN32) +#if defined(_WIN32) // because windows... #include -#define snprintf _snprintf +#include #define mkdir(x,y) _mkdir(x) -#endif // WIN32 +#define snprintf _snprintf +#define unlink _unlink +#define S_ISREG(x) (((x) & S_IFMT) == S_IFREG) +#define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR) +#else // _WIN32 +#include +#include +#endif // _WIN32 namespace Utils { namespace FileSystem { - bool createDirectory(const std::string& _path) + stringList getDirContent(const std::string& _path) { - // don't create if it already exists - if(exists(_path)) - return true; + std::string path = genericPath(_path); + stringList contentList; - // convert '\\' to '/' - makeGeneric(_path); + // only parse the directory, if it's a directory + if(isDirectory(path)) + { - // try to create directory - if(mkdir(_path.c_str(), 0755) == 0) - return true; +#if defined(_WIN32) + WIN32_FIND_DATA findData; + HANDLE hFind = FindFirstFile((path + "/*").c_str(), &findData); - // failed to create directory, try to create the parent - std::string parent = getParent(_path); + if(hFind != INVALID_HANDLE_VALUE) + { + // loop over all files in the directory + do + { + std::string name(findData.cFileName); - // only try to create parent if it's not identical to path - if(parent != _path) - createDirectory(parent); + // ignore "." and ".." + if((name != ".") && (name != "..")) + contentList.push_back(name); + } + while(FindNextFile(hFind, &findData)); - // try to create directory again now that the parent should exist - return (mkdir(_path.c_str(), 0755) == 0); + FindClose(hFind); + } +#else // _WIN32 + DIR* dir = opendir(path.c_str()); - } // createDirectory + if(dir != NULL) + { + struct dirent* entry; + + // loop over all files in the directory + while((entry = readdir(dir)) != NULL) + { + std::string name(entry->d_name); + + // ignore "." and ".." + if((name != ".") && (name != "..")) + contentList.push_back(name); + } - void makeGeneric(const std::string& _path) + closedir(dir); + } +#endif // _WIN32 + + } + + // sort the content list + contentList.sort(); + + // return the content list + return contentList; + + } // getDirContent + + std::string getHomePath() { - char* p = nullptr; + static std::string path; - // convert '\\' to '/' - for(p = (char*)_path.c_str() + 1; *p; ++p) + // only construct the homepath once + if(!path.length()) { - if(*p == '\\') - *p = '/'; + // this should give us something like "/home/YOUR_USERNAME" on Linux and "C:/Users/YOUR_USERNAME/" on Windows + std::string envHome(getenv("HOME")); + if(envHome.length()) + path = genericPath(envHome); + +#if defined(_WIN32) + // but does not seem to work for Windows XP or Vista, so try something else + if(!path.length()) + { + std::string envDir(getenv("HOMEDRIVE")); + std::string envPath(getenv("HOMEPATH")); + if(envDir.length() && envPath.length()) + path = genericPath(envDir + "/" + envPath); + } +#endif // _WIN32 + } - } // makeGeneric + // return constructed homepath + return path; + + } // getHomePath + + std::string getCWDPath() + { + char temp[512]; + + // return current working directory path + return (getcwd(temp, 512) ? genericPath(temp) : ""); + + } // getCWDPath + + std::string genericPath(const std::string& _path) + { + std::string path = _path; + size_t offset = std::string::npos; + + // remove "\\\\?\\" + if((path.find("\\\\?\\")) == 0) + path.erase(0, 4); + + // convert '\\' to '/' + while((offset = path.find('\\')) != std::string::npos) + path.replace(offset, 1 ,"/"); + + // remove double '/' + while((offset = path.find("//")) != std::string::npos) + path.erase(offset, 1); - std::string escapePath(const std::string& _path) + // return generic path + return path; + + } // genericPath + + std::string escapedPath(const std::string& _path) { + std::string path = genericPath(_path); -#ifdef WIN32 +#if defined(_WIN32) // windows escapes stuff by just putting everything in quotes - return '"' + _path + '"'; -#else // WIN32 + return '"' + path + '"'; +#else // _WIN32 // insert a backslash before most characters that would mess up a bash path - std::string escapedPath = _path; const char* invalidChars = "\\ '\"!$^&*(){}[]?;<>"; const char* invalidChar = invalidChars; + size_t offset = std::string::npos; while(*invalidChar) { - for(size_t i = 0; i < escapedPath.length(); ++i) + while((offset = path.find(*invalidChar)) != std::string::npos) + path.insert(offset, 1, '\\'); + + ++invalidChar; + } + + // return escaped path + return path; +#endif // _WIN32 + + } // escapedPath + + std::string canonicalPath(const std::string& _path) + { + std::string path = absolutePath(_path); + + // cleanup path + bool scan = true; + while(scan) + { + stringList pathList; + size_t start = 0; + size_t end = 0; + + // split at '/' + while((end = path.find("/", start)) != std::string::npos) { - if(escapedPath[i] == *invalidChar) + pathList.push_back(std::string(path, start, end - start)); + start = end + 1; + } + + // add last folder / file to pathList + if(start != path.size()) + pathList.push_back(std::string(path, start, path.size() - start)); + + path.clear(); + scan = false; + + for(stringList::const_iterator it = pathList.cbegin(); it != pathList.cend(); ++it) + { + // ignore empty + if((*it).empty()) + continue; + + // remove "/./" + if((*it) == ".") + continue; + + // resolve "/../" + if((*it) == "..") { - escapedPath.insert(i, 1, '\\'); - ++i; + path = getParent(path); + continue; } - } - ++invalidChar; +#if defined(_WIN32) + // append folder to path + path += (path.size() == 0) ? (*it) : ("/" + (*it)); +#else // _WIN32 + // append folder to path + path += ("/" + (*it)); +#endif // _WIN32 + + // resolve symlink + if(isSymlink(path)) + { + std::string resolved = resolveSymlink(path); + + if(resolved.empty()) + return ""; + + if(isAbsolute(resolved)) + path = resolved; + else + path = getParent(path) + "/" + resolved; + + for( ++it; it != pathList.cend(); ++it) + path += (path.size() == 0) ? (*it) : ("/" + (*it)); + + scan = true; + break; + } + } } - return escapedPath; -#endif // WIN32 + // return canonical path + return path; - } // escapePath + } // canonicalPath - std::string getParent(const std::string& _path) + std::string absolutePath(const std::string& _path, const std::string& _base) { - // convert '\\' to '/' - makeGeneric(_path); + std::string path = genericPath(_path); + std::string base = isAbsolute(_base) ? genericPath(_base) : absolutePath(_base); - // make a copy of the path - char temp[512]; - size_t len = snprintf(temp, sizeof(temp), "%s", _path.c_str()); + // return absolute path + return isAbsolute(path) ? path : genericPath(base + "/" + path); + + } // absolutePath + + std::string resolvePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome) + { + std::string path = genericPath(_path); + std::string relativeTo = isDirectory(_relativeTo) ? _relativeTo : getParent(_relativeTo); - // find last '/' and end the new path - while(len > 1) + // nothing to resolve + if(!path.length()) + return path; + + // replace '.' with relativeTo + if(path[0] == '.') + return genericPath(relativeTo + "/" + &(path[1])); + + // replace '~' with homePath + if(_allowHome && (path[0] == '~')) + return genericPath(getHomePath() + "/" + &(path[1])); + + // nothing to resolve + return path; + + } // resolvePath + + std::string resolveSymlink(const std::string& _path) + { + std::string path = genericPath(_path); + std::string resolved; + +#if defined(_WIN32) + HANDLE hFile = CreateFile(path.c_str(), FILE_READ_ATTRIBUTES, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); + + if(hFile != INVALID_HANDLE_VALUE) { - if(temp[--len] == '/') + resolved.resize(GetFinalPathNameByHandle(hFile, nullptr, 0, FILE_NAME_NORMALIZED) + 1); + if(GetFinalPathNameByHandle(hFile, (LPSTR)resolved.data(), (DWORD)resolved.size(), FILE_NAME_NORMALIZED) > 0) { - temp[len] = 0; - return temp; + resolved.resize(resolved.size() - 1); + resolved = genericPath(resolved); } + CloseHandle(hFile); + } +#else // _WIN32 + struct stat info; + + // check if lstat succeeded + if(lstat(path.c_str(), &info) == 0) + { + resolved.resize(info.st_size); + if(readlink(path.c_str(), (char*)resolved.data(), resolved.size()) > 0) + resolved = genericPath(resolved); } +#endif // _WIN32 + + // return resolved path + return resolved; + + } // resolveSymlink + + std::string getParent(const std::string& _path) + { + std::string path = genericPath(_path); + size_t offset = std::string::npos; + + // find last '/' and erase it + if((offset = path.find_last_of('/')) != std::string::npos) + return path.erase(offset); // no parent found - return _path; + return path; } // getParent std::string getFileName(const std::string& _path) { - // convert '\\' to '/' - makeGeneric(_path); - - // make a copy of the path - char temp[512]; - size_t len = snprintf(temp, sizeof(temp), "%s", _path.c_str()); + std::string path = genericPath(_path); + size_t offset = std::string::npos; // find last '/' and return the filename - while(len > 1) - { - // return "." if this is the end of the path, otherwise return filename - if(temp[--len] == '/') - return ((temp[len + 1] == 0) ? "." : (temp + len + 1)); - } + if((offset = path.find_last_of('/')) != std::string::npos) + return ((path[offset + 1] == 0) ? "." : std::string(path, offset + 1)); // no '/' found, entire path is a filename - return _path; + return path; } // getFileName std::string getStem(const std::string& _path) { std::string fileName = getFileName(_path); + size_t offset = std::string::npos; // empty fileName if(fileName == ".") return fileName; - // make a copy of the filename - char temp[512]; - size_t len = snprintf(temp, sizeof(temp), "%s", fileName.c_str()); - - // find last '.' and remove the extension - while(len > 1) - { - if(temp[--len] == '.') - { - temp[len] = 0; - return temp; - } - } + // find last '.' and erase the extension + if((offset = fileName.find_last_of('.')) != std::string::npos) + return fileName.erase(offset); // no '.' found, filename has no extension return fileName; } // getStem + std::string getExtension(const std::string& _path) + { + std::string fileName = getFileName(_path); + size_t offset = std::string::npos; + + // empty fileName + if(fileName == ".") + return fileName; + + // find last '.' and return the extension + if((offset = fileName.find_last_of('.')) != std::string::npos) + return std::string(fileName, offset); + + // no '.' found, filename has no extension + return "."; + + } // getExtension + + bool removeFile(const std::string& _path) + { + std::string path = genericPath(_path); + + // don't remove if it doesn't exists + if(!exists(path)) + return true; + + // try to remove file + return (unlink(path.c_str()) == 0); + + } // removeFile + + bool createDirectory(const std::string& _path) + { + std::string path = genericPath(_path); + + // don't create if it already exists + if(exists(path)) + return true; + + // try to create directory + if(mkdir(path.c_str(), 0755) == 0) + return true; + + // failed to create directory, try to create the parent + std::string parent = getParent(path); + + // only try to create parent if it's not identical to path + if(parent != path) + createDirectory(parent); + + // try to create directory again now that the parent should exist + return (mkdir(path.c_str(), 0755) == 0); + + } // createDirectory + bool exists(const std::string& _path) { + std::string path = genericPath(_path); struct stat info; - return (stat(_path.c_str(), &info) == 0); + + // check if stat succeeded + return (stat(path.c_str(), &info) == 0); } // exists + bool isAbsolute(const std::string& _path) + { + std::string path = genericPath(_path); + +#if defined(_WIN32) + return ((path.size() > 1) && (path[1] == ':')); +#else // _WIN32 + return ((path.size() > 0) && (path[0] == '/')); +#endif // _WIN32 + + } // isAbsolute + + bool isRegularFile(const std::string& _path) + { + std::string path = genericPath(_path); + struct stat info; + + // check if stat succeeded + if(stat(path.c_str(), &info) != 0) + return false; + + // check for S_IFREG attribute + return (S_ISREG(info.st_mode)); + + } // isRegularFile + + bool isDirectory(const std::string& _path) + { + std::string path = genericPath(_path); + struct stat info; + + // check if stat succeeded + if(stat(path.c_str(), &info) != 0) + return false; + + // check for S_IFDIR attribute + return (S_ISDIR(info.st_mode)); + + } // isDirectory + + bool isSymlink(const std::string& _path) + { + std::string path = genericPath(_path); + +#if defined(_WIN32) + // check for symlink attribute + const DWORD Attributes = GetFileAttributes(path.c_str()); + if((Attributes != INVALID_FILE_ATTRIBUTES) && (Attributes & FILE_ATTRIBUTE_REPARSE_POINT)) + return true; +#else // _WIN32 + struct stat info; + + // check if lstat succeeded + if(lstat(path.c_str(), &info) != 0) + return false; + + // check for S_IFLNK attribute + return (S_ISLNK(info.st_mode)); +#endif // _WIN32 + + // not a symlink + return false; + + } // isSymlink + + bool isHidden(const std::string& _path) + { + std::string path = genericPath(_path); + +#if defined(_WIN32) + // check for hidden attribute + const DWORD Attributes = GetFileAttributes(path.c_str()); + if((Attributes != INVALID_FILE_ATTRIBUTES) && (Attributes & FILE_ATTRIBUTE_HIDDEN)) + return true; +#endif // _WIN32 + + // filenames starting with . are hidden in linux, we do this check for windows as well + if(getFileName(path)[0] == '.') + return true; + + // not hidden + return false; + + } // isHidden + + bool isEquivalent(const std::string& _path1, const std::string& _path2) + { + std::string path1 = genericPath(_path1); + std::string path2 = genericPath(_path2); + struct stat info1; + struct stat info2; + + // check if stat succeeded + if((stat(path1.c_str(), &info1) != 0) || (stat(path2.c_str(), &info2) != 0)) + return false; + + // check if attributes are identical + return ((info1.st_dev == info2.st_dev) && (info1.st_ino == info2.st_ino) && (info1.st_size == info2.st_size) && (info1.st_mtime == info2.st_mtime)); + + } // isEquivalent + } // FileSystem:: } // Utils:: diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index d91b5666c1..2d90d6951a 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -2,21 +2,39 @@ #ifndef ES_CORE_UTILS_FILE_SYSTEM_UTIL_H #define ES_CORE_UTILS_FILE_SYSTEM_UTIL_H +#include #include namespace Utils { namespace FileSystem { - bool createDirectory(const std::string& _path); - void makeGeneric (const std::string& _path); - std::string escapePath (const std::string& _path); + typedef std::list stringList; + + stringList getDirContent (const std::string& _path); + std::string getHomePath (); + std::string getCWDPath (); + std::string genericPath (const std::string& _path); + std::string escapedPath (const std::string& _path); + std::string canonicalPath (const std::string& _path); + std::string absolutePath (const std::string& _path, const std::string& _base = getCWDPath()); + std::string resolvePath (const std::string& _path, const std::string& _relativeTo, const bool _allowHome); + std::string resolveSymlink (const std::string& _path); std::string getParent (const std::string& _path); std::string getFileName (const std::string& _path); std::string getStem (const std::string& _path); + std::string getExtension (const std::string& _path); + bool removeFile (const std::string& _path); + bool createDirectory(const std::string& _path); bool exists (const std::string& _path); + bool isAbsolute (const std::string& _path); + bool isRegularFile (const std::string& _path); + bool isDirectory (const std::string& _path); + bool isSymlink (const std::string& _path); + bool isHidden (const std::string& _path); + bool isEquivalent (const std::string& _path1, const std::string& _path2); - } // Utils::FileSystem:: + } // FileSystem:: } // Utils:: diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index e1754e2158..26a7c7c0b6 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -132,15 +132,26 @@ namespace Utils } // moveCursor - std::string trim(const std::string& _path) + std::string toUpper(const std::string& _string) { - const size_t pathBegin = _path.find_first_not_of(" \t"); - const size_t pathEnd = _path.find_last_not_of(" \t"); + std::string string; - if(pathBegin == std::string::npos) + for(size_t i = 0; i < _string.length(); ++i) + string += (char)toupper(_string[i]); + + return string; + + } // toUpper + + std::string trim(const std::string& _string) + { + const size_t strBegin = _string.find_first_not_of(" \t"); + const size_t strEnd = _string.find_last_not_of(" \t"); + + if(strBegin == std::string::npos) return ""; - return _path.substr(pathBegin, pathEnd - pathBegin + 1); + return _string.substr(strBegin, strEnd - strBegin + 1); } // trim diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h index c745d82e41..fcbd84e79e 100644 --- a/es-core/src/utils/StringUtil.h +++ b/es-core/src/utils/StringUtil.h @@ -13,11 +13,12 @@ namespace Utils size_t nextCursor (const std::string& _string, const size_t _cursor); size_t prevCursor (const std::string& _string, const size_t _cursor); size_t moveCursor (const std::string& _string, const size_t _cursor, const int _amount); - std::string trim (const std::string& _path); + std::string toUpper (const std::string& _string); + std::string trim (const std::string& _string); bool startsWith (const std::string& _string, const std::string& _test); bool endsWith (const std::string& _string, const std::string& _test); - } // Utils::String:: + } // String:: } // Utils:: diff --git a/es-core/src/utils/TimeUtil.cpp b/es-core/src/utils/TimeUtil.cpp index 39f3894640..5ae3690cba 100644 --- a/es-core/src/utils/TimeUtil.cpp +++ b/es-core/src/utils/TimeUtil.cpp @@ -12,30 +12,30 @@ namespace Utils mTimeStruct = { 0, 0, 0, 1, 0, 0, 0, 0, -1 }; mIsoString = "00000000T000000"; - } // Time + } // DateTime::DateTime DateTime::DateTime(const time_t& _time) { setTime(_time); - } // Time + } // DateTime::DateTime DateTime::DateTime(const tm& _timeStruct) { setTimeStruct(_timeStruct); - } // Time + } // DateTime::DateTime DateTime::DateTime(const std::string& _isoString) { setIsoString(_isoString); - } // Time + } // DateTime::DateTime DateTime::~DateTime() { - } // ~Time + } // DateTime::~DateTime void DateTime::setTime(const time_t& _time) { @@ -44,19 +44,19 @@ namespace Utils mTimeStruct = *localtime(&mTime); mIsoString = timeToString(mTime); - } // setTime + } // DateTime::setTime void DateTime::setTimeStruct(const tm& _timeStruct) { setTime(mktime((tm*)&_timeStruct)); - } // setTimeStruct + } // DateTime::setTimeStruct void DateTime::setIsoString(const std::string& _isoString) { setTime(stringToTime(_isoString)); - } // setIsoString + } // DateTime::setIsoString Duration::Duration(const time_t& _time) { @@ -66,12 +66,12 @@ namespace Utils mMinutes = ((mTotalSeconds % (60*60)) - (mTotalSeconds % (60))) / 60; mSeconds = mTotalSeconds % 60; - } // Duration + } // Duration::Duration Duration::~Duration() { - } // ~Duration + } // Duration::~Duration time_t now() { @@ -86,7 +86,7 @@ namespace Utils const char* s = _string.c_str(); const char* f = _format.c_str(); tm timeStruct = { 0, 0, 0, 1, 0, 0, 0, 0, -1 }; - int parsedChars = 0; + size_t parsedChars = 0; if(_string == "not-a-date-time") return mktime(&timeStruct); From 7d50301b46d6d9638aab3579e3a330f2cb01b267 Mon Sep 17 00:00:00 2001 From: Zachary Burke Date: Tue, 2 Jan 2018 09:36:22 -0800 Subject: [PATCH 226/603] Majorly improved performance when fetching Mame names. After profiling UI filtering and startup I determined that getCleanMameName was responsible for the incredibly long load times when loading/filtering Mame ROMS. This function was using a linear search over a pre-sorted array to find a corresponding Mame ROM Name from the ROM name. It now uses a binary search which improves UI load/filter responsiveness by a couple orders of magnitude. Single core performance on my i7 for 10,000 iterations was 2.01 secs vs 7.77e-4 secs --- es-app/src/FileData.cpp | 2 +- es-app/src/PlatformId.cpp | 48 ++++++++++++++++++++++++++++++++++----- es-app/src/PlatformId.h | 7 +++++- 3 files changed, 49 insertions(+), 8 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 9ba6c082d4..31e6368199 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -40,7 +40,7 @@ std::string FileData::getDisplayName() const { std::string stem = mPath.stem().generic_string(); if(mSystem && mSystem->hasPlatformId(PlatformIds::ARCADE) || mSystem->hasPlatformId(PlatformIds::NEOGEO)) - stem = PlatformIds::getCleanMameName(stem.c_str()); + stem = PlatformIds::mameTitleSearch(stem.c_str()); return stem; } diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index bf37bc52b1..e437a367c2 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -95,16 +95,52 @@ namespace PlatformIds return PlatformNames[id]; } - const char* getCleanMameName(const char* from) + int getMameTitleCount() { const char** mameNames = mameNameToRealName; - - while(*mameNames != NULL && strcmp(from, *mameNames) != 0) + int count = 0; + while (*mameNames != NULL) + { mameNames += 2; + count++; + } + return count; + } + - if(*mameNames) - return *(mameNames + 1); - + const char* mameTitleSearch(const char* from) + { + // The start and end index range from [0, number of roms] + int iStart = 0; + static int mameCount = getMameTitleCount(); + int iEnd = mameCount; + + while (iStart < iEnd) + { + // The middle entry is halfway between the start and end index + const int iMiddle = (iStart + iEnd) / 2; + + // mameNameToRealName contains 2 sequential entries for every entry, so the indexes look like this: + // 0: key, value, + // 2: key, value, + // 4: key, value + // This means that there are twice as many indexes as there are numbers of ROMs. So to get the + // iMiddle'th entry, we need to multiply by 2 because iMiddle goes from [0, number of roms]. + const int iKey = iMiddle * 2; + const int comp = strcmp(mameNameToRealName[iKey], from); + if (comp < 0) + { + // Remember, iMiddle ranges from [0, number of roms] so we only increment by 1 + iStart = iMiddle + 1; + } + else if (comp > 0) + { + iEnd = iMiddle; + } + // The Key was found, now return the Value + else return mameNameToRealName[iKey + 1]; + } return from; } + } diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index 8b08cde0fd..be553e8fca 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -78,7 +78,12 @@ namespace PlatformIds PlatformId getPlatformId(const char* str); const char* getPlatformName(PlatformId id); - const char* getCleanMameName(const char* from); + // Get the number of Mame titles in the mameNameToRealName array + // Should only run this once and store in a static or cached variable + int getMameTitleCount(); + + // Perform a binary search for a game title given a rom name + const char* mameTitleSearch(const char* from); } #endif // ES_APP_PLATFORM_ID_H From 27e91e78b49fdf4a8e2514644e35a9ee7bcde78a Mon Sep 17 00:00:00 2001 From: jrassa Date: Sun, 7 Jan 2018 21:43:18 -0500 Subject: [PATCH 227/603] fix resolvePlaceholders to handle multiple variables in a single string --- es-core/src/ThemeData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index cc7a32c77b..c6609d52a5 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -188,7 +188,7 @@ std::string resolvePlaceholders(const char* in) std::string prefix = inStr.substr(0, variableBegin); std::string replace = inStr.substr(variableBegin + 2, variableEnd - (variableBegin + 2)); - std::string suffix = inStr.substr(variableEnd + 1); + std::string suffix = resolvePlaceholders(inStr.substr(variableEnd + 1).c_str()); return prefix + mVariables[replace] + suffix; } From 7d7ebd51244cad8ec59e0c1853ff44a753a3e6f6 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Tue, 9 Jan 2018 22:59:23 +0100 Subject: [PATCH 228/603] Minor misc fixes and warning silencers --- es-app/src/CollectionSystemManager.cpp | 7 ++---- es-app/src/FileSorts.cpp | 32 ++++++++++---------------- es-app/src/guis/GuiFastSelect.cpp | 10 ++++---- es-app/src/guis/GuiFastSelect.h | 2 +- es-core/src/CECInput.cpp | 30 ++++++++++++++---------- 5 files changed, 38 insertions(+), 43 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 60309c4400..4f99781295 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -14,7 +14,6 @@ #include #include #include -#include std::string myCollectionsName = "collections"; @@ -1023,9 +1022,7 @@ std::string getCollectionsFolder() bool systemSort(SystemData* sys1, SystemData* sys2) { - std::string name1 = sys1->getName(); - std::string name2 = sys2->getName(); - transform(name1.cbegin(), name1.cend(), name1.begin(), ::toupper); - transform(name2.cbegin(), name2.cend(), name2.begin(), ::toupper); + std::string name1 = Utils::String::toUpper(sys1->getName()); + std::string name2 = Utils::String::toUpper(sys2->getName()); return name1.compare(name2) < 0; } \ No newline at end of file diff --git a/es-app/src/FileSorts.cpp b/es-app/src/FileSorts.cpp index 2c4cac1697..7ba070acae 100644 --- a/es-app/src/FileSorts.cpp +++ b/es-app/src/FileSorts.cpp @@ -1,5 +1,7 @@ #include "FileSorts.h" +#include "utils/StringUtil.h" + namespace FileSorts { const FileData::SortType typesArr[] = { @@ -40,10 +42,8 @@ namespace FileSorts bool compareName(const FileData* file1, const FileData* file2) { // we compare the actual metadata name, as collection files have the system appended which messes up the order - std::string name1 = file1->metadata.get("name"); - std::string name2 = file2->metadata.get("name"); - transform(name1.cbegin(), name1.cend(), name1.begin(), ::toupper); - transform(name2.cbegin(), name2.cend(), name2.begin(), ::toupper); + std::string name1 = Utils::String::toUpper(file1->metadata.get("name")); + std::string name2 = Utils::String::toUpper(file2->metadata.get("name")); return name1.compare(name2) < 0; } @@ -84,37 +84,29 @@ namespace FileSorts bool compareGenre(const FileData* file1, const FileData* file2) { - std::string genre1 = file1->metadata.get("genre"); - std::string genre2 = file2->metadata.get("genre"); - transform(genre1.cbegin(), genre1.cend(), genre1.begin(), ::toupper); - transform(genre2.cbegin(), genre2.cend(), genre2.begin(), ::toupper); + std::string genre1 = Utils::String::toUpper(file1->metadata.get("genre")); + std::string genre2 = Utils::String::toUpper(file2->metadata.get("genre")); return genre1.compare(genre2) < 0; } bool compareDeveloper(const FileData* file1, const FileData* file2) { - std::string developer1 = file1->metadata.get("developer"); - std::string developer2 = file2->metadata.get("developer"); - transform(developer1.cbegin(), developer1.cend(), developer1.begin(), ::toupper); - transform(developer2.cbegin(), developer2.cend(), developer2.begin(), ::toupper); + std::string developer1 = Utils::String::toUpper(file1->metadata.get("developer")); + std::string developer2 = Utils::String::toUpper(file2->metadata.get("developer")); return developer1.compare(developer2) < 0; } bool comparePublisher(const FileData* file1, const FileData* file2) { - std::string publisher1 = file1->metadata.get("publisher"); - std::string publisher2 = file2->metadata.get("publisher"); - transform(publisher1.cbegin(), publisher1.cend(), publisher1.begin(), ::toupper); - transform(publisher2.cbegin(), publisher2.cend(), publisher2.begin(), ::toupper); + std::string publisher1 = Utils::String::toUpper(file1->metadata.get("publisher")); + std::string publisher2 = Utils::String::toUpper(file2->metadata.get("publisher")); return publisher1.compare(publisher2) < 0; } bool compareSystem(const FileData* file1, const FileData* file2) { - std::string system1 = file1->getSystemName(); - std::string system2 = file2->getSystemName(); - transform(system1.cbegin(), system1.cend(), system1.begin(), ::toupper); - transform(system2.cbegin(), system2.cend(), system2.begin(), ::toupper); + std::string system1 = Utils::String::toUpper(file1->getSystemName()); + std::string system2 = Utils::String::toUpper(file2->getSystemName()); return system1.compare(system2) < 0; } }; diff --git a/es-app/src/guis/GuiFastSelect.cpp b/es-app/src/guis/GuiFastSelect.cpp index 91bed6d5ff..1227621513 100644 --- a/es-app/src/guis/GuiFastSelect.cpp +++ b/es-app/src/guis/GuiFastSelect.cpp @@ -35,8 +35,8 @@ GuiFastSelect::GuiFastSelect(Window* window, IGameListView* gamelist) : GuiCompo mSortId = 0; // TODO updateSortText(); - mLetterId = (int)LETTERS.find(mGameList->getCursor()->getName()[0]); - if(mLetterId == (int)std::string::npos) + mLetterId = LETTERS.find(mGameList->getCursor()->getName()[0]); + if(mLetterId == std::string::npos) mLetterId = 0; mScrollDir = 0; @@ -115,9 +115,9 @@ void GuiFastSelect::scroll() { mLetterId += mScrollDir; if(mLetterId < 0) - mLetterId += (int)LETTERS.length(); - else if(mLetterId >= (int)LETTERS.length()) - mLetterId -= (int)LETTERS.length(); + mLetterId += LETTERS.length(); + else if(mLetterId >= LETTERS.length()) + mLetterId -= LETTERS.length(); mLetterText.setText(LETTERS.substr(mLetterId, 1)); } diff --git a/es-app/src/guis/GuiFastSelect.h b/es-app/src/guis/GuiFastSelect.h index 3028250593..75e4949065 100644 --- a/es-app/src/guis/GuiFastSelect.h +++ b/es-app/src/guis/GuiFastSelect.h @@ -24,7 +24,7 @@ class GuiFastSelect : public GuiComponent void updateSortText(); int mSortId; - int mLetterId; + size_t mLetterId; int mScrollDir; int mScrollAccumulator; diff --git a/es-core/src/CECInput.cpp b/es-core/src/CECInput.cpp index 7fb3c963dc..1de55facf9 100644 --- a/es-core/src/CECInput.cpp +++ b/es-core/src/CECInput.cpp @@ -169,29 +169,31 @@ CECInput::~CECInput() std::string CECInput::getAlertTypeString(const unsigned int _type) { - -#ifdef HAVE_LIBCEC switch(_type) { + +#ifdef HAVE_LIBCEC case CEC::CEC_ALERT_SERVICE_DEVICE: { return "Service-Device"; } break; case CEC::CEC_ALERT_CONNECTION_LOST: { return "Connection-Lost"; } break; case CEC::CEC_ALERT_PERMISSION_ERROR: { return "Permission-Error"; } break; case CEC::CEC_ALERT_PORT_BUSY: { return "Port-Busy"; } break; case CEC::CEC_ALERT_PHYSICAL_ADDRESS_ERROR: { return "Physical-Address-Error"; } break; case CEC::CEC_ALERT_TV_POLL_FAILED: { return "TV-Poll-Failed"; } break; - } +#else // HAVE_LIBCEC + case 0: #endif // HAVE_LIBCEC - return "Unknown"; + default: { return "Unknown"; } break; + } } // getAlertTypeString std::string CECInput::getOpCodeString(const unsigned int _opCode) { - -#ifdef HAVE_LIBCEC switch(_opCode) { + +#ifdef HAVE_LIBCEC case CEC::CEC_OPCODE_ACTIVE_SOURCE: { return "Active-Source"; } break; case CEC::CEC_OPCODE_IMAGE_VIEW_ON: { return "Image-View-On"; } break; case CEC::CEC_OPCODE_TEXT_VIEW_ON: { return "Text-View-On"; } break; @@ -262,19 +264,21 @@ std::string CECInput::getOpCodeString(const unsigned int _opCode) case CEC::CEC_OPCODE_END_ARC: { return "End-Arc"; } break; case CEC::CEC_OPCODE_CDC: { return "CDC"; } break; case CEC::CEC_OPCODE_NONE: { return "None"; } break; - } +#else // HAVE_LIBCEC + case 0: #endif // HAVE_LIBCEC - return "Unknown"; + default: { return "Unknown"; } break; + } } // getOpCodeString std::string CECInput::getKeyCodeString(const unsigned int _keyCode) { - -#ifdef HAVE_LIBCEC switch(_keyCode) { + +#ifdef HAVE_LIBCEC case CEC::CEC_USER_CONTROL_CODE_SELECT: { return "Select"; } break; case CEC::CEC_USER_CONTROL_CODE_UP: { return "Up"; } break; case CEC::CEC_USER_CONTROL_CODE_DOWN: { return "Down"; } break; @@ -362,9 +366,11 @@ std::string CECInput::getKeyCodeString(const unsigned int _keyCode) case CEC::CEC_USER_CONTROL_CODE_DATA: { return "Data"; } break; case CEC::CEC_USER_CONTROL_CODE_AN_RETURN: { return "AN-Return"; } break; case CEC::CEC_USER_CONTROL_CODE_AN_CHANNELS_LIST: { return "AN-Channels-List"; } break; - } +#else // HAVE_LIBCEC + case 0: #endif // HAVE_LIBCEC - return "Unknown"; + default: { return "Unknown"; } break; + } } // getKeyCodeString From 528225a2f33836bf04a7a9a299963481a4526305 Mon Sep 17 00:00:00 2001 From: Benjamin Sinkula Date: Wed, 17 Jan 2018 08:14:21 -0600 Subject: [PATCH 229/603] Update README to reflect Eigen3 dependency removal --- DEVNOTES.md | 6 +++--- README.md | 6 ++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/DEVNOTES.md b/DEVNOTES.md index 808a47f17f..59d0c4bb68 100644 --- a/DEVNOTES.md +++ b/DEVNOTES.md @@ -23,9 +23,9 @@ You probably want to override: `void update(int deltaTime);` `deltaTime` is in milliseconds. - `void render(const Eigen::Affine3f& parentTrans);` - You probably want to do `Eigen::Affine3f trans = parentTrans * getTransform();` to get your final "modelview" matrix. - Apply the modelview matrix with `Renderer::setMatrix(const Eigen::Affine3f&)`. + `void render(const Transform4x4f& parentTrans);` + You probably want to do `Transform4x4f trans = parentTrans * getTransform();` to get your final "modelview" matrix. + Apply the modelview matrix with `Renderer::setMatrix(const Transform4x4f&)`. Render any children the component may have with `renderChildren(parentTrans);`. diff --git a/README.md b/README.md index bd10749c8b..5a300a00e0 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,13 @@ Building EmulationStation uses some C++11 code, which means you'll need to use at least g++-4.7 on Linux, or VS2010 on Windows, to compile. -EmulationStation has a few dependencies. For building, you'll need CMake, SDL2, Boost (System, Filesystem, DateTime, Locale), FreeImage, FreeType, Eigen3, and cURL. You also should probably install the `fonts-droid` package which contains fallback fonts for Chinese/Japanese/Korean characters, but ES will still work fine without it (this package is only used at run-time). +EmulationStation has a few dependencies. For building, you'll need CMake, SDL2, Boost (System, Filesystem, DateTime, Locale), FreeImage, FreeType, and cURL. You also should probably install the `fonts-droid` package which contains fallback fonts for Chinese/Japanese/Korean characters, but ES will still work fine without it (this package is only used at run-time). **On Debian/Ubuntu:** All of this be easily installed with apt-get: ```bash sudo apt-get install libsdl2-dev libboost-system-dev libboost-filesystem-dev libboost-date-time-dev \ - libboost-locale-dev libfreeimage-dev libfreetype6-dev libeigen3-dev libcurl4-openssl-dev \ + libboost-locale-dev libfreeimage-dev libfreetype6-dev libcurl4-openssl-dev \ libasound2-dev libgl1-mesa-dev build-essential cmake fonts-droid \ libvlc-dev libvlccore-dev vlc-nox ``` @@ -49,8 +49,6 @@ Complete Raspberry Pi build instructions at [emulationstation.org](http://emulat [Boost](http://www.boost.org/users/download/) (you'll need to compile yourself or get the pre-compiled binaries) -[Eigen3](http://eigen.tuxfamily.org/index.php?title=Main_Page) (header-only library) - [FreeImage](http://downloads.sourceforge.net/freeimage/FreeImage3154Win32.zip) [FreeType2](http://download.savannah.gnu.org/releases/freetype/freetype-2.4.9.tar.bz2) (you'll need to compile) From e2fc3b325cf295d04b3c3a8aec413abb28b40f64 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 18 Jan 2018 18:30:00 +0100 Subject: [PATCH 230/603] Add support for --screenrotate --- es-app/src/main.cpp | 11 +++++ es-core/src/Renderer.h | 1 + es-core/src/Renderer_draw_gl.cpp | 16 +++++++- es-core/src/Renderer_init_sdlgl.cpp | 62 +++++++++++++++++++++++++++-- 4 files changed, 85 insertions(+), 5 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 0827e59323..23f8e982b2 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -70,6 +70,17 @@ bool parseArgs(int argc, char* argv[]) i += 2; // skip the argument value Settings::getInstance()->setInt("ScreenOffsetX", x); Settings::getInstance()->setInt("ScreenOffsetY", y); + }else if (strcmp(argv[i], "--screenrotate") == 0) + { + if (i >= argc - 1) + { + std::cerr << "Invalid screenrotate supplied."; + return false; + } + + int rotate = atoi(argv[i + 1]); + ++i; // skip the argument value + Settings::getInstance()->setInt("ScreenRotate", rotate); }else if(strcmp(argv[i], "--gamelist-only") == 0) { Settings::getInstance()->setBool("ParseGamelistOnly", true); diff --git a/es-core/src/Renderer.h b/es-core/src/Renderer.h index 6114163d65..358cf4031f 100644 --- a/es-core/src/Renderer.h +++ b/es-core/src/Renderer.h @@ -24,6 +24,7 @@ namespace Renderer unsigned int getScreenHeight(); unsigned int getScreenOffsetX(); unsigned int getScreenOffsetY(); + unsigned int getScreenRotate(); void buildGLColorArray(GLubyte* ptr, unsigned int color, unsigned int vertCount); diff --git a/es-core/src/Renderer_draw_gl.cpp b/es-core/src/Renderer_draw_gl.cpp index 9ed671a2b4..afa7ffdd62 100644 --- a/es-core/src/Renderer_draw_gl.cpp +++ b/es-core/src/Renderer_draw_gl.cpp @@ -69,7 +69,13 @@ namespace Renderer { box.h = 0; clipStack.push(box); - glScissor(box.x, box.y, box.w, box.h); + switch(Renderer::getScreenRotate()) + { + case 0: { glScissor(box.x, box.y, box.w, box.h); } break; + case 1: { glScissor(box.y, Renderer::getScreenWidth() - box.x - box.w, box.h, box.w); } break; + case 2: { glScissor(Renderer::getScreenWidth() - box.x - box.w, Renderer::getScreenHeight() - box.y - box.h, box.w, box.h); } break; + case 3: { glScissor(Renderer::getScreenHeight() - box.y - box.h, box.x, box.h, box.w); } break; + } glEnable(GL_SCISSOR_TEST); } @@ -87,7 +93,13 @@ namespace Renderer { glDisable(GL_SCISSOR_TEST); }else{ const ClipRect& top = clipStack.top(); - glScissor(top.x, top.y, top.w, top.h); + switch(Renderer::getScreenRotate()) + { + case 0: { glScissor(top.x, top.y, top.w, top.h); } break; + case 1: { glScissor(top.y, Renderer::getScreenWidth() - top.x - top.w, top.h, top.w); } break; + case 2: { glScissor(Renderer::getScreenWidth() - top.x - top.w, Renderer::getScreenHeight() - top.y - top.h, top.w, top.h); } break; + case 3: { glScissor(Renderer::getScreenHeight() - top.y - top.h, top.x, top.h, top.w); } break; + } } } diff --git a/es-core/src/Renderer_init_sdlgl.cpp b/es-core/src/Renderer_init_sdlgl.cpp index b8fb9136ed..a456e93c03 100644 --- a/es-core/src/Renderer_init_sdlgl.cpp +++ b/es-core/src/Renderer_init_sdlgl.cpp @@ -20,6 +20,7 @@ namespace Renderer unsigned int screenHeight = 0; unsigned int screenOffsetX = 0; unsigned int screenOffsetY = 0; + unsigned int screenRotate = 0; unsigned int getWindowWidth() { return windowWidth; } unsigned int getWindowHeight() { return windowHeight; } @@ -27,6 +28,7 @@ namespace Renderer unsigned int getScreenHeight() { return screenHeight; } unsigned int getScreenOffsetX() { return screenOffsetX; } unsigned int getScreenOffsetY() { return screenOffsetY; } + unsigned int getScreenRotate() { return screenRotate; } SDL_Window* sdlWindow = NULL; SDL_GLContext sdlContext = NULL; @@ -66,6 +68,7 @@ namespace Renderer screenHeight = Settings::getInstance()->getInt("ScreenHeight") ? Settings::getInstance()->getInt("ScreenHeight") : windowHeight; screenOffsetX = Settings::getInstance()->getInt("ScreenOffsetX") ? Settings::getInstance()->getInt("ScreenOffsetX") : 0; screenOffsetY = Settings::getInstance()->getInt("ScreenOffsetY") ? Settings::getInstance()->getInt("ScreenOffsetY") : 0; + screenRotate = Settings::getInstance()->getInt("ScreenRotate") ? Settings::getInstance()->getInt("ScreenRotate") : 0; sdlWindow = SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, @@ -80,6 +83,21 @@ namespace Renderer LOG(LogInfo) << "Created window successfully."; + //support screen rotation + if((screenRotate == 1) || (screenRotate == 3)) + { + int temp; + temp = windowWidth; + windowWidth = windowHeight; + windowHeight = temp; + temp = screenWidth; + screenWidth = screenHeight; + screenHeight = temp; + temp = screenOffsetX; + screenOffsetX = screenOffsetY; + screenOffsetY = temp; + } + //set an icon for the window size_t width = 0; size_t height = 0; @@ -143,9 +161,47 @@ namespace Renderer return false; //gotta flip y since y=0 is at the bottom - glViewport(screenOffsetX, windowHeight - screenHeight - screenOffsetY, screenWidth, screenHeight); - glMatrixMode(GL_PROJECTION); - glOrtho(0, screenWidth, screenHeight, 0, -1.0, 1.0); + switch(screenRotate) + { + case 0: + { + glViewport(screenOffsetX, windowHeight - screenHeight - screenOffsetY, screenWidth, screenHeight); + glMatrixMode(GL_PROJECTION); + glOrtho(0, screenWidth, screenHeight, 0, -1.0, 1.0); + } + break; + + case 1: + { + glViewport(screenOffsetY, windowWidth - screenWidth - screenOffsetX, screenHeight, screenWidth); + glMatrixMode(GL_PROJECTION); + glOrtho(0, screenHeight, screenWidth, 0, -1.0, 1.0); + glRotatef(90, 0, 0, 1); + glTranslatef(0, screenHeight * -1.0f, 0); + } + break; + + case 2: + { + glViewport(screenOffsetX, windowHeight - screenHeight - screenOffsetY, screenWidth, screenHeight); + glMatrixMode(GL_PROJECTION); + glOrtho(0, screenWidth, screenHeight, 0, -1.0, 1.0); + glRotatef(180, 0, 0, 1); + glTranslatef(screenWidth * -1.0f, screenHeight * -1.0f, 0); + } + break; + + case 3: + { + glViewport(screenOffsetY, windowWidth - screenWidth - screenOffsetX, screenHeight, screenWidth); + glMatrixMode(GL_PROJECTION); + glOrtho(0, screenHeight, screenWidth, 0, -1.0, 1.0); + glRotatef(270, 0, 0, 1); + glTranslatef(screenWidth * -1.0f, 0, 0); + } + break; + } + glMatrixMode(GL_MODELVIEW); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); From ec8ebf07f31027cf42533aa8babb15649b285fd0 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 19 Jan 2018 00:50:15 +0100 Subject: [PATCH 231/603] Fix --screenrotate to work with --screensize and --screenoffset --- es-core/src/Renderer_draw_gl.cpp | 35 ++++++++++++++++---------------- es-core/src/Settings.cpp | 4 +++- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/es-core/src/Renderer_draw_gl.cpp b/es-core/src/Renderer_draw_gl.cpp index afa7ffdd62..cac28c5d4b 100644 --- a/es-core/src/Renderer_draw_gl.cpp +++ b/es-core/src/Renderer_draw_gl.cpp @@ -45,9 +45,21 @@ namespace Renderer { //glScissor starts at the bottom left of the window //so (0, 0, 1, 1) is the bottom left pixel //everything else uses y+ = down, so flip it to be consistent - //also take screen height and offset into account - box.x = Renderer::getScreenOffsetX() + box.x; - box.y = Renderer::getWindowHeight() - Renderer::getScreenOffsetY() - box.y - box.h; + switch(Renderer::getScreenRotate()) + { + case 0: { box = ClipRect(box.x, Renderer::getWindowHeight() - (box.y + box.h), box.w, box.h); } break; + case 1: { box = ClipRect(Renderer::getScreenHeight() - (box.y + box.h), Renderer::getWindowWidth() - (box.x + box.w), box.h, box.w); } break; + case 2: { box = ClipRect(Renderer::getScreenWidth() - (box.x + box.w), Renderer::getWindowHeight() - Renderer::getScreenHeight() + box.y, box.w, box.h); } break; + case 3: { box = ClipRect(box.y, Renderer::getWindowWidth() - Renderer::getScreenWidth() + box.x, box.h, box.w); } break; + } + + switch(Renderer::getScreenRotate()) + { + case 0: { box.x += Renderer::getScreenOffsetX(); box.y -= Renderer::getScreenOffsetY(); } break; + case 1: { box.x += Renderer::getScreenOffsetY(); box.y -= Renderer::getScreenOffsetX(); } break; + case 2: { box.x += Renderer::getScreenOffsetX(); box.y -= Renderer::getScreenOffsetY(); } break; + case 3: { box.x += Renderer::getScreenOffsetY(); box.y -= Renderer::getScreenOffsetX(); } break; + } //make sure the box fits within clipStack.top(), and clip further accordingly if(clipStack.size()) @@ -69,13 +81,8 @@ namespace Renderer { box.h = 0; clipStack.push(box); - switch(Renderer::getScreenRotate()) - { - case 0: { glScissor(box.x, box.y, box.w, box.h); } break; - case 1: { glScissor(box.y, Renderer::getScreenWidth() - box.x - box.w, box.h, box.w); } break; - case 2: { glScissor(Renderer::getScreenWidth() - box.x - box.w, Renderer::getScreenHeight() - box.y - box.h, box.w, box.h); } break; - case 3: { glScissor(Renderer::getScreenHeight() - box.y - box.h, box.x, box.h, box.w); } break; - } + + glScissor(box.x, box.y, box.w, box.h); glEnable(GL_SCISSOR_TEST); } @@ -93,13 +100,7 @@ namespace Renderer { glDisable(GL_SCISSOR_TEST); }else{ const ClipRect& top = clipStack.top(); - switch(Renderer::getScreenRotate()) - { - case 0: { glScissor(top.x, top.y, top.w, top.h); } break; - case 1: { glScissor(top.y, Renderer::getScreenWidth() - top.x - top.w, top.h, top.w); } break; - case 2: { glScissor(Renderer::getScreenWidth() - top.x - top.w, Renderer::getScreenHeight() - top.y - top.h, top.w, top.h); } break; - case 3: { glScissor(Renderer::getScreenHeight() - top.y - top.h, top.x, top.h, top.w); } break; - } + glScissor(top.x, top.y, top.w, top.h); } } diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 75bf095cde..a18f002f33 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -26,7 +26,8 @@ std::vector settings_dont_save { { "ScreenWidth" }, { "ScreenHeight" }, { "ScreenOffsetX" }, - { "ScreenOffsetY" } + { "ScreenOffsetY" }, + { "ScreenRotate" } }; Settings::Settings() @@ -140,6 +141,7 @@ void Settings::setDefaults() mIntMap["ScreenHeight"] = 0; mIntMap["ScreenOffsetX"] = 0; mIntMap["ScreenOffsetY"] = 0; + mIntMap["ScreenRotate"] = 0; } template From 4428ddaa6dabaa3daf5659bf3dda80325f56a091 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 19 Jan 2018 02:09:49 +0100 Subject: [PATCH 232/603] Fix omxplayer when using --screensize, --screenoffset and --screenrotate --- .../src/components/VideoPlayerComponent.cpp | 71 ++++++++++++++++--- 1 file changed, 63 insertions(+), 8 deletions(-) diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 64a67793fa..8f0ef8df21 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -3,6 +3,7 @@ #include "utils/StringUtil.h" #include "AudioManager.h" +#include "Renderer.h" #include "Settings.h" #include #include @@ -93,14 +94,68 @@ void VideoPlayerComponent::startVideo() // Find out the pixel position of the video view and build a command line for // omxplayer to position it in the right place - char buf[32]; + char buf1[32]; + char buf2[32]; float x = mPosition.x() - (mOrigin.x() * mSize.x()); float y = mPosition.y() - (mOrigin.y() * mSize.y()); - sprintf(buf, "%d,%d,%d,%d", (int)x, (int)y, (int)(x + mSize.x()), (int)(y + mSize.y())); + + // fix x and y + switch(Renderer::getScreenRotate()) + { + case 0: + { + const int x1 = (int)(Renderer::getScreenOffsetX() + x); + const int y1 = (int)(Renderer::getScreenOffsetY() + y); + const int x2 = (int)(x1 + mSize.x()); + const int y2 = (int)(y1 + mSize.y()); + sprintf(buf1, "%d,%d,%d,%d", x1, y1, x2, y2); + } + break; + + case 1: + { + const int x1 = (int)(Renderer::getScreenOffsetY() + Renderer::getScreenHeight() - y - mSize.y()); + const int y1 = (int)(Renderer::getScreenOffsetX() + x); + const int x2 = (int)(x1 + mSize.y()); + const int y2 = (int)(y1 + mSize.x()); + sprintf(buf1, "%d,%d,%d,%d", x1, y1, x2, y2); + } + break; + + case 2: + { + const int x1 = (int)(Renderer::getScreenOffsetX() + Renderer::getScreenWidth() - x - mSize.x()); + const int y1 = (int)(Renderer::getScreenOffsetY() + Renderer::getScreenHeight() - y - mSize.y()); + const int x2 = (int)(x1 + mSize.x()); + const int y2 = (int)(y1 + mSize.y()); + sprintf(buf1, "%d,%d,%d,%d", x1, y1, x2, y2); + } + break; + + case 3: + { + const int x1 = (int)(Renderer::getScreenOffsetY() + y); + const int y1 = (int)(Renderer::getScreenOffsetX() + Renderer::getScreenWidth() - x - mSize.x()); + const int x2 = (int)(x1 + mSize.y()); + const int y2 = (int)(y1 + mSize.x()); + sprintf(buf1, "%d,%d,%d,%d", x1, y1, x2, y2); + } + break; + } + + // rotate the video + switch(Renderer::getScreenRotate()) + { + case 0: { sprintf(buf2, "%d", (int) 0); } break; + case 1: { sprintf(buf2, "%d", (int) 90); } break; + case 2: { sprintf(buf2, "%d", (int)180); } break; + case 3: { sprintf(buf2, "%d", (int)270); } break; + } + // We need to specify the layer of 10000 or above to ensure the video is displayed on top // of our SDL display - const char* argv[] = { "", "--layer", "10010", "--loop", "--no-osd", "--aspect-mode", "letterbox", "--vol", "0", "-o", "both","--win", buf, "--no-ghost-box", "", "", "", "", NULL }; + const char* argv[] = { "", "--layer", "10010", "--loop", "--no-osd", "--aspect-mode", "letterbox", "--vol", "0", "-o", "both","--win", buf1, "--orientation", buf2, "", "", "", "", NULL }; // check if we want to mute the audio if (!Settings::getInstance()->getBool("VideoAudio") || (float)VolumeControl::getInstance()->getVolume() == 0) @@ -128,14 +183,14 @@ void VideoPlayerComponent::startVideo() if (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never") { // if we have chosen to render subtitles - argv[13] = "--subtitles"; - argv[14] = subtitlePath.c_str(); - argv[15] = mPlayingVideoPath.c_str(); + argv[15] = "--subtitles"; + argv[16] = subtitlePath.c_str(); + argv[17] = mPlayingVideoPath.c_str(); } else { // if we have chosen NOT to render subtitles in the screensaver - argv[13] = mPlayingVideoPath.c_str(); + argv[15] = mPlayingVideoPath.c_str(); } } else @@ -145,7 +200,7 @@ void VideoPlayerComponent::startVideo() { argv[6] = "stretch"; } - argv[13] = mPlayingVideoPath.c_str(); + argv[15] = mPlayingVideoPath.c_str(); } argv[10] = Settings::getInstance()->getString("OMXAudioDev").c_str(); From ae1e9e31c7d037bdca45ffe137b3366b397d061a Mon Sep 17 00:00:00 2001 From: pjft Date: Sat, 20 Jan 2018 21:26:21 +0000 Subject: [PATCH 233/603] Fixing first favorites not updating index --- es-app/src/CollectionSystemManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 4f99781295..6aea7e108c 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -491,6 +491,7 @@ bool CollectionSystemManager::toggleGameInCollection(FileData* file) } else { + file->getSourceFileData()->getSystem()->getIndex()->removeFromIndex(file); MetaDataList* md = &file->getSourceFileData()->metadata; std::string value = md->get("favorite"); if (value == "false") @@ -502,6 +503,7 @@ bool CollectionSystemManager::toggleGameInCollection(FileData* file) adding = false; md->set("favorite", "false"); } + file->getSourceFileData()->getSystem()->getIndex()->addToIndex(file); refreshCollectionSystems(file->getSourceFileData()); } if (adding) From b41118fe929cabb050c8a9bf7b670934cdb37f6c Mon Sep 17 00:00:00 2001 From: jrassa Date: Mon, 22 Jan 2018 19:31:18 -0500 Subject: [PATCH 234/603] implement debug rects for images similar to text components --- es-core/src/Settings.cpp | 1 + es-core/src/Window.cpp | 5 +++++ es-core/src/components/ImageComponent.cpp | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index a18f002f33..37bb88fdf1 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -13,6 +13,7 @@ std::vector settings_dont_save { { "Debug" }, { "DebugGrid" }, { "DebugText" }, + { "DebugImage" }, { "ForceKid" }, { "ForceKiosk" }, { "IgnoreGamelist" }, diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index bc4267e8bb..47a8cd6222 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -168,6 +168,11 @@ void Window::input(InputConfig* config, Input input) // toggle TextComponent debug view with Ctrl-T Settings::getInstance()->setBool("DebugText", !Settings::getInstance()->getBool("DebugText")); } + else if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_i && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) + { + // toggle TextComponent debug view with Ctrl-I + Settings::getInstance()->setBool("DebugImage", !Settings::getInstance()->getBool("DebugImage")); + } else { if (peekGui()) diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index f51581547c..aefa065ade 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -3,6 +3,7 @@ #include "resources/TextureResource.h" #include "Log.h" #include "Renderer.h" +#include "Settings.h" #include "ThemeData.h" Vector2i ImageComponent::getTextureSize() const @@ -229,6 +230,11 @@ void ImageComponent::render(const Transform4x4f& parentTrans) if(mTexture && mOpacity > 0) { + if(Settings::getInstance()->getBool("DebugImage")) { + Vector2f targetSizePos = (mTargetSize - mSize) * mOrigin * -1; + Renderer::drawRect(targetSizePos.x(), targetSizePos.y(), mTargetSize.x(), mTargetSize.y(), 0xFF000033); + Renderer::drawRect(0.0f, 0.0f, mSize.x(), mSize.y(), 0x00000033); + } if(mTexture->isInitialized()) { // actually draw the image From e9403b6b0065022ffc5c5b0adea71242624c69c7 Mon Sep 17 00:00:00 2001 From: jrassa Date: Mon, 22 Jan 2018 19:34:30 -0500 Subject: [PATCH 235/603] implement horizontal wheel for system carousel. fix image rotation bug in carousel --- es-app/src/views/SystemView.cpp | 27 ++++++++++++++++++----- es-app/src/views/SystemView.h | 3 ++- es-core/src/GuiComponent.cpp | 5 +++-- es-core/src/GuiComponent.h | 2 ++ es-core/src/components/ImageComponent.cpp | 12 +++++++++- es-core/src/components/ImageComponent.h | 5 +++++ 6 files changed, 45 insertions(+), 9 deletions(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 5976226e0b..dd5fdfcd6e 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -55,6 +55,7 @@ void SystemView::populate() ImageComponent* logo = new ImageComponent(mWindow, false, false); logo->setMaxSize(mCarousel.logoSize * mCarousel.logoScale); logo->applyTheme(theme, "system", "logo", ThemeFlags::PATH | ThemeFlags::COLOR); + logo->setRotateByTargetSize(true); e.data.logo = std::shared_ptr(logo); } } @@ -71,9 +72,13 @@ void SystemView::populate() e.data.logo = std::shared_ptr(text); if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) + { text->setHorizontalAlignment(mCarousel.logoAlignment); - else + text->setVerticalAlignment(ALIGN_CENTER); + } else { + text->setHorizontalAlignment(ALIGN_CENTER); text->setVerticalAlignment(mCarousel.logoAlignment); + } } if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) @@ -157,6 +162,7 @@ bool SystemView::input(InputConfig* config, Input input) } break; case HORIZONTAL: + case HORIZONTAL_WHEEL: default: if (config->isMappedTo("left", input)) { @@ -369,7 +375,7 @@ void SystemView::render(const Transform4x4f& parentTrans) std::vector SystemView::getHelpPrompts() { std::vector prompts; - if (mCarousel.type == VERTICAL) + if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) prompts.push_back(HelpPrompt("up/down", "choose")); else prompts.push_back(HelpPrompt("left/right", "choose")); @@ -458,6 +464,15 @@ void SystemView::renderCarousel(const Transform4x4f& trans) else xOff = (mCarousel.size.x() - mCarousel.logoSize.x()) / 2; break; + case HORIZONTAL_WHEEL: + xOff = (mCarousel.size.x() - mCarousel.logoSize.x()) / 2 - (mCamOffset * logoSpacing[1]); + if (mCarousel.logoAlignment == ALIGN_TOP) + yOff = mCarousel.logoSize.y() / 10; + else if (mCarousel.logoAlignment == ALIGN_BOTTOM) + yOff = mCarousel.size.y() - (mCarousel.logoSize.y() * 1.1f); + else + yOff = (mCarousel.size.y() - mCarousel.logoSize.y()) / 2; + break; case HORIZONTAL: default: logoSpacing[0] = ((mCarousel.size.x() - (mCarousel.logoSize.x() * mCarousel.maxLogoCount)) / (mCarousel.maxLogoCount)) + mCarousel.logoSize.x(); @@ -506,7 +521,7 @@ void SystemView::renderCarousel(const Transform4x4f& trans) opacity = Math::max((int) 0x80, opacity); const std::shared_ptr &comp = mEntries.at(index).data.logo; - if (mCarousel.type == VERTICAL_WHEEL) { + if (mCarousel.type == VERTICAL_WHEEL || mCarousel.type == HORIZONTAL_WHEEL) { comp->setRotationDegrees(mCarousel.logoRotation * distance); comp->setRotationOrigin(mCarousel.logoRotationOrigin); } @@ -545,7 +560,7 @@ void SystemView::renderExtras(const Transform4x4f& trans, float lower, float upp if (mShowing || index == mCursor) { Transform4x4f extrasTrans = trans; - if (mCarousel.type == HORIZONTAL) + if (mCarousel.type == HORIZONTAL || mCarousel.type == HORIZONTAL_WHEEL) extrasTrans.translate(Vector3f((i - mExtrasCamOffset) * mSize.x(), 0, 0)); else extrasTrans.translate(Vector3f(0, (i - mExtrasCamOffset) * mSize.y(), 0)); @@ -616,6 +631,8 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) mCarousel.type = VERTICAL; else if (!(elem->get("type").compare("vertical_wheel"))) mCarousel.type = VERTICAL_WHEEL; + else if (!(elem->get("type").compare("horizontal_wheel"))) + mCarousel.type = HORIZONTAL_WHEEL; else mCarousel.type = HORIZONTAL; } @@ -637,7 +654,7 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) mCarousel.zIndex = elem->get("zIndex"); if (elem->has("logoRotation")) mCarousel.logoRotation = elem->get("logoRotation"); - if (elem->has("logoRotationOrigin")) + if (elem->has("logoRotationOrigin")) mCarousel.logoRotationOrigin = elem->get("logoRotationOrigin"); if (elem->has("logoAlignment")) { diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index 02fdf1defa..db1205424a 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -15,7 +15,8 @@ enum CarouselType : unsigned int { HORIZONTAL = 0, VERTICAL = 1, - VERTICAL_WHEEL = 2 + VERTICAL_WHEEL = 2, + HORIZONTAL_WHEEL = 3 }; struct SystemViewData diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 336b92d68b..5d9379fe80 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -252,8 +252,9 @@ const Transform4x4f& GuiComponent::getTransform() if (mRotation != 0.0) { // Calculate offset as difference between origin and rotation origin - float xOff = (mOrigin.x() - mRotationOrigin.x()) * mSize.x(); - float yOff = (mOrigin.y() - mRotationOrigin.y()) * mSize.y(); + Vector2f rotationSize = getRotationSize(); + float xOff = (mOrigin.x() - mRotationOrigin.x()) * rotationSize.x(); + float yOff = (mOrigin.y() - mRotationOrigin.y()) * rotationSize.y(); // transform to offset point if (xOff != 0.0 || yOff != 0.0) diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index e53f63a15d..ff291e54b4 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -61,6 +61,8 @@ class GuiComponent void setSize(float w, float h); virtual void onSizeChanged() {}; + virtual Vector2f getRotationSize() const { return getSize(); }; + float getRotation() const; void setRotation(float rotation); inline void setRotationDegrees(float rotation) { setRotation((float)ES_DEG_TO_RAD(rotation)); } diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index aefa065ade..aa82dce372 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -16,7 +16,7 @@ Vector2i ImageComponent::getTextureSize() const ImageComponent::ImageComponent(Window* window, bool forceLoad, bool dynamic) : GuiComponent(window), mTargetIsMax(false), mFlipX(false), mFlipY(false), mTargetSize(0, 0), mColorShift(0xFFFFFFFF), - mForceLoad(forceLoad), mDynamic(dynamic), mFadeOpacity(0), mFading(false) + mForceLoad(forceLoad), mDynamic(dynamic), mFadeOpacity(0), mFading(false), mRotateByTargetSize(false) { updateColors(); } @@ -142,6 +142,16 @@ void ImageComponent::setMaxSize(float width, float height) resize(); } +Vector2f ImageComponent::getRotationSize() const +{ + return mRotateByTargetSize ? mTargetSize : mSize; +} + +void ImageComponent::setRotateByTargetSize(bool rotate) +{ + mRotateByTargetSize = rotate; +} + void ImageComponent::setFlipX(bool flip) { mFlipX = flip; diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index d95fd6c18a..b557c9b5c4 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -40,12 +40,16 @@ class ImageComponent : public GuiComponent void setMaxSize(float width, float height); inline void setMaxSize(const Vector2f& size) { setMaxSize(size.x(), size.y()); } + Vector2f getRotationSize() const override; + // Multiply all pixels in the image by this color when rendering. void setColorShift(unsigned int color); void setFlipX(bool flip); // Mirror on the X axis. void setFlipY(bool flip); // Mirror on the Y axis. + void setRotateByTargetSize(bool rotate); // Flag indicating if rotation should be based on target size vs. actual size. + // Returns the size of the current texture, or (0, 0) if none is loaded. May be different than drawn size (use getSize() for that). Vector2i getTextureSize() const; @@ -86,6 +90,7 @@ class ImageComponent : public GuiComponent bool mFading; bool mForceLoad; bool mDynamic; + bool mRotateByTargetSize; }; #endif // ES_CORE_COMPONENTS_IMAGE_COMPONENT_H From c1f8e7294c1ee8ed28ea71ca7eee10e659368ac4 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Tue, 9 Jan 2018 23:55:09 +0100 Subject: [PATCH 236/603] Update and rename some Utils::FileSystem functions Replace boost::filesystem::is_directory with Utils::FileSystem::isDirectory Replace boost::filesystem::is_regular_file with Utils::FileSystem::isRegularFile Replace boost::filesystem::is_symlink with Utils::FileSystem::isSymlink Replace boost::filesystem::exists with Utils::FileSystem::exists Replace boost::filesystem::create_directory with Utils::FileSystem::createDirectory Replace boost::filesystem::remove with Utils::FileSystem::removeFile --- es-app/src/CollectionSystemManager.cpp | 21 +- es-app/src/FileData.cpp | 10 +- es-app/src/Gamelist.cpp | 11 +- es-app/src/SystemData.cpp | 25 +- es-app/src/SystemScreenSaver.cpp | 21 +- es-app/src/main.cpp | 10 +- es-app/src/scrapers/Scraper.cpp | 10 +- .../src/views/gamelist/BasicGameListView.cpp | 4 +- .../src/views/gamelist/VideoGameListView.cpp | 4 +- es-core/src/HttpReq.cpp | 5 +- es-core/src/InputManager.cpp | 8 +- es-core/src/Settings.cpp | 6 +- es-core/src/ThemeData.cpp | 9 +- es-core/src/Util.cpp | 7 +- es-core/src/components/VideoComponent.cpp | 6 +- es-core/src/guis/GuiDetectDevice.cpp | 4 +- es-core/src/resources/ResourceManager.cpp | 6 +- es-core/src/utils/FileSystemUtil.cpp | 218 +++++++++++------- es-core/src/utils/FileSystemUtil.h | 46 ++-- 19 files changed, 244 insertions(+), 187 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 6aea7e108c..4b439546b4 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -1,6 +1,7 @@ #include "CollectionSystemManager.h" #include "guis/GuiInfoPopup.h" +#include "utils/FileSystemUtil.h" #include "utils/StringUtil.h" #include "views/gamelist/IGameListView.h" #include "views/ViewController.h" @@ -50,8 +51,8 @@ CollectionSystemManager::CollectionSystemManager(Window* window) : mWindow(windo mCollectionEnvData->mPlatformIds = allPlatformIds; std::string path = getCollectionsFolder(); - if(!boost::filesystem::exists(path)) - boost::filesystem::create_directory(path); + if(!Utils::FileSystem::exists(path)) + Utils::FileSystem::createDirectory(path); mIsEditingCustom = false; mEditingCollection = "Favorites"; @@ -332,7 +333,7 @@ bool CollectionSystemManager::isThemeCustomCollectionCompatible(std::vectorsecond.path.string() + "/theme.xml"; - if (boost::filesystem::exists(defaultThemeFilePath)) + if (Utils::FileSystem::exists(defaultThemeFilePath)) { return true; } @@ -722,7 +723,7 @@ void CollectionSystemManager::populateCustomCollection(CollectionSystemData* sys CollectionSystemDecl sysDecl = sysData->decl; std::string path = getCustomCollectionConfigPath(newSys->getName()); - if(!boost::filesystem::exists(path)) + if(!Utils::FileSystem::exists(path)) { LOG(LogInfo) << "Couldn't find custom collection config file at " << path; return; @@ -829,7 +830,7 @@ std::vector CollectionSystemManager::getSystemsFromConfig() std::vector systems; std::string path = SystemData::getConfigPath(false); - if(!boost::filesystem::exists(path)) + if(!Utils::FileSystem::exists(path)) { return systems; } @@ -882,18 +883,18 @@ std::vector CollectionSystemManager::getSystemsFromTheme() boost::filesystem::path themePath = set->second.path; - if (boost::filesystem::exists(themePath)) + if (Utils::FileSystem::exists(themePath.generic_string())) { boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end for (boost::filesystem::directory_iterator itr(themePath); itr != end_itr; ++itr) { - if (boost::filesystem::is_directory(itr->status())) + if (Utils::FileSystem::isDirectory(itr->path().generic_string())) { //... here you have a directory std::string folder = itr->path().string(); folder = folder.substr(themePath.string().size()+1); - if(boost::filesystem::exists(set->second.getThemePath(folder))) + if(Utils::FileSystem::exists(set->second.getThemePath(folder).generic_string())) { systems.push_back(folder); } @@ -942,12 +943,12 @@ std::vector CollectionSystemManager::getCollectionsFromConfigFolder std::vector systems; boost::filesystem::path configPath = getCollectionsFolder(); - if (boost::filesystem::exists(configPath)) + if (Utils::FileSystem::exists(configPath.generic_string())) { boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end for (boost::filesystem::directory_iterator itr(configPath); itr != end_itr; ++itr) { - if (boost::filesystem::is_regular_file(itr->status())) + if (Utils::FileSystem::isRegularFile(itr->path().generic_string())) { // it's a file std::string file = itr->path().string(); diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 9006901ffa..4e2177df20 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -1,5 +1,6 @@ #include "FileData.h" +#include "utils/FileSystemUtil.h" #include "utils/StringUtil.h" #include "utils/TimeUtil.h" #include "AudioManager.h" @@ -12,7 +13,6 @@ #include "Util.h" #include "VolumeControl.h" #include "Window.h" -#include FileData::FileData(FileType type, const boost::filesystem::path& path, SystemEnvironmentData* envData, SystemData* system) : mType(type), mPath(path), mSystem(system), mEnvData(envData), mSourceFileData(NULL), mParent(NULL), metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA) // metadata is REALLY set in the constructor! @@ -66,7 +66,7 @@ const std::string FileData::getThumbnailPath() const if(thumbnail.empty()) { std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-image" + extList[i]; - if(boost::filesystem::exists(path)) + if(Utils::FileSystem::exists(path)) thumbnail = path; } } @@ -109,7 +109,7 @@ const std::string FileData::getVideoPath() const if(video.empty()) { std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-video.mp4"; - if(boost::filesystem::exists(path)) + if(Utils::FileSystem::exists(path)) video = path; } @@ -129,7 +129,7 @@ const std::string FileData::getMarqueePath() const if(marquee.empty()) { std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-marquee" + extList[i]; - if(boost::filesystem::exists(path)) + if(Utils::FileSystem::exists(path)) marquee = path; } } @@ -151,7 +151,7 @@ const std::string FileData::getImagePath() const if(image.empty()) { std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-image" + extList[i]; - if(boost::filesystem::exists(path)) + if(Utils::FileSystem::exists(path)) image = path; } } diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 6c42932188..2a3e92661a 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -1,5 +1,6 @@ #include "Gamelist.h" +#include "utils/FileSystemUtil.h" #include "FileData.h" #include "FileFilterIndex.h" #include "Log.h" @@ -87,7 +88,7 @@ void parseGamelist(SystemData* system) bool trustGamelist = Settings::getInstance()->getBool("ParseGamelistOnly"); std::string xmlpath = system->getGamelistPath(false); - if(!boost::filesystem::exists(xmlpath)) + if(!Utils::FileSystem::exists(xmlpath)) return; LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\"..."; @@ -120,7 +121,7 @@ void parseGamelist(SystemData* system) { boost::filesystem::path path = resolvePath(fileNode.child("path").text().get(), relativeTo, false); - if(!trustGamelist && !boost::filesystem::exists(path)) + if(!trustGamelist && !Utils::FileSystem::exists(path.generic_string())) { LOG(LogWarning) << "File \"" << path << "\" does not exist! Ignoring."; continue; @@ -183,7 +184,7 @@ void updateGamelist(SystemData* system) pugi::xml_node root; std::string xmlReadPath = system->getGamelistPath(false); - if(boost::filesystem::exists(xmlReadPath)) + if(Utils::FileSystem::exists(xmlReadPath)) { //parse an existing file first pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); @@ -241,7 +242,7 @@ void updateGamelist(SystemData* system) boost::filesystem::path nodePath = resolvePath(pathNode.text().get(), system->getStartPath(), true); boost::filesystem::path gamePath((*fit)->getPath()); - if(nodePath == gamePath || (boost::filesystem::exists(nodePath) && boost::filesystem::exists(gamePath) && boost::filesystem::equivalent(nodePath, gamePath))) + if(nodePath == gamePath || (Utils::FileSystem::exists(nodePath.generic_string()) && Utils::FileSystem::exists(gamePath.generic_string()) && boost::filesystem::equivalent(nodePath, gamePath))) { // found it root.remove_child(fileNode); @@ -259,7 +260,7 @@ void updateGamelist(SystemData* system) if (numUpdated > 0) { //make sure the folders leading up to this path exist (or the write will fail) boost::filesystem::path xmlWritePath(system->getGamelistPath(true)); - boost::filesystem::create_directories(xmlWritePath.parent_path()); + Utils::FileSystem::createDirectory(xmlWritePath.parent_path().generic_string()); LOG(LogInfo) << "Added/Updated " << numUpdated << " entities in '" << xmlReadPath << "'"; diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index ad9c1f84e8..7115d08bc0 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -1,5 +1,6 @@ #include "SystemData.h" +#include "utils/FileSystemUtil.h" #include "CollectionSystemManager.h" #include "FileFilterIndex.h" #include "FileSorts.h" @@ -82,7 +83,7 @@ bool isHidden(const boost::filesystem::path &filePath) void SystemData::populateFolder(FileData* folder) { const boost::filesystem::path& folderPath = folder->getPath(); - if(!boost::filesystem::is_directory(folderPath)) + if(!Utils::FileSystem::isDirectory(folderPath.generic_string())) { LOG(LogWarning) << "Error - folder with path \"" << folderPath << "\" is not a directory!"; return; @@ -91,7 +92,7 @@ void SystemData::populateFolder(FileData* folder) const std::string folderStr = folderPath.generic_string(); //make sure that this isn't a symlink to a thing we already have - if(boost::filesystem::is_symlink(folderPath)) + if(Utils::FileSystem::isSymlink(folderPath.generic_string())) { //if this symlink resolves to somewhere that's at the beginning of our path, it's gonna recurse if(folderStr.find(boost::filesystem::canonical(folderPath).generic_string()) == 0) @@ -132,7 +133,7 @@ void SystemData::populateFolder(FileData* folder) } //add directories that also do not match an extension as folders - if(!isGame && boost::filesystem::is_directory(filePath)) + if(!isGame && Utils::FileSystem::isDirectory(filePath.generic_string())) { FileData* newFolder = new FileData(FOLDER, filePath.generic_string(), mEnvData, this); populateFolder(newFolder); @@ -186,7 +187,7 @@ bool SystemData::loadConfig() LOG(LogInfo) << "Loading system config file " << path << "..."; - if(!boost::filesystem::exists(path)) + if(!Utils::FileSystem::exists(path)) { LOG(LogError) << "es_systems.cfg file does not exist!"; writeExampleConfig(getConfigPath(true)); @@ -349,7 +350,7 @@ void SystemData::deleteSystems() std::string SystemData::getConfigPath(bool forWrite) { boost::filesystem::path path = getHomePath() + "/.emulationstation/es_systems.cfg"; - if(forWrite || boost::filesystem::exists(path)) + if(forWrite || Utils::FileSystem::exists(path.generic_string())) return path.generic_string(); return "/etc/emulationstation/es_systems.cfg"; @@ -388,13 +389,13 @@ std::string SystemData::getGamelistPath(bool forWrite) const boost::filesystem::path filePath; filePath = mRootFolder->getPath() / "gamelist.xml"; - if(boost::filesystem::exists(filePath)) + if(Utils::FileSystem::exists(filePath.generic_string())) return filePath.generic_string(); filePath = getHomePath() + "/.emulationstation/gamelists/" + mName + "/gamelist.xml"; if(forWrite) // make sure the directory exists if we're going to write to it, or crashes will happen - boost::filesystem::create_directories(filePath.parent_path()); - if(forWrite || boost::filesystem::exists(filePath)) + Utils::FileSystem::createDirectory(filePath.parent_path().generic_string()); + if(forWrite || Utils::FileSystem::exists(filePath.generic_string())) return filePath.generic_string(); return "/etc/emulationstation/gamelists/" + mName + "/gamelist.xml"; @@ -409,13 +410,13 @@ std::string SystemData::getThemePath() const // first, check game folder boost::filesystem::path localThemePath = mRootFolder->getPath() / "theme.xml"; - if(boost::filesystem::exists(localThemePath)) + if(Utils::FileSystem::exists(localThemePath.generic_string())) return localThemePath.generic_string(); // not in game folder, try system theme in theme sets localThemePath = ThemeData::getThemeFromCurrentSet(mThemeFolder); - if (boost::filesystem::exists(localThemePath)) + if (Utils::FileSystem::exists(localThemePath.generic_string())) return localThemePath.generic_string(); // not system theme, try default system theme in theme set @@ -426,7 +427,7 @@ std::string SystemData::getThemePath() const bool SystemData::hasGamelist() const { - return (boost::filesystem::exists(getGamelistPath(false))); + return (Utils::FileSystem::exists(getGamelistPath(false))); } unsigned int SystemData::getGameCount() const @@ -488,7 +489,7 @@ void SystemData::loadTheme() std::string path = getThemePath(); - if(!boost::filesystem::exists(path)) // no theme available for this platform + if(!Utils::FileSystem::exists(path)) // no theme available for this platform return; try diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index e2efdf93fd..c82b7a445e 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -4,6 +4,7 @@ #include "components/VideoPlayerComponent.h" #endif #include "components/VideoVlcComponent.h" +#include "utils/FileSystemUtil.h" #include "views/gamelist/IGameListView.h" #include "views/ViewController.h" #include "FileData.h" @@ -38,8 +39,8 @@ SystemScreenSaver::SystemScreenSaver(Window* window) : { mWindow->setScreenSaver(this); std::string path = getTitleFolder(); - if(!boost::filesystem::exists(path)) - boost::filesystem::create_directory(path); + if(!Utils::FileSystem::exists(path)) + Utils::FileSystem::createDirectory(path); srand((unsigned int)time(NULL)); mVideoChangeTime = 30000; } @@ -81,13 +82,13 @@ void SystemScreenSaver::startScreenSaver() pickRandomVideo(path); int retry = 200; - while(retry > 0 && ((path.empty() || !boost::filesystem::exists(path)) || mCurrentGame == NULL)) + while(retry > 0 && ((path.empty() || !Utils::FileSystem::exists(path)) || mCurrentGame == NULL)) { retry--; pickRandomVideo(path); } - if (!path.empty() && boost::filesystem::exists(path)) + if (!path.empty() && Utils::FileSystem::exists(path)) { #ifdef _RPI_ // Create the correct type of video component @@ -164,7 +165,7 @@ void SystemScreenSaver::startScreenSaver() std::string bg_audio_file = Settings::getInstance()->getString("SlideshowScreenSaverBackgroundAudioFile"); if ((!mBackgroundAudio) && (bg_audio_file != "")) { - if (boost::filesystem::exists(bg_audio_file)) + if (Utils::FileSystem::exists(bg_audio_file)) { // paused PS so that the background audio keeps playing PowerSaver::pause(); @@ -269,7 +270,7 @@ unsigned long SystemScreenSaver::countGameListNodes(const char *nodeName) pugi::xml_node root; std::string xmlReadPath = (*it)->getGamelistPath(false); - if(boost::filesystem::exists(xmlReadPath)) + if(Utils::FileSystem::exists(xmlReadPath)) { pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); if (!result) @@ -321,7 +322,7 @@ void SystemScreenSaver::pickGameListNode(unsigned long index, const char *nodeNa std::string xmlReadPath = (*it)->getGamelistPath(false); - if(boost::filesystem::exists(xmlReadPath)) + if(Utils::FileSystem::exists(xmlReadPath)) { pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); if (!result) @@ -416,7 +417,7 @@ void SystemScreenSaver::pickRandomGameListImage(std::string& path) void SystemScreenSaver::pickRandomCustomImage(std::string& path) { std::string imageDir = Settings::getInstance()->getString("SlideshowScreenSaverImageDir"); - if ((imageDir != "") && (boost::filesystem::exists(imageDir))) + if ((imageDir != "") && (Utils::FileSystem::exists(imageDir))) { std::string imageFilter = Settings::getInstance()->getString("SlideshowScreenSaverImageFilter"); @@ -430,7 +431,7 @@ void SystemScreenSaver::pickRandomCustomImage(std::string& path) // TODO: Figure out how to remove this duplication in the else block for (iter; iter != end_iter; ++iter) { - if (boost::filesystem::is_regular_file(iter->status())) + if (Utils::FileSystem::isRegularFile(iter->path().generic_string())) { // If the image filter is empty, or the file extension is in the filter string, // add it to the matching files list @@ -449,7 +450,7 @@ void SystemScreenSaver::pickRandomCustomImage(std::string& path) for (iter; iter != end_iter; ++iter) { - if (boost::filesystem::is_regular_file(iter->status())) + if (Utils::FileSystem::isRegularFile(iter->path().generic_string())) { // If the image filter is empty, or the file extension is in the filter string, // add it to the matching files list diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 23f8e982b2..4e4bf070fc 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -3,6 +3,7 @@ #include "guis/GuiDetectDevice.h" #include "guis/GuiMsgBox.h" +#include "utils/FileSystemUtil.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" #include "EmulationStation.h" @@ -14,7 +15,6 @@ #include "Settings.h" #include "SystemData.h" #include "SystemScreenSaver.h" -#include #include #include #include @@ -169,11 +169,11 @@ bool verifyHomeFolderExists() //make sure the config directory exists std::string home = getHomePath(); std::string configDir = home + "/.emulationstation"; - if(!boost::filesystem::exists(configDir)) + if(!Utils::FileSystem::exists(configDir)) { std::cout << "Creating config directory \"" << configDir << "\"\n"; - boost::filesystem::create_directory(configDir); - if(!boost::filesystem::exists(configDir)) + Utils::FileSystem::createDirectory(configDir); + if(!Utils::FileSystem::exists(configDir)) { std::cerr << "Config directory could not be created!\n"; return false; @@ -335,7 +335,7 @@ int main(int argc, char* argv[]) //choose which GUI to open depending on if an input configuration already exists if(errorMsg == NULL) { - if(boost::filesystem::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) + if(Utils::FileSystem::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) { ViewController::get()->goToStart(); }else{ diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index af970891d1..f6d7de7763 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -1,12 +1,12 @@ #include "scrapers/Scraper.h" +#include "utils/FileSystemUtil.h" #include "FileData.h" #include "GamesDBScraper.h" #include "Log.h" #include "platform.h" #include "Settings.h" #include "SystemData.h" -#include #include #include @@ -278,13 +278,13 @@ std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& std::string path = getHomePath() + "/.emulationstation/downloaded_images/"; - if(!boost::filesystem::exists(path)) - boost::filesystem::create_directory(path); + if(!Utils::FileSystem::exists(path)) + Utils::FileSystem::createDirectory(path); path += subdirectory + "/"; - if(!boost::filesystem::exists(path)) - boost::filesystem::create_directory(path); + if(!Utils::FileSystem::exists(path)) + Utils::FileSystem::createDirectory(path); size_t dot = url.find_last_of('.'); std::string ext; diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index d4803edd02..4f61d3fa8b 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -1,11 +1,11 @@ #include "views/gamelist/BasicGameListView.h" +#include "utils/FileSystemUtil.h" #include "views/UIModeController.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" #include "Settings.h" #include "SystemData.h" -#include BasicGameListView::BasicGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), mList(window) @@ -105,7 +105,7 @@ void BasicGameListView::launch(FileData* game) void BasicGameListView::remove(FileData *game, bool deleteFile) { if (deleteFile) - boost::filesystem::remove(game->getPath()); // actually delete the file on the filesystem + Utils::FileSystem::removeFile(game->getPath().generic_string()); // actually delete the file on the filesystem FileData* parent = game->getParent(); if (getCursor() == game) // Select next element in list, or prev if none { diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index a75df55f9a..6de7caf8f3 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -5,11 +5,11 @@ #include "components/VideoPlayerComponent.h" #endif #include "components/VideoVlcComponent.h" +#include "utils/FileSystemUtil.h" #include "views/ViewController.h" #ifdef _RPI_ #include "Settings.h" #endif -#include VideoGameListView::VideoGameListView(Window* window, FileData* root) : BasicGameListView(window, root), @@ -224,7 +224,7 @@ void VideoGameListView::updateInfoPanel() { FileData* file = (mList.size() == 0 || mList.isScrolling()) ? NULL : mList.getSelected(); - boost::filesystem::remove(getTitlePath().c_str()); + Utils::FileSystem::removeFile(getTitlePath()); bool fadingOut; if(file == NULL) diff --git a/es-core/src/HttpReq.cpp b/es-core/src/HttpReq.cpp index f30d663c5f..7005b2409e 100644 --- a/es-core/src/HttpReq.cpp +++ b/es-core/src/HttpReq.cpp @@ -1,7 +1,8 @@ #include "HttpReq.h" +#include "utils/FileSystemUtil.h" #include "Log.h" -#include +#include CURLM* HttpReq::s_multi_handle = curl_multi_init(); @@ -32,7 +33,7 @@ std::string HttpReq::urlEncode(const std::string &s) bool HttpReq::isUrl(const std::string& str) { //the worst guess - return (!str.empty() && !boost::filesystem::exists(str) && + return (!str.empty() && !Utils::FileSystem::exists(str) && (str.find("http://") != std::string::npos || str.find("https://") != std::string::npos || str.find("www.") != std::string::npos)); } diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 9e7901312b..c91adbafc2 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -1,10 +1,10 @@ #include "InputManager.h" +#include "utils/FileSystemUtil.h" #include "CECInput.h" #include "Log.h" #include "platform.h" #include "Window.h" -#include #include #include #include @@ -278,7 +278,7 @@ bool InputManager::parseEvent(const SDL_Event& ev, Window* window) bool InputManager::loadInputConfig(InputConfig* config) { std::string path = getConfigPath(); - if(!boost::filesystem::exists(path)) + if(!Utils::FileSystem::exists(path)) return false; pugi::xml_document doc; @@ -333,7 +333,7 @@ void InputManager::writeDeviceConfig(InputConfig* config) pugi::xml_document doc; - if(boost::filesystem::exists(path)) + if(Utils::FileSystem::exists(path)) { // merge files pugi::xml_parse_result result = doc.load_file(path.c_str()); @@ -394,7 +394,7 @@ void InputManager::doOnFinish() std::string path = getConfigPath(); pugi::xml_document doc; - if(boost::filesystem::exists(path)) + if(Utils::FileSystem::exists(path)) { pugi::xml_parse_result result = doc.load_file(path.c_str()); if(!result) diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index a18f002f33..fcf16661b8 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -1,9 +1,11 @@ #include "Settings.h" +#include "utils/FileSystemUtil.h" #include "Log.h" #include "platform.h" -#include #include +#include +#include Settings* Settings::sInstance = NULL; @@ -185,7 +187,7 @@ void Settings::loadFile() { const std::string path = getHomePath() + "/.emulationstation/es_settings.cfg"; - if(!boost::filesystem::exists(path)) + if(!Utils::FileSystem::exists(path)) return; pugi::xml_document doc; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index c6609d52a5..9f55ec9442 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -2,6 +2,7 @@ #include "components/ImageComponent.h" #include "components/TextComponent.h" +#include "utils/FileSystemUtil.h" #include "Log.h" #include "platform.h" #include "Settings.h" @@ -205,7 +206,7 @@ void ThemeData::loadFile(std::map sysDataMap, const st ThemeException error; error.setFiles(mPaths); - if(!boost::filesystem::exists(path)) + if(!Utils::FileSystem::exists(path)) throw error << "File does not exist!"; mVersion = 0; @@ -484,7 +485,7 @@ const std::shared_ptr& ThemeData::getDefault() theme = std::shared_ptr(new ThemeData()); const std::string path = getHomePath() + "/.emulationstation/es_theme_default.xml"; - if(boost::filesystem::exists(path)) + if(Utils::FileSystem::exists(path)) { try { @@ -544,12 +545,12 @@ std::map ThemeData::getThemeSets() for(size_t i = 0; i < pathCount; i++) { - if(!boost::filesystem::is_directory(paths[i])) + if(!Utils::FileSystem::isDirectory(paths[i].generic_string())) continue; for(boost::filesystem::directory_iterator it(paths[i]); it != end; ++it) { - if(boost::filesystem::is_directory(*it)) + if(Utils::FileSystem::isDirectory((*it).path().generic_string())) { ThemeSet set = {*it}; sets[set.getName()] = set; diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index 79234c70f4..04cc6f170e 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -1,5 +1,6 @@ #include "Util.h" +#include "utils/FileSystemUtil.h" #include "platform.h" #include @@ -27,7 +28,7 @@ std::string strToUpper(const std::string& str) // embedded resources, e.g. ":/font.ttf", need to be properly handled too std::string getCanonicalPath(const std::string& path) { - if(path.empty() || !boost::filesystem::exists(path)) + if(path.empty() || !Utils::FileSystem::exists(path)) return path; return boost::filesystem::canonical(path).generic_string(); @@ -83,14 +84,14 @@ boost::filesystem::path removeCommonPathUsingStrings(const boost::filesystem::pa boost::filesystem::path removeCommonPath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains) { // if either of these doesn't exist, boost::filesystem::canonical() is going to throw an error - if(!boost::filesystem::exists(path) || !boost::filesystem::exists(relativeTo)) + if(!Utils::FileSystem::exists(path.generic_string()) || !Utils::FileSystem::exists(relativeTo.generic_string())) { contains = false; return path; } // if it's a symlink we don't want to apply boost::filesystem::canonical on it, otherwise we'll lose the current parent_path - boost::filesystem::path p = (boost::filesystem::is_symlink(path) ? boost::filesystem::canonical(path.parent_path()) / path.filename() : boost::filesystem::canonical(path)); + boost::filesystem::path p = (Utils::FileSystem::isSymlink(path.generic_string()) ? boost::filesystem::canonical(path.parent_path()) / path.filename() : boost::filesystem::canonical(path)); boost::filesystem::path r = boost::filesystem::canonical(relativeTo); if(p.root_path() != r.root_path()) diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 9b4f585f6e..cbbc535a61 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -1,12 +1,12 @@ #include "components/VideoComponent.h" #include "resources/ResourceManager.h" +#include "utils/FileSystemUtil.h" #include "PowerSaver.h" #include "Renderer.h" #include "ThemeData.h" #include "Util.h" #include "Window.h" -#include #include #define FADE_TIME_MS 200 @@ -75,8 +75,8 @@ VideoComponent::VideoComponent(Window* window) : } std::string path = getTitleFolder(); - if(!boost::filesystem::exists(path)) - boost::filesystem::create_directory(path); + if(!Utils::FileSystem::exists(path)) + Utils::FileSystem::createDirectory(path); } VideoComponent::~VideoComponent() diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index 6d3f5b0964..a8555f8bd9 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -2,12 +2,12 @@ #include "components/TextComponent.h" #include "guis/GuiInputConfig.h" +#include "utils/FileSystemUtil.h" #include "InputManager.h" #include "PowerSaver.h" #include "Renderer.h" #include "Util.h" #include "Window.h" -#include #define HOLD_TIME 1000 @@ -102,7 +102,7 @@ void GuiDetectDevice::update(int deltaTime) if(mHoldingConfig) { // If ES starts and if a known device is connected after startup skip controller configuration - if(mFirstRun && boost::filesystem::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) + if(mFirstRun && Utils::FileSystem::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) { if(mDoneCallback) mDoneCallback(); diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index 5134a07313..348d7880b0 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -1,7 +1,7 @@ #include "ResourceManager.h" #include "../data/Resources.h" -#include +#include "utils/FileSystemUtil.h" #include auto array_deleter = [](unsigned char* p) { delete[] p; }; @@ -37,7 +37,7 @@ const ResourceData ResourceManager::getFileData(const std::string& path) const } //it's not embedded; load the file - if(!boost::filesystem::exists(path)) + if(!Utils::FileSystem::exists(path)) { //if the file doesn't exist, return an "empty" ResourceData ResourceData data = {NULL, 0}; @@ -71,7 +71,7 @@ bool ResourceManager::fileExists(const std::string& path) const if(res2hMap.find(path) != res2hMap.cend()) return true; - return boost::filesystem::exists(path); + return Utils::FileSystem::exists(path); } void ResourceManager::unloadAll() diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 1d282cb620..04c9a821b5 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -23,7 +23,7 @@ namespace Utils { stringList getDirContent(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); stringList contentList; // only parse the directory, if it's a directory @@ -90,7 +90,7 @@ namespace Utils // this should give us something like "/home/YOUR_USERNAME" on Linux and "C:/Users/YOUR_USERNAME/" on Windows std::string envHome(getenv("HOME")); if(envHome.length()) - path = genericPath(envHome); + path = getGenericPath(envHome); #if defined(_WIN32) // but does not seem to work for Windows XP or Vista, so try something else @@ -99,7 +99,7 @@ namespace Utils std::string envDir(getenv("HOMEDRIVE")); std::string envPath(getenv("HOMEPATH")); if(envDir.length() && envPath.length()) - path = genericPath(envDir + "/" + envPath); + path = getGenericPath(envDir + "/" + envPath); } #endif // _WIN32 @@ -115,11 +115,11 @@ namespace Utils char temp[512]; // return current working directory path - return (getcwd(temp, 512) ? genericPath(temp) : ""); + return (getcwd(temp, 512) ? getGenericPath(temp) : ""); } // getCWDPath - std::string genericPath(const std::string& _path) + std::string getGenericPath(const std::string& _path) { std::string path = _path; size_t offset = std::string::npos; @@ -139,11 +139,11 @@ namespace Utils // return generic path return path; - } // genericPath + } // getGenericPath - std::string escapedPath(const std::string& _path) + std::string getEscapedPath(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); #if defined(_WIN32) // windows escapes stuff by just putting everything in quotes @@ -166,11 +166,11 @@ namespace Utils return path; #endif // _WIN32 - } // escapedPath + } // getEscapedPath - std::string canonicalPath(const std::string& _path) + std::string getCanonicalPath(const std::string& _path) { - std::string path = absolutePath(_path); + std::string path = exists(_path) ? getAbsolutePath(_path) : getGenericPath(_path); // cleanup path bool scan = true; @@ -244,78 +244,21 @@ namespace Utils // return canonical path return path; - } // canonicalPath + } // getCanonicalPath - std::string absolutePath(const std::string& _path, const std::string& _base) + std::string getAbsolutePath(const std::string& _path, const std::string& _base) { - std::string path = genericPath(_path); - std::string base = isAbsolute(_base) ? genericPath(_base) : absolutePath(_base); + std::string path = getGenericPath(_path); + std::string base = isAbsolute(_base) ? getGenericPath(_base) : getAbsolutePath(_base); // return absolute path - return isAbsolute(path) ? path : genericPath(base + "/" + path); + return isAbsolute(path) ? path : getGenericPath(base + "/" + path); - } // absolutePath - - std::string resolvePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome) - { - std::string path = genericPath(_path); - std::string relativeTo = isDirectory(_relativeTo) ? _relativeTo : getParent(_relativeTo); - - // nothing to resolve - if(!path.length()) - return path; - - // replace '.' with relativeTo - if(path[0] == '.') - return genericPath(relativeTo + "/" + &(path[1])); - - // replace '~' with homePath - if(_allowHome && (path[0] == '~')) - return genericPath(getHomePath() + "/" + &(path[1])); - - // nothing to resolve - return path; - - } // resolvePath - - std::string resolveSymlink(const std::string& _path) - { - std::string path = genericPath(_path); - std::string resolved; - -#if defined(_WIN32) - HANDLE hFile = CreateFile(path.c_str(), FILE_READ_ATTRIBUTES, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); - - if(hFile != INVALID_HANDLE_VALUE) - { - resolved.resize(GetFinalPathNameByHandle(hFile, nullptr, 0, FILE_NAME_NORMALIZED) + 1); - if(GetFinalPathNameByHandle(hFile, (LPSTR)resolved.data(), (DWORD)resolved.size(), FILE_NAME_NORMALIZED) > 0) - { - resolved.resize(resolved.size() - 1); - resolved = genericPath(resolved); - } - CloseHandle(hFile); - } -#else // _WIN32 - struct stat info; - - // check if lstat succeeded - if(lstat(path.c_str(), &info) == 0) - { - resolved.resize(info.st_size); - if(readlink(path.c_str(), (char*)resolved.data(), resolved.size()) > 0) - resolved = genericPath(resolved); - } -#endif // _WIN32 - - // return resolved path - return resolved; - - } // resolveSymlink + } // getAbsolutePath std::string getParent(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); size_t offset = std::string::npos; // find last '/' and erase it @@ -329,7 +272,7 @@ namespace Utils std::string getFileName(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); size_t offset = std::string::npos; // find last '/' and return the filename @@ -377,9 +320,112 @@ namespace Utils } // getExtension + std::string resolveRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome) + { + std::string path = getGenericPath(_path); + std::string relativeTo = isDirectory(_relativeTo) ? getGenericPath(_relativeTo) : getParent(_relativeTo); + + // nothing to resolve + if (!path.length()) + return path; + + // replace '.' with relativeTo + if (path[0] == '.') + return (relativeTo + "/" + &(path[1])); + + // replace '~' with homePath + if (_allowHome && (path[0] == '~')) + return (getHomePath() + "/" + &(path[1])); + + // nothing to resolve + return path; + + } // resolveRelativePath + + std::string createRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome) + { + bool contains = false; + std::string path = removeCommonPath(_path, _relativeTo, contains); + + if (contains) + { + // success + return ("." + path); + } + + if (_allowHome) + { + contains = false; + std::string path = removeCommonPath(_path, getHomePath(), contains); + + if (contains) + { + // success + return ("~" + path); + } + } + + // nothing to resolve + return path; + + } // createRelativePath + + std::string removeCommonPath(const std::string& _path, const std::string& _common, bool& _contains) + { + std::string path = getGenericPath(_path); + std::string common = isDirectory(_common) ? getGenericPath(_common) : getParent(_common); + + // check if path contains common + if (path.find_first_of(common) == 0) + { + _contains = true; + return path.substr(common.length() + 1); + } + + // it didn't + _contains = false; + return path; + + } // removeCommonPath + + std::string resolveSymlink(const std::string& _path) + { + std::string path = getGenericPath(_path); + std::string resolved; + +#if defined(_WIN32) + HANDLE hFile = CreateFile(path.c_str(), FILE_READ_ATTRIBUTES, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); + + if (hFile != INVALID_HANDLE_VALUE) + { + resolved.resize(GetFinalPathNameByHandle(hFile, nullptr, 0, FILE_NAME_NORMALIZED) + 1); + if (GetFinalPathNameByHandle(hFile, (LPSTR)resolved.data(), (DWORD)resolved.size(), FILE_NAME_NORMALIZED) > 0) + { + resolved.resize(resolved.size() - 1); + resolved = getGenericPath(resolved); + } + CloseHandle(hFile); + } +#else // _WIN32 + struct stat info; + + // check if lstat succeeded + if (lstat(path.c_str(), &info) == 0) + { + resolved.resize(info.st_size); + if (readlink(path.c_str(), (char*)resolved.data(), resolved.size()) > 0) + resolved = getGenericPath(resolved); + } +#endif // _WIN32 + + // return resolved path + return resolved; + + } // resolveSymlink + bool removeFile(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); // don't remove if it doesn't exists if(!exists(path)) @@ -392,7 +438,7 @@ namespace Utils bool createDirectory(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); // don't create if it already exists if(exists(path)) @@ -416,7 +462,7 @@ namespace Utils bool exists(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); struct stat info; // check if stat succeeded @@ -426,7 +472,7 @@ namespace Utils bool isAbsolute(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); #if defined(_WIN32) return ((path.size() > 1) && (path[1] == ':')); @@ -438,7 +484,7 @@ namespace Utils bool isRegularFile(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); struct stat info; // check if stat succeeded @@ -452,7 +498,7 @@ namespace Utils bool isDirectory(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); struct stat info; // check if stat succeeded @@ -466,7 +512,7 @@ namespace Utils bool isSymlink(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); #if defined(_WIN32) // check for symlink attribute @@ -491,7 +537,7 @@ namespace Utils bool isHidden(const std::string& _path) { - std::string path = genericPath(_path); + std::string path = getGenericPath(_path); #if defined(_WIN32) // check for hidden attribute @@ -511,8 +557,8 @@ namespace Utils bool isEquivalent(const std::string& _path1, const std::string& _path2) { - std::string path1 = genericPath(_path1); - std::string path2 = genericPath(_path2); + std::string path1 = getGenericPath(_path1); + std::string path2 = getGenericPath(_path2); struct stat info1; struct stat info2; diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index 2d90d6951a..5d4e705c60 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -11,28 +11,30 @@ namespace Utils { typedef std::list stringList; - stringList getDirContent (const std::string& _path); - std::string getHomePath (); - std::string getCWDPath (); - std::string genericPath (const std::string& _path); - std::string escapedPath (const std::string& _path); - std::string canonicalPath (const std::string& _path); - std::string absolutePath (const std::string& _path, const std::string& _base = getCWDPath()); - std::string resolvePath (const std::string& _path, const std::string& _relativeTo, const bool _allowHome); - std::string resolveSymlink (const std::string& _path); - std::string getParent (const std::string& _path); - std::string getFileName (const std::string& _path); - std::string getStem (const std::string& _path); - std::string getExtension (const std::string& _path); - bool removeFile (const std::string& _path); - bool createDirectory(const std::string& _path); - bool exists (const std::string& _path); - bool isAbsolute (const std::string& _path); - bool isRegularFile (const std::string& _path); - bool isDirectory (const std::string& _path); - bool isSymlink (const std::string& _path); - bool isHidden (const std::string& _path); - bool isEquivalent (const std::string& _path1, const std::string& _path2); + stringList getDirContent (const std::string& _path); + std::string getHomePath (); + std::string getCWDPath (); + std::string getGenericPath (const std::string& _path); + std::string getEscapedPath (const std::string& _path); + std::string getCanonicalPath (const std::string& _path); + std::string getAbsolutePath (const std::string& _path, const std::string& _base = getCWDPath()); + std::string getParent (const std::string& _path); + std::string getFileName (const std::string& _path); + std::string getStem (const std::string& _path); + std::string getExtension (const std::string& _path); + std::string resolveRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome); + std::string createRelativePath (const std::string& _path, const std::string& _relativeTo, const bool _allowHome); + std::string removeCommonPath (const std::string& _path, const std::string& _common, bool& _contains); + std::string resolveSymlink (const std::string& _path); + bool removeFile (const std::string& _path); + bool createDirectory (const std::string& _path); + bool exists (const std::string& _path); + bool isAbsolute (const std::string& _path); + bool isRegularFile (const std::string& _path); + bool isDirectory (const std::string& _path); + bool isSymlink (const std::string& _path); + bool isHidden (const std::string& _path); + bool isEquivalent (const std::string& _path1, const std::string& _path2); } // FileSystem:: From ca177f79563a638215b93150e5d4057144ef296d Mon Sep 17 00:00:00 2001 From: John Rassa Date: Wed, 24 Jan 2018 14:45:13 -0500 Subject: [PATCH 237/603] updated theme docs to add details about horizontal_wheel --- THEMES.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/THEMES.md b/THEMES.md index 504730ce81..9f612d1992 100644 --- a/THEMES.md +++ b/THEMES.md @@ -676,7 +676,7 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice * `type` - type: STRING. - Sets the scoll direction of the carousel. - - Accepted values are "horizontal", "vertical" or "vertical_wheel". + - Accepted values are "horizontal", "vertical", "horizontal_wheel" or "vertical_wheel". - Default is "horizontal". * `size` - type: NORMALIZED_PAIR. Default is "1 0.2325" * `pos` - type: NORMALIZED_PAIR. Default is "0 0.38375". @@ -692,13 +692,13 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice * `logoRotation` - type: FLOAT. - Angle in degrees that the logos should be rotated. Value should be positive. - Default is 7.5 - - This property only applies when `type` is "vertical_wheel". + - This property only applies when `type` is "horizontal_wheel" or "vertical_wheel". * `logoRotationOrigin` - type: NORMALIZED_PAIR. - Point around which the logos will be rotated. Defaults to `-5 0.5`. - - This property only applies when `type` is "vertical_wheel". + - This property only applies when `type` is "horizontal_wheel" or "vertical_wheel". * `logoAlignment` - type: STRING. - Sets the alignment of the logos relative to the carousel. - - Accepted values are "top", "bottom" or "center" when `type` is "horizontal". + - Accepted values are "top", "bottom" or "center" when `type` is "horizontal" or "horizontal_wheel". - Accepted values are "left", "right" or "center" when `type` is "vertical" or "vertical_wheel". - Default is "center" * `maxLogoCount` - type: FLOAT. From 33e7a36163494ca32903ee4fe810ce4ad3db1d51 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Fri, 26 Jan 2018 19:11:32 -0500 Subject: [PATCH 238/603] set default value for ImageDebug option --- es-core/src/Settings.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 7d7925b1a8..62240e7f9f 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -75,6 +75,7 @@ void Settings::setDefaults() mBoolMap["Debug"] = false; mBoolMap["DebugGrid"] = false; mBoolMap["DebugText"] = false; + mBoolMap["DebugImage"] = false; mIntMap["ScreenSaverTime"] = 5*60*1000; // 5 minutes mIntMap["ScraperResizeWidth"] = 400; From ed2eb3d4d0339e5ffa94a4137daea1fe39d57983 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 26 Jan 2018 19:53:19 +0100 Subject: [PATCH 239/603] Move more functionality from Util.cpp to utils/StringUtil.cpp in the quest too remove the need for boost --- es-app/src/CollectionSystemManager.cpp | 8 +- es-app/src/FileData.cpp | 7 +- es-app/src/FileFilterIndex.cpp | 6 +- es-app/src/Gamelist.cpp | 25 +- es-app/src/MetaData.cpp | 5 +- es-app/src/SystemScreenSaver.cpp | 4 +- .../src/guis/GuiCollectionSystemsOptions.cpp | 9 +- es-core/src/Util.cpp | 244 ------------------ es-core/src/Util.h | 27 +- es-core/src/components/VideoComponent.cpp | 2 +- es-core/src/resources/Font.cpp | 3 +- es-core/src/resources/TextureResource.cpp | 3 +- es-core/src/utils/FileSystemUtil.cpp | 19 +- es-core/src/utils/StringUtil.cpp | 84 +++++- es-core/src/utils/StringUtil.h | 25 +- 15 files changed, 146 insertions(+), 325 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 4b439546b4..0b79e6b88e 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -144,7 +144,7 @@ void CollectionSystemManager::loadCollectionSystems() void CollectionSystemManager::loadEnabledListFromSettings() { // we parse the auto collection settings list - std::vector autoSelected = commaStringToVector(Settings::getInstance()->getString("CollectionSystemsAuto")); + std::vector autoSelected = Utils::String::commaStringToVector(Settings::getInstance()->getString("CollectionSystemsAuto")); // iterate the map for(std::map::iterator it = mAutoCollectionSystemsData.begin() ; it != mAutoCollectionSystemsData.end() ; it++ ) @@ -153,7 +153,7 @@ void CollectionSystemManager::loadEnabledListFromSettings() } // we parse the custom collection settings list - std::vector customSelected = commaStringToVector(Settings::getInstance()->getString("CollectionSystemsCustom")); + std::vector customSelected = Utils::String::commaStringToVector(Settings::getInstance()->getString("CollectionSystemsCustom")); // iterate the map for(std::map::iterator it = mCustomCollectionSystemsData.begin() ; it != mCustomCollectionSystemsData.end() ; it++ ) @@ -509,11 +509,11 @@ bool CollectionSystemManager::toggleGameInCollection(FileData* file) } if (adding) { - s = new GuiInfoPopup(mWindow, "Added '" + removeParenthesis(name) + "' to '" + strToUpper(sysName) + "'", 4000); + s = new GuiInfoPopup(mWindow, "Added '" + Utils::String::removeParenthesis(name) + "' to '" + strToUpper(sysName) + "'", 4000); } else { - s = new GuiInfoPopup(mWindow, "Removed '" + removeParenthesis(name) + "' from '" + strToUpper(sysName) + "'", 4000); + s = new GuiInfoPopup(mWindow, "Removed '" + Utils::String::removeParenthesis(name) + "' from '" + strToUpper(sysName) + "'", 4000); } mWindow->setInfoPopup(s); return true; diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 4e2177df20..399df7e816 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -45,7 +45,7 @@ std::string FileData::getDisplayName() const std::string FileData::getCleanName() const { - return removeParenthesis(this->getDisplayName()); + return Utils::String::removeParenthesis(this->getDisplayName()); } const std::string FileData::getThumbnailPath() const @@ -255,7 +255,7 @@ void FileData::launchGame(Window* window) std::string command = mEnvData->mLaunchCommand; - const std::string rom = escapePath(getPath()); + const std::string rom = Utils::FileSystem::getEscapedPath(getPath().generic_string()); const std::string basename = getPath().stem().string(); const std::string rom_raw = boost::filesystem::path(getPath()).make_preferred().string(); @@ -324,8 +324,7 @@ void CollectionFileData::refreshMetadata() const std::string& CollectionFileData::getName() { if (mDirty) { - mCollectionFileName = removeParenthesis(mSourceFileData->metadata.get("name")); - Utils::String::trim(mCollectionFileName); + mCollectionFileName = Utils::String::removeParenthesis(mSourceFileData->metadata.get("name")); mCollectionFileName += " [" + strToUpper(mSourceFileData->getSystem()->getName()) + "]"; mDirty = false; } diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index 1be1ca3f17..f10c1c659e 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -94,7 +94,7 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ case GENRE_FILTER: { key = strToUpper(game->metadata.get("genre")); - Utils::String::trim(key); + key = Utils::String::trim(key); if (getSecondary && !key.empty()) { std::istringstream f(key); std::string newKey; @@ -121,7 +121,7 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ case PUBDEV_FILTER: { key = strToUpper(game->metadata.get("publisher")); - Utils::String::trim(key); + key = Utils::String::trim(key); if ((getSecondary && !key.empty()) || (!getSecondary && key.empty())) key = strToUpper(game->metadata.get("developer")); @@ -173,7 +173,7 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ break; } } - Utils::String::trim(key); + key = Utils::String::trim(key); if (key.empty() || (type == RATINGS_FILTER && key == "0 STARS")) { key = UNKNOWN_LABEL; } diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 2a3e92661a..9a4bb7b082 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -10,21 +10,13 @@ #include #include -FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& path, FileType type, bool trustGamelist) +FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& path, FileType type) { // first, verify that path is within the system's root folder FileData* root = system->getRootFolder(); - - boost::filesystem::path relative; bool contains = false; - if (trustGamelist) - { - relative = removeCommonPathUsingStrings(path, root->getPath(), contains); - } - else - { - relative = removeCommonPath(path, root->getPath(), contains); - } + boost::filesystem::path relative = Utils::FileSystem::removeCommonPath(path.generic_string(), root->getPath().generic_string(), contains); + if(!contains) { LOG(LogError) << "File path \"" << path << "\" is outside system path \"" << system->getStartPath() << "\""; @@ -85,7 +77,6 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa void parseGamelist(SystemData* system) { - bool trustGamelist = Settings::getInstance()->getBool("ParseGamelistOnly"); std::string xmlpath = system->getGamelistPath(false); if(!Utils::FileSystem::exists(xmlpath)) @@ -119,15 +110,15 @@ void parseGamelist(SystemData* system) FileType type = typeList[i]; for(pugi::xml_node fileNode = root.child(tag); fileNode; fileNode = fileNode.next_sibling(tag)) { - boost::filesystem::path path = resolvePath(fileNode.child("path").text().get(), relativeTo, false); + boost::filesystem::path path = Utils::FileSystem::resolveRelativePath(fileNode.child("path").text().get(), relativeTo.generic_string(), false); - if(!trustGamelist && !Utils::FileSystem::exists(path.generic_string())) + if(!Utils::FileSystem::exists(path.generic_string())) { LOG(LogWarning) << "File \"" << path << "\" does not exist! Ignoring."; continue; } - FileData* file = findOrCreateFile(system, path, type, trustGamelist); + FileData* file = findOrCreateFile(system, path, type); if(!file) { LOG(LogError) << "Error finding/creating FileData for \"" << path << "\", skipping."; @@ -166,7 +157,7 @@ void addFileDataNode(pugi::xml_node& parent, const FileData* file, const char* t //there's something useful in there so we'll keep the node, add the path // try and make the path relative if we can so things still work if we change the rom folder location in the future - newNode.prepend_child("path").text().set(makeRelativePath(file->getPath(), system->getStartPath(), false).generic_string().c_str()); + newNode.prepend_child("path").text().set(Utils::FileSystem::createRelativePath(file->getPath().generic_string(), system->getStartPath(), false).c_str()); } } @@ -240,7 +231,7 @@ void updateGamelist(SystemData* system) continue; } - boost::filesystem::path nodePath = resolvePath(pathNode.text().get(), system->getStartPath(), true); + boost::filesystem::path nodePath = Utils::FileSystem::resolveRelativePath(pathNode.text().get(), system->getStartPath(), true); boost::filesystem::path gamePath((*fit)->getPath()); if(nodePath == gamePath || (Utils::FileSystem::exists(nodePath.generic_string()) && Utils::FileSystem::exists(gamePath.generic_string()) && boost::filesystem::equivalent(nodePath, gamePath))) { diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index cf93013bd0..5b9aceac13 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -1,5 +1,6 @@ #include "MetaData.h" +#include "utils/FileSystemUtil.h" #include "Log.h" #include "Util.h" #include @@ -82,7 +83,7 @@ MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node& std::string value = md.text().get(); if (iter->type == MD_PATH) { - value = resolvePath(value, relativeTo, true).generic_string(); + value = Utils::FileSystem::resolveRelativePath(value, relativeTo.generic_string(), true); } mdl.set(iter->key, value); }else{ @@ -110,7 +111,7 @@ void MetaDataList::appendToXML(pugi::xml_node& parent, bool ignoreDefaults, cons // try and make paths relative if we can std::string value = mapIter->second; if (mddIter->type == MD_PATH) - value = makeRelativePath(value, relativeTo, true).generic_string(); + value = Utils::FileSystem::createRelativePath(value, relativeTo.generic_string(), true); parent.append_child(mapIter->first.c_str()).text().set(value.c_str()); } diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index c82b7a445e..929decf7ca 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -339,7 +339,7 @@ void SystemScreenSaver::pickGameListNode(unsigned long index, const char *nodeNa if (index-- == 0) { // Yes. Resolve to a full path - path = resolvePath(node.text().get(), (*it)->getStartPath(), true).generic_string(); + path = Utils::FileSystem::resolveRelativePath(node.text().get(), (*it)->getStartPath(), true); mSystemName = (*it)->getFullName(); mGameName = fileNode.child("name").text().get(); @@ -347,7 +347,7 @@ void SystemScreenSaver::pickGameListNode(unsigned long index, const char *nodeNa // try the easy way. Should work for the majority of cases, unless in subfolders FileData* rootFileData = (*it)->getRootFolder(); - std::string gamePath = resolvePath(fileNode.child("path").text().get(), (*it)->getStartPath(), false).string(); + std::string gamePath = Utils::FileSystem::resolveRelativePath(fileNode.child("path").text().get(), (*it)->getStartPath(), false); std::string shortPath = gamePath; shortPath = shortPath.replace(0, (*it)->getStartPath().length()+1, ""); diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.cpp b/es-app/src/guis/GuiCollectionSystemsOptions.cpp index 410578f63c..fcb0c4c261 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.cpp +++ b/es-app/src/guis/GuiCollectionSystemsOptions.cpp @@ -4,6 +4,7 @@ #include "components/SwitchComponent.h" #include "guis/GuiSettings.h" #include "guis/GuiTextEditPopup.h" +#include "utils/StringUtil.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" #include "Window.h" @@ -110,8 +111,8 @@ void GuiCollectionSystemsOptions::createCollection(std::string inName) { std::string name = CollectionSystemManager::get()->getValidNewCollectionName(inName); SystemData* newSys = CollectionSystemManager::get()->addNewCustomCollection(name); customOptionList->add(name, name, true); - std::string outAuto = vectorToCommaString(autoOptionList->getSelectedObjects()); - std::string outCustom = vectorToCommaString(customOptionList->getSelectedObjects()); + std::string outAuto = Utils::String::vectorToCommaString(autoOptionList->getSelectedObjects()); + std::string outCustom = Utils::String::vectorToCommaString(customOptionList->getSelectedObjects()); updateSettings(outAuto, outCustom); ViewController::get()->goToSystemView(newSys); @@ -161,9 +162,9 @@ void GuiCollectionSystemsOptions::addSystemsToMenu() void GuiCollectionSystemsOptions::applySettings() { - std::string outAuto = vectorToCommaString(autoOptionList->getSelectedObjects()); + std::string outAuto = Utils::String::vectorToCommaString(autoOptionList->getSelectedObjects()); std::string prevAuto = Settings::getInstance()->getString("CollectionSystemsAuto"); - std::string outCustom = vectorToCommaString(customOptionList->getSelectedObjects()); + std::string outCustom = Utils::String::vectorToCommaString(customOptionList->getSelectedObjects()); std::string prevCustom = Settings::getInstance()->getString("CollectionSystemsCustom"); bool outSort = sortAllSystemsSwitch->getState(); bool prevSort = Settings::getInstance()->getBool("SortAllSystems"); diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp index 04cc6f170e..246af37f01 100644 --- a/es-core/src/Util.cpp +++ b/es-core/src/Util.cpp @@ -1,9 +1,5 @@ #include "Util.h" -#include "utils/FileSystemUtil.h" -#include "platform.h" -#include - std::string strToUpper(const char* from) { std::string str(from); @@ -25,141 +21,6 @@ std::string strToUpper(const std::string& str) return strToUpper(str.c_str()); } -// embedded resources, e.g. ":/font.ttf", need to be properly handled too -std::string getCanonicalPath(const std::string& path) -{ - if(path.empty() || !Utils::FileSystem::exists(path)) - return path; - - return boost::filesystem::canonical(path).generic_string(); -} - -// expands "./my/path.sfc" to "[relativeTo]/my/path.sfc" -// if allowHome is true, also expands "~/my/path.sfc" to "/home/pi/my/path.sfc" -boost::filesystem::path resolvePath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool allowHome) -{ - // nothing here - if(path.begin() == path.end()) - return path; - - if(*path.begin() == ".") - { - boost::filesystem::path ret = relativeTo; - for(auto it = ++path.begin(); it != path.end(); ++it) - ret /= *it; - return ret; - } - - if(allowHome && *path.begin() == "~") - { - boost::filesystem::path ret = getHomePath(); - for(auto it = ++path.begin(); it != path.end(); ++it) - ret /= *it; - return ret; - } - - return path; -} - -boost::filesystem::path removeCommonPathUsingStrings(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains) -{ -#ifdef WIN32 - std::wstring pathStr = path.c_str(); - std::wstring relativeToStr = relativeTo.c_str(); -#else - std::string pathStr = path.c_str(); - std::string relativeToStr = relativeTo.c_str(); -#endif - if (pathStr.find_first_of(relativeToStr) == 0) { - contains = true; - return pathStr.substr(relativeToStr.size() + 1); - } - else { - contains = false; - return path; - } -} - -// example: removeCommonPath("/home/pi/roms/nes/foo/bar.nes", "/home/pi/roms/nes/") returns "foo/bar.nes" -boost::filesystem::path removeCommonPath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains) -{ - // if either of these doesn't exist, boost::filesystem::canonical() is going to throw an error - if(!Utils::FileSystem::exists(path.generic_string()) || !Utils::FileSystem::exists(relativeTo.generic_string())) - { - contains = false; - return path; - } - - // if it's a symlink we don't want to apply boost::filesystem::canonical on it, otherwise we'll lose the current parent_path - boost::filesystem::path p = (Utils::FileSystem::isSymlink(path.generic_string()) ? boost::filesystem::canonical(path.parent_path()) / path.filename() : boost::filesystem::canonical(path)); - boost::filesystem::path r = boost::filesystem::canonical(relativeTo); - - if(p.root_path() != r.root_path()) - { - contains = false; - return p; - } - - boost::filesystem::path result; - - // find point of divergence - auto itr_path = p.begin(); - auto itr_relative_to = r.begin(); - while(*itr_path == *itr_relative_to && itr_path != p.end() && itr_relative_to != r.end()) - { - ++itr_path; - ++itr_relative_to; - } - - if(itr_relative_to != r.end()) - { - contains = false; - return p; - } - - while(itr_path != p.end()) - { - if(*itr_path != boost::filesystem::path(".")) - result = result / *itr_path; - - ++itr_path; - } - - contains = true; - return result; -} - -// usage: makeRelativePath("/path/to/my/thing.sfc", "/path/to") -> "./my/thing.sfc" -// usage: makeRelativePath("/home/pi/my/thing.sfc", "/path/to", true) -> "~/my/thing.sfc" -boost::filesystem::path makeRelativePath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool allowHome) -{ - bool contains = false; - - boost::filesystem::path ret = removeCommonPath(path, relativeTo, contains); - if(contains) - { - // success - ret = "." / ret; - return ret; - } - - if(allowHome) - { - contains = false; - std::string homePath = getHomePath(); - ret = removeCommonPath(path, homePath, contains); - if(contains) - { - // success - ret = "~" / ret; - return ret; - } - } - - // nothing could be resolved - return path; -} - std::string strreplace(std::string str, const std::string& replace, const std::string& with) { size_t pos; @@ -168,108 +29,3 @@ std::string strreplace(std::string str, const std::string& replace, const std::s return str; } - -// plaform-specific escape path function -// on windows: just puts the path in quotes -// everything else: assume bash and escape special characters with backslashes -std::string escapePath(const boost::filesystem::path& path) -{ -#ifdef WIN32 - // windows escapes stuff by just putting everything in quotes - return '"' + boost::filesystem::path(path).make_preferred().string() + '"'; -#else - // a quick and dirty way to insert a backslash before most characters that would mess up a bash path - std::string pathStr = path.string(); - - const char* invalidChars = " '\"\\!$^&*(){}[]?;<>"; - for(unsigned int i = 0; i < pathStr.length(); i++) - { - char c; - unsigned int charNum = 0; - do { - c = invalidChars[charNum]; - if(pathStr[i] == c) - { - pathStr.insert(i, "\\"); - i++; - break; - } - charNum++; - } while(c != '\0'); - } - - return pathStr; -#endif -} - -std::string removeParenthesis(const std::string& str) -{ - // remove anything in parenthesis or brackets - // should be roughly equivalent to the regex replace "\((.*)\)|\[(.*)\]" with "" - // I would love to just use regex, but it's not worth pulling in another boost lib for one function that is used once - - std::string ret = str; - size_t start, end; - - static const int NUM_TO_REPLACE = 2; - static const char toReplace[NUM_TO_REPLACE*2] = { '(', ')', '[', ']' }; - - bool done = false; - while(!done) - { - done = true; - for(int i = 0; i < NUM_TO_REPLACE; i++) - { - end = ret.find_first_of(toReplace[i*2+1]); - start = ret.find_last_of(toReplace[i*2], end); - - if(start != std::string::npos && end != std::string::npos) - { - ret.erase(start, end - start + 1); - done = false; - } - } - } - - // also strip whitespace - end = ret.find_last_not_of(' '); - if(end != std::string::npos) - end++; - - ret = ret.substr(0, end); - - return ret; -} - -std::vector commaStringToVector(std::string commaString) -{ - // from a comma separated string, get a vector of strings - std::vector strs; - size_t start = 0; - size_t comma = commaString.find(","); - strs.push_back(commaString.substr(start, comma)); - if(comma != std::string::npos) - { - start = comma + 1; - while((comma = commaString.find(",", start)) != std::string::npos) - { - strs.push_back(commaString.substr(start, comma - start)); - start = comma + 1; - } - strs.push_back(commaString.substr(start)); - std::sort(strs.begin(), strs.end()); - } - return strs; -} - -std::string vectorToCommaString(std::vector stringVector) -{ - std::string out = ""; - std::sort(stringVector.begin(), stringVector.end()); - // from a vector of system names get comma separated string - for(std::vector::const_iterator it = stringVector.cbegin() ; it != stringVector.cend() ; it++ ) - { - out = out + (out == "" ? "" : ",") + (*it); - } - return out; -} \ No newline at end of file diff --git a/es-core/src/Util.h b/es-core/src/Util.h index 526cee99bd..19e84d98e3 100644 --- a/es-core/src/Util.h +++ b/es-core/src/Util.h @@ -2,37 +2,12 @@ #ifndef ES_CORE_UTIL_H #define ES_CORE_UTIL_H -#include +#include std::string strToUpper(const char* from); std::string& strToUpper(std::string& str); std::string strToUpper(const std::string& str); -std::string getCanonicalPath(const std::string& str); - -boost::filesystem::path removeCommonPathUsingStrings(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains); -// example: removeCommonPath("/home/pi/roms/nes/foo/bar.nes", "/home/pi/roms/nes/") returns "foo/bar.nes" -boost::filesystem::path removeCommonPath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains); - -// usage: makeRelativePath("/path/to/my/thing.sfc", "/path/to") -> "./my/thing.sfc" -// usage: makeRelativePath("/home/pi/my/thing.sfc", "/path/to", true) -> "~/my/thing.sfc" -boost::filesystem::path makeRelativePath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool allowHome); - -// expands "./my/path.sfc" to "[relativeTo]/my/path.sfc" -// if allowHome is true, also expands "~/my/path.sfc" to "/home/pi/my/path.sfc" -boost::filesystem::path resolvePath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool allowHome); - -std::string escapePath(const boost::filesystem::path& path); - std::string strreplace(std::string str, const std::string& replace, const std::string& with); -// Remove (.*) and [.*] from str -std::string removeParenthesis(const std::string& str); - -// split a comma-separated string into a vector -std::vector commaStringToVector(std::string commaString); - -// turn a vector of strings into a comma-separated string -std::string vectorToCommaString(std::vector stringVector); - #endif // ES_CORE_UTIL_H diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index cbbc535a61..0968fcc6a8 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -102,7 +102,7 @@ void VideoComponent::onSizeChanged() bool VideoComponent::setVideo(std::string path) { // Convert the path into a generic format - boost::filesystem::path fullPath = getCanonicalPath(path); + boost::filesystem::path fullPath = Utils::FileSystem::getCanonicalPath(path); fullPath.make_preferred().native(); // Check that it's changed diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index 918e7e3888..dfded5c8e1 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -1,5 +1,6 @@ #include "resources/Font.h" +#include "utils/FileSystemUtil.h" #include "utils/StringUtil.h" #include "Log.h" #include "Renderer.h" @@ -101,7 +102,7 @@ void Font::unload(std::shared_ptr& /*rm*/) std::shared_ptr Font::get(int size, const std::string& path) { - const std::string canonicalPath = getCanonicalPath(path); + const std::string canonicalPath = Utils::FileSystem::getCanonicalPath(path); std::pair def(canonicalPath.empty() ? getDefaultPath() : canonicalPath, size); auto foundFont = sFontMap.find(def); diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index 7768111fc5..76fa1239ae 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -1,5 +1,6 @@ #include "resources/TextureResource.h" +#include "utils/FileSystemUtil.h" #include "resources/TextureData.h" #include "Util.h" @@ -104,7 +105,7 @@ std::shared_ptr TextureResource::get(const std::string& path, b { std::shared_ptr& rm = ResourceManager::getInstance(); - const std::string canonicalPath = getCanonicalPath(path); + const std::string canonicalPath = Utils::FileSystem::getCanonicalPath(path); if(canonicalPath.empty()) { std::shared_ptr tex(new TextureResource("", tile, false)); diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 04c9a821b5..b19fbf6993 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -152,12 +152,21 @@ namespace Utils // insert a backslash before most characters that would mess up a bash path const char* invalidChars = "\\ '\"!$^&*(){}[]?;<>"; const char* invalidChar = invalidChars; - size_t offset = std::string::npos; + size_t start = 0; + size_t offset = 0; while(*invalidChar) { - while((offset = path.find(*invalidChar)) != std::string::npos) - path.insert(offset, 1, '\\'); + while((offset = path.find(*invalidChar, start)) != std::string::npos) + { + start = offset + 1; + + if((offset == 0) || (path[offset - 1] != '\\')) + { + path.insert(offset, 1, '\\'); + ++start; + } + } ++invalidChar; } @@ -170,6 +179,10 @@ namespace Utils std::string getCanonicalPath(const std::string& _path) { + // temporary hack for builtin resources + if((_path[0] == ':') && (_path[1] == '/')) + return _path; + std::string path = exists(_path) ? getAbsolutePath(_path) : getGenericPath(_path); // cleanup path diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index 26a7c7c0b6..54e2b18f2b 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -1,5 +1,7 @@ #include "utils/StringUtil.h" +#include + namespace Utils { namespace String @@ -155,18 +157,92 @@ namespace Utils } // trim - bool startsWith(const std::string& _string, const std::string& _test) + std::string replace(const std::string& _string, const std::string& _replace, const std::string& _with) + { + std::string string = _string; + size_t pos; + + while((pos = string.find(_replace)) != std::string::npos) + string = string.replace(pos, _replace.length(), _with.c_str(), _with.length()); + + return string; + + } // replace + + bool startsWith(const std::string& _string, const std::string& _start) { - return (_string.find(_test) == 0); + return (_string.find(_start) == 0); } // startsWith - bool endsWith(const std::string& _string, const std::string& _test) + bool endsWith(const std::string& _string, const std::string& _end) { - return (_string.find(_test) == (_string.size() - _test.size())); + return (_string.find(_end) == (_string.size() - _end.size())); } // endsWith + std::string removeParenthesis(const std::string& _string) + { + static const char remove[4] = { '(', ')', '[', ']' }; + std::string string = _string; + size_t start; + size_t end; + bool done = false; + + while(!done) + { + done = true; + + for(int i = 0; i < sizeof(remove); i += 2) + { + end = string.find_first_of(remove[i + 1]); + start = string.find_last_of( remove[i + 0], end); + + if((start != std::string::npos) && (end != std::string::npos)) + { + string.erase(start, end - start + 1); + done = false; + } + } + } + + return trim(string); + + } // removeParenthesis + + stringVector commaStringToVector(const std::string& _string) + { + stringVector vector; + size_t start = 0; + size_t comma = _string.find(","); + + while(comma != std::string::npos) + { + vector.push_back(_string.substr(start, comma - start)); + start = comma + 1; + comma = _string.find(",", start); + } + + vector.push_back(_string.substr(start)); + std::sort(vector.begin(), vector.end()); + + return vector; + + } // commaStringToVector + + std::string vectorToCommaString(stringVector _vector) + { + std::string string; + + std::sort(_vector.begin(), _vector.end()); + + for(stringVector::const_iterator it = _vector.cbegin(); it != _vector.cend(); ++it) + string += (string.length() ? "," : "") + (*it); + + return string; + + } // vectorToCommaString + } // String:: } // Utils:: diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h index fcbd84e79e..47fb7d1fe2 100644 --- a/es-core/src/utils/StringUtil.h +++ b/es-core/src/utils/StringUtil.h @@ -3,20 +3,27 @@ #define ES_CORE_UTILS_STRING_UTIL_H #include +#include namespace Utils { namespace String { - unsigned int chars2Unicode(const std::string& _string, size_t& _cursor); - std::string unicode2Chars(const unsigned int _unicode); - size_t nextCursor (const std::string& _string, const size_t _cursor); - size_t prevCursor (const std::string& _string, const size_t _cursor); - size_t moveCursor (const std::string& _string, const size_t _cursor, const int _amount); - std::string toUpper (const std::string& _string); - std::string trim (const std::string& _string); - bool startsWith (const std::string& _string, const std::string& _test); - bool endsWith (const std::string& _string, const std::string& _test); + typedef std::vector stringVector; + + unsigned int chars2Unicode (const std::string& _string, size_t& _cursor); + std::string unicode2Chars (const unsigned int _unicode); + size_t nextCursor (const std::string& _string, const size_t _cursor); + size_t prevCursor (const std::string& _string, const size_t _cursor); + size_t moveCursor (const std::string& _string, const size_t _cursor, const int _amount); + std::string toUpper (const std::string& _string); + std::string trim (const std::string& _string); + std::string replace (const std::string& _string, const std::string& _replace, const std::string& _with); + bool startsWith (const std::string& _string, const std::string& _start); + bool endsWith (const std::string& _string, const std::string& _end); + std::string removeParenthesis (const std::string& _string); + stringVector commaStringToVector(const std::string& _string); + std::string vectorToCommaString(stringVector _vector); } // String:: From 3d3fb2c277773412b2413589602e37aba9716132 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 27 Jan 2018 18:04:28 +0100 Subject: [PATCH 240/603] Switched over the last functions in Utils.cpp to Utils::String, step 3 of 5 in the quest to remove boost::filesystem --- es-app/src/CollectionSystemManager.cpp | 7 ++-- es-app/src/FileData.cpp | 9 +++-- es-app/src/FileFilterIndex.cpp | 15 ++++---- es-app/src/Gamelist.cpp | 1 - es-app/src/MetaData.cpp | 1 - es-app/src/SystemScreenSaver.cpp | 1 - .../src/components/ScraperSearchComponent.cpp | 22 ++++++------ es-app/src/components/TextListComponent.h | 4 +-- .../src/guis/GuiCollectionSystemsOptions.cpp | 4 +-- es-app/src/guis/GuiGameScraper.cpp | 4 +-- es-app/src/guis/GuiGamelistOptions.cpp | 2 +- es-app/src/guis/GuiMenu.cpp | 2 +- es-app/src/guis/GuiMetaDataEd.cpp | 6 ++-- es-app/src/guis/GuiScraperMulti.cpp | 4 +-- es-app/src/guis/GuiScraperStart.cpp | 2 +- .../guis/GuiSlideshowScreensaverOptions.cpp | 5 +-- es-app/src/scrapers/GamesDBScraper.cpp | 1 - es-core/CMakeLists.txt | 2 -- es-core/src/Util.cpp | 31 ---------------- es-core/src/Util.h | 13 ------- es-core/src/components/ButtonComponent.cpp | 4 +-- es-core/src/components/DateTimeComponent.cpp | 4 +-- es-core/src/components/HelpComponent.cpp | 4 +-- es-core/src/components/MenuComponent.cpp | 4 +-- es-core/src/components/MenuComponent.h | 4 +-- es-core/src/components/OptionListComponent.h | 4 +-- es-core/src/components/TextComponent.cpp | 7 ++-- es-core/src/components/VideoComponent.cpp | 1 - es-core/src/guis/GuiDetectDevice.cpp | 4 +-- es-core/src/guis/GuiInputConfig.cpp | 4 +-- es-core/src/guis/GuiMsgBox.cpp | 2 +- es-core/src/guis/GuiTextEditPopup.cpp | 2 +- es-core/src/resources/Font.cpp | 1 - es-core/src/resources/TextureResource.cpp | 1 - es-core/src/utils/FileSystemUtil.cpp | 36 +++++++++---------- es-core/src/utils/TimeUtil.cpp | 3 +- 36 files changed, 82 insertions(+), 139 deletions(-) delete mode 100644 es-core/src/Util.cpp delete mode 100644 es-core/src/Util.h diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 0b79e6b88e..79cd155cd9 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -11,7 +11,6 @@ #include "Settings.h" #include "SystemData.h" #include "ThemeData.h" -#include "Util.h" #include #include #include @@ -422,7 +421,7 @@ void CollectionSystemManager::setEditMode(std::string collectionName) // if it's bundled, this needs to be the bundle system mEditingCollectionSystemData = sysData; - GuiInfoPopup* s = new GuiInfoPopup(mWindow, "Editing the '" + strToUpper(collectionName) + "' Collection. Add/remove games with Y.", 10000); + GuiInfoPopup* s = new GuiInfoPopup(mWindow, "Editing the '" + Utils::String::toUpper(collectionName) + "' Collection. Add/remove games with Y.", 10000); mWindow->setInfoPopup(s); } @@ -509,11 +508,11 @@ bool CollectionSystemManager::toggleGameInCollection(FileData* file) } if (adding) { - s = new GuiInfoPopup(mWindow, "Added '" + Utils::String::removeParenthesis(name) + "' to '" + strToUpper(sysName) + "'", 4000); + s = new GuiInfoPopup(mWindow, "Added '" + Utils::String::removeParenthesis(name) + "' to '" + Utils::String::toUpper(sysName) + "'", 4000); } else { - s = new GuiInfoPopup(mWindow, "Removed '" + Utils::String::removeParenthesis(name) + "' from '" + strToUpper(sysName) + "'", 4000); + s = new GuiInfoPopup(mWindow, "Removed '" + Utils::String::removeParenthesis(name) + "' from '" + Utils::String::toUpper(sysName) + "'", 4000); } mWindow->setInfoPopup(s); return true; diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 399df7e816..035932bd4a 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -10,7 +10,6 @@ #include "Log.h" #include "platform.h" #include "SystemData.h" -#include "Util.h" #include "VolumeControl.h" #include "Window.h" @@ -259,9 +258,9 @@ void FileData::launchGame(Window* window) const std::string basename = getPath().stem().string(); const std::string rom_raw = boost::filesystem::path(getPath()).make_preferred().string(); - command = strreplace(command, "%ROM%", rom); - command = strreplace(command, "%BASENAME%", basename); - command = strreplace(command, "%ROM_RAW%", rom_raw); + command = Utils::String::replace(command, "%ROM%", rom); + command = Utils::String::replace(command, "%BASENAME%", basename); + command = Utils::String::replace(command, "%ROM_RAW%", rom_raw); LOG(LogInfo) << " " << command; int exitCode = runSystemCommand(command); @@ -325,7 +324,7 @@ const std::string& CollectionFileData::getName() { if (mDirty) { mCollectionFileName = Utils::String::removeParenthesis(mSourceFileData->metadata.get("name")); - mCollectionFileName += " [" + strToUpper(mSourceFileData->getSystem()->getName()) + "]"; + mCollectionFileName += " [" + Utils::String::toUpper(mSourceFileData->getSystem()->getName()) + "]"; mDirty = false; } return mCollectionFileName; diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index f10c1c659e..b7998a52f7 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -5,7 +5,6 @@ #include "FileData.h" #include "Log.h" #include "Settings.h" -#include "Util.h" #define UNKNOWN_LABEL "UNKNOWN" #define INCLUDE_UNKNOWN false; @@ -93,7 +92,7 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ { case GENRE_FILTER: { - key = strToUpper(game->metadata.get("genre")); + key = Utils::String::toUpper(game->metadata.get("genre")); key = Utils::String::trim(key); if (getSecondary && !key.empty()) { std::istringstream f(key); @@ -120,13 +119,13 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ } case PUBDEV_FILTER: { - key = strToUpper(game->metadata.get("publisher")); + key = Utils::String::toUpper(game->metadata.get("publisher")); key = Utils::String::trim(key); if ((getSecondary && !key.empty()) || (!getSecondary && key.empty())) - key = strToUpper(game->metadata.get("developer")); + key = Utils::String::toUpper(game->metadata.get("developer")); else - key = strToUpper(game->metadata.get("publisher")); + key = Utils::String::toUpper(game->metadata.get("publisher")); break; } case RATINGS_FILTER: @@ -155,21 +154,21 @@ std::string FileFilterIndex::getIndexableKey(FileData* game, FilterIndexType typ { if (game->getType() != GAME) return "FALSE"; - key = strToUpper(game->metadata.get("favorite")); + key = Utils::String::toUpper(game->metadata.get("favorite")); break; } case HIDDEN_FILTER: { if (game->getType() != GAME) return "FALSE"; - key = strToUpper(game->metadata.get("hidden")); + key = Utils::String::toUpper(game->metadata.get("hidden")); break; } case KIDGAME_FILTER: { if (game->getType() != GAME) return "FALSE"; - key = strToUpper(game->metadata.get("kidgame")); + key = Utils::String::toUpper(game->metadata.get("kidgame")); break; } } diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 9a4bb7b082..ecbafffe0b 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -6,7 +6,6 @@ #include "Log.h" #include "Settings.h" #include "SystemData.h" -#include "Util.h" #include #include diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 5b9aceac13..7732ac16b9 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -2,7 +2,6 @@ #include "utils/FileSystemUtil.h" #include "Log.h" -#include "Util.h" #include MetaDataDecl gameDecls[] = { diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 929decf7ca..afe995edc9 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -14,7 +14,6 @@ #include "Renderer.h" #include "Sound.h" #include "SystemData.h" -#include "Util.h" #include #include #include diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index 62802c2480..3cffa40ec1 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -9,9 +9,9 @@ #include "guis/GuiMsgBox.h" #include "guis/GuiTextEditPopup.h" #include "resources/Font.h" +#include "utils/StringUtil.h" #include "FileData.h" #include "Log.h" -#include "Util.h" #include "Window.h" ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) : GuiComponent(window), @@ -244,7 +244,7 @@ void ScraperSearchComponent::onSearchDone(const std::vector for(size_t i = 0; i < results.size(); i++) { row.elements.clear(); - row.addElement(std::make_shared(mWindow, strToUpper(results.at(i).mdl.get("name")), font, color), true); + row.addElement(std::make_shared(mWindow, Utils::String::toUpper(results.at(i).mdl.get("name")), font, color), true); row.makeAcceptInputHandler([this, i] { returnResult(mScraperResults.at(i)); }); mResultList->addRow(row); } @@ -269,7 +269,7 @@ void ScraperSearchComponent::onSearchDone(const std::vector void ScraperSearchComponent::onSearchError(const std::string& error) { LOG(LogInfo) << "ScraperSearchComponent search error: " << error; - mWindow->pushGui(new GuiMsgBox(mWindow, strToUpper(error), + mWindow->pushGui(new GuiMsgBox(mWindow, Utils::String::toUpper(error), "RETRY", std::bind(&ScraperSearchComponent::search, this, mLastSearch), "SKIP", mSkipCallback, "CANCEL", mCancelCallback)); @@ -294,8 +294,8 @@ void ScraperSearchComponent::updateInfoPane() if(i != -1 && (int)mScraperResults.size() > i) { ScraperSearchResult& res = mScraperResults.at(i); - mResultName->setText(strToUpper(res.mdl.get("name"))); - mResultDesc->setText(strToUpper(res.mdl.get("desc"))); + mResultName->setText(Utils::String::toUpper(res.mdl.get("name"))); + mResultDesc->setText(Utils::String::toUpper(res.mdl.get("desc"))); mDescContainer->reset(); mResultThumbnail->setImage(""); @@ -308,12 +308,12 @@ void ScraperSearchComponent::updateInfoPane() } // metadata - mMD_Rating->setValue(strToUpper(res.mdl.get("rating"))); - mMD_ReleaseDate->setValue(strToUpper(res.mdl.get("releasedate"))); - mMD_Developer->setText(strToUpper(res.mdl.get("developer"))); - mMD_Publisher->setText(strToUpper(res.mdl.get("publisher"))); - mMD_Genre->setText(strToUpper(res.mdl.get("genre"))); - mMD_Players->setText(strToUpper(res.mdl.get("players"))); + mMD_Rating->setValue(Utils::String::toUpper(res.mdl.get("rating"))); + mMD_ReleaseDate->setValue(Utils::String::toUpper(res.mdl.get("releasedate"))); + mMD_Developer->setText(Utils::String::toUpper(res.mdl.get("developer"))); + mMD_Publisher->setText(Utils::String::toUpper(res.mdl.get("publisher"))); + mMD_Genre->setText(Utils::String::toUpper(res.mdl.get("genre"))); + mMD_Players->setText(Utils::String::toUpper(res.mdl.get("players"))); mGrid.onSizeChanged(); }else{ mResultName->setText(""); diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 8e8e7d4d6e..42ab9501b0 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -4,9 +4,9 @@ #include "components/IList.h" #include "math/Misc.h" +#include "utils/StringUtil.h" #include "Log.h" #include "Sound.h" -#include "Util.h" #include class TextCache; @@ -188,7 +188,7 @@ void TextListComponent::render(const Transform4x4f& parentTrans) color = mColors[entry.data.colorId]; if(!entry.data.textCache) - entry.data.textCache = std::unique_ptr(font->buildTextCache(mUppercase ? strToUpper(entry.name) : entry.name, 0, 0, 0x000000FF)); + entry.data.textCache = std::unique_ptr(font->buildTextCache(mUppercase ? Utils::String::toUpper(entry.name) : entry.name, 0, 0, 0x000000FF)); entry.data.textCache->setColor(color); diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.cpp b/es-app/src/guis/GuiCollectionSystemsOptions.cpp index fcb0c4c261..27df3082eb 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.cpp +++ b/es-app/src/guis/GuiCollectionSystemsOptions.cpp @@ -43,7 +43,7 @@ void GuiCollectionSystemsOptions::initializeMenu() }; row.makeAcceptInputHandler(createCollectionCall); - auto themeFolder = std::make_shared(mWindow, strToUpper(name), Font::get(FONT_SIZE_SMALL), 0x777777FF); + auto themeFolder = std::make_shared(mWindow, Utils::String::toUpper(name), Font::get(FONT_SIZE_SMALL), 0x777777FF); row.addElement(themeFolder, true); s->addRow(row); } @@ -78,7 +78,7 @@ void GuiCollectionSystemsOptions::initializeMenu() if(CollectionSystemManager::get()->isEditing()) { row.elements.clear(); - row.addElement(std::make_shared(mWindow, "FINISH EDITING '" + strToUpper(CollectionSystemManager::get()->getEditingCollection()) + "' COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(std::make_shared(mWindow, "FINISH EDITING '" + Utils::String::toUpper(CollectionSystemManager::get()->getEditingCollection()) + "' COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); row.makeAcceptInputHandler(std::bind(&GuiCollectionSystemsOptions::exitEditMode, this)); mMenu.addRow(row); } diff --git a/es-app/src/guis/GuiGameScraper.cpp b/es-app/src/guis/GuiGameScraper.cpp index 6fd0670965..b2674a78be 100644 --- a/es-app/src/guis/GuiGameScraper.cpp +++ b/es-app/src/guis/GuiGameScraper.cpp @@ -19,13 +19,13 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: // row 0 is a spacer - mGameName = std::make_shared(mWindow, strToUpper(mSearchParams.game->getPath().filename().generic_string()), + mGameName = std::make_shared(mWindow, Utils::String::toUpper(mSearchParams.game->getPath().filename().generic_string()), Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_CENTER); mGrid.setEntry(mGameName, Vector2i(0, 1), false, true); // row 2 is a spacer - mSystemName = std::make_shared(mWindow, strToUpper(mSearchParams.system->getFullName()), Font::get(FONT_SIZE_SMALL), + mSystemName = std::make_shared(mWindow, Utils::String::toUpper(mSearchParams.system->getFullName()), Font::get(FONT_SIZE_SMALL), 0x888888FF, ALIGN_CENTER); mGrid.setEntry(mSystemName, Vector2i(0, 3), false, true); diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 82eab49b1a..52950bcf6d 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -98,7 +98,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui if(UIModeController::getInstance()->isUIModeFull() && CollectionSystemManager::get()->isEditing()) { row.elements.clear(); - row.addElement(std::make_shared(mWindow, "FINISH EDITING '" + strToUpper(CollectionSystemManager::get()->getEditingCollection()) + "' COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(std::make_shared(mWindow, "FINISH EDITING '" + Utils::String::toUpper(CollectionSystemManager::get()->getEditingCollection()) + "' COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::exitEditMode, this)); mMenu.addRow(row); } diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 2b04b3897a..d5ce195855 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -466,7 +466,7 @@ void GuiMenu::addVersionInfo() { mVersion.setFont(Font::get(FONT_SIZE_SMALL)); mVersion.setColor(0x5E5E5EFF); - mVersion.setText("EMULATIONSTATION V" + strToUpper(PROGRAM_VERSION_STRING)); + mVersion.setText("EMULATIONSTATION V" + Utils::String::toUpper(PROGRAM_VERSION_STRING)); mVersion.setHorizontalAlignment(ALIGN_CENTER); addChild(&mVersion); } diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index 0412d95662..d7021f0904 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -11,12 +11,12 @@ #include "guis/GuiMsgBox.h" #include "guis/GuiTextEditPopup.h" #include "resources/Font.h" +#include "utils/StringUtil.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" #include "FileData.h" #include "FileFilterIndex.h" #include "SystemData.h" -#include "Util.h" #include "Window.h" GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams scraperParams, @@ -36,7 +36,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mHeaderGrid = std::make_shared(mWindow, Vector2i(1, 5)); mTitle = std::make_shared(mWindow, "EDIT METADATA", Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); - mSubtitle = std::make_shared(mWindow, strToUpper(scraperParams.game->getPath().filename().generic_string()), + mSubtitle = std::make_shared(mWindow, Utils::String::toUpper(scraperParams.game->getPath().filename().generic_string()), Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_CENTER); mHeaderGrid->setEntry(mTitle, Vector2i(0, 1), false, true); mHeaderGrid->setEntry(mSubtitle, Vector2i(0, 3), false, true); @@ -58,7 +58,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector // create ed and add it (and any related components) to mMenu // ed's value will be set below ComponentListRow row; - auto lbl = std::make_shared(mWindow, strToUpper(iter->displayName), Font::get(FONT_SIZE_SMALL), 0x777777FF); + auto lbl = std::make_shared(mWindow, Utils::String::toUpper(iter->displayName), Font::get(FONT_SIZE_SMALL), 0x777777FF); row.addElement(lbl, true); // label switch(iter->type) diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index 0e05492e98..3dc546d832 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -99,11 +99,11 @@ void GuiScraperMulti::doNextSearch() // update title std::stringstream ss; - mSystem->setText(strToUpper(mSearchQueue.front().system->getFullName())); + mSystem->setText(Utils::String::toUpper(mSearchQueue.front().system->getFullName())); // update subtitle ss.str(""); // clear - ss << "GAME " << (mCurrentGame + 1) << " OF " << mTotalGames << " - " << strToUpper(mSearchQueue.front().game->getPath().filename().string()); + ss << "GAME " << (mCurrentGame + 1) << " OF " << mTotalGames << " - " << Utils::String::toUpper(mSearchQueue.front().game->getPath().filename().string()); mSubtitle->setText(ss.str()); mSearchComp->search(mSearchQueue.front()); diff --git a/es-app/src/guis/GuiScraperStart.cpp b/es-app/src/guis/GuiScraperStart.cpp index 75649d5af4..10c2a9b867 100644 --- a/es-app/src/guis/GuiScraperStart.cpp +++ b/es-app/src/guis/GuiScraperStart.cpp @@ -48,7 +48,7 @@ void GuiScraperStart::pressedStart() if((*it)->getPlatformIds().empty()) { mWindow->pushGui(new GuiMsgBox(mWindow, - strToUpper("Warning: some of your selected systems do not have a platform set. Results may be even more inaccurate than usual!\nContinue anyway?"), + Utils::String::toUpper("Warning: some of your selected systems do not have a platform set. Results may be even more inaccurate than usual!\nContinue anyway?"), "YES", std::bind(&GuiScraperStart::start, this), "NO", nullptr)); return; diff --git a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp index 57cc6cb172..e29b3e2e9a 100644 --- a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp +++ b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp @@ -3,6 +3,7 @@ #include "components/SliderComponent.h" #include "components/SwitchComponent.h" #include "guis/GuiTextEditPopup.h" +#include "utils/StringUtil.h" #include "Settings.h" #include "Window.h" @@ -72,7 +73,7 @@ void GuiSlideshowScreensaverOptions::addWithLabel(ComponentListRow row, const st { row.elements.clear(); - auto lbl = std::make_shared(mWindow, strToUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF); + auto lbl = std::make_shared(mWindow, Utils::String::toUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF); row.addElement(lbl, true); // label row.addElement(component, false, true); @@ -84,7 +85,7 @@ void GuiSlideshowScreensaverOptions::addEditableTextComponent(ComponentListRow r { row.elements.clear(); - auto lbl = std::make_shared(mWindow, strToUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF); + auto lbl = std::make_shared(mWindow, Utils::String::toUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF); row.addElement(lbl, true); // label row.addElement(ed, true); diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 164570e40f..4ccc591af6 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -6,7 +6,6 @@ #include "PlatformId.h" #include "Settings.h" #include "SystemData.h" -#include "Util.h" #include using namespace PlatformIds; diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 5c140cf263..c1c0b64779 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -17,7 +17,6 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/Util.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.h # Animations @@ -95,7 +94,6 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Util.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Window.cpp # Animations diff --git a/es-core/src/Util.cpp b/es-core/src/Util.cpp deleted file mode 100644 index 246af37f01..0000000000 --- a/es-core/src/Util.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "Util.h" - -std::string strToUpper(const char* from) -{ - std::string str(from); - for(unsigned int i = 0; i < str.size(); i++) - str[i] = (char)toupper(from[i]); - return str; -} - -std::string& strToUpper(std::string& str) -{ - for(unsigned int i = 0; i < str.size(); i++) - str[i] = (char)toupper(str[i]); - - return str; -} - -std::string strToUpper(const std::string& str) -{ - return strToUpper(str.c_str()); -} - -std::string strreplace(std::string str, const std::string& replace, const std::string& with) -{ - size_t pos; - while((pos = str.find(replace)) != std::string::npos) - str = str.replace(pos, replace.length(), with.c_str(), with.length()); - - return str; -} diff --git a/es-core/src/Util.h b/es-core/src/Util.h deleted file mode 100644 index 19e84d98e3..0000000000 --- a/es-core/src/Util.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once -#ifndef ES_CORE_UTIL_H -#define ES_CORE_UTIL_H - -#include - -std::string strToUpper(const char* from); -std::string& strToUpper(std::string& str); -std::string strToUpper(const std::string& str); - -std::string strreplace(std::string str, const std::string& replace, const std::string& with); - -#endif // ES_CORE_UTIL_H diff --git a/es-core/src/components/ButtonComponent.cpp b/es-core/src/components/ButtonComponent.cpp index a04592898c..9496046419 100644 --- a/es-core/src/components/ButtonComponent.cpp +++ b/es-core/src/components/ButtonComponent.cpp @@ -1,8 +1,8 @@ #include "components/ButtonComponent.h" #include "resources/Font.h" +#include "utils/StringUtil.h" #include "Renderer.h" -#include "Util.h" ButtonComponent::ButtonComponent(Window* window, const std::string& text, const std::string& helpText, const std::function& func) : GuiComponent(window), mBox(window, ":/button.png"), @@ -40,7 +40,7 @@ bool ButtonComponent::input(InputConfig* config, Input input) void ButtonComponent::setText(const std::string& text, const std::string& helpText) { - mText = strToUpper(text); + mText = Utils::String::toUpper(text); mHelpText = helpText; mTextCache = std::unique_ptr(mFont->buildTextCache(mText, 0, 0, getCurTextColor())); diff --git a/es-core/src/components/DateTimeComponent.cpp b/es-core/src/components/DateTimeComponent.cpp index aba383f5af..644fd4f7e6 100644 --- a/es-core/src/components/DateTimeComponent.cpp +++ b/es-core/src/components/DateTimeComponent.cpp @@ -1,8 +1,8 @@ #include "components/DateTimeComponent.h" #include "resources/Font.h" +#include "utils/StringUtil.h" #include "Renderer.h" -#include "Util.h" DateTimeComponent::DateTimeComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), @@ -245,7 +245,7 @@ std::shared_ptr DateTimeComponent::getFont() const void DateTimeComponent::updateTextCache() { DisplayMode mode = getCurrentDisplayMode(); - const std::string dispString = mUppercase ? strToUpper(getDisplayString(mode)) : getDisplayString(mode); + const std::string dispString = mUppercase ? Utils::String::toUpper(getDisplayString(mode)) : getDisplayString(mode); std::shared_ptr font = getFont(); mTextCache = std::unique_ptr(font->buildTextCache(dispString, 0, 0, mColor)); diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index 57c945fb2a..55a97a37fa 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -4,9 +4,9 @@ #include "components/ImageComponent.h" #include "components/TextComponent.h" #include "resources/TextureResource.h" +#include "utils/StringUtil.h" #include "Log.h" #include "Settings.h" -#include "Util.h" #define OFFSET_X 12 // move the entire thing right by this amount (px) #define OFFSET_Y 12 // move the entire thing up by this amount (px) @@ -76,7 +76,7 @@ void HelpComponent::updateGrid() icon->setResize(0, height); icons.push_back(icon); - auto lbl = std::make_shared(mWindow, strToUpper(it->second), font, mStyle.textColor); + auto lbl = std::make_shared(mWindow, Utils::String::toUpper(it->second), font, mStyle.textColor); labels.push_back(lbl); width += icon->getSize().x() + lbl->getSize().x() + ICON_TEXT_SPACING + ENTRY_SPACING; diff --git a/es-core/src/components/MenuComponent.cpp b/es-core/src/components/MenuComponent.cpp index 7921cab0c1..2e60b59459 100644 --- a/es-core/src/components/MenuComponent.cpp +++ b/es-core/src/components/MenuComponent.cpp @@ -34,7 +34,7 @@ MenuComponent::MenuComponent(Window* window, const char* title, const std::share void MenuComponent::setTitle(const char* title, const std::shared_ptr& font) { - mTitle->setText(strToUpper(title)); + mTitle->setText(Utils::String::toUpper(title)); mTitle->setFont(font); } @@ -79,7 +79,7 @@ void MenuComponent::onSizeChanged() void MenuComponent::addButton(const std::string& name, const std::string& helpText, const std::function& callback) { - mButtons.push_back(std::make_shared(mWindow, strToUpper(name), helpText, callback)); + mButtons.push_back(std::make_shared(mWindow, Utils::String::toUpper(name), helpText, callback)); updateGrid(); updateSize(); } diff --git a/es-core/src/components/MenuComponent.h b/es-core/src/components/MenuComponent.h index 8574d8823d..7babd2d3a5 100644 --- a/es-core/src/components/MenuComponent.h +++ b/es-core/src/components/MenuComponent.h @@ -6,8 +6,8 @@ #include "components/ComponentList.h" #include "components/NinePatchComponent.h" #include "components/TextComponent.h" +#include "utils/StringUtil.h" #include "Renderer.h" -#include "Util.h" class ButtonComponent; class ImageComponent; @@ -29,7 +29,7 @@ class MenuComponent : public GuiComponent inline void addWithLabel(const std::string& label, const std::shared_ptr& comp, bool setCursorHere = false, bool invert_when_selected = true) { ComponentListRow row; - row.addElement(std::make_shared(mWindow, strToUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(std::make_shared(mWindow, Utils::String::toUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); row.addElement(comp, false, invert_when_selected); addRow(row, setCursorHere); } diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index 919f27f4c7..7a4bf72c32 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -48,7 +48,7 @@ class OptionListComponent : public GuiComponent for(auto it = mParent->mEntries.begin(); it != mParent->mEntries.end(); it++) { row.elements.clear(); - row.addElement(std::make_shared(mWindow, strToUpper(it->name), font, 0x777777FF), true); + row.addElement(std::make_shared(mWindow, Utils::String::toUpper(it->name), font, 0x777777FF), true); OptionListData& e = *it; @@ -302,7 +302,7 @@ class OptionListComponent : public GuiComponent { if(it->selected) { - mText.setText(strToUpper(it->name)); + mText.setText(Utils::String::toUpper(it->name)); mText.setSize(0, mText.getSize().y()); setSize(mText.getSize().x() + mLeftArrow.getSize().x() + mRightArrow.getSize().x() + 24, mText.getSize().y()); if(mParent) // hack since theres no "on child size changed" callback atm... diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index 7356efe45c..d1fc995f40 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -4,7 +4,6 @@ #include "Log.h" #include "Renderer.h" #include "Settings.h" -#include "Util.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), @@ -157,11 +156,11 @@ void TextComponent::calculateExtent() { if(mAutoCalcExtent.x()) { - mSize = mFont->sizeText(mUppercase ? strToUpper(mText) : mText, mLineSpacing); + mSize = mFont->sizeText(mUppercase ? Utils::String::toUpper(mText) : mText, mLineSpacing); }else{ if(mAutoCalcExtent.y()) { - mSize[1] = mFont->sizeWrappedText(mUppercase ? strToUpper(mText) : mText, getSize().x(), mLineSpacing).y(); + mSize[1] = mFont->sizeWrappedText(mUppercase ? Utils::String::toUpper(mText) : mText, getSize().x(), mLineSpacing).y(); } } } @@ -176,7 +175,7 @@ void TextComponent::onTextChanged() return; } - std::string text = mUppercase ? strToUpper(mText) : mText; + std::string text = mUppercase ? Utils::String::toUpper(mText) : mText; std::shared_ptr f = mFont; const bool isMultiline = (mSize.y() == 0 || mSize.y() > f->getHeight()*1.2f); diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 0968fcc6a8..41ccbdb6d2 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -5,7 +5,6 @@ #include "PowerSaver.h" #include "Renderer.h" #include "ThemeData.h" -#include "Util.h" #include "Window.h" #include diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index a8555f8bd9..faadbf4ac3 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -3,10 +3,10 @@ #include "components/TextComponent.h" #include "guis/GuiInputConfig.h" #include "utils/FileSystemUtil.h" +#include "utils/StringUtil.h" #include "InputManager.h" #include "PowerSaver.h" #include "Renderer.h" -#include "Util.h" #include "Window.h" #define HOLD_TIME 1000 @@ -85,7 +85,7 @@ bool GuiDetectDevice::input(InputConfig* config, Input input) // started holding mHoldingConfig = config; mHoldTime = HOLD_TIME; - mDeviceHeld->setText(strToUpper(config->getDeviceName())); + mDeviceHeld->setText(Utils::String::toUpper(config->getDeviceName())); }else if(!input.value && mHoldingConfig == config) { // cancel diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index cd7536558f..2ec414c557 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -162,7 +162,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi ss << "CEC"; else ss << "GAMEPAD " << (target->getDeviceId() + 1); - mSubtitle1 = std::make_shared(mWindow, strToUpper(ss.str()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, ALIGN_CENTER); + mSubtitle1 = std::make_shared(mWindow, Utils::String::toUpper(ss.str()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, ALIGN_CENTER); mGrid.setEntry(mSubtitle1, Vector2i(0, 2), false, true); mSubtitle2 = std::make_shared(mWindow, "HOLD ANY BUTTON TO SKIP", Font::get(FONT_SIZE_SMALL), 0x99999900, ALIGN_CENTER); @@ -379,7 +379,7 @@ void GuiInputConfig::setNotDefined(const std::shared_ptr& text) void GuiInputConfig::setAssignedTo(const std::shared_ptr& text, Input input) { - text->setText(strToUpper(input.string())); + text->setText(Utils::String::toUpper(input.string())); text->setColor(0x777777FF); } diff --git a/es-core/src/guis/GuiMsgBox.cpp b/es-core/src/guis/GuiMsgBox.cpp index 2a39f5f90d..7f05603200 100644 --- a/es-core/src/guis/GuiMsgBox.cpp +++ b/es-core/src/guis/GuiMsgBox.cpp @@ -31,7 +31,7 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, }else{ for(auto it = mButtons.cbegin(); it != mButtons.cend(); it++) { - if(strToUpper((*it)->getText()) == "OK" || strToUpper((*it)->getText()) == "NO") + if(Utils::String::toUpper((*it)->getText()) == "OK" || Utils::String::toUpper((*it)->getText()) == "NO") { mAcceleratorFunc = (*it)->getPressedFunc(); break; diff --git a/es-core/src/guis/GuiTextEditPopup.cpp b/es-core/src/guis/GuiTextEditPopup.cpp index a96dfddab2..267939430e 100644 --- a/es-core/src/guis/GuiTextEditPopup.cpp +++ b/es-core/src/guis/GuiTextEditPopup.cpp @@ -11,7 +11,7 @@ GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, con addChild(&mBackground); addChild(&mGrid); - mTitle = std::make_shared(mWindow, strToUpper(title), Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); + mTitle = std::make_shared(mWindow, Utils::String::toUpper(title), Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); mText = std::make_shared(mWindow); mText->setValue(initValue); diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index dfded5c8e1..f0e93e61cc 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -4,7 +4,6 @@ #include "utils/StringUtil.h" #include "Log.h" #include "Renderer.h" -#include "Util.h" FT_Library Font::sLibrary = NULL; diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index 76fa1239ae..c3d9eff0b0 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -2,7 +2,6 @@ #include "utils/FileSystemUtil.h" #include "resources/TextureData.h" -#include "Util.h" TextureDataManager TextureResource::sTextureDataManager; std::map< TextureResource::TextureKeyType, std::weak_ptr > TextureResource::sTextureMap; diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index b19fbf6993..15f7bf8e89 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -7,6 +7,7 @@ // because windows... #include #include +#define getcwd _getcwd #define mkdir(x,y) _mkdir(x) #define snprintf _snprintf #define unlink _unlink @@ -245,7 +246,7 @@ namespace Utils else path = getParent(path) + "/" + resolved; - for( ++it; it != pathList.cend(); ++it) + for(++it; it != pathList.cend(); ++it) path += (path.size() == 0) ? (*it) : ("/" + (*it)); scan = true; @@ -335,19 +336,19 @@ namespace Utils std::string resolveRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome) { - std::string path = getGenericPath(_path); + std::string path = getGenericPath(_path); std::string relativeTo = isDirectory(_relativeTo) ? getGenericPath(_relativeTo) : getParent(_relativeTo); // nothing to resolve - if (!path.length()) + if(!path.length()) return path; // replace '.' with relativeTo - if (path[0] == '.') + if(path[0] == '.') return (relativeTo + "/" + &(path[1])); // replace '~' with homePath - if (_allowHome && (path[0] == '~')) + if(_allowHome && (path[0] == '~')) return (getHomePath() + "/" + &(path[1])); // nothing to resolve @@ -357,21 +358,20 @@ namespace Utils std::string createRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome) { - bool contains = false; - std::string path = removeCommonPath(_path, _relativeTo, contains); + bool contains = false; + std::string path = removeCommonPath(_path, _relativeTo, contains); - if (contains) + if(contains) { // success return ("." + path); } - if (_allowHome) + if(_allowHome) { - contains = false; - std::string path = removeCommonPath(_path, getHomePath(), contains); + path = removeCommonPath(_path, getHomePath(), contains); - if (contains) + if(contains) { // success return ("~" + path); @@ -385,11 +385,11 @@ namespace Utils std::string removeCommonPath(const std::string& _path, const std::string& _common, bool& _contains) { - std::string path = getGenericPath(_path); + std::string path = getGenericPath(_path); std::string common = isDirectory(_common) ? getGenericPath(_common) : getParent(_common); // check if path contains common - if (path.find_first_of(common) == 0) + if(path.find_first_of(common) == 0) { _contains = true; return path.substr(common.length() + 1); @@ -409,10 +409,10 @@ namespace Utils #if defined(_WIN32) HANDLE hFile = CreateFile(path.c_str(), FILE_READ_ATTRIBUTES, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); - if (hFile != INVALID_HANDLE_VALUE) + if(hFile != INVALID_HANDLE_VALUE) { resolved.resize(GetFinalPathNameByHandle(hFile, nullptr, 0, FILE_NAME_NORMALIZED) + 1); - if (GetFinalPathNameByHandle(hFile, (LPSTR)resolved.data(), (DWORD)resolved.size(), FILE_NAME_NORMALIZED) > 0) + if(GetFinalPathNameByHandle(hFile, (LPSTR)resolved.data(), (DWORD)resolved.size(), FILE_NAME_NORMALIZED) > 0) { resolved.resize(resolved.size() - 1); resolved = getGenericPath(resolved); @@ -423,10 +423,10 @@ namespace Utils struct stat info; // check if lstat succeeded - if (lstat(path.c_str(), &info) == 0) + if(lstat(path.c_str(), &info) == 0) { resolved.resize(info.st_size); - if (readlink(path.c_str(), (char*)resolved.data(), resolved.size()) > 0) + if(readlink(path.c_str(), (char*)resolved.data(), resolved.size()) > 0) resolved = getGenericPath(resolved); } #endif // _WIN32 diff --git a/es-core/src/utils/TimeUtil.cpp b/es-core/src/utils/TimeUtil.cpp index 5ae3690cba..2b10eeb4a0 100644 --- a/es-core/src/utils/TimeUtil.cpp +++ b/es-core/src/utils/TimeUtil.cpp @@ -39,8 +39,7 @@ namespace Utils void DateTime::setTime(const time_t& _time) { - if(_time < 0) mTime = 0; - else mTime = _time; + mTime = (_time < 0) ? 0 : _time; mTimeStruct = *localtime(&mTime); mIsoString = timeToString(mTime); From 403b7985720ed96dc466fed9467034d1c52fe7dc Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 27 Jan 2018 21:04:08 +0100 Subject: [PATCH 241/603] Remove the last traces of boost::filesystem::operational, this is PR 4 of 5 in the boost::filesystem removal quest --- es-app/src/CollectionSystemManager.cpp | 20 +++++----- es-app/src/Gamelist.cpp | 3 +- es-app/src/SystemData.cpp | 14 +++---- es-app/src/SystemScreenSaver.cpp | 47 +++++------------------ es-app/src/main.cpp | 2 +- es-app/src/scrapers/Scraper.cpp | 2 +- es-core/src/InputManager.cpp | 4 +- es-core/src/Log.cpp | 3 +- es-core/src/Settings.cpp | 8 ++-- es-core/src/ThemeData.cpp | 15 ++++---- es-core/src/components/VideoComponent.cpp | 2 +- es-core/src/platform.cpp | 35 +---------------- es-core/src/platform.h | 3 -- es-core/src/utils/FileSystemUtil.cpp | 18 +++++++-- es-core/src/utils/FileSystemUtil.h | 2 +- 15 files changed, 64 insertions(+), 114 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 79cd155cd9..bba7930df8 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -11,7 +11,6 @@ #include "Settings.h" #include "SystemData.h" #include "ThemeData.h" -#include #include #include @@ -884,13 +883,14 @@ std::vector CollectionSystemManager::getSystemsFromTheme() if (Utils::FileSystem::exists(themePath.generic_string())) { - boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end - for (boost::filesystem::directory_iterator itr(themePath); itr != end_itr; ++itr) + Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(themePath.generic_string()); + + for (Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { - if (Utils::FileSystem::isDirectory(itr->path().generic_string())) + if (Utils::FileSystem::isDirectory(*it)) { //... here you have a directory - std::string folder = itr->path().string(); + std::string folder = *it; folder = folder.substr(themePath.string().size()+1); if(Utils::FileSystem::exists(set->second.getThemePath(folder).generic_string())) @@ -944,13 +944,13 @@ std::vector CollectionSystemManager::getCollectionsFromConfigFolder if (Utils::FileSystem::exists(configPath.generic_string())) { - boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end - for (boost::filesystem::directory_iterator itr(configPath); itr != end_itr; ++itr) + Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(configPath.generic_string()); + for (Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { - if (Utils::FileSystem::isRegularFile(itr->path().generic_string())) + if (Utils::FileSystem::isRegularFile(*it)) { // it's a file - std::string file = itr->path().string(); + std::string file = *it; std::string filename = file.substr(configPath.string().size()); // need to confirm filename matches config format @@ -1019,7 +1019,7 @@ std::string getCustomCollectionConfigPath(std::string collectionName) std::string getCollectionsFolder() { - return getHomePath() + "/.emulationstation/collections/"; + return Utils::FileSystem::getHomePath() + "/.emulationstation/collections/"; } bool systemSort(SystemData* sys1, SystemData* sys2) diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index ecbafffe0b..813d939388 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -6,7 +6,6 @@ #include "Log.h" #include "Settings.h" #include "SystemData.h" -#include #include FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& path, FileType type) @@ -232,7 +231,7 @@ void updateGamelist(SystemData* system) boost::filesystem::path nodePath = Utils::FileSystem::resolveRelativePath(pathNode.text().get(), system->getStartPath(), true); boost::filesystem::path gamePath((*fit)->getPath()); - if(nodePath == gamePath || (Utils::FileSystem::exists(nodePath.generic_string()) && Utils::FileSystem::exists(gamePath.generic_string()) && boost::filesystem::equivalent(nodePath, gamePath))) + if(nodePath == gamePath || (Utils::FileSystem::exists(nodePath.generic_string()) && Utils::FileSystem::exists(gamePath.generic_string()) && Utils::FileSystem::isEquivalent(nodePath.generic_string(), gamePath.generic_string()))) { // found it root.remove_child(fileNode); diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 7115d08bc0..8a48f182d0 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -9,7 +9,6 @@ #include "platform.h" #include "Settings.h" #include "ThemeData.h" -#include #include #include #ifdef WIN32 @@ -95,7 +94,7 @@ void SystemData::populateFolder(FileData* folder) if(Utils::FileSystem::isSymlink(folderPath.generic_string())) { //if this symlink resolves to somewhere that's at the beginning of our path, it's gonna recurse - if(folderStr.find(boost::filesystem::canonical(folderPath).generic_string()) == 0) + if(folderStr.find(Utils::FileSystem::getCanonicalPath(folderPath.generic_string())) == 0) { LOG(LogWarning) << "Skipping infinitely recursive symlink \"" << folderPath << "\""; return; @@ -106,9 +105,10 @@ void SystemData::populateFolder(FileData* folder) std::string extension; bool isGame; bool showHidden = Settings::getInstance()->getBool("ShowHiddenFiles"); - for(boost::filesystem::directory_iterator end, dir(folderPath); dir != end; ++dir) + Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(folderPath.generic_string()); + for(Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { - filePath = (*dir).path(); + filePath = *it; if(filePath.stem().empty()) continue; @@ -268,7 +268,7 @@ bool SystemData::loadConfig() if(path[0] == '~') { path.erase(0, 1); - path.insert(0, getHomePath()); + path.insert(0, Utils::FileSystem::getHomePath()); } //create the system runtime environment data @@ -349,7 +349,7 @@ void SystemData::deleteSystems() std::string SystemData::getConfigPath(bool forWrite) { - boost::filesystem::path path = getHomePath() + "/.emulationstation/es_systems.cfg"; + boost::filesystem::path path = Utils::FileSystem::getHomePath() + "/.emulationstation/es_systems.cfg"; if(forWrite || Utils::FileSystem::exists(path.generic_string())) return path.generic_string(); @@ -392,7 +392,7 @@ std::string SystemData::getGamelistPath(bool forWrite) const if(Utils::FileSystem::exists(filePath.generic_string())) return filePath.generic_string(); - filePath = getHomePath() + "/.emulationstation/gamelists/" + mName + "/gamelist.xml"; + filePath = Utils::FileSystem::getHomePath() + "/.emulationstation/gamelists/" + mName + "/gamelist.xml"; if(forWrite) // make sure the directory exists if we're going to write to it, or crashes will happen Utils::FileSystem::createDirectory(filePath.parent_path().generic_string()); if(forWrite || Utils::FileSystem::exists(filePath.generic_string())) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index afe995edc9..e5ee924542 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -14,7 +14,6 @@ #include "Renderer.h" #include "Sound.h" #include "SystemData.h" -#include #include #include @@ -418,46 +417,20 @@ void SystemScreenSaver::pickRandomCustomImage(std::string& path) std::string imageDir = Settings::getInstance()->getString("SlideshowScreenSaverImageDir"); if ((imageDir != "") && (Utils::FileSystem::exists(imageDir))) { - std::string imageFilter = Settings::getInstance()->getString("SlideshowScreenSaverImageFilter"); + std::string imageFilter = Settings::getInstance()->getString("SlideshowScreenSaverImageFilter"); + std::vector matchingFiles; + Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(imageDir, Settings::getInstance()->getBool("SlideshowScreenSaverRecurse")); - std::vector matchingFiles; - - if (Settings::getInstance()->getBool("SlideshowScreenSaverRecurse")) - { - boost::filesystem::recursive_directory_iterator end_iter; - boost::filesystem::recursive_directory_iterator iter(imageDir); - - // TODO: Figure out how to remove this duplication in the else block - for (iter; iter != end_iter; ++iter) - { - if (Utils::FileSystem::isRegularFile(iter->path().generic_string())) - { - // If the image filter is empty, or the file extension is in the filter string, - // add it to the matching files list - if ((imageFilter.length() <= 0) || - (imageFilter.find(iter->path().extension().string()) != std::string::npos)) - { - matchingFiles.push_back(iter->path().string()); - } - } - } - } - else + for(Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { - boost::filesystem::directory_iterator end_iter; - boost::filesystem::directory_iterator iter(imageDir); - - for (iter; iter != end_iter; ++iter) + if (Utils::FileSystem::isRegularFile(*it)) { - if (Utils::FileSystem::isRegularFile(iter->path().generic_string())) + // If the image filter is empty, or the file extension is in the filter string, + // add it to the matching files list + if ((imageFilter.length() <= 0) || + (imageFilter.find(Utils::FileSystem::getExtension(*it)) != std::string::npos)) { - // If the image filter is empty, or the file extension is in the filter string, - // add it to the matching files list - if ((imageFilter.length() <= 0) || - (imageFilter.find(iter->path().extension().string()) != std::string::npos)) - { - matchingFiles.push_back(iter->path().string()); - } + matchingFiles.push_back(*it); } } } diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 4e4bf070fc..5c119dde83 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -167,7 +167,7 @@ bool parseArgs(int argc, char* argv[]) bool verifyHomeFolderExists() { //make sure the config directory exists - std::string home = getHomePath(); + std::string home = Utils::FileSystem::getHomePath(); std::string configDir = home + "/.emulationstation"; if(!Utils::FileSystem::exists(configDir)) { diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index f6d7de7763..b7f16552c6 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -276,7 +276,7 @@ std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& const std::string subdirectory = params.system->getName(); const std::string name = params.game->getPath().stem().generic_string() + "-" + suffix; - std::string path = getHomePath() + "/.emulationstation/downloaded_images/"; + std::string path = Utils::FileSystem::getHomePath() + "/.emulationstation/downloaded_images/"; if(!Utils::FileSystem::exists(path)) Utils::FileSystem::createDirectory(path); diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index c91adbafc2..08c16865ca 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -432,14 +432,14 @@ void InputManager::doOnFinish() std::string InputManager::getConfigPath() { - std::string path = getHomePath(); + std::string path = Utils::FileSystem::getHomePath(); path += "/.emulationstation/es_input.cfg"; return path; } std::string InputManager::getTemporaryConfigPath() { - std::string path = getHomePath(); + std::string path = Utils::FileSystem::getHomePath(); path += "/.emulationstation/es_temporaryinput.cfg"; return path; } diff --git a/es-core/src/Log.cpp b/es-core/src/Log.cpp index 536144aa28..951286519e 100644 --- a/es-core/src/Log.cpp +++ b/es-core/src/Log.cpp @@ -1,5 +1,6 @@ #include "Log.h" +#include "utils/FileSystemUtil.h" #include "platform.h" #include @@ -13,7 +14,7 @@ LogLevel Log::getReportingLevel() std::string Log::getLogPath() { - std::string home = getHomePath(); + std::string home = Utils::FileSystem::getHomePath(); return home + "/.emulationstation/es_log.txt"; } diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 62240e7f9f..4c4666c6aa 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -99,9 +99,9 @@ void Settings::setDefaults() mIntMap["ScreenSaverSwapImageTimeout"] = 10000; mBoolMap["SlideshowScreenSaverStretch"] = false; - mStringMap["SlideshowScreenSaverBackgroundAudioFile"] = getHomePath() + "/.emulationstation/slideshow/audio/slideshow_bg.wav"; + mStringMap["SlideshowScreenSaverBackgroundAudioFile"] = Utils::FileSystem::getHomePath() + "/.emulationstation/slideshow/audio/slideshow_bg.wav"; mBoolMap["SlideshowScreenSaverCustomImageSource"] = false; - mStringMap["SlideshowScreenSaverImageDir"] = getHomePath() + "/.emulationstation/slideshow/image"; + mStringMap["SlideshowScreenSaverImageDir"] = Utils::FileSystem::getHomePath() + "/.emulationstation/slideshow/image"; mStringMap["SlideshowScreenSaverImageFilter"] = ".png,.jpg"; mBoolMap["SlideshowScreenSaverRecurse"] = false; @@ -166,7 +166,7 @@ void saveMap(pugi::xml_document& doc, std::map& map, const char* type) void Settings::saveFile() { LOG(LogDebug) << "Settings::saveFile() : Saving Settings to file."; - const std::string path = getHomePath() + "/.emulationstation/es_settings.cfg"; + const std::string path = Utils::FileSystem::getHomePath() + "/.emulationstation/es_settings.cfg"; pugi::xml_document doc; @@ -187,7 +187,7 @@ void Settings::saveFile() void Settings::loadFile() { - const std::string path = getHomePath() + "/.emulationstation/es_settings.cfg"; + const std::string path = Utils::FileSystem::getHomePath() + "/.emulationstation/es_settings.cfg"; if(!Utils::FileSystem::exists(path)) return; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 9f55ec9442..613af3d226 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -6,7 +6,6 @@ #include "Log.h" #include "platform.h" #include "Settings.h" -#include #include std::vector ThemeData::sSupportedViews { { "system" }, { "basic" }, { "detailed" }, { "video" } }; @@ -163,7 +162,7 @@ std::string resolvePath(const char* in, const boost::filesystem::path& relative) // some directories could theoretically start with ~ or . if(*path.begin() == "~") { - path = getHomePath() + (in + 1); + path = Utils::FileSystem::getHomePath() + (in + 1); }else if(*path.begin() == ".") { path = relPath / (in + 1); @@ -484,7 +483,7 @@ const std::shared_ptr& ThemeData::getDefault() { theme = std::shared_ptr(new ThemeData()); - const std::string path = getHomePath() + "/.emulationstation/es_theme_default.xml"; + const std::string path = Utils::FileSystem::getHomePath() + "/.emulationstation/es_theme_default.xml"; if(Utils::FileSystem::exists(path)) { try @@ -538,19 +537,19 @@ std::map ThemeData::getThemeSets() static const size_t pathCount = 2; boost::filesystem::path paths[pathCount] = { "/etc/emulationstation/themes", - getHomePath() + "/.emulationstation/themes" + Utils::FileSystem::getHomePath() + "/.emulationstation/themes" }; - boost::filesystem::directory_iterator end; - for(size_t i = 0; i < pathCount; i++) { if(!Utils::FileSystem::isDirectory(paths[i].generic_string())) continue; - for(boost::filesystem::directory_iterator it(paths[i]); it != end; ++it) + Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(paths[i].generic_string()); + + for(Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { - if(Utils::FileSystem::isDirectory((*it).path().generic_string())) + if(Utils::FileSystem::isDirectory(*it)) { ThemeSet set = {*it}; sets[set.getName()] = set; diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 41ccbdb6d2..315319c659 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -16,7 +16,7 @@ std::string getTitlePath() { } std::string getTitleFolder() { - std::string home = getHomePath(); + std::string home = Utils::FileSystem::getHomePath(); return home + "/.emulationstation/tmp/"; } diff --git a/es-core/src/platform.cpp b/es-core/src/platform.cpp index b698765a7b..0319cf88f5 100644 --- a/es-core/src/platform.cpp +++ b/es-core/src/platform.cpp @@ -1,44 +1,13 @@ #include "platform.h" -#include #include #ifdef WIN32 #include +#else +#include #endif #include -std::string getHomePath() -{ - std::string homePath; - - // this should give you something like "/home/YOUR_USERNAME" on Linux and "C:\Users\YOUR_USERNAME\" on Windows - const char * envHome = getenv("HOME"); - if(envHome != nullptr) - { - homePath = envHome; - } - -#ifdef WIN32 - // but does not seem to work for Windows XP or Vista, so try something else - if (homePath.empty()) { - const char * envDir = getenv("HOMEDRIVE"); - const char * envPath = getenv("HOMEPATH"); - if (envDir != nullptr && envPath != nullptr) { - homePath = envDir; - homePath += envPath; - - for(unsigned int i = 0; i < homePath.length(); i++) - if(homePath[i] == '\\') - homePath[i] = '/'; - } - } -#endif - - // convert path to generic directory seperators - boost::filesystem::path genericPath(homePath); - return genericPath.generic_string(); -} - int runShutdownCommand() { #ifdef WIN32 // windows diff --git a/es-core/src/platform.h b/es-core/src/platform.h index 98826ac294..7ffaf5d31e 100644 --- a/es-core/src/platform.h +++ b/es-core/src/platform.h @@ -21,9 +21,6 @@ #define GLHEADER #endif -std::string getHomePath(); - - int runShutdownCommand(); // shut down the system (returns 0 if successful) int runRestartCommand(); // restart the system (returns 0 if successful) int runSystemCommand(const std::string& cmd_utf8); // run a utf-8 encoded in the shell (requires wstring conversion on Windows) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 15f7bf8e89..0d6ac65e54 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -22,7 +22,7 @@ namespace Utils { namespace FileSystem { - stringList getDirContent(const std::string& _path) + stringList getDirContent(const std::string& _path, const bool _recursive) { std::string path = getGenericPath(_path); stringList contentList; @@ -44,7 +44,13 @@ namespace Utils // ignore "." and ".." if((name != ".") && (name != "..")) - contentList.push_back(name); + { + std::string fullName(path + "/" + name); + contentList.push_back(fullName); + + if(_recursive && isDirectory(fullName)) + contentList.merge(getDirContent(fullName, true)); + } } while(FindNextFile(hFind, &findData)); @@ -64,7 +70,13 @@ namespace Utils // ignore "." and ".." if((name != ".") && (name != "..")) - contentList.push_back(name); + { + std::string fullName(path + "/" + name); + contentList.push_back(fullName); + + if(_recursive && isDirectory(fullName)) + contentList.merge(getDirContent(fullName, true)); + } } closedir(dir); diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index 5d4e705c60..da623f55cf 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -11,7 +11,7 @@ namespace Utils { typedef std::list stringList; - stringList getDirContent (const std::string& _path); + stringList getDirContent (const std::string& _path, const bool _recursive = false); std::string getHomePath (); std::string getCWDPath (); std::string getGenericPath (const std::string& _path); From 421e4a23df295eb9b8c6f02e4ffe3686a6e5af05 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 29 Jan 2018 23:50:10 +0100 Subject: [PATCH 242/603] The final traces of boost has been eliminated --- CMakeLists.txt | 12 --- CREDITS.md | 3 - README.md | 7 +- es-app/CMakeLists.txt | 4 +- es-app/src/CollectionSystemManager.cpp | 23 +++--- es-app/src/FileData.cpp | 11 +-- es-app/src/FileData.h | 11 +-- es-app/src/Gamelist.cpp | 36 +++++---- es-app/src/MetaData.cpp | 8 +- es-app/src/MetaData.h | 6 +- es-app/src/SystemData.cpp | 78 ++++++++----------- es-app/src/SystemScreenSaver.cpp | 1 + es-app/src/guis/GuiGameScraper.cpp | 2 +- es-app/src/guis/GuiGamelistOptions.cpp | 2 +- es-app/src/guis/GuiMetaDataEd.cpp | 2 +- es-app/src/guis/GuiScraperMulti.cpp | 2 +- es-app/src/main.cpp | 2 +- es-app/src/scrapers/Scraper.cpp | 4 +- es-app/src/scrapers/Scraper.h | 4 + .../src/views/gamelist/BasicGameListView.cpp | 2 +- es-core/src/GuiComponent.cpp | 1 + es-core/src/HttpReq.h | 2 +- es-core/src/ThemeData.cpp | 39 +++------- es-core/src/ThemeData.h | 20 ++--- es-core/src/Window.cpp | 1 + es-core/src/components/VideoComponent.cpp | 5 +- es-core/src/components/VideoComponent.h | 7 +- .../src/components/VideoPlayerComponent.cpp | 1 + es-core/src/components/VideoVlcComponent.cpp | 6 +- es-core/src/utils/FileSystemUtil.cpp | 76 ++++++++++++------ es-core/src/utils/FileSystemUtil.h | 1 + 31 files changed, 182 insertions(+), 197 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7264ba474a..66d06762eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,11 +49,6 @@ endif() find_package(Freetype REQUIRED) find_package(FreeImage REQUIRED) find_package(SDL2 REQUIRED) -if(MSVC) -find_package(Boost REQUIRED COMPONENTS system date_time) -else() -find_package(Boost REQUIRED COMPONENTS system filesystem date_time) -endif() find_package(CURL REQUIRED) find_package(VLC REQUIRED) find_package(libCEC) @@ -113,7 +108,6 @@ set(COMMON_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIRS} ${FreeImage_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} - ${Boost_INCLUDE_DIRS} ${CURL_INCLUDE_DIR} ${VLC_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/external @@ -157,17 +151,11 @@ endif() #define libraries and directories if(DEFINED BCMHOST) link_directories( - ${Boost_LIBRARY_DIRS} "/opt/vc/lib" ) -else() - link_directories( - ${Boost_LIBRARY_DIRS} - ) endif() set(COMMON_LIBRARIES - ${Boost_LIBRARIES} ${FREETYPE_LIBRARIES} ${FreeImage_LIBRARIES} ${SDL2_LIBRARY} diff --git a/CREDITS.md b/CREDITS.md index 49c70ddbc9..babde810f5 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -23,9 +23,6 @@ FreeType cURL http://curl.haxx.se/ -Boost - http://www.boost.org/ - nanosvg https://github.com/memononen/nanosvg diff --git a/README.md b/README.md index 5a300a00e0..76908388ec 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,12 @@ Building EmulationStation uses some C++11 code, which means you'll need to use at least g++-4.7 on Linux, or VS2010 on Windows, to compile. -EmulationStation has a few dependencies. For building, you'll need CMake, SDL2, Boost (System, Filesystem, DateTime, Locale), FreeImage, FreeType, and cURL. You also should probably install the `fonts-droid` package which contains fallback fonts for Chinese/Japanese/Korean characters, but ES will still work fine without it (this package is only used at run-time). +EmulationStation has a few dependencies. For building, you'll need CMake, SDL2, FreeImage, FreeType, and cURL. You also should probably install the `fonts-droid` package which contains fallback fonts for Chinese/Japanese/Korean characters, but ES will still work fine without it (this package is only used at run-time). **On Debian/Ubuntu:** All of this be easily installed with apt-get: ```bash -sudo apt-get install libsdl2-dev libboost-system-dev libboost-filesystem-dev libboost-date-time-dev \ - libboost-locale-dev libfreeimage-dev libfreetype6-dev libcurl4-openssl-dev \ +sudo apt-get install libsdl2-dev libfreeimage-dev libfreetype6-dev libcurl4-openssl-dev \ libasound2-dev libgl1-mesa-dev build-essential cmake fonts-droid \ libvlc-dev libvlccore-dev vlc-nox ``` @@ -47,8 +46,6 @@ Complete Raspberry Pi build instructions at [emulationstation.org](http://emulat **On Windows:** -[Boost](http://www.boost.org/users/download/) (you'll need to compile yourself or get the pre-compiled binaries) - [FreeImage](http://downloads.sourceforge.net/freeimage/FreeImage3154Win32.zip) [FreeType2](http://download.savannah.gnu.org/releases/freetype/freetype-2.4.9.tar.bz2) (you'll need to compile) diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 005c82488b..ee3c644c4b 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -155,8 +155,8 @@ SET(CPACK_RESOURCE_FILE README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Alec Lofquist ") SET(CPACK_DEBIAN_PACKAGE_SECTION "misc") SET(CPACK_DEBIAN_PACKAGE_PRIORITY "extra") -SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libsdl2-2.0-0, libboost-system${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}, libboost-filesystem${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}, libfreeimage3, libfreetype6, libcurl3, libasound2") -SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS "debhelper (>= 8.0.0), cmake, g++ (>= 4.8), libsdl2-dev, libboost-system-dev, libboost-filesystem-dev, libboost-date-time-dev, libfreeimage-dev, libfreetype6-dev, libcurl4-openssl-dev, libasound2-dev, libgl1-mesa-dev") +SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libsdl2-2.0-0, libfreeimage3, libfreetype6, libcurl3, libasound2") +SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS "debhelper (>= 8.0.0), cmake, g++ (>= 4.8), libsdl2-dev, libfreeimage-dev, libfreetype6-dev, libcurl4-openssl-dev, libasound2-dev, libgl1-mesa-dev") SET(CPACK_PACKAGE_VENDOR "emulationstation.org") SET(CPACK_PACKAGE_VERSION "2.0.0~rc1") diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index bba7930df8..eb81628454 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -330,7 +330,7 @@ bool CollectionSystemManager::isThemeCustomCollectionCompatible(std::vectorgetString("ThemeSet")); if(set != themeSets.cend()) { - std::string defaultThemeFilePath = set->second.path.string() + "/theme.xml"; + std::string defaultThemeFilePath = set->second.path + "/theme.xml"; if (Utils::FileSystem::exists(defaultThemeFilePath)) { return true; @@ -879,11 +879,11 @@ std::vector CollectionSystemManager::getSystemsFromTheme() Settings::getInstance()->setString("ThemeSet", set->first); } - boost::filesystem::path themePath = set->second.path; + std::string themePath = set->second.path; - if (Utils::FileSystem::exists(themePath.generic_string())) + if (Utils::FileSystem::exists(themePath)) { - Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(themePath.generic_string()); + Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(themePath); for (Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { @@ -891,9 +891,9 @@ std::vector CollectionSystemManager::getSystemsFromTheme() { //... here you have a directory std::string folder = *it; - folder = folder.substr(themePath.string().size()+1); + folder = folder.substr(themePath.size()+1); - if(Utils::FileSystem::exists(set->second.getThemePath(folder).generic_string())) + if(Utils::FileSystem::exists(set->second.getThemePath(folder))) { systems.push_back(folder); } @@ -940,18 +940,18 @@ std::vector CollectionSystemManager::getUnusedSystemsFromTheme() std::vector CollectionSystemManager::getCollectionsFromConfigFolder() { std::vector systems; - boost::filesystem::path configPath = getCollectionsFolder(); + std::string configPath = getCollectionsFolder(); - if (Utils::FileSystem::exists(configPath.generic_string())) + if (Utils::FileSystem::exists(configPath)) { - Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(configPath.generic_string()); + Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(configPath); for (Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { if (Utils::FileSystem::isRegularFile(*it)) { // it's a file std::string file = *it; - std::string filename = file.substr(configPath.string().size()); + std::string filename = file.substr(configPath.size()); // need to confirm filename matches config format if (filename != "custom-.cfg" && Utils::String::startsWith(filename, "custom-") && Utils::String::endsWith(filename, ".cfg")) @@ -1013,8 +1013,7 @@ bool CollectionSystemManager::includeFileInAutoCollections(FileData* file) std::string getCustomCollectionConfigPath(std::string collectionName) { - boost::filesystem::path path = getCollectionsFolder() + "custom-" + collectionName + ".cfg"; - return path.generic_string(); + return getCollectionsFolder() + "custom-" + collectionName + ".cfg";; } std::string getCollectionsFolder() diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 035932bd4a..ebcf7b8502 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -12,8 +12,9 @@ #include "SystemData.h" #include "VolumeControl.h" #include "Window.h" +#include -FileData::FileData(FileType type, const boost::filesystem::path& path, SystemEnvironmentData* envData, SystemData* system) +FileData::FileData(FileType type, const std::string& path, SystemEnvironmentData* envData, SystemData* system) : mType(type), mPath(path), mSystem(system), mEnvData(envData), mSourceFileData(NULL), mParent(NULL), metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA) // metadata is REALLY set in the constructor! { // metadata needs at least a name field (since that's what getName() will return) @@ -35,7 +36,7 @@ FileData::~FileData() std::string FileData::getDisplayName() const { - std::string stem = mPath.stem().generic_string(); + std::string stem = Utils::FileSystem::getStem(mPath); if(mSystem && mSystem->hasPlatformId(PlatformIds::ARCADE) || mSystem->hasPlatformId(PlatformIds::NEOGEO)) stem = PlatformIds::mameTitleSearch(stem.c_str()); @@ -254,9 +255,9 @@ void FileData::launchGame(Window* window) std::string command = mEnvData->mLaunchCommand; - const std::string rom = Utils::FileSystem::getEscapedPath(getPath().generic_string()); - const std::string basename = getPath().stem().string(); - const std::string rom_raw = boost::filesystem::path(getPath()).make_preferred().string(); + const std::string rom = Utils::FileSystem::getEscapedPath(getPath()); + const std::string basename = Utils::FileSystem::getStem(getPath()); + const std::string rom_raw = getPath(); command = Utils::String::replace(command, "%ROM%", rom); command = Utils::String::replace(command, "%BASENAME%", basename); diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 57a98b1a7e..28a311b735 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -2,6 +2,7 @@ #ifndef ES_APP_FILE_DATA_H #define ES_APP_FILE_DATA_H +#include "utils/FileSystemUtil.h" #include "MetaData.h" #include @@ -32,12 +33,12 @@ FileType stringToFileType(const char* str); class FileData { public: - FileData(FileType type, const boost::filesystem::path& path, SystemEnvironmentData* envData, SystemData* system); + FileData(FileType type, const std::string& path, SystemEnvironmentData* envData, SystemData* system); virtual ~FileData(); virtual const std::string& getName(); inline FileType getType() const { return mType; } - inline const boost::filesystem::path& getPath() const { return mPath; } + inline const std::string& getPath() const { return mPath; } inline FileData* getParent() const { return mParent; } inline const std::unordered_map& getChildrenByFilename() const { return mChildrenByFilename; } inline const std::vector& getChildren() const { return mChildren; } @@ -59,8 +60,8 @@ class FileData virtual inline void refreshMetadata() { return; }; virtual std::string getKey(); - inline std::string getFullPath() { return getPath().string(); }; - inline std::string getFileName() { return getPath().filename().string(); }; + inline std::string getFullPath() { return getPath(); }; + inline std::string getFileName() { return Utils::FileSystem::getFileName(getPath()); }; virtual FileData* getSourceFileData(); inline std::string getSystemName() const { return mSystemName; }; @@ -94,7 +95,7 @@ class FileData private: FileType mType; - boost::filesystem::path mPath; + std::string mPath; SystemEnvironmentData* mEnvData; SystemData* mSystem; std::unordered_map mChildrenByFilename; diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 813d939388..784c28125d 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -8,12 +8,12 @@ #include "SystemData.h" #include -FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& path, FileType type) +FileData* findOrCreateFile(SystemData* system, const std::string& path, FileType type) { // first, verify that path is within the system's root folder FileData* root = system->getRootFolder(); bool contains = false; - boost::filesystem::path relative = Utils::FileSystem::removeCommonPath(path.generic_string(), root->getPath().generic_string(), contains); + std::string relative = Utils::FileSystem::removeCommonPath(path, root->getPath(), contains); if(!contains) { @@ -21,21 +21,22 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa return NULL; } - auto path_it = relative.begin(); + Utils::FileSystem::stringList pathList = Utils::FileSystem::getPathList(relative); + auto path_it = pathList.begin(); FileData* treeNode = root; bool found = false; - while(path_it != relative.end()) + while(path_it != pathList.end()) { const std::unordered_map& children = treeNode->getChildrenByFilename(); - std::string key = path_it->string(); + std::string key = *path_it; found = children.find(key) != children.cend(); if (found) { treeNode = children.at(key); } // this is the end - if(path_it == --relative.end()) + if(path_it == --pathList.end()) { if(found) return treeNode; @@ -62,7 +63,7 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa } // create missing folder - FileData* folder = new FileData(FOLDER, treeNode->getPath().stem() / *path_it, system->getSystemEnvData(), system); + FileData* folder = new FileData(FOLDER, Utils::FileSystem::getStem(treeNode->getPath()) + "/" + *path_it, system->getSystemEnvData(), system); treeNode->addChild(folder); treeNode = folder; } @@ -75,6 +76,7 @@ FileData* findOrCreateFile(SystemData* system, const boost::filesystem::path& pa void parseGamelist(SystemData* system) { + bool trustGamelist = Settings::getInstance()->getBool("ParseGamelistOnly"); std::string xmlpath = system->getGamelistPath(false); if(!Utils::FileSystem::exists(xmlpath)) @@ -98,7 +100,7 @@ void parseGamelist(SystemData* system) return; } - boost::filesystem::path relativeTo = system->getStartPath(); + std::string relativeTo = system->getStartPath(); const char* tagList[2] = { "game", "folder" }; FileType typeList[2] = { GAME, FOLDER }; @@ -108,9 +110,9 @@ void parseGamelist(SystemData* system) FileType type = typeList[i]; for(pugi::xml_node fileNode = root.child(tag); fileNode; fileNode = fileNode.next_sibling(tag)) { - boost::filesystem::path path = Utils::FileSystem::resolveRelativePath(fileNode.child("path").text().get(), relativeTo.generic_string(), false); + const std::string path = Utils::FileSystem::resolveRelativePath(fileNode.child("path").text().get(), relativeTo, false); - if(!Utils::FileSystem::exists(path.generic_string())) + if(!trustGamelist && !Utils::FileSystem::exists(path)) { LOG(LogWarning) << "File \"" << path << "\" does not exist! Ignoring."; continue; @@ -155,7 +157,7 @@ void addFileDataNode(pugi::xml_node& parent, const FileData* file, const char* t //there's something useful in there so we'll keep the node, add the path // try and make the path relative if we can so things still work if we change the rom folder location in the future - newNode.prepend_child("path").text().set(Utils::FileSystem::createRelativePath(file->getPath().generic_string(), system->getStartPath(), false).c_str()); + newNode.prepend_child("path").text().set(Utils::FileSystem::createRelativePath(file->getPath(), system->getStartPath(), false).c_str()); } } @@ -229,9 +231,11 @@ void updateGamelist(SystemData* system) continue; } - boost::filesystem::path nodePath = Utils::FileSystem::resolveRelativePath(pathNode.text().get(), system->getStartPath(), true); - boost::filesystem::path gamePath((*fit)->getPath()); - if(nodePath == gamePath || (Utils::FileSystem::exists(nodePath.generic_string()) && Utils::FileSystem::exists(gamePath.generic_string()) && Utils::FileSystem::isEquivalent(nodePath.generic_string(), gamePath.generic_string()))) + std::string nodePath = Utils::FileSystem::resolveRelativePath(pathNode.text().get(), system->getStartPath(), true); + std::string gamePath = (*fit)->getPath(); + if(nodePath == gamePath || (Utils::FileSystem::exists(nodePath) && + Utils::FileSystem::exists(gamePath) && + Utils::FileSystem::isEquivalent(nodePath, gamePath))) { // found it root.remove_child(fileNode); @@ -248,8 +252,8 @@ void updateGamelist(SystemData* system) if (numUpdated > 0) { //make sure the folders leading up to this path exist (or the write will fail) - boost::filesystem::path xmlWritePath(system->getGamelistPath(true)); - Utils::FileSystem::createDirectory(xmlWritePath.parent_path().generic_string()); + std::string xmlWritePath(system->getGamelistPath(true)); + Utils::FileSystem::createDirectory(Utils::FileSystem::getParent(xmlWritePath)); LOG(LogInfo) << "Added/Updated " << numUpdated << " entities in '" << xmlReadPath << "'"; diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 7732ac16b9..4db852dde2 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -67,7 +67,7 @@ MetaDataList::MetaDataList(MetaDataListType type) } -MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node& node, const boost::filesystem::path& relativeTo) +MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node& node, const std::string& relativeTo) { MetaDataList mdl(type); @@ -82,7 +82,7 @@ MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node& std::string value = md.text().get(); if (iter->type == MD_PATH) { - value = Utils::FileSystem::resolveRelativePath(value, relativeTo.generic_string(), true); + value = Utils::FileSystem::resolveRelativePath(value, relativeTo, true); } mdl.set(iter->key, value); }else{ @@ -93,7 +93,7 @@ MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node& return mdl; } -void MetaDataList::appendToXML(pugi::xml_node& parent, bool ignoreDefaults, const boost::filesystem::path& relativeTo) const +void MetaDataList::appendToXML(pugi::xml_node& parent, bool ignoreDefaults, const std::string& relativeTo) const { const std::vector& mdd = getMDD(); @@ -110,7 +110,7 @@ void MetaDataList::appendToXML(pugi::xml_node& parent, bool ignoreDefaults, cons // try and make paths relative if we can std::string value = mapIter->second; if (mddIter->type == MD_PATH) - value = Utils::FileSystem::createRelativePath(value, relativeTo.generic_string(), true); + value = Utils::FileSystem::createRelativePath(value, relativeTo, true); parent.append_child(mapIter->first.c_str()).text().set(value.c_str()); } diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 7efdcda41b..6ed8f6d44c 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -2,8 +2,8 @@ #ifndef ES_APP_META_DATA_H #define ES_APP_META_DATA_H -#include #include +#include namespace pugi { class xml_node; } @@ -44,8 +44,8 @@ const std::vector& getMDDByType(MetaDataListType type); class MetaDataList { public: - static MetaDataList createFromXML(MetaDataListType type, pugi::xml_node& node, const boost::filesystem::path& relativeTo); - void appendToXML(pugi::xml_node& parent, bool ignoreDefaults, const boost::filesystem::path& relativeTo) const; + static MetaDataList createFromXML(MetaDataListType type, pugi::xml_node& node, const std::string& relativeTo); + void appendToXML(pugi::xml_node& parent, bool ignoreDefaults, const std::string& relativeTo) const; MetaDataList(MetaDataListType type); diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 8a48f182d0..1ecc274b70 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -67,55 +67,40 @@ void SystemData::setIsGameSystemStatus() mIsGameSystem = (mName != "retropie"); } -// test to see if a file is hidden -bool isHidden(const boost::filesystem::path &filePath) -{ -#ifdef WIN32 - const DWORD Attributes = GetFileAttributes(filePath.generic_string().c_str()); - return (Attributes != INVALID_FILE_ATTRIBUTES) && (Attributes & FILE_ATTRIBUTE_HIDDEN); -#else - boost::filesystem::path::string_type fileName = filePath.filename().string(); - return fileName[0] == '.'; -#endif -} - void SystemData::populateFolder(FileData* folder) { - const boost::filesystem::path& folderPath = folder->getPath(); - if(!Utils::FileSystem::isDirectory(folderPath.generic_string())) + const std::string& folderPath = folder->getPath(); + if(!Utils::FileSystem::isDirectory(folderPath)) { LOG(LogWarning) << "Error - folder with path \"" << folderPath << "\" is not a directory!"; return; } - const std::string folderStr = folderPath.generic_string(); - //make sure that this isn't a symlink to a thing we already have - if(Utils::FileSystem::isSymlink(folderPath.generic_string())) + if(Utils::FileSystem::isSymlink(folderPath)) { + Utils::FileSystem::getCanonicalPath("/RetroGames/roms/nes/garbage/../smurf.nes"); + //if this symlink resolves to somewhere that's at the beginning of our path, it's gonna recurse - if(folderStr.find(Utils::FileSystem::getCanonicalPath(folderPath.generic_string())) == 0) + if(folderPath.find(Utils::FileSystem::getCanonicalPath(folderPath)) == 0) { LOG(LogWarning) << "Skipping infinitely recursive symlink \"" << folderPath << "\""; return; } } - boost::filesystem::path filePath; + std::string filePath; std::string extension; bool isGame; bool showHidden = Settings::getInstance()->getBool("ShowHiddenFiles"); - Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(folderPath.generic_string()); + Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(folderPath); for(Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { filePath = *it; - if(filePath.stem().empty()) - continue; - //this is a little complicated because we allow a list of extensions to be defined (delimited with a space) //we first get the extension of the file itself: - extension = filePath.extension().string(); + extension = Utils::FileSystem::getExtension(filePath); //fyi, folders *can* also match the extension and be added as games - this is mostly just to support higan //see issue #75: https://github.com/Aloshi/EmulationStation/issues/75 @@ -124,18 +109,18 @@ void SystemData::populateFolder(FileData* folder) if(std::find(mEnvData->mSearchExtensions.cbegin(), mEnvData->mSearchExtensions.cend(), extension) != mEnvData->mSearchExtensions.cend()) { // skip hidden files - if(!showHidden && isHidden(filePath)) + if(!showHidden && Utils::FileSystem::isHidden(filePath)) continue; - FileData* newGame = new FileData(GAME, filePath.generic_string(), mEnvData, this); + FileData* newGame = new FileData(GAME, filePath, mEnvData, this); folder->addChild(newGame); isGame = true; } //add directories that also do not match an extension as folders - if(!isGame && Utils::FileSystem::isDirectory(filePath.generic_string())) + if(!isGame && Utils::FileSystem::isDirectory(filePath)) { - FileData* newFolder = new FileData(FOLDER, filePath.generic_string(), mEnvData, this); + FileData* newFolder = new FileData(FOLDER, filePath, mEnvData, this); populateFolder(newFolder); //ignore folders that do not contain games @@ -261,8 +246,7 @@ bool SystemData::loadConfig() } //convert path to generic directory seperators - boost::filesystem::path genericPath(path); - path = genericPath.generic_string(); + path = Utils::FileSystem::getGenericPath(path); //expand home symbol if the startpath contains ~ if(path[0] == '~') @@ -349,9 +333,9 @@ void SystemData::deleteSystems() std::string SystemData::getConfigPath(bool forWrite) { - boost::filesystem::path path = Utils::FileSystem::getHomePath() + "/.emulationstation/es_systems.cfg"; - if(forWrite || Utils::FileSystem::exists(path.generic_string())) - return path.generic_string(); + std::string path = Utils::FileSystem::getHomePath() + "/.emulationstation/es_systems.cfg"; + if(forWrite || Utils::FileSystem::exists(path)) + return path; return "/etc/emulationstation/es_systems.cfg"; } @@ -386,17 +370,17 @@ SystemData* SystemData::getPrev() const std::string SystemData::getGamelistPath(bool forWrite) const { - boost::filesystem::path filePath; + std::string filePath; - filePath = mRootFolder->getPath() / "gamelist.xml"; - if(Utils::FileSystem::exists(filePath.generic_string())) - return filePath.generic_string(); + filePath = mRootFolder->getPath() + "/gamelist.xml"; + if(Utils::FileSystem::exists(filePath)) + return filePath; filePath = Utils::FileSystem::getHomePath() + "/.emulationstation/gamelists/" + mName + "/gamelist.xml"; if(forWrite) // make sure the directory exists if we're going to write to it, or crashes will happen - Utils::FileSystem::createDirectory(filePath.parent_path().generic_string()); - if(forWrite || Utils::FileSystem::exists(filePath.generic_string())) - return filePath.generic_string(); + Utils::FileSystem::createDirectory(Utils::FileSystem::getParent(filePath)); + if(forWrite || Utils::FileSystem::exists(filePath)) + return filePath; return "/etc/emulationstation/gamelists/" + mName + "/gamelist.xml"; } @@ -409,20 +393,20 @@ std::string SystemData::getThemePath() const // 3. default system theme from currently selected theme set [CURRENT_THEME_PATH]/theme.xml // first, check game folder - boost::filesystem::path localThemePath = mRootFolder->getPath() / "theme.xml"; - if(Utils::FileSystem::exists(localThemePath.generic_string())) - return localThemePath.generic_string(); + std::string localThemePath = mRootFolder->getPath() + "/theme.xml"; + if(Utils::FileSystem::exists(localThemePath)) + return localThemePath; // not in game folder, try system theme in theme sets localThemePath = ThemeData::getThemeFromCurrentSet(mThemeFolder); - if (Utils::FileSystem::exists(localThemePath.generic_string())) - return localThemePath.generic_string(); + if (Utils::FileSystem::exists(localThemePath)) + return localThemePath; // not system theme, try default system theme in theme set - localThemePath = localThemePath.parent_path().parent_path() / "theme.xml"; + localThemePath = Utils::FileSystem::getParent(Utils::FileSystem::getParent(localThemePath)) + "/theme.xml"; - return localThemePath.generic_string(); + return localThemePath; } bool SystemData::hasGamelist() const diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index e5ee924542..3fde901090 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -16,6 +16,7 @@ #include "SystemData.h" #include #include +#include #define FADE_TIME 300 diff --git a/es-app/src/guis/GuiGameScraper.cpp b/es-app/src/guis/GuiGameScraper.cpp index b2674a78be..d8ebcb7160 100644 --- a/es-app/src/guis/GuiGameScraper.cpp +++ b/es-app/src/guis/GuiGameScraper.cpp @@ -19,7 +19,7 @@ GuiGameScraper::GuiGameScraper(Window* window, ScraperSearchParams params, std:: // row 0 is a spacer - mGameName = std::make_shared(mWindow, Utils::String::toUpper(mSearchParams.game->getPath().filename().generic_string()), + mGameName = std::make_shared(mWindow, Utils::String::toUpper(Utils::FileSystem::getFileName(mSearchParams.game->getPath())), Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_CENTER); mGrid.setEntry(mGameName, Vector2i(0, 1), false, true); diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 52950bcf6d..5018816563 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -194,7 +194,7 @@ void GuiGamelistOptions::openMetaDataEd() }; } - mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, file->getPath().filename().string(), + mWindow->pushGui(new GuiMetaDataEd(mWindow, &file->metadata, file->metadata.getMDD(), p, Utils::FileSystem::getFileName(file->getPath()), std::bind(&IGameListView::onFileChanged, ViewController::get()->getGameListView(file->getSystem()).get(), file, FILE_METADATA_CHANGED), deleteBtnFunc)); } diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index d7021f0904..fcf780774c 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -36,7 +36,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mHeaderGrid = std::make_shared(mWindow, Vector2i(1, 5)); mTitle = std::make_shared(mWindow, "EDIT METADATA", Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); - mSubtitle = std::make_shared(mWindow, Utils::String::toUpper(scraperParams.game->getPath().filename().generic_string()), + mSubtitle = std::make_shared(mWindow, Utils::String::toUpper(Utils::FileSystem::getFileName(scraperParams.game->getPath())), Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_CENTER); mHeaderGrid->setEntry(mTitle, Vector2i(0, 1), false, true); mHeaderGrid->setEntry(mSubtitle, Vector2i(0, 3), false, true); diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index 3dc546d832..28b87db40f 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -103,7 +103,7 @@ void GuiScraperMulti::doNextSearch() // update subtitle ss.str(""); // clear - ss << "GAME " << (mCurrentGame + 1) << " OF " << mTotalGames << " - " << Utils::String::toUpper(mSearchQueue.front().game->getPath().filename().string()); + ss << "GAME " << (mCurrentGame + 1) << " OF " << mTotalGames << " - " << Utils::String::toUpper(Utils::FileSystem::getFileName(mSearchQueue.front().game->getPath())); mSubtitle->setText(ss.str()); mSearchComp->search(mSearchQueue.front()); diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 5c119dde83..f1a69c5eb8 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #ifdef WIN32 #include #endif @@ -220,7 +221,6 @@ int main(int argc, char* argv[]) srand((unsigned int)time(NULL)); std::locale::global(std::locale("C")); - boost::filesystem::path::imbue(std::locale()); if(!parseArgs(argc, argv)) return 0; diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index b7f16552c6..17eb8bc8bf 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -1,10 +1,8 @@ #include "scrapers/Scraper.h" -#include "utils/FileSystemUtil.h" #include "FileData.h" #include "GamesDBScraper.h" #include "Log.h" -#include "platform.h" #include "Settings.h" #include "SystemData.h" #include @@ -274,7 +272,7 @@ bool resizeImage(const std::string& path, int maxWidth, int maxHeight) std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& suffix, const std::string& url) { const std::string subdirectory = params.system->getName(); - const std::string name = params.game->getPath().stem().generic_string() + "-" + suffix; + const std::string name = Utils::FileSystem::getStem(params.game->getPath()) + "-" + suffix; std::string path = Utils::FileSystem::getHomePath() + "/.emulationstation/downloaded_images/"; diff --git a/es-app/src/scrapers/Scraper.h b/es-app/src/scrapers/Scraper.h index c22344637f..013ad5e546 100644 --- a/es-app/src/scrapers/Scraper.h +++ b/es-app/src/scrapers/Scraper.h @@ -5,7 +5,11 @@ #include "AsyncHandle.h" #include "HttpReq.h" #include "MetaData.h" +#include +#include #include +#include +#include #define MAX_SCRAPER_RESULTS 7 diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 4f61d3fa8b..4e479f317f 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -105,7 +105,7 @@ void BasicGameListView::launch(FileData* game) void BasicGameListView::remove(FileData *game, bool deleteFile) { if (deleteFile) - Utils::FileSystem::removeFile(game->getPath().generic_string()); // actually delete the file on the filesystem + Utils::FileSystem::removeFile(game->getPath()); // actually delete the file on the filesystem FileData* parent = game->getParent(); if (getCursor() == game) // Select next element in list, or prev if none { diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 5d9379fe80..9b7d22aa22 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -6,6 +6,7 @@ #include "Renderer.h" #include "ThemeData.h" #include "Window.h" +#include GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), mPosition(Vector3f::Zero()), mOrigin(Vector2f::Zero()), mRotationOrigin(0.5, 0.5), diff --git a/es-core/src/HttpReq.h b/es-core/src/HttpReq.h index d5c55b420a..238efc5442 100644 --- a/es-core/src/HttpReq.h +++ b/es-core/src/HttpReq.h @@ -35,7 +35,7 @@ class HttpReq REQ_IN_PROGRESS, //request is in progress REQ_SUCCESS, //request completed successfully, get it with getContent() - REQ_IO_ERROR, //some boost::asio error happened, get it with getErrorMsg() + REQ_IO_ERROR, //some error happened, get it with getErrorMsg() REQ_BAD_STATUS_CODE, //some invalid HTTP response status code happened (non-200) REQ_INVALID_RESPONSE //the HTTP response was invalid }; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 613af3d226..63dc72b238 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -7,6 +7,7 @@ #include "platform.h" #include "Settings.h" #include +#include std::vector ThemeData::sSupportedViews { { "system" }, { "basic" }, { "detailed" }, { "video" } }; std::vector ThemeData::sSupportedFeatures { { "video" }, { "carousel" }, { "z-index" } }; @@ -148,29 +149,6 @@ unsigned int getHexColor(const char* str) return val; } -// helper -std::string resolvePath(const char* in, const boost::filesystem::path& relative) -{ - if(!in || in[0] == '\0') - return in; - - boost::filesystem::path relPath = relative.parent_path(); - - boost::filesystem::path path(in); - - // we use boost filesystem here instead of just string checks because - // some directories could theoretically start with ~ or . - if(*path.begin() == "~") - { - path = Utils::FileSystem::getHomePath() + (in + 1); - }else if(*path.begin() == ".") - { - path = relPath / (in + 1); - } - - return path.generic_string(); -} - std::map mVariables; std::string resolvePlaceholders(const char* in) @@ -245,7 +223,7 @@ void ThemeData::parseIncludes(const pugi::xml_node& root) for(pugi::xml_node node = root.child("include"); node; node = node.next_sibling("include")) { const char* relPath = node.text().get(); - std::string path = resolvePath(relPath, mPaths.back()); + std::string path = Utils::FileSystem::resolveRelativePath(relPath, mPaths.back(), true); if(!ResourceManager::getInstance()->fileExists(path)) throw error << "Included file \"" << relPath << "\" not found! (resolved to \"" << path << "\")"; @@ -412,7 +390,7 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::mapfileExists(path)) { std::stringstream ss; @@ -535,17 +513,18 @@ std::map ThemeData::getThemeSets() std::map sets; static const size_t pathCount = 2; - boost::filesystem::path paths[pathCount] = { + std::string paths[pathCount] = + { "/etc/emulationstation/themes", Utils::FileSystem::getHomePath() + "/.emulationstation/themes" }; for(size_t i = 0; i < pathCount; i++) { - if(!Utils::FileSystem::isDirectory(paths[i].generic_string())) + if(!Utils::FileSystem::isDirectory(paths[i])) continue; - Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(paths[i].generic_string()); + Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(paths[i]); for(Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { @@ -560,9 +539,9 @@ std::map ThemeData::getThemeSets() return sets; } -boost::filesystem::path ThemeData::getThemeFromCurrentSet(const std::string& system) +std::string ThemeData::getThemeFromCurrentSet(const std::string& system) { - auto themeSets = ThemeData::getThemeSets(); + std::map themeSets = ThemeData::getThemeSets(); if(themeSets.empty()) { // no theme sets available diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 34e6a5c9d1..4fc9faa747 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -3,10 +3,12 @@ #define ES_CORE_THEME_DATA_H #include "math/Vector2f.h" -#include +#include "utils/FileSystemUtil.h" #include #include +#include #include +#include namespace pugi { class xml_node; } @@ -53,11 +55,11 @@ class ThemeException : public std::exception template friend ThemeException& operator<<(ThemeException& e, T msg); - inline void setFiles(const std::deque& deque) + inline void setFiles(const std::deque& deque) { - *this << "from theme \"" << deque.front().string() << "\"\n"; + *this << "from theme \"" << deque.front() << "\"\n"; for(auto it = deque.cbegin() + 1; it != deque.cend(); it++) - *this << " (from included file \"" << (*it).string() << "\")\n"; + *this << " (from included file \"" << (*it) << "\")\n"; *this << " "; } }; @@ -73,10 +75,10 @@ ThemeException& operator<<(ThemeException& e, T appendMsg) struct ThemeSet { - boost::filesystem::path path; + std::string path; - inline std::string getName() const { return path.stem().string(); } - inline boost::filesystem::path getThemePath(const std::string& system) const { return path/system/"theme.xml"; } + inline std::string getName() const { return Utils::FileSystem::getStem(path); } + inline std::string getThemePath(const std::string& system) const { return path + "/" + system + "/theme.xml"; } }; class ThemeData @@ -155,14 +157,14 @@ class ThemeData static const std::shared_ptr& getDefault(); static std::map getThemeSets(); - static boost::filesystem::path getThemeFromCurrentSet(const std::string& system); + static std::string getThemeFromCurrentSet(const std::string& system); private: static std::map< std::string, std::map > sElementMap; static std::vector sSupportedFeatures; static std::vector sSupportedViews; - std::deque mPaths; + std::deque mPaths; float mVersion; void parseFeatures(const pugi::xml_node& themeRoot); diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 47a8cd6222..b43d567e68 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -7,6 +7,7 @@ #include "InputManager.h" #include "Log.h" #include "Renderer.h" +#include #include Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 315319c659..6cd5f082a1 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -101,8 +101,7 @@ void VideoComponent::onSizeChanged() bool VideoComponent::setVideo(std::string path) { // Convert the path into a generic format - boost::filesystem::path fullPath = Utils::FileSystem::getCanonicalPath(path); - fullPath.make_preferred().native(); + std::string fullPath = Utils::FileSystem::getCanonicalPath(path); // Check that it's changed if (fullPath == mVideoPath) @@ -112,7 +111,7 @@ bool VideoComponent::setVideo(std::string path) mVideoPath = fullPath; // If the file exists then set the new video - if (!fullPath.empty() && ResourceManager::getInstance()->fileExists(fullPath.generic_string())) + if (!fullPath.empty() && ResourceManager::getInstance()->fileExists(fullPath)) { // Return true to show that we are going to attempt to play a video return true; diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index 97f2dfc350..8d8207b1c7 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -4,7 +4,6 @@ #include "components/ImageComponent.h" #include "GuiComponent.h" -#include #include class TextureResource; @@ -91,14 +90,14 @@ class VideoComponent : public GuiComponent protected: unsigned mVideoWidth; unsigned mVideoHeight; - Vector2f mTargetSize; + Vector2f mTargetSize; std::shared_ptr mTexture; float mFadeIn; std::string mStaticImagePath; ImageComponent mStaticImage; - boost::filesystem::path mVideoPath; - boost::filesystem::path mPlayingVideoPath; + std::string mVideoPath; + std::string mPlayingVideoPath; bool mStartDelayed; unsigned mStartTime; bool mIsPlaying; diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 8f0ef8df21..12cbba08f6 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -6,6 +6,7 @@ #include "Renderer.h" #include "Settings.h" #include +#include #include class VolumeControl diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 94fc0e81bf..91f7532e40 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -1,6 +1,7 @@ #include "components/VideoVlcComponent.h" #include "resources/TextureResource.h" +#include "utils/StringUtil.h" #include "PowerSaver.h" #include "Renderer.h" #include "Settings.h" @@ -282,10 +283,9 @@ void VideoVlcComponent::startVideo() mVideoHeight = 0; #ifdef WIN32 - std::wstring_convert, wchar_t> wton; - std::string path = wton.to_bytes(mVideoPath.c_str()); + std::string path(Utils::String::replace(mVideoPath, "/", "\\")); #else - std::string path(mVideoPath.c_str()); + std::string path(mVideoPath); #endif // Make sure we have a video path if (mVLC && (path.size() > 0)) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 0d6ac65e54..5618695c67 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -22,6 +22,21 @@ namespace Utils { namespace FileSystem { + +#if defined(_WIN32) + static std::string convertFromWideString(const std::wstring wstring) + { + int numBytes = WideCharToMultiByte(CP_UTF8, 0, wstring.c_str(), (int)wstring.length(), nullptr, 0, nullptr, nullptr); + std::string string; + + string.resize(numBytes); + WideCharToMultiByte(CP_UTF8, 0, wstring.c_str(), (int)wstring.length(), (char*)string.c_str(), numBytes, nullptr, nullptr); + + return std::string(string); + + } // convertFromWideString +#endif // _WIN32 + stringList getDirContent(const std::string& _path, const bool _recursive) { std::string path = getGenericPath(_path); @@ -32,15 +47,16 @@ namespace Utils { #if defined(_WIN32) - WIN32_FIND_DATA findData; - HANDLE hFind = FindFirstFile((path + "/*").c_str(), &findData); + WIN32_FIND_DATAW findData; + std::string wildcard = path + "/*"; + HANDLE hFind = FindFirstFileW(std::wstring(wildcard.begin(), wildcard.end()).c_str(), &findData); if(hFind != INVALID_HANDLE_VALUE) { // loop over all files in the directory do { - std::string name(findData.cFileName); + std::string name = convertFromWideString(findData.cFileName); // ignore "." and ".." if((name != ".") && (name != "..")) @@ -52,7 +68,7 @@ namespace Utils contentList.merge(getDirContent(fullName, true)); } } - while(FindNextFile(hFind, &findData)); + while(FindNextFileW(hFind, &findData)); FindClose(hFind); } @@ -93,6 +109,31 @@ namespace Utils } // getDirContent + stringList getPathList(const std::string& _path) + { + stringList pathList; + std::string path = getGenericPath(_path); + size_t start = 0; + size_t end = 0; + + // split at '/' + while((end = path.find("/", start)) != std::string::npos) + { + if(end != start) + pathList.push_back(std::string(path, start, end - start)); + + start = end + 1; + } + + // add last folder / file to pathList + if(start != path.size()) + pathList.push_back(std::string(path, start, path.size() - start)); + + // return the path list + return pathList; + + } // getPathList + std::string getHomePath() { static std::string path; @@ -202,20 +243,7 @@ namespace Utils bool scan = true; while(scan) { - stringList pathList; - size_t start = 0; - size_t end = 0; - - // split at '/' - while((end = path.find("/", start)) != std::string::npos) - { - pathList.push_back(std::string(path, start, end - start)); - start = end + 1; - } - - // add last folder / file to pathList - if(start != path.size()) - pathList.push_back(std::string(path, start, path.size() - start)); + stringList pathList = getPathList(path); path.clear(); scan = false; @@ -356,12 +384,12 @@ namespace Utils return path; // replace '.' with relativeTo - if(path[0] == '.') - return (relativeTo + "/" + &(path[1])); + if((path[0] == '.') && (path[1] == '/')) + return (relativeTo + &(path[1])); // replace '~' with homePath - if(_allowHome && (path[0] == '~')) - return (getHomePath() + "/" + &(path[1])); + if(_allowHome && (path[0] == '~') && (path[1] == '/')) + return (getHomePath() + &(path[1])); // nothing to resolve return path; @@ -376,7 +404,7 @@ namespace Utils if(contains) { // success - return ("." + path); + return ("./" + path); } if(_allowHome) @@ -386,7 +414,7 @@ namespace Utils if(contains) { // success - return ("~" + path); + return ("~/" + path); } } diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index da623f55cf..42373d6942 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -12,6 +12,7 @@ namespace Utils typedef std::list stringList; stringList getDirContent (const std::string& _path, const bool _recursive = false); + stringList getPathList (const std::string& _path); std::string getHomePath (); std::string getCWDPath (); std::string getGenericPath (const std::string& _path); From d223831d534af1924fb75e0951712091fe72782e Mon Sep 17 00:00:00 2001 From: John Rassa Date: Tue, 30 Jan 2018 20:16:30 -0800 Subject: [PATCH 243/603] fix platform name for game and watch --- es-app/src/scrapers/GamesDBScraper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 4ccc591af6..2bcbb86a94 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -46,7 +46,7 @@ const std::map gamesdb_platformid_map { { NINTENDO_WII, "Nintendo Wii" }, { NINTENDO_WII_U, "Nintendo Wii U" }, { NINTENDO_VIRTUAL_BOY, "Nintendo Virtual Boy" }, - { NINTENDO_GAME_AND_WATCH, "Game & Watch" }, + { NINTENDO_GAME_AND_WATCH, "Game & Watch" }, { PC, "PC" }, { SEGA_32X, "Sega 32X" }, { SEGA_CD, "Sega CD" }, From 1228e0c7bf0ebaeb9145e23dfef1fc4d203a8f78 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Wed, 31 Jan 2018 21:34:55 +0100 Subject: [PATCH 244/603] Fix thumbnail and image to be separated as I think it was originally meant to be. --- es-app/src/CollectionSystemManager.cpp | 5 ++++- es-app/src/views/gamelist/VideoGameListView.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index bba7930df8..35a8a3ba96 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -565,6 +565,7 @@ void CollectionSystemManager::updateCollectionFolderMetadata(SystemData* sys) std::string genre = "None"; std::string video = ""; std::string thumbnail = ""; + std::string image = ""; std::unordered_map games = rootFolder->getChildrenByFilename(); @@ -608,6 +609,7 @@ void CollectionSystemManager::updateCollectionFolderMetadata(SystemData* sys) video = randomGame->getVideoPath(); thumbnail = randomGame->getThumbnailPath(); + image = randomGame->getImagePath(); } @@ -618,7 +620,8 @@ void CollectionSystemManager::updateCollectionFolderMetadata(SystemData* sys) rootFolder->metadata.set("releasedate", releasedate); rootFolder->metadata.set("developer", developer); rootFolder->metadata.set("video", video); - rootFolder->metadata.set("image", thumbnail); + rootFolder->metadata.set("thumbnail", thumbnail); + rootFolder->metadata.set("image", image); } void CollectionSystemManager::initCustomCollectionSystems() diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 6de7caf8f3..da7e2e2594 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -245,7 +245,7 @@ void VideoGameListView::updateInfoPanel() mVideo->setImage(file->getThumbnailPath()); mMarquee.setImage(file->getMarqueePath()); - mImage.setImage(file->getThumbnailPath()); + mImage.setImage(file->getImagePath()); mDescription.setText(file->metadata.get("desc")); mDescContainer.reset(); From e52e63cf9cbbda6899a8bfd7b8146db9a4ac899f Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 1 Feb 2018 22:14:54 +0100 Subject: [PATCH 245/603] Fix mStaticImage to use setResize --- es-core/src/components/VideoPlayerComponent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 12cbba08f6..eeaba91775 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -41,7 +41,7 @@ void VideoPlayerComponent::setResize(float width, float height) setSize(width, height); mTargetSize = Vector2f(width, height); mTargetIsMax = false; - mStaticImage.setSize(width, height); + mStaticImage.setResize(width, height); onSizeChanged(); } From 6054cb673d150d3cf22c63c4f31c584d069dc2fe Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 2 Feb 2018 16:45:21 +0100 Subject: [PATCH 246/603] Fix start and offset not being reset for each invalidChar tested in Utils::FileSystem::GetEscapedPath --- es-core/src/utils/FileSystemUtil.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 5618695c67..ea678b9131 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -206,11 +206,12 @@ namespace Utils // insert a backslash before most characters that would mess up a bash path const char* invalidChars = "\\ '\"!$^&*(){}[]?;<>"; const char* invalidChar = invalidChars; - size_t start = 0; - size_t offset = 0; while(*invalidChar) { + size_t start = 0; + size_t offset = 0; + while((offset = path.find(*invalidChar, start)) != std::string::npos) { start = offset + 1; From 5e40fb42376499877063a9ddebd06047b8fa49c4 Mon Sep 17 00:00:00 2001 From: yodatak Date: Sun, 4 Feb 2018 06:13:22 +0100 Subject: [PATCH 247/603] Update instructions for Fedora compilation Adding some command to compile EmulationStation on Fedora 27 --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 76908388ec..c20441ab82 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,11 @@ sudo apt-get install libsdl2-dev libfreeimage-dev libfreetype6-dev libcurl4-open libasound2-dev libgl1-mesa-dev build-essential cmake fonts-droid \ libvlc-dev libvlccore-dev vlc-nox ``` +**On Fedora:** +All of this be easily installed with dnf ( With rpmfusion activated) : +```bash +sudo dnf install cmake SDL2-devel boost-devel freeimage-devel freetype-devel eigen3-devel curl-devel mesa-libGL-devel vlc-devel libcec-devel alsa-lib-devel +``` Note this Repository uses a git submodule - to checkout the source and all submodules, use From 1a4d13b6b39256b1b01f13ead2e653f0bfd7d3ea Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 8 Feb 2018 19:27:44 +0100 Subject: [PATCH 248/603] Remove builtin resources --- data/ResourceUtil.cpp | 104 - data/Resources.h | 156 - data/converted/arrow_svg.cpp | 92 - data/converted/busy_0_svg.cpp | 143 - data/converted/busy_1_svg.cpp | 143 - data/converted/busy_2_svg.cpp | 143 - data/converted/busy_3_svg.cpp | 143 - data/converted/button_filled_png.cpp | 125 - data/converted/button_png.cpp | 132 - data/converted/checkbox_checked_svg.cpp | 140 - data/converted/checkbox_unchecked_svg.cpp | 93 - data/converted/fav_add_svg.cpp | 72 - data/converted/fav_remove_svg.cpp | 65 - data/converted/frame_png.cpp | 181 - data/converted/help__analog_down_svg.cpp | 289 - data/converted/help__analog_left_svg.cpp | 292 - data/converted/help__analog_right_svg.cpp | 290 - data/converted/help__analog_thumb_svg.cpp | 298 - data/converted/help__analog_up_svg.cpp | 294 - data/converted/help__button_a_svg.cpp | 105 - data/converted/help__button_b_svg.cpp | 157 - data/converted/help__button_hotkey_svg.cpp | 199 - data/converted/help__button_l_svg.cpp | 110 - data/converted/help__button_r_svg.cpp | 140 - data/converted/help__button_select_svg.cpp | 195 - data/converted/help__button_start_svg.cpp | 185 - data/converted/help__button_x_svg.cpp | 103 - data/converted/help__button_y_svg.cpp | 100 - data/converted/help__dpad_all_svg.cpp | 355 - data/converted/help__dpad_down_svg.cpp | 325 - data/converted/help__dpad_left_svg.cpp | 325 - data/converted/help__dpad_leftright_svg.cpp | 333 - data/converted/help__dpad_right_svg.cpp | 325 - data/converted/help__dpad_up_svg.cpp | 325 - data/converted/help__dpad_updown_svg.cpp | 333 - data/converted/off_svg.cpp | 141 - data/converted/on_svg.cpp | 122 - .../opensans_hebrew_condensed_light_ttf.cpp | 3295 ------- .../opensans_hebrew_condensed_regular_ttf.cpp | 3245 ------- data/converted/option_arrow_svg.cpp | 92 - data/converted/scroll_gradient_png.cpp | 8347 ----------------- data/converted/slider_knob_svg.cpp | 70 - data/converted/splash_svg.cpp | 1911 ---- data/converted/star_filled_svg.cpp | 124 - data/converted/star_unfilled_svg.cpp | 196 - .../textinput_ninepatch_active_png.cpp | 317 - data/converted/textinput_ninepatch_png.cpp | 136 - data/converted/window_icon_256_png.cpp | 495 - data/generate.sh | 3 - es-app/src/EmulationStation.rc | 2 +- {data => es-app/src}/es_icon.ico | Bin es-app/src/main.cpp | 2 + es-core/CMakeLists.txt | 58 - es-core/src/Renderer_init_sdlgl.cpp | 5 +- es-core/src/Settings.cpp | 5 +- es-core/src/resources/ResourceManager.cpp | 57 +- es-core/src/resources/ResourceManager.h | 1 + es-core/src/utils/FileSystemUtil.cpp | 21 + es-core/src/utils/FileSystemUtil.h | 1 + {data/resources => resources}/arrow.svg | 0 {data/resources => resources}/busy_0.svg | 0 {data/resources => resources}/busy_1.svg | 0 {data/resources => resources}/busy_2.svg | 0 {data/resources => resources}/busy_3.svg | 0 {data/resources => resources}/button.png | Bin .../resources => resources}/button_filled.png | Bin .../checkbox_checked.svg | 0 .../checkbox_unchecked.svg | 0 {data/resources => resources}/fav_add.svg | 0 {data/resources => resources}/fav_remove.svg | 0 {data/resources => resources}/frame.png | Bin .../help/analog_down.svg | 0 .../help/analog_left.svg | 0 .../help/analog_right.svg | 0 .../help/analog_thumb.svg | 0 .../help/analog_up.svg | 0 .../resources => resources}/help/button_a.svg | 0 .../resources => resources}/help/button_b.svg | 0 .../help/button_hotkey.svg | 44 +- .../resources => resources}/help/button_l.svg | 0 .../resources => resources}/help/button_r.svg | 0 .../help/button_select.svg | 0 .../help/button_start.svg | 0 .../resources => resources}/help/button_x.svg | 0 .../resources => resources}/help/button_y.svg | 0 .../resources => resources}/help/dpad_all.svg | 0 .../help/dpad_down.svg | 0 .../help/dpad_left.svg | 0 .../help/dpad_leftright.svg | 0 .../help/dpad_right.svg | 0 .../resources => resources}/help/dpad_up.svg | 0 .../help/dpad_updown.svg | 0 {data/resources => resources}/off.svg | 0 {data/resources => resources}/on.svg | 0 .../opensans_hebrew_condensed_light.ttf | Bin .../opensans_hebrew_condensed_regular.ttf | Bin .../resources => resources}/option_arrow.svg | 0 .../scroll_gradient.png | Bin {data/resources => resources}/slider_knob.svg | 0 {data/resources => resources}/splash.svg | 0 {data/resources => resources}/star_filled.svg | 0 .../resources => resources}/star_unfilled.svg | 0 .../textinput_ninepatch.png | Bin .../textinput_ninepatch_active.png | Bin .../window_icon_256.png | Bin 105 files changed, 91 insertions(+), 25409 deletions(-) delete mode 100644 data/ResourceUtil.cpp delete mode 100644 data/Resources.h delete mode 100644 data/converted/arrow_svg.cpp delete mode 100644 data/converted/busy_0_svg.cpp delete mode 100644 data/converted/busy_1_svg.cpp delete mode 100644 data/converted/busy_2_svg.cpp delete mode 100644 data/converted/busy_3_svg.cpp delete mode 100644 data/converted/button_filled_png.cpp delete mode 100644 data/converted/button_png.cpp delete mode 100644 data/converted/checkbox_checked_svg.cpp delete mode 100644 data/converted/checkbox_unchecked_svg.cpp delete mode 100644 data/converted/fav_add_svg.cpp delete mode 100644 data/converted/fav_remove_svg.cpp delete mode 100644 data/converted/frame_png.cpp delete mode 100644 data/converted/help__analog_down_svg.cpp delete mode 100644 data/converted/help__analog_left_svg.cpp delete mode 100644 data/converted/help__analog_right_svg.cpp delete mode 100644 data/converted/help__analog_thumb_svg.cpp delete mode 100644 data/converted/help__analog_up_svg.cpp delete mode 100644 data/converted/help__button_a_svg.cpp delete mode 100644 data/converted/help__button_b_svg.cpp delete mode 100644 data/converted/help__button_hotkey_svg.cpp delete mode 100644 data/converted/help__button_l_svg.cpp delete mode 100644 data/converted/help__button_r_svg.cpp delete mode 100644 data/converted/help__button_select_svg.cpp delete mode 100644 data/converted/help__button_start_svg.cpp delete mode 100644 data/converted/help__button_x_svg.cpp delete mode 100644 data/converted/help__button_y_svg.cpp delete mode 100644 data/converted/help__dpad_all_svg.cpp delete mode 100644 data/converted/help__dpad_down_svg.cpp delete mode 100644 data/converted/help__dpad_left_svg.cpp delete mode 100644 data/converted/help__dpad_leftright_svg.cpp delete mode 100644 data/converted/help__dpad_right_svg.cpp delete mode 100644 data/converted/help__dpad_up_svg.cpp delete mode 100644 data/converted/help__dpad_updown_svg.cpp delete mode 100644 data/converted/off_svg.cpp delete mode 100644 data/converted/on_svg.cpp delete mode 100644 data/converted/opensans_hebrew_condensed_light_ttf.cpp delete mode 100644 data/converted/opensans_hebrew_condensed_regular_ttf.cpp delete mode 100644 data/converted/option_arrow_svg.cpp delete mode 100644 data/converted/scroll_gradient_png.cpp delete mode 100644 data/converted/slider_knob_svg.cpp delete mode 100644 data/converted/splash_svg.cpp delete mode 100644 data/converted/star_filled_svg.cpp delete mode 100644 data/converted/star_unfilled_svg.cpp delete mode 100644 data/converted/textinput_ninepatch_active_png.cpp delete mode 100644 data/converted/textinput_ninepatch_png.cpp delete mode 100644 data/converted/window_icon_256_png.cpp delete mode 100644 data/generate.sh rename {data => es-app/src}/es_icon.ico (100%) rename {data/resources => resources}/arrow.svg (100%) rename {data/resources => resources}/busy_0.svg (100%) rename {data/resources => resources}/busy_1.svg (100%) rename {data/resources => resources}/busy_2.svg (100%) rename {data/resources => resources}/busy_3.svg (100%) rename {data/resources => resources}/button.png (100%) rename {data/resources => resources}/button_filled.png (100%) rename {data/resources => resources}/checkbox_checked.svg (100%) rename {data/resources => resources}/checkbox_unchecked.svg (100%) rename {data/resources => resources}/fav_add.svg (100%) rename {data/resources => resources}/fav_remove.svg (100%) rename {data/resources => resources}/frame.png (100%) rename {data/resources => resources}/help/analog_down.svg (100%) rename {data/resources => resources}/help/analog_left.svg (100%) rename {data/resources => resources}/help/analog_right.svg (100%) rename {data/resources => resources}/help/analog_thumb.svg (100%) rename {data/resources => resources}/help/analog_up.svg (100%) rename {data/resources => resources}/help/button_a.svg (100%) rename {data/resources => resources}/help/button_b.svg (100%) rename {data/resources => resources}/help/button_hotkey.svg (98%) rename {data/resources => resources}/help/button_l.svg (100%) rename {data/resources => resources}/help/button_r.svg (100%) rename {data/resources => resources}/help/button_select.svg (100%) rename {data/resources => resources}/help/button_start.svg (100%) rename {data/resources => resources}/help/button_x.svg (100%) rename {data/resources => resources}/help/button_y.svg (100%) rename {data/resources => resources}/help/dpad_all.svg (100%) rename {data/resources => resources}/help/dpad_down.svg (100%) rename {data/resources => resources}/help/dpad_left.svg (100%) rename {data/resources => resources}/help/dpad_leftright.svg (100%) rename {data/resources => resources}/help/dpad_right.svg (100%) rename {data/resources => resources}/help/dpad_up.svg (100%) rename {data/resources => resources}/help/dpad_updown.svg (100%) rename {data/resources => resources}/off.svg (100%) rename {data/resources => resources}/on.svg (100%) rename {data/resources => resources}/opensans_hebrew_condensed_light.ttf (100%) rename {data/resources => resources}/opensans_hebrew_condensed_regular.ttf (100%) rename {data/resources => resources}/option_arrow.svg (100%) rename {data/resources => resources}/scroll_gradient.png (100%) rename {data/resources => resources}/slider_knob.svg (100%) rename {data/resources => resources}/splash.svg (100%) rename {data/resources => resources}/star_filled.svg (100%) rename {data/resources => resources}/star_unfilled.svg (100%) rename {data/resources => resources}/textinput_ninepatch.png (100%) rename {data/resources => resources}/textinput_ninepatch_active.png (100%) rename {data/resources => resources}/window_icon_256.png (100%) diff --git a/data/ResourceUtil.cpp b/data/ResourceUtil.cpp deleted file mode 100644 index 025f219a5e..0000000000 --- a/data/ResourceUtil.cpp +++ /dev/null @@ -1,104 +0,0 @@ -// this file was auto-generated by res2h - -#include "Resources.h" - -const uint32_t res2hNrOfFiles = 46; -const Res2hEntry res2hFiles[res2hNrOfFiles] = { - {":/splash.svg", splash_svg_size, splash_svg_data}, - {":/opensans_hebrew_condensed_light.ttf", opensans_hebrew_condensed_light_ttf_size, opensans_hebrew_condensed_light_ttf_data}, - {":/frame.png", frame_png_size, frame_png_data}, - {":/textinput_ninepatch_active.png", textinput_ninepatch_active_png_size, textinput_ninepatch_active_png_data}, - {":/window_icon_256.png", window_icon_256_png_size, window_icon_256_png_data}, - {":/slider_knob.svg", slider_knob_svg_size, slider_knob_svg_data}, - {":/fav_remove.svg", fav_remove_svg_size, fav_remove_svg_data}, - {":/off.svg", off_svg_size, off_svg_data}, - {":/fav_add.svg", fav_add_svg_size, fav_add_svg_data}, - {":/star_filled.svg", star_filled_svg_size, star_filled_svg_data}, - {":/busy_0.svg", busy_0_svg_size, busy_0_svg_data}, - {":/checkbox_unchecked.svg", checkbox_unchecked_svg_size, checkbox_unchecked_svg_data}, - {":/busy_3.svg", busy_3_svg_size, busy_3_svg_data}, - {":/textinput_ninepatch.png", textinput_ninepatch_png_size, textinput_ninepatch_png_data}, - {":/button_filled.png", button_filled_png_size, button_filled_png_data}, - {":/option_arrow.svg", option_arrow_svg_size, option_arrow_svg_data}, - {":/busy_1.svg", busy_1_svg_size, busy_1_svg_data}, - {":/checkbox_checked.svg", checkbox_checked_svg_size, checkbox_checked_svg_data}, - {":/opensans_hebrew_condensed_regular.ttf", opensans_hebrew_condensed_regular_ttf_size, opensans_hebrew_condensed_regular_ttf_data}, - {":/star_unfilled.svg", star_unfilled_svg_size, star_unfilled_svg_data}, - {":/busy_2.svg", busy_2_svg_size, busy_2_svg_data}, - {":/on.svg", on_svg_size, on_svg_data}, - {":/button.png", button_png_size, button_png_data}, - {":/arrow.svg", arrow_svg_size, arrow_svg_data}, - {":/scroll_gradient.png", scroll_gradient_png_size, scroll_gradient_png_data}, - {":/help/analog_thumb.svg", help__analog_thumb_svg_size, help__analog_thumb_svg_data}, - {":/help/button_x.svg", help__button_x_svg_size, help__button_x_svg_data}, - {":/help/dpad_leftright.svg", help__dpad_leftright_svg_size, help__dpad_leftright_svg_data}, - {":/help/dpad_right.svg", help__dpad_right_svg_size, help__dpad_right_svg_data}, - {":/help/dpad_down.svg", help__dpad_down_svg_size, help__dpad_down_svg_data}, - {":/help/button_y.svg", help__button_y_svg_size, help__button_y_svg_data}, - {":/help/analog_up.svg", help__analog_up_svg_size, help__analog_up_svg_data}, - {":/help/button_r.svg", help__button_r_svg_size, help__button_r_svg_data}, - {":/help/button_b.svg", help__button_b_svg_size, help__button_b_svg_data}, - {":/help/button_l.svg", help__button_l_svg_size, help__button_l_svg_data}, - {":/help/button_hotkey.svg", help__button_hotkey_svg_size, help__button_hotkey_svg_data}, - {":/help/button_start.svg", help__button_start_svg_size, help__button_start_svg_data}, - {":/help/dpad_all.svg", help__dpad_all_svg_size, help__dpad_all_svg_data}, - {":/help/button_select.svg", help__button_select_svg_size, help__button_select_svg_data}, - {":/help/dpad_up.svg", help__dpad_up_svg_size, help__dpad_up_svg_data}, - {":/help/button_a.svg", help__button_a_svg_size, help__button_a_svg_data}, - {":/help/dpad_left.svg", help__dpad_left_svg_size, help__dpad_left_svg_data}, - {":/help/analog_left.svg", help__analog_left_svg_size, help__analog_left_svg_data}, - {":/help/analog_right.svg", help__analog_right_svg_size, help__analog_right_svg_data}, - {":/help/analog_down.svg", help__analog_down_svg_size, help__analog_down_svg_data}, - {":/help/dpad_updown.svg", help__dpad_updown_svg_size, help__dpad_updown_svg_data} -}; - -res2hMapType::value_type mapTemp[] = { - std::make_pair(":/splash.svg", res2hFiles[0]), - std::make_pair(":/opensans_hebrew_condensed_light.ttf", res2hFiles[1]), - std::make_pair(":/frame.png", res2hFiles[2]), - std::make_pair(":/textinput_ninepatch_active.png", res2hFiles[3]), - std::make_pair(":/window_icon_256.png", res2hFiles[4]), - std::make_pair(":/slider_knob.svg", res2hFiles[5]), - std::make_pair(":/fav_remove.svg", res2hFiles[6]), - std::make_pair(":/off.svg", res2hFiles[7]), - std::make_pair(":/fav_add.svg", res2hFiles[8]), - std::make_pair(":/star_filled.svg", res2hFiles[9]), - std::make_pair(":/busy_0.svg", res2hFiles[10]), - std::make_pair(":/checkbox_unchecked.svg", res2hFiles[11]), - std::make_pair(":/busy_3.svg", res2hFiles[12]), - std::make_pair(":/textinput_ninepatch.png", res2hFiles[13]), - std::make_pair(":/button_filled.png", res2hFiles[14]), - std::make_pair(":/option_arrow.svg", res2hFiles[15]), - std::make_pair(":/busy_1.svg", res2hFiles[16]), - std::make_pair(":/checkbox_checked.svg", res2hFiles[17]), - std::make_pair(":/opensans_hebrew_condensed_regular.ttf", res2hFiles[18]), - std::make_pair(":/star_unfilled.svg", res2hFiles[19]), - std::make_pair(":/busy_2.svg", res2hFiles[20]), - std::make_pair(":/on.svg", res2hFiles[21]), - std::make_pair(":/button.png", res2hFiles[22]), - std::make_pair(":/arrow.svg", res2hFiles[23]), - std::make_pair(":/scroll_gradient.png", res2hFiles[24]), - std::make_pair(":/help/analog_thumb.svg", res2hFiles[25]), - std::make_pair(":/help/button_x.svg", res2hFiles[26]), - std::make_pair(":/help/dpad_leftright.svg", res2hFiles[27]), - std::make_pair(":/help/dpad_right.svg", res2hFiles[28]), - std::make_pair(":/help/dpad_down.svg", res2hFiles[29]), - std::make_pair(":/help/button_y.svg", res2hFiles[30]), - std::make_pair(":/help/analog_up.svg", res2hFiles[31]), - std::make_pair(":/help/button_r.svg", res2hFiles[32]), - std::make_pair(":/help/button_b.svg", res2hFiles[33]), - std::make_pair(":/help/button_l.svg", res2hFiles[34]), - std::make_pair(":/help/button_hotkey.svg", res2hFiles[35]), - std::make_pair(":/help/button_start.svg", res2hFiles[36]), - std::make_pair(":/help/dpad_all.svg", res2hFiles[37]), - std::make_pair(":/help/button_select.svg", res2hFiles[38]), - std::make_pair(":/help/dpad_up.svg", res2hFiles[39]), - std::make_pair(":/help/button_a.svg", res2hFiles[40]), - std::make_pair(":/help/dpad_left.svg", res2hFiles[41]), - std::make_pair(":/help/analog_left.svg", res2hFiles[42]), - std::make_pair(":/help/analog_right.svg", res2hFiles[43]), - std::make_pair(":/help/analog_down.svg", res2hFiles[44]), - std::make_pair(":/help/dpad_updown.svg", res2hFiles[45]) -}; - -res2hMapType res2hMap(mapTemp, mapTemp + sizeof mapTemp / sizeof mapTemp[0]); diff --git a/data/Resources.h b/data/Resources.h deleted file mode 100644 index 2b286238a3..0000000000 --- a/data/Resources.h +++ /dev/null @@ -1,156 +0,0 @@ -// this file was auto-generated by res2h - -#pragma once - -#include -#include - -extern const uint16_t splash_svg_size; -extern const uint8_t splash_svg_data[]; - -extern const uint16_t opensans_hebrew_condensed_light_ttf_size; -extern const uint8_t opensans_hebrew_condensed_light_ttf_data[]; - -extern const uint16_t frame_png_size; -extern const uint8_t frame_png_data[]; - -extern const uint16_t textinput_ninepatch_active_png_size; -extern const uint8_t textinput_ninepatch_active_png_data[]; - -extern const uint16_t window_icon_256_png_size; -extern const uint8_t window_icon_256_png_data[]; - -extern const uint16_t slider_knob_svg_size; -extern const uint8_t slider_knob_svg_data[]; - -extern const uint16_t fav_remove_svg_size; -extern const uint8_t fav_remove_svg_data[]; - -extern const uint16_t off_svg_size; -extern const uint8_t off_svg_data[]; - -extern const uint16_t fav_add_svg_size; -extern const uint8_t fav_add_svg_data[]; - -extern const uint16_t star_filled_svg_size; -extern const uint8_t star_filled_svg_data[]; - -extern const uint16_t busy_0_svg_size; -extern const uint8_t busy_0_svg_data[]; - -extern const uint16_t checkbox_unchecked_svg_size; -extern const uint8_t checkbox_unchecked_svg_data[]; - -extern const uint16_t busy_3_svg_size; -extern const uint8_t busy_3_svg_data[]; - -extern const uint16_t textinput_ninepatch_png_size; -extern const uint8_t textinput_ninepatch_png_data[]; - -extern const uint16_t button_filled_png_size; -extern const uint8_t button_filled_png_data[]; - -extern const uint16_t option_arrow_svg_size; -extern const uint8_t option_arrow_svg_data[]; - -extern const uint16_t busy_1_svg_size; -extern const uint8_t busy_1_svg_data[]; - -extern const uint16_t checkbox_checked_svg_size; -extern const uint8_t checkbox_checked_svg_data[]; - -extern const uint16_t opensans_hebrew_condensed_regular_ttf_size; -extern const uint8_t opensans_hebrew_condensed_regular_ttf_data[]; - -extern const uint16_t star_unfilled_svg_size; -extern const uint8_t star_unfilled_svg_data[]; - -extern const uint16_t busy_2_svg_size; -extern const uint8_t busy_2_svg_data[]; - -extern const uint16_t on_svg_size; -extern const uint8_t on_svg_data[]; - -extern const uint16_t button_png_size; -extern const uint8_t button_png_data[]; - -extern const uint16_t arrow_svg_size; -extern const uint8_t arrow_svg_data[]; - -extern const uint32_t scroll_gradient_png_size; -extern const uint8_t scroll_gradient_png_data[]; - -extern const uint16_t help__analog_thumb_svg_size; -extern const uint8_t help__analog_thumb_svg_data[]; - -extern const uint16_t help__button_x_svg_size; -extern const uint8_t help__button_x_svg_data[]; - -extern const uint16_t help__dpad_leftright_svg_size; -extern const uint8_t help__dpad_leftright_svg_data[]; - -extern const uint16_t help__dpad_right_svg_size; -extern const uint8_t help__dpad_right_svg_data[]; - -extern const uint16_t help__dpad_down_svg_size; -extern const uint8_t help__dpad_down_svg_data[]; - -extern const uint16_t help__button_y_svg_size; -extern const uint8_t help__button_y_svg_data[]; - -extern const uint16_t help__analog_up_svg_size; -extern const uint8_t help__analog_up_svg_data[]; - -extern const uint16_t help__button_r_svg_size; -extern const uint8_t help__button_r_svg_data[]; - -extern const uint16_t help__button_b_svg_size; -extern const uint8_t help__button_b_svg_data[]; - -extern const uint16_t help__button_l_svg_size; -extern const uint8_t help__button_l_svg_data[]; - -extern const uint16_t help__button_hotkey_svg_size; -extern const uint8_t help__button_hotkey_svg_data[]; - -extern const uint16_t help__button_start_svg_size; -extern const uint8_t help__button_start_svg_data[]; - -extern const uint16_t help__dpad_all_svg_size; -extern const uint8_t help__dpad_all_svg_data[]; - -extern const uint16_t help__button_select_svg_size; -extern const uint8_t help__button_select_svg_data[]; - -extern const uint16_t help__dpad_up_svg_size; -extern const uint8_t help__dpad_up_svg_data[]; - -extern const uint16_t help__button_a_svg_size; -extern const uint8_t help__button_a_svg_data[]; - -extern const uint16_t help__dpad_left_svg_size; -extern const uint8_t help__dpad_left_svg_data[]; - -extern const uint16_t help__analog_left_svg_size; -extern const uint8_t help__analog_left_svg_data[]; - -extern const uint16_t help__analog_right_svg_size; -extern const uint8_t help__analog_right_svg_data[]; - -extern const uint16_t help__analog_down_svg_size; -extern const uint8_t help__analog_down_svg_data[]; - -extern const uint16_t help__dpad_updown_svg_size; -extern const uint8_t help__dpad_updown_svg_data[]; - -struct Res2hEntry { - const std::string relativeFileName; - const uint32_t size; - const uint8_t * data; -}; - -extern const uint32_t res2hNrOfFiles; -extern const Res2hEntry res2hFiles[]; - -typedef const std::map res2hMapType; -extern res2hMapType res2hMap; diff --git a/data/converted/arrow_svg.cpp b/data/converted/arrow_svg.cpp deleted file mode 100644 index 4e57f4ae1d..0000000000 --- a/data/converted/arrow_svg.cpp +++ /dev/null @@ -1,92 +0,0 @@ -// this file was auto-generated from "arrow.svg" by res2h - -#include "../Resources.h" - -const uint16_t arrow_svg_size = 838; -const uint8_t arrow_svg_data[838] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32, - 0x2e,0x31,0x36,0x35,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, - 0x32,0x31,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x31, - 0x32,0x2e,0x31,0x36,0x35,0x20,0x32,0x31,0x2e,0x39, - 0x32,0x31,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x31,0x32,0x2e,0x31,0x36,0x35,0x20,0x32,0x31, - 0x2e,0x39,0x32,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x30,0x2e, - 0x37,0x35,0x2c,0x32,0x31,0x2e,0x39,0x32,0x31,0x63, - 0x2d,0x30,0x2e,0x31,0x39,0x37,0x2c,0x30,0x2d,0x30, - 0x2e,0x33,0x39,0x35,0x2d,0x30,0x2e,0x30,0x37,0x37, - 0x2d,0x30,0x2e,0x35,0x34,0x32,0x2d,0x30,0x2e,0x32, - 0x33,0x31,0x63,0x2d,0x30,0x2e,0x32,0x38,0x37,0x2d, - 0x30,0x2e,0x32,0x39,0x39,0x2d,0x30,0x2e,0x32,0x37, - 0x36,0x2d,0x30,0x2e,0x37,0x37,0x33,0x2c,0x30,0x2e, - 0x30,0x32,0x33,0x2d,0x31,0x2e,0x30,0x36,0x31,0x6c, - 0x31,0x30,0x2e,0x30,0x39,0x38,0x2d,0x39,0x2e,0x36, - 0x36,0x38,0x0a,0x09,0x09,0x4c,0x30,0x2e,0x32,0x33, - 0x31,0x2c,0x31,0x2e,0x32,0x39,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x39,0x39,0x2d,0x30,0x2e,0x32,0x38,0x36, - 0x2d,0x30,0x2e,0x33,0x31,0x2d,0x30,0x2e,0x37,0x36, - 0x31,0x2d,0x30,0x2e,0x30,0x32,0x33,0x2d,0x31,0x2e, - 0x30,0x36,0x63,0x30,0x2e,0x32,0x38,0x36,0x2d,0x30, - 0x2e,0x33,0x2c,0x30,0x2e,0x37,0x36,0x31,0x2d,0x30, - 0x2e,0x33,0x31,0x2c,0x31,0x2e,0x30,0x36,0x2d,0x30, - 0x2e,0x30,0x32,0x33,0x6c,0x31,0x30,0x2e,0x36,0x36, - 0x35,0x2c,0x31,0x30,0x2e,0x32,0x31,0x31,0x0a,0x09, - 0x09,0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e, - 0x31,0x34,0x31,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c, - 0x30,0x2e,0x33,0x33,0x37,0x2c,0x30,0x2e,0x32,0x33, - 0x31,0x2c,0x30,0x2e,0x35,0x34,0x32,0x73,0x2d,0x30, - 0x2e,0x30,0x38,0x34,0x2c,0x30,0x2e,0x34,0x2d,0x30, - 0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x35,0x34,0x32, - 0x4c,0x31,0x2e,0x32,0x36,0x39,0x2c,0x32,0x31,0x2e, - 0x37,0x31,0x33,0x43,0x31,0x2e,0x31,0x32,0x34,0x2c, - 0x32,0x31,0x2e,0x38,0x35,0x32,0x2c,0x30,0x2e,0x39, - 0x33,0x37,0x2c,0x32,0x31,0x2e,0x39,0x32,0x31,0x2c, - 0x30,0x2e,0x37,0x35,0x2c,0x32,0x31,0x2e,0x39,0x32, - 0x31,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/busy_0_svg.cpp b/data/converted/busy_0_svg.cpp deleted file mode 100644 index f52ef911da..0000000000 --- a/data/converted/busy_0_svg.cpp +++ /dev/null @@ -1,143 +0,0 @@ -// this file was auto-generated from "busy_0.svg" by res2h - -#include "../Resources.h" - -const uint16_t busy_0_svg_size = 1347; -const uint8_t busy_0_svg_data[1347] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, - 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, - 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, - 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, - 0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x32, - 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, - 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x68,0x2d,0x37,0x2e, - 0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c, - 0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, - 0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d, - 0x30,0x2e,0x37,0x30,0x39,0x76,0x2d,0x38,0x2e,0x33, - 0x37,0x39,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30, - 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39, - 0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33, - 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79, - 0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32, - 0x2c,0x39,0x2e,0x30,0x38,0x38,0x63,0x30,0x2c,0x30, - 0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x68,0x2d,0x37, - 0x2e,0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33,0x39, - 0x2c,0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30, - 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x38,0x56,0x30,0x2e,0x37, - 0x30,0x38,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x38,0x68,0x37,0x2e,0x39, - 0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x38,0x7a, - 0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, - 0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d, - 0x22,0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x39,0x2e,0x33,0x35,0x34,0x2c,0x32, - 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, - 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x48,0x30,0x2e,0x37, - 0x30,0x38,0x43,0x30,0x2e,0x33,0x31,0x39,0x2c,0x32, - 0x32,0x2e,0x30,0x30,0x32,0x2c,0x30,0x2c,0x32,0x31, - 0x2e,0x36,0x38,0x33,0x2c,0x30,0x2c,0x32,0x31,0x2e, - 0x32,0x39,0x33,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39, - 0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39, - 0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37, - 0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30, - 0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39,0x33,0x38, - 0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e, - 0x37,0x30,0x38,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30, - 0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33,0x7a,0x22, - 0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e, - 0x33,0x35,0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63, - 0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38, - 0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30, - 0x2c,0x39,0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39, - 0x2e,0x30,0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38, - 0x0a,0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e, - 0x39,0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37, - 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/busy_1_svg.cpp b/data/converted/busy_1_svg.cpp deleted file mode 100644 index 3653b6f095..0000000000 --- a/data/converted/busy_1_svg.cpp +++ /dev/null @@ -1,143 +0,0 @@ -// this file was auto-generated from "busy_1.svg" by res2h - -#include "../Resources.h" - -const uint16_t busy_1_svg_size = 1347; -const uint8_t busy_1_svg_data[1347] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, - 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, - 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, - 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, - 0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x32, - 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, - 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x68,0x2d,0x37,0x2e, - 0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c, - 0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, - 0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d, - 0x30,0x2e,0x37,0x30,0x39,0x76,0x2d,0x38,0x2e,0x33, - 0x37,0x39,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30, - 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39, - 0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33, - 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, - 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x39,0x2e,0x30, - 0x38,0x38,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d, - 0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30, - 0x38,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x38,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37, - 0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30, - 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, - 0x30,0x38,0x56,0x30,0x2e,0x37,0x30,0x38,0x0a,0x09, - 0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, - 0x30,0x38,0x68,0x37,0x2e,0x39,0x33,0x37,0x63,0x30, - 0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30, - 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x56, - 0x39,0x2e,0x30,0x38,0x38,0x7a,0x22,0x2f,0x3e,0x0a, - 0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70, - 0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35, - 0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39, - 0x2e,0x33,0x35,0x34,0x2c,0x32,0x31,0x2e,0x32,0x39, - 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, - 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30, - 0x2e,0x33,0x31,0x39,0x2c,0x32,0x32,0x2e,0x30,0x30, - 0x32,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x36,0x38,0x33, - 0x2c,0x30,0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x76, - 0x2d,0x38,0x2e,0x33,0x37,0x39,0x0a,0x09,0x09,0x63, - 0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, - 0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30,0x39, - 0x68,0x37,0x2e,0x39,0x33,0x38,0x63,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c, - 0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30, - 0x38,0x2c,0x30,0x2e,0x37,0x30,0x39,0x56,0x32,0x31, - 0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61, - 0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e, - 0x33,0x35,0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63, - 0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38, - 0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30, - 0x2c,0x39,0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39, - 0x2e,0x30,0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38, - 0x0a,0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e, - 0x39,0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37, - 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/busy_2_svg.cpp b/data/converted/busy_2_svg.cpp deleted file mode 100644 index b803569f87..0000000000 --- a/data/converted/busy_2_svg.cpp +++ /dev/null @@ -1,143 +0,0 @@ -// this file was auto-generated from "busy_2.svg" by res2h - -#include "../Resources.h" - -const uint16_t busy_2_svg_size = 1347; -const uint8_t busy_2_svg_data[1347] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, - 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, - 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x2c,0x32,0x31,0x2e,0x32,0x39, - 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, - 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37,0x63, - 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30,0x2e, - 0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2d, - 0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30, - 0x39,0x76,0x2d,0x38,0x2e,0x33,0x37,0x39,0x0a,0x09, - 0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, - 0x30,0x39,0x68,0x37,0x2e,0x39,0x33,0x37,0x63,0x30, - 0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30, - 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x56, - 0x32,0x31,0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e, - 0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f, - 0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e, - 0x35,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, - 0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x39,0x2e,0x30, - 0x38,0x38,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d, - 0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30, - 0x38,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x38,0x68,0x2d,0x37,0x2e,0x39,0x33,0x37, - 0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2d,0x30, - 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, - 0x30,0x38,0x56,0x30,0x2e,0x37,0x30,0x38,0x0a,0x09, - 0x09,0x63,0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x38, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37, - 0x30,0x38,0x68,0x37,0x2e,0x39,0x33,0x37,0x63,0x30, - 0x2e,0x33,0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30, - 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x56, - 0x39,0x2e,0x30,0x38,0x38,0x7a,0x22,0x2f,0x3e,0x0a, - 0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70, - 0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35, - 0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39, - 0x2e,0x33,0x35,0x34,0x2c,0x32,0x31,0x2e,0x32,0x39, - 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, - 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30, - 0x2e,0x33,0x31,0x39,0x2c,0x32,0x32,0x2e,0x30,0x30, - 0x32,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x36,0x38,0x33, - 0x2c,0x30,0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x76, - 0x2d,0x38,0x2e,0x33,0x37,0x39,0x0a,0x09,0x09,0x63, - 0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, - 0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30,0x39, - 0x68,0x37,0x2e,0x39,0x33,0x38,0x63,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c, - 0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30, - 0x38,0x2c,0x30,0x2e,0x37,0x30,0x39,0x56,0x32,0x31, - 0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61, - 0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e, - 0x33,0x35,0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63, - 0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38, - 0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30, - 0x2c,0x39,0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39, - 0x2e,0x30,0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38, - 0x0a,0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e, - 0x39,0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37, - 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/busy_3_svg.cpp b/data/converted/busy_3_svg.cpp deleted file mode 100644 index 4c6a2dc87d..0000000000 --- a/data/converted/busy_3_svg.cpp +++ /dev/null @@ -1,143 +0,0 @@ -// this file was auto-generated from "busy_3.svg" by res2h - -#include "../Resources.h" - -const uint16_t busy_3_svg_size = 1347; -const uint8_t busy_3_svg_data[1347] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, - 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, - 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, - 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, - 0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32,0x2c,0x32, - 0x31,0x2e,0x32,0x39,0x33,0x63,0x30,0x2c,0x30,0x2e, - 0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, - 0x2c,0x30,0x2e,0x37,0x30,0x39,0x68,0x2d,0x37,0x2e, - 0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33,0x39,0x2c, - 0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30,0x2e, - 0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d, - 0x30,0x2e,0x37,0x30,0x39,0x76,0x2d,0x38,0x2e,0x33, - 0x37,0x39,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30, - 0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x39,0x68,0x37,0x2e,0x39, - 0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x39,0x56,0x32,0x31,0x2e,0x32,0x39,0x33, - 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79, - 0x3d,0x22,0x30,0x2e,0x35,0x22,0x3e,0x0a,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x30,0x30,0x32, - 0x2c,0x39,0x2e,0x30,0x38,0x38,0x63,0x30,0x2c,0x30, - 0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33,0x31,0x39,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x68,0x2d,0x37, - 0x2e,0x39,0x33,0x37,0x63,0x2d,0x30,0x2e,0x33,0x39, - 0x2c,0x30,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2d,0x30, - 0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x38,0x56,0x30,0x2e,0x37, - 0x30,0x38,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2d,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x38,0x68,0x37,0x2e,0x39, - 0x33,0x37,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30,0x2e, - 0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x38,0x7a, - 0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, - 0x67,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39, - 0x2e,0x33,0x35,0x34,0x2c,0x32,0x31,0x2e,0x32,0x39, - 0x33,0x63,0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30, - 0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37, - 0x30,0x39,0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30, - 0x2e,0x33,0x31,0x39,0x2c,0x32,0x32,0x2e,0x30,0x30, - 0x32,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x36,0x38,0x33, - 0x2c,0x30,0x2c,0x32,0x31,0x2e,0x32,0x39,0x33,0x76, - 0x2d,0x38,0x2e,0x33,0x37,0x39,0x0a,0x09,0x09,0x63, - 0x30,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, - 0x31,0x39,0x2d,0x30,0x2e,0x37,0x30,0x39,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x2d,0x30,0x2e,0x37,0x30,0x39, - 0x68,0x37,0x2e,0x39,0x33,0x38,0x63,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c, - 0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x37,0x30, - 0x38,0x2c,0x30,0x2e,0x37,0x30,0x39,0x56,0x32,0x31, - 0x2e,0x32,0x39,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61, - 0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x35,0x22, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x2e, - 0x33,0x35,0x34,0x2c,0x39,0x2e,0x30,0x38,0x37,0x63, - 0x30,0x2c,0x30,0x2e,0x33,0x39,0x2d,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2d,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x37,0x30,0x38, - 0x48,0x30,0x2e,0x37,0x30,0x38,0x43,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x39,0x2e,0x37,0x39,0x36,0x2c,0x30, - 0x2c,0x39,0x2e,0x34,0x37,0x37,0x2c,0x30,0x2c,0x39, - 0x2e,0x30,0x38,0x37,0x56,0x30,0x2e,0x37,0x30,0x38, - 0x0a,0x09,0x09,0x43,0x30,0x2c,0x30,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x68,0x37,0x2e, - 0x39,0x33,0x38,0x63,0x30,0x2e,0x33,0x39,0x2c,0x30, - 0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30, - 0x2e,0x37,0x30,0x38,0x56,0x39,0x2e,0x30,0x38,0x37, - 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/button_filled_png.cpp b/data/converted/button_filled_png.cpp deleted file mode 100644 index 2e876b41bd..0000000000 --- a/data/converted/button_filled_png.cpp +++ /dev/null @@ -1,125 +0,0 @@ -// this file was auto-generated from "button_filled.png" by res2h - -#include "../Resources.h" - -const uint16_t button_filled_png_size = 1168; -const uint8_t button_filled_png_data[1168] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,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,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, - 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, - 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, - 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x37,0x34,0x30,0x31,0x37,0x39,0x35,0x39, - 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x39,0x38,0x44,0x38,0x30,0x39,0x44,0x44, - 0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x39,0x38,0x44,0x38,0x30,0x39,0x44,0x43, - 0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, - 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, - 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, - 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, - 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x37,0x34,0x30,0x31,0x37,0x39,0x35,0x39, - 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x37,0x34,0x30,0x31,0x37,0x39,0x35,0x39, - 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, - 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, - 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, - 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, - 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, - 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, - 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, - 0xfb,0x75,0xe4,0x6d,0x00,0x00,0x00,0xbe,0x49,0x44, - 0x41,0x54,0x78,0xda,0xec,0xd3,0xc1,0x09,0xc2,0x40, - 0x14,0x45,0xd1,0x71,0x10,0x6c,0x45,0x74,0x61,0x0f, - 0xb6,0xe0,0x22,0x15,0x24,0x08,0x29,0x60,0x2a,0x11, - 0x24,0x76,0x20,0xd8,0x8c,0x8b,0x60,0x2b,0x13,0x30, - 0xf8,0x3e,0x4c,0x36,0xae,0x5c,0xce,0xc7,0xfb,0xe1, - 0xee,0xdf,0x19,0x98,0x55,0x4a,0x29,0xe8,0xa2,0x3a, - 0xab,0x4e,0x6d,0xd5,0x26,0xd4,0x79,0x59,0xbd,0xd4, - 0xa0,0xae,0x6a,0x5e,0x97,0xf1,0x77,0x75,0x0a,0xf5, - 0x9f,0x3d,0xec,0x41,0x5d,0xd4,0x51,0x35,0xb1,0xbc, - 0xba,0x87,0xf1,0xdf,0x67,0x9b,0x5b,0x03,0xb4,0xc1, - 0xef,0x75,0x06,0xd8,0x3b,0x06,0xec,0x62,0xc5,0x1f, - 0xf6,0xa7,0x3f,0x11,0x83,0xf3,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,0xe0,0x1f,0x01,0xd9,0xf1, - 0xfe,0x6c,0x80,0xd1,0x31,0x60,0x34,0xc0,0xe0,0x18, - 0x30,0x2c,0x80,0x87,0xc3,0xf1,0xb6,0xf9,0x66,0x80, - 0x59,0x35,0xaa,0x57,0x4f,0x35,0x55,0x3c,0x7a,0x2a, - 0x1b,0xfb,0xb2,0xf9,0xfd,0x11,0x60,0x00,0xb7,0x75, - 0x1a,0x41,0x6b,0xc2,0x11,0x6c,0x00,0x00,0x00,0x00, - 0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; - diff --git a/data/converted/button_png.cpp b/data/converted/button_png.cpp deleted file mode 100644 index 9466771fc1..0000000000 --- a/data/converted/button_png.cpp +++ /dev/null @@ -1,132 +0,0 @@ -// this file was auto-generated from "button.png" by res2h - -#include "../Resources.h" - -const uint16_t button_png_size = 1231; -const uint8_t button_png_data[1231] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,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,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, - 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, - 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, - 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x37,0x34,0x30,0x31,0x37,0x39,0x35,0x39, - 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x39,0x38,0x44,0x38,0x30,0x39,0x45,0x31, - 0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x39,0x38,0x44,0x38,0x30,0x39,0x45,0x30, - 0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, - 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, - 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, - 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, - 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x37,0x36,0x30,0x31,0x37,0x39,0x35,0x39, - 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x37,0x34,0x30,0x31,0x37,0x39,0x35,0x39, - 0x30,0x45,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, - 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, - 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, - 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, - 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, - 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, - 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, - 0x3a,0x2f,0x3e,0xac,0x00,0x00,0x00,0xfd,0x49,0x44, - 0x41,0x54,0x78,0xda,0xec,0x9a,0x41,0x0e,0xc1,0x50, - 0x14,0x45,0x7f,0x1b,0xa1,0x4b,0x11,0x06,0xf6,0x20, - 0x66,0x62,0x80,0x88,0x15,0x68,0x44,0x17,0xd0,0x95, - 0x08,0x6a,0x07,0xc2,0x84,0x9d,0x18,0x88,0x4d,0x98, - 0x6b,0x13,0x8d,0xfb,0xe2,0x4a,0x2c,0xe1,0xff,0xb8, - 0x2f,0x39,0x69,0x7f,0x4c,0xce,0xe9,0x6b,0x67,0xa2, - 0x3c,0xcf,0x1d,0x26,0x06,0x4b,0x90,0x82,0x36,0x68, - 0x39,0x3f,0xa7,0x04,0x77,0x50,0x80,0x2d,0xa8,0x1b, - 0x94,0x3f,0x80,0xa9,0xf3,0x7f,0xec,0xc1,0xf6,0xc0, - 0x1a,0xf4,0xc1,0x3c,0xe6,0x53,0x37,0xf9,0x07,0x98, - 0x81,0x04,0x44,0x9e,0x92,0xd0,0xf1,0x41,0xe7,0x85, - 0x6d,0x60,0xc1,0xba,0x15,0x38,0x7a,0xbe,0x81,0x92, - 0x8e,0x11,0xdf,0x9a,0xd4,0x36,0xd0,0xe5,0x8f,0x67, - 0x17,0xce,0x5c,0x78,0xed,0xc4,0x3f,0x1f,0xec,0x33, - 0xa0,0x80,0xaf,0x6b,0x2b,0x76,0x81,0x8f,0x02,0x14, - 0xa0,0x00,0x05,0x28,0x40,0x01,0x0a,0x50,0x80,0x02, - 0x14,0xa0,0x00,0x05,0x28,0x40,0x01,0x0a,0x50,0x80, - 0x02,0x14,0xa0,0x00,0x05,0x28,0x40,0x01,0x0a,0x50, - 0x80,0x02,0x14,0xf0,0x8f,0x01,0x25,0xef,0x93,0x80, - 0xbc,0xbf,0xae,0xa5,0x05,0xdc,0x78,0x18,0x05,0x14, - 0x30,0xe4,0xf5,0x66,0x01,0x05,0x0f,0x1b,0x30,0x01, - 0x4d,0x8f,0xc5,0xcd,0x6d,0x0c,0x76,0x3c,0x17,0x0d, - 0x06,0x0c,0xdc,0xe7,0xbf,0x07,0xa7,0x80,0xb6,0x60, - 0xae,0x7b,0xdb,0x40,0x0d,0xe6,0x20,0x03,0x57,0x50, - 0x79,0x2c,0x5d,0xd1,0x31,0xa3,0xf3,0xeb,0x2d,0xc0, - 0x00,0x1c,0x2e,0x26,0xd8,0xd1,0x85,0xb1,0xfa,0x00, - 0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60, - 0x82 -}; - diff --git a/data/converted/checkbox_checked_svg.cpp b/data/converted/checkbox_checked_svg.cpp deleted file mode 100644 index 79726fbbdd..0000000000 --- a/data/converted/checkbox_checked_svg.cpp +++ /dev/null @@ -1,140 +0,0 @@ -// this file was auto-generated from "checkbox_checked.svg" by res2h - -#include "../Resources.h" - -const uint16_t checkbox_checked_svg_size = 1314; -const uint8_t checkbox_checked_svg_data[1314] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x39,0x36,0x32,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, - 0x35,0x39,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, - 0x31,0x2e,0x39,0x36,0x32,0x20,0x32,0x31,0x2e,0x39, - 0x35,0x39,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x32,0x31,0x2e,0x39,0x36,0x32,0x20,0x32,0x31, - 0x2e,0x39,0x35,0x39,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x37,0x2e,0x37,0x31,0x2c,0x31, - 0x2e,0x35,0x63,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, - 0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x31,0x2e,0x32, - 0x33,0x34,0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32, - 0x2e,0x37,0x35,0x32,0x76,0x31,0x33,0x2e,0x34,0x35, - 0x35,0x63,0x30,0x2c,0x31,0x2e,0x35,0x31,0x38,0x2d, - 0x31,0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e,0x37,0x35, - 0x32,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32,0x2e, - 0x37,0x35,0x32,0x48,0x34,0x2e,0x32,0x35,0x32,0x0a, - 0x09,0x63,0x2d,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, - 0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x31,0x2e,0x32, - 0x33,0x34,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x32, - 0x2e,0x37,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, - 0x43,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x37,0x33,0x34, - 0x2c,0x32,0x2e,0x37,0x33,0x34,0x2c,0x31,0x2e,0x35, - 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x31,0x2e,0x35, - 0x48,0x31,0x37,0x2e,0x37,0x31,0x20,0x4d,0x31,0x37, - 0x2e,0x37,0x31,0x2c,0x30,0x48,0x34,0x2e,0x32,0x35, - 0x32,0x43,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, - 0x30,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, - 0x34,0x2e,0x32,0x35,0x32,0x76,0x31,0x33,0x2e,0x34, - 0x35,0x35,0x0a,0x09,0x63,0x30,0x2c,0x32,0x2e,0x33, - 0x33,0x39,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34, - 0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32, - 0x2c,0x34,0x2e,0x32,0x35,0x32,0x48,0x31,0x37,0x2e, - 0x37,0x31,0x63,0x32,0x2e,0x33,0x33,0x39,0x2c,0x30, - 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x31,0x2e,0x39, - 0x31,0x33,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x34, - 0x2e,0x32,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, - 0x43,0x32,0x31,0x2e,0x39,0x36,0x32,0x2c,0x31,0x2e, - 0x39,0x31,0x34,0x2c,0x32,0x30,0x2e,0x30,0x34,0x39, - 0x2c,0x30,0x2c,0x31,0x37,0x2e,0x37,0x31,0x2c,0x30, - 0x4c,0x31,0x37,0x2e,0x37,0x31,0x2c,0x30,0x7a,0x22, - 0x2f,0x3e,0x0a,0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x67, - 0x3e,0x0a,0x09,0x09,0x0a,0x09,0x09,0x09,0x3c,0x72, - 0x65,0x63,0x74,0x20,0x78,0x3d,0x22,0x31,0x30,0x2e, - 0x32,0x33,0x32,0x22,0x20,0x79,0x3d,0x22,0x31,0x2e, - 0x30,0x37,0x39,0x22,0x20,0x74,0x72,0x61,0x6e,0x73, - 0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61,0x74,0x72, - 0x69,0x78,0x28,0x30,0x2e,0x37,0x30,0x37,0x31,0x20, - 0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x2d,0x30,0x2e, - 0x37,0x30,0x37,0x31,0x20,0x30,0x2e,0x37,0x30,0x37, - 0x31,0x20,0x31,0x30,0x2e,0x39,0x38,0x30,0x31,0x20, - 0x2d,0x34,0x2e,0x35,0x34,0x39,0x34,0x29,0x22,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x68,0x65,0x69, - 0x67,0x68,0x74,0x3d,0x22,0x31,0x39,0x2e,0x38,0x22, - 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09, - 0x3c,0x67,0x3e,0x0a,0x09,0x09,0x0a,0x09,0x09,0x09, - 0x3c,0x72,0x65,0x63,0x74,0x20,0x78,0x3d,0x22,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x22,0x20,0x79,0x3d,0x22, - 0x31,0x2e,0x30,0x37,0x39,0x22,0x20,0x74,0x72,0x61, - 0x6e,0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d,0x61, - 0x74,0x72,0x69,0x78,0x28,0x30,0x2e,0x37,0x30,0x37, - 0x31,0x20,0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x2d, - 0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x30,0x2e,0x37, - 0x30,0x37,0x31,0x20,0x31,0x30,0x2e,0x39,0x38,0x30, - 0x31,0x20,0x2d,0x34,0x2e,0x35,0x34,0x39,0x34,0x29, - 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37, - 0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64, - 0x74,0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x68, - 0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x39,0x2e, - 0x38,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e, - 0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x0a,0x09, - 0x09,0x09,0x3c,0x72,0x65,0x63,0x74,0x20,0x78,0x3d, - 0x22,0x31,0x2e,0x30,0x38,0x32,0x22,0x20,0x79,0x3d, - 0x22,0x31,0x30,0x2e,0x32,0x33,0x22,0x20,0x74,0x72, - 0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x3d,0x22,0x6d, - 0x61,0x74,0x72,0x69,0x78,0x28,0x30,0x2e,0x37,0x30, - 0x37,0x31,0x20,0x30,0x2e,0x37,0x30,0x37,0x31,0x20, - 0x2d,0x30,0x2e,0x37,0x30,0x37,0x31,0x20,0x30,0x2e, - 0x37,0x30,0x37,0x31,0x20,0x31,0x30,0x2e,0x39,0x37, - 0x39,0x33,0x20,0x2d,0x34,0x2e,0x35,0x34,0x39,0x34, - 0x29,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x77,0x69, - 0x64,0x74,0x68,0x3d,0x22,0x31,0x39,0x2e,0x38,0x22, - 0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31, - 0x2e,0x35,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73, - 0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/checkbox_unchecked_svg.cpp b/data/converted/checkbox_unchecked_svg.cpp deleted file mode 100644 index 42e6cadef0..0000000000 --- a/data/converted/checkbox_unchecked_svg.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// this file was auto-generated from "checkbox_unchecked.svg" by res2h - -#include "../Resources.h" - -const uint16_t checkbox_unchecked_svg_size = 850; -const uint8_t checkbox_unchecked_svg_data[850] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x39,0x36,0x32,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, - 0x35,0x39,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, - 0x31,0x2e,0x39,0x36,0x32,0x20,0x32,0x31,0x2e,0x39, - 0x35,0x39,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x32,0x31,0x2e,0x39,0x36,0x32,0x20,0x32,0x31, - 0x2e,0x39,0x35,0x39,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x37,0x2e,0x37,0x31,0x2c,0x31, - 0x2e,0x35,0x63,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, - 0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x31,0x2e,0x32, - 0x33,0x34,0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32, - 0x2e,0x37,0x35,0x32,0x76,0x31,0x33,0x2e,0x34,0x35, - 0x35,0x63,0x30,0x2c,0x31,0x2e,0x35,0x31,0x38,0x2d, - 0x31,0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e,0x37,0x35, - 0x32,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32,0x2e, - 0x37,0x35,0x32,0x48,0x34,0x2e,0x32,0x35,0x32,0x0a, - 0x09,0x63,0x2d,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, - 0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x31,0x2e,0x32, - 0x33,0x34,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x32, - 0x2e,0x37,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, - 0x43,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x37,0x33,0x34, - 0x2c,0x32,0x2e,0x37,0x33,0x34,0x2c,0x31,0x2e,0x35, - 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x31,0x2e,0x35, - 0x48,0x31,0x37,0x2e,0x37,0x31,0x20,0x4d,0x31,0x37, - 0x2e,0x37,0x31,0x2c,0x30,0x48,0x34,0x2e,0x32,0x35, - 0x32,0x43,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, - 0x30,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x30,0x2c, - 0x34,0x2e,0x32,0x35,0x32,0x76,0x31,0x33,0x2e,0x34, - 0x35,0x35,0x0a,0x09,0x63,0x30,0x2c,0x32,0x2e,0x33, - 0x33,0x39,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34, - 0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32, - 0x2c,0x34,0x2e,0x32,0x35,0x32,0x48,0x31,0x37,0x2e, - 0x37,0x31,0x63,0x32,0x2e,0x33,0x33,0x39,0x2c,0x30, - 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x31,0x2e,0x39, - 0x31,0x33,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d,0x34, - 0x2e,0x32,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, - 0x43,0x32,0x31,0x2e,0x39,0x36,0x32,0x2c,0x31,0x2e, - 0x39,0x31,0x34,0x2c,0x32,0x30,0x2e,0x30,0x34,0x39, - 0x2c,0x30,0x2c,0x31,0x37,0x2e,0x37,0x31,0x2c,0x30, - 0x4c,0x31,0x37,0x2e,0x37,0x31,0x2c,0x30,0x7a,0x22, - 0x2f,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/fav_add_svg.cpp b/data/converted/fav_add_svg.cpp deleted file mode 100644 index f82b73067a..0000000000 --- a/data/converted/fav_add_svg.cpp +++ /dev/null @@ -1,72 +0,0 @@ -// this file was auto-generated from "fav_add.svg" by res2h - -#include "../Resources.h" - -const uint16_t fav_add_svg_size = 638; -const uint8_t fav_add_svg_data[638] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, - 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, - 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, - 0x3e,0x0a,0x09,0x3c,0x72,0x65,0x63,0x74,0x20,0x79, - 0x3d,0x22,0x31,0x30,0x2e,0x32,0x35,0x31,0x22,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x2e, - 0x35,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x72,0x65,0x63,0x74, - 0x20,0x78,0x3d,0x22,0x39,0x2e,0x37,0x35,0x31,0x22, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37, - 0x37,0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64,0x74, - 0x68,0x3d,0x22,0x31,0x2e,0x35,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/fav_remove_svg.cpp b/data/converted/fav_remove_svg.cpp deleted file mode 100644 index b62b60710b..0000000000 --- a/data/converted/fav_remove_svg.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// this file was auto-generated from "fav_remove.svg" by res2h - -#include "../Resources.h" - -const uint16_t fav_remove_svg_size = 567; -const uint8_t fav_remove_svg_data[567] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x30,0x30,0x32,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, - 0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32,0x2e,0x30, - 0x30,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x32,0x31,0x2e,0x30,0x30,0x32,0x20,0x32,0x32, - 0x2e,0x30,0x30,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, - 0x3e,0x0a,0x09,0x3c,0x72,0x65,0x63,0x74,0x20,0x79, - 0x3d,0x22,0x31,0x30,0x2e,0x32,0x35,0x31,0x22,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x32,0x31,0x2e,0x30,0x30,0x32,0x22,0x20, - 0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22,0x31,0x2e, - 0x35,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/frame_png.cpp b/data/converted/frame_png.cpp deleted file mode 100644 index bfdc12cb9d..0000000000 --- a/data/converted/frame_png.cpp +++ /dev/null @@ -1,181 +0,0 @@ -// this file was auto-generated from "frame.png" by res2h - -#include "../Resources.h" - -const uint16_t frame_png_size = 1729; -const uint8_t frame_png_data[1729] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,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,0x03,0x66,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, - 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, - 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, - 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x43,0x44,0x31,0x35,0x46,0x36,0x32,0x43, - 0x43,0x35,0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41, - 0x37,0x44,0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35, - 0x31,0x30,0x45,0x31,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x34,0x32,0x31,0x44,0x45,0x36,0x35,0x31, - 0x41,0x33,0x44,0x37,0x31,0x31,0x45,0x33,0x39,0x44, - 0x44,0x37,0x44,0x38,0x31,0x37,0x37,0x35,0x41,0x41, - 0x45,0x34,0x34,0x45,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x34,0x32,0x31,0x44,0x45,0x36,0x35,0x30, - 0x41,0x33,0x44,0x37,0x31,0x31,0x45,0x33,0x39,0x44, - 0x44,0x37,0x44,0x38,0x31,0x37,0x37,0x35,0x41,0x41, - 0x45,0x34,0x34,0x45,0x22,0x20,0x78,0x6d,0x70,0x3a, - 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, - 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x53,0x36,0x20,0x28,0x57,0x69,0x6e,0x64,0x6f,0x77, - 0x73,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65,0x64,0x46, - 0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65,0x66,0x3a, - 0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x44, - 0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69,0x64,0x3a, - 0x43,0x44,0x31,0x35,0x46,0x36,0x32,0x43,0x43,0x35, - 0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41,0x37,0x44, - 0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35,0x31,0x30, - 0x45,0x31,0x22,0x20,0x73,0x74,0x52,0x65,0x66,0x3a, - 0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x49,0x44, - 0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69,0x64,0x3a, - 0x43,0x44,0x31,0x35,0x46,0x36,0x32,0x43,0x43,0x35, - 0x41,0x33,0x45,0x33,0x31,0x31,0x39,0x41,0x37,0x44, - 0x44,0x30,0x32,0x30,0x39,0x34,0x44,0x35,0x31,0x30, - 0x45,0x31,0x22,0x2f,0x3e,0x20,0x3c,0x2f,0x72,0x64, - 0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74, - 0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72,0x64,0x66, - 0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f,0x78,0x3a, - 0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e,0x20,0x3c, - 0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20,0x65, - 0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e,0x68,0xef, - 0xbd,0x8f,0x00,0x00,0x02,0xf1,0x49,0x44,0x41,0x54, - 0x78,0xda,0xec,0x9a,0xcf,0x4a,0x1b,0x51,0x14,0xc6, - 0xcf,0xdc,0x4c,0xd3,0x0a,0x66,0xa3,0x20,0x6d,0x15, - 0xd4,0xe0,0x56,0x10,0x52,0x91,0xae,0xb2,0xc8,0x0b, - 0x44,0x8a,0x7d,0x8a,0x6e,0x4a,0x5b,0xad,0x7d,0x80, - 0xb6,0xb4,0xeb,0xbe,0x84,0x4a,0xb5,0x0f,0xe0,0x26, - 0xab,0x04,0x9a,0x84,0x64,0x17,0xb4,0x8a,0x98,0x20, - 0xf8,0x2f,0xea,0x4c,0x30,0x1d,0x8d,0xf6,0xfb,0xc6, - 0x5c,0x19,0x8a,0xbb,0xd2,0x31,0x03,0xf7,0xc0,0x97, - 0xb9,0xce,0x5c,0xcd,0xf7,0x3b,0x73,0xce,0x08,0xf7, - 0x8e,0xd5,0x6c,0x36,0x85,0xa1,0x94,0x92,0x58,0x2c, - 0x26,0xb6,0x6d,0x73,0x1c,0x87,0xb2,0x38,0x4d,0x3d, - 0x87,0x9e,0x42,0x71,0x09,0x37,0x5c,0xa8,0x0e,0x95, - 0xa1,0xd5,0xab,0xab,0xab,0x1f,0x90,0x77,0x79,0x79, - 0x29,0x9d,0x4e,0x47,0x30,0xf6,0x27,0x59,0x04,0xa0, - 0x79,0x1a,0x27,0x00,0xc6,0xb3,0x96,0x65,0x7d,0xb9, - 0xbe,0xbe,0x9e,0x80,0xfc,0x89,0x3c,0x52,0x61,0x05, - 0xbe,0xff,0xf6,0x48,0x6f,0x3c,0x42,0x9b,0xf0,0xb0, - 0x00,0x3f,0xdf,0x09,0x40,0x10,0x7a,0xb3,0x4e,0x4f, - 0x4f,0x7d,0xe3,0x50,0x0c,0x93,0x3e,0x42,0xf3,0xbc, - 0xa0,0x29,0x35,0x69,0x98,0x00,0x41,0x08,0x02,0xe8, - 0xea,0xe0,0x11,0x3e,0x98,0xdc,0x0f,0x9d,0x9b,0x10, - 0x5b,0x13,0x22,0x3e,0xe1,0xc2,0x3b,0x9e,0xd4,0xe6, - 0xc3,0x36,0x1d,0x0c,0xfd,0xdd,0xc1,0x44,0x76,0x21, - 0xe6,0xbb,0x80,0x0b,0xbe,0x77,0xd7,0x75,0xf9,0xc3, - 0x1c,0xce,0x2d,0xf1,0x97,0x82,0xf5,0xd5,0x6b,0xa1, - 0xef,0x44,0x37,0xe1,0x73,0xf0,0xbb,0x62,0x39,0x8e, - 0xc3,0xe6,0xfc,0x05,0x8d,0x04,0x4b,0xa6,0x57,0x43, - 0x97,0x14,0xa2,0x01,0x25,0x6d,0x18,0x9e,0x03,0xd1, - 0x48,0xd8,0x8d,0xfa,0x2f,0xa5,0xe5,0x37,0xaf,0x65, - 0x0d,0x63,0xfc,0xd2,0xc6,0x47,0x56,0x5f,0x88,0x0a, - 0x40,0x60,0x9c,0x55,0xad,0x56,0x6b,0x3a,0x0a,0xc6, - 0xef,0x02,0x81,0xf7,0x67,0x0a,0x3d,0xf0,0x38,0x2a, - 0xd9,0x0f,0x9a,0xa7,0xe0,0xfd,0x89,0x3a,0x3f,0x3f, - 0x7f,0xd8,0xeb,0x8d,0x7b,0x57,0xf0,0x69,0x09,0xef, - 0x71,0xa5,0x9f,0xfb,0x51,0x0b,0xfd,0xcf,0x56,0x45, - 0xad,0x7c,0xfe,0x2e,0x23,0x25,0x11,0x0f,0x03,0x60, - 0x00,0x0c,0x80,0x01,0x30,0x00,0x06,0xc0,0x00,0x18, - 0x00,0x03,0x60,0x00,0x0c,0x80,0x01,0x30,0x00,0x06, - 0xc0,0x00,0x18,0x80,0x7b,0x02,0x88,0xea,0xba,0x10, - 0xc3,0x5f,0x17,0xd2,0x2b,0x73,0x51,0x5b,0x1b,0xd5, - 0x1b,0x31,0x5c,0x1b,0x75,0xa0,0x48,0x2d,0x2f,0x76, - 0xd7,0x45,0x29,0x4f,0xb9,0xae,0xbb,0xe7,0x38,0x4e, - 0xa4,0x00,0xb8,0x43,0xc9,0xcd,0xc9,0xb3,0xb3,0xb3, - 0x3d,0xd5,0x6c,0x36,0xab,0x87,0x87,0x87,0xd2,0x6e, - 0xb7,0x23,0xb3,0xc1,0x41,0xaf,0x07,0x07,0x07,0x72, - 0x7c,0x7c,0xfc,0x53,0x9d,0x9c,0x9c,0xac,0xed,0xee, - 0xee,0x0a,0x21,0x2e,0x2e,0x2e,0x7a,0x1e,0x80,0x1e, - 0x8f,0x8e,0x8e,0xa4,0xd1,0x68,0xf0,0x0e,0xac,0x29, - 0x9c,0x58,0xde,0xd9,0xd9,0xa9,0xd7,0x6a,0x35,0x12, - 0xf5,0x74,0x29,0xd1,0x1b,0xcd,0xd3,0x2b,0x3c,0x37, - 0xe8,0x5d,0x25,0x12,0x09,0x0f,0xc6,0xdf,0x94,0x4a, - 0x25,0xa9,0x54,0x2a,0x3d,0x0b,0x41,0x4f,0xf4,0x56, - 0xad,0x56,0x85,0x5e,0x01,0xf2,0xba,0xbf,0xbf,0xff, - 0xb7,0x3d,0x36,0x36,0x26,0xdb,0xdb,0xdb,0x4b,0x5b, - 0x5b,0x5b,0xd3,0x68,0xe8,0xb7,0xec,0xee,0x54,0x2a, - 0x25,0x43,0x43,0x43,0x12,0x8f,0xc7,0x6f,0x77,0xcc, - 0xef,0xb3,0xe6,0x3d,0xcf,0x93,0xfd,0xfd,0x7d,0x29, - 0x16,0x8b,0x92,0xcf,0xe7,0x05,0x7d,0xfb,0x35,0x99, - 0x4c,0x2e,0x8f,0x8f,0x8f,0x8b,0xcd,0x0f,0xd6,0x3f, - 0x26,0xbc,0xc7,0xad,0x79,0x54,0xaf,0xd7,0x5f,0x6d, - 0x6c,0x6c,0xf8,0x10,0x98,0x24,0x03,0x03,0x03,0xd2, - 0xd7,0xd7,0xe7,0xbf,0x4b,0x11,0x16,0x0c,0x4d,0xf3, - 0x49,0xc3,0x64,0x32,0xeb,0x48,0xae,0xe8,0x0a,0x69, - 0xb5,0x5a,0xdf,0xe0,0x6b,0x71,0x72,0x72,0x52,0xe8, - 0xdd,0x62,0x37,0x93,0xae,0x50,0x28,0xc8,0xfa,0xfa, - 0x3a,0x6b,0xeb,0x05,0xfe,0xc6,0x67,0x18,0x9e,0x20, - 0xc0,0xe8,0xe8,0xa8,0x0c,0x0e,0x0e,0xfa,0x10,0xdd, - 0x97,0x2e,0xfe,0xbb,0x79,0x8a,0xe6,0x59,0xef,0xf0, - 0xe3,0x03,0x00,0x68,0x13,0x97,0x17,0xe1,0x67,0x25, - 0x93,0xc9,0xc8,0xcc,0xcc,0x8c,0x5f,0x25,0xfe,0xdb, - 0x2a,0xa4,0xd5,0xf5,0x95,0xcb,0xe5,0xa4,0x5c,0x2e, - 0x73,0xf7,0x9e,0xaf,0x1f,0xcc,0x42,0x29,0x68,0x18, - 0x7a,0x10,0xf6,0x03,0x47,0x6e,0x76,0xe3,0x8b,0xd0, - 0x2a,0xb4,0x3c,0x35,0x35,0xe5,0xa5,0xd3,0x69,0x61, - 0xf6,0x99,0x54,0x56,0xc5,0x1f,0x01,0x06,0x00,0x8e, - 0xb5,0x2e,0x8e,0x23,0xf2,0x34,0xce,0x00,0x00,0x00, - 0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; - diff --git a/data/converted/help__analog_down_svg.cpp b/data/converted/help__analog_down_svg.cpp deleted file mode 100644 index d37e6c98c9..0000000000 --- a/data/converted/help__analog_down_svg.cpp +++ /dev/null @@ -1,289 +0,0 @@ -// this file was auto-generated from "analog_down.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__analog_down_svg_size = 2809; -const uint8_t help__analog_down_svg_data[2809] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73, - 0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20, - 0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, - 0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31, - 0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, - 0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68, - 0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e, - 0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31, - 0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73, - 0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e, - 0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, - 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c, - 0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c, - 0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64, - 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x2c,0x20, - 0x30,0x2c,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x3e,0x0a, - 0x20,0x20,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x32,0x2e,0x31,0x34,0x35,0x2c, - 0x31,0x38,0x2e,0x35,0x31,0x32,0x20,0x43,0x32,0x32, - 0x2e,0x31,0x34,0x35,0x2c,0x32,0x30,0x2e,0x35,0x32, - 0x35,0x20,0x32,0x30,0x2e,0x35,0x30,0x36,0x2c,0x32, - 0x32,0x2e,0x31,0x36,0x31,0x20,0x31,0x38,0x2e,0x34, - 0x39,0x34,0x2c,0x32,0x32,0x2e,0x31,0x36,0x31,0x20, - 0x43,0x31,0x36,0x2e,0x34,0x38,0x32,0x2c,0x32,0x32, - 0x2e,0x31,0x36,0x31,0x20,0x31,0x34,0x2e,0x38,0x34, - 0x34,0x2c,0x32,0x30,0x2e,0x35,0x32,0x33,0x20,0x31, - 0x34,0x2e,0x38,0x34,0x34,0x2c,0x31,0x38,0x2e,0x35, - 0x31,0x32,0x20,0x43,0x31,0x34,0x2e,0x38,0x34,0x34, - 0x2c,0x31,0x36,0x2e,0x34,0x39,0x39,0x20,0x31,0x36, - 0x2e,0x34,0x38,0x33,0x2c,0x31,0x34,0x2e,0x38,0x36, - 0x32,0x20,0x31,0x38,0x2e,0x34,0x39,0x34,0x2c,0x31, - 0x34,0x2e,0x38,0x36,0x32,0x20,0x43,0x32,0x30,0x2e, - 0x35,0x30,0x37,0x2c,0x31,0x34,0x2e,0x38,0x36,0x31, - 0x20,0x32,0x32,0x2e,0x31,0x34,0x35,0x2c,0x31,0x36, - 0x2e,0x34,0x39,0x39,0x20,0x32,0x32,0x2e,0x31,0x34, - 0x35,0x2c,0x31,0x38,0x2e,0x35,0x31,0x32,0x20,0x7a, - 0x20,0x4d,0x31,0x36,0x2e,0x33,0x34,0x33,0x2c,0x31, - 0x38,0x2e,0x35,0x31,0x32,0x20,0x43,0x31,0x36,0x2e, - 0x33,0x34,0x33,0x2c,0x31,0x39,0x2e,0x36,0x39,0x38, - 0x20,0x31,0x37,0x2e,0x33,0x30,0x38,0x2c,0x32,0x30, - 0x2e,0x36,0x36,0x31,0x20,0x31,0x38,0x2e,0x34,0x39, - 0x33,0x2c,0x32,0x30,0x2e,0x36,0x36,0x31,0x20,0x43, - 0x31,0x39,0x2e,0x36,0x37,0x38,0x2c,0x32,0x30,0x2e, - 0x36,0x36,0x31,0x20,0x32,0x30,0x2e,0x36,0x34,0x34, - 0x2c,0x31,0x39,0x2e,0x36,0x39,0x36,0x20,0x32,0x30, - 0x2e,0x36,0x34,0x34,0x2c,0x31,0x38,0x2e,0x35,0x31, - 0x32,0x20,0x43,0x32,0x30,0x2e,0x36,0x34,0x34,0x2c, - 0x31,0x37,0x2e,0x33,0x32,0x36,0x20,0x31,0x39,0x2e, - 0x36,0x37,0x38,0x2c,0x31,0x36,0x2e,0x33,0x36,0x32, - 0x20,0x31,0x38,0x2e,0x34,0x39,0x33,0x2c,0x31,0x36, - 0x2e,0x33,0x36,0x32,0x20,0x43,0x31,0x37,0x2e,0x33, - 0x30,0x38,0x2c,0x31,0x36,0x2e,0x33,0x36,0x31,0x20, - 0x31,0x36,0x2e,0x33,0x34,0x33,0x2c,0x31,0x37,0x2e, - 0x33,0x32,0x36,0x20,0x31,0x36,0x2e,0x33,0x34,0x33, - 0x2c,0x31,0x38,0x2e,0x35,0x31,0x32,0x20,0x7a,0x22, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d, - 0x22,0x4d,0x38,0x2e,0x35,0x38,0x2c,0x31,0x35,0x2e, - 0x35,0x30,0x37,0x20,0x4c,0x38,0x2e,0x35,0x38,0x2c, - 0x32,0x31,0x2e,0x35,0x31,0x39,0x20,0x43,0x38,0x2e, - 0x35,0x38,0x2c,0x32,0x31,0x2e,0x37,0x39,0x32,0x20, - 0x38,0x2e,0x34,0x33,0x2c,0x32,0x32,0x2e,0x30,0x34, - 0x34,0x20,0x38,0x2e,0x31,0x39,0x2c,0x32,0x32,0x2e, - 0x31,0x37,0x36,0x20,0x43,0x37,0x2e,0x39,0x34,0x39, - 0x2c,0x32,0x32,0x2e,0x33,0x30,0x38,0x20,0x37,0x2e, - 0x36,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x39,0x37, - 0x20,0x37,0x2e,0x34,0x32,0x34,0x2c,0x32,0x32,0x2e, - 0x31,0x35,0x20,0x4c,0x32,0x2e,0x37,0x34,0x2c,0x31, - 0x39,0x2e,0x31,0x34,0x35,0x20,0x43,0x32,0x2e,0x33, - 0x30,0x39,0x2c,0x31,0x38,0x2e,0x38,0x36,0x39,0x20, - 0x32,0x2e,0x33,0x31,0x2c,0x31,0x38,0x2e,0x31,0x35, - 0x39,0x20,0x32,0x2e,0x37,0x34,0x2c,0x31,0x37,0x2e, - 0x38,0x38,0x31,0x20,0x4c,0x37,0x2e,0x34,0x32,0x34, - 0x2c,0x31,0x34,0x2e,0x38,0x37,0x36,0x20,0x43,0x37, - 0x2e,0x36,0x35,0x35,0x2c,0x31,0x34,0x2e,0x37,0x32, - 0x39,0x20,0x37,0x2e,0x39,0x34,0x38,0x2c,0x31,0x34, - 0x2e,0x37,0x31,0x37,0x20,0x38,0x2e,0x31,0x39,0x2c, - 0x31,0x34,0x2e,0x38,0x35,0x20,0x43,0x38,0x2e,0x34, - 0x33,0x2c,0x31,0x34,0x2e,0x39,0x38,0x20,0x38,0x2e, - 0x35,0x38,0x2c,0x31,0x35,0x2e,0x32,0x33,0x32,0x20, - 0x38,0x2e,0x35,0x38,0x2c,0x31,0x35,0x2e,0x35,0x30, - 0x37,0x20,0x7a,0x20,0x4d,0x37,0x2e,0x30,0x38,0x2c, - 0x32,0x30,0x2e,0x31,0x34,0x36,0x20,0x4c,0x37,0x2e, - 0x30,0x38,0x2c,0x31,0x36,0x2e,0x38,0x37,0x38,0x20, - 0x4c,0x34,0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e, - 0x35,0x31,0x33,0x20,0x4c,0x37,0x2e,0x30,0x38,0x2c, - 0x32,0x30,0x2e,0x31,0x34,0x36,0x20,0x7a,0x22,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x3c,0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, - 0x4d,0x31,0x38,0x2e,0x34,0x39,0x34,0x2c,0x33,0x33, - 0x2e,0x39,0x31,0x38,0x20,0x4c,0x32,0x31,0x2e,0x34, - 0x39,0x38,0x2c,0x32,0x39,0x2e,0x32,0x33,0x34,0x20, - 0x4c,0x31,0x35,0x2e,0x34,0x38,0x38,0x2c,0x32,0x39, - 0x2e,0x32,0x33,0x34,0x20,0x4c,0x31,0x38,0x2e,0x34, - 0x39,0x34,0x2c,0x33,0x33,0x2e,0x39,0x31,0x38,0x20, - 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x32, - 0x34,0x38,0x2c,0x32,0x39,0x2e,0x32,0x33,0x34,0x20, - 0x43,0x32,0x32,0x2e,0x32,0x34,0x38,0x2c,0x32,0x39, - 0x2e,0x33,0x37,0x35,0x20,0x32,0x32,0x2e,0x32,0x30, - 0x38,0x2c,0x32,0x39,0x2e,0x35,0x31,0x36,0x20,0x32, - 0x32,0x2e,0x31,0x32,0x39,0x2c,0x32,0x39,0x2e,0x36, - 0x33,0x39,0x20,0x4c,0x31,0x39,0x2e,0x31,0x32,0x36, - 0x2c,0x33,0x34,0x2e,0x33,0x32,0x33,0x20,0x43,0x31, - 0x38,0x2e,0x39,0x38,0x38,0x2c,0x33,0x34,0x2e,0x35, - 0x33,0x38,0x20,0x31,0x38,0x2e,0x37,0x35,0x2c,0x33, - 0x34,0x2e,0x36,0x36,0x38,0x20,0x31,0x38,0x2e,0x34, - 0x39,0x35,0x2c,0x33,0x34,0x2e,0x36,0x36,0x38,0x20, - 0x43,0x31,0x38,0x2e,0x32,0x34,0x2c,0x33,0x34,0x2e, - 0x36,0x36,0x38,0x20,0x31,0x38,0x2e,0x30,0x30,0x32, - 0x2c,0x33,0x34,0x2e,0x35,0x33,0x38,0x20,0x31,0x37, - 0x2e,0x38,0x36,0x34,0x2c,0x33,0x34,0x2e,0x33,0x32, - 0x33,0x20,0x4c,0x31,0x34,0x2e,0x38,0x35,0x38,0x2c, - 0x32,0x39,0x2e,0x36,0x33,0x39,0x20,0x43,0x31,0x34, - 0x2e,0x37,0x31,0x2c,0x32,0x39,0x2e,0x34,0x30,0x39, - 0x20,0x31,0x34,0x2e,0x37,0x2c,0x32,0x39,0x2e,0x31, - 0x31,0x35,0x20,0x31,0x34,0x2e,0x38,0x33,0x31,0x2c, - 0x32,0x38,0x2e,0x38,0x37,0x33,0x20,0x43,0x31,0x34, - 0x2e,0x39,0x36,0x32,0x2c,0x32,0x38,0x2e,0x36,0x33, - 0x33,0x20,0x31,0x35,0x2e,0x32,0x31,0x35,0x2c,0x32, - 0x38,0x2e,0x34,0x38,0x33,0x20,0x31,0x35,0x2e,0x34, - 0x38,0x39,0x2c,0x32,0x38,0x2e,0x34,0x38,0x33,0x20, - 0x4c,0x32,0x31,0x2e,0x34,0x39,0x39,0x2c,0x32,0x38, - 0x2e,0x34,0x38,0x33,0x20,0x43,0x32,0x31,0x2e,0x37, - 0x37,0x33,0x2c,0x32,0x38,0x2e,0x34,0x38,0x33,0x20, - 0x32,0x32,0x2e,0x30,0x32,0x35,0x2c,0x32,0x38,0x2e, - 0x36,0x33,0x31,0x20,0x32,0x32,0x2e,0x31,0x35,0x37, - 0x2c,0x32,0x38,0x2e,0x38,0x37,0x33,0x20,0x43,0x32, - 0x32,0x2e,0x32,0x31,0x38,0x2c,0x32,0x38,0x2e,0x39, - 0x38,0x37,0x20,0x32,0x32,0x2e,0x32,0x34,0x38,0x2c, - 0x32,0x39,0x2e,0x31,0x31,0x31,0x20,0x32,0x32,0x2e, - 0x32,0x34,0x38,0x2c,0x32,0x39,0x2e,0x32,0x33,0x34, - 0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x34,0x39,0x34, - 0x2c,0x33,0x32,0x2e,0x35,0x32,0x39,0x20,0x4c,0x32, - 0x30,0x2e,0x31,0x32,0x36,0x2c,0x32,0x39,0x2e,0x39, - 0x38,0x34,0x20,0x4c,0x31,0x36,0x2e,0x38,0x36,0x31, - 0x2c,0x32,0x39,0x2e,0x39,0x38,0x34,0x20,0x4c,0x31, - 0x38,0x2e,0x34,0x39,0x34,0x2c,0x33,0x32,0x2e,0x35, - 0x32,0x39,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x67, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e,0x32, - 0x34,0x38,0x2c,0x37,0x2e,0x38,0x34,0x38,0x20,0x43, - 0x32,0x32,0x2e,0x32,0x34,0x38,0x2c,0x37,0x2e,0x39, - 0x37,0x32,0x20,0x32,0x32,0x2e,0x32,0x31,0x38,0x2c, - 0x38,0x2e,0x30,0x39,0x34,0x20,0x32,0x32,0x2e,0x31, - 0x35,0x36,0x2c,0x38,0x2e,0x32,0x30,0x36,0x20,0x43, - 0x32,0x32,0x2e,0x30,0x32,0x34,0x2c,0x38,0x2e,0x34, - 0x34,0x37,0x20,0x32,0x31,0x2e,0x37,0x37,0x32,0x2c, - 0x38,0x2e,0x35,0x39,0x38,0x20,0x32,0x31,0x2e,0x34, - 0x39,0x38,0x2c,0x38,0x2e,0x35,0x39,0x38,0x20,0x4c, - 0x31,0x35,0x2e,0x34,0x38,0x38,0x2c,0x38,0x2e,0x35, - 0x39,0x38,0x20,0x43,0x31,0x35,0x2e,0x32,0x31,0x34, - 0x2c,0x38,0x2e,0x35,0x39,0x38,0x20,0x31,0x34,0x2e, - 0x39,0x36,0x32,0x2c,0x38,0x2e,0x34,0x34,0x39,0x20, - 0x31,0x34,0x2e,0x38,0x33,0x2c,0x38,0x2e,0x32,0x30, - 0x36,0x20,0x43,0x31,0x34,0x2e,0x36,0x39,0x39,0x2c, - 0x37,0x2e,0x39,0x36,0x37,0x20,0x31,0x34,0x2e,0x37, - 0x30,0x37,0x2c,0x37,0x2e,0x36,0x37,0x33,0x20,0x31, - 0x34,0x2e,0x38,0x35,0x37,0x2c,0x37,0x2e,0x34,0x34, - 0x31,0x20,0x4c,0x31,0x37,0x2e,0x38,0x36,0x32,0x2c, - 0x32,0x2e,0x37,0x35,0x36,0x20,0x43,0x31,0x38,0x2c, - 0x32,0x2e,0x35,0x34,0x31,0x20,0x31,0x38,0x2e,0x32, - 0x33,0x38,0x2c,0x32,0x2e,0x34,0x31,0x31,0x20,0x31, - 0x38,0x2e,0x34,0x39,0x33,0x2c,0x32,0x2e,0x34,0x31, - 0x31,0x20,0x43,0x31,0x38,0x2e,0x37,0x34,0x38,0x2c, - 0x32,0x2e,0x34,0x31,0x31,0x20,0x31,0x38,0x2e,0x39, - 0x38,0x36,0x2c,0x32,0x2e,0x35,0x34,0x31,0x20,0x31, - 0x39,0x2e,0x31,0x32,0x34,0x2c,0x32,0x2e,0x37,0x35, - 0x36,0x20,0x4c,0x32,0x32,0x2e,0x31,0x32,0x38,0x2c, - 0x37,0x2e,0x34,0x34,0x31,0x20,0x43,0x32,0x32,0x2e, - 0x32,0x30,0x38,0x2c,0x37,0x2e,0x35,0x36,0x35,0x20, - 0x32,0x32,0x2e,0x32,0x34,0x38,0x2c,0x37,0x2e,0x37, - 0x30,0x37,0x20,0x32,0x32,0x2e,0x32,0x34,0x38,0x2c, - 0x37,0x2e,0x38,0x34,0x38,0x20,0x7a,0x20,0x4d,0x31, - 0x36,0x2e,0x38,0x36,0x2c,0x37,0x2e,0x30,0x39,0x38, - 0x20,0x4c,0x32,0x30,0x2e,0x31,0x32,0x36,0x2c,0x37, - 0x2e,0x30,0x39,0x38,0x20,0x4c,0x31,0x38,0x2e,0x34, - 0x39,0x33,0x2c,0x34,0x2e,0x35,0x35,0x32,0x20,0x4c, - 0x31,0x36,0x2e,0x38,0x36,0x2c,0x37,0x2e,0x30,0x39, - 0x38,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x64,0x3d,0x22,0x4d,0x33,0x34,0x2e,0x35, - 0x39,0x2c,0x31,0x38,0x2e,0x35,0x31,0x33,0x20,0x4c, - 0x33,0x34,0x2e,0x35,0x39,0x2c,0x31,0x38,0x2e,0x35, - 0x31,0x33,0x20,0x43,0x33,0x34,0x2e,0x35,0x39,0x2c, - 0x31,0x38,0x2e,0x37,0x36,0x38,0x20,0x33,0x34,0x2e, - 0x34,0x36,0x2c,0x31,0x39,0x2e,0x30,0x30,0x35,0x20, - 0x33,0x34,0x2e,0x32,0x34,0x35,0x2c,0x31,0x39,0x2e, - 0x31,0x34,0x34,0x20,0x4c,0x32,0x39,0x2e,0x35,0x36, - 0x31,0x2c,0x32,0x32,0x2e,0x31,0x34,0x39,0x20,0x43, - 0x32,0x39,0x2e,0x33,0x33,0x2c,0x32,0x32,0x2e,0x32, - 0x39,0x36,0x20,0x32,0x39,0x2e,0x30,0x33,0x37,0x2c, - 0x32,0x32,0x2e,0x33,0x30,0x37,0x20,0x32,0x38,0x2e, - 0x37,0x39,0x35,0x2c,0x32,0x32,0x2e,0x31,0x37,0x35, - 0x20,0x43,0x32,0x38,0x2e,0x35,0x35,0x33,0x2c,0x32, - 0x32,0x2e,0x30,0x34,0x33,0x20,0x32,0x38,0x2e,0x34, - 0x30,0x34,0x2c,0x32,0x31,0x2e,0x37,0x39,0x31,0x20, - 0x32,0x38,0x2e,0x34,0x30,0x34,0x2c,0x32,0x31,0x2e, - 0x35,0x31,0x38,0x20,0x4c,0x32,0x38,0x2e,0x34,0x30, - 0x34,0x2c,0x31,0x35,0x2e,0x35,0x30,0x36,0x20,0x43, - 0x32,0x38,0x2e,0x34,0x30,0x34,0x2c,0x31,0x35,0x2e, - 0x32,0x33,0x33,0x20,0x32,0x38,0x2e,0x35,0x35,0x32, - 0x2c,0x31,0x34,0x2e,0x39,0x38,0x31,0x20,0x32,0x38, - 0x2e,0x37,0x39,0x35,0x2c,0x31,0x34,0x2e,0x38,0x34, - 0x39,0x20,0x43,0x32,0x39,0x2e,0x30,0x33,0x35,0x2c, - 0x31,0x34,0x2e,0x37,0x31,0x36,0x20,0x32,0x39,0x2e, - 0x33,0x32,0x38,0x2c,0x31,0x34,0x2e,0x37,0x32,0x38, - 0x20,0x32,0x39,0x2e,0x35,0x36,0x31,0x2c,0x31,0x34, - 0x2e,0x38,0x37,0x35,0x20,0x4c,0x33,0x34,0x2e,0x32, - 0x34,0x35,0x2c,0x31,0x37,0x2e,0x38,0x38,0x20,0x43, - 0x33,0x34,0x2e,0x34,0x36,0x2c,0x31,0x38,0x2e,0x30, - 0x32,0x20,0x33,0x34,0x2e,0x35,0x39,0x2c,0x31,0x38, - 0x2e,0x32,0x35,0x37,0x20,0x33,0x34,0x2e,0x35,0x39, - 0x2c,0x31,0x38,0x2e,0x35,0x31,0x33,0x20,0x7a,0x20, - 0x4d,0x32,0x39,0x2e,0x39,0x30,0x36,0x2c,0x32,0x30, - 0x2e,0x31,0x34,0x36,0x20,0x4c,0x33,0x32,0x2e,0x34, - 0x35,0x31,0x2c,0x31,0x38,0x2e,0x35,0x31,0x33,0x20, - 0x4c,0x32,0x39,0x2e,0x39,0x30,0x36,0x2c,0x31,0x36, - 0x2e,0x38,0x37,0x38,0x20,0x4c,0x32,0x39,0x2e,0x39, - 0x30,0x36,0x2c,0x32,0x30,0x2e,0x31,0x34,0x36,0x20, - 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x30,0x20,0x43,0x32,0x38,0x2e,0x37,0x36,0x35,0x2c, - 0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x38, - 0x2e,0x32,0x39,0x36,0x20,0x33,0x37,0x2e,0x30,0x36, - 0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x32,0x38,0x2e, - 0x37,0x36,0x35,0x20,0x32,0x38,0x2e,0x37,0x36,0x35, - 0x2c,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x20,0x43,0x38,0x2e,0x32,0x39,0x36,0x2c,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x20,0x30,0x2c,0x32,0x38,0x2e, - 0x37,0x36,0x35,0x20,0x30,0x2c,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x20,0x43,0x30,0x2c,0x38,0x2e,0x32,0x39, - 0x36,0x20,0x38,0x2e,0x32,0x39,0x36,0x2c,0x30,0x20, - 0x31,0x38,0x2e,0x35,0x33,0x2c,0x30,0x20,0x7a,0x20, - 0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x31,0x20,0x43, - 0x38,0x2e,0x38,0x34,0x39,0x2c,0x31,0x20,0x31,0x2c, - 0x38,0x2e,0x38,0x34,0x39,0x20,0x31,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x31,0x20,0x43,0x31,0x2c,0x32,0x38, - 0x2e,0x32,0x31,0x32,0x20,0x38,0x2e,0x38,0x34,0x39, - 0x2c,0x33,0x36,0x2e,0x30,0x36,0x31,0x20,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31, - 0x20,0x43,0x32,0x38,0x2e,0x32,0x31,0x32,0x2c,0x33, - 0x36,0x2e,0x30,0x36,0x31,0x20,0x33,0x36,0x2e,0x30, - 0x36,0x31,0x2c,0x32,0x38,0x2e,0x32,0x31,0x32,0x20, - 0x33,0x36,0x2e,0x30,0x36,0x31,0x2c,0x31,0x38,0x2e, - 0x35,0x33,0x31,0x20,0x43,0x33,0x36,0x2e,0x30,0x36, - 0x31,0x2c,0x38,0x2e,0x38,0x34,0x39,0x20,0x32,0x38, - 0x2e,0x32,0x31,0x32,0x2c,0x31,0x20,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x31,0x20,0x7a,0x22,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x3c,0x2f,0x67, - 0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__analog_left_svg.cpp b/data/converted/help__analog_left_svg.cpp deleted file mode 100644 index ec8bd27b18..0000000000 --- a/data/converted/help__analog_left_svg.cpp +++ /dev/null @@ -1,292 +0,0 @@ -// this file was auto-generated from "analog_left.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__analog_left_svg_size = 2834; -const uint8_t help__analog_left_svg_data[2834] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73, - 0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20, - 0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, - 0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31, - 0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, - 0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68, - 0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e, - 0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31, - 0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73, - 0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e, - 0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, - 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c, - 0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c, - 0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64, - 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x2c,0x20, - 0x30,0x2c,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x3e,0x0a, - 0x20,0x20,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x3c,0x67,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, - 0x32,0x32,0x2e,0x31,0x38,0x31,0x20,0x43,0x31,0x36, - 0x2e,0x35,0x31,0x38,0x2c,0x32,0x32,0x2e,0x31,0x38, - 0x31,0x20,0x31,0x34,0x2e,0x38,0x38,0x32,0x2c,0x32, - 0x30,0x2e,0x35,0x34,0x32,0x20,0x31,0x34,0x2e,0x38, - 0x38,0x32,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20,0x43, - 0x31,0x34,0x2e,0x38,0x38,0x32,0x2c,0x31,0x36,0x2e, - 0x35,0x31,0x38,0x20,0x31,0x36,0x2e,0x35,0x32,0x2c, - 0x31,0x34,0x2e,0x38,0x38,0x20,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x31,0x34,0x2e,0x38,0x38,0x20,0x43, - 0x32,0x30,0x2e,0x35,0x34,0x34,0x2c,0x31,0x34,0x2e, - 0x38,0x38,0x20,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, - 0x31,0x36,0x2e,0x35,0x31,0x39,0x20,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20, - 0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32,0x30, - 0x2e,0x35,0x34,0x33,0x20,0x32,0x30,0x2e,0x35,0x34, - 0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x20,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e,0x31, - 0x38,0x31,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x20, - 0x43,0x31,0x37,0x2e,0x33,0x34,0x35,0x2c,0x31,0x36, - 0x2e,0x33,0x37,0x39,0x20,0x31,0x36,0x2e,0x33,0x38, - 0x32,0x2c,0x31,0x37,0x2e,0x33,0x34,0x34,0x20,0x31, - 0x36,0x2e,0x33,0x38,0x32,0x2c,0x31,0x38,0x2e,0x35, - 0x32,0x39,0x20,0x43,0x31,0x36,0x2e,0x33,0x38,0x32, - 0x2c,0x31,0x39,0x2e,0x37,0x31,0x34,0x20,0x31,0x37, - 0x2e,0x33,0x34,0x37,0x2c,0x32,0x30,0x2e,0x36,0x38, - 0x20,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x30, - 0x2e,0x36,0x38,0x20,0x43,0x31,0x39,0x2e,0x37,0x31, - 0x37,0x2c,0x32,0x30,0x2e,0x36,0x38,0x20,0x32,0x30, - 0x2e,0x36,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x31, - 0x34,0x20,0x32,0x30,0x2e,0x36,0x38,0x31,0x2c,0x31, - 0x38,0x2e,0x35,0x32,0x39,0x20,0x43,0x32,0x30,0x2e, - 0x36,0x38,0x32,0x2c,0x31,0x37,0x2e,0x33,0x34,0x34, - 0x20,0x31,0x39,0x2e,0x37,0x31,0x37,0x2c,0x31,0x36, - 0x2e,0x33,0x37,0x39,0x20,0x31,0x38,0x2e,0x35,0x33, - 0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x20,0x7a, - 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33, - 0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x20,0x4c,0x31, - 0x35,0x2e,0x35,0x32,0x34,0x2c,0x38,0x2e,0x36,0x31, - 0x36,0x20,0x43,0x31,0x35,0x2e,0x32,0x35,0x31,0x2c, - 0x38,0x2e,0x36,0x31,0x36,0x20,0x31,0x34,0x2e,0x39, - 0x39,0x39,0x2c,0x38,0x2e,0x34,0x36,0x36,0x20,0x31, - 0x34,0x2e,0x38,0x36,0x37,0x2c,0x38,0x2e,0x32,0x32, - 0x36,0x20,0x43,0x31,0x34,0x2e,0x37,0x33,0x35,0x2c, - 0x37,0x2e,0x39,0x38,0x35,0x20,0x31,0x34,0x2e,0x37, - 0x34,0x36,0x2c,0x37,0x2e,0x36,0x39,0x32,0x20,0x31, - 0x34,0x2e,0x38,0x39,0x33,0x2c,0x37,0x2e,0x34,0x36, - 0x20,0x4c,0x31,0x37,0x2e,0x38,0x39,0x38,0x2c,0x32, - 0x2e,0x37,0x37,0x36,0x20,0x43,0x31,0x38,0x2e,0x31, - 0x37,0x34,0x2c,0x32,0x2e,0x33,0x34,0x35,0x20,0x31, - 0x38,0x2e,0x38,0x38,0x34,0x2c,0x32,0x2e,0x33,0x34, - 0x36,0x20,0x31,0x39,0x2e,0x31,0x36,0x32,0x2c,0x32, - 0x2e,0x37,0x37,0x36,0x20,0x4c,0x32,0x32,0x2e,0x31, - 0x36,0x37,0x2c,0x37,0x2e,0x34,0x36,0x20,0x43,0x32, - 0x32,0x2e,0x33,0x31,0x34,0x2c,0x37,0x2e,0x36,0x39, - 0x31,0x20,0x32,0x32,0x2e,0x33,0x32,0x36,0x2c,0x37, - 0x2e,0x39,0x38,0x34,0x20,0x32,0x32,0x2e,0x31,0x39, - 0x33,0x2c,0x38,0x2e,0x32,0x32,0x36,0x20,0x43,0x32, - 0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36, - 0x36,0x20,0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38, - 0x2e,0x36,0x31,0x36,0x20,0x32,0x31,0x2e,0x35,0x33, - 0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x20,0x7a,0x20, - 0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e, - 0x31,0x31,0x36,0x20,0x4c,0x32,0x30,0x2e,0x31,0x36, - 0x35,0x2c,0x37,0x2e,0x31,0x31,0x36,0x20,0x4c,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35,0x37,0x31, - 0x20,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, - 0x2e,0x31,0x31,0x36,0x20,0x7a,0x22,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x33,0x2e,0x31,0x32,0x35,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x20,0x4c,0x37,0x2e,0x38,0x30, - 0x39,0x2c,0x32,0x31,0x2e,0x35,0x33,0x34,0x20,0x4c, - 0x37,0x2e,0x38,0x30,0x39,0x2c,0x31,0x35,0x2e,0x35, - 0x32,0x34,0x20,0x4c,0x33,0x2e,0x31,0x32,0x35,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x20,0x7a,0x22,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x64,0x3d,0x22,0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c, - 0x32,0x32,0x2e,0x32,0x38,0x34,0x20,0x43,0x37,0x2e, - 0x36,0x36,0x38,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x20,0x37,0x2e,0x35,0x32,0x37,0x2c,0x32,0x32,0x2e, - 0x32,0x34,0x34,0x20,0x37,0x2e,0x34,0x30,0x34,0x2c, - 0x32,0x32,0x2e,0x31,0x36,0x35,0x20,0x4c,0x32,0x2e, - 0x37,0x32,0x2c,0x31,0x39,0x2e,0x31,0x36,0x32,0x20, - 0x43,0x32,0x2e,0x35,0x30,0x35,0x2c,0x31,0x39,0x2e, - 0x30,0x32,0x34,0x20,0x32,0x2e,0x33,0x37,0x35,0x2c, - 0x31,0x38,0x2e,0x37,0x38,0x36,0x20,0x32,0x2e,0x33, - 0x37,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20, - 0x43,0x32,0x2e,0x33,0x37,0x35,0x2c,0x31,0x38,0x2e, - 0x32,0x37,0x36,0x20,0x32,0x2e,0x35,0x30,0x35,0x2c, - 0x31,0x38,0x2e,0x30,0x33,0x38,0x20,0x32,0x2e,0x37, - 0x32,0x2c,0x31,0x37,0x2e,0x39,0x20,0x4c,0x37,0x2e, - 0x34,0x30,0x34,0x2c,0x31,0x34,0x2e,0x38,0x39,0x34, - 0x20,0x43,0x37,0x2e,0x36,0x33,0x34,0x2c,0x31,0x34, - 0x2e,0x37,0x34,0x36,0x20,0x37,0x2e,0x39,0x32,0x38, - 0x2c,0x31,0x34,0x2e,0x37,0x33,0x36,0x20,0x38,0x2e, - 0x31,0x37,0x2c,0x31,0x34,0x2e,0x38,0x36,0x37,0x20, - 0x43,0x38,0x2e,0x34,0x31,0x2c,0x31,0x34,0x2e,0x39, - 0x39,0x38,0x20,0x38,0x2e,0x35,0x36,0x2c,0x31,0x35, - 0x2e,0x32,0x35,0x31,0x20,0x38,0x2e,0x35,0x36,0x2c, - 0x31,0x35,0x2e,0x35,0x32,0x35,0x20,0x4c,0x38,0x2e, - 0x35,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x35,0x20, - 0x43,0x38,0x2e,0x35,0x36,0x2c,0x32,0x31,0x2e,0x38, - 0x30,0x39,0x20,0x38,0x2e,0x34,0x31,0x32,0x2c,0x32, - 0x32,0x2e,0x30,0x36,0x31,0x20,0x38,0x2e,0x31,0x37, - 0x2c,0x32,0x32,0x2e,0x31,0x39,0x33,0x20,0x43,0x38, - 0x2e,0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x35, - 0x34,0x20,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x34,0x20,0x37,0x2e,0x38,0x30,0x39, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x20,0x7a,0x20, - 0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e, - 0x35,0x33,0x20,0x4c,0x37,0x2e,0x30,0x35,0x39,0x2c, - 0x32,0x30,0x2e,0x31,0x36,0x32,0x20,0x4c,0x37,0x2e, - 0x30,0x35,0x39,0x2c,0x31,0x36,0x2e,0x38,0x39,0x37, - 0x20,0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x2f,0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, - 0x4d,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x34,0x20,0x43,0x32,0x39,0x2e,0x30, - 0x37,0x31,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x20, - 0x32,0x38,0x2e,0x39,0x34,0x39,0x2c,0x32,0x32,0x2e, - 0x32,0x35,0x34,0x20,0x32,0x38,0x2e,0x38,0x33,0x37, - 0x2c,0x32,0x32,0x2e,0x31,0x39,0x32,0x20,0x43,0x32, - 0x38,0x2e,0x35,0x39,0x36,0x2c,0x32,0x32,0x2e,0x30, - 0x36,0x20,0x32,0x38,0x2e,0x34,0x34,0x35,0x2c,0x32, - 0x31,0x2e,0x38,0x30,0x38,0x20,0x32,0x38,0x2e,0x34, - 0x34,0x35,0x2c,0x32,0x31,0x2e,0x35,0x33,0x34,0x20, - 0x4c,0x32,0x38,0x2e,0x34,0x34,0x35,0x2c,0x31,0x35, - 0x2e,0x35,0x32,0x34,0x20,0x43,0x32,0x38,0x2e,0x34, - 0x34,0x35,0x2c,0x31,0x35,0x2e,0x32,0x35,0x20,0x32, - 0x38,0x2e,0x35,0x39,0x34,0x2c,0x31,0x34,0x2e,0x39, - 0x39,0x38,0x20,0x32,0x38,0x2e,0x38,0x33,0x37,0x2c, - 0x31,0x34,0x2e,0x38,0x36,0x36,0x20,0x43,0x32,0x39, - 0x2e,0x30,0x37,0x36,0x2c,0x31,0x34,0x2e,0x37,0x33, - 0x35,0x20,0x32,0x39,0x2e,0x33,0x37,0x2c,0x31,0x34, - 0x2e,0x37,0x34,0x33,0x20,0x32,0x39,0x2e,0x36,0x30, - 0x32,0x2c,0x31,0x34,0x2e,0x38,0x39,0x33,0x20,0x4c, - 0x33,0x34,0x2e,0x32,0x38,0x37,0x2c,0x31,0x37,0x2e, - 0x38,0x39,0x38,0x20,0x43,0x33,0x34,0x2e,0x35,0x30, - 0x32,0x2c,0x31,0x38,0x2e,0x30,0x33,0x36,0x20,0x33, - 0x34,0x2e,0x36,0x33,0x32,0x2c,0x31,0x38,0x2e,0x32, - 0x37,0x34,0x20,0x33,0x34,0x2e,0x36,0x33,0x32,0x2c, - 0x31,0x38,0x2e,0x35,0x32,0x39,0x20,0x43,0x33,0x34, - 0x2e,0x36,0x33,0x32,0x2c,0x31,0x38,0x2e,0x37,0x38, - 0x34,0x20,0x33,0x34,0x2e,0x35,0x30,0x32,0x2c,0x31, - 0x39,0x2e,0x30,0x32,0x32,0x20,0x33,0x34,0x2e,0x32, - 0x38,0x37,0x2c,0x31,0x39,0x2e,0x31,0x36,0x20,0x4c, - 0x32,0x39,0x2e,0x36,0x30,0x32,0x2c,0x32,0x32,0x2e, - 0x31,0x36,0x34,0x20,0x43,0x32,0x39,0x2e,0x34,0x37, - 0x38,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x20,0x32, - 0x39,0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x34,0x20,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c, - 0x32,0x32,0x2e,0x32,0x38,0x34,0x20,0x7a,0x20,0x4d, - 0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e, - 0x38,0x39,0x36,0x20,0x4c,0x32,0x39,0x2e,0x39,0x34, - 0x35,0x2c,0x32,0x30,0x2e,0x31,0x36,0x32,0x20,0x4c, - 0x33,0x32,0x2e,0x34,0x39,0x31,0x2c,0x31,0x38,0x2e, - 0x35,0x32,0x39,0x20,0x4c,0x32,0x39,0x2e,0x39,0x34, - 0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x20,0x7a, - 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x20,0x4c,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, - 0x36,0x20,0x43,0x31,0x38,0x2e,0x32,0x37,0x35,0x2c, - 0x33,0x34,0x2e,0x36,0x32,0x36,0x20,0x31,0x38,0x2e, - 0x30,0x33,0x38,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36, - 0x20,0x31,0x37,0x2e,0x38,0x39,0x39,0x2c,0x33,0x34, - 0x2e,0x32,0x38,0x31,0x20,0x4c,0x31,0x34,0x2e,0x38, - 0x39,0x34,0x2c,0x32,0x39,0x2e,0x35,0x39,0x37,0x20, - 0x43,0x31,0x34,0x2e,0x37,0x34,0x37,0x2c,0x32,0x39, - 0x2e,0x33,0x36,0x36,0x20,0x31,0x34,0x2e,0x37,0x33, - 0x36,0x2c,0x32,0x39,0x2e,0x30,0x37,0x33,0x20,0x31, - 0x34,0x2e,0x38,0x36,0x38,0x2c,0x32,0x38,0x2e,0x38, - 0x33,0x31,0x20,0x43,0x31,0x35,0x2c,0x32,0x38,0x2e, - 0x35,0x38,0x39,0x20,0x31,0x35,0x2e,0x32,0x35,0x32, - 0x2c,0x32,0x38,0x2e,0x34,0x34,0x20,0x31,0x35,0x2e, - 0x35,0x32,0x35,0x2c,0x32,0x38,0x2e,0x34,0x34,0x20, - 0x4c,0x32,0x31,0x2e,0x35,0x33,0x37,0x2c,0x32,0x38, - 0x2e,0x34,0x34,0x20,0x43,0x32,0x31,0x2e,0x38,0x31, - 0x2c,0x32,0x38,0x2e,0x34,0x34,0x20,0x32,0x32,0x2e, - 0x30,0x36,0x32,0x2c,0x32,0x38,0x2e,0x35,0x38,0x38, - 0x20,0x32,0x32,0x2e,0x31,0x39,0x34,0x2c,0x32,0x38, - 0x2e,0x38,0x33,0x31,0x20,0x43,0x32,0x32,0x2e,0x33, - 0x32,0x37,0x2c,0x32,0x39,0x2e,0x30,0x37,0x31,0x20, - 0x32,0x32,0x2e,0x33,0x31,0x35,0x2c,0x32,0x39,0x2e, - 0x33,0x36,0x34,0x20,0x32,0x32,0x2e,0x31,0x36,0x38, - 0x2c,0x32,0x39,0x2e,0x35,0x39,0x37,0x20,0x4c,0x31, - 0x39,0x2e,0x31,0x36,0x33,0x2c,0x33,0x34,0x2e,0x32, - 0x38,0x31,0x20,0x43,0x31,0x39,0x2e,0x30,0x32,0x33, - 0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x20,0x31,0x38, - 0x2e,0x37,0x38,0x36,0x2c,0x33,0x34,0x2e,0x36,0x32, - 0x36,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34, - 0x2e,0x36,0x32,0x36,0x20,0x7a,0x20,0x4d,0x31,0x36, - 0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34, - 0x32,0x20,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, - 0x32,0x2e,0x34,0x38,0x37,0x20,0x4c,0x32,0x30,0x2e, - 0x31,0x36,0x35,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32, - 0x20,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x32, - 0x39,0x2e,0x39,0x34,0x32,0x20,0x7a,0x22,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x3c,0x2f,0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x30,0x20,0x43,0x32,0x38, - 0x2e,0x37,0x36,0x35,0x2c,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x2c,0x38,0x2e,0x32,0x39,0x36,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x31,0x38,0x2e, - 0x35,0x33,0x31,0x20,0x43,0x33,0x37,0x2e,0x30,0x36, - 0x31,0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x32, - 0x38,0x2e,0x37,0x36,0x35,0x2c,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x43,0x38,0x2e,0x32, - 0x39,0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x30,0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x30, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x30, - 0x2c,0x38,0x2e,0x32,0x39,0x36,0x20,0x38,0x2e,0x32, - 0x39,0x36,0x2c,0x30,0x20,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x30,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x2c,0x31,0x20,0x43,0x38,0x2e,0x38,0x34,0x39, - 0x2c,0x31,0x20,0x31,0x2c,0x38,0x2e,0x38,0x34,0x39, - 0x20,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20, - 0x43,0x31,0x2c,0x32,0x38,0x2e,0x32,0x31,0x32,0x20, - 0x38,0x2e,0x38,0x34,0x39,0x2c,0x33,0x36,0x2e,0x30, - 0x36,0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, - 0x36,0x2e,0x30,0x36,0x31,0x20,0x43,0x32,0x38,0x2e, - 0x32,0x31,0x32,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31, - 0x20,0x33,0x36,0x2e,0x30,0x36,0x31,0x2c,0x32,0x38, - 0x2e,0x32,0x31,0x32,0x20,0x33,0x36,0x2e,0x30,0x36, - 0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43, - 0x33,0x36,0x2e,0x30,0x36,0x31,0x2c,0x38,0x2e,0x38, - 0x34,0x39,0x20,0x32,0x38,0x2e,0x32,0x31,0x32,0x2c, - 0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x31,0x20, - 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, - 0x20,0x20,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73, - 0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__analog_right_svg.cpp b/data/converted/help__analog_right_svg.cpp deleted file mode 100644 index 4a4dbe2223..0000000000 --- a/data/converted/help__analog_right_svg.cpp +++ /dev/null @@ -1,290 +0,0 @@ -// this file was auto-generated from "analog_right.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__analog_right_svg_size = 2813; -const uint8_t help__analog_right_svg_data[2813] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73, - 0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20, - 0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, - 0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31, - 0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, - 0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68, - 0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e, - 0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31, - 0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73, - 0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e, - 0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, - 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c, - 0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c, - 0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64, - 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x2c,0x20, - 0x30,0x2c,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x3e,0x0a, - 0x20,0x20,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x34,0x37,0x36,0x2c, - 0x31,0x34,0x2e,0x38,0x39,0x38,0x20,0x43,0x32,0x30, - 0x2e,0x34,0x38,0x39,0x2c,0x31,0x34,0x2e,0x38,0x39, - 0x38,0x20,0x32,0x32,0x2e,0x31,0x32,0x35,0x2c,0x31, - 0x36,0x2e,0x35,0x33,0x37,0x20,0x32,0x32,0x2e,0x31, - 0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x34,0x39,0x20, - 0x43,0x32,0x32,0x2e,0x31,0x32,0x35,0x2c,0x32,0x30, - 0x2e,0x35,0x36,0x31,0x20,0x32,0x30,0x2e,0x34,0x38, - 0x37,0x2c,0x32,0x32,0x2e,0x31,0x39,0x39,0x20,0x31, - 0x38,0x2e,0x34,0x37,0x36,0x2c,0x32,0x32,0x2e,0x31, - 0x39,0x39,0x20,0x43,0x31,0x36,0x2e,0x34,0x36,0x33, - 0x2c,0x32,0x32,0x2e,0x31,0x39,0x39,0x20,0x31,0x34, - 0x2e,0x38,0x32,0x36,0x2c,0x32,0x30,0x2e,0x35,0x36, - 0x20,0x31,0x34,0x2e,0x38,0x32,0x36,0x2c,0x31,0x38, - 0x2e,0x35,0x34,0x39,0x20,0x43,0x31,0x34,0x2e,0x38, - 0x32,0x35,0x2c,0x31,0x36,0x2e,0x35,0x33,0x36,0x20, - 0x31,0x36,0x2e,0x34,0x36,0x33,0x2c,0x31,0x34,0x2e, - 0x38,0x39,0x38,0x20,0x31,0x38,0x2e,0x34,0x37,0x36, - 0x2c,0x31,0x34,0x2e,0x38,0x39,0x38,0x20,0x7a,0x20, - 0x4d,0x31,0x38,0x2e,0x34,0x37,0x36,0x2c,0x32,0x30, - 0x2e,0x37,0x20,0x43,0x31,0x39,0x2e,0x36,0x36,0x32, - 0x2c,0x32,0x30,0x2e,0x37,0x20,0x32,0x30,0x2e,0x36, - 0x32,0x35,0x2c,0x31,0x39,0x2e,0x37,0x33,0x35,0x20, - 0x32,0x30,0x2e,0x36,0x32,0x35,0x2c,0x31,0x38,0x2e, - 0x35,0x35,0x20,0x43,0x32,0x30,0x2e,0x36,0x32,0x35, - 0x2c,0x31,0x37,0x2e,0x33,0x36,0x35,0x20,0x31,0x39, - 0x2e,0x36,0x36,0x2c,0x31,0x36,0x2e,0x33,0x39,0x39, - 0x20,0x31,0x38,0x2e,0x34,0x37,0x36,0x2c,0x31,0x36, - 0x2e,0x33,0x39,0x39,0x20,0x43,0x31,0x37,0x2e,0x32, - 0x39,0x2c,0x31,0x36,0x2e,0x33,0x39,0x39,0x20,0x31, - 0x36,0x2e,0x33,0x32,0x36,0x2c,0x31,0x37,0x2e,0x33, - 0x36,0x35,0x20,0x31,0x36,0x2e,0x33,0x32,0x36,0x2c, - 0x31,0x38,0x2e,0x35,0x35,0x20,0x43,0x31,0x36,0x2e, - 0x33,0x32,0x35,0x2c,0x31,0x39,0x2e,0x37,0x33,0x35, - 0x20,0x31,0x37,0x2e,0x32,0x39,0x2c,0x32,0x30,0x2e, - 0x37,0x20,0x31,0x38,0x2e,0x34,0x37,0x36,0x2c,0x32, - 0x30,0x2e,0x37,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x35, - 0x2e,0x34,0x37,0x31,0x2c,0x32,0x38,0x2e,0x34,0x36, - 0x33,0x20,0x4c,0x32,0x31,0x2e,0x34,0x38,0x33,0x2c, - 0x32,0x38,0x2e,0x34,0x36,0x33,0x20,0x43,0x32,0x31, - 0x2e,0x37,0x35,0x36,0x2c,0x32,0x38,0x2e,0x34,0x36, - 0x33,0x20,0x32,0x32,0x2e,0x30,0x30,0x38,0x2c,0x32, - 0x38,0x2e,0x36,0x31,0x33,0x20,0x32,0x32,0x2e,0x31, - 0x34,0x2c,0x32,0x38,0x2e,0x38,0x35,0x33,0x20,0x43, - 0x32,0x32,0x2e,0x32,0x37,0x32,0x2c,0x32,0x39,0x2e, - 0x30,0x39,0x34,0x20,0x32,0x32,0x2e,0x32,0x36,0x31, - 0x2c,0x32,0x39,0x2e,0x33,0x38,0x37,0x20,0x32,0x32, - 0x2e,0x31,0x31,0x34,0x2c,0x32,0x39,0x2e,0x36,0x31, - 0x39,0x20,0x4c,0x31,0x39,0x2e,0x31,0x30,0x39,0x2c, - 0x33,0x34,0x2e,0x33,0x30,0x33,0x20,0x43,0x31,0x38, - 0x2e,0x38,0x33,0x33,0x2c,0x33,0x34,0x2e,0x37,0x33, - 0x34,0x20,0x31,0x38,0x2e,0x31,0x32,0x33,0x2c,0x33, - 0x34,0x2e,0x37,0x33,0x33,0x20,0x31,0x37,0x2e,0x38, - 0x34,0x35,0x2c,0x33,0x34,0x2e,0x33,0x30,0x33,0x20, - 0x4c,0x31,0x34,0x2e,0x38,0x34,0x2c,0x32,0x39,0x2e, - 0x36,0x31,0x39,0x20,0x43,0x31,0x34,0x2e,0x36,0x39, - 0x33,0x2c,0x32,0x39,0x2e,0x33,0x38,0x38,0x20,0x31, - 0x34,0x2e,0x36,0x38,0x31,0x2c,0x32,0x39,0x2e,0x30, - 0x39,0x35,0x20,0x31,0x34,0x2e,0x38,0x31,0x34,0x2c, - 0x32,0x38,0x2e,0x38,0x35,0x33,0x20,0x43,0x31,0x34, - 0x2e,0x39,0x34,0x34,0x2c,0x32,0x38,0x2e,0x36,0x31, - 0x33,0x20,0x31,0x35,0x2e,0x31,0x39,0x36,0x2c,0x32, - 0x38,0x2e,0x34,0x36,0x33,0x20,0x31,0x35,0x2e,0x34, - 0x37,0x31,0x2c,0x32,0x38,0x2e,0x34,0x36,0x33,0x20, - 0x7a,0x20,0x4d,0x32,0x30,0x2e,0x31,0x31,0x2c,0x32, - 0x39,0x2e,0x39,0x36,0x33,0x20,0x4c,0x31,0x36,0x2e, - 0x38,0x34,0x32,0x2c,0x32,0x39,0x2e,0x39,0x36,0x33, - 0x20,0x4c,0x31,0x38,0x2e,0x34,0x37,0x37,0x2c,0x33, - 0x32,0x2e,0x35,0x30,0x38,0x20,0x4c,0x32,0x30,0x2e, - 0x31,0x31,0x2c,0x32,0x39,0x2e,0x39,0x36,0x33,0x20, - 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x3c,0x67,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e,0x38,0x38,0x32, - 0x2c,0x31,0x38,0x2e,0x35,0x34,0x39,0x20,0x4c,0x32, - 0x39,0x2e,0x31,0x39,0x38,0x2c,0x31,0x35,0x2e,0x35, - 0x34,0x35,0x20,0x4c,0x32,0x39,0x2e,0x31,0x39,0x38, - 0x2c,0x32,0x31,0x2e,0x35,0x35,0x35,0x20,0x4c,0x33, - 0x33,0x2e,0x38,0x38,0x32,0x2c,0x31,0x38,0x2e,0x35, - 0x34,0x39,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x39,0x2e,0x31,0x39,0x38,0x2c,0x31,0x34,0x2e,0x37, - 0x39,0x35,0x20,0x43,0x32,0x39,0x2e,0x33,0x33,0x39, - 0x2c,0x31,0x34,0x2e,0x37,0x39,0x35,0x20,0x32,0x39, - 0x2e,0x34,0x38,0x2c,0x31,0x34,0x2e,0x38,0x33,0x35, - 0x20,0x32,0x39,0x2e,0x36,0x30,0x33,0x2c,0x31,0x34, - 0x2e,0x39,0x31,0x34,0x20,0x4c,0x33,0x34,0x2e,0x32, - 0x38,0x37,0x2c,0x31,0x37,0x2e,0x39,0x31,0x37,0x20, - 0x43,0x33,0x34,0x2e,0x35,0x30,0x32,0x2c,0x31,0x38, - 0x2e,0x30,0x35,0x35,0x20,0x33,0x34,0x2e,0x36,0x33, - 0x32,0x2c,0x31,0x38,0x2e,0x32,0x39,0x33,0x20,0x33, - 0x34,0x2e,0x36,0x33,0x32,0x2c,0x31,0x38,0x2e,0x35, - 0x34,0x38,0x20,0x43,0x33,0x34,0x2e,0x36,0x33,0x32, - 0x2c,0x31,0x38,0x2e,0x38,0x30,0x33,0x20,0x33,0x34, - 0x2e,0x35,0x30,0x32,0x2c,0x31,0x39,0x2e,0x30,0x34, - 0x31,0x20,0x33,0x34,0x2e,0x32,0x38,0x37,0x2c,0x31, - 0x39,0x2e,0x31,0x37,0x39,0x20,0x4c,0x32,0x39,0x2e, - 0x36,0x30,0x33,0x2c,0x32,0x32,0x2e,0x31,0x38,0x35, - 0x20,0x43,0x32,0x39,0x2e,0x33,0x37,0x33,0x2c,0x32, - 0x32,0x2e,0x33,0x33,0x33,0x20,0x32,0x39,0x2e,0x30, - 0x37,0x39,0x2c,0x32,0x32,0x2e,0x33,0x34,0x33,0x20, - 0x32,0x38,0x2e,0x38,0x33,0x37,0x2c,0x32,0x32,0x2e, - 0x32,0x31,0x32,0x20,0x43,0x32,0x38,0x2e,0x35,0x39, - 0x37,0x2c,0x32,0x32,0x2e,0x30,0x38,0x31,0x20,0x32, - 0x38,0x2e,0x34,0x34,0x37,0x2c,0x32,0x31,0x2e,0x38, - 0x32,0x38,0x20,0x32,0x38,0x2e,0x34,0x34,0x37,0x2c, - 0x32,0x31,0x2e,0x35,0x35,0x34,0x20,0x4c,0x32,0x38, - 0x2e,0x34,0x34,0x37,0x2c,0x31,0x35,0x2e,0x35,0x34, - 0x34,0x20,0x43,0x32,0x38,0x2e,0x34,0x34,0x37,0x2c, - 0x31,0x35,0x2e,0x32,0x37,0x20,0x32,0x38,0x2e,0x35, - 0x39,0x35,0x2c,0x31,0x35,0x2e,0x30,0x31,0x38,0x20, - 0x32,0x38,0x2e,0x38,0x33,0x37,0x2c,0x31,0x34,0x2e, - 0x38,0x38,0x36,0x20,0x43,0x32,0x38,0x2e,0x39,0x35, - 0x31,0x2c,0x31,0x34,0x2e,0x38,0x32,0x35,0x20,0x32, - 0x39,0x2e,0x30,0x37,0x35,0x2c,0x31,0x34,0x2e,0x37, - 0x39,0x35,0x20,0x32,0x39,0x2e,0x31,0x39,0x38,0x2c, - 0x31,0x34,0x2e,0x37,0x39,0x35,0x20,0x7a,0x20,0x4d, - 0x33,0x32,0x2e,0x34,0x39,0x33,0x2c,0x31,0x38,0x2e, - 0x35,0x34,0x39,0x20,0x4c,0x32,0x39,0x2e,0x39,0x34, - 0x38,0x2c,0x31,0x36,0x2e,0x39,0x31,0x37,0x20,0x4c, - 0x32,0x39,0x2e,0x39,0x34,0x38,0x2c,0x32,0x30,0x2e, - 0x31,0x38,0x32,0x20,0x4c,0x33,0x32,0x2e,0x34,0x39, - 0x33,0x2c,0x31,0x38,0x2e,0x35,0x34,0x39,0x20,0x7a, - 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x3c,0x2f,0x67,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d, - 0x22,0x4d,0x37,0x2e,0x38,0x31,0x32,0x2c,0x31,0x34, - 0x2e,0x37,0x39,0x35,0x20,0x43,0x37,0x2e,0x39,0x33, - 0x36,0x2c,0x31,0x34,0x2e,0x37,0x39,0x35,0x20,0x38, - 0x2e,0x30,0x35,0x38,0x2c,0x31,0x34,0x2e,0x38,0x32, - 0x35,0x20,0x38,0x2e,0x31,0x37,0x2c,0x31,0x34,0x2e, - 0x38,0x38,0x37,0x20,0x43,0x38,0x2e,0x34,0x31,0x31, - 0x2c,0x31,0x35,0x2e,0x30,0x31,0x39,0x20,0x38,0x2e, - 0x35,0x36,0x32,0x2c,0x31,0x35,0x2e,0x32,0x37,0x31, - 0x20,0x38,0x2e,0x35,0x36,0x32,0x2c,0x31,0x35,0x2e, - 0x35,0x34,0x35,0x20,0x4c,0x38,0x2e,0x35,0x36,0x32, - 0x2c,0x32,0x31,0x2e,0x35,0x35,0x35,0x20,0x43,0x38, - 0x2e,0x35,0x36,0x32,0x2c,0x32,0x31,0x2e,0x38,0x32, - 0x39,0x20,0x38,0x2e,0x34,0x31,0x33,0x2c,0x32,0x32, - 0x2e,0x30,0x38,0x31,0x20,0x38,0x2e,0x31,0x37,0x2c, - 0x32,0x32,0x2e,0x32,0x31,0x33,0x20,0x43,0x37,0x2e, - 0x39,0x33,0x31,0x2c,0x32,0x32,0x2e,0x33,0x34,0x34, - 0x20,0x37,0x2e,0x36,0x33,0x37,0x2c,0x32,0x32,0x2e, - 0x33,0x33,0x36,0x20,0x37,0x2e,0x34,0x30,0x35,0x2c, - 0x32,0x32,0x2e,0x31,0x38,0x36,0x20,0x4c,0x32,0x2e, - 0x37,0x32,0x2c,0x31,0x39,0x2e,0x31,0x38,0x31,0x20, - 0x43,0x32,0x2e,0x35,0x30,0x35,0x2c,0x31,0x39,0x2e, - 0x30,0x34,0x33,0x20,0x32,0x2e,0x33,0x37,0x35,0x2c, - 0x31,0x38,0x2e,0x38,0x30,0x35,0x20,0x32,0x2e,0x33, - 0x37,0x35,0x2c,0x31,0x38,0x2e,0x35,0x35,0x20,0x43, - 0x32,0x2e,0x33,0x37,0x35,0x2c,0x31,0x38,0x2e,0x32, - 0x39,0x35,0x20,0x32,0x2e,0x35,0x30,0x35,0x2c,0x31, - 0x38,0x2e,0x30,0x35,0x37,0x20,0x32,0x2e,0x37,0x32, - 0x2c,0x31,0x37,0x2e,0x39,0x31,0x39,0x20,0x4c,0x37, - 0x2e,0x34,0x30,0x35,0x2c,0x31,0x34,0x2e,0x39,0x31, - 0x35,0x20,0x43,0x37,0x2e,0x35,0x32,0x39,0x2c,0x31, - 0x34,0x2e,0x38,0x33,0x35,0x20,0x37,0x2e,0x36,0x37, - 0x31,0x2c,0x31,0x34,0x2e,0x37,0x39,0x35,0x20,0x37, - 0x2e,0x38,0x31,0x32,0x2c,0x31,0x34,0x2e,0x37,0x39, - 0x35,0x20,0x7a,0x20,0x4d,0x37,0x2e,0x30,0x36,0x32, - 0x2c,0x32,0x30,0x2e,0x31,0x38,0x33,0x20,0x4c,0x37, - 0x2e,0x30,0x36,0x32,0x2c,0x31,0x36,0x2e,0x39,0x31, - 0x37,0x20,0x4c,0x34,0x2e,0x35,0x31,0x36,0x2c,0x31, - 0x38,0x2e,0x35,0x35,0x20,0x4c,0x37,0x2e,0x30,0x36, - 0x32,0x2c,0x32,0x30,0x2e,0x31,0x38,0x33,0x20,0x7a, - 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x34,0x37,0x37,0x2c, - 0x32,0x2e,0x34,0x35,0x33,0x20,0x4c,0x31,0x38,0x2e, - 0x34,0x37,0x37,0x2c,0x32,0x2e,0x34,0x35,0x33,0x20, - 0x43,0x31,0x38,0x2e,0x37,0x33,0x32,0x2c,0x32,0x2e, - 0x34,0x35,0x33,0x20,0x31,0x38,0x2e,0x39,0x36,0x39, - 0x2c,0x32,0x2e,0x35,0x38,0x33,0x20,0x31,0x39,0x2e, - 0x31,0x30,0x38,0x2c,0x32,0x2e,0x37,0x39,0x38,0x20, - 0x4c,0x32,0x32,0x2e,0x31,0x31,0x33,0x2c,0x37,0x2e, - 0x34,0x38,0x32,0x20,0x43,0x32,0x32,0x2e,0x32,0x36, - 0x2c,0x37,0x2e,0x37,0x31,0x33,0x20,0x32,0x32,0x2e, - 0x32,0x37,0x31,0x2c,0x38,0x2e,0x30,0x30,0x36,0x20, - 0x32,0x32,0x2e,0x31,0x33,0x39,0x2c,0x38,0x2e,0x32, - 0x34,0x38,0x20,0x43,0x32,0x32,0x2e,0x30,0x30,0x37, - 0x2c,0x38,0x2e,0x34,0x39,0x20,0x32,0x31,0x2e,0x37, - 0x35,0x35,0x2c,0x38,0x2e,0x36,0x33,0x39,0x20,0x32, - 0x31,0x2e,0x34,0x38,0x32,0x2c,0x38,0x2e,0x36,0x33, - 0x39,0x20,0x4c,0x31,0x35,0x2e,0x34,0x37,0x2c,0x38, - 0x2e,0x36,0x33,0x39,0x20,0x43,0x31,0x35,0x2e,0x31, - 0x39,0x37,0x2c,0x38,0x2e,0x36,0x33,0x39,0x20,0x31, - 0x34,0x2e,0x39,0x34,0x35,0x2c,0x38,0x2e,0x34,0x39, - 0x31,0x20,0x31,0x34,0x2e,0x38,0x31,0x33,0x2c,0x38, - 0x2e,0x32,0x34,0x38,0x20,0x43,0x31,0x34,0x2e,0x36, - 0x38,0x2c,0x38,0x2e,0x30,0x30,0x38,0x20,0x31,0x34, - 0x2e,0x36,0x39,0x32,0x2c,0x37,0x2e,0x37,0x31,0x35, - 0x20,0x31,0x34,0x2e,0x38,0x33,0x39,0x2c,0x37,0x2e, - 0x34,0x38,0x32,0x20,0x4c,0x31,0x37,0x2e,0x38,0x34, - 0x34,0x2c,0x32,0x2e,0x37,0x39,0x38,0x20,0x43,0x31, - 0x37,0x2e,0x39,0x38,0x34,0x2c,0x32,0x2e,0x35,0x38, - 0x33,0x20,0x31,0x38,0x2e,0x32,0x32,0x31,0x2c,0x32, - 0x2e,0x34,0x35,0x33,0x20,0x31,0x38,0x2e,0x34,0x37, - 0x37,0x2c,0x32,0x2e,0x34,0x35,0x33,0x20,0x7a,0x20, - 0x4d,0x32,0x30,0x2e,0x31,0x31,0x2c,0x37,0x2e,0x31, - 0x33,0x37,0x20,0x4c,0x31,0x38,0x2e,0x34,0x37,0x37, - 0x2c,0x34,0x2e,0x35,0x39,0x32,0x20,0x4c,0x31,0x36, - 0x2e,0x38,0x34,0x32,0x2c,0x37,0x2e,0x31,0x33,0x37, - 0x20,0x4c,0x32,0x30,0x2e,0x31,0x31,0x2c,0x37,0x2e, - 0x31,0x33,0x37,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x30,0x20,0x43,0x32,0x38,0x2e, - 0x37,0x36,0x35,0x2c,0x30,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x2c,0x38,0x2e,0x32,0x39,0x36,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x2c,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x20,0x43,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x32,0x38, - 0x2e,0x37,0x36,0x35,0x2c,0x33,0x37,0x2e,0x30,0x36, - 0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x20,0x43,0x38,0x2e,0x32,0x39, - 0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x30, - 0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x30,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x30,0x2c, - 0x38,0x2e,0x32,0x39,0x36,0x20,0x38,0x2e,0x32,0x39, - 0x36,0x2c,0x30,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x30,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x31,0x20,0x43,0x38,0x2e,0x38,0x34,0x39,0x2c, - 0x31,0x20,0x31,0x2c,0x38,0x2e,0x38,0x34,0x39,0x20, - 0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43, - 0x31,0x2c,0x32,0x38,0x2e,0x32,0x31,0x32,0x20,0x38, - 0x2e,0x38,0x34,0x39,0x2c,0x33,0x36,0x2e,0x30,0x36, - 0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x36, - 0x2e,0x30,0x36,0x31,0x20,0x43,0x32,0x38,0x2e,0x32, - 0x31,0x32,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x36,0x2e,0x30,0x36,0x31,0x2c,0x32,0x38,0x2e, - 0x32,0x31,0x32,0x20,0x33,0x36,0x2e,0x30,0x36,0x31, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x33, - 0x36,0x2e,0x30,0x36,0x31,0x2c,0x38,0x2e,0x38,0x34, - 0x39,0x20,0x32,0x38,0x2e,0x32,0x31,0x32,0x2c,0x31, - 0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x31,0x20,0x7a, - 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, - 0x20,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76, - 0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__analog_thumb_svg.cpp b/data/converted/help__analog_thumb_svg.cpp deleted file mode 100644 index ca41d87b9a..0000000000 --- a/data/converted/help__analog_thumb_svg.cpp +++ /dev/null @@ -1,298 +0,0 @@ -// this file was auto-generated from "analog_thumb.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__analog_thumb_svg_size = 2894; -const uint8_t help__analog_thumb_svg_data[2894] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73, - 0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20, - 0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, - 0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31, - 0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, - 0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68, - 0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e, - 0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31, - 0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73, - 0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e, - 0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, - 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c, - 0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c, - 0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64, - 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x2c,0x20, - 0x30,0x2c,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x3e,0x0a, - 0x20,0x20,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, - 0x32,0x32,0x2e,0x31,0x38,0x31,0x20,0x43,0x31,0x36, - 0x2e,0x35,0x31,0x38,0x2c,0x32,0x32,0x2e,0x31,0x38, - 0x31,0x20,0x31,0x34,0x2e,0x38,0x38,0x32,0x2c,0x32, - 0x30,0x2e,0x35,0x34,0x32,0x20,0x31,0x34,0x2e,0x38, - 0x38,0x32,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20,0x43, - 0x31,0x34,0x2e,0x38,0x38,0x32,0x2c,0x31,0x36,0x2e, - 0x35,0x31,0x38,0x20,0x31,0x36,0x2e,0x35,0x32,0x2c, - 0x31,0x34,0x2e,0x38,0x38,0x20,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x31,0x34,0x2e,0x38,0x38,0x20,0x43, - 0x32,0x30,0x2e,0x35,0x34,0x34,0x2c,0x31,0x34,0x2e, - 0x38,0x38,0x20,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, - 0x31,0x36,0x2e,0x35,0x31,0x39,0x20,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20, - 0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32,0x30, - 0x2e,0x35,0x34,0x33,0x20,0x32,0x30,0x2e,0x35,0x34, - 0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x20,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e,0x31, - 0x38,0x31,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x20, - 0x43,0x31,0x37,0x2e,0x33,0x34,0x35,0x2c,0x31,0x36, - 0x2e,0x33,0x37,0x39,0x20,0x31,0x36,0x2e,0x33,0x38, - 0x32,0x2c,0x31,0x37,0x2e,0x33,0x34,0x34,0x20,0x31, - 0x36,0x2e,0x33,0x38,0x32,0x2c,0x31,0x38,0x2e,0x35, - 0x32,0x39,0x20,0x43,0x31,0x36,0x2e,0x33,0x38,0x32, - 0x2c,0x31,0x39,0x2e,0x37,0x31,0x34,0x20,0x31,0x37, - 0x2e,0x33,0x34,0x37,0x2c,0x32,0x30,0x2e,0x36,0x38, - 0x20,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x30, - 0x2e,0x36,0x38,0x20,0x43,0x31,0x39,0x2e,0x37,0x31, - 0x37,0x2c,0x32,0x30,0x2e,0x36,0x38,0x20,0x32,0x30, - 0x2e,0x36,0x38,0x31,0x2c,0x31,0x39,0x2e,0x37,0x31, - 0x34,0x20,0x32,0x30,0x2e,0x36,0x38,0x31,0x2c,0x31, - 0x38,0x2e,0x35,0x32,0x39,0x20,0x43,0x32,0x30,0x2e, - 0x36,0x38,0x32,0x2c,0x31,0x37,0x2e,0x33,0x34,0x34, - 0x20,0x31,0x39,0x2e,0x37,0x31,0x37,0x2c,0x31,0x36, - 0x2e,0x33,0x37,0x39,0x20,0x31,0x38,0x2e,0x35,0x33, - 0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x20,0x7a, - 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x36,0x20,0x4c,0x31,0x35,0x2e, - 0x35,0x32,0x34,0x2c,0x38,0x2e,0x36,0x31,0x36,0x20, - 0x43,0x31,0x35,0x2e,0x32,0x35,0x31,0x2c,0x38,0x2e, - 0x36,0x31,0x36,0x20,0x31,0x34,0x2e,0x39,0x39,0x39, - 0x2c,0x38,0x2e,0x34,0x36,0x36,0x20,0x31,0x34,0x2e, - 0x38,0x36,0x37,0x2c,0x38,0x2e,0x32,0x32,0x36,0x20, - 0x43,0x31,0x34,0x2e,0x37,0x33,0x35,0x2c,0x37,0x2e, - 0x39,0x38,0x35,0x20,0x31,0x34,0x2e,0x37,0x34,0x36, - 0x2c,0x37,0x2e,0x36,0x39,0x32,0x20,0x31,0x34,0x2e, - 0x38,0x39,0x33,0x2c,0x37,0x2e,0x34,0x36,0x20,0x4c, - 0x31,0x37,0x2e,0x38,0x39,0x38,0x2c,0x32,0x2e,0x37, - 0x37,0x36,0x20,0x43,0x31,0x38,0x2e,0x31,0x37,0x34, - 0x2c,0x32,0x2e,0x33,0x34,0x35,0x20,0x31,0x38,0x2e, - 0x38,0x38,0x34,0x2c,0x32,0x2e,0x33,0x34,0x36,0x20, - 0x31,0x39,0x2e,0x31,0x36,0x32,0x2c,0x32,0x2e,0x37, - 0x37,0x36,0x20,0x4c,0x32,0x32,0x2e,0x31,0x36,0x37, - 0x2c,0x37,0x2e,0x34,0x36,0x20,0x43,0x32,0x32,0x2e, - 0x33,0x31,0x34,0x2c,0x37,0x2e,0x36,0x39,0x31,0x20, - 0x32,0x32,0x2e,0x33,0x32,0x36,0x2c,0x37,0x2e,0x39, - 0x38,0x34,0x20,0x32,0x32,0x2e,0x31,0x39,0x33,0x2c, - 0x38,0x2e,0x32,0x32,0x36,0x20,0x43,0x32,0x32,0x2e, - 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x20, - 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, - 0x31,0x36,0x20,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x36,0x20,0x7a,0x20,0x4d,0x31, - 0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31, - 0x36,0x20,0x4c,0x32,0x30,0x2e,0x31,0x36,0x35,0x2c, - 0x37,0x2e,0x31,0x31,0x36,0x20,0x4c,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x34,0x2e,0x35,0x37,0x31,0x20,0x4c, - 0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37,0x2e,0x31, - 0x31,0x36,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e,0x37, - 0x38,0x32,0x2c,0x31,0x34,0x2e,0x37,0x37,0x36,0x20, - 0x4c,0x38,0x2e,0x31,0x37,0x2c,0x31,0x34,0x2e,0x38, - 0x36,0x37,0x20,0x43,0x38,0x2e,0x34,0x31,0x2c,0x31, - 0x34,0x2e,0x39,0x39,0x38,0x20,0x38,0x2e,0x35,0x36, - 0x2c,0x31,0x35,0x2e,0x32,0x35,0x31,0x20,0x38,0x2e, - 0x35,0x36,0x2c,0x31,0x35,0x2e,0x35,0x32,0x35,0x20, - 0x4c,0x38,0x2e,0x35,0x36,0x2c,0x32,0x31,0x2e,0x35, - 0x33,0x35,0x20,0x43,0x38,0x2e,0x35,0x36,0x2c,0x32, - 0x31,0x2e,0x38,0x30,0x39,0x20,0x38,0x2e,0x34,0x31, - 0x32,0x2c,0x32,0x32,0x2e,0x30,0x36,0x31,0x20,0x38, - 0x2e,0x31,0x37,0x2c,0x32,0x32,0x2e,0x31,0x39,0x33, - 0x20,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32,0x32, - 0x2e,0x32,0x35,0x34,0x20,0x37,0x2e,0x39,0x33,0x32, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x20,0x37,0x2e, - 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x20,0x43,0x37,0x2e,0x36,0x36,0x38,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x34,0x20,0x37,0x2e,0x35,0x32,0x37, - 0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x20,0x37,0x2e, - 0x34,0x30,0x34,0x2c,0x32,0x32,0x2e,0x31,0x36,0x35, - 0x20,0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31,0x39,0x2e, - 0x31,0x36,0x32,0x20,0x43,0x32,0x2e,0x35,0x30,0x35, - 0x2c,0x31,0x39,0x2e,0x30,0x32,0x34,0x20,0x32,0x2e, - 0x33,0x37,0x35,0x2c,0x31,0x38,0x2e,0x37,0x38,0x36, - 0x20,0x32,0x2e,0x33,0x37,0x35,0x2c,0x31,0x38,0x2e, - 0x35,0x33,0x31,0x20,0x43,0x32,0x2e,0x33,0x37,0x35, - 0x2c,0x31,0x38,0x2e,0x32,0x37,0x36,0x20,0x32,0x2e, - 0x35,0x30,0x35,0x2c,0x31,0x38,0x2e,0x30,0x33,0x38, - 0x20,0x32,0x2e,0x37,0x32,0x2c,0x31,0x37,0x2e,0x39, - 0x20,0x4c,0x37,0x2e,0x34,0x30,0x34,0x2c,0x31,0x34, - 0x2e,0x38,0x39,0x34,0x20,0x4c,0x37,0x2e,0x37,0x38, - 0x32,0x2c,0x31,0x34,0x2e,0x37,0x37,0x36,0x20,0x7a, - 0x20,0x4d,0x37,0x2e,0x30,0x35,0x39,0x2c,0x31,0x36, - 0x2e,0x38,0x39,0x37,0x20,0x4c,0x34,0x2e,0x35,0x31, - 0x34,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20,0x4c,0x37, - 0x2e,0x30,0x35,0x39,0x2c,0x32,0x30,0x2e,0x31,0x36, - 0x32,0x20,0x4c,0x37,0x2e,0x30,0x35,0x39,0x2c,0x31, - 0x36,0x2e,0x38,0x39,0x37,0x20,0x7a,0x22,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, - 0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e, - 0x32,0x38,0x34,0x20,0x43,0x32,0x39,0x2e,0x30,0x37, - 0x31,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x20,0x32, - 0x38,0x2e,0x39,0x34,0x39,0x2c,0x32,0x32,0x2e,0x32, - 0x35,0x34,0x20,0x32,0x38,0x2e,0x38,0x33,0x37,0x2c, - 0x32,0x32,0x2e,0x31,0x39,0x32,0x20,0x43,0x32,0x38, - 0x2e,0x35,0x39,0x36,0x2c,0x32,0x32,0x2e,0x30,0x36, - 0x20,0x32,0x38,0x2e,0x34,0x34,0x35,0x2c,0x32,0x31, - 0x2e,0x38,0x30,0x38,0x20,0x32,0x38,0x2e,0x34,0x34, - 0x35,0x2c,0x32,0x31,0x2e,0x35,0x33,0x34,0x20,0x4c, - 0x32,0x38,0x2e,0x34,0x34,0x35,0x2c,0x31,0x35,0x2e, - 0x35,0x32,0x34,0x20,0x43,0x32,0x38,0x2e,0x34,0x34, - 0x35,0x2c,0x31,0x35,0x2e,0x32,0x35,0x20,0x32,0x38, - 0x2e,0x35,0x39,0x34,0x2c,0x31,0x34,0x2e,0x39,0x39, - 0x38,0x20,0x32,0x38,0x2e,0x38,0x33,0x37,0x2c,0x31, - 0x34,0x2e,0x38,0x36,0x36,0x20,0x43,0x32,0x39,0x2e, - 0x30,0x37,0x36,0x2c,0x31,0x34,0x2e,0x37,0x33,0x35, - 0x20,0x32,0x39,0x2e,0x33,0x37,0x2c,0x31,0x34,0x2e, - 0x37,0x34,0x33,0x20,0x32,0x39,0x2e,0x36,0x30,0x32, - 0x2c,0x31,0x34,0x2e,0x38,0x39,0x33,0x20,0x4c,0x33, - 0x34,0x2e,0x32,0x38,0x37,0x2c,0x31,0x37,0x2e,0x38, - 0x39,0x38,0x20,0x43,0x33,0x34,0x2e,0x35,0x30,0x32, - 0x2c,0x31,0x38,0x2e,0x30,0x33,0x36,0x20,0x33,0x34, - 0x2e,0x36,0x33,0x32,0x2c,0x31,0x38,0x2e,0x32,0x37, - 0x34,0x20,0x33,0x34,0x2e,0x36,0x33,0x32,0x2c,0x31, - 0x38,0x2e,0x35,0x32,0x39,0x20,0x43,0x33,0x34,0x2e, - 0x36,0x33,0x32,0x2c,0x31,0x38,0x2e,0x37,0x38,0x34, - 0x20,0x33,0x34,0x2e,0x35,0x30,0x32,0x2c,0x31,0x39, - 0x2e,0x30,0x32,0x32,0x20,0x33,0x34,0x2e,0x32,0x38, - 0x37,0x2c,0x31,0x39,0x2e,0x31,0x36,0x20,0x4c,0x32, - 0x39,0x2e,0x36,0x30,0x32,0x2c,0x32,0x32,0x2e,0x31, - 0x36,0x34,0x20,0x43,0x32,0x39,0x2e,0x34,0x37,0x38, - 0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x20,0x32,0x39, - 0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32,0x38, - 0x34,0x20,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32, - 0x32,0x2e,0x32,0x38,0x34,0x20,0x7a,0x20,0x4d,0x32, - 0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38, - 0x39,0x36,0x20,0x4c,0x32,0x39,0x2e,0x39,0x34,0x35, - 0x2c,0x32,0x30,0x2e,0x31,0x36,0x32,0x20,0x4c,0x33, - 0x32,0x2e,0x34,0x39,0x31,0x2c,0x31,0x38,0x2e,0x35, - 0x32,0x39,0x20,0x4c,0x32,0x39,0x2e,0x39,0x34,0x35, - 0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x20,0x7a,0x22, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d, - 0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34, - 0x2e,0x36,0x32,0x36,0x20,0x4c,0x31,0x38,0x2e,0x35, - 0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x20,0x43, - 0x31,0x38,0x2e,0x32,0x37,0x35,0x2c,0x33,0x34,0x2e, - 0x36,0x32,0x36,0x20,0x31,0x38,0x2e,0x30,0x33,0x38, - 0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x20,0x31,0x37, - 0x2e,0x38,0x39,0x39,0x2c,0x33,0x34,0x2e,0x32,0x38, - 0x31,0x20,0x4c,0x31,0x34,0x2e,0x38,0x39,0x34,0x2c, - 0x32,0x39,0x2e,0x35,0x39,0x37,0x20,0x43,0x31,0x34, - 0x2e,0x37,0x34,0x37,0x2c,0x32,0x39,0x2e,0x33,0x36, - 0x36,0x20,0x31,0x34,0x2e,0x37,0x33,0x36,0x2c,0x32, - 0x39,0x2e,0x30,0x37,0x33,0x20,0x31,0x34,0x2e,0x38, - 0x36,0x38,0x2c,0x32,0x38,0x2e,0x38,0x33,0x31,0x20, - 0x43,0x31,0x35,0x2c,0x32,0x38,0x2e,0x35,0x38,0x39, - 0x20,0x31,0x35,0x2e,0x32,0x35,0x32,0x2c,0x32,0x38, - 0x2e,0x34,0x34,0x20,0x31,0x35,0x2e,0x35,0x32,0x35, - 0x2c,0x32,0x38,0x2e,0x34,0x34,0x20,0x4c,0x32,0x31, - 0x2e,0x35,0x33,0x37,0x2c,0x32,0x38,0x2e,0x34,0x34, - 0x20,0x43,0x32,0x31,0x2e,0x38,0x31,0x2c,0x32,0x38, - 0x2e,0x34,0x34,0x20,0x32,0x32,0x2e,0x30,0x36,0x32, - 0x2c,0x32,0x38,0x2e,0x35,0x38,0x38,0x20,0x32,0x32, - 0x2e,0x31,0x39,0x34,0x2c,0x32,0x38,0x2e,0x38,0x33, - 0x31,0x20,0x43,0x32,0x32,0x2e,0x33,0x32,0x37,0x2c, - 0x32,0x39,0x2e,0x30,0x37,0x31,0x20,0x32,0x32,0x2e, - 0x33,0x31,0x35,0x2c,0x32,0x39,0x2e,0x33,0x36,0x34, - 0x20,0x32,0x32,0x2e,0x31,0x36,0x38,0x2c,0x32,0x39, - 0x2e,0x35,0x39,0x37,0x20,0x4c,0x31,0x39,0x2e,0x31, - 0x36,0x33,0x2c,0x33,0x34,0x2e,0x32,0x38,0x31,0x20, - 0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c,0x33,0x34, - 0x2e,0x34,0x39,0x36,0x20,0x31,0x38,0x2e,0x37,0x38, - 0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x20,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, - 0x36,0x20,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39, - 0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x20,0x4c, - 0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x32,0x2e,0x34, - 0x38,0x37,0x20,0x4c,0x32,0x30,0x2e,0x31,0x36,0x35, - 0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x20,0x4c,0x31, - 0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39, - 0x34,0x32,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x30,0x20,0x43,0x32,0x38,0x2e,0x37, - 0x36,0x35,0x2c,0x30,0x20,0x33,0x37,0x2e,0x30,0x36, - 0x31,0x2c,0x38,0x2e,0x32,0x39,0x36,0x20,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33, - 0x31,0x20,0x43,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, - 0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x32,0x38,0x2e, - 0x37,0x36,0x35,0x2c,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x43,0x38,0x2e,0x32,0x39,0x36, - 0x2c,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x30,0x2c, - 0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x30,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x30,0x2c,0x38, - 0x2e,0x32,0x39,0x36,0x20,0x38,0x2e,0x32,0x39,0x36, - 0x2c,0x30,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x30, - 0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x31,0x20,0x43,0x38,0x2e,0x38,0x34,0x39,0x2c,0x31, - 0x20,0x31,0x2c,0x38,0x2e,0x38,0x34,0x39,0x20,0x31, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x31, - 0x2c,0x32,0x38,0x2e,0x32,0x31,0x32,0x20,0x38,0x2e, - 0x38,0x34,0x39,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31, - 0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x36,0x2e, - 0x30,0x36,0x31,0x20,0x43,0x32,0x38,0x2e,0x32,0x31, - 0x32,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31,0x20,0x33, - 0x36,0x2e,0x30,0x36,0x31,0x2c,0x32,0x38,0x2e,0x32, - 0x31,0x32,0x20,0x33,0x36,0x2e,0x30,0x36,0x31,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x33,0x36, - 0x2e,0x30,0x36,0x31,0x2c,0x38,0x2e,0x38,0x34,0x39, - 0x20,0x32,0x38,0x2e,0x32,0x31,0x32,0x2c,0x31,0x20, - 0x31,0x38,0x2e,0x35,0x33,0x2c,0x31,0x20,0x7a,0x22, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20, - 0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d, - 0x22,0x4d,0x31,0x38,0x2e,0x35,0x32,0x39,0x2c,0x32, - 0x32,0x2e,0x31,0x38,0x31,0x20,0x43,0x31,0x36,0x2e, - 0x35,0x31,0x33,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31, - 0x20,0x31,0x34,0x2e,0x38,0x37,0x39,0x2c,0x32,0x30, - 0x2e,0x35,0x34,0x37,0x20,0x31,0x34,0x2e,0x38,0x37, - 0x39,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20,0x43,0x31, - 0x34,0x2e,0x38,0x37,0x39,0x2c,0x31,0x36,0x2e,0x35, - 0x31,0x34,0x20,0x31,0x36,0x2e,0x35,0x31,0x33,0x2c, - 0x31,0x34,0x2e,0x38,0x38,0x20,0x31,0x38,0x2e,0x35, - 0x32,0x39,0x2c,0x31,0x34,0x2e,0x38,0x38,0x20,0x43, - 0x32,0x30,0x2e,0x35,0x34,0x36,0x2c,0x31,0x34,0x2e, - 0x38,0x38,0x20,0x32,0x32,0x2e,0x31,0x38,0x2c,0x31, - 0x36,0x2e,0x35,0x31,0x34,0x20,0x32,0x32,0x2e,0x31, - 0x38,0x2c,0x31,0x38,0x2e,0x35,0x33,0x20,0x43,0x32, - 0x32,0x2e,0x31,0x38,0x2c,0x32,0x30,0x2e,0x35,0x34, - 0x37,0x20,0x32,0x30,0x2e,0x35,0x34,0x36,0x2c,0x32, - 0x32,0x2e,0x31,0x38,0x31,0x20,0x31,0x38,0x2e,0x35, - 0x32,0x39,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x20, - 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, - 0x20,0x20,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73, - 0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__analog_up_svg.cpp b/data/converted/help__analog_up_svg.cpp deleted file mode 100644 index 56fd50e7b7..0000000000 --- a/data/converted/help__analog_up_svg.cpp +++ /dev/null @@ -1,294 +0,0 @@ -// this file was auto-generated from "analog_up.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__analog_up_svg_size = 2853; -const uint8_t help__analog_up_svg_data[2853] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73, - 0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20, - 0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44, - 0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31, - 0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, - 0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68, - 0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e, - 0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31, - 0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73, - 0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e, - 0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67, - 0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c, - 0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a, - 0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f, - 0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c, - 0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x22,0x20,0x77,0x69,0x64, - 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x2c,0x20, - 0x30,0x2c,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, - 0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x3e,0x0a, - 0x20,0x20,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x45, - 0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x3c,0x67,0x3e,0x0a,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x34,0x2e,0x38,0x36,0x32,0x2c, - 0x31,0x38,0x2e,0x35,0x36,0x37,0x20,0x43,0x31,0x34, - 0x2e,0x38,0x36,0x32,0x2c,0x31,0x36,0x2e,0x35,0x35, - 0x34,0x20,0x31,0x36,0x2e,0x35,0x30,0x31,0x2c,0x31, - 0x34,0x2e,0x39,0x31,0x38,0x20,0x31,0x38,0x2e,0x35, - 0x31,0x33,0x2c,0x31,0x34,0x2e,0x39,0x31,0x38,0x20, - 0x43,0x32,0x30,0x2e,0x35,0x32,0x35,0x2c,0x31,0x34, - 0x2e,0x39,0x31,0x38,0x20,0x32,0x32,0x2e,0x31,0x36, - 0x33,0x2c,0x31,0x36,0x2e,0x35,0x35,0x36,0x20,0x32, - 0x32,0x2e,0x31,0x36,0x33,0x2c,0x31,0x38,0x2e,0x35, - 0x36,0x37,0x20,0x43,0x32,0x32,0x2e,0x31,0x36,0x33, - 0x2c,0x32,0x30,0x2e,0x35,0x38,0x20,0x32,0x30,0x2e, - 0x35,0x32,0x34,0x2c,0x32,0x32,0x2e,0x32,0x31,0x37, - 0x20,0x31,0x38,0x2e,0x35,0x31,0x33,0x2c,0x32,0x32, - 0x2e,0x32,0x31,0x37,0x20,0x43,0x31,0x36,0x2e,0x35, - 0x2c,0x32,0x32,0x2e,0x32,0x31,0x38,0x20,0x31,0x34, - 0x2e,0x38,0x36,0x32,0x2c,0x32,0x30,0x2e,0x35,0x38, - 0x20,0x31,0x34,0x2e,0x38,0x36,0x32,0x2c,0x31,0x38, - 0x2e,0x35,0x36,0x37,0x20,0x7a,0x20,0x4d,0x32,0x30, - 0x2e,0x36,0x36,0x34,0x2c,0x31,0x38,0x2e,0x35,0x36, - 0x37,0x20,0x43,0x32,0x30,0x2e,0x36,0x36,0x34,0x2c, - 0x31,0x37,0x2e,0x33,0x38,0x31,0x20,0x31,0x39,0x2e, - 0x36,0x39,0x39,0x2c,0x31,0x36,0x2e,0x34,0x31,0x38, - 0x20,0x31,0x38,0x2e,0x35,0x31,0x34,0x2c,0x31,0x36, - 0x2e,0x34,0x31,0x38,0x20,0x43,0x31,0x37,0x2e,0x33, - 0x32,0x39,0x2c,0x31,0x36,0x2e,0x34,0x31,0x38,0x20, - 0x31,0x36,0x2e,0x33,0x36,0x33,0x2c,0x31,0x37,0x2e, - 0x33,0x38,0x33,0x20,0x31,0x36,0x2e,0x33,0x36,0x33, - 0x2c,0x31,0x38,0x2e,0x35,0x36,0x37,0x20,0x43,0x31, - 0x36,0x2e,0x33,0x36,0x33,0x2c,0x31,0x39,0x2e,0x37, - 0x35,0x33,0x20,0x31,0x37,0x2e,0x33,0x32,0x39,0x2c, - 0x32,0x30,0x2e,0x37,0x31,0x37,0x20,0x31,0x38,0x2e, - 0x35,0x31,0x34,0x2c,0x32,0x30,0x2e,0x37,0x31,0x37, - 0x20,0x43,0x31,0x39,0x2e,0x36,0x39,0x39,0x2c,0x32, - 0x30,0x2e,0x37,0x31,0x38,0x20,0x32,0x30,0x2e,0x36, - 0x36,0x34,0x2c,0x31,0x39,0x2e,0x37,0x35,0x33,0x20, - 0x32,0x30,0x2e,0x36,0x36,0x34,0x2c,0x31,0x38,0x2e, - 0x35,0x36,0x37,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, - 0x32,0x38,0x2e,0x34,0x32,0x37,0x2c,0x32,0x31,0x2e, - 0x35,0x37,0x32,0x20,0x4c,0x32,0x38,0x2e,0x34,0x32, - 0x37,0x2c,0x31,0x35,0x2e,0x35,0x36,0x20,0x43,0x32, - 0x38,0x2e,0x34,0x32,0x37,0x2c,0x31,0x35,0x2e,0x32, - 0x38,0x37,0x20,0x32,0x38,0x2e,0x35,0x37,0x37,0x2c, - 0x31,0x35,0x2e,0x30,0x33,0x35,0x20,0x32,0x38,0x2e, - 0x38,0x31,0x37,0x2c,0x31,0x34,0x2e,0x39,0x30,0x33, - 0x20,0x43,0x32,0x39,0x2e,0x30,0x35,0x38,0x2c,0x31, - 0x34,0x2e,0x37,0x37,0x31,0x20,0x32,0x39,0x2e,0x33, - 0x35,0x31,0x2c,0x31,0x34,0x2e,0x37,0x38,0x32,0x20, - 0x32,0x39,0x2e,0x35,0x38,0x33,0x2c,0x31,0x34,0x2e, - 0x39,0x32,0x39,0x20,0x4c,0x33,0x34,0x2e,0x32,0x36, - 0x37,0x2c,0x31,0x37,0x2e,0x39,0x33,0x34,0x20,0x43, - 0x33,0x34,0x2e,0x36,0x39,0x38,0x2c,0x31,0x38,0x2e, - 0x32,0x31,0x20,0x33,0x34,0x2e,0x36,0x39,0x37,0x2c, - 0x31,0x38,0x2e,0x39,0x32,0x20,0x33,0x34,0x2e,0x32, - 0x36,0x37,0x2c,0x31,0x39,0x2e,0x31,0x39,0x38,0x20, - 0x4c,0x32,0x39,0x2e,0x35,0x38,0x33,0x2c,0x32,0x32, - 0x2e,0x32,0x30,0x33,0x20,0x43,0x32,0x39,0x2e,0x33, - 0x35,0x32,0x2c,0x32,0x32,0x2e,0x33,0x35,0x20,0x32, - 0x39,0x2e,0x30,0x35,0x39,0x2c,0x32,0x32,0x2e,0x33, - 0x36,0x32,0x20,0x32,0x38,0x2e,0x38,0x31,0x37,0x2c, - 0x32,0x32,0x2e,0x32,0x32,0x39,0x20,0x43,0x32,0x38, - 0x2e,0x35,0x37,0x37,0x2c,0x32,0x32,0x2e,0x30,0x39, - 0x39,0x20,0x32,0x38,0x2e,0x34,0x32,0x37,0x2c,0x32, - 0x31,0x2e,0x38,0x34,0x37,0x20,0x32,0x38,0x2e,0x34, - 0x32,0x37,0x2c,0x32,0x31,0x2e,0x35,0x37,0x32,0x20, - 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x32,0x37,0x2c, - 0x31,0x36,0x2e,0x39,0x33,0x33,0x20,0x4c,0x32,0x39, - 0x2e,0x39,0x32,0x37,0x2c,0x32,0x30,0x2e,0x32,0x30, - 0x31,0x20,0x4c,0x33,0x32,0x2e,0x34,0x37,0x32,0x2c, - 0x31,0x38,0x2e,0x35,0x36,0x36,0x20,0x4c,0x32,0x39, - 0x2e,0x39,0x32,0x37,0x2c,0x31,0x36,0x2e,0x39,0x33, - 0x33,0x20,0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x67, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d, - 0x31,0x38,0x2e,0x35,0x31,0x33,0x2c,0x33,0x2e,0x31, - 0x36,0x31,0x20,0x4c,0x31,0x35,0x2e,0x35,0x30,0x39, - 0x2c,0x37,0x2e,0x38,0x34,0x35,0x20,0x4c,0x32,0x31, - 0x2e,0x35,0x31,0x39,0x2c,0x37,0x2e,0x38,0x34,0x35, - 0x20,0x4c,0x31,0x38,0x2e,0x35,0x31,0x33,0x2c,0x33, - 0x2e,0x31,0x36,0x31,0x20,0x7a,0x22,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x34,0x2e,0x37,0x35,0x39,0x2c, - 0x37,0x2e,0x38,0x34,0x35,0x20,0x43,0x31,0x34,0x2e, - 0x37,0x35,0x39,0x2c,0x37,0x2e,0x37,0x30,0x34,0x20, - 0x31,0x34,0x2e,0x37,0x39,0x39,0x2c,0x37,0x2e,0x35, - 0x36,0x33,0x20,0x31,0x34,0x2e,0x38,0x37,0x38,0x2c, - 0x37,0x2e,0x34,0x34,0x20,0x4c,0x31,0x37,0x2e,0x38, - 0x38,0x31,0x2c,0x32,0x2e,0x37,0x35,0x36,0x20,0x43, - 0x31,0x38,0x2e,0x30,0x31,0x39,0x2c,0x32,0x2e,0x35, - 0x34,0x31,0x20,0x31,0x38,0x2e,0x32,0x35,0x37,0x2c, - 0x32,0x2e,0x34,0x31,0x31,0x20,0x31,0x38,0x2e,0x35, - 0x31,0x32,0x2c,0x32,0x2e,0x34,0x31,0x31,0x20,0x43, - 0x31,0x38,0x2e,0x37,0x36,0x37,0x2c,0x32,0x2e,0x34, - 0x31,0x31,0x20,0x31,0x39,0x2e,0x30,0x30,0x35,0x2c, - 0x32,0x2e,0x35,0x34,0x31,0x20,0x31,0x39,0x2e,0x31, - 0x34,0x33,0x2c,0x32,0x2e,0x37,0x35,0x36,0x20,0x4c, - 0x32,0x32,0x2e,0x31,0x34,0x39,0x2c,0x37,0x2e,0x34, - 0x34,0x20,0x43,0x32,0x32,0x2e,0x32,0x39,0x37,0x2c, - 0x37,0x2e,0x36,0x37,0x20,0x32,0x32,0x2e,0x33,0x30, - 0x37,0x2c,0x37,0x2e,0x39,0x36,0x34,0x20,0x32,0x32, - 0x2e,0x31,0x37,0x36,0x2c,0x38,0x2e,0x32,0x30,0x36, - 0x20,0x43,0x32,0x32,0x2e,0x30,0x34,0x35,0x2c,0x38, - 0x2e,0x34,0x34,0x36,0x20,0x32,0x31,0x2e,0x37,0x39, - 0x32,0x2c,0x38,0x2e,0x35,0x39,0x36,0x20,0x32,0x31, - 0x2e,0x35,0x31,0x38,0x2c,0x38,0x2e,0x35,0x39,0x36, - 0x20,0x4c,0x31,0x35,0x2e,0x35,0x30,0x38,0x2c,0x38, - 0x2e,0x35,0x39,0x36,0x20,0x43,0x31,0x35,0x2e,0x32, - 0x33,0x34,0x2c,0x38,0x2e,0x35,0x39,0x36,0x20,0x31, - 0x34,0x2e,0x39,0x38,0x32,0x2c,0x38,0x2e,0x34,0x34, - 0x38,0x20,0x31,0x34,0x2e,0x38,0x35,0x2c,0x38,0x2e, - 0x32,0x30,0x36,0x20,0x43,0x31,0x34,0x2e,0x37,0x38, - 0x39,0x2c,0x38,0x2e,0x30,0x39,0x32,0x20,0x31,0x34, - 0x2e,0x37,0x35,0x39,0x2c,0x37,0x2e,0x39,0x36,0x38, - 0x20,0x31,0x34,0x2e,0x37,0x35,0x39,0x2c,0x37,0x2e, - 0x38,0x34,0x35,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e, - 0x35,0x31,0x33,0x2c,0x34,0x2e,0x35,0x35,0x20,0x4c, - 0x31,0x36,0x2e,0x38,0x38,0x31,0x2c,0x37,0x2e,0x30, - 0x39,0x35,0x20,0x4c,0x32,0x30,0x2e,0x31,0x34,0x36, - 0x2c,0x37,0x2e,0x30,0x39,0x35,0x20,0x4c,0x31,0x38, - 0x2e,0x35,0x31,0x33,0x2c,0x34,0x2e,0x35,0x35,0x20, - 0x7a,0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x67,0x3e, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x34,0x2e, - 0x37,0x35,0x39,0x2c,0x32,0x39,0x2e,0x32,0x33,0x31, - 0x20,0x43,0x31,0x34,0x2e,0x37,0x35,0x39,0x2c,0x32, - 0x39,0x2e,0x31,0x30,0x37,0x20,0x31,0x34,0x2e,0x37, - 0x38,0x39,0x2c,0x32,0x38,0x2e,0x39,0x38,0x35,0x20, - 0x31,0x34,0x2e,0x38,0x35,0x31,0x2c,0x32,0x38,0x2e, - 0x38,0x37,0x33,0x20,0x43,0x31,0x34,0x2e,0x39,0x38, - 0x33,0x2c,0x32,0x38,0x2e,0x36,0x33,0x32,0x20,0x31, - 0x35,0x2e,0x32,0x33,0x35,0x2c,0x32,0x38,0x2e,0x34, - 0x38,0x31,0x20,0x31,0x35,0x2e,0x35,0x30,0x39,0x2c, - 0x32,0x38,0x2e,0x34,0x38,0x31,0x20,0x4c,0x32,0x31, - 0x2e,0x35,0x31,0x39,0x2c,0x32,0x38,0x2e,0x34,0x38, - 0x31,0x20,0x43,0x32,0x31,0x2e,0x37,0x39,0x33,0x2c, - 0x32,0x38,0x2e,0x34,0x38,0x31,0x20,0x32,0x32,0x2e, - 0x30,0x34,0x35,0x2c,0x32,0x38,0x2e,0x36,0x33,0x20, - 0x32,0x32,0x2e,0x31,0x37,0x37,0x2c,0x32,0x38,0x2e, - 0x38,0x37,0x33,0x20,0x43,0x32,0x32,0x2e,0x33,0x30, - 0x38,0x2c,0x32,0x39,0x2e,0x31,0x31,0x32,0x20,0x32, - 0x32,0x2e,0x33,0x2c,0x32,0x39,0x2e,0x34,0x30,0x36, - 0x20,0x32,0x32,0x2e,0x31,0x35,0x2c,0x32,0x39,0x2e, - 0x36,0x33,0x38,0x20,0x4c,0x31,0x39,0x2e,0x31,0x34, - 0x35,0x2c,0x33,0x34,0x2e,0x33,0x32,0x33,0x20,0x43, - 0x31,0x39,0x2e,0x30,0x30,0x37,0x2c,0x33,0x34,0x2e, - 0x35,0x33,0x38,0x20,0x31,0x38,0x2e,0x37,0x36,0x39, - 0x2c,0x33,0x34,0x2e,0x36,0x36,0x38,0x20,0x31,0x38, - 0x2e,0x35,0x31,0x34,0x2c,0x33,0x34,0x2e,0x36,0x36, - 0x38,0x20,0x43,0x31,0x38,0x2e,0x32,0x35,0x39,0x2c, - 0x33,0x34,0x2e,0x36,0x36,0x38,0x20,0x31,0x38,0x2e, - 0x30,0x32,0x31,0x2c,0x33,0x34,0x2e,0x35,0x33,0x38, - 0x20,0x31,0x37,0x2e,0x38,0x38,0x33,0x2c,0x33,0x34, - 0x2e,0x33,0x32,0x33,0x20,0x4c,0x31,0x34,0x2e,0x38, - 0x37,0x39,0x2c,0x32,0x39,0x2e,0x36,0x33,0x38,0x20, - 0x43,0x31,0x34,0x2e,0x37,0x39,0x39,0x2c,0x32,0x39, - 0x2e,0x35,0x31,0x34,0x20,0x31,0x34,0x2e,0x37,0x35, - 0x39,0x2c,0x32,0x39,0x2e,0x33,0x37,0x32,0x20,0x31, - 0x34,0x2e,0x37,0x35,0x39,0x2c,0x32,0x39,0x2e,0x32, - 0x33,0x31,0x20,0x7a,0x20,0x4d,0x32,0x30,0x2e,0x31, - 0x34,0x37,0x2c,0x32,0x39,0x2e,0x39,0x38,0x31,0x20, - 0x4c,0x31,0x36,0x2e,0x38,0x38,0x31,0x2c,0x32,0x39, - 0x2e,0x39,0x38,0x31,0x20,0x4c,0x31,0x38,0x2e,0x35, - 0x31,0x34,0x2c,0x33,0x32,0x2e,0x35,0x32,0x37,0x20, - 0x4c,0x32,0x30,0x2e,0x31,0x34,0x37,0x2c,0x32,0x39, - 0x2e,0x39,0x38,0x31,0x20,0x7a,0x22,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, - 0x20,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, - 0x4d,0x32,0x2e,0x34,0x31,0x37,0x2c,0x31,0x38,0x2e, - 0x35,0x36,0x36,0x20,0x4c,0x32,0x2e,0x34,0x31,0x37, - 0x2c,0x31,0x38,0x2e,0x35,0x36,0x36,0x20,0x43,0x32, - 0x2e,0x34,0x31,0x37,0x2c,0x31,0x38,0x2e,0x33,0x31, - 0x31,0x20,0x32,0x2e,0x35,0x34,0x37,0x2c,0x31,0x38, - 0x2e,0x30,0x37,0x34,0x20,0x32,0x2e,0x37,0x36,0x32, - 0x2c,0x31,0x37,0x2e,0x39,0x33,0x35,0x20,0x4c,0x37, - 0x2e,0x34,0x34,0x36,0x2c,0x31,0x34,0x2e,0x39,0x33, - 0x20,0x43,0x37,0x2e,0x36,0x37,0x37,0x2c,0x31,0x34, - 0x2e,0x37,0x38,0x33,0x20,0x37,0x2e,0x39,0x37,0x2c, - 0x31,0x34,0x2e,0x37,0x37,0x32,0x20,0x38,0x2e,0x32, - 0x31,0x32,0x2c,0x31,0x34,0x2e,0x39,0x30,0x34,0x20, - 0x43,0x38,0x2e,0x34,0x35,0x34,0x2c,0x31,0x35,0x2e, - 0x30,0x33,0x36,0x20,0x38,0x2e,0x36,0x30,0x33,0x2c, - 0x31,0x35,0x2e,0x32,0x38,0x38,0x20,0x38,0x2e,0x36, - 0x30,0x33,0x2c,0x31,0x35,0x2e,0x35,0x36,0x31,0x20, - 0x4c,0x38,0x2e,0x36,0x30,0x33,0x2c,0x32,0x31,0x2e, - 0x35,0x37,0x33,0x20,0x43,0x38,0x2e,0x36,0x30,0x33, - 0x2c,0x32,0x31,0x2e,0x38,0x34,0x36,0x20,0x38,0x2e, - 0x34,0x35,0x35,0x2c,0x32,0x32,0x2e,0x30,0x39,0x38, - 0x20,0x38,0x2e,0x32,0x31,0x32,0x2c,0x32,0x32,0x2e, - 0x32,0x33,0x20,0x43,0x37,0x2e,0x39,0x37,0x32,0x2c, - 0x32,0x32,0x2e,0x33,0x36,0x33,0x20,0x37,0x2e,0x36, - 0x37,0x39,0x2c,0x32,0x32,0x2e,0x33,0x35,0x31,0x20, - 0x37,0x2e,0x34,0x34,0x36,0x2c,0x32,0x32,0x2e,0x32, - 0x30,0x34,0x20,0x4c,0x32,0x2e,0x37,0x36,0x32,0x2c, - 0x31,0x39,0x2e,0x31,0x39,0x39,0x20,0x43,0x32,0x2e, - 0x35,0x34,0x37,0x2c,0x31,0x39,0x2e,0x30,0x35,0x39, - 0x20,0x32,0x2e,0x34,0x31,0x37,0x2c,0x31,0x38,0x2e, - 0x38,0x32,0x32,0x20,0x32,0x2e,0x34,0x31,0x37,0x2c, - 0x31,0x38,0x2e,0x35,0x36,0x36,0x20,0x7a,0x20,0x4d, - 0x37,0x2e,0x31,0x30,0x31,0x2c,0x31,0x36,0x2e,0x39, - 0x33,0x33,0x20,0x4c,0x34,0x2e,0x35,0x35,0x36,0x2c, - 0x31,0x38,0x2e,0x35,0x36,0x36,0x20,0x4c,0x37,0x2e, - 0x31,0x30,0x31,0x2c,0x32,0x30,0x2e,0x32,0x30,0x31, - 0x20,0x4c,0x37,0x2e,0x31,0x30,0x31,0x2c,0x31,0x36, - 0x2e,0x39,0x33,0x33,0x20,0x7a,0x22,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x2f,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c, - 0x2f,0x67,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x30,0x20,0x43,0x32,0x38,0x2e, - 0x37,0x36,0x35,0x2c,0x30,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x2c,0x38,0x2e,0x32,0x39,0x36,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x2c,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x20,0x43,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x32,0x38, - 0x2e,0x37,0x36,0x35,0x2c,0x33,0x37,0x2e,0x30,0x36, - 0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x20,0x43,0x38,0x2e,0x32,0x39, - 0x36,0x2c,0x33,0x37,0x2e,0x30,0x36,0x31,0x20,0x30, - 0x2c,0x32,0x38,0x2e,0x37,0x36,0x35,0x20,0x30,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x30,0x2c, - 0x38,0x2e,0x32,0x39,0x36,0x20,0x38,0x2e,0x32,0x39, - 0x36,0x2c,0x30,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x30,0x20,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x31,0x20,0x43,0x38,0x2e,0x38,0x34,0x39,0x2c, - 0x31,0x20,0x31,0x2c,0x38,0x2e,0x38,0x34,0x39,0x20, - 0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43, - 0x31,0x2c,0x32,0x38,0x2e,0x32,0x31,0x32,0x20,0x38, - 0x2e,0x38,0x34,0x39,0x2c,0x33,0x36,0x2e,0x30,0x36, - 0x31,0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x36, - 0x2e,0x30,0x36,0x31,0x20,0x43,0x32,0x38,0x2e,0x32, - 0x31,0x32,0x2c,0x33,0x36,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x36,0x2e,0x30,0x36,0x31,0x2c,0x32,0x38,0x2e, - 0x32,0x31,0x32,0x20,0x33,0x36,0x2e,0x30,0x36,0x31, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x20,0x43,0x33, - 0x36,0x2e,0x30,0x36,0x31,0x2c,0x38,0x2e,0x38,0x34, - 0x39,0x20,0x32,0x38,0x2e,0x32,0x31,0x32,0x2c,0x31, - 0x20,0x31,0x38,0x2e,0x35,0x33,0x2c,0x31,0x20,0x7a, - 0x22,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x20, - 0x20,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76, - 0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__button_a_svg.cpp b/data/converted/help__button_a_svg.cpp deleted file mode 100644 index 0c24630f3a..0000000000 --- a/data/converted/help__button_a_svg.cpp +++ /dev/null @@ -1,105 +0,0 @@ -// this file was auto-generated from "button_a.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__button_a_svg_size = 965; -const uint8_t help__button_a_svg_data[965] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x31,0x38,0x2e,0x39,0x31,0x34,0x2c,0x31, - 0x34,0x2e,0x35,0x37,0x39,0x6c,0x2d,0x31,0x2e,0x36, - 0x38,0x32,0x2c,0x35,0x2e,0x33,0x30,0x38,0x68,0x33, - 0x2e,0x34,0x30,0x35,0x6c,0x2d,0x31,0x2e,0x36,0x37, - 0x2d,0x35,0x2e,0x33,0x30,0x38,0x48,0x31,0x38,0x2e, - 0x39,0x31,0x34,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x33,0x2e,0x30,0x32,0x39,0x63,0x2d, - 0x38,0x2e,0x35,0x36,0x32,0x2c,0x30,0x2d,0x31,0x35, - 0x2e,0x35,0x30,0x31,0x2c,0x36,0x2e,0x39,0x34,0x2d, - 0x31,0x35,0x2e,0x35,0x30,0x31,0x2c,0x31,0x35,0x2e, - 0x35,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c,0x38,0x2e, - 0x35,0x36,0x33,0x2c,0x36,0x2e,0x39,0x33,0x39,0x2c, - 0x31,0x35,0x2e,0x35,0x30,0x32,0x2c,0x31,0x35,0x2e, - 0x35,0x30,0x31,0x2c,0x31,0x35,0x2e,0x35,0x30,0x32, - 0x53,0x33,0x34,0x2e,0x30,0x33,0x2c,0x32,0x37,0x2e, - 0x30,0x39,0x31,0x2c,0x33,0x34,0x2e,0x30,0x33,0x2c, - 0x31,0x38,0x2e,0x35,0x32,0x39,0x43,0x33,0x34,0x2e, - 0x30,0x33,0x2c,0x39,0x2e,0x39,0x37,0x2c,0x32,0x37, - 0x2e,0x30,0x39,0x31,0x2c,0x33,0x2e,0x30,0x32,0x39, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x33,0x2e, - 0x30,0x32,0x39,0x7a,0x20,0x4d,0x32,0x32,0x2e,0x32, - 0x32,0x37,0x2c,0x32,0x34,0x2e,0x39,0x32,0x35,0x0a, - 0x09,0x09,0x09,0x6c,0x2d,0x30,0x2e,0x39,0x31,0x39, - 0x2d,0x32,0x2e,0x39,0x31,0x33,0x68,0x2d,0x34,0x2e, - 0x37,0x34,0x31,0x6c,0x2d,0x30,0x2e,0x39,0x31,0x38, - 0x2c,0x32,0x2e,0x39,0x31,0x33,0x68,0x2d,0x32,0x2e, - 0x37,0x33,0x35,0x6c,0x34,0x2e,0x36,0x34,0x36,0x2d, - 0x31,0x33,0x2e,0x35,0x30,0x39,0x68,0x32,0x2e,0x37, - 0x37,0x34,0x6c,0x34,0x2e,0x36,0x32,0x39,0x2c,0x31, - 0x33,0x2e,0x35,0x30,0x39,0x48,0x32,0x32,0x2e,0x32, - 0x32,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67, - 0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22, - 0x30,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x33,0x36,0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e,0x31, - 0x76,0x33,0x36,0x2e,0x38,0x36,0x31,0x48,0x30,0x2e, - 0x31,0x56,0x30,0x2e,0x31,0x48,0x33,0x36,0x2e,0x39, - 0x36,0x31,0x20,0x4d,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x2c,0x30,0x48,0x30,0x76,0x33,0x37,0x2e,0x30,0x36, - 0x68,0x33,0x37,0x2e,0x30,0x36,0x31,0x56,0x30,0x4c, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x7a,0x22, - 0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f, - 0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__button_b_svg.cpp b/data/converted/help__button_b_svg.cpp deleted file mode 100644 index 57403aa864..0000000000 --- a/data/converted/help__button_b_svg.cpp +++ /dev/null @@ -1,157 +0,0 @@ -// this file was auto-generated from "button_b.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__button_b_svg_size = 1483; -const uint8_t help__button_b_svg_data[1483] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x42,0x22,0x20,0x78, - 0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f,0x73, - 0x76,0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a, - 0x78,0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, - 0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f, - 0x78,0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22, - 0x30,0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30,0x70, - 0x78,0x22,0x0a,0x09,0x20,0x77,0x69,0x64,0x74,0x68, - 0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78, - 0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74,0x3d,0x22, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x20, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36, - 0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0a,0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x39, - 0x2e,0x34,0x37,0x2c,0x31,0x38,0x2e,0x39,0x34,0x39, - 0x68,0x2d,0x32,0x2e,0x36,0x39,0x39,0x76,0x33,0x2e, - 0x38,0x38,0x37,0x68,0x32,0x2e,0x34,0x39,0x36,0x63, - 0x30,0x2e,0x37,0x31,0x37,0x2c,0x30,0x2c,0x31,0x2e, - 0x32,0x36,0x37,0x2d,0x30,0x2e,0x31,0x35,0x34,0x2c, - 0x31,0x2e,0x36,0x34,0x34,0x2d,0x30,0x2e,0x34,0x36, - 0x37,0x63,0x30,0x2e,0x33,0x37,0x38,0x2d,0x30,0x2e, - 0x33,0x31,0x33,0x2c,0x30,0x2e,0x35,0x36,0x33,0x2d, - 0x30,0x2e,0x37,0x37,0x32,0x2c,0x30,0x2e,0x35,0x36, - 0x33,0x2d,0x31,0x2e,0x33,0x38,0x35,0x0a,0x09,0x09, - 0x09,0x63,0x30,0x2d,0x30,0x2e,0x36,0x35,0x39,0x2d, - 0x30,0x2e,0x31,0x36,0x2d,0x31,0x2e,0x31,0x36,0x35, - 0x2d,0x30,0x2e,0x34,0x38,0x2d,0x31,0x2e,0x35,0x31, - 0x33,0x43,0x32,0x30,0x2e,0x36,0x37,0x31,0x2c,0x31, - 0x39,0x2e,0x31,0x32,0x34,0x2c,0x32,0x30,0x2e,0x31, - 0x36,0x33,0x2c,0x31,0x38,0x2e,0x39,0x34,0x39,0x2c, - 0x31,0x39,0x2e,0x34,0x37,0x2c,0x31,0x38,0x2e,0x39, - 0x34,0x39,0x7a,0x20,0x4d,0x32,0x30,0x2e,0x33,0x38, - 0x39,0x2c,0x31,0x36,0x2e,0x36,0x33,0x63,0x30,0x2e, - 0x33,0x39,0x2d,0x30,0x2e,0x32,0x39,0x37,0x2c,0x30, - 0x2e,0x35,0x38,0x35,0x2d,0x30,0x2e,0x37,0x32,0x39, - 0x2c,0x30,0x2e,0x35,0x38,0x35,0x2d,0x31,0x2e,0x32, - 0x39,0x39,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30, - 0x2e,0x36,0x32,0x35,0x2d,0x30,0x2e,0x31,0x39,0x37, - 0x2d,0x31,0x2e,0x30,0x38,0x36,0x2d,0x30,0x2e,0x35, - 0x39,0x2d,0x31,0x2e,0x33,0x38,0x33,0x73,0x2d,0x30, - 0x2e,0x39,0x37,0x39,0x2d,0x30,0x2e,0x34,0x34,0x35, - 0x2d,0x31,0x2e,0x37,0x35,0x38,0x2d,0x30,0x2e,0x34, - 0x34,0x35,0x68,0x2d,0x31,0x2e,0x38,0x35,0x35,0x76, - 0x33,0x2e,0x35,0x37,0x32,0x68,0x31,0x2e,0x39,0x34, - 0x38,0x43,0x31,0x39,0x2e,0x34,0x34,0x32,0x2c,0x31, - 0x37,0x2e,0x30,0x37,0x35,0x2c,0x31,0x39,0x2e,0x39, - 0x39,0x39,0x2c,0x31,0x36,0x2e,0x39,0x32,0x37,0x2c, - 0x32,0x30,0x2e,0x33,0x38,0x39,0x2c,0x31,0x36,0x2e, - 0x36,0x33,0x7a,0x0a,0x09,0x09,0x09,0x20,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e,0x30,0x33,0x31, - 0x63,0x2d,0x38,0x2e,0x35,0x36,0x31,0x2c,0x30,0x2d, - 0x31,0x35,0x2e,0x35,0x2c,0x36,0x2e,0x39,0x33,0x38, - 0x2d,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35, - 0x63,0x30,0x2c,0x38,0x2e,0x35,0x36,0x2c,0x36,0x2e, - 0x39,0x33,0x39,0x2c,0x31,0x35,0x2e,0x35,0x2c,0x31, - 0x35,0x2e,0x35,0x2c,0x31,0x35,0x2e,0x35,0x63,0x38, - 0x2e,0x35,0x36,0x33,0x2c,0x30,0x2c,0x31,0x35,0x2e, - 0x35,0x2d,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31,0x35, - 0x2e,0x35,0x2d,0x31,0x35,0x2e,0x35,0x0a,0x09,0x09, - 0x09,0x43,0x33,0x34,0x2e,0x30,0x33,0x2c,0x39,0x2e, - 0x39,0x36,0x39,0x2c,0x32,0x37,0x2e,0x30,0x39,0x31, - 0x2c,0x33,0x2e,0x30,0x33,0x31,0x2c,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x33,0x2e,0x30,0x33,0x31,0x7a,0x20, - 0x4d,0x32,0x32,0x2e,0x38,0x39,0x34,0x2c,0x32,0x33, - 0x2e,0x39,0x32,0x37,0x63,0x2d,0x30,0x2e,0x38,0x35, - 0x34,0x2c,0x30,0x2e,0x36,0x36,0x35,0x2d,0x32,0x2e, - 0x30,0x36,0x33,0x2c,0x30,0x2e,0x39,0x39,0x37,0x2d, - 0x33,0x2e,0x36,0x32,0x37,0x2c,0x30,0x2e,0x39,0x39, - 0x37,0x68,0x2d,0x35,0x2e,0x32,0x30,0x35,0x56,0x31, - 0x31,0x2e,0x34,0x31,0x36,0x68,0x34,0x2e,0x35,0x36, - 0x34,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x35,0x39, - 0x2c,0x30,0x2c,0x32,0x2e,0x38,0x33,0x2c,0x30,0x2e, - 0x33,0x31,0x2c,0x33,0x2e,0x37,0x32,0x31,0x2c,0x30, - 0x2e,0x39,0x32,0x39,0x63,0x30,0x2e,0x38,0x39,0x31, - 0x2c,0x30,0x2e,0x36,0x31,0x37,0x2c,0x31,0x2e,0x33, - 0x33,0x36,0x2c,0x31,0x2e,0x35,0x34,0x33,0x2c,0x31, - 0x2e,0x33,0x33,0x36,0x2c,0x32,0x2e,0x37,0x37,0x33, - 0x63,0x30,0x2c,0x30,0x2e,0x36,0x32,0x35,0x2d,0x30, - 0x2e,0x31,0x36,0x36,0x2c,0x31,0x2e,0x31,0x38,0x34, - 0x2d,0x30,0x2e,0x34,0x39,0x36,0x2c,0x31,0x2e,0x36, - 0x37,0x34,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e, - 0x33,0x33,0x32,0x2c,0x30,0x2e,0x34,0x39,0x32,0x2d, - 0x30,0x2e,0x38,0x31,0x33,0x2c,0x30,0x2e,0x38,0x36, - 0x2d,0x31,0x2e,0x34,0x34,0x31,0x2c,0x31,0x2e,0x31, - 0x30,0x38,0x63,0x30,0x2e,0x38,0x31,0x31,0x2c,0x30, - 0x2e,0x31,0x37,0x34,0x2c,0x31,0x2e,0x34,0x31,0x38, - 0x2c,0x30,0x2e,0x35,0x34,0x34,0x2c,0x31,0x2e,0x38, - 0x32,0x31,0x2c,0x31,0x2e,0x31,0x31,0x33,0x63,0x30, - 0x2e,0x34,0x30,0x35,0x2c,0x30,0x2e,0x35,0x36,0x38, - 0x2c,0x30,0x2e,0x36,0x30,0x37,0x2c,0x31,0x2e,0x32, - 0x32,0x39,0x2c,0x30,0x2e,0x36,0x30,0x37,0x2c,0x31, - 0x2e,0x39,0x37,0x37,0x0a,0x09,0x09,0x09,0x43,0x32, - 0x34,0x2e,0x31,0x37,0x34,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x33,0x2c,0x32,0x33,0x2e,0x37,0x34,0x37,0x2c, - 0x32,0x33,0x2e,0x32,0x36,0x32,0x2c,0x32,0x32,0x2e, - 0x38,0x39,0x34,0x2c,0x32,0x33,0x2e,0x39,0x32,0x37, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e, - 0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f, - 0x70,0x61,0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x22, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x36, - 0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e,0x31,0x76,0x33, - 0x36,0x2e,0x38,0x36,0x31,0x48,0x30,0x2e,0x31,0x56, - 0x30,0x2e,0x31,0x48,0x33,0x36,0x2e,0x39,0x36,0x31, - 0x20,0x4d,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30, - 0x48,0x30,0x76,0x33,0x37,0x2e,0x30,0x36,0x68,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x56,0x30,0x4c,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e, - 0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76, - 0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__button_hotkey_svg.cpp b/data/converted/help__button_hotkey_svg.cpp deleted file mode 100644 index 0c5b590792..0000000000 --- a/data/converted/help__button_hotkey_svg.cpp +++ /dev/null @@ -1,199 +0,0 @@ -// this file was auto-generated from "button_hotkey.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__button_hotkey_svg_size = 1905; -const uint8_t help__button_hotkey_svg_data[1905] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0d,0x0a, - 0x3c,0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72, - 0x61,0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62, - 0x65,0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61, - 0x74,0x6f,0x72,0x20,0x31,0x33,0x2e,0x30,0x2e,0x30, - 0x2c,0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f, - 0x72,0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e, - 0x20,0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30, - 0x20,0x42,0x75,0x69,0x6c,0x64,0x20,0x31,0x34,0x39, - 0x34,0x38,0x29,0x20,0x20,0x2d,0x2d,0x3e,0x0d,0x0a, - 0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20, - 0x73,0x76,0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43, - 0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f, - 0x44,0x54,0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e, - 0x31,0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77, - 0x33,0x2e,0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70, - 0x68,0x69,0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31, - 0x2e,0x31,0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67, - 0x31,0x31,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0d,0x0a, - 0x3c,0x73,0x76,0x67,0x20,0x76,0x65,0x72,0x73,0x69, - 0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31,0x22,0x20,0x69, - 0x64,0x3d,0x22,0x5f,0x78,0x33,0x30,0x5f,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74, - 0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33, - 0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30,0x30,0x30,0x2f, - 0x73,0x76,0x67,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77, - 0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39, - 0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22,0x20,0x78,0x3d, - 0x22,0x30,0x70,0x78,0x22,0x20,0x79,0x3d,0x22,0x30, - 0x70,0x78,0x22,0x0d,0x0a,0x09,0x20,0x77,0x69,0x64, - 0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74, - 0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31,0x70,0x78, - 0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d, - 0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e,0x30,0x36, - 0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31,0x22,0x20, - 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, - 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, - 0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63, - 0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76, - 0x65,0x22,0x3e,0x0d,0x0a,0x3c,0x67,0x3e,0x0d,0x0a, - 0x09,0x3c,0x67,0x3e,0x0d,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x39,0x2e,0x31,0x36,0x35,0x2c, - 0x31,0x30,0x2e,0x34,0x36,0x39,0x63,0x2d,0x30,0x2e, - 0x37,0x35,0x32,0x2c,0x30,0x2d,0x31,0x2e,0x33,0x36, - 0x2c,0x30,0x2e,0x32,0x34,0x33,0x2d,0x31,0x2e,0x38, - 0x32,0x32,0x2c,0x30,0x2e,0x37,0x32,0x37,0x63,0x2d, - 0x30,0x2e,0x34,0x36,0x31,0x2c,0x30,0x2e,0x34,0x38, - 0x35,0x2d,0x30,0x2e,0x36,0x39,0x31,0x2c,0x31,0x2e, - 0x32,0x31,0x36,0x2d,0x30,0x2e,0x36,0x39,0x31,0x2c, - 0x32,0x2e,0x31,0x39,0x34,0x0d,0x0a,0x09,0x09,0x09, - 0x63,0x30,0x2c,0x30,0x2e,0x39,0x36,0x31,0x2c,0x30, - 0x2e,0x32,0x33,0x37,0x2c,0x31,0x2e,0x36,0x39,0x31, - 0x2c,0x30,0x2e,0x37,0x31,0x2c,0x32,0x2e,0x31,0x38, - 0x37,0x63,0x30,0x2e,0x34,0x37,0x33,0x2c,0x30,0x2e, - 0x34,0x39,0x37,0x2c,0x31,0x2e,0x30,0x37,0x35,0x2c, - 0x30,0x2e,0x37,0x34,0x35,0x2c,0x31,0x2e,0x38,0x30, - 0x33,0x2c,0x30,0x2e,0x37,0x34,0x35,0x63,0x30,0x2e, - 0x37,0x32,0x39,0x2c,0x30,0x2c,0x31,0x2e,0x33,0x32, - 0x39,0x2d,0x30,0x2e,0x32,0x34,0x37,0x2c,0x31,0x2e, - 0x37,0x39,0x35,0x2d,0x30,0x2e,0x37,0x33,0x39,0x0d, - 0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x34,0x36,0x38, - 0x2d,0x30,0x2e,0x34,0x39,0x32,0x2c,0x30,0x2e,0x37, - 0x30,0x32,0x2d,0x31,0x2e,0x32,0x33,0x31,0x2c,0x30, - 0x2e,0x37,0x30,0x32,0x2d,0x32,0x2e,0x32,0x31,0x36, - 0x63,0x30,0x2d,0x30,0x2e,0x39,0x37,0x33,0x2d,0x30, - 0x2e,0x32,0x32,0x39,0x2d,0x31,0x2e,0x37,0x2d,0x30, - 0x2e,0x36,0x38,0x33,0x2d,0x32,0x2e,0x31,0x37,0x39, - 0x43,0x32,0x30,0x2e,0x35,0x32,0x35,0x2c,0x31,0x30, - 0x2e,0x37,0x30,0x38,0x2c,0x31,0x39,0x2e,0x39,0x32, - 0x31,0x2c,0x31,0x30,0x2e,0x34,0x36,0x39,0x2c,0x31, - 0x39,0x2e,0x31,0x36,0x35,0x2c,0x31,0x30,0x2e,0x34, - 0x36,0x39,0x7a,0x20,0x4d,0x32,0x38,0x2e,0x37,0x35, - 0x38,0x2c,0x31,0x2e,0x35,0x36,0x35,0x0d,0x0a,0x09, - 0x09,0x09,0x48,0x38,0x2e,0x31,0x31,0x31,0x63,0x2d, - 0x33,0x2e,0x36,0x30,0x31,0x2c,0x30,0x2d,0x36,0x2e, - 0x35,0x32,0x2c,0x32,0x2e,0x39,0x31,0x39,0x2d,0x36, - 0x2e,0x35,0x32,0x2c,0x36,0x2e,0x35,0x32,0x76,0x32, - 0x30,0x2e,0x36,0x34,0x36,0x63,0x30,0x2c,0x33,0x2e, - 0x36,0x30,0x33,0x2c,0x32,0x2e,0x39,0x31,0x39,0x2c, - 0x36,0x2e,0x35,0x32,0x31,0x2c,0x36,0x2e,0x35,0x32, - 0x2c,0x36,0x2e,0x35,0x32,0x31,0x68,0x32,0x30,0x2e, - 0x36,0x34,0x37,0x63,0x33,0x2e,0x36,0x30,0x32,0x2c, - 0x30,0x2c,0x36,0x2e,0x35,0x32,0x31,0x2d,0x32,0x2e, - 0x39,0x31,0x38,0x2c,0x36,0x2e,0x35,0x32,0x31,0x2d, - 0x36,0x2e,0x35,0x32,0x31,0x56,0x38,0x2e,0x30,0x38, - 0x35,0x0d,0x0a,0x09,0x09,0x09,0x43,0x33,0x35,0x2e, - 0x32,0x37,0x39,0x2c,0x34,0x2e,0x34,0x38,0x35,0x2c, - 0x33,0x32,0x2e,0x33,0x36,0x2c,0x31,0x2e,0x35,0x36, - 0x35,0x2c,0x32,0x38,0x2e,0x37,0x35,0x38,0x2c,0x31, - 0x2e,0x35,0x36,0x35,0x7a,0x20,0x4d,0x36,0x2e,0x30, - 0x30,0x38,0x2c,0x39,0x2e,0x31,0x34,0x38,0x68,0x31, - 0x2e,0x38,0x32,0x38,0x76,0x33,0x2e,0x33,0x34,0x33, - 0x68,0x33,0x2e,0x35,0x38,0x33,0x56,0x39,0x2e,0x31, - 0x34,0x38,0x68,0x31,0x2e,0x38,0x32,0x39,0x76,0x38, - 0x2e,0x34,0x39,0x34,0x68,0x2d,0x31,0x2e,0x38,0x32, - 0x39,0x76,0x2d,0x33,0x2e,0x37,0x31,0x34,0x48,0x37, - 0x2e,0x38,0x33,0x36,0x76,0x33,0x2e,0x37,0x31,0x34, - 0x48,0x36,0x2e,0x30,0x30,0x38,0x0d,0x0a,0x09,0x09, - 0x09,0x56,0x39,0x2e,0x31,0x34,0x38,0x7a,0x20,0x4d, - 0x31,0x31,0x2e,0x38,0x32,0x37,0x2c,0x32,0x38,0x2e, - 0x35,0x30,0x38,0x6c,0x2d,0x32,0x2e,0x34,0x39,0x2d, - 0x33,0x2e,0x39,0x38,0x36,0x4c,0x37,0x2e,0x38,0x35, - 0x35,0x2c,0x32,0x35,0x2e,0x39,0x34,0x76,0x32,0x2e, - 0x35,0x36,0x38,0x48,0x36,0x2e,0x30,0x32,0x36,0x76, - 0x2d,0x38,0x2e,0x34,0x39,0x34,0x68,0x31,0x2e,0x38, - 0x32,0x39,0x76,0x33,0x2e,0x37,0x37,0x31,0x6c,0x33, - 0x2e,0x36,0x39,0x34,0x2d,0x33,0x2e,0x37,0x37,0x31, - 0x68,0x32,0x2e,0x34,0x35,0x39,0x6c,0x2d,0x33,0x2e, - 0x34,0x31,0x2c,0x33,0x2e,0x33,0x30,0x39,0x6c,0x33, - 0x2e,0x35,0x39,0x35,0x2c,0x35,0x2e,0x31,0x38,0x36, - 0x0d,0x0a,0x09,0x09,0x09,0x48,0x31,0x31,0x2e,0x38, - 0x32,0x37,0x7a,0x20,0x4d,0x32,0x32,0x2e,0x30,0x32, - 0x36,0x2c,0x32,0x38,0x2e,0x35,0x30,0x38,0x68,0x2d, - 0x36,0x2e,0x38,0x38,0x37,0x76,0x2d,0x38,0x2e,0x34, - 0x39,0x34,0x68,0x36,0x2e,0x37,0x31,0x35,0x76,0x31, - 0x2e,0x34,0x33,0x37,0x68,0x2d,0x34,0x2e,0x38,0x38, - 0x36,0x76,0x31,0x2e,0x38,0x38,0x33,0x68,0x34,0x2e, - 0x35,0x34,0x35,0x76,0x31,0x2e,0x34,0x33,0x33,0x68, - 0x2d,0x34,0x2e,0x35,0x34,0x35,0x76,0x32,0x2e,0x33, - 0x31,0x68,0x35,0x2e,0x30,0x35,0x38,0x56,0x32,0x38, - 0x2e,0x35,0x30,0x38,0x7a,0x20,0x4d,0x31,0x39,0x2e, - 0x31,0x37,0x32,0x2c,0x31,0x37,0x2e,0x37,0x38,0x37, - 0x0d,0x0a,0x09,0x09,0x09,0x63,0x2d,0x31,0x2e,0x33, - 0x34,0x36,0x2c,0x30,0x2d,0x32,0x2e,0x34,0x31,0x37, - 0x2d,0x30,0x2e,0x33,0x38,0x35,0x2d,0x33,0x2e,0x32, - 0x31,0x32,0x2d,0x31,0x2e,0x31,0x35,0x36,0x63,0x2d, - 0x30,0x2e,0x37,0x39,0x34,0x2d,0x30,0x2e,0x37,0x37, - 0x31,0x2d,0x31,0x2e,0x31,0x39,0x32,0x2d,0x31,0x2e, - 0x38,0x33,0x32,0x2d,0x31,0x2e,0x31,0x39,0x32,0x2d, - 0x33,0x2e,0x31,0x38,0x34,0x63,0x30,0x2d,0x30,0x2e, - 0x38,0x36,0x36,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2d, - 0x31,0x2e,0x35,0x39,0x32,0x2c,0x30,0x2e,0x34,0x31, - 0x34,0x2d,0x32,0x2e,0x31,0x37,0x39,0x0d,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x32,0x30,0x36,0x2d,0x30, - 0x2e,0x34,0x33,0x33,0x2c,0x30,0x2e,0x34,0x38,0x37, - 0x2d,0x30,0x2e,0x38,0x32,0x31,0x2c,0x30,0x2e,0x38, - 0x34,0x33,0x2d,0x31,0x2e,0x31,0x36,0x35,0x63,0x30, - 0x2e,0x33,0x35,0x37,0x2d,0x30,0x2e,0x33,0x34,0x33, - 0x2c,0x30,0x2e,0x37,0x34,0x37,0x2d,0x30,0x2e,0x35, - 0x39,0x38,0x2c,0x31,0x2e,0x31,0x37,0x31,0x2d,0x30, - 0x2e,0x37,0x36,0x35,0x63,0x30,0x2e,0x35,0x36,0x34, - 0x2d,0x30,0x2e,0x32,0x32,0x34,0x2c,0x31,0x2e,0x32, - 0x31,0x35,0x2d,0x30,0x2e,0x33,0x33,0x36,0x2c,0x31, - 0x2e,0x39,0x35,0x32,0x2d,0x30,0x2e,0x33,0x33,0x36, - 0x0d,0x0a,0x09,0x09,0x09,0x63,0x31,0x2e,0x33,0x33, - 0x35,0x2c,0x30,0x2c,0x32,0x2e,0x34,0x30,0x32,0x2c, - 0x30,0x2e,0x33,0x38,0x39,0x2c,0x33,0x2e,0x32,0x30, - 0x33,0x2c,0x31,0x2e,0x31,0x36,0x35,0x63,0x30,0x2e, - 0x38,0x2c,0x30,0x2e,0x37,0x37,0x36,0x2c,0x31,0x2e, - 0x32,0x30,0x31,0x2c,0x31,0x2e,0x38,0x35,0x36,0x2c, - 0x31,0x2e,0x32,0x30,0x31,0x2c,0x33,0x2e,0x32,0x33, - 0x39,0x63,0x30,0x2c,0x31,0x2e,0x33,0x37,0x32,0x2d, - 0x30,0x2e,0x33,0x39,0x36,0x2c,0x32,0x2e,0x34,0x34, - 0x34,0x2d,0x31,0x2e,0x31,0x39,0x32,0x2c,0x33,0x2e, - 0x32,0x31,0x39,0x0d,0x0a,0x09,0x09,0x09,0x43,0x32, - 0x31,0x2e,0x35,0x36,0x36,0x2c,0x31,0x37,0x2e,0x34, - 0x2c,0x32,0x30,0x2e,0x35,0x30,0x32,0x2c,0x31,0x37, - 0x2e,0x37,0x38,0x37,0x2c,0x31,0x39,0x2e,0x31,0x37, - 0x32,0x2c,0x31,0x37,0x2e,0x37,0x38,0x37,0x7a,0x20, - 0x4d,0x32,0x37,0x2e,0x37,0x37,0x38,0x2c,0x32,0x34, - 0x2e,0x39,0x34,0x35,0x76,0x33,0x2e,0x35,0x36,0x33, - 0x68,0x2d,0x31,0x2e,0x38,0x32,0x33,0x76,0x2d,0x33, - 0x2e,0x35,0x37,0x33,0x6c,0x2d,0x33,0x2e,0x33,0x31, - 0x37,0x2d,0x34,0x2e,0x39,0x32,0x31,0x68,0x32,0x2e, - 0x31,0x34,0x34,0x6c,0x32,0x2e,0x31,0x33,0x32,0x2c, - 0x33,0x2e,0x33,0x36,0x4c,0x32,0x39,0x2c,0x32,0x30, - 0x2e,0x30,0x31,0x34,0x68,0x32,0x2e,0x31,0x30,0x36, - 0x0d,0x0a,0x09,0x09,0x09,0x4c,0x32,0x37,0x2e,0x37, - 0x37,0x38,0x2c,0x32,0x34,0x2e,0x39,0x34,0x35,0x7a, - 0x20,0x4d,0x33,0x31,0x2e,0x35,0x32,0x37,0x2c,0x31, - 0x30,0x2e,0x35,0x38,0x35,0x68,0x2d,0x32,0x2e,0x36, - 0x38,0x31,0x76,0x37,0x2e,0x30,0x35,0x37,0x68,0x2d, - 0x31,0x2e,0x38,0x32,0x38,0x76,0x2d,0x37,0x2e,0x30, - 0x35,0x37,0x68,0x2d,0x32,0x2e,0x36,0x38,0x37,0x56, - 0x39,0x2e,0x31,0x34,0x38,0x68,0x37,0x2e,0x31,0x39, - 0x35,0x56,0x31,0x30,0x2e,0x35,0x38,0x35,0x7a,0x22, - 0x2f,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0d, - 0x0a,0x3c,0x2f,0x67,0x3e,0x0d,0x0a,0x3c,0x2f,0x73, - 0x76,0x67,0x3e,0x0d,0x0a -}; - diff --git a/data/converted/help__button_l_svg.cpp b/data/converted/help__button_l_svg.cpp deleted file mode 100644 index a34482f467..0000000000 --- a/data/converted/help__button_l_svg.cpp +++ /dev/null @@ -1,110 +0,0 @@ -// this file was auto-generated from "button_l.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__button_l_svg_size = 1013; -const uint8_t help__button_l_svg_data[1013] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x32, - 0x35,0x34,0x2c,0x31,0x31,0x2e,0x35,0x32,0x36,0x63, - 0x33,0x2e,0x34,0x37,0x38,0x2c,0x30,0x2c,0x36,0x2e, - 0x33,0x30,0x37,0x2c,0x33,0x2e,0x31,0x34,0x2c,0x36, - 0x2e,0x33,0x30,0x37,0x2c,0x36,0x2e,0x39,0x39,0x37, - 0x63,0x30,0x2c,0x33,0x2e,0x38,0x36,0x36,0x2d,0x32, - 0x2e,0x38,0x32,0x39,0x2c,0x37,0x2e,0x30,0x31,0x31, - 0x2d,0x36,0x2e,0x33,0x30,0x37,0x2c,0x37,0x2e,0x30, - 0x31,0x31,0x48,0x37,0x2e,0x37,0x36,0x0a,0x09,0x09, - 0x63,0x2d,0x33,0x2e,0x34,0x35,0x32,0x2d,0x30,0x2e, - 0x30,0x33,0x2d,0x36,0x2e,0x32,0x36,0x2d,0x33,0x2e, - 0x31,0x37,0x37,0x2d,0x36,0x2e,0x32,0x36,0x2d,0x37, - 0x2e,0x30,0x31,0x31,0x63,0x30,0x2d,0x33,0x2e,0x38, - 0x32,0x38,0x2c,0x32,0x2e,0x38,0x30,0x38,0x2d,0x36, - 0x2e,0x39,0x36,0x36,0x2c,0x36,0x2e,0x32,0x34,0x37, - 0x2d,0x36,0x2e,0x39,0x39,0x37,0x48,0x32,0x39,0x2e, - 0x32,0x35,0x34,0x20,0x4d,0x32,0x39,0x2e,0x32,0x35, - 0x34,0x2c,0x31,0x30,0x2e,0x30,0x32,0x36,0x63,0x2d, - 0x30,0x2e,0x30,0x32,0x31,0x2c,0x30,0x2d,0x32,0x31, - 0x2e,0x35,0x30,0x37,0x2c,0x30,0x2d,0x32,0x31,0x2e, - 0x35,0x30,0x37,0x2c,0x30,0x0a,0x09,0x09,0x43,0x33, - 0x2e,0x34,0x36,0x36,0x2c,0x31,0x30,0x2e,0x30,0x36, - 0x34,0x2c,0x30,0x2c,0x31,0x33,0x2e,0x38,0x34,0x36, - 0x2c,0x30,0x2c,0x31,0x38,0x2e,0x35,0x32,0x33,0x63, - 0x30,0x2c,0x34,0x2e,0x36,0x37,0x38,0x2c,0x33,0x2e, - 0x34,0x36,0x36,0x2c,0x38,0x2e,0x34,0x37,0x33,0x2c, - 0x37,0x2e,0x37,0x34,0x37,0x2c,0x38,0x2e,0x35,0x31, - 0x31,0x63,0x30,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x34, - 0x38,0x33,0x2c,0x30,0x2c,0x32,0x31,0x2e,0x35,0x30, - 0x37,0x2c,0x30,0x63,0x34,0x2e,0x33,0x31,0x33,0x2c, - 0x30,0x2c,0x37,0x2e,0x38,0x30,0x37,0x2d,0x33,0x2e, - 0x38,0x31,0x32,0x2c,0x37,0x2e,0x38,0x30,0x37,0x2d, - 0x38,0x2e,0x35,0x31,0x31,0x0a,0x09,0x09,0x53,0x33, - 0x33,0x2e,0x35,0x36,0x36,0x2c,0x31,0x30,0x2e,0x30, - 0x32,0x36,0x2c,0x32,0x39,0x2e,0x32,0x35,0x34,0x2c, - 0x31,0x30,0x2e,0x30,0x32,0x36,0x4c,0x32,0x39,0x2e, - 0x32,0x35,0x34,0x2c,0x31,0x30,0x2e,0x30,0x32,0x36, - 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x70,0x6f,0x6c,0x79,0x67,0x6f,0x6e,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x70,0x6f,0x69,0x6e,0x74,0x73, - 0x3d,0x22,0x31,0x35,0x2e,0x39,0x32,0x2c,0x32,0x32, - 0x2e,0x32,0x31,0x32,0x20,0x32,0x31,0x2e,0x31,0x34, - 0x31,0x2c,0x32,0x32,0x2e,0x32,0x31,0x32,0x20,0x32, - 0x31,0x2e,0x31,0x34,0x31,0x2c,0x32,0x30,0x2e,0x38, - 0x35,0x20,0x31,0x37,0x2e,0x35,0x34,0x33,0x2c,0x32, - 0x30,0x2e,0x38,0x35,0x20,0x31,0x37,0x2e,0x35,0x34, - 0x33,0x2c,0x31,0x34,0x2e,0x38,0x33,0x33,0x20,0x31, - 0x35,0x2e,0x39,0x32,0x2c,0x31,0x34,0x2e,0x38,0x33, - 0x33,0x20,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x73,0x76, - 0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__button_r_svg.cpp b/data/converted/help__button_r_svg.cpp deleted file mode 100644 index 79f5a5e747..0000000000 --- a/data/converted/help__button_r_svg.cpp +++ /dev/null @@ -1,140 +0,0 @@ -// this file was auto-generated from "button_r.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__button_r_svg_size = 1315; -const uint8_t help__button_r_svg_data[1315] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x31,0x36,0x2e,0x39,0x37,0x33,0x2c,0x31,0x36, - 0x2e,0x30,0x38,0x36,0x68,0x31,0x2e,0x37,0x37,0x39, - 0x63,0x30,0x2e,0x37,0x32,0x32,0x2c,0x30,0x2c,0x31, - 0x2e,0x31,0x31,0x37,0x2c,0x30,0x2e,0x33,0x31,0x32, - 0x2c,0x31,0x2e,0x31,0x31,0x37,0x2c,0x31,0x2e,0x30, - 0x32,0x32,0x63,0x30,0x2c,0x30,0x2e,0x37,0x34,0x37, - 0x2d,0x30,0x2e,0x33,0x39,0x36,0x2c,0x31,0x2e,0x30, - 0x36,0x2d,0x31,0x2e,0x31,0x31,0x37,0x2c,0x31,0x2e, - 0x30,0x36,0x68,0x2d,0x31,0x2e,0x37,0x37,0x39,0x56, - 0x31,0x36,0x2e,0x30,0x38,0x36,0x7a,0x0a,0x09,0x20, - 0x4d,0x31,0x35,0x2e,0x33,0x35,0x33,0x2c,0x32,0x32, - 0x2e,0x32,0x31,0x32,0x68,0x31,0x2e,0x36,0x32,0x76, - 0x2d,0x32,0x2e,0x38,0x38,0x36,0x68,0x31,0x2e,0x36, - 0x32,0x35,0x63,0x30,0x2e,0x38,0x31,0x36,0x2c,0x30, - 0x2c,0x31,0x2e,0x31,0x31,0x37,0x2c,0x30,0x2e,0x33, - 0x34,0x32,0x2c,0x31,0x2e,0x32,0x33,0x2c,0x31,0x2e, - 0x31,0x31,0x38,0x63,0x30,0x2e,0x30,0x38,0x32,0x2c, - 0x30,0x2e,0x35,0x38,0x39,0x2c,0x30,0x2e,0x30,0x36, - 0x31,0x2c,0x31,0x2e,0x33,0x30,0x34,0x2c,0x30,0x2e, - 0x32,0x35,0x38,0x2c,0x31,0x2e,0x37,0x36,0x39,0x68, - 0x31,0x2e,0x36,0x32,0x31,0x0a,0x09,0x63,0x2d,0x30, - 0x2e,0x32,0x38,0x39,0x2d,0x30,0x2e,0x34,0x31,0x34, - 0x2d,0x30,0x2e,0x32,0x37,0x39,0x2d,0x31,0x2e,0x32, - 0x38,0x2d,0x30,0x2e,0x33,0x31,0x33,0x2d,0x31,0x2e, - 0x37,0x34,0x38,0x63,0x2d,0x30,0x2e,0x30,0x35,0x31, - 0x2d,0x30,0x2e,0x37,0x34,0x34,0x2d,0x30,0x2e,0x32, - 0x37,0x35,0x2d,0x31,0x2e,0x35,0x32,0x31,0x2d,0x31, - 0x2e,0x30,0x37,0x2d,0x31,0x2e,0x37,0x32,0x38,0x63, - 0x30,0x2c,0x30,0x2c,0x31,0x2e,0x31,0x36,0x36,0x2d, - 0x30,0x2e,0x33,0x30,0x33,0x2c,0x31,0x2e,0x31,0x36, - 0x36,0x2d,0x31,0x2e,0x38,0x37,0x33,0x0a,0x09,0x63, - 0x30,0x2d,0x31,0x2e,0x31,0x31,0x38,0x2d,0x30,0x2e, - 0x38,0x33,0x38,0x2d,0x32,0x2e,0x30,0x33,0x36,0x2d, - 0x32,0x2e,0x31,0x36,0x2d,0x32,0x2e,0x30,0x33,0x36, - 0x68,0x2d,0x33,0x2e,0x39,0x37,0x39,0x4c,0x31,0x35, - 0x2e,0x33,0x35,0x33,0x2c,0x32,0x32,0x2e,0x32,0x31, - 0x32,0x4c,0x31,0x35,0x2e,0x33,0x35,0x33,0x2c,0x32, - 0x32,0x2e,0x32,0x31,0x32,0x7a,0x22,0x2f,0x3e,0x0a, - 0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x32,0x39,0x2e,0x32,0x35,0x34,0x2c,0x31,0x31,0x2e, - 0x35,0x32,0x36,0x63,0x33,0x2e,0x34,0x37,0x38,0x2c, - 0x30,0x2c,0x36,0x2e,0x33,0x30,0x37,0x2c,0x33,0x2e, - 0x31,0x34,0x2c,0x36,0x2e,0x33,0x30,0x37,0x2c,0x36, - 0x2e,0x39,0x39,0x36,0x63,0x30,0x2c,0x33,0x2e,0x38, - 0x36,0x36,0x2d,0x32,0x2e,0x38,0x32,0x39,0x2c,0x37, - 0x2e,0x30,0x31,0x32,0x2d,0x36,0x2e,0x33,0x30,0x37, - 0x2c,0x37,0x2e,0x30,0x31,0x32,0x48,0x37,0x2e,0x37, - 0x36,0x0a,0x09,0x09,0x63,0x2d,0x33,0x2e,0x34,0x35, - 0x32,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x36,0x2e,0x32, - 0x36,0x2d,0x33,0x2e,0x31,0x37,0x37,0x2d,0x36,0x2e, - 0x32,0x36,0x2d,0x37,0x2e,0x30,0x31,0x32,0x63,0x30, - 0x2d,0x33,0x2e,0x38,0x32,0x37,0x2c,0x32,0x2e,0x38, - 0x30,0x38,0x2d,0x36,0x2e,0x39,0x36,0x36,0x2c,0x36, - 0x2e,0x32,0x34,0x37,0x2d,0x36,0x2e,0x39,0x39,0x36, - 0x48,0x32,0x39,0x2e,0x32,0x35,0x34,0x20,0x4d,0x32, - 0x39,0x2e,0x32,0x35,0x34,0x2c,0x31,0x30,0x2e,0x30, - 0x32,0x36,0x63,0x2d,0x30,0x2e,0x30,0x32,0x31,0x2c, - 0x30,0x2d,0x32,0x31,0x2e,0x35,0x30,0x37,0x2c,0x30, - 0x2d,0x32,0x31,0x2e,0x35,0x30,0x37,0x2c,0x30,0x0a, - 0x09,0x09,0x43,0x33,0x2e,0x34,0x36,0x36,0x2c,0x31, - 0x30,0x2e,0x30,0x36,0x33,0x2c,0x30,0x2c,0x31,0x33, - 0x2e,0x38,0x34,0x36,0x2c,0x30,0x2c,0x31,0x38,0x2e, - 0x35,0x32,0x32,0x63,0x30,0x2c,0x34,0x2e,0x36,0x37, - 0x39,0x2c,0x33,0x2e,0x34,0x36,0x36,0x2c,0x38,0x2e, - 0x34,0x37,0x33,0x2c,0x37,0x2e,0x37,0x34,0x37,0x2c, - 0x38,0x2e,0x35,0x31,0x32,0x63,0x30,0x2c,0x30,0x2c, - 0x32,0x31,0x2e,0x34,0x38,0x33,0x2c,0x30,0x2c,0x32, - 0x31,0x2e,0x35,0x30,0x37,0x2c,0x30,0x63,0x34,0x2e, - 0x33,0x31,0x33,0x2c,0x30,0x2c,0x37,0x2e,0x38,0x30, - 0x37,0x2d,0x33,0x2e,0x38,0x31,0x32,0x2c,0x37,0x2e, - 0x38,0x30,0x37,0x2d,0x38,0x2e,0x35,0x31,0x32,0x0a, - 0x09,0x09,0x43,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c, - 0x31,0x33,0x2e,0x38,0x32,0x33,0x2c,0x33,0x33,0x2e, - 0x35,0x36,0x36,0x2c,0x31,0x30,0x2e,0x30,0x32,0x36, - 0x2c,0x32,0x39,0x2e,0x32,0x35,0x34,0x2c,0x31,0x30, - 0x2e,0x30,0x32,0x36,0x4c,0x32,0x39,0x2e,0x32,0x35, - 0x34,0x2c,0x31,0x30,0x2e,0x30,0x32,0x36,0x7a,0x22, - 0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f, - 0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__button_select_svg.cpp b/data/converted/help__button_select_svg.cpp deleted file mode 100644 index 5092d70ff2..0000000000 --- a/data/converted/help__button_select_svg.cpp +++ /dev/null @@ -1,195 +0,0 @@ -// this file was auto-generated from "button_select.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__button_select_svg_size = 1866; -const uint8_t help__button_select_svg_data[1866] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x33,0x33,0x2e,0x32,0x31,0x37,0x2c,0x31, - 0x39,0x2e,0x31,0x31,0x38,0x48,0x33,0x2e,0x38,0x34, - 0x35,0x43,0x31,0x2e,0x37,0x32,0x32,0x2c,0x31,0x39, - 0x2e,0x31,0x31,0x38,0x2c,0x30,0x2c,0x32,0x30,0x2e, - 0x38,0x39,0x2c,0x30,0x2c,0x32,0x33,0x2e,0x30,0x37, - 0x35,0x73,0x31,0x2e,0x37,0x32,0x32,0x2c,0x33,0x2e, - 0x39,0x35,0x37,0x2c,0x33,0x2e,0x38,0x34,0x35,0x2c, - 0x33,0x2e,0x39,0x35,0x37,0x68,0x32,0x39,0x2e,0x33, - 0x37,0x32,0x0a,0x09,0x09,0x09,0x63,0x32,0x2e,0x31, - 0x32,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x38,0x34,0x34, - 0x2d,0x31,0x2e,0x37,0x37,0x31,0x2c,0x33,0x2e,0x38, - 0x34,0x34,0x2d,0x33,0x2e,0x39,0x35,0x37,0x43,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x2c,0x32,0x30,0x2e,0x38, - 0x38,0x39,0x2c,0x33,0x35,0x2e,0x33,0x34,0x2c,0x31, - 0x39,0x2e,0x31,0x31,0x38,0x2c,0x33,0x33,0x2e,0x32, - 0x31,0x37,0x2c,0x31,0x39,0x2e,0x31,0x31,0x38,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x33,0x33,0x2e,0x37,0x35,0x37,0x2c,0x31,0x35,0x2e, - 0x35,0x34,0x39,0x68,0x31,0x2e,0x31,0x38,0x36,0x56, - 0x39,0x2e,0x34,0x37,0x34,0x68,0x32,0x2e,0x31,0x32, - 0x34,0x56,0x38,0x2e,0x33,0x34,0x35,0x68,0x2d,0x35, - 0x2e,0x34,0x33,0x33,0x76,0x31,0x2e,0x31,0x32,0x38, - 0x68,0x32,0x2e,0x31,0x32,0x33,0x56,0x31,0x35,0x2e, - 0x35,0x34,0x39,0x7a,0x20,0x4d,0x33,0x30,0x2e,0x38, - 0x35,0x35,0x2c,0x31,0x31,0x2e,0x30,0x30,0x37,0x0a, - 0x09,0x63,0x2d,0x30,0x2e,0x31,0x32,0x36,0x2d,0x31, - 0x2e,0x35,0x35,0x34,0x2d,0x31,0x2e,0x31,0x34,0x31, - 0x2d,0x32,0x2e,0x38,0x36,0x34,0x2d,0x33,0x2e,0x30, - 0x38,0x37,0x2d,0x32,0x2e,0x38,0x36,0x34,0x63,0x2d, - 0x32,0x2e,0x32,0x32,0x35,0x2c,0x30,0x2d,0x33,0x2e, - 0x31,0x36,0x32,0x2c,0x31,0x2e,0x37,0x37,0x33,0x2d, - 0x33,0x2e,0x31,0x36,0x32,0x2c,0x33,0x2e,0x38,0x30, - 0x35,0x63,0x30,0x2c,0x32,0x2e,0x30,0x32,0x36,0x2c, - 0x30,0x2e,0x39,0x37,0x39,0x2c,0x33,0x2e,0x38,0x30, - 0x34,0x2c,0x33,0x2e,0x30,0x32,0x31,0x2c,0x33,0x2e, - 0x38,0x30,0x34,0x0a,0x09,0x63,0x32,0x2e,0x33,0x32, - 0x38,0x2c,0x30,0x2c,0x33,0x2e,0x30,0x36,0x33,0x2d, - 0x31,0x2e,0x35,0x32,0x31,0x2c,0x33,0x2e,0x32,0x32, - 0x39,0x2d,0x32,0x2e,0x39,0x35,0x38,0x68,0x2d,0x31, - 0x2e,0x32,0x38,0x63,0x2d,0x30,0x2e,0x30,0x39,0x39, - 0x2c,0x30,0x2e,0x37,0x35,0x37,0x2d,0x30,0x2e,0x35, - 0x31,0x2c,0x31,0x2e,0x38,0x32,0x39,0x2d,0x31,0x2e, - 0x37,0x34,0x33,0x2c,0x31,0x2e,0x38,0x32,0x39,0x63, - 0x2d,0x31,0x2e,0x31,0x37,0x35,0x2c,0x30,0x2d,0x31, - 0x2e,0x39,0x38,0x38,0x2d,0x31,0x2e,0x30,0x34,0x32, - 0x2d,0x31,0x2e,0x39,0x38,0x38,0x2d,0x32,0x2e,0x35, - 0x34,0x36,0x0a,0x09,0x63,0x30,0x2d,0x31,0x2e,0x38, - 0x37,0x37,0x2c,0x30,0x2e,0x38,0x31,0x33,0x2d,0x32, - 0x2e,0x38,0x30,0x38,0x2c,0x31,0x2e,0x39,0x30,0x38, - 0x2d,0x32,0x2e,0x38,0x30,0x38,0x63,0x30,0x2e,0x39, - 0x39,0x39,0x2c,0x30,0x2c,0x31,0x2e,0x37,0x30,0x34, - 0x2c,0x30,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x38, - 0x32,0x33,0x2c,0x31,0x2e,0x37,0x33,0x37,0x4c,0x33, - 0x30,0x2e,0x38,0x35,0x35,0x2c,0x31,0x31,0x2e,0x30, - 0x30,0x37,0x4c,0x33,0x30,0x2e,0x38,0x35,0x35,0x2c, - 0x31,0x31,0x2e,0x30,0x30,0x37,0x7a,0x20,0x4d,0x31, - 0x38,0x2e,0x36,0x35,0x39,0x2c,0x31,0x35,0x2e,0x35, - 0x34,0x39,0x68,0x34,0x2e,0x39,0x37,0x33,0x56,0x31, - 0x34,0x2e,0x34,0x32,0x68,0x2d,0x33,0x2e,0x37,0x38, - 0x36,0x0a,0x09,0x76,0x2d,0x31,0x2e,0x39,0x39,0x38, - 0x68,0x33,0x2e,0x35,0x37,0x33,0x76,0x2d,0x31,0x2e, - 0x31,0x32,0x39,0x68,0x2d,0x33,0x2e,0x35,0x37,0x33, - 0x56,0x39,0x2e,0x34,0x37,0x34,0x68,0x33,0x2e,0x37, - 0x32,0x31,0x56,0x38,0x2e,0x33,0x34,0x35,0x48,0x31, - 0x38,0x2e,0x36,0x36,0x4c,0x31,0x38,0x2e,0x36,0x35, - 0x39,0x2c,0x31,0x35,0x2e,0x35,0x34,0x39,0x4c,0x31, - 0x38,0x2e,0x36,0x35,0x39,0x2c,0x31,0x35,0x2e,0x35, - 0x34,0x39,0x7a,0x20,0x4d,0x31,0x32,0x2e,0x39,0x37, - 0x39,0x2c,0x31,0x35,0x2e,0x35,0x34,0x39,0x68,0x34, - 0x2e,0x36,0x32,0x35,0x76,0x2d,0x31,0x2e,0x31,0x38, - 0x38,0x68,0x2d,0x33,0x2e,0x34,0x33,0x37,0x56,0x38, - 0x2e,0x33,0x34,0x35,0x0a,0x09,0x68,0x2d,0x31,0x2e, - 0x31,0x38,0x38,0x56,0x31,0x35,0x2e,0x35,0x34,0x39, - 0x7a,0x20,0x4d,0x36,0x2e,0x37,0x31,0x34,0x2c,0x31, - 0x35,0x2e,0x35,0x34,0x39,0x68,0x34,0x2e,0x39,0x37, - 0x34,0x56,0x31,0x34,0x2e,0x34,0x32,0x48,0x37,0x2e, - 0x39,0x30,0x32,0x76,0x2d,0x31,0x2e,0x39,0x39,0x38, - 0x68,0x33,0x2e,0x35,0x37,0x32,0x76,0x2d,0x31,0x2e, - 0x31,0x32,0x39,0x48,0x37,0x2e,0x39,0x30,0x32,0x56, - 0x39,0x2e,0x34,0x37,0x34,0x68,0x33,0x2e,0x37,0x32, - 0x36,0x56,0x38,0x2e,0x33,0x34,0x35,0x48,0x36,0x2e, - 0x37,0x31,0x34,0x56,0x31,0x35,0x2e,0x35,0x34,0x39, - 0x7a,0x20,0x4d,0x30,0x2e,0x31,0x34,0x39,0x2c,0x31, - 0x30,0x2e,0x33,0x37,0x32,0x0a,0x09,0x63,0x30,0x2c, - 0x32,0x2e,0x39,0x35,0x35,0x2c,0x34,0x2e,0x31,0x36, - 0x37,0x2c,0x31,0x2e,0x33,0x39,0x38,0x2c,0x34,0x2e, - 0x31,0x36,0x37,0x2c,0x33,0x2e,0x31,0x38,0x36,0x63, - 0x30,0x2c,0x30,0x2e,0x37,0x39,0x32,0x2d,0x30,0x2e, - 0x36,0x37,0x33,0x2c,0x31,0x2e,0x30,0x36,0x34,0x2d, - 0x31,0x2e,0x33,0x39,0x35,0x2c,0x31,0x2e,0x30,0x36, - 0x34,0x63,0x2d,0x30,0x2e,0x39,0x37,0x36,0x2c,0x30, - 0x2d,0x31,0x2e,0x35,0x39,0x31,0x2d,0x30,0x2e,0x34, - 0x35,0x36,0x2d,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31, - 0x2e,0x34,0x30,0x37,0x48,0x30,0x2e,0x30,0x31,0x35, - 0x0a,0x09,0x43,0x30,0x2e,0x30,0x33,0x2c,0x31,0x34, - 0x2e,0x37,0x33,0x2c,0x30,0x2e,0x38,0x34,0x36,0x2c, - 0x31,0x35,0x2e,0x37,0x35,0x2c,0x32,0x2e,0x38,0x38, - 0x32,0x2c,0x31,0x35,0x2e,0x37,0x35,0x63,0x31,0x2e, - 0x32,0x30,0x35,0x2c,0x30,0x2c,0x32,0x2e,0x37,0x31, - 0x36,0x2d,0x30,0x2e,0x34,0x38,0x34,0x2c,0x32,0x2e, - 0x37,0x31,0x36,0x2d,0x32,0x2e,0x33,0x34,0x33,0x63, - 0x30,0x2d,0x33,0x2e,0x30,0x37,0x37,0x2d,0x34,0x2e, - 0x32,0x31,0x33,0x2d,0x31,0x2e,0x34,0x35,0x35,0x2d, - 0x34,0x2e,0x32,0x31,0x33,0x2d,0x33,0x2e,0x31,0x34, - 0x36,0x0a,0x09,0x63,0x30,0x2d,0x30,0x2e,0x36,0x37, - 0x37,0x2c,0x30,0x2e,0x35,0x32,0x33,0x2d,0x30,0x2e, - 0x39,0x39,0x31,0x2c,0x31,0x2e,0x33,0x31,0x33,0x2d, - 0x30,0x2e,0x39,0x39,0x31,0x63,0x30,0x2e,0x39,0x39, - 0x2c,0x30,0x2c,0x31,0x2e,0x33,0x38,0x38,0x2c,0x30, - 0x2e,0x36,0x30,0x35,0x2c,0x31,0x2e,0x34,0x32,0x38, - 0x2c,0x31,0x2e,0x31,0x36,0x33,0x48,0x35,0x2e,0x34, - 0x31,0x63,0x2d,0x30,0x2e,0x31,0x35,0x32,0x2d,0x32, - 0x2e,0x30,0x39,0x31,0x2d,0x31,0x2e,0x38,0x39,0x36, - 0x2d,0x32,0x2e,0x32,0x39,0x2d,0x32,0x2e,0x37,0x36, - 0x37,0x2d,0x32,0x2e,0x32,0x39,0x0a,0x09,0x43,0x31, - 0x2e,0x32,0x36,0x36,0x2c,0x38,0x2e,0x31,0x34,0x33, - 0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x38,0x2e,0x37, - 0x36,0x37,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2c,0x31, - 0x30,0x2e,0x33,0x37,0x32,0x22,0x2f,0x3e,0x0a,0x3c, - 0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74,0x79,0x3d, - 0x22,0x30,0x22,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x33,0x36,0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e, - 0x31,0x76,0x33,0x36,0x2e,0x38,0x36,0x31,0x48,0x30, - 0x2e,0x31,0x56,0x30,0x2e,0x31,0x48,0x33,0x36,0x2e, - 0x39,0x36,0x31,0x20,0x4d,0x33,0x37,0x2e,0x30,0x36, - 0x31,0x2c,0x30,0x48,0x30,0x76,0x33,0x37,0x2e,0x30, - 0x36,0x68,0x33,0x37,0x2e,0x30,0x36,0x31,0x56,0x30, - 0x4c,0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x7a, - 0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, - 0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__button_start_svg.cpp b/data/converted/help__button_start_svg.cpp deleted file mode 100644 index 0ba7caf37e..0000000000 --- a/data/converted/help__button_start_svg.cpp +++ /dev/null @@ -1,185 +0,0 @@ -// this file was auto-generated from "button_start.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__button_start_svg_size = 1769; -const uint8_t help__button_start_svg_data[1769] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x33,0x33,0x2e,0x30,0x36,0x35,0x2c,0x31,0x35, - 0x2e,0x35,0x34,0x38,0x68,0x31,0x2e,0x34,0x33,0x38, - 0x56,0x39,0x2e,0x34,0x37,0x31,0x68,0x32,0x2e,0x35, - 0x36,0x33,0x76,0x2d,0x31,0x2e,0x31,0x33,0x68,0x2d, - 0x36,0x2e,0x35,0x36,0x33,0x76,0x31,0x2e,0x31,0x33, - 0x68,0x32,0x2e,0x35,0x36,0x33,0x4c,0x33,0x33,0x2e, - 0x30,0x36,0x35,0x2c,0x31,0x35,0x2e,0x35,0x34,0x38, - 0x4c,0x33,0x33,0x2e,0x30,0x36,0x35,0x2c,0x31,0x35, - 0x2e,0x35,0x34,0x38,0x7a,0x20,0x4d,0x32,0x34,0x2e, - 0x33,0x35,0x31,0x2c,0x31,0x31,0x2e,0x35,0x37,0x33, - 0x0a,0x09,0x56,0x39,0x2e,0x34,0x37,0x31,0x68,0x32, - 0x2e,0x34,0x38,0x32,0x63,0x30,0x2e,0x37,0x35,0x35, - 0x2c,0x30,0x2c,0x31,0x2e,0x32,0x32,0x36,0x2c,0x30, - 0x2e,0x32,0x39,0x32,0x2c,0x31,0x2e,0x32,0x32,0x36, - 0x2c,0x31,0x2e,0x30,0x33,0x39,0x63,0x30,0x2c,0x30, - 0x2e,0x38,0x30,0x38,0x2d,0x30,0x2e,0x34,0x33,0x32, - 0x2c,0x31,0x2e,0x30,0x36,0x33,0x2d,0x31,0x2e,0x32, - 0x32,0x36,0x2c,0x31,0x2e,0x30,0x36,0x33,0x48,0x32, - 0x34,0x2e,0x33,0x35,0x31,0x7a,0x20,0x4d,0x32,0x32, - 0x2e,0x39,0x31,0x37,0x2c,0x31,0x35,0x2e,0x35,0x34, - 0x38,0x68,0x31,0x2e,0x34,0x33,0x34,0x76,0x2d,0x32, - 0x2e,0x38,0x34,0x36,0x68,0x32,0x2e,0x34,0x34,0x33, - 0x0a,0x09,0x63,0x31,0x2e,0x30,0x35,0x33,0x2c,0x30, - 0x2c,0x31,0x2e,0x31,0x38,0x38,0x2c,0x30,0x2e,0x37, - 0x32,0x37,0x2c,0x31,0x2e,0x31,0x38,0x38,0x2c,0x31, - 0x2e,0x37,0x35,0x35,0x63,0x30,0x2c,0x30,0x2e,0x35, - 0x32,0x36,0x2c,0x30,0x2e,0x30,0x36,0x38,0x2c,0x30, - 0x2e,0x38,0x39,0x2c,0x30,0x2e,0x31,0x37,0x34,0x2c, - 0x31,0x2e,0x30,0x39,0x31,0x68,0x31,0x2e,0x35,0x35, - 0x32,0x63,0x2d,0x30,0x2e,0x32,0x38,0x31,0x2d,0x30, - 0x2e,0x33,0x39,0x35,0x2d,0x30,0x2e,0x32,0x39,0x2d, - 0x31,0x2e,0x31,0x39,0x39,0x2d,0x30,0x2e,0x32,0x39, - 0x2d,0x31,0x2e,0x35,0x34,0x36,0x0a,0x09,0x63,0x30, - 0x2d,0x31,0x2e,0x30,0x31,0x39,0x2d,0x30,0x2e,0x31, - 0x38,0x2d,0x31,0x2e,0x37,0x36,0x36,0x2d,0x30,0x2e, - 0x39,0x39,0x34,0x2d,0x31,0x2e,0x39,0x34,0x35,0x76, - 0x2d,0x30,0x2e,0x30,0x32,0x31,0x63,0x30,0x2e,0x36, - 0x34,0x33,0x2d,0x30,0x2e,0x32,0x31,0x31,0x2c,0x31, - 0x2e,0x31,0x32,0x38,0x2d,0x30,0x2e,0x37,0x39,0x37, - 0x2c,0x31,0x2e,0x31,0x32,0x38,0x2d,0x31,0x2e,0x37, - 0x33,0x37,0x63,0x30,0x2d,0x31,0x2e,0x31,0x31,0x39, - 0x2d,0x30,0x2e,0x35,0x36,0x33,0x2d,0x31,0x2e,0x39, - 0x35,0x34,0x2d,0x32,0x2e,0x33,0x30,0x35,0x2d,0x31, - 0x2e,0x39,0x35,0x34,0x68,0x2d,0x34,0x2e,0x33,0x32, - 0x37,0x4c,0x32,0x32,0x2e,0x39,0x31,0x37,0x2c,0x31, - 0x35,0x2e,0x35,0x34,0x38,0x0a,0x09,0x4c,0x32,0x32, - 0x2e,0x39,0x31,0x37,0x2c,0x31,0x35,0x2e,0x35,0x34, - 0x38,0x7a,0x20,0x4d,0x31,0x34,0x2e,0x30,0x33,0x32, - 0x2c,0x31,0x35,0x2e,0x35,0x34,0x38,0x68,0x31,0x2e, - 0x35,0x35,0x31,0x6c,0x30,0x2e,0x37,0x30,0x38,0x2d, - 0x31,0x2e,0x37,0x38,0x36,0x68,0x33,0x2e,0x32,0x31, - 0x37,0x6c,0x30,0x2e,0x37,0x31,0x38,0x2c,0x31,0x2e, - 0x37,0x38,0x36,0x68,0x31,0x2e,0x36,0x30,0x33,0x6c, - 0x2d,0x33,0x2e,0x30,0x34,0x35,0x2d,0x37,0x2e,0x32, - 0x30,0x37,0x68,0x2d,0x31,0x2e,0x37,0x30,0x34,0x4c, - 0x31,0x34,0x2e,0x30,0x33,0x32,0x2c,0x31,0x35,0x2e, - 0x35,0x34,0x38,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x37, - 0x32,0x33,0x2c,0x31,0x32,0x2e,0x36,0x33,0x32,0x0a, - 0x09,0x4c,0x31,0x37,0x2e,0x39,0x31,0x2c,0x39,0x2e, - 0x35,0x39,0x6c,0x31,0x2e,0x31,0x36,0x38,0x2c,0x33, - 0x2e,0x30,0x34,0x32,0x48,0x31,0x36,0x2e,0x37,0x32, - 0x33,0x7a,0x20,0x4d,0x39,0x2e,0x39,0x39,0x32,0x2c, - 0x31,0x35,0x2e,0x35,0x34,0x38,0x68,0x31,0x2e,0x34, - 0x33,0x34,0x56,0x39,0x2e,0x34,0x37,0x31,0x68,0x32, - 0x2e,0x35,0x36,0x37,0x76,0x2d,0x31,0x2e,0x31,0x33, - 0x48,0x37,0x2e,0x34,0x32,0x35,0x76,0x31,0x2e,0x31, - 0x33,0x68,0x32,0x2e,0x35,0x36,0x37,0x56,0x31,0x35, - 0x2e,0x35,0x34,0x38,0x7a,0x20,0x4d,0x30,0x2e,0x31, - 0x38,0x37,0x2c,0x31,0x30,0x2e,0x33,0x36,0x38,0x0a, - 0x09,0x63,0x30,0x2c,0x32,0x2e,0x39,0x35,0x36,0x2c, - 0x35,0x2e,0x30,0x33,0x36,0x2c,0x31,0x2e,0x34,0x2c, - 0x35,0x2e,0x30,0x33,0x36,0x2c,0x33,0x2e,0x31,0x38, - 0x38,0x63,0x30,0x2c,0x30,0x2e,0x37,0x39,0x32,0x2d, - 0x30,0x2e,0x38,0x31,0x33,0x2c,0x31,0x2e,0x30,0x36, - 0x34,0x2d,0x31,0x2e,0x36,0x38,0x34,0x2c,0x31,0x2e, - 0x30,0x36,0x34,0x63,0x2d,0x31,0x2e,0x31,0x37,0x39, - 0x2c,0x30,0x2d,0x31,0x2e,0x39,0x32,0x33,0x2d,0x30, - 0x2e,0x34,0x35,0x36,0x2d,0x31,0x2e,0x39,0x36,0x33, - 0x2d,0x31,0x2e,0x34,0x30,0x37,0x48,0x30,0x2e,0x30, - 0x32,0x36,0x0a,0x09,0x63,0x30,0x2e,0x30,0x32,0x31, - 0x2c,0x31,0x2e,0x35,0x31,0x36,0x2c,0x31,0x2e,0x30, - 0x30,0x35,0x2c,0x32,0x2e,0x35,0x33,0x38,0x2c,0x33, - 0x2e,0x34,0x36,0x39,0x2c,0x32,0x2e,0x35,0x33,0x38, - 0x63,0x31,0x2e,0x34,0x35,0x35,0x2c,0x30,0x2c,0x33, - 0x2e,0x32,0x38,0x2d,0x30,0x2e,0x34,0x38,0x36,0x2c, - 0x33,0x2e,0x32,0x38,0x2d,0x32,0x2e,0x33,0x34,0x35, - 0x63,0x30,0x2d,0x33,0x2e,0x30,0x37,0x39,0x2d,0x35, - 0x2e,0x30,0x39,0x33,0x2d,0x31,0x2e,0x34,0x35,0x34, - 0x2d,0x35,0x2e,0x30,0x39,0x33,0x2d,0x33,0x2e,0x31, - 0x34,0x38,0x0a,0x09,0x63,0x30,0x2d,0x30,0x2e,0x36, - 0x37,0x36,0x2c,0x30,0x2e,0x36,0x33,0x32,0x2d,0x30, - 0x2e,0x39,0x38,0x38,0x2c,0x31,0x2e,0x35,0x38,0x39, - 0x2d,0x30,0x2e,0x39,0x38,0x38,0x63,0x31,0x2e,0x31, - 0x39,0x36,0x2c,0x30,0x2c,0x31,0x2e,0x36,0x37,0x36, - 0x2c,0x30,0x2e,0x36,0x30,0x34,0x2c,0x31,0x2e,0x37, - 0x32,0x36,0x2c,0x31,0x2e,0x31,0x36,0x31,0x68,0x31, - 0x2e,0x35,0x35,0x31,0x63,0x2d,0x30,0x2e,0x31,0x38, - 0x35,0x2d,0x32,0x2e,0x30,0x39,0x33,0x2d,0x32,0x2e, - 0x32,0x39,0x2d,0x32,0x2e,0x32,0x39,0x32,0x2d,0x33, - 0x2e,0x33,0x34,0x35,0x2d,0x32,0x2e,0x32,0x39,0x32, - 0x0a,0x09,0x43,0x31,0x2e,0x35,0x33,0x36,0x2c,0x38, - 0x2e,0x31,0x33,0x39,0x2c,0x30,0x2e,0x31,0x38,0x37, - 0x2c,0x38,0x2e,0x37,0x36,0x32,0x2c,0x30,0x2e,0x31, - 0x38,0x37,0x2c,0x31,0x30,0x2e,0x33,0x36,0x38,0x22, - 0x2f,0x3e,0x0a,0x3c,0x67,0x3e,0x0a,0x09,0x3c,0x67, - 0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, - 0x33,0x2e,0x32,0x31,0x37,0x2c,0x31,0x39,0x2e,0x31, - 0x31,0x38,0x48,0x33,0x2e,0x38,0x34,0x35,0x43,0x31, - 0x2e,0x37,0x32,0x32,0x2c,0x31,0x39,0x2e,0x31,0x31, - 0x38,0x2c,0x30,0x2c,0x32,0x30,0x2e,0x38,0x39,0x2c, - 0x30,0x2c,0x32,0x33,0x2e,0x30,0x37,0x35,0x73,0x31, - 0x2e,0x37,0x32,0x32,0x2c,0x33,0x2e,0x39,0x35,0x37, - 0x2c,0x33,0x2e,0x38,0x34,0x35,0x2c,0x33,0x2e,0x39, - 0x35,0x37,0x68,0x32,0x39,0x2e,0x33,0x37,0x32,0x0a, - 0x09,0x09,0x09,0x63,0x32,0x2e,0x31,0x32,0x33,0x2c, - 0x30,0x2c,0x33,0x2e,0x38,0x34,0x34,0x2d,0x31,0x2e, - 0x37,0x37,0x31,0x2c,0x33,0x2e,0x38,0x34,0x34,0x2d, - 0x33,0x2e,0x39,0x35,0x37,0x43,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x2c,0x32,0x30,0x2e,0x38,0x38,0x39,0x2c, - 0x33,0x35,0x2e,0x33,0x34,0x2c,0x31,0x39,0x2e,0x31, - 0x31,0x38,0x2c,0x33,0x33,0x2e,0x32,0x31,0x37,0x2c, - 0x31,0x39,0x2e,0x31,0x31,0x38,0x7a,0x22,0x2f,0x3e, - 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x67, - 0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__button_x_svg.cpp b/data/converted/help__button_x_svg.cpp deleted file mode 100644 index 1f57cedf9a..0000000000 --- a/data/converted/help__button_x_svg.cpp +++ /dev/null @@ -1,103 +0,0 @@ -// this file was auto-generated from "button_x.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__button_x_svg_size = 949; -const uint8_t help__button_x_svg_data[949] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e, - 0x30,0x32,0x39,0x63,0x2d,0x38,0x2e,0x35,0x36,0x31, - 0x2c,0x30,0x2d,0x31,0x35,0x2e,0x35,0x2c,0x36,0x2e, - 0x39,0x34,0x2d,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35, - 0x2e,0x35,0x63,0x30,0x2c,0x38,0x2e,0x35,0x36,0x33, - 0x2c,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31,0x35,0x2e, - 0x35,0x30,0x32,0x2c,0x31,0x35,0x2e,0x35,0x2c,0x31, - 0x35,0x2e,0x35,0x30,0x32,0x0a,0x09,0x09,0x09,0x63, - 0x38,0x2e,0x35,0x36,0x33,0x2c,0x30,0x2c,0x31,0x35, - 0x2e,0x35,0x2d,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31, - 0x35,0x2e,0x35,0x2d,0x31,0x35,0x2e,0x35,0x30,0x32, - 0x43,0x33,0x34,0x2e,0x30,0x33,0x2c,0x39,0x2e,0x39, - 0x37,0x2c,0x32,0x37,0x2e,0x30,0x39,0x31,0x2c,0x33, - 0x2e,0x30,0x32,0x39,0x2c,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x33,0x2e,0x30,0x32,0x39,0x7a,0x20,0x4d,0x32, - 0x31,0x2e,0x34,0x36,0x35,0x2c,0x32,0x34,0x2e,0x39, - 0x32,0x35,0x6c,0x2d,0x32,0x2e,0x36,0x30,0x37,0x2d, - 0x34,0x2e,0x38,0x37,0x6c,0x2d,0x32,0x2e,0x36,0x30, - 0x34,0x2c,0x34,0x2e,0x38,0x37,0x68,0x2d,0x33,0x2e, - 0x31,0x36,0x34,0x6c,0x34,0x2e,0x31,0x31,0x2d,0x36, - 0x2e,0x38,0x31,0x31,0x0a,0x09,0x09,0x09,0x6c,0x2d, - 0x34,0x2e,0x30,0x31,0x2d,0x36,0x2e,0x36,0x39,0x38, - 0x68,0x33,0x2e,0x31,0x33,0x38,0x6c,0x32,0x2e,0x34, - 0x39,0x33,0x2c,0x34,0x2e,0x37,0x38,0x37,0x6c,0x32, - 0x2e,0x35,0x33,0x33,0x2d,0x34,0x2e,0x37,0x38,0x37, - 0x68,0x33,0x2e,0x31,0x35,0x34,0x4c,0x32,0x30,0x2e, - 0x35,0x2c,0x31,0x38,0x2e,0x31,0x31,0x35,0x6c,0x34, - 0x2e,0x32,0x34,0x2c,0x36,0x2e,0x38,0x31,0x31,0x48, - 0x32,0x31,0x2e,0x34,0x36,0x35,0x7a,0x22,0x2f,0x3e, - 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x67, - 0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69, - 0x74,0x79,0x3d,0x22,0x30,0x22,0x3e,0x0a,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x33,0x36,0x2e,0x39,0x36,0x31, - 0x2c,0x30,0x2e,0x31,0x76,0x33,0x36,0x2e,0x38,0x36, - 0x31,0x48,0x30,0x2e,0x31,0x56,0x30,0x2e,0x31,0x48, - 0x33,0x36,0x2e,0x39,0x36,0x31,0x20,0x4d,0x33,0x37, - 0x2e,0x30,0x36,0x31,0x2c,0x30,0x48,0x30,0x76,0x33, - 0x37,0x2e,0x30,0x36,0x68,0x33,0x37,0x2e,0x30,0x36, - 0x31,0x56,0x30,0x4c,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67, - 0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__button_y_svg.cpp b/data/converted/help__button_y_svg.cpp deleted file mode 100644 index 3f00065af3..0000000000 --- a/data/converted/help__button_y_svg.cpp +++ /dev/null @@ -1,100 +0,0 @@ -// this file was auto-generated from "button_y.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__button_y_svg_size = 911; -const uint8_t help__button_y_svg_data[911] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e, - 0x30,0x32,0x39,0x63,0x2d,0x38,0x2e,0x35,0x36,0x31, - 0x2c,0x30,0x2d,0x31,0x35,0x2e,0x35,0x2c,0x36,0x2e, - 0x39,0x34,0x2d,0x31,0x35,0x2e,0x35,0x2c,0x31,0x35, - 0x2e,0x35,0x63,0x30,0x2c,0x38,0x2e,0x35,0x36,0x32, - 0x2c,0x36,0x2e,0x39,0x33,0x39,0x2c,0x31,0x35,0x2e, - 0x35,0x30,0x32,0x2c,0x31,0x35,0x2e,0x35,0x2c,0x31, - 0x35,0x2e,0x35,0x30,0x32,0x0a,0x09,0x09,0x09,0x63, - 0x38,0x2e,0x35,0x36,0x33,0x2c,0x30,0x2c,0x31,0x35, - 0x2e,0x35,0x2d,0x36,0x2e,0x39,0x34,0x2c,0x31,0x35, - 0x2e,0x35,0x2d,0x31,0x35,0x2e,0x35,0x30,0x32,0x43, - 0x33,0x34,0x2e,0x30,0x33,0x2c,0x39,0x2e,0x39,0x37, - 0x2c,0x32,0x37,0x2e,0x30,0x39,0x31,0x2c,0x33,0x2e, - 0x30,0x32,0x39,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x33,0x2e,0x30,0x32,0x39,0x7a,0x20,0x4d,0x32,0x30, - 0x2e,0x31,0x30,0x32,0x2c,0x32,0x30,0x2e,0x31,0x37, - 0x34,0x76,0x34,0x2e,0x37,0x35,0x68,0x2d,0x32,0x2e, - 0x37,0x76,0x2d,0x34,0x2e,0x38,0x39,0x6c,0x2d,0x34, - 0x2e,0x35,0x35,0x35,0x2d,0x38,0x2e,0x36,0x31,0x38, - 0x68,0x32,0x2e,0x39,0x36,0x39,0x0a,0x09,0x09,0x09, - 0x6c,0x32,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x32,0x32, - 0x36,0x68,0x30,0x2e,0x30,0x35,0x36,0x6c,0x32,0x2e, - 0x39,0x35,0x2d,0x36,0x2e,0x32,0x32,0x36,0x68,0x32, - 0x2e,0x39,0x37,0x31,0x4c,0x32,0x30,0x2e,0x31,0x30, - 0x32,0x2c,0x32,0x30,0x2e,0x31,0x37,0x34,0x7a,0x22, - 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x6f,0x70,0x61, - 0x63,0x69,0x74,0x79,0x3d,0x22,0x30,0x22,0x3e,0x0a, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x36,0x2e,0x39, - 0x36,0x31,0x2c,0x30,0x2e,0x31,0x76,0x33,0x36,0x2e, - 0x38,0x36,0x31,0x48,0x30,0x2e,0x31,0x56,0x30,0x2e, - 0x31,0x48,0x33,0x36,0x2e,0x39,0x36,0x31,0x20,0x4d, - 0x33,0x37,0x2e,0x30,0x36,0x31,0x2c,0x30,0x48,0x30, - 0x76,0x33,0x37,0x2e,0x30,0x36,0x68,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x56,0x30,0x4c,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, - 0x0a -}; - diff --git a/data/converted/help__dpad_all_svg.cpp b/data/converted/help__dpad_all_svg.cpp deleted file mode 100644 index e001a0b7c7..0000000000 --- a/data/converted/help__dpad_all_svg.cpp +++ /dev/null @@ -1,355 +0,0 @@ -// this file was auto-generated from "dpad_all.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__dpad_all_svg_size = 3470; -const uint8_t help__dpad_all_svg_data[3470] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x32,0x2e, - 0x30,0x38,0x35,0x2c,0x33,0x37,0x2e,0x30,0x35,0x38, - 0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d,0x32, - 0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e,0x31, - 0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d,0x33, - 0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31, - 0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33,0x2e, - 0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31,0x2c, - 0x32,0x35,0x2e,0x32,0x30,0x35,0x2c,0x30,0x2c,0x32, - 0x33,0x2e,0x33,0x33,0x39,0x2c,0x30,0x2c,0x32,0x32, - 0x2e,0x30,0x38,0x34,0x0a,0x09,0x09,0x09,0x09,0x09, - 0x76,0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32, - 0x2e,0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37, - 0x2d,0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32, - 0x31,0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37, - 0x33,0x34,0x56,0x33,0x2e,0x31,0x32,0x31,0x63,0x30, - 0x2d,0x32,0x2e,0x32,0x39,0x2c,0x31,0x2e,0x38,0x36, - 0x35,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32,0x31,0x68, - 0x37,0x2e,0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39, - 0x2c,0x30,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31, - 0x2e,0x38,0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37, - 0x33,0x33,0x0a,0x09,0x09,0x09,0x09,0x09,0x68,0x38, - 0x2e,0x37,0x33,0x31,0x63,0x31,0x2e,0x32,0x30,0x31, - 0x2c,0x30,0x2c,0x32,0x2e,0x31,0x35,0x34,0x2c,0x30, - 0x2e,0x35,0x32,0x35,0x2c,0x32,0x2e,0x36,0x38,0x34, - 0x2c,0x31,0x2e,0x34,0x38,0x63,0x30,0x2e,0x32,0x30, - 0x37,0x2c,0x30,0x2e,0x33,0x37,0x35,0x2c,0x30,0x2e, - 0x34,0x35,0x36,0x2c,0x31,0x2e,0x31,0x31,0x32,0x2c, - 0x30,0x2e,0x34,0x32,0x39,0x2c,0x31,0x2e,0x36,0x33, - 0x39,0x68,0x30,0x2e,0x30,0x30,0x38,0x76,0x37,0x2e, - 0x31,0x31,0x63,0x30,0x2c,0x32,0x2e,0x32,0x39,0x2d, - 0x31,0x2e,0x38,0x36,0x36,0x2c,0x33,0x2e,0x31,0x32, - 0x31,0x2d,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e, - 0x31,0x32,0x31,0x68,0x2d,0x38,0x2e,0x37,0x33,0x31, - 0x0a,0x09,0x09,0x09,0x09,0x09,0x76,0x38,0x2e,0x37, - 0x33,0x32,0x43,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c, - 0x33,0x36,0x2e,0x32,0x32,0x37,0x2c,0x32,0x33,0x2e, - 0x33,0x34,0x2c,0x33,0x37,0x2e,0x30,0x35,0x38,0x2c, - 0x32,0x32,0x2e,0x30,0x38,0x35,0x2c,0x33,0x37,0x2e, - 0x30,0x35,0x38,0x7a,0x20,0x4d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x33,0x43,0x32, - 0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e,0x33,0x35, - 0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33,0x2e,0x34, - 0x39,0x32,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x34,0x2e, - 0x39,0x37,0x33,0x76,0x37,0x2e,0x31,0x31,0x0a,0x09, - 0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30,0x36, - 0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x31, - 0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, - 0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31,0x30, - 0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30,0x35, - 0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x31, - 0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, - 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30, - 0x2e,0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x34, - 0x2d,0x30,0x2e,0x31,0x34,0x32,0x2c,0x31,0x2e,0x36, - 0x32,0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32, - 0x33,0x2e,0x37,0x30,0x35,0x68,0x31,0x30,0x2e,0x32, - 0x33,0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30, - 0x2e,0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37, - 0x2e,0x31,0x32,0x31,0x0a,0x09,0x09,0x09,0x09,0x09, - 0x63,0x2d,0x30,0x2e,0x30,0x30,0x35,0x2d,0x30,0x2e, - 0x32,0x38,0x37,0x2d,0x30,0x2e,0x31,0x31,0x32,0x2d, - 0x31,0x2e,0x36,0x30,0x39,0x2d,0x31,0x2e,0x36,0x32, - 0x2d,0x31,0x2e,0x36,0x30,0x39,0x48,0x32,0x33,0x2e, - 0x37,0x30,0x37,0x56,0x33,0x2e,0x31,0x32,0x31,0x43, - 0x32,0x33,0x2e,0x37,0x30,0x31,0x2c,0x32,0x2e,0x37, - 0x34,0x35,0x2c,0x32,0x33,0x2e,0x35,0x36,0x38,0x2c, - 0x31,0x2e,0x35,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36, - 0x2c,0x31,0x2e,0x35,0x68,0x2d,0x37,0x2e,0x31,0x31, - 0x31,0x0a,0x09,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x30,0x30,0x36, - 0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x30,0x2e,0x31, - 0x33,0x39,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x31, - 0x2e,0x36,0x32,0x31,0x76,0x31,0x30,0x2e,0x32,0x33, - 0x32,0x48,0x33,0x2e,0x31,0x32,0x31,0x7a,0x22,0x2f, - 0x3e,0x0a,0x09,0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0a, - 0x09,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33, - 0x31,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x63,0x2d, - 0x32,0x2e,0x30,0x31,0x32,0x2c,0x30,0x2d,0x33,0x2e, - 0x36,0x34,0x39,0x2d,0x31,0x2e,0x36,0x33,0x38,0x2d, - 0x33,0x2e,0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35, - 0x31,0x63,0x30,0x2d,0x32,0x2e,0x30,0x31,0x33,0x2c, - 0x31,0x2e,0x36,0x33,0x37,0x2d,0x33,0x2e,0x36,0x35, - 0x2c,0x33,0x2e,0x36,0x34,0x39,0x2d,0x33,0x2e,0x36, - 0x35,0x0a,0x09,0x09,0x09,0x63,0x32,0x2e,0x30,0x31, - 0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x35,0x2c,0x31, - 0x2e,0x36,0x33,0x38,0x2c,0x33,0x2e,0x36,0x35,0x2c, - 0x33,0x2e,0x36,0x35,0x43,0x32,0x32,0x2e,0x31,0x38, - 0x31,0x2c,0x32,0x30,0x2e,0x35,0x34,0x34,0x2c,0x32, - 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x32,0x2e,0x31, - 0x38,0x31,0x2c,0x31,0x38,0x2e,0x35,0x33,0x31,0x2c, - 0x32,0x32,0x2e,0x31,0x38,0x31,0x7a,0x20,0x4d,0x31, - 0x38,0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33, - 0x38,0x63,0x2d,0x31,0x2e,0x31,0x38,0x35,0x2c,0x30, - 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x39, - 0x36,0x35,0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32, - 0x2e,0x31,0x35,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, - 0x31,0x2e,0x31,0x38,0x37,0x2c,0x30,0x2e,0x39,0x36, - 0x34,0x2c,0x32,0x2e,0x31,0x35,0x31,0x2c,0x32,0x2e, - 0x31,0x34,0x39,0x2c,0x32,0x2e,0x31,0x35,0x31,0x63, - 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, - 0x32,0x30,0x2e,0x36,0x38,0x31,0x2c,0x31,0x37,0x2e, - 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x36, - 0x2c,0x31,0x36,0x2e,0x33,0x38,0x2c,0x31,0x38,0x2e, - 0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x38,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x2e, - 0x31,0x38,0x33,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35, - 0x2c,0x34,0x2e,0x36,0x38,0x34,0x68,0x36,0x2e,0x30, - 0x31,0x32,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, - 0x2e,0x31,0x38,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35, - 0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x37,0x68,0x2d, - 0x36,0x2e,0x30,0x31,0x32,0x63,0x2d,0x30,0x2e,0x32, - 0x37,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x36, - 0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35, - 0x38,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e, - 0x31,0x33,0x31,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, - 0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33, - 0x34,0x2c,0x30,0x2e,0x30,0x32,0x37,0x2d,0x30,0x2e, - 0x37,0x36,0x35,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d, - 0x34,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63, - 0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33, - 0x31,0x2c,0x30,0x2e,0x39,0x38,0x37,0x2d,0x30,0x2e, - 0x34,0x33,0x2c,0x31,0x2e,0x32,0x36,0x32,0x2c,0x30, - 0x6c,0x33,0x2e,0x30,0x30,0x37,0x2c,0x34,0x2e,0x36, - 0x38,0x34,0x63,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30, - 0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39, - 0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30, - 0x32,0x37,0x2c,0x30,0x2e,0x37,0x36,0x35,0x43,0x32, - 0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36, - 0x37,0x2c,0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38, - 0x2e,0x36,0x31,0x37,0x2c,0x32,0x31,0x2e,0x35,0x33, - 0x36,0x2c,0x38,0x2e,0x36,0x31,0x37,0x7a,0x0a,0x09, - 0x09,0x09,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37, - 0x2c,0x37,0x2e,0x31,0x31,0x37,0x68,0x33,0x2e,0x32, - 0x36,0x37,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34, - 0x2e,0x35,0x37,0x32,0x4c,0x31,0x36,0x2e,0x38,0x39, - 0x37,0x2c,0x37,0x2e,0x31,0x31,0x37,0x7a,0x22,0x2f, - 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, - 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x33,0x2e,0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35, - 0x33,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e, - 0x30,0x30,0x34,0x76,0x2d,0x36,0x2e,0x30,0x31,0x4c, - 0x33,0x2e,0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35, - 0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32, - 0x32,0x2e,0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31, - 0x34,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32, - 0x2d,0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30, - 0x35,0x2d,0x30,0x2e,0x31,0x31,0x39,0x4c,0x32,0x2e, - 0x37,0x32,0x2c,0x31,0x39,0x2e,0x31,0x36,0x31,0x63, - 0x2d,0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31, - 0x33,0x37,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30, - 0x2e,0x33,0x37,0x35,0x2d,0x30,0x2e,0x33,0x34,0x35, - 0x2d,0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09, - 0x73,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39, - 0x33,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e, - 0x36,0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d, - 0x33,0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33, - 0x2d,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x35, - 0x32,0x34,0x2d,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x37,0x36,0x35,0x2d,0x30,0x2e,0x30,0x32,0x37, - 0x63,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33, - 0x31,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33, - 0x38,0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e, - 0x36,0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34, - 0x2d,0x30,0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x35, - 0x32,0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e, - 0x36,0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c, - 0x32,0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39, - 0x33,0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c, - 0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35, - 0x34,0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d, - 0x33,0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31, - 0x34,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f, - 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, - 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x33,0x33,0x2e,0x38,0x37,0x39,0x2c,0x31,0x38,0x2e, - 0x35,0x32,0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35, - 0x2d,0x33,0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30, - 0x31,0x4c,0x33,0x33,0x2e,0x38,0x37,0x39,0x2c,0x31, - 0x38,0x2e,0x35,0x32,0x39,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e, - 0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d, - 0x30,0x2e,0x32,0x34,0x37,0x2d,0x30,0x2e,0x30,0x33, - 0x2d,0x30,0x2e,0x33,0x35,0x39,0x2d,0x30,0x2e,0x30, - 0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39, - 0x31,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76, - 0x2d,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09,0x09,0x63, - 0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e, - 0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c, - 0x30,0x2e,0x33,0x39,0x31,0x2d,0x30,0x2e,0x36,0x35, - 0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e, - 0x31,0x33,0x32,0x2c,0x30,0x2e,0x35,0x33,0x32,0x2d, - 0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37,0x36, - 0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e, - 0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x63, - 0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33, - 0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, - 0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73, - 0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34,0x39, - 0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, - 0x36,0x33,0x31,0x4c,0x32,0x39,0x2e,0x36,0x2c,0x32, - 0x32,0x2e,0x31,0x36,0x35,0x43,0x32,0x39,0x2e,0x34, - 0x37,0x37,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x2c, - 0x32,0x39,0x2e,0x33,0x33,0x35,0x2c,0x32,0x32,0x2e, - 0x32,0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39,0x35, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d, - 0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e, - 0x38,0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36,0x6c, - 0x32,0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36,0x33, - 0x33,0x0a,0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39, - 0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x33, - 0x2e,0x38,0x37,0x36,0x6c,0x33,0x2e,0x30,0x30,0x37, - 0x2d,0x34,0x2e,0x36,0x38,0x34,0x68,0x2d,0x36,0x2e, - 0x30,0x31,0x32,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x33,0x33,0x2e,0x38,0x37,0x36,0x7a,0x22,0x2f,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, - 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, - 0x36,0x32,0x36,0x63,0x2d,0x30,0x2e,0x32,0x35,0x35, - 0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30, - 0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d, - 0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30, - 0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0a,0x09, - 0x09,0x09,0x63,0x2d,0x30,0x2e,0x31,0x34,0x38,0x2d, - 0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x35, - 0x38,0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e, - 0x30,0x32,0x37,0x2d,0x30,0x2e,0x37,0x36,0x35,0x63, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35,0x38,0x2d, - 0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e,0x30,0x31, - 0x32,0x63,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2c, - 0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x31,0x34, - 0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e, - 0x33,0x39,0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x31,0x33,0x32,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30, - 0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x34, - 0x2d,0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e,0x37, - 0x36,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x37,0x2c, - 0x34,0x2e,0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30, - 0x32,0x33,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x2c, - 0x31,0x38,0x2e,0x37,0x38,0x35,0x2c,0x33,0x34,0x2e, - 0x36,0x32,0x36,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x33,0x34,0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d,0x31, - 0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39, - 0x34,0x32,0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32, - 0x2e,0x35,0x34,0x35,0x0a,0x09,0x09,0x09,0x6c,0x31, - 0x2e,0x36,0x33,0x34,0x2d,0x32,0x2e,0x35,0x34,0x35, - 0x48,0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f, - 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f, - 0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__dpad_down_svg.cpp b/data/converted/help__dpad_down_svg.cpp deleted file mode 100644 index f2371f0c2c..0000000000 --- a/data/converted/help__dpad_down_svg.cpp +++ /dev/null @@ -1,325 +0,0 @@ -// this file was auto-generated from "dpad_down.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__dpad_down_svg_size = 3167; -const uint8_t help__dpad_down_svg_data[3167] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, - 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, - 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, - 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, - 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, - 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, - 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, - 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, - 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, - 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, - 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, - 0x32,0x76,0x37,0x2e,0x31,0x31,0x63,0x30,0x2c,0x32, - 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, - 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, - 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, - 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, - 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, - 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, - 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, - 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, - 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, - 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, - 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, - 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, - 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, - 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, - 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, - 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, - 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, - 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, - 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, - 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, - 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, - 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, - 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, - 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, - 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, - 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, - 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, - 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, - 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, - 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, - 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x63, - 0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d,0x32, - 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x39,0x36,0x35, - 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, - 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, - 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, - 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, - 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, - 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, - 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36, - 0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d,0x36,0x2e, - 0x30,0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x33, - 0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x35,0x2d,0x30, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x37,0x2d, - 0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33, - 0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, - 0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c, - 0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36, - 0x36,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e, - 0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, - 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, - 0x2c,0x31,0x2e,0x32,0x36,0x34,0x2c,0x30,0x6c,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36, - 0x2c,0x30,0x2e,0x37,0x36,0x36,0x43,0x32,0x32,0x2e, - 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c, - 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, - 0x31,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x36,0x7a,0x0a,0x09,0x09,0x09, - 0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, - 0x2e,0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36,0x38, - 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35, - 0x37,0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, - 0x37,0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e, - 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d, - 0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e,0x30,0x34, - 0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x31, - 0x31,0x39,0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31,0x39, - 0x2e,0x31,0x36,0x32,0x63,0x2d,0x30,0x2e,0x32,0x31, - 0x35,0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e, - 0x33,0x34,0x35,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d, - 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33, - 0x31,0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33, - 0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33, - 0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34, - 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36, - 0x63,0x30,0x2e,0x32,0x33,0x2d,0x30,0x2e,0x31,0x34, - 0x38,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e, - 0x31,0x35,0x38,0x2c,0x30,0x2e,0x37,0x36,0x36,0x2d, - 0x30,0x2e,0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34, - 0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36, - 0x2e,0x30,0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, - 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x34, - 0x38,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38, - 0x2e,0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x35, - 0x34,0x2c,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e,0x38,0x30,0x39, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d, - 0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e,0x35, - 0x33,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e, - 0x36,0x33,0x32,0x76,0x2d,0x33,0x2e,0x32,0x36,0x35, - 0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e, - 0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x31,0x39, - 0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d, - 0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e, - 0x32,0x34,0x36,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30, - 0x2e,0x33,0x35,0x38,0x2d,0x30,0x2e,0x30,0x39,0x32, - 0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, - 0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d, - 0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39, - 0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76,0x2d,0x36, - 0x2e,0x30,0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d, - 0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34, - 0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e, - 0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63, - 0x30,0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33, - 0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e, - 0x31,0x32,0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c, - 0x30,0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38, - 0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e, - 0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c, - 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, - 0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30, - 0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d, - 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33, - 0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2c,0x33, - 0x2e,0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x34,0x37, - 0x38,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x2c,0x32, - 0x39,0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c, - 0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d,0x32, - 0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38, - 0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36,0x6c,0x32, - 0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36,0x33,0x33, - 0x0a,0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x34, - 0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x7a,0x22, - 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09, - 0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x33,0x2e, - 0x38,0x37,0x36,0x6c,0x33,0x2e,0x30,0x30,0x37,0x2d, - 0x34,0x2e,0x36,0x38,0x34,0x68,0x2d,0x36,0x2e,0x30, - 0x31,0x32,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33, - 0x33,0x2e,0x38,0x37,0x36,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x4c, - 0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36, - 0x32,0x36,0x63,0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c, - 0x30,0x2d,0x30,0x2e,0x34,0x39,0x32,0x2d,0x30,0x2e, - 0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d,0x30, - 0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30, - 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2d,0x30, - 0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38, - 0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30, - 0x32,0x36,0x2d,0x30,0x2e,0x37,0x36,0x36,0x73,0x30, - 0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31, - 0x2c,0x30,0x2e,0x36,0x35,0x37,0x2d,0x30,0x2e,0x33, - 0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x32,0x63,0x30, - 0x2e,0x32,0x37,0x33,0x2c,0x30,0x2c,0x30,0x2e,0x35, - 0x32,0x35,0x2c,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30, - 0x2e,0x36,0x35,0x37,0x2c,0x30,0x2e,0x33,0x39,0x31, - 0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x33, - 0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32, - 0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e, - 0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36,0x36,0x6c, - 0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36, - 0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c, - 0x33,0x34,0x2e,0x34,0x39,0x36,0x2c,0x31,0x38,0x2e, - 0x37,0x38,0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, - 0x36,0x32,0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38, - 0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x6c, - 0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34, - 0x35,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33, - 0x35,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36, - 0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09, - 0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a, - 0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__dpad_left_svg.cpp b/data/converted/help__dpad_left_svg.cpp deleted file mode 100644 index e4d755c613..0000000000 --- a/data/converted/help__dpad_left_svg.cpp +++ /dev/null @@ -1,325 +0,0 @@ -// this file was auto-generated from "dpad_left.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__dpad_left_svg_size = 3164; -const uint8_t help__dpad_left_svg_data[3164] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, - 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, - 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, - 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, - 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, - 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, - 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, - 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, - 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, - 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, - 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, - 0x32,0x76,0x37,0x2e,0x31,0x31,0x63,0x30,0x2c,0x32, - 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, - 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, - 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, - 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, - 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, - 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, - 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, - 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, - 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, - 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, - 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, - 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, - 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, - 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, - 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, - 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, - 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, - 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, - 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, - 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, - 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, - 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, - 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, - 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, - 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, - 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, - 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, - 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, - 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, - 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, - 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x63, - 0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d,0x32, - 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x39,0x36,0x35, - 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, - 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, - 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, - 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, - 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, - 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, - 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36, - 0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d,0x36,0x2e, - 0x30,0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x33, - 0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x35,0x2d,0x30, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x37,0x2d, - 0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33, - 0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, - 0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c, - 0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36, - 0x36,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e, - 0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, - 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, - 0x2c,0x31,0x2e,0x32,0x36,0x34,0x2c,0x30,0x6c,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36, - 0x2c,0x30,0x2e,0x37,0x36,0x36,0x43,0x32,0x32,0x2e, - 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c, - 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, - 0x31,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x36,0x7a,0x0a,0x09,0x09,0x09, - 0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, - 0x2e,0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36,0x38, - 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35, - 0x37,0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, - 0x37,0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e, - 0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c, - 0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30, - 0x34,0x76,0x2d,0x36,0x2e,0x30,0x31,0x4c,0x33,0x2e, - 0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e, - 0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x34,0x31, - 0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32,0x2d,0x30, - 0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d, - 0x30,0x2e,0x31,0x31,0x39,0x4c,0x32,0x2e,0x37,0x32, - 0x2c,0x31,0x39,0x2e,0x31,0x36,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38, - 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33, - 0x37,0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30, - 0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73,0x30, - 0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c, - 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33, - 0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e, - 0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d,0x30, - 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x34, - 0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e,0x37, - 0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63,0x30, - 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c, - 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38,0x34, - 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, - 0x38,0x76,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09,0x09, - 0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30, - 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x36, - 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, - 0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32,0x32, - 0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33,0x32, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e, - 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34,0x35, - 0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33,0x2e, - 0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x39, - 0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38, - 0x34,0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c,0x30, - 0x2d,0x30,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e,0x30, - 0x33,0x2d,0x30,0x2e,0x33,0x35,0x38,0x2d,0x30,0x2e, - 0x30,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34,0x31, - 0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x33, - 0x39,0x32,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30, - 0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35,0x38, - 0x76,0x2d,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09,0x09, - 0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c,0x30, - 0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32,0x36, - 0x2c,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x36, - 0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d,0x30, - 0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33, - 0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e,0x37, - 0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c,0x34, - 0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x35, - 0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e,0x31, - 0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, - 0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34,0x35, - 0x2c,0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09, - 0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34, - 0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30, - 0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38, - 0x35,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32,0x39, - 0x2e,0x34,0x37,0x38,0x2c,0x32,0x32,0x2e,0x32,0x34, - 0x34,0x2c,0x32,0x39,0x2e,0x33,0x33,0x36,0x2c,0x32, - 0x32,0x2e,0x32,0x38,0x34,0x2c,0x32,0x39,0x2e,0x31, - 0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a, - 0x20,0x4d,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31, - 0x36,0x2e,0x38,0x39,0x36,0x76,0x33,0x2e,0x32,0x36, - 0x36,0x6c,0x32,0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e, - 0x36,0x33,0x33,0x0a,0x09,0x09,0x09,0x4c,0x32,0x39, - 0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39, - 0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x33,0x34,0x2e,0x36,0x32,0x36,0x4c,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x63, - 0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d,0x30, - 0x2e,0x34,0x39,0x32,0x2d,0x30,0x2e,0x31,0x33,0x2d, - 0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33,0x34, - 0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34, - 0x2e,0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63,0x2d, - 0x30,0x2e,0x31,0x34,0x37,0x2d,0x30,0x2e,0x32,0x33, - 0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e, - 0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x36,0x2d, - 0x30,0x2e,0x37,0x36,0x36,0x73,0x30,0x2e,0x33,0x38, - 0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e, - 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x31,0x68, - 0x36,0x2e,0x30,0x31,0x32,0x63,0x30,0x2e,0x32,0x37, - 0x33,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x35,0x2c, - 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x36,0x35, - 0x37,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0a,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x31,0x33,0x33,0x2c,0x30,0x2e, - 0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c,0x30, - 0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x36, - 0x2c,0x30,0x2e,0x37,0x36,0x36,0x6c,0x2d,0x33,0x2e, - 0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x43, - 0x31,0x39,0x2e,0x30,0x32,0x33,0x2c,0x33,0x34,0x2e, - 0x34,0x39,0x36,0x2c,0x31,0x38,0x2e,0x37,0x38,0x36, - 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, - 0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, - 0x32,0x39,0x2e,0x39,0x34,0x32,0x6c,0x31,0x2e,0x36, - 0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0a,0x09, - 0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x35,0x2d,0x32, - 0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x38,0x39, - 0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73, - 0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__dpad_leftright_svg.cpp b/data/converted/help__dpad_leftright_svg.cpp deleted file mode 100644 index 3984364a88..0000000000 --- a/data/converted/help__dpad_leftright_svg.cpp +++ /dev/null @@ -1,333 +0,0 @@ -// this file was auto-generated from "dpad_leftright.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__dpad_leftright_svg_size = 3241; -const uint8_t help__dpad_leftright_svg_data[3241] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, - 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, - 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, - 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, - 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, - 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, - 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, - 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, - 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, - 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, - 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, - 0x32,0x76,0x37,0x2e,0x31,0x31,0x63,0x30,0x2c,0x32, - 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, - 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, - 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, - 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, - 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, - 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, - 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, - 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, - 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, - 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, - 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, - 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, - 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, - 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, - 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, - 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, - 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, - 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, - 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, - 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, - 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, - 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, - 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, - 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, - 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, - 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, - 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, - 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, - 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, - 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, - 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x63, - 0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d,0x32, - 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x39,0x36,0x35, - 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, - 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, - 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, - 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, - 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, - 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, - 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36, - 0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d,0x36,0x2e, - 0x30,0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x33, - 0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x35,0x2d,0x30, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x37,0x2d, - 0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33, - 0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, - 0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c, - 0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36, - 0x36,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e, - 0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, - 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, - 0x2c,0x31,0x2e,0x32,0x36,0x34,0x2c,0x30,0x6c,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36, - 0x2c,0x30,0x2e,0x37,0x36,0x36,0x43,0x32,0x32,0x2e, - 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c, - 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, - 0x31,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x36,0x7a,0x0a,0x09,0x09,0x09, - 0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, - 0x2e,0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36,0x38, - 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35, - 0x37,0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, - 0x37,0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x2e, - 0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x6c, - 0x34,0x2e,0x36,0x38,0x34,0x2c,0x33,0x2e,0x30,0x30, - 0x34,0x76,0x2d,0x36,0x2e,0x30,0x31,0x4c,0x33,0x2e, - 0x31,0x32,0x35,0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e, - 0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x34,0x31, - 0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32,0x2d,0x30, - 0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d, - 0x30,0x2e,0x31,0x31,0x39,0x4c,0x32,0x2e,0x37,0x32, - 0x2c,0x31,0x39,0x2e,0x31,0x36,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33,0x38, - 0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x33, - 0x37,0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30, - 0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73,0x30, - 0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c, - 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33, - 0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e, - 0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d,0x30, - 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x34, - 0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e,0x37, - 0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63,0x30, - 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c, - 0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38,0x34, - 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, - 0x38,0x76,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09,0x09, - 0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d,0x30, - 0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32,0x36, - 0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36,0x35, - 0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32,0x32, - 0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33,0x32, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e, - 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34,0x35, - 0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33,0x2e, - 0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33,0x33, - 0x2e,0x38,0x37,0x39,0x2c,0x31,0x38,0x2e,0x35,0x32, - 0x39,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2d,0x33, - 0x2e,0x30,0x30,0x35,0x76,0x36,0x2e,0x30,0x31,0x4c, - 0x33,0x33,0x2e,0x38,0x37,0x39,0x2c,0x31,0x38,0x2e, - 0x35,0x32,0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x32,0x39,0x2e,0x31,0x39, - 0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x63,0x2d, - 0x30,0x2e,0x31,0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e, - 0x32,0x34,0x36,0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30, - 0x2e,0x33,0x35,0x38,0x2d,0x30,0x2e,0x30,0x39,0x32, - 0x63,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, - 0x31,0x33,0x32,0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d, - 0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39, - 0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x76,0x2d,0x36, - 0x2e,0x30,0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2d, - 0x30,0x2e,0x32,0x37,0x34,0x2c,0x30,0x2e,0x31,0x34, - 0x39,0x2d,0x30,0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e, - 0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35,0x38,0x63, - 0x30,0x2e,0x32,0x33,0x39,0x2d,0x30,0x2e,0x31,0x33, - 0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e, - 0x31,0x32,0x33,0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c, - 0x30,0x2e,0x30,0x32,0x37,0x6c,0x34,0x2e,0x36,0x38, - 0x35,0x2c,0x33,0x2e,0x30,0x30,0x35,0x63,0x30,0x2e, - 0x32,0x31,0x35,0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c, - 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e, - 0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73,0x2d,0x30, - 0x2e,0x31,0x33,0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d, - 0x30,0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33, - 0x31,0x6c,0x2d,0x34,0x2e,0x36,0x38,0x35,0x2c,0x33, - 0x2e,0x30,0x30,0x34,0x43,0x32,0x39,0x2e,0x34,0x37, - 0x38,0x2c,0x32,0x32,0x2e,0x32,0x34,0x34,0x2c,0x32, - 0x39,0x2e,0x33,0x33,0x36,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x34,0x2c,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c, - 0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d,0x32, - 0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38, - 0x39,0x36,0x76,0x33,0x2e,0x32,0x36,0x36,0x6c,0x32, - 0x2e,0x35,0x34,0x36,0x2d,0x31,0x2e,0x36,0x33,0x33, - 0x0a,0x09,0x09,0x09,0x4c,0x32,0x39,0x2e,0x39,0x34, - 0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x7a,0x22, - 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09, - 0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, - 0x36,0x32,0x36,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x33,0x34,0x2e,0x36,0x32,0x36,0x63,0x2d,0x30,0x2e, - 0x32,0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39, - 0x32,0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36, - 0x33,0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d, - 0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38, - 0x34,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31, - 0x34,0x37,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30, - 0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34, - 0x2d,0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37, - 0x36,0x36,0x73,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30, - 0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35,0x37, - 0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e,0x30, - 0x31,0x32,0x63,0x30,0x2e,0x32,0x37,0x33,0x2c,0x30, - 0x2c,0x30,0x2e,0x35,0x32,0x35,0x2c,0x30,0x2e,0x31, - 0x34,0x38,0x2c,0x30,0x2e,0x36,0x35,0x37,0x2c,0x30, - 0x2e,0x33,0x39,0x31,0x0a,0x09,0x09,0x09,0x63,0x30, - 0x2e,0x31,0x33,0x33,0x2c,0x30,0x2e,0x32,0x34,0x2c, - 0x30,0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e,0x35,0x33, - 0x33,0x2d,0x30,0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e, - 0x37,0x36,0x36,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35, - 0x2c,0x34,0x2e,0x36,0x38,0x34,0x43,0x31,0x39,0x2e, - 0x30,0x32,0x33,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36, - 0x2c,0x31,0x38,0x2e,0x37,0x38,0x36,0x2c,0x33,0x34, - 0x2e,0x36,0x32,0x36,0x2c,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d, - 0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e, - 0x39,0x34,0x32,0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c, - 0x32,0x2e,0x35,0x34,0x35,0x0a,0x09,0x09,0x09,0x6c, - 0x31,0x2e,0x36,0x33,0x35,0x2d,0x32,0x2e,0x35,0x34, - 0x35,0x48,0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22, - 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, - 0x0a -}; - diff --git a/data/converted/help__dpad_right_svg.cpp b/data/converted/help__dpad_right_svg.cpp deleted file mode 100644 index 7005f3f831..0000000000 --- a/data/converted/help__dpad_right_svg.cpp +++ /dev/null @@ -1,325 +0,0 @@ -// this file was auto-generated from "dpad_right.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__dpad_right_svg_size = 3168; -const uint8_t help__dpad_right_svg_data[3168] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, - 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, - 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, - 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, - 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, - 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, - 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, - 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, - 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, - 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, - 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, - 0x32,0x76,0x37,0x2e,0x31,0x31,0x63,0x30,0x2c,0x32, - 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, - 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, - 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, - 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, - 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, - 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, - 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, - 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, - 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, - 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, - 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, - 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, - 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, - 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, - 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, - 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, - 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, - 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, - 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, - 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, - 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, - 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, - 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, - 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, - 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, - 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, - 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, - 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, - 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, - 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, - 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x63, - 0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d,0x32, - 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x39,0x36,0x35, - 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, - 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, - 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, - 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, - 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, - 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, - 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x32,0x31,0x2e,0x35,0x33,0x36, - 0x2c,0x38,0x2e,0x36,0x31,0x36,0x68,0x2d,0x36,0x2e, - 0x30,0x31,0x32,0x63,0x2d,0x30,0x2e,0x32,0x37,0x33, - 0x2c,0x30,0x2d,0x30,0x2e,0x35,0x32,0x35,0x2d,0x30, - 0x2e,0x31,0x35,0x2d,0x30,0x2e,0x36,0x35,0x37,0x2d, - 0x30,0x2e,0x33,0x39,0x63,0x2d,0x30,0x2e,0x31,0x33, - 0x32,0x2d,0x30,0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e, - 0x31,0x32,0x31,0x2d,0x30,0x2e,0x35,0x33,0x34,0x2c, - 0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36, - 0x36,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e, - 0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e, - 0x32,0x37,0x36,0x2d,0x30,0x2e,0x34,0x33,0x31,0x2c, - 0x30,0x2e,0x39,0x38,0x36,0x2d,0x30,0x2e,0x34,0x33, - 0x2c,0x31,0x2e,0x32,0x36,0x34,0x2c,0x30,0x6c,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x32, - 0x33,0x31,0x2c,0x30,0x2e,0x31,0x35,0x39,0x2c,0x30, - 0x2e,0x35,0x32,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36, - 0x2c,0x30,0x2e,0x37,0x36,0x36,0x43,0x32,0x32,0x2e, - 0x30,0x36,0x33,0x2c,0x38,0x2e,0x34,0x36,0x36,0x2c, - 0x32,0x31,0x2e,0x38,0x31,0x31,0x2c,0x38,0x2e,0x36, - 0x31,0x36,0x2c,0x32,0x31,0x2e,0x35,0x33,0x36,0x2c, - 0x38,0x2e,0x36,0x31,0x36,0x7a,0x0a,0x09,0x09,0x09, - 0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x37, - 0x2e,0x31,0x31,0x36,0x68,0x33,0x2e,0x32,0x36,0x38, - 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x34,0x2e,0x35, - 0x37,0x31,0x4c,0x31,0x36,0x2e,0x38,0x39,0x37,0x2c, - 0x37,0x2e,0x31,0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37,0x2e, - 0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x63,0x2d,0x30,0x2e,0x31,0x34,0x31,0x2c,0x30,0x2d, - 0x30,0x2e,0x32,0x38,0x32,0x2d,0x30,0x2e,0x30,0x34, - 0x2d,0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x31, - 0x31,0x39,0x4c,0x32,0x2e,0x37,0x32,0x2c,0x31,0x39, - 0x2e,0x31,0x36,0x32,0x63,0x2d,0x30,0x2e,0x32,0x31, - 0x35,0x2d,0x30,0x2e,0x31,0x33,0x38,0x2d,0x30,0x2e, - 0x33,0x34,0x35,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2d, - 0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36,0x33, - 0x31,0x0a,0x09,0x09,0x09,0x73,0x30,0x2e,0x31,0x33, - 0x2d,0x30,0x2e,0x34,0x39,0x33,0x2c,0x30,0x2e,0x33, - 0x34,0x35,0x2d,0x30,0x2e,0x36,0x33,0x31,0x6c,0x34, - 0x2e,0x36,0x38,0x34,0x2d,0x33,0x2e,0x30,0x30,0x36, - 0x63,0x30,0x2e,0x32,0x33,0x2d,0x30,0x2e,0x31,0x34, - 0x38,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e, - 0x31,0x35,0x38,0x2c,0x30,0x2e,0x37,0x36,0x36,0x2d, - 0x30,0x2e,0x30,0x32,0x37,0x63,0x30,0x2e,0x32,0x34, - 0x2c,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x33, - 0x39,0x2c,0x30,0x2e,0x33,0x38,0x34,0x2c,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x76,0x36, - 0x2e,0x30,0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2c, - 0x30,0x2e,0x32,0x37,0x34,0x2d,0x30,0x2e,0x31,0x34, - 0x38,0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e, - 0x33,0x39,0x2c,0x30,0x2e,0x36,0x35,0x38,0x43,0x38, - 0x2e,0x30,0x35,0x36,0x2c,0x32,0x32,0x2e,0x32,0x35, - 0x34,0x2c,0x37,0x2e,0x39,0x33,0x32,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x34,0x2c,0x37,0x2e,0x38,0x30,0x39, - 0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x7a,0x20,0x4d, - 0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e,0x35, - 0x33,0x6c,0x32,0x2e,0x35,0x34,0x35,0x2c,0x31,0x2e, - 0x36,0x33,0x32,0x76,0x2d,0x33,0x2e,0x32,0x36,0x35, - 0x4c,0x34,0x2e,0x35,0x31,0x34,0x2c,0x31,0x38,0x2e, - 0x35,0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x33,0x33,0x2e,0x38,0x37, - 0x39,0x2c,0x31,0x38,0x2e,0x35,0x32,0x39,0x6c,0x2d, - 0x34,0x2e,0x36,0x38,0x35,0x2d,0x33,0x2e,0x30,0x30, - 0x35,0x76,0x36,0x2e,0x30,0x31,0x4c,0x33,0x33,0x2e, - 0x38,0x37,0x39,0x2c,0x31,0x38,0x2e,0x35,0x32,0x39, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32, - 0x32,0x2e,0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31, - 0x32,0x34,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x34,0x36, - 0x2d,0x30,0x2e,0x30,0x33,0x2d,0x30,0x2e,0x33,0x35, - 0x38,0x2d,0x30,0x2e,0x30,0x39,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x31,0x33,0x32, - 0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x33, - 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30, - 0x2e,0x36,0x35,0x38,0x76,0x2d,0x36,0x2e,0x30,0x31, - 0x0a,0x09,0x09,0x09,0x63,0x30,0x2d,0x30,0x2e,0x32, - 0x37,0x34,0x2c,0x30,0x2e,0x31,0x34,0x39,0x2d,0x30, - 0x2e,0x35,0x32,0x36,0x2c,0x30,0x2e,0x33,0x39,0x32, - 0x2d,0x30,0x2e,0x36,0x35,0x38,0x63,0x30,0x2e,0x32, - 0x33,0x39,0x2d,0x30,0x2e,0x31,0x33,0x31,0x2c,0x30, - 0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x31,0x32,0x33, - 0x2c,0x30,0x2e,0x37,0x36,0x35,0x2c,0x30,0x2e,0x30, - 0x32,0x37,0x6c,0x34,0x2e,0x36,0x38,0x35,0x2c,0x33, - 0x2e,0x30,0x30,0x35,0x63,0x30,0x2e,0x32,0x31,0x35, - 0x2c,0x30,0x2e,0x31,0x33,0x38,0x2c,0x30,0x2e,0x33, - 0x34,0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x33,0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31, - 0x0a,0x09,0x09,0x09,0x73,0x2d,0x30,0x2e,0x31,0x33, - 0x2c,0x30,0x2e,0x34,0x39,0x33,0x2d,0x30,0x2e,0x33, - 0x34,0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d, - 0x34,0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30, - 0x34,0x43,0x32,0x39,0x2e,0x34,0x37,0x38,0x2c,0x32, - 0x32,0x2e,0x32,0x34,0x34,0x2c,0x32,0x39,0x2e,0x33, - 0x33,0x36,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c, - 0x32,0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e, - 0x32,0x38,0x34,0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39, - 0x34,0x35,0x2c,0x31,0x36,0x2e,0x38,0x39,0x36,0x76, - 0x33,0x2e,0x32,0x36,0x36,0x6c,0x32,0x2e,0x35,0x34, - 0x36,0x2d,0x31,0x2e,0x36,0x33,0x33,0x0a,0x09,0x09, - 0x09,0x4c,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c,0x31, - 0x36,0x2e,0x38,0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, - 0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, - 0x36,0x32,0x36,0x63,0x2d,0x30,0x2e,0x32,0x35,0x35, - 0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39,0x32,0x2d,0x30, - 0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d, - 0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30, - 0x30,0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0a,0x09, - 0x09,0x09,0x63,0x2d,0x30,0x2e,0x31,0x34,0x37,0x2d, - 0x30,0x2e,0x32,0x33,0x31,0x2d,0x30,0x2e,0x31,0x35, - 0x38,0x2d,0x30,0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e, - 0x30,0x32,0x36,0x2d,0x30,0x2e,0x37,0x36,0x36,0x73, - 0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e,0x33,0x39, - 0x31,0x2c,0x30,0x2e,0x36,0x35,0x37,0x2d,0x30,0x2e, - 0x33,0x39,0x31,0x68,0x36,0x2e,0x30,0x31,0x32,0x63, - 0x30,0x2e,0x32,0x37,0x33,0x2c,0x30,0x2c,0x30,0x2e, - 0x35,0x32,0x35,0x2c,0x30,0x2e,0x31,0x34,0x38,0x2c, - 0x30,0x2e,0x36,0x35,0x37,0x2c,0x30,0x2e,0x33,0x39, - 0x31,0x0a,0x09,0x09,0x09,0x63,0x30,0x2e,0x31,0x33, - 0x33,0x2c,0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31, - 0x32,0x31,0x2c,0x30,0x2e,0x35,0x33,0x33,0x2d,0x30, - 0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36,0x36, - 0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e, - 0x36,0x38,0x34,0x43,0x31,0x39,0x2e,0x30,0x32,0x33, - 0x2c,0x33,0x34,0x2e,0x34,0x39,0x36,0x2c,0x31,0x38, - 0x2e,0x37,0x38,0x36,0x2c,0x33,0x34,0x2e,0x36,0x32, - 0x36,0x2c,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34, - 0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e, - 0x38,0x39,0x37,0x2c,0x32,0x39,0x2e,0x39,0x34,0x32, - 0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c,0x32,0x2e,0x35, - 0x34,0x35,0x0a,0x09,0x09,0x09,0x6c,0x31,0x2e,0x36, - 0x33,0x35,0x2d,0x32,0x2e,0x35,0x34,0x35,0x48,0x31, - 0x36,0x2e,0x38,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x67,0x3e, - 0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__dpad_up_svg.cpp b/data/converted/help__dpad_up_svg.cpp deleted file mode 100644 index 5ce8aa3310..0000000000 --- a/data/converted/help__dpad_up_svg.cpp +++ /dev/null @@ -1,325 +0,0 @@ -// this file was auto-generated from "dpad_up.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__dpad_up_svg_size = 3165; -const uint8_t help__dpad_up_svg_data[3165] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, - 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, - 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, - 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, - 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, - 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, - 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, - 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, - 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, - 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, - 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, - 0x32,0x76,0x37,0x2e,0x31,0x31,0x63,0x30,0x2c,0x32, - 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, - 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, - 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, - 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, - 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, - 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, - 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, - 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, - 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, - 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, - 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, - 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, - 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, - 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, - 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, - 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, - 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, - 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, - 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, - 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, - 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, - 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, - 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, - 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, - 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, - 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, - 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, - 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, - 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, - 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, - 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x63, - 0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d,0x32, - 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x39,0x36,0x35, - 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, - 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, - 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, - 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, - 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, - 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, - 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x33,0x2e,0x31,0x38,0x33,0x6c,0x2d,0x33,0x2e,0x30, - 0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x68,0x36, - 0x2e,0x30,0x31,0x32,0x4c,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x33,0x2e,0x31,0x38,0x33,0x7a,0x22,0x2f,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, - 0x68,0x2d,0x36,0x2e,0x30,0x31,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x37,0x33,0x2c,0x30,0x2d,0x30,0x2e,0x35, - 0x32,0x35,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, - 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, - 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36,0x2d, - 0x30,0x2e,0x37,0x36,0x36,0x6c,0x33,0x2e,0x30,0x30, - 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e, - 0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36,0x2d, - 0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36,0x34, - 0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34, - 0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34,0x37, - 0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x31, - 0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c,0x30, - 0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36,0x36, - 0x43,0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e, - 0x34,0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31,0x31, - 0x2c,0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31,0x2e, - 0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x7a, - 0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36,0x2e,0x38, - 0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x68,0x33, - 0x2e,0x32,0x36,0x38,0x4c,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31,0x36,0x2e, - 0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x34, - 0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32,0x2d, - 0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30,0x35, - 0x2d,0x30,0x2e,0x31,0x31,0x39,0x4c,0x32,0x2e,0x37, - 0x32,0x2c,0x31,0x39,0x2e,0x31,0x36,0x32,0x63,0x2d, - 0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33, - 0x38,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e, - 0x33,0x37,0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d, - 0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73, - 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33, - 0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, - 0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33, - 0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d, - 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32, - 0x34,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e, - 0x37,0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63, - 0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31, - 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38, - 0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, - 0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09, - 0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d, - 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32, - 0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, - 0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32, - 0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33, - 0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37, - 0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38, - 0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34, - 0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33, - 0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e, - 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67, - 0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c, - 0x30,0x2d,0x30,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e, - 0x30,0x33,0x2d,0x30,0x2e,0x33,0x35,0x38,0x2d,0x30, - 0x2e,0x30,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, - 0x33,0x39,0x32,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d, - 0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35, - 0x38,0x76,0x2d,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09, - 0x09,0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, - 0x30,0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32, - 0x36,0x2c,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e, - 0x36,0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d, - 0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33, - 0x33,0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e, - 0x37,0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c, - 0x34,0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30, - 0x35,0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e, - 0x31,0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34, - 0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09, - 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, - 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, - 0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, - 0x39,0x2e,0x34,0x37,0x38,0x2c,0x32,0x32,0x2e,0x32, - 0x34,0x34,0x2c,0x32,0x39,0x2e,0x33,0x33,0x36,0x2c, - 0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x32,0x39,0x2e, - 0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c, - 0x31,0x36,0x2e,0x38,0x39,0x36,0x76,0x33,0x2e,0x32, - 0x36,0x36,0x6c,0x32,0x2e,0x35,0x34,0x36,0x2d,0x31, - 0x2e,0x36,0x33,0x33,0x0a,0x09,0x09,0x09,0x4c,0x32, - 0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38, - 0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x4c,0x31,0x38, - 0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36, - 0x63,0x2d,0x30,0x2e,0x32,0x35,0x35,0x2c,0x30,0x2d, - 0x30,0x2e,0x34,0x39,0x32,0x2d,0x30,0x2e,0x31,0x33, - 0x2d,0x30,0x2e,0x36,0x33,0x31,0x2d,0x30,0x2e,0x33, - 0x34,0x35,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35,0x2d, - 0x34,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09,0x09,0x63, - 0x2d,0x30,0x2e,0x31,0x34,0x37,0x2d,0x30,0x2e,0x32, - 0x33,0x31,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2d,0x30, - 0x2e,0x35,0x32,0x34,0x2d,0x30,0x2e,0x30,0x32,0x36, - 0x2d,0x30,0x2e,0x37,0x36,0x36,0x73,0x30,0x2e,0x33, - 0x38,0x34,0x2d,0x30,0x2e,0x33,0x39,0x31,0x2c,0x30, - 0x2e,0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x31, - 0x68,0x36,0x2e,0x30,0x31,0x32,0x63,0x30,0x2e,0x32, - 0x37,0x33,0x2c,0x30,0x2c,0x30,0x2e,0x35,0x32,0x35, - 0x2c,0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x36, - 0x35,0x37,0x2c,0x30,0x2e,0x33,0x39,0x31,0x0a,0x09, - 0x09,0x09,0x63,0x30,0x2e,0x31,0x33,0x33,0x2c,0x30, - 0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x32,0x31,0x2c, - 0x30,0x2e,0x35,0x33,0x33,0x2d,0x30,0x2e,0x30,0x32, - 0x36,0x2c,0x30,0x2e,0x37,0x36,0x36,0x6c,0x2d,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34, - 0x43,0x31,0x39,0x2e,0x30,0x32,0x33,0x2c,0x33,0x34, - 0x2e,0x34,0x39,0x36,0x2c,0x31,0x38,0x2e,0x37,0x38, - 0x36,0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x2c,0x31, - 0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e,0x36,0x32, - 0x36,0x7a,0x20,0x4d,0x31,0x36,0x2e,0x38,0x39,0x37, - 0x2c,0x32,0x39,0x2e,0x39,0x34,0x32,0x6c,0x31,0x2e, - 0x36,0x33,0x33,0x2c,0x32,0x2e,0x35,0x34,0x35,0x0a, - 0x09,0x09,0x09,0x6c,0x31,0x2e,0x36,0x33,0x35,0x2d, - 0x32,0x2e,0x35,0x34,0x35,0x48,0x31,0x36,0x2e,0x38, - 0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f, - 0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/help__dpad_updown_svg.cpp b/data/converted/help__dpad_updown_svg.cpp deleted file mode 100644 index 163d2773bd..0000000000 --- a/data/converted/help__dpad_updown_svg.cpp +++ /dev/null @@ -1,333 +0,0 @@ -// this file was auto-generated from "dpad_updown.svg" by res2h - -#include "../Resources.h" - -const uint16_t help__dpad_updown_svg_size = 3241; -const uint8_t help__dpad_updown_svg_data[3241] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x5f,0x78,0x33,0x30, - 0x5f,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22, - 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77, - 0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x32,0x30, - 0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20,0x78,0x6d, - 0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e,0x6b,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77, - 0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31, - 0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e,0x6b,0x22, - 0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22,0x20,0x79, - 0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09,0x20,0x77, - 0x69,0x64,0x74,0x68,0x3d,0x22,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67, - 0x68,0x74,0x3d,0x22,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77,0x42,0x6f, - 0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x33,0x37,0x2e, - 0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30,0x36,0x31, - 0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62, - 0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d, - 0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20,0x33, - 0x37,0x2e,0x30,0x36,0x31,0x20,0x33,0x37,0x2e,0x30, - 0x36,0x31,0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70, - 0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65, - 0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x67,0x3e, - 0x0a,0x09,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x33,0x37,0x2e,0x30, - 0x36,0x68,0x2d,0x37,0x2e,0x31,0x31,0x31,0x63,0x2d, - 0x32,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2d,0x33,0x2e, - 0x31,0x31,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2d, - 0x33,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x76,0x2d,0x38,0x2e,0x37,0x33,0x32,0x48,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x32,0x35,0x2e,0x32,0x30,0x36,0x2c,0x30,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x2c,0x30,0x2c,0x32,0x32, - 0x2e,0x30,0x38,0x35,0x0a,0x09,0x09,0x09,0x09,0x76, - 0x2d,0x37,0x2e,0x31,0x31,0x63,0x30,0x2d,0x32,0x2e, - 0x32,0x38,0x39,0x2c,0x31,0x2e,0x38,0x36,0x37,0x2d, - 0x33,0x2e,0x31,0x32,0x2c,0x33,0x2e,0x31,0x32,0x31, - 0x2d,0x33,0x2e,0x31,0x32,0x68,0x38,0x2e,0x37,0x33, - 0x33,0x56,0x33,0x2e,0x31,0x32,0x31,0x43,0x31,0x31, - 0x2e,0x38,0x35,0x35,0x2c,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x31,0x33,0x2e,0x37,0x32,0x2c,0x30,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x2c,0x30,0x68,0x37,0x2e, - 0x31,0x31,0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38, - 0x36,0x37,0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x68,0x38,0x2e,0x37,0x33, - 0x31,0x63,0x32,0x2e,0x32,0x39,0x2c,0x30,0x2c,0x33, - 0x2e,0x31,0x32,0x31,0x2c,0x31,0x2e,0x38,0x36,0x35, - 0x2c,0x33,0x2e,0x31,0x32,0x31,0x2c,0x33,0x2e,0x31, - 0x32,0x76,0x37,0x2e,0x31,0x31,0x63,0x30,0x2c,0x32, - 0x2e,0x32,0x39,0x2d,0x31,0x2e,0x38,0x36,0x36,0x2c, - 0x33,0x2e,0x31,0x32,0x31,0x2d,0x33,0x2e,0x31,0x32, - 0x31,0x2c,0x33,0x2e,0x31,0x32,0x31,0x68,0x2d,0x38, - 0x2e,0x37,0x33,0x31,0x76,0x38,0x2e,0x37,0x33,0x32, - 0x0a,0x09,0x09,0x09,0x09,0x43,0x32,0x35,0x2e,0x32, - 0x30,0x37,0x2c,0x33,0x36,0x2e,0x32,0x32,0x39,0x2c, - 0x32,0x33,0x2e,0x33,0x34,0x31,0x2c,0x33,0x37,0x2e, - 0x30,0x36,0x2c,0x32,0x32,0x2e,0x30,0x38,0x36,0x2c, - 0x33,0x37,0x2e,0x30,0x36,0x7a,0x20,0x4d,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x43,0x32,0x2e,0x37,0x34,0x35,0x2c,0x31,0x33,0x2e, - 0x33,0x35,0x39,0x2c,0x31,0x2e,0x35,0x2c,0x31,0x33, - 0x2e,0x34,0x39,0x33,0x2c,0x31,0x2e,0x35,0x2c,0x31, - 0x34,0x2e,0x39,0x37,0x34,0x76,0x37,0x2e,0x31,0x31, - 0x0a,0x09,0x09,0x09,0x09,0x63,0x30,0x2e,0x30,0x30, - 0x36,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x33,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c, - 0x31,0x2e,0x36,0x32,0x31,0x2c,0x31,0x2e,0x36,0x32, - 0x31,0x68,0x31,0x30,0x2e,0x32,0x33,0x33,0x76,0x31, - 0x30,0x2e,0x32,0x33,0x32,0x63,0x30,0x2e,0x30,0x30, - 0x35,0x2c,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e, - 0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2c,0x31, - 0x2e,0x36,0x31,0x39,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x68,0x37,0x2e,0x31,0x30,0x38,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30,0x2e, - 0x30,0x30,0x37,0x2c,0x31,0x2e,0x36,0x32,0x34,0x2d, - 0x30,0x2e,0x31,0x34,0x33,0x2c,0x31,0x2e,0x36,0x32, - 0x34,0x2d,0x31,0x2e,0x36,0x32,0x31,0x56,0x32,0x33, - 0x2e,0x37,0x30,0x36,0x68,0x31,0x30,0x2e,0x32,0x33, - 0x31,0x63,0x30,0x2e,0x33,0x37,0x36,0x2d,0x30,0x2e, - 0x30,0x30,0x36,0x2c,0x31,0x2e,0x36,0x32,0x31,0x2d, - 0x30,0x2e,0x31,0x34,0x2c,0x31,0x2e,0x36,0x32,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x76,0x2d,0x37,0x2e, - 0x31,0x31,0x0a,0x09,0x09,0x09,0x09,0x63,0x2d,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37,0x36, - 0x2d,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x32, - 0x2d,0x31,0x2e,0x36,0x32,0x31,0x2d,0x31,0x2e,0x36, - 0x32,0x68,0x2d,0x31,0x30,0x2e,0x32,0x33,0x56,0x33, - 0x2e,0x31,0x32,0x31,0x43,0x32,0x33,0x2e,0x37,0x30, - 0x31,0x2c,0x32,0x2e,0x37,0x34,0x35,0x2c,0x32,0x33, - 0x2e,0x35,0x36,0x37,0x2c,0x31,0x2e,0x35,0x2c,0x32, - 0x32,0x2e,0x30,0x38,0x36,0x2c,0x31,0x2e,0x35,0x68, - 0x2d,0x37,0x2e,0x31,0x31,0x31,0x0a,0x09,0x09,0x09, - 0x09,0x63,0x2d,0x30,0x2e,0x33,0x37,0x36,0x2c,0x30, - 0x2e,0x30,0x30,0x36,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x31,0x2e,0x36,0x31, - 0x39,0x2c,0x31,0x2e,0x36,0x32,0x31,0x76,0x31,0x30, - 0x2e,0x32,0x33,0x32,0x4c,0x33,0x2e,0x31,0x32,0x31, - 0x2c,0x31,0x33,0x2e,0x33,0x35,0x34,0x4c,0x33,0x2e, - 0x31,0x32,0x31,0x2c,0x31,0x33,0x2e,0x33,0x35,0x34, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c, - 0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x63,0x2d,0x32,0x2e,0x30,0x31,0x33, - 0x2c,0x30,0x2d,0x33,0x2e,0x36,0x34,0x39,0x2d,0x31, - 0x2e,0x36,0x33,0x39,0x2d,0x33,0x2e,0x36,0x34,0x39, - 0x2d,0x33,0x2e,0x36,0x35,0x31,0x73,0x31,0x2e,0x36, - 0x33,0x38,0x2d,0x33,0x2e,0x36,0x35,0x2c,0x33,0x2e, - 0x36,0x34,0x39,0x2d,0x33,0x2e,0x36,0x35,0x63,0x32, - 0x2e,0x30,0x31,0x33,0x2c,0x30,0x2c,0x33,0x2e,0x36, - 0x35,0x2c,0x31,0x2e,0x36,0x33,0x39,0x2c,0x33,0x2e, - 0x36,0x35,0x2c,0x33,0x2e,0x36,0x35,0x0a,0x09,0x09, - 0x09,0x43,0x32,0x32,0x2e,0x31,0x38,0x32,0x2c,0x32, - 0x30,0x2e,0x35,0x34,0x33,0x2c,0x32,0x30,0x2e,0x35, - 0x34,0x34,0x2c,0x32,0x32,0x2e,0x31,0x38,0x31,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x31,0x2c,0x32,0x32,0x2e, - 0x31,0x38,0x31,0x7a,0x20,0x4d,0x31,0x38,0x2e,0x35, - 0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x63, - 0x2d,0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2d,0x32, - 0x2e,0x31,0x34,0x39,0x2c,0x30,0x2e,0x39,0x36,0x35, - 0x2d,0x32,0x2e,0x31,0x34,0x39,0x2c,0x32,0x2e,0x31, - 0x35,0x73,0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e, - 0x31,0x35,0x31,0x2c,0x32,0x2e,0x31,0x34,0x39,0x2c, - 0x32,0x2e,0x31,0x35,0x31,0x0a,0x09,0x09,0x09,0x63, - 0x31,0x2e,0x31,0x38,0x36,0x2c,0x30,0x2c,0x32,0x2e, - 0x31,0x35,0x2d,0x30,0x2e,0x39,0x36,0x36,0x2c,0x32, - 0x2e,0x31,0x35,0x2d,0x32,0x2e,0x31,0x35,0x31,0x43, - 0x32,0x30,0x2e,0x36,0x38,0x32,0x2c,0x31,0x37,0x2e, - 0x33,0x34,0x34,0x2c,0x31,0x39,0x2e,0x37,0x31,0x37, - 0x2c,0x31,0x36,0x2e,0x33,0x37,0x39,0x2c,0x31,0x38, - 0x2e,0x35,0x33,0x31,0x2c,0x31,0x36,0x2e,0x33,0x37, - 0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67, - 0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x33,0x2e,0x31,0x38,0x33,0x6c,0x2d,0x33,0x2e,0x30, - 0x30,0x35,0x2c,0x34,0x2e,0x36,0x38,0x34,0x68,0x36, - 0x2e,0x30,0x31,0x32,0x4c,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x33,0x2e,0x31,0x38,0x33,0x7a,0x22,0x2f,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32,0x31, - 0x2e,0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36, - 0x68,0x2d,0x36,0x2e,0x30,0x31,0x32,0x63,0x2d,0x30, - 0x2e,0x32,0x37,0x33,0x2c,0x30,0x2d,0x30,0x2e,0x35, - 0x32,0x35,0x2d,0x30,0x2e,0x31,0x35,0x2d,0x30,0x2e, - 0x36,0x35,0x37,0x2d,0x30,0x2e,0x33,0x39,0x63,0x2d, - 0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x32,0x31,0x2d,0x30,0x2e, - 0x35,0x33,0x34,0x2c,0x30,0x2e,0x30,0x32,0x36,0x2d, - 0x30,0x2e,0x37,0x36,0x36,0x6c,0x33,0x2e,0x30,0x30, - 0x35,0x2d,0x34,0x2e,0x36,0x38,0x34,0x0a,0x09,0x09, - 0x09,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e, - 0x34,0x33,0x31,0x2c,0x30,0x2e,0x39,0x38,0x36,0x2d, - 0x30,0x2e,0x34,0x33,0x2c,0x31,0x2e,0x32,0x36,0x34, - 0x2c,0x30,0x6c,0x33,0x2e,0x30,0x30,0x35,0x2c,0x34, - 0x2e,0x36,0x38,0x34,0x63,0x30,0x2e,0x31,0x34,0x37, - 0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x31, - 0x35,0x39,0x2c,0x30,0x2e,0x35,0x32,0x34,0x2c,0x30, - 0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e,0x37,0x36,0x36, - 0x43,0x32,0x32,0x2e,0x30,0x36,0x33,0x2c,0x38,0x2e, - 0x34,0x36,0x36,0x2c,0x32,0x31,0x2e,0x38,0x31,0x31, - 0x2c,0x38,0x2e,0x36,0x31,0x36,0x2c,0x32,0x31,0x2e, - 0x35,0x33,0x36,0x2c,0x38,0x2e,0x36,0x31,0x36,0x7a, - 0x0a,0x09,0x09,0x09,0x20,0x4d,0x31,0x36,0x2e,0x38, - 0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x68,0x33, - 0x2e,0x32,0x36,0x38,0x4c,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x34,0x2e,0x35,0x37,0x31,0x4c,0x31,0x36,0x2e, - 0x38,0x39,0x37,0x2c,0x37,0x2e,0x31,0x31,0x36,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a, - 0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x37,0x2e,0x38,0x30,0x39,0x2c,0x32,0x32, - 0x2e,0x32,0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x34, - 0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32,0x38,0x32,0x2d, - 0x30,0x2e,0x30,0x34,0x2d,0x30,0x2e,0x34,0x30,0x35, - 0x2d,0x30,0x2e,0x31,0x31,0x39,0x4c,0x32,0x2e,0x37, - 0x32,0x2c,0x31,0x39,0x2e,0x31,0x36,0x32,0x63,0x2d, - 0x30,0x2e,0x32,0x31,0x35,0x2d,0x30,0x2e,0x31,0x33, - 0x38,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e, - 0x33,0x37,0x36,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2d, - 0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09,0x09,0x73, - 0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x34,0x39,0x33, - 0x2c,0x30,0x2e,0x33,0x34,0x35,0x2d,0x30,0x2e,0x36, - 0x33,0x31,0x6c,0x34,0x2e,0x36,0x38,0x34,0x2d,0x33, - 0x2e,0x30,0x30,0x36,0x63,0x30,0x2e,0x32,0x33,0x2d, - 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32, - 0x34,0x2d,0x30,0x2e,0x31,0x35,0x38,0x2c,0x30,0x2e, - 0x37,0x36,0x36,0x2d,0x30,0x2e,0x30,0x32,0x37,0x63, - 0x30,0x2e,0x32,0x34,0x2c,0x30,0x2e,0x31,0x33,0x31, - 0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x33,0x38, - 0x34,0x2c,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, - 0x35,0x38,0x76,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09, - 0x09,0x63,0x30,0x2c,0x30,0x2e,0x32,0x37,0x34,0x2d, - 0x30,0x2e,0x31,0x34,0x38,0x2c,0x30,0x2e,0x35,0x32, - 0x36,0x2d,0x30,0x2e,0x33,0x39,0x2c,0x30,0x2e,0x36, - 0x35,0x38,0x43,0x38,0x2e,0x30,0x35,0x36,0x2c,0x32, - 0x32,0x2e,0x32,0x35,0x34,0x2c,0x37,0x2e,0x39,0x33, - 0x32,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x37, - 0x2e,0x38,0x30,0x39,0x2c,0x32,0x32,0x2e,0x32,0x38, - 0x34,0x7a,0x20,0x4d,0x34,0x2e,0x35,0x31,0x34,0x2c, - 0x31,0x38,0x2e,0x35,0x33,0x6c,0x32,0x2e,0x35,0x34, - 0x35,0x2c,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x33, - 0x2e,0x32,0x36,0x35,0x4c,0x34,0x2e,0x35,0x31,0x34, - 0x2c,0x31,0x38,0x2e,0x35,0x33,0x7a,0x22,0x2f,0x3e, - 0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x09,0x3c,0x67, - 0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x39,0x2e,0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32, - 0x38,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32,0x34,0x2c, - 0x30,0x2d,0x30,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e, - 0x30,0x33,0x2d,0x30,0x2e,0x33,0x35,0x38,0x2d,0x30, - 0x2e,0x30,0x39,0x32,0x63,0x2d,0x30,0x2e,0x32,0x34, - 0x31,0x2d,0x30,0x2e,0x31,0x33,0x32,0x2d,0x30,0x2e, - 0x33,0x39,0x32,0x2d,0x30,0x2e,0x33,0x38,0x34,0x2d, - 0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e,0x36,0x35, - 0x38,0x76,0x2d,0x36,0x2e,0x30,0x31,0x0a,0x09,0x09, - 0x09,0x63,0x30,0x2d,0x30,0x2e,0x32,0x37,0x34,0x2c, - 0x30,0x2e,0x31,0x34,0x39,0x2d,0x30,0x2e,0x35,0x32, - 0x36,0x2c,0x30,0x2e,0x33,0x39,0x32,0x2d,0x30,0x2e, - 0x36,0x35,0x38,0x63,0x30,0x2e,0x32,0x33,0x39,0x2d, - 0x30,0x2e,0x31,0x33,0x31,0x2c,0x30,0x2e,0x35,0x33, - 0x33,0x2d,0x30,0x2e,0x31,0x32,0x33,0x2c,0x30,0x2e, - 0x37,0x36,0x35,0x2c,0x30,0x2e,0x30,0x32,0x37,0x6c, - 0x34,0x2e,0x36,0x38,0x35,0x2c,0x33,0x2e,0x30,0x30, - 0x35,0x63,0x30,0x2e,0x32,0x31,0x35,0x2c,0x30,0x2e, - 0x31,0x33,0x38,0x2c,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x33,0x37,0x36,0x2c,0x30,0x2e,0x33,0x34, - 0x35,0x2c,0x30,0x2e,0x36,0x33,0x31,0x0a,0x09,0x09, - 0x09,0x73,0x2d,0x30,0x2e,0x31,0x33,0x2c,0x30,0x2e, - 0x34,0x39,0x33,0x2d,0x30,0x2e,0x33,0x34,0x35,0x2c, - 0x30,0x2e,0x36,0x33,0x31,0x6c,0x2d,0x34,0x2e,0x36, - 0x38,0x35,0x2c,0x33,0x2e,0x30,0x30,0x34,0x43,0x32, - 0x39,0x2e,0x34,0x37,0x38,0x2c,0x32,0x32,0x2e,0x32, - 0x34,0x34,0x2c,0x32,0x39,0x2e,0x33,0x33,0x36,0x2c, - 0x32,0x32,0x2e,0x32,0x38,0x34,0x2c,0x32,0x39,0x2e, - 0x31,0x39,0x35,0x2c,0x32,0x32,0x2e,0x32,0x38,0x34, - 0x7a,0x20,0x4d,0x32,0x39,0x2e,0x39,0x34,0x35,0x2c, - 0x31,0x36,0x2e,0x38,0x39,0x36,0x76,0x33,0x2e,0x32, - 0x36,0x36,0x6c,0x32,0x2e,0x35,0x34,0x36,0x2d,0x31, - 0x2e,0x36,0x33,0x33,0x0a,0x09,0x09,0x09,0x4c,0x32, - 0x39,0x2e,0x39,0x34,0x35,0x2c,0x31,0x36,0x2e,0x38, - 0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0a,0x09,0x3c,0x67,0x3e,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x33,0x33,0x2e,0x38,0x37,0x36,0x6c,0x33,0x2e, - 0x30,0x30,0x37,0x2d,0x34,0x2e,0x36,0x38,0x34,0x68, - 0x2d,0x36,0x2e,0x30,0x31,0x32,0x4c,0x31,0x38,0x2e, - 0x35,0x33,0x2c,0x33,0x33,0x2e,0x38,0x37,0x36,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x31,0x38,0x2e,0x35,0x33,0x2c,0x33,0x34,0x2e, - 0x36,0x32,0x36,0x4c,0x31,0x38,0x2e,0x35,0x33,0x2c, - 0x33,0x34,0x2e,0x36,0x32,0x36,0x63,0x2d,0x30,0x2e, - 0x32,0x35,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x34,0x39, - 0x32,0x2d,0x30,0x2e,0x31,0x33,0x2d,0x30,0x2e,0x36, - 0x33,0x31,0x2d,0x30,0x2e,0x33,0x34,0x35,0x6c,0x2d, - 0x33,0x2e,0x30,0x30,0x35,0x2d,0x34,0x2e,0x36,0x38, - 0x34,0x0a,0x09,0x09,0x09,0x63,0x2d,0x30,0x2e,0x31, - 0x34,0x37,0x2d,0x30,0x2e,0x32,0x33,0x31,0x2d,0x30, - 0x2e,0x31,0x35,0x38,0x2d,0x30,0x2e,0x35,0x32,0x34, - 0x2d,0x30,0x2e,0x30,0x32,0x36,0x2d,0x30,0x2e,0x37, - 0x36,0x36,0x73,0x30,0x2e,0x33,0x38,0x34,0x2d,0x30, - 0x2e,0x33,0x39,0x31,0x2c,0x30,0x2e,0x36,0x35,0x37, - 0x2d,0x30,0x2e,0x33,0x39,0x31,0x68,0x36,0x2e,0x30, - 0x31,0x32,0x63,0x30,0x2e,0x32,0x37,0x33,0x2c,0x30, - 0x2c,0x30,0x2e,0x35,0x32,0x35,0x2c,0x30,0x2e,0x31, - 0x34,0x38,0x2c,0x30,0x2e,0x36,0x35,0x37,0x2c,0x30, - 0x2e,0x33,0x39,0x31,0x0a,0x09,0x09,0x09,0x63,0x30, - 0x2e,0x31,0x33,0x33,0x2c,0x30,0x2e,0x32,0x34,0x2c, - 0x30,0x2e,0x31,0x32,0x31,0x2c,0x30,0x2e,0x35,0x33, - 0x33,0x2d,0x30,0x2e,0x30,0x32,0x36,0x2c,0x30,0x2e, - 0x37,0x36,0x36,0x6c,0x2d,0x33,0x2e,0x30,0x30,0x35, - 0x2c,0x34,0x2e,0x36,0x38,0x34,0x43,0x31,0x39,0x2e, - 0x30,0x32,0x33,0x2c,0x33,0x34,0x2e,0x34,0x39,0x36, - 0x2c,0x31,0x38,0x2e,0x37,0x38,0x36,0x2c,0x33,0x34, - 0x2e,0x36,0x32,0x36,0x2c,0x31,0x38,0x2e,0x35,0x33, - 0x2c,0x33,0x34,0x2e,0x36,0x32,0x36,0x7a,0x20,0x4d, - 0x31,0x36,0x2e,0x38,0x39,0x37,0x2c,0x32,0x39,0x2e, - 0x39,0x34,0x32,0x6c,0x31,0x2e,0x36,0x33,0x33,0x2c, - 0x32,0x2e,0x35,0x34,0x35,0x0a,0x09,0x09,0x09,0x6c, - 0x31,0x2e,0x36,0x33,0x35,0x2d,0x32,0x2e,0x35,0x34, - 0x35,0x48,0x31,0x36,0x2e,0x38,0x39,0x37,0x7a,0x22, - 0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, - 0x0a -}; - diff --git a/data/converted/off_svg.cpp b/data/converted/off_svg.cpp deleted file mode 100644 index 38ee78893a..0000000000 --- a/data/converted/off_svg.cpp +++ /dev/null @@ -1,141 +0,0 @@ -// this file was auto-generated from "off.svg" by res2h - -#include "../Resources.h" - -const uint16_t off_svg_size = 1325; -const uint8_t off_svg_data[1325] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x34,0x33, - 0x2e,0x39,0x31,0x36,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, - 0x35,0x39,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x34, - 0x33,0x2e,0x39,0x31,0x36,0x20,0x32,0x31,0x2e,0x39, - 0x35,0x39,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x34,0x33,0x2e,0x39,0x31,0x36,0x20,0x32,0x31, - 0x2e,0x39,0x35,0x39,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x32,0x39,0x2e,0x32,0x39,0x31,0x2c, - 0x31,0x35,0x2e,0x36,0x39,0x68,0x31,0x2e,0x39,0x33, - 0x34,0x76,0x2d,0x34,0x2e,0x31,0x31,0x33,0x68,0x35, - 0x2e,0x34,0x32,0x76,0x2d,0x31,0x2e,0x34,0x37,0x39, - 0x68,0x2d,0x35,0x2e,0x34,0x32,0x56,0x37,0x2e,0x37, - 0x30,0x34,0x68,0x35,0x2e,0x37,0x32,0x39,0x56,0x36, - 0x2e,0x32,0x32,0x35,0x68,0x2d,0x37,0x2e,0x36,0x36, - 0x32,0x56,0x31,0x35,0x2e,0x36,0x39,0x7a,0x20,0x4d, - 0x31,0x39,0x2e,0x38,0x31,0x2c,0x31,0x35,0x2e,0x36, - 0x39,0x68,0x31,0x2e,0x39,0x33,0x36,0x76,0x2d,0x34, - 0x2e,0x31,0x31,0x33,0x0a,0x09,0x68,0x35,0x2e,0x34, - 0x31,0x36,0x76,0x2d,0x31,0x2e,0x34,0x37,0x39,0x68, - 0x2d,0x35,0x2e,0x34,0x31,0x36,0x56,0x37,0x2e,0x37, - 0x30,0x34,0x68,0x35,0x2e,0x37,0x32,0x35,0x56,0x36, - 0x2e,0x32,0x32,0x35,0x68,0x2d,0x37,0x2e,0x36,0x36, - 0x56,0x31,0x35,0x2e,0x36,0x39,0x7a,0x20,0x4d,0x31, - 0x32,0x2e,0x33,0x37,0x38,0x2c,0x31,0x34,0x2e,0x34, - 0x37,0x33,0x63,0x2d,0x32,0x2e,0x31,0x36,0x36,0x2c, - 0x30,0x2d,0x33,0x2e,0x34,0x30,0x34,0x2d,0x31,0x2e, - 0x34,0x33,0x35,0x2d,0x33,0x2e,0x34,0x30,0x34,0x2d, - 0x33,0x2e,0x35,0x31,0x37,0x0a,0x09,0x63,0x30,0x2d, - 0x32,0x2e,0x30,0x38,0x33,0x2c,0x31,0x2e,0x32,0x33, - 0x38,0x2d,0x33,0x2e,0x35,0x31,0x38,0x2c,0x33,0x2e, - 0x34,0x30,0x34,0x2d,0x33,0x2e,0x35,0x31,0x38,0x63, - 0x32,0x2e,0x31,0x36,0x37,0x2c,0x30,0x2c,0x33,0x2e, - 0x34,0x30,0x36,0x2c,0x31,0x2e,0x34,0x33,0x35,0x2c, - 0x33,0x2e,0x34,0x30,0x36,0x2c,0x33,0x2e,0x35,0x31, - 0x38,0x43,0x31,0x35,0x2e,0x37,0x38,0x34,0x2c,0x31, - 0x33,0x2e,0x30,0x33,0x38,0x2c,0x31,0x34,0x2e,0x35, - 0x34,0x35,0x2c,0x31,0x34,0x2e,0x34,0x37,0x33,0x2c, - 0x31,0x32,0x2e,0x33,0x37,0x38,0x2c,0x31,0x34,0x2e, - 0x34,0x37,0x33,0x20,0x4d,0x31,0x32,0x2e,0x33,0x37, - 0x38,0x2c,0x31,0x35,0x2e,0x39,0x35,0x36,0x0a,0x09, - 0x63,0x33,0x2e,0x38,0x39,0x36,0x2c,0x30,0x2c,0x35, - 0x2e,0x34,0x31,0x39,0x2d,0x32,0x2e,0x33,0x33,0x35, - 0x2c,0x35,0x2e,0x34,0x31,0x39,0x2d,0x35,0x73,0x2d, - 0x31,0x2e,0x35,0x32,0x32,0x2d,0x34,0x2e,0x39,0x39, - 0x37,0x2d,0x35,0x2e,0x34,0x31,0x39,0x2d,0x34,0x2e, - 0x39,0x39,0x37,0x63,0x2d,0x33,0x2e,0x38,0x39,0x36, - 0x2c,0x30,0x2d,0x35,0x2e,0x34,0x31,0x36,0x2c,0x32, - 0x2e,0x33,0x33,0x32,0x2d,0x35,0x2e,0x34,0x31,0x36, - 0x2c,0x34,0x2e,0x39,0x39,0x37,0x53,0x38,0x2e,0x34, - 0x38,0x32,0x2c,0x31,0x35,0x2e,0x39,0x35,0x36,0x2c, - 0x31,0x32,0x2e,0x33,0x37,0x38,0x2c,0x31,0x35,0x2e, - 0x39,0x35,0x36,0x22,0x2f,0x3e,0x0a,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x33,0x39,0x2e,0x36,0x36,0x34,0x2c,0x31, - 0x2e,0x35,0x63,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, - 0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x31,0x2e,0x32, - 0x33,0x34,0x2c,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32, - 0x2e,0x37,0x35,0x32,0x76,0x31,0x33,0x2e,0x34,0x35, - 0x35,0x63,0x30,0x2c,0x31,0x2e,0x35,0x31,0x38,0x2d, - 0x31,0x2e,0x32,0x33,0x34,0x2c,0x32,0x2e,0x37,0x35, - 0x32,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2c,0x32,0x2e, - 0x37,0x35,0x32,0x48,0x34,0x2e,0x32,0x35,0x32,0x0a, - 0x09,0x63,0x2d,0x31,0x2e,0x35,0x31,0x38,0x2c,0x30, - 0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x31,0x2e,0x32, - 0x33,0x34,0x2d,0x32,0x2e,0x37,0x35,0x32,0x2d,0x32, - 0x2e,0x37,0x35,0x32,0x56,0x34,0x2e,0x32,0x35,0x32, - 0x43,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x37,0x33,0x34, - 0x2c,0x32,0x2e,0x37,0x33,0x34,0x2c,0x31,0x2e,0x35, - 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x31,0x2e,0x35, - 0x48,0x33,0x39,0x2e,0x36,0x36,0x34,0x20,0x4d,0x33, - 0x39,0x2e,0x36,0x36,0x34,0x2c,0x30,0x48,0x34,0x2e, - 0x32,0x35,0x32,0x43,0x31,0x2e,0x39,0x31,0x34,0x2c, - 0x30,0x2c,0x30,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c, - 0x30,0x2c,0x34,0x2e,0x32,0x35,0x32,0x76,0x31,0x33, - 0x2e,0x34,0x35,0x35,0x0a,0x09,0x63,0x30,0x2c,0x32, - 0x2e,0x33,0x33,0x39,0x2c,0x31,0x2e,0x39,0x31,0x34, - 0x2c,0x34,0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e,0x32, - 0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32,0x68,0x33, - 0x35,0x2e,0x34,0x31,0x32,0x63,0x32,0x2e,0x33,0x33, - 0x39,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35,0x32,0x2d, - 0x31,0x2e,0x39,0x31,0x33,0x2c,0x34,0x2e,0x32,0x35, - 0x32,0x2d,0x34,0x2e,0x32,0x35,0x32,0x56,0x34,0x2e, - 0x32,0x35,0x32,0x43,0x34,0x33,0x2e,0x39,0x31,0x36, - 0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x32,0x2e, - 0x30,0x30,0x33,0x2c,0x30,0x2c,0x33,0x39,0x2e,0x36, - 0x36,0x34,0x2c,0x30,0x4c,0x33,0x39,0x2e,0x36,0x36, - 0x34,0x2c,0x30,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f, - 0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/on_svg.cpp b/data/converted/on_svg.cpp deleted file mode 100644 index 27a1fe8c19..0000000000 --- a/data/converted/on_svg.cpp +++ /dev/null @@ -1,122 +0,0 @@ -// this file was auto-generated from "on.svg" by res2h - -#include "../Resources.h" - -const uint16_t on_svg_size = 1132; -const uint8_t on_svg_data[1132] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x34,0x33, - 0x2e,0x39,0x31,0x36,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, - 0x35,0x39,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x34, - 0x33,0x2e,0x39,0x31,0x36,0x20,0x32,0x31,0x2e,0x39, - 0x35,0x39,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x34,0x33,0x2e,0x39,0x31,0x36,0x20,0x32,0x31, - 0x2e,0x39,0x35,0x39,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x35, - 0x2e,0x37,0x35,0x34,0x2c,0x37,0x2e,0x34,0x36,0x31, - 0x63,0x2d,0x32,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2d, - 0x33,0x2e,0x36,0x34,0x33,0x2c,0x31,0x2e,0x34,0x33, - 0x34,0x2d,0x33,0x2e,0x36,0x34,0x33,0x2c,0x33,0x2e, - 0x35,0x31,0x38,0x63,0x30,0x2c,0x32,0x2e,0x30,0x38, - 0x33,0x2c,0x31,0x2e,0x33,0x32,0x35,0x2c,0x33,0x2e, - 0x35,0x32,0x31,0x2c,0x33,0x2e,0x36,0x34,0x33,0x2c, - 0x33,0x2e,0x35,0x32,0x31,0x0a,0x09,0x09,0x63,0x32, - 0x2e,0x33,0x32,0x2c,0x30,0x2c,0x33,0x2e,0x36,0x34, - 0x34,0x2d,0x31,0x2e,0x34,0x33,0x37,0x2c,0x33,0x2e, - 0x36,0x34,0x35,0x2d,0x33,0x2e,0x35,0x32,0x31,0x43, - 0x31,0x39,0x2e,0x33,0x39,0x39,0x2c,0x38,0x2e,0x38, - 0x39,0x35,0x2c,0x31,0x38,0x2e,0x30,0x37,0x34,0x2c, - 0x37,0x2e,0x34,0x36,0x31,0x2c,0x31,0x35,0x2e,0x37, - 0x35,0x34,0x2c,0x37,0x2e,0x34,0x36,0x31,0x7a,0x22, - 0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x33, - 0x39,0x2e,0x36,0x36,0x34,0x2c,0x30,0x48,0x34,0x2e, - 0x32,0x35,0x32,0x43,0x31,0x2e,0x39,0x31,0x34,0x2c, - 0x30,0x2c,0x30,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c, - 0x30,0x2c,0x34,0x2e,0x32,0x35,0x32,0x76,0x31,0x33, - 0x2e,0x34,0x35,0x35,0x63,0x30,0x2c,0x32,0x2e,0x33, - 0x33,0x39,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34, - 0x2e,0x32,0x35,0x32,0x2c,0x34,0x2e,0x32,0x35,0x32, - 0x2c,0x34,0x2e,0x32,0x35,0x32,0x68,0x33,0x35,0x2e, - 0x34,0x31,0x32,0x0a,0x09,0x09,0x63,0x32,0x2e,0x33, - 0x33,0x39,0x2c,0x30,0x2c,0x34,0x2e,0x32,0x35,0x32, - 0x2d,0x31,0x2e,0x39,0x31,0x33,0x2c,0x34,0x2e,0x32, - 0x35,0x32,0x2d,0x34,0x2e,0x32,0x35,0x32,0x56,0x34, - 0x2e,0x32,0x35,0x32,0x43,0x34,0x33,0x2e,0x39,0x31, - 0x36,0x2c,0x31,0x2e,0x39,0x31,0x34,0x2c,0x34,0x32, - 0x2e,0x30,0x30,0x33,0x2c,0x30,0x2c,0x33,0x39,0x2e, - 0x36,0x36,0x34,0x2c,0x30,0x7a,0x20,0x4d,0x31,0x35, - 0x2e,0x37,0x35,0x34,0x2c,0x31,0x35,0x2e,0x39,0x37, - 0x39,0x63,0x2d,0x34,0x2e,0x31,0x36,0x38,0x2c,0x30, - 0x2d,0x35,0x2e,0x37,0x39,0x36,0x2d,0x32,0x2e,0x33, - 0x33,0x34,0x2d,0x35,0x2e,0x37,0x39,0x36,0x2d,0x35, - 0x0a,0x09,0x09,0x63,0x30,0x2d,0x32,0x2e,0x36,0x36, - 0x39,0x2c,0x31,0x2e,0x36,0x32,0x38,0x2d,0x35,0x2e, - 0x30,0x30,0x31,0x2c,0x35,0x2e,0x37,0x39,0x36,0x2d, - 0x35,0x2e,0x30,0x30,0x31,0x63,0x34,0x2e,0x31,0x37, - 0x2c,0x30,0x2c,0x35,0x2e,0x37,0x39,0x38,0x2c,0x32, - 0x2e,0x33,0x33,0x32,0x2c,0x35,0x2e,0x37,0x39,0x38, - 0x2c,0x35,0x2e,0x30,0x30,0x31,0x43,0x32,0x31,0x2e, - 0x35,0x35,0x32,0x2c,0x31,0x33,0x2e,0x36,0x34,0x34, - 0x2c,0x31,0x39,0x2e,0x39,0x32,0x34,0x2c,0x31,0x35, - 0x2e,0x39,0x37,0x39,0x2c,0x31,0x35,0x2e,0x37,0x35, - 0x34,0x2c,0x31,0x35,0x2e,0x39,0x37,0x39,0x7a,0x20, - 0x4d,0x33,0x33,0x2e,0x39,0x35,0x37,0x2c,0x31,0x35, - 0x2e,0x37,0x31,0x35,0x0a,0x09,0x09,0x68,0x2d,0x32, - 0x2e,0x33,0x33,0x32,0x4c,0x32,0x35,0x2e,0x37,0x32, - 0x2c,0x38,0x2e,0x36,0x30,0x32,0x68,0x2d,0x30,0x2e, - 0x30,0x32,0x37,0x76,0x37,0x2e,0x31,0x31,0x33,0x68, - 0x2d,0x31,0x2e,0x39,0x38,0x38,0x56,0x36,0x2e,0x32, - 0x34,0x34,0x68,0x32,0x2e,0x33,0x37,0x33,0x6c,0x35, - 0x2e,0x38,0x36,0x35,0x2c,0x37,0x2e,0x31,0x31,0x34, - 0x68,0x30,0x2e,0x30,0x32,0x37,0x56,0x36,0x2e,0x32, - 0x34,0x34,0x68,0x31,0x2e,0x39,0x38,0x37,0x56,0x31, - 0x35,0x2e,0x37,0x31,0x35,0x7a,0x22,0x2f,0x3e,0x0a, - 0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67, - 0x3e,0x0a -}; - diff --git a/data/converted/opensans_hebrew_condensed_light_ttf.cpp b/data/converted/opensans_hebrew_condensed_light_ttf.cpp deleted file mode 100644 index 7255a45a90..0000000000 --- a/data/converted/opensans_hebrew_condensed_light_ttf.cpp +++ /dev/null @@ -1,3295 +0,0 @@ -// this file was auto-generated from "opensans_hebrew_condensed_light.ttf" by res2h - -#include "../Resources.h" - -const uint16_t opensans_hebrew_condensed_light_ttf_size = 32868; -const uint8_t opensans_hebrew_condensed_light_ttf_data[32868] = { - 0x00,0x01,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x04, - 0x00,0x00,0x46,0x46,0x54,0x4d,0x67,0x7f,0x0d,0x13, - 0x00,0x00,0x7c,0xb4,0x00,0x00,0x00,0x1c,0x47,0x44, - 0x45,0x46,0x03,0xd1,0x04,0xb1,0x00,0x00,0x7c,0xd0, - 0x00,0x00,0x00,0x36,0x47,0x50,0x4f,0x53,0xc8,0x42, - 0xaa,0x57,0x00,0x00,0x7d,0x08,0x00,0x00,0x03,0x3a, - 0x47,0x53,0x55,0x42,0x68,0x93,0x62,0x93,0x00,0x00, - 0x80,0x44,0x00,0x00,0x00,0x1e,0x4f,0x53,0x2f,0x32, - 0x7f,0x1c,0xcd,0x34,0x00,0x00,0x01,0x88,0x00,0x00, - 0x00,0x60,0x63,0x6d,0x61,0x70,0x0a,0x98,0xec,0xca, - 0x00,0x00,0x06,0xc4,0x00,0x00,0x03,0x56,0x67,0x61, - 0x73,0x70,0x00,0x00,0x00,0x10,0x00,0x00,0x7c,0xac, - 0x00,0x00,0x00,0x08,0x67,0x6c,0x79,0x66,0xef,0xde, - 0xcd,0x13,0x00,0x00,0x0c,0x94,0x00,0x00,0x61,0x64, - 0x68,0x65,0x61,0x64,0x02,0xea,0x24,0x85,0x00,0x00, - 0x01,0x0c,0x00,0x00,0x00,0x36,0x68,0x68,0x65,0x61, - 0x0e,0xf1,0x05,0x93,0x00,0x00,0x01,0x44,0x00,0x00, - 0x00,0x24,0x68,0x6d,0x74,0x78,0x88,0x5f,0x5a,0xe2, - 0x00,0x00,0x01,0xe8,0x00,0x00,0x04,0xdc,0x6c,0x6f, - 0x63,0x61,0x42,0xdc,0x5b,0x10,0x00,0x00,0x0a,0x24, - 0x00,0x00,0x02,0x70,0x6d,0x61,0x78,0x70,0x01,0x80, - 0x00,0x49,0x00,0x00,0x01,0x68,0x00,0x00,0x00,0x20, - 0x6e,0x61,0x6d,0x65,0x61,0x6e,0xb0,0xc4,0x00,0x00, - 0x6d,0xf8,0x00,0x00,0x08,0xe8,0x70,0x6f,0x73,0x74, - 0x38,0xa2,0xa4,0x31,0x00,0x00,0x76,0xe0,0x00,0x00, - 0x05,0xca,0x70,0x72,0x65,0x70,0x68,0x06,0x8c,0x85, - 0x00,0x00,0x0a,0x1c,0x00,0x00,0x00,0x07,0x00,0x01, - 0x00,0x00,0x00,0x02,0x00,0x41,0xc4,0xb8,0xc0,0x2c, - 0x5f,0x0f,0x3c,0xf5,0x02,0x09,0x08,0x00,0x00,0x00, - 0x00,0x00,0xcd,0xac,0x5d,0x6c,0x00,0x00,0x00,0x00, - 0xcd,0xc0,0x7c,0x56,0xfe,0xb3,0xfe,0x12,0x07,0xae, - 0x07,0x73,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x08,0x8d, - 0xfd,0xa8,0x00,0x00,0x08,0x00,0xfe,0xb3,0xfe,0xb3, - 0x07,0xae,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x37, - 0x00,0x01,0x00,0x00,0x01,0x37,0x00,0x46,0x00,0x07, - 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01, - 0x00,0x01,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x03,0x03,0x1b,0x01,0x2c,0x00,0x03, - 0x00,0x00,0x05,0x33,0x04,0xcc,0x00,0x00,0x00,0x99, - 0x05,0x33,0x04,0xcc,0x00,0x00,0x02,0xcc,0x00,0x32, - 0x02,0x9e,0x00,0x00,0x00,0x00,0x04,0x06,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x03,0x40,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x55,0x4b,0x57,0x4e,0x00,0x00,0x00,0x0d,0xfb,0x4b, - 0x06,0x1f,0xfe,0x14,0x00,0x84,0x08,0x8d,0x02,0x58, - 0x20,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x04,0x3d, - 0x05,0xb6,0x00,0x00,0x00,0x20,0x00,0x04,0x02,0x14, - 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xaa,0x00,0x00, - 0x02,0x14,0x00,0x00,0x01,0x81,0x00,0x00,0x01,0xc3, - 0x00,0x93,0x02,0xae,0x00,0x85,0x03,0x64,0x00,0x25, - 0x03,0x33,0x00,0x5e,0x04,0xb8,0x00,0x5e,0x03,0x42, - 0x00,0x42,0x01,0x85,0x00,0x85,0x02,0x35,0x00,0x68, - 0x02,0x35,0x00,0x54,0x02,0xe9,0x00,0x5e,0x03,0x33, - 0x00,0x3b,0x01,0xa6,0x00,0x4e,0x02,0x04,0x00,0x35, - 0x01,0xa6,0x00,0x85,0x02,0xc9,0x00,0x33,0x03,0x33, - 0x00,0x58,0x03,0x33,0x00,0x96,0x03,0x33,0x00,0x4a, - 0x03,0x33,0x00,0x4c,0x03,0x33,0x00,0x25,0x03,0x33, - 0x00,0x62,0x03,0x33,0x00,0x64,0x03,0x33,0x00,0x39, - 0x03,0x33,0x00,0x48,0x03,0x33,0x00,0x52,0x01,0xa6, - 0x00,0x85,0x01,0xa6,0x00,0x4e,0x03,0x33,0x00,0x3b, - 0x03,0x33,0x00,0x3b,0x03,0x33,0x00,0x39,0x02,0x42, - 0x00,0x23,0x04,0xd1,0x00,0x6e,0x03,0x2d,0x00,0x00, - 0x03,0x8b,0x00,0xa0,0x03,0x5c,0x00,0x6e,0x03,0xe2, - 0x00,0xa0,0x03,0x14,0x00,0xa0,0x02,0xd9,0x00,0xa0, - 0x04,0x33,0x00,0x6f,0x04,0x02,0x00,0xa0,0x01,0xa2, - 0x00,0xa0,0x01,0x91,0xff,0xa6,0x03,0x39,0x00,0xa0, - 0x02,0xc7,0x00,0xa0,0x05,0x73,0x00,0xa0,0x04,0x42, - 0x00,0xa0,0x04,0x29,0x00,0x6f,0x03,0x48,0x00,0xa0, - 0x04,0x29,0x00,0x6f,0x03,0x66,0x00,0xa0,0x03,0x29, - 0x00,0x56,0x02,0xc7,0x00,0x0e,0x03,0xf4,0x00,0x93, - 0x03,0x1f,0x00,0x00,0x05,0x73,0x00,0x0a,0x02,0xcb, - 0x00,0x14,0x02,0xae,0x00,0x00,0x02,0x83,0x00,0x39, - 0x02,0x85,0x00,0xae,0x02,0xc9,0x00,0x33,0x02,0x85, - 0x00,0x4a,0x03,0x33,0x00,0x25,0x03,0x4a,0xff,0xfc, - 0x04,0x66,0x01,0xb2,0x03,0x10,0x00,0x4e,0x03,0x7d, - 0x00,0x91,0x02,0x7b,0x00,0x60,0x03,0x7d,0x00,0x5e, - 0x03,0x23,0x00,0x60,0x01,0xc5,0x00,0x14,0x02,0xe5, - 0x00,0x23,0x03,0x66,0x00,0x91,0x01,0x81,0x00,0x83, - 0x01,0x81,0xff,0xfc,0x02,0xc7,0x00,0x91,0x01,0x81, - 0x00,0x91,0x05,0x17,0x00,0x91,0x03,0x66,0x00,0x91, - 0x03,0x52,0x00,0x5e,0x03,0x7d,0x00,0x91,0x03,0x7d, - 0x00,0x5e,0x02,0x2f,0x00,0x91,0x02,0x85,0x00,0x4a, - 0x01,0xc1,0x00,0x2b,0x03,0x66,0x00,0x8d,0x02,0x8d, - 0x00,0x0a,0x04,0x64,0x00,0x14,0x02,0xa4,0x00,0x23, - 0x02,0x8d,0xff,0xfe,0x02,0x1d,0x00,0x3b,0x02,0xe1, - 0x00,0x6d,0x03,0x33,0x01,0x6a,0x02,0xe1,0x00,0x68, - 0x03,0x33,0x00,0x3b,0x02,0x14,0x00,0x00,0x01,0xc3, - 0x00,0x93,0x03,0x33,0x00,0xa8,0x03,0x33,0x00,0x50, - 0x04,0x6f,0x00,0x7d,0x03,0x33,0x00,0x6a,0x03,0x33, - 0x01,0x6a,0x02,0xba,0x00,0x52,0x04,0x66,0x01,0x5c, - 0x06,0xa8,0x00,0x64,0x02,0x42,0x00,0x39,0x03,0x58, - 0x00,0x52,0x03,0x33,0x00,0x3b,0x02,0x04,0x00,0x35, - 0x06,0xa8,0x00,0x64,0x03,0x4a,0xff,0xf8,0x03,0x6d, - 0x00,0x8b,0x03,0x33,0x00,0x3b,0x02,0x66,0x00,0x31, - 0x02,0x66,0x00,0x2f,0x04,0x66,0x01,0xb2,0x03,0x6a, - 0x00,0x91,0x03,0xc7,0x00,0x96,0x01,0xa6,0x00,0x85, - 0x01,0xd1,0x00,0x3b,0x02,0x66,0x00,0x52,0x02,0x6a, - 0x00,0x46,0x03,0x58,0x00,0x52,0x05,0x96,0x00,0x34, - 0x05,0x96,0x00,0x34,0x05,0x96,0x00,0x2f,0x02,0x42, - 0x00,0x2f,0x03,0x2d,0x00,0x00,0x03,0x2d,0x00,0x00, - 0x03,0x2d,0x00,0x00,0x03,0x2d,0x00,0x00,0x03,0x2d, - 0x00,0x00,0x03,0x2d,0x00,0x00,0x04,0x81,0x00,0x00, - 0x03,0x5c,0x00,0x6e,0x03,0x14,0x00,0xa0,0x03,0x14, - 0x00,0xa0,0x03,0x14,0x00,0xa0,0x03,0x14,0x00,0xa0, - 0x01,0xa2,0xff,0xde,0x01,0xa2,0x00,0x9a,0x01,0xa2, - 0xff,0xe6,0x01,0xa2,0xff,0xfb,0x03,0xe2,0x00,0x3d, - 0x04,0x42,0x00,0xa0,0x04,0x29,0x00,0x6f,0x04,0x29, - 0x00,0x6f,0x04,0x29,0x00,0x6f,0x04,0x29,0x00,0x6f, - 0x04,0x29,0x00,0x6f,0x03,0x33,0x00,0x3b,0x04,0x29, - 0x00,0x60,0x03,0xf4,0x00,0x93,0x03,0xf4,0x00,0x93, - 0x03,0xf4,0x00,0x93,0x03,0xf4,0x00,0x93,0x02,0xae, - 0x00,0x00,0x03,0x48,0x00,0xa0,0x03,0x37,0x00,0x91, - 0x03,0x10,0x00,0x4e,0x03,0x10,0x00,0x4e,0x03,0x10, - 0x00,0x4e,0x03,0x10,0x00,0x4e,0x03,0x10,0x00,0x4e, - 0x03,0x10,0x00,0x4e,0x04,0xec,0x00,0x4e,0x02,0x7b, - 0x00,0x60,0x03,0x23,0x00,0x60,0x03,0x23,0x00,0x60, - 0x03,0x23,0x00,0x60,0x03,0x23,0x00,0x60,0x01,0x81, - 0xff,0xe0,0x01,0x81,0x00,0x71,0x01,0x81,0xff,0xd6, - 0x01,0x81,0xff,0xec,0x03,0x58,0x00,0x5e,0x03,0x66, - 0x00,0x91,0x03,0x52,0x00,0x5e,0x03,0x52,0x00,0x5e, - 0x03,0x52,0x00,0x5e,0x03,0x52,0x00,0x5e,0x03,0x52, - 0x00,0x5e,0x03,0x33,0x00,0x3b,0x03,0x52,0x00,0x44, - 0x03,0x66,0x00,0x8d,0x03,0x66,0x00,0x8d,0x03,0x66, - 0x00,0x8d,0x03,0x66,0x00,0x8d,0x02,0x8d,0xff,0xfe, - 0x03,0x7d,0x00,0x91,0x02,0x8d,0xff,0xfe,0x01,0x81, - 0x00,0x91,0x04,0xd1,0x00,0x6f,0x05,0x52,0x00,0x5e, - 0x03,0x29,0x00,0x56,0x02,0x85,0x00,0x4a,0x02,0xae, - 0x00,0x00,0x02,0x83,0x00,0x39,0x02,0x1d,0x00,0x32, - 0x03,0x33,0x00,0x50,0x04,0x85,0x01,0x56,0x04,0x85, - 0x01,0x56,0x04,0x85,0x01,0x68,0x01,0x81,0x00,0x83, - 0x04,0x9e,0x01,0x89,0x01,0x7f,0x00,0x44,0x04,0x85, - 0x01,0x29,0x04,0x89,0x01,0x21,0x00,0x00,0xff,0xc4, - 0x00,0x00,0xfe,0xb3,0x00,0x00,0xfe,0xe1,0x00,0x00, - 0xfe,0xe1,0x00,0x00,0xff,0xc3,0x00,0x00,0xff,0x33, - 0x00,0x00,0xff,0x35,0x00,0x00,0xff,0x4e,0x00,0x00, - 0xff,0x4e,0x00,0x00,0xff,0xc3,0x00,0x00,0xff,0xc4, - 0x00,0x00,0xff,0x35,0x00,0x00,0xff,0xc3,0x00,0x00, - 0xff,0xd3,0x02,0x04,0x00,0x35,0x00,0x00,0xff,0xc3, - 0x00,0x00,0xff,0xc2,0x00,0x00,0xff,0x6e,0x03,0x09, - 0x00,0x48,0x02,0xec,0x00,0x5e,0x02,0x90,0x00,0x73, - 0x02,0xa6,0x00,0x11,0x03,0x94,0x00,0x91,0x01,0x81, - 0x00,0x91,0x01,0xab,0x00,0x87,0x03,0x94,0x00,0x91, - 0x03,0x74,0x00,0x5f,0x01,0x77,0x00,0x8c,0x02,0xa8, - 0x00,0x29,0x02,0x7b,0x00,0x29,0x02,0x5e,0x00,0x2d, - 0x03,0x93,0x00,0x91,0x03,0x5b,0x00,0x3b,0x01,0x90, - 0x00,0x73,0x02,0x39,0x00,0x27,0x03,0x74,0x00,0x5e, - 0x03,0x4e,0x00,0x48,0x03,0x90,0x00,0x5e,0x03,0x62, - 0x00,0x5e,0x02,0x6f,0x00,0x00,0x02,0xf3,0x00,0x3b, - 0x03,0x55,0x00,0x91,0x02,0x9c,0x00,0x17,0x04,0x18, - 0x00,0x4a,0x03,0x7a,0x00,0x10,0x01,0x3c,0x00,0x2b, - 0x02,0x56,0x00,0x2b,0x04,0x00,0x00,0x52,0x08,0x00, - 0x00,0x52,0x01,0x3b,0x00,0x2b,0x01,0x3b,0x00,0x2b, - 0x01,0xa6,0x00,0x4e,0x02,0x56,0x00,0x2b,0x02,0x56, - 0x00,0x2b,0x02,0x93,0x00,0x21,0x03,0x73,0x00,0x7b, - 0x03,0x73,0x00,0x7b,0x03,0x02,0x00,0xa8,0x04,0xf2, - 0x00,0x85,0x06,0xb6,0x00,0x5e,0x02,0x00,0x00,0x52, - 0x02,0x00,0x00,0x52,0x01,0x0a,0xfe,0xd7,0x04,0x6b, - 0x00,0x91,0x03,0x33,0x00,0x23,0x05,0xac,0x00,0x0e, - 0x03,0x46,0x00,0x14,0x03,0x46,0x00,0x14,0x04,0x18, - 0x00,0x4a,0x04,0x18,0x00,0x2e,0x04,0x18,0x00,0x4a, - 0x04,0x18,0x00,0x2e,0x03,0x09,0x00,0x48,0x03,0x09, - 0x00,0x48,0x03,0x09,0x00,0x48,0x02,0xec,0x00,0x5e, - 0x02,0x90,0x00,0x73,0x02,0xa6,0x00,0x11,0x03,0x94, - 0x00,0x91,0x01,0x81,0xff,0xcc,0x01,0xab,0xff,0xec, - 0x03,0x74,0x00,0x5f,0x01,0x77,0xff,0xca,0x02,0xa8, - 0x00,0x29,0x02,0x7b,0x00,0x29,0x02,0x5e,0x00,0x2d, - 0x03,0x5b,0x00,0x3b,0x02,0x39,0x00,0x27,0x03,0x74, - 0x00,0x5e,0x03,0x90,0x00,0x5e,0x03,0x62,0x00,0x5e, - 0x02,0xf3,0x00,0x3b,0x03,0x55,0x00,0x91,0x02,0x9c, - 0x00,0x17,0x04,0x18,0x00,0x4a,0x03,0x7a,0x00,0x10, - 0x01,0x81,0x00,0x67,0x00,0x00,0xff,0x15,0x01,0x81, - 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03, - 0x00,0x00,0x00,0x1c,0x00,0x01,0x00,0x00,0x00,0x00, - 0x01,0x4c,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x1c, - 0x00,0x04,0x01,0x30,0x00,0x00,0x00,0x48,0x00,0x40, - 0x00,0x05,0x00,0x08,0x00,0x0d,0x00,0x7e,0x00,0xa0, - 0x00,0xff,0x01,0x31,0x01,0x53,0x01,0x61,0x01,0x78, - 0x01,0x7e,0x01,0x92,0x02,0xc7,0x02,0xdd,0x05,0xbe, - 0x05,0xc2,0x05,0xc7,0x05,0xea,0x05,0xf4,0x20,0x14, - 0x20,0x1a,0x20,0x1e,0x20,0x22,0x20,0x26,0x20,0x30, - 0x20,0x3a,0x20,0x44,0x20,0xaa,0x20,0xac,0x21,0x22, - 0xfb,0x02,0xfb,0x36,0xfb,0x3c,0xfb,0x3e,0xfb,0x41, - 0xfb,0x44,0xfb,0x4b,0xff,0xff,0x00,0x00,0x00,0x0d, - 0x00,0x20,0x00,0xa0,0x00,0xa1,0x01,0x31,0x01,0x52, - 0x01,0x60,0x01,0x78,0x01,0x7d,0x01,0x92,0x02,0xc6, - 0x02,0xd8,0x05,0xb0,0x05,0xc1,0x05,0xc7,0x05,0xd0, - 0x05,0xf3,0x20,0x13,0x20,0x18,0x20,0x1c,0x20,0x20, - 0x20,0x26,0x20,0x30,0x20,0x39,0x20,0x44,0x20,0xaa, - 0x20,0xac,0x21,0x22,0xfb,0x01,0xfb,0x2a,0xfb,0x38, - 0xfb,0x3e,0xfb,0x40,0xfb,0x43,0xfb,0x46,0xff,0xff, - 0xff,0xf6,0xff,0xe4,0x00,0x96,0xff,0xc3,0xff,0x92, - 0xff,0x72,0xff,0x66,0xff,0x50,0xff,0x4c,0xff,0x39, - 0xfe,0x06,0xfd,0xf6,0xfb,0x24,0xfb,0x22,0xfb,0x1e, - 0xfb,0x16,0xfb,0x0e,0xe0,0xf0,0xe0,0xed,0xe0,0xec, - 0xe0,0xeb,0xe0,0xe8,0xe0,0xdf,0xe0,0xd7,0xe0,0xce, - 0xe0,0x69,0xe0,0x68,0xdf,0xf3,0x06,0x15,0x05,0xee, - 0x05,0xed,0x05,0xec,0x05,0xeb,0x05,0xea,0x05,0xe9, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x06,0x02,0x0a,0x00,0x00, - 0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x01,0x00,0x02,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,0x01,0x00,0x00,0x00,0x00,0x00,0x04, - 0x00,0x05,0x00,0x06,0x00,0x07,0x00,0x08,0x00,0x09, - 0x00,0x0a,0x00,0x0b,0x00,0x0c,0x00,0x0d,0x00,0x0e, - 0x00,0x0f,0x00,0x10,0x00,0x11,0x00,0x12,0x00,0x13, - 0x00,0x14,0x00,0x15,0x00,0x16,0x00,0x17,0x00,0x18, - 0x00,0x19,0x00,0x1a,0x00,0x1b,0x00,0x1c,0x00,0x1d, - 0x00,0x1e,0x00,0x1f,0x00,0x20,0x00,0x21,0x00,0x22, - 0x00,0x23,0x00,0x24,0x00,0x25,0x00,0x26,0x00,0x27, - 0x00,0x28,0x00,0x29,0x00,0x2a,0x00,0x2b,0x00,0x2c, - 0x00,0x2d,0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31, - 0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x35,0x00,0x36, - 0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b, - 0x00,0x3c,0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40, - 0x00,0x41,0x00,0x42,0x00,0x43,0x00,0x44,0x00,0x45, - 0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a, - 0x00,0x4b,0x00,0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f, - 0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00,0x54, - 0x00,0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59, - 0x00,0x5a,0x00,0x5b,0x00,0x5c,0x00,0x5d,0x00,0x5e, - 0x00,0x5f,0x00,0x60,0x00,0x61,0x00,0x62,0x00,0x00, - 0x00,0x87,0x00,0x88,0x00,0x8a,0x00,0x8c,0x00,0x94, - 0x00,0x99,0x00,0x9f,0x00,0xa4,0x00,0xa3,0x00,0xa5, - 0x00,0xa7,0x00,0xa6,0x00,0xa8,0x00,0xaa,0x00,0xac, - 0x00,0xab,0x00,0xad,0x00,0xae,0x00,0xb0,0x00,0xaf, - 0x00,0xb1,0x00,0xb2,0x00,0xb4,0x00,0xb6,0x00,0xb5, - 0x00,0xb7,0x00,0xb9,0x00,0xb8,0x00,0xbd,0x00,0xbc, - 0x00,0xbe,0x00,0xbf,0x01,0x0b,0x00,0x73,0x00,0x65, - 0x00,0x66,0x00,0x6a,0x01,0x0d,0x00,0x79,0x00,0xa2, - 0x00,0x71,0x00,0x6c,0x01,0x15,0x00,0x77,0x00,0x6b, - 0x00,0x00,0x00,0x89,0x00,0x9b,0x00,0x00,0x00,0x74, - 0x00,0x00,0x00,0x00,0x00,0x68,0x00,0x78,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6d, - 0x00,0x7d,0x00,0x00,0x00,0xa9,0x00,0xbb,0x00,0x82, - 0x00,0x64,0x00,0x6f,0x00,0x00,0x00,0xcb,0x00,0x00, - 0x00,0x00,0x00,0x6e,0x00,0x7e,0x01,0x0e,0x01,0x36, - 0x00,0x83,0x00,0x86,0x00,0x98,0x00,0xc4,0x00,0xc5, - 0x01,0x03,0x01,0x04,0x01,0x08,0x01,0x09,0x01,0x05, - 0x01,0x06,0x00,0xba,0x00,0x00,0x00,0xc2,0x00,0xc8, - 0x01,0x12,0x01,0x14,0x01,0x10,0x01,0x11,0x01,0x16, - 0x01,0x17,0x01,0x0c,0x00,0x7a,0x01,0x07,0x01,0x0a, - 0x01,0x0f,0x00,0x85,0x00,0x8d,0x00,0x84,0x00,0x8e, - 0x00,0x8b,0x00,0x90,0x00,0x91,0x00,0x92,0x00,0x8f, - 0x00,0x96,0x00,0x97,0x00,0x00,0x00,0x95,0x00,0x9d, - 0x00,0x9e,0x00,0x9c,0x00,0xc3,0x00,0xcc,0x00,0xd2, - 0x00,0x72,0x00,0xce,0x00,0xcf,0x00,0xd0,0x00,0x7b, - 0x00,0xd3,0x00,0xd1,0x00,0xcd,0x00,0x00,0xb8,0x01, - 0xff,0x85,0xb0,0x04,0x8d,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18, - 0x00,0x2e,0x00,0x66,0x00,0xac,0x00,0xf2,0x01,0x3e, - 0x01,0x4c,0x01,0x68,0x01,0x84,0x01,0xa2,0x01,0xba, - 0x01,0xcc,0x01,0xda,0x01,0xea,0x01,0xf8,0x02,0x1e, - 0x02,0x36,0x02,0x64,0x02,0x9c,0x02,0xc0,0x02,0xec, - 0x03,0x22,0x03,0x36,0x03,0x7a,0x03,0xb4,0x03,0xce, - 0x03,0xea,0x04,0x00,0x04,0x14,0x04,0x28,0x04,0x5c, - 0x04,0xc2,0x04,0xe4,0x05,0x18,0x05,0x48,0x05,0x6a, - 0x05,0x84,0x05,0x9a,0x05,0xc4,0x05,0xdc,0x05,0xe8, - 0x06,0x00,0x06,0x1e,0x06,0x2e,0x06,0x58,0x06,0x76, - 0x06,0x9e,0x06,0xbe,0x06,0xee,0x07,0x16,0x07,0x4e, - 0x07,0x62,0x07,0x80,0x07,0x9a,0x07,0xc8,0x07,0xe6, - 0x07,0xfc,0x08,0x14,0x08,0x28,0x08,0x36,0x08,0x4a, - 0x08,0x5e,0x08,0x6c,0x08,0x82,0x08,0xb8,0x08,0xe8, - 0x09,0x0a,0x09,0x38,0x09,0x62,0x09,0x86,0x09,0xde, - 0x0a,0x04,0x0a,0x1e,0x0a,0x44,0x0a,0x62,0x0a,0x6e, - 0x0a,0xa0,0x0a,0xc2,0x0a,0xe4,0x0b,0x16,0x0b,0x44, - 0x0b,0x66,0x0b,0x98,0x0b,0xba,0x0b,0xde,0x0b,0xf8, - 0x0c,0x28,0x0c,0x44,0x0c,0x6e,0x0c,0x86,0x0c,0xbc, - 0x0c,0xca,0x0d,0x00,0x0d,0x22,0x0d,0x22,0x0d,0x3a, - 0x0d,0x62,0x0d,0x92,0x0d,0xd6,0x0d,0xfc,0x0e,0x10, - 0x0e,0x60,0x0e,0x80,0x0e,0xd2,0x0f,0x04,0x0f,0x28, - 0x0f,0x38,0x0f,0x46,0x0f,0x9a,0x0f,0xa8,0x0f,0xca, - 0x0f,0xea,0x10,0x10,0x10,0x40,0x10,0x54,0x10,0x7a, - 0x10,0x96,0x10,0xa6,0x10,0xc6,0x10,0xde,0x10,0xfe, - 0x11,0x20,0x11,0x5a,0x11,0x98,0x11,0xea,0x12,0x1e, - 0x12,0x50,0x12,0x80,0x12,0xbc,0x12,0xfc,0x13,0x36, - 0x13,0x70,0x13,0x98,0x13,0xdc,0x14,0x04,0x14,0x2c, - 0x14,0x60,0x14,0x92,0x14,0xae,0x14,0xca,0x14,0xf2, - 0x15,0x18,0x15,0x42,0x15,0x80,0x15,0xb8,0x15,0xee, - 0x16,0x30,0x16,0x76,0x16,0xb6,0x16,0xd8,0x17,0x16, - 0x17,0x44,0x17,0x70,0x17,0xa8,0x17,0xde,0x18,0x04, - 0x18,0x2a,0x18,0x66,0x18,0xaa,0x18,0xee,0x19,0x3e, - 0x19,0x92,0x19,0xe0,0x1a,0x2e,0x1a,0x7e,0x1a,0xb6, - 0x1a,0xf0,0x1b,0x28,0x1b,0x6e,0x1b,0xb0,0x1b,0xcc, - 0x1b,0xe8,0x1c,0x10,0x1c,0x36,0x1c,0x72,0x1c,0xb2, - 0x1c,0xe4,0x1d,0x14,0x1d,0x50,0x1d,0x90,0x1d,0xca, - 0x1d,0xec,0x1e,0x28,0x1e,0x5c,0x1e,0x8e,0x1e,0xcc, - 0x1f,0x08,0x1f,0x40,0x1f,0x76,0x1f,0xb8,0x1f,0xc4, - 0x1f,0xf4,0x20,0x36,0x20,0x86,0x20,0xd0,0x21,0x00, - 0x21,0x30,0x21,0x60,0x21,0x90,0x21,0xb2,0x21,0xd0, - 0x21,0xe8,0x21,0xfa,0x22,0x1a,0x22,0x36,0x22,0x5c, - 0x22,0x82,0x22,0x98,0x22,0xc6,0x22,0xe2,0x23,0x02, - 0x23,0x10,0x23,0x26,0x23,0x44,0x23,0x52,0x23,0x62, - 0x23,0x70,0x23,0x7e,0x23,0x9c,0x23,0xaa,0x23,0xb8, - 0x23,0xc6,0x23,0xd4,0x23,0xe2,0x23,0xf2,0x24,0x24, - 0x24,0x4c,0x24,0x78,0x24,0x9a,0x24,0xbe,0x24,0xca, - 0x24,0xe4,0x25,0x02,0x25,0x2e,0x25,0x3e,0x25,0x56, - 0x25,0x82,0x25,0x9c,0x25,0xc0,0x25,0xfe,0x26,0x14, - 0x26,0x3a,0x26,0x6a,0x26,0x94,0x26,0xbc,0x26,0xf8, - 0x27,0x1a,0x27,0x40,0x27,0x70,0x27,0x92,0x27,0xc6, - 0x27,0xf6,0x28,0x0e,0x28,0x34,0x28,0x42,0x28,0x50, - 0x28,0x62,0x28,0x74,0x28,0x86,0x28,0xa2,0x28,0xc0, - 0x28,0xde,0x28,0xfa,0x29,0x28,0x29,0x3a,0x29,0x5c, - 0x29,0xbc,0x29,0xd2,0x29,0xe6,0x29,0xf4,0x2a,0x32, - 0x2a,0x6e,0x2a,0x9a,0x2a,0xd0,0x2a,0xfa,0x2b,0x38, - 0x2b,0x76,0x2b,0xbc,0x2c,0x02,0x2c,0x3c,0x2c,0x78, - 0x2c,0xb2,0x2c,0xe2,0x2d,0x16,0x2d,0x40,0x2d,0x6c, - 0x2d,0x80,0x2d,0xa2,0x2d,0xd6,0x2d,0xee,0x2e,0x0e, - 0x2e,0x42,0x2e,0x64,0x2e,0xaa,0x2e,0xd8,0x2f,0x10, - 0x2f,0x40,0x2f,0x84,0x2f,0xb4,0x2f,0xee,0x30,0x18, - 0x30,0x54,0x30,0x8e,0x30,0xa4,0x30,0xb2,0x30,0xb2, - 0x00,0x02,0x00,0x93,0xff,0xf0,0x01,0x2f,0x05,0xb6, - 0x00,0x03,0x00,0x0a,0x00,0x00,0x13,0x23,0x03,0x33, - 0x02,0x32,0x15,0x14,0x06,0x23,0x22,0xfc,0x37,0x23, - 0x7d,0x8c,0x9c,0x2b,0x23,0x4e,0x01,0x6f,0x04,0x47, - 0xfb,0x0f,0x6b,0x36,0x34,0x00,0x00,0x00,0x00,0x02, - 0x00,0x85,0x03,0xa6,0x02,0x29,0x05,0xb6,0x00,0x03, - 0x00,0x07,0x00,0x00,0x13,0x23,0x03,0x33,0x01,0x23, - 0x03,0x33,0xe3,0x3d,0x21,0x7b,0x01,0x0c,0x3d,0x21, - 0x7b,0x03,0xa6,0x02,0x10,0xfd,0xf0,0x02,0x10,0x00, - 0x00,0x00,0x00,0x02,0x00,0x25,0x00,0x00,0x03,0x3d, - 0x05,0xb6,0x00,0x1b,0x00,0x1f,0x00,0x00,0x01,0x15, - 0x23,0x03,0x33,0x15,0x23,0x03,0x23,0x13,0x23,0x03, - 0x23,0x13,0x23,0x35,0x33,0x13,0x23,0x35,0x33,0x13, - 0x33,0x03,0x33,0x13,0x33,0x03,0x05,0x03,0x33,0x13, - 0x03,0x3d,0xb0,0x2d,0xae,0xb8,0x35,0x52,0x37,0xe9, - 0x36,0x4d,0x33,0xa8,0xb2,0x2d,0xb2,0xbc,0x2f,0x52, - 0x31,0xec,0x31,0x4c,0x2f,0xfe,0xbc,0x2d,0xe9,0x2f, - 0x04,0x12,0x56,0xfe,0x71,0x5a,0xfe,0x2d,0x01,0xd3, - 0xfe,0x2d,0x01,0xd3,0x5a,0x01,0x8f,0x56,0x01,0xa4, - 0xfe,0x5c,0x01,0xa4,0xfe,0x5c,0x56,0xfe,0x71,0x01, - 0x8f,0x00,0x00,0x00,0x00,0x03,0x00,0x5e,0xff,0x89, - 0x02,0xd7,0x06,0x14,0x00,0x1c,0x00,0x23,0x00,0x2a, - 0x00,0x00,0x01,0x15,0x16,0x17,0x07,0x26,0x27,0x11, - 0x16,0x16,0x14,0x06,0x07,0x15,0x23,0x35,0x22,0x27, - 0x35,0x16,0x16,0x33,0x11,0x26,0x26,0x34,0x36,0x37, - 0x35,0x11,0x06,0x06,0x14,0x17,0x16,0x17,0x13,0x36, - 0x34,0x26,0x27,0x11,0x36,0x01,0xc1,0x8d,0x75,0x25, - 0x75,0x68,0x96,0x80,0x97,0x7f,0x52,0xaf,0x62,0x33, - 0x95,0x49,0x92,0x75,0x92,0x75,0x49,0x5d,0x27,0x29, - 0x56,0xd5,0x31,0x54,0x60,0x51,0x06,0x14,0xb6,0x05, - 0x38,0x56,0x36,0x03,0xfe,0x04,0x3d,0x9a,0xf1,0xaa, - 0x15,0xf8,0xf2,0x35,0x67,0x1e,0x22,0x01,0xee,0x3c, - 0x9b,0xfa,0xb0,0x14,0xba,0xfe,0xea,0x10,0x7c,0xb2, - 0x37,0x36,0x2a,0xfe,0x04,0x3b,0xa3,0x70,0x29,0xfe, - 0x3b,0x13,0x00,0x00,0x00,0x05,0x00,0x5e,0xff,0xec, - 0x04,0x5a,0x05,0xcb,0x00,0x07,0x00,0x0b,0x00,0x15, - 0x00,0x1d,0x00,0x27,0x00,0x00,0x12,0x36,0x32,0x16, - 0x10,0x06,0x22,0x26,0x01,0x23,0x01,0x33,0x05,0x22, - 0x06,0x10,0x16,0x33,0x32,0x36,0x35,0x10,0x00,0x36, - 0x32,0x16,0x10,0x06,0x22,0x26,0x13,0x22,0x06,0x10, - 0x16,0x33,0x32,0x36,0x35,0x10,0x5e,0x66,0xc7,0x69, - 0x6c,0xc3,0x67,0x01,0x3c,0x58,0x01,0xdb,0x58,0xfd, - 0xb0,0x3a,0x33,0x34,0x3d,0x3b,0x36,0x01,0x2b,0x66, - 0xc6,0x69,0x6c,0xc2,0x67,0xc6,0x3a,0x32,0x33,0x3d, - 0x3b,0x36,0x04,0xe1,0xea,0xe9,0xfe,0x45,0xf2,0xee, - 0xfc,0xdd,0x05,0xb6,0x39,0xb7,0xfe,0x7b,0xb8,0xb9, - 0xc2,0x01,0x79,0xfd,0x1e,0xe6,0xe9,0xfe,0x43,0xef, - 0xf0,0x02,0x57,0xb7,0xfe,0x7b,0xb8,0xb9,0xc2,0x01, - 0x79,0x00,0x00,0x00,0x00,0x03,0x00,0x42,0xff,0xec, - 0x03,0x44,0x05,0xcb,0x00,0x1b,0x00,0x25,0x00,0x2d, - 0x00,0x00,0x05,0x22,0x26,0x10,0x37,0x36,0x37,0x26, - 0x26,0x34,0x36,0x32,0x16,0x10,0x06,0x07,0x13,0x36, - 0x35,0x33,0x14,0x06,0x07,0x13,0x23,0x27,0x06,0x06, - 0x03,0x22,0x06,0x14,0x16,0x17,0x36,0x36,0x35,0x34, - 0x02,0x06,0x14,0x16,0x32,0x36,0x37,0x03,0x01,0x48, - 0x7a,0x8c,0x57,0x2b,0x59,0x4b,0x2c,0x68,0xb5,0x68, - 0x4b,0x59,0xec,0x39,0x5e,0x3a,0x28,0x9c,0x6d,0x62, - 0x4b,0x89,0x3d,0x2e,0x32,0x32,0x26,0x3e,0x33,0xe7, - 0x44,0x5e,0x98,0x76,0x36,0xfe,0x14,0xc5,0x01,0x5f, - 0x7a,0x3e,0x4c,0x8c,0xa7,0xf0,0x94,0x98,0xfe,0xef, - 0xc3,0x59,0xfe,0x5a,0x76,0xaf,0x5d,0xde,0x46,0xfe, - 0xfc,0xb2,0x70,0x56,0x05,0x85,0x67,0xb7,0xc2,0x3f, - 0x3f,0xa8,0x71,0xc7,0xfd,0x02,0x9c,0xfa,0x93,0x5c, - 0x60,0x01,0xc7,0x00,0x00,0x00,0x00,0x01,0x00,0x85, - 0x03,0xa6,0x01,0x00,0x05,0xb6,0x00,0x03,0x00,0x00, - 0x13,0x23,0x03,0x33,0xe3,0x3d,0x21,0x7b,0x03,0xa6, - 0x02,0x10,0x00,0x00,0x00,0x01,0x00,0x68,0xfe,0xbc, - 0x01,0xe1,0x05,0xb6,0x00,0x0b,0x00,0x00,0x01,0x06, - 0x02,0x10,0x12,0x17,0x23,0x26,0x02,0x10,0x12,0x37, - 0x01,0xe1,0x87,0x89,0x91,0x7d,0x4e,0x90,0x99,0x9c, - 0x8d,0x05,0xb6,0xc8,0xfe,0x33,0xfe,0x1f,0xfe,0x28, - 0xac,0xa8,0x01,0xcc,0x02,0x03,0x01,0xd8,0xab,0x00, - 0x00,0x01,0x00,0x54,0xfe,0xbc,0x01,0xcd,0x05,0xb6, - 0x00,0x0b,0x00,0x00,0x13,0x16,0x12,0x10,0x02,0x07, - 0x23,0x36,0x12,0x10,0x02,0x27,0xa4,0x90,0x99,0x9a, - 0x8f,0x4e,0x80,0x8e,0x8b,0x85,0x05,0xb6,0xab,0xfe, - 0x25,0xfe,0x01,0xfe,0x31,0xa6,0xb5,0x01,0xd6,0x01, - 0xdd,0x01,0xcc,0xc6,0x00,0x00,0x00,0x01,0x00,0x5e, - 0x03,0xcf,0x02,0x8b,0x06,0x14,0x00,0x0e,0x00,0x00, - 0x01,0x37,0x17,0x07,0x17,0x07,0x27,0x07,0x27,0x37, - 0x27,0x37,0x17,0x27,0x33,0x01,0x96,0xe7,0x0e,0xe3, - 0x9c,0x61,0x6c,0x75,0x5c,0x95,0xdd,0x11,0xe5,0x1b, - 0x79,0x05,0x1b,0x39,0x6b,0x08,0xe3,0x2d,0xed,0xef, - 0x2f,0xe3,0x06,0x6b,0x37,0xf9,0x00,0x01,0x00,0x3b, - 0x00,0xfa,0x02,0xf8,0x04,0xae,0x00,0x0b,0x00,0x00, - 0x01,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x35,0x21, - 0x11,0x33,0x01,0xc3,0x01,0x35,0xfe,0xcb,0x52,0xfe, - 0xca,0x01,0x36,0x52,0x02,0xfc,0x52,0xfe,0x50,0x01, - 0xb0,0x52,0x01,0xb2,0x00,0x01,0x00,0x4e,0xfe,0xf8, - 0x01,0x33,0x00,0xcd,0x00,0x06,0x00,0x00,0x25,0x17, - 0x06,0x07,0x23,0x36,0x37,0x01,0x25,0x0e,0x43,0x63, - 0x3f,0x4a,0x1a,0xcd,0x17,0xe5,0xd9,0xfc,0xd9,0x00, - 0x00,0x01,0x00,0x35,0x01,0xf6,0x01,0xcf,0x02,0x5c, - 0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21,0x01,0xcf, - 0xfe,0x66,0x01,0x9a,0x01,0xf6,0x66,0x00,0x00,0x01, - 0x00,0x85,0xff,0xf0,0x01,0x21,0x00,0xc5,0x00,0x06, - 0x00,0x00,0x36,0x32,0x15,0x14,0x06,0x23,0x22,0x85, - 0x9c,0x2b,0x23,0x4e,0xc5,0x6b,0x36,0x34,0x00,0x00, - 0x00,0x01,0x00,0x33,0x00,0x00,0x02,0xa2,0x05,0xb6, - 0x00,0x03,0x00,0x00,0x33,0x23,0x01,0x33,0x98,0x65, - 0x02,0x0f,0x60,0x05,0xb6,0x00,0x00,0x00,0x00,0x02, - 0x00,0x58,0xff,0xec,0x02,0xd9,0x05,0xcb,0x00,0x09, - 0x00,0x11,0x00,0x00,0x01,0x32,0x12,0x10,0x02,0x20, - 0x27,0x26,0x11,0x10,0x05,0x22,0x02,0x10,0x12,0x33, - 0x32,0x10,0x01,0x98,0xa5,0x9c,0xa2,0xfe,0xb9,0x4d, - 0x4b,0x01,0x40,0x71,0x69,0x6a,0x70,0xdb,0x05,0xcb, - 0xfe,0x8e,0xfd,0x10,0xfe,0x83,0xb0,0xb1,0x01,0x90, - 0x02,0xee,0x5e,0xfe,0xbe,0xfd,0x65,0xfe,0xba,0x05, - 0x23,0x00,0x00,0x00,0x00,0x01,0x00,0x96,0x00,0x00, - 0x02,0x00,0x05,0xb6,0x00,0x0a,0x00,0x00,0x21,0x23, - 0x11,0x34,0x37,0x06,0x07,0x07,0x27,0x01,0x33,0x02, - 0x00,0x60,0x08,0x14,0x4e,0x7d,0x33,0x01,0x1a,0x50, - 0x04,0x33,0x79,0xa2,0x1b,0x4e,0x72,0x3f,0x01,0x04, - 0x00,0x00,0x00,0x01,0x00,0x4a,0x00,0x00,0x02,0xd9, - 0x05,0xcb,0x00,0x1a,0x00,0x00,0x01,0x32,0x16,0x15, - 0x14,0x07,0x06,0x07,0x01,0x15,0x21,0x15,0x21,0x35, - 0x01,0x36,0x36,0x35,0x34,0x26,0x23,0x22,0x06,0x07, - 0x27,0x36,0x36,0x01,0x79,0x97,0xa8,0x5e,0x2c,0x67, - 0xfe,0xf3,0x02,0x1f,0xfd,0x71,0x01,0x27,0x86,0x5f, - 0x7a,0x69,0x43,0x67,0x36,0x35,0x47,0x7e,0x05,0xcb, - 0xbd,0x9f,0xcb,0xc2,0x5f,0x93,0xfe,0x72,0x08,0x5a, - 0x4e,0x01,0xbe,0xcb,0xff,0x99,0x76,0x8c,0x27,0x2b, - 0x4b,0x35,0x2c,0x00,0x00,0x01,0x00,0x4c,0xff,0xec, - 0x02,0xcf,0x05,0xcb,0x00,0x24,0x00,0x00,0x01,0x32, - 0x16,0x15,0x10,0x07,0x15,0x16,0x16,0x15,0x14,0x06, - 0x20,0x27,0x35,0x16,0x33,0x32,0x36,0x10,0x26,0x23, - 0x23,0x35,0x33,0x32,0x37,0x36,0x10,0x26,0x23,0x22, - 0x06,0x07,0x27,0x36,0x36,0x01,0x7d,0x8f,0xac,0xed, - 0x7b,0x89,0xc1,0xfe,0xb3,0x6d,0x7d,0x97,0x7b,0x87, - 0xa0,0x99,0x4a,0x50,0x7f,0x50,0x50,0x71,0x66,0x43, - 0x6f,0x44,0x3d,0x49,0x91,0x05,0xcb,0xbe,0x93,0xfe, - 0xd8,0x54,0x08,0x1b,0xbf,0x91,0xbf,0xe0,0x35,0x6c, - 0x49,0xb1,0x01,0x2e,0xa4,0x5c,0x59,0x5b,0x01,0x0f, - 0x8d,0x2d,0x40,0x40,0x47,0x3e,0x00,0x02,0x00,0x25, - 0x00,0x00,0x03,0x19,0x05,0xc7,0x00,0x0a,0x00,0x11, - 0x00,0x00,0x01,0x33,0x15,0x23,0x11,0x23,0x11,0x21, - 0x35,0x01,0x33,0x03,0x11,0x34,0x37,0x23,0x07,0x01, - 0x02,0x7d,0x9c,0x9c,0x60,0xfe,0x08,0x01,0xdf,0x79, - 0x60,0x08,0x06,0x4a,0xfe,0xb4,0x01,0xa6,0x5a,0xfe, - 0xb4,0x01,0x4c,0x54,0x04,0x27,0xfb,0xdf,0x02,0xc2, - 0x73,0x7b,0xbc,0xfd,0x0c,0x00,0x00,0x00,0x00,0x01, - 0x00,0x62,0xff,0xec,0x02,0xd7,0x05,0xb6,0x00,0x18, - 0x00,0x00,0x01,0x21,0x03,0x36,0x33,0x32,0x16,0x15, - 0x14,0x02,0x23,0x22,0x27,0x35,0x16,0x20,0x36,0x10, - 0x26,0x23,0x22,0x07,0x27,0x13,0x21,0x02,0x87,0xfe, - 0x62,0x24,0x5c,0x52,0xa4,0xc0,0xd2,0xaf,0x9c,0x58, - 0x6e,0x01,0x07,0x9c,0x89,0x7d,0x66,0x69,0x31,0x2b, - 0x01,0xef,0x05,0x58,0xfd,0xfe,0x14,0xda,0xbf,0xdd, - 0xfe,0xf8,0x37,0x6e,0x4d,0xda,0x01,0x50,0xa6,0x1e, - 0x3f,0x02,0x81,0x00,0x00,0x00,0x00,0x02,0x00,0x64, - 0xff,0xec,0x02,0xd9,0x05,0xcb,0x00,0x15,0x00,0x1f, - 0x00,0x00,0x01,0x32,0x16,0x10,0x06,0x23,0x22,0x02, - 0x11,0x10,0x21,0x32,0x17,0x15,0x26,0x23,0x22,0x02, - 0x03,0x33,0x36,0x36,0x00,0x26,0x22,0x06,0x14,0x17, - 0x16,0x33,0x32,0x36,0x01,0xb4,0x88,0x9d,0xa6,0x8d, - 0x9d,0xa5,0x01,0xa8,0x4c,0x33,0x39,0x4e,0x90,0xa3, - 0x0a,0x08,0x22,0x77,0x01,0x0d,0x69,0xca,0x79,0x1c, - 0x3a,0x89,0x64,0x69,0x03,0x87,0xf2,0xfe,0x51,0xfa, - 0x01,0x4a,0x01,0x39,0x03,0x5c,0x17,0x60,0x19,0xfe, - 0xb4,0xfe,0xc4,0x4d,0x55,0xfe,0xe8,0xbc,0xa2,0xfc, - 0x6a,0xd9,0xba,0x00,0x00,0x01,0x00,0x39,0x00,0x00, - 0x02,0xec,0x05,0xb6,0x00,0x06,0x00,0x00,0x13,0x35, - 0x21,0x15,0x01,0x23,0x01,0x39,0x02,0xb3,0xfe,0x3d, - 0x66,0x01,0xc6,0x05,0x58,0x5e,0x52,0xfa,0x9c,0x05, - 0x58,0x00,0x00,0x00,0x00,0x03,0x00,0x48,0xff,0xec, - 0x02,0xee,0x05,0xcb,0x00,0x14,0x00,0x1d,0x00,0x28, - 0x00,0x00,0x13,0x34,0x36,0x20,0x17,0x16,0x15,0x14, - 0x07,0x16,0x17,0x16,0x10,0x06,0x20,0x26,0x35,0x34, - 0x36,0x37,0x26,0x00,0x26,0x22,0x06,0x14,0x16,0x17, - 0x36,0x35,0x01,0x06,0x14,0x16,0x32,0x36,0x35,0x34, - 0x27,0x27,0x06,0x6a,0xab,0x01,0x11,0x54,0x55,0xf0, - 0x6c,0x35,0x6e,0xb9,0xfe,0xd7,0xc4,0x6f,0x86,0xd3, - 0x02,0x00,0x6d,0xc1,0x6d,0x5a,0x71,0xd0,0xfe,0x74, - 0x30,0x84,0xd6,0x7f,0xcf,0x31,0x79,0x04,0x77,0x97, - 0xbd,0x5a,0x58,0x9e,0xf3,0x8e,0x49,0x38,0x74,0xfe, - 0xbe,0xd7,0xce,0xa4,0x7f,0xc6,0x57,0xa2,0x01,0x4f, - 0x86,0x87,0xde,0x9a,0x4b,0x7d,0xcf,0xfd,0xbc,0x52, - 0xff,0x98,0x9e,0x8b,0xb3,0x8e,0x21,0x4d,0x00,0x00, - 0x00,0x02,0x00,0x52,0xff,0xec,0x02,0xc7,0x05,0xcb, - 0x00,0x16,0x00,0x20,0x00,0x00,0x01,0x22,0x26,0x10, - 0x36,0x20,0x12,0x11,0x10,0x02,0x23,0x22,0x26,0x27, - 0x35,0x16,0x33,0x32,0x12,0x13,0x23,0x06,0x06,0x03, - 0x22,0x06,0x10,0x16,0x32,0x36,0x10,0x26,0x26,0x01, - 0x77,0x89,0x9c,0xa9,0x01,0x2e,0x9e,0xda,0xd4,0x28, - 0x4f,0x11,0x37,0x59,0x91,0xa7,0x0b,0x08,0x22,0x77, - 0x38,0x64,0x71,0x69,0xca,0x79,0x35,0x60,0x02,0x2f, - 0xf6,0x01,0xab,0xfb,0xfe,0xbf,0xfe,0xd0,0xfe,0x4c, - 0xfe,0x46,0x0e,0x08,0x60,0x18,0x01,0x4f,0x01,0x38, - 0x4d,0x55,0x03,0x3e,0xbd,0xfe,0x97,0xbc,0xa9,0x01, - 0x0b,0xc7,0x67,0x00,0x00,0x00,0x00,0x02,0x00,0x85, - 0xff,0xf0,0x01,0x21,0x04,0x3f,0x00,0x06,0x00,0x0d, - 0x00,0x00,0x12,0x32,0x15,0x14,0x06,0x23,0x22,0x10, - 0x32,0x15,0x14,0x06,0x23,0x22,0x85,0x9c,0x2b,0x23, - 0x4e,0x9c,0x2b,0x23,0x4e,0x04,0x3f,0x6a,0x36,0x35, - 0xfd,0x5b,0x6b,0x36,0x34,0x00,0x00,0x00,0x00,0x02, - 0x00,0x4e,0xfe,0xf8,0x01,0x33,0x04,0x3f,0x00,0x06, - 0x00,0x0d,0x00,0x00,0x12,0x32,0x15,0x14,0x06,0x23, - 0x22,0x13,0x17,0x06,0x07,0x23,0x36,0x37,0x85,0x9c, - 0x2b,0x23,0x4e,0xa0,0x0e,0x43,0x63,0x3f,0x4a,0x1a, - 0x04,0x3f,0x6a,0x36,0x35,0xfd,0x63,0x17,0xe5,0xd9, - 0xfc,0xd9,0x00,0x00,0x00,0x01,0x00,0x3b,0x01,0x1f, - 0x02,0xfa,0x04,0x85,0x00,0x06,0x00,0x00,0x09,0x02, - 0x15,0x01,0x35,0x01,0x02,0xfa,0xfd,0xa8,0x02,0x58, - 0xfd,0x41,0x02,0xbf,0x04,0x21,0xfe,0xb2,0xfe,0xb2, - 0x66,0x01,0x93,0x44,0x01,0x8f,0x00,0x00,0x00,0x02, - 0x00,0x3b,0x01,0xd1,0x02,0xf8,0x03,0xd1,0x00,0x03, - 0x00,0x07,0x00,0x00,0x01,0x21,0x35,0x21,0x11,0x21, - 0x35,0x21,0x02,0xf8,0xfd,0x43,0x02,0xbd,0xfd,0x43, - 0x02,0xbd,0x03,0x7f,0x52,0xfe,0x00,0x52,0x00,0x01, - 0x00,0x39,0x01,0x1f,0x02,0xf8,0x04,0x85,0x00,0x06, - 0x00,0x00,0x01,0x15,0x01,0x35,0x01,0x01,0x35,0x02, - 0xf8,0xfd,0x41,0x02,0x58,0xfd,0xa8,0x02,0xf6,0x44, - 0xfe,0x6d,0x66,0x01,0x4e,0x01,0x4e,0x64,0x00,0x02, - 0x00,0x23,0xff,0xf0,0x02,0x12,0x05,0xcb,0x00,0x19, - 0x00,0x20,0x00,0x00,0x13,0x36,0x32,0x16,0x15,0x14, - 0x06,0x07,0x06,0x06,0x15,0x15,0x23,0x35,0x34,0x36, - 0x37,0x36,0x37,0x36,0x34,0x26,0x23,0x22,0x06,0x07, - 0x13,0x22,0x34,0x32,0x15,0x14,0x06,0x23,0x64,0xff, - 0x8c,0x40,0x5f,0x3c,0x2f,0x4a,0x2a,0x39,0x59,0x19, - 0x1b,0x5a,0x50,0x35,0x4f,0x2e,0x97,0x4d,0x9b,0x2b, - 0x05,0x81,0x4a,0xa6,0x9e,0x7a,0xa5,0x8f,0x5b,0x87, - 0x64,0x24,0x33,0x70,0x97,0x55,0x86,0x4f,0x4f,0xd2, - 0x7d,0x1d,0x1f,0xfa,0xbb,0xd5,0x6b,0x36,0x34,0x00, - 0x00,0x00,0x00,0x02,0x00,0x6f,0xff,0x4c,0x04,0x6a, - 0x05,0xc1,0x00,0x3a,0x00,0x45,0x00,0x00,0x05,0x22, - 0x02,0x11,0x34,0x35,0x10,0x12,0x36,0x33,0x32,0x33, - 0x32,0x16,0x12,0x15,0x10,0x23,0x22,0x26,0x27,0x23, - 0x06,0x06,0x23,0x22,0x26,0x35,0x10,0x21,0x32,0x17, - 0x03,0x15,0x14,0x33,0x32,0x36,0x35,0x34,0x35,0x34, - 0x02,0x26,0x23,0x22,0x23,0x22,0x06,0x02,0x15,0x10, - 0x12,0x33,0x32,0x36,0x37,0x15,0x06,0x03,0x22,0x06, - 0x15,0x10,0x33,0x32,0x36,0x37,0x13,0x26,0x02,0x48, - 0xe6,0xf3,0x85,0xf6,0x9f,0x03,0x03,0x89,0xdd,0x75, - 0xe1,0x51,0x4a,0x02,0x09,0x11,0x4a,0x42,0x58,0x61, - 0x01,0x06,0x56,0x4e,0x14,0x66,0x43,0x3c,0x5f,0xac, - 0x6b,0x02,0x03,0x85,0xce,0x6f,0xce,0xb5,0x43,0x78, - 0x26,0x64,0x42,0x4b,0x4e,0x68,0x2d,0x33,0x09,0x10, - 0x1d,0xb4,0x01,0x85,0x01,0x73,0x08,0x07,0x01,0x05, - 0x01,0x92,0xd7,0xbb,0xfe,0xaf,0xd6,0xfe,0x08,0x68, - 0x67,0x6d,0x62,0xbb,0xaa,0x01,0xd9,0x1d,0xfe,0x23, - 0x3d,0xa8,0xc9,0xd6,0x04,0x04,0xb6,0x01,0x25,0xa0, - 0xc6,0xfe,0x9b,0xe9,0xfe,0xb9,0xfe,0x95,0x26,0x1f, - 0x5e,0x3d,0x04,0x87,0xc9,0xc2,0xfe,0xfe,0xa6,0xae, - 0x01,0x31,0x08,0x00,0x00,0x00,0x00,0x02,0x00,0x00, - 0x00,0x00,0x03,0x2d,0x05,0xb6,0x00,0x07,0x00,0x0e, - 0x00,0x00,0x21,0x23,0x03,0x21,0x03,0x23,0x01,0x33, - 0x13,0x03,0x26,0x27,0x06,0x07,0x03,0x03,0x2d,0x64, - 0x81,0xfe,0x9d,0x7f,0x66,0x01,0x60,0x65,0x6c,0x81, - 0x16,0x09,0x09,0x13,0x7d,0x02,0x12,0xfd,0xee,0x05, - 0xb6,0xfc,0xbf,0x02,0x21,0x67,0x47,0x5b,0x53,0xfd, - 0xdf,0x00,0x00,0x00,0x00,0x03,0x00,0xa0,0x00,0x00, - 0x03,0x3b,0x05,0xb6,0x00,0x0e,0x00,0x17,0x00,0x1f, - 0x00,0x00,0x13,0x21,0x32,0x16,0x15,0x10,0x07,0x15, - 0x16,0x16,0x15,0x14,0x06,0x23,0x21,0x13,0x11,0x33, - 0x32,0x36,0x35,0x34,0x26,0x23,0x03,0x11,0x33,0x32, - 0x11,0x34,0x26,0x23,0xa0,0x01,0x18,0xad,0xb8,0xd9, - 0x7e,0x79,0xae,0x9d,0xfe,0xb0,0x62,0xb8,0x87,0x77, - 0x82,0x7e,0xb6,0xe1,0xf2,0x8d,0x81,0x05,0xb6,0xb1, - 0xab,0xfe,0xd7,0x2b,0x08,0x1a,0xab,0x99,0xc4,0xdc, - 0x05,0x5c,0xfd,0xcf,0x94,0x9d,0x7c,0x84,0xfd,0x75, - 0xfd,0x89,0x01,0x48,0x92,0x9d,0x00,0x00,0x00,0x01, - 0x00,0x6f,0xff,0xec,0x03,0x29,0x05,0xcd,0x00,0x1d, - 0x00,0x00,0x05,0x22,0x02,0x11,0x34,0x35,0x10,0x12, - 0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x02,0x11,0x14, - 0x15,0x10,0x12,0x33,0x32,0x33,0x32,0x37,0x15,0x06, - 0x23,0x22,0x02,0x37,0xce,0xfa,0xf9,0xd7,0x85,0x65, - 0x2d,0x54,0x6b,0xa6,0xc2,0xc8,0xa4,0x02,0x03,0x70, - 0x54,0x4e,0x7f,0x03,0x14,0x01,0x94,0x01,0x54,0x06, - 0x05,0x01,0x5f,0x01,0x8f,0x3e,0x56,0x36,0xfe,0xa4, - 0xfe,0xca,0x06,0x05,0xfe,0xdc,0xfe,0x9c,0x29,0x5a, - 0x2d,0x00,0x00,0x00,0x00,0x02,0x00,0xa0,0x00,0x00, - 0x03,0x75,0x05,0xb6,0x00,0x07,0x00,0x0f,0x00,0x00, - 0x13,0x21,0x32,0x12,0x11,0x10,0x21,0x21,0x13,0x11, - 0x33,0x20,0x11,0x10,0x02,0x23,0xa0,0x01,0x0a,0xe2, - 0xe9,0xfe,0x2f,0xfe,0xfc,0x62,0x9c,0x01,0x70,0xb7, - 0xb1,0x05,0xb6,0xfe,0x93,0xfe,0xa0,0xfd,0x17,0x05, - 0x5c,0xfa,0xfe,0x02,0x89,0x01,0x36,0x01,0x43,0x00, - 0x00,0x00,0x00,0x01,0x00,0xa0,0x00,0x00,0x02,0xb2, - 0x05,0xb6,0x00,0x0b,0x00,0x00,0x01,0x21,0x11,0x21, - 0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x02,0xb2, - 0xfe,0x50,0x01,0x98,0xfe,0x68,0x01,0xb0,0xfd,0xee, - 0x02,0x12,0x05,0x58,0xfd,0xd5,0x5e,0xfd,0x8f,0x5e, - 0x05,0xb6,0x00,0x00,0x00,0x01,0x00,0xa0,0x00,0x00, - 0x02,0xb4,0x05,0xb6,0x00,0x09,0x00,0x00,0x01,0x21, - 0x11,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x02,0xb4, - 0xfe,0x4e,0x01,0x9a,0xfe,0x66,0x62,0x02,0x14,0x05, - 0x58,0xfd,0x94,0x5f,0xfd,0x73,0x05,0xb6,0x00,0x01, - 0x00,0x6f,0xff,0xec,0x03,0xc1,0x05,0xcb,0x00,0x17, - 0x00,0x00,0x01,0x11,0x06,0x23,0x22,0x00,0x10,0x00, - 0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x02,0x10,0x12, - 0x33,0x32,0x37,0x11,0x23,0x35,0x03,0xc1,0xa8,0xb3, - 0xef,0xfe,0xf8,0x01,0x10,0xf8,0xa7,0x92,0x2f,0x89, - 0x81,0xcc,0xd4,0xd4,0xc4,0x8d,0x62,0xdd,0x02,0xe1, - 0xfd,0x4c,0x41,0x01,0x90,0x02,0xc7,0x01,0x88,0x5e, - 0x56,0x58,0xfe,0xb0,0xfd,0x83,0xfe,0xa8,0x25,0x02, - 0x14,0x5e,0x00,0x01,0x00,0xa0,0x00,0x00,0x03,0x62, - 0x05,0xb6,0x00,0x0b,0x00,0x00,0x21,0x23,0x11,0x21, - 0x11,0x23,0x11,0x33,0x11,0x21,0x11,0x33,0x03,0x62, - 0x62,0xfe,0x02,0x62,0x62,0x01,0xfe,0x62,0x02,0xcf, - 0xfd,0x31,0x05,0xb6,0xfd,0x77,0x02,0x89,0x00,0x00, - 0x00,0x01,0x00,0xa0,0x00,0x00,0x01,0x02,0x05,0xb6, - 0x00,0x03,0x00,0x00,0x21,0x23,0x11,0x33,0x01,0x02, - 0x62,0x62,0x05,0xb6,0x00,0x01,0xff,0xa6,0xfe,0x8f, - 0x00,0xf8,0x05,0xb6,0x00,0x0c,0x00,0x00,0x13,0x11, - 0x14,0x06,0x23,0x22,0x27,0x35,0x16,0x32,0x36,0x35, - 0x11,0xf8,0x70,0x6d,0x44,0x31,0x33,0x80,0x3d,0x05, - 0xb6,0xfa,0x33,0xab,0xaf,0x19,0x5c,0x14,0x75,0x82, - 0x05,0xcf,0x00,0x01,0x00,0xa0,0x00,0x00,0x03,0x39, - 0x05,0xb6,0x00,0x0c,0x00,0x00,0x21,0x23,0x11,0x33, - 0x11,0x36,0x01,0x33,0x01,0x01,0x23,0x01,0x07,0x01, - 0x02,0x62,0x62,0x33,0x01,0x7d,0x6b,0xfe,0x91,0x01, - 0x8b,0x6e,0xfe,0xa8,0x71,0x05,0xb6,0xfc,0xfa,0x60, - 0x02,0xa6,0xfd,0x7d,0xfc,0xcd,0x02,0xd9,0x95,0x00, - 0x00,0x00,0x00,0x01,0x00,0xa0,0x00,0x00,0x02,0x9e, - 0x05,0xb6,0x00,0x05,0x00,0x00,0x25,0x21,0x15,0x21, - 0x11,0x33,0x01,0x02,0x01,0x9c,0xfe,0x02,0x62,0x5e, - 0x5e,0x05,0xb6,0x00,0x00,0x01,0x00,0xa0,0x00,0x00, - 0x04,0xd3,0x05,0xb6,0x00,0x17,0x00,0x00,0x21,0x23, - 0x11,0x34,0x37,0x23,0x01,0x23,0x01,0x23,0x16,0x15, - 0x11,0x23,0x11,0x33,0x01,0x16,0x17,0x33,0x36,0x37, - 0x01,0x33,0x04,0xd3,0x62,0x0a,0x08,0xfe,0x7d,0x6f, - 0xfe,0x7b,0x08,0x0a,0x5e,0x91,0x01,0x48,0x2b,0x0e, - 0x08,0x0c,0x32,0x01,0x45,0x96,0x04,0x21,0x48,0xc8, - 0xfa,0xcf,0x05,0x33,0xc8,0x42,0xfb,0xd7,0x05,0xb6, - 0xfb,0xa2,0x94,0x68,0x52,0xa8,0x04,0x60,0x00,0x01, - 0x00,0xa0,0x00,0x00,0x03,0xa2,0x05,0xb6,0x00,0x0f, - 0x00,0x00,0x21,0x23,0x01,0x23,0x16,0x15,0x11,0x23, - 0x11,0x33,0x01,0x33,0x26,0x35,0x11,0x33,0x03,0xa2, - 0x7d,0xfd,0xd7,0x08,0x0c,0x60,0x7f,0x02,0x25,0x06, - 0x08,0x60,0x05,0x1f,0x89,0x7d,0xfb,0xe7,0x05,0xb6, - 0xfa,0xf0,0xae,0x64,0x03,0xfe,0x00,0x00,0x00,0x02, - 0x00,0x6f,0xff,0xec,0x03,0xba,0x05,0xcb,0x00,0x09, - 0x00,0x11,0x00,0x00,0x01,0x32,0x17,0x16,0x10,0x02, - 0x20,0x02,0x11,0x10,0x00,0x02,0x20,0x02,0x10,0x12, - 0x20,0x12,0x02,0x17,0xcd,0x6a,0x6c,0xd9,0xfe,0x63, - 0xd5,0x02,0xe5,0xa0,0xfe,0xc3,0xa2,0xa3,0x01,0x3a, - 0xa2,0x05,0xcb,0xc3,0xc2,0xfd,0x2b,0xfe,0x7b,0x01, - 0x89,0x01,0x6a,0x02,0xec,0xfe,0x57,0x01,0x4b,0xfe, - 0xb3,0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00,0x00,0x02, - 0x00,0xa0,0x00,0x00,0x03,0x04,0x05,0xb6,0x00,0x09, - 0x00,0x11,0x00,0x00,0x13,0x33,0x32,0x16,0x10,0x06, - 0x23,0x23,0x11,0x23,0x13,0x11,0x33,0x32,0x36,0x10, - 0x26,0x23,0xa0,0xc8,0xd6,0xc6,0xcd,0xcd,0x68,0x62, - 0x62,0x62,0xac,0x90,0x93,0x9e,0x05,0xb6,0xca,0xfe, - 0x46,0xd6,0xfd,0xa4,0x05,0x5c,0xfd,0x5a,0xa2,0x01, - 0x69,0x9b,0x00,0x02,0x00,0x6f,0xfe,0xa4,0x03,0xba, - 0x05,0xcb,0x00,0x0f,0x00,0x17,0x00,0x00,0x13,0x10, - 0x21,0x32,0x17,0x16,0x11,0x10,0x02,0x07,0x13,0x23, - 0x03,0x07,0x22,0x02,0x00,0x02,0x20,0x02,0x10,0x12, - 0x20,0x12,0x6f,0x01,0xa8,0xcd,0x6a,0x6c,0x8d,0x85, - 0xd5,0x7d,0xba,0x32,0xd0,0xd5,0x02,0xe5,0xa0,0xfe, - 0xc3,0xa2,0xa3,0x01,0x3a,0xa2,0x02,0xdf,0x02,0xec, - 0xc3,0xc2,0xfe,0x97,0xfe,0xde,0xfe,0x8d,0x3e,0xfe, - 0x9a,0x01,0x4c,0x04,0x01,0x89,0x02,0xad,0x01,0x4b, - 0xfe,0xb3,0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00,0x02, - 0x00,0xa0,0x00,0x00,0x03,0x3b,0x05,0xb6,0x00,0x0d, - 0x00,0x15,0x00,0x00,0x13,0x33,0x32,0x16,0x15,0x14, - 0x06,0x07,0x01,0x23,0x01,0x23,0x11,0x23,0x13,0x11, - 0x33,0x32,0x36,0x10,0x26,0x23,0xa0,0xc8,0xd4,0xc8, - 0x6f,0x7c,0x01,0x22,0x6e,0xfe,0xef,0xba,0x62,0x62, - 0x89,0x86,0x8f,0x92,0x9f,0x05,0xb6,0xc8,0xcb,0x9c, - 0xc1,0x30,0xfd,0x6a,0x02,0x7f,0xfd,0x81,0x05,0x56, - 0xfd,0x83,0xa5,0x01,0x45,0x93,0x00,0x00,0x00,0x01, - 0x00,0x56,0xff,0xec,0x02,0xd1,0x05,0xcb,0x00,0x25, - 0x00,0x00,0x25,0x32,0x36,0x34,0x26,0x27,0x2e,0x02, - 0x35,0x34,0x35,0x34,0x36,0x33,0x32,0x33,0x32,0x17, - 0x07,0x26,0x22,0x06,0x14,0x16,0x17,0x16,0x16,0x15, - 0x14,0x07,0x06,0x23,0x22,0x27,0x35,0x16,0x16,0x01, - 0x6f,0x70,0x90,0x67,0x8f,0x72,0x6f,0x36,0xc3,0x8c, - 0x02,0x03,0x9a,0x6e,0x26,0x6f,0xdf,0x87,0x63,0x8e, - 0x94,0x89,0x64,0x65,0x99,0xaf,0x6a,0x38,0x98,0x4a, - 0xaa,0xfc,0x8f,0x46,0x3a,0x6a,0x8d,0x64,0x06,0x06, - 0x97,0xce,0x3c,0x5e,0x39,0x93,0xf5,0x86,0x4a,0x48, - 0xc1,0x8a,0xb4,0x70,0x6f,0x33,0x6a,0x1e,0x21,0x00, - 0x00,0x01,0x00,0x0e,0x00,0x00,0x02,0xb6,0x05,0xb6, - 0x00,0x07,0x00,0x00,0x01,0x21,0x11,0x23,0x11,0x21, - 0x35,0x21,0x02,0xb6,0xfe,0xdd,0x62,0xfe,0xdd,0x02, - 0xa8,0x05,0x58,0xfa,0xa8,0x05,0x58,0x5e,0x00,0x00, - 0x00,0x01,0x00,0x93,0xff,0xec,0x03,0x60,0x05,0xb6, - 0x00,0x0f,0x00,0x00,0x01,0x11,0x10,0x21,0x22,0x26, - 0x35,0x11,0x33,0x11,0x14,0x16,0x32,0x36,0x35,0x11, - 0x03,0x60,0xfe,0x9e,0xb1,0xba,0x63,0x89,0xfd,0x82, - 0x05,0xb6,0xfc,0x25,0xfe,0x11,0xff,0xf0,0x03,0xdb, - 0xfc,0x19,0xbd,0xc8,0xc7,0xc2,0x03,0xe3,0x00,0x00, - 0x00,0x01,0x00,0x00,0x00,0x00,0x03,0x1f,0x05,0xb6, - 0x00,0x0b,0x00,0x00,0x21,0x23,0x01,0x33,0x13,0x16, - 0x16,0x17,0x36,0x37,0x01,0x33,0x01,0xc5,0x6d,0xfe, - 0xa8,0x66,0xee,0x1b,0x13,0x09,0x15,0x0d,0x01,0x0d, - 0x65,0x05,0xb6,0xfb,0xfc,0x70,0x76,0x53,0x95,0x3b, - 0x04,0x6d,0x00,0x01,0x00,0x0a,0x00,0x00,0x05,0x68, - 0x05,0xb6,0x00,0x18,0x00,0x00,0x21,0x23,0x03,0x26, - 0x27,0x07,0x03,0x23,0x01,0x33,0x13,0x16,0x17,0x36, - 0x37,0x13,0x33,0x13,0x16,0x17,0x17,0x36,0x37,0x13, - 0x33,0x04,0x31,0x77,0xdf,0x07,0x1c,0x25,0xdb,0x74, - 0xfe,0xc6,0x67,0xce,0x31,0x0d,0x16,0x23,0xcd,0x6f, - 0xcc,0x22,0x0c,0x0a,0x1c,0x1d,0xd5,0x64,0x04,0x46, - 0x20,0xcf,0xed,0xfb,0xb8,0x05,0xb6,0xfc,0x11,0xfe, - 0x5a,0x9f,0xb5,0x03,0xf3,0xfc,0x11,0xb3,0x5b,0x4a, - 0xd1,0x87,0x03,0xef,0x00,0x01,0x00,0x14,0x00,0x00, - 0x02,0xb6,0x05,0xb6,0x00,0x0b,0x00,0x00,0x01,0x01, - 0x23,0x03,0x03,0x23,0x01,0x01,0x33,0x13,0x13,0x33, - 0x01,0xb4,0x01,0x02,0x66,0xdb,0xfe,0x63,0x01,0x32, - 0xfe,0xf9,0x67,0xd9,0xd3,0x64,0x02,0xf2,0xfd,0x0e, - 0x02,0xa0,0xfd,0x60,0x03,0x08,0x02,0xae,0xfd,0xa0, - 0x02,0x60,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00, - 0x02,0xae,0x05,0xb6,0x00,0x08,0x00,0x00,0x21,0x23, - 0x11,0x01,0x33,0x13,0x13,0x33,0x01,0x01,0x87,0x62, - 0xfe,0xdb,0x68,0xf0,0xee,0x68,0xfe,0xd9,0x02,0x3b, - 0x03,0x7b,0xfd,0x0d,0x02,0xf3,0xfc,0x85,0x00,0x01, - 0x00,0x39,0x00,0x00,0x02,0x5a,0x05,0xb6,0x00,0x09, - 0x00,0x00,0x25,0x15,0x21,0x35,0x01,0x21,0x35,0x21, - 0x15,0x01,0x02,0x5a,0xfd,0xdf,0x01,0xa8,0xfe,0x5e, - 0x02,0x0f,0xfe,0x52,0x5e,0x5e,0x58,0x04,0xfe,0x60, - 0x5a,0xfb,0x02,0x00,0x00,0x00,0x00,0x01,0x00,0xae, - 0xfe,0xbc,0x02,0x3b,0x05,0xb6,0x00,0x07,0x00,0x00, - 0x01,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x02,0x3b, - 0xfe,0xd1,0x01,0x2f,0xfe,0x73,0x01,0x8d,0x05,0x5c, - 0xf9,0xbb,0x5b,0x06,0xfa,0x00,0x00,0x01,0x00,0x33, - 0x00,0x00,0x02,0xa2,0x05,0xb6,0x00,0x03,0x00,0x00, - 0x21,0x23,0x01,0x33,0x02,0xa2,0x65,0xfd,0xf6,0x60, - 0x05,0xb6,0x00,0x00,0x00,0x01,0x00,0x4a,0xfe,0xbc, - 0x01,0xd7,0x05,0xb6,0x00,0x07,0x00,0x00,0x01,0x21, - 0x35,0x21,0x11,0x21,0x35,0x21,0x01,0xd7,0xfe,0x73, - 0x01,0x2f,0xfe,0xd1,0x01,0x8d,0xfe,0xbc,0x5b,0x06, - 0x45,0x5a,0x00,0x00,0x00,0x01,0x00,0x25,0x02,0xf6, - 0x03,0x0e,0x05,0xb4,0x00,0x06,0x00,0x00,0x01,0x23, - 0x01,0x01,0x23,0x01,0x33,0x03,0x0e,0x66,0xfe,0xf2, - 0xfe,0xef,0x64,0x01,0x52,0x43,0x02,0xf6,0x02,0x4e, - 0xfd,0xb2,0x02,0xbe,0x00,0x01,0xff,0xfc,0xfe,0xf6, - 0x03,0x4e,0xff,0x48,0x00,0x03,0x00,0x00,0x01,0x21, - 0x35,0x21,0x03,0x4e,0xfc,0xae,0x03,0x52,0xfe,0xf6, - 0x52,0x00,0x00,0x01,0x01,0xb2,0x04,0xd9,0x02,0xee, - 0x06,0x21,0x00,0x09,0x00,0x00,0x01,0x33,0x16,0x16, - 0x17,0x15,0x23,0x26,0x26,0x27,0x01,0xb2,0x7d,0x1d, - 0x6a,0x38,0x30,0x3f,0xa8,0x25,0x06,0x21,0x43,0xaa, - 0x46,0x15,0x33,0xbf,0x45,0x00,0x00,0x02,0x00,0x4e, - 0xff,0xec,0x02,0x83,0x04,0x52,0x00,0x16,0x00,0x20, - 0x00,0x00,0x13,0x36,0x20,0x16,0x15,0x11,0x23,0x27, - 0x23,0x06,0x23,0x22,0x27,0x26,0x10,0x36,0x37,0x37, - 0x35,0x34,0x26,0x22,0x07,0x03,0x14,0x16,0x33,0x32, - 0x36,0x35,0x35,0x07,0x04,0x9a,0x70,0x01,0x04,0x75, - 0x4e,0x0c,0x04,0x4e,0x9e,0x6b,0x40,0x40,0xba,0xa8, - 0x75,0x4d,0xb4,0x61,0x11,0x52,0x4a,0x66,0x71,0x71, - 0xfe,0xfe,0x04,0x0c,0x46,0xaa,0xc5,0xfd,0x1d,0x98, - 0xac,0x54,0x55,0x01,0x29,0xb5,0x08,0x06,0x5a,0x99, - 0x8a,0x3d,0xfd,0x60,0x73,0x71,0xca,0xb7,0x71,0x06, - 0x0d,0x00,0x00,0x00,0x00,0x02,0x00,0x91,0xff,0xec, - 0x03,0x1f,0x06,0x14,0x00,0x11,0x00,0x1b,0x00,0x00, - 0x01,0x20,0x11,0x10,0x02,0x23,0x22,0x26,0x27,0x23, - 0x07,0x23,0x11,0x33,0x11,0x07,0x33,0x36,0x03,0x15, - 0x10,0x33,0x32,0x36,0x10,0x26,0x22,0x06,0x01,0xe1, - 0x01,0x3e,0x9e,0x95,0x4f,0x7f,0x2a,0x08,0x0d,0x4e, - 0x5f,0x04,0x08,0x56,0x5a,0xf1,0x6f,0x6c,0x6b,0xf1, - 0x70,0x04,0x50,0xfd,0xd1,0xfe,0xec,0xfe,0xdf,0x57, - 0x53,0x96,0x06,0x14,0xfe,0x1d,0x83,0xa2,0xfd,0xd1, - 0x19,0xfe,0x3a,0xeb,0x01,0xe2,0xe9,0xdc,0x00,0x00, - 0x00,0x01,0x00,0x60,0xff,0xec,0x02,0x52,0x04,0x52, - 0x00,0x12,0x00,0x00,0x05,0x22,0x02,0x10,0x12,0x33, - 0x32,0x17,0x07,0x26,0x23,0x22,0x10,0x33,0x32,0x37, - 0x15,0x06,0x06,0x01,0xa8,0xa2,0xa6,0xa8,0xa2,0x65, - 0x43,0x25,0x42,0x39,0xef,0xef,0x46,0x54,0x1f,0x60, - 0x14,0x01,0x1b,0x02,0x29,0x01,0x22,0x25,0x54,0x1f, - 0xfc,0x4a,0x20,0x50,0x11,0x15,0x00,0x00,0x00,0x02, - 0x00,0x5e,0xff,0xec,0x02,0xec,0x06,0x14,0x00,0x11, - 0x00,0x1b,0x00,0x00,0x21,0x23,0x27,0x23,0x06,0x23, - 0x20,0x11,0x10,0x12,0x33,0x32,0x16,0x17,0x33,0x27, - 0x11,0x33,0x03,0x35,0x34,0x26,0x22,0x06,0x10,0x16, - 0x32,0x36,0x02,0xec,0x4e,0x08,0x09,0x51,0xa2,0xfe, - 0xc4,0x9f,0x99,0x49,0x83,0x27,0x08,0x04,0x5f,0x5f, - 0x76,0xed,0x69,0x6c,0xe6,0x7a,0x98,0xac,0x02,0x31, - 0x01,0x15,0x01,0x20,0x54,0x4a,0x79,0x01,0xe7,0xfb, - 0xcb,0x3e,0xf5,0xe6,0xef,0xfe,0x24,0xee,0xd4,0x00, - 0x00,0x02,0x00,0x60,0xff,0xec,0x02,0xc3,0x04,0x52, - 0x00,0x11,0x00,0x17,0x00,0x00,0x05,0x22,0x27,0x26, - 0x10,0x12,0x33,0x32,0x12,0x15,0x15,0x21,0x12,0x21, - 0x32,0x37,0x15,0x06,0x13,0x34,0x26,0x23,0x22,0x03, - 0x01,0xc5,0xac,0x5d,0x5c,0xa5,0x9b,0x87,0x9c,0xfd, - 0xfe,0x04,0x01,0x04,0x67,0x70,0x68,0x2c,0x6d,0x5d, - 0xc4,0x13,0x14,0x92,0x94,0x02,0x1b,0x01,0x25,0xff, - 0x00,0xdb,0x58,0xfe,0x27,0x43,0x5c,0x41,0x02,0x89, - 0xb3,0xd4,0xfe,0x79,0x00,0x01,0x00,0x14,0x00,0x00, - 0x01,0xf8,0x06,0x1f,0x00,0x15,0x00,0x00,0x13,0x34, - 0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x06,0x06,0x07, - 0x15,0x33,0x15,0x23,0x11,0x23,0x11,0x23,0x35,0x37, - 0x9e,0x62,0x79,0x47,0x38,0x21,0x33,0x2d,0x48,0x31, - 0x02,0xaa,0xaa,0x5e,0x8a,0x8a,0x04,0x9a,0xcf,0xb6, - 0x19,0x58,0x19,0x03,0x7d,0xaf,0x5b,0x54,0xfc,0x17, - 0x03,0xe9,0x36,0x29,0x00,0x00,0x00,0x03,0x00,0x23, - 0xfe,0x14,0x02,0xdb,0x04,0x52,0x00,0x28,0x00,0x31, - 0x00,0x3d,0x00,0x00,0x25,0x33,0x32,0x16,0x15,0x14, - 0x06,0x23,0x22,0x26,0x35,0x34,0x37,0x26,0x35,0x34, - 0x36,0x37,0x26,0x26,0x35,0x34,0x36,0x33,0x32,0x17, - 0x33,0x15,0x07,0x16,0x16,0x15,0x14,0x06,0x23,0x23, - 0x27,0x06,0x06,0x14,0x16,0x12,0x26,0x22,0x06,0x10, - 0x16,0x33,0x32,0x11,0x03,0x23,0x22,0x06,0x14,0x16, - 0x33,0x32,0x36,0x35,0x34,0x26,0x01,0x66,0x44,0x92, - 0x9f,0xd7,0xb0,0x93,0x9e,0xd7,0x6f,0x3c,0x41,0x52, - 0x56,0x92,0x7f,0x43,0x2f,0xe6,0x94,0x1d,0x27,0x8f, - 0x75,0x18,0x15,0x34,0x33,0x48,0xf4,0x5a,0xab,0x5c, - 0x60,0x53,0xae,0x73,0x46,0x62,0x81,0x6d,0x6a,0x87, - 0x9c,0x6b,0x91,0x97,0x8d,0x9f,0xba,0x95,0x8c,0xd0, - 0x51,0x30,0x6a,0x2e,0x4c,0x30,0x26,0xa8,0x75,0xad, - 0xc8,0x15,0x43,0x11,0x26,0x90,0x4e,0x9f,0xc3,0x02, - 0x25,0x43,0x58,0x34,0x02,0xdc,0x97,0x9b,0xfe,0xf0, - 0x8c,0x01,0x18,0xfd,0x50,0x88,0xd9,0x72,0x8c,0x7a, - 0x63,0x6a,0x00,0x01,0x00,0x91,0x00,0x00,0x02,0xd9, - 0x06,0x14,0x00,0x17,0x00,0x00,0x13,0x11,0x14,0x07, - 0x33,0x36,0x37,0x36,0x33,0x32,0x16,0x15,0x11,0x23, - 0x11,0x34,0x26,0x23,0x22,0x06,0x15,0x11,0x23,0x11, - 0xf0,0x04,0x08,0x20,0x40,0x40,0x47,0x87,0x77,0x5e, - 0x4c,0x58,0x74,0x73,0x5f,0x06,0x14,0xfe,0x07,0x4a, - 0x29,0x52,0x2b,0x2d,0xb0,0xb6,0xfd,0x14,0x02,0xec, - 0x92,0x7c,0xcf,0xd9,0xfd,0xae,0x06,0x14,0x00,0x02, - 0x00,0x83,0x00,0x00,0x01,0x00,0x05,0xc9,0x00,0x07, - 0x00,0x0b,0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06, - 0x22,0x26,0x13,0x23,0x11,0x33,0x83,0x24,0x39,0x20, - 0x20,0x38,0x25,0x6d,0x5f,0x5f,0x05,0x96,0x33,0x32, - 0x58,0x33,0x34,0xfa,0xc0,0x04,0x3d,0x00,0x00,0x00, - 0x00,0x02,0xff,0xfc,0xfe,0x14,0x01,0x00,0x05,0xc9, - 0x00,0x07,0x00,0x15,0x00,0x00,0x12,0x36,0x32,0x16, - 0x14,0x06,0x22,0x26,0x13,0x11,0x14,0x06,0x23,0x22, - 0x27,0x35,0x16,0x33,0x32,0x36,0x35,0x11,0x83,0x24, - 0x39,0x20,0x20,0x38,0x25,0x6d,0x56,0x5b,0x29,0x1a, - 0x1f,0x20,0x2e,0x28,0x05,0x96,0x33,0x32,0x58,0x33, - 0x34,0xfe,0xfd,0xfa,0xfa,0x95,0x8e,0x11,0x5a,0x10, - 0x59,0x61,0x05,0x14,0x00,0x00,0x00,0x01,0x00,0x91, - 0x00,0x00,0x02,0xb8,0x06,0x14,0x00,0x0e,0x00,0x00, - 0x33,0x23,0x11,0x33,0x11,0x07,0x33,0x37,0x01,0x33, - 0x03,0x01,0x23,0x03,0x07,0xf0,0x5f,0x5f,0x07,0x09, - 0x3d,0x01,0x0c,0x67,0xfa,0x01,0x10,0x64,0xec,0x78, - 0x06,0x14,0xfc,0xbb,0xb6,0x6e,0x01,0xb6,0xfe,0x71, - 0xfd,0x52,0x02,0x56,0x9e,0x00,0x00,0x01,0x00,0x91, - 0x00,0x00,0x00,0xf0,0x06,0x14,0x00,0x03,0x00,0x00, - 0x33,0x23,0x11,0x33,0xf0,0x5f,0x5f,0x06,0x14,0x00, - 0x00,0x01,0x00,0x91,0x00,0x00,0x04,0x89,0x04,0x52, - 0x00,0x20,0x00,0x00,0x01,0x32,0x17,0x36,0x36,0x33, - 0x32,0x16,0x15,0x11,0x23,0x11,0x10,0x23,0x22,0x06, - 0x15,0x11,0x23,0x11,0x34,0x26,0x23,0x22,0x06,0x15, - 0x11,0x23,0x11,0x33,0x17,0x33,0x36,0x01,0xcf,0xaa, - 0x2f,0x27,0x72,0x5b,0x7b,0x72,0x5e,0xa0,0x6c,0x63, - 0x5e,0x4e,0x52,0x6b,0x63,0x5f,0x50,0x08,0x09,0x40, - 0x04,0x52,0xbc,0x64,0x58,0xbe,0xcf,0xfd,0x3b,0x02, - 0xe3,0x01,0x11,0xbb,0xbe,0xfd,0x85,0x02,0xe3,0x8a, - 0x87,0xc3,0xdd,0xfd,0xac,0x04,0x3d,0x97,0xac,0x00, - 0x00,0x01,0x00,0x91,0x00,0x00,0x02,0xd9,0x04,0x52, - 0x00,0x13,0x00,0x00,0x01,0x32,0x16,0x15,0x11,0x23, - 0x11,0x10,0x23,0x22,0x06,0x15,0x11,0x23,0x11,0x33, - 0x17,0x33,0x36,0x36,0x01,0xdd,0x80,0x7c,0x5e,0xa0, - 0x7a,0x71,0x5f,0x50,0x08,0x09,0x21,0x80,0x04,0x52, - 0xab,0xb9,0xfd,0x12,0x02,0xec,0x01,0x0e,0xca,0xdc, - 0xfd,0xac,0x04,0x3d,0x97,0x50,0x5c,0x00,0x00,0x02, - 0x00,0x5e,0xff,0xec,0x02,0xf4,0x04,0x52,0x00,0x08, - 0x00,0x10,0x00,0x00,0x01,0x32,0x12,0x10,0x02,0x20, - 0x02,0x11,0x10,0x05,0x22,0x06,0x15,0x10,0x33,0x32, - 0x10,0x01,0xaa,0x9c,0xae,0xad,0xfe,0xc0,0xa9,0x01, - 0x4a,0x78,0x6f,0xe7,0xe9,0x04,0x52,0xfe,0xda,0xfd, - 0xe3,0xfe,0xdd,0x01,0x23,0x01,0x12,0x02,0x31,0x5a, - 0xe9,0xee,0xfe,0x25,0x03,0xb2,0x00,0x02,0x00,0x91, - 0xfe,0x14,0x03,0x1f,0x04,0x52,0x00,0x12,0x00,0x1c, - 0x00,0x00,0x01,0x20,0x11,0x10,0x02,0x23,0x22,0x26, - 0x27,0x23,0x17,0x11,0x23,0x11,0x33,0x17,0x33,0x36, - 0x36,0x03,0x15,0x14,0x16,0x32,0x36,0x10,0x26,0x22, - 0x06,0x01,0xe1,0x01,0x3e,0x9d,0x94,0x52,0x87,0x23, - 0x09,0x07,0x5f,0x4e,0x0a,0x09,0x28,0x7d,0xa7,0x76, - 0xe9,0x6d,0x69,0xf0,0x73,0x04,0x52,0xfd,0xcf,0xfe, - 0xf0,0xfe,0xdb,0x5b,0x4f,0x77,0xfd,0xf5,0x06,0x29, - 0x95,0x52,0x58,0xfd,0xf4,0x1f,0xf9,0xec,0xea,0x01, - 0xe6,0xe6,0xd3,0x00,0x00,0x00,0x00,0x02,0x00,0x5e, - 0xfe,0x14,0x02,0xec,0x04,0x52,0x00,0x10,0x00,0x1a, - 0x00,0x00,0x25,0x06,0x23,0x20,0x11,0x10,0x12,0x20, - 0x17,0x33,0x37,0x33,0x11,0x23,0x11,0x34,0x37,0x03, - 0x35,0x34,0x26,0x22,0x06,0x10,0x16,0x32,0x36,0x02, - 0x8d,0x55,0x9e,0xfe,0xc4,0xa5,0x01,0x34,0x52,0x08, - 0x0f,0x4c,0x5f,0x09,0x09,0x76,0xed,0x69,0x6d,0xe6, - 0x79,0x9e,0xb2,0x02,0x31,0x01,0x1a,0x01,0x1b,0xa6, - 0x91,0xf9,0xd7,0x01,0xd5,0x43,0x72,0x01,0x4e,0x31, - 0xf5,0xe6,0xef,0xfe,0x1a,0xe1,0xda,0x00,0x00,0x01, - 0x00,0x91,0x00,0x00,0x02,0x1d,0x04,0x52,0x00,0x14, - 0x00,0x00,0x01,0x32,0x17,0x07,0x26,0x23,0x22,0x23, - 0x22,0x06,0x06,0x15,0x14,0x15,0x11,0x23,0x11,0x33, - 0x17,0x33,0x36,0x01,0xbe,0x32,0x2d,0x17,0x24,0x26, - 0x03,0x02,0x33,0x5d,0x37,0x5f,0x4e,0x0a,0x07,0x4c, - 0x04,0x52,0x0e,0x5f,0x0f,0x71,0xc9,0x73,0x04,0x04, - 0xfd,0xc1,0x04,0x3d,0xbe,0xd3,0x00,0x01,0x00,0x4a, - 0xff,0xec,0x02,0x3d,0x04,0x52,0x00,0x1f,0x00,0x00, - 0x25,0x32,0x36,0x35,0x34,0x2e,0x03,0x35,0x34,0x36, - 0x32,0x17,0x07,0x26,0x22,0x06,0x14,0x17,0x16,0x17, - 0x16,0x17,0x16,0x10,0x06,0x20,0x27,0x35,0x16,0x16, - 0x01,0x29,0x54,0x60,0x47,0xd1,0x4f,0x2c,0x9f,0xfb, - 0x59,0x31,0x52,0xb0,0x64,0x22,0x22,0x6e,0x6b,0x28, - 0x50,0x91,0xfe,0xf1,0x51,0x25,0x7a,0x46,0x6d,0x5d, - 0x47,0x66,0x85,0x52,0x67,0x49,0x75,0x99,0x3e,0x53, - 0x37,0x63,0x99,0x31,0x30,0x45,0x46,0x2a,0x56,0xfe, - 0xf6,0x9a,0x3d,0x6f,0x25,0x2d,0x00,0x01,0x00,0x2b, - 0xff,0xec,0x01,0xa6,0x05,0x3f,0x00,0x14,0x00,0x00, - 0x13,0x33,0x15,0x23,0x11,0x14,0x16,0x33,0x32,0x37, - 0x15,0x06,0x23,0x22,0x35,0x11,0x23,0x35,0x37,0x13, - 0x33,0xec,0xac,0xac,0x30,0x3c,0x2c,0x22,0x2d,0x44, - 0xa8,0x62,0x60,0x1f,0x42,0x04,0x3d,0x54,0xfd,0x19, - 0x6e,0x50,0x0c,0x50,0x14,0xfb,0x03,0x02,0x38,0x1c, - 0x01,0x02,0x00,0x00,0x00,0x01,0x00,0x8d,0xff,0xec, - 0x02,0xd5,0x04,0x3d,0x00,0x15,0x00,0x00,0x21,0x23, - 0x27,0x23,0x06,0x06,0x23,0x22,0x27,0x26,0x35,0x11, - 0x33,0x11,0x14,0x16,0x33,0x32,0x36,0x35,0x11,0x33, - 0x02,0xd5,0x50,0x0c,0x08,0x23,0x7b,0x4a,0x83,0x3d, - 0x3c,0x5f,0x4c,0x51,0x7c,0x72,0x5e,0x98,0x52,0x5a, - 0x5d,0x5d,0xd3,0x02,0xc4,0xfd,0x3c,0xa0,0x95,0xc8, - 0xdd,0x02,0x54,0x00,0x00,0x00,0x00,0x01,0x00,0x0a, - 0x00,0x00,0x02,0x83,0x04,0x3d,0x00,0x0b,0x00,0x00, - 0x21,0x23,0x01,0x33,0x13,0x16,0x17,0x33,0x36,0x36, - 0x13,0x33,0x01,0x7b,0x71,0xff,0x00,0x60,0xa2,0x1c, - 0x1a,0x08,0x09,0x20,0xb0,0x60,0x04,0x3d,0xfd,0x46, - 0x79,0x8f,0x40,0x9a,0x02,0xe8,0x00,0x00,0x00,0x01, - 0x00,0x14,0x00,0x00,0x04,0x50,0x04,0x3d,0x00,0x1a, - 0x00,0x00,0x21,0x23,0x03,0x27,0x27,0x23,0x07,0x07, - 0x03,0x23,0x03,0x33,0x13,0x13,0x33,0x36,0x37,0x13, - 0x33,0x13,0x16,0x13,0x33,0x36,0x36,0x13,0x33,0x03, - 0x5c,0x70,0x96,0x04,0x1f,0x02,0x0e,0x17,0x9b,0x71, - 0xec,0x5f,0x87,0x3f,0x06,0x13,0x27,0x87,0x64,0x88, - 0x10,0x29,0x06,0x02,0x2c,0x99,0x5e,0x02,0xdf,0x11, - 0xc0,0x55,0x7c,0xfd,0x21,0x04,0x3d,0xfd,0x88,0xfe, - 0xb6,0x95,0xb7,0x02,0x76,0xfd,0x88,0x47,0xfe,0xfd, - 0x1b,0xe1,0x02,0xc6,0x00,0x01,0x00,0x23,0x00,0x00, - 0x02,0x81,0x04,0x3d,0x00,0x0b,0x00,0x00,0x01,0x13, - 0x23,0x03,0x03,0x23,0x01,0x03,0x33,0x13,0x13,0x33, - 0x01,0x83,0xfe,0x64,0xcb,0xcd,0x62,0x01,0x02,0xee, - 0x67,0xb6,0xbe,0x63,0x02,0x27,0xfd,0xd9,0x01,0xd5, - 0xfe,0x2b,0x02,0x33,0x02,0x0a,0xfe,0x48,0x01,0xb8, - 0x00,0x01,0xff,0xfe,0xfe,0x14,0x02,0x83,0x04,0x3d, - 0x00,0x16,0x00,0x00,0x13,0x22,0x27,0x35,0x16,0x33, - 0x32,0x36,0x37,0x37,0x01,0x33,0x13,0x16,0x17,0x33, - 0x36,0x37,0x13,0x33,0x01,0x06,0x06,0x54,0x25,0x31, - 0x2a,0x24,0x3b,0x46,0x1c,0x30,0xfe,0xf1,0x60,0xa4, - 0x1e,0x1a,0x08,0x15,0x20,0xa0,0x60,0xfe,0xc3,0x24, - 0x72,0xfe,0x14,0x11,0x56,0x0e,0x65,0x74,0xbc,0x04, - 0x3b,0xfd,0x5b,0x81,0x92,0x8f,0x86,0x02,0xa3,0xfa, - 0xf6,0x93,0x8c,0x00,0x00,0x01,0x00,0x3b,0x00,0x00, - 0x01,0xee,0x04,0x3d,0x00,0x09,0x00,0x00,0x25,0x15, - 0x21,0x35,0x01,0x21,0x35,0x21,0x15,0x01,0x01,0xee, - 0xfe,0x4d,0x01,0x40,0xfe,0xd5,0x01,0x8f,0xfe,0xc1, - 0x54,0x54,0x4c,0x03,0x9d,0x54,0x4d,0xfc,0x64,0x00, - 0x00,0x00,0x00,0x01,0x00,0x6d,0xfe,0xbc,0x02,0x79, - 0x05,0xb6,0x00,0x21,0x00,0x00,0x01,0x11,0x14,0x06, - 0x07,0x15,0x16,0x16,0x15,0x11,0x14,0x16,0x17,0x15, - 0x26,0x26,0x35,0x11,0x34,0x26,0x26,0x23,0x35,0x32, - 0x37,0x36,0x35,0x11,0x34,0x36,0x37,0x15,0x06,0x06, - 0x01,0x9e,0x5b,0x68,0x6a,0x59,0x6b,0x70,0x97,0xa7, - 0x26,0x59,0x4f,0x92,0x28,0x14,0xa8,0x96,0x70,0x6b, - 0x04,0x7b,0xfe,0xc4,0x7a,0x74,0x14,0x08,0x13,0x77, - 0x78,0xfe,0xc5,0x77,0x73,0x02,0x50,0x04,0xa9,0x93, - 0x01,0x43,0x58,0x56,0x2a,0x45,0x52,0x2d,0x58,0x01, - 0x44,0x93,0xa8,0x04,0x50,0x02,0x72,0x00,0x00,0x00, - 0x00,0x01,0x01,0x6a,0xfe,0x14,0x01,0xc9,0x06,0x14, - 0x00,0x03,0x00,0x00,0x01,0x23,0x11,0x33,0x01,0xc9, - 0x5f,0x5f,0xfe,0x14,0x08,0x00,0x00,0x00,0x00,0x01, - 0x00,0x68,0xfe,0xbc,0x02,0x75,0x05,0xb6,0x00,0x22, - 0x00,0x00,0x01,0x11,0x14,0x16,0x17,0x16,0x33,0x15, - 0x22,0x07,0x06,0x15,0x11,0x14,0x06,0x07,0x35,0x36, - 0x36,0x35,0x11,0x34,0x36,0x37,0x35,0x26,0x26,0x35, - 0x11,0x34,0x26,0x27,0x35,0x16,0x16,0x01,0xa6,0x27, - 0x2d,0x2e,0x4d,0x93,0x28,0x14,0xa7,0x97,0x70,0x6c, - 0x5a,0x68,0x66,0x5c,0x6c,0x70,0x96,0xa8,0x04,0x77, - 0xfe,0xbc,0x58,0x55,0x16,0x14,0x45,0x53,0x2b,0x5a, - 0xfe,0xbd,0x93,0xa9,0x04,0x50,0x02,0x73,0x77,0x01, - 0x3b,0x78,0x77,0x13,0x08,0x13,0x76,0x79,0x01,0x3c, - 0x77,0x72,0x02,0x50,0x04,0xa8,0x00,0x01,0x00,0x3b, - 0x02,0x6a,0x02,0xf8,0x03,0x3b,0x00,0x12,0x00,0x00, - 0x01,0x22,0x2e,0x02,0x22,0x06,0x07,0x35,0x36,0x33, - 0x32,0x16,0x16,0x32,0x36,0x37,0x15,0x06,0x02,0x44, - 0x33,0x3e,0x86,0x3c,0x49,0x63,0x2a,0x4b,0x6e,0x29, - 0x47,0xa5,0x6a,0x5f,0x26,0x4a,0x02,0x71,0x13,0x4a, - 0x15,0x41,0x38,0x63,0x6a,0x13,0x5d,0x3f,0x35,0x62, - 0x68,0x00,0x00,0x00,0x00,0x02,0x00,0x93,0xfe,0x79, - 0x01,0x2f,0x04,0x3f,0x00,0x06,0x00,0x0a,0x00,0x00, - 0x13,0x32,0x16,0x15,0x14,0x22,0x34,0x13,0x23,0x13, - 0x33,0xe1,0x23,0x2b,0x9c,0x8c,0x7d,0x23,0x37,0x04, - 0x3f,0x34,0x36,0x6b,0xd5,0xfa,0x3a,0x04,0x48,0x00, - 0x00,0x00,0x00,0x01,0x00,0xa8,0xff,0xec,0x02,0x9a, - 0x05,0xcb,0x00,0x17,0x00,0x00,0x01,0x15,0x16,0x17, - 0x07,0x26,0x23,0x22,0x06,0x15,0x10,0x33,0x32,0x37, - 0x15,0x06,0x07,0x15,0x23,0x35,0x24,0x10,0x25,0x35, - 0x02,0x08,0x58,0x3a,0x25,0x48,0x33,0x7b,0x73,0xee, - 0x45,0x54,0x33,0x58,0x52,0xfe,0xf2,0x01,0x0e,0x05, - 0xcb,0xa8,0x06,0x1f,0x56,0x1d,0xef,0xea,0xfe,0x2b, - 0x20,0x54,0x1e,0x09,0xd0,0xd5,0x2f,0x03,0xf6,0x37, - 0xae,0x00,0x00,0x01,0x00,0x50,0x00,0x00,0x02,0xe5, - 0x05,0xcb,0x00,0x1e,0x00,0x00,0x13,0x11,0x34,0x36, - 0x20,0x17,0x07,0x26,0x27,0x26,0x23,0x22,0x06,0x15, - 0x11,0x33,0x15,0x23,0x11,0x14,0x07,0x21,0x15,0x21, - 0x35,0x36,0x36,0x35,0x11,0x23,0x35,0xee,0x82,0x01, - 0x11,0x64,0x37,0x33,0x2a,0x27,0x32,0x59,0x4f,0xfa, - 0xfa,0x79,0x02,0x0a,0xfd,0x7b,0x45,0x4d,0x9e,0x03, - 0x00,0x01,0x62,0xb8,0xb1,0x58,0x4c,0x2b,0x0f,0x10, - 0x82,0x8f,0xfe,0xa0,0x56,0xfe,0xe1,0xd6,0x57,0x5e, - 0x52,0x1d,0xa4,0x76,0x01,0x21,0x56,0x00,0x00,0x02, - 0x00,0x7d,0x01,0x19,0x03,0xf0,0x04,0x8b,0x00,0x17, - 0x00,0x29,0x00,0x00,0x00,0x10,0x07,0x17,0x07,0x27, - 0x06,0x20,0x27,0x07,0x27,0x37,0x26,0x10,0x37,0x27, - 0x37,0x17,0x36,0x20,0x17,0x37,0x17,0x07,0x25,0x22, - 0x06,0x15,0x14,0x15,0x14,0x16,0x20,0x36,0x35,0x34, - 0x35,0x34,0x26,0x23,0x22,0x22,0x03,0xc1,0x59,0x88, - 0x3a,0x89,0x6b,0xfe,0xe5,0x6a,0x85,0x39,0x85,0x56, - 0x56,0x87,0x39,0x87,0x6d,0x01,0x19,0x6a,0x87,0x3c, - 0x88,0xfe,0xc7,0x7b,0xb8,0xb6,0x01,0x0a,0xb9,0xbb, - 0x7b,0x04,0x08,0x03,0x5e,0xfe,0xea,0x6d,0x89,0x39, - 0x87,0x56,0x58,0x87,0x3b,0x85,0x6e,0x01,0x12,0x6e, - 0x89,0x39,0x89,0x5a,0x58,0x87,0x39,0x87,0x45,0xb9, - 0x7a,0x05,0x05,0x85,0xb6,0xb7,0x84,0x05,0x05,0x79, - 0xba,0x00,0x00,0x00,0x00,0x01,0x00,0x6a,0x00,0x00, - 0x02,0xc7,0x05,0xb6,0x00,0x17,0x00,0x00,0x01,0x15, - 0x23,0x15,0x33,0x15,0x23,0x11,0x23,0x11,0x23,0x35, - 0x33,0x35,0x27,0x23,0x35,0x33,0x03,0x33,0x13,0x13, - 0x33,0x03,0x02,0xa8,0xdd,0xdd,0xdd,0x67,0xd7,0xd7, - 0x02,0xd5,0xbf,0xe2,0x61,0xcf,0xca,0x63,0xe4,0x02, - 0x8f,0x52,0xc8,0x52,0xfe,0xdd,0x01,0x23,0x52,0xc6, - 0x02,0x52,0x03,0x27,0xfd,0x02,0x02,0xfe,0xfc,0xd9, - 0x00,0x02,0x01,0x6a,0xfe,0x14,0x01,0xc9,0x06,0x14, - 0x00,0x03,0x00,0x07,0x00,0x00,0x01,0x23,0x11,0x33, - 0x11,0x23,0x11,0x33,0x01,0xc9,0x5f,0x5f,0x5f,0x5f, - 0x02,0xf6,0x03,0x1e,0xf8,0x00,0x03,0x1f,0x00,0x00, - 0x00,0x02,0x00,0x52,0x00,0x62,0x02,0x58,0x06,0x14, - 0x00,0x2a,0x00,0x35,0x00,0x00,0x13,0x34,0x36,0x37, - 0x26,0x35,0x34,0x36,0x33,0x32,0x16,0x17,0x07,0x26, - 0x26,0x23,0x22,0x06,0x14,0x1e,0x03,0x14,0x06,0x07, - 0x16,0x16,0x15,0x14,0x06,0x20,0x27,0x35,0x16,0x33, - 0x32,0x36,0x34,0x26,0x27,0x27,0x26,0x12,0x06,0x14, - 0x16,0x17,0x36,0x35,0x34,0x27,0x26,0x27,0x52,0x4e, - 0x45,0x7f,0x9b,0x78,0x3d,0x51,0x3f,0x27,0x31,0x4a, - 0x2f,0x51,0x61,0x43,0xdd,0x4e,0x27,0x42,0x35,0x40, - 0x37,0xa0,0xfe,0xf2,0x58,0x53,0x8c,0x5a,0x6f,0x43, - 0x63,0x5e,0xa4,0x9b,0x3f,0x69,0x87,0x5c,0x48,0x27, - 0x60,0x03,0x5a,0x50,0x75,0x1e,0x58,0x82,0x71,0x8c, - 0x14,0x23,0x4a,0x1d,0x15,0x5a,0x89,0x55,0x80,0x4c, - 0x58,0x83,0x7e,0x20,0x31,0x66,0x40,0x7b,0x94,0x38, - 0x64,0x4a,0x69,0x8d,0x58,0x3b,0x37,0x60,0x01,0x28, - 0x59,0x7e,0x69,0x41,0x35,0x77,0x5e,0x38,0x20,0x33, - 0x00,0x02,0x01,0x5c,0x05,0x19,0x03,0x0a,0x05,0xbe, - 0x00,0x07,0x00,0x0f,0x00,0x00,0x00,0x36,0x32,0x16, - 0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06, - 0x22,0x26,0x01,0x5c,0x25,0x35,0x23,0x23,0x35,0x25, - 0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24,0x05,0x95, - 0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a, - 0x2b,0x00,0x00,0x00,0x00,0x03,0x00,0x64,0xff,0xec, - 0x06,0x44,0x05,0xcb,0x00,0x0b,0x00,0x17,0x00,0x2b, - 0x00,0x00,0x04,0x24,0x02,0x10,0x12,0x24,0x20,0x04, - 0x12,0x10,0x02,0x04,0x00,0x02,0x24,0x20,0x04,0x02, - 0x10,0x12,0x04,0x20,0x24,0x12,0x01,0x22,0x26,0x10, - 0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x06,0x15, - 0x10,0x21,0x32,0x37,0x15,0x06,0x02,0x85,0xfe,0xa2, - 0xc3,0xc9,0x01,0x5e,0x01,0x91,0x01,0x5f,0xc9,0xc4, - 0xfe,0xa3,0x01,0xc4,0xac,0xfe,0xcd,0xfe,0x9d,0xfe, - 0xcc,0xb0,0xb0,0x01,0x31,0x01,0x64,0x01,0x2f,0xb2, - 0xfd,0x88,0xbb,0xcb,0xde,0xba,0x78,0x6b,0x25,0x62, - 0x5c,0x8e,0xa1,0x01,0x27,0x55,0x71,0x66,0x14,0xce, - 0x01,0x5a,0x01,0x8f,0x01,0x5f,0xc9,0xc9,0xfe,0xa2, - 0xfe,0x71,0xfe,0xa5,0xce,0x03,0x9c,0x01,0x30,0xb7, - 0xb3,0xfe,0xcd,0xfe,0x9f,0xfe,0xd2,0xb2,0xb1,0x01, - 0x30,0xfe,0xee,0xe7,0x01,0xa6,0xfa,0x34,0x53,0x2d, - 0xbe,0xa9,0xfe,0x94,0x2b,0x58,0x2d,0x00,0x00,0x02, - 0x00,0x39,0x03,0x25,0x01,0xcf,0x05,0xc7,0x00,0x15, - 0x00,0x1f,0x00,0x00,0x13,0x36,0x32,0x16,0x15,0x11, - 0x23,0x27,0x23,0x06,0x23,0x22,0x26,0x34,0x36,0x37, - 0x37,0x35,0x34,0x26,0x22,0x07,0x11,0x14,0x33,0x32, - 0x36,0x35,0x35,0x07,0x06,0x06,0x73,0x51,0xb8,0x53, - 0x39,0x0f,0x08,0x45,0x67,0x44,0x56,0x6f,0x79,0x5c, - 0x30,0x77,0x47,0x5f,0x44,0x4b,0x3e,0x60,0x50,0x05, - 0x9a,0x2d,0x63,0x6c,0xfe,0x39,0x54,0x60,0x64,0xb0, - 0x62,0x0b,0x08,0x48,0x4b,0x40,0x27,0xfe,0x81,0x71, - 0x67,0x5c,0x42,0x07,0x09,0x3f,0x00,0x00,0x00,0x02, - 0x00,0x52,0x00,0x93,0x03,0x06,0x03,0x8b,0x00,0x06, - 0x00,0x0d,0x00,0x00,0x01,0x03,0x13,0x07,0x01,0x35, - 0x01,0x05,0x03,0x13,0x07,0x01,0x35,0x01,0x01,0xae, - 0xdb,0xdb,0x3d,0xfe,0xe1,0x01,0x1f,0x01,0x95,0xd9, - 0xd9,0x3b,0xfe,0xdf,0x01,0x21,0x03,0x68,0xfe,0xa8, - 0xfe,0xa8,0x25,0x01,0x6f,0x1b,0x01,0x6e,0x23,0xfe, - 0xa8,0xfe,0xa8,0x25,0x01,0x6f,0x1b,0x01,0x6e,0x00, - 0x00,0x01,0x00,0x3b,0x00,0xfa,0x02,0xe3,0x02,0xfc, - 0x00,0x05,0x00,0x00,0x25,0x23,0x11,0x21,0x35,0x21, - 0x02,0xe3,0x52,0xfd,0xaa,0x02,0xa8,0xfa,0x01,0xb0, - 0x52,0x00,0x00,0x01,0x00,0x35,0x01,0xf6,0x01,0xcf, - 0x02,0x5c,0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21, - 0x01,0xcf,0xfe,0x66,0x01,0x9a,0x01,0xf6,0x66,0x00, - 0x00,0x04,0x00,0x64,0xff,0xec,0x06,0x44,0x05,0xcb, - 0x00,0x0b,0x00,0x17,0x00,0x24,0x00,0x2c,0x00,0x00, - 0x04,0x24,0x02,0x10,0x12,0x24,0x20,0x04,0x12,0x10, - 0x02,0x04,0x00,0x02,0x24,0x20,0x04,0x02,0x10,0x12, - 0x04,0x20,0x24,0x12,0x01,0x33,0x32,0x16,0x15,0x14, - 0x07,0x13,0x23,0x03,0x23,0x11,0x23,0x13,0x11,0x33, - 0x32,0x36,0x35,0x34,0x23,0x02,0x85,0xfe,0xa2,0xc3, - 0xc9,0x01,0x5e,0x01,0x91,0x01,0x5f,0xc9,0xc4,0xfe, - 0xa3,0x01,0xc4,0xac,0xfe,0xcd,0xfe,0x9d,0xfe,0xcc, - 0xb0,0xb0,0x01,0x31,0x01,0x64,0x01,0x2f,0xb2,0xfc, - 0x79,0xd3,0x92,0x9b,0x93,0xc6,0x72,0xae,0xae,0x65, - 0x65,0x70,0x5c,0x67,0xc5,0x14,0xce,0x01,0x5a,0x01, - 0x8f,0x01,0x5f,0xc9,0xc9,0xfe,0xa2,0xfe,0x71,0xfe, - 0xa5,0xce,0x03,0x9c,0x01,0x30,0xb7,0xb3,0xfe,0xcd, - 0xfe,0x9f,0xfe,0xd2,0xb2,0xb1,0x01,0x30,0x02,0x6a, - 0x7e,0x7f,0xb0,0x40,0xfe,0x7d,0x01,0x68,0xfe,0x98, - 0x03,0x1a,0xfe,0x9e,0x5e,0x58,0xac,0x00,0x00,0x01, - 0xff,0xf8,0x06,0x14,0x03,0x52,0x06,0x66,0x00,0x03, - 0x00,0x00,0x01,0x21,0x35,0x21,0x03,0x52,0xfc,0xa6, - 0x03,0x5a,0x06,0x14,0x52,0x00,0x00,0x02,0x00,0x8b, - 0x03,0x75,0x02,0xe1,0x05,0xcb,0x00,0x07,0x00,0x10, - 0x00,0x00,0x00,0x32,0x16,0x10,0x06,0x22,0x26,0x10, - 0x00,0x36,0x34,0x26,0x22,0x07,0x06,0x14,0x16,0x01, - 0x38,0xfc,0xad,0xad,0xff,0xaa,0x01,0x80,0x7c,0x78, - 0xb3,0x3c,0x3b,0x7a,0x05,0xcb,0xa7,0xfe,0xf8,0xa7, - 0xa5,0x01,0x0a,0xfe,0xa3,0x7c,0xb9,0x7d,0x40,0x41, - 0xb4,0x7d,0x00,0x00,0x00,0x02,0x00,0x3b,0x00,0x00, - 0x02,0xf8,0x04,0xae,0x00,0x0b,0x00,0x0f,0x00,0x00, - 0x01,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x35,0x21, - 0x11,0x33,0x01,0x21,0x35,0x21,0x01,0xc3,0x01,0x35, - 0xfe,0xcb,0x52,0xfe,0xca,0x01,0x36,0x52,0x01,0x35, - 0xfd,0x43,0x02,0xbd,0x02,0xfc,0x52,0xfe,0x50,0x01, - 0xb0,0x52,0x01,0xb2,0xfb,0x52,0x52,0x00,0x00,0x01, - 0x00,0x31,0x02,0x4a,0x02,0x08,0x05,0xcb,0x00,0x16, - 0x00,0x00,0x01,0x32,0x16,0x15,0x14,0x06,0x07,0x07, - 0x21,0x15,0x21,0x35,0x37,0x3e,0x02,0x34,0x26,0x23, - 0x22,0x07,0x27,0x36,0x01,0x10,0x6e,0x7c,0x4b,0x88, - 0x91,0x01,0x72,0xfe,0x29,0xb2,0x46,0x54,0x1f,0x4c, - 0x42,0x58,0x4c,0x37,0x5f,0x05,0xcb,0x7c,0x6c,0x56, - 0x9b,0xa6,0xb0,0x52,0x4e,0xdf,0x56,0x7e,0x57,0x84, - 0x4f,0x52,0x3d,0x6b,0x00,0x01,0x00,0x2f,0x02,0x39, - 0x02,0x0e,0x05,0xcd,0x00,0x1f,0x00,0x00,0x13,0x36, - 0x32,0x16,0x15,0x14,0x06,0x07,0x15,0x16,0x15,0x14, - 0x06,0x23,0x22,0x27,0x35,0x16,0x32,0x36,0x34,0x26, - 0x23,0x23,0x35,0x33,0x32,0x36,0x34,0x26,0x22,0x07, - 0x2f,0x63,0xe6,0x7a,0x49,0x41,0xa6,0x96,0x7e,0x65, - 0x60,0x5e,0xc4,0x59,0x68,0x65,0x3d,0x41,0x54,0x5d, - 0x4f,0x9b,0x4a,0x05,0x73,0x5a,0x7a,0x6c,0x48,0x6a, - 0x18,0x09,0x2e,0xb3,0x6e,0x8c,0x2b,0x5f,0x34,0x57, - 0xa8,0x5e,0x51,0x5f,0x92,0x49,0x48,0x00,0x00,0x00, - 0x00,0x01,0x01,0xb2,0x04,0xd9,0x02,0xee,0x06,0x21, - 0x00,0x08,0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23, - 0x35,0x36,0x37,0x02,0xee,0x25,0xa1,0x47,0x2f,0x7e, - 0x41,0x06,0x21,0x11,0x42,0xba,0x3b,0x15,0xa4,0x8f, - 0x00,0x01,0x00,0x91,0xfe,0x14,0x02,0xd9,0x04,0x3d, - 0x00,0x17,0x00,0x00,0x21,0x23,0x27,0x23,0x06,0x06, - 0x23,0x22,0x27,0x23,0x16,0x15,0x11,0x23,0x11,0x33, - 0x11,0x10,0x33,0x32,0x36,0x35,0x11,0x33,0x02,0xd9, - 0x50,0x0c,0x08,0x21,0x7a,0x44,0x76,0x30,0x09,0x09, - 0x5f,0x5f,0x9d,0x7c,0x72,0x5e,0x98,0x50,0x5c,0x6a, - 0x78,0x3f,0xfe,0x75,0x06,0x29,0xfd,0x23,0xfe,0xe4, - 0xc8,0xdd,0x02,0x54,0x00,0x00,0x00,0x01,0x00,0x96, - 0xfe,0xfc,0x03,0x00,0x06,0x14,0x00,0x0e,0x00,0x00, - 0x01,0x23,0x11,0x23,0x11,0x23,0x11,0x06,0x23,0x22, - 0x26,0x10,0x12,0x33,0x21,0x03,0x00,0x5e,0x92,0x5e, - 0x1e,0x27,0x6f,0x68,0x80,0x88,0x01,0x62,0xfe,0xfc, - 0x06,0xb8,0xf9,0x48,0x03,0x33,0x12,0xf5,0x02,0x02, - 0x01,0x00,0x00,0x01,0x00,0x85,0x02,0x66,0x01,0x21, - 0x03,0x3b,0x00,0x06,0x00,0x00,0x12,0x32,0x15,0x14, - 0x06,0x23,0x22,0x85,0x9c,0x2b,0x23,0x4e,0x03,0x3b, - 0x6a,0x36,0x35,0x00,0x00,0x01,0x00,0x3b,0xfe,0x14, - 0x01,0x7b,0x00,0x00,0x00,0x11,0x00,0x00,0x01,0x14, - 0x06,0x23,0x22,0x27,0x35,0x16,0x33,0x32,0x36,0x34, - 0x26,0x27,0x37,0x33,0x07,0x16,0x01,0x7b,0x7b,0x6f, - 0x3d,0x19,0x21,0x2d,0x4c,0x4c,0x54,0x52,0x48,0x4b, - 0x33,0xa0,0xfe,0xdd,0x62,0x67,0x0b,0x4e,0x0b,0x41, - 0x72,0x3e,0x0d,0xa0,0x73,0x27,0x00,0x00,0x00,0x01, - 0x00,0x52,0x02,0x4a,0x01,0x8d,0x05,0xb6,0x00,0x0a, - 0x00,0x00,0x01,0x23,0x11,0x34,0x37,0x06,0x06,0x07, - 0x27,0x37,0x33,0x01,0x8d,0x56,0x06,0x20,0x36,0x64, - 0x31,0xed,0x4e,0x02,0x4a,0x02,0x66,0x56,0x54,0x1f, - 0x2b,0x47,0x41,0xac,0x00,0x00,0x00,0x02,0x00,0x46, - 0x03,0x25,0x02,0x25,0x05,0xc7,0x00,0x07,0x00,0x10, - 0x00,0x00,0x12,0x36,0x32,0x16,0x10,0x06,0x22,0x26, - 0x13,0x22,0x11,0x14,0x16,0x32,0x36,0x10,0x26,0x46, - 0x7f,0xe5,0x7b,0x7a,0xeb,0x7a,0xef,0x95,0x47,0x9f, - 0x45,0x47,0x05,0x17,0xb0,0xa8,0xfe,0xb3,0xad,0xac, - 0x01,0xac,0xfe,0xfa,0x8a,0x7e,0x7c,0x01,0x16,0x7c, - 0x00,0x02,0x00,0x52,0x00,0x93,0x03,0x06,0x03,0x8b, - 0x00,0x06,0x00,0x0d,0x00,0x00,0x01,0x15,0x01,0x27, - 0x13,0x03,0x37,0x01,0x15,0x01,0x27,0x13,0x03,0x37, - 0x01,0xae,0xfe,0xdf,0x3b,0xd9,0xd9,0x3b,0x02,0x79, - 0xfe,0xe1,0x3d,0xdb,0xdb,0x3d,0x02,0x1d,0x1b,0xfe, - 0x91,0x25,0x01,0x58,0x01,0x58,0x23,0xfe,0x92,0x1b, - 0xfe,0x91,0x25,0x01,0x58,0x01,0x58,0x23,0x00,0x04, - 0x00,0x34,0x00,0x00,0x05,0x18,0x05,0xb6,0x00,0x0a, - 0x00,0x0e,0x00,0x19,0x00,0x20,0x00,0x00,0x01,0x23, - 0x11,0x34,0x37,0x06,0x06,0x07,0x27,0x37,0x33,0x13, - 0x23,0x01,0x33,0x13,0x33,0x15,0x23,0x15,0x23,0x35, - 0x21,0x35,0x01,0x33,0x03,0x11,0x34,0x37,0x06,0x06, - 0x03,0x01,0x6f,0x56,0x06,0x20,0x36,0x64,0x31,0xed, - 0x4e,0x01,0x5c,0x03,0x00,0x5c,0x44,0x64,0x64,0x56, - 0xfe,0xb2,0x01,0x54,0x50,0x56,0x04,0x04,0x4c,0x9d, - 0x02,0x4a,0x02,0x66,0x56,0x54,0x1f,0x2b,0x47,0x41, - 0xac,0xfa,0x4a,0x05,0xb6,0xfb,0x6e,0x52,0xd1,0xd1, - 0x41,0x02,0x60,0xfd,0xb1,0x01,0x1a,0x7f,0x2b,0x0c, - 0x9a,0xfe,0xe2,0x00,0x00,0x03,0x00,0x34,0x00,0x00, - 0x05,0x37,0x05,0xb6,0x00,0x0a,0x00,0x0e,0x00,0x25, - 0x00,0x00,0x01,0x23,0x11,0x34,0x37,0x06,0x06,0x07, - 0x27,0x37,0x33,0x03,0x23,0x01,0x33,0x03,0x32,0x16, - 0x15,0x14,0x06,0x07,0x07,0x21,0x15,0x21,0x35,0x37, - 0x3e,0x02,0x34,0x26,0x23,0x22,0x07,0x27,0x36,0x01, - 0x6f,0x56,0x06,0x20,0x36,0x64,0x31,0xed,0x4e,0x17, - 0x5c,0x03,0x00,0x5c,0x19,0x6e,0x7c,0x4b,0x88,0x91, - 0x01,0x72,0xfe,0x29,0xb2,0x46,0x54,0x1f,0x4c,0x42, - 0x58,0x4c,0x37,0x5f,0x02,0x4a,0x02,0x66,0x56,0x54, - 0x1f,0x2b,0x47,0x41,0xac,0xfa,0x4a,0x05,0xb6,0xfd, - 0xcc,0x7c,0x6c,0x56,0x9b,0xa6,0xb0,0x52,0x4e,0xdf, - 0x56,0x7e,0x57,0x84,0x4f,0x52,0x3d,0x6b,0x00,0x04, - 0x00,0x2f,0x00,0x00,0x05,0x3f,0x05,0xcd,0x00,0x1f, - 0x00,0x23,0x00,0x2e,0x00,0x35,0x00,0x00,0x13,0x36, - 0x32,0x16,0x15,0x14,0x06,0x07,0x15,0x16,0x15,0x14, - 0x06,0x23,0x22,0x27,0x35,0x16,0x32,0x36,0x34,0x26, - 0x23,0x23,0x35,0x33,0x32,0x36,0x34,0x26,0x22,0x07, - 0x01,0x23,0x01,0x33,0x13,0x33,0x15,0x23,0x15,0x23, - 0x35,0x21,0x35,0x01,0x33,0x03,0x11,0x34,0x37,0x06, - 0x06,0x03,0x2f,0x63,0xe6,0x7a,0x49,0x41,0xa6,0x96, - 0x7e,0x65,0x60,0x5e,0xc4,0x59,0x68,0x65,0x3d,0x41, - 0x54,0x5d,0x4f,0x9b,0x4a,0x01,0x35,0x5c,0x03,0x00, - 0x5c,0x42,0x64,0x64,0x56,0xfe,0xb2,0x01,0x54,0x50, - 0x56,0x04,0x05,0x4b,0x9d,0x05,0x73,0x5a,0x7a,0x6c, - 0x48,0x6a,0x18,0x09,0x2e,0xb3,0x6e,0x8c,0x2b,0x5f, - 0x34,0x57,0xa8,0x5e,0x51,0x5f,0x92,0x49,0x48,0xfa, - 0xd1,0x05,0xb6,0xfb,0x6e,0x52,0xd1,0xd1,0x41,0x02, - 0x60,0xfd,0xb1,0x01,0x1a,0x7f,0x2b,0x0c,0x9a,0xfe, - 0xe2,0x00,0x00,0x02,0x00,0x2f,0xfe,0x64,0x02,0x1f, - 0x04,0x3f,0x00,0x06,0x00,0x1f,0x00,0x00,0x01,0x32, - 0x14,0x22,0x35,0x34,0x36,0x13,0x15,0x14,0x06,0x06, - 0x07,0x06,0x14,0x16,0x33,0x32,0x36,0x37,0x17,0x06, - 0x22,0x26,0x10,0x37,0x36,0x37,0x36,0x36,0x35,0x35, - 0x01,0x58,0x4e,0x9c,0x2b,0x4e,0x2a,0x7f,0x16,0x31, - 0x5b,0x4f,0x35,0x4f,0x2f,0x2f,0x67,0xfe,0x8b,0x31, - 0x1a,0x55,0x3a,0x2e,0x04,0x3f,0xd5,0x6b,0x36,0x34, - 0xfe,0x82,0x34,0x73,0x92,0xc3,0x31,0x6c,0xed,0x7d, - 0x1d,0x1f,0x4c,0x4a,0xa9,0x01,0x26,0x69,0x39,0x81, - 0x5b,0x86,0x63,0x27,0x00,0x00,0x00,0x03,0x00,0x00, - 0x00,0x00,0x03,0x2d,0x07,0x73,0x00,0x09,0x00,0x11, - 0x00,0x18,0x00,0x00,0x13,0x33,0x16,0x16,0x17,0x15, - 0x23,0x26,0x26,0x27,0x01,0x23,0x03,0x21,0x03,0x23, - 0x01,0x33,0x13,0x03,0x26,0x27,0x06,0x07,0x03,0x92, - 0x7d,0x1d,0x6a,0x38,0x30,0x3f,0xa8,0x25,0x02,0x9b, - 0x64,0x81,0xfe,0x9d,0x7f,0x66,0x01,0x60,0x65,0x6c, - 0x81,0x16,0x09,0x09,0x13,0x7d,0x07,0x73,0x43,0xaa, - 0x46,0x15,0x33,0xbf,0x45,0xf8,0x9e,0x02,0x12,0xfd, - 0xee,0x05,0xb6,0xfc,0xbf,0x02,0x21,0x67,0x47,0x5b, - 0x53,0xfd,0xdf,0x00,0x00,0x00,0x00,0x03,0x00,0x00, - 0x00,0x00,0x03,0x2d,0x07,0x73,0x00,0x08,0x00,0x10, - 0x00,0x17,0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23, - 0x35,0x36,0x37,0x01,0x23,0x03,0x21,0x03,0x23,0x01, - 0x33,0x13,0x03,0x26,0x27,0x06,0x07,0x03,0x02,0x8f, - 0x25,0xa2,0x46,0x2f,0x7e,0x41,0x01,0x1b,0x64,0x81, - 0xfe,0x9d,0x7f,0x66,0x01,0x60,0x65,0x6c,0x81,0x16, - 0x09,0x09,0x13,0x7d,0x07,0x73,0x11,0x42,0xba,0x3b, - 0x15,0xa4,0x8f,0xf8,0x8d,0x02,0x12,0xfd,0xee,0x05, - 0xb6,0xfc,0xbf,0x02,0x21,0x67,0x47,0x5b,0x53,0xfd, - 0xdf,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x2d, - 0x07,0x73,0x00,0x11,0x00,0x19,0x00,0x20,0x00,0x00, - 0x01,0x23,0x26,0x27,0x27,0x06,0x07,0x06,0x07,0x23, - 0x35,0x36,0x37,0x33,0x16,0x17,0x16,0x17,0x13,0x23, - 0x03,0x21,0x03,0x23,0x01,0x33,0x13,0x03,0x26,0x27, - 0x06,0x07,0x03,0x02,0x7e,0x2f,0x2a,0x31,0x61,0x13, - 0x2c,0x51,0x31,0x2b,0x79,0x41,0x5f,0x17,0x37,0x3c, - 0x34,0xaf,0x64,0x81,0xfe,0x9d,0x7f,0x66,0x01,0x60, - 0x65,0x6c,0x81,0x16,0x09,0x09,0x13,0x7d,0x06,0x2b, - 0x2a,0x3b,0x70,0x15,0x33,0x5e,0x2f,0x13,0xa8,0x8d, - 0x36,0x5b,0x5f,0x45,0xf9,0xc2,0x02,0x12,0xfd,0xee, - 0x05,0xb6,0xfc,0xbf,0x02,0x21,0x67,0x47,0x5b,0x53, - 0xfd,0xdf,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x2d, - 0x07,0x00,0x00,0x15,0x00,0x1d,0x00,0x24,0x00,0x00, - 0x01,0x22,0x26,0x27,0x26,0x22,0x06,0x07,0x23,0x36, - 0x36,0x33,0x32,0x16,0x17,0x16,0x33,0x32,0x37,0x33, - 0x06,0x06,0x13,0x23,0x03,0x21,0x03,0x23,0x01,0x33, - 0x13,0x03,0x26,0x27,0x06,0x07,0x03,0x02,0x0f,0x20, - 0x4a,0x1c,0x4c,0x40,0x2c,0x09,0x4a,0x0c,0x54,0x46, - 0x20,0x49,0x1b,0x49,0x25,0x3b,0x14,0x4a,0x09,0x54, - 0xdb,0x64,0x81,0xfe,0x9d,0x7f,0x66,0x01,0x60,0x65, - 0x6c,0x81,0x16,0x09,0x09,0x13,0x7d,0x06,0x2d,0x28, - 0x17,0x40,0x46,0x3b,0x64,0x6f,0x28,0x18,0x3f,0x81, - 0x65,0x6e,0xf9,0xd3,0x02,0x12,0xfd,0xee,0x05,0xb6, - 0xfc,0xbf,0x02,0x21,0x67,0x47,0x5b,0x53,0xfd,0xdf, - 0x00,0x04,0x00,0x00,0x00,0x00,0x03,0x2d,0x07,0x10, - 0x00,0x07,0x00,0x0f,0x00,0x17,0x00,0x1e,0x00,0x00, - 0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x36, - 0x32,0x16,0x14,0x06,0x22,0x26,0x01,0x23,0x03,0x21, - 0x03,0x23,0x01,0x33,0x13,0x03,0x26,0x27,0x06,0x07, - 0x03,0xbf,0x25,0x35,0x23,0x23,0x35,0x25,0x01,0x31, - 0x24,0x35,0x24,0x24,0x35,0x24,0x01,0x3d,0x64,0x81, - 0xfe,0x9d,0x7f,0x66,0x01,0x60,0x65,0x6c,0x81,0x16, - 0x09,0x09,0x13,0x7d,0x06,0xe7,0x29,0x29,0x52,0x2a, - 0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xf9,0x6a,0x02, - 0x12,0xfd,0xee,0x05,0xb6,0xfc,0xbf,0x02,0x21,0x67, - 0x47,0x5b,0x53,0xfd,0xdf,0x00,0x00,0x03,0x00,0x00, - 0x00,0x00,0x03,0x2d,0x06,0xeb,0x00,0x0f,0x00,0x17, - 0x00,0x1e,0x00,0x00,0x00,0x26,0x34,0x36,0x32,0x16, - 0x14,0x06,0x07,0x01,0x23,0x03,0x21,0x03,0x23,0x01, - 0x12,0x06,0x14,0x16,0x32,0x36,0x34,0x26,0x13,0x03, - 0x26,0x27,0x06,0x07,0x03,0x01,0x14,0x46,0x6b,0xb3, - 0x70,0x49,0x40,0x01,0x5a,0x64,0x81,0xfe,0x9d,0x7f, - 0x66,0x01,0x53,0x0c,0x43,0x3e,0x71,0x43,0x3f,0x62, - 0x81,0x16,0x09,0x09,0x13,0x7d,0x05,0x8f,0x5d,0x9a, - 0x65,0x64,0x9a,0x60,0x10,0xfa,0x83,0x02,0x12,0xfd, - 0xee,0x05,0x7e,0x01,0x27,0x41,0x69,0x3f,0x40,0x69, - 0x40,0xfb,0xd0,0x02,0x21,0x67,0x47,0x5b,0x53,0xfd, - 0xdf,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x04,0x1f, - 0x05,0xb6,0x00,0x0f,0x00,0x13,0x00,0x00,0x01,0x21, - 0x11,0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21, - 0x03,0x23,0x01,0x21,0x01,0x11,0x23,0x03,0x04,0x1f, - 0xfe,0x50,0x01,0x97,0xfe,0x69,0x01,0xb0,0xfd,0xed, - 0xfe,0xf4,0x98,0x68,0x01,0xb2,0x02,0x6d,0xfd,0xed, - 0x1c,0xd5,0x05,0x56,0xfd,0xd7,0x5e,0xfd,0x8f,0x5e, - 0x02,0x12,0xfd,0xee,0x05,0xb6,0xfc,0xbf,0x02,0xdf, - 0xfd,0x21,0x00,0x01,0x00,0x6f,0xfe,0x14,0x03,0x29, - 0x05,0xcd,0x00,0x2c,0x00,0x00,0x01,0x22,0x02,0x11, - 0x14,0x15,0x10,0x12,0x33,0x32,0x33,0x32,0x37,0x15, - 0x06,0x23,0x07,0x16,0x15,0x14,0x06,0x23,0x22,0x27, - 0x35,0x16,0x33,0x32,0x36,0x34,0x26,0x27,0x37,0x26, - 0x02,0x11,0x34,0x35,0x10,0x12,0x33,0x32,0x17,0x07, - 0x26,0x02,0x3d,0xa6,0xc2,0xc8,0xa4,0x02,0x03,0x70, - 0x54,0x4e,0x7e,0x2a,0xa0,0x7b,0x6f,0x3d,0x19,0x21, - 0x2d,0x4c,0x4c,0x54,0x52,0x42,0xb5,0xd2,0xf9,0xd7, - 0x85,0x65,0x2d,0x54,0x05,0x6f,0xfe,0xa4,0xfe,0xca, - 0x06,0x05,0xfe,0xdc,0xfe,0x9c,0x29,0x5a,0x2d,0x5f, - 0x27,0x89,0x62,0x67,0x0b,0x4e,0x0b,0x41,0x72,0x3e, - 0x0d,0x92,0x21,0x01,0x8b,0x01,0x35,0x06,0x06,0x01, - 0x5f,0x01,0x8f,0x3e,0x56,0x36,0x00,0x00,0x00,0x02, - 0x00,0xa0,0x00,0x00,0x02,0xb2,0x07,0x73,0x00,0x09, - 0x00,0x15,0x00,0x00,0x13,0x33,0x16,0x16,0x17,0x15, - 0x23,0x26,0x26,0x27,0x01,0x21,0x11,0x21,0x15,0x21, - 0x11,0x21,0x15,0x21,0x11,0x21,0xc7,0x7d,0x1d,0x6a, - 0x38,0x30,0x3f,0xa8,0x25,0x01,0xeb,0xfe,0x50,0x01, - 0x98,0xfe,0x68,0x01,0xb0,0xfd,0xee,0x02,0x12,0x07, - 0x73,0x43,0xaa,0x46,0x15,0x33,0xbf,0x45,0xfd,0xf6, - 0xfd,0xd5,0x5e,0xfd,0x8f,0x5e,0x05,0xb6,0x00,0x02, - 0x00,0xa0,0x00,0x00,0x02,0xb2,0x07,0x73,0x00,0x08, - 0x00,0x14,0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23, - 0x35,0x36,0x37,0x13,0x21,0x11,0x21,0x15,0x21,0x11, - 0x21,0x15,0x21,0x11,0x21,0x02,0x80,0x25,0xa1,0x47, - 0x2f,0x7e,0x41,0xaf,0xfe,0x50,0x01,0x98,0xfe,0x68, - 0x01,0xb0,0xfd,0xee,0x02,0x12,0x07,0x73,0x11,0x42, - 0xba,0x3b,0x15,0xa4,0x8f,0xfd,0xe5,0xfd,0xd5,0x5e, - 0xfd,0x8f,0x5e,0x05,0xb6,0x00,0x00,0x00,0x00,0x02, - 0x00,0xa0,0x00,0x00,0x02,0xb2,0x07,0x73,0x00,0x11, - 0x00,0x1d,0x00,0x00,0x01,0x23,0x26,0x27,0x27,0x06, - 0x07,0x06,0x07,0x23,0x35,0x36,0x37,0x33,0x16,0x17, - 0x16,0x17,0x17,0x21,0x11,0x21,0x15,0x21,0x11,0x21, - 0x15,0x21,0x11,0x21,0x02,0x8c,0x2f,0x2a,0x31,0x61, - 0x13,0x2c,0x51,0x31,0x2b,0x79,0x41,0x5f,0x17,0x37, - 0x3c,0x34,0x26,0xfe,0x50,0x01,0x98,0xfe,0x68,0x01, - 0xb0,0xfd,0xee,0x02,0x12,0x06,0x2b,0x2a,0x3b,0x70, - 0x15,0x33,0x5e,0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f, - 0x45,0xe6,0xfd,0xd5,0x5e,0xfd,0x8f,0x5e,0x05,0xb6, - 0x00,0x00,0x00,0x03,0x00,0xa0,0x00,0x00,0x02,0xb2, - 0x07,0x10,0x00,0x07,0x00,0x0f,0x00,0x1b,0x00,0x00, - 0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x36, - 0x32,0x16,0x14,0x06,0x22,0x26,0x13,0x21,0x11,0x21, - 0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0xca,0x25, - 0x35,0x23,0x23,0x35,0x25,0x01,0x31,0x24,0x35,0x24, - 0x24,0x35,0x24,0xb7,0xfe,0x50,0x01,0x98,0xfe,0x68, - 0x01,0xb0,0xfd,0xee,0x02,0x12,0x06,0xe7,0x29,0x29, - 0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xfe, - 0xc2,0xfd,0xd5,0x5e,0xfd,0x8f,0x5e,0x05,0xb6,0x00, - 0x00,0x00,0x00,0x02,0xff,0xde,0x00,0x00,0x01,0x1a, - 0x07,0x73,0x00,0x09,0x00,0x0d,0x00,0x00,0x03,0x33, - 0x16,0x16,0x17,0x15,0x23,0x26,0x26,0x27,0x01,0x23, - 0x11,0x33,0x22,0x7d,0x1d,0x6a,0x38,0x30,0x3f,0xa8, - 0x25,0x01,0x24,0x62,0x62,0x07,0x73,0x43,0xaa,0x46, - 0x15,0x33,0xbf,0x45,0xf8,0x9e,0x05,0xb6,0x00,0x02, - 0x00,0x9a,0x00,0x00,0x01,0xd6,0x07,0x73,0x00,0x08, - 0x00,0x0c,0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23, - 0x35,0x36,0x37,0x03,0x23,0x11,0x33,0x01,0xd6,0x25, - 0xa1,0x47,0x2f,0x7e,0x41,0x57,0x62,0x62,0x07,0x73, - 0x11,0x42,0xba,0x3b,0x15,0xa4,0x8f,0xf8,0x8d,0x05, - 0xb6,0x00,0x00,0x00,0x00,0x02,0xff,0xe6,0x00,0x00, - 0x01,0xbd,0x07,0x73,0x00,0x11,0x00,0x15,0x00,0x00, - 0x01,0x23,0x26,0x27,0x27,0x06,0x07,0x06,0x07,0x23, - 0x35,0x36,0x37,0x33,0x16,0x17,0x16,0x17,0x03,0x23, - 0x11,0x33,0x01,0xbd,0x2f,0x2a,0x31,0x61,0x13,0x2c, - 0x51,0x31,0x2b,0x7a,0x40,0x5f,0x17,0x37,0x3c,0x34, - 0xbb,0x62,0x62,0x06,0x2b,0x2a,0x3b,0x70,0x15,0x33, - 0x5e,0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f,0x45,0xf9, - 0xc2,0x05,0xb6,0x00,0x00,0x03,0xff,0xfb,0x00,0x00, - 0x01,0xa9,0x07,0x10,0x00,0x07,0x00,0x0f,0x00,0x13, - 0x00,0x00,0x02,0x36,0x32,0x16,0x14,0x06,0x22,0x26, - 0x24,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x03,0x23, - 0x11,0x33,0x05,0x25,0x35,0x23,0x23,0x35,0x25,0x01, - 0x31,0x24,0x35,0x24,0x24,0x35,0x24,0x2a,0x62,0x62, - 0x06,0xe7,0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29, - 0x52,0x2a,0x2b,0xf9,0x6a,0x05,0xb6,0x00,0x00,0x00, - 0x00,0x02,0x00,0x3d,0x00,0x00,0x03,0x75,0x05,0xb6, - 0x00,0x0b,0x00,0x17,0x00,0x00,0x13,0x21,0x32,0x12, - 0x11,0x10,0x21,0x21,0x11,0x23,0x35,0x33,0x13,0x11, - 0x33,0x15,0x23,0x11,0x33,0x20,0x11,0x10,0x02,0x23, - 0xa0,0x01,0x0a,0xe2,0xe9,0xfe,0x2f,0xfe,0xfc,0x63, - 0x63,0x62,0xe1,0xe1,0x9c,0x01,0x70,0xb7,0xb1,0x05, - 0xb6,0xfe,0x93,0xfe,0xa0,0xfd,0x17,0x02,0xbc,0x5b, - 0x02,0x45,0xfd,0xbb,0x5b,0xfd,0x9e,0x02,0x89,0x01, - 0x36,0x01,0x43,0x00,0x00,0x02,0x00,0xa0,0x00,0x00, - 0x03,0xa2,0x07,0x00,0x00,0x15,0x00,0x25,0x00,0x00, - 0x01,0x22,0x26,0x27,0x26,0x22,0x06,0x07,0x23,0x36, - 0x36,0x33,0x32,0x16,0x17,0x16,0x33,0x32,0x37,0x33, - 0x06,0x06,0x13,0x23,0x01,0x23,0x16,0x15,0x11,0x23, - 0x11,0x33,0x01,0x33,0x26,0x35,0x11,0x33,0x02,0xad, - 0x20,0x4a,0x1c,0x4c,0x40,0x2c,0x09,0x4a,0x0c,0x54, - 0x46,0x20,0x49,0x1b,0x49,0x25,0x3b,0x14,0x4a,0x09, - 0x54,0xb2,0x7d,0xfd,0xd7,0x08,0x0c,0x60,0x7f,0x02, - 0x25,0x06,0x08,0x60,0x06,0x2d,0x28,0x17,0x40,0x46, - 0x3b,0x64,0x6f,0x28,0x18,0x3f,0x81,0x65,0x6e,0xf9, - 0xd3,0x05,0x1f,0x89,0x7d,0xfb,0xe7,0x05,0xb6,0xfa, - 0xf0,0xae,0x64,0x03,0xfe,0x00,0x00,0x00,0x00,0x03, - 0x00,0x6f,0xff,0xec,0x03,0xba,0x07,0x73,0x00,0x09, - 0x00,0x13,0x00,0x1b,0x00,0x00,0x01,0x33,0x16,0x16, - 0x17,0x15,0x23,0x26,0x26,0x27,0x13,0x32,0x17,0x16, - 0x10,0x02,0x20,0x02,0x11,0x10,0x00,0x02,0x20,0x02, - 0x10,0x12,0x20,0x12,0x01,0x1b,0x7d,0x1d,0x6a,0x38, - 0x30,0x3f,0xa8,0x25,0xfc,0xcd,0x6a,0x6c,0xd9,0xfe, - 0x63,0xd5,0x02,0xe5,0xa0,0xfe,0xc3,0xa2,0xa3,0x01, - 0x3a,0xa2,0x07,0x73,0x43,0xaa,0x46,0x15,0x33,0xbf, - 0x45,0xfe,0x69,0xc3,0xc2,0xfd,0x2b,0xfe,0x7b,0x01, - 0x89,0x01,0x6a,0x02,0xec,0xfe,0x57,0x01,0x4b,0xfe, - 0xb3,0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00,0x00,0x00, - 0x00,0x03,0x00,0x6f,0xff,0xec,0x03,0xba,0x07,0x73, - 0x00,0x08,0x00,0x12,0x00,0x1a,0x00,0x00,0x01,0x15, - 0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x03,0x32,0x17, - 0x16,0x10,0x02,0x20,0x02,0x11,0x10,0x00,0x02,0x20, - 0x02,0x10,0x12,0x20,0x12,0x03,0x07,0x25,0xa2,0x46, - 0x2f,0x7e,0x41,0x73,0xcd,0x6a,0x6c,0xd9,0xfe,0x63, - 0xd5,0x02,0xe5,0xa0,0xfe,0xc3,0xa2,0xa3,0x01,0x3a, - 0xa2,0x07,0x73,0x11,0x42,0xba,0x3b,0x15,0xa4,0x8f, - 0xfe,0x58,0xc3,0xc2,0xfd,0x2b,0xfe,0x7b,0x01,0x89, - 0x01,0x6a,0x02,0xec,0xfe,0x57,0x01,0x4b,0xfe,0xb3, - 0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00,0x00,0x00,0x03, - 0x00,0x6f,0xff,0xec,0x03,0xba,0x07,0x73,0x00,0x11, - 0x00,0x1b,0x00,0x23,0x00,0x00,0x01,0x23,0x26,0x27, - 0x27,0x06,0x07,0x06,0x07,0x23,0x35,0x36,0x37,0x33, - 0x16,0x17,0x16,0x17,0x07,0x32,0x17,0x16,0x10,0x02, - 0x20,0x02,0x11,0x10,0x00,0x02,0x20,0x02,0x10,0x12, - 0x20,0x12,0x02,0xff,0x2f,0x2a,0x31,0x61,0x13,0x2c, - 0x51,0x31,0x2b,0x7a,0x40,0x5f,0x17,0x37,0x3c,0x34, - 0xe8,0xcd,0x6a,0x6c,0xd9,0xfe,0x63,0xd5,0x02,0xe5, - 0xa0,0xfe,0xc3,0xa2,0xa3,0x01,0x3a,0xa2,0x06,0x2b, - 0x2a,0x3b,0x70,0x15,0x33,0x5e,0x2f,0x13,0xa8,0x8d, - 0x36,0x5b,0x5f,0x45,0x73,0xc3,0xc2,0xfd,0x2b,0xfe, - 0x7b,0x01,0x89,0x01,0x6a,0x02,0xec,0xfe,0x57,0x01, - 0x4b,0xfe,0xb3,0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00, - 0x00,0x03,0x00,0x6f,0xff,0xec,0x03,0xba,0x07,0x00, - 0x00,0x15,0x00,0x1f,0x00,0x27,0x00,0x00,0x01,0x22, - 0x26,0x27,0x26,0x22,0x06,0x07,0x23,0x36,0x36,0x33, - 0x32,0x16,0x17,0x16,0x33,0x32,0x37,0x33,0x06,0x06, - 0x07,0x32,0x17,0x16,0x10,0x02,0x20,0x02,0x11,0x10, - 0x00,0x02,0x20,0x02,0x10,0x12,0x20,0x12,0x02,0x96, - 0x20,0x4a,0x1c,0x4c,0x40,0x2c,0x09,0x4a,0x0c,0x54, - 0x46,0x20,0x49,0x1b,0x49,0x25,0x3b,0x14,0x4a,0x09, - 0x54,0xc2,0xcd,0x6a,0x6c,0xd9,0xfe,0x63,0xd5,0x02, - 0xe5,0xa0,0xfe,0xc3,0xa2,0xa3,0x01,0x3a,0xa2,0x06, - 0x2d,0x28,0x17,0x40,0x46,0x3b,0x64,0x6f,0x28,0x18, - 0x3f,0x81,0x65,0x6e,0x62,0xc3,0xc2,0xfd,0x2b,0xfe, - 0x7b,0x01,0x89,0x01,0x6a,0x02,0xec,0xfe,0x57,0x01, - 0x4b,0xfe,0xb3,0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00, - 0x00,0x04,0x00,0x6f,0xff,0xec,0x03,0xba,0x07,0x10, - 0x00,0x07,0x00,0x0f,0x00,0x19,0x00,0x21,0x00,0x00, - 0x00,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x36, - 0x32,0x16,0x14,0x06,0x22,0x26,0x07,0x32,0x17,0x16, - 0x10,0x02,0x20,0x02,0x11,0x10,0x00,0x02,0x20,0x02, - 0x10,0x12,0x20,0x12,0x01,0x46,0x25,0x35,0x23,0x23, - 0x35,0x25,0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24, - 0x60,0xcd,0x6a,0x6c,0xd9,0xfe,0x63,0xd5,0x02,0xe5, - 0xa0,0xfe,0xc3,0xa2,0xa3,0x01,0x3a,0xa2,0x06,0xe7, - 0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a, - 0x2b,0xcb,0xc3,0xc2,0xfd,0x2b,0xfe,0x7b,0x01,0x89, - 0x01,0x6a,0x02,0xec,0xfe,0x57,0x01,0x4b,0xfe,0xb3, - 0xfd,0x78,0xfe,0xb2,0x01,0x4b,0x00,0x00,0x00,0x01, - 0x00,0x3b,0x01,0x75,0x02,0xf8,0x04,0x31,0x00,0x0b, - 0x00,0x00,0x09,0x02,0x07,0x01,0x01,0x27,0x01,0x01, - 0x37,0x01,0x01,0x02,0xf8,0xfe,0xdb,0x01,0x1f,0x3a, - 0xfe,0xe0,0xfe,0xdd,0x3a,0x01,0x23,0xfe,0xdf,0x3a, - 0x01,0x21,0x01,0x24,0x03,0xf8,0xfe,0xdb,0xfe,0xdf, - 0x39,0x01,0x21,0xfe,0xdb,0x3b,0x01,0x23,0x01,0x21, - 0x39,0xfe,0xdf,0x01,0x25,0x00,0x00,0x03,0x00,0x60, - 0xff,0xa2,0x03,0xd7,0x06,0x06,0x00,0x11,0x00,0x18, - 0x00,0x20,0x00,0x00,0x01,0x16,0x10,0x02,0x23,0x22, - 0x27,0x07,0x27,0x37,0x26,0x11,0x10,0x21,0x32,0x17, - 0x37,0x17,0x05,0x22,0x02,0x10,0x17,0x01,0x26,0x03, - 0x32,0x12,0x11,0x34,0x27,0x01,0x16,0x03,0x5c,0x5e, - 0xd9,0xcd,0x9e,0x66,0x5e,0x52,0x77,0x68,0x01,0xa8, - 0xa3,0x6b,0x60,0x52,0xfe,0x40,0xa0,0xa2,0x3b,0x01, - 0xe4,0x50,0x90,0x9e,0xa2,0x31,0xfe,0x1f,0x4d,0x04, - 0xee,0xbd,0xfd,0x40,0xfe,0x7b,0x72,0xbc,0x25,0xed, - 0xc2,0x01,0x69,0x02,0xec,0x83,0xbe,0x29,0x70,0xfe, - 0xb3,0xfd,0xa4,0x9f,0x03,0xbe,0x8a,0xfa,0xdd,0x01, - 0x4b,0x01,0x48,0xfd,0x9f,0xfc,0x45,0x74,0x00,0x00, - 0x00,0x02,0x00,0x93,0xff,0xec,0x03,0x60,0x07,0x73, - 0x00,0x09,0x00,0x19,0x00,0x00,0x01,0x33,0x16,0x16, - 0x17,0x15,0x23,0x26,0x26,0x27,0x01,0x11,0x10,0x21, - 0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16,0x32,0x36, - 0x35,0x11,0x01,0x15,0x7d,0x1d,0x6a,0x38,0x30,0x3f, - 0xa8,0x25,0x02,0x4b,0xfe,0x9e,0xb1,0xba,0x63,0x89, - 0xfd,0x82,0x07,0x73,0x43,0xaa,0x46,0x15,0x33,0xbf, - 0x45,0xfe,0x54,0xfc,0x25,0xfe,0x11,0xff,0xf0,0x03, - 0xdb,0xfc,0x19,0xbd,0xc8,0xc7,0xc2,0x03,0xe3,0x00, - 0x00,0x00,0x00,0x02,0x00,0x93,0xff,0xec,0x03,0x60, - 0x07,0x73,0x00,0x08,0x00,0x18,0x00,0x00,0x01,0x15, - 0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x13,0x11,0x10, - 0x21,0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16,0x32, - 0x36,0x35,0x11,0x02,0xe3,0x25,0xa2,0x46,0x2f,0x7e, - 0x41,0xfa,0xfe,0x9e,0xb1,0xba,0x63,0x89,0xfd,0x82, - 0x07,0x73,0x11,0x42,0xba,0x3b,0x15,0xa4,0x8f,0xfe, - 0x43,0xfc,0x25,0xfe,0x11,0xff,0xf0,0x03,0xdb,0xfc, - 0x19,0xbd,0xc8,0xc7,0xc2,0x03,0xe3,0x00,0x00,0x00, - 0x00,0x02,0x00,0x93,0xff,0xec,0x03,0x60,0x07,0x73, - 0x00,0x11,0x00,0x21,0x00,0x00,0x01,0x23,0x26,0x27, - 0x27,0x06,0x07,0x06,0x07,0x23,0x35,0x36,0x37,0x33, - 0x16,0x17,0x16,0x17,0x17,0x11,0x10,0x21,0x22,0x26, - 0x35,0x11,0x33,0x11,0x14,0x16,0x32,0x36,0x35,0x11, - 0x02,0xe6,0x2f,0x2a,0x31,0x61,0x13,0x2c,0x51,0x31, - 0x2b,0x79,0x41,0x5f,0x17,0x37,0x3c,0x34,0x7a,0xfe, - 0x9e,0xb1,0xba,0x63,0x89,0xfd,0x82,0x06,0x2b,0x2a, - 0x3b,0x70,0x15,0x33,0x5e,0x2f,0x13,0xa8,0x8d,0x36, - 0x5b,0x5f,0x45,0x88,0xfc,0x25,0xfe,0x11,0xff,0xf0, - 0x03,0xdb,0xfc,0x19,0xbd,0xc8,0xc7,0xc2,0x03,0xe3, - 0x00,0x00,0x00,0x03,0x00,0x93,0xff,0xec,0x03,0x60, - 0x07,0x10,0x00,0x07,0x00,0x0f,0x00,0x1f,0x00,0x00, - 0x00,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x36, - 0x32,0x16,0x14,0x06,0x22,0x26,0x05,0x11,0x10,0x21, - 0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16,0x32,0x36, - 0x35,0x11,0x01,0x24,0x25,0x35,0x23,0x23,0x35,0x25, - 0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24,0x01,0x0b, - 0xfe,0x9e,0xb1,0xba,0x63,0x89,0xfd,0x82,0x06,0xe7, - 0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a, - 0x2b,0xe0,0xfc,0x25,0xfe,0x11,0xff,0xf0,0x03,0xdb, - 0xfc,0x19,0xbd,0xc8,0xc7,0xc2,0x03,0xe3,0x00,0x00, - 0x00,0x02,0x00,0x00,0x00,0x00,0x02,0xae,0x07,0x73, - 0x00,0x08,0x00,0x11,0x00,0x00,0x01,0x15,0x06,0x06, - 0x07,0x23,0x35,0x36,0x37,0x03,0x23,0x11,0x01,0x33, - 0x13,0x13,0x33,0x01,0x02,0x4b,0x25,0xa2,0x46,0x2f, - 0x7e,0x41,0x47,0x62,0xfe,0xdb,0x68,0xf0,0xee,0x68, - 0xfe,0xd9,0x07,0x73,0x11,0x42,0xba,0x3b,0x15,0xa4, - 0x8f,0xf8,0x8d,0x02,0x3b,0x03,0x7b,0xfd,0x0d,0x02, - 0xf3,0xfc,0x85,0x00,0x00,0x00,0x00,0x02,0x00,0xa0, - 0x00,0x00,0x03,0x04,0x05,0xb6,0x00,0x0b,0x00,0x15, - 0x00,0x00,0x01,0x33,0x32,0x16,0x15,0x10,0x21,0x23, - 0x11,0x23,0x11,0x33,0x11,0x11,0x33,0x32,0x37,0x36, - 0x10,0x27,0x26,0x23,0x01,0x02,0x66,0xd5,0xc7,0xfe, - 0x69,0x6b,0x62,0x62,0x62,0xa9,0x4a,0x49,0x48,0x46, - 0xa3,0x04,0xa8,0xc6,0xd2,0xfe,0x3e,0xfe,0xb2,0x05, - 0xb6,0xfe,0x92,0xfd,0x64,0x4d,0x4d,0x01,0x6b,0x4b, - 0x4c,0x00,0x00,0x01,0x00,0x91,0xff,0xec,0x02,0xf0, - 0x06,0x1f,0x00,0x29,0x00,0x00,0x33,0x11,0x34,0x36, - 0x33,0x32,0x11,0x14,0x06,0x15,0x14,0x16,0x17,0x17, - 0x16,0x10,0x07,0x06,0x22,0x27,0x35,0x16,0x16,0x33, - 0x32,0x36,0x35,0x34,0x2e,0x02,0x34,0x36,0x37,0x36, - 0x35,0x34,0x23,0x22,0x06,0x15,0x11,0x91,0x92,0x7c, - 0xf4,0xb6,0x2f,0x40,0x3b,0x69,0x47,0x47,0xe7,0x3e, - 0x2c,0x4f,0x34,0x4e,0x55,0x2d,0xa0,0x41,0x28,0x31, - 0x59,0x93,0x55,0x5b,0x04,0xb4,0xac,0xbf,0xfe,0xeb, - 0x78,0xeb,0x49,0x39,0x5c,0x50,0x46,0x78,0xfe,0xd9, - 0x55,0x53,0x35,0x64,0x1e,0x21,0x74,0x69,0x3c,0x6f, - 0xc1,0x8c,0x76,0x5a,0x3d,0x70,0x76,0xb7,0x87,0x80, - 0xfb,0x42,0x00,0x03,0x00,0x4e,0xff,0xec,0x02,0x83, - 0x06,0x21,0x00,0x09,0x00,0x20,0x00,0x2a,0x00,0x00, - 0x13,0x33,0x16,0x16,0x17,0x15,0x23,0x26,0x26,0x27, - 0x03,0x36,0x20,0x16,0x15,0x11,0x23,0x27,0x23,0x06, - 0x23,0x22,0x27,0x26,0x10,0x36,0x37,0x37,0x35,0x34, - 0x26,0x22,0x07,0x03,0x14,0x16,0x33,0x32,0x36,0x35, - 0x35,0x07,0x04,0xa3,0x7d,0x1d,0x6a,0x38,0x30,0x3f, - 0xa8,0x25,0x09,0x70,0x01,0x04,0x75,0x4e,0x0c,0x04, - 0x4e,0x9e,0x6b,0x40,0x40,0xba,0xa8,0x75,0x4d,0xb4, - 0x61,0x11,0x52,0x4a,0x66,0x71,0x71,0xfe,0xfe,0x06, - 0x21,0x43,0xaa,0x46,0x15,0x33,0xbf,0x45,0xfd,0xfc, - 0x46,0xaa,0xc5,0xfd,0x1d,0x98,0xac,0x54,0x55,0x01, - 0x29,0xb5,0x08,0x06,0x5a,0x99,0x8a,0x3d,0xfd,0x60, - 0x73,0x71,0xca,0xb7,0x71,0x06,0x0d,0x00,0x00,0x03, - 0x00,0x4e,0xff,0xec,0x02,0x83,0x06,0x21,0x00,0x08, - 0x00,0x1f,0x00,0x29,0x00,0x00,0x01,0x15,0x06,0x06, - 0x07,0x23,0x35,0x36,0x37,0x01,0x36,0x20,0x16,0x15, - 0x11,0x23,0x27,0x23,0x06,0x23,0x22,0x27,0x26,0x10, - 0x36,0x37,0x37,0x35,0x34,0x26,0x22,0x07,0x03,0x14, - 0x16,0x33,0x32,0x36,0x35,0x35,0x07,0x04,0x02,0x5e, - 0x25,0xa1,0x47,0x2f,0x7e,0x41,0xfe,0xb9,0x70,0x01, - 0x04,0x75,0x4e,0x0c,0x04,0x4e,0x9e,0x6b,0x40,0x40, - 0xba,0xa8,0x75,0x4d,0xb4,0x61,0x11,0x52,0x4a,0x66, - 0x71,0x71,0xfe,0xfe,0x06,0x21,0x11,0x42,0xba,0x3b, - 0x15,0xa4,0x8f,0xfd,0xeb,0x46,0xaa,0xc5,0xfd,0x1d, - 0x98,0xac,0x54,0x55,0x01,0x29,0xb5,0x08,0x06,0x5a, - 0x99,0x8a,0x3d,0xfd,0x60,0x73,0x71,0xca,0xb7,0x71, - 0x06,0x0d,0x00,0x00,0x00,0x03,0x00,0x4e,0xff,0xec, - 0x02,0x83,0x06,0x23,0x00,0x11,0x00,0x28,0x00,0x32, - 0x00,0x00,0x01,0x23,0x26,0x27,0x27,0x06,0x07,0x06, - 0x07,0x23,0x35,0x36,0x37,0x33,0x16,0x17,0x16,0x17, - 0x05,0x36,0x20,0x16,0x15,0x11,0x23,0x27,0x23,0x06, - 0x23,0x22,0x27,0x26,0x10,0x36,0x37,0x37,0x35,0x34, - 0x26,0x22,0x07,0x03,0x14,0x16,0x33,0x32,0x36,0x35, - 0x35,0x07,0x04,0x02,0x6d,0x2f,0x2a,0x31,0x61,0x13, - 0x2c,0x51,0x31,0x2b,0x7a,0x40,0x5f,0x17,0x37,0x3c, - 0x34,0xfe,0x2d,0x70,0x01,0x04,0x75,0x4e,0x0c,0x04, - 0x4e,0x9e,0x6b,0x40,0x40,0xba,0xa8,0x75,0x4d,0xb4, - 0x61,0x11,0x52,0x4a,0x66,0x71,0x71,0xfe,0xfe,0x04, - 0xdb,0x2a,0x3b,0x70,0x15,0x33,0x5e,0x2f,0x13,0xa8, - 0x8d,0x36,0x5b,0x5f,0x45,0xe2,0x46,0xaa,0xc5,0xfd, - 0x1d,0x98,0xac,0x54,0x55,0x01,0x29,0xb5,0x08,0x06, - 0x5a,0x99,0x8a,0x3d,0xfd,0x60,0x73,0x71,0xca,0xb7, - 0x71,0x06,0x0d,0x00,0x00,0x03,0x00,0x4e,0xff,0xec, - 0x02,0xa5,0x05,0xae,0x00,0x15,0x00,0x2c,0x00,0x36, - 0x00,0x00,0x01,0x22,0x26,0x27,0x26,0x22,0x06,0x07, - 0x23,0x36,0x36,0x33,0x32,0x16,0x17,0x16,0x33,0x32, - 0x37,0x33,0x06,0x06,0x05,0x36,0x20,0x16,0x15,0x11, - 0x23,0x27,0x23,0x06,0x23,0x22,0x27,0x26,0x10,0x36, - 0x37,0x37,0x35,0x34,0x26,0x22,0x07,0x03,0x14,0x16, - 0x33,0x32,0x36,0x35,0x35,0x07,0x04,0x02,0x05,0x20, - 0x4a,0x1c,0x4c,0x40,0x2c,0x09,0x4a,0x0c,0x54,0x46, - 0x20,0x49,0x1b,0x49,0x25,0x3b,0x14,0x4a,0x09,0x54, - 0xfe,0x52,0x70,0x01,0x04,0x75,0x4e,0x0c,0x04,0x4e, - 0x9e,0x6b,0x40,0x40,0xba,0xa8,0x75,0x4d,0xb4,0x61, - 0x11,0x52,0x4a,0x66,0x71,0x71,0xfe,0xfe,0x04,0xdb, - 0x28,0x17,0x40,0x46,0x3b,0x64,0x6f,0x28,0x18,0x3f, - 0x81,0x65,0x6e,0xcf,0x46,0xaa,0xc5,0xfd,0x1d,0x98, - 0xac,0x54,0x55,0x01,0x29,0xb5,0x08,0x06,0x5a,0x99, - 0x8a,0x3d,0xfd,0x60,0x73,0x71,0xca,0xb7,0x71,0x06, - 0x0d,0x00,0x00,0x04,0x00,0x4e,0xff,0xec,0x02,0x83, - 0x05,0xbe,0x00,0x07,0x00,0x0f,0x00,0x26,0x00,0x30, - 0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26, - 0x24,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x01,0x36, - 0x20,0x16,0x15,0x11,0x23,0x27,0x23,0x06,0x23,0x22, - 0x27,0x26,0x10,0x36,0x37,0x37,0x35,0x34,0x26,0x22, - 0x07,0x03,0x14,0x16,0x33,0x32,0x36,0x35,0x35,0x07, - 0x04,0xa5,0x25,0x35,0x23,0x23,0x35,0x25,0x01,0x31, - 0x24,0x35,0x24,0x24,0x35,0x24,0xfe,0xc4,0x70,0x01, - 0x04,0x75,0x4e,0x0c,0x04,0x4e,0x9e,0x6b,0x40,0x40, - 0xba,0xa8,0x75,0x4d,0xb4,0x61,0x11,0x52,0x4a,0x66, - 0x71,0x71,0xfe,0xfe,0x05,0x95,0x29,0x29,0x52,0x2a, - 0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xfe,0xc8,0x46, - 0xaa,0xc5,0xfd,0x1d,0x98,0xac,0x54,0x55,0x01,0x29, - 0xb5,0x08,0x06,0x5a,0x99,0x8a,0x3d,0xfd,0x60,0x73, - 0x71,0xca,0xb7,0x71,0x06,0x0d,0x00,0x00,0x00,0x04, - 0x00,0x4e,0xff,0xec,0x02,0x83,0x06,0x58,0x00,0x07, - 0x00,0x0f,0x00,0x26,0x00,0x30,0x00,0x00,0x12,0x36, - 0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x26,0x22,0x06, - 0x14,0x16,0x32,0x36,0x01,0x36,0x20,0x16,0x15,0x11, - 0x23,0x27,0x23,0x06,0x23,0x22,0x27,0x26,0x10,0x36, - 0x37,0x37,0x35,0x34,0x26,0x22,0x07,0x03,0x14,0x16, - 0x33,0x32,0x36,0x35,0x35,0x07,0x04,0xb9,0x6b,0xb3, - 0x70,0x6c,0xb8,0x6a,0x01,0x40,0x3f,0x70,0x43,0x3e, - 0x71,0x43,0xfe,0xa1,0x70,0x01,0x04,0x75,0x4e,0x0c, - 0x04,0x4e,0x9e,0x6b,0x40,0x40,0xba,0xa8,0x75,0x4d, - 0xb4,0x61,0x11,0x52,0x4a,0x66,0x71,0x71,0xfe,0xfe, - 0x05,0xf3,0x65,0x64,0xab,0x66,0x64,0x8b,0x40,0x41, - 0x69,0x3f,0x40,0xfe,0xa3,0x46,0xaa,0xc5,0xfd,0x1d, - 0x98,0xac,0x54,0x55,0x01,0x29,0xb5,0x08,0x06,0x5a, - 0x99,0x8a,0x3d,0xfd,0x60,0x73,0x71,0xca,0xb7,0x71, - 0x06,0x0d,0x00,0x00,0x00,0x03,0x00,0x4e,0xff,0xec, - 0x04,0x8b,0x04,0x52,0x00,0x22,0x00,0x29,0x00,0x33, - 0x00,0x00,0x01,0x32,0x17,0x36,0x33,0x32,0x16,0x15, - 0x15,0x21,0x12,0x33,0x32,0x37,0x15,0x06,0x22,0x26, - 0x27,0x06,0x06,0x22,0x27,0x26,0x10,0x36,0x37,0x37, - 0x35,0x34,0x26,0x22,0x07,0x27,0x36,0x01,0x35,0x34, - 0x26,0x23,0x22,0x03,0x04,0x06,0x14,0x16,0x33,0x32, - 0x36,0x35,0x35,0x07,0x01,0x85,0xb2,0x33,0x54,0xa6, - 0x88,0x9f,0xfd,0xfe,0x09,0xf9,0x71,0x6c,0x65,0xe3, - 0xa1,0x27,0x2d,0x8d,0xd0,0x40,0x40,0xba,0xa8,0x75, - 0x50,0xb1,0x61,0x29,0x71,0x03,0x22,0x6e,0x5d,0xc2, - 0x15,0xfe,0xa4,0x7d,0x52,0x4a,0x66,0x71,0x71,0x04, - 0x52,0xac,0xac,0xff,0xdc,0x58,0xfe,0x23,0x43,0x58, - 0x41,0x7f,0x72,0x7e,0x73,0x54,0x55,0x01,0x29,0xb5, - 0x08,0x06,0x5a,0x93,0x90,0x3d,0x4b,0x46,0xfe,0x23, - 0x0c,0xad,0xcc,0xfe,0x7b,0x53,0x7e,0xf6,0x71,0xca, - 0xb7,0x71,0x06,0x00,0x00,0x01,0x00,0x60,0xfe,0x14, - 0x02,0x52,0x04,0x52,0x00,0x24,0x00,0x00,0x01,0x22, - 0x10,0x33,0x32,0x37,0x15,0x06,0x06,0x23,0x23,0x07, - 0x16,0x15,0x14,0x06,0x23,0x22,0x27,0x35,0x16,0x33, - 0x32,0x36,0x34,0x26,0x27,0x37,0x26,0x11,0x10,0x12, - 0x33,0x32,0x17,0x07,0x26,0x01,0xb2,0xef,0xef,0x46, - 0x54,0x1f,0x60,0x25,0x03,0x2a,0xa0,0x7b,0x6f,0x3d, - 0x19,0x21,0x2d,0x4c,0x4c,0x54,0x52,0x43,0xfe,0xa8, - 0xa2,0x65,0x43,0x25,0x42,0x03,0xf8,0xfc,0x4a,0x20, - 0x50,0x11,0x15,0x5f,0x27,0x89,0x62,0x67,0x0b,0x4e, - 0x0b,0x41,0x72,0x3e,0x0d,0x94,0x3e,0x01,0xe7,0x01, - 0x17,0x01,0x22,0x25,0x54,0x1f,0x00,0x03,0x00,0x60, - 0xff,0xec,0x02,0xc3,0x06,0x21,0x00,0x09,0x00,0x1b, - 0x00,0x21,0x00,0x00,0x13,0x33,0x16,0x16,0x17,0x15, - 0x23,0x26,0x26,0x27,0x01,0x22,0x27,0x26,0x10,0x12, - 0x33,0x32,0x12,0x15,0x15,0x21,0x12,0x21,0x32,0x37, - 0x15,0x06,0x13,0x34,0x26,0x23,0x22,0x03,0xc5,0x7d, - 0x1d,0x6a,0x38,0x30,0x3f,0xa8,0x25,0x01,0x00,0xac, - 0x5d,0x5c,0xa5,0x9b,0x87,0x9c,0xfd,0xfe,0x04,0x01, - 0x04,0x67,0x70,0x68,0x2c,0x6d,0x5d,0xc4,0x13,0x06, - 0x21,0x43,0xaa,0x46,0x15,0x33,0xbf,0x45,0xf9,0xdc, - 0x92,0x94,0x02,0x1b,0x01,0x25,0xff,0x00,0xdb,0x58, - 0xfe,0x27,0x43,0x5c,0x41,0x02,0x89,0xb3,0xd4,0xfe, - 0x79,0x00,0x00,0x03,0x00,0x60,0xff,0xec,0x02,0xc3, - 0x06,0x21,0x00,0x08,0x00,0x1a,0x00,0x20,0x00,0x00, - 0x01,0x15,0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x03, - 0x22,0x27,0x26,0x10,0x12,0x33,0x32,0x12,0x15,0x15, - 0x21,0x12,0x21,0x32,0x37,0x15,0x06,0x13,0x34,0x26, - 0x23,0x22,0x03,0x02,0x93,0x25,0xa2,0x46,0x2f,0x7e, - 0x41,0x51,0xac,0x5d,0x5c,0xa5,0x9b,0x87,0x9c,0xfd, - 0xfe,0x04,0x01,0x04,0x67,0x70,0x68,0x2c,0x6d,0x5d, - 0xc4,0x13,0x06,0x21,0x11,0x42,0xba,0x3b,0x15,0xa4, - 0x8f,0xf9,0xcb,0x92,0x94,0x02,0x1b,0x01,0x25,0xff, - 0x00,0xdb,0x58,0xfe,0x27,0x43,0x5c,0x41,0x02,0x89, - 0xb3,0xd4,0xfe,0x79,0x00,0x03,0x00,0x60,0xff,0xec, - 0x02,0xc3,0x06,0x21,0x00,0x11,0x00,0x23,0x00,0x29, - 0x00,0x00,0x01,0x23,0x26,0x27,0x27,0x06,0x07,0x06, - 0x07,0x23,0x35,0x36,0x37,0x33,0x16,0x17,0x16,0x17, - 0x03,0x22,0x27,0x26,0x10,0x12,0x33,0x32,0x12,0x15, - 0x15,0x21,0x12,0x21,0x32,0x37,0x15,0x06,0x13,0x34, - 0x26,0x23,0x22,0x03,0x02,0x88,0x2f,0x2a,0x31,0x61, - 0x13,0x2c,0x51,0x31,0x2b,0x79,0x41,0x5f,0x17,0x37, - 0x3c,0x34,0xc3,0xac,0x5d,0x5c,0xa5,0x9b,0x87,0x9c, - 0xfd,0xfe,0x04,0x01,0x04,0x67,0x70,0x68,0x2c,0x6d, - 0x5d,0xc4,0x13,0x04,0xd9,0x2a,0x3b,0x70,0x15,0x33, - 0x5e,0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f,0x45,0xfb, - 0x00,0x92,0x94,0x02,0x1b,0x01,0x25,0xff,0x00,0xdb, - 0x58,0xfe,0x27,0x43,0x5c,0x41,0x02,0x89,0xb3,0xd4, - 0xfe,0x79,0x00,0x00,0x00,0x04,0x00,0x60,0xff,0xec, - 0x02,0xc3,0x05,0xbe,0x00,0x07,0x00,0x0f,0x00,0x21, - 0x00,0x27,0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06, - 0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06,0x22,0x26, - 0x03,0x22,0x27,0x26,0x10,0x12,0x33,0x32,0x12,0x15, - 0x15,0x21,0x12,0x21,0x32,0x37,0x15,0x06,0x13,0x34, - 0x26,0x23,0x22,0x03,0xc3,0x25,0x35,0x23,0x23,0x35, - 0x25,0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24,0x2f, - 0xac,0x5d,0x5c,0xa5,0x9b,0x87,0x9c,0xfd,0xfe,0x04, - 0x01,0x04,0x67,0x70,0x68,0x2c,0x6d,0x5d,0xc4,0x13, - 0x05,0x95,0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29, - 0x52,0x2a,0x2b,0xfa,0xa8,0x92,0x94,0x02,0x1b,0x01, - 0x25,0xff,0x00,0xdb,0x58,0xfe,0x27,0x43,0x5c,0x41, - 0x02,0x89,0xb3,0xd4,0xfe,0x79,0x00,0x02,0xff,0xe0, - 0x00,0x00,0x01,0x1c,0x06,0x21,0x00,0x09,0x00,0x0d, - 0x00,0x00,0x03,0x33,0x16,0x16,0x17,0x15,0x23,0x26, - 0x26,0x27,0x01,0x23,0x11,0x33,0x20,0x7d,0x1d,0x6a, - 0x38,0x30,0x3f,0xa8,0x25,0x01,0x10,0x5f,0x5f,0x06, - 0x21,0x43,0xaa,0x46,0x15,0x33,0xbf,0x45,0xf9,0xf0, - 0x04,0x3d,0x00,0x02,0x00,0x71,0x00,0x00,0x01,0xad, - 0x06,0x21,0x00,0x08,0x00,0x0c,0x00,0x00,0x01,0x15, - 0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x03,0x23,0x11, - 0x33,0x01,0xad,0x25,0xa2,0x46,0x2f,0x7e,0x41,0x40, - 0x5f,0x5f,0x06,0x21,0x11,0x42,0xba,0x3b,0x15,0xa4, - 0x8f,0xf9,0xdf,0x04,0x3d,0x00,0x00,0x00,0x00,0x02, - 0xff,0xd6,0x00,0x00,0x01,0xad,0x06,0x21,0x00,0x11, - 0x00,0x15,0x00,0x00,0x01,0x23,0x26,0x27,0x27,0x06, - 0x07,0x06,0x07,0x23,0x35,0x36,0x37,0x33,0x16,0x17, - 0x16,0x17,0x03,0x23,0x11,0x33,0x01,0xad,0x2f,0x2a, - 0x31,0x61,0x13,0x2c,0x51,0x31,0x2b,0x7a,0x40,0x5f, - 0x17,0x37,0x3c,0x34,0xbd,0x5f,0x5f,0x04,0xd9,0x2a, - 0x3b,0x70,0x15,0x33,0x5e,0x2f,0x13,0xa8,0x8d,0x36, - 0x5b,0x5f,0x45,0xfb,0x14,0x04,0x3d,0x00,0x00,0x03, - 0xff,0xec,0x00,0x00,0x01,0x9a,0x05,0xbe,0x00,0x07, - 0x00,0x0f,0x00,0x13,0x00,0x00,0x02,0x36,0x32,0x16, - 0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06, - 0x22,0x26,0x03,0x23,0x11,0x33,0x14,0x25,0x35,0x23, - 0x23,0x35,0x25,0x01,0x31,0x24,0x35,0x24,0x24,0x35, - 0x24,0x2d,0x5f,0x5f,0x05,0x95,0x29,0x29,0x52,0x2a, - 0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xfa,0xbc,0x04, - 0x3d,0x00,0x00,0x00,0x00,0x02,0x00,0x5e,0xff,0xec, - 0x02,0xfa,0x06,0x14,0x00,0x17,0x00,0x21,0x00,0x00, - 0x01,0x10,0x21,0x22,0x02,0x10,0x36,0x20,0x17,0x33, - 0x02,0x27,0x07,0x27,0x37,0x26,0x27,0x37,0x16,0x17, - 0x37,0x17,0x07,0x00,0x05,0x22,0x06,0x10,0x16,0x32, - 0x36,0x35,0x34,0x26,0x02,0xfa,0xfe,0xae,0x94,0xb6, - 0xa1,0x01,0x31,0x49,0x08,0x34,0xba,0xae,0x27,0xa0, - 0x36,0x3a,0x2f,0x4b,0x42,0xbc,0x27,0xae,0x01,0x1b, - 0xfe,0xb6,0x76,0x7c,0x81,0xe9,0x72,0x82,0x02,0x02, - 0xfd,0xea,0x01,0x0f,0x01,0xc4,0xfb,0x7b,0x01,0x26, - 0xd8,0x66,0x42,0x5e,0x33,0x2d,0x3d,0x2f,0x41,0x6e, - 0x41,0x67,0xfe,0xbb,0xc5,0xcd,0xfe,0x84,0xd5,0xcd, - 0xd4,0xa6,0xd7,0x00,0x00,0x02,0x00,0x91,0x00,0x00, - 0x02,0xd9,0x05,0xae,0x00,0x15,0x00,0x29,0x00,0x00, - 0x01,0x22,0x26,0x27,0x26,0x22,0x06,0x07,0x23,0x36, - 0x36,0x33,0x32,0x16,0x17,0x16,0x33,0x32,0x37,0x33, - 0x06,0x06,0x07,0x32,0x16,0x15,0x11,0x23,0x11,0x10, - 0x23,0x22,0x06,0x15,0x11,0x23,0x11,0x33,0x17,0x33, - 0x36,0x36,0x02,0x36,0x20,0x4a,0x1c,0x4c,0x40,0x2c, - 0x09,0x4a,0x0c,0x54,0x46,0x20,0x49,0x1b,0x49,0x25, - 0x3b,0x14,0x4a,0x09,0x54,0x9c,0x80,0x7c,0x5e,0xa0, - 0x7a,0x71,0x5f,0x50,0x08,0x09,0x21,0x80,0x04,0xdb, - 0x28,0x17,0x40,0x46,0x3b,0x64,0x6f,0x28,0x18,0x3f, - 0x81,0x65,0x6e,0x89,0xab,0xb9,0xfd,0x12,0x02,0xec, - 0x01,0x0e,0xca,0xdc,0xfd,0xac,0x04,0x3d,0x97,0x50, - 0x5c,0x00,0x00,0x03,0x00,0x5e,0xff,0xec,0x02,0xf4, - 0x06,0x21,0x00,0x09,0x00,0x12,0x00,0x1a,0x00,0x00, - 0x13,0x33,0x16,0x16,0x17,0x15,0x23,0x26,0x26,0x27, - 0x13,0x32,0x12,0x10,0x02,0x20,0x02,0x11,0x10,0x05, - 0x22,0x06,0x15,0x10,0x33,0x32,0x10,0xce,0x7d,0x1d, - 0x6a,0x38,0x30,0x3f,0xa8,0x25,0xdc,0x9c,0xae,0xad, - 0xfe,0xc0,0xa9,0x01,0x4a,0x78,0x6f,0xe7,0xe9,0x06, - 0x21,0x43,0xaa,0x46,0x15,0x33,0xbf,0x45,0xfe,0x42, - 0xfe,0xda,0xfd,0xe3,0xfe,0xdd,0x01,0x23,0x01,0x12, - 0x02,0x31,0x5a,0xe9,0xee,0xfe,0x25,0x03,0xb2,0x00, - 0x00,0x00,0x00,0x03,0x00,0x5e,0xff,0xec,0x02,0xf4, - 0x06,0x21,0x00,0x08,0x00,0x11,0x00,0x19,0x00,0x00, - 0x01,0x15,0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x03, - 0x32,0x12,0x10,0x02,0x20,0x02,0x11,0x10,0x05,0x22, - 0x06,0x15,0x10,0x33,0x32,0x10,0x02,0x91,0x25,0xa2, - 0x46,0x2f,0x7e,0x41,0x6a,0x9c,0xae,0xad,0xfe,0xc0, - 0xa9,0x01,0x4a,0x78,0x6f,0xe7,0xe9,0x06,0x21,0x11, - 0x42,0xba,0x3b,0x15,0xa4,0x8f,0xfe,0x31,0xfe,0xda, - 0xfd,0xe3,0xfe,0xdd,0x01,0x23,0x01,0x12,0x02,0x31, - 0x5a,0xe9,0xee,0xfe,0x25,0x03,0xb2,0x00,0x00,0x03, - 0x00,0x5e,0xff,0xec,0x02,0xf4,0x06,0x21,0x00,0x11, - 0x00,0x1a,0x00,0x22,0x00,0x00,0x01,0x23,0x26,0x27, - 0x27,0x06,0x07,0x06,0x07,0x23,0x35,0x36,0x37,0x33, - 0x16,0x17,0x16,0x17,0x07,0x32,0x12,0x10,0x02,0x20, - 0x02,0x11,0x10,0x05,0x22,0x06,0x15,0x10,0x33,0x32, - 0x10,0x02,0x96,0x2f,0x2a,0x31,0x61,0x13,0x2c,0x51, - 0x31,0x2b,0x79,0x41,0x5f,0x17,0x37,0x3c,0x34,0xec, - 0x9c,0xae,0xad,0xfe,0xc0,0xa9,0x01,0x4a,0x78,0x6f, - 0xe7,0xe9,0x04,0xd9,0x2a,0x3b,0x70,0x15,0x33,0x5e, - 0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f,0x45,0x9a,0xfe, - 0xda,0xfd,0xe3,0xfe,0xdd,0x01,0x23,0x01,0x12,0x02, - 0x31,0x5a,0xe9,0xee,0xfe,0x25,0x03,0xb2,0x00,0x03, - 0x00,0x5e,0xff,0xec,0x02,0xf4,0x05,0xae,0x00,0x15, - 0x00,0x1e,0x00,0x26,0x00,0x00,0x01,0x22,0x26,0x27, - 0x26,0x22,0x06,0x07,0x23,0x36,0x36,0x33,0x32,0x16, - 0x17,0x16,0x33,0x32,0x37,0x33,0x06,0x06,0x07,0x32, - 0x12,0x10,0x02,0x20,0x02,0x11,0x10,0x05,0x22,0x06, - 0x15,0x10,0x33,0x32,0x10,0x02,0x21,0x20,0x4a,0x1c, - 0x4c,0x40,0x2c,0x09,0x4a,0x0c,0x54,0x46,0x20,0x49, - 0x1b,0x49,0x25,0x3b,0x14,0x4a,0x09,0x54,0xba,0x9c, - 0xae,0xad,0xfe,0xc0,0xa9,0x01,0x4a,0x78,0x6f,0xe7, - 0xe9,0x04,0xdb,0x28,0x17,0x40,0x46,0x3b,0x64,0x6f, - 0x28,0x18,0x3f,0x81,0x65,0x6e,0x89,0xfe,0xda,0xfd, - 0xe3,0xfe,0xdd,0x01,0x23,0x01,0x12,0x02,0x31,0x5a, - 0xe9,0xee,0xfe,0x25,0x03,0xb2,0x00,0x04,0x00,0x5e, - 0xff,0xec,0x02,0xf4,0x05,0xbe,0x00,0x07,0x00,0x0f, - 0x00,0x18,0x00,0x20,0x00,0x00,0x12,0x36,0x32,0x16, - 0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06, - 0x22,0x26,0x07,0x32,0x12,0x10,0x02,0x20,0x02,0x11, - 0x10,0x05,0x22,0x06,0x15,0x10,0x33,0x32,0x10,0xd2, - 0x25,0x35,0x23,0x23,0x35,0x25,0x01,0x31,0x24,0x35, - 0x24,0x24,0x35,0x24,0x59,0x9c,0xae,0xad,0xfe,0xc0, - 0xa9,0x01,0x4a,0x78,0x6f,0xe7,0xe9,0x05,0x95,0x29, - 0x29,0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b, - 0xf2,0xfe,0xda,0xfd,0xe3,0xfe,0xdd,0x01,0x23,0x01, - 0x12,0x02,0x31,0x5a,0xe9,0xee,0xfe,0x25,0x03,0xb2, - 0x00,0x00,0x00,0x03,0x00,0x3b,0x01,0x0a,0x02,0xf8, - 0x04,0x9a,0x00,0x06,0x00,0x0a,0x00,0x11,0x00,0x00, - 0x01,0x22,0x34,0x32,0x15,0x14,0x06,0x01,0x21,0x35, - 0x21,0x01,0x22,0x34,0x32,0x15,0x14,0x06,0x01,0x9a, - 0x4e,0x9b,0x2a,0x01,0x3b,0xfd,0x43,0x02,0xbd,0xfe, - 0xa2,0x4e,0x9b,0x2a,0x03,0xc5,0xd5,0x6b,0x36,0x34, - 0xfe,0xe5,0x52,0xfe,0x0e,0xd5,0x6a,0x36,0x35,0x00, - 0x00,0x03,0x00,0x44,0xff,0x71,0x03,0x0e,0x04,0xa6, - 0x00,0x11,0x00,0x18,0x00,0x1f,0x00,0x00,0x01,0x16, - 0x10,0x02,0x23,0x22,0x27,0x07,0x27,0x37,0x26,0x11, - 0x10,0x21,0x32,0x17,0x37,0x17,0x05,0x22,0x06,0x10, - 0x17,0x01,0x26,0x03,0x32,0x11,0x34,0x27,0x01,0x16, - 0x02,0xa8,0x4c,0xad,0xa1,0x72,0x46,0x5f,0x4b,0x70, - 0x56,0x01,0x4c,0x75,0x50,0x54,0x4b,0xfe,0x9a,0x78, - 0x6f,0x26,0x01,0x5b,0x38,0x62,0xe9,0x20,0xfe,0xaa, - 0x33,0x03,0xac,0x94,0xfd,0xf7,0xfe,0xdd,0x45,0xc0, - 0x29,0xe3,0x92,0x01,0x12,0x02,0x31,0x56,0xaa,0x29, - 0x85,0xe9,0xfe,0x4a,0x72,0x02,0xbb,0x56,0xfc,0x4e, - 0x01,0xdb,0xb3,0x69,0xfd,0x4c,0x43,0x00,0x00,0x00, - 0x00,0x02,0x00,0x8d,0xff,0xec,0x02,0xd5,0x06,0x21, - 0x00,0x09,0x00,0x1f,0x00,0x00,0x13,0x33,0x16,0x16, - 0x17,0x15,0x23,0x26,0x26,0x27,0x01,0x23,0x27,0x23, - 0x06,0x06,0x23,0x22,0x27,0x26,0x35,0x11,0x33,0x11, - 0x14,0x16,0x33,0x32,0x36,0x35,0x11,0x33,0xc3,0x7d, - 0x1d,0x6a,0x38,0x30,0x3f,0xa8,0x25,0x02,0x12,0x50, - 0x0c,0x08,0x23,0x7b,0x4a,0x83,0x3d,0x3c,0x5f,0x4c, - 0x51,0x7c,0x72,0x5e,0x06,0x21,0x43,0xaa,0x46,0x15, - 0x33,0xbf,0x45,0xf9,0xf0,0x98,0x52,0x5a,0x5d,0x5d, - 0xd3,0x02,0xc4,0xfd,0x3c,0xa0,0x95,0xc8,0xdd,0x02, - 0x54,0x00,0x00,0x00,0x00,0x02,0x00,0x8d,0xff,0xec, - 0x02,0xd5,0x06,0x21,0x00,0x08,0x00,0x1e,0x00,0x00, - 0x01,0x15,0x06,0x06,0x07,0x23,0x35,0x36,0x37,0x13, - 0x23,0x27,0x23,0x06,0x06,0x23,0x22,0x27,0x26,0x35, - 0x11,0x33,0x11,0x14,0x16,0x33,0x32,0x36,0x35,0x11, - 0x33,0x02,0x9b,0x25,0xa2,0x46,0x2f,0x7e,0x41,0xb7, - 0x50,0x0c,0x08,0x23,0x7b,0x4a,0x83,0x3d,0x3c,0x5f, - 0x4c,0x51,0x7c,0x72,0x5e,0x06,0x21,0x11,0x42,0xba, - 0x3b,0x15,0xa4,0x8f,0xf9,0xdf,0x98,0x52,0x5a,0x5d, - 0x5d,0xd3,0x02,0xc4,0xfd,0x3c,0xa0,0x95,0xc8,0xdd, - 0x02,0x54,0x00,0x00,0x00,0x02,0x00,0x8d,0xff,0xec, - 0x02,0xd5,0x06,0x21,0x00,0x11,0x00,0x27,0x00,0x00, - 0x01,0x23,0x26,0x27,0x27,0x06,0x07,0x06,0x07,0x23, - 0x35,0x36,0x37,0x33,0x16,0x17,0x16,0x17,0x13,0x23, - 0x27,0x23,0x06,0x06,0x23,0x22,0x27,0x26,0x35,0x11, - 0x33,0x11,0x14,0x16,0x33,0x32,0x36,0x35,0x11,0x33, - 0x02,0x96,0x2f,0x2a,0x31,0x61,0x13,0x2c,0x51,0x31, - 0x2b,0x79,0x41,0x5f,0x17,0x37,0x3c,0x34,0x3f,0x50, - 0x0c,0x08,0x23,0x7b,0x4a,0x83,0x3d,0x3c,0x5f,0x4c, - 0x51,0x7c,0x72,0x5e,0x04,0xd9,0x2a,0x3b,0x70,0x15, - 0x33,0x5e,0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f,0x45, - 0xfb,0x14,0x98,0x52,0x5a,0x5d,0x5d,0xd3,0x02,0xc4, - 0xfd,0x3c,0xa0,0x95,0xc8,0xdd,0x02,0x54,0x00,0x03, - 0x00,0x8d,0xff,0xec,0x02,0xd5,0x05,0xbe,0x00,0x07, - 0x00,0x0f,0x00,0x25,0x00,0x00,0x12,0x36,0x32,0x16, - 0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06, - 0x22,0x26,0x13,0x23,0x27,0x23,0x06,0x06,0x23,0x22, - 0x27,0x26,0x35,0x11,0x33,0x11,0x14,0x16,0x33,0x32, - 0x36,0x35,0x11,0x33,0xda,0x25,0x35,0x23,0x23,0x35, - 0x25,0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24,0xca, - 0x50,0x0c,0x08,0x23,0x7b,0x4a,0x83,0x3d,0x3c,0x5f, - 0x4c,0x51,0x7c,0x72,0x5e,0x05,0x95,0x29,0x29,0x52, - 0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xfa,0xbc, - 0x98,0x52,0x5a,0x5d,0x5d,0xd3,0x02,0xc4,0xfd,0x3c, - 0xa0,0x95,0xc8,0xdd,0x02,0x54,0x00,0x00,0x00,0x02, - 0xff,0xfe,0xfe,0x14,0x02,0x83,0x06,0x21,0x00,0x08, - 0x00,0x1f,0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23, - 0x35,0x36,0x37,0x01,0x22,0x27,0x35,0x16,0x33,0x32, - 0x36,0x37,0x37,0x01,0x33,0x13,0x16,0x17,0x33,0x36, - 0x37,0x13,0x33,0x01,0x06,0x06,0x02,0x39,0x25,0xa2, - 0x46,0x2f,0x7e,0x41,0xfe,0x98,0x25,0x31,0x2a,0x24, - 0x3b,0x46,0x1c,0x30,0xfe,0xf1,0x60,0xa4,0x1e,0x1a, - 0x08,0x15,0x20,0xa0,0x60,0xfe,0xc3,0x24,0x72,0x06, - 0x21,0x11,0x42,0xba,0x3b,0x15,0xa4,0x8f,0xf7,0xf3, - 0x11,0x56,0x0e,0x65,0x74,0xbc,0x04,0x3b,0xfd,0x5b, - 0x81,0x92,0x8f,0x86,0x02,0xa3,0xfa,0xf6,0x93,0x8c, - 0x00,0x02,0x00,0x91,0xfe,0x14,0x03,0x1f,0x06,0x14, - 0x00,0x13,0x00,0x1f,0x00,0x00,0x01,0x20,0x11,0x10, - 0x02,0x23,0x22,0x26,0x27,0x23,0x17,0x11,0x23,0x11, - 0x33,0x11,0x07,0x33,0x36,0x36,0x03,0x15,0x14,0x16, - 0x33,0x32,0x37,0x36,0x10,0x26,0x22,0x06,0x01,0xe1, - 0x01,0x3e,0x9d,0x94,0x53,0x89,0x22,0x07,0x0b,0x63, - 0x5f,0x04,0x04,0x27,0x7f,0xa6,0x76,0x79,0x6e,0x36, - 0x37,0x69,0xee,0x73,0x04,0x52,0xfd,0xcf,0xfe,0xf0, - 0xfe,0xdb,0x5c,0x4e,0x77,0xfd,0xf5,0x08,0x00,0xfe, - 0x1c,0x88,0x51,0x59,0xfd,0xf4,0x1f,0xf9,0xec,0x71, - 0x6f,0x01,0xf6,0xe0,0xd3,0x00,0x00,0x00,0x00,0x03, - 0xff,0xfe,0xfe,0x14,0x02,0x83,0x05,0xbe,0x00,0x07, - 0x00,0x0f,0x00,0x26,0x00,0x00,0x12,0x36,0x32,0x16, - 0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16,0x14,0x06, - 0x22,0x26,0x01,0x22,0x27,0x35,0x16,0x33,0x32,0x36, - 0x37,0x37,0x01,0x33,0x13,0x16,0x17,0x33,0x36,0x37, - 0x13,0x33,0x01,0x06,0x06,0x74,0x25,0x35,0x23,0x23, - 0x35,0x25,0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24, - 0xfe,0xaf,0x25,0x31,0x2a,0x24,0x3b,0x46,0x1c,0x30, - 0xfe,0xf1,0x60,0xa4,0x1e,0x1a,0x08,0x15,0x20,0xa0, - 0x60,0xfe,0xc3,0x24,0x72,0x05,0x95,0x29,0x29,0x52, - 0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a,0x2b,0xf8,0xd0, - 0x11,0x56,0x0e,0x65,0x74,0xbc,0x04,0x3b,0xfd,0x5b, - 0x81,0x92,0x8f,0x86,0x02,0xa3,0xfa,0xf6,0x93,0x8c, - 0x00,0x01,0x00,0x91,0x00,0x00,0x00,0xf0,0x04,0x3d, - 0x00,0x03,0x00,0x00,0x33,0x23,0x11,0x33,0xf0,0x5f, - 0x5f,0x04,0x3d,0x00,0x00,0x02,0x00,0x6f,0xff,0xfa, - 0x04,0x6f,0x05,0xbc,0x00,0x11,0x00,0x19,0x00,0x00, - 0x01,0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x15, - 0x21,0x07,0x20,0x11,0x10,0x12,0x33,0x17,0x03,0x11, - 0x22,0x07,0x06,0x10,0x17,0x16,0x04,0x6f,0xfe,0x4f, - 0x01,0x98,0xfe,0x68,0x01,0xb1,0xfe,0x58,0x7d,0xfe, - 0x25,0xf6,0xed,0x73,0x69,0xc9,0x5f,0x5d,0x5c,0x5d, - 0x05,0xb6,0x5e,0xfd,0xd5,0x5e,0xfd,0x8f,0x5e,0x06, - 0x02,0xe5,0x01,0x6a,0x01,0x73,0x06,0xfa,0xa2,0x05, - 0x06,0x96,0x96,0xfd,0x58,0x9a,0x98,0x00,0x00,0x00, - 0x00,0x03,0x00,0x5e,0xff,0xec,0x04,0xf2,0x04,0x52, - 0x00,0x18,0x00,0x1f,0x00,0x28,0x00,0x00,0x05,0x22, - 0x27,0x06,0x23,0x22,0x02,0x11,0x10,0x21,0x32,0x17, - 0x36,0x33,0x32,0x12,0x15,0x15,0x21,0x12,0x21,0x32, - 0x37,0x15,0x06,0x13,0x35,0x34,0x26,0x23,0x22,0x03, - 0x07,0x35,0x10,0x23,0x22,0x06,0x15,0x10,0x20,0x03, - 0xf4,0xda,0x59,0x4f,0xcc,0x9f,0xa9,0x01,0x4c,0xc1, - 0x53,0x50,0xc1,0x87,0x9c,0xfd,0xfe,0x04,0x01,0x04, - 0x67,0x70,0x68,0x2c,0x6d,0x5d,0xc3,0x14,0x63,0xe7, - 0x78,0x6f,0x01,0xce,0x14,0xe7,0xe7,0x01,0x23,0x01, - 0x12,0x02,0x31,0xe3,0xe3,0xff,0x00,0xdb,0x58,0xfe, - 0x23,0x43,0x58,0x41,0x02,0x89,0x0c,0xab,0xce,0xfe, - 0x7b,0x6d,0x19,0x01,0xd7,0xe9,0xee,0xfe,0x21,0x00, - 0x00,0x00,0x00,0x02,0x00,0x56,0xff,0xec,0x02,0xd1, - 0x07,0x73,0x00,0x0f,0x00,0x35,0x00,0x00,0x01,0x15, - 0x06,0x06,0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x16, - 0x17,0x37,0x36,0x37,0x01,0x32,0x36,0x34,0x26,0x27, - 0x2e,0x02,0x35,0x34,0x35,0x34,0x36,0x33,0x32,0x33, - 0x32,0x17,0x07,0x26,0x22,0x06,0x14,0x16,0x17,0x16, - 0x16,0x15,0x14,0x07,0x06,0x23,0x22,0x27,0x35,0x16, - 0x16,0x02,0xa3,0x38,0x6e,0x18,0x5f,0x46,0x74,0x2b, - 0x31,0x7d,0x13,0x31,0x6f,0x1c,0xfe,0xfb,0x70,0x90, - 0x67,0x8f,0x72,0x6f,0x36,0xc3,0x8c,0x02,0x03,0x9a, - 0x6e,0x26,0x6f,0xdf,0x87,0x63,0x8e,0x94,0x89,0x64, - 0x65,0x99,0xaf,0x6a,0x38,0x98,0x07,0x73,0x13,0x48, - 0xb7,0x36,0x95,0xa0,0x13,0x2f,0x91,0x15,0x37,0x85, - 0x19,0xf8,0xd7,0xaa,0xfc,0x8f,0x46,0x3a,0x6a,0x8d, - 0x64,0x06,0x06,0x97,0xce,0x3c,0x5e,0x39,0x93,0xf5, - 0x86,0x4a,0x48,0xc1,0x8a,0xb4,0x70,0x6f,0x33,0x6a, - 0x1e,0x21,0x00,0x02,0x00,0x4a,0xff,0xec,0x02,0x3d, - 0x06,0x21,0x00,0x0f,0x00,0x2f,0x00,0x00,0x01,0x15, - 0x06,0x06,0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x16, - 0x17,0x37,0x36,0x37,0x03,0x32,0x36,0x35,0x34,0x2e, - 0x03,0x35,0x34,0x36,0x32,0x17,0x07,0x26,0x22,0x06, - 0x14,0x17,0x16,0x17,0x16,0x17,0x16,0x10,0x06,0x20, - 0x27,0x35,0x16,0x16,0x02,0x3c,0x38,0x6e,0x18,0x5f, - 0x47,0x73,0x2b,0x31,0x7d,0x13,0x31,0x6f,0x1c,0xe4, - 0x54,0x60,0x47,0xd1,0x4f,0x2c,0x9f,0xfb,0x59,0x31, - 0x52,0xb0,0x64,0x22,0x22,0x6e,0x6b,0x28,0x50,0x91, - 0xfe,0xf1,0x51,0x25,0x7a,0x06,0x21,0x13,0x48,0xb7, - 0x36,0x95,0xa0,0x13,0x2f,0x91,0x15,0x37,0x85,0x19, - 0xfa,0x25,0x6d,0x5d,0x47,0x66,0x85,0x52,0x67,0x49, - 0x75,0x99,0x3e,0x53,0x37,0x63,0x99,0x31,0x30,0x45, - 0x46,0x2a,0x56,0xfe,0xf6,0x9a,0x3d,0x6f,0x25,0x2d, - 0x00,0x03,0x00,0x00,0x00,0x00,0x02,0xae,0x07,0x10, - 0x00,0x07,0x00,0x0f,0x00,0x18,0x00,0x00,0x12,0x36, - 0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x36,0x32,0x16, - 0x14,0x06,0x22,0x26,0x03,0x23,0x11,0x01,0x33,0x13, - 0x13,0x33,0x01,0x82,0x25,0x35,0x23,0x23,0x35,0x25, - 0x01,0x31,0x24,0x35,0x24,0x24,0x35,0x24,0x2c,0x62, - 0xfe,0xdb,0x68,0xf0,0xee,0x68,0xfe,0xd9,0x06,0xe7, - 0x29,0x29,0x52,0x2a,0x2a,0x52,0x29,0x29,0x52,0x2a, - 0x2b,0xf9,0x6a,0x02,0x3b,0x03,0x7b,0xfd,0x0d,0x02, - 0xf3,0xfc,0x85,0x00,0x00,0x00,0x00,0x02,0x00,0x39, - 0x00,0x00,0x02,0x5a,0x07,0x73,0x00,0x0f,0x00,0x19, - 0x00,0x00,0x01,0x15,0x06,0x06,0x07,0x23,0x26,0x27, - 0x35,0x33,0x16,0x16,0x17,0x37,0x36,0x37,0x13,0x15, - 0x21,0x35,0x01,0x21,0x35,0x21,0x15,0x01,0x02,0x32, - 0x38,0x6e,0x18,0x5f,0x47,0x73,0x2b,0x31,0x7d,0x13, - 0x31,0x6f,0x1c,0x57,0xfd,0xdf,0x01,0xa8,0xfe,0x5e, - 0x02,0x0f,0xfe,0x52,0x07,0x73,0x13,0x48,0xb7,0x36, - 0x95,0xa0,0x13,0x2f,0x91,0x15,0x37,0x85,0x19,0xf8, - 0xeb,0x5e,0x58,0x04,0xfe,0x60,0x5a,0xfb,0x02,0x00, - 0x00,0x00,0x00,0x02,0x00,0x32,0x00,0x00,0x02,0x09, - 0x06,0x21,0x00,0x0f,0x00,0x19,0x00,0x00,0x01,0x15, - 0x06,0x06,0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x16, - 0x17,0x37,0x36,0x37,0x13,0x15,0x21,0x35,0x01,0x21, - 0x35,0x21,0x15,0x01,0x02,0x09,0x38,0x6e,0x18,0x5f, - 0x46,0x74,0x2b,0x31,0x7d,0x13,0x31,0x6f,0x1c,0x14, - 0xfe,0x4d,0x01,0x40,0xfe,0xd5,0x01,0x8f,0xfe,0xc1, - 0x06,0x21,0x13,0x48,0xb7,0x36,0x95,0xa0,0x13,0x2f, - 0x91,0x15,0x37,0x85,0x19,0xfa,0x33,0x54,0x4c,0x03, - 0x9d,0x54,0x4d,0xfc,0x64,0x00,0x00,0x00,0x00,0x01, - 0x00,0x50,0xfe,0x14,0x02,0xdb,0x05,0xcb,0x00,0x1f, - 0x00,0x00,0x01,0x34,0x36,0x33,0x32,0x17,0x07,0x26, - 0x23,0x06,0x06,0x07,0x15,0x33,0x15,0x23,0x11,0x14, - 0x06,0x23,0x22,0x27,0x35,0x16,0x33,0x32,0x36,0x35, - 0x11,0x23,0x35,0x37,0x01,0x62,0x67,0x74,0x4b,0x53, - 0x29,0x3f,0x31,0x49,0x35,0x03,0xbe,0xbe,0x6f,0x83, - 0x45,0x3a,0x48,0x31,0x52,0x47,0xa1,0xa1,0x04,0x66, - 0xb7,0xae,0x27,0x56,0x21,0x01,0x7a,0x9e,0xb4,0x54, - 0xfc,0x43,0xc6,0xb7,0x0d,0x5e,0x12,0x7c,0x84,0x03, - 0xe1,0x35,0x27,0x00,0x00,0x01,0x01,0x56,0x04,0xd9, - 0x03,0x2d,0x06,0x21,0x00,0x11,0x00,0x00,0x01,0x23, - 0x26,0x27,0x27,0x06,0x07,0x06,0x07,0x23,0x35,0x36, - 0x37,0x33,0x16,0x17,0x16,0x17,0x03,0x2d,0x2f,0x2a, - 0x31,0x61,0x13,0x2c,0x51,0x31,0x2b,0x7a,0x40,0x5f, - 0x17,0x37,0x3c,0x34,0x04,0xd9,0x2a,0x3b,0x70,0x15, - 0x33,0x5e,0x2f,0x13,0xa8,0x8d,0x36,0x5b,0x5f,0x45, - 0x00,0x00,0x00,0x01,0x01,0x56,0x04,0xd9,0x03,0x2d, - 0x06,0x21,0x00,0x0f,0x00,0x00,0x01,0x15,0x06,0x06, - 0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x16,0x17,0x37, - 0x36,0x37,0x03,0x2d,0x38,0x6e,0x18,0x5f,0x46,0x74, - 0x2b,0x31,0x7d,0x13,0x31,0x6f,0x1c,0x06,0x21,0x13, - 0x48,0xb7,0x36,0x95,0xa0,0x13,0x2f,0x91,0x15,0x37, - 0x85,0x19,0x00,0x01,0x01,0x68,0x04,0xdd,0x03,0x1b, - 0x05,0xc7,0x00,0x0b,0x00,0x00,0x01,0x22,0x27,0x33, - 0x16,0x16,0x33,0x32,0x37,0x33,0x06,0x06,0x02,0x3b, - 0xc5,0x0e,0x44,0x07,0x4c,0x40,0x81,0x13,0x48,0x03, - 0x76,0x04,0xdd,0xea,0x49,0x4d,0x96,0x6e,0x7c,0x00, - 0x00,0x01,0x00,0x83,0x05,0x0c,0x01,0x00,0x05,0xc9, - 0x00,0x07,0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06, - 0x22,0x26,0x83,0x24,0x39,0x20,0x20,0x38,0x25,0x05, - 0x96,0x33,0x32,0x58,0x33,0x34,0x00,0x02,0x01,0x89, - 0x04,0xe3,0x03,0x17,0x06,0x58,0x00,0x07,0x00,0x0f, - 0x00,0x00,0x00,0x36,0x32,0x16,0x14,0x06,0x22,0x26, - 0x24,0x26,0x22,0x06,0x14,0x16,0x32,0x36,0x01,0x89, - 0x6b,0xb3,0x70,0x6c,0xb8,0x6a,0x01,0x40,0x3f,0x70, - 0x43,0x3e,0x71,0x43,0x05,0xf3,0x65,0x64,0xab,0x66, - 0x64,0x8b,0x40,0x41,0x69,0x3f,0x40,0x00,0x00,0x00, - 0x00,0x01,0x00,0x44,0xfe,0x42,0x01,0x37,0x00,0x00, - 0x00,0x0f,0x00,0x00,0x13,0x14,0x33,0x32,0x37,0x15, - 0x06,0x23,0x22,0x35,0x34,0x36,0x37,0x33,0x06,0x06, - 0x9e,0x60,0x27,0x12,0x1e,0x2d,0xa8,0x57,0x3c,0x4a, - 0x46,0x3d,0xfe,0xfc,0x6d,0x09,0x4a,0x0c,0xb0,0x4b, - 0x95,0x2e,0x46,0x7b,0x00,0x00,0x00,0x01,0x01,0x29, - 0x04,0xd9,0x03,0x5a,0x05,0xae,0x00,0x15,0x00,0x00, - 0x01,0x22,0x26,0x27,0x26,0x22,0x06,0x07,0x23,0x36, - 0x36,0x33,0x32,0x16,0x17,0x16,0x33,0x32,0x37,0x33, - 0x06,0x06,0x02,0xba,0x20,0x4a,0x1c,0x4c,0x40,0x2c, - 0x09,0x4a,0x0c,0x54,0x46,0x20,0x49,0x1b,0x49,0x25, - 0x3b,0x14,0x4a,0x09,0x54,0x04,0xdb,0x28,0x17,0x40, - 0x46,0x3b,0x64,0x6f,0x28,0x18,0x3f,0x81,0x65,0x6e, - 0x00,0x00,0x00,0x02,0x01,0x21,0x04,0xd9,0x03,0x4c, - 0x06,0x21,0x00,0x0a,0x00,0x14,0x00,0x00,0x01,0x15, - 0x06,0x07,0x06,0x07,0x23,0x35,0x36,0x36,0x37,0x21, - 0x15,0x06,0x06,0x07,0x23,0x35,0x36,0x36,0x37,0x02, - 0x42,0x29,0x45,0x45,0x3f,0x2f,0x2c,0x66,0x18,0x01, - 0x81,0x25,0x8d,0x40,0x2f,0x2c,0x66,0x18,0x06,0x21, - 0x11,0x48,0x5d,0x5a,0x38,0x15,0x39,0xc1,0x39,0x11, - 0x48,0xb5,0x3a,0x15,0x39,0xc1,0x39,0x00,0x00,0x02, - 0xff,0xc4,0xfe,0x12,0x00,0x41,0xff,0xb0,0x00,0x05, - 0x00,0x0b,0x00,0x00,0x17,0x32,0x14,0x23,0x22,0x34, - 0x13,0x32,0x14,0x23,0x22,0x34,0x01,0x40,0x40,0x3d, - 0x3d,0x40,0x40,0x3d,0x50,0x96,0x96,0xfe,0xf9,0x97, - 0x97,0x00,0x00,0x05,0xfe,0xb3,0xfe,0x12,0x01,0x4d, - 0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x11,0x00,0x17, - 0x00,0x1d,0x00,0x00,0x05,0x32,0x14,0x23,0x22,0x34, - 0x21,0x32,0x14,0x23,0x22,0x34,0x21,0x32,0x14,0x23, - 0x22,0x34,0x01,0x32,0x14,0x23,0x22,0x34,0x21,0x32, - 0x14,0x23,0x22,0x34,0xfe,0xf0,0x3f,0x3f,0x3d,0x01, - 0x5c,0x3f,0x3f,0x3d,0x01,0x3b,0x40,0x40,0x3c,0xfe, - 0xad,0x40,0x40,0x3d,0x01,0xcc,0x40,0x40,0x3c,0x50, - 0x96,0x96,0x96,0x96,0x96,0x96,0xfe,0xf9,0x97,0x97, - 0x97,0x97,0x00,0x00,0x00,0x03,0xfe,0xe1,0xfe,0x12, - 0x01,0x1e,0xff,0xb0,0x00,0x05,0x00,0x09,0x00,0x0f, - 0x00,0x00,0x17,0x32,0x14,0x23,0x22,0x34,0x07,0x21, - 0x35,0x21,0x17,0x32,0x14,0x23,0x22,0x34,0xde,0x40, - 0x40,0x3d,0x5c,0xfe,0x9c,0x01,0x64,0x99,0x40,0x40, - 0x3d,0x50,0x96,0x96,0x6e,0x47,0xe0,0x97,0x97,0x00, - 0x00,0x03,0xfe,0xe1,0xfe,0x12,0x01,0x1e,0xff,0xb0, - 0x00,0x05,0x00,0x0d,0x00,0x13,0x00,0x00,0x17,0x32, - 0x14,0x23,0x22,0x34,0x07,0x23,0x15,0x23,0x35,0x23, - 0x35,0x21,0x17,0x32,0x14,0x23,0x22,0x34,0xde,0x40, - 0x40,0x3d,0x5c,0x8e,0x48,0x8e,0x01,0x64,0x99,0x40, - 0x40,0x3d,0x50,0x96,0x96,0x6e,0xca,0xca,0x47,0xe0, - 0x97,0x97,0x00,0x00,0x00,0x01,0xff,0xc3,0xff,0x1a, - 0x00,0x40,0xff,0xb0,0x00,0x05,0x00,0x00,0x15,0x32, - 0x14,0x23,0x22,0x34,0x40,0x40,0x3d,0x50,0x96,0x96, - 0x00,0x00,0x00,0x02,0xff,0x33,0xff,0x1a,0x00,0xce, - 0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x00,0x07,0x32, - 0x14,0x23,0x22,0x34,0x21,0x32,0x14,0x23,0x22,0x34, - 0x90,0x3f,0x3f,0x3d,0x01,0x5c,0x3f,0x3f,0x3d,0x50, - 0x96,0x96,0x96,0x96,0x00,0x00,0x00,0x03,0xff,0x35, - 0xfe,0x12,0x00,0xd0,0xff,0xb0,0x00,0x05,0x00,0x0b, - 0x00,0x11,0x00,0x00,0x07,0x32,0x14,0x23,0x22,0x34, - 0x21,0x32,0x14,0x23,0x22,0x34,0x03,0x32,0x14,0x23, - 0x22,0x34,0x8e,0x3f,0x3f,0x3d,0x01,0x5c,0x3f,0x3f, - 0x3d,0x54,0x40,0x40,0x3d,0x50,0x96,0x96,0x96,0x96, - 0xfe,0xf9,0x97,0x97,0x00,0x00,0x00,0x01,0xff,0x4e, - 0xff,0x49,0x00,0xb3,0xff,0x91,0x00,0x03,0x00,0x00, - 0x17,0x21,0x35,0x21,0xb3,0xfe,0x9b,0x01,0x65,0xb7, - 0x48,0x00,0x00,0x00,0x00,0x01,0xff,0x4e,0xfe,0x80, - 0x00,0xb3,0xff,0x91,0x00,0x07,0x00,0x00,0x17,0x23, - 0x15,0x23,0x35,0x23,0x35,0x21,0xb3,0x8f,0x47,0x8f, - 0x01,0x65,0xb7,0xc9,0xc9,0x48,0x00,0x01,0xff,0xc3, - 0x05,0x82,0x00,0x40,0x06,0x18,0x00,0x05,0x00,0x00, - 0x11,0x32,0x14,0x23,0x22,0x34,0x40,0x40,0x3d,0x06, - 0x18,0x96,0x96,0x00,0x00,0x01,0xff,0xc4,0x05,0x82, - 0x00,0x40,0x06,0x18,0x00,0x05,0x00,0x00,0x11,0x32, - 0x14,0x23,0x22,0x34,0x40,0x40,0x3c,0x06,0x18,0x96, - 0x96,0x00,0x00,0x03,0xff,0x35,0xfe,0x12,0x00,0xd0, - 0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x11,0x00,0x00, - 0x07,0x32,0x14,0x23,0x22,0x34,0x17,0x32,0x14,0x23, - 0x22,0x34,0x17,0x32,0x14,0x23,0x22,0x34,0x8e,0x3f, - 0x3f,0x3d,0xcb,0x40,0x40,0x3d,0xce,0x3f,0x3f,0x3d, - 0x50,0x96,0x96,0x83,0x97,0x97,0x84,0x97,0x97,0x00, - 0x00,0x00,0x00,0x01,0xff,0xc3,0x02,0x53,0x00,0x40, - 0x02,0xe9,0x00,0x05,0x00,0x00,0x11,0x32,0x14,0x23, - 0x22,0x34,0x40,0x40,0x3d,0x02,0xe9,0x96,0x96,0x00, - 0x00,0x01,0xff,0xd3,0xfe,0x45,0x00,0x2c,0xff,0x77, - 0x00,0x03,0x00,0x00,0x13,0x23,0x11,0x33,0x2c,0x59, - 0x59,0xfe,0x45,0x01,0x32,0x00,0x00,0x00,0x00,0x01, - 0x00,0x35,0x04,0xa3,0x01,0xcf,0x05,0x09,0x00,0x03, - 0x00,0x00,0x01,0x21,0x35,0x21,0x01,0xcf,0xfe,0x66, - 0x01,0x9a,0x04,0xa3,0x66,0x00,0x00,0x01,0xff,0xc3, - 0x05,0x82,0x00,0x40,0x06,0x18,0x00,0x05,0x00,0x00, - 0x11,0x32,0x14,0x23,0x22,0x34,0x40,0x40,0x3d,0x06, - 0x18,0x96,0x96,0x00,0x00,0x01,0xff,0xc2,0x05,0x82, - 0x00,0x3f,0x06,0x18,0x00,0x05,0x00,0x00,0x03,0x32, - 0x14,0x23,0x22,0x34,0x01,0x40,0x40,0x3d,0x06,0x18, - 0x96,0x96,0x00,0x01,0xff,0x6e,0xff,0x0a,0x00,0x8d, - 0xff,0xc7,0x00,0x07,0x00,0x00,0x17,0x23,0x15,0x23, - 0x35,0x23,0x35,0x21,0x8d,0x6c,0x47,0x6c,0x01,0x1f, - 0x81,0x75,0x75,0x48,0x00,0x01,0x00,0x48,0x00,0x00, - 0x02,0xbf,0x05,0x0a,0x00,0x1b,0x00,0x00,0x01,0x11, - 0x14,0x06,0x07,0x06,0x07,0x13,0x23,0x01,0x06,0x06, - 0x15,0x11,0x23,0x11,0x34,0x37,0x36,0x36,0x37,0x03, - 0x33,0x01,0x36,0x36,0x35,0x11,0x02,0xb4,0x0a,0x10, - 0x21,0x6f,0xb5,0x67,0xfe,0xc4,0x41,0x38,0x5b,0x1c, - 0x11,0x4c,0x39,0xb2,0x66,0x01,0x38,0x3f,0x34,0x05, - 0x0a,0xfe,0x2c,0x3d,0x5d,0x39,0x74,0x37,0xfe,0x48, - 0x03,0x03,0x2a,0x99,0x7c,0xfe,0x3c,0x01,0xc5,0x75, - 0x66,0x3c,0x5f,0x1c,0x01,0xb3,0xfd,0x06,0x27,0x89, - 0x77,0x01,0xd3,0x00,0x00,0x01,0x00,0x5e,0x00,0x00, - 0x02,0xcd,0x05,0x1e,0x00,0x17,0x00,0x00,0x13,0x36, - 0x32,0x16,0x16,0x17,0x16,0x15,0x11,0x33,0x15,0x21, - 0x35,0x21,0x11,0x34,0x27,0x26,0x27,0x26,0x23,0x22, - 0x07,0x07,0x5e,0x66,0xa9,0x5e,0x56,0x1b,0x3b,0x56, - 0xfd,0x92,0x01,0xb9,0x25,0x1f,0x51,0x22,0x2f,0x50, - 0x66,0x1e,0x05,0x14,0x0a,0x11,0x2f,0x28,0x56,0xaa, - 0xfc,0x9e,0x54,0x54,0x03,0x62,0x87,0x41,0x37,0x0d, - 0x06,0x08,0x03,0x00,0x00,0x01,0x00,0x73,0xff,0xfc, - 0x02,0x03,0x05,0x1e,0x00,0x1b,0x00,0x00,0x01,0x32, - 0x11,0x11,0x23,0x27,0x23,0x06,0x07,0x06,0x23,0x22, - 0x27,0x37,0x16,0x33,0x32,0x36,0x35,0x11,0x34,0x27, - 0x26,0x23,0x22,0x07,0x35,0x36,0x01,0x16,0xed,0x50, - 0x0a,0x07,0x1d,0x19,0x3e,0x7c,0x1e,0x21,0x12,0x17, - 0x1f,0x75,0x74,0x1a,0x1e,0x5e,0x23,0x3e,0x37,0x05, - 0x1e,0xfe,0xdd,0xfc,0x05,0xd5,0x59,0x25,0x5b,0x0b, - 0x5e,0x0d,0xdd,0xca,0x01,0xfc,0x5b,0x34,0x3e,0x11, - 0x58,0x0f,0x00,0x01,0x00,0x11,0x00,0x00,0x02,0x87, - 0x05,0x0a,0x00,0x11,0x00,0x00,0x01,0x15,0x06,0x06, - 0x07,0x06,0x15,0x11,0x23,0x11,0x34,0x36,0x37,0x36, - 0x37,0x37,0x21,0x35,0x02,0x87,0x43,0x52,0x14,0x2d, - 0x5f,0x1c,0x14,0x29,0x1f,0x0e,0xfe,0x39,0x05,0x0a, - 0x49,0x17,0x3f,0x1d,0x45,0x69,0xfc,0x60,0x03,0xa0, - 0x3b,0x65,0x1e,0x3e,0x12,0x08,0x54,0x00,0x00,0x00, - 0x00,0x02,0x00,0x91,0x00,0x00,0x03,0x07,0x05,0x1e, - 0x00,0x0f,0x00,0x13,0x00,0x00,0x13,0x36,0x32,0x1e, - 0x02,0x15,0x11,0x23,0x11,0x34,0x2e,0x02,0x22,0x07, - 0x13,0x23,0x11,0x33,0x91,0xcc,0x9a,0x7f,0x64,0x2d, - 0x60,0x1c,0x48,0x5d,0x6e,0xe7,0x5f,0x5f,0x5f,0x05, - 0x0a,0x14,0x1c,0x4d,0x90,0x6f,0xfc,0x4a,0x03,0xb6, - 0x5a,0x6c,0x3a,0x12,0x15,0xfb,0x4d,0x03,0x2d,0x00, - 0x00,0x00,0x00,0x01,0x00,0x91,0x00,0x00,0x00,0xf0, - 0x05,0x0a,0x00,0x03,0x00,0x00,0x33,0x23,0x11,0x33, - 0xf0,0x5f,0x5f,0x05,0x0a,0x00,0x00,0x01,0x00,0x87, - 0x00,0x00,0x01,0x8c,0x05,0x0a,0x00,0x0c,0x00,0x00, - 0x01,0x15,0x06,0x06,0x15,0x11,0x23,0x11,0x34,0x36, - 0x37,0x23,0x35,0x01,0x8c,0x38,0x45,0x5f,0x4a,0x25, - 0x98,0x05,0x0a,0x49,0x2c,0xda,0x8c,0xfc,0xd1,0x03, - 0x2f,0x96,0xd1,0x20,0x54,0x00,0x00,0x00,0x00,0x01, - 0x00,0x91,0x00,0x00,0x03,0x07,0x05,0x1e,0x00,0x11, - 0x00,0x00,0x33,0x11,0x36,0x32,0x1e,0x02,0x15,0x11, - 0x23,0x11,0x34,0x2e,0x02,0x22,0x07,0x11,0x91,0xcc, - 0x9a,0x7f,0x64,0x2d,0x60,0x1c,0x48,0x5d,0x82,0x74, - 0x05,0x0a,0x14,0x1c,0x4d,0x90,0x6f,0xfc,0x4a,0x03, - 0xb6,0x5a,0x6c,0x3a,0x12,0x0c,0xfb,0x44,0x00,0x01, - 0x00,0x5e,0xff,0xec,0x03,0x16,0x05,0x1e,0x00,0x18, - 0x00,0x00,0x01,0x20,0x10,0x20,0x13,0x11,0x33,0x11, - 0x10,0x17,0x16,0x16,0x32,0x36,0x37,0x36,0x11,0x10, - 0x27,0x2e,0x02,0x07,0x35,0x36,0x01,0xba,0x01,0x5c, - 0xfd,0x48,0x01,0x60,0x4b,0x24,0x55,0x6e,0x54,0x24, - 0x4a,0x4a,0x24,0x55,0x64,0x2f,0x2e,0x05,0x1e,0xfa, - 0xce,0x02,0x99,0x02,0x85,0xfd,0x7b,0xfe,0xb5,0x81, - 0x3e,0x35,0x35,0x3e,0x7f,0x01,0x4d,0x01,0x4c,0x81, - 0x3e,0x36,0x02,0x0a,0x58,0x08,0x00,0x01,0x00,0x8c, - 0x01,0xe2,0x00,0xeb,0x05,0x0a,0x00,0x04,0x00,0x00, - 0x13,0x11,0x33,0x11,0x07,0x8c,0x5f,0x56,0x01,0xe2, - 0x03,0x28,0xfd,0x46,0x6e,0x00,0x00,0x00,0x00,0x01, - 0x00,0x29,0xfe,0x14,0x02,0x1b,0x05,0x1e,0x00,0x0b, - 0x00,0x00,0x13,0x20,0x11,0x11,0x23,0x11,0x10,0x23, - 0x22,0x07,0x35,0x36,0xc9,0x01,0x52,0x61,0xf2,0x51, - 0x4e,0x47,0x05,0x1e,0xfd,0xb3,0xfb,0x43,0x04,0xbd, - 0x01,0xf3,0x32,0x67,0x25,0x00,0x00,0x01,0x00,0x29, - 0xff,0xec,0x02,0x1b,0x05,0x1e,0x00,0x1a,0x00,0x00, - 0x13,0x20,0x11,0x15,0x10,0x21,0x22,0x27,0x27,0x35, - 0x16,0x33,0x32,0x37,0x3e,0x02,0x37,0x36,0x35,0x35, - 0x10,0x23,0x22,0x07,0x35,0x36,0xc9,0x01,0x52,0xfe, - 0xae,0x45,0x40,0x15,0x39,0x60,0x6e,0x3c,0x23,0x18, - 0x08,0x02,0x03,0xf2,0x51,0x4e,0x47,0x05,0x1e,0xfd, - 0xb3,0xbd,0xfd,0xd8,0x14,0x07,0x5c,0x21,0x66,0x3c, - 0x73,0x3b,0x25,0x37,0x26,0xbd,0x01,0xf3,0x32,0x67, - 0x25,0x00,0x00,0x00,0x00,0x01,0x00,0x2d,0x00,0x00, - 0x02,0x3e,0x06,0x21,0x00,0x0a,0x00,0x00,0x13,0x21, - 0x15,0x03,0x03,0x23,0x13,0x13,0x21,0x11,0x33,0x8c, - 0x01,0xb2,0x9e,0x5b,0x61,0x59,0xa9,0xfe,0x47,0x5f, - 0x05,0x10,0x6e,0xfd,0x59,0xfe,0x05,0x01,0xf0,0x02, - 0xc4,0x01,0x6d,0x00,0x00,0x00,0x00,0x02,0x00,0x91, - 0x00,0x00,0x03,0x07,0x05,0x1e,0x00,0x09,0x00,0x14, - 0x00,0x00,0x33,0x11,0x36,0x32,0x16,0x16,0x17,0x16, - 0x15,0x11,0x27,0x11,0x34,0x27,0x2e,0x03,0x22,0x07, - 0x11,0x91,0xcc,0x94,0x72,0x5d,0x18,0x2f,0x5f,0x15, - 0x0d,0x22,0x45,0x4a,0x71,0x74,0x05,0x0a,0x14,0x0f, - 0x29,0x28,0x51,0xab,0xfc,0x3e,0x54,0x03,0x6e,0x7d, - 0x31,0x1f,0x20,0x14,0x05,0x0c,0xfb,0x98,0x00,0x01, - 0x00,0x3b,0x00,0x00,0x02,0xce,0x05,0x1e,0x00,0x25, - 0x00,0x00,0x00,0x36,0x32,0x16,0x16,0x17,0x16,0x15, - 0x11,0x21,0x35,0x33,0x11,0x34,0x27,0x26,0x27,0x26, - 0x22,0x06,0x07,0x06,0x07,0x07,0x03,0x23,0x13,0x36, - 0x35,0x34,0x27,0x27,0x33,0x16,0x17,0x33,0x36,0x37, - 0x01,0x5d,0x57,0x6c,0x54,0x33,0x0f,0x18,0xfe,0xc3, - 0xde,0x13,0x18,0x26,0x18,0x53,0x55,0x1a,0x35,0x10, - 0x07,0x5d,0x60,0x5d,0x02,0x2c,0x11,0x65,0x1c,0x0f, - 0x06,0x1f,0x32,0x04,0xfc,0x22,0x29,0x46,0x39,0x5f, - 0xa4,0xfc,0x8d,0x54,0x03,0x1f,0xc0,0x35,0x44,0x12, - 0x0a,0x2d,0x21,0x44,0x32,0x17,0xfc,0x13,0x03,0xed, - 0x17,0x1f,0x43,0x77,0x2d,0x41,0x46,0x3e,0x27,0x00, - 0x00,0x00,0x00,0x01,0x00,0x73,0xfe,0x14,0x01,0x03, - 0x05,0x0a,0x00,0x09,0x00,0x00,0x01,0x11,0x23,0x11, - 0x34,0x26,0x27,0x27,0x33,0x16,0x01,0x03,0x5f,0x18, - 0x0c,0x0d,0x60,0x30,0x03,0x89,0xfa,0x8b,0x05,0x75, - 0x51,0xc1,0x37,0x38,0xc3,0x00,0x00,0x01,0x00,0x27, - 0x00,0x00,0x01,0xad,0x05,0x1e,0x00,0x15,0x00,0x00, - 0x13,0x32,0x11,0x11,0x14,0x06,0x07,0x07,0x21,0x35, - 0x21,0x36,0x35,0x11,0x34,0x27,0x26,0x23,0x22,0x07, - 0x35,0x36,0xc0,0xed,0x13,0x0a,0x0a,0xfe,0xa1,0x01, - 0x0c,0x1b,0x1a,0x1e,0x5e,0x23,0x3e,0x37,0x05,0x1e, - 0xfe,0xdd,0xfd,0x4e,0x44,0xa4,0x31,0x30,0x54,0x7f, - 0x76,0x02,0xb2,0x5b,0x34,0x3e,0x11,0x58,0x0f,0x00, - 0x00,0x00,0x00,0x02,0x00,0x5e,0xff,0xec,0x03,0x16, - 0x05,0x1e,0x00,0x0a,0x00,0x1a,0x00,0x00,0x01,0x20, - 0x10,0x20,0x11,0x34,0x12,0x37,0x07,0x35,0x36,0x06, - 0x02,0x10,0x1e,0x02,0x32,0x3e,0x02,0x10,0x2e,0x02, - 0x23,0x07,0x01,0xba,0x01,0x5c,0xfd,0x48,0x3f,0x54, - 0x7e,0xe0,0x4f,0x43,0x26,0x48,0x54,0x6e,0x54,0x48, - 0x26,0x26,0x48,0x54,0x37,0x5e,0x05,0x1e,0xfa,0xce, - 0x02,0x99,0xcb,0x01,0x06,0x69,0x07,0x58,0x0e,0xb4, - 0xfe,0xf1,0xfe,0x85,0xe9,0x7c,0x35,0x35,0x7c,0xe9, - 0x01,0x4a,0xe9,0x7c,0x35,0x02,0x00,0x00,0x00,0x01, - 0x00,0x48,0xff,0xcf,0x03,0x2f,0x05,0x0a,0x00,0x14, - 0x00,0x00,0x01,0x03,0x06,0x07,0x06,0x07,0x06,0x07, - 0x05,0x35,0x37,0x37,0x01,0x33,0x13,0x13,0x36,0x37, - 0x36,0x37,0x13,0x03,0x2f,0x3a,0x19,0x14,0x30,0x7c, - 0x54,0x7f,0xfe,0xff,0xfa,0x1f,0xfe,0xef,0x60,0x86, - 0x7d,0x83,0x30,0x1c,0x15,0x38,0x05,0x0a,0xfd,0xcb, - 0xf6,0x5b,0xdb,0x5d,0x3f,0x13,0x2b,0x55,0x2a,0x06, - 0x04,0xb6,0xfd,0xb8,0xfd,0xb1,0x46,0xd5,0x7e,0xca, - 0x02,0x34,0x00,0x01,0x00,0x5e,0xfe,0x14,0x03,0x04, - 0x05,0x1e,0x00,0x17,0x00,0x00,0x01,0x22,0x26,0x10, - 0x36,0x33,0x20,0x11,0x11,0x23,0x11,0x10,0x23,0x22, - 0x06,0x07,0x06,0x15,0x14,0x17,0x16,0x33,0x33,0x07, - 0x01,0x88,0x98,0x92,0xb4,0x96,0x01,0x5c,0x5f,0xfd, - 0x3d,0x60,0x1c,0x39,0x43,0x34,0x62,0x0e,0x10,0x01, - 0xb9,0xde,0x01,0x8c,0xfb,0xfd,0x67,0xfb,0x8f,0x04, - 0x71,0x02,0x3f,0x46,0x38,0x70,0x7b,0xc5,0x52,0x40, - 0x4b,0x00,0x00,0x01,0x00,0x5e,0xff,0xec,0x03,0x04, - 0x05,0x1e,0x00,0x25,0x00,0x00,0x01,0x22,0x26,0x10, - 0x36,0x33,0x20,0x11,0x10,0x02,0x23,0x22,0x27,0x27, - 0x35,0x16,0x33,0x32,0x36,0x36,0x37,0x36,0x11,0x10, - 0x27,0x26,0x26,0x22,0x06,0x07,0x06,0x15,0x14,0x17, - 0x16,0x33,0x33,0x07,0x01,0x88,0x98,0x92,0xb4,0x96, - 0x01,0x5c,0xc0,0xad,0x69,0x57,0x1d,0x67,0x76,0x2b, - 0x4a,0x46,0x18,0x37,0x4a,0x24,0x54,0x74,0x60,0x1c, - 0x39,0x43,0x34,0x62,0x0e,0x10,0x01,0xb9,0xde,0x01, - 0x8c,0xfb,0xfd,0x67,0xfe,0xb2,0xfe,0xb5,0x0f,0x05, - 0x59,0x13,0x1f,0x50,0x3f,0x8e,0x01,0x03,0x01,0x4d, - 0x7f,0x3e,0x35,0x46,0x38,0x70,0x7b,0xc5,0x52,0x40, - 0x4b,0x00,0x00,0x01,0x00,0x00,0xfe,0x14,0x02,0x31, - 0x05,0x0a,0x00,0x10,0x00,0x00,0x01,0x11,0x14,0x07, - 0x06,0x06,0x07,0x11,0x23,0x11,0x03,0x33,0x13,0x36, - 0x36,0x35,0x11,0x02,0x31,0x32,0x1b,0x6b,0x4a,0x66, - 0xc9,0x66,0xc9,0x4f,0x54,0x05,0x0a,0xfe,0x46,0x7d, - 0x6d,0x3a,0x5a,0x15,0xfc,0x57,0x04,0x12,0x02,0xe4, - 0xfd,0x15,0x2b,0x8f,0x78,0x01,0xb9,0x00,0x00,0x00, - 0x00,0x01,0x00,0x3b,0x00,0x00,0x02,0xa9,0x05,0x0a, - 0x00,0x12,0x00,0x00,0x21,0x21,0x35,0x21,0x03,0x01, - 0x33,0x01,0x17,0x36,0x36,0x37,0x13,0x33,0x03,0x06, - 0x06,0x07,0x13,0x02,0xa1,0xfd,0x9a,0x01,0xed,0xd5, - 0xfe,0xe8,0x65,0x01,0x19,0x07,0x30,0x2c,0x0f,0x20, - 0x5e,0x1f,0x14,0x43,0x49,0xb7,0x54,0x01,0xfd,0x02, - 0xb9,0xfd,0x47,0x13,0x4d,0xc5,0x85,0x01,0x35,0xfe, - 0xcb,0xc6,0xe3,0x50,0xfe,0x4f,0x00,0x02,0x00,0x91, - 0xfe,0x14,0x03,0x0d,0x05,0x0a,0x00,0x19,0x00,0x1d, - 0x00,0x00,0x25,0x15,0x23,0x35,0x34,0x37,0x37,0x3e, - 0x03,0x37,0x13,0x21,0x35,0x21,0x15,0x03,0x0e,0x05, - 0x07,0x06,0x03,0x23,0x11,0x33,0x01,0xd8,0x5d,0x09, - 0x0e,0x0b,0x3a,0x0b,0x1d,0x03,0xac,0xfd,0xe3,0x02, - 0x7c,0xac,0x0c,0x21,0x1a,0x0f,0x15,0x0c,0x06,0x0c, - 0xe7,0x5f,0x5f,0x11,0x11,0x11,0x27,0x2d,0x49,0x35, - 0xd4,0x2a,0x64,0x0c,0x02,0x65,0x54,0x54,0xfd,0x9b, - 0x29,0x78,0x5c,0x3c,0x52,0x39,0x1f,0x3e,0xfd,0xe4, - 0x04,0xe3,0x00,0x01,0x00,0x17,0x00,0x00,0x02,0x10, - 0x05,0x1e,0x00,0x13,0x00,0x00,0x13,0x36,0x32,0x1e, - 0x02,0x17,0x16,0x15,0x11,0x23,0x11,0x34,0x2e,0x02, - 0x23,0x22,0x07,0x07,0x17,0x4d,0x9c,0x5c,0x4f,0x32, - 0x12,0x21,0x5f,0x14,0x3b,0x55,0x39,0x56,0x50,0x17, - 0x05,0x14,0x0a,0x0b,0x1f,0x33,0x28,0x49,0x9a,0xfc, - 0x4a,0x03,0xb6,0x5c,0x69,0x3c,0x11,0x08,0x03,0x00, - 0x00,0x01,0x00,0x4a,0x00,0x00,0x03,0xce,0x05,0x0a, - 0x00,0x1e,0x00,0x00,0x21,0x23,0x03,0x33,0x13,0x36, - 0x36,0x37,0x37,0x33,0x07,0x0e,0x03,0x07,0x13,0x33, - 0x32,0x36,0x37,0x36,0x13,0x13,0x33,0x03,0x06,0x07, - 0x0e,0x02,0x01,0x20,0x69,0x6d,0x58,0x3d,0x75,0x70, - 0x16,0x19,0x54,0x19,0x0d,0x27,0x49,0x74,0x56,0x20, - 0x19,0x73,0xc3,0x44,0x8c,0x1d,0x36,0x55,0x37,0x17, - 0x5a,0x33,0x89,0xcd,0x05,0x0a,0xfd,0x23,0x35,0xd4, - 0xd6,0xfe,0xfe,0x7e,0xac,0x92,0x60,0x20,0xfe,0x87, - 0x62,0x57,0xb3,0x01,0x1c,0x02,0x2b,0xfd,0xd5,0xec, - 0xaf,0x61,0x8d,0x56,0x00,0x01,0x00,0x10,0x00,0x00, - 0x02,0xe9,0x05,0x1e,0x00,0x1e,0x00,0x00,0x13,0x36, - 0x32,0x16,0x16,0x17,0x16,0x15,0x11,0x23,0x11,0x34, - 0x27,0x26,0x27,0x26,0x22,0x07,0x11,0x14,0x06,0x23, - 0x22,0x27,0x35,0x16,0x33,0x32,0x35,0x11,0x07,0x40, - 0xc2,0xd2,0x64,0x59,0x1c,0x3c,0x5f,0x28,0x22,0x56, - 0x24,0x51,0x85,0x49,0x49,0x26,0x28,0x2c,0x11,0x44, - 0x51,0x05,0x08,0x16,0x11,0x2e,0x28,0x56,0xab,0xfc, - 0x4a,0x03,0xb6,0x88,0x40,0x37,0x0d,0x06,0x07,0xfc, - 0x0b,0x6f,0x5d,0x08,0x5b,0x08,0x71,0x03,0xec,0x07, - 0x00,0x01,0x00,0x2b,0x03,0x34,0x01,0x11,0x05,0x0a, - 0x00,0x09,0x00,0x00,0x01,0x17,0x06,0x07,0x07,0x23, - 0x36,0x36,0x37,0x37,0x01,0x04,0x0d,0x35,0x1d,0x55, - 0x3f,0x2f,0x28,0x07,0x07,0x05,0x0a,0x14,0xa9,0x4a, - 0xcf,0x9a,0xe5,0x2b,0x2c,0x00,0x00,0x00,0x00,0x02, - 0x00,0x2b,0x03,0x34,0x02,0x2b,0x05,0x0a,0x00,0x09, - 0x00,0x13,0x00,0x00,0x01,0x17,0x06,0x07,0x07,0x23, - 0x36,0x36,0x37,0x37,0x21,0x17,0x06,0x07,0x07,0x23, - 0x36,0x36,0x37,0x37,0x01,0x04,0x0d,0x35,0x1d,0x55, - 0x3f,0x2f,0x28,0x07,0x07,0x01,0x8e,0x0d,0x35,0x1d, - 0x55,0x3f,0x2f,0x28,0x07,0x07,0x05,0x0a,0x14,0xa9, - 0x4a,0xcf,0x9a,0xe5,0x2b,0x2c,0x14,0xa9,0x4a,0xcf, - 0x9a,0xe5,0x2b,0x2c,0x00,0x01,0x00,0x52,0x02,0x00, - 0x03,0xae,0x02,0x52,0x00,0x03,0x00,0x00,0x01,0x21, - 0x35,0x21,0x03,0xae,0xfc,0xa4,0x03,0x5c,0x02,0x00, - 0x52,0x00,0x00,0x01,0x00,0x52,0x02,0x00,0x07,0xae, - 0x02,0x52,0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21, - 0x07,0xae,0xf8,0xa4,0x07,0x5c,0x02,0x00,0x52,0x00, - 0x00,0x01,0x00,0x2b,0x03,0xe1,0x01,0x10,0x05,0xb6, - 0x00,0x06,0x00,0x00,0x13,0x33,0x06,0x07,0x23,0x27, - 0x36,0xd1,0x3f,0x4a,0x1a,0x73,0x0e,0x43,0x05,0xb6, - 0xfc,0xd9,0x17,0xe5,0x00,0x00,0x00,0x01,0x00,0x2b, - 0x03,0xe1,0x01,0x10,0x05,0xb6,0x00,0x06,0x00,0x00, - 0x01,0x17,0x06,0x07,0x23,0x36,0x37,0x01,0x02,0x0e, - 0x42,0x64,0x3f,0x4a,0x1a,0x05,0xb6,0x16,0xdd,0xe2, - 0xfc,0xd9,0x00,0x01,0x00,0x4e,0xfe,0xf8,0x01,0x33, - 0x00,0xcd,0x00,0x06,0x00,0x00,0x25,0x17,0x06,0x07, - 0x23,0x36,0x37,0x01,0x25,0x0e,0x43,0x63,0x3f,0x4a, - 0x1a,0xcd,0x17,0xe5,0xd9,0xfc,0xd9,0x00,0x00,0x02, - 0x00,0x2b,0x03,0xe1,0x02,0x2b,0x05,0xb6,0x00,0x06, - 0x00,0x0d,0x00,0x00,0x13,0x33,0x06,0x07,0x23,0x27, - 0x36,0x25,0x33,0x06,0x07,0x23,0x27,0x36,0xd1,0x3f, - 0x4a,0x1a,0x73,0x0e,0x43,0x01,0x7e,0x3f,0x4a,0x1a, - 0x73,0x0e,0x43,0x05,0xb6,0xfc,0xd9,0x17,0xe5,0xd9, - 0xfc,0xd9,0x17,0xe5,0x00,0x02,0x00,0x2b,0x03,0xe1, - 0x02,0x2b,0x05,0xb6,0x00,0x06,0x00,0x0d,0x00,0x00, - 0x01,0x17,0x06,0x07,0x23,0x36,0x37,0x21,0x17,0x06, - 0x07,0x23,0x36,0x37,0x01,0x02,0x0e,0x42,0x64,0x3f, - 0x4a,0x1a,0x01,0x8e,0x0e,0x42,0x64,0x3f,0x4a,0x1a, - 0x05,0xb6,0x16,0xdd,0xe2,0xfc,0xd9,0x16,0xdd,0xe2, - 0xfc,0xd9,0x00,0x00,0x00,0x02,0x00,0x21,0xfe,0xf8, - 0x02,0x21,0x00,0xcd,0x00,0x06,0x00,0x0d,0x00,0x00, - 0x37,0x17,0x06,0x07,0x23,0x36,0x37,0x13,0x12,0x37, - 0x33,0x17,0x06,0x07,0xf8,0x0e,0x43,0x63,0x3f,0x4a, - 0x1a,0xb6,0x4e,0x17,0x72,0x0f,0x3b,0x6b,0xcd,0x17, - 0xe5,0xd9,0xfc,0xd9,0xfe,0x2b,0x01,0x10,0xc5,0x17, - 0xca,0xf4,0x00,0x00,0x00,0x01,0x00,0x7b,0x00,0x00, - 0x02,0xf8,0x06,0x14,0x00,0x0b,0x00,0x00,0x01,0x25, - 0x15,0x25,0x13,0x23,0x13,0x05,0x35,0x05,0x03,0x33, - 0x01,0xd1,0x01,0x27,0xfe,0xd9,0x18,0x74,0x18,0xfe, - 0xee,0x01,0x12,0x18,0x74,0x04,0x68,0x13,0x5c,0x0a, - 0xfb,0xd7,0x04,0x29,0x0a,0x5c,0x13,0x01,0xac,0x00, - 0x00,0x01,0x00,0x7b,0x00,0x00,0x02,0xf8,0x06,0x14, - 0x00,0x15,0x00,0x00,0x01,0x25,0x15,0x25,0x13,0x03, - 0x25,0x15,0x25,0x13,0x23,0x13,0x05,0x35,0x05,0x03, - 0x13,0x05,0x35,0x05,0x03,0x33,0x01,0xd1,0x01,0x27, - 0xfe,0xd9,0x0a,0x0a,0x01,0x27,0xfe,0xd9,0x18,0x74, - 0x18,0xfe,0xee,0x01,0x12,0x0c,0x0c,0xfe,0xee,0x01, - 0x12,0x18,0x74,0x04,0x96,0x12,0x5c,0x0a,0xfe,0xbc, - 0xfe,0xac,0x0b,0x5c,0x10,0xfe,0x83,0x01,0x7d,0x10, - 0x5c,0x0b,0x01,0x54,0x01,0x44,0x0a,0x5c,0x12,0x01, - 0x7e,0x00,0x00,0x01,0x00,0xa8,0x01,0xfa,0x02,0x5a, - 0x03,0xdd,0x00,0x07,0x00,0x00,0x00,0x32,0x16,0x14, - 0x06,0x22,0x26,0x34,0x01,0x18,0xd2,0x70,0x70,0xd0, - 0x72,0x03,0xdd,0x7a,0xec,0x7d,0x7d,0xec,0x00,0x03, - 0x00,0x85,0xff,0xf0,0x04,0x6d,0x00,0xc5,0x00,0x06, - 0x00,0x0d,0x00,0x14,0x00,0x00,0x36,0x32,0x15,0x14, - 0x06,0x23,0x22,0x24,0x32,0x15,0x14,0x06,0x23,0x22, - 0x24,0x32,0x15,0x14,0x06,0x23,0x22,0x85,0x9c,0x2b, - 0x23,0x4e,0x01,0xa6,0x9c,0x2b,0x23,0x4e,0x01,0xa6, - 0x9c,0x2b,0x23,0x4e,0xc5,0x6b,0x36,0x34,0xd5,0x6b, - 0x36,0x34,0xd5,0x6b,0x36,0x34,0x00,0x07,0x00,0x5e, - 0xff,0xec,0x06,0x3f,0x05,0xcb,0x00,0x07,0x00,0x0b, - 0x00,0x15,0x00,0x1d,0x00,0x25,0x00,0x2f,0x00,0x39, - 0x00,0x00,0x12,0x36,0x32,0x16,0x10,0x06,0x22,0x26, - 0x01,0x23,0x01,0x33,0x05,0x22,0x06,0x10,0x16,0x33, - 0x32,0x36,0x35,0x10,0x00,0x36,0x32,0x16,0x10,0x06, - 0x22,0x26,0x00,0x32,0x16,0x10,0x06,0x22,0x26,0x10, - 0x25,0x22,0x06,0x10,0x16,0x33,0x32,0x36,0x35,0x10, - 0x21,0x22,0x06,0x10,0x16,0x33,0x32,0x36,0x35,0x10, - 0x5e,0x66,0xc7,0x69,0x6c,0xc3,0x67,0x01,0x3e,0x5d, - 0x01,0xde,0x58,0xfd,0xb0,0x3a,0x33,0x34,0x3d,0x3b, - 0x36,0x01,0x2b,0x66,0xc6,0x69,0x6c,0xc2,0x67,0x02, - 0x4b,0xc6,0x69,0x6c,0xc2,0x67,0xfe,0xe1,0x3a,0x32, - 0x33,0x3d,0x3b,0x36,0x01,0x71,0x3a,0x33,0x34,0x3d, - 0x3b,0x35,0x04,0xe1,0xea,0xe9,0xfe,0x45,0xf2,0xee, - 0xfc,0xdd,0x05,0xb6,0x39,0xb7,0xfe,0x7b,0xb8,0xb9, - 0xc2,0x01,0x79,0xfd,0x1e,0xe6,0xe9,0xfe,0x43,0xef, - 0xf0,0x02,0xa5,0xe9,0xfe,0x46,0xf2,0xef,0x01,0xbc, - 0x9c,0xb7,0xfe,0x7b,0xb8,0xb9,0xc2,0x01,0x79,0xb7, - 0xfe,0x7b,0xb8,0xb8,0xc3,0x01,0x79,0x00,0x00,0x01, - 0x00,0x52,0x00,0x93,0x01,0xae,0x03,0x8b,0x00,0x06, - 0x00,0x00,0x01,0x03,0x13,0x07,0x01,0x35,0x01,0x01, - 0xae,0xdb,0xdb,0x3d,0xfe,0xe1,0x01,0x1f,0x03,0x68, - 0xfe,0xa8,0xfe,0xa8,0x25,0x01,0x6f,0x1b,0x01,0x6e, - 0x00,0x00,0x00,0x01,0x00,0x52,0x00,0x93,0x01,0xae, - 0x03,0x8b,0x00,0x06,0x00,0x00,0x01,0x15,0x01,0x27, - 0x13,0x03,0x37,0x01,0xae,0xfe,0xe1,0x3d,0xdb,0xdb, - 0x3d,0x02,0x1d,0x1b,0xfe,0x91,0x25,0x01,0x58,0x01, - 0x58,0x23,0x00,0x01,0xfe,0xd7,0x00,0x00,0x02,0x33, - 0x05,0xb6,0x00,0x03,0x00,0x00,0x23,0x23,0x01,0x33, - 0xcd,0x5c,0x03,0x00,0x5c,0x05,0xb6,0x00,0x00,0x00, - 0x00,0x02,0x00,0x91,0x00,0x00,0x03,0xdf,0x05,0x0a, - 0x00,0x13,0x00,0x26,0x00,0x00,0x13,0x33,0x32,0x16, - 0x16,0x17,0x16,0x15,0x11,0x23,0x11,0x34,0x27,0x26, - 0x27,0x26,0x23,0x23,0x11,0x23,0x01,0x11,0x14,0x06, - 0x07,0x06,0x21,0x23,0x11,0x33,0x11,0x33,0x32,0x37, - 0x36,0x37,0x36,0x35,0x11,0x91,0x8d,0x5d,0x85,0x77, - 0x23,0x4d,0x5f,0x3d,0x34,0x7b,0x33,0x4b,0x2e,0x5f, - 0x03,0x4e,0x2f,0x38,0x6d,0xfe,0xe4,0x76,0x5f,0x17, - 0xc0,0x5d,0x55,0x15,0x0a,0x05,0x0a,0x10,0x2e,0x28, - 0x55,0xaa,0xfd,0x63,0x02,0x9d,0x87,0x40,0x37,0x0d, - 0x06,0xfb,0x4a,0x05,0x0a,0xfd,0x7d,0xa3,0xe6,0x56, - 0xa8,0x04,0x02,0xfc,0x52,0x5a,0x52,0xbc,0x54,0x77, - 0x02,0x83,0x00,0x00,0x00,0x01,0x00,0x23,0xff,0xec, - 0x03,0x04,0x05,0xcd,0x00,0x26,0x00,0x00,0x13,0x33, - 0x12,0x12,0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x03, - 0x21,0x15,0x21,0x07,0x15,0x17,0x21,0x15,0x21,0x16, - 0x16,0x33,0x32,0x37,0x15,0x06,0x23,0x22,0x02,0x03, - 0x23,0x35,0x33,0x27,0x35,0x37,0x23,0x23,0x8d,0x10, - 0xcb,0x9a,0x7a,0x65,0x33,0x56,0x52,0xed,0x25,0x01, - 0x45,0xfe,0xb6,0x02,0x02,0x01,0x29,0xfe,0xdc,0x0f, - 0x8f,0x84,0x65,0x56,0x56,0x65,0xb0,0xc3,0x16,0x8d, - 0x89,0x02,0x02,0x89,0x03,0x83,0x01,0x0d,0x01,0x3d, - 0x4a,0x56,0x3d,0xfe,0x19,0x52,0x4c,0x49,0x34,0x51, - 0xe9,0xe0,0x2f,0x64,0x2d,0x01,0x13,0x01,0x18,0x51, - 0x65,0x27,0x3d,0x00,0x00,0x02,0x00,0x0e,0x02,0xe5, - 0x05,0x1b,0x05,0xb6,0x00,0x07,0x00,0x18,0x00,0x00, - 0x01,0x23,0x11,0x23,0x11,0x23,0x35,0x21,0x01,0x23, - 0x11,0x37,0x23,0x03,0x23,0x03,0x23,0x17,0x11,0x23, - 0x11,0x33,0x13,0x13,0x33,0x02,0x19,0xdc,0x56,0xd9, - 0x02,0x0b,0x03,0x02,0x56,0x06,0x08,0xe4,0x49,0xde, - 0x08,0x06,0x52,0x7d,0xdd,0xe0,0x7d,0x05,0x68,0xfd, - 0x7d,0x02,0x83,0x4e,0xfd,0x2f,0x01,0x8e,0xcf,0xfd, - 0xa3,0x02,0x61,0xc9,0xfe,0x68,0x02,0xd1,0xfd,0xa2, - 0x02,0x5e,0x00,0x03,0x00,0x14,0x00,0x00,0x02,0xc5, - 0x06,0x1f,0x00,0x15,0x00,0x1d,0x00,0x21,0x00,0x00, - 0x13,0x34,0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x06, - 0x06,0x07,0x15,0x33,0x15,0x23,0x11,0x23,0x11,0x23, - 0x35,0x37,0x00,0x36,0x32,0x16,0x14,0x06,0x22,0x26, - 0x13,0x23,0x11,0x33,0x9e,0x62,0x79,0x47,0x38,0x21, - 0x33,0x2d,0x48,0x31,0x02,0xaa,0xaa,0x5e,0x8a,0x8a, - 0x01,0xaa,0x24,0x39,0x20,0x20,0x38,0x25,0x6d,0x5f, - 0x5f,0x04,0x9a,0xcf,0xb6,0x19,0x58,0x19,0x03,0x7d, - 0xaf,0x5b,0x54,0xfc,0x17,0x03,0xe9,0x36,0x29,0x01, - 0x4e,0x33,0x32,0x58,0x33,0x34,0xfa,0xc0,0x04,0x3d, - 0x00,0x02,0x00,0x14,0x00,0x00,0x02,0xb5,0x06,0x1f, - 0x00,0x15,0x00,0x19,0x00,0x00,0x13,0x34,0x36,0x33, - 0x32,0x17,0x07,0x26,0x23,0x06,0x06,0x07,0x15,0x33, - 0x15,0x23,0x11,0x23,0x11,0x23,0x35,0x37,0x01,0x23, - 0x11,0x33,0x9e,0x62,0x79,0x47,0x38,0x21,0x33,0x2d, - 0x48,0x31,0x02,0xaa,0xaa,0x5e,0x8a,0x8a,0x02,0x17, - 0x5f,0x5f,0x04,0x9a,0xcf,0xb6,0x19,0x58,0x19,0x03, - 0x7d,0xaf,0x5b,0x54,0xfc,0x17,0x03,0xe9,0x36,0x29, - 0xfb,0xb8,0x06,0x14,0x00,0x02,0x00,0x4a,0x00,0x00, - 0x03,0xe0,0x06,0x18,0x00,0x05,0x00,0x24,0x00,0x00, - 0x01,0x32,0x14,0x23,0x22,0x34,0x01,0x23,0x03,0x33, - 0x13,0x36,0x36,0x37,0x37,0x33,0x07,0x0e,0x03,0x07, - 0x13,0x33,0x32,0x36,0x37,0x36,0x13,0x13,0x33,0x03, - 0x06,0x07,0x0e,0x02,0x03,0xa0,0x40,0x40,0x3d,0xfd, - 0xbd,0x69,0x6d,0x58,0x3d,0x75,0x70,0x16,0x19,0x54, - 0x19,0x0d,0x27,0x49,0x74,0x56,0x20,0x19,0x73,0xc3, - 0x44,0x8c,0x1d,0x36,0x55,0x37,0x17,0x5a,0x33,0x89, - 0xcd,0x06,0x18,0x96,0x96,0xf9,0xe8,0x05,0x0a,0xfd, - 0x23,0x35,0xd4,0xd6,0xfe,0xfe,0x7e,0xac,0x92,0x60, - 0x20,0xfe,0x87,0x62,0x57,0xb3,0x01,0x1c,0x02,0x2b, - 0xfd,0xd5,0xec,0xaf,0x61,0x8d,0x56,0x00,0x00,0x02, - 0x00,0x2e,0x00,0x00,0x03,0xce,0x06,0x18,0x00,0x05, - 0x00,0x24,0x00,0x00,0x13,0x32,0x14,0x23,0x22,0x34, - 0x13,0x23,0x03,0x33,0x13,0x36,0x36,0x37,0x37,0x33, - 0x07,0x0e,0x03,0x07,0x13,0x33,0x32,0x36,0x37,0x36, - 0x13,0x13,0x33,0x03,0x06,0x07,0x0e,0x02,0x6b,0x40, - 0x40,0x3d,0xf2,0x69,0x6d,0x58,0x3d,0x75,0x70,0x16, - 0x19,0x54,0x19,0x0d,0x27,0x49,0x74,0x56,0x20,0x19, - 0x73,0xc3,0x44,0x8c,0x1d,0x36,0x55,0x37,0x17,0x5a, - 0x33,0x89,0xcd,0x06,0x18,0x96,0x96,0xf9,0xe8,0x05, - 0x0a,0xfd,0x23,0x35,0xd4,0xd6,0xfe,0xfe,0x7e,0xac, - 0x92,0x60,0x20,0xfe,0x87,0x62,0x57,0xb3,0x01,0x1c, - 0x02,0x2b,0xfd,0xd5,0xec,0xaf,0x61,0x8d,0x56,0x00, - 0x00,0x00,0x00,0x03,0x00,0x4a,0x00,0x00,0x03,0xe0, - 0x06,0x18,0x00,0x05,0x00,0x24,0x00,0x2a,0x00,0x00, - 0x01,0x32,0x14,0x23,0x22,0x34,0x01,0x23,0x03,0x33, - 0x13,0x36,0x36,0x37,0x37,0x33,0x07,0x0e,0x03,0x07, - 0x13,0x33,0x32,0x36,0x37,0x36,0x13,0x13,0x33,0x03, - 0x06,0x07,0x0e,0x02,0x13,0x32,0x14,0x23,0x22,0x34, - 0x03,0xa0,0x40,0x40,0x3d,0xfd,0xbd,0x69,0x6d,0x58, - 0x3d,0x75,0x70,0x16,0x19,0x54,0x19,0x0d,0x27,0x49, - 0x74,0x56,0x20,0x19,0x73,0xc3,0x44,0x8c,0x1d,0x36, - 0x55,0x37,0x17,0x5a,0x33,0x89,0xcd,0x6f,0x40,0x40, - 0x3d,0x06,0x18,0x96,0x96,0xf9,0xe8,0x05,0x0a,0xfd, - 0x23,0x35,0xd4,0xd6,0xfe,0xfe,0x7e,0xac,0x92,0x60, - 0x20,0xfe,0x87,0x62,0x57,0xb3,0x01,0x1c,0x02,0x2b, - 0xfd,0xd5,0xec,0xaf,0x61,0x8d,0x56,0x02,0x03,0x96, - 0x96,0x00,0x00,0x03,0x00,0x2e,0x00,0x00,0x03,0xce, - 0x06,0x18,0x00,0x05,0x00,0x24,0x00,0x2a,0x00,0x00, - 0x13,0x32,0x14,0x23,0x22,0x34,0x13,0x23,0x03,0x33, - 0x13,0x36,0x36,0x37,0x37,0x33,0x07,0x0e,0x03,0x07, - 0x13,0x33,0x32,0x36,0x37,0x36,0x13,0x13,0x33,0x03, - 0x06,0x07,0x0e,0x02,0x13,0x32,0x14,0x23,0x22,0x34, - 0x6b,0x40,0x40,0x3d,0xf2,0x69,0x6d,0x58,0x3d,0x75, - 0x70,0x16,0x19,0x54,0x19,0x0d,0x27,0x49,0x74,0x56, - 0x20,0x19,0x73,0xc3,0x44,0x8c,0x1d,0x36,0x55,0x37, - 0x17,0x5a,0x33,0x89,0xcd,0x6f,0x40,0x40,0x3d,0x06, - 0x18,0x96,0x96,0xf9,0xe8,0x05,0x0a,0xfd,0x23,0x35, - 0xd4,0xd6,0xfe,0xfe,0x7e,0xac,0x92,0x60,0x20,0xfe, - 0x87,0x62,0x57,0xb3,0x01,0x1c,0x02,0x2b,0xfd,0xd5, - 0xec,0xaf,0x61,0x8d,0x56,0x02,0x03,0x96,0x96,0x00, - 0x00,0x00,0x00,0x02,0x00,0x48,0xfe,0xdb,0x02,0xbf, - 0x05,0x0a,0x00,0x1b,0x00,0x1f,0x00,0x00,0x01,0x11, - 0x14,0x06,0x07,0x06,0x07,0x13,0x23,0x01,0x06,0x06, - 0x15,0x11,0x23,0x11,0x34,0x37,0x36,0x36,0x37,0x03, - 0x33,0x01,0x36,0x36,0x35,0x11,0x03,0x21,0x35,0x21, - 0x02,0xb4,0x0a,0x10,0x21,0x6f,0xb5,0x67,0xfe,0xc4, - 0x41,0x38,0x5b,0x1c,0x11,0x4c,0x39,0xb2,0x66,0x01, - 0x38,0x3f,0x34,0x31,0xfe,0x9b,0x01,0x65,0x05,0x0a, - 0xfe,0x2c,0x3d,0x5d,0x39,0x74,0x37,0xfe,0x48,0x03, - 0x03,0x2a,0x99,0x7c,0xfe,0x3c,0x01,0xc5,0x75,0x66, - 0x3c,0x5f,0x1c,0x01,0xb3,0xfd,0x06,0x27,0x89,0x77, - 0x01,0xd3,0xf9,0xd1,0x48,0x00,0x00,0x00,0x00,0x02, - 0x00,0x48,0xfe,0x12,0x02,0xbf,0x05,0x0a,0x00,0x1b, - 0x00,0x23,0x00,0x00,0x01,0x11,0x14,0x06,0x07,0x06, - 0x07,0x13,0x23,0x01,0x06,0x06,0x15,0x11,0x23,0x11, - 0x34,0x37,0x36,0x36,0x37,0x03,0x33,0x01,0x36,0x36, - 0x35,0x11,0x03,0x23,0x15,0x23,0x35,0x23,0x35,0x21, - 0x02,0xb4,0x0a,0x10,0x21,0x6f,0xb5,0x67,0xfe,0xc4, - 0x41,0x38,0x5b,0x1c,0x11,0x4c,0x39,0xb2,0x66,0x01, - 0x38,0x3f,0x34,0x31,0x8f,0x47,0x8f,0x01,0x65,0x05, - 0x0a,0xfe,0x2c,0x3d,0x5d,0x39,0x74,0x37,0xfe,0x48, - 0x03,0x03,0x2a,0x99,0x7c,0xfe,0x3c,0x01,0xc5,0x75, - 0x66,0x3c,0x5f,0x1c,0x01,0xb3,0xfd,0x06,0x27,0x89, - 0x77,0x01,0xd3,0xf9,0xd1,0xc9,0xc9,0x48,0x00,0x02, - 0x00,0x48,0x00,0x00,0x02,0xbf,0x05,0x0a,0x00,0x1b, - 0x00,0x21,0x00,0x00,0x01,0x11,0x14,0x06,0x07,0x06, - 0x07,0x13,0x23,0x01,0x06,0x06,0x15,0x11,0x23,0x11, - 0x34,0x37,0x36,0x36,0x37,0x03,0x33,0x01,0x36,0x36, - 0x35,0x11,0x01,0x32,0x14,0x23,0x22,0x34,0x02,0xb4, - 0x0a,0x10,0x21,0x6f,0xb5,0x67,0xfe,0xc4,0x41,0x38, - 0x5b,0x1c,0x11,0x4c,0x39,0xb2,0x66,0x01,0x38,0x3f, - 0x34,0xfe,0xe0,0x40,0x40,0x3d,0x05,0x0a,0xfe,0x2c, - 0x3d,0x5d,0x39,0x74,0x37,0xfe,0x48,0x03,0x03,0x2a, - 0x99,0x7c,0xfe,0x3c,0x01,0xc5,0x75,0x66,0x3c,0x5f, - 0x1c,0x01,0xb3,0xfd,0x06,0x27,0x89,0x77,0x01,0xd3, - 0xfc,0x74,0x96,0x96,0x00,0x02,0x00,0x5e,0x00,0x00, - 0x02,0xcd,0x05,0x1e,0x00,0x17,0x00,0x1d,0x00,0x00, - 0x13,0x36,0x32,0x16,0x16,0x17,0x16,0x15,0x11,0x33, - 0x15,0x21,0x35,0x21,0x11,0x34,0x27,0x26,0x27,0x26, - 0x23,0x22,0x07,0x07,0x13,0x32,0x14,0x23,0x22,0x34, - 0x5e,0x66,0xa9,0x5e,0x56,0x1b,0x3b,0x56,0xfd,0x92, - 0x01,0xb9,0x25,0x1f,0x51,0x22,0x2f,0x50,0x66,0x1e, - 0xbd,0x40,0x40,0x3d,0x05,0x14,0x0a,0x11,0x2f,0x28, - 0x56,0xaa,0xfc,0x9e,0x54,0x54,0x03,0x62,0x87,0x41, - 0x37,0x0d,0x06,0x08,0x03,0xfe,0x2c,0x96,0x96,0x00, - 0x00,0x02,0x00,0x73,0xff,0xfc,0x02,0x03,0x05,0x1e, - 0x00,0x1b,0x00,0x21,0x00,0x00,0x01,0x32,0x11,0x11, - 0x23,0x27,0x23,0x06,0x07,0x06,0x23,0x22,0x27,0x37, - 0x16,0x33,0x32,0x36,0x35,0x11,0x34,0x27,0x26,0x23, - 0x22,0x07,0x35,0x36,0x13,0x32,0x14,0x23,0x22,0x34, - 0x01,0x16,0xed,0x50,0x0a,0x07,0x1d,0x19,0x3e,0x7c, - 0x1e,0x21,0x12,0x17,0x1f,0x75,0x74,0x1a,0x1e,0x5e, - 0x23,0x3e,0x37,0x19,0x40,0x40,0x3d,0x05,0x1e,0xfe, - 0xdd,0xfc,0x05,0xd5,0x59,0x25,0x5b,0x0b,0x5e,0x0d, - 0xdd,0xca,0x01,0xfc,0x5b,0x34,0x3e,0x11,0x58,0x0f, - 0xfd,0xcb,0x96,0x96,0x00,0x02,0x00,0x11,0x00,0x00, - 0x02,0x87,0x05,0x0a,0x00,0x11,0x00,0x17,0x00,0x00, - 0x01,0x15,0x06,0x06,0x07,0x06,0x15,0x11,0x23,0x11, - 0x34,0x36,0x37,0x36,0x37,0x37,0x21,0x35,0x13,0x32, - 0x14,0x23,0x22,0x34,0x02,0x87,0x43,0x52,0x14,0x2d, - 0x5f,0x1c,0x14,0x29,0x1f,0x0e,0xfe,0x39,0xcb,0x40, - 0x40,0x3d,0x05,0x0a,0x49,0x17,0x3f,0x1d,0x45,0x69, - 0xfc,0x60,0x03,0xa0,0x3b,0x65,0x1e,0x3e,0x12,0x08, - 0x54,0xfd,0xdf,0x96,0x96,0x00,0x00,0x00,0x00,0x03, - 0x00,0x91,0x00,0x00,0x03,0x07,0x05,0x1e,0x00,0x0f, - 0x00,0x13,0x00,0x19,0x00,0x00,0x13,0x36,0x32,0x1e, - 0x02,0x15,0x11,0x23,0x11,0x34,0x2e,0x02,0x22,0x07, - 0x11,0x11,0x33,0x11,0x13,0x32,0x14,0x23,0x22,0x34, - 0x91,0xcc,0x9a,0x7f,0x64,0x2d,0x60,0x1c,0x48,0x5d, - 0x6e,0xe7,0x5f,0xda,0x40,0x40,0x3d,0x05,0x0a,0x14, - 0x1c,0x4d,0x90,0x6f,0xfc,0x4a,0x03,0xb6,0x5a,0x6c, - 0x3a,0x12,0x15,0xfb,0x4d,0x03,0x2d,0xfc,0xd3,0x02, - 0xe9,0x96,0x96,0x00,0x00,0x00,0x00,0x02,0xff,0xcc, - 0x00,0x00,0x00,0xf0,0x05,0x0a,0x00,0x03,0x00,0x09, - 0x00,0x00,0x33,0x11,0x33,0x11,0x03,0x32,0x14,0x23, - 0x22,0x34,0x91,0x5f,0xe7,0x40,0x40,0x3d,0x05,0x0a, - 0xfa,0xf6,0x02,0xe9,0x96,0x96,0x00,0x02,0xff,0xec, - 0x00,0x00,0x01,0x8c,0x05,0x0a,0x00,0x0c,0x00,0x12, - 0x00,0x00,0x01,0x15,0x06,0x06,0x15,0x11,0x23,0x11, - 0x34,0x36,0x37,0x23,0x35,0x03,0x32,0x14,0x23,0x22, - 0x34,0x01,0x8c,0x38,0x45,0x5f,0x4a,0x25,0x98,0x5e, - 0x40,0x40,0x3d,0x05,0x0a,0x49,0x2c,0xda,0x8c,0xfc, - 0xd1,0x03,0x2f,0x96,0xd1,0x20,0x54,0xfd,0xdf,0x96, - 0x96,0x00,0x00,0x00,0x00,0x02,0x00,0x5e,0xff,0xec, - 0x03,0x16,0x05,0x1e,0x00,0x18,0x00,0x1e,0x00,0x00, - 0x01,0x20,0x10,0x20,0x13,0x11,0x33,0x11,0x10,0x17, - 0x16,0x16,0x32,0x36,0x37,0x36,0x11,0x10,0x27,0x2e, - 0x02,0x07,0x35,0x36,0x13,0x32,0x14,0x23,0x22,0x34, - 0x01,0xba,0x01,0x5c,0xfd,0x48,0x01,0x60,0x4b,0x24, - 0x55,0x6e,0x54,0x24,0x4a,0x4a,0x24,0x55,0x64,0x2f, - 0x2e,0x2f,0x40,0x40,0x3d,0x05,0x1e,0xfa,0xce,0x02, - 0x99,0x02,0x85,0xfd,0x7b,0xfe,0xb5,0x81,0x3e,0x35, - 0x35,0x3e,0x7f,0x01,0x4d,0x01,0x4c,0x81,0x3e,0x36, - 0x02,0x0a,0x58,0x08,0xfd,0xcb,0x96,0x96,0x00,0x02, - 0xff,0xca,0x01,0xe2,0x00,0xeb,0x05,0x0a,0x00,0x04, - 0x00,0x0a,0x00,0x00,0x13,0x11,0x33,0x11,0x07,0x03, - 0x32,0x14,0x23,0x22,0x34,0x8c,0x5f,0x56,0x8e,0x40, - 0x40,0x3d,0x01,0xe2,0x03,0x28,0xfd,0x46,0x6e,0x01, - 0x7c,0x96,0x96,0x00,0x00,0x00,0x00,0x02,0x00,0x29, - 0xfe,0x14,0x02,0x1b,0x05,0x1e,0x00,0x0b,0x00,0x11, - 0x00,0x00,0x13,0x20,0x11,0x11,0x23,0x11,0x10,0x23, - 0x22,0x07,0x35,0x36,0x13,0x32,0x14,0x23,0x22,0x34, - 0xc9,0x01,0x52,0x61,0xf2,0x51,0x4e,0x47,0x51,0x40, - 0x40,0x3d,0x05,0x1e,0xfd,0xb3,0xfb,0x43,0x04,0xbd, - 0x01,0xf3,0x32,0x67,0x25,0xfd,0xcb,0x96,0x96,0x00, - 0x00,0x02,0x00,0x29,0xff,0xec,0x02,0x1b,0x05,0x1e, - 0x00,0x1a,0x00,0x20,0x00,0x00,0x13,0x20,0x11,0x15, - 0x10,0x21,0x22,0x27,0x27,0x35,0x16,0x33,0x32,0x37, - 0x3e,0x02,0x37,0x36,0x35,0x35,0x10,0x23,0x22,0x07, - 0x35,0x36,0x13,0x32,0x14,0x23,0x22,0x34,0xc9,0x01, - 0x52,0xfe,0xae,0x45,0x40,0x15,0x39,0x60,0x6e,0x3c, - 0x23,0x18,0x08,0x02,0x03,0xf2,0x51,0x4e,0x47,0x51, - 0x40,0x40,0x3d,0x05,0x1e,0xfd,0xb3,0xbd,0xfd,0xd8, - 0x14,0x07,0x5c,0x21,0x66,0x3c,0x73,0x3b,0x25,0x37, - 0x26,0xbd,0x01,0xf3,0x32,0x67,0x25,0xfd,0xcb,0x96, - 0x96,0x00,0x00,0x00,0x00,0x02,0x00,0x2d,0x00,0x00, - 0x02,0x3e,0x06,0x21,0x00,0x0a,0x00,0x10,0x00,0x00, - 0x01,0x15,0x03,0x03,0x23,0x13,0x13,0x21,0x11,0x33, - 0x11,0x13,0x32,0x14,0x23,0x22,0x34,0x02,0x3e,0x9e, - 0x5b,0x61,0x59,0xa9,0xfe,0x47,0x5f,0x07,0x40,0x40, - 0x3d,0x05,0x10,0x6e,0xfd,0x59,0xfe,0x05,0x01,0xf0, - 0x02,0xc4,0x01,0x6d,0xfe,0xef,0xfd,0xd9,0x96,0x96, - 0x00,0x00,0x00,0x02,0x00,0x3b,0x00,0x00,0x02,0xce, - 0x05,0x1e,0x00,0x25,0x00,0x2b,0x00,0x00,0x00,0x36, - 0x32,0x16,0x16,0x17,0x16,0x15,0x11,0x21,0x35,0x33, - 0x11,0x34,0x27,0x26,0x27,0x26,0x22,0x06,0x07,0x06, - 0x07,0x07,0x03,0x23,0x13,0x36,0x35,0x34,0x27,0x27, - 0x33,0x16,0x17,0x33,0x36,0x37,0x13,0x32,0x14,0x23, - 0x22,0x34,0x01,0x5d,0x57,0x6c,0x54,0x33,0x0f,0x18, - 0xfe,0xc3,0xde,0x13,0x18,0x26,0x18,0x53,0x55,0x1a, - 0x35,0x10,0x07,0x5d,0x60,0x5d,0x02,0x2c,0x11,0x65, - 0x1c,0x0f,0x06,0x1f,0x32,0x6a,0x40,0x40,0x3d,0x04, - 0xfc,0x22,0x29,0x46,0x39,0x5f,0xa4,0xfc,0x8d,0x54, - 0x03,0x1f,0xc0,0x35,0x44,0x12,0x0a,0x2d,0x21,0x44, - 0x32,0x17,0xfc,0x13,0x03,0xed,0x17,0x1f,0x43,0x77, - 0x2d,0x41,0x46,0x3e,0x27,0xfe,0x01,0x96,0x96,0x00, - 0x00,0x00,0x00,0x02,0x00,0x27,0x00,0x00,0x01,0xad, - 0x05,0x1e,0x00,0x15,0x00,0x1b,0x00,0x00,0x13,0x32, - 0x11,0x11,0x14,0x06,0x07,0x07,0x21,0x35,0x21,0x36, - 0x35,0x11,0x34,0x27,0x26,0x23,0x22,0x07,0x35,0x36, - 0x13,0x32,0x14,0x23,0x22,0x34,0xc0,0xed,0x13,0x0a, - 0x0a,0xfe,0xa1,0x01,0x0c,0x1b,0x1a,0x1e,0x5e,0x23, - 0x3e,0x37,0x19,0x40,0x40,0x3d,0x05,0x1e,0xfe,0xdd, - 0xfd,0x4e,0x44,0xa4,0x31,0x30,0x54,0x7f,0x76,0x02, - 0xb2,0x5b,0x34,0x3e,0x11,0x58,0x0f,0xfd,0xcb,0x96, - 0x96,0x00,0x00,0x00,0x00,0x03,0x00,0x5e,0xff,0xec, - 0x03,0x16,0x05,0x1e,0x00,0x0a,0x00,0x1a,0x00,0x20, - 0x00,0x00,0x01,0x20,0x10,0x20,0x11,0x34,0x12,0x37, - 0x07,0x35,0x36,0x06,0x02,0x10,0x1e,0x02,0x32,0x3e, - 0x02,0x10,0x2e,0x02,0x23,0x07,0x13,0x32,0x14,0x23, - 0x22,0x34,0x01,0xba,0x01,0x5c,0xfd,0x48,0x3f,0x54, - 0x7e,0xe0,0x4f,0x43,0x26,0x48,0x54,0x6e,0x54,0x48, - 0x26,0x26,0x48,0x54,0x37,0x5e,0x5e,0x40,0x40,0x3d, - 0x05,0x1e,0xfa,0xce,0x02,0x99,0xcb,0x01,0x06,0x69, - 0x07,0x58,0x0e,0xb4,0xfe,0xf1,0xfe,0x85,0xe9,0x7c, - 0x35,0x35,0x7c,0xe9,0x01,0x4a,0xe9,0x7c,0x35,0x02, - 0xfe,0x27,0x96,0x96,0x00,0x00,0x00,0x02,0x00,0x5e, - 0xfe,0x14,0x03,0x04,0x05,0x1e,0x00,0x17,0x00,0x1d, - 0x00,0x00,0x01,0x22,0x26,0x10,0x36,0x33,0x20,0x11, - 0x11,0x23,0x11,0x10,0x23,0x22,0x06,0x07,0x06,0x15, - 0x14,0x17,0x16,0x33,0x33,0x07,0x13,0x32,0x14,0x23, - 0x22,0x34,0x01,0x88,0x98,0x92,0xb4,0x96,0x01,0x5c, - 0x5f,0xfd,0x3d,0x60,0x1c,0x39,0x43,0x34,0x62,0x0e, - 0x10,0x0a,0x40,0x40,0x3d,0x01,0xb9,0xde,0x01,0x8c, - 0xfb,0xfd,0x67,0xfb,0x8f,0x04,0x71,0x02,0x3f,0x46, - 0x38,0x70,0x7b,0xc5,0x52,0x40,0x4b,0x01,0xe1,0x96, - 0x96,0x00,0x00,0x02,0x00,0x5e,0xff,0xec,0x03,0x04, - 0x05,0x1e,0x00,0x25,0x00,0x2b,0x00,0x00,0x01,0x22, - 0x26,0x10,0x36,0x33,0x20,0x11,0x10,0x02,0x23,0x22, - 0x27,0x27,0x35,0x16,0x33,0x32,0x36,0x36,0x37,0x36, - 0x11,0x10,0x27,0x26,0x26,0x22,0x06,0x07,0x06,0x15, - 0x14,0x17,0x16,0x33,0x33,0x07,0x13,0x32,0x14,0x23, - 0x22,0x34,0x01,0x88,0x98,0x92,0xb4,0x96,0x01,0x5c, - 0xc0,0xad,0x69,0x57,0x1d,0x67,0x76,0x2b,0x4a,0x46, - 0x18,0x37,0x4a,0x24,0x54,0x74,0x60,0x1c,0x39,0x43, - 0x34,0x62,0x0e,0x10,0x24,0x40,0x40,0x3d,0x01,0xb9, - 0xde,0x01,0x8c,0xfb,0xfd,0x67,0xfe,0xb2,0xfe,0xb5, - 0x0f,0x05,0x59,0x13,0x1f,0x50,0x3f,0x8e,0x01,0x03, - 0x01,0x4d,0x7f,0x3e,0x35,0x46,0x38,0x70,0x7b,0xc5, - 0x52,0x40,0x4b,0x01,0xe1,0x96,0x96,0x00,0x00,0x02, - 0x00,0x3b,0x00,0x00,0x02,0xa9,0x05,0x0a,0x00,0x12, - 0x00,0x18,0x00,0x00,0x21,0x21,0x35,0x21,0x03,0x01, - 0x33,0x01,0x17,0x36,0x36,0x37,0x13,0x33,0x03,0x06, - 0x06,0x07,0x13,0x01,0x32,0x14,0x23,0x22,0x34,0x02, - 0xa1,0xfd,0x9a,0x01,0xed,0xd5,0xfe,0xe8,0x65,0x01, - 0x19,0x07,0x30,0x2c,0x0f,0x20,0x5e,0x1f,0x14,0x43, - 0x49,0xb7,0xfe,0x20,0x40,0x40,0x3d,0x54,0x01,0xfd, - 0x02,0xb9,0xfd,0x47,0x13,0x4d,0xc5,0x85,0x01,0x35, - 0xfe,0xcb,0xc6,0xe3,0x50,0xfe,0x4f,0x01,0x81,0x96, - 0x96,0x00,0x00,0x00,0x00,0x03,0x00,0x91,0xfe,0x14, - 0x03,0x0d,0x05,0x0a,0x00,0x19,0x00,0x1d,0x00,0x23, - 0x00,0x00,0x25,0x15,0x23,0x35,0x34,0x37,0x37,0x3e, - 0x03,0x37,0x13,0x21,0x35,0x21,0x15,0x03,0x0e,0x05, - 0x07,0x06,0x01,0x11,0x33,0x11,0x13,0x32,0x14,0x23, - 0x22,0x34,0x01,0xd8,0x5d,0x09,0x0e,0x0b,0x3a,0x0b, - 0x1d,0x03,0xac,0xfd,0xe3,0x02,0x7c,0xac,0x0c,0x21, - 0x1a,0x0f,0x15,0x0c,0x06,0x0c,0xfe,0xba,0x5f,0x92, - 0x40,0x40,0x3d,0x11,0x11,0x11,0x27,0x2d,0x49,0x35, - 0xd4,0x2a,0x64,0x0c,0x02,0x65,0x54,0x54,0xfd,0x9b, - 0x29,0x78,0x5c,0x3c,0x52,0x39,0x1f,0x3e,0xfd,0xe4, - 0x04,0xe3,0xfb,0x1d,0x04,0xd5,0x96,0x96,0x00,0x00, - 0x00,0x02,0x00,0x17,0x00,0x00,0x02,0x10,0x05,0x1e, - 0x00,0x13,0x00,0x19,0x00,0x00,0x13,0x36,0x32,0x1e, - 0x02,0x17,0x16,0x15,0x11,0x23,0x11,0x34,0x2e,0x02, - 0x23,0x22,0x07,0x07,0x13,0x32,0x14,0x23,0x22,0x34, - 0x17,0x4d,0x9c,0x5c,0x4f,0x32,0x12,0x21,0x5f,0x14, - 0x3b,0x55,0x39,0x56,0x50,0x17,0xc5,0x40,0x40,0x3d, - 0x05,0x14,0x0a,0x0b,0x1f,0x33,0x28,0x49,0x9a,0xfc, - 0x4a,0x03,0xb6,0x5c,0x69,0x3c,0x11,0x08,0x03,0xfe, - 0x2c,0x96,0x96,0x00,0x00,0x02,0x00,0x4a,0x00,0x00, - 0x03,0xce,0x05,0x0a,0x00,0x1e,0x00,0x24,0x00,0x00, - 0x21,0x23,0x03,0x33,0x13,0x36,0x36,0x37,0x37,0x33, - 0x07,0x0e,0x03,0x07,0x13,0x33,0x32,0x36,0x37,0x36, - 0x13,0x13,0x33,0x03,0x06,0x07,0x0e,0x02,0x13,0x32, - 0x14,0x23,0x22,0x34,0x01,0x20,0x69,0x6d,0x58,0x3d, - 0x75,0x70,0x16,0x19,0x54,0x19,0x0d,0x27,0x49,0x74, - 0x56,0x20,0x19,0x73,0xc3,0x44,0x8c,0x1d,0x36,0x55, - 0x37,0x17,0x5a,0x33,0x89,0xcd,0x6f,0x40,0x40,0x3d, - 0x05,0x0a,0xfd,0x23,0x35,0xd4,0xd6,0xfe,0xfe,0x7e, - 0xac,0x92,0x60,0x20,0xfe,0x87,0x62,0x57,0xb3,0x01, - 0x1c,0x02,0x2b,0xfd,0xd5,0xec,0xaf,0x61,0x8d,0x56, - 0x02,0x03,0x96,0x96,0x00,0x02,0x00,0x10,0x00,0x00, - 0x02,0xe9,0x05,0x1e,0x00,0x1e,0x00,0x24,0x00,0x00, - 0x13,0x36,0x32,0x16,0x16,0x17,0x16,0x15,0x11,0x23, - 0x11,0x34,0x27,0x26,0x27,0x26,0x22,0x07,0x11,0x14, - 0x06,0x23,0x22,0x27,0x35,0x16,0x33,0x32,0x35,0x11, - 0x07,0x01,0x32,0x14,0x23,0x22,0x34,0x40,0xc2,0xd2, - 0x64,0x59,0x1c,0x3c,0x5f,0x28,0x22,0x56,0x24,0x51, - 0x85,0x49,0x49,0x26,0x28,0x2c,0x11,0x44,0x51,0x01, - 0x7d,0x40,0x40,0x3d,0x05,0x08,0x16,0x11,0x2e,0x28, - 0x56,0xab,0xfc,0x4a,0x03,0xb6,0x88,0x40,0x37,0x0d, - 0x06,0x07,0xfc,0x0b,0x6f,0x5d,0x08,0x5b,0x08,0x71, - 0x03,0xec,0x07,0xfe,0x38,0x96,0x96,0x00,0x00,0x00, - 0x00,0x02,0x00,0x67,0x00,0x00,0x00,0xf0,0x06,0x18, - 0x00,0x05,0x00,0x09,0x00,0x00,0x13,0x32,0x14,0x23, - 0x22,0x34,0x13,0x11,0x33,0x11,0xa4,0x40,0x40,0x3d, - 0x2a,0x5f,0x06,0x18,0x96,0x96,0xf9,0xe8,0x05,0x0a, - 0xfa,0xf6,0x00,0x00,0x00,0x01,0xff,0x15,0x05,0xa9, - 0x00,0xeb,0x05,0xfc,0x00,0x03,0x00,0x00,0x13,0x21, - 0x35,0x21,0xeb,0xfe,0x2a,0x01,0xd6,0x05,0xa9,0x53, - 0x00,0x00,0x00,0x00,0x00,0x20,0x01,0x86,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x75,0x00,0x00, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x20, - 0x00,0x75,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x02, - 0x00,0x07,0x00,0x95,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x03,0x00,0x28,0x00,0x9c,0x00,0x01,0x00,0x00, - 0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x75,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x3c,0x00,0xc4, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x1d, - 0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x07, - 0x00,0x52,0x01,0x1d,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x08,0x00,0x22,0x01,0x6f,0x00,0x01,0x00,0x00, - 0x00,0x00,0x00,0x0b,0x00,0x32,0x01,0x91,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x3c,0x01,0xc3, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x0d,0x00,0x2e, - 0x01,0xff,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x0e, - 0x00,0x2a,0x02,0x2d,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x10,0x00,0x1a,0x02,0x57,0x00,0x01,0x00,0x00, - 0x00,0x00,0x00,0x11,0x00,0x05,0x02,0x71,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x20,0x00,0x75, - 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x00,0x00,0xea, - 0x02,0x76,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x01, - 0x00,0x40,0x03,0x60,0x00,0x03,0x00,0x01,0x04,0x09, - 0x00,0x02,0x00,0x0e,0x03,0xa0,0x00,0x03,0x00,0x01, - 0x04,0x09,0x00,0x03,0x00,0x50,0x03,0xae,0x00,0x03, - 0x00,0x01,0x04,0x09,0x00,0x04,0x00,0x40,0x03,0x60, - 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x05,0x00,0x78, - 0x03,0xfe,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x06, - 0x00,0x3a,0x04,0x76,0x00,0x03,0x00,0x01,0x04,0x09, - 0x00,0x07,0x00,0xa4,0x04,0xb0,0x00,0x03,0x00,0x01, - 0x04,0x09,0x00,0x08,0x00,0x44,0x05,0x54,0x00,0x03, - 0x00,0x01,0x04,0x09,0x00,0x0b,0x00,0x64,0x05,0x98, - 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x0c,0x00,0x78, - 0x05,0xfc,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x0d, - 0x00,0x5c,0x06,0x74,0x00,0x03,0x00,0x01,0x04,0x09, - 0x00,0x0e,0x00,0x54,0x06,0xd0,0x00,0x03,0x00,0x01, - 0x04,0x09,0x00,0x10,0x00,0x34,0x07,0x24,0x00,0x03, - 0x00,0x01,0x04,0x09,0x00,0x11,0x00,0x0a,0x07,0x58, - 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x12,0x00,0x40, - 0x03,0x60,0x44,0x69,0x67,0x69,0x74,0x69,0x7a,0x65, - 0x64,0x20,0x64,0x61,0x74,0x61,0x20,0x63,0x6f,0x70, - 0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29, - 0x20,0x32,0x30,0x31,0x31,0x2c,0x20,0x47,0x6f,0x6f, - 0x67,0x6c,0x65,0x20,0x43,0x6f,0x72,0x70,0x6f,0x72, - 0x61,0x74,0x69,0x6f,0x6e,0x2e,0x20,0x43,0x6f,0x70, - 0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x63,0x29, - 0x20,0x32,0x30,0x31,0x32,0x2c,0x20,0x32,0x30,0x31, - 0x33,0x20,0x59,0x61,0x6e,0x65,0x6b,0x20,0x49,0x6f, - 0x6e,0x74,0x65,0x66,0x20,0x28,0x79,0x61,0x6e,0x65, - 0x6b,0x40,0x6e,0x65,0x74,0x76,0x69,0x73,0x69,0x6f, - 0x6e,0x2e,0x6e,0x65,0x74,0x2e,0x69,0x6c,0x29,0x4f, - 0x70,0x65,0x6e,0x20,0x53,0x61,0x6e,0x73,0x20,0x48, - 0x65,0x62,0x72,0x65,0x77,0x20,0x43,0x6f,0x6e,0x64, - 0x65,0x6e,0x73,0x65,0x64,0x20,0x4c,0x69,0x67,0x68, - 0x74,0x52,0x65,0x67,0x75,0x6c,0x61,0x72,0x32,0x2e, - 0x30,0x30,0x31,0x3b,0x55,0x4b,0x57,0x4e,0x3b,0x4f, - 0x70,0x65,0x6e,0x53,0x61,0x6e,0x73,0x48,0x65,0x62, - 0x72,0x65,0x77,0x43,0x6f,0x6e,0x64,0x65,0x6e,0x73, - 0x65,0x64,0x2d,0x4c,0x69,0x67,0x68,0x74,0x56,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x20,0x32,0x2e,0x30,0x30, - 0x31,0x3b,0x50,0x53,0x20,0x30,0x30,0x32,0x2e,0x30, - 0x30,0x31,0x3b,0x68,0x6f,0x74,0x63,0x6f,0x6e,0x76, - 0x20,0x31,0x2e,0x30,0x2e,0x37,0x30,0x3b,0x6d,0x61, - 0x6b,0x65,0x6f,0x74,0x66,0x2e,0x6c,0x69,0x62,0x32, - 0x2e,0x35,0x2e,0x35,0x38,0x33,0x32,0x39,0x4f,0x70, - 0x65,0x6e,0x53,0x61,0x6e,0x73,0x48,0x65,0x62,0x72, - 0x65,0x77,0x43,0x6f,0x6e,0x64,0x65,0x6e,0x73,0x65, - 0x64,0x2d,0x4c,0x69,0x67,0x68,0x74,0x4f,0x70,0x65, - 0x6e,0x20,0x53,0x61,0x6e,0x73,0x20,0x69,0x73,0x20, - 0x61,0x20,0x74,0x72,0x61,0x64,0x65,0x6d,0x61,0x72, - 0x6b,0x20,0x6f,0x66,0x20,0x47,0x6f,0x6f,0x67,0x6c, - 0x65,0x20,0x61,0x6e,0x64,0x20,0x6d,0x61,0x79,0x20, - 0x62,0x65,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65, - 0x72,0x65,0x64,0x20,0x69,0x6e,0x20,0x63,0x65,0x72, - 0x74,0x61,0x69,0x6e,0x20,0x6a,0x75,0x72,0x69,0x73, - 0x64,0x69,0x63,0x74,0x69,0x6f,0x6e,0x73,0x2e,0x41, - 0x73,0x63,0x65,0x6e,0x64,0x65,0x72,0x20,0x43,0x6f, - 0x72,0x70,0x6f,0x72,0x61,0x74,0x69,0x6f,0x6e,0x2c, - 0x20,0x59,0x61,0x6e,0x65,0x6b,0x20,0x49,0x6f,0x6e, - 0x74,0x65,0x66,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x61,0x73,0x63,0x65,0x6e,0x64, - 0x65,0x72,0x63,0x6f,0x72,0x70,0x2e,0x63,0x6f,0x6d, - 0x2f,0x20,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x66,0x6f,0x6e,0x74,0x65,0x66,0x2e, - 0x63,0x6f,0x6d,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x61,0x73,0x63,0x65,0x6e,0x64, - 0x65,0x72,0x63,0x6f,0x72,0x70,0x2e,0x63,0x6f,0x6d, - 0x2f,0x74,0x79,0x70,0x65,0x64,0x65,0x73,0x69,0x67, - 0x6e,0x65,0x72,0x73,0x2e,0x68,0x74,0x6d,0x6c,0x2c, - 0x20,0x59,0x61,0x6e,0x65,0x6b,0x20,0x49,0x6f,0x6e, - 0x74,0x65,0x66,0x4c,0x69,0x63,0x65,0x6e,0x73,0x65, - 0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74,0x68, - 0x65,0x20,0x41,0x70,0x61,0x63,0x68,0x65,0x20,0x4c, - 0x69,0x63,0x65,0x6e,0x73,0x65,0x2c,0x20,0x56,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x20,0x32,0x2e,0x30,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e, - 0x61,0x70,0x61,0x63,0x68,0x65,0x2e,0x6f,0x72,0x67, - 0x2f,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x73,0x2f, - 0x4c,0x49,0x43,0x45,0x4e,0x53,0x45,0x2d,0x32,0x2e, - 0x30,0x4f,0x70,0x65,0x6e,0x20,0x53,0x61,0x6e,0x73, - 0x20,0x48,0x65,0x62,0x72,0x65,0x77,0x20,0x43,0x6f, - 0x6e,0x64,0x65,0x6e,0x73,0x65,0x64,0x4c,0x69,0x67, - 0x68,0x74,0x00,0x44,0x00,0x69,0x00,0x67,0x00,0x69, - 0x00,0x74,0x00,0x69,0x00,0x7a,0x00,0x65,0x00,0x64, - 0x00,0x20,0x00,0x64,0x00,0x61,0x00,0x74,0x00,0x61, - 0x00,0x20,0x00,0x63,0x00,0x6f,0x00,0x70,0x00,0x79, - 0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74, - 0x00,0x20,0x00,0x28,0x00,0x63,0x00,0x29,0x00,0x20, - 0x00,0x32,0x00,0x30,0x00,0x31,0x00,0x31,0x00,0x2c, - 0x00,0x20,0x00,0x47,0x00,0x6f,0x00,0x6f,0x00,0x67, - 0x00,0x6c,0x00,0x65,0x00,0x20,0x00,0x43,0x00,0x6f, - 0x00,0x72,0x00,0x70,0x00,0x6f,0x00,0x72,0x00,0x61, - 0x00,0x74,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x2e, - 0x00,0x20,0x00,0x43,0x00,0x6f,0x00,0x70,0x00,0x79, - 0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74, - 0x00,0x20,0x00,0x28,0x00,0x63,0x00,0x29,0x00,0x20, - 0x00,0x32,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x2c, - 0x00,0x20,0x00,0x32,0x00,0x30,0x00,0x31,0x00,0x33, - 0x00,0x20,0x00,0x59,0x00,0x61,0x00,0x6e,0x00,0x65, - 0x00,0x6b,0x00,0x20,0x00,0x49,0x00,0x6f,0x00,0x6e, - 0x00,0x74,0x00,0x65,0x00,0x66,0x00,0x20,0x00,0x28, - 0x00,0x79,0x00,0x61,0x00,0x6e,0x00,0x65,0x00,0x6b, - 0x00,0x40,0x00,0x6e,0x00,0x65,0x00,0x74,0x00,0x76, - 0x00,0x69,0x00,0x73,0x00,0x69,0x00,0x6f,0x00,0x6e, - 0x00,0x2e,0x00,0x6e,0x00,0x65,0x00,0x74,0x00,0x2e, - 0x00,0x69,0x00,0x6c,0x00,0x29,0x00,0x4f,0x00,0x70, - 0x00,0x65,0x00,0x6e,0x00,0x20,0x00,0x53,0x00,0x61, - 0x00,0x6e,0x00,0x73,0x00,0x20,0x00,0x48,0x00,0x65, - 0x00,0x62,0x00,0x72,0x00,0x65,0x00,0x77,0x00,0x20, - 0x00,0x43,0x00,0x6f,0x00,0x6e,0x00,0x64,0x00,0x65, - 0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64,0x00,0x20, - 0x00,0x4c,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74, - 0x00,0x52,0x00,0x65,0x00,0x67,0x00,0x75,0x00,0x6c, - 0x00,0x61,0x00,0x72,0x00,0x32,0x00,0x2e,0x00,0x30, - 0x00,0x30,0x00,0x31,0x00,0x3b,0x00,0x55,0x00,0x4b, - 0x00,0x57,0x00,0x4e,0x00,0x3b,0x00,0x4f,0x00,0x70, - 0x00,0x65,0x00,0x6e,0x00,0x53,0x00,0x61,0x00,0x6e, - 0x00,0x73,0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72, - 0x00,0x65,0x00,0x77,0x00,0x43,0x00,0x6f,0x00,0x6e, - 0x00,0x64,0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65, - 0x00,0x64,0x00,0x2d,0x00,0x4c,0x00,0x69,0x00,0x67, - 0x00,0x68,0x00,0x74,0x00,0x56,0x00,0x65,0x00,0x72, - 0x00,0x73,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x20, - 0x00,0x32,0x00,0x2e,0x00,0x30,0x00,0x30,0x00,0x31, - 0x00,0x3b,0x00,0x50,0x00,0x53,0x00,0x20,0x00,0x30, - 0x00,0x30,0x00,0x32,0x00,0x2e,0x00,0x30,0x00,0x30, - 0x00,0x31,0x00,0x3b,0x00,0x68,0x00,0x6f,0x00,0x74, - 0x00,0x63,0x00,0x6f,0x00,0x6e,0x00,0x76,0x00,0x20, - 0x00,0x31,0x00,0x2e,0x00,0x30,0x00,0x2e,0x00,0x37, - 0x00,0x30,0x00,0x3b,0x00,0x6d,0x00,0x61,0x00,0x6b, - 0x00,0x65,0x00,0x6f,0x00,0x74,0x00,0x66,0x00,0x2e, - 0x00,0x6c,0x00,0x69,0x00,0x62,0x00,0x32,0x00,0x2e, - 0x00,0x35,0x00,0x2e,0x00,0x35,0x00,0x38,0x00,0x33, - 0x00,0x32,0x00,0x39,0x00,0x4f,0x00,0x70,0x00,0x65, - 0x00,0x6e,0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73, - 0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65, - 0x00,0x77,0x00,0x43,0x00,0x6f,0x00,0x6e,0x00,0x64, - 0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64, - 0x00,0x2d,0x00,0x4c,0x00,0x69,0x00,0x67,0x00,0x68, - 0x00,0x74,0x00,0x4f,0x00,0x70,0x00,0x65,0x00,0x6e, - 0x00,0x20,0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73, - 0x00,0x20,0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61, - 0x00,0x20,0x00,0x74,0x00,0x72,0x00,0x61,0x00,0x64, - 0x00,0x65,0x00,0x6d,0x00,0x61,0x00,0x72,0x00,0x6b, - 0x00,0x20,0x00,0x6f,0x00,0x66,0x00,0x20,0x00,0x47, - 0x00,0x6f,0x00,0x6f,0x00,0x67,0x00,0x6c,0x00,0x65, - 0x00,0x20,0x00,0x61,0x00,0x6e,0x00,0x64,0x00,0x20, - 0x00,0x6d,0x00,0x61,0x00,0x79,0x00,0x20,0x00,0x62, - 0x00,0x65,0x00,0x20,0x00,0x72,0x00,0x65,0x00,0x67, - 0x00,0x69,0x00,0x73,0x00,0x74,0x00,0x65,0x00,0x72, - 0x00,0x65,0x00,0x64,0x00,0x20,0x00,0x69,0x00,0x6e, - 0x00,0x20,0x00,0x63,0x00,0x65,0x00,0x72,0x00,0x74, - 0x00,0x61,0x00,0x69,0x00,0x6e,0x00,0x20,0x00,0x6a, - 0x00,0x75,0x00,0x72,0x00,0x69,0x00,0x73,0x00,0x64, - 0x00,0x69,0x00,0x63,0x00,0x74,0x00,0x69,0x00,0x6f, - 0x00,0x6e,0x00,0x73,0x00,0x2e,0x00,0x41,0x00,0x73, - 0x00,0x63,0x00,0x65,0x00,0x6e,0x00,0x64,0x00,0x65, - 0x00,0x72,0x00,0x20,0x00,0x43,0x00,0x6f,0x00,0x72, - 0x00,0x70,0x00,0x6f,0x00,0x72,0x00,0x61,0x00,0x74, - 0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x2c,0x00,0x20, - 0x00,0x59,0x00,0x61,0x00,0x6e,0x00,0x65,0x00,0x6b, - 0x00,0x20,0x00,0x49,0x00,0x6f,0x00,0x6e,0x00,0x74, - 0x00,0x65,0x00,0x66,0x00,0x68,0x00,0x74,0x00,0x74, - 0x00,0x70,0x00,0x3a,0x00,0x2f,0x00,0x2f,0x00,0x77, - 0x00,0x77,0x00,0x77,0x00,0x2e,0x00,0x61,0x00,0x73, - 0x00,0x63,0x00,0x65,0x00,0x6e,0x00,0x64,0x00,0x65, - 0x00,0x72,0x00,0x63,0x00,0x6f,0x00,0x72,0x00,0x70, - 0x00,0x2e,0x00,0x63,0x00,0x6f,0x00,0x6d,0x00,0x2f, - 0x00,0x20,0x00,0x68,0x00,0x74,0x00,0x74,0x00,0x70, - 0x00,0x3a,0x00,0x2f,0x00,0x2f,0x00,0x77,0x00,0x77, - 0x00,0x77,0x00,0x2e,0x00,0x66,0x00,0x6f,0x00,0x6e, - 0x00,0x74,0x00,0x65,0x00,0x66,0x00,0x2e,0x00,0x63, - 0x00,0x6f,0x00,0x6d,0x00,0x68,0x00,0x74,0x00,0x74, - 0x00,0x70,0x00,0x3a,0x00,0x2f,0x00,0x2f,0x00,0x77, - 0x00,0x77,0x00,0x77,0x00,0x2e,0x00,0x61,0x00,0x73, - 0x00,0x63,0x00,0x65,0x00,0x6e,0x00,0x64,0x00,0x65, - 0x00,0x72,0x00,0x63,0x00,0x6f,0x00,0x72,0x00,0x70, - 0x00,0x2e,0x00,0x63,0x00,0x6f,0x00,0x6d,0x00,0x2f, - 0x00,0x74,0x00,0x79,0x00,0x70,0x00,0x65,0x00,0x64, - 0x00,0x65,0x00,0x73,0x00,0x69,0x00,0x67,0x00,0x6e, - 0x00,0x65,0x00,0x72,0x00,0x73,0x00,0x2e,0x00,0x68, - 0x00,0x74,0x00,0x6d,0x00,0x6c,0x00,0x2c,0x00,0x20, - 0x00,0x59,0x00,0x61,0x00,0x6e,0x00,0x65,0x00,0x6b, - 0x00,0x20,0x00,0x49,0x00,0x6f,0x00,0x6e,0x00,0x74, - 0x00,0x65,0x00,0x66,0x00,0x4c,0x00,0x69,0x00,0x63, - 0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64, - 0x00,0x20,0x00,0x75,0x00,0x6e,0x00,0x64,0x00,0x65, - 0x00,0x72,0x00,0x20,0x00,0x74,0x00,0x68,0x00,0x65, - 0x00,0x20,0x00,0x41,0x00,0x70,0x00,0x61,0x00,0x63, - 0x00,0x68,0x00,0x65,0x00,0x20,0x00,0x4c,0x00,0x69, - 0x00,0x63,0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65, - 0x00,0x2c,0x00,0x20,0x00,0x56,0x00,0x65,0x00,0x72, - 0x00,0x73,0x00,0x69,0x00,0x6f,0x00,0x6e,0x00,0x20, - 0x00,0x32,0x00,0x2e,0x00,0x30,0x00,0x68,0x00,0x74, - 0x00,0x74,0x00,0x70,0x00,0x3a,0x00,0x2f,0x00,0x2f, - 0x00,0x77,0x00,0x77,0x00,0x77,0x00,0x2e,0x00,0x61, - 0x00,0x70,0x00,0x61,0x00,0x63,0x00,0x68,0x00,0x65, - 0x00,0x2e,0x00,0x6f,0x00,0x72,0x00,0x67,0x00,0x2f, - 0x00,0x6c,0x00,0x69,0x00,0x63,0x00,0x65,0x00,0x6e, - 0x00,0x73,0x00,0x65,0x00,0x73,0x00,0x2f,0x00,0x4c, - 0x00,0x49,0x00,0x43,0x00,0x45,0x00,0x4e,0x00,0x53, - 0x00,0x45,0x00,0x2d,0x00,0x32,0x00,0x2e,0x00,0x30, - 0x00,0x4f,0x00,0x70,0x00,0x65,0x00,0x6e,0x00,0x20, - 0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73,0x00,0x20, - 0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65, - 0x00,0x77,0x00,0x20,0x00,0x43,0x00,0x6f,0x00,0x6e, - 0x00,0x64,0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65, - 0x00,0x64,0x00,0x4c,0x00,0x69,0x00,0x67,0x00,0x68, - 0x00,0x74,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00, - 0xff,0xb5,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x01,0x37,0x00,0x00,0x00,0x01, - 0x00,0x02,0x01,0x02,0x00,0x03,0x00,0x04,0x00,0x05, - 0x00,0x06,0x00,0x07,0x00,0x08,0x00,0x09,0x00,0x0a, - 0x00,0x0b,0x00,0x0c,0x00,0x0d,0x00,0x0e,0x00,0x0f, - 0x00,0x10,0x00,0x11,0x00,0x12,0x00,0x13,0x00,0x14, - 0x00,0x15,0x00,0x16,0x00,0x17,0x00,0x18,0x00,0x19, - 0x00,0x1a,0x00,0x1b,0x00,0x1c,0x00,0x1d,0x00,0x1e, - 0x00,0x1f,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23, - 0x00,0x24,0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28, - 0x00,0x29,0x00,0x2a,0x00,0x2b,0x00,0x2c,0x00,0x2d, - 0x00,0x2e,0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32, - 0x00,0x33,0x00,0x34,0x00,0x35,0x00,0x36,0x00,0x37, - 0x00,0x38,0x00,0x39,0x00,0x3a,0x00,0x3b,0x00,0x3c, - 0x00,0x3d,0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41, - 0x00,0x42,0x00,0x43,0x00,0x44,0x00,0x45,0x00,0x46, - 0x00,0x47,0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b, - 0x00,0x4c,0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50, - 0x00,0x51,0x00,0x52,0x00,0x53,0x00,0x54,0x00,0x55, - 0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a, - 0x00,0x5b,0x00,0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f, - 0x00,0x60,0x00,0x61,0x01,0x03,0x00,0xa3,0x00,0x84, - 0x00,0x85,0x00,0xbd,0x00,0x96,0x00,0xe8,0x00,0x86, - 0x00,0x8e,0x00,0x8b,0x00,0x9d,0x00,0xa9,0x00,0xa4, - 0x01,0x04,0x00,0x8a,0x01,0x05,0x00,0x83,0x00,0x93, - 0x00,0xf2,0x00,0xf3,0x00,0x8d,0x01,0x06,0x00,0x88, - 0x00,0xc3,0x00,0xde,0x00,0xf1,0x00,0x9e,0x00,0xaa, - 0x00,0xf5,0x00,0xf4,0x00,0xf6,0x00,0xa2,0x00,0xad, - 0x00,0xc9,0x00,0xc7,0x00,0xae,0x00,0x62,0x00,0x63, - 0x00,0x90,0x00,0x64,0x00,0xcb,0x00,0x65,0x00,0xc8, - 0x00,0xca,0x00,0xcf,0x00,0xcc,0x00,0xcd,0x00,0xce, - 0x00,0xe9,0x00,0x66,0x00,0xd3,0x00,0xd0,0x00,0xd1, - 0x00,0xaf,0x00,0x67,0x00,0xf0,0x00,0x91,0x00,0xd6, - 0x00,0xd4,0x00,0xd5,0x00,0x68,0x00,0xeb,0x00,0xed, - 0x00,0x89,0x00,0x6a,0x00,0x69,0x00,0x6b,0x00,0x6d, - 0x00,0x6c,0x00,0x6e,0x00,0xa0,0x00,0x6f,0x00,0x71, - 0x00,0x70,0x00,0x72,0x00,0x73,0x00,0x75,0x00,0x74, - 0x00,0x76,0x00,0x77,0x00,0xea,0x00,0x78,0x00,0x7a, - 0x00,0x79,0x00,0x7b,0x00,0x7d,0x00,0x7c,0x00,0xb8, - 0x00,0xa1,0x00,0x7f,0x00,0x7e,0x00,0x80,0x00,0x81, - 0x00,0xec,0x00,0xee,0x00,0xba,0x00,0xd7,0x00,0xb0, - 0x00,0xb1,0x00,0xe4,0x00,0xe5,0x00,0xbb,0x00,0xe6, - 0x00,0xe7,0x00,0xa6,0x00,0xd8,0x00,0xe1,0x00,0xdb, - 0x00,0xdc,0x00,0xdd,0x00,0xe0,0x00,0xd9,0x00,0xdf, - 0x01,0x07,0x01,0x08,0x01,0x09,0x01,0x0a,0x01,0x0b, - 0x01,0x0c,0x01,0x0d,0x01,0x0e,0x01,0x0f,0x01,0x10, - 0x01,0x11,0x01,0x12,0x01,0x13,0x01,0x14,0x01,0x15, - 0x01,0x16,0x01,0x17,0x01,0x18,0x01,0x19,0x01,0x1a, - 0x01,0x1b,0x01,0x1c,0x01,0x1d,0x01,0x1e,0x01,0x1f, - 0x01,0x20,0x01,0x21,0x01,0x22,0x01,0x23,0x01,0x24, - 0x01,0x25,0x01,0x26,0x01,0x27,0x01,0x28,0x01,0x29, - 0x01,0x2a,0x01,0x2b,0x01,0x2c,0x01,0x2d,0x01,0x2e, - 0x01,0x2f,0x01,0x30,0x01,0x31,0x01,0x32,0x01,0x33, - 0x01,0x34,0x01,0x35,0x00,0xb2,0x00,0xb3,0x00,0xb6, - 0x00,0xb7,0x00,0xc4,0x00,0xb4,0x00,0xb5,0x00,0xc5, - 0x00,0x82,0x00,0xc2,0x00,0x87,0x00,0xab,0x00,0xc6, - 0x00,0xbe,0x00,0xbf,0x00,0xbc,0x01,0x36,0x01,0x37, - 0x00,0x8c,0x01,0x38,0x01,0x39,0x01,0x3a,0x01,0x3b, - 0x01,0x3c,0x01,0x3d,0x01,0x3e,0x01,0x3f,0x01,0x40, - 0x01,0x41,0x01,0x42,0x01,0x43,0x01,0x44,0x01,0x45, - 0x01,0x46,0x01,0x47,0x01,0x48,0x01,0x49,0x01,0x4a, - 0x01,0x4b,0x01,0x4c,0x01,0x4d,0x01,0x4e,0x01,0x4f, - 0x01,0x50,0x01,0x51,0x01,0x52,0x01,0x53,0x01,0x54, - 0x01,0x55,0x01,0x56,0x01,0x57,0x00,0xac,0x02,0x43, - 0x52,0x07,0x75,0x6e,0x69,0x30,0x30,0x41,0x30,0x07, - 0x75,0x6e,0x69,0x30,0x30,0x41,0x44,0x09,0x6f,0x76, - 0x65,0x72,0x73,0x63,0x6f,0x72,0x65,0x07,0x75,0x6e, - 0x69,0x30,0x30,0x42,0x35,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x42,0x30,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, - 0x31,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x32,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x42,0x33,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x42,0x34,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x42,0x35,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, - 0x36,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x37,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x42,0x38,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x42,0x39,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x42,0x41,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, - 0x42,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x43,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x42,0x44,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x42,0x45,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x43,0x31,0x07,0x75,0x6e,0x69,0x30,0x35,0x43, - 0x32,0x07,0x75,0x6e,0x69,0x30,0x35,0x43,0x37,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x44,0x30,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x44,0x31,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x44,0x32,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, - 0x33,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x34,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x44,0x35,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x44,0x36,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x44,0x37,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, - 0x38,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x39,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x44,0x41,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x44,0x42,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x44,0x43,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, - 0x44,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x45,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x44,0x46,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x45,0x30,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x45,0x31,0x07,0x75,0x6e,0x69,0x30,0x35,0x45, - 0x32,0x07,0x75,0x6e,0x69,0x30,0x35,0x45,0x33,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x45,0x34,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x45,0x35,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x45,0x36,0x07,0x75,0x6e,0x69,0x30,0x35,0x45, - 0x37,0x07,0x75,0x6e,0x69,0x30,0x35,0x45,0x38,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x45,0x39,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x45,0x41,0x08,0x67,0x65,0x72,0x65, - 0x73,0x68,0x68,0x62,0x0b,0x67,0x65,0x72,0x73,0x68, - 0x61,0x79,0x69,0x6d,0x68,0x62,0x07,0x75,0x6e,0x69, - 0x32,0x30,0x41,0x41,0x04,0x45,0x75,0x72,0x6f,0x07, - 0x75,0x6e,0x69,0x46,0x42,0x30,0x31,0x07,0x75,0x6e, - 0x69,0x46,0x42,0x30,0x32,0x07,0x75,0x6e,0x69,0x46, - 0x42,0x32,0x41,0x07,0x75,0x6e,0x69,0x46,0x42,0x32, - 0x42,0x13,0x73,0x68,0x69,0x6e,0x64,0x61,0x67,0x65, - 0x73,0x68,0x73,0x68,0x69,0x6e,0x64,0x6f,0x74,0x68, - 0x62,0x12,0x73,0x68,0x69,0x6e,0x64,0x61,0x67,0x65, - 0x73,0x68,0x73,0x69,0x6e,0x64,0x6f,0x74,0x68,0x62, - 0x0b,0x61,0x6c,0x65,0x66,0x70,0x61,0x74,0x61,0x68, - 0x68,0x62,0x0c,0x61,0x6c,0x65,0x66,0x71,0x61,0x6d, - 0x61,0x74,0x73,0x68,0x62,0x0c,0x61,0x6c,0x65,0x66, - 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x62, - 0x65,0x74,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, - 0x0d,0x67,0x69,0x6d,0x65,0x6c,0x64,0x61,0x67,0x65, - 0x73,0x68,0x68,0x62,0x0d,0x64,0x61,0x6c,0x65,0x74, - 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0a,0x68, - 0x65,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x07, - 0x75,0x6e,0x69,0x46,0x42,0x33,0x35,0x0d,0x7a,0x61, - 0x79,0x69,0x6e,0x64,0x61,0x67,0x65,0x73,0x68,0x68, - 0x62,0x0b,0x74,0x65,0x74,0x64,0x61,0x67,0x65,0x73, - 0x68,0x68,0x62,0x0b,0x79,0x6f,0x64,0x64,0x61,0x67, - 0x65,0x73,0x68,0x68,0x62,0x10,0x66,0x69,0x6e,0x61, - 0x6c,0x6b,0x61,0x66,0x64,0x61,0x67,0x65,0x73,0x68, - 0x68,0x62,0x0b,0x6b,0x61,0x66,0x64,0x61,0x67,0x65, - 0x73,0x68,0x68,0x62,0x0d,0x6c,0x61,0x6d,0x65,0x64, - 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x6d, - 0x65,0x6d,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, - 0x0b,0x6e,0x75,0x6e,0x64,0x61,0x67,0x65,0x73,0x68, - 0x68,0x62,0x0e,0x73,0x61,0x6d,0x65,0x6b,0x68,0x64, - 0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0f,0x66,0x69, - 0x6e,0x61,0x6c,0x70,0x65,0x64,0x61,0x67,0x65,0x73, - 0x68,0x68,0x62,0x0a,0x70,0x65,0x64,0x61,0x67,0x65, - 0x73,0x68,0x68,0x62,0x0d,0x74,0x73,0x61,0x64,0x69, - 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x71, - 0x6f,0x66,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, - 0x0c,0x72,0x65,0x73,0x68,0x64,0x61,0x67,0x65,0x73, - 0x68,0x68,0x62,0x0c,0x73,0x68,0x69,0x6e,0x64,0x61, - 0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x74,0x61,0x76, - 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x07,0x75, - 0x6e,0x69,0x46,0x42,0x34,0x42,0x07,0x72,0x61,0x66, - 0x65,0x68,0x68,0x62,0x00,0x00,0x00,0x01,0x00,0x01, - 0xff,0xff,0x00,0x0f,0x00,0x00,0x00,0x01,0x00,0x00, - 0x00,0x00,0xcc,0x6d,0xb1,0x55,0x00,0x00,0x00,0x00, - 0xcd,0x64,0xfe,0x51,0x00,0x00,0x00,0x00,0xcd,0xac, - 0x5d,0x6c,0x00,0x01,0x00,0x00,0x00,0x0c,0x00,0x00, - 0x00,0x2e,0x00,0x00,0x00,0x02,0x00,0x05,0x00,0x03, - 0x00,0xd3,0x00,0x01,0x00,0xd4,0x00,0xe1,0x00,0x03, - 0x00,0xe2,0x00,0xe2,0x00,0x01,0x00,0xe3,0x00,0xe5, - 0x00,0x03,0x00,0xe6,0x01,0x35,0x00,0x01,0x00,0x04, - 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, - 0x00,0x00,0x00,0x0a,0x00,0x1e,0x00,0x2c,0x00,0x01, - 0x68,0x65,0x62,0x72,0x00,0x08,0x00,0x04,0x00,0x00, - 0x00,0x00,0xff,0xff,0x00,0x01,0x00,0x00,0x00,0x01, - 0x6d,0x61,0x72,0x6b,0x00,0x08,0x00,0x00,0x00,0x01, - 0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x04,0x00,0x00, - 0x00,0x01,0x00,0x08,0x00,0x01,0x00,0x0c,0x00,0x1c, - 0x00,0x04,0x00,0x26,0x00,0x84,0x00,0x02,0x00,0x02, - 0x00,0xd4,0x00,0xe1,0x00,0x00,0x00,0xe3,0x00,0xe5, - 0x00,0x0e,0x00,0x02,0x00,0x01,0x00,0xe6,0x01,0x00, - 0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x58,0x00,0x00, - 0x00,0x58,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x58, - 0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x58,0x00,0x00, - 0x00,0x58,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x58, - 0x00,0x01,0x00,0x52,0x00,0x01,0x00,0x52,0x00,0x00, - 0x00,0x58,0x00,0x02,0x00,0x46,0x00,0x00,0x00,0x58, - 0x00,0x03,0x00,0x4c,0x00,0x01,0x00,0x52,0x00,0x00, - 0x00,0x58,0x00,0x01,0x00,0x00,0x02,0x9e,0x00,0x01, - 0x00,0x00,0x04,0x5e,0x00,0x01,0xff,0xff,0x04,0x5e, - 0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x1b,0x00,0xda, - 0x02,0x6c,0x00,0xe0,0x02,0x78,0x00,0xe6,0x00,0xec, - 0x00,0xf2,0x02,0x78,0x00,0xf8,0x00,0xfe,0x01,0x04, - 0x02,0x78,0x01,0x0a,0x01,0x10,0x02,0x48,0x02,0x78, - 0x01,0x7c,0x01,0x16,0x01,0x88,0x02,0x78,0x01,0x1c, - 0x01,0x22,0x01,0x28,0x02,0x78,0x01,0x2e,0x01,0xca, - 0x01,0x34,0x02,0x78,0x01,0x7c,0x02,0x30,0x01,0x88, - 0x02,0x78,0x01,0xc4,0x01,0x3a,0x01,0xd0,0x02,0x78, - 0x01,0x40,0x01,0x46,0x01,0x4c,0x02,0x78,0x01,0x52, - 0x02,0x1e,0x01,0x64,0x02,0x78,0x01,0x58,0x01,0x5e, - 0x01,0x64,0x02,0x78,0x01,0x6a,0x01,0x70,0x01,0x76, - 0x02,0x78,0x01,0x7c,0x01,0x82,0x01,0x88,0x02,0x78, - 0x01,0x8e,0x01,0x94,0x01,0x9a,0x02,0x78,0x01,0xa0, - 0x01,0xa6,0x01,0xac,0x02,0x78,0x01,0xb2,0x01,0xb8, - 0x01,0xbe,0x02,0x78,0x01,0xc4,0x01,0xca,0x01,0xd0, - 0x02,0x78,0x01,0xd6,0x02,0x54,0x01,0xdc,0x02,0x78, - 0x01,0xe2,0x01,0xe8,0x01,0xee,0x02,0x78,0x01,0xf4, - 0x01,0xfa,0x02,0x00,0x02,0x78,0x02,0x06,0x02,0x0c, - 0x02,0x12,0x02,0x78,0x02,0x18,0x02,0x1e,0x02,0x24, - 0x02,0x78,0x02,0x2a,0x02,0x30,0x02,0x36,0x02,0x78, - 0x02,0x3c,0x02,0x42,0x02,0x48,0x02,0x78,0x02,0x4e, - 0x02,0x54,0x02,0x5a,0x02,0x60,0x02,0x66,0x02,0x6c, - 0x02,0x72,0x02,0x78,0x00,0x01,0x01,0x75,0x00,0x00, - 0x00,0x01,0x01,0x39,0x01,0x33,0x00,0x01,0x01,0x99, - 0x00,0x00,0x00,0x01,0x00,0x81,0x04,0x5e,0x00,0x01, - 0x01,0x1b,0x02,0x9e,0x00,0x01,0x01,0x48,0x00,0x00, - 0x00,0x01,0x00,0xc8,0x04,0x5e,0x00,0x01,0x00,0xfd, - 0x02,0x9e,0x00,0x01,0x01,0x53,0x00,0x00,0x00,0x01, - 0x00,0x49,0x04,0x5e,0x00,0x01,0x00,0xb4,0x04,0x5e, - 0x00,0x01,0x00,0xc1,0x00,0x00,0x00,0x01,0x00,0xa3, - 0x04,0x5e,0x00,0x01,0x00,0x09,0x02,0x9e,0x00,0x01, - 0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x29,0x02,0x9e, - 0x00,0x01,0x00,0x8c,0x04,0x5e,0x00,0x01,0x00,0xbc, - 0x00,0x00,0x00,0x01,0x00,0xa7,0x04,0x5e,0x00,0x01, - 0x00,0x07,0x03,0x13,0x00,0x01,0x00,0x43,0x01,0x54, - 0x00,0x01,0x01,0x3e,0x00,0x00,0x00,0x01,0x00,0x5d, - 0x04,0x5e,0x00,0x01,0x00,0xc1,0x02,0x9e,0x00,0x01, - 0x01,0x2f,0x00,0x00,0x00,0x01,0xff,0xbd,0x04,0x5e, - 0x00,0x01,0x00,0x93,0x02,0x9e,0x00,0x01,0x01,0xca, - 0x00,0x00,0x00,0x01,0x00,0xbb,0x04,0x5e,0x00,0x01, - 0x01,0xca,0x02,0x9e,0x00,0x01,0x01,0xae,0x00,0x00, - 0x00,0x01,0x00,0x7a,0x04,0x5e,0x00,0x01,0x01,0xae, - 0x02,0x9e,0x00,0x01,0xff,0x53,0x01,0x5b,0x00,0x01, - 0x00,0x85,0x04,0x5e,0x00,0x01,0x00,0x21,0x02,0x9e, - 0x00,0x01,0x01,0x1d,0x00,0x00,0x00,0x01,0x00,0x7f, - 0x04,0x5e,0x00,0x01,0x00,0xa7,0x02,0x9e,0x00,0x01, - 0x01,0xba,0x00,0x00,0x00,0x01,0x00,0x93,0x04,0x5e, - 0x00,0x01,0x01,0xba,0x02,0x9e,0x00,0x01,0x01,0xa7, - 0x00,0x00,0x00,0x01,0x01,0xe7,0x02,0x9e,0x00,0x01, - 0x01,0x39,0x01,0x54,0x00,0x01,0x00,0x99,0x04,0x5e, - 0x00,0x01,0x01,0x97,0x03,0x4f,0x00,0x01,0x01,0xb1, - 0x00,0x00,0x00,0x01,0x00,0x8b,0x04,0x5e,0x00,0x01, - 0x01,0xb1,0x03,0x4f,0x00,0x01,0xff,0x7b,0x01,0x54, - 0x00,0x01,0x00,0x14,0x04,0x5e,0x00,0x01,0x01,0x38, - 0x02,0x2f,0x00,0x01,0x01,0x7a,0x00,0x00,0x00,0x01, - 0x00,0x50,0x04,0x5e,0x00,0x01,0x00,0xc1,0x01,0x61, - 0x00,0x01,0x02,0x57,0x00,0x00,0x00,0x01,0x00,0xad, - 0x04,0x5e,0x00,0x01,0x01,0x83,0x02,0x9e,0x00,0x01, - 0x01,0xe7,0x00,0x00,0x00,0x01,0x00,0x43,0x04,0x5e, - 0x00,0x01,0x00,0xdc,0x02,0x9e,0x00,0x01,0x02,0x0c, - 0x00,0x00,0x00,0x01,0x00,0x6b,0x04,0x5e,0x00,0x01, - 0x02,0x0c,0x01,0xb8,0x00,0x01,0x03,0xa0,0x04,0x5e, - 0x00,0x01,0x01,0xbd,0x00,0x00,0x00,0x01,0x00,0x64, - 0x04,0x5e,0x00,0x01,0x01,0xbd,0x02,0x9e,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, - 0x00,0x0a,0x00,0x1c,0x00,0x1c,0x00,0x01,0x68,0x65, - 0x62,0x72,0x00,0x08,0x00,0x04,0x00,0x00,0x00,0x00, - 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00 -}; - diff --git a/data/converted/opensans_hebrew_condensed_regular_ttf.cpp b/data/converted/opensans_hebrew_condensed_regular_ttf.cpp deleted file mode 100644 index c89da4c625..0000000000 --- a/data/converted/opensans_hebrew_condensed_regular_ttf.cpp +++ /dev/null @@ -1,3245 +0,0 @@ -// this file was auto-generated from "opensans_hebrew_condensed_regular.ttf" by res2h - -#include "../Resources.h" - -const uint16_t opensans_hebrew_condensed_regular_ttf_size = 32364; -const uint8_t opensans_hebrew_condensed_regular_ttf_data[32364] = { - 0x00,0x01,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x04, - 0x00,0x10,0x44,0x53,0x49,0x47,0x00,0x00,0x00,0x01, - 0x00,0x00,0x7e,0x64,0x00,0x00,0x00,0x08,0x46,0x46, - 0x54,0x4d,0x67,0x93,0xcc,0x09,0x00,0x00,0x79,0x84, - 0x00,0x00,0x00,0x1c,0x47,0x44,0x45,0x46,0x04,0xf1, - 0x03,0x96,0x00,0x00,0x79,0xa0,0x00,0x00,0x00,0x38, - 0x47,0x50,0x4f,0x53,0x27,0x89,0xa7,0x91,0x00,0x00, - 0x79,0xd8,0x00,0x00,0x04,0x6c,0x47,0x53,0x55,0x42, - 0x68,0x95,0x62,0x93,0x00,0x00,0x7e,0x44,0x00,0x00, - 0x00,0x20,0x4f,0x53,0x2f,0x32,0x7f,0xef,0xcd,0xa7, - 0x00,0x00,0x01,0x98,0x00,0x00,0x00,0x60,0x63,0x6d, - 0x61,0x70,0xc6,0x3a,0x2e,0x6a,0x00,0x00,0x06,0xd0, - 0x00,0x00,0x03,0x4e,0x67,0x61,0x73,0x70,0x00,0x00, - 0x00,0x10,0x00,0x00,0x79,0x7c,0x00,0x00,0x00,0x08, - 0x67,0x6c,0x79,0x66,0xd6,0x72,0x55,0xa8,0x00,0x00, - 0x0c,0x98,0x00,0x00,0x63,0x74,0x68,0x65,0x61,0x64, - 0x02,0x27,0x83,0x65,0x00,0x00,0x01,0x1c,0x00,0x00, - 0x00,0x36,0x68,0x68,0x65,0x61,0x0d,0x24,0x05,0x2e, - 0x00,0x00,0x01,0x54,0x00,0x00,0x00,0x24,0x68,0x6d, - 0x74,0x78,0xbf,0x6a,0x52,0x02,0x00,0x00,0x01,0xf8, - 0x00,0x00,0x04,0xd8,0x6c,0x6f,0x63,0x61,0x7b,0x16, - 0x62,0x24,0x00,0x00,0x0a,0x28,0x00,0x00,0x02,0x6e, - 0x6d,0x61,0x78,0x70,0x01,0x7f,0x00,0x43,0x00,0x00, - 0x01,0x78,0x00,0x00,0x00,0x20,0x6e,0x61,0x6d,0x65, - 0x78,0xf3,0xd2,0xfd,0x00,0x00,0x70,0x0c,0x00,0x00, - 0x03,0xa8,0x70,0x6f,0x73,0x74,0xa5,0x58,0x36,0xcf, - 0x00,0x00,0x73,0xb4,0x00,0x00,0x05,0xc8,0x70,0x72, - 0x65,0x70,0x68,0x06,0x8c,0x85,0x00,0x00,0x0a,0x20, - 0x00,0x00,0x00,0x07,0x00,0x01,0x00,0x00,0x00,0x02, - 0x00,0x41,0x97,0x7a,0xdb,0x67,0x5f,0x0f,0x3c,0xf5, - 0x02,0x0b,0x08,0x00,0x00,0x00,0x00,0x00,0xcd,0xc1, - 0x1c,0x70,0x00,0x00,0x00,0x00,0xcd,0xc1,0x1c,0x70, - 0xfe,0x70,0xfd,0xd4,0x07,0x17,0x07,0x73,0x00,0x00, - 0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x01,0x00,0x00,0x07,0x9a,0xfe,0x00,0x00,0x00, - 0x07,0x65,0xfe,0x70,0xfe,0x92,0x07,0x17,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x01,0x36,0x00,0x01,0x00,0x00, - 0x01,0x36,0x00,0x40,0x00,0x07,0x00,0x00,0x00,0x00, - 0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00, - 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, - 0x03,0x4c,0x01,0x90,0x00,0x03,0x00,0x08,0x05,0x33, - 0x04,0xcc,0x00,0x00,0x00,0x99,0x05,0x33,0x04,0xcc, - 0x00,0x00,0x02,0xcc,0x00,0x32,0x02,0x66,0x00,0x00, - 0x00,0x00,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x08,0x03,0x40,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x4b,0x57,0x4e, - 0x00,0x40,0x00,0x0d,0xfb,0x4b,0x06,0x00,0xfe,0x00, - 0x01,0x9a,0x07,0x9a,0x02,0x00,0x20,0x00,0x00,0x21, - 0x00,0x00,0x00,0x00,0x04,0x46,0x05,0xb6,0x00,0x00, - 0x00,0x20,0x00,0x04,0x02,0xee,0x00,0x00,0x00,0x00, - 0x00,0x00,0x02,0xaa,0x00,0x00,0x02,0x14,0x00,0x00, - 0x01,0xa9,0x00,0x00,0x01,0xe5,0x00,0x87,0x02,0xf9, - 0x00,0x81,0x03,0xb5,0x00,0x26,0x03,0x5e,0x00,0x57, - 0x05,0x2a,0x00,0x54,0x03,0xb7,0x00,0x3f,0x01,0xab, - 0x00,0x81,0x02,0x56,0x00,0x5e,0x02,0x56,0x00,0x4a, - 0x03,0x2d,0x00,0x50,0x03,0x54,0x00,0x4b,0x01,0xd1, - 0x00,0x45,0x02,0x2f,0x00,0x3b,0x01,0xd1,0x00,0x7e, - 0x02,0xef,0x00,0x27,0x03,0x5e,0x00,0x53,0x03,0x5e, - 0x00,0x85,0x03,0x5e,0x00,0x4a,0x03,0x5e,0x00,0x47, - 0x03,0x5e,0x00,0x25,0x03,0x5e,0x00,0x5f,0x03,0x5e, - 0x00,0x5b,0x03,0x5e,0x00,0x41,0x03,0x5e,0x00,0x48, - 0x03,0x5e,0x00,0x4d,0x01,0xd1,0x00,0x7e,0x01,0xd1, - 0x00,0x45,0x03,0x54,0x00,0x4b,0x03,0x54,0x00,0x4b, - 0x03,0x54,0x00,0x49,0x02,0x85,0x00,0x1f,0x05,0x24, - 0x00,0x62,0x03,0x8a,0x00,0x00,0x03,0xb6,0x00,0x95, - 0x03,0x79,0x00,0x66,0x04,0x14,0x00,0x95,0x03,0x30, - 0x00,0x96,0x02,0xfd,0x00,0x96,0x04,0x3f,0x00,0x66, - 0x04,0x2f,0x00,0x96,0x01,0xe3,0x00,0xa6,0x01,0xbc, - 0xff,0x91,0x03,0x80,0x00,0x95,0x02,0xec,0x00,0x96, - 0x05,0xb9,0x00,0x95,0x04,0x81,0x00,0x96,0x04,0x5c, - 0x00,0x66,0x03,0x77,0x00,0x95,0x04,0x5c,0x00,0x66, - 0x03,0x99,0x00,0x96,0x03,0x35,0x00,0x50,0x03,0x00, - 0x00,0x12,0x04,0x22,0x00,0x8b,0x03,0x6c,0x00,0x00, - 0x05,0xbe,0x00,0x0c,0x03,0x1f,0x00,0x0d,0x03,0x09, - 0x00,0x00,0x02,0xd0,0x00,0x34,0x02,0x86,0x00,0xa0, - 0x02,0xef,0x00,0x27,0x02,0x86,0x00,0x41,0x03,0x8c, - 0x00,0x1d,0x03,0x1a,0xff,0xfc,0x04,0x62,0x01,0x89, - 0x03,0x49,0x00,0x46,0x03,0xa6,0x00,0x86,0x02,0xa4, - 0x00,0x58,0x03,0xa6,0x00,0x57,0x03,0x51,0x00,0x58, - 0x01,0xf9,0x00,0x16,0x03,0x25,0x00,0x1d,0x03,0x9d, - 0x00,0x86,0x01,0xa6,0x00,0x7a,0x01,0xa7,0xff,0xea, - 0x03,0x1b,0x00,0x86,0x01,0xa3,0x00,0x86,0x05,0x75, - 0x00,0x86,0x03,0x9d,0x00,0x86,0x03,0x87,0x00,0x57, - 0x03,0xa6,0x00,0x86,0x03,0xa6,0x00,0x57,0x02,0x5a, - 0x00,0x86,0x02,0xad,0x00,0x46,0x02,0x08,0x00,0x27, - 0x03,0x9d,0x00,0x80,0x02,0xe3,0x00,0x06,0x04,0xd9, - 0x00,0x14,0x02,0xea,0x00,0x1c,0x02,0xe3,0x00,0x06, - 0x02,0x5c,0x00,0x35,0x02,0xe1,0x00,0x51,0x03,0x7b, - 0x01,0x7b,0x02,0xe1,0x00,0x50,0x03,0x54,0x00,0x70, - 0x02,0x14,0x00,0x00,0x01,0xe5,0x00,0x87,0x03,0x5e, - 0x00,0xa1,0x03,0x5e,0x00,0x4f,0x04,0x67,0x00,0x71, - 0x03,0x5e,0x00,0x49,0x03,0x7b,0x01,0x7b,0x02,0xf3, - 0x00,0x52,0x04,0x67,0x01,0x36,0x06,0xa3,0x00,0x61, - 0x02,0x64,0x00,0x39,0x03,0xb6,0x00,0x4f,0x03,0x54, - 0x00,0x4b,0x02,0x2f,0x00,0x3b,0x06,0xa3,0x00,0x61, - 0x03,0x86,0xff,0xf9,0x03,0x5e,0x00,0x76,0x03,0x54, - 0x00,0x4b,0x02,0x7e,0x00,0x32,0x02,0x7e,0x00,0x32, - 0x04,0x62,0x01,0x89,0x03,0xa0,0x00,0x82,0x03,0xed, - 0x00,0x79,0x01,0xd1,0x00,0x7e,0x01,0xc1,0x00,0x1f, - 0x02,0x7e,0x00,0x4c,0x02,0x80,0x00,0x43,0x03,0xb6, - 0x00,0x4f,0x05,0xcd,0x00,0x36,0x05,0xcd,0x00,0x36, - 0x05,0xcd,0x00,0x33,0x02,0x85,0x00,0x31,0x03,0x8a, - 0x00,0x00,0x03,0x8a,0x00,0x00,0x03,0x8a,0x00,0x00, - 0x03,0x8a,0x00,0x00,0x03,0x8a,0x00,0x00,0x03,0x8a, - 0x00,0x00,0x04,0xdb,0x00,0x00,0x03,0x79,0x00,0x66, - 0x03,0x30,0x00,0x96,0x03,0x30,0x00,0x96,0x03,0x30, - 0x00,0x96,0x03,0x30,0x00,0x96,0x01,0xe3,0xff,0xd9, - 0x01,0xe3,0x00,0x9e,0x01,0xe3,0xff,0xde,0x01,0xe3, - 0xff,0xf5,0x04,0x14,0x00,0x28,0x04,0x81,0x00,0x96, - 0x04,0x5c,0x00,0x66,0x04,0x5c,0x00,0x66,0x04,0x5c, - 0x00,0x66,0x04,0x5c,0x00,0x66,0x04,0x5c,0x00,0x66, - 0x03,0x54,0x00,0x45,0x04,0x5c,0x00,0x66,0x04,0x22, - 0x00,0x8b,0x04,0x22,0x00,0x8b,0x04,0x22,0x00,0x8b, - 0x04,0x22,0x00,0x8b,0x03,0x09,0x00,0x00,0x03,0x77, - 0x00,0x95,0x03,0x95,0x00,0x86,0x03,0x49,0x00,0x46, - 0x03,0x49,0x00,0x46,0x03,0x49,0x00,0x46,0x03,0x49, - 0x00,0x46,0x03,0x49,0x00,0x46,0x03,0x49,0x00,0x46, - 0x05,0x29,0x00,0x46,0x02,0xa4,0x00,0x58,0x03,0x51, - 0x00,0x58,0x03,0x51,0x00,0x58,0x03,0x51,0x00,0x58, - 0x03,0x51,0x00,0x58,0x01,0xa6,0xff,0xc6,0x01,0xa6, - 0x00,0x71,0x01,0xa6,0xff,0xbf,0x01,0xa6,0xff,0xd7, - 0x03,0x8b,0x00,0x57,0x03,0x9d,0x00,0x86,0x03,0x87, - 0x00,0x57,0x03,0x87,0x00,0x57,0x03,0x87,0x00,0x57, - 0x03,0x87,0x00,0x57,0x03,0x87,0x00,0x57,0x03,0x54, - 0x00,0x4a,0x03,0x87,0x00,0x54,0x03,0x9d,0x00,0x80, - 0x03,0x9d,0x00,0x80,0x03,0x9d,0x00,0x80,0x03,0x9d, - 0x00,0x80,0x02,0xe3,0x00,0x06,0x03,0xa6,0x00,0x86, - 0x02,0xe3,0x00,0x06,0x01,0xa6,0x00,0x87,0x05,0x17, - 0x00,0x66,0x05,0x8a,0x00,0x57,0x03,0x35,0x00,0x50, - 0x02,0xad,0x00,0x46,0x03,0x09,0x00,0x00,0x02,0xd0, - 0x00,0x34,0x02,0x5c,0x00,0x26,0x03,0x5e,0x00,0x45, - 0x04,0x7e,0x01,0x2a,0x04,0x7e,0x01,0x2a,0x04,0x7b, - 0x01,0x44,0x01,0xbe,0x00,0x83,0x04,0x88,0x01,0x6d, - 0x01,0x8a,0x00,0x25,0x04,0x7e,0x01,0x10,0x04,0x85, - 0x00,0xf4,0x00,0x00,0xff,0xba,0x00,0x00,0xfe,0x70, - 0x00,0x00,0xfe,0xb6,0x00,0x00,0xfe,0xbb,0x00,0x00, - 0xff,0xb9,0x00,0x00,0xff,0x14,0x00,0x00,0xff,0x16, - 0x00,0x00,0xff,0x34,0x00,0x00,0xff,0x2f,0x00,0x00, - 0xff,0xb9,0x00,0x00,0xff,0xb9,0x00,0x00,0xff,0x6d, - 0x00,0x00,0xff,0xba,0x00,0x00,0xff,0xcd,0x02,0x2f, - 0x00,0x3b,0x00,0x00,0xff,0xba,0x00,0x00,0xff,0xba, - 0x00,0x00,0xff,0x34,0x03,0x5b,0x00,0x44,0x03,0x2a, - 0x00,0x5d,0x02,0xbb,0x00,0x59,0x02,0xdd,0x00,0x14, - 0x03,0xbc,0x00,0x86,0x01,0xa4,0x00,0x86,0x01,0xe1, - 0x00,0x81,0x03,0xbc,0x00,0x86,0x03,0xa7,0x00,0x5f, - 0x01,0x9e,0x00,0x83,0x02,0xd7,0x00,0x2d,0x02,0xaf, - 0x00,0x2d,0x02,0xa6,0x00,0x2c,0x03,0xbc,0x00,0x86, - 0x03,0xa5,0x00,0x35,0x01,0xa8,0x00,0x58,0x02,0x69, - 0x00,0x28,0x03,0x9e,0x00,0x57,0x03,0x78,0x00,0x41, - 0x03,0xaf,0x00,0x50,0x03,0x87,0x00,0x51,0x02,0xdb, - 0x00,0x03,0x03,0x45,0x00,0x3a,0x03,0x98,0x00,0x8d, - 0x02,0xcf,0x00,0x1d,0x04,0x68,0x00,0x40,0x03,0xb4, - 0x00,0x15,0x01,0x5e,0x00,0x23,0x02,0xab,0x00,0x23, - 0x03,0xef,0x00,0x4e,0x07,0x65,0x00,0x4e,0x01,0x5e, - 0x00,0x23,0x01,0x5e,0x00,0x23,0x01,0xd1,0x00,0x45, - 0x02,0xaa,0x00,0x23,0x02,0xaa,0x00,0x23,0x02,0xff, - 0x00,0x26,0x03,0xa2,0x00,0x78,0x03,0xa2,0x00,0x74, - 0x02,0xfb,0x00,0x91,0x05,0x74,0x00,0x7e,0x07,0x57, - 0x00,0x53,0x02,0x2f,0x00,0x4f,0x02,0x2f,0x00,0x4f, - 0x00,0xf5,0xfe,0xbe,0x05,0x02,0x00,0x8d,0x03,0x5e, - 0x00,0x24,0x05,0x90,0x00,0x0d,0x03,0x9f,0x00,0x16, - 0x03,0x9d,0x00,0x16,0x04,0x68,0x00,0x40,0x04,0x68, - 0x00,0x25,0x04,0x68,0x00,0x40,0x04,0x68,0x00,0x25, - 0x03,0x5b,0x00,0x44,0x03,0x5b,0x00,0x44,0x03,0x5b, - 0x00,0x44,0x03,0x2a,0x00,0x5d,0x02,0xbb,0x00,0x59, - 0x02,0xdd,0x00,0x14,0x03,0xbc,0x00,0x86,0x01,0xa4, - 0xff,0xab,0x01,0xe1,0xff,0xd5,0x03,0xa7,0x00,0x5f, - 0x01,0x9e,0xff,0xd6,0x02,0xd7,0x00,0x2d,0x02,0xaf, - 0x00,0x2d,0x02,0xa6,0x00,0x2b,0x03,0xa5,0x00,0x35, - 0x02,0x69,0x00,0x28,0x03,0x9e,0x00,0x57,0x03,0xaf, - 0x00,0x50,0x03,0x87,0x00,0x51,0x03,0x45,0x00,0x3a, - 0x03,0x98,0x00,0x8d,0x02,0xcf,0x00,0x1d,0x04,0x68, - 0x00,0x40,0x03,0xb4,0x00,0x15,0x01,0xa4,0x00,0x64, - 0x00,0x00,0xff,0x12,0x00,0x00,0x00,0x03,0x00,0x00, - 0x00,0x03,0x00,0x00,0x00,0x1c,0x00,0x01,0x00,0x00, - 0x00,0x00,0x01,0x44,0x00,0x03,0x00,0x01,0x00,0x00, - 0x00,0x1c,0x00,0x04,0x01,0x28,0x00,0x00,0x00,0x46, - 0x00,0x40,0x00,0x05,0x00,0x06,0x00,0x0d,0x00,0x7e, - 0x00,0xff,0x01,0x31,0x01,0x53,0x01,0x61,0x01,0x78, - 0x01,0x7e,0x01,0x92,0x02,0xc7,0x02,0xdd,0x05,0xbe, - 0x05,0xc2,0x05,0xc7,0x05,0xea,0x05,0xf4,0x20,0x14, - 0x20,0x1a,0x20,0x1e,0x20,0x22,0x20,0x26,0x20,0x30, - 0x20,0x3a,0x20,0x44,0x20,0xaa,0x20,0xac,0x21,0x22, - 0xfb,0x02,0xfb,0x36,0xfb,0x3c,0xfb,0x3e,0xfb,0x41, - 0xfb,0x44,0xfb,0x4b,0xff,0xff,0x00,0x00,0x00,0x0d, - 0x00,0x20,0x00,0xa0,0x01,0x31,0x01,0x52,0x01,0x60, - 0x01,0x78,0x01,0x7d,0x01,0x92,0x02,0xc6,0x02,0xd8, - 0x05,0xb0,0x05,0xc1,0x05,0xc7,0x05,0xd0,0x05,0xf3, - 0x20,0x13,0x20,0x18,0x20,0x1c,0x20,0x20,0x20,0x26, - 0x20,0x30,0x20,0x39,0x20,0x44,0x20,0xaa,0x20,0xac, - 0x21,0x22,0xfb,0x01,0xfb,0x2a,0xfb,0x38,0xfb,0x3e, - 0xfb,0x40,0xfb,0x43,0xfb,0x46,0xff,0xff,0xff,0xf6, - 0xff,0xe4,0xff,0xc3,0xff,0x92,0xff,0x72,0xff,0x66, - 0xff,0x50,0xff,0x4c,0xff,0x39,0xfe,0x06,0xfd,0xf6, - 0xfb,0x24,0xfb,0x22,0xfb,0x1e,0xfb,0x16,0xfb,0x0e, - 0xe0,0xf0,0xe0,0xed,0xe0,0xec,0xe0,0xeb,0xe0,0xe8, - 0xe0,0xdf,0xe0,0xd7,0xe0,0xce,0xe0,0x69,0xe0,0x68, - 0xdf,0xf3,0x06,0x15,0x05,0xee,0x05,0xed,0x05,0xec, - 0x05,0xeb,0x05,0xea,0x05,0xe9,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,0x06, - 0x02,0x0a,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,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,0x01,0x00,0x00, - 0x00,0x00,0x00,0x04,0x00,0x05,0x00,0x06,0x00,0x07, - 0x00,0x08,0x00,0x09,0x00,0x0a,0x00,0x0b,0x00,0x0c, - 0x00,0x0d,0x00,0x0e,0x00,0x0f,0x00,0x10,0x00,0x11, - 0x00,0x12,0x00,0x13,0x00,0x14,0x00,0x15,0x00,0x16, - 0x00,0x17,0x00,0x18,0x00,0x19,0x00,0x1a,0x00,0x1b, - 0x00,0x1c,0x00,0x1d,0x00,0x1e,0x00,0x1f,0x00,0x20, - 0x00,0x21,0x00,0x22,0x00,0x23,0x00,0x24,0x00,0x25, - 0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2a, - 0x00,0x2b,0x00,0x2c,0x00,0x2d,0x00,0x2e,0x00,0x2f, - 0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00,0x34, - 0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x39, - 0x00,0x3a,0x00,0x3b,0x00,0x3c,0x00,0x3d,0x00,0x3e, - 0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43, - 0x00,0x44,0x00,0x45,0x00,0x46,0x00,0x47,0x00,0x48, - 0x00,0x49,0x00,0x4a,0x00,0x4b,0x00,0x4c,0x00,0x4d, - 0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51,0x00,0x52, - 0x00,0x53,0x00,0x54,0x00,0x55,0x00,0x56,0x00,0x57, - 0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b,0x00,0x5c, - 0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60,0x00,0x61, - 0x00,0x62,0x00,0x00,0x00,0x87,0x00,0x88,0x00,0x8a, - 0x00,0x8c,0x00,0x94,0x00,0x99,0x00,0x9f,0x00,0xa4, - 0x00,0xa3,0x00,0xa5,0x00,0xa7,0x00,0xa6,0x00,0xa8, - 0x00,0xaa,0x00,0xac,0x00,0xab,0x00,0xad,0x00,0xae, - 0x00,0xb0,0x00,0xaf,0x00,0xb1,0x00,0xb2,0x00,0xb4, - 0x00,0xb6,0x00,0xb5,0x00,0xb7,0x00,0xb9,0x00,0xb8, - 0x00,0xbd,0x00,0xbc,0x00,0xbe,0x00,0xbf,0x01,0x0b, - 0x00,0x73,0x00,0x65,0x00,0x66,0x00,0x6a,0x01,0x0d, - 0x00,0x79,0x00,0xa2,0x00,0x71,0x00,0x6c,0x01,0x15, - 0x00,0x77,0x00,0x6b,0x00,0x00,0x00,0x89,0x00,0x9b, - 0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x00,0x00,0x68, - 0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x6d,0x00,0x7d,0x00,0x00,0x00,0xa9, - 0x00,0xbb,0x00,0x82,0x00,0x64,0x00,0x6f,0x00,0x00, - 0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x6e,0x00,0x7e, - 0x01,0x0e,0x00,0x63,0x00,0x83,0x00,0x86,0x00,0x98, - 0x00,0xc4,0x00,0xc5,0x01,0x03,0x01,0x04,0x01,0x08, - 0x01,0x09,0x01,0x05,0x01,0x06,0x00,0xba,0x00,0x00, - 0x00,0xc2,0x00,0xc8,0x01,0x12,0x01,0x14,0x01,0x10, - 0x01,0x11,0x01,0x16,0x01,0x17,0x01,0x0c,0x00,0x7a, - 0x01,0x07,0x01,0x0a,0x01,0x0f,0x00,0x85,0x00,0x8d, - 0x00,0x84,0x00,0x8e,0x00,0x8b,0x00,0x90,0x00,0x91, - 0x00,0x92,0x00,0x8f,0x00,0x96,0x00,0x97,0x00,0x00, - 0x00,0x95,0x00,0x9d,0x00,0x9e,0x00,0x9c,0x00,0xc3, - 0x00,0xcc,0x00,0xd2,0x00,0x72,0x00,0xce,0x00,0xcf, - 0x00,0xd0,0x00,0x7b,0x00,0xd3,0x00,0xd1,0x00,0xcd, - 0x00,0x00,0xb8,0x01,0xff,0x85,0xb0,0x04,0x8d,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x00,0x2e,0x00,0x66,0x00,0xae, - 0x00,0xf2,0x01,0x44,0x01,0x52,0x01,0x6e,0x01,0x8a, - 0x01,0xaa,0x01,0xc2,0x01,0xd4,0x01,0xe2,0x01,0xf2, - 0x02,0x00,0x02,0x2a,0x02,0x44,0x02,0x76,0x02,0xac, - 0x02,0xd0,0x03,0x02,0x03,0x36,0x03,0x4a,0x03,0x8a, - 0x03,0xc0,0x03,0xda,0x03,0xf6,0x04,0x0c,0x04,0x20, - 0x04,0x34,0x04,0x64,0x04,0xbe,0x04,0xe6,0x05,0x18, - 0x05,0x3c,0x05,0x5e,0x05,0x78,0x05,0x8e,0x05,0xba, - 0x05,0xd2,0x05,0xde,0x05,0xfa,0x06,0x1c,0x06,0x2c, - 0x06,0x56,0x06,0x74,0x06,0x9c,0x06,0xbe,0x06,0xf0, - 0x07,0x18,0x07,0x4a,0x07,0x5e,0x07,0x7c,0x07,0x98, - 0x07,0xd6,0x07,0xf4,0x08,0x0a,0x08,0x22,0x08,0x36, - 0x08,0x44,0x08,0x58,0x08,0x6c,0x08,0x7a,0x08,0x92, - 0x08,0xc6,0x08,0xf4,0x09,0x16,0x09,0x46,0x09,0x70, - 0x09,0x94,0x09,0xee,0x0a,0x14,0x0a,0x2e,0x0a,0x52, - 0x0a,0x70,0x0a,0x7c,0x0a,0xb2,0x0a,0xd4,0x0a,0xf6, - 0x0b,0x28,0x0b,0x5a,0x0b,0x78,0x0b,0xb2,0x0b,0xd4, - 0x0b,0xf8,0x0c,0x14,0x0c,0x46,0x0c,0x64,0x0c,0x94, - 0x0c,0xac,0x0c,0xe0,0x0c,0xee,0x0d,0x1e,0x0d,0x4c, - 0x0d,0x4c,0x0d,0x66,0x0d,0x8e,0x0d,0xbc,0x0d,0xf8, - 0x0e,0x24,0x0e,0x38,0x0e,0x92,0x0e,0xb0,0x0f,0x0a, - 0x0f,0x40,0x0f,0x64,0x0f,0x74,0x0f,0x82,0x0f,0xe4, - 0x0f,0xf2,0x10,0x14,0x10,0x34,0x10,0x60,0x10,0x94, - 0x10,0xaa,0x10,0xd0,0x10,0xec,0x10,0xfc,0x11,0x1a, - 0x11,0x32,0x11,0x52,0x11,0x74,0x11,0xb0,0x11,0xf4, - 0x12,0x4a,0x12,0x7c,0x12,0xb4,0x12,0xec,0x13,0x2a, - 0x13,0x70,0x13,0xae,0x13,0xee,0x14,0x18,0x14,0x54, - 0x14,0x7e,0x14,0xa6,0x14,0xd6,0x15,0x06,0x15,0x24, - 0x15,0x40,0x15,0x64,0x15,0x88,0x15,0xb2,0x15,0xee, - 0x16,0x26,0x16,0x5c,0x16,0x9a,0x16,0xde,0x17,0x1c, - 0x17,0x42,0x17,0x82,0x17,0xb2,0x17,0xe0,0x18,0x14, - 0x18,0x4a,0x18,0x70,0x18,0x94,0x18,0xd8,0x19,0x1e, - 0x19,0x62,0x19,0xae,0x1a,0x00,0x1a,0x4c,0x1a,0x9a, - 0x1a,0xea,0x1b,0x20,0x1b,0x5a,0x1b,0x92,0x1b,0xd2, - 0x1c,0x12,0x1c,0x30,0x1c,0x4c,0x1c,0x70,0x1c,0x94, - 0x1c,0xd4,0x1d,0x14,0x1d,0x48,0x1d,0x7a,0x1d,0xb4, - 0x1d,0xf4,0x1e,0x2e,0x1e,0x50,0x1e,0x92,0x1e,0xc6, - 0x1e,0xfa,0x1f,0x34,0x1f,0x70,0x1f,0xb0,0x1f,0xe2, - 0x20,0x28,0x20,0x34,0x20,0x6a,0x20,0xaa,0x20,0xf2, - 0x21,0x42,0x21,0x70,0x21,0x9c,0x21,0xc8,0x21,0xfa, - 0x22,0x18,0x22,0x34,0x22,0x4e,0x22,0x60,0x22,0x80, - 0x22,0xa4,0x22,0xc8,0x22,0xec,0x23,0x02,0x23,0x30, - 0x23,0x4e,0x23,0x6e,0x23,0x7c,0x23,0x92,0x23,0xb0, - 0x23,0xbe,0x23,0xce,0x23,0xdc,0x23,0xea,0x24,0x08, - 0x24,0x16,0x24,0x24,0x24,0x32,0x24,0x40,0x24,0x4e, - 0x24,0x5e,0x24,0x92,0x24,0xb6,0x24,0xea,0x25,0x06, - 0x25,0x28,0x25,0x34,0x25,0x50,0x25,0x72,0x25,0xa8, - 0x25,0xb8,0x25,0xd4,0x26,0x04,0x26,0x24,0x26,0x44, - 0x26,0x88,0x26,0xa0,0x26,0xcc,0x27,0x0c,0x27,0x38, - 0x27,0x6a,0x27,0xa8,0x27,0xca,0x27,0xf0,0x28,0x24, - 0x28,0x40,0x28,0x74,0x28,0xa8,0x28,0xc0,0x28,0xe6, - 0x28,0xf4,0x29,0x02,0x29,0x14,0x29,0x26,0x29,0x38, - 0x29,0x56,0x29,0x74,0x29,0x92,0x29,0xae,0x29,0xdc, - 0x29,0xee,0x2a,0x12,0x2a,0x74,0x2a,0x8a,0x2a,0x9e, - 0x2a,0xac,0x2a,0xf0,0x2b,0x2a,0x2b,0x56,0x2b,0x8e, - 0x2b,0xba,0x2b,0xf8,0x2c,0x36,0x2c,0x7c,0x2c,0xc2, - 0x2c,0xfe,0x2d,0x3e,0x2d,0x7c,0x2d,0xa8,0x2d,0xe4, - 0x2e,0x08,0x2e,0x32,0x2e,0x48,0x2e,0x6c,0x2e,0xaa, - 0x2e,0xc2,0x2e,0xe6,0x2f,0x1e,0x2f,0x48,0x2f,0x94, - 0x2f,0xc8,0x30,0x10,0x30,0x4a,0x30,0x90,0x30,0xbe, - 0x30,0xfa,0x31,0x1e,0x31,0x5a,0x31,0x96,0x31,0xac, - 0x31,0xba,0x00,0x00,0x00,0x02,0x00,0x87,0xff,0xec, - 0x01,0x5d,0x05,0xb6,0x00,0x03,0x00,0x0a,0x00,0x00, - 0x01,0x23,0x03,0x33,0x02,0x32,0x15,0x14,0x06,0x23, - 0x22,0x01,0x29,0x6e,0x27,0xbd,0xca,0xd6,0x3a,0x31, - 0x6b,0x01,0x91,0x04,0x25,0xfb,0x31,0x7d,0x3e,0x40, - 0x00,0x00,0x00,0x02,0x00,0x81,0x03,0xa6,0x02,0x78, - 0x05,0xb6,0x00,0x03,0x00,0x07,0x00,0x00,0x01,0x23, - 0x03,0x33,0x01,0x23,0x03,0x33,0x01,0x09,0x64,0x24, - 0xa9,0x01,0x2d,0x64,0x24,0xa9,0x03,0xa6,0x02,0x10, - 0xfd,0xf0,0x02,0x10,0x00,0x00,0x00,0x02,0x00,0x26, - 0x00,0x00,0x03,0x8e,0x05,0xb6,0x00,0x1b,0x00,0x1f, - 0x00,0x00,0x01,0x15,0x23,0x03,0x33,0x15,0x23,0x03, - 0x23,0x13,0x23,0x03,0x23,0x13,0x23,0x35,0x33,0x13, - 0x23,0x35,0x33,0x13,0x33,0x03,0x33,0x13,0x33,0x03, - 0x05,0x03,0x33,0x13,0x03,0x8e,0xbe,0x2a,0xb7,0xc7, - 0x37,0x76,0x39,0xd8,0x38,0x73,0x36,0xaf,0xbf,0x2b, - 0xba,0xca,0x33,0x75,0x35,0xdb,0x35,0x71,0x33,0xfe, - 0xa2,0x29,0xd7,0x2c,0x04,0x14,0x79,0xfe,0xa2,0x7d, - 0xfe,0x40,0x01,0xc0,0xfe,0x40,0x01,0xc0,0x7d,0x01, - 0x5e,0x79,0x01,0xa2,0xfe,0x5e,0x01,0xa2,0xfe,0x5e, - 0x79,0xfe,0xa2,0x01,0x5e,0x00,0x00,0x00,0x00,0x03, - 0x00,0x57,0xff,0x89,0x03,0x07,0x06,0x14,0x00,0x1f, - 0x00,0x25,0x00,0x2b,0x00,0x00,0x01,0x06,0x07,0x26, - 0x27,0x11,0x1e,0x01,0x10,0x06,0x07,0x15,0x23,0x35, - 0x26,0x27,0x35,0x1e,0x01,0x17,0x11,0x26,0x27,0x2e, - 0x01,0x34,0x36,0x37,0x35,0x33,0x15,0x16,0x04,0x06, - 0x14,0x16,0x17,0x11,0x12,0x36,0x34,0x26,0x27,0x11, - 0x02,0xee,0x31,0x02,0x77,0x69,0xa1,0x8b,0xa1,0x8b, - 0x5d,0xb6,0x71,0x3c,0x9f,0x4c,0x15,0x24,0x82,0x65, - 0x9f,0x81,0x5d,0x90,0xfe,0xcf,0x4e,0x43,0x4f,0xa6, - 0x54,0x47,0x56,0x05,0x20,0x7b,0x05,0x38,0x06,0xfe, - 0x43,0x43,0x9e,0xfe,0xf9,0xb2,0x13,0xeb,0xe5,0x03, - 0x3d,0x96,0x24,0x2a,0x02,0x01,0xbb,0x08,0x12,0x41, - 0x95,0xfc,0xb4,0x13,0xb2,0xaf,0x06,0x94,0x67,0x9a, - 0x5c,0x25,0x01,0x91,0xfc,0x32,0x66,0x91,0x5d,0x27, - 0xfe,0x75,0x00,0x05,0x00,0x54,0xff,0xed,0x04,0xd6, - 0x05,0xcb,0x00,0x07,0x00,0x0b,0x00,0x14,0x00,0x1c, - 0x00,0x25,0x00,0x00,0x12,0x36,0x32,0x16,0x10,0x06, - 0x22,0x26,0x01,0x23,0x01,0x33,0x05,0x22,0x06,0x10, - 0x16,0x32,0x36,0x35,0x10,0x00,0x36,0x32,0x16,0x10, - 0x06,0x22,0x26,0x13,0x22,0x06,0x10,0x16,0x32,0x36, - 0x35,0x10,0x54,0x74,0xe6,0x77,0x7a,0xe4,0x73,0x01, - 0x7d,0x7f,0x02,0x05,0x80,0xfd,0x62,0x34,0x2f,0x2f, - 0x6d,0x30,0x01,0x64,0x75,0xe5,0x76,0x7a,0xe2,0x74, - 0xe5,0x34,0x2e,0x2f,0x6c,0x30,0x04,0xe2,0xe9,0xe8, - 0xfe,0x41,0xef,0xeb,0xfc,0xe0,0x05,0xb6,0x5f,0xa5, - 0xfe,0xa0,0xa5,0xa6,0xb0,0x01,0x54,0xfd,0x43,0xe8, - 0xe7,0xfe,0x3f,0xed,0xeb,0x02,0x35,0xa4,0xfe,0xa0, - 0xa5,0xa5,0xb0,0x01,0x54,0x00,0x00,0x00,0x00,0x03, - 0x00,0x3f,0xff,0xec,0x03,0xb2,0x05,0xcb,0x00,0x20, - 0x00,0x2a,0x00,0x32,0x00,0x00,0x05,0x22,0x26,0x35, - 0x34,0x36,0x37,0x2e,0x01,0x35,0x34,0x36,0x32,0x16, - 0x10,0x06,0x07,0x16,0x12,0x17,0x36,0x37,0x33,0x0e, - 0x01,0x07,0x13,0x23,0x2e,0x01,0x27,0x0e,0x01,0x03, - 0x22,0x06,0x14,0x16,0x17,0x3e,0x01,0x35,0x34,0x02, - 0x06,0x14,0x16,0x33,0x32,0x37,0x03,0x01,0x74,0x91, - 0xa4,0x67,0x7c,0x49,0x30,0x84,0xde,0x84,0x57,0x66, - 0x2d,0xa5,0x10,0x38,0x0a,0x8c,0x07,0x44,0x2d,0xa8, - 0xac,0x0f,0x3b,0x0f,0x46,0x91,0x3b,0x2e,0x33,0x2f, - 0x27,0x3d,0x32,0xe9,0x3e,0x5c,0x4f,0x7d,0x61,0xfa, - 0x14,0xcc,0xb7,0x84,0xc1,0x66,0x80,0x96,0x5d,0x92, - 0xac,0xa3,0xfe,0xf4,0xbe,0x5b,0x4a,0xfe,0xea,0x1a, - 0x72,0xb2,0x6a,0xed,0x4f,0xfe,0xf9,0x19,0x66,0x19, - 0x5e,0x4e,0x05,0x58,0x5b,0xa0,0xa0,0x3c,0x3a,0x8e, - 0x60,0xaf,0xfd,0x23,0x8b,0xde,0x85,0x96,0x01,0xa3, - 0x00,0x00,0x00,0x01,0x00,0x81,0x03,0xa6,0x01,0x2a, - 0x05,0xb6,0x00,0x03,0x00,0x00,0x01,0x23,0x03,0x33, - 0x01,0x09,0x64,0x24,0xa9,0x03,0xa6,0x02,0x10,0x00, - 0x00,0x01,0x00,0x5e,0xfe,0xbc,0x02,0x0b,0x05,0xb6, - 0x00,0x0b,0x00,0x00,0x00,0x02,0x10,0x12,0x17,0x23, - 0x26,0x02,0x10,0x12,0x37,0x33,0x01,0x84,0x8d,0x92, - 0x80,0x81,0x8f,0x9b,0x9c,0x8e,0x83,0x04,0xf3,0xfe, - 0x30,0xfe,0x1f,0xfe,0x2a,0xb0,0xa7,0x01,0xcb,0x02, - 0x05,0x01,0xd7,0xac,0x00,0x00,0x00,0x01,0x00,0x4a, - 0xfe,0xbc,0x01,0xf8,0x05,0xb6,0x00,0x0b,0x00,0x00, - 0x00,0x12,0x10,0x02,0x07,0x23,0x36,0x12,0x10,0x02, - 0x27,0x33,0x01,0x5c,0x9c,0x9b,0x90,0x81,0x82,0x90, - 0x8c,0x88,0x83,0x05,0x0a,0xfe,0x28,0xfd,0xfd,0xfe, - 0x35,0xa8,0xb6,0x01,0xd3,0x01,0xe0,0x01,0xcd,0xc4, - 0x00,0x00,0x00,0x01,0x00,0x50,0x03,0x80,0x02,0xdd, - 0x06,0x14,0x00,0x0e,0x00,0x00,0x01,0x25,0x17,0x07, - 0x17,0x07,0x27,0x07,0x27,0x37,0x27,0x37,0x17,0x03, - 0x33,0x01,0xc8,0x01,0x01,0x14,0xf6,0xa6,0x83,0x73, - 0x75,0x81,0xa0,0xf1,0x18,0xfd,0x1e,0xa0,0x05,0x08, - 0x42,0x92,0x0b,0xe9,0x42,0xf4,0xf6,0x44,0xe9,0x0b, - 0x91,0x41,0x01,0x0c,0x00,0x00,0x00,0x01,0x00,0x4b, - 0x00,0xfa,0x03,0x09,0x04,0xae,0x00,0x0b,0x00,0x00, - 0x01,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x35,0x21, - 0x11,0x33,0x01,0xe6,0x01,0x23,0xfe,0xdd,0x78,0xfe, - 0xdd,0x01,0x23,0x78,0x03,0x10,0x7b,0xfe,0x65,0x01, - 0x9b,0x7b,0x01,0x9e,0x00,0x01,0x00,0x45,0xfe,0xf8, - 0x01,0x5c,0x00,0xd8,0x00,0x06,0x00,0x00,0x25,0x17, - 0x06,0x07,0x23,0x12,0x37,0x01,0x4e,0x0e,0x3f,0x6b, - 0x6d,0x47,0x1d,0xd8,0x17,0xde,0xeb,0x00,0xff,0xe1, - 0x00,0x01,0x00,0x3b,0x01,0xdf,0x01,0xf4,0x02,0x70, - 0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21,0x01,0xf4, - 0xfe,0x47,0x01,0xb9,0x01,0xdf,0x91,0x00,0x00,0x01, - 0x00,0x7e,0xff,0xec,0x01,0x53,0x00,0xe7,0x00,0x06, - 0x00,0x00,0x17,0x22,0x34,0x32,0x15,0x14,0x06,0xe8, - 0x6a,0xd5,0x39,0x14,0xfb,0x7d,0x3f,0x3f,0x00,0x00, - 0x00,0x01,0x00,0x27,0x00,0x00,0x02,0xd1,0x05,0xb6, - 0x00,0x03,0x00,0x00,0x33,0x23,0x01,0x33,0xc0,0x99, - 0x02,0x15,0x95,0x05,0xb6,0x00,0x00,0x00,0x00,0x02, - 0x00,0x53,0xff,0xec,0x03,0x08,0x05,0xcb,0x00,0x07, - 0x00,0x13,0x00,0x00,0x1a,0x01,0x20,0x12,0x10,0x02, - 0x20,0x02,0x01,0x22,0x02,0x10,0x12,0x33,0x32,0x37, - 0x36,0x11,0x10,0x02,0x53,0xaa,0x01,0x66,0xa5,0xaa, - 0xfe,0x96,0xa1,0x01,0x5a,0x65,0x57,0x57,0x65,0x3f, - 0x28,0x56,0x5c,0x04,0x5c,0x01,0x6f,0xfe,0x96,0xfc, - 0xfc,0xfe,0x8f,0x01,0x5f,0x03,0xf5,0xfe,0xe1,0xfd, - 0x74,0xfe,0xe2,0x39,0x78,0x01,0xb4,0x01,0x3f,0x01, - 0x25,0x00,0x00,0x01,0x00,0x85,0x00,0x00,0x02,0x48, - 0x05,0xb6,0x00,0x0b,0x00,0x00,0x21,0x23,0x11,0x34, - 0x37,0x06,0x07,0x06,0x07,0x27,0x01,0x33,0x02,0x48, - 0x99,0x0a,0x20,0x39,0x5f,0x28,0x54,0x01,0x3d,0x86, - 0x03,0xeb,0x76,0xb2,0x2b,0x36,0x5a,0x28,0x61,0x01, - 0x25,0x00,0x00,0x00,0x00,0x01,0x00,0x4a,0x00,0x00, - 0x03,0x03,0x05,0xcb,0x00,0x1e,0x00,0x00,0x13,0x26, - 0x27,0x3e,0x01,0x33,0x32,0x16,0x15,0x14,0x06,0x07, - 0x06,0x07,0x0e,0x01,0x07,0x15,0x21,0x15,0x21,0x35, - 0x01,0x3e,0x01,0x35,0x34,0x26,0x23,0x22,0x06,0xa8, - 0x03,0x52,0x50,0x90,0x5e,0x9e,0xb4,0x3e,0x49,0x36, - 0xa0,0x16,0x67,0x10,0x02,0x0a,0xfd,0x47,0x01,0x1b, - 0x86,0x5e,0x67,0x5a,0x40,0x66,0x04,0xde,0x03,0x64, - 0x4a,0x3c,0xc4,0xa7,0x79,0xd7,0x76,0x61,0xe0,0x1e, - 0x91,0x16,0x08,0x8c,0x77,0x01,0xa4,0xc7,0xe3,0x96, - 0x5a,0x89,0x2c,0x00,0x00,0x01,0x00,0x47,0xff,0xec, - 0x02,0xfc,0x05,0xcb,0x00,0x22,0x00,0x00,0x01,0x32, - 0x16,0x15,0x10,0x07,0x15,0x1e,0x01,0x15,0x14,0x06, - 0x20,0x27,0x35,0x16,0x33,0x32,0x36,0x10,0x26,0x2b, - 0x01,0x35,0x33,0x32,0x36,0x34,0x26,0x23,0x22,0x06, - 0x07,0x27,0x36,0x01,0x8f,0x9b,0xb9,0xf4,0x80,0x8d, - 0xd4,0xfe,0x9b,0x76,0x82,0x97,0x78,0x82,0x9a,0x91, - 0x4d,0x50,0x7d,0x94,0x66,0x5d,0x43,0x6d,0x3d,0x52, - 0x8d,0x05,0xcb,0xbf,0x94,0xfe,0xda,0x53,0x08,0x19, - 0xb9,0x92,0xc1,0xe6,0x3a,0x99,0x4e,0x99,0x01,0x12, - 0x96,0x81,0x9e,0xf6,0x7c,0x2f,0x3a,0x67,0x8a,0x00, - 0x00,0x00,0x00,0x02,0x00,0x25,0x00,0x00,0x03,0x42, - 0x05,0xc1,0x00,0x0a,0x00,0x12,0x00,0x00,0x01,0x33, - 0x15,0x23,0x11,0x23,0x11,0x21,0x35,0x01,0x33,0x03, - 0x11,0x34,0x37,0x23,0x06,0x07,0x03,0x02,0xa8,0x9a, - 0x9a,0x94,0xfe,0x11,0x01,0xd2,0xb1,0x94,0x09,0x07, - 0x23,0x4c,0xf4,0x01,0xca,0x87,0xfe,0xbd,0x01,0x43, - 0x81,0x03,0xfd,0xfc,0x09,0x01,0xe0,0xc7,0x8f,0x62, - 0xb2,0xfd,0xde,0x00,0x00,0x01,0x00,0x5f,0xff,0xec, - 0x03,0x03,0x05,0xb6,0x00,0x1e,0x00,0x00,0x37,0x16, - 0x33,0x32,0x36,0x35,0x34,0x35,0x34,0x26,0x23,0x22, - 0x07,0x27,0x13,0x21,0x15,0x21,0x03,0x36,0x33,0x1e, - 0x01,0x17,0x06,0x07,0x0e,0x01,0x07,0x22,0x27,0x5f, - 0x69,0x6f,0x87,0xa7,0x7e,0x76,0x5c,0x69,0x3e,0x2c, - 0x02,0x1a,0xfe,0x69,0x1f,0x50,0x50,0xab,0xb8,0x02, - 0x02,0x5f,0x2f,0xa1,0x69,0xa8,0x62,0xc6,0x49,0xb0, - 0x9a,0x03,0x04,0x93,0x95,0x1f,0x40,0x02,0x9f,0x8f, - 0xfe,0x3f,0x12,0x02,0xe7,0xb7,0xc7,0x8b,0x46,0x52, - 0x02,0x3d,0x00,0x00,0x00,0x02,0x00,0x5b,0xff,0xec, - 0x03,0x08,0x05,0xca,0x00,0x15,0x00,0x1e,0x00,0x00, - 0x01,0x32,0x16,0x10,0x02,0x23,0x22,0x02,0x11,0x10, - 0x12,0x33,0x32,0x17,0x15,0x26,0x23,0x20,0x03,0x33, - 0x3e,0x01,0x12,0x26,0x22,0x06,0x15,0x14,0x16,0x32, - 0x36,0x01,0xdd,0x8c,0x9f,0xb6,0x9c,0xaa,0xb1,0xe9, - 0xed,0x55,0x34,0x3c,0x4b,0xfe,0xcb,0x11,0x09,0x22, - 0x77,0xdf,0x5d,0xaf,0x6a,0x6b,0xad,0x5e,0x03,0x94, - 0xf3,0xfe,0x4c,0xfe,0xff,0x01,0x48,0x01,0x3a,0x01, - 0xb7,0x01,0xa5,0x15,0x8b,0x16,0xfd,0xb0,0x4e,0x56, - 0xfe,0xd1,0xa9,0x95,0x72,0xbc,0xd5,0xaa,0x00,0x01, - 0x00,0x41,0x00,0x00,0x03,0x12,0x05,0xb5,0x00,0x06, - 0x00,0x00,0x13,0x35,0x21,0x15,0x01,0x23,0x01,0x41, - 0x02,0xd1,0xfe,0x4d,0xa1,0x01,0xb8,0x05,0x27,0x8e, - 0x73,0xfa,0xbe,0x05,0x27,0x00,0x00,0x00,0x00,0x03, - 0x00,0x48,0xff,0xec,0x03,0x17,0x05,0xca,0x00,0x13, - 0x00,0x1c,0x00,0x26,0x00,0x00,0x12,0x36,0x20,0x16, - 0x15,0x14,0x07,0x1e,0x01,0x15,0x14,0x06,0x20,0x26, - 0x35,0x34,0x36,0x37,0x26,0x35,0x24,0x26,0x22,0x06, - 0x14,0x16,0x17,0x3e,0x01,0x00,0x06,0x14,0x16,0x32, - 0x36,0x35,0x34,0x2f,0x01,0x67,0xb9,0x01,0x26,0xb4, - 0xe6,0x8c,0x77,0xc3,0xfe,0xbb,0xc7,0x6f,0x7d,0xcd, - 0x01,0xf9,0x5d,0xa7,0x5c,0x4d,0x62,0x5d,0x54,0xfe, - 0xd7,0x56,0x71,0xbd,0x6e,0xb9,0x26,0x05,0x0a,0xc0, - 0xba,0x9e,0xe7,0x8e,0x5f,0xb4,0x7b,0xaa,0xd9,0xcd, - 0xab,0x83,0xc1,0x52,0x9d,0xd8,0x65,0x74,0x75,0xc9, - 0x83,0x45,0x3c,0x8f,0xfe,0x68,0x99,0xe6,0x88,0x8e, - 0x78,0xa6,0x83,0x1b,0x00,0x00,0x00,0x02,0x00,0x4d, - 0xff,0xec,0x02,0xfa,0x05,0xca,0x00,0x15,0x00,0x1e, - 0x00,0x00,0x01,0x22,0x26,0x10,0x12,0x20,0x12,0x11, - 0x10,0x02,0x23,0x22,0x27,0x35,0x16,0x33,0x32,0x12, - 0x13,0x23,0x0e,0x01,0x12,0x26,0x22,0x06,0x10,0x16, - 0x32,0x36,0x35,0x01,0x78,0x8c,0x9f,0xb9,0x01,0x46, - 0xae,0xef,0xeb,0x55,0x3a,0x3d,0x4e,0x99,0xa8,0x0a, - 0x08,0x22,0x77,0x98,0x69,0xab,0x62,0x5b,0xae,0x6d, - 0x02,0x20,0xf6,0x01,0xb3,0x01,0x01,0xfe,0xb9,0xfe, - 0xcc,0xfe,0x50,0xfe,0x4d,0x14,0x8b,0x17,0x01,0x2c, - 0x01,0x24,0x4e,0x56,0x02,0x4f,0xcf,0xaa,0xfe,0xba, - 0xa8,0x9f,0x78,0x00,0x00,0x02,0x00,0x7e,0xff,0xec, - 0x01,0x53,0x04,0x4f,0x00,0x06,0x00,0x0d,0x00,0x00, - 0x12,0x34,0x32,0x15,0x14,0x06,0x23,0x11,0x22,0x34, - 0x32,0x15,0x14,0x06,0x7e,0xd5,0x39,0x32,0x6a,0xd5, - 0x39,0x03,0x55,0xfa,0x7d,0x3e,0x3f,0xfc,0x97,0xfb, - 0x7d,0x3f,0x3f,0x00,0x00,0x00,0x00,0x02,0x00,0x45, - 0xfe,0xf8,0x01,0x5b,0x04,0x4f,0x00,0x06,0x00,0x0d, - 0x00,0x00,0x12,0x32,0x15,0x14,0x06,0x23,0x22,0x13, - 0x17,0x06,0x07,0x23,0x12,0x37,0x7d,0xd6,0x3a,0x31, - 0x6b,0xd0,0x0e,0x3d,0x6c,0x6d,0x49,0x1b,0x04,0x4f, - 0x7d,0x3e,0x40,0xfd,0x83,0x17,0xd8,0xf0,0x01,0x0b, - 0xd4,0x00,0x00,0x01,0x00,0x4b,0x01,0x05,0x03,0x0a, - 0x04,0x9f,0x00,0x06,0x00,0x00,0x09,0x02,0x15,0x01, - 0x35,0x01,0x03,0x0a,0xfd,0xcd,0x02,0x33,0xfd,0x41, - 0x02,0xbf,0x04,0x11,0xfe,0xc2,0xfe,0xc1,0x8f,0x01, - 0x9e,0x61,0x01,0x9b,0x00,0x00,0x00,0x02,0x00,0x4b, - 0x01,0xc3,0x03,0x09,0x03,0xdf,0x00,0x03,0x00,0x07, - 0x00,0x00,0x01,0x21,0x35,0x21,0x11,0x21,0x35,0x21, - 0x03,0x09,0xfd,0x42,0x02,0xbe,0xfd,0x42,0x02,0xbe, - 0x03,0x65,0x7a,0xfd,0xe4,0x7b,0x00,0x01,0x00,0x49, - 0x01,0x05,0x03,0x09,0x04,0x9f,0x00,0x06,0x00,0x00, - 0x01,0x15,0x01,0x35,0x09,0x01,0x35,0x03,0x09,0xfd, - 0x40,0x02,0x34,0xfd,0xcc,0x03,0x04,0x61,0xfe,0x62, - 0x8f,0x01,0x3f,0x01,0x3e,0x8e,0x00,0x02,0x00,0x1f, - 0xff,0xed,0x02,0x52,0x05,0xcb,0x00,0x15,0x00,0x1d, - 0x00,0x00,0x13,0x36,0x20,0x16,0x15,0x14,0x0e,0x02, - 0x1d,0x01,0x23,0x35,0x34,0x36,0x37,0x3e,0x01,0x34, - 0x26,0x22,0x07,0x13,0x32,0x16,0x14,0x06,0x23,0x22, - 0x34,0x1f,0x78,0x01,0x22,0x99,0x3d,0xa5,0x29,0x80, - 0x2e,0x42,0x53,0x31,0x54,0xa9,0x60,0xad,0x32,0x39, - 0x39,0x32,0x6a,0x05,0x76,0x55,0xb3,0xa6,0x74,0x94, - 0xe3,0x6f,0x5b,0x2c,0x39,0x70,0x8e,0x55,0x75,0x83, - 0xc1,0x6b,0x40,0xfb,0xe6,0x3f,0x7c,0x3f,0xfa,0x00, - 0x00,0x00,0x00,0x02,0x00,0x62,0xff,0x50,0x04,0xc6, - 0x05,0xc2,0x00,0x2f,0x00,0x3a,0x00,0x00,0x05,0x22, - 0x00,0x11,0x10,0x00,0x21,0x32,0x16,0x12,0x10,0x02, - 0x23,0x22,0x27,0x23,0x0e,0x01,0x23,0x22,0x26,0x35, - 0x34,0x36,0x33,0x32,0x17,0x03,0x15,0x14,0x16,0x33, - 0x32,0x11,0x10,0x02,0x23,0x22,0x06,0x02,0x15,0x10, - 0x12,0x33,0x32,0x37,0x15,0x06,0x03,0x22,0x06,0x15, - 0x14,0x33,0x32,0x36,0x37,0x13,0x26,0x02,0x7a,0xfe, - 0xfe,0xe6,0x01,0x48,0x01,0x11,0xa1,0xee,0x7c,0x82, - 0x7c,0x99,0x0e,0x09,0x17,0x55,0x42,0x64,0x6f,0x9c, - 0x8c,0x62,0x60,0x14,0x2e,0x2e,0x79,0xd4,0xb2,0x8f, - 0xd8,0x71,0xd9,0xc2,0x94,0x7b,0x79,0x61,0x47,0x4f, - 0x63,0x2e,0x32,0x09,0x0f,0x1f,0xb0,0x01,0x8a,0x01, - 0x6a,0x01,0x9c,0x01,0xe2,0xba,0xfe,0xb4,0xfe,0x2b, - 0xff,0x00,0xb8,0x5d,0x5b,0xbb,0xaf,0xe4,0xfa,0x21, - 0xfe,0x26,0x35,0x55,0x4b,0x01,0x88,0x01,0x18,0x01, - 0x4c,0xc3,0xfe,0xaa,0xdc,0xfe,0xcb,0xfe,0xa4,0x4b, - 0x7a,0x46,0x04,0x70,0xc1,0xb1,0xef,0x9b,0xa5,0x01, - 0x18,0x09,0x00,0x02,0x00,0x00,0x00,0x00,0x03,0x89, - 0x05,0xb7,0x00,0x09,0x00,0x13,0x00,0x00,0x01,0x33, - 0x16,0x01,0x23,0x03,0x21,0x03,0x23,0x00,0x17,0x27, - 0x26,0x27,0x0e,0x03,0x07,0x21,0x01,0x63,0xbd,0x3d, - 0x01,0x2c,0x9d,0x72,0xfe,0x94,0x70,0x9e,0x01,0x26, - 0xd9,0x20,0x13,0x0b,0x10,0x2d,0x16,0x36,0x0b,0x01, - 0x2d,0x05,0xb7,0xf7,0xfb,0x40,0x01,0xdc,0xfe,0x24, - 0x04,0xbc,0xcc,0x8f,0x55,0x56,0x7d,0xca,0x61,0xe4, - 0x30,0x00,0x00,0x03,0x00,0x95,0x00,0x00,0x03,0x69, - 0x05,0xb6,0x00,0x0e,0x00,0x16,0x00,0x1e,0x00,0x00, - 0x13,0x21,0x20,0x11,0x14,0x06,0x07,0x15,0x1e,0x01, - 0x15,0x14,0x06,0x23,0x21,0x13,0x11,0x33,0x32,0x36, - 0x35,0x34,0x23,0x03,0x11,0x33,0x32,0x11,0x34,0x26, - 0x23,0x95,0x01,0x37,0x01,0x7f,0x6e,0x67,0x7c,0x77, - 0xbb,0xa6,0xfe,0x8d,0x96,0xa5,0x76,0x68,0xe3,0xa0, - 0xc4,0xda,0x7b,0x73,0x05,0xb6,0xfe,0x9c,0x8c,0xac, - 0x14,0x08,0x1c,0xaa,0x96,0xc4,0xde,0x05,0x2c,0xfe, - 0x13,0x81,0x88,0xe4,0xfd,0x8c,0xfd,0xd2,0x01,0x22, - 0x82,0x8a,0x00,0x01,0x00,0x66,0xff,0xec,0x03,0x4a, - 0x05,0xcc,0x00,0x13,0x00,0x00,0x05,0x22,0x00,0x10, - 0x12,0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x02,0x10, - 0x12,0x33,0x32,0x37,0x15,0x06,0x02,0x44,0xdd,0xfe, - 0xff,0xfd,0xe4,0x8c,0x77,0x3c,0x5f,0x65,0x97,0xad, - 0xb0,0x9b,0x75,0x62,0x58,0x14,0x01,0x89,0x02,0xbf, - 0x01,0x98,0x4a,0x83,0x3f,0xfe,0xb9,0xfd,0xc7,0xfe, - 0xbb,0x34,0x8c,0x35,0x00,0x02,0x00,0x95,0x00,0x00, - 0x03,0xae,0x05,0xb6,0x00,0x07,0x00,0x0f,0x00,0x00, - 0x13,0x21,0x32,0x12,0x10,0x02,0x23,0x21,0x13,0x11, - 0x33,0x20,0x11,0x10,0x02,0x23,0x95,0x01,0x34,0xea, - 0xfb,0xfc,0xf8,0xfe,0xdb,0x9c,0x85,0x01,0x57,0xa7, - 0xa3,0x05,0xb6,0xfe,0x90,0xfd,0x30,0xfe,0x8a,0x05, - 0x2c,0xfb,0x5e,0x02,0x58,0x01,0x21,0x01,0x29,0x00, - 0x00,0x00,0x00,0x01,0x00,0x96,0x00,0x00,0x02,0xd2, - 0x05,0xb6,0x00,0x0b,0x00,0x00,0x01,0x21,0x11,0x21, - 0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x02,0xd2, - 0xfe,0x5f,0x01,0x88,0xfe,0x78,0x01,0xa1,0xfd,0xc4, - 0x02,0x3c,0x05,0x29,0xfe,0x1a,0x8d,0xfd,0xd8,0x8e, - 0x05,0xb6,0x00,0x00,0x00,0x01,0x00,0x96,0x00,0x00, - 0x02,0xd2,0x05,0xb6,0x00,0x09,0x00,0x00,0x01,0x21, - 0x11,0x21,0x15,0x21,0x11,0x23,0x11,0x21,0x02,0xd2, - 0xfe,0x5f,0x01,0x89,0xfe,0x77,0x9b,0x02,0x3c,0x05, - 0x29,0xfd,0xdb,0x8d,0xfd,0x89,0x05,0xb6,0x00,0x01, - 0x00,0x66,0xff,0xec,0x03,0xd3,0x05,0xcb,0x00,0x18, - 0x00,0x00,0x01,0x11,0x06,0x23,0x22,0x00,0x10,0x00, - 0x21,0x32,0x17,0x06,0x07,0x26,0x23,0x22,0x02,0x10, - 0x12,0x33,0x32,0x37,0x11,0x23,0x35,0x03,0xd3,0xad, - 0xc0,0xf4,0xfe,0xf4,0x01,0x1d,0x01,0x04,0xaa,0x96, - 0x32,0x0a,0x86,0x78,0xbc,0xca,0xbc,0xaa,0x75,0x57, - 0xd0,0x02,0xf9,0xfd,0x39,0x46,0x01,0x8b,0x02,0xc8, - 0x01,0x8c,0x5d,0x6f,0x14,0x53,0xfe,0xc1,0xfd,0xba, - 0xfe,0xc0,0x1f,0x01,0xd3,0x8e,0x00,0x01,0x00,0x96, - 0x00,0x00,0x03,0x99,0x05,0xb6,0x00,0x0b,0x00,0x00, - 0x21,0x23,0x11,0x21,0x11,0x23,0x11,0x33,0x11,0x21, - 0x11,0x33,0x03,0x99,0x9c,0xfe,0x34,0x9b,0x9b,0x01, - 0xcc,0x9c,0x02,0xb5,0xfd,0x4b,0x05,0xb6,0xfd,0x8d, - 0x02,0x73,0x00,0x00,0x00,0x01,0x00,0xa6,0x00,0x00, - 0x01,0x3c,0x05,0xb6,0x00,0x03,0x00,0x00,0x21,0x23, - 0x11,0x33,0x01,0x3c,0x96,0x96,0x05,0xb6,0x00,0x01, - 0xff,0x91,0xfe,0x7d,0x01,0x2a,0x05,0xb6,0x00,0x0e, - 0x00,0x00,0x01,0x11,0x16,0x06,0x23,0x22,0x23,0x22, - 0x27,0x35,0x16,0x32,0x36,0x35,0x11,0x01,0x2a,0x01, - 0x91,0x80,0x02,0x01,0x51,0x35,0x37,0x85,0x42,0x05, - 0xb6,0xfa,0x49,0xb8,0xc9,0x19,0x8b,0x14,0x71,0x7a, - 0x05,0xbd,0x00,0x00,0x00,0x01,0x00,0x95,0x00,0x00, - 0x03,0x7f,0x05,0xb6,0x00,0x0f,0x00,0x00,0x21,0x23, - 0x11,0x33,0x11,0x36,0x01,0x33,0x01,0x16,0x00,0x17, - 0x23,0x02,0x27,0x07,0x01,0x31,0x9c,0x9c,0x2f,0x01, - 0x64,0xa7,0xfe,0x9b,0x33,0x01,0x00,0x46,0xa9,0xfc, - 0x3a,0x6f,0x05,0xb6,0xfd,0x0a,0x62,0x02,0x94,0xfd, - 0x80,0x6f,0xfd,0xd0,0x97,0x02,0x36,0x80,0x88,0x00, - 0x00,0x00,0x00,0x01,0x00,0x96,0x00,0x00,0x02,0xc2, - 0x05,0xb6,0x00,0x05,0x00,0x00,0x25,0x21,0x15,0x21, - 0x11,0x33,0x01,0x31,0x01,0x91,0xfd,0xd4,0x9b,0x8e, - 0x8e,0x05,0xb6,0x00,0x00,0x01,0x00,0x95,0x00,0x00, - 0x05,0x22,0x05,0xb6,0x00,0x17,0x00,0x00,0x21,0x23, - 0x11,0x34,0x37,0x23,0x01,0x23,0x01,0x23,0x16,0x15, - 0x11,0x23,0x11,0x33,0x01,0x16,0x17,0x33,0x36,0x37, - 0x01,0x33,0x05,0x22,0x96,0x0b,0x08,0xfe,0xa1,0xac, - 0xfe,0x9f,0x09,0x0d,0x92,0xeb,0x01,0x21,0x23,0x11, - 0x08,0x0e,0x29,0x01,0x1e,0xf0,0x04,0x0b,0x61,0xa8, - 0xfa,0xec,0x05,0x16,0xb5,0x54,0xfb,0xf3,0x05,0xb6, - 0xfb,0xd7,0x81,0x68,0x55,0x92,0x04,0x2b,0x00,0x01, - 0x00,0x96,0x00,0x00,0x03,0xec,0x05,0xb6,0x00,0x0f, - 0x00,0x00,0x21,0x23,0x01,0x23,0x16,0x15,0x11,0x23, - 0x11,0x33,0x01,0x33,0x26,0x35,0x11,0x33,0x03,0xec, - 0xc2,0xfd,0xf9,0x0a,0x10,0x93,0xc3,0x02,0x04,0x07, - 0x0b,0x93,0x04,0xcc,0x80,0x86,0xfc,0x3a,0x05,0xb6, - 0xfb,0x42,0x97,0x73,0x03,0xb4,0x00,0x00,0x00,0x02, - 0x00,0x66,0xff,0xec,0x03,0xf5,0x05,0xcb,0x00,0x08, - 0x00,0x11,0x00,0x00,0x01,0x32,0x12,0x10,0x02,0x20, - 0x02,0x11,0x10,0x05,0x22,0x02,0x10,0x12,0x20,0x12, - 0x11,0x10,0x02,0x30,0xdb,0xea,0xeb,0xfe,0x44,0xe8, - 0x01,0xca,0x94,0x96,0x96,0x01,0x23,0x96,0x05,0xcb, - 0xfe,0x7a,0xfd,0x2e,0xfe,0x79,0x01,0x87,0x01,0x6c, - 0x02,0xec,0x8e,0xfe,0xcb,0xfd,0xa8,0xfe,0xca,0x01, - 0x33,0x01,0x30,0x02,0x60,0x00,0x00,0x00,0x00,0x02, - 0x00,0x95,0x00,0x00,0x03,0x36,0x05,0xb6,0x00,0x09, - 0x00,0x11,0x00,0x00,0x13,0x21,0x32,0x16,0x15,0x10, - 0x21,0x23,0x11,0x23,0x13,0x11,0x33,0x32,0x36,0x10, - 0x26,0x23,0x95,0x01,0x01,0xd5,0xcb,0xfe,0x57,0x5c, - 0x9c,0x9c,0x53,0x93,0x82,0x81,0x88,0x05,0xb6,0xd2, - 0xdc,0xfe,0x3b,0xfd,0xbd,0x05,0x2c,0xfd,0xa1,0x91, - 0x01,0x41,0x8d,0x00,0x00,0x00,0x00,0x02,0x00,0x66, - 0xfe,0xa4,0x03,0xf5,0x05,0xcb,0x00,0x10,0x00,0x19, - 0x00,0x00,0x05,0x22,0x02,0x11,0x10,0x21,0x32,0x12, - 0x11,0x10,0x02,0x07,0x13,0x23,0x03,0x26,0x06,0x03, - 0x22,0x02,0x10,0x12,0x20,0x12,0x11,0x10,0x02,0x2d, - 0xdf,0xe8,0x01,0xca,0xdb,0xea,0x8a,0x84,0xe7,0xbb, - 0xbf,0x07,0x1a,0x03,0x94,0x96,0x96,0x01,0x23,0x96, - 0x14,0x01,0x87,0x01,0x6c,0x02,0xec,0xfe,0x7a,0xfe, - 0x98,0xfe,0xea,0xfe,0x96,0x46,0xfe,0x8d,0x01,0x4b, - 0x01,0x04,0x05,0x51,0xfe,0xcb,0xfd,0xa8,0xfe,0xca, - 0x01,0x33,0x01,0x30,0x02,0x60,0x00,0x02,0x00,0x96, - 0x00,0x00,0x03,0x7b,0x05,0xb6,0x00,0x0d,0x00,0x15, - 0x00,0x00,0x13,0x33,0x32,0x16,0x15,0x14,0x06,0x07, - 0x01,0x23,0x01,0x23,0x11,0x23,0x13,0x11,0x33,0x32, - 0x36,0x10,0x26,0x23,0x96,0xfb,0xd9,0xcd,0x69,0x72, - 0x01,0x1f,0xaa,0xfe,0xfd,0x9d,0x9b,0x9b,0x73,0x79, - 0x7c,0x7e,0x8a,0x05,0xb6,0xcc,0xd1,0x96,0xc2,0x32, - 0xfd,0x71,0x02,0x68,0xfd,0x98,0x05,0x28,0xfd,0xc9, - 0x92,0x01,0x23,0x82,0x00,0x00,0x00,0x01,0x00,0x50, - 0xff,0xec,0x02,0xe9,0x05,0xcb,0x00,0x1d,0x00,0x00, - 0x25,0x32,0x36,0x34,0x26,0x27,0x2e,0x01,0x10,0x36, - 0x20,0x17,0x06,0x07,0x26,0x22,0x06,0x14,0x16,0x17, - 0x1e,0x01,0x15,0x14,0x06,0x20,0x27,0x35,0x1e,0x01, - 0x01,0x6f,0x64,0x7b,0x6e,0x64,0x9f,0x81,0xc7,0x01, - 0x3c,0x7b,0x13,0x24,0x74,0xc5,0x75,0x56,0x8a,0x92, - 0x82,0xcb,0xfe,0xa8,0x76,0x3c,0x9c,0x79,0x90,0xcf, - 0x8b,0x3d,0x59,0xb8,0x01,0x44,0xd6,0x48,0x2d,0x5a, - 0x3e,0x83,0xd0,0x7b,0x4d,0x4f,0xc2,0x89,0xbb,0xde, - 0x3a,0xa0,0x23,0x2a,0x00,0x00,0x00,0x01,0x00,0x12, - 0x00,0x00,0x02,0xec,0x05,0xb6,0x00,0x07,0x00,0x00, - 0x01,0x21,0x11,0x23,0x11,0x21,0x35,0x21,0x02,0xec, - 0xfe,0xe1,0x9b,0xfe,0xe0,0x02,0xda,0x05,0x28,0xfa, - 0xd8,0x05,0x28,0x8e,0x00,0x00,0x00,0x01,0x00,0x8b, - 0xff,0xec,0x03,0x96,0x05,0xb6,0x00,0x0f,0x00,0x00, - 0x01,0x11,0x14,0x02,0x20,0x02,0x35,0x11,0x33,0x11, - 0x14,0x16,0x32,0x36,0x35,0x11,0x03,0x96,0xc4,0xfe, - 0x81,0xc8,0x9c,0x7a,0xe4,0x76,0x05,0xb6,0xfc,0x33, - 0xfc,0xfe,0xff,0x01,0x06,0xf8,0x03,0xcc,0xfc,0x25, - 0xad,0xb3,0xb4,0xad,0x03,0xda,0x00,0x01,0x00,0x00, - 0x00,0x00,0x03,0x6b,0x05,0xb6,0x00,0x0c,0x00,0x00, - 0x21,0x23,0x02,0x03,0x33,0x12,0x13,0x16,0x17,0x36, - 0x37,0x13,0x33,0x02,0x12,0xbb,0x58,0xff,0x9e,0x78, - 0x67,0x21,0x14,0x13,0x16,0xf2,0x9e,0x01,0x75,0x04, - 0x41,0xfd,0xe8,0xfe,0x40,0x96,0xa8,0x8f,0x69,0x04, - 0x1e,0x00,0x00,0x01,0x00,0x0c,0x00,0x00,0x05,0xb0, - 0x05,0xb6,0x00,0x22,0x00,0x00,0x01,0x02,0x03,0x23, - 0x03,0x2e,0x05,0x27,0x0f,0x01,0x06,0x07,0x03,0x23, - 0x02,0x03,0x33,0x12,0x17,0x12,0x17,0x36,0x37,0x13, - 0x33,0x13,0x16,0x17,0x36,0x37,0x13,0x05,0xb0,0x3a, - 0xed,0xc0,0x93,0x05,0x17,0x07,0x11,0x0a,0x11,0x0a, - 0x0c,0x0f,0x2a,0x14,0x90,0xbe,0xda,0x50,0x9d,0x7e, - 0x2a,0x42,0x06,0x1f,0x12,0xc1,0xa8,0xa5,0x2b,0x22, - 0x1e,0x19,0xb8,0x05,0xb6,0xfe,0xe4,0xfb,0x66,0x02, - 0xe5,0x19,0x6c,0x23,0x5a,0x48,0x78,0x4d,0x58,0x5f, - 0xe6,0x72,0xfd,0x1b,0x04,0x32,0x01,0x84,0xfd,0x75, - 0xe9,0xfe,0x8b,0x31,0xe2,0x61,0x03,0xd7,0xfc,0xbb, - 0xdc,0xfa,0xf2,0x76,0x03,0xb3,0x00,0x01,0x00,0x0d, - 0x00,0x00,0x03,0x11,0x05,0xb6,0x00,0x0b,0x00,0x00, - 0x09,0x01,0x23,0x0b,0x01,0x23,0x09,0x01,0x33,0x1b, - 0x01,0x33,0x01,0xf6,0x01,0x1b,0xa2,0xd8,0xea,0xa0, - 0x01,0x3c,0xfe,0xe9,0xa0,0xd1,0xc4,0xa1,0x02,0xf0, - 0xfd,0x10,0x02,0x6f,0xfd,0x91,0x03,0x03,0x02,0xb3, - 0xfd,0xca,0x02,0x36,0x00,0x00,0x00,0x01,0x00,0x00, - 0x00,0x00,0x03,0x09,0x05,0xb6,0x00,0x08,0x00,0x00, - 0x21,0x23,0x11,0x01,0x33,0x1b,0x01,0x33,0x01,0x01, - 0xd1,0x9b,0xfe,0xca,0xa4,0xe1,0xe0,0xa4,0xfe,0xc8, - 0x02,0x3c,0x03,0x7a,0xfd,0x48,0x02,0xb8,0xfc,0x8a, - 0x00,0x01,0x00,0x34,0x00,0x00,0x02,0xa7,0x05,0xb6, - 0x00,0x09,0x00,0x00,0x25,0x15,0x21,0x35,0x01,0x21, - 0x35,0x21,0x15,0x01,0x02,0xa7,0xfd,0x8d,0x01,0xb7, - 0xfe,0x52,0x02,0x5d,0xfe,0x45,0x8e,0x8e,0x7a,0x04, - 0xad,0x8f,0x7b,0xfb,0x53,0x00,0x00,0x00,0x00,0x01, - 0x00,0xa0,0xfe,0xbc,0x02,0x45,0x05,0xb6,0x00,0x07, - 0x00,0x00,0x01,0x21,0x11,0x21,0x15,0x21,0x11,0x21, - 0x02,0x45,0xfe,0xec,0x01,0x14,0xfe,0x5b,0x01,0xa5, - 0x05,0x38,0xfa,0x03,0x7f,0x06,0xfa,0x00,0x00,0x01, - 0x00,0x27,0x00,0x00,0x02,0xd1,0x05,0xb6,0x00,0x03, - 0x00,0x00,0x21,0x23,0x01,0x33,0x02,0xd1,0x99,0xfd, - 0xef,0x95,0x05,0xb6,0x00,0x00,0x00,0x01,0x00,0x41, - 0xfe,0xbc,0x01,0xe6,0x05,0xb6,0x00,0x07,0x00,0x00, - 0x01,0x21,0x35,0x21,0x11,0x21,0x35,0x21,0x01,0xe6, - 0xfe,0x5b,0x01,0x15,0xfe,0xeb,0x01,0xa5,0xfe,0xbc, - 0x7f,0x05,0xfd,0x7e,0x00,0x00,0x00,0x01,0x00,0x1d, - 0x02,0xa9,0x03,0x70,0x05,0xb7,0x00,0x06,0x00,0x00, - 0x01,0x23,0x09,0x01,0x23,0x01,0x33,0x03,0x70,0x8f, - 0xfe,0xdf,0xfe,0xea,0x8d,0x01,0x73,0x5a,0x02,0xa9, - 0x02,0x66,0xfd,0x9a,0x03,0x0e,0x00,0x01,0xff,0xfc, - 0xfe,0xe3,0x03,0x1e,0xff,0x48,0x00,0x03,0x00,0x00, - 0x01,0x21,0x35,0x21,0x03,0x1e,0xfc,0xde,0x03,0x22, - 0xfe,0xe3,0x65,0x00,0x00,0x01,0x01,0x89,0x04,0xd9, - 0x02,0xff,0x06,0x21,0x00,0x0a,0x00,0x00,0x01,0x33, - 0x1e,0x01,0x17,0x15,0x23,0x26,0x27,0x26,0x27,0x01, - 0x89,0xbd,0x1d,0x6b,0x31,0x5e,0x44,0x5a,0x59,0x21, - 0x06,0x21,0x43,0xb1,0x3d,0x17,0x38,0x60,0x61,0x3d, - 0x00,0x00,0x00,0x02,0x00,0x46,0xff,0xee,0x02,0xc8, - 0x04,0x5c,0x00,0x15,0x00,0x20,0x00,0x00,0x13,0x27, - 0x36,0x20,0x16,0x15,0x11,0x23,0x27,0x23,0x06,0x23, - 0x22,0x26,0x10,0x36,0x3f,0x01,0x35,0x34,0x26,0x22, - 0x13,0x35,0x06,0x07,0x0e,0x01,0x15,0x14,0x33,0x32, - 0x36,0xcc,0x3a,0x82,0x01,0x26,0x8e,0x74,0x1a,0x05, - 0x52,0x9f,0x78,0x86,0xbc,0xb0,0x7f,0x48,0xb2,0xfa, - 0x22,0x44,0x76,0x71,0x89,0x5c,0x68,0x03,0x9b,0x6f, - 0x52,0xb6,0xc1,0xfd,0x1b,0x98,0xaa,0xa8,0x01,0x3a, - 0xb3,0x08,0x06,0x56,0x80,0x77,0xfd,0xda,0x6a,0x01, - 0x04,0x06,0x77,0x73,0xc7,0xb3,0x00,0x02,0x00,0x86, - 0xff,0xec,0x03,0x4e,0x06,0x14,0x00,0x0f,0x00,0x19, - 0x00,0x00,0x01,0x07,0x33,0x36,0x20,0x12,0x10,0x02, - 0x20,0x27,0x23,0x06,0x07,0x23,0x11,0x33,0x11,0x15, - 0x14,0x16,0x32,0x36,0x10,0x26,0x22,0x06,0x01,0x1d, - 0x07,0x0a,0x57,0x01,0x31,0xa6,0xa5,0xfe,0xcd,0x59, - 0x0b,0x08,0x0f,0x75,0x97,0x66,0xcf,0x60,0x60,0xd3, - 0x62,0x04,0x48,0x92,0xa4,0xfe,0xe0,0xfd,0xd7,0xfe, - 0xdb,0xa2,0x37,0x57,0x06,0x14,0xfc,0x1b,0x1a,0xd6, - 0xce,0xd7,0x01,0xb7,0xd5,0xc2,0x00,0x00,0x00,0x01, - 0x00,0x58,0xff,0xec,0x02,0x7e,0x04,0x5b,0x00,0x13, - 0x00,0x00,0x05,0x22,0x02,0x11,0x10,0x21,0x32,0x17, - 0x07,0x26,0x23,0x22,0x11,0x14,0x16,0x33,0x32,0x37, - 0x15,0x06,0x01,0xba,0xaf,0xb3,0x01,0x62,0x72,0x52, - 0x32,0x47,0x3c,0xd5,0x6b,0x70,0x4a,0x5c,0x59,0x14, - 0x01,0x1d,0x01,0x14,0x02,0x3e,0x30,0x7c,0x25,0xfe, - 0x4b,0xdc,0xd0,0x2a,0x83,0x2e,0x00,0x02,0x00,0x57, - 0xff,0xec,0x03,0x1f,0x06,0x14,0x00,0x12,0x00,0x1c, - 0x00,0x00,0x21,0x23,0x26,0x27,0x23,0x06,0x20,0x02, - 0x10,0x12,0x33,0x32,0x16,0x17,0x33,0x26,0x27,0x11, - 0x33,0x03,0x35,0x34,0x26,0x22,0x06,0x10,0x16,0x32, - 0x36,0x03,0x1f,0x75,0x0f,0x05,0x09,0x53,0xfe,0xc3, - 0xa6,0xa4,0x99,0x47,0x80,0x29,0x0b,0x05,0x02,0x97, - 0x98,0x67,0xd0,0x5c,0x5f,0xca,0x6a,0x6a,0x2b,0xa9, - 0x01,0x20,0x02,0x27,0x01,0x28,0x54,0x4c,0x4d,0x4a, - 0x01,0xc2,0xfb,0xd7,0x35,0xe2,0xd1,0xdb,0xfe,0x4d, - 0xd8,0xbe,0x00,0x02,0x00,0x58,0xff,0xec,0x02,0xfb, - 0x04,0x5b,0x00,0x10,0x00,0x16,0x00,0x00,0x05,0x22, - 0x02,0x10,0x12,0x33,0x32,0x12,0x1d,0x01,0x21,0x12, - 0x33,0x32,0x37,0x15,0x06,0x13,0x34,0x26,0x23,0x22, - 0x03,0x01,0xdc,0xb9,0xcb,0xb6,0xa9,0x96,0xae,0xfd, - 0xf7,0x06,0xf4,0x72,0x76,0x70,0x01,0x60,0x53,0xad, - 0x10,0x14,0x01,0x25,0x02,0x20,0x01,0x2a,0xfe,0xfb, - 0xdf,0x6a,0xfe,0x62,0x47,0x86,0x44,0x02,0x9a,0x9d, - 0xbb,0xfe,0xa8,0x00,0x00,0x00,0x00,0x01,0x00,0x16, - 0x00,0x00,0x02,0x33,0x06,0x1f,0x00,0x16,0x00,0x00, - 0x13,0x34,0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x0e, - 0x01,0x1d,0x01,0x33,0x15,0x23,0x11,0x23,0x11,0x23, - 0x35,0x36,0x37,0x9e,0x76,0x87,0x52,0x46,0x2d,0x33, - 0x2f,0x3f,0x31,0xaf,0xaf,0x96,0x88,0x19,0x6f,0x04, - 0xa1,0xc7,0xb7,0x20,0x7e,0x19,0x02,0x6e,0x8c,0x58, - 0x7e,0xfc,0x38,0x03,0xc8,0x50,0x0b,0x2b,0x00,0x03, - 0x00,0x1d,0xfe,0x14,0x03,0x13,0x04,0x5b,0x00,0x2b, - 0x00,0x34,0x00,0x3f,0x00,0x00,0x25,0x33,0x32,0x16, - 0x15,0x14,0x06,0x23,0x22,0x26,0x35,0x34,0x37,0x2e, - 0x01,0x34,0x36,0x37,0x2e,0x01,0x35,0x34,0x36,0x33, - 0x32,0x17,0x36,0x32,0x17,0x15,0x07,0x1e,0x01,0x15, - 0x14,0x06,0x2b,0x01,0x22,0x27,0x0e,0x01,0x14,0x16, - 0x12,0x26,0x22,0x06,0x14,0x16,0x33,0x32,0x35,0x03, - 0x23,0x22,0x06,0x14,0x16,0x33,0x32,0x36,0x35,0x34, - 0x01,0x84,0x63,0x91,0x9b,0xe7,0xc4,0xa0,0xab,0xd7, - 0x34,0x3d,0x38,0x42,0x4e,0x54,0xa1,0x90,0x3d,0x3c, - 0x0d,0x82,0x77,0x8f,0x1a,0x21,0xa4,0x83,0x08,0x1e, - 0x10,0x2b,0x2c,0x44,0xdc,0x4e,0x96,0x51,0x53,0x4a, - 0x98,0x5e,0x4c,0x61,0x6c,0x64,0x61,0x81,0x91,0xaa, - 0x9a,0x94,0xa7,0xc1,0x99,0x8f,0xcb,0x4e,0x16,0x51, - 0x64,0x4d,0x33,0x26,0xab,0x72,0xb1,0xc7,0x16,0x01, - 0x01,0x60,0x15,0x25,0x81,0x43,0xa4,0xc5,0x04,0x20, - 0x3b,0x4f,0x2e,0x02,0xbb,0x87,0x8a,0xf9,0x7e,0xfd, - 0xfd,0x37,0x73,0xbf,0x65,0x7c,0x6d,0xae,0x00,0x01, - 0x00,0x86,0x00,0x00,0x03,0x1d,0x06,0x14,0x00,0x16, - 0x00,0x00,0x01,0x11,0x14,0x07,0x33,0x3e,0x01,0x33, - 0x32,0x16,0x15,0x11,0x23,0x11,0x34,0x26,0x23,0x22, - 0x06,0x15,0x11,0x23,0x11,0x01,0x1d,0x06,0x0a,0x21, - 0x7f,0x4c,0x8d,0x83,0x98,0x47,0x4f,0x6b,0x67,0x97, - 0x06,0x14,0xfe,0x3b,0x43,0x59,0x4e,0x5a,0xba,0xbc, - 0xfd,0x1b,0x02,0xd0,0x8a,0x7c,0xc9,0xcf,0xfd,0xc2, - 0x06,0x14,0x00,0x00,0x00,0x02,0x00,0x7a,0x00,0x00, - 0x01,0x2d,0x05,0xdf,0x00,0x07,0x00,0x0b,0x00,0x00, - 0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x13,0x23, - 0x11,0x33,0x7a,0x32,0x52,0x2f,0x30,0x51,0x32,0xa5, - 0x98,0x98,0x05,0xa4,0x3b,0x3b,0x67,0x3b,0x3b,0xfa, - 0xc3,0x04,0x47,0x00,0x00,0x00,0x00,0x02,0xff,0xea, - 0xfe,0x14,0x01,0x2f,0x05,0xdf,0x00,0x07,0x00,0x14, - 0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26, - 0x17,0x11,0x10,0x23,0x22,0x27,0x35,0x16,0x33,0x32, - 0x36,0x35,0x11,0x7c,0x32,0x53,0x2e,0x2f,0x51,0x33, - 0xa5,0xdc,0x38,0x23,0x25,0x21,0x2f,0x2a,0x05,0xa4, - 0x3b,0x3b,0x66,0x3c,0x3c,0xf7,0xfb,0x08,0xfe,0xc5, - 0x14,0x85,0x11,0x58,0x5d,0x04,0xf6,0x00,0x00,0x01, - 0x00,0x86,0x00,0x00,0x03,0x10,0x06,0x14,0x00,0x0e, - 0x00,0x00,0x21,0x23,0x11,0x33,0x11,0x07,0x33,0x37, - 0x13,0x33,0x09,0x01,0x23,0x03,0x07,0x01,0x1e,0x98, - 0x98,0x09,0x09,0x3f,0xfc,0xa2,0xfe,0xfc,0x01,0x19, - 0x9f,0xe0,0x73,0x06,0x14,0xfc,0xdd,0xc3,0x75,0x01, - 0xa4,0xfe,0x5d,0xfd,0x5c,0x02,0x2c,0x89,0x00,0x01, - 0x00,0x86,0x00,0x00,0x01,0x1e,0x06,0x14,0x00,0x03, - 0x00,0x00,0x21,0x23,0x11,0x33,0x01,0x1e,0x98,0x98, - 0x06,0x14,0x00,0x01,0x00,0x86,0x00,0x00,0x04,0xf4, - 0x04,0x5b,0x00,0x22,0x00,0x00,0x01,0x17,0x33,0x36, - 0x33,0x32,0x17,0x3e,0x02,0x37,0x36,0x33,0x32,0x16, - 0x15,0x11,0x23,0x11,0x10,0x23,0x22,0x06,0x15,0x11, - 0x23,0x11,0x10,0x23,0x22,0x06,0x15,0x11,0x23,0x11, - 0x01,0x01,0x10,0x0c,0x44,0xa5,0xb4,0x37,0x14,0x17, - 0x33,0x18,0x3f,0x4c,0x83,0x7f,0x97,0x93,0x66,0x5b, - 0x98,0x93,0x65,0x5c,0x97,0x04,0x46,0x94,0xa9,0xbe, - 0x22,0x25,0x3d,0x10,0x2a,0xc4,0xcd,0xfd,0x36,0x02, - 0xca,0x01,0x08,0xb7,0xc0,0xfd,0xa5,0x02,0xca,0x01, - 0x08,0xbd,0xd6,0xfd,0xc1,0x04,0x46,0x00,0x00,0x00, - 0x00,0x01,0x00,0x86,0x00,0x00,0x03,0x1d,0x04,0x5b, - 0x00,0x13,0x00,0x00,0x01,0x17,0x33,0x3e,0x01,0x33, - 0x32,0x16,0x15,0x11,0x23,0x11,0x10,0x23,0x22,0x06, - 0x19,0x01,0x23,0x11,0x01,0x01,0x10,0x0c,0x22,0x82, - 0x4f,0x88,0x85,0x98,0x93,0x7a,0x5b,0x97,0x04,0x46, - 0x94,0x50,0x59,0xb7,0xbe,0xfd,0x1a,0x02,0xd0,0x01, - 0x06,0xdb,0xfe,0xf5,0xfe,0x10,0x04,0x46,0x00,0x02, - 0x00,0x57,0xff,0xec,0x03,0x30,0x04,0x5b,0x00,0x07, - 0x00,0x0f,0x00,0x00,0x1a,0x01,0x20,0x12,0x10,0x02, - 0x20,0x02,0x01,0x22,0x06,0x10,0x16,0x33,0x32,0x10, - 0x57,0xbd,0x01,0x5a,0xc2,0xc0,0xfe,0xa7,0xc0,0x01, - 0x6c,0x6d,0x63,0x65,0x6b,0xd0,0x03,0x36,0x01,0x25, - 0xfe,0xd3,0xfd,0xe6,0xfe,0xd8,0x01,0x29,0x02,0xbf, - 0xd4,0xfe,0x4c,0xd9,0x03,0x61,0x00,0x02,0x00,0x86, - 0xfe,0x14,0x03,0x4e,0x04,0x58,0x00,0x12,0x00,0x1c, - 0x00,0x00,0x01,0x32,0x12,0x10,0x02,0x23,0x22,0x26, - 0x27,0x23,0x16,0x17,0x11,0x23,0x11,0x33,0x17,0x33, - 0x36,0x03,0x14,0x16,0x32,0x36,0x10,0x26,0x22,0x06, - 0x07,0x02,0x18,0x97,0x9f,0xa3,0x97,0x4f,0x7f,0x27, - 0x0b,0x09,0x01,0x98,0x78,0x16,0x0a,0x51,0x52,0x66, - 0xcf,0x60,0x5d,0xd3,0x64,0x01,0x04,0x58,0xfe,0xdb, - 0xfd,0xe3,0xfe,0xd6,0x53,0x4f,0x67,0x1f,0xfe,0x0c, - 0x06,0x32,0x94,0xa6,0xfd,0xd2,0xe3,0xd6,0xd7,0x01, - 0xb9,0xd3,0xbd,0xcd,0x00,0x00,0x00,0x02,0x00,0x57, - 0xfe,0x14,0x03,0x1f,0x04,0x57,0x00,0x12,0x00,0x1c, - 0x00,0x00,0x25,0x06,0x20,0x02,0x10,0x12,0x33,0x32, - 0x16,0x17,0x33,0x36,0x37,0x33,0x11,0x23,0x11,0x34, - 0x37,0x03,0x35,0x34,0x26,0x22,0x06,0x10,0x16,0x32, - 0x36,0x02,0x89,0x54,0xfe,0xc7,0xa5,0xa5,0x94,0x52, - 0x78,0x2b,0x0a,0x0c,0x07,0x7d,0x97,0x0a,0x0b,0x66, - 0xd0,0x5d,0x5f,0xcb,0x69,0x99,0xad,0x01,0x1f,0x02, - 0x2a,0x01,0x22,0x4c,0x55,0x60,0x30,0xf9,0xce,0x01, - 0xd5,0x3e,0x72,0x01,0x5a,0x2d,0xe1,0xd2,0xdb,0xfe, - 0x45,0xce,0xc4,0x00,0x00,0x00,0x00,0x01,0x00,0x86, - 0x00,0x00,0x02,0x4c,0x04,0x5c,0x00,0x0f,0x00,0x00, - 0x00,0x36,0x32,0x17,0x07,0x26,0x23,0x22,0x06,0x15, - 0x11,0x23,0x11,0x33,0x17,0x33,0x01,0x43,0x67,0x76, - 0x2c,0x19,0x24,0x26,0x57,0x74,0x98,0x7d,0x11,0x07, - 0x03,0xf8,0x64,0x0f,0x95,0x0e,0xde,0xaa,0xfd,0xc2, - 0x04,0x47,0xb9,0x00,0x00,0x00,0x00,0x01,0x00,0x46, - 0xff,0xec,0x02,0x69,0x04,0x5c,0x00,0x25,0x00,0x00, - 0x36,0x16,0x32,0x36,0x35,0x34,0x27,0x2e,0x03,0x27, - 0x26,0x35,0x34,0x37,0x36,0x20,0x17,0x07,0x26,0x22, - 0x06,0x15,0x14,0x1f,0x01,0x1e,0x02,0x17,0x16,0x15, - 0x14,0x06,0x20,0x27,0x35,0x68,0x8b,0x8f,0x58,0x18, - 0x07,0x2e,0x14,0x7e,0x3b,0x7a,0x55,0x57,0x01,0x0f, - 0x68,0x3e,0x5b,0xa0,0x55,0x3c,0x82,0x2b,0x33,0x3c, - 0x10,0x26,0x9f,0xfe,0xd6,0x5a,0xa2,0x2d,0x58,0x42, - 0x32,0x31,0x0f,0x2b,0x0f,0x5a,0x2f,0x61,0x9c,0x7d, - 0x4f,0x4f,0x44,0x76,0x38,0x54,0x44,0x58,0x2e,0x61, - 0x20,0x2a,0x40,0x1f,0x48,0x5b,0x91,0x92,0x3e,0x97, - 0x00,0x00,0x00,0x01,0x00,0x27,0xff,0xec,0x01,0xe7, - 0x05,0x42,0x00,0x14,0x00,0x00,0x01,0x33,0x15,0x23, - 0x11,0x14,0x16,0x32,0x37,0x15,0x06,0x23,0x22,0x26, - 0x35,0x11,0x23,0x35,0x3f,0x01,0x33,0x01,0x25,0xb6, - 0xb6,0x2e,0x6b,0x29,0x33,0x59,0x74,0x5a,0x66,0x6e, - 0x2c,0x64,0x04,0x46,0x7e,0xfd,0x4d,0x59,0x4b,0x11, - 0x7a,0x1c,0xb0,0xc0,0x02,0x6c,0x4d,0x32,0xfb,0x00, - 0x00,0x01,0x00,0x80,0xff,0xec,0x03,0x17,0x04,0x46, - 0x00,0x15,0x00,0x00,0x21,0x23,0x26,0x27,0x23,0x0e, - 0x01,0x23,0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16, - 0x33,0x32,0x36,0x35,0x11,0x33,0x03,0x17,0x7b,0x08, - 0x0b,0x0a,0x24,0x80,0x4e,0x89,0x84,0x98,0x46,0x4c, - 0x6e,0x68,0x97,0x38,0x5d,0x50,0x59,0xc1,0xcf,0x02, - 0xca,0xfd,0x4b,0x95,0x8b,0xc0,0xd6,0x02,0x3f,0x00, - 0x00,0x00,0x00,0x01,0x00,0x06,0x00,0x00,0x02,0xdc, - 0x04,0x46,0x00,0x0c,0x00,0x00,0x21,0x23,0x01,0x33, - 0x16,0x17,0x12,0x13,0x33,0x3e,0x01,0x13,0x33,0x01, - 0xca,0xb8,0xfe,0xf4,0x9c,0x10,0x30,0x5c,0x2f,0x07, - 0x0a,0x1b,0xa7,0x9c,0x04,0x46,0x46,0xce,0xfe,0x7c, - 0xfe,0xea,0x4c,0x8d,0x02,0xd5,0x00,0x00,0x00,0x01, - 0x00,0x14,0x00,0x00,0x04,0xc4,0x04,0x46,0x00,0x1a, - 0x00,0x00,0x01,0x06,0x03,0x23,0x03,0x33,0x1a,0x01, - 0x17,0x33,0x36,0x37,0x13,0x33,0x13,0x16,0x17,0x33, - 0x36,0x13,0x33,0x06,0x03,0x23,0x03,0x26,0x27,0x02, - 0x6a,0x1a,0x99,0xbc,0xe7,0x97,0x61,0x3e,0x12,0x06, - 0x14,0x1e,0x7e,0xb4,0x7f,0x11,0x20,0x06,0x07,0xad, - 0x94,0x1c,0xd1,0xbd,0x90,0x14,0x09,0x03,0xa8,0xa9, - 0xfd,0x01,0x04,0x46,0xfe,0x2a,0xfe,0xa2,0x7e,0xb0, - 0x92,0x02,0x70,0xfd,0x8e,0x4a,0xf6,0x5d,0x03,0x55, - 0x82,0xfc,0x3c,0x02,0xeb,0x7e,0x3f,0x00,0x00,0x01, - 0x00,0x1c,0x00,0x00,0x02,0xce,0x04,0x47,0x00,0x0b, - 0x00,0x00,0x09,0x01,0x23,0x0b,0x01,0x23,0x01,0x03, - 0x33,0x1b,0x01,0x33,0x01,0xc3,0x01,0x0b,0x9f,0xbc, - 0xba,0x9d,0x01,0x0d,0xfb,0xa0,0xab,0xac,0x9d,0x02, - 0x2d,0xfd,0xd3,0x01,0xb0,0xfe,0x50,0x02,0x35,0x02, - 0x12,0xfe,0x69,0x01,0x97,0x00,0x00,0x00,0x00,0x01, - 0x00,0x06,0xfe,0x14,0x02,0xdc,0x04,0x46,0x00,0x1a, - 0x00,0x00,0x00,0x06,0x22,0x27,0x35,0x16,0x33,0x32, - 0x36,0x3f,0x01,0x01,0x33,0x13,0x16,0x17,0x33,0x36, - 0x37,0x12,0x37,0x33,0x02,0x03,0x0e,0x02,0x01,0x06, - 0x59,0x6b,0x36,0x2a,0x29,0x3e,0x4c,0x19,0x27,0xfe, - 0xdd,0x9c,0xa0,0x1c,0x16,0x07,0x15,0x18,0x6c,0x2b, - 0x9d,0x86,0x91,0x1c,0x29,0x3b,0xfe,0x40,0x2c,0x11, - 0x84,0x0e,0x61,0x6b,0x95,0x04,0x4a,0xfd,0x6b,0x73, - 0x93,0x8a,0x75,0x01,0xda,0xc2,0xfd,0xf4,0xfd,0xc0, - 0x6a,0x83,0x86,0x00,0x00,0x01,0x00,0x35,0x00,0x00, - 0x02,0x2f,0x04,0x47,0x00,0x09,0x00,0x00,0x25,0x15, - 0x21,0x35,0x01,0x21,0x35,0x21,0x15,0x01,0x02,0x2f, - 0xfe,0x06,0x01,0x47,0xfe,0xce,0x01,0xd6,0xfe,0xbd, - 0x7f,0x7f,0x6b,0x03,0x5c,0x80,0x72,0xfc,0xaa,0x00, - 0x00,0x00,0x00,0x01,0x00,0x51,0xfe,0xbc,0x02,0x90, - 0x05,0xb6,0x00,0x1f,0x00,0x00,0x01,0x11,0x0e,0x01, - 0x07,0x15,0x1e,0x01,0x15,0x11,0x14,0x16,0x17,0x15, - 0x2e,0x01,0x27,0x11,0x34,0x26,0x23,0x35,0x32,0x36, - 0x35,0x11,0x34,0x36,0x37,0x15,0x0e,0x01,0x01,0xc4, - 0x01,0x63,0x6b,0x6b,0x64,0x5a,0x72,0xb3,0xab,0x02, - 0x65,0x7a,0x78,0x67,0xaf,0xb1,0x6a,0x62,0x04,0x6d, - 0xfe,0xc8,0x6f,0x75,0x14,0x09,0x13,0x75,0x6c,0xfe, - 0xde,0x78,0x6d,0x01,0x7c,0x04,0x98,0x98,0x01,0x40, - 0x6f,0x5e,0x78,0x56,0x72,0x01,0x46,0x98,0x97,0x04, - 0x7c,0x01,0x63,0x00,0x00,0x00,0x00,0x01,0x01,0x7b, - 0xfe,0x1b,0x01,0xff,0x06,0x12,0x00,0x03,0x00,0x00, - 0x01,0x23,0x11,0x33,0x01,0xff,0x84,0x84,0xfe,0x1b, - 0x07,0xf7,0x00,0x00,0x00,0x01,0x00,0x50,0xfe,0xbc, - 0x02,0x90,0x05,0xb6,0x00,0x1d,0x00,0x00,0x01,0x11, - 0x14,0x16,0x33,0x15,0x22,0x06,0x15,0x11,0x10,0x05, - 0x35,0x3e,0x01,0x35,0x11,0x34,0x36,0x37,0x35,0x2e, - 0x01,0x35,0x11,0x34,0x26,0x27,0x35,0x04,0x01,0xb1, - 0x65,0x7a,0x73,0x6c,0xfe,0x9f,0x6c,0x62,0x63,0x6b, - 0x6a,0x64,0x62,0x6c,0x01,0x61,0x04,0x83,0xfe,0xba, - 0x6e,0x5a,0x78,0x55,0x78,0xfe,0xc0,0xfe,0xd4,0x08, - 0x7c,0x01,0x65,0x67,0x01,0x3a,0x6d,0x74,0x14,0x09, - 0x13,0x76,0x6f,0x01,0x38,0x68,0x64,0x01,0x7c,0x09, - 0x00,0x01,0x00,0x70,0x02,0x5b,0x03,0x14,0x03,0x4f, - 0x00,0x1c,0x00,0x00,0x01,0x22,0x27,0x2e,0x01,0x27, - 0x22,0x07,0x06,0x07,0x35,0x3e,0x01,0x33,0x1e,0x07, - 0x17,0x16,0x33,0x32,0x37,0x15,0x06,0x02,0x57,0x3c, - 0x41,0x0b,0x86,0x26,0x4e,0x57,0x0c,0x02,0x1c,0x66, - 0x29,0x22,0x26,0x0e,0x1b,0x0b,0x1d,0x08,0x20,0x03, - 0x4a,0x34,0x5d,0x5a,0x4d,0x02,0x5b,0x1c,0x04,0x43, - 0x09,0x45,0x0a,0x01,0x8d,0x19,0x2b,0x03,0x0d,0x04, - 0x0c,0x04,0x0e,0x05,0x0f,0x02,0x27,0x76,0x8a,0x6a, - 0x00,0x00,0x00,0x02,0x00,0x87,0xfe,0x81,0x01,0x5c, - 0x04,0x49,0x00,0x08,0x00,0x0c,0x00,0x00,0x12,0x36, - 0x32,0x16,0x14,0x06,0x23,0x22,0x35,0x13,0x23,0x13, - 0x33,0x87,0x37,0x65,0x39,0x39,0x32,0x6a,0xc9,0xbf, - 0x29,0x6d,0x04,0x09,0x40,0x3f,0x7e,0x3e,0x7e,0xfa, - 0xb5,0x04,0x24,0x00,0x00,0x01,0x00,0xa1,0xff,0xec, - 0x02,0xc7,0x05,0xc9,0x00,0x17,0x00,0x00,0x01,0x07, - 0x26,0x23,0x22,0x06,0x15,0x10,0x33,0x32,0x37,0x15, - 0x06,0x07,0x15,0x23,0x35,0x24,0x10,0x25,0x35,0x33, - 0x15,0x16,0x02,0xc7,0x32,0x4e,0x35,0x6e,0x66,0xd3, - 0x51,0x5a,0x3a,0x5c,0x6e,0xfe,0xe9,0x01,0x17,0x6e, - 0x5c,0x04,0xf5,0x7e,0x24,0xd9,0xd9,0xfe,0x54,0x2d, - 0x86,0x23,0x0b,0xca,0xd0,0x39,0x03,0xed,0x3b,0xac, - 0xa5,0x09,0x00,0x00,0x00,0x01,0x00,0x4f,0x00,0x00, - 0x03,0x17,0x05,0xcb,0x00,0x1e,0x00,0x00,0x13,0x11, - 0x34,0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x22,0x06, - 0x15,0x11,0x33,0x15,0x23,0x15,0x14,0x07,0x06,0x07, - 0x21,0x15,0x21,0x35,0x36,0x3d,0x01,0x23,0x35,0xec, - 0x8b,0xa1,0x8d,0x6e,0x41,0x55,0x61,0x4f,0x47,0xf7, - 0xf7,0x0b,0x0b,0x67,0x02,0x0e,0xfd,0x3f,0x96,0x9d, - 0x03,0x1c,0x01,0x06,0xda,0xcf,0x53,0x79,0x43,0x75, - 0x7f,0xfe,0xce,0x7d,0x8c,0x4a,0x4a,0xa7,0x4a,0x8e, - 0x82,0x44,0xe4,0xf5,0x7d,0x00,0x00,0x02,0x00,0x71, - 0x01,0x12,0x03,0xf4,0x04,0x93,0x00,0x1a,0x00,0x22, - 0x00,0x00,0x01,0x16,0x10,0x07,0x16,0x17,0x07,0x27, - 0x06,0x20,0x27,0x07,0x27,0x37,0x26,0x10,0x37,0x27, - 0x37,0x17,0x36,0x20,0x17,0x36,0x37,0x17,0x0e,0x01, - 0x26,0x22,0x06,0x14,0x16,0x32,0x36,0x03,0x6e,0x4e, - 0x4e,0x42,0x43,0x54,0x86,0x68,0xfe,0xfb,0x64,0x82, - 0x53,0x83,0x4c,0x4c,0x85,0x53,0x85,0x69,0x01,0x01, - 0x66,0x43,0x42,0x56,0x2c,0x7d,0xa2,0xe6,0xa5,0xa1, - 0xe7,0xa5,0x03,0xbc,0x68,0xfe,0xfb,0x66,0x43,0x42, - 0x52,0x83,0x4b,0x4d,0x83,0x54,0x82,0x67,0x00,0xff, - 0x6a,0x85,0x54,0x86,0x4f,0x4e,0x42,0x43,0x52,0x2d, - 0xd3,0xa8,0xa1,0xe9,0xa1,0xa2,0x00,0x01,0x00,0x49, - 0x00,0x00,0x03,0x13,0x05,0xb6,0x00,0x1b,0x00,0x00, - 0x01,0x15,0x23,0x15,0x33,0x15,0x23,0x11,0x23,0x11, - 0x23,0x35,0x33,0x35,0x22,0x35,0x23,0x35,0x33,0x26, - 0x02,0x27,0x33,0x1b,0x01,0x33,0x02,0x03,0x02,0xe0, - 0xe4,0xe4,0xe4,0x9d,0xe1,0xe1,0x01,0xe0,0xbd,0x28, - 0xa2,0x28,0x9e,0xc8,0xc4,0xa0,0x52,0xa2,0x02,0xa1, - 0x6f,0xb5,0x6f,0xfe,0xf2,0x01,0x0e,0x6f,0xb4,0x01, - 0x6f,0x83,0x02,0x0e,0x84,0xfd,0x32,0x02,0xce,0xfe, - 0xf9,0xfd,0xf2,0x00,0x00,0x02,0x01,0x7b,0xfe,0x1b, - 0x01,0xff,0x06,0x12,0x00,0x03,0x00,0x07,0x00,0x00, - 0x01,0x23,0x11,0x33,0x11,0x23,0x11,0x33,0x01,0xff, - 0x84,0x84,0x84,0x84,0x02,0xf1,0x03,0x21,0xf8,0x09, - 0x03,0x22,0x00,0x00,0x00,0x02,0x00,0x52,0x00,0x36, - 0x02,0x93,0x06,0x14,0x00,0x30,0x00,0x3b,0x00,0x00, - 0x01,0x33,0x1e,0x01,0x17,0x07,0x26,0x22,0x06,0x15, - 0x14,0x17,0x16,0x1f,0x01,0x1e,0x01,0x14,0x06,0x07, - 0x1e,0x01,0x15,0x14,0x06,0x20,0x27,0x35,0x16,0x33, - 0x32,0x36,0x35,0x34,0x2e,0x04,0x35,0x34,0x36,0x37, - 0x26,0x35,0x34,0x3f,0x01,0x36,0x13,0x34,0x26,0x27, - 0x0e,0x01,0x14,0x16,0x1f,0x01,0x36,0x01,0x8f,0x15, - 0x3f,0x5f,0x42,0x2f,0x67,0xa8,0x57,0x17,0x11,0x7c, - 0x3d,0x6b,0x57,0x41,0x38,0x3e,0x38,0xab,0xfe,0xd0, - 0x62,0x69,0x8d,0x56,0x66,0x40,0xa9,0x58,0x4e,0x20, - 0x4b,0x43,0x7e,0x52,0x0e,0x50,0xf5,0x4e,0x79,0x33, - 0x37,0x4e,0x62,0x36,0x4b,0x06,0x14,0x01,0x1a,0x20, - 0x6f,0x38,0x4c,0x41,0x2d,0x1b,0x2e,0x4a,0x25,0x41, - 0x78,0xa9,0x82,0x23,0x2f,0x65,0x42,0x82,0x9b,0x38, - 0x83,0x4a,0x5b,0x47,0x31,0x54,0x63,0x3b,0x4c,0x52, - 0x34,0x4f,0x7a,0x21,0x57,0x8d,0x77,0x49,0x09,0x3f, - 0xfc,0xf5,0x45,0x5f,0x40,0x13,0x54,0x74,0x59,0x34, - 0x1d,0x38,0x00,0x00,0x00,0x02,0x01,0x36,0x05,0x0f, - 0x03,0x31,0x05,0xd2,0x00,0x07,0x00,0x0f,0x00,0x00, - 0x00,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32, - 0x16,0x14,0x06,0x22,0x26,0x34,0x01,0x66,0x4c,0x2f, - 0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30, - 0x05,0xd2,0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f, - 0x33,0x34,0x5d,0x00,0x00,0x03,0x00,0x61,0xff,0xec, - 0x06,0x41,0x05,0xcb,0x00,0x10,0x00,0x21,0x00,0x35, - 0x00,0x00,0x01,0x32,0x04,0x12,0x15,0x14,0x02,0x06, - 0x04,0x20,0x24,0x26,0x02,0x10,0x12,0x36,0x24,0x04, - 0x26,0x20,0x0e,0x02,0x15,0x14,0x12,0x04,0x33,0x32, - 0x3e,0x02,0x10,0x26,0x01,0x22,0x26,0x10,0x36,0x33, - 0x32,0x17,0x07,0x26,0x23,0x22,0x06,0x10,0x16,0x33, - 0x32,0x37,0x15,0x06,0x03,0x51,0xcd,0x01,0x5c,0xc7, - 0x79,0xca,0xfe,0xea,0xfe,0xc8,0xfe,0xe4,0xc3,0x70, - 0x7c,0xcd,0x01,0x14,0x02,0x02,0xee,0xfe,0xfa,0xf1, - 0xab,0x64,0xb2,0x01,0x28,0xab,0x85,0xf1,0xab,0x64, - 0x68,0xfe,0x01,0xc1,0xd0,0xde,0xbd,0x80,0x79,0x30, - 0x65,0x60,0x80,0x91,0x83,0x89,0x65,0x6e,0x6b,0x05, - 0xcb,0xcf,0xfe,0xa6,0xc7,0x9a,0xfe,0xe9,0xc8,0x76, - 0x7e,0xd0,0x01,0x11,0x01,0x2c,0x01,0x1a,0xc6,0x74, - 0xd2,0x67,0x69,0xb0,0xed,0x7f,0xb3,0xfe,0xd6,0xa8, - 0x69,0xaf,0xed,0x01,0x03,0xef,0xfc,0xc5,0xec,0x01, - 0xab,0xf9,0x3b,0x6d,0x31,0xb3,0xfe,0xb8,0xa7,0x30, - 0x77,0x30,0x00,0x00,0x00,0x02,0x00,0x39,0x03,0x15, - 0x01,0xf7,0x05,0xc7,0x00,0x17,0x00,0x21,0x00,0x00, - 0x01,0x34,0x26,0x22,0x07,0x26,0x27,0x36,0x32,0x16, - 0x15,0x11,0x23,0x26,0x27,0x0e,0x01,0x23,0x22,0x26, - 0x34,0x36,0x3f,0x01,0x07,0x14,0x33,0x32,0x36,0x3d, - 0x01,0x07,0x0e,0x01,0x01,0x89,0x32,0x77,0x4f,0x1e, - 0x07,0x61,0xcc,0x5e,0x4d,0x0c,0x07,0x2c,0x55,0x36, - 0x4c,0x5b,0x77,0x80,0x59,0xde,0x55,0x41,0x48,0x42, - 0x54,0x48,0x04,0xe2,0x46,0x3f,0x2d,0x45,0x10,0x38, - 0x6f,0x73,0xfe,0x3c,0x3c,0x1f,0x34,0x33,0x67,0xbd, - 0x67,0x09,0x06,0xd7,0x66,0x60,0x55,0x39,0x07,0x09, - 0x39,0x00,0x00,0x02,0x00,0x4f,0x00,0x83,0x03,0x67, - 0x03,0xaf,0x00,0x06,0x00,0x0d,0x00,0x00,0x01,0x03, - 0x13,0x07,0x01,0x35,0x01,0x05,0x03,0x13,0x07,0x01, - 0x35,0x01,0x01,0xdf,0xdb,0xdb,0x6a,0xfe,0xda,0x01, - 0x26,0x01,0xf2,0xda,0xda,0x6a,0xfe,0xda,0x01,0x26, - 0x03,0x73,0xfe,0xa7,0xfe,0xa6,0x3d,0x01,0x89,0x1a, - 0x01,0x89,0x3c,0xfe,0xa7,0xfe,0xa6,0x3d,0x01,0x89, - 0x1a,0x01,0x89,0x00,0x00,0x01,0x00,0x4b,0x00,0xfa, - 0x02,0xfb,0x03,0x10,0x00,0x05,0x00,0x00,0x25,0x23, - 0x11,0x21,0x35,0x21,0x02,0xfb,0x78,0xfd,0xc8,0x02, - 0xb0,0xfa,0x01,0x9b,0x7b,0x00,0x00,0x01,0x00,0x3b, - 0x01,0xdf,0x01,0xf4,0x02,0x70,0x00,0x03,0x00,0x00, - 0x01,0x21,0x35,0x21,0x01,0xf4,0xfe,0x47,0x01,0xb9, - 0x01,0xdf,0x91,0x00,0x00,0x04,0x00,0x61,0xff,0xec, - 0x06,0x41,0x05,0xcb,0x00,0x10,0x00,0x21,0x00,0x2f, - 0x00,0x3a,0x00,0x00,0x01,0x32,0x04,0x12,0x15,0x14, - 0x02,0x06,0x04,0x20,0x24,0x26,0x02,0x10,0x12,0x36, - 0x24,0x04,0x26,0x20,0x0e,0x02,0x15,0x14,0x12,0x04, - 0x33,0x32,0x3e,0x02,0x10,0x26,0x25,0x33,0x20,0x11, - 0x14,0x07,0x17,0x16,0x17,0x23,0x03,0x23,0x11,0x23, - 0x13,0x11,0x33,0x32,0x37,0x3e,0x01,0x35,0x34,0x26, - 0x23,0x03,0x51,0xcd,0x01,0x5c,0xc7,0x79,0xca,0xfe, - 0xea,0xfe,0xc8,0xfe,0xe4,0xc3,0x70,0x7c,0xcd,0x01, - 0x14,0x02,0x02,0xee,0xfe,0xfa,0xf1,0xab,0x64,0xb2, - 0x01,0x28,0xab,0x85,0xf1,0xab,0x64,0x68,0xfc,0xdc, - 0xe3,0x01,0x3b,0x93,0x21,0x3c,0x76,0x9b,0xb1,0x87, - 0x8b,0x8b,0x32,0x2c,0x1b,0x43,0x4a,0x65,0x70,0x05, - 0xcb,0xcf,0xfe,0xa6,0xc7,0x9a,0xfe,0xe9,0xc8,0x76, - 0x7e,0xd0,0x01,0x11,0x01,0x2c,0x01,0x1a,0xc6,0x74, - 0xd2,0x67,0x69,0xb0,0xed,0x7f,0xb3,0xfe,0xd6,0xa8, - 0x69,0xaf,0xed,0x01,0x03,0xef,0x4a,0xfe,0xfb,0xae, - 0x40,0x3d,0x6e,0xdc,0x01,0x62,0xfe,0x9e,0x03,0x0b, - 0xfe,0xc1,0x0a,0x05,0x4f,0x46,0x58,0x43,0x00,0x00, - 0x00,0x01,0xff,0xf9,0x06,0x14,0x03,0x8d,0x06,0x89, - 0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21,0x03,0x8d, - 0xfc,0x6c,0x03,0x94,0x06,0x14,0x75,0x00,0x00,0x02, - 0x00,0x76,0x03,0x5b,0x02,0xe7,0x05,0xcb,0x00,0x08, - 0x00,0x11,0x00,0x00,0x13,0x36,0x20,0x16,0x10,0x06, - 0x20,0x26,0x10,0x25,0x26,0x22,0x06,0x14,0x16,0x32, - 0x36,0x34,0xd0,0x5c,0x01,0x04,0xb7,0xb4,0xfe,0xf5, - 0xb2,0x01,0xc2,0x37,0xa5,0x6f,0x72,0x9f,0x72,0x05, - 0x71,0x5a,0xb1,0xfe,0xf1,0xb0,0xaf,0x01,0x0d,0x09, - 0x3a,0x76,0xa6,0x72,0x72,0xaa,0x00,0x02,0x00,0x4b, - 0x00,0x00,0x03,0x09,0x04,0xae,0x00,0x0b,0x00,0x0f, - 0x00,0x00,0x01,0x21,0x15,0x21,0x11,0x23,0x11,0x21, - 0x35,0x21,0x11,0x33,0x01,0x21,0x35,0x21,0x01,0xe6, - 0x01,0x23,0xfe,0xdd,0x78,0xfe,0xdd,0x01,0x23,0x78, - 0x01,0x23,0xfd,0x42,0x02,0xbe,0x03,0x10,0x7b,0xfe, - 0x65,0x01,0x9b,0x7b,0x01,0x9e,0xfb,0x52,0x7b,0x00, - 0x00,0x01,0x00,0x32,0x02,0x4a,0x02,0x29,0x05,0xcb, - 0x00,0x1a,0x00,0x00,0x13,0x35,0x36,0x12,0x36,0x35, - 0x34,0x26,0x23,0x22,0x07,0x26,0x27,0x36,0x33,0x32, - 0x16,0x15,0x14,0x07,0x0e,0x03,0x07,0x21,0x15,0x32, - 0x3d,0xea,0x3f,0x44,0x38,0x54,0x4f,0x30,0x17,0x69, - 0x8a,0x72,0x81,0x39,0x1f,0x77,0x21,0x53,0x0f,0x01, - 0x63,0x02,0x4a,0x68,0x4a,0x01,0x18,0x74,0x4f,0x38, - 0x47,0x54,0x3a,0x1d,0x72,0x7f,0x6f,0x6b,0x58,0x30, - 0x90,0x28,0x62,0x12,0x74,0x00,0x00,0x00,0x00,0x01, - 0x00,0x32,0x02,0x39,0x02,0x2b,0x05,0xcb,0x00,0x22, - 0x00,0x00,0x13,0x33,0x32,0x36,0x34,0x26,0x23,0x22, - 0x07,0x26,0x27,0x36,0x33,0x32,0x16,0x15,0x14,0x06, - 0x07,0x15,0x16,0x15,0x14,0x06,0x22,0x27,0x35,0x16, - 0x33,0x32,0x36,0x34,0x26,0x2b,0x01,0xa9,0x47,0x51, - 0x57,0x45,0x3f,0x52,0x50,0x16,0x2a,0x6c,0x82,0x6e, - 0x81,0x49,0x44,0xa9,0x9b,0xfb,0x5d,0x60,0x71,0x53, - 0x52,0x5f,0x5d,0x49,0x04,0x44,0x52,0x85,0x41,0x4a, - 0x1e,0x3c,0x5f,0x7c,0x6a,0x49,0x67,0x19,0x0a,0x2c, - 0xb0,0x72,0x8b,0x2f,0x7a,0x3b,0x4d,0x96,0x52,0x00, - 0x00,0x00,0x00,0x01,0x01,0x89,0x04,0xd9,0x02,0xfe, - 0x06,0x21,0x00,0x09,0x00,0x00,0x01,0x15,0x0e,0x01, - 0x07,0x23,0x35,0x3e,0x01,0x37,0x02,0xfe,0x1d,0xb1, - 0x4a,0x5d,0x34,0x67,0x1e,0x06,0x21,0x13,0x37,0xc1, - 0x3d,0x16,0x45,0xab,0x42,0x00,0x00,0x01,0x00,0x82, - 0xfe,0x14,0x03,0x1a,0x04,0x46,0x00,0x17,0x00,0x00, - 0x21,0x23,0x26,0x27,0x23,0x0e,0x01,0x22,0x26,0x27, - 0x16,0x15,0x11,0x23,0x11,0x33,0x11,0x10,0x33,0x32, - 0x36,0x35,0x11,0x33,0x03,0x1a,0x7c,0x0b,0x08,0x0a, - 0x21,0x72,0x7b,0x39,0x28,0x09,0x99,0x99,0x92,0x6f, - 0x66,0x98,0x5d,0x38,0x51,0x58,0x22,0x32,0x8c,0x8a, - 0xfe,0xea,0x06,0x32,0xfd,0x2e,0xfe,0xfd,0xc0,0xd6, - 0x02,0x3f,0x00,0x01,0x00,0x79,0xfe,0xfc,0x03,0x3b, - 0x06,0x14,0x00,0x0e,0x00,0x00,0x01,0x23,0x11,0x23, - 0x11,0x23,0x11,0x06,0x23,0x22,0x26,0x10,0x12,0x33, - 0x21,0x03,0x3b,0x71,0x97,0x72,0x23,0x2e,0x7f,0x78, - 0x8c,0x94,0x01,0xa2,0xfe,0xfc,0x06,0x98,0xf9,0x68, - 0x03,0x33,0x12,0xf6,0x02,0x02,0x00,0xff,0x00,0x01, - 0x00,0x7e,0x02,0x54,0x01,0x53,0x03,0x4f,0x00,0x06, - 0x00,0x00,0x13,0x22,0x34,0x32,0x15,0x14,0x06,0xe8, - 0x6a,0xd5,0x39,0x02,0x54,0xfb,0x7d,0x3f,0x3f,0x00, - 0x00,0x01,0x00,0x1f,0xfe,0x14,0x01,0x81,0x00,0x00, - 0x00,0x10,0x00,0x00,0x01,0x14,0x06,0x23,0x22,0x27, - 0x35,0x16,0x32,0x36,0x35,0x34,0x27,0x37,0x33,0x07, - 0x16,0x01,0x81,0x83,0x7a,0x40,0x25,0x2d,0x71,0x41, - 0xa3,0x4b,0x6b,0x2e,0x9e,0xfe,0xe7,0x66,0x6d,0x0e, - 0x67,0x0d,0x36,0x31,0x64,0x1a,0x9f,0x66,0x27,0x00, - 0x00,0x01,0x00,0x4c,0x02,0x4a,0x01,0xae,0x05,0xb6, - 0x00,0x0a,0x00,0x00,0x01,0x23,0x11,0x34,0x37,0x0e, - 0x01,0x07,0x27,0x37,0x33,0x01,0xae,0x7a,0x07,0x20, - 0x3c,0x54,0x3f,0xf9,0x69,0x02,0x4a,0x01,0xe1,0xb1, - 0x58,0x20,0x30,0x3f,0x52,0xbf,0x00,0x00,0x00,0x02, - 0x00,0x43,0x03,0x15,0x02,0x3e,0x05,0xc7,0x00,0x07, - 0x00,0x10,0x00,0x00,0x12,0x36,0x32,0x16,0x10,0x06, - 0x22,0x26,0x13,0x22,0x15,0x14,0x16,0x32,0x36,0x10, - 0x26,0x43,0x85,0xf0,0x86,0x84,0xf5,0x82,0xfd,0x88, - 0x41,0x90,0x40,0x42,0x05,0x12,0xb5,0xb2,0xfe,0xb3, - 0xb3,0xb4,0x01,0x99,0xf3,0x80,0x76,0x75,0x01,0x00, - 0x74,0x00,0x00,0x02,0x00,0x4f,0x00,0x83,0x03,0x67, - 0x03,0xaf,0x00,0x06,0x00,0x0d,0x00,0x00,0x01,0x15, - 0x01,0x27,0x13,0x03,0x37,0x01,0x15,0x01,0x27,0x13, - 0x03,0x37,0x01,0xdf,0xfe,0xd9,0x69,0xda,0xda,0x69, - 0x02,0xaf,0xfe,0xda,0x6a,0xdb,0xdb,0x6a,0x02,0x26, - 0x1a,0xfe,0x77,0x3d,0x01,0x5a,0x01,0x59,0x3c,0xfe, - 0x77,0x1a,0xfe,0x77,0x3d,0x01,0x5a,0x01,0x59,0x3c, - 0x00,0x04,0x00,0x36,0x00,0x00,0x05,0x52,0x05,0xb6, - 0x00,0x0c,0x00,0x10,0x00,0x1b,0x00,0x21,0x00,0x00, - 0x01,0x23,0x11,0x36,0x37,0x30,0x07,0x0e,0x01,0x07, - 0x27,0x37,0x33,0x03,0x23,0x01,0x33,0x09,0x01,0x33, - 0x11,0x33,0x15,0x23,0x15,0x23,0x35,0x21,0x25,0x11, - 0x36,0x37,0x06,0x03,0x01,0x98,0x7b,0x06,0x01,0x18, - 0x13,0x70,0x14,0x3f,0xf8,0x6a,0x04,0x80,0x02,0xf7, - 0x81,0xfe,0x92,0x01,0x57,0x75,0x68,0x68,0x7a,0xfe, - 0xae,0x01,0x52,0x02,0x02,0x33,0xab,0x02,0x4a,0x01, - 0xe1,0xf5,0x14,0x18,0x13,0x54,0x10,0x52,0xbf,0xfa, - 0x4a,0x05,0xb6,0xfb,0x67,0x02,0x56,0xfd,0xba,0x6c, - 0xc0,0xc0,0x6c,0x01,0x09,0x72,0x29,0x76,0xfe,0xd2, - 0x00,0x03,0x00,0x36,0x00,0x00,0x05,0x72,0x05,0xb6, - 0x00,0x0a,0x00,0x0e,0x00,0x29,0x00,0x00,0x01,0x23, - 0x11,0x34,0x37,0x0e,0x01,0x07,0x27,0x37,0x33,0x03, - 0x23,0x01,0x33,0x01,0x35,0x36,0x12,0x36,0x35,0x34, - 0x26,0x23,0x22,0x07,0x26,0x27,0x36,0x33,0x32,0x16, - 0x15,0x14,0x07,0x0e,0x03,0x07,0x21,0x15,0x01,0x98, - 0x7a,0x07,0x20,0x3c,0x54,0x3f,0xf9,0x69,0x13,0x81, - 0x02,0xf7,0x81,0xfe,0xff,0x3d,0xea,0x3f,0x44,0x38, - 0x53,0x50,0x30,0x17,0x69,0x8a,0x72,0x81,0x39,0x1f, - 0x77,0x21,0x53,0x0f,0x01,0x63,0x02,0x4a,0x01,0xe1, - 0xb1,0x58,0x20,0x30,0x3f,0x52,0xbf,0xfa,0x4a,0x05, - 0xb6,0xfa,0x4b,0x68,0x4a,0x01,0x18,0x74,0x4f,0x38, - 0x47,0x54,0x3a,0x1d,0x72,0x7f,0x6f,0x6b,0x57,0x31, - 0x90,0x28,0x62,0x12,0x74,0x00,0x00,0x04,0x00,0x33, - 0x00,0x00,0x05,0x6e,0x05,0xcb,0x00,0x21,0x00,0x26, - 0x00,0x31,0x00,0x37,0x00,0x00,0x13,0x27,0x36,0x33, - 0x32,0x16,0x15,0x14,0x06,0x07,0x15,0x16,0x15,0x14, - 0x06,0x22,0x27,0x35,0x16,0x33,0x32,0x36,0x34,0x26, - 0x2b,0x01,0x35,0x33,0x32,0x36,0x34,0x26,0x23,0x22, - 0x25,0x33,0x00,0x07,0x23,0x09,0x01,0x33,0x11,0x33, - 0x15,0x23,0x15,0x23,0x35,0x21,0x25,0x11,0x36,0x37, - 0x06,0x03,0x73,0x40,0x6d,0x81,0x6f,0x81,0x4a,0x44, - 0xa9,0x9b,0xfb,0x5d,0x61,0x70,0x54,0x52,0x60,0x5d, - 0x49,0x47,0x51,0x57,0x45,0x3f,0x52,0x03,0x6f,0x81, - 0xfd,0x82,0x7a,0x80,0x01,0xff,0x01,0x57,0x75,0x68, - 0x68,0x7a,0xfe,0xae,0x01,0x52,0x02,0x02,0x33,0xab, - 0x05,0x12,0x5a,0x5f,0x7c,0x6a,0x49,0x67,0x19,0x0a, - 0x2c,0xb0,0x72,0x8b,0x2f,0x7a,0x3b,0x4d,0x95,0x53, - 0x68,0x52,0x85,0x41,0x5a,0xfb,0x34,0xea,0x01,0x1d, - 0x02,0x56,0xfd,0xba,0x6c,0xc0,0xc0,0x6c,0x01,0x09, - 0x72,0x29,0x76,0xfe,0xd2,0x00,0x00,0x00,0x00,0x02, - 0x00,0x31,0xfe,0x6b,0x02,0x65,0x04,0x49,0x00,0x07, - 0x00,0x1f,0x00,0x00,0x01,0x32,0x14,0x23,0x22,0x26, - 0x34,0x36,0x13,0x15,0x14,0x0e,0x02,0x07,0x06,0x14, - 0x16,0x32,0x37,0x17,0x06,0x20,0x26,0x35,0x34,0x3e, - 0x03,0x3d,0x01,0x01,0x78,0x6c,0x6c,0x31,0x39,0x3a, - 0x75,0x26,0x4e,0x4f,0x09,0x28,0x53,0xa6,0x64,0x3f, - 0x79,0xfe,0xde,0x99,0x19,0x3f,0x8a,0x29,0x04,0x49, - 0xfb,0x3e,0x7e,0x3f,0xfe,0x5c,0x3b,0x6d,0x71,0x80, - 0x74,0x13,0x58,0xcc,0x6c,0x40,0x75,0x55,0xb4,0xa5, - 0x51,0x6a,0x6f,0xbe,0x70,0x5a,0x2f,0x00,0x00,0x03, - 0x00,0x00,0x00,0x00,0x03,0x89,0x07,0x73,0x00,0x0a, - 0x00,0x14,0x00,0x1e,0x00,0x00,0x13,0x33,0x1e,0x01, - 0x17,0x15,0x23,0x26,0x27,0x26,0x27,0x13,0x33,0x16, - 0x01,0x23,0x03,0x21,0x03,0x23,0x00,0x17,0x27,0x26, - 0x27,0x0e,0x03,0x07,0x21,0xa2,0xbd,0x1d,0x6b,0x31, - 0x5e,0x44,0x5a,0x59,0x21,0xc1,0xbd,0x3d,0x01,0x2c, - 0x9d,0x72,0xfe,0x94,0x70,0x9e,0x01,0x26,0xd9,0x20, - 0x13,0x0b,0x10,0x2d,0x16,0x36,0x0b,0x01,0x2d,0x07, - 0x73,0x43,0xb1,0x3d,0x17,0x38,0x60,0x61,0x3d,0xfe, - 0x56,0xf7,0xfb,0x40,0x01,0xdc,0xfe,0x24,0x04,0xbc, - 0xcc,0x8f,0x55,0x56,0x7d,0xca,0x61,0xe4,0x30,0x00, - 0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x89,0x07,0x73, - 0x00,0x09,0x00,0x13,0x00,0x1d,0x00,0x00,0x01,0x15, - 0x0e,0x01,0x07,0x23,0x35,0x3e,0x01,0x37,0x03,0x33, - 0x16,0x01,0x23,0x03,0x21,0x03,0x23,0x00,0x17,0x27, - 0x26,0x27,0x0e,0x03,0x07,0x21,0x02,0xde,0x1d,0xb1, - 0x4a,0x5d,0x34,0x67,0x1e,0xbf,0xbd,0x3d,0x01,0x2c, - 0x9d,0x72,0xfe,0x94,0x70,0x9e,0x01,0x26,0xd9,0x20, - 0x13,0x0b,0x10,0x2d,0x16,0x36,0x0b,0x01,0x2d,0x07, - 0x73,0x13,0x37,0xc1,0x3d,0x16,0x45,0xab,0x42,0xfe, - 0x44,0xf7,0xfb,0x40,0x01,0xdc,0xfe,0x24,0x04,0xbc, - 0xcc,0x8f,0x55,0x56,0x7d,0xca,0x61,0xe4,0x30,0x00, - 0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x89, - 0x07,0x73,0x00,0x0e,0x00,0x18,0x00,0x22,0x00,0x00, - 0x01,0x23,0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36, - 0x37,0x33,0x1e,0x01,0x17,0x05,0x33,0x16,0x01,0x23, - 0x03,0x21,0x03,0x23,0x00,0x17,0x27,0x26,0x27,0x0e, - 0x03,0x07,0x21,0x02,0xd5,0x56,0x2a,0x39,0x5a,0x86, - 0x38,0x55,0x8d,0x38,0x9b,0x15,0x70,0x41,0xfe,0x8e, - 0xbd,0x3d,0x01,0x2c,0x9d,0x72,0xfe,0x94,0x70,0x9e, - 0x01,0x26,0xd9,0x20,0x13,0x0b,0x10,0x2d,0x16,0x36, - 0x0b,0x01,0x2d,0x06,0x2b,0x24,0x40,0x65,0x97,0x32, - 0x15,0xbd,0x76,0x31,0xaf,0x53,0x89,0xf7,0xfb,0x40, - 0x01,0xdc,0xfe,0x24,0x04,0xbc,0xcc,0x8f,0x55,0x56, - 0x7d,0xca,0x61,0xe4,0x30,0x00,0x00,0x03,0x00,0x00, - 0x00,0x00,0x03,0x89,0x07,0x1d,0x00,0x14,0x00,0x1e, - 0x00,0x28,0x00,0x00,0x01,0x22,0x26,0x27,0x26,0x23, - 0x22,0x07,0x23,0x3e,0x01,0x33,0x32,0x1e,0x01,0x32, - 0x36,0x37,0x33,0x0e,0x01,0x05,0x33,0x16,0x01,0x23, - 0x03,0x21,0x03,0x23,0x00,0x17,0x27,0x26,0x27,0x0e, - 0x03,0x07,0x21,0x02,0x43,0x22,0x4c,0x1b,0x49,0x25, - 0x3f,0x13,0x60,0x0c,0x5d,0x4e,0x2b,0x5e,0x52,0x3e, - 0x22,0x0b,0x60,0x0a,0x5e,0xfe,0xd4,0xbd,0x3d,0x01, - 0x2c,0x9d,0x72,0xfe,0x94,0x70,0x9e,0x01,0x26,0xd9, - 0x20,0x13,0x0b,0x10,0x2d,0x16,0x36,0x0b,0x01,0x2d, - 0x06,0x2c,0x26,0x16,0x3d,0x7b,0x75,0x7c,0x3c,0x3c, - 0x3c,0x3e,0x75,0x7c,0x75,0xf7,0xfb,0x40,0x01,0xdc, - 0xfe,0x24,0x04,0xbc,0xcc,0x8f,0x55,0x56,0x7d,0xca, - 0x61,0xe4,0x30,0x00,0x00,0x00,0x00,0x04,0x00,0x00, - 0x00,0x00,0x03,0x89,0x07,0x24,0x00,0x07,0x00,0x0f, - 0x00,0x19,0x00,0x23,0x00,0x00,0x12,0x32,0x16,0x14, - 0x06,0x22,0x26,0x34,0x24,0x32,0x16,0x14,0x06,0x22, - 0x26,0x34,0x03,0x33,0x16,0x01,0x23,0x03,0x21,0x03, - 0x23,0x00,0x17,0x27,0x26,0x27,0x0e,0x03,0x07,0x21, - 0xf8,0x4c,0x2f,0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30, - 0x2f,0x4c,0x30,0xb5,0xbd,0x3d,0x01,0x2c,0x9d,0x72, - 0xfe,0x94,0x70,0x9e,0x01,0x26,0xd9,0x20,0x13,0x0b, - 0x10,0x2d,0x16,0x36,0x0b,0x01,0x2d,0x07,0x24,0x32, - 0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d, - 0xfe,0xc5,0xf7,0xfb,0x40,0x01,0xdc,0xfe,0x24,0x04, - 0xbc,0xcc,0x8f,0x55,0x56,0x7d,0xca,0x61,0xe4,0x30, - 0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x89,0x06,0xf5, - 0x00,0x12,0x00,0x1a,0x00,0x24,0x00,0x00,0x13,0x34, - 0x36,0x32,0x16,0x15,0x14,0x06,0x07,0x12,0x13,0x23, - 0x03,0x21,0x03,0x23,0x00,0x37,0x26,0x24,0x26,0x22, - 0x06,0x14,0x16,0x32,0x36,0x13,0x03,0x27,0x26,0x27, - 0x0e,0x03,0x07,0xed,0x76,0xbe,0x7a,0x38,0x33,0xc7, - 0x92,0x9d,0x72,0xfe,0x94,0x70,0x9e,0x01,0x2b,0x29, - 0x67,0x01,0x48,0x3d,0x67,0x40,0x3b,0x6a,0x3f,0x25, - 0x5b,0x20,0x13,0x0b,0x10,0x2d,0x16,0x36,0x0b,0x06, - 0x2b,0x5c,0x6e,0x6f,0x58,0x40,0x5e,0x18,0xfc,0xd1, - 0xfd,0xb7,0x01,0xdc,0xfe,0x24,0x04,0xd1,0xa8,0x32, - 0xb2,0x3d,0x3e,0x65,0x3c,0x3d,0xfc,0x76,0x01,0x82, - 0x8f,0x55,0x56,0x7d,0xca,0x61,0xe4,0x30,0x00,0x02, - 0x00,0x00,0x00,0x00,0x04,0x7c,0x05,0xb6,0x00,0x0f, - 0x00,0x15,0x00,0x00,0x01,0x03,0x23,0x01,0x21,0x15, - 0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11, - 0x35,0x11,0x23,0x06,0x02,0x07,0x01,0x2a,0x8b,0x9f, - 0x01,0xbe,0x02,0xbe,0xfe,0x60,0x01,0x86,0xfe,0x7a, - 0x01,0xa0,0xfd,0xc4,0x1f,0x35,0x7d,0x1a,0x01,0xdc, - 0xfe,0x24,0x05,0xb6,0x8e,0xfe,0x1a,0x8d,0xfd,0xd8, - 0x8d,0x01,0xdc,0x92,0x02,0xb8,0xb4,0xfe,0x52,0x56, - 0x00,0x00,0x00,0x01,0x00,0x66,0xfe,0x14,0x03,0x4a, - 0x05,0xcc,0x00,0x24,0x00,0x00,0x01,0x22,0x02,0x10, - 0x12,0x33,0x32,0x37,0x15,0x06,0x0f,0x01,0x16,0x15, - 0x14,0x06,0x23,0x22,0x27,0x35,0x16,0x32,0x36,0x35, - 0x34,0x27,0x37,0x26,0x02,0x11,0x10,0x12,0x33,0x32, - 0x17,0x07,0x26,0x02,0x4a,0x97,0xad,0xb0,0x9b,0x75, - 0x62,0x55,0x86,0x25,0x9e,0x83,0x7a,0x40,0x25,0x2e, - 0x70,0x41,0xa3,0x46,0xb4,0xcc,0xfd,0xe4,0x8c,0x77, - 0x3c,0x5f,0x05,0x3e,0xfe,0xb9,0xfd,0xc7,0xfe,0xbb, - 0x34,0x8c,0x34,0x01,0x52,0x27,0x8c,0x66,0x6d,0x0e, - 0x67,0x0d,0x36,0x31,0x64,0x1a,0x95,0x29,0x01,0x7e, - 0x01,0x32,0x01,0x65,0x01,0x98,0x4a,0x83,0x3f,0x00, - 0x00,0x00,0x00,0x02,0x00,0x96,0x00,0x00,0x02,0xd2, - 0x07,0x73,0x00,0x0a,0x00,0x16,0x00,0x00,0x13,0x33, - 0x1e,0x01,0x17,0x15,0x23,0x26,0x27,0x26,0x27,0x01, - 0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11, - 0x21,0xa3,0xbd,0x1d,0x6b,0x31,0x5e,0x44,0x5a,0x59, - 0x21,0x02,0x2f,0xfe,0x5f,0x01,0x88,0xfe,0x78,0x01, - 0xa1,0xfd,0xc4,0x02,0x3c,0x07,0x73,0x43,0xb1,0x3d, - 0x17,0x38,0x60,0x61,0x3d,0xfd,0xc8,0xfe,0x1a,0x8d, - 0xfd,0xd8,0x8e,0x05,0xb6,0x00,0x00,0x02,0x00,0x96, - 0x00,0x00,0x02,0xd2,0x07,0x73,0x00,0x09,0x00,0x15, - 0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23,0x35,0x3e, - 0x01,0x37,0x13,0x21,0x11,0x21,0x15,0x21,0x11,0x21, - 0x15,0x21,0x11,0x21,0x02,0xbd,0x1d,0xb1,0x4a,0x5d, - 0x34,0x67,0x1e,0xd1,0xfe,0x5f,0x01,0x88,0xfe,0x78, - 0x01,0xa1,0xfd,0xc4,0x02,0x3c,0x07,0x73,0x13,0x37, - 0xc1,0x3d,0x16,0x45,0xab,0x42,0xfd,0xb6,0xfe,0x1a, - 0x8d,0xfd,0xd8,0x8e,0x05,0xb6,0x00,0x02,0x00,0x96, - 0x00,0x00,0x02,0xd2,0x07,0x73,0x00,0x0e,0x00,0x1a, - 0x00,0x00,0x01,0x23,0x26,0x2f,0x01,0x06,0x07,0x23, - 0x35,0x36,0x37,0x33,0x1e,0x01,0x17,0x13,0x21,0x11, - 0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x02, - 0xc1,0x56,0x2a,0x39,0x5a,0x86,0x38,0x55,0x8d,0x38, - 0x9b,0x15,0x70,0x41,0x11,0xfe,0x5f,0x01,0x88,0xfe, - 0x78,0x01,0xa1,0xfd,0xc4,0x02,0x3c,0x06,0x2b,0x24, - 0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31,0xaf,0x53, - 0xfe,0xe9,0xfe,0x1a,0x8d,0xfd,0xd8,0x8e,0x05,0xb6, - 0x00,0x00,0x00,0x03,0x00,0x96,0x00,0x00,0x02,0xd2, - 0x07,0x24,0x00,0x07,0x00,0x0f,0x00,0x1b,0x00,0x00, - 0x12,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32, - 0x16,0x14,0x06,0x22,0x26,0x34,0x13,0x21,0x11,0x21, - 0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0xe3,0x4c, - 0x2f,0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c, - 0x30,0xcf,0xfe,0x5f,0x01,0x88,0xfe,0x78,0x01,0xa1, - 0xfd,0xc4,0x02,0x3c,0x07,0x24,0x32,0x5d,0x34,0x33, - 0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d,0xfe,0x37,0xfe, - 0x1a,0x8d,0xfd,0xd8,0x8e,0x05,0xb6,0x00,0x00,0x02, - 0xff,0xd9,0x00,0x00,0x01,0x4f,0x07,0x73,0x00,0x0a, - 0x00,0x0e,0x00,0x00,0x03,0x33,0x1e,0x01,0x17,0x15, - 0x23,0x26,0x27,0x26,0x27,0x01,0x23,0x11,0x33,0x27, - 0xbd,0x1d,0x6b,0x31,0x5e,0x44,0x5a,0x59,0x21,0x01, - 0x63,0x96,0x96,0x07,0x73,0x43,0xb1,0x3d,0x17,0x38, - 0x60,0x61,0x3d,0xf8,0x9f,0x05,0xb6,0x00,0x00,0x02, - 0x00,0x9e,0x00,0x00,0x02,0x13,0x07,0x73,0x00,0x09, - 0x00,0x0d,0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23, - 0x35,0x3e,0x01,0x37,0x03,0x23,0x11,0x33,0x02,0x13, - 0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0x1b,0x96,0x96, - 0x07,0x73,0x13,0x37,0xc1,0x3d,0x16,0x45,0xab,0x42, - 0xf8,0x8d,0x05,0xb6,0x00,0x02,0xff,0xde,0x00,0x00, - 0x02,0x04,0x07,0x73,0x00,0x0e,0x00,0x12,0x00,0x00, - 0x01,0x23,0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36, - 0x37,0x33,0x1e,0x01,0x17,0x03,0x23,0x11,0x33,0x02, - 0x04,0x56,0x2a,0x39,0x5a,0x86,0x38,0x55,0x8d,0x38, - 0x9b,0x15,0x70,0x41,0xc8,0x96,0x96,0x06,0x2b,0x24, - 0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31,0xaf,0x53, - 0xf9,0xc0,0x05,0xb6,0x00,0x00,0x00,0x03,0xff,0xf5, - 0x00,0x00,0x01,0xf0,0x07,0x24,0x00,0x07,0x00,0x0f, - 0x00,0x13,0x00,0x00,0x12,0x32,0x16,0x14,0x06,0x22, - 0x26,0x34,0x24,0x32,0x16,0x14,0x06,0x22,0x26,0x34, - 0x03,0x23,0x11,0x33,0x25,0x4c,0x2f,0x2f,0x4c,0x30, - 0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30,0x09,0x96,0x96, - 0x07,0x24,0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f, - 0x33,0x34,0x5d,0xf9,0x0e,0x05,0xb6,0x00,0x00,0x02, - 0x00,0x28,0x00,0x00,0x03,0xae,0x05,0xb6,0x00,0x0b, - 0x00,0x17,0x00,0x00,0x13,0x21,0x32,0x12,0x10,0x02, - 0x23,0x21,0x11,0x23,0x35,0x33,0x13,0x11,0x33,0x15, - 0x23,0x11,0x33,0x20,0x11,0x10,0x02,0x23,0x95,0x01, - 0x34,0xeb,0xfa,0xfc,0xf8,0xfe,0xdb,0x6d,0x6d,0x9c, - 0xd3,0xd3,0x85,0x01,0x57,0xa7,0xa3,0x05,0xb6,0xfe, - 0x8e,0xfd,0x34,0xfe,0x88,0x02,0x9c,0x8b,0x02,0x05, - 0xfd,0xfb,0x8b,0xfd,0xee,0x02,0x58,0x01,0x21,0x01, - 0x29,0x00,0x00,0x02,0x00,0x96,0x00,0x00,0x03,0xec, - 0x07,0x1d,0x00,0x14,0x00,0x24,0x00,0x00,0x01,0x22, - 0x26,0x27,0x26,0x23,0x22,0x07,0x23,0x3e,0x01,0x33, - 0x32,0x1e,0x01,0x32,0x36,0x37,0x33,0x0e,0x01,0x13, - 0x23,0x01,0x23,0x16,0x15,0x11,0x23,0x11,0x33,0x01, - 0x33,0x26,0x35,0x11,0x33,0x02,0xcb,0x22,0x4c,0x1b, - 0x49,0x25,0x3f,0x13,0x60,0x0c,0x5d,0x4e,0x2b,0x5e, - 0x52,0x3e,0x22,0x0b,0x60,0x0a,0x5e,0xd5,0xc2,0xfd, - 0xf9,0x0a,0x10,0x93,0xc3,0x02,0x04,0x07,0x0b,0x93, - 0x06,0x2c,0x26,0x16,0x3d,0x7b,0x75,0x7c,0x3c,0x3c, - 0x3c,0x3e,0x75,0x7c,0xf9,0xd4,0x04,0xcc,0x80,0x86, - 0xfc,0x3a,0x05,0xb6,0xfb,0x42,0x97,0x73,0x03,0xb4, - 0x00,0x00,0x00,0x03,0x00,0x66,0xff,0xec,0x03,0xf5, - 0x07,0x73,0x00,0x0a,0x00,0x13,0x00,0x1c,0x00,0x00, - 0x01,0x33,0x1e,0x01,0x17,0x15,0x23,0x26,0x27,0x26, - 0x27,0x01,0x32,0x12,0x10,0x02,0x20,0x02,0x11,0x10, - 0x05,0x22,0x02,0x10,0x12,0x20,0x12,0x11,0x10,0x01, - 0x0e,0xbd,0x1d,0x6b,0x31,0x5e,0x44,0x5a,0x59,0x21, - 0x01,0x22,0xdb,0xea,0xeb,0xfe,0x44,0xe8,0x01,0xca, - 0x94,0x96,0x96,0x01,0x23,0x96,0x07,0x73,0x43,0xb1, - 0x3d,0x17,0x38,0x60,0x61,0x3d,0xfe,0x6a,0xfe,0x7a, - 0xfd,0x2e,0xfe,0x79,0x01,0x87,0x01,0x6c,0x02,0xec, - 0x8e,0xfe,0xcb,0xfd,0xa8,0xfe,0xca,0x01,0x33,0x01, - 0x30,0x02,0x60,0x00,0x00,0x03,0x00,0x66,0xff,0xec, - 0x03,0xf5,0x07,0x73,0x00,0x09,0x00,0x12,0x00,0x1b, - 0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23,0x35,0x3e, - 0x01,0x37,0x03,0x32,0x12,0x10,0x02,0x20,0x02,0x11, - 0x10,0x05,0x22,0x02,0x10,0x12,0x20,0x12,0x11,0x10, - 0x03,0x45,0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0x59, - 0xdb,0xea,0xeb,0xfe,0x44,0xe8,0x01,0xca,0x94,0x96, - 0x96,0x01,0x23,0x96,0x07,0x73,0x13,0x37,0xc1,0x3d, - 0x16,0x45,0xab,0x42,0xfe,0x58,0xfe,0x7a,0xfd,0x2e, - 0xfe,0x79,0x01,0x87,0x01,0x6c,0x02,0xec,0x8e,0xfe, - 0xcb,0xfd,0xa8,0xfe,0xca,0x01,0x33,0x01,0x30,0x02, - 0x60,0x00,0x00,0x03,0x00,0x66,0xff,0xec,0x03,0xf5, - 0x07,0x73,0x00,0x0e,0x00,0x17,0x00,0x20,0x00,0x00, - 0x01,0x23,0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36, - 0x37,0x33,0x1e,0x01,0x17,0x05,0x32,0x12,0x10,0x02, - 0x20,0x02,0x11,0x10,0x05,0x22,0x02,0x10,0x12,0x20, - 0x12,0x11,0x10,0x03,0x3f,0x56,0x2a,0x39,0x5a,0x86, - 0x38,0x55,0x8d,0x38,0x9b,0x15,0x70,0x41,0xfe,0xf1, - 0xdb,0xea,0xeb,0xfe,0x44,0xe8,0x01,0xca,0x94,0x96, - 0x96,0x01,0x23,0x96,0x06,0x2b,0x24,0x40,0x65,0x97, - 0x32,0x15,0xbd,0x76,0x31,0xaf,0x53,0x75,0xfe,0x7a, - 0xfd,0x2e,0xfe,0x79,0x01,0x87,0x01,0x6c,0x02,0xec, - 0x8e,0xfe,0xcb,0xfd,0xa8,0xfe,0xca,0x01,0x33,0x01, - 0x30,0x02,0x60,0x00,0x00,0x00,0x00,0x03,0x00,0x66, - 0xff,0xec,0x03,0xf5,0x07,0x1d,0x00,0x14,0x00,0x1d, - 0x00,0x26,0x00,0x00,0x01,0x22,0x26,0x27,0x26,0x23, - 0x22,0x07,0x23,0x3e,0x01,0x33,0x32,0x1e,0x01,0x32, - 0x36,0x37,0x33,0x0e,0x01,0x07,0x32,0x12,0x10,0x02, - 0x20,0x02,0x11,0x10,0x05,0x22,0x02,0x10,0x12,0x20, - 0x12,0x11,0x10,0x02,0xb2,0x22,0x4c,0x1b,0x49,0x25, - 0x3f,0x13,0x60,0x0c,0x5d,0x4e,0x2b,0x5e,0x52,0x3e, - 0x22,0x0b,0x60,0x0a,0x5e,0xce,0xdb,0xea,0xeb,0xfe, - 0x44,0xe8,0x01,0xca,0x94,0x96,0x96,0x01,0x23,0x96, - 0x06,0x2c,0x26,0x16,0x3d,0x7b,0x75,0x7c,0x3c,0x3c, - 0x3c,0x3e,0x75,0x7c,0x61,0xfe,0x7a,0xfd,0x2e,0xfe, - 0x79,0x01,0x87,0x01,0x6c,0x02,0xec,0x8e,0xfe,0xcb, - 0xfd,0xa8,0xfe,0xca,0x01,0x33,0x01,0x30,0x02,0x60, - 0x00,0x00,0x00,0x04,0x00,0x66,0xff,0xec,0x03,0xf5, - 0x07,0x24,0x00,0x07,0x00,0x0f,0x00,0x18,0x00,0x21, - 0x00,0x00,0x00,0x32,0x16,0x14,0x06,0x22,0x26,0x34, - 0x24,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x03,0x32, - 0x12,0x10,0x02,0x20,0x02,0x11,0x10,0x05,0x22,0x02, - 0x10,0x12,0x20,0x12,0x11,0x10,0x01,0x66,0x4c,0x2f, - 0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30, - 0x56,0xdb,0xea,0xeb,0xfe,0x44,0xe8,0x01,0xca,0x94, - 0x96,0x96,0x01,0x23,0x96,0x07,0x24,0x32,0x5d,0x34, - 0x33,0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d,0xfe,0xd9, - 0xfe,0x7a,0xfd,0x2e,0xfe,0x79,0x01,0x87,0x01,0x6c, - 0x02,0xec,0x8e,0xfe,0xcb,0xfd,0xa8,0xfe,0xca,0x01, - 0x33,0x01,0x30,0x02,0x60,0x00,0x00,0x01,0x00,0x45, - 0x01,0x54,0x03,0x0c,0x04,0x4f,0x00,0x0f,0x00,0x00, - 0x09,0x01,0x17,0x06,0x07,0x01,0x06,0x07,0x09,0x01, - 0x26,0x27,0x01,0x26,0x27,0x37,0x01,0xa8,0x01,0x0a, - 0x5a,0xb8,0x5d,0x01,0x11,0x04,0x54,0xfe,0xf8,0xfe, - 0xf6,0x4d,0x0c,0x01,0x15,0x8c,0x87,0x59,0x03,0x2d, - 0x01,0x22,0x4b,0xcc,0x65,0xfe,0xd0,0x04,0x48,0x01, - 0x21,0xfe,0xdc,0x44,0x09,0x01,0x32,0x99,0x95,0x4b, - 0x00,0x00,0x00,0x03,0x00,0x66,0xff,0xa0,0x03,0xfe, - 0x06,0x0b,0x00,0x13,0x00,0x1b,0x00,0x22,0x00,0x00, - 0x01,0x16,0x10,0x02,0x23,0x22,0x27,0x07,0x27,0x36, - 0x37,0x26,0x11,0x10,0x21,0x32,0x17,0x37,0x16,0x17, - 0x05,0x22,0x02,0x11,0x14,0x17,0x01,0x26,0x03,0x20, - 0x11,0x34,0x27,0x01,0x16,0x03,0x8a,0x6b,0xeb,0xdd, - 0x97,0x66,0x57,0x6d,0x25,0x4a,0x75,0x01,0xca,0x9a, - 0x6e,0x58,0x02,0x6c,0xfe,0x32,0x94,0x96,0x2e,0x01, - 0xbf,0x46,0x80,0x01,0x26,0x23,0xfe,0x46,0x43,0x04, - 0xf5,0xbd,0xfd,0x3b,0xfe,0x79,0x5f,0xab,0x32,0x48, - 0x94,0xc2,0x01,0x6f,0x02,0xec,0x6e,0xae,0x01,0x33, - 0x9a,0xfe,0xcb,0xfe,0xd5,0xf4,0x8b,0x03,0x72,0x6d, - 0xfb,0x3d,0x02,0x69,0xd1,0x8a,0xfc,0x97,0x5b,0x00, - 0x00,0x02,0x00,0x8b,0xff,0xec,0x03,0x96,0x07,0x73, - 0x00,0x0a,0x00,0x1a,0x00,0x00,0x01,0x33,0x1e,0x01, - 0x17,0x15,0x23,0x26,0x27,0x26,0x27,0x01,0x11,0x14, - 0x02,0x20,0x02,0x35,0x11,0x33,0x11,0x14,0x16,0x32, - 0x36,0x35,0x11,0x00,0xff,0xbd,0x1d,0x6b,0x31,0x5e, - 0x44,0x5a,0x59,0x21,0x02,0x97,0xc4,0xfe,0x81,0xc8, - 0x9c,0x7a,0xe4,0x76,0x07,0x73,0x43,0xb1,0x3d,0x17, - 0x38,0x60,0x61,0x3d,0xfe,0x55,0xfc,0x33,0xfc,0xfe, - 0xff,0x01,0x06,0xf8,0x03,0xcc,0xfc,0x25,0xad,0xb3, - 0xb4,0xad,0x03,0xda,0x00,0x00,0x00,0x02,0x00,0x8b, - 0xff,0xec,0x03,0x96,0x07,0x73,0x00,0x09,0x00,0x19, - 0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23,0x35,0x3e, - 0x01,0x37,0x01,0x11,0x14,0x02,0x20,0x02,0x35,0x11, - 0x33,0x11,0x14,0x16,0x32,0x36,0x35,0x11,0x03,0x22, - 0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0x01,0x30,0xc4, - 0xfe,0x81,0xc8,0x9c,0x7a,0xe4,0x76,0x07,0x73,0x13, - 0x37,0xc1,0x3d,0x16,0x45,0xab,0x42,0xfe,0x43,0xfc, - 0x33,0xfc,0xfe,0xff,0x01,0x06,0xf8,0x03,0xcc,0xfc, - 0x25,0xad,0xb3,0xb4,0xad,0x03,0xda,0x00,0x00,0x02, - 0x00,0x8b,0xff,0xec,0x03,0x96,0x07,0x73,0x00,0x0e, - 0x00,0x1e,0x00,0x00,0x01,0x23,0x26,0x2f,0x01,0x06, - 0x07,0x23,0x35,0x36,0x37,0x33,0x1e,0x01,0x1f,0x01, - 0x11,0x14,0x02,0x20,0x02,0x35,0x11,0x33,0x11,0x14, - 0x16,0x32,0x36,0x35,0x11,0x03,0x24,0x56,0x2a,0x39, - 0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15,0x70,0x41, - 0x72,0xc4,0xfe,0x81,0xc8,0x9c,0x7a,0xe4,0x76,0x06, - 0x2b,0x24,0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31, - 0xaf,0x53,0x8a,0xfc,0x33,0xfc,0xfe,0xff,0x01,0x06, - 0xf8,0x03,0xcc,0xfc,0x25,0xad,0xb3,0xb4,0xad,0x03, - 0xda,0x00,0x00,0x03,0x00,0x8b,0xff,0xec,0x03,0x96, - 0x07,0x24,0x00,0x07,0x00,0x0f,0x00,0x1f,0x00,0x00, - 0x00,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32, - 0x16,0x14,0x06,0x22,0x26,0x34,0x01,0x11,0x14,0x02, - 0x20,0x02,0x35,0x11,0x33,0x11,0x14,0x16,0x32,0x36, - 0x35,0x11,0x01,0x44,0x4c,0x2f,0x2f,0x4c,0x30,0x01, - 0x7f,0x4c,0x30,0x2f,0x4c,0x30,0x01,0x32,0xc4,0xfe, - 0x81,0xc8,0x9c,0x7a,0xe4,0x76,0x07,0x24,0x32,0x5d, - 0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d,0xfe, - 0xc4,0xfc,0x33,0xfc,0xfe,0xff,0x01,0x06,0xf8,0x03, - 0xcc,0xfc,0x25,0xad,0xb3,0xb4,0xad,0x03,0xda,0x00, - 0x00,0x02,0x00,0x00,0x00,0x00,0x03,0x09,0x07,0x73, - 0x00,0x09,0x00,0x12,0x00,0x00,0x01,0x15,0x0e,0x01, - 0x07,0x23,0x35,0x3e,0x01,0x37,0x03,0x23,0x11,0x01, - 0x33,0x1b,0x01,0x33,0x01,0x02,0x9d,0x1d,0xb1,0x4a, - 0x5d,0x34,0x67,0x1e,0x10,0x9b,0xfe,0xca,0xa4,0xe1, - 0xe0,0xa4,0xfe,0xc8,0x07,0x73,0x13,0x37,0xc1,0x3d, - 0x16,0x45,0xab,0x42,0xf8,0x8d,0x02,0x3c,0x03,0x7a, - 0xfd,0x48,0x02,0xb8,0xfc,0x8a,0x00,0x02,0x00,0x95, - 0x00,0x00,0x03,0x36,0x05,0xb6,0x00,0x0b,0x00,0x13, - 0x00,0x00,0x01,0x33,0x32,0x16,0x10,0x06,0x2b,0x01, - 0x11,0x23,0x11,0x33,0x19,0x01,0x33,0x32,0x36,0x10, - 0x26,0x23,0x01,0x31,0x64,0xd5,0xcc,0xd6,0xd1,0x5e, - 0x9c,0x9c,0x53,0x94,0x81,0x7f,0x8a,0x04,0xb4,0xcf, - 0xfe,0x45,0xe9,0xfe,0xbf,0x05,0xb6,0xfe,0x70,0xfd, - 0xa7,0x8e,0x01,0x3f,0x8c,0x00,0x00,0x00,0x00,0x01, - 0x00,0x86,0xff,0xec,0x03,0x57,0x06,0x1f,0x00,0x2c, - 0x00,0x00,0x33,0x11,0x34,0x37,0x3e,0x01,0x20,0x16, - 0x10,0x0f,0x01,0x06,0x14,0x16,0x1f,0x01,0x1e,0x01, - 0x17,0x14,0x06,0x20,0x27,0x35,0x16,0x32,0x36,0x35, - 0x34,0x26,0x27,0x2e,0x01,0x35,0x34,0x37,0x3e,0x01, - 0x35,0x34,0x23,0x22,0x06,0x15,0x11,0x86,0x03,0x09, - 0xaa,0x01,0x1e,0x9d,0x60,0x09,0x57,0x23,0x3e,0x2f, - 0x4b,0x44,0x01,0xa0,0xfe,0xf5,0x43,0x5b,0xa4,0x54, - 0x32,0x53,0x52,0x43,0x6e,0x29,0x24,0x94,0x54,0x58, - 0x04,0x5f,0x35,0x32,0xa4,0xb5,0x9c,0xfe,0xf6,0x75, - 0x09,0x6c,0x6b,0x48,0x46,0x2e,0x4b,0x8c,0x5b,0x9b, - 0xaf,0x35,0x8d,0x40,0x63,0x5a,0x40,0x65,0x55,0x55, - 0x84,0x4b,0x72,0x6e,0x38,0x59,0x34,0xab,0x7c,0x77, - 0xfb,0x5a,0x00,0x00,0x00,0x03,0x00,0x46,0xff,0xee, - 0x02,0xc8,0x06,0x21,0x00,0x0a,0x00,0x20,0x00,0x2b, - 0x00,0x00,0x13,0x33,0x1e,0x01,0x17,0x15,0x23,0x26, - 0x27,0x26,0x27,0x13,0x27,0x36,0x20,0x16,0x15,0x11, - 0x23,0x27,0x23,0x06,0x23,0x22,0x26,0x10,0x36,0x3f, - 0x01,0x35,0x34,0x26,0x22,0x13,0x35,0x06,0x07,0x0e, - 0x01,0x15,0x14,0x33,0x32,0x36,0x9d,0xbd,0x1d,0x6b, - 0x31,0x5e,0x44,0x5a,0x59,0x21,0x2f,0x3a,0x82,0x01, - 0x26,0x8e,0x74,0x1a,0x05,0x52,0x9f,0x78,0x86,0xbc, - 0xb0,0x7f,0x48,0xb2,0xfa,0x22,0x44,0x76,0x71,0x89, - 0x5c,0x68,0x06,0x21,0x43,0xb1,0x3d,0x17,0x38,0x60, - 0x61,0x3d,0xfd,0x8c,0x6f,0x52,0xb6,0xc1,0xfd,0x1b, - 0x98,0xaa,0xa8,0x01,0x3a,0xb3,0x08,0x06,0x56,0x80, - 0x77,0xfd,0xda,0x6a,0x01,0x04,0x06,0x77,0x73,0xc7, - 0xb3,0x00,0x00,0x00,0x00,0x03,0x00,0x46,0xff,0xee, - 0x02,0xc8,0x06,0x21,0x00,0x09,0x00,0x1f,0x00,0x2a, - 0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23,0x35,0x3e, - 0x01,0x37,0x01,0x27,0x36,0x20,0x16,0x15,0x11,0x23, - 0x27,0x23,0x06,0x23,0x22,0x26,0x10,0x36,0x3f,0x01, - 0x35,0x34,0x26,0x22,0x13,0x35,0x06,0x07,0x0e,0x01, - 0x15,0x14,0x33,0x32,0x36,0x02,0xaf,0x1d,0xb1,0x4a, - 0x5d,0x34,0x67,0x1e,0xfe,0xd9,0x3a,0x82,0x01,0x26, - 0x8e,0x74,0x1a,0x05,0x52,0x9f,0x78,0x86,0xbc,0xb0, - 0x7f,0x48,0xb2,0xfa,0x22,0x44,0x76,0x71,0x89,0x5c, - 0x68,0x06,0x21,0x13,0x37,0xc1,0x3d,0x16,0x45,0xab, - 0x42,0xfd,0x7a,0x6f,0x52,0xb6,0xc1,0xfd,0x1b,0x98, - 0xaa,0xa8,0x01,0x3a,0xb3,0x08,0x06,0x56,0x80,0x77, - 0xfd,0xda,0x6a,0x01,0x04,0x06,0x77,0x73,0xc7,0xb3, - 0x00,0x03,0x00,0x46,0xff,0xee,0x02,0xc8,0x06,0x22, - 0x00,0x0e,0x00,0x24,0x00,0x2f,0x00,0x00,0x01,0x23, - 0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36,0x37,0x33, - 0x1e,0x01,0x17,0x01,0x27,0x36,0x20,0x16,0x15,0x11, - 0x23,0x27,0x23,0x06,0x23,0x22,0x26,0x10,0x36,0x3f, - 0x01,0x35,0x34,0x26,0x22,0x13,0x35,0x06,0x07,0x0e, - 0x01,0x15,0x14,0x33,0x32,0x36,0x02,0xb8,0x56,0x2a, - 0x39,0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15,0x70, - 0x41,0xfe,0x14,0x3a,0x82,0x01,0x26,0x8e,0x74,0x1a, - 0x05,0x52,0x9f,0x78,0x86,0xbc,0xb0,0x7f,0x48,0xb2, - 0xfa,0x22,0x44,0x76,0x71,0x89,0x5c,0x68,0x04,0xda, - 0x24,0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31,0xaf, - 0x53,0xfe,0xac,0x6f,0x52,0xb6,0xc1,0xfd,0x1b,0x98, - 0xaa,0xa8,0x01,0x3a,0xb3,0x08,0x06,0x56,0x80,0x77, - 0xfd,0xda,0x6a,0x01,0x04,0x06,0x77,0x73,0xc7,0xb3, - 0x00,0x00,0x00,0x03,0x00,0x46,0xff,0xee,0x02,0xe0, - 0x05,0xcb,0x00,0x14,0x00,0x2a,0x00,0x35,0x00,0x00, - 0x01,0x22,0x26,0x27,0x26,0x23,0x22,0x07,0x23,0x3e, - 0x01,0x33,0x32,0x1e,0x01,0x32,0x36,0x37,0x33,0x0e, - 0x01,0x01,0x27,0x36,0x20,0x16,0x15,0x11,0x23,0x27, - 0x23,0x06,0x23,0x22,0x26,0x10,0x36,0x3f,0x01,0x35, - 0x34,0x26,0x22,0x13,0x35,0x06,0x07,0x0e,0x01,0x15, - 0x14,0x33,0x32,0x36,0x02,0x2c,0x22,0x4c,0x1b,0x49, - 0x25,0x3f,0x13,0x60,0x0c,0x5d,0x4e,0x2b,0x5e,0x52, - 0x3e,0x22,0x0b,0x60,0x0a,0x5e,0xfe,0x54,0x3a,0x82, - 0x01,0x26,0x8e,0x74,0x1a,0x05,0x52,0x9f,0x78,0x86, - 0xbc,0xb0,0x7f,0x48,0xb2,0xfa,0x22,0x44,0x76,0x71, - 0x89,0x5c,0x68,0x04,0xda,0x26,0x16,0x3d,0x7b,0x75, - 0x7c,0x3c,0x3c,0x3c,0x3e,0x75,0x7c,0xfe,0xc1,0x6f, - 0x52,0xb6,0xc1,0xfd,0x1b,0x98,0xaa,0xa8,0x01,0x3a, - 0xb3,0x08,0x06,0x56,0x80,0x77,0xfd,0xda,0x6a,0x01, - 0x04,0x06,0x77,0x73,0xc7,0xb3,0x00,0x04,0x00,0x46, - 0xff,0xee,0x02,0xc8,0x05,0xd2,0x00,0x07,0x00,0x0f, - 0x00,0x25,0x00,0x30,0x00,0x00,0x12,0x32,0x16,0x14, - 0x06,0x22,0x26,0x34,0x24,0x32,0x16,0x14,0x06,0x22, - 0x26,0x34,0x01,0x27,0x36,0x20,0x16,0x15,0x11,0x23, - 0x27,0x23,0x06,0x23,0x22,0x26,0x10,0x36,0x3f,0x01, - 0x35,0x34,0x26,0x22,0x13,0x35,0x06,0x07,0x0e,0x01, - 0x15,0x14,0x33,0x32,0x36,0xd5,0x4c,0x2f,0x2f,0x4c, - 0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30,0xfe,0xd7, - 0x3a,0x82,0x01,0x26,0x8e,0x74,0x1a,0x05,0x52,0x9f, - 0x78,0x86,0xbc,0xb0,0x7f,0x48,0xb2,0xfa,0x22,0x44, - 0x76,0x71,0x89,0x5c,0x68,0x05,0xd2,0x32,0x5d,0x34, - 0x33,0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d,0xfd,0xfb, - 0x6f,0x52,0xb6,0xc1,0xfd,0x1b,0x98,0xaa,0xa8,0x01, - 0x3a,0xb3,0x08,0x06,0x56,0x80,0x77,0xfd,0xda,0x6a, - 0x01,0x04,0x06,0x77,0x73,0xc7,0xb3,0x00,0x00,0x04, - 0x00,0x46,0xff,0xee,0x02,0xc8,0x06,0x73,0x00,0x07, - 0x00,0x0f,0x00,0x25,0x00,0x30,0x00,0x00,0x12,0x36, - 0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x26,0x22,0x06, - 0x14,0x16,0x32,0x36,0x01,0x27,0x36,0x20,0x16,0x15, - 0x11,0x23,0x27,0x23,0x06,0x23,0x22,0x26,0x10,0x36, - 0x3f,0x01,0x35,0x34,0x26,0x22,0x13,0x35,0x06,0x07, - 0x0e,0x01,0x15,0x14,0x33,0x32,0x36,0xce,0x76,0xbe, - 0x7a,0x76,0xc3,0x75,0x01,0x48,0x3d,0x67,0x40,0x3b, - 0x6a,0x3f,0xfe,0xb6,0x3a,0x82,0x01,0x26,0x8e,0x74, - 0x1a,0x05,0x52,0x9f,0x78,0x86,0xbc,0xb0,0x7f,0x48, - 0xb2,0xfa,0x22,0x44,0x76,0x71,0x89,0x5c,0x68,0x06, - 0x05,0x6e,0x6f,0xb6,0x6f,0x6c,0x90,0x3d,0x3e,0x65, - 0x3c,0x3d,0xfe,0x25,0x6f,0x52,0xb6,0xc1,0xfd,0x1b, - 0x98,0xaa,0xa8,0x01,0x3a,0xb3,0x08,0x06,0x56,0x80, - 0x77,0xfd,0xda,0x6a,0x01,0x04,0x06,0x77,0x73,0xc7, - 0xb3,0x00,0x00,0x00,0x00,0x03,0x00,0x46,0xff,0xec, - 0x04,0xd3,0x04,0x5b,0x00,0x23,0x00,0x29,0x00,0x34, - 0x00,0x00,0x13,0x27,0x36,0x33,0x32,0x17,0x36,0x20, - 0x12,0x1d,0x01,0x21,0x12,0x33,0x32,0x37,0x15,0x06, - 0x23,0x22,0x26,0x27,0x0e,0x01,0x23,0x22,0x26,0x10, - 0x36,0x3f,0x01,0x35,0x34,0x26,0x23,0x22,0x01,0x34, - 0x26,0x23,0x22,0x03,0x07,0x35,0x06,0x07,0x0e,0x01, - 0x15,0x14,0x33,0x32,0x36,0xcc,0x3a,0x82,0x8a,0xb0, - 0x47,0x58,0x01,0x37,0xaf,0xfd,0xf7,0x09,0xed,0x79, - 0x73,0x6e,0x8d,0x6d,0xa4,0x2d,0x31,0x90,0x66,0x7c, - 0x8a,0xbc,0xb0,0x7f,0x4b,0x4f,0x60,0x03,0x08,0x61, - 0x53,0xab,0x13,0x9c,0x22,0x44,0x77,0x70,0x89,0x5c, - 0x68,0x03,0x9b,0x6f,0x50,0x90,0x91,0xfe,0xfc,0xe0, - 0x6a,0xfe,0x5f,0x48,0x84,0x44,0x72,0x6a,0x73,0x69, - 0xab,0x01,0x39,0xb3,0x08,0x06,0x56,0x7c,0x7b,0xfe, - 0xa8,0x9d,0xb9,0xfe,0xaa,0xce,0x6a,0x01,0x04,0x06, - 0x73,0x77,0xc7,0xb3,0x00,0x01,0x00,0x58,0xfe,0x14, - 0x02,0x7e,0x04,0x5b,0x00,0x22,0x00,0x00,0x01,0x22, - 0x11,0x14,0x16,0x33,0x32,0x37,0x15,0x06,0x0f,0x01, - 0x16,0x15,0x14,0x06,0x23,0x22,0x27,0x35,0x16,0x32, - 0x36,0x35,0x34,0x27,0x37,0x24,0x11,0x10,0x21,0x32, - 0x17,0x07,0x26,0x01,0xc9,0xd5,0x6b,0x70,0x4a,0x5c, - 0x54,0x5d,0x25,0x9e,0x83,0x7a,0x40,0x25,0x2d,0x71, - 0x41,0xa3,0x47,0xfe,0xfa,0x01,0x62,0x72,0x52,0x32, - 0x47,0x03,0xd4,0xfe,0x4b,0xdc,0xd0,0x2a,0x83,0x2b, - 0x03,0x52,0x27,0x8c,0x66,0x6d,0x0e,0x67,0x0d,0x36, - 0x31,0x64,0x1a,0x97,0x46,0x01,0xdf,0x02,0x3e,0x30, - 0x7c,0x25,0x00,0x03,0x00,0x58,0xff,0xec,0x02,0xfb, - 0x06,0x21,0x00,0x0a,0x00,0x1b,0x00,0x21,0x00,0x00, - 0x13,0x33,0x1e,0x01,0x17,0x15,0x23,0x26,0x27,0x26, - 0x27,0x01,0x22,0x02,0x10,0x12,0x33,0x32,0x12,0x1d, - 0x01,0x21,0x12,0x33,0x32,0x37,0x15,0x06,0x13,0x34, - 0x26,0x23,0x22,0x03,0xb4,0xbd,0x1d,0x6b,0x31,0x5e, - 0x44,0x5a,0x59,0x21,0x01,0x28,0xb9,0xcb,0xb6,0xa9, - 0x96,0xae,0xfd,0xf7,0x06,0xf4,0x72,0x76,0x70,0x01, - 0x60,0x53,0xad,0x10,0x06,0x21,0x43,0xb1,0x3d,0x17, - 0x38,0x60,0x61,0x3d,0xf9,0xdd,0x01,0x25,0x02,0x20, - 0x01,0x2a,0xfe,0xfb,0xdf,0x6a,0xfe,0x62,0x47,0x86, - 0x44,0x02,0x9a,0x9d,0xbb,0xfe,0xa8,0x00,0x00,0x03, - 0x00,0x58,0xff,0xec,0x02,0xfb,0x06,0x21,0x00,0x09, - 0x00,0x1a,0x00,0x20,0x00,0x00,0x01,0x15,0x0e,0x01, - 0x07,0x23,0x35,0x3e,0x01,0x37,0x03,0x22,0x02,0x10, - 0x12,0x33,0x32,0x12,0x1d,0x01,0x21,0x12,0x33,0x32, - 0x37,0x15,0x06,0x13,0x34,0x26,0x23,0x22,0x03,0x02, - 0xce,0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0x36,0xb9, - 0xcb,0xb6,0xa9,0x96,0xae,0xfd,0xf7,0x06,0xf4,0x72, - 0x76,0x70,0x01,0x60,0x53,0xad,0x10,0x06,0x21,0x13, - 0x37,0xc1,0x3d,0x16,0x45,0xab,0x42,0xf9,0xcb,0x01, - 0x25,0x02,0x20,0x01,0x2a,0xfe,0xfb,0xdf,0x6a,0xfe, - 0x62,0x47,0x86,0x44,0x02,0x9a,0x9d,0xbb,0xfe,0xa8, - 0x00,0x03,0x00,0x58,0xff,0xec,0x02,0xfb,0x06,0x21, - 0x00,0x0e,0x00,0x1f,0x00,0x25,0x00,0x00,0x01,0x23, - 0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36,0x37,0x33, - 0x1e,0x01,0x17,0x03,0x22,0x02,0x10,0x12,0x33,0x32, - 0x12,0x1d,0x01,0x21,0x12,0x33,0x32,0x37,0x15,0x06, - 0x13,0x34,0x26,0x23,0x22,0x03,0x02,0xc8,0x56,0x2a, - 0x39,0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15,0x70, - 0x41,0xec,0xb9,0xcb,0xb6,0xa9,0x96,0xae,0xfd,0xf7, - 0x06,0xf4,0x72,0x76,0x70,0x01,0x60,0x53,0xad,0x10, - 0x04,0xd9,0x24,0x40,0x65,0x97,0x32,0x15,0xbd,0x76, - 0x31,0xaf,0x53,0xfa,0xfe,0x01,0x25,0x02,0x20,0x01, - 0x2a,0xfe,0xfb,0xdf,0x6a,0xfe,0x62,0x47,0x86,0x44, - 0x02,0x9a,0x9d,0xbb,0xfe,0xa8,0x00,0x00,0x00,0x04, - 0x00,0x58,0xff,0xec,0x02,0xfb,0x05,0xd2,0x00,0x07, - 0x00,0x0f,0x00,0x20,0x00,0x26,0x00,0x00,0x12,0x32, - 0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32,0x16,0x14, - 0x06,0x22,0x26,0x34,0x03,0x22,0x02,0x10,0x12,0x33, - 0x32,0x12,0x1d,0x01,0x21,0x12,0x33,0x32,0x37,0x15, - 0x06,0x13,0x34,0x26,0x23,0x22,0x03,0xe7,0x4c,0x2f, - 0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30, - 0x2b,0xb9,0xcb,0xb6,0xa9,0x96,0xae,0xfd,0xf7,0x06, - 0xf4,0x72,0x76,0x70,0x01,0x60,0x53,0xad,0x10,0x05, - 0xd2,0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f,0x33, - 0x34,0x5d,0xfa,0x4c,0x01,0x25,0x02,0x20,0x01,0x2a, - 0xfe,0xfb,0xdf,0x6a,0xfe,0x62,0x47,0x86,0x44,0x02, - 0x9a,0x9d,0xbb,0xfe,0xa8,0x00,0x00,0x02,0xff,0xc6, - 0x00,0x00,0x01,0x3c,0x06,0x21,0x00,0x0a,0x00,0x0e, - 0x00,0x00,0x03,0x33,0x1e,0x01,0x17,0x15,0x23,0x26, - 0x27,0x26,0x27,0x01,0x23,0x11,0x33,0x3a,0xbd,0x1d, - 0x6b,0x31,0x5e,0x44,0x5a,0x59,0x21,0x01,0x59,0x98, - 0x98,0x06,0x21,0x43,0xb1,0x3d,0x17,0x38,0x60,0x61, - 0x3d,0xf9,0xf1,0x04,0x47,0x00,0x00,0x02,0x00,0x71, - 0x00,0x00,0x01,0xe6,0x06,0x21,0x00,0x09,0x00,0x0d, - 0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23,0x35,0x3e, - 0x01,0x37,0x03,0x23,0x11,0x33,0x01,0xe6,0x1d,0xb1, - 0x4a,0x5d,0x34,0x67,0x1e,0x0b,0x98,0x98,0x06,0x21, - 0x13,0x37,0xc1,0x3d,0x16,0x45,0xab,0x42,0xf9,0xdf, - 0x04,0x47,0x00,0x02,0xff,0xbf,0x00,0x00,0x01,0xe5, - 0x06,0x21,0x00,0x0e,0x00,0x12,0x00,0x00,0x01,0x23, - 0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36,0x37,0x33, - 0x1e,0x01,0x17,0x03,0x23,0x11,0x33,0x01,0xe5,0x56, - 0x2a,0x39,0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15, - 0x70,0x41,0xc6,0x98,0x98,0x04,0xd9,0x24,0x40,0x65, - 0x97,0x32,0x15,0xbd,0x76,0x31,0xaf,0x53,0xfb,0x12, - 0x04,0x47,0x00,0x00,0x00,0x03,0xff,0xd7,0x00,0x00, - 0x01,0xd2,0x05,0xd2,0x00,0x07,0x00,0x0f,0x00,0x13, - 0x00,0x00,0x12,0x32,0x16,0x14,0x06,0x22,0x26,0x34, - 0x24,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x03,0x23, - 0x11,0x33,0x07,0x4c,0x2f,0x2f,0x4c,0x30,0x01,0x7f, - 0x4c,0x30,0x2f,0x4c,0x30,0x08,0x98,0x98,0x05,0xd2, - 0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34, - 0x5d,0xfa,0x60,0x04,0x47,0x00,0x00,0x02,0x00,0x57, - 0xff,0xec,0x03,0x34,0x06,0x18,0x00,0x1b,0x00,0x25, - 0x00,0x00,0x13,0x37,0x16,0x17,0x36,0x37,0x17,0x07, - 0x00,0x11,0x10,0x02,0x23,0x22,0x02,0x10,0x12,0x33, - 0x32,0x17,0x32,0x37,0x26,0x27,0x07,0x27,0x37,0x26, - 0x13,0x22,0x11,0x14,0x16,0x32,0x36,0x35,0x34,0x26, - 0xe7,0x3e,0x60,0x4c,0x9a,0x28,0x39,0xac,0x01,0x14, - 0xbe,0xb5,0xa5,0xc5,0xaf,0xa1,0x8d,0x4f,0x06,0x03, - 0x32,0xa9,0xbe,0x39,0xaa,0x36,0x9b,0xd8,0x71,0xd2, - 0x66,0x75,0x05,0xbb,0x5d,0x36,0x44,0x5f,0x19,0x5b, - 0x6a,0xfe,0xcd,0xfd,0xf6,0xfe,0xf2,0xfe,0xe6,0x01, - 0x10,0x01,0xc9,0x01,0x01,0x79,0x01,0xfd,0xc1,0x74, - 0x5c,0x67,0x30,0xfd,0xb9,0xfe,0x90,0xa4,0xc0,0xbe, - 0xc4,0x95,0xbd,0x00,0x00,0x02,0x00,0x86,0x00,0x00, - 0x03,0x1d,0x05,0xcb,0x00,0x14,0x00,0x28,0x00,0x00, - 0x01,0x22,0x26,0x27,0x26,0x23,0x22,0x07,0x23,0x3e, - 0x01,0x33,0x32,0x1e,0x01,0x32,0x36,0x37,0x33,0x0e, - 0x01,0x05,0x17,0x33,0x3e,0x01,0x33,0x32,0x16,0x15, - 0x11,0x23,0x11,0x10,0x23,0x22,0x06,0x19,0x01,0x23, - 0x11,0x02,0x55,0x22,0x4c,0x1b,0x49,0x25,0x3f,0x13, - 0x60,0x0c,0x5d,0x4e,0x2b,0x5e,0x52,0x3e,0x22,0x0b, - 0x60,0x0a,0x5e,0xfe,0x60,0x10,0x0c,0x22,0x82,0x4f, - 0x88,0x85,0x98,0x93,0x7a,0x5b,0x97,0x04,0xda,0x26, - 0x16,0x3d,0x7b,0x75,0x7c,0x3c,0x3c,0x3c,0x3e,0x75, - 0x7c,0x94,0x94,0x50,0x59,0xb7,0xbe,0xfd,0x1a,0x02, - 0xd0,0x01,0x06,0xdb,0xfe,0xf5,0xfe,0x10,0x04,0x46, - 0x00,0x00,0x00,0x03,0x00,0x57,0xff,0xec,0x03,0x30, - 0x06,0x21,0x00,0x0a,0x00,0x12,0x00,0x1a,0x00,0x00, - 0x13,0x33,0x1e,0x01,0x17,0x15,0x23,0x26,0x27,0x26, - 0x27,0x02,0x12,0x20,0x12,0x10,0x02,0x20,0x02,0x01, - 0x22,0x06,0x10,0x16,0x33,0x32,0x10,0xbe,0xbd,0x1d, - 0x6b,0x31,0x5e,0x44,0x5a,0x59,0x21,0x67,0xbd,0x01, - 0x5a,0xc2,0xc0,0xfe,0xa7,0xc0,0x01,0x6c,0x6d,0x63, - 0x65,0x6b,0xd0,0x06,0x21,0x43,0xb1,0x3d,0x17,0x38, - 0x60,0x61,0x3d,0xfd,0x27,0x01,0x25,0xfe,0xd3,0xfd, - 0xe6,0xfe,0xd8,0x01,0x29,0x02,0xbf,0xd4,0xfe,0x4c, - 0xd9,0x03,0x61,0x00,0x00,0x00,0x00,0x03,0x00,0x57, - 0xff,0xec,0x03,0x30,0x06,0x21,0x00,0x09,0x00,0x11, - 0x00,0x19,0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23, - 0x35,0x3e,0x01,0x37,0x00,0x12,0x20,0x12,0x10,0x02, - 0x20,0x02,0x01,0x22,0x06,0x10,0x16,0x33,0x32,0x10, - 0x02,0xd2,0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0xfe, - 0x41,0xbd,0x01,0x5a,0xc2,0xc0,0xfe,0xa7,0xc0,0x01, - 0x6c,0x6d,0x63,0x65,0x6b,0xd0,0x06,0x21,0x13,0x37, - 0xc1,0x3d,0x16,0x45,0xab,0x42,0xfd,0x15,0x01,0x25, - 0xfe,0xd3,0xfd,0xe6,0xfe,0xd8,0x01,0x29,0x02,0xbf, - 0xd4,0xfe,0x4c,0xd9,0x03,0x61,0x00,0x03,0x00,0x57, - 0xff,0xec,0x03,0x30,0x06,0x21,0x00,0x0e,0x00,0x16, - 0x00,0x1e,0x00,0x00,0x01,0x23,0x26,0x2f,0x01,0x06, - 0x07,0x23,0x35,0x36,0x37,0x33,0x1e,0x01,0x17,0x00, - 0x12,0x20,0x12,0x10,0x02,0x20,0x02,0x01,0x22,0x06, - 0x10,0x16,0x33,0x32,0x10,0x02,0xd8,0x56,0x2a,0x39, - 0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15,0x70,0x41, - 0xfd,0x7f,0xbd,0x01,0x5a,0xc2,0xc0,0xfe,0xa7,0xc0, - 0x01,0x6c,0x6d,0x63,0x65,0x6b,0xd0,0x04,0xd9,0x24, - 0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31,0xaf,0x53, - 0xfe,0x48,0x01,0x25,0xfe,0xd3,0xfd,0xe6,0xfe,0xd8, - 0x01,0x29,0x02,0xbf,0xd4,0xfe,0x4c,0xd9,0x03,0x61, - 0x00,0x00,0x00,0x03,0x00,0x57,0xff,0xec,0x03,0x30, - 0x05,0xcb,0x00,0x14,0x00,0x1c,0x00,0x24,0x00,0x00, - 0x01,0x22,0x26,0x27,0x26,0x23,0x22,0x07,0x23,0x3e, - 0x01,0x33,0x32,0x1e,0x01,0x32,0x36,0x37,0x33,0x0e, - 0x01,0x00,0x12,0x20,0x12,0x10,0x02,0x20,0x02,0x01, - 0x22,0x06,0x10,0x16,0x33,0x32,0x10,0x02,0x42,0x22, - 0x4c,0x1b,0x49,0x25,0x3f,0x13,0x60,0x0c,0x5d,0x4e, - 0x2b,0x5e,0x52,0x3e,0x22,0x0b,0x60,0x0a,0x5e,0xfd, - 0xc9,0xbd,0x01,0x5a,0xc2,0xc0,0xfe,0xa7,0xc0,0x01, - 0x6c,0x6d,0x63,0x65,0x6b,0xd0,0x04,0xda,0x26,0x16, - 0x3d,0x7b,0x75,0x7c,0x3c,0x3c,0x3c,0x3e,0x75,0x7c, - 0xfe,0x5c,0x01,0x25,0xfe,0xd3,0xfd,0xe6,0xfe,0xd8, - 0x01,0x29,0x02,0xbf,0xd4,0xfe,0x4c,0xd9,0x03,0x61, - 0x00,0x04,0x00,0x57,0xff,0xec,0x03,0x30,0x05,0xd2, - 0x00,0x07,0x00,0x0f,0x00,0x17,0x00,0x1f,0x00,0x00, - 0x12,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32, - 0x16,0x14,0x06,0x22,0x26,0x34,0x00,0x12,0x20,0x12, - 0x10,0x02,0x20,0x02,0x01,0x22,0x06,0x10,0x16,0x33, - 0x32,0x10,0xf7,0x4c,0x2f,0x2f,0x4c,0x30,0x01,0x7f, - 0x4c,0x30,0x2f,0x4c,0x30,0xfe,0x40,0xbd,0x01,0x5a, - 0xc2,0xc0,0xfe,0xa7,0xc0,0x01,0x6c,0x6d,0x63,0x65, - 0x6b,0xd0,0x05,0xd2,0x32,0x5d,0x34,0x33,0x5f,0x31, - 0x31,0x5f,0x33,0x34,0x5d,0xfd,0x96,0x01,0x25,0xfe, - 0xd3,0xfd,0xe6,0xfe,0xd8,0x01,0x29,0x02,0xbf,0xd4, - 0xfe,0x4c,0xd9,0x03,0x61,0x00,0x00,0x03,0x00,0x4a, - 0x00,0xfd,0x03,0x08,0x04,0xa6,0x00,0x06,0x00,0x0a, - 0x00,0x11,0x00,0x00,0x00,0x34,0x32,0x15,0x14,0x06, - 0x23,0x01,0x21,0x35,0x21,0x01,0x22,0x34,0x32,0x15, - 0x14,0x06,0x01,0x4c,0xb9,0x32,0x2a,0x01,0x5f,0xfd, - 0x42,0x02,0xbe,0xfe,0xa1,0x5d,0xb9,0x32,0x03,0xb8, - 0xee,0x77,0x3b,0x3c,0xfe,0xdc,0x7c,0xfd,0xed,0xee, - 0x76,0x3b,0x3d,0x00,0x00,0x03,0x00,0x54,0xff,0x81, - 0x03,0x33,0x04,0xa6,0x00,0x14,0x00,0x1d,0x00,0x25, - 0x00,0x00,0x25,0x06,0x07,0x27,0x36,0x37,0x26,0x10, - 0x12,0x33,0x32,0x17,0x37,0x16,0x17,0x07,0x16,0x10, - 0x02,0x23,0x22,0x13,0x22,0x06,0x15,0x14,0x17,0x12, - 0x13,0x26,0x03,0x32,0x36,0x35,0x26,0x27,0x01,0x16, - 0x01,0x0f,0x08,0x4b,0x68,0x55,0x10,0x62,0xbc,0xb2, - 0x6e,0x50,0x49,0x11,0x56,0x5c,0x59,0xbf,0xb0,0x6a, - 0x6c,0x6d,0x66,0x1a,0x8c,0xad,0x31,0x4f,0x69,0x6b, - 0x01,0x16,0xfe,0xce,0x2a,0x26,0x0f,0x96,0x35,0xa7, - 0x21,0x97,0x02,0x22,0x01,0x24,0x47,0x92,0x09,0x2b, - 0xbb,0x95,0xfd,0xf1,0xfe,0xd9,0x03,0xe8,0xd6,0xd9, - 0x85,0x7c,0x01,0x15,0x01,0x5c,0x3f,0xfc,0x9f,0xdc, - 0xd6,0x8a,0x5b,0xfd,0x9a,0x31,0x00,0x02,0x00,0x80, - 0xff,0xec,0x03,0x17,0x06,0x21,0x00,0x0a,0x00,0x20, - 0x00,0x00,0x13,0x33,0x1e,0x01,0x17,0x15,0x23,0x26, - 0x27,0x26,0x27,0x01,0x23,0x26,0x27,0x23,0x0e,0x01, - 0x23,0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16,0x33, - 0x32,0x36,0x35,0x11,0x33,0xb8,0xbd,0x1d,0x6b,0x31, - 0x5e,0x44,0x5a,0x59,0x21,0x02,0x5f,0x7b,0x08,0x0b, - 0x0a,0x24,0x80,0x4e,0x89,0x84,0x98,0x46,0x4c,0x6e, - 0x68,0x97,0x06,0x21,0x43,0xb1,0x3d,0x17,0x38,0x60, - 0x61,0x3d,0xf9,0xf1,0x38,0x5d,0x50,0x59,0xc1,0xcf, - 0x02,0xca,0xfd,0x4b,0x95,0x8b,0xc0,0xd6,0x02,0x3f, - 0x00,0x02,0x00,0x80,0xff,0xec,0x03,0x17,0x06,0x21, - 0x00,0x09,0x00,0x1f,0x00,0x00,0x01,0x15,0x0e,0x01, - 0x07,0x23,0x35,0x3e,0x01,0x37,0x13,0x23,0x26,0x27, - 0x23,0x0e,0x01,0x23,0x22,0x26,0x35,0x11,0x33,0x11, - 0x14,0x16,0x33,0x32,0x36,0x35,0x11,0x33,0x02,0xde, - 0x1d,0xb1,0x4a,0x5d,0x34,0x67,0x1e,0xf5,0x7b,0x08, - 0x0b,0x0a,0x24,0x80,0x4e,0x89,0x84,0x98,0x46,0x4c, - 0x6e,0x68,0x97,0x06,0x21,0x13,0x37,0xc1,0x3d,0x16, - 0x45,0xab,0x42,0xf9,0xdf,0x38,0x5d,0x50,0x59,0xc1, - 0xcf,0x02,0xca,0xfd,0x4b,0x95,0x8b,0xc0,0xd6,0x02, - 0x3f,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0xff,0xec, - 0x03,0x17,0x06,0x21,0x00,0x0e,0x00,0x24,0x00,0x00, - 0x01,0x23,0x26,0x2f,0x01,0x06,0x07,0x23,0x35,0x36, - 0x37,0x33,0x1e,0x01,0x17,0x13,0x23,0x26,0x27,0x23, - 0x0e,0x01,0x23,0x22,0x26,0x35,0x11,0x33,0x11,0x14, - 0x16,0x33,0x32,0x36,0x35,0x11,0x33,0x02,0xdb,0x56, - 0x2a,0x39,0x5a,0x86,0x38,0x55,0x8d,0x38,0x9b,0x15, - 0x70,0x41,0x3c,0x7b,0x08,0x0b,0x0a,0x24,0x80,0x4e, - 0x89,0x84,0x98,0x46,0x4c,0x6e,0x68,0x97,0x04,0xd9, - 0x24,0x40,0x65,0x97,0x32,0x15,0xbd,0x76,0x31,0xaf, - 0x53,0xfb,0x12,0x38,0x5d,0x50,0x59,0xc1,0xcf,0x02, - 0xca,0xfd,0x4b,0x95,0x8b,0xc0,0xd6,0x02,0x3f,0x00, - 0x00,0x03,0x00,0x80,0xff,0xec,0x03,0x17,0x05,0xd2, - 0x00,0x07,0x00,0x0f,0x00,0x25,0x00,0x00,0x00,0x32, - 0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32,0x16,0x14, - 0x06,0x22,0x26,0x34,0x13,0x23,0x26,0x27,0x23,0x0e, - 0x01,0x23,0x22,0x26,0x35,0x11,0x33,0x11,0x14,0x16, - 0x33,0x32,0x36,0x35,0x11,0x33,0x01,0x00,0x4c,0x2f, - 0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30, - 0xf7,0x7b,0x08,0x0b,0x0a,0x24,0x80,0x4e,0x89,0x84, - 0x98,0x46,0x4c,0x6e,0x68,0x97,0x05,0xd2,0x32,0x5d, - 0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34,0x5d,0xfa, - 0x60,0x38,0x5d,0x50,0x59,0xc1,0xcf,0x02,0xca,0xfd, - 0x4b,0x95,0x8b,0xc0,0xd6,0x02,0x3f,0x00,0x00,0x00, - 0x00,0x02,0x00,0x06,0xfe,0x14,0x02,0xdc,0x06,0x21, - 0x00,0x09,0x00,0x24,0x00,0x00,0x01,0x15,0x0e,0x01, - 0x07,0x23,0x35,0x3e,0x01,0x37,0x02,0x06,0x22,0x27, - 0x35,0x16,0x33,0x32,0x36,0x3f,0x01,0x01,0x33,0x13, - 0x16,0x17,0x33,0x36,0x37,0x12,0x37,0x33,0x02,0x03, - 0x0e,0x02,0x02,0x85,0x1d,0xb1,0x4a,0x5d,0x34,0x67, - 0x1e,0xc3,0x59,0x6b,0x36,0x2a,0x29,0x3e,0x4c,0x19, - 0x27,0xfe,0xdd,0x9c,0xa0,0x1c,0x16,0x07,0x15,0x18, - 0x6c,0x2b,0x9d,0x86,0x91,0x1c,0x29,0x3b,0x06,0x21, - 0x13,0x37,0xc1,0x3d,0x16,0x45,0xab,0x42,0xf8,0x1f, - 0x2c,0x11,0x84,0x0e,0x61,0x6b,0x95,0x04,0x4a,0xfd, - 0x6b,0x73,0x93,0x8a,0x75,0x01,0xda,0xc2,0xfd,0xf4, - 0xfd,0xc0,0x6a,0x83,0x86,0x00,0x00,0x00,0x00,0x02, - 0x00,0x86,0xfe,0x14,0x03,0x4e,0x06,0x14,0x00,0x11, - 0x00,0x1c,0x00,0x00,0x01,0x07,0x33,0x36,0x20,0x12, - 0x10,0x02,0x23,0x22,0x26,0x27,0x23,0x17,0x11,0x23, - 0x11,0x33,0x11,0x14,0x16,0x33,0x32,0x36,0x10,0x26, - 0x22,0x06,0x07,0x01,0x1d,0x07,0x07,0x55,0x01,0x37, - 0xa5,0xa6,0x95,0x50,0x80,0x26,0x09,0x0d,0x9b,0x97, - 0x66,0x6c,0x61,0x60,0x5d,0xd1,0x64,0x01,0x04,0x47, - 0x95,0xa9,0xfe,0xe0,0xfd,0xdc,0xfe,0xd5,0x54,0x4e, - 0x86,0xfe,0x0c,0x08,0x00,0xfc,0x16,0xe3,0xd6,0xd2, - 0x01,0xc3,0xce,0xbd,0xcd,0x00,0x00,0x00,0x00,0x03, - 0x00,0x06,0xfe,0x14,0x02,0xdc,0x05,0xd2,0x00,0x07, - 0x00,0x0f,0x00,0x2a,0x00,0x00,0x12,0x32,0x16,0x14, - 0x06,0x22,0x26,0x34,0x24,0x32,0x16,0x14,0x06,0x22, - 0x26,0x34,0x02,0x06,0x22,0x27,0x35,0x16,0x33,0x32, - 0x36,0x3f,0x01,0x01,0x33,0x13,0x16,0x17,0x33,0x36, - 0x37,0x12,0x37,0x33,0x02,0x03,0x0e,0x02,0xa7,0x4c, - 0x2f,0x2f,0x4c,0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c, - 0x30,0xc1,0x59,0x6b,0x36,0x2a,0x29,0x3e,0x4c,0x19, - 0x27,0xfe,0xdd,0x9c,0xa0,0x1c,0x16,0x07,0x15,0x18, - 0x6c,0x2b,0x9d,0x86,0x91,0x1c,0x29,0x3b,0x05,0xd2, - 0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34, - 0x5d,0xf8,0xa0,0x2c,0x11,0x84,0x0e,0x61,0x6b,0x95, - 0x04,0x4a,0xfd,0x6b,0x73,0x93,0x8a,0x75,0x01,0xda, - 0xc2,0xfd,0xf4,0xfd,0xc0,0x6a,0x83,0x86,0x00,0x01, - 0x00,0x87,0x00,0x00,0x01,0x1f,0x04,0x47,0x00,0x03, - 0x00,0x00,0x21,0x23,0x11,0x33,0x01,0x1f,0x98,0x98, - 0x04,0x47,0x00,0x02,0x00,0x66,0xff,0xf6,0x04,0xb9, - 0x05,0xc1,0x00,0x14,0x00,0x1e,0x00,0x00,0x29,0x01, - 0x22,0x06,0x07,0x22,0x02,0x10,0x12,0x33,0x32,0x17, - 0x21,0x15,0x21,0x11,0x21,0x15,0x21,0x11,0x21,0x01, - 0x22,0x02,0x10,0x12,0x33,0x32,0x37,0x11,0x26,0x04, - 0xb9,0xfe,0x45,0x1f,0x76,0x18,0xf3,0xf8,0xfe,0xf3, - 0x33,0x4f,0x01,0xe0,0xfe,0x5f,0x01,0x86,0xfe,0x7a, - 0x01,0xa1,0xfd,0xa0,0xae,0xa4,0xa4,0xb0,0x17,0x0b, - 0x0c,0x09,0x01,0x01,0x7a,0x02,0xd8,0x01,0x79,0x0b, - 0x8d,0xfe,0x19,0x8d,0xfd,0xd8,0x04,0xa2,0xfe,0xe5, - 0xfd,0x90,0xfe,0xe3,0x01,0x04,0xa6,0x01,0x00,0x00, - 0x00,0x03,0x00,0x57,0xff,0xec,0x05,0x34,0x04,0x5b, - 0x00,0x17,0x00,0x1d,0x00,0x26,0x00,0x00,0x05,0x22, - 0x27,0x06,0x23,0x22,0x02,0x10,0x12,0x20,0x17,0x36, - 0x33,0x32,0x12,0x1d,0x01,0x21,0x12,0x33,0x32,0x37, - 0x15,0x06,0x13,0x34,0x26,0x23,0x22,0x03,0x07,0x35, - 0x10,0x23,0x22,0x06,0x15,0x10,0x20,0x04,0x16,0xd4, - 0x61,0x5b,0xc5,0xaa,0xc0,0xb9,0x01,0x70,0x5d,0x59, - 0xbb,0x95,0xae,0xfd,0xf8,0x07,0xf9,0x6c,0x76,0x71, - 0x02,0x60,0x53,0xad,0x10,0x9d,0xcf,0x6d,0x63,0x01, - 0x9f,0x14,0xc9,0xc9,0x01,0x29,0x02,0x24,0x01,0x22, - 0xc6,0xc6,0xfe,0xfc,0xe0,0x6a,0xfe,0x61,0x46,0x84, - 0x44,0x02,0x9a,0x9e,0xb8,0xfe,0xaa,0x72,0x11,0x01, - 0xaf,0xd4,0xdb,0xfe,0x4b,0x00,0x00,0x00,0x00,0x02, - 0x00,0x50,0xff,0xec,0x02,0xe9,0x07,0x73,0x00,0x0d, - 0x00,0x2b,0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23, - 0x26,0x27,0x35,0x33,0x16,0x17,0x36,0x37,0x01,0x32, - 0x36,0x34,0x26,0x27,0x2e,0x01,0x10,0x36,0x20,0x17, - 0x06,0x07,0x26,0x22,0x06,0x14,0x16,0x17,0x1e,0x01, - 0x15,0x14,0x06,0x20,0x27,0x35,0x1e,0x01,0x02,0xc9, - 0x3c,0x72,0x18,0x9b,0x41,0x84,0x55,0x37,0x89,0x78, - 0x43,0xfe,0xfc,0x64,0x7b,0x6e,0x64,0x9f,0x81,0xc7, - 0x01,0x3c,0x7b,0x13,0x24,0x74,0xc5,0x75,0x56,0x8a, - 0x92,0x82,0xcb,0xfe,0xa8,0x76,0x3c,0x9c,0x07,0x73, - 0x16,0x4e,0xb2,0x32,0x82,0xb0,0x16,0x30,0x9a,0x92, - 0x38,0xf9,0x06,0x90,0xcf,0x8b,0x3d,0x59,0xb8,0x01, - 0x44,0xd6,0x48,0x2d,0x5a,0x3e,0x83,0xd0,0x7b,0x4d, - 0x4f,0xc2,0x89,0xbb,0xde,0x3a,0xa0,0x23,0x2a,0x00, - 0x00,0x00,0x00,0x02,0x00,0x46,0xff,0xec,0x02,0x73, - 0x06,0x21,0x00,0x0d,0x00,0x33,0x00,0x00,0x01,0x15, - 0x0e,0x01,0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x17, - 0x36,0x37,0x00,0x16,0x32,0x36,0x35,0x34,0x27,0x2e, - 0x03,0x27,0x26,0x35,0x34,0x37,0x36,0x20,0x17,0x07, - 0x26,0x22,0x06,0x15,0x14,0x1f,0x01,0x1e,0x02,0x17, - 0x16,0x15,0x14,0x06,0x20,0x27,0x35,0x02,0x73,0x3c, - 0x72,0x18,0x9b,0x41,0x84,0x55,0x37,0x89,0x78,0x43, - 0xfe,0x4b,0x8b,0x8f,0x58,0x18,0x07,0x2e,0x14,0x7e, - 0x3b,0x7a,0x55,0x57,0x01,0x0f,0x68,0x3e,0x5b,0xa0, - 0x55,0x3c,0x82,0x2b,0x33,0x3c,0x10,0x26,0x9f,0xfe, - 0xd6,0x5a,0x06,0x21,0x16,0x4e,0xb2,0x32,0x82,0xb0, - 0x16,0x30,0x9a,0x92,0x38,0xfa,0x81,0x2d,0x58,0x42, - 0x32,0x31,0x0f,0x2b,0x0f,0x5a,0x2f,0x61,0x9c,0x7d, - 0x4f,0x4f,0x44,0x76,0x38,0x54,0x44,0x58,0x2e,0x61, - 0x20,0x2a,0x40,0x1f,0x48,0x5b,0x91,0x92,0x3e,0x97, - 0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x09, - 0x07,0x24,0x00,0x07,0x00,0x0f,0x00,0x18,0x00,0x00, - 0x12,0x32,0x16,0x14,0x06,0x22,0x26,0x34,0x24,0x32, - 0x16,0x14,0x06,0x22,0x26,0x34,0x03,0x23,0x11,0x01, - 0x33,0x1b,0x01,0x33,0x01,0xb9,0x4c,0x2f,0x2f,0x4c, - 0x30,0x01,0x7f,0x4c,0x30,0x2f,0x4c,0x30,0x08,0x9b, - 0xfe,0xca,0xa4,0xe1,0xe0,0xa4,0xfe,0xc8,0x07,0x24, - 0x32,0x5d,0x34,0x33,0x5f,0x31,0x31,0x5f,0x33,0x34, - 0x5d,0xf9,0x0e,0x02,0x3c,0x03,0x7a,0xfd,0x48,0x02, - 0xb8,0xfc,0x8a,0x00,0x00,0x02,0x00,0x34,0x00,0x00, - 0x02,0xa7,0x07,0x73,0x00,0x0d,0x00,0x17,0x00,0x00, - 0x01,0x15,0x0e,0x01,0x07,0x23,0x26,0x27,0x35,0x33, - 0x16,0x17,0x36,0x37,0x13,0x15,0x21,0x35,0x01,0x21, - 0x35,0x21,0x15,0x01,0x02,0x7d,0x3c,0x72,0x18,0x9b, - 0x41,0x84,0x55,0x37,0x89,0x78,0x43,0x80,0xfd,0x8d, - 0x01,0xb7,0xfe,0x52,0x02,0x5d,0xfe,0x45,0x07,0x73, - 0x16,0x4e,0xb2,0x32,0x82,0xb0,0x16,0x30,0x9a,0x92, - 0x38,0xf9,0x1b,0x8e,0x7a,0x04,0xad,0x8f,0x7b,0xfb, - 0x53,0x00,0x00,0x02,0x00,0x26,0x00,0x00,0x02,0x4c, - 0x06,0x21,0x00,0x0d,0x00,0x17,0x00,0x00,0x01,0x15, - 0x0e,0x01,0x07,0x23,0x26,0x27,0x35,0x33,0x16,0x17, - 0x36,0x37,0x13,0x15,0x21,0x35,0x01,0x21,0x35,0x21, - 0x15,0x01,0x02,0x4c,0x3c,0x72,0x18,0x9b,0x41,0x84, - 0x55,0x37,0x89,0x78,0x43,0x39,0xfe,0x06,0x01,0x47, - 0xfe,0xce,0x01,0xd6,0xfe,0xbd,0x06,0x21,0x16,0x4e, - 0xb2,0x32,0x82,0xb0,0x16,0x30,0x9a,0x92,0x38,0xfa, - 0x5e,0x7f,0x6b,0x03,0x5c,0x80,0x72,0xfc,0xaa,0x00, - 0x00,0x01,0x00,0x45,0xfe,0x14,0x03,0x11,0x05,0xcb, - 0x00,0x20,0x00,0x00,0x01,0x34,0x36,0x33,0x32,0x17, - 0x07,0x26,0x23,0x22,0x06,0x07,0x15,0x33,0x15,0x23, - 0x02,0x11,0x14,0x06,0x23,0x22,0x27,0x35,0x16,0x33, - 0x32,0x36,0x35,0x11,0x23,0x35,0x37,0x01,0x4f,0x77, - 0x90,0x5e,0x5d,0x32,0x42,0x37,0x44,0x34,0x02,0xc7, - 0xc7,0x01,0x8a,0x8e,0x48,0x46,0x43,0x35,0x4e,0x44, - 0xa2,0xa2,0x04,0x38,0xd1,0xc2,0x29,0x7e,0x1f,0x6c, - 0x83,0x91,0x7f,0xfe,0xc3,0xfd,0x87,0xbf,0xbb,0x11, - 0x88,0x12,0x6f,0x78,0x03,0xc2,0x50,0x34,0x00,0x00, - 0x00,0x01,0x01,0x2a,0x04,0xd9,0x03,0x50,0x06,0x21, - 0x00,0x0e,0x00,0x00,0x01,0x23,0x26,0x2f,0x01,0x06, - 0x07,0x23,0x35,0x36,0x37,0x33,0x1e,0x01,0x17,0x03, - 0x50,0x56,0x2a,0x39,0x5a,0x86,0x38,0x55,0x8d,0x38, - 0x9b,0x15,0x70,0x41,0x04,0xd9,0x24,0x40,0x65,0x97, - 0x32,0x15,0xbd,0x76,0x31,0xaf,0x53,0x00,0x00,0x00, - 0x00,0x01,0x01,0x2a,0x04,0xd9,0x03,0x50,0x06,0x21, - 0x00,0x0d,0x00,0x00,0x01,0x15,0x0e,0x01,0x07,0x23, - 0x26,0x27,0x35,0x33,0x16,0x17,0x36,0x37,0x03,0x50, - 0x3c,0x72,0x18,0x9b,0x41,0x84,0x55,0x37,0x89,0x78, - 0x43,0x06,0x21,0x16,0x4e,0xb2,0x32,0x82,0xb0,0x16, - 0x30,0x9a,0x92,0x38,0x00,0x00,0x00,0x01,0x01,0x44, - 0x04,0xdb,0x03,0x34,0x05,0xe4,0x00,0x0b,0x00,0x00, - 0x01,0x22,0x03,0x33,0x1e,0x01,0x32,0x36,0x37,0x33, - 0x0e,0x01,0x02,0x37,0xe5,0x0e,0x62,0x07,0x47,0x8a, - 0x46,0x0b,0x65,0x06,0x84,0x04,0xdb,0x01,0x09,0x4b, - 0x43,0x43,0x4b,0x7e,0x8b,0x00,0x00,0x00,0x00,0x01, - 0x00,0x83,0x05,0x02,0x01,0x3c,0x05,0xdf,0x00,0x07, - 0x00,0x00,0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26, - 0x83,0x32,0x59,0x2e,0x30,0x56,0x33,0x05,0xa6,0x39, - 0x39,0x6a,0x3a,0x3a,0x00,0x02,0x01,0x6d,0x04,0xdf, - 0x03,0x1b,0x06,0x73,0x00,0x07,0x00,0x0f,0x00,0x00, - 0x00,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x24,0x26, - 0x22,0x06,0x14,0x16,0x32,0x36,0x01,0x6d,0x76,0xbe, - 0x7a,0x76,0xc3,0x75,0x01,0x48,0x3d,0x67,0x40,0x3b, - 0x6a,0x3f,0x06,0x05,0x6e,0x6f,0xb6,0x6f,0x6c,0x90, - 0x3d,0x3e,0x65,0x3c,0x3d,0x00,0x00,0x00,0x00,0x01, - 0x00,0x25,0xfe,0x37,0x01,0x53,0x00,0x00,0x00,0x13, - 0x00,0x00,0x01,0x06,0x22,0x27,0x26,0x35,0x37,0x36, - 0x35,0x34,0x27,0x36,0x37,0x33,0x06,0x07,0x16,0x1f, - 0x01,0x14,0x01,0x42,0x2f,0xa3,0x36,0x15,0x2f,0x34, - 0x26,0x27,0x2a,0x6a,0x5e,0x06,0x23,0x4e,0x29,0xfe, - 0x56,0x1f,0x2a,0x36,0x4c,0x2c,0x26,0x2c,0x20,0x12, - 0x41,0x2c,0x64,0x63,0x50,0x23,0x0d,0x35,0x00,0x00, - 0x00,0x01,0x01,0x10,0x04,0xd8,0x03,0x6d,0x05,0xcb, - 0x00,0x14,0x00,0x00,0x01,0x22,0x26,0x27,0x26,0x23, - 0x22,0x07,0x23,0x3e,0x01,0x33,0x32,0x1e,0x01,0x32, - 0x36,0x37,0x33,0x0e,0x01,0x02,0xb9,0x22,0x4c,0x1b, - 0x49,0x25,0x3f,0x13,0x60,0x0c,0x5d,0x4e,0x2b,0x5e, - 0x52,0x3e,0x22,0x0b,0x60,0x0a,0x5e,0x04,0xda,0x26, - 0x16,0x3d,0x7b,0x75,0x7c,0x3c,0x3c,0x3c,0x3e,0x75, - 0x7c,0x00,0x00,0x02,0x00,0xf4,0x04,0xd9,0x03,0x7e, - 0x06,0x21,0x00,0x09,0x00,0x13,0x00,0x00,0x01,0x15, - 0x0e,0x01,0x07,0x23,0x35,0x3e,0x01,0x37,0x21,0x15, - 0x0e,0x01,0x07,0x23,0x35,0x3e,0x01,0x37,0x02,0x4b, - 0x24,0x9d,0x45,0x51,0x2c,0x67,0x18,0x01,0xdf,0x20, - 0x9a,0x4c,0x51,0x2c,0x67,0x18,0x06,0x21,0x12,0x42, - 0xb8,0x3c,0x17,0x3b,0xbe,0x38,0x12,0x3e,0xb4,0x44, - 0x17,0x3b,0xbe,0x38,0x00,0x02,0xff,0xba,0xfd,0xd4, - 0x00,0x49,0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x00, - 0x15,0x32,0x14,0x23,0x22,0x34,0x13,0x32,0x14,0x23, - 0x22,0x34,0x49,0x49,0x46,0x46,0x49,0x49,0x46,0x50, - 0xad,0xad,0xfe,0xd1,0xad,0xad,0x00,0x00,0x00,0x05, - 0xfe,0x70,0xfd,0xd4,0x01,0x6e,0xff,0xb0,0x00,0x05, - 0x00,0x0b,0x00,0x11,0x00,0x17,0x00,0x1d,0x00,0x00, - 0x05,0x32,0x14,0x23,0x22,0x34,0x21,0x32,0x14,0x23, - 0x22,0x34,0x21,0x32,0x14,0x23,0x22,0x34,0x01,0x32, - 0x14,0x23,0x22,0x34,0x21,0x32,0x14,0x23,0x22,0x34, - 0xfe,0xb6,0x49,0x49,0x46,0x01,0x90,0x49,0x49,0x46, - 0x01,0x6b,0x49,0x49,0x46,0xfe,0x7b,0x49,0x49,0x46, - 0x02,0x11,0x49,0x49,0x46,0x50,0xad,0xad,0xad,0xad, - 0xad,0xad,0xfe,0xd1,0xad,0xad,0xad,0xad,0x00,0x00, - 0x00,0x03,0xfe,0xb6,0xfd,0xd4,0x01,0x49,0xff,0xb0, - 0x00,0x05,0x00,0x09,0x00,0x0f,0x00,0x00,0x05,0x32, - 0x14,0x23,0x22,0x34,0x07,0x21,0x35,0x21,0x13,0x32, - 0x14,0x23,0x22,0x34,0x01,0x00,0x49,0x49,0x46,0x6a, - 0xfe,0x66,0x01,0x9a,0xb0,0x49,0x49,0x46,0x50,0xad, - 0xad,0x7f,0x52,0xfe,0xfe,0xad,0xad,0x00,0x00,0x00, - 0x00,0x03,0xfe,0xbb,0xfd,0xd4,0x01,0x4e,0xff,0xb0, - 0x00,0x05,0x00,0x0d,0x00,0x13,0x00,0x00,0x05,0x32, - 0x14,0x23,0x22,0x34,0x07,0x23,0x15,0x23,0x35,0x23, - 0x35,0x21,0x13,0x32,0x14,0x23,0x22,0x34,0x01,0x05, - 0x49,0x49,0x46,0x6a,0xa4,0x52,0xa4,0x01,0x9a,0xb0, - 0x49,0x49,0x46,0x50,0xad,0xad,0x7f,0xe8,0xe8,0x52, - 0xfe,0xfe,0xad,0xad,0x00,0x01,0xff,0xb9,0xff,0x03, - 0x00,0x48,0xff,0xb0,0x00,0x05,0x00,0x00,0x07,0x32, - 0x14,0x23,0x22,0x34,0x01,0x49,0x49,0x46,0x50,0xad, - 0xad,0x00,0x00,0x02,0xff,0x14,0xff,0x03,0x00,0xed, - 0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x00,0x07,0x32, - 0x14,0x23,0x22,0x34,0x21,0x32,0x14,0x23,0x22,0x34, - 0xa6,0x49,0x49,0x46,0x01,0x90,0x49,0x49,0x46,0x50, - 0xad,0xad,0xad,0xad,0x00,0x00,0x00,0x03,0xff,0x16, - 0xfd,0xd4,0x00,0xef,0xff,0xb0,0x00,0x05,0x00,0x0b, - 0x00,0x11,0x00,0x00,0x07,0x32,0x14,0x23,0x22,0x34, - 0x21,0x32,0x14,0x23,0x22,0x34,0x03,0x32,0x14,0x23, - 0x22,0x34,0xa4,0x49,0x49,0x46,0x01,0x90,0x49,0x49, - 0x46,0x60,0x49,0x49,0x46,0x50,0xad,0xad,0xad,0xad, - 0xfe,0xd1,0xad,0xad,0x00,0x00,0x00,0x01,0xff,0x34, - 0xff,0x3a,0x00,0xce,0xff,0x8c,0x00,0x03,0x00,0x00, - 0x17,0x21,0x35,0x21,0xce,0xfe,0x66,0x01,0x9a,0xc6, - 0x52,0x00,0x00,0x00,0x00,0x01,0xff,0x2f,0xfe,0x52, - 0x00,0xc9,0xff,0x8c,0x00,0x07,0x00,0x00,0x17,0x23, - 0x15,0x23,0x35,0x23,0x35,0x21,0xc9,0xa4,0x52,0xa4, - 0x01,0x9a,0xc6,0xe8,0xe8,0x52,0x00,0x01,0xff,0xb9, - 0x05,0x82,0x00,0x48,0x06,0x2f,0x00,0x05,0x00,0x00, - 0x03,0x32,0x14,0x23,0x22,0x34,0x01,0x49,0x49,0x46, - 0x06,0x2f,0xad,0xad,0x00,0x01,0xff,0xb9,0x05,0x82, - 0x00,0x48,0x06,0x2f,0x00,0x05,0x00,0x00,0x03,0x32, - 0x14,0x23,0x22,0x34,0x01,0x49,0x49,0x46,0x06,0x2f, - 0xad,0xad,0x00,0x03,0xff,0x6d,0xfd,0xd4,0x01,0x46, - 0xff,0xb0,0x00,0x05,0x00,0x0b,0x00,0x11,0x00,0x00, - 0x07,0x32,0x14,0x23,0x22,0x34,0x17,0x32,0x14,0x23, - 0x22,0x34,0x17,0x32,0x14,0x23,0x22,0x34,0x4d,0x49, - 0x49,0x46,0xea,0x49,0x49,0x46,0xec,0x49,0x49,0x46, - 0x50,0xad,0xad,0x97,0xad,0xad,0x98,0xad,0xad,0x00, - 0x00,0x00,0x00,0x01,0xff,0xba,0x02,0x73,0x00,0x49, - 0x03,0x20,0x00,0x05,0x00,0x00,0x11,0x32,0x14,0x23, - 0x22,0x34,0x49,0x49,0x46,0x03,0x20,0xad,0xad,0x00, - 0x00,0x01,0xff,0xcd,0xfe,0x03,0x00,0x34,0xff,0x63, - 0x00,0x03,0x00,0x00,0x13,0x23,0x11,0x33,0x34,0x67, - 0x67,0xfe,0x03,0x01,0x60,0x00,0x00,0x00,0x00,0x01, - 0x00,0x3b,0x04,0x78,0x01,0xf4,0x05,0x09,0x00,0x03, - 0x00,0x00,0x01,0x21,0x35,0x21,0x01,0xf4,0xfe,0x47, - 0x01,0xb9,0x04,0x78,0x91,0x00,0x00,0x01,0xff,0xba, - 0x05,0x82,0x00,0x49,0x06,0x2f,0x00,0x05,0x00,0x00, - 0x11,0x32,0x14,0x23,0x22,0x34,0x49,0x49,0x46,0x06, - 0x2f,0xad,0xad,0x00,0x00,0x01,0xff,0xba,0x05,0x6e, - 0x00,0x49,0x06,0x1b,0x00,0x05,0x00,0x00,0x11,0x32, - 0x14,0x23,0x22,0x34,0x49,0x49,0x46,0x06,0x1b,0xad, - 0xad,0x00,0x00,0x01,0xff,0x34,0xfe,0x50,0x00,0xce, - 0xff,0x9e,0x00,0x07,0x00,0x00,0x17,0x23,0x15,0x23, - 0x35,0x23,0x35,0x21,0xce,0xa1,0x5d,0x9c,0x01,0x9a, - 0xc6,0xea,0xea,0x64,0x00,0x01,0x00,0x44,0x00,0x00, - 0x03,0x13,0x05,0x0a,0x00,0x1d,0x00,0x00,0x01,0x11, - 0x14,0x06,0x07,0x06,0x07,0x16,0x12,0x17,0x23,0x01, - 0x0e,0x01,0x15,0x11,0x23,0x11,0x34,0x37,0x36,0x37, - 0x03,0x33,0x13,0x17,0x3e,0x01,0x35,0x11,0x03,0x0f, - 0x0c,0x12,0x26,0x79,0x23,0x84,0x1a,0xab,0xfe,0xd8, - 0x37,0x28,0x95,0x58,0x28,0x3c,0xc4,0xaa,0xc3,0x69, - 0x38,0x28,0x05,0x0a,0xfe,0x2d,0x3c,0x5e,0x37,0x73, - 0x34,0x53,0xfe,0xd1,0x3d,0x02,0xce,0x28,0x8f,0x76, - 0xfe,0x5f,0x01,0xc7,0xd6,0x65,0x2d,0x1c,0x01,0xbf, - 0xfe,0x19,0xe7,0x24,0x85,0x78,0x01,0xad,0x00,0x01, - 0x00,0x5d,0x00,0x00,0x03,0x0a,0x05,0x1e,0x00,0x15, - 0x00,0x00,0x13,0x36,0x32,0x1e,0x03,0x15,0x11,0x33, - 0x15,0x21,0x35,0x21,0x11,0x34,0x27,0x26,0x23,0x22, - 0x0f,0x01,0x5d,0x6b,0xcf,0x80,0x4f,0x2e,0x10,0x66, - 0xfd,0x54,0x01,0xae,0x5c,0x2d,0x43,0x7d,0x4b,0x1b, - 0x05,0x12,0x0c,0x24,0x3e,0x66,0x71,0x4f,0xfc,0xe9, - 0x7f,0x7f,0x03,0x17,0xca,0x28,0x14,0x0a,0x03,0x00, - 0x00,0x01,0x00,0x59,0xff,0xf7,0x02,0x3a,0x05,0x1e, - 0x00,0x22,0x00,0x00,0x21,0x27,0x23,0x07,0x0e,0x03, - 0x07,0x06,0x23,0x22,0x27,0x37,0x14,0x16,0x33,0x32, - 0x36,0x35,0x11,0x34,0x26,0x23,0x22,0x07,0x35,0x36, - 0x32,0x1e,0x03,0x15,0x11,0x01,0xc5,0x15,0x0a,0x0a, - 0x02,0x19,0x15,0x2b,0x17,0x3f,0x47,0x25,0x26,0x13, - 0x31,0x0f,0x84,0x73,0x38,0x54,0x26,0x47,0x43,0x82, - 0x66,0x3a,0x21,0x0a,0xcc,0x1e,0x06,0x3a,0x1c,0x2f, - 0x0c,0x20,0x0a,0x91,0x03,0x08,0xbd,0xbf,0x01,0xbb, - 0x72,0x6a,0x13,0x85,0x12,0x27,0x3d,0x61,0x5c,0x3f, - 0xfc,0x42,0x00,0x00,0x00,0x01,0x00,0x14,0x00,0x00, - 0x02,0xc2,0x05,0x0a,0x00,0x0e,0x00,0x00,0x01,0x15, - 0x06,0x15,0x11,0x23,0x11,0x34,0x36,0x37,0x36,0x3f, - 0x01,0x21,0x35,0x02,0xc2,0xc2,0x97,0x1d,0x14,0x2a, - 0x22,0x0e,0xfe,0x20,0x05,0x0a,0x74,0x46,0xd4,0xfc, - 0x84,0x03,0x7e,0x3a,0x61,0x1d,0x3b,0x11,0x08,0x80, - 0x00,0x02,0x00,0x86,0x00,0x00,0x03,0x3c,0x05,0x1e, - 0x00,0x0e,0x00,0x12,0x00,0x00,0x01,0x32,0x16,0x15, - 0x11,0x23,0x11,0x34,0x2e,0x02,0x22,0x07,0x35,0x36, - 0x03,0x23,0x11,0x33,0x01,0xbb,0xd5,0xac,0x99,0x19, - 0x3e,0x57,0xb2,0xbd,0xa3,0x0b,0x98,0x98,0x05,0x1e, - 0xa9,0xdd,0xfc,0x68,0x03,0x98,0x52,0x66,0x38,0x14, - 0x1b,0x81,0x1c,0xfa,0xe2,0x03,0x30,0x00,0x00,0x01, - 0x00,0x86,0x00,0x00,0x01,0x1d,0x05,0x0a,0x00,0x03, - 0x00,0x00,0x21,0x23,0x11,0x33,0x01,0x1d,0x97,0x97, - 0x05,0x0a,0x00,0x01,0x00,0x81,0x00,0x00,0x01,0xc2, - 0x05,0x0a,0x00,0x0e,0x00,0x00,0x01,0x15,0x0e,0x01, - 0x07,0x06,0x15,0x11,0x23,0x11,0x34,0x12,0x37,0x23, - 0x35,0x01,0xc2,0x32,0x47,0x07,0x03,0x97,0x50,0x43, - 0xba,0x05,0x0a,0x78,0x37,0xd1,0xbe,0x40,0x14,0xfd, - 0x88,0x02,0x2b,0xd1,0x01,0x35,0x59,0x80,0x00,0x01, - 0x00,0x86,0x00,0x00,0x03,0x3c,0x05,0x1e,0x00,0x13, - 0x00,0x00,0x33,0x11,0x32,0x36,0x37,0x36,0x33,0x32, - 0x16,0x15,0x11,0x23,0x11,0x34,0x2e,0x02,0x22,0x07, - 0x11,0x86,0x04,0x5b,0x20,0x69,0x4d,0xd5,0xac,0x99, - 0x19,0x3e,0x57,0x7f,0x58,0x05,0x02,0x0d,0x03,0x0c, - 0xa9,0xdd,0xfc,0x68,0x03,0x98,0x52,0x66,0x38,0x14, - 0x0b,0xfb,0x6f,0x00,0x00,0x00,0x00,0x01,0x00,0x5f, - 0xff,0xec,0x03,0x4f,0x05,0x1e,0x00,0x20,0x00,0x00, - 0x01,0x32,0x17,0x16,0x11,0x10,0x07,0x06,0x23,0x22, - 0x27,0x26,0x19,0x01,0x33,0x11,0x10,0x17,0x1e,0x01, - 0x32,0x36,0x37,0x36,0x11,0x10,0x27,0x2e,0x01,0x22, - 0x07,0x35,0x36,0x01,0xe2,0x7c,0x53,0x9e,0x9f,0x5b, - 0x7d,0x7e,0x5b,0xa0,0x9c,0x41,0x20,0x4c,0x60,0x4b, - 0x1f,0x41,0x41,0x1f,0x4c,0x55,0x2f,0x34,0x05,0x1e, - 0x54,0xa1,0xfe,0x5c,0xfe,0x61,0x9f,0x5b,0x5b,0xa0, - 0x01,0x9e,0x02,0x84,0xfd,0x7c,0xfe,0xcc,0x77,0x3a, - 0x32,0x32,0x3a,0x78,0x01,0x33,0x01,0x31,0x7a,0x3a, - 0x32,0x0a,0x81,0x0b,0x00,0x01,0x00,0x83,0x01,0xd2, - 0x01,0x1a,0x05,0x0a,0x00,0x05,0x00,0x00,0x01,0x06, - 0x07,0x23,0x11,0x33,0x01,0x1a,0x6d,0x03,0x27,0x97, - 0x02,0x71,0x9b,0x04,0x03,0x38,0x00,0x01,0x00,0x2d, - 0xfe,0x14,0x02,0x56,0x05,0x1e,0x00,0x0e,0x00,0x00, - 0x13,0x36,0x32,0x1e,0x01,0x17,0x16,0x15,0x11,0x23, - 0x11,0x10,0x23,0x22,0x07,0x2d,0x66,0xac,0x7f,0x51, - 0x19,0x2e,0x99,0xd9,0x5b,0x5c,0x04,0xfc,0x22,0x3d, - 0x67,0x4c,0x88,0xd0,0xfb,0x3e,0x04,0xc2,0x01,0xc0, - 0x28,0x00,0x00,0x01,0x00,0x2d,0xff,0xec,0x02,0x56, - 0x05,0x1e,0x00,0x1e,0x00,0x00,0x13,0x36,0x32,0x1e, - 0x01,0x17,0x16,0x1d,0x01,0x14,0x0e,0x03,0x22,0x27, - 0x35,0x1e,0x01,0x32,0x3e,0x02,0x37,0x36,0x3d,0x01, - 0x10,0x23,0x22,0x07,0x2d,0x66,0xac,0x7f,0x51,0x19, - 0x2e,0x10,0x31,0x4d,0x85,0xbe,0x54,0x4d,0x4b,0x4b, - 0x4b,0x2d,0x1e,0x06,0x0b,0xd7,0x51,0x66,0x04,0xfc, - 0x22,0x3d,0x67,0x4c,0x88,0xd0,0xc6,0x52,0x8e,0x96, - 0x6a,0x44,0x1c,0x89,0x1a,0x07,0x2c,0x4d,0x53,0x34, - 0x55,0x4b,0xc6,0x01,0xc0,0x27,0x00,0x00,0x00,0x01, - 0x00,0x2c,0x00,0x00,0x02,0x81,0x06,0x1c,0x00,0x0f, - 0x00,0x00,0x13,0x21,0x15,0x06,0x02,0x07,0x06,0x03, - 0x23,0x36,0x12,0x37,0x13,0x21,0x11,0x33,0xc3,0x01, - 0xbe,0x1d,0x6c,0x18,0x19,0x46,0x96,0x09,0x4a,0x0a, - 0xa6,0xfe,0x3e,0x97,0x05,0x0e,0x86,0x75,0xfe,0x46, - 0x62,0x88,0xfe,0x91,0x34,0x01,0x82,0x3a,0x02,0x99, - 0x01,0x93,0x00,0x02,0x00,0x86,0x00,0x00,0x03,0x3c, - 0x05,0x1e,0x00,0x08,0x00,0x11,0x00,0x00,0x33,0x11, - 0x36,0x20,0x1e,0x02,0x15,0x11,0x27,0x11,0x34,0x2e, - 0x02,0x22,0x07,0x11,0x86,0xa1,0x01,0x0b,0x90,0x5a, - 0x20,0x98,0x13,0x3c,0x57,0x90,0x50,0x05,0x07,0x17, - 0x22,0x5b,0x8d,0x73,0xfc,0x5f,0x7f,0x03,0x22,0x55, - 0x5f,0x38,0x10,0x0a,0xfb,0xec,0x00,0x01,0x00,0x35, - 0x00,0x00,0x03,0x24,0x05,0x1e,0x00,0x2b,0x00,0x00, - 0x00,0x32,0x1e,0x03,0x17,0x16,0x15,0x11,0x21,0x35, - 0x33,0x11,0x34,0x27,0x26,0x27,0x26,0x22,0x06,0x07, - 0x06,0x0f,0x01,0x03,0x23,0x13,0x3e,0x01,0x2e,0x04, - 0x35,0x33,0x1e,0x01,0x17,0x33,0x3e,0x02,0x01,0xee, - 0x66,0x52,0x35,0x27,0x14,0x06,0x08,0xfe,0x85,0xe4, - 0x13,0x18,0x27,0x18,0x4f,0x50,0x18,0x30,0x11,0x07, - 0x57,0x98,0x4d,0x0a,0x01,0x08,0x0b,0x12,0x0a,0x12, - 0x97,0x06,0x22,0x06,0x09,0x09,0x37,0x37,0x05,0x1e, - 0x21,0x32,0x51,0x4b,0x35,0x52,0x65,0xfc,0xbd,0x7f, - 0x02,0xc4,0xb0,0x3b,0x4a,0x15,0x0d,0x2c,0x20,0x40, - 0x35,0x16,0xfc,0x3d,0x03,0x55,0x73,0x4d,0x3b,0x2f, - 0x3c,0x1f,0x2f,0x01,0x0f,0x6c,0x1b,0x16,0x42,0x2d, - 0x00,0x00,0x00,0x01,0x00,0x58,0xfe,0x14,0x01,0x24, - 0x05,0x0a,0x00,0x0a,0x00,0x00,0x01,0x11,0x23,0x11, - 0x34,0x26,0x2f,0x01,0x33,0x1e,0x01,0x01,0x24,0x98, - 0x1a,0x0d,0x0d,0x99,0x14,0x1f,0x03,0x6e,0xfa,0xa6, - 0x05,0x5a,0x62,0xce,0x36,0x36,0x45,0xf3,0x00,0x00, - 0x00,0x01,0x00,0x28,0x00,0x00,0x01,0xe9,0x05,0x1e, - 0x00,0x1a,0x00,0x00,0x13,0x36,0x32,0x1e,0x03,0x17, - 0x16,0x15,0x11,0x14,0x06,0x0f,0x01,0x21,0x35,0x21, - 0x36,0x35,0x11,0x34,0x27,0x26,0x23,0x22,0x07,0x5b, - 0x4a,0x68,0x54,0x39,0x28,0x17,0x07,0x09,0x15,0x0a, - 0x0b,0xfe,0x69,0x01,0x12,0x18,0x18,0x1d,0x57,0x24, - 0x47,0x05,0x0d,0x11,0x15,0x22,0x3b,0x3a,0x2c,0x40, - 0x6d,0xfd,0xbb,0x4c,0xaa,0x2f,0x2f,0x7f,0x53,0x82, - 0x02,0x88,0x53,0x31,0x3a,0x11,0x00,0x00,0x00,0x02, - 0x00,0x57,0xff,0xec,0x03,0x46,0x05,0x1e,0x00,0x15, - 0x00,0x26,0x00,0x00,0x01,0x32,0x17,0x16,0x17,0x16, - 0x10,0x0e,0x01,0x07,0x06,0x23,0x22,0x27,0x26,0x02, - 0x35,0x10,0x37,0x07,0x35,0x36,0x0e,0x01,0x10,0x1e, - 0x02,0x32,0x36,0x37,0x36,0x11,0x10,0x27,0x2e,0x01, - 0x23,0x07,0x01,0xce,0x7e,0x5b,0x64,0x27,0x14,0x29, - 0x45,0x31,0x5b,0x7e,0x9d,0x67,0x36,0x3d,0x92,0x80, - 0xc9,0x06,0x39,0x21,0x3f,0x4b,0x60,0x4b,0x1f,0x42, - 0x5a,0x1d,0x3f,0x26,0x56,0x05,0x1e,0x5b,0x64,0xd6, - 0x73,0xfe,0xde,0xe6,0x96,0x31,0x5b,0x90,0x4b,0x01, - 0x0a,0xb4,0x01,0x4d,0xbf,0x07,0x81,0x13,0xdb,0xfa, - 0xfe,0xa2,0xd7,0x74,0x31,0x31,0x3a,0x79,0x01,0x32, - 0x01,0x5e,0x75,0x25,0x1d,0x05,0x00,0x01,0x00,0x41, - 0xff,0xcc,0x03,0x54,0x05,0x0a,0x00,0x16,0x00,0x00, - 0x01,0x13,0x36,0x12,0x37,0x36,0x12,0x37,0x33,0x03, - 0x06,0x07,0x06,0x07,0x06,0x07,0x06,0x07,0x35,0x36, - 0x37,0x03,0x33,0x01,0x59,0x5d,0x5d,0x5d,0x15,0x0a, - 0x24,0x09,0x98,0x37,0x16,0x1a,0x3e,0xa9,0x51,0x6b, - 0x45,0xc4,0xc5,0x3c,0xff,0x98,0x02,0xc2,0xfd,0xe9, - 0x3d,0x01,0x06,0xd4,0x61,0x01,0x85,0x61,0xfd,0xc7, - 0xe2,0x65,0xef,0x60,0x2d,0x12,0x0c,0x23,0x80,0x20, - 0x0e,0x04,0x90,0x00,0x00,0x01,0x00,0x50,0xfe,0x14, - 0x03,0x2f,0x05,0x1e,0x00,0x1d,0x00,0x00,0x01,0x22, - 0x26,0x10,0x36,0x33,0x32,0x17,0x16,0x17,0x16,0x15, - 0x11,0x23,0x11,0x10,0x27,0x2e,0x01,0x22,0x06,0x07, - 0x06,0x15,0x10,0x17,0x32,0x17,0x07,0x22,0x01,0x9c, - 0x99,0xb3,0xca,0x9d,0x7e,0x5b,0x64,0x26,0x15,0x98, - 0x43,0x20,0x4c,0x69,0x56,0x17,0x2d,0xc0,0x06,0x10, - 0x1c,0x01,0x01,0xb4,0xd3,0x01,0x9f,0xf8,0x5b,0x64, - 0xd6,0x73,0x91,0xfb,0x8f,0x04,0x71,0x01,0x32,0x79, - 0x39,0x31,0x43,0x33,0x65,0x63,0xfe,0xdc,0x0b,0x02, - 0x77,0x00,0x00,0x00,0x00,0x01,0x00,0x51,0xff,0xec, - 0x03,0x2f,0x05,0x1e,0x00,0x26,0x00,0x00,0x12,0x26, - 0x10,0x36,0x33,0x32,0x17,0x16,0x17,0x16,0x10,0x0e, - 0x01,0x07,0x06,0x23,0x22,0x2f,0x01,0x35,0x16,0x33, - 0x32,0x11,0x10,0x27,0x2e,0x01,0x22,0x06,0x07,0x06, - 0x15,0x14,0x16,0x1f,0x01,0x07,0x27,0xf9,0xa8,0xca, - 0x9d,0x7e,0x5a,0x65,0x25,0x15,0x2b,0x49,0x33,0x5d, - 0x7f,0x76,0x64,0x20,0x85,0x75,0xe7,0x41,0x1f,0x4a, - 0x69,0x57,0x17,0x2d,0x59,0x67,0x16,0x1b,0x15,0x01, - 0xbb,0xd5,0x01,0x97,0xf7,0x5b,0x65,0xd5,0x73,0xfe, - 0xde,0xe6,0x95,0x31,0x5c,0x12,0x05,0x85,0x18,0x02, - 0x15,0x01,0x35,0x76,0x39,0x31,0x44,0x34,0x67,0x62, - 0x8f,0x98,0x04,0x02,0x78,0x02,0x00,0x00,0x00,0x01, - 0x00,0x03,0xfe,0x14,0x02,0x98,0x05,0x0a,0x00,0x10, - 0x00,0x00,0x01,0x11,0x14,0x07,0x0e,0x01,0x07,0x11, - 0x23,0x11,0x03,0x33,0x13,0x3e,0x01,0x35,0x11,0x02, - 0x98,0x3c,0x20,0x7e,0x59,0x9c,0xc6,0xa6,0xbd,0x4e, - 0x4d,0x05,0x0a,0xfe,0x39,0x86,0x6d,0x3a,0x50,0x0d, - 0xfc,0x5b,0x04,0x1a,0x02,0xdc,0xfd,0x29,0x1b,0x82, - 0x73,0x01,0xc7,0x00,0x00,0x00,0x00,0x01,0x00,0x3a, - 0x00,0x00,0x03,0x05,0x05,0x0a,0x00,0x11,0x00,0x00, - 0x29,0x01,0x35,0x21,0x17,0x03,0x01,0x33,0x01,0x36, - 0x1b,0x01,0x33,0x07,0x06,0x02,0x07,0x13,0x02,0xeb, - 0xfd,0x52,0x01,0x54,0xaf,0xb6,0xfe,0xb0,0x9f,0x01, - 0x10,0x4b,0x1c,0x1d,0x98,0x15,0x16,0x4f,0x60,0xc0, - 0x7f,0x04,0x01,0x65,0x03,0x2a,0xfd,0x53,0x52,0x01, - 0x2e,0x01,0x2c,0xd8,0xe8,0xfe,0xf6,0x5e,0xfe,0x6f, - 0x00,0x00,0x00,0x02,0x00,0x8d,0xfe,0x14,0x03,0x59, - 0x05,0x0a,0x00,0x1b,0x00,0x1f,0x00,0x00,0x25,0x15, - 0x23,0x35,0x34,0x3e,0x04,0x37,0x36,0x12,0x37,0x21, - 0x35,0x21,0x15,0x03,0x0e,0x06,0x07,0x06,0x01,0x23, - 0x11,0x33,0x02,0x38,0x95,0x0e,0x09,0x11,0x0c,0x17, - 0x06,0x1b,0x79,0x33,0xfd,0xd2,0x02,0xcc,0xa7,0x03, - 0x1c,0x0a,0x1a,0x0b,0x13,0x0a,0x05,0x0a,0xfe,0xed, - 0x97,0x97,0x16,0x16,0x16,0x2a,0x4e,0x31,0x49,0x31, - 0x57,0x18,0x5e,0x01,0xcc,0xb8,0x80,0x70,0xfd,0x9d, - 0x0b,0x68,0x24,0x60,0x2d,0x52,0x30,0x1f,0x34,0xfd, - 0xd6,0x04,0xe7,0x00,0x00,0x00,0x00,0x01,0x00,0x1d, - 0x00,0x00,0x02,0x4f,0x05,0x1e,0x00,0x0e,0x00,0x00, - 0x13,0x32,0x16,0x15,0x11,0x23,0x11,0x34,0x2e,0x02, - 0x22,0x07,0x35,0x36,0xe4,0xd3,0x98,0x98,0x12,0x35, - 0x52,0x89,0x78,0x74,0x05,0x1e,0xa5,0xe1,0xfc,0x68, - 0x03,0x98,0x53,0x60,0x3d,0x14,0x0c,0x82,0x0c,0x00, - 0x00,0x00,0x00,0x01,0x00,0x40,0x00,0x00,0x04,0x2a, - 0x05,0x0a,0x00,0x1c,0x00,0x00,0x21,0x23,0x03,0x33, - 0x13,0x3e,0x01,0x37,0x13,0x33,0x03,0x06,0x07,0x06, - 0x07,0x13,0x33,0x32,0x36,0x12,0x37,0x13,0x33,0x03, - 0x02,0x07,0x0e,0x02,0x01,0x69,0xbe,0x6b,0x92,0x3b, - 0x66,0x61,0x0f,0x1d,0x8f,0x1d,0x10,0x2c,0x4b,0xd3, - 0x1b,0x36,0x90,0xde,0x7f,0x10,0x34,0x90,0x34,0x1e, - 0xa8,0x33,0x7e,0xaf,0x05,0x0a,0xfd,0x3a,0x25,0xab, - 0xac,0x01,0x4a,0xfe,0xb7,0xaf,0x66,0xb2,0x33,0xfe, - 0xba,0x9b,0x01,0x0b,0xb0,0x02,0x33,0xfd,0xcd,0xfe, - 0xae,0xc3,0x3c,0x53,0x33,0x00,0x00,0x01,0x00,0x15, - 0xff,0xfa,0x03,0x30,0x05,0x1e,0x00,0x21,0x00,0x00, - 0x13,0x32,0x36,0x37,0x36,0x32,0x1e,0x03,0x15,0x11, - 0x23,0x11,0x34,0x27,0x26,0x22,0x07,0x11,0x14,0x06, - 0x23,0x22,0x27,0x35,0x16,0x33,0x32,0x36,0x35,0x11, - 0x06,0x07,0x47,0x03,0x55,0x29,0x73,0xe2,0x88,0x4f, - 0x2e,0x0e,0x97,0x62,0x2f,0x82,0x51,0x4f,0x74,0x25, - 0x38,0x30,0x05,0x2d,0x26,0x19,0x3d,0x04,0xff,0x0c, - 0x05,0x0e,0x2c,0x45,0x6b,0x68,0x44,0xfc,0x6a,0x03, - 0x96,0xca,0x28,0x14,0x05,0xfc,0xca,0xcb,0x9c,0x0d, - 0x84,0x09,0x3f,0x3f,0x03,0x89,0x03,0x08,0x00,0x00, - 0x00,0x01,0x00,0x23,0x03,0x29,0x01,0x3a,0x05,0x0a, - 0x00,0x09,0x00,0x00,0x01,0x17,0x06,0x07,0x06,0x07, - 0x23,0x3e,0x01,0x37,0x01,0x2d,0x0d,0x08,0x1e,0x2c, - 0x58,0x6d,0x18,0x27,0x26,0x05,0x0a,0x15,0x1f,0x5c, - 0x85,0xcc,0x53,0xb4,0xda,0x00,0x00,0x00,0x00,0x02, - 0x00,0x23,0x03,0x29,0x02,0x87,0x05,0x0a,0x00,0x09, - 0x00,0x12,0x00,0x00,0x01,0x17,0x06,0x07,0x06,0x07, - 0x23,0x3e,0x01,0x37,0x05,0x06,0x03,0x23,0x36,0x37, - 0x36,0x37,0x33,0x01,0x2d,0x0d,0x08,0x1e,0x2c,0x58, - 0x6d,0x18,0x27,0x26,0x01,0xff,0x31,0x79,0x6e,0x37, - 0x04,0x19,0x11,0xa6,0x05,0x0a,0x15,0x1f,0x5c,0x85, - 0xcc,0x53,0xb4,0xda,0x15,0xb7,0xfe,0xeb,0xdc,0x13, - 0x7d,0x75,0x00,0x00,0x00,0x01,0x00,0x4e,0x01,0xe9, - 0x03,0xa1,0x02,0x67,0x00,0x03,0x00,0x00,0x01,0x21, - 0x35,0x21,0x03,0xa1,0xfc,0xad,0x03,0x53,0x01,0xe9, - 0x7e,0x00,0x00,0x01,0x00,0x4e,0x01,0xe9,0x07,0x17, - 0x02,0x67,0x00,0x03,0x00,0x00,0x01,0x21,0x35,0x21, - 0x07,0x17,0xf9,0x37,0x06,0xc9,0x01,0xe9,0x7e,0x00, - 0x00,0x01,0x00,0x23,0x03,0xd6,0x01,0x39,0x05,0xb6, - 0x00,0x06,0x00,0x00,0x13,0x33,0x02,0x07,0x23,0x27, - 0x36,0xcd,0x6c,0x4b,0x19,0xa4,0x0e,0x42,0x05,0xb6, - 0xfe,0xee,0xce,0x17,0xe9,0x00,0x00,0x01,0x00,0x23, - 0x03,0xd6,0x01,0x39,0x05,0xb6,0x00,0x06,0x00,0x00, - 0x01,0x17,0x06,0x07,0x23,0x36,0x37,0x01,0x2b,0x0e, - 0x39,0x70,0x6d,0x47,0x1d,0x05,0xb6,0x16,0xcf,0xfb, - 0xfc,0xe4,0x00,0x01,0x00,0x45,0xfe,0xf8,0x01,0x5c, - 0x00,0xd8,0x00,0x06,0x00,0x00,0x25,0x17,0x06,0x07, - 0x23,0x12,0x37,0x01,0x4e,0x0e,0x3f,0x6b,0x6d,0x47, - 0x1d,0xd8,0x17,0xde,0xeb,0x00,0xff,0xe1,0x00,0x02, - 0x00,0x23,0x03,0xd6,0x02,0x87,0x05,0xb6,0x00,0x06, - 0x00,0x0d,0x00,0x00,0x13,0x33,0x02,0x07,0x23,0x27, - 0x36,0x25,0x33,0x02,0x07,0x23,0x27,0x36,0xcd,0x6c, - 0x4b,0x19,0xa4,0x0e,0x42,0x01,0xb4,0x6e,0x49,0x1c, - 0xa4,0x0e,0x40,0x05,0xb6,0xfe,0xee,0xce,0x17,0xe9, - 0xe0,0xfe,0xf9,0xd9,0x17,0xdd,0x00,0x00,0x00,0x02, - 0x00,0x23,0x03,0xd6,0x02,0x87,0x05,0xb6,0x00,0x06, - 0x00,0x0d,0x00,0x00,0x01,0x17,0x06,0x07,0x23,0x36, - 0x37,0x21,0x17,0x06,0x07,0x23,0x36,0x37,0x01,0x2c, - 0x0e,0x3d,0x6c,0x6e,0x46,0x1f,0x01,0xf1,0x0e,0x3e, - 0x6c,0x6c,0x46,0x1e,0x05,0xb6,0x16,0xd7,0xf3,0xfb, - 0xe5,0x16,0xd8,0xf2,0xf9,0xe7,0x00,0x00,0x00,0x02, - 0x00,0x26,0xfe,0xf8,0x02,0x8a,0x00,0xd7,0x00,0x06, - 0x00,0x0d,0x00,0x00,0x25,0x17,0x06,0x07,0x23,0x36, - 0x37,0x21,0x17,0x06,0x03,0x23,0x12,0x37,0x01,0x2f, - 0x0e,0x3d,0x6c,0x6e,0x46,0x1f,0x01,0xf0,0x0f,0x37, - 0x73,0x6d,0x4a,0x1b,0xd7,0x17,0xd8,0xf0,0xfd,0xe2, - 0x17,0xc5,0xfe,0xfd,0x01,0x19,0xc6,0x00,0x00,0x01, - 0x00,0x78,0x00,0x00,0x03,0x2a,0x06,0x14,0x00,0x0b, - 0x00,0x00,0x01,0x25,0x15,0x25,0x13,0x23,0x13,0x05, - 0x35,0x05,0x03,0x33,0x01,0xf7,0x01,0x33,0xfe,0xcd, - 0x22,0xa5,0x22,0xfe,0xe2,0x01,0x1e,0x22,0xa5,0x04, - 0x6c,0x16,0x89,0x11,0xfb,0xf6,0x04,0x0a,0x11,0x89, - 0x16,0x01,0xa8,0x00,0x00,0x01,0x00,0x74,0x00,0x00, - 0x03,0x2d,0x06,0x14,0x00,0x15,0x00,0x00,0x01,0x25, - 0x15,0x25,0x13,0x03,0x25,0x15,0x25,0x13,0x23,0x13, - 0x05,0x35,0x05,0x03,0x13,0x05,0x35,0x05,0x03,0x33, - 0x01,0xfa,0x01,0x33,0xfe,0xcd,0x16,0x16,0x01,0x33, - 0xfe,0xcd,0x22,0xa5,0x22,0xfe,0xdb,0x01,0x25,0x17, - 0x17,0xfe,0xdb,0x01,0x25,0x22,0xa5,0x04,0x98,0x16, - 0x89,0x11,0xfe,0xdc,0xfe,0xcd,0x11,0x89,0x15,0xfe, - 0x84,0x01,0x7c,0x15,0x89,0x11,0x01,0x33,0x01,0x24, - 0x11,0x89,0x16,0x01,0x7c,0x00,0x00,0x01,0x00,0x91, - 0x01,0xe4,0x02,0x6a,0x03,0xf3,0x00,0x07,0x00,0x00, - 0x12,0x36,0x32,0x16,0x14,0x06,0x22,0x26,0x91,0x7a, - 0xe5,0x7a,0x7b,0xe3,0x7b,0x03,0x6d,0x86,0x87,0xff, - 0x89,0x89,0x00,0x03,0x00,0x7e,0xff,0xec,0x04,0xf6, - 0x00,0xe7,0x00,0x06,0x00,0x0e,0x00,0x15,0x00,0x00, - 0x17,0x22,0x34,0x32,0x15,0x14,0x06,0x25,0x32,0x16, - 0x14,0x06,0x23,0x22,0x34,0x20,0x32,0x15,0x14,0x06, - 0x23,0x22,0xe8,0x6a,0xd5,0x39,0x01,0xa0,0x32,0x39, - 0x3a,0x31,0x6b,0x01,0xd1,0xd6,0x3a,0x31,0x6b,0x14, - 0xfb,0x7d,0x3f,0x3f,0xfb,0x3e,0x7d,0x40,0xfb,0x7d, - 0x3e,0x40,0x00,0x00,0x00,0x07,0x00,0x53,0xff,0xed, - 0x06,0xf2,0x05,0xcb,0x00,0x07,0x00,0x0c,0x00,0x15, - 0x00,0x1e,0x00,0x26,0x00,0x30,0x00,0x39,0x00,0x00, - 0x12,0x36,0x32,0x16,0x10,0x06,0x22,0x26,0x01,0x33, - 0x02,0x01,0x23,0x03,0x22,0x06,0x10,0x16,0x32,0x36, - 0x35,0x10,0x01,0x32,0x16,0x10,0x06,0x22,0x26,0x35, - 0x10,0x04,0x36,0x32,0x16,0x10,0x06,0x22,0x26,0x01, - 0x22,0x06,0x10,0x16,0x33,0x32,0x36,0x35,0x10,0x21, - 0x22,0x06,0x10,0x16,0x32,0x36,0x35,0x10,0x53,0x74, - 0xe6,0x77,0x7a,0xe4,0x73,0x03,0x04,0x80,0x70,0xfe, - 0x6b,0x82,0x17,0x35,0x2e,0x2f,0x6b,0x31,0x02,0x4b, - 0x74,0x77,0x7b,0xe2,0x74,0x02,0x1c,0x74,0xe5,0x77, - 0x7a,0xe3,0x73,0xfe,0xc9,0x35,0x2e,0x2f,0x37,0x35, - 0x31,0x01,0xb3,0x34,0x2e,0x2f,0x6b,0x30,0x04,0xe1, - 0xea,0xe8,0xfe,0x41,0xef,0xea,0x02,0x97,0xfe,0xc5, - 0xfb,0x85,0x05,0x57,0xa4,0xfe,0x9e,0xa5,0xa6,0xb0, - 0x01,0x55,0xfe,0x2a,0xe8,0xfe,0x41,0xed,0xeb,0xdf, - 0x01,0xca,0xe9,0xe9,0xe7,0xfe,0x41,0xee,0xea,0x02, - 0x36,0xa4,0xfe,0x9f,0xa5,0xa8,0xae,0x01,0x54,0xa4, - 0xfe,0x9f,0xa5,0xa5,0xb1,0x01,0x54,0x00,0x00,0x00, - 0x00,0x01,0x00,0x4f,0x00,0x83,0x01,0xdf,0x03,0xaf, - 0x00,0x06,0x00,0x00,0x01,0x03,0x13,0x07,0x01,0x35, - 0x01,0x01,0xdf,0xdb,0xdb,0x6a,0xfe,0xda,0x01,0x26, - 0x03,0x73,0xfe,0xa7,0xfe,0xa6,0x3d,0x01,0x89,0x1a, - 0x01,0x89,0x00,0x00,0x00,0x01,0x00,0x4f,0x00,0x83, - 0x01,0xdf,0x03,0xaf,0x00,0x06,0x00,0x00,0x01,0x15, - 0x01,0x27,0x13,0x03,0x37,0x01,0xdf,0xfe,0xdb,0x6b, - 0xdb,0xdb,0x6b,0x02,0x26,0x1a,0xfe,0x77,0x3d,0x01, - 0x5a,0x01,0x59,0x3c,0x00,0x01,0xfe,0xbe,0x00,0x00, - 0x02,0x36,0x05,0xb6,0x00,0x03,0x00,0x00,0x2b,0x01, - 0x01,0x33,0xc1,0x81,0x02,0xf7,0x81,0x05,0xb6,0x00, - 0x00,0x00,0x00,0x02,0x00,0x8d,0x00,0x00,0x04,0x82, - 0x05,0x0a,0x00,0x18,0x00,0x2d,0x00,0x00,0x13,0x21, - 0x32,0x17,0x1e,0x04,0x15,0x30,0x11,0x23,0x11,0x34, - 0x2e,0x03,0x27,0x26,0x2b,0x01,0x11,0x23,0x01,0x11, - 0x10,0x07,0x0e,0x03,0x2b,0x01,0x11,0x33,0x11,0x33, - 0x32,0x37,0x36,0x37,0x36,0x35,0x11,0x8d,0x01,0x4e, - 0x93,0x66,0x29,0x38,0x1d,0x0e,0x02,0x93,0x10,0x10, - 0x1a,0x23,0x19,0x3c,0x42,0xb7,0x97,0x03,0xf5,0x39, - 0x17,0x53,0x72,0xa9,0x69,0xb9,0x97,0x22,0xbe,0x5e, - 0x56,0x17,0x0b,0x05,0x0a,0x32,0x14,0x52,0x3f,0x78, - 0x46,0x25,0xfd,0xf9,0x01,0xe0,0xa5,0x42,0x31,0x18, - 0x1a,0x05,0x0c,0xfb,0x7c,0x05,0x0a,0xfd,0xa7,0xfe, - 0xf4,0x8b,0x38,0x6f,0x47,0x2c,0x03,0xc0,0xfc,0xc5, - 0x5c,0x54,0xb8,0x53,0x71,0x02,0x59,0x00,0x00,0x01, - 0x00,0x24,0xff,0xec,0x03,0x37,0x05,0xcd,0x00,0x25, - 0x00,0x00,0x13,0x33,0x1a,0x01,0x33,0x32,0x17,0x07, - 0x26,0x23,0x22,0x03,0x21,0x15,0x21,0x07,0x17,0x21, - 0x15,0x21,0x12,0x33,0x32,0x37,0x15,0x06,0x23,0x20, - 0x03,0x23,0x35,0x33,0x26,0x3d,0x01,0x34,0x37,0x23, - 0x24,0x8a,0x18,0xdc,0xa3,0x84,0x6e,0x40,0x5a,0x52, - 0xd6,0x29,0x01,0x3b,0xfe,0xbd,0x02,0x02,0x01,0x1e, - 0xfe,0xea,0x27,0xe3,0x6f,0x60,0x5e,0x75,0xfe,0x92, - 0x36,0x8a,0x83,0x01,0x01,0x83,0x03,0x92,0x01,0x08, - 0x01,0x33,0x49,0x81,0x39,0xfe,0x56,0x6e,0x48,0x68, - 0x6d,0xfe,0x76,0x37,0x93,0x35,0x02,0x1b,0x6d,0x1e, - 0x3a,0x1a,0x29,0x15,0x00,0x02,0x00,0x0d,0x02,0xe5, - 0x05,0x0a,0x05,0xb6,0x00,0x07,0x00,0x18,0x00,0x00, - 0x01,0x23,0x11,0x23,0x11,0x23,0x35,0x21,0x01,0x23, - 0x11,0x37,0x23,0x03,0x23,0x03,0x23,0x17,0x11,0x23, - 0x11,0x33,0x1b,0x01,0x33,0x02,0x0f,0xcc,0x6c,0xca, - 0x02,0x02,0x02,0xfb,0x6c,0x05,0x07,0xc2,0x62,0xbd, - 0x08,0x06,0x68,0xa3,0xb7,0xbd,0xa2,0x05,0x53,0xfd, - 0x92,0x02,0x6e,0x63,0xfd,0x2f,0x01,0xa0,0xa5,0xfd, - 0xbb,0x02,0x48,0xc5,0xfe,0x7d,0x02,0xd1,0xfd,0xc9, - 0x02,0x37,0x00,0x03,0x00,0x16,0x00,0x00,0x03,0x26, - 0x06,0x1f,0x00,0x16,0x00,0x1e,0x00,0x22,0x00,0x00, - 0x13,0x34,0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x0e, - 0x01,0x1d,0x01,0x33,0x15,0x23,0x11,0x23,0x11,0x23, - 0x35,0x36,0x37,0x00,0x36,0x32,0x16,0x14,0x06,0x22, - 0x26,0x13,0x23,0x11,0x33,0x9e,0x76,0x87,0x52,0x46, - 0x2d,0x33,0x2f,0x3f,0x31,0xaf,0xaf,0x96,0x88,0x19, - 0x6f,0x01,0xd5,0x32,0x52,0x2f,0x30,0x51,0x32,0xa5, - 0x98,0x98,0x04,0xa1,0xc7,0xb7,0x20,0x7e,0x19,0x02, - 0x6e,0x8c,0x58,0x7e,0xfc,0x38,0x03,0xc8,0x50,0x0b, - 0x2b,0x01,0x56,0x3b,0x3b,0x67,0x3b,0x3b,0xfa,0xc3, - 0x04,0x47,0x00,0x00,0x00,0x02,0x00,0x16,0x00,0x00, - 0x03,0x17,0x06,0x1f,0x00,0x16,0x00,0x1a,0x00,0x00, - 0x13,0x34,0x36,0x33,0x32,0x17,0x07,0x26,0x23,0x0e, - 0x01,0x1d,0x01,0x33,0x15,0x23,0x11,0x23,0x11,0x23, - 0x35,0x36,0x37,0x01,0x23,0x11,0x33,0x9e,0x76,0x87, - 0x52,0x46,0x2d,0x33,0x2f,0x3f,0x31,0xaf,0xaf,0x96, - 0x88,0x19,0x6f,0x02,0x79,0x98,0x98,0x04,0xa1,0xc7, - 0xb7,0x20,0x7e,0x19,0x02,0x6e,0x8c,0x58,0x7e,0xfc, - 0x38,0x03,0xc8,0x50,0x0b,0x2b,0xfb,0xb2,0x06,0x14, - 0x00,0x00,0x00,0x02,0x00,0x40,0x00,0x00,0x04,0x3c, - 0x06,0x06,0x00,0x05,0x00,0x22,0x00,0x00,0x01,0x32, - 0x14,0x23,0x22,0x34,0x01,0x23,0x03,0x33,0x13,0x3e, - 0x01,0x37,0x13,0x33,0x03,0x06,0x07,0x06,0x07,0x13, - 0x33,0x32,0x36,0x12,0x37,0x13,0x33,0x03,0x02,0x07, - 0x0e,0x02,0x03,0xf3,0x49,0x49,0x46,0xfd,0xbc,0xbe, - 0x6b,0x92,0x3b,0x66,0x61,0x0f,0x1d,0x8f,0x1d,0x10, - 0x2c,0x4b,0xd3,0x1b,0x36,0x90,0xde,0x7f,0x10,0x34, - 0x90,0x34,0x1e,0xa8,0x33,0x7e,0xaf,0x06,0x06,0xad, - 0xad,0xf9,0xfa,0x05,0x0a,0xfd,0x3a,0x25,0xab,0xac, - 0x01,0x4a,0xfe,0xb7,0xaf,0x66,0xb2,0x33,0xfe,0xba, - 0x9b,0x01,0x0b,0xb0,0x02,0x33,0xfd,0xcd,0xfe,0xae, - 0xc3,0x3c,0x53,0x33,0x00,0x00,0x00,0x02,0x00,0x25, - 0x00,0x00,0x04,0x2a,0x05,0xf2,0x00,0x05,0x00,0x22, - 0x00,0x00,0x13,0x32,0x14,0x23,0x22,0x34,0x01,0x23, - 0x03,0x33,0x13,0x3e,0x01,0x37,0x13,0x33,0x03,0x06, - 0x07,0x06,0x07,0x13,0x33,0x32,0x36,0x12,0x37,0x13, - 0x33,0x03,0x02,0x07,0x0e,0x02,0x6b,0x49,0x49,0x46, - 0x01,0x44,0xbe,0x6b,0x92,0x3b,0x66,0x61,0x0f,0x1d, - 0x8f,0x1d,0x10,0x2c,0x4b,0xd3,0x1b,0x36,0x90,0xde, - 0x7f,0x10,0x34,0x90,0x34,0x1e,0xa8,0x33,0x7e,0xaf, - 0x05,0xf2,0xad,0xad,0xfa,0x0e,0x05,0x0a,0xfd,0x3a, - 0x25,0xab,0xac,0x01,0x4a,0xfe,0xb7,0xaf,0x66,0xb2, - 0x33,0xfe,0xba,0x9b,0x01,0x0b,0xb0,0x02,0x33,0xfd, - 0xcd,0xfe,0xae,0xc3,0x3c,0x53,0x33,0x00,0x00,0x00, - 0x00,0x03,0x00,0x40,0x00,0x00,0x04,0x3c,0x06,0x06, - 0x00,0x05,0x00,0x22,0x00,0x28,0x00,0x00,0x01,0x32, - 0x14,0x23,0x22,0x34,0x01,0x23,0x03,0x33,0x13,0x3e, - 0x01,0x37,0x13,0x33,0x03,0x06,0x07,0x06,0x07,0x13, - 0x33,0x32,0x36,0x12,0x37,0x13,0x33,0x03,0x02,0x07, - 0x0e,0x02,0x13,0x32,0x14,0x23,0x22,0x34,0x03,0xf3, - 0x49,0x49,0x46,0xfd,0xbc,0xbe,0x6b,0x92,0x3b,0x66, - 0x61,0x0f,0x1d,0x8f,0x1d,0x10,0x2c,0x4b,0xd3,0x1b, - 0x36,0x90,0xde,0x7f,0x10,0x34,0x90,0x34,0x1e,0xa8, - 0x33,0x7e,0xaf,0x60,0x49,0x49,0x46,0x06,0x06,0xad, - 0xad,0xf9,0xfa,0x05,0x0a,0xfd,0x3a,0x25,0xab,0xac, - 0x01,0x4a,0xfe,0xb7,0xaf,0x66,0xb2,0x33,0xfe,0xba, - 0x9b,0x01,0x0b,0xb0,0x02,0x33,0xfd,0xcd,0xfe,0xae, - 0xc3,0x3c,0x53,0x33,0x02,0x08,0xad,0xad,0x00,0x00, - 0x00,0x03,0x00,0x25,0x00,0x00,0x04,0x2a,0x05,0xf2, - 0x00,0x05,0x00,0x22,0x00,0x28,0x00,0x00,0x13,0x32, - 0x14,0x23,0x22,0x34,0x01,0x23,0x03,0x33,0x13,0x3e, - 0x01,0x37,0x13,0x33,0x03,0x06,0x07,0x06,0x07,0x13, - 0x33,0x32,0x36,0x12,0x37,0x13,0x33,0x03,0x02,0x07, - 0x0e,0x02,0x13,0x32,0x14,0x23,0x22,0x34,0x6b,0x49, - 0x49,0x46,0x01,0x44,0xbe,0x6b,0x92,0x3b,0x66,0x61, - 0x0f,0x1d,0x8f,0x1d,0x10,0x2c,0x4b,0xd3,0x1b,0x36, - 0x90,0xde,0x7f,0x10,0x34,0x90,0x34,0x1e,0xa8,0x33, - 0x7e,0xaf,0x60,0x49,0x49,0x46,0x05,0xf2,0xad,0xad, - 0xfa,0x0e,0x05,0x0a,0xfd,0x3a,0x25,0xab,0xac,0x01, - 0x4a,0xfe,0xb7,0xaf,0x66,0xb2,0x33,0xfe,0xba,0x9b, - 0x01,0x0b,0xb0,0x02,0x33,0xfd,0xcd,0xfe,0xae,0xc3, - 0x3c,0x53,0x33,0x02,0x08,0xad,0xad,0x00,0x00,0x00, - 0x00,0x02,0x00,0x44,0xfe,0xcc,0x03,0x13,0x05,0x0a, - 0x00,0x1d,0x00,0x21,0x00,0x00,0x01,0x11,0x14,0x06, - 0x07,0x06,0x07,0x16,0x12,0x17,0x23,0x01,0x0e,0x01, - 0x15,0x11,0x23,0x11,0x34,0x37,0x36,0x37,0x03,0x33, - 0x13,0x17,0x3e,0x01,0x35,0x11,0x13,0x21,0x35,0x21, - 0x03,0x0f,0x0c,0x12,0x26,0x79,0x23,0x84,0x1a,0xab, - 0xfe,0xd8,0x37,0x28,0x95,0x58,0x28,0x3c,0xc4,0xaa, - 0xc3,0x69,0x38,0x28,0x02,0xfe,0x66,0x01,0x9a,0x05, - 0x0a,0xfe,0x2d,0x3c,0x5e,0x37,0x73,0x34,0x53,0xfe, - 0xd1,0x3d,0x02,0xce,0x28,0x8f,0x76,0xfe,0x5f,0x01, - 0xc7,0xd6,0x65,0x2d,0x1c,0x01,0xbf,0xfe,0x19,0xe7, - 0x24,0x85,0x78,0x01,0xad,0xf9,0xc2,0x52,0x00,0x00, - 0x00,0x02,0x00,0x44,0xfd,0xe4,0x03,0x13,0x05,0x0a, - 0x00,0x1d,0x00,0x25,0x00,0x00,0x01,0x11,0x14,0x06, - 0x07,0x06,0x07,0x16,0x12,0x17,0x23,0x01,0x0e,0x01, - 0x15,0x11,0x23,0x11,0x34,0x37,0x36,0x37,0x03,0x33, - 0x13,0x17,0x3e,0x01,0x35,0x11,0x03,0x23,0x15,0x23, - 0x35,0x23,0x35,0x21,0x03,0x0f,0x0c,0x12,0x26,0x79, - 0x23,0x84,0x1a,0xab,0xfe,0xd8,0x37,0x28,0x95,0x58, - 0x28,0x3c,0xc4,0xaa,0xc3,0x69,0x38,0x28,0x03,0xa4, - 0x52,0xa4,0x01,0x9a,0x05,0x0a,0xfe,0x2d,0x3c,0x5e, - 0x37,0x73,0x34,0x53,0xfe,0xd1,0x3d,0x02,0xce,0x28, - 0x8f,0x76,0xfe,0x5f,0x01,0xc7,0xd6,0x65,0x2d,0x1c, - 0x01,0xbf,0xfe,0x19,0xe7,0x24,0x85,0x78,0x01,0xad, - 0xf9,0xc2,0xe8,0xe8,0x52,0x00,0x00,0x00,0x00,0x02, - 0x00,0x44,0x00,0x00,0x03,0x13,0x05,0x0a,0x00,0x1d, - 0x00,0x23,0x00,0x00,0x01,0x11,0x14,0x06,0x07,0x06, - 0x07,0x16,0x12,0x17,0x23,0x01,0x0e,0x01,0x15,0x11, - 0x23,0x11,0x34,0x37,0x36,0x37,0x03,0x33,0x13,0x17, - 0x3e,0x01,0x35,0x11,0x01,0x32,0x14,0x23,0x22,0x34, - 0x03,0x0f,0x0c,0x12,0x26,0x79,0x23,0x84,0x1a,0xab, - 0xfe,0xd8,0x37,0x28,0x95,0x58,0x28,0x3c,0xc4,0xaa, - 0xc3,0x69,0x38,0x28,0xfe,0xe7,0x49,0x49,0x46,0x05, - 0x0a,0xfe,0x2d,0x3c,0x5e,0x37,0x73,0x34,0x53,0xfe, - 0xd1,0x3d,0x02,0xce,0x28,0x8f,0x76,0xfe,0x5f,0x01, - 0xc7,0xd6,0x65,0x2d,0x1c,0x01,0xbf,0xfe,0x19,0xe7, - 0x24,0x85,0x78,0x01,0xad,0xfc,0x3d,0xad,0xad,0x00, - 0x00,0x00,0x00,0x02,0x00,0x5d,0x00,0x00,0x03,0x0a, - 0x05,0x1e,0x00,0x15,0x00,0x1b,0x00,0x00,0x13,0x36, - 0x32,0x1e,0x03,0x15,0x11,0x33,0x15,0x21,0x35,0x21, - 0x11,0x34,0x27,0x26,0x23,0x22,0x0f,0x01,0x13,0x32, - 0x14,0x23,0x22,0x34,0x5d,0x6b,0xcf,0x80,0x4f,0x2e, - 0x10,0x66,0xfd,0x54,0x01,0xae,0x5c,0x2d,0x43,0x7d, - 0x4b,0x1b,0xc8,0x49,0x49,0x46,0x05,0x12,0x0c,0x24, - 0x3e,0x66,0x71,0x4f,0xfc,0xe9,0x7f,0x7f,0x03,0x17, - 0xca,0x28,0x14,0x0a,0x03,0xfe,0x4d,0xad,0xad,0x00, - 0x00,0x02,0x00,0x59,0xff,0xf7,0x02,0x3a,0x05,0x1e, - 0x00,0x22,0x00,0x28,0x00,0x00,0x21,0x27,0x23,0x07, - 0x0e,0x03,0x07,0x06,0x23,0x22,0x27,0x37,0x14,0x16, - 0x33,0x32,0x36,0x35,0x11,0x34,0x26,0x23,0x22,0x07, - 0x35,0x36,0x32,0x1e,0x03,0x15,0x11,0x01,0x32,0x14, - 0x23,0x22,0x34,0x01,0xc5,0x15,0x0a,0x0a,0x02,0x19, - 0x15,0x2b,0x17,0x3f,0x47,0x25,0x26,0x13,0x31,0x0f, - 0x84,0x73,0x38,0x54,0x26,0x47,0x43,0x82,0x66,0x3a, - 0x21,0x0a,0xfe,0xbd,0x49,0x49,0x46,0xcc,0x1e,0x06, - 0x3a,0x1c,0x2f,0x0c,0x20,0x0a,0x91,0x03,0x08,0xbd, - 0xbf,0x01,0xbb,0x72,0x6a,0x13,0x85,0x12,0x27,0x3d, - 0x61,0x5c,0x3f,0xfc,0x42,0x02,0xdc,0xad,0xad,0x00, - 0x00,0x02,0x00,0x14,0x00,0x00,0x02,0xc2,0x05,0x0a, - 0x00,0x0e,0x00,0x14,0x00,0x00,0x01,0x15,0x06,0x15, - 0x11,0x23,0x11,0x34,0x36,0x37,0x36,0x3f,0x01,0x21, - 0x35,0x13,0x32,0x14,0x23,0x22,0x34,0x02,0xc2,0xc2, - 0x97,0x1d,0x14,0x2a,0x22,0x0e,0xfe,0x20,0xbb,0x49, - 0x49,0x46,0x05,0x0a,0x74,0x46,0xd4,0xfc,0x84,0x03, - 0x7e,0x3a,0x61,0x1d,0x3b,0x11,0x08,0x80,0xfd,0xd2, - 0xad,0xad,0x00,0x03,0x00,0x86,0x00,0x00,0x03,0x3c, - 0x05,0x1e,0x00,0x0e,0x00,0x12,0x00,0x18,0x00,0x00, - 0x01,0x32,0x16,0x15,0x11,0x23,0x11,0x34,0x2e,0x02, - 0x22,0x07,0x35,0x36,0x03,0x11,0x33,0x11,0x13,0x32, - 0x14,0x23,0x22,0x34,0x01,0xbb,0xd5,0xac,0x99,0x19, - 0x3e,0x57,0xb2,0xbd,0xa3,0xa3,0x98,0xc0,0x49,0x49, - 0x46,0x05,0x1e,0xa9,0xdd,0xfc,0x68,0x03,0x98,0x52, - 0x66,0x38,0x14,0x1b,0x81,0x1c,0xfa,0xe2,0x03,0x30, - 0xfc,0xd0,0x02,0xdc,0xad,0xad,0x00,0x02,0xff,0xab, - 0x00,0x00,0x01,0x1d,0x05,0x0a,0x00,0x03,0x00,0x09, - 0x00,0x00,0x33,0x11,0x33,0x11,0x01,0x32,0x14,0x23, - 0x22,0x34,0x86,0x97,0xfe,0xd4,0x49,0x49,0x46,0x05, - 0x0a,0xfa,0xf6,0x02,0xdc,0xad,0xad,0x00,0x00,0x00, - 0x00,0x02,0xff,0xd5,0x00,0x00,0x01,0xc2,0x05,0x0a, - 0x00,0x0e,0x00,0x14,0x00,0x00,0x01,0x15,0x0e,0x01, - 0x07,0x06,0x15,0x11,0x23,0x11,0x34,0x12,0x37,0x23, - 0x35,0x03,0x32,0x14,0x23,0x22,0x34,0x01,0xc2,0x32, - 0x47,0x07,0x03,0x97,0x50,0x43,0xba,0x66,0x49,0x49, - 0x46,0x05,0x0a,0x78,0x37,0xd1,0xbe,0x40,0x14,0xfd, - 0x88,0x02,0x2b,0xd1,0x01,0x35,0x59,0x80,0xfd,0xd2, - 0xad,0xad,0x00,0x02,0x00,0x5f,0xff,0xec,0x03,0x4f, - 0x05,0x1e,0x00,0x20,0x00,0x26,0x00,0x00,0x01,0x32, - 0x17,0x16,0x11,0x10,0x07,0x06,0x23,0x22,0x27,0x26, - 0x19,0x01,0x33,0x11,0x10,0x17,0x1e,0x01,0x32,0x36, - 0x37,0x36,0x11,0x10,0x27,0x2e,0x01,0x22,0x07,0x35, - 0x36,0x13,0x32,0x14,0x23,0x22,0x34,0x01,0xe2,0x7c, - 0x53,0x9e,0x9f,0x5b,0x7d,0x7e,0x5b,0xa0,0x9c,0x41, - 0x20,0x4c,0x60,0x4b,0x1f,0x41,0x41,0x1f,0x4c,0x55, - 0x2f,0x34,0x1d,0x49,0x49,0x46,0x05,0x1e,0x54,0xa1, - 0xfe,0x5c,0xfe,0x61,0x9f,0x5b,0x5b,0xa0,0x01,0x9e, - 0x02,0x84,0xfd,0x7c,0xfe,0xcc,0x77,0x3a,0x32,0x32, - 0x3a,0x78,0x01,0x33,0x01,0x31,0x7a,0x3a,0x32,0x0a, - 0x81,0x0b,0xfd,0xbe,0xad,0xad,0x00,0x02,0xff,0xd6, - 0x01,0xd2,0x01,0x1a,0x05,0x0a,0x00,0x05,0x00,0x0b, - 0x00,0x00,0x01,0x06,0x07,0x23,0x11,0x33,0x03,0x32, - 0x14,0x23,0x22,0x34,0x01,0x1a,0x6d,0x03,0x27,0x97, - 0xfe,0x49,0x49,0x46,0x02,0x71,0x9b,0x04,0x03,0x38, - 0xfe,0xac,0xad,0xad,0x00,0x02,0x00,0x2d,0xfe,0x14, - 0x02,0x56,0x05,0x1e,0x00,0x0e,0x00,0x14,0x00,0x00, - 0x13,0x36,0x32,0x1e,0x01,0x17,0x16,0x15,0x11,0x23, - 0x11,0x10,0x23,0x22,0x07,0x13,0x32,0x14,0x23,0x22, - 0x34,0x2d,0x66,0xac,0x7f,0x51,0x19,0x2e,0x99,0xd9, - 0x5b,0x5c,0xbc,0x49,0x49,0x46,0x04,0xfc,0x22,0x3d, - 0x67,0x4c,0x88,0xd0,0xfb,0x3e,0x04,0xc2,0x01,0xc0, - 0x28,0xfe,0x6e,0xad,0xad,0x00,0x00,0x02,0x00,0x2d, - 0xff,0xec,0x02,0x56,0x05,0x1e,0x00,0x1e,0x00,0x24, - 0x00,0x00,0x13,0x36,0x32,0x1e,0x01,0x17,0x16,0x1d, - 0x01,0x14,0x0e,0x03,0x22,0x27,0x35,0x1e,0x01,0x32, - 0x3e,0x02,0x37,0x36,0x3d,0x01,0x10,0x23,0x22,0x07, - 0x13,0x32,0x14,0x23,0x22,0x34,0x2d,0x66,0xac,0x7f, - 0x51,0x19,0x2e,0x10,0x31,0x4d,0x85,0xbe,0x54,0x4d, - 0x4b,0x4b,0x4b,0x2d,0x1e,0x06,0x0b,0xd7,0x51,0x66, - 0xa8,0x49,0x49,0x46,0x04,0xfc,0x22,0x3d,0x67,0x4c, - 0x88,0xd0,0xc6,0x52,0x8e,0x96,0x6a,0x44,0x1c,0x89, - 0x1a,0x07,0x2c,0x4d,0x53,0x34,0x55,0x4b,0xc6,0x01, - 0xc0,0x27,0xfe,0x6d,0xad,0xad,0x00,0x00,0x00,0x02, - 0x00,0x2b,0x00,0x00,0x02,0x81,0x06,0x1c,0x00,0x0f, - 0x00,0x15,0x00,0x00,0x01,0x15,0x06,0x02,0x07,0x06, - 0x03,0x23,0x36,0x12,0x37,0x13,0x21,0x11,0x33,0x11, - 0x03,0x32,0x14,0x23,0x22,0x34,0x02,0x81,0x1d,0x6c, - 0x18,0x19,0x46,0x96,0x09,0x4a,0x0a,0xa6,0xfe,0x3e, - 0x97,0x52,0x49,0x49,0x46,0x05,0x0e,0x86,0x75,0xfe, - 0x46,0x62,0x88,0xfe,0x91,0x34,0x01,0x82,0x3a,0x02, - 0x99,0x01,0x93,0xfe,0xf2,0xfd,0xce,0xad,0xad,0x00, - 0x00,0x00,0x00,0x02,0x00,0x35,0x00,0x00,0x03,0x24, - 0x05,0x1e,0x00,0x2b,0x00,0x31,0x00,0x00,0x00,0x32, - 0x1e,0x03,0x17,0x16,0x15,0x11,0x21,0x35,0x33,0x11, - 0x34,0x27,0x26,0x27,0x26,0x22,0x06,0x07,0x06,0x0f, - 0x01,0x03,0x23,0x13,0x3e,0x01,0x2e,0x04,0x35,0x33, - 0x1e,0x01,0x17,0x33,0x3e,0x02,0x13,0x32,0x14,0x23, - 0x22,0x34,0x01,0xee,0x66,0x52,0x35,0x27,0x14,0x06, - 0x08,0xfe,0x85,0xe4,0x13,0x18,0x27,0x18,0x4f,0x50, - 0x18,0x30,0x11,0x07,0x57,0x98,0x4d,0x0a,0x01,0x08, - 0x0b,0x12,0x0a,0x12,0x97,0x06,0x22,0x06,0x09,0x09, - 0x37,0x37,0x42,0x49,0x49,0x46,0x05,0x1e,0x21,0x32, - 0x51,0x4b,0x35,0x52,0x65,0xfc,0xbd,0x7f,0x02,0xc4, - 0xb0,0x3b,0x4a,0x15,0x0d,0x2c,0x20,0x40,0x35,0x16, - 0xfc,0x3d,0x03,0x55,0x73,0x4d,0x3b,0x2f,0x3c,0x1f, - 0x2f,0x01,0x0f,0x6c,0x1b,0x16,0x42,0x2d,0xfd,0xe3, - 0xad,0xad,0x00,0x00,0x00,0x02,0x00,0x28,0x00,0x00, - 0x01,0xe9,0x05,0x1e,0x00,0x1a,0x00,0x20,0x00,0x00, - 0x13,0x36,0x32,0x1e,0x03,0x17,0x16,0x15,0x11,0x14, - 0x06,0x0f,0x01,0x21,0x35,0x21,0x36,0x35,0x11,0x34, - 0x27,0x26,0x23,0x22,0x07,0x13,0x32,0x14,0x23,0x22, - 0x34,0x5b,0x4a,0x68,0x54,0x39,0x28,0x17,0x07,0x09, - 0x15,0x0a,0x0b,0xfe,0x69,0x01,0x12,0x18,0x18,0x1d, - 0x57,0x24,0x47,0x60,0x49,0x49,0x46,0x05,0x0d,0x11, - 0x15,0x22,0x3b,0x3a,0x2c,0x40,0x6d,0xfd,0xbb,0x4c, - 0xaa,0x2f,0x2f,0x7f,0x53,0x82,0x02,0x88,0x53,0x31, - 0x3a,0x11,0xfe,0x53,0xad,0xad,0x00,0x00,0x00,0x03, - 0x00,0x57,0xff,0xec,0x03,0x46,0x05,0x1e,0x00,0x15, - 0x00,0x26,0x00,0x2c,0x00,0x00,0x01,0x32,0x17,0x16, - 0x17,0x16,0x10,0x0e,0x01,0x07,0x06,0x23,0x22,0x27, - 0x26,0x02,0x35,0x10,0x37,0x07,0x35,0x36,0x0e,0x01, - 0x10,0x1e,0x02,0x32,0x36,0x37,0x36,0x11,0x10,0x27, - 0x2e,0x01,0x23,0x07,0x13,0x32,0x14,0x23,0x22,0x34, - 0x01,0xce,0x7e,0x5b,0x64,0x27,0x14,0x29,0x45,0x31, - 0x5b,0x7e,0x9d,0x67,0x36,0x3d,0x92,0x80,0xc9,0x06, - 0x39,0x21,0x3f,0x4b,0x60,0x4b,0x1f,0x42,0x5a,0x1d, - 0x3f,0x26,0x56,0x57,0x49,0x49,0x46,0x05,0x1e,0x5b, - 0x64,0xd6,0x73,0xfe,0xde,0xe6,0x96,0x31,0x5b,0x90, - 0x4b,0x01,0x0a,0xb4,0x01,0x4d,0xbf,0x07,0x81,0x13, - 0xdb,0xfa,0xfe,0xa2,0xd7,0x74,0x31,0x31,0x3a,0x79, - 0x01,0x32,0x01,0x5e,0x75,0x25,0x1d,0x05,0xfe,0x47, - 0xad,0xad,0x00,0x02,0x00,0x50,0xfe,0x14,0x03,0x2f, - 0x05,0x1e,0x00,0x1d,0x00,0x23,0x00,0x00,0x01,0x22, - 0x26,0x10,0x36,0x33,0x32,0x17,0x16,0x17,0x16,0x15, - 0x11,0x23,0x11,0x10,0x27,0x2e,0x01,0x22,0x06,0x07, - 0x06,0x15,0x10,0x17,0x32,0x17,0x07,0x22,0x13,0x32, - 0x14,0x23,0x22,0x34,0x01,0x9c,0x99,0xb3,0xca,0x9d, - 0x7e,0x5b,0x64,0x26,0x15,0x98,0x43,0x20,0x4c,0x69, - 0x56,0x17,0x2d,0xc0,0x06,0x10,0x1c,0x01,0x3a,0x49, - 0x49,0x46,0x01,0xb4,0xd3,0x01,0x9f,0xf8,0x5b,0x64, - 0xd6,0x73,0x91,0xfb,0x8f,0x04,0x71,0x01,0x32,0x79, - 0x39,0x31,0x43,0x33,0x65,0x63,0xfe,0xdc,0x0b,0x02, - 0x77,0x02,0x0c,0xad,0xad,0x00,0x00,0x00,0x00,0x02, - 0x00,0x51,0xff,0xec,0x03,0x2f,0x05,0x1e,0x00,0x26, - 0x00,0x2c,0x00,0x00,0x12,0x26,0x10,0x36,0x33,0x32, - 0x17,0x16,0x17,0x16,0x10,0x0e,0x01,0x07,0x06,0x23, - 0x22,0x2f,0x01,0x35,0x16,0x33,0x32,0x11,0x10,0x27, - 0x2e,0x01,0x22,0x06,0x07,0x06,0x15,0x14,0x16,0x1f, - 0x01,0x07,0x27,0x13,0x32,0x14,0x23,0x22,0x34,0xf9, - 0xa8,0xca,0x9d,0x7e,0x5a,0x65,0x25,0x15,0x2b,0x49, - 0x33,0x5d,0x7f,0x76,0x64,0x20,0x85,0x75,0xe7,0x41, - 0x1f,0x4a,0x69,0x57,0x17,0x2d,0x59,0x67,0x16,0x1b, - 0x15,0x39,0x49,0x49,0x46,0x01,0xbb,0xd5,0x01,0x97, - 0xf7,0x5b,0x65,0xd5,0x73,0xfe,0xde,0xe6,0x95,0x31, - 0x5c,0x12,0x05,0x85,0x18,0x02,0x15,0x01,0x35,0x76, - 0x39,0x31,0x44,0x34,0x67,0x62,0x8f,0x98,0x04,0x02, - 0x78,0x02,0x02,0x0a,0xad,0xad,0x00,0x00,0x00,0x02, - 0x00,0x3a,0x00,0x00,0x03,0x05,0x05,0x0a,0x00,0x11, - 0x00,0x17,0x00,0x00,0x29,0x01,0x35,0x21,0x17,0x03, - 0x01,0x33,0x01,0x36,0x1b,0x01,0x33,0x07,0x06,0x02, - 0x07,0x13,0x01,0x32,0x14,0x23,0x22,0x34,0x02,0xeb, - 0xfd,0x52,0x01,0x54,0xaf,0xb6,0xfe,0xb0,0x9f,0x01, - 0x10,0x4b,0x1c,0x1d,0x98,0x15,0x16,0x4f,0x60,0xc0, - 0xfd,0xbc,0x49,0x49,0x46,0x7f,0x04,0x01,0x65,0x03, - 0x2a,0xfd,0x53,0x52,0x01,0x2e,0x01,0x2c,0xd8,0xe8, - 0xfe,0xf6,0x5e,0xfe,0x6f,0x02,0x37,0xad,0xad,0x00, - 0x00,0x03,0x00,0x8d,0xfe,0x14,0x03,0x59,0x05,0x0a, - 0x00,0x1b,0x00,0x21,0x00,0x25,0x00,0x00,0x25,0x15, - 0x23,0x35,0x34,0x3e,0x04,0x37,0x36,0x12,0x37,0x21, - 0x35,0x21,0x15,0x03,0x0e,0x06,0x07,0x06,0x03,0x32, - 0x14,0x23,0x22,0x34,0x03,0x11,0x33,0x11,0x02,0x38, - 0x95,0x0e,0x09,0x11,0x0c,0x17,0x06,0x1b,0x79,0x33, - 0xfd,0xd2,0x02,0xcc,0xa7,0x03,0x1c,0x0a,0x1a,0x0b, - 0x13,0x0a,0x05,0x0a,0x99,0x49,0x49,0x46,0xcb,0x97, - 0x16,0x16,0x16,0x2a,0x4e,0x31,0x49,0x31,0x57,0x18, - 0x5e,0x01,0xcc,0xb8,0x80,0x70,0xfd,0x9d,0x0b,0x68, - 0x24,0x60,0x2d,0x52,0x30,0x1f,0x34,0x02,0xc4,0xad, - 0xad,0xfb,0x12,0x04,0xe7,0xfb,0x19,0x00,0x00,0x00, - 0x00,0x02,0x00,0x1d,0x00,0x00,0x02,0x4f,0x05,0x1e, - 0x00,0x0e,0x00,0x14,0x00,0x00,0x13,0x32,0x16,0x15, - 0x11,0x23,0x11,0x34,0x2e,0x02,0x22,0x07,0x35,0x36, - 0x13,0x32,0x14,0x23,0x22,0x34,0xe4,0xd3,0x98,0x98, - 0x12,0x35,0x52,0x89,0x78,0x74,0x66,0x49,0x49,0x46, - 0x05,0x1e,0xa5,0xe1,0xfc,0x68,0x03,0x98,0x53,0x60, - 0x3d,0x14,0x0c,0x82,0x0c,0xfd,0xbe,0xad,0xad,0x00, - 0x00,0x00,0x00,0x02,0x00,0x40,0x00,0x00,0x04,0x2a, - 0x05,0x0a,0x00,0x1c,0x00,0x22,0x00,0x00,0x21,0x23, - 0x03,0x33,0x13,0x3e,0x01,0x37,0x13,0x33,0x03,0x06, - 0x07,0x06,0x07,0x13,0x33,0x32,0x36,0x12,0x37,0x13, - 0x33,0x03,0x02,0x07,0x0e,0x02,0x13,0x32,0x14,0x23, - 0x22,0x34,0x01,0x69,0xbe,0x6b,0x92,0x3b,0x66,0x61, - 0x0f,0x1d,0x8f,0x1d,0x10,0x2c,0x4b,0xd3,0x1b,0x36, - 0x90,0xde,0x7f,0x10,0x34,0x90,0x34,0x1e,0xa8,0x33, - 0x7e,0xaf,0x60,0x49,0x49,0x46,0x05,0x0a,0xfd,0x3a, - 0x25,0xab,0xac,0x01,0x4a,0xfe,0xb7,0xaf,0x66,0xb2, - 0x33,0xfe,0xba,0x9b,0x01,0x0b,0xb0,0x02,0x33,0xfd, - 0xcd,0xfe,0xae,0xc3,0x3c,0x53,0x33,0x02,0x08,0xad, - 0xad,0x00,0x00,0x02,0x00,0x15,0xff,0xfa,0x03,0x30, - 0x05,0x1e,0x00,0x21,0x00,0x27,0x00,0x00,0x13,0x32, - 0x36,0x37,0x36,0x32,0x1e,0x03,0x15,0x11,0x23,0x11, - 0x34,0x27,0x26,0x22,0x07,0x11,0x14,0x06,0x23,0x22, - 0x27,0x35,0x16,0x33,0x32,0x36,0x35,0x11,0x06,0x07, - 0x01,0x32,0x14,0x23,0x22,0x34,0x47,0x03,0x55,0x29, - 0x73,0xe2,0x88,0x4f,0x2e,0x0e,0x97,0x62,0x2f,0x82, - 0x51,0x4f,0x74,0x25,0x38,0x30,0x05,0x2d,0x26,0x19, - 0x3d,0x01,0x93,0x49,0x49,0x46,0x04,0xff,0x0c,0x05, - 0x0e,0x2c,0x45,0x6b,0x68,0x44,0xfc,0x6a,0x03,0x96, - 0xca,0x28,0x14,0x05,0xfc,0xca,0xcb,0x9c,0x0d,0x84, - 0x09,0x3f,0x3f,0x03,0x89,0x03,0x08,0xfe,0x5e,0xad, - 0xad,0x00,0x00,0x02,0x00,0x64,0x00,0x00,0x01,0x1d, - 0x06,0x06,0x00,0x05,0x00,0x09,0x00,0x00,0x13,0x32, - 0x14,0x23,0x22,0x34,0x13,0x11,0x33,0x11,0xaa,0x49, - 0x49,0x46,0x22,0x97,0x06,0x06,0xad,0xad,0xf9,0xfa, - 0x05,0x0a,0xfa,0xf6,0x00,0x00,0x00,0x01,0xff,0x12, - 0x05,0xa9,0x00,0xe8,0x05,0xfc,0x00,0x03,0x00,0x00, - 0x13,0x21,0x35,0x21,0xe8,0xfe,0x2a,0x01,0xd6,0x05, - 0xa9,0x53,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0xc6, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11, - 0x00,0x24,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, - 0x00,0x1a,0x00,0x6c,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x02,0x00,0x07,0x00,0x97,0x00,0x01,0x00,0x00, - 0x00,0x00,0x00,0x03,0x00,0x2a,0x00,0xf5,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x1a,0x01,0x56, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x3c, - 0x01,0xeb,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x06, - 0x00,0x1f,0x02,0x68,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x12,0x00,0x1d,0x02,0xc4,0x00,0x03,0x00,0x01, - 0x04,0x09,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x03, - 0x00,0x01,0x04,0x09,0x00,0x01,0x00,0x34,0x00,0x36, - 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x02,0x00,0x0e, - 0x00,0x87,0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x03, - 0x00,0x54,0x00,0x9f,0x00,0x03,0x00,0x01,0x04,0x09, - 0x00,0x04,0x00,0x34,0x01,0x20,0x00,0x03,0x00,0x01, - 0x04,0x09,0x00,0x05,0x00,0x78,0x01,0x71,0x00,0x03, - 0x00,0x01,0x04,0x09,0x00,0x06,0x00,0x3e,0x02,0x28, - 0x00,0x03,0x00,0x01,0x04,0x09,0x00,0x12,0x00,0x3a, - 0x02,0x88,0x00,0x63,0x00,0x6f,0x00,0x70,0x00,0x79, - 0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74, - 0x00,0x20,0x00,0x6d,0x00,0x69,0x00,0x73,0x00,0x73, - 0x00,0x69,0x00,0x6e,0x00,0x67,0x00,0x00,0x63,0x6f, - 0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x6d,0x69, - 0x73,0x73,0x69,0x6e,0x67,0x00,0x00,0x4f,0x00,0x70, - 0x00,0x65,0x00,0x6e,0x00,0x20,0x00,0x53,0x00,0x61, - 0x00,0x6e,0x00,0x73,0x00,0x20,0x00,0x48,0x00,0x65, - 0x00,0x62,0x00,0x72,0x00,0x65,0x00,0x77,0x00,0x20, - 0x00,0x43,0x00,0x6f,0x00,0x6e,0x00,0x64,0x00,0x65, - 0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64,0x00,0x00, - 0x4f,0x70,0x65,0x6e,0x20,0x53,0x61,0x6e,0x73,0x20, - 0x48,0x65,0x62,0x72,0x65,0x77,0x20,0x43,0x6f,0x6e, - 0x64,0x65,0x6e,0x73,0x65,0x64,0x00,0x00,0x52,0x00, - 0x65,0x00,0x67,0x00,0x75,0x00,0x6c,0x00,0x61,0x00, - 0x72,0x00,0x00,0x52,0x65,0x67,0x75,0x6c,0x61,0x72, - 0x00,0x00,0x32,0x00,0x2e,0x00,0x30,0x00,0x30,0x00, - 0x31,0x00,0x3b,0x00,0x55,0x00,0x4b,0x00,0x57,0x00, - 0x4e,0x00,0x3b,0x00,0x4f,0x00,0x70,0x00,0x65,0x00, - 0x6e,0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73,0x00, - 0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65,0x00, - 0x77,0x00,0x43,0x00,0x6f,0x00,0x6e,0x00,0x64,0x00, - 0x65,0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64,0x00, - 0x2d,0x00,0x52,0x00,0x65,0x00,0x67,0x00,0x75,0x00, - 0x6c,0x00,0x61,0x00,0x72,0x00,0x00,0x32,0x2e,0x30, - 0x30,0x31,0x3b,0x55,0x4b,0x57,0x4e,0x3b,0x4f,0x70, - 0x65,0x6e,0x53,0x61,0x6e,0x73,0x48,0x65,0x62,0x72, - 0x65,0x77,0x43,0x6f,0x6e,0x64,0x65,0x6e,0x73,0x65, - 0x64,0x2d,0x52,0x65,0x67,0x75,0x6c,0x61,0x72,0x00, - 0x00,0x4f,0x00,0x70,0x00,0x65,0x00,0x6e,0x00,0x20, - 0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73,0x00,0x20, - 0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65, - 0x00,0x77,0x00,0x20,0x00,0x43,0x00,0x6f,0x00,0x6e, - 0x00,0x64,0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65, - 0x00,0x64,0x00,0x00,0x4f,0x70,0x65,0x6e,0x20,0x53, - 0x61,0x6e,0x73,0x20,0x48,0x65,0x62,0x72,0x65,0x77, - 0x20,0x43,0x6f,0x6e,0x64,0x65,0x6e,0x73,0x65,0x64, - 0x00,0x00,0x56,0x00,0x65,0x00,0x72,0x00,0x73,0x00, - 0x69,0x00,0x6f,0x00,0x6e,0x00,0x20,0x00,0x32,0x00, - 0x2e,0x00,0x30,0x00,0x30,0x00,0x31,0x00,0x3b,0x00, - 0x50,0x00,0x53,0x00,0x20,0x00,0x30,0x00,0x30,0x00, - 0x32,0x00,0x2e,0x00,0x30,0x00,0x30,0x00,0x31,0x00, - 0x3b,0x00,0x68,0x00,0x6f,0x00,0x74,0x00,0x63,0x00, - 0x6f,0x00,0x6e,0x00,0x76,0x00,0x20,0x00,0x31,0x00, - 0x2e,0x00,0x30,0x00,0x2e,0x00,0x37,0x00,0x30,0x00, - 0x3b,0x00,0x6d,0x00,0x61,0x00,0x6b,0x00,0x65,0x00, - 0x6f,0x00,0x74,0x00,0x66,0x00,0x2e,0x00,0x6c,0x00, - 0x69,0x00,0x62,0x00,0x32,0x00,0x2e,0x00,0x35,0x00, - 0x2e,0x00,0x35,0x00,0x38,0x00,0x33,0x00,0x32,0x00, - 0x39,0x00,0x00,0x56,0x65,0x72,0x73,0x69,0x6f,0x6e, - 0x20,0x32,0x2e,0x30,0x30,0x31,0x3b,0x50,0x53,0x20, - 0x30,0x30,0x32,0x2e,0x30,0x30,0x31,0x3b,0x68,0x6f, - 0x74,0x63,0x6f,0x6e,0x76,0x20,0x31,0x2e,0x30,0x2e, - 0x37,0x30,0x3b,0x6d,0x61,0x6b,0x65,0x6f,0x74,0x66, - 0x2e,0x6c,0x69,0x62,0x32,0x2e,0x35,0x2e,0x35,0x38, - 0x33,0x32,0x39,0x00,0x00,0x4f,0x00,0x70,0x00,0x65, - 0x00,0x6e,0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73, - 0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65, - 0x00,0x77,0x00,0x43,0x00,0x6f,0x00,0x6e,0x00,0x64, - 0x00,0x65,0x00,0x6e,0x00,0x73,0x00,0x65,0x00,0x64, - 0x00,0x2d,0x00,0x52,0x00,0x65,0x00,0x67,0x00,0x75, - 0x00,0x6c,0x00,0x61,0x00,0x72,0x00,0x00,0x4f,0x70, - 0x65,0x6e,0x53,0x61,0x6e,0x73,0x48,0x65,0x62,0x72, - 0x65,0x77,0x43,0x6f,0x6e,0x64,0x65,0x6e,0x73,0x65, - 0x64,0x2d,0x52,0x65,0x67,0x75,0x6c,0x61,0x72,0x00, - 0x00,0x4f,0x00,0x70,0x00,0x65,0x00,0x6e,0x00,0x20, - 0x00,0x53,0x00,0x61,0x00,0x6e,0x00,0x73,0x00,0x20, - 0x00,0x48,0x00,0x65,0x00,0x62,0x00,0x72,0x00,0x65, - 0x00,0x77,0x00,0x20,0x00,0x43,0x00,0x6f,0x00,0x6e, - 0x00,0x64,0x00,0x20,0x00,0x52,0x00,0x65,0x00,0x67, - 0x00,0x75,0x00,0x6c,0x00,0x61,0x00,0x72,0x00,0x00, - 0x4f,0x70,0x65,0x6e,0x20,0x53,0x61,0x6e,0x73,0x20, - 0x48,0x65,0x62,0x72,0x65,0x77,0x20,0x43,0x6f,0x6e, - 0x64,0x20,0x52,0x65,0x67,0x75,0x6c,0x61,0x72,0x00, - 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xb5, - 0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x01,0x36,0x00,0x00,0x00,0x01,0x00,0x02, - 0x01,0x02,0x00,0x03,0x00,0x04,0x00,0x05,0x00,0x06, - 0x00,0x07,0x00,0x08,0x00,0x09,0x00,0x0a,0x00,0x0b, - 0x00,0x0c,0x00,0x0d,0x00,0x0e,0x00,0x0f,0x00,0x10, - 0x00,0x11,0x00,0x12,0x00,0x13,0x00,0x14,0x00,0x15, - 0x00,0x16,0x00,0x17,0x00,0x18,0x00,0x19,0x00,0x1a, - 0x00,0x1b,0x00,0x1c,0x00,0x1d,0x00,0x1e,0x00,0x1f, - 0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00,0x24, - 0x00,0x25,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29, - 0x00,0x2a,0x00,0x2b,0x00,0x2c,0x00,0x2d,0x00,0x2e, - 0x00,0x2f,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33, - 0x00,0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38, - 0x00,0x39,0x00,0x3a,0x00,0x3b,0x00,0x3c,0x00,0x3d, - 0x00,0x3e,0x00,0x3f,0x00,0x40,0x00,0x41,0x00,0x42, - 0x00,0x43,0x00,0x44,0x00,0x45,0x00,0x46,0x00,0x47, - 0x00,0x48,0x00,0x49,0x00,0x4a,0x00,0x4b,0x00,0x4c, - 0x00,0x4d,0x00,0x4e,0x00,0x4f,0x00,0x50,0x00,0x51, - 0x00,0x52,0x00,0x53,0x00,0x54,0x00,0x55,0x00,0x56, - 0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5a,0x00,0x5b, - 0x00,0x5c,0x00,0x5d,0x00,0x5e,0x00,0x5f,0x00,0x60, - 0x00,0x61,0x01,0x03,0x00,0xa3,0x00,0x84,0x00,0x85, - 0x00,0xbd,0x00,0x96,0x00,0xe8,0x00,0x86,0x00,0x8e, - 0x00,0x8b,0x00,0x9d,0x00,0xa9,0x00,0xa4,0x01,0x04, - 0x00,0x8a,0x01,0x05,0x00,0x83,0x00,0x93,0x00,0xf2, - 0x00,0xf3,0x00,0x8d,0x01,0x06,0x00,0x88,0x00,0xc3, - 0x00,0xde,0x00,0xf1,0x00,0x9e,0x00,0xaa,0x00,0xf5, - 0x00,0xf4,0x00,0xf6,0x00,0xa2,0x00,0xad,0x00,0xc9, - 0x00,0xc7,0x00,0xae,0x00,0x62,0x00,0x63,0x00,0x90, - 0x00,0x64,0x00,0xcb,0x00,0x65,0x00,0xc8,0x00,0xca, - 0x00,0xcf,0x00,0xcc,0x00,0xcd,0x00,0xce,0x00,0xe9, - 0x00,0x66,0x00,0xd3,0x00,0xd0,0x00,0xd1,0x00,0xaf, - 0x00,0x67,0x00,0xf0,0x00,0x91,0x00,0xd6,0x00,0xd4, - 0x00,0xd5,0x00,0x68,0x00,0xeb,0x00,0xed,0x00,0x89, - 0x00,0x6a,0x00,0x69,0x00,0x6b,0x00,0x6d,0x00,0x6c, - 0x00,0x6e,0x00,0xa0,0x00,0x6f,0x00,0x71,0x00,0x70, - 0x00,0x72,0x00,0x73,0x00,0x75,0x00,0x74,0x00,0x76, - 0x00,0x77,0x00,0xea,0x00,0x78,0x00,0x7a,0x00,0x79, - 0x00,0x7b,0x00,0x7d,0x00,0x7c,0x00,0xb8,0x00,0xa1, - 0x00,0x7f,0x00,0x7e,0x00,0x80,0x00,0x81,0x00,0xec, - 0x00,0xee,0x00,0xba,0x00,0xd7,0x00,0xb0,0x00,0xb1, - 0x00,0xe4,0x00,0xe5,0x00,0xbb,0x00,0xe6,0x00,0xe7, - 0x00,0xa6,0x00,0xd8,0x00,0xe1,0x00,0xdb,0x00,0xdc, - 0x00,0xdd,0x00,0xe0,0x00,0xd9,0x00,0xdf,0x01,0x07, - 0x01,0x08,0x01,0x09,0x01,0x0a,0x01,0x0b,0x01,0x0c, - 0x01,0x0d,0x01,0x0e,0x01,0x0f,0x01,0x10,0x01,0x11, - 0x01,0x12,0x01,0x13,0x01,0x14,0x01,0x15,0x01,0x16, - 0x01,0x17,0x01,0x18,0x01,0x19,0x01,0x1a,0x01,0x1b, - 0x01,0x1c,0x01,0x1d,0x01,0x1e,0x01,0x1f,0x01,0x20, - 0x01,0x21,0x01,0x22,0x01,0x23,0x01,0x24,0x01,0x25, - 0x01,0x26,0x01,0x27,0x01,0x28,0x01,0x29,0x01,0x2a, - 0x01,0x2b,0x01,0x2c,0x01,0x2d,0x01,0x2e,0x01,0x2f, - 0x01,0x30,0x01,0x31,0x01,0x32,0x01,0x33,0x01,0x34, - 0x01,0x35,0x00,0xb2,0x00,0xb3,0x00,0xb6,0x00,0xb7, - 0x00,0xc4,0x00,0xb4,0x00,0xb5,0x00,0xc5,0x00,0x82, - 0x00,0xc2,0x00,0x87,0x00,0xab,0x00,0xc6,0x00,0xbe, - 0x00,0xbf,0x00,0xbc,0x01,0x36,0x01,0x37,0x00,0x8c, - 0x01,0x38,0x01,0x39,0x01,0x3a,0x01,0x3b,0x01,0x3c, - 0x01,0x3d,0x01,0x3e,0x01,0x3f,0x01,0x40,0x01,0x41, - 0x01,0x42,0x01,0x43,0x01,0x44,0x01,0x45,0x01,0x46, - 0x01,0x47,0x01,0x48,0x01,0x49,0x01,0x4a,0x01,0x4b, - 0x01,0x4c,0x01,0x4d,0x01,0x4e,0x01,0x4f,0x01,0x50, - 0x01,0x51,0x01,0x52,0x01,0x53,0x01,0x54,0x01,0x55, - 0x01,0x56,0x01,0x57,0x02,0x43,0x52,0x07,0x75,0x6e, - 0x69,0x30,0x30,0x41,0x30,0x07,0x75,0x6e,0x69,0x30, - 0x30,0x41,0x44,0x09,0x6f,0x76,0x65,0x72,0x73,0x63, - 0x6f,0x72,0x65,0x07,0x75,0x6e,0x69,0x30,0x30,0x42, - 0x35,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x30,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x42,0x31,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x42,0x32,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x42,0x33,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, - 0x34,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x35,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x42,0x36,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x42,0x37,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x42,0x38,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, - 0x39,0x07,0x75,0x6e,0x69,0x30,0x35,0x42,0x41,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x42,0x42,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x42,0x43,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x42,0x44,0x07,0x75,0x6e,0x69,0x30,0x35,0x42, - 0x45,0x07,0x75,0x6e,0x69,0x30,0x35,0x43,0x31,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x43,0x32,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x43,0x37,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x44,0x30,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, - 0x31,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x32,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x44,0x33,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x44,0x34,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x44,0x35,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, - 0x36,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x37,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x44,0x38,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x44,0x39,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x44,0x41,0x07,0x75,0x6e,0x69,0x30,0x35,0x44, - 0x42,0x07,0x75,0x6e,0x69,0x30,0x35,0x44,0x43,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x44,0x44,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x44,0x45,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x44,0x46,0x07,0x75,0x6e,0x69,0x30,0x35,0x45, - 0x30,0x07,0x75,0x6e,0x69,0x30,0x35,0x45,0x31,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x45,0x32,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x45,0x33,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x45,0x34,0x07,0x75,0x6e,0x69,0x30,0x35,0x45, - 0x35,0x07,0x75,0x6e,0x69,0x30,0x35,0x45,0x36,0x07, - 0x75,0x6e,0x69,0x30,0x35,0x45,0x37,0x07,0x75,0x6e, - 0x69,0x30,0x35,0x45,0x38,0x07,0x75,0x6e,0x69,0x30, - 0x35,0x45,0x39,0x07,0x75,0x6e,0x69,0x30,0x35,0x45, - 0x41,0x08,0x67,0x65,0x72,0x65,0x73,0x68,0x68,0x62, - 0x0b,0x67,0x65,0x72,0x73,0x68,0x61,0x79,0x69,0x6d, - 0x68,0x62,0x07,0x75,0x6e,0x69,0x32,0x30,0x41,0x41, - 0x04,0x45,0x75,0x72,0x6f,0x07,0x75,0x6e,0x69,0x46, - 0x42,0x30,0x31,0x07,0x75,0x6e,0x69,0x46,0x42,0x30, - 0x32,0x07,0x75,0x6e,0x69,0x46,0x42,0x32,0x41,0x07, - 0x75,0x6e,0x69,0x46,0x42,0x32,0x42,0x13,0x73,0x68, - 0x69,0x6e,0x64,0x61,0x67,0x65,0x73,0x68,0x73,0x68, - 0x69,0x6e,0x64,0x6f,0x74,0x68,0x62,0x12,0x73,0x68, - 0x69,0x6e,0x64,0x61,0x67,0x65,0x73,0x68,0x73,0x69, - 0x6e,0x64,0x6f,0x74,0x68,0x62,0x0b,0x61,0x6c,0x65, - 0x66,0x70,0x61,0x74,0x61,0x68,0x68,0x62,0x0c,0x61, - 0x6c,0x65,0x66,0x71,0x61,0x6d,0x61,0x74,0x73,0x68, - 0x62,0x0c,0x61,0x6c,0x65,0x66,0x64,0x61,0x67,0x65, - 0x73,0x68,0x68,0x62,0x0b,0x62,0x65,0x74,0x64,0x61, - 0x67,0x65,0x73,0x68,0x68,0x62,0x0d,0x67,0x69,0x6d, - 0x65,0x6c,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, - 0x0d,0x64,0x61,0x6c,0x65,0x74,0x64,0x61,0x67,0x65, - 0x73,0x68,0x68,0x62,0x0a,0x68,0x65,0x64,0x61,0x67, - 0x65,0x73,0x68,0x68,0x62,0x07,0x75,0x6e,0x69,0x46, - 0x42,0x33,0x35,0x0d,0x7a,0x61,0x79,0x69,0x6e,0x64, - 0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x74,0x65, - 0x74,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b, - 0x79,0x6f,0x64,0x64,0x61,0x67,0x65,0x73,0x68,0x68, - 0x62,0x10,0x66,0x69,0x6e,0x61,0x6c,0x6b,0x61,0x66, - 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x6b, - 0x61,0x66,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, - 0x0d,0x6c,0x61,0x6d,0x65,0x64,0x64,0x61,0x67,0x65, - 0x73,0x68,0x68,0x62,0x0b,0x6d,0x65,0x6d,0x64,0x61, - 0x67,0x65,0x73,0x68,0x68,0x62,0x0b,0x6e,0x75,0x6e, - 0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0e,0x73, - 0x61,0x6d,0x65,0x6b,0x68,0x64,0x61,0x67,0x65,0x73, - 0x68,0x68,0x62,0x0f,0x66,0x69,0x6e,0x61,0x6c,0x70, - 0x65,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0a, - 0x70,0x65,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62, - 0x0d,0x74,0x73,0x61,0x64,0x69,0x64,0x61,0x67,0x65, - 0x73,0x68,0x68,0x62,0x0b,0x71,0x6f,0x66,0x64,0x61, - 0x67,0x65,0x73,0x68,0x68,0x62,0x0c,0x72,0x65,0x73, - 0x68,0x64,0x61,0x67,0x65,0x73,0x68,0x68,0x62,0x0c, - 0x73,0x68,0x69,0x6e,0x64,0x61,0x67,0x65,0x73,0x68, - 0x68,0x62,0x0b,0x74,0x61,0x76,0x64,0x61,0x67,0x65, - 0x73,0x68,0x68,0x62,0x07,0x75,0x6e,0x69,0x46,0x42, - 0x34,0x42,0x07,0x72,0x61,0x66,0x65,0x68,0x68,0x62, - 0x00,0x01,0x00,0x01,0xff,0xff,0x00,0x0f,0x00,0x00, - 0x00,0x01,0x00,0x00,0x00,0x00,0xcc,0x6d,0xb1,0x55, - 0x00,0x00,0x00,0x00,0xcd,0x64,0xfe,0x43,0x00,0x00, - 0x00,0x00,0xcd,0xc1,0x1c,0x70,0x00,0x01,0x00,0x00, - 0x00,0x0e,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00, - 0x00,0x02,0x00,0x05,0x00,0x03,0x00,0xd3,0x00,0x01, - 0x00,0xd4,0x00,0xe1,0x00,0x03,0x00,0xe2,0x00,0xe2, - 0x00,0x01,0x00,0xe3,0x00,0xe5,0x00,0x03,0x00,0xe6, - 0x01,0x35,0x00,0x01,0x00,0x04,0x00,0x00,0x00,0x02, - 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0a,0x00,0x1e, - 0x00,0x2c,0x00,0x01,0x68,0x65,0x62,0x72,0x00,0x08, - 0x00,0x04,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x01, - 0x00,0x00,0x00,0x01,0x6d,0x61,0x72,0x6b,0x00,0x08, - 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x04, - 0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x01, - 0x03,0x78,0x03,0x6e,0x00,0x04,0x03,0x88,0x00,0x0c, - 0x00,0x1b,0x00,0xda,0x00,0xe0,0x00,0xe6,0x00,0xec, - 0x00,0xf2,0x00,0xf8,0x00,0xfe,0x01,0x04,0x01,0x0a, - 0x01,0x10,0x01,0x16,0x01,0x1c,0x01,0x22,0x01,0x28, - 0x01,0x2e,0x01,0x34,0x01,0x3a,0x01,0x40,0x01,0x46, - 0x01,0x4c,0x01,0x52,0x01,0x58,0x01,0x5e,0x01,0x64, - 0x01,0x6a,0x01,0x70,0x01,0x76,0x01,0x7c,0x01,0x82, - 0x01,0x88,0x01,0x8e,0x01,0x94,0x01,0x9a,0x01,0xa0, - 0x01,0xa6,0x01,0xac,0x01,0xb2,0x01,0xb8,0x01,0xbe, - 0x01,0xc4,0x01,0xca,0x01,0xd0,0x01,0xd6,0x01,0xdc, - 0x01,0xe2,0x01,0xe8,0x01,0xee,0x01,0xf4,0x01,0xfa, - 0x02,0x00,0x02,0x06,0x02,0x0c,0x02,0x12,0x02,0x18, - 0x02,0x1e,0x02,0x24,0x02,0x2a,0x02,0x30,0x02,0x36, - 0x02,0x3c,0x02,0x42,0x02,0x48,0x02,0x4e,0x02,0x54, - 0x02,0x5a,0x02,0x60,0x02,0x66,0x02,0x6c,0x02,0x72, - 0x02,0x78,0x02,0x7e,0x02,0x84,0x02,0x8a,0x02,0x90, - 0x02,0x96,0x02,0x9c,0x02,0xa2,0x02,0xa8,0x02,0xae, - 0x02,0xb4,0x02,0xba,0x02,0xc0,0x02,0xc6,0x02,0xcc, - 0x02,0xd2,0x02,0xd8,0x02,0xde,0x02,0xe4,0x02,0xea, - 0x02,0xf0,0x02,0xf6,0x02,0xfc,0x03,0x02,0x03,0x08, - 0x03,0x0e,0x03,0x14,0x03,0x1a,0x03,0x20,0x03,0x26, - 0x03,0x2c,0x03,0x32,0x03,0x38,0x03,0x3e,0x03,0x44, - 0x03,0x4a,0x03,0x50,0x03,0x56,0x03,0x5c,0x00,0x01, - 0x01,0xae,0x00,0x00,0x00,0x01,0x00,0x71,0x04,0x67, - 0x00,0x01,0x01,0x61,0x00,0x6b,0x00,0x01,0x00,0x00, - 0x00,0x00,0x00,0x01,0x01,0x95,0x00,0x00,0x00,0x01, - 0x00,0x93,0x04,0x67,0x00,0x01,0x01,0x25,0x02,0x00, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x5e, - 0x00,0x00,0x00,0x01,0x00,0xc8,0x04,0x67,0x00,0x01, - 0x00,0xf7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x01,0x01,0xb1,0x00,0x00,0x00,0x01,0x00,0x57, - 0x04,0x67,0x00,0x01,0x00,0xcf,0x02,0x00,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xde,0x00,0x00, - 0x00,0x01,0x00,0xb4,0x04,0x67,0x00,0x01,0x01,0xde, - 0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, - 0x00,0xd2,0x00,0x00,0x00,0x01,0x00,0xab,0x04,0x67, - 0x00,0x01,0xff,0xf1,0x02,0x00,0x00,0x01,0x00,0x00, - 0x00,0x00,0x00,0x01,0x00,0xf1,0x00,0x00,0x00,0x01, - 0x00,0x90,0x04,0x67,0x00,0x01,0x00,0x1b,0x02,0x00, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xde, - 0x00,0x00,0x00,0x01,0x00,0xbb,0x04,0x67,0x00,0x01, - 0x01,0xde,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x01,0x01,0xd4,0x00,0x00,0x00,0x01,0x00,0x78, - 0x04,0x67,0x00,0x01,0x01,0xd4,0x02,0x00,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xcf,0x00,0x00, - 0x00,0x01,0x00,0xa7,0x04,0x67,0x00,0x01,0x00,0x1c, - 0x02,0xda,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, - 0x00,0x35,0x01,0x68,0x00,0x01,0x00,0x64,0x04,0x67, - 0x00,0x01,0x00,0xe9,0x02,0x00,0x00,0x01,0x00,0x00, - 0x00,0x00,0x00,0x01,0x01,0x58,0x00,0x00,0x00,0x01, - 0x00,0x64,0x04,0x67,0x00,0x01,0x00,0xd5,0x02,0x00, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x53, - 0x00,0x00,0x00,0x01,0xff,0xb7,0x04,0x67,0x00,0x01, - 0x00,0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x01,0x01,0xde,0x00,0x00,0x00,0x01,0x00,0xa7, - 0x04,0x67,0x00,0x01,0x01,0xde,0x02,0x00,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xd3,0x00,0x00, - 0x00,0x01,0x00,0x6b,0x04,0x67,0x00,0x01,0x01,0xd3, - 0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, - 0xff,0x09,0x01,0x6f,0x00,0x01,0x00,0x6b,0x04,0x67, - 0x00,0x01,0x00,0x0d,0x02,0x00,0x00,0x01,0x00,0x00, - 0x00,0x00,0x00,0x01,0x01,0x35,0x00,0x00,0x00,0x01, - 0x00,0x85,0x04,0x67,0x00,0x01,0x00,0xbb,0x02,0x00, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xcf, - 0x00,0x00,0x00,0x01,0x00,0xa7,0x04,0x67,0x00,0x01, - 0x01,0xcf,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x01,0x01,0xbc,0x00,0x00,0x00,0x01,0x00,0x50, - 0x04,0x67,0x00,0x01,0x01,0xf4,0x02,0x44,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x18,0x01,0x6f, - 0x00,0x01,0x00,0x7f,0x04,0x67,0x00,0x01,0x01,0xd8, - 0x02,0xe4,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, - 0x01,0xc4,0x00,0x00,0x00,0x01,0x00,0x93,0x04,0x67, - 0x00,0x01,0x01,0xc4,0x02,0xe4,0x00,0x01,0x00,0x00, - 0x00,0x00,0x00,0x01,0xff,0x4c,0x01,0x6f,0x00,0x01, - 0x00,0x38,0x04,0x67,0x00,0x01,0x01,0x6e,0x02,0x00, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0xa3, - 0x00,0x00,0x00,0x01,0x00,0x7f,0x04,0x67,0x00,0x01, - 0x00,0xa7,0x01,0xab,0x00,0x01,0x00,0x00,0x00,0x00, - 0x00,0x01,0x02,0xc6,0x00,0x00,0x00,0x01,0x00,0xa7, - 0x04,0x67,0x00,0x01,0x01,0x9f,0x02,0x26,0x00,0x01, - 0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x08,0x00,0x00, - 0x00,0x01,0x00,0x50,0x04,0x67,0x00,0x01,0x00,0xf7, - 0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01, - 0x02,0x34,0x00,0x00,0x00,0x01,0x00,0x6b,0x04,0x67, - 0x00,0x01,0x02,0x30,0x01,0x2c,0x00,0x01,0x03,0xf3, - 0x04,0x67,0x00,0x01,0x01,0xda,0x00,0x00,0x00,0x01, - 0x00,0x6b,0x04,0x67,0x00,0x01,0x01,0xda,0x02,0x00, - 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x01, - 0x00,0xe6,0x01,0x00,0x00,0x00,0x00,0x02,0x00,0x02, - 0x00,0xd4,0x00,0xe1,0x00,0x00,0x00,0xe3,0x00,0xe5, - 0x00,0x0e,0x00,0x11,0x00,0x00,0x00,0x46,0x00,0x00, - 0x00,0x4c,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x58, - 0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00, - 0x00,0x6a,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x76, - 0x00,0x01,0x00,0x7c,0x00,0x01,0x00,0x82,0x00,0x00, - 0x00,0x88,0x00,0x02,0x00,0x8e,0x00,0x00,0x00,0x94, - 0x00,0x03,0x00,0x9a,0x00,0x01,0x00,0xa0,0x00,0x00, - 0x00,0xa6,0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x01, - 0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00,0x00,0x6e, - 0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00, - 0x00,0x6e,0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x01, - 0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00,0x00,0x6e, - 0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00, - 0x04,0x90,0x00,0x01,0x00,0x00,0x04,0x90,0x00,0x01, - 0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00,0x02,0x44, - 0x00,0x01,0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00, - 0x04,0x90,0x00,0x01,0x00,0x00,0x04,0x90,0x00,0x01, - 0x00,0x00,0x00,0x6e,0x00,0x01,0x00,0x00,0x00,0x0a, - 0x00,0x1c,0x00,0x1e,0x00,0x01,0x68,0x65,0x62,0x72, - 0x00,0x08,0x00,0x04,0x00,0x00,0x00,0x00,0xff,0xff, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, - 0x00,0x00,0x00,0x00 -}; - diff --git a/data/converted/option_arrow_svg.cpp b/data/converted/option_arrow_svg.cpp deleted file mode 100644 index edd4c0bbc8..0000000000 --- a/data/converted/option_arrow_svg.cpp +++ /dev/null @@ -1,92 +0,0 @@ -// this file was auto-generated from "option_arrow.svg" by res2h - -#include "../Resources.h" - -const uint16_t option_arrow_svg_size = 839; -const uint8_t option_arrow_svg_data[839] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32, - 0x2e,0x31,0x35,0x38,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x31,0x2e,0x39, - 0x31,0x33,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x31, - 0x32,0x2e,0x31,0x35,0x38,0x20,0x32,0x31,0x2e,0x39, - 0x31,0x33,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x31,0x32,0x2e,0x31,0x35,0x38,0x20,0x32,0x31, - 0x2e,0x39,0x31,0x33,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x67, - 0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37,0x37, - 0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x30,0x2e, - 0x37,0x35,0x2c,0x32,0x31,0x2e,0x39,0x31,0x33,0x63, - 0x2d,0x30,0x2e,0x31,0x2c,0x30,0x2d,0x30,0x2e,0x32, - 0x2d,0x30,0x2e,0x30,0x32,0x2d,0x30,0x2e,0x32,0x39, - 0x34,0x2d,0x30,0x2e,0x30,0x36,0x31,0x43,0x30,0x2e, - 0x31,0x37,0x39,0x2c,0x32,0x31,0x2e,0x37,0x33,0x35, - 0x2c,0x30,0x2c,0x32,0x31,0x2e,0x34,0x36,0x33,0x2c, - 0x30,0x2c,0x32,0x31,0x2e,0x31,0x36,0x33,0x56,0x30, - 0x2e,0x37,0x35,0x0a,0x09,0x09,0x63,0x30,0x2d,0x30, - 0x2e,0x33,0x2c,0x30,0x2e,0x31,0x37,0x39,0x2d,0x30, - 0x2e,0x35,0x37,0x32,0x2c,0x30,0x2e,0x34,0x35,0x36, - 0x2d,0x30,0x2e,0x36,0x39,0x43,0x30,0x2e,0x37,0x33, - 0x2d,0x30,0x2e,0x30,0x35,0x37,0x2c,0x31,0x2e,0x30, - 0x35,0x32,0x2c,0x30,0x2c,0x31,0x2e,0x32,0x36,0x39, - 0x2c,0x30,0x2e,0x32,0x30,0x38,0x6c,0x31,0x30,0x2e, - 0x36,0x35,0x38,0x2c,0x31,0x30,0x2e,0x32,0x30,0x36, - 0x63,0x30,0x2e,0x31,0x34,0x37,0x2c,0x30,0x2e,0x31, - 0x34,0x31,0x2c,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30, - 0x2e,0x33,0x33,0x37,0x2c,0x30,0x2e,0x32,0x33,0x31, - 0x2c,0x30,0x2e,0x35,0x34,0x32,0x0a,0x09,0x09,0x73, - 0x2d,0x30,0x2e,0x30,0x38,0x34,0x2c,0x30,0x2e,0x34, - 0x2d,0x30,0x2e,0x32,0x33,0x31,0x2c,0x30,0x2e,0x35, - 0x34,0x32,0x4c,0x31,0x2e,0x32,0x36,0x39,0x2c,0x32, - 0x31,0x2e,0x37,0x30,0x35,0x43,0x31,0x2e,0x31,0x32, - 0x36,0x2c,0x32,0x31,0x2e,0x38,0x34,0x2c,0x30,0x2e, - 0x39,0x33,0x39,0x2c,0x32,0x31,0x2e,0x39,0x31,0x33, - 0x2c,0x30,0x2e,0x37,0x35,0x2c,0x32,0x31,0x2e,0x39, - 0x31,0x33,0x7a,0x20,0x4d,0x31,0x2e,0x35,0x2c,0x32, - 0x2e,0x35,0x30,0x36,0x76,0x31,0x36,0x2e,0x38,0x39, - 0x39,0x6c,0x38,0x2e,0x38,0x32,0x34,0x2d,0x38,0x2e, - 0x34,0x35,0x4c,0x31,0x2e,0x35,0x2c,0x32,0x2e,0x35, - 0x30,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x67, - 0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/scroll_gradient_png.cpp b/data/converted/scroll_gradient_png.cpp deleted file mode 100644 index ee0f88a0ce..0000000000 --- a/data/converted/scroll_gradient_png.cpp +++ /dev/null @@ -1,8347 +0,0 @@ -// this file was auto-generated from "scroll_gradient.png" by res2h - -#include "../Resources.h" - -const uint32_t scroll_gradient_png_size = 83384; -const uint8_t scroll_gradient_png_data[83384] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x02,0x40, - 0x00,0x00,0x01,0x44,0x08,0x06,0x00,0x00,0x00,0xcf, - 0xe3,0x81,0xbd,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,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,0x04,0x67, - 0x41,0x4d,0x41,0x00,0x00,0xb1,0x8e,0x7c,0xfb,0x51, - 0x93,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,0x01,0x3a,0xd3,0x49, - 0x44,0x41,0x54,0x78,0xda,0xa4,0xbd,0x4d,0x92,0x24, - 0x49,0xcf,0xa4,0xe7,0x16,0x55,0x43,0x11,0x72,0xc1, - 0x39,0x00,0x17,0x3c,0x13,0xc9,0xab,0xf1,0x1e,0x3c, - 0x13,0x17,0x3c,0xc0,0x70,0x31,0xb3,0xe0,0x54,0x82, - 0x8b,0x4e,0xcf,0x46,0xa8,0xeb,0xa3,0x40,0xd4,0xd7, - 0x22,0xaf,0xbc,0xdd,0x55,0x99,0x11,0xfe,0x63,0x06, - 0x03,0x14,0x0a,0xd5,0x73,0xce,0xf9,0x3f,0xcf,0x39, - 0xff,0xcb,0x39,0xe7,0xbf,0x55,0xd5,0x75,0xff,0x73, - 0xce,0xb9,0xbe,0xff,0xbb,0xaa,0xea,0x3a,0xe7,0x5c, - 0xe7,0x9c,0xeb,0xeb,0xeb,0xeb,0x3a,0xe7,0xbc,0xfd, - 0xdc,0xfd,0x33,0xfd,0x9f,0xfb,0x77,0xaa,0xaa,0xfa, - 0xcf,0xf7,0xcf,0xd6,0xdf,0xed,0x9f,0x7f,0x7f,0xf7, - 0x75,0x5d,0xd7,0xeb,0xf5,0xfa,0xf9,0xcc,0xfe,0x7b, - 0xf0,0x79,0x17,0x5d,0x4b,0xff,0x1d,0xbd,0xd7,0xfb, - 0xef,0xf4,0x77,0xbf,0xff,0xbe,0x5e,0xaf,0xd7,0xdb, - 0xbd,0xb7,0xeb,0x7c,0xdc,0x1f,0x7d,0x5f,0xfb,0xb9, - 0xc7,0xf3,0xea,0x7f,0xd7,0xaf,0x43,0x3e,0xbb,0xcc, - 0xb5,0x9d,0xfb,0xc3,0xda,0x73,0xbb,0xaa,0xea,0x7a, - 0xbd,0x5e,0x6f,0xdf,0x73,0x3f,0xbf,0xef,0xe7,0xf9, - 0xf8,0x2c,0x79,0x86,0xd5,0xbf,0xbf,0xaf,0x81,0xfe, - 0xa1,0xe6,0x3a,0x4b,0x3f,0x53,0xde,0x51,0xc1,0xf3, - 0xff,0xf9,0xfb,0xfb,0x1a,0xef,0xf5,0x70,0x5f,0xf7, - 0xfd,0x2e,0xf4,0x79,0xeb,0xb5,0xdf,0xdf,0x25,0xd7, - 0x8c,0xef,0xca,0xac,0xcd,0x72,0xeb,0xf5,0x5e,0x87, - 0xf8,0x12,0xe1,0x9f,0xef,0xfb,0x88,0xd7,0xad,0xd7, - 0xda,0xae,0x2d,0xad,0x2f,0xfb,0x0c,0xfb,0x33,0x3f, - 0xe7,0xd4,0xd7,0xd7,0x97,0xfd,0x39,0x5d,0x5f,0xfa, - 0xb9,0x6e,0x4f,0x4d,0xf7,0xd0,0xf7,0xab,0xec,0xe5, - 0xb7,0xdf,0xbd,0xaf,0xa9,0xbf,0x67,0x5a,0x6f,0xfa, - 0x77,0xfd,0x33,0xfb,0xb5,0xbd,0x5e,0xaf,0xc7,0xfd, - 0xa7,0xf7,0x4c,0xef,0x40,0xee,0xfd,0xb8,0xe7,0x7d, - 0xaf,0x07,0xb7,0x04,0xcc,0xe7,0x1c,0x7a,0x9e,0xfd, - 0x9a,0x25,0xce,0x1d,0xbd,0x4e,0x8d,0x8f,0x6d,0xbd, - 0x9c,0xfe,0xbc,0xdd,0x3b,0x6a,0xd7,0x76,0xdc,0x3b, - 0x95,0x3f,0x3b,0xe6,0x1c,0xb0,0xef,0x47,0xe3,0xca, - 0xbf,0x61,0xe3,0xe0,0xbb,0xe8,0xcf,0xd4,0xc4,0x87, - 0xeb,0xf5,0x7a,0x9d,0xfe,0xce,0x75,0x3b,0xa6,0x35, - 0xf0,0x1d,0x0f,0xdd,0x67,0x9f,0xbe,0x7e,0xfa,0xf3, - 0xea,0xd7,0xe4,0xf6,0x6e,0x7f,0x1e,0x43,0x6c,0x7b, - 0xbb,0xff,0xfe,0x0c,0xfa,0xb3,0x71,0xbf,0xdb,0xc2, - 0xb9,0xdd,0x73,0xf7,0x3b,0xd6,0x35,0x76,0xdf,0x2f, - 0xbd,0x6b,0xdd,0x8b,0x6e,0x1d,0x98,0x7d,0x70,0xfa, - 0xba,0xe8,0xb1,0xf4,0xfb,0xef,0x5c,0x2c,0x3b,0xf4, - 0x5c,0xee,0xfb,0xd2,0xbd,0xd6,0xd6,0xfe,0xe3,0xbe, - 0xdb,0x33,0x3d,0x7a,0xf6,0xeb,0xde,0xd2,0xef,0x93, - 0xfd,0x7a,0x20,0xbe,0xfd,0x8f,0xd7,0x75,0xfd,0x3f, - 0xe7,0x9c,0xf3,0x7f,0x9d,0x73,0xfe,0xd7,0xaa,0xfa, - 0xaf,0xb0,0x71,0x8a,0x82,0xee,0x7d,0x08,0x84,0xe0, - 0x51,0x29,0xa8,0x7e,0xff,0xfd,0xe3,0xa0,0x7d,0xbd, - 0x5e,0xa7,0xbe,0xff,0x31,0x2f,0xe2,0x3e,0xf3,0x2b, - 0x04,0x45,0x3a,0x98,0xca,0x1c,0xe6,0x6f,0x7f,0x67, - 0x36,0xdc,0x23,0x19,0x70,0x9f,0x69,0x16,0x52,0x99, - 0x03,0xf8,0xe7,0x10,0x87,0xe0,0x6b,0x13,0x0b,0x3d, - 0x94,0xd3,0xbd,0xca,0x22,0xc0,0x64,0x44,0x13,0xcf, - 0x7e,0xdd,0xba,0x01,0x25,0x00,0xd2,0x7a,0x28,0x0d, - 0x2c,0x12,0x20,0x8b,0x0e,0xd3,0xf6,0x7c,0xf5,0xb9, - 0x1c,0x49,0x02,0xec,0xb5,0x69,0xc2,0xec,0xde,0x55, - 0x4a,0x26,0x5c,0xd2,0x1f,0xde,0xf7,0xb4,0xc6,0xdc, - 0xbb,0xa8,0x74,0x80,0x98,0x03,0xff,0xe7,0xe7,0xe9, - 0x90,0x1d,0xfe,0x29,0x08,0x96,0x36,0xd1,0xa0,0x6b, - 0xbb,0x7f,0xbe,0x07,0x51,0xf7,0xbe,0xe9,0xbb,0x74, - 0xfd,0x6c,0x12,0x39,0x58,0x1f,0x6e,0xbf,0xbe,0x5d, - 0x63,0x0f,0x96,0x26,0xf9,0x7c,0x24,0x50,0x6e,0x0d, - 0xa5,0x6b,0xfa,0x7e,0x0f,0x6f,0x07,0xb3,0x8b,0x15, - 0xb4,0x17,0xfb,0x29,0xe0,0x0a,0x49,0x4a,0xb2,0xf4, - 0x9e,0xf4,0x70,0xef,0x87,0xb4,0xee,0x3b,0x4d,0x50, - 0xdc,0x41,0xaa,0xd7,0xfb,0x5d,0xe8,0x9d,0xc5,0xbb, - 0x39,0xe1,0x3e,0xfb,0x41,0x7f,0x4c,0x8c,0x3a,0x3d, - 0x19,0x80,0xef,0x39,0x94,0x6c,0x7d,0xaf,0xc7,0xa3, - 0xef,0x55,0x13,0x38,0x73,0xd0,0x62,0x32,0xda,0x93, - 0x09,0xb3,0x37,0x8f,0xae,0x37,0x4d,0x3e,0x21,0x6e, - 0x1f,0xf7,0x9e,0x5f,0xaf,0xd7,0x31,0x05,0xfd,0x5b, - 0x12,0x64,0x8a,0xd6,0x93,0x12,0xca,0x90,0xac,0x1e, - 0xb7,0x0f,0x5d,0x62,0xa1,0xef,0xc7,0xc5,0x88,0xfb, - 0xbd,0x40,0x11,0x76,0x1c,0xf8,0x70,0x6f,0xa1,0x3b, - 0x66,0x68,0xa1,0xf4,0x7d,0x8d,0x27,0xe4,0x0a,0xb8, - 0x1e,0xd3,0x5a,0xd1,0x64,0x5b,0x7e,0xe7,0x7f,0x3a, - 0xe7,0xfc,0xdf,0xbf,0xcf,0x39,0xff,0xed,0xba,0xae, - 0xff,0x7a,0xce,0xf9,0xaf,0x26,0x73,0xb6,0x28,0x4b, - 0xaa,0xa8,0xe5,0x06,0xca,0x55,0xe7,0x94,0x1c,0xe9, - 0x21,0xe4,0x92,0x1b,0x45,0x56,0x74,0xa1,0xdc,0x07, - 0xb8,0x79,0xb1,0x36,0x51,0xeb,0xc9,0xca,0x74,0x1d, - 0x66,0xd3,0x94,0x43,0x1b,0x14,0x1c,0x90,0xbf,0x7f, - 0x24,0x1e,0xfa,0x3b,0x77,0x55,0xdc,0x16,0xae,0x45, - 0xae,0x86,0xe7,0x44,0x09,0xd3,0xcf,0x7b,0x83,0xc5, - 0x56,0xba,0xd1,0x5a,0x00,0x79,0x24,0x75,0x0e,0xd5, - 0xba,0x7f,0xbe,0xa3,0x64,0x01,0x31,0xb2,0x09,0x61, - 0xbf,0xbf,0xe1,0x60,0x2a,0x3a,0xc4,0xfb,0xe7,0x2f, - 0x90,0x9f,0xd2,0x83,0xd5,0x1c,0x6e,0xf6,0xbb,0xa6, - 0x04,0xd3,0x55,0xf2,0x6e,0x7d,0xba,0x0a,0x69,0x42, - 0x66,0xa8,0x48,0xd1,0x04,0xda,0xa0,0xb6,0x6f,0xdf, - 0xa1,0xc9,0x8d,0xfb,0x1e,0x45,0x58,0x4c,0x92,0x1e, - 0x11,0x23,0x17,0x38,0x29,0xb9,0xa1,0x98,0x72,0xce, - 0xb9,0xfe,0xfc,0xf9,0x33,0x26,0x2c,0xf0,0xac,0x0e, - 0x5d,0x27,0x54,0x97,0x88,0xac,0x75,0xa4,0xe6,0x46, - 0x87,0x13,0xca,0x66,0xd0,0x82,0x43,0xf7,0xc8,0xf9, - 0x09,0xa3,0x7e,0xfa,0xb3,0x2e,0xc6,0x28,0xca,0xa3, - 0x09,0xa4,0x49,0xb0,0x8e,0x39,0xac,0xec,0x45,0x85, - 0xe4,0xf6,0xb8,0x3d,0xd5,0x9f,0x03,0xec,0x87,0xb7, - 0x03,0xd5,0xc4,0x3d,0x97,0xef,0xbe,0x5d,0x7b,0x47, - 0x1b,0x29,0x61,0xb8,0xdf,0x5b,0x7f,0x27,0xee,0x5a, - 0xfb,0xda,0x31,0x71,0xfd,0x04,0x24,0xf6,0x38,0x74, - 0x9a,0x10,0xa7,0xfb,0x40,0xef,0xbf,0x73,0x3f,0x7b, - 0xfd,0x1e,0x87,0x60,0x29,0x9a,0xf8,0xfd,0x33,0xf4, - 0x8e,0x8e,0x2b,0x34,0x3a,0x02,0x49,0xef,0xd4,0x21, - 0x55,0x8a,0x70,0x99,0x33,0xe6,0x00,0x6a,0xf7,0x76, - 0x7b,0x66,0x8f,0x62,0x02,0xa4,0x49,0x9e,0x8b,0x29, - 0xe7,0xfd,0x90,0xea,0xd7,0xf5,0xdf,0x7e,0xbb,0x03, - 0xc1,0x41,0xc9,0x6e,0x21,0xa6,0x40,0xe5,0x2a,0xfe, - 0x74,0x50,0xa5,0x56,0x8f,0x7c,0xe7,0xfa,0xef,0xdc, - 0xa6,0x54,0xe8,0xda,0x1d,0x0c,0x9a,0x5c,0xb8,0x20, - 0xed,0x5a,0x39,0xdf,0x0b,0x2e,0x1d,0xb6,0xa5,0x0b, - 0xd4,0x05,0xca,0xbe,0xb0,0x7b,0xb2,0x62,0x60,0x77, - 0x44,0x9f,0xc2,0x01,0x53,0x21,0xd8,0x96,0x6e,0x56, - 0x87,0xe0,0xb8,0xf7,0x45,0x07,0xd8,0xfd,0x3c,0xe8, - 0x00,0xbe,0x7f,0x57,0xd7,0x98,0x4b,0x74,0x53,0x42, - 0x02,0x9b,0xa3,0xa6,0xb6,0x91,0x26,0x67,0x21,0xa1, - 0x2f,0x08,0x64,0xb6,0x95,0xea,0x82,0x3a,0x3c,0xbf, - 0x4a,0x87,0xb7,0xbb,0x37,0x2d,0x20,0x52,0xb2,0x31, - 0xed,0xd7,0xfe,0x7e,0x74,0xdf,0xd3,0x9e,0x75,0x89, - 0x22,0xb5,0x82,0x1c,0x62,0x41,0xc8,0xcb,0xa6,0xd5, - 0xa2,0x2d,0xf1,0xf4,0xdc,0x4c,0xfb,0xbc,0x4c,0xa0, - 0xa4,0xe0,0x18,0xbf,0x43,0x29,0x02,0x5a,0xa5,0x6b, - 0x10,0x37,0xc9,0x4a,0xa5,0x76,0x90,0x8b,0x37,0xda, - 0x5e,0x72,0xeb,0xb4,0x21,0xa5,0x27,0xbd,0xc7,0x56, - 0x9c,0x62,0xdb,0xa5,0xad,0xe5,0x74,0x58,0x97,0xb6, - 0x53,0x0c,0x42,0x7d,0xa8,0x65,0xf4,0x6f,0x88,0xb3, - 0xf1,0xa1,0x08,0x25,0xba,0xff,0x8e,0x12,0xe1,0xef, - 0xe7,0x75,0xa6,0xf6,0xa4,0xc4,0xdd,0xba,0x13,0x32, - 0x78,0x16,0x27,0x20,0xae,0x27,0x14,0x87,0x6f,0xc9, - 0x56,0x8b,0x99,0x07,0xe2,0x1e,0x9e,0x6f,0x1d,0xb9, - 0x91,0x22,0xa6,0x7a,0x42,0x03,0xe8,0xd2,0xe3,0x7c, - 0xd3,0x77,0x23,0xb1,0xf3,0x50,0x7c,0x09,0x94,0x17, - 0xdb,0x86,0xa5,0xb3,0x58,0xce,0xac,0xe3,0x50,0xce, - 0xfb,0xef,0xc2,0x75,0xbc,0xbd,0xb7,0x9e,0xd0,0x87, - 0xb6,0xf4,0x3f,0xcf,0x2e,0x3c,0xa8,0x4a,0x3d,0x7f, - 0x87,0x8c,0x50,0xa2,0xa3,0xff,0x23,0xce,0x90,0x6b, - 0x3f,0x40,0xd5,0xe5,0x02,0x71,0x41,0x35,0x1b,0x5b, - 0x23,0xca,0x71,0x5a,0x06,0xe3,0x72,0x41,0x5e,0xf9, - 0x01,0x0e,0xe5,0x80,0x83,0xa2,0x52,0x72,0x00,0xdf, - 0x51,0x70,0x28,0x55,0x78,0xe9,0xe5,0x0e,0x63,0x97, - 0x34,0x75,0x14,0xca,0x5d,0x5f,0x7b,0xc6,0x0f,0xce, - 0x52,0x5b,0x80,0x75,0x1f,0xac,0x0e,0x31,0x72,0xed, - 0xb6,0xfe,0x3e,0x5d,0xe5,0x3d,0x25,0xa0,0xba,0x8e, - 0xa8,0x25,0xd7,0xf9,0x5b,0x9a,0x8c,0xca,0xe6,0x2c, - 0x87,0x8a,0x99,0xaa,0xb4,0x88,0x63,0xe6,0x36,0xfd, - 0xbf,0x67,0x47,0x4d,0x89,0x97,0xfb,0x0e,0x6c,0x95, - 0x42,0xf5,0xfa,0xf8,0xde,0xfb,0x73,0x1c,0xdc,0x4e, - 0x6d,0x94,0x1e,0x58,0x36,0xdc,0xa0,0xe9,0x59,0xa4, - 0x3d,0x4d,0xe8,0x09,0x71,0x4b,0xf4,0xb0,0x49,0x2d, - 0x33,0x49,0x76,0xaa,0xff,0xcf,0xa1,0x0d,0x1b,0x64, - 0xea,0x3e,0x84,0x74,0x8f,0x39,0x9e,0x8d,0x3e,0x8a, - 0xd7,0xeb,0x55,0x14,0xf7,0xcc,0xff,0xd7,0xd7,0xd7, - 0x57,0x29,0x3a,0x68,0x9e,0x4d,0x29,0xb2,0x9d,0xda, - 0xbd,0x0e,0xd9,0x4b,0x74,0x37,0x59,0x6f,0x8f,0x35, - 0xb9,0x41,0xa3,0x1d,0x7a,0x6c,0x62,0x6f,0x85,0x44, - 0xb4,0xe8,0x9c,0x21,0xf4,0x93,0xe2,0x6d,0x8b,0x51, - 0x45,0x7c,0x93,0xe9,0x1d,0x39,0x64,0xf5,0x02,0x6e, - 0x29,0xad,0x4f,0x77,0x5f,0xfd,0x7b,0xbe,0xbe,0xbe, - 0xaa,0xb5,0x7c,0xdf,0x8a,0x16,0xfd,0x0e,0xbd,0x86, - 0xa9,0xa8,0x82,0xb8,0xe6,0xfe,0xbf,0x28,0x66,0x28, - 0xed,0xc2,0x24,0x5c,0xab,0x58,0x37,0x80,0x2b,0x97, - 0x5b,0x2f,0x01,0xa5,0x45,0xea,0xcb,0x6f,0x17,0x30, - 0x36,0x41,0x6d,0x80,0xb4,0x8b,0x36,0x30,0xdd,0x58, - 0xe0,0xcb,0x60,0xd2,0xe5,0x5e,0xdc,0xc4,0x4d,0xd1, - 0xe0,0x67,0x92,0xa5,0xb7,0x56,0x95,0xb9,0xfe,0x0a, - 0x08,0x4e,0x4d,0xc8,0x94,0xd9,0x3c,0x05,0x99,0x75, - 0x4c,0x3a,0xa8,0x25,0x12,0x48,0x8a,0xe5,0x20,0xef, - 0xef,0x4d,0xf4,0x38,0x88,0x1d,0x37,0xca,0x7c,0x6e, - 0x85,0xf5,0x50,0x82,0x04,0x21,0xc1,0x9a,0x78,0x5a, - 0xb0,0x5e,0xca,0x6c,0x3a,0xfb,0x0e,0xa8,0xe5,0x44, - 0xe4,0xf0,0xc4,0x59,0xa2,0x9f,0x77,0xf7,0x42,0x3c, - 0x8d,0xbe,0x11,0x13,0x92,0x42,0xe8,0x10,0xb5,0x11, - 0xf4,0xd9,0xeb,0x3b,0x48,0xed,0x37,0xe2,0x07,0xc9, - 0xfb,0xc2,0xef,0xd3,0xb5,0xd7,0xf9,0x4b,0x74,0x7d, - 0x1b,0xa2,0x35,0x15,0x16,0xd4,0x52,0x71,0x28,0x8e, - 0x92,0xe8,0x03,0xc4,0xde,0x91,0xef,0x32,0x07,0xdb, - 0xa1,0x83,0xa1,0xdf,0x4f,0x4b,0xb4,0xb5,0x85,0x78, - 0x94,0xbc,0xec,0x92,0xbd,0xef,0x44,0xc8,0xb6,0x4e, - 0x1c,0xfd,0xc0,0x5d,0x9b,0x1b,0x50,0x21,0x14,0xa7, - 0x25,0x51,0x45,0xad,0x04,0x53,0x8c,0x3d,0x5a,0x4b, - 0x5a,0xa9,0x9b,0x67,0xda,0xf7,0xf5,0x5b,0xcb,0x4b, - 0x7f,0xb7,0x23,0xdc,0x8a,0x7e,0xf5,0xef,0x56,0x04, - 0xce,0x71,0x67,0x1a,0x0f,0xd3,0xa1,0x3a,0xd5,0xdb, - 0x61,0x0e,0x79,0x72,0x7c,0x95,0x8e,0x4a,0xe9,0xe1, - 0x7e,0x23,0x80,0x00,0x94,0x1d,0xa2,0x88,0x38,0x64, - 0xa9,0x23,0x30,0xb4,0x9f,0x08,0x09,0xd1,0x42,0xae, - 0xa3,0x82,0x09,0x65,0x4b,0xcf,0xc1,0xc4,0xb3,0x72, - 0xcf,0xbc,0x23,0x55,0x7a,0xb6,0xde,0xd7,0xf1,0xf5, - 0xf5,0x75,0xa8,0x93,0x70,0x5f,0x4b,0x1f,0x92,0xb8, - 0x3b,0x09,0x8a,0x06,0xca,0x9e,0xae,0xbb,0x55,0x06, - 0xd4,0x81,0x72,0xef,0xfa,0x45,0xd5,0xa9,0xcb,0xa8, - 0xfa,0x97,0x75,0xa8,0xc9,0x1d,0xf6,0x8a,0x80,0x38, - 0x64,0xc9,0x25,0x03,0xa1,0x1a,0x2c,0x87,0x26,0x69, - 0xd6,0x9e,0x0e,0x18,0xad,0x5a,0x42,0xa5,0x57,0x09, - 0x62,0xbe,0x7b,0xfe,0xdb,0xd6,0x5c,0x80,0x21,0x0b, - 0x12,0xc2,0xc4,0x7a,0x45,0xe4,0x83,0x7e,0xaf,0x1f, - 0xe6,0x84,0x8e,0xc1,0xb3,0xab,0x90,0x7d,0x97,0xab, - 0xba,0x5c,0x55,0xe9,0xaa,0x07,0xe0,0x2f,0x54,0x4a, - 0xb6,0x1d,0x7f,0x2a,0x25,0x6b,0xf4,0xfc,0xee,0x77, - 0x17,0x5a,0x29,0x91,0xfb,0xd6,0xae,0xa5,0x52,0xcb, - 0x44,0x10,0xcf,0xd2,0xe4,0x5e,0x50,0x36,0xfd,0xfe, - 0x5a,0x70,0x5a,0x1e,0x89,0xc0,0x77,0xa0,0x28,0xb7, - 0x4e,0x08,0x65,0x09,0xc9,0xef,0xdb,0x77,0x7e,0x5f, - 0x6f,0x75,0x14,0xe9,0xfe,0xef,0xaf,0xaf,0xaf,0xb7, - 0xe7,0x41,0xad,0x63,0xda,0x1b,0x54,0xbd,0x3b,0xce, - 0x9b,0xfe,0xef,0xbe,0x06,0x45,0x22,0x02,0x6f,0xce, - 0xa2,0x4f,0x7f,0xfe,0xfc,0xa1,0x62,0xa2,0x7f,0x3e, - 0x16,0x74,0x5a,0xad,0x3b,0x14,0x91,0xaa,0xd8,0x6d, - 0x3b,0x1f,0x90,0xe0,0x0d,0x4b,0xbe,0xb4,0xa8,0x83, - 0x36,0x4f,0xc1,0xde,0x7b,0xb4,0xbb,0x1d,0x32,0xd7, - 0x11,0x75,0x40,0x56,0x2b,0x20,0x89,0x35,0xa0,0xf5, - 0x6f,0xe7,0x4a,0xe3,0xc6,0xfc,0xc4,0x06,0x3d,0x38, - 0x1d,0x8f,0xd0,0x9d,0x4d,0x8a,0xaa,0xdc,0xc9,0x28, - 0xec,0xbd,0x02,0xd4,0x09,0xd1,0xb4,0xce,0x17,0x9d, - 0xda,0xc4,0x72,0xa8,0x63,0x7c,0xea,0xf7,0xab,0x67, - 0xa1,0x99,0x58,0x7d,0x8b,0xfd,0x72,0x7e,0x55,0x48, - 0xa2,0x6b,0x40,0x30,0x23,0xc2,0x4b,0x28,0x9c,0x43, - 0x99,0x1d,0x62,0x2f,0xf7,0x58,0xd3,0x35,0xb8,0x78, - 0x9a,0x50,0xdc,0xd7,0x04,0x79,0x11,0xb9,0x6b,0x43, - 0x3e,0x34,0x01,0xae,0xe8,0xa2,0x02,0xa1,0xef,0x2d, - 0xe1,0xd2,0xc4,0xc3,0xc1,0x99,0x5a,0x41,0xdf,0xbf, - 0x47,0x81,0x8f,0x0e,0x6f,0x73,0x88,0x57,0x5a,0x24, - 0xd0,0xae,0x89,0x13,0x69,0x6e,0xb3,0x13,0x1c,0x79, - 0xc1,0x74,0xcf,0x7d,0x30,0x69,0x9b,0xc2,0x41,0xc8, - 0x06,0xba,0xa6,0x16,0x43,0xa5,0x44,0x83,0xda,0x0c, - 0x74,0x5f,0xfd,0xfb,0x94,0xe4,0xad,0xaf,0x52,0xab, - 0x76,0x0d,0x3a,0x40,0xc8,0x2c,0x5a,0x57,0xad,0x02, - 0x7a,0x4c,0x15,0x6a,0x70,0xd7,0xe0,0xd6,0xdf,0xff, - 0xfd,0x3e,0x6f,0x94,0xc3,0x5d,0x87,0x41,0x2c,0xcb, - 0x21,0x37,0xee,0xfb,0xd3,0x61,0x36,0x4c,0xe5,0x94, - 0x3b,0xbc,0x5c,0xb2,0x04,0x05,0x4d,0x3a,0x0c,0xeb, - 0x1b,0x31,0xbb,0x93,0x9c,0xb8,0xef,0x29,0x21,0x4c, - 0x41,0xd0,0xf0,0x23,0xf0,0xfa,0xe9,0x3b,0x0c,0x01, - 0xfd,0x91,0xa4,0xd1,0x7a,0x4e,0x64,0x76,0x83,0x12, - 0x3d,0x12,0x4c,0x68,0x2d,0x3d,0xee,0xf3,0xf5,0x7a, - 0xf5,0x64,0xcd,0xa2,0x72,0x52,0x54,0xd6,0xd0,0x52, - 0x50,0x98,0xbf,0xd2,0x41,0xa0,0x07,0x71,0x3f,0xf4, - 0x5d,0xcc,0x20,0x5a,0xc0,0xfd,0x5d,0xba,0xfe,0x1d, - 0xa1,0x9f,0x38,0x9e,0x13,0xa1,0x9b,0x68,0x0e,0xfa, - 0xd9,0xc4,0x1d,0x4d,0x1c,0x4f,0x49,0x06,0xca,0x3d, - 0x2f,0xe5,0x8c,0x29,0xc9,0xbd,0x27,0x48,0xda,0x7a, - 0x24,0x9a,0x46,0x48,0x18,0x4a,0x08,0xc8,0xd8,0xd1, - 0x70,0x43,0x44,0xda,0x8a,0xa5,0x22,0x62,0x4a,0xe0, - 0xd3,0xde,0x4b,0x89,0x98,0xcb,0x0d,0x06,0x24,0xbf, - 0x5c,0xb7,0xe7,0x7e,0xe6,0xfd,0x1e,0x06,0xda,0x81, - 0x2d,0xae,0xa7,0xe7,0xdf,0x3f,0xe7,0xb7,0xcb,0xf0, - 0xdd,0x46,0xd6,0xf6,0x01,0x64,0x6f,0x69,0x5a,0x69, - 0x0a,0x32,0xb5,0x09,0xf8,0x1f,0x04,0xc9,0x9a,0x7a, - 0x82,0x0a,0x71,0x0e,0xc4,0xa9,0x32,0x1a,0x40,0x17, - 0x05,0x33,0x5d,0xd8,0x5a,0x41,0x04,0xed,0x97,0xa2, - 0xfb,0x49,0xdc,0x1e,0x78,0xe6,0x89,0x24,0x5c,0x81, - 0x7b,0x52,0x81,0x93,0x51,0xa0,0x61,0x51,0x14,0x70, - 0xa8,0x1d,0xd6,0xe1,0xf1,0xb4,0xa6,0x88,0x24,0xe8, - 0xee,0x9d,0x88,0xec,0x43,0xd5,0x52,0x81,0xa4,0x7d, - 0xfd,0xfa,0xf5,0xcb,0x4e,0xb2,0x41,0x6b,0xa5,0x54, - 0xef,0x86,0x3e,0xdb,0x8d,0xee,0xd3,0x01,0x26,0x2d, - 0xae,0x22,0xfd,0xa0,0x34,0xa9,0xe5,0xde,0x99,0xfe, - 0xae,0x06,0x7b,0x42,0x86,0x06,0x9e,0xd1,0x7a,0x74, - 0x1f,0x88,0xb1,0x13,0x72,0xfa,0x16,0x3b,0xdc,0x38, - 0x74,0x40,0x4b,0x70,0xfc,0x59,0x0f,0x7c,0x5d,0xa7, - 0x74,0x00,0xb4,0x8a,0xf5,0x50,0xf2,0x1f,0xa6,0x0e, - 0xcf,0x84,0xf2,0x48,0xdb,0xf7,0x0c,0xc4,0xf4,0xb7, - 0xcf,0x75,0xda,0x58,0xbd,0x2d,0x96,0xb8,0x41,0xaa, - 0x33,0x63,0xd6,0x5c,0x7d,0x7d,0x7d,0x9d,0x61,0x68, - 0xe2,0x04,0xde,0x0f,0x8d,0xc1,0x17,0x8d,0x3f,0x7f, - 0x3f,0xeb,0x72,0x63,0xdc,0x4a,0xa6,0x75,0x85,0xed, - 0x65,0xa6,0xaf,0xb4,0x0d,0x24,0xc9,0x0e,0xb6,0xa2, - 0xdc,0x74,0x73,0xbf,0x06,0x13,0x27,0xaa,0x4f,0x64, - 0x49,0xd2,0x53,0x4a,0xc8,0xd7,0xb6,0xa2,0xe3,0x51, - 0x5e,0x46,0x7f,0xa7,0xb7,0x99,0x4c,0xe1,0x51,0xa0, - 0x29,0xf4,0xf6,0x4c,0xa5,0x15,0x59,0x6e,0x92,0x4c, - 0xdb,0x6e,0x8e,0x8a,0x42,0x7b,0x98,0xe2,0xa2,0x12, - 0xce,0xcd,0x94,0xb5,0x25,0xc6,0x13,0x59,0x7b,0x6a, - 0x45,0xbe,0xfa,0xa1,0xee,0x7a,0x76,0x02,0x63,0x56, - 0x48,0x10,0xc6,0x2f,0x4f,0xb0,0x6a,0x20,0x3d,0xd5, - 0xb6,0x92,0x48,0x30,0xbb,0xd9,0xd8,0x96,0xdf,0x43, - 0x95,0xec,0xb6,0x12,0x55,0xa8,0x78,0x6a,0x2b,0x2c, - 0xf5,0x8b,0x90,0xe8,0x76,0x57,0xe5,0xa9,0xca,0xdf, - 0x12,0xdc,0x89,0x37,0xe2,0x5a,0x73,0xd0,0xde,0x72, - 0x07,0x54,0xac,0xca,0x54,0xeb,0x89,0xae,0x13,0x3e, - 0x3f,0xa1,0x7f,0x16,0x42,0xd6,0x00,0x3e,0x41,0xee, - 0xba,0xee,0x93,0x66,0xcc,0x56,0x18,0xb1,0x55,0xe2, - 0x95,0x5a,0x33,0xd4,0x22,0x30,0x13,0x20,0x3f,0xd7, - 0xa2,0x90,0xb8,0x41,0x23,0x3b,0xe9,0xd7,0x26,0x74, - 0xba,0x76,0x12,0x09,0x39,0xc5,0x81,0xd0,0x06,0xb7, - 0xed,0xd8,0xc4,0x39,0xa2,0x9f,0xd3,0x64,0x8d,0xfe, - 0x97,0x9e,0x6d,0x47,0xbb,0x1c,0x31,0x3d,0x8d,0xfe, - 0xcb,0x7d,0xf6,0xf6,0xa0,0xe5,0x84,0xb9,0xc3,0xf7, - 0xfb,0x80,0x29,0x42,0x80,0x0d,0xe7,0x6c,0x83,0x0a, - 0x8d,0xa4,0x7c,0x77,0xad,0x0e,0x09,0x9e,0x26,0x89, - 0x06,0xc4,0x22,0xd2,0x1a,0x5c,0x4c,0xe9,0xf1,0x26, - 0x91,0xc7,0x43,0xa2,0x5f,0xe1,0x20,0xa6,0xa9,0xd4, - 0x0a,0xb1,0xbe,0x68,0x0f,0x87,0xc4,0xbc,0xa0,0x05, - 0x94,0xd0,0xb1,0x47,0x21,0xd6,0x45,0x6b,0x69,0x5d, - 0x43,0xb2,0x51,0x21,0x49,0x46,0x54,0x89,0x50,0xdd, - 0x1b,0xf1,0xa3,0x3d,0x29,0x1c,0x4b,0xcc,0x17,0x24, - 0xf6,0x3a,0x7e,0x2b,0x52,0x6f,0x52,0x2c,0xd0,0xf3, - 0x46,0xa9,0x06,0x54,0xa8,0xbf,0x9c,0x46,0xcd,0xd4, - 0x9e,0x4a,0x55,0x05,0x40,0x6f,0xe3,0xc5,0x53,0xd0, - 0x74,0xfd,0xe4,0x05,0xfc,0x5e,0xc4,0x0e,0x27,0x08, - 0xde,0x8d,0xc8,0x2e,0xda,0x55,0x8f,0x3f,0x77,0x99, - 0xad,0xd3,0x87,0x31,0xcf,0x19,0x05,0x0d,0x09,0xad, - 0xe9,0x30,0x74,0xd2,0xb5,0xa1,0x44,0xd4,0x1d,0xe0, - 0x09,0x31,0x0a,0x3d,0xf9,0x1a,0x50,0x0e,0xe2,0xe2, - 0xbc,0xa1,0x37,0xa2,0x47,0x52,0x03,0x8c,0x5c,0x89, - 0x83,0x41,0xc1,0xf3,0x16,0xf6,0xd3,0xd6,0x14,0xac, - 0x97,0x72,0x08,0x94,0xe1,0x3d,0xc5,0x83,0x64,0xfa, - 0xcc,0xb0,0xa7,0xde,0xda,0x26,0x21,0xd8,0xbd,0xbd, - 0x0f,0x93,0x24,0x96,0xdb,0x13,0x7d,0x28,0xc0,0xa1, - 0x4d,0x6e,0x9c,0xb4,0x07,0x94,0xa1,0x4d,0xa1,0xed, - 0xa7,0xd2,0x44,0xe3,0xe6,0x51,0xc9,0x54,0x5a,0x49, - 0x22,0xa1,0x9f,0x81,0x89,0x48,0x8a,0x23,0xa1,0x18, - 0xc0,0x76,0xd2,0x95,0x55,0xd9,0xe3,0x44,0x4d,0xbb, - 0x76,0x97,0xc4,0xd8,0x96,0x9f,0x26,0x60,0x69,0x20, - 0x45,0x39,0x8c,0x21,0xe1,0xac,0x74,0xa0,0x90,0x42, - 0xbe,0x72,0x5b,0x60,0x9a,0xea,0x6d,0x8d,0x05,0x11, - 0xbc,0x1a,0xe8,0x12,0x6b,0x3e,0x26,0xe9,0x87,0x25, - 0x9e,0x4e,0x2a,0x70,0xa8,0x0d,0x6f,0x62,0x38,0x21, - 0xd1,0x23,0x5f,0x93,0x92,0x20,0x8a,0x91,0xfd,0xf3, - 0x1d,0xff,0xc5,0x9d,0x4d,0x13,0xe5,0x44,0xdf,0x47, - 0x38,0x8f,0x71,0x12,0x92,0xb4,0x76,0x2e,0x99,0xb8, - 0x4d,0x9a,0x78,0xa4,0x5f,0x66,0x12,0xbc,0x98,0x28, - 0x4e,0xb5,0xe6,0x96,0x73,0xf4,0xea,0x59,0x66,0x3a, - 0xc4,0x86,0xc3,0x31,0x42,0xdf,0x2a,0x18,0xa8,0xc1, - 0x26,0x6d,0xf2,0x00,0xaf,0x17,0x04,0xa5,0x0a,0x44, - 0xac,0x9a,0x7a,0xb0,0xe6,0xfe,0xcb,0xd9,0x2a,0x5c, - 0x61,0x34,0xf4,0x32,0x12,0x01,0x34,0x31,0x44,0x9b, - 0xd4,0xf5,0xa8,0x65,0x33,0x55,0x40,0xeb,0x2a,0x55, - 0x46,0x69,0x53,0x24,0xf5,0x67,0x53,0x9d,0xd7,0x40, - 0xe4,0x26,0xc1,0x4a,0xdb,0xbf,0x56,0xc2,0x70,0x20, - 0xd1,0xd7,0x80,0x34,0x56,0x82,0xf6,0xbf,0x93,0x2f, - 0xdb,0x3a,0x21,0x64,0x88,0x10,0x99,0xe2,0xd2,0x5a, - 0x0f,0x80,0xda,0x04,0xbe,0xef,0x6b,0xaa,0x7e,0x9d, - 0xfa,0xec,0xef,0x83,0x0e,0x84,0xd9,0x3a,0xa2,0x50, - 0x8e,0x1b,0xe0,0xb8,0x16,0x0b,0x0e,0xda,0x23,0x31, - 0x81,0x3f,0x73,0xf7,0xb3,0xfa,0xe7,0x7e,0x27,0xd0, - 0x56,0xd0,0xf7,0x5f,0x4d,0x11,0xfe,0x2d,0xa9,0xa2, - 0x83,0xd1,0xb5,0x17,0x87,0x24,0x46,0xdf,0x9d,0x45, - 0xed,0x06,0xce,0x41,0x75,0xc2,0xbc,0x4b,0xc8,0x00, - 0xf9,0xac,0xa0,0xcf,0xf3,0xe0,0x7e,0x29,0xb1,0x58, - 0x87,0x56,0x3a,0x67,0x85,0xd0,0xf4,0xd4,0xe6,0xed, - 0xc9,0xd9,0x90,0x08,0xd9,0xbf,0xeb,0xeb,0x83,0xda, - 0xe4,0xdb,0xee,0x81,0x7e,0x67,0xd0,0xb1,0xb2,0xa4, - 0xe4,0xce,0x97,0x72,0x7b,0x3f,0x70,0xd5,0x0a,0x92, - 0x81,0xa8,0x57,0xb6,0x1d,0x30,0xa1,0x04,0x44,0xd1, - 0x38,0x12,0x15,0x76,0x28,0x6d,0xe8,0x62,0x94,0xee, - 0x53,0xd2,0xe7,0x72,0xe7,0xa4,0x26,0x13,0xfd,0x3d, - 0xa4,0x76,0xee,0x27,0xb1,0xa7,0x9f,0x6b,0x86,0x6f, - 0x56,0xb4,0x2f,0x28,0x26,0x77,0x61,0xde,0x3b,0x2e, - 0xfd,0xee,0x4f,0x4f,0x2b,0x14,0x47,0xb0,0xd2,0x9f, - 0xbb,0xab,0xd4,0x70,0x53,0x95,0x5e,0x46,0x1a,0xbb, - 0x0c,0x2f,0x30,0x71,0x54,0x6c,0x10,0x70,0xaa,0xd4, - 0xa9,0xa2,0x76,0x9e,0x50,0xa9,0xb7,0xe9,0x36,0x5d, - 0x1a,0x0b,0x77,0xdf,0x63,0x78,0x30,0x96,0xf0,0xe7, - 0x26,0x14,0x1c,0xe7,0x85,0xda,0x6b,0xc1,0x8a,0x22, - 0x2a,0x4d,0x27,0xf4,0x4b,0xee,0xb9,0x60,0x9d,0x60, - 0x1b,0x95,0xb8,0x47,0x1a,0x9c,0xd2,0xc4,0x41,0xf2, - 0x65,0x23,0xae,0x54,0x6a,0xc9,0xb9,0xf5,0xd1,0xd7, - 0x66,0x9f,0x42,0x21,0x51,0xc4,0x89,0x30,0xec,0xb8, - 0x57,0x8e,0xdb,0xe2,0x78,0x45,0xba,0xb6,0x34,0xe1, - 0xd7,0x9f,0x5d,0x72,0x6c,0x2a,0x69,0xec,0x04,0x91, - 0xc1,0xb5,0xd5,0x05,0xb5,0xb3,0xc0,0x0b,0x28,0x7e, - 0x47,0x6f,0x05,0x3a,0xf5,0x74,0x27,0x8d,0xef,0x0e, - 0x8a,0x8e,0x34,0x27,0xeb,0x0c,0x83,0x2e,0x10,0x3f, - 0xc3,0x16,0x20,0xdd,0x92,0xc2,0x11,0x90,0xe5,0xb3, - 0xea,0x7b,0x1d,0x9c,0x84,0x78,0xb7,0x35,0x79,0x52, - 0x41,0xea,0x78,0x47,0x90,0x08,0x1d,0x98,0x4a,0xb2, - 0xfc,0x0c,0xe1,0x8d,0xdc,0x03,0x02,0xc4,0x55,0x2a, - 0x67,0x5d,0xd0,0xf6,0xef,0xa1,0xf8,0xd9,0x45,0x1b, - 0x8d,0x2f,0xe4,0x09,0x08,0x8d,0x95,0x31,0x70,0x5c, - 0x9d,0xfe,0x3b,0x7a,0x0d,0x83,0x7f,0x9e,0xe5,0xa6, - 0xd4,0xbf,0xde,0x4d,0x14,0x8f,0x0e,0x90,0x95,0xcf, - 0x80,0x16,0x3a,0xdb,0xa3,0x87,0x3d,0xc8,0x2d,0xee, - 0x98,0x14,0xd7,0x5d,0xe2,0xd8,0x39,0x44,0xa2,0x39, - 0xf4,0xb3,0xce,0xa8,0xc3,0x63,0xba,0x3f,0x75,0xce, - 0x79,0x48,0x1c,0xf4,0xbf,0x0b,0xda,0x6a,0x67,0x13, - 0x3b,0xcc,0x1e,0xc4,0xf7,0xde,0x3f,0xfe,0x37,0x05, - 0x18,0xd7,0x37,0x75,0x10,0xa9,0xcb,0x56,0x5d,0x00, - 0x9c,0xbc,0x99,0xc2,0xd4,0xc2,0xca,0xc8,0x30,0x65, - 0xc2,0x03,0x47,0xa9,0x92,0x5a,0xad,0x9a,0x35,0x36, - 0xd5,0xcd,0x38,0x9e,0x08,0x9c,0x13,0x87,0xf4,0x10, - 0x07,0xa6,0x26,0xa5,0x5b,0x67,0x71,0xa1,0x0b,0xc3, - 0xd8,0x52,0xd8,0xe4,0x27,0xb5,0x91,0x60,0xca,0x66, - 0x84,0x43,0xb5,0x82,0x27,0x74,0xce,0x5d,0xbb,0xf3, - 0x4f,0xa3,0xf7,0x43,0x15,0x24,0x91,0xd8,0x1d,0xd2, - 0x76,0x27,0x95,0xce,0x84,0x51,0x0d,0x64,0x3b,0xdf, - 0xc6,0xa1,0x15,0x4a,0x52,0x1e,0xda,0xbf,0x35,0x25, - 0x0b,0xce,0x8c,0x38,0xf9,0x8b,0x19,0x35,0xf1,0xb7, - 0x6b,0x94,0x7b,0xac,0x69,0x5f,0xd1,0x3e,0x9e,0x6c, - 0x41,0x40,0x47,0x65,0xd5,0x0e,0xa7,0x35,0xe9,0xae, - 0x2b,0x8d,0xf1,0x27,0x9e,0xdd,0x64,0xfc,0xb9,0x4c, - 0xe2,0xde,0xf4,0x6d,0x36,0x6d,0x7a,0x59,0xaf,0xc9, - 0x7e,0xa1,0x6b,0xcc,0x5c,0x37,0xe1,0x98,0x26,0xd9, - 0x54,0x57,0x26,0xe8,0x2a,0xbd,0x1d,0xfc,0xc0,0xcd, - 0x79,0x7b,0x36,0x9a,0xa8,0xa8,0x8d,0x85,0x1b,0xbb, - 0x0e,0xdc,0xb1,0x72,0x36,0x17,0x8e,0x28,0x2c,0xdf, - 0xfd,0x73,0xa8,0x19,0xbd,0xa0,0x87,0x76,0x8f,0xb4, - 0xef,0xcf,0x20,0x7d,0xf1,0x78,0x06,0xb7,0x67,0x97, - 0x41,0x9c,0x8e,0x2b,0x44,0x82,0x3a,0x75,0xd2,0xda, - 0x21,0xf3,0xe6,0x07,0x61,0x77,0xf8,0x0e,0xeb,0xe6, - 0x40,0xc9,0x82,0x7b,0x0f,0xfa,0x3d,0x9a,0x50,0xd3, - 0xa4,0x26,0x25,0x7b,0x13,0x85,0xa6,0xaf,0x4d,0x35, - 0x05,0x0e,0xbc,0x4f,0xdd,0x7b,0x27,0x71,0x84,0x28, - 0x8e,0xfc,0xa0,0x86,0xda,0x0a,0x58,0x20,0x1c,0xb6, - 0x5c,0xd4,0x8b,0x6d,0x50,0x7e,0xfc,0x3d,0xe0,0x20, - 0x8c,0xba,0x35,0xd4,0x66,0x4b,0x63,0xdb,0xf4,0x3b, - 0x7d,0x21,0xfd,0xfa,0xf5,0x2b,0x6a,0x3a,0x74,0x1d, - 0x8b,0x0e,0xbd,0xde,0xbf,0x07,0x63,0xbf,0x95,0xc6, - 0xfb,0x95,0xe3,0x44,0xed,0x2d,0x22,0x79,0xe9,0x01, - 0xaf,0x70,0xa0,0xbe,0x23,0x4a,0x7e,0x94,0xc4,0x67, - 0xf8,0x24,0x0f,0xc8,0xd9,0xb4,0x97,0x5c,0x50,0x7b, - 0x70,0x9f,0x1c,0xa2,0x42,0xd3,0x65,0x24,0x4a,0x29, - 0xc4,0x53,0x12,0xdd,0xb3,0xad,0x19,0x09,0x02,0x11, - 0xa5,0x6c,0x5c,0x15,0x8b,0xca,0xb4,0x11,0xe6,0x6a, - 0x15,0xf0,0x44,0x3e,0x7c,0x70,0x81,0xc0,0x72,0x45, - 0x93,0xb8,0xba,0x02,0x51,0x9d,0x20,0xea,0x7e,0x1f, - 0xd7,0x42,0x33,0x27,0xd9,0x57,0x4c,0x01,0x8e,0xfe, - 0xce,0xdd,0xe3,0x34,0x42,0xee,0x7e,0x8f,0x8a,0x0c, - 0xe3,0xf9,0x74,0x25,0x3e,0x83,0x48,0x15,0x54,0x7f, - 0x7f,0xfd,0x77,0x82,0x33,0xb9,0x6d,0x11,0x86,0xd6, - 0x2f,0x4a,0x1f,0x24,0x2a,0x80,0xb4,0xb6,0x6b,0x99, - 0x54,0x57,0x8a,0xe9,0xad,0x55,0x8a,0x9f,0xe3,0x64, - 0x23,0x5c,0x4b,0xdd,0x25,0x15,0xca,0x81,0x32,0xfb, - 0xc6,0x6a,0x6d,0xf5,0x58,0x16,0x88,0xdb,0xe8,0x2f, - 0x49,0xc5,0x74,0xff,0x4c,0x95,0x1a,0x20,0x9e,0x48, - 0x90,0x6d,0x29,0xe7,0xd5,0x95,0xce,0x9a,0xd0,0xf6, - 0x7f,0x0c,0xf2,0x90,0x38,0xef,0x54,0xb4,0x10,0x5d, - 0xe2,0xca,0x16,0x51,0x35,0x25,0xeb,0x44,0x33,0x49, - 0x89,0x0d,0x90,0xfd,0x2f,0x40,0xe0,0x0b,0x8a,0x15, - 0x6c,0xbb,0x51,0xb1,0xe1,0xa6,0xa3,0x09,0xb8,0x39, - 0xe7,0xd4,0xef,0x44,0xfc,0x6a,0x70,0xd8,0xe3,0xef, - 0x1d,0x4c,0xec,0x60,0xe4,0xf4,0x70,0x41,0xbd,0xf6, - 0x31,0xdd,0x32,0xa9,0xfc,0x86,0x56,0x45,0x6c,0x9b, - 0xb8,0x6a,0xeb,0x4e,0xdc,0x54,0x88,0x89,0xaa,0x69, - 0xa7,0x11,0xa4,0xbd,0x73,0x07,0x33,0xa6,0x1e,0x6c, - 0x20,0x72,0x95,0x0b,0xc6,0x4e,0x7e,0x7f,0xaa,0x8c, - 0x55,0xe9,0x38,0x2d,0x1c,0x22,0x8a,0xbb,0x04,0x07, - 0x5a,0x01,0x49,0x42,0x3e,0x26,0xc9,0x6e,0x53,0xa8, - 0xba,0x6c,0x40,0x7e,0xc8,0xf1,0x1e,0x13,0x4d,0xf7, - 0x6c,0x13,0x2a,0x33,0xb5,0x64,0xa9,0xc5,0xa6,0xff, - 0x38,0x05,0x5c,0x87,0x50,0x92,0x7a,0xb3,0xae,0x31, - 0xd7,0xae,0xe9,0x28,0xa6,0x1e,0x4a,0xa9,0xc8,0x49, - 0xa4,0xfe,0xe6,0xa1,0xb4,0x1a,0x61,0x4f,0x3f,0x93, - 0x5a,0x42,0x06,0x01,0x7b,0xa0,0x27,0x54,0x11,0x1b, - 0xd4,0xeb,0x4a,0x81,0xd1,0xac,0xab,0x33,0xc5,0x1b, - 0x47,0x9a,0xd5,0x96,0x5b,0x92,0xec,0x57,0x34,0xc9, - 0xc5,0x41,0xc3,0xe5,0x3b,0xb4,0xe7,0x14,0x15,0xa1, - 0x35,0x77,0x81,0x42,0xae,0x0e,0xc6,0x28,0x52,0x20, - 0x46,0xd2,0x27,0xed,0x0d,0x72,0x59,0xef,0xbf,0x1b, - 0x7c,0x18,0x9d,0x7b,0xfb,0x03,0xc1,0x6a,0x48,0xfd, - 0xca,0x3f,0x4c,0xd6,0x44,0x39,0x95,0x69,0x1a,0xab, - 0x4f,0xad,0x35,0x5a,0xd3,0x83,0x9f,0x98,0x1d,0xb5, - 0xef,0xad,0x28,0x5d,0x2f,0xc4,0x5f,0xbc,0x8c,0x0f, - 0x5c,0x0f,0xa7,0x40,0x03,0x29,0x27,0x89,0x10,0xae, - 0x37,0x21,0xa3,0x6f,0xf7,0xe2,0xda,0x52,0x2e,0xc1, - 0xef,0xef,0x6d,0x43,0x37,0x69,0xc8,0x51,0x75,0x64, - 0x34,0xb5,0xe5,0x1c,0x27,0xe8,0xf7,0x44,0x9a,0x4a, - 0x89,0x4e,0x57,0x9d,0x34,0x01,0xa1,0x88,0x74,0xd8, - 0x7a,0xdb,0xd8,0x6e,0x73,0x23,0x6c,0x61,0x9c,0xb5, - 0x36,0xed,0xae,0x7e,0x40,0x90,0xd3,0xfd,0x04,0x5b, - 0xc3,0x81,0x51,0x9d,0x33,0xe5,0xfa,0xc6,0x04,0x47, - 0x07,0x89,0xf6,0x47,0xbf,0x7a,0xe2,0x66,0xa4,0xcf, - 0x12,0x13,0x56,0xfc,0x2c,0x22,0x42,0x5e,0xc2,0xf4, - 0xef,0xe8,0x0f,0xf1,0x84,0x88,0xd7,0xa3,0x09,0xc8, - 0xa4,0x40,0x0a,0xa2,0x5c,0x35,0xc0,0xac,0x28,0x0f, - 0xa0,0xc9,0x13,0xf4,0xf8,0x6b,0x3a,0xc0,0x45,0x6e, - 0x3f,0x26,0xd7,0xd7,0x62,0x2a,0x45,0x03,0xaf,0x21, - 0x1a,0x22,0x7c,0xde,0xf6,0x53,0xd1,0x21,0x9d,0x38, - 0x73,0x44,0xa0,0x74,0x0a,0xbf,0x93,0x39,0x72,0xe2, - 0x1a,0x51,0x8b,0x9a,0xe0,0xea,0x20,0x33,0x61,0xb9, - 0x87,0xed,0xe7,0x4e,0x42,0xaf,0x95,0x23,0x45,0x88, - 0x95,0x69,0x9b,0x9d,0x54,0x81,0xba,0x96,0xce,0xbf, - 0x1f,0x9d,0x4d,0x2a,0x9d,0x05,0x81,0x51,0xfa,0x7d, - 0x0c,0x55,0xb8,0x96,0x97,0xd9,0x9b,0xc7,0x21,0x64, - 0x42,0x45,0x38,0x01,0xe5,0xaa,0x60,0x09,0x52,0x4e, - 0x07,0xc9,0x92,0x7e,0xb8,0x4a,0x8f,0xad,0x48,0xc7, - 0x9b,0xac,0xaa,0xe3,0x6c,0x0f,0x7a,0xd2,0x02,0xdd, - 0x80,0xe3,0x92,0xb1,0xc4,0x37,0x09,0x71,0xf4,0x98, - 0xe4,0xe4,0x61,0x74,0x4a,0x6b,0x51,0xb9,0x4a,0x0e, - 0x1d,0xbf,0x40,0xeb,0xe7,0x3c,0x39,0x13,0x13,0x65, - 0x84,0x38,0x4f,0x1f,0x19,0x01,0x2b,0x4f,0x29,0x25, - 0x44,0x64,0x08,0xad,0x08,0x6b,0x12,0x6d,0x75,0xc9, - 0xa6,0x24,0x41,0xd7,0xdf,0xfc,0x53,0x55,0xd7,0x6f, - 0x80,0x5a,0x7f,0x04,0xa7,0x74,0x24,0x4f,0x09,0x7a, - 0x93,0x05,0xc5,0x87,0xd5,0xdf,0x34,0x45,0xb0,0x41, - 0x62,0x90,0x57,0x42,0xfc,0x25,0x09,0x0c,0x0f,0x13, - 0x4d,0xc7,0x87,0x49,0xbe,0x56,0xc6,0xc3,0xc6,0x26, - 0x5f,0x26,0x43,0x2d,0x22,0x2f,0x6e,0xc6,0x61,0x27, - 0x4d,0x21,0x37,0x1e,0xaa,0xa8,0x90,0xeb,0x1d,0x2b, - 0xf2,0x33,0x69,0x38,0x39,0xce,0x8f,0xab,0x62,0x1d, - 0xf2,0xe7,0xc6,0x2a,0x4d,0xb5,0x92,0xda,0x11,0xe5, - 0x2a,0x7f,0x85,0x9c,0xd3,0xd4,0x44,0xe7,0x65,0x85, - 0x80,0x5c,0x70,0x7d,0xf6,0x3e,0x26,0x32,0x2f,0x09, - 0x42,0x26,0x1e,0x98,0x9b,0x1a,0x01,0x8b,0x99,0x91, - 0xb0,0xac,0x99,0x2a,0x29,0xa6,0x3b,0x4e,0xd0,0xc6, - 0xf6,0x25,0xf1,0x15,0x36,0x81,0xca,0x71,0x06,0xa8, - 0xb8,0x71,0x60,0x9b,0x23,0x42,0x93,0xa7,0x5f,0xff, - 0x6f,0x90,0x15,0x78,0x24,0x5a,0x03,0x8a,0xae,0x13, - 0x3c,0x8e,0x5b,0xa2,0x9c,0xb2,0xb7,0xd7,0xe1,0x9e, - 0x9f,0x0a,0xab,0xa6,0x24,0xa2,0x25,0xd4,0xc7,0xbd, - 0x8f,0x36,0x1d,0x93,0x44,0xe6,0x7e,0x50,0x99,0x30, - 0xbd,0x76,0x08,0xfd,0xb8,0x7f,0x57,0xb9,0x73,0x3d, - 0xe9,0x73,0x67,0x82,0x7a,0x90,0xe9,0x3d,0xdd,0x08, - 0xc0,0xc6,0xfb,0xa9,0x15,0x4f,0xe4,0xcd,0xe5,0x78, - 0x56,0x98,0xc0,0x11,0xc2,0xe5,0x04,0x14,0x1d,0xda, - 0xd4,0x51,0xd9,0x8e,0x82,0xe8,0xfb,0xed,0x48,0x99, - 0x50,0x0e,0x0e,0xec,0x63,0xe4,0xc6,0x24,0x61,0x4a, - 0xd3,0xc9,0x79,0x3c,0x47,0x27,0xf8,0x68,0xac,0x47, - 0x8e,0x76,0x84,0xee,0xd8,0xda,0x93,0x43,0x42,0x9c, - 0xba,0x34,0x8a,0xba,0xdd,0x6f,0x91,0xaa,0xfe,0xec, - 0x9c,0x48,0xec,0x39,0xe7,0x5f,0x2f,0xb0,0xad,0xcb, - 0x72,0xda,0xe4,0x1b,0x11,0x40,0x3a,0xfc,0xdd,0x81, - 0x30,0x09,0x04,0x76,0x0b,0x88,0xcd,0xb4,0x8d,0xd3, - 0x98,0x31,0xe3,0x91,0x91,0xdb,0x40,0x07,0x83,0x1b, - 0x47,0x06,0xd8,0xbd,0xe0,0x3e,0x49,0x28,0xb2,0x02, - 0x6f,0xa2,0x26,0x41,0x45,0x6a,0x87,0x50,0x6b,0x26, - 0x05,0xf2,0xce,0x45,0xfa,0xe6,0x8e,0xd5,0x50,0xc5, - 0xc6,0xbe,0x33,0x25,0xad,0x2a,0x3b,0x3f,0xb5,0x8f, - 0x1c,0xaa,0xe3,0x36,0xec,0x15,0xfc,0x95,0x5a,0xb0, - 0x8d,0x0e,0xe9,0x8e,0x3b,0x43,0x9c,0x03,0x4a,0x48, - 0x40,0xb4,0xac,0x12,0x6f,0x46,0x2b,0xb4,0xdb,0x92, - 0xc1,0x21,0x89,0x7f,0xfe,0xfc,0xb9,0xe8,0x19,0x82, - 0x8f,0x14,0x5a,0x3b,0x4c,0x07,0x7b,0x4a,0x1e,0x86, - 0xc1,0x0a,0xe2,0xe4,0x58,0xaf,0xa7,0x4e,0x8c,0x4c, - 0x3a,0x45,0x2e,0x49,0x03,0xc9,0xfc,0xc7,0xc8,0x7c, - 0x9a,0x66,0x19,0xd6,0x72,0xd2,0xd6,0xa2,0xe4,0xf9, - 0x31,0xea,0xee,0x8a,0xa8,0xd6,0xa6,0xaa,0x85,0x38, - 0x6b,0x2d,0xf8,0x59,0x35,0xf8,0x34,0x15,0x59,0xfb, - 0x4c,0xf6,0x3e,0x1a,0x43,0xb5,0x00,0x21,0x9f,0x40, - 0xf5,0x17,0x4c,0x16,0x45,0xd3,0x7b,0x26,0xde,0x09, - 0xf1,0x7c,0xcc,0xdf,0xd5,0xc6,0x9b,0x6d,0xe9,0xdb, - 0x56,0xc9,0x0f,0x71,0x6a,0x29,0x11,0xb2,0x41,0x1c, - 0x30,0x45,0xe5,0x89,0xf3,0x46,0x85,0x9f,0x22,0x2b, - 0x8d,0x90,0x5c,0x4e,0x46,0x83,0xc4,0x79,0x95,0x96, - 0xe1,0x0a,0x26,0x5d,0x83,0x8e,0x47,0xd6,0xa5,0x0d, - 0xf4,0xbd,0x25,0x29,0x10,0x68,0xcb,0x59,0x34,0xf5, - 0x37,0xb9,0x58,0x3b,0x97,0x72,0x67,0x17,0x91,0x5e, - 0x60,0x32,0x0c,0x04,0xa8,0x2f,0x06,0x6d,0xad,0x1c, - 0xdc,0x54,0x91,0x7b,0xd1,0x7a,0xa9,0x24,0xa1,0xbf, - 0xbd,0xb6,0x5e,0x9d,0xb8,0xca,0xda,0xb8,0x41,0xaf, - 0x50,0xb1,0xa9,0xe5,0x62,0x32,0x76,0x82,0x26,0x47, - 0x8e,0x54,0x42,0x11,0x1c,0x2a,0x97,0x1c,0xe9,0x95, - 0x9b,0xa1,0x6e,0xeb,0x8a,0x56,0x85,0x36,0x48,0x99, - 0xe9,0xac,0x2e,0x7f,0x8f,0x1e,0x40,0x5b,0xd1,0xc4, - 0xd0,0xbe,0xb1,0xcf,0x80,0xda,0xa6,0x21,0xf9,0xa9, - 0x69,0x1a,0x49,0x0f,0x92,0xcd,0xe4,0xa2,0x3b,0x5c, - 0xa6,0xe9,0x2c,0xe0,0x84,0x4c,0x3d,0x7c,0x3c,0xfc, - 0x53,0x91,0x44,0x24,0xe7,0xa9,0x05,0x95,0xda,0xb8, - 0x1b,0x9d,0x10,0x17,0x6b,0xd2,0x14,0x98,0x6b,0xa9, - 0x9b,0x58,0x17,0x79,0x0f,0xc4,0x67,0x71,0x08,0x53, - 0x6a,0xab,0x0b,0x1a,0x7c,0x26,0xf4,0xcb,0xa1,0x1a, - 0x8e,0xbf,0xd7,0xdd,0xd1,0x07,0xc5,0xfb,0x13,0x2c, - 0x09,0x12,0x9a,0x63,0xb9,0x3f,0xae,0x5d,0xd6,0x0f, - 0x30,0xd7,0x6e,0xa2,0xf6,0x51,0x10,0x3f,0x74,0x13, - 0x81,0x0a,0xd2,0xd8,0xa9,0x2d,0xe7,0x66,0x0e,0xc5, - 0xa5,0x1d,0xc7,0xbf,0x60,0x6a,0xca,0x9d,0x1d,0x4e, - 0x99,0x5d,0xce,0x9b,0x72,0x6d,0x51,0x7d,0xee,0x2d, - 0xb6,0x3e,0x78,0x4f,0x8a,0x02,0xd1,0xf5,0x98,0xe4, - 0xa2,0x00,0x2d,0x2c,0x6a,0x1d,0xbb,0xb8,0xdd,0x6d, - 0x49,0x88,0xf3,0x0b,0xed,0xf0,0xb7,0x7b,0x51,0xe2, - 0x79,0xe7,0xf4,0xc8,0xe7,0x3e,0x90,0x38,0x5d,0x03, - 0xa9,0xd5,0xef,0x86,0x64,0x7e,0x03,0xb9,0xaa,0x86, - 0x7e,0xbd,0xe5,0xdc,0xf4,0x0d,0xe8,0x2a,0x53,0x3d, - 0x4c,0xa7,0xe0,0xd8,0xb3,0xe8,0x14,0xf8,0x1c,0x64, - 0x39,0x65,0xcb,0x26,0x80,0x93,0x12,0xb4,0x35,0x6e, - 0xbb,0x0f,0x79,0x1a,0x79,0x27,0xa0,0xc2,0x25,0x73, - 0xd4,0xaa,0xa3,0x8a,0x28,0x25,0x77,0x81,0x67,0x44, - 0x87,0x1f,0xbd,0x93,0x0a,0xe6,0x99,0xa9,0xd2,0x1c, - 0x1d,0xe9,0x21,0x80,0x45,0xb3,0x4f,0x4a,0x26,0xf5, - 0x77,0x27,0x1d,0x23,0x37,0x9d,0xe6,0xb8,0x40,0x6e, - 0x4c,0x3d,0x6d,0x6a,0x37,0x51,0xa3,0xc3,0x00,0x53, - 0x95,0x0e,0x7d,0x7c,0xfb,0x48,0xff,0xfc,0xf9,0x73, - 0x25,0x88,0x3b,0x21,0xa7,0x29,0xd1,0x21,0x0f,0x32, - 0x42,0x6c,0xfb,0xbe,0x91,0x64,0x11,0xc7,0xa3,0x29, - 0x20,0x25,0x4e,0x91,0xe3,0x3c,0x29,0x19,0xda,0x1d, - 0xa8,0x93,0x72,0xb6,0x7b,0xaf,0xfd,0x81,0x7f,0x5f, - 0xff,0x71,0x83,0x10,0x81,0x60,0xdf,0xab,0xec,0x33, - 0xdd,0x93,0xec,0xa9,0x03,0x07,0x66,0x4f,0x10,0x7e, - 0x12,0xb5,0x49,0x25,0x59,0x0f,0x05,0xd0,0x19,0x3b, - 0x80,0x7a,0xfe,0x10,0xa0,0x35,0x91,0xb9,0xcf,0x89, - 0xae,0xf7,0xe3,0x26,0x3b,0x53,0xeb,0x48,0x13,0x00, - 0x97,0x9c,0x40,0xd1,0x87,0x5c,0x19,0xe0,0x4d,0x15, - 0xb4,0x11,0x51,0x0e,0xe0,0x32,0x64,0x5e,0x6a,0xd3, - 0x74,0xf2,0x31,0x14,0x90,0x07,0xf6,0x39,0x79,0x9a, - 0xd9,0xeb,0x52,0x7d,0x20,0xbd,0x56,0x73,0xc0,0xdb, - 0xe7,0x48,0x1e,0x66,0xee,0xbe,0x35,0xf9,0x20,0x55, - 0x71,0x48,0x50,0x1f,0xad,0x29,0x91,0xf1,0x38,0x1a, - 0x33,0xa8,0xe8,0x27,0x12,0x78,0x2a,0x4a,0x34,0x3e, - 0x5f,0x86,0xb4,0xfe,0x4a,0x55,0x53,0xaa,0x22,0xdd, - 0xcf,0xa7,0x24,0xc5,0x8d,0x6f,0x26,0xd9,0x72,0x97, - 0x80,0x25,0x43,0xd3,0xc9,0xae,0x20,0xf1,0x7b,0xf4, - 0xda,0xc4,0xdb,0x27,0x56,0xa4,0xe6,0x1a,0x69,0xa4, - 0xfb,0x67,0x8c,0xda,0x54,0x02,0x2e,0xa1,0x8b,0xc9, - 0x0f,0x05,0x3e,0xd7,0x16,0xe8,0x7e,0x61,0x3a,0xd2, - 0x4e,0xd6,0x27,0xae,0x6d,0x41,0x0a,0xd8,0x0e,0xf9, - 0x12,0x98,0x34,0x7a,0xbd,0xd1,0x46,0xba,0xdb,0x3c, - 0xc1,0xf4,0xb2,0xa8,0x5d,0x73,0xbb,0x97,0x13,0x74, - 0x4c,0xdc,0x26,0x4d,0xae,0xfe,0xfc,0xf9,0xf3,0xa6, - 0x4d,0x41,0x2d,0x10,0x82,0xab,0xe5,0x5a,0x6b,0x42, - 0xff,0x92,0x33,0x3d,0x15,0x0d,0x9a,0x9c,0xf6,0xb1, - 0x7d,0x85,0xab,0x53,0x5b,0xcb,0x25,0x2b,0xbd,0xed, - 0xd7,0x47,0xe8,0xdb,0x3f,0x0f,0x15,0x5e,0x42,0x86, - 0xa8,0xad,0x38,0xb5,0x9c,0x68,0xdf,0x49,0xfc,0x78, - 0x1b,0xef,0xa7,0xa2,0x22,0x05,0x6f,0x48,0xf0,0x1e, - 0xd6,0x18,0xf4,0x4f,0x6f,0x0f,0x8b,0xce,0x57,0x7d, - 0x90,0x84,0xfe,0xb4,0x36,0x3b,0xcc,0xef,0x62,0x20, - 0xb5,0x4d,0xa9,0xdd,0xec,0xb8,0x8f,0xca,0x49,0x84, - 0x62,0xa2,0xdc,0x3a,0x72,0x16,0x11,0xee,0x7e,0x88, - 0xff,0xa6,0x6d,0x62,0xd5,0xd2,0x4a,0x6d,0x36,0xe2, - 0x30,0xba,0xfb,0x74,0x43,0x0f,0x53,0x9c,0x4d,0x6b, - 0xee,0x62,0xd7,0x04,0x74,0x27,0xa0,0xf6,0x6e,0x12, - 0xf4,0x0d,0x87,0x39,0xd5,0x98,0x96,0x57,0xe3,0xe2, - 0x79,0xb7,0x21,0x12,0x8d,0xbb,0xd8,0xd2,0x86,0xb5, - 0x54,0xae,0x65,0x37,0x14,0xb5,0x57,0x58,0x73,0x95, - 0x86,0x5f,0x92,0x09,0x2d,0x51,0x6f,0x08,0x04,0xf9, - 0x9d,0xec,0x2d,0xa6,0x49,0x0d,0x97,0x05,0xbb,0x4c, - 0x2d,0xe9,0x77,0xf4,0xc3,0x2d,0xc1,0xca,0xe9,0xa0, - 0xa2,0x16,0x10,0x6d,0x86,0x54,0x95,0x26,0xae,0x8f, - 0xa2,0x19,0xe4,0x17,0x93,0x5a,0x0f,0x6e,0x63,0x4c, - 0xe6,0x7b,0xe4,0xc1,0xe5,0x50,0x24,0x20,0xc4,0x39, - 0x3d,0x90,0xa2,0xa9,0x10,0x87,0xf0,0x90,0xb3,0xba, - 0x12,0x87,0x0d,0x89,0xba,0xc8,0x5b,0xee,0x7e,0x57, - 0x7d,0x8d,0x04,0xf1,0xb6,0x87,0xde,0x86,0xb6,0x66, - 0x17,0xa8,0xd6,0x68,0x09,0xe2,0x6c,0x4b,0xc2,0xc1, - 0x5c,0x9b,0x89,0x95,0x0b,0xc4,0x0e,0x53,0x0b,0x93, - 0x26,0x27,0x82,0x8d,0x41,0xd4,0x12,0x4a,0xdc,0x27, - 0xb7,0x5e,0x26,0x29,0x05,0xd5,0xc1,0x4a,0x15,0x98, - 0x43,0x3d,0x40,0x3b,0x26,0x26,0x48,0xb4,0x57,0x87, - 0x24,0xf2,0x6d,0xbf,0xdc,0x88,0xc5,0x86,0x84,0xad, - 0x6b,0xf9,0x6e,0xef,0x36,0x84,0xe6,0x6c,0x5a,0xfe, - 0xe6,0x70,0x3c,0xd4,0xf6,0x33,0xb1,0xf4,0xb8,0xe7, - 0x66,0xde,0xfd,0x99,0x8c,0x99,0x2f,0x19,0x9b,0xd7, - 0xbd,0x7d,0x0b,0xff,0xb9,0x9f,0xb9,0x5b,0x53,0x50, - 0x95,0x97,0xaa,0x5b,0x1b,0xe4,0xff,0x04,0x54,0xfc, - 0x68,0xcb,0x28,0x21,0x1e,0xae,0x3d,0xe2,0x46,0xad, - 0x9d,0x9b,0x41,0x88,0x91,0x87,0x80,0xeb,0xd4,0xa1, - 0x70,0x2d,0xf0,0xcb,0x8b,0x1e,0x56,0x47,0x12,0xd5, - 0x69,0x5d,0x5b,0xb3,0xfd,0x9a,0x12,0xc1,0x58,0xf7, - 0x62,0x32,0x29,0xa6,0x36,0x90,0x49,0x6e,0x0a,0xd6, - 0xa8,0x45,0x51,0x86,0xef,0x2b,0x27,0xa1,0xa0,0xef, - 0x77,0x68,0xfd,0xc6,0x0e,0x4b,0x32,0x65,0x57,0x2e, - 0x9d,0xee,0x93,0x97,0x3b,0xe4,0x42,0x55,0x54,0xa1, - 0x15,0x50,0x14,0xc4,0x2e,0xa3,0xd0,0xdc,0x2b,0xa4, - 0x81,0xc8,0x66,0xdb,0x52,0xee,0x81,0xf5,0x8a,0x1f, - 0x0c,0x0e,0x9d,0x1e,0x47,0x91,0xc1,0x25,0x24,0x45, - 0x16,0x55,0xd8,0x70,0xa3,0x36,0xfc,0x85,0x81,0x2b, - 0x41,0x63,0xbf,0x05,0xbd,0xe8,0x72,0xc8,0x05,0x79, - 0xfa,0x38,0x54,0xc5,0x65,0xf9,0xa4,0x40,0x9d,0x5a, - 0x57,0xc9,0x5c,0x15,0x54,0x9f,0x31,0x71,0xbb,0x82, - 0x13,0xb4,0x73,0x88,0xa7,0xf7,0xa7,0x62,0x8e,0x6d, - 0x87,0xd4,0xd0,0xce,0x44,0x71,0x45,0x51,0xa6,0xae, - 0x0b,0xb4,0x88,0x9c,0x98,0xe3,0x05,0x22,0x6f,0x1d, - 0x35,0x6c,0xbe,0x38,0xd6,0x7f,0x8b,0xd4,0xa7,0xc9, - 0x28,0xf3,0x12,0x2f,0x2f,0x12,0x70,0x4c,0xbc,0x93, - 0xbb,0x78,0x71,0x06,0xa4,0xf4,0x79,0x13,0xbf,0x40, - 0x89,0x8e,0xdb,0x04,0x2e,0x25,0x5f,0xdd,0xa4,0x54, - 0x05,0x21,0xb7,0x83,0x14,0x02,0xbd,0xbf,0xbd,0xb7, - 0x0f,0xf6,0x74,0x34,0x76,0x35,0x9b,0xb1,0xa8,0x28, - 0x50,0x84,0x71,0x20,0x87,0xd6,0x80,0xac,0x97,0x26, - 0xc0,0x4e,0x54,0x34,0x11,0x5f,0x03,0x75,0xa2,0xe0, - 0x50,0xfa,0x39,0x03,0xe8,0xbe,0x20,0xf1,0x4d,0x83, - 0x03,0x05,0x05,0x04,0xfa,0x0c,0x06,0x32,0x3c,0x99, - 0x10,0x93,0x45,0x90,0x0a,0x2d,0x46,0x5e,0xed,0x7d, - 0x5d,0x8e,0x8b,0x45,0x93,0xd6,0xae,0xdd,0xee,0x7c, - 0xcc,0x9c,0x0d,0x94,0x43,0xbf,0x1c,0x57,0x2c,0xb4, - 0xd7,0x1f,0x1d,0x88,0x3e,0x8c,0x44,0xba,0x5a,0x53, - 0xb2,0xe6,0xf8,0x6e,0xc6,0xd3,0xee,0x81,0xa8,0xd1, - 0xe1,0xa5,0xc8,0x74,0x28,0xc4,0x5e,0xb6,0xaf,0x4e, - 0x70,0x69,0xe0,0xd0,0x8c,0xe2,0x60,0x04,0xd7,0x26, - 0x5b,0x09,0x0d,0xe2,0xd0,0x4f,0xb6,0xbe,0x65,0xfd, - 0x30,0x72,0x10,0x9d,0x06,0x81,0xd4,0x2a,0x70,0x5a, - 0x2c,0x66,0x7a,0xc2,0x89,0xf6,0xe1,0xc8,0x3b,0xc8, - 0x7e,0xa3,0xd2,0xf3,0xfd,0xf3,0x02,0x55,0x16,0xdc, - 0x7f,0xa5,0x16,0x44,0x0f,0xe4,0xc4,0x9d,0x72,0xf7, - 0xd6,0x0f,0xbb,0x5e,0xfd,0x51,0xbb,0x31,0x89,0x1f, - 0x26,0xc6,0x3e,0x41,0xdf,0xe9,0x1d,0xa8,0x4a,0xb7, - 0xe1,0x58,0x54,0xa8,0x12,0x4a,0xe1,0x70,0x4a,0x7c, - 0x52,0xfb,0xe6,0xfb,0xfb,0x2b,0xa9,0x13,0x77,0x03, - 0xe2,0xad,0x91,0xa2,0x4b,0xbe,0x1c,0xb2,0x49,0x13, - 0x12,0x62,0x02,0x19,0xdb,0x6b,0x46,0x99,0x3c,0xb6, - 0xdf,0x26,0xb4,0xc7,0xb5,0x96,0xa6,0x44,0x21,0x59, - 0xe3,0x84,0xe9,0xae,0xf8,0x39,0x8b,0xca,0xdd,0x26, - 0x26,0x53,0x32,0xf7,0xbe,0x45,0xcb,0x26,0x36,0xee, - 0x77,0xef,0x64,0x9b,0xc8,0xdf,0xf4,0xde,0x95,0x67, - 0x25,0xed,0xb7,0x1a,0x10,0xfb,0x0a,0xad,0x1a,0xab, - 0x41,0xd5,0x93,0xbf,0x1b,0x05,0xd3,0xf6,0x5c,0xe7, - 0x46,0x4e,0xb2,0x24,0x61,0x6f,0x21,0x7a,0x96,0xbc, - 0x17,0x27,0x97,0xf6,0x34,0xdd,0x9c,0x86,0x12,0x34, - 0xfe,0x39,0x01,0xc1,0x84,0xb8,0x39,0x37,0x03,0x97, - 0x7c,0x82,0xc6,0x13,0xae,0x87,0x61,0x90,0x66,0x1c, - 0x8e,0x71,0x9e,0x79,0xc4,0x0f,0x73,0x3e,0x84,0xc4, - 0xdb,0x4b,0x06,0xdd,0x79,0x80,0xb7,0x56,0xaa,0xf3, - 0xce,0xeb,0x90,0xd0,0xe1,0x70,0x96,0xbf,0xdd,0xef, - 0x6f,0x43,0x14,0x5a,0x07,0x3c,0xa3,0x43,0x11,0x61, - 0x68,0xf7,0x52,0x5c,0x55,0x60,0x3c,0x56,0x1e,0x15, - 0x3e,0x98,0xaa,0x59,0x18,0x6c,0x10,0x58,0x7a,0x3b, - 0xd8,0x5d,0x32,0x33,0x79,0xa2,0xa5,0x8a,0x03,0xd0, - 0xa0,0x02,0xf8,0xae,0x02,0xe2,0x60,0x83,0x32,0x8d, - 0x43,0x06,0x88,0x92,0x50,0xb2,0x38,0x3d,0x96,0x7e, - 0xc7,0xc1,0xb7,0x44,0xae,0x25,0xe1,0xc0,0x7e,0x9f, - 0x24,0x90,0x49,0xbd,0xe5,0x24,0xa8,0xe8,0xd6,0xa0, - 0xea,0x41,0xf4,0xa9,0xb5,0x60,0x40,0x58,0xce,0x90, - 0xd4,0xa8,0xe2,0x3e,0x38,0x66,0x7d,0x8d,0x91,0xde, - 0x53,0x9a,0xba,0x22,0xb3,0xe1,0x8d,0xc8,0x9a,0xab, - 0xcc,0x34,0x98,0x68,0x32,0x3c,0x89,0x9b,0xb9,0x80, - 0x4b,0x6a,0xdd,0x93,0xe0,0x22,0x1d,0xc4,0xc4,0xcb, - 0x30,0xfe,0x62,0x27,0xa1,0xae,0x8e,0x48,0xbc,0x01, - 0x8c,0xfa,0xed,0x6e,0xf8,0x3b,0x30,0xec,0x11,0x09, - 0xd0,0x06,0x75,0x3f,0x64,0x9f,0x22,0xa8,0xee,0x43, - 0x77,0x46,0x79,0x85,0xaa,0x51,0x94,0x74,0x77,0xa8, - 0x6d,0x1f,0x84,0x0d,0xdf,0x5a,0x4d,0xc0,0x3b,0x3a, - 0x61,0x3c,0xfa,0x38,0xc3,0xed,0xae,0x5f,0x43,0xc6, - 0xa5,0x7d,0x2f,0x4d,0xef,0xf5,0x1b,0x11,0xb3,0x0a, - 0xc7,0x77,0xbb,0x8e,0x5a,0x49,0xa9,0x55,0xe7,0x0c, - 0x5c,0x61,0x80,0xc5,0x12,0xb9,0x9d,0x39,0xea,0xc5, - 0xca,0xd2,0xa4,0x67,0x54,0x93,0xd8,0x67,0xda,0xb7, - 0xa0,0xbf,0xe6,0xe2,0xf1,0xd1,0xbd,0xac,0xef,0x29, - 0xed,0x67,0xa7,0xa8,0xed,0x8a,0x19,0x8a,0xa7,0x6e, - 0x1d,0x4d,0x13,0x79,0x9d,0x44,0x4e,0x32,0x24,0xf7, - 0x3f,0xbf,0xce,0x39,0xff,0xc7,0x75,0x5d,0xff,0xf9, - 0xba,0xae,0xff,0x8f,0x5e,0xfe,0x0d,0x71,0x6d,0x1f, - 0xe0,0x74,0x88,0x6a,0x56,0xed,0x46,0x2c,0x1d,0xea, - 0x43,0x2d,0xb1,0x04,0x91,0x2b,0x7c,0xec,0x5a,0x25, - 0x4e,0xa0,0x8f,0x20,0x52,0x1a,0x07,0x9f,0xfc,0x52, - 0x4c,0x70,0x7a,0xc8,0x84,0xc3,0x42,0x7a,0xac,0x6c, - 0x35,0xf0,0x24,0x74,0x29,0x79,0xe5,0x48,0x26,0x4d, - 0x1a,0x23,0x45,0xa8,0x9e,0xfa,0xb7,0xf4,0x40,0x45, - 0xe2,0x78,0x77,0x75,0x08,0x09,0x5b,0x85,0x43,0x31, - 0xad,0xbd,0x4a,0xd6,0x09,0xfd,0x1e,0x9c,0x77,0x19, - 0xa1,0x9e,0xe4,0xa3,0x93,0x0e,0x4c,0x6d,0xdd,0x98, - 0xf7,0x4f,0x84,0x77,0x84,0xad,0xd3,0x7e,0xfb,0x24, - 0x59,0x9e,0x02,0xe2,0xa6,0xc2,0x06,0x14,0x63,0x34, - 0x3b,0x24,0xf4,0x95,0x10,0x28,0xfd,0x73,0x27,0x7a, - 0xa8,0xd7,0x10,0xd0,0x99,0x43,0xd3,0x25,0x7d,0x3d, - 0x2c,0x12,0xbd,0xfb,0xbb,0x0e,0x15,0x54,0xfa,0x79, - 0x24,0xbe,0xa8,0x6b,0xac,0x17,0x10,0xca,0x11,0x72, - 0x48,0xfb,0xfb,0x5f,0x79,0x34,0xb4,0x8b,0x2e,0xa6, - 0x58,0xed,0x14,0x9c,0x93,0xaa,0xb6,0xb9,0xf7,0x33, - 0x4c,0xf2,0xa6,0x04,0xf2,0xc0,0xda,0x38,0xa4,0x1c, - 0xdc,0x93,0x0d,0xf3,0xbe,0x0f,0x14,0xa8,0x07,0x92, - 0xd6,0x03,0xe8,0xc7,0xdb,0x35,0xc8,0x33,0x3b,0xe0, - 0xaf,0x76,0x78,0x9b,0xd9,0xeb,0x3d,0xa0,0x7f,0x75, - 0x5c,0x6b,0xfe,0x82,0x51,0xf7,0x0b,0xc6,0xc9,0xbb, - 0xa8,0xa1,0xec,0xdd,0x03,0x1c,0x99,0x03,0x6b,0xfe, - 0xb8,0xb5,0xa7,0xcf,0x4e,0xce,0x01,0x32,0x7e,0x3d, - 0xfd,0x5d,0xcb,0xbf,0x1f,0x87,0x9a,0xba,0xaa,0xc0, - 0x3d,0x13,0x23,0x0b,0x72,0x06,0x0d,0xc3,0xff,0xa1, - 0xaa,0xfe,0xcb,0x6b,0x62,0xfa,0xf7,0x43,0x26,0x55, - 0xb7,0x44,0xa8,0x9c,0xe0,0xdd,0xa0,0x4d,0x83,0xc9, - 0x89,0x69,0x5d,0x91,0xa3,0xfa,0xe3,0x50,0x23,0xce, - 0xce,0x44,0x06,0x37,0xc9,0x47,0x14,0x75,0x53,0xf1, - 0x36,0x6a,0xdd,0xa4,0x03,0x85,0x0e,0x0b,0xb5,0xb3, - 0xd0,0x03,0x1b,0x26,0x7a,0xca,0xf1,0x2a,0x1c,0xf2, - 0xa3,0xcf,0x94,0xcc,0x6a,0xcd,0x7d,0x54,0x68,0x57, - 0x58,0xc3,0x51,0x9a,0xaa,0xd8,0x48,0x2e,0x5c,0x41, - 0x70,0x33,0xf5,0xfb,0x6f,0x54,0xc5,0xb5,0xe7,0x5a, - 0xff,0xbe,0x02,0x52,0xd7,0xd1,0x95,0xa2,0xaa,0x47, - 0xb7,0x02,0xa1,0x07,0x26,0xe9,0x8c,0x6d,0x31,0xa3, - 0x7a,0x7c,0x7d,0xf3,0x77,0x0a,0xa6,0x85,0x22,0x7a, - 0x68,0x0c,0x20,0xad,0x50,0xdf,0xc6,0xc9,0x3d,0x91, - 0x11,0xe9,0x73,0x92,0x6e,0xcf,0x46,0x8c,0x90,0x46, - 0xf5,0x89,0xe7,0xb4,0xd9,0xf3,0xa1,0xd8,0x2a,0x7d, - 0x47,0x6e,0x1d,0x19,0x14,0xb1,0xb4,0xe8,0x73,0xf7, - 0x77,0xb7,0x50,0x13,0xea,0x2b,0xe8,0x5e,0xa5,0xeb, - 0x6e,0x3c,0xa7,0x8b,0x92,0xf4,0xd4,0x9d,0x52,0x6e, - 0x09,0xc9,0x4c,0x4c,0xfe,0x66,0x49,0xf0,0xce,0x24, - 0xbd,0xa8,0x56,0x7f,0x19,0xfe,0x5f,0x12,0x86,0x55, - 0x6f,0x47,0xa7,0xce,0x4d,0x4e,0xf6,0xc9,0xcf,0x32, - 0xad,0x4b,0x9a,0xda,0x4b,0xc2,0x9d,0x7a,0x9f,0x1d, - 0x95,0x4d,0xd3,0x4c,0x9b,0x69,0xb1,0xc9,0x7e,0x87, - 0x9c,0xe3,0xdb,0x24,0xae,0x9b,0x84,0xc5,0xd8,0x4b, - 0xc5,0x97,0x8a,0x4c,0x4e,0xdc,0xd9,0x7b,0x02,0x97, - 0xba,0x52,0x5d,0x87,0xcf,0xc4,0x9a,0x64,0x80,0xfd, - 0x6f,0xf7,0x42,0xab,0xc6,0xcd,0xd8,0x5a,0x5a,0xe0, - 0x81,0xbf,0xf1,0x38,0x28,0x27,0xb1,0xbc,0xa4,0x02, - 0xbc,0x99,0x0a,0xeb,0x2f,0xcf,0xb5,0xac,0x5c,0x8f, - 0x1a,0x94,0x77,0x6b,0xb3,0xf9,0xbb,0x63,0x3b,0x40, - 0xfe,0xe5,0x92,0x25,0xea,0xc3,0x86,0xf1,0x71,0x22, - 0xe0,0xd5,0xc4,0xd7,0x22,0x05,0xcf,0x8d,0x67,0x8b, - 0x13,0x79,0xec,0xbc,0x97,0xb0,0x01,0xcb,0x89,0xe5, - 0xdd,0xcf,0xd0,0xa9,0x16,0xd3,0x73,0x57,0x64,0x87, - 0x50,0x9f,0xa1,0x85,0x5b,0xe9,0xe0,0xa3,0x04,0xcf, - 0x11,0xfb,0x03,0xdf,0xe1,0xed,0xf0,0x49,0xea,0xd2, - 0xc2,0xcf,0xc1,0x56,0x95,0xe9,0x6b,0x3f,0x78,0x2b, - 0x49,0x34,0x90,0x12,0x2e,0xc7,0x7f,0x99,0x7e,0x97, - 0xf4,0x7c,0xa6,0x58,0x90,0x62,0xc3,0xf4,0x73,0x89, - 0x3c,0xb9,0xd4,0xfa,0x7a,0x53,0x82,0xbe,0xa5,0x12, - 0xf4,0xa0,0x4b,0xad,0x3b,0x45,0xc5,0xdd,0x21,0x3a, - 0x24,0x54,0x45,0x09,0x85,0xdb,0xcf,0x64,0xe6,0xec, - 0x5a,0xc7,0x03,0x22,0xf7,0x16,0xdb,0x34,0x46,0xa8, - 0xa5,0x8e,0x21,0xa0,0x57,0x48,0x84,0xdf,0xf8,0x49, - 0xe6,0xb3,0x29,0x6e,0x17,0x4d,0x2e,0x75,0x45,0x78, - 0x83,0xd4,0xc5,0x96,0xb7,0x92,0xf2,0x81,0x23,0xf4, - 0x70,0xb4,0x97,0xef,0x21,0x40,0x20,0x3a,0xb1,0x9b, - 0x75,0x54,0x8e,0x03,0xd4,0xbf,0x57,0x12,0x26,0x74, - 0xa0,0x27,0x1a,0x42,0xea,0xb0,0xe8,0x3b,0xeb,0x84, - 0x73,0x68,0xc3,0x5a,0x9e,0x9d,0x9a,0x27,0x27,0x52, - 0xf7,0x84,0x74,0x43,0x91,0x53,0x9b,0xd8,0x90,0x26, - 0xde,0x52,0x72,0x4a,0xb1,0xeb,0xf7,0x22,0x50,0x55, - 0x70,0x5a,0xae,0x30,0xe1,0x51,0x29,0x90,0x53,0xb5, - 0x42,0x07,0x44,0x20,0x3c,0x15,0x8c,0xec,0xd2,0xc4, - 0xda,0x63,0xfa,0xc8,0x99,0x48,0xd2,0x3d,0x26,0xd1, - 0x26,0x27,0xf5,0x3e,0xb5,0x3f,0x2e,0x33,0xaa,0xbb, - 0xe5,0xea,0x50,0x22,0x3a,0x29,0x13,0x3b,0x33,0x52, - 0x15,0x38,0x4b,0xde,0x66,0x86,0x27,0x53,0x14,0x78, - 0x93,0x9b,0xfa,0xc5,0xc6,0x9d,0x93,0xfe,0x12,0x7a, - 0xbc,0x0d,0x88,0x0c,0x7a,0x8c,0xa9,0x3f,0x99,0xdb, - 0x2c,0x4e,0x24,0x54,0x37,0x9c,0xd3,0x29,0x21,0xa2, - 0x3e,0x19,0x03,0x0f,0x95,0x5c,0xb9,0x8a,0x26,0x6d, - 0xfa,0x56,0xe1,0xd5,0x24,0x6d,0x41,0x82,0x93,0xd0, - 0xb6,0x45,0xb4,0x87,0x82,0xeb,0x07,0xfc,0xbc,0x0b, - 0xb8,0x0f,0x2b,0xa4,0x94,0x9e,0xf9,0xb4,0xde,0x3a, - 0xe4,0xae,0x09,0x0f,0x25,0xb0,0xd7,0xbb,0xa4,0xc4, - 0x76,0xcc,0xbe,0x17,0x05,0x27,0x3d,0x8f,0x8d,0x5a, - 0xb4,0x0a,0x29,0xc2,0xa1,0x51,0xce,0xbf,0x4c,0x13, - 0x92,0x4b,0x84,0x1f,0x8d,0x36,0xcf,0xa1,0x58,0xec, - 0xfe,0x4e,0x7f,0x4f,0x91,0xe1,0xe0,0x8f,0x56,0xda, - 0x62,0x73,0xfc,0x10,0xe5,0x69,0xba,0x36,0x65,0x7f, - 0x86,0xca,0x7f,0x73,0x5e,0x5f,0xfd,0x3b,0x9c,0xd0, - 0xa5,0xb6,0x98,0x1c,0x8f,0xa7,0xc9,0x73,0xbc,0x09, - 0x46,0xf6,0xc7,0xf3,0xf5,0xf5,0xf5,0x36,0x02,0xdf, - 0xd5,0x95,0x9d,0x96,0x1c,0x48,0x11,0x20,0xaf,0xc8, - 0xf9,0xb6,0x39,0xfe,0x57,0xe3,0x1a,0x1e,0x28,0xf4, - 0x4f,0x28,0xf4,0x5c,0x6b,0xf7,0xcd,0xbf,0xcc,0xf9, - 0x9a,0x25,0x2e,0x9d,0xfc,0x39,0xa9,0x60,0x3f,0x7c, - 0xdd,0x1c,0xd7,0x2b,0x59,0xc8,0xfc,0xa6,0xbe,0xbb, - 0x06,0x89,0xc9,0x5b,0xc8,0x09,0x25,0xa5,0x00,0x3b, - 0xc9,0xec,0xb7,0x11,0xc9,0x47,0xe0,0x4e,0x0a,0xc2, - 0x34,0x6a,0xa9,0x44,0x2b,0xd2,0x44,0x70,0x19,0xa8, - 0x9b,0xe2,0x70,0xd9,0xef,0xe4,0x80,0x3d,0xfd,0xa3, - 0x19,0xf6,0xc4,0xab,0x9a,0xc4,0xbb,0xd2,0x61,0xd6, - 0xd1,0x31,0x15,0x93,0xfa,0x44,0xcb,0x88,0x0e,0x54, - 0xd7,0x46,0xa3,0xc4,0xda,0xb5,0xea,0x20,0xc9,0x28, - 0xf5,0x83,0xe9,0xd5,0xa6,0x9b,0x74,0x70,0xc9,0x1b, - 0x54,0xe9,0x45,0xa2,0x9a,0xc4,0x6f,0x02,0xab,0x01, - 0xb4,0x41,0x71,0x50,0xfe,0x54,0x24,0x90,0xf4,0x82, - 0x5b,0x0b,0xf0,0x39,0x35,0xb5,0x7b,0x83,0x40,0xa9, - 0xfd,0xf9,0xd6,0x82,0x8b,0xed,0x97,0xa9,0xbd,0xdd, - 0x13,0x4b,0x5a,0x23,0x94,0x78,0x29,0x1f,0x21,0xed, - 0x87,0x04,0xcd,0x83,0x99,0x72,0x4f,0x32,0x4f,0x42, - 0xbd,0xe8,0xbd,0xf6,0x43,0x3d,0x91,0xbd,0x95,0x04, - 0x9d,0xde,0x41,0x27,0xf5,0x86,0xfb,0x79,0xb3,0xc2, - 0x08,0xaa,0xe5,0x87,0x12,0xdf,0xdb,0x00,0xf3,0xeb, - 0xeb,0xeb,0xfa,0xf5,0xeb,0x17,0x21,0xcd,0xc7,0x5d, - 0xe3,0x77,0x5c,0x39,0x1d,0x85,0xa1,0x84,0x26,0x25, - 0xa7,0x52,0x38,0x12,0x27,0x0a,0x15,0x93,0x6f,0x7b, - 0x06,0x45,0xe7,0x82,0x4e,0x0e,0x59,0x70,0xd8,0x7b, - 0x75,0x89,0x56,0x4a,0x52,0x54,0x6b,0x48,0x9f,0x89, - 0x43,0xa1,0x35,0x99,0x9e,0xec,0x63,0x5c,0x61,0x34, - 0xdc,0xf3,0x15,0x1c,0x1d,0x1e,0xdd,0x0b,0x20,0xc5, - 0x57,0xe2,0x90,0xa5,0xef,0x31,0xc5,0xe3,0xcf,0xfa, - 0xa6,0x98,0xa0,0x45,0x89,0x6b,0x1b,0xba,0xbf,0xa3, - 0x78,0xf0,0xfb,0x02,0x3d,0x16,0x15,0x38,0x23,0xc4, - 0x61,0x9a,0x86,0x71,0x0a,0x9f,0x9b,0x2c,0x92,0x02, - 0x14,0xdd,0xf0,0x74,0x98,0x29,0xe4,0xea,0xcc,0xfd, - 0x8c,0x97,0x4b,0x4d,0x48,0x95,0xb6,0xd0,0xdc,0xe4, - 0x4f,0xe2,0xeb,0xd0,0xf5,0x13,0x24,0x4e,0xdf,0x4b, - 0x19,0xb0,0x43,0x02,0x48,0xe8,0xb0,0xeb,0x88,0x18, - 0x67,0x63,0xe4,0x65,0x4d,0x48,0xdb,0x84,0x56,0x39, - 0x14,0x85,0x0c,0x5e,0xdd,0x46,0xba,0x49,0xd4,0x7d, - 0x2d,0xf6,0x1e,0xfa,0x3d,0x45,0x95,0xac,0x36,0xc8, - 0x2f,0x4a,0x9f,0x6f,0xe2,0x86,0x0c,0xfa,0x19,0xf8, - 0x6e,0x93,0xa5,0xc2,0xd4,0xda,0x99,0x26,0xed,0xa6, - 0x40,0xb0,0xf4,0xa6,0xab,0xed,0xef,0xa4,0xa4,0x6f, - 0x32,0x1b,0x1d,0x48,0xe1,0x98,0x04,0xb9,0x36,0xe3, - 0x9d,0x80,0xb8,0x18,0x96,0xe4,0xf3,0x1d,0xa2,0xd0, - 0xfe,0xfc,0x74,0x8b,0x0f,0xd7,0x16,0x10,0xf7,0xeb, - 0xb7,0xc4,0x86,0x78,0x16,0x74,0x78,0xa6,0x98,0xa1, - 0x08,0x01,0x88,0xb2,0xa6,0x09,0x39,0xb4,0x49,0xd0, - 0x83,0x8d,0x44,0xec,0xfa,0xe7,0x3b,0xb7,0xf5,0x3b, - 0xf1,0x50,0x3f,0x3d,0xbd,0xae,0xfb,0x59,0x11,0x12, - 0xf6,0x7a,0xbd,0xaa,0x8b,0x4e,0x2a,0xe2,0xeb,0x10, - 0x2d,0xfa,0xf3,0x24,0xca,0x08,0x88,0x72,0x42,0x0e, - 0x6d,0xa1,0x9d,0x7e,0x97,0x5a,0xb3,0x81,0xe7,0xe2, - 0xce,0x86,0x03,0xf4,0x0d,0x9c,0x16,0x4b,0x7e,0x6c, - 0x86,0x73,0xe9,0x50,0xbc,0x37,0xfe,0xd6,0x1d,0x63, - 0x93,0x61,0x6b,0xe0,0xb7,0xfe,0x20,0x6b,0x74,0x06, - 0x80,0xea,0xf9,0x71,0x53,0xab,0x97,0xd8,0x77,0x90, - 0x30,0xa5,0x8b,0xaf,0xaf,0x21,0x88,0x55,0x7a,0x61, - 0x69,0x61,0x80,0x96,0x41,0x85,0x39,0x7e,0x6c,0x1d, - 0xb9,0xca,0x5d,0x11,0x29,0x87,0x44,0x38,0x54,0x09, - 0x5c,0xd5,0xaf,0x65,0x80,0x1a,0x17,0x75,0x87,0x32, - 0xa7,0x69,0x1d,0x1a,0xef,0x4b,0x09,0xa7,0x42,0xf2, - 0x9d,0xe8,0xbb,0x49,0xf6,0xd4,0xfe,0x22,0x8d,0xf8, - 0xf7,0x96,0x0f,0x04,0x88,0x72,0x8e,0xe5,0x34,0xc1, - 0xd4,0x51,0x03,0x21,0x1c,0x5b,0x6e,0x84,0xf1,0x49, - 0x7a,0xfb,0xcc,0x76,0x7d,0x65,0xa6,0xd1,0xf0,0x39, - 0x0b,0x61,0xbc,0x06,0xbf,0x2b,0xfb,0xd9,0x64,0x59, - 0x31,0x70,0x0d,0xca,0x21,0xab,0xce,0xac,0x32,0xa8, - 0x8a,0x63,0xa5,0xdc,0xed,0x29,0x26,0x7e,0x0c,0xf1, - 0x44,0xae,0xa7,0x9d,0x44,0x39,0x2d,0x90,0x49,0xbc, - 0x73,0x23,0x47,0x4f,0x7b,0x84,0xf8,0x69,0x5a,0xf0, - 0x4c,0x88,0xeb,0x7d,0x1f,0xcd,0xf5,0xbd,0x2e,0x33, - 0x48,0x31,0xdd,0x87,0x14,0x4a,0x0f,0xf1,0x44,0xd2, - 0x96,0xe9,0xed,0x80,0x6f,0x82,0x7a,0x2d,0xd4,0xad, - 0x51,0x64,0xd3,0xb4,0x95,0x6a,0xa8,0x70,0xeb,0x62, - 0xa7,0x72,0xfc,0x2e,0xb1,0xf5,0xa9,0xc4,0x1b,0xa2, - 0xa4,0x39,0x4c,0xd9,0x3e,0x38,0x92,0x62,0x3d,0x54, - 0xba,0x46,0xb4,0xf5,0x6c,0x62,0xb2,0xbd,0x0e,0x9a, - 0x3a,0xa5,0x96,0xec,0x2d,0xa4,0x6b,0x12,0xca,0x0a, - 0xa3,0xf1,0xd4,0x7a,0x89,0x31,0x7c,0xf2,0x1b,0xbc, - 0x5b,0x73,0xc9,0x9f,0x12,0x38,0x4a,0x6e,0x8f,0x14, - 0x25,0xdc,0x09,0x5d,0x32,0x9d,0x9d,0x4a,0x31,0xdd, - 0x24,0x4b,0x95,0xda,0xdd,0x90,0x6c,0x3e,0x2c,0x3a, - 0x92,0x07,0xa5,0xc6,0xa3,0x69,0x52,0x56,0xd7,0xcf, - 0x2b,0x89,0x11,0x4e,0x55,0x1f,0x65,0x5c,0xe4,0x16, - 0x4d,0x9f,0x75,0xb7,0x63,0x28,0x93,0x24,0xc6,0x3f, - 0x24,0x33,0x8f,0x51,0xef,0x7e,0x5d,0x70,0xd8,0xd8, - 0x60,0x07,0x42,0x55,0x44,0x14,0x2d,0xb8,0xd7,0x68, - 0xcb,0x40,0xd5,0x29,0x4c,0x5f,0xd9,0x9e,0xbc,0x4b, - 0x26,0x61,0x74,0xb9,0x82,0xc1,0x2d,0xc2,0x84,0xf4, - 0x9c,0x13,0xa9,0x30,0x39,0xcb,0x9b,0xcd,0x50,0xae, - 0xe5,0xd8,0x83,0x0f,0x25,0x79,0xa1,0xc5,0x58,0x17, - 0x90,0xd7,0x27,0xad,0xa2,0x16,0x1c,0xa6,0xde,0x65, - 0x4d,0x01,0x48,0x13,0x3b,0x4a,0x44,0x1a,0x79,0x1e, - 0xc9,0xa6,0x4e,0x25,0xb7,0x1d,0xee,0x58,0x3d,0x4d, - 0xe2,0x7d,0xed,0x50,0x57,0x8f,0xa8,0x47,0xf2,0x3f, - 0x4d,0x4e,0x2d,0x10,0xb0,0xb1,0x62,0x24,0x0e,0x56, - 0xaf,0x40,0x27,0x12,0xb6,0x8b,0x1f,0x7d,0x48,0xe1, - 0x7a,0x9f,0x0c,0x1b,0x5b,0x83,0xe0,0x73,0x54,0xba, - 0x76,0x89,0xd7,0x20,0xeb,0x0a,0xf7,0xb6,0x49,0x68, - 0x6d,0xac,0xd0,0x49,0x44,0x6a,0xc1,0x13,0x92,0x68, - 0x12,0x1d,0x44,0x60,0xdd,0xbe,0x75,0x03,0x1c,0x1b, - 0xd3,0x66,0x22,0x13,0xd3,0x3e,0xd4,0x38,0xa1,0xe4, - 0x6c,0x2a,0x7c,0x13,0x17,0xd5,0x15,0x94,0xae,0x5a, - 0x72,0x87,0x3f,0x79,0x8c,0xb9,0x73,0x05,0xf6,0x07, - 0x72,0x35,0xdd,0x5a,0x4f,0xad,0x5b,0x3d,0xe7,0xa6, - 0x04,0x9b,0xe8,0x1d,0x26,0x91,0x2a,0x57,0x04,0xb8, - 0xf7,0xe3,0x62,0x94,0x13,0xea,0xa5,0xe4,0x71,0x2a, - 0x92,0xa8,0x50,0x30,0xfc,0xbc,0x0a,0x2d,0xbe,0x22, - 0x7b,0x9d,0x57,0xb8,0x99,0x34,0xdd,0x55,0x69,0x9c, - 0xdc,0xf5,0x5c,0x9d,0x47,0x57,0x5a,0xec,0xa4,0xe1, - 0xa3,0xe8,0xc6,0xc4,0x49,0xa2,0xf1,0x5b,0x82,0xda, - 0xfb,0x0b,0xd4,0xea,0x3c,0x70,0x26,0x88,0xbc,0x6d, - 0x5b,0x5f,0xca,0xbf,0xd1,0x56,0x0c,0xa9,0x2a,0xd3, - 0xe2,0x70,0x15,0xf9,0x64,0x7e,0xe9,0x38,0x0f,0x00, - 0x17,0xbf,0x7d,0xc7,0x3d,0xfd,0xe2,0xae,0xa3,0x27, - 0xb2,0x66,0x4d,0x51,0x95,0x76,0x4d,0x44,0x7a,0xfa, - 0xae,0xc0,0x85,0x79,0x4b,0x00,0x15,0xba,0xbd,0xc0, - 0x72,0xc2,0x49,0x0c,0xb8,0xfd,0xe1,0xae,0x8d,0x2a, - 0x5a,0xf7,0xfb,0x90,0xc8,0x95,0xe3,0x82,0x51,0x90, - 0xa6,0x77,0x40,0xbc,0x20,0x59,0xab,0xa5,0x3a,0x4e, - 0xe9,0xf0,0x77,0x9f,0xa5,0x63,0xba,0xa4,0xca,0x4c, - 0x95,0x6a,0xb3,0x1c,0x79,0x1b,0x4f,0xdf,0xe8,0x7c, - 0xa5,0x20,0x9e,0xee,0x3f,0x5c,0x1f,0x8e,0xfd,0x4f, - 0x3c,0x06,0x37,0xc1,0x47,0x49,0x90,0xb4,0x94,0x6b, - 0x4a,0x0e,0x7b,0x52,0x9c,0xbc,0xb0,0xfa,0x9e,0x0c, - 0x85,0x66,0x0d,0xc4,0xf7,0x22,0x61,0x5a,0x42,0x1d, - 0xfa,0x35,0x06,0xe4,0xaf,0x82,0x5a,0x77,0x41,0xcb, - 0xbb,0xdc,0xc8,0x7c,0x9f,0xaa,0x72,0x44,0xdd,0xad, - 0xbd,0xcf,0x76,0xb2,0xca,0xac,0x1b,0x32,0x8d,0xad, - 0x6d,0x8b,0x7a,0x83,0xdc,0x4c,0xfe,0x9a,0xee,0xda, - 0x49,0x36,0xc4,0xa1,0x40,0xdb,0xa1,0x9a,0xe4,0x15, - 0x98,0xf4,0xd2,0x92,0x97,0x9f,0x3b,0xaf,0xd5,0xb7, - 0x8d,0xbc,0x36,0x93,0x83,0x84,0xfe,0x7d,0x5f,0x3b, - 0x5d,0x21,0x5f,0x91,0xe7,0x57,0xba,0x38,0x17,0x6c, - 0x12,0x4f,0x27,0x41,0xb6,0xc4,0xe7,0x99,0xec,0x0d, - 0x1c,0xa4,0xe5,0xc4,0xe6,0xd2,0x4b,0xb8,0x06,0x1d, - 0x08,0xb0,0x0c,0x40,0x61,0xc0,0x44,0x2e,0x4b,0xad, - 0x13,0xad,0x00,0x49,0x24,0x4f,0x2a,0x70,0xac,0x24, - 0xd4,0x16,0xa3,0x07,0x42,0xa3,0x10,0x5b,0xe4,0xd3, - 0x42,0xfa,0x29,0x50,0x11,0x12,0xda,0x50,0x7f,0xfe, - 0xfc,0xa1,0x77,0x94,0xe4,0xd9,0x0b,0x0e,0xaf,0x0a, - 0x32,0xf0,0x15,0xc8,0x7e,0x18,0x70,0xfb,0xf7,0x01, - 0xd4,0x6b,0x0f,0x62,0x19,0x51,0x8d,0xe3,0xe2,0x97, - 0xe8,0xcd,0x28,0x77,0x45,0xd7,0x5f,0x72,0x2d,0x77, - 0xed,0x0a,0xf5,0xba,0x21,0xde,0x81,0x70,0x41,0x7e, - 0x7e,0x17,0xfc,0xcf,0x6c,0x11,0x90,0xa0,0xeb,0x16, - 0xa8,0xaa,0xb7,0x9a,0xa4,0x0f,0x57,0xd7,0xbb,0x45, - 0xc4,0x5b,0xa2,0x01,0xfa,0x2f,0x25,0x2d,0xa3,0x9f, - 0xdf,0x6d,0xce,0xea,0xae,0xb5,0x65,0x2d,0x79,0x52, - 0x1b,0x11,0x06,0x3e,0xf4,0x7b,0x22,0x7a,0x6d,0x0a, - 0x80,0x52,0x39,0x8d,0x10,0x0b,0x1f,0xe8,0x1b,0x7d, - 0xc7,0xfd,0xac,0x4d,0x32,0xaf,0xb1,0xb4,0x28,0x79, - 0x75,0x1e,0x7b,0x69,0xb2,0xd7,0xc9,0x87,0xb8,0xf5, - 0xb1,0xf0,0x19,0xab,0x30,0xd5,0x4b,0xe6,0xd5,0x15, - 0xb8,0x77,0x18,0x83,0x52,0xb2,0x9b,0x12,0x7e,0x10, - 0x41,0x8d,0xda,0x72,0x4e,0xeb,0x67,0x33,0x1a,0x4f, - 0xe0,0x42,0x90,0x3c,0x28,0xa7,0x17,0x15,0x92,0x5a, - 0x3b,0xb9,0x4c,0xb2,0x21,0x13,0xe2,0xd4,0xcf,0x92, - 0x4e,0x5b,0x98,0xde,0x4b,0x9a,0x44,0xd6,0x44,0x93, - 0x5a,0x55,0x49,0xd5,0xdf,0xa0,0xc2,0x84,0xd2,0x61, - 0xf7,0xe1,0x45,0xd0,0x78,0x42,0x86,0x40,0x94,0xee, - 0xf1,0x7b,0x5a,0x01,0x39,0xf4,0x27,0x24,0x60,0x05, - 0xa6,0x89,0x51,0xc7,0xc0,0x55,0x2e,0x81,0xa8,0x77, - 0x01,0xbb,0x3f,0xf6,0x8d,0x5d,0xcb,0x67,0xf2,0x4b, - 0x71,0x95,0xa9,0xcb,0x94,0x97,0x8a,0xbf,0x64,0xa5, - 0x80,0x64,0x6b,0x87,0x2a,0x10,0xb9,0xf9,0x62,0x9d, - 0x9c,0xda,0x24,0xbc,0xad,0xa7,0x9e,0x36,0x63,0x69, - 0xcf,0x38,0x69,0x8e,0xd0,0x26,0xd3,0x04,0xc7,0x91, - 0xea,0x94,0xcb,0x44,0x41,0x09,0xb4,0x2e,0xde,0xae, - 0x09,0x4c,0x45,0x23,0x8f,0x0d,0x92,0xdd,0x89,0xbf, - 0xa1,0x89,0xcf,0xca,0x34,0xb7,0xb7,0xff,0xa8,0x45, - 0xda,0xcd,0x55,0x13,0xb7,0x48,0x79,0x4e,0x3d,0x91, - 0x49,0xfc,0x0f,0xaa,0xf2,0x86,0x89,0x41,0x6b,0x60, - 0xa8,0xf6,0x1a,0xc4,0xef,0xbb,0x9e,0x7a,0x46,0x35, - 0x20,0x78,0x78,0x1d,0x12,0xf4,0x1f,0x86,0xa7,0x30, - 0x91,0xfa,0x40,0x6e,0x2e,0xd0,0xc6,0x01,0x4f,0xa3, - 0x22,0x44,0x37,0x99,0x44,0xd2,0x58,0x7f,0xd2,0x83, - 0x0a,0x71,0x62,0x23,0xfd,0x51,0x01,0x85,0x43,0x04, - 0x38,0xc4,0x9a,0x38,0x64,0x40,0xc8,0x3d,0xb5,0x95, - 0xdd,0xbd,0x39,0x29,0x86,0xc5,0x50,0x02,0x3d,0x43, - 0xd2,0xff,0xb2,0xef,0xc5,0xe9,0x09,0x11,0x82,0x3c, - 0x59,0x37,0xa4,0xc4,0x4d,0x05,0x17,0x03,0xbf,0xcc, - 0x12,0xe6,0x81,0x5f,0x87,0x22,0xb9,0x49,0xcc,0x97, - 0x92,0xf4,0xa9,0xcd,0x65,0xc6,0xe8,0xed,0xa0,0x13, - 0x4d,0x49,0xf7,0xe4,0x4c,0xcf,0x3b,0xdd,0x83,0xf7, - 0x9f,0xff,0xa6,0x6a,0x72,0x0a,0x6e,0x5b,0x98,0x4b, - 0x5b,0x0e,0xfa,0x80,0x36,0x2c,0xfb,0x89,0xcc,0x44, - 0xd0,0x23,0x8c,0x29,0x47,0xe7,0xdb,0x2d,0xe9,0x54, - 0x5b,0x7e,0x93,0x46,0x82,0x4b,0x38,0xfa,0xc7,0x40, - 0xdb,0xa3,0xf4,0x3b,0x5c,0x12,0x95,0x92,0xa7,0xc0, - 0xa9,0xa2,0x31,0x7e,0x1a,0xcf,0xb6,0x63,0xe2,0xbd, - 0x72,0x71,0x32,0x05,0x9b,0x03,0xcf,0xf5,0xc8,0x09, - 0x81,0x9b,0x38,0x05,0x93,0x1f,0xd6,0x44,0xd8,0x0c, - 0x09,0xc5,0x98,0xa8,0x4c,0x89,0xfd,0xd7,0xd7,0x57, - 0x51,0x2f,0x7d,0xba,0x57,0xe2,0xbc,0x90,0x97,0xdc, - 0x62,0x4f,0x26,0xa5,0xe3,0x28,0xa4,0x49,0xbc,0x20, - 0x9a,0x1e,0x4d,0x08,0x95,0x6b,0x29,0x24,0x72,0xf4, - 0x94,0x00,0x52,0x31,0xd3,0xbe,0xfb,0x38,0xa4,0x6d, - 0xb0,0x43,0x71,0xcf,0xe6,0x4c,0x3c,0x26,0x69,0xa7, - 0x9e,0xc5,0x21,0xf5,0xf8,0x59,0xa8,0x8e,0x8b,0x6c, - 0x10,0x9c,0x17,0x55,0x70,0x8f,0x3f,0x34,0xfd,0xd8, - 0xa7,0x8a,0xd2,0xa8,0xb7,0x7a,0x39,0xf5,0x1b,0x48, - 0x7e,0x5e,0xae,0xdd,0x0e,0x96,0x15,0x6f,0xd3,0x61, - 0xe2,0x13,0x69,0xf5,0x6c,0xae,0x7f,0x54,0xd1,0x8f, - 0x79,0x27,0x75,0x19,0xbf,0xb5,0xcb,0xe8,0xc5,0xe8, - 0xa4,0x9c,0xb4,0x1d,0xe9,0x3e,0xec,0x68,0xbc,0x4b, - 0x98,0xc3,0xa8,0xf8,0x63,0x6a,0xa9,0xc5,0xa0,0x63, - 0xa6,0x3a,0x1f,0x5e,0x61,0x8b,0xb6,0xda,0x47,0x7b, - 0x6a,0xa2,0x50,0x4c,0xad,0x74,0x9d,0x14,0xd7,0x69, - 0xc2,0x0b,0xc6,0xfd,0xc3,0x74,0xf8,0x43,0xfe,0x40, - 0x50,0xc0,0x33,0x4d,0xf2,0xfd,0x20,0x48,0x06,0xf2, - 0x7b,0x33,0xa4,0x34,0x55,0x0d,0xf1,0x37,0xca,0x05, - 0x46,0x67,0x6c,0xe8,0xc4,0x07,0xa9,0x92,0x96,0x80, - 0x51,0x44,0x7c,0x9b,0x60,0x4f,0x82,0xe4,0x44,0x84, - 0x8e,0x54,0x5d,0x0b,0x88,0x5e,0x05,0xf0,0x68,0x01, - 0xdc,0x1d,0x11,0xa4,0xd4,0x83,0x25,0xef,0xb1,0x34, - 0x82,0xaf,0xa8,0xcd,0x04,0x07,0xba,0x16,0x9f,0xb6, - 0x95,0x5c,0x80,0xa2,0xeb,0x77,0xe4,0xfa,0x6f,0x27, - 0xe9,0x07,0x94,0xef,0x94,0x45,0xdd,0x73,0x02,0x81, - 0xc9,0x9a,0xb8,0x0f,0x10,0x14,0x90,0xe8,0xdc,0x02, - 0x6c,0x25,0x67,0xe6,0xd6,0xb2,0xc1,0xa0,0x73,0x19, - 0xb2,0x2d,0xa0,0x7f,0x0f,0xb4,0x61,0x39,0x3a,0x6d, - 0xa7,0xb5,0x26,0xfe,0x41,0x47,0x4e,0xf4,0x5e,0x09, - 0x41,0x98,0x12,0x6c,0x6a,0x33,0xb9,0xea,0x38,0xb5, - 0xda,0x03,0x5a,0x90,0x90,0x8b,0xf4,0x0e,0x7e,0xf8, - 0x77,0xc2,0x3b,0x7a,0x7b,0x2f,0x0a,0xf3,0x27,0xc4, - 0xb0,0x93,0xa0,0xa9,0xcd,0x22,0xc5,0x40,0x4d,0xe8, - 0x8c,0xa2,0x47,0xc3,0x73,0xaa,0xe4,0x85,0x77,0x99, - 0x29,0x47,0x98,0x1c,0x7c,0x54,0xd0,0xaa,0x64,0xae, - 0x48,0x1c,0xa1,0x98,0xaa,0x68,0x6c,0xda,0xa9,0x16, - 0x29,0xd1,0xa9,0x27,0xa9,0xe2,0x6b,0xcb,0x13,0x6c, - 0x32,0x1e,0x95,0x54,0xe0,0x0d,0x82,0xf5,0x76,0x9f, - 0x3a,0x7d,0x66,0x78,0x96,0x31,0xf6,0x53,0x50,0x25, - 0x72,0xba,0xf2,0xe3,0x88,0x83,0xe4,0xce,0x57,0x13, - 0x63,0x1f,0xbc,0xac,0x49,0x7a,0x45,0x5d,0x13,0x26, - 0x32,0xf7,0x05,0x1e,0x98,0xae,0x05,0xeb,0x78,0x62, - 0x53,0x0c,0x18,0x3a,0x14,0x23,0xe2,0x0c,0x68,0x6a, - 0xc9,0x1a,0xf9,0x67,0x0a,0x6c,0x22,0xcc,0x52,0xf5, - 0x9e,0xfa,0x85,0x4a,0x28,0x75,0xa6,0x99,0x14,0x48, - 0xa9,0x67,0x19,0x88,0x63,0x45,0x68,0x02,0x5d,0xeb, - 0x14,0x38,0x1f,0xbd,0xc2,0x27,0x6f,0x62,0x64,0xf3, - 0xa7,0x64,0x6c,0x78,0xb6,0xe4,0xa9,0x85,0xed,0x3c, - 0xf2,0xcd,0x99,0xd0,0x83,0x00,0xe1,0x63,0x05,0xee, - 0x12,0xc9,0x4d,0x8f,0xfe,0x7e,0xe7,0xb7,0xc7,0x0b, - 0x71,0x08,0xc8,0x53,0x6e,0x3a,0x0c,0xd3,0xf3,0xda, - 0xc0,0xbb,0xee,0x3b,0xa7,0xe9,0x2e,0xf7,0x6c,0x94, - 0xec,0x9a,0xa6,0xb9,0xa8,0xed,0x47,0xc8,0x8f,0x19, - 0xc7,0x7e,0xdb,0xe4,0x0a,0xf3,0x3a,0x82,0xb8,0x6b, - 0x13,0xa5,0xd6,0x03,0xc1,0xd0,0x81,0x07,0x45,0xad, - 0x83,0xb7,0xef,0xee,0xff,0x38,0x0f,0x32,0xd7,0x2e, - 0x4e,0x48,0x1e,0x48,0x0a,0x5c,0x06,0x21,0x70,0x6b, - 0xe1,0x6d,0x4c,0x3d,0x21,0xcc,0x30,0xac,0x51,0x1b, - 0xc9,0x0c,0xfd,0xf9,0x61,0x9f,0xd5,0x15,0xa6,0x2a, - 0xf5,0xb0,0x73,0x32,0x03,0x8e,0x06,0xe0,0xb8,0x93, - 0xc0,0xdd,0x79,0x0b,0x68,0x6e,0x8d,0xd1,0x1a,0xea, - 0x7e,0x7b,0x80,0x04,0xa5,0xa4,0x0d,0x75,0xc0,0x52, - 0x35,0xef,0xa4,0x57,0x16,0xc5,0x30,0x4e,0x41,0x93, - 0x60,0xe0,0x44,0x70,0x0e,0x6a,0xc6,0x28,0x9c,0x4a, - 0x85,0xab,0xee,0x67,0x40,0x29,0x3f,0x9a,0x44,0x4b, - 0xb1,0x36,0x25,0x28,0x30,0xd0,0x63,0x11,0x5f,0x42, - 0x67,0x80,0x5b,0x18,0xe9,0x05,0x5b,0x63,0xe9,0x89, - 0xbf,0xe4,0xfe,0xfe,0xd7,0xeb,0xf5,0xfa,0xdf,0xaf, - 0x6f,0x37,0x78,0x65,0xdd,0xab,0x6e,0x4e,0x10,0x74, - 0x7a,0x7b,0xb9,0xea,0xc1,0xb2,0xf9,0xc7,0x11,0x66, - 0x85,0x4c,0x4b,0x3a,0x38,0x29,0x49,0xc1,0x07,0x47, - 0x24,0x64,0x9a,0x54,0x08,0xad,0x97,0xb8,0x69,0xa8, - 0x5a,0xb8,0xff,0xdc,0xdd,0x47,0xca,0x68,0xd3,0xc6, - 0x73,0x95,0x91,0x81,0xf7,0x63,0x6f,0xdb,0x21,0x82, - 0x8e,0x70,0xa9,0xd2,0x05,0xee,0x79,0x24,0xbe,0x8c, - 0x38,0x7d,0x27,0x2f,0x2b,0x1c,0xc9,0x0c,0x2d,0x45, - 0x5b,0x19,0x6a,0x35,0x12,0xae,0xaf,0xdc,0x98,0x2d, - 0x91,0x2d,0x61,0x22,0xb1,0x86,0x0d,0x6c,0xdb,0x6b, - 0x03,0xbf,0xa3,0x3e,0x31,0x36,0x4c,0x53,0x2a,0x2e, - 0x21,0xde,0x8c,0xce,0xeb,0x84,0xc5,0x65,0x84,0x54, - 0x3f,0x49,0xf8,0x5d,0xa1,0x91,0x10,0x24,0x83,0xce, - 0xbe,0x29,0xc7,0xea,0x67,0xa6,0x40,0xee,0x38,0x45, - 0xf2,0xbd,0xc9,0x56,0x22,0xdd,0xc7,0xa1,0xc4,0x70, - 0x72,0x7e,0xd7,0x77,0xd9,0xd6,0xdf,0x59,0xc4,0x1e, - 0x6c,0x9d,0xa9,0x30,0x24,0xc4,0x8e,0xe3,0x9e,0x8f, - 0x7b,0x1e,0x66,0xad,0x9c,0x80,0xce,0x1f,0x38,0x20, - 0x0f,0x1c,0xb8,0x27,0x14,0x0b,0xc7,0xbd,0x87,0x7e, - 0xed,0xf2,0x99,0x07,0x68,0x0d,0x07,0x26,0x32,0x0f, - 0x18,0x3d,0xd3,0x7b,0x3a,0x90,0x14,0x1d,0xf3,0x1e, - 0x0e,0xbc,0x1b,0xb2,0x6b,0x38,0xee,0x5c,0x0b,0x2d, - 0xd2,0x63,0xd6,0xf2,0x81,0xc2,0xea,0x40,0x1b,0x9e, - 0xd6,0xfc,0x01,0x99,0x96,0x03,0x67,0xee,0x81,0xb3, - 0xeb,0x40,0xec,0x3c,0xc4,0x1f,0x22,0x71,0x50,0x6a, - 0xa7,0xea,0xf7,0x1b,0xa4,0xf8,0x9c,0x73,0xfe,0xd3, - 0x39,0xe7,0xbf,0xfc,0x26,0x54,0x63,0x12,0xd6,0x9b, - 0x90,0x85,0xc4,0x9d,0x70,0x2d,0xa2,0xe4,0xb1,0x95, - 0x12,0x10,0x67,0x1e,0xa7,0xb6,0x09,0x90,0xf0,0xd8, - 0xf6,0x8a,0x51,0x3b,0x7d,0x3c,0x0b,0xa7,0x5b,0xd4, - 0x61,0xd7,0xc9,0x18,0x36,0xe9,0xe5,0x74,0xd5,0x62, - 0x51,0xbd,0xa4,0x77,0x53,0x64,0xeb,0x60,0x7a,0xd0, - 0x45,0xd3,0x4f,0xae,0xc5,0xa1,0x53,0x72,0x1d,0xc9, - 0xe9,0x23,0xb8,0x8e,0x04,0x9f,0xa6,0x3d,0xd2,0x77, - 0x10,0xe1,0xd9,0x99,0xc4,0x12,0x87,0x49,0xdf,0x65, - 0xaa,0x96,0x48,0x11,0x1c,0x12,0x82,0x5a,0x40,0xaf, - 0x8f,0x35,0xe0,0xd4,0xd2,0x2f,0x90,0x78,0xe8,0xd5, - 0xbb,0x4b,0xf4,0x3e,0x70,0x77,0xaf,0xa6,0x48,0x1c, - 0x2b,0x25,0x22,0x60,0x3a,0x0d,0xad,0x49,0xa5,0x99, - 0xfa,0xff,0x2e,0x6e,0x68,0xf2,0x9f,0x2c,0x69,0x02, - 0x9f,0x2d,0xc9,0x75,0x9c,0x94,0x88,0x25,0x34,0x09, - 0xaa,0xf3,0x33,0x21,0x0f,0x8a,0x02,0x13,0x27,0xa4, - 0xbf,0xa7,0xee,0x23,0x96,0xe2,0xaf,0xe3,0x07,0x29, - 0xf7,0xa5,0xc7,0x7f,0x67,0xe5,0xa2,0x3c,0x28,0xf7, - 0x9e,0x7b,0x32,0x61,0x08,0xc3,0x07,0x12,0xe3,0xa2, - 0x43,0x52,0xf9,0x2b,0x32,0x9d,0xeb,0xf8,0x1f,0x6f, - 0xd7,0x69,0x34,0x89,0x0e,0x8c,0x67,0x9f,0xa4,0x9c, - 0xac,0xa8,0x56,0xf7,0xe7,0x12,0xa7,0x82,0x47,0xd2, - 0xf0,0xcd,0xdf,0x3b,0xa0,0x92,0xef,0xb8,0x4b,0x3f, - 0x4a,0xc9,0xca,0x11,0xa2,0x67,0xa7,0xbf,0x7f,0x5b, - 0x7a,0xa4,0x6e,0x42,0x42,0x97,0x1b,0x7d,0xe1,0xc0, - 0x99,0xe7,0x92,0xa0,0xaa,0xaa,0x63,0x12,0xf5,0x82, - 0xa4,0x26,0x7e,0x7e,0x52,0xa0,0x36,0xd3,0xc5,0x67, - 0xd2,0xa9,0x33,0xeb,0xf9,0x90,0xe2,0x3d,0xb8,0x32, - 0xf8,0x29,0xb0,0xe9,0xd0,0x26,0xe2,0xd3,0x15,0xd4, - 0x1e,0x13,0xec,0x9f,0xa6,0x78,0x3e,0x68,0x47,0x44, - 0x31,0xab,0x4f,0xac,0x05,0x36,0xd5,0xaa,0x1e,0x68, - 0x2e,0x58,0x4e,0x82,0x5b,0xc1,0x51,0xd9,0xb6,0x1d, - 0xdc,0x48,0x3d,0x71,0x93,0xe8,0x90,0x1a,0xe0,0xc9, - 0x22,0x1f,0x26,0x40,0xd1,0x8a,0x26,0xde,0xc2,0x5a, - 0xaa,0xd4,0xba,0x4c,0xfd,0x5f,0x33,0x72,0x5b,0xa4, - 0x14,0xac,0xbd,0x76,0x90,0x53,0xb7,0x3a,0x12,0x0a, - 0xf3,0x93,0xd6,0x13,0x05,0x23,0xd7,0xee,0x05,0x53, - 0xdf,0x07,0x6f,0x84,0x90,0x90,0xab,0x8d,0xae,0x4f, - 0xeb,0x52,0xc7,0xf4,0xc3,0x1e,0x43,0xa4,0x44,0xd4, - 0x81,0xfb,0x68,0xfb,0x6a,0xed,0x26,0xed,0x8e,0xf0, - 0x3c,0x62,0x9b,0x75,0x1a,0x4c,0x18,0x20,0xfb,0xb7, - 0xb6,0x9b,0xf2,0x4f,0x5c,0x8c,0x20,0xe1,0x37,0xa7, - 0x54,0xac,0xa4,0x6d,0xd7,0x46,0x52,0xae,0x8c,0xae, - 0x5b,0x51,0xb4,0xaf,0xe9,0xf9,0x5e,0x46,0xa0,0xd3, - 0x20,0xe6,0x45,0x62,0x81,0xdf,0xed,0xe7,0x4a,0xde, - 0x8d,0x24,0x1c,0x97,0xcc,0x8d,0xdd,0xb0,0x8b,0x7c, - 0x7e,0xc1,0x9a,0x40,0x09,0x80,0x7e,0x9f,0xfa,0x9c, - 0xa8,0xb5,0x46,0x3c,0x37,0x92,0x88,0x00,0xa4,0xab, - 0x00,0xcd,0x5e,0x8d,0xd9,0xab,0xd0,0xaa,0xc6,0x5b, - 0x48,0xfc,0x6b,0x23,0x34,0xea,0xde,0x4f,0x2b,0x34, - 0x2a,0x25,0xf6,0x89,0xf6,0xe1,0x92,0x85,0x44,0x4a, - 0x4e,0xe2,0x87,0xfa,0xb9,0xd4,0x7e,0x72,0x54,0x00, - 0xd7,0xea,0xde,0x78,0x6c,0x3a,0x83,0x62,0xd7,0x0e, - 0xd6,0x22,0xf9,0xe5,0x64,0xae,0xf5,0x26,0x5d,0x7b, - 0x68,0x21,0x34,0x68,0x5b,0x2d,0x7a,0xb8,0x27,0x85, - 0xc9,0x29,0xe8,0xa6,0x07,0xe0,0x5a,0x01,0x54,0x71, - 0x27,0xc6,0xf8,0xc4,0xab,0x09,0x22,0x5f,0x09,0x2d, - 0x2b,0x58,0x9c,0xa4,0xe1,0x63,0xab,0xcc,0x89,0x84, - 0xa6,0x5a,0x3c,0xe9,0x1e,0x49,0xef,0xc2,0xdd,0xd3, - 0x5d,0xd9,0x6c,0xc8,0x75,0x0e,0x11,0x49,0xd7,0xdf, - 0xa7,0xb6,0xcc,0xe1,0x52,0x84,0x3e,0xb8,0x9e,0x70, - 0xfb,0xdd,0x4a,0x9c,0x9e,0x3e,0x9d,0x45,0x1c,0x0f, - 0x9a,0x1c,0xec,0x31,0x49,0xdf,0x95,0xe1,0x86,0x4d, - 0x5c,0x8c,0xbe,0xc6,0x6a,0xc3,0x75,0x72,0xdf,0x0f, - 0x09,0x5c,0xfa,0xf7,0x37,0x42,0xaf,0x4b,0xe0,0xa6, - 0x62,0xe1,0x13,0x45,0xf1,0x50,0x4c,0xc5,0x36,0xf3, - 0x46,0xd0,0x34,0x25,0x64,0xc2,0xab,0x21,0x14,0xf7, - 0x61,0xaa,0x08,0xa8,0x42,0x25,0xae,0x95,0x79,0xce, - 0x35,0x89,0x3c,0xf6,0x77,0xe1,0x10,0x39,0x12,0xaa, - 0x85,0xc3,0xa1,0x94,0xeb,0x21,0x72,0x13,0x35,0x90, - 0x51,0x89,0xe3,0x68,0x05,0x4f,0xdf,0xe0,0x80,0x41, - 0x30,0x36,0xb5,0x9c,0x69,0xad,0x10,0x07,0x29,0xa0, - 0x58,0x36,0x99,0x22,0xe2,0xfc,0xd0,0x3a,0x8c,0x7c, - 0x98,0xd0,0x62,0x4e,0xe8,0x76,0x6c,0x67,0x52,0x91, - 0xaf,0x05,0x84,0x9e,0x11,0x81,0xa3,0x36,0x02,0x05, - 0x74,0x5e,0xbb,0x6b,0x4f,0x6e,0x06,0x9f,0x00,0x0b, - 0x0e,0x61,0xd7,0x29,0x71,0x47,0xfe,0xa6,0x18,0x9a, - 0x54,0xe1,0xdd,0xf9,0xf3,0xea,0xcf,0x82,0xbc,0x76, - 0xe8,0x0b,0x2f,0x20,0xd9,0x0e,0x0a,0x97,0x24,0x44, - 0x57,0xa2,0x6c,0xfa,0xb8,0xf9,0x94,0xb0,0x24,0x54, - 0x44,0xff,0x90,0x2c,0x2c,0x14,0x96,0x54,0x5e,0x81, - 0x53,0xa8,0xdc,0x90,0xcd,0xdc,0x67,0x98,0xe7,0x5b, - 0xf0,0x72,0x23,0x89,0x56,0x84,0x10,0x6d,0x12,0x70, - 0xc1,0xe4,0x18,0x4c,0x2c,0x58,0x12,0x76,0xe7,0x2c, - 0x4d,0x48,0x54,0x68,0x21,0x3c,0x92,0x9f,0xbe,0x91, - 0x37,0xa4,0x40,0xe0,0x7f,0x25,0x2f,0xae,0x22,0xe4, - 0xe3,0x9e,0x82,0x19,0x92,0xdd,0x82,0xb5,0x3f,0x16, - 0x07,0x8e,0x5f,0x45,0xc8,0x6a,0x7b,0x2e,0xe5,0x82, - 0xbc,0xd9,0x87,0xf6,0x20,0x37,0x7e,0x4d,0x94,0x60, - 0x3e,0x6c,0x34,0x26,0x5f,0xbf,0xc4,0x7b,0x9b,0x24, - 0xf8,0x8d,0x77,0xda,0xc3,0x73,0xac,0x3e,0x21,0x0d, - 0x5e,0x5e,0x5f,0x67,0xe3,0x7b,0x26,0xf1,0xeb,0x61, - 0x8b,0x61,0xa6,0x93,0x52,0xfb,0x0d,0x27,0xb6,0x60, - 0xfa,0x74,0xeb,0x47,0xf6,0xb0,0xc2,0x00,0x44,0xb3, - 0x1c,0x12,0x45,0x83,0x13,0x46,0x0b,0xad,0x02,0x0a, - 0x86,0xfc,0xc7,0x30,0x40,0xf9,0x38,0xc8,0x26,0x55, - 0x7b,0xa7,0xef,0x46,0xfa,0x3a,0x8a,0x8a,0x3b,0x24, - 0xee,0x62,0x8d,0x2d,0xa7,0x3d,0xb6,0x12,0x55,0x74, - 0x16,0x4c,0x9d,0xc7,0x48,0xa8,0xae,0x03,0x15,0x52, - 0x87,0x02,0x92,0x68,0x27,0x84,0x58,0x84,0x3c,0xa5, - 0x82,0x82,0xc0,0x00,0xd2,0xa4,0x12,0x9e,0x1c,0xc5, - 0xe0,0xd1,0x92,0x29,0x75,0x45,0x1c,0xba,0x34,0x09, - 0x20,0xea,0x7b,0x02,0xcb,0x2c,0x4b,0x1b,0xe9,0x3f, - 0xfb,0xdb,0x6d,0x44,0x07,0x17,0xd1,0x03,0x54,0x19, - 0xeb,0x5e,0xed,0xa4,0x29,0x0a,0x98,0x9a,0xb1,0x1c, - 0x01,0x8a,0x0e,0xe9,0xb3,0xc8,0x4e,0x40,0xdd,0xde, - 0x83,0x35,0x41,0x84,0xea,0x75,0x11,0x75,0x99,0x6d, - 0xe2,0xe1,0x10,0x37,0x25,0x70,0x2a,0x4a,0x79,0x36, - 0x34,0xe2,0x09,0x5c,0x99,0x47,0xc2,0xe5,0xec,0x22, - 0xb4,0x6a,0xd1,0xe7,0x99,0x3c,0x6f,0x48,0x4a,0x3d, - 0x54,0x5c,0x15,0xf4,0x61,0x2a,0xb4,0x65,0x46,0x4f, - 0x21,0x77,0x2f,0x0e,0xd6,0x9d,0x88,0xcc,0xca,0xff, - 0xea,0x6b,0x5c,0x7f,0xdf,0x09,0x6e,0x69,0xa2,0x37, - 0x09,0x63,0x06,0x13,0xd8,0x51,0xd2,0x3e,0xe9,0x8a, - 0x50,0xf0,0xdf,0x54,0x9f,0x4e,0xd7,0x69,0x13,0x9c, - 0x08,0x69,0xa5,0x24,0x3e,0x3d,0x8b,0xc4,0x59,0xba, - 0x89,0x2e,0x93,0x1e,0xd9,0x92,0xeb,0xe3,0x0c,0x17, - 0x0f,0x89,0xb7,0xc2,0xf3,0x28,0xe5,0x1d,0x0d,0x22, - 0xa8,0x13,0x5f,0xc7,0x3a,0xc4,0x3b,0x3d,0x15,0x72, - 0x38,0x97,0xc9,0xbf,0xe3,0x92,0xf3,0x7b,0xa0,0x41, - 0x79,0x1f,0x4e,0x97,0xc6,0xdc,0xd3,0xdb,0xdf,0xdd, - 0x9c,0x33,0xe5,0xe4,0x90,0x62,0xbe,0x52,0x09,0xd4, - 0xa1,0x5c,0xf6,0xe2,0x71,0x89,0xbc,0xfb,0x8e,0xd4, - 0x32,0xd1,0x6b,0xf9,0xbe,0xe6,0x02,0x92,0x79,0x29, - 0xb1,0xdc,0xf1,0x7e,0xb6,0xce,0xe7,0x06,0xf5,0x3a, - 0xd4,0x0a,0x4f,0x2e,0x03,0xa2,0xec,0x7d,0xc8,0x12, - 0xc6,0xd8,0x32,0x1d,0x57,0x48,0x7d,0x7d,0x7d,0x9d, - 0xad,0xeb,0xbc,0x6b,0x29,0x25,0xeb,0x18,0x12,0x46, - 0x76,0x6d,0xc0,0xfe,0xae,0x89,0xd7,0x93,0x9e,0xf7, - 0x06,0x81,0x7e,0x9c,0xdb,0xa6,0x1d,0xe0,0x32,0x3f, - 0x8b,0x58,0xb8,0xcc,0x6d,0xb0,0x8a,0x28,0xe0,0xa4, - 0xac,0xdc,0x6d,0xd3,0x18,0x62,0x13,0xc0,0xb2,0xd5, - 0x4a,0xba,0x97,0x64,0x34,0x47,0xd5,0x83,0x0a,0x0a, - 0x4e,0x23,0xe5,0x53,0x65,0xe8,0x5e,0x96,0x4e,0xd3, - 0xdd,0x64,0x3c,0x5d,0x40,0x54,0x91,0xa5,0xde,0x6c, - 0xf2,0x97,0x01,0xd1,0xb4,0x84,0xa2,0xa2,0xa7,0xd9, - 0x86,0x5b,0xd5,0xd7,0x86,0x83,0x6f,0xfb,0xf3,0x16, - 0x91,0x3c,0xbb,0x06,0x75,0xb2,0xcc,0x25,0x26,0xb4, - 0x96,0xee,0x6a,0x0e,0x0c,0x60,0x6d,0xbf,0x1e,0xa0, - 0xfb,0x34,0xd9,0xd6,0x03,0xa9,0x55,0x00,0x36,0x1c, - 0x97,0xa8,0x49,0x44,0x42,0x80,0xb7,0xee,0x92,0x1e, - 0x7e,0xda,0xc2,0x4c,0x2e,0xd0,0x1d,0x61,0x54,0x0d, - 0x1d,0x67,0x86,0xe9,0xd6,0xde,0x44,0x6e,0x4c,0xc5, - 0xca,0x50,0xe1,0x55,0xf3,0xb1,0x1a,0xf5,0x73,0xf4, - 0xb3,0x04,0x6d,0x7e,0xb4,0x90,0x74,0xf8,0x23,0x89, - 0xbf,0xa9,0x89,0x2e,0x20,0x05,0x16,0xe1,0x4d,0xfc, - 0x87,0x0e,0x05,0x25,0x8e,0x0d,0x20,0xdf,0x76,0xcd, - 0x53,0x91,0x01,0x1e,0x6a,0x51,0x67,0x2b,0x50,0x0b, - 0xa2,0x46,0x18,0x3c,0xc7,0x72,0x2d,0x49,0x2d,0xaa, - 0x5d,0xdc,0x73,0xe7,0x13,0x24,0x4d,0xd6,0x2a,0x88, - 0xec,0x59,0x5c,0x5c,0x9a,0x38,0x88,0xf4,0x1c,0x3a, - 0x11,0x1c,0xd6,0x77,0x2a,0x10,0xaf,0x69,0x18,0x41, - 0x0b,0x78,0xe9,0xec,0x44,0x73,0xdd,0xa1,0x85,0x6f, - 0xcf,0xaa,0x64,0xa9,0xa4,0x71,0xd0,0xe9,0x06,0xba, - 0xce,0xd1,0xb6,0xe5,0xae,0x03,0x42,0x9a,0xb3,0x6c, - 0x46,0xf9,0x5f,0x89,0x90,0x94,0x0e,0x2d,0x80,0xfa, - 0xdf,0x2a,0xb8,0x4d,0xff,0x34,0x8d,0xac,0xbb,0xb6, - 0x90,0x23,0xb5,0xf5,0x80,0xee,0xc6,0x61,0x9d,0xb1, - 0xde,0xc5,0xe6,0x79,0xb5,0xb0,0x32,0x88,0x32,0xdc, - 0x4e,0x97,0x87,0xa6,0xad,0x2e,0x50,0x64,0x4e,0x07, - 0x4b,0x9a,0x04,0x33,0xc1,0xd8,0x6d,0x9e,0x4a,0x07, - 0x1d,0x65,0xd7,0x13,0xa9,0x96,0xd4,0xa9,0x55,0xc8, - 0x8b,0x82,0xaf,0x83,0x9b,0x43,0xfb,0x29,0x89,0x62, - 0x56,0xe0,0x63,0x54,0x78,0xb7,0x35,0x11,0x40,0x75, - 0x84,0xde,0xbd,0x8b,0x4e,0x80,0x74,0x05,0x85,0x6b, - 0xad,0x91,0x13,0x74,0xf3,0xc1,0x8a,0x3c,0xb5,0x9e, - 0x9c,0x5d,0x46,0x4b,0x87,0x90,0x19,0x38,0x88,0xde, - 0x5a,0x53,0x89,0x33,0xb3,0xf1,0x0e,0xa4,0x36,0x19, - 0x25,0x71,0x1b,0x47,0x68,0xfa,0x1d,0x6d,0x4d,0x91, - 0xdf,0xd6,0x34,0x31,0xe2,0x74,0x97,0x92,0x9c,0x80, - 0xf9,0x7f,0x2b,0xb4,0x18,0x0a,0x8f,0x5a,0x10,0x60, - 0x91,0x84,0x3b,0x11,0xec,0x75,0xdd,0xc1,0x73,0x7f, - 0xb4,0xa6,0x9d,0x8f,0x98,0xb1,0x8c,0xa9,0xbb,0x30, - 0x33,0x31,0x81,0x86,0x40,0x6c,0xc2,0xa1,0x85,0x4d, - 0x92,0xbd,0x20,0xe1,0x40,0x17,0xcb,0xc9,0xe4,0x79, - 0x5a,0xd3,0xa1,0xf5,0xfb,0x50,0xef,0x77,0xc4,0xea, - 0xd0,0x86,0x46,0x3b,0x0f,0x48,0xe2,0x89,0xa3,0xfb, - 0x10,0xf7,0x1b,0x68,0x2b,0x2e,0x76,0xd9,0x84,0x89, - 0xda,0xe3,0x3d,0x29,0x4c,0xed,0x76,0x67,0x6f,0xe3, - 0x0a,0x09,0x4a,0x9c,0xc9,0xee,0xea,0x43,0x9e,0xd1, - 0x5b,0x81,0x29,0xf1,0xb5,0x5e,0xf7,0xa6,0x70,0xfe, - 0x33,0x43,0x9f,0x77,0xad,0xea,0xfa,0xa9,0xf7,0x96, - 0x12,0x61,0xa9,0x7a,0x30,0x70,0xe0,0x48,0xbc,0x73, - 0xc2,0x48,0x2e,0x41,0xd2,0x00,0xd8,0x5f,0xa4,0x54, - 0xc4,0xa3,0x3a,0x2d,0xa1,0x5f,0xc1,0xed,0x96,0x7c, - 0x50,0xaa,0xb7,0x73,0x26,0x38,0x30,0xe9,0x20,0x11, - 0x84,0x4f,0xe8,0x9c,0x41,0xd6,0x8a,0x5a,0x4b,0x40, - 0x46,0x2b,0xc7,0x63,0x48,0xa4,0x49,0xb7,0xc6,0x94, - 0x17,0x65,0x9e,0x7d,0x75,0xa1,0x45,0x09,0x0a,0x15, - 0xa6,0xa0,0x6a,0x20,0xf7,0x15,0x8d,0x6f,0x4b,0x82, - 0x84,0x5a,0x3e,0x0e,0x8d,0x0c,0x81,0xb2,0x1c,0x07, - 0x23,0x1c,0xdc,0xe5,0xf8,0x09,0xae,0xe5,0x41,0x0a, - 0xe3,0x4d,0x94,0x70,0x4d,0x46,0x4e,0xe8,0x2f,0xd9, - 0xdf,0x90,0x11,0xe9,0x04,0x59,0x4f,0xaa,0xd2,0x93, - 0xa8,0x6a,0xe7,0x3d,0x39,0x91,0xd4,0x69,0x7f,0x0a, - 0xc2,0x53,0x1b,0x68,0x5e,0x03,0x7a,0x9a,0xa8,0x51, - 0x45,0x6f,0x20,0x78,0xe2,0x94,0x9f,0x5c,0xa3,0x6d, - 0x99,0x29,0xe2,0x9e,0x78,0x32,0x50,0x1c,0xd7,0x84, - 0xea,0x12,0x62,0xea,0x34,0xbe,0x68,0xfa,0x27,0x14, - 0xdd,0x15,0x10,0x52,0x9b,0x88,0x4e,0x96,0x48,0x84, - 0xc4,0xa7,0x04,0x2b,0x59,0x40,0x01,0x9a,0x51,0xce, - 0x02,0xe5,0x4e,0x1c,0x37,0x53,0xd8,0x57,0x18,0x1c, - 0x31,0x3f,0x5f,0x53,0x4b,0x70,0xea,0x86,0xa8,0xa6, - 0x5f,0x42,0x18,0xa9,0x68,0x1f,0x10,0xf3,0x18,0xdf, - 0x8c,0xba,0x35,0xb5,0xcd,0x46,0xee,0x55,0xa7,0x92, - 0xbc,0x7d,0xae,0xd3,0x85,0x18,0xd0,0x06,0x24,0x37, - 0x4d,0x22,0x6d,0x02,0xa7,0x6f,0xb2,0xb7,0x55,0x55, - 0x49,0x37,0x19,0x78,0x4d,0x97,0x6b,0xfd,0x05,0x8b, - 0x08,0x0b,0x3f,0x42,0xdb,0xab,0x92,0xa8,0x1c,0xa9, - 0x59,0xea,0x67,0x6d,0x5b,0x13,0x9d,0xf8,0x2c,0xf7, - 0x8b,0x53,0x49,0x66,0x31,0x5a,0x54,0xa4,0x27,0x78, - 0xb2,0x71,0xa9,0x12,0xad,0x8d,0x7b,0x3b,0x69,0x21, - 0x29,0x44,0x0a,0xd3,0x80,0xd1,0x2b,0x2c,0x58,0x34, - 0xd8,0xb6,0x96,0x3b,0x30,0xcc,0xa1,0x8f,0xa8,0xa0, - 0x73,0xe1,0x06,0x28,0x17,0x0f,0x4d,0x0d,0x94,0xbd, - 0x9a,0xa6,0x36,0xd2,0x5b,0xc6,0xe2,0xf5,0x05,0xae, - 0x45,0xb5,0xf4,0x70,0x3d,0x4f,0x6d,0x92,0x49,0x35, - 0x3e,0x09,0x33,0xf6,0x84,0x9d,0x4c,0x80,0xff,0xe6, - 0x9f,0x74,0x58,0x52,0x0c,0x12,0xbe,0x41,0x6c,0xe3, - 0x51,0x0c,0xeb,0x09,0x15,0x25,0x89,0x2e,0xa1,0x4d, - 0xd3,0x4e,0xda,0x72,0x4a,0xdc,0x92,0x60,0x7d,0x63, - 0x51,0x55,0xd3,0x0a,0xaf,0xa0,0xf4,0x5d,0x94,0x14, - 0x52,0x51,0xe2,0xda,0xce,0x6e,0xff,0x11,0x82,0x41, - 0xbe,0x89,0x9f,0xa8,0xea,0x6f,0x24,0x41,0x52,0xe1, - 0x4d,0xed,0xf1,0x34,0x89,0x47,0xbc,0x44,0xb2,0xb2, - 0x11,0x01,0x58,0xe2,0x6d,0x5a,0xf4,0x3b,0x21,0x77, - 0x69,0x22,0xdb,0xc5,0xb2,0x6e,0xf9,0x32,0x09,0xce, - 0x4e,0x45,0x98,0x8b,0xdf,0xd3,0xe4,0xb5,0x76,0x6e, - 0x3e,0xb1,0xca,0xd1,0xcf,0xfc,0xbe,0x97,0x72,0x03, - 0x0b,0x44,0x8a,0xff,0xb9,0xe6,0xa0,0xa7,0x51,0xa9, - 0x77,0x1e,0x02,0xea,0x35,0x3d,0xc8,0x34,0xeb,0x4f, - 0x59,0x1e,0x05,0x48,0x43,0x10,0x7e,0x64,0xa4,0x0e, - 0xd2,0x9e,0x32,0x4e,0x9d,0x42,0x30,0x0b,0xcc,0x1d, - 0xd0,0xc4,0xb5,0xb0,0x3e,0x2b,0x50,0xc1,0x8d,0xa3, - 0xa2,0xe4,0x5f,0x43,0x95,0x95,0x42,0x9a,0xcb,0x1e, - 0x7e,0xa9,0x29,0xa5,0xe3,0xf7,0xa8,0x4a,0xb1,0xa2, - 0x23,0x6e,0xfa,0xce,0x4d,0x2b,0x98,0xf6,0x85,0xed, - 0xf5,0x86,0x0a,0xfd,0xd1,0x6b,0x76,0x6d,0x59,0x83, - 0x7e,0xd5,0x90,0x94,0xdb,0xbf,0x77,0x1a,0x23,0xa6, - 0xba,0x7b,0xe3,0xf9,0xa4,0xc9,0xaa,0xe6,0x3a,0x7e, - 0x51,0xa2,0xe6,0x3c,0x9e,0x36,0x05,0x84,0x98,0x44, - 0x3e,0xfc,0xc6,0x26,0x84,0xb4,0x57,0x82,0x09,0xb1, - 0xba,0xcc,0x84,0x97,0x7e,0xa7,0x99,0x40,0x2b,0x49, - 0x44,0xc6,0xff,0xdd,0xbf,0xd7,0x93,0xaa,0x94,0x58, - 0xea,0xbe,0x01,0xbb,0x90,0x6e,0xc9,0x31,0xc6,0x3b, - 0xa7,0xed,0xe4,0xa6,0x30,0x8d,0xee,0x4f,0xa5,0xca, - 0xd7,0x24,0x67,0x8f,0xf7,0x2f,0x05,0x04,0x8e,0x49, - 0x13,0x47,0xcb,0x68,0x3e,0x5d,0x40,0xd2,0xad,0x50, - 0x4c,0x54,0x6f,0x2b,0x50,0x8b,0xd9,0xb4,0x56,0x6d, - 0x12,0x14,0x7c,0xee,0xc8,0x7f,0x6f,0x24,0xe3,0xbb, - 0xee,0x83,0xec,0xe3,0x02,0x9e,0xa4,0xdb,0x87,0xe5, - 0x12,0x76,0x2d,0x34,0x87,0x76,0x6f,0x29,0xf2,0xaa, - 0x5a,0x48,0xc3,0x1e,0xb3,0xda,0x48,0xf7,0xba,0xea, - 0x71,0x4f,0x8c,0x78,0x2d,0xca,0xb7,0x49,0x72,0x74, - 0xfd,0x38,0xc4,0x8d,0x12,0xc8,0x45,0x5b,0xef,0x91, - 0x6c,0x93,0x35,0x90,0xeb,0xa4,0xf4,0xb8,0xec,0x50, - 0x79,0x1a,0x5e,0x78,0x9b,0xa2,0xde,0x30,0xb7,0x55, - 0xf9,0x72,0x22,0x18,0x99,0xc3,0x37,0xea,0x24,0xfc, - 0x2d,0x81,0xed,0xba,0x7e,0x7c,0xa5,0x8a,0xd0,0x25, - 0x5d,0x58,0x74,0x88,0x86,0xa9,0xa8,0xc7,0x41,0xd2, - 0x17,0xfd,0x54,0x6d,0x07,0x8e,0x4d,0x91,0x53,0xae, - 0x81,0xf5,0xad,0x22,0xb2,0x41,0x22,0x6c,0x62,0x41, - 0x86,0xae,0x29,0xd3,0x9f,0xdc,0x7e,0xe9,0x5e,0x9c, - 0x56,0x91,0x26,0x7c,0x3a,0x1e,0x2b,0x6d,0x45,0x6c, - 0x0b,0xea,0x35,0xf7,0xbd,0xf9,0x49,0xf6,0xaf,0xeb, - 0x09,0xde,0xb9,0xe5,0x6f,0x38,0xae,0x4f,0xe0,0xd1, - 0x55,0x6a,0x0f,0x75,0x14,0x67,0xc9,0xbb,0x2b,0x7d, - 0xd6,0x8b,0x16,0xb4,0xe5,0xc0,0x4c,0x89,0x13,0x4d, - 0x80,0x51,0xc2,0x92,0x7c,0x98,0x88,0xc0,0x39,0x99, - 0xa6,0x86,0x22,0xe1,0xad,0x65,0xd4,0xc1,0x30,0x57, - 0xb1,0x3b,0x7e,0xa3,0x43,0x23,0x7a,0xc1,0xd2,0x13, - 0x57,0xf2,0xa1,0x73,0xde,0x5b,0x4a,0x56,0x1e,0xac, - 0x6a,0x6a,0x41,0x0e,0x4f,0x9a,0x3b,0x6f,0x6a,0xd2, - 0x81,0xa8,0x5d,0x93,0xe7,0x5f,0xe0,0x16,0x15,0xb5, - 0x36,0xf5,0x5e,0x53,0x12,0x94,0xb8,0x53,0x9a,0x04, - 0x6d,0x92,0x23,0xa2,0x67,0x24,0x01,0xd5,0x4d,0x67, - 0xc2,0xc5,0x56,0xd2,0x3a,0x73,0x7c,0xd2,0xc9,0xa6, - 0xc7,0x89,0x5d,0x12,0x5a,0xd2,0xa5,0x61,0x12,0x7f, - 0xad,0x27,0x00,0x26,0x76,0x46,0xde,0x1a,0x15,0xd9, - 0xd3,0x79,0xec,0x40,0x08,0x8d,0x49,0x13,0xda,0xab, - 0xad,0x78,0x2d,0x68,0x68,0xf8,0x60,0x92,0x5f,0x20, - 0x8d,0x3d,0x45,0xa8,0xaa,0xea,0x9f,0x31,0xf8,0x04, - 0x9f,0x3a,0x09,0x69,0x82,0xf8,0xf5,0x62,0x13,0x3a, - 0x93,0x12,0x07,0xd1,0x3b,0xb0,0x24,0x5b,0x82,0xc3, - 0xdc,0x42,0xa3,0x51,0xbc,0x50,0x29,0x3f,0x60,0xe2, - 0xa9,0xb7,0x18,0xc6,0xee,0x8b,0x7e,0x77,0x33,0x0d, - 0x16,0x7e,0xaf,0x16,0x0b,0xda,0x21,0x2f,0x3a,0x3e, - 0x4b,0x2e,0xd1,0x96,0xac,0x3c,0xb9,0x81,0x93,0xa5, - 0x02,0x25,0x46,0xc9,0x3a,0x65,0x0a,0x26,0x3a,0xfd, - 0x62,0x94,0xba,0xd7,0x5e,0x61,0x02,0xa9,0x22,0xf9, - 0xba,0x4f,0x1b,0x06,0xfe,0x48,0xe4,0x49,0xb8,0xe7, - 0x49,0xeb,0x3a,0xad,0x8b,0x60,0x41,0x83,0x09,0x7d, - 0x78,0x27,0xae,0x5d,0xf2,0x28,0x16,0x74,0x3f,0xa6, - 0x04,0x79,0xeb,0x9d,0xa7,0xf1,0xc2,0xb5,0xb1,0x1d, - 0x81,0x92,0x74,0x99,0xcc,0x14,0xd3,0xa1,0x02,0x83, - 0x3e,0x07,0x1c,0xa9,0xc7,0xb1,0x65,0x37,0x12,0x3f, - 0x28,0x5e,0xdf,0xca,0xc0,0xa7,0xd9,0x2e,0x3c,0x50, - 0x61,0xb5,0xca,0x30,0x31,0xb9,0x4e,0xce,0xa2,0x7f, - 0xc6,0x9d,0xf5,0x5d,0xdd,0xf6,0x3b,0x17,0x58,0x87, - 0xf4,0xcf,0x9e,0x44,0x04,0x25,0xfe,0x1e,0x8d,0xbd, - 0xaf,0xd7,0xab,0xbe,0xbe,0xbe,0x0e,0x1c,0x54,0x3f, - 0x63,0xdd,0xf4,0xfd,0x64,0xcd,0x41,0x07,0x65,0x5a, - 0x3b,0xad,0x98,0x3d,0x50,0xd4,0x9d,0xbe,0x1e,0xb7, - 0x09,0x93,0x9c,0xa3,0x27,0x15,0xd3,0xee,0x1e,0x89, - 0x3a,0xa1,0xb2,0x06,0xc3,0xe7,0x25,0x9f,0xc2,0x9f, - 0xaf,0xec,0xbf,0xeb,0xda,0x72,0x69,0x2f,0x7f,0xa3, - 0x9e,0x4e,0x5e,0xe1,0xe7,0xb3,0x55,0x5a,0x41,0x51, - 0xf4,0x64,0x61,0x91,0xde,0x8d,0xb3,0x50,0x49,0xdd, - 0x22,0x98,0x6e,0x7c,0x47,0x80,0xa6,0x2c,0xd1,0x65, - 0x74,0xe9,0x40,0x74,0x3d,0x5e,0x82,0x31,0x15,0x72, - 0x73,0xc2,0x84,0x84,0x0a,0x11,0x72,0x02,0x15,0xa3, - 0x45,0x17,0x92,0x4a,0xa7,0x64,0x8e,0x05,0xf7,0x5e, - 0xf0,0xa2,0x5c,0xc5,0xe5,0xbc,0xc7,0x70,0x12,0x6a, - 0x6a,0x9d,0x4d,0xde,0x6b,0x20,0x9d,0x8f,0xd0,0xe6, - 0x06,0x49,0x69,0x9b,0xa5,0x14,0xcd,0x19,0x24,0xee, - 0xcb,0x71,0x42,0x2e,0xf0,0xe1,0x72,0xf2,0xee,0x34, - 0x09,0x96,0x5a,0x89,0x8a,0x1a,0x84,0x8a,0xa2,0x42, - 0xa5,0x8f,0xad,0x27,0xf7,0xfc,0x42,0x1b,0xb7,0x36, - 0x3c,0x8b,0xc4,0x1b,0x02,0x6e,0x48,0xb5,0x51,0x75, - 0x3b,0x76,0x3b,0xf1,0x22,0xae,0x20,0x0a,0x48,0xbc, - 0x08,0x87,0x02,0x10,0xca,0x43,0x13,0x36,0x2a,0x75, - 0xd0,0x35,0x62,0x08,0x39,0xa4,0x3d,0x6b,0x90,0x6b, - 0x8b,0x14,0x51,0x41,0x13,0x24,0x3d,0xca,0xad,0x81, - 0x81,0x54,0x5b,0x4e,0x5b,0xeb,0xfe,0xdf,0xaf,0x5f, - 0xbf,0xde,0x0a,0xa5,0xc9,0x63,0xcc,0xc5,0xb6,0xd4, - 0x12,0x4b,0x05,0x16,0xe9,0x8e,0x91,0x78,0xa6,0x43, - 0x39,0xfb,0x74,0x58,0xda,0x4b,0xda,0x32,0x54,0xdf, - 0xc4,0x6e,0xd3,0xe1,0x38,0x21,0x7d,0xba,0x6a,0x92, - 0xee,0x70,0x92,0x01,0x14,0xdb,0x5c,0x1b,0xc6,0x15, - 0x6a,0x4e,0x8d,0xde,0x20,0xad,0xb8,0x1e,0x8d,0x00, - 0xe5,0xa8,0x60,0xae,0x6d,0xc0,0x1b,0xe9,0x09,0xe4, - 0xe5,0x9a,0x8a,0x1c,0xda,0xb7,0x4a,0x4d,0x70,0x67, - 0x24,0xfc,0xb9,0x25,0x4b,0x03,0x07,0xaa,0xa8,0xab, - 0xd4,0x7f,0x3f,0xf1,0x9e,0x34,0x7e,0x99,0xe7,0x51, - 0x1b,0x54,0xfb,0xfe,0xef,0xdf,0x2e,0x9b,0x77,0xa2, - 0x4a,0xd4,0x63,0x5d,0x64,0xc1,0xe3,0xb8,0x9c,0x56, - 0x35,0xc6,0x34,0x2f,0x66,0xba,0x06,0x2e,0xa3,0x24, - 0x2a,0x55,0x6d,0x8f,0x96,0xd8,0x06,0x39,0x6a,0x46, - 0x79,0x8f,0x6c,0x17,0xb2,0x78,0xd4,0x79,0x20,0xc2, - 0xe3,0xa4,0xb0,0x39,0xa0,0x32,0x94,0x80,0x3e,0x84, - 0xc8,0xae,0xe0,0xff,0x15,0x02,0xae,0x25,0xe5,0x05, - 0x0e,0x8a,0xf5,0x3a,0x83,0xeb,0x4a,0xe4,0xe4,0x34, - 0x09,0x83,0x2d,0x43,0xdd,0xc4,0xf2,0x0c,0xde,0x38, - 0x01,0xb4,0x56,0xc0,0xdf,0xa6,0x12,0x3f,0x4d,0x93, - 0xb9,0xd4,0x3a,0x26,0xde,0x99,0x0b,0x6c,0xa4,0x16, - 0xee,0xee,0xdf,0x49,0x15,0x90,0xd7,0x57,0xaa,0x04, - 0xdd,0x48,0xbe,0xfb,0xf9,0x61,0x1a,0x11,0x63,0x03, - 0xdd,0xc7,0x22,0xb1,0x8c,0x81,0x9e,0x60,0x7d,0x35, - 0xa8,0x4c,0xa6,0xcf,0xfd,0xf7,0x15,0x35,0xe9,0xef, - 0xdc,0x20,0x57,0x6f,0x55,0x3b,0xa0,0xe9,0x3f,0x9f, - 0x19,0x0c,0x2e,0xef,0x44,0xe0,0x50,0x95,0xdf,0x0d, - 0x43,0x9d,0xbf,0x5c,0x47,0xa7,0xc0,0x2f,0xd1,0x3a, - 0x76,0xdf,0x82,0x89,0x14,0x67,0x00,0x81,0x2a,0x27, - 0x58,0x99,0x0e,0x67,0x17,0x9b,0x34,0xb6,0x2e,0xce, - 0x9f,0xc7,0x33,0x50,0x33,0x55,0xf3,0x5c,0x9d,0x50, - 0xa0,0xf5,0xdc,0xea,0xf7,0xea,0xd0,0x7f,0x99,0x1e, - 0x3d,0xd3,0x39,0xa9,0xa8,0x93,0x49,0xae,0x8e,0x39, - 0x47,0x0e,0xb5,0x89,0x37,0xf7,0x46,0xef,0x23,0xed, - 0x41,0x48,0x1e,0x0f,0xa0,0xe0,0x27,0x75,0x08,0x12, - 0xd1,0xdf,0x21,0x71,0x66,0xff,0x1d,0x57,0xf8,0x4c, - 0xd3,0xa1,0xfd,0x73,0x5e,0x74,0x60,0x6e,0x26,0xb3, - 0x54,0x7a,0x9c,0x0e,0xa9,0x2d,0x4b,0xea,0x02,0x12, - 0xf5,0xc5,0x62,0x61,0xd1,0x51,0x3b,0xa1,0x5a,0xfd, - 0xda,0xe9,0x90,0x74,0xfa,0x04,0x69,0xd2,0xc0,0xb5, - 0x79,0x28,0x18,0xa7,0x16,0x41,0x97,0x69,0x9f,0x84, - 0xef,0x34,0x89,0x70,0x9e,0x63,0x84,0x8e,0x38,0xb7, - 0x74,0x82,0x3c,0x8d,0xf6,0xc7,0x23,0xab,0x76,0xbe, - 0x2d,0x0e,0xe1,0x92,0xcc,0xbd,0x36,0x6d,0xbc,0x09, - 0x0d,0x54,0xd4,0x8d,0x60,0x79,0x37,0x19,0xe8,0x92, - 0xbf,0xce,0xcf,0xba,0xc0,0x9b,0x8b,0xd6,0xa7,0xfb, - 0xee,0x7b,0xa2,0xce,0xb5,0x24,0x1d,0xe2,0x43,0x2d, - 0xd5,0xe4,0x41,0xe6,0xae,0xcd,0x24,0xb9,0xbd,0x02, - 0xaf,0x24,0xe1,0xb0,0xb1,0xb7,0x80,0xc9,0x8f,0x07, - 0x69,0x19,0x04,0x14,0x4b,0x38,0x4a,0x6f,0x3f,0xdf, - 0x78,0x56,0x93,0xbe,0xcd,0x45,0xc8,0xc8,0x94,0x7c, - 0x19,0x2e,0x91,0x22,0x99,0x31,0xbe,0xe8,0x1e,0x4d, - 0xc4,0xec,0xfe,0x1d,0xee,0xda,0x5a,0x7b,0xb1,0x26, - 0x3e,0x61,0x40,0x5d,0x62,0xec,0xd5,0x41,0x05,0x9a, - 0x14,0x02,0x4e,0xca,0x95,0x04,0x19,0x13,0x0f,0x0d, - 0xf8,0x47,0xe5,0x50,0x31,0xd2,0x81,0x49,0xbc,0x1f, - 0x23,0xeb,0x60,0x11,0x78,0xb7,0x5e,0x1c,0xf7,0x64, - 0xd2,0x31,0x52,0x03,0x5c,0x57,0x94,0x51,0xfc,0xbf, - 0xe3,0xc1,0xd4,0xae,0xa1,0xd6,0x0e,0xb4,0x67,0x1f, - 0xcf,0x34,0xf9,0xe5,0xa9,0xf8,0xac,0x13,0xf7,0x0d, - 0x48,0x62,0x74,0x5a,0x4f,0x14,0x08,0xda,0xc7,0xe4, - 0x95,0x47,0x54,0x04,0x45,0xb7,0x37,0x14,0x01,0x5b, - 0xa4,0xba,0xc5,0x90,0x3e,0xd4,0xe9,0xe7,0x24,0x25, - 0x64,0x57,0x15,0x4f,0x32,0xf9,0x53,0x45,0x47,0x30, - 0x20,0x05,0xf2,0x0e,0xb3,0x2d,0x09,0xcb,0x31,0xd8, - 0xaa,0x68,0xd7,0xa4,0x4b,0x32,0x8d,0x36,0xde,0xc8, - 0x88,0x4b,0x68,0x48,0x00,0xd0,0x25,0x04,0x00,0x1d, - 0x6b,0xbb,0xa9,0x08,0x75,0x70,0x9a,0x2d,0xd4,0x7a, - 0xbc,0x3c,0x7b,0xbf,0x80,0xf0,0x56,0x29,0x59,0x02, - 0xdf,0xa5,0x4a,0x09,0x8e,0x06,0xce,0x3e,0xf5,0x60, - 0xa6,0x29,0x7e,0x0e,0x9e,0x3f,0x7f,0xfe,0xd8,0x43, - 0x89,0x0e,0x49,0x22,0x22,0x12,0x9c,0x6d,0x34,0x76, - 0xec,0x88,0x3c,0x09,0x30,0xc2,0x81,0xf0,0xb8,0x5e, - 0xc7,0x8b,0x0a,0x63,0xa4,0x75,0x8b,0xd5,0x5d,0x60, - 0x2b,0xe2,0xa6,0xa3,0x68,0x0f,0x38,0xf2,0xb1,0xf3, - 0x26,0x4b,0xed,0xb3,0xc9,0x26,0x23,0xa0,0x2e,0xfa, - 0x5d,0xd5,0x5a,0x7f,0x57,0xe2,0x3d,0xd1,0xc1,0x67, - 0x26,0x06,0x1f,0xef,0x43,0xd1,0x3c,0x93,0xdc,0x3f, - 0x7c,0xb5,0x1c,0x77,0x52,0x13,0xd7,0x70,0xb8,0x58, - 0xe2,0xba,0xee,0x4d,0x8d,0x3f,0xa9,0x5d,0x23,0xef, - 0xd9,0x92,0xd7,0x5d,0x21,0xec,0x8a,0xad,0x7e,0x00, - 0x69,0x1c,0x4a,0xa2,0xb6,0x7a,0x60,0xa6,0xa2,0x17, - 0x78,0x1d,0x95,0xfc,0xab,0x34,0x8e,0xea,0x7e,0x4b, - 0xed,0x2a,0x67,0x81,0x14,0xc8,0xf8,0x31,0x3e,0x91, - 0xea,0xb1,0x3e,0x63,0x43,0x60,0x7e,0xfc,0xd9,0x46, - 0xd5,0x58,0x69,0x24,0x6e,0xf2,0x39,0x91,0xc6,0x13, - 0xc0,0xe1,0xa4,0x09,0x26,0x3e,0xad,0x4b,0xec,0x61, - 0xa2,0xf5,0x31,0x0e,0x3f,0x24,0xd3,0x16,0x7c,0x50, - 0xe3,0x6f,0x37,0x95,0xeb,0x62,0xfc,0x6b,0x43,0xd0, - 0xea,0x37,0xaf,0x13,0x3b,0x5b,0x2b,0x09,0xf5,0xca, - 0x4a,0xd3,0x33,0x8e,0x04,0xed,0xb8,0x2a,0x34,0x9e, - 0x4e,0x09,0x1a,0x21,0x4e,0x53,0x16,0xee,0x90,0x8d, - 0x84,0x94,0x5c,0xc1,0x49,0x79,0x42,0xc3,0x08,0xe6, - 0xa5,0xc4,0x2c,0x88,0xee,0xc5,0x00,0xeb,0x36,0x07, - 0x4d,0xa0,0xe8,0x86,0xbe,0x75,0x6a,0x26,0x2b,0x06, - 0x12,0xd1,0x9a,0x92,0xd7,0x0b,0x54,0x71,0x49,0xa5, - 0xb9,0x5f,0x13,0x25,0x5f,0xae,0xef,0x7d,0x81,0x9d, - 0x8b,0xf2,0xba,0xa0,0xed,0x5a,0x4e,0xe0,0x4d,0xf9, - 0x62,0x53,0x92,0x9f,0x02,0x90,0x83,0x6c,0x08,0xea, - 0x86,0x77,0xfc,0x33,0x9a,0x3d,0xf1,0xe3,0x42,0x2b, - 0xe2,0x81,0xd0,0xa4,0xa4,0x62,0xfb,0x4f,0x92,0xf2, - 0x77,0x01,0x36,0x4d,0xbc,0x35,0xfe,0x59,0x7d,0xb7, - 0x69,0x70,0xf2,0x2d,0x4d,0x74,0x39,0xeb,0x00,0xe7, - 0x4d,0xe6,0x44,0x36,0x45,0x0b,0xa7,0x92,0x46,0x59, - 0x9f,0x48,0x9d,0x90,0xe7,0x20,0x75,0x81,0xd6,0x2e, - 0xc6,0x5b,0x2d,0x4d,0xc7,0x55,0x40,0x1f,0x52,0xbc, - 0xc1,0x03,0x35,0xbc,0xa7,0x51,0xf3,0xc7,0x4d,0xec, - 0x9a,0x35,0x53,0xdb,0xd6,0xa7,0xee,0x41,0x17,0x77, - 0x37,0x45,0xe3,0x46,0x1d,0xda,0x15,0x39,0xc9,0xb0, - 0x99,0x90,0x34,0xa0,0x6e,0xd4,0xa6,0x35,0x35,0xb4, - 0x81,0x2a,0x71,0xde,0xdc,0xd8,0xbf,0x7b,0x3e,0x09, - 0x30,0x70,0x94,0x0a,0x87,0x3c,0x4d,0x00,0x08,0x7d, - 0x8e,0x14,0xcb,0x45,0x7c,0xab,0x30,0xdd,0xf8,0x5e, - 0xd8,0x68,0x76,0xed,0x14,0x17,0xa9,0x2a,0x75,0x0f, - 0xd5,0x55,0xc6,0x89,0x88,0x46,0x04,0x65,0xa7,0xc0, - 0xeb,0x50,0xa8,0x4d,0xeb,0xe6,0xfe,0x00,0x68,0x07, - 0x20,0x84,0x38,0x05,0x77,0x45,0x07,0x06,0xa5,0xca, - 0x4a,0x8e,0xdb,0x6a,0x94,0x98,0xa6,0xe7,0x12,0xf1, - 0x8d,0x5a,0x02,0x83,0xf4,0xba,0xe3,0x25,0xe0,0xf8, - 0x29,0x3d,0x0b,0x77,0x3f,0x97,0xd1,0x2f,0x72,0xef, - 0xdb,0xc9,0xb2,0xeb,0xda,0x0c,0x48,0x4c,0xd2,0x14, - 0x1a,0x15,0x84,0x13,0x51,0x1d,0x0e,0x26,0x32,0x7a, - 0x7d,0x5c,0x13,0x8d,0x7a,0xdf,0xda,0x38,0x0e,0x11, - 0x32,0x07,0xe7,0x47,0x12,0xf0,0x6a,0x4d,0x90,0x2a, - 0x2a,0x40,0x53,0x2d,0xa2,0xb1,0x68,0x75,0x5c,0x0b, - 0x3b,0x07,0xe4,0xd7,0x24,0x21,0xb5,0x34,0xb5,0x46, - 0xe3,0xb6,0x92,0xc4,0x3c,0x12,0x13,0xc3,0x8f,0xa1, - 0xd6,0x74,0x91,0x0c,0x03,0x29,0x6c,0xbb,0x76,0x0d, - 0x5d,0xdf,0xc5,0x82,0x7a,0x6f,0xa8,0x54,0xf2,0x68, - 0xa2,0x83,0xbe,0x55,0xf1,0x89,0x40,0x5d,0x41,0xb3, - 0xcd,0xee,0xc7,0xfb,0x00,0x82,0x91,0xe7,0xea,0xeb, - 0x4b,0x63,0x76,0xe2,0xfe,0x24,0x0f,0x48,0x92,0x66, - 0x11,0x5e,0x8c,0x3d,0x88,0xa1,0x58,0xac,0x44,0xab, - 0x20,0xe4,0x99,0xa4,0x39,0xdc,0xb5,0xea,0x64,0x95, - 0xd9,0x27,0xee,0x70,0x67,0xe1,0xbe,0xe7,0xb8,0x3b, - 0xc5,0x51,0x94,0x80,0x70,0xeb,0xd6,0xe9,0xe8,0x38, - 0x39,0x19,0x25,0xeb,0x7f,0x5a,0xf4,0xf4,0xf5,0x90, - 0xbc,0xe3,0x02,0x07,0xee,0x81,0xf0,0x2b,0x10,0x63, - 0x84,0x3d,0x1f,0x96,0x58,0x6f,0x2d,0x30,0x55,0x55, - 0x74,0xed,0x11,0x5d,0x28,0x54,0xdd,0x3b,0xf8,0x71, - 0xe2,0x9a,0x2c,0x8c,0x25,0x1f,0x15,0x80,0xd3,0x1c, - 0x48,0xd5,0x12,0xb5,0xa3,0x36,0x7c,0x9c,0xce,0x52, - 0x4f,0x1c,0x09,0xd7,0x23,0x27,0x74,0xcb,0x4d,0x89, - 0xa5,0xa4,0x4e,0xc5,0x0d,0x21,0xd1,0x7b,0x5b,0x4b, - 0x89,0xe0,0x4c,0x55,0x1e,0xa9,0x68,0x83,0x67,0x4f, - 0xfa,0xbe,0x87,0x09,0xa0,0x0b,0x3c,0x7a,0xd0,0x80, - 0x09,0x69,0x85,0x2a,0xef,0x91,0xb4,0x2b,0xef,0xc0, - 0xd8,0x3f,0xd4,0x15,0x44,0xd0,0x48,0x3c,0xae,0x1f, - 0x6c,0xc9,0xc6,0xe4,0x32,0x04,0x6d,0xd7,0x8b,0x1e, - 0xe4,0xef,0xd1,0x83,0xab,0x7f,0xa6,0x98,0x39,0x56, - 0x68,0x1d,0xd8,0x76,0x74,0x4f,0x12,0xae,0xbd,0x5a, - 0xf5,0xca,0xeb,0x8b,0x0e,0x5c,0x42,0xa1,0xa6,0xcf, - 0x0a,0x15,0xe2,0xaa,0x38,0x52,0x7e,0x52,0x47,0x14, - 0x53,0xf2,0x26,0x36,0x2f,0x0f,0x6f,0xb6,0x84,0xc0, - 0xa9,0xb8,0xa2,0x90,0x69,0x35,0x99,0xa8,0x41,0x38, - 0xb6,0x40,0x9b,0xe9,0xcd,0x30,0x97,0x10,0x59,0xa7, - 0x97,0x36,0x4d,0x54,0xba,0xb8,0x9a,0x90,0x0d,0x87, - 0x1e,0xbb,0xf8,0x68,0xd6,0x48,0xf5,0xe7,0xd1,0xf9, - 0x77,0xce,0x8a,0xc7,0xd9,0x68,0xb8,0x38,0x47,0x7b, - 0x61,0x30,0x6b,0x5e,0x71,0x60,0x1c,0x47,0xe8,0xbb, - 0x7d,0x55,0xc4,0x0b,0x25,0xe4,0x9b,0xd0,0x13,0xed, - 0x42,0x68,0x22,0x49,0x82,0x91,0x4e,0x31,0x3f,0x69, - 0xfb,0x91,0xe9,0x73,0xb2,0xfc,0x70,0x42,0xb4,0x66, - 0xff,0x15,0xf1,0x77,0xa6,0xe2,0x6a,0x42,0xc9,0x3a, - 0x0a,0x64,0xd6,0x6d,0x19,0xc9,0x83,0x07,0x02,0xf5, - 0x5a,0x70,0x4e,0x46,0x04,0x84,0x5a,0x27,0xce,0x89, - 0x7c,0xf2,0xfd,0x4a,0x19,0x7d,0x72,0x9c,0x27,0xde, - 0x80,0x9a,0xd3,0x4d,0x5c,0x21,0x81,0xd4,0x2d,0x61, - 0xd0,0x1d,0xca,0x09,0x7a,0xa4,0x4a,0xda,0x1d,0x20, - 0xe9,0xe0,0xf6,0xb1,0xa3,0x90,0x9b,0x43,0x55,0xc4, - 0xc4,0xf1,0xb8,0x58,0xff,0xa8,0x86,0x03,0x02,0x61, - 0x6d,0x97,0xcc,0x10,0x8c,0x4f,0x6b,0x06,0x4c,0x2a, - 0x49,0xd9,0x17,0xf3,0x86,0x30,0xc2,0x5c,0x43,0x90, - 0x4c,0x2d,0x31,0xeb,0x27,0x36,0x29,0xf7,0xa6,0xaa, - 0x3b,0xed,0x19,0xe5,0x93,0x4c,0xe3,0xae,0x46,0xa5, - 0xbb,0x88,0x8b,0x32,0x7d,0x16,0x25,0x29,0x64,0x0b, - 0x70,0x19,0x72,0x73,0xff,0xdf,0x3d,0xba,0x2f,0xd7, - 0x54,0xda,0x6a,0x75,0xfc,0x3a,0xe5,0xf5,0x51,0x41, - 0x15,0xda,0xf4,0x56,0xc1,0x79,0x91,0xa4,0x95,0x13, - 0x66,0x75,0xa2,0x8e,0xd4,0xb6,0xd9,0xbc,0x7b,0x58, - 0xbf,0x15,0x10,0xe1,0xc9,0x30,0xb7,0x5c,0x32,0xea, - 0x5a,0x13,0x26,0x49,0x7e,0x8b,0x8b,0x69,0x14,0x5a, - 0x51,0xdb,0x24,0x5f,0xb1,0x30,0x3f,0x26,0x22,0x72, - 0xa5,0xb5,0x98,0xe4,0x44,0x9c,0xe9,0xb4,0x6b,0x81, - 0xa5,0x38,0x4e,0xed,0x1b,0x47,0x24,0x06,0xc3,0x5c, - 0x54,0xaa,0x0e,0xf6,0x10,0x35,0x71,0x6e,0x52,0x32, - 0xd1,0x15,0xfb,0x93,0xc8,0xe2,0x80,0xf8,0x22,0x32, - 0xac,0x1c,0x38,0xb2,0xe7,0xe8,0xa8,0xb6,0x31,0x8a, - 0xb6,0x49,0xf8,0x34,0xfd,0x4d,0x1e,0x7a,0x2e,0x69, - 0xfc,0xa1,0xf4,0xb8,0x1e,0x67,0xf2,0x13,0x71,0x13, - 0x41,0x60,0xfa,0x78,0x4d,0x28,0xc4,0x74,0xd0,0x0d, - 0xed,0x9c,0xbf,0x22,0x73,0x0d,0xd5,0x65,0xd2,0x95, - 0x19,0xdb,0x4c,0x1a,0x24,0x06,0xf8,0xdb,0x8e,0x1f, - 0x27,0xfd,0x0f,0x47,0x12,0x26,0x03,0x47,0x72,0xef, - 0x4d,0xc4,0xc4,0x41,0x19,0x1a,0x5b,0x59,0x6e,0xa1, - 0xc1,0x3a,0xa2,0xa9,0xb6,0x0a,0xe8,0x5a,0xec,0x2f, - 0xd3,0xb4,0x17,0x40,0xba,0xe9,0xb0,0x2f,0x7a,0xe7, - 0xa9,0x1a,0x22,0x55,0x5f,0xf3,0x1c,0x6c,0xe2,0xa3, - 0x7c,0x0c,0x45,0x01,0xc2,0x78,0x3b,0x5a,0x15,0xe8, - 0xde,0x14,0x45,0xf6,0x72,0xd0,0x7f,0x6a,0xa9,0x0d, - 0xc6,0xa3,0x8f,0xc4,0xe5,0x7a,0x27,0x27,0x4f,0xad, - 0xd6,0x07,0x7c,0x6d,0x88,0xa2,0x3f,0x09,0x91,0xf9, - 0x2e,0x4b,0x76,0x4d,0xed,0x22,0x4a,0xc0,0x95,0xfc, - 0x9c,0x90,0xa4,0x06,0xbb,0x3f,0x92,0x5a,0x8d,0x37, - 0xc6,0x55,0x3e,0x22,0xdf,0x6e,0x42,0x68,0xd3,0xde, - 0xd5,0xf5,0x18,0xe2,0x66,0x39,0x01,0xba,0xae,0xda, - 0x0f,0xb1,0x3f,0x92,0x87,0xf5,0xdd,0xb9,0xa2,0xc2, - 0x59,0x0c,0xb9,0xc3,0x35,0x59,0x4e,0x50,0x8b,0x46, - 0x5a,0x96,0xc8,0x4f,0xd2,0x29,0xd0,0x4d,0x4c,0x5a, - 0x0c,0x05,0x8c,0x6d,0x3c,0xa7,0x77,0xe6,0x3e,0xdb, - 0x90,0x8f,0x3f,0xe2,0xd1,0x4d,0xd3,0xb2,0x80,0x7a, - 0x16,0x25,0xef,0x43,0x42,0xa5,0xeb,0xee,0x72,0x93, - 0x94,0xfa,0x3f,0xa3,0x03,0x17,0x0d,0x51,0x93,0x6f, - 0x18,0x70,0x81,0x1f,0xef,0xd0,0x15,0xa5,0xaf,0x74, - 0xa8,0x6b,0x7b,0x83,0x5c,0xc5,0x27,0x37,0x56,0x57, - 0xb5,0xa5,0x07,0x79,0x43,0x5b,0x29,0x89,0x82,0xaa, - 0x76,0x84,0x2d,0xa9,0x1a,0xa0,0x8d,0x0f,0x63,0x90, - 0xb5,0xe5,0x42,0xa4,0x8a,0xce,0x18,0xb5,0x16,0xc1, - 0xa6,0x5a,0x19,0xc0,0xe1,0x54,0xa9,0x82,0xd7,0x67, - 0xd0,0x83,0x48,0x73,0x50,0x77,0x87,0x0a,0x4e,0x3c, - 0x00,0xa9,0xb4,0x28,0x41,0x9e,0xc4,0x35,0x13,0x8c, - 0xde,0x74,0xa2,0x0a,0xec,0x33,0x2a,0xa9,0x5b,0xd3, - 0x7a,0x74,0x5a,0x38,0xf2,0x7b,0x34,0x79,0xf2,0xe0, - 0x5e,0xb8,0x69,0x3e,0x97,0xa8,0x98,0xe7,0x16,0xb5, - 0x7c,0x74,0x4a,0x69,0xd2,0xc0,0x51,0xeb,0x8a,0x2b, - 0x68,0x2a,0x6d,0x7a,0xfa,0xdd,0xb7,0x4b,0xc6,0xda, - 0xf1,0x80,0x48,0x0e,0xd2,0xcb,0xa4,0x04,0xd7,0xba, - 0x49,0x40,0x7e,0xda,0x4d,0x34,0xba,0x9c,0x84,0x13, - 0x5d,0x2b,0x49,0xa5,0x0b,0xe0,0xbd,0x75,0x3e,0xc8, - 0xe3,0x90,0x06,0x3e,0xc2,0x5b,0xa2,0xa5,0x07,0xc5, - 0xf7,0xa4,0x62,0x11,0x32,0x3e,0x4d,0x17,0x91,0x07, - 0x9e,0x3b,0xf0,0x68,0xa2,0xea,0x13,0x6e,0x93,0xfb, - 0x2e,0xa2,0x17,0xb8,0x96,0x9c,0xa1,0x4b,0x54,0xfa, - 0x0c,0x49,0x14,0x90,0x83,0x0a,0x72,0x13,0x6e,0x90, - 0x82,0xec,0x29,0x2a,0x75,0x25,0x16,0x68,0x78,0x4d, - 0x07,0xbc,0x3b,0x67,0x48,0x34,0x36,0xc9,0x95,0x84, - 0x18,0x8d,0xbc,0x5d,0x3d,0x3b,0xa1,0xd0,0xa9,0xc1, - 0x8e,0xe6,0x4a,0x6d,0x32,0xc7,0xc1,0x9a,0x0c,0x6f, - 0x03,0xff,0x32,0xf2,0x8d,0x29,0x9f,0xa0,0x21,0x86, - 0xeb,0xba,0xfe,0xb1,0xc2,0x08,0x07,0xc3,0x63,0xd3, - 0x2f,0x12,0x9c,0x68,0xb1,0x9b,0x14,0x9e,0x81,0x27, - 0x33,0xde,0x94,0x13,0x51,0x74,0x55,0xbd,0x43,0x49, - 0x06,0x51,0xc2,0x4a,0x62,0x8e,0xa9,0x25,0x36,0xc0, - 0xef,0x65,0x2a,0x80,0x9a,0xaa,0x4e,0xad,0x92,0x1c, - 0x12,0x67,0x78,0x3c,0x95,0xf8,0x1c,0x8e,0xbc,0x18, - 0xee,0x71,0xaa,0x00,0x2c,0xda,0xe4,0x50,0xc6,0xa9, - 0xdf,0x0e,0xed,0xbd,0xc7,0x9f,0x4f,0x6b,0x43,0x91, - 0xc7,0x89,0x5f,0xe4,0x36,0x5c,0x90,0xd9,0x8f,0x82, - 0x94,0xca,0x17,0x9a,0xc8,0xe0,0xee,0xbb,0x26,0x73, - 0xe2,0x70,0xdf,0x45,0x02,0x9b,0x04,0x21,0x9b,0xd6, - 0x55,0x1c,0x06,0x08,0x0a,0xc8,0xf6,0x7e,0x12,0xb9, - 0xd1,0xc5,0x99,0x2d,0xd9,0x12,0xe2,0x44,0xc9,0x67, - 0xcc,0xc2,0x66,0x06,0xed,0xbd,0xdf,0xb1,0xda,0x37, - 0x38,0x11,0x42,0xd9,0x43,0x24,0x18,0xa8,0xb1,0xef, - 0x0c,0x08,0xdc,0x8f,0x90,0x20,0x1c,0x82,0x56,0x68, - 0xcf,0x7d,0x07,0xb4,0xe6,0x4f,0x68,0xad,0x9e,0x50, - 0x14,0x1c,0x78,0xe6,0xc7,0x0c,0x86,0xfc,0xdc,0x43, - 0x4a,0x18,0xa6,0xf8,0x72,0x8b,0x0a,0xc2,0xfe,0x3e, - 0x83,0xc8,0xe0,0xb5,0x68,0x4f,0x1f,0x28,0x4c,0x1d, - 0xc2,0x74,0xdc,0x7b,0x9a,0x06,0x15,0x9c,0xb8,0x5f, - 0xe2,0x0b,0x82,0xa8,0xe5,0x43,0x64,0x90,0xf6,0xb3, - 0xbb,0x2f,0x67,0x49,0xd1,0x62,0xf4,0x99,0x6c,0x8e, - 0xfa,0x1a,0xe8,0x23,0xee,0xa4,0x0f,0x37,0x10,0xfc, - 0x71,0x2f,0xa7,0x96,0xb6,0x7e,0x47,0x27,0x57,0x6b, - 0x3c,0xf8,0xf5,0xeb,0x97,0x6d,0x6b,0xfe,0x70,0x80, - 0xa6,0xe9,0x8e,0x54,0x31,0x51,0xf0,0x58,0xa2,0x3c, - 0x63,0x85,0xe6,0xaa,0x47,0x53,0x9d,0xd4,0xc6,0xa3, - 0x86,0xa6,0x7b,0x92,0xab,0x76,0x9a,0xc2,0x4a,0x8b, - 0xdc,0xb5,0x9e,0x26,0xa2,0xf7,0xa6,0x52,0x48,0x59, - 0x36,0xb4,0xda,0xe2,0x78,0x3b,0x25,0x4f,0x8a,0x4a, - 0x51,0xe2,0x92,0x48,0xde,0x6a,0x86,0xeb,0x46,0x86, - 0x03,0x6f,0xc4,0xa1,0x47,0xe5,0x26,0x22,0xb4,0x3a, - 0x70,0xbd,0xe7,0xbe,0xee,0xda,0xef,0x56,0x93,0xe0, - 0x7f,0x40,0xf4,0x44,0x1a,0xa4,0x64,0x51,0x0f,0x10, - 0xda,0xc0,0x2e,0xc9,0x10,0x33,0x4e,0x44,0x3d,0x6f, - 0x82,0xa8,0xd3,0xe3,0x72,0x28,0x58,0x5a,0x37,0x5d, - 0xf1,0xba,0x11,0xed,0xdf,0x38,0x31,0x01,0x5e,0xc6, - 0x9e,0x7b,0x72,0xb3,0x4e,0x2d,0xf3,0xcd,0xc1,0x48, - 0x87,0xdc,0x42,0x47,0xec,0xcd,0xe0,0x14,0x0a,0x9e, - 0x8b,0x8c,0x3f,0x5d,0xeb,0x30,0x25,0x51,0xfa,0x5d, - 0x8a,0x0a,0x39,0x5b,0x14,0x32,0xb4,0x74,0x48,0x09, - 0x91,0xea,0xa9,0x8d,0x48,0x6d,0xad,0x2b,0x4c,0x91, - 0x06,0xae,0x4e,0x22,0x8c,0x57,0x5f,0x07,0x6e,0xac, - 0xda,0xb4,0x72,0xd7,0x0a,0xf6,0xce,0xec,0x34,0x24, - 0x2c,0x56,0x40,0x97,0x26,0xe6,0x48,0x3f,0x6e,0xe8, - 0x26,0x44,0x49,0x17,0x25,0x44,0x07,0x24,0xf9,0x51, - 0xe4,0x10,0xf0,0x10,0xce,0x81,0x9a,0x40,0x0a,0x42, - 0x76,0x06,0xb2,0xb3,0x5d,0x5f,0x49,0xa2,0x60,0xdb, - 0x12,0x9c,0xc8,0xcf,0x2a,0xbe,0xeb,0x12,0x3d,0xa7, - 0xfd,0xd4,0x85,0x8e,0xef,0x7f,0x77,0xb1,0xf5,0xa5, - 0x2f,0x99,0x1c,0xb8,0xdd,0x02,0x48,0x9c,0x07,0x7d, - 0x79,0xae,0xe7,0xec,0x36,0x33,0xb1,0xda,0xe9,0xc0, - 0x08,0xbc,0xa1,0xda,0xb4,0xc3,0x54,0x53,0xc8,0x6d, - 0x84,0x34,0x06,0xee,0x5a,0x4f,0x03,0xcb,0xbf,0x88, - 0x07,0x61,0x78,0x06,0x45,0xae,0xee,0xa4,0x40,0x9a, - 0x20,0xdc,0xf4,0x6c,0xb5,0x0d,0x24,0xb2,0xf9,0x8f, - 0xa0,0xa9,0xe3,0x9d,0xfd,0xfb,0x64,0x83,0xac,0xa6, - 0x41,0x52,0xbb,0x4d,0xc9,0xec,0xea,0x6f,0x95,0xda, - 0xdd,0xe1,0xdd,0x5a,0x84,0x44,0x61,0x6e,0x40,0x62, - 0xd2,0xe8,0xe9,0xc3,0xb1,0xdd,0xa0,0x6f,0x15,0x14, - 0x51,0x1f,0xad,0x2b,0x4a,0x98,0xf5,0x3b,0x2f,0x43, - 0x4e,0x4c,0xc9,0x41,0x77,0x74,0xd7,0x7b,0xa6,0x11, - 0x5a,0x87,0x24,0xa6,0x75,0xbf,0xa9,0x88,0x93,0x8a, - 0xf5,0xa4,0xb9,0x32,0xf1,0x21,0x82,0xf8,0xdb,0x38, - 0xea,0x4f,0x48,0x9c,0xe3,0x5f,0x39,0x01,0xc4,0xfe, - 0x98,0xa1,0x8a,0x7e,0x20,0x9e,0x49,0x9d,0xb9,0x13, - 0x58,0xc1,0xfa,0xa1,0x02,0x2a,0x56,0x21,0x01,0x45, - 0x4e,0x98,0xda,0xca,0x90,0x9b,0x3d,0xa1,0xb7,0x66, - 0xbd,0x39,0x94,0x80,0x34,0x72,0xa2,0x3b,0xb9,0x26, - 0x35,0x8e,0x1f,0x94,0xda,0xdb,0x13,0x3f,0x27,0x38, - 0xac,0x3f,0x8a,0xdb,0xc1,0xb1,0xc0,0x76,0x27,0x36, - 0x68,0x7f,0xd0,0xd9,0x89,0xd3,0x6e,0x6e,0xb4,0x3f, - 0xd9,0x4b,0x91,0x00,0x25,0xed,0xf9,0xdb,0xa9,0xa0, - 0xff,0xae,0xe3,0x1e,0xea,0x82,0x70,0x5e,0x6e,0x13, - 0xb7,0x34,0x01,0x18,0xce,0x81,0xc0,0x14,0x85,0xa8, - 0x56,0xff,0x4a,0x2d,0x80,0x6d,0x46,0x98,0x88,0xa4, - 0x6a,0x58,0xaa,0x07,0x3c,0x05,0xcc,0xc1,0xc9,0xf6, - 0xb1,0xd9,0x9c,0x04,0xfd,0x07,0x3c,0x9f,0xa8,0x49, - 0x90,0x50,0x1b,0x72,0x0c,0x27,0x9e,0x06,0x69,0xf9, - 0x38,0x98,0x95,0x92,0xa8,0xe4,0xad,0x96,0x6c,0x37, - 0x12,0x69,0x90,0x10,0x21,0x5d,0xb4,0x4a,0x84,0x6c, - 0xe6,0x95,0xab,0x6a,0xd1,0x05,0xa9,0x0d,0x2c,0x1a, - 0x90,0x14,0xd4,0xed,0x20,0x44,0xec,0xeb,0xeb,0xab, - 0xba,0xab,0xf9,0xd4,0x92,0xd3,0x04,0x8f,0x04,0xc9, - 0x2e,0x99,0x30,0x4b,0x2d,0xbf,0xc4,0x09,0x9a,0xcc, - 0x12,0xd5,0x9c,0xd5,0x91,0x88,0x07,0x61,0xd3,0x9a, - 0xaa,0xc5,0xa9,0x75,0x4c,0x41,0xae,0x27,0x55,0xd7, - 0xbb,0xf9,0xe8,0x83,0xc0,0x4c,0x53,0x61,0xd7,0xbb, - 0xda,0xf5,0xc3,0x1a,0x23,0x55,0xdd,0x9b,0x36,0xa1, - 0x93,0xe7,0xdf,0x7c,0x6e,0xb0,0x14,0xd9,0x20,0xe7, - 0x45,0x88,0x93,0x1c,0x54,0x76,0x6c,0x58,0x8c,0x44, - 0x53,0x7b,0xa0,0x52,0xeb,0x9d,0x90,0x0a,0x42,0xab, - 0x92,0x1d,0x44,0x42,0xdd,0x68,0xd2,0x8c,0x3e,0xeb, - 0x5a,0xca,0x37,0x0c,0xc9,0x2d,0x0a,0xec,0x6d,0x06, - 0x40,0x26,0xa4,0x96,0xf6,0x93,0x2b,0xc6,0x92,0x89, - 0xad,0xbb,0x9e,0xfe,0x7c,0x3a,0x32,0xeb,0xe4,0x66, - 0x14,0xb9,0x55,0xf1,0xce,0x04,0x4c,0x84,0xbd,0x6b, - 0x93,0x36,0xd7,0x65,0xa1,0x73,0xcc,0x25,0x82,0xd3, - 0x99,0x05,0x93,0xd0,0x23,0x15,0x84,0x12,0x4d,0xa7, - 0x32,0x9d,0x8a,0xa1,0x57,0x82,0xa4,0xb4,0x9a,0x31, - 0xd9,0xdb,0xaa,0xda,0x24,0x7f,0x9c,0x4f,0x4c,0x0d, - 0x29,0x60,0x43,0x90,0xb2,0xc4,0x2d,0x98,0x48,0x59, - 0x71,0x1d,0x9c,0xfa,0xf4,0xfd,0x45,0x0e,0xa6,0x23, - 0xe2,0xf1,0xc6,0xa3,0x85,0xb8,0x3a,0x17,0x90,0x71, - 0x93,0x72,0x37,0xa9,0x59,0x2b,0xa3,0xde,0x40,0x88, - 0x95,0x12,0x3f,0xba,0x7e,0x27,0x34,0xe6,0xd4,0x99, - 0x41,0x21,0xba,0xa6,0xe9,0x3c,0xad,0x6a,0xc9,0xde, - 0x84,0xa4,0xd7,0x13,0xba,0xb3,0x19,0x27,0xa7,0xb6, - 0x2d,0xfd,0xae,0xab,0x98,0x83,0x1e,0x4e,0xd1,0xb3, - 0x21,0x24,0x31,0xf1,0x71,0x0c,0x34,0x8c,0xe8,0x95, - 0x9b,0xd6,0x20,0xf8,0xb9,0xa3,0x28,0xaa,0x57,0xa4, - 0x31,0x82,0x10,0x4e,0x12,0x59,0x4d,0xc9,0x8b,0x24, - 0xbd,0xce,0x5b,0xec,0xf1,0xf9,0xc9,0x1a,0xe1,0xfe, - 0xb9,0x3f,0x7f,0xfe,0xbc,0x89,0x53,0x4e,0xfc,0x29, - 0x22,0xca,0x53,0x8c,0x54,0x02,0x7b,0x6a,0x09,0x76, - 0xe4,0x23,0x24,0x56,0x35,0xb4,0x2e,0x2a,0x4d,0x94, - 0x12,0x0f,0x70,0xd3,0xbe,0x70,0x48,0x2a,0xfc,0xbd, - 0x1d,0x69,0x77,0x31,0xd8,0xc5,0x4e,0x77,0x98,0x26, - 0xa4,0x42,0xd1,0x56,0x29,0x70,0x4a,0x0d,0x8e,0x43, - 0xc1,0x5e,0x0b,0xc2,0xfb,0xe3,0x67,0xb7,0x09,0xb9, - 0x6b,0x17,0xba,0x33,0x2a,0x0d,0xf7,0x90,0xa4,0x48, - 0x47,0xc8,0x07,0xc2,0xf4,0x23,0x59,0x4b,0x52,0x13, - 0x6e,0xad,0xa9,0x0f,0xa8,0x5b,0x4f,0x2e,0xe9,0x74, - 0xc3,0x31,0x49,0xa9,0x3d,0x81,0x15,0x54,0x28,0x38, - 0xe4,0x91,0x10,0xde,0x57,0x82,0x4c,0x75,0xca,0x4a, - 0x59,0xf7,0x6e,0x61,0x3a,0x61,0x39,0x1a,0x55,0x4e, - 0x92,0xe1,0xe9,0xd0,0x51,0x83,0xcd,0x54,0xc5,0x6a, - 0xcb,0x64,0x09,0xcb,0x57,0xea,0xbf,0x2a,0x07,0xc3, - 0xc0,0x83,0x95,0xaa,0x21,0x37,0x45,0x34,0x99,0xb6, - 0xb9,0xef,0x09,0x55,0x4f,0x51,0xb5,0x92,0x46,0xd3, - 0x7b,0xb2,0xba,0x69,0x4f,0x0d,0x3c,0x02,0x44,0x09, - 0x13,0x4f,0xc1,0x8c,0x34,0x47,0x9b,0x0e,0x0d,0x16, - 0x43,0x20,0x2f,0x37,0x4e,0xe9,0x9e,0x03,0xb4,0x8a, - 0xe8,0x79,0x56,0x4a,0x68,0xb5,0x0d,0x07,0xc2,0x7f, - 0xe3,0xa4,0x58,0x3b,0x10,0x88,0x53,0x65,0xa7,0xd4, - 0x7a,0x62,0x45,0x95,0x6e,0x98,0xea,0xa0,0x31,0x77, - 0x9b,0x6c,0xd8,0x20,0x03,0x49,0x41,0x5f,0x03,0x0b, - 0x44,0xd6,0x26,0x34,0xd0,0x06,0x2a,0x87,0x8e,0x25, - 0x6f,0x32,0x13,0x20,0xbb,0x11,0x6b,0x7c,0x5e,0x2e, - 0x11,0x1a,0x0e,0x78,0x4c,0x44,0xa9,0x0d,0x6b,0xda, - 0x83,0xf5,0xf5,0xf5,0x55,0xc1,0x8f,0xb1,0x36,0x43, - 0x14,0x84,0xee,0x03,0x8a,0x51,0x24,0xf1,0xe0,0xd4, - 0x7a,0xb5,0xe5,0x45,0x6d,0x8c,0x1e,0xb7,0x82,0xcc, - 0x04,0x5e,0xab,0xac,0x35,0x8b,0xb0,0xde,0x05,0x1d, - 0x4d,0xc9,0xba,0xc9,0x27,0xa5,0x49,0xf4,0xf5,0x4c, - 0x42,0xa0,0x01,0xe5,0x45,0x5b,0x1c,0x77,0xbf,0xa0, - 0x06,0x7e,0x4d,0x03,0x20,0x61,0x10,0xa9,0xa8,0x30, - 0x4f,0x13,0xde,0x43,0xe7,0x82,0x12,0x43,0x44,0x81, - 0x20,0x91,0x29,0x88,0x17,0x95,0x78,0xbc,0xfa,0x8e, - 0xd2,0x54,0x2a,0x5d,0xef,0x6f,0x9a,0x52,0x99,0x88, - 0xbb,0x46,0xe1,0xb9,0xa8,0x1a,0xdd,0x54,0x53,0x03, - 0xfc,0x59,0x5b,0xbe,0x11,0x5d,0xe3,0xfd,0x19,0x8e, - 0x8b,0x94,0x50,0x29,0xe5,0x25,0x6d,0xdb,0x05,0x0e, - 0xbd,0xd1,0x9f,0xbf,0x03,0xd8,0x72,0xb1,0x15,0xf5, - 0xc2,0x5d,0x15,0x6d,0xde,0x41,0x39,0xc7,0xf9,0x9e, - 0xf4,0xe8,0x06,0x4e,0xbc,0x8d,0x74,0x5d,0x01,0x9d, - 0x2a,0xb8,0xc7,0x22,0xbe,0x85,0xa2,0x10,0x9d,0x9b, - 0x34,0x99,0xfb,0xd1,0xc8,0x6d,0x4a,0xd6,0xdc,0x74, - 0xc8,0x50,0x1d,0xd5,0x86,0x70,0x1e,0x92,0xef,0xf8, - 0xf7,0xce,0x04,0xd2,0xad,0x71,0x31,0x1c,0xac,0xc9, - 0xa4,0x90,0x92,0xb1,0x7e,0x4d,0x6e,0x4c,0x36,0x25, - 0x01,0x2e,0x79,0xa6,0xef,0x9b,0xda,0x1d,0x64,0x7e, - 0x3c,0x69,0x92,0x38,0x61,0xd1,0xf6,0x77,0x34,0xd5, - 0x84,0xbc,0x1f,0x79,0x9e,0x67,0x9a,0x4c,0x6b,0xa4, - 0xff,0x33,0xb5,0xe2,0xfa,0x84,0x0f,0xf1,0x4c,0xbe, - 0xff,0xec,0x84,0x76,0x40,0x7d,0x7d,0x7d,0x9d,0xa0, - 0xc4,0x7e,0xa0,0x15,0xff,0x76,0x8d,0xda,0x12,0xbc, - 0x27,0x9a,0x40,0x39,0xfe,0x00,0x4a,0x7b,0x74,0xaf, - 0xfe,0xeb,0x95,0x6b,0x27,0x24,0x8f,0x89,0xd5,0x6f, - 0x13,0x66,0x3a,0xcd,0x46,0xc8,0xa0,0xee,0xc9,0xfe, - 0xae,0x86,0x31,0x6e,0x7b,0x1d,0x84,0xe0,0xe9,0xcf, - 0x5e,0x32,0x49,0x37,0x14,0xab,0x8f,0x02,0xe0,0x7e, - 0x6e,0x74,0x4f,0x64,0x34,0xae,0xef,0x63,0xc3,0xc7, - 0x83,0x35,0x44,0x13,0x7d,0x54,0x7c,0x9d,0x0d,0xf5, - 0xc2,0xc5,0x4a,0xfd,0x8c,0xa9,0x55,0x1f,0x10,0x60, - 0x1b,0x03,0xd3,0x39,0xe8,0xd0,0xf1,0xaa,0xba,0x5e, - 0x49,0x61,0x39,0x89,0x35,0xa5,0x4c,0x6b,0x90,0x19, - 0xc7,0x83,0xbe,0x1b,0x5a,0xa6,0x0c,0x35,0x69,0x8b, - 0x50,0xb5,0x9d,0x04,0x06,0x1d,0xaa,0x94,0xb8,0x50, - 0x94,0xe5,0x4e,0xcf,0x49,0xe1,0x43,0xd7,0x76,0x48, - 0x55,0x0a,0x64,0xfb,0x8f,0x45,0x4a,0x28,0x4e,0x22, - 0xfb,0xde,0xd7,0x45,0x6d,0xce,0x6b,0x20,0xe3,0x9a, - 0x00,0x14,0xdb,0x1b,0x69,0x1d,0x4c,0x90,0x39,0xd9, - 0x01,0x04,0x44,0xb0,0xe8,0x7a,0x1d,0xf7,0x80,0x8c, - 0x22,0x4d,0x15,0x42,0xfe,0x75,0x08,0x71,0x3b,0x64, - 0x68,0x22,0x5c,0x4e,0x93,0x8b,0x13,0x07,0x84,0x2a, - 0x47,0xf3,0x7e,0xad,0x3d,0xc4,0xc0,0x07,0x4c,0x49, - 0xb7,0x2d,0x0a,0x68,0x7f,0x13,0x5a,0xe4,0xae,0x23, - 0x90,0xd4,0x2d,0xe7,0xc7,0x09,0x41,0xba,0x64,0x6e, - 0xe0,0x45,0xd5,0x35,0xd8,0x24,0xc8,0xf4,0x4f,0xa5, - 0x69,0x97,0xce,0x9d,0x4b,0x08,0xd5,0x65,0x74,0xcb, - 0x74,0x02,0x32,0x54,0xe8,0x15,0xd6,0x4c,0xb4,0x98, - 0x49,0xed,0xe0,0x69,0x12,0x8e,0xf6,0xfe,0xf6,0x5c, - 0x99,0x5a,0xef,0x84,0x76,0x38,0x3e,0xe8,0xc4,0x73, - 0x82,0xfb,0x29,0x37,0x8d,0x44,0x9c,0x15,0x42,0xe1, - 0x5d,0xa1,0x77,0xab,0x30,0x27,0xfd,0x3c,0xc7,0xb5, - 0xbc,0x82,0x34,0xc5,0x06,0xa1,0xb9,0xc0,0x4f,0x91, - 0x10,0x76,0x25,0x38,0x87,0x01,0x81,0x9a,0xf8,0x8a, - 0x6e,0x28,0x44,0x06,0x07,0xd0,0x0d,0x82,0xce,0x1c, - 0x50,0x81,0xae,0x04,0xa2,0x28,0x5a,0x4e,0x6e,0xf0, - 0x45,0x28,0x06,0x1c,0xd4,0x24,0x09,0x3f,0xba,0xc4, - 0x92,0x58,0x13,0x65,0x7b,0x0e,0x06,0xd3,0x56,0x08, - 0x55,0x52,0x69,0x71,0x38,0x06,0x3b,0x8d,0x2b,0x6f, - 0xfb,0xef,0x0a,0xa9,0x06,0x0e,0x81,0xdd,0x78,0xee, - 0x7d,0x28,0xe1,0x9c,0xb8,0x1f,0xa9,0xcd,0x46,0xc8, - 0x03,0x89,0x90,0xf5,0x6b,0x12,0xd4,0xa8,0x36,0x63, - 0xc9,0x7d,0x93,0xd0,0xf3,0x02,0xb7,0x75,0xa7,0x59, - 0x51,0x5a,0x65,0xd2,0x75,0x2f,0x34,0x8c,0x2a,0xbc, - 0x0f,0xd4,0xa7,0xba,0x78,0xbc,0xd6,0xb6,0x42,0x60, - 0xb2,0xa6,0x16,0x36,0x27,0x45,0x09,0x3d,0x70,0x50, - 0x2a,0x21,0x1b,0xee,0x60,0xbd,0x0c,0xb1,0x38,0x55, - 0x73,0x9f,0x70,0x44,0x94,0xec,0x7c,0xff,0x77,0x4b, - 0x0e,0x90,0xfc,0xdc,0x7d,0xb4,0x48,0x78,0xed,0x7e, - 0xff,0x09,0xd5,0x25,0x44,0xd2,0x10,0xb0,0x57,0x12, - 0x12,0x8e,0xcf,0x35,0x1c,0xde,0x76,0x62,0xcc,0x70, - 0xf3,0x68,0x42,0xca,0xee,0x57,0x42,0x88,0xc9,0x0c, - 0x34,0xac,0x83,0x4a,0x36,0x42,0xc0,0x69,0x24,0xdb, - 0x24,0xf4,0xf8,0x83,0xe4,0x14,0xb9,0x7d,0x90,0xec, - 0x46,0x61,0x48,0xb2,0xad,0x49,0x3c,0x4a,0x57,0xdc, - 0xa5,0x7d,0xa9,0x83,0x3b,0xdf,0x6b,0xb0,0x36,0xc9, - 0xb8,0x20,0x3f,0x96,0xb2,0x40,0xef,0x49,0xd7,0xa4, - 0x70,0x7d,0xca,0x9c,0xa3,0x95,0x38,0x4c,0x6e,0xe2, - 0x8a,0x12,0x16,0xed,0xa4,0x04,0xea,0x81,0x45,0x5d, - 0x68,0xa0,0xc6,0xbd,0x47,0xd7,0xce,0x4d,0xc8,0x79, - 0x28,0x6c,0x57,0x08,0xf8,0x6f,0xd3,0x47,0x7b,0xeb, - 0x73,0xaa,0xde,0x48,0x87,0xdb,0x29,0xd8,0xe8,0x0b, - 0x9e,0xb2,0xfc,0x4f,0xd8,0xdf,0x7d,0x01,0x80,0xf9, - 0x20,0x06,0xe8,0x69,0x4c,0x9e,0x5c,0x9e,0x03,0x2f, - 0x04,0x17,0x5d,0x82,0x1f,0x5d,0xf5,0x75,0xc3,0xc5, - 0x93,0x01,0xe4,0x44,0x14,0x27,0xf4,0xc3,0x2d,0x28, - 0xf3,0x99,0x8f,0xa0,0xae,0xef,0x7a,0xe8,0x33,0x93, - 0xe0,0x65,0xe4,0xf1,0xf4,0x75,0x75,0x3f,0x07,0x48, - 0x66,0x0a,0xa6,0xda,0x8a,0x84,0x31,0x35,0xf8,0x76, - 0x93,0x45,0xaa,0x4a,0x69,0xb6,0xd7,0x69,0xb2,0x18, - 0xc4,0xa3,0x08,0xc6,0xd5,0xf7,0x91,0x5a,0xbe,0x84, - 0xfc,0xc9,0x1e,0xa8,0x85,0xda,0xee,0x23,0x99,0x9d, - 0xd4,0x96,0xef,0xf5,0xb8,0x44,0x12,0x91,0x67,0xe3, - 0x90,0x1f,0x17,0x1f,0x28,0x06,0xb8,0xc9,0x43,0xc3, - 0xbd,0x3b,0xe9,0x39,0xc1,0x9a,0x48,0xa6,0xc0,0xc7, - 0xa1,0x4d,0x94,0x24,0xff,0xbb,0x1c,0xce,0x47,0xad, - 0x96,0x20,0xfe,0x79,0x7a,0xc5,0x2d,0xcf,0xcd,0xb6, - 0x81,0xf4,0x97,0x03,0x69,0xfd,0x40,0xfb,0x33,0xb5, - 0x97,0x48,0x88,0xf1,0xed,0xcf,0x5d,0x0b,0xcb,0xc4, - 0xa1,0xa3,0x05,0xe7,0x25,0x22,0x86,0xb2,0xae,0x8e, - 0x33,0xd2,0xd6,0x64,0xe2,0xbe,0x96,0xd4,0x46,0x25, - 0xc4,0x34,0x69,0xae,0xf5,0x76,0x9f,0x4b,0x12,0x9d, - 0xe1,0xb7,0x59,0x1f,0x47,0x7e,0xf6,0x21,0x3e,0x39, - 0x09,0x81,0x6a,0x0c,0x74,0xe2,0x95,0x69,0x0f,0x9a, - 0xe4,0xf5,0xa4,0x42,0x67,0xa9,0x71,0xb7,0x41,0x4e, - 0xad,0xb0,0x62,0xd2,0xd6,0xeb,0xe4,0xf5,0x69,0x12, - 0x70,0x8b,0x2a,0xa6,0x89,0xd6,0xd7,0x27,0x70,0x39, - 0x29,0x3e,0x3a,0x24,0x85,0x2a,0x19,0xf2,0x15,0x52, - 0xae,0x07,0x41,0x89,0xe4,0x84,0xec,0x5e,0xc2,0x30, - 0x26,0xed,0xc8,0xdb,0x95,0x16,0x5f,0xa8,0x36,0xec, - 0x9f,0x39,0x7f,0xad,0x94,0x8d,0x87,0x4d,0xb4,0xf6, - 0x68,0x21,0xd4,0x41,0x61,0xc2,0x09,0x65,0xa3,0x6a, - 0x8f,0xa0,0x60,0x15,0x36,0x24,0xd2,0xe8,0x94,0x08, - 0xa7,0x31,0x59,0x77,0x8f,0xb4,0x6e,0x1c,0x3f,0xa7, - 0x27,0x3f,0x93,0x98,0x18,0xbc,0x23,0x24,0x52,0x6a, - 0xe2,0xe6,0xde,0x55,0x27,0x57,0x4e,0x95,0x8d,0x39, - 0x28,0x1c,0x1f,0xe1,0xb1,0x86,0x3a,0x49,0x5f,0xc9, - 0xf2,0x93,0x5d,0x41,0xe8,0xdb,0xeb,0xc1,0xd4,0xf5, - 0x83,0xc6,0xea,0xce,0xc1,0xed,0x69,0x4c,0x16,0x8c, - 0x3a,0xa9,0xd5,0xf6,0x36,0x32,0x3f,0xb5,0x63,0x28, - 0x10,0x1a,0xfd,0x25,0xdb,0x36,0xd6,0xaa,0x97,0xf6, - 0x28,0x25,0x59,0xf7,0xe4,0xa2,0x8b,0x11,0xbd,0x4d, - 0x11,0xb8,0x0c,0x45,0x55,0x77,0x32,0x96,0x26,0x74, - 0x99,0x50,0xcd,0xd0,0xf6,0xb7,0x50,0xb5,0x54,0xf0, - 0xa8,0x2b,0x07,0xe8,0x00,0x15,0x8e,0xd1,0xec,0x39, - 0x4d,0x90,0x92,0xc1,0x37,0x21,0x7c,0x3a,0xd1,0x45, - 0xd3,0x6a,0xda,0x92,0xee,0x96,0x2c,0x13,0x87,0x96, - 0x7c,0xf1,0x7a,0x0b,0xc8,0x4d,0xed,0xea,0xfb,0xe8, - 0xe0,0x84,0xda,0x87,0xa4,0x29,0xb7,0x84,0xde,0xea, - 0xf7,0x38,0x1d,0x38,0x4a,0xfc,0x5c,0xb7,0x27,0x49, - 0xc0,0x38,0x74,0xca,0xc9,0xd4,0x6c,0x26,0x30,0xd3, - 0x99,0xe7,0x10,0x4d,0xcd,0x21,0x7e,0x03,0x34,0x6c, - 0x13,0x1c,0x42,0x7e,0x12,0xcc,0x44,0x09,0x89,0x41, - 0x36,0xca,0xfd,0x6e,0xef,0xe1,0xa7,0xd1,0xcb,0x44, - 0x84,0x52,0x8e,0x4b,0x7a,0x70,0xa6,0xe2,0x28,0x67, - 0xf0,0x47,0x86,0x95,0xfa,0xe2,0x1d,0x3c,0xea,0xd8, - 0xea,0x8a,0xfe,0x0c,0xa2,0x6c,0xce,0x08,0xb5,0xdc, - 0xb5,0x6f,0x17,0x89,0x5b,0xc0,0xe1,0x1a,0x1e,0x49, - 0x91,0x5b,0x37,0x83,0xa6,0x4d,0xd1,0xa1,0xb7,0xad, - 0x16,0xfa,0x3d,0x1a,0xb4,0xe2,0x71,0x50,0xf4,0x24, - 0x05,0x10,0xcc,0x72,0x28,0x63,0x0f,0xd2,0xf7,0xe1, - 0xd5,0x49,0xc7,0xee,0xf9,0x93,0x9b,0x31,0xb5,0xb3, - 0x28,0x80,0x9a,0xc3,0xba,0xa6,0xa4,0x9f,0x38,0x4e, - 0x29,0xb0,0xb8,0x03,0xfb,0x46,0x98,0x48,0x07,0x48, - 0x0f,0x4c,0xb2,0x0e,0x98,0x44,0x46,0xf5,0xb3,0x54, - 0x64,0x73,0x6a,0x0f,0xb8,0x04,0x41,0x51,0xa2,0x2d, - 0xe7,0x04,0x94,0xd5,0x4f,0x08,0xe6,0xba,0x27,0xcf, - 0x04,0xbb,0xab,0x05,0x06,0x89,0x9d,0x76,0x34,0x0a, - 0x8a,0x81,0x03,0x07,0xd9,0x83,0xc4,0x2c,0xfb,0xe2, - 0x00,0x0a,0xf9,0xf3,0x7b,0xf2,0x2e,0x91,0xd4,0x4d, - 0x84,0x7a,0xb5,0xcb,0x90,0x35,0x75,0xa6,0x44,0x9b, - 0x2a,0xfd,0x8e,0x62,0x50,0xa1,0x62,0x14,0xe2,0x8f, - 0x69,0xe3,0x1c,0x92,0x8c,0x30,0xeb,0xe9,0xa4,0xfb, - 0x4d,0x48,0xa6,0xb3,0x0d,0xe9,0x28,0x90,0x4b,0x90, - 0x68,0x3f,0x29,0x21,0x9c,0x34,0xf3,0xf4,0xb9,0x36, - 0x64,0x1d,0x51,0xb0,0x1b,0x71,0x4b,0x9d,0x06,0x39, - 0xbf,0xce,0x64,0x95,0xe4,0x10,0x44,0x4a,0x92,0x7a, - 0xe2,0x65,0x68,0x05,0xce,0x7a,0xe4,0xb1,0x2e,0xe5, - 0x2c,0x3d,0x74,0x8e,0xf6,0xef,0x7c,0x7d,0x90,0x4d, - 0xd1,0xc4,0x51,0x25,0xc2,0xd9,0x86,0x95,0x1e,0x82, - 0x78,0x24,0xad,0xe9,0xa1,0x3c,0x41,0x61,0x3d,0x5b, - 0xd7,0x0c,0xfa,0x9a,0xa7,0x79,0x2c,0x02,0x42,0xed, - 0x23,0xe2,0x33,0x25,0xe2,0x99,0x69,0x37,0x96,0xe3, - 0x9f,0x6c,0x32,0xde,0xd0,0xcf,0x1e,0x33,0x75,0x4a, - 0x56,0x89,0x37,0x93,0xcc,0x35,0x93,0x11,0x2b,0x54, - 0xc8,0x36,0x08,0x25,0x62,0xb6,0x09,0xa2,0x16,0x89, - 0x49,0xca,0xc2,0x64,0xee,0xab,0xad,0x3a,0x0d,0x38, - 0xbd,0xea,0xd6,0xd6,0x61,0xe3,0x49,0x91,0x24,0x00, - 0x4e,0x18,0xba,0x96,0xc3,0xc5,0x0a,0xbb,0x36,0x49, - 0x55,0x19,0xff,0xc4,0x43,0x6b,0xcf,0xa6,0x73,0x74, - 0x36,0x87,0xd1,0x47,0x68,0x64,0x22,0x34,0x3b,0x3b, - 0x95,0x64,0x25,0xb3,0x31,0x40,0xee,0x63,0xe7,0x5d, - 0xb3,0x2b,0x71,0x7c,0x80,0x58,0x59,0x93,0x47,0xe1, - 0x7b,0x77,0x1c,0x3d,0xa7,0xd0,0x45,0x7e,0x42,0x23, - 0x69,0x9c,0x1c,0x0c,0x29,0x51,0xb4,0xf3,0x02,0x3d, - 0x32,0x1a,0x51,0x77,0x08,0x91,0xfe,0xe1,0xe2,0x20, - 0x9c,0xd6,0x09,0xf2,0x45,0x27,0x19,0x03,0x2d,0x42, - 0x92,0x18,0xa8,0xa2,0xb9,0xaa,0xe2,0x3e,0x89,0xcc, - 0x26,0x23,0xcf,0x89,0x82,0x91,0x5a,0xe3,0x0e,0xdd, - 0xfa,0xe6,0xf9,0xac,0x15,0xa3,0x5d,0xc7,0xe1,0xf2, - 0x12,0x05,0xb6,0x8d,0x9f,0x7c,0xb9,0x52,0xa7,0xa8, - 0x25,0x2f,0x45,0x32,0x15,0x44,0x32,0x1f,0x8a,0x3d, - 0xec,0xf2,0x4c,0x02,0x87,0x49,0x33,0xe8,0xcd,0xb2, - 0x8b,0x60,0xf0,0xd4,0x93,0x9f,0x46,0xb7,0x3f,0xe5, - 0xfa,0x68,0xb5,0x3e,0x8c,0xbd,0xda,0x03,0xf8,0x26, - 0x85,0xa5,0x8a,0x36,0x04,0x0b,0x4a,0x1c,0x6a,0xca, - 0x5c,0x35,0xc1,0x12,0xa8,0xb2,0x80,0x20,0x8b,0xd7, - 0xb3,0x18,0x45,0x7c,0xf8,0xa8,0x29,0xc1,0x98,0x88, - 0x77,0xf4,0xf7,0x97,0x99,0x66,0xd2,0x00,0x11,0x16, - 0x32,0x06,0xb7,0x4d,0xfb,0xcc,0xc1,0xb5,0x1d,0xb1, - 0xe9,0x52,0x01,0x2e,0xd8,0xa5,0x89,0x21,0x13,0x68, - 0x2a,0x4d,0xa5,0x00,0xff,0xab,0x06,0xd7,0xf4,0x0a, - 0x82,0x90,0x45,0x22,0x6a,0x69,0x72,0x6d,0xa3,0x0a, - 0x1e,0xc6,0x7b,0x1f,0x2a,0xcf,0x29,0xc8,0xc9,0xbe, - 0x4a,0x64,0xd9,0xf4,0x9e,0x71,0x3d,0x13,0x99,0x93, - 0x3c,0xc1,0xfa,0x5a,0x51,0x9d,0xa0,0x2d,0x4a,0x30, - 0x28,0xc8,0x77,0xe7,0xf8,0x38,0x84,0x41,0xbc,0x37, - 0x23,0xd6,0x17,0x11,0xd5,0x4f,0x92,0x1c,0xd7,0xea, - 0x4c,0xf1,0x50,0xa7,0xf6,0xc4,0x76,0x28,0xa9,0x7d, - 0x63,0x3b,0x57,0x7d,0xe9,0x28,0xe1,0x9a,0xf6,0xc0, - 0x05,0x9e,0x7e,0xee,0x50,0xa6,0xc2,0x28,0x4c,0x5c, - 0xd5,0x94,0x68,0xab,0x58,0x9f,0x5e,0xcb,0x24,0xfe, - 0xa7,0xd7,0xbb,0x51,0xb7,0x87,0xeb,0x76,0xad,0x38, - 0x14,0x45,0x4d,0x24,0xec,0x41,0x4c,0xb8,0xc8,0x07, - 0x91,0xd0,0x59,0x55,0xb1,0x36,0xf4,0x92,0x1a,0xcc, - 0x9c,0x6d,0xc1,0x0f,0xd4,0x8b,0x94,0x90,0x4e,0xb6, - 0x46,0x09,0x28,0xb0,0xfb,0xc7,0x75,0x7b,0x74,0xda, - 0xec,0x35,0x1d,0xce,0x5d,0x34,0x2e,0x09,0xa8,0x4d, - 0xe3,0xc8,0x44,0x3c,0x4d,0xd9,0xd9,0x94,0x49,0x2f, - 0x48,0x5c,0x35,0x8d,0xf7,0xa5,0xaa,0x84,0x7c,0x73, - 0x1c,0xe4,0xec,0x0e,0xc9,0xd4,0x8f,0x34,0x2a,0xc1, - 0x51,0x01,0xd5,0x7d,0x8f,0x5b,0xc4,0x2e,0x41,0x20, - 0x44,0x8d,0x88,0xdb,0xb4,0x60,0xb5,0xf5,0xd6,0x02, - 0x4d,0x99,0xd6,0x05,0xf9,0x12,0x15,0xc9,0xd2,0x9b, - 0xec,0xbe,0x80,0x43,0x86,0x24,0x69,0x17,0x18,0x75, - 0x62,0x4d,0x47,0xcc,0x83,0xf1,0x69,0xe9,0xa1,0x2c, - 0x6d,0xd0,0xd2,0x84,0xad,0x7b,0x10,0x0d,0xfc,0x93, - 0x38,0x52,0xad,0xca,0xcd,0x46,0x38,0xd2,0xad,0xf5, - 0x0a,0xd5,0xb1,0x0b,0x04,0xd6,0xd7,0xca,0x09,0x7d, - 0x26,0xde,0x80,0xe9,0xef,0x3f,0x26,0xbc,0xfa,0xc4, - 0x95,0x5a,0x5b,0xf4,0x7f,0x77,0x36,0x19,0x2a,0xc0, - 0xb8,0x19,0xfd,0x25,0x59,0x01,0x39,0x00,0x4b,0x91, - 0xb2,0x05,0x5f,0x4f,0x6e,0xd1,0xb7,0xe1,0xdd,0x3b, - 0x09,0x31,0xa6,0x06,0x84,0x1c,0x91,0x1e,0x87,0xb6, - 0x1b,0xe4,0xd0,0xbe,0xbf,0xee,0x35,0x68,0xa6,0xb3, - 0x4a,0x27,0x81,0xa8,0x28,0x74,0xc9,0x21,0xa1,0x4d, - 0x1a,0x07,0x92,0x5e,0x9a,0xfe,0x99,0x6b,0x73,0x53, - 0x72,0xe5,0x14,0xce,0x8d,0x41,0x77,0xa5,0xf1,0xf7, - 0x60,0x57,0x81,0xe8,0x97,0x0a,0x08,0xa7,0xa4,0x65, - 0xd2,0xcc,0xe9,0x86,0xd4,0x93,0x01,0x6e,0x72,0x61, - 0x77,0xa3,0xec,0xce,0x9b,0x6b,0xf2,0x4a,0xd3,0xef, - 0x9f,0xe4,0x4d,0x12,0x5a,0xb6,0xf0,0x24,0x7b,0x9c, - 0x53,0xa1,0x45,0x89,0x7b,0x22,0xa8,0x62,0x9f,0xeb, - 0xba,0x7e,0x38,0x40,0x8e,0x9d,0x6f,0x8d,0xc9,0xc8, - 0x84,0x33,0x1d,0xf4,0xdb,0xea,0x51,0x03,0x74,0x82, - 0xfa,0xb4,0x0d,0xe7,0x10,0x8e,0x24,0xc4,0x48,0x9c, - 0x9c,0x6d,0xd6,0xed,0x1e,0x2a,0x3d,0x9b,0xa4,0x04, - 0x3d,0xb5,0x26,0x28,0xb0,0xb9,0x44,0x43,0x4d,0x04, - 0x85,0xa3,0x13,0x59,0xfe,0x7a,0xed,0xc1,0x37,0x2c, - 0x06,0xd8,0xb4,0x81,0x3a,0x0f,0x86,0x5c,0xc6,0x4d, - 0x0f,0x1f,0x93,0x33,0x57,0xd5,0x24,0xe2,0x28,0xb5, - 0xd6,0xc2,0x41,0x3e,0xea,0xcb,0xb8,0x20,0xe4,0xf8, - 0x6c,0x0b,0x93,0xda,0x78,0xcd,0x83,0x36,0x0d,0x56, - 0x64,0x2e,0xf1,0x22,0x0e,0x4f,0x42,0x51,0x9c,0xa9, - 0xb1,0x4b,0x88,0x09,0x71,0x4d,0x01,0x52,0x89,0xec, - 0xb4,0x76,0xb5,0x4d,0xd1,0xbe,0xf7,0x6c,0x95,0x5f, - 0xc3,0x7b,0xb9,0xdf,0xf7,0x49,0xad,0x00,0x73,0x58, - 0x9f,0xe1,0x5d,0xff,0x6c,0x49,0xfd,0xfd,0xfe,0x2c, - 0xfb,0x84,0x57,0x40,0x53,0x4f,0x88,0x05,0x96,0x17, - 0xe3,0xb8,0x12,0x12,0x13,0xab,0xaa,0x8e,0x08,0x69, - 0x46,0xde,0x96,0x7b,0xe7,0x8e,0x1f,0x3a,0x78,0x96, - 0xe1,0xbe,0xa6,0xfd,0x78,0xde,0x1f,0x28,0xc6,0xf3, - 0xce,0x67,0x71,0xdc,0x27,0x77,0xc6,0x99,0x98,0x76, - 0xf4,0x8c,0x39,0xe7,0x1c,0x45,0x1f,0x3a,0xb5,0x22, - 0xa1,0x40,0x97,0x08,0x45,0xf6,0xef,0x51,0x7e,0x98, - 0x9b,0xf2,0x22,0x94,0xc3,0x09,0xde,0x2a,0xbf,0xa8, - 0x4f,0xe6,0x4d,0xbe,0x79,0xc4,0xf9,0xd1,0x69,0xae, - 0x4d,0xeb,0x7b,0xd1,0xfa,0x2b,0x27,0xf2,0x99,0x86, - 0x9b,0x48,0x68,0xd8,0xa1,0xf7,0x1b,0x7b,0xab,0x17, - 0x55,0x30,0xa9,0xe7,0x9f,0xbc,0x38,0x26,0x5f,0xb0, - 0x24,0xf9,0x3e,0xb5,0xce,0x26,0x8e,0x8b,0x72,0x90, - 0xd2,0xf4,0x54,0x6a,0x39,0x25,0x99,0x75,0xba,0x2e, - 0x80,0xaf,0x71,0x24,0x3b,0x71,0x6a,0x26,0x18,0x70, - 0x32,0x17,0x85,0x6a,0xa3,0x52,0x02,0xea,0xb4,0x52, - 0x7a,0xf5,0xe7,0x84,0xaa,0x1c,0xc7,0x86,0xaa,0x3e, - 0xf2,0x88,0x72,0xeb,0x68,0xb2,0xdd,0x00,0xaf,0x99, - 0x98,0xe4,0x24,0x38,0x75,0xd2,0x6d,0x72,0xc8,0x94, - 0x83,0xe5,0xa9,0xb2,0x95,0x2a,0x8a,0x9c,0xaf,0x1f, - 0x55,0x64,0x0a,0x0c,0x84,0xe8,0x05,0xde,0x45,0x25, - 0xae,0x51,0xe2,0x6c,0xc9,0x7d,0x17,0x21,0x6d,0x01, - 0xa1,0x88,0x30,0x3f,0x4d,0x4b,0xd2,0xb8,0xbc,0x6b, - 0x9d,0x08,0x8a,0x84,0xb0,0x39,0x4d,0xa5,0x4a,0x4b, - 0xaa,0x12,0xe2,0x2c,0xd3,0x60,0xb7,0xb6,0xd1,0x45, - 0x24,0xf8,0x86,0xf2,0xa0,0x54,0xff,0x20,0xe2,0xb6, - 0x6a,0x11,0x25,0x4e,0x51,0x4f,0x7c,0x75,0x92,0x2d, - 0xf0,0xca,0x46,0x3e,0x90,0xfe,0x79,0x27,0xb1,0x92, - 0x76,0x4c,0xe7,0x62,0x3a,0x5b,0x9a,0x84,0x42,0x9b, - 0xf6,0x46,0xa5,0x44,0x75,0x81,0xf6,0x4f,0xe8,0x5b, - 0xe4,0xa9,0x5d,0xc6,0x4f,0x0b,0x90,0xf6,0x48,0xc8, - 0x4d,0x9c,0xa3,0x69,0x2a,0x95,0xba,0x27,0x0b,0xcb, - 0x0f,0x8c,0x97,0xf4,0x2c,0xe9,0xf7,0x86,0x21,0x84, - 0xd5,0x64,0xe1,0xb6,0xbd,0xb9,0xf0,0x58,0x9b,0xfc, - 0xc2,0x7e,0xde,0xf9,0xcb,0xe9,0xba,0x90,0x2a,0x2b, - 0x05,0x25,0xcd,0x6a,0xa1,0x32,0xae,0x01,0x31,0x19, - 0xfb,0x86,0x97,0x78,0x39,0xd1,0xf4,0x55,0x78,0xd8, - 0x95,0x16,0xa2,0x7b,0x29,0x34,0xb5,0xa2,0xed,0x2f, - 0xd7,0xd2,0x22,0xf2,0xe7,0xc4,0x67,0x30,0xaa,0xb2, - 0x04,0x65,0x97,0xd1,0x5c,0xc2,0xde,0xbe,0x21,0x80, - 0xd6,0x34,0xf6,0x9e,0x78,0x53,0x97,0x21,0x9e,0x53, - 0x52,0x75,0x19,0xaf,0x2f,0xf7,0x4e,0x48,0xd4,0x70, - 0x1a,0x81,0x55,0x44,0x41,0xc7,0x1e,0x29,0x91,0xea, - 0xd7,0xa8,0xa3,0x9f,0x6a,0x35,0xf1,0x5d,0xa5,0x57, - 0x48,0xe8,0x2b,0xb4,0x3b,0x4b,0xdf,0x0d,0xac,0x6f, - 0x2b,0x34,0xd6,0x0b,0x86,0x7e,0x1d,0xb4,0x7f,0x24, - 0x98,0x54,0x92,0x88,0x77,0x81,0xea,0xfe,0xdd,0x6f, - 0x1e,0x5b,0xd1,0xe1,0x4c,0x55,0x7f,0x12,0x3c,0x9b, - 0xd6,0x8c,0xdb,0x6b,0x93,0x46,0x89,0xb6,0x76,0x6e, - 0x63,0x53,0xd7,0x16,0xa4,0x44,0xd1,0xc4,0xab,0x4a, - 0x8e,0xd9,0xae,0xf5,0xe7,0xae,0x47,0xda,0x97,0x95, - 0x6c,0x48,0xfa,0x38,0x3f,0x7c,0x77,0x05,0xa9,0x08, - 0x3c,0x3c,0x7a,0xb1,0x79,0xa3,0x35,0xaa,0xa3,0x35, - 0x71,0x85,0x1c,0x42,0x6a,0x62,0x24,0xa9,0x9f,0x93, - 0xd8,0x5e,0x19,0x24,0x10,0xb9,0x43,0xae,0x80,0xa5, - 0xb6,0xa1,0xf3,0xf8,0xd2,0xe7,0x42,0x1e,0x7a,0x70, - 0xc8,0x57,0x28,0x30,0x46,0x5e,0x29,0x7c,0x47,0x91, - 0x18,0xad,0x23,0x9b,0x2b,0xe2,0x41,0x88,0x08,0xf9, - 0x64,0x91,0x07,0x57,0x4f,0x44,0xa7,0x76,0x18,0x75, - 0x39,0x66,0x20,0xa8,0x1e,0xc9,0x37,0xb5,0xda,0x89, - 0x2f,0x47,0x1c,0x34,0x40,0xa2,0x1f,0x89,0xb7,0x9e, - 0x19,0xaf,0xc0,0x37,0x41,0xc1,0xbe,0xc1,0xd0,0x6e, - 0x6c,0xf9,0xd0,0x21,0xd9,0xd1,0x06,0x0a,0x96,0xa4, - 0x30,0x9c,0xb2,0xc0,0xce,0x6b,0xd0,0x51,0xc3,0x73, - 0x4e,0x29,0xd9,0xb2,0x6b,0x32,0xe8,0xe4,0xd0,0x64, - 0xd6,0x18,0x12,0x3b,0xdb,0xaf,0x4e,0xaa,0x95,0xe9, - 0x7b,0x52,0x0b,0xce,0x24,0x6d,0x6f,0x15,0xaa,0xcb, - 0xec,0xf5,0xfa,0x65,0x61,0xd6,0xb4,0xc9,0x95,0x67, - 0xd4,0x15,0xa3,0x5d,0x92,0x43,0x15,0x6b,0xf2,0xc4, - 0x99,0x36,0xe5,0x07,0x9b,0x77,0x44,0xf2,0x88,0xc4, - 0x1b,0x26,0x98,0x2c,0xf7,0x88,0x1c,0xad,0x75,0x2d, - 0x69,0x82,0x31,0x19,0xc0,0x2e,0xfe,0x29,0x47,0x5a, - 0x5d,0x54,0xd8,0x1d,0x4d,0x89,0xed,0x57,0xe0,0x9e, - 0x45,0xb2,0xb6,0x43,0x21,0x12,0xb9,0x72,0xfb,0x3e, - 0x94,0xf0,0x6f,0xd6,0xd9,0x23,0xa1,0xa1,0xe7,0x62, - 0xb8,0x6c,0xb5,0xa9,0x68,0xdd,0x3e,0x0f,0xc5,0xe0, - 0x38,0x01,0xe6,0xd0,0x8b,0xd4,0xa2,0xd5,0xa2,0x0c, - 0xd6,0x6d,0x4d,0x86,0xbe,0x74,0xf0,0x50,0x72,0xe4, - 0x0a,0x33,0xd0,0x8c,0x2b,0x7a,0x76,0x86,0xc2,0x50, - 0x8e,0x18,0xaf,0x71,0xd9,0x25,0x63,0x94,0x5c,0xba, - 0xc4,0x48,0x8b,0xf3,0x49,0xe8,0x95,0x92,0x4e,0x57, - 0x48,0x9a,0x78,0x11,0x09,0xef,0xf7,0x19,0x35,0x71, - 0x63,0x28,0xf6,0x8b,0xc7,0x1c,0x4a,0x4b,0x4c,0x85, - 0xf7,0x84,0xec,0x2c,0x78,0x3f,0x56,0x7f,0xc9,0xb5, - 0x0a,0x37,0xb6,0x32,0xee,0x39,0x4d,0xed,0xed,0x5f, - 0xbf,0x7e,0xd9,0xf8,0xa0,0x3a,0x69,0x2f,0x5a,0xf4, - 0xd3,0xe4,0xc8,0x26,0x03,0x9e,0x60,0xaa,0x49,0x98, - 0x8c,0x48,0x50,0x0b,0x42,0x34,0x26,0x50,0xbd,0xfa, - 0x99,0x9c,0x81,0x75,0x3c,0x74,0xe3,0x26,0x9d,0xb2, - 0x7e,0x3a,0x4c,0x04,0x06,0x76,0x13,0x07,0x65,0xda, - 0x05,0x35,0xf5,0x6f,0x07,0x48,0xb0,0x4c,0xd2,0x5a, - 0x41,0x00,0xef,0x11,0x64,0x4d,0x80,0x2d,0x37,0x19, - 0x07,0x30,0x6d,0x44,0x79,0x5c,0xe0,0x82,0x16,0x48, - 0xa5,0xea,0xc4,0x05,0x87,0x90,0x30,0x27,0xd1,0xcc, - 0x32,0xf0,0xfb,0xea,0xf0,0x98,0xb4,0x4e,0x68,0xba, - 0x86,0x06,0x0b,0x06,0x33,0xcf,0x9a,0x12,0x25,0x48, - 0x7e,0x4a,0x35,0x95,0xa6,0x8a,0x96,0x12,0x14,0xe7, - 0xc7,0x44,0x81,0x35,0x05,0xe6,0x0d,0x3f,0x21,0xb5, - 0x36,0xfb,0x35,0xc8,0x7a,0x29,0x42,0x2a,0x42,0xe1, - 0x56,0x3a,0x11,0x93,0x26,0xb3,0x52,0x8b,0x50,0x7f, - 0x34,0x4c,0x32,0xd6,0x86,0x8f,0xe8,0x62,0x98,0xb6, - 0xeb,0x0d,0x27,0x69,0xb4,0x64,0x48,0x2d,0xeb,0x20, - 0x28,0x88,0x89,0x4d,0xd2,0x3d,0xea,0xff,0x6d,0x88, - 0xd7,0xb6,0x7d,0x91,0x3c,0xe4,0x52,0x2c,0x99,0xd0, - 0x4b,0xf7,0xef,0xbd,0xbd,0x3f,0x4d,0x48,0xea,0x1e, - 0xd8,0x14,0x71,0x0e,0x49,0xdb,0x24,0x9c,0xb4,0x86, - 0x08,0xcd,0x4a,0xc9,0x8e,0x43,0xa5,0x16,0xc5,0xa9, - 0x1d,0x48,0xd9,0x50,0x38,0xe8,0xf7,0xef,0xe4,0x45, - 0xa7,0x9d,0x37,0x39,0x45,0x17,0x89,0x9c,0x78,0x65, - 0x1d,0x01,0x42,0xae,0x0f,0x55,0x77,0x34,0x26,0x4f, - 0x6a,0x97,0x9b,0xca,0x22,0xb8,0x88,0x13,0xe2,0x50, - 0x09,0x1a,0xa7,0x11,0x4e,0xca,0x54,0x55,0x59,0x38, - 0x3d,0x78,0x47,0x9e,0xd6,0x0d,0xe2,0x60,0x61,0x40, - 0x42,0xec,0xdf,0x6d,0xde,0x43,0x3f,0x48,0x1c,0x21, - 0x16,0x90,0xba,0x51,0x77,0x46,0xdb,0x86,0xe6,0xb0, - 0x5c,0x39,0x7c,0x93,0xfa,0x2b,0x55,0xe2,0xae,0xfd, - 0xd9,0x09,0xf1,0x8e,0xb8,0x6a,0x3e,0x87,0x0c,0x26, - 0xcb,0xb5,0x27,0x9a,0x51,0xe6,0x05,0x5a,0x4e,0x95, - 0x0e,0xb1,0x24,0xd8,0x96,0x60,0xf5,0x49,0x0b,0xa6, - 0x5d,0x73,0x2d,0x92,0x83,0x4a,0x81,0x8b,0xda,0x29, - 0xf7,0xef,0x29,0xd2,0xb9,0x20,0xf9,0xbb,0x3d,0x61, - 0x3d,0xbd,0x74,0xa2,0x4b,0xb9,0x44,0xe4,0x09,0x76, - 0xbd,0x0f,0x95,0x95,0xf2,0x98,0x5c,0x80,0x74,0x56, - 0x29,0xb4,0xb6,0xee,0xa4,0x46,0x8b,0x2b,0x87,0x3a, - 0x08,0x19,0xb6,0x28,0x56,0xea,0xf3,0xd5,0x76,0xbd, - 0xe1,0xa7,0x54,0x6a,0x97,0x10,0xa7,0xa9,0xed,0xcd, - 0x4a,0x2d,0xd5,0x29,0x51,0x72,0xc9,0x51,0x4f,0x44, - 0xfa,0xfe,0x00,0x75,0xe4,0x82,0x76,0x6d,0xb9,0x73, - 0x41,0x13,0x98,0x81,0x6b,0x45,0x49,0x6a,0x69,0x8b, - 0xda,0x99,0xf8,0x6a,0x2b,0x95,0xd0,0x46,0xb7,0xc7, - 0xf5,0x7b,0xee,0x43,0x99,0xc6,0xbe,0x53,0xfb,0xd0, - 0x9d,0x39,0x49,0x4b,0x29,0x59,0x28,0xd1,0x39,0xe7, - 0x5a,0xca,0x26,0x01,0x28,0x93,0xec,0x57,0x4a,0xfe, - 0x36,0x26,0xe8,0x93,0x0d,0x8f,0x6b,0x49,0x11,0x2f, - 0x8a,0xce,0x2d,0xea,0x48,0x69,0xcb,0x9d,0x50,0x69, - 0xba,0xfe,0x97,0x73,0x26,0xdf,0x20,0x0b,0xf0,0xb3, - 0xe4,0x2e,0x5c,0x83,0x8a,0xea,0xe8,0xc3,0xa4,0x15, - 0x05,0x8d,0x81,0x2b,0x81,0x77,0xb2,0x66,0x48,0x52, - 0xeb,0x1a,0x64,0xd3,0x62,0xa7,0x96,0x00,0x11,0xf2, - 0x5c,0x4f,0xd7,0xb5,0x1b,0x95,0xf7,0x44,0x12,0xed, - 0xaa,0x78,0x6c,0x92,0xa3,0x6b,0xd8,0x64,0xb5,0x59, - 0xec,0xa1,0x25,0x57,0x53,0x5f,0xde,0xb5,0x09,0xdc, - 0xe2,0x4e,0xba,0x4d,0x93,0x47,0xd3,0xfd,0x5c,0x7f, - 0xfd,0xfa,0x75,0x05,0x1e,0x85,0xb6,0x3b,0x3e,0x4e, - 0x70,0x54,0xaa,0xde,0x11,0x52,0x5d,0x4b,0x78,0x32, - 0x8e,0x74,0x50,0x36,0x55,0xdb,0x8e,0x0c,0x99,0x5a, - 0xcc,0x3d,0x51,0x29,0xaf,0x8e,0x87,0xef,0x1b,0xda, - 0x61,0x9a,0xc4,0x44,0x58,0xda,0xbd,0xd3,0x24,0x4e, - 0xb9,0x48,0x0a,0x7b,0xa2,0x15,0xab,0x5c,0xe2,0x2a, - 0x48,0x25,0x5b,0x1b,0x94,0xa9,0x55,0xc9,0x45,0xc8, - 0xb9,0x2c,0xc9,0x1a,0x50,0x74,0xb4,0x1c,0xd0,0x76, - 0x98,0xb6,0xb2,0x09,0xed,0x54,0xd9,0x04,0xc3,0xc9, - 0x1a,0x79,0x3f,0x66,0xff,0x51,0xb2,0x86,0xe6,0xd9, - 0x6e,0xa0,0x02,0x5a,0x1d,0x35,0xa8,0x1f,0x5b,0x5a, - 0x43,0x42,0x89,0xf5,0xda,0x08,0xe9,0x4d,0x84,0x6b, - 0x38,0x70,0x2d,0xbf,0x48,0xb9,0x4c,0x89,0xb3,0x33, - 0x11,0x96,0xc3,0x59,0xe9,0x9e,0xf5,0x3a,0xa9,0xd2, - 0x33,0x61,0xe3,0x66,0x20,0x71,0x23,0x0e,0xd2,0x68, - 0xec,0x72,0x85,0x82,0x26,0xa6,0x7a,0x3f,0x64,0x05, - 0x33,0x0c,0x42,0x91,0x7c,0x01,0x9a,0x64,0x9f,0x73, - 0xae,0xdf,0x09,0xa9,0x71,0x84,0xe6,0xd4,0x0f,0x4c, - 0xbe,0x61,0x94,0xa5,0x3a,0xdd,0x83,0x25,0xf4,0x17, - 0xdb,0x5f,0x94,0x41,0x27,0xf8,0x31,0x64,0xc1,0xab, - 0x45,0xa7,0xad,0xb7,0x89,0x3d,0x4f,0xe3,0xc6,0x0e, - 0x3e,0xa6,0x1e,0x2b,0x99,0xab,0x3a,0x61,0xab,0x04, - 0xc1,0xba,0x6b,0xee,0x5c,0x2c,0xf7,0x7c,0xc9,0x07, - 0xae,0x5f,0x06,0x48,0x9b,0x23,0x77,0x08,0x50,0x85, - 0x18,0x98,0x36,0x2a,0xc1,0x0e,0x09,0x4b,0x7d,0x79, - 0x82,0x97,0x5d,0x25,0xa2,0x92,0xf3,0xe9,0x33,0xbb, - 0x6d,0xc8,0xb0,0x96,0x6b,0x0a,0x1a,0x2e,0xb8,0x0f, - 0xfd,0xf4,0x9a,0x64,0x17,0xa8,0x72,0x76,0xcf,0x63, - 0x4b,0x4c,0x4e,0x6b,0x5c,0x39,0x0a,0xd4,0xba,0x76, - 0x6d,0x6c,0xd1,0x2e,0xea,0x7b,0xe2,0x67,0x5c,0x59, - 0xb9,0x46,0x09,0xb5,0xfc,0xfe,0x79,0x6b,0xe6,0x19, - 0x0a,0xc1,0xea,0xa3,0xf3,0xa1,0x2d,0x64,0x4d,0x3f, - 0xe5,0xc0,0x4a,0x36,0x1a,0x6f,0x76,0x00,0x93,0x08, - 0x2d,0x8d,0x8f,0xd3,0x77,0xba,0x81,0x09,0x8a,0x3d, - 0x6a,0x4b,0x30,0xb8,0xd8,0xdb,0x22,0x45,0x4d,0x6c, - 0x5b,0x11,0x75,0x94,0x7f,0xe8,0xcc,0x58,0x9d,0x44, - 0xc3,0x64,0xa1,0x93,0xec,0x22,0xfa,0xf3,0xa0,0x44, - 0x19,0xf4,0xc0,0x30,0xd9,0x77,0x89,0xc1,0xbd,0xff, - 0xaf,0xa7,0xf9,0xac,0x7b,0xff,0xd6,0x46,0x62,0xf1, - 0x8e,0xd6,0x6b,0xa4,0x69,0xa4,0x1d,0xa3,0xf3,0x73, - 0xc4,0x46,0x28,0x16,0x48,0x09,0x31,0x22,0x7f,0xb4, - 0x7e,0x9f,0x4b,0x54,0xf0,0x41,0xb1,0xa0,0xae,0x89, - 0x43,0x84,0x1f,0x14,0x0d,0x9a,0xb8,0xd2,0x0a,0x62, - 0xf2,0x69,0x9a,0xda,0x56,0x4e,0x9e,0x7e,0x40,0x82, - 0x22,0x4c,0x46,0x49,0x9b,0xd3,0x2b,0xb9,0x3c,0xf9, - 0xb1,0xb6,0x62,0x88,0x09,0x96,0x24,0xb3,0x44,0x22, - 0x3a,0x07,0x92,0x58,0x39,0x03,0x48,0x42,0x18,0xc8, - 0x01,0x78,0xc3,0xc6,0x5f,0xf6,0x91,0x6b,0x22,0x58, - 0x13,0xf2,0xa7,0x5c,0x10,0xe2,0xf8,0x68,0xf2,0x93, - 0x04,0x26,0x29,0x01,0xd4,0x96,0x58,0x27,0x5f,0xeb, - 0x3d,0x93,0x90,0x99,0x13,0xcd,0xbb,0xda,0x84,0xdd, - 0x26,0x99,0xea,0xcf,0x22,0xe9,0x13,0x85,0x84,0x4e, - 0x51,0x15,0x84,0x72,0x95,0xe7,0x93,0xdc,0x9a,0x05, - 0xa5,0x49,0xca,0xba,0x8f,0xc0,0xd2,0x8d,0x4f,0x97, - 0x49,0xdb,0x8a,0xeb,0xa0,0xc1,0x54,0x45,0xe3,0x82, - 0x64,0x86,0x43,0x52,0x49,0x33,0xa6,0xb4,0x45,0x34, - 0xf1,0x3f,0x0c,0xba,0x53,0xd4,0xda,0x37,0x08,0x4c, - 0x0d,0xbc,0x0a,0xe4,0xa4,0xb8,0x89,0x3d,0x30,0x84, - 0xad,0x94,0xe8,0x50,0xfb,0x63,0x28,0x20,0xeb,0x6f, - 0xb9,0x1d,0x8e,0x8e,0xe0,0xb8,0x9b,0x90,0x74,0x16, - 0x39,0xa1,0x53,0xcb,0x3e,0x25,0xff,0x94,0xd4,0x10, - 0xd5,0x42,0x51,0xb3,0xd4,0x4e,0x4d,0x71,0xd4,0xf1, - 0x44,0x4d,0xb2,0xf7,0x51,0xeb,0xa8,0x9f,0x21,0x34, - 0x7c,0x33,0xd1,0x06,0x82,0xde,0x58,0x9a,0x62,0x45, - 0xa2,0x35,0x3d,0x8b,0x8e,0xa0,0x53,0x7b,0x51,0xee, - 0x05,0xdf,0xbb,0x72,0x07,0x9d,0x1b,0x41,0x40,0xe5, - 0x1e,0x1a,0x5b,0x44,0xcb,0xe8,0xeb,0xe7,0xd5,0xcf, - 0xb0,0x34,0xa6,0x9d,0xaa,0xec,0xe9,0xe1,0x90,0x91, - 0x1c,0xe9,0x4e,0xa4,0x71,0x3c,0x7d,0x90,0x9b,0xd6, - 0x14,0x25,0x2d,0x4b,0xa6,0x7b,0x6d,0x89,0x58,0x1a, - 0x94,0x95,0x88,0xb9,0xe1,0x16,0xdd,0xcf,0xed,0x3e, - 0x80,0x40,0xa7,0x04,0x51,0x99,0xe0,0x75,0x95,0x02, - 0xf3,0x6a,0x9c,0x79,0x42,0x1c,0x88,0x27,0xe4,0x64, - 0xce,0x37,0xd7,0xb1,0x25,0xd5,0x77,0x49,0x00,0x6d, - 0x59,0x6e,0xc8,0xb5,0xa4,0x03,0x04,0x1c,0xad,0xc7, - 0x1a,0xed,0x92,0xfb,0x8e,0x67,0xe0,0xa6,0x40,0xc8, - 0x1f,0x67,0x91,0x4c,0xd4,0x60,0x54,0xf8,0x26,0x8a, - 0x36,0x25,0x2c,0x90,0xdc,0xd5,0x65,0xf4,0x96,0x28, - 0x58,0xba,0x35,0xe6,0x26,0xaa,0x4c,0x6c,0x18,0xd7, - 0x01,0xa9,0x3b,0x53,0x32,0x07,0x95,0xe7,0x4f,0x32, - 0x94,0x84,0x2d,0xf5,0xb3,0x1b,0x5a,0x57,0x4b,0x1d, - 0x92,0x5a,0x14,0x4e,0x95,0xe2,0x86,0xe3,0xbe,0x48, - 0x0b,0x2b,0x4a,0x3b,0x04,0x2d,0xa8,0x0a,0x49,0x02, - 0x72,0xe6,0x92,0x22,0xbc,0xb6,0xdc,0x87,0x04,0x6d, - 0xe4,0x91,0x24,0x8b,0x1b,0xf7,0xce,0x6f,0xa2,0xb7, - 0x9a,0x9f,0x6e,0x0a,0x66,0xa5,0x21,0xf4,0xe7,0x0b, - 0xfa,0x57,0xd7,0xa4,0xc2,0x4f,0xeb,0x78,0xd2,0x6a, - 0x73,0x49,0x83,0x43,0x9b,0x42,0xfb,0x07,0xe3,0xc2, - 0x56,0xdb,0x08,0xae,0x27,0x4e,0xc7,0x39,0x1b,0x21, - 0x2a,0xfc,0x86,0xc2,0x20,0x15,0xd7,0x2b,0x10,0xc4, - 0x51,0x01,0xdc,0x19,0xae,0x9f,0xf9,0x72,0x90,0x16, - 0x25,0x23,0xee,0x29,0xeb,0xc6,0x4c,0x7c,0x91,0xe4, - 0xfd,0x93,0x1e,0x56,0x42,0x9d,0x36,0x9b,0x3c,0x8d, - 0xe5,0x2e,0x54,0x91,0x23,0x2f,0x44,0xbf,0xe7,0xcf, - 0x9f,0x3f,0xab,0xa9,0x30,0x07,0xf9,0x0f,0x55,0x7f, - 0xec,0xd7,0xea,0xc4,0x8b,0xeb,0xc1,0x6a,0x70,0x49, - 0x2d,0x20,0x4d,0xe2,0xe8,0xc0,0x83,0x0a,0xbb,0x12, - 0x31,0x3a,0x71,0x54,0x1c,0x89,0x32,0x21,0x48,0x6e, - 0xbc,0x5f,0xf9,0x13,0x80,0x92,0x15,0xf0,0x6e,0x1e, - 0xef,0x4d,0x45,0xd7,0x48,0xaa,0x3d,0xad,0x5f,0x47, - 0xdc,0x4c,0x5c,0x05,0x4d,0x38,0x9c,0x16,0x54,0x58, - 0xa3,0xb5,0x39,0x68,0x1d,0x57,0x85,0x82,0x23,0xd9, - 0xde,0x4c,0xc9,0x66,0x82,0xcd,0x53,0xb0,0x4c,0xc9, - 0xd0,0x96,0xa7,0xe8,0x02,0xb3,0xda,0x58,0x24,0xa1, - 0x3c,0xc7,0x67,0x49,0x89,0xb4,0xe3,0x7e,0x91,0x41, - 0x65,0x42,0x9b,0xa7,0xb6,0xf9,0x05,0xe2,0x7d,0xfa, - 0x77,0xdb,0xef,0x4d,0xeb,0xc3,0x15,0xc5,0x77,0xdb, - 0x24,0x15,0xc4,0x46,0xa8,0xd2,0xc5,0xaa,0xa2,0x04, - 0xc2,0xa1,0xe6,0x93,0x17,0x1c,0xc9,0x2b,0x04,0x7e, - 0x10,0xb6,0x96,0x48,0x5f,0x27,0xa0,0x4c,0xe8,0xa7, - 0x05,0xf7,0x89,0x85,0x6c,0x32,0x83,0x55,0xc0,0x42, - 0xb9,0x3c,0x2e,0xc9,0x72,0x67,0x09,0x11,0xc6,0xb7, - 0xde,0x9f,0xd4,0xee,0xd4,0xf3,0x66,0x92,0x72,0x71, - 0x71,0x3a,0xa1,0xbf,0x43,0x8b,0x1f,0xdf,0xa1,0x5b, - 0xe3,0xe7,0x9c,0x7a,0x5d,0xc3,0x7c,0xbf,0x93,0xfe, - 0x4e,0xbc,0x8f,0x65,0xd2,0x52,0x40,0xe6,0x8b,0x89, - 0x98,0xfb,0x3e,0x63,0xd8,0x87,0x55,0xf5,0x74,0x70, - 0xa4,0xe9,0x24,0xea,0x07,0x27,0xa2,0xf7,0xaf,0x5f, - 0xbf,0x8a,0x6c,0x12,0x74,0x33,0x90,0x91,0xe0,0x66, - 0x14,0x5a,0x0f,0xee,0xe4,0x31,0x93,0x48,0xda,0x9d, - 0x54,0x3b,0x4d,0x73,0xf5,0x8c,0x5b,0xd5,0x5c,0xa9, - 0x4d,0xe0,0xd6,0x11,0xa8,0xee,0xba,0x36,0xd9,0x63, - 0x7a,0xad,0x57,0xe9,0x20,0x68,0x46,0x04,0x66,0xab, - 0xa0,0xfa,0xbd,0x69,0x2a,0xe9,0xbb,0x24,0xe4,0x30, - 0xf0,0x0b,0x6a,0x08,0x12,0x35,0x54,0xc8,0xe5,0x2a, - 0x53,0x73,0x48,0x15,0x99,0xed,0x12,0x6a,0x76,0x0b, - 0x06,0x52,0x32,0x1a,0x84,0xff,0xec,0x44,0x93,0x20, - 0x48,0x76,0xc2,0xab,0x91,0xb0,0xad,0xdf,0x17,0x4d, - 0x85,0xe9,0x83,0xa2,0x8a,0x71,0x4a,0x8c,0xa4,0x6d, - 0x55,0xdb,0x62,0xed,0x5a,0x8a,0x4a,0xaa,0xea,0xb3, - 0x23,0x25,0x5f,0xc3,0x74,0xdf,0x2d,0x76,0x19,0x68, - 0x00,0x89,0xc8,0x5b,0x94,0x4c,0x5c,0x46,0x4d,0x3a, - 0xc4,0x1b,0x4c,0x1c,0x88,0x9c,0x1c,0x08,0xdf,0x95, - 0xd0,0x1c,0xb7,0xd7,0x74,0xf2,0x0a,0x28,0x19,0x95, - 0xf6,0xf7,0x16,0x01,0x77,0xfa,0x64,0x29,0xf6,0xb8, - 0x98,0x96,0x3c,0xe4,0x88,0xe2,0xd1,0x13,0xb7,0xad, - 0xd9,0x2f,0x75,0x54,0xe0,0xfb,0xa2,0xfb,0x80,0x9b, - 0xfe,0x4b,0xe7,0xdd,0x84,0xdc,0x6d,0xd1,0xb7,0x94, - 0x98,0xb8,0x16,0x6d,0xea,0x70,0x4c,0x28,0x53,0x12, - 0x3e,0x7d,0x2d,0x9c,0x70,0xd7,0xc6,0x88,0x2e,0x1b, - 0x4e,0x02,0x69,0x13,0xdf,0x27,0xf9,0x1f,0x0d,0x13, - 0x36,0x31,0x91,0x71,0x63,0xdc,0x4e,0xa4,0x2b,0xb1, - 0x63,0x5d,0xcf,0xd8,0x21,0x08,0x3d,0x1b,0xef,0xfc, - 0x94,0xe9,0xa5,0xba,0x6b,0xd7,0x16,0x8f,0x4b,0x20, - 0x68,0x63,0x2a,0xc7,0x68,0xc3,0xa7,0xea,0xc9,0x4d, - 0xaa,0x0e,0x12,0xe9,0x55,0x37,0xbf,0x3c,0xb7,0x07, - 0xca,0x43,0x10,0xb1,0x0b,0x62,0x37,0x2a,0x02,0xe6, - 0x9d,0x05,0x49,0x6e,0xe2,0xe0,0x60,0x92,0x16,0xa0, - 0xd7,0x0a,0xb6,0x0a,0x63,0xb5,0x9f,0xfc,0xe1,0xdc, - 0xa4,0x59,0x78,0xce,0x51,0xc3,0x25,0xa9,0xea,0x6e, - 0x50,0x51,0x80,0xb9,0xab,0x59,0x41,0x90,0xc0,0xde, - 0xd8,0x2e,0x9b,0x10,0x0f,0xd3,0x3e,0xab,0xef,0xf7, - 0xfe,0xd6,0xd6,0xa2,0x00,0xeb,0xb8,0x75,0x12,0x6f, - 0x4a,0xf9,0x60,0x93,0x4a,0xb4,0x5b,0xaf,0xe6,0x20, - 0xab,0xa9,0x4d,0xae,0xaf,0xce,0x4c,0xaf,0x56,0x52, - 0xc6,0x4f,0x36,0x09,0xe1,0x80,0x29,0x42,0x2f,0x5c, - 0x6b,0x90,0x44,0x6f,0x7b,0x1c,0x75,0xd5,0x3c,0xb5, - 0x3f,0x05,0x05,0x2f,0x42,0xb2,0xd3,0x94,0x71,0x8f, - 0x85,0xf0,0x7e,0x9d,0x4f,0x65,0x94,0x2d,0xa1,0xe9, - 0xa3,0x84,0xc4,0x6f,0x10,0x89,0x30,0xbd,0x67,0xbf, - 0xc3,0xb8,0x2d,0xb8,0x58,0x56,0xa6,0x98,0x4d,0x92, - 0x09,0x1f,0xb5,0x23,0xd3,0xfe,0x73,0x62,0x92,0xca, - 0xe9,0x13,0xe4,0x1a,0xc5,0x95,0x37,0xc8,0x4e,0xf0, - 0xb7,0x1b,0x87,0x1a,0x26,0x1a,0xc5,0xaf,0xd7,0xeb, - 0xf5,0xbf,0x55,0xd5,0x7f,0xbe,0xae,0xeb,0xbf,0x6f, - 0x13,0x08,0xb7,0xe0,0x27,0xef,0x22,0x5a,0x40,0x1b, - 0xef,0x2e,0x82,0x1d,0x15,0xce,0x9a,0xaa,0xbe,0xad, - 0xba,0xac,0x0b,0x02,0x2d,0xe0,0xd5,0x34,0x86,0xaa, - 0xfb,0x95,0x26,0x16,0x42,0x02,0x19,0x05,0x09,0xd5, - 0x9c,0x92,0x78,0x0c,0x94,0xd0,0x28,0xd7,0xc0,0x18, - 0xd4,0xd9,0xc0,0x43,0xef,0x91,0x64,0xc9,0x69,0x7d, - 0x0c,0x1b,0xb4,0xe0,0xfa,0x23,0x79,0x98,0xd6,0x4b, - 0xaa,0xea,0xa5,0xc5,0xb4,0x1a,0xa5,0x56,0xd1,0xca, - 0xfe,0xb3,0x93,0x16,0x8a,0xfc,0xfb,0xcf,0xb3,0x77, - 0xd5,0x1f,0x49,0xbf,0x3b,0xb2,0xba,0xe3,0x00,0x85, - 0x01,0x85,0xf1,0x5d,0x38,0x74,0x35,0xac,0x73,0x3c, - 0xe4,0xd2,0xbb,0x18,0x92,0x33,0xfb,0x3e,0xc5,0x47, - 0x2a,0x11,0xff,0x0f,0x05,0xbf,0x25,0xb1,0xff,0x24, - 0xbe,0x93,0xac,0xfb,0x33,0x71,0x55,0xee,0x9f,0x49, - 0x7e,0x61,0x57,0x9b,0x10,0x33,0xf1,0x33,0x4d,0x87, - 0x5d,0x6e,0x4a,0x8a,0xae,0xaf,0x7b,0x4f,0x42,0x35, - 0x7f,0xe0,0x7e,0x0f,0x3d,0x6b,0x40,0x23,0x0e,0xa0, - 0xd4,0x07,0x74,0x79,0x8e,0x39,0xa8,0xdd,0x7b,0x3c, - 0x40,0xda,0x3d,0x9b,0x7b,0xbc,0x9a,0x61,0x6c,0x4b, - 0x5e,0xed,0xcf,0x19,0xd7,0x80,0xb7,0xe7,0xd9,0xae, - 0xf7,0x98,0xf5,0xe8,0xde,0xc9,0x31,0xef,0xfe,0x98, - 0xbd,0xe3,0xee,0xd1,0x3f,0xf8,0xcb,0xbb,0x9c,0xcb, - 0x3d,0x1e,0xc3,0xd7,0x3a,0xa6,0xd5,0x7f,0x20,0xf6, - 0x3a,0x83,0xe0,0x63,0x80,0x07,0x9a,0x36,0xb4,0xbf, - 0x6f,0x8a,0xdd,0x03,0xe7,0xf3,0x81,0x38,0x7e,0xe0, - 0xcc,0x3f,0x70,0x36,0xf4,0x67,0xfd,0x9f,0xae,0xeb, - 0xfa,0x7f,0x5f,0x00,0xaf,0x91,0x9b,0xf5,0xca,0xa4, - 0x33,0x25,0x19,0x1b,0x71,0x22,0xaa,0xae,0x5d,0x3f, - 0xf6,0xcf,0x9f,0x3f,0x49,0x54,0xaf,0xa6,0xd1,0x38, - 0x97,0xe9,0x26,0xc3,0x57,0x25,0x78,0xba,0x83,0x4b, - 0xc9,0x9a,0x7a,0xe8,0x25,0x5e,0xce,0xa6,0x15,0xd8, - 0xab,0x27,0x53,0xd1,0x3e,0xa0,0xf7,0x09,0x8a,0x9d, - 0xde,0xa1,0x6b,0x71,0x01,0x5f,0xa4,0xd2,0xf7,0x10, - 0x34,0x3b,0xe9,0xfe,0x5c,0xe0,0x47,0x14,0x12,0x45, - 0xdb,0xfa,0xea,0xbe,0x43,0xf4,0xf9,0x4e,0x77,0xc3, - 0xad,0x93,0xaf,0xaf,0xaf,0xd2,0xf6,0xb0,0x08,0x69, - 0x56,0xa8,0x12,0xcb,0x25,0xa4,0xdb,0x96,0x41,0xe7, - 0x9b,0x90,0x4c,0xbe,0x90,0x27,0x4b,0x45,0x17,0x37, - 0x09,0x69,0x9f,0x88,0x52,0xae,0xd7,0x64,0x9a,0x3c, - 0xed,0xb1,0x54,0x94,0x24,0xc9,0xfc,0x89,0x9f,0xa2, - 0x02,0x8f,0xfa,0x8c,0x26,0x19,0x88,0x96,0x24,0xd6, - 0xa6,0x22,0x6d,0xad,0xbc,0x94,0xd8,0x97,0x22,0x95, - 0x6e,0x2a,0x95,0x8a,0x47,0x27,0xd6,0xe8,0x38,0x36, - 0x84,0xae,0xd3,0xde,0xd9,0x22,0xa4,0x83,0xaa,0x72, - 0x01,0x7a,0x5f,0x34,0x49,0x4c,0x09,0x30,0xb5,0x6a, - 0x9c,0x94,0x03,0x75,0x0f,0xa6,0xa2,0x17,0xe2,0xad, - 0x2b,0x34,0xca,0x78,0xa6,0x5d,0xc9,0x68,0x77,0x8a, - 0xa3,0x49,0x87,0x0a,0x84,0x0b,0x3f,0xf2,0xcb,0x9c, - 0x26,0x85,0xa5,0xfb,0x60,0xb9,0x4a,0x5a,0xc8,0x11, - 0x6f,0x10,0x12,0xee,0xda,0x58,0x5b,0x84,0xf7,0x65, - 0x87,0xa0,0x52,0xab,0x9b,0xd0,0xad,0x89,0x73,0xf8, - 0x66,0x86,0xea,0x3e,0x94,0x7a,0x92,0xd4,0x8f,0x24, - 0xa8,0x39,0x25,0x25,0xd3,0xc5,0x51,0xcb,0x21,0x5d, - 0x0f,0x8d,0xcd,0x12,0xfc,0x46,0x36,0x17,0x9b,0x2a, - 0x76,0x23,0x75,0xee,0x5e,0xb8,0x23,0x16,0xbb,0x83, - 0x8c,0x08,0x64,0xc9,0xd9,0x1a,0x9e,0xa9,0x33,0x8b, - 0x2b,0xe2,0xcc,0x24,0xff,0x27,0xda,0xe0,0x81,0x27, - 0x52,0x84,0x5e,0x99,0xc3,0x6d,0x3c,0xa0,0x5d,0x1b, - 0x95,0x0c,0xfe,0x26,0x18,0xdf,0xbd,0x4b,0x27,0x56, - 0x48,0xef,0x31,0x6d,0x8d,0xf0,0xfc,0x4a,0x27,0x05, - 0x4d,0x42,0x1c,0x05,0xf6,0xba,0x57,0xd7,0x54,0x70, - 0x7c,0x82,0xf8,0x28,0xd7,0xe5,0x32,0xc4,0x44,0x4a, - 0x82,0x92,0x29,0x62,0xd2,0xc8,0x21,0xe1,0xbe,0x54, - 0x40,0xb9,0x56,0xe9,0x42,0x91,0xb7,0x36,0xed,0x0c, - 0x27,0xca,0x4a,0x28,0xa0,0x26,0x08,0x2e,0xe6,0xa8, - 0x11,0xea,0x70,0x48,0x16,0xb5,0x21,0x5c,0x0b,0xc8, - 0xad,0x2b,0x2a,0x66,0xa9,0x7d,0x0c,0xad,0xc1,0x72, - 0x67,0x40,0x2f,0x20,0x1c,0xe7,0x66,0x52,0x49,0xee, - 0xd7,0x73,0x5f,0x3f,0xd1,0x01,0x36,0x16,0x4c,0xa9, - 0x40,0xfc,0x84,0xb8,0xde,0xdf,0x95,0x26,0x3d,0xe9, - 0xa0,0x1d,0x38,0x9c,0x2b,0xee,0x91,0x93,0x03,0x70, - 0x03,0x15,0xa6,0x35,0x4e,0xc6,0xb3,0x6f,0xef,0xe2, - 0x1b,0x20,0xc0,0x22,0xc0,0x25,0x5c,0x1f,0x8a,0x92, - 0x8e,0x88,0xbc,0xb1,0x0e,0xc2,0xf6,0x2d,0xbc,0xef, - 0x4a,0xd3,0x66,0x44,0xdd,0x01,0x2b,0x93,0x77,0xd4, - 0x8b,0x5e,0xb0,0x8e,0xdf,0x39,0x9e,0x80,0x3e,0xbc, - 0x24,0x89,0x3d,0xf9,0x95,0xb8,0x4d,0xfd,0x09,0x3a, - 0xb1,0x50,0x8a,0x5c,0xcb,0xfa,0x53,0x9f,0xd2,0xb5, - 0x82,0xba,0x71,0x2a,0xd9,0x5c,0xe8,0x01,0xec,0x14, - 0x88,0x53,0x22,0x71,0x19,0xc2,0x23,0xf5,0x7b,0xd3, - 0x81,0xbd,0x21,0xd9,0x25,0x9f,0x1e,0xdd,0xa0,0x14, - 0xbc,0xa9,0xf2,0xef,0x49,0x30,0x4d,0xba,0x19,0x4d, - 0x0e,0x4a,0x8a,0x2a,0xb5,0x12,0x35,0x41,0x22,0x2d, - 0x17,0x37,0xea,0x99,0x46,0xf6,0xf5,0xbb,0xd3,0x88, - 0xf0,0x44,0x5c,0xdd,0x1c,0x80,0xae,0x55,0x9c,0xda, - 0x4a,0x1d,0x81,0x22,0xe5,0x56,0x7a,0xd7,0x37,0xb7, - 0x86,0xd6,0xd2,0x14,0x00,0x53,0xc0,0xee,0xfb,0x75, - 0xfa,0x3d,0xf5,0x8f,0x4a,0xa3,0xeb,0x34,0xb5,0x49, - 0xc9,0xe7,0xb5,0xf4,0x39,0xea,0x93,0x4a,0xba,0xd6, - 0x88,0xbf,0xa7,0x09,0x02,0x14,0x43,0x76,0x0d,0x38, - 0x32,0xb2,0xea,0x8a,0xa5,0x09,0xd5,0xa1,0x68,0xa9, - 0x34,0x99,0xea,0x10,0x4c,0x87,0xf0,0xba,0x02,0x63, - 0x40,0xfe,0x0b,0x62,0x79,0x99,0x09,0xa3,0xa2,0x77, - 0xec,0x12,0x8e,0x89,0xbb,0x32,0x71,0xcc,0x28,0x7e, - 0xf5,0xe7,0x00,0xb2,0x1f,0xb5,0xd9,0x13,0x60,0x71, - 0x52,0x50,0xd0,0x6c,0x12,0x8b,0xa8,0x49,0x95,0x90, - 0x90,0xc5,0xc4,0xed,0x04,0x26,0xd4,0x24,0x85,0x90, - 0xf6,0xd2,0x65,0x86,0x5a,0xd2,0xba,0xdd,0xb6,0xd7, - 0x09,0x95,0x4d,0xed,0x74,0x3d,0xa7,0x7f,0xd3,0xc2, - 0xf8,0x84,0x48,0xe4,0x94,0x9c,0xef,0x43,0x72,0x93, - 0xf8,0x38,0x82,0x6e,0x70,0x2d,0x26,0xc8,0xda,0x26, - 0x2b,0x29,0x43,0xed,0xa6,0x69,0xa9,0x9a,0xdc,0x10, - 0xfa,0x88,0x90,0x9a,0x46,0xf1,0x3a,0x0a,0xe4,0xa6, - 0xc4,0xfa,0xa1,0x11,0x54,0xb2,0x1f,0xcf,0x3c,0xc1, - 0xc8,0x8e,0x9f,0xe4,0xb8,0x16,0xa9,0x2d,0xe8,0x90, - 0x09,0x58,0xbc,0x95,0x7c,0xd6,0x12,0x24,0x3f,0x04, - 0x32,0xfb,0x7c,0x9d,0x62,0xf7,0xfd,0x63,0x4d,0xa5, - 0xd9,0xa2,0x42,0xb2,0x86,0x1f,0xdc,0x1e,0x6a,0xf3, - 0x39,0x04,0x0b,0xc6,0x66,0xcb,0xc1,0xf6,0x49,0xb2, - 0xdd,0x1c,0x66,0x76,0x6d,0x68,0xd2,0xd0,0x2b,0x26, - 0x42,0x6c,0xdc,0x73,0xd3,0x3d,0x9c,0xb4,0x3d,0x54, - 0x21,0x56,0xa7,0x80,0x92,0xb2,0x7a,0xf2,0x67,0x9a, - 0x7e,0x97,0x78,0x02,0xd3,0x10,0x04,0xb5,0xf8,0xfb, - 0xe7,0x51,0x95,0x79,0xb7,0x3c,0x3b,0x8f,0xc0,0xc5, - 0x49,0x51,0x01,0x3f,0xa1,0x45,0x58,0x8e,0x23,0xd3, - 0x8b,0x1b,0xe5,0x72,0xa8,0x62,0x30,0x49,0x31,0xe8, - 0xf7,0x0a,0x42,0x72,0x5c,0x8b,0xd7,0x29,0x4c,0x27, - 0xc5,0x64,0x8d,0x8b,0xfa,0xf9,0x26,0x61,0x1f,0x39, - 0x59,0xfd,0x33,0xee,0xcf,0x55,0x95,0xe2,0xbe,0x0f, - 0x21,0x91,0xb3,0x6a,0xca,0xaa,0x5c,0xdd,0xef,0x99, - 0x92,0x00,0x8a,0x6d,0xee,0x1c,0x50,0x85,0xf2,0xa9, - 0xd8,0x48,0x67,0x0d,0x01,0x0a,0xa9,0xdd,0xbc,0xed, - 0x86,0x38,0x4d,0x21,0xa3,0xf4,0xfc,0x78,0x86,0xae, - 0xd3,0x91,0x78,0x7d,0x54,0x80,0x2c,0xc9,0xe3,0x05, - 0x7c,0x27,0x42,0xe8,0x0f,0x74,0x79,0x8e,0xb1,0x56, - 0x79,0x7c,0xf6,0x2b,0xb5,0x37,0x9c,0x37,0x4b,0x52, - 0xeb,0x4d,0x8b,0xa3,0x57,0x15,0x5a,0xe5,0x3b,0xd4, - 0x84,0xf8,0x38,0x44,0x62,0x4d,0x92,0xe4,0x74,0x70, - 0xa6,0xc5,0xef,0x16,0xc7,0x94,0x59,0x52,0xc5,0x3a, - 0x71,0x10,0x12,0x83,0x7d,0x5a,0x6c,0xa9,0x12,0x4c, - 0xad,0x0e,0x4a,0x40,0xb6,0xe3,0xf9,0xa1,0x0f,0x6c, - 0xbd,0xc7,0x9c,0x12,0x72,0x72,0x3f,0xd7,0xa4,0x61, - 0x93,0x88,0xbb,0x67,0xe6,0xda,0x06,0x84,0x54,0xd0, - 0x04,0x8a,0x6b,0x1b,0x12,0x3a,0x48,0x1c,0x10,0x5a, - 0x77,0xce,0xc6,0xc4,0x91,0x8f,0x49,0x15,0x55,0x85, - 0x16,0xa7,0x31,0x78,0xd3,0x52,0xa9,0xd4,0xe6,0x05, - 0xde,0x8b,0x1e,0xba,0xe5,0xb8,0x30,0xc3,0xb5,0x5e, - 0x49,0xf9,0x3c,0x04,0x7d,0x1d,0x9f,0xbf,0x52,0xb1, - 0x41,0x89,0x37,0x71,0x78,0x9c,0xbe,0xd4,0xe4,0x2d, - 0x44,0x08,0xe5,0x70,0x6d,0x05,0x28,0xd2,0xbd,0x06, - 0x2a,0x08,0xcd,0x15,0xb4,0x44,0xae,0x6b,0x70,0x2b, - 0x57,0x2e,0x08,0xd9,0x07,0x29,0xdf,0x86,0xee,0x6d, - 0xd3,0xb6,0x04,0x4a,0x45,0xa5,0x29,0xe2,0x24,0x00, - 0xa8,0x6e,0xf7,0x53,0x12,0xf3,0xc9,0x84,0x13,0x71, - 0x8e,0x12,0x2d,0x41,0x93,0xa3,0x24,0x7f,0x71,0x0d, - 0x62,0xb0,0xaa,0x2a,0xed,0xb4,0x83,0x26,0x37,0x75, - 0x68,0x87,0xba,0xe7,0x55,0x3a,0x61,0x4c,0xad,0x68, - 0x45,0x9f,0x48,0x95,0x5a,0x65,0x5e,0x12,0xad,0x45, - 0xcf,0x4c,0x75,0x51,0xa0,0x78,0x34,0xbd,0xb3,0x4f, - 0xa6,0x9d,0x5f,0xae,0x8a,0xd5,0x03,0x81,0xda,0x3f, - 0x5b,0x2b,0x09,0xb5,0xa7,0xdf,0x8c,0xe1,0x6d,0xcc, - 0xf0,0x08,0x81,0x71,0x0f,0xc2,0x21,0x28,0x3a,0x4e, - 0xa8,0x7d,0x59,0x07,0xd1,0x2e,0xda,0x7c,0xd8,0x3a, - 0x73,0x44,0x56,0x12,0x72,0x24,0x25,0xea,0xde,0x3a, - 0x23,0x04,0x41,0x13,0xce,0x04,0x89,0x4e,0x2d,0x0b, - 0x17,0x84,0x8c,0xf8,0x60,0x99,0x43,0x27,0xf2,0x47, - 0x1c,0x72,0x35,0xe9,0xba,0xd0,0x7d,0x3a,0x48,0x36, - 0x89,0x78,0xb9,0xa0,0xaf,0xe4,0xe5,0xa9,0xc2,0xa2, - 0xc4,0x7e,0x6a,0x0d,0xa5,0xd6,0x28,0x05,0x46,0x07, - 0x71,0xbb,0x71,0xea,0x4d,0x3f,0xbf,0x8b,0x01,0x4e, - 0xa4,0xe0,0x80,0xfc,0x59,0xb5,0xe8,0x54,0x35,0x4e, - 0xc1,0x29,0x91,0x9c,0xb5,0xb0,0x72,0x49,0x9c,0xa2, - 0x7f,0x09,0x5d,0x82,0x6b,0x7a,0xd3,0x26,0x4b,0x49, - 0x13,0xb5,0x32,0xf5,0x00,0x49,0xca,0xc8,0x69,0xf2, - 0xf5,0x16,0x54,0xbd,0x8c,0x97,0x5f,0x17,0xe5,0x74, - 0x89,0x05,0x8d,0xc0,0xeb,0x9a,0x77,0x63,0xd9,0x13, - 0x42,0x43,0x5a,0x6c,0x14,0x6f,0x6e,0x2d,0x9f,0x14, - 0x5b,0x5c,0xbb,0x9f,0xf6,0x6a,0x12,0x89,0x1d,0x68, - 0x1a,0x95,0x28,0x0e,0x7a,0xf6,0x4d,0x44,0xf9,0xcb, - 0x93,0xce,0x2b,0x29,0x22,0x53,0x6c,0x0a,0x1c,0xcd, - 0x9f,0x33,0x93,0xd0,0x9b,0x84,0x5a,0xb9,0xfd,0xe5, - 0x0c,0x50,0x69,0xea,0x73,0x81,0xd6,0xbd,0xbd,0x17, - 0xa2,0x72,0x0c,0x3a,0x82,0xb8,0x8f,0x74,0xdf,0xbb, - 0xd1,0xfb,0x29,0x36,0x4f,0x67,0xde,0x39,0xe7,0xb2, - 0x53,0x60,0xee,0x41,0x24,0x27,0xdf,0xd4,0xa3,0x75, - 0xee,0xb3,0x54,0x51,0x19,0x56,0xba,0x5e,0x4f,0x25, - 0x92,0xa7,0x23,0x6e,0x4f,0x7e,0x66,0x8e,0xa0,0xa5, - 0x15,0x99,0xfe,0xbb,0x1e,0xfc,0x94,0xb0,0x0d,0xea, - 0xb2,0x35,0x1d,0x72,0xee,0x77,0xa9,0xd7,0xa9,0xfa, - 0x21,0x01,0x19,0x71,0x4c,0xfb,0xd2,0x4d,0x42,0xa5, - 0x4b,0x82,0x68,0xa9,0x2f,0xdd,0x82,0x66,0x4d,0xdc, - 0x30,0xd2,0x60,0x1a,0x34,0x34,0x2a,0x6d,0x30,0xd3, - 0x3b,0x7f,0x54,0x29,0x6a,0x3d,0x32,0x25,0x2a,0xa9, - 0x6a,0x91,0xf6,0x42,0x25,0x3d,0x0d,0x5a,0xa7,0x3f, - 0x4a,0xa5,0x6d,0x3c,0x1f,0x5a,0x26,0xc8,0xf5,0x71, - 0x68,0x6d,0x17,0x8d,0xdc,0x78,0x3c,0xb5,0x3d,0x56, - 0x2a,0xf0,0x97,0xfa,0xf6,0x93,0x14,0xc6,0x80,0x12, - 0x46,0xeb,0x8d,0x41,0x12,0xe0,0x6d,0xfa,0x6b,0xdb, - 0x32,0x68,0xeb,0xbb,0x12,0x2a,0x29,0x68,0x72,0x25, - 0xbd,0x34,0x32,0x29,0x76,0xa4,0xfd,0x80,0x56,0xa0, - 0xa8,0x61,0x5f,0x5b,0xa6,0x10,0xa4,0xc4,0xba,0x48, - 0x17,0x2a,0x29,0x94,0x9b,0x2a,0x9b,0x08,0xdd,0x56, - 0xe1,0xd8,0xa1,0x28,0xa1,0x65,0x7d,0xa5,0x49,0xad, - 0x84,0xa2,0x11,0x6a,0x9c,0xba,0x0d,0x4e,0xd3,0x8d, - 0x5a,0x37,0x1b,0xee,0xca,0x16,0xb5,0x98,0xf6,0x90, - 0xfb,0x4e,0xda,0xe7,0x93,0x38,0x22,0xc5,0x68,0x1d, - 0xc8,0x09,0x22,0x85,0xd6,0x6a,0x88,0xce,0x1f,0x9a, - 0x68,0xdb,0xfa,0x06,0x26,0x85,0x7e,0x17,0xcb,0xdd, - 0x3f,0x34,0x8d,0xfd,0x46,0x21,0x48,0x30,0xe6,0xd4, - 0x8e,0xd9,0xaa,0x7b,0x92,0xe9,0x5c,0xfa,0xbd,0x85, - 0x42,0xf4,0x5b,0xd0,0x91,0xcf,0xae,0xc9,0xfd,0xdc, - 0x1d,0xc0,0xae,0x05,0xb2,0x69,0x71,0x85,0xcc,0x1e, - 0x51,0x08,0x87,0x60,0x51,0x5b,0x30,0x6d,0xa4,0x74, - 0xad,0xee,0xa0,0x73,0xc1,0x80,0xb8,0x39,0xcb,0x69, - 0x00,0x47,0x10,0xad,0x24,0x68,0xe8,0x5a,0x6f,0xda, - 0x3f,0x77,0x88,0x51,0xd7,0x60,0x72,0x3e,0x50,0xfd, - 0x3e,0x40,0x21,0x76,0xd4,0xa4,0x81,0x56,0x4c,0x25, - 0x37,0x70,0x42,0x31,0x93,0x8a,0xf2,0x05,0x6a,0xd7, - 0x9d,0x4b,0x92,0x82,0xa8,0xaa,0x56,0xbb,0xf5,0x26, - 0x68,0x81,0x95,0x28,0x18,0xaa,0xd5,0x37,0x02,0xf0, - 0xa6,0xed,0xb8,0x51,0x6d,0x25,0x54,0x36,0x0d,0x59, - 0x6c,0x5a,0xba,0x90,0x00,0x57,0x42,0x38,0xc3,0xbb, - 0x19,0x7d,0x09,0x7b,0x51,0x40,0x68,0xb4,0x2b,0xdc, - 0x26,0xd5,0x77,0x37,0x5c,0x12,0x0e,0x0e,0x9c,0xf0, - 0x09,0xe2,0xa5,0xe5,0xf6,0xbd,0x43,0x32,0x55,0xd0, - 0xd6,0x11,0xa2,0xa7,0x36,0x93,0xdb,0x43,0xfa,0x8c, - 0x08,0x31,0x74,0x71,0x24,0x55,0xf4,0x9a,0x88,0xea, - 0x9e,0xa6,0xe2,0x59,0xa5,0x45,0x16,0x45,0x5e,0x19, - 0x0b,0x23,0x44,0xe1,0xdd,0x00,0x87,0x5c,0x17,0xfa, - 0xb8,0xa9,0xb8,0xa6,0xe3,0xf0,0x29,0x65,0x23,0x01, - 0x13,0x8e,0xe6,0x40,0x1c,0xcb,0x44,0x11,0xd9,0x1a, - 0xa7,0xba,0x4e,0xcb,0x44,0x20,0x5f,0x78,0x9f,0x4d, - 0x36,0x3d,0x35,0xb5,0x2a,0xab,0xea,0xfa,0x4d,0x53, - 0x38,0x89,0x1c,0x4d,0xec,0xfc,0x81,0xa3,0x31,0x9a, - 0x8a,0x26,0xa2,0x69,0x0a,0xb6,0xcb,0xe4,0xa9,0x0c, - 0x47,0xa9,0xb4,0x1d,0xe5,0x50,0x0e,0xf2,0xc0,0x72, - 0xd7,0x4d,0xd9,0x78,0xaa,0x0a,0xe9,0x9e,0xb5,0x9a, - 0x51,0x14,0xc5,0xb5,0x6d,0x06,0x3e,0x87,0xf3,0xa3, - 0x72,0x6e,0xf5,0xd7,0xa4,0x4d,0x94,0x92,0x40,0xe0, - 0x72,0x54,0x5f,0x80,0x04,0xbf,0xf6,0x83,0x7d,0x33, - 0xb9,0xf7,0x7a,0xbd,0xca,0x1d,0xa4,0x54,0xc9,0x91, - 0xab,0x39,0x91,0x9b,0xd5,0xe5,0xbb,0x5f,0x2f,0x21, - 0x38,0xea,0x0d,0x66,0xb4,0xac,0x62,0xd2,0x04,0x2a, - 0xb6,0x0f,0xa5,0x5b,0xe2,0x14,0x39,0x8e,0x80,0x12, - 0xdb,0x87,0xc9,0x0f,0xd4,0x9c,0xe9,0x6b,0xbb,0xc7, - 0x09,0xaa,0x3e,0x9d,0x09,0xea,0x54,0x11,0xa6,0x82, - 0x67,0xe2,0x2b,0xe9,0x35,0xdf,0x7c,0x91,0x9e,0xa7, - 0x6e,0x2b,0xf5,0x72,0x0a,0x6e,0x90,0xc4,0x7f,0x7d, - 0x7d,0x9d,0xd4,0xc6,0xb8,0x1a,0x01,0xb3,0x07,0xe1, - 0xbe,0x87,0x5f,0xaf,0xd7,0x91,0x24,0xbe,0x07,0xce, - 0x43,0x6d,0x49,0x9a,0x3e,0xbd,0x1a,0x01,0x78,0x2a, - 0xa4,0xa6,0x82,0x67,0xa3,0x05,0xa3,0xd7,0xdb,0xdf, - 0xb7,0xdb,0x07,0x2d,0x66,0x1e,0x13,0xa7,0x4e,0x3a, - 0x87,0xa4,0x05,0x7a,0xcc,0xfa,0x3d,0x86,0xef,0x72, - 0x36,0x46,0xa0,0xd3,0x35,0x6a,0xb1,0x06,0xd6,0x48, - 0x71,0xb0,0x28,0x79,0x73,0x29,0xc9,0x77,0x02,0x16, - 0xdc,0xe1,0x7e,0x09,0xe9,0x9d,0x0a,0xf5,0xc9,0x8c, - 0x38,0x4d,0x63,0x86,0xb3,0xbf,0x2e,0x11,0x78,0xec, - 0xfb,0x5e,0xc9,0xec,0xe9,0xfb,0x69,0xbf,0x6f,0xb8, - 0xae,0x81,0xfa,0xf0,0xf3,0x87,0xaf,0x24,0x20,0x47, - 0x62,0x7d,0xc9,0x8b,0x23,0x55,0x20,0x01,0x06,0x46, - 0x8d,0x02,0x25,0xea,0x75,0x31,0x31,0xfa,0x1d,0x25, - 0x6a,0x39,0x84,0x65,0x91,0x85,0xc6,0xac,0x9b,0xe0, - 0x54,0xb3,0x09,0x56,0x56,0x08,0xd4,0x4a,0x33,0x09, - 0xcb,0xca,0x85,0xf7,0x0e,0xfa,0xce,0x78,0x95,0xaa, - 0x2e,0xd7,0x93,0xa6,0x6a,0xa9,0x67,0xb4,0x4e,0x42, - 0xde,0x71,0xc4,0x0c,0xba,0x52,0x8a,0x44,0x29,0x1f, - 0xa8,0x6b,0x5e,0xf4,0xde,0x70,0x92,0x6b,0xb8,0x98, - 0x80,0x5a,0x90,0xe8,0x55,0x82,0xbd,0x27,0xbe,0x83, - 0xe3,0x76,0x84,0xf5,0x1f,0xcd,0x67,0x83,0x08,0xe9, - 0x5b,0xeb,0x85,0xd6,0x92,0x24,0xb6,0x94,0xd4,0x5d, - 0x8e,0x57,0xd6,0x2d,0x21,0x92,0x3f,0x5e,0xe2,0x2b, - 0x69,0xf2,0xd8,0xf9,0x42,0xea,0x01,0x76,0xfb,0x90, - 0xf5,0x9f,0xb9,0xff,0xf7,0xbd,0x7e,0x4b,0xab,0xc1, - 0xc9,0xac,0x98,0xda,0x92,0x0e,0x15,0x72,0x22,0xa1, - 0xb7,0xda,0xb4,0xf2,0xa5,0xdc,0x1a,0xe8,0x2d,0x81, - 0xa4,0xcd,0xe4,0x0a,0x1f,0x68,0x5d,0x15,0xad,0xbd, - 0x94,0x6c,0x5f,0x99,0x58,0x4b,0xb1,0xdb,0x39,0x7d, - 0xdb,0xea,0xdf,0x71,0x30,0x88,0xc0,0x3f,0xb4,0xec, - 0x6b,0xb2,0x2c,0x48,0x64,0xee,0x89,0x9f,0xe7,0xee, - 0x53,0x69,0x11,0xce,0x3c,0x94,0x50,0xe5,0x14,0x5f, - 0x5d,0x02,0xaf,0x00,0x82,0x6b,0xf3,0x4e,0xc9,0x17, - 0x71,0x21,0x37,0x6d,0x35,0x9a,0x54,0x06,0xb2,0xbc, - 0x35,0xec,0xd5,0xef,0x22,0x53,0x51,0xd2,0xb6,0x22, - 0x0a,0xc4,0x56,0x9a,0x80,0xce,0x0c,0xa5,0x6f,0x7c, - 0xd2,0x62,0xa4,0x6b,0x7f,0xbd,0x5e,0x4f,0x12,0x34, - 0x05,0x3d,0x4d,0x3c,0xc2,0x83,0x2e,0xd7,0x83,0x4b, - 0xd0,0x59,0xaa,0xee,0x06,0x0f,0xa1,0x37,0x3b,0x01, - 0xa3,0x21,0x13,0x33,0xef,0x84,0x2e,0xb9,0xef,0xdb, - 0x98,0xb8,0xd1,0x14,0x5b,0x42,0x57,0x74,0x02,0xc4, - 0x21,0x29,0xa9,0x82,0x9b,0x16,0x84,0x0b,0xf4,0xfd, - 0xfd,0xa4,0x7b,0x70,0x55,0x18,0xad,0x99,0x3b,0x12, - 0x9b,0xc4,0xaa,0x1c,0xdf,0x8a,0x82,0x82,0x69,0x67, - 0xd1,0xf7,0x8d,0xee,0xd6,0x5b,0xe5,0x62,0x68,0x51, - 0x44,0xb1,0xae,0x64,0x5f,0x01,0xed,0xa0,0xda,0x20, - 0x9f,0x1a,0xd4,0x36,0xad,0x0d,0x52,0xf3,0x4d,0xae, - 0xd6,0xed,0x1d,0x97,0x4e,0x3e,0x4d,0x05,0x82,0x19, - 0xb3,0xad,0x66,0xc6,0x5a,0x0e,0xfa,0x27,0x65,0xf2, - 0x04,0xb3,0x3b,0x6e,0xcf,0x35,0xe8,0x67,0xa5,0xf7, - 0x2d,0xc9,0x7b,0x25,0x94,0x8d,0x8a,0x02,0x07,0xb9, - 0xab,0x1b,0xbc,0xe3,0x23,0x76,0x04,0x17,0xd4,0x79, - 0xad,0x27,0x61,0x4a,0x9e,0xd3,0xc4,0x66,0x52,0xde, - 0x75,0x6d,0x7f,0xe2,0x1d,0x05,0xa5,0xe6,0xf4,0x1e, - 0x47,0xc7,0x7b,0x87,0x4c,0x6f,0x29,0x15,0x2a,0xbf, - 0x40,0x89,0x9c,0x9b,0x3c,0x4b,0xed,0x9e,0x1e,0xc3, - 0xc8,0xbf,0x4a,0x5f,0x86,0x13,0xfa,0xa5,0x16,0x28, - 0x15,0x86,0x7a,0x7d,0x34,0x8d,0xe5,0xd6,0x1d,0xdd, - 0x5b,0x1a,0x64,0x48,0xbf,0xeb,0x62,0x55,0x98,0x6a, - 0x1b,0x2d,0x98,0xc8,0x56,0xca,0x75,0x3e,0x88,0xfb, - 0x93,0x5a,0xeb,0x30,0x31,0x67,0xe3,0x7a,0x4b,0x4c, - 0xff,0x91,0x56,0x98,0x78,0x17,0x69,0xe1,0x4e,0xb0, - 0x69,0x82,0x1b,0xdd,0x46,0xeb,0x84,0x2c,0x50,0xe6, - 0x8d,0xbc,0x8d,0xae,0x6e,0xaa,0xc1,0xf9,0x93,0x83, - 0x2a,0xf1,0x0b,0x5c,0x70,0x9c,0x34,0x7a,0xa4,0x3a, - 0x2d,0x4a,0x1e,0xfb,0xe7,0x77,0xab,0x05,0x77,0x20, - 0xb7,0x6c,0xbf,0xa8,0x85,0xa1,0xaa,0xaf,0x69,0xa2, - 0x8a,0x44,0xc6,0x34,0xf3,0x76,0xcf,0x67,0x33,0xd1, - 0x93,0xc4,0xd9,0x36,0xa2,0x62,0xc4,0x95,0xa2,0xf7, - 0x6a,0xde,0x65,0xc1,0x7a,0x2d,0xe0,0x4f,0xe0,0x74, - 0xd6,0x24,0x42,0xa9,0xc9,0x5e,0xd0,0xb4,0x79,0xf3, - 0x98,0x53,0x84,0xd3,0xb4,0x5c,0x2b,0xb5,0xae,0x1c, - 0xfa,0xd5,0x11,0x0d,0x43,0x94,0xb7,0x1c,0x9f,0x4d, - 0xf5,0xd9,0xb9,0x45,0xa4,0x50,0x9c,0x08,0xcc,0x54, - 0xb1,0xeb,0x44,0x15,0x21,0x5c,0x97,0xd8,0x7b,0x4c, - 0x15,0x66,0xd0,0xe3,0xb2,0x88,0x1a,0xf9,0xdc,0x39, - 0x55,0xdd,0x44,0x1c,0x86,0x7b,0x2d,0x3a,0x14,0x54, - 0x99,0xde,0x24,0xe8,0x35,0x1c,0x06,0x2e,0x36,0x17, - 0xa0,0x2e,0x35,0x29,0xe8,0x4e,0x42,0x9e,0x8e,0xe4, - 0x9c,0x54,0xd3,0x1d,0xa2,0xe7,0x54,0x97,0x43,0x82, - 0xeb,0x2c,0x36,0x30,0x3e,0x51,0xd1,0x4e,0x5c,0xcb, - 0x74,0xf6,0xb9,0xe2,0x3a,0x09,0x8d,0x0e,0x7c,0xd8, - 0xc8,0xf1,0x73,0xf2,0x24,0xee,0x3c,0x1b,0x26,0x79, - 0x1d,0xe2,0x56,0x7a,0x76,0x91,0xd2,0xf9,0xe4,0xba, - 0xee,0x9e,0x19,0x4c,0x25,0x46,0x13,0x54,0xe2,0xcb, - 0x4e,0x1d,0x27,0x4d,0x96,0x14,0xbd,0xbd,0xd7,0x4a, - 0x4a,0x1e,0x5f,0xdd,0x4c,0xcf,0x41,0x62,0xe1,0x01, - 0xd7,0xa6,0x27,0x39,0xb5,0xc3,0xf4,0x3b,0xee,0x83, - 0x60,0x12,0x64,0xdc,0x78,0xc1,0x6c,0x38,0x42,0x1a, - 0xe0,0x0c,0x71,0xb8,0xa6,0x40,0xe0,0x02,0x93,0xe3, - 0x18,0x6d,0x89,0x8c,0xd4,0xca,0x4b,0x9b,0x2b,0x29, - 0x61,0x6a,0xdf,0x7a,0x23,0x2d,0x30,0xa9,0x7b,0x83, - 0x3e,0x46,0x4d,0x09,0x09,0x05,0x69,0x32,0x81,0x25, - 0x7e,0x83,0xb3,0xd8,0x08,0x6d,0xa1,0x82,0x24,0x97, - 0x04,0x21,0x91,0xa3,0x43,0xb6,0x29,0xfa,0x7b,0x46, - 0x50,0x10,0x35,0x84,0xfa,0xb3,0xd4,0xc4,0xa9,0x8b, - 0xf0,0xb9,0xff,0x39,0x4d,0x9f,0x44,0xf4,0x55,0xbd, - 0xa0,0x0f,0xe1,0xe4,0x88,0xc2,0x7c,0x42,0x96,0x26, - 0x84,0x8e,0x82,0x95,0xdb,0xeb,0xd2,0x9e,0x89,0xda, - 0x40,0x0b,0x98,0xfc,0xed,0xf9,0xf5,0x11,0x64,0x47, - 0xb0,0x5c,0x88,0xd4,0x95,0x72,0x33,0x34,0x38,0x13, - 0xec,0xef,0x46,0xe4,0x13,0xf9,0xd8,0x4d,0x6e,0x9a, - 0xa4,0x9b,0xa6,0x2a,0x0b,0x0e,0x95,0x72,0x88,0x60, - 0x47,0x78,0x41,0x59,0x1d,0x51,0xa0,0x8d,0x2c,0x86, - 0x72,0x6f,0xd2,0xf9,0xd2,0x9f,0xe9,0xe4,0x19,0x69, - 0xcc,0x40,0xc7,0x62,0x37,0xb5,0xa8,0x1c,0x42,0xe1, - 0x92,0x09,0xf2,0xe2,0xfa,0x04,0x55,0xa3,0xbd,0x93, - 0x26,0x86,0x87,0xd6,0xf4,0x83,0x9b,0x43,0x7b,0x64, - 0xb2,0xc8,0xd8,0x68,0xa6,0x25,0xfd,0xbe,0xc0,0x39, - 0xaa,0x2d,0x27,0x75,0xc1,0xe5,0xd3,0x77,0xff,0xb3, - 0xd7,0x5f,0x6a,0xfe,0x97,0x0e,0xf1,0xb4,0xf0,0xd2, - 0xc3,0x56,0xa7,0x6d,0xfd,0x79,0x32,0xec,0xec,0xc1, - 0x24,0x29,0x91,0x12,0x27,0xc1,0x3d,0xa8,0x69,0x3a, - 0x69,0x9a,0x62,0xd3,0xeb,0x9e,0x2c,0x38,0x88,0xf7, - 0x34,0x55,0x3c,0x00,0xaf,0xe3,0x67,0xa7,0x3e,0xf7, - 0x96,0xbc,0x78,0x05,0x5d,0x17,0x33,0xf1,0xb0,0xb2, - 0x48,0x48,0x5c,0x08,0x52,0x2b,0x76,0x55,0x4c,0x22, - 0xa6,0x37,0xb8,0xda,0x06,0x5c,0xd7,0x8b,0x77,0x2d, - 0xb7,0xbe,0x0e,0x93,0x7f,0xcd,0x64,0x5e,0x4a,0x23, - 0xbc,0xd4,0x01,0xa3,0xa4,0xbc,0x27,0xc7,0xce,0x44, - 0xb3,0x13,0x6c,0xa9,0x25,0x46,0x88,0x4f,0x4a,0x78, - 0xdc,0x14,0x1c,0x71,0x43,0x36,0x31,0x60,0xf3,0x67, - 0x93,0xc7,0x57,0x42,0x55,0x1d,0x62,0x48,0x09,0xda, - 0x22,0x21,0xaa,0x34,0xf1,0xf9,0x06,0x05,0x99,0xf5, - 0xab,0x3c,0x2c,0x9a,0xf0,0xd4,0x76,0x97,0x16,0x2b, - 0x13,0xb2,0x1e,0x12,0xc7,0x9a,0xc8,0xae,0x1b,0xdf, - 0x36,0x42,0xdf,0x5d,0x2b,0xaa,0x23,0xef,0x90,0x70, - 0xdb,0x42,0x49,0xa6,0x50,0x6b,0x4a,0xa4,0x5d,0xcb, - 0xc6,0x0d,0x73,0x28,0xba,0xab,0x09,0x9c,0x43,0xa5, - 0xf4,0x9a,0xbb,0xd0,0x62,0x4a,0xe8,0x9c,0x9e,0x16, - 0xe9,0xb9,0x51,0xc2,0x92,0xba,0x0c,0x9b,0x0e,0x48, - 0x6a,0x7b,0x6e,0xe2,0xb1,0x6b,0xc9,0xd2,0xbb,0x48, - 0x34,0x08,0xc7,0x31,0x9a,0x92,0x95,0x89,0x3a,0xb2, - 0x6d,0xe5,0x4e,0xcf,0x83,0x92,0xe1,0xdf,0x1b,0xf2, - 0x90,0x0b,0xa6,0xc9,0x01,0x77,0x2b,0x4b,0x9f,0x20, - 0xd7,0xcd,0x64,0x17,0x4d,0xa7,0x84,0x44,0xea,0xc1, - 0x42,0x27,0x5e,0xc3,0x14,0x18,0x74,0xd2,0x64,0xd2, - 0x3d,0xd9,0xb4,0x14,0x9a,0x5d,0x43,0x91,0xa1,0xa9, - 0xfb,0x33,0x17,0x98,0x15,0x7d,0x20,0x3e,0xc1,0x02, - 0x01,0x28,0x27,0xd8,0xf8,0xeb,0xd7,0x2f,0xdd,0x28, - 0x28,0x7c,0xb8,0xe1,0xdd,0xb8,0x71,0x62,0x07,0x5f, - 0xa7,0x31,0xcd,0x34,0x99,0x91,0xa6,0x8e,0xa6,0x0a, - 0x88,0x90,0x33,0x6a,0x43,0xa6,0xf6,0xa1,0x4b,0xe0, - 0xc2,0xba,0x7b,0x8c,0xcb,0x26,0x48,0x3b,0xf9,0x83, - 0xd1,0x34,0x1b,0x25,0x20,0x4e,0xd4,0xd3,0x79,0xee, - 0x4d,0x87,0x24,0x8d,0x24,0x2f,0xda,0x6b,0x58,0x35, - 0x92,0x66,0x8e,0x89,0x19,0xf7,0xf5,0x9f,0x84,0x1a, - 0x93,0xa5,0x82,0x3b,0x44,0xd4,0x16,0x45,0x2d,0x2b, - 0x9c,0x39,0x6f,0x55,0x9d,0x8e,0xd6,0x48,0x7b,0xff, - 0x67,0x62,0x26,0x59,0x3b,0x98,0xc2,0xcd,0x7e,0xf7, - 0x90,0x90,0x3e,0xac,0x00,0xdc,0x64,0x8c,0x4e,0x58, - 0x39,0xbe,0x0d,0x9d,0x01,0x90,0xe0,0x9f,0x44,0x5d, - 0xa0,0x51,0xf6,0x16,0x0b,0x8f,0xbe,0x77,0xda,0xa7, - 0xe4,0x1a,0xe0,0xda,0x61,0x89,0xfe,0xe1,0x12,0x72, - 0xf5,0x15,0x74,0xe8,0x64,0x3a,0x0b,0x61,0x1a,0x54, - 0xd7,0x59,0x9d,0x7f,0xfe,0xd1,0x98,0x7e,0x0c,0x72, - 0x77,0x12,0x7a,0xe4,0x26,0xe2,0x68,0xb8,0x06,0xce, - 0x42,0x37,0x49,0xf6,0x98,0xda,0xd3,0x29,0x45,0xda, - 0xaf,0xa1,0xe8,0xb7,0x76,0x2c,0x84,0x96,0xdf,0x1d, - 0xab,0x4d,0x32,0xe9,0x62,0x43,0xff,0xd9,0xd7,0x84, - 0x46,0x50,0x4f,0x0f,0x84,0x93,0x8a,0xda,0x2b,0x0e, - 0x46,0x0e,0x6d,0x86,0xe8,0xbe,0xab,0xba,0x02,0x69, - 0xc4,0xf9,0x62,0x41,0xb0,0x28,0xb6,0xa6,0x24,0x6b, - 0xcd,0x8a,0x25,0x20,0xd9,0x36,0x99,0x13,0xbe,0xa3, - 0xa9,0x20,0xda,0xc0,0x93,0x06,0x43,0x22,0xca,0x4d, - 0x8b,0x83,0xd8,0xf6,0x53,0x6f,0x3a,0xe9,0x76,0xb8, - 0xea,0x88,0x84,0xdf,0x48,0xa4,0xac,0xa1,0x7b,0x95, - 0x50,0x31,0x57,0x9d,0x51,0x2b,0x01,0x36,0xd2,0x65, - 0x08,0xab,0x04,0xbb,0x17,0x8d,0xfa,0x3b,0x21,0x3a, - 0x25,0xbc,0x92,0x28,0x61,0xe2,0x3d,0xa5,0x36,0x92, - 0x72,0x1f,0xa8,0x72,0xee,0xad,0xb1,0xa9,0x82,0x72, - 0xdc,0x9a,0x09,0x42,0xdf,0x22,0x41,0xd2,0x42,0x2c, - 0x37,0x21,0x46,0x88,0xc8,0xc6,0x06,0x86,0xa0,0x7a, - 0x75,0xb7,0x9f,0x0c,0x74,0xcd,0x73,0x88,0x15,0xb0, - 0x4e,0xaa,0xc1,0xb3,0xf8,0x69,0xad,0x7f,0x2b,0x3c, - 0xa3,0xe5,0x8c,0xd9,0xdf,0x15,0x5a,0x12,0xa4,0xd7, - 0x52,0xc1,0x76,0xa4,0x88,0xb3,0xa1,0x93,0x81,0x2e, - 0xf6,0x51,0x1c,0x73,0x36,0x37,0x74,0x30,0xab,0xf2, - 0x36,0xc5,0xd1,0xe4,0x45,0x98,0x6c,0x2f,0xb4,0x2d, - 0x95,0x0e,0x46,0xb7,0xef,0x93,0xc4,0x00,0x4d,0x18, - 0x6f,0xba,0x09,0x1b,0x6d,0x3b,0x12,0x3d,0x4c,0xc3, - 0x43,0xae,0x18,0x4a,0xc5,0xbd,0x4e,0x87,0xa6,0xf3, - 0xd8,0x0d,0xc2,0xb8,0x44,0x67,0x73,0x76,0x38,0xa1, - 0xca,0x94,0x7b,0x6c,0xcc,0x51,0x27,0xf9,0x8c,0xa4, - 0xe7,0x57,0x55,0xd7,0x6f,0xd5,0x64,0x49,0x48,0xc7, - 0x14,0x8c,0x14,0x59,0x21,0x21,0x45,0xad,0x26,0x9b, - 0x12,0x65,0x91,0x4e,0xc0,0x56,0xd1,0x53,0x1f,0x60, - 0x57,0xb9,0x54,0x3e,0x06,0xf5,0xd5,0x1d,0xba,0xe3, - 0x04,0xbd,0x3e,0xe1,0x4f,0x4c,0x50,0xa6,0xeb,0x5d, - 0xf7,0x2a,0x63,0xe1,0xe5,0x85,0x48,0xd8,0x94,0x14, - 0x2e,0xb8,0x51,0x57,0xaa,0xe0,0xdc,0x3d,0x88,0x26, - 0x05,0xa2,0x2d,0xca,0x43,0x98,0xda,0x32,0x00,0x43, - 0x93,0x08,0x1a,0x8d,0xdd,0xd2,0xa4,0x62,0x05,0x41, - 0x40,0x7a,0x2e,0x35,0xa1,0x1f,0x53,0x9f,0xde,0xc9, - 0xea,0xbb,0xc9,0x40,0x59,0x0f,0xd1,0x15,0x9e,0x0e, - 0x48,0x72,0x92,0xbe,0xff,0x73,0x30,0xac,0x5d,0x0f, - 0x48,0x5c,0x5e,0x60,0x6d,0xac,0x9e,0x01,0xad,0xfc, - 0xf9,0xaa,0xc9,0xf9,0x7a,0xb2,0x49,0x68,0x87,0xf4, - 0x03,0xd9,0xe0,0xa5,0x5e,0x27,0x1d,0x00,0xad,0x58, - 0x3a,0x01,0xa1,0x76,0xa6,0x9c,0x16,0x29,0x01,0x21, - 0xce,0x43,0xfb,0x08,0x0e,0x0d,0x57,0xa9,0x27,0xae, - 0x95,0xd5,0x3c,0xba,0xff,0xdc,0xec,0xe7,0x87,0xae, - 0xce,0x84,0xaa,0x52,0x2b,0x6e,0xab,0xe9,0xe4,0x7e, - 0x4f,0x28,0x10,0x0e,0xc9,0xfa,0x41,0x27,0x84,0x33, - 0x76,0x28,0xd1,0xbe,0xd1,0xa7,0x6f,0xf5,0xe3,0x07, - 0xf2,0xe2,0x74,0x8b,0xf4,0xf3,0xbe,0x65,0x1c,0xce, - 0xd4,0xfe,0x99,0xb8,0x3c,0xe4,0xbd,0xd5,0xcf,0xb7, - 0xa5,0xe1,0x38,0x26,0x13,0xae,0x23,0x32,0x99,0x19, - 0x27,0x44,0x4e,0x0d,0x9a,0x37,0x0a,0xd7,0x81,0x2a, - 0x11,0x91,0x58,0x49,0x60,0xcf,0x26,0xe1,0x7c,0x8b, - 0x87,0xa9,0x8f,0x47,0xca,0x9a,0x13,0xca,0x33,0xf5, - 0xf9,0x1d,0x94,0xbe,0x49,0x22,0xe8,0x90,0x77,0x49, - 0x56,0x3a,0x74,0x27,0xee,0x8a,0x12,0xe5,0xa8,0x0a, - 0x4f,0x44,0xb6,0x34,0x52,0x3c,0x4d,0xdd,0x50,0x82, - 0x40,0xf0,0x12,0xb1,0xec,0xf5,0x10,0x1c,0x24,0x08, - 0x62,0x55,0xa0,0x3f,0x47,0xd6,0x12,0xf4,0x8c,0x93, - 0x7e,0x11,0x20,0x8f,0xb5,0x71,0xa4,0xee,0x68,0x4e, - 0x52,0x27,0x4d,0x95,0xe9,0x44,0x4c,0xa4,0x36,0xad, - 0x7b,0x16,0x7d,0xaa,0x2b,0xf0,0xcd,0x70,0x80,0x20, - 0x11,0xdf,0xb5,0xd2,0xee,0xc9,0x84,0x43,0xb8,0xa6, - 0x84,0x55,0xae,0xa7,0xa8,0xfa,0xd5,0x75,0x3d,0xa8, - 0x27,0x57,0x48,0x3c,0x2d,0xe7,0xcf,0x1d,0x84,0x49, - 0xc3,0xa7,0x7f,0xc1,0x76,0x6f,0x53,0x22,0x34,0x91, - 0x32,0x13,0x1a,0x97,0xf6,0x1f,0x89,0x6d,0x26,0x41, - 0xc1,0x0d,0xe2,0x66,0x90,0x9d,0xa2,0xbf,0x9b,0x7c, - 0xc4,0x5c,0x4c,0x51,0xff,0xc4,0x30,0xb2,0x4d,0x87, - 0x72,0x81,0x58,0xe1,0x78,0x36,0x4c,0xe3,0xeb,0x8e, - 0x47,0x34,0xb5,0xc0,0x36,0xb4,0x08,0x2a,0xf8,0xa7, - 0xf6,0x3d,0x91,0x7b,0x29,0x01,0x04,0xed,0x30,0x44, - 0x5e,0x92,0x8c,0x07,0x51,0x04,0x36,0x32,0x2f,0x13, - 0x05,0x20,0x91,0xa9,0x07,0xb4,0x39,0xc6,0xa0,0x34, - 0xc4,0x44,0xd7,0x99,0xf6,0xb1,0x5e,0x9f,0x4a,0x17, - 0xa4,0x69,0xef,0x87,0x19,0xea,0x74,0xf3,0x2a,0xd8, - 0xe5,0x12,0x06,0x0a,0x8c,0xe9,0xc5,0x24,0xd8,0x91, - 0xb8,0x25,0x14,0x90,0xa9,0x6d,0xe7,0x3e,0x7f,0x18, - 0xa5,0x1e,0x37,0x0b,0x2d,0x38,0x07,0x91,0xba,0xdf, - 0xbb,0x45,0xff,0x26,0x18,0x73,0x23,0x3e,0xf9,0x37, - 0x68,0x54,0xf2,0x98,0x21,0xb4,0x2e,0x21,0x50,0x66, - 0x3a,0xa9,0xd4,0x3b,0x4d,0x61,0xe6,0xd4,0xe6,0x4c, - 0x89,0xc3,0xf2,0xf0,0x20,0xf1,0xca,0x82,0x11,0xd8, - 0x02,0xc8,0x9b,0xda,0x13,0x0f,0x33,0xd5,0x44,0x6e, - 0xd5,0xdf,0x03,0x21,0xb5,0x87,0x05,0x83,0x91,0xb5, - 0xaf,0xc4,0x39,0xd0,0x04,0x4b,0x93,0x71,0x33,0x3e, - 0x8c,0x87,0x13,0xb5,0xbf,0x7b,0x32,0x42,0x63,0xe4, - 0x13,0x62,0x38,0x69,0x4a,0x11,0x29,0x5a,0x12,0xd7, - 0x9e,0x0c,0xd5,0x56,0x84,0x55,0xd0,0xa6,0x72,0xe8, - 0x31,0x68,0x38,0x15,0x1d,0x1e,0xda,0x7e,0xd2,0xf8, - 0xe2,0xf8,0x62,0xa6,0x38,0x88,0x44,0xfa,0x3e,0x4d, - 0x96,0x6c,0x26,0x44,0x7d,0x1a,0x5b,0x85,0xae,0x75, - 0x14,0x78,0x24,0x57,0x2a,0xc2,0x5c,0x01,0x3a,0x49, - 0x1f,0x5c,0xe0,0x03,0x39,0x89,0x25,0xea,0x01,0x98, - 0x48,0xbb,0x5a,0xa0,0xb9,0x7d,0xe9,0x90,0xec,0xa4, - 0x59,0xe6,0xf6,0x94,0x4b,0xf2,0xb7,0xbc,0x14,0x97, - 0x48,0x6b,0x4c,0xbc,0x27,0x41,0x1d,0xca,0xea,0x92, - 0x0e,0x3a,0x73,0xa4,0x15,0xfd,0x98,0xfc,0x9b,0x10, - 0xf8,0x4e,0x4d,0xd0,0x73,0xba,0x9f,0x7d,0xb4,0x9f, - 0xd2,0x5a,0x48,0xb1,0xdf,0x51,0x4e,0x68,0xdd,0xb8, - 0x35,0x42,0xe7,0xd7,0x8b,0xa0,0x35,0x37,0x8a,0x99, - 0x0e,0xd0,0x41,0xfb,0xc1,0xc1,0xaa,0x96,0xf7,0xd1, - 0x13,0x18,0x72,0x93,0x75,0x36,0x00,0x2e,0x38,0xa5, - 0x6a,0x4c,0xa1,0xb6,0x34,0xee,0xe7,0x14,0x95,0xb5, - 0x6a,0x22,0x28,0xb8,0xdd,0x4f,0x0c,0x16,0x93,0xba, - 0x6d,0x1a,0x61,0xa7,0x7b,0x75,0x7a,0x0e,0xa4,0xec, - 0xe9,0x78,0x04,0xa9,0xfa,0x74,0x2d,0x48,0x98,0x3c, - 0x9a,0xaa,0x8c,0x95,0xc0,0x18,0x1d,0xd2,0x4e,0x04, - 0xcb,0x11,0x76,0x27,0x2e,0x11,0xa1,0x94,0x1f,0xde, - 0x8b,0x1d,0xdf,0x74,0xd2,0x11,0x7d,0x7d,0xd3,0xfa, - 0x71,0x07,0x91,0xab,0xee,0x1d,0x6f,0x85,0x12,0xd4, - 0xbe,0xe6,0x37,0xda,0x27,0x26,0xf9,0xaa,0xee,0x25, - 0x35,0x09,0x8f,0x4d,0x55,0x9d,0x8a,0x71,0x26,0xc4, - 0x2d,0x71,0x05,0xd5,0xc3,0xeb,0x13,0x44,0xd9,0xf1, - 0x12,0x82,0x01,0x66,0x25,0x94,0x46,0xb9,0x83,0xa9, - 0x7d,0x01,0x89,0x9a,0x75,0x3e,0xef,0x86,0x94,0xd4, - 0x3a,0xd9,0xec,0x0f,0x1d,0x99,0x4f,0xad,0x08,0x98, - 0x84,0xb4,0xff,0x2d,0xeb,0xd8,0x09,0x29,0x5a,0x89, - 0x08,0x42,0x29,0x1c,0xb2,0x04,0x3c,0xad,0xcd,0xcf, - 0xb9,0x04,0xaa,0x4c,0x22,0x5b,0x60,0x04,0x8c,0xc5, - 0xdd,0x80,0xb4,0xd4,0x84,0x76,0x2c,0xf6,0x29,0x9e, - 0x61,0x32,0xb0,0x30,0xf2,0x9b,0x16,0x82,0x88,0xee, - 0x5a,0x6a,0x2a,0x98,0xb7,0x45,0xc7,0x84,0x2e,0x91, - 0xdc,0xc5,0x86,0x13,0x48,0x0a,0xf0,0x93,0x3f,0xe7, - 0xcb,0x4d,0xb6,0x24,0x41,0xc4,0x80,0x8c,0x44,0x5d, - 0x90,0x49,0x08,0xce,0xb8,0xbc,0xe2,0x82,0xd0,0xfe, - 0x6f,0xe8,0x53,0xba,0x6c,0xb8,0x54,0x34,0x09,0x12, - 0xb1,0x22,0x5e,0x03,0xf5,0xd4,0x53,0x06,0x3f,0x09, - 0x66,0x4d,0x8b,0x89,0x12,0x0d,0x7a,0x2f,0x5d,0xff, - 0xc6,0x69,0x6b,0x38,0x25,0x4d,0xc7,0x89,0x70,0x24, - 0x73,0x92,0xe8,0x17,0x24,0x23,0xf2,0x79,0x52,0xdb, - 0x83,0x04,0x0b,0x13,0xfc,0xac,0x9f,0x0d,0x6d,0x2d, - 0x3a,0x09,0x0b,0x90,0x86,0x4a,0x07,0xe2,0x86,0x13, - 0x95,0xaa,0x58,0xb2,0xcf,0x80,0xe0,0x58,0x43,0x3f, - 0xdf,0x16,0x2b,0xea,0xe0,0xdc,0x13,0x98,0x29,0x48, - 0x88,0xd4,0x43,0xa5,0xc3,0xbc,0x73,0x96,0x36,0x42, - 0x7d,0x04,0x9b,0x3b,0x49,0x82,0xf4,0xec,0x03,0xc7, - 0xab,0x3e,0x49,0xc6,0xd3,0xe8,0x3c,0xc5,0x10,0x97, - 0x00,0xa8,0xb6,0x97,0x5b,0xf3,0xba,0xae,0x1c,0xf1, - 0xd9,0x51,0x0d,0x12,0xe7,0xc9,0x55,0xfe,0xca,0x21, - 0xec,0xd7,0x48,0xfc,0xa7,0x44,0xac,0x76,0xc9,0x2b, - 0x25,0xb0,0x84,0x8e,0x6e,0x92,0xa9,0x8e,0xca,0x6d, - 0xda,0x83,0x69,0x58,0x86,0x62,0xcc,0xa7,0x45,0x51, - 0x12,0xcc,0xd5,0xf1,0xfa,0x69,0x78,0x87,0xe2,0x43, - 0x42,0x8c,0xa8,0x10,0xd8,0x8a,0x7e,0x52,0xd1,0xdd, - 0xcf,0xfc,0x49,0xfa,0x24,0x75,0x00,0x74,0x4d,0xb8, - 0x3d,0xdb,0x75,0x78,0x34,0xc7,0xd0,0x62,0x3d,0xb5, - 0x14,0x27,0x54,0x29,0x15,0xf9,0x1d,0x3d,0xbe,0xae, - 0xeb,0x9f,0x31,0xf8,0x3b,0x20,0x4e,0x5e,0x1d,0x29, - 0x73,0x9d,0x7a,0x7b,0x34,0x4e,0x4f,0x3d,0x4f,0xfa, - 0x6c,0xb7,0x08,0x53,0xa5,0xbe,0x19,0xf5,0x26,0x55, - 0x4c,0x25,0xfe,0x6d,0x7c,0xbb,0xe8,0xe5,0x24,0x02, - 0x9c,0x43,0xb1,0x5a,0x6b,0xaf,0x12,0x93,0xde,0x79, - 0x48,0xa5,0x56,0x19,0x8d,0x28,0x12,0x89,0x71,0xd3, - 0xb7,0x4d,0x81,0x9a,0x5a,0x46,0x21,0x41,0xb5,0x3c, - 0x06,0x48,0x8c,0xe8,0x9e,0xb1,0xda,0xa4,0xaa,0x2f, - 0x25,0x5c,0xc6,0x96,0xa3,0x3a,0x3f,0x22,0xf1,0x6e, - 0x26,0xfe,0x87,0x56,0xe3,0x8e,0xd3,0xa3,0x88,0x69, - 0x6a,0x79,0x25,0x3e,0x8c,0x4a,0x0d,0x84,0xd1,0x6d, - 0xfb,0xb9,0xd3,0xba,0x70,0x45,0xc8,0xd4,0x42,0x4e, - 0x15,0x9d,0xdb,0xcb,0x9f,0x70,0x67,0xda,0xfa,0x38, - 0x53,0xdb,0x2d,0x8d,0x8a,0xc3,0x35,0xbe,0x11,0x34, - 0x03,0x11,0xfc,0x40,0x0c,0x2d,0x77,0x5d,0x8b,0x29, - 0x3b,0x1c,0xbd,0xd7,0x11,0x61,0x31,0x4b,0x3e,0xce, - 0x44,0xf9,0x1e,0xd1,0x37,0x88,0xd8,0xa1,0x43,0xdf, - 0x14,0x99,0x67,0x3a,0x2b,0xda,0x3a,0x3f,0x9a,0xb8, - 0xb9,0xef,0x72,0xb2,0x2b,0xc0,0xbb,0x71,0xa4,0xe4, - 0x88,0xe6,0xf6,0xe7,0xd5,0xb9,0xdf,0x34,0xf8,0x32, - 0x0c,0x1a,0x4c,0xe8,0xe2,0x46,0x6d,0xba,0xce,0x39, - 0x47,0x86,0x7f,0xec,0xf8,0x3a,0xbd,0x0f,0xfa,0x8e, - 0xa4,0xd7,0x97,0xdc,0x1d,0xb6,0x1a,0x52,0x8b,0xee, - 0xcf,0xcf,0x03,0x26,0x52,0xf4,0x30,0x7c,0xf3,0x18, - 0x0e,0x08,0xef,0xd9,0xae,0xc5,0xf0,0xfe,0xdf,0xbd, - 0xc0,0xd4,0xcc,0x0d,0xaa,0xd9,0x22,0xd2,0x34,0xc8, - 0xcc,0xc7,0x16,0x8e,0x1e,0x5a,0x1b,0x01,0xb0,0x2d, - 0x14,0xb7,0x1d,0xa7,0x74,0x68,0xc1,0x86,0xa8,0x3b, - 0xc0,0xe0,0xb6,0xcd,0xe3,0x1c,0xdc,0x09,0xba,0xdc, - 0x8c,0x18,0xa7,0x4a,0x34,0x21,0x30,0x09,0x7a,0x4c, - 0x28,0x93,0x32,0xef,0xdd,0xfb,0x4f,0x9b,0x67,0x01, - 0x01,0x57,0xba,0xef,0x94,0xc8,0xa6,0x56,0x89,0x0a, - 0x9b,0x4d,0x64,0xec,0x24,0x78,0x48,0x95,0x60,0x10, - 0x91,0xac,0x80,0xf4,0x95,0x72,0x7d,0x1c,0xea,0x18, - 0xbe,0xa3,0x26,0x38,0x9b,0x10,0xa4,0xb4,0x5e,0xef, - 0x9b,0xd4,0x36,0x08,0xa9,0xff,0x6e,0x92,0x7f,0x31, - 0x73,0xed,0xa3,0xef,0x6f,0x3c,0x1e,0xf0,0xd0,0x1a, - 0xd1,0xb6,0xb0,0xae,0x1e,0xdc,0xaa,0xe1,0x9f,0xba, - 0x06,0x9f,0x39,0x57,0x9c,0xb8,0xfd,0xa7,0xf6,0x09, - 0x93,0x45,0x85,0x6b,0x19,0x91,0xb4,0xc3,0xd6,0x11, - 0x7b,0x4a,0x2e,0x37,0xe8,0x08,0xad,0xe3,0x60,0xb2, - 0x19,0xf9,0x3d,0xf4,0x2e,0x9d,0x16,0x58,0x7b,0xff, - 0x35,0xc5,0xb8,0xc0,0x59,0xaa,0x8d,0xf9,0xa8,0x3b, - 0x87,0xa6,0xc2,0x42,0x9f,0xa3,0x23,0xf9,0x4f,0x6b, - 0xd5,0xa1,0x64,0x06,0x41,0xae,0x84,0x54,0xb9,0x96, - 0x2e,0xed,0x95,0x24,0x08,0x4c,0x5d,0xa1,0xb4,0xc7, - 0xbb,0x98,0x65,0x92,0x11,0x20,0x5a,0x49,0xa2,0x00, - 0xa4,0x16,0x1d,0x21,0xc4,0xf2,0xd9,0xe5,0xf6,0xe7, - 0x8f,0x0e,0x50,0x52,0xc7,0xa5,0x97,0xb1,0x99,0xc0, - 0x72,0xd5,0x5b,0x1b,0x31,0x8c,0x6d,0x01,0xa7,0x18, - 0xea,0x94,0x9f,0x53,0x4b,0x85,0x92,0xbb,0x29,0xb0, - 0xa5,0x29,0x01,0x42,0xb1,0xda,0x02,0xae,0x0f,0x04, - 0xa0,0xb0,0x0a,0x4f,0x87,0xd9,0xa6,0x27,0x0a,0xb0, - 0x6d,0x75,0xe8,0xdb,0x5d,0x6f,0x40,0x56,0x6a,0x38, - 0x60,0x1f,0x3d,0xe3,0xb4,0xc9,0x37,0x04,0x68,0xa9, - 0x12,0x93,0x9f,0x93,0xba,0x9a,0x8f,0x55,0x98,0x43, - 0xfc,0x7b,0x10,0xec,0x6b,0x74,0x39,0xa2,0x5b,0xee, - 0xd0,0x9b,0x0a,0x00,0xe5,0x02,0xb9,0x40,0xa6,0xaa, - 0xe3,0x6e,0xe2,0x66,0x48,0x6e,0x2a,0x21,0x6c,0x0e, - 0x8d,0xd2,0xf5,0x29,0xce,0xe7,0x11,0xb1,0x90,0x24, - 0xaa,0xeb,0x0a,0x55,0xda,0x6f,0xed,0x5d,0xbf,0x4d, - 0x94,0xa5,0x64,0x24,0x0d,0x2d,0x10,0x0a,0xd7,0x5b, - 0x6d,0x43,0x35,0xbf,0x31,0xf4,0xac,0x01,0x35,0xaf, - 0x8d,0x47,0x19,0xd8,0xbf,0xac,0x3c,0xca,0x1c,0x39, - 0xdf,0x7c,0xde,0x63,0x70,0xc5,0xb5,0xb5,0xd3,0x94, - 0x15,0xb5,0x63,0x82,0xcd,0x06,0x1e,0xf6,0x84,0xb6, - 0xba,0x3f,0x98,0xb4,0x5e,0xa6,0x6e,0x05,0x21,0xd3, - 0x54,0xc4,0x53,0xdb,0xca,0xa1,0xae,0x9b,0xe4,0x60, - 0x52,0x27,0xde,0x90,0x75,0x53,0x61,0xd3,0xd1,0x9e, - 0x50,0xec,0xa3,0xde,0x9c,0x4c,0x93,0x6d,0xdf,0x45, - 0x25,0xea,0x4a,0x4f,0xb4,0x88,0x2f,0xea,0x5a,0xd8, - 0xbd,0x18,0x9c,0xe8,0x04,0x2e,0x61,0x9e,0x94,0xde, - 0x8d,0x15,0xc8,0x8b,0x84,0xc4,0x6a,0xc9,0x33,0x89, - 0xed,0x16,0x17,0xd8,0x35,0xb1,0x9a,0x64,0xd9,0x69, - 0x02,0x8d,0x26,0x90,0xe8,0xc1,0x5e,0x40,0xec,0x25, - 0x93,0x56,0x72,0xd8,0x26,0x21,0x3a,0x42,0x9c,0xd2, - 0x44,0x01,0x05,0x87,0xc0,0x8b,0xb1,0x72,0xec,0x49, - 0x81,0x78,0x0a,0x4c,0x89,0x4c,0x99,0xfa,0xf5,0x13, - 0x4f,0xcc,0x55,0x64,0xae,0xfa,0x4d,0x1b,0xdc,0x8d, - 0x7b,0x6a,0xdb,0x28,0xd9,0x8c,0xb8,0xf7,0x44,0xad, - 0xc9,0x29,0xf9,0xbc,0x44,0x3f,0x28,0x11,0x2f,0x27, - 0xfb,0x0c,0x57,0xe5,0x4b,0x30,0x2c,0x42,0x25,0xdd, - 0xfd,0x3b,0xb4,0xe6,0x32,0x23,0xe9,0xa1,0x7a,0x2c, - 0x67,0x8e,0x49,0x3d,0x7a,0x68,0x85,0x74,0x81,0xc3, - 0xb1,0x4d,0xb0,0x35,0xd0,0xec,0xa8,0x8c,0xf8,0x7e, - 0xc5,0xb5,0x07,0x49,0x5c,0x9f,0x5e,0x9b,0x2a,0xee, - 0x2b,0x25,0x6d,0x1d,0xad,0x71,0x5c,0x98,0x64,0x9e, - 0xab,0x16,0x0e,0x5a,0x24,0xd2,0xfe,0xeb,0x53,0x41, - 0xe6,0xcf,0x70,0x9f,0x13,0x9a,0x3b,0x39,0x6f,0xbb, - 0x38,0xe8,0xa6,0x03,0x43,0xfb,0x22,0x1a,0xb0,0x26, - 0x95,0x5e,0x2a,0xfc,0x68,0x1d,0xd2,0x9a,0x9b,0x9e, - 0x6b,0x42,0x14,0x89,0x1e,0x00,0xef,0xd3,0xa1,0xa6, - 0x96,0x58,0x3d,0xa1,0x19,0x6e,0xc0,0x68,0x2a,0xc6, - 0xe8,0xd9,0xe9,0x7b,0xd6,0xe4,0x9c,0xa6,0xb7,0x36, - 0x03,0x3a,0xee,0xf7,0xf4,0xcf,0x12,0x45,0x82,0xf8, - 0xa4,0xca,0x03,0x24,0x8e,0xee,0xd6,0xd4,0x96,0xe2, - 0xc2,0x6f,0xea,0xed,0x51,0x10,0x81,0x49,0x9b,0x9a, - 0x16,0xc8,0xa4,0xcb,0xe2,0x44,0x0c,0x53,0x8f,0x91, - 0x7c,0x79,0xee,0xcf,0xfa,0xf5,0xeb,0x57,0xa5,0x9b, - 0x97,0x1e,0xf2,0xca,0xfb,0x2b,0x6d,0xd6,0xc4,0x55, - 0xa1,0x7b,0x73,0xc9,0x94,0xbb,0xb6,0x29,0xa3,0x75, - 0x81,0x95,0x24,0xdc,0x27,0x13,0x55,0x12,0xb9,0x72, - 0x2d,0x23,0x6d,0x99,0x7e,0x72,0xc8,0x41,0x3f,0xd9, - 0x11,0x79,0x4b,0xc7,0xa2,0xe9,0xb9,0x03,0x9a,0xf5, - 0x56,0xe9,0x4c,0xa3,0xa8,0x7f,0xc3,0xe7,0x72,0x6b, - 0x5c,0xb9,0x3b,0xee,0xdd,0x7e,0xaa,0x87,0xa5,0xc5, - 0x09,0x19,0x3f,0x4e,0x49,0x9f,0x21,0x18,0x17,0x21, - 0xc1,0x43,0x02,0x5c,0x64,0x3c,0xf9,0xc9,0x73,0x5c, - 0xa8,0x32,0x53,0xeb,0xe1,0xfe,0xfe,0x93,0xf6,0x6e, - 0x48,0xe8,0x7f,0x6c,0x28,0x54,0xbc,0x4d,0x5b,0x4e, - 0xf7,0xcf,0xd1,0xba,0xe9,0x9c,0x0d,0x88,0xa5,0x3f, - 0x7c,0x13,0xe0,0x9b,0x1d,0x42,0xd2,0x48,0xb4,0x2f, - 0xf0,0x2f,0x1f,0xdc,0x96,0xce,0x91,0x30,0xc8,0xdb, - 0xe3,0x3b,0x12,0xef,0x84,0xda,0x72,0x5f,0x5f,0x5f, - 0x67,0x12,0xce,0x33,0x56,0x17,0xe9,0xf0,0x7a,0xe3, - 0x74,0xf4,0x6b,0x95,0x84,0xfc,0xed,0xfd,0x74,0x7e, - 0x93,0x69,0x03,0x1f,0x97,0xc4,0x9a,0x16,0xf0,0x49, - 0xad,0xfc,0xa9,0x1d,0x96,0xc6,0xf9,0x9d,0xd8,0xe8, - 0x05,0x76,0x24,0x29,0x01,0xd1,0x78,0x46,0x3a,0x5a, - 0xa9,0xd8,0x53,0x14,0x48,0x75,0xbe,0xa8,0xa3,0xe2, - 0xbc,0x09,0xd3,0x1e,0x04,0xfe,0xe6,0x21,0x5e,0x51, - 0xbf,0xce,0x2e,0x7a,0x48,0x82,0xc1,0xe9,0xb9,0x05, - 0x6d,0xb5,0x7a,0xa5,0xa0,0xe5,0x5a,0x4e,0xc9,0x87, - 0xc5,0x2d,0x0a,0xa7,0x53,0x30,0xf1,0x2c,0x5c,0x35, - 0xe6,0xa6,0x42,0x52,0xb5,0x9e,0xac,0x38,0x26,0x2e, - 0xc0,0xd4,0x87,0x24,0x8d,0x92,0x49,0x40,0x6b,0xaa, - 0x00,0xce,0x39,0xd7,0xaf,0x5f,0xbf,0x56,0xe4,0xb0, - 0x0d,0xf9,0x2e,0x55,0x2b,0x81,0xa7,0xe1,0xf4,0x1c, - 0x46,0x1f,0x32,0xb5,0xae,0x70,0x7d,0x6b,0x3a,0x48, - 0x69,0xa4,0x34,0xc1,0xbe,0x5b,0x12,0x3a,0x25,0x80, - 0xca,0x5f,0xea,0x95,0x05,0xb4,0x50,0x0b,0x2a,0x9e, - 0x47,0x7f,0x79,0x92,0x45,0x70,0xbd,0x71,0x35,0x6c, - 0xfc,0x5b,0x1b,0x94,0xd4,0xba,0x31,0x7c,0x8b,0xba, - 0x82,0x28,0x63,0x68,0x3b,0xd4,0x84,0x30,0xba,0x51, - 0xed,0x89,0xec,0xbc,0xe1,0xa9,0x50,0xdb,0x35,0xb5, - 0xab,0x86,0xe2,0xab,0xd2,0x20,0x05,0x71,0xb1,0xa0, - 0x0a,0x5e,0xf1,0x18,0xdd,0xbb,0x75,0x1c,0x35,0x45, - 0x76,0x12,0x22,0xb9,0x41,0x6a,0x93,0xde,0xcf,0xa4, - 0x98,0x9e,0x90,0x23,0xb2,0xd3,0x20,0x64,0xb6,0x1f, - 0x9e,0x8e,0xf3,0xf4,0x01,0x57,0x0b,0x0b,0xad,0xd4, - 0x36,0xa1,0x41,0x8a,0x24,0x70,0xeb,0x10,0x47,0x6d, - 0x4f,0xdf,0xf7,0x95,0x26,0x21,0x27,0xe4,0x49,0xf7, - 0x59,0x52,0x9e,0x77,0x32,0x05,0x5b,0x23,0x55,0x47, - 0x43,0x49,0xa4,0xe8,0x69,0xad,0xa4,0xdf,0xa5,0x58, - 0xb1,0xe1,0x22,0x25,0xb4,0xd0,0x90,0xfa,0x2d,0xad, - 0x21,0x89,0x63,0xfe,0xbe,0xc0,0x3f,0x64,0x52,0xc1, - 0x24,0x31,0x2d,0xaa,0xf4,0x9c,0xb4,0x3f,0x2d,0xae, - 0x49,0x01,0x38,0x19,0xde,0x6d,0x82,0x2b,0x55,0x00, - 0xdb,0xa4,0x23,0x4c,0xa7,0xd5,0x06,0x06,0x9e,0xaa, - 0x66,0xa7,0xe0,0x4a,0x95,0x17,0x90,0x08,0xab,0x73, - 0xad,0x3a,0x9a,0xe4,0x08,0xb4,0x28,0x12,0x15,0xac, - 0x4d,0xdc,0xb3,0xee,0x55,0x84,0x56,0xd3,0x0e,0x2a, - 0x5e,0xc0,0xe5,0x8f,0x67,0x43,0xd2,0xef,0xe1,0x30, - 0xae,0x5e,0x71,0x0e,0xed,0xcf,0x9a,0x0a,0x02,0x4a, - 0x30,0x9d,0xb4,0xc0,0xc4,0x0b,0x81,0xfb,0xab,0x81, - 0x1b,0x55,0x03,0xb7,0xac,0x96,0xfb,0x72,0x54,0x52, - 0x76,0xf7,0x33,0x05,0xda,0xc9,0x60,0x71,0x4a,0x54, - 0x53,0x8b,0x38,0xc5,0x18,0xd3,0x6e,0x3c,0xa9,0xd5, - 0xa9,0x89,0xbb,0x31,0x9b,0xbc,0xc0,0xc7,0xee,0x0c, - 0xad,0x98,0x07,0xca,0xa0,0x53,0x47,0x4e,0xc3,0x85, - 0x44,0x55,0x6f,0x23,0x5b,0xbd,0x1f,0x87,0x62,0x19, - 0x2d,0xa2,0x63,0x8a,0x8d,0xb7,0x29,0xb2,0x3e,0x6d, - 0x7a,0x89,0xd5,0x48,0xb0,0x58,0x78,0xbb,0xc7,0xe1, - 0xac,0x78,0x9b,0xd2,0xea,0x76,0x12,0x89,0x8e,0x30, - 0x75,0x0c,0x52,0xe1,0x4c,0x2d,0xa0,0xe9,0x8c,0xd9, - 0xd2,0x14,0xa4,0x0d,0x73,0x0c,0xea,0x7b,0xa8,0xd5, - 0xa3,0xf1,0x3c,0xb5,0x99,0xb6,0x86,0xcd,0x17,0x98, - 0xdc,0x02,0x97,0xe9,0x4c,0x46,0xb2,0xa9,0xa0,0x99, - 0x3a,0x3a,0xe9,0x1c,0x0d,0x66,0xd2,0xd7,0xc4,0x65, - 0xd4,0xb5,0x96,0x28,0x0f,0x9b,0x2e,0x92,0x55,0x82, - 0x4e,0xd9,0x72,0xef,0x57,0x6f,0x2f,0x54,0x37,0xb3, - 0xfe,0x8e,0x7b,0x00,0x4e,0x3e,0x7d,0x73,0x08,0x7f, - 0xe2,0xff,0xb1,0xd1,0x4a,0x98,0x3e,0xbb,0x0b,0xde, - 0x25,0xc3,0xbd,0x49,0x34,0xd2,0xc1,0x9a,0xae,0x0f, - 0x4b,0x87,0x5b,0xe2,0x8a,0xdc,0xc9,0x02,0x55,0x0a, - 0x53,0xf0,0xa2,0x56,0x25,0x55,0xa4,0x49,0x32,0xdf, - 0x55,0x8f,0x5a,0x41,0x82,0x91,0xa7,0xed,0x63,0x9b, - 0xe7,0x3b,0xea,0x50,0xf5,0x16,0xd2,0xc4,0xb3,0x20, - 0xd1,0x34,0x87,0x6e,0x4d,0xc6,0xb5,0x64,0x8c,0x49, - 0x22,0x78,0x6e,0xdd,0x90,0x5a,0xf5,0xa6,0x9a,0x35, - 0xc9,0x4d,0x4d,0x02,0x7a,0xda,0x52,0x71,0x6d,0xdc, - 0x49,0x18,0x93,0xa6,0x43,0x43,0x80,0x9e,0x7c,0xbc, - 0x2c,0x1f,0x00,0x48,0xe7,0x45,0x93,0x54,0x54,0xbc, - 0xf4,0xfd,0xe5,0x86,0x40,0xdc,0x3b,0x4a,0xff,0x4e, - 0x89,0x24,0x25,0xf2,0x4a,0x2c,0x75,0x32,0x12,0x3d, - 0xe6,0xd0,0x24,0x4d,0x42,0x7b,0x13,0x27,0x10,0x0a, - 0xbb,0x4a,0xe8,0x38,0xb5,0x75,0xa7,0x16,0xca,0x86, - 0xb4,0x9c,0xb8,0x36,0x24,0x89,0xe1,0xd6,0x86,0x49, - 0x50,0x37,0x66,0xad,0xf6,0xf9,0x11,0xf2,0x45,0x05, - 0x1b,0xed,0x6b,0x7a,0x1f,0x69,0x3f,0x26,0x73,0x71, - 0x83,0xa8,0xd4,0x46,0x28,0xb3,0x17,0x88,0x03,0x5a, - 0xe9,0x38,0x9b,0xce,0x3b,0xd0,0x1a,0x34,0x6f,0xd4, - 0xe1,0x03,0x5a,0x16,0x79,0xbf,0x09,0x8d,0x52,0xae, - 0xdd,0x83,0x2a,0x32,0x05,0x13,0x42,0x1d,0x26,0xd8, - 0x7c,0x3a,0x54,0x53,0x22,0x33,0x4d,0x4d,0x38,0x42, - 0xa6,0x92,0x35,0x29,0x00,0xab,0x7e,0x0b,0x11,0xd4, - 0xe8,0x90,0x9a,0x78,0x0c,0x09,0x6e,0xdb,0x20,0x6c, - 0x5d,0x6e,0x20,0x7d,0xa7,0x53,0xc2,0xdd,0xe8,0x35, - 0x4d,0xce,0xe1,0x69,0x7c,0x9e,0x8c,0x32,0xbf,0x2b, - 0x9a,0xfa,0x94,0x33,0x33,0x8d,0x73,0xf6,0x7f,0x7e, - 0xfd,0xfa,0x85,0x7a,0x42,0xc1,0xdf,0xa6,0xa8,0xa2, - 0xdc,0x0a,0x7e,0xea,0x7d,0xf6,0x64,0x32,0x90,0x4e, - 0x0b,0x3c,0x98,0xc6,0x0a,0xca,0x48,0xe0,0x63,0x3b, - 0x22,0xf9,0xb1,0xa5,0x60,0xe2,0x5a,0x22,0x54,0xe8, - 0x26,0xa7,0xf3,0x74,0xa0,0xba,0x6b,0x9c,0xf6,0x35, - 0xb5,0x4c,0x92,0xa6,0xd8,0xa2,0x3d,0xbc,0xf2,0xa1, - 0x4a,0xdc,0x29,0x97,0xc4,0x0c,0x7b,0xb0,0xa6,0x62, - 0x22,0x24,0x64,0xb5,0x41,0x2d,0x44,0x2d,0xdf,0x5e, - 0x8f,0x43,0x1a,0xe9,0x99,0xe8,0xd4,0x6d,0x4a,0x42, - 0x27,0x3b,0x13,0xf7,0xce,0x5d,0x1b,0x5b,0xc5,0x33, - 0x55,0xb8,0xd5,0x15,0x36,0xc1,0x8b,0x0e,0x65,0x58, - 0xd2,0xb9,0x13,0x44,0x6f,0x31,0x91,0xd4,0xc4,0x27, - 0x4d,0x35,0x87,0x3f,0xab,0xed,0xd4,0xe1,0x46,0x94, - 0x38,0x9d,0x4b,0xd4,0xb1,0xa0,0x35,0x7e,0xdb,0xff, - 0x50,0xeb,0xce,0xc5,0x5e,0xb2,0xfe,0x98,0x24,0x10, - 0x48,0xec,0x52,0xff,0x6e,0x23,0xa1,0x32,0xd1,0x40, - 0x5c,0x21,0xf5,0x72,0x2f,0xf0,0x32,0x4a,0xc6,0x09, - 0xed,0x71,0xad,0x1c,0x22,0xf0,0x6e,0x5d,0x6b,0x49, - 0x61,0x99,0xa0,0xfc,0x69,0xec,0x17,0x8c,0x46,0x2a, - 0x8d,0xa1,0x53,0xff,0x9f,0x4c,0x22,0x37,0x95,0x84, - 0x6a,0x69,0x90,0x5f,0xda,0xf4,0xbc,0x26,0x94,0x25, - 0x05,0x7c,0x9a,0x88,0x53,0x88,0x36,0x18,0x3c,0xc6, - 0x6a,0xab,0xcb,0xed,0x4f,0x41,0x89,0xdc,0xe0,0x27, - 0x54,0x51,0x6d,0x46,0x26,0xe7,0xe2,0x14,0x14,0x75, - 0xcd,0x1b,0x48,0xdb,0xa1,0x50,0xe5,0xac,0x46,0x14, - 0x15,0x92,0x8d,0x5c,0x09,0x9e,0x0e,0xda,0x23,0x45, - 0xc9,0x6b,0x12,0x3e,0x33,0x04,0xf3,0x4a,0x23,0xc0, - 0x72,0x0f,0xb5,0x41,0x5f,0x07,0x81,0xb8,0x1f,0x9d, - 0x9f,0x4b,0xc6,0xda,0x6f,0xde,0x4e,0x1f,0x79,0xbf, - 0xde,0xa7,0xc8,0xaa,0x7b,0x75,0x2d,0x3c,0x03,0xd3, - 0x21,0x57,0x7d,0x6a,0x6a,0x9a,0x2a,0xba,0x9a,0xef, - 0x56,0x98,0x6a,0xad,0xc4,0x55,0xd0,0x3d,0x4d,0xaa, - 0xcd,0xa9,0xba,0x77,0xb1,0x63,0x52,0x41,0xa7,0x62, - 0x74,0xd2,0x4b,0x1b,0x2a,0x76,0x37,0x5a,0x5f,0x53, - 0xbc,0xa3,0x83,0x7d,0x6a,0xf7,0x24,0xc4,0x22,0x69, - 0x1f,0xb9,0xa4,0x2b,0x9d,0x63,0x49,0xc7,0x0d,0xec, - 0x78,0x6a,0x98,0xa4,0xc4,0x77,0xb0,0x69,0x65,0x85, - 0xe9,0xc7,0x38,0x16,0xae,0x7c,0xb1,0xa9,0xa8,0x4c, - 0x2d,0xa7,0xe9,0xde,0x12,0xff,0xd5,0xdd,0xcb,0xf0, - 0x8c,0x2c,0x65,0x84,0x3c,0x08,0x69,0x2a,0x2c,0x21, - 0xd0,0x9a,0xf0,0xbd,0x89,0x20,0xbe,0x5e,0xff,0x5a, - 0x61,0xa4,0x6c,0x2b,0x41,0xd9,0x93,0xdd,0xfd,0x94, - 0xbd,0x29,0x32,0x33,0x55,0xe0,0x53,0x0f,0x38,0x91, - 0xe1,0x36,0x2d,0x34,0x6a,0x41,0x50,0x6b,0x81,0xb8, - 0x27,0x13,0x9c,0x3a,0x3d,0x97,0x49,0xca,0x3b,0xa0, - 0x2d,0x31,0xf9,0xd3,0x4c,0x9d,0x60,0x56,0x82,0xd6, - 0x49,0x75,0x34,0x55,0x86,0xa4,0xaf,0xa1,0xef,0x44, - 0xc8,0x91,0xb5,0x55,0x11,0x9e,0xda,0x53,0xd3,0xef, - 0xa7,0x3f,0xa3,0x09,0x0e,0xea,0x9b,0xd3,0xef,0xf5, - 0xc3,0xcb,0x04,0x9d,0x4a,0xd5,0x72,0xf2,0xc5,0xbb, - 0x39,0x2c,0xfd,0x67,0x54,0x8e,0x3e,0xc1,0xe1,0x66, - 0x8f,0xd5,0xdf,0xda,0x06,0xb4,0x96,0x49,0x25,0xf1, - 0xc7,0x0d,0xca,0x2b,0x68,0xc7,0x5b,0x12,0x45,0x7b, - 0x75,0x31,0x4d,0x56,0xa9,0x1d,0xae,0x48,0x4c,0xf0, - 0xf5,0x7b,0x5b,0x63,0x24,0xcc,0xa7,0x7b,0x48,0x0e, - 0xac,0xa2,0x75,0xa6,0xad,0x5f,0xb7,0x8e,0x1d,0x1a, - 0x0b,0xa2,0x84,0xb5,0x41,0xcc,0x26,0x0e,0xe5,0x76, - 0xba,0xce,0x99,0x0d,0x4f,0x7c,0x90,0xa4,0x56,0x9f, - 0x8c,0xb0,0xd3,0xe1,0x9d,0xb8,0x6d,0x0e,0xb9,0x99, - 0xf4,0xda,0xc8,0x82,0xa5,0x93,0xd7,0x53,0xa2,0x05, - 0x93,0x5f,0xb1,0x5d,0xbe,0x05,0x0d,0xb6,0x89,0xce, - 0xd6,0x8a,0x89,0x90,0xae,0x84,0x2c,0x91,0x88,0xee, - 0x46,0xac,0x73,0xe3,0xf7,0x37,0x51,0x42,0xf4,0xfd, - 0x3b,0x44,0xca,0x25,0x6f,0xaf,0x3e,0x4e,0xe7,0xda, - 0x3e,0x0e,0xd6,0x9c,0x0e,0xe2,0x80,0x66,0x54,0x6a, - 0xa9,0xa4,0x2a,0x3f,0xf1,0x06,0x7a,0xd6,0x1b,0xf8, - 0x15,0x78,0x60,0x92,0xc5,0xc6,0xd6,0x0a,0x24,0x78, - 0xd6,0xd4,0x66,0xe1,0x4e,0x2d,0xb6,0xe4,0x59,0x36, - 0x71,0x00,0xa6,0x4a,0x23,0x4d,0x86,0xd0,0xf3,0xd9, - 0x1e,0x60,0xc9,0xdb,0x2d,0x7d,0x46,0xea,0xa5,0xa7, - 0xbe,0xb8,0x5b,0x23,0x53,0x60,0x4f,0x0e,0xc2,0x0e, - 0xe9,0xfa,0x4e,0x2e,0x1e,0x7d,0xf3,0x05,0xf7,0x00, - 0xaf,0x6f,0x50,0x3e,0x8d,0x0a,0xc6,0x4e,0x17,0x2b, - 0x05,0x09,0xe7,0xc1,0xa3,0x5c,0x27,0x40,0xbc,0x6c, - 0xa0,0xbb,0x7f,0xef,0xfb,0x99,0x54,0x0a,0xc6,0x29, - 0xe9,0x20,0x35,0x76,0x42,0x2f,0x2f,0xe3,0x0d,0xb7, - 0x44,0x43,0xcb,0xa1,0x37,0xae,0x25,0xea,0x38,0x8f, - 0x9b,0x96,0x2e,0xf5,0x38,0x40,0x7b,0xe9,0x4a,0x48, - 0x12,0xb5,0x4e,0xc8,0x8b,0x31,0xa1,0xf3,0x82,0x62, - 0x55,0x9a,0x92,0x4a,0xc3,0x06,0xae,0xd5,0x9b,0x54, - 0x8c,0x37,0x09,0x8a,0x22,0xd3,0xda,0xb2,0xd3,0xa9, - 0x1f,0x42,0xf4,0x1d,0x92,0x93,0xee,0x93,0x44,0x7f, - 0x37,0x49,0xdf,0x7d,0x2d,0x86,0x83,0x56,0x8a,0xc4, - 0xb8,0x44,0xe9,0x93,0x33,0xc0,0x25,0xf2,0x92,0xa8, - 0xd4,0x94,0xb0,0x92,0x91,0xf2,0xb2,0x35,0xbb,0x42, - 0xd2,0x28,0xd6,0xd3,0x3d,0xd3,0xf9,0xf6,0x81,0x01, - 0xb2,0x5d,0xa7,0xae,0xf0,0x70,0x71,0xe2,0x77,0xd2, - 0xc0,0xa1,0x03,0x49,0x16,0x4c,0xd1,0xc5,0x4c,0x93, - 0x56,0x8e,0x64,0x97,0xe0,0xd0,0xa9,0x27,0xbe,0xe1, - 0x93,0x4c,0xa2,0x5b,0xfd,0xe7,0xc2,0x88,0x5e,0x6d, - 0x90,0x09,0x5d,0xa4,0x49,0x81,0x57,0x83,0x99,0x43, - 0x1d,0x1c,0x17,0x81,0x16,0xc1,0x34,0xc5,0x47,0x9c, - 0x0c,0x6d,0x9b,0x10,0xb2,0xe2,0x78,0x25,0x1a,0xa5, - 0x4d,0xbf,0xbe,0x08,0xbe,0xd4,0x6b,0xd7,0xf7,0x49, - 0x3c,0x28,0xf7,0x99,0x01,0x0d,0x2c,0x58,0xa3,0x48, - 0xb2,0xfb,0x24,0x81,0x24,0xa8,0x9f,0xd0,0xa2,0xd0, - 0x62,0x44,0x4e,0x40,0x9a,0x08,0xdb,0x4c,0x33,0xc2, - 0xfa,0x2c,0xba,0xe6,0x01,0x3a,0x2f,0x17,0x50,0x1d, - 0xf9,0x7a,0x53,0xc9,0x6f,0x2a,0xd9,0xa0,0x40,0x4c, - 0x1a,0x3b,0x34,0x01,0xf2,0xe6,0x41,0x15,0x14,0x8b, - 0xed,0x84,0x4d,0x5f,0x3b,0xc7,0xfc,0xb2,0xec,0x97, - 0x93,0xf6,0x5a,0xff,0xbc,0x56,0x75,0xd7,0xd7,0xd7, - 0xd7,0x49,0xc8,0xb6,0x7b,0xbe,0x2e,0x6e,0xa5,0x69, - 0x3d,0x67,0xea,0x79,0x19,0xdf,0x30,0x9a,0xec,0x4c, - 0xaa,0xf9,0xfd,0x7e,0xfa,0xf4,0x99,0xd3,0xef,0xd9, - 0x90,0xf2,0xd3,0x21,0x9a,0x0a,0x54,0x77,0xe6,0x74, - 0x4d,0x26,0x9d,0x6c,0xdb,0x70,0x6f,0xa6,0x69,0xe4, - 0xcd,0xba,0x76,0xd3,0x7d,0xc9,0xb1,0x7d,0x1a,0xb2, - 0x00,0x99,0x8b,0x43,0x53,0x50,0xd2,0x92,0x3d,0x9b, - 0xa4,0x8c,0xc8,0xd7,0x8b,0xf3,0xfe,0xe7,0xfd,0xdf, - 0xd3,0x8d,0x53,0xeb,0x30,0x9d,0xcd,0xd7,0xf5,0x0f, - 0x2f,0xf4,0x53,0xf4,0x52,0xaf,0xed,0x37,0xbd,0x50, - 0xba,0x21,0x15,0xb0,0xda,0xb4,0x95,0xd2,0xe2,0x48, - 0xb0,0x1f,0x99,0xa7,0x51,0xb6,0xb7,0xc9,0x4a,0x69, - 0xd3,0xd2,0x44,0xda,0x44,0xfe,0x72,0x9c,0xa7,0xfe, - 0x3b,0xfd,0x25,0x6d,0x46,0x7c,0x83,0x1a,0xea,0x38, - 0xbd,0xe0,0x12,0x08,0x08,0xb6,0x8e,0x9f,0x55,0x89, - 0x50,0x4c,0x44,0xde,0xa9,0xd7,0xbc,0x68,0x33,0xb9, - 0x56,0x57,0x25,0x55,0xd3,0x0d,0x11,0xff,0xd3,0xd6, - 0xa6,0x49,0xc6,0x68,0x9c,0xfc,0x6d,0xf2,0x41,0xa5, - 0x02,0x00,0xb2,0xae,0x29,0x20,0x7e,0x9a,0xb8,0x3b, - 0x92,0xbc,0x59,0x4f,0xb5,0x38,0x24,0x8a,0x54,0x82, - 0xfb,0x3e,0x44,0x48,0xe9,0x9a,0x3d,0xe4,0x12,0x57, - 0x28,0x0d,0x02,0x6c,0x5b,0x25,0x1a,0x60,0xdd,0xf7, - 0xb9,0xe1,0x87,0xfb,0x20,0xd4,0xbf,0x37,0xd7,0x36, - 0x19,0x9f,0xa2,0x81,0x6a,0x9b,0x96,0x39,0x54,0xcd, - 0x9f,0xf7,0x4a,0x62,0x6c,0x91,0x74,0x95,0x3e,0x12, - 0x76,0x34,0xa8,0xd1,0x81,0x29,0xcb,0xb3,0x71,0x6a, - 0xd7,0xc4,0x28,0x71,0xa8,0xee,0x9f,0x4d,0x45,0x29, - 0xad,0x07,0x4a,0xb4,0x16,0x84,0xfd,0xad,0xd9,0x2d, - 0x22,0x06,0x9b,0xf1,0xf2,0x29,0xb6,0x6c,0x44,0x11, - 0x27,0xea,0x46,0x6a,0xed,0x7f,0xd2,0x12,0x84,0x6b, - 0xfc,0x79,0x8f,0x94,0xac,0x50,0x42,0x08,0x67,0xb9, - 0x33,0xd4,0xb5,0xeb,0x8d,0x68,0x18,0x03,0xea,0xff, - 0x48,0xe6,0x86,0x58,0x7b,0x73,0xfe,0x4e,0x12,0x8c, - 0x7c,0x4b,0x80,0x26,0x0f,0xaf,0x61,0x34,0x7e,0x24, - 0xe2,0x25,0xf8,0x90,0x1c,0x86,0x93,0x72,0xf0,0xb4, - 0xf8,0x5d,0x6b,0xcd,0x55,0xbd,0x1b,0xc2,0x9a,0x4e, - 0x46,0x4c,0x52,0x01,0xe9,0xde,0x95,0xc3,0xd1,0x89, - 0xc2,0x93,0x15,0x48,0x0f,0x0a,0xdb,0x51,0x7f,0x42, - 0x67,0xa6,0x1e,0xb3,0x7b,0x26,0x6e,0x11,0x39,0x63, - 0x4c,0x42,0x72,0xe8,0xbe,0xb6,0xd9,0xfb,0x65,0xc6, - 0x2b,0xdd,0x7b,0xb9,0x75,0x53,0xf4,0xbb,0x09,0xd1, - 0xbc,0x40,0x52,0xdd,0x5d,0x77,0x0a,0x48,0xca,0xdb, - 0xb8,0x93,0xa3,0x3f,0x7f,0xfe,0xa4,0x71,0xe0,0xa2, - 0xc0,0xa7,0x1c,0x11,0x45,0x10,0x93,0x82,0xb4,0x43, - 0xea,0x20,0xc1,0x7e,0xb4,0x0c,0x48,0x55,0xd5,0xb5, - 0xb0,0x37,0xd7,0x31,0xf0,0x6c,0x6c,0x82,0x35,0xad, - 0xd1,0x70,0x38,0xdc,0xef,0xe0,0x50,0x2b,0xa8,0x13, - 0x65,0xbb,0x26,0x8d,0xde,0xf7,0x07,0x3a,0x53,0x16, - 0xe9,0x99,0xda,0x08,0x41,0x4b,0xcc,0x6a,0xe8,0x6c, - 0x38,0x8f,0x29,0x2e,0xf4,0xc4,0x62,0x42,0x58,0x6e, - 0x54,0x8b,0xde,0x4b,0x2a,0xe8,0xb6,0xca,0xe0,0x20, - 0x62,0x37,0x16,0x5e,0x37,0x7a,0x40,0x7a,0x45,0x5a, - 0x24,0x6d,0xb8,0x6f,0x34,0x69,0x08,0xcf,0xc8,0x25, - 0x06,0x3f,0x09,0xae,0x4b,0xfa,0xdc,0x73,0xee,0xfb, - 0xd9,0x25,0x8f,0x1b,0xd5,0x64,0x52,0xb7,0x27,0xb4, - 0x32,0xed,0x25,0x9a,0xe8,0x94,0xef,0x78,0xd3,0x74, - 0x4a,0xe8,0xd4,0xa6,0xd8,0x21,0xfe,0xd5,0x94,0x0c, - 0xd2,0x79,0x4a,0x6d,0xdf,0x74,0x6d,0xaf,0xa4,0xc3, - 0x40,0x24,0xa8,0x49,0x25,0xd9,0x9d,0xb8,0x1b,0xfd, - 0x99,0x81,0x28,0x66,0x27,0x11,0xa6,0x97,0xac,0xbe, - 0x66,0x53,0x5f,0x7c,0x53,0x4d,0xa4,0x56,0x09,0x7c, - 0xee,0xc8,0x17,0xd0,0x9e,0xa8,0x12,0xe8,0x36,0xa4, - 0x5b,0xfa,0x7c,0x12,0x37,0xdc,0x90,0xd5,0x12,0xfc, - 0xea,0x5c,0x8f,0xb7,0x1e,0x2c,0xfa,0xbe,0x5d,0x15, - 0x94,0x26,0x1a,0x88,0x5b,0xa0,0xa2,0x9b,0x1d,0xe6, - 0x4d,0xd5,0x13,0x05,0x16,0xe1,0xc2,0xd4,0xd4,0x43, - 0x4f,0x2d,0xae,0xae,0xa1,0xb4,0x29,0x2e,0xdc,0x3a, - 0x23,0x9f,0xbe,0xd4,0x3a,0x03,0x31,0xcd,0xea,0xeb, - 0xab,0xbf,0x53,0x0d,0x2c,0xdf,0xc4,0xe8,0x1a,0xb8, - 0x29,0x63,0xcb,0xd6,0x4d,0xe9,0x7c,0x2a,0xb0,0x46, - 0x6d,0x6c,0x6d,0x75,0x76,0x9d,0x2e,0xc3,0x1f,0x79, - 0xfb,0xee,0x5f,0xbf,0x7e,0xd5,0x82,0x57,0x57,0x2a, - 0x7b,0xb0,0xe5,0x13,0x26,0x34,0xce,0x4d,0x81,0x26, - 0x24,0x58,0xda,0x38,0x0e,0x21,0x29,0xc7,0x31,0xeb, - 0x93,0x92,0x34,0x61,0x98,0x4c,0xa3,0x83,0xb9,0x6f, - 0x05,0x63,0x5d,0x87,0x44,0xd9,0xe7,0x22,0x28,0xbc, - 0xdb,0x67,0x55,0x55,0xd7,0x9f,0x3f,0x7f,0x1e,0xf4, - 0x0b,0x7d,0x2e,0x49,0x4f,0x6c,0x4b,0xab,0x70,0x2d, - 0xa3,0x89,0xd3,0xb2,0xe1,0x4a,0xea,0x73,0x4a,0x86, - 0xbc,0x74,0x9e,0xb9,0x73,0x99,0x38,0x5b,0xdb,0xe4, - 0x6e,0x23,0x3e,0x3a,0x21,0x4d,0xca,0x5b,0xdd,0xb4, - 0xc1,0xc9,0xe2,0x66,0x8b,0x98,0xd3,0xa8,0xfd,0x34, - 0x35,0x7a,0xff,0xcc,0xef,0x0f,0x46,0xdb,0x6b,0x53, - 0xb9,0x4d,0x3e,0x28,0x53,0x86,0xb8,0xfd,0xd9,0x10, - 0x70,0xea,0x3f,0x32,0xe9,0x35,0x6d,0x00,0x17,0x80, - 0xe1,0x77,0x9c,0xda,0xef,0x68,0x0b,0x01,0xca,0xce, - 0xc8,0x37,0x91,0x77,0x50,0x53,0xe5,0x9d,0xb8,0x21, - 0x4e,0x25,0x3a,0x3d,0xcb,0x8d,0x5c,0xfb,0x10,0x68, - 0xd2,0xa1,0x60,0x11,0x26,0xd7,0xbe,0x49,0xad,0x2d, - 0x3a,0x44,0x9a,0xc2,0x2e,0xa2,0x4d,0x5a,0x75,0x86, - 0xb5,0x54,0x90,0x44,0x55,0xa8,0xd4,0x13,0x61,0xb8, - 0x74,0x6d,0x77,0x3d,0xa0,0x41,0x68,0xae,0x16,0x95, - 0x70,0x6d,0x39,0x39,0x24,0x84,0x47,0x22,0x8b,0xae, - 0x8a,0xeb,0xf7,0xe0,0x5a,0xb9,0xf2,0xdf,0x27,0x25, - 0xd4,0x9b,0x56,0x8a,0xe3,0x98,0x38,0xae,0x8c,0x99, - 0xd2,0x3b,0xe9,0x40,0x51,0xce,0x86,0xe3,0x92,0x75, - 0x85,0x63,0xf5,0x15,0xa3,0x3d,0x41,0x15,0xb8,0x6b, - 0x27,0xa4,0x22,0x63,0x9b,0x94,0xa6,0x84,0x66,0x40, - 0xac,0x6c,0x5b,0x64,0xa3,0xa3,0xb5,0x89,0xf7,0x93, - 0x80,0xe2,0x94,0x3c,0x10,0xca,0x06,0x6d,0xf3,0xba, - 0x91,0xc2,0x69,0x2f,0xb8,0x01,0x9b,0xf4,0x5d,0x2d, - 0x26,0x9c,0xe5,0x74,0x62,0x44,0x61,0xe0,0x3b,0x1f, - 0x68,0x8c,0xa3,0x90,0x24,0xd4,0x68,0xe3,0xdf,0xb9, - 0xd1,0x68,0xa3,0x0e,0x81,0x1b,0xb0,0x21,0x6a,0x4d, - 0xda,0x9f,0x09,0x19,0xd2,0xc2,0x9e,0xd0,0xb1,0xce, - 0x75,0xea,0xf7,0xfb,0x4a,0x8b,0x75,0x82,0x3a,0x37, - 0x2d,0x09,0x62,0xd8,0x2b,0xaa,0xd1,0x7d,0xb0,0x92, - 0xe2,0xa5,0x7b,0x88,0x69,0x03,0x3a,0xad,0x96,0x8d, - 0x5f,0xd1,0xd4,0x17,0x77,0x63,0xc9,0xc9,0x51,0x7d, - 0x52,0x5d,0x75,0x0b,0x9e,0x5a,0x80,0x1b,0x21,0x3b, - 0x9a,0xc4,0x80,0xac,0x79,0x35,0xad,0x76,0x99,0xa9, - 0x8f,0x64,0xe8,0xe9,0x46,0xb1,0x5d,0xf5,0x22,0x1c, - 0x8c,0x9a,0x60,0xfd,0x61,0x22,0xa1,0x5c,0x45,0x92, - 0x36,0x7a,0x12,0xff,0x4c,0xef,0x31,0x05,0x7d,0x7a, - 0x7f,0x34,0xfa,0x9f,0x82,0x75,0x42,0x2e,0xa7,0x96, - 0x8b,0x1b,0x8b,0x26,0x04,0x4d,0xd7,0x8a,0x4e,0xae, - 0xe8,0xde,0xa1,0xf6,0x85,0x49,0xa0,0xba,0xb6,0xcf, - 0x06,0x3d,0x7e,0xd3,0x0c,0x5a,0x1c,0x36,0x18,0x28, - 0x35,0xe1,0x22,0x01,0xc3,0xbe,0x46,0x07,0xce,0x46, - 0x6d,0x5b,0xd0,0xc0,0xf7,0x79,0x20,0xec,0x49,0x37, - 0x6d,0x53,0xcc,0x24,0x95,0x76,0x97,0x98,0x76,0x74, - 0x93,0xa6,0x99,0x3a,0x82,0xf6,0x49,0x02,0x4a,0xfb, - 0x50,0x8b,0x9a,0x84,0x96,0x4d,0x24,0x60,0x17,0xcf, - 0x12,0xf1,0x9b,0xf6,0x67,0x92,0x10,0x09,0x85,0xad, - 0x6d,0x2f,0xba,0xf5,0x45,0x43,0x18,0x94,0x0c,0x6e, - 0x63,0xdd,0x76,0xb4,0x9c,0xde,0x4f,0x6a,0xd3,0xb9, - 0xef,0x24,0x24,0x4b,0xed,0x3d,0xd2,0x5e,0xdc,0xdc, - 0x1b,0xd9,0x63,0x0c,0xf1,0xb6,0xdc,0x1a,0x71,0x94, - 0x06,0x17,0x73,0x5e,0xa9,0x9f,0x26,0x5e,0x52,0x98, - 0x18,0x2c,0xbd,0x53,0x6a,0xd2,0x06,0x9a,0x58,0xf5, - 0x1b,0x05,0x52,0xe2,0x30,0xb9,0x16,0x4b,0xef,0x8b, - 0x4f,0xfa,0x37,0x03,0x52,0x51,0x44,0xcc,0x76,0x7e, - 0x58,0x89,0x14,0x7e,0xff,0x9e,0x8c,0xe5,0x16,0x2d, - 0x98,0xd4,0xf6,0x4a,0xea,0xd8,0x9b,0x67,0xbe,0x41, - 0x8e,0x28,0x01,0xfc,0xe4,0x9e,0x17,0x9b,0xbe,0x88, - 0xf7,0x40,0x81,0x48,0xf9,0x39,0x13,0xc7,0x8a,0x4c, - 0xff,0x28,0xf1,0x5e,0x20,0x27,0xf6,0xdf,0x3b,0x47, - 0xc9,0x1d,0x92,0x5d,0x2f,0xc8,0xa8,0x8a,0xd7,0xdf, - 0x18,0x36,0x4e,0x92,0xf2,0xe6,0x00,0x2a,0x37,0x02, - 0xee,0x5a,0x01,0x30,0xfa,0xdd,0x05,0x0d,0xc7,0x04, - 0x9d,0xfe,0x5b,0x38,0x16,0xe5,0x12,0x14,0xba,0x36, - 0xd3,0x66,0x19,0xf7,0x50,0x6f,0x83,0xdf,0x5a,0x4a, - 0x24,0x4e,0x17,0x86,0x25,0x56,0xa3,0xef,0x94,0xd8, - 0xc2,0xda,0x2b,0x68,0xb1,0xd4,0x74,0x28,0x18,0xfe, - 0x0a,0xc6,0x83,0x41,0x73,0x25,0xb5,0x4a,0x8a,0x46, - 0xe1,0x53,0xab,0x77,0xb2,0x57,0x21,0x9a,0x41,0x32, - 0xcb,0x4e,0xa3,0xdd,0x74,0x38,0x0e,0x4a,0xe4,0x35, - 0x0d,0x7a,0x24,0x41,0xcb,0x85,0x0d,0x4c,0x6d,0x26, - 0xc0,0x5c,0x21,0xaf,0x89,0x17,0x14,0x37,0xb5,0xa5, - 0xa0,0x24,0x41,0xdf,0x49,0xc3,0x4e,0xd7,0x90,0xaa, - 0xe6,0x87,0xb6,0x7f,0x11,0x12,0x46,0x42,0x86,0x29, - 0xe1,0xa3,0x33,0x86,0x92,0xdf,0x17,0xc1,0xff,0xa4, - 0x01,0x32,0x6d,0x08,0xd5,0xd3,0x98,0x46,0xf5,0xa8, - 0x8f,0x49,0x23,0xe8,0x93,0x2b,0x7d,0x5a,0xa4,0x14, - 0xf0,0x1d,0xa2,0x44,0xfc,0x24,0x42,0x8d,0x48,0x7f, - 0x46,0xa1,0x48,0x77,0xb0,0x93,0x76,0x88,0x22,0x70, - 0x5a,0xb9,0x4d,0x62,0x5d,0x8a,0xd8,0x74,0x35,0x59, - 0xaa,0x9e,0x52,0x92,0x49,0x70,0xa6,0x7b,0x57,0xc9, - 0xcf,0xe7,0x13,0x57,0xf0,0x37,0xd1,0xaa,0x77,0x0e, - 0x49,0x6d,0x78,0x55,0xd3,0x5a,0x32,0xeb,0xbc,0xa0, - 0x87,0x5f,0x13,0xdf,0x2d,0xa9,0xe7,0xa6,0xe7,0xb0, - 0x35,0xa7,0x4d,0x55,0x9b,0x13,0x53,0x9c,0x0e,0xa5, - 0x4f,0x0e,0xcf,0xa4,0xd5,0xd5,0xf5,0x75,0xc8,0x16, - 0xc0,0xad,0x9f,0x8d,0x1e,0x13,0xc4,0xa7,0x28,0x14, - 0x18,0x3e,0x2b,0x7a,0xa9,0x39,0xe3,0xe0,0xf4,0xec, - 0x42,0x3b,0x83,0x12,0x90,0x49,0x7c,0xb4,0x08,0xbd, - 0xd9,0x20,0x1e,0x13,0x1a,0x1c,0xd6,0xc0,0x88,0x00, - 0xbb,0xa1,0x0a,0x67,0x80,0x9c,0x5a,0xcf,0x24,0x08, - 0x78,0x17,0x28,0x77,0x2c,0xb9,0xad,0x75,0x40,0x14, - 0xd3,0xb5,0xe5,0xfe,0xba,0x5d,0x9a,0x8a,0x22,0x42, - 0xe6,0x27,0x7d,0xa7,0x54,0x18,0x09,0xea,0x97,0xd0, - 0xa8,0xb7,0x42,0x7d,0x6b,0x8c,0x4a,0xea,0xde,0x09, - 0x35,0xa1,0xc4,0x34,0x25,0x38,0xf4,0xae,0x53,0xd2, - 0x47,0x92,0x39,0xa9,0x0d,0x9a,0x3a,0x2c,0xa9,0x5d, - 0xb6,0xd9,0x27,0x3f,0x3a,0x40,0x54,0x49,0x4d,0x06, - 0x7f,0x64,0x2b,0xb0,0x19,0x8d,0x4e,0x9a,0x2d,0x13, - 0x31,0x6d,0xb3,0x80,0x27,0x47,0xec,0x29,0x8b,0x0c, - 0xa3,0xed,0x95,0xfa,0xba,0xa9,0x4d,0xb2,0xd5,0xe1, - 0xd9,0x20,0x2e,0xf4,0xbe,0x68,0x51,0x39,0x3e,0x48, - 0x22,0xfd,0xa6,0x31,0x57,0x32,0x86,0xa4,0xc4,0xd6, - 0xf9,0xf7,0x10,0x1f,0x8a,0xaa,0xee,0xcd,0x74,0x99, - 0x3b,0x78,0x02,0x2c,0x5c,0x13,0x29,0x6f,0x3b,0xc5, - 0xb3,0x99,0x84,0xe9,0xae,0xdb,0x93,0x6c,0xfc,0x34, - 0x04,0x90,0x60,0xfa,0x50,0x51,0xc7,0xd1,0xf5,0x0d, - 0xda,0x07,0x87,0x42,0x4d,0x05,0x0a,0x09,0x8d,0x26, - 0x82,0x66,0x3a,0x50,0x04,0x15,0x39,0x6e,0x2f,0x98, - 0xfe,0x7f,0x74,0xeb,0x9e,0x10,0x49,0x72,0x7d,0x27, - 0x13,0xc9,0xb4,0xbf,0x13,0x87,0x64,0x43,0x02,0x57, - 0xd4,0xaf,0x8f,0x21,0xeb,0xf4,0x14,0xf1,0x2c,0x3e, - 0x71,0xfe,0xa6,0xf7,0xe1,0x10,0x1c,0x29,0xd2,0xde, - 0x38,0x43,0xca,0x23,0x4a,0xea,0xcf,0xee,0xf0,0xbf, - 0x73,0xa5,0x85,0xbc,0xc6,0x1b,0xf7,0xcb,0x71,0x77, - 0x12,0xb9,0x37,0xb5,0x93,0x93,0x30,0x2c,0xbd,0x47, - 0xd0,0x5b,0x9a,0xa8,0x06,0x47,0x8b,0xef,0x29,0x01, - 0xa0,0x3d,0x37,0xb5,0xcc,0xc2,0xf3,0xe4,0x59,0xf6, - 0x01,0x91,0xff,0x46,0x6c,0x4f,0x4a,0x28,0x13,0xff, - 0xca,0xfd,0x77,0xff,0xcc,0xf4,0x0e,0xa9,0x78,0x77, - 0x02,0xb0,0x2f,0x27,0xd7,0x3e,0x65,0xb3,0x29,0x78, - 0x3a,0x3d,0x0d,0xf7,0x39,0xa9,0x27,0xba,0x4d,0x7a, - 0x12,0xe7,0xc2,0x90,0x47,0x23,0xa7,0xe8,0x0a,0xde, - 0x3e,0xd4,0xee,0x23,0xab,0x08,0x9a,0xfc,0xa2,0xe7, - 0xe7,0x7a,0xc8,0x09,0xbe,0xa5,0x69,0x0e,0xea,0xa7, - 0x0f,0xe3,0xdb,0x63,0x32,0xa7,0xd5,0xb3,0xde,0x9f, - 0x6c,0xd0,0x4a,0xe8,0x89,0xe3,0x10,0xb5,0xaa,0xa8, - 0x80,0xec,0xb7,0x52,0x78,0xa6,0x20,0x91,0x54,0x5e, - 0x43,0x2b,0xe7,0xd1,0xb6,0x48,0x49,0x09,0xb5,0x26, - 0x12,0x97,0x63,0xba,0x17,0x22,0x9d,0x18,0x44,0xb0, - 0x06,0x3f,0x26,0x2b,0xe5,0xa0,0xd3,0x3c,0xee,0xdd, - 0x39,0xbe,0x5b,0x33,0xae,0xac,0x49,0xb4,0x34,0xf1, - 0xef,0xe8,0xc0,0x48,0x13,0x96,0x30,0x59,0x84,0xb6, - 0x27,0xc0,0x01,0xac,0xc9,0x1e,0xc7,0xbd,0xc3,0xa9, - 0x20,0x24,0x54,0xc5,0xac,0xb5,0x8f,0x6c,0x51,0xdc, - 0xd4,0xd7,0xc0,0x7b,0xb2,0x3f,0xdf,0x13,0x7f,0xe2, - 0x06,0xa6,0x98,0x38,0x28,0x22,0x97,0x56,0xdd,0xd3, - 0x41,0x04,0x07,0xa7,0x45,0xcf,0x5d,0x65,0x4f,0x9f, - 0x03,0x9e,0x55,0x65,0x0e,0xc0,0xda,0xc6,0x10,0x5a, - 0x5f,0x89,0xf3,0xe4,0xf8,0x8c,0x93,0x5d,0xc7,0x27, - 0xed,0xf6,0x09,0x95,0xd9,0x0c,0x16,0x39,0x73,0x5a, - 0xa2,0x34,0x38,0x7d,0xb4,0x4f,0x78,0x48,0x8e,0xbb, - 0xfa,0xb7,0x36,0x1f,0x3d,0x39,0x86,0x16,0x69,0xe9, - 0x19,0xe0,0x8a,0x81,0x97,0x83,0x16,0x87,0x07,0x15, - 0x3d,0x3a,0x3e,0x99,0x00,0xa3,0x07,0xec,0x88,0x87, - 0xd3,0xc6,0x71,0x64,0x3b,0x47,0x2e,0x4c,0x10,0xe2, - 0x64,0xd1,0xa0,0x2d,0x1f,0xd2,0x26,0x48,0x30,0x33, - 0xb5,0xce,0x92,0x5c,0x3c,0x1d,0xd0,0x93,0x44,0x3b, - 0x1d,0x2c,0x1a,0x10,0x75,0x34,0x3b,0xa1,0x4c,0x13, - 0xd7,0x65,0x6b,0xea,0x9a,0x0e,0x96,0x94,0xb0,0xdd, - 0x56,0x14,0x69,0x34,0x3e,0x8d,0x54,0x12,0x67,0xa0, - 0x73,0x6c,0xb6,0xd5,0xfc,0xb6,0x6d,0xd0,0x5d,0xbb, - 0x37,0xdc,0x90,0x89,0xd3,0xe2,0xda,0x66,0x3d,0xf1, - 0x76,0xc4,0xde,0x89,0x87,0x30,0x41,0xe7,0x43,0x4e, - 0x86,0x89,0xde,0x56,0xe0,0x71,0x7b,0xe0,0x4c,0xa3, - 0xff,0xa9,0x6d,0xaf,0x4e,0xe9,0x34,0xc5,0xaa,0xad, - 0x82,0xd0,0x66,0x2d,0x17,0x94,0x37,0x36,0x3a,0x5a, - 0x44,0x4c,0x87,0x2c,0xf9,0x20,0x3a,0x9e,0xdf,0x27, - 0xde,0x85,0xae,0xa5,0x9c,0x44,0x0a,0x07,0x01,0xc4, - 0xc8,0x63,0xd9,0xda,0x28,0x7c,0xb2,0x07,0x1c,0xe7, - 0x64,0x8b,0x78,0xa4,0x42,0x78,0xc3,0x67,0x24,0xf4, - 0x2f,0x14,0xd9,0x38,0xd0,0xa2,0x31,0x09,0x3c,0xf6, - 0x2c,0x85,0x82,0x3e,0x77,0xe3,0xdb,0xe5,0x38,0x55, - 0x64,0xbd,0x44,0x31,0xe4,0x02,0x49,0x0d,0x32,0xa7, - 0x9d,0xc6,0xef,0xa7,0xe9,0x65,0xfd,0x33,0x2d,0x70, - 0x29,0x57,0xe9,0x7b,0xf3,0x67,0xdf,0x50,0x76,0x34, - 0x2d,0x02,0x42,0x0f,0x26,0xd5,0x5b,0x07,0x7b,0x81, - 0x6e,0xc5,0x3a,0x93,0x9d,0x7a,0x85,0x64,0x35,0x91, - 0xaa,0x7f,0xd5,0x92,0xa1,0x85,0x9f,0x32,0xde,0xc9, - 0x03,0x67,0xc3,0x47,0x80,0x4c,0xbf,0xa6,0x43,0x25, - 0x71,0x5f,0xa6,0xbe,0xb3,0xf2,0x5d,0xc0,0x27,0x29, - 0xf2,0x3c,0x12,0x69,0x6e,0xc9,0xa3,0x58,0xf1,0x78, - 0xb6,0xc8,0xa1,0x98,0xe4,0x15,0x8d,0xdd,0xbb,0x76, - 0xc7,0x27,0xa4,0x5b,0xaa,0x78,0x13,0x07,0x60,0x23, - 0x20,0xd8,0x7f,0x47,0x79,0x17,0x4e,0xeb,0x26,0x71, - 0xb6,0x5c,0x2b,0x24,0xb5,0xbe,0x9d,0x0b,0x38,0x69, - 0xfa,0x38,0xd2,0xe6,0x66,0x94,0x36,0x88,0xa2,0x46, - 0xde,0x9b,0x21,0x20,0xd7,0x94,0x3c,0x6d,0x63,0xc9, - 0xf4,0xbe,0x6f,0xab,0x8c,0xe0,0xf5,0x56,0x01,0xe9, - 0x2b,0xfa,0xfc,0xb0,0x57,0x0b,0xd6,0xac,0x9d,0x5e, - 0x4a,0x53,0x7c,0x21,0xa1,0x8e,0xf7,0xae,0xe8,0x18, - 0x1d,0xb8,0x1b,0x7e,0x12,0xa1,0x4f,0x1b,0x9e,0x98, - 0x4b,0x20,0x37,0xad,0x64,0x47,0x17,0x20,0xb1,0x56, - 0xda,0xdf,0xc9,0x11,0x3d,0xf1,0xfc,0x5c,0xa2,0xe9, - 0xd6,0x38,0xc5,0x0e,0xb7,0x2f,0x1d,0x12,0x36,0xa1, - 0x2e,0xa9,0xd3,0xb1,0xe1,0x6c,0x4e,0xef,0xd9,0xed, - 0xed,0xb4,0x06,0x3f,0x6d,0xbf,0xbb,0xdf,0x9b,0xbc, - 0xeb,0x28,0x61,0x7f,0xa5,0xe0,0xa0,0xc4,0xb7,0x0d, - 0x3f,0x22,0x55,0x9b,0xa9,0xcd,0x96,0x5e,0x04,0x1c, - 0x4a,0xce,0x04,0xb2,0x36,0x2d,0x92,0x4f,0x2a,0xd4, - 0x89,0xc9,0xae,0xe4,0xe8,0x7e,0x48,0xd0,0xc2,0x98, - 0x08,0xe6,0x5a,0xc1,0x4f,0xc8,0x59,0xba,0x47,0x81, - 0x01,0x6b,0xb3,0xa8,0x53,0xeb,0x21,0x79,0xc1,0xa4, - 0x2a,0x3e,0x4d,0x69,0x6c,0xd6,0xd2,0xc2,0x3c,0xb4, - 0x26,0xef,0xb0,0x84,0x3c,0x86,0x42,0xa0,0x68,0x22, - 0x0b,0xd0,0x39,0x44,0x79,0x5c,0x3b,0xc6,0xc1,0xcf, - 0x0e,0xe1,0x81,0xe9,0x4b,0xcb,0xc1,0x6a,0xc9,0x49, - 0x51,0xe0,0xd4,0x56,0xcf,0xc2,0x9f,0xab,0xf4,0xde, - 0xa8,0x2d,0xe2,0x5a,0xba,0x26,0xf1,0xd2,0x71,0xf7, - 0x48,0xe4,0x75,0x08,0x82,0x4b,0x94,0xee,0x84,0x60, - 0x93,0x8c,0xd2,0xcf,0xc9,0x7a,0xab,0x4d,0x0b,0x64, - 0x33,0xc6,0x9c,0xd0,0x74,0x81,0xea,0x6b,0x6a,0xb9, - 0x51,0x40,0x4f,0xe8,0x71,0x5b,0x1b,0x35,0x21,0x13, - 0xfd,0x19,0x6d,0xec,0x85,0xc2,0x81,0xe9,0xd6,0x68, - 0xf4,0x18,0x74,0xe2,0x91,0x5d,0x1d,0x7b,0x2b,0x92, - 0x39,0x4d,0xb5,0x6e,0x27,0x37,0x2f,0xd0,0x44,0x73, - 0xb1,0x31,0x15,0xd4,0x34,0xa1,0xab,0xea,0xe4,0x49, - 0xe7,0xce,0x15,0x84,0x12,0xe3,0x2a,0x75,0x34,0x26, - 0x9a,0xc4,0x30,0x68,0xb1,0x42,0xb9,0x12,0x20,0x30, - 0xa1,0x63,0xc9,0x8c,0x99,0xb8,0x3f,0x29,0x09,0x9e, - 0x3a,0x0e,0x2f,0x5a,0x14,0x1b,0x8e,0xc8,0x16,0xf6, - 0x4d,0x4c,0xef,0x0f,0x36,0xd2,0x86,0xc7,0x13,0x2b, - 0x0e,0x0a,0x5c,0x5b,0x65,0x4f,0xc8,0x72,0x6b,0x4b, - 0x78,0x76,0xed,0x2f,0xa9,0x34,0x6a,0x5a,0x54,0x29, - 0xb9,0x4c,0xd0,0xa5,0x43,0x33,0x88,0x2f,0xe3,0x1c, - 0xb2,0x3f,0x59,0x6c,0xae,0x8d,0xb0,0x95,0xa6,0x4f, - 0x06,0x7c,0xae,0x0d,0x49,0x49,0x8e,0xbe,0x98,0x09, - 0x41,0x70,0x93,0x3f,0xe9,0xa0,0x4d,0xb0,0x3e,0xac, - 0xc7,0x72,0x01,0xe0,0xd3,0xcf,0x4c,0x09,0x82,0xbe, - 0x63,0x12,0x8a,0xeb,0x87,0x49,0x6a,0xfd,0x76,0xbe, - 0x4f,0x42,0x70,0xe9,0xfb,0x65,0xd4,0xf7,0x47,0x0b, - 0x48,0xd5,0x83,0xdb,0xda,0xaf,0xaf,0xaf,0xaf,0x9f, - 0x91,0xf7,0xa9,0x0d,0x4f,0xca,0xe1,0x3d,0x71,0x49, - 0x28,0x98,0x26,0x91,0x9b,0x77,0x37,0xb5,0xfa,0x1c, - 0x87,0x2d,0x4c,0x67,0xd5,0x76,0x7c,0xd7,0xbd,0x9b, - 0x60,0x92,0xfc,0x40,0x06,0x9c,0x6b,0x79,0xfa,0xae, - 0x44,0x1b,0xd8,0xa0,0xee,0x1b,0xe4,0x6d,0x83,0xf2, - 0x13,0xda,0x22,0xba,0x2e,0x65,0x9e,0x55,0xd1,0x84, - 0x9a,0x8b,0x2f,0xc9,0xbe,0x03,0x38,0x9d,0x45,0x09, - 0x7e,0x2a,0xb0,0x29,0x29,0xe9,0xb1,0x77,0x42,0xbb, - 0x53,0xa2,0x3b,0x25,0x1f,0x84,0xfe,0x4e,0xc8,0xf9, - 0xa7,0xe7,0x77,0x42,0x9c,0x12,0xd2,0x45,0xf1,0x8e, - 0xba,0x2e,0xfd,0x67,0xee,0x35,0xdf,0x65,0x6d,0xcc, - 0x7b,0x79,0x13,0xdf,0xfd,0x9d,0xa0,0xfe,0xad,0xbf, - 0xc7,0xf4,0x32,0x5c,0x52,0xb1,0xe5,0xd9,0xe8,0x62, - 0x4c,0x0f,0x6b,0x82,0xb3,0xb7,0x0a,0xa3,0x04,0x11, - 0x6f,0x26,0xc9,0x92,0xf3,0xf2,0x16,0x46,0x4c,0xbf, - 0x93,0xc4,0xee,0xd2,0x3d,0x4d,0x3d,0x55,0x33,0xad, - 0x14,0x11,0x13,0xb8,0x87,0x32,0x5e,0x4b,0x88,0x6a, - 0xa8,0x86,0x85,0x53,0xce,0x76,0xaa,0xa1,0x34,0x59, - 0xb1,0x0d,0x6e,0x53,0xb0,0xd8,0xb4,0x0d,0xa6,0xbe, - 0xb6,0xb6,0x4a,0xba,0x9a,0xb4,0xb3,0xa4,0x80,0xf7, - 0x5c,0x93,0x5d,0x4c,0xd8,0x1b,0x95,0x26,0x2d,0x09, - 0xa9,0x72,0x44,0xd8,0x41,0xb6,0x3e,0xc9,0x41,0xd4, - 0x27,0xa4,0x46,0x77,0xff,0xfd,0x8f,0xa7,0x2a,0xde, - 0x4c,0xea,0x44,0x2f,0x2d,0x31,0xbe,0x3d,0x4e,0x59, - 0xf6,0xfe,0x5c,0x85,0xf1,0x45,0xe7,0xeb,0xa1,0x10, - 0x3d,0x41,0xf7,0x3a,0x31,0xe5,0xde,0x65,0xba,0xd7, - 0x89,0x9b,0xb6,0x18,0x85,0x76,0xf1,0xd0,0x3a,0xd7, - 0xeb,0xf3,0xd8,0x4c,0x8b,0x4d,0xa4,0x5d,0xa7,0x03, - 0x94,0xe2,0xd9,0xa4,0x45,0xe7,0x9e,0x99,0x11,0xbf, - 0x23,0x13,0xd9,0xb1,0x50,0xa6,0x7d,0x4f,0xf7,0xac, - 0x71,0xd4,0x69,0xe0,0xdd,0x07,0xf5,0x77,0xab,0xf2, - 0xf4,0x84,0xed,0x36,0xf4,0xdc,0x9c,0xc5,0x93,0x81, - 0xb0,0x8b,0x1b,0xdb,0x7b,0xff,0xf4,0x99,0x07,0x24, - 0x75,0x0d,0x70,0xb4,0xfa,0xf5,0xe8,0x3b,0xec,0x71, - 0x54,0x8a,0x8c,0x43,0x31,0x2c,0xb9,0x01,0xbc,0x28, - 0x29,0x49,0x87,0x44,0xd2,0xde,0x48,0x02,0x6b,0xfa, - 0x3b,0x54,0xc1,0x6c,0xb2,0xf5,0xc9,0xa2,0x61,0xc3, - 0xb1,0xe9,0x8b,0x70,0x62,0xc0,0x77,0x50,0x21,0xb5, - 0xb7,0x12,0xb4,0x4d,0xfc,0x9e,0xbf,0x49,0xe8,0xe4, - 0xf3,0xca,0x98,0x58,0x56,0x9a,0x92,0xd8,0x24,0x92, - 0x4e,0x29,0x9a,0x44,0xf5,0x5c,0x2b,0x89,0x92,0xeb, - 0x0d,0xc1,0x8d,0x48,0x7b,0xaa,0x8f,0x61,0xf8,0x3d, - 0x36,0x69,0xed,0x56,0x12,0xfa,0x1d,0xc9,0xe6,0x62, - 0x63,0x19,0xa0,0x55,0xe2,0xc6,0xf9,0x7c,0x43,0xe4, - 0x4f,0x7b,0xb0,0x27,0x87,0x26,0x39,0xaa,0x49,0xb5, - 0x3a,0xa1,0x95,0xae,0xfd,0x91,0xde,0x95,0xe3,0xe1, - 0xb8,0xd6,0xc9,0x56,0x2f,0x05,0xae,0xfd,0x4d,0x49, - 0x7a,0x43,0xa6,0xfd,0x7e,0x26,0x95,0xaa,0x4f,0x0a, - 0xc6,0xc6,0xb3,0xad,0x16,0x13,0x69,0x49,0x0d,0x7b, - 0x44,0x5d,0xe4,0xf3,0x47,0x9b,0x16,0xe5,0x22,0xe9, - 0xf5,0x6f,0xe2,0x54,0x42,0xd5,0x87,0x89,0x4a,0x34, - 0xfa,0x72,0x8a,0xef,0x69,0xd2,0x6b,0x52,0xc5,0x4f, - 0x49,0xfa,0xd4,0x36,0x75,0xfb,0x72,0xf2,0x16,0x74, - 0x68,0xc2,0xa6,0x5b,0x91,0x62,0x2d,0x21,0xbc,0x29, - 0xe1,0x4a,0x06,0xa5,0x84,0x86,0x42,0x01,0xef,0xbc, - 0xd0,0xea,0x13,0xf7,0x83,0x09,0xd8,0x98,0xdc,0x1b, - 0x86,0x44,0xa9,0xa8,0x4d,0x77,0x23,0x97,0x4e,0xba, - 0x65,0x4a,0xb6,0xfa,0xfd,0x29,0x8a,0x77,0xff,0xdd, - 0x6f,0xdd,0x2c,0x1b,0x09,0xf1,0x4f,0x5b,0x55,0x53, - 0xef,0x75,0x0a,0xfc,0xa9,0x8f,0xee,0x38,0x39,0xd3, - 0xe1,0x9e,0x04,0x0f,0x87,0x60,0x8a,0x15,0x3f,0x24, - 0x26,0x0f,0x44,0x4b,0x3d,0xb4,0x5c,0x65,0x35,0xa1, - 0x64,0x9f,0xb4,0xea,0x9c,0x1e,0x0a,0xfd,0x7b,0xe2, - 0x8a,0x4c,0x89,0xe8,0x27,0xd5,0xe2,0xf2,0x00,0xf8, - 0xf9,0x2c,0xf5,0x3b,0xdb,0x5c,0x6f,0xf2,0x71,0x4b, - 0x07,0xc3,0x54,0xed,0xf5,0xe4,0xd2,0x7c,0x46,0xb9, - 0x35,0xa3,0x68,0x8c,0x7b,0x3e,0x8e,0x77,0x90,0x2a, - 0xf5,0x4f,0x6c,0x37,0xcc,0x3b,0xae,0xd4,0x6e,0xa1, - 0xa9,0x11,0x3d,0xc4,0x9c,0x95,0x44,0x5a,0x3f,0x4e, - 0x8f,0xe5,0x46,0xc7,0xb6,0x82,0x99,0xed,0x3b,0x0e, - 0x55,0xde,0x8a,0xac,0x5c,0xcd,0x97,0x29,0x24,0x7d, - 0x4e,0xb3,0x26,0xb6,0xf8,0x34,0x59,0xbc,0x9a,0x8b, - 0xf7,0x94,0x5c,0x6b,0x01,0xf6,0x09,0x52,0x36,0xed, - 0xdd,0xeb,0xba,0xae,0x5f,0xbf,0x7e,0xbd,0xf9,0x1f, - 0xb9,0xbd,0x36,0xe9,0x65,0xf5,0x03,0xaa,0x7b,0x9c, - 0x11,0x7f,0x66,0x53,0xf0,0x4d,0x89,0x20,0xe9,0x9a, - 0x51,0xbc,0x98,0xa6,0x46,0x93,0x7e,0x4f,0x7f,0xef, - 0x9b,0x24,0x49,0xf7,0x6d,0xf2,0x4a,0x9b,0xd0,0xad, - 0xe4,0x02,0x90,0x62,0xac,0xc6,0x24,0x47,0x30,0x9e, - 0x78,0x99,0x13,0x7a,0x95,0xce,0xc6,0x0d,0xf0,0x40, - 0x62,0xb9,0x5d,0x87,0xcb,0xed,0x01,0xfd,0x1c,0x8d, - 0x0b,0xee,0x0c,0x49,0x1a,0x4b,0x29,0x59,0xfa,0x49, - 0x80,0x5c,0x2f,0x35,0x65,0xb4,0x13,0xfc,0x3a,0x99, - 0x52,0x4e,0x7c,0x9c,0x4d,0xef,0x7b,0xca,0xe4,0x29, - 0xc9,0x72,0x63,0x73,0x1b,0x38,0x7e,0xbb,0x80,0xf5, - 0xe7,0x5c,0xb5,0x64,0x82,0x73,0x0c,0x64,0xe9,0x3b, - 0xa6,0xe0,0xb1,0xf1,0xae,0x4a,0x87,0xd8,0xa6,0xc2, - 0xa1,0xa4,0xcf,0x05,0x8f,0x61,0x9c,0x3b,0xc2,0xac, - 0x0e,0xbe,0x4c,0x6d,0xa4,0xe4,0xdb,0xe3,0xaa,0x63, - 0x92,0xf8,0xff,0x04,0xb6,0xdd,0xea,0x63,0x10,0x02, - 0xb5,0x21,0x93,0x6f,0xd7,0x68,0x42,0x99,0x88,0x13, - 0x20,0x7c,0x89,0x68,0x01,0xe0,0xcc,0x55,0x27,0x82, - 0x2e,0x05,0xae,0x44,0x96,0x0c,0xeb,0xe3,0xed,0xe0, - 0x22,0xa1,0xcf,0xd4,0xf6,0xa1,0xc3,0x30,0xe5,0x1e, - 0x97,0x88,0xbb,0x11,0xff,0x87,0x5c,0xbc,0x0d,0x42, - 0xf9,0xb8,0x8f,0x4d,0xe2,0x43,0x07,0x1e,0x8d,0x38, - 0x3b,0x1d,0xa7,0xdb,0x0c,0x74,0x13,0x5b,0xa6,0x75, - 0x43,0xd3,0x93,0x54,0xb8,0xa6,0x51,0xf2,0x94,0x40, - 0x4c,0x86,0xbb,0x49,0x54,0x72,0x3a,0xb7,0x7a,0x3b, - 0xbe,0xaf,0x83,0x8e,0x06,0x4d,0x07,0xff,0xb4,0x7f, - 0x3f,0x99,0xa8,0x9a,0x12,0x5f,0x3a,0xf0,0x7b,0xdb, - 0x7d,0x63,0xdc,0x2d,0x34,0x84,0xe3,0xce,0x71,0xb2, - 0x2d,0x71,0x49,0xf1,0x44,0x7f,0xa1,0xbd,0x90,0x92, - 0xd8,0x89,0xda,0xb2,0xa5,0x8a,0x3c,0x92,0xce,0x8d, - 0x48,0x12,0x90,0xb2,0x6a,0x03,0x25,0x2a,0xdc,0x46, - 0x0b,0x7a,0x43,0xec,0x4a,0x64,0xc6,0xbe,0x40,0x9c, - 0xf1,0xd9,0xa0,0x21,0x54,0x26,0x13,0x8f,0x22,0x59, - 0x69,0x0a,0x65,0x82,0x66,0xe9,0x80,0xde,0x4c,0x26, - 0x74,0xae,0x0c,0x65,0xdd,0xf7,0xe7,0x68,0x75,0x99, - 0xda,0x47,0x53,0x65,0x40,0x76,0x1e,0x34,0x1e,0x3c, - 0x11,0xa7,0xb7,0x1a,0x2f,0x74,0x10,0x26,0xb3,0xd7, - 0xc4,0x3f,0x71,0xbc,0x35,0xd2,0x55,0x49,0x9b,0x6e, - 0x9a,0x32,0x74,0xda,0x13,0x26,0x61,0xad,0xd4,0x06, - 0x98,0x92,0xd8,0x94,0xb4,0x75,0x5b,0x01,0x7a,0x2e, - 0x01,0x09,0x2b,0xed,0xbb,0x87,0x76,0x60,0x6d,0x24, - 0x0a,0xb6,0x24,0x4a,0x42,0xe3,0xe0,0xde,0x6b,0xb2, - 0xb8,0xe9,0x09,0x9d,0x5b,0x83,0xb4,0x0e,0x53,0x0b, - 0xd6,0xb4,0x83,0xec,0x77,0xe8,0x41,0x3d,0x99,0xc7, - 0x6e,0xdb,0x7a,0x4a,0x5e,0xd7,0x3f,0xef,0xd7,0x46, - 0x52,0x0a,0x09,0xd9,0x9d,0x5a,0xf9,0x13,0xef,0x30, - 0xad,0x2f,0xb7,0xf6,0x5d,0x1c,0xa6,0x78,0x46,0x67, - 0x0f,0xed,0xb3,0x89,0xe4,0x4d,0x09,0xf8,0xd4,0x06, - 0x77,0xc8,0x4d,0x6a,0xe7,0x6d,0x62,0x09,0x4d,0x4d, - 0x27,0x71,0x4d,0x77,0xef,0x89,0xdc,0x4c,0xf1,0x84, - 0xd4,0xd9,0x81,0x1e,0x52,0x69,0xff,0x38,0x10,0x62, - 0x4b,0x89,0x48,0x03,0x4e,0x34,0x91,0x4d,0xe8,0xbd, - 0x0e,0x84,0xb8,0x09,0xe6,0x17,0x65,0xe0,0x53,0x3b, - 0x6a,0xd2,0xb8,0xa1,0x8c,0xb9,0x25,0x29,0x35,0x1d, - 0x7a,0xc0,0x47,0x21,0x37,0xe5,0x95,0x42,0x66,0xfa, - 0xdc,0x54,0xd5,0xa5,0xc3,0x71,0xa3,0xf7,0x43,0x09, - 0xce,0x84,0x46,0x4d,0x2e,0xf2,0x0e,0x36,0x4d,0xdc, - 0x01,0xf5,0x05,0xd3,0x40,0x9e,0xc4,0x17,0x53,0x35, - 0x46,0xc9,0x49,0xaa,0x84,0xa6,0x24,0x71,0xfa,0xfb, - 0x49,0x71,0xfb,0x83,0x7f,0x6a,0x5a,0x83,0x24,0xa7, - 0x3f,0xf5,0xc4,0x93,0x56,0xc7,0x26,0xb1,0xea,0x87, - 0x8e,0xbe,0xc7,0x4f,0xda,0xb7,0xcb,0x83,0x75,0xb6, - 0x3a,0x17,0x7e,0x4d,0x9a,0xee,0x4b,0x93,0x4b,0x34, - 0x29,0x43,0x02,0x81,0xa1,0xe8,0xa8,0xe4,0x75,0x35, - 0x11,0xce,0xcd,0x77,0x25,0xed,0x9e,0xf8,0x7c,0x86, - 0xc3,0xbf,0x36,0xef,0x47,0xb4,0x9d,0xea,0x83,0xc4, - 0xf7,0x23,0x51,0xc9,0x94,0xf8,0x4d,0xd3,0xa2,0x9b, - 0xb6,0x8a,0x14,0x85,0x95,0x7e,0x66,0x42,0xfa,0x88, - 0xeb,0x42,0x1e,0x8a,0xf4,0x2e,0x54,0x41,0xdd,0xc5, - 0x98,0xa9,0xab,0x41,0x48,0x7f,0xe0,0x99,0xda,0xf1, - 0xfe,0xc9,0x84,0x75,0x32,0x21,0x4f,0x34,0x0c,0x4a, - 0x76,0xf4,0xdf,0x5d,0xfb,0xcc,0x20,0x69,0x95,0xc8, - 0xdf,0xee,0x9e,0xe8,0x1c,0x9d,0xec,0x57,0x96,0x96, - 0x40,0x0f,0xae,0x96,0x4b,0x7c,0x12,0x60,0xf1,0x56, - 0xdc,0x51,0x02,0xb4,0xd9,0x30,0x49,0xb2,0x7e,0x52, - 0xb0,0x85,0xc0,0x5f,0xfd,0xb0,0x71,0x1a,0x3b,0x53, - 0xdb,0x62,0xea,0x13,0x4e,0x3d,0x41,0xd7,0x53,0x24, - 0x62,0x35,0x05,0x9a,0x4d,0xeb,0x4f,0x49,0x82,0xd3, - 0x06,0x77,0x87,0x62,0x22,0x70,0xbb,0x04,0xd1,0xdd, - 0x83,0xbb,0x8e,0x6d,0x1b,0x6a,0xe3,0x89,0x65,0x36, - 0x4c,0x99,0x00,0x53,0xd3,0x3b,0x75,0x7f,0xef,0x90, - 0x89,0xd4,0x03,0xa7,0x6a,0x2f,0x55,0x2d,0x06,0x31, - 0x42,0x3b,0x6c,0xa8,0xe0,0x6a,0x12,0xc0,0x74,0x49, - 0x88,0x43,0x70,0x26,0x12,0x6b,0x30,0x66,0x7d,0x4b, - 0x00,0x1c,0x62,0xd9,0x93,0x8f,0x8d,0x10,0xe4,0x25, - 0xfa,0x48,0xa9,0x9d,0x91,0xda,0xa1,0xee,0x3d,0x52, - 0x62,0x1b,0xd6,0x59,0xe9,0x35,0xb8,0x96,0xeb,0x94, - 0x98,0x13,0x37,0x71,0xcb,0x59,0xeb,0xe8,0x2a,0xa1, - 0x66,0xf0,0xee,0x2b,0xb5,0xea,0x52,0x5b,0xd1,0x25, - 0xea,0xa6,0x30,0x1c,0x75,0x85,0x12,0xbf,0x4c,0x45, - 0x2a,0x07,0x9d,0x9a,0x87,0xb2,0x7c,0x7a,0x06,0x6e, - 0xad,0xf6,0x82,0x61,0x3b,0x75,0xb5,0x45,0xd9,0xf5, - 0x9e,0x09,0x95,0x73,0x09,0x6c,0xea,0x54,0x4c,0xe7, - 0x5f,0x3a,0x5f,0xb7,0xc8,0x11,0x25,0x2a,0x9b,0x84, - 0x78,0x13,0x23,0x37,0x93,0x76,0x09,0xa5,0x49,0x3e, - 0x69,0x53,0x0b,0x2b,0x11,0xe7,0x93,0x56,0xd1,0x30, - 0x14,0x55,0x14,0xeb,0x7f,0xcc,0x50,0x3f,0x75,0xd1, - 0x9d,0x16,0x25,0x71,0x5a,0x60,0x5a,0x85,0x4c,0x2d, - 0x47,0x34,0x27,0x4d,0xaa,0x11,0x14,0xe6,0x82,0x4d, - 0x52,0xfb,0x74,0x24,0x66,0x47,0xd0,0x92,0x36,0x43, - 0x51,0xcf,0x37,0x11,0xcd,0xd3,0x06,0xa7,0x7e,0xa9, - 0x33,0x39,0x4d,0x15,0xdf,0xdf,0x98,0xd0,0x6d,0x00, - 0x81,0x3e,0xc6,0x2e,0xcf,0xb6,0x26,0x6b,0x8d,0xb0, - 0x61,0xc9,0x13,0xe9,0xcd,0x03,0x26,0xb5,0x42,0xfb, - 0x7f,0xdf,0xa3,0xa5,0x53,0x10,0x52,0x0b,0x89,0x0d, - 0x9f,0xe6,0x2f,0xab,0xe3,0x9a,0xda,0x40,0x1b,0x33, - 0x51,0x7a,0xb7,0x1b,0x4d,0x10,0xf3,0x4e,0x8a,0xfa, - 0xfc,0x92,0x34,0x3f,0x50,0x28,0xe5,0x98,0x10,0x67, - 0xc4,0x79,0x27,0xfd,0xfb,0xaf,0x39,0x96,0x10,0xbf, - 0xef,0x9b,0xef,0xf0,0xc3,0xcf,0x19,0x62,0xc2,0xdb, - 0xcf,0x39,0xed,0x2c,0x35,0xf1,0x9c,0x0e,0x25,0x43, - 0x90,0x3f,0x93,0x65,0xca,0x86,0x97,0x97,0x7e,0x5e, - 0x79,0x6c,0x13,0x67,0x62,0x6a,0x4b,0xa4,0x38,0x4f, - 0x71,0xe5,0x36,0xa7,0x4c,0xc8,0x75,0x9a,0xf4,0x9b, - 0xf6,0x8d,0x33,0x69,0x76,0xa2,0x78,0x13,0x61,0xb7, - 0xb7,0xed,0xd2,0xfb,0xd0,0xe7,0xe4,0x38,0x34,0x53, - 0x6b,0x94,0x50,0xe0,0xb4,0x17,0xd2,0xbb,0xa7,0x38, - 0x37,0x09,0x02,0xba,0x9f,0x51,0xf4,0x55,0x87,0x64, - 0xd2,0x59,0xb5,0x4d,0xda,0x64,0xbd,0x58,0xe3,0x5b, - 0x4a,0x70,0x1d,0x57,0x88,0xf6,0xd0,0x96,0xe7,0x93, - 0x0a,0x86,0x37,0x2f,0xb0,0x29,0xab,0x74,0xa3,0x8b, - 0xd3,0x22,0x9e,0xd0,0x8e,0x09,0x4d,0x21,0x36,0xb8, - 0x42,0xc6,0x6a,0xfe,0xf7,0xc9,0x61,0x95,0xaa,0x4e, - 0xe2,0xe4,0xe8,0xbd,0x4d,0xbd,0xf0,0xa9,0x75,0xe3, - 0x26,0x8b,0x5c,0x6b,0x66,0xf2,0x63,0xdb,0xb0,0xff, - 0xd3,0x22,0xd2,0xf7,0xaf,0x87,0x5a,0xe7,0x53,0x6c, - 0xfc,0x8e,0xa6,0x40,0xb8,0x71,0x5b,0x97,0x6b,0xb2, - 0x62,0x82,0x93,0x6c,0x7e,0x22,0x2a,0x4e,0xc1,0x33, - 0x8d,0xdc,0xba,0x35,0x9e,0xcc,0x3d,0xa7,0x44,0xc7, - 0x19,0xcd,0x4e,0xa2,0x9e,0xdb,0x09,0x49,0xb5,0x45, - 0x48,0xae,0xe0,0xb4,0x0f,0xa9,0x95,0xba,0x69,0xd3, - 0x74,0x41,0x44,0x15,0x29,0x6c,0x9f,0x7b,0x6f,0xe2, - 0x22,0x5f,0x22,0x77,0xcf,0x6d,0x0f,0xd6,0x12,0x29, - 0xa8,0x94,0x40,0xeb,0xba,0x4d,0xc6,0xc9,0x9b,0x3d, - 0x26,0xf7,0xbf,0x42,0x93,0x5b,0x5c,0xaa,0x44,0x41, - 0xd8,0xba,0x98,0xd3,0xd4,0x52,0x1a,0xbc,0x58,0x4c, - 0x2a,0x8e,0xba,0x50,0x44,0x5f,0x48,0x3e,0x80,0x6e, - 0x4f,0xbb,0xf8,0xec,0xda,0xa9,0x8e,0x13,0xe5,0x50, - 0xd0,0x4d,0x6c,0xd0,0xe7,0x4a,0xf6,0x2f,0x44,0xa5, - 0x08,0xf4,0x0f,0xbb,0x3e,0x82,0xa5,0x8a,0x45,0x6c, - 0x7b,0x8b,0x50,0x0a,0xf7,0x22,0xb4,0x35,0x81,0x19, - 0x9b,0xfb,0x98,0x90,0xa1,0x0d,0xe7,0x88,0xe2,0x85, - 0x9b,0x06,0xdb,0x78,0x85,0x51,0xd7,0x67,0x4a,0xbc, - 0xcf,0x39,0xff,0x20,0x40,0x09,0x36,0x4b,0xe6,0x76, - 0x49,0x29,0x78,0x2b,0x1c,0x48,0x59,0xf5,0x26,0x89, - 0x49,0x5a,0x17,0x1b,0x79,0xee,0x7b,0x22,0x68,0xea, - 0x83,0xa7,0xa9,0x8e,0xcd,0x68,0x3c,0x55,0xb0,0x9f, - 0x90,0x5b,0xfb,0xc8,0x30,0xc1,0x80,0x84,0x5e,0x4c, - 0xea,0xaa,0xa9,0xc2,0x76,0xe8,0x57,0xaa,0x20,0xf4, - 0xbe,0xc9,0xc4,0x71,0x4a,0x08,0xd2,0xc4,0x8b,0xd1, - 0x9d,0x59,0x57,0xc3,0xa9,0x4a,0x9c,0x50,0xcc,0xbf, - 0xfd,0x6c,0xe5,0x03,0x11,0xe7,0xca,0x71,0x7c,0xa8, - 0x55,0xe8,0x96,0x36,0x8d,0x82,0xd2,0xf3,0x4b,0x8a, - 0xe6,0x93,0x95,0xc4,0x54,0xdd,0x3b,0xc5,0xe9,0x0d, - 0x4c,0x6f,0x9e,0xc3,0xa1,0x9f,0x87,0xc2,0xe8,0x6d, - 0xec,0x7b,0x23,0x4c,0x38,0x29,0xa6,0xa7,0xc4,0x60, - 0x2a,0x04,0xfb,0x9e,0xfd,0x24,0xbe,0x4d,0x62,0xb2, - 0xdf,0x89,0xe4,0x31,0x88,0x48,0x7d,0x7d,0x7d,0x9d, - 0x89,0x68,0xbd,0x15,0xbc,0x75,0x71,0x2f,0x8d,0x39, - 0x6f,0xf6,0xc2,0x80,0xbc,0xc6,0xb6,0xdf,0xa6,0x43, - 0xb1,0x91,0xc9,0xa0,0x6b,0x4e,0x9e,0x94,0xa9,0xb8, - 0x26,0x39,0x96,0x0d,0x0d,0xa4,0x8b,0x21,0xa6,0xf1, - 0x7d,0x97,0xf4,0x26,0xe4,0x75,0x3a,0x4f,0xc2,0xf9, - 0x11,0xd7,0xa0,0xde,0x63,0x7a,0xc7,0x53,0x57,0x28, - 0xa1,0x68,0xd0,0xaa,0x7c,0x7b,0x4e,0x29,0x99,0xdd, - 0x68,0x0b,0xbe,0xe8,0xa5,0x4e,0x46,0x9a,0xd4,0x9f, - 0x9b,0x48,0x65,0xd4,0x13,0x4e,0xfc,0x1c,0x33,0x79, - 0x50,0x34,0x15,0x24,0x1b,0xb4,0x26,0x6f,0x93,0x89, - 0x80,0x9b,0xa6,0xb5,0x36,0x5c,0xa0,0xad,0x77,0xda, - 0xa4,0x02,0x9b,0xac,0x49,0x92,0x4b,0x73,0x92,0xa4, - 0xdf,0x40,0x99,0x49,0xd6,0x5d,0x95,0x8d,0x37,0x52, - 0x05,0x93,0x7c,0xfb,0x44,0xa8,0x9d,0x9e,0x0b,0xad, - 0xa3,0xd0,0xbb,0x2f,0xba,0xe7,0xc9,0xd7,0x4e,0x2b, - 0x4d,0x73,0x3d,0xb5,0x19,0x0c,0x48,0x50,0xfe,0x24, - 0xe4,0x39,0xa1,0xaf,0xd3,0x67,0x6b,0x65,0x39,0x4c, - 0xd7,0x15,0xf9,0xfa,0x84,0x36,0x5f,0x29,0x59,0x71, - 0x93,0x3c,0x4a,0x56,0x56,0x7f,0xc3,0xfb,0x48,0x64, - 0xc9,0xcb,0xf0,0xa1,0xe4,0x79,0x8f,0xee,0xe8,0x5a, - 0x0c,0x4e,0xf1,0x92,0xd6,0x7e,0xf7,0xe7,0xd2,0xa9, - 0x95,0x69,0x52,0x36,0xdd,0x77,0x4a,0x4e,0x09,0x5d, - 0x0b,0xad,0xb1,0x22,0x01,0xd5,0x34,0xa8,0xe1,0x62, - 0x20,0x25,0x55,0x44,0x75,0xa0,0xd8,0xb8,0x55,0xc1, - 0xa7,0xef,0x9f,0xb4,0x9d,0x52,0xe1,0xd5,0xc5,0x31, - 0x3f,0x99,0xee,0x53,0xdd,0x9b,0xe9,0xb9,0x93,0x80, - 0xe4,0xc4,0x9f,0xd1,0xdf,0x99,0xda,0xe3,0x9b,0x33, - 0xeb,0x13,0x5a,0xc4,0xd6,0x28,0x35,0x81,0x20,0xb4, - 0x8e,0xa6,0x22,0x76,0x23,0xf8,0xf9,0x43,0x2f,0x49, - 0xba,0x19,0xf4,0x50,0xd5,0xe9,0xd9,0x05,0xb8,0x94, - 0x10,0xd0,0x43,0x9a,0xc8,0x8f,0x93,0x9a,0x29,0x65, - 0xb6,0xe9,0xc0,0xdc,0xda,0x20,0xd0,0x75,0x91,0xbe, - 0x4d,0x0a,0x2c,0x09,0xaa,0x4e,0x88,0x59,0xe2,0x45, - 0xd1,0x08,0xa5,0x06,0x7e,0xba,0xff,0x7e,0xc0,0x4d, - 0x46,0x80,0xc9,0x9f,0x6a,0x43,0x12,0x9d,0x9e,0xf5, - 0x24,0xc1,0xee,0x0e,0x9b,0x89,0xaf,0xb0,0x9c,0x12, - 0x9a,0xee,0xb1,0x26,0x5f,0xa1,0xd4,0xb2,0xd4,0x76, - 0x67,0x3a,0xd0,0x92,0x5b,0x7c,0xfa,0x1d,0x6d,0xeb, - 0x26,0x04,0x46,0x4d,0x84,0x87,0xb6,0x56,0x6d,0x2d, - 0x45,0xf4,0x33,0x69,0x6f,0x6c,0xf6,0x99,0x33,0x3f, - 0xd6,0x04,0xdc,0x90,0xc5,0x2b,0xc5,0x8f,0xe4,0x3c, - 0x4e,0xc9,0xdf,0x76,0xc8,0x43,0x5b,0x64,0x54,0x6c, - 0x4c,0x13,0x3e,0x89,0x1b,0x32,0xf1,0x7d,0xe8,0x11, - 0x27,0x32,0xeb,0x94,0x98,0x6c,0xd0,0x3b,0x8a,0xff, - 0x93,0x48,0x1e,0x21,0x8a,0xc9,0x30,0x7a,0x2b,0x9f, - 0x41,0xeb,0x40,0xd0,0xc3,0x72,0xb4,0x8a,0x94,0x9c, - 0x81,0x0c,0xc2,0x83,0x1e,0x30,0x15,0x96,0x13,0x72, - 0xf1,0x37,0xd3,0x78,0x69,0x8d,0x4c,0x44,0xf6,0xa5, - 0xaf,0x61,0x6c,0xe3,0x4e,0x72,0x35,0x6e,0x9f,0x4d, - 0x44,0xf9,0x0d,0x50,0xa3,0x52,0x2c,0xd3,0x3e,0xbe, - 0xae,0xcb,0x73,0x80,0x54,0x92,0x5d,0x2b,0xc5,0x24, - 0x11,0x9e,0x0e,0x94,0x04,0x4f,0x85,0x09,0x92,0xda, - 0xa2,0x0b,0xd3,0x44,0x92,0x7b,0xf0,0x44,0xb8,0x4a, - 0x95,0xdd,0x64,0xde,0xe6,0x78,0x1d,0x9f,0x64,0xcc, - 0xae,0x4a,0x4b,0x28,0x16,0x91,0x03,0xd3,0x06,0xfa, - 0x1b,0x1b,0x93,0x94,0xf8,0xea,0x82,0xa4,0xf1,0xfe, - 0xc9,0xeb,0x6c,0x32,0x5e,0x24,0xb4,0x47,0xaa,0xab, - 0x4a,0xef,0x23,0x55,0x8a,0xf4,0x3d,0x0e,0x5e,0x27, - 0xe9,0xf7,0x94,0x78,0xeb,0xf7,0x29,0xf2,0x42,0x10, - 0xfc,0xe6,0x30,0xdc,0x20,0x59,0x94,0x40,0xa6,0xfb, - 0x4a,0xa2,0x82,0xf0,0x59,0xe5,0xc4,0xee,0x26,0xce, - 0x4d,0x42,0x1c,0xc9,0xb0,0xd6,0x5d,0xeb,0x24,0x93, - 0xff,0xc9,0x84,0x6a,0x98,0x12,0xab,0xa4,0x69,0x12, - 0xd0,0x80,0x4a,0xfc,0x8f,0x69,0x68,0x20,0x19,0xd7, - 0x4e,0xeb,0x2d,0x0d,0x97,0x48,0x22,0x58,0x09,0x8d, - 0x4c,0xc5,0xcd,0x54,0x04,0x53,0x45,0xef,0xa6,0x26, - 0xa7,0x67,0x94,0x34,0xa0,0x36,0xfb,0x7c,0x8a,0xfd, - 0x93,0x4a,0xfc,0x26,0x71,0xd8,0xd8,0x4b,0x50,0x4b, - 0x2b,0xdd,0xd3,0x46,0x8c,0x77,0xea,0xc4,0x6c,0xce, - 0xa3,0xc9,0x61,0x7d,0xf3,0x7b,0x53,0xbb,0x72,0xe2, - 0xf0,0xe8,0xb9,0x4b,0x46,0xdd,0x2a,0xb4,0x98,0xae, - 0xe3,0x91,0x00,0x6d,0x79,0x3b,0xf4,0x81,0xcd,0xd8, - 0xed,0xaf,0x1f,0x4c,0x82,0xde,0x26,0xcd,0x83,0x69, - 0xf1,0xa7,0x11,0xe8,0x4d,0x9b,0xef,0xf2,0xd3,0x63, - 0x35,0x3d,0xe0,0x84,0x8e,0x25,0x18,0x56,0x0f,0x0f, - 0x6a,0x21,0x68,0x52,0xe2,0x0e,0x57,0x7a,0xce,0x5a, - 0x39,0x4f,0x28,0x13,0x5d,0x1f,0xf5,0xdd,0xa7,0x89, - 0x9c,0xb4,0xa9,0xb6,0xc2,0x83,0x84,0x1e,0xba,0xc4, - 0x30,0x25,0x6a,0x53,0xc0,0x4a,0x87,0xca,0x34,0xca, - 0xba,0x99,0x62,0x70,0x07,0x12,0x19,0x8b,0x9a,0x77, - 0x5d,0xbd,0x30,0x99,0xd4,0xcb,0xa9,0x65,0x49,0x6b, - 0x81,0x50,0x48,0xa8,0xd0,0xff,0xca,0x00,0xf5,0x03, - 0xa4,0xb8,0xc8,0x4e,0x42,0xd6,0x42,0x4d,0x45,0x46, - 0x4f,0xd4,0xf4,0xd9,0xd1,0x33,0x37,0xe8,0x01,0xee, - 0xef,0xed,0x08,0xb7,0xe3,0xc4,0xb8,0x16,0x15,0x25, - 0x7b,0x93,0x9b,0xb7,0xdb,0xaf,0x89,0xc8,0xeb,0xf8, - 0x19,0xd3,0xbd,0x2e,0x0e,0xe6,0xda,0xfa,0x23,0x4e, - 0x48,0xd3,0x94,0x08,0xba,0xc3,0x91,0xac,0x3a,0x36, - 0x96,0x11,0x9b,0x42,0x7b,0xab,0x65,0x46,0x07,0xf6, - 0x27,0x49,0xd2,0x27,0xfb,0x12,0x8c,0x85,0x1f,0x22, - 0x81,0x9b,0xc1,0xa6,0x54,0xfc,0x6f,0xb9,0x71,0xd3, - 0xe4,0xf3,0xc4,0x43,0x4a,0x74,0x80,0xc9,0x8f,0xcc, - 0x7d,0xef,0x6b,0x33,0xa6,0xb8,0x19,0x8b,0xa6,0x44, - 0x64,0x52,0xa5,0x74,0x0f,0x21,0x1d,0xdc,0xa9,0x72, - 0x4d,0x6d,0x91,0xb4,0x51,0xdd,0x4b,0x4b,0x48,0xd1, - 0xd4,0xf2,0xd2,0x6b,0x32,0x95,0x74,0xa5,0x84,0x63, - 0x82,0xff,0xa6,0x76,0x02,0xfd,0x8e,0xeb,0x0b,0x53, - 0x45,0xb4,0xd9,0x0c,0x94,0x34,0x4f,0x81,0x6c,0x52, - 0xef,0xed,0xef,0xa3,0xeb,0x9a,0x50,0x60,0xda,0x6e, - 0xaa,0xad,0x41,0xa8,0x9a,0x3a,0xba,0x44,0xd5,0x05, - 0x36,0x97,0xec,0x4e,0x93,0x93,0xca,0x59,0x9b,0xf6, - 0xc1,0xb6,0xca,0x9e,0xac,0x4d,0xa6,0xb6,0x8a,0x7c, - 0xf7,0x9b,0xce,0x8e,0x43,0x02,0x1d,0x5a,0x4b,0x13, - 0x71,0x7f,0xe3,0x3b,0x48,0x1c,0xaf,0x09,0xe6,0xd7, - 0x21,0x05,0x52,0x48,0xa7,0x04,0x35,0x15,0x37,0xc9, - 0x64,0x78,0x63,0x41,0x40,0x28,0xf1,0x86,0x7f,0x36, - 0x4d,0x0b,0xea,0x3b,0xda,0x38,0x9c,0x87,0xe9,0xba, - 0x11,0x6d,0x74,0xba,0x46,0x0b,0x3a,0x40,0x4d,0x3a, - 0x32,0x53,0xf2,0xbf,0xe1,0x88,0x50,0xe1,0x3c,0x75, - 0x14,0x36,0x85,0x97,0x9b,0x56,0x4b,0xb1,0x88,0xd6, - 0xf5,0xe6,0x3b,0x08,0x81,0xea,0x86,0xa1,0x09,0xc1, - 0xa6,0x29,0x55,0xe2,0x82,0x51,0x92,0x93,0x50,0xfd, - 0x8d,0xb5,0xca,0x94,0x50,0x26,0x9e,0xdb,0x27,0x2a, - 0xe4,0x01,0x31,0xfb,0x59,0x77,0xbf,0x93,0xd6,0xc2, - 0x04,0x63,0xa6,0x16,0x41,0x4a,0x42,0x36,0x8e,0xd7, - 0xfa,0xc0,0xa7,0xc5,0xbb,0xd1,0x45,0x50,0x4f,0x97, - 0xf4,0x3b,0xd4,0x9f,0x4e,0x1a,0x0d,0xa9,0xfd,0xb0, - 0xd1,0x93,0x70,0x09,0xc8,0x54,0x21,0x28,0x31,0x75, - 0x6a,0x59,0x4c,0xed,0x83,0x14,0x20,0x53,0x6f,0x7e, - 0x22,0x27,0x6e,0x82,0x4b,0x82,0xb8,0xa7,0xf6,0xd8, - 0x34,0x51,0x70,0xb5,0xc9,0x38,0xf0,0xbe,0x1a,0x93, - 0xe9,0x4d,0xdf,0x7e,0x12,0x18,0xfb,0xb4,0x75,0xab, - 0x9f,0xef,0x34,0xa1,0xb6,0xe4,0xd7,0x94,0xec,0x11, - 0xbf,0x26,0xb5,0x20,0xa6,0x11,0xd7,0x64,0x6c,0x39, - 0x21,0x8f,0x29,0xb9,0xee,0x86,0x8a,0x03,0xfa,0x52, - 0xf7,0x14,0xd9,0xf6,0x7e,0x48,0x07,0x2c,0xad,0x07, - 0x37,0x11,0xba,0xf1,0xbb,0x4b,0x88,0x73,0x18,0xed, - 0xc6,0x69,0x3e,0x35,0x82,0x56,0x94,0x6c,0x5a,0x93, - 0x2a,0xa2,0x7a,0xff,0x79,0x42,0x54,0x26,0xee,0x5c, - 0xda,0x53,0x0e,0x85,0x4d,0x42,0xb5,0xd3,0x54,0xd7, - 0x84,0x50,0x6c,0xa8,0x07,0x1b,0x3a,0x87,0x43,0xd4, - 0xd4,0xec,0xda,0x5d,0x33,0xf1,0x69,0xd3,0xfb,0x27, - 0xf1,0xcb,0x4f,0x0c,0x66,0x29,0x76,0x25,0x72,0xf8, - 0x27,0xa8,0xad,0xe3,0xe5,0x7c,0x32,0xd0,0x12,0xce, - 0xe0,0x9f,0x89,0xaf,0x4d,0x5c,0x9d,0x00,0x14,0x97, - 0x80,0xbd,0x9c,0xe8,0xd3,0x36,0xf3,0xd5,0xec,0x71, - 0x1a,0x6f,0x74,0x7d,0xce,0x4f,0x5a,0x6d,0x49,0x3b, - 0x22,0x1d,0xdc,0x34,0xa9,0xe6,0x78,0x48,0x8e,0xa1, - 0x4f,0xc1,0x26,0x55,0xb9,0x93,0xff,0xcf,0x64,0xc8, - 0xa7,0xad,0x09,0x87,0x4e,0x7d,0xda,0x73,0xd7,0xc3, - 0x61,0x9a,0x94,0xda,0x10,0xd3,0xa6,0x60,0x2e,0xd7, - 0x53,0x93,0xca,0xf6,0x27,0x15,0xd9,0xa4,0x3f,0xb2, - 0x45,0x01,0xb7,0x6a,0xb5,0x89,0xd7,0x45,0x68,0xc6, - 0xd6,0xe4,0x72,0x33,0x82,0xea,0x12,0xb7,0x84,0x34, - 0xd0,0xda,0xdf,0x26,0x1d,0xea,0xfb,0x33,0x40,0xd6, - 0x95,0x44,0x45,0x69,0x5f,0x52,0x02,0xa9,0x6b,0x83, - 0xb8,0x52,0x9b,0xf6,0x27,0xe9,0x87,0x6d,0xdb,0x37, - 0x01,0xbd,0xfb,0x69,0x81,0xff,0xf9,0xf3,0x47,0x7f, - 0xaf,0xb6,0x48,0x25,0xa1,0x71,0x2e,0x59,0xdf,0x4c, - 0xc3,0x38,0x84,0x29,0xa0,0xee,0xb5,0xa9,0xfa,0xa7, - 0x35,0x3d,0xb5,0xca,0x27,0x61,0xba,0x6d,0x2c,0x18, - 0xf6,0x7c,0x11,0x87,0x86,0xe2,0x47,0x42,0xbf,0x13, - 0x42,0x4a,0x3c,0xc8,0x4f,0x54,0x93,0x13,0x62,0xdf, - 0xdf,0x4d,0xe2,0x4b,0x92,0x36,0x59,0x8a,0x03,0xd3, - 0x30,0x8e,0xfb,0xfc,0x09,0xfd,0xa7,0xe2,0x77,0x1a, - 0x80,0xd9,0x78,0x7f,0x4d,0xda,0x6a,0x53,0xb7,0x29, - 0xd1,0x63,0x5e,0x9b,0xcd,0x99,0x16,0xb2,0x2c,0x9a, - 0x72,0x81,0x6b,0x82,0xc5,0x5c,0xb5,0xb3,0x91,0x4c, - 0x4f,0x87,0xc7,0x66,0xe2,0x68,0x92,0xd4,0xde,0x8c, - 0x41,0x3b,0x8e,0xce,0x56,0xa4,0xae,0x07,0xe3,0x34, - 0x9d,0xa6,0x1b,0x42,0x37,0xdf,0x76,0xaa,0x2a,0x4d, - 0xb2,0x6d,0x21,0xe5,0xc9,0x52,0x64,0xeb,0x66,0x3d, - 0x3c,0xa7,0x72,0xfc,0x9e,0x34,0x0e,0x3b,0x69,0x30, - 0x6d,0x92,0x96,0x09,0x42,0xdf,0xb4,0x63,0x15,0x71, - 0x9c,0xc8,0x7d,0x74,0x70,0x27,0xa4,0x6e,0x83,0xe2, - 0x6d,0xac,0x59,0xb4,0x15,0xa4,0xd3,0x83,0xc9,0x17, - 0x8f,0xda,0xda,0xa9,0xd2,0x53,0xef,0xa4,0x29,0x81, - 0x1f,0xc8,0xd2,0xd5,0xf9,0x0b,0xae,0x92,0x9e,0xa6, - 0x5d,0xfa,0xb8,0xfb,0x86,0xfb,0x30,0xb5,0x56,0xb7, - 0x55,0x74,0x12,0x90,0x04,0xd4,0xa3,0xd2,0xe4,0xe5, - 0xa6,0x0d,0x3c,0xdd,0xa3,0x6b,0xdd,0x86,0x91,0xfd, - 0xd5,0x44,0xee,0xe6,0x5e,0xff,0x06,0x6d,0xd8,0xc4, - 0x9b,0xa9,0x75,0x99,0xb4,0xd0,0xa6,0x35,0x40,0x6d, - 0x20,0x25,0xe9,0x0e,0x6d,0xc2,0xf5,0xfd,0x6f,0x49, - 0xc2,0x29,0x71,0x99,0xc4,0x27,0x37,0xf7,0x48,0x05, - 0xae,0x3b,0xbf,0x28,0x26,0x87,0x7d,0x5f,0x30,0xd0, - 0x62,0x51,0xe9,0x14,0x83,0xf5,0x7f,0x34,0x08,0x51, - 0x55,0xff,0x72,0x80,0x54,0x85,0x71,0xb3,0x10,0xfb, - 0x17,0xa8,0x6e,0xc5,0x54,0x55,0x4d,0xbd,0xd2,0x04, - 0xaf,0xa5,0x17,0x97,0x92,0x95,0x84,0x0c,0xa4,0x51, - 0x41,0xea,0xbf,0x4e,0x90,0xba,0xb6,0x16,0x3f,0x49, - 0xe2,0x1c,0xcc,0xba,0x39,0x80,0x36,0xc9,0x90,0x43, - 0xb3,0xa6,0x91,0x43,0x87,0x78,0x4d,0x13,0x7f,0x89, - 0x74,0x3e,0x79,0xc6,0xa4,0x76,0x18,0x05,0xb0,0xa0, - 0x20,0x3d,0x26,0x1a,0x93,0x2a,0xeb,0x26,0x60,0x25, - 0x2e,0xc5,0x46,0x9b,0xc2,0x49,0x4f,0x50,0xff,0x7e, - 0xab,0x98,0xba,0x2d,0x68,0x26,0xf4,0x8b,0xda,0x3e, - 0x0a,0x21,0x6c,0x10,0xd9,0xef,0x04,0xf7,0xe7,0x7f, - 0xdf,0x85,0x53,0x51,0x41,0x34,0x39,0x73,0x93,0x52, - 0xbc,0x5b,0x57,0xe9,0xc0,0x4b,0x85,0x42,0x5a,0x2f, - 0xa4,0x0c,0xee,0x5a,0x40,0x44,0xc8,0x4f,0x7b,0xc6, - 0x69,0xc1,0x24,0x2e,0xe1,0xa7,0x13,0x49,0x89,0xdf, - 0xb8,0xd1,0x8d,0x71,0x87,0x4b,0x42,0x63,0x3f,0x6d, - 0xa1,0x4d,0xad,0x7c,0x17,0x9b,0x53,0xcb,0x8c,0x88, - 0xd8,0xa6,0xfd,0x12,0x89,0xbe,0x29,0x8e,0x6f,0xa6, - 0x84,0x93,0xfe,0xd1,0xf4,0x67,0x9b,0x64,0xea,0x13, - 0xb9,0x12,0xc7,0x8f,0xdb,0xf0,0x7d,0x27,0x0a,0xc4, - 0x27,0xe4,0xea,0x29,0x8e,0x4e,0xdc,0xbf,0x4d,0x12, - 0xf9,0xe8,0xae,0x90,0xb7,0xca,0x64,0x63,0x41,0x90, - 0x6a,0x6a,0x21,0x25,0x25,0xcc,0x84,0x04,0xa5,0x91, - 0x4e,0x77,0xdd,0x24,0x18,0xb5,0x21,0xcb,0x92,0x77, - 0xcb,0x06,0xf6,0x4b,0x81,0x85,0xd0,0x89,0x04,0x55, - 0x27,0x91,0xc9,0x0f,0x4c,0xbb,0x51,0x35,0x7a,0xa3, - 0x83,0xb3,0xd5,0xde,0x98,0x84,0xfc,0xb6,0xd3,0x65, - 0x21,0x19,0xaa,0x69,0xd3,0xd3,0x3a,0x55,0x94,0x2e, - 0xc1,0xa8,0x29,0xd0,0x25,0x5e,0xd6,0xb4,0xa6,0x75, - 0x5f,0xa4,0x31,0x64,0x73,0xa0,0x54,0x58,0xb7,0xb5, - 0x69,0xb1,0xba,0x77,0xf7,0x7a,0xbd,0x4a,0x93,0x03, - 0xb2,0x84,0xa1,0xd6,0x00,0x4d,0x17,0x91,0xbb,0xf5, - 0x05,0x04,0x59,0x25,0x81,0xa7,0xc4,0x27,0x91,0x6d, - 0x8d,0x2e,0x57,0x51,0xcb,0x69,0x8b,0x8e,0xd0,0xde, - 0xbd,0x7f,0xcf,0x49,0xf8,0x27,0x04,0x58,0xdb,0x70, - 0x8a,0xa0,0x13,0x7a,0xbb,0xf1,0x3e,0x9a,0xda,0x2b, - 0x09,0xcd,0xdb,0x70,0x49,0x3e,0x6d,0xdd,0x26,0x12, - 0x2e,0x25,0x1f,0xcb,0xd8,0x66,0xd1,0x70,0xfa,0xfd, - 0xa9,0x8d,0x32,0x4d,0x2f,0x4f,0x14,0x80,0x24,0x07, - 0x30,0xb9,0xc9,0x7f,0x72,0xa0,0x6f,0x74,0xeb,0x52, - 0x5b,0x9f,0xce,0xb0,0x04,0x60,0x4c,0x9f,0xfd,0xe9, - 0xfb,0xdb,0x90,0xa0,0xe9,0x8c,0xd8,0xca,0x60,0x90, - 0x74,0x89,0x3e,0xf7,0xdf,0xc9,0x08,0xcf,0xb9,0x6f, - 0xa7,0xac,0x70,0x72,0x6f,0xa7,0x8c,0x31,0x21,0x15, - 0xb4,0xa9,0xb6,0x87,0xa0,0x2e,0x5e,0x32,0x62,0x23, - 0x12,0x1a,0x1d,0x70,0x29,0x10,0xa4,0x0c,0xd9,0x11, - 0x26,0xd3,0x7d,0x7d,0xda,0x6a,0x4a,0xd5,0xda,0x36, - 0x03,0x9f,0xe0,0xdf,0xd4,0x6e,0xd9,0xc2,0xf0,0x93, - 0xae,0x13,0xa9,0x39,0x13,0x77,0x62,0xd2,0xdf,0xa1, - 0x9f,0xa7,0xe7,0x4d,0xc9,0xd0,0x44,0x6c,0x4d,0xd5, - 0x4b,0x6a,0x4b,0xa6,0x60,0xe9,0xd0,0xb8,0x8d,0xbf, - 0xd8,0x64,0xbf,0x32,0x29,0xb0,0xf6,0x22,0xa8,0x4f, - 0x9a,0xf4,0xa4,0x8e,0xc8,0x9f,0x50,0x19,0xd6,0x94, - 0x60,0x74,0x23,0x52,0xb7,0x0f,0xdd,0xc0,0x06,0xd9, - 0x2b,0xb8,0xd6,0xdb,0xa6,0x7d,0x29,0xcf,0xea,0x61, - 0xf8,0x49,0xe6,0xa2,0xfa,0x7d,0xee,0xf9,0x3b,0xe4, - 0xfb,0x93,0x03,0x65,0xe1,0xd5,0xb6,0xda,0xdf,0x9a, - 0x80,0x4c,0xeb,0x29,0x59,0x18,0xa4,0x3d,0x90,0xc8, - 0xe4,0x69,0x78,0x63,0xda,0x8b,0x7f,0xa3,0x0f,0xa4, - 0xd7,0x44,0xdf,0x41,0x45,0xf9,0x24,0x77,0x42,0xc3, - 0x15,0xa9,0xb8,0x9c,0x38,0x52,0x66,0x1f,0xbd,0xad, - 0x47,0x42,0x6b,0x3a,0xc1,0xbc,0x9b,0x47,0x6f,0x88, - 0xd4,0xd3,0xf3,0xa7,0x6b,0xed,0xdf,0xb9,0xb5,0x10, - 0xd9,0xb4,0x07,0x13,0x2a,0x9b,0xf8,0xa4,0x14,0x03, - 0x3a,0xe2,0xfa,0x3b,0xf1,0x6f,0x9c,0x4e,0xc3,0x94, - 0x8c,0xb8,0x97,0x9b,0x44,0xf1,0x88,0x4c,0x9c,0x82, - 0xf2,0xc6,0x08,0x70,0x52,0x10,0xa5,0x80,0xe9,0xae, - 0x29,0xf5,0x31,0x53,0x80,0x98,0xaa,0x31,0x0a,0x9c, - 0x1b,0x9e,0x89,0x4b,0xe4,0xe8,0xbd,0x90,0x9b,0x3c, - 0xbd,0xdb,0xd4,0x2e,0xdb,0x1a,0x87,0x4e,0x7d,0x63, - 0x45,0x30,0x36,0xc9,0x5d,0xdf,0xc8,0x9b,0x60,0x47, - 0x1b,0x83,0x0e,0xcd,0xad,0xa0,0x1d,0x05,0x92,0xcd, - 0xc4,0xca,0x46,0x2b,0x89,0x12,0xf6,0x6d,0xb2,0x3a, - 0xf1,0x83,0xdc,0x64,0x10,0x04,0xde,0x72,0xf7,0xeb, - 0xfc,0xc9,0xa6,0xc4,0x7d,0x33,0x45,0xda,0x55,0x9f, - 0xdb,0xa0,0x17,0xf2,0x97,0x36,0xc5,0x01,0x25,0x7b, - 0xee,0x00,0x51,0x14,0x20,0x19,0xa4,0x6e,0x5a,0xbb, - 0x14,0xbb,0x1c,0xbf,0x61,0x12,0x50,0x4c,0xed,0xaa, - 0x84,0x04,0x9d,0x73,0xae,0x3f,0x7f,0xfe,0x4c,0xca, - 0xd5,0xab,0xfb,0x86,0x84,0xaa,0xce,0x3f,0x84,0xac, - 0x71,0xfd,0xa5,0xfd,0x44,0x89,0xe1,0x94,0x54,0x25, - 0xcf,0x46,0xf5,0x2a,0xdc,0x0c,0x25,0xa4,0xc3,0x3b, - 0xb5,0x82,0x12,0x52,0xb4,0x71,0x6c,0xdf,0x26,0xbd, - 0x13,0x02,0x48,0xc9,0x5d,0x42,0xb7,0xd5,0xee,0xe6, - 0x9f,0x3f,0xfa,0x4c,0x09,0xba,0x7f,0x77,0x07,0x4a, - 0x36,0x3c,0x22,0xf5,0x93,0xdc,0x68,0x2f,0x25,0x4e, - 0x5e,0x9a,0xaa,0x7e,0x9c,0x8d,0x34,0x6d,0xe0,0xda, - 0x5d,0x1b,0xee,0xcd,0x86,0xeb,0xa2,0x23,0x96,0x9f, - 0x40,0x7d,0x74,0x00,0x4f,0x53,0x1d,0x53,0x0f,0x9b, - 0x0e,0x6a,0x22,0x1d,0x6f,0x46,0x23,0x27,0x44,0x66, - 0xdb,0x4e,0xd9,0xc2,0x8c,0x14,0x70,0x26,0x2f,0xb4, - 0x0d,0x64,0xbc,0x99,0x20,0x48,0xc4,0xb3,0xe9,0x9a, - 0xa7,0x7e,0x70,0x82,0xdc,0xa7,0x67,0xd4,0xd7,0x5b, - 0x6a,0xd1,0x52,0x9b,0x97,0xde,0x4d,0x32,0x28,0x4c, - 0x62,0x6d,0x24,0x4e,0x38,0x8d,0xab,0xa6,0x16,0xec, - 0xb4,0xde,0x3f,0x21,0x35,0xba,0xf5,0x3c,0x25,0xc1, - 0x93,0x72,0xab,0x43,0xb9,0xfe,0x06,0x99,0xdc,0x90, - 0xd4,0xb7,0x87,0xdd,0xb4,0x0f,0x36,0x3c,0x24,0x2d, - 0x30,0x12,0x51,0x93,0x64,0x2e,0x3e,0xdd,0xf7,0xc4, - 0x75,0xd9,0xb4,0xbe,0x5c,0xdb,0x95,0x14,0x90,0x37, - 0x7c,0x8b,0xe4,0xe5,0xf8,0x89,0x9a,0xf0,0x86,0x50, - 0xad,0x9f,0x99,0x78,0xab,0x44,0xe0,0xde,0x4c,0x41, - 0xa6,0x84,0x77,0x42,0x90,0x13,0x0d,0x60,0x43,0x25, - 0xf8,0x8f,0xf0,0x85,0xf4,0xfb,0xa8,0xad,0x35,0x0d, - 0xb6,0x90,0x22,0xbd,0x03,0x34,0x88,0xe3,0x93,0x62, - 0x27,0x3d,0xfb,0xbe,0x8f,0x1c,0x89,0x7c,0x63,0x22, - 0x3e,0xb5,0x1a,0x55,0x2b,0xeb,0xe5,0x7e,0x81,0xd4, - 0x42,0x37,0x9b,0x85,0xe0,0xb8,0x94,0x10,0x4d,0x0b, - 0x7e,0xea,0xbb,0x82,0x8a,0xeb,0xc3,0x28,0x6e,0xa3, - 0x61,0x34,0xb5,0x76,0x88,0xe5,0xbf,0xe1,0x2e,0x4c, - 0x8b,0x3c,0x55,0x93,0x13,0x69,0x91,0x9e,0x7d,0xfa, - 0x7e,0x1d,0x33,0xfc,0x1b,0x21,0xb0,0x94,0x8c,0xa6, - 0x04,0x69,0xdb,0x0a,0xdd,0xf0,0x15,0x12,0x0f,0x84, - 0x36,0xf8,0x34,0xed,0xf1,0xb7,0xfd,0xec,0x29,0x01, - 0x4f,0xdf,0xb9,0x11,0x88,0x4c,0x13,0x54,0x74,0xa8, - 0x76,0xc8,0x77,0x83,0xa4,0xba,0x83,0x52,0x51,0xd1, - 0x34,0x7d,0xb8,0x99,0x7e,0xdc,0x3c,0xcf,0xc9,0x07, - 0x28,0x1d,0xaa,0xe4,0xdf,0xb4,0x25,0x4b,0x13,0xdf, - 0xce,0x11,0x96,0xf5,0x40,0x98,0x74,0xbc,0x92,0x4a, - 0xf9,0x34,0x59,0x96,0xdc,0xe4,0xa7,0xb8,0x99,0xf4, - 0x76,0xf4,0xde,0x3e,0x29,0xb6,0x36,0x49,0x48,0xe2, - 0x72,0x24,0x93,0xcf,0x8d,0x16,0xd2,0x86,0xe3,0x32, - 0xd9,0xb7,0x4c,0xb1,0x80,0xfe,0x3f,0x28,0x2f,0x8f, - 0xbe,0x72,0x53,0xfb,0x27,0x0d,0x10,0xd1,0x9a,0xda, - 0x08,0x8d,0x12,0x7a,0x43,0xd3,0xb6,0x9b,0x49,0xee, - 0x4d,0xfb,0x74,0xa2,0x78,0xf4,0x42,0xcb,0xe9,0x56, - 0x11,0xa5,0x81,0xd6,0xbf,0x43,0xb8,0x1f,0x7e,0xa7, - 0x5b,0x3b,0xfb,0x2d,0x51,0x77,0x0a,0x84,0x13,0xcf, - 0xe1,0x13,0x58,0x9f,0x24,0xfe,0x5d,0x42,0xb7,0xd9, - 0x18,0xe9,0xcf,0xf4,0xef,0xd5,0x09,0x7d,0x62,0xdc, - 0x6f,0xc4,0x0d,0x27,0x2d,0x97,0xb4,0xf8,0x14,0xa5, - 0xea,0x49,0x5f,0x9a,0x18,0x22,0x62,0xeb,0xc6,0x67, - 0x67,0x22,0xa8,0xa5,0x20,0x30,0xf1,0x7d,0xc8,0xaa, - 0x82,0xb4,0x70,0xb6,0xa2,0x68,0x84,0x64,0x4c,0xb6, - 0x14,0x9f,0xaa,0xcc,0x52,0x50,0x9f,0x60,0xe4,0x09, - 0x6e,0x4e,0x09,0xe1,0x46,0xed,0x77,0x93,0x10,0x27, - 0x01,0xd0,0x4d,0x61,0x32,0xb5,0xc4,0x36,0x15,0xf0, - 0x66,0xed,0x26,0x38,0x9c,0x0e,0x45,0x57,0x59,0x4e, - 0xbe,0x41,0x13,0xc2,0xe5,0xa6,0xf7,0xc8,0x17,0x6e, - 0x2a,0x92,0x34,0x61,0xdd,0x04,0xf9,0x64,0xb5,0x90, - 0x2a,0xef,0xa9,0x0d,0xe7,0x0e,0xc8,0x74,0x70,0x4f, - 0xb2,0x08,0xb4,0x0f,0x37,0x85,0xc7,0xe4,0x6d,0x96, - 0xe2,0x84,0xc6,0xdd,0xce,0x5d,0x73,0xeb,0x7e,0x3a, - 0x2b,0x52,0xcc,0xdb,0xa2,0x57,0x9b,0xb3,0x30,0x9d, - 0xc3,0x89,0x7e,0xa2,0x5d,0x1c,0xf7,0x59,0xf7,0xbf, - 0xff,0xfa,0xf5,0x2b,0x26,0x77,0xdb,0xce,0x49,0x4a, - 0x86,0xb7,0x7e,0x75,0xc9,0xd2,0x82,0xf6,0xfc,0x56, - 0x26,0x87,0xa8,0x07,0xbf,0xe9,0xe1,0xf4,0xfe,0xe9, - 0xc6,0xe2,0x60,0x13,0xdc,0x36,0xc6,0x8e,0xee,0x00, - 0x22,0x22,0x36,0x7d,0xe7,0x66,0x9c,0x39,0x11,0x15, - 0xb7,0xca,0x93,0x9b,0x97,0x3c,0x21,0x34,0x13,0x54, - 0xba,0x51,0x67,0x9e,0xb8,0x47,0x09,0x91,0x99,0x78, - 0x0b,0x14,0x54,0x36,0x93,0x34,0x89,0xc4,0xb8,0x69, - 0x67,0x4c,0x04,0x3f,0xf7,0xac,0x5d,0x95,0xbb,0x1d, - 0xa5,0xed,0x6d,0xd9,0x24,0xa8,0x46,0x13,0x2c,0x93, - 0x8a,0x73,0x7a,0xa7,0x53,0xff,0x3f,0x11,0x10,0xb7, - 0x88,0xe2,0xb4,0x3e,0xcd,0xef,0x9c,0x0b,0xac,0x34, - 0xda,0xcf,0x1f,0xd2,0xd2,0xd9,0xfa,0x2c,0x99,0xb5, - 0x74,0x36,0xd7,0x3c,0xa9,0xe4,0x12,0x51,0x36,0x25, - 0xbe,0xdb,0x24,0x6d,0xb2,0x08,0x70,0xd5,0xf8,0x34, - 0x7c,0x31,0xb5,0xdd,0x36,0x02,0x9f,0x49,0x3d,0x7f, - 0x6b,0x75,0xb3,0x19,0x76,0x68,0x45,0xe5,0x99,0x12, - 0xde,0x74,0x78,0xa5,0xfd,0x93,0x5c,0xc2,0x37,0xfb, - 0x87,0xba,0x16,0x93,0x68,0x9e,0x16,0xce,0xce,0x2a, - 0x22,0x15,0x89,0x9f,0xb4,0x99,0x95,0x12,0x32,0xed, - 0xe9,0x84,0xea,0x4c,0xca,0xda,0x13,0x02,0xfc,0x7d, - 0xde,0x1f,0x4a,0x22,0x37,0x3c,0x4a,0xa5,0x01,0x4c, - 0x2d,0xc6,0x09,0xa1,0x9a,0x62,0xb5,0x43,0x5e,0x29, - 0xf6,0xbb,0xef,0xfe,0x4d,0x1b,0x72,0x03,0xb5,0x4e, - 0x1a,0x2a,0xe9,0x01,0xa5,0x83,0x6f,0x52,0x48,0x4d, - 0xe8,0x4c,0x22,0x28,0x6e,0x7a,0xac,0xdb,0x4d,0xb5, - 0xb9,0xfe,0xf4,0xf7,0x13,0xff,0x84,0x16,0xdd,0x06, - 0xe1,0x50,0xd4,0x6b,0xba,0xbe,0xcd,0xbd,0xa5,0xc5, - 0xb8,0xa9,0x94,0x34,0x79,0x69,0x9b,0xf4,0xe7,0x00, - 0xdd,0x26,0x4a,0x1b,0xdf,0x9b,0x4d,0xa2,0x46,0xc1, - 0x60,0x9b,0x68,0x4c,0x53,0x4f,0x84,0xfe,0x39,0xe2, - 0xbf,0x7b,0x6f,0xc9,0x00,0xd3,0xed,0x2f,0x2d,0x0e, - 0x26,0xa3,0x41,0x3a,0x90,0xa8,0xe8,0xf9,0xc4,0x62, - 0x40,0x21,0xed,0xef,0xef,0x79,0x4b,0xa8,0x36,0x96, - 0x3b,0x49,0xfc,0x72,0x9b,0xe0,0x7d,0x2a,0x6e,0x97, - 0xbc,0xb8,0xfe,0xb6,0x8d,0x4d,0xa6,0xbb,0x0e,0xf2, - 0x27,0x42,0xeb,0x94,0xb8,0x3a,0x54,0x34,0x4d,0x3a, - 0x6d,0xe2,0xb0,0x92,0xc4,0xd3,0x00,0xc1,0x84,0x52, - 0x7e,0x32,0xa8,0xa0,0x07,0x79,0x6a,0x7d,0x4c,0x72, - 0x00,0x9f,0x9c,0x23,0xae,0xf8,0xd2,0x78,0xb3,0x69, - 0x1f,0x4f,0xc5,0x4e,0x9a,0xa8,0x4e,0xef,0xfd,0xf5, - 0x7a,0x9d,0x94,0x08,0x6d,0xf6,0x7d,0xff,0xee,0x74, - 0x4e,0xe8,0xf4,0x58,0xd0,0x4c,0x5a,0xab,0x66,0x4f, - 0x93,0x6f,0x2e,0xae,0x28,0x49,0xda,0xfd,0x0e,0x4d, - 0xc6,0x4e,0x83,0x11,0xaf,0x6d,0x26,0x3e,0x19,0xb2, - 0x4d,0x50,0xf9,0xa4,0xe1,0x93,0xa0,0xb5,0xa9,0xed, - 0xb3,0x81,0x65,0x37,0xb0,0xdd,0x27,0xc2,0x89,0x89, - 0x37,0xf0,0x09,0x64,0x49,0x9e,0x54,0xe9,0xba,0x36, - 0x90,0x64,0x22,0xec,0x4e,0x1c,0x9a,0xa4,0xe4,0xb9, - 0x45,0xde,0x88,0xe7,0x90,0x94,0x47,0x07,0x3e,0xc2, - 0xa1,0xc4,0x3c,0x79,0xbf,0x10,0xb2,0xa6,0xa4,0xd5, - 0xd4,0x1f,0xd7,0x16,0xc9,0xa7,0xda,0x49,0x93,0x3a, - 0xf3,0xe2,0xdf,0x4f,0x48,0xc2,0x8e,0x33,0xb7,0x75, - 0xba,0x58,0xe6,0xbd,0x9c,0xb4,0x7e,0x53,0x25,0xfd, - 0x09,0x17,0x40,0x3e,0xe7,0x0c,0xad,0xdd,0xf3,0x41, - 0xa2,0x73,0x26,0xc4,0x91,0xda,0xb0,0x5b,0xa4,0xfa, - 0xf6,0x12,0x73,0xad,0x4d,0xd2,0xd4,0x52,0xae,0x06, - 0xa1,0x45,0x66,0x5d,0xd8,0x7b,0x9f,0x84,0x34,0x13, - 0x87,0x68,0xdb,0x52,0x98,0x0a,0x9e,0xd4,0xb6,0x4f, - 0x68,0xf6,0x24,0x88,0x47,0xbc,0xab,0x09,0xa1,0x9a, - 0xae,0xdb,0xc5,0xcb,0x44,0x85,0x98,0xd0,0xf3,0xa9, - 0x95,0x3d,0x15,0x0a,0x13,0x2a,0x3d,0xb5,0x89,0x69, - 0x60,0x28,0xf1,0x6c,0x88,0x98,0x4f,0xf7,0x38,0xc9, - 0x7f,0x4c,0xf1,0x8e,0x62,0xd0,0xa4,0x2d,0xf4,0x37, - 0x1e,0x86,0x94,0xe0,0xba,0xf6,0x98,0xd3,0x36,0xfc, - 0x39,0x3b,0x52,0x4f,0x8e,0x8c,0xf0,0xdc,0x02,0xa5, - 0xc9,0xa7,0x09,0xca,0xdd,0x3a,0x7a,0xbb,0x64,0x25, - 0x25,0x24,0x94,0xc9,0x6f,0x38,0x30,0x09,0xe9,0x98, - 0xa4,0x02,0x28,0xf0,0x13,0x24,0xbe,0x41,0x90,0x68, - 0xc3,0x2b,0x5a,0xb0,0x6d,0xc9,0x00,0xf4,0x69,0x93, - 0xb0,0x29,0x50,0x25,0xb4,0x43,0x37,0x28,0x69,0x63, - 0xfc,0x8d,0xd2,0xe7,0x94,0xf4,0x6c,0x0f,0xe7,0xcd, - 0xc1,0xf2,0x37,0xee,0xd3,0xf4,0x19,0xce,0x4a,0x80, - 0x12,0x18,0x4d,0x06,0xa7,0x00,0xa2,0xbc,0xb4,0x4f, - 0xee,0x39,0xf9,0xf7,0xd0,0x3b,0xda,0xca,0xf2,0xbb, - 0xbf,0x82,0x76,0xdb,0xd9,0xf2,0x27,0xf4,0x5a,0xdd, - 0x44,0xd0,0xf7,0xff,0x9f,0x2d,0x57,0x23,0xf1,0x59, - 0x5c,0xa1,0x32,0x55,0xa0,0x93,0xb6,0xcb,0x26,0x91, - 0x18,0xd6,0xe0,0x49,0x2d,0x2e,0xb7,0x4e,0x09,0x91, - 0x9a,0xf6,0x8b,0xf3,0x5f,0x4b,0xa8,0x6a,0x5f,0xb7, - 0x9b,0xc9,0x29,0x97,0xa4,0xeb,0x67,0xc8,0xef,0x1d, - 0xc7,0xf1,0xd8,0xf8,0x40,0x12,0xe2,0x23,0xff,0x7e, - 0xb6,0xa8,0xf8,0xd4,0x59,0x48,0x09,0x77,0xf2,0xd4, - 0xdc,0x88,0xea,0x26,0xa5,0x7b,0x17,0x77,0x5d,0x52, - 0x34,0x9d,0x83,0xf4,0xdf,0x89,0x5b,0x46,0xf2,0x0f, - 0x0e,0x69,0xdf,0x24,0xc6,0x13,0xd2,0xef,0x0a,0x92, - 0xcd,0x39,0xf2,0x3b,0x65,0xbf,0x7d,0x63,0xa7,0x4a, - 0xbe,0xfd,0xd9,0x0f,0xc4,0x3d,0x69,0x68,0x4c,0x36, - 0x09,0xdb,0x56,0x4d,0x42,0x36,0x28,0x11,0xa3,0xca, - 0x2c,0xb5,0x00,0x1d,0x2c,0xe7,0x88,0x66,0x13,0x3c, - 0x9a,0x0e,0xaf,0x45,0xf0,0x79,0xe3,0x5b,0x10,0x6f, - 0x29,0x4d,0xcd,0xb9,0x51,0xc3,0x64,0x27,0xb1,0x31, - 0xed,0x73,0x9b,0xfc,0xfe,0x9e,0xfb,0xbe,0x52,0xdb, - 0xca,0x3c,0xab,0xe3,0x5c,0xee,0x49,0xa3,0x63,0x5a, - 0x17,0xaa,0xf1,0x44,0x6b,0x71,0x4a,0xaa,0x28,0xc8, - 0x12,0xb7,0x85,0x92,0xba,0xd4,0xef,0x76,0x9f,0xd1, - 0xc5,0xcc,0xd2,0x88,0x7c,0x42,0x6b,0x3e,0xe5,0x93, - 0x6d,0xdb,0xd4,0xf7,0xbe,0xbf,0xbd,0xb9,0x36,0x87, - 0xc3,0x8d,0x04,0x6d,0x6c,0x03,0x92,0xad,0xcc,0x74, - 0x70,0xeb,0x7a,0x31,0xed,0x84,0x1f,0x14,0xc9,0x11, - 0x7c,0xa7,0x96,0x7a,0x12,0xd0,0xd3,0x43,0xc7,0xa1, - 0x06,0x5b,0xf3,0xe8,0xbe,0x5f,0x3f,0xd5,0xf2,0xda, - 0x20,0xc6,0x53,0xdb,0x78,0x4b,0x0f,0x70,0x31,0x86, - 0xd0,0x80,0x4f,0x0c,0x7a,0xa9,0x00,0x9a,0x8c,0xb4, - 0xe9,0x59,0x6f,0xf8,0x25,0xd4,0x0e,0x9a,0xda,0x32, - 0xd3,0x7b,0xfc,0x54,0xc2,0x82,0x04,0x16,0x27,0x31, - 0xce,0x2d,0x2a,0xbd,0x79,0xd6,0x44,0x4b,0x70,0xc9, - 0xe7,0xc4,0xfb,0x71,0x49,0xf9,0x7d,0xa4,0x25,0xaa, - 0x07,0xc5,0xf7,0x4f,0xe9,0x31,0x8f,0x4e,0xc3,0x27, - 0x41,0x6f,0xfa,0x67,0x23,0x9a,0x37,0xc1,0x7d,0x93, - 0x7c,0x7c,0xaa,0xc2,0x36,0xe8,0x11,0x49,0xfa,0x53, - 0x46,0x9d,0x2a,0x89,0xa9,0x37,0xef,0x02,0xf2,0x24, - 0xdd,0x3d,0x41,0xa7,0x84,0x2e,0xb9,0xe7,0xab,0xe8, - 0x9d,0x7c,0xc6,0x99,0x12,0xc1,0x89,0xa7,0x91,0x82, - 0xaa,0x7e,0xf6,0x5d,0x8d,0xbb,0x35,0x30,0x05,0xc5, - 0xbf,0x6d,0x01,0x4e,0x68,0x63,0x42,0x5d,0x52,0x6b, - 0x8e,0x02,0xd7,0xa6,0xbd,0x32,0x4d,0x19,0x4d,0xa8, - 0xe3,0xd2,0x45,0x7a,0xe4,0xb2,0xa4,0xe9,0x38,0xb9, - 0x86,0x43,0xdf,0xb3,0xd5,0x00,0x49,0xf7,0x9e,0x10, - 0xc3,0xa1,0x55,0x72,0x92,0xb2,0xb3,0xdb,0x0f,0xd4, - 0x5a,0x4e,0xbe,0x60,0xc3,0x01,0x79,0x68,0x4c,0xbb, - 0x3f,0xb7,0x89,0xf4,0x9b,0xda,0x28,0xff,0xd6,0x3b, - 0x67,0xe5,0xd5,0x47,0x2d,0xa8,0xd4,0x7a,0x4e,0x43, - 0x06,0x2e,0x5e,0xdd,0x53,0xa6,0xb4,0x16,0x26,0x4f, - 0xb1,0x4f,0xf6,0xcc,0x56,0x23,0xad,0x1f,0xa2,0xc9, - 0x06,0x61,0x42,0x85,0x5c,0x5c,0x56,0x7b,0x15,0x87, - 0xca,0x4e,0x45,0xcd,0x86,0x8f,0xe7,0x10,0xbe,0x69, - 0x1f,0x25,0x1f,0xb9,0x8e,0xc8,0x7c,0x62,0x4a,0xeb, - 0xce,0x46,0x45,0x97,0xd3,0x64,0x72,0x5a,0xeb,0xd4, - 0x91,0x99,0xba,0x15,0x9b,0x49,0xd6,0xa9,0x25,0xe9, - 0xf6,0xda,0xef,0x4d,0xd2,0xb3,0xc9,0x22,0x7b,0x96, - 0xec,0xda,0x66,0x2e,0x78,0x6e,0x24,0xcb,0x37,0x8a, - 0x90,0x8e,0x64,0xd5,0x09,0x5c,0xdb,0xde,0x77,0x22, - 0xf6,0xa9,0xe3,0xed,0xa4,0x24,0x4d,0x2c,0xf4,0xad, - 0x18,0xdd,0x54,0xd1,0x49,0xa0,0xad,0x49,0xf9,0xf4, - 0xfe,0xef,0xae,0x0a,0xab,0x93,0x53,0xfa,0xe7,0x44, - 0xb2,0xdd,0x24,0x49,0x53,0x15,0x95,0x44,0xf2,0x52, - 0x3b,0x6c,0x52,0xf4,0x25,0xfe,0x42,0x87,0x28,0x48, - 0xdb,0x66,0x43,0xf2,0xa5,0x2a,0x2f,0xa1,0xa8,0x13, - 0x0c,0xfb,0x49,0xf2,0xe6,0xf6,0xd0,0x44,0xde,0x4d, - 0x2d,0xc4,0x89,0xc7,0x35,0x15,0x34,0x8a,0x02,0x4d, - 0xdc,0x14,0x0a,0x98,0x1d,0x99,0x4b,0x6b,0xe1,0xe6, - 0x3d,0x39,0xee,0xd7,0x66,0x9a,0x2c,0xbd,0x23,0xf7, - 0x4c,0x74,0x12,0x76,0x5b,0xa1,0x13,0x71,0x76,0x1b, - 0xd3,0x48,0xd5,0x78,0xe2,0x6a,0x6c,0xc8,0xa8,0xa2, - 0x65,0x76,0xdc,0xa1,0x45,0xfe,0x5a,0x13,0xb9,0x39, - 0xad,0x6d,0xfd,0x2c,0x87,0x68,0x29,0x42,0x3b,0x29, - 0xb2,0xa7,0xd8,0xe8,0xac,0x5a,0x36,0x7b,0xc2,0xad, - 0xd9,0x3f,0x7f,0xfe,0x8c,0xc8,0xd1,0x16,0xf9,0x77, - 0xa6,0xe0,0x1b,0x84,0x71,0x2a,0xd8,0x26,0x35,0xea, - 0x29,0xf9,0xa1,0xe4,0xe1,0x13,0xed,0x30,0x4a,0x76, - 0xa6,0x76,0x3a,0xc4,0x89,0x33,0x49,0x72,0x4c,0x84, - 0xf8,0x84,0x4c,0x7d,0x7d,0x7d,0xfd,0x83,0x00,0x6d, - 0xaa,0xae,0xb4,0xe0,0x26,0x83,0x4b,0xd7,0x73,0x9c, - 0x14,0x2a,0xa9,0x1a,0x9a,0xf4,0x03,0x36,0x99,0x2d, - 0x05,0xb2,0x64,0xe6,0x48,0xa3,0xf9,0x4e,0xda,0x7e, - 0x3a,0x5c,0xee,0x8a,0x8e,0xaa,0x37,0x4a,0xce,0x54, - 0xd0,0x2e,0x25,0x22,0x5a,0xa9,0x24,0xad,0x18,0x6a, - 0x49,0x4d,0x01,0x28,0x05,0xb9,0x94,0x50,0xa4,0x83, - 0xfd,0xd7,0xaf,0x5f,0x58,0x39,0x4e,0xed,0x92,0x54, - 0xe1,0x39,0xb3,0xce,0x50,0xd5,0x9d,0x8d,0xf8,0xe6, - 0xa7,0x24,0x78,0x45,0x03,0x4d,0xb0,0x3a,0x1b,0xd1, - 0xbe,0x4d,0x65,0xd9,0xae,0xe5,0x0c,0x6d,0x9d,0x33, - 0x55,0x76,0x84,0x20,0x6d,0x14,0x9d,0x13,0x6f,0x8d, - 0xda,0x70,0xda,0xf2,0xa2,0xe4,0xcc,0x55,0xbf,0x09, - 0xe5,0x4d,0xad,0x12,0x7a,0xe6,0x93,0x45,0xcf,0x27, - 0x08,0x79,0x6a,0xf7,0xb8,0xcf,0x70,0xc8,0x03,0x15, - 0x6b,0xd3,0xc0,0x82,0x43,0xd0,0xd3,0x70,0xc8,0x84, - 0xb2,0x6f,0xce,0x89,0x29,0xf9,0x55,0x1e,0x4f,0x48, - 0x04,0xce,0x84,0x76,0x27,0x5a,0x05,0x19,0xa1,0x2a, - 0xef,0x86,0x10,0xb3,0x64,0x13,0xb5,0x31,0x88,0xdd, - 0x4a,0x22,0x50,0x7b,0x7f,0x6b,0x2a,0x4e,0xeb,0xba, - 0xaf,0xa3,0x64,0x7a,0x9e,0xf6,0xf5,0x86,0xef,0x48, - 0xf4,0x80,0x84,0xf4,0xbb,0xb3,0x6f,0x2b,0x77,0x30, - 0xad,0x35,0xe8,0x42,0xfc,0x20,0x6b,0xaf,0xd7,0xeb, - 0x5f,0x12,0x34,0x09,0xd1,0x4d,0x23,0xc4,0x53,0x9b, - 0x88,0x78,0x07,0x53,0xb0,0x4d,0xdf,0xb9,0x51,0x80, - 0x75,0x41,0xd8,0x29,0x68,0xba,0xdf,0x81,0xfe,0xbd, - 0x3b,0x14,0xcf,0xd4,0xb6,0x98,0x02,0x86,0xdb,0x48, - 0x84,0x4c,0x28,0x1a,0x35,0x99,0x7f,0xd2,0x81,0xe0, - 0xd0,0x1e,0x12,0x7a,0xec,0x9f,0x41,0xde,0x51,0xee, - 0xbd,0x52,0x82,0x3a,0x19,0x3b,0xba,0xa4,0xed,0x13, - 0xed,0xa5,0x4f,0xc8,0x7c,0xf4,0xe7,0xd3,0xfa,0x9c, - 0xa6,0xba,0xa6,0x03,0x6f,0x5b,0x41,0x6d,0x83,0x4b, - 0x4f,0x72,0x7a,0x80,0xa6,0x16,0x91,0x7b,0x9f,0xc3, - 0xfa,0x3d,0x1b,0x2b,0x14,0xd7,0x12,0x22,0xb2,0xe3, - 0xa7,0xad,0xbe,0x3b,0x89,0xfd,0xfa,0xfa,0x3a,0x2e, - 0xc0,0xb9,0x67,0xb2,0x69,0x61,0x0d,0x85,0xd3,0x99, - 0x92,0x3f,0x27,0xb2,0x97,0x6c,0x0b,0xa6,0xa9,0xc5, - 0x6d,0x9c,0x9c,0x88,0xa3,0x53,0x81,0xb2,0xf1,0x5c, - 0xec,0xeb,0x68,0x33,0x91,0xda,0x27,0x36,0x29,0x56, - 0x4e,0x71,0x3e,0xb5,0x2a,0x53,0x71,0x49,0x45,0xdc, - 0x27,0xa8,0xd5,0xa6,0xc3,0xe1,0x50,0xba,0x34,0xb9, - 0x35,0xc5,0xc4,0x69,0x3a,0xf9,0x6f,0x12,0x4f,0x68, - 0xf5,0x9f,0xed,0xf9,0x94,0xce,0xf4,0x14,0xa3,0xa6, - 0x69,0x45,0xf7,0x9e,0xa7,0x42,0xc8,0x25,0xed,0x29, - 0xbe,0x52,0x0b,0xd3,0x99,0x37,0xbf,0x4d,0x81,0x85, - 0xc4,0xe2,0x6c,0x5a,0x62,0x69,0x61,0xa9,0x41,0x1a, - 0x7d,0x27,0x2c,0xea,0x43,0xe3,0x91,0xaa,0x29,0x93, - 0x60,0xc9,0xd4,0x6e,0x71,0xfd,0xc8,0x34,0xe9,0x94, - 0x0e,0x54,0x0d,0x18,0x13,0xf7,0xc4,0xb5,0x0b,0x7b, - 0x8f,0x5d,0x93,0x92,0x2d,0xcf,0x63,0xa3,0x4a,0x3b, - 0x4d,0x28,0xa4,0xc4,0x98,0xfe,0x2e,0x8d,0x9f,0x26, - 0x5e,0x8c,0x7b,0x7e,0x9f,0x10,0xea,0x24,0xf0,0x9d, - 0x89,0xeb,0xf2,0x29,0x17,0x67,0x5a,0xf7,0x9f,0x22, - 0x55,0x69,0x4c,0x18,0xfe,0x77,0x9c,0x1e,0x87,0x6b, - 0xb5,0x4c,0x02,0x6d,0x1b,0x8d,0x9f,0x09,0x5a,0x0e, - 0x81,0xee,0x6c,0x14,0x5a,0x49,0x1d,0x9c,0x46,0x7e, - 0x3b,0x17,0x26,0x05,0xc3,0x54,0x10,0x4c,0x8a,0xc9, - 0x84,0x80,0xea,0x64,0x8b,0xab,0x66,0xa7,0x11,0xe6, - 0x1e,0xcf,0x36,0xc9,0xee,0x94,0x24,0x10,0xcf,0x67, - 0xcb,0x89,0x4a,0xff,0xdd,0x93,0xcc,0x4f,0x14,0x9b, - 0x53,0x51,0x95,0xee,0xeb,0x8e,0x81,0x2e,0xa1,0xdd, - 0xca,0x68,0x4c,0xcf,0x7f,0x6a,0x45,0x6e,0xe8,0x12, - 0xf4,0xb9,0xd3,0xbe,0x48,0x85,0x7b,0x6a,0xc3,0x6f, - 0xa4,0x06,0xa6,0xae,0x0a,0xc5,0xab,0xd4,0xb1,0xf9, - 0xe4,0x3d,0x6e,0x3a,0x0b,0x69,0xaf,0x7e,0x10,0x57, - 0xec,0x75,0xf4,0x09,0xe6,0x24,0xda,0xe8,0xde,0xc1, - 0x4f,0x0b,0x8c,0x20,0x7a,0xe2,0x78,0x24,0x51,0xa2, - 0x69,0x73,0x0e,0x70,0xfc,0xaa,0xa5,0xb1,0xe1,0x56, - 0x24,0xab,0x8a,0xcd,0x24,0xc9,0x66,0x81,0x7f,0x22, - 0x12,0xe7,0x50,0x8d,0xc9,0xa5,0x37,0x7d,0x27,0x8d, - 0xbc,0xa6,0x85,0x3e,0x69,0x39,0x75,0x24,0xa1,0x1d, - 0x32,0x27,0x6d,0x92,0x2d,0x7a,0xb7,0x55,0xbc,0x25, - 0xcb,0x8a,0xc4,0xf6,0xa7,0x67,0xea,0x2c,0x0e,0x48, - 0x0e,0x61,0x83,0xda,0x38,0x87,0xf2,0xa9,0x17,0x0d, - 0x87,0xe1,0xa1,0x20,0xe7,0x2c,0x34,0xa6,0x43,0x9c, - 0x50,0xcd,0x29,0xb8,0xb4,0xa0,0x71,0x16,0xc1,0xf2, - 0x6c,0x0e,0xec,0x8e,0x96,0x4e,0x43,0x0e,0x13,0x59, - 0xfc,0x2e,0x04,0x7a,0xf2,0x43,0x3c,0x99,0x54,0x8d, - 0x6e,0xa6,0xdf,0x28,0x8e,0x68,0x31,0xd2,0x61,0xf4, - 0xf0,0x7e,0x4e,0xda,0x07,0x1b,0x61,0xb7,0x29,0x36, - 0x75,0x95,0xe2,0x44,0xd8,0x6e,0x6b,0xe4,0x7c,0x82, - 0x24,0x4c,0xcf,0x32,0x15,0x02,0x1b,0xa4,0x2a,0x8c, - 0x88,0x9f,0xa4,0xf1,0xf5,0xa9,0xca,0xf4,0x12,0x99, - 0x3d,0x9f,0xca,0x65,0x84,0xf6,0xe5,0x49,0xa8,0x26, - 0xb5,0xb5,0xa0,0x15,0xbf,0xb2,0x41,0x9a,0x84,0x80, - 0x27,0xf7,0x84,0x89,0xa0,0x3f,0x71,0xd4,0xe8,0x4c, - 0x9f,0x5a,0xc8,0x09,0x79,0xdc,0x18,0x13,0xa7,0xa1, - 0x8e,0x09,0x11,0xfc,0x79,0xd6,0x9b,0x16,0x52,0x22, - 0xc2,0x39,0x09,0x6c,0xf7,0xf0,0x1c,0xd9,0x6b,0x43, - 0x22,0x83,0x44,0xe8,0xa4,0x7e,0x7e,0xea,0x0b,0xbb, - 0x31,0x55,0x0a,0x96,0x24,0x02,0xb6,0x71,0x4f,0x4f, - 0x48,0xc7,0xd6,0xdc,0x72,0x03,0xff,0xba,0xbe,0xf2, - 0x06,0x3e,0x4d,0x68,0x4a,0x7a,0x9e,0x84,0x64,0xb9, - 0xe4,0x68,0x33,0xa6,0x48,0x68,0x61,0x42,0xa6,0xb6, - 0xea,0xd6,0x44,0xbc,0x97,0xfb,0x3c,0x53,0xc2,0xa2, - 0x1b,0x55,0x0f,0xc4,0x73,0xce,0x81,0xb6,0xc6,0x99, - 0x7a,0xe6,0x9b,0x09,0xc0,0xa9,0xe2,0xa2,0x83,0x86, - 0x50,0x87,0x89,0x2b,0xb2,0xe5,0x9a,0x0c,0xc1,0xe9, - 0xa4,0xef,0xdd,0x28,0x07,0xdf,0x2d,0x2f,0x27,0x9e, - 0x38,0x78,0xf0,0x9d,0xe9,0x39,0xdd,0x8a,0xba,0x01, - 0x25,0x3a,0x6e,0x9f,0x4f,0x6a,0xb8,0xd3,0x3f,0x61, - 0x4d,0x9f,0x54,0x54,0x4d,0x04,0xf7,0x89,0x7b,0xa2, - 0xbe,0x65,0xe9,0x9d,0x50,0x5b,0x6f,0xc3,0x5b,0x21, - 0xd4,0x79,0xeb,0x48,0x9e,0xb8,0x30,0x53,0x22,0x92, - 0xd0,0xc6,0x4f,0x5a,0x4c,0xd3,0xe4,0x91,0x72,0x39, - 0xa7,0xfd,0x34,0x15,0x8e,0x9d,0xb0,0xdd,0xdb,0x35, - 0x5b,0x9e,0x59,0x58,0xe3,0x8f,0x75,0xe0,0x28,0x17, - 0xce,0x30,0x9c,0x26,0x27,0x37,0x9c,0xc7,0xc9,0x33, - 0x2d,0x89,0x41,0xea,0x1e,0x4b,0x09,0xcc,0xe4,0x5e, - 0x4f,0xc0,0xc3,0x1b,0x30,0x41,0xbd,0xca,0x4d,0x75, - 0x82,0x1f,0x2a,0x19,0x2c,0x1c,0x1a,0xe8,0xbd,0xe2, - 0x92,0x28,0x1a,0x3f,0x74,0x7f,0xae,0x0a,0xba,0x29, - 0x11,0x9a,0x0e,0x86,0x05,0x2a,0x10,0x7b,0xb9,0x24, - 0x75,0x3f,0xa9,0x9e,0xf6,0x9f,0x77,0x64,0xcf,0x61, - 0x33,0x1f,0x57,0x71,0x6d,0xd1,0x8b,0x69,0x33,0x3b, - 0xc8,0x79,0xe2,0xe9,0x6c,0x0c,0x21,0x9d,0x41,0xa3, - 0x56,0xbc,0x9f,0xb8,0xab,0x6b,0x12,0x4f,0x89,0x31, - 0x55,0x59,0x8e,0x40,0xbe,0x21,0x47,0x4f,0x70,0xb4, - 0xba,0xac,0x4b,0x9b,0xf0,0x4c,0xfb,0xcb,0xed,0xa1, - 0xc4,0xe9,0x49,0x81,0xa5,0xed,0xaf,0x93,0xb8,0x11, - 0x8a,0xc2,0x6c,0xd5,0xac,0xef,0x02,0x3b,0x89,0x82, - 0x06,0x54,0xd6,0x3e,0x8b,0xa1,0x20,0x3b,0xae,0x68, - 0x48,0x07,0x51,0x2a,0x72,0x5c,0x40,0x4d,0xa8,0xf7, - 0x94,0xac,0x2b,0xbf,0x72,0x8a,0xbf,0x0b,0x99,0x02, - 0x9b,0x74,0x7f,0x62,0xfb,0x30,0xb5,0xfa,0xf5,0xdd, - 0x4f,0xca,0xc2,0x7a,0x00,0x93,0x68,0xa2,0x8b,0x35, - 0x6e,0xbc,0x3c,0x49,0x80,0x68,0xa2,0x40,0x3c,0x4f, - 0x8a,0x11,0xd4,0xa2,0x4f,0x5a,0x34,0x89,0xe4,0xab, - 0xb1,0xcc,0xbd,0x3b,0x92,0x9b,0xd8,0x38,0x9e,0x6f, - 0xda,0x42,0xdb,0xa2,0x9d,0x8a,0xcb,0x6d,0x77,0x64, - 0xdb,0xe2,0x4c,0xc9,0x20,0xdd,0x6f,0x38,0x1f,0xcf, - 0xe4,0x0b,0xb6,0x3d,0x1f,0xce,0x39,0x4f,0x21,0xc4, - 0x4f,0x92,0x9f,0x04,0xa7,0xa5,0x3e,0xdc,0x24,0x50, - 0x46,0x55,0xc1,0x10,0x00,0xac,0xcf,0x10,0x8d,0xa5, - 0xba,0x64,0x63,0x42,0xa0,0x5c,0xeb,0x29,0xf1,0x8a, - 0x36,0x08,0x45,0x3f,0x80,0xee,0x31,0xe2,0xf6,0xfc, - 0xe2,0x68,0xf1,0x86,0x20,0x97,0xcc,0x6c,0x75,0xf4, - 0xf7,0x36,0x01,0x5d,0x04,0xda,0x9f,0xd1,0x7b,0x07, - 0x89,0x4e,0xf6,0x27,0x9f,0xb4,0x20,0x64,0x9d,0x9d, - 0xd7,0xeb,0x55,0x06,0x72,0xae,0x69,0x43,0xbb,0xc4, - 0x44,0x13,0xd3,0x8d,0x77,0xcf,0x74,0x68,0x24,0x8e, - 0x95,0x23,0xff,0x39,0xfe,0x84,0x7b,0x1e,0xdf,0xd7, - 0xf9,0xb6,0x1e,0xf4,0xd9,0xdc,0x7f,0x07,0xcf,0xf1, - 0xe7,0x39,0x91,0xc4,0x01,0x29,0x52,0xab,0x60,0x19, - 0xad,0x49,0x0a,0xb8,0xf7,0xb8,0xf5,0x6d,0xf9,0xe6, - 0x48,0xfc,0x1a,0xe0,0xd2,0x5a,0x09,0xcf,0xee,0x10, - 0xd2,0x2a,0xfb,0xf0,0x6c,0xfc,0xde,0xa6,0xe4,0x61, - 0x12,0xbb,0x33,0x02,0x81,0x23,0x9f,0xd2,0x5c,0xf7, - 0x81,0xc3,0xe6,0xa8,0xe4,0x46,0x52,0x43,0xd6,0x36, - 0x6b,0xe7,0x95,0xb9,0x8a,0x3f,0x71,0x50,0x26,0xa1, - 0xd8,0x0d,0x61,0x9a,0x46,0x99,0x27,0x74,0x7b,0x8a, - 0x75,0xfa,0x57,0x2a,0x22,0x39,0x99,0xd8,0xa6,0xf6, - 0x3e,0xc9,0x1a,0x7c,0x70,0x3d,0x6f,0xfb,0x0d,0x68, - 0x08,0x9f,0x72,0x6c,0x8f,0xf9,0xfb,0x43,0x49,0x1a, - 0xad,0xef,0xc9,0xa4,0x38,0x09,0x21,0x4e,0xad,0xc2, - 0x94,0x60,0xa6,0x67,0x4c,0x9c,0xd7,0x8e,0x9a,0xf5, - 0xd8,0x4c,0xc8,0x74,0x4a,0xd0,0x7e,0x4f,0xbd,0xe8, - 0xe9,0x50,0x22,0x87,0x70,0x4a,0x2a,0x1c,0x37,0x67, - 0x13,0x80,0xee,0xdf,0xed,0x30,0xe1,0xd6,0x8c,0x52, - 0x1f,0x08,0xb9,0x89,0xeb,0x41,0x97,0x36,0x48,0xc8, - 0x7c,0x7f,0x54,0x8c,0x37,0xea,0x9b,0xd3,0x02,0x72, - 0xcf,0x32,0xa1,0x39,0x9b,0xef,0x70,0xf0,0x21,0xc1, - 0xec,0xc4,0x5b,0x72,0xad,0x4f,0x57,0xfd,0xf7,0x44, - 0x89,0x12,0x5c,0x08,0xfe,0x3f,0xbf,0xab,0x8b,0x3c, - 0x05,0xd4,0xa4,0x1f,0xf2,0x1d,0xf0,0xcb,0xe9,0x1e, - 0x99,0x96,0xed,0x23,0xa1,0x98,0x12,0x1e,0x9a,0xce, - 0x83,0x9f,0x7f,0x24,0x12,0x13,0x32,0x47,0x95,0xfb, - 0xdf,0xc8,0xf5,0x03,0xca,0xf4,0x70,0x76,0x07,0x53, - 0xcd,0x8d,0x4b,0x3c,0xad,0xe7,0x33,0xed,0x53,0x35, - 0x8e,0x4d,0xe8,0x68,0xaa,0x5a,0xd3,0xe1,0x44,0xca, - 0xcf,0xda,0xda,0x80,0x04,0xfa,0x90,0x2e,0x98,0x72, - 0x40,0x3e,0xd1,0x35,0x4b,0xc8,0xcd,0xdf,0xe8,0xb9, - 0x4c,0xfc,0x18,0x42,0x1a,0xa7,0xa1,0x92,0xcd,0x44, - 0xe7,0xa4,0xd9,0x95,0x5a,0xef,0x84,0xd0,0x6c,0xf9, - 0x52,0xf4,0x3c,0x1c,0x97,0x2c,0x25,0x1c,0x53,0xe2, - 0x45,0xeb,0x67,0xc3,0x51,0x23,0xd5,0xfd,0xf4,0xee, - 0x36,0x49,0xd4,0x66,0x1f,0x6e,0xe3,0x0d,0x79,0x6a, - 0xb9,0xf3,0x13,0x8a,0x84,0x33,0x39,0x42,0xa4,0x16, - 0xf8,0xb4,0xc7,0x89,0x6b,0xf4,0x09,0x2d,0xe2,0x45, - 0xc1,0x67,0x6a,0x69,0x4c,0x93,0x45,0x6e,0xba,0x29, - 0xb5,0xbf,0x92,0x43,0x37,0x11,0x7f,0x49,0x8d,0x93, - 0x12,0xb3,0xbb,0xf7,0xef,0xae,0x95,0xda,0x4c,0x69, - 0x3c,0x7c,0x03,0x2f,0xa6,0x91,0xec,0x44,0xa6,0x4b, - 0x70,0xfd,0xd4,0xba,0x9b,0x7c,0x74,0x08,0xfd,0x4a, - 0x53,0x39,0xd3,0xf3,0x75,0x6d,0x37,0xf8,0xef,0xb3, - 0xe0,0xac,0xc4,0x7b,0xdb,0x22,0x31,0xce,0x87,0x8c, - 0xc4,0xeb,0xd2,0x38,0xff,0x76,0x8a,0x07,0x9e,0xf5, - 0xa1,0xe9,0xc5,0x50,0x51,0x1d,0x97,0x5c,0xa5,0x96, - 0x89,0x7b,0x07,0x69,0x02,0x6e,0x43,0x96,0x76,0x13, - 0x66,0x04,0xd9,0x4f,0x26,0xb2,0x9f,0xc2,0xd3,0xd3, - 0x34,0xa6,0xb9,0xcf,0x43,0xb1,0x44,0x10,0xbf,0x33, - 0xd9,0xdc,0x24,0x35,0x78,0x87,0xde,0x6e,0x3c,0xee, - 0x52,0x4b,0xd3,0xe9,0xe1,0x50,0x12,0xba,0x4d,0x72, - 0xe4,0xfb,0xce,0x82,0x57,0xf9,0x48,0x36,0xd2,0xa8, - 0x79,0x97,0x1a,0x90,0x96,0xde,0x49,0x87,0x6e,0x27, - 0xe5,0x3a,0xc3,0xde,0x4f,0x1c,0x02,0xa6,0x04,0x21, - 0x49,0x61,0x38,0x8d,0x30,0x32,0x3d,0xee,0x59,0x13, - 0xf9,0xa1,0x4d,0x89,0x03,0x9d,0x75,0xd3,0x39,0x40, - 0xa4,0xdf,0x09,0x38,0xf8,0x44,0x6f,0x6a,0x42,0xe0, - 0x5d,0x0c,0x9a,0x00,0x87,0xc4,0x1b,0x9a,0xb4,0xe2, - 0x12,0x45,0x62,0x42,0x9e,0xdd,0x50,0x8f,0x20,0xd1, - 0xef,0xbc,0x5a,0xf7,0xe2,0x53,0xb5,0xe4,0x38,0x3d, - 0x5b,0xdf,0x23,0xba,0x31,0x85,0xb0,0x13,0xfc,0x4d, - 0x42,0x55,0x29,0xeb,0x4d,0x5c,0x9b,0xae,0x0f,0x40, - 0x12,0xff,0xc9,0x16,0x23,0x99,0xbd,0xa6,0xcd,0xb7, - 0x85,0x5d,0xa7,0x85,0x4d,0x53,0x53,0xe6,0x79,0x9c, - 0xb4,0x39,0xa7,0x84,0x36,0x25,0xc6,0x9f,0x24,0x33, - 0xf0,0x77,0x67,0x43,0x9a,0xfe,0x44,0x77,0x67,0x63, - 0x14,0xb8,0x39,0xdc,0x88,0x43,0x63,0x12,0xb4,0xf3, - 0xb7,0x24,0xbf,0x14,0xb4,0xf5,0xf7,0xdd,0x01,0x95, - 0xde,0x99,0x7c,0xae,0x25,0x7c,0x27,0xd1,0xb9,0x34, - 0x62,0xfc,0x7a,0xbd,0x8e,0xbb,0xde,0x54,0x98,0x7c, - 0xb2,0x3e,0xfa,0xe7,0x24,0xf2,0x31,0x25,0xdf,0x34, - 0x52,0x3d,0xb8,0xa3,0x1f,0xf7,0x0e,0xbb,0x48,0x66, - 0x3f,0x00,0x37,0xba,0x33,0x3d,0xc9,0x49,0xd5,0x2a, - 0x15,0x8c,0xce,0x76,0x82,0xd0,0x98,0xc9,0x56,0x60, - 0x31,0xa9,0x75,0xd2,0x40,0x80,0xb3,0x88,0x58,0xb4, - 0x1f,0xc6,0xa4,0x28,0x1c,0xa4,0x67,0x9a,0xc0,0xba, - 0x13,0xdb,0x2d,0x9a,0x30,0x49,0x5d,0x38,0xcd,0xb4, - 0x4f,0x38,0x37,0xba,0x9f,0x9c,0x7d,0x4e,0x2a,0xee, - 0xa6,0x56,0xda,0x66,0xe4,0x9f,0xba,0x0f,0x3a,0xfc, - 0x33,0xb4,0x5f,0xdf,0xd6,0xad,0xe3,0xb0,0xbd,0xc1, - 0xd9,0x83,0x37,0xdb,0xa7,0xe2,0xb6,0xd3,0x7b,0x49, - 0x7e,0x90,0x94,0x80,0xea,0x67,0xfc,0x9e,0x7a,0x65, - 0xae,0x12,0x9d,0x02,0xd8,0x94,0x55,0x52,0x0b,0x80, - 0xb8,0x01,0xe7,0x9c,0x37,0x0b,0x07,0xb7,0x90,0x9d, - 0x96,0x84,0x42,0x85,0x01,0xda,0x3f,0x5f,0x5f,0x5f, - 0xa5,0x9c,0x0a,0xc7,0x99,0x98,0xb4,0x1d,0x68,0x83, - 0xa7,0xea,0xcd,0xf1,0xa3,0x02,0x1a,0xf5,0xe0,0x0a, - 0x6d,0x20,0x56,0xd8,0x4c,0x96,0x3f,0x93,0xb8,0x30, - 0xa9,0x35,0x96,0x20,0xcb,0x14,0x44,0x7a,0x7f,0x5e, - 0x0f,0xf8,0x0d,0x79,0x1b,0x26,0xd5,0xce,0x39,0xa7, - 0xa6,0xeb,0x68,0x95,0x42,0x6d,0x4c,0x39,0xd3,0x73, - 0xd7,0x35,0xa2,0xeb,0x0e,0x5a,0x2d,0x35,0x59,0x5a, - 0x48,0x52,0xf0,0xd3,0xa9,0x02,0x14,0xe0,0xe7,0xef, - 0x95,0xf7,0xf0,0xbd,0xb6,0xde,0xd6,0x0f,0x24,0xbd, - 0xa7,0xaa,0xaa,0x73,0xc2,0xc2,0xa1,0x72,0x88,0xd7, - 0x93,0x0c,0x4c,0xd3,0x3e,0x49,0xeb,0x90,0xb8,0x0e, - 0x29,0x91,0x74,0x45,0xc0,0xc6,0x97,0x6c,0x93,0x88, - 0x6b,0x82,0x39,0xf9,0x14,0x7d,0xd2,0x96,0xbc,0xcc, - 0x20,0xe1,0x7d,0xdf,0x6e,0x94,0x9e,0xda,0x6f,0x53, - 0xcb,0xe6,0x53,0x89,0x90,0x89,0x9f,0xb1,0x4d,0x7c, - 0xcd,0x7a,0x3f,0x4b,0x02,0xf0,0xf9,0x04,0x55,0x4c, - 0x2d,0xae,0xbe,0x46,0x5d,0x61,0x92,0xe2,0x9e,0xb6, - 0xe5,0x27,0x94,0xbe,0x99,0x1a,0xe3,0x90,0x4a,0x4a, - 0xb0,0x12,0xca,0xde,0x81,0x8c,0xd4,0xa5,0x98,0x0a, - 0xbd,0x34,0xa5,0xdd,0xd7,0xdf,0xf2,0x8c,0xc7,0xb3, - 0x72,0x13,0x53,0xc9,0x9e,0xc6,0x4d,0xb3,0x6d,0x3b, - 0x24,0x66,0x60,0xeb,0x15,0xf5,0x56,0xc2,0x04,0xd2, - 0x49,0x04,0x5b,0x7a,0x60,0x34,0xe2,0x97,0x08,0x73, - 0x4e,0x16,0x5f,0x2b,0x24,0x9d,0x1c,0xa3,0xe4,0x63, - 0xaa,0xb8,0x27,0xfd,0x9f,0x94,0x4d,0x92,0xdc,0xb9, - 0x56,0x7f,0x69,0xe4,0xb4,0x57,0x57,0x93,0xc6,0x87, - 0x3b,0x28,0xa6,0xcd,0xe8,0x0c,0x59,0x9d,0xae,0x08, - 0x25,0xbb,0x1b,0x11,0xbd,0x4d,0x15,0xe6,0x2a,0x84, - 0xce,0x0f,0xeb,0x6b,0x6f,0x6a,0xab,0xdd,0xe8,0x4b, - 0xdf,0x14,0xda,0xf2,0x22,0xc5,0xed,0x41,0x43,0xe2, - 0x6c,0xdc,0xd6,0x89,0x84,0x9a,0x1c,0xb1,0x29,0x79, - 0xfe,0xc4,0x31,0xde,0xed,0xd9,0x0d,0x01,0x73,0x42, - 0x8c,0x5e,0xaf,0xd7,0x8f,0x25,0x09,0x41,0xd7,0x7a, - 0x19,0x34,0xe9,0xb3,0xe1,0xbd,0xa4,0xbe,0xff,0x84, - 0xfa,0x24,0x4e,0x81,0xa2,0x10,0x69,0x52,0x49,0x13, - 0x08,0x48,0x7a,0xce,0xd6,0x76,0x27,0x09,0xf8,0xa5, - 0xd6,0xca,0xb6,0x35,0xbe,0xb5,0x9b,0x20,0xc4,0xfa, - 0xe4,0xca,0xd4,0xc6,0xb6,0x3b,0xce,0x4e,0x63,0xca, - 0x54,0x24,0x69,0x5b,0xce,0xc5,0xc4,0x89,0xf4,0xae, - 0xdf,0xbf,0x29,0x32,0x69,0xe4,0x7b,0xc3,0x39,0x49, - 0x3c,0x92,0xc9,0xb8,0x79,0x93,0xcc,0x13,0xad,0xc4, - 0xbd,0x67,0x42,0x8b,0x26,0x02,0xfb,0x54,0x6c,0xb8, - 0x0d,0xb2,0x6d,0x3d,0x4f,0x48,0xae,0x13,0xfd,0x75, - 0x36,0x2b,0x74,0xbe,0xba,0xa9,0x3e,0xe2,0x4b,0x6d, - 0x08,0xd9,0xfa,0xef,0x2f,0x97,0xa8,0x24,0x88,0x76, - 0xc3,0x0d,0x49,0x41,0x81,0xfa,0xfc,0x49,0xb7,0xc5, - 0x1d,0xc6,0x1b,0x08,0x3d,0xb5,0xa9,0x36,0xd0,0x6e, - 0xba,0x6e,0xdd,0x88,0x0e,0x59,0xa2,0x56,0xc0,0x24, - 0x96,0xe6,0xd4,0x90,0xa7,0x4a,0x66,0x83,0xc0,0x4d, - 0x90,0x6f,0x87,0xea,0x53,0x05,0x30,0xe9,0xe5,0xd0, - 0x28,0xe3,0xd4,0x67,0x4e,0x9c,0x0b,0x6a,0x77,0xa4, - 0x67,0x37,0x41,0xcc,0xd3,0xf3,0x0b,0x66,0xb6,0x87, - 0x0e,0x48,0x77,0xe0,0x24,0x5e,0x84,0x1b,0x03,0x56, - 0x48,0xd9,0xb4,0x3c,0xce,0x46,0xe5,0x38,0xa8,0x04, - 0x1f,0x3d,0x0c,0xcc,0xfe,0x3b,0x8e,0x7b,0x14,0x92, - 0xd1,0x1f,0xbd,0x1e,0x55,0x4e,0x4e,0xcf,0x7e,0x23, - 0x64,0x98,0x2c,0x37,0x14,0xd6,0x87,0x75,0x77,0x52, - 0x0b,0xd4,0xb5,0x07,0xe8,0x70,0x9f,0x88,0xd5,0xd3, - 0xde,0xdc,0x2a,0xce,0x7f,0xd2,0x32,0x74,0x07,0x4e, - 0x22,0x57,0xd3,0x10,0x40,0x58,0x3b,0x8f,0x24,0x4d, - 0x2d,0x05,0x7a,0x01,0x95,0x0e,0x4a,0x8a,0xad,0x69, - 0x44,0x9f,0x0a,0xaa,0x29,0xb1,0xa1,0xf7,0x32,0xc5, - 0x93,0x3b,0x36,0xdf,0xf7,0x42,0x62,0x98,0x34,0x31, - 0x09,0x2d,0xa2,0xd1,0xe6,0x83,0xf6,0xb0,0x16,0xc3, - 0xdb,0xe4,0x3b,0x21,0x6f,0xc9,0xf4,0x58,0xe5,0x48, - 0x5c,0x5b,0x69,0x43,0x3f,0xa0,0x77,0x9d,0xf8,0x5e, - 0x9b,0xe9,0xbb,0x64,0x4a,0x9e,0x5a,0xe0,0xee,0xbd, - 0xfd,0xa6,0x09,0xa3,0xad,0xe2,0x30,0x8d,0xf1,0xb9, - 0xac,0x74,0xc3,0xd7,0x49,0x1b,0xc0,0x7d,0xfe,0x56, - 0x24,0xcc,0x6d,0x22,0x9d,0x26,0x23,0xde,0x8b,0x40, - 0xb4,0xa5,0x9b,0x4b,0xd1,0x86,0x54,0xd9,0x53,0xeb, - 0x42,0xaf,0x85,0x88,0x9a,0xe4,0x05,0xf5,0xf5,0xf5, - 0x55,0x7a,0x48,0xbe,0x5e,0xaf,0xa2,0xe7,0x9c,0x5a, - 0x1b,0xe6,0x7b,0x7f,0x5a,0x44,0x02,0x43,0x97,0x5b, - 0xc4,0x9f,0x3a,0x48,0x3b,0x28,0x79,0x33,0xc1,0x30, - 0x4d,0x2c,0xd2,0xd8,0xa8,0xba,0xc2,0x6f,0x0e,0xe8, - 0xed,0x54,0xcb,0xd6,0x40,0x78,0x6a,0xb1,0x11,0xcc, - 0xee,0x36,0xbe,0xf9,0x9e,0x9f,0xd6,0x66,0x0f,0xca, - 0xc9,0x74,0xb3,0x27,0xf3,0xb7,0xf3,0xf5,0xf7,0xc0, - 0x40,0x6d,0x48,0xa6,0x3a,0x65,0x53,0x4f,0xb8,0xf8, - 0xa3,0x77,0x4b,0x88,0x4f,0x1a,0xa3,0x26,0x79,0x8c, - 0xd4,0x4e,0x25,0xa5,0x64,0x13,0x83,0x26,0xd8,0xff, - 0xb8,0xb8,0xe7,0xd0,0x72,0x1a,0x15,0x56,0x63,0x5c, - 0x77,0x7f,0xa4,0x5a,0x7c,0x27,0xcc,0x06,0xf1,0x3e, - 0x9f,0x4e,0x64,0x4d,0x13,0x67,0x9d,0xa8,0x9f,0x0e, - 0xfb,0x69,0xcd,0x26,0xbe,0xe4,0xd4,0xbe,0xeb,0xcf, - 0x2c,0xb5,0xfb,0xd3,0xda,0x4d,0xad,0x2a,0x1a,0xa2, - 0x49,0x2d,0xd0,0x5b,0x5c,0x33,0x9d,0x23,0x49,0xe6, - 0x65,0xeb,0xde,0xbe,0x69,0x25,0x0b,0x4a,0xe7,0x44, - 0x36,0x0f,0x25,0x98,0x4a,0x52,0x9f,0xa8,0x07,0xa9, - 0x9b,0xe2,0xd6,0x8d,0x43,0xda,0x29,0x8e,0x3a,0xba, - 0x04,0xb9,0x54,0x10,0x5f,0x30,0x15,0xf2,0x2f,0xd7, - 0xd7,0x4c,0xbd,0xbb,0xc9,0x57,0x65,0x32,0x80,0x73, - 0x59,0xe7,0x34,0xa6,0x4d,0x22,0x8b,0x9f,0x78,0xa4, - 0xa4,0xcf,0xdc,0xb4,0x6e,0x74,0x71,0x92,0xc0,0xda, - 0x04,0x13,0x6e,0xa0,0xc9,0xed,0xd4,0xd7,0xb6,0x4a, - 0xd5,0x77,0x4b,0x24,0x5c,0xfd,0xfe,0x29,0x38,0x9a, - 0xe7,0x76,0x28,0xb9,0x53,0x76,0xbe,0x59,0x27,0x07, - 0xf8,0x25,0x88,0xda,0xa5,0x60,0xeb,0x88,0xfb,0xce, - 0x98,0xd3,0x11,0x5d,0xb7,0x7c,0x95,0x4d,0xe5,0x32, - 0x05,0x5b,0x45,0x5d,0x27,0xae,0x43,0x3b,0x28,0x8f, - 0x43,0x16,0x48,0x74,0x94,0x2a,0x5f,0x9a,0x80,0x69, - 0xfb,0x7a,0x0c,0xea,0xae,0xc2,0x26,0x25,0x68,0x82, - 0xbe,0x03,0x61,0xf2,0x4c,0x6d,0xa2,0xb0,0x8f,0xcf, - 0x86,0x13,0xa1,0x53,0x58,0x84,0x12,0x25,0xb3,0xe1, - 0x0d,0xe7,0x87,0xac,0x1d,0xb4,0xf5,0xeb,0xf6,0xcd, - 0x66,0x7f,0x13,0x6f,0x62,0xe2,0x97,0xa5,0x69,0xa9, - 0xe9,0xd0,0x17,0xaa,0x44,0x5c,0x2b,0x89,0x5b,0x93, - 0xc6,0xc8,0x27,0x95,0x5f,0x2a,0x7e,0x54,0x72,0xa5, - 0x6b,0x2a,0xa5,0xb8,0xea,0xe4,0x3e,0x68,0x5d,0x68, - 0x57,0xc0,0x3d,0xf7,0x85,0x04,0xc2,0x31,0xe8,0xe1, - 0xd9,0x08,0x5f,0x4e,0xe7,0x9f,0x1b,0xec,0xd9,0x90, - 0x90,0x5d,0x81,0xea,0x06,0x30,0x08,0x3d,0x4d,0x80, - 0x43,0xea,0xbe,0x28,0xca,0xab,0xd7,0x07,0x28,0xeb, - 0x71,0x6b,0x4b,0xe3,0xa0,0x5b,0x63,0xbf,0x27,0x05, - 0xd0,0x8d,0x83,0xf3,0xb6,0xcf,0x4f,0x1b,0xc2,0xf1, - 0x60,0x36,0xa6,0x75,0x8e,0x77,0xb0,0xb1,0x8b,0xf8, - 0x84,0xa7,0xf2,0x09,0xb9,0x2b,0x64,0xe0,0xa8,0xbb, - 0xa3,0x1b,0x54,0x85,0xee,0x12,0xd2,0x90,0xf4,0x60, - 0xa6,0x8a,0x37,0x4d,0x12,0x7c,0x5a,0x71,0x0c,0x90, - 0xfd,0x0f,0xe2,0xe2,0xae,0x8f,0x2a,0x35,0x0a,0xda, - 0x5b,0x45,0xef,0xd6,0x66,0xac,0x8d,0x73,0x73,0xff, - 0xd9,0x74,0x88,0xfd,0x0d,0x42,0x95,0x50,0x49,0xfd, - 0xbe,0xd4,0x56,0xa5,0x56,0x14,0x14,0x10,0xe7,0xeb, - 0xeb,0xab,0x68,0xcc,0xdd,0x91,0xbf,0x4d,0x1b,0xee, - 0xed,0xd9,0x0c,0x08,0x09,0x3d,0x37,0x4d,0x42,0x2a, - 0xb5,0xc7,0x5d,0x72,0x37,0x71,0x31,0x1c,0xba,0x35, - 0xf9,0x71,0x51,0x15,0x0e,0xef,0xf1,0x0c,0x08,0xdf, - 0x09,0xad,0xea,0x13,0xc4,0xdd,0x8e,0x26,0x2e,0xee, - 0xd0,0x9d,0xac,0x1c,0x28,0xae,0xc1,0x73,0x89,0xa8, - 0xce,0x94,0xdc,0x13,0xbf,0x92,0x3a,0x08,0xd3,0xa0, - 0x44,0x47,0xd1,0xb7,0x7c,0x0e,0xf3,0xee,0xce,0x46, - 0x37,0x66,0x13,0xc7,0x36,0x36,0x21,0xae,0xdd,0xed, - 0xe2,0x3b,0x09,0xf4,0x6d,0x8b,0xac,0x4d,0x4b,0xc8, - 0xa1,0x55,0xfa,0xee,0xfb,0x30,0xc4,0xdf,0xf8,0x5a, - 0x52,0x9b,0x2f,0x71,0x43,0x49,0x47,0xec,0x46,0x70, - 0x7a,0xb1,0x39,0xe9,0x65,0xe9,0x7d,0x38,0xca,0x83, - 0xde,0xaf,0x7b,0x16,0x6e,0xad,0xfc,0x5e,0x42,0xf3, - 0x3f,0xd3,0x2a,0x9b,0xc0,0x91,0xfa,0xd0,0x93,0xd0, - 0xd6,0x74,0xd8,0xb7,0xcf,0xfe,0x69,0xc1,0xa4,0x84, - 0x61,0x0a,0x6e,0xae,0x4d,0x40,0x87,0x1c,0x10,0x10, - 0x5d,0xd2,0xf2,0x38,0x4c,0xb5,0xff,0x3e,0xd9,0x01, - 0x10,0xe4,0x3a,0xb5,0x5b,0x86,0x40,0xf5,0x96,0x10, - 0xa4,0x9f,0xa5,0x64,0x4d,0x33,0x79,0x82,0x22,0xa9, - 0x85,0x3a,0xb9,0x1e,0x7f,0x62,0x62,0x28,0x87,0xc7, - 0x63,0x3d,0xd0,0xef,0x93,0x9b,0x3a,0xb4,0x6b,0xdf, - 0x0e,0x7f,0x7d,0x96,0xe6,0x80,0xa6,0xeb,0x78,0xfb, - 0x73,0x39,0xec,0xde,0xda,0x72,0x7a,0x90,0xd7,0x3f, - 0xff,0xb8,0x77,0x62,0x05,0x09,0x05,0x69,0xab,0x54, - 0x20,0xb8,0xe4,0x26,0x70,0x25,0x6a,0x3b,0x11,0xa7, - 0x53,0x42,0x89,0x63,0xd6,0x39,0x73,0x49,0x8c,0xce, - 0xad,0x25,0xe0,0x1b,0x9d,0xcd,0xb4,0xce,0xdd,0xe6, - 0xa3,0xa4,0x93,0xda,0x7d,0x1a,0x5c,0x89,0xe8,0xbc, - 0x99,0xa0,0xd4,0x6a,0x95,0xa6,0xc9,0xa6,0xf6,0xc0, - 0x86,0xa3,0x94,0x92,0xc3,0x50,0x9c,0x9c,0x49,0xbd, - 0x79,0x48,0x2a,0x5d,0x7b,0xc3,0xb5,0x1b,0x8f,0xee, - 0x4f,0xb2,0x47,0x51,0xda,0x81,0x4b,0x62,0x7a,0x52, - 0xaa,0xc5,0x8f,0x1e,0xc0,0x0b,0x27,0xf8,0xb3,0x29, - 0x10,0x29,0x11,0x9c,0x74,0xa7,0x36,0x00,0x84,0x73, - 0x4f,0x20,0x21,0xce,0x6d,0x72,0xf3,0x89,0xa9,0x68, - 0x3a,0xaf,0xa7,0x18,0x9f,0x62,0x7b,0x6a,0x61,0x26, - 0xd4,0x31,0x79,0x7e,0x3a,0xbf,0x4d,0xa2,0xd5,0xbc, - 0xa6,0x17,0xeb,0x2a,0x4f,0x85,0x6c,0xb5,0x7a,0xa3, - 0x89,0x91,0x8d,0x72,0xf3,0x04,0x97,0xbb,0x17,0x47, - 0x0e,0xcd,0x41,0x4a,0xfd,0xa4,0xde,0xf4,0xa6,0x35, - 0x36,0x8d,0x8b,0x4e,0x9e,0x36,0x53,0x76,0xad,0x0b, - 0x5a,0xe0,0xbc,0x33,0x59,0x4f,0x4c,0x9a,0x22,0x5b, - 0x42,0xb0,0x5b,0x38,0x6e,0x04,0xd6,0xe9,0x42,0x39, - 0x15,0x57,0x25,0x4b,0x4e,0x93,0x84,0x1b,0xdf,0xad, - 0x29,0x28,0xa8,0xa1,0x23,0x09,0xc3,0xa5,0xb5,0x90, - 0x44,0xcd,0x88,0xdc,0x98,0x0e,0x8c,0xa9,0xd7,0x4d, - 0x01,0x71,0x12,0x78,0xdb,0x90,0x69,0x41,0xb5,0xdb, - 0xa2,0x2b,0x86,0x0c,0x7b,0x12,0x6a,0x38,0xf9,0x97, - 0xa5,0xfd,0x30,0x79,0x18,0x2d,0xbf,0xe7,0x4c,0x68, - 0xdf,0x94,0x68,0xb8,0x56,0x04,0xe9,0x09,0x75,0xfd, - 0x19,0xf3,0x3e,0x4f,0xa0,0x06,0x9c,0xa1,0xf5,0xe7, - 0xf6,0xf1,0x49,0x6d,0x54,0xfd,0xbc,0x5b,0xf4,0x91, - 0x92,0xa8,0x49,0x9a,0x82,0x6c,0x88,0x7a,0x82,0xe9, - 0x0e,0xe6,0xff,0xe8,0xe4,0x90,0x23,0xeb,0xbb,0x42, - 0x75,0x42,0xa8,0x88,0x9b,0x94,0xb4,0x8b,0x88,0xb6, - 0x40,0xf1,0x2e,0x91,0xdc,0xdd,0xa8,0xb6,0x26,0x7f, - 0x1b,0x53,0xe3,0x4f,0x7e,0x36,0xe9,0x66,0x39,0xbe, - 0xaf,0xb6,0xfa,0x9c,0x29,0xaa,0x5b,0xbf,0x44,0xe6, - 0x4f,0xe7,0x89,0x33,0x01,0xdf,0xca,0x19,0x50,0x8b, - 0xf3,0x13,0x72,0xb6,0x9d,0x02,0x4d,0x9b,0x8f,0xfe, - 0x71,0x0f,0xc9,0x8d,0xb7,0xa7,0xc0,0x95,0xda,0x21, - 0xe6,0x25,0x9d,0xc9,0x91,0x9c,0x26,0x66,0x1c,0xc7, - 0x82,0x60,0xbb,0x6d,0x1f,0x55,0xb3,0xca,0xcd,0x21, - 0xbd,0x81,0xf9,0xdc,0x88,0xf6,0xb6,0x4f,0x9b,0x2a, - 0xa7,0x81,0x00,0x79,0x0c,0x72,0x77,0x48,0x21,0x3a, - 0xc1,0xe3,0x4e,0x6d,0xd9,0xbd,0xe3,0x9e,0x04,0x91, - 0xf9,0xe9,0x20,0x7a,0x78,0x36,0xad,0xc8,0x29,0x20, - 0xeb,0x94,0x48,0x0a,0x4e,0x6e,0x2a,0xc9,0x71,0x86, - 0x28,0xc8,0xaa,0x10,0x61,0x0a,0xb4,0x69,0x84,0xd8, - 0x69,0xa7,0xa4,0xd6,0x88,0x16,0x05,0x7d,0x7a,0x91, - 0x84,0xea,0x1c,0xb7,0xc2,0xb5,0x75,0x36,0xfc,0xb4, - 0xa9,0x00,0xda,0xb4,0xcc,0x75,0x0a,0x67,0x9a,0x5c, - 0x4b,0xc9,0xb3,0x4a,0x27,0x6c,0x5b,0x23,0x8e,0x03, - 0x31,0x4c,0x2b,0xae,0xda,0x57,0x29,0x76,0x4c,0x28, - 0xcf,0xc6,0x66,0x63,0x21,0x0f,0xf0,0xe0,0x5c,0x2c, - 0xdb,0x4e,0xcf,0x6a,0x3a,0x4c,0xcf,0x6e,0x0e,0xba, - 0x4f,0x7f,0x46,0xf7,0x48,0x92,0xed,0xa0,0xe9,0x30, - 0x37,0xe8,0xe2,0x9e,0x5f,0xd2,0xfb,0x71,0xc5,0x1c, - 0x71,0x6e,0x3e,0x51,0x3c,0x56,0x1b,0x1f,0x87,0xf0, - 0x6e,0x69,0x09,0x6e,0x40,0x45,0xcf,0xed,0x49,0xb5, - 0x3a,0x25,0x68,0x93,0x54,0x83,0xb6,0xa6,0x26,0x23, - 0xe2,0xa9,0xbd,0xbb,0x91,0x22,0xd8,0x0c,0x8f,0xbc, - 0x68,0x3c,0x71,0xa3,0x2b,0x93,0xc6,0xcc,0xc9,0x7c, - 0xd2,0x49,0xc0,0xcb,0x45,0x9f,0x0d,0x0a,0x65,0x5a, - 0x20,0x0f,0xf2,0x2b,0xe9,0x55,0x80,0x0e,0xcf,0xa1, - 0x40,0xb1,0xd4,0x3a,0x42,0xc4,0x4a,0xef,0x75,0xaa, - 0x5a,0xd2,0x78,0x6c,0xb0,0x82,0x38,0x13,0x1a,0x55, - 0x55,0xd7,0x9f,0x3f,0x7f,0x56,0xa3,0xb2,0x49,0xae, - 0x3f,0xad,0x0d,0xf7,0xfe,0xb6,0x41,0x41,0x95,0xc0, - 0xfb,0xe1,0x4c,0xa3,0xce,0x13,0x67,0x40,0xa1,0xf0, - 0x4d,0x9b,0xc6,0xac,0xb9,0xe3,0xde,0x4d,0x55,0x1d, - 0xa7,0x3d,0x74,0x99,0x31,0xed,0x85,0x8a,0xf8,0x09, - 0xd3,0x0d,0x56,0x45,0x58,0xaf,0x2f,0x20,0x60,0x47, - 0xd7,0x83,0x49,0xc0,0xce,0x74,0x08,0x29,0xba,0xe1, - 0xe0,0xf6,0x34,0x62,0x3b,0x0d,0x45,0xb8,0x0a,0xd6, - 0xd9,0xdf,0x98,0xef,0x3a,0xae,0x4d,0x91,0x84,0xdc, - 0xa6,0xb1,0xe0,0x40,0xcc,0x7f,0xb4,0x72,0x9c,0x47, - 0x92,0xdb,0x07,0xfd,0x30,0x0b,0x7c,0x8c,0xa3,0x28, - 0x87,0x8a,0x3e,0x26,0x85,0x60,0x3d,0x6c,0xf4,0x3d, - 0xa8,0x15,0x10,0x69,0xd6,0xa4,0xd6,0x10,0x89,0x89, - 0x3a,0x42,0xfc,0x66,0xa2,0x4b,0xcf,0x14,0xd5,0x74, - 0x73,0xf1,0x83,0x26,0x92,0x83,0xec,0xc5,0x3a,0xfe, - 0xba,0xf3,0x43,0xf7,0x5c,0x8f,0x1d,0xdf,0xd7,0x7b, - 0x4c,0x1b,0xe7,0x90,0x67,0x22,0x15,0x0c,0x09,0xa1, - 0x22,0xa7,0x02,0xb7,0x6f,0x37,0x04,0x7c,0x57,0x70, - 0x2d,0x90,0xea,0x43,0x48,0xe7,0xd4,0xd1,0xf9,0x1b, - 0x6f,0xb2,0x94,0x47,0x0c,0x4a,0xe8,0x27,0x99,0x03, - 0xff,0x8c,0xc1,0x4f,0x6d,0x8f,0x0d,0x7c,0xbf,0xa9, - 0xbe,0xa7,0x3e,0x2b,0xa1,0x0b,0x24,0x14,0x48,0x63, - 0xf7,0xd3,0x75,0xa5,0xf6,0x10,0xdd,0x77,0xe2,0x78, - 0xb8,0xe9,0x99,0x64,0x30,0x4a,0x3d,0x69,0xfd,0x2c, - 0x42,0x8d,0x74,0xf1,0x6d,0x94,0x48,0x1d,0x19,0x8c, - 0xde,0x2f,0x59,0x8f,0x10,0x12,0xd3,0x9f,0x45,0xa8, - 0x8a,0x1d,0xcf,0xc4,0x3a,0xca,0x27,0x1f,0xaa,0x64, - 0x72,0x37,0x99,0x0f,0x3a,0x1e,0x82,0x9a,0x9d,0x6e, - 0x94,0x73,0x93,0x87,0x5d,0xb2,0x92,0x71,0x84,0xe2, - 0x8d,0xa2,0xf4,0x84,0xca,0x0e,0xc9,0x28,0xee,0x17, - 0xf7,0x7c,0xbb,0xdc,0xc1,0x86,0x07,0xa3,0xd2,0x10, - 0xc9,0xe5,0x3d,0xf9,0x59,0xd1,0x50,0x44,0xe2,0xa7, - 0x50,0xd2,0xbf,0x40,0x30,0xce,0xb2,0x95,0x1d,0x7f, - 0xce,0xd9,0x8a,0x7c,0xd2,0xfe,0x23,0x65,0xdb,0x84, - 0x24,0x06,0x9e,0x97,0x3b,0x38,0x4f,0x42,0x9e,0xa6, - 0xf6,0x6b,0x47,0x1d,0xa6,0xa9,0xdd,0x80,0x6a,0x1c, - 0x13,0x5b,0xce,0x34,0x5a,0xad,0x6d,0xb5,0xcd,0xf9, - 0xb1,0x51,0x9d,0x77,0xd3,0x43,0x13,0xb2,0xbe,0x19, - 0xa6,0xd9,0x1c,0xea,0x93,0xda,0xfb,0x56,0x88,0x31, - 0x4d,0x96,0x12,0xf9,0x7c,0x83,0xc2,0xde,0xeb,0xc5, - 0x99,0xfc,0xa6,0xc9,0xb1,0xd0,0xe1,0x39,0x29,0x59, - 0x9f,0x78,0x77,0x10,0x73,0x0f,0x4d,0xac,0x4f,0x9a, - 0x40,0x44,0x29,0x78,0x51,0x06,0xba,0x7c,0xb1,0x27, - 0xf5,0x94,0x09,0xae,0xd2,0x84,0x23,0xc1,0xc4,0xff, - 0x91,0x4c,0x32,0xdd,0x8f,0x83,0x6b,0x93,0x2f,0x50, - 0xfa,0xee,0x24,0xe0,0x37,0xf4,0x27,0xdf,0x10,0x8f, - 0x5e,0x49,0x10,0x0a,0x35,0xf1,0x62,0x34,0xd8,0xc3, - 0xb4,0x13,0xa2,0x5b,0x1b,0xc1,0x34,0x82,0x32,0x27, - 0xd4,0x67,0xf3,0xcf,0xc6,0xe3,0x8d,0x12,0xc1,0xce, - 0x79,0x48,0xfc,0xa8,0x61,0x0d,0x9d,0x04,0xeb,0x87, - 0x67,0xfd,0xf3,0x3d,0xbf,0x7e,0xfd,0xfa,0xf1,0xc9, - 0x9a,0x90,0x36,0xf2,0xd6,0x72,0xe2,0x85,0xba,0xa7, - 0x92,0x9c,0x81,0x26,0xd3,0x6a,0x02,0x1a,0x0e,0xc1, - 0x33,0xb5,0x31,0xcd,0xbb,0x3d,0xae,0x0a,0x1c,0x94, - 0x88,0xd7,0x89,0xab,0x79,0x6e,0x76,0xc4,0x7e,0xe1, - 0x15,0x77,0xa8,0xad,0x95,0x92,0x1f,0x42,0x07,0xd2, - 0x34,0x55,0x22,0xf6,0x07,0xfe,0xda,0x49,0x8a,0xdb, - 0x49,0x69,0x7c,0x6a,0xa3,0x11,0x7d,0x80,0xda,0x81, - 0x44,0x38,0x9f,0xde,0xcd,0xe4,0xdd,0x96,0x8c,0xa1, - 0x35,0xb1,0x36,0x95,0xfe,0xd9,0xf0,0x88,0x28,0x31, - 0x9e,0x74,0x6d,0x52,0x11,0xe4,0x92,0x05,0x87,0x4a, - 0x6e,0x29,0x0b,0xa9,0xf8,0x57,0xc4,0x76,0x42,0x35, - 0xd3,0xcf,0xc0,0x14,0x20,0x22,0xa0,0x32,0xa4,0x33, - 0xa2,0xc2,0xa9,0xc3,0xa3,0x7b,0xc5,0x51,0x00,0x26, - 0x8e,0x96,0xfe,0x3c,0xf1,0x8f,0xa7,0xb5,0x46,0x9d, - 0xae,0x97,0x83,0xb3,0x40,0xd7,0x23,0xb6,0x1d,0x28, - 0xd1,0xd8,0xb4,0x2a,0xd2,0xe8,0x1a,0x55,0xfe,0x89, - 0x75,0xde,0x0d,0x4e,0x5d,0xd6,0x37,0x71,0x95,0x92, - 0xb5,0x03,0x28,0x66,0x9e,0x4d,0x9f,0x7e,0x93,0xdc, - 0xf5,0xbe,0x34,0xb9,0x13,0x53,0xa2,0xf5,0x89,0x69, - 0xde,0xb4,0x29,0xf5,0x20,0xa6,0xd6,0x62,0x4a,0x4e, - 0x53,0x10,0xda,0x4c,0x13,0x50,0xa2,0xad,0xd5,0xdb, - 0x76,0x32,0x2e,0xbd,0xa3,0x64,0x5c,0xaa,0xc4,0x69, - 0x52,0xce,0x4e,0x5c,0x9c,0x9e,0x94,0x38,0x12,0x72, - 0xea,0x5b,0x13,0xe2,0xd1,0x9f,0xd7,0x9d,0x3c,0x0d, - 0x15,0xd1,0x59,0x1a,0x45,0xbe,0xb5,0xb7,0x36,0xfa, - 0x57,0xed,0x80,0x3a,0xee,0x3a,0x53,0x02,0x7a,0x3f, - 0x63,0xa7,0x87,0xd3,0x93,0xac,0x3b,0xd1,0xda,0xc2, - 0xe7,0xaa,0x06,0x3d,0x25,0x0b,0xce,0x6f,0x89,0x63, - 0xeb,0x89,0x07,0x40,0x28,0x5c,0x4e,0x3a,0xf8,0xe1, - 0x59,0x51,0x7c,0x39,0xc0,0x3f,0xa1,0x49,0xa0,0x93, - 0x10,0x54,0x8a,0x4d,0xd4,0xca,0xef,0xcf,0x6c,0x4a, - 0xc6,0x7a,0x5b,0xcf,0xac,0xab,0xe3,0xd6,0xa2,0x6b, - 0xa7,0x99,0x67,0x74,0x36,0x1d,0x8a,0xe9,0x8c,0x4a, - 0xc6,0xd0,0x5b,0x2e,0xd0,0x84,0x42,0x6d,0x5a,0x8b, - 0x2e,0x99,0x4a,0x06,0xcf,0x6e,0x00,0xc9,0x59,0x29, - 0x49,0x2c,0x5b,0x4d,0x12,0x6e,0x65,0x04,0xdc,0x5e, - 0x9e,0xae,0x3f,0x51,0x37,0xa8,0x15,0xe9,0xb4,0x89, - 0x92,0xae,0x9f,0x53,0xb4,0x7e,0x14,0x8a,0x69,0x54, - 0x73,0x53,0x31,0xeb,0xcd,0x07,0x84,0xe2,0x68,0x75, - 0xea,0x2a,0xd8,0xcd,0x68,0x67,0xd2,0xb9,0xd8,0x12, - 0xa6,0x1c,0xab,0x5f,0xcd,0x23,0x3f,0x41,0xa0,0xdc, - 0xcb,0xdd,0x28,0x60,0x53,0x9f,0x56,0x48,0x97,0x07, - 0xbc,0x8b,0xd6,0x92,0xf1,0x0e,0xad,0xea,0x9c,0x95, - 0x8d,0x3c,0x7d,0x6a,0x0b,0xa4,0x0a,0x20,0x8d,0x2a, - 0xa6,0x60,0x9b,0xb2,0xf7,0xc9,0x33,0xc8,0xf1,0x88, - 0x26,0x53,0xd5,0xa9,0xfd,0x35,0xf9,0x2d,0xb9,0xea, - 0x17,0xda,0x58,0x67,0x83,0x0a,0x6e,0x0e,0x79,0xb9, - 0x86,0x93,0xda,0x31,0x4e,0xad,0x36,0x55,0xf2,0xc0, - 0xc9,0x5a,0xa9,0x42,0xdf,0xcb,0xb6,0xf3,0x73,0x36, - 0x84,0x50,0x39,0x14,0xef,0xdf,0x3d,0x84,0xd6,0x4c, - 0xd5,0x2f,0xb5,0x83,0x92,0x65,0xc6,0x20,0x44,0x7a, - 0x86,0x43,0xf6,0x10,0x2a,0xd2,0x9f,0x83,0x81,0xef, - 0x8f,0xf2,0xf4,0x88,0x87,0xe2,0xfe,0x5d,0x93,0xc8, - 0xa9,0x4a,0x27,0x8f,0x44,0x22,0xe2,0x27,0x2e,0x17, - 0x3c,0xd7,0x23,0x08,0xa4,0x4e,0x62,0xda,0xb8,0x39, - 0x1d,0xbe,0x1b,0x62,0xf5,0xc6,0x2a,0x02,0x62,0xcf, - 0x31,0xcf,0x09,0x15,0x93,0xa7,0xd1,0x6f,0x97,0x28, - 0xd2,0x7a,0x21,0x25,0xe6,0x29,0x81,0x23,0xca,0x44, - 0xe7,0xd4,0x26,0x1a,0x45,0xb2,0x29,0x49,0xcf,0x2e, - 0xc5,0x7c,0xe2,0x14,0xe9,0xef,0xe9,0x24,0xdd,0x02, - 0xc1,0xb5,0x52,0x20,0x69,0x82,0x32,0xa1,0x53,0xe7, - 0x9c,0x7f,0x48,0xd0,0x1b,0x92,0x6f,0xf2,0x7b,0xea, - 0x88,0x0b,0x8d,0xd1,0x6d,0xcc,0x11,0x95,0x5c,0xa6, - 0x9f,0x35,0xf5,0xd3,0xdd,0xe8,0xa9,0x3e,0x88,0x4e, - 0x08,0x76,0xc6,0xa0,0x7d,0x11,0x6e,0x3c,0x69,0x88, - 0x00,0x4e,0x42,0x6c,0x4b,0xbf,0xab,0xcd,0xcf,0x45, - 0xaf,0xa6,0xa9,0x97,0xbc,0x80,0x64,0xcf,0x94,0x89, - 0xab,0x20,0x98,0x26,0x2b,0xae,0xb5,0x42,0x30,0xb7, - 0x7e,0x5e,0x6a,0x5f,0x0d,0x13,0x48,0x67,0x83,0x08, - 0x11,0x49,0x91,0x20,0xf1,0x0d,0xdc,0x6a,0x02,0xd7, - 0x99,0xf8,0x3b,0xa9,0xa7,0x0f,0x49,0xf3,0x19,0xf6, - 0xd5,0x99,0xd4,0x83,0x6f,0xf4,0x8c,0x82,0xb5,0x93, - 0xd1,0x97,0x36,0xed,0xe3,0x3e,0x1c,0x71,0xd5,0xa8, - 0x2d,0x9f,0xfe,0xcf,0x77,0x5b,0xee,0x34,0xd5,0xe8, - 0xd3,0x90,0x9e,0xc8,0x3f,0x9b,0xf8,0x49,0xed,0xf9, - 0x9f,0xd4,0x12,0xd0,0xc3,0x0f,0x90,0xad,0x11,0x1d, - 0xfa,0x54,0x74,0x2f,0xb5,0xc9,0xdd,0x38,0xf2,0x56, - 0x4f,0x6b,0x53,0x80,0x4c,0x49,0x82,0x26,0xbf,0x1b, - 0xc3,0x4b,0xa7,0xa3,0x96,0xae,0x43,0xb5,0x9b,0x88, - 0xe0,0x9b,0x50,0xfa,0x4d,0xc7,0x61,0x83,0x04,0x4f, - 0xc5,0xcf,0x24,0x1d,0xe1,0xce,0x43,0x45,0x86,0x5d, - 0xd2,0xeb,0xee,0x89,0x7c,0xb2,0xfa,0x7a,0xf8,0xfe, - 0x1c,0x9b,0xac,0x4f,0x09,0x8a,0xaa,0x56,0x4f,0x46, - 0xdf,0x13,0xa7,0x68,0x83,0xea,0xa7,0x5c,0x22,0x91, - 0xdc,0x29,0x41,0x4a,0x89,0xf0,0xb0,0xd7,0x1e,0xc5, - 0xdf,0x2b,0x55,0x15,0x4a,0x5e,0x4b,0x63,0x86,0x0e, - 0x12,0xdd,0x6c,0x1a,0xfd,0x87,0x16,0xc9,0x25,0xb6, - 0x00,0xe4,0xa8,0x0e,0x9b,0xe1,0x24,0xeb,0x08,0x0d, - 0xf6,0x49,0xdf,0x60,0x38,0x58,0x26,0x7d,0x96,0x33, - 0x1c,0xc8,0xa3,0xfa,0xeb,0x04,0xcd,0x13,0x7f,0xc0, - 0xf9,0xa3,0x40,0x42,0x13,0xfb,0xff,0x9b,0xaa,0x47, - 0x47,0xaf,0xb7,0x0a,0xe0,0x13,0xaa,0x63,0xb8,0x3f, - 0x88,0x50,0x98,0x8a,0xe0,0x4c,0x08,0xe3,0x02,0x31, - 0x3a,0x69,0x6d,0xa6,0xe7,0x69,0x36,0xea,0x01,0xd4, - 0xe5,0xf1,0xfd,0xfd,0x70,0xf9,0xfe,0x0e,0x74,0x25, - 0xbf,0x2d,0x09,0x86,0x16,0xd7,0xe3,0xc0,0xdf,0x26, - 0x12,0x53,0x4b,0x80,0x48,0xac,0xc9,0x8f,0x29,0x11, - 0xbe,0x37,0xc4,0x46,0x12,0xfd,0x4c,0xc5,0x9d,0xfa, - 0x22,0x91,0x7f,0x50,0x6a,0x17,0x98,0x8a,0xf9,0x04, - 0xe4,0xf9,0x04,0xe2,0xea,0xa1,0xe1,0x03,0x68,0xff, - 0xda,0x3f,0x1f,0xf6,0xde,0x71,0xfb,0x5e,0x8d,0x3f, - 0x49,0xbe,0x83,0x24,0x45,0x9c,0x14,0x04,0xb5,0x5a, - 0x54,0x31,0x9b,0x12,0xcf,0x4e,0xc8,0x1d,0xd0,0x03, - 0xc7,0x65,0x79,0xf0,0x84,0xdc,0x84,0x60,0xea,0xa3, - 0x6e,0xd4,0xf4,0x27,0xa9,0x0a,0x47,0x1d,0x48,0x34, - 0x86,0xe4,0x09,0x46,0x49,0x92,0x8b,0x8f,0x93,0x86, - 0x0f,0x19,0x20,0x53,0xbc,0x9a,0xac,0xa3,0x12,0x72, - 0xb4,0x89,0x01,0xee,0x9c,0xba,0xf9,0x8a,0x09,0x28, - 0x99,0xbe,0xc7,0xdd,0x9b,0xbb,0xef,0x97,0xf3,0xcb, - 0x98,0xdc,0xb9,0x53,0xbb,0xc2,0x65,0x99,0x29,0xbb, - 0x24,0x35,0xcb,0x65,0xbb,0xe1,0x7c,0xc2,0x53,0x9a, - 0x5a,0x0d,0xf4,0xfb,0xc9,0xff,0x6c,0x72,0x33,0x4e, - 0x44,0xda,0x74,0xaf,0x09,0xc2,0x4b,0xa8,0x84,0x39, - 0x7c,0xce,0x96,0xd8,0x9e,0xee,0xcb,0x5d,0x83,0xea, - 0xb3,0x88,0x40,0xdc,0x9a,0xbc,0xad,0x9f,0x3f,0x69, - 0x2b,0x51,0xd2,0x9b,0x5a,0x59,0xca,0xe9,0x71,0x81, - 0x30,0x55,0x25,0x14,0xe4,0x28,0xa9,0xa7,0x51,0x79, - 0xe7,0x41,0x35,0x3d,0x93,0x29,0xd1,0xa7,0x35,0xb1, - 0xd0,0xcc,0x38,0x4e,0xd6,0x3e,0xb4,0x27,0x0f,0x11, - 0x33,0x37,0xa2,0x87,0xb4,0x9f,0x88,0xdf,0x41,0x95, - 0xed,0xa0,0xef,0x74,0xa0,0x95,0x41,0xfb,0xe8,0x28, - 0xda,0x0c,0xcf,0xd9,0x49,0x76,0xd8,0x75,0xb4,0x59, - 0x2f,0xd4,0xda,0x95,0xef,0x18,0xdb,0x2f,0x13,0x7a, - 0x1c,0xd4,0xb2,0x23,0x8a,0xee,0xf6,0x14,0x99,0xb0, - 0xa6,0x03,0x94,0x04,0x41,0x37,0x53,0x5e,0xe9,0xf9, - 0x6f,0xf8,0x31,0xd3,0x94,0x1b,0xc5,0xd0,0x69,0x48, - 0xc0,0x3c,0xc3,0x33,0xfd,0xde,0xa6,0x35,0xa3,0xa8, - 0xb8,0xb6,0xb1,0xdc,0x50,0xca,0xa4,0x41,0x36,0x25, - 0x0f,0x94,0xa0,0xc0,0x1e,0xb3,0xa6,0xa5,0x29,0x3e, - 0x51,0xc2,0xe4,0xd6,0x47,0x1a,0x9a,0xda,0x70,0x90, - 0x26,0xfe,0xad,0x6b,0x05,0xbf,0x54,0x0c,0x6a,0x7a, - 0x58,0x9b,0xcc,0xce,0xc1,0x85,0x6e,0x6c,0x3c,0x6d, - 0xee,0x24,0x9d,0xbd,0xcd,0x26,0x69,0xa3,0xa7,0x0d, - 0x44,0x1b,0x9c,0x12,0xa1,0x61,0xba,0xc2,0x6e,0xce, - 0xc9,0x8a,0x62,0x22,0x5f,0xa7,0x43,0x20,0xe9,0xa6, - 0x68,0x85,0x95,0x88,0xc6,0x53,0x4b,0xa6,0xf7,0xf5, - 0x09,0x4a,0x25,0x19,0x84,0xa9,0x2f,0xee,0x90,0x96, - 0xae,0x3e,0x9b,0x0e,0xde,0x7e,0x50,0x6f,0x44,0x3d, - 0x03,0x04,0x4e,0x2d,0x80,0xe3,0x36,0x32,0x25,0x07, - 0x7a,0xc0,0x91,0x67,0x9b,0x43,0x25,0x52,0x90,0xb9, - 0x02,0xd1,0xf8,0x7e,0xc7,0x4e,0xdb,0xcb,0x24,0x6e, - 0x67,0x52,0x97,0x36,0x3c,0x96,0x37,0x3b,0x02,0x87, - 0xe2,0xa6,0x24,0x4e,0xab,0x32,0x77,0x40,0x6f,0xda, - 0xcc,0x9a,0x2c,0x28,0xea,0xb3,0x68,0xbb,0x8f,0xc2, - 0x94,0x4e,0x07,0x2a,0xa1,0x34,0x50,0x14,0x1d,0x57, - 0x08,0x91,0x26,0x51,0x6a,0xcb,0x74,0x25,0xe6,0x25, - 0x2a,0x8c,0xfa,0x49,0xa0,0xe9,0x32,0x26,0x0d,0x1a, - 0x03,0xd2,0xa4,0x2a,0xb5,0x35,0xa8,0x75,0xb2,0x89, - 0xa9,0x93,0x01,0xad,0x56,0xfb,0x09,0xd1,0x20,0xb1, - 0x56,0xd7,0xf2,0xdc,0x20,0x3f,0x9b,0x73,0xcb,0x28, - 0xd3,0x63,0x91,0xe7,0x12,0xc6,0x8d,0x6f,0x56,0x48, - 0x16,0x4e,0x1a,0xc2,0x20,0x6a,0xc3,0x94,0xb0,0x90, - 0x91,0x6b,0x88,0x4f,0x0f,0xa0,0x44,0x5b,0x5e,0xe9, - 0xb9,0x50,0xc7,0x87,0xd0,0x6d,0x8a,0x1b,0x2f,0xd7, - 0x1e,0x49,0x5c,0x0b,0xb3,0xa8,0xce,0x04,0x1d,0x4f, - 0x49,0x13,0x91,0x7b,0x93,0x17,0xd6,0x86,0x69,0x9e, - 0xfa,0x82,0x34,0xc6,0x9a,0x16,0x91,0x8e,0x24,0xa7, - 0xea,0x58,0xdb,0x79,0xee,0x85,0x90,0xd8,0x9b,0x5b, - 0x7c,0x7d,0xc4,0x7b,0xab,0xd0,0x4a,0xbc,0x01,0x5a, - 0xc0,0x6e,0xf2,0xc6,0x8d,0x50,0x52,0xb2,0xe0,0x0e, - 0x17,0x0a,0xf6,0x49,0x86,0x20,0xf5,0xcb,0x5d,0x42, - 0x42,0xe3,0xf9,0xe6,0x80,0x3e,0x93,0xf5,0x82,0x56, - 0x51,0x89,0x78,0x6b,0x38,0x64,0x0f,0xdb,0x84,0x6f, - 0x94,0x2c,0x69,0xca,0x1c,0x17,0xe8,0x52,0xc5,0xe5, - 0xee,0x7d,0xe2,0x71,0xa4,0x77,0x4e,0x8e,0xef,0x74, - 0x50,0xb5,0xb5,0xe1,0x6c,0x5a,0xc6,0xc0,0x43,0x87, - 0xec,0x34,0x09,0x47,0x13,0x6b,0xc9,0xda,0x24,0xe5, - 0x05,0x84,0x08,0x68,0x8b,0x88,0x82,0x79,0xe2,0xdf, - 0xd1,0x84,0x53,0x4a,0xca,0xb4,0x65,0x3b,0xb5,0xdc, - 0xcc,0xf7,0x93,0x18,0xe4,0xd9,0x56,0xfe,0x21,0xe9, - 0x19,0x5b,0x46,0xba,0xcf,0x9c,0x2d,0x87,0x14,0x2f, - 0x67,0x83,0xdc,0x26,0xe5,0x6b,0xc7,0x4d,0x75,0xc9, - 0x8f,0x69,0xe9,0x5a,0x34,0x36,0xbd,0xcf,0x8d,0xdf, - 0x5a,0x1a,0x42,0x71,0x43,0x25,0xe9,0x20,0x5f,0xb6, - 0x5d,0x11,0x01,0xa3,0x35,0xae,0xf1,0xc9,0x15,0xf9, - 0x13,0xbf,0x4a,0xa5,0x09,0x16,0x85,0xfb,0x49,0xad, - 0xbb,0xc5,0x50,0xcb,0xa1,0x9f,0xdd,0xbc,0x17,0x2a, - 0xa2,0x5e,0x74,0xd8,0x4c,0x46,0x77,0x9b,0xbe,0x38, - 0xc1,0xf2,0xd3,0x18,0xdc,0x34,0xbe,0x9d,0x46,0x4d, - 0xa9,0x0d,0x65,0xa6,0x61,0x1e,0xfd,0xea,0x6d,0x15, - 0xe6,0x5e,0x1c,0xf8,0xac,0xd8,0xbe,0xbb,0xbe,0x40, - 0x27,0x84,0x98,0x0e,0xe6,0xc4,0x03,0x48,0xaa,0xaa, - 0x9b,0x76,0xcb,0x06,0x4d,0x0b,0xb6,0x23,0xe3,0xf3, - 0x4a,0x09,0xdb,0x04,0x15,0x5f,0x46,0x0d,0x37,0xad, - 0xb1,0xa9,0xca,0x51,0x2e,0x81,0x79,0x5e,0x56,0x97, - 0xc5,0x25,0x34,0x29,0x80,0xf7,0xa9,0x9e,0xd4,0x6e, - 0x85,0x04,0xec,0x6c,0x92,0xf3,0x90,0xa4,0x9d,0x84, - 0x70,0x48,0x80,0x39,0xdb,0x77,0xd7,0xd6,0xed,0x0f, - 0x81,0x39,0xe8,0xea,0x44,0xd4,0x34,0x21,0xbe,0xb0, - 0xa7,0xfb,0x84,0x59,0x4c,0xa8,0x26,0x2e,0xd7,0x70, - 0x98,0x1f,0xd2,0x93,0xd2,0x04,0xc7,0x25,0xb1,0xca, - 0x85,0x21,0xeb,0x8e,0x0d,0xc9,0xbf,0x27,0xab,0x9b, - 0x56,0x68,0xf2,0x3f,0xa2,0xfd,0xec,0x2a,0xbb,0x81, - 0x77,0x71,0xb6,0xb1,0xd2,0x69,0x3f,0xb9,0x6b,0xd2, - 0xf5,0xee,0x0a,0x97,0xfb,0x0f,0xd2,0x44,0x6c,0xdb, - 0xc7,0x27,0xec,0xfb,0x91,0x93,0x93,0xb4,0x90,0x02, - 0x4a,0x7e,0x20,0x51,0x8f,0x08,0xfb,0x80,0x94,0xdb, - 0x64,0x80,0xda,0xc7,0x7f,0x13,0x8b,0xd3,0xf7,0xa6, - 0x42,0x70,0x43,0x52,0x4e,0xe8,0x6e,0x12,0x00,0x76, - 0xe7,0x4c,0x2a,0x38,0x68,0xcd,0x21,0x1f,0x2a,0xd9, - 0x59,0x24,0x7e,0xcf,0x46,0x2d,0x12,0x02,0x17,0xf2, - 0x27,0xc8,0x59,0x5c,0xaf,0x2b,0x8d,0x86,0x52,0x35, - 0x0a,0xc6,0x74,0x36,0xf1,0xa0,0x80,0x96,0x5a,0x56, - 0x29,0xb0,0x4c,0x5e,0x54,0x09,0xad,0x49,0x55,0x38, - 0x65,0xda,0x2e,0x90,0x6f,0x08,0xba,0x53,0x12,0x94, - 0x08,0xb0,0x9b,0x29,0x81,0x09,0x8d,0xd0,0x56,0xcb, - 0x66,0x33,0x87,0x35,0x7a,0xee,0xb6,0x8a,0xb6,0xa0, - 0x02,0xd1,0x1e,0x0f,0xbb,0x49,0x26,0x40,0x7f,0x57, - 0x47,0xe1,0x87,0x9b,0x39,0xd3,0x33,0xa5,0x64,0x5f, - 0xc7,0xda,0x35,0x98,0x38,0xae,0x51,0x4a,0x3e,0x27, - 0xf8,0x5a,0xdb,0x0c,0xc2,0x65,0xf9,0x58,0xab,0x87, - 0x0e,0x12,0xd3,0x46,0x3c,0xca,0xef,0xd9,0xec,0x2d, - 0xf3,0x0c,0x57,0xb2,0xfd,0x7d,0xcf,0xd0,0xbe,0xef, - 0xed,0x43,0x50,0x72,0x3e,0x0b,0x0b,0x1e,0xa7,0x6c, - 0x7b,0xa8,0x55,0x1a,0x9e,0x15,0xa1,0x7d,0xe7,0x13, - 0x74,0x60,0xe2,0x8d,0x39,0x43,0xec,0x45,0xfb,0x3a, - 0x26,0xa6,0x13,0x0f,0x2c,0x1d,0x80,0x4e,0xee,0xa2, - 0x17,0x31,0x5a,0x00,0xf6,0x36,0x0b,0x39,0xca,0x27, - 0x6b,0x97,0xd4,0x12,0xa7,0x64,0x36,0x25,0xd0,0x2e, - 0x21,0x4a,0xcf,0x0d,0x62,0x8b,0x2d,0x86,0x53,0x31, - 0x92,0x78,0x34,0xd4,0x72,0xa3,0xbd,0x99,0x3e,0x73, - 0x2b,0x6b,0xa0,0x88,0x2a,0x8c,0xf4,0x3f,0xee,0x79, - 0x2a,0xa2,0xa7,0xf3,0x82,0xdc,0xe0,0xad,0xdb,0x38, - 0xf1,0x4c,0x92,0x17,0xc7,0x04,0xeb,0xd1,0xc5,0x6d, - 0xdc,0x90,0xb5,0x8f,0x3d,0x04,0x89,0x63,0xf8,0x4e, - 0x27,0x91,0x8c,0xb5,0xc7,0x3d,0x41,0xa4,0x13,0x37, - 0xa7,0x57,0x2e,0x6e,0xe3,0x26,0x35,0xd6,0x69,0x41, - 0x4d,0x7d,0xf1,0x49,0xaf,0x24,0xe8,0x36,0x4c,0xfc, - 0x87,0x2b,0xf0,0x1f,0x0e,0xf1,0x21,0xa8,0x3a,0xa2, - 0x00,0x90,0xb4,0x2c,0x88,0x83,0x91,0x02,0x34,0x25, - 0xb1,0xe4,0xdb,0xe5,0x0e,0x9c,0x34,0xa6,0x0e,0xef, - 0xe8,0x84,0x35,0x7f,0x02,0x1c,0x1c,0xf9,0x3e,0x6e, - 0x6c,0xbc,0x73,0x6c,0x7a,0x8b,0x76,0x0a,0xe8,0xca, - 0xa7,0x71,0xbc,0x85,0xd4,0xbe,0x92,0xfb,0xb9,0x3f, - 0xe7,0x27,0x79,0xd1,0xcf,0x05,0x4e,0xcc,0x11,0x51, - 0xc5,0x47,0x32,0x42,0x63,0xc9,0x64,0x54,0xd9,0xae, - 0x01,0x51,0x64,0x7a,0x87,0xc0,0xc3,0x38,0x54,0xa8, - 0xd1,0x24,0x13,0x09,0x68,0x6e,0x49,0x9f,0xc4,0x47, - 0xd4,0xb6,0x5c,0xa2,0x22,0x24,0xb4,0xdd,0xb5,0xd7, - 0x54,0x81,0x39,0xc5,0xf4,0x20,0x92,0x79,0x08,0x99, - 0x77,0x07,0x36,0x21,0xd7,0xf7,0x7f,0xff,0xfa,0xf5, - 0x0b,0x15,0xcd,0x93,0x67,0x94,0x22,0x73,0xc9,0x0e, - 0x28,0xf9,0x12,0x92,0x60,0x6b,0x9a,0x1a,0xfb,0x44, - 0xb1,0x5b,0x9f,0xdd,0x64,0xbd,0xe1,0x12,0x27,0xea, - 0xc6,0xb8,0x16,0xfe,0x06,0x39,0x9d,0x44,0x5b,0x13, - 0xaa,0xe7,0xf6,0xa3,0x03,0x1c,0x15,0xf1,0xde,0x72, - 0x91,0x37,0xf4,0x1b,0x5a,0xe7,0xbf,0xfb,0xe8,0xaa, - 0xe3,0xf8,0xb8,0x17,0xee,0x64,0xcf,0x27,0xa3,0x4b, - 0x32,0x26,0xfb,0x64,0xaa,0x65,0xb3,0x99,0xdb,0x83, - 0xad,0xcd,0x22,0xd1,0x4c,0xb9,0x7b,0x35,0xf5,0x83, - 0xeb,0xfe,0xbc,0x0d,0x72,0xa2,0x02,0x65,0xce,0x3a, - 0x22,0x25,0x3c,0xfd,0x3a,0x68,0x22,0x69,0xd2,0x41, - 0xa0,0x9e,0x6a,0x7f,0x57,0x7d,0x62,0xec,0xfb,0xbf, - 0xdf,0xee,0x3d,0x1c,0x2e,0x3f,0xd7,0xa6,0xcf,0x8d, - 0xb8,0x5b,0x29,0xd1,0xda,0x4c,0x74,0x49,0x10,0xaa, - 0x8d,0xb6,0xd1,0xf7,0x81,0x5b,0x93,0x34,0x3c,0x5d, - 0x7f,0xff,0x0c,0x7a,0xd6,0x9f,0x68,0x15,0xe9,0x73, - 0xef,0xff,0x9e,0xda,0x53,0xee,0x3a,0x80,0xd3,0x52, - 0xf4,0xfd,0xdd,0x93,0xcd,0xe9,0xb6,0xc0,0xf3,0xb4, - 0xcf,0x44,0xd7,0x0d,0x7d,0x46,0x20,0x3f,0x9f,0x09, - 0x89,0x5c,0xf0,0x4c,0x56,0xae,0xdf,0x2e,0x91,0x73, - 0xdf,0xdd,0xde,0xc3,0x09,0x88,0x4f,0x7f,0x17,0xd3, - 0xf7,0x8e,0x13,0xa8,0x40,0xd0,0x7d,0x43,0x6b,0xdd, - 0x04,0xa1,0xfb,0x9d,0x4d,0x01,0xd2,0x12,0xe2,0x03, - 0xbc,0x9a,0x93,0xde,0x9b,0x13,0xa0,0x9b,0x46,0x93, - 0x43,0x5b,0xee,0xc0,0x5e,0xb3,0xc5,0x0d,0xb5,0x22, - 0x69,0xe0,0x66,0x52,0xf3,0x77,0xad,0xc8,0x0d,0xd7, - 0x34,0xd9,0xc9,0xa4,0x9f,0x31,0x71,0xed,0x67,0x90, - 0xa0,0x3b,0x0a,0x38,0xa2,0x7c,0xe2,0xc6,0x24,0x44, - 0x7a,0x52,0xfc,0x9f,0x3c,0xe0,0xd2,0x19,0x30,0xb5, - 0x9e,0xf4,0x1f,0x12,0x2d,0xde,0x50,0x6d,0xfa,0x3e, - 0xe8,0x83,0x13,0x9b,0xf6,0xf7,0x50,0xa0,0x5f,0x2f, - 0xda,0xec,0xae,0x65,0xa4,0x90,0xe2,0x46,0x55,0x32, - 0xd9,0xdd,0x53,0x45,0xbb,0x31,0x2a,0x4d,0xfc,0x14, - 0x35,0xd6,0x4b,0x2f,0x72,0x62,0x9a,0x03,0xaf,0xe2, - 0x0d,0x3d,0x72,0x0b,0xff,0x7e,0x51,0xbf,0x7e,0xfd, - 0xfa,0xab,0x00,0xee,0x32,0x6a,0x10,0xb0,0x3b,0xd3, - 0x46,0x25,0x09,0x76,0x4a,0x42,0x37,0x90,0x27,0x58, - 0x82,0x60,0xb2,0x37,0x04,0xc3,0xb1,0xed,0xe9,0xde, - 0x1d,0x05,0xbf,0x34,0x22,0xaa,0x68,0xc8,0x04,0xd7, - 0x0e,0xed,0x4c,0x92,0xe1,0x3f,0x61,0xcd,0x9e,0xa4, - 0x9f,0x34,0x68,0x90,0xac,0x47,0xb1,0xc3,0x1e,0x39, - 0x44,0xec,0x0d,0x7c,0x99,0xe3,0x84,0xc9,0xa8,0x00, - 0x48,0x13,0x8f,0xee,0x7d,0x11,0x97,0x23,0x55,0x82, - 0x4e,0x7f,0x46,0xde,0x97,0xe5,0x34,0x39,0xcb,0x1d, - 0xe5,0xb4,0x0c,0x24,0xd3,0xa3,0x70,0xbd,0x43,0x07, - 0x29,0xa9,0x27,0x54,0x36,0xa9,0xc7,0x07,0xd1,0xd0, - 0x38,0x3a,0xbe,0x89,0xbd,0xa9,0xcd,0xde,0x2b,0xf2, - 0x89,0xbf,0xd1,0xf7,0xc3,0xe4,0x2a,0xb0,0x41,0xa3, - 0xd2,0xbe,0xbe,0xbc,0x18,0xa8,0x23,0x31,0xbb,0x49, - 0xa6,0x33,0xa1,0x0a,0x5b,0xe1,0xcd,0xcd,0x3d,0x90, - 0xce,0x95,0x6b,0x21,0xd2,0x7a,0xde,0x48,0x4c,0xb8, - 0xa4,0x2e,0x15,0xcc,0x4e,0x1c,0x70,0x43,0x42,0x56, - 0x4a,0x8b,0xa1,0x13,0x9c,0x8d,0x4f,0xd7,0xd4,0x0e, - 0xd7,0xa4,0x87,0x5a,0x96,0x1b,0xf9,0x0e,0xa7,0x88, - 0xfd,0x13,0x0f,0x1c,0x3f,0x60,0x1a,0x2f,0x26,0x84, - 0x66,0xc3,0x7f,0x81,0x83,0x27,0x8e,0x65,0x4f,0x07, - 0xf1,0x06,0x65,0xf8,0x24,0x53,0x4c,0x0f,0x96,0x92, - 0x08,0xe7,0xf3,0xa3,0x6b,0x47,0x7f,0x2f,0x29,0xa7, - 0x92,0x87,0xc9,0x20,0x3f,0x6f,0xa1,0x45,0xc7,0x0b, - 0xe9,0xef,0xd3,0x8d,0xb2,0x4f,0x63,0xda,0x0e,0x15, - 0xfc,0xa0,0xca,0x38,0x89,0xc3,0x90,0xf8,0x04,0x21, - 0xab,0x3f,0xe0,0xf3,0x76,0x3e,0xa8,0x82,0xa8,0xb2, - 0xc7,0xb5,0x48,0x90,0x7e,0x37,0x1f,0xdd,0x1c,0xee, - 0xda,0x0e,0xdc,0x48,0x21,0x40,0x72,0x70,0x5c,0x92, - 0x60,0xaa,0xad,0x43,0x3a,0x52,0xfa,0xdf,0xd2,0x9a, - 0x8a,0x89,0xce,0xa4,0x9c,0x4d,0x1c,0x30,0x8a,0x19, - 0x89,0xd0,0x0e,0x9f,0x6b,0x13,0x9f,0x41,0x1f,0xea, - 0x90,0x80,0xa0,0x33,0xab,0x5d,0x24,0x98,0x18,0x97, - 0x2e,0x43,0xca,0x6d,0x55,0xff,0xd9,0x72,0x2a,0x7a, - 0x5b,0x8c,0xc4,0x2b,0xdd,0x35,0x28,0x07,0xca,0xb5, - 0xe6,0x53,0x61,0xab,0xdc,0x0b,0xaa,0xda,0x1d,0x69, - 0x3b,0x1d,0xec,0xee,0x3d,0x6b,0x67,0x41,0x0b,0xf4, - 0xd4,0xc2,0x22,0x44,0xc8,0xc5,0xc4,0x09,0xf9,0xd9, - 0x4c,0x93,0xb5,0xb6,0x9a,0x13,0x0c,0x3d,0xd3,0x3a, - 0x27,0xd7,0x83,0x74,0x8d,0xae,0x1d,0x3b,0x90,0x99, - 0xe3,0xfa,0x9a,0x38,0x3c,0x34,0xec,0x93,0x5a,0x4c, - 0x5b,0xc1,0x48,0xba,0x16,0xa5,0x61,0x68,0xb1,0x34, - 0x4d,0x5e,0x0f,0x6d,0xea,0xeb,0xb7,0x2e,0xb4,0x29, - 0x03,0xdd,0x78,0x23,0x25,0x82,0x57,0x6f,0x4f,0xd1, - 0x41,0x92,0x0e,0x1b,0x42,0x5a,0x36,0x0a,0xca,0x54, - 0x91,0x91,0x9e,0x89,0x6b,0xe1,0x6d,0x60,0xc6,0x85, - 0x88,0xe3,0x4f,0x3b,0x23,0xc1,0x9d,0x53,0xcb,0x6c, - 0x73,0x9f,0xed,0x33,0xdf,0x5a,0x24,0x49,0xf5,0xf7, - 0x6e,0x7b,0xdc,0xcf,0x06,0x74,0x23,0xde,0xee,0xe1, - 0xfe,0xd7,0xaf,0xaf,0xaf,0x72,0x6d,0x97,0xd4,0xee, - 0x4a,0x06,0xbb,0xc4,0x05,0x3b,0xe7,0x54,0x42,0x7b, - 0xdc,0x61,0x6e,0x38,0x18,0x95,0x92,0x09,0xad,0x26, - 0x7b,0x5b,0xb5,0xb7,0x02,0x7a,0x9b,0x28,0xe9,0x69, - 0xd1,0x77,0xab,0x10,0xa1,0x0b,0x7e,0xc2,0x65,0x29, - 0xf7,0x2c,0x45,0x46,0xa1,0x26,0xee,0x54,0x6f,0xfb, - 0xd1,0x7e,0x33,0x09,0xf2,0x9d,0x04,0xd5,0x86,0x9f, - 0x95,0xda,0xb7,0x13,0x02,0xe9,0xda,0x74,0x01,0x2d, - 0x38,0x13,0x94,0x4e,0xef,0x82,0x86,0x3f,0xb4,0x15, - 0x33,0x89,0x31,0xaa,0xae,0x8e,0x4b,0x8e,0xa8,0x8d, - 0xaa,0x6d,0x35,0xc7,0x7d,0xa4,0xd6,0xdd,0x56,0x25, - 0x3b,0x15,0x80,0xc0,0xa7,0x19,0xa1,0x9b,0x49,0xb5, - 0x1b,0xd0,0x69,0xcc,0xd6,0x28,0x09,0x9a,0x62,0xc2, - 0xe4,0x4f,0xb7,0xfd,0x27,0x14,0x73,0x87,0x34,0x85, - 0x52,0x1c,0xeb,0x3f,0x47,0x5e,0x93,0x81,0x17,0x15, - 0x25,0x47,0x36,0x85,0xc1,0x14,0x63,0x09,0x35,0x4f, - 0x09,0x95,0xbe,0x13,0xe0,0x50,0x8d,0xd7,0x9c,0x9c, - 0x1d,0xa8,0x05,0xbc,0x98,0xd6,0x3b,0x03,0x2d,0xe2, - 0xed,0xda,0x7e,0xa7,0x8a,0x72,0xd3,0x6b,0xec,0x87, - 0xc3,0xf4,0x42,0x29,0xab,0x4e,0x01,0x48,0xdb,0x2a, - 0xda,0xff,0x23,0x34,0x66,0xa3,0x02,0xda,0x7a,0xb1, - 0xe5,0x60,0xf8,0xbe,0x60,0xd3,0xfd,0x6c,0xd0,0x8f, - 0x24,0xf4,0xd6,0x36,0x58,0x19,0x38,0xb1,0xb6,0xd3, - 0x50,0x94,0x18,0xa6,0x64,0x8c,0x12,0x37,0x83,0x6c, - 0x15,0x25,0x9b,0x53,0x12,0x98,0x78,0x5e,0xe9,0xf0, - 0x6b,0xe8,0xe0,0x23,0xf1,0x70,0xfe,0x53,0x53,0xef, - 0x7b,0x39,0x3e,0xfe,0x93,0xe8,0x90,0x44,0x02,0x8d, - 0x6d,0x43,0x15,0x5e,0xf0,0xae,0x7e,0x92,0x38,0x38, - 0x94,0x2b,0xac,0xa9,0x07,0xb7,0xc9,0xbc,0xf7,0xf3, - 0xf5,0xf5,0x55,0x93,0xdb,0xf3,0x37,0x82,0x50,0xb4, - 0x4f,0x7b,0x02,0x6c,0xae,0xe1,0xfa,0xf7,0xdc,0xca, - 0x23,0xac,0xee,0x30,0x73,0xa8,0xf3,0x76,0x2d,0x39, - 0xcd,0xac,0x69,0xea,0xd2,0x91,0xcb,0xd3,0xb4,0xa7, - 0xe3,0xfc,0x04,0xa4,0xf9,0x0c,0x08,0xfa,0x49,0xb1, - 0x8e,0x38,0x7b,0xa4,0x71,0xa5,0x9f,0x99,0x06,0x17, - 0x5a,0x1c,0x38,0x50,0xe4,0x8e,0x44,0xdb,0x54,0xe4, - 0x6a,0x22,0x39,0xf9,0x48,0x4d,0xce,0x02,0xce,0xbe, - 0xc6,0xbd,0x0b,0xc7,0xe1,0x49,0x7c,0x42,0x45,0x30, - 0x6f,0x54,0xcf,0x8c,0x7c,0x1f,0xc7,0x5f,0x49,0x67, - 0xe3,0xc6,0x4e,0x6a,0x4a,0xce,0x36,0x67,0xee,0xfd, - 0x3e,0x95,0x87,0x47,0x7b,0xc0,0x7d,0x66,0xff,0x7d, - 0x42,0x6a,0x53,0xe1,0x91,0xd6,0xc2,0x06,0x10,0x70, - 0xc2,0xb1,0x53,0xd2,0xf2,0xc9,0xfd,0x6d,0xcf,0x97, - 0xeb,0xba,0xce,0x2b,0x7c,0x79,0xf4,0x4e,0x72,0xcc, - 0xfa,0x29,0x10,0x25,0xbd,0x02,0xea,0x5d,0x6f,0x10, - 0x17,0x15,0xd9,0xfa,0x9e,0x12,0x70,0xe3,0xae,0x67, - 0xa9,0x18,0x7d,0xa8,0xaf,0x6e,0x31,0xe6,0x21,0xc1, - 0x98,0x4c,0x2e,0x5d,0x65,0x1b,0x50,0xa9,0x93,0xae, - 0x2b,0x59,0x6c,0x6c,0x55,0xb1,0x89,0x6f,0xb1,0xa9, - 0x3a,0xf4,0x33,0xd5,0x62,0x20,0xf1,0x4e,0xfa,0xe4, - 0x8c,0x0b,0x68,0xda,0x07,0x76,0x5e,0x4c,0x40,0xb4, - 0x3f,0x13,0x07,0x89,0xbe,0xcf,0x71,0xe0,0xa8,0x2a, - 0xd3,0x16,0x9c,0x13,0x19,0xa4,0x77,0x69,0xae,0xe9, - 0x10,0x84,0x7c,0xbb,0xba,0xd3,0xf8,0xf5,0xa0,0xf8, - 0x6d,0xe5,0xfd,0x2f,0x33,0x52,0x9a,0x7c,0xea,0x4c, - 0x22,0x71,0x7a,0x2b,0xc9,0x4d,0xda,0xb8,0x75,0xe5, - 0x0e,0x00,0x35,0x2c,0xd6,0x16,0x52,0x9f,0x30,0x4b, - 0x05,0x50,0x58,0xa3,0x67,0xe2,0x82,0xb4,0xb5,0x7b, - 0x16,0x36,0x3b,0x27,0x0d,0x22,0x5c,0x86,0x2b,0x46, - 0x8a,0xc3,0xc4,0x19,0x9b,0xf8,0x3c,0x9f,0x88,0x4d, - 0xa6,0xb6,0xce,0x82,0x9b,0x79,0xc8,0x10,0xd7,0xb4, - 0xf0,0x71,0x92,0x6a,0xd3,0xce,0x77,0x82,0x86,0xa4, - 0x3c,0x3d,0xc5,0xe6,0xe1,0xfd,0xa0,0x8d,0x44,0x12, - 0x43,0xdd,0x68,0x1f,0x5d,0xde,0xae,0x29,0x22,0x3b, - 0x29,0xc9,0xd0,0xe1,0x15,0xba,0x8f,0x34,0x68,0xb2, - 0x48,0x0c,0x46,0x6e,0x92,0x5b,0x2f,0x3a,0x9e,0xbf, - 0xa1,0x6e,0x4c,0x02,0xc0,0x93,0x3e,0x58,0xd2,0x96, - 0xda,0xd8,0x04,0xfd,0x4e,0x3e,0x20,0xd3,0xe1,0x38, - 0x65,0xbd,0x3d,0x93,0xa4,0xe9,0x2f,0xc7,0x23,0x49, - 0x7a,0x08,0xda,0x3e,0xe8,0x5a,0x3e,0x44,0xf8,0xa5, - 0x6c,0x99,0xa4,0xc6,0xe1,0xa5,0xbb,0xc9,0x27,0xb7, - 0x28,0xdf,0xda,0x0f,0x5b,0x77,0x66,0x42,0x95,0x92, - 0x86,0x4e,0xaf,0xec,0xae,0x36,0x31,0x46,0xfe,0x3a, - 0x3a,0x49,0xe4,0x82,0xe3,0x3d,0x25,0x62,0x5a,0x59, - 0x57,0xaa,0x12,0xdb,0x61,0x7c,0x5e,0xaf,0x57,0x99, - 0x00,0x5f,0xf2,0xac,0x8e,0x22,0x07,0xf7,0xdf,0x19, - 0xb4,0xec,0xd1,0xaa,0xb9,0xef,0x65,0x9a,0x36,0xd1, - 0x60,0x6d,0x38,0x46,0x65,0xda,0xaa,0x34,0x74,0xf5, - 0x86,0xe8,0x38,0x84,0x2d,0x41,0xe2,0xa9,0x98,0x08, - 0xda,0x2e,0xa5,0x07,0x4b,0xd7,0x8b,0x79,0xbd,0x5e, - 0x35,0xf4,0xc3,0x1f,0x08,0x5a,0x58,0x83,0x3f,0x40, - 0x06,0x05,0x45,0x17,0x80,0x0d,0xea,0xaa,0x84,0xd4, - 0x4a,0x30,0x3b,0xc9,0x69,0x50,0x8d,0xe1,0xb8,0x26, - 0xc9,0x4b,0xce,0x09,0xfd,0x11,0x4a,0x20,0xf1,0x07, - 0x27,0x9d,0x9c,0xa9,0x2c,0x21,0x60,0x09,0x45,0xd6, - 0x83,0xcf,0x8d,0x40,0x43,0xf2,0x79,0x26,0x0e,0x58, - 0xba,0xcf,0x85,0x73,0xfb,0x49,0x7e,0x87,0xc2,0x2b, - 0x1c,0x93,0x49,0xb7,0xd6,0x5d,0x81,0x42,0x89,0xda, - 0x76,0x40,0x25,0x75,0x16,0x08,0xc1,0x4b,0x03,0x33, - 0x49,0xac,0xd7,0xb5,0x2a,0x13,0x0a,0xb5,0x79,0x1e, - 0x44,0x31,0x99,0x84,0x19,0x17,0x93,0x62,0xae,0x10, - 0x3b,0xb4,0x36,0x09,0xdd,0x73,0x7b,0x33,0xdd,0xeb, - 0x06,0xf9,0x4a,0x80,0x48,0x68,0xd1,0x9e,0x44,0x5b, - 0x98,0x5a,0x60,0x8f,0x29,0xb0,0x94,0xd1,0x26,0xa8, - 0x77,0x48,0x84,0x26,0x58,0x38,0xea,0x15,0x24,0xc5, - 0xcb,0xf4,0x80,0x93,0xe8,0xa1,0xdb,0x54,0x1b,0xdb, - 0x83,0x64,0xd7,0x31,0xa9,0x50,0x5e,0x46,0x74,0xac, - 0x93,0x03,0xb7,0x86,0x7e,0x09,0x19,0x23,0x94,0xcd, - 0x1d,0x10,0xa9,0x22,0x33,0x9c,0x13,0x24,0x78,0xeb, - 0xd8,0x6c,0x32,0xd6,0x94,0xca,0x70,0x34,0x4e,0x4c, - 0xc1,0xb7,0xbf,0xf7,0x0f,0x04,0x07,0x4f,0xaa,0x9c, - 0x5d,0x8b,0x81,0x26,0xbf,0xe0,0x40,0x4c,0xea,0xc2, - 0x49,0x8d,0xf9,0x0c,0x5c,0x8d,0x33,0x20,0x8a,0x67, - 0x41,0x6a,0x7c,0xa8,0x26,0x0f,0xcf,0x75,0x54,0x84, - 0x4e,0x62,0x71,0x66,0xef,0xbd,0x69,0xfa,0xb4,0x31, - 0xb4,0xd3,0x34,0x87,0xba,0xa2,0x74,0x54,0xa5,0xd6, - 0x67,0xe9,0x08,0xad,0x20,0x10,0x7a,0x3e,0xe0,0x84, - 0x9c,0xc5,0xd4,0x56,0x7c,0x37,0x77,0x02,0x9a,0x5a, - 0x01,0x74,0x40,0xdc,0x6a,0xe3,0x60,0xca,0x6b,0x8d, - 0x57,0x93,0x46,0x8f,0x33,0x56,0x0d,0x13,0x55,0x34, - 0xc9,0x77,0x1c,0x72,0x17,0x9e,0xf7,0x68,0x29,0x41, - 0xd2,0x1d,0x1d,0x79,0xd3,0xb6,0xc9,0x46,0x42,0x63, - 0x9a,0x90,0x74,0xad,0xc5,0x56,0x30,0x20,0x6a,0xd4, - 0x0a,0x9f,0x93,0x3a,0x23,0x7f,0xd3,0xca,0x21,0x44, - 0xc7,0xb5,0x9d,0x5d,0x5c,0x76,0xb1,0x6e,0x4a,0x34, - 0x1c,0x0a,0x4f,0x09,0x3c,0x09,0x0e,0xd3,0xf7,0x6e, - 0x68,0x09,0x1b,0x8f,0x33,0x1a,0xb0,0x98,0x78,0xc3, - 0xc4,0xdf,0x7a,0x3b,0xd3,0xc3,0x78,0x35,0x8a,0x78, - 0x4d,0xed,0x13,0xfa,0x99,0xe1,0xef,0x4f,0x22,0x52, - 0xb9,0xa4,0x85,0x38,0x3b,0x69,0x23,0xb8,0xde,0x7a, - 0x6a,0xbf,0x6d,0x1c,0x94,0x29,0x6b,0xa5,0x83,0x3d, - 0x2c,0x8e,0x48,0xa2,0x4c,0xad,0xbc,0x4f,0x54,0x3d, - 0x37,0xd3,0x49,0xdb,0xde,0xec,0x46,0x73,0x83,0x94, - 0x4a,0xaf,0x20,0x19,0x4f,0x9e,0x37,0x2a,0x56,0x06, - 0x09,0xf1,0x49,0x15,0x87,0x6b,0xbb,0x99,0xcd,0xf6, - 0xc9,0x61,0x19,0x83,0x7e,0xea,0xf1,0xbb,0xa4,0xad, - 0x9b,0xcc,0xd2,0xfb,0x54,0x2f,0xaf,0xb4,0xde,0xf4, - 0xe7,0x16,0xad,0xdd,0xab,0x27,0x2c,0xee,0x80,0xfd, - 0x8f,0x18,0xcd,0x86,0xe7,0xf0,0xd1,0x44,0xe1,0xa4, - 0xd5,0xf2,0x9e,0x7f,0x1e,0x24,0x5d,0x9b,0xf5,0x10, - 0x4d,0x52,0xdd,0xb3,0x04,0xa1,0xb8,0x93,0x10,0xde, - 0xcd,0x81,0xa1,0x31,0xf8,0x02,0x5d,0x1c,0xad,0xca, - 0xd5,0xaf,0x31,0x19,0xfe,0x9a,0x43,0xfc,0xa4,0xbd, - 0x43,0x3e,0x72,0x53,0xdb,0xa3,0x4f,0xd1,0xb9,0xb8, - 0x44,0xf6,0x14,0x03,0xbd,0xe0,0x18,0x04,0xf0,0x4c, - 0xb1,0xcd,0x19,0xd1,0x26,0xb4,0x2f,0x09,0xd2,0xa6, - 0xc2,0x99,0x62,0xb1,0xb4,0xd4,0x8f,0x49,0x60,0x8f, - 0x69,0x29,0x5e,0x9b,0xfd,0x9b,0xae,0x21,0x9d,0x61, - 0xee,0x7d,0xdf,0xf7,0x76,0xc7,0x24,0x97,0x78,0x24, - 0x94,0x9d,0xb8,0x3e,0x93,0x63,0x3d,0xd9,0x1f,0x39, - 0xda,0xcd,0x7d,0x5e,0x10,0x6d,0x44,0xdf,0xdf,0x5b, - 0xd2,0x3b,0xb0,0xf5,0xb1,0x55,0x93,0x78,0x10,0x09, - 0x0d,0xd9,0x24,0x4d,0xce,0xbe,0x20,0x49,0xc3,0x53, - 0xc0,0xb8,0x3c,0xf1,0xf0,0x4c,0xf7,0xe8,0xc6,0x4b, - 0x89,0xab,0xa3,0x08,0x44,0xea,0xcb,0x4e,0xad,0x12, - 0x78,0x36,0xa8,0x5c,0x2c,0x0b,0xf2,0x50,0xbf,0xd3, - 0x21,0x4f,0x53,0xe5,0x02,0x70,0x30,0xea,0x6f,0xb8, - 0x40,0xbc,0x75,0x6f,0x9f,0x92,0x38,0xb5,0x30,0x48, - 0x1c,0x85,0xd4,0x5e,0xbc,0x03,0xb0,0x26,0xc0,0x74, - 0x9d,0x61,0xec,0xf9,0x4c,0x95,0x8d,0x4b,0xf0,0x93, - 0x70,0x5a,0x3f,0x48,0x8c,0x1a,0x35,0x6a,0xc0,0x90, - 0x36,0x8a,0x7b,0x8e,0x1d,0x91,0x48,0x09,0x87,0x23, - 0xb8,0xf6,0x83,0x26,0x1d,0x00,0xc9,0x52,0x87,0x0a, - 0x1c,0x67,0x5f,0x93,0x12,0x9e,0x14,0xd4,0x55,0x07, - 0x68,0xb2,0xdd,0xd1,0xbd,0xb6,0xd4,0x30,0x39,0xc9, - 0xae,0xe6,0xba,0x32,0x3f,0xb0,0x23,0x0d,0x9b,0x89, - 0xb3,0xb4,0x9f,0x09,0xb1,0x4a,0x05,0xe0,0x86,0x2c, - 0x9e,0xfc,0xd3,0xdc,0xfb,0xa5,0xc3,0x87,0x0a,0x48, - 0xc7,0x91,0xeb,0xfe,0x5d,0xe9,0x30,0x27,0x0b,0x8b, - 0xcd,0x77,0x4e,0x87,0xa3,0x8b,0xd9,0x86,0xd7,0x67, - 0x7d,0x0a,0x9d,0x56,0x9e,0x89,0xc9,0x87,0x06,0x28, - 0x52,0xa1,0xbe,0x28,0x06,0xc7,0x96,0x53,0x92,0x9d, - 0x70,0xae,0xec,0xee,0x79,0x92,0xbe,0x9f,0xf2,0x33, - 0x49,0x89,0xb9,0x6b,0x4b,0xa5,0xef,0x99,0x3a,0x52, - 0x80,0xfa,0x1e,0x02,0x4e,0x54,0xaf,0xe8,0x07,0x69, - 0xa5,0xa0,0xab,0x87,0x2f,0xb5,0x0c,0x28,0x0b,0x1c, - 0xc4,0xcc,0xd0,0x15,0x3c,0xb5,0xd7,0x86,0x76,0xc6, - 0x21,0xe4,0xc5,0x3d,0x54,0xd7,0xc3,0x86,0x05,0x6b, - 0x93,0x3c,0x9a,0x54,0x20,0x57,0x70,0xe7,0x54,0x9c, - 0xae,0x95,0x12,0xab,0x69,0x93,0xcb,0x7b,0x3c,0x6e, - 0x91,0x1a,0x4d,0x07,0xd7,0xd6,0x3c,0x24,0x78,0x98, - 0x5a,0x57,0x14,0x2c,0xdc,0x86,0xa6,0x2a,0x39,0xb5, - 0x85,0x5c,0x22,0xec,0xf4,0x42,0x48,0x34,0x8b,0x5c, - 0xd7,0x37,0x93,0x1b,0x29,0xd8,0x08,0x7f,0x28,0x56, - 0x9c,0x2e,0x80,0x10,0xe2,0xa5,0x07,0xdc,0x60,0xf5, - 0x71,0x1c,0xbf,0x03,0x0c,0x3c,0x47,0x02,0xbf,0x81, - 0x9c,0x4f,0x7f,0x37,0x8e,0x74,0xb8,0xf1,0xff,0xd9, - 0x0c,0x40,0x2c,0xe3,0x80,0x2b,0x16,0x8e,0x22,0x0d, - 0x14,0xf4,0x5d,0x4c,0xa1,0x75,0x44,0x31,0x80,0x8a, - 0xa7,0xa1,0x22,0x3f,0x53,0xfb,0xb1,0xef,0xa7,0xbe, - 0x4f,0x49,0x19,0xb8,0x57,0xc0,0x0e,0xfd,0x31,0x07, - 0xec,0x49,0xb4,0x85,0x94,0x30,0x92,0xf7,0x1c,0xf1, - 0xa2,0xdc,0xb3,0x9a,0xa6,0x85,0x4c,0xdc,0x72,0x9c, - 0x24,0xcb,0x6b,0x49,0xb2,0x26,0x29,0xc9,0x26,0x62, - 0xbc,0x19,0xca,0x38,0xb4,0x56,0xdd,0x94,0xa1,0xbb, - 0x9e,0x69,0xb8,0x68,0xdb,0x0e,0xd2,0xdf,0x57,0xe0, - 0xc0,0x29,0x3b,0x4f,0xd3,0x78,0xca,0xe7,0x73,0xd7, - 0x42,0x88,0xcb,0x06,0xf1,0xbd,0x3f,0xe7,0xcf,0x9f, - 0x3f,0x0f,0x34,0x8c,0x0a,0x26,0x25,0xbf,0x27,0xee, - 0x72,0x32,0xc9,0xd5,0x82,0xf3,0x95,0xdc,0x82,0xa7, - 0x7f,0x9f,0x58,0xfc,0xd4,0x8e,0x48,0xd5,0x0c,0x05, - 0xa6,0x49,0x9f,0x60,0x0b,0x03,0xea,0x41,0x38,0x91, - 0x01,0x93,0x26,0xc9,0x54,0xf9,0x38,0x38,0xdc,0x99, - 0x54,0x12,0x27,0x87,0xd0,0xa3,0x4d,0x05,0x4c,0x6d, - 0x2a,0x82,0x1f,0xcd,0xc2,0x5f,0x55,0x8b,0x8e,0x98, - 0xed,0x12,0x62,0x4a,0xa8,0xd3,0xa1,0x39,0xfd,0xfe, - 0x40,0x94,0x25,0x7f,0xb0,0xe3,0x20,0xde,0x14,0x2f, - 0xa1,0x52,0x3b,0x81,0x3c,0x7f,0x1c,0xf2,0xf9,0xfd, - 0x7c,0x4e,0x92,0x93,0x20,0x1e,0x0d,0x89,0x24,0x92, - 0xf9,0x25,0xad,0x17,0x41,0x6c,0x0e,0x25,0xff,0x69, - 0x7f,0x75,0x0e,0x4f,0x4a,0x5c,0x74,0x08,0xe1,0x56, - 0x45,0x9f,0x92,0xa4,0xad,0x75,0x8a,0xb4,0xac,0x2c, - 0x42,0x45,0x8a,0xf6,0x82,0xb6,0x20,0xba,0xe8,0x78, - 0x5e,0x54,0xe9,0x2b,0x2f,0x68,0x6a,0x19,0x4d,0x28, - 0x4e,0x57,0xa9,0x9e,0x50,0xe2,0x6d,0xb2,0x99,0x10, - 0x9f,0x94,0x9c,0x00,0x0f,0xea,0xb8,0xb8,0x0f,0x31, - 0xe2,0xc1,0xc3,0xe8,0x88,0x6c,0xfa,0x7d,0x2d,0x72, - 0x52,0x7c,0x14,0x51,0x42,0x9b,0xdc,0xf6,0xb6,0xd3, - 0x02,0x8d,0x47,0xb2,0x2d,0x4d,0x45,0x27,0x1a,0xc6, - 0xa6,0x7d,0x05,0x48,0xf6,0x49,0xd7,0x46,0x1c,0x9e, - 0x80,0x66,0x5a,0x89,0x01,0xb7,0x7f,0x53,0x5b,0x69, - 0x32,0x25,0xd6,0x77,0x12,0xce,0xe6,0x33,0x21,0x76, - 0x64,0xf8,0x4d,0xbe,0xa4,0xf4,0x4e,0xdf,0xbc,0xc0, - 0x36,0x22,0x63,0xf0,0xf0,0x2a,0x4d,0x89,0x39,0xbf, - 0xa9,0xa9,0xd2,0xa4,0xff,0x5e,0x66,0xef,0x91,0x63, - 0xe3,0x7e,0xcf,0x09,0x40,0x4e,0xca,0x98,0x04,0x5b, - 0x12,0xd7,0x66,0xdb,0xf2,0xba,0xff,0xdc,0x71,0x3f, - 0x2e,0xef,0xf3,0xf4,0x36,0xdd,0xd3,0xaa,0xbd,0x32, - 0xba,0x19,0xb5,0xd1,0xfa,0xe9,0x13,0x4e,0xd3,0x04, - 0x83,0x5b,0x0f,0x77,0xf5,0x71,0x8f,0xc0,0xf6,0x6b, - 0xa1,0xc4,0x95,0x14,0x5e,0x55,0xb8,0x71,0x3a,0x00, - 0xee,0xa9,0x2d,0x17,0x28,0x9d,0x97,0x95,0x79,0xd7, - 0x78,0xff,0xae,0xfa,0xd1,0x77,0x00,0x68,0x4c,0x6d, - 0xd6,0xae,0x69,0x37,0x25,0xa1,0x43,0x2b,0xa2,0x29, - 0xf7,0xfa,0x36,0xcd,0x35,0xb5,0x95,0xdc,0x5a,0x72, - 0xeb,0x71,0x4a,0x4a,0xbf,0x7f,0xb6,0x52,0xbf,0x9f, - 0x86,0x11,0x36,0x42,0x67,0xca,0xf9,0x98,0xf8,0x21, - 0xba,0x16,0x5c,0x92,0xfa,0x01,0xbf,0xe8,0x24,0xfe, - 0xdb,0xfd,0xdc,0xdd,0x77,0x26,0xd1,0x45,0x17,0x8f, - 0xfa,0x3a,0x75,0x5c,0x88,0xa5,0x94,0x47,0x6a,0xc3, - 0x3d,0x0e,0x90,0x36,0x99,0xe9,0x0a,0xbf,0xa3,0x7b, - 0x2b,0x24,0x25,0x67,0xeb,0xf1,0x04,0xfb,0xcb,0xd9, - 0x2b,0xd8,0xd8,0x3d,0xb5,0x86,0x12,0xaa,0xb2,0xe5, - 0xd2,0x6c,0xf5,0xea,0xd2,0x39,0xd4,0x91,0x98,0x54, - 0x7c,0x52,0x47,0x82,0xb4,0xef,0x52,0xe1,0xb0,0xb5, - 0xee,0x20,0xb4,0xdc,0xed,0x1f,0x89,0x41,0x36,0xf1, - 0xba,0x91,0x21,0x12,0xf5,0x9c,0xac,0x4e,0x7a,0xa2, - 0x74,0x7f,0xbf,0xa2,0x8c,0xc9,0xed,0xc1,0x4c,0xe7, - 0x1d,0x57,0xf8,0xfc,0x20,0xef,0x64,0x39,0x9f,0x16, - 0x06,0x2d,0x4a,0x97,0x00,0x38,0x88,0x34,0x64,0x78, - 0xa3,0x16,0x42,0xd2,0xbb,0x08,0xce,0xdd,0xae,0x82, - 0xc5,0x83,0x9e,0x50,0x21,0xad,0xc2,0x53,0x75,0x49, - 0x68,0x4a,0xea,0xb5,0x12,0xd9,0x6b,0xfb,0x4f,0x82, - 0x52,0x21,0x06,0x4e,0x88,0xd9,0xd1,0xb6,0x99,0x0b, - 0x9e,0x89,0x77,0x34,0x8c,0xa1,0x5b,0x94,0x70,0x08, - 0x68,0x67,0x10,0xad,0x7b,0x20,0x6c,0x86,0x5c,0x79, - 0x52,0x6b,0xc2,0x79,0x70,0xa5,0xe0,0x39,0x4d,0x35, - 0x18,0x88,0xfc,0xb8,0xca,0xb0,0x7b,0xbe,0x51,0x95, - 0xab,0xfa,0x2a,0x03,0x82,0xba,0x1a,0x4f,0xee,0x93, - 0x5a,0xc4,0x87,0xd0,0x16,0x9d,0xea,0xf3,0xf4,0xf6, - 0x80,0x20,0x44,0x87,0xd6,0x47,0xaa,0x9a,0xa5,0x55, - 0x77,0x1c,0x5a,0x45,0x48,0xd8,0x1d,0x84,0xa1,0x6a, - 0x3f,0xda,0xfe,0x21,0x62,0xae,0xa0,0x5d,0x63,0x55, - 0x9a,0x50,0x18,0xc7,0xbd,0x4b,0xad,0x60,0xa3,0x5b, - 0x34,0x22,0x7e,0xca,0x87,0x98,0x26,0x7e,0x14,0x29, - 0x49,0x93,0x81,0x34,0x7d,0x44,0x08,0x87,0x29,0x50, - 0x70,0x7f,0xf4,0xd6,0x07,0x3c,0xa3,0x93,0x14,0x7f, - 0x13,0x72,0x37,0xc8,0x3d,0x60,0x61,0x1b,0x4c,0x52, - 0x0f,0x14,0xa8,0xba,0xa6,0x8f,0x8b,0xe5,0x6e,0x38, - 0x84,0x7e,0x2e,0xd8,0xbd,0xac,0x0b,0xd4,0x8d,0x81, - 0x78,0xb2,0xb2,0xa2,0xcf,0x76,0xf6,0x4a,0x49,0xc6, - 0x21,0x39,0x4d,0x38,0x44,0x89,0xd6,0xd8,0x94,0x48, - 0x13,0x82,0x4c,0x88,0xdc,0x2b,0xf5,0x13,0xc9,0x83, - 0x64,0xea,0xa1,0x2e,0x5f,0xc6,0x71,0x44,0x54,0x5a, - 0xd4,0xfd,0xcf,0x6f,0x81,0x32,0xf3,0x20,0x8e,0x79, - 0xb0,0x87,0xc4,0x1a,0xdd,0x88,0xa5,0x1c,0x6a,0xc7, - 0xf1,0x6b,0xba,0xf1,0xa7,0x4a,0x03,0x50,0xeb,0xc4, - 0x65,0xa3,0x89,0x6c,0x39,0x49,0x12,0x4c,0x87,0x7f, - 0xaa,0x86,0xb4,0x15,0xe1,0x26,0x14,0x9c,0xc6,0x04, - 0x71,0x79,0x42,0x30,0x39,0xe6,0xa0,0x3b,0x9f,0xf0, - 0xc5,0x5c,0x92,0x00,0x81,0x81,0x26,0x6e,0x70,0xf2, - 0x89,0x36,0x1f,0xad,0x57,0x3a,0x20,0x83,0xc6,0xc8, - 0x09,0xa3,0xcf,0x87,0x44,0x16,0x75,0x7c,0x5a,0x9f, - 0xa1,0x3a,0x7a,0x0f,0x6b,0xe6,0x71,0xe0,0xa7,0x76, - 0xd5,0xd5,0xc4,0x0c,0xd3,0xd0,0x81,0x56,0xe9,0x03, - 0x21,0xf5,0x6d,0xc4,0x5d,0xff,0xa7,0x49,0x4e,0x4f, - 0x3a,0x26,0x73,0xcd,0x44,0x46,0x36,0xd3,0x53,0x67, - 0x52,0x89,0xd6,0xd8,0xe1,0x12,0x50,0x2a,0x28,0x42, - 0x2b,0xc6,0x4e,0xf4,0x38,0x74,0xc7,0xed,0x21,0xc7, - 0xc1,0xeb,0x07,0x4c,0x22,0xd5,0xba,0x6b,0x85,0x44, - 0xe5,0xc0,0x14,0xd7,0x49,0x13,0xb4,0x53,0x3b,0x3a, - 0xb4,0xde,0x0f,0x25,0x73,0x9f,0x4e,0x18,0x12,0x4a, - 0xa7,0x6d,0x1d,0xfa,0x7f,0x92,0x34,0xa0,0x36,0x8b, - 0x2b,0x98,0x29,0xfe,0x76,0x0e,0x17,0xb5,0x82,0x88, - 0xf3,0x46,0x9d,0x8a,0xd4,0x42,0x9d,0x92,0xd2,0x00, - 0x0e,0x1c,0x1a,0x3e,0xda,0xa0,0x69,0x6e,0x1f,0xd1, - 0x24,0xeb,0x44,0x4f,0x49,0xd4,0x8d,0x30,0xac,0x11, - 0x5b,0xff,0x6a,0x3e,0xfb,0x13,0x4b,0x29,0xa8,0x90, - 0xf1,0x27,0x8d,0xc3,0x4e,0xad,0x29,0x9a,0xf4,0x18, - 0xe0,0x75,0x3b,0xe5,0xe5,0x02,0x16,0x4d,0xb3,0x50, - 0x55,0x91,0xb2,0x63,0x22,0x5c,0x6d,0xb3,0xe4,0x81, - 0x3f,0x11,0xa1,0x98,0x3b,0x60,0x92,0xbe,0x8d,0x04, - 0xe0,0x43,0xe8,0x97,0x13,0x94,0x9b,0x12,0x2f,0x98, - 0x0e,0x88,0x15,0x0f,0x6d,0xbe,0xed,0xf3,0xd1,0x29, - 0x36,0x4a,0x4a,0x1d,0x9f,0x86,0x9e,0xf5,0xc6,0x85, - 0x5b,0x27,0xbc,0x88,0x83,0x95,0x2a,0x7f,0x97,0xe8, - 0xb9,0xca,0xbf,0x1f,0x16,0xfa,0x1c,0x95,0xe7,0xa1, - 0x55,0x3c,0x05,0x90,0x96,0x04,0x1d,0x17,0x84,0x29, - 0x38,0xba,0x4a,0x0e,0xb4,0x3e,0xac,0x41,0xe8,0x27, - 0xfe,0x43,0xf4,0x1c,0xdd,0xb3,0x70,0xa4,0x4a,0x37, - 0x11,0x3a,0xa1,0x6b,0x80,0x2e,0x8e,0x26,0xce,0x46, - 0xeb,0xec,0x24,0x94,0xc9,0xbd,0x23,0x88,0x6d,0x67, - 0x90,0xeb,0x3f,0xa9,0xc0,0xa4,0xfd,0x3a,0xc4,0x3e, - 0xe4,0xc5,0x05,0x1e,0x95,0x6d,0x67,0xc1,0xf9,0x70, - 0x36,0xaa,0xd3,0x37,0xd7,0x26,0xb5,0xac,0x9c,0x0b, - 0xf8,0x04,0x55,0x4f,0x63,0xdd,0xd3,0x34,0xa8,0x3b, - 0x9b,0x52,0x0c,0x4d,0x1a,0x4b,0xb4,0xa6,0x92,0x65, - 0xd2,0x44,0x2f,0xa1,0x42,0x5c,0x86,0x3d,0x4e,0xe2, - 0x4c,0xa9,0x66,0x94,0xb6,0x62,0xc9,0xd4,0x98,0xd0, - 0x59,0xf7,0x4c,0x49,0xe0,0xd8,0xed,0xd5,0xee,0x65, - 0x38,0xb9,0x45,0x68,0xbc,0x74,0xf1,0x79,0x23,0xba, - 0xb9,0xe1,0x19,0xbf,0xda,0x45,0x9d,0x6d,0xbf,0xde, - 0x7d,0x39,0x8d,0xc2,0xba,0x0a,0x88,0x5e,0x58,0x9a, - 0xe3,0x9f,0x38,0x36,0xfa,0xfd,0x01,0x02,0x5f,0x9b, - 0x32,0x7e,0xea,0xd7,0x92,0x12,0xba,0xad,0x96,0xd0, - 0xa4,0x72,0xba,0x48,0x28,0x0e,0x25,0xb4,0x0e,0x19, - 0xa1,0xf7,0xe4,0x5a,0x78,0x94,0x8c,0x4c,0x01,0xc3, - 0x54,0xaf,0x2b,0x3d,0x9a,0x14,0x21,0xfa,0xf7,0x6b, - 0xc2,0x9a,0xf8,0x01,0x13,0x2f,0x65,0x68,0xc1,0x9d, - 0x74,0x48,0x05,0xbf,0xb7,0x87,0x43,0x7b,0x9a,0x82, - 0xa3,0x84,0x2c,0x54,0x8a,0x67,0xe2,0x9d,0xdd,0x7f, - 0x94,0xaa,0x49,0x57,0x8d,0xdd,0x08,0x8d,0x06,0xa4, - 0x3f,0x7f,0xfe,0x44,0x27,0xed,0x0d,0x94,0x3e,0x55, - 0x83,0xe1,0x99,0xe0,0x50,0x86,0xa0,0x11,0x67,0x3b, - 0x05,0xe6,0x5a,0x12,0x74,0x2f,0x6d,0x2d,0xa4,0xc4, - 0xd7,0x16,0x37,0x6e,0x8a,0xd2,0xb5,0x15,0x08,0x59, - 0xee,0xce,0xf1,0x89,0xdb,0xb1,0xa4,0x1c,0xc4,0xb6, - 0x11,0x25,0x8a,0xae,0xf8,0x75,0x93,0x5f,0xa1,0xcd, - 0x79,0x82,0xd8,0x5f,0x6c,0xf1,0xd0,0x60,0x0d,0x08, - 0x1d,0x46,0xc1,0x48,0x2a,0x1e,0xb5,0xa8,0xd1,0xf7, - 0x32,0x69,0x39,0x9d,0x73,0x8e,0x49,0xda,0x8f,0xa1, - 0x72,0x9c,0x54,0xec,0x53,0x8b,0x98,0x92,0xbf,0x4f, - 0xde,0x2f,0x71,0xee,0x74,0x48,0x87,0x38,0x7f,0xda, - 0xee,0x4b,0xb4,0x94,0x49,0xf3,0xc7,0xa1,0x37,0xae, - 0x4b,0xe0,0x06,0x04,0x26,0x04,0xc9,0x25,0x54,0xfd, - 0x1e,0x5f,0xa9,0x17,0xde,0x15,0x2f,0x8d,0xf8,0x5a, - 0xd4,0x19,0x48,0x6d,0x0e,0x6a,0x71,0xd0,0x08,0x34, - 0xa9,0x78,0xa6,0xec,0x9b,0x2a,0x3d,0x15,0x94,0xa2, - 0x29,0x0f,0xcd,0xb4,0x53,0x70,0xd6,0x7e,0xb1,0xd3, - 0xb3,0x48,0x82,0x8a,0xf4,0x99,0x8e,0x18,0x36,0x55, - 0xc1,0x14,0x0c,0x35,0x49,0x48,0xad,0x84,0x04,0x3f, - 0xf6,0xcd,0x4b,0x86,0x90,0xbd,0x55,0xe9,0x12,0xad, - 0xa0,0x5e,0x8b,0x6a,0xd3,0x2e,0xb8,0xd1,0x88,0xf2, - 0xe4,0x6a,0xdd,0x5a,0x98,0x34,0xb2,0x7e,0xd2,0x04, - 0x94,0x43,0x09,0xf5,0xcf,0x69,0x3f,0xc0,0x54,0xe1, - 0x19,0x92,0xde,0x93,0x84,0x08,0xdd,0x94,0x61,0xe0, - 0xc9,0x1c,0xb7,0xa7,0x29,0x31,0xec,0x95,0x9b,0x70, - 0x72,0x46,0x0e,0x05,0x09,0x6f,0xa6,0x75,0x95,0x86, - 0x05,0xd4,0x19,0xda,0x21,0x3d,0xae,0xe5,0xe7,0x54, - 0xdf,0x81,0xe4,0x8c,0xad,0x3f,0x89,0x57,0xa7,0x8f, - 0x9e,0x07,0xe4,0xe9,0x0a,0xba,0x53,0x87,0xd4,0x84, - 0x89,0x22,0x40,0xea,0xe0,0xb2,0xb6,0x90,0xc7,0x06, - 0x87,0xdd,0x71,0x31,0x95,0x90,0x97,0x5b,0xc3,0x65, - 0x4a,0x7c,0x1d,0x6a,0x4d,0xe6,0xae,0x94,0xe8,0xa7, - 0x84,0x37,0x4d,0x55,0x4d,0xce,0xe4,0x60,0x3e,0x8c, - 0x89,0x29,0x25,0x6e,0x13,0x0d,0x61,0x13,0x6b,0x13, - 0x32,0x95,0xac,0x91,0x12,0x08,0x91,0x64,0x00,0xe8, - 0xcc,0x76,0x9a,0x3c,0x53,0x71,0xb2,0x49,0xbe,0x75, - 0x7f,0x24,0xf4,0xd7,0x89,0xb6,0x92,0x4c,0x4e,0x8a, - 0x71,0xa9,0x70,0x6a,0xe7,0xc1,0xb9,0xae,0xeb,0xfa, - 0xfd,0xfd,0x03,0xa5,0xcc,0xfe,0x00,0xa9,0xf5,0x0f, - 0xc1,0x89,0x0f,0xa7,0x15,0xe4,0x0e,0x93,0x7b,0x42, - 0xc9,0x55,0xd0,0x93,0xcb,0x2b,0x38,0x82,0x3f,0x26, - 0xd4,0xdc,0x9f,0xdd,0xd7,0xbf,0x71,0x8d,0x37,0x0f, - 0xf4,0x67,0x12,0x27,0xb9,0xa2,0x53,0x0f,0xfe,0xf6, - 0xca,0x12,0x13,0x38,0xeb,0x04,0x0f,0x07,0xfa,0xe3, - 0x3d,0x68,0xb5,0xd1,0xfd,0xb8,0xc2,0xa6,0x78,0x7c, - 0xc7,0xfd,0x79,0xa6,0x0d,0x56,0x84,0x26,0x4d,0xba, - 0x12,0x9b,0xb6,0x67,0x32,0xea,0xfb,0xb6,0x05,0xa8, - 0xa9,0x15,0x39,0x78,0xb1,0xb9,0x35,0xf0,0xf0,0x47, - 0x93,0x60,0x57,0x94,0x9c,0xc2,0x33,0xb0,0x13,0x5a, - 0x6d,0xfc,0xbd,0x1c,0x4a,0xa4,0xcf,0xd8,0x25,0x0c, - 0xdd,0x3b,0x2d,0x04,0xd0,0x3b,0x40,0x97,0x5e,0xaf, - 0x6b,0xa9,0xde,0x4b,0x98,0xd6,0x6c,0xaa,0x12,0x85, - 0x18,0x5c,0x29,0x60,0x4f,0x88,0x5c,0xaa,0x1e,0xdd, - 0x1e,0x4b,0x07,0x17,0x55,0xeb,0xa1,0x10,0x3b,0xd3, - 0xf4,0x8b,0x33,0x6c,0x4c,0x49,0xc0,0x15,0x84,0xfc, - 0x5c,0xa2,0x9e,0xda,0x16,0x46,0x6f,0xed,0x04,0xa4, - 0x78,0xb4,0x30,0x49,0x72,0x24,0x0b,0xcf,0xaf,0xdc, - 0xb3,0xb9,0xb2,0x34,0x0a,0xb9,0x80,0x87,0xc4,0xf7, - 0xb8,0xf6,0xa4,0x41,0xa8,0x0e,0x0d,0x80,0x24,0x9f, - 0xb6,0xd4,0x2a,0x73,0x2d,0xb5,0xfb,0xf7,0xbb,0x9b, - 0x3a,0x7d,0xcf,0x9f,0x3f,0x7f,0x92,0xd7,0x22,0xfa, - 0xe0,0x39,0xfe,0xa5,0x19,0xca,0x39,0x13,0x1a,0x74, - 0xbf,0x17,0x33,0xa8,0x63,0x27,0x15,0xbb,0x3b,0x7c, - 0x42,0xcc,0xd3,0x79,0x47,0x08,0x9a,0xbb,0x0f,0xd8, - 0x37,0xf6,0xd9,0xbb,0xf6,0xbe,0x5e,0x9b,0x33,0x85, - 0xfe,0xfa,0xfa,0x9a,0x6c,0x84,0x7e,0x12,0x20,0xb4, - 0x9d,0x08,0x9b,0xd4,0xf2,0x09,0xee,0xfc,0xa0,0x11, - 0x84,0xe3,0x8d,0x26,0xb7,0x6d,0x99,0x3e,0xba,0xc8, - 0xae,0xc3,0x39,0xe5,0x52,0xd6,0xe8,0xc8,0x9b,0xdb, - 0x69,0xab,0xa4,0x44,0x9b,0xfa,0xfc,0xd3,0x58,0xe2, - 0x96,0x20,0x76,0x1f,0x82,0x1b,0x6d,0x1f,0xd3,0x12, - 0x3c,0x5f,0x5f,0x5f,0x95,0xc6,0x37,0x53,0xf2,0x39, - 0x21,0x56,0x03,0x81,0xef,0x2d,0xd1,0xed,0x63,0xf7, - 0x9b,0x91,0xe6,0xc1,0x4d,0xbd,0x12,0xb7,0x60,0x03, - 0x11,0xbb,0xe7,0x90,0x46,0xb3,0xaf,0x36,0xe2,0xae, - 0x7f,0x7f,0x27,0x3a,0xf0,0x6e,0x7e,0xa4,0x01,0xe0, - 0x80,0x7b,0x14,0x15,0xf7,0xfa,0xbe,0x9f,0xe3,0xfd, - 0xcc,0x74,0x6f,0xb8,0x64,0x6a,0x92,0xbe,0xd7,0x6b, - 0x22,0x1b,0x8d,0x74,0x50,0xf5,0xf1,0xe9,0xb6,0xc7, - 0x4b,0x09,0xd3,0x93,0x78,0x99,0xfe,0xfb,0x6d,0xfa, - 0x2a,0x05,0xd9,0xa1,0x8a,0x7a,0xda,0x83,0x10,0xd7, - 0xce,0xd4,0x7a,0x30,0x95,0xe3,0x84,0x14,0x9c,0x24, - 0x56,0x37,0x1d,0xbe,0x2e,0x99,0x70,0xf7,0x26,0xa6, - 0xb8,0x76,0x28,0x84,0xa6,0x71,0xf4,0x5a,0x29,0x41, - 0x73,0x6d,0xbf,0x44,0x17,0x70,0x9f,0xe1,0xc6,0xa0, - 0xd5,0x9c,0xda,0x71,0xcd,0x36,0x05,0xb0,0x3b,0x8f, - 0x7a,0x9b,0xdd,0x21,0x3d,0xe6,0x20,0xb6,0xf6,0x21, - 0x26,0xbe,0xb9,0xf7,0x8a,0x43,0x2d,0x32,0x0a,0xee, - 0x0c,0x78,0x8f,0xa1,0x80,0x1c,0x97,0x0c,0x4f,0x9a, - 0x6d,0xce,0x06,0x25,0x25,0x75,0xa6,0x50,0x39,0x74, - 0xbf,0x12,0xa3,0x4e,0x3a,0xbf,0x48,0x7c,0xb6,0x7f, - 0xe6,0x94,0x94,0x26,0xe4,0x57,0xe3,0x88,0xdb,0x97, - 0x9a,0x38,0xba,0xb3,0xb0,0x17,0x6d,0xbf,0xb5,0xca, - 0xec,0xd5,0x5c,0x6a,0xb7,0x10,0x8f,0x82,0x94,0x7f, - 0x29,0xf9,0xe9,0x59,0x5e,0x9a,0x3a,0xd1,0xc3,0xae, - 0xbb,0x76,0xbb,0x9f,0x4f,0xd3,0x6d,0x53,0x95,0x09, - 0x01,0xa1,0x08,0xee,0x77,0x9f,0xef,0x50,0x01,0x87, - 0x20,0x50,0x45,0x46,0x23,0xf5,0x74,0x30,0xbb,0xca, - 0xdb,0xa9,0x3e,0xeb,0xc1,0xb9,0xe0,0x0a,0x61,0xe0, - 0xba,0x9f,0x8b,0x40,0xdc,0x8f,0x35,0x44,0x7d,0x60, - 0x45,0x3d,0x6e,0xb4,0x47,0x13,0x88,0xad,0xee,0x4b, - 0x7f,0xe6,0x90,0xa0,0xbc,0xa1,0x28,0x52,0xb1,0x97, - 0xa2,0x9f,0xee,0xe7,0xdb,0x86,0x4a,0xba,0x41,0x87, - 0x90,0x95,0x8e,0xe4,0x40,0x52,0xf2,0x76,0xed,0x74, - 0x08,0xa9,0x56,0x90,0x43,0xc2,0xbe,0xaf,0xbb,0xa8, - 0x70,0x01,0xe2,0x77,0xa5,0xc0,0xa4,0x49,0x8a,0x5b, - 0x93,0x5d,0xb5,0x37,0x11,0x35,0x75,0xfa,0xf3,0x03, - 0x64,0x20,0xe9,0xe5,0x5c,0x13,0x4a,0x46,0x3f,0xb3, - 0x69,0xcf,0xa4,0xa4,0xba,0x1f,0x56,0x1b,0xe7,0xf7, - 0x74,0xe8,0xc0,0x7e,0x3c,0x89,0x57,0x01,0x9f,0x1d, - 0xa7,0x23,0xd3,0xc1,0x6c,0x92,0x7e,0x44,0x7f,0x36, - 0xed,0x11,0xe2,0x82,0x92,0xf1,0x27,0x81,0x4d,0x3a, - 0x5d,0x44,0xeb,0x62,0xcb,0xd5,0x34,0xc5,0xfe,0xd9, - 0x8e,0x9b,0x27,0x87,0xf5,0x69,0x22,0x8f,0x12,0x09, - 0x6a,0x53,0xd1,0xd9,0x9b,0x00,0x83,0x64,0xd6,0x9d, - 0x00,0x80,0x7e,0x1e,0x4f,0xfc,0x9d,0x64,0xf2,0x4a, - 0x28,0x8d,0x4e,0xd1,0x92,0xed,0x55,0xff,0xbd,0x29, - 0xd7,0xe8,0x3f,0x4b,0x48,0x9b,0x5e,0xd3,0x2b,0xbd, - 0x08,0x09,0xf6,0xd7,0x04,0x73,0x1a,0x05,0xce,0x07, - 0x47,0x81,0xac,0x0a,0xa8,0xd2,0xd8,0x38,0xc1,0x2f, - 0xc9,0x94,0xe8,0xc8,0xfe,0x09,0x24,0x2a,0xc9,0x62, - 0xe4,0x10,0xb9,0xc4,0x4c,0x7d,0xad,0x92,0xc2,0xe8, - 0xe5,0x27,0x51,0x9c,0xf1,0xa5,0x5b,0x84,0x87,0x88, - 0xcf,0x54,0xa9,0xd1,0xf8,0xff,0x64,0xf1,0x30,0x4d, - 0x07,0xb8,0x91,0xf0,0xb4,0x91,0xc1,0x66,0x61,0x35, - 0xe6,0x3e,0x29,0x67,0x27,0x1e,0x88,0x72,0x2d,0x54, - 0xf6,0x7e,0x9a,0x74,0x48,0x15,0x9e,0x26,0xee,0xc3, - 0x81,0x71,0xa6,0x60,0xde,0x3f,0x5f,0x25,0xe4,0xff, - 0x46,0x0b,0x48,0x0e,0xf1,0xb3,0xd4,0xd3,0x42,0xf4, - 0x46,0xab,0x72,0xf2,0xe4,0xa1,0x7f,0x4f,0xa4,0x55, - 0x32,0x96,0x74,0x3f,0x23,0x81,0x1a,0x6d,0x1e,0x42, - 0xb2,0xe6,0x78,0x81,0x68,0x8e,0x9a,0xf4,0x5e,0x08, - 0xd1,0x0c,0x6e,0xf3,0x88,0xa8,0x74,0x8e,0x96,0xb3, - 0x2b,0xd0,0x43,0xc3,0xdd,0xf3,0x56,0x8e,0x23,0xc5, - 0x5d,0xb8,0x9f,0xb1,0x15,0xa7,0x49,0xe3,0x44,0xe0, - 0x0f,0x87,0xf1,0x31,0xad,0xaa,0x43,0xc9,0xd7,0xc6, - 0x1b,0x6e,0x52,0xc2,0x76,0xed,0xa3,0xd4,0x1d,0x21, - 0x7e,0x50,0xe2,0xe8,0xdc,0xed,0xce,0x4f,0x86,0x02, - 0x82,0x09,0xad,0x5d,0xdb,0xf4,0xe7,0xc4,0xdd,0x9b, - 0x26,0x3f,0x27,0x9d,0x35,0x6a,0x29,0x92,0x3e,0x95, - 0xa3,0x31,0x90,0x9e,0xd4,0x27,0x93,0x93,0x3d,0x6e, - 0xfe,0x4e,0x0b,0x79,0x51,0x99,0x21,0x6f,0x21,0xf5, - 0x81,0x1d,0xdf,0x87,0xdc,0xdc,0xa7,0xde,0xdf,0xa6, - 0x65,0xb3,0x75,0xaf,0xee,0x68,0x80,0x66,0xa1,0xc4, - 0x13,0x98,0x36,0xa8,0x83,0xed,0x12,0xc7,0x83,0x5e, - 0xee,0x66,0xfa,0x6c,0x22,0xd2,0xa5,0xf7,0x49,0xf7, - 0xb5,0x69,0x1d,0x99,0xcf,0xb5,0x88,0x0a,0x54,0xde, - 0x0e,0xad,0x79,0xb4,0x82,0xa6,0xa0,0xfb,0xc1,0xda, - 0x7c,0x7c,0x76,0x47,0xea,0x92,0xbf,0x0d,0x24,0xbc, - 0x35,0xc1,0xcc,0xf4,0x8c,0x3a,0x52,0x66,0x5a,0xb7, - 0x56,0x9d,0xd9,0x54,0x4f,0x35,0xed,0xdb,0xbe,0xb6, - 0x88,0x6b,0x60,0xd6,0xdd,0xfd,0xa5,0x45,0xeb,0x6f, - 0xe2,0xf5,0x24,0xf1,0xbb,0x69,0xda,0x74,0xc3,0xcd, - 0xd8,0xb4,0xab,0x15,0x95,0x49,0x1c,0xa7,0xd4,0xc2, - 0x49,0x89,0x9a,0xb6,0xad,0x28,0xe9,0xe8,0x5c,0x06, - 0x1a,0x0f,0x86,0x43,0xee,0xd0,0x3b,0xd3,0x83,0x9d, - 0x9c,0xe3,0x13,0xca,0x33,0xdd,0x33,0xa1,0x45,0x60, - 0x8e,0x4c,0xa8,0xed,0x71,0xdc,0x16,0x87,0x8a,0x5f, - 0xa2,0x07,0x94,0xc4,0x0d,0x09,0xfd,0x49,0xc5,0xa5, - 0x1b,0xda,0x48,0x32,0x18,0xce,0xc6,0xe3,0xf2,0x12, - 0x01,0xc7,0xb8,0x20,0x9c,0x14,0xc7,0xa8,0xed,0x48, - 0x93,0x5b,0xfa,0x1c,0xb5,0xb8,0xec,0x05,0x27,0xed, - 0x15,0x7a,0x56,0xee,0x3d,0x12,0xda,0xe6,0x7e,0x26, - 0xf1,0x9b,0x2e,0x18,0x0a,0xa0,0xa2,0x61,0x93,0x3c, - 0xda,0xa9,0xae,0x7f,0xdb,0x5e,0x34,0xd5,0x7e,0x1e, - 0x1c,0x20,0x82,0xcd,0x48,0x88,0x49,0xff,0x5d,0x17, - 0xea,0xf7,0x97,0x63,0xdb,0xc7,0x08,0x62,0x15,0xe9, - 0xfa,0xb8,0x03,0x62,0x3a,0xd0,0x94,0x03,0xe1,0xc8, - 0x67,0xea,0xa6,0x9e,0xda,0x66,0x9d,0x20,0xe6,0xda, - 0x57,0x49,0x78,0x30,0x65,0xe8,0x5a,0x15,0xab,0x04, - 0x38,0x21,0x2c,0xba,0xd8,0x08,0xde,0x73,0x44,0xdd, - 0x7e,0x68,0xba,0x03,0x52,0x13,0x32,0xd7,0x2a,0xa2, - 0x67,0x9d,0x36,0xc9,0x34,0xca,0x09,0x22,0x74,0x45, - 0x7c,0x15,0xd7,0xa2,0x24,0xae,0x8e,0xd9,0x20,0x6f, - 0x9c,0x24,0x41,0x7b,0x0a,0x82,0x77,0xb9,0x69,0x16, - 0x4d,0x2e,0x64,0x9d,0x21,0x29,0x9a,0x92,0x1c,0xc3, - 0x51,0xa9,0xe1,0xd9,0xdd,0xd3,0x70,0x35,0x24,0x21, - 0xf7,0x61,0x55,0x46,0x19,0x3b,0xb5,0x82,0xb5,0x0a, - 0x7d,0x4b,0x2a,0x9d,0x9d,0x4c,0x6a,0x4f,0x04,0xfe, - 0xd3,0x58,0x65,0xd2,0xb0,0x84,0x0b,0x70,0xfd,0xfa, - 0xa8,0x40,0x0b,0xc3,0x1d,0x38,0xca,0xaf,0x2d,0xd2, - 0x05,0x9f,0x6f,0x12,0xd8,0xb3,0xa3,0xd0,0x2d,0x06, - 0x9c,0x50,0x9d,0x9f,0xd4,0x5a,0x80,0x96,0xe7,0x51, - 0x1e,0x91,0x8b,0x8f,0x29,0x86,0xdd,0xd3,0xc1,0x70, - 0x60,0x9d,0xcd,0x20,0x0b,0x3d,0xbf,0xf0,0x6e,0x8e, - 0x9e,0x4d,0x1d,0x3d,0x52,0xa4,0x79,0xe2,0xf5,0x4c, - 0xff,0xa4,0x98,0xaa,0xf4,0x02,0xfa,0x3d,0x57,0xd0, - 0x93,0x6e,0x18,0x9d,0x0d,0x94,0x8c,0x7c,0x92,0x30, - 0x90,0x44,0x4a,0x6f,0x61,0xb9,0xa4,0x9a,0x0a,0x39, - 0x67,0xc4,0x0b,0x2d,0xe1,0x88,0x58,0x51,0x87,0xe4, - 0x1a,0x0c,0x6d,0x1d,0x8f,0x2f,0x4d,0x96,0xd2,0x7b, - 0x78,0xbd,0x5e,0xd7,0x6f,0x73,0x80,0x3f,0x12,0x12, - 0xca,0x22,0x53,0xb6,0x3a,0xc1,0xdb,0x1b,0x5f,0x15, - 0xaa,0x78,0x1d,0x12,0xb3,0xe9,0xb1,0xa6,0xe0,0x1a, - 0xaa,0xaf,0x54,0x79,0xba,0x2a,0xdd,0xfe,0x59,0xaf, - 0xd4,0xdd,0xd4,0x4f,0xff,0xb9,0x89,0x30,0xe9,0xfc, - 0xbd,0x5c,0x62,0xd3,0x3f,0x0f,0xfc,0x90,0xb0,0xef, - 0x3a,0xb9,0x9e,0x4f,0xcf,0x09,0x90,0x16,0x9a,0xb8, - 0x8a,0x10,0xae,0x1e,0xf8,0x9a,0xd4,0x2c,0xda,0x3a, - 0x23,0x32,0xe6,0xf8,0x43,0x7a,0x10,0xb9,0x7d,0xa1, - 0xb7,0xd6,0x93,0xd7,0x56,0x01,0x56,0x3a,0x04,0x12, - 0xd2,0x33,0x79,0xa2,0x49,0xc5,0x57,0x13,0xbf,0xa5, - 0x55,0xa4,0x95,0x82,0xd4,0x60,0x4f,0x71,0xff,0x59, - 0x6d,0xf8,0x1f,0x93,0x86,0x98,0xf2,0x82,0x34,0x69, - 0x49,0x9e,0x7b,0x8e,0x44,0x9b,0x78,0x62,0x01,0x4d, - 0x5d,0xb5,0xa8,0x5a,0xf2,0x75,0x16,0x87,0xe8,0x99, - 0x0e,0x00,0x87,0x10,0xe9,0xa1,0x9f,0xf8,0x4f,0x80, - 0xbc,0x9c,0x05,0x02,0xf9,0x28,0x38,0x92,0xef,0x53, - 0x8a,0x83,0xe9,0xfd,0x0c,0xc8,0x92,0x6b,0x9b,0x9e, - 0x09,0xf5,0x87,0xc2,0x0e,0xff,0xdc,0xa1,0x2b,0x70, - 0x4d,0x67,0xd8,0x63,0x6f,0x05,0x39,0x09,0x77,0x4e, - 0xa8,0xca,0x94,0x34,0x4f,0xc5,0x24,0x21,0xd3,0xe9, - 0x7d,0xa7,0x6e,0x46,0xa2,0x23,0xb8,0xc2,0xc2,0x25, - 0x4a,0x1b,0xbe,0x11,0x15,0x2b,0x74,0xbd,0xee,0x7d, - 0xb9,0x7d,0x3d,0xd1,0x11,0xc8,0xf0,0xba,0xaa,0xfe, - 0xf1,0x02,0x9b,0x60,0x5e,0xe2,0xa3,0xb8,0x03,0xc4, - 0x6d,0x04,0x75,0xd0,0x4e,0x7d,0x41,0xd7,0xc7,0x4e, - 0x2f,0xdb,0x41,0xbf,0x1b,0xed,0x00,0x49,0xf8,0x22, - 0x6f,0x82,0x6c,0x1d,0xfe,0x23,0xce,0xe9,0x9b,0x45, - 0xed,0x82,0x47,0x6a,0x27,0x68,0x50,0xfa,0x44,0xe1, - 0x94,0x34,0x85,0xa6,0xca,0x44,0x55,0x95,0xdd,0x62, - 0xa4,0x9e,0xb2,0x56,0x82,0x9b,0xe7,0x42,0xef,0xd2, - 0x11,0x50,0xf5,0xb3,0x65,0x23,0xe2,0x44,0x4f,0xf0, - 0x16,0x3a,0xe4,0xd5,0x76,0x8f,0x5c,0xd2,0xb4,0x8d, - 0x4e,0x88,0xb8,0x96,0x84,0x43,0x41,0xf5,0x70,0xd6, - 0xfe,0x7d,0xef,0x99,0x93,0x30,0x1f,0x1c,0xec,0xe7, - 0x1a,0xc6,0xa6,0x27,0x52,0xa3,0xfa,0x7e,0x25,0x41, - 0xbb,0x44,0xb8,0xa7,0x96,0x54,0x98,0xe4,0x7c,0xd3, - 0x24,0x4a,0x6a,0xf5,0x8b,0x69,0xc0,0x43,0x5e,0x5b, - 0x81,0x13,0x74,0x26,0x5d,0xae,0x2b,0x28,0x8a,0x2b, - 0x17,0xcc,0xa1,0xc0,0xfd,0xef,0x26,0xee,0x4b,0x3a, - 0x40,0xf4,0x7d,0x69,0xc2,0xd5,0x63,0x9b,0x6a,0x5b, - 0x5d,0xa0,0xe1,0x75,0xb7,0x17,0x4c,0x45,0x7d,0xc8, - 0xfb,0xd1,0xb4,0x21,0x1f,0x9a,0x3a,0xce,0x12,0xa9, - 0x5f,0x9f,0x4e,0x56,0xa9,0x1f,0xdd,0xb6,0x65,0x3a, - 0x21,0xf6,0x8a,0x0a,0x6f,0xf8,0x58,0x97,0xb1,0x43, - 0xb9,0x8c,0xbd,0x08,0xa1,0x30,0x46,0x1f,0xc7,0x09, - 0x4b,0x1e,0xc3,0xcb,0x3a,0x8b,0xbd,0x1e,0xf7,0xb8, - 0x5b,0x9f,0x24,0x7f,0x90,0xce,0x01,0x6a,0x5f,0xa6, - 0x56,0xd6,0x86,0x03,0xba,0x7d,0x7f,0x14,0x73,0x52, - 0xc1,0xf0,0x3b,0xf4,0x96,0xb1,0x8d,0x61,0x14,0x38, - 0x8b,0xb2,0x2c,0x47,0x7a,0x26,0xad,0x20,0x85,0x77, - 0x5f,0xaf,0x57,0x6d,0x5a,0x4d,0x37,0x6a,0xe5,0xc6, - 0xac,0xcd,0x41,0x5b,0xd3,0xa1,0xb7,0xd5,0xb1,0x49, - 0x5a,0x25,0x13,0x17,0xc4,0x55,0xbc,0x2a,0x06,0xa5, - 0x87,0x82,0x99,0xc2,0xba,0xa8,0x95,0xd5,0x2a,0x94, - 0x63,0x78,0x1c,0x0f,0xa4,0xe9,0x7e,0x36,0x66,0x73, - 0x15,0xa1,0x5e,0xce,0x67,0xc5,0x18,0xa7,0x56,0x42, - 0x86,0xb4,0x1d,0x64,0x0c,0x17,0x0b,0xfa,0xf4,0xce, - 0xbd,0xfc,0x21,0x13,0x30,0x99,0xc2,0x42,0x8b,0xca, - 0x3d,0x9f,0xa4,0xd9,0xf4,0x76,0x5d,0x3a,0x0a,0xab, - 0x08,0x8d,0xd1,0xae,0xfa,0x99,0xfe,0x72,0x6d,0x25, - 0xe7,0xf0,0x1e,0xdc,0x96,0xcf,0xe5,0x5e,0x1a,0x7b, - 0xbb,0x3d,0xf4,0x80,0x26,0x7e,0x0f,0x24,0x25,0x0f, - 0xc4,0x02,0xd6,0x7d,0x4d,0xa3,0xe9,0xa9,0x42,0x26, - 0xa4,0x21,0x71,0x05,0x92,0x27,0xd6,0x87,0xff,0xa4, - 0x51,0xf3,0xc8,0x97,0xe9,0x3e,0x82,0x57,0xd0,0x71, - 0x99,0x9c,0xea,0x1d,0x0f,0x84,0x12,0xaf,0x89,0xf7, - 0xa3,0xad,0xfd,0x05,0x3a,0x13,0xab,0x6f,0x40,0xdb, - 0xce,0x66,0x2d,0x91,0x27,0x9a,0x9b,0x32,0x0b,0xd3, - 0xa5,0x6e,0x4a,0xee,0x18,0x3a,0xc5,0xd9,0xa8,0x4e, - 0x53,0xc1,0xbd,0x3d,0xc8,0x1d,0x82,0xe8,0x92,0x0f, - 0x42,0x48,0x48,0x1f,0x28,0xd9,0x7f,0x38,0x29,0x86, - 0xfb,0x9c,0x36,0x94,0x8f,0x43,0xfc,0x54,0xd7,0x3a, - 0xa2,0x44,0x7e,0xa2,0x79,0xb8,0xd6,0x53,0xe0,0x03, - 0x9e,0x94,0xc8,0x4f,0x05,0xb2,0x43,0x2d,0x35,0xb6, - 0xf4,0xbf,0xfb,0xed,0x46,0xe7,0xa8,0xfa,0xda,0x90, - 0x27,0x5b,0xe0,0xc7,0x83,0xc2,0x1c,0xee,0xc7,0x8d, - 0xf5,0xea,0xa1,0x3f,0x7c,0x1f,0xfe,0x99,0x23,0x99, - 0xd2,0x82,0x4a,0xd0,0x34,0xe8,0xd9,0x8c,0xda,0x2a, - 0x7a,0xd8,0xba,0x96,0x9e,0xb6,0x78,0xa8,0x75,0xa4, - 0xfc,0x16,0x1a,0x8f,0x9f,0x44,0xab,0x52,0xcb,0x8f, - 0xfa,0xb3,0x04,0xa7,0xaa,0x46,0x4d,0x6a,0x83,0xb8, - 0x6e,0x98,0xe3,0x57,0xb9,0xd6,0x4e,0x6a,0x71,0x0e, - 0xfc,0x93,0x37,0xcd,0xa1,0x61,0xd4,0xd8,0xf2,0xc8, - 0x0c,0x1f,0xa1,0x12,0xc1,0x1b,0x08,0xec,0x56,0x12, - 0x41,0x13,0xb2,0xe4,0x59,0x97,0x04,0x48,0x4d,0x4b, - 0x03,0x93,0x20,0x77,0xf8,0xf4,0xf1,0x7a,0x4a,0x26, - 0x52,0x55,0x9d,0x0a,0x15,0xa7,0x75,0x42,0xef,0x33, - 0xf1,0xe5,0xf4,0xcf,0x95,0x97,0x95,0x94,0xad,0x5d, - 0x82,0x40,0xe8,0x6a,0x4a,0x96,0x08,0xa6,0x9f,0xb8, - 0x13,0xfd,0xb3,0x08,0xb6,0xa7,0xb1,0x72,0x4d,0x08, - 0x5c,0xc1,0x49,0x9e,0x5e,0x8a,0xbc,0xa7,0x31,0x79, - 0xbd,0x0e,0x45,0x59,0x08,0x99,0x72,0xd3,0x58,0xf4, - 0x5c,0x61,0x92,0x75,0x44,0xc3,0x13,0xa7,0xec,0x93, - 0x43,0x12,0x8a,0xfc,0xa3,0x5c,0x28,0x78,0x9f,0x27, - 0xb5,0x2d,0x89,0x53,0x9a,0xb4,0xd2,0xa8,0x0d,0x36, - 0x75,0x14,0x68,0x3f,0xa6,0x98,0x4d,0xad,0x69,0xe5, - 0x0a,0xba,0xc4,0xc1,0xed,0x89,0xcd,0x50,0xc3,0xe5, - 0x4d,0x6a,0xaf,0x45,0x0c,0x9b,0x5a,0x5e,0x27,0x89, - 0x31,0x3a,0x59,0x0b,0xbd,0xdf,0xdf,0x81,0x0b,0x11, - 0x7b,0xaf,0xb4,0x80,0x1d,0x8c,0x6f,0x46,0xdc,0x8b, - 0x5a,0x33,0x8b,0xa0,0xf4,0x56,0xe5,0x4f,0x07,0xf5, - 0xa6,0x5f,0x0a,0x1b,0xe3,0x41,0x40,0x05,0x0d,0x9e, - 0x37,0x02,0xae,0x13,0x5f,0xda,0xb6,0xc9,0x88,0x93, - 0x33,0x1d,0xd6,0x7a,0x7f,0x0a,0x61,0x7e,0x30,0x52, - 0x4a,0x50,0x7e,0x75,0xb2,0xa5,0x22,0x3b,0x43,0x2f, - 0xfc,0xa1,0x6b,0xe3,0x24,0x10,0x5c,0x62,0xe1,0xb4, - 0x20,0x12,0x12,0xe5,0x92,0x0c,0xe5,0xf6,0x18,0x4d, - 0x89,0x37,0xa4,0x71,0xe2,0xd5,0x2c,0x51,0x82,0x0a, - 0x7c,0xa9,0x1f,0x94,0x88,0x5a,0x79,0x37,0xa2,0x1a, - 0xd0,0x14,0xab,0xd7,0x65,0xec,0x27,0x7e,0xb4,0x80, - 0x28,0xd9,0x30,0x01,0xdb,0x72,0x7c,0x36,0x1c,0x84, - 0x54,0x19,0xa6,0x43,0x6a,0xaa,0xf2,0xa6,0xbd,0x92, - 0x92,0xe2,0xfe,0x1c,0xb6,0x5c,0x43,0x87,0x48,0xa4, - 0x03,0xdd,0xf1,0x7d,0xe0,0xfe,0xd2,0xc4,0x96,0x6d, - 0xcb,0x6a,0xeb,0x8f,0xde,0xdd,0x65,0x26,0xbe,0x92, - 0x2a,0xb2,0x6b,0xd1,0x38,0x03,0xcc,0x5e,0x48,0x92, - 0xde,0x92,0x93,0x4d,0x70,0xc9,0x02,0x4c,0x35,0xa1, - 0x1f,0x14,0x09,0x68,0x02,0xaa,0xf4,0xf6,0xec,0x9c, - 0x7c,0x8b,0x43,0x66,0x53,0x81,0x30,0x9d,0x45,0xdd, - 0xca,0x86,0xfc,0xca,0x34,0x41,0x75,0xa2,0xa5,0xa0, - 0x4b,0x66,0x13,0xe7,0x2d,0x87,0x96,0x84,0x27,0x27, - 0xae,0x6b,0x22,0x78,0x4f,0xb9,0x00,0x4d,0x41,0x03, - 0x5d,0xe6,0x6c,0x0a,0xda,0xe4,0x7b,0x47,0x05,0x58, - 0x6a,0xf7,0xe9,0xb3,0xfb,0xed,0xe0,0xf8,0xcb,0x10, - 0x58,0x7b,0xab,0x69,0x3b,0x82,0x0a,0x6d,0x91,0xc8, - 0x2d,0x51,0x14,0x49,0x49,0xbc,0x0b,0x18,0xf5,0x91, - 0xc4,0x98,0x45,0x58,0xb2,0x29,0xdf,0xaa,0xe5,0x49, - 0x60,0xd0,0x59,0x0b,0x68,0xf2,0xe3,0x10,0x28,0x87, - 0xee,0xdc,0x2d,0x30,0x42,0x33,0x5c,0x3b,0x49,0x5b, - 0x54,0xd4,0x36,0x72,0xd3,0x46,0xd2,0x57,0xc7,0x16, - 0xa1,0x0b,0x52,0x0e,0xd1,0x92,0x05,0x6e,0xed,0x45, - 0x28,0x38,0x92,0x88,0xa5,0x2e,0xe4,0x3f,0x7f,0xfe, - 0x38,0xbb,0x8f,0xc7,0xf7,0x49,0x4f,0xbd,0x20,0x00, - 0x95,0x49,0x16,0xec,0xfb,0x1f,0xe4,0x21,0xdc,0x34, - 0x9d,0x56,0x3c,0x05,0x32,0x0f,0x0f,0x11,0x45,0xa3, - 0xdc,0x5b,0xc4,0xc1,0x11,0x8f,0xbe,0xa2,0xd1,0x6e, - 0x85,0xbf,0x2f,0x20,0x5b,0xf7,0x96,0x08,0x21,0x0a, - 0x66,0xad,0x8c,0xc4,0xfa,0xde,0x62,0x99,0xda,0x04, - 0xe9,0xb3,0x37,0xa3,0xf6,0xae,0x4d,0x9a,0xda,0xf7, - 0xe0,0xc9,0x96,0x0e,0xaf,0x10,0x76,0x32,0x61,0x57, - 0x27,0x96,0xf4,0x60,0xd0,0x2a,0x19,0xe2,0xcf,0x09, - 0x74,0x80,0x93,0xc6,0xab,0x41,0xf4,0xee,0x84,0x96, - 0xcf,0x81,0x96,0xe3,0x99,0x0e,0xdd,0x61,0x5c,0x1b, - 0xbf,0x17,0x78,0x1b,0x87,0x54,0x7f,0x93,0x34,0xc8, - 0xe0,0x62,0x8e,0xa6,0xa9,0x64,0x5e,0xea,0x92,0xce, - 0x2d,0xb2,0xe2,0xce,0x0b,0x6d,0x41,0x4e,0x44,0xe7, - 0x49,0xaa,0x41,0x0b,0x98,0x84,0xb8,0xb9,0x45,0x1b, - 0x90,0xba,0x15,0xaf,0x75,0x40,0xcc,0x62,0x1b,0x7b, - 0xda,0x48,0x09,0xe5,0x4f,0xd4,0x9d,0x04,0xd0,0xbc, - 0xc5,0x52,0xcd,0xfc,0x29,0xd9,0x70,0x22,0x45,0x4a, - 0xae,0x73,0x48,0x44,0xaa,0x68,0x1c,0x4c,0x96,0xe0, - 0x7f,0x82,0xfb,0x1c,0xb4,0x4c,0xd0,0xe3,0xc6,0x01, - 0x3c,0x59,0x69,0xc0,0x54,0xc4,0xb9,0x5b,0x41,0x0d, - 0x61,0x38,0x7a,0xb0,0xb8,0xcf,0xed,0x7a,0x05,0x04, - 0x4b,0x3b,0x81,0x34,0x25,0x17,0x53,0x65,0xbe,0x81, - 0x1e,0x13,0x5c,0x99,0x54,0x63,0xc9,0xd4,0xd6,0x1c, - 0xa8,0x67,0x03,0x57,0x53,0x80,0xd2,0x51,0xcb,0xd4, - 0xc2,0xec,0xdf,0xdd,0xd1,0x9e,0x05,0xc9,0xf5,0xc0, - 0xbd,0x9c,0x10,0xf0,0xce,0x34,0xb6,0x1d,0xa6,0xab, - 0xce,0xd4,0xc7,0x26,0xdf,0x24,0x19,0x7b,0x7e,0x98, - 0xf0,0xa6,0xb5,0x3b,0x4d,0xd9,0x84,0x7d,0x70,0x93, - 0x7f,0x0f,0x21,0x15,0x04,0xc3,0x4f,0xc8,0x8b,0x13, - 0x64,0xd3,0xf1,0xdf,0xa9,0x75,0xd0,0x8a,0x84,0x93, - 0x8c,0x61,0x75,0x58,0xc2,0x14,0x0a,0xc8,0xf3,0xe9, - 0x1a,0x66,0xae,0x52,0x0f,0x24,0xfa,0xe3,0x08,0xf0, - 0xc9,0x92,0xc3,0x59,0x15,0xc0,0xe4,0xed,0xa1,0xf8, - 0xa6,0x88,0x51,0xaa,0xa0,0xd5,0x2e,0xc2,0x54,0xf1, - 0xa3,0x3d,0xc6,0xb4,0x8e,0x1c,0x6a,0xdf,0xf9,0x6d, - 0x2a,0x2e,0xf8,0xe7,0xcf,0x9f,0x28,0x54,0xa8,0x08, - 0xdf,0x27,0xad,0xa3,0x34,0xa2,0x1d,0xe2,0x84,0x8b, - 0x4d,0x87,0x0e,0xf2,0xe9,0x5c,0x05,0x83,0xd3,0x93, - 0x7c,0xb1,0xb6,0xc0,0x43,0x8a,0x49,0x21,0x39,0xb0, - 0x67,0xd1,0xc6,0x15,0x22,0x9c,0xcf,0xc7,0xe5,0x18, - 0x29,0x56,0x6c,0x4d,0xbe,0xd3,0x99,0xe7,0x5a,0x8a, - 0x6e,0x38,0xea,0x95,0x12,0x0c,0x37,0xa1,0x90,0x0e, - 0xb2,0x94,0xed,0x6f,0x3d,0xa8,0xdc,0x83,0x35,0x7d, - 0xfe,0x33,0x8d,0x94,0x52,0xcb,0xc8,0x25,0x44,0x81, - 0x17,0x74,0xdc,0x4b,0x4b,0x93,0x60,0xae,0xf5,0x45, - 0xc1,0x5d,0x0f,0xb3,0x89,0xab,0x41,0x09,0xd5,0x16, - 0x71,0x31,0x90,0xf2,0x99,0x12,0x3f,0x97,0x6c,0x0d, - 0x93,0x13,0xb1,0xc2,0x33,0x88,0x11,0x3e,0xd3,0x54, - 0xf9,0xb5,0xe0,0x7c,0x9c,0x79,0xe3,0x05,0x53,0x38, - 0xa4,0xae,0x9a,0x0e,0x74,0xad,0xaa,0x68,0x14,0xd4, - 0x25,0x0d,0x2e,0x09,0x9b,0xb8,0x25,0xae,0x6d,0x92, - 0x36,0xf1,0xed,0xd4,0x4e,0x4a,0xc2,0xc0,0x61,0x3a, - 0x6e,0x3f,0x4c,0x87,0xc6,0xed,0xdc,0xdc,0x93,0x0d, - 0xe2,0x68,0x4c,0xad,0xdf,0xcd,0x1a,0x1f,0x12,0xf7, - 0x3e,0x81,0x76,0x26,0x5e,0x44,0xfa,0x33,0x4d,0x42, - 0x54,0xa4,0xcf,0x1c,0x5a,0x27,0x1d,0x98,0xad,0x22, - 0x3e,0x9a,0xbc,0xea,0x54,0x90,0x26,0x7a,0xb2,0x56, - 0x92,0x0d,0xc7,0x71,0x4a,0xc5,0xf4,0x7b,0x94,0x70, - 0x24,0xf4,0x82,0x92,0x2b,0x6b,0x2b,0x20,0x7b,0xef, - 0xbe,0x9f,0x3b,0x91,0xb9,0x82,0x0d,0x09,0x68,0x78, - 0x3d,0x12,0x10,0x87,0xd8,0xa5,0xa9,0x65,0xfa,0x33, - 0x87,0x90,0xa5,0x62,0x69,0x4a,0x3c,0x16,0x07,0xb7, - 0x2d,0x9c,0x49,0xd3,0xca,0xf1,0xbe,0x5c,0x32,0x26, - 0x5c,0xcc,0x43,0x5a,0x7a,0x43,0xa7,0xe4,0xa3,0xe2, - 0x44,0x13,0x25,0x1a,0x80,0x0a,0xed,0xed,0xd3,0x0b, - 0x01,0x45,0xc9,0x27,0xcd,0xb8,0x09,0x08,0x71,0xef, - 0xee,0x7e,0x36,0x9a,0x13,0xfc,0xd6,0xde,0xe2,0x94, - 0x91,0x25,0x08,0x74,0x83,0x32,0x24,0x8e,0x0e,0x04, - 0xcd,0xc9,0x25,0x1b,0xc9,0x97,0x21,0xf8,0xa2,0x0b, - 0x7a,0xe2,0x38,0x2c,0xa6,0x8a,0x2e,0x35,0x90,0x9b, - 0xc8,0xc7,0xca,0x7d,0xe9,0xc4,0xf0,0x0b,0x84,0x08, - 0x8d,0xff,0x90,0x4e,0x06,0x3d,0x7e,0xce,0xbd,0xcb, - 0xf0,0xfe,0x8e,0x21,0xc3,0xc6,0x89,0x2e,0xd7,0x37, - 0x9e,0x88,0xc3,0xae,0x45,0x41,0x1a,0x49,0xf7,0x67, - 0x7c,0x7d,0x7d,0xad,0x5a,0x61,0xda,0x22,0x34,0x09, - 0x74,0x99,0xef,0x4e,0x9a,0x3c,0x24,0xb6,0x68,0x09, - 0xc7,0x26,0x78,0x3d,0xa6,0xc3,0x04,0x45,0x28,0x27, - 0xb4,0xa9,0x9c,0xab,0xd4,0x2a,0x6d,0x49,0x6e,0x4d, - 0xc9,0x8d,0x40,0xff,0x35,0x49,0xcb,0x0f,0x10,0xf3, - 0x59,0x18,0x94,0x56,0xea,0xc5,0x03,0x87,0xe8,0xa4, - 0x84,0x7c,0x42,0x33,0x1d,0xff,0x45,0x11,0x23,0x42, - 0x84,0x9d,0x93,0x7d,0x72,0xb9,0x36,0xf7,0x76,0x5c, - 0x9b,0xc3,0xb5,0x30,0x92,0xca,0x73,0x80,0xf9,0x4f, - 0x78,0x2f,0x07,0x10,0x21,0x2b,0x0b,0xa1,0x42,0x79, - 0x74,0x9d,0xb4,0xb6,0x97,0xe4,0xe4,0x03,0x74,0x02, - 0xa7,0xbf,0x74,0xe8,0x5d,0x27,0x45,0xe6,0xd0,0x02, - 0x1e,0x0f,0x68,0x29,0xa2,0x7e,0x10,0xfd,0xae,0xd4, - 0x6d,0x10,0xac,0x33,0x89,0x38,0xa6,0xe2,0x76,0xa3, - 0xba,0xef,0x80,0x85,0xe4,0x32,0xaf,0x60,0x01,0xb4, - 0xba,0x8e,0x91,0x8c,0x38,0xce,0xdb,0x2f,0x99,0x64, - 0xbb,0xb5,0x0a,0x05,0x17,0x3e,0x9f,0xc5,0x19,0x75, - 0xc0,0x0f,0x13,0xa7,0x03,0x5d,0xeb,0xd2,0xc5,0x85, - 0xaf,0xaf,0xaf,0x7f,0x5a,0x60,0xd4,0x3b,0xa6,0xfc, - 0x65,0x93,0xd8,0x24,0xd8,0xec,0x82,0x49,0x0c,0xf7, - 0x19,0xae,0xe2,0x0d,0xf0,0xe0,0x31,0xe8,0xca,0xd9, - 0x92,0xa7,0x12,0x9c,0xb7,0x80,0xfd,0x4e,0xf2,0xfc, - 0x9a,0xda,0x5b,0xb4,0xd9,0xa7,0xec,0x3a,0x25,0x62, - 0xe6,0xd9,0x59,0x88,0x73,0xa3,0x42,0xba,0x21,0xc5, - 0x75,0x69,0x84,0x64,0xa2,0xa7,0x87,0xa7,0x33,0x6d, - 0x85,0x6b,0x1d,0x2b,0xb0,0xf4,0x2e,0xd5,0x7a,0x80, - 0xb8,0x23,0xae,0x12,0xd4,0xdf,0x49,0xee,0xd7,0x1b, - 0x51,0x32,0x93,0xa4,0xe3,0xf7,0xb6,0xa0,0x75,0x74, - 0x5d,0x40,0x22,0x71,0xc2,0xf7,0x38,0x0e,0xca,0x51, - 0xb4,0xc2,0xb4,0x29,0xc6,0x96,0x6b,0x3a,0x04,0x04, - 0x31,0x3a,0xad,0xdd,0x74,0x5a,0x77,0x4e,0xff,0xdb, - 0xb5,0x8c,0xaf,0x4f,0xfe,0x01,0x12,0xfa,0xd1,0x36, - 0x45,0x5a,0xcf,0x0d,0xca,0x3f,0xb4,0xd6,0xb4,0x2d, - 0x49,0x53,0x89,0x09,0xa1,0x71,0x68,0x07,0xa1,0x57, - 0x14,0xcb,0xa0,0x05,0x87,0x0a,0xc4,0x0e,0x4d,0xa2, - 0xfd,0x40,0xb4,0x07,0x39,0x7c,0x8f,0x0a,0x82,0x06, - 0x55,0xfb,0x11,0x45,0xa3,0xfb,0x4c,0xb1,0xc9,0x65, - 0x25,0x4e,0xbb,0x68,0x43,0xbe,0x77,0x4a,0xe7,0xd4, - 0xca,0x99,0x04,0x03,0xc5,0x0a,0xe5,0x24,0x8a,0xc2, - 0xa0,0xbf,0x65,0x11,0xba,0xd4,0xc9,0xa1,0xb5,0x4a, - 0xca,0xcd,0xee,0x5c,0xa2,0x73,0x33,0x15,0x64,0x5a, - 0x58,0xdd,0xa8,0x20,0x75,0x3e,0x28,0xa6,0x7d,0x22, - 0x31,0xe0,0x5a,0xd2,0x90,0x28,0x9d,0xd7,0x24,0x60, - 0xb7,0xe8,0x1b,0x62,0x3f,0x7c,0xe2,0xa0,0x18,0x0e, - 0xc7,0x99,0x38,0x3a,0xc2,0x67,0xc0,0xf6,0x0d,0x09, - 0x39,0x51,0x4f,0x5a,0x89,0x8a,0x7a,0x5f,0xda,0x77, - 0xa7,0xfe,0x2a,0x69,0x8f,0x6c,0xdd,0xe9,0xe9,0x19, - 0x4f,0x55,0x8b,0xf3,0x8c,0x71,0x9c,0x10,0x25,0xa9, - 0x6e,0xaa,0xfd,0x09,0x56,0x26,0x32,0x6a,0x12,0xc9, - 0xa2,0x24,0x6f,0x41,0x94,0x3d,0x29,0xf0,0x50,0x62, - 0x1a,0x0e,0x85,0x58,0x5d,0xbb,0x04,0xb6,0x27,0x96, - 0xb2,0x96,0x0e,0x25,0x1c,0x97,0xd1,0x23,0x31,0xeb, - 0xf0,0xd0,0xf5,0x51,0xdb,0x32,0xb4,0x0f,0x0f,0xb5, - 0x70,0x87,0xa9,0xc9,0x33,0xdc,0x07,0x22,0x45,0x7f, - 0xa1,0xab,0x13,0xa7,0x57,0x84,0x6f,0x83,0xeb,0x63, - 0xe3,0x55,0x77,0x27,0x78,0xce,0x82,0x23,0xa9,0xdc, - 0x53,0x32,0x06,0x3a,0x2d,0x8f,0x9f,0x0d,0xad,0xbb, - 0xf4,0x3c,0xce,0x30,0x21,0x77,0x42,0x72,0x71,0x36, - 0x45,0x82,0x16,0x1b,0x20,0x5a,0x7a,0xa0,0xaa,0x26, - 0xc5,0x64,0x27,0xe8,0xf7,0x68,0xff,0x7c,0xca,0x67, - 0x71,0xa8,0x45,0x68,0x93,0xd9,0xa4,0x19,0x3a,0x1a, - 0xc7,0x1c,0xf2,0x87,0x86,0x01,0xb4,0x95,0x49,0x89, - 0x49,0xda,0x0f,0x3d,0xe6,0xd2,0xd4,0xa6,0x4b,0x22, - 0xb4,0x05,0xa5,0x31,0xe8,0xe6,0x4c,0x4d,0xb4,0x0b, - 0xb7,0xc6,0x27,0xc9,0x05,0xb2,0x3a,0x99,0x34,0x92, - 0x4c,0x61,0x8c,0xcf,0x8a,0xd0,0xc4,0xe9,0xdc,0x23, - 0x5b,0x8f,0x94,0x94,0xf6,0x98,0xf2,0x72,0x87,0xc4, - 0x90,0xe1,0x8e,0xad,0xaf,0xa4,0x68,0x49,0x81,0x8c, - 0x7a,0xaf,0x44,0xb0,0xa5,0x03,0x4d,0x7d,0x9f,0x88, - 0x10,0x45,0x4a,0xaa,0x29,0x59,0x4b,0xf0,0x26,0xb5, - 0xdf,0x2e,0x43,0x22,0x03,0x01,0x2a,0x57,0xb5,0x1f, - 0xe7,0x57,0x95,0x9c,0xc1,0x27,0xee,0x03,0xf5,0x93, - 0xdd,0xf5,0x6c,0xdf,0x3b,0xa0,0x6c,0xe4,0xa9,0xe4, - 0x90,0x97,0x03,0x68,0xd8,0xa1,0x76,0x14,0xb4,0x5c, - 0x0e,0xf0,0x36,0x88,0xac,0x6a,0x09,0x9f,0xaa,0x3e, - 0x6b,0x02,0xc6,0x11,0xbe,0x11,0x6a,0x66,0x08,0x12, - 0x77,0x54,0x3e,0x9e,0x5c,0xc5,0x1d,0x14,0x4d,0x49, - 0x0a,0xf1,0x17,0x14,0xb9,0x70,0xc8,0x60,0x28,0x7c, - 0xde,0xd0,0x98,0x54,0x71,0x25,0x14,0xd3,0x78,0x5b, - 0x3d,0x0e,0x04,0x07,0xbd,0x6f,0xe2,0x8b,0x1e,0x2a, - 0xe6,0xc0,0x3c,0xdf,0x09,0xeb,0x49,0x48,0x0a,0x48, - 0x78,0x1c,0xb7,0x3e,0xdc,0x41,0xfb,0xfd,0xf9,0x27, - 0xa9,0xad,0x2b,0xf7,0x2a,0x70,0xbf,0x26,0x13,0xcb, - 0x43,0x89,0xd8,0x90,0xfc,0x1c,0x27,0x5c,0xa8,0xd7, - 0x13,0x38,0x45,0x63,0x5c,0x4c,0x7f,0xe6,0x0a,0x27, - 0xd0,0x7d,0x39,0x9b,0x7d,0xad,0x9e,0x5b,0x54,0xf0, - 0x84,0x22,0xf6,0x1a,0x10,0x38,0x6c,0xff,0x84,0xf6, - 0xdf,0x21,0xd1,0x4a,0xe2,0xa0,0x12,0x6a,0x11,0x84, - 0x36,0x2d,0x48,0x71,0xaf,0x71,0x6a,0x4d,0x27,0x8f, - 0x38,0xd7,0x09,0x49,0x85,0xbc,0x79,0x9f,0x27,0xa1, - 0x49,0x6e,0x62,0x31,0xe9,0x7b,0x6d,0xd4,0xdb,0x43, - 0xfc,0x5c,0x0d,0xff,0xdc,0xcf,0xe6,0x37,0x1d,0xea, - 0x6d,0x73,0x14,0x5c,0x40,0xfd,0xad,0xd1,0x9c,0x72, - 0x6e,0x12,0x72,0x42,0x9c,0x16,0xaa,0x3e,0xbf,0xfb, - 0xb7,0x65,0xb2,0xcb,0x52,0xdf,0xb0,0x20,0x58,0xf7, - 0x38,0xd4,0x3a,0xd7,0xe5,0x3b,0xe0,0xba,0xd1,0xe9, - 0x28,0xfe,0x38,0x25,0x5b,0x53,0x3b,0x6c,0x42,0x49, - 0xdc,0x34,0x82,0x79,0x16,0x8f,0x56,0x82,0x4b,0x20, - 0xc3,0xb3,0xc6,0x51,0x77,0xd7,0xa7,0x7d,0xbd,0x5e, - 0x3f,0xcf,0x5d,0xf5,0x37,0x8c,0x95,0x44,0x6d,0xef, - 0x51,0x21,0x76,0xe2,0x83,0x69,0x92,0xe2,0x0e,0x14, - 0xd5,0x75,0x50,0x35,0x71,0xf5,0x81,0x9a,0x48,0xd4, - 0x7d,0xbd,0xea,0xe1,0xac,0x1c,0x34,0x6a,0xc3,0x7d, - 0x7d,0x7d,0x55,0x4f,0xe2,0xa1,0x27,0x4f,0x4a,0xd9, - 0xee,0x19,0x3e,0xb8,0x48,0xe9,0xb0,0x22,0x37,0xef, - 0xfb,0x03,0x36,0x6d,0xe3,0x54,0x75,0x4e,0x89,0x8d, - 0x3b,0xac,0x53,0x2b,0xbb,0x2b,0x51,0x4f,0x24,0x56, - 0x48,0x04,0x70,0x7c,0x3b,0x55,0xa6,0xfd,0xe0,0x49, - 0x05,0x9c,0x16,0x33,0x24,0x26,0x48,0xf6,0x0e,0xe4, - 0x9d,0x34,0x21,0x83,0xa9,0xed,0x7e,0x05,0x81,0xba, - 0xe0,0x63,0x76,0x88,0xd0,0x0f,0x55,0xfa,0x86,0xe8, - 0x6f,0xf9,0x40,0xe4,0x5b,0x15,0xb8,0x43,0xb1,0x8d, - 0x29,0x7b,0xc2,0x4e,0x6f,0x89,0xde,0x59,0x8c,0xd7, - 0x9f,0xc8,0x35,0xb8,0xf6,0x3b,0x39,0xba,0xd3,0x41, - 0x4f,0xa0,0xc4,0x14,0x8b,0xdd,0x9a,0x50,0x59,0x8e, - 0x7b,0x0f,0xa5,0xd1,0x75,0xfa,0xec,0x24,0xf8,0x98, - 0x3a,0x16,0x8e,0x67,0xa7,0x5c,0x25,0xf7,0x99,0x93, - 0x88,0x64,0x3a,0x5b,0xf5,0x9f,0xdf,0x09,0xd1,0x48, - 0x7d,0xc8,0x4d,0x52,0xd3,0x6f,0x8c,0xdc,0xcb,0x81, - 0x58,0x56,0x0a,0xef,0xd1,0xf7,0x4f,0xc6,0x72,0x13, - 0xe1,0xca,0x68,0x0f,0xc5,0xc4,0x62,0x32,0x73,0x4c, - 0x6d,0x83,0xd4,0xdf,0xdd,0x2c,0x32,0xe9,0x67,0x5b, - 0xd2,0xb4,0xdb,0xa0,0x49,0xf4,0x4b,0xd5,0xb8,0x15, - 0x6d,0x52,0x32,0xb4,0xab,0xe4,0xa7,0xfe,0xbc,0x26, - 0x2d,0xdf,0x81,0xbe,0xb6,0x6b,0x4a,0x55,0xb5,0xd5, - 0xa6,0x43,0x37,0xb3,0xaa,0x75,0x6b,0xb2,0x60,0xa0, - 0x5a,0x47,0xfa,0xc6,0xca,0xb6,0x27,0x31,0x4e,0xb5, - 0xbc,0x6b,0x58,0x29,0xf7,0x48,0xef,0xcb,0x3d,0x27, - 0xd1,0xf3,0xa8,0xc4,0x23,0xd2,0x9f,0xa3,0xa0,0x64, - 0xd0,0xc2,0xda,0xf2,0xb4,0xe8,0x20,0x76,0x2e,0xf1, - 0x0b,0x62,0x73,0x5c,0xfb,0x53,0xfb,0x80,0x60,0xc7, - 0x4f,0x12,0x31,0x78,0x9e,0x67,0x6b,0x38,0xaa,0x55, - 0xa4,0xd1,0xfb,0x72,0xbc,0xa3,0xc9,0xaf,0xeb,0xb8, - 0xa4,0x3e,0x21,0x98,0xcb,0x96,0xda,0x01,0xf2,0x7d, - 0x1a,0x42,0x21,0x33,0xd5,0x03,0x22,0x82,0x48,0x9e, - 0x86,0x78,0x3c,0x59,0x81,0xd8,0x0f,0x4e,0x9a,0x38, - 0x94,0x20,0x3a,0x64,0x8e,0xde,0x2d,0x75,0x30,0x4c, - 0x42,0x85,0xc9,0x4a,0xea,0x76,0xa4,0x89,0xaf,0x85, - 0xf1,0xb6,0x95,0x24,0x69,0xc5,0xe3,0xc3,0x3a,0xc7, - 0x9d,0x49,0xa9,0x6b,0x41,0xf2,0x06,0x84,0x6e,0xa7, - 0xdf,0x7f,0xbd,0x5e,0x47,0x13,0x1b,0x7d,0xb6,0x6e, - 0x62,0x97,0x4c,0x76,0xa7,0x96,0xfc,0x35,0x48,0x92, - 0xd0,0xb3,0x7e,0x69,0x70,0xd1,0xca,0x79,0xaa,0xbc, - 0x42,0x15,0x6c,0x7b,0x70,0x34,0x3a,0xee,0x7c,0x42, - 0x94,0x03,0x60,0xda,0x62,0x23,0xfc,0xe4,0x84,0xb9, - 0x74,0x04,0x35,0x91,0x13,0xf5,0x1a,0xe4,0xa5,0x5a, - 0xd3,0x54,0x22,0x3e,0xa7,0xb1,0x48,0x22,0x6c,0xd3, - 0x68,0x23,0x64,0xda,0x07,0x50,0x0c,0xd7,0x16,0x19, - 0x2d,0x2e,0xfa,0x33,0xa6,0x7b,0x74,0x1c,0x17,0xa7, - 0x2d,0x91,0x78,0x5d,0xd4,0x6b,0xd7,0x76,0x94,0xe3, - 0x24,0x41,0x3b,0xe6,0xed,0xbd,0x76,0xdd,0x16,0x25, - 0x86,0xa7,0xcd,0xe5,0x0c,0x08,0x0d,0x7a,0x74,0x08, - 0xc5,0x4b,0xe3,0xc6,0xc4,0x25,0x33,0xe8,0xd5,0x99, - 0x36,0x71,0x27,0x32,0x27,0xbd,0x2b,0x0d,0xa4,0xdf, - 0x6b,0x6b,0x6c,0x6f,0xa5,0x51,0x68,0x79,0xcf,0x3f, - 0xff,0xbb,0xff,0x5b,0x08,0xcf,0x5b,0x3e,0xc2,0xad, - 0x04,0xf9,0xf3,0xbf,0xfb,0x5a,0xe5,0x7b,0x30,0xf6, - 0xb8,0x43,0x0f,0xf4,0x5a,0x50,0x37,0x28,0x14,0x84, - 0x07,0xe2,0x89,0x0e,0x1e,0x3c,0xae,0x53,0xdb,0x8f, - 0xee,0xbd,0x49,0x55,0x7c,0x12,0xc2,0xa7,0xad,0x0f, - 0xdd,0x07,0x81,0x24,0x4d,0x13,0x76,0x6f,0x1c,0x18, - 0x1d,0x4a,0xa0,0x83,0xdf,0xa1,0x4b,0x80,0x64,0x9d, - 0xe9,0x5a,0x27,0xef,0xac,0xcb,0x13,0xb3,0x47,0x9e, - 0x96,0xb6,0x99,0xa7,0x36,0xd9,0x66,0xf8,0x66,0xf8, - 0xb3,0xe8,0xa0,0x4e,0x6e,0xf5,0x13,0x82,0x31,0x11, - 0xa7,0x53,0xa2,0x1c,0xe2,0x47,0x54,0x89,0x9e,0x2c, - 0x68,0xd2,0xd9,0xeb,0x34,0xf4,0x12,0xc2,0x3f,0x00, - 0x08,0x8f,0x61,0x13,0x63,0x0a,0x3d,0xca,0xb2,0xfc, - 0xec,0xc7,0xc4,0xa2,0x9e,0xfa,0xbb,0x13,0x41,0x52, - 0x91,0x83,0xbe,0xb1,0x53,0xcf,0x3a,0xe9,0xa1,0x24, - 0xa1,0x45,0xd2,0xac,0xa1,0xe0,0xed,0xf8,0x1d,0x74, - 0x3d,0x29,0x21,0x74,0x5e,0x64,0xb4,0x78,0x26,0xf6, - 0xfc,0xe6,0x90,0x20,0xa8,0x5e,0x3f,0x3f,0x55,0x7c, - 0x89,0x43,0x40,0x07,0x06,0x25,0xa3,0xba,0xb9,0x07, - 0x05,0x65,0x4b,0x34,0x9e,0x98,0xff,0x93,0x22,0x68, - 0x12,0xbe,0x74,0xc2,0x71,0xae,0x7c,0x98,0xda,0x01, - 0x1b,0x38,0x1a,0x0e,0xf3,0x34,0x3d,0x75,0xd2,0x24, - 0x12,0x1d,0xa4,0x89,0x73,0x36,0xb5,0xb7,0x4c,0x11, - 0x72,0xe8,0x3a,0x27,0x9d,0xb0,0x54,0x6d,0x19,0xf1, - 0xca,0xb7,0x84,0xa8,0x11,0x93,0xdf,0x26,0xc1,0x68, - 0x6f,0x6f,0xff,0x49,0x45,0xdb,0x9d,0x54,0x1e,0x66, - 0x27,0x23,0x37,0xa2,0x27,0x3e,0x8b,0xd8,0x17,0x05, - 0xed,0x94,0xa3,0x41,0x64,0xe3,0xe1,0x70,0x39,0xce, - 0x8f,0x4a,0xb9,0x3d,0xc9,0xb7,0x6b,0x7b,0xb8,0x0f, - 0xe2,0xb0,0x2b,0x62,0xb3,0x8a,0x40,0x12,0x82,0xec, - 0x92,0xae,0x64,0x61,0x44,0x53,0x51,0x5f,0x5f,0x5f, - 0x47,0x09,0xd0,0x49,0x46,0xa1,0x9f,0x4d,0x8d,0xe6, - 0x60,0xf7,0xd7,0x30,0x44,0x41,0xc6,0xe1,0x97,0x3b, - 0xbc,0x13,0x52,0xab,0xdf,0xad,0x13,0x76,0x0e,0x04, - 0x08,0xea,0xfd,0x91,0x4f,0x43,0xa3,0xf3,0xb4,0xbf, - 0x3a,0x52,0xed,0x44,0x70,0xd3,0x24,0x96,0xfe,0x9d, - 0xb3,0x3a,0xfa,0x84,0x8b,0x34,0xe5,0x2e,0xf4,0x0e, - 0x5e,0x1d,0xca,0x9d,0x0e,0x65,0x0a,0xf6,0x53,0x70, - 0xea,0x37,0x37,0xa9,0xbe,0x12,0x62,0xe4,0x46,0xf8, - 0x28,0x83,0xa5,0xca,0x1b,0x0e,0x51,0x5b,0x0d,0x90, - 0x04,0x7b,0x5a,0xf0,0xe9,0x70,0x9a,0xc4,0xfa,0x06, - 0xc4,0xe4,0x4c,0xed,0xc9,0x94,0x14,0x74,0x12,0x28, - 0xc1,0xea,0xe1,0xf0,0x7d,0x7b,0x67,0xda,0x32,0x70, - 0x63,0xa3,0x4e,0x78,0x6f,0xea,0xd1,0x26,0x62,0xb2, - 0xab,0xda,0xe8,0x5d,0xb5,0x2a,0xfc,0xf4,0xf6,0x18, - 0x11,0x4d,0x49,0xca,0x5d,0x03,0x64,0x17,0xd2,0x32, - 0x3c,0xa4,0xd3,0xc9,0xbc,0x84,0x3e,0x26,0xc1,0x4d, - 0x5d,0xf3,0xb0,0xa9,0x1f,0xe2,0x67,0x84,0xa4,0x39, - 0x12,0x7b,0xe2,0xdc,0xb4,0x7b,0x3c,0xc4,0xaf,0xd8, - 0x90,0xe2,0x27,0x12,0xe2,0x66,0x6c,0x37,0xb5,0x89, - 0xd3,0x74,0xa7,0x29,0xb0,0x34,0xe1,0x8e,0xc8,0x51, - 0x28,0x96,0xde,0x7e,0xcf,0xf1,0xe7,0x5c,0x32,0x99, - 0x90,0x4f,0x42,0x42,0xd2,0x9e,0x37,0x6d,0x5b,0x3b, - 0xa6,0xdc,0xe3,0x1f,0x5c,0xdf,0x1b,0x19,0x5e,0x39, - 0x41,0xa4,0x54,0xed,0x1e,0x1b,0x1c,0xfa,0x24,0xc2, - 0x78,0x48,0xeb,0xad,0x5f,0xc7,0xbd,0x7f,0x81,0xfa, - 0xe0,0xf4,0x84,0x4e,0x92,0x00,0x70,0x71,0x7c,0x23, - 0x1a,0xb9,0x6d,0xd1,0x82,0x62,0xfb,0x49,0xc5,0xce, - 0x34,0x35,0xf6,0xa9,0xe8,0x70,0x2a,0x5c,0x26,0xca, - 0x02,0x51,0x42,0x36,0x5a,0x60,0x30,0xfd,0x7b,0x26, - 0xb4,0x8a,0x62,0xe3,0xb4,0x27,0xb7,0x9a,0x84,0x83, - 0x72,0xf8,0xbf,0x66,0xa8,0xca,0xdf,0x01,0xdb,0x90, - 0x72,0x09,0x81,0x73,0xae,0xbe,0x8c,0xc8,0x60,0x22, - 0x6c,0x4e,0x07,0xf9,0x02,0x39,0x79,0xf3,0x94,0x22, - 0x34,0x26,0x7d,0x07,0x89,0xf8,0x4d,0x42,0x8b,0xa6, - 0x37,0xfc,0xa3,0xc8,0xa9,0x9c,0x08,0x27,0xa4,0xe7, - 0x3e,0x83,0xb8,0x49,0x57,0x23,0xc6,0xa6,0x77,0xd3, - 0xcd,0x36,0xdd,0xb3,0x33,0x9b,0xb4,0x4c,0xb2,0x55, - 0x4e,0x98,0x90,0x78,0x49,0x82,0x3a,0x1d,0xe0,0xa3, - 0x3c,0x48,0xef,0x8e,0x07,0xd3,0xef,0xcb,0x6c,0x74, - 0x72,0x68,0x27,0x83,0xba,0xe4,0x9c,0x6e,0x7f,0xad, - 0xff,0xa1,0xe9,0x61,0x3f,0x9e,0xad,0x09,0xa2,0x15, - 0x94,0x69,0x6b,0x40,0x54,0xcf,0x05,0x24,0xe5,0x1f, - 0xe1,0xae,0x6f,0x91,0x36,0x67,0xf8,0x9a,0xa6,0x03, - 0xfb,0x5e,0x75,0xc3,0x00,0x29,0xe1,0x9c,0xb8,0x48, - 0x34,0x59,0x33,0x8d,0xad,0x06,0x72,0x77,0x2c,0xa6, - 0x9c,0x39,0xa9,0x7b,0x8f,0x8e,0x74,0x9c,0xd6,0xee, - 0xc4,0x0b,0xa2,0xe4,0xb3,0x1f,0xc2,0xea,0x01,0x68, - 0x9e,0xc5,0xa1,0x44,0x8b,0xc8,0xce,0x4e,0xe7,0x29, - 0x21,0x9c,0x01,0x1d,0x45,0xe2,0x30,0xa9,0xeb,0x4f, - 0x93,0x98,0xa9,0x58,0x23,0xb3,0x53,0x23,0xe4,0x3a, - 0xd2,0x2c,0xc8,0xa6,0xc7,0x15,0x02,0xf4,0x1c,0xa8, - 0x70,0x76,0xef,0xa3,0xb7,0x16,0x45,0xe3,0x29,0xa2, - 0x86,0x9a,0xa0,0x2f,0x26,0xa0,0x8f,0x21,0x6c,0xbb, - 0xef,0x3e,0x24,0xe8,0x47,0xbc,0xa7,0x64,0xaf,0xa4, - 0xeb,0x81,0x26,0x34,0xdb,0xf9,0x78,0x40,0xdb,0x2b, - 0x1a,0x74,0x13,0x19,0x9e,0xd6,0xb6,0x13,0x74,0x9c, - 0x14,0xcb,0x2f,0x98,0xb4,0xa3,0xc2,0xbb,0x17,0x93, - 0xaf,0x0d,0x9c,0x17,0x36,0x33,0xa2,0x12,0x44,0x60, - 0x4a,0xbc,0x9e,0xa9,0xaf,0xea,0xc6,0xc7,0x07,0xdf, - 0x23,0xab,0xe9,0xb3,0x84,0xce,0x6d,0xa5,0x60,0x5e, - 0x08,0x7a,0x31,0x39,0x1d,0x93,0x04,0x41,0xa6,0x05, - 0x4c,0xd5,0xb7,0x6e,0xce,0x64,0xda,0x38,0xc1,0xfc, - 0x29,0x83,0x76,0x08,0x98,0x33,0xbf,0xfb,0x40,0xaa, - 0xfe,0xf1,0x4c,0x9d,0x26,0x8e,0xd1,0xdc,0xa1,0x6a, - 0xed,0x04,0xbe,0xc6,0xca,0x27,0x47,0xef,0x15,0x2a, - 0xb5,0xe3,0x10,0xaf,0x09,0x29,0x74,0x63,0xd0,0x49, - 0xaf,0x26,0x21,0x72,0x9b,0x36,0x06,0xf1,0x5d,0x82, - 0x17,0x9a,0x45,0x5b,0x7a,0x92,0xd9,0x38,0x33,0x1f, - 0xf3,0x02,0x53,0x31,0x92,0x5a,0x84,0x13,0x6f,0x4c, - 0xf7,0xfc,0xb7,0x35,0xca,0x49,0x13,0x44,0x69,0x4f, - 0x35,0x58,0xff,0x6c,0xbc,0xa4,0x5c,0xeb,0x37,0xf0, - 0xa6,0x8e,0x9b,0x7a,0xd1,0xd6,0x76,0x8a,0x4d,0x10, - 0xd7,0xf0,0x90,0x73,0x1c,0x17,0xe2,0xef,0x41,0xc1, - 0x31,0x0a,0xe4,0x51,0xb5,0xee,0x3c,0xdc,0x1c,0x79, - 0x5a,0xf7,0x51,0xf2,0x8f,0x32,0xed,0x13,0x9c,0xc2, - 0xa3,0x58,0x2d,0xc9,0xcf,0x63,0xaf,0xbb,0x2e,0x45, - 0xbf,0x5e,0x1d,0xbb,0x57,0x04,0x92,0x92,0x46,0x45, - 0x27,0x87,0x89,0xb8,0xcd,0x9e,0x3a,0xcb,0x73,0x13, - 0xa9,0x2b,0x53,0xd1,0xa1,0xef,0x66,0x23,0x52,0x98, - 0x10,0xa6,0x09,0xe9,0x1d,0x2c,0x45,0x4e,0x42,0x89, - 0x26,0x74,0xd9,0xa9,0x5e,0xff,0x3a,0xe7,0xfc,0x6f, - 0xd7,0x75,0xfd,0xcf,0xd7,0x75,0xfd,0xf7,0xd4,0x77, - 0x27,0xdf,0xa9,0x04,0xab,0xbb,0xd1,0x6a,0x73,0xb0, - 0x47,0xf6,0x3c,0x55,0x90,0x74,0xb8,0x4f,0x09,0x8e, - 0x72,0x76,0x36,0x10,0xda,0x06,0x4d,0xda,0xb0,0xfb, - 0x5d,0xeb,0x65,0xab,0xb3,0x11,0x7e,0x67,0x24,0xd5, - 0xb9,0x8a,0x99,0x0e,0xd6,0xde,0x3e,0x4a,0xc1,0xc4, - 0x29,0xc5,0xa6,0xf6,0x98,0x83,0x8a,0x07,0xa7,0xe3, - 0xb1,0xbf,0x9b,0xaa,0xc1,0x69,0xd3,0xeb,0xfb,0x00, - 0xbe,0x0a,0xbd,0x87,0x93,0x44,0xbd,0xe0,0x9d,0x60, - 0x95,0x0c,0xda,0x2b,0x67,0xf1,0x1c,0xe2,0x61,0xaf, - 0xad,0xbf,0x76,0xa8,0x1d,0xe5,0xc5,0x2c,0x03,0xc7, - 0x5b,0x9b,0xa7,0xab,0x3a,0x6f,0x46,0xcf,0xc3,0xa1, - 0x3f,0xee,0x05,0x27,0x6e,0xf6,0x8d,0x86,0x59,0x2f, - 0x30,0xdd,0xe3,0x53,0x7c,0x39,0xe2,0x3e,0xeb,0xd6, - 0x8c,0x79,0x4e,0x8f,0x67,0x49,0x87,0x51,0x47,0x14, - 0xb4,0xdd,0x43,0xad,0x03,0x13,0x4b,0x8f,0xe3,0xd5, - 0xb8,0xd6,0xb1,0xab,0xd4,0x49,0x01,0x7a,0x6a,0x9d, - 0x9b,0x7b,0x5a,0xab,0x3b,0x06,0x13,0x51,0x5b,0x94, - 0x05,0x29,0x82,0x03,0x49,0xc1,0x21,0x31,0x48,0xd7, - 0xfa,0xdb,0x5c,0xb3,0xc6,0x4f,0xa2,0x2c,0xb8,0x77, - 0x42,0xf7,0x7b,0x19,0x0b,0x95,0x5e,0x4c,0xc8,0x1e, - 0x3b,0xa9,0x20,0xa7,0x7b,0x77,0x08,0x63,0x42,0x05, - 0x9d,0x74,0x82,0x6b,0x91,0xa6,0xf7,0xf4,0x70,0x57, - 0xff,0x46,0xa8,0x09,0xd5,0x04,0xa9,0x96,0x68,0x81, - 0x43,0xaa,0xe4,0x8d,0x53,0xb6,0x22,0xdc,0x0b,0x90, - 0xf1,0x9f,0xae,0xeb,0xfa,0x2f,0xbf,0x0d,0x6a,0x52, - 0xc6,0x50,0xf4,0xad,0xf5,0x20,0x0f,0xab,0x00,0x5e, - 0x2a,0xa8,0x6e,0xcb,0x31,0xc9,0xcd,0x06,0xb4,0x63, - 0xdd,0xdb,0x9e,0x64,0xd0,0x80,0x78,0x1b,0x93,0x76, - 0xba,0x2d,0x44,0x28,0x6e,0x93,0x5a,0xb6,0xbd,0x65, - 0xfa,0xf0,0x35,0xf5,0x2c,0xb5,0x8d,0xa7,0xed,0x1b, - 0xc3,0x15,0xb1,0x5e,0x55,0x34,0xc2,0x7f,0x3f,0xe7, - 0x66,0x60,0x59,0x86,0xf0,0x56,0xe9,0xa0,0xd2,0x96, - 0x99,0x1e,0x04,0x70,0x90,0x39,0xbf,0x35,0xd4,0x9b, - 0xea,0xd2,0x07,0x32,0x01,0x53,0xd4,0xbe,0x72,0x5c, - 0x05,0xe7,0xc9,0xd5,0xfd,0xb8,0xdc,0x44,0xdc,0xeb, - 0xf5,0x22,0xed,0xa6,0x87,0xac,0x03,0x3d,0x37,0x08, - 0x4e,0x45,0xbc,0x04,0x1d,0x93,0xa7,0x8a,0x47,0x47, - 0xdc,0xa9,0x0d,0xfc,0xfd,0xc3,0xb5,0x51,0x52,0x35, - 0x44,0xc7,0x72,0x9a,0x58,0xae,0xd2,0xa7,0x04,0xa2, - 0x5b,0x9a,0x24,0x99,0xfb,0xd4,0x1a,0x4b,0xc4,0x54, - 0x42,0x96,0x29,0x0e,0xa8,0xb8,0x22,0x54,0xad,0x67, - 0x42,0xba,0xa9,0x8d,0x45,0x71,0x69,0xb2,0x25,0x81, - 0xd6,0xfe,0x71,0xa3,0xd2,0x7a,0x20,0x2c,0x3c,0xdd, - 0x68,0xcf,0xbe,0x79,0x14,0xb6,0xef,0x39,0xc1,0xc0, - 0xf6,0xc1,0xa1,0x23,0xdf,0x37,0x2a,0xee,0xd4,0x2f, - 0x8b,0x90,0xef,0xd4,0x5a,0x0b,0xfb,0xc7,0x2a,0x34, - 0x5f,0x20,0xb0,0xe8,0xb8,0x7b,0x6a,0x08,0x3c,0xf0, - 0x5f,0x0f,0x25,0x96,0x44,0x9f,0x48,0x3e,0x5a,0xed, - 0x3c,0x79,0x9c,0x7b,0xae,0x95,0x93,0x5a,0xb1,0xdb, - 0x51,0x77,0x4a,0x12,0x7b,0x42,0x61,0x54,0xb0,0x11, - 0xa9,0x74,0x3e,0x77,0xb0,0x46,0x1f,0xea,0xd1,0xd3, - 0xf4,0x5b,0x12,0x48,0x74,0xbc,0x4d,0x2a,0xb6,0x03, - 0x81,0xbe,0xaa,0xea,0x1f,0x0e,0x50,0xb2,0x69,0x98, - 0xfc,0x9f,0x1c,0x97,0x65,0x53,0xf9,0x99,0x8c,0xac, - 0x9c,0xc5,0x86,0x09,0xcc,0x6f,0x1a,0x38,0xee,0x60, - 0xe8,0xe4,0x54,0xc3,0x3b,0x41,0xa4,0x6a,0xea,0xaf, - 0x3a,0x7e,0x51,0x52,0xcb,0x06,0x6e,0x81,0xe5,0xa5, - 0x7c,0x62,0xe0,0x37,0x49,0x9c,0xab,0x86,0x8f,0x23, - 0x2a,0x6b,0xc2,0xea,0xcc,0x61,0x35,0x99,0x08,0x81, - 0xe9,0x91,0x58,0xd1,0xb5,0x06,0xe3,0xd0,0x37,0x43, - 0xd8,0x94,0x4c,0x13,0x07,0xcd,0x25,0x93,0x1b,0x0d, - 0x27,0xe2,0x38,0x29,0x77,0xc7,0x55,0x5b,0xaa,0x67, - 0x24,0xef,0xf2,0xc1,0xe9,0xd1,0xdf,0xd7,0xef,0x0d, - 0x4a,0xab,0x9b,0x77,0x71,0xbe,0x83,0x58,0x0d,0xc6, - 0xa4,0xa9,0xa2,0xaf,0x84,0x1e,0x12,0xb7,0x8c,0xcc, - 0x7f,0xdd,0x3f,0x5d,0x4b,0x46,0x0f,0xa9,0xe4,0x28, - 0x4f,0x7c,0x83,0x34,0xf0,0x30,0xe9,0xd9,0x24,0xa4, - 0x4a,0x27,0x88,0x2e,0xd0,0x1a,0x21,0x3f,0xb6,0xa4, - 0x3a,0x4c,0xda,0x2a,0x74,0xc8,0xa6,0x16,0x32,0xc5, - 0x24,0xf7,0x4c,0xba,0x24,0xc4,0xf4,0x99,0x4e,0x07, - 0x26,0x91,0x77,0xb7,0xba,0x36,0x2a,0xf8,0xa8,0x49, - 0x14,0x71,0xb1,0xc8,0x7c,0x93,0x92,0x51,0x8a,0xe3, - 0x34,0xe2,0xad,0x4a,0xdb,0x7d,0x9a,0x6c,0x6b,0x7a, - 0x0a,0xc3,0x07,0xae,0x6d,0x7f,0xa6,0x75,0x6d,0x04, - 0x14,0xdf,0x92,0x22,0x53,0x84,0x1e,0xe2,0x95,0xa6, - 0x36,0x54,0x3b,0x13,0x1e,0x2e,0xef,0x4e,0xfb,0x6d, - 0x6a,0x5b,0xf5,0x73,0x78,0xa2,0xca,0x68,0x5c,0xe8, - 0x9e,0x6d,0x32,0xe2,0x3e,0xfa,0x87,0x26,0x90,0x41, - 0x93,0xae,0x1f,0xcd,0xb6,0x4d,0xcb,0x68,0x08,0x3e, - 0x67,0xe0,0x1e,0x44,0xdb,0x8b,0xbe,0x31,0x5d,0x60, - 0x4e,0xa2,0x80,0x4e,0x0b,0xc0,0x05,0xaf,0xd0,0x4f, - 0x7f,0xcb,0x24,0x27,0xe2,0x18,0x55,0x22,0x3d,0xe3, - 0x54,0xc4,0x66,0xd3,0x97,0xa4,0x40,0x52,0x55,0xe7, - 0xcf,0x9f,0x3f,0x0f,0xa3,0x51,0x17,0x38,0x3e,0xf8, - 0x8e,0xf3,0x29,0x7f,0x43,0xab,0x66,0x82,0xfb,0xc9, - 0x7c,0x95,0xaa,0x0f,0xe2,0xb5,0xb8,0x83,0x3b,0xf1, - 0xa7,0x9c,0xc8,0x20,0xd8,0x43,0xd8,0x3f,0xa7,0x29, - 0xb3,0xfe,0x79,0x7d,0x7d,0x4e,0x01,0xd3,0x71,0x0c, - 0x34,0xb0,0xc8,0xfb,0xb0,0x63,0xf6,0x06,0x65,0x44, - 0x41,0x3c,0xf9,0xec,0xe3,0x0e,0x38,0xe2,0xfe,0x98, - 0x84,0xef,0xa8,0x8c,0x82,0x9b,0x04,0xd4,0xcf,0x27, - 0xe2,0xe2,0xa4,0x08,0x3d,0x11,0x95,0xa7,0x3d,0xb8, - 0x6d,0xdb,0xb5,0x76,0xd9,0xb8,0xf6,0xa5,0xe5,0x75, - 0xdc,0xbe,0x23,0xa3,0xc7,0x34,0x31,0xea,0xec,0x66, - 0x8c,0x36,0x10,0x72,0x3c,0xd2,0xa8,0x74,0xe2,0xd8, - 0xa4,0x04,0x41,0xdb,0x6c,0x54,0x08,0x04,0x91,0xba, - 0x03,0xd3,0xbd,0x87,0xf4,0x66,0x0c,0x97,0x86,0x54, - 0x8d,0xdf,0x0e,0xf5,0xde,0x32,0x4c,0xc9,0xcf,0x94, - 0x80,0x5c,0x20,0xf9,0x91,0xa6,0x5f,0x95,0x0b,0x98, - 0x7c,0xb0,0x86,0x18,0x4a,0x05,0xc9,0xd9,0xa0,0x9b, - 0x74,0xaf,0xee,0x3c,0x1c,0x48,0xf1,0x76,0xff,0xb9, - 0xd6,0xe3,0x04,0x6a,0xa4,0x04,0xd9,0x15,0x40,0x6d, - 0x98,0xc3,0xbe,0x77,0xd0,0xbc,0xb2,0x85,0x87,0xcb, - 0x07,0xee,0x78,0x94,0x62,0xdf,0xcf,0x18,0x3c,0x41, - 0x88,0x06,0xb2,0xb7,0x5f,0x04,0x87,0xfc,0x99,0xa0, - 0xb7,0xe9,0x25,0xeb,0xa6,0xa2,0xf1,0x5a,0xa7,0x7b, - 0xd1,0x83,0xb7,0x7b,0xa9,0xce,0xad,0x78,0xe1,0xf8, - 0x6e,0xcf,0x6a,0x73,0x28,0x62,0x25,0x1a,0xaa,0xaf, - 0xe3,0x78,0x56,0x6a,0x2e,0xa8,0x87,0xa8,0x23,0x03, - 0xea,0xa1,0x3e,0xf1,0x69,0x82,0x68,0x1f,0x05,0x58, - 0xc7,0x9d,0x39,0x40,0x44,0x3b,0x09,0xe2,0xa4,0x6c, - 0x9d,0x10,0x0a,0xa7,0xb4,0x0b,0x30,0xef,0x71,0x3a, - 0x13,0x5a,0x25,0x7d,0x6f,0xc6,0xb7,0xe4,0x92,0xbc, - 0xa5,0x42,0xf2,0x70,0x9c,0xf2,0xaa,0x54,0x66,0x96, - 0x2b,0xb2,0xe1,0xfc,0x2c,0x4d,0x5f,0x29,0xf0,0x9f, - 0xa4,0x9f,0x92,0x14,0xb8,0x85,0xe3,0x73,0x9c,0xce, - 0x87,0xca,0x53,0xa8,0x26,0x4d,0xa8,0x94,0xc7,0x44, - 0x26,0xa9,0x8a,0xbb,0x43,0x55,0xf7,0x93,0x8a,0x26, - 0x8a,0xac,0xc1,0x95,0xe0,0x77,0xe5,0x58,0x4d,0x68, - 0x4e,0xe3,0xcc,0x1c,0x6d,0xe1,0xc1,0x41,0x71,0x12, - 0x1a,0xed,0x0a,0x32,0x32,0x8e,0x06,0xc4,0xf0,0x80, - 0x99,0xec,0x43,0x6b,0xe9,0xde,0x03,0x21,0x66,0xc7, - 0x56,0x0a,0xf0,0x41,0x89,0xb0,0x4a,0x28,0xd2,0x21, - 0xc1,0xcd,0x0d,0x6f,0x27,0xf8,0x4e,0x4e,0x05,0x8a, - 0x35,0x7f,0x25,0x94,0x23,0xf9,0xdd,0xf5,0x77,0xa2, - 0xb6,0x17,0x9f,0x9c,0x33,0x1a,0x83,0x93,0x39,0xeb, - 0xc6,0xca,0xc6,0xad,0x01,0x67,0x43,0xe2,0x92,0xbd, - 0x20,0x0b,0x31,0x76,0x43,0xd2,0xbb,0x72,0xc5,0x92, - 0x13,0x57,0xd4,0x16,0x31,0xf9,0x79,0xaa,0xf5,0x4b, - 0x12,0x74,0x7d,0xf3,0x45,0x74,0x0b,0x9d,0x7c,0x46, - 0x92,0x09,0xde,0x56,0xac,0x0c,0x5c,0x87,0xd7,0x04, - 0x59,0x37,0xd1,0x40,0x59,0xb6,0x7b,0xd9,0xe9,0x5a, - 0xfa,0x62,0x4b,0x42,0x53,0xee,0x41,0x06,0x6f,0x14, - 0x7a,0x49,0x28,0xd0,0x98,0x50,0x8f,0xae,0x18,0x0d, - 0xd3,0x53,0xc8,0xd3,0xd0,0x60,0xe3,0xae,0xd9,0xc8, - 0xb5,0x9f,0x64,0xd1,0xa1,0x0b,0xf5,0x03,0x8d,0x17, - 0x54,0x77,0x86,0xf5,0x74,0xb4,0x2a,0xd3,0x24,0x8f, - 0x82,0xd7,0x1d,0xe0,0x8d,0x7d,0xc4,0x8f,0x19,0x67, - 0x3f,0xc4,0x02,0x42,0x10,0xa7,0xb3,0x9c,0x4b,0xb7, - 0xfb,0xfd,0xa0,0x82,0x6a,0x35,0x78,0x4c,0x7b,0xc9, - 0x9a,0x6f,0x86,0x09,0x96,0xb7,0x24,0x26,0x21,0xa7, - 0x03,0x6f,0x06,0x49,0xc7,0x8b,0x36,0xe3,0x35,0x21, - 0xc5,0x84,0x0e,0xa7,0x16,0xbb,0xa0,0x68,0xc7,0x25, - 0x9b,0x26,0xd6,0xc4,0x44,0xaa,0xa9,0x50,0xc7,0xfb, - 0x90,0x76,0xf3,0x99,0x2c,0x67,0x94,0x5b,0x43,0x93, - 0x57,0xb7,0xab,0xfa,0x90,0xd8,0x62,0xbc,0x0b,0x95, - 0xf4,0x09,0x5c,0x91,0x33,0xdc,0xdf,0x03,0xed,0xba, - 0x91,0x1f,0x83,0xfe,0x45,0x84,0x57,0x26,0xbe,0xb0, - 0xf8,0xbb,0x40,0xff,0x0c,0xa6,0xf9,0xb0,0x4d,0x45, - 0x93,0x9a,0x93,0xa8,0xee,0x3d,0xd1,0x65,0x0a,0xe9, - 0xb5,0x56,0x5b,0xd2,0xc9,0xd1,0x56,0x7f,0x4a,0x86, - 0x82,0x54,0x43,0xe2,0x54,0x1d,0x45,0xb1,0xa0,0xc0, - 0x44,0xda,0x46,0x6a,0xa3,0xa7,0x8e,0x4e,0x38,0x7b, - 0x6c,0x37,0xc9,0xb5,0xf5,0x5c,0x72,0x34,0xc5,0x96, - 0x21,0x4f,0x79,0xe4,0x18,0xaf,0xd4,0xae,0xa2,0x83, - 0x38,0x5d,0x24,0x98,0x3f,0x3a,0xc4,0x61,0x25,0xf4, - 0xd4,0x0f,0xb8,0x24,0x82,0x48,0x4e,0xe9,0xa6,0x3d, - 0xf2,0xf6,0xe7,0xee,0xe7,0x93,0x15,0x00,0xb5,0x71, - 0x92,0x65,0xc3,0x64,0xee,0xd7,0xab,0x3e,0xc7,0xcf, - 0x71,0x22,0x7b,0x50,0x21,0xbb,0x64,0x6b,0x94,0x0e, - 0x68,0x95,0xaa,0xd5,0x28,0x71,0x68,0x1f,0xf5,0xe0, - 0x21,0x89,0x8b,0x68,0x20,0x05,0x88,0x89,0x0f,0x41, - 0xda,0x27,0x9a,0x64,0x41,0x50,0x3c,0xb4,0xb6,0x7b, - 0x12,0x44,0x95,0x2a,0x21,0x12,0xd7,0x60,0xc8,0xe9, - 0x26,0x7d,0x28,0x09,0xd4,0xde,0x3f,0x7c,0xd6,0x63, - 0x7f,0x90,0xdf,0x9e,0x8a,0xfa,0xa5,0xd1,0x73,0x33, - 0xdd,0x41,0xef,0xa3,0x0f,0x50,0x1d,0xf2,0xc5,0x9a, - 0x8a,0x15,0xf7,0xf7,0x9d,0x7c,0xab,0xe8,0xc6,0x25, - 0x4e,0xf5,0x93,0x38,0x29,0x4d,0x05,0xca,0x5a,0x3c, - 0x57,0x76,0x54,0xb7,0x23,0xf3,0xd4,0xde,0x24,0x34, - 0x2e,0x24,0x5f,0xe7,0x13,0xf4,0xc3,0xa9,0x14,0x87, - 0xaa,0xff,0x81,0x7e,0x69,0x91,0x07,0x3c,0xc6,0x9f, - 0x36,0x9d,0x1b,0xff,0x4e,0xef,0x74,0x12,0xfa,0xa3, - 0x42,0x97,0x26,0x97,0x36,0xb6,0x11,0x14,0x77,0xa6, - 0xd6,0x94,0x22,0xd8,0x3a,0xe5,0x44,0x2d,0x60,0xe2, - 0xbf,0x90,0xed,0xc7,0x27,0x5e,0x95,0x57,0x70,0x59, - 0xa7,0x8e,0x89,0x4b,0xfe,0xdc,0x64,0x94,0xee,0x6d, - 0xa0,0xa1,0x9c,0xa4,0x71,0x24,0x7f,0x7e,0x08,0x38, - 0x31,0xed,0xbb,0xa3,0x7b,0xdb,0xa1,0xac,0x49,0xc8, - 0x75,0x32,0x3d,0xa6,0x18,0xa0,0x43,0x4e,0xaf,0x69, - 0xaa,0x42,0xa5,0xdb,0xdd,0x4b,0x50,0x3f,0x9a,0xa9, - 0x52,0xe9,0xca,0xc4,0x09,0x01,0x71,0xb0,0xba,0xb6, - 0x77,0x36,0x1a,0x06,0x97,0x8c,0xf6,0x39,0x18,0x71, - 0x98,0x30,0x39,0x14,0x3c,0x92,0xf5,0x82,0xe3,0x89, - 0x28,0xdc,0xbc,0xd4,0x47,0x3a,0xbd,0x5d,0x93,0x10, - 0x14,0x72,0x3c,0x9f,0xc4,0xd4,0x28,0x40,0x86,0xb1, - 0xce,0x58,0x9d,0x1a,0x02,0xed,0xd9,0xb4,0x13,0x5d, - 0xa2,0x91,0x12,0x17,0xf7,0x8e,0x26,0x95,0x57,0xfd, - 0x3b,0xdd,0xd8,0x5d,0xcb,0xc3,0xad,0x11,0x97,0xa0, - 0x25,0xd1,0x2f,0xa7,0xa9,0x44,0x55,0xbe,0xfa,0x4d, - 0x4d,0xfa,0x38,0xfd,0xf3,0xa8,0x48,0x00,0xdb,0x8e, - 0xd3,0x5b,0x36,0x93,0x95,0xc1,0x46,0xae,0xa0,0xbd, - 0xe7,0xf3,0x4d,0x5a,0x7c,0x24,0x48,0x0d,0x89,0x7a, - 0xf3,0x0a,0x33,0x3e,0x5f,0x6f,0xbf,0x43,0xc8,0x4e, - 0x4a,0xb0,0x08,0x41,0x32,0x0a,0xdc,0x67,0x72,0xf2, - 0xd6,0x76,0x71,0xbb,0x5e,0xbb,0x0e,0xe4,0x10,0x3d, - 0xae,0x75,0x2b,0xbf,0x77,0x5c,0x1b,0x58,0x6d,0x38, - 0x42,0xe2,0x8a,0x13,0x6d,0xfd,0x5a,0x41,0x21,0xdb, - 0x1e,0xa2,0xae,0x2d,0xa5,0x6d,0x2f,0x47,0x58,0x06, - 0xe4,0x83,0xa4,0x1f,0x0e,0x59,0x59,0x24,0x04,0xd6, - 0xed,0x47,0x27,0xfd,0x40,0xbc,0x29,0x7d,0xf6,0x2e, - 0x16,0x83,0x0b,0xc1,0x49,0xd2,0x22,0x0e,0xd9,0x23, - 0x14,0xb8,0x27,0x0f,0x84,0x70,0x68,0xab,0x79,0x42, - 0x9f,0x26,0x64,0x1c,0xd0,0x5d,0x6c,0x7d,0x52,0xb0, - 0x26,0x6e,0xab,0xe3,0xf0,0xa6,0x64,0x9c,0x12,0xc2, - 0xc9,0x66,0x67,0x89,0xcc,0xc6,0x49,0xbc,0xeb,0xfa, - 0x76,0x83,0x37,0x70,0xd5,0x38,0x75,0x62,0x92,0x8c, - 0xa8,0x2c,0x9b,0x7a,0xa0,0x52,0x4d,0x15,0x69,0xac, - 0x6c,0x08,0x56,0xdf,0x0f,0xfd,0x6d,0x54,0xfb,0x1e, - 0x03,0x4f,0x24,0x32,0x09,0x34,0xa5,0x6d,0x05,0x80, - 0xff,0xdc,0xa4,0xd4,0x63,0x74,0x5a,0x33,0xed,0x3e, - 0x51,0x66,0x5a,0x1d,0x76,0xea,0x88,0x7c,0x7d,0x5c, - 0xd0,0x4d,0xc9,0xac,0xf6,0x50,0xfb,0xc4,0x50,0x4b, - 0x96,0xc6,0x77,0xdf,0x27,0xae,0x1c,0xf1,0xee,0xfe, - 0x8c,0xfe,0xec,0x4d,0xe5,0xd9,0x93,0xe8,0x71,0xdc, - 0x7a,0xaa,0x02,0xfa,0xd8,0xba,0x41,0x54,0x0a,0x82, - 0xd5,0x43,0xa1,0x5b,0xf7,0x01,0x3c,0x7f,0x9c,0x7c, - 0x6b,0x81,0xbd,0x52,0x90,0xe8,0x8a,0xe1,0xc4,0x8b, - 0xea,0xd7,0xb7,0x15,0x95,0xbc,0x60,0xca,0x30,0xed, - 0x99,0xf6,0x73,0x45,0x42,0xa6,0xb4,0xff,0xa7,0xf7, - 0xb6,0xa8,0xf6,0x6d,0xe0,0x75,0x08,0x92,0xe3,0xf6, - 0x6d,0x3d,0xf5,0x92,0x19,0xe7,0xc6,0xa4,0x51,0x5b, - 0xe4,0x30,0x65,0x12,0x6d,0x6d,0x36,0x36,0x13,0xae, - 0xf5,0xd8,0xf7,0x89,0x39,0x80,0x50,0x5c,0x33,0x70, - 0x74,0xde,0x0e,0xe3,0xbe,0x4f,0x5d,0x4b,0xc6,0x4d, - 0xf4,0x38,0xb4,0x08,0x10,0x1e,0xd4,0x01,0xa2,0x56, - 0xb0,0xe3,0x9f,0x04,0x35,0x7b,0xc7,0xb9,0x3a,0x70, - 0x36,0xac,0xf6,0xc4,0xfd,0xb9,0xee,0x79,0x1b,0x87, - 0x00,0xab,0x92,0xec,0xec,0x4b,0x12,0x72,0xe4,0xba, - 0x09,0x69,0xba,0x51,0xef,0xc1,0x74,0x0f,0x2c,0xb9, - 0x38,0x4d,0x6a,0xcb,0x04,0xeb,0xb8,0xaf,0x52,0xab, - 0x72,0x4a,0xa8,0x92,0x6a,0xf3,0x94,0x50,0xdf,0x8f, - 0xd3,0x8c,0xe2,0xa3,0x79,0xb5,0xe3,0x70,0xbd,0x36, - 0x82,0x7f,0x5b,0x57,0xdc,0x34,0x0e,0x3b,0xf5,0x1f, - 0x53,0x3f,0x51,0x47,0xe3,0x5c,0x3b,0x8b,0xa0,0xd7, - 0x9e,0xc0,0x18,0xb7,0xd8,0xb3,0x51,0x34,0x75,0x09, - 0x8c,0xea,0x8c,0xd0,0xe1,0xf0,0xeb,0xd7,0x2f,0x84, - 0x83,0x89,0x33,0xe3,0xb8,0x18,0x90,0x79,0x9f,0xe4, - 0xad,0x12,0xc6,0xaf,0x27,0x89,0x76,0xf4,0x0e,0x4b, - 0x0e,0xf4,0x93,0xf7,0x5a,0x50,0xd7,0x3d,0x0e,0x59, - 0x73,0x7e,0x65,0x9d,0x93,0x00,0x46,0x8f,0xb4,0xa6, - 0x92,0x96,0xc6,0x49,0x7d,0x69,0xc7,0xeb,0x09,0xae, - 0xd2,0xb6,0x0a,0xa3,0x09,0x1a,0x15,0x63,0x04,0x14, - 0xe0,0x90,0xd1,0x6c,0x87,0xe7,0x45,0xb8,0xec,0xb8, - 0xc4,0x92,0xe0,0x74,0xfd,0x5d,0xad,0x74,0xa7,0x8a, - 0x4b,0xff,0x71,0x06,0x9d,0x53,0xeb,0x8b,0x10,0x90, - 0xd4,0xd2,0x9a,0xa6,0xcd,0x44,0x5d,0xfb,0xa4,0x6b, - 0x09,0x85,0x06,0xb6,0xc6,0x88,0x8f,0x91,0xfc,0x90, - 0x88,0x53,0x06,0xf7,0x18,0x95,0xc3,0x01,0xd1,0x58, - 0xc5,0x6c,0x77,0xa0,0x3b,0x94,0x43,0xd7,0x96,0xc6, - 0x96,0xef,0x16,0xfd,0x09,0x87,0x79,0x44,0xe9,0x96, - 0x63,0xff,0xe3,0x90,0x00,0xa1,0x3c,0x29,0x91,0x4f, - 0x72,0xdf,0x3a,0x0e,0x7e,0x77,0x2e,0xc8,0x3a,0xc9, - 0x25,0x8b,0x5b,0x43,0x4f,0xb7,0xf7,0xcd,0xd9,0x79, - 0xcc,0x88,0xf9,0x71,0x6d,0x27,0x45,0x97,0x3b,0x9f, - 0x89,0x62,0x66,0x32,0x9d,0x25,0x8a,0x49,0xd2,0xfd, - 0x4a,0x93,0x89,0x2e,0xd9,0x99,0x46,0xf6,0x5d,0x91, - 0x41,0xc3,0x33,0x6e,0xca,0xd7,0x4e,0xfa,0x05,0xd2, - 0x66,0x30,0x4c,0xb6,0x84,0xc5,0x03,0x53,0x1f,0x67, - 0x7a,0x10,0xd4,0x06,0x73,0x2f,0xc5,0x11,0xfe,0x92, - 0x2f,0x8a,0xf2,0x83,0xe8,0xa5,0xff,0xfa,0xf5,0xeb, - 0xe7,0x65,0xba,0xcd,0xec,0xe4,0xd9,0xdd,0x83,0xd6, - 0x36,0x10,0x55,0x7a,0xa1,0x6a,0x7c,0xb4,0xdc,0xdc, - 0x82,0x74,0xea,0xbd,0x34,0x11,0xe6,0xde,0x4f,0xe3, - 0x15,0x9d,0x89,0xa7,0xd5,0x36,0x75,0x9c,0x88,0x21, - 0xb8,0xda,0xf8,0x97,0x61,0xb2,0x43,0xc9,0xaf,0x6b, - 0x5f,0x04,0x8e,0xc4,0x01,0xde,0xcc,0x09,0xda,0x2d, - 0x69,0xa4,0xf8,0x50,0x60,0xba,0x60,0xca,0x48,0xaa, - 0xf7,0x43,0xa8,0x5d,0x57,0x67,0x26,0x53,0x43,0xd7, - 0x16,0x73,0x87,0x8a,0x23,0x7b,0x6e,0xda,0x6d,0x74, - 0x98,0x77,0xe7,0xf6,0x4b,0x88,0xd7,0x93,0x4a,0xbc, - 0xbb,0x46,0xe2,0x3b,0xa4,0x02,0x82,0x82,0x2d,0xe9, - 0x8c,0xf4,0x76,0x9a,0xb6,0x8d,0xfa,0x67,0xa4,0x04, - 0xae,0x6b,0x8f,0xe8,0xb3,0x23,0xc2,0xec,0x2d,0x34, - 0xda,0x13,0x96,0xc1,0xbf,0x70,0x22,0x91,0x8f,0xce, - 0xf3,0x4a,0x3d,0xd0,0x78,0x95,0x4c,0x6d,0x83,0x2f, - 0xd8,0x09,0x1a,0x69,0x87,0x7c,0x95,0x00,0x69,0x38, - 0x4e,0x43,0x67,0x50,0x17,0xb6,0x07,0x2f,0x14,0x72, - 0x27,0x71,0xec,0xdc,0xe4,0xd2,0xa6,0x50,0xbf,0x1a, - 0xb9,0x7b,0x22,0xef,0x53,0xac,0xfd,0xc0,0x1a,0xc6, - 0xb5,0x9f,0x8e,0x49,0xc6,0x8f,0x41,0x90,0x89,0xf7, - 0x77,0xa0,0xed,0xed,0xce,0x2c,0x57,0xe8,0xa4,0x78, - 0x86,0x1c,0x24,0xb3,0x0f,0x47,0x55,0xf8,0x49,0x16, - 0x60,0x42,0x44,0x89,0x70,0x2d,0x67,0x1c,0x3e,0x87, - 0xdf,0x9b,0x00,0x94,0x74,0x02,0xd2,0x94,0xc6,0x27, - 0xe2,0x7e,0xda,0x92,0x80,0x3e,0x6d,0x51,0x7f,0xd5, - 0xf4,0x79,0x8b,0xc4,0xd6,0x8c,0x2e,0x4e,0x25,0x22, - 0x55,0xe2,0x41,0x38,0x11,0xc1,0x80,0x2a,0xbd,0x89, - 0xf7,0x75,0xc1,0x42,0xaa,0x42,0x93,0x59,0x63,0xdb, - 0x80,0x45,0xef,0x51,0x20,0x5c,0xfb,0xb3,0x70,0xe0, - 0x92,0xca,0xb7,0x1b,0xf5,0x7e,0x13,0xb2,0x14,0xcf, - 0x95,0x02,0xa8,0xdc,0x5d,0x33,0xb5,0xdf,0x1e,0x4a, - 0xe4,0x4e,0x68,0x30,0x1d,0xaa,0x7a,0x5f,0x0a,0x9d, - 0xf6,0xef,0x09,0x46,0x8c,0x15,0xd6,0xc3,0xd4,0xf2, - 0x42,0xb1,0x45,0x23,0x35,0x51,0x03,0x3f,0xed,0x0e, - 0xd0,0xe5,0x2a,0x1f,0xd8,0x8f,0x77,0x40,0x2a,0xe2, - 0x1a,0x4c,0x9c,0x3a,0x97,0x44,0xde,0xd7,0x9b,0x26, - 0x47,0x12,0x92,0xea,0xae,0x35,0xf1,0x29,0x88,0xc7, - 0x06,0x70,0xf8,0x8a,0x1c,0xa9,0x6d,0x19,0x42,0x62, - 0x69,0x4f,0xba,0x03,0x3a,0xb4,0x8c,0xce,0x82,0x0b, - 0x11,0x27,0xca,0x82,0xba,0x32,0x8e,0x0d,0x6b,0x71, - 0x94,0x74,0x85,0xa0,0x2d,0x78,0x60,0x9d,0x9c,0x64, - 0x03,0x04,0x28,0xc9,0x5b,0xe1,0xda,0x0d,0x3f,0x89, - 0xc7,0x44,0x45,0x22,0xc9,0x62,0x50,0xa1,0x4a,0x06, - 0xad,0x8b,0xd6,0xed,0x31,0xc4,0xe1,0x31,0xd1,0x51, - 0x24,0x8f,0xfe,0x4c,0xa9,0x10,0x09,0xfd,0x98,0x10, - 0x2b,0x48,0xdc,0xd0,0x60,0x77,0xeb,0x38,0x0f,0x2d, - 0xb4,0x43,0x2d,0xb6,0x3e,0x38,0xe1,0xd0,0xca,0xde, - 0x6e,0x4b,0xa2,0xa8,0x81,0xc3,0x87,0xc8,0x9f,0xc4, - 0x18,0x7c,0x70,0xaf,0x44,0xd0,0x4b,0x6a,0xaa,0x20, - 0x40,0x74,0x48,0x15,0x95,0x7e,0x2f,0x29,0xd6,0x12, - 0x87,0x20,0xf1,0x08,0x52,0x1b,0xaf,0xc3,0x85,0xda, - 0x12,0xfb,0xf3,0xe7,0xcf,0xe8,0x9e,0x7b,0xf9,0xc9, - 0x2f,0xcc,0xae,0x35,0x01,0x71,0x49,0x56,0x22,0x3e, - 0x13,0xd9,0x6f,0x4a,0x2a,0x15,0xaa,0x9e,0x38,0x5a, - 0x77,0xc5,0x61,0x26,0x3d,0xc6,0x0a,0x91,0xaa,0x02, - 0x27,0xa3,0x9f,0x60,0xf0,0xc4,0xf8,0x1f,0xda,0x0d, - 0x8f,0x29,0x44,0xf2,0x4d,0x22,0xed,0x12,0x72,0xa7, - 0xa6,0x51,0xd3,0x54,0x0d,0x0e,0xc9,0xd8,0x71,0x10, - 0x3f,0xe9,0x58,0x74,0xf8,0x1d,0x10,0xd2,0x07,0x81, - 0xd7,0x55,0xae,0xa6,0x12,0x3e,0x74,0x60,0xb8,0xbd, - 0xe6,0x5a,0xdc,0x0e,0x99,0xba,0xde,0xc7,0xed,0x8f, - 0x33,0x76,0x4d,0x41,0x57,0xdb,0x00,0xef,0xcb,0xf3, - 0x49,0xa4,0x9e,0xda,0x9f,0x93,0x92,0xbd,0x39,0x8c, - 0xc8,0xe6,0x01,0xf7,0xd0,0x1d,0x3f,0xa9,0xd2,0x54, - 0xc2,0x35,0x4d,0x84,0x2a,0x6f,0x48,0xdb,0xf6,0x4b, - 0x34,0xd2,0x22,0xba,0x7a,0x88,0x7f,0xa2,0x32,0xef, - 0x28,0x08,0x44,0x2a,0x4d,0x93,0x9f,0xc9,0x7e,0xc4, - 0xc5,0x3b,0xf7,0x39,0x0b,0x4e,0x10,0x09,0xa9,0x1e, - 0x8a,0x1d,0x89,0x17,0x95,0xa6,0x55,0xc3,0x9a,0x3b, - 0xce,0xeb,0x2d,0x9d,0xa9,0x8a,0xf4,0x90,0x45,0x94, - 0x5b,0xb3,0x30,0x25,0x39,0x26,0x34,0x43,0xbb,0xd1, - 0x22,0xeb,0x6a,0x78,0x3d,0x0c,0x17,0x60,0x1b,0xcb, - 0xdc,0xf3,0x05,0x9e,0x68,0xf6,0xbd,0xd3,0x79,0x3a, - 0x29,0x6b,0xbb,0x77,0xfe,0x9b,0x20,0xbb,0xa6,0x8b, - 0x53,0x70,0x38,0x57,0x7f,0x31,0xd3,0xf8,0x3b,0x6c, - 0xfa,0x07,0xe1,0xd8,0x91,0x59,0x07,0x14,0xc6,0x12, - 0xb6,0x3b,0x11,0x57,0xaf,0xcb,0x04,0x15,0x25,0xd0, - 0x8d,0x81,0x41,0xee,0x0b,0xbd,0xbc,0x12,0x64,0xa8, - 0xbe,0x61,0x54,0xc9,0x68,0x00,0xa9,0xf7,0xd3,0xe1, - 0xed,0xbb,0x92,0xe8,0x9c,0x23,0x9a,0xcb,0x64,0x5e, - 0x99,0x60,0x50,0xd0,0x8b,0x2e,0x9d,0x76,0x21,0x8b, - 0x8b,0xfe,0x7d,0x0e,0xb9,0x32,0x07,0x80,0x5d,0x73, - 0xdd,0xb3,0x4a,0xa1,0xf4,0x7e,0x3d,0xce,0x0a,0x85, - 0x90,0x20,0x48,0x14,0x1e,0x36,0x1b,0x26,0xc8,0x56, - 0x98,0x76,0xa9,0x61,0x5a,0xc1,0xa2,0x49,0x80,0xb4, - 0xd4,0x86,0x73,0xf2,0x7d,0x60,0x56,0x2a,0x24,0xf4, - 0x77,0x64,0x44,0x76,0x2e,0x65,0xa1,0x65,0xb1,0xb0, - 0x1f,0x38,0x84,0x08,0x38,0xa1,0xd0,0xad,0xa6,0xd8, - 0x54,0xf9,0x02,0x5a,0xf3,0x68,0x5d,0xd0,0x77,0x82, - 0x88,0xe9,0x75,0x65,0x3d,0x1d,0x7b,0xc8,0x38,0xdf, - 0xa7,0xa4,0xd8,0xab,0x55,0x34,0xb5,0x15,0x26,0xe4, - 0xc8,0xf1,0x05,0x01,0x45,0x7e,0x1c,0xb4,0x3a,0x36, - 0xad,0x03,0x0d,0x01,0x55,0xb0,0x48,0x4e,0x6f,0x87, - 0xa9,0x00,0x21,0xbc,0x3b,0x4b,0x8c,0xed,0x2a,0xc2, - 0x0e,0x31,0x21,0xaf,0x28,0x2d,0x04,0x8c,0x64,0xc1, - 0x49,0xb6,0x1e,0x52,0xd8,0x1e,0xc7,0x99,0x49,0x9e, - 0x73,0x46,0xad,0x7d,0x44,0x3f,0x9d,0x7d,0xc3,0x94, - 0xf4,0xbb,0x18,0x49,0x08,0x92,0x9e,0xdf,0x41,0x82, - 0xc4,0xed,0x93,0x43,0xfb,0x77,0xba,0x26,0xb5,0x19, - 0x21,0x19,0x04,0xb3,0x77,0xcf,0x84,0x44,0x91,0x13, - 0x84,0x8b,0xb1,0xaf,0xc9,0x2e,0xc2,0x25,0x31,0x6e, - 0x6c,0x91,0x54,0x9a,0x1d,0x47,0x80,0x2a,0xd4,0xd4, - 0x73,0x4d,0x44,0xd6,0xad,0x95,0xc3,0x86,0x1f,0xb3, - 0xc8,0x86,0x4f,0xb8,0x3e,0xdc,0x50,0xfd,0xc5,0x26, - 0xd2,0x75,0xfa,0x2e,0x5a,0x54,0x9d,0xa3,0xe4,0xc6, - 0x10,0xd3,0x18,0xa0,0x26,0x80,0xa0,0x1c,0x3b,0x92, - 0xd5,0x68,0xdc,0x3e,0xa9,0x8b,0x6b,0x0f,0x5f,0x89, - 0x7d,0x06,0x81,0x38,0x13,0xf2,0x95,0x38,0x01,0x8e, - 0x8f,0x14,0x82,0xd7,0x51,0x19,0x06,0xe7,0x45,0x44, - 0x49,0xea,0x35,0x88,0x1e,0x26,0xee,0x90,0x72,0xd7, - 0x2e,0xd0,0x33,0x31,0xb0,0xf3,0x49,0x22,0x97,0x83, - 0x0d,0x82,0xd5,0xf2,0x59,0xf0,0xdd,0x36,0x6d,0xed, - 0xf1,0x77,0x48,0x03,0x88,0x0e,0x23,0x47,0x30,0x25, - 0x71,0x50,0x49,0x46,0x0e,0x29,0xa4,0xbb,0xd8,0xd2, - 0x8b,0xa5,0x36,0x92,0x1f,0xa7,0xdf,0x14,0x85,0x0d, - 0xdc,0x32,0xcb,0xc3,0x4b,0x71,0x27,0x54,0xc9,0x27, - 0xc4,0xde,0xb3,0x99,0xae,0x34,0x71,0xdd,0x9a,0x85, - 0x52,0x6c,0x4a,0x07,0x68,0x6a,0x89,0x12,0x12,0x1b, - 0xc4,0x38,0x47,0x04,0xa9,0x23,0x96,0xee,0xb0,0x34, - 0x82,0xaf,0x8f,0x21,0x19,0xc7,0xfd,0xd4,0xcf,0x4b, - 0x02,0x90,0x4e,0x32,0x60,0x32,0x9b,0xa6,0x33,0xd6, - 0x15,0x84,0xe4,0x04,0xef,0xce,0x6f,0x33,0xcd,0x76, - 0x12,0x2a,0xa5,0x62,0xb8,0x2a,0x5e,0x49,0x1a,0x5f, - 0x8e,0xab,0xa4,0xa1,0x78,0x31,0xb0,0x72,0x4d,0xf1, - 0x6e,0x92,0xad,0x18,0x64,0x03,0x7e,0xfe,0xfc,0x45, - 0x01,0x32,0x55,0x7d,0xda,0xe7,0x73,0x0b,0x92,0xcc, - 0x41,0xf5,0x85,0x4c,0x3d,0x48,0xca,0xac,0x35,0xb0, - 0x4d,0xb6,0x19,0x93,0x98,0xd2,0xdf,0x24,0x20,0x9f, - 0x04,0xa8,0x00,0x8d,0xff,0xc0,0xcc,0x1d,0x66,0x87, - 0xa9,0x28,0xdb,0x33,0x9d,0x82,0x1a,0xf0,0x96,0x62, - 0xc2,0xe6,0x26,0x71,0xa4,0x8a,0x7d,0xc8,0xbe,0xf7, - 0x60,0x6e,0x4c,0x32,0x4f,0x6a,0x9b,0xb9,0x00,0x4b, - 0xde,0x73,0x93,0x5d,0x06,0xb5,0x13,0x69,0x63,0x6e, - 0xfa,0xe6,0xb0,0x19,0x2d,0x2f,0xc2,0xf0,0x6e,0x1c, - 0xdf,0xc7,0xb9,0xb2,0x4f,0xed,0xb3,0xd8,0x6e,0x54, - 0x02,0x6d,0x5f,0x4b,0x41,0xbd,0xdb,0x25,0x2a,0x4a, - 0x7e,0x1e,0x3d,0x8f,0x1c,0x39,0x3e,0xb5,0xd8,0xe8, - 0x3a,0x9c,0xa3,0x7c,0x4a,0x32,0x92,0xc0,0x5f,0x13, - 0xf7,0x3c,0xa4,0x8b,0x62,0x74,0x5e,0x5c,0xf2,0x77, - 0xc0,0x2a,0x86,0xda,0x14,0x47,0xf7,0x28,0x69,0x31, - 0xe9,0x14,0x0f,0xb4,0xf6,0xcf,0xc0,0xd3,0x48,0x0a, - 0xe4,0xc7,0x25,0x1f,0x9d,0x28,0xdd,0x3f,0xfb,0x9e, - 0x5a,0xa5,0x77,0x46,0x87,0x99,0xb6,0x80,0xa9,0xb5, - 0x44,0x87,0xfe,0x84,0x22,0x12,0x32,0x47,0x36,0x4d, - 0xae,0x25,0x9d,0x24,0x44,0x2e,0x1e,0xaa,0x70,0xeb, - 0xf1,0x6c,0x5a,0xf2,0xc9,0xba,0x69,0x22,0x29,0x6b, - 0x52,0x45,0x2d,0x21,0x77,0x56,0x80,0x70,0xed,0x58, - 0x7c,0x50,0x01,0xab,0x2d,0x2f,0x3a,0xe7,0x26,0x4d, - 0xc1,0x84,0xd6,0x92,0x06,0x54,0x32,0x77,0xdd,0x72, - 0x97,0xe8,0xdd,0x5c,0xd7,0xf5,0x74,0x83,0xef,0xbf, - 0xd4,0x14,0x1e,0x9d,0xde,0xc9,0x4f,0x2b,0x46,0x20, - 0x48,0x6c,0x79,0x7c,0xfa,0xf3,0x17,0x90,0x7b,0xf5, - 0xc6,0xc2,0x44,0x14,0xe9,0x19,0xfd,0xb4,0x70,0xba, - 0x3b,0x72,0x72,0x11,0x77,0xc4,0x69,0xf7,0xf7,0x26, - 0x88,0x1e,0x75,0xe7,0x76,0xdf,0x45,0x46,0x6f,0xf7, - 0x73,0x70,0xa4,0x5d,0x25,0x11,0x2a,0x81,0xbc,0xdf, - 0x97,0x81,0x6a,0xdf,0x5a,0x69,0xaa,0x6f,0xa2,0xa6, - 0x8c,0xda,0xf2,0x71,0xc4,0xde,0x69,0x32,0x8c,0x2a, - 0xc9,0x4e,0xa0,0xde,0xb4,0x54,0xf4,0xbd,0xaa,0xfb, - 0x7a,0x48,0x50,0x4b,0xaf,0xe3,0x26,0x33,0xde,0x6b, - 0x10,0xaa,0xc5,0x4a,0x95,0xaa,0x7e,0x27,0x98,0xcf, - 0x52,0x2b,0xee,0x0d,0xf4,0x4a,0x49,0xb6,0x4c,0xd4, - 0x14,0x8d,0x85,0x86,0xe4,0xaa,0x92,0xc3,0x74,0x20, - 0x42,0x1f,0xe0,0x01,0xea,0x1e,0x8a,0xfb,0x26,0x4d, - 0x8a,0x11,0x5c,0x9e,0x82,0xa6,0x43,0x1e,0xa8,0xb0, - 0x71,0x05,0x5b,0x92,0x9e,0x20,0xb7,0xee,0xd4,0x4a, - 0x48,0x92,0x10,0x8a,0x94,0xa6,0xd6,0xc1,0x24,0x1e, - 0xea,0xd0,0x6c,0xe0,0x4e,0x8e,0xc9,0xbd,0xf1,0x99, - 0x7a,0x24,0x4d,0x54,0x51,0x6b,0xcb,0xe1,0xfe,0x7d, - 0x69,0x93,0x3d,0x0a,0x01,0x27,0xa8,0xa8,0x7f,0xae, - 0xda,0x6d,0x29,0x0b,0x04,0x24,0x16,0x27,0xd6,0x28, - 0xd9,0x20,0x79,0x0c,0x25,0x6a,0x43,0x12,0x75,0xa8, - 0xfd,0x36,0xa1,0x64,0x4e,0x77,0x27,0x21,0xf6,0x64, - 0x35,0x12,0xe2,0x93,0xa3,0x98,0xa0,0x76,0x9c,0xe3, - 0x60,0x99,0xf5,0xf5,0xf3,0x8e,0x36,0x5d,0x18,0x88, - 0xef,0x07,0xf6,0x20,0xbd,0x23,0x32,0xb9,0xc6,0xe4, - 0x8b,0xf4,0xb7,0x7e,0xe2,0x81,0x12,0xb7,0x12,0x2a, - 0xe2,0x9c,0x72,0xd3,0x97,0xba,0x8c,0x2c,0x3d,0x2c, - 0x47,0xc6,0x76,0xae,0xeb,0x13,0x9a,0x42,0xd9,0xb0, - 0xab,0xf6,0xa6,0x80,0x7c,0x01,0xe9,0x10,0xb2,0x79, - 0x52,0x3b,0x75,0x9b,0x75,0x65,0x88,0xaa,0xcf,0xbd, - 0x91,0x62,0x0f,0x4d,0x88,0x19,0xb7,0xe5,0x93,0xf8, - 0x45,0xee,0x1e,0x5c,0xc0,0x24,0xfb,0x10,0x48,0x6a, - 0x2c,0xef,0x24,0x70,0xec,0x6c,0xfb,0xc7,0x1d,0x10, - 0xb7,0x9b,0xb0,0x9b,0x1c,0xb8,0x82,0xa3,0x72,0x6a, - 0x25,0x41,0x0b,0xf1,0xad,0x75,0x42,0x08,0x87,0x1a, - 0x09,0x42,0x32,0x84,0x1e,0x5f,0xda,0xab,0xa7,0x36, - 0x90,0x83,0x70,0x53,0xf5,0x0c,0xa4,0xc9,0x03,0xf7, - 0x30,0x4a,0xfd,0x83,0xc5,0xc9,0x9b,0x5a,0x33,0x29, - 0x0e,0x3b,0x59,0x7e,0x57,0x55,0x0e,0x09,0xc4,0x83, - 0x6c,0xdd,0x81,0x94,0xd7,0xeb,0x85,0xd5,0xf0,0xc4, - 0x33,0xba,0x9f,0xcf,0xad,0x8e,0x9d,0xbc,0x9c,0x4c, - 0x62,0x75,0x12,0xc2,0xb9,0x0d,0xe2,0x44,0x24,0x4d, - 0x87,0x04,0x25,0x59,0xc3,0xa8,0x30,0xb6,0x4a,0xd4, - 0x7a,0x28,0x49,0x9a,0x68,0x31,0x04,0x67,0xc2,0x81, - 0x22,0xf6,0x84,0x96,0x2f,0x26,0x65,0x7a,0x6d,0xd7, - 0xc2,0x1a,0x63,0xc1,0x91,0x3a,0xb0,0xd6,0x1e,0x7b, - 0x71,0x22,0x90,0x13,0xe2,0x9a,0x3c,0xbb,0x1c,0x19, - 0xd8,0xb5,0xe8,0x1d,0x9a,0xa5,0x09,0x09,0x21,0x3e, - 0xc4,0x1b,0x6a,0xad,0x3d,0xe4,0xc4,0xa5,0xbd,0xe0, - 0x68,0x01,0xae,0x88,0x4c,0x1c,0x21,0x42,0x76,0xc1, - 0x9b,0x72,0x4d,0x4b,0xb9,0x16,0x3a,0x5b,0x5d,0x07, - 0xe8,0x84,0x7e,0x23,0xc1,0x87,0x98,0x94,0xd3,0x74, - 0x0b,0x55,0xe7,0x3d,0x20,0x92,0xeb,0x78,0x6a,0x25, - 0xa8,0xbd,0xc6,0x46,0xbc,0x8d,0xf4,0x0f,0xc0,0xeb, - 0xc4,0xb6,0x37,0xf4,0xcf,0x49,0xd0,0x6a,0x82,0x22, - 0x5d,0x8b,0xa7,0x57,0x0c,0x9b,0x71,0xe1,0x1e,0x88, - 0x74,0x72,0xa5,0x57,0xe9,0x0d,0xe6,0x3e,0xc4,0x07, - 0x49,0xfc,0x2c,0xe1,0x09,0x1d,0xb8,0xd7,0x87,0x63, - 0xbc,0x5a,0x4c,0x38,0x9b,0x15,0xc7,0x1f,0x4a,0x10, - 0xbe,0x31,0x47,0x25,0xeb,0x8f,0x47,0x75,0x61,0xa6, - 0x6c,0x4e,0x82,0xca,0x09,0xed,0x13,0xb1,0x3d,0x7b, - 0x00,0xab,0xa5,0x09,0x71,0x4d,0x2e,0x33,0xd9,0x15, - 0x54,0x5d,0xcf,0xc5,0x53,0x35,0xd3,0xa4,0x50,0xf4, - 0xbd,0x1a,0x5a,0xa8,0x8f,0xdf,0x91,0xe4,0x98,0x6c, - 0x2c,0x30,0x81,0xd1,0xbf,0xbb,0x8c,0x3d,0x46,0x2a, - 0x9e,0x88,0x93,0xa8,0x49,0x3b,0x99,0xa9,0xa6,0x91, - 0xe6,0x20,0xe4,0xfa,0xa6,0x8d,0x34,0x08,0x3c,0x1e, - 0xd5,0x9a,0x0a,0x48,0xe5,0xa1,0xc9,0x49,0x9a,0x6a, - 0x22,0xe4,0x07,0x44,0x32,0x47,0x6f,0x41,0xb3,0x0f, - 0x08,0xad,0xb1,0x46,0xaa,0x1a,0x23,0x7b,0x0c,0x25, - 0x7f,0x46,0x97,0x0c,0x24,0xf5,0xee,0x29,0x59,0x4a, - 0xbc,0x32,0x47,0x07,0xa0,0x36,0x2d,0x15,0x00,0xaa, - 0x56,0x9c,0x74,0xdf,0xe0,0x0c,0xb1,0xe3,0xf8,0xc3, - 0xc4,0xec,0x99,0xce,0x12,0xf2,0x48,0x74,0x7a,0x42, - 0x2e,0x46,0x24,0x0f,0x3d,0xd7,0xea,0xdc,0x78,0x72, - 0x2d,0x80,0x8d,0x31,0x29,0x5a,0xc4,0x35,0xec,0x22, - 0xb8,0xe7,0xf0,0xa3,0x03,0x24,0xc8,0xc2,0xdb,0x0f, - 0x36,0x01,0xbc,0x72,0x2f,0x28,0xc0,0x74,0x18,0x50, - 0x27,0xd8,0xce,0x7d,0x87,0x29,0xca,0x2b,0x11,0xa1, - 0x75,0x42,0x0b,0x5c,0xe2,0x8b,0x48,0x56,0xbd,0x4a, - 0x75,0x93,0x4c,0x4e,0x1b,0x44,0x5b,0x77,0x8b,0x36, - 0xcf,0xc3,0xfa,0x83,0xda,0x06,0xdf,0xed,0x0f,0x9d, - 0x98,0x7b,0x4c,0x84,0xf5,0xe9,0x3d,0xe3,0xc5,0x55, - 0x02,0x4d,0x3f,0xda,0x49,0x43,0x96,0x7f,0x74,0xd2, - 0xa8,0x21,0x0b,0xe5,0xac,0x29,0x74,0x12,0x4f,0x75, - 0x7d,0x0c,0xd7,0xa1,0x80,0xe0,0x68,0xdb,0x64,0x3a, - 0x19,0xa1,0xba,0x3c,0x21,0x40,0x16,0xb4,0x55,0x0f, - 0x69,0xe5,0xb4,0x80,0x52,0xe4,0xe6,0x4d,0x6d,0x41, - 0x23,0xc6,0x58,0xc3,0xa4,0xc9,0x4d,0xd4,0xac,0x45, - 0x7b,0xa8,0x1f,0x88,0x45,0x22,0xa2,0x84,0x24,0x48, - 0x90,0x2b,0xb7,0x06,0x9c,0xc9,0x27,0xf8,0xde,0xc5, - 0xc0,0xb3,0x81,0xa8,0xef,0x04,0x5e,0x09,0xf2,0xc4, - 0x91,0x71,0xda,0x23,0xa9,0x8d,0x90,0x4c,0x2a,0x83, - 0x4b,0xbb,0xe5,0xbf,0xa4,0xe4,0xf0,0xeb,0xeb,0xeb, - 0xfa,0xf5,0xeb,0xd7,0x21,0x4e,0x8d,0xf0,0x27,0xcf, - 0xd4,0x1a,0xbc,0x8c,0x7c,0x81,0xda,0x57,0x10,0x2a, - 0xef,0xf4,0x83,0x8c,0x67,0xd9,0xcf,0xa4,0x17,0x0d, - 0x53,0xe8,0xde,0xd3,0xc2,0xd3,0x15,0x6d,0x0e,0xb1, - 0x21,0xae,0x93,0xfb,0x33,0x48,0x64,0x4e,0xd2,0x18, - 0x4a,0x28,0x4f,0x5f,0x63,0x86,0x92,0x91,0xba,0x0c, - 0xc7,0x88,0xd0,0x9e,0x84,0xd4,0x53,0xeb,0x2b,0xad, - 0x35,0x45,0x4d,0xa6,0x29,0x47,0xf5,0x91,0x4b,0xed, - 0x42,0x9a,0x5c,0xa3,0x61,0x0e,0x1a,0x82,0x30,0xfb, - 0xea,0x40,0x4b,0xfe,0x24,0xcd,0x29,0x77,0x06,0x40, - 0x0e,0x71,0x20,0x96,0x9c,0x8d,0xf9,0xba,0x9e,0x79, - 0x3f,0xdd,0x04,0xb7,0x19,0x88,0x8f,0x12,0xe0,0x58, - 0xdb,0xe7,0x24,0xa3,0x48,0x65,0xde,0xeb,0x03,0x24, - 0xa8,0x7f,0x22,0x55,0xd1,0xa8,0x67,0x18,0x85,0x74, - 0xe3,0xfb,0x67,0xe3,0x31,0x34,0x20,0x5a,0xe3,0xcf, - 0xa6,0x67,0x37,0x19,0x9c,0xaa,0x6c,0xbd,0x6b,0x5b, - 0x40,0xf5,0x7b,0x52,0xe5,0xb5,0xa9,0x4a,0xb4,0xdd, - 0x43,0xea,0xc6,0x13,0x6c,0x49,0xc9,0xb3,0x1b,0x5f, - 0x24,0x81,0xba,0x54,0x7d,0x92,0xd5,0x88,0x83,0xf3, - 0x8d,0xf0,0xe4,0x99,0x0c,0x01,0x93,0x46,0x47,0x47, - 0x83,0xb2,0xd2,0xbe,0xff,0x1c,0xb3,0x1e,0x0f,0xd9, - 0x6d,0x18,0x34,0xeb,0x6c,0x8c,0x82,0x3b,0xf7,0x4c, - 0x10,0xc2,0x07,0x3a,0xe4,0xc8,0xc1,0xa9,0x50,0x21, - 0x83,0x60,0x81,0xdc,0xf1,0xb0,0x77,0x13,0x26,0xd4, - 0x52,0x70,0x0a,0xd7,0xe6,0xfb,0xbb,0x76,0xd0,0x49, - 0xa8,0x6d,0x40,0xc4,0x8e,0x4b,0x7e,0x86,0xb6,0xdd, - 0x99,0x6c,0x3e,0xdc,0x34,0x24,0xb5,0xc4,0x86,0xd8, - 0x7b,0x52,0x65,0x4c,0x7c,0x14,0xfd,0x3b,0xb2,0x7b, - 0xd1,0x3d,0x74,0x27,0x21,0x54,0x34,0x25,0x64,0x02, - 0xd6,0xc4,0x88,0x2a,0x98,0x91,0xed,0x88,0x54,0x3a, - 0xd4,0xc4,0x1d,0xb6,0x69,0x74,0xbb,0x8f,0xde,0x4f, - 0xed,0x2f,0x2d,0x2a,0x26,0x54,0xc2,0x8d,0x75,0x4f, - 0x49,0xc6,0x44,0xfc,0x4d,0x9d,0x07,0xa7,0x51,0xa7, - 0xb4,0x87,0x64,0x29,0x41,0x2a,0xd3,0x49,0xea,0x65, - 0xa2,0xc4,0x38,0x54,0x68,0xe2,0x37,0x4d,0x9c,0x40, - 0xb5,0xed,0x70,0xfc,0xba,0x9f,0x09,0x5f,0x09,0x04, - 0xd1,0x6d,0x19,0x36,0x02,0x4d,0x04,0x44,0x17,0x58, - 0x07,0x2d,0xbb,0xbf,0x27,0x13,0x53,0x72,0x0b,0x27, - 0x48,0xdc,0x7d,0x2f,0x79,0x9b,0x40,0xf5,0x7e,0x26, - 0x68,0x2e,0xf5,0xe7,0x41,0x89,0xf4,0xa7,0xd2,0xd7, - 0xc3,0x1e,0x20,0xc2,0x13,0x2a,0xd3,0x07,0x04,0xeb, - 0xaa,0x76,0x57,0xd9,0x53,0x12,0x41,0x23,0xe4,0x74, - 0xcf,0x49,0xd8,0x8d,0x7a,0xfd,0x34,0xba,0x0f,0x08, - 0xe1,0xa3,0x9a,0x4e,0x8a,0xac,0xaa,0x18,0xeb,0x94, - 0x9f,0x03,0x82,0x10,0x2d,0x2e,0x2e,0x30,0xef,0xd3, - 0x24,0x8b,0xfc,0x75,0x92,0xd0,0x9b,0x13,0x06,0xd3, - 0x71,0xf8,0x05,0x69,0xfc,0xed,0xfa,0xe9,0x1a,0x68, - 0x0f,0xb5,0x01,0x88,0xa3,0xc9,0x5a,0x82,0x9f,0x37, - 0x85,0x52,0x9a,0x60,0xfc,0x44,0xff,0x87,0x88,0xdb, - 0xbd,0x6d,0xa6,0x5c,0x39,0xf7,0x8f,0x23,0x02,0x4b, - 0x8c,0x38,0x4e,0xc0,0x75,0x92,0x38,0x98,0xc8,0xa1, - 0xb7,0x55,0xc4,0xe4,0x62,0x7f,0xb1,0x05,0xc5,0x63, - 0xef,0x01,0xc2,0x16,0x27,0x24,0x5d,0x51,0xd8,0xbf, - 0x14,0xa6,0x7d,0x8e,0x2b,0x20,0x5d,0x8b,0xce,0x85, - 0x94,0xa4,0x81,0xe4,0xee,0x4b,0xf5,0x90,0xe0,0xbc, - 0x39,0x9b,0xb6,0x8c,0xdb,0x77,0x9a,0x0c,0xa6,0x8e, - 0xc4,0x27,0xfc,0xa3,0xc1,0xf2,0x22,0x5e,0x5b,0x1a, - 0x07,0x4f,0x88,0x57,0x40,0x7d,0xcf,0x66,0x50,0xa5, - 0x27,0x7c,0xc4,0xa5,0x0b,0x48,0x22,0xae,0x3b,0xa5, - 0x28,0x98,0x33,0x9a,0x78,0x98,0xab,0x44,0x9b,0x64, - 0x03,0x92,0x71,0xeb,0x6f,0x37,0x81,0xe0,0xe0,0xe6, - 0xde,0x36,0x48,0xae,0xe3,0x0a,0xed,0xc2,0xe4,0xcf, - 0x03,0xbe,0x26,0xdb,0x8d,0xa9,0x85,0xe6,0xda,0x4a, - 0xf7,0x74,0x8a,0x79,0x88,0x35,0x7d,0xa6,0x6b,0xdd, - 0x0c,0x1a,0x46,0xb6,0xcd,0x13,0x26,0x05,0x8a,0xa4, - 0xf2,0x4d,0xe5,0x5f,0xa9,0xad,0x48,0x6d,0xac,0x81, - 0x68,0xf6,0xb0,0x8f,0x50,0x21,0x43,0xe5,0x14,0x69, - 0x1b,0xc6,0xb5,0x04,0xa9,0x4d,0xe7,0x84,0x13,0xf5, - 0x5d,0x41,0x52,0x50,0x64,0xe9,0x70,0x79,0x91,0x4c, - 0x6b,0x8b,0x31,0xb5,0xd0,0xda,0xc9,0x52,0x24,0xd6, - 0xa9,0x6d,0x3f,0x4d,0xa0,0x2e,0x98,0xde,0x92,0xca, - 0xbd,0xcc,0xf4,0x99,0x06,0xd2,0x4a,0xd5,0x95,0xc0, - 0xf3,0x95,0x02,0x82,0x0b,0xbc,0xdf,0xdf,0x5f,0xa4, - 0xf9,0xe1,0x84,0xd6,0xb4,0x60,0x20,0x62,0xa2,0xb6, - 0xdf,0xa6,0x3e,0x3f,0x59,0xe6,0x50,0x82,0x6d,0xe2, - 0xd2,0x49,0x16,0x37,0x9f,0xda,0x61,0xa8,0xd0,0x27, - 0x25,0x3a,0x81,0x1f,0x12,0x5d,0xe6,0x6f,0x82,0x36, - 0xb5,0xb2,0xa0,0x65,0xf7,0x48,0x18,0x84,0xe8,0x3d, - 0xf9,0x69,0x1d,0x7a,0xa7,0x2e,0x41,0x77,0xc3,0x26, - 0xc0,0x8b,0x41,0x7f,0xaf,0xde,0xbe,0x4c,0xbf,0xe3, - 0x88,0xaa,0x8e,0xc7,0x67,0x0e,0x6b,0x2a,0x5a,0x0f, - 0x48,0xab,0x9c,0x09,0x05,0x75,0x5d,0x0b,0x9d,0x78, - 0x4a,0x02,0xb3,0x0e,0x1d,0x26,0x34,0x8b,0x5a,0x92, - 0x52,0x74,0x10,0xfd,0xc0,0x16,0x48,0x2e,0x89,0xa3, - 0x56,0xb1,0x41,0x58,0xa3,0x3e,0x0f,0x0d,0x20,0x91, - 0x73,0x3d,0x70,0x7f,0x37,0x1d,0xa3,0x88,0x84,0x83, - 0xac,0xce,0x09,0xc3,0x12,0xd8,0x26,0xef,0x9f,0xf3, - 0x9b,0x0e,0x92,0xbe,0x71,0x52,0x1f,0x3e,0x29,0x93, - 0x76,0x85,0x63,0xc3,0x83,0x40,0xd5,0x60,0x28,0x1b, - 0x2a,0xf1,0x86,0xb6,0x5e,0x44,0x66,0xd1,0xfc,0x5c, - 0x63,0x5a,0x28,0xee,0x60,0x4e,0x41,0x55,0x47,0xb2, - 0x87,0xec,0xf5,0xed,0xfe,0x9c,0x17,0x8c,0xf4,0x91, - 0x8b,0x10,0x03,0x97,0x44,0x11,0x67,0x6b,0xeb,0x2d, - 0x13,0xb2,0x7b,0x97,0x74,0x39,0xa5,0x6a,0xfb,0x3c, - 0x06,0x8f,0x2c,0xe4,0x26,0x85,0xe7,0x79,0xae,0xeb, - 0x2a,0x95,0x45,0x70,0x0a,0xda,0x13,0x07,0xcd,0xf4, - 0xee,0xdf,0x24,0x19,0x8c,0x26,0x52,0x25,0xf3,0x3f, - 0x5a,0xc3,0xda,0x2f,0xff,0x3e,0x24,0x6b,0x4a,0x18, - 0x7a,0xd2,0x44,0xcf,0x07,0x8a,0x8c,0x8e,0x88,0xd4, - 0x84,0x28,0x6d,0xe4,0xe5,0x3b,0x17,0x61,0xd2,0xfa, - 0xa2,0x35,0x4b,0xa8,0x4a,0x2a,0x8c,0x08,0x05,0x9d, - 0x12,0x20,0x42,0x30,0xc3,0x64,0x54,0x2a,0xbe,0x4e, - 0x2a,0x3a,0x36,0x26,0xbe,0x70,0x0f,0x27,0x8d,0xd2, - 0xdf,0x68,0x3d,0x71,0xe0,0x1c,0x92,0xb1,0xb0,0xfa, - 0xb1,0x23,0xd9,0xd4,0x36,0x4a,0xc9,0x6a,0x1a,0x3c, - 0x20,0x54,0x3d,0x5d,0x7b,0x1a,0x2b,0xbf,0x9a,0x79, - 0xa9,0xbe,0x1b,0xe0,0xf9,0x1c,0x92,0x2d,0x31,0x14, - 0x84,0x03,0x07,0xf7,0x31,0x71,0x97,0x06,0x71,0x4e, - 0x42,0xa0,0x28,0xa1,0x4a,0x4a,0xd3,0xaa,0x07,0x97, - 0x10,0x49,0x4d,0xe2,0x16,0xc0,0xc2,0x99,0x92,0xb7, - 0x89,0xc0,0x9c,0xda,0x54,0x84,0xce,0x75,0xe1,0x59, - 0x72,0x8f,0x70,0xdd,0x8e,0xa1,0x33,0x81,0xc9,0xd6, - 0x39,0xe7,0x7a,0x2d,0x0e,0x72,0x0b,0x7f,0x4d,0x4e, - 0xe7,0x44,0x9a,0x74,0x0f,0xc5,0xe8,0x3d,0xc4,0x2c, - 0xd0,0xe1,0xc2,0x34,0x95,0x30,0xc9,0xeb,0xeb,0xc8, - 0xdd,0x44,0x22,0x0b,0x7c,0x8e,0xa8,0x9e,0x4d,0xe2, - 0x78,0x94,0xe8,0x0c,0xd0,0x9f,0xeb,0xd9,0x1e,0x80, - 0x7c,0xdd,0x68,0xfe,0x09,0xce,0xe5,0xf8,0x7d,0x1b, - 0x91,0xc7,0x44,0xda,0xa3,0xfe,0x76,0x9a,0x22,0x71, - 0xad,0x0e,0xc7,0x3d,0xd0,0x6a,0x8d,0xc4,0xce,0x42, - 0x92,0x72,0xfa,0x98,0xbd,0x4e,0x11,0x5d,0x4c,0xf2, - 0x7b,0xbc,0xab,0x81,0xf7,0xf3,0xb6,0xd9,0x61,0xba, - 0xef,0xf1,0x7e,0x1c,0x4f,0xc5,0xb9,0xcd,0x27,0xd7, - 0x73,0x08,0x8a,0xc7,0xb5,0x03,0x14,0x4e,0xee,0x2a, - 0xe1,0x53,0xb0,0x0d,0x53,0x53,0x56,0x9d,0x76,0x1a, - 0xbb,0x4f,0x45,0xcf,0xd4,0x22,0x1b,0x5a,0x7e,0x47, - 0x5d,0xd3,0x53,0xd0,0x76,0xbc,0xa2,0x94,0x20,0x99, - 0x35,0x7e,0xa6,0x83,0x82,0x3e,0xd7,0x55,0xe2,0xd2, - 0xb2,0xb5,0x09,0x47,0x6a,0xf3,0xe8,0xfb,0x9a,0xda, - 0x65,0xd4,0xaa,0xea,0xf4,0x09,0x23,0x60,0x79,0x26, - 0xf5,0x70,0x42,0xf2,0xdc,0x5e,0x75,0xfc,0xd4,0x74, - 0xce,0x84,0x02,0xe2,0x71,0xdf,0x4e,0x4d,0x1c,0xd6, - 0xd1,0xf9,0xa0,0x7d,0x6b,0x7f,0xd6,0x4c,0x3c,0x63, - 0xf2,0xac,0x42,0xbf,0xe4,0xa6,0x4e,0x28,0x4d,0x58, - 0xc7,0xc7,0x81,0x1b,0x24,0xb8,0xe8,0xf6,0x72,0x6f, - 0x53,0xca,0x99,0x7f,0x48,0x9b,0x8a,0x50,0x45,0x42, - 0xd9,0x27,0x54,0xdc,0xed,0x01,0x4a,0x94,0x1f,0xeb, - 0x89,0x02,0x4f,0x37,0xc6,0xec,0x0f,0x37,0x05,0x55, - 0xd0,0x4a,0x08,0xfa,0x55,0x07,0x21,0xc4,0x4d,0x0f, - 0x75,0x22,0x07,0xd2,0x81,0xaa,0x24,0x3a,0x32,0x71, - 0x05,0xf8,0xfb,0x4c,0x41,0xd7,0xdd,0x4b,0x32,0x41, - 0xa5,0x7e,0x72,0xea,0x63,0x43,0xa0,0x58,0x7d,0x46, - 0xb2,0xa7,0xb8,0x82,0x54,0x81,0xd9,0x44,0x07,0x0e, - 0x33,0x82,0xe6,0x4f,0xf2,0xa6,0x82,0x09,0x96,0xa4, - 0xff,0x41,0x95,0xca,0xd9,0x12,0x22,0xcd,0x66,0x3e, - 0xe1,0x20,0x3c,0x0e,0x5e,0x15,0x74,0xe5,0x98,0xe4, - 0x49,0xd1,0x4f,0xe2,0x30,0x38,0xe3,0xd4,0x13,0xb8, - 0x1d,0x9a,0xc0,0xfd,0xfc,0xbc,0x0b,0x98,0xc9,0x1f, - 0xcc,0x8c,0xa2,0x47,0xa5,0xda,0xcd,0x24,0x28,0x55, - 0x8b,0x9f,0x70,0x89,0x5c,0x8b,0x68,0x22,0xd5,0x03, - 0x0f,0xe9,0x18,0xd3,0xd6,0x55,0xb1,0x26,0xc8,0xc8, - 0xa1,0x60,0xed,0x86,0x17,0x9c,0xda,0x32,0x4d,0xc5, - 0xb8,0x78,0x61,0xda,0x6c,0xa8,0x30,0xad,0x87,0x33, - 0x4c,0x0b,0xa6,0x62,0xf5,0xb8,0x69,0x20,0x37,0x52, - 0xed,0x0e,0x5d,0x67,0x43,0x43,0x83,0x35,0x97,0x21, - 0x88,0xbb,0x04,0x4c,0x84,0x6a,0x6d,0x01,0x40,0x62, - 0x8a,0x81,0x02,0x70,0x89,0x81,0xed,0x5b,0x22,0x40, - 0xc4,0xf2,0x89,0xa7,0xb5,0xb5,0x7a,0xb9,0xb9,0x4a, - 0x94,0x04,0xc8,0x99,0x7a,0xb4,0x10,0x49,0x85,0x2d, - 0xb5,0x74,0x49,0x70,0x13,0x4c,0xcd,0x6d,0xeb,0x31, - 0x25,0x7a,0x20,0xd3,0xf1,0xf8,0x9f,0x9a,0xa8,0xa6, - 0xc4,0x77,0x42,0xb4,0x80,0xe4,0x7c,0x1c,0xa0,0x42, - 0x49,0xe0,0x6f,0x52,0xaf,0xed,0x5c,0x01,0x85,0xa8, - 0x20,0xe0,0x9d,0xc9,0x50,0x51,0x37,0xae,0x3a,0x2c, - 0xa7,0xde,0x6a,0x0a,0x4e,0x30,0xfd,0x60,0x5b,0x2b, - 0x49,0xf5,0xd2,0xb5,0x0b,0x54,0xb1,0x39,0x71,0x76, - 0xa0,0xf5,0x73,0x6d,0xf8,0x48,0x69,0x4c,0xf9,0x7e, - 0x17,0x7d,0x62,0x47,0xdb,0x32,0xa1,0x5a,0xfc,0xb9, - 0x36,0xa7,0x7b,0xe4,0xc6,0xce,0x27,0x32,0xaa,0x26, - 0x6e,0xaf,0xd7,0xab,0x60,0xc3,0x14,0x8c,0xdb,0x52, - 0x6b,0xf0,0x71,0x3d,0xf7,0x9f,0xeb,0x77,0xd0,0x74, - 0x90,0x7b,0x1f,0x21,0xd0,0x58,0xee,0xd6,0x77,0x80, - 0xaa,0x90,0x74,0x3e,0x4c,0x82,0x5d,0xbb,0x4f,0xdb, - 0xa9,0x5a,0x31,0x2b,0x7f,0xc8,0xc1,0xf8,0xa9,0x7d, - 0x16,0x44,0x3c,0xbb,0xd1,0x69,0x6d,0x5a,0x45,0xa6, - 0xbd,0xad,0xc9,0x6d,0xd1,0x73,0x4f,0xc9,0x88,0xde, - 0x93,0x8a,0x21,0xba,0x83,0x9a,0x82,0xb5,0xbb,0xef, - 0x60,0x60,0x7c,0x28,0x31,0xa1,0xfd,0xd9,0xf7,0xbf, - 0x1c,0xd8,0x2b,0x7f,0xab,0x54,0xe0,0xb9,0x80,0xae, - 0x86,0xa2,0xee,0x67,0x53,0x91,0x66,0xd6,0x48,0x32, - 0x43,0x3e,0xa9,0xc5,0x9d,0xfc,0xd1,0xfa,0x81,0x9d, - 0x90,0x53,0xd7,0x2a,0x9b,0x26,0x3a,0xa5,0x90,0x40, - 0xa3,0x4b,0x68,0x07,0xd1,0x90,0xc6,0x21,0xd5,0x79, - 0xd7,0x76,0x4d,0xe2,0x7a,0xa6,0xc5,0x74,0x48,0x7d, - 0x9d,0x0a,0x31,0xe2,0x7b,0xa6,0xd1,0xfb,0x01,0x59, - 0x3f,0x89,0x1a,0x40,0xdd,0x13,0xb2,0x1a,0xa2,0xf6, - 0x63,0xa0,0x56,0xd8,0xc4,0x91,0x14,0xcc,0x5b,0x6c, - 0x39,0x41,0x68,0xd6,0x8d,0xad,0x9f,0x0d,0x5d,0xc3, - 0x49,0x66,0xa4,0xf3,0xfe,0xad,0x95,0xbc,0x35,0xca, - 0x5c,0x78,0xba,0x44,0x81,0xa2,0xa9,0x37,0x2a,0x02, - 0x82,0x07,0x0e,0xe3,0x33,0x41,0x9a,0x34,0xea,0xa7, - 0xf0,0xaf,0x13,0xd5,0x73,0x7d,0x57,0xad,0x0e,0xdb, - 0xa8,0xb1,0x5d,0x74,0xe9,0xe5,0x12,0xd2,0xe5,0x5a, - 0x69,0x12,0x0c,0x0f,0x41,0x90,0x60,0x39,0xf2,0x10, - 0xde,0x72,0x8b,0x40,0xaa,0xa0,0xde,0x7f,0x45,0xb1, - 0x42,0x97,0xd5,0x3b,0x44,0x43,0xd5,0x95,0x89,0x34, - 0x97,0x0e,0x40,0xaa,0x40,0x08,0x99,0x72,0xa8,0xc6, - 0x43,0xf9,0xd3,0xa0,0x94,0xc0,0x73,0xb3,0xd7,0xde, - 0x13,0xd0,0xa1,0x55,0x3b,0x8a,0x14,0x0e,0x95,0x30, - 0xf9,0x73,0x21,0xf4,0x0b,0x4a,0xb1,0x6f,0x62,0x7d, - 0x6a,0x8a,0x98,0xbe,0xdb,0x88,0xef,0x9d,0xe4,0x13, - 0x96,0x5a,0x47,0x13,0xd4,0x3f,0xa8,0x68,0x63,0x3b, - 0xeb,0x26,0x8e,0xea,0xff,0xd2,0xda,0x22,0x14,0x55, - 0xfe,0xff,0x31,0x36,0x9f,0xf6,0x92,0x24,0xeb,0x67, - 0x68,0x9f,0x8d,0x6d,0x76,0xe7,0xb1,0x65,0x50,0xe3, - 0x37,0xa4,0x25,0x7c,0xd6,0xb4,0xdf,0x0e,0x88,0x04, - 0xda,0xd6,0x6e,0x52,0x9b,0x4e,0x87,0x0d,0xed,0x57, - 0xf7,0x59,0xc9,0xcb,0x6c,0xf0,0xee,0x1a,0xcf,0x8e, - 0x14,0x3f,0x26,0xf3,0x4d,0x90,0x6d,0x38,0x89,0xba, - 0x31,0xc9,0x11,0x84,0x75,0x7a,0xd2,0xd4,0xd5,0x90, - 0xd0,0xda,0x33,0x33,0x49,0x94,0xb8,0xa2,0xc8,0x9d, - 0x55,0xee,0xbb,0xb5,0x9d,0x6d,0xce,0x88,0xe8,0xef, - 0xe7,0x8a,0x25,0x42,0xdb,0x34,0x49,0x33,0x46,0xaf, - 0xae,0x0d,0x6f,0x2d,0x3d,0x7e,0x2b,0x1a,0x23,0x0b, - 0xa9,0x52,0x4b,0xc8,0x2c,0xb4,0x1f,0xa4,0xc1,0x55, - 0xc4,0xa9,0x87,0x9f,0x50,0x19,0xe2,0x0f,0xf4,0x5e, - 0xa6,0x43,0x08,0x3a,0x82,0x43,0xcc,0x79,0xfd,0x3b, - 0x58,0xb0,0x95,0x48,0xa2,0xd2,0xc6,0xa9,0xe9,0x79, - 0x25,0xf8,0xb0,0x7f,0x9f,0x43,0x38,0xc8,0xa3,0xcb, - 0xa1,0x2f,0xa6,0x95,0x54,0xb0,0x41,0x8a,0xd0,0x18, - 0x58,0x7c,0xe5,0x10,0x83,0xd7,0xeb,0x55,0xbd,0x22, - 0x77,0x62,0x8d,0x6e,0xd2,0x8b,0xae,0xd3,0xac,0x31, - 0x4b,0x2c,0x6f,0x30,0x71,0x01,0xef,0xa7,0x60,0x9c, - 0xf3,0x4d,0x6c,0xd0,0x88,0x66,0xbd,0x79,0x74,0xb9, - 0x04,0x5e,0x51,0x1c,0x83,0x28,0x1c,0x45,0x62,0x4c, - 0xb2,0x72,0x57,0xac,0x96,0xdc,0xee,0x60,0xee,0xef, - 0xeb,0xac,0xa9,0x1d,0xdb,0x51,0x2d,0x49,0x98,0x6a, - 0xf2,0x43,0xa2,0x09,0x21,0x6a,0x35,0x4c,0x2a,0xac, - 0xb2,0x6f,0x2a,0x89,0xed,0x01,0x42,0x10,0x93,0x17, - 0x50,0x46,0x8f,0x08,0xa6,0x23,0xc7,0x26,0xb2,0x37, - 0x71,0x0b,0x12,0x3a,0xed,0xda,0x5d,0xfd,0xbb,0xf5, - 0x39,0x6b,0x25,0x1d,0x62,0x96,0x1d,0x53,0x97,0xcf, - 0x4b,0x2d,0x81,0x33,0x5c,0x6f,0x34,0x11,0x9e,0x90, - 0x26,0x92,0xb8,0x70,0x22,0x85,0xc4,0xad,0xdb,0x10, - 0x5b,0xa7,0x83,0x3c,0x4c,0xe7,0x1e,0xd2,0x93,0xd3, - 0xb6,0xb4,0x6b,0x03,0x92,0xea,0x7c,0x90,0x2c,0x41, - 0xd2,0x37,0x21,0x9d,0x66,0x48,0xe0,0x24,0x34,0xa6, - 0xa3,0x4d,0x61,0x98,0x00,0xaf,0x99,0xce,0x2c,0x27, - 0x8e,0x49,0xad,0x29,0x42,0x9c,0xe8,0xde,0x81,0x4e, - 0x73,0x92,0x73,0x03,0x0c,0x4e,0x9c,0x0d,0x2f,0xb0, - 0x5f,0xc3,0xef,0x69,0x24,0x34,0xb4,0x10,0x2a,0x09, - 0x0d,0xb9,0x03,0x81,0xc8,0x4a,0x9b,0xc9,0x8d,0x8d, - 0xc9,0xa6,0xdb,0x5c,0xce,0xe4,0x53,0xdb,0x23,0x2d, - 0x43,0x7d,0x53,0x6c,0x76,0x49,0x8c,0x1b,0x3d,0x5f, - 0x5c,0xff,0x63,0x0c,0x5c,0x27,0xa9,0x12,0x43,0xbf, - 0x27,0xa4,0xa4,0x92,0xbc,0x10,0x6d,0xc4,0xa9,0xbc, - 0x7b,0x12,0xce,0x4c,0x4c,0x3c,0x46,0xf1,0x55,0x6a, - 0xc0,0x64,0xd9,0x4e,0xa1,0xdb,0xb6,0xc9,0xb4,0x1d, - 0x46,0x2d,0x2f,0x97,0x90,0x92,0x77,0x1d,0xb4,0x15, - 0xdf,0x46,0xc7,0xd3,0x7b,0x48,0xed,0xdd,0x20,0xc1, - 0x70,0xf4,0xb3,0x75,0x64,0xd9,0xbd,0x27,0x93,0x94, - 0xdb,0xb1,0xfa,0xa0,0x97,0xf5,0x18,0x89,0x27,0xfe, - 0x8a,0x31,0x0c,0xee,0x6d,0x82,0x4a,0x6d,0xd8,0x69, - 0xda,0xd2,0xb5,0xb7,0x52,0xcb,0x48,0x2b,0xfb,0x94, - 0x28,0xf5,0xca,0xd2,0xf1,0xe8,0x52,0x4b,0x6b,0x33, - 0x66,0x9e,0xc8,0xb4,0x8b,0xe4,0xf2,0x4c,0xcf,0x24, - 0x1d,0x02,0xa9,0xed,0xad,0x09,0xb9,0x4b,0x8e,0xfa, - 0x68,0x7d,0x72,0x91,0x87,0xd8,0x78,0x02,0xd7,0xc8, - 0x1e,0x64,0x8e,0xf3,0xe3,0x0e,0x78,0x52,0x68,0x4e, - 0x3e,0x51,0x0e,0x9d,0x26,0xa1,0xc5,0xe9,0xf0,0x85, - 0x62,0x0b,0x11,0x5f,0xc3,0xf3,0x72,0xd7,0x73,0x92, - 0xce,0x95,0x12,0x80,0xb7,0xa6,0xbf,0x89,0x31,0xb2, - 0xd9,0x73,0x09,0x55,0xbb,0x9a,0x2c,0x01,0x01,0x1d, - 0x34,0x70,0xa3,0xa6,0xc0,0x24,0x59,0x33,0x25,0xa5, - 0xe9,0x4c,0x4b,0x89,0x6a,0x48,0x68,0x49,0xe9,0xfb, - 0x0a,0xf6,0x41,0x58,0xa4,0xbd,0xfe,0xfd,0x79,0x86, - 0xd4,0x5c,0x56,0x99,0x20,0x39,0xea,0x61,0x43,0x4b, - 0xe1,0x53,0x68,0x12,0x05,0xf4,0x26,0x36,0x38,0x4d, - 0xc6,0xb8,0xf1,0xbb,0xa4,0xab,0xb0,0x0d,0x72,0x8a, - 0xb4,0x18,0x2f,0x2e,0xfa,0x1f,0xf6,0xdc,0x15,0x05, - 0x73,0xc4,0x31,0xed,0x55,0xdf,0x07,0x53,0x17,0x0d, - 0x4c,0xa6,0xa8,0xca,0xcd,0x4a,0xa4,0x55,0x32,0xe8, - 0xeb,0x07,0x17,0x41,0x9b,0xa4,0x34,0xeb,0xaa,0xa2, - 0xc9,0xdb,0x6d,0x80,0xd7,0xb1,0xe2,0xd5,0xdf,0x25, - 0x08,0x95,0xb8,0x1a,0xd2,0x86,0x38,0x24,0xba,0xd9, - 0xbe,0xc3,0xbe,0xdb,0xde,0x8e,0xec,0x6d,0x2b,0x4a, - 0xc0,0x0d,0x7f,0x20,0x0e,0x03,0x0c,0x5a,0x3c,0x3f, - 0x26,0xa0,0xe1,0xda,0x57,0x05,0x12,0x11,0x96,0xa7, - 0xb5,0x3c,0xb5,0x1c,0xa6,0xcf,0x9b,0x46,0xe9,0x25, - 0x19,0x3f,0x57,0x10,0xb1,0xa3,0xd6,0xa2,0x04,0x61, - 0x9c,0x96,0x72,0xea,0xf2,0x97,0x11,0xf1,0x04,0xb4, - 0xea,0x0d,0x7d,0x70,0x6d,0xaf,0xde,0x9e,0x85,0x98, - 0x87,0xe4,0x79,0xad,0xba,0xc9,0x2b,0x2e,0xa9,0xa0, - 0x2f,0xd0,0x3d,0xbb,0xc7,0xd3,0xf8,0xb5,0x59,0x3f, - 0x07,0xda,0x1a,0xc7,0xbd,0xf3,0x8b,0xc7,0xca,0x0f, - 0x1c,0xc2,0xc7,0x21,0x0a,0xe9,0x3b,0x9d,0x70,0x1f, - 0xc4,0x02,0x6c,0xdb,0x12,0x87,0x8a,0x0a,0x01,0x3d, - 0x2b,0x5d,0xc2,0x4b,0xbf,0x07,0x9f,0x85,0xeb,0x96, - 0x10,0xe0,0x64,0x22,0xec,0x12,0xba,0xad,0xdd,0x15, - 0x11,0x9f,0xa7,0x78,0xe3,0xd0,0xe1,0x0f,0xa7,0xb6, - 0xff,0x45,0xb6,0x74,0xd2,0x44,0xc6,0x68,0xcf,0x04, - 0x3d,0x26,0x8e,0x90,0x7b,0xa0,0x1b,0x73,0x34,0x0d, - 0xa0,0x8e,0x2c,0x3d,0x09,0x9f,0x91,0x75,0x83,0x6e, - 0x0c,0x23,0x4d,0x7f,0x9c,0x81,0xe2,0xa4,0xe2,0xab, - 0xde,0x58,0x14,0xa4,0xcf,0x39,0xd7,0x9f,0x3f,0x7f, - 0xb0,0x9a,0x72,0x0b,0x55,0xd5,0xaf,0xdd,0xb4,0x85, - 0xfe,0x7e,0xe3,0x46,0xe0,0x34,0x90,0x23,0xe1,0x89, - 0xc1,0x67,0x4c,0x50,0x61,0x6a,0x80,0xc8,0x7c,0x87, - 0x2a,0xde,0x10,0x70,0xdf,0xa6,0xf6,0x9c,0x09,0xa5, - 0x41,0x0b,0x8e,0xe3,0x52,0x39,0xbe,0x84,0xbb,0x76, - 0xe7,0x96,0x2e,0xc4,0xce,0x93,0x38,0x6f,0x1d,0x12, - 0x0f,0x16,0x12,0x47,0xd7,0x88,0x12,0xa6,0x9b,0xcd, - 0xc9,0x21,0x0e,0x89,0xfb,0xee,0xc6,0xd5,0x19,0xcd, - 0x09,0xa9,0xa5,0xd5,0xf9,0x3e,0xfd,0xf3,0x36,0x6d, - 0xdc,0x69,0x1a,0x2c,0xc5,0x02,0x8a,0x0d,0xc9,0xa4, - 0x39,0x71,0x88,0x2e,0x71,0xaa,0xd7,0x35,0x4e,0x2d, - 0xb6,0x8e,0xe0,0x49,0xfb,0x03,0x27,0x0f,0x61,0xb2, - 0x06,0x13,0x25,0xf3,0x1e,0xd1,0x4c,0x37,0x7d,0x9e, - 0xb1,0xbd,0x39,0x0b,0x2e,0xd7,0xe3,0xd9,0xdd,0xdc, - 0x46,0x8d,0x25,0xba,0x66,0x83,0xaf,0xd3,0x81,0x24, - 0x36,0xb6,0xc4,0x88,0x7f,0xe5,0x62,0x7c,0xb0,0xb6, - 0x39,0x01,0xf1,0xb6,0xad,0x43,0xd2,0xd5,0x01,0xfe, - 0xc8,0x63,0x32,0xda,0x9d,0x99,0xca,0x1d,0x34,0x6b, - 0xd1,0x79,0x25,0x22,0x62,0x11,0x6c,0x43,0x1e,0xcf, - 0xd0,0xad,0xfd,0x1e,0x3b,0xa7,0xe2,0x11,0xce,0x53, - 0xe2,0xb2,0x91,0xfa,0xf4,0x99,0x8a,0x5c,0x77,0x26, - 0x4c,0x20,0x42,0xfa,0x47,0x79,0x45,0x84,0xaa,0x93, - 0xad,0xd3,0xcb,0xc9,0xee,0x6f,0xbe,0x78,0xe8,0x0f, - 0x3f,0x0e,0x18,0x4d,0x0c,0xa4,0x3d,0x45,0xca,0xab, - 0x47,0x16,0x9d,0x4d,0x6a,0x7a,0x0b,0x0b,0x82,0xf1, - 0x49,0xe8,0x05,0xd9,0x6d,0xe8,0xe1,0xb2,0xa9,0x8c, - 0xe9,0x90,0x51,0xae,0x80,0x04,0xcd,0x33,0x04,0xf2, - 0xb7,0x45,0x09,0x04,0xed,0x43,0x01,0xfd,0x0e,0x70, - 0x4a,0x6a,0x4b,0x9a,0x41,0x54,0xf8,0x51,0x72,0xa9, - 0x0b,0xab,0xff,0x5c,0xab,0x5a,0x6c,0xd2,0xa4,0x41, - 0xc9,0x71,0x0a,0xa6,0xbf,0xd3,0x7b,0xbe,0x2d,0x06, - 0x82,0x8b,0xfa,0xe3,0x59,0xb7,0x44,0xeb,0x6c,0xd6, - 0xfe,0x9d,0x68,0xc2,0xd4,0xca,0x99,0x0c,0x7e,0xcf, - 0xb3,0x4f,0x7a,0xa9,0x16,0x51,0x4b,0xd6,0x1f,0x3c, - 0x01,0x25,0xae,0xea,0x38,0xe8,0x95,0xa5,0x02,0xe2, - 0x5a,0x76,0x3d,0xf9,0x9e,0x50,0x38,0x02,0xac,0xe3, - 0xe7,0x39,0xbd,0x93,0xad,0x93,0xf4,0xd4,0xff,0x57, - 0x04,0xec,0x12,0x97,0x79,0x42,0x71,0x52,0x21,0x66, - 0x90,0x58,0xab,0x93,0xe4,0xd6,0x8e,0x1c,0x04,0x2b, - 0xb9,0x8c,0xae,0xe3,0x44,0x28,0x18,0x1d,0xa0,0xee, - 0x73,0x06,0xeb,0xa1,0x43,0x23,0xd0,0x17,0x78,0xe3, - 0x4d,0xd5,0xb8,0x4b,0x1a,0x12,0x4f,0x48,0x13,0x05, - 0x97,0x84,0x90,0xc9,0x70,0xe2,0xaa,0x69,0x3c,0x0f, - 0xce,0xed,0xc4,0x31,0x7d,0x74,0x10,0x6e,0xbf,0xb3, - 0x8d,0xc1,0x2f,0xa1,0x2b,0x3d,0xb6,0x2d,0xd7,0xf8, - 0x27,0x43,0x33,0xb1,0xa5,0x94,0x86,0x6c,0x1c,0x27, - 0xad,0x17,0xbf,0x7d,0xaa,0x8b,0x90,0x68,0x3a,0x3b, - 0x54,0x69,0x7a,0x03,0x9c,0xb8,0xf7,0xe3,0xf8,0x94, - 0x69,0x3d,0xd2,0x64,0x79,0x42,0x90,0x5e,0x09,0x8e, - 0xa4,0xd6,0xc5,0x22,0x60,0x1e,0x6d,0x7f,0x10,0x12, - 0x44,0x3a,0x0b,0xbd,0xea,0x77,0xc2,0x51,0x72,0x60, - 0xa1,0x82,0xf3,0x60,0x3a,0x7a,0xa0,0xc5,0x87,0x28, - 0x41,0xd2,0xa9,0x21,0xb1,0x32,0x82,0x48,0x17,0x6d, - 0x01,0x54,0x50,0xa5,0x97,0x9a,0xa4,0xd5,0x25,0xc9, - 0xb4,0x09,0x6c,0xf7,0x80,0x31,0x46,0x99,0x23,0xb9, - 0x6d,0x83,0x04,0x4d,0x3d,0x5c,0xf3,0xac,0x4f,0xa8, - 0x5a,0x6c,0x62,0x4a,0x5e,0x6f,0x9a,0x3c,0xe9,0x61, - 0x40,0x82,0x62,0x53,0x92,0x07,0x87,0xc6,0x49,0xc4, - 0x79,0x35,0xd9,0x74,0x36,0x13,0xca,0x0d,0x71,0x2d, - 0x80,0x44,0xe6,0xef,0x07,0xf9,0xfd,0x6e,0xa7,0x11, - 0xe0,0xd4,0x6e,0x04,0x44,0x82,0xfe,0x97,0xda,0xbc, - 0x51,0x54,0xd3,0x05,0xbf,0x8e,0x48,0xf5,0x7f,0x68, - 0x0a,0x29,0xe9,0x9a,0xb8,0xbd,0xd8,0x62,0xcc,0x03, - 0x61,0x4c,0xa3,0xf9,0x3d,0x19,0x50,0x3f,0xaa,0x20, - 0xd9,0xf1,0x68,0x5b,0xea,0x21,0xd4,0xf5,0x99,0xa8, - 0x85,0xa9,0x48,0x2f,0x04,0xff,0xe3,0x8a,0xc6,0x1e, - 0x07,0x87,0xc2,0xf7,0xa4,0x49,0xaf,0xd0,0xf6,0xc3, - 0x42,0x70,0xf2,0x2c,0xdb,0xbc,0xb3,0xbb,0xd0,0xd9, - 0x14,0xe8,0xba,0x21,0x93,0x8f,0x22,0x4d,0x8e,0x51, - 0xe1,0x37,0xc4,0xf1,0x33,0xd9,0x89,0x80,0x13,0x7b, - 0x4c,0x70,0x28,0x29,0x74,0x26,0xd0,0x93,0x6e,0x14, - 0xe8,0xcc,0x9d,0xc4,0x7b,0xdb,0xb6,0x40,0x09,0x51, - 0x23,0x5a,0x49,0xd7,0x8e,0x72,0x08,0x26,0x9d,0x35, - 0xee,0xb3,0x94,0x93,0xe8,0xda,0x7a,0x2f,0xed,0x71, - 0x12,0x91,0x0e,0x32,0xe0,0xb3,0x30,0x81,0x73,0x93, - 0x52,0x16,0x2a,0x85,0x8c,0xfd,0x40,0x2f,0x9c,0x04, - 0xbf,0x88,0x68,0x78,0x88,0x20,0xb5,0x71,0x66,0xef, - 0x87,0xb7,0x4c,0xa0,0x3d,0xda,0x69,0x09,0x1e,0x0f, - 0xc6,0x85,0x47,0x93,0xba,0x4f,0x5c,0x72,0x5d,0x72, - 0x41,0x88,0x4f,0x42,0x3a,0x82,0x17,0xd2,0x09,0xd5, - 0xd0,0x71,0xed,0x0d,0x55,0x30,0xd5,0xa4,0x65,0x32, - 0x27,0xd5,0x76,0x42,0x18,0x51,0x3d,0x01,0xea,0x4d, - 0xfa,0x27,0x58,0xa9,0x0f,0xba,0x24,0x6f,0x2d,0x27, - 0xf0,0xce,0x7b,0x6b,0x0f,0x2c,0xda,0xb5,0x88,0xd6, - 0x18,0x21,0xb4,0xa3,0x87,0x74,0xb2,0x23,0x30,0x53, - 0x86,0x47,0x39,0x4b,0xc1,0x7a,0x05,0x5b,0x45,0x09, - 0x01,0x6e,0x6e,0xe1,0x6f,0x02,0x84,0xfa,0x67,0x61, - 0xbc,0xfe,0xf4,0xc4,0x8d,0x5a,0x69,0x4e,0xc7,0x8b, - 0xfe,0xd7,0xef,0xe3,0x2e,0xcc,0xbe,0x0f,0xd0,0x23, - 0x06,0xaa,0xe3,0xfd,0x4a,0x2b,0xfd,0x38,0x74,0x37, - 0xf1,0xb5,0x28,0xce,0x88,0x78,0xdd,0x09,0xbc,0x9a, - 0x87,0xe1,0x2d,0x14,0x7d,0xc7,0xc9,0x3c,0xa8,0x01, - 0x25,0xb4,0x1a,0xcf,0x15,0xb8,0x98,0xc4,0xed,0x19, - 0x6c,0x38,0x8e,0x26,0xe0,0x89,0x9b,0xa2,0x2d,0x6d, - 0x98,0xd2,0x74,0xfb,0xda,0xfa,0xfa,0xd1,0x39,0xe6, - 0x62,0x5a,0xd0,0x70,0x5b,0x71,0xa3,0x28,0x81,0x0e, - 0x45,0x46,0x24,0x7d,0x4f,0x2d,0xb1,0x6e,0x4e,0x6e, - 0xd0,0xac,0x63,0x90,0xee,0x11,0xcc,0xe8,0x9f,0xd3, - 0x8b,0x3e,0x39,0x8f,0x57,0xe2,0xb9,0xd4,0x16,0x9d, - 0x50,0xd9,0x24,0xd0,0x4b,0x03,0x57,0x64,0x76,0xfd, - 0x88,0x03,0x6e,0x36,0x9f,0xfc,0x77,0x36,0xb2,0xdd, - 0x89,0x34,0x4a,0x0b,0xc0,0x1d,0xf4,0xa9,0x55,0x05, - 0x53,0x11,0xf6,0xa5,0xa5,0x6a,0x73,0x31,0x31,0x65, - 0x17,0xd8,0x64,0xee,0x48,0x3d,0x6e,0xd7,0x4e,0xd3, - 0x6c,0x75,0xd3,0xbe,0xbb,0xc7,0x9a,0x49,0x7c,0x2b, - 0xbd,0xd3,0xc4,0x47,0x48,0x70,0xb2,0x3b,0x58,0x75, - 0xc2,0x80,0x26,0x09,0xa9,0x02,0x22,0xc7,0xe2,0xa0, - 0xea,0x9b,0x76,0xeb,0x09,0x15,0xff,0xd9,0x20,0x6d, - 0xa0,0x92,0x6a,0x79,0x41,0x94,0x5c,0x07,0xa5,0xf4, - 0x07,0x07,0x05,0xe0,0xdf,0xe3,0x82,0x69,0x90,0xe7, - 0x3f,0xdd,0x86,0x60,0xc3,0xa3,0xd1,0x76,0x60,0xb2, - 0x69,0x48,0x28,0x0a,0xd9,0xbf,0x6c,0x03,0x1b,0xed, - 0xf3,0xc1,0x0c,0x36,0xc6,0x13,0x87,0x08,0x03,0x1f, - 0xed,0x71,0xcf,0x81,0xb3,0x45,0x95,0xf0,0x71,0xfb, - 0xc4,0x49,0x6e,0xf4,0xe4,0x6a,0xa1,0x17,0x73,0x26, - 0x34,0xa0,0x73,0x3c,0x08,0x81,0x74,0xe4,0x5d,0x45, - 0x05,0x7b,0xbc,0x4c,0x42,0x79,0x13,0x8a,0xe2,0x38, - 0x70,0xe6,0x3d,0x8c,0x68,0x79,0xd0,0x65,0x4a,0x39, - 0x47,0xdc,0xeb,0xae,0x60,0x26,0xbe,0x0d,0x70,0x03, - 0xed,0xdf,0xe9,0x7e,0x4b,0xe3,0xfd,0xae,0x9d,0x97, - 0xbc,0x2b,0xdd,0x3b,0xd4,0xe4,0x77,0x43,0xb6,0xee, - 0x5d,0x80,0x44,0xee,0x26,0x6e,0xce,0x46,0xa4,0xd8, - 0xd9,0xdf,0xd0,0x59,0x0c,0xa0,0x80,0x45,0x97,0x26, - 0xcd,0xbb,0xfb,0x3c,0xde,0xb6,0xd5,0xdc,0x7a,0x78, - 0xa9,0x84,0x34,0x1d,0x20,0xc9,0x1e,0x40,0x2f,0x52, - 0x7b,0xb0,0xca,0x05,0x98,0xaa,0xc7,0x94,0x49,0x3a, - 0xde,0x4b,0x9a,0x3a,0xa0,0x0a,0x91,0x1c,0xe8,0x5d, - 0xff,0x98,0x82,0xa4,0x3b,0x04,0xcd,0xc3,0x3f,0x53, - 0xd6,0xaa,0xfd,0x66,0x22,0xb4,0xd1,0x73,0xd3,0x56, - 0xa5,0x8e,0x0e,0xa7,0x69,0x2b,0xba,0xee,0x7e,0x58, - 0x3b,0x45,0x5a,0x7d,0x6e,0x0a,0x45,0x37,0x38,0xff, - 0x6d,0x72,0x81,0x26,0x3a,0x5c,0x70,0x23,0x44,0xd0, - 0xb5,0x0c,0x7a,0xf0,0x4d,0x08,0x23,0x6d,0x90,0xc4, - 0x57,0xd0,0x4a,0x9a,0x3c,0x71,0x34,0x90,0x93,0xa4, - 0xbc,0x9b,0x8c,0x83,0xb6,0xdf,0x99,0x8c,0x00,0x65, - 0xcd,0xc7,0xd6,0x4d,0xe2,0xdc,0xf4,0xd6,0xcf,0x65, - 0x2c,0x3f,0x52,0xc2,0xe2,0x0e,0xc3,0x04,0x8b,0x4f, - 0x12,0x17,0x34,0x18,0x31,0x8d,0xd1,0x52,0x20,0xa6, - 0xfb,0xa2,0x24,0x2e,0x70,0xa4,0x8e,0x26,0x3e,0xfa, - 0x59,0x1d,0xad,0xee,0x08,0x51,0x72,0xc8,0x96,0x58, - 0x61,0x45,0xde,0x36,0x27,0x7f,0xdb,0xaf,0x0f,0x31, - 0x48,0x6a,0x93,0x42,0x81,0x8b,0x43,0x1c,0x1d,0xf1, - 0x74,0x49,0xc6,0xe6,0x9c,0x98,0xd6,0x81,0xb6,0x8f, - 0x0c,0x41,0xfd,0x50,0x2c,0x9e,0x04,0x02,0x37,0xe8, - 0x70,0x4f,0xf0,0xd4,0x1a,0x03,0x0a,0xf6,0xb3,0x98, - 0xb4,0x1c,0x6d,0x82,0x52,0xe1,0x42,0x89,0xed,0x94, - 0x70,0x6d,0x0a,0x96,0xe4,0xf1,0x98,0x5a,0x70,0x69, - 0x5c,0x3d,0xb5,0xde,0x48,0x47,0x30,0x0d,0x13,0x38, - 0xba,0x81,0x8b,0x9b,0x24,0x00,0x49,0xfb,0xe7,0xe5, - 0xfa,0xdb,0xce,0x47,0x28,0xbc,0x0c,0x5c,0x6c,0xe0, - 0x27,0x96,0x5a,0x67,0x8f,0x76,0x82,0xab,0xaa,0xdc, - 0xa1,0x3f,0x8d,0xa9,0xb7,0xc0,0x80,0x15,0x48,0x92, - 0x5a,0x27,0x6e,0x87,0xd9,0x24,0x58,0xb9,0x24,0x19, - 0xf7,0x7e,0x8d,0x5b,0x66,0xfc,0xeb,0xf5,0x3a,0x30, - 0xba,0x1f,0x4d,0x62,0x4d,0x16,0x4e,0x7c,0x97,0x43, - 0xca,0xb3,0x69,0x13,0x03,0x13,0xff,0xc0,0x7b,0x3b, - 0x61,0x1a,0x29,0x56,0xc8,0x14,0x68,0x43,0x35,0x77, - 0x3a,0xf2,0x64,0x7a,0xc3,0x47,0x13,0x3f,0xc3,0x5d, - 0x38,0xa9,0x95,0xa5,0x2d,0x8e,0x60,0x20,0x78,0x2e, - 0x63,0x18,0xa8,0xc4,0xe6,0x36,0xb2,0x1d,0x05,0x07, - 0x9d,0xfa,0xf3,0x05,0xc4,0x51,0x47,0x72,0x84,0x43, - 0xe3,0xa7,0x5d,0x25,0xd7,0x11,0xf5,0x6f,0xd2,0x9f, - 0x4d,0xdc,0x0e,0x8a,0x31,0x09,0x61,0xec,0x08,0x8b, - 0xb6,0xdc,0xae,0x40,0x02,0x4f,0x23,0xbe,0x9a,0x88, - 0x6a,0x1b,0x66,0x1a,0x3b,0xd6,0x16,0xe3,0xa0,0x77, - 0x74,0x1c,0x41,0x99,0xda,0xa9,0xc3,0xe1,0x7e,0x86, - 0x78,0x78,0x3a,0x8a,0x0d,0x6b,0x9c,0xde,0x41,0xf2, - 0x40,0x5b,0x4f,0x7b,0x69,0xfb,0x10,0x4c,0xb6,0xa3, - 0x61,0xb3,0x5b,0xf3,0x8a,0xd4,0x26,0x24,0x9e,0x86, - 0x14,0xb4,0x40,0x21,0x93,0x58,0x05,0x07,0x4c,0xc2, - 0x72,0x88,0x6c,0x6c,0xd6,0xce,0xba,0x38,0x55,0xe9, - 0x13,0xb2,0x03,0xea,0xfa,0x45,0x10,0xaf,0x22,0x77, - 0x33,0xb5,0x0f,0x5d,0x87,0xc2,0xc5,0x38,0x3d,0x17, - 0xa7,0xa9,0xe2,0x04,0x10,0xc0,0x40,0xc5,0x71,0x53, - 0x7a,0x61,0x30,0xe4,0xb1,0x67,0x7f,0x9b,0x9e,0x72, - 0x05,0xbe,0x4f,0x25,0x04,0x27,0x09,0x26,0x12,0x0a, - 0x63,0x38,0x1f,0x0f,0x3f,0xa8,0xee,0xcf,0x64,0x82, - 0xf9,0x9b,0x92,0xb1,0xf4,0x70,0xcb,0xd9,0x36,0xa8, - 0xcf,0x59,0xbf,0x77,0xad,0x2a,0xfa,0xc3,0xa7,0xc4, - 0x46,0x82,0x40,0xdd,0x07,0x68,0x4b,0x00,0x1f,0xea, - 0xc6,0xda,0x06,0xd9,0x98,0x46,0x82,0x46,0x0d,0x09, - 0x03,0x3e,0x14,0x90,0xdb,0x42,0x2b,0x53,0x11,0x9e, - 0xaf,0xaf,0xaf,0x9a,0x44,0x02,0x9f,0xb9,0x8b,0x65, - 0xea,0x57,0xd8,0x90,0x8f,0xd1,0xdd,0xfe,0x1d,0x26, - 0x00,0x54,0x6f,0x11,0xde,0x09,0xdf,0xfd,0x3d,0xc1, - 0x86,0xa2,0x86,0x0a,0xa0,0x02,0xb2,0xf2,0x10,0x80, - 0x34,0x89,0xde,0x34,0x26,0xf9,0xf8,0x8c,0x00,0x93, - 0xd7,0x74,0x48,0xca,0x14,0x61,0x4d,0xed,0x5c,0x25, - 0xcc,0x6f,0xd4,0x9f,0xe9,0x33,0x52,0x82,0xea,0x90, - 0xc7,0xef,0xb5,0x5d,0x69,0xa2,0x88,0x5a,0xe1,0x2e, - 0x26,0x28,0x1a,0x40,0x89,0x54,0x22,0x62,0x6e,0xfd, - 0xcb,0x5c,0xa1,0xe0,0x5a,0xd5,0xae,0x90,0x72,0xe2, - 0x73,0xa6,0xe5,0x62,0x39,0x0a,0x2e,0xa1,0xd1,0xa1, - 0x0c,0x6a,0xf9,0xf7,0x96,0x7d,0x6a,0x77,0x12,0x57, - 0xa3,0x15,0x51,0x27,0xf0,0x0d,0xed,0x40,0x46,0x6a, - 0xa5,0xe8,0x68,0xf9,0x06,0xf1,0x27,0x34,0x44,0xbd, - 0xa1,0xdc,0x1a,0x25,0xce,0x4e,0x8f,0x37,0x93,0x91, - 0x2e,0x75,0x20,0x48,0x94,0x75,0x1a,0x1f,0x77,0x7b, - 0x68,0xf0,0x89,0x8c,0xff,0xf4,0x89,0x32,0x75,0x43, - 0xa0,0xa2,0x82,0x00,0x8c,0x60,0x3b,0x84,0xb4,0x04, - 0x79,0x5e,0x6f,0xd3,0xb0,0xe9,0x6c,0xdc,0x0c,0xed, - 0x24,0x03,0xf3,0x84,0x6a,0xd1,0x5a,0x4d,0x83,0x4f, - 0x3f,0x40,0x0a,0x6d,0x64,0x52,0x71,0x4c,0x5c,0x17, - 0xc7,0x1b,0x22,0xd8,0xdd,0x65,0xc8,0x9d,0xe4,0x46, - 0x93,0x47,0x13,0xc3,0x7c,0x0a,0x6e,0x09,0x06,0x4e, - 0x0a,0xa6,0x26,0x9b,0xc5,0xb1,0x6d,0xe2,0x01,0x98, - 0x24,0x10,0x65,0xc0,0x01,0x59,0x3a,0x13,0x2f,0x23, - 0x71,0x27,0x52,0x9b,0xc2,0x05,0x76,0x5a,0xa8,0x64, - 0x62,0xab,0xee,0xc3,0xc0,0x9b,0x18,0x3d,0x6b,0x52, - 0x30,0x71,0x6d,0x3a,0x98,0x1e,0xa3,0x4a,0xf1,0x31, - 0x59,0x96,0xde,0x7b,0xd8,0x6c,0x27,0x21,0x7c,0xd2, - 0x7a,0x89,0x2d,0x9e,0xce,0x0f,0x4a,0x93,0x29,0x4e, - 0x0f,0x46,0xf7,0x89,0xd3,0xb3,0x69,0xe8,0xd2,0x4f, - 0x1b,0x88,0x0a,0x99,0x49,0xd0,0x6c,0xf0,0x39,0x52, - 0xc9,0xfe,0x07,0xe1,0xd9,0xe8,0xf2,0xfc,0xfc,0xef, - 0x26,0x24,0x2b,0x92,0x73,0xf3,0xdd,0x92,0x76,0xc9, - 0x24,0x1a,0x99,0x1c,0xa1,0x95,0xcc,0xbc,0x90,0xa2, - 0x70,0xd5,0xf4,0xa8,0xf9,0x23,0x66,0xba,0x84,0x3a, - 0x5b,0x34,0x37,0xa9,0xef,0x92,0x24,0x81,0x9b,0x38, - 0x03,0x5f,0xa9,0x87,0x50,0x63,0x12,0xb1,0xd5,0x7d, - 0x16,0x84,0x24,0xd1,0x99,0x3e,0xe8,0x5b,0x1d,0x42, - 0x34,0x02,0xe7,0x25,0x8a,0x20,0xd2,0x79,0x45,0xbc, - 0xa2,0x69,0x3a,0x6c,0xe2,0x98,0x51,0x22,0x12,0xb4, - 0xaa,0xc6,0x78,0xd8,0xdb,0xfd,0x49,0xb6,0x85,0x90, - 0x72,0x69,0xa9,0x9e,0x34,0x30,0x92,0x48,0xc3,0xee, - 0x7b,0x4d,0x3b,0xff,0x90,0xf2,0x7a,0xe2,0xe2,0x26, - 0xf4,0x97,0xd6,0xb6,0x43,0x4b,0xf5,0xf9,0xa4,0xd8, - 0xfb,0x72,0xcc,0x7f,0x20,0xd7,0xe2,0x58,0xb1,0x23, - 0x20,0x2b,0xa4,0x38,0x25,0x52,0x9a,0xcd,0x42,0xb5, - 0x13,0xd9,0xe6,0xa4,0x9d,0xe0,0x44,0x10,0xd5,0x87, - 0x47,0x39,0x24,0xe9,0xf3,0x9d,0x2f,0x8b,0xfe,0x9e, - 0x21,0x62,0x23,0xc3,0x5f,0x5f,0xee,0x77,0x02,0x68, - 0x03,0xd6,0x14,0x00,0x1b,0x9f,0xe8,0x72,0x9c,0x94, - 0x54,0x79,0x06,0x79,0x7c,0xba,0xcf,0xc4,0x4d,0x7a, - 0x4c,0x7a,0xb5,0x09,0x26,0x72,0xd5,0x46,0x9f,0x9b, - 0xfb,0x9e,0x54,0xfa,0xe0,0x6e,0x27,0xb9,0xf6,0xad, - 0x3b,0x94,0xcc,0xc1,0x80,0x95,0x8f,0xf3,0xfe,0x31, - 0x1b,0xfa,0xb8,0x44,0x45,0xda,0x68,0xc7,0x89,0xb2, - 0x01,0xc2,0x73,0x36,0x06,0xa2,0x6d,0xed,0xfc,0x1c, - 0x6e,0x8e,0x2f,0xe2,0x84,0x44,0x75,0x42,0xeb,0x4e, - 0x56,0x26,0xe1,0xc4,0xa9,0xc5,0xfb,0x09,0x0f,0x80, - 0x12,0x76,0x82,0xf8,0x13,0xe1,0x5a,0xe3,0xc8,0x42, - 0x35,0xfa,0x31,0xf9,0x35,0x1c,0xb0,0xa9,0x1d,0x35, - 0xfa,0x87,0xf5,0x44,0xa3,0x0f,0x2f,0xb8,0x20,0x2f, - 0xd6,0x29,0x27,0x24,0x35,0x97,0x8a,0xd8,0xc2,0x01, - 0x70,0x06,0xc9,0x89,0x13,0x38,0x1a,0x67,0x6a,0x37, - 0xeb,0x1a,0xeb,0xc5,0x0e,0x25,0x1f,0xa9,0x9d,0x02, - 0xf7,0x62,0x7f,0x87,0xd4,0x98,0x69,0xd2,0x94,0x92, - 0x02,0xfd,0x6e,0x45,0x7b,0x93,0xd6,0x19,0xb5,0x90, - 0xb4,0x73,0x70,0xf9,0x81,0x98,0x03,0x09,0x12,0x4e, - 0x32,0x43,0x12,0x70,0x26,0x3a,0x88,0x33,0x05,0x15, - 0x33,0x6c,0xfb,0x5c,0x48,0x66,0x40,0x93,0x6e,0x11, - 0x6f,0x8d,0x48,0xac,0xe3,0xeb,0xc0,0xfe,0x39,0xa1, - 0xc3,0xf4,0x06,0x06,0xf4,0x7d,0x9f,0x06,0x51,0xf4, - 0x7c,0xfb,0xad,0x0b,0xe7,0xc3,0x11,0x50,0xe5,0x3e, - 0x54,0x22,0xdb,0x99,0x4a,0xe6,0xcd,0x9b,0x8a,0xb2, - 0xda,0x34,0xca,0x46,0x08,0x96,0xfb,0xde,0x8e,0x72, - 0x90,0x3b,0x76,0x22,0xe7,0x51,0x55,0xa7,0xff,0x7c, - 0x1b,0x4f,0x96,0x26,0x59,0x17,0xfb,0x76,0xd9,0x76, - 0x89,0xdb,0x04,0x77,0xdf,0x49,0x21,0xdd,0x6e,0x38, - 0x6b,0x0e,0xc9,0x32,0x41,0xee,0xe9,0x46,0x29,0xed, - 0x1d,0x83,0x78,0xb8,0xb6,0xd1,0xdb,0xb5,0x1b,0xed, - 0x96,0x72,0x10,0xb7,0x7a,0xae,0xe9,0x33,0xa2,0xf6, - 0xcf,0x65,0xfc,0xd7,0x52,0x5b,0x8a,0x3c,0xcd,0x4c, - 0xb0,0x29,0x38,0xf8,0xde,0x8c,0x4a,0xcd,0x3b,0xed, - 0x1b,0xb5,0xa4,0x0d,0x84,0xcf,0x70,0x40,0x21,0xdf, - 0xbe,0x33,0x71,0x65,0x7a,0x80,0x6d,0xcf,0xa4,0x52, - 0x7b,0xc0,0xed,0x03,0x17,0x04,0x6f,0xb3,0x55,0xb2, - 0x4e,0xa1,0x6a,0x71,0x63,0xa8,0xea,0x12,0xbc,0x7e, - 0x9d,0x8a,0x48,0x6e,0x95,0xa8,0xf5,0xf3,0x5d,0x41, - 0x95,0xaa,0xdc,0x09,0x6d,0xa0,0xa0,0xbc,0xf1,0x75, - 0x0a,0x5a,0x2c,0x6f,0xde,0x4b,0x89,0x5f,0xe5,0xd0, - 0x95,0xd4,0x2e,0xa5,0x67,0xe7,0x10,0x68,0x12,0xa3, - 0x33,0x05,0x6a,0xe2,0xf5,0x20,0xec,0xe2,0x3e,0x77, - 0xe3,0x0d,0x47,0x71,0xdc,0x89,0x29,0xba,0x09,0x29, - 0x5a,0xdf,0x6a,0x2d,0xe2,0x62,0x21,0x4c,0xeb,0x9d, - 0x40,0x81,0x40,0x7e,0xd4,0xb0,0xae,0x1e,0x5e,0x5d, - 0x64,0x0d,0xd4,0xf9,0x7b,0x7d,0xbc,0x5d,0x10,0xfa, - 0x98,0x14,0x05,0x74,0x72,0xd5,0x9e,0x9e,0xc0,0x0f, - 0xe7,0x29,0x46,0x2d,0x63,0x05,0x41,0x52,0x6b,0xde, - 0x79,0xce,0x39,0x39,0x85,0xe4,0x49,0xda,0x7f,0xf7, - 0xf7,0xd4,0x42,0x72,0xfd,0x6c,0x0a,0xc8,0x0a,0x8b, - 0x39,0x37,0xf8,0xd4,0x0f,0xde,0xc0,0xef,0x97,0x31, - 0x10,0x55,0x4e,0x8a,0xb6,0x63,0x2e,0xe3,0x2e,0x7e, - 0x89,0xdb,0x79,0xe2,0xc8,0x0c,0xc9,0x0b,0x06,0xa1, - 0x54,0x19,0x86,0x56,0x50,0xbc,0xf6,0xb6,0x00,0xca, - 0x71,0x53,0x7a,0xc2,0x31,0x19,0xb7,0x76,0x13,0xd4, - 0xde,0xc7,0xed,0x7c,0x28,0x53,0x25,0xa1,0xb3,0x3b, - 0x1d,0xd2,0x9a,0x68,0xf6,0xe7,0xa9,0x89,0x42,0xff, - 0x3c,0x30,0x0e,0x45,0x33,0x54,0x17,0x6c,0xbb,0xb1, - 0x6b,0x7f,0x66,0xa0,0x92,0xfa,0x78,0xef,0x8d,0x7b, - 0x64,0x39,0x62,0x5a,0x8d,0xf6,0xa4,0x05,0x78,0x63, - 0x3f,0xc9,0xcd,0xc2,0xdd,0xfa,0xe1,0x46,0x9f,0x26, - 0xb2,0x4c,0xa5,0x58,0xee,0xd0,0x49,0x41,0xcd,0x4d, - 0xdb,0x98,0x03,0x0b,0xdf,0x35,0x25,0x5a,0x4e,0xa4, - 0xd1,0xa1,0x25,0x29,0x68,0xa5,0x0a,0x97,0x7a,0xfc, - 0x69,0x22,0xad,0x1d,0x22,0x6f,0xc4,0x70,0x5d,0xdf, - 0xea,0x4c,0xed,0xf6,0x7b,0xf0,0xe4,0xda,0x8e,0x12, - 0x93,0xbd,0x80,0x16,0x69,0x07,0x26,0xdd,0xb0,0x0d, - 0x0f,0xcf,0x33,0x69,0x40,0x1d,0x4a,0x7c,0xd5,0x46, - 0xa8,0x9f,0x11,0xdd,0xc0,0xd4,0x71,0x96,0x94,0x44, - 0x2d,0xa6,0xcb,0x3f,0x6b,0x46,0xce,0x9c,0x03,0x2d, - 0x90,0x03,0xdc,0xb3,0x43,0xe7,0x4a,0x32,0xd0,0x26, - 0xa4,0x62,0x53,0x68,0x93,0x79,0x2c,0x99,0xab,0x76, - 0xa4,0x24,0x49,0x76,0x38,0xb9,0x11,0x02,0x2c,0xf4, - 0xda,0x53,0x9b,0x8c,0xb8,0x7d,0xd4,0x42,0x4b,0xf4, - 0x97,0x41,0xea,0x24,0xb6,0x04,0x09,0x19,0x72,0xba, - 0x3f,0xa9,0xf5,0xae,0xf7,0xec,0x0a,0x3f,0x02,0x2e, - 0x7e,0x87,0x0d,0x50,0x94,0xcd,0x06,0xb4,0xc2,0x22, - 0x3a,0xc3,0xcb,0x7a,0x1c,0x68,0x6d,0x47,0x94,0x1b, - 0xcd,0x4f,0x73,0xfe,0x30,0xfa,0xf9,0xb8,0x1f,0x42, - 0xb9,0x68,0x71,0x11,0x2c,0xaf,0xc9,0x88,0x1e,0x86, - 0xae,0x5d,0xe5,0x9c,0xce,0xd5,0x91,0x3d,0x25,0x03, - 0xee,0xc0,0xde,0xf2,0x9f,0xe8,0x9d,0x80,0x8e,0x53, - 0xf5,0x40,0xd5,0x51,0x3b,0x68,0x07,0x55,0x18,0x39, - 0x2c,0xf3,0x1c,0xdf,0xee,0xcd,0xb4,0xc3,0x0a,0x0e, - 0xa7,0x03,0xe8,0xc8,0xcf,0x77,0x51,0x05,0xd8,0x13, - 0xbe,0xbe,0x51,0xba,0xa2,0xae,0x4b,0x38,0x3a,0x09, - 0x13,0xde,0xab,0x4d,0x3e,0x92,0x02,0xab,0xa2,0x46, - 0x84,0x2a,0xc8,0xa1,0x5e,0xc4,0x05,0x31,0x9f,0xa3, - 0xd5,0x50,0x05,0x04,0x69,0xdc,0xb3,0x2a,0x85,0x30, - 0x91,0x1a,0x09,0x91,0x4b,0x01,0x09,0xf6,0xdf,0xd9, - 0x90,0xbe,0x53,0x72,0x44,0x08,0x91,0xc6,0x0a,0xd7, - 0xf2,0xa5,0x67,0x01,0xad,0xcc,0x69,0x0a,0x0b,0xdb, - 0xce,0x84,0x4e,0x69,0x45,0x4f,0x9c,0x88,0x80,0x7c, - 0xd8,0x03,0x96,0x10,0xe6,0xb0,0x06,0xa2,0x68,0x6c, - 0xe7,0x2e,0x12,0x02,0x66,0x9e,0xe7,0x21,0xb5,0x6d, - 0x6d,0xb3,0x24,0xaf,0xac,0x09,0xb9,0xbf,0x58,0xf9, - 0x7d,0x74,0x90,0x4f,0x22,0x7e,0x84,0x86,0xd2,0x33, - 0x1a,0x78,0x76,0xc4,0xf7,0x3a,0x50,0xac,0x1c,0x48, - 0x6e,0x48,0xb2,0x83,0xc8,0xd9,0x67,0x53,0x5c,0xb8, - 0xe4,0xd9,0xd1,0x5d,0x4c,0x12,0x72,0x12,0xea,0x44, - 0x89,0x38,0xc4,0x9f,0x07,0xf1,0xba,0xaf,0x17,0x18, - 0xa0,0x78,0x20,0x43,0xf7,0xdf,0xff,0x9e,0x92,0x0a, - 0x5a,0xb4,0x2e,0xa1,0x18,0x60,0xcf,0xb7,0x69,0xad, - 0x25,0x0c,0xf7,0x76,0xd0,0x29,0xa2,0x04,0x53,0x15, - 0xb5,0x59,0x9c,0xf7,0x64,0xd9,0x39,0xa7,0x1a,0xf2, - 0x61,0xdb,0x3d,0xae,0xc2,0x77,0xe8,0xd3,0x07,0xed, - 0xa1,0x43,0xad,0x9c,0x49,0xa1,0x13,0x46,0x2e,0x6d, - 0x5b,0xd1,0x90,0x0e,0xcb,0xf5,0x95,0x21,0x81,0x43, - 0x71,0xb9,0x3e,0x49,0x67,0x5a,0x41,0x15,0x8c,0x44, - 0x63,0xcb,0xcd,0x05,0xa1,0xfe,0x3d,0x2e,0x99,0x99, - 0x12,0x78,0xf3,0xcc,0x6c,0x2b,0xcd,0x04,0xcb,0x0a, - 0x6b,0xf4,0xed,0x3e,0x29,0x48,0xf4,0x76,0x54,0xa8, - 0x80,0x4e,0x9f,0x9a,0x5a,0x88,0x75,0x76,0xfe,0x56, - 0x4d,0x30,0xaf,0x72,0xbf,0x34,0x39,0x21,0x93,0x52, - 0xc7,0x91,0x53,0x44,0x90,0x88,0xf3,0x6e,0x4a,0x24, - 0x41,0xec,0x9f,0xa8,0x4d,0x13,0xf2,0xd1,0xf7,0xb0, - 0x6b,0x41,0x4e,0x28,0x10,0xa9,0xe1,0xbb,0x3f,0x73, - 0x82,0x89,0x4a,0xfc,0x5c,0xb8,0x63,0x9f,0xc9,0x98, - 0x36,0x71,0xd5,0xe8,0xf0,0x1c,0x62,0x8a,0xbd,0xc6, - 0x7e,0x50,0x85,0x36,0x04,0x59,0x23,0xfc,0xf0,0x15, - 0xf5,0x1d,0xb8,0x67,0x3d,0x25,0x7f,0xbd,0xc5,0xa7, - 0x7f,0xae,0x08,0x4f,0xb2,0xe5,0x71,0x24,0x6e,0x37, - 0xaa,0x4e,0xc9,0x12,0xb4,0xa8,0x2d,0x82,0xd5,0xaf, - 0xb5,0xef,0x95,0xcb,0x90,0xaa,0x27,0x5f,0x33,0xb7, - 0x9f,0x14,0x49,0xd5,0x7b,0x95,0x77,0x16,0x91,0x25, - 0x1a,0x6f,0x77,0xad,0xa9,0xd4,0x46,0x34,0x13,0x75, - 0x67,0xeb,0x02,0x4f,0xd7,0x44,0x2d,0x58,0xe7,0xb7, - 0xa8,0xeb,0x34,0x9d,0x91,0xe9,0x9f,0x17,0x3d,0xf4, - 0xe4,0x39,0x94,0x08,0x8f,0x81,0xac,0xf6,0x16,0x40, - 0x9c,0x95,0x84,0x21,0xb2,0xe1,0xc2,0xa0,0x87,0xe5, - 0x16,0xbb,0x56,0xad,0xae,0x62,0x07,0xfd,0x0f,0x8b, - 0x8c,0x24,0xe1,0x34,0x17,0x5c,0x9d,0xba,0x72,0x82, - 0x9e,0xa7,0xaa,0x8d,0x14,0x63,0xdd,0xbb,0x4b,0x5c, - 0x84,0x6e,0x52,0x0a,0x07,0x0b,0x1a,0xc0,0xba,0x83, - 0xa5,0x39,0x4a,0x8f,0xc2,0x5a,0x93,0x6f,0x50,0x7f, - 0x6f,0xd3,0x18,0xf1,0x64,0x81,0x01,0x8a,0xa2,0x68, - 0xe2,0xa8,0xd5,0x0c,0x40,0xe4,0x48,0xe6,0x34,0xed, - 0xdf,0x0d,0x1c,0x7c,0xf4,0x9a,0x5d,0x0b,0xd1,0xbc, - 0xcf,0xe3,0xc4,0x02,0x27,0x25,0xe3,0xeb,0x39,0x7d, - 0x65,0x11,0x2d,0x5a,0xc3,0xf4,0xb9,0x9d,0x80,0x38, - 0x05,0xc4,0x69,0x82,0x31,0xf1,0x6b,0x48,0x4d,0x76, - 0x1a,0xbb,0x77,0x53,0x7a,0xda,0x7e,0x02,0xef,0x22, - 0xcb,0xa1,0x71,0x36,0x18,0x8e,0x1b,0x61,0x74,0x85, - 0xc6,0xc2,0xf1,0x02,0x13,0x5c,0x17,0x37,0x74,0x8d, - 0xf7,0x43,0xa3,0x7f,0x08,0xd9,0x53,0xb8,0x76,0xa7, - 0xee,0x05,0x8a,0xf7,0x6a,0xb1,0xa3,0xc2,0x8e,0x09, - 0x29,0x73,0xf7,0x43,0x13,0xb6,0x41,0x23,0x0d,0x07, - 0x58,0x5c,0xdc,0xa7,0x67,0xd6,0x3f,0xc7,0xf1,0x84, - 0x7a,0xcc,0xec,0x42,0xaf,0x90,0x18,0x92,0xf1,0x6c, - 0xd4,0xfc,0x71,0x45,0x60,0xe2,0xdc,0x6c,0x78,0x72, - 0x0b,0xa3,0xdd,0x51,0x0a,0x23,0xd1,0x39,0x68,0x8f, - 0x26,0x34,0xd5,0x25,0xe1,0x74,0xee,0x68,0x3c,0x9c, - 0x92,0x5f,0xd7,0x4d,0xa2,0x78,0xf8,0xd2,0x87,0xaa, - 0xca,0x97,0x89,0x3c,0xe5,0x16,0x56,0xaa,0x00,0x2e, - 0x76,0xa3,0x4d,0x30,0x3c,0x09,0xc0,0x51,0x56,0x4f, - 0xe2,0x8b,0x91,0x80,0xa8,0xaa,0xc2,0x29,0x3b,0x27, - 0x85,0x62,0xf8,0x3e,0x24,0xa9,0x91,0xca,0x29,0xa8, - 0x04,0x1f,0xb0,0xab,0x40,0x35,0x6c,0x30,0x88,0x3d, - 0xc1,0x8b,0x0a,0x19,0xfa,0x26,0x01,0x39,0x94,0xa8, - 0x06,0x49,0xf3,0x13,0xb8,0x07,0x87,0xfc,0x9a,0xae, - 0x61,0xda,0xcc,0xad,0xc1,0xd6,0xd2,0x3a,0xbf,0x7e, - 0xfd,0xa2,0x03,0x76,0x22,0x0a,0x1e,0x47,0x90,0x14, - 0xe1,0xc2,0xa3,0x72,0xec,0x40,0xfa,0x7e,0x18,0x84, - 0xba,0xa0,0xd0,0x0f,0xe5,0x5b,0x47,0x8a,0x14,0xda, - 0x8d,0x49,0xea,0x49,0x07,0x2a,0xd9,0x6a,0xc8,0x84, - 0xd2,0x43,0x51,0x7a,0x72,0x05,0x77,0xc9,0xc1,0x64, - 0x91,0x32,0x25,0x35,0xd4,0xcb,0x4f,0xe8,0xa4,0x2b, - 0xca,0xf4,0xf9,0xf4,0xa4,0x85,0x5a,0x5a,0xa9,0x9d, - 0xdc,0x3f,0xcb,0x49,0x0e,0x50,0x81,0xf0,0xdd,0x1e, - 0x5a,0x99,0x7d,0x5e,0x41,0xb1,0xda,0x24,0xf9,0xd1, - 0xdc,0xf3,0x5a,0x08,0x23,0x26,0x93,0xd7,0x94,0x80, - 0x91,0x71,0x65,0xf2,0x19,0x24,0x7e,0x87,0x23,0xf3, - 0xbb,0xc2,0x42,0xf7,0xdf,0x20,0x95,0x81,0x28,0x06, - 0x0d,0x3c,0x00,0x5d,0x83,0x8a,0xa5,0x03,0x6b,0x91, - 0xc8,0xe5,0x87,0x0e,0xe8,0xd4,0x8e,0x24,0x1b,0x07, - 0x95,0x8b,0x71,0x8a,0xe3,0x3a,0xf9,0xe5,0x5a,0x53, - 0x2e,0xb1,0x07,0xa0,0xe3,0x80,0x05,0xc8,0xa1,0xf8, - 0x32,0xe9,0x4a,0x5d,0xd7,0x75,0xfd,0xf9,0xf3,0xe7, - 0x2d,0x0e,0x05,0xf9,0x8a,0x33,0xe5,0x0c,0xc9,0xd0, - 0xdd,0xed,0xcf,0xdf,0x57,0x90,0xf1,0xa6,0x4a,0xdf, - 0x71,0x81,0x0c,0x54,0x58,0xd4,0x03,0x05,0xfe,0x80, - 0x15,0x34,0xdc,0x90,0x20,0x81,0x78,0x56,0xb0,0x61, - 0x0b,0xbc,0x9c,0x0a,0x16,0x78,0x51,0x0b,0xc4,0x6d, - 0x6c,0x22,0x21,0xdf,0xe2,0x75,0x6e,0xb2,0x42,0xff, - 0x9d,0xb4,0x27,0x04,0x5e,0x25,0xe2,0xe5,0xe5,0x48, - 0x77,0x44,0x32,0x4e,0x1c,0x19,0x47,0x20,0x56,0xa4, - 0xa9,0xb7,0xa8,0x4c,0xc2,0x66,0x79,0x57,0xdf,0xa4, - 0x52,0x24,0x77,0x83,0x7e,0xd4,0xdb,0x34,0x9b,0xe3, - 0x91,0x91,0x18,0x57,0x6f,0xd9,0x51,0x4b,0xcc,0xf1, - 0x9a,0x04,0x3d,0xac,0xd4,0x26,0xd6,0x76,0x67,0xaf, - 0xd2,0x34,0x48,0x75,0xe1,0xc3,0xb4,0x47,0x3a,0x4f, - 0x28,0x11,0x07,0x75,0xed,0xb7,0xeb,0x2b,0xda,0x3f, - 0x9d,0x6c,0xea,0x48,0x93,0xae,0xed,0xf1,0x7e,0x7e, - 0xcf,0x1e,0x5f,0x53,0x4f,0x9f,0x78,0x47,0xd3,0xf0, - 0x40,0x48,0x1e,0xde,0x2c,0x73,0x92,0x68,0x9e,0x83, - 0xca,0x5d,0xf0,0x4c,0x72,0x09,0xd3,0x75,0x5e,0x86, - 0x90,0x0b,0xfb,0x71,0x6a,0x6b,0xa4,0x36,0xe8,0x05, - 0x6d,0xad,0x93,0xc6,0xf9,0x93,0xe5,0x85,0x26,0x3f, - 0x40,0x94,0x7f,0x4c,0x25,0x91,0x81,0xf6,0x94,0x70, - 0xf5,0xf6,0x56,0x58,0x43,0xd1,0x78,0xd5,0x15,0xce, - 0x94,0xd0,0x26,0x59,0x00,0x6a,0x39,0x0d,0x28,0x87, - 0x3d,0xb3,0xe8,0xcf,0xd2,0x35,0x39,0x0b,0x29,0xfa, - 0xfe,0x2e,0x9d,0xd0,0x75,0x7e,0x68,0xea,0x6f,0xda, - 0xaf,0x8b,0x96,0xd5,0x4a,0x60,0xd4,0x19,0x9f,0x8b, - 0x01,0x6b,0x32,0xa0,0x46,0x8a,0x8c,0x2b,0x54,0xa6, - 0xae,0x54,0x48,0x8e,0xff,0x45,0x80,0xdc,0xe4,0x56, - 0x32,0x39,0x5c,0x8a,0x23,0x12,0x5a,0x72,0x9c,0x6e, - 0xc4,0xb0,0x28,0x0e,0x10,0x96,0x8f,0x53,0x6a,0x4d, - 0x62,0x7f,0x89,0xc8,0x38,0x49,0xfb,0x53,0x65,0xeb, - 0x0e,0x8f,0x14,0x58,0xbb,0xc6,0x42,0xa8,0xec,0x14, - 0xb9,0xb1,0xe4,0x33,0xe2,0x13,0xa8,0xf0,0xe0,0x46, - 0x01,0xb5,0xdf,0xc3,0xaf,0x5f,0xbf,0x1e,0xad,0x28, - 0xa3,0xe9,0x63,0x83,0x31,0x91,0xfa,0x5c,0x5b,0x90, - 0xf4,0x35,0x68,0xba,0x25,0x20,0x91,0x54,0xfd,0xa0, - 0xc4,0xbf,0x48,0xcb,0x9f,0x64,0x31,0xe1,0xda,0x1c, - 0x70,0xbf,0xd6,0x60,0x53,0x26,0x62,0xce,0x95,0x7d, - 0x93,0x6c,0xab,0x6b,0xb3,0xc7,0xe0,0xf7,0x4e,0x4a, - 0x04,0x36,0xa3,0xec,0xf4,0xb9,0x5d,0x47,0xe8,0x32, - 0xfe,0x65,0xdb,0x4a,0x2c,0x21,0x4c,0x5a,0x4c,0x74, - 0x81,0xc5,0xa6,0x61,0x74,0x1c,0xa9,0x92,0xc6,0x5f, - 0x29,0x98,0x6b,0x4b,0xf2,0x4c,0xf3,0xed,0x20,0x63, - 0x40,0x3e,0x53,0x94,0xd0,0xb8,0xe7,0xa6,0x87,0x61, - 0x27,0xe2,0xa7,0xc2,0x50,0x8d,0x86,0xa1,0x45,0x7e, - 0x06,0x61,0xc1,0xb4,0xde,0x4e,0x40,0xf4,0x92,0xe7, - 0xd7,0x09,0x49,0xc8,0x09,0xfc,0x8d,0x63,0x04,0x18, - 0xaf,0x0b,0xc4,0x4c,0x49,0x0c,0x94,0xe4,0x01,0xa8, - 0xdd,0xaf,0x68,0x15,0x49,0x2b,0xa8,0xfe,0x10,0xbc, - 0x9b,0xe3,0xda,0xc4,0x7a,0x3d,0x7d,0xc4,0xbf,0xa3, - 0x3c,0x14,0x53,0xbb,0xb8,0xa1,0xeb,0x6a,0x10,0x0f, - 0x2f,0x24,0x21,0x0f,0x22,0xb1,0x7e,0xbe,0x43,0xe0, - 0x53,0xbe,0xe0,0x46,0xfb,0x21,0xcf,0x38,0x41,0x99, - 0x1a,0x65,0x1f,0xba,0x14,0x00,0x21,0xc3,0x10,0x63, - 0xcf,0x8b,0x7a,0xfd,0x2d,0x80,0x1f,0x32,0x4c,0x73, - 0x7a,0x08,0xd4,0x9a,0x71,0x5e,0x63,0xb4,0xa8,0x12, - 0x5f,0xc0,0xf1,0x40,0x20,0xd3,0x7e,0x04,0xfd,0x5b, - 0x00,0x0e,0xda,0x75,0x63,0x0f,0x76,0xa3,0x04,0xed, - 0x04,0xe5,0xf4,0x00,0x4e,0x12,0xff,0xae,0x1a,0x9c, - 0x92,0x8a,0xc4,0x13,0xd2,0x56,0x98,0xdb,0xf0,0x29, - 0x18,0x9b,0x56,0x82,0xcb,0xc4,0x4f,0x1a,0xe5,0x76, - 0xeb,0xa0,0x1f,0xcc,0x46,0xc9,0xf8,0x90,0xb4,0xff, - 0x50,0xd9,0x9e,0x6b,0x70,0xb1,0x0e,0x93,0x3f,0x6f, - 0xdf,0x1b,0x12,0xcd,0x87,0xc7,0x13,0xb5,0xbc,0xdc, - 0xda,0x95,0x76,0xd6,0x8f,0x20,0x9f,0x16,0x1f,0x21, - 0x38,0x59,0x5f,0xb0,0xa9,0x70,0x31,0x7e,0x5e,0x13, - 0xc2,0x9b,0x1c,0xe8,0x2f,0xe2,0xbc,0x34,0xb2,0xed, - 0x91,0x76,0xd1,0x4f,0xd2,0xe2,0xfe,0xbd,0xbd,0xbb, - 0x87,0x82,0xb4,0x3e,0xf7,0x49,0x14,0x91,0x84,0x36, - 0x5d,0x9c,0x6b,0x09,0xea,0xc3,0x3f,0x8c,0x90,0x71, - 0xe0,0xf8,0xf5,0xf6,0x1a,0x16,0x8a,0xa6,0x15,0x13, - 0x47,0xe5,0x45,0xa9,0x39,0x2a,0xee,0x5f,0x46,0x30, - 0xd0,0xb5,0xe4,0x87,0x69,0xa4,0x13,0x44,0x2c,0xcf, - 0xf5,0x2d,0x4a,0x4a,0x6d,0x77,0x97,0x54,0xd2,0x78, - 0x3a,0xb5,0xa4,0x26,0x7e,0xa8,0x43,0xd7,0x24,0x8e, - 0xd3,0x39,0x82,0xca,0x8c,0x29,0x76,0x39,0x15,0x6b, - 0xcb,0x27,0xf9,0xf6,0x66,0xd4,0xb8,0xf0,0xf5,0xf5, - 0x65,0x0d,0x64,0x93,0xd7,0x24,0x09,0xcf,0x92,0x59, - 0x79,0x40,0xc6,0xed,0xe7,0xb8,0x02,0x41,0x49,0xde, - 0x84,0x04,0xbb,0xc2,0x26,0x09,0xfc,0x6a,0xfc,0x5e, - 0x0c,0x7a,0xc4,0x56,0x2b,0xd9,0x74,0xa4,0xb6,0x9b, - 0x1b,0xa0,0xa8,0xaa,0x7f,0x74,0x80,0xae,0xac,0xf6, - 0x19,0x47,0x48,0x53,0x95,0x93,0x74,0x2a,0x2e,0xaf, - 0x63,0x93,0x2a,0xab,0x47,0x8b,0x61,0x32,0x55,0x74, - 0x1b,0xa4,0x89,0x47,0x95,0xe1,0xc8,0x8c,0x22,0x80, - 0xd4,0xea,0xd3,0xec,0xfa,0x6e,0x85,0x19,0xde,0x4c, - 0x01,0x87,0x23,0xfa,0x6d,0x99,0x8d,0x59,0x6e,0x3c, - 0xd4,0xb5,0x7a,0x5c,0xcb,0xce,0xf9,0x50,0xa9,0x41, - 0x26,0x8c,0x29,0x52,0x7b,0xf3,0xad,0x4d,0x24,0x2d, - 0xbb,0xb7,0x96,0x9b,0xd1,0x35,0xa9,0x49,0xf8,0xd2, - 0xf1,0x92,0x6e,0x39,0x01,0x98,0x94,0x2a,0x80,0xaf, - 0xef,0x00,0x5f,0x41,0xfb,0xc5,0x4e,0x98,0xc9,0x14, - 0xd4,0x5b,0x4b,0x8e,0x6c,0x51,0xbe,0xbf,0xbb,0x08, - 0x96,0x6e,0xed,0x0e,0xf4,0x36,0x0b,0x48,0xc8,0xcf, - 0x8f,0xe9,0xda,0x27,0x21,0x50,0x0a,0xfa,0x3a,0xdd, - 0x38,0x19,0xa5,0xea,0x21,0xea,0xc6,0x9f,0x5d,0x02, - 0x68,0xda,0x25,0x1b,0x43,0x52,0xfb,0xb9,0x77,0x1b, - 0xef,0x9c,0xf3,0xc6,0x23,0xd0,0xe7,0x90,0xda,0x65, - 0x7d,0x72,0x69,0xb2,0xf9,0x80,0x7b,0x41,0xdd,0x9b, - 0xe4,0x6b,0xa6,0xef,0x56,0x4d,0xa4,0xb5,0xf2,0xa5, - 0xf7,0xa2,0x83,0x1c,0x81,0x3e,0x70,0x08,0xe9,0x6e, - 0xeb,0xcf,0x5e,0xc3,0x7d,0xb8,0xeb,0xfb,0xea,0xf1, - 0xe2,0xe6,0xac,0x81,0xc2,0xff,0x71,0xf7,0xe8,0xb8, - 0x8d,0x89,0xab,0x43,0xd3,0x85,0x6e,0x8d,0xbb,0x96, - 0x9d,0x8a,0xde,0x3a,0x43,0x4d,0x87,0x6c,0x98,0x38, - 0x37,0xa2,0xf0,0x09,0x79,0xa7,0x78,0x91,0xda,0x9e, - 0xd4,0x59,0xe8,0xc9,0x41,0x4a,0xd6,0xff,0x7f,0xce, - 0xce,0x60,0x39,0x72,0xe4,0x88,0xa1,0xcc,0x9e,0xb9, - 0xcc,0xfe,0xff,0x2f,0xee,0x37,0xf8,0x24,0x95,0x0f, - 0x6e,0x6a,0x92,0x28,0x3c,0x64,0xb5,0x1d,0xe1,0x70, - 0x78,0x57,0x6a,0xb1,0xc9,0x62,0x55,0x26,0x80,0x04, - 0x42,0xba,0x03,0xee,0x13,0x69,0x22,0x3c,0x31,0x33, - 0x9f,0x4e,0x52,0x7e,0x80,0x94,0x5e,0xd3,0x14,0xb9, - 0xda,0xa5,0xb8,0x49,0xf6,0xfe,0xf3,0xaf,0xeb,0xec, - 0x3f,0xa5,0x30,0x96,0x4e,0x45,0x91,0xa8,0xcc,0x75, - 0xb6,0x09,0x86,0x76,0x14,0x02,0x79,0x76,0x38,0x64, - 0xc2,0x1c,0xf0,0xf6,0x85,0x25,0xde,0x91,0xba,0xc9, - 0xa9,0x0b,0xa6,0x6b,0xa4,0x2e,0xf4,0x04,0xb2,0x73, - 0xe9,0xe0,0x53,0xe5,0x4c,0x4a,0x7b,0xdd,0xe0,0x1c, - 0x47,0xaa,0x16,0xfa,0x53,0xb1,0xeb,0x36,0xd9,0xf0, - 0x1d,0x0b,0x8a,0x99,0x44,0x49,0xd4,0xf0,0xbd,0xea, - 0xf5,0x7a,0x5d,0xb7,0xc8,0xd9,0x84,0xb2,0xa2,0x1e, - 0x25,0x45,0x3f,0xd0,0x44,0x9e,0xa1,0x3d,0x91,0x5e, - 0x32,0xe8,0xcb,0x05,0x50,0xf4,0x16,0xeb,0x11,0x26, - 0x51,0xac,0x46,0xcc,0x25,0x61,0x2b,0xc5,0xdc,0x0b, - 0x0f,0xca,0x1e,0x12,0x81,0x30,0x76,0xec,0x34,0x18, - 0x40,0x93,0x70,0x49,0x03,0x91,0xe2,0x63,0x68,0x5d, - 0xb8,0x77,0x9d,0xde,0x13,0x59,0x7f,0xa5,0x28,0x89, - 0xa3,0xce,0xc1,0xc6,0x41,0x91,0xef,0x1a,0x62,0x24, - 0x48,0x9b,0x58,0xd4,0x99,0xca,0x7a,0xb8,0x27,0xf4, - 0xd0,0x11,0x37,0xc5,0x26,0x28,0x7d,0xed,0xf6,0xce, - 0x69,0x92,0xc9,0x45,0xfe,0xdc,0xbf,0x23,0xfb,0x3a, - 0xa1,0x31,0xd6,0x03,0xe6,0x44,0x2b,0xa4,0x54,0xdf, - 0x44,0x45,0xbb,0xbf,0x95,0x26,0xb8,0x52,0x51,0x3f, - 0x9c,0x35,0xe3,0x68,0xb5,0xee,0xbb,0x49,0x88,0xdd, - 0x9f,0x83,0x63,0x0a,0x88,0x71,0x38,0xf1,0x7b,0x72, - 0x66,0x88,0x6e,0x5f,0xd4,0x67,0x41,0x94,0xa6,0x7b, - 0x86,0x4e,0x56,0xe2,0xe8,0xe8,0x29,0x34,0xb7,0x17, - 0x72,0x9a,0x83,0x19,0x74,0x83,0xe4,0xed,0x34,0x16, - 0x52,0xf7,0xb5,0xbc,0x92,0x38,0x8d,0xcc,0xce,0x4e, - 0x0e,0xe5,0x29,0x80,0x54,0x47,0x2b,0x89,0xe6,0xa0, - 0xaa,0x3c,0x74,0x76,0xa3,0xc8,0x4d,0x47,0x3b,0xa7, - 0x60,0x3d,0xe2,0xb6,0x3b,0x37,0xea,0x3a,0x6c,0xe7, - 0x04,0x9c,0xa6,0xb3,0x5c,0xb7,0xf9,0xf5,0xf5,0x55, - 0xd0,0xd9,0x1f,0x85,0xe8,0x25,0x7e,0xbe,0xff,0x8e, - 0x6a,0xa7,0xdc,0x98,0xb9,0x08,0x7e,0x6d,0xd0,0x1e, - 0xd1,0x61,0x64,0x61,0xae,0xd0,0x7d,0x3f,0xcc,0x9a, - 0xbf,0x4a,0x69,0x41,0xa8,0x91,0x00,0x92,0x01,0xa6, - 0xb4,0x86,0x2d,0x3a,0x5b,0xf8,0x26,0x72,0xc4,0xa4, - 0x77,0x30,0x10,0x71,0x0d,0x2f,0xec,0x46,0x91,0x38, - 0x2a,0xce,0x50,0x2a,0x76,0xb2,0xd1,0x1d,0x58,0x7d, - 0x8a,0x2b,0x4d,0x66,0xa4,0xd0,0x41,0xd1,0x29,0x6c, - 0x41,0xa6,0x8d,0xb6,0x42,0xba,0x89,0x9a,0x8b,0x4f, - 0x5c,0x62,0x53,0x3c,0xc5,0xd7,0xd7,0x97,0x43,0x59, - 0x36,0x2a,0xad,0xd3,0x6c,0x27,0x02,0x50,0xa3,0xd1, - 0xeb,0x05,0xc2,0x36,0x32,0x1f,0xec,0x2c,0x2c,0x7d, - 0xa5,0x7e,0x26,0xe0,0x46,0xfe,0x28,0x3e,0xe9,0xf9, - 0xd3,0xf8,0xbd,0xee,0x4d,0x6e,0x3a,0x95,0xb2,0x1f, - 0xdd,0x1e,0x79,0x65,0xe3,0xc4,0xc7,0xe7,0xbb,0x89, - 0x4f,0x77,0x60,0xf6,0xbd,0x48,0xc4,0xb1,0x8f,0x03, - 0x94,0xe2,0x32,0xf4,0xe0,0x4d,0xd3,0xb0,0x2a,0x31, - 0xd0,0xb0,0x5e,0x2a,0x2a,0xe9,0xd0,0x9c,0xf2,0xbf, - 0x0c,0x95,0x8f,0xb4,0x9e,0xea,0x6c,0xb4,0xa0,0xa6, - 0x10,0x51,0x2d,0x8a,0xe8,0x0c,0x23,0xfb,0x0a,0x2d, - 0x8c,0x52,0x83,0x41,0x48,0x4b,0x00,0x3e,0x62,0x53, - 0x00,0x7b,0x69,0x91,0x5e,0x4d,0xdf,0x1b,0xb2,0x63, - 0x49,0xb4,0xa0,0x69,0xbe,0xfe,0x9e,0x35,0xba,0xa0, - 0x43,0x42,0x7a,0x51,0xb7,0x94,0x54,0xdd,0xb7,0xc7, - 0x08,0x78,0x94,0x54,0x0a,0x7d,0x4c,0x5e,0x05,0xce, - 0x81,0xd7,0x41,0xe0,0x17,0x4c,0x4c,0x90,0xe7,0x87, - 0xf3,0x00,0xd1,0x0a,0x96,0xee,0x0d,0x09,0xfb,0xdc, - 0x98,0x24,0xc0,0xfd,0x47,0x1e,0x11,0x8e,0x46,0xd6, - 0x9f,0xef,0xc5,0xd8,0x3d,0x4a,0xed,0x0a,0xd8,0x69, - 0xca,0xc2,0x75,0x77,0x44,0xb3,0x90,0x26,0x48,0x9d, - 0xb3,0xc3,0x02,0xae,0xe4,0x3e,0x9c,0xc6,0xc0,0xdd, - 0xb3,0x05,0x03,0xc0,0x28,0x8c,0x0c,0x1b,0x4d,0xd2, - 0x29,0xd8,0xe0,0xc4,0xe0,0x61,0x51,0xae,0xb8,0x34, - 0x41,0xc2,0x56,0xf7,0x43,0xef,0x04,0x08,0x52,0x8b, - 0xa6,0x79,0xcc,0x81,0x39,0x16,0x35,0xaa,0x73,0x52, - 0xad,0x8f,0xe8,0x78,0xc6,0x31,0xf6,0x7e,0xcd,0xae, - 0x43,0xef,0x07,0xb9,0x43,0xa9,0xc8,0xaa,0x00,0x3c, - 0x58,0x22,0xc5,0xaf,0xef,0xc3,0x3d,0xba,0x3e,0x05, - 0xb0,0xc2,0x67,0x6d,0x5a,0x14,0x30,0x2e,0xdd,0x0a, - 0x02,0xd2,0x32,0x74,0x71,0xf6,0xe4,0x9e,0xab,0x0d, - 0x5e,0xd2,0xca,0xd0,0x5e,0xa7,0x93,0x51,0x82,0xd2, - 0x91,0xb6,0x70,0x4a,0xee,0x2e,0xa7,0xa1,0x71,0x4d, - 0xda,0xb4,0xc7,0x3a,0xdb,0x0d,0x2a,0x7e,0xc8,0x88, - 0x93,0x04,0xd7,0xfa,0x7d,0x5c,0x88,0x2d,0x49,0x88, - 0x26,0x1f,0x31,0xf2,0xd5,0x9b,0x2c,0x62,0xdc,0x7d, - 0x49,0x9a,0x17,0x32,0x60,0x34,0x6c,0x4e,0x4d,0xde, - 0x3a,0xc4,0xca,0x1c,0x04,0x3c,0x3f,0x8a,0x47,0x45, - 0x8c,0x12,0x60,0x72,0xfa,0xd9,0x13,0x58,0x11,0xde, - 0x01,0xa6,0xc0,0x86,0x49,0x1d,0x7b,0x88,0x26,0x91, - 0x64,0xaa,0x36,0x53,0x00,0xab,0x73,0xe3,0x9c,0x16, - 0x96,0xf3,0x56,0x31,0xb9,0x56,0x08,0xcf,0xd2,0xa2, - 0x9e,0xcc,0xfd,0x26,0xdd,0x06,0x2d,0x70,0x72,0x21, - 0x75,0xe2,0x44,0xd7,0xc1,0xc1,0x35,0xc4,0xa9,0x83, - 0x34,0x46,0x6b,0xd2,0x74,0x09,0x66,0x2f,0x5a,0x60, - 0x4a,0xa1,0x11,0xb7,0x4f,0xe2,0xf5,0x96,0xc1,0xf5, - 0xb8,0x31,0xdd,0xfb,0x82,0x60,0x7e,0x42,0x73,0x12, - 0x74,0xeb,0xa0,0x6a,0xd0,0x76,0x45,0x74,0xf1,0x46, - 0x61,0xcc,0x94,0xc6,0x96,0x56,0x4f,0x5e,0x4a,0xb0, - 0xee,0xfb,0xa1,0x6c,0x3f,0x7b,0xe0,0xe0,0x1f,0x45, - 0x8a,0x1e,0xb2,0x37,0xaa,0x32,0xd1,0x9e,0x93,0x7b, - 0xb1,0xa3,0x71,0x7a,0xd1,0xa2,0x85,0xd2,0xb5,0xa7, - 0xb2,0x3f,0x0a,0xab,0xc9,0x0f,0x27,0x05,0x37,0x4e, - 0x34,0xb1,0x13,0x5b,0x76,0x64,0x80,0x8a,0x7c,0x3a, - 0xe0,0x53,0xb1,0x1a,0xd6,0x0d,0x8a,0xd2,0x1d,0x2a, - 0x78,0x80,0x72,0x6f,0xe8,0xac,0xd1,0xbe,0xd4,0x10, - 0x29,0xb2,0xbd,0xd7,0x3d,0x6f,0x2b,0x0d,0x0a,0xf4, - 0x09,0x33,0x67,0x68,0xe9,0x34,0x4c,0x2e,0x96,0x82, - 0x44,0xb8,0xa6,0x11,0xc3,0xec,0x2f,0xd0,0xad,0x60, - 0xc6,0x9d,0x16,0xed,0x22,0x90,0xb7,0x45,0x2e,0x15, - 0x32,0x7a,0xcf,0x5d,0x28,0xa8,0x6a,0xbd,0x7a,0xec, - 0x0f,0xa1,0x4b,0x6e,0xdf,0xd7,0x3d,0x12,0x8a,0xa2, - 0x02,0x4d,0x4d,0x42,0xe9,0x88,0x7a,0x8d,0x2c,0xc9, - 0x09,0x6d,0x3f,0x69,0xad,0x9c,0xae,0x6a,0xf2,0xd7, - 0x9b,0x8c,0x55,0x1d,0x05,0xf8,0x72,0x4a,0x70,0x72, - 0x91,0x4c,0x76,0xf1,0x17,0x4c,0x21,0xe9,0x42,0x71, - 0x63,0xc1,0x69,0xec,0x2d,0xb9,0x69,0x1a,0xd1,0xe5, - 0x11,0x4f,0x4a,0x8b,0x5e,0x3b,0x2d,0xd8,0x28,0x8f, - 0x26,0x06,0xd2,0xd4,0x12,0x75,0x34,0xd0,0xf9,0x9c, - 0x6c,0xa4,0xf8,0x92,0xc0,0xb4,0x52,0x42,0x9a,0x28, - 0x6c,0xd1,0x6a,0x17,0x94,0xaa,0x71,0x1a,0x2c,0x6a, - 0x9b,0x82,0x68,0xb0,0x42,0xa4,0x40,0xfc,0xcc,0x2b, - 0xbb,0xec,0x96,0x3a,0x55,0x93,0x46,0xc3,0xa1,0x22, - 0xed,0xba,0xed,0x67,0xb8,0xc3,0x9f,0x74,0x19,0x4d, - 0x2b,0xd3,0x51,0x93,0xa3,0xa0,0xc3,0x5e,0x38,0xa8, - 0xd6,0xc7,0x21,0x4a,0x44,0xb1,0xc9,0x81,0x3d,0x8e, - 0xf9,0xd3,0xa8,0x71,0x40,0x78,0xf1,0xfd,0x86,0x6b, - 0x8a,0x74,0x5d,0xd2,0xdf,0x9d,0xb8,0x55,0x3b,0x74, - 0x4c,0x0a,0x30,0xd7,0xf9,0xdb,0x83,0x4d,0xe9,0x60, - 0x97,0xbf,0x44,0xf7,0xe4,0x36,0xcf,0xa4,0x42,0xc2, - 0x14,0xe6,0x0f,0xb3,0xcd,0x40,0x0f,0x55,0xa2,0xe3, - 0xfa,0xfb,0x01,0x94,0xf7,0x36,0x71,0xe3,0xfe,0x46, - 0x68,0x12,0x8a,0x04,0xed,0x4a,0x9d,0x1a,0xd4,0x25, - 0xe6,0x5a,0x05,0x94,0xcd,0xd9,0x1e,0xd8,0x49,0x3e, - 0x37,0x6e,0x7f,0xa0,0x23,0x3d,0x45,0x1d,0xae,0x24, - 0x27,0x21,0x8d,0xa4,0xee,0xad,0x14,0xb0,0xea,0x62, - 0x2a,0xc8,0x13,0xc9,0x14,0x91,0x49,0x37,0x35,0x7a, - 0x6a,0x25,0xff,0xa7,0x89,0xee,0xa2,0x74,0x08,0xa7, - 0x43,0x52,0xa9,0x48,0x92,0x26,0xa4,0x86,0xc1,0xf9, - 0xed,0xd1,0xf5,0xbd,0xa8,0xb2,0x9e,0x68,0x29,0xa7, - 0xe2,0x4e,0x3e,0x42,0xa4,0x33,0xe8,0x9b,0x00,0xb9, - 0x19,0x4f,0x88,0x0b,0x1d,0xac,0x09,0xd2,0xa5,0x1b, - 0x78,0xaa,0x47,0x48,0x45,0xd0,0xff,0x23,0x84,0x3b, - 0xa5,0xbc,0x4e,0x8b,0x26,0x37,0x2d,0x44,0xa2,0x37, - 0x80,0xaa,0xed,0xe2,0x4f,0xc5,0x98,0x13,0xda,0x26, - 0xff,0x06,0xa5,0x14,0x69,0xe4,0x53,0x0a,0x06,0x74, - 0x54,0x15,0xfa,0x22,0x1d,0xe0,0x88,0x16,0xf5,0x11, - 0xfd,0x41,0x00,0x5e,0x37,0x22,0x35,0x04,0x20,0x6e, - 0x87,0x46,0x7f,0x7f,0x4c,0x77,0x92,0x28,0x63,0x2c, - 0x5a,0xef,0x35,0xd6,0x3b,0xf5,0x13,0xc1,0x66,0xd7, - 0x5d,0x5d,0xfb,0x18,0x7a,0x7c,0x9f,0x27,0xc8,0x7a, - 0x5a,0x5f,0xf4,0x79,0x14,0xa7,0x91,0x68,0xbc,0x84, - 0x46,0x99,0x42,0xa7,0x4e,0x20,0xf5,0xa0,0x13,0xda, - 0x8a,0x92,0x49,0x87,0xe8,0xd0,0x1e,0xa5,0x12,0xcc, - 0x28,0x74,0xcc,0x57,0xa2,0xf5,0x7c,0xda,0xb8,0x11, - 0x25,0x46,0x39,0x58,0x69,0xaa,0x8e,0x68,0x68,0xea, - 0xd6,0x49,0xc4,0x9d,0xc6,0xc1,0x65,0x8d,0x94,0x5b, - 0x4f,0xae,0x09,0x26,0xb1,0xb6,0x43,0x41,0x8c,0x6c, - 0xa0,0x44,0x93,0xf8,0x28,0x98,0xcc,0x01,0x5e,0x09, - 0xb1,0x30,0xfb,0xf5,0xe6,0xf7,0x33,0xa5,0x98,0xbb, - 0x7d,0xd7,0x80,0x0e,0x76,0x38,0x47,0xce,0xe9,0x82, - 0xf3,0xad,0x4e,0xa8,0x38,0x2a,0x4a,0x86,0x22,0xfc, - 0x11,0xc1,0x44,0xe7,0x59,0x7a,0xef,0x87,0xc6,0x0b, - 0x1d,0xc8,0x75,0x6d,0x7c,0x7f,0x7f,0xff,0x8c,0xc1, - 0x13,0xbc,0x48,0x5f,0x74,0x81,0xe3,0xe4,0x16,0xf2, - 0x79,0xe0,0x9e,0xdc,0xea,0x16,0x16,0x4c,0x02,0x15, - 0xb6,0x74,0x6c,0x2f,0x15,0x4c,0x14,0x69,0x40,0x0e, - 0xc4,0x97,0x09,0xf7,0xfc,0xfa,0xfa,0x7a,0x38,0x19, - 0xa7,0x54,0xeb,0x94,0xcb,0xe4,0x82,0x51,0x0d,0x6a, - 0xb6,0xcc,0xe7,0x53,0x78,0xa8,0x1d,0xa5,0xa7,0xe0, - 0xd4,0xfe,0xb7,0x5d,0x48,0xa1,0x1b,0x23,0xd7,0x94, - 0x78,0xe3,0xfd,0xb2,0xdc,0x58,0xb9,0xce,0xb9,0x1b, - 0x1f,0x87,0x45,0x09,0xd8,0xea,0x9a,0x6c,0xf4,0x63, - 0x2b,0x6c,0xf8,0x2b,0xd9,0xaa,0xbb,0xd0,0x58,0x53, - 0xa0,0xae,0x44,0x19,0x6a,0x30,0x2a,0xe9,0xc9,0x9a, - 0x28,0x7e,0xa5,0x82,0x55,0x1c,0x71,0x17,0xa0,0x96, - 0xa3,0x93,0xf0,0x05,0x41,0xa9,0xba,0x69,0x9b,0x44, - 0x65,0x3b,0x31,0x22,0xef,0xc5,0x9a,0x06,0x11,0x9c, - 0xc3,0x79,0x7a,0x27,0x4f,0x7e,0x6e,0x2a,0xb2,0x68, - 0xba,0xcb,0x1d,0x54,0x93,0xab,0xaf,0x13,0x4e,0xd2, - 0xbb,0x3d,0xd9,0x82,0x38,0xdf,0xa8,0x14,0x9d,0xe1, - 0xbe,0xc7,0xd7,0xd7,0x97,0xcd,0x4c,0x4a,0xf9,0x82, - 0x8e,0x52,0x27,0x84,0x5e,0x1b,0x5a,0xb5,0x7c,0x18, - 0x0e,0xd6,0x0a,0x7b,0x4e,0xd1,0xd8,0xb2,0x86,0x88, - 0xba,0xeb,0xa6,0x14,0x74,0xf7,0x4e,0xba,0x7b,0xa9, - 0x21,0xaa,0x09,0xd1,0x20,0x5d,0x56,0xb2,0xa0,0x70, - 0x4d,0x9b,0x9b,0xf0,0x4c,0xf6,0x14,0xf4,0xfd,0x93, - 0x9d,0x81,0x41,0xf6,0x8b,0xc6,0xcb,0x4f,0x86,0x85, - 0x86,0x7d,0xf0,0x51,0x18,0x39,0x7a,0xcb,0xd9,0x4e, - 0x34,0x0b,0x94,0xe8,0x5a,0xde,0x9f,0xd3,0xb0,0x4e, - 0x93,0x14,0xc4,0xca,0x5f,0x92,0x35,0x47,0x55,0xfd, - 0xaf,0x00,0x02,0xff,0x85,0x35,0x51,0x30,0xe9,0xe6, - 0xd1,0x64,0xc1,0x27,0x1a,0x1a,0x2d,0x10,0x26,0xfe, - 0x5b,0x16,0xa2,0xf5,0xed,0xd1,0xf4,0x77,0x2d,0xec, - 0x9c,0x78,0xab,0x17,0x03,0x9a,0x6e,0xee,0xbc,0x11, - 0x7a,0x1c,0x86,0x16,0x1b,0x04,0x1d,0xa7,0xa4,0x76, - 0xf3,0x20,0xd1,0x97,0x88,0x52,0xe9,0xb5,0x18,0x70, - 0x31,0x17,0x86,0x63,0x5e,0xa1,0x5b,0x5c,0x01,0x7d, - 0x73,0x45,0x30,0x5d,0xdb,0xe3,0x5e,0x9a,0x83,0xf0, - 0x11,0x07,0x01,0x1b,0xfc,0x22,0x3f,0x9f,0xf7,0x0f, - 0x2c,0xa0,0x0f,0xea,0xef,0xc7,0x2e,0x5a,0xbf,0xd5, - 0x0b,0x8a,0x94,0xa3,0x76,0xff,0xdc,0xa0,0x45,0xf8, - 0x29,0xdc,0xa6,0x4d,0xc7,0x68,0xd4,0x16,0xc1,0xbd, - 0x06,0x96,0x56,0x3e,0x7e,0x05,0x5e,0x3c,0xbe,0xb3, - 0xee,0xc0,0x4c,0x85,0x40,0x6a,0x64,0xdc,0xf7,0x36, - 0x48,0x0c,0x8a,0x57,0x5d,0x97,0x0b,0x7a,0x8e,0x8b, - 0x9e,0xd7,0x61,0xbc,0x41,0x4d,0x56,0xfc,0xc3,0x41, - 0x52,0x49,0x47,0x35,0xd9,0x54,0xb8,0x2e,0x58,0x0f, - 0xe6,0x54,0x7c,0x39,0xd4,0xd9,0x45,0xfd,0x04,0x83, - 0xb9,0x68,0x85,0xa1,0x03,0x0d,0x01,0xf1,0xc2,0xa2, - 0xd0,0x3d,0xcb,0xee,0xad,0x44,0x92,0x02,0xf7,0x6e, - 0x11,0x72,0xfe,0x46,0x56,0xca,0xc5,0x44,0x10,0xf2, - 0xd0,0x9a,0x36,0x44,0xd4,0x4d,0x21,0x30,0xea,0x55, - 0x40,0x23,0x77,0x84,0x8c,0xc3,0x7e,0xb0,0xfd,0xbc, - 0xf1,0xbd,0xa9,0xa9,0xc0,0x72,0xfa,0x30,0x72,0x89, - 0x77,0xe7,0x7f,0x47,0x42,0xd3,0x64,0x5e,0xa2,0x22, - 0x49,0xd7,0xea,0x98,0x21,0xf7,0x5e,0xa4,0xc8,0x1a, - 0x87,0x50,0xfd,0x14,0x5e,0x6e,0xc4,0xdd,0x3d,0x14, - 0x47,0xdd,0xa4,0x3f,0x44,0x26,0x7a,0x41,0xc0,0x8c, - 0xbe,0x2b,0x44,0x75,0xe8,0x0e,0xd3,0x27,0x15,0x02, - 0xac,0x56,0xc0,0x39,0x62,0xd5,0xd9,0xff,0xb6,0xf3, - 0xbf,0x20,0x38,0xf8,0x64,0x9c,0x11,0x44,0xc7,0x38, - 0x9d,0x96,0x68,0xaf,0x46,0x63,0x3c,0x9e,0x8b,0x3a, - 0x60,0x2b,0x85,0xa9,0x87,0x25,0x2d,0x9a,0xf4,0xd2, - 0x25,0x08,0xfe,0x10,0x86,0x2f,0xb0,0xed,0xdf,0x02, - 0xfd,0x40,0x13,0x83,0xcf,0xcf,0x8d,0x85,0xa6,0x75, - 0x94,0x78,0x7a,0x2a,0x10,0x5c,0xa4,0xc6,0xa0,0x29, - 0x41,0xb7,0xe8,0xb4,0xc1,0x87,0x49,0xc1,0x49,0x33, - 0xa6,0x62,0xe3,0x71,0x88,0x61,0x0a,0xf8,0x54,0xfd, - 0x91,0x26,0x82,0xa7,0x18,0x0d,0xe7,0x00,0xad,0xf7, - 0xc4,0xad,0x2d,0xb7,0xfe,0x89,0x46,0x3a,0xf1,0x6e, - 0x31,0x63,0xdb,0x31,0xfe,0x82,0xf4,0x46,0xe2,0x6e, - 0x8e,0xeb,0xd1,0x88,0x81,0xb7,0xa9,0xae,0x80,0x18, - 0x6f,0x14,0xa9,0xd3,0x63,0x5c,0xec,0x60,0x8c,0x87, - 0x8c,0xee,0xfb,0x21,0x10,0x73,0xfb,0x11,0xd0,0x71, - 0x14,0x0d,0x8d,0x90,0x5f,0x4f,0x9a,0x28,0x6e,0x81, - 0xbd,0x24,0xa6,0xa6,0xc1,0x95,0x0a,0xe1,0xd8,0x63, - 0x08,0x29,0xe9,0xd9,0x68,0x70,0xa4,0x5f,0x17,0x79, - 0x2c,0x39,0x24,0xc7,0xdd,0xf7,0x34,0x88,0x12,0xa8, - 0x4e,0x3c,0x8b,0x93,0x86,0xe6,0x8e,0x3f,0x72,0x66, - 0x96,0x2a,0x2d,0xd1,0xf7,0x06,0xbc,0x80,0xb6,0x67, - 0xaf,0x31,0x1f,0x61,0x9f,0x1a,0xcd,0x3c,0x1d,0xd2, - 0x48,0x75,0x43,0x02,0x6b,0x5e,0x50,0x49,0x6d,0x07, - 0x69,0xda,0x84,0xfa,0xff,0xba,0xc3,0xbc,0x1f,0x10, - 0xce,0x1b,0xe1,0x00,0xca,0x4c,0x95,0x64,0xa4,0x11, - 0x0e,0xc2,0xd2,0xec,0x14,0x82,0xea,0x65,0x4e,0x74, - 0x52,0xa9,0xa8,0x72,0x3a,0x1e,0x1d,0x0f,0x85,0x2a, - 0x3e,0x45,0x49,0x44,0x6b,0x79,0x37,0xcd,0x10,0x5e, - 0x6a,0x7c,0xf1,0x52,0x76,0x93,0xbb,0x9f,0x1d,0xf6, - 0x34,0x05,0x2c,0x71,0xe1,0x3f,0x54,0x81,0xa6,0x9f, - 0xd3,0xc4,0xc7,0xb4,0x41,0xe8,0xf7,0x73,0x85,0x4e, - 0xdf,0xa8,0x52,0xaa,0xbb,0x1c,0xde,0xd1,0xb9,0xf8, - 0x6d,0xd0,0x58,0xfd,0x7b,0x0c,0xc5,0xdb,0xb1,0xa1, - 0x57,0x1f,0x85,0x76,0xef,0x6d,0xf2,0xa7,0x11,0xaf, - 0x24,0x2d,0x40,0xb0,0x90,0x05,0x8f,0xa5,0xb8,0xce, - 0x87,0x91,0xef,0xa8,0x6b,0x22,0x37,0x79,0x2a,0x40, - 0x4e,0x8d,0x45,0x5d,0x03,0xe5,0xbc,0xa2,0xdc,0xa1, - 0x3e,0x64,0xa4,0x55,0xa0,0x0b,0xed,0x3f,0xeb,0xd3, - 0x82,0x54,0x28,0xc8,0x60,0x0a,0x4e,0x4e,0x52,0x14, - 0x0c,0xa0,0x64,0xb6,0x88,0x76,0x3e,0x6c,0xce,0x11, - 0xd8,0x4d,0xd2,0xe8,0x1e,0x4f,0xe2,0x6e,0x0a,0xa7, - 0x4c,0x0d,0x92,0x2b,0xb8,0x8c,0xe6,0xac,0x26,0xe4, - 0x65,0x32,0xdc,0x6d,0x54,0x63,0xd1,0x99,0x41,0x08, - 0x8c,0xbe,0x8b,0x8d,0x61,0x40,0xeb,0x98,0xb4,0x87, - 0xa6,0x70,0xf2,0x84,0x3e,0xbb,0xfd,0x90,0xac,0x63, - 0xa0,0x89,0x1e,0x8b,0xb2,0x93,0x73,0x40,0xf5,0xbb, - 0x4a,0x73,0xbb,0x29,0x56,0x42,0x9b,0x1c,0xad,0x95, - 0x9a,0xee,0x7b,0xdd,0x8a,0x06,0xb2,0x68,0x2a,0xed, - 0xf7,0x74,0x73,0x21,0xa2,0x61,0xd3,0xa8,0x38,0x0a, - 0x4d,0x33,0xbf,0xdc,0xe6,0x98,0xa2,0x22,0xc4,0xde, - 0x7e,0xd3,0xab,0x38,0x2d,0x87,0x81,0xd2,0x16,0xe9, - 0x98,0x5c,0x17,0xaf,0xdd,0x94,0xf8,0x09,0xad,0x49, - 0x6b,0x22,0xe6,0x4e,0x2b,0xc0,0xa2,0xe3,0x3d,0xed, - 0x9d,0x8f,0xfb,0xee,0xaa,0xad,0x51,0x8b,0x77,0xf7, - 0xdd,0x5f,0xaf,0x57,0x7d,0x7f,0x7f,0x2f,0x1d,0x6d, - 0x55,0x0f,0x1a,0x85,0x83,0xef,0x7b,0xdc,0x3b,0xb0, - 0xe6,0xf1,0xb4,0x82,0x1e,0x65,0x9d,0x50,0x7e,0x8e, - 0x46,0x53,0xe4,0x4d,0x35,0x68,0x62,0xc5,0xff,0xf8, - 0x9b,0x40,0x73,0x5a,0xaa,0x53,0xc7,0x48,0x95,0x32, - 0xa2,0x82,0x9c,0x68,0x45,0x15,0x9a,0xbb,0xc8,0x0c, - 0xa7,0x37,0x52,0x1a,0x4d,0xa3,0x43,0x4c,0xa8,0xa0, - 0x76,0x65,0xcb,0x15,0x3f,0xc9,0xae,0xde,0xe9,0x3c, - 0xe4,0x77,0xd7,0xc4,0xb5,0x4f,0xb4,0x02,0xc0,0xf6, - 0x48,0xe5,0xa5,0x90,0x56,0x97,0xd4,0x4d,0x88,0x99, - 0xa2,0x21,0x34,0x16,0xed,0x1a,0xbd,0x20,0xb0,0xb7, - 0xe8,0x48,0xd2,0xfc,0x19,0xca,0xf5,0xd2,0xe2,0x58, - 0xff,0xd6,0x2d,0xf6,0x9f,0x44,0xb0,0x7a,0x70,0x91, - 0x2f,0x8c,0x43,0xee,0x5d,0x74,0x00,0x15,0x79,0xea, - 0xdb,0x06,0x45,0x4c,0x25,0x9d,0xcb,0x15,0x86,0x28, - 0x7a,0xa0,0x65,0x42,0x8e,0x1d,0x9a,0xd0,0x9f,0xab, - 0x36,0x7b,0x49,0xb0,0xad,0xf7,0xf5,0xbd,0x37,0x5e, - 0xd3,0x14,0xac,0xd1,0x00,0x46,0x76,0x02,0x62,0x83, - 0x2c,0x25,0xaf,0x6b,0x83,0x50,0xb1,0xd6,0xb4,0x61, - 0x01,0x95,0xf2,0xd0,0x8c,0xdc,0xa0,0x52,0xba,0xfa, - 0x44,0xbd,0x85,0x69,0xee,0x6d,0x0d,0x24,0x4b,0x08, - 0xa7,0x05,0x1c,0xe8,0xc2,0x4d,0x90,0x3e,0x48,0x6a, - 0x1e,0xd7,0xf3,0x4a,0x9d,0x92,0x42,0xb6,0x49,0xad, - 0x4d,0x22,0xd5,0x04,0xff,0x4d,0x1a,0x08,0xa2,0x8b, - 0x5c,0x17,0xad,0x63,0x6f,0x07,0x1b,0x6f,0x25,0xee, - 0x3e,0xd1,0x3a,0x3a,0xe6,0x1a,0xac,0xe0,0x11,0x82, - 0x4c,0x81,0x9d,0x4a,0xe9,0xc1,0x61,0x67,0x6d,0xea, - 0xdd,0x81,0xa0,0x66,0x73,0xba,0xd1,0x49,0x71,0x41, - 0x49,0xf7,0xe5,0xa6,0x98,0x1c,0xfc,0x9c,0xba,0x70, - 0x45,0x3e,0x26,0x21,0xa8,0x5b,0xd8,0x7d,0xfc,0x9b, - 0x60,0xd9,0x69,0xb4,0xf8,0x3a,0x98,0xf2,0x9a,0xe8, - 0x93,0xab,0x8d,0xaf,0x6b,0xd8,0xaf,0x79,0xac,0x95, - 0xe8,0x4b,0xa1,0x26,0x2b,0xd8,0xfa,0xdb,0x49,0x08, - 0xb9,0x9e,0x22,0xed,0x4c,0x7a,0xef,0x82,0x9e,0xee, - 0x8e,0x65,0xb0,0x3e,0x37,0x43,0xee,0x9f,0x2d,0x2e, - 0x94,0x36,0x20,0x9a,0xe9,0xc4,0x7f,0xab,0x23,0x7c, - 0xc6,0x7b,0x08,0x5d,0x70,0x09,0xa1,0xd1,0xc2,0xfb, - 0xa6,0x90,0x2f,0x71,0x2c,0xa7,0x02,0xcc,0xdc,0x03, - 0x6b,0x15,0x11,0x50,0x80,0x48,0x75,0xb6,0xfb,0x87, - 0xc1,0x9f,0x1a,0xaf,0x70,0x0d,0xde,0x44,0xc9,0x1b, - 0x48,0xf7,0x9f,0x84,0xd2,0xab,0x6b,0x6f,0x43,0x84, - 0x91,0x96,0x0b,0x56,0x21,0x16,0xc9,0x27,0xfa,0x45, - 0xd1,0x74,0xf2,0x6a,0x4a,0xc5,0x39,0x15,0x0d,0x94, - 0x69,0x39,0xf9,0x50,0x19,0x86,0x85,0x22,0x7a,0x08, - 0xe1,0x43,0x4a,0xd0,0xa4,0x0f,0x6c,0xfb,0xb8,0xac, - 0xf7,0xa3,0xcc,0x4f,0x91,0x90,0xd8,0xc6,0xc8,0xed, - 0x7b,0xed,0xf7,0x4b,0x65,0x28,0xc3,0xa4,0xec,0x91, - 0x07,0xd9,0xc9,0x7e,0xa3,0x61,0xeb,0x57,0xb6,0x4d, - 0xf9,0x3b,0x05,0x96,0x74,0x30,0xc3,0x01,0xb0,0x5c, - 0xc1,0xe4,0x68,0x8c,0xa4,0x75,0xe8,0xd5,0x9c,0x13, - 0x30,0x3b,0xe4,0x60,0xea,0x3a,0x75,0x6a,0x0a,0x46, - 0xed,0x1d,0xe4,0xf6,0x23,0xac,0x95,0x7b,0x81,0xd3, - 0x5f,0xe4,0x6b,0x12,0xfe,0xfe,0xf6,0x59,0x34,0x41, - 0xa0,0x93,0x3a,0xbd,0x4b,0xe8,0x7f,0x83,0x90,0xa3, - 0x30,0x31,0xb3,0x26,0x31,0x38,0x21,0x74,0x40,0xa1, - 0x2d,0xa0,0x15,0x57,0x28,0xd2,0x36,0x04,0x4f,0x7f, - 0xd7,0x3d,0xdb,0x5b,0xd8,0xa8,0x7f,0xd3,0x21,0x50, - 0xa1,0x2b,0x78,0x3c,0x03,0x42,0x65,0x7a,0x30,0x6a, - 0x40,0x19,0x56,0x8a,0x98,0x90,0x97,0x31,0xae,0x61, - 0x2d,0x6e,0x3b,0x22,0x36,0x70,0xfe,0x56,0x4b,0xf1, - 0xde,0x28,0x17,0x85,0x93,0x6a,0xd7,0x39,0xe5,0x90, - 0x51,0x41,0x4e,0xbf,0x73,0x99,0x00,0x60,0xa2,0xde, - 0x21,0xb8,0x76,0xfa,0xae,0xc7,0x48,0x14,0xa1,0x3d, - 0xe9,0x50,0x4a,0x9f,0x99,0xa6,0xc9,0x48,0xe8,0x1b, - 0x3a,0xd4,0x4a,0x68,0x8f,0x4b,0xc1,0x3e,0xc8,0x4e, - 0xaa,0x81,0x56,0xb1,0x1e,0x34,0x34,0xe5,0x45,0xae, - 0xc7,0xa9,0x79,0x26,0xdd,0x9c,0x43,0xe8,0xdc,0xfd, - 0x18,0x82,0x86,0xad,0xd3,0xbc,0x0e,0x45,0x4c,0x6b, - 0xf6,0x62,0x0f,0xa5,0x4a,0x43,0x01,0x27,0xa3,0xfd, - 0xed,0xfd,0xaa,0xe4,0x02,0xee,0x50,0x5b,0xb7,0xc6, - 0xc9,0x40,0xd0,0x79,0xa8,0x9d,0x14,0x15,0xb7,0x9d, - 0x07,0xbd,0xbf,0xd3,0xfb,0x77,0xf2,0xcc,0xf4,0x7d, - 0x10,0x63,0xcd,0xe8,0xfb,0xd3,0xf7,0x41,0x03,0x6e, - 0x94,0x16,0x3f,0x34,0x32,0xef,0xf6,0xd8,0xdf,0x57, - 0xc8,0x4a,0xd2,0x83,0x92,0x84,0x69,0xf7,0x39,0xe2, - 0xb2,0xbb,0x74,0xb3,0xd7,0xe9,0x23,0x18,0xdf,0xdc, - 0x7e,0x8f,0xc2,0x1c,0x7b,0x71,0xf2,0xfd,0xfd,0x4d, - 0x93,0x6b,0x05,0x07,0x48,0x05,0x1a,0xc3,0x7e,0xaf, - 0xcb,0x8c,0xc6,0xf7,0xe2,0x68,0x82,0x01,0x0d,0x67, - 0xef,0x0e,0xe0,0xed,0x7a,0x5d,0x31,0x67,0xe0,0xf5, - 0x75,0x9a,0x6c,0x4e,0x14,0xa7,0x9b,0x3e,0xa3,0x02, - 0xc9,0x75,0x44,0xae,0x78,0x6a,0x1d,0xd9,0x82,0x08, - 0x92,0xc7,0xb8,0xbb,0xe9,0x9e,0x57,0x40,0x06,0xb7, - 0xf5,0x69,0xcc,0x0d,0x71,0xe2,0xaa,0x4f,0x79,0xb9, - 0x11,0x52,0xd1,0x67,0xad,0xdc,0x98,0x3c,0x0f,0xfc, - 0x60,0xca,0xd9,0xdf,0x39,0xba,0x97,0x48,0x91,0xa9, - 0x6d,0x80,0x83,0xb4,0xc9,0x61,0xbb,0x21,0x1b,0x2b, - 0xf0,0xf7,0x5b,0x91,0x4d,0x88,0x95,0xe3,0xf5,0x27, - 0x9f,0x95,0x29,0xf1,0xba,0x8d,0x2e,0x63,0x48,0x25, - 0xfd,0x3d,0xa5,0x91,0x3e,0xa0,0xe6,0x6a,0x70,0xe1, - 0x1e,0x0b,0xd6,0x7e,0x28,0xb9,0xd4,0x7b,0xd2,0x95, - 0xd1,0xb0,0xc5,0x24,0xd8,0x0f,0x28,0x75,0xb9,0xcf, - 0x91,0xe7,0x59,0x09,0x21,0xd4,0x83,0x5c,0xbf,0xaf, - 0xe6,0xfe,0x25,0x27,0x5f,0x27,0xac,0x25,0x8a,0x88, - 0x28,0x1f,0x97,0xf0,0x7d,0x42,0x95,0x11,0xfd,0x66, - 0x9a,0x1c,0x44,0x5f,0xa6,0x22,0x47,0x0e,0xdb,0x82, - 0xc2,0xa5,0x68,0x8a,0xd1,0x59,0x19,0x24,0x4f,0xa1, - 0x8e,0x16,0x75,0x29,0x00,0xa1,0xd6,0x03,0x23,0x53, - 0x53,0x13,0xe5,0x46,0xee,0x75,0x2d,0xf4,0x66,0x8a, - 0x0a,0xa8,0x30,0xbd,0x5d,0xda,0xec,0xd3,0xbb,0xaf, - 0x75,0x80,0x7e,0x57,0x75,0xd1,0x1e,0xac,0x2b,0xea, - 0x45,0x53,0x1f,0x26,0xbb,0x28,0x6e,0x20,0x29,0x20, - 0x35,0x6d,0x26,0x24,0x1c,0x4e,0x8b,0xdc,0x39,0x4a, - 0x3b,0xde,0x37,0x25,0xc3,0xba,0xa4,0xee,0xc9,0xc1, - 0x76,0x32,0x86,0x73,0x09,0xc6,0x0e,0x7a,0x9c,0x2c, - 0x00,0xdc,0xa1,0xa1,0xe1,0x9f,0xee,0x40,0x77,0x9b, - 0x8a,0x83,0x84,0x53,0xfe,0xda,0xc4,0x0f,0x4e,0x14, - 0xde,0x65,0x42,0x5a,0x53,0x37,0xe5,0x46,0x58,0xd3, - 0xef,0x05,0x98,0x3c,0x19,0x3b,0x5a,0xa1,0xb1,0x43, - 0x34,0x06,0x27,0x71,0x14,0xd3,0xb9,0x69,0xa0,0x89, - 0xee,0x70,0x34,0x9a,0xd3,0x87,0xc0,0x21,0x58,0xd4, - 0x9d,0x26,0xaa,0x43,0x36,0xc4,0x2d,0xfd,0x5d,0x9b, - 0x8c,0xfe,0x5e,0x3b,0xa3,0x53,0xb2,0xcd,0x4f,0x91, - 0x38,0x7a,0x68,0xe8,0xf5,0xf5,0xcf,0x74,0x42,0xdc, - 0x29,0xd7,0x6b,0x2a,0xb4,0x6e,0xcd,0x89,0xa6,0xba, - 0xd3,0xef,0x24,0xf1,0x76,0x77,0xd5,0x9e,0xa8,0x4d, - 0x97,0x07,0xe7,0xbe,0x37,0x50,0x28,0x48,0x63,0x19, - 0x87,0x6f,0x44,0x29,0x48,0xeb,0xe3,0x62,0x67,0x86, - 0x7d,0xbc,0xc2,0x79,0x81,0xd4,0x09,0xed,0x87,0x61, - 0x5f,0x40,0x11,0x32,0xc9,0x0a,0x4c,0x23,0x53,0xc3, - 0x3b,0x88,0x9a,0x38,0xc8,0xdc,0x2a,0x38,0x13,0xc8, - 0x56,0xa0,0x9c,0x24,0x41,0xbf,0x93,0xa1,0x2d,0xb7, - 0x42,0xc0,0x69,0xe2,0xa6,0xf3,0xca,0x65,0x4f,0x4e, - 0x14,0xd3,0xc9,0x24,0xa4,0x91,0x9b,0xfc,0xd8,0x0d, - 0xf4,0x62,0x8e,0xa6,0xe1,0xdc,0x5e,0x61,0x0c,0x5c, - 0xb1,0x50,0x76,0x99,0x93,0x64,0x12,0x49,0xd7,0xfd, - 0x72,0x51,0xf4,0x69,0x31,0x52,0x01,0xe4,0x3a,0x4f, - 0x77,0x91,0x04,0x6d,0x39,0x9d,0x8c,0xaa,0xc5,0x9d, - 0x29,0x59,0x4a,0x9a,0x4d,0xaa,0x78,0xb2,0xc7,0x06, - 0x0f,0x98,0xb1,0x0b,0xa3,0x6e,0xec,0xa0,0x08,0x7a, - 0x38,0x81,0xba,0x4d,0x86,0x2c,0xd2,0xf5,0xef,0xa4, - 0x74,0x6f,0xe7,0xd4,0xea,0xc6,0xcb,0xfb,0x8b,0x45, - 0xf7,0x39,0x4d,0x6c,0x68,0x27,0x6c,0xba,0x5a,0xf4, - 0x78,0xd0,0xcf,0x94,0x8e,0xa8,0xa8,0xfb,0xa3,0x67, - 0x0c,0xf4,0xaa,0x0b,0x03,0xec,0x74,0x5c,0x0d,0x26, - 0x79,0x95,0x1a,0x82,0xd4,0xe5,0x26,0x6f,0x2c,0xfa, - 0xdc,0x83,0xf1,0xd2,0x22,0xb7,0xe9,0x94,0x2f,0x46, - 0x94,0xd3,0x25,0xa3,0xe9,0xb4,0xb1,0xea,0xc1,0x6d, - 0xe2,0x08,0x70,0x93,0x3b,0x3d,0x8c,0x00,0x11,0x8c, - 0xf4,0x57,0x30,0x88,0xdc,0xa6,0xde,0x28,0x50,0xd2, - 0xad,0x1d,0x18,0x23,0xdf,0x26,0xc8,0x0e,0x90,0xa3, - 0xba,0xb2,0x3f,0x0e,0x3d,0x93,0x69,0x3f,0x2e,0xa7, - 0x07,0x04,0x44,0x7f,0xfb,0xbe,0x49,0x2f,0x44,0x01, - 0xc9,0x44,0xeb,0x75,0x31,0xaf,0x79,0xf6,0xf5,0x69, - 0x23,0xa3,0xcf,0xda,0x45,0x20,0x05,0x57,0xf1,0x87, - 0x36,0x49,0x9a,0xdd,0xfa,0xa0,0x20,0xf8,0xf9,0x3c, - 0xca,0x22,0x9c,0x8c,0x6f,0x49,0x3b,0x4a,0x0d,0xeb, - 0x44,0x6d,0x3b,0x7d,0x8f,0x43,0x93,0xdc,0xfa,0x1d, - 0x28,0xc6,0x2d,0x0b,0xce,0xed,0xed,0x13,0x78,0x72, - 0x5f,0x87,0xb1,0x58,0xb0,0x05,0x20,0x05,0x94,0xbb, - 0x73,0x9d,0xa8,0x74,0xa7,0x49,0x73,0x7b,0xd2,0x36, - 0x05,0xa6,0x5a,0x0c,0xe3,0xf2,0xb8,0xb9,0xf2,0xaa, - 0xfe,0x23,0xbc,0xc8,0xe8,0x02,0xed,0x28,0x36,0xb7, - 0xc1,0x12,0x4f,0x6f,0xb8,0x52,0xab,0x6d,0xa1,0x51, - 0xfb,0x4e,0x85,0x85,0x44,0x5c,0x67,0xa4,0x47,0x53, - 0x70,0x9b,0x4e,0x89,0xa6,0xea,0x12,0xe5,0x95,0xb4, - 0x59,0xea,0x92,0xec,0x28,0xba,0x40,0xf7,0x2c,0xe2, - 0xe1,0x1d,0xb5,0xd7,0x29,0x24,0x88,0xab,0x58,0xe1, - 0x45,0x25,0x77,0xef,0x8d,0x7a,0xec,0x71,0x0c,0xb7, - 0xee,0x06,0xf4,0x04,0x91,0xd2,0x0a,0xb4,0xa2,0x42, - 0xc1,0x2b,0x74,0x38,0x47,0x94,0xd7,0xfd,0x39,0x6e, - 0x94,0xd3,0x41,0xf6,0x37,0xed,0x34,0x88,0x7b,0xfb, - 0x46,0xba,0x4e,0x0d,0xfe,0x5c,0x37,0xe9,0xa8,0xb2, - 0x70,0xdf,0xb0,0xe0,0x4b,0xef,0x5e,0xd2,0xf8,0xe8, - 0x81,0x95,0x8c,0x0d,0xe9,0xf7,0x53,0x51,0x45,0x5d, - 0xe5,0x89,0x2f,0x15,0x38,0x96,0xa3,0xe7,0xcb,0x15, - 0x7c,0xaa,0x0e,0x8a,0x99,0x94,0xa1,0x68,0xd1,0x95, - 0xd3,0x67,0xa5,0x82,0x77,0x42,0x38,0xb5,0x38,0x82, - 0xa2,0xb8,0x52,0x11,0xa7,0x79,0x5d,0x53,0x7e,0x62, - 0xf2,0x0e,0x32,0xcd,0x72,0xa5,0x6b,0x4f,0x34,0x46, - 0x7a,0x97,0x42,0x41,0x5a,0xb4,0x47,0xd3,0x9a,0x0a, - 0x8d,0x4f,0xc1,0x99,0xb9,0x4d,0xf2,0xdd,0x13,0xb7, - 0xfd,0xba,0xcd,0x59,0x49,0x13,0x8b,0x31,0xeb,0x0b, - 0x9e,0x4b,0xc1,0x14,0x68,0x25,0x8a,0x4a,0xff,0xb9, - 0x43,0x17,0x95,0x52,0x4d,0x1a,0x9e,0xd4,0xb0,0x04, - 0xad,0x58,0x41,0x11,0x6f,0x0b,0x31,0x62,0x1a,0x80, - 0x8e,0xac,0x87,0x0f,0x10,0x55,0x7c,0xc1,0xc6,0xdc, - 0x42,0x66,0x69,0x1c,0x54,0x6f,0xa8,0xb3,0xa9,0x26, - 0x95,0x3d,0x2d,0xe0,0x49,0x40,0x3c,0x2d,0x54,0x77, - 0x43,0x01,0x12,0x75,0xd5,0xed,0xa6,0xdc,0x6f,0x13, - 0x23,0xa9,0x3a,0x75,0x15,0x6d,0x39,0xaf,0x06,0x9d, - 0xce,0x20,0xa3,0x42,0xfd,0x9e,0x01,0x1a,0xfd,0xc8, - 0x48,0xaf,0xd3,0x84,0x27,0x89,0xbd,0x0e,0x09,0x22, - 0xf8,0x32,0xdd,0x1f,0xe7,0x23,0xe1,0x0e,0x14,0x5d, - 0x47,0xef,0x8e,0xe3,0x81,0x88,0x80,0x11,0x5a,0x32, - 0xe5,0xb4,0xa9,0xd8,0xa4,0xe7,0x71,0x28,0x9a,0xfb, - 0x1d,0x97,0x6e,0x4e,0x94,0x90,0x84,0xb3,0x56,0x5a, - 0x93,0xe1,0xb0,0xdf,0x7c,0x7e,0xa4,0x9b,0xc5,0x41, - 0x00,0x1a,0xad,0x75,0x90,0xb2,0xf8,0xe9,0x6c,0x28, - 0x92,0x4b,0x83,0xd7,0x04,0xf8,0xeb,0x39,0xc1,0xf6, - 0xf8,0xff,0xfa,0xcf,0x7a,0x0e,0xd7,0xd4,0x75,0xa7, - 0x02,0x45,0x69,0x9f,0x8e,0xc2,0xd6,0x13,0x0e,0xac, - 0x93,0x7d,0x30,0x20,0x6a,0xa3,0x89,0xe9,0x8d,0xb8, - 0x5e,0x21,0x94,0x55,0x33,0xaf,0xae,0x30,0x01,0x26, - 0xfb,0x72,0x0d,0x34,0xc9,0x16,0xe6,0xda,0x2d,0x26, - 0xe8,0x7d,0x75,0x7a,0xa1,0xe0,0x83,0x46,0xa6,0x83, - 0x8f,0x3d,0xce,0xbc,0x3b,0x15,0x0c,0x6b,0x6b,0xd2, - 0xd9,0x51,0x31,0xab,0xfb,0xe9,0xa0,0x13,0x7a,0x14, - 0x9a,0x4e,0x5b,0x06,0xfb,0xe3,0xd6,0x3c,0xc8,0x84, - 0xd2,0x35,0x19,0x92,0xa6,0xa9,0x65,0x37,0x3d,0xa5, - 0x5e,0x78,0xa1,0xb1,0x89,0x3e,0x75,0x6e,0xa2,0x15, - 0xc4,0xd8,0x78,0xa6,0x10,0xfd,0xa6,0xfb,0xb8,0x2b, - 0x52,0x09,0x19,0x22,0xa4,0xf8,0xa4,0xb9,0x70,0x7b, - 0xe4,0x6f,0x87,0x5e,0x50,0x45,0x48,0xd9,0x51,0x04, - 0x69,0x7e,0x20,0x08,0x56,0x4b,0x9b,0x11,0x35,0x49, - 0xa1,0xac,0x13,0x6a,0xa1,0x08,0x81,0x5b,0x10,0x94, - 0x99,0x75,0x92,0xab,0xe2,0x26,0x83,0xe4,0xa5,0x75, - 0x28,0xcc,0x23,0x63,0x4c,0xe0,0xcc,0x0d,0xa1,0xea, - 0x62,0xed,0xcb,0x88,0x6e,0xdf,0x1a,0x87,0x35,0x79, - 0xe1,0xe8,0xa2,0x7b,0xbd,0x5e,0x0b,0x68,0xc9,0x34, - 0xb5,0xb6,0x4d,0x03,0xca,0x66,0xb3,0xc2,0xf4,0xc3, - 0x72,0x82,0x39,0x12,0x7d,0x6b,0x67,0x33,0xa1,0x34, - 0x97,0x89,0xb9,0x30,0x0e,0xd1,0x8b,0xd0,0x15,0x42, - 0x83,0xb4,0xb0,0x6a,0x07,0xc8,0x9a,0x0a,0x9c,0x86, - 0x26,0xac,0x0f,0xa2,0x62,0xb6,0x58,0x0f,0x7a,0xc9, - 0x93,0xf1,0x5b,0xfb,0x8e,0x2b,0xc5,0x56,0x80,0xc3, - 0x30,0x22,0x5d,0x4e,0xec,0xaa,0xef,0x26,0xb9,0xcc, - 0xd2,0x88,0x3f,0xf9,0xf0,0x9c,0x6a,0x9d,0x52,0x81, - 0xe8,0x92,0xb4,0x75,0xf2,0x92,0xf4,0x47,0x43,0xe3, - 0x60,0xd1,0x1b,0x12,0xd8,0xd3,0x41,0x19,0xf6,0xd4, - 0x4a,0x0e,0xf1,0x34,0xbd,0x15,0x84,0xa9,0x48,0x2b, - 0xbf,0xd1,0x8a,0x3a,0x08,0xd4,0xad,0x74,0x10,0x39, - 0x2a,0xdd,0x69,0xef,0x1c,0x7a,0x1a,0x0e,0xb6,0xad, - 0xe1,0xd6,0x18,0x98,0x44,0xcf,0x9d,0xae,0x1b,0xfa, - 0x1d,0xd7,0xa8,0x09,0xb2,0x58,0xc4,0x42,0xdc,0xb4, - 0x1c,0xfd,0x1d,0xca,0xae,0x4b,0xc1,0xce,0x9f,0x4c, - 0x83,0x9d,0x22,0x92,0x42,0x3b,0x16,0x30,0x2e,0x57, - 0x02,0x22,0x12,0xb5,0x3d,0xd1,0x8e,0x61,0x0f,0xb0, - 0x93,0x8d,0x69,0x5f,0x20,0xd0,0xe0,0x45,0x0f,0x81, - 0x22,0x1a,0x08,0x2e,0xee,0x15,0x39,0x24,0x64,0xd7, - 0x27,0x1a,0x19,0xe2,0x0f,0x27,0x34,0x43,0x05,0xd1, - 0xa9,0xb3,0x57,0xd4,0x8b,0xba,0x06,0x97,0x24,0xeb, - 0x74,0x32,0xaa,0x87,0x70,0x1c,0x6b,0xea,0x34,0x5c, - 0xa7,0x95,0x16,0xf4,0x90,0xc3,0xb3,0xf9,0x23,0x49, - 0x01,0x55,0xd0,0x99,0xd8,0x14,0x6a,0x57,0xb1,0x53, - 0x3e,0x91,0xeb,0xf0,0x2e,0x4e,0xb2,0xaf,0xb4,0x6e, - 0xba,0xb0,0x0e,0xf8,0xe1,0x52,0xd1,0x9b,0xa2,0x71, - 0x6d,0x64,0xde,0x3d,0xf3,0xc7,0x7d,0x52,0xed,0x92, - 0x44,0x89,0x8c,0xa3,0xdf,0x6f,0x8f,0xa2,0x23,0xaf, - 0x11,0x41,0x4d,0x62,0x51,0x63,0xdc,0x7e,0xad,0xeb, - 0xef,0xa7,0x9f,0xd3,0xaf,0x21,0xa5,0x8f,0x4f,0x07, - 0xf3,0x74,0x90,0x24,0xca,0xc7,0x15,0x5c,0x66,0xbd, - 0x6e,0x4e,0xbb,0x93,0x46,0x08,0xae,0x61,0x8b,0xdf, - 0xb8,0x4c,0x7c,0x4f,0x8a,0xbc,0x00,0xcf,0x9e,0x72, - 0x66,0x79,0x29,0x67,0x8b,0x04,0xd8,0x41,0x17,0x52, - 0x29,0x12,0x47,0x04,0xf8,0x68,0x8e,0xd8,0x8a,0xa3, - 0xa2,0x48,0x13,0x7d,0xa7,0xc1,0x02,0x60,0x5b,0x83, - 0x06,0xc5,0xb5,0x0e,0xce,0x7d,0x8a,0x0c,0xf4,0x23, - 0x75,0xb2,0xef,0x9b,0x69,0xbf,0xa4,0x97,0x2a,0x28, - 0x66,0x8b,0xb4,0xaa,0x29,0x5d,0xbc,0xa3,0x1b,0x27, - 0x1a,0x1e,0x45,0x92,0x1c,0x62,0xd5,0x91,0x56,0xca, - 0x6c,0xeb,0x7b,0x5b,0x4a,0x80,0xa7,0xfc,0xb6,0x10, - 0xe4,0x4b,0xc5,0x61,0x91,0x2e,0x67,0x42,0xcd,0x9c, - 0x15,0xce,0xe4,0x6f,0x74,0x81,0xe7,0x94,0x43,0xa8, - 0xdc,0xbf,0xa7,0x66,0xc9,0x21,0x6b,0xaf,0x01,0x42, - 0x77,0x07,0xad,0xad,0x1e,0xfb,0x22,0x54,0x38,0xd0, - 0x99,0x12,0x91,0x39,0x19,0xc0,0x81,0x15,0xa8,0x85, - 0x72,0x2e,0xc6,0xee,0x05,0x4e,0x26,0x68,0xa6,0x93, - 0x47,0xd8,0x7c,0xb2,0x42,0x9f,0x8a,0x38,0xea,0x60, - 0x5c,0x71,0x91,0x8a,0x20,0x97,0xad,0xe2,0xc4,0xdf, - 0x0e,0x35,0x53,0x88,0xf4,0x24,0xf6,0x84,0xba,0x14, - 0x73,0xb8,0x8c,0x07,0xe0,0x64,0xb7,0x6e,0xf2,0x92, - 0x6c,0x24,0x83,0x1c,0xe6,0xb8,0xe0,0xd3,0x33,0x6a, - 0x2e,0xa4,0x45,0xc8,0xa2,0x99,0xc0,0x42,0xcd,0x47, - 0x2f,0xec,0x92,0x80,0xd7,0x15,0x24,0xc3,0xbb,0x67, - 0x85,0x94,0x5d,0x40,0x3d,0x15,0x04,0xa4,0x17,0x11, - 0x3d,0x41,0x95,0x51,0x84,0x27,0x71,0x73,0x0a,0x28, - 0x56,0xd8,0x3f,0x14,0xff,0xa3,0x46,0x88,0x7e,0x2e, - 0xa0,0x66,0x45,0x54,0x62,0x42,0x89,0x8c,0x07,0x98, - 0x2d,0x7a,0xe8,0xb0,0xd5,0x21,0x0b,0x31,0xfd,0x8b, - 0x43,0x27,0x46,0x77,0x52,0xa0,0x2d,0xb2,0x4e,0xcf, - 0x69,0xfa,0xe5,0x32,0x22,0xf0,0x50,0x24,0x6e,0x7b, - 0x19,0x25,0xa2,0x9f,0x20,0x61,0x5a,0xa4,0xb9,0xbd, - 0xa1,0xeb,0x00,0xf5,0xdf,0x39,0x13,0x57,0xd2,0xc8, - 0x98,0x82,0xb5,0x1c,0x6d,0x34,0xf8,0xd4,0x51,0x03, - 0x6b,0xdd,0x87,0x29,0x86,0xc6,0x15,0x39,0x6e,0x7a, - 0x19,0x9a,0x8c,0x9a,0x8c,0x40,0x13,0x88,0x31,0x15, - 0xd7,0x89,0x32,0x4c,0x59,0x99,0x74,0x46,0x86,0xf8, - 0x1e,0x2c,0x7e,0x4e,0xf2,0xfe,0xe8,0x3f,0x82,0x2a, - 0xd7,0xb0,0xbf,0x6d,0xe7,0xe7,0x2b,0x5d,0x44,0x80, - 0x57,0xd3,0x58,0x7c,0x91,0x31,0x22,0xfd,0x1d,0x47, - 0x3d,0x0c,0xc8,0x0f,0x6e,0x1a,0xe1,0x80,0xd9,0x8a, - 0xb1,0x13,0xba,0xce,0xb9,0x5f,0x12,0x24,0x4b,0x39, - 0x41,0x69,0xb3,0x49,0x3c,0xac,0x1b,0xf5,0x77,0xe6, - 0x6a,0xa9,0xb8,0x74,0x5d,0xc7,0xa9,0x1b,0x6d,0xd0, - 0x39,0x60,0xe7,0x48,0x07,0x64,0xd7,0x38,0x90,0x31, - 0x57,0x4a,0x81,0x3e,0xe9,0x6a,0xdf,0x45,0x4c,0x42, - 0x24,0x10,0xe1,0xe8,0x36,0x03,0x8e,0x4f,0x77,0x53, - 0x40,0xf4,0xfc,0x28,0x7b,0x29,0x4d,0x2f,0xb8,0x43, - 0xdb,0xdd,0xe3,0xb4,0xb9,0xdc,0xbf,0xfb,0x76,0x6c, - 0xb6,0xef,0x20,0x69,0x7e,0x40,0x9b,0xb1,0x69,0x89, - 0xf4,0xbf,0xee,0x86,0xba,0x18,0x92,0xc1,0x15,0x7c, - 0x2b,0x3e,0xfa,0x75,0x38,0x2f,0x1b,0x19,0xfb,0x7e, - 0x14,0x39,0x6e,0x62,0x90,0x0c,0x17,0x13,0xdd,0xa6, - 0xef,0x43,0x2a,0x7e,0x49,0x3c,0x4d,0x63,0xef,0x07, - 0xc6,0x88,0xe5,0x04,0xac,0xb4,0xc7,0x9c,0x34,0x1e, - 0x0e,0xe9,0x4c,0x8d,0x99,0x43,0x2d,0xb5,0x08,0xe9, - 0xff,0xd5,0x11,0xee,0x09,0xe9,0x80,0xc6,0xc8,0x6a, - 0x1e,0x9d,0x5f,0x8c,0x43,0xa0,0xe1,0xb9,0x58,0xb4, - 0xbb,0xeb,0x8f,0x68,0x3c,0x5d,0xdf,0xe7,0xae,0xf1, - 0x04,0x09,0x05,0xe5,0xea,0x95,0x3a,0xf2,0xa7,0x29, - 0x46,0x37,0x8a,0x2e,0xf7,0xba,0xa6,0x46,0xcf,0xa1, - 0x3f,0x6e,0x4f,0xa7,0xb3,0xb5,0xff,0x8e,0x9e,0xdf, - 0x0e,0x6d,0x91,0x22,0xb9,0x4e,0x9b,0xdf,0x29,0x6e, - 0x45,0x3a,0x4a,0x7b,0x0f,0x93,0x2e,0x88,0xb4,0x4b, - 0xb7,0x11,0x22,0x51,0x1d,0x94,0x31,0x45,0xbc,0x26, - 0x3a,0x26,0x8b,0x29,0x98,0x75,0xf7,0xd5,0xcc,0x2b, - 0x10,0x90,0x2e,0x39,0xac,0xb6,0xc9,0x20,0x27,0xce, - 0xbe,0x5d,0x70,0xc9,0xa5,0xd8,0xa9,0xdd,0x6f,0x8d, - 0x84,0x2b,0xfe,0x6e,0xed,0x06,0x71,0xac,0x70,0xf0, - 0xae,0xc0,0xdf,0x2e,0x47,0x5f,0xd1,0x35,0xb8,0x0c, - 0xb0,0xae,0x79,0x71,0xa9,0xd3,0x74,0x8f,0xda,0x86, - 0x64,0x0d,0x19,0x7b,0x96,0x55,0xd2,0x11,0x39,0xaa, - 0x8c,0xf4,0x62,0xaa,0x69,0x72,0x54,0xa8,0x4e,0x1c, - 0x4a,0x8c,0xc7,0x32,0xd9,0x3f,0x8a,0x78,0xad,0xa0, - 0x63,0xbb,0x54,0x23,0xd6,0x11,0xb5,0xcb,0xe4,0x72, - 0x39,0xfd,0x8f,0xc0,0xfb,0xcb,0x15,0x18,0x50,0x79, - 0xad,0xae,0x31,0x49,0x4e,0xd5,0xfd,0xf3,0x53,0x3e, - 0x95,0x83,0xf5,0xf5,0x67,0x6e,0xa3,0x50,0xca,0xc4, - 0x72,0x48,0x93,0x16,0x4e,0xee,0x3b,0x92,0x80,0x9f, - 0x46,0xe3,0x49,0x43,0x44,0x70,0x3e,0x79,0x06,0x4d, - 0xdd,0xf0,0x89,0x40,0x3a,0xd1,0x1e,0x69,0xd4,0x97, - 0x74,0x92,0x7a,0x70,0x90,0xfe,0xc1,0x69,0x3c,0xf4, - 0xc0,0x73,0x28,0x94,0x13,0xf3,0xf6,0xcf,0x77,0x26, - 0x92,0xd7,0x81,0x0f,0x99,0x3e,0x43,0xb8,0xc6,0x89, - 0x22,0xc5,0x98,0x10,0x45,0x3a,0x48,0xd3,0x43,0x4d, - 0xd7,0x10,0x36,0x9b,0x1a,0x8c,0x4a,0x93,0x7d,0x80, - 0xf8,0x59,0xed,0xd4,0x8d,0x4e,0x05,0x0d,0x2a,0x51, - 0xe4,0x45,0x45,0x86,0x16,0x2c,0x4e,0xc7,0x64,0xde, - 0x05,0x9a,0xfa,0x4a,0xcf,0x27,0x19,0x5f,0x16,0x38, - 0xd8,0xc7,0x7b,0x4e,0xeb,0x9f,0x18,0x1b,0x2d,0xc2, - 0x48,0xb7,0x44,0x45,0x21,0xbd,0x8b,0xfd,0xbb,0x87, - 0x46,0xa1,0xdc,0x7e,0xf3,0x9a,0x16,0x5c,0xf0,0x01, - 0xa9,0x53,0xed,0x81,0x31,0x79,0xba,0x3e,0xf1,0x97, - 0x71,0x90,0xa4,0x7b,0x88,0x01,0x2a,0xac,0xd0,0x3d, - 0x6d,0x50,0x9a,0x8a,0xf3,0x4e,0x60,0xfe,0xfb,0x60, - 0x77,0xdf,0xd9,0x2d,0xf4,0x84,0x4e,0xb9,0x43,0x4c, - 0xa1,0x3b,0x78,0x01,0xae,0x04,0x5d,0x77,0x21,0x9b, - 0x39,0x0c,0x4a,0xa7,0x83,0x52,0x05,0xaf,0x06,0x83, - 0x30,0x1e,0x9d,0x3c,0x47,0x6a,0x80,0x3f,0x2b,0x40, - 0xb6,0x68,0x6c,0x38,0xa1,0x3d,0x44,0x65,0x11,0x32, - 0x71,0xb0,0xe9,0xdb,0x6b,0xa2,0x83,0x56,0xd3,0xdc, - 0x53,0x04,0x8d,0x76,0xb1,0xb7,0xbe,0x88,0x8a,0x97, - 0x04,0x1d,0x0b,0x0a,0x51,0xdd,0xfe,0x7e,0xa0,0x3c, - 0xb7,0xe2,0x5e,0x37,0x29,0x45,0xc8,0x88,0xb2,0x32, - 0xfa,0xb9,0x18,0x59,0x91,0xa6,0x3c,0x26,0xd3,0x55, - 0xe7,0x87,0x12,0x3a,0xe3,0x4b,0xf4,0x50,0x16,0x61, - 0x3c,0x31,0x9d,0x54,0xda,0x90,0x10,0x57,0x73,0x80, - 0xd7,0x14,0xb5,0xd1,0xd1,0xa4,0x60,0xba,0xaa,0xfb, - 0x07,0xfa,0xc3,0xa8,0x10,0x39,0x85,0xb8,0x4e,0xfb, - 0x3d,0x9d,0x17,0x9a,0x85,0x06,0xeb,0xaa,0x02,0x65, - 0x5b,0x9a,0x4e,0xaf,0x4d,0x1f,0xe9,0x1c,0x5d,0x51, - 0xe5,0x8c,0x06,0xd3,0x3e,0x64,0xd0,0x5c,0x8b,0x4e, - 0xd1,0x54,0xab,0x2b,0x7e,0xe8,0x3c,0x3b,0x61,0x24, - 0xd2,0xda,0x9a,0xb4,0xa8,0x27,0xa8,0x8a,0x3b,0xbb, - 0x68,0x9f,0xa1,0x9c,0x46,0x8a,0xf4,0xe8,0xe7,0xcf, - 0x34,0xa9,0x45,0xee,0xe6,0xba,0x6f,0xa4,0xfd,0x53, - 0x91,0x68,0xf7,0x73,0xaf,0x49,0xab,0xe1,0x34,0x3d, - 0xee,0x0b,0x92,0x59,0x16,0x75,0x47,0xae,0x63,0xd4, - 0x4a,0xf0,0x94,0x77,0xa4,0xcd,0x82,0xae,0xcd,0x09, - 0x85,0x75,0x13,0x57,0xed,0xd1,0xaf,0x5f,0xbf,0x1e, - 0x2f,0x4f,0xd8,0xec,0xeb,0x20,0xb8,0xd1,0x06,0xce, - 0x11,0x07,0x4c,0x53,0x59,0x02,0xe5,0x6e,0xde,0x13, - 0xfd,0xa5,0x6f,0x8b,0xb9,0x94,0x96,0x4c,0xf9,0x55, - 0xae,0x7a,0x06,0xea,0x25,0xbe,0x7c,0xa9,0xc8,0x99, - 0x36,0xd5,0x54,0x10,0xa7,0x9c,0x23,0x97,0x4e,0x4d, - 0x82,0x45,0xf0,0xe4,0xd8,0x34,0x0b,0x5a,0x14,0x9b, - 0x0c,0xa6,0x18,0xa6,0x6b,0xf4,0x59,0x45,0x2f,0xb3, - 0xea,0x39,0x8c,0x78,0xda,0xae,0x7f,0x9a,0xdc,0x02, - 0x14,0x4f,0x35,0x3f,0xc9,0x77,0x07,0xb5,0x6a,0xc9, - 0x54,0x30,0x1d,0x2e,0x94,0x5a,0x9f,0x22,0x24,0x00, - 0x3d,0xb9,0x94,0x1e,0xd1,0xf7,0xae,0xe5,0x9e,0xb9, - 0x11,0xfd,0xa3,0x83,0x08,0xf6,0x9b,0x87,0xdd,0x00, - 0x4d,0x7c,0x19,0xf3,0xd5,0xcd,0x31,0xdc,0xa1,0x30, - 0xa9,0x90,0x80,0xfd,0xe5,0x21,0x4e,0x0e,0x94,0x67, - 0x74,0xc1,0x76,0x8e,0xce,0x4a,0xcb,0xf7,0x02,0x45, - 0x75,0x30,0xed,0x5e,0x4f,0x79,0x92,0xa9,0x91,0x49, - 0xde,0x57,0x45,0x85,0x71,0x5f,0xcb,0xfd,0x9a,0xc5, - 0x6b,0xcc,0xe9,0x55,0xed,0x94,0x9d,0x0a,0x9b,0xc9, - 0x52,0x83,0xd6,0xb5,0xde,0xe3,0x4e,0x61,0x99,0xd0, - 0xea,0x9a,0x4c,0x7a,0xcd,0x7b,0x98,0xb4,0x51,0x8f, - 0x7d,0x81,0xc2,0xaf,0xef,0x7f,0xef,0xb4,0x56,0xc9, - 0x82,0x86,0xbe,0xef,0x69,0x83,0x45,0x1e,0x52,0xce, - 0x55,0x1c,0x34,0x3e,0x56,0xfa,0x40,0xf4,0x68,0xbf, - 0x96,0xdf,0xd7,0x75,0xfd,0xa9,0xaa,0x7f,0xa8,0x53, - 0x03,0xe3,0xbe,0xfe,0xff,0x93,0xa1,0xdc,0xd2,0x2f, - 0xda,0x68,0x86,0xa5,0x63,0xc0,0x52,0x94,0x7c,0x87, - 0xa2,0x6b,0x91,0xa9,0x57,0xa7,0x5d,0xba,0x97,0x45, - 0xa7,0x33,0xc0,0x88,0xc9,0x06,0x5e,0x6a,0x8e,0x96, - 0x7e,0x5e,0x10,0x69,0x51,0xc0,0xe7,0x0a,0x53,0x5b, - 0x0b,0x72,0x73,0x92,0x41,0x25,0x06,0x4d,0xde,0x23, - 0xed,0xa6,0xc8,0x49,0x46,0x82,0x2b,0x04,0xe2,0xa5, - 0x31,0x9b,0xed,0xbe,0xcb,0x77,0xc4,0xef,0xd0,0x7e, - 0x77,0x99,0x62,0x72,0x75,0x4a,0x8b,0x28,0x9f,0x4e, - 0xe1,0x11,0xd2,0x97,0xc2,0x67,0xdb,0x7d,0x5f,0x4e, - 0xc8,0x6e,0xb2,0xa9,0x56,0xd2,0x53,0xe9,0xcf,0x4d, - 0xb4,0x4c,0x7b,0x4e,0x29,0x9c,0xd5,0x5e,0xbb,0x5c, - 0xdb,0x9a,0x44,0xfc,0x93,0x0e,0x85,0xd6,0x67,0x5f, - 0x1b,0x1a,0x4e,0x48,0x4b,0x43,0x29,0xb3,0x34,0xf2, - 0x6e,0x72,0xe7,0xa2,0x7e,0x89,0x34,0x75,0xc1,0x61, - 0xf7,0x08,0x59,0xa2,0x77,0x5a,0x9b,0xbb,0x64,0x1e, - 0xd7,0xa9,0x52,0x43,0xa1,0xdb,0xbd,0x4b,0xbb,0xf0, - 0x3e,0x65,0x1a,0x1a,0xcd,0x0d,0x01,0x4f,0x14,0xe9, - 0x05,0x5e,0x68,0x06,0x19,0xc2,0x69,0x1b,0x19,0x9f, - 0x7f,0xd0,0xfb,0xf7,0xbb,0xd2,0x9a,0x30,0x0a,0x90, - 0x2e,0xa7,0x27,0x15,0x1b,0x02,0xbc,0xcf,0x4e,0x84, - 0xdc,0xaf,0x2d,0x38,0x62,0x57,0xb8,0x47,0x95,0xe8, - 0x41,0xa7,0x51,0x75,0x54,0xa7,0x98,0x07,0x47,0x4f, - 0x1f,0x27,0x55,0x20,0x4b,0x80,0xd4,0x48,0xa5,0x06, - 0x1f,0x1a,0x11,0x4b,0xe5,0xb9,0xf7,0x87,0x34,0x3a, - 0xa4,0x35,0x05,0x59,0x48,0x1a,0xa6,0x28,0x42,0x21, - 0x5d,0xa1,0xe6,0x68,0xb5,0x14,0x61,0xe4,0x26,0x11, - 0xaf,0xeb,0xfa,0xa7,0xaa,0xfe,0xfc,0x5e,0x6b,0xfd, - 0xfb,0xfe,0x87,0xff,0x01,0xe4,0x64,0xdd,0xee,0x95, - 0xd0,0x9d,0x2d,0x77,0x58,0xe8,0xc1,0x14,0xbe,0xdc, - 0x52,0x9d,0x50,0x83,0xb9,0x9c,0xd3,0xf2,0xfd,0xb3, - 0x2b,0x54,0xe4,0xd4,0x99,0xae,0x00,0xcb,0x53,0xc1, - 0x72,0xf5,0x64,0x78,0xf3,0x37,0x17,0xe8,0x18,0x52, - 0x0a,0x79,0x2c,0x1a,0xa9,0xfb,0x56,0xe7,0xe9,0xef, - 0xef,0xef,0xeb,0xd7,0xaf,0x5f,0xc9,0x90,0xcd,0x7a, - 0x3a,0xbd,0x9f,0xe5,0x02,0xab,0xf3,0x87,0x56,0x24, - 0x5d,0x3b,0x08,0x49,0x57,0x98,0xb6,0x5b,0xa4,0xf7, - 0x78,0xdf,0xdf,0x35,0x74,0x15,0x2b,0x79,0x4f,0x50, - 0xc1,0xd0,0x03,0x40,0x9d,0x79,0x98,0xac,0x9f,0x75, - 0x72,0x78,0x5f,0xde,0x47,0x89,0x0e,0xea,0xe4,0x92, - 0x9e,0x0e,0xdf,0xa5,0x88,0x86,0x43,0x17,0x02,0x05, - 0xb4,0xa4,0xe3,0x43,0x3a,0x2a,0x84,0x6f,0x92,0x4e, - 0x2a,0x16,0x3e,0xb2,0x36,0xd6,0x41,0x8a,0xb4,0xbb, - 0x97,0xc9,0x04,0x8f,0x36,0xe8,0x31,0xbc,0x94,0x8a, - 0x1f,0xbd,0xbf,0x7d,0x5c,0x9b,0xa0,0x7f,0x57,0x90, - 0x81,0xbe,0xab,0xa6,0x74,0x6e,0xe7,0x72,0x4c,0xdf, - 0x01,0xa6,0x0e,0x47,0x2b,0x80,0x4b,0xa6,0x42,0x43, - 0xe2,0x77,0x25,0x1d,0xc6,0xbd,0x66,0x80,0xb6,0xac, - 0x61,0x42,0x2f,0x21,0xde,0x5b,0xc1,0xe1,0x02,0x3f, - 0xc9,0x41,0xd8,0x15,0x2b,0xce,0xcb,0xc6,0x21,0xc1, - 0x66,0x8f,0xb4,0x0e,0xc8,0xce,0xe7,0xcc,0x49,0x17, - 0x5c,0x0c,0xc3,0x15,0xa6,0xe7,0x9c,0xab,0x37,0xa1, - 0xec,0xe9,0xf7,0xdc,0xe4,0x1b,0xd1,0x8e,0x70,0x3f, - 0xe2,0xa8,0xbc,0x6b,0x66,0xa7,0x58,0x2b,0xda,0x1f, - 0xdc,0xf5,0xcb,0x1e,0x53,0xe9,0x1d,0x71,0xeb,0xf4, - 0x5e,0x2f,0xef,0xcf,0x21,0x6d,0xd0,0x9f,0xb5,0xd6, - 0xbf,0xff,0x1d,0x00,0xd2,0xe9,0x7b,0x10,0x6b,0xe0, - 0x91,0xf7,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, - 0xae,0x42,0x60,0x82 -}; - diff --git a/data/converted/slider_knob_svg.cpp b/data/converted/slider_knob_svg.cpp deleted file mode 100644 index 80233717df..0000000000 --- a/data/converted/slider_knob_svg.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// this file was auto-generated from "slider_knob.svg" by res2h - -#include "../Resources.h" - -const uint16_t slider_knob_svg_size = 619; -const uint8_t slider_knob_svg_data[619] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x36, - 0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67,0x68,0x74, - 0x3d,0x22,0x31,0x36,0x70,0x78,0x22,0x20,0x76,0x69, - 0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30, - 0x20,0x31,0x36,0x20,0x31,0x36,0x22,0x20,0x65,0x6e, - 0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63,0x6b,0x67, - 0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e,0x65,0x77, - 0x20,0x30,0x20,0x30,0x20,0x31,0x36,0x20,0x31,0x36, - 0x22,0x20,0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63, - 0x65,0x3d,0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76, - 0x65,0x22,0x3e,0x0a,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x2d,0x72,0x75,0x6c,0x65,0x3d, - 0x22,0x65,0x76,0x65,0x6e,0x6f,0x64,0x64,0x22,0x20, - 0x63,0x6c,0x69,0x70,0x2d,0x72,0x75,0x6c,0x65,0x3d, - 0x22,0x65,0x76,0x65,0x6e,0x6f,0x64,0x64,0x22,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x37,0x37,0x37, - 0x37,0x37,0x37,0x22,0x20,0x64,0x3d,0x22,0x4d,0x38, - 0x2c,0x30,0x63,0x34,0x2e,0x34,0x31,0x38,0x2c,0x30, - 0x2c,0x38,0x2c,0x33,0x2e,0x35,0x38,0x32,0x2c,0x38, - 0x2c,0x38,0x63,0x30,0x2c,0x34,0x2e,0x34,0x31,0x38, - 0x2d,0x33,0x2e,0x35,0x38,0x32,0x2c,0x38,0x2d,0x38, - 0x2c,0x38,0x73,0x2d,0x38,0x2d,0x33,0x2e,0x35,0x38, - 0x32,0x2d,0x38,0x2d,0x38,0x0a,0x09,0x43,0x30,0x2c, - 0x33,0x2e,0x35,0x38,0x32,0x2c,0x33,0x2e,0x35,0x38, - 0x33,0x2c,0x30,0x2c,0x38,0x2c,0x30,0x7a,0x22,0x2f, - 0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e,0x0a -}; - diff --git a/data/converted/splash_svg.cpp b/data/converted/splash_svg.cpp deleted file mode 100644 index 1a9ff3f12b..0000000000 --- a/data/converted/splash_svg.cpp +++ /dev/null @@ -1,1911 +0,0 @@ -// this file was auto-generated from "splash.svg" by res2h - -#include "../Resources.h" - -const uint16_t splash_svg_size = 19024; -const uint8_t splash_svg_data[19024] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x55,0x54,0x46,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x33,0x2e,0x30,0x2e,0x30,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x31,0x34,0x39,0x34, - 0x38,0x29,0x20,0x20,0x2d,0x2d,0x3e,0x0a,0x3c,0x21, - 0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x73,0x76, - 0x67,0x20,0x50,0x55,0x42,0x4c,0x49,0x43,0x20,0x22, - 0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,0x54, - 0x44,0x20,0x53,0x56,0x47,0x20,0x31,0x2e,0x31,0x2f, - 0x2f,0x45,0x4e,0x22,0x20,0x22,0x68,0x74,0x74,0x70, - 0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e, - 0x6f,0x72,0x67,0x2f,0x47,0x72,0x61,0x70,0x68,0x69, - 0x63,0x73,0x2f,0x53,0x56,0x47,0x2f,0x31,0x2e,0x31, - 0x2f,0x44,0x54,0x44,0x2f,0x73,0x76,0x67,0x31,0x31, - 0x2e,0x64,0x74,0x64,0x22,0x3e,0x0a,0x3c,0x73,0x76, - 0x67,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x3d, - 0x22,0x31,0x2e,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22, - 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69, - 0x6e,0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69, - 0x6e,0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78, - 0x22,0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x20, - 0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x31,0x32,0x38, - 0x30,0x70,0x78,0x22,0x20,0x68,0x65,0x69,0x67,0x68, - 0x74,0x3d,0x22,0x37,0x32,0x30,0x70,0x78,0x22,0x20, - 0x76,0x69,0x65,0x77,0x42,0x6f,0x78,0x3d,0x22,0x30, - 0x20,0x30,0x20,0x31,0x32,0x38,0x30,0x20,0x37,0x32, - 0x30,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d, - 0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64, - 0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30,0x20, - 0x31,0x32,0x38,0x30,0x20,0x37,0x32,0x30,0x22,0x20, - 0x78,0x6d,0x6c,0x3a,0x73,0x70,0x61,0x63,0x65,0x3d, - 0x22,0x70,0x72,0x65,0x73,0x65,0x72,0x76,0x65,0x22, - 0x3e,0x0a,0x3c,0x67,0x20,0x69,0x64,0x3d,0x22,0x4c, - 0x61,0x79,0x65,0x72,0x5f,0x32,0x22,0x3e,0x0a,0x3c, - 0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x69,0x64,0x3d, - 0x22,0x45,0x62,0x65,0x6e,0x65,0x5f,0x31,0x22,0x3e, - 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31, - 0x32,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31, - 0x2e,0x35,0x32,0x39,0x2c,0x34,0x34,0x32,0x2e,0x30, - 0x39,0x37,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, - 0x2c,0x34,0x34,0x32,0x2e,0x30,0x39,0x37,0x4c,0x34, - 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x34,0x32, - 0x2e,0x30,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35, - 0x32,0x39,0x2c,0x33,0x35,0x39,0x2e,0x32,0x31,0x36, - 0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x33, - 0x35,0x39,0x2e,0x32,0x31,0x36,0x4c,0x34,0x33,0x31, - 0x2e,0x35,0x32,0x39,0x2c,0x33,0x35,0x39,0x2e,0x32, - 0x31,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, - 0x2c,0x32,0x37,0x36,0x2e,0x33,0x30,0x36,0x4c,0x34, - 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x37,0x36, - 0x2e,0x33,0x30,0x36,0x4c,0x34,0x33,0x31,0x2e,0x35, - 0x32,0x39,0x2c,0x32,0x37,0x36,0x2e,0x33,0x30,0x36, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43, - 0x39,0x30,0x30,0x31,0x32,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x33, - 0x31,0x37,0x2e,0x37,0x35,0x33,0x4c,0x34,0x33,0x31, - 0x2e,0x35,0x32,0x39,0x2c,0x33,0x31,0x37,0x2e,0x37, - 0x35,0x33,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, - 0x2c,0x33,0x31,0x37,0x2e,0x37,0x35,0x33,0x7a,0x22, - 0x2f,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30, - 0x30,0x31,0x32,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34, - 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x38,0x33, - 0x2e,0x35,0x34,0x34,0x4c,0x34,0x33,0x31,0x2e,0x35, - 0x32,0x39,0x2c,0x34,0x38,0x33,0x2e,0x35,0x34,0x34, - 0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34, - 0x38,0x33,0x2e,0x35,0x34,0x34,0x7a,0x22,0x2f,0x3e, - 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31, - 0x32,0x22,0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31, - 0x2e,0x35,0x32,0x39,0x2c,0x34,0x30,0x30,0x2e,0x36, - 0x34,0x32,0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39, - 0x2c,0x34,0x30,0x30,0x2e,0x36,0x34,0x32,0x4c,0x34, - 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x34,0x30,0x30, - 0x2e,0x36,0x34,0x32,0x7a,0x22,0x2f,0x3e,0x0a,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x43,0x39,0x30,0x30,0x31,0x32,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35, - 0x32,0x39,0x2c,0x32,0x33,0x34,0x2e,0x38,0x34,0x32, - 0x4c,0x34,0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32, - 0x33,0x34,0x2e,0x38,0x34,0x32,0x4c,0x34,0x33,0x31, - 0x2e,0x35,0x32,0x39,0x2c,0x32,0x33,0x34,0x2e,0x38, - 0x34,0x32,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x6c, - 0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69, - 0x65,0x6e,0x74,0x20,0x69,0x64,0x3d,0x22,0x53,0x56, - 0x47,0x49,0x44,0x5f,0x31,0x5f,0x22,0x20,0x67,0x72, - 0x61,0x64,0x69,0x65,0x6e,0x74,0x55,0x6e,0x69,0x74, - 0x73,0x3d,0x22,0x75,0x73,0x65,0x72,0x53,0x70,0x61, - 0x63,0x65,0x4f,0x6e,0x55,0x73,0x65,0x22,0x20,0x78, - 0x31,0x3d,0x22,0x31,0x31,0x38,0x2e,0x33,0x31,0x32, - 0x35,0x22,0x20,0x79,0x31,0x3d,0x22,0x35,0x34,0x32, - 0x2e,0x33,0x32,0x32,0x33,0x22,0x20,0x78,0x32,0x3d, - 0x22,0x33,0x32,0x33,0x2e,0x38,0x30,0x31,0x38,0x22, - 0x20,0x79,0x32,0x3d,0x22,0x32,0x32,0x37,0x2e,0x33, - 0x33,0x38,0x34,0x22,0x3e,0x0a,0x09,0x09,0x3c,0x73, - 0x74,0x6f,0x70,0x20,0x6f,0x66,0x66,0x73,0x65,0x74, - 0x3d,0x22,0x30,0x22,0x20,0x73,0x74,0x79,0x6c,0x65, - 0x3d,0x22,0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c, - 0x6f,0x72,0x3a,0x23,0x30,0x30,0x34,0x45,0x37,0x33, - 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x73,0x74,0x6f, - 0x70,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3d,0x22, - 0x31,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22, - 0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72, - 0x3a,0x23,0x30,0x30,0x41,0x31,0x42,0x30,0x22,0x2f, - 0x3e,0x0a,0x09,0x3c,0x2f,0x6c,0x69,0x6e,0x65,0x61, - 0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x3e, - 0x0a,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x75,0x72,0x6c,0x28,0x23,0x53, - 0x56,0x47,0x49,0x44,0x5f,0x31,0x5f,0x29,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x34,0x33,0x31,0x2e,0x35,0x32, - 0x39,0x2c,0x32,0x34,0x35,0x2e,0x39,0x35,0x31,0x63, - 0x30,0x2d,0x36,0x2e,0x31,0x31,0x2d,0x34,0x2e,0x39, - 0x39,0x39,0x2d,0x31,0x31,0x2e,0x31,0x30,0x38,0x2d, - 0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x31,0x31,0x2e, - 0x31,0x30,0x38,0x48,0x36,0x39,0x2e,0x35,0x36,0x33, - 0x63,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2d, - 0x31,0x34,0x2e,0x36,0x34,0x34,0x2c,0x33,0x2e,0x35, - 0x33,0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c, - 0x37,0x2e,0x38,0x35,0x35,0x20,0x20,0x20,0x6c,0x2d, - 0x32,0x35,0x2e,0x37,0x34,0x35,0x2c,0x32,0x35,0x2e, - 0x37,0x34,0x35,0x43,0x32,0x30,0x2e,0x35,0x33,0x33, - 0x2c,0x32,0x37,0x32,0x2e,0x37,0x36,0x34,0x2c,0x31, - 0x37,0x2c,0x32,0x38,0x31,0x2e,0x32,0x39,0x36,0x2c, - 0x31,0x37,0x2c,0x32,0x38,0x37,0x2e,0x34,0x30,0x36, - 0x76,0x32,0x32,0x36,0x2e,0x34,0x36,0x38,0x63,0x30, - 0x2c,0x36,0x2e,0x31,0x31,0x31,0x2c,0x34,0x2e,0x39, - 0x39,0x39,0x2c,0x31,0x31,0x2e,0x31,0x30,0x39,0x2c, - 0x31,0x31,0x2e,0x31,0x30,0x36,0x2c,0x31,0x31,0x2e, - 0x31,0x30,0x39,0x68,0x33,0x35,0x30,0x2e,0x38,0x36, - 0x20,0x20,0x20,0x63,0x36,0x2e,0x31,0x30,0x37,0x2c, - 0x30,0x2c,0x31,0x34,0x2e,0x36,0x34,0x34,0x2d,0x33, - 0x2e,0x35,0x33,0x35,0x2c,0x31,0x38,0x2e,0x39,0x36, - 0x33,0x2d,0x37,0x2e,0x38,0x35,0x34,0x6c,0x32,0x35, - 0x2e,0x37,0x34,0x31,0x2d,0x32,0x35,0x2e,0x37,0x33, - 0x36,0x63,0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e,0x33, - 0x31,0x36,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31, - 0x32,0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35, - 0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x35,0x4c,0x34, - 0x33,0x31,0x2e,0x35,0x32,0x39,0x2c,0x32,0x34,0x35, - 0x2e,0x39,0x35,0x31,0x7a,0x22,0x2f,0x3e,0x0a,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x6f,0x70,0x61,0x63, - 0x69,0x74,0x79,0x3d,0x22,0x30,0x2e,0x32,0x22,0x20, - 0x65,0x6e,0x61,0x62,0x6c,0x65,0x2d,0x62,0x61,0x63, - 0x6b,0x67,0x72,0x6f,0x75,0x6e,0x64,0x3d,0x22,0x6e, - 0x65,0x77,0x20,0x20,0x20,0x20,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x33,0x38,0x32,0x2e,0x32,0x32,0x2c,0x33, - 0x39,0x32,0x2e,0x37,0x38,0x39,0x6c,0x2d,0x32,0x35, - 0x2e,0x37,0x32,0x39,0x2d,0x32,0x35,0x2e,0x37,0x32, - 0x39,0x63,0x2d,0x34,0x2e,0x33,0x31,0x39,0x2d,0x34, - 0x2e,0x33,0x31,0x38,0x2d,0x31,0x32,0x2e,0x38,0x35, - 0x34,0x2d,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x38, - 0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e,0x38,0x35,0x33, - 0x48,0x33,0x31,0x38,0x2e,0x32,0x38,0x20,0x20,0x20, - 0x63,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2e, - 0x30,0x30,0x31,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c, - 0x30,0x2e,0x30,0x30,0x31,0x2d,0x31,0x31,0x2e,0x31, - 0x31,0x2c,0x30,0x2e,0x30,0x30,0x31,0x73,0x33,0x2e, - 0x35,0x33,0x32,0x2d,0x33,0x2e,0x35,0x33,0x34,0x2c, - 0x37,0x2e,0x38,0x35,0x34,0x2d,0x37,0x2e,0x38,0x35, - 0x35,0x6c,0x36,0x37,0x2e,0x31,0x39,0x36,0x2d,0x36, - 0x37,0x2e,0x31,0x39,0x33,0x63,0x34,0x2e,0x33,0x32, - 0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x32,0x2e,0x38, - 0x35,0x34,0x2d,0x37,0x2e,0x38,0x35,0x35,0x2d,0x33, - 0x2e,0x32,0x35,0x33,0x2d,0x37,0x2e,0x38,0x35,0x35, - 0x48,0x32,0x37,0x36,0x2e,0x38,0x33,0x32,0x20,0x20, - 0x20,0x63,0x2d,0x36,0x2e,0x31,0x31,0x31,0x2c,0x30, - 0x2d,0x31,0x34,0x2e,0x36,0x34,0x33,0x2c,0x33,0x2e, - 0x35,0x33,0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33, - 0x2c,0x37,0x2e,0x38,0x35,0x35,0x4c,0x32,0x35,0x2e, - 0x31,0x34,0x32,0x2c,0x35,0x31,0x36,0x2e,0x38,0x36, - 0x63,0x2d,0x31,0x2e,0x38,0x32,0x35,0x2c,0x31,0x2e, - 0x38,0x32,0x31,0x2d,0x33,0x2e,0x35,0x31,0x37,0x2c, - 0x33,0x2e,0x35,0x31,0x34,0x2d,0x34,0x2e,0x38,0x37, - 0x31,0x2c,0x34,0x2e,0x38,0x36,0x36,0x63,0x32,0x2e, - 0x30,0x31,0x32,0x2c,0x32,0x2e,0x30,0x31,0x31,0x2c, - 0x34,0x2e,0x37,0x38,0x36,0x2c,0x33,0x2e,0x32,0x35, - 0x39,0x2c,0x37,0x2e,0x38,0x33,0x36,0x2c,0x33,0x2e, - 0x32,0x35,0x39,0x20,0x20,0x20,0x63,0x30,0x2e,0x30, - 0x30,0x35,0x2c,0x30,0x2c,0x30,0x2e,0x30,0x31,0x2c, - 0x30,0x2c,0x30,0x2e,0x30,0x31,0x36,0x2c,0x30,0x68, - 0x39,0x39,0x2e,0x39,0x35,0x33,0x68,0x31,0x36,0x37, - 0x2e,0x39,0x38,0x38,0x63,0x36,0x2e,0x31,0x31,0x31, - 0x2c,0x30,0x2c,0x31,0x31,0x2e,0x31,0x32,0x32,0x2d, - 0x30,0x2e,0x30,0x31,0x33,0x2c,0x31,0x31,0x2e,0x31, - 0x33,0x33,0x2d,0x30,0x2e,0x30,0x32,0x33,0x63,0x30, - 0x2e,0x30,0x31,0x35,0x2d,0x30,0x2e,0x30,0x31,0x36, - 0x2c,0x33,0x2e,0x35,0x35,0x39,0x2d,0x33,0x2e,0x35, - 0x36,0x32,0x2c,0x37,0x2e,0x38,0x38,0x2d,0x37,0x2e, - 0x38,0x38,0x6c,0x36,0x37,0x2e,0x31,0x34,0x34,0x2d, - 0x36,0x37,0x2e,0x31,0x33,0x32,0x20,0x20,0x20,0x63, - 0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e,0x33,0x31,0x36, - 0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x32,0x2e, - 0x38,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d, - 0x31,0x38,0x2e,0x39,0x36,0x33,0x76,0x2d,0x31,0x39, - 0x2e,0x32,0x33,0x35,0x43,0x33,0x39,0x30,0x2e,0x30, - 0x37,0x33,0x2c,0x34,0x30,0x35,0x2e,0x36,0x34,0x2c, - 0x33,0x38,0x36,0x2e,0x35,0x34,0x2c,0x33,0x39,0x37, - 0x2e,0x31,0x30,0x34,0x2c,0x33,0x38,0x32,0x2e,0x32, - 0x32,0x2c,0x33,0x39,0x32,0x2e,0x37,0x38,0x39,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x6e,0x65, - 0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74, - 0x20,0x69,0x64,0x3d,0x22,0x53,0x56,0x47,0x49,0x44, - 0x5f,0x32,0x5f,0x22,0x20,0x67,0x72,0x61,0x64,0x69, - 0x65,0x6e,0x74,0x55,0x6e,0x69,0x74,0x73,0x3d,0x22, - 0x75,0x73,0x65,0x72,0x53,0x70,0x61,0x63,0x65,0x4f, - 0x6e,0x55,0x73,0x65,0x22,0x20,0x78,0x31,0x3d,0x22, - 0x31,0x34,0x34,0x2e,0x38,0x31,0x33,0x22,0x20,0x79, - 0x31,0x3d,0x22,0x35,0x34,0x30,0x2e,0x33,0x37,0x33, - 0x22,0x20,0x78,0x32,0x3d,0x22,0x33,0x39,0x39,0x2e, - 0x38,0x30,0x30,0x33,0x22,0x20,0x79,0x32,0x3d,0x22, - 0x32,0x38,0x38,0x2e,0x33,0x38,0x35,0x37,0x22,0x3e, - 0x0a,0x09,0x09,0x3c,0x73,0x74,0x6f,0x70,0x20,0x6f, - 0x66,0x66,0x73,0x65,0x74,0x3d,0x22,0x30,0x2e,0x33, - 0x30,0x37,0x37,0x22,0x20,0x73,0x74,0x79,0x6c,0x65, - 0x3d,0x22,0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c, - 0x6f,0x72,0x3a,0x23,0x44,0x33,0x44,0x33,0x44,0x33, - 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x73,0x74,0x6f, - 0x70,0x20,0x6f,0x66,0x66,0x73,0x65,0x74,0x3d,0x22, - 0x30,0x2e,0x36,0x37,0x35,0x32,0x22,0x20,0x73,0x74, - 0x79,0x6c,0x65,0x3d,0x22,0x73,0x74,0x6f,0x70,0x2d, - 0x63,0x6f,0x6c,0x6f,0x72,0x3a,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, - 0x6c,0x69,0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64, - 0x69,0x65,0x6e,0x74,0x3e,0x0a,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x75, - 0x72,0x6c,0x28,0x23,0x53,0x56,0x47,0x49,0x44,0x5f, - 0x32,0x5f,0x29,0x22,0x20,0x64,0x3d,0x22,0x4d,0x32, - 0x37,0x36,0x2e,0x38,0x32,0x34,0x2c,0x34,0x30,0x30, - 0x2e,0x36,0x34,0x39,0x63,0x2d,0x36,0x2e,0x31,0x30, - 0x38,0x2c,0x30,0x2d,0x31,0x34,0x2e,0x36,0x34,0x33, - 0x2d,0x33,0x2e,0x35,0x33,0x36,0x2d,0x31,0x38,0x2e, - 0x39,0x36,0x2d,0x37,0x2e,0x38,0x35,0x37,0x6c,0x2d, - 0x32,0x35,0x2e,0x37,0x31,0x2d,0x32,0x35,0x2e,0x37, - 0x31,0x38,0x20,0x20,0x20,0x63,0x2d,0x34,0x2e,0x33, - 0x32,0x31,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2d,0x37, - 0x2e,0x38,0x35,0x37,0x2d,0x31,0x32,0x2e,0x38,0x35, - 0x35,0x2d,0x37,0x2e,0x38,0x36,0x35,0x2d,0x31,0x38, - 0x2e,0x39,0x36,0x36,0x6c,0x2d,0x30,0x2e,0x30,0x31, - 0x32,0x2d,0x31,0x39,0x2e,0x32,0x34,0x36,0x63,0x2d, - 0x30,0x2e,0x30,0x30,0x38,0x2d,0x36,0x2e,0x31,0x31, - 0x2c,0x33,0x2e,0x35,0x32,0x35,0x2d,0x31,0x34,0x2e, - 0x36,0x34,0x33,0x2c,0x37,0x2e,0x38,0x34,0x36,0x2d, - 0x31,0x38,0x2e,0x39,0x36,0x34,0x6c,0x32,0x35,0x2e, - 0x37,0x34,0x31,0x2d,0x32,0x35,0x2e,0x37,0x33,0x37, - 0x20,0x20,0x20,0x63,0x34,0x2e,0x33,0x32,0x31,0x2d, - 0x34,0x2e,0x33,0x32,0x31,0x2c,0x31,0x32,0x2e,0x38, - 0x35,0x32,0x2d,0x37,0x2e,0x38,0x35,0x35,0x2c,0x31, - 0x38,0x2e,0x39,0x36,0x33,0x2d,0x37,0x2e,0x38,0x35, - 0x35,0x68,0x31,0x30,0x32,0x2e,0x31,0x34,0x63,0x36, - 0x2e,0x31,0x30,0x37,0x2c,0x30,0x2c,0x37,0x2e,0x35, - 0x37,0x33,0x2c,0x33,0x2e,0x35,0x33,0x34,0x2c,0x33, - 0x2e,0x32,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35, - 0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34,0x31,0x2c,0x32, - 0x35,0x2e,0x37,0x33,0x37,0x20,0x20,0x20,0x63,0x2d, - 0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33,0x32,0x31, - 0x2d,0x31,0x32,0x2e,0x38,0x35,0x32,0x2c,0x37,0x2e, - 0x38,0x35,0x35,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33, - 0x2c,0x37,0x2e,0x38,0x35,0x35,0x68,0x2d,0x36,0x30, - 0x2e,0x36,0x38,0x38,0x63,0x2d,0x36,0x2e,0x31,0x31, - 0x32,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2c, - 0x34,0x2e,0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31, - 0x31,0x2c,0x31,0x31,0x2e,0x31,0x30,0x38,0x76,0x31, - 0x39,0x2e,0x32,0x34,0x36,0x63,0x30,0x2c,0x36,0x2e, - 0x31,0x31,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2c,0x31, - 0x31,0x2e,0x31,0x30,0x38,0x2c,0x31,0x31,0x2e,0x31, - 0x30,0x36,0x2c,0x31,0x31,0x2e,0x31,0x30,0x36,0x20, - 0x20,0x20,0x6c,0x36,0x30,0x2e,0x37,0x30,0x32,0x2d, - 0x30,0x2e,0x30,0x30,0x37,0x63,0x36,0x2e,0x31,0x30, - 0x37,0x2d,0x30,0x2e,0x30,0x30,0x32,0x2c,0x31,0x34, - 0x2e,0x36,0x34,0x34,0x2c,0x33,0x2e,0x35,0x33,0x33, - 0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e, - 0x38,0x35,0x33,0x6c,0x32,0x35,0x2e,0x37,0x32,0x39, - 0x2c,0x32,0x35,0x2e,0x37,0x32,0x39,0x63,0x34,0x2e, - 0x33,0x32,0x2c,0x34,0x2e,0x33,0x31,0x34,0x2c,0x37, - 0x2e,0x38,0x35,0x34,0x2c,0x31,0x32,0x2e,0x38,0x35, - 0x31,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2c,0x31,0x38, - 0x2e,0x39,0x36,0x33,0x76,0x31,0x39,0x2e,0x32,0x33, - 0x35,0x20,0x20,0x20,0x63,0x30,0x2c,0x36,0x2e,0x31, - 0x30,0x39,0x2d,0x33,0x2e,0x35,0x33,0x32,0x2c,0x31, - 0x34,0x2e,0x36,0x34,0x36,0x2d,0x37,0x2e,0x38,0x35, - 0x34,0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x6c,0x2d, - 0x32,0x35,0x2e,0x37,0x34,0x2c,0x32,0x35,0x2e,0x37, - 0x34,0x63,0x2d,0x34,0x2e,0x33,0x32,0x31,0x2c,0x34, - 0x2e,0x33,0x31,0x36,0x2d,0x31,0x32,0x2e,0x38,0x35, - 0x33,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x31,0x38, - 0x2e,0x39,0x36,0x34,0x2c,0x37,0x2e,0x38,0x35,0x34, - 0x68,0x2d,0x36,0x30,0x2e,0x36,0x38,0x38,0x20,0x20, - 0x20,0x63,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30, - 0x2d,0x31,0x34,0x2e,0x36,0x34,0x33,0x2d,0x33,0x2e, - 0x35,0x33,0x36,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33, - 0x2d,0x37,0x2e,0x38,0x35,0x34,0x6c,0x2d,0x32,0x35, - 0x2e,0x37,0x34,0x31,0x2d,0x32,0x35,0x2e,0x37,0x34, - 0x63,0x2d,0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e,0x33, - 0x31,0x36,0x2d,0x32,0x2e,0x38,0x35,0x38,0x2d,0x37, - 0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x32,0x35,0x33, - 0x2d,0x37,0x2e,0x38,0x35,0x34,0x68,0x31,0x30,0x32, - 0x2e,0x31,0x34,0x63,0x36,0x2e,0x31,0x31,0x32,0x2c, - 0x30,0x2c,0x31,0x31,0x2e,0x31,0x31,0x2d,0x34,0x2e, - 0x39,0x39,0x38,0x2c,0x31,0x31,0x2e,0x31,0x31,0x2d, - 0x31,0x31,0x2e,0x31,0x30,0x38,0x20,0x20,0x20,0x56, - 0x34,0x31,0x31,0x2e,0x37,0x35,0x63,0x30,0x2d,0x36, - 0x2e,0x31,0x31,0x32,0x2c,0x30,0x2d,0x31,0x31,0x2e, - 0x31,0x31,0x2c,0x30,0x2e,0x30,0x30,0x33,0x2d,0x31, - 0x31,0x2e,0x31,0x31,0x63,0x30,0x2e,0x30,0x30,0x34, - 0x2c,0x30,0x2d,0x34,0x2e,0x39,0x39,0x34,0x2c,0x30, - 0x2d,0x31,0x31,0x2e,0x31,0x30,0x33,0x2c,0x30,0x4c, - 0x32,0x37,0x36,0x2e,0x38,0x32,0x34,0x2c,0x34,0x30, - 0x30,0x2e,0x36,0x34,0x39,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x3c,0x67,0x20,0x6f,0x70,0x61,0x63,0x69,0x74, - 0x79,0x3d,0x22,0x30,0x2e,0x32,0x22,0x3e,0x0a,0x09, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x64,0x3d,0x22, - 0x4d,0x31,0x37,0x2e,0x30,0x30,0x38,0x2c,0x33,0x37, - 0x30,0x2e,0x38,0x37,0x37,0x63,0x30,0x2d,0x36,0x2e, - 0x31,0x30,0x39,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x32, - 0x33,0x38,0x2c,0x30,0x2d,0x31,0x31,0x2e,0x33,0x39, - 0x33,0x63,0x30,0x2d,0x30,0x2e,0x31,0x35,0x35,0x2c, - 0x33,0x2e,0x35,0x33,0x32,0x2d,0x33,0x2e,0x38,0x31, - 0x38,0x2c,0x37,0x2e,0x38,0x35,0x34,0x2d,0x38,0x2e, - 0x31,0x33,0x38,0x6c,0x36,0x37,0x2e,0x31,0x38,0x35, - 0x2d,0x36,0x37,0x2e,0x31,0x38,0x36,0x20,0x20,0x20, - 0x20,0x63,0x34,0x2e,0x33,0x32,0x31,0x2d,0x34,0x2e, - 0x33,0x32,0x31,0x2c,0x31,0x32,0x2e,0x38,0x35,0x35, - 0x2d,0x37,0x2e,0x38,0x35,0x35,0x2c,0x31,0x38,0x2e, - 0x39,0x36,0x33,0x2d,0x37,0x2e,0x38,0x35,0x35,0x68, - 0x31,0x30,0x32,0x2e,0x31,0x35,0x63,0x36,0x2e,0x31, - 0x30,0x38,0x2c,0x30,0x2c,0x37,0x2e,0x35,0x37,0x34, - 0x2c,0x33,0x2e,0x35,0x33,0x34,0x2c,0x33,0x2e,0x32, - 0x35,0x33,0x2c,0x37,0x2e,0x38,0x35,0x35,0x6c,0x2d, - 0x36,0x37,0x2e,0x31,0x39,0x37,0x2c,0x36,0x37,0x2e, - 0x31,0x38,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x34, - 0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33,0x32,0x31,0x2d, - 0x37,0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e,0x38,0x35, - 0x35,0x2d,0x37,0x2e,0x38,0x35,0x33,0x2c,0x37,0x2e, - 0x38,0x35,0x35,0x73,0x34,0x2e,0x39,0x39,0x38,0x2c, - 0x30,0x2e,0x30,0x30,0x32,0x2c,0x31,0x31,0x2e,0x31, - 0x31,0x2c,0x30,0x2e,0x30,0x30,0x36,0x6c,0x31,0x39, - 0x2e,0x32,0x32,0x38,0x2c,0x30,0x2e,0x30,0x30,0x37, - 0x63,0x36,0x2e,0x31,0x30,0x38,0x2c,0x30,0x2e,0x30, - 0x30,0x34,0x2c,0x31,0x30,0x2e,0x37,0x35,0x2c,0x34, - 0x2e,0x39,0x39,0x33,0x2c,0x31,0x30,0x2e,0x33,0x31, - 0x38,0x2c,0x31,0x31,0x2e,0x30,0x38,0x36,0x6c,0x2d, - 0x31,0x2e,0x31,0x31,0x34,0x2c,0x31,0x35,0x2e,0x35, - 0x39,0x33,0x20,0x20,0x20,0x20,0x63,0x2d,0x30,0x2e, - 0x34,0x33,0x33,0x2c,0x36,0x2e,0x30,0x39,0x32,0x2d, - 0x31,0x2e,0x37,0x30,0x37,0x2c,0x31,0x31,0x2e,0x39, - 0x39,0x37,0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c,0x31, - 0x33,0x2e,0x31,0x32,0x32,0x63,0x2d,0x31,0x2e,0x31, - 0x32,0x35,0x2c,0x31,0x2e,0x31,0x32,0x35,0x2d,0x35, - 0x2e,0x35,0x37,0x36,0x2c,0x35,0x2e,0x35,0x38,0x2d, - 0x39,0x2e,0x38,0x39,0x36,0x2c,0x39,0x2e,0x38,0x39, - 0x36,0x6c,0x2d,0x32,0x35,0x2e,0x32,0x30,0x31,0x2c, - 0x32,0x35,0x2e,0x32,0x30,0x31,0x20,0x20,0x20,0x20, - 0x63,0x2d,0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33, - 0x31,0x35,0x2d,0x37,0x2e,0x38,0x38,0x35,0x2c,0x37, - 0x2e,0x38,0x38,0x35,0x2d,0x37,0x2e,0x39,0x32,0x32, - 0x2c,0x37,0x2e,0x39,0x31,0x38,0x63,0x2d,0x30,0x2e, - 0x30,0x33,0x34,0x2c,0x30,0x2e,0x30,0x33,0x34,0x2c, - 0x34,0x2e,0x39,0x33,0x33,0x2c,0x30,0x2e,0x30,0x36, - 0x34,0x2c,0x31,0x31,0x2e,0x30,0x34,0x31,0x2c,0x30, - 0x2e,0x30,0x36,0x32,0x68,0x31,0x37,0x2e,0x39,0x37, - 0x39,0x63,0x36,0x2e,0x31,0x30,0x38,0x2d,0x30,0x2e, - 0x30,0x30,0x34,0x2c,0x31,0x34,0x2e,0x37,0x38,0x34, - 0x2c,0x33,0x2e,0x33,0x37,0x39,0x2c,0x31,0x39,0x2e, - 0x32,0x38,0x31,0x2c,0x37,0x2e,0x35,0x31,0x39,0x20, - 0x20,0x20,0x20,0x6c,0x32,0x36,0x2e,0x38,0x33,0x36, - 0x2c,0x32,0x34,0x2e,0x36,0x39,0x34,0x63,0x34,0x2e, - 0x34,0x39,0x37,0x2c,0x34,0x2e,0x31,0x33,0x37,0x2c, - 0x38,0x2e,0x31,0x38,0x31,0x2c,0x37,0x2e,0x36,0x32, - 0x33,0x2c,0x38,0x2e,0x30,0x35,0x38,0x2c,0x37,0x2e, - 0x37,0x35,0x63,0x2d,0x30,0x2e,0x31,0x32,0x36,0x2c, - 0x30,0x2e,0x31,0x32,0x36,0x2d,0x33,0x2e,0x37,0x36, - 0x36,0x2c,0x33,0x2e,0x37,0x36,0x32,0x2d,0x38,0x2e, - 0x30,0x38,0x37,0x2c,0x38,0x2e,0x30,0x38,0x33,0x6c, - 0x2d,0x33,0x34,0x2e,0x38,0x32,0x37,0x2c,0x33,0x34, - 0x2e,0x38,0x35,0x6c,0x2d,0x31,0x34,0x37,0x2e,0x32, - 0x31,0x32,0x2c,0x30,0x2e,0x30,0x30,0x32,0x20,0x20, - 0x20,0x20,0x63,0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c, - 0x30,0x2d,0x31,0x31,0x2e,0x31,0x30,0x35,0x2d,0x34, - 0x2e,0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30, - 0x35,0x2d,0x31,0x31,0x2e,0x31,0x31,0x4c,0x31,0x37, - 0x2e,0x30,0x30,0x38,0x2c,0x33,0x37,0x30,0x2e,0x38, - 0x37,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f, - 0x67,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x6e,0x65,0x61, - 0x72,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x20, - 0x69,0x64,0x3d,0x22,0x53,0x56,0x47,0x49,0x44,0x5f, - 0x33,0x5f,0x22,0x20,0x67,0x72,0x61,0x64,0x69,0x65, - 0x6e,0x74,0x55,0x6e,0x69,0x74,0x73,0x3d,0x22,0x75, - 0x73,0x65,0x72,0x53,0x70,0x61,0x63,0x65,0x4f,0x6e, - 0x55,0x73,0x65,0x22,0x20,0x78,0x31,0x3d,0x22,0x37, - 0x31,0x2e,0x32,0x37,0x22,0x20,0x79,0x31,0x3d,0x22, - 0x34,0x36,0x35,0x2e,0x39,0x35,0x34,0x31,0x22,0x20, - 0x78,0x32,0x3d,0x22,0x33,0x32,0x36,0x2e,0x32,0x35, - 0x37,0x33,0x22,0x20,0x79,0x32,0x3d,0x22,0x32,0x31, - 0x33,0x2e,0x39,0x36,0x36,0x38,0x22,0x3e,0x0a,0x09, - 0x09,0x3c,0x73,0x74,0x6f,0x70,0x20,0x6f,0x66,0x66, - 0x73,0x65,0x74,0x3d,0x22,0x30,0x2e,0x33,0x30,0x37, - 0x37,0x22,0x20,0x73,0x74,0x79,0x6c,0x65,0x3d,0x22, - 0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f,0x6c,0x6f,0x72, - 0x3a,0x23,0x44,0x33,0x44,0x33,0x44,0x33,0x22,0x2f, - 0x3e,0x0a,0x09,0x09,0x3c,0x73,0x74,0x6f,0x70,0x20, - 0x6f,0x66,0x66,0x73,0x65,0x74,0x3d,0x22,0x30,0x2e, - 0x36,0x37,0x35,0x32,0x22,0x20,0x73,0x74,0x79,0x6c, - 0x65,0x3d,0x22,0x73,0x74,0x6f,0x70,0x2d,0x63,0x6f, - 0x6c,0x6f,0x72,0x3a,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x6c,0x69, - 0x6e,0x65,0x61,0x72,0x47,0x72,0x61,0x64,0x69,0x65, - 0x6e,0x74,0x3e,0x0a,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x75,0x72,0x6c, - 0x28,0x23,0x53,0x56,0x47,0x49,0x44,0x5f,0x33,0x5f, - 0x29,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x31,0x31, - 0x2e,0x30,0x31,0x2c,0x34,0x34,0x32,0x2e,0x30,0x39, - 0x37,0x63,0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30, - 0x2d,0x31,0x31,0x2e,0x31,0x30,0x34,0x2d,0x34,0x2e, - 0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x34, - 0x2d,0x31,0x31,0x2e,0x31,0x30,0x38,0x76,0x2d,0x31, - 0x39,0x2e,0x32,0x33,0x35,0x63,0x30,0x2d,0x36,0x2e, - 0x31,0x31,0x32,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2d, - 0x31,0x31,0x2e,0x31,0x31,0x2c,0x31,0x31,0x2e,0x31, - 0x30,0x34,0x2d,0x31,0x31,0x2e,0x31,0x31,0x20,0x20, - 0x20,0x68,0x36,0x30,0x2e,0x36,0x39,0x63,0x36,0x2e, - 0x31,0x30,0x38,0x2c,0x30,0x2c,0x31,0x31,0x2e,0x31, - 0x30,0x36,0x2d,0x34,0x2e,0x39,0x39,0x38,0x2c,0x31, - 0x31,0x2e,0x31,0x30,0x36,0x2d,0x31,0x31,0x2e,0x31, - 0x30,0x38,0x56,0x33,0x37,0x30,0x2e,0x33,0x33,0x63, - 0x30,0x2d,0x36,0x2e,0x31,0x31,0x32,0x2d,0x34,0x2e, - 0x39,0x39,0x38,0x2d,0x31,0x31,0x2e,0x31,0x31,0x2d, - 0x31,0x31,0x2e,0x31,0x30,0x36,0x2d,0x31,0x31,0x2e, - 0x31,0x31,0x68,0x2d,0x36,0x30,0x2e,0x36,0x39,0x63, - 0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30,0x2d,0x31, - 0x31,0x2e,0x31,0x30,0x34,0x2d,0x34,0x2e,0x39,0x39, - 0x38,0x2d,0x31,0x31,0x2e,0x31,0x30,0x34,0x2d,0x31, - 0x31,0x2e,0x31,0x30,0x38,0x20,0x20,0x20,0x76,0x2d, - 0x31,0x39,0x2e,0x32,0x34,0x36,0x63,0x30,0x2d,0x36, - 0x2e,0x31,0x31,0x2c,0x34,0x2e,0x39,0x39,0x38,0x2d, - 0x31,0x31,0x2e,0x31,0x30,0x38,0x2c,0x31,0x31,0x2e, - 0x31,0x30,0x34,0x2d,0x31,0x31,0x2e,0x31,0x30,0x38, - 0x68,0x36,0x30,0x2e,0x36,0x39,0x63,0x36,0x2e,0x31, - 0x30,0x38,0x2c,0x30,0x2c,0x31,0x34,0x2e,0x36,0x34, - 0x33,0x2d,0x33,0x2e,0x35,0x33,0x34,0x2c,0x31,0x38, - 0x2e,0x39,0x36,0x34,0x2d,0x37,0x2e,0x38,0x35,0x34, - 0x6c,0x32,0x35,0x2e,0x37,0x34,0x39,0x2d,0x32,0x35, - 0x2e,0x37,0x34,0x31,0x20,0x20,0x20,0x63,0x34,0x2e, - 0x33,0x32,0x31,0x2d,0x34,0x2e,0x33,0x31,0x39,0x2c, - 0x32,0x2e,0x38,0x35,0x35,0x2d,0x37,0x2e,0x38,0x35, - 0x33,0x2d,0x33,0x2e,0x32,0x35,0x33,0x2d,0x37,0x2e, - 0x38,0x35,0x33,0x48,0x31,0x31,0x31,0x2e,0x30,0x31, - 0x63,0x2d,0x36,0x2e,0x31,0x30,0x37,0x2c,0x30,0x2d, - 0x31,0x34,0x2e,0x36,0x34,0x33,0x2c,0x33,0x2e,0x35, - 0x33,0x34,0x2d,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c, - 0x37,0x2e,0x38,0x35,0x35,0x4c,0x36,0x36,0x2e,0x33, - 0x31,0x2c,0x33,0x30,0x39,0x2e,0x39,0x20,0x20,0x20, - 0x63,0x2d,0x34,0x2e,0x33,0x32,0x2c,0x34,0x2e,0x33, - 0x32,0x31,0x2d,0x37,0x2e,0x38,0x35,0x37,0x2c,0x31, - 0x32,0x2e,0x38,0x35,0x34,0x2d,0x37,0x2e,0x38,0x35, - 0x37,0x2c,0x31,0x38,0x2e,0x39,0x36,0x34,0x76,0x31, - 0x30,0x32,0x2e,0x31,0x32,0x35,0x63,0x30,0x2c,0x36, - 0x2e,0x31,0x31,0x2c,0x33,0x2e,0x35,0x33,0x37,0x2c, - 0x31,0x34,0x2e,0x36,0x34,0x36,0x2c,0x37,0x2e,0x38, - 0x35,0x37,0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x6c, - 0x32,0x35,0x2e,0x37,0x33,0x37,0x2c,0x32,0x35,0x2e, - 0x37,0x34,0x20,0x20,0x20,0x63,0x34,0x2e,0x33,0x32, - 0x31,0x2c,0x34,0x2e,0x33,0x31,0x36,0x2c,0x31,0x32, - 0x2e,0x38,0x35,0x35,0x2c,0x37,0x2e,0x38,0x35,0x34, - 0x2c,0x31,0x38,0x2e,0x39,0x36,0x33,0x2c,0x37,0x2e, - 0x38,0x35,0x34,0x68,0x31,0x30,0x32,0x2e,0x31,0x34, - 0x33,0x63,0x36,0x2e,0x31,0x31,0x32,0x2c,0x30,0x2c, - 0x37,0x2e,0x35,0x37,0x34,0x2d,0x33,0x2e,0x35,0x33, - 0x36,0x2c,0x33,0x2e,0x32,0x35,0x33,0x2d,0x37,0x2e, - 0x38,0x35,0x35,0x6c,0x2d,0x32,0x35,0x2e,0x37,0x34, - 0x31,0x2d,0x32,0x35,0x2e,0x37,0x34,0x34,0x20,0x20, - 0x20,0x63,0x2d,0x34,0x2e,0x33,0x32,0x2d,0x34,0x2e, - 0x33,0x32,0x31,0x2d,0x31,0x32,0x2e,0x38,0x35,0x34, - 0x2d,0x37,0x2e,0x38,0x35,0x37,0x2d,0x31,0x38,0x2e, - 0x39,0x36,0x34,0x2d,0x37,0x2e,0x38,0x35,0x37,0x4c, - 0x31,0x31,0x31,0x2e,0x30,0x31,0x2c,0x34,0x34,0x32, - 0x2e,0x30,0x39,0x37,0x7a,0x22,0x2f,0x3e,0x0a,0x09, - 0x3c,0x67,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x35,0x35,0x38,0x2e,0x36,0x30,0x35,0x2c,0x33, - 0x32,0x36,0x2e,0x35,0x36,0x32,0x63,0x2d,0x31,0x2e, - 0x36,0x32,0x33,0x2c,0x33,0x2e,0x38,0x2d,0x33,0x2e, - 0x38,0x35,0x31,0x2c,0x37,0x2e,0x31,0x31,0x35,0x2d, - 0x36,0x2e,0x36,0x38,0x33,0x2c,0x39,0x2e,0x39,0x34, - 0x33,0x63,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x32, - 0x2e,0x38,0x33,0x36,0x2d,0x36,0x2e,0x31,0x34,0x36, - 0x2c,0x35,0x2e,0x30,0x36,0x2d,0x39,0x2e,0x39,0x34, - 0x37,0x2c,0x36,0x2e,0x36,0x38,0x32,0x20,0x20,0x20, - 0x20,0x63,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2c,0x31, - 0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x38,0x33,0x38, - 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32,0x2e, - 0x31,0x31,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34,0x68, - 0x2d,0x38,0x2e,0x34,0x39,0x36,0x63,0x2d,0x34,0x2e, - 0x32,0x38,0x33,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32, - 0x34,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32, - 0x2e,0x31,0x32,0x31,0x2d,0x32,0x2e,0x34,0x33,0x34, - 0x63,0x2d,0x33,0x2e,0x38,0x2d,0x31,0x2e,0x36,0x32, - 0x33,0x2d,0x37,0x2e,0x31,0x31,0x35,0x2d,0x33,0x2e, - 0x38,0x34,0x36,0x2d,0x39,0x2e,0x39,0x34,0x32,0x2d, - 0x36,0x2e,0x36,0x38,0x32,0x20,0x20,0x20,0x20,0x63, - 0x2d,0x32,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x38, - 0x32,0x38,0x2d,0x35,0x2e,0x30,0x36,0x33,0x2d,0x36, - 0x2e,0x31,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x33, - 0x2d,0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x31,0x2e, - 0x36,0x32,0x36,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d, - 0x32,0x2e,0x34,0x33,0x35,0x2d,0x37,0x2e,0x38,0x33, - 0x38,0x2d,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31,0x32, - 0x2e,0x31,0x32,0x31,0x76,0x2d,0x34,0x37,0x2e,0x38, - 0x35,0x38,0x63,0x30,0x2d,0x34,0x2e,0x32,0x38,0x32, - 0x2c,0x30,0x2e,0x38,0x30,0x39,0x2d,0x38,0x2e,0x33, - 0x32,0x34,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2d,0x31, - 0x32,0x2e,0x31,0x32,0x20,0x20,0x20,0x20,0x63,0x31, - 0x2e,0x36,0x31,0x39,0x2d,0x33,0x2e,0x38,0x30,0x31, - 0x2c,0x33,0x2e,0x38,0x34,0x37,0x2d,0x37,0x2e,0x31, - 0x31,0x35,0x2c,0x36,0x2e,0x36,0x38,0x33,0x2d,0x39, - 0x2e,0x39,0x34,0x37,0x63,0x32,0x2e,0x38,0x32,0x37, - 0x2d,0x32,0x2e,0x38,0x33,0x33,0x2c,0x36,0x2e,0x31, - 0x34,0x34,0x2d,0x35,0x2e,0x30,0x35,0x36,0x2c,0x39, - 0x2e,0x39,0x34,0x32,0x2d,0x36,0x2e,0x36,0x38,0x32, - 0x63,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e,0x36, - 0x31,0x39,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d,0x32, - 0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x32, - 0x31,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68,0x38,0x2e, - 0x34,0x39,0x36,0x20,0x20,0x20,0x20,0x63,0x34,0x2e, - 0x32,0x37,0x38,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x31, - 0x39,0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32, - 0x2e,0x31,0x31,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34, - 0x63,0x33,0x2e,0x38,0x2c,0x31,0x2e,0x36,0x32,0x36, - 0x2c,0x37,0x2e,0x31,0x31,0x35,0x2c,0x33,0x2e,0x38, - 0x35,0x2c,0x39,0x2e,0x39,0x34,0x37,0x2c,0x36,0x2e, - 0x36,0x38,0x32,0x73,0x35,0x2e,0x30,0x36,0x2c,0x36, - 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x33, - 0x2c,0x39,0x2e,0x39,0x34,0x37,0x63,0x31,0x2e,0x36, - 0x32,0x33,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32, - 0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38, - 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, - 0x31,0x32,0x20,0x20,0x20,0x20,0x76,0x32,0x34,0x2e, - 0x39,0x36,0x34,0x68,0x2d,0x35,0x38,0x2e,0x31,0x31, - 0x34,0x76,0x32,0x33,0x2e,0x36,0x31,0x38,0x63,0x30, - 0x2c,0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e,0x34, - 0x38,0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31, - 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x63, - 0x30,0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32,0x34, - 0x33,0x2c,0x32,0x2e,0x32,0x37,0x37,0x2c,0x34,0x2e, - 0x31,0x39,0x35,0x2c,0x33,0x2e,0x39,0x33,0x36,0x2c, - 0x35,0x2e,0x38,0x35,0x32,0x63,0x31,0x2e,0x36,0x36, - 0x2c,0x31,0x2e,0x36,0x35,0x37,0x2c,0x33,0x2e,0x36, - 0x30,0x38,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e, - 0x38,0x35,0x34,0x2c,0x33,0x2e,0x39,0x33,0x38,0x20, - 0x20,0x20,0x20,0x63,0x32,0x2e,0x32,0x34,0x33,0x2c, - 0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34, - 0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e, - 0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68, - 0x38,0x2e,0x34,0x39,0x35,0x63,0x32,0x2e,0x35,0x35, - 0x34,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x33,0x2d, - 0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e,0x31,0x39, - 0x39,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32,0x2e, - 0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c, - 0x34,0x2e,0x31,0x39,0x35,0x2d,0x32,0x2e,0x32,0x38, - 0x31,0x2c,0x35,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e, - 0x39,0x33,0x38,0x20,0x20,0x20,0x20,0x63,0x31,0x2e, - 0x36,0x35,0x37,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c, - 0x32,0x2e,0x39,0x37,0x31,0x2d,0x33,0x2e,0x36,0x30, - 0x39,0x2c,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, - 0x38,0x35,0x32,0x63,0x30,0x2e,0x39,0x36,0x34,0x2d, - 0x32,0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35, - 0x31,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e, - 0x34,0x35,0x31,0x2d,0x37,0x2e,0x32,0x30,0x32,0x76, - 0x2d,0x37,0x2e,0x30,0x34,0x32,0x6c,0x31,0x32,0x2e, - 0x37,0x33,0x39,0x2c,0x32,0x2e,0x30,0x37,0x76,0x34, - 0x2e,0x32,0x34,0x38,0x20,0x20,0x20,0x20,0x43,0x35, - 0x36,0x31,0x2e,0x30,0x33,0x38,0x2c,0x33,0x31,0x38, - 0x2e,0x37,0x32,0x34,0x2c,0x35,0x36,0x30,0x2e,0x32, - 0x32,0x39,0x2c,0x33,0x32,0x32,0x2e,0x37,0x36,0x35, - 0x2c,0x35,0x35,0x38,0x2e,0x36,0x30,0x35,0x2c,0x33, - 0x32,0x36,0x2e,0x35,0x36,0x32,0x7a,0x20,0x4d,0x35, - 0x34,0x38,0x2e,0x32,0x39,0x39,0x2c,0x32,0x36,0x35, - 0x2e,0x38,0x35,0x35,0x63,0x30,0x2d,0x32,0x2e,0x35, - 0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x36,0x2d,0x34, - 0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x31, - 0x2d,0x37,0x2e,0x31,0x39,0x39,0x20,0x20,0x20,0x20, - 0x63,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2d,0x32,0x2e, - 0x32,0x34,0x33,0x2d,0x32,0x2e,0x32,0x38,0x2d,0x34, - 0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38, - 0x2d,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x31,0x2e, - 0x36,0x35,0x36,0x2d,0x31,0x2e,0x36,0x35,0x38,0x2d, - 0x33,0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37, - 0x2d,0x35,0x2e,0x38,0x35,0x32,0x2d,0x33,0x2e,0x39, - 0x33,0x38,0x63,0x2d,0x32,0x2e,0x32,0x34,0x38,0x2d, - 0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34, - 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31, - 0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d,0x38, - 0x2e,0x34,0x39,0x36,0x20,0x20,0x20,0x20,0x63,0x2d, - 0x32,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e, - 0x39,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d, - 0x37,0x2e,0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x35, - 0x63,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x30,0x2e, - 0x39,0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c, - 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35, - 0x35,0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x31, - 0x2e,0x36,0x35,0x36,0x2c,0x31,0x2e,0x36,0x35,0x37, - 0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x30, - 0x39,0x2d,0x33,0x2e,0x39,0x33,0x34,0x2c,0x35,0x2e, - 0x38,0x35,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x30, - 0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37, - 0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x34,0x2e,0x36, - 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x37, - 0x2e,0x31,0x39,0x39,0x56,0x32,0x38,0x31,0x2e,0x36, - 0x68,0x34,0x35,0x2e,0x33,0x37,0x35,0x56,0x32,0x36, - 0x35,0x2e,0x38,0x35,0x35,0x4c,0x35,0x34,0x38,0x2e, - 0x32,0x39,0x39,0x2c,0x32,0x36,0x35,0x2e,0x38,0x35, - 0x35,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x36,0x39,0x38,0x2e,0x35,0x30,0x36, - 0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x76,0x2d,0x37, - 0x37,0x2e,0x36,0x39,0x35,0x63,0x30,0x2d,0x32,0x2e, - 0x35,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2d, - 0x34,0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e,0x34,0x35, - 0x2d,0x37,0x2e,0x31,0x39,0x39,0x63,0x2d,0x30,0x2e, - 0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2d, - 0x32,0x2e,0x32,0x37,0x36,0x2d,0x34,0x2e,0x31,0x39, - 0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, - 0x38,0x35,0x33,0x20,0x20,0x20,0x20,0x63,0x2d,0x31, - 0x2e,0x36,0x35,0x32,0x2d,0x31,0x2e,0x36,0x35,0x37, - 0x2d,0x33,0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39, - 0x37,0x2d,0x35,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e, - 0x39,0x33,0x38,0x63,0x2d,0x32,0x2e,0x32,0x34,0x36, - 0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36, - 0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e, - 0x31,0x39,0x38,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d, - 0x36,0x2e,0x33,0x31,0x37,0x63,0x2d,0x32,0x2e,0x35, - 0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36, - 0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x32, - 0x30,0x32,0x2c,0x31,0x2e,0x34,0x35,0x20,0x20,0x20, - 0x20,0x63,0x2d,0x32,0x2e,0x32,0x34,0x33,0x2c,0x30, - 0x2e,0x39,0x36,0x39,0x2d,0x34,0x2e,0x32,0x31,0x2c, - 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x39,0x30, - 0x31,0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x31, - 0x2e,0x36,0x39,0x35,0x2c,0x31,0x2e,0x36,0x35,0x37, - 0x2d,0x33,0x2e,0x30,0x32,0x33,0x2c,0x33,0x2e,0x36, - 0x30,0x39,0x2d,0x33,0x2e,0x39,0x39,0x31,0x2c,0x35, - 0x2e,0x38,0x35,0x33,0x63,0x2d,0x30,0x2e,0x39,0x36, - 0x36,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e, - 0x34,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d, - 0x31,0x2e,0x34,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39, - 0x39,0x76,0x37,0x37,0x2e,0x36,0x39,0x35,0x68,0x2d, - 0x31,0x32,0x2e,0x36,0x34,0x34,0x20,0x20,0x20,0x20, - 0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x35,0x63,0x30, - 0x2d,0x32,0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34, - 0x38,0x31,0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31, - 0x2e,0x34,0x34,0x39,0x2d,0x37,0x2e,0x31,0x39,0x39, - 0x63,0x2d,0x30,0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e, - 0x32,0x34,0x33,0x2d,0x32,0x2e,0x32,0x39,0x36,0x2d, - 0x34,0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x38, - 0x37,0x2d,0x35,0x2e,0x38,0x35,0x33,0x63,0x2d,0x31, - 0x2e,0x36,0x39,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d, - 0x33,0x2e,0x36,0x35,0x38,0x2d,0x32,0x2e,0x39,0x37, - 0x2d,0x35,0x2e,0x39,0x30,0x35,0x2d,0x33,0x2e,0x39, - 0x33,0x38,0x20,0x20,0x20,0x20,0x63,0x2d,0x32,0x2e, - 0x32,0x34,0x32,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d, - 0x34,0x2e,0x36,0x34,0x33,0x2d,0x31,0x2e,0x34,0x35, - 0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34, - 0x35,0x68,0x2d,0x36,0x2e,0x33,0x31,0x37,0x63,0x2d, - 0x32,0x2e,0x35,0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e, - 0x39,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d, - 0x37,0x2e,0x31,0x39,0x38,0x2c,0x31,0x2e,0x34,0x35, - 0x63,0x2d,0x32,0x2e,0x32,0x34,0x37,0x2c,0x30,0x2e, - 0x39,0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x35,0x2c, - 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35, - 0x34,0x2c,0x33,0x2e,0x39,0x33,0x38,0x20,0x20,0x20, - 0x20,0x63,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x31, - 0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39,0x37,0x2c, - 0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e,0x39,0x33, - 0x36,0x2c,0x35,0x2e,0x38,0x35,0x33,0x63,0x2d,0x30, - 0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e,0x32,0x34,0x37, - 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34, - 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31, - 0x39,0x39,0x76,0x37,0x37,0x2e,0x36,0x39,0x35,0x68, - 0x2d,0x31,0x32,0x2e,0x37,0x34,0x56,0x32,0x33,0x37, - 0x2e,0x34,0x37,0x34,0x68,0x34,0x2e,0x32,0x34,0x34, - 0x6c,0x36,0x2e,0x39,0x34,0x32,0x2c,0x31,0x30,0x2e, - 0x37,0x37,0x33,0x20,0x20,0x20,0x20,0x63,0x32,0x2e, - 0x38,0x39,0x39,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c, - 0x36,0x2e,0x35,0x34,0x2d,0x37,0x2e,0x30,0x36,0x31, - 0x2c,0x31,0x30,0x2e,0x39,0x33,0x31,0x2d,0x39,0x2e, - 0x33,0x37,0x36,0x63,0x34,0x2e,0x33,0x38,0x32,0x2d, - 0x32,0x2e,0x33,0x31,0x32,0x2c,0x39,0x2e,0x31,0x36, - 0x36,0x2d,0x33,0x2e,0x34,0x37,0x31,0x2c,0x31,0x34, - 0x2e,0x33,0x34,0x34,0x2d,0x33,0x2e,0x34,0x37,0x31, - 0x68,0x31,0x2e,0x30,0x33,0x37,0x63,0x36,0x2e,0x30, - 0x30,0x39,0x2c,0x30,0x2c,0x31,0x31,0x2e,0x34,0x32, - 0x38,0x2c,0x31,0x2e,0x34,0x38,0x35,0x2c,0x31,0x36, - 0x2e,0x32,0x36,0x36,0x2c,0x34,0x2e,0x34,0x35,0x35, - 0x20,0x20,0x20,0x20,0x63,0x34,0x2e,0x38,0x33,0x33, - 0x2c,0x32,0x2e,0x39,0x37,0x2c,0x38,0x2e,0x35,0x36, - 0x33,0x2c,0x36,0x2e,0x39,0x30,0x38,0x2c,0x31,0x31, - 0x2e,0x31,0x38,0x38,0x2c,0x31,0x31,0x2e,0x38,0x31, - 0x31,0x63,0x31,0x2e,0x33,0x31,0x32,0x2d,0x32,0x2e, - 0x34,0x31,0x39,0x2c,0x32,0x2e,0x39,0x33,0x36,0x2d, - 0x34,0x2e,0x36,0x32,0x37,0x2c,0x34,0x2e,0x38,0x36, - 0x38,0x2d,0x36,0x2e,0x36,0x32,0x39,0x63,0x31,0x2e, - 0x39,0x33,0x34,0x2d,0x32,0x2e,0x30,0x30,0x35,0x2c, - 0x34,0x2e,0x30,0x37,0x35,0x2d,0x33,0x2e,0x37,0x31, - 0x32,0x2c,0x36,0x2e,0x34,0x32,0x33,0x2d,0x35,0x2e, - 0x31,0x32,0x38,0x20,0x20,0x20,0x20,0x63,0x32,0x2e, - 0x33,0x35,0x2d,0x31,0x2e,0x34,0x31,0x36,0x2c,0x34, - 0x2e,0x39,0x30,0x35,0x2d,0x32,0x2e,0x35,0x32,0x32, - 0x2c,0x37,0x2e,0x36,0x36,0x38,0x2d,0x33,0x2e,0x33, - 0x31,0x38,0x63,0x32,0x2e,0x37,0x36,0x31,0x2d,0x30, - 0x2e,0x37,0x39,0x32,0x2c,0x35,0x2e,0x36,0x32,0x37, - 0x2d,0x31,0x2e,0x31,0x39,0x2c,0x38,0x2e,0x35,0x39, - 0x37,0x2d,0x31,0x2e,0x31,0x39,0x68,0x31,0x2e,0x30, - 0x33,0x37,0x63,0x34,0x2e,0x32,0x37,0x38,0x2c,0x30, - 0x2c,0x38,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x38, - 0x31,0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x2c,0x32, - 0x2e,0x34,0x33,0x34,0x20,0x20,0x20,0x20,0x63,0x33, - 0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e,0x36,0x32,0x36, - 0x2c,0x37,0x2e,0x31,0x31,0x34,0x2c,0x33,0x2e,0x38, - 0x35,0x2c,0x39,0x2e,0x39,0x34,0x36,0x2c,0x36,0x2e, - 0x36,0x38,0x32,0x63,0x32,0x2e,0x38,0x32,0x38,0x2c, - 0x32,0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e,0x30,0x35, - 0x37,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e, - 0x36,0x38,0x34,0x2c,0x39,0x2e,0x39,0x34,0x37,0x63, - 0x31,0x2e,0x36,0x31,0x38,0x2c,0x33,0x2e,0x37,0x39, - 0x36,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c,0x37,0x2e, - 0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c, - 0x31,0x32,0x2e,0x31,0x32,0x76,0x37,0x36,0x2e,0x39, - 0x36,0x38,0x68,0x2d,0x31,0x32,0x2e,0x37,0x34,0x37, - 0x20,0x20,0x20,0x20,0x76,0x2d,0x30,0x2e,0x30,0x30, - 0x32,0x48,0x36,0x39,0x38,0x2e,0x35,0x30,0x36,0x7a, - 0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74, - 0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46, - 0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22, - 0x4d,0x38,0x30,0x33,0x2e,0x33,0x34,0x33,0x2c,0x33, - 0x34,0x33,0x2e,0x35,0x35,0x6c,0x2d,0x37,0x2e,0x30, - 0x34,0x36,0x2d,0x31,0x30,0x2e,0x37,0x37,0x33,0x63, - 0x2d,0x32,0x2e,0x39,0x2c,0x33,0x2e,0x39,0x33,0x38, - 0x2d,0x36,0x2e,0x35,0x32,0x35,0x2c,0x37,0x2e,0x30, - 0x36,0x31,0x2d,0x31,0x30,0x2e,0x38,0x37,0x38,0x2c, - 0x39,0x2e,0x33,0x37,0x36,0x20,0x20,0x20,0x20,0x63, - 0x2d,0x34,0x2e,0x33,0x34,0x38,0x2c,0x32,0x2e,0x33, - 0x31,0x32,0x2d,0x39,0x2e,0x31,0x31,0x35,0x2c,0x33, - 0x2e,0x34,0x36,0x37,0x2d,0x31,0x34,0x2e,0x32,0x39, - 0x34,0x2c,0x33,0x2e,0x34,0x36,0x37,0x68,0x2d,0x33, - 0x2e,0x32,0x31,0x31,0x63,0x2d,0x34,0x2e,0x32,0x38, - 0x36,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32,0x33,0x2d, - 0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x31, - 0x32,0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d,0x33, - 0x2e,0x38,0x30,0x31,0x2d,0x31,0x2e,0x36,0x32,0x33, - 0x2d,0x37,0x2e,0x31,0x31,0x34,0x2d,0x33,0x2e,0x38, - 0x34,0x36,0x2d,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36, - 0x2e,0x36,0x38,0x32,0x20,0x20,0x20,0x20,0x63,0x2d, - 0x32,0x2e,0x38,0x33,0x32,0x2d,0x32,0x2e,0x38,0x32, - 0x38,0x2d,0x35,0x2e,0x30,0x36,0x31,0x2d,0x36,0x2e, - 0x31,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x34,0x2d, - 0x39,0x2e,0x39,0x34,0x33,0x63,0x2d,0x31,0x2e,0x36, - 0x32,0x32,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32, - 0x2e,0x34,0x33,0x34,0x2d,0x37,0x2e,0x38,0x33,0x38, - 0x2d,0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32,0x2e, - 0x31,0x32,0x31,0x76,0x2d,0x37,0x36,0x2e,0x39,0x36, - 0x36,0x68,0x31,0x32,0x2e,0x37,0x34,0x33,0x76,0x37, - 0x37,0x2e,0x36,0x39,0x31,0x20,0x20,0x20,0x20,0x63, - 0x30,0x2c,0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e, - 0x34,0x38,0x31,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c, - 0x31,0x2e,0x34,0x34,0x36,0x2c,0x37,0x2e,0x32,0x30, - 0x32,0x63,0x30,0x2e,0x39,0x36,0x39,0x2c,0x32,0x2e, - 0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x38,0x2c,0x34, - 0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e,0x39,0x33,0x38, - 0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x31,0x2e,0x36, - 0x35,0x37,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2c,0x33, - 0x2e,0x36,0x30,0x39,0x2c,0x32,0x2e,0x39,0x37,0x2c, - 0x35,0x2e,0x38,0x35,0x33,0x2c,0x33,0x2e,0x39,0x33, - 0x38,0x20,0x20,0x20,0x20,0x63,0x32,0x2e,0x32,0x34, - 0x32,0x2c,0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e, - 0x36,0x34,0x36,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c, - 0x37,0x2e,0x32,0x30,0x33,0x2c,0x31,0x2e,0x34,0x34, - 0x37,0x68,0x38,0x2e,0x34,0x39,0x36,0x63,0x32,0x2e, - 0x35,0x34,0x39,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35, - 0x32,0x2d,0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e, - 0x31,0x39,0x33,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63, - 0x32,0x2e,0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36, - 0x38,0x2c,0x34,0x2e,0x31,0x39,0x38,0x2d,0x32,0x2e, - 0x32,0x38,0x31,0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d, - 0x33,0x2e,0x39,0x33,0x38,0x20,0x20,0x20,0x20,0x63, - 0x31,0x2e,0x36,0x35,0x37,0x2d,0x31,0x2e,0x36,0x35, - 0x37,0x2c,0x32,0x2e,0x39,0x37,0x31,0x2d,0x33,0x2e, - 0x36,0x30,0x39,0x2c,0x33,0x2e,0x39,0x33,0x36,0x2d, - 0x35,0x2e,0x38,0x35,0x32,0x63,0x30,0x2e,0x39,0x36, - 0x39,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e, - 0x34,0x35,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c, - 0x31,0x2e,0x34,0x35,0x34,0x2d,0x37,0x2e,0x32,0x30, - 0x32,0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x31,0x68, - 0x31,0x32,0x2e,0x37,0x33,0x36,0x56,0x33,0x34,0x33, - 0x2e,0x35,0x35,0x48,0x38,0x30,0x33,0x2e,0x33,0x34, - 0x33,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x38,0x33,0x37,0x2e,0x33,0x31,0x39, - 0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x56,0x31,0x39, - 0x35,0x68,0x31,0x32,0x2e,0x37,0x33,0x39,0x76,0x31, - 0x34,0x38,0x2e,0x35,0x35,0x48,0x38,0x33,0x37,0x2e, - 0x33,0x31,0x39,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x39,0x34,0x36,0x2e,0x34, - 0x30,0x34,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x6c, - 0x2d,0x37,0x2e,0x30,0x34,0x37,0x2d,0x31,0x30,0x2e, - 0x35,0x36,0x37,0x63,0x2d,0x32,0x2e,0x38,0x39,0x39, - 0x2c,0x33,0x2e,0x38,0x2d,0x36,0x2e,0x35,0x32,0x34, - 0x2c,0x36,0x2e,0x38,0x35,0x34,0x2d,0x31,0x30,0x2e, - 0x38,0x38,0x31,0x2c,0x39,0x2e,0x31,0x37,0x63,0x2d, - 0x34,0x2e,0x33,0x34,0x38,0x2c,0x32,0x2e,0x33,0x31, - 0x32,0x2d,0x39,0x2e,0x31,0x31,0x35,0x2c,0x33,0x2e, - 0x34,0x36,0x37,0x2d,0x31,0x34,0x2e,0x32,0x38,0x39, - 0x2c,0x33,0x2e,0x34,0x36,0x37,0x20,0x20,0x20,0x20, - 0x68,0x2d,0x33,0x2e,0x32,0x31,0x36,0x63,0x2d,0x34, - 0x2e,0x32,0x38,0x32,0x2c,0x30,0x2d,0x38,0x2e,0x33, - 0x31,0x39,0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31, - 0x32,0x2e,0x31,0x31,0x36,0x2d,0x32,0x2e,0x34,0x33, - 0x34,0x63,0x2d,0x33,0x2e,0x38,0x30,0x35,0x2d,0x31, - 0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x31,0x31,0x38, - 0x2d,0x33,0x2e,0x38,0x34,0x36,0x2d,0x39,0x2e,0x39, - 0x34,0x36,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63,0x2d, - 0x32,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x38,0x32, - 0x38,0x2d,0x35,0x2e,0x30,0x36,0x33,0x2d,0x36,0x2e, - 0x31,0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x33,0x2d, - 0x39,0x2e,0x39,0x34,0x33,0x20,0x20,0x20,0x20,0x63, - 0x2d,0x31,0x2e,0x36,0x32,0x37,0x2d,0x33,0x2e,0x37, - 0x39,0x36,0x2d,0x32,0x2e,0x34,0x33,0x36,0x2d,0x37, - 0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33,0x36, - 0x2d,0x31,0x32,0x2e,0x31,0x32,0x31,0x76,0x2d,0x31, - 0x2e,0x30,0x33,0x37,0x63,0x30,0x2d,0x34,0x2e,0x32, - 0x37,0x39,0x2c,0x30,0x2e,0x38,0x30,0x39,0x2d,0x38, - 0x2e,0x33,0x32,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2d, - 0x31,0x32,0x2e,0x31,0x32,0x31,0x63,0x31,0x2e,0x36, - 0x31,0x38,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2c,0x33, - 0x2e,0x38,0x34,0x37,0x2d,0x37,0x2e,0x31,0x31,0x31, - 0x2c,0x36,0x2e,0x36,0x38,0x33,0x2d,0x39,0x2e,0x39, - 0x34,0x33,0x20,0x20,0x20,0x20,0x63,0x32,0x2e,0x38, - 0x32,0x38,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x36, - 0x2e,0x31,0x34,0x34,0x2d,0x35,0x2e,0x30,0x36,0x2c, - 0x39,0x2e,0x39,0x34,0x36,0x2d,0x36,0x2e,0x36,0x38, - 0x32,0x63,0x33,0x2e,0x37,0x39,0x37,0x2d,0x31,0x2e, - 0x36,0x32,0x33,0x2c,0x37,0x2e,0x38,0x33,0x34,0x2d, - 0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31, - 0x31,0x36,0x2d,0x32,0x2e,0x34,0x33,0x34,0x68,0x32, - 0x36,0x2e,0x39,0x33,0x37,0x76,0x2d,0x31,0x36,0x2e, - 0x33,0x36,0x38,0x63,0x30,0x2d,0x32,0x2e,0x35,0x35, - 0x33,0x2d,0x30,0x2e,0x34,0x38,0x31,0x2d,0x34,0x2e, - 0x39,0x35,0x32,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37, - 0x2e,0x31,0x39,0x39,0x20,0x20,0x20,0x20,0x63,0x2d, - 0x30,0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34, - 0x33,0x2d,0x32,0x2e,0x32,0x37,0x36,0x2d,0x34,0x2e, - 0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38,0x2d, - 0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x31,0x2e,0x36, - 0x35,0x32,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x33, - 0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37,0x2d, - 0x35,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e,0x39,0x33, - 0x38,0x63,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2d,0x30, - 0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36, - 0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39, - 0x38,0x2d,0x31,0x2e,0x34,0x35,0x68,0x2d,0x37,0x2e, - 0x34,0x35,0x39,0x20,0x20,0x20,0x20,0x63,0x2d,0x32, - 0x2e,0x35,0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e,0x39, - 0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37, - 0x2e,0x31,0x39,0x37,0x2c,0x31,0x2e,0x34,0x35,0x63, - 0x2d,0x32,0x2e,0x32,0x34,0x38,0x2c,0x30,0x2e,0x39, - 0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x35,0x2c,0x32, - 0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x36, - 0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d,0x31,0x2e, - 0x36,0x35,0x32,0x2c,0x31,0x2e,0x36,0x35,0x37,0x2d, - 0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x30,0x39, - 0x2d,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35,0x2e,0x38, - 0x35,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x30,0x2e, - 0x39,0x36,0x39,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d, - 0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36, - 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39, - 0x39,0x76,0x33,0x2e,0x38,0x33,0x35,0x6c,0x2d,0x31, - 0x32,0x2e,0x37,0x34,0x2d,0x32,0x2e,0x30,0x37,0x35, - 0x76,0x2d,0x31,0x2e,0x30,0x33,0x33,0x63,0x30,0x2d, - 0x34,0x2e,0x32,0x38,0x32,0x2c,0x30,0x2e,0x38,0x31, - 0x32,0x2d,0x38,0x2e,0x33,0x32,0x34,0x2c,0x32,0x2e, - 0x34,0x33,0x36,0x2d,0x31,0x32,0x2e,0x31,0x32,0x20, - 0x20,0x20,0x20,0x63,0x31,0x2e,0x36,0x32,0x32,0x2d, - 0x33,0x2e,0x38,0x30,0x31,0x2c,0x33,0x2e,0x38,0x35, - 0x31,0x2d,0x37,0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e, - 0x36,0x38,0x33,0x2d,0x39,0x2e,0x39,0x34,0x37,0x63, - 0x32,0x2e,0x38,0x32,0x38,0x2d,0x32,0x2e,0x38,0x33, - 0x33,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2d,0x35,0x2e, - 0x30,0x35,0x36,0x2c,0x39,0x2e,0x39,0x34,0x32,0x2d, - 0x36,0x2e,0x36,0x38,0x32,0x63,0x33,0x2e,0x37,0x39, - 0x36,0x2d,0x31,0x2e,0x36,0x31,0x39,0x2c,0x37,0x2e, - 0x38,0x33,0x39,0x2d,0x32,0x2e,0x34,0x33,0x34,0x2c, - 0x31,0x32,0x2e,0x31,0x32,0x2d,0x32,0x2e,0x34,0x33, - 0x34,0x68,0x37,0x2e,0x34,0x35,0x39,0x20,0x20,0x20, - 0x20,0x63,0x34,0x2e,0x32,0x37,0x38,0x2c,0x30,0x2c, - 0x38,0x2e,0x33,0x31,0x39,0x2c,0x30,0x2e,0x38,0x31, - 0x35,0x2c,0x31,0x32,0x2e,0x31,0x31,0x37,0x2c,0x32, - 0x2e,0x34,0x33,0x34,0x63,0x33,0x2e,0x38,0x2c,0x31, - 0x2e,0x36,0x32,0x36,0x2c,0x37,0x2e,0x31,0x31,0x33, - 0x2c,0x33,0x2e,0x38,0x35,0x2c,0x39,0x2e,0x39,0x34, - 0x39,0x2c,0x36,0x2e,0x36,0x38,0x32,0x63,0x32,0x2e, - 0x38,0x32,0x38,0x2c,0x32,0x2e,0x38,0x33,0x32,0x2c, - 0x35,0x2e,0x30,0x35,0x37,0x2c,0x36,0x2e,0x31,0x34, - 0x36,0x2c,0x36,0x2e,0x36,0x38,0x2c,0x39,0x2e,0x39, - 0x34,0x37,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x36, - 0x32,0x32,0x2c,0x33,0x2e,0x37,0x39,0x36,0x2c,0x32, - 0x2e,0x34,0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38, - 0x2c,0x32,0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e, - 0x31,0x32,0x76,0x37,0x36,0x2e,0x39,0x36,0x38,0x48, - 0x39,0x34,0x36,0x2e,0x34,0x30,0x34,0x4c,0x39,0x34, - 0x36,0x2e,0x34,0x30,0x34,0x2c,0x33,0x34,0x33,0x2e, - 0x35,0x35,0x7a,0x20,0x4d,0x39,0x33,0x37,0x2e,0x39, - 0x30,0x37,0x2c,0x32,0x39,0x32,0x2e,0x31,0x36,0x37, - 0x68,0x2d,0x32,0x36,0x2e,0x39,0x33,0x37,0x63,0x2d, - 0x32,0x2e,0x35,0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e, - 0x39,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d, - 0x37,0x2e,0x31,0x39,0x39,0x2c,0x31,0x2e,0x34,0x35, - 0x31,0x20,0x20,0x20,0x20,0x63,0x2d,0x32,0x2e,0x32, - 0x34,0x35,0x2c,0x30,0x2e,0x39,0x36,0x38,0x2d,0x34, - 0x2e,0x31,0x39,0x33,0x2c,0x32,0x2e,0x32,0x39,0x36, - 0x2d,0x35,0x2e,0x38,0x35,0x32,0x2c,0x33,0x2e,0x39, - 0x38,0x38,0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c, - 0x31,0x2e,0x36,0x39,0x35,0x2d,0x32,0x2e,0x39,0x37, - 0x31,0x2c,0x33,0x2e,0x36,0x36,0x33,0x2d,0x33,0x2e, - 0x39,0x33,0x38,0x2c,0x35,0x2e,0x39,0x30,0x35,0x63, - 0x2d,0x30,0x2e,0x39,0x37,0x2c,0x32,0x2e,0x32,0x34, - 0x37,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x34,0x2e, - 0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c, - 0x37,0x2e,0x32,0x30,0x33,0x76,0x34,0x2e,0x34,0x35, - 0x31,0x20,0x20,0x20,0x20,0x63,0x30,0x2c,0x32,0x2e, - 0x35,0x35,0x36,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2c, - 0x34,0x2e,0x39,0x35,0x36,0x2c,0x31,0x2e,0x34,0x35, - 0x31,0x2c,0x37,0x2e,0x32,0x30,0x32,0x63,0x30,0x2e, - 0x39,0x36,0x38,0x2c,0x32,0x2e,0x32,0x34,0x33,0x2c, - 0x32,0x2e,0x32,0x37,0x35,0x2c,0x34,0x2e,0x31,0x39, - 0x35,0x2c,0x33,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e, - 0x38,0x35,0x32,0x63,0x31,0x2e,0x36,0x35,0x36,0x2c, - 0x31,0x2e,0x36,0x35,0x37,0x2c,0x33,0x2e,0x36,0x30, - 0x34,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e,0x38, - 0x35,0x32,0x2c,0x33,0x2e,0x39,0x33,0x38,0x20,0x20, - 0x20,0x20,0x63,0x32,0x2e,0x32,0x34,0x33,0x2c,0x30, - 0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36,0x34,0x34, - 0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37,0x2e,0x31, - 0x39,0x39,0x2c,0x31,0x2e,0x34,0x34,0x37,0x68,0x38, - 0x2e,0x34,0x39,0x36,0x63,0x32,0x2e,0x35,0x35,0x33, - 0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x32,0x2d,0x30, - 0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e,0x31,0x39,0x38, - 0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32,0x2e,0x32, - 0x34,0x32,0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c,0x34, - 0x2e,0x31,0x39,0x38,0x2d,0x32,0x2e,0x32,0x38,0x31, - 0x2c,0x35,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e,0x39, - 0x33,0x38,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x36, - 0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32, - 0x2e,0x39,0x37,0x31,0x2d,0x33,0x2e,0x36,0x30,0x39, - 0x2c,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e,0x38, - 0x35,0x32,0x63,0x30,0x2e,0x39,0x36,0x39,0x2d,0x32, - 0x2e,0x32,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35,0x2d, - 0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35, - 0x2d,0x37,0x2e,0x32,0x30,0x32,0x4c,0x39,0x33,0x37, - 0x2e,0x39,0x30,0x37,0x2c,0x32,0x39,0x32,0x2e,0x31, - 0x36,0x37,0x4c,0x39,0x33,0x37,0x2e,0x39,0x30,0x37, - 0x2c,0x32,0x39,0x32,0x2e,0x31,0x36,0x37,0x7a,0x22, - 0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x31,0x30,0x31,0x34,0x2e,0x37,0x37,0x31,0x2c,0x33, - 0x34,0x33,0x2e,0x35,0x35,0x63,0x2d,0x33,0x2e,0x38, - 0x36,0x34,0x2c,0x30,0x2d,0x37,0x2e,0x35,0x30,0x39, - 0x2d,0x30,0x2e,0x37,0x32,0x34,0x2d,0x31,0x30,0x2e, - 0x39,0x33,0x31,0x2d,0x32,0x2e,0x31,0x37,0x34,0x63, - 0x2d,0x33,0x2e,0x34,0x31,0x38,0x2d,0x31,0x2e,0x34, - 0x35,0x31,0x2d,0x36,0x2e,0x33,0x38,0x39,0x2d,0x33, - 0x2e,0x34,0x35,0x36,0x2d,0x38,0x2e,0x39,0x30,0x39, - 0x2d,0x36,0x2e,0x30,0x30,0x39,0x20,0x20,0x20,0x20, - 0x63,0x2d,0x32,0x2e,0x35,0x32,0x2d,0x32,0x2e,0x35, - 0x35,0x37,0x2d,0x34,0x2e,0x35,0x32,0x33,0x2d,0x35, - 0x2e,0x35,0x32,0x36,0x2d,0x36,0x2e,0x30,0x30,0x39, - 0x2d,0x38,0x2e,0x39,0x31,0x63,0x2d,0x31,0x2e,0x34, - 0x38,0x35,0x2d,0x33,0x2e,0x33,0x38,0x33,0x2d,0x32, - 0x2e,0x32,0x32,0x35,0x2d,0x37,0x2e,0x30,0x30,0x37, - 0x2d,0x32,0x2e,0x32,0x32,0x35,0x2d,0x31,0x30,0x2e, - 0x38,0x37,0x36,0x56,0x32,0x34,0x39,0x2e,0x35,0x39, - 0x68,0x2d,0x31,0x39,0x2e,0x30,0x36,0x33,0x76,0x2d, - 0x31,0x32,0x2e,0x31,0x31,0x36,0x68,0x31,0x39,0x2e, - 0x30,0x36,0x33,0x76,0x2d,0x32,0x35,0x2e,0x34,0x38, - 0x35,0x6c,0x31,0x32,0x2e,0x37,0x33,0x39,0x2d,0x32, - 0x2e,0x30,0x37,0x20,0x20,0x20,0x20,0x76,0x32,0x37, - 0x2e,0x35,0x35,0x35,0x68,0x32,0x36,0x2e,0x39,0x33, - 0x37,0x76,0x31,0x32,0x2e,0x31,0x31,0x36,0x68,0x2d, - 0x32,0x36,0x2e,0x39,0x33,0x37,0x76,0x36,0x36,0x2e, - 0x36,0x31,0x31,0x63,0x30,0x2c,0x32,0x2e,0x31,0x34, - 0x33,0x2c,0x30,0x2e,0x33,0x39,0x38,0x2c,0x34,0x2e, - 0x31,0x32,0x39,0x2c,0x31,0x2e,0x31,0x39,0x34,0x2c, - 0x35,0x2e,0x39,0x35,0x35,0x63,0x30,0x2e,0x37,0x38, - 0x38,0x2c,0x31,0x2e,0x38,0x33,0x33,0x2c,0x31,0x2e, - 0x38,0x37,0x39,0x2c,0x33,0x2e,0x34,0x33,0x37,0x2c, - 0x33,0x2e,0x32,0x36,0x31,0x2c,0x34,0x2e,0x38,0x31, - 0x38,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x33,0x38, - 0x33,0x2c,0x31,0x2e,0x33,0x38,0x31,0x2c,0x33,0x2e, - 0x30,0x30,0x34,0x2c,0x32,0x2e,0x34,0x37,0x32,0x2c, - 0x34,0x2e,0x38,0x36,0x38,0x2c,0x33,0x2e,0x32,0x36, - 0x34,0x63,0x31,0x2e,0x38,0x36,0x36,0x2c,0x30,0x2e, - 0x37,0x39,0x32,0x2c,0x33,0x2e,0x38,0x36,0x34,0x2c, - 0x31,0x2e,0x31,0x38,0x39,0x2c,0x36,0x2e,0x30,0x30, - 0x39,0x2c,0x31,0x2e,0x31,0x38,0x39,0x68,0x31,0x31, - 0x2e,0x36,0x30,0x34,0x76,0x31,0x32,0x2e,0x31,0x32, - 0x31,0x4c,0x31,0x30,0x31,0x34,0x2e,0x37,0x37,0x31, - 0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x4c,0x31,0x30, - 0x31,0x34,0x2e,0x37,0x37,0x31,0x2c,0x33,0x34,0x33, - 0x2e,0x35,0x35,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09, - 0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c, - 0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22, - 0x20,0x64,0x3d,0x22,0x4d,0x31,0x30,0x35,0x32,0x2e, - 0x39,0x39,0x36,0x2c,0x32,0x31,0x31,0x2e,0x39,0x38, - 0x39,0x56,0x31,0x39,0x35,0x68,0x31,0x34,0x2e,0x38, - 0x31,0x34,0x76,0x31,0x36,0x2e,0x39,0x38,0x39,0x48, - 0x31,0x30,0x35,0x32,0x2e,0x39,0x39,0x36,0x7a,0x20, - 0x4d,0x31,0x30,0x35,0x34,0x2e,0x30,0x33,0x33,0x2c, - 0x33,0x34,0x33,0x2e,0x35,0x35,0x56,0x32,0x33,0x37, - 0x2e,0x34,0x37,0x34,0x68,0x31,0x32,0x2e,0x37,0x34, - 0x56,0x33,0x34,0x33,0x2e,0x35,0x35,0x48,0x31,0x30, - 0x35,0x34,0x2e,0x30,0x33,0x33,0x7a,0x22,0x2f,0x3e, - 0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66, - 0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46, - 0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x31, - 0x36,0x34,0x2e,0x39,0x33,0x2c,0x33,0x32,0x36,0x2e, - 0x35,0x36,0x32,0x63,0x2d,0x31,0x2e,0x36,0x32,0x33, - 0x2c,0x33,0x2e,0x38,0x2d,0x33,0x2e,0x38,0x35,0x32, - 0x2c,0x37,0x2e,0x31,0x31,0x35,0x2d,0x36,0x2e,0x36, - 0x37,0x39,0x2c,0x39,0x2e,0x39,0x34,0x33,0x63,0x2d, - 0x32,0x2e,0x38,0x33,0x37,0x2c,0x32,0x2e,0x38,0x33, - 0x36,0x2d,0x36,0x2e,0x31,0x34,0x39,0x2c,0x35,0x2e, - 0x30,0x36,0x2d,0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e, - 0x36,0x38,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x33, - 0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e,0x36,0x32,0x33, - 0x2d,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34, - 0x33,0x34,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x2c, - 0x32,0x2e,0x34,0x33,0x34,0x68,0x2d,0x38,0x2e,0x34, - 0x39,0x36,0x63,0x2d,0x34,0x2e,0x32,0x38,0x32,0x2c, - 0x30,0x2d,0x38,0x2e,0x33,0x31,0x39,0x2d,0x30,0x2e, - 0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x31,0x31,0x36, - 0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d,0x33,0x2e, - 0x38,0x30,0x35,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d, - 0x37,0x2e,0x31,0x31,0x39,0x2d,0x33,0x2e,0x38,0x34, - 0x36,0x2d,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36,0x2e, - 0x36,0x38,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x32, - 0x2e,0x38,0x33,0x37,0x2d,0x32,0x2e,0x38,0x32,0x38, - 0x2d,0x35,0x2e,0x30,0x36,0x32,0x2d,0x36,0x2e,0x31, - 0x34,0x33,0x2d,0x36,0x2e,0x36,0x38,0x33,0x2d,0x39, - 0x2e,0x39,0x34,0x33,0x63,0x2d,0x31,0x2e,0x36,0x32, - 0x37,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32,0x2e, - 0x34,0x33,0x36,0x2d,0x37,0x2e,0x38,0x33,0x38,0x2d, - 0x32,0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e,0x31, - 0x32,0x31,0x76,0x2d,0x34,0x37,0x2e,0x38,0x35,0x38, - 0x63,0x30,0x2d,0x34,0x2e,0x32,0x38,0x32,0x2c,0x30, - 0x2e,0x38,0x30,0x39,0x2d,0x38,0x2e,0x33,0x32,0x34, - 0x2c,0x32,0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e, - 0x31,0x32,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x36, - 0x31,0x39,0x2d,0x33,0x2e,0x38,0x30,0x31,0x2c,0x33, - 0x2e,0x38,0x34,0x36,0x2d,0x37,0x2e,0x31,0x31,0x35, - 0x2c,0x36,0x2e,0x36,0x38,0x33,0x2d,0x39,0x2e,0x39, - 0x34,0x37,0x63,0x32,0x2e,0x38,0x32,0x37,0x2d,0x32, - 0x2e,0x38,0x33,0x33,0x2c,0x36,0x2e,0x31,0x34,0x34, - 0x2d,0x35,0x2e,0x30,0x35,0x36,0x2c,0x39,0x2e,0x39, - 0x34,0x36,0x2d,0x36,0x2e,0x36,0x38,0x32,0x63,0x33, - 0x2e,0x37,0x39,0x37,0x2d,0x31,0x2e,0x36,0x31,0x39, - 0x2c,0x37,0x2e,0x38,0x33,0x34,0x2d,0x32,0x2e,0x34, - 0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31,0x36,0x2d, - 0x32,0x2e,0x34,0x33,0x34,0x68,0x38,0x2e,0x34,0x39, - 0x36,0x20,0x20,0x20,0x20,0x63,0x34,0x2e,0x32,0x37, - 0x38,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x31,0x39,0x2c, - 0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32,0x2e,0x31, - 0x31,0x36,0x2c,0x32,0x2e,0x34,0x33,0x34,0x63,0x33, - 0x2e,0x38,0x30,0x31,0x2c,0x31,0x2e,0x36,0x32,0x36, - 0x2c,0x37,0x2e,0x31,0x31,0x34,0x2c,0x33,0x2e,0x38, - 0x35,0x2c,0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x36, - 0x38,0x32,0x63,0x32,0x2e,0x38,0x32,0x37,0x2c,0x32, - 0x2e,0x38,0x33,0x32,0x2c,0x35,0x2e,0x30,0x35,0x36, - 0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36, - 0x37,0x39,0x2c,0x39,0x2e,0x39,0x34,0x37,0x20,0x20, - 0x20,0x20,0x63,0x31,0x2e,0x36,0x32,0x32,0x2c,0x33, - 0x2e,0x37,0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x35, - 0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34, - 0x33,0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x76,0x34, - 0x37,0x2e,0x38,0x35,0x38,0x43,0x31,0x31,0x36,0x37, - 0x2e,0x33,0x36,0x33,0x2c,0x33,0x31,0x38,0x2e,0x37, - 0x32,0x34,0x2c,0x31,0x31,0x36,0x36,0x2e,0x35,0x35, - 0x32,0x2c,0x33,0x32,0x32,0x2e,0x37,0x36,0x35,0x2c, - 0x31,0x31,0x36,0x34,0x2e,0x39,0x33,0x2c,0x33,0x32, - 0x36,0x2e,0x35,0x36,0x32,0x7a,0x20,0x4d,0x31,0x31, - 0x35,0x34,0x2e,0x36,0x32,0x32,0x2c,0x32,0x36,0x35, - 0x2e,0x38,0x35,0x35,0x20,0x20,0x20,0x20,0x63,0x30, - 0x2d,0x32,0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34, - 0x38,0x31,0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31, - 0x2e,0x34,0x34,0x39,0x2d,0x37,0x2e,0x31,0x39,0x39, - 0x63,0x2d,0x30,0x2e,0x39,0x37,0x2d,0x32,0x2e,0x32, - 0x34,0x33,0x2d,0x32,0x2e,0x32,0x37,0x36,0x2d,0x34, - 0x2e,0x31,0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x38, - 0x2d,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d,0x31,0x2e, - 0x36,0x35,0x33,0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d, - 0x33,0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37, - 0x2d,0x35,0x2e,0x38,0x35,0x33,0x2d,0x33,0x2e,0x39, - 0x33,0x38,0x20,0x20,0x20,0x20,0x63,0x2d,0x32,0x2e, - 0x32,0x34,0x36,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d, - 0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35, - 0x2d,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34, - 0x35,0x68,0x2d,0x38,0x2e,0x34,0x39,0x36,0x63,0x2d, - 0x32,0x2e,0x35,0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e, - 0x39,0x35,0x35,0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d, - 0x37,0x2e,0x31,0x39,0x37,0x2c,0x31,0x2e,0x34,0x35, - 0x63,0x2d,0x32,0x2e,0x32,0x34,0x37,0x2c,0x30,0x2e, - 0x39,0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c, - 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35, - 0x33,0x2c,0x33,0x2e,0x39,0x33,0x38,0x20,0x20,0x20, - 0x20,0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2c,0x31, - 0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x39,0x37,0x31, - 0x2c,0x33,0x2e,0x36,0x30,0x39,0x2d,0x33,0x2e,0x39, - 0x33,0x38,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63,0x2d, - 0x30,0x2e,0x39,0x37,0x2c,0x32,0x2e,0x32,0x34,0x37, - 0x2d,0x31,0x2e,0x34,0x35,0x2c,0x34,0x2e,0x36,0x34, - 0x36,0x2d,0x31,0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31, - 0x39,0x39,0x76,0x34,0x39,0x2e,0x33,0x30,0x39,0x63, - 0x30,0x2c,0x32,0x2e,0x35,0x35,0x36,0x2c,0x30,0x2e, - 0x34,0x38,0x2c,0x34,0x2e,0x39,0x35,0x36,0x2c,0x31, - 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x20, - 0x20,0x20,0x20,0x63,0x30,0x2e,0x39,0x36,0x38,0x2c, - 0x32,0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e,0x32,0x37, - 0x36,0x2c,0x34,0x2e,0x31,0x39,0x35,0x2c,0x33,0x2e, - 0x39,0x33,0x38,0x2c,0x35,0x2e,0x38,0x35,0x32,0x63, - 0x31,0x2e,0x36,0x35,0x36,0x2c,0x31,0x2e,0x36,0x35, - 0x37,0x2c,0x33,0x2e,0x36,0x30,0x34,0x2c,0x32,0x2e, - 0x39,0x37,0x2c,0x35,0x2e,0x38,0x35,0x33,0x2c,0x33, - 0x2e,0x39,0x33,0x38,0x63,0x32,0x2e,0x32,0x34,0x32, - 0x2c,0x30,0x2e,0x39,0x36,0x34,0x2c,0x34,0x2e,0x36, - 0x34,0x33,0x2c,0x31,0x2e,0x34,0x34,0x37,0x2c,0x37, - 0x2e,0x31,0x39,0x37,0x2c,0x31,0x2e,0x34,0x34,0x37, - 0x68,0x38,0x2e,0x34,0x39,0x36,0x20,0x20,0x20,0x20, - 0x63,0x32,0x2e,0x35,0x35,0x34,0x2c,0x30,0x2c,0x34, - 0x2e,0x39,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x32, - 0x2c,0x37,0x2e,0x31,0x39,0x39,0x2d,0x31,0x2e,0x34, - 0x34,0x37,0x63,0x32,0x2e,0x32,0x34,0x33,0x2d,0x30, - 0x2e,0x39,0x36,0x38,0x2c,0x34,0x2e,0x31,0x39,0x37, - 0x2d,0x32,0x2e,0x32,0x38,0x31,0x2c,0x35,0x2e,0x38, - 0x35,0x33,0x2d,0x33,0x2e,0x39,0x33,0x38,0x63,0x31, - 0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x37, - 0x2c,0x32,0x2e,0x39,0x37,0x2d,0x33,0x2e,0x36,0x30, - 0x39,0x2c,0x33,0x2e,0x39,0x33,0x38,0x2d,0x35,0x2e, - 0x38,0x35,0x32,0x20,0x20,0x20,0x20,0x63,0x30,0x2e, - 0x39,0x36,0x38,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c, - 0x31,0x2e,0x34,0x34,0x39,0x2d,0x34,0x2e,0x36,0x34, - 0x36,0x2c,0x31,0x2e,0x34,0x34,0x39,0x2d,0x37,0x2e, - 0x32,0x30,0x32,0x56,0x32,0x36,0x35,0x2e,0x38,0x35, - 0x35,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x31,0x32,0x35,0x30,0x2e,0x39,0x36, - 0x34,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x76,0x2d, - 0x37,0x37,0x2e,0x36,0x39,0x35,0x63,0x30,0x2d,0x32, - 0x2e,0x35,0x35,0x33,0x2d,0x30,0x2e,0x34,0x38,0x35, - 0x2d,0x34,0x2e,0x39,0x35,0x32,0x2d,0x31,0x2e,0x34, - 0x35,0x31,0x2d,0x37,0x2e,0x31,0x39,0x39,0x63,0x2d, - 0x30,0x2e,0x39,0x36,0x39,0x2d,0x32,0x2e,0x32,0x34, - 0x33,0x2d,0x32,0x2e,0x32,0x38,0x2d,0x34,0x2e,0x31, - 0x39,0x34,0x2d,0x33,0x2e,0x39,0x33,0x35,0x2d,0x35, - 0x2e,0x38,0x35,0x33,0x20,0x20,0x20,0x20,0x63,0x2d, - 0x31,0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35, - 0x37,0x2d,0x33,0x2e,0x36,0x31,0x32,0x2d,0x32,0x2e, - 0x39,0x37,0x2d,0x35,0x2e,0x38,0x35,0x35,0x2d,0x33, - 0x2e,0x39,0x33,0x38,0x63,0x2d,0x32,0x2e,0x32,0x34, - 0x32,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e, - 0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x35,0x2d,0x37, - 0x2e,0x31,0x39,0x37,0x2d,0x31,0x2e,0x34,0x35,0x68, - 0x2d,0x38,0x2e,0x34,0x39,0x32,0x63,0x2d,0x32,0x2e, - 0x35,0x35,0x38,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x36, - 0x2c,0x30,0x2e,0x34,0x38,0x36,0x2d,0x37,0x2e,0x32, - 0x30,0x33,0x2c,0x31,0x2e,0x34,0x35,0x20,0x20,0x20, - 0x20,0x63,0x2d,0x32,0x2e,0x32,0x34,0x31,0x2c,0x30, - 0x2e,0x39,0x36,0x39,0x2d,0x34,0x2e,0x31,0x39,0x33, - 0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38, - 0x35,0x34,0x2c,0x33,0x2e,0x39,0x33,0x38,0x63,0x2d, - 0x31,0x2e,0x36,0x35,0x32,0x2c,0x31,0x2e,0x36,0x35, - 0x37,0x2d,0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36, - 0x30,0x39,0x2d,0x33,0x2e,0x39,0x33,0x35,0x2c,0x35, - 0x2e,0x38,0x35,0x33,0x63,0x2d,0x30,0x2e,0x39,0x36, - 0x39,0x2c,0x32,0x2e,0x32,0x34,0x37,0x2d,0x31,0x2e, - 0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, - 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39,0x39,0x76, - 0x37,0x37,0x2e,0x36,0x39,0x35,0x68,0x2d,0x31,0x32, - 0x2e,0x37,0x34,0x20,0x20,0x20,0x20,0x56,0x32,0x33, - 0x37,0x2e,0x34,0x37,0x34,0x68,0x34,0x2e,0x32,0x34, - 0x38,0x6c,0x36,0x2e,0x39,0x33,0x38,0x2c,0x31,0x30, - 0x2e,0x37,0x37,0x33,0x63,0x32,0x2e,0x39,0x2d,0x33, - 0x2e,0x39,0x33,0x38,0x2c,0x36,0x2e,0x35,0x34,0x31, - 0x2d,0x37,0x2e,0x30,0x36,0x31,0x2c,0x31,0x30,0x2e, - 0x39,0x33,0x31,0x2d,0x39,0x2e,0x33,0x37,0x36,0x63, - 0x34,0x2e,0x33,0x38,0x32,0x2d,0x32,0x2e,0x33,0x31, - 0x32,0x2c,0x39,0x2e,0x31,0x36,0x36,0x2d,0x33,0x2e, - 0x34,0x37,0x31,0x2c,0x31,0x34,0x2e,0x33,0x34,0x39, - 0x2d,0x33,0x2e,0x34,0x37,0x31,0x68,0x33,0x2e,0x32, - 0x31,0x31,0x20,0x20,0x20,0x20,0x63,0x34,0x2e,0x32, - 0x38,0x31,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x31,0x39, - 0x2c,0x30,0x2e,0x38,0x31,0x35,0x2c,0x31,0x32,0x2e, - 0x31,0x32,0x2c,0x32,0x2e,0x34,0x33,0x34,0x63,0x33, - 0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e,0x36,0x32,0x36, - 0x2c,0x37,0x2e,0x31,0x31,0x2c,0x33,0x2e,0x38,0x35, - 0x2c,0x39,0x2e,0x39,0x34,0x32,0x2c,0x36,0x2e,0x36, - 0x38,0x32,0x73,0x35,0x2e,0x30,0x36,0x31,0x2c,0x36, - 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x38,0x33, - 0x2c,0x39,0x2e,0x39,0x34,0x37,0x20,0x20,0x20,0x20, - 0x63,0x31,0x2e,0x36,0x32,0x33,0x2c,0x33,0x2e,0x37, - 0x39,0x36,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2c,0x37, - 0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x36, - 0x2c,0x31,0x32,0x2e,0x31,0x32,0x76,0x37,0x36,0x2e, - 0x39,0x36,0x38,0x4c,0x31,0x32,0x35,0x30,0x2e,0x39, - 0x36,0x34,0x2c,0x33,0x34,0x33,0x2e,0x35,0x35,0x4c, - 0x31,0x32,0x35,0x30,0x2e,0x39,0x36,0x34,0x2c,0x33, - 0x34,0x33,0x2e,0x35,0x35,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x35,0x36,0x33, - 0x2e,0x31,0x30,0x39,0x2c,0x34,0x39,0x36,0x2e,0x32, - 0x35,0x38,0x63,0x30,0x2c,0x34,0x2e,0x32,0x37,0x38, - 0x2d,0x30,0x2e,0x38,0x36,0x35,0x2c,0x38,0x2e,0x31, - 0x39,0x38,0x2d,0x32,0x2e,0x35,0x38,0x38,0x2c,0x31, - 0x31,0x2e,0x37,0x35,0x37,0x63,0x2d,0x31,0x2e,0x37, - 0x32,0x39,0x2c,0x33,0x2e,0x35,0x36,0x32,0x2d,0x34, - 0x2e,0x30,0x37,0x35,0x2c,0x36,0x2e,0x36,0x31,0x33, - 0x2d,0x37,0x2e,0x30,0x34,0x35,0x2c,0x39,0x2e,0x31, - 0x37,0x20,0x20,0x20,0x20,0x63,0x2d,0x32,0x2e,0x39, - 0x37,0x31,0x2c,0x32,0x2e,0x35,0x35,0x39,0x2d,0x36, - 0x2e,0x34,0x30,0x36,0x2c,0x34,0x2e,0x35,0x33,0x39, - 0x2d,0x31,0x30,0x2e,0x33,0x30,0x38,0x2c,0x35,0x2e, - 0x39,0x35,0x35,0x63,0x2d,0x33,0x2e,0x39,0x30,0x33, - 0x2c,0x31,0x2e,0x34,0x31,0x36,0x2d,0x37,0x2e,0x39, - 0x39,0x35,0x2c,0x32,0x2e,0x31,0x32,0x2d,0x31,0x32, - 0x2e,0x32,0x37,0x36,0x2c,0x32,0x2e,0x31,0x32,0x48, - 0x35,0x32,0x32,0x2e,0x34,0x63,0x2d,0x34,0x2e,0x32, - 0x38,0x33,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x37,0x37, - 0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e, - 0x32,0x37,0x37,0x2d,0x32,0x2e,0x34,0x33,0x34,0x20, - 0x20,0x20,0x20,0x63,0x2d,0x33,0x2e,0x39,0x30,0x33, - 0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d,0x37,0x2e,0x33, - 0x32,0x2d,0x33,0x2e,0x38,0x34,0x33,0x2d,0x31,0x30, - 0x2e,0x32,0x35,0x37,0x2d,0x36,0x2e,0x36,0x38,0x34, - 0x63,0x2d,0x32,0x2e,0x39,0x33,0x37,0x2d,0x32,0x2e, - 0x38,0x32,0x33,0x2d,0x35,0x2e,0x32,0x38,0x2d,0x36, - 0x2e,0x31,0x34,0x2d,0x37,0x2e,0x30,0x34,0x32,0x2d, - 0x39,0x2e,0x39,0x34,0x32,0x63,0x2d,0x31,0x2e,0x37, - 0x36,0x2d,0x33,0x2e,0x37,0x39,0x37,0x2d,0x32,0x2e, - 0x36,0x34,0x31,0x2d,0x37,0x2e,0x38,0x33,0x38,0x2d, - 0x32,0x2e,0x36,0x34,0x31,0x2d,0x31,0x32,0x2e,0x31, - 0x31,0x36,0x76,0x2d,0x34,0x2e,0x32,0x34,0x38,0x20, - 0x20,0x20,0x20,0x6c,0x31,0x32,0x2e,0x37,0x33,0x39, - 0x2d,0x32,0x2e,0x30,0x37,0x34,0x76,0x37,0x2e,0x30, - 0x34,0x32,0x63,0x30,0x2c,0x32,0x2e,0x35,0x35,0x38, - 0x2c,0x30,0x2e,0x35,0x33,0x31,0x2c,0x34,0x2e,0x39, - 0x36,0x31,0x2c,0x31,0x2e,0x36,0x30,0x34,0x2c,0x37, - 0x2e,0x32,0x30,0x32,0x63,0x31,0x2e,0x30,0x37,0x2c, - 0x32,0x2e,0x32,0x34,0x33,0x2c,0x32,0x2e,0x35,0x30, - 0x33,0x2c,0x34,0x2e,0x31,0x39,0x34,0x2c,0x34,0x2e, - 0x33,0x30,0x31,0x2c,0x35,0x2e,0x38,0x35,0x34,0x63, - 0x31,0x2e,0x37,0x39,0x35,0x2c,0x31,0x2e,0x36,0x35, - 0x33,0x2c,0x33,0x2e,0x38,0x36,0x36,0x2c,0x32,0x2e, - 0x39,0x37,0x31,0x2c,0x36,0x2e,0x32,0x31,0x37,0x2c, - 0x33,0x2e,0x39,0x33,0x36,0x20,0x20,0x20,0x20,0x63, - 0x32,0x2e,0x33,0x34,0x36,0x2c,0x30,0x2e,0x39,0x36, - 0x35,0x2c,0x34,0x2e,0x37,0x39,0x39,0x2c,0x31,0x2e, - 0x34,0x34,0x37,0x2c,0x37,0x2e,0x33,0x35,0x34,0x2c, - 0x31,0x2e,0x34,0x34,0x37,0x68,0x38,0x2e,0x34,0x39, - 0x31,0x63,0x32,0x2e,0x35,0x35,0x38,0x2c,0x30,0x2c, - 0x35,0x2e,0x30,0x30,0x36,0x2d,0x30,0x2e,0x33,0x37, - 0x36,0x2c,0x37,0x2e,0x33,0x35,0x35,0x2d,0x31,0x2e, - 0x31,0x33,0x35,0x63,0x32,0x2e,0x33,0x34,0x37,0x2d, - 0x30,0x2e,0x37,0x36,0x36,0x2c,0x34,0x2e,0x34,0x33, - 0x38,0x2d,0x31,0x2e,0x38,0x35,0x33,0x2c,0x36,0x2e, - 0x32,0x37,0x2d,0x33,0x2e,0x32,0x36,0x39,0x20,0x20, - 0x20,0x20,0x63,0x31,0x2e,0x38,0x32,0x39,0x2d,0x31, - 0x2e,0x34,0x31,0x36,0x2c,0x33,0x2e,0x32,0x38,0x2d, - 0x33,0x2e,0x31,0x32,0x33,0x2c,0x34,0x2e,0x33,0x35, - 0x32,0x2d,0x35,0x2e,0x31,0x32,0x39,0x63,0x31,0x2e, - 0x30,0x36,0x38,0x2d,0x31,0x2e,0x39,0x39,0x37,0x2c, - 0x31,0x2e,0x36,0x30,0x34,0x2d,0x34,0x2e,0x32,0x37, - 0x37,0x2c,0x31,0x2e,0x36,0x30,0x34,0x2d,0x36,0x2e, - 0x38,0x33,0x35,0x63,0x30,0x2d,0x33,0x2e,0x37,0x39, - 0x37,0x2d,0x30,0x2e,0x38,0x32,0x36,0x2d,0x36,0x2e, - 0x39,0x30,0x33,0x2d,0x32,0x2e,0x34,0x38,0x37,0x2d, - 0x39,0x2e,0x33,0x32,0x33,0x20,0x20,0x20,0x20,0x63, - 0x2d,0x31,0x2e,0x36,0x35,0x37,0x2d,0x32,0x2e,0x34, - 0x31,0x39,0x2d,0x33,0x2e,0x38,0x35,0x31,0x2d,0x34, - 0x2e,0x34,0x33,0x38,0x2d,0x36,0x2e,0x35,0x37,0x35, - 0x2d,0x36,0x2e,0x30,0x36,0x32,0x63,0x2d,0x32,0x2e, - 0x37,0x32,0x39,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d, - 0x35,0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x39,0x36, - 0x34,0x2d,0x39,0x2e,0x33,0x32,0x32,0x2d,0x34,0x2e, - 0x30,0x33,0x34,0x63,0x2d,0x33,0x2e,0x34,0x39,0x2d, - 0x31,0x2e,0x30,0x37,0x31,0x2d,0x37,0x2e,0x30,0x36, - 0x34,0x2d,0x32,0x2e,0x31,0x34,0x35,0x2d,0x31,0x30, - 0x2e,0x37,0x32,0x35,0x2d,0x33,0x2e,0x32,0x31,0x35, - 0x20,0x20,0x20,0x20,0x63,0x2d,0x33,0x2e,0x36,0x36, - 0x33,0x2d,0x31,0x2e,0x30,0x37,0x31,0x2d,0x37,0x2e, - 0x32,0x33,0x36,0x2d,0x32,0x2e,0x32,0x39,0x36,0x2d, - 0x31,0x30,0x2e,0x37,0x32,0x35,0x2d,0x33,0x2e,0x36, - 0x37,0x34,0x63,0x2d,0x33,0x2e,0x34,0x38,0x35,0x2d, - 0x31,0x2e,0x33,0x38,0x38,0x2d,0x36,0x2e,0x35,0x39, - 0x34,0x2d,0x33,0x2e,0x32,0x2d,0x39,0x2e,0x33,0x32, - 0x32,0x2d,0x35,0x2e,0x34,0x34,0x32,0x63,0x2d,0x32, - 0x2e,0x37,0x32,0x39,0x2d,0x32,0x2e,0x32,0x34,0x32, - 0x2d,0x34,0x2e,0x39,0x31,0x38,0x2d,0x35,0x2e,0x30, - 0x36,0x2d,0x36,0x2e,0x35,0x37,0x35,0x2d,0x38,0x2e, - 0x34,0x34,0x32,0x20,0x20,0x20,0x20,0x63,0x2d,0x31, - 0x2e,0x36,0x36,0x31,0x2d,0x33,0x2e,0x33,0x38,0x34, - 0x2d,0x32,0x2e,0x34,0x38,0x37,0x2d,0x37,0x2e,0x35, - 0x39,0x33,0x2d,0x32,0x2e,0x34,0x38,0x37,0x2d,0x31, - 0x32,0x2e,0x36,0x33,0x38,0x63,0x30,0x2d,0x34,0x2e, - 0x32,0x37,0x38,0x2c,0x30,0x2e,0x38,0x32,0x36,0x2d, - 0x38,0x2e,0x31,0x39,0x36,0x2c,0x32,0x2e,0x34,0x38, - 0x37,0x2d,0x31,0x31,0x2e,0x37,0x35,0x37,0x63,0x31, - 0x2e,0x36,0x35,0x37,0x2d,0x33,0x2e,0x35,0x36,0x31, - 0x2c,0x33,0x2e,0x38,0x39,0x39,0x2d,0x36,0x2e,0x36, - 0x31,0x33,0x2c,0x36,0x2e,0x37,0x33,0x31,0x2d,0x39, - 0x2e,0x31,0x37,0x20,0x20,0x20,0x20,0x73,0x36,0x2e, - 0x31,0x32,0x37,0x2d,0x34,0x2e,0x35,0x33,0x39,0x2c, - 0x39,0x2e,0x38,0x39,0x34,0x2d,0x35,0x2e,0x39,0x35, - 0x35,0x63,0x33,0x2e,0x37,0x36,0x33,0x2d,0x31,0x2e, - 0x34,0x31,0x36,0x2c,0x37,0x2e,0x37,0x38,0x35,0x2d, - 0x32,0x2e,0x31,0x32,0x38,0x2c,0x31,0x32,0x2e,0x30, - 0x36,0x37,0x2d,0x32,0x2e,0x31,0x32,0x38,0x68,0x37, - 0x2e,0x34,0x35,0x39,0x63,0x34,0x2e,0x32,0x38,0x32, - 0x2c,0x30,0x2c,0x38,0x2e,0x33,0x32,0x33,0x2c,0x30, - 0x2e,0x38,0x31,0x39,0x2c,0x31,0x32,0x2e,0x31,0x32, - 0x2c,0x32,0x2e,0x34,0x33,0x35,0x20,0x20,0x20,0x20, - 0x63,0x33,0x2e,0x37,0x39,0x36,0x2c,0x31,0x2e,0x36, - 0x33,0x31,0x2c,0x37,0x2e,0x31,0x31,0x35,0x2c,0x33, - 0x2e,0x38,0x35,0x32,0x2c,0x39,0x2e,0x39,0x34,0x37, - 0x2c,0x36,0x2e,0x36,0x38,0x33,0x63,0x32,0x2e,0x38, - 0x32,0x37,0x2c,0x32,0x2e,0x38,0x33,0x34,0x2c,0x35, - 0x2e,0x30,0x35,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36, - 0x2c,0x36,0x2e,0x36,0x38,0x33,0x2c,0x39,0x2e,0x39, - 0x35,0x31,0x63,0x31,0x2e,0x36,0x31,0x38,0x2c,0x33, - 0x2e,0x37,0x39,0x37,0x2c,0x32,0x2e,0x34,0x33,0x34, - 0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34, - 0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31,0x36,0x76, - 0x30,0x2e,0x34,0x31,0x33,0x20,0x20,0x20,0x20,0x6c, - 0x2d,0x31,0x32,0x2e,0x37,0x34,0x34,0x2c,0x32,0x2e, - 0x30,0x37,0x34,0x76,0x2d,0x33,0x2e,0x32,0x31,0x35, - 0x63,0x30,0x2d,0x32,0x2e,0x35,0x35,0x2d,0x30,0x2e, - 0x34,0x38,0x2d,0x34,0x2e,0x39,0x35,0x33,0x2d,0x31, - 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x35,0x63, - 0x2d,0x30,0x2e,0x39,0x37,0x2d,0x32,0x2e,0x32,0x34, - 0x31,0x2d,0x32,0x2e,0x32,0x37,0x36,0x2d,0x34,0x2e, - 0x31,0x39,0x33,0x2d,0x33,0x2e,0x39,0x33,0x35,0x2d, - 0x35,0x2e,0x38,0x35,0x34,0x63,0x2d,0x31,0x2e,0x36, - 0x35,0x37,0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d,0x33, - 0x2e,0x36,0x30,0x38,0x2d,0x32,0x2e,0x39,0x37,0x32, - 0x2d,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33,0x2e,0x39, - 0x33,0x37,0x20,0x20,0x20,0x20,0x63,0x2d,0x32,0x2e, - 0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36,0x34,0x2d, - 0x34,0x2e,0x36,0x34,0x34,0x2d,0x31,0x2e,0x34,0x35, - 0x33,0x2d,0x37,0x2e,0x31,0x39,0x38,0x2d,0x31,0x2e, - 0x34,0x35,0x33,0x68,0x2d,0x37,0x2e,0x34,0x35,0x39, - 0x63,0x2d,0x32,0x2e,0x35,0x35,0x34,0x2c,0x30,0x2d, - 0x34,0x2e,0x39,0x35,0x37,0x2c,0x30,0x2e,0x33,0x38, - 0x34,0x2d,0x37,0x2e,0x31,0x39,0x39,0x2c,0x31,0x2e, - 0x31,0x34,0x32,0x63,0x2d,0x32,0x2e,0x32,0x34,0x33, - 0x2c,0x30,0x2e,0x37,0x36,0x36,0x2d,0x34,0x2e,0x31, - 0x39,0x35,0x2c,0x31,0x2e,0x38,0x35,0x33,0x2d,0x35, - 0x2e,0x38,0x35,0x33,0x2c,0x33,0x2e,0x32,0x36,0x31, - 0x20,0x20,0x20,0x20,0x63,0x2d,0x31,0x2e,0x36,0x35, - 0x37,0x2c,0x31,0x2e,0x34,0x32,0x34,0x2d,0x32,0x2e, - 0x39,0x37,0x31,0x2c,0x33,0x2e,0x31,0x33,0x2d,0x33, - 0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x31,0x32,0x38, - 0x63,0x2d,0x30,0x2e,0x39,0x37,0x2c,0x32,0x2e,0x30, - 0x30,0x36,0x2d,0x31,0x2e,0x34,0x35,0x31,0x2c,0x34, - 0x2e,0x32,0x38,0x37,0x2d,0x31,0x2e,0x34,0x35,0x31, - 0x2c,0x36,0x2e,0x38,0x34,0x34,0x63,0x30,0x2c,0x33, - 0x2e,0x36,0x35,0x38,0x2c,0x30,0x2e,0x38,0x33,0x31, - 0x2c,0x36,0x2e,0x36,0x34,0x36,0x2c,0x32,0x2e,0x34, - 0x38,0x38,0x2c,0x38,0x2e,0x39,0x35,0x35,0x20,0x20, - 0x20,0x20,0x63,0x31,0x2e,0x36,0x35,0x37,0x2c,0x32, - 0x2e,0x33,0x31,0x39,0x2c,0x33,0x2e,0x38,0x35,0x2c, - 0x34,0x2e,0x32,0x37,0x31,0x2c,0x36,0x2e,0x35,0x37, - 0x39,0x2c,0x35,0x2e,0x38,0x35,0x35,0x63,0x32,0x2e, - 0x37,0x32,0x35,0x2c,0x31,0x2e,0x35,0x39,0x32,0x2c, - 0x35,0x2e,0x38,0x33,0x33,0x2c,0x32,0x2e,0x39,0x31, - 0x36,0x2c,0x39,0x2e,0x33,0x32,0x32,0x2c,0x33,0x2e, - 0x39,0x38,0x35,0x63,0x33,0x2e,0x34,0x38,0x36,0x2c, - 0x31,0x2e,0x30,0x37,0x32,0x2c,0x37,0x2e,0x30,0x34, - 0x32,0x2c,0x32,0x2e,0x31,0x37,0x35,0x2c,0x31,0x30, - 0x2e,0x36,0x37,0x2c,0x33,0x2e,0x33,0x31,0x34,0x20, - 0x20,0x20,0x20,0x63,0x33,0x2e,0x36,0x32,0x35,0x2c, - 0x31,0x2e,0x31,0x34,0x31,0x2c,0x37,0x2e,0x31,0x38, - 0x31,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2c,0x31,0x30, - 0x2e,0x36,0x37,0x2c,0x33,0x2e,0x38,0x38,0x39,0x63, - 0x33,0x2e,0x34,0x38,0x36,0x2c,0x31,0x2e,0x34,0x34, - 0x36,0x2c,0x36,0x2e,0x35,0x39,0x35,0x2c,0x33,0x2e, - 0x33,0x31,0x34,0x2c,0x39,0x2e,0x33,0x32,0x33,0x2c, - 0x35,0x2e,0x35,0x38,0x38,0x63,0x32,0x2e,0x37,0x32, - 0x39,0x2c,0x32,0x2e,0x32,0x38,0x2c,0x34,0x2e,0x39, - 0x32,0x32,0x2c,0x35,0x2e,0x31,0x32,0x39,0x2c,0x36, - 0x2e,0x35,0x37,0x39,0x2c,0x38,0x2e,0x35,0x35,0x32, - 0x20,0x20,0x20,0x20,0x43,0x35,0x36,0x32,0x2e,0x32, - 0x38,0x32,0x2c,0x34,0x38,0x36,0x2e,0x39,0x38,0x39, - 0x2c,0x35,0x36,0x33,0x2e,0x31,0x30,0x39,0x2c,0x34, - 0x39,0x31,0x2e,0x32,0x31,0x34,0x2c,0x35,0x36,0x33, - 0x2e,0x31,0x30,0x39,0x2c,0x34,0x39,0x36,0x2e,0x32, - 0x35,0x38,0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c, - 0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d, - 0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20, - 0x64,0x3d,0x22,0x4d,0x36,0x32,0x36,0x2e,0x31,0x39, - 0x36,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x63, - 0x2d,0x33,0x2e,0x38,0x36,0x35,0x2c,0x30,0x2d,0x37, - 0x2e,0x35,0x30,0x39,0x2d,0x30,0x2e,0x37,0x32,0x39, - 0x2d,0x31,0x30,0x2e,0x39,0x32,0x37,0x2d,0x32,0x2e, - 0x31,0x37,0x35,0x63,0x2d,0x33,0x2e,0x34,0x32,0x31, - 0x2d,0x31,0x2e,0x34,0x35,0x35,0x2d,0x36,0x2e,0x33, - 0x39,0x32,0x2d,0x33,0x2e,0x34,0x36,0x31,0x2d,0x38, - 0x2e,0x39,0x30,0x39,0x2d,0x36,0x2e,0x30,0x31,0x20, - 0x20,0x20,0x20,0x63,0x2d,0x32,0x2e,0x35,0x32,0x31, - 0x2d,0x32,0x2e,0x35,0x35,0x37,0x2d,0x34,0x2e,0x35, - 0x32,0x32,0x2d,0x35,0x2e,0x35,0x32,0x34,0x2d,0x36, - 0x2e,0x30,0x30,0x39,0x2d,0x38,0x2e,0x39,0x30,0x38, - 0x63,0x2d,0x31,0x2e,0x34,0x38,0x34,0x2d,0x33,0x2e, - 0x33,0x38,0x35,0x2d,0x32,0x2e,0x32,0x32,0x39,0x2d, - 0x37,0x2e,0x30,0x31,0x33,0x2d,0x32,0x2e,0x32,0x32, - 0x39,0x2d,0x31,0x30,0x2e,0x38,0x37,0x37,0x76,0x2d, - 0x36,0x35,0x2e,0x39,0x39,0x36,0x68,0x2d,0x31,0x39, - 0x2e,0x30,0x35,0x39,0x76,0x2d,0x31,0x32,0x2e,0x31, - 0x31,0x36,0x68,0x31,0x39,0x2e,0x30,0x35,0x39,0x76, - 0x2d,0x32,0x35,0x2e,0x34,0x37,0x39,0x20,0x20,0x20, - 0x20,0x6c,0x31,0x32,0x2e,0x37,0x34,0x2d,0x32,0x2e, - 0x30,0x37,0x32,0x76,0x32,0x37,0x2e,0x35,0x35,0x35, - 0x48,0x36,0x33,0x37,0x2e,0x38,0x76,0x31,0x32,0x2e, - 0x31,0x31,0x37,0x68,0x2d,0x32,0x36,0x2e,0x39,0x33, - 0x37,0x76,0x36,0x36,0x2e,0x36,0x31,0x33,0x63,0x30, - 0x2c,0x32,0x2e,0x31,0x34,0x35,0x2c,0x30,0x2e,0x33, - 0x39,0x37,0x2c,0x34,0x2e,0x31,0x32,0x36,0x2c,0x31, - 0x2e,0x31,0x39,0x33,0x2c,0x35,0x2e,0x39,0x35,0x35, - 0x63,0x30,0x2e,0x37,0x39,0x32,0x2c,0x31,0x2e,0x38, - 0x32,0x39,0x2c,0x31,0x2e,0x38,0x37,0x39,0x2c,0x33, - 0x2e,0x34,0x33,0x38,0x2c,0x33,0x2e,0x32,0x36,0x32, - 0x2c,0x34,0x2e,0x38,0x31,0x33,0x20,0x20,0x20,0x20, - 0x63,0x31,0x2e,0x33,0x38,0x31,0x2c,0x31,0x2e,0x33, - 0x38,0x36,0x2c,0x33,0x2e,0x30,0x30,0x34,0x2c,0x32, - 0x2e,0x34,0x37,0x33,0x2c,0x34,0x2e,0x38,0x36,0x37, - 0x2c,0x33,0x2e,0x32,0x37,0x63,0x31,0x2e,0x38,0x36, - 0x38,0x2c,0x30,0x2e,0x37,0x38,0x38,0x2c,0x33,0x2e, - 0x38,0x36,0x39,0x2c,0x31,0x2e,0x31,0x38,0x38,0x2c, - 0x36,0x2e,0x30,0x30,0x38,0x2c,0x31,0x2e,0x31,0x38, - 0x38,0x68,0x31,0x31,0x2e,0x36,0x30,0x34,0x76,0x31, - 0x32,0x2e,0x31,0x32,0x33,0x4c,0x36,0x32,0x36,0x2e, - 0x31,0x39,0x36,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39, - 0x34,0x4c,0x36,0x32,0x36,0x2e,0x31,0x39,0x36,0x2c, - 0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x7a,0x22,0x2f, - 0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20, - 0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46, - 0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x37, - 0x32,0x37,0x2e,0x38,0x32,0x31,0x2c,0x35,0x32,0x33, - 0x2e,0x31,0x39,0x34,0x6c,0x2d,0x37,0x2e,0x30,0x34, - 0x32,0x2d,0x31,0x30,0x2e,0x35,0x37,0x63,0x2d,0x32, - 0x2e,0x38,0x39,0x39,0x2c,0x33,0x2e,0x38,0x30,0x34, - 0x2d,0x36,0x2e,0x35,0x32,0x37,0x2c,0x36,0x2e,0x38, - 0x35,0x36,0x2d,0x31,0x30,0x2e,0x38,0x37,0x36,0x2c, - 0x39,0x2e,0x31,0x36,0x39,0x20,0x20,0x20,0x20,0x63, - 0x2d,0x34,0x2e,0x33,0x35,0x33,0x2c,0x32,0x2e,0x33, - 0x31,0x33,0x2d,0x39,0x2e,0x31,0x31,0x36,0x2c,0x33, - 0x2e,0x34,0x36,0x38,0x2d,0x31,0x34,0x2e,0x33,0x2c, - 0x33,0x2e,0x34,0x36,0x38,0x68,0x2d,0x33,0x2e,0x32, - 0x30,0x37,0x63,0x2d,0x34,0x2e,0x32,0x38,0x35,0x2c, - 0x30,0x2d,0x38,0x2e,0x33,0x32,0x37,0x2d,0x30,0x2e, - 0x38,0x31,0x32,0x2d,0x31,0x32,0x2e,0x31,0x32,0x33, - 0x2d,0x32,0x2e,0x34,0x33,0x34,0x63,0x2d,0x33,0x2e, - 0x38,0x30,0x32,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2d, - 0x37,0x2e,0x31,0x31,0x34,0x2d,0x33,0x2e,0x38,0x34, - 0x34,0x2d,0x39,0x2e,0x39,0x34,0x33,0x2d,0x36,0x2e, - 0x36,0x38,0x35,0x20,0x20,0x20,0x20,0x63,0x2d,0x32, - 0x2e,0x38,0x33,0x36,0x2d,0x32,0x2e,0x38,0x32,0x33, - 0x2d,0x35,0x2e,0x30,0x36,0x33,0x2d,0x36,0x2e,0x31, - 0x33,0x39,0x2d,0x36,0x2e,0x36,0x38,0x32,0x2d,0x39, - 0x2e,0x39,0x34,0x31,0x63,0x2d,0x31,0x2e,0x36,0x32, - 0x37,0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x32,0x2e, - 0x34,0x33,0x36,0x2d,0x37,0x2e,0x38,0x33,0x39,0x2d, - 0x32,0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e,0x31, - 0x31,0x36,0x76,0x2d,0x31,0x2e,0x30,0x34,0x31,0x63, - 0x30,0x2d,0x34,0x2e,0x32,0x37,0x37,0x2c,0x30,0x2e, - 0x38,0x30,0x39,0x2d,0x38,0x2e,0x33,0x32,0x2c,0x32, - 0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e,0x31,0x31, - 0x36,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x36,0x31, - 0x37,0x2d,0x33,0x2e,0x37,0x39,0x37,0x2c,0x33,0x2e, - 0x38,0x34,0x36,0x2d,0x37,0x2e,0x31,0x30,0x39,0x2c, - 0x36,0x2e,0x36,0x38,0x32,0x2d,0x39,0x2e,0x39,0x34, - 0x31,0x63,0x32,0x2e,0x38,0x32,0x39,0x2d,0x32,0x2e, - 0x38,0x33,0x32,0x2c,0x36,0x2e,0x31,0x34,0x34,0x2d, - 0x35,0x2e,0x30,0x36,0x32,0x2c,0x39,0x2e,0x39,0x34, - 0x33,0x2d,0x36,0x2e,0x36,0x38,0x34,0x63,0x33,0x2e, - 0x37,0x39,0x36,0x2d,0x31,0x2e,0x36,0x32,0x32,0x2c, - 0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33, - 0x35,0x2c,0x31,0x32,0x2e,0x31,0x32,0x33,0x2d,0x32, - 0x2e,0x34,0x33,0x35,0x68,0x32,0x36,0x2e,0x39,0x33, - 0x33,0x76,0x2d,0x31,0x36,0x2e,0x33,0x37,0x32,0x20, - 0x20,0x20,0x20,0x63,0x30,0x2d,0x32,0x2e,0x35,0x34, - 0x39,0x2d,0x30,0x2e,0x34,0x38,0x35,0x2d,0x34,0x2e, - 0x39,0x35,0x33,0x2d,0x31,0x2e,0x34,0x34,0x39,0x2d, - 0x37,0x2e,0x31,0x39,0x35,0x63,0x2d,0x30,0x2e,0x39, - 0x37,0x2d,0x32,0x2e,0x32,0x34,0x31,0x2d,0x32,0x2e, - 0x32,0x38,0x2d,0x34,0x2e,0x31,0x39,0x33,0x2d,0x33, - 0x2e,0x39,0x33,0x36,0x2d,0x35,0x2e,0x38,0x35,0x34, - 0x63,0x2d,0x31,0x2e,0x36,0x36,0x31,0x2d,0x31,0x2e, - 0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x31,0x32,0x2d, - 0x32,0x2e,0x39,0x37,0x32,0x2d,0x35,0x2e,0x38,0x35, - 0x34,0x2d,0x33,0x2e,0x39,0x33,0x37,0x20,0x20,0x20, - 0x20,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32,0x2d,0x30, - 0x2e,0x39,0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36, - 0x2d,0x31,0x2e,0x34,0x35,0x33,0x2d,0x37,0x2e,0x31, - 0x39,0x39,0x2d,0x31,0x2e,0x34,0x35,0x33,0x68,0x2d, - 0x37,0x2e,0x34,0x35,0x39,0x63,0x2d,0x32,0x2e,0x35, - 0x35,0x37,0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x35, - 0x2c,0x30,0x2e,0x34,0x38,0x39,0x2d,0x37,0x2e,0x32, - 0x30,0x31,0x2c,0x31,0x2e,0x34,0x35,0x33,0x63,0x2d, - 0x32,0x2e,0x32,0x34,0x33,0x2c,0x30,0x2e,0x39,0x36, - 0x35,0x2d,0x34,0x2e,0x31,0x39,0x34,0x2c,0x32,0x2e, - 0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35,0x33,0x2c, - 0x33,0x2e,0x39,0x33,0x37,0x20,0x20,0x20,0x20,0x63, - 0x2d,0x31,0x2e,0x36,0x35,0x37,0x2c,0x31,0x2e,0x36, - 0x36,0x2d,0x32,0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e, - 0x36,0x31,0x32,0x2d,0x33,0x2e,0x39,0x33,0x36,0x2c, - 0x35,0x2e,0x38,0x35,0x34,0x63,0x2d,0x30,0x2e,0x39, - 0x37,0x2c,0x32,0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e, - 0x34,0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, - 0x2e,0x34,0x35,0x2c,0x37,0x2e,0x31,0x39,0x35,0x76, - 0x33,0x2e,0x38,0x33,0x34,0x6c,0x2d,0x31,0x32,0x2e, - 0x37,0x34,0x34,0x2d,0x32,0x2e,0x30,0x37,0x34,0x76, - 0x2d,0x31,0x2e,0x30,0x33,0x32,0x20,0x20,0x20,0x20, - 0x63,0x30,0x2d,0x34,0x2e,0x32,0x37,0x38,0x2c,0x30, - 0x2e,0x38,0x31,0x33,0x2d,0x38,0x2e,0x33,0x31,0x39, - 0x2c,0x32,0x2e,0x34,0x33,0x36,0x2d,0x31,0x32,0x2e, - 0x31,0x31,0x36,0x63,0x31,0x2e,0x36,0x32,0x33,0x2d, - 0x33,0x2e,0x38,0x30,0x36,0x2c,0x33,0x2e,0x38,0x35, - 0x2d,0x37,0x2e,0x31,0x31,0x37,0x2c,0x36,0x2e,0x36, - 0x38,0x33,0x2d,0x39,0x2e,0x39,0x35,0x63,0x32,0x2e, - 0x38,0x33,0x32,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c, - 0x36,0x2e,0x31,0x34,0x36,0x2d,0x35,0x2e,0x30,0x35, - 0x32,0x2c,0x39,0x2e,0x39,0x34,0x36,0x2d,0x36,0x2e, - 0x36,0x38,0x34,0x20,0x20,0x20,0x20,0x63,0x33,0x2e, - 0x37,0x39,0x36,0x2d,0x31,0x2e,0x36,0x31,0x34,0x2c, - 0x37,0x2e,0x38,0x33,0x38,0x2d,0x32,0x2e,0x34,0x33, - 0x35,0x2c,0x31,0x32,0x2e,0x31,0x31,0x39,0x2d,0x32, - 0x2e,0x34,0x33,0x35,0x68,0x37,0x2e,0x34,0x35,0x39, - 0x63,0x34,0x2e,0x32,0x38,0x33,0x2c,0x30,0x2c,0x38, - 0x2e,0x33,0x32,0x2c,0x30,0x2e,0x38,0x31,0x38,0x2c, - 0x31,0x32,0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e,0x34, - 0x33,0x35,0x63,0x33,0x2e,0x37,0x39,0x37,0x2c,0x31, - 0x2e,0x36,0x33,0x32,0x2c,0x37,0x2e,0x31,0x30,0x39, - 0x2c,0x33,0x2e,0x38,0x35,0x32,0x2c,0x39,0x2e,0x39, - 0x34,0x31,0x2c,0x36,0x2e,0x36,0x38,0x34,0x20,0x20, - 0x20,0x20,0x63,0x32,0x2e,0x38,0x33,0x32,0x2c,0x32, - 0x2e,0x38,0x33,0x33,0x2c,0x35,0x2e,0x30,0x36,0x31, - 0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36, - 0x38,0x34,0x2c,0x39,0x2e,0x39,0x35,0x63,0x31,0x2e, - 0x36,0x32,0x33,0x2c,0x33,0x2e,0x37,0x39,0x37,0x2c, - 0x32,0x2e,0x34,0x33,0x35,0x2c,0x37,0x2e,0x38,0x33, - 0x38,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32, - 0x2e,0x31,0x31,0x36,0x76,0x37,0x36,0x2e,0x39,0x37, - 0x32,0x4c,0x37,0x32,0x37,0x2e,0x38,0x32,0x31,0x2c, - 0x35,0x32,0x33,0x2e,0x31,0x39,0x34,0x4c,0x37,0x32, - 0x37,0x2e,0x38,0x32,0x31,0x2c,0x35,0x32,0x33,0x2e, - 0x31,0x39,0x34,0x7a,0x20,0x20,0x20,0x20,0x20,0x4d, - 0x37,0x31,0x39,0x2e,0x33,0x32,0x38,0x2c,0x34,0x37, - 0x31,0x2e,0x38,0x31,0x68,0x2d,0x32,0x36,0x2e,0x39, - 0x33,0x32,0x63,0x2d,0x32,0x2e,0x35,0x36,0x32,0x2c, - 0x30,0x2d,0x34,0x2e,0x39,0x36,0x31,0x2c,0x30,0x2e, - 0x34,0x38,0x32,0x2d,0x37,0x2e,0x32,0x30,0x32,0x2c, - 0x31,0x2e,0x34,0x34,0x37,0x63,0x2d,0x32,0x2e,0x32, - 0x34,0x37,0x2c,0x30,0x2e,0x39,0x37,0x34,0x2d,0x34, - 0x2e,0x31,0x39,0x33,0x2c,0x32,0x2e,0x32,0x39,0x36, - 0x2d,0x35,0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x39, - 0x38,0x38,0x20,0x20,0x20,0x20,0x63,0x2d,0x31,0x2e, - 0x36,0x35,0x37,0x2c,0x31,0x2e,0x36,0x39,0x39,0x2d, - 0x32,0x2e,0x39,0x37,0x31,0x2c,0x33,0x2e,0x36,0x36, - 0x36,0x2d,0x33,0x2e,0x39,0x33,0x36,0x2c,0x35,0x2e, - 0x39,0x30,0x38,0x63,0x2d,0x30,0x2e,0x39,0x36,0x39, - 0x2c,0x32,0x2e,0x32,0x34,0x31,0x2d,0x31,0x2e,0x34, - 0x35,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e, - 0x34,0x35,0x2c,0x37,0x2e,0x32,0x30,0x32,0x76,0x34, - 0x2e,0x34,0x34,0x36,0x63,0x30,0x2c,0x32,0x2e,0x35, - 0x35,0x39,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2c,0x34, - 0x2e,0x39,0x36,0x2c,0x31,0x2e,0x34,0x35,0x2c,0x37, - 0x2e,0x32,0x30,0x32,0x20,0x20,0x20,0x20,0x63,0x30, - 0x2e,0x39,0x36,0x35,0x2c,0x32,0x2e,0x32,0x34,0x33, - 0x2c,0x32,0x2e,0x32,0x37,0x36,0x2c,0x34,0x2e,0x31, - 0x39,0x34,0x2c,0x33,0x2e,0x39,0x33,0x36,0x2c,0x35, - 0x2e,0x38,0x35,0x35,0x63,0x31,0x2e,0x36,0x36,0x31, - 0x2c,0x31,0x2e,0x36,0x35,0x31,0x2c,0x33,0x2e,0x36, - 0x30,0x37,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e, - 0x38,0x35,0x34,0x2c,0x33,0x2e,0x39,0x33,0x35,0x63, - 0x32,0x2e,0x32,0x34,0x31,0x2c,0x30,0x2e,0x39,0x36, - 0x35,0x2c,0x34,0x2e,0x36,0x34,0x33,0x2c,0x31,0x2e, - 0x34,0x34,0x37,0x2c,0x37,0x2e,0x32,0x30,0x32,0x2c, - 0x31,0x2e,0x34,0x34,0x37,0x68,0x38,0x2e,0x34,0x39, - 0x31,0x20,0x20,0x20,0x20,0x63,0x32,0x2e,0x35,0x35, - 0x34,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x37,0x2d, - 0x30,0x2e,0x34,0x38,0x32,0x2c,0x37,0x2e,0x31,0x39, - 0x39,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32,0x2e, - 0x32,0x34,0x31,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, - 0x34,0x2e,0x31,0x39,0x33,0x2d,0x32,0x2e,0x32,0x38, - 0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33,0x2e,0x39, - 0x33,0x35,0x63,0x31,0x2e,0x36,0x35,0x32,0x2d,0x31, - 0x2e,0x36,0x36,0x31,0x2c,0x32,0x2e,0x39,0x36,0x36, - 0x2d,0x33,0x2e,0x36,0x31,0x32,0x2c,0x33,0x2e,0x39, - 0x33,0x36,0x2d,0x35,0x2e,0x38,0x35,0x35,0x20,0x20, - 0x20,0x20,0x63,0x30,0x2e,0x39,0x36,0x34,0x2d,0x32, - 0x2e,0x32,0x34,0x32,0x2c,0x31,0x2e,0x34,0x34,0x39, - 0x2d,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34, - 0x34,0x39,0x2d,0x37,0x2e,0x32,0x30,0x32,0x4c,0x37, - 0x31,0x39,0x2e,0x33,0x32,0x38,0x2c,0x34,0x37,0x31, - 0x2e,0x38,0x31,0x4c,0x37,0x31,0x39,0x2e,0x33,0x32, - 0x38,0x2c,0x34,0x37,0x31,0x2e,0x38,0x31,0x7a,0x22, - 0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61,0x74,0x68, - 0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46, - 0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d,0x22,0x4d, - 0x37,0x39,0x36,0x2e,0x31,0x39,0x33,0x2c,0x35,0x32, - 0x33,0x2e,0x31,0x39,0x34,0x63,0x2d,0x33,0x2e,0x38, - 0x36,0x39,0x2c,0x30,0x2d,0x37,0x2e,0x35,0x31,0x34, - 0x2d,0x30,0x2e,0x37,0x32,0x39,0x2d,0x31,0x30,0x2e, - 0x39,0x32,0x38,0x2d,0x32,0x2e,0x31,0x37,0x35,0x63, - 0x2d,0x33,0x2e,0x34,0x32,0x31,0x2d,0x31,0x2e,0x34, - 0x35,0x35,0x2d,0x36,0x2e,0x33,0x39,0x32,0x2d,0x33, - 0x2e,0x34,0x36,0x31,0x2d,0x38,0x2e,0x39,0x30,0x38, - 0x2d,0x36,0x2e,0x30,0x31,0x20,0x20,0x20,0x20,0x63, - 0x2d,0x32,0x2e,0x35,0x32,0x36,0x2d,0x32,0x2e,0x35, - 0x35,0x37,0x2d,0x34,0x2e,0x35,0x32,0x33,0x2d,0x35, - 0x2e,0x35,0x32,0x34,0x2d,0x36,0x2e,0x30,0x31,0x2d, - 0x38,0x2e,0x39,0x30,0x38,0x63,0x2d,0x31,0x2e,0x34, - 0x38,0x34,0x2d,0x33,0x2e,0x33,0x38,0x35,0x2d,0x32, - 0x2e,0x32,0x32,0x39,0x2d,0x37,0x2e,0x30,0x31,0x33, - 0x2d,0x32,0x2e,0x32,0x32,0x39,0x2d,0x31,0x30,0x2e, - 0x38,0x37,0x37,0x76,0x2d,0x36,0x35,0x2e,0x39,0x39, - 0x36,0x68,0x2d,0x31,0x39,0x2e,0x30,0x35,0x39,0x76, - 0x2d,0x31,0x32,0x2e,0x31,0x31,0x36,0x68,0x31,0x39, - 0x2e,0x30,0x35,0x39,0x76,0x2d,0x32,0x35,0x2e,0x34, - 0x37,0x39,0x20,0x20,0x20,0x20,0x6c,0x31,0x32,0x2e, - 0x37,0x34,0x31,0x2d,0x32,0x2e,0x30,0x37,0x32,0x76, - 0x32,0x37,0x2e,0x35,0x35,0x35,0x68,0x32,0x36,0x2e, - 0x39,0x33,0x32,0x76,0x31,0x32,0x2e,0x31,0x31,0x37, - 0x48,0x37,0x38,0x30,0x2e,0x38,0x36,0x76,0x36,0x36, - 0x2e,0x36,0x31,0x33,0x63,0x30,0x2c,0x32,0x2e,0x31, - 0x34,0x35,0x2c,0x30,0x2e,0x33,0x39,0x35,0x2c,0x34, - 0x2e,0x31,0x32,0x36,0x2c,0x31,0x2e,0x31,0x38,0x38, - 0x2c,0x35,0x2e,0x39,0x35,0x35,0x63,0x30,0x2e,0x37, - 0x39,0x36,0x2c,0x31,0x2e,0x38,0x32,0x39,0x2c,0x31, - 0x2e,0x38,0x38,0x33,0x2c,0x33,0x2e,0x34,0x33,0x38, - 0x2c,0x33,0x2e,0x32,0x36,0x36,0x2c,0x34,0x2e,0x38, - 0x31,0x33,0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x33, - 0x38,0x32,0x2c,0x31,0x2e,0x33,0x38,0x36,0x2c,0x33, - 0x2e,0x30,0x30,0x35,0x2c,0x32,0x2e,0x34,0x37,0x33, - 0x2c,0x34,0x2e,0x38,0x36,0x37,0x2c,0x33,0x2e,0x32, - 0x37,0x63,0x31,0x2e,0x38,0x36,0x34,0x2c,0x30,0x2e, - 0x37,0x38,0x38,0x2c,0x33,0x2e,0x38,0x36,0x39,0x2c, - 0x31,0x2e,0x31,0x38,0x38,0x2c,0x36,0x2e,0x30,0x31, - 0x2c,0x31,0x2e,0x31,0x38,0x38,0x68,0x31,0x31,0x2e, - 0x36,0x76,0x31,0x32,0x2e,0x31,0x32,0x33,0x4c,0x37, - 0x39,0x36,0x2e,0x31,0x39,0x33,0x2c,0x35,0x32,0x33, - 0x2e,0x31,0x39,0x34,0x4c,0x37,0x39,0x36,0x2e,0x31, - 0x39,0x33,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x09,0x3c,0x70,0x61, - 0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22,0x23, - 0x46,0x46,0x46,0x46,0x46,0x46,0x22,0x20,0x64,0x3d, - 0x22,0x4d,0x38,0x33,0x34,0x2e,0x34,0x31,0x39,0x2c, - 0x33,0x39,0x31,0x2e,0x36,0x33,0x32,0x76,0x2d,0x31, - 0x36,0x2e,0x39,0x38,0x37,0x68,0x31,0x34,0x2e,0x38, - 0x31,0x33,0x76,0x31,0x36,0x2e,0x39,0x38,0x37,0x48, - 0x38,0x33,0x34,0x2e,0x34,0x31,0x39,0x7a,0x20,0x4d, - 0x38,0x33,0x35,0x2e,0x34,0x35,0x35,0x2c,0x35,0x32, - 0x33,0x2e,0x31,0x39,0x34,0x56,0x34,0x31,0x37,0x2e, - 0x31,0x31,0x33,0x68,0x31,0x32,0x2e,0x37,0x34,0x76, - 0x31,0x30,0x36,0x2e,0x30,0x38,0x31,0x48,0x38,0x33, - 0x35,0x2e,0x34,0x35,0x35,0x20,0x20,0x20,0x20,0x4c, - 0x38,0x33,0x35,0x2e,0x34,0x35,0x35,0x2c,0x35,0x32, - 0x33,0x2e,0x31,0x39,0x34,0x7a,0x22,0x2f,0x3e,0x0a, - 0x09,0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69, - 0x6c,0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46, - 0x46,0x22,0x20,0x64,0x3d,0x22,0x4d,0x39,0x34,0x36, - 0x2e,0x33,0x35,0x32,0x2c,0x35,0x30,0x36,0x2e,0x32, - 0x30,0x31,0x63,0x2d,0x31,0x2e,0x36,0x32,0x33,0x2c, - 0x33,0x2e,0x38,0x30,0x35,0x2d,0x33,0x2e,0x38,0x35, - 0x31,0x2c,0x37,0x2e,0x31,0x31,0x38,0x2d,0x36,0x2e, - 0x36,0x38,0x33,0x2c,0x39,0x2e,0x39,0x34,0x31,0x63, - 0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x32,0x2e,0x38, - 0x34,0x31,0x2d,0x36,0x2e,0x31,0x34,0x36,0x2c,0x35, - 0x2e,0x30,0x36,0x32,0x2d,0x39,0x2e,0x39,0x34,0x32, - 0x2c,0x36,0x2e,0x36,0x38,0x35,0x20,0x20,0x20,0x20, - 0x63,0x2d,0x33,0x2e,0x38,0x30,0x32,0x2c,0x31,0x2e, - 0x36,0x32,0x32,0x2d,0x37,0x2e,0x38,0x33,0x39,0x2c, - 0x32,0x2e,0x34,0x33,0x34,0x2d,0x31,0x32,0x2e,0x31, - 0x32,0x31,0x2c,0x32,0x2e,0x34,0x33,0x34,0x68,0x2d, - 0x38,0x2e,0x34,0x39,0x32,0x63,0x2d,0x34,0x2e,0x32, - 0x38,0x36,0x2c,0x30,0x2d,0x38,0x2e,0x33,0x32,0x37, - 0x2d,0x30,0x2e,0x38,0x31,0x32,0x2d,0x31,0x32,0x2e, - 0x31,0x32,0x34,0x2d,0x32,0x2e,0x34,0x33,0x34,0x63, - 0x2d,0x33,0x2e,0x37,0x39,0x36,0x2d,0x31,0x2e,0x36, - 0x32,0x33,0x2d,0x37,0x2e,0x31,0x30,0x39,0x2d,0x33, - 0x2e,0x38,0x34,0x34,0x2d,0x39,0x2e,0x39,0x34,0x31, - 0x2d,0x36,0x2e,0x36,0x38,0x35,0x20,0x20,0x20,0x20, - 0x63,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2d,0x32,0x2e, - 0x38,0x32,0x33,0x2d,0x35,0x2e,0x30,0x36,0x31,0x2d, - 0x36,0x2e,0x31,0x33,0x39,0x2d,0x36,0x2e,0x36,0x38, - 0x34,0x2d,0x39,0x2e,0x39,0x34,0x31,0x63,0x2d,0x31, - 0x2e,0x36,0x32,0x33,0x2d,0x33,0x2e,0x37,0x39,0x36, - 0x2d,0x32,0x2e,0x34,0x33,0x36,0x2d,0x37,0x2e,0x38, - 0x33,0x39,0x2d,0x32,0x2e,0x34,0x33,0x36,0x2d,0x31, - 0x32,0x2e,0x31,0x31,0x36,0x76,0x2d,0x34,0x37,0x2e, - 0x38,0x36,0x31,0x63,0x30,0x2d,0x34,0x2e,0x32,0x37, - 0x38,0x2c,0x30,0x2e,0x38,0x31,0x33,0x2d,0x38,0x2e, - 0x33,0x31,0x39,0x2c,0x32,0x2e,0x34,0x33,0x36,0x2d, - 0x31,0x32,0x2e,0x31,0x31,0x36,0x20,0x20,0x20,0x20, - 0x63,0x31,0x2e,0x36,0x32,0x33,0x2d,0x33,0x2e,0x38, - 0x30,0x36,0x2c,0x33,0x2e,0x38,0x35,0x32,0x2d,0x37, - 0x2e,0x31,0x31,0x37,0x2c,0x36,0x2e,0x36,0x38,0x34, - 0x2d,0x39,0x2e,0x39,0x35,0x63,0x32,0x2e,0x38,0x33, - 0x31,0x2d,0x32,0x2e,0x38,0x33,0x32,0x2c,0x36,0x2e, - 0x31,0x34,0x36,0x2d,0x35,0x2e,0x30,0x35,0x32,0x2c, - 0x39,0x2e,0x39,0x34,0x31,0x2d,0x36,0x2e,0x36,0x38, - 0x34,0x63,0x33,0x2e,0x37,0x39,0x37,0x2d,0x31,0x2e, - 0x36,0x31,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2d, - 0x32,0x2e,0x34,0x33,0x35,0x2c,0x31,0x32,0x2e,0x31, - 0x32,0x34,0x2d,0x32,0x2e,0x34,0x33,0x35,0x68,0x38, - 0x2e,0x34,0x39,0x32,0x20,0x20,0x20,0x20,0x63,0x34, - 0x2e,0x32,0x38,0x32,0x2c,0x30,0x2c,0x38,0x2e,0x33, - 0x31,0x39,0x2c,0x30,0x2e,0x38,0x31,0x39,0x2c,0x31, - 0x32,0x2e,0x31,0x32,0x31,0x2c,0x32,0x2e,0x34,0x33, - 0x35,0x63,0x33,0x2e,0x37,0x39,0x37,0x2c,0x31,0x2e, - 0x36,0x33,0x32,0x2c,0x37,0x2e,0x31,0x31,0x2c,0x33, - 0x2e,0x38,0x35,0x32,0x2c,0x39,0x2e,0x39,0x34,0x32, - 0x2c,0x36,0x2e,0x36,0x38,0x34,0x63,0x32,0x2e,0x38, - 0x33,0x31,0x2c,0x32,0x2e,0x38,0x33,0x33,0x2c,0x35, - 0x2e,0x30,0x36,0x2c,0x36,0x2e,0x31,0x34,0x36,0x2c, - 0x36,0x2e,0x36,0x38,0x33,0x2c,0x39,0x2e,0x39,0x35, - 0x20,0x20,0x20,0x20,0x63,0x31,0x2e,0x36,0x32,0x32, - 0x2c,0x33,0x2e,0x37,0x39,0x37,0x2c,0x32,0x2e,0x34, - 0x33,0x34,0x2c,0x37,0x2e,0x38,0x33,0x38,0x2c,0x32, - 0x2e,0x34,0x33,0x34,0x2c,0x31,0x32,0x2e,0x31,0x31, - 0x36,0x76,0x34,0x37,0x2e,0x38,0x36,0x31,0x43,0x39, - 0x34,0x38,0x2e,0x37,0x38,0x33,0x2c,0x34,0x39,0x38, - 0x2e,0x33,0x36,0x33,0x2c,0x39,0x34,0x37,0x2e,0x39, - 0x37,0x34,0x2c,0x35,0x30,0x32,0x2e,0x34,0x30,0x35, - 0x2c,0x39,0x34,0x36,0x2e,0x33,0x35,0x32,0x2c,0x35, - 0x30,0x36,0x2e,0x32,0x30,0x31,0x7a,0x20,0x4d,0x39, - 0x33,0x36,0x2e,0x30,0x34,0x34,0x2c,0x34,0x34,0x35, - 0x2e,0x34,0x39,0x36,0x20,0x20,0x20,0x20,0x63,0x30, - 0x2d,0x32,0x2e,0x35,0x34,0x39,0x2d,0x30,0x2e,0x34, - 0x38,0x35,0x2d,0x34,0x2e,0x39,0x35,0x33,0x2d,0x31, - 0x2e,0x34,0x35,0x2d,0x37,0x2e,0x31,0x39,0x35,0x63, - 0x2d,0x30,0x2e,0x39,0x36,0x38,0x2d,0x32,0x2e,0x32, - 0x34,0x31,0x2d,0x32,0x2e,0x32,0x38,0x31,0x2d,0x34, - 0x2e,0x31,0x39,0x33,0x2d,0x33,0x2e,0x39,0x33,0x36, - 0x2d,0x35,0x2e,0x38,0x35,0x34,0x63,0x2d,0x31,0x2e, - 0x36,0x36,0x31,0x2d,0x31,0x2e,0x36,0x35,0x33,0x2d, - 0x33,0x2e,0x36,0x31,0x31,0x2d,0x32,0x2e,0x39,0x37, - 0x32,0x2d,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33,0x2e, - 0x39,0x33,0x37,0x20,0x20,0x20,0x20,0x63,0x2d,0x32, - 0x2e,0x32,0x34,0x31,0x2d,0x30,0x2e,0x39,0x36,0x34, - 0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34, - 0x35,0x33,0x2d,0x37,0x2e,0x31,0x39,0x38,0x2d,0x31, - 0x2e,0x34,0x35,0x33,0x68,0x2d,0x38,0x2e,0x34,0x39, - 0x32,0x63,0x2d,0x32,0x2e,0x35,0x35,0x38,0x2c,0x30, - 0x2d,0x34,0x2e,0x39,0x36,0x2c,0x30,0x2e,0x34,0x38, - 0x39,0x2d,0x37,0x2e,0x32,0x30,0x32,0x2c,0x31,0x2e, - 0x34,0x35,0x33,0x63,0x2d,0x32,0x2e,0x32,0x34,0x32, - 0x2c,0x30,0x2e,0x39,0x36,0x35,0x2d,0x34,0x2e,0x31, - 0x39,0x33,0x2c,0x32,0x2e,0x32,0x38,0x31,0x2d,0x35, - 0x2e,0x38,0x35,0x34,0x2c,0x33,0x2e,0x39,0x33,0x37, - 0x20,0x20,0x20,0x20,0x63,0x2d,0x31,0x2e,0x36,0x35, - 0x32,0x2c,0x31,0x2e,0x36,0x36,0x2d,0x32,0x2e,0x39, - 0x37,0x2c,0x33,0x2e,0x36,0x31,0x32,0x2d,0x33,0x2e, - 0x39,0x33,0x36,0x2c,0x35,0x2e,0x38,0x35,0x34,0x63, - 0x2d,0x30,0x2e,0x39,0x36,0x38,0x2c,0x32,0x2e,0x32, - 0x34,0x32,0x2d,0x31,0x2e,0x34,0x34,0x39,0x2c,0x34, - 0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34,0x34,0x39, - 0x2c,0x37,0x2e,0x31,0x39,0x35,0x76,0x34,0x39,0x2e, - 0x33,0x31,0x63,0x30,0x2c,0x32,0x2e,0x35,0x35,0x38, - 0x2c,0x30,0x2e,0x34,0x38,0x31,0x2c,0x34,0x2e,0x39, - 0x35,0x39,0x2c,0x31,0x2e,0x34,0x34,0x39,0x2c,0x37, - 0x2e,0x32,0x30,0x31,0x20,0x20,0x20,0x20,0x63,0x30, - 0x2e,0x39,0x36,0x36,0x2c,0x32,0x2e,0x32,0x34,0x33, - 0x2c,0x32,0x2e,0x32,0x38,0x31,0x2c,0x34,0x2e,0x31, - 0x39,0x34,0x2c,0x33,0x2e,0x39,0x33,0x36,0x2c,0x35, - 0x2e,0x38,0x35,0x35,0x63,0x31,0x2e,0x36,0x36,0x31, - 0x2c,0x31,0x2e,0x36,0x35,0x31,0x2c,0x33,0x2e,0x36, - 0x31,0x32,0x2c,0x32,0x2e,0x39,0x37,0x2c,0x35,0x2e, - 0x38,0x35,0x34,0x2c,0x33,0x2e,0x39,0x33,0x35,0x63, - 0x32,0x2e,0x32,0x34,0x32,0x2c,0x30,0x2e,0x39,0x36, - 0x36,0x2c,0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e, - 0x34,0x34,0x37,0x2c,0x37,0x2e,0x32,0x30,0x32,0x2c, - 0x31,0x2e,0x34,0x34,0x37,0x68,0x38,0x2e,0x34,0x39, - 0x32,0x20,0x20,0x20,0x20,0x63,0x32,0x2e,0x35,0x35, - 0x34,0x2c,0x30,0x2c,0x34,0x2e,0x39,0x35,0x37,0x2d, - 0x30,0x2e,0x34,0x38,0x31,0x2c,0x37,0x2e,0x31,0x39, - 0x38,0x2d,0x31,0x2e,0x34,0x34,0x37,0x63,0x32,0x2e, - 0x32,0x34,0x33,0x2d,0x30,0x2e,0x39,0x36,0x35,0x2c, - 0x34,0x2e,0x31,0x39,0x33,0x2d,0x32,0x2e,0x32,0x38, - 0x2c,0x35,0x2e,0x38,0x35,0x34,0x2d,0x33,0x2e,0x39, - 0x33,0x35,0x63,0x31,0x2e,0x36,0x35,0x32,0x2d,0x31, - 0x2e,0x36,0x36,0x31,0x2c,0x32,0x2e,0x39,0x36,0x38, - 0x2d,0x33,0x2e,0x36,0x31,0x32,0x2c,0x33,0x2e,0x39, - 0x33,0x36,0x2d,0x35,0x2e,0x38,0x35,0x35,0x20,0x20, - 0x20,0x20,0x63,0x30,0x2e,0x39,0x36,0x35,0x2d,0x32, - 0x2e,0x32,0x34,0x32,0x2c,0x31,0x2e,0x34,0x35,0x2d, - 0x34,0x2e,0x36,0x34,0x36,0x2c,0x31,0x2e,0x34,0x35, - 0x2d,0x37,0x2e,0x32,0x30,0x31,0x56,0x34,0x34,0x35, - 0x2e,0x34,0x39,0x36,0x7a,0x22,0x2f,0x3e,0x0a,0x09, - 0x09,0x3c,0x70,0x61,0x74,0x68,0x20,0x66,0x69,0x6c, - 0x6c,0x3d,0x22,0x23,0x46,0x46,0x46,0x46,0x46,0x46, - 0x22,0x20,0x64,0x3d,0x22,0x4d,0x31,0x30,0x33,0x32, - 0x2e,0x33,0x38,0x35,0x2c,0x35,0x32,0x33,0x2e,0x31, - 0x39,0x34,0x76,0x2d,0x37,0x37,0x2e,0x36,0x39,0x38, - 0x63,0x30,0x2d,0x32,0x2e,0x35,0x34,0x39,0x2d,0x30, - 0x2e,0x34,0x38,0x31,0x2d,0x34,0x2e,0x39,0x35,0x33, - 0x2d,0x31,0x2e,0x34,0x34,0x39,0x2d,0x37,0x2e,0x31, - 0x39,0x35,0x63,0x2d,0x30,0x2e,0x39,0x37,0x2d,0x32, - 0x2e,0x32,0x34,0x31,0x2d,0x32,0x2e,0x32,0x37,0x37, - 0x2d,0x34,0x2e,0x31,0x39,0x33,0x2d,0x33,0x2e,0x39, - 0x33,0x38,0x2d,0x35,0x2e,0x38,0x35,0x34,0x20,0x20, - 0x20,0x20,0x63,0x2d,0x31,0x2e,0x36,0x35,0x32,0x2d, - 0x31,0x2e,0x36,0x35,0x33,0x2d,0x33,0x2e,0x36,0x30, - 0x38,0x2d,0x32,0x2e,0x39,0x37,0x32,0x2d,0x35,0x2e, - 0x38,0x35,0x33,0x2d,0x33,0x2e,0x39,0x33,0x37,0x63, - 0x2d,0x32,0x2e,0x32,0x34,0x36,0x2d,0x30,0x2e,0x39, - 0x36,0x34,0x2d,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31, - 0x2e,0x34,0x35,0x33,0x2d,0x37,0x2e,0x31,0x39,0x38, - 0x2d,0x31,0x2e,0x34,0x35,0x33,0x68,0x2d,0x38,0x2e, - 0x34,0x39,0x36,0x63,0x2d,0x32,0x2e,0x35,0x35,0x38, - 0x2c,0x30,0x2d,0x34,0x2e,0x39,0x35,0x36,0x2c,0x30, - 0x2e,0x34,0x38,0x39,0x2d,0x37,0x2e,0x31,0x39,0x38, - 0x2c,0x31,0x2e,0x34,0x35,0x33,0x20,0x20,0x20,0x20, - 0x63,0x2d,0x32,0x2e,0x32,0x34,0x36,0x2c,0x30,0x2e, - 0x39,0x36,0x35,0x2d,0x34,0x2e,0x31,0x39,0x33,0x2c, - 0x32,0x2e,0x32,0x38,0x31,0x2d,0x35,0x2e,0x38,0x35, - 0x33,0x2c,0x33,0x2e,0x39,0x33,0x37,0x63,0x2d,0x31, - 0x2e,0x36,0x36,0x31,0x2c,0x31,0x2e,0x36,0x36,0x2d, - 0x32,0x2e,0x39,0x37,0x2c,0x33,0x2e,0x36,0x31,0x32, - 0x2d,0x33,0x2e,0x39,0x33,0x38,0x2c,0x35,0x2e,0x38, - 0x35,0x34,0x63,0x2d,0x30,0x2e,0x39,0x37,0x2c,0x32, - 0x2e,0x32,0x34,0x32,0x2d,0x31,0x2e,0x34,0x35,0x31, - 0x2c,0x34,0x2e,0x36,0x34,0x36,0x2d,0x31,0x2e,0x34, - 0x35,0x31,0x2c,0x37,0x2e,0x31,0x39,0x35,0x76,0x37, - 0x37,0x2e,0x36,0x39,0x38,0x68,0x2d,0x31,0x32,0x2e, - 0x37,0x33,0x39,0x20,0x20,0x20,0x20,0x56,0x34,0x31, - 0x37,0x2e,0x31,0x31,0x33,0x68,0x34,0x2e,0x32,0x34, - 0x33,0x6c,0x36,0x2e,0x39,0x34,0x32,0x2c,0x31,0x30, - 0x2e,0x37,0x37,0x35,0x63,0x32,0x2e,0x39,0x2d,0x33, - 0x2e,0x39,0x33,0x39,0x2c,0x36,0x2e,0x35,0x34,0x35, - 0x2d,0x37,0x2e,0x30,0x36,0x33,0x2c,0x31,0x30,0x2e, - 0x39,0x33,0x31,0x2d,0x39,0x2e,0x33,0x37,0x35,0x63, - 0x34,0x2e,0x33,0x38,0x37,0x2d,0x32,0x2e,0x33,0x31, - 0x32,0x2c,0x39,0x2e,0x31,0x37,0x2d,0x33,0x2e,0x34, - 0x37,0x37,0x2c,0x31,0x34,0x2e,0x33,0x34,0x35,0x2d, - 0x33,0x2e,0x34,0x37,0x37,0x68,0x33,0x2e,0x32,0x31, - 0x35,0x20,0x20,0x20,0x20,0x63,0x34,0x2e,0x32,0x37, - 0x38,0x2c,0x30,0x2c,0x38,0x2e,0x33,0x32,0x2c,0x30, - 0x2e,0x38,0x31,0x38,0x2c,0x31,0x32,0x2e,0x31,0x31, - 0x37,0x2c,0x32,0x2e,0x34,0x33,0x36,0x63,0x33,0x2e, - 0x38,0x2c,0x31,0x2e,0x36,0x32,0x39,0x2c,0x37,0x2e, - 0x31,0x31,0x34,0x2c,0x33,0x2e,0x38,0x35,0x31,0x2c, - 0x39,0x2e,0x39,0x35,0x2c,0x36,0x2e,0x36,0x38,0x33, - 0x63,0x32,0x2e,0x38,0x32,0x37,0x2c,0x32,0x2e,0x38, - 0x33,0x33,0x2c,0x35,0x2e,0x30,0x35,0x36,0x2c,0x36, - 0x2e,0x31,0x34,0x36,0x2c,0x36,0x2e,0x36,0x37,0x39, - 0x2c,0x39,0x2e,0x39,0x35,0x31,0x20,0x20,0x20,0x20, - 0x63,0x31,0x2e,0x36,0x32,0x32,0x2c,0x33,0x2e,0x37, - 0x39,0x35,0x2c,0x32,0x2e,0x34,0x33,0x35,0x2c,0x37, - 0x2e,0x38,0x33,0x38,0x2c,0x32,0x2e,0x34,0x33,0x35, - 0x2c,0x31,0x32,0x2e,0x31,0x31,0x34,0x76,0x37,0x36, - 0x2e,0x39,0x37,0x34,0x48,0x31,0x30,0x33,0x32,0x2e, - 0x33,0x38,0x35,0x4c,0x31,0x30,0x33,0x32,0x2e,0x33, - 0x38,0x35,0x2c,0x35,0x32,0x33,0x2e,0x31,0x39,0x34, - 0x7a,0x22,0x2f,0x3e,0x0a,0x09,0x3c,0x2f,0x67,0x3e, - 0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x67,0x20,0x69, - 0x64,0x3d,0x22,0x4c,0x61,0x79,0x65,0x72,0x5f,0x33, - 0x22,0x3e,0x0a,0x3c,0x2f,0x67,0x3e,0x0a,0x3c,0x2f, - 0x73,0x76,0x67,0x3e -}; - diff --git a/data/converted/star_filled_svg.cpp b/data/converted/star_filled_svg.cpp deleted file mode 100644 index 69ff258b21..0000000000 --- a/data/converted/star_filled_svg.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// this file was auto-generated from "star_filled.svg" by res2h - -#include "../Resources.h" - -const uint16_t star_filled_svg_size = 1152; -const uint8_t star_filled_svg_data[1152] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x37,0x37,0x35,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x30,0x2e,0x37, - 0x36,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, - 0x31,0x2e,0x37,0x37,0x35,0x20,0x32,0x30,0x2e,0x37, - 0x36,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x32,0x31,0x2e,0x37,0x37,0x35,0x20,0x32,0x30, - 0x2e,0x37,0x36,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x38,0x2e,0x37,0x31,0x2c,0x32,0x2e, - 0x30,0x37,0x36,0x63,0x2d,0x30,0x2e,0x31,0x38,0x32, - 0x2c,0x30,0x2d,0x30,0x2e,0x33,0x36,0x34,0x2c,0x30, - 0x2e,0x31,0x34,0x2d,0x30,0x2e,0x35,0x30,0x31,0x2c, - 0x30,0x2e,0x34,0x31,0x39,0x4c,0x36,0x2e,0x33,0x35, - 0x2c,0x36,0x2e,0x32,0x36,0x31,0x63,0x2d,0x30,0x2e, - 0x32,0x37,0x36,0x2c,0x30,0x2e,0x35,0x36,0x2d,0x31, - 0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e,0x30,0x39,0x31, - 0x2d,0x31,0x2e,0x36,0x32,0x34,0x2c,0x31,0x2e,0x31, - 0x38,0x4c,0x30,0x2e,0x35,0x37,0x32,0x2c,0x38,0x2e, - 0x30,0x34,0x35,0x0a,0x09,0x43,0x2d,0x30,0x2e,0x30, - 0x34,0x36,0x2c,0x38,0x2e,0x31,0x33,0x35,0x2d,0x30, - 0x2e,0x31,0x38,0x35,0x2c,0x38,0x2e,0x35,0x36,0x34, - 0x2c,0x30,0x2e,0x32,0x36,0x32,0x2c,0x39,0x6c,0x33, - 0x2e,0x30,0x30,0x37,0x2c,0x32,0x2e,0x39,0x33,0x31, - 0x63,0x30,0x2e,0x34,0x34,0x37,0x2c,0x30,0x2e,0x34, - 0x33,0x36,0x2c,0x30,0x2e,0x37,0x32,0x36,0x2c,0x31, - 0x2e,0x32,0x39,0x35,0x2c,0x30,0x2e,0x36,0x32,0x2c, - 0x31,0x2e,0x39,0x30,0x39,0x6c,0x2d,0x30,0x2e,0x37, - 0x31,0x2c,0x34,0x2e,0x31,0x34,0x0a,0x09,0x63,0x2d, - 0x30,0x2e,0x30,0x37,0x37,0x2c,0x30,0x2e,0x34,0x34, - 0x36,0x2c,0x30,0x2e,0x30,0x39,0x34,0x2c,0x30,0x2e, - 0x37,0x30,0x38,0x2c,0x30,0x2e,0x34,0x30,0x35,0x2c, - 0x30,0x2e,0x37,0x30,0x38,0x63,0x30,0x2e,0x31,0x31, - 0x38,0x2c,0x30,0x2c,0x30,0x2e,0x32,0x35,0x35,0x2d, - 0x30,0x2e,0x30,0x33,0x38,0x2c,0x30,0x2e,0x34,0x30, - 0x37,0x2d,0x30,0x2e,0x31,0x31,0x37,0x6c,0x33,0x2e, - 0x37,0x31,0x37,0x2d,0x31,0x2e,0x39,0x35,0x36,0x63, - 0x30,0x2e,0x32,0x37,0x36,0x2d,0x30,0x2e,0x31,0x34, - 0x35,0x2c,0x30,0x2e,0x36,0x34,0x2d,0x30,0x2e,0x32, - 0x31,0x36,0x2c,0x31,0x2e,0x30,0x30,0x33,0x2d,0x30, - 0x2e,0x32,0x31,0x36,0x0a,0x09,0x63,0x30,0x2e,0x33, - 0x36,0x34,0x2c,0x30,0x2c,0x30,0x2e,0x37,0x32,0x39, - 0x2c,0x30,0x2e,0x30,0x37,0x32,0x2c,0x31,0x2e,0x30, - 0x30,0x34,0x2c,0x30,0x2e,0x32,0x31,0x36,0x6c,0x33, - 0x2e,0x37,0x31,0x37,0x2c,0x31,0x2e,0x39,0x35,0x36, - 0x63,0x30,0x2e,0x31,0x35,0x2c,0x30,0x2e,0x30,0x37, - 0x39,0x2c,0x30,0x2e,0x32,0x38,0x39,0x2c,0x30,0x2e, - 0x31,0x31,0x37,0x2c,0x30,0x2e,0x34,0x30,0x37,0x2c, - 0x30,0x2e,0x31,0x31,0x37,0x63,0x30,0x2e,0x33,0x31, - 0x31,0x2c,0x30,0x2c,0x30,0x2e,0x34,0x38,0x31,0x2d, - 0x30,0x2e,0x32,0x36,0x32,0x2c,0x30,0x2e,0x34,0x30, - 0x35,0x2d,0x30,0x2e,0x37,0x30,0x38,0x6c,0x2d,0x30, - 0x2e,0x37,0x31,0x31,0x2d,0x34,0x2e,0x31,0x34,0x0a, - 0x09,0x63,0x2d,0x30,0x2e,0x31,0x30,0x35,0x2d,0x30, - 0x2e,0x36,0x31,0x34,0x2c,0x30,0x2e,0x31,0x37,0x34, - 0x2d,0x31,0x2e,0x34,0x37,0x34,0x2c,0x30,0x2e,0x36, - 0x31,0x39,0x2d,0x31,0x2e,0x39,0x30,0x39,0x4c,0x31, - 0x37,0x2e,0x31,0x36,0x2c,0x39,0x63,0x30,0x2e,0x34, - 0x34,0x36,0x2d,0x30,0x2e,0x34,0x33,0x36,0x2c,0x30, - 0x2e,0x33,0x30,0x37,0x2d,0x30,0x2e,0x38,0x36,0x35, - 0x2d,0x30,0x2e,0x33,0x31,0x31,0x2d,0x30,0x2e,0x39, - 0x35,0x35,0x6c,0x2d,0x34,0x2e,0x31,0x35,0x34,0x2d, - 0x30,0x2e,0x36,0x30,0x33,0x0a,0x09,0x63,0x2d,0x30, - 0x2e,0x36,0x31,0x37,0x2d,0x30,0x2e,0x30,0x38,0x39, - 0x2d,0x31,0x2e,0x33,0x34,0x39,0x2d,0x30,0x2e,0x36, - 0x32,0x2d,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e, - 0x31,0x38,0x4c,0x39,0x2e,0x32,0x31,0x33,0x2c,0x32, - 0x2e,0x34,0x39,0x35,0x43,0x39,0x2e,0x30,0x37,0x34, - 0x2c,0x32,0x2e,0x32,0x31,0x36,0x2c,0x38,0x2e,0x38, - 0x39,0x33,0x2c,0x32,0x2e,0x30,0x37,0x36,0x2c,0x38, - 0x2e,0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36,0x4c, - 0x38,0x2e,0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36, - 0x7a,0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67, - 0x3e,0x0a -}; - diff --git a/data/converted/star_unfilled_svg.cpp b/data/converted/star_unfilled_svg.cpp deleted file mode 100644 index 3414ea5b4a..0000000000 --- a/data/converted/star_unfilled_svg.cpp +++ /dev/null @@ -1,196 +0,0 @@ -// this file was auto-generated from "star_unfilled.svg" by res2h - -#include "../Resources.h" - -const uint16_t star_unfilled_svg_size = 1871; -const uint8_t star_unfilled_svg_data[1871] = { - 0x3c,0x3f,0x78,0x6d,0x6c,0x20,0x76,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x30,0x22,0x20, - 0x65,0x6e,0x63,0x6f,0x64,0x69,0x6e,0x67,0x3d,0x22, - 0x75,0x74,0x66,0x2d,0x38,0x22,0x3f,0x3e,0x0a,0x3c, - 0x21,0x2d,0x2d,0x20,0x47,0x65,0x6e,0x65,0x72,0x61, - 0x74,0x6f,0x72,0x3a,0x20,0x41,0x64,0x6f,0x62,0x65, - 0x20,0x49,0x6c,0x6c,0x75,0x73,0x74,0x72,0x61,0x74, - 0x6f,0x72,0x20,0x31,0x36,0x2e,0x30,0x2e,0x33,0x2c, - 0x20,0x53,0x56,0x47,0x20,0x45,0x78,0x70,0x6f,0x72, - 0x74,0x20,0x50,0x6c,0x75,0x67,0x2d,0x49,0x6e,0x20, - 0x2e,0x20,0x53,0x56,0x47,0x20,0x56,0x65,0x72,0x73, - 0x69,0x6f,0x6e,0x3a,0x20,0x36,0x2e,0x30,0x30,0x20, - 0x42,0x75,0x69,0x6c,0x64,0x20,0x30,0x29,0x20,0x20, - 0x2d,0x2d,0x3e,0x0a,0x3c,0x21,0x44,0x4f,0x43,0x54, - 0x59,0x50,0x45,0x20,0x73,0x76,0x67,0x20,0x50,0x55, - 0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57, - 0x33,0x43,0x2f,0x2f,0x44,0x54,0x44,0x20,0x53,0x56, - 0x47,0x20,0x31,0x2e,0x31,0x2f,0x2f,0x45,0x4e,0x22, - 0x20,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x47,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2f,0x53, - 0x56,0x47,0x2f,0x31,0x2e,0x31,0x2f,0x44,0x54,0x44, - 0x2f,0x73,0x76,0x67,0x31,0x31,0x2e,0x64,0x74,0x64, - 0x22,0x3e,0x0a,0x3c,0x73,0x76,0x67,0x20,0x76,0x65, - 0x72,0x73,0x69,0x6f,0x6e,0x3d,0x22,0x31,0x2e,0x31, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x45,0x62,0x65,0x6e, - 0x65,0x5f,0x31,0x22,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77, - 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f, - 0x32,0x30,0x30,0x30,0x2f,0x73,0x76,0x67,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6c,0x69,0x6e, - 0x6b,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67, - 0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,0x6c,0x69,0x6e, - 0x6b,0x22,0x20,0x78,0x3d,0x22,0x30,0x70,0x78,0x22, - 0x20,0x79,0x3d,0x22,0x30,0x70,0x78,0x22,0x0a,0x09, - 0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x32,0x31, - 0x2e,0x37,0x37,0x35,0x70,0x78,0x22,0x20,0x68,0x65, - 0x69,0x67,0x68,0x74,0x3d,0x22,0x32,0x30,0x2e,0x37, - 0x36,0x32,0x70,0x78,0x22,0x20,0x76,0x69,0x65,0x77, - 0x42,0x6f,0x78,0x3d,0x22,0x30,0x20,0x30,0x20,0x32, - 0x31,0x2e,0x37,0x37,0x35,0x20,0x32,0x30,0x2e,0x37, - 0x36,0x32,0x22,0x20,0x65,0x6e,0x61,0x62,0x6c,0x65, - 0x2d,0x62,0x61,0x63,0x6b,0x67,0x72,0x6f,0x75,0x6e, - 0x64,0x3d,0x22,0x6e,0x65,0x77,0x20,0x30,0x20,0x30, - 0x20,0x32,0x31,0x2e,0x37,0x37,0x35,0x20,0x32,0x30, - 0x2e,0x37,0x36,0x32,0x22,0x20,0x78,0x6d,0x6c,0x3a, - 0x73,0x70,0x61,0x63,0x65,0x3d,0x22,0x70,0x72,0x65, - 0x73,0x65,0x72,0x76,0x65,0x22,0x3e,0x0a,0x3c,0x70, - 0x61,0x74,0x68,0x20,0x66,0x69,0x6c,0x6c,0x3d,0x22, - 0x23,0x37,0x37,0x37,0x37,0x37,0x37,0x22,0x20,0x64, - 0x3d,0x22,0x4d,0x38,0x2e,0x37,0x31,0x2c,0x32,0x2e, - 0x34,0x38,0x63,0x30,0x2e,0x30,0x32,0x36,0x2c,0x30, - 0x2e,0x30,0x31,0x38,0x2c,0x30,0x2e,0x30,0x38,0x33, - 0x2c,0x30,0x2e,0x30,0x37,0x2c,0x30,0x2e,0x31,0x34, - 0x33,0x2c,0x30,0x2e,0x31,0x39,0x33,0x6c,0x31,0x2e, - 0x38,0x35,0x39,0x2c,0x33,0x2e,0x37,0x36,0x36,0x63, - 0x30,0x2e,0x33,0x33,0x33,0x2c,0x30,0x2e,0x36,0x37, - 0x36,0x2c,0x31,0x2e,0x31,0x38,0x2c,0x31,0x2e,0x32, - 0x39,0x31,0x2c,0x31,0x2e,0x39,0x32,0x34,0x2c,0x31, - 0x2e,0x33,0x39,0x38,0x6c,0x34,0x2e,0x31,0x35,0x35, - 0x2c,0x30,0x2e,0x36,0x30,0x33,0x0a,0x09,0x63,0x30, - 0x2e,0x31,0x35,0x2c,0x30,0x2e,0x30,0x32,0x32,0x2c, - 0x30,0x2e,0x32,0x31,0x38,0x2c,0x30,0x2e,0x30,0x36, - 0x36,0x2c,0x30,0x2e,0x32,0x32,0x37,0x2c,0x30,0x2e, - 0x30,0x36,0x36,0x63,0x30,0x2e,0x30,0x30,0x31,0x2c, - 0x30,0x2c,0x30,0x2e,0x30,0x30,0x31,0x2c,0x30,0x2c, - 0x30,0x2e,0x30,0x30,0x31,0x2c,0x30,0x63,0x30,0x2c, - 0x30,0x2e,0x30,0x31,0x39,0x2d,0x30,0x2e,0x30,0x32, - 0x35,0x2c,0x30,0x2e,0x30,0x39,0x36,0x2d,0x30,0x2e, - 0x31,0x34,0x2c,0x30,0x2e,0x32,0x30,0x37,0x6c,0x2d, - 0x33,0x2e,0x30,0x30,0x39,0x2c,0x32,0x2e,0x39,0x33, - 0x31,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x35,0x33,0x39, - 0x2c,0x30,0x2e,0x35,0x32,0x36,0x2d,0x30,0x2e,0x38, - 0x36,0x32,0x2c,0x31,0x2e,0x35,0x32,0x31,0x2d,0x30, - 0x2e,0x37,0x33,0x35,0x2c,0x32,0x2e,0x32,0x36,0x33, - 0x6c,0x30,0x2e,0x37,0x31,0x31,0x2c,0x34,0x2e,0x31, - 0x34,0x63,0x30,0x2e,0x30,0x32,0x37,0x2c,0x30,0x2e, - 0x31,0x35,0x36,0x2c,0x30,0x2e,0x30,0x30,0x33,0x2c, - 0x30,0x2e,0x32,0x33,0x34,0x2d,0x30,0x2e,0x30,0x31, - 0x31,0x2c,0x30,0x2e,0x32,0x33,0x39,0x63,0x2d,0x30, - 0x2e,0x30,0x32,0x35,0x2c,0x30,0x2d,0x30,0x2e,0x30, - 0x39,0x38,0x2d,0x30,0x2e,0x30,0x30,0x38,0x2d,0x30, - 0x2e,0x32,0x32,0x31,0x2d,0x30,0x2e,0x30,0x37,0x31, - 0x4c,0x39,0x2e,0x39,0x2c,0x31,0x36,0x2e,0x32,0x36, - 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x33,0x32,0x34,0x2d, - 0x30,0x2e,0x31,0x37,0x31,0x2d,0x30,0x2e,0x37,0x34, - 0x37,0x2d,0x30,0x2e,0x32,0x36,0x34,0x2d,0x31,0x2e, - 0x31,0x39,0x2d,0x30,0x2e,0x32,0x36,0x34,0x53,0x37, - 0x2e,0x38,0x34,0x33,0x2c,0x31,0x36,0x2e,0x30,0x39, - 0x2c,0x37,0x2e,0x35,0x32,0x2c,0x31,0x36,0x2e,0x32, - 0x36,0x6c,0x2d,0x33,0x2e,0x37,0x31,0x36,0x2c,0x31, - 0x2e,0x39,0x35,0x34,0x63,0x2d,0x30,0x2e,0x31,0x32, - 0x33,0x2c,0x30,0x2e,0x30,0x36,0x33,0x2d,0x30,0x2e, - 0x31,0x39,0x36,0x2c,0x30,0x2e,0x30,0x37,0x31,0x2d, - 0x30,0x2e,0x32,0x32,0x34,0x2c,0x30,0x2e,0x30,0x38, - 0x32,0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x31,0x2d, - 0x30,0x2e,0x30,0x31,0x36,0x2d,0x30,0x2e,0x30,0x33, - 0x34,0x2d,0x30,0x2e,0x30,0x39,0x34,0x2d,0x30,0x2e, - 0x30,0x30,0x38,0x2d,0x30,0x2e,0x32,0x35,0x6c,0x30, - 0x2e,0x37,0x31,0x2d,0x34,0x2e,0x31,0x34,0x63,0x30, - 0x2e,0x31,0x32,0x38,0x2d,0x30,0x2e,0x37,0x34,0x33, - 0x2d,0x30,0x2e,0x31,0x39,0x35,0x2d,0x31,0x2e,0x37, - 0x33,0x37,0x2d,0x30,0x2e,0x37,0x33,0x35,0x2d,0x32, - 0x2e,0x32,0x36,0x33,0x4c,0x30,0x2e,0x35,0x34,0x31, - 0x2c,0x38,0x2e,0x37,0x31,0x32,0x43,0x30,0x2e,0x34, - 0x32,0x37,0x2c,0x38,0x2e,0x36,0x30,0x32,0x2c,0x30, - 0x2e,0x34,0x2c,0x38,0x2e,0x35,0x32,0x35,0x2c,0x30, - 0x2e,0x33,0x39,0x35,0x2c,0x38,0x2e,0x35,0x32,0x35, - 0x0a,0x09,0x6c,0x30,0x2c,0x30,0x43,0x30,0x2e,0x34, - 0x30,0x35,0x2c,0x38,0x2e,0x35,0x31,0x2c,0x30,0x2e, - 0x34,0x37,0x32,0x2c,0x38,0x2e,0x34,0x36,0x34,0x2c, - 0x30,0x2e,0x36,0x33,0x2c,0x38,0x2e,0x34,0x34,0x31, - 0x6c,0x34,0x2e,0x31,0x35,0x33,0x2d,0x30,0x2e,0x36, - 0x30,0x33,0x43,0x35,0x2e,0x35,0x33,0x2c,0x37,0x2e, - 0x37,0x33,0x2c,0x36,0x2e,0x33,0x37,0x35,0x2c,0x37, - 0x2e,0x31,0x31,0x35,0x2c,0x36,0x2e,0x37,0x30,0x39, - 0x2c,0x36,0x2e,0x34,0x33,0x39,0x6c,0x31,0x2e,0x38, - 0x35,0x39,0x2d,0x33,0x2e,0x37,0x36,0x36,0x0a,0x09, - 0x43,0x38,0x2e,0x36,0x32,0x38,0x2c,0x32,0x2e,0x35, - 0x35,0x2c,0x38,0x2e,0x36,0x38,0x35,0x2c,0x32,0x2e, - 0x34,0x39,0x36,0x2c,0x38,0x2e,0x37,0x31,0x2c,0x32, - 0x2e,0x34,0x38,0x20,0x4d,0x38,0x2e,0x37,0x31,0x2c, - 0x32,0x2e,0x30,0x37,0x36,0x63,0x2d,0x30,0x2e,0x31, - 0x38,0x32,0x2c,0x30,0x2d,0x30,0x2e,0x33,0x36,0x34, - 0x2c,0x30,0x2e,0x31,0x34,0x2d,0x30,0x2e,0x35,0x30, - 0x31,0x2c,0x30,0x2e,0x34,0x31,0x39,0x4c,0x36,0x2e, - 0x33,0x35,0x2c,0x36,0x2e,0x32,0x36,0x32,0x63,0x2d, - 0x30,0x2e,0x32,0x37,0x36,0x2c,0x30,0x2e,0x35,0x36, - 0x2d,0x31,0x2e,0x30,0x30,0x37,0x2c,0x31,0x2e,0x30, - 0x39,0x31,0x2d,0x31,0x2e,0x36,0x32,0x34,0x2c,0x31, - 0x2e,0x31,0x38,0x0a,0x09,0x4c,0x30,0x2e,0x35,0x37, - 0x32,0x2c,0x38,0x2e,0x30,0x34,0x35,0x63,0x2d,0x30, - 0x2e,0x36,0x31,0x38,0x2c,0x30,0x2e,0x30,0x39,0x2d, - 0x30,0x2e,0x37,0x35,0x37,0x2c,0x30,0x2e,0x35,0x32, - 0x2d,0x30,0x2e,0x33,0x31,0x2c,0x30,0x2e,0x39,0x35, - 0x35,0x6c,0x33,0x2e,0x30,0x30,0x37,0x2c,0x32,0x2e, - 0x39,0x33,0x31,0x63,0x30,0x2e,0x34,0x34,0x37,0x2c, - 0x30,0x2e,0x34,0x33,0x36,0x2c,0x30,0x2e,0x37,0x32, - 0x36,0x2c,0x31,0x2e,0x32,0x39,0x35,0x2c,0x30,0x2e, - 0x36,0x32,0x2c,0x31,0x2e,0x39,0x30,0x39,0x6c,0x2d, - 0x30,0x2e,0x37,0x31,0x2c,0x34,0x2e,0x31,0x33,0x39, - 0x0a,0x09,0x63,0x2d,0x30,0x2e,0x30,0x37,0x37,0x2c, - 0x30,0x2e,0x34,0x34,0x36,0x2c,0x30,0x2e,0x30,0x39, - 0x34,0x2c,0x30,0x2e,0x37,0x30,0x38,0x2c,0x30,0x2e, - 0x34,0x30,0x35,0x2c,0x30,0x2e,0x37,0x30,0x38,0x63, - 0x30,0x2e,0x31,0x31,0x38,0x2c,0x30,0x2c,0x30,0x2e, - 0x32,0x35,0x35,0x2d,0x30,0x2e,0x30,0x33,0x38,0x2c, - 0x30,0x2e,0x34,0x30,0x37,0x2d,0x30,0x2e,0x31,0x31, - 0x37,0x6c,0x33,0x2e,0x37,0x31,0x37,0x2d,0x31,0x2e, - 0x39,0x35,0x35,0x63,0x30,0x2e,0x32,0x37,0x36,0x2d, - 0x30,0x2e,0x31,0x34,0x35,0x2c,0x30,0x2e,0x36,0x34, - 0x2d,0x30,0x2e,0x32,0x31,0x36,0x2c,0x31,0x2e,0x30, - 0x30,0x33,0x2d,0x30,0x2e,0x32,0x31,0x36,0x0a,0x09, - 0x63,0x30,0x2e,0x33,0x36,0x34,0x2c,0x30,0x2c,0x30, - 0x2e,0x37,0x32,0x39,0x2c,0x30,0x2e,0x30,0x37,0x32, - 0x2c,0x31,0x2e,0x30,0x30,0x34,0x2c,0x30,0x2e,0x32, - 0x31,0x36,0x6c,0x33,0x2e,0x37,0x31,0x37,0x2c,0x31, - 0x2e,0x39,0x35,0x35,0x63,0x30,0x2e,0x31,0x35,0x2c, - 0x30,0x2e,0x30,0x37,0x39,0x2c,0x30,0x2e,0x32,0x38, - 0x39,0x2c,0x30,0x2e,0x31,0x31,0x37,0x2c,0x30,0x2e, - 0x34,0x30,0x37,0x2c,0x30,0x2e,0x31,0x31,0x37,0x63, - 0x30,0x2e,0x33,0x31,0x31,0x2c,0x30,0x2c,0x30,0x2e, - 0x34,0x38,0x31,0x2d,0x30,0x2e,0x32,0x36,0x32,0x2c, - 0x30,0x2e,0x34,0x30,0x35,0x2d,0x30,0x2e,0x37,0x30, - 0x38,0x6c,0x2d,0x30,0x2e,0x37,0x31,0x31,0x2d,0x34, - 0x2e,0x31,0x33,0x39,0x0a,0x09,0x63,0x2d,0x30,0x2e, - 0x31,0x30,0x35,0x2d,0x30,0x2e,0x36,0x31,0x34,0x2c, - 0x30,0x2e,0x31,0x37,0x34,0x2d,0x31,0x2e,0x34,0x37, - 0x34,0x2c,0x30,0x2e,0x36,0x31,0x39,0x2d,0x31,0x2e, - 0x39,0x30,0x39,0x6c,0x33,0x2e,0x30,0x30,0x39,0x2d, - 0x32,0x2e,0x39,0x33,0x31,0x63,0x30,0x2e,0x34,0x34, - 0x36,0x2d,0x30,0x2e,0x34,0x33,0x35,0x2c,0x30,0x2e, - 0x33,0x30,0x37,0x2d,0x30,0x2e,0x38,0x36,0x35,0x2d, - 0x30,0x2e,0x33,0x31,0x31,0x2d,0x30,0x2e,0x39,0x35, - 0x35,0x6c,0x2d,0x34,0x2e,0x31,0x35,0x34,0x2d,0x30, - 0x2e,0x36,0x30,0x33,0x0a,0x09,0x63,0x2d,0x30,0x2e, - 0x36,0x31,0x37,0x2d,0x30,0x2e,0x30,0x38,0x39,0x2d, - 0x31,0x2e,0x33,0x34,0x39,0x2d,0x30,0x2e,0x36,0x32, - 0x2d,0x31,0x2e,0x36,0x32,0x34,0x2d,0x31,0x2e,0x31, - 0x38,0x4c,0x39,0x2e,0x32,0x31,0x33,0x2c,0x32,0x2e, - 0x34,0x39,0x35,0x43,0x39,0x2e,0x30,0x37,0x34,0x2c, - 0x32,0x2e,0x32,0x31,0x36,0x2c,0x38,0x2e,0x38,0x39, - 0x33,0x2c,0x32,0x2e,0x30,0x37,0x36,0x2c,0x38,0x2e, - 0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36,0x4c,0x38, - 0x2e,0x37,0x31,0x2c,0x32,0x2e,0x30,0x37,0x36,0x7a, - 0x22,0x2f,0x3e,0x0a,0x3c,0x2f,0x73,0x76,0x67,0x3e, - 0x0a -}; - diff --git a/data/converted/textinput_ninepatch_active_png.cpp b/data/converted/textinput_ninepatch_active_png.cpp deleted file mode 100644 index 3783e02071..0000000000 --- a/data/converted/textinput_ninepatch_active_png.cpp +++ /dev/null @@ -1,317 +0,0 @@ -// this file was auto-generated from "textinput_ninepatch_active.png" by res2h - -#include "../Resources.h" - -const uint16_t textinput_ninepatch_active_png_size = 3084; -const uint8_t textinput_ninepatch_active_png_data[3084] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,0x00,0x00,0x00,0x09,0x70,0x48,0x59, - 0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,0x13,0x01, - 0x00,0x9a,0x9c,0x18,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,0x01,0x37,0x49,0x44,0x41,0x54,0x78,0xda,0xec, - 0xda,0xbd,0x4d,0xc3,0x40,0x00,0xc5,0xf1,0x7f,0x2e, - 0x27,0x45,0x4a,0x47,0x47,0x43,0x8f,0x0d,0x9e,0x84, - 0x26,0x56,0x0a,0x26,0x48,0xc4,0x00,0x48,0x71,0x4d, - 0xe5,0x11,0x50,0x46,0x40,0xb2,0xbd,0x80,0x4b,0x8f, - 0x10,0xc7,0x5e,0x81,0x05,0xa2,0x18,0xf9,0x30,0x45, - 0x62,0x89,0x82,0x01,0xce,0xe2,0xbd,0xea,0x74,0xd5, - 0xfb,0xdd,0x47,0x75,0x37,0x1b,0x86,0x81,0x24,0x49, - 0x0c,0xf0,0x02,0x6c,0x81,0x7b,0x60,0x81,0x9f,0xe9, - 0x80,0x16,0xd8,0x03,0xef,0x69,0x9a,0x7e,0xcf,0xcf, - 0xe7,0xb3,0x01,0x3e,0x80,0x57,0xe0,0x16,0xb0,0xf8, - 0x1b,0x7b,0xed,0xf8,0x04,0x3c,0x96,0x65,0x99,0xd9, - 0xeb,0xaa,0xaf,0x97,0xcb,0x25,0x71,0x1c,0x13,0x04, - 0x01,0xd6,0xfa,0x69,0xe8,0xfb,0x9e,0xa6,0x69,0x28, - 0x8a,0x82,0xd3,0xe9,0xb4,0x06,0x36,0x06,0xd8,0x00, - 0xac,0x56,0x2b,0xa2,0x28,0xf2,0xb6,0x3c,0x80,0xb5, - 0x96,0x28,0x8a,0x88,0xe3,0x78,0x9c,0xda,0x1a,0xe0, - 0x01,0x20,0x0c,0x43,0xa6,0x92,0x20,0x08,0xc6,0x61, - 0x68,0xc6,0x0b,0xeb,0xf3,0xca,0xff,0xb5,0x13,0xd7, - 0x2c,0x0c,0x13,0x8f,0x00,0x02,0x08,0x20,0x80,0x00, - 0x02,0x08,0x20,0x80,0x00,0x02,0x08,0x20,0x80,0x00, - 0x02,0x08,0x20,0x80,0x00,0x02,0x08,0x20,0x80,0x00, - 0x02,0x08,0x20,0x80,0x00,0x02,0xfc,0x47,0x40,0x07, - 0x97,0x47,0xe4,0xa9,0xe4,0x57,0xd7,0xce,0x00,0x47, - 0x80,0xa6,0x69,0x26,0x03,0x68,0xdb,0x76,0x1c,0x1e, - 0x0d,0x97,0x8f,0x13,0x14,0x45,0xc1,0xe1,0x70,0xc0, - 0x39,0xe7,0x6d,0x71,0xe7,0x1c,0x75,0x5d,0x93,0xe7, - 0xf9,0x38,0xb5,0x9f,0xed,0x76,0xbb,0xf1,0xb3,0xc7, - 0x7a,0x62,0xc7,0x3f,0x03,0x9e,0xe7,0x55,0x55,0x0d, - 0x65,0x59,0x66,0xc0,0x27,0x70,0x07,0xdc,0x00,0x73, - 0x4f,0x4b,0x7f,0x01,0x35,0xf0,0x06,0x24,0x69,0x9a, - 0xba,0x9f,0x01,0x00,0x79,0x0c,0x54,0x84,0x18,0x0e, - 0x50,0x30,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44, - 0xae,0x42,0x60,0x82 -}; - diff --git a/data/converted/textinput_ninepatch_png.cpp b/data/converted/textinput_ninepatch_png.cpp deleted file mode 100644 index 4bafbcfc15..0000000000 --- a/data/converted/textinput_ninepatch_png.cpp +++ /dev/null @@ -1,136 +0,0 @@ -// this file was auto-generated from "textinput_ninepatch.png" by res2h - -#include "../Resources.h" - -const uint16_t textinput_ninepatch_png_size = 1275; -const uint8_t textinput_ninepatch_png_data[1275] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30, - 0x00,0x00,0x00,0x30,0x08,0x06,0x00,0x00,0x00,0x57, - 0x02,0xf9,0x87,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,0x03,0x68,0x69,0x54,0x58,0x74,0x58,0x4d, - 0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62, - 0x65,0x2e,0x78,0x6d,0x70,0x00,0x00,0x00,0x00,0x00, - 0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74,0x20, - 0x62,0x65,0x67,0x69,0x6e,0x3d,0x22,0xef,0xbb,0xbf, - 0x22,0x20,0x69,0x64,0x3d,0x22,0x57,0x35,0x4d,0x30, - 0x4d,0x70,0x43,0x65,0x68,0x69,0x48,0x7a,0x72,0x65, - 0x53,0x7a,0x4e,0x54,0x63,0x7a,0x6b,0x63,0x39,0x64, - 0x22,0x3f,0x3e,0x20,0x3c,0x78,0x3a,0x78,0x6d,0x70, - 0x6d,0x65,0x74,0x61,0x20,0x78,0x6d,0x6c,0x6e,0x73, - 0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a, - 0x6e,0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20, - 0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,0x3d,0x22,0x41, - 0x64,0x6f,0x62,0x65,0x20,0x58,0x4d,0x50,0x20,0x43, - 0x6f,0x72,0x65,0x20,0x35,0x2e,0x33,0x2d,0x63,0x30, - 0x31,0x31,0x20,0x36,0x36,0x2e,0x31,0x34,0x35,0x36, - 0x36,0x31,0x2c,0x20,0x32,0x30,0x31,0x32,0x2f,0x30, - 0x32,0x2f,0x30,0x36,0x2d,0x31,0x34,0x3a,0x35,0x36, - 0x3a,0x32,0x37,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x22,0x3e,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52, - 0x44,0x46,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x72, - 0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f, - 0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72, - 0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x30,0x32,0x2f, - 0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e, - 0x74,0x61,0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x20, - 0x3c,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72, - 0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,0x64,0x66, - 0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x20, - 0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x6d,0x70,0x4d, - 0x4d,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, - 0x6e,0x73,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x63, - 0x6f,0x6d,0x2f,0x78,0x61,0x70,0x2f,0x31,0x2e,0x30, - 0x2f,0x6d,0x6d,0x2f,0x22,0x20,0x78,0x6d,0x6c,0x6e, - 0x73,0x3a,0x73,0x74,0x52,0x65,0x66,0x3d,0x22,0x68, - 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61, - 0x64,0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78, - 0x61,0x70,0x2f,0x31,0x2e,0x30,0x2f,0x73,0x54,0x79, - 0x70,0x65,0x2f,0x52,0x65,0x73,0x6f,0x75,0x72,0x63, - 0x65,0x52,0x65,0x66,0x23,0x22,0x20,0x78,0x6d,0x6c, - 0x6e,0x73,0x3a,0x78,0x6d,0x70,0x3d,0x22,0x68,0x74, - 0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64, - 0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x78,0x61, - 0x70,0x2f,0x31,0x2e,0x30,0x2f,0x22,0x20,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x4f,0x72,0x69,0x67,0x69,0x6e, - 0x61,0x6c,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x45,0x39,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x44,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x33,0x42,0x37,0x42,0x36,0x33,0x37,0x36, - 0x39,0x44,0x38,0x38,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x4d, - 0x4d,0x3a,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x39,0x38,0x44,0x38,0x30,0x39,0x45,0x34, - 0x39,0x44,0x38,0x37,0x31,0x31,0x45,0x33,0x41,0x39, - 0x31,0x44,0x42,0x44,0x46,0x44,0x34,0x30,0x39,0x39, - 0x32,0x45,0x45,0x33,0x22,0x20,0x78,0x6d,0x70,0x3a, - 0x43,0x72,0x65,0x61,0x74,0x6f,0x72,0x54,0x6f,0x6f, - 0x6c,0x3d,0x22,0x41,0x64,0x6f,0x62,0x65,0x20,0x50, - 0x68,0x6f,0x74,0x6f,0x73,0x68,0x6f,0x70,0x20,0x43, - 0x53,0x36,0x20,0x28,0x4d,0x61,0x63,0x69,0x6e,0x74, - 0x6f,0x73,0x68,0x29,0x22,0x3e,0x20,0x3c,0x78,0x6d, - 0x70,0x4d,0x4d,0x3a,0x44,0x65,0x72,0x69,0x76,0x65, - 0x64,0x46,0x72,0x6f,0x6d,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x69,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x69,0x69, - 0x64,0x3a,0x45,0x39,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x20,0x73,0x74,0x52,0x65, - 0x66,0x3a,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74, - 0x49,0x44,0x3d,0x22,0x78,0x6d,0x70,0x2e,0x64,0x69, - 0x64,0x3a,0x45,0x39,0x31,0x35,0x37,0x37,0x33,0x42, - 0x31,0x31,0x32,0x30,0x36,0x38,0x31,0x31,0x38,0x30, - 0x38,0x33,0x43,0x37,0x45,0x33,0x31,0x45,0x41,0x35, - 0x41,0x37,0x35,0x33,0x22,0x2f,0x3e,0x20,0x3c,0x2f, - 0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69, - 0x70,0x74,0x69,0x6f,0x6e,0x3e,0x20,0x3c,0x2f,0x72, - 0x64,0x66,0x3a,0x52,0x44,0x46,0x3e,0x20,0x3c,0x2f, - 0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x3e, - 0x20,0x3c,0x3f,0x78,0x70,0x61,0x63,0x6b,0x65,0x74, - 0x20,0x65,0x6e,0x64,0x3d,0x22,0x72,0x22,0x3f,0x3e, - 0x18,0xec,0x12,0x45,0x00,0x00,0x01,0x29,0x49,0x44, - 0x41,0x54,0x78,0xda,0xec,0x9a,0x41,0x6a,0x02,0x31, - 0x18,0x85,0x7f,0x43,0xc0,0xad,0xd1,0x13,0x98,0x55, - 0xb1,0x17,0xa8,0x7b,0x6f,0xe0,0x62,0x4e,0xa0,0x14, - 0x7a,0xa1,0x62,0x6f,0x20,0x78,0x0d,0xa7,0xeb,0x2e, - 0xa4,0xba,0x88,0x37,0x98,0xb8,0x55,0xa6,0x33,0xfd, - 0x5f,0x49,0xc1,0x45,0x0f,0x90,0xd0,0xf7,0xe0,0x41, - 0x60,0x36,0xdf,0x97,0x64,0x56,0xf9,0x07,0x7d,0xdf, - 0x4b,0xfd,0x5e,0x1b,0x11,0x79,0xd6,0xae,0xb5,0x0f, - 0xda,0xa1,0xe4,0x99,0xab,0xf6,0x53,0xbb,0xd1,0xbe, - 0xce,0x9f,0xe6,0xdd,0x60,0x5f,0xef,0x01,0xbf,0xd5, - 0x2e,0xa5,0xac,0xec,0xb4,0x95,0x4d,0xbb,0xbe,0xb4, - 0xd6,0x8a,0xf7,0x5e,0xdc,0xc8,0x89,0x31,0x26,0x4b, - 0xe2,0xae,0xeb,0x24,0x5e,0xa2,0x84,0x10,0xa4,0x6d, - 0x5b,0x6c,0xf8,0x0a,0xa4,0x2b,0x7c,0xf4,0x53,0x2f, - 0x93,0xf1,0x24,0x5b,0x78,0x04,0x6c,0x60,0x04,0x6b, - 0xca,0x1a,0xb4,0x8f,0x58,0x39,0xe7,0x8a,0xb9,0x3b, - 0x77,0xac,0x33,0xf3,0xfb,0xc3,0xe6,0xbc,0xf3,0x7f, - 0x9d,0x44,0xca,0xd0,0x48,0xe1,0xa1,0x00,0x05,0x28, - 0x40,0x01,0x0a,0x50,0x80,0x02,0x14,0xa0,0x00,0x05, - 0x28,0x40,0x01,0x0a,0x50,0x80,0x02,0x14,0xa0,0x00, - 0x05,0x28,0x40,0x01,0x0a,0x50,0x80,0x02,0x14,0xa0, - 0x00,0x05,0xfe,0xa3,0x00,0x9e,0xef,0x7f,0x1e,0x91, - 0x4b,0xc9,0x1d,0xeb,0x15,0x02,0x07,0xac,0x62,0x8c, - 0xc5,0x08,0xe0,0xb5,0x3e,0xe5,0x00,0x01,0x0c,0x4e, - 0x48,0x38,0x07,0x69,0x9a,0x46,0x30,0xfc,0x91,0x6b, - 0xc0,0x06,0x46,0x8c,0x1a,0xa4,0x6c,0x6c,0x12,0x58, - 0x60,0xf6,0xe0,0x78,0x3a,0x96,0x74,0xfd,0x31,0xec, - 0xf1,0x66,0x30,0xb2,0xa2,0x8b,0x4a,0xfb,0xa2,0xfd, - 0xd0,0xde,0x32,0x86,0xbe,0x25,0x46,0xb0,0x56,0xca, - 0xfe,0xf5,0x2d,0xc0,0x00,0x3b,0xe6,0x51,0x95,0x79, - 0xeb,0x7d,0x04,0x00,0x00,0x00,0x00,0x49,0x45,0x4e, - 0x44,0xae,0x42,0x60,0x82 -}; - diff --git a/data/converted/window_icon_256_png.cpp b/data/converted/window_icon_256_png.cpp deleted file mode 100644 index f102f29385..0000000000 --- a/data/converted/window_icon_256_png.cpp +++ /dev/null @@ -1,495 +0,0 @@ -// this file was auto-generated from "window_icon_256.png" by res2h - -#include "../Resources.h" - -const uint16_t window_icon_256_png_size = 4870; -const uint8_t window_icon_256_png_data[4870] = { - 0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00, - 0x00,0x0d,0x49,0x48,0x44,0x52,0x00,0x00,0x01,0x00, - 0x00,0x00,0x01,0x00,0x08,0x06,0x00,0x00,0x00,0x5c, - 0x72,0xa8,0x66,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,0x12,0xa8,0x49,0x44,0x41,0x54,0x78,0xda, - 0xec,0x9d,0x09,0x78,0x14,0x55,0xba,0x40,0xff,0xce, - 0x46,0x20,0x04,0xc3,0x16,0xf6,0x00,0x51,0x10,0xd9, - 0x41,0x04,0x05,0x64,0x95,0xcd,0x05,0x14,0x14,0x45, - 0x19,0xc5,0xe1,0x9b,0x0c,0x38,0xe8,0x73,0x26,0xcf, - 0x65,0x06,0x1e,0x22,0x2e,0xe3,0x8c,0xa2,0x8c,0x0f, - 0x41,0xd4,0x11,0x44,0x05,0x9e,0x28,0xca,0x22,0x82, - 0x02,0x61,0x49,0xd8,0x44,0x96,0x04,0x10,0x88,0x42, - 0x08,0x61,0x09,0x04,0xb2,0xef,0x49,0x67,0xaa,0x9a, - 0x38,0x83,0x79,0x0a,0xdd,0xd0,0x75,0xbb,0xab,0xea, - 0x1c,0xbf,0x8a,0x22,0xdf,0x97,0x9b,0x5a,0xce,0xe9, - 0xaa,0x4e,0x72,0xaf,0xa3,0xa2,0xa2,0x42,0x00,0xc0, - 0x9e,0x38,0x08,0x00,0x00,0x01,0x00,0x00,0x02,0x00, - 0x00,0x04,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00, - 0x20,0x00,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x00, - 0x01,0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x08, - 0x00,0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x40,0x00, - 0x00,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00, - 0x00,0x04,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00, - 0x20,0x00,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x00, - 0x01,0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x08, - 0x00,0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x40,0x00, - 0x00,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00, - 0x00,0x04,0x00,0x00,0x08,0x00,0x80,0xed,0x03,0xa0, - 0x74,0xb4,0xe1,0xb1,0x4d,0xb5,0x8f,0x77,0x68,0xdb, - 0x40,0x6d,0xeb,0xac,0x6d,0x51,0xda,0x56,0x8d,0xd3, - 0x00,0x60,0x28,0x4e,0x6d,0x4b,0xd5,0xb6,0x35,0xda, - 0x36,0x43,0x96,0xcf,0x48,0x56,0x17,0x80,0xe1,0xb1, - 0xfa,0x18,0x77,0x6a,0xdb,0x13,0x95,0xe2,0x3b,0x38, - 0x1f,0x00,0x3e,0xa3,0x5c,0xdb,0x9e,0xd6,0x22,0xf0, - 0xba,0xf1,0x01,0x18,0x1e,0x3b,0xc8,0x55,0x1c,0x91, - 0x0e,0x1c,0x77,0x00,0xbf,0x22,0x56,0x8f,0x80,0xc3, - 0x20,0xf1,0xc3,0xb5,0x8f,0x6f,0x6a,0xdb,0x38,0x8e, - 0x33,0x80,0xdf,0xde,0x09,0xb4,0x75,0x18,0x20,0x7f, - 0x13,0xed,0xe3,0x97,0xda,0xd6,0x89,0x63,0x0c,0xe0, - 0xd7,0xcc,0x75,0x78,0x59,0x7e,0xfd,0x4d,0xbe,0x0d, - 0xda,0x76,0x2d,0xc7,0x16,0xc0,0xef,0x49,0x71,0x20, - 0x3f,0x80,0x6d,0x71,0x3a,0x90,0x1f,0xc0,0xbe,0x38, - 0x90,0x1f,0x80,0x00,0x20,0x3f,0x00,0x01,0x40,0x7e, - 0x00,0x02,0x80,0xfc,0x00,0x04,0x00,0xf9,0x01,0x08, - 0x00,0xf2,0x03,0xd8,0x3e,0x00,0xc8,0x0f,0x60,0xd3, - 0x00,0x20,0x3f,0x80,0x4d,0x03,0x80,0xfc,0x00,0x36, - 0x0d,0x00,0xf2,0x03,0xd8,0x34,0x00,0xc8,0x0f,0x60, - 0xd3,0x00,0x20,0x3f,0x80,0x4d,0x03,0x80,0xfc,0x00, - 0x36,0x0d,0xc0,0xf0,0xd8,0x5a,0xda,0xc7,0x04,0x6d, - 0x6b,0xcf,0xa1,0x01,0xb0,0x3e,0x01,0x55,0xfe,0x3c, - 0x0b,0xf9,0x01,0xec,0x78,0x07,0x30,0x3c,0x76,0x88, - 0xf6,0x71,0x35,0x87,0x04,0xc0,0x6e,0x01,0x18,0x1e, - 0xab,0xdf,0x09,0x24,0x6a,0x5b,0x3b,0x0e,0x09,0x80, - 0x7d,0x08,0xfa,0xe9,0xf5,0xdf,0x6a,0xf2,0x07,0x38, - 0x1c,0xd2,0xa6,0x49,0x3d,0x69,0x17,0xd5,0x50,0xea, - 0xd7,0x0a,0x93,0x90,0xa0,0x40,0xdb,0x9e,0xe4,0xb2, - 0x72,0xa7,0x9c,0xcc,0xcc,0x91,0xf5,0x49,0x47,0x24, - 0x2b,0xbf,0xd0,0xe7,0x5f,0x4f,0xa4,0x76,0x3e,0x3a, - 0xb5,0x68,0x24,0xcd,0x23,0x23,0xa4,0x66,0xa8,0xbd, - 0xd7,0x85,0xd1,0xcf,0xc7,0xb7,0x3f,0xa4,0xc9,0xfe, - 0xe3,0x67,0x7c,0x1a,0x80,0x27,0xac,0x70,0x30,0x83, - 0x03,0x03,0x65,0x68,0xa7,0x68,0x19,0xd3,0xa7,0x8b, - 0x0c,0xe9,0xd6,0x4e,0xea,0x84,0x87,0x91,0xf8,0x8b, - 0xc8,0xd1,0x2e,0xb6,0x51,0x7f,0x9d,0x27,0x6b,0xb5, - 0x10,0xa8,0xe6,0xfa,0x46,0x75,0xe4,0x91,0x7e,0x5d, - 0xe5,0xce,0xee,0xed,0xa5,0x43,0x74,0x53,0x4e,0x46, - 0x15,0xde,0x5d,0xb5,0x59,0x62,0xe6,0x2e,0xf3,0xc1, - 0x23,0xc0,0xf0,0xd8,0x66,0xda,0xbf,0x8f,0x89,0x89, - 0x57,0xec,0xa9,0x1e,0x1c,0x24,0x13,0x07,0xdf,0x24, - 0x7f,0xbc,0xa7,0xbf,0x34,0xad,0x5f,0x87,0xab,0xe9, - 0x12,0x2c,0xd9,0xbc,0x4b,0x46,0xbf,0xb6,0x50,0xd9, - 0x78,0x7d,0xda,0x44,0xc9,0xe4,0xfb,0x06,0xca,0xe0, - 0x6e,0x3c,0x5d,0x5e,0x8e,0x3a,0x0f,0x4e,0x91,0xcc, - 0xfc,0x22,0xe5,0x77,0x00,0x77,0x9a,0x59,0xfe,0x7b, - 0x6e,0x6a,0x23,0x33,0x63,0xee,0x91,0xa8,0xc8,0xba, - 0x5c,0x41,0x6e,0x70,0x28,0x4d,0xcd,0xad,0x66,0x93, - 0x3a,0xe1,0xf2,0xd6,0xef,0x46,0xc8,0x88,0x9e,0x9d, - 0x39,0xe8,0x6e,0x70,0xfa,0x7c,0xb6,0x64,0x17,0x14, - 0xfb,0xe4,0x11,0x60,0x80,0x19,0x0f,0x98,0xfe,0x4c, - 0x3f,0xfb,0x77,0x77,0xc9,0xf8,0xa1,0xbd,0xb9,0x7a, - 0xdc,0xe4,0xe4,0xb9,0x2c,0x99,0xb9,0x72,0x8b,0xe1, - 0xe3,0xdc,0xd5,0xb5,0x95,0x2c,0x88,0xfd,0x8d,0x44, - 0xd4,0xac,0xc1,0x41,0x77,0x93,0x67,0xde,0x5f,0x2e, - 0x4e,0x1f,0xac,0xd4,0xad,0x07,0xa0,0x8b,0xd9,0x0e, - 0x56,0x8d,0x90,0x60,0x59,0xfe,0xe7,0x87,0x65,0x60, - 0xd7,0x1b,0xb8,0x72,0x3c,0x78,0xfe,0xbf,0x73,0xfa, - 0xbb,0x72,0x2e,0xaf,0xc0,0xd0,0x71,0x62,0x06,0xde, - 0x28,0x73,0x26,0x3d,0x20,0x01,0x01,0xac,0x01,0xeb, - 0x2e,0x2f,0x2f,0xfa,0x4a,0x16,0x6c,0xde,0xeb,0x93, - 0xb1,0xf5,0x00,0x34,0x33,0x9b,0xfc,0x2b,0x27,0x3f, - 0x22,0xfd,0x3b,0xb7,0xe1,0xca,0xf1,0x40,0xfe,0xc1, - 0x53,0xe7,0xc8,0xee,0x94,0x74,0x43,0xc7,0x99,0x38, - 0xa8,0x9b,0xcc,0xd6,0xe4,0x07,0xf7,0xf9,0xdb,0x27, - 0x6b,0x64,0xf2,0xe2,0x75,0x3e,0x1b,0x5f,0xff,0xfe, - 0x7f,0x08,0xf2,0x5b,0x5f,0xfe,0xed,0x3f,0x9c,0x44, - 0x7e,0x3f,0x94,0xff,0xd9,0x8f,0xbf,0xf1,0xe9,0xd7, - 0x10,0x80,0xfc,0xc8,0x8f,0xfc,0xf6,0x94,0xdf,0x34, - 0x01,0x40,0x7e,0xe4,0x47,0x7e,0x9b,0x06,0x00,0xf9, - 0x91,0x1f,0xf9,0x6d,0x1a,0x00,0xe4,0x47,0x7e,0xe4, - 0xb7,0x69,0x00,0x90,0x1f,0xf9,0x91,0xdf,0xa6,0x01, - 0x40,0x7e,0xe4,0x47,0x7e,0x9b,0x06,0x00,0xf9,0x91, - 0x1f,0xf9,0x6d,0x1a,0x00,0xe4,0x47,0x7e,0xe4,0x57, - 0x4b,0x10,0xf2,0x9b,0x97,0x8c,0xec,0x5c,0xb9,0x6d, - 0xca,0x1c,0xd9,0x9b,0x7a,0x06,0xf9,0x91,0xdf,0xbc, - 0x01,0x40,0xfe,0x2b,0x93,0x7f,0xc0,0xe4,0xd9,0x92, - 0x74,0xfc,0x2c,0xf2,0x23,0xbf,0x79,0x1f,0x01,0x90, - 0x1f,0xf9,0x91,0xdf,0xa6,0x01,0x40,0x7e,0xe4,0x47, - 0x7e,0x9b,0x06,0x00,0xf9,0x91,0x1f,0xf9,0x6d,0xfa, - 0x1e,0x40,0x48,0x60,0x00,0xf2,0x7b,0x88,0x3e,0x63, - 0xcc,0xe0,0xa9,0x6f,0x1b,0x2e,0xff,0xa3,0xfd,0x3a, - 0x23,0xbf,0x87,0x3c,0xb7,0x60,0x85,0x4c,0xff,0x6c, - 0xa3,0x29,0xbf,0x76,0xf5,0x01,0xa8,0xa8,0x90,0xb9, - 0xbf,0x1f,0x81,0xfc,0x1e,0x10,0x9f,0x74,0x58,0x1e, - 0x9c,0xb1,0x50,0x8e,0x67,0xe6,0x19,0x3a,0xce,0xad, - 0xad,0x9b,0xc8,0xdc,0xc7,0xc7,0x70,0xc0,0xdd,0x24, - 0x3b,0xbf,0x40,0x26,0xbc,0xb9,0x50,0x16,0x6f,0x3b, - 0x68,0xda,0x7d,0x08,0x52,0x2d,0xff,0xc8,0xae,0xd1, - 0x32,0x6e,0x48,0x2f,0xae,0x1e,0x37,0x38,0x97,0x93, - 0x27,0xcf,0xcd,0xfb,0x5c,0xde,0x5e,0xb7,0x5b,0xca, - 0x1d,0xc6,0x3e,0xad,0xd5,0x0c,0x74,0xba,0xa6,0xf1, - 0x0a,0xb6,0xf1,0xf4,0xe9,0x9e,0xb0,0x70,0xed,0x16, - 0x79,0x66,0xde,0x0a,0x49,0xcb,0x2b,0x35,0xf5,0x7e, - 0x04,0xa9,0x94,0xbf,0x7a,0x59,0x81,0xcc,0x7c,0x8c, - 0xdb,0xcb,0xcb,0x71,0x2c,0x3d,0x43,0xde,0xfa,0x7c, - 0xad,0xcc,0x5d,0xb1,0x41,0x72,0x1c,0xa1,0x22,0x81, - 0x06,0x9f,0xa6,0x92,0x42,0x79,0xf6,0xc1,0xc1,0xd2, - 0xa2,0x61,0x3d,0x0e,0xfe,0x25,0x28,0x2e,0x2d,0x93, - 0x25,0x71,0xdb,0xe5,0xd5,0xc5,0x5f,0x4a,0xe2,0x89, - 0xf3,0x22,0xa1,0x35,0x4d,0xbf,0x4f,0x41,0xaa,0xe4, - 0x97,0xfc,0x2c,0x99,0x38,0x72,0xa0,0x34,0x63,0xf6, - 0xde,0xff,0x47,0x59,0x79,0xb9,0xec,0x3f,0x7a,0x42, - 0xd6,0xef,0x3a,0x20,0xcb,0x13,0x76,0xc9,0xa6,0xc4, - 0x83,0xe2,0xd4,0x27,0x6a,0x0e,0xab,0xad,0x44,0xfe, - 0x7a,0xc1,0x15,0x12,0x7b,0xff,0xed,0x9c,0x88,0x5f, - 0xe0,0x44,0x46,0xa6,0x6c,0xdd,0x97,0x2c,0xab,0xb6, - 0xed,0x95,0xcf,0x37,0xef,0x94,0x2c,0x7d,0x4e,0xc5, - 0xd0,0x30,0x4b,0xc8,0xaf,0x26,0x00,0x95,0xf2,0x07, - 0x4b,0xb9,0xfc,0x71,0xf4,0x50,0xa5,0x3b,0xb7,0x7a, - 0x47,0xa2,0x7c,0xbe,0x69,0xa7,0x1c,0x4c,0x3d,0xe5, - 0xfa,0x91,0x59,0x7f,0xa3,0x42,0xfb,0x27,0x33,0x37, - 0x5f,0x4e,0x9d,0xcb,0x92,0xd2,0xb2,0xf2,0xff,0xfc, - 0x45,0x40,0x80,0x32,0xf9,0xa5,0x20,0x47,0x26,0x3d, - 0x3a,0x52,0x42,0x43,0x82,0x95,0xed,0x77,0x6a,0xfa, - 0x39,0xf9,0xf0,0xeb,0x78,0x49,0x48,0x4a,0x96,0xf4, - 0xcc,0x6c,0x71,0x3a,0x2b,0xfc,0xee,0xdc,0x14,0x14, - 0x17,0xcb,0xd9,0xac,0x5c,0xd7,0xf9,0xf9,0x19,0x16, - 0x92,0xdf,0xf8,0x00,0x54,0xca,0x2f,0x65,0x25,0x32, - 0xa4,0x67,0x17,0x65,0x8b,0x76,0xe8,0xd5,0x1e,0xf3, - 0xfc,0x5b,0xb2,0x39,0xf1,0x90,0xf9,0xce,0x88,0x62, - 0xf9,0xf5,0xd9,0x7b,0xc7,0xdf,0xd1,0x57,0xd9,0xee, - 0xbd,0xf0,0xc1,0x17,0xf2,0xd2,0x87,0xcb,0x5c,0xb7, - 0xd3,0xa6,0xc3,0x62,0xf2,0x1b,0x1b,0x00,0x97,0xfc, - 0x99,0x9a,0xfc,0x17,0xde,0x24,0x79,0xf0,0xb6,0x5b, - 0x94,0xec,0xd0,0x49,0x4d,0xfe,0x9b,0x27,0x4c,0x93, - 0xb4,0xb3,0xe7,0x91,0xff,0x32,0xf2,0xeb,0xf4,0xee, - 0x70,0xbd,0xb2,0x30,0x4f,0x98,0x31,0x4f,0xe6,0x2e, - 0x5f,0x6f,0x4e,0x53,0x2c,0x28,0xbf,0xeb,0x92,0x53, - 0x21,0xbf,0xfe,0x2a,0x33,0xf8,0xa6,0x0e,0x4a,0x76, - 0x68,0xec,0x8b,0x6f,0x23,0xbf,0x9b,0xf2,0xeb,0x0c, - 0xed,0xde,0x51,0xc9,0xee,0x2d,0x5e,0xb7,0x0d,0xf9, - 0x6d,0x11,0x80,0x2a,0xf2,0xeb,0xb4,0x6a,0xda,0x50, - 0xea,0xd6,0x32,0xfe,0x00,0x6e,0xdc,0x73,0x50,0xe2, - 0x76,0x1f,0x40,0x7e,0x37,0xe5,0xd7,0xb9,0xa5,0xfd, - 0x75,0x4a,0x76,0x71,0xda,0xfc,0xa5,0xc8,0x6f,0xf9, - 0x00,0xfc,0x82,0xfc,0x3a,0xed,0x5a,0x34,0x51,0xb2, - 0x33,0xfa,0xbb,0xb4,0xc8,0xef,0xbe,0xfc,0x3a,0x6d, - 0x9b,0x1b,0x7f,0x6e,0x0e,0xa4,0x9c,0x90,0x43,0xa9, - 0xa7,0x90,0xdf,0xd2,0x01,0xf8,0x15,0xf9,0x75,0xea, - 0x47,0xd4,0x52,0xb2,0x33,0x87,0x8f,0x9f,0x46,0x7e, - 0x0f,0xe4,0xbf,0x70,0x6e,0xc2,0x0d,0xdf,0xcd,0xe4, - 0xb4,0x74,0xe4,0xb7,0x74,0x00,0x2e,0x21,0xbf,0x4e, - 0xf5,0x6a,0x6a,0x16,0x1f,0x2a,0x2c,0x2e,0x41,0x7e, - 0x0f,0xe4,0xd7,0x71,0x38,0x8c,0x5f,0xc3,0x2f,0x2b, - 0x2f,0x1f,0xf9,0x2d,0x1b,0x80,0xcb,0xc8,0x0f,0xfe, - 0x2b,0x3f,0xd8,0x5b,0xfe,0xab,0x0f,0x00,0xf2,0x23, - 0x3f,0xf2,0xdb,0x34,0x00,0xc8,0x8f,0xfc,0xc8,0x6f, - 0xd3,0x00,0x20,0x3f,0xf2,0x23,0xbf,0x4d,0x03,0x80, - 0xfc,0xc8,0x8f,0xfc,0x36,0x0d,0x00,0xf2,0x23,0x3f, - 0xf2,0x5b,0x8a,0x20,0xe4,0x47,0x7e,0x5b,0x52,0x5d, - 0x13,0xbf,0x5a,0x18,0x97,0x28,0xf2,0x23,0x3f,0xf2, - 0x13,0x00,0xe4,0x47,0x7e,0xe4,0x27,0x00,0xc8,0x8f, - 0xfc,0xc8,0x4f,0x00,0x90,0x1f,0xf9,0x91,0xdf,0xc6, - 0x01,0x30,0xa9,0xfc,0x61,0xd5,0xab,0x21,0xbf,0x87, - 0xfc,0x6c,0x2a,0x32,0x83,0xa8,0x77,0x4d,0x38,0xf2, - 0x9b,0x26,0x00,0x26,0x7e,0xe5,0x6f,0xdf,0xb2,0x29, - 0xf2,0x7b,0x88,0x3e,0x27,0x9f,0xd1,0xdc,0xd0,0xbc, - 0x31,0xf2,0x9b,0x22,0x00,0x26,0xbf,0xed,0x1f,0xdd, - 0xbf,0x07,0xf2,0x7b,0x48,0xd2,0x91,0xe3,0x86,0x1f, - 0xa2,0xe8,0xc6,0x91,0xd2,0xed,0xfa,0x96,0xc8,0xef, - 0xd7,0x01,0xb0,0xc0,0x33,0x7f,0xd7,0xd6,0x2d,0xe4, - 0xde,0x7e,0xdd,0x91,0xdf,0x03,0xf4,0x99,0x79,0x55, - 0xf0,0x72,0xcc,0x68,0x25,0xbf,0x7a,0x8c,0xfc,0x57, - 0x12,0x80,0x7f,0xcf,0xde,0x6b,0xfe,0x37,0xfc,0xde, - 0x7b,0x7a,0xbc,0x74,0x88,0x6e,0x86,0xfc,0x6e,0xb2, - 0x6a,0xdb,0x1e,0x25,0xe7,0x65,0x50,0xb7,0xf6,0x32, - 0xfd,0xb7,0xa3,0x90,0xdf,0x2f,0x03,0x50,0x39,0x75, - 0xb7,0x15,0xb8,0x26,0xac,0x86,0xc4,0xcf,0xfa,0x1f, - 0x79,0x68,0x50,0x4f,0xe3,0x5e,0x71,0x2c,0xf4,0x6e, - 0xff,0xee,0xe4,0x63,0xf2,0xfd,0xb1,0x93,0x4a,0xce, - 0xcd,0x94,0x87,0x47,0xc8,0xfc,0x3f,0xc7,0x18,0xfb, - 0xa6,0x20,0xf2,0x7b,0x84,0x43,0x06,0x8e,0xaf,0x90, - 0xd2,0x62,0x43,0x07,0x79,0xf2,0xbe,0xa1,0xf2,0xc6, - 0xa4,0x87,0x94,0xef,0x9c,0x7e,0x61,0x2f,0xdd,0xf4, - 0xad,0x6b,0x61,0x90,0xbc,0xc2,0x22,0xef,0x7d,0xe2, - 0xe0,0x50,0x2d,0x02,0x57,0xbf,0x86,0x5e,0x59,0xb9, - 0x53,0xd2,0xb3,0xf3,0x64,0xdf,0xf1,0xb3,0x52,0x58, - 0x75,0x9e,0x7c,0x85,0xdf,0xea,0xfb,0xaf,0x7b,0x87, - 0xc8,0xcc,0xc7,0xc7,0x2a,0x3b,0x2f,0xfa,0x22,0x2d, - 0xcb,0x12,0x76,0x69,0x8f,0x1f,0x87,0xe5,0x4c,0x66, - 0x8e,0x6b,0x81,0x14,0xef,0x84,0x59,0x0b,0x72,0xb0, - 0x77,0xbe,0x13,0x54,0x50,0x52,0x2a,0x67,0x73,0xf2, - 0xe5,0xfb,0x13,0x19,0x52,0x54,0x5a,0x6e,0xe1,0x00, - 0xf4,0x19,0x6b,0xf8,0xb2,0x2c,0xbe,0x0a,0x80,0x59, - 0xc8,0x2f,0x2a,0x96,0xc5,0x1b,0xbe,0x95,0xa9,0x8b, - 0xd7,0xca,0x49,0x7d,0x05,0xe0,0xe2,0x02,0x91,0xc2, - 0x5c,0x65,0xe3,0xd7,0xac,0x1e,0x2a,0x29,0x9f,0xbc, - 0xa1,0x64,0xe6,0x66,0xb3,0x51,0xee,0x74,0x6a,0x77, - 0x49,0xa9,0xf2,0xd5,0xce,0xfd,0xb2,0x28,0x21,0x51, - 0x0b,0xc2,0x39,0x4b,0xed,0x5f,0xa0,0x34,0xef,0x38, - 0xcd,0xe8,0x41,0x6e,0x6e,0x77,0x9d,0xb2,0xf9,0xe7, - 0xcd,0x48,0x48,0x50,0x90,0x74,0xbd,0x2e,0x4a,0x1e, - 0xee,0x77,0xa3,0x24,0xec,0x3d,0x20,0xc7,0x8f,0xa7, - 0x29,0x1d,0xbf,0xa4,0xac,0x4c,0x8a,0xb4,0x57,0xbc, - 0x61,0x3d,0x3a,0x71,0x32,0xaa,0xde,0x54,0x68,0x8f, - 0x91,0x8d,0xeb,0x45,0x48,0xdf,0x8e,0xad,0xe5,0x0f, - 0x77,0xdc,0x2a,0x83,0x3a,0xb4,0x94,0x8c,0xec,0x5c, - 0x39,0x7c,0xfa,0xbc,0x35,0xf6,0x8f,0x53,0xec,0x3f, - 0xe8,0x33,0xf4,0xae,0x98,0xfe,0x98,0xb4,0x6c,0xa4, - 0x7e,0x95,0xde,0x39,0xcb,0xd6,0xb9,0xde,0x0f,0x80, - 0x4b,0xd3,0xab,0x7d,0x2b,0x59,0x36,0x35,0x46,0xe2, - 0x5f,0xfa,0xbd,0x74,0x6d,0xd1,0x80,0x00,0x80,0x77, - 0xa9,0x53,0x2b,0x5c,0x5e,0x9d,0x70,0xbf,0xf2,0x71, - 0xf5,0x9f,0x08,0x1c,0xfb,0xe2,0x1c,0xc9,0x2d,0x28, - 0xe2,0x24,0xb8,0x41,0x4f,0xed,0xae,0x76,0xfb,0xeb, - 0x7f,0x92,0x67,0xef,0xee,0xad,0xf6,0xdb,0x9b,0x04, - 0xc0,0xfa,0x8c,0xec,0xdb,0x43,0x22,0x6b,0xd7,0x52, - 0x3e,0xae,0xbe,0x80,0xc7,0x7d,0xcf,0xbd,0xa9,0xe4, - 0xc7,0x83,0xad,0x40,0x50,0x60,0xa0,0xfc,0xf5,0xd1, - 0xbb,0xe5,0xfd,0xc7,0xee,0x91,0xc0,0x80,0x00,0x02, - 0x00,0xde,0x41,0x7f,0x45,0xe9,0xdd,0xa1,0xb5,0x4f, - 0xc6,0x5e,0xb3,0x23,0x49,0xee,0x9d,0x4a,0x04,0x3c, - 0x61,0xdc,0xe0,0x9e,0xb2,0xe0,0xf1,0x51,0xa6,0x8c, - 0x00,0x01,0xf0,0x53,0x1a,0xd5,0x8d,0xf0,0xd9,0xd8, - 0xcb,0x13,0x76,0x11,0x01,0x0f,0x79,0x70,0x40,0x0f, - 0x53,0x46,0x80,0x00,0xf8,0x29,0xc1,0x41,0x41,0x3e, - 0x1d,0x9f,0x08,0xd8,0x23,0x02,0x04,0x00,0x88,0x80, - 0x8d,0x23,0x40,0x00,0x80,0x08,0xd8,0x38,0x02,0x04, - 0x00,0x88,0x80,0x8d,0x23,0x40,0x00,0x80,0x08,0xd8, - 0x38,0x02,0x04,0x00,0x88,0x80,0x8d,0x23,0x40,0x00, - 0x80,0x08,0xd8,0x38,0x02,0x04,0x00,0x88,0x80,0x8d, - 0x23,0x40,0x00,0x80,0x08,0xd8,0x38,0x02,0x04,0x00, - 0x88,0x80,0x8d,0x23,0x40,0x00,0x80,0x08,0xd8,0x38, - 0x02,0x04,0xc0,0x4f,0x29,0x2d,0x2b,0x23,0x02,0x44, - 0x80,0x00,0xd8,0x95,0xd3,0xe7,0xb3,0x4d,0xf5,0xf5, - 0x12,0x01,0x73,0x46,0x80,0x00,0xf8,0x21,0x15,0x15, - 0x15,0x12,0x9f,0x78,0xd8,0x94,0x8f,0x03,0x77,0x4f, - 0x7e,0x43,0x0a,0x8a,0x4a,0x38,0x89,0x1e,0x44,0x60, - 0xfe,0xa4,0x91,0x3e,0x9b,0x54,0x84,0x00,0xf8,0x21, - 0x5f,0xc4,0x7f,0xa7,0x64,0xc9,0x2e,0x23,0x58,0xb5, - 0x6d,0xaf,0xf4,0x79,0xe2,0x45,0x39,0x72,0xf2,0x0c, - 0x27,0xd2,0x4d,0xc6,0x0e,0xbc,0x59,0xa6,0x8f,0xee, - 0x4f,0x00,0x40,0x24,0x2b,0x2f,0x5f,0x9e,0x9a,0xbd, - 0xc8,0xd4,0xfb,0xf0,0xdd,0xa1,0xa3,0xd2,0xe9,0xb7, - 0x93,0xe5,0x1f,0x9f,0xae,0xe1,0x91,0xc0,0x4d,0xfe, - 0xf2,0xc0,0x30,0xe9,0xd3,0x26,0x8a,0x00,0xd8,0x99, - 0xf3,0x39,0xb9,0x72,0xd7,0xb3,0xaf,0xcb,0x8f,0x16, - 0x78,0xf5,0xd4,0xd7,0x61,0x78,0xf2,0x7f,0x3f,0x92, - 0xb6,0x0f,0x3f,0x23,0xef,0xac,0x88,0x93,0xc2,0x62, - 0x1e,0x0b,0x2e,0x29,0x62,0x80,0x43,0xde,0x9a,0x30, - 0x4a,0x82,0x02,0xd5,0x2a,0xc9,0xb4,0xe0,0x7e,0x40, - 0x51,0x49,0x89,0x7c,0xfc,0xd5,0x06,0x19,0x3d,0xf5, - 0x4d,0xd9,0x77,0xec,0x94,0xb5,0xa2,0x96,0x9b,0x2f, - 0x2b,0xb7,0xec,0x96,0x59,0x4b,0xd7,0x6a,0x8f,0x05, - 0x67,0xf5,0x95,0x28,0xa4,0x49,0xbd,0xda,0x12,0x12, - 0x1c,0xc4,0x89,0xaf,0x82,0x3e,0x0f,0x64,0xca,0xc9, - 0x74,0xd9,0x93,0x72,0x5a,0xd9,0x98,0x96,0x3e,0x0b, - 0xc9,0x69,0xa7,0x65,0xe9,0xa6,0x9d,0x72,0xf8,0xf8, - 0x69,0xed,0x42,0xcc,0xf3,0xce,0x27,0xd5,0x97,0x50, - 0x2b,0xf5,0xce,0xab,0x99,0xbe,0x22,0xce,0x99,0xf3, - 0x59,0x92,0x98,0x9c,0x22,0xf9,0x15,0xda,0xa9,0x08, - 0x0a,0xb1,0xec,0xb9,0xc8,0xce,0x2f,0x90,0x77,0x57, - 0xc6,0xb9,0x36,0xfd,0xd5,0x2e,0xba,0x51,0xa4,0x34, - 0x6f,0x58,0x4f,0xc2,0x6b,0x84,0x9a,0x6a,0x3f,0xf4, - 0x25,0xe8,0x5f,0x18,0x7f,0xaf,0x61,0x9f,0xff,0xe9, - 0x51,0x03,0x65,0xfe,0xc6,0xbd,0xae,0x37,0x82,0x09, - 0xc0,0x55,0xdc,0x7e,0x4e,0x9a,0xb9,0x40,0x3e,0xfc, - 0x3a,0x5e,0x9c,0x4e,0x2f,0x1e,0xc8,0xd2,0x42,0x91, - 0xe2,0x42,0xef,0x7f,0xc1,0xa1,0x35,0x2d,0x2d,0x7f, - 0x55,0xf4,0x73,0xf2,0xc3,0x89,0x74,0xd7,0x66,0x36, - 0xb2,0x72,0x0b,0x0c,0xfd,0xfc,0x6d,0xa2,0x1a,0x49, - 0x9f,0x36,0xcd,0x64,0xe3,0xf7,0xa9,0xbc,0x07,0x70, - 0x25,0xe8,0xeb,0xce,0xf5,0x9e,0xf4,0x82,0x7c,0xb0, - 0x7a,0x33,0xf2,0x83,0x29,0x79,0xa8,0x4f,0x17,0x75, - 0xef,0x3d,0x58,0xed,0xe0,0xc5,0xbc,0xf6,0xbe,0xec, - 0xfd,0xc1,0xcb,0xf5,0x44,0x7e,0x50,0xc8,0xb0,0x9b, - 0xda,0x11,0x80,0x2b,0x61,0xd7,0xe1,0x14,0xf9,0x24, - 0x6e,0x3b,0xf2,0x83,0xa9,0x69,0x5a,0xbf,0x8e,0xb4, - 0xa8,0x5f,0x9b,0x00,0x78,0xca,0x92,0x0d,0x3b,0xbc, - 0xfb,0xe6,0x09,0xf2,0x83,0x8f,0x68,0x1f,0xd5,0x80, - 0x00,0x78,0xca,0xbe,0xa3,0x69,0xc8,0x0f,0x96,0xa0, - 0x61,0xed,0x9a,0x04,0xc0,0x53,0xf2,0xbc,0xb5,0xb0, - 0x25,0xf2,0x83,0x8f,0xa9,0x19,0x5a,0x8d,0x00,0xf8, - 0x04,0xe4,0x07,0x1b,0x41,0x00,0x90,0x1f,0x08,0x00, - 0x20,0x3f,0x10,0x00,0xe4,0x47,0x7e,0x20,0x00,0xc8, - 0x8f,0xfc,0x40,0x00,0x90,0x1f,0xf9,0x81,0x00,0x20, - 0x3f,0xf2,0x03,0x01,0x40,0x7e,0xe4,0x07,0x02,0x80, - 0xfc,0xc8,0x0f,0x04,0x00,0xf9,0x91,0x1f,0x08,0x00, - 0xf2,0x23,0x3f,0x10,0x80,0xcb,0xa0,0x6a,0x42,0xc8, - 0xd0,0x90,0x60,0xe4,0x07,0xdf,0x5c,0x63,0x5e,0xa6, - 0xa0,0xb8,0xd4,0x3a,0x01,0xc8,0xc8,0xce,0x55,0xb2, - 0x33,0xad,0x9a,0x36,0x44,0x7e,0x30,0x94,0xd6,0xcd, - 0x1a,0x2a,0x19,0x27,0x23,0x37,0xdf,0x3a,0x01,0xf0, - 0xea,0xaf,0xe9,0x5e,0x82,0x7b,0xfa,0xdc,0x88,0xfc, - 0x60,0x28,0x77,0xdf,0x7a,0xa3,0x92,0x71,0xf6,0xa7, - 0x9e,0xb1,0x4e,0x00,0xf4,0xd9,0x79,0xcf,0xe7,0xe4, - 0x19,0x3e,0x4e,0xff,0x2e,0x6d,0xa5,0x6f,0xe7,0x36, - 0xc8,0x0f,0x86,0xa0,0x5f,0x5b,0xfa,0x35,0x66,0x34, - 0xe7,0x34,0x57,0x92,0x4f,0x65,0x58,0x27,0x00,0xfa, - 0xe4,0x9c,0x6b,0xbe,0x4d,0x52,0xb2,0x43,0x1f,0x4e, - 0x9e,0x20,0x8d,0xaf,0xa9,0x8e,0xfc,0xe0,0x55,0x1a, - 0xd7,0xab,0x2d,0x1f,0x4d,0x99,0xa8,0x64,0xac,0xaf, - 0xbf,0x3b,0x20,0x4e,0x45,0xd3,0x82,0x2b,0xfb,0x2e, - 0xc0,0xe2,0x75,0xdb,0x94,0x8c,0xd3,0x2c,0xb2,0xae, - 0x6c,0x7d,0xe7,0x25,0xe9,0xd9,0xe9,0x06,0xe4,0x07, - 0xaf,0xd0,0xab,0x43,0x6b,0xd9,0x3a,0xfb,0x39,0xd7, - 0x5c,0x7d,0x2a,0x58,0xb4,0x69,0xb7,0xb2,0x7d,0x73, - 0x48,0x9f,0xb1,0x4a,0x52,0x13,0x1c,0x14,0x28,0x29, - 0xff,0xf7,0x86,0xab,0xa4,0xaa,0xf8,0x2a,0x61,0xa7, - 0x7c,0xb6,0x3e,0x41,0x0e,0x1c,0x49,0xbd,0xba,0xef, - 0x44,0x04,0x55,0xd3,0x36,0x6f,0x2c,0xa1,0xa0,0xf5, - 0xd6,0xb5,0x0a,0xec,0x85,0x95,0x60,0x9d,0x15,0x4e, - 0xc9,0xcc,0x2d,0x90,0xd3,0xe7,0xb3,0xfc,0x6a,0x0d, - 0xbd,0xb0,0xd0,0x6a,0xae,0xf3,0x14,0xa6,0x68,0x56, - 0x1a,0x7f,0xa4,0x7a,0xb5,0x60,0x69,0xdb,0xa2,0x89, - 0xdc,0xdb,0xaf,0xbb,0xd2,0x55,0xad,0x4e,0x64,0x64, - 0x4a,0xcb,0x98,0x57,0xa4,0xb4,0xbc,0xdc,0x5a,0x01, - 0xd0,0x79,0x6a,0xcc,0x1d,0xf2,0xf7,0x09,0x0f,0xf0, - 0x92,0x52,0x05,0x5d,0xfe,0xa4,0x23,0xc7,0x25,0x6e, - 0xf7,0x01,0x59,0x9e,0xb0,0x5b,0x36,0x27,0x1e,0x52, - 0xb6,0x32,0x4c,0xd5,0xbb,0xa7,0x77,0x9f,0x1a,0x2f, - 0x83,0xba,0xb5,0x77,0xad,0xde,0x03,0xea,0x79,0xea, - 0xbd,0xa5,0xf2,0xda,0x8a,0x2d,0xd6,0xbb,0x03,0xb8, - 0x50,0xd5,0x10,0x49,0x5e,0xf8,0x9a,0x6b,0x6d,0x38, - 0xf8,0x75,0x52,0x4e,0x67,0xc8,0xac,0xa5,0xdf,0xc8, - 0xdc,0xe5,0xeb,0x5d,0xab,0x1c,0xa9,0x62,0xde,0xb3, - 0x31,0x32,0x6e,0xd8,0xad,0x9c,0x00,0x1f,0xa1,0xbf, - 0xfa,0xb7,0x9a,0xf0,0x37,0x29,0x2c,0x2d,0x53,0x36, - 0xa6,0xd2,0x9f,0x04,0xd4,0x6f,0xc3,0xf5,0x15,0x63, - 0xe1,0xd2,0xb4,0x68,0x58,0x4f,0x5e,0x7b,0x6c,0x8c, - 0x1c,0x59,0xfc,0xba,0x4c,0x1c,0x31,0x50,0xd9,0xab, - 0x71,0x49,0x59,0x19,0x07,0xdf,0x87,0x3c,0xf9,0xce, - 0x52,0xa5,0xf2,0x2b,0x0f,0x80,0xce,0xa7,0x1b,0x76, - 0xc8,0x82,0x35,0xf1,0x9c,0x6d,0x37,0xa8,0x1f,0x11, - 0x2e,0xb3,0xff,0x34,0x4e,0xe2,0x66,0xfe,0x45,0xc9, - 0x1b,0x50,0xfa,0x5d,0x87,0x3f,0xbd,0x17,0x61,0x27, - 0x16,0x7c,0xb3,0x55,0x3e,0xdd,0xfe,0xbd,0xf2,0x71, - 0x7d,0xf2,0xbb,0x00,0x31,0xaf,0xfe,0x53,0xe2,0x93, - 0x0e,0x73,0xd6,0xdd,0xa4,0x4f,0xa7,0x36,0xb2,0xfd, - 0xed,0x69,0xd2,0x21,0xba,0x99,0xa1,0xe3,0xe8,0xef, - 0x43,0x4c,0x98,0x31,0x8f,0x03,0xae,0x98,0xf8,0x7d, - 0xc9,0x12,0x33,0x77,0x99,0x4f,0xc6,0x0e,0x94,0xe6, - 0x1d,0xa7,0xa9,0x1e,0xb4,0xdc,0xe9,0x94,0xa5,0x1b, - 0x77,0xca,0x80,0xae,0x6d,0xa5,0x89,0xa2,0x6f,0xad, - 0x98,0x9d,0xf0,0x1a,0xd5,0xe5,0xbe,0xfe,0xdd,0x65, - 0xf5,0xf6,0x44,0x39,0x93,0x99,0x63,0xd8,0x38,0xbb, - 0x93,0x8f,0xb9,0x3e,0xff,0x1d,0xb7,0x74,0xe6,0xa0, - 0x2b,0x60,0xc7,0xc1,0xa3,0x32,0x6c,0xfa,0xfb,0x92, - 0xaf,0xe8,0x67,0xff,0xfd,0x22,0x00,0x3a,0xc5,0xa5, - 0xa5,0xb2,0x24,0x6e,0x07,0x11,0xf0,0x80,0x1a,0xa1, - 0xd5,0x94,0x44,0x60,0xe7,0xa1,0xa3,0x44,0x40,0x91, - 0xfc,0x83,0xa7,0xbd,0x27,0xd9,0x85,0xc5,0x3e,0xfb, - 0x1a,0x7c,0x16,0x00,0x22,0x40,0x04,0x90,0xdf,0xb7, - 0xf2,0xfb,0x3c,0x00,0x44,0x80,0x08,0x20,0xbf,0xd8, - 0x3b,0x00,0x44,0x80,0x08,0x20,0xbf,0xcd,0x03,0x40, - 0x04,0x88,0x80,0x1d,0xd8,0x7a,0xe0,0x47,0x19,0xfa, - 0xfc,0x3f,0xfd,0x46,0x7e,0xbf,0x0a,0x00,0x11,0x20, - 0x02,0x56,0x26,0x6e,0xcf,0x41,0x19,0x3a,0x7d,0x9e, - 0xe4,0x29,0x9a,0x1d,0xcb,0x94,0x01,0xb8,0x38,0x02, - 0x3d,0xda,0xb4,0x94,0x96,0x8d,0x23,0xb9,0x72,0x88, - 0x80,0x25,0xe4,0xbf,0xf3,0xa5,0x0f,0xa4,0xa0,0xa4, - 0xd4,0xef,0xbe,0x36,0xbf,0x0b,0x80,0x2b,0x02,0xf9, - 0xd9,0xb2,0x64,0x75,0x9c,0xeb,0x57,0x7a,0x5b,0x36, - 0x6e,0xc0,0x15,0x44,0x04,0x90,0xdf,0x36,0x01,0x28, - 0x29,0xd0,0xb6,0x22,0xd7,0x8f,0xa4,0x2e,0x59,0x1b, - 0x4f,0x04,0x88,0x00,0xf2,0xdb,0x26,0x00,0x95,0xf2, - 0xff,0x04,0x11,0x20,0x02,0xc8,0x6f,0x97,0x00,0x54, - 0x91,0x9f,0x08,0x10,0x01,0xe4,0xb7,0x4b,0x00,0x7e, - 0x45,0x7e,0x22,0x40,0x04,0x90,0xdf,0xea,0x01,0xb8, - 0x8c,0xfc,0x44,0x80,0x08,0x20,0xbf,0x55,0x03,0xe0, - 0xa6,0xfc,0x44,0x80,0x08,0x20,0xbf,0x21,0x14,0xfb, - 0x2e,0x00,0x1e,0xca,0x4f,0x04,0xcc,0x11,0x81,0xf4, - 0xcc,0x6c,0xb9,0xbd,0x47,0x67,0x71,0x38,0x1c,0xc8, - 0xef,0xff,0x1c,0xf5,0x4d,0x00,0xae,0x50,0xfe,0x8b, - 0x23,0xb0,0x68,0xcd,0x46,0x89,0x6a,0x18,0x29,0x9d, - 0x5b,0x47,0x63,0xb8,0x9b,0x11,0xb8,0xab,0x57,0x17, - 0x99,0xff,0xd5,0x66,0x29,0x32,0xf0,0x42,0xd5,0x23, - 0x90,0x78,0x24,0x55,0x86,0xf5,0xe8,0xa8,0x6c,0x1d, - 0x3d,0x5f,0xf2,0xc1,0xd7,0x5b,0xe4,0xfe,0x19,0x8b, - 0xa4,0xc8,0x9c,0x33,0x29,0xc5,0xa9,0x0f,0xc0,0x55, - 0xca,0xff,0x13,0xfa,0xa4,0x22,0x5f,0x6c,0xd8,0xea, - 0x9a,0xf2,0xbb,0x67,0xa7,0xb6,0x52,0x2b,0xac,0x06, - 0x96,0x5f,0x86,0x5a,0x61,0xd5,0x5d,0xf2,0x6f,0xd8, - 0x63,0xec,0xd4,0x53,0x07,0x53,0x4f,0xc9,0xc2,0xb5, - 0x5b,0xa5,0x55,0x93,0x06,0xd2,0xba,0x59,0x23,0x4b, - 0x1e,0x4b,0x7d,0x02,0xcf,0xf1,0xaf,0xce,0x97,0x97, - 0x97,0x25,0x48,0x79,0x85,0x69,0x77,0x63,0x96,0xda, - 0x00,0x78,0x49,0xfe,0x8b,0xd1,0x03,0xf0,0xf6,0x67, - 0xab,0x24,0x27,0xbf,0x40,0xda,0x5f,0xdb,0xdc,0x35, - 0x73,0x0e,0xfc,0x3a,0x67,0xb3,0x72,0x65,0xc9,0x86, - 0x1d,0x86,0x8f,0x93,0x9d,0x5f,0x28,0x8b,0xd6,0x6d, - 0x75,0x4d,0xfd,0xa6,0xcf,0x02,0x1d,0x6d,0x91,0x1f, - 0xeb,0x3e,0x75,0x2e,0x4b,0x5e,0x5c,0xf0,0x85,0xfc, - 0xe6,0x95,0xf7,0x65,0x6f,0x7a,0x6e,0xe5,0x3a,0x0f, - 0xa6,0x44,0xcf,0xd6,0x63,0xea,0xa6,0x05,0x37,0x40, - 0xfe,0xaa,0x84,0x04,0x07,0xc9,0xed,0xbd,0x6e,0x92, - 0x87,0x86,0xf5,0x93,0xdb,0x7a,0x74,0x91,0x88,0xf0, - 0x30,0x8c,0xbf,0x88,0xdc,0x82,0x42,0x19,0x35,0xe5, - 0x1f,0xf2,0xcd,0x77,0xfb,0x95,0x8f,0xad,0x2f,0xb2, - 0xf1,0xf0,0x90,0xde,0x32,0xbc,0x57,0x57,0xb9,0xa1, - 0x79,0x63,0x53,0x1d,0xb7,0xac,0xbc,0x02,0x59,0xbb, - 0x73,0x9f,0x7c,0xbc,0x76,0x8b,0xac,0xda,0xb6,0x57, - 0x4a,0x2a,0x02,0x44,0xc2,0x22,0xcc,0x2c,0xbf,0xeb, - 0xf6,0x5f,0x96,0xcf,0x18,0xa0,0x26,0x00,0x0a,0xe4, - 0xaf,0x4a,0x60,0x40,0x80,0xb4,0x8d,0x8e,0x92,0x76, - 0xd7,0x46,0x49,0x64,0xed,0x08,0x5b,0x2f,0x74,0xa1, - 0xaf,0x31,0x92,0x76,0x26,0x43,0x36,0xec,0x3b,0x22, - 0xe7,0xf2,0x7d,0xff,0xab,0xa8,0x8d,0xea,0x46,0x48, - 0xe7,0xeb,0x9a,0x4b,0x54,0x83,0xba,0xae,0xb5,0x22, - 0xfc,0x11,0xa7,0xf6,0x88,0x79,0x26,0x2b,0x47,0xf6, - 0x1f,0x3d,0x21,0x07,0x52,0x4e,0xb8,0x1e,0x39,0x5d, - 0xe8,0xcb,0xc3,0x99,0x5f,0x7e,0x9d,0x51,0x5a,0x00, - 0x96,0x1a,0x1f,0x00,0x1f,0xc8,0x0f,0xbf,0x00,0x6b, - 0x1b,0x5e,0x3d,0xd6,0x91,0x5f,0xbf,0x05,0xec,0xa8, - 0x05,0xc0,0x19,0x80,0xfc,0xc8,0x0f,0xb6,0x92,0x5f, - 0xe7,0xbf,0x75,0xf9,0xf5,0xff,0x08,0x40,0x7e,0xe4, - 0x07,0x5b,0xc9,0xff,0x91,0x26,0xff,0xea,0x9f,0xfe, - 0x10,0x80,0xfc,0xc8,0x0f,0xb6,0x91,0x7f,0x9f,0xb6, - 0xfd,0xe1,0xe2,0xff,0x11,0x80,0xfc,0xc8,0x0f,0xb6, - 0x90,0xff,0x47,0x6d,0x1b,0xa6,0xbd,0xfa,0xe7,0x18, - 0x17,0x00,0xe4,0x47,0x7e,0xe4,0xf7,0x57,0xf9,0xfb, - 0x69,0xf2,0xa7,0x55,0xfd,0x8b,0x00,0xe4,0x47,0x7e, - 0xb0,0xa7,0xfc,0xde,0x0b,0x00,0xf2,0x23,0x3f,0xf2, - 0x9b,0x4e,0x7e,0xef,0x04,0x00,0xf9,0x91,0x1f,0xf9, - 0x4d,0x29,0xff,0xd5,0x07,0x00,0xf9,0x91,0x1f,0xf9, - 0x4d,0x2b,0xff,0xd5,0x05,0x00,0xf9,0x91,0x1f,0xf9, - 0x4d,0x2d,0xff,0x95,0x07,0x00,0xf9,0x91,0x1f,0xf9, - 0x4d,0x2f,0xff,0x95,0x05,0x00,0xf9,0x91,0x1f,0xf9, - 0x2d,0x21,0xbf,0xe7,0x01,0x40,0x7e,0xe4,0x47,0x7e, - 0xcb,0xc8,0xef,0x59,0x00,0x90,0x1f,0xf9,0x91,0xdf, - 0x52,0xf2,0xbb,0x1f,0x00,0xe4,0x47,0x7e,0xe4,0xb7, - 0x9c,0xfc,0xee,0x05,0x00,0xf9,0x91,0x1f,0xf9,0x2d, - 0x29,0xff,0xe5,0x03,0x80,0xfc,0xc8,0x8f,0xfc,0x96, - 0x95,0xff,0x42,0x00,0x1c,0xe2,0x44,0x7e,0xe4,0x47, - 0x7e,0xfb,0xc9,0x5f,0x79,0x07,0xe0,0x48,0x47,0x7e, - 0xe4,0x47,0x7e,0xfb,0xc9,0x5f,0x79,0x07,0xe0,0x58, - 0x8f,0xfc,0xc8,0x8f,0xfc,0x7e,0xcf,0x5e,0x6d,0xeb, - 0xeb,0x4d,0xf9,0x2b,0x03,0x10,0xf8,0xca,0xbf,0x1f, - 0x03,0x90,0x1f,0xf9,0x91,0xdf,0x1f,0x99,0xaf,0x6d, - 0xb7,0x6a,0xf2,0x9f,0xf0,0xf6,0x27,0xbe,0x70,0x74, - 0xfa,0x3d,0x32,0x55,0x8a,0x72,0x9f,0x47,0x7e,0xe4, - 0x47,0x7e,0xbf,0x22,0x49,0xdb,0x62,0x35,0xf1,0xbf, - 0x31,0x6a,0x80,0xff,0x1c,0xa1,0xee,0x23,0xfe,0x2e, - 0xe5,0xa5,0xb1,0x52,0x21,0x01,0x5c,0x41,0xc8,0x8f, - 0xfc,0x3e,0x43,0x9f,0xa6,0x7f,0x9d,0xb6,0xbd,0xa9, - 0x6d,0x2b,0x35,0xf9,0x0d,0x9d,0xb6,0xff,0xe7,0x47, - 0xa9,0xc7,0xc8,0x1b,0xc5,0x59,0x36,0x45,0xdb,0x7a, - 0x69,0x5f,0x46,0x5d,0x11,0x62,0x80,0xfc,0xc8,0x6f, - 0x30,0xfa,0x4a,0x2d,0xa9,0xda,0xb6,0xa7,0x52,0xfc, - 0x2f,0xbd,0xfd,0x9c,0x7f,0xc9,0x00,0x54,0x54,0x54, - 0x70,0xe1,0x00,0xd8,0x14,0x02,0x00,0x40,0x00,0x00, - 0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x00, - 0x04,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00,0x20, - 0x00,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x00,0x01, - 0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x08,0x00, - 0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x40,0x00,0x00, - 0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x00, - 0x04,0x00,0x00,0x08,0x00,0x00,0x10,0x00,0x00,0x20, - 0x00,0x00,0x40,0x00,0x00,0x80,0x00,0x00,0x00,0x01, - 0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,0x08,0x00, - 0x00,0x10,0x00,0x00,0x20,0x00,0x00,0x40,0x00,0x00, - 0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x40, - 0x00,0x08,0x00,0x80,0x7d,0xf9,0x97,0x00,0x03,0x00, - 0x21,0xc5,0x64,0xe3,0xe4,0x8c,0x4c,0xec,0x00,0x00, - 0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 -}; - diff --git a/data/generate.sh b/data/generate.sh deleted file mode 100644 index 8fd9a5e7d2..0000000000 --- a/data/generate.sh +++ /dev/null @@ -1,3 +0,0 @@ -#get res2h here: https://github.com/HorstBaerbel/res2h - -res2h ./resources ./converted -s -h Resources.h -u ResourceUtil.cpp diff --git a/es-app/src/EmulationStation.rc b/es-app/src/EmulationStation.rc index a89896c991..a8ec517ee5 100644 --- a/es-app/src/EmulationStation.rc +++ b/es-app/src/EmulationStation.rc @@ -36,4 +36,4 @@ BEGIN END END -IDI_ES_LOGO ICON DISCARDABLE "../data/es_icon.ico" \ No newline at end of file +IDI_ES_LOGO ICON DISCARDABLE "es_icon.ico" \ No newline at end of file diff --git a/data/es_icon.ico b/es-app/src/es_icon.ico similarity index 100% rename from data/es_icon.ico rename to es-app/src/es_icon.ico diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index f1a69c5eb8..7fd16dfa8b 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -30,6 +30,8 @@ bool scrape_cmdline = false; bool parseArgs(int argc, char* argv[]) { + Settings::getInstance()->setString("ExePath", argv[0]); + for(int i = 1; i < argc; i++) { if(strcmp(argv[i], "--resolution") == 0) diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index c1c0b64779..2970e3563c 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -72,9 +72,6 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.h ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.h ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.h - - # Embedded assets (needed by ResourceManager) - ${emulationstation-all_SOURCE_DIR}/data/Resources.h ) set(CORE_SOURCES @@ -146,61 +143,6 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.cpp ) -set(EMBEDDED_ASSET_SOURCES - ${emulationstation-all_SOURCE_DIR}/data/ResourceUtil.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/splash_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/window_icon_256_png.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/button_png.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/button_filled_png.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/textinput_ninepatch_png.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/textinput_ninepatch_active_png.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/frame_png.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/scroll_gradient_png.cpp - - ${emulationstation-all_SOURCE_DIR}/data/converted/help__analog_left_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__analog_right_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__analog_up_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__analog_down_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__analog_thumb_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_a_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_b_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_x_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_y_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_l_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_r_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_start_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_select_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__button_hotkey_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_up_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_down_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_left_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_right_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_updown_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_leftright_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/help__dpad_all_svg.cpp - - ${emulationstation-all_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_regular_ttf.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/opensans_hebrew_condensed_light_ttf.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/arrow_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/option_arrow_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/checkbox_checked_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/checkbox_unchecked_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/star_filled_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/star_unfilled_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/on_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/off_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/fav_add_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/fav_remove_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/slider_knob_svg.cpp - - ${emulationstation-all_SOURCE_DIR}/data/converted/busy_0_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/busy_1_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/busy_2_svg.cpp - ${emulationstation-all_SOURCE_DIR}/data/converted/busy_3_svg.cpp -) - -list(APPEND CORE_SOURCES ${EMBEDDED_ASSET_SOURCES}) - include_directories(${COMMON_INCLUDE_DIRS}) add_library(es-core STATIC ${CORE_SOURCES} ${CORE_HEADERS}) target_link_libraries(es-core ${COMMON_LIBRARIES}) diff --git a/es-core/src/Renderer_init_sdlgl.cpp b/es-core/src/Renderer_init_sdlgl.cpp index a456e93c03..8beb8930dc 100644 --- a/es-core/src/Renderer_init_sdlgl.cpp +++ b/es-core/src/Renderer_init_sdlgl.cpp @@ -1,6 +1,6 @@ #include "Renderer.h" -#include "../data/Resources.h" +#include "resources/ResourceManager.h" #include "ImageIO.h" #include "Log.h" #include "Settings.h" @@ -101,7 +101,8 @@ namespace Renderer //set an icon for the window size_t width = 0; size_t height = 0; - std::vector rawData = ImageIO::loadFromMemoryRGBA32(window_icon_256_png_data, window_icon_256_png_size, width, height); + ResourceData resData = ResourceManager::getInstance()->getFileData(":/window_icon_256.png"); + std::vector rawData = ImageIO::loadFromMemoryRGBA32(resData.ptr.get(), resData.length, width, height); if (!rawData.empty()) { ImageIO::flipPixelsVert(rawData.data(), width, height); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 4c4666c6aa..2a999fb23e 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -30,7 +30,8 @@ std::vector settings_dont_save { { "ScreenHeight" }, { "ScreenOffsetX" }, { "ScreenOffsetY" }, - { "ScreenRotate" } + { "ScreenRotate" }, + { "ExePath" } }; Settings::Settings() @@ -146,6 +147,8 @@ void Settings::setDefaults() mIntMap["ScreenOffsetX"] = 0; mIntMap["ScreenOffsetY"] = 0; mIntMap["ScreenRotate"] = 0; + + mStringMap["ExePath"] = ""; } template diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index 348d7880b0..9f5014e432 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -1,6 +1,5 @@ #include "ResourceManager.h" -#include "../data/Resources.h" #include "utils/FileSystemUtil.h" #include @@ -21,31 +20,47 @@ std::shared_ptr& ResourceManager::getInstance() return sInstance; } -const ResourceData ResourceManager::getFileData(const std::string& path) const +std::string ResourceManager::getResourcePath(const std::string& path) const { - //check if its embedded - - if(res2hMap.find(path) != res2hMap.cend()) + // check if this is a resource file + if((path[0] == ':') && (path[1] == '/')) { - //it is - Res2hEntry embeddedEntry = res2hMap.find(path)->second; - ResourceData data = { - std::shared_ptr(const_cast(embeddedEntry.data), nop_deleter), - embeddedEntry.size - }; - return data; + std::string test; + + // check in homepath + test = Utils::FileSystem::getHomePath() + "/.emulationstation/resources/" + &path[2]; + if(Utils::FileSystem::exists(test)) + return test; + + // check in exepath + test = Utils::FileSystem::getExePath() + "/resources/" + &path[2]; + if(Utils::FileSystem::exists(test)) + return test; + + // check in cwd + test = Utils::FileSystem::getCWDPath() + "/resources/" + &path[2]; + if(Utils::FileSystem::exists(test)) + return test; } - //it's not embedded; load the file - if(!Utils::FileSystem::exists(path)) + // not a resource, return unmodified path + return path; +} + +const ResourceData ResourceManager::getFileData(const std::string& path) const +{ + //check if its a resource + const std::string respath = getResourcePath(path); + + if(Utils::FileSystem::exists(respath)) { - //if the file doesn't exist, return an "empty" ResourceData - ResourceData data = {NULL, 0}; - return data; - }else{ - ResourceData data = loadFile(path); + ResourceData data = loadFile(respath); return data; } + + //if the file doesn't exist, return an "empty" ResourceData + ResourceData data = {NULL, 0}; + return data; } ResourceData ResourceManager::loadFile(const std::string& path) const @@ -67,8 +82,8 @@ ResourceData ResourceManager::loadFile(const std::string& path) const bool ResourceManager::fileExists(const std::string& path) const { - //if it exists as an embedded file, return true - if(res2hMap.find(path) != res2hMap.cend()) + //if it exists as a resource file, return true + if(getResourcePath(path) != path) return true; return Utils::FileSystem::exists(path); diff --git a/es-core/src/resources/ResourceManager.h b/es-core/src/resources/ResourceManager.h index 1bcf07f409..96eab6455e 100644 --- a/es-core/src/resources/ResourceManager.h +++ b/es-core/src/resources/ResourceManager.h @@ -34,6 +34,7 @@ class ResourceManager void unloadAll(); void reloadAll(); + std::string getResourcePath(const std::string& path) const; const ResourceData getFileData(const std::string& path) const; bool fileExists(const std::string& path) const; diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index ea678b9131..62d8d48130 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -1,5 +1,6 @@ #include "utils/FileSystemUtil.h" +#include "Settings.h" #include #include @@ -173,6 +174,26 @@ namespace Utils } // getCWDPath + std::string getExePath() + { + static std::string path; + + // only construct the exepath once + if(!path.length()) + { + path = getCanonicalPath(Settings::getInstance()->getString("ExePath")); + + if(isRegularFile(path)) + { + path = getParent(path); + } + } + + // return constructed exepath + return path; + + } // getExePath + std::string getGenericPath(const std::string& _path) { std::string path = _path; diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index 42373d6942..8a23bc9c66 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -15,6 +15,7 @@ namespace Utils stringList getPathList (const std::string& _path); std::string getHomePath (); std::string getCWDPath (); + std::string getExePath (); std::string getGenericPath (const std::string& _path); std::string getEscapedPath (const std::string& _path); std::string getCanonicalPath (const std::string& _path); diff --git a/data/resources/arrow.svg b/resources/arrow.svg similarity index 100% rename from data/resources/arrow.svg rename to resources/arrow.svg diff --git a/data/resources/busy_0.svg b/resources/busy_0.svg similarity index 100% rename from data/resources/busy_0.svg rename to resources/busy_0.svg diff --git a/data/resources/busy_1.svg b/resources/busy_1.svg similarity index 100% rename from data/resources/busy_1.svg rename to resources/busy_1.svg diff --git a/data/resources/busy_2.svg b/resources/busy_2.svg similarity index 100% rename from data/resources/busy_2.svg rename to resources/busy_2.svg diff --git a/data/resources/busy_3.svg b/resources/busy_3.svg similarity index 100% rename from data/resources/busy_3.svg rename to resources/busy_3.svg diff --git a/data/resources/button.png b/resources/button.png similarity index 100% rename from data/resources/button.png rename to resources/button.png diff --git a/data/resources/button_filled.png b/resources/button_filled.png similarity index 100% rename from data/resources/button_filled.png rename to resources/button_filled.png diff --git a/data/resources/checkbox_checked.svg b/resources/checkbox_checked.svg similarity index 100% rename from data/resources/checkbox_checked.svg rename to resources/checkbox_checked.svg diff --git a/data/resources/checkbox_unchecked.svg b/resources/checkbox_unchecked.svg similarity index 100% rename from data/resources/checkbox_unchecked.svg rename to resources/checkbox_unchecked.svg diff --git a/data/resources/fav_add.svg b/resources/fav_add.svg similarity index 100% rename from data/resources/fav_add.svg rename to resources/fav_add.svg diff --git a/data/resources/fav_remove.svg b/resources/fav_remove.svg similarity index 100% rename from data/resources/fav_remove.svg rename to resources/fav_remove.svg diff --git a/data/resources/frame.png b/resources/frame.png similarity index 100% rename from data/resources/frame.png rename to resources/frame.png diff --git a/data/resources/help/analog_down.svg b/resources/help/analog_down.svg similarity index 100% rename from data/resources/help/analog_down.svg rename to resources/help/analog_down.svg diff --git a/data/resources/help/analog_left.svg b/resources/help/analog_left.svg similarity index 100% rename from data/resources/help/analog_left.svg rename to resources/help/analog_left.svg diff --git a/data/resources/help/analog_right.svg b/resources/help/analog_right.svg similarity index 100% rename from data/resources/help/analog_right.svg rename to resources/help/analog_right.svg diff --git a/data/resources/help/analog_thumb.svg b/resources/help/analog_thumb.svg similarity index 100% rename from data/resources/help/analog_thumb.svg rename to resources/help/analog_thumb.svg diff --git a/data/resources/help/analog_up.svg b/resources/help/analog_up.svg similarity index 100% rename from data/resources/help/analog_up.svg rename to resources/help/analog_up.svg diff --git a/data/resources/help/button_a.svg b/resources/help/button_a.svg similarity index 100% rename from data/resources/help/button_a.svg rename to resources/help/button_a.svg diff --git a/data/resources/help/button_b.svg b/resources/help/button_b.svg similarity index 100% rename from data/resources/help/button_b.svg rename to resources/help/button_b.svg diff --git a/data/resources/help/button_hotkey.svg b/resources/help/button_hotkey.svg similarity index 98% rename from data/resources/help/button_hotkey.svg rename to resources/help/button_hotkey.svg index 1446a58418..c3e4f56f42 100644 --- a/data/resources/help/button_hotkey.svg +++ b/resources/help/button_hotkey.svg @@ -1,22 +1,22 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/data/resources/help/button_l.svg b/resources/help/button_l.svg similarity index 100% rename from data/resources/help/button_l.svg rename to resources/help/button_l.svg diff --git a/data/resources/help/button_r.svg b/resources/help/button_r.svg similarity index 100% rename from data/resources/help/button_r.svg rename to resources/help/button_r.svg diff --git a/data/resources/help/button_select.svg b/resources/help/button_select.svg similarity index 100% rename from data/resources/help/button_select.svg rename to resources/help/button_select.svg diff --git a/data/resources/help/button_start.svg b/resources/help/button_start.svg similarity index 100% rename from data/resources/help/button_start.svg rename to resources/help/button_start.svg diff --git a/data/resources/help/button_x.svg b/resources/help/button_x.svg similarity index 100% rename from data/resources/help/button_x.svg rename to resources/help/button_x.svg diff --git a/data/resources/help/button_y.svg b/resources/help/button_y.svg similarity index 100% rename from data/resources/help/button_y.svg rename to resources/help/button_y.svg diff --git a/data/resources/help/dpad_all.svg b/resources/help/dpad_all.svg similarity index 100% rename from data/resources/help/dpad_all.svg rename to resources/help/dpad_all.svg diff --git a/data/resources/help/dpad_down.svg b/resources/help/dpad_down.svg similarity index 100% rename from data/resources/help/dpad_down.svg rename to resources/help/dpad_down.svg diff --git a/data/resources/help/dpad_left.svg b/resources/help/dpad_left.svg similarity index 100% rename from data/resources/help/dpad_left.svg rename to resources/help/dpad_left.svg diff --git a/data/resources/help/dpad_leftright.svg b/resources/help/dpad_leftright.svg similarity index 100% rename from data/resources/help/dpad_leftright.svg rename to resources/help/dpad_leftright.svg diff --git a/data/resources/help/dpad_right.svg b/resources/help/dpad_right.svg similarity index 100% rename from data/resources/help/dpad_right.svg rename to resources/help/dpad_right.svg diff --git a/data/resources/help/dpad_up.svg b/resources/help/dpad_up.svg similarity index 100% rename from data/resources/help/dpad_up.svg rename to resources/help/dpad_up.svg diff --git a/data/resources/help/dpad_updown.svg b/resources/help/dpad_updown.svg similarity index 100% rename from data/resources/help/dpad_updown.svg rename to resources/help/dpad_updown.svg diff --git a/data/resources/off.svg b/resources/off.svg similarity index 100% rename from data/resources/off.svg rename to resources/off.svg diff --git a/data/resources/on.svg b/resources/on.svg similarity index 100% rename from data/resources/on.svg rename to resources/on.svg diff --git a/data/resources/opensans_hebrew_condensed_light.ttf b/resources/opensans_hebrew_condensed_light.ttf similarity index 100% rename from data/resources/opensans_hebrew_condensed_light.ttf rename to resources/opensans_hebrew_condensed_light.ttf diff --git a/data/resources/opensans_hebrew_condensed_regular.ttf b/resources/opensans_hebrew_condensed_regular.ttf similarity index 100% rename from data/resources/opensans_hebrew_condensed_regular.ttf rename to resources/opensans_hebrew_condensed_regular.ttf diff --git a/data/resources/option_arrow.svg b/resources/option_arrow.svg similarity index 100% rename from data/resources/option_arrow.svg rename to resources/option_arrow.svg diff --git a/data/resources/scroll_gradient.png b/resources/scroll_gradient.png similarity index 100% rename from data/resources/scroll_gradient.png rename to resources/scroll_gradient.png diff --git a/data/resources/slider_knob.svg b/resources/slider_knob.svg similarity index 100% rename from data/resources/slider_knob.svg rename to resources/slider_knob.svg diff --git a/data/resources/splash.svg b/resources/splash.svg similarity index 100% rename from data/resources/splash.svg rename to resources/splash.svg diff --git a/data/resources/star_filled.svg b/resources/star_filled.svg similarity index 100% rename from data/resources/star_filled.svg rename to resources/star_filled.svg diff --git a/data/resources/star_unfilled.svg b/resources/star_unfilled.svg similarity index 100% rename from data/resources/star_unfilled.svg rename to resources/star_unfilled.svg diff --git a/data/resources/textinput_ninepatch.png b/resources/textinput_ninepatch.png similarity index 100% rename from data/resources/textinput_ninepatch.png rename to resources/textinput_ninepatch.png diff --git a/data/resources/textinput_ninepatch_active.png b/resources/textinput_ninepatch_active.png similarity index 100% rename from data/resources/textinput_ninepatch_active.png rename to resources/textinput_ninepatch_active.png diff --git a/data/resources/window_icon_256.png b/resources/window_icon_256.png similarity index 100% rename from data/resources/window_icon_256.png rename to resources/window_icon_256.png From 9a535d4441429f44d7e312f0479aeabcd7e0e940 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 8 Feb 2018 18:28:39 +0100 Subject: [PATCH 249/603] Show build date and time when starting ES with --debug --- es-app/src/guis/GuiMenu.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index d5ce195855..86fd9538bc 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -464,9 +464,11 @@ void GuiMenu::openQuitMenu() void GuiMenu::addVersionInfo() { + std::string buildDate = (Settings::getInstance()->getBool("Debug") ? std::string( " (" + Utils::String::toUpper(PROGRAM_BUILT_STRING) + ")") : ("")); + mVersion.setFont(Font::get(FONT_SIZE_SMALL)); mVersion.setColor(0x5E5E5EFF); - mVersion.setText("EMULATIONSTATION V" + Utils::String::toUpper(PROGRAM_VERSION_STRING)); + mVersion.setText("EMULATIONSTATION V" + Utils::String::toUpper(PROGRAM_VERSION_STRING) + buildDate); mVersion.setHorizontalAlignment(ALIGN_CENTER); addChild(&mVersion); } From 3f3e1ceb16cea4186ef378abc33b1f5bbf330232 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 9 Feb 2018 18:23:58 +0100 Subject: [PATCH 250/603] Move MameNameMap out of the source and into mamenames.xml --- es-app/CMakeLists.txt | 1 - es-app/src/FileData.cpp | 3 +- es-app/src/MameNameMap.cpp | 30452 --------- es-app/src/PlatformId.cpp | 49 - es-app/src/PlatformId.h | 7 - es-app/src/main.cpp | 3 + es-core/CMakeLists.txt | 2 + es-core/src/MameNames.cpp | 85 + es-core/src/MameNames.h | 38 + resources/mamenames.xml | 121778 ++++++++++++++++++++++++++++++++++ 10 files changed, 121908 insertions(+), 30510 deletions(-) delete mode 100644 es-app/src/MameNameMap.cpp create mode 100644 es-core/src/MameNames.cpp create mode 100644 es-core/src/MameNames.h create mode 100644 resources/mamenames.xml diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index ee3c644c4b..18473ff1c6 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -61,7 +61,6 @@ set(ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/MameNameMap.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/MetaData.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/PlatformId.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ScraperCmdLine.cpp diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index ebcf7b8502..be7dd0d847 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -8,6 +8,7 @@ #include "FileFilterIndex.h" #include "FileSorts.h" #include "Log.h" +#include "MameNames.h" #include "platform.h" #include "SystemData.h" #include "VolumeControl.h" @@ -38,7 +39,7 @@ std::string FileData::getDisplayName() const { std::string stem = Utils::FileSystem::getStem(mPath); if(mSystem && mSystem->hasPlatformId(PlatformIds::ARCADE) || mSystem->hasPlatformId(PlatformIds::NEOGEO)) - stem = PlatformIds::mameTitleSearch(stem.c_str()); + stem = MameNames::getInstance()->getRealName(stem); return stem; } diff --git a/es-app/src/MameNameMap.cpp b/es-app/src/MameNameMap.cpp deleted file mode 100644 index e2579c2361..0000000000 --- a/es-app/src/MameNameMap.cpp +++ /dev/null @@ -1,30452 +0,0 @@ -#define NULL 0 - -const char* mameNameToRealName[] = { - "005", "005", - "10yard", "10-Yard Fight (World, set 1)", - "10yard85", "10-Yard Fight '85 (US, Taito license)", - "10yardj", "10-Yard Fight (Japan)", - "11beat", "Eleven Beat", - "18w", "18 Wheeler (set 1)", - "18w2", "18 Wheeler (set 2)", - "18wheelr", "18 Wheeler (Deluxe) (Rev A)", - "18wheels", "18 Wheeler (Standard)", - "18wheelu", "18 Wheeler (Upright)", - "1941", "1941: Counter Attack (World 900227)", - "1941j", "1941: Counter Attack (Japan)", - "1941r1", "1941: Counter Attack (World)", - "1941u", "1941: Counter Attack (USA 900227)", - "1942", "1942 (Revision B)", - "1942a", "1942 (Revision A)", - "1942abl", "1942 (Revision A, bootleg)", - "1942b", "1942 (First Version)", - "1942p", "1942 (prototype)", - "1942w", "1942 (Williams Electronics license)", - "1943", "1943: The Battle of Midway (Euro)", - "1943b", "1943: Battle of Midway (bootleg, hack of Japan set)", - "1943j", "1943: Midway Kaisen (Japan, Rev B)", - "1943ja", "1943: Midway Kaisen (Japan)", - "1943kai", "1943 Kai: Midway Kaisen (Japan)", - "1943u", "1943: The Battle of Midway (US, Rev C)", - "1944", "1944: The Loop Master (USA 000620)", - "1944d", "1944: The Loop Master (USA 000620 Phoenix Edition) (bootleg)", - "1944j", "1944: The Loop Master (Japan 000620)", - "1945kiii", "1945k III", - "19in1", "19 in 1 MAME bootleg", - "19xx", "19XX: The War Against Destiny (USA 951207)", - "19xxa", "19XX: The War Against Destiny (Asia 951207)", - "19xxb", "19XX: The War Against Destiny (Brazil 951218)", - "19xxd", "19XX: The War Against Destiny (USA 951207 Phoenix Edition) (bootleg)", - "19xxh", "19XX: The War Against Destiny (Hispanic 951218)", - "19xxj", "19XX: The War Against Destiny (Japan 960104, yellow case)", - "19xxjr1", "19XX: The War Against Destiny (Japan 951225)", - "19xxjr2", "19XX: The War Against Destiny (Japan 951207)", - "1on1gov", "1 on 1 Government (Japan)", - "2020bb", "2020 Super Baseball (set 1)", - "2020bba", "2020 Super Baseball (set 2)", - "2020bbh", "2020 Super Baseball (set 3)", - "20pacgal", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.08)", - "20pacgalr0", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.00)", - "20pacgalr1", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.01)", - "20pacgalr2", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.02)", - "20pacgalr3", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.03)", - "20pacgalr4", "Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.04)", - "24cdjuke", "Midcoin Juke Box 24CD", - "25pacman", "Pac-Man - 25th Anniversary Edition (Rev 3.00)", - "25pacmano", "Pac-Man - 25th Anniversary Edition (Rev 2.00)", - "280zzzap", "280-ZZZAP", - "2mindril", "Two Minute Drill", - "30test", "30 Test (Remake)", - "39in1", "39 in 1 MAME bootleg", - "3bagflnz", "3 Bags Full (3VXFC5345, New Zealand)", - "3bagflvt", "3 Bags Full (5VXFC790, Victoria)", - "3countb", "3 Count Bout / Fire Suplex (NGM-043)(NGH-043)", - "3dobios", "3DO Bios", - "3ds", "Three Ds - Three Dealers Casino House", - "3in1semi", "XESS - The New Revolution (SemiCom 3-in-1)", - "3kokushi", "Sankokushi (Japan)", - "3on3dunk", "3 On 3 Dunk Madness (US, prototype? 1997/02/04)", - "3stooges", "The Three Stooges In Brides Is Brides (set 1)", - "3stoogesa", "The Three Stooges In Brides Is Brides (set 2)", - "3super8", "3 Super 8 (Italy)", - "3wishrd", "Three Wishes Red (Russia) (Atronic)", - "3wonders", "Three Wonders (World 910520)", - "3wondersb", "Three Wonders (bootleg)", - "3wondersh", "Three Wonders (hack)", - "3wondersr1", "Three Wonders (World 910513)", - "3wondersu", "Three Wonders (USA 910520)", - "3x3puzzl", "3X3 Puzzle (Enterprise)", - "3x3puzzla", "3X3 Puzzle (Normal)", - "40love", "Forty-Love", - "47pie2", "Idol Janshi Su-Chi-Pie 2 (v1.1)", - "47pie2o", "Idol Janshi Su-Chi-Pie 2 (v1.0)", - "48in1", "48 in 1 MAME bootleg (set 1, ver 3.09)", - "48in1a", "48 in 1 MAME bootleg (set 3, ver 3.02)", - "48in1b", "48 in 1 MAME bootleg (set 2, ver 3.09, alt flash)", - "4dwarrio", "4-D Warriors (315-5162)", - "4enlinea", "Cuatro en Linea", - "4enraya", "4 En Raya (set 1)", - "4enrayaa", "4 En Raya (set 2)", - "4in1", "4 Fun in 1", - "4in1a", "4 in 1 MAME bootleg (set 1, ver 3.00)", - "4in1b", "4 in 1 MAME bootleg (set 2)", - "4in1boot", "Puzzle King (includes bootleg of Snow Bros.)", - "4psimasy", "Mahjong 4P Simasyo (Japan)", - "4roses", "Four Roses (encrypted, set 1)", - "4rosesa", "Four Roses (encrypted, set 2)", - "500gp", "500 GP (5GP3 Ver. C)", - "50lions", "50 Lions (10120511, NSW/ACT)", - "50lionsa", "50 Lions (10156111, Malaysia)", - "5acespkr", "5-Aces Poker", - "5clown", "Five Clown (English, set 1)", - "5clowna", "Five Clown (English, set 2)", - "5clownsp", "Five Clown (Spanish hack)", - "600", "600", - "60in1", "60 in 1 MAME bootleg (ver 3.00)", - "64street", "64th. Street - A Detective Story (World)", - "64streetj", "64th. Street - A Detective Story (Japan)", - "720", "720 Degrees (rev 4)", - "720g", "720 Degrees (German, rev 2)", - "720gr1", "720 Degrees (German, rev 1)", - "720r1", "720 Degrees (rev 1)", - "720r2", "720 Degrees (rev 2)", - "720r3", "720 Degrees (rev 3)", - "7jigen", "7jigen no Youseitachi - Mahjong 7 Dimensions (Japan)", - "7mezzo", "7 e Mezzo", - "7ordi", "7 Ordi (Korea)", - "7smash", "7 Smash", - "7toitsu", "Chi-Toitsu", - "800fath", "800 Fathoms", - "86lions", "86 Lions", - "88games", "'88 Games", - "8ball", "Video Eight Ball", - "8ball1", "Video Eight Ball (Rev.1)", - "8ballact", "Eight Ball Action (DK conversion)", - "8ballact2", "Eight Ball Action (DKJr conversion)", - "8bpm", "Eight Ball Action (Pac-Man conversion)", - "98best44", "Neo Print - '98 NeoPri Best 44 (Japan)", - "99bottles", "99 Bottles of Beer", - "99lstwar", "'99: The Last War (set 1)", - "99lstwara", "'99: The Last War (set 2)", - "99lstwark", "'99: The Last War (Kyugo)", - "9ballsht", "9-Ball Shootout (set 1)", - "9ballsht2", "9-Ball Shootout (set 2)", - "9ballsht3", "9-Ball Shootout (set 3)", - "9ballshtc", "9-Ball Shootout Championship", - "a51mxr3k", "Area 51 / Maximum Force Duo (R3000)", - "a51site4", "Area 51: Site 4 (HD Rev 2.01, September 7, 1998)", - "a51site4a", "Area 51: Site 4 (HD Rev 2.0, September 11, 1998)", - "aadvent", "African Adventure (Konami Endeavour)", - "aafb", "All American Football (rev E)", - "aafbb", "All American Football (rev B)", - "aafbc", "All American Football (rev C)", - "aafbd2p", "All American Football (rev D, 2 Players)", - "aar_101", "Aaron Spelling (1.01)", - "aavenger", "Airborne Avenger", - "abacus", "Abacus (Ver 1.0)", - "abaseb", "Atari Baseball (set 1)", - "abaseb2", "Atari Baseball (set 2)", - "abattle", "Astro Battle (set 1)", - "abattle2", "Astro Battle (set 2)", - "abcop", "A.B. Cop (World, FD1094 317-0169b)", - "abcopj", "A.B. Cop (Japan, FD1094 317-0169b)", - "abigchs", "Big Cheese (Russia) (Atronic)", - "abnudge", "Animal Bonus Nudge (Version 2.1 Dual)", - "abnudgeb", "Animal Bonus Nudge (Version 2.0, set 1)", - "abnudged", "Animal Bonus Nudge (Version 2.0, set 2)", - "abnudgeo", "Animal Bonus Nudge (Version 1.7)", - "abscam", "Abscam", - "abunai", "Abunai Houkago - Mou Matenai (Japan 890325)", - "aburner", "After Burner", - "aburner2", "After Burner II", - "aburner2g", "After Burner II (German)", - "abv106", "Airborne", - "abv106r", "Airborne (Redemption)", - "ac1bbclb", "Big Break Club (Ace) (ACESYS1) (set 1)", - "ac1bbclba", "Big Break Club (Ace) (ACESYS1) (set 2)", - "ac1bluec", "Blue Chip (Pcp) (ACESYS1) (set 1)", - "ac1blueca", "Blue Chip (Pcp) (ACESYS1) (set 2)", - "ac1bluecb", "Blue Chip (Pcp) (ACESYS1) (set 3)", - "ac1bluecc", "Blue Chip (Pcp) (ACESYS1) (set 4)", - "ac1bluecd", "Blue Chip (Pcp) (ACESYS1) (set 5)", - "ac1clbmn", "Club Money (Ace) (ACESYS1) (set 1)", - "ac1clbsv", "Club Sovereign (Ace) (ACESYS1)", - "ac1clbxt", "Club Xtra (Ace) (ACESYS1) (set 1)", - "ac1clbxta", "Club Xtra (Ace) (ACESYS1) (set 2)", - "ac1dbldx", "Double Deluxe (Pcp) (ACESYS1)", - "ac1gogld", "Go For Gold (Ace) (ACESYS1) (set 1)", - "ac1hideh", "Hi De Hi Deluxe (Ace) (ACESYS1) (set 1)", - "ac1hideha", "Hi De Hi Deluxe (Ace) (ACESYS1) (set 2)", - "ac1hotpf", "Hot Profit (Ace) (ACESYS1)", - "ac1nudbk", "Nudge Break (Pcp) (ACESYS1) (set 1)", - "ac1nudbka", "Nudge Break (Pcp) (ACESYS1) (set 2)", - "ac1nudbkb", "Nudge Break (Pcp) (ACESYS1) (set 3)", - "ac1nudbkc", "Nudge Break (Pcp) (ACESYS1) (set 4)", - "ac1nudbkd", "Nudge Break (Pcp) (ACESYS1) (set 5)", - "ac1piaca", "Play It Again Casino (Ace) (ACESYS1)", - "ac1piacl", "Play It Again Club (Ace) (ACESYS1) (set 1)", - "ac1piacla", "Play It Again Club (Ace) (ACESYS1) (set 2)", - "ac1piaclb", "Play It Again Club (Ace) (ACESYS1) (set 3)", - "ac1piaclc", "Play It Again Club (Ace) (ACESYS1) (set 4)", - "ac1primt", "Primetime (Ace) (ACESYS1) (set 1)", - "ac1prmcl", "Premier Club (Ace) (ACESYS1) (set 1)", - "ac1prmcla", "Premier Club (Ace) (ACESYS1) (set 2)", - "ac1prmclb", "Premier Club (Ace) (ACESYS1) (set 3)", - "ac1prmclc", "Premier Club (Ace) (ACESYS1) (set 4)", - "ac1pster", "Pound Sterling (Ace) (ACESYS1)", - "ac1pstrt", "Pound Stretcher (Pcp) (ACESYS1)", - "ac1roll", "Roll Up (Pcp) (ACESYS1) (set 1)", - "ac1rolla", "Roll Up (Pcp) (ACESYS1) (set 2)", - "ac1rollb", "Roll Up (Pcp) (ACESYS1) (set 3)", - "ac1rundx", "Runner Deluxe Club (Ace) (ACESYS1) (set 1)", - "ac1rundxa", "Runner Deluxe Club (Ace) (ACESYS1) (set 2)", - "ac1shid", "Super Hi De Hi (Ace) (ACESYS1) (set 1)", - "ac1shida", "Super Hi De Hi (Ace) (ACESYS1) (set 2)", - "ac1sstrk", "Starstruck (Pcp) (ACESYS1) (set 1)", - "ac1sstrka", "Starstruck (Pcp) (ACESYS1) (set 2)", - "ac1sstrkb", "Starstruck (Pcp) (ACESYS1) (set 3)", - "ac1taklv", "Take It Or Leave It (Ace) (ACESYS1) (set 1)", - "ac1totb", "Top Of The Bill (Ace) (ACESYS1)", - "ac1xpres", "Xpress (Pcp) (ACESYS1)", - "ace", "Ace", - "aceattac", "Ace Attacker (FD1094 317-0059)", - "aceattaca", "Ace Attacker (Japan, System 16A, FD1094 317-0060)", - "acedrvrw", "Ace Driver: Racing Evolution (Rev. AD2)", - "acefruit", "Silhouette", - "acheart", "Arcana Heart", - "acheartf", "Arcana Heart Full", - "acitya", "Atlantic City Action", - "aclown", "Clown (Russia) (Atronic)", - "acombat", "Astro Combat (newer, CB)", - "acombat3", "Astro Combat (unencrypted)", - "acombato", "Astro Combat (older, PZ)", - "acommand", "Alien Command", - "acpsx", "Acclaim PSX", - "acrobatm", "Acrobat Mission", - "act2000", "Action 2000 (Version 3.5E Dual)", - "act2000b1", "Action 2000 (Version 3.5R, set 2)", - "act2000bx", "Action 2000 (Version 3.30XT, set 2)", - "act2000d1", "Action 2000 (Version 3.5R, set 1)", - "act2000dx", "Action 2000 (Version 3.30XT, set 1)", - "act2000o", "Action 2000 (Version 3.3)", - "act2000o2", "Action 2000 (Version 3.10XT)", - "act2000o3", "Action 2000 (Version 1.2)", - "act2000v1", "Action 2000 (Version 3.5R Dual)", - "act2000vx", "Action 2000 (Version 3.30XT Dual)", - "actfancr", "Act-Fancer Cybernetick Hyper Weapon (World revision 2)", - "actfancr1", "Act-Fancer Cybernetick Hyper Weapon (World revision 1)", - "actfancrj", "Act-Fancer Cybernetick Hyper Weapon (Japan revision 1)", - "actionhw", "Action Hollywood", - "ad2083", "A. D. 2083", - "ad4ctl", "Cop The Lot Club (Video) (Bellfruit) (Adder 4) (set 1)", - "ad4ctla", "Cop The Lot Club (Video) (Bellfruit) (Adder 4) (set 2)", - "ad4film", "Film Premiere (Video?) (Bellfruit) (Adder 4) (set 1)", - "ad4filma", "Film Premiere (Video?) (Bellfruit) (Adder 4) (set 2)", - "ad4skill", "Skill Dice (BFM) (Scorpion 4 + Adder 4)", - "ad5bpfpm", "Bullseye Pounds For Points (Mazooma) (Adder 5) (set 1)", - "ad5bpfpma", "Bullseye Pounds For Points (Mazooma) (Adder 5) (set 2)", - "ad5bpfpmb", "Bullseye Pounds For Points (Mazooma) (Adder 5) (set 3)", - "ad5bpfpmc", "Bullseye Pounds For Points (Mazooma) (Adder 5) (set 4)", - "ad5bpfpmd", "Bullseye Pounds For Points (Mazooma) (Adder 5) (set 5)", - "ad5btc", "Bullseye Triple Club (PR1758, BFGPBULS) (Bellfruit) (Adder 5) (set 1)", - "ad5btca", "Bullseye Triple Club (PR1758, BFGPBULS) (Bellfruit) (Adder 5) (set 3)", - "ad5btcb", "Bullseye Triple Club (PR1758, BFGNBULS) (Bellfruit) (Adder 5) (set 4)", - "ad5cmons", "Crazy Money (Bellfruit) (Adder 5) (set 1)", - "ad5cmonsa", "Crazy Money (Bellfruit) (Adder 5) (set 2)", - "ad5copsr", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 1)", - "ad5copsr0", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 7)", - "ad5copsr1", "Cops 'n' Robbers (PR2497) (Mazooma) (Adder 5) (set 2)", - "ad5copsr2", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 8)", - "ad5copsr3", "Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 1)", - "ad5copsr4", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 5)", - "ad5copsr5", "Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 2)", - "ad5copsr6", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 6)", - "ad5copsr7", "Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 4)", - "ad5copsra", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 2)", - "ad5copsrb", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 3)", - "ad5copsrc", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 1)", - "ad5copsrd", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 4)", - "ad5copsre", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 5)", - "ad5copsrf", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 6)", - "ad5copsrg", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 2)", - "ad5copsrh", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 1)", - "ad5copsri", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 2)", - "ad5copsrj", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 5)", - "ad5copsrk", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 7)", - "ad5copsrl", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 8)", - "ad5copsrm", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 9)", - "ad5copsrn", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 3)", - "ad5copsro", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 10)", - "ad5copsrp", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 11)", - "ad5copsrq", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 12)", - "ad5copsrr", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 4)", - "ad5copsrs", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 3)", - "ad5copsrt", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 4)", - "ad5copsru", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 6)", - "ad5copsrv", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 13)", - "ad5copsrw", "Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 14)", - "ad5copsrx", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 5)", - "ad5copsry", "Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 6)", - "ad5copsrz", "Cops 'n' Robbers (PR2497) (Mazooma) (Adder 5) (set 1)", - "ad5crcpt", "Cops 'n' Robbers Community Party (Bellfruit) (Adder 5) (set 1)", - "ad5crcpta", "Cops 'n' Robbers Community Party (Bellfruit) (Adder 5) (set 2)", - "ad5crsc", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 1)", - "ad5crsca", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 2)", - "ad5crscb", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 3)", - "ad5crscc", "Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 4)", - "ad5crscd", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 7)", - "ad5crsce", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 8)", - "ad5crscf", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 9)", - "ad5crscg", "Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 10)", - "ad5crsch", "Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 3)", - "ad5dnd", "Deal Or No Deal (Bellfruit) (Adder 5) (set 1)", - "ad5dnda", "Deal Or No Deal (Bellfruit) (Adder 5) (set 2)", - "ad5dndb", "Deal Or No Deal (Bellfruit) (Adder 5) (set 3)", - "ad5dndc", "Deal Or No Deal (Bellfruit) (Adder 5) (set 4)", - "ad5dndcl", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 1)", - "ad5dndcla", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 2)", - "ad5dndclb", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 3)", - "ad5dndclc", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 4)", - "ad5dndcld", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 5)", - "ad5dndcle", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 6)", - "ad5dndclf", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 20)", - "ad5dndclg", "Deal Or No Deal Club (Bellfruit) (Adder 5) (set 21)", - "ad5dndd", "Deal Or No Deal (Bellfruit) (Adder 5) (set 5)", - "ad5dnddd", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Adder 5) (set 1)", - "ad5dnddda", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Adder 5) (set 2)", - "ad5dnde", "Deal Or No Deal (Bellfruit) (Adder 5) (set 6)", - "ad5dndf", "Deal Or No Deal (Bellfruit) (Adder 5) (set 7)", - "ad5dndg", "Deal Or No Deal (Bellfruit) (Adder 5) (set 8)", - "ad5dndh", "Deal Or No Deal (Bellfruit) (Adder 5) (set 9)", - "ad5dndi", "Deal Or No Deal (Bellfruit) (Adder 5) (set 10)", - "ad5dndj", "Deal Or No Deal (Bellfruit) (Adder 5) (set 11)", - "ad5dndk", "Deal Or No Deal (Bellfruit) (Adder 5) (set 12)", - "ad5dndl", "Deal Or No Deal (Bellfruit) (Adder 5) (set 13)", - "ad5dndm", "Deal Or No Deal (Bellfruit) (Adder 5) (set 14)", - "ad5dndn", "Deal Or No Deal (Bellfruit) (Adder 5) (set 15)", - "ad5dndo", "Deal Or No Deal (Bellfruit) (Adder 5) (set 16)", - "ad5dndp", "Deal Or No Deal (Bellfruit) (Adder 5) (set 17)", - "ad5dndpg", "Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 1)", - "ad5dndpga", "Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 2)", - "ad5dndpgb", "Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 3)", - "ad5dndpgc", "Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 4)", - "ad5dndpl", "Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 1)", - "ad5dndpla", "Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 2)", - "ad5dndplb", "Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 3)", - "ad5dndplc", "Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 4)", - "ad5dndq", "Deal Or No Deal (Bellfruit) (Adder 5) (set 18)", - "ad5dndr", "Deal Or No Deal (Bellfruit) (Adder 5) (set 19)", - "ad5dndu", "Deal Or No Deal (Bellfruit) (Adder 5) (set 22)", - "ad5dndv", "Deal Or No Deal (Bellfruit) (Adder 5) (set 23)", - "ad5eyes", "Eyes Down (PR2242, MAZNEYDW) (Mazooma) (Adder 5) (set 1)", - "ad5eyesa", "Eyes Down (PR2242, MAZNEYDW) (Mazooma) (Adder 5) (set 2)", - "ad5eyesb", "Eyes Down (PR2246, MAZNEYDW) (Mazooma) (Adder 5) (set 1)", - "ad5eyesc", "Eyes Down (PR2246, MAZPEYDW) (Mazooma) (Adder 5) (set 1)", - "ad5eyesd", "Eyes Down (PR2242, MAZPEYDW) (Mazooma) (Adder 5) (set 1)", - "ad5eyese", "Eyes Down (PR2242, MAZPEYDW) (Mazooma) (Adder 5) (set 2)", - "ad5eyesf", "Eyes Down (PR2246, MAZPEYDW) (Mazooma) (Adder 5) (set 2)", - "ad5eyesg", "Eyes Down (PR2246, MAZNEYDW) (Mazooma) (Adder 5) (set 2)", - "ad5gldmn", "Gold Mine (Bellfruit) (Adder 5) (set 1)", - "ad5gldmna", "Gold Mine (Bellfruit) (Adder 5) (set 2)", - "ad5gldmnb", "Gold Mine (Bellfruit) (Adder 5) (set 3)", - "ad5gldmnc", "Gold Mine (Bellfruit) (Adder 5) (set 4)", - "ad5gldmnd", "Gold Mine (Bellfruit) (Adder 5) (set 5)", - "ad5gldmne", "Gold Mine (Bellfruit) (Adder 5) (set 6)", - "ad5gldmnf", "Gold Mine (Bellfruit) (Adder 5) (set 7)", - "ad5gldmng", "Gold Mine (Bellfruit) (Adder 5) (set 8)", - "ad5gldmnh", "Gold Mine (Bellfruit) (Adder 5) (set 9)", - "ad5gldmni", "Gold Mine (Bellfruit) (Adder 5) (set 10)", - "ad5gldmnj", "Gold Mine (Bellfruit) (Adder 5) (set 11)", - "ad5gldmnk", "Gold Mine (Bellfruit) (Adder 5) (set 12)", - "ad5gldwn", "Golden Winner (Mazooma) (Adder 5) (set 1)", - "ad5gldwna", "Golden Winner (Mazooma) (Adder 5) (set 2)", - "ad5hir", "Hi Roller (Bellfruit) (Adder 5) (set 1)", - "ad5hira", "Hi Roller (Bellfruit) (Adder 5) (set 2)", - "ad5hirb", "Hi Roller (Bellfruit) (Adder 5) (set 3)", - "ad5hirc", "Hi Roller (Bellfruit) (Adder 5) (set 4)", - "ad5hircl", "Hi Roller Club (Bellfruit) (Adder 5) (set 1)", - "ad5hircla", "Hi Roller Club (Bellfruit) (Adder 5) (set 2)", - "ad5hirclb", "Hi Roller Club (Bellfruit) (Adder 5) (set 3)", - "ad5jckmo", "Jackpot Monopoly (PR2226, MAZNJACM) (Mazooma) (Adder 5) (set 1)", - "ad5jckmoa", "Jackpot Monopoly (PR2226, MAZNJACM) (Mazooma) (Adder 5) (set 2)", - "ad5jckmob", "Jackpot Monopoly (PR2253, MAZNJACM) (Mazooma) (Adder 5)", - "ad5jckmoc", "Jackpot Monopoly (PR2226, MAZNJACM) (Mazooma) (Adder 5) (set 3)", - "ad5jckmod", "Jackpot Monopoly (PR2226, MAZPJACM) (Mazooma) (Adder 5) (set 1)", - "ad5jckmoe", "Jackpot Monopoly (PR2226, MAZPJACM) (Mazooma) (Adder 5) (set 2)", - "ad5mcob", "Monte Carlo Or Bust (Qps) (Adder 5) (set 1)", - "ad5mcoba", "Monte Carlo Or Bust (Qps) (Adder 5) (set 2)", - "ad5mcobb", "Monte Carlo Or Bust (Qps) (Adder 5) (set 3)", - "ad5mcobc", "Monte Carlo Or Bust (Qps) (Adder 5) (set 4)", - "ad5monop", "Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 1)", - "ad5monopa", "Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 2)", - "ad5monopb", "Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 3)", - "ad5monopc", "Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 4)", - "ad5monopd", "Random Monopoly (PR2221, MAZNRNDN) (Mazooma) (Adder 5) (set 1)", - "ad5monope", "Random Monopoly (PR2221, MAZNRNDN) (Mazooma) (Adder 5) (set 2)", - "ad5monopf", "Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 1)", - "ad5monopg", "Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 2)", - "ad5monoph", "Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 3)", - "ad5monopi", "Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 4)", - "ad5monopj", "Random Monopoly (PR2221, MAZPRNDN) (Mazooma) (Adder 5) (set 1)", - "ad5monopk", "Random Monopoly (PR2221, MAZPRNDN) (Mazooma) (Adder 5) (set 2)", - "ad5mowow", "Monopoly Wheel Of Wealth (PR2365, MAZNBPFP) (Mazooma) (Adder 5) (set 1)", - "ad5mowowa", "Monopoly Wheel Of Wealth (PR2365, MAZNWOWT) (Mazooma) (Adder 5) (set 1)", - "ad5mowowb", "Monopoly Wheel Of Wealth (PR2365, MAZNWOWT) (Mazooma) (Adder 5) (set 2)", - "ad5mowowc", "Monopoly Wheel Of Wealth (PR2389, MAZNWWBU) (Mazooma) (Adder 5)", - "ad5mowowd", "Monopoly Wheel Of Wealth (PR2365, MAZNMWOW) (Mazooma) (Adder 5)", - "ad5mowowe", "Monopoly Wheel Of Wealth (PR2365, MAZPBPFP) (Mazooma) (Adder 5) (set 1)", - "ad5mowowf", "Monopoly Wheel Of Wealth (PR2365, MAZPWOWT) (Mazooma) (Adder 5) (set 1)", - "ad5mowowg", "Monopoly Wheel Of Wealth (PR2365, MAZPWOWT) (Mazooma) (Adder 5) (set 2)", - "ad5mowowh", "Monopoly Wheel Of Wealth (PR2389, MAZPWWBU) (Mazooma) (Adder 5)", - "ad5mowowi", "Monopoly Wheel Of Wealth (PR2365, MAZPMWOW) (Mazooma) (Adder 5)", - "ad5mowowj", "Monopoly Wheel Of Wealth (PR3075) (Adder 5) (set 1)", - "ad5mowowk", "Monopoly Wheel Of Wealth (PR3075) (Adder 5) (set 2)", - "ad5mowowl", "Monopoly Wheel Of Wealth (PR2365, MAZNBPFP) (Mazooma) (Adder 5) (set 2)", - "ad5mowowm", "Monopoly Wheel Of Wealth (PR2365, MAZPBPFP) (Mazooma) (Adder 5) (set 2)", - "ad5mr2r", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 1)", - "ad5mr2ra", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 2)", - "ad5mr2rb", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 3)", - "ad5mr2rc", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 4)", - "ad5mr2rd", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 5)", - "ad5mr2re", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 6)", - "ad5mr2rf", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 7)", - "ad5mr2rg", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 8)", - "ad5mr2rh", "Monopoly Road To Riches (Mazooma) (Adder 5) (set 9)", - "ad5mww", "Random Monopoly Wonders Of The World (PR2284) (Mazooma) (Adder 5)", - "ad5mwwa", "Random Monopoly Wonders Of The World (PR2291) (Mazooma) (Adder 5)", - "ad5pking", "Poker King (Bellfruit) (Adder 5) (set 1)", - "ad5pkinga", "Poker King (Bellfruit) (Adder 5) (set 2)", - "ad5pp", "Pink Panther (PR2283, QPSNPINK) (Mazooma) (Adder 5) (set 1)", - "ad5ppa", "Pink Panther (PR2283, QPSNPINK) (Mazooma) (Adder 5) (set 2)", - "ad5ppb", "Pink Panther (PR2267, MAZNPINK) (Mazooma) (Adder 5) (set 1)", - "ad5ppbtb", "Pink Panther Break The Bank (PR2304, QPSNPPBB) (Qps) (Adder 5) (set 1)", - "ad5ppbtba", "Pink Panther Break The Bank (PR2304, QPSNPPBB) (Qps) (Adder 5) (set 2)", - "ad5ppbtbb", "Pink Panther Break The Bank (PR2304, QPSPPPBB) (Qps) (Adder 5) (set 1)", - "ad5ppbtbc", "Pink Panther Break The Bank (PR2304, QPSPPPBB) (Qps) (Adder 5) (set 2)", - "ad5ppc", "Pink Panther (PR2267, MAZNPINK) (Mazooma) (Adder 5) (set 2)", - "ad5ppd", "Pink Panther (MAZNPINK) (Mazooma) (Adder 5) (set 1)", - "ad5ppe", "Pink Panther (MAZNPINK) (Mazooma) (Adder 5) (set 2)", - "ad5ppf", "Pink Panther (PR2283, QPSPPINK) (Mazooma) (Adder 5) (set 1)", - "ad5ppg", "Pink Panther (PR2283, QPSPPINK) (Mazooma) (Adder 5) (set 2)", - "ad5pph", "Pink Panther (PR2267, MAZPPINK) (Mazooma) (Adder 5)", - "ad5ppi", "Pink Panther (MAZPPINK) (Mazooma) (Adder 5) (set 1)", - "ad5ppj", "Pink Panther (MAZPPINK) (Mazooma) (Adder 5) (set 2)", - "ad5rapid", "Rapid Pay (Bellfruit) (Adder 5) (set 1)", - "ad5rapida", "Rapid Pay (Bellfruit) (Adder 5) (set 2)", - "ad5rcash", "Reel Cash (Mazooma) (Adder 5) (set 1)", - "ad5rcasha", "Reel Cash (Mazooma) (Adder 5) (set 2)", - "ad5rroul", "Reel Roulette (QPSNRLRO) (Mazooma) (Adder 5)", - "ad5rroula", "Reel Roulette (QPSPRLRO) (Mazooma) (Adder 5)", - "ad5rroulb", "Reel Roulette (MAZNRERO) (Mazooma) (Adder 5)", - "ad5rroulc", "Reel Roulette (MAZPRERO) (Mazooma) (Adder 5)", - "ad5rsclb", "Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 1)", - "ad5rsclba", "Random Spinner Club (PR1826, BFGNRNDN) (Bellfruit) (Adder 5) (set 1)", - "ad5rsclbb", "Random Spinner Club (PR1826, BFGNRNDN) (Bellfruit) (Adder 5) (set 2)", - "ad5rsclbc", "Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 2)", - "ad5rsclbd", "Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 3)", - "ad5rsclbe", "Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 4)", - "ad5rsclbf", "Random Spinner Club (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 1)", - "ad5rsclbg", "Random Spinner Club (PR1826, BFGPRNDN) (Bellfruit) (Adder 5) (set 1)", - "ad5rsclbh", "Random Spinner Club (PR1826, BFGPRNDN) (Bellfruit) (Adder 5) (set 2)", - "ad5rsclbi", "Random Spinner Club (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 2)", - "ad5rsclbj", "Random Spinner Club (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 3)", - "ad5rsnw", "Random Spin 'n' Win (PR2226, MAZNRNDN) (Mazooma) (Adder 5) (set 1)", - "ad5rsnwa", "Random Spin 'n' Win (PR2226, MAZNRNDN) (Mazooma) (Adder 5) (set 2)", - "ad5rsnwb", "Random Spin 'n' Win (PR2226, MAZPRNDN) (Mazooma) (Adder 5) (set 1)", - "ad5rsnwc", "Random Spin 'n' Win (PR2226, MAZPRNDN) (Mazooma) (Adder 5) (set 2)", - "ad5rspin", "Random Spinner (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 1)", - "ad5rspinb", "Random Spinner (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 2)", - "ad5rspinc", "Random Spinner (Bellfruit) (Adder 5) (set 1)", - "ad5rsrm", "Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 1)", - "ad5rsrma", "Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 2)", - "ad5rsrr", "Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 3)", - "ad5rsrra", "Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 4)", - "ad5rwclb", "Random Winner Club (PR1756, BFGNRWSX) (Bellfruit) (Adder 5) (set 1)", - "ad5rwclba", "Random Winner Club (PR1756, BFGNRWSX) (Bellfruit) (Adder 5) (set 2)", - "ad5rwclbb", "Random Winner Club (PR1756, BFGPRWSX) (Bellfruit) (Adder 5) (set 1)", - "ad5rwclbc", "Random Winner Club (PR1756, BFGPRWSX) (Bellfruit) (Adder 5) (set 2)", - "ad5rwclbd", "Random Winner Club (PR1757, BFGPRWCL) (Bellfruit) (Adder 5)", - "ad5rwclbe", "Random Winner Club (PR1757, BFGNRWCL) (Bellfruit) (Adder 5)", - "ad5sslam", "Super Slam (Bellfruit) (Adder 5) (set 1)", - "ad5sslama", "Super Slam (Bellfruit) (Adder 5) (set 2)", - "ad5sslamb", "Super Slam (Bellfruit) (Adder 5) (set 3)", - "ad5sslamc", "Super Slam (Bellfruit) (Adder 5) (set 4)", - "ad5sslamd", "Super Slam (Bellfruit) (Adder 5) (set 5)", - "ad5sslame", "Super Slam (Bellfruit) (Adder 5) (set 6)", - "ad5sslamf", "Super Slam (Bellfruit) (Adder 5) (set 7)", - "ad5tornc", "Tornado Club (PR1629, 5.5, rv 8, BFGNTORD) (Bellfruit) (Adder 5)", - "ad5tornca", "Tornado Club (PR1629, 5.8, rv 7, BFGNTORD) (Bellfruit) (Adder 5)", - "ad5torncb", "Tornado Club (PR1629, 5.5, rv 8, BFGPTORD) (Bellfruit) (Adder 5)", - "ad5torncc", "Tornado Club (PR1629, 5.8, rv 7, BFGPTORD) (Bellfruit) (Adder 5)", - "ad5torncd", "Tornado Club (PR1627, 0.1, rv 1, BFGPTORN) (Bellfruit) (Adder 5)", - "ad5tornce", "Tornado Club (PR1627, 0.1, rv 1, BFGNTORN) (Bellfruit) (Adder 5)", - "ad5vlv", "Viva Las Vegas (Bellfruit) (Adder 5) (set 1)", - "ad5vlvb", "Viva Las Vegas (Bellfruit) (Adder 5) (set 2)", - "ad5vlvc", "Viva Las Vegas (Bellfruit) (Adder 5) (set 3)", - "ad5vlvd", "Viva Las Vegas (Bellfruit) (Adder 5) (set 4)", - "ad5vlve", "Viva Las Vegas (Bellfruit) (Adder 5) (set 5)", - "ad5vlvf", "Viva Las Vegas (Bellfruit) (Adder 5) (set 6)", - "ad5vpa", "Video Poker Ace (Bellfruit) (Adder 5) (set 1)", - "ad5vpaa", "Video Poker Ace (Bellfruit) (Adder 5) (set 2)", - "ad5vpab", "Video Poker Ace (Bellfruit) (Adder 5) (set 3)", - "ad5vpac", "Video Poker Ace (Bellfruit) (Adder 5) (set 4)", - "adillor", "Armadillo Racing (Rev. AM1 Ver.A)", - "adonis", "Adonis (0200751V, NSW/ACT)", - "adults", "Adults Only (Russia) (Extrema)", - "aerfboo2", "Aero Fighters (bootleg set 2)", - "aerfboot", "Aero Fighters (bootleg set 1)", - "aeroboto", "Aeroboto", - "aerofgt", "Aero Fighters (World / USA + Canada / Korea / Hong Kong / Taiwan) (newer hardware)", - "aerofgtb", "Aero Fighters (Taiwan / Japan, set 1)", - "aerofgtc", "Aero Fighters (Taiwan / Japan, set 2)", - "aerofgts", "Aero Fighters Special (Taiwan)", - "aerolitos", "Aerolitos (Spanish bootleg of Asteroids)", - "afighter", "Action Fighter (FD1089A 317-0018)", - "afire", "Astro Fire", - "afm_10", "Attack From Mars (1.0)", - "afm_11", "Attack From Mars (1.1)", - "afm_113", "Attack From Mars (1.13)", - "afm_113b", "Attack From Mars (1.13b)", - "afm_11u", "Attack From Mars (1.1 Ultrapin)", - "aftor", "Af-Tor", - "afv_l4", "Addams Family Values (Coin Dropper L-4)", - "agallet", "Air Gallet (Europe)", - "agalleth", "Air Gallet (Hong Kong)", - "agalletj", "Akuu Gallet (Japan)", - "agalletk", "Air Gallet (Korea)", - "agallett", "Air Gallet (Taiwan)", - "agalletu", "Air Gallet (USA)", - "agent777", "Agents 777", - "agentx1", "Agent X (prototype, rev 1)", - "agentx2", "Agent X (prototype, rev 2)", - "agentx3", "Agent X (prototype, rev 3)", - "agentx4", "Agent X (prototype, rev 4)", - "agress", "Agress - Missile Daisenryaku (Japan)", - "agressb", "Agress - Missile Daisenryaku (English bootleg)", - "agsoccer", "A.G. Soccer Ball", - "ainferno", "Air Inferno (US)", - "ainfernoj", "Air Inferno (Japan)", - "airass", "Air Assault (World)", - "airattck", "Air Attack (set 1)", - "airattcka", "Air Attack (set 2)", - "airbustr", "Air Buster: Trouble Specialty Raid Unit (World)", - "airbustrb", "Air Buster: Trouble Specialty Raid Unit (bootleg)", - "airbustrj", "Air Buster: Trouble Specialty Raid Unit (Japan)", - "airco22b", "Air Combat 22 (Rev. ACS1 Ver.B, Japan)", - "aircomb", "Air Combat (US)", - "aircombj", "Air Combat (Japan)", - "airduel", "Air Duel (Japan)", - "airlbios", "Naomi Airline Pilots Deluxe Bios", - "airrace", "Air Race (prototype)", - "airraid", "Air Raid (encrypted)", - "airtrix", "Air Trix", - "airwolf", "Airwolf", - "airwolfa", "Airwolf (US)", - "ajax", "Ajax", - "ajaxj", "Ajax (Japan)", - "akamaru", "Panel & Variety Akamaru Q Jousyou Dont-R", - "aking", "Angler King (AG1 Ver. A)", - "akiss", "Mahjong Angel Kiss", - "akkanvdr", "Akkanbeder (Ver 2.5J 1995/06/14)", - "akumajou", "Akuma-Jou Dracula (Japan version P)", - "akumajoun", "Akuma-Jou Dracula (Japan version N)", - "aladmdb", "Aladdin (bootleg of Japanese Megadrive version)", - "albatross", "Albatross (US Prototype?)", - "alcapone", "Al Capone", - "alcat_l7", "Alley Cats (Shuffle) (L-7)", - "alcon", "Alcon (US)", - "aleck64", "Aleck64 PIF BIOS", - "alexkidd", "Alex Kidd: The Lost Stars (set 2, unprotected)", - "alexkidd1", "Alex Kidd: The Lost Stars (set 1, FD1089A 317-0021)", - "alg_bios", "American Laser Games BIOS", - "algar_l1", "Algar (L-1)", - "ali", "Ali", - "alibaba", "Ali Baba and 40 Thieves", - "alibabab", "Mustafa and 40 Thieves (bootleg)", - "alien", "Alien: The Arcade Medal Edition", - "alien3", "Alien3: The Gun (World)", - "alien3u", "Alien3: The Gun (US)", - "alienar", "Alien Arena", - "alienaru", "Alien Arena (Stargate upgrade)", - "aliencha", "Alien Challenge (World)", - "alienchac", "Alien Challenge (China)", - "aliencr", "Alien Crush", - "alienfnt", "Alien Front (Rev T)", - "alienfnta", "Alien Front (Rev A)", - "alieninv", "Alien Invasion", - "alieninvp2", "Alien Invasion Part II", - "aliens", "Aliens (World set 1)", - "aliens2", "Aliens (World set 2)", - "aliens3", "Aliens (World set 3)", - "aliensa", "Aliens (Asia)", - "aliensec", "Alien Sector", - "aliensj", "Aliens (Japan set 1)", - "aliensj2", "Aliens (Japan set 2)", - "alienstr", "Alien Star", - "aliensu", "Aliens (US)", - "aliensyn", "Alien Syndrome (set 4, System 16B, unprotected)", - "aliensyn2", "Alien Syndrome (set 2, System 16A, FD1089A 317-0033)", - "aliensyn3", "Alien Syndrome (set 3, System 16B, FD1089A 317-0033)", - "aliensyn5", "Alien Syndrome (set 5, System 16A, FD1089B 317-0037)", - "aliensyn7", "Alien Syndrome (set 7, System 16B, MC-8123B 317-00xx)", - "aliensynj", "Alien Syndrome (set 6, Japan, new, System 16B, FD1089A 317-0033)", - "aliensynjo", "Alien Syndrome (set 1, Japan, old, System 16A, FD1089A 317-0033)", - "aligator", "Alligator Hunt", - "aligatorun", "Alligator Hunt (unprotected)", - "alleymas", "Alley Master", - "allied", "Allied System", - "alpha1v", "Alpha One (Vision Electronics)", - "alphaho", "Alpha Fighter / Head On", - "alpham2", "Alpha Mission II / ASO II - Last Guardian (NGM-007)(NGH-007)", - "alpham2p", "Alpha Mission II / ASO II - Last Guardian (prototype)", - "alphamis", "Alpha Mission", - "alphaone", "Alpha One (prototype, 3 lives)", - "alphaonea", "Alpha One (prototype, 5 lives)", - "alphaxz", "The Alphax Z (Japan)", - "alpilota", "Airline Pilots (Rev A)", - "alpiltdx", "Airline Pilots Deluxe (Rev B)", - "alpine", "Alpine Ski (set 1)", - "alpinea", "Alpine Ski (set 2)", - "alpinerc", "Alpine Racer (Rev. AR2 Ver.C)", - "alpinerd", "Alpine Racer (Rev. AR2 Ver.D)", - "alpinesa", "Alpine Surfer (Rev. AF2 Ver.A)", - "alpinr2a", "Alpine Racer 2 (Rev. ARS2 Ver.A)", - "alpinr2b", "Alpine Racer 2 (Rev. ARS2 Ver.B)", - "alpok_f6", "Alien Poker (L-6 French speech)", - "alpok_l2", "Alien Poker (L-2)", - "alpok_l6", "Alien Poker (L-6)", - "altair", "Altair", - "altbeast", "Altered Beast (set 8, 8751 317-0078)", - "altbeast2", "Altered Beast (set 2, MC-8123B 317-0066)", - "altbeast4", "Altered Beast (set 4, MC-8123B 317-0066)", - "altbeast5", "Altered Beast (set 5, FD1094 317-0069)", - "altbeast6", "Altered Beast (set 6, 8751 317-0076)", - "altbeastbl", "Altered Beast (Datsu bootleg)", - "altbeastj", "Juuouki (set 7, Japan, 8751 317-0077)", - "altbeastj1", "Juuouki (set 1, Japan, FD1094 317-0065)", - "altbeastj3", "Juuouki (set 3, Japan, FD1094 317-0068)", - "am_mg24", "Multi Game I (V.Ger 2.4)", - "am_mg3", "Multi Game III (V.Ger 3.5)", - "am_mg31i", "Multi Game III (S.Ita 3.1)", - "am_mg33i", "Multi Game III (S.Ita 3.3)", - "am_mg34i", "Multi Game III (S.Ita 3.4)", - "am_mg35i", "Multi Game III (S.Ita 3.5)", - "am_mg3a", "Multi Game III (V.Ger 3.64)", - "amatelas", "Sei Senshi Amatelass", - "amazon", "Soldier Girl Amazon", - "amazonh", "Amazon Hunt", - "ambush", "Ambush", - "ambushh", "Ambush (hack?)", - "ambushj", "Ambush (Japan)", - "ambushv", "Ambush (Volt Electronics)", - "amclink", "Amcoe Link Control Box (Version 2.2)", - "amerdart", "AmeriDarts (set 1)", - "amerdart2", "AmeriDarts (set 2)", - "amerdart3", "AmeriDarts (set 3)", - "america", "America 1492", - "amidar", "Amidar", - "amidar1", "Amidar (older)", - "amidarb", "Amidar (bootleg)", - "amidaro", "Amidar (Olympia)", - "amidars", "Amidar (Scramble hardware)", - "amidaru", "Amidar (Stern Electronics)", - "amigo", "Amigo", - "ampkr228", "American Poker II (iamp2 v28)", - "ampkr2b1", "American Poker II (bootleg, set 1)", - "ampkr2b2", "American Poker II (bootleg, set 2)", - "ampkr2b3", "American Poker II (bootleg, set 3)", - "ampkr2b4", "American Poker II (bootleg, set 4)", - "ampkr95", "American Poker 95", - "ampoker2", "American Poker II", - "amspdwy", "American Speedway (set 1)", - "amspdwya", "American Speedway (set 2)", - "amusco", "American Music Poker (V1.4)", - "amuse", "Amuse (Version 50.08 IBA)", - "amuse1", "Amuse (Version 30.08 IBA)", - "ancienta", "Ancient Atlantis (set 1)", - "ancientaa", "Ancient Atlantis (set 2)", - "ancientab", "Ancient Atlantis (set 3)", - "ancientac", "Ancient Atlantis (set 4)", - "ancientad", "Ancient Atlantis (set 5)", - "andretti", "Mario Andretti", - "andretti4", "Mario Andretti (rev.T4)", - "androdun", "Andro Dunos (NGM-049)(NGH-049)", - "andromed", "Andromeda (Japan?)", - "andromep", "Andromeda (set 1)", - "andromepa", "Andromeda (set 2)", - "angelkds", "Angel Kids (Japan)", - "anibonus", "Animal Bonus (Version 1.8E Dual)", - "anibonusb1", "Animal Bonus (Version 1.7R, set 1)", - "anibonusb2", "Animal Bonus (Version 1.7LT, set 1)", - "anibonusd1", "Animal Bonus (Version 1.7R, set 2)", - "anibonusd2", "Animal Bonus (Version 1.7LT, set 2)", - "anibonuso", "Animal Bonus (Version 1.5)", - "anibonuso2", "Animal Bonus (Version 1.4, set 1)", - "anibonuso3", "Animal Bonus (Version 1.4, set 2)", - "anibonusv1", "Animal Bonus (Version 1.8R Dual)", - "anibonusv2", "Animal Bonus (Version 1.8LT Dual)", - "anibonusxo", "Animal Bonus (Version 1.50XT)", - "anibonusxo2", "Animal Bonus (Version 1.40XT, set 1)", - "anibonusxo3", "Animal Bonus (Version 1.40XT, set 2)", - "animalc", "Animal Catch", - "animaljr", "Exciting Animal Land Jr. (USA)", - "animaljrj", "Waiwai Animal Land Jr. (Japan)", - "animaljrs", "Animalandia Jr. (Spanish)", - "anithunt", "Animal Treasure Hunt (Version 1.9R, set 1)", - "anithuntd1", "Animal Treasure Hunt (Version 1.9R, set 2)", - "anithunto", "Animal Treasure Hunt (Version 1.7)", - "anithunto2", "Animal Treasure Hunt (Version 1.5)", - "anithuntv1", "Animal Treasure Hunt (Version 1.9R Dual)", - "anmlbskt", "Animal Basket", - "antar", "Antar (set 1)", - "antar2", "Antar (set 2)", - "antcleo", "Antony and Cleopatra (10177211, Malaysia)", - "anteater", "Anteater", - "anteaterg", "Ameisenbaer (German)", - "anteateruk", "The Anteater (UK)", - "antiairc", "Anti-Aircraft [TTL]", - "aodk", "Aggressors of Dark Kombat / Tsuukai GANGAN Koushinkyoku (ADM-008)(ADH-008)", - "aof", "Art of Fighting / Ryuuko no Ken (NGM-044)(NGH-044)", - "aof2", "Art of Fighting 2 / Ryuuko no Ken 2 (NGM-056)", - "aof2a", "Art of Fighting 2 / Ryuuko no Ken 2 (NGH-056)", - "aof3", "Art of Fighting 3 - The Path of the Warrior / Art of Fighting - Ryuuko no Ken Gaiden", - "aof3k", "Art of Fighting 3 - The Path of the Warrior (Korean release)", - "aoh", "Age Of Heroes - Silkroad 2 (v0.63 - 2001/02/07)", - "apache3", "Apache 3", - "apache3a", "Apache 3 (Kana Corporation license)", - "apb", "APB - All Points Bulletin (rev 7)", - "apb1", "APB - All Points Bulletin (rev 1)", - "apb2", "APB - All Points Bulletin (rev 2)", - "apb3", "APB - All Points Bulletin (rev 3)", - "apb4", "APB - All Points Bulletin (rev 4)", - "apb5", "APB - All Points Bulletin (rev 5)", - "apb6", "APB - All Points Bulletin (rev 6)", - "apbf", "APB - All Points Bulletin (French)", - "apbg", "APB - All Points Bulletin (German)", - "aplatoon", "Platoon V.?.? US", - "apollo13", "Apollo 13", - "aponow", "Apocaljpse Now (bootleg of Rescue)", - "apparel", "Apparel Night (Japan 860929)", - "apple10", "Apple 10 (Ver 1.21)", - "appoooh", "Appoooh", - "aquajack", "Aqua Jack (World)", - "aquajackj", "Aqua Jack (Japan)", - "aquajacku", "Aqua Jack (US)", - "aquajet", "Aqua Jet (Rev. AJ2 Ver.B)", - "aqualand", "Aqualand", - "aquarium", "Aquarium (Japan)", - "aquarush", "Aqua Rush (Japan, AQ1/VER.A1)", - "ar_airh", "SportTime Table Hockey (Arcadia, set 1, V 2.1)", - "ar_airh2", "SportTime Table Hockey (Arcadia, set 2)", - "ar_argh", "Aaargh (Arcadia)", - "ar_bios", "Arcadia System BIOS", - "ar_blast", "Blastaball (Arcadia, V 2.1)", - "ar_bowl", "SportTime Bowling (Arcadia, V 2.1)", - "ar_dart", "World Darts (Arcadia, set 1, V 2.1)", - "ar_dart2", "World Darts (Arcadia, set 2)", - "ar_dlta", "Delta Command (Arcadia)", - "ar_fast", "Magic Johnson's Fast Break (Arcadia, V 2.8)", - "ar_fasta", "Magic Johnson's Fast Break (Arcadia, V 2.7)", - "ar_ldrb", "Leader Board (Arcadia, set 1, V 2.5)", - "ar_ldrba", "Leader Board (Arcadia, set 2, V 2.4)", - "ar_ldrbb", "Leader Board (Arcadia, set 3)", - "ar_ninj", "Ninja Mission (Arcadia, set 1, V 2.5)", - "ar_ninj2", "Ninja Mission (Arcadia, set 2)", - "ar_pm", "Pharaohs Match (Arcadia)", - "ar_rdwr", "RoadWars (Arcadia, V 2.3)", - "ar_sdwr", "Sidewinder (Arcadia, set 1, V 2.1)", - "ar_sdwr2", "Sidewinder (Arcadia, set 2)", - "ar_socc", "World Trophy Soccer (Arcadia, V 3.0)", - "ar_spot", "Spot (Arcadia, V 2.0)", - "ar_sprg", "Space Ranger (Arcadia, V 2.0)", - "ar_xeon", "Xenon (Arcadia, V 2.3)", - "arabfgt", "Arabian Fight (World)", - "arabfgtj", "Arabian Fight (Japan)", - "arabfgtu", "Arabian Fight (US)", - "arabian", "Arabian", - "arabiana", "Arabian (Atari)", - "arabianm", "Arabian Magic (Ver 1.0O 1992/07/06)", - "arabianmj", "Arabian Magic (Ver 1.0J 1992/07/06)", - "arabianmu", "Arabian Magic (Ver 1.0A 1992/07/06)", - "arac6000", "Super Six Plus II English Mark Darts", - "aracnis", "Aracnis (bootleg of Scorpion on Moon Cresta hardware)", - "arbalest", "Arbalester", - "arcadecl", "Arcade Classics (prototype)", - "arcadian", "Arcadia (NMK)", - "archrivl", "Arch Rivals (rev 4.0 6/29/89)", - "archrivla", "Arch Rivals (rev 2.0 5/03/89)", - "archrivlb", "Arch Rivals (rev 2.0 5/03/89, 8-way Joystick bootleg)", - "arctthnd", "Arctic Thunder (v1.002)", - "arctthndult", "Ultimate Arctic Thunder", - "arcwins", "Arctic Wins (4XF5227H03, USA)", - "area51", "Area 51 (R3000)", - "area51a", "Area 51 (Atari Games license)", - "area51mx", "Area 51 / Maximum Force Duo v2.0", - "area51t", "Area 51 (Time Warner license)", - "area88", "Area 88 (Japan)", - "area88r", "Area 88 (Japan Resale Ver.)", - "arena", "Arena", - "arescue", "Air Rescue", - "argus", "Argus", - "argusg", "Argus (Gottlieb, prototype)", - "arian", "Arian Mission", - "arist_l1", "Aristocrat (Shuffle) (L-1)", - "aristmk5", "MKV Set/Clear Chips (USA)", - "aristmk6", "Aristocrat MK6 Base (15011025, Malaysia)", - "ark1ball", "Arkanoid (bootleg with MCU, harder)", - "arkangc", "Arkanoid (Game Corporation bootleg, set 1)", - "arkangc2", "Arkanoid (Game Corporation bootleg, set 2)", - "arkanoid", "Arkanoid (World)", - "arkanoidj", "Arkanoid (Japan)", - "arkanoidjb", "Arkanoid (bootleg with MCU, set 1)", - "arkanoidjb2", "Arkanoid (bootleg with MCU, set 2)", - "arkanoidjo", "Arkanoid (Japan, older)", - "arkanoidu", "Arkanoid (US)", - "arkanoiduo", "Arkanoid (US, older)", - "arkarea", "Ark Area", - "arkatayt", "Arkanoid (Tayto bootleg)", - "arkatour", "Tournament Arkanoid (US)", - "arkbloc2", "Block (Game Corporation bootleg, set 2)", - "arkbloc3", "Block (Game Corporation bootleg, set 3)", - "arkblock", "Block (Game Corporation bootleg, set 1)", - "arkgcbl", "Arkanoid (bootleg on Block hardware, set 1)", - "arkgcbla", "Arkanoid (bootleg on Block hardware, set 2)", - "arknoid2", "Arkanoid - Revenge of DOH (World)", - "arknoid2b", "Arkanoid - Revenge of DOH (Japan bootleg)", - "arknoid2j", "Arkanoid - Revenge of DOH (Japan)", - "arknoid2u", "Arkanoid - Revenge of DOH (US)", - "arkretrn", "Arkanoid Returns (Ver 2.02O 1997/02/10)", - "arkretrnj", "Arkanoid Returns (Ver 2.02J 1997/02/10)", - "arktayt2", "Arkanoid (Tayto bootleg, harder)", - "arlingtn", "Arlington Horse Racing (v1.21-D)", - "armchmp2", "Arm Champs II v2.6", - "armchmp2o", "Arm Champs II v1.7", - "armedf", "Armed Formation", - "armedff", "Armed Formation (Fillmore license)", - "armora", "Armor Attack", - "armorap", "Armor Attack (prototype)", - "armorar", "Armor Attack (Rock-Ola)", - "armorcar", "Armored Car (set 1)", - "armorcar2", "Armored Car (set 2)", - "armwar", "Armored Warriors (Euro 941024)", - "armwar1d", "Armored Warriors (Euro 941011 Phoenix Edition) (bootleg)", - "armwara", "Armored Warriors (Asia 940920)", - "armwarr1", "Armored Warriors (Euro 941011)", - "armwaru", "Armored Warriors (USA 941024)", - "armwaru1", "Armored Warriors (USA 940920)", - "armwrest", "Arm Wrestling", - "as_acp", "unknown Astra 'ACP' (Astra, V403)", - "as_bbr", "Bullion Bars (Astra, V101)", - "as_bbra", "Bullion Bars (Astra, V102,alt)", - "as_bbrb", "Bullion Bars (Astra, V201)", - "as_bbrc", "Bullion Bars (Astra, V003)", - "as_bbrd", "Bullion Bars (Astra, V102)", - "as_bbre", "Bullion Bars (Astra, V105)", - "as_bbrf", "Bullion Bars (Astra, V004)", - "as_big10", "Big 10 (Astra, V500)", - "as_big10a", "Big 10 (Astra, V503)", - "as_big10b", "Big 10 (Astra, V507)", - "as_big10c", "Big 10 (Astra, V601)", - "as_big10d", "Big 10 (Astra, V605)", - "as_big15", "Big 15 (Astra, V101)", - "as_bigcs", "Big Cash (Astra, V101)", - "as_bigcsa", "Big Cash (Astra, V103)", - "as_bigtm", "Big Time (Astra, V003)", - "as_celeb", "Celebration (Astra, V100)", - "as_celeba", "Celebration (Astra, V101)", - "as_celebb", "Celebration (Astra, V201)", - "as_colmn", "Colour Of Money (Astra, V200)", - "as_colmna", "Colour Of Money (Astra, V107)", - "as_colmnb", "Colour Of Money (Astra, V108)", - "as_colmnc", "Colour Of Money (Astra, V109)", - "as_colmnd", "Colour Of Money (Astra, V908)", - "as_cshah", "Cash Ahoi (Lowen, V105)", - "as_cshcs", "Cash Castle (Lowen, V006)", - "as_csv", "Slot Slant (?) (Astra, V202)", - "as_dblcs", "Double Cash (Astra, V110)", - "as_dblcsa", "Double Cash (Astra, V112)", - "as_dblcsb", "Double Cash (Astra, V108)", - "as_dblcsc", "Double Cash (Astra, V109)", - "as_dblcsd", "Double Cash (Astra, V106)", - "as_dblcse", "Double Cash (Astra, V102)", - "as_dblcsf", "Double Cash (Astra, V100)", - "as_dblcsg", "Double Cash (Astra, V100, alt)", - "as_dblcsh", "Double Cash (Astra, V004)", - "as_djp", "Double Jackpot (Astra, V107)", - "as_djpa", "Double Jackpot (Astra, V004)", - "as_djpb", "Double Jackpot (Astra, V109)", - "as_fortn", "Fortune Teller (Astra, V009)", - "as_gof", "Game Of Fortune (Lowen, V208)", - "as_hc", "Hokey Cokey (Astra, V107)", - "as_hca", "Hokey Cokey (Astra, V109)", - "as_hcb", "Hokey Cokey (Astra, V110)", - "as_hcc", "Hokey Cokey (Astra, V111)", - "as_hcd", "Hokey Cokey (Astra, V909)", - "as_hog", "Hearts Of Gold (Astra, V002)", - "as_hr", "Hot Reel (Astra, V004)", - "as_hxr", "Hot Cross Run (Astra, V108)", - "as_jackb", "Jackpot Bell (Astra, V104)", - "as_jjive", "Jungle Jive (Astra, V107)", - "as_jjivea", "Jungle Jive (Astra, V106)", - "as_jjiveb", "Jungle Jive (Astra, V104)", - "as_jjivec", "Jungle Jive (Astra, V102)", - "as_jjived", "Jungle Jive (Astra, V101)", - "as_jjivee", "Jungle Jive (Astra, V101, alt)", - "as_jjivef", "Jungle Jive (Astra, V004)", - "as_jjiveg", "Jungle Jive (Astra, V005)", - "as_jmpj", "Jumping Jackpots (Astra, V100)", - "as_jmpja", "Jumping Jackpots (Astra, V102)", - "as_jolly", "Jolly Roger (Astra, V103)", - "as_jpx", "Jackpot X (Astra, V100)", - "as_jpxa", "Jackpot X (Astra, V101)", - "as_jpxb", "Jackpot X (Astra, V002)", - "as_kingc", "King Cash (Astra, V106)", - "as_kingca", "King Cash (Astra, V103)", - "as_koc", "King Of Clubs (Astra, V200)", - "as_koca", "King Of Clubs (Astra, V101)", - "as_lbt", "Little Big 10 (Astra, V103)", - "as_lbta", "Little Big 10 (Astra, V102)", - "as_ldl", "Little Devils (Astra, V700)", - "as_ldla", "Little Devils (Astra, V600)", - "as_ldlb", "Little Devils (Astra, V312)", - "as_ldlc", "Little Devils (Astra, V003)", - "as_ldld", "Little Devils (Astra, V102)", - "as_ldle", "Little Devils (Astra, V103)", - "as_letsp", "Let's Party (Astra, V904)", - "as_mp", "Mission Possible (Lowen, V118)", - "as_mp2", "Mission Possible 2 (Lowen, V114)", - "as_otr", "Over The Rainbow (Astra, V104)", - "as_otra", "Over The Rainbow (Astra, V102)", - "as_party", "Party Time (Astra, V105)", - "as_partya", "Party Time (Astra, V110)", - "as_partyb", "Party Time (Astra, V112)", - "as_partyc", "Party Time (Astra, V206)", - "as_partyd", "Party Time (Astra, V401)", - "as_partye", "Party Time (Astra, V907)", - "as_partyf", "Party Time (Astra, V906)", - "as_pb", "Piggy Banking (Astra, V105)", - "as_pharg", "Pharaoh's Gold (Astra, V005)", - "as_pharga", "Pharaoh's Gold (Astra, V101)", - "as_phargb", "Pharaoh's Gold (Astra, V102)", - "as_phargc", "Pharaoh's Gold (Astra, V104)", - "as_phargd", "Pharaoh's Gold (Astra, V106)", - "as_pharge", "Pharaoh's Gold (Astra, V107)", - "as_pia", "Pay It Again (Astra, V202)", - "as_piaa", "Pay It Again (Astra, V206)", - "as_piab", "Pay It Again (Astra, V904)", - "as_ptf", "Party Fruits (Astra, V102)", - "as_ptfa", "Party Fruits (Astra, V803)", - "as_ptfb", "Party Fruits (Astra, V905)", - "as_ptfc", "Party Fruits (Astra)", - "as_rab", "Ring A Bell (Astra, V105)", - "as_raba", "Ring A Bell (Astra, V106)", - "as_rabb", "Ring A Bell (Astra, V107)", - "as_rabc", "Ring A Bell (Astra, V104)", - "as_rbg", "River Boat Gambler (Astra, V304)", - "as_rbga", "River Boat Gambler (Astra, V303)", - "as_rbgb", "River Boat Gambler (Astra, V104)", - "as_rbgc", "River Boat Gambler (Astra, V102)", - "as_rbgd", "River Boat Gambler (Astra, V101)", - "as_rbge", "River Boat Gambler (Astra, V008)", - "as_rbglo", "River Boat Gambler (Lowen, V106)", - "as_rox", "Roll X (Astra, V006)", - "as_rtr", "Ready To Roll (Astra, V101)", - "as_rtra", "Ready To Roll (Astra, V101, alt 1)", - "as_rtrb", "Ready To Roll (Astra, V101, alt 2)", - "as_rtrc", "Ready To Roll (Astra, V101, alt 3)", - "as_rtrd", "Ready To Roll (Astra, V100, )", - "as_rtre", "Ready To Roll (Astra, V100, alt)", - "as_rtrf", "Ready To Roll (Astra, V200)", - "as_rtrg", "Ready To Roll (Astra, V200, alt)", - "as_rtrh", "Ready To Roll (Astra, V202)", - "as_siu", "Step It Up (Astra, V202)", - "as_siua", "Step It Up (Astra, V203)", - "as_sld", "Super Little Devil (Astra, V700)", - "as_slda", "Super Little Devil (Astra, V600)", - "as_sldb", "Super Little Devil (Astra, V500)", - "as_sldc", "Super Little Devil (Astra, V400)", - "as_sldd", "Super Little Devil (Astra, V200)", - "as_slde", "Super Little Devil (Astra, V101)", - "as_sltcl", "Slots Classic (?) (Astra)", - "as_srb", "Super Ring a Bell (Astra, V004)", - "as_srba", "Super Ring a Bell (Astra, V100)", - "as_srbb", "Super Ring a Bell (Astra, V101)", - "as_srbc", "Super Ring a Bell (Astra, V201)", - "as_srbd", "Super Ring a Bell (Astra, V202)", - "as_srbe", "Super Ring a Bell (Astra, V203)", - "as_stp", "Stampede (Astra, V103)", - "as_stpa", "Stampede (Astra, V102)", - "as_stpb", "Stampede (Astra, V105)", - "as_tbl", "Triple Bells (Astra, V104)", - "as_tbla", "Triple Bells (Astra, V105)", - "as_tblb", "Triple Bells (Astra, V106)", - "as_tblc", "Triple Bells (Astra, V103)", - "as_tbld", "Triple Bells (Astra, V304)", - "as_tble", "Triple Bells (Astra, V303)", - "as_tblf", "Triple Bells (Astra, V301)", - "as_td", "Twin Dragons (Astra, V103)", - "as_tem", "Temptation (Astra, V101)", - "as_tema", "Temptation (Astra, V006)", - "as_topsl", "Top Slot (Astra, V103)", - "as_topsla", "Top Slot (Astra, V104)", - "as_topslb", "Top Slot (Astra, V201)", - "as_topslc", "Top Slot (Astra, V203)", - "as_topsld", "Top Slot (Astra, V205)", - "as_twp", "Twin Pots (Astra, V106)", - "as_twpa", "Twin Pots (Astra, V104)", - "as_vcv", "Viva Cash Vegas (Astra, V005)", - "as_vcva", "Viva Cash Vegas (Astra, V107)", - "as_vcvb", "Viva Cash Vegas (Astra, V106)", - "as_vcvc", "Viva Cash Vegas (Astra, V104)", - "as_vcvd", "Viva Cash Vegas (Astra, V102)", - "as_vcve", "Viva Cash Vegas (Astra, V101)", - "as_vn", "Vegas Nights (Astra, V205)", - "as_ws", "Win Streak (Astra, V100)", - "as_ww", "Wicked Willy (Astra, V203)", - "as_wwa", "Wicked Willy (Astra, V204)", - "as_wwb", "Wicked Willy (Astra, V205)", - "as_wwc", "Wicked Willy (Astra, V104)", - "as_wwd", "Wicked Willy (Astra, V103)", - "as_wwe", "Wicked Willy (Astra, V102)", - "ashnojoe", "Ashita no Joe (Japan)", - "ashura", "Ashura Blaster (World)", - "ashuraj", "Ashura Blaster (Japan)", - "ashurau", "Ashura Blaster (US)", - "asideral", "Ataque Sideral (Spanish bootleg of UniWar S)", - "asndynmt", "Asian Dynamite", - "aso", "ASO - Armored Scrum Object", - "asoccer", "American Soccer", - "assault", "Assault (Rev B)", - "assaultj", "Assault (Japan)", - "assaultp", "Assault Plus (Japan)", - "astannie", "Asteroid Annie and the Aliens", - "astdelux", "Asteroids Deluxe (rev 3)", - "astdelux1", "Asteroids Deluxe (rev 1)", - "astdelux2", "Asteroids Deluxe (rev 2)", - "asterix", "Asterix (ver EAD)", - "asterixaad", "Asterix (ver AAD)", - "asterixeaa", "Asterix (ver EAA)", - "asterixeac", "Asterix (ver EAC)", - "asterixj", "Asterix (ver JAD)", - "asterock", "Asterock (Sidam bootleg of Asteroids)", - "asterockv", "Asterock (Videotron bootleg of Asteroids)", - "asteroid", "Asteroids (rev 4)", - "asteroid1", "Asteroids (rev 1)", - "asteroid2", "Asteroids (rev 2)", - "asteroidb", "Asteroids (bootleg on Lunar Lander hardware)", - "astinvad", "Astro Invader", - "astoneag", "Stone Age (Astro, Ver. ENG.03.A)", - "astorm", "Alien Storm (World, 2 Players, FD1094 317-0154)", - "astorm3", "Alien Storm (World, 3 Players, FD1094 317-0148)", - "astormb2", "Alien Storm (bootleg, set 2)", - "astormbl", "Alien Storm (bootleg, set 1)", - "astormj", "Alien Storm (Japan, 2 Players, FD1094 317-0146)", - "astormu", "Alien Storm (US, 3 Players, FD1094 317-0147)", - "astrass", "Astra SuperStars (J 980514 V1.002)", - "astrians", "Astrians (clone of Swarm)", - "astrob", "Astro Blaster (version 3)", - "astrob1", "Astro Blaster (version 1)", - "astrob2", "Astro Blaster (version 2)", - "astrob2a", "Astro Blaster (version 2a)", - "astrobg", "Astro Blaster (German)", - "astrof", "Astro Fighter (set 1)", - "astrof2", "Astro Fighter (set 2)", - "astrof3", "Astro Fighter (set 3)", - "astrofl", "Astro Flash (Japan)", - "astron", "Astron Belt", - "astronp", "Astron Belt (Pioneer LDV1000)", - "astropal", "Astropal", - "astrowar", "Astro Wars", - "astyanax", "The Astyanax", - "asuka", "Asuka & Asuka (World)", - "asukaj", "Asuka & Asuka (Japan)", - "asurabld", "Asura Blade - Sword of Dynasty (Japan)", - "asurabus", "Asura Buster - Eternal Warriors (Japan)", - "asylum", "Asylum (prototype)", - "atamanot", "Computer Quiz Atama no Taisou (Japan)", - "atarians", "The Atarians", - "atarifb", "Atari Football (revision 2)", - "atarifb1", "Atari Football (revision 1)", - "atarifb4", "Atari Football (4 players)", - "atarisy1", "Atari System 1 BIOS", - "ataxx", "Ataxx (set 1)", - "ataxxa", "Ataxx (set 2)", - "ataxxe", "Ataxx (Europe)", - "ataxxj", "Ataxx (Japan)", - "atehate", "Athena no Hatena ?", - "atetris", "Tetris (set 1)", - "atetrisa", "Tetris (set 2)", - "atetrisb", "Tetris (bootleg set 1)", - "atetrisb2", "Tetris (bootleg set 2)", - "atetrisc", "Tetris (cocktail set 1)", - "atetrisc2", "Tetris (cocktail set 2)", - "athena", "Athena", - "atla_ltd", "Atlantis (LTD)", - "atlantca", "Atlantica (Russia) (Atronic) (set 1)", - "atlantcaa", "Atlantica (Russia) (Atronic) (set 2)", - "atlantip", "Atlantis", - "atlantis", "Battle of Atlantis (set 1)", - "atlantis2", "Battle of Atlantis (set 2)", - "atlantisb", "Battle of Atlantis (bootleg)", - "atlantol", "Atlant Olimpic", - "atleta", "Atleta", - "atluspsx", "Atlus PSX", - "atombjt", "Atom (bootleg of Bombjack Twin)", - "atomboy", "Atomic Boy (revision B)", - "atomboya", "Atomic Boy (revision A)", - "atomicp", "Atomic Point (Korea)", - "atompunk", "Atomic Punk (US)", - "atpsx", "Atari PSX", - "atronic", "Atronic SetUp/Clear Chips (Russia, set 1)", - "atronica", "Atronic SetUp/Clear Chips (Russia, set 2)", - "attack", "Attack", - "attackfc", "Attack Force", - "attckexd", "Attack [TTL]", - "attckufo", "Attack Ufo", - "attila", "Attila The Hun", - "atvtrack", "ATV Track (set 1)", - "atvtracka", "ATV Track (set 2)", - "atworld", "Around The World (Version 1.4R CGA)", - "atworldd1", "Around The World (Version 1.3R CGA)", - "atworlde1", "Around The World (Version 1.3E CGA)", - "aurail", "Aurail (set 3, US, unprotected)", - "aurail1", "Aurail (set 2, World, FD1089B 317-0168)", - "aurailj", "Aurail (set 1, Japan, FD1089A 317-0167)", - "ausfache", "Akatsuki Blitzkampf Ausf Achse", - "aust201", "Austin Powers (2.01)", - "aust300", "Austin Powers (3.00)", - "aust301", "Austin Powers (3.01)", - "austin", "Austin Powers (3.02)", - "austinf", "Austin Powers (France)", - "austing", "Austin Powers (Germany)", - "austini", "Austin Powers (Italy)", - "austnew", "Austin Powers (ARM7 Sound Board)", - "autmoon", "Autumn Moon (1VXFC5488, New Zealand)", - "automat", "Automat (bootleg of Robocop)", - "av2mj1bb", "AV2Mahjong No.1 Bay Bridge no Seijo (Japan)", - "av2mj2rg", "AV2Mahjong No.2 Rouge no Kaori (Japan)", - "avalnche", "Avalanche", - "avalon13", "The Key Of Avalon 1.3 - Chaotic Sabbat (client) (Rev C) (GDT-0010C)", - "avalon20", "The Key Of Avalon 2.0 - Eutaxy and Commandment (client) (Rev B) (GDT-0017B)", - "avalons", "The Key Of Avalon - The Wizard Master (server) (Rev C) (GDT-0005C)", - "avefenix", "Ave Fenix (Spanish bootleg of Phoenix)", - "avenger", "Avenger [TTL]", - "avengers", "Avengers (US set 1)", - "avengers2", "Avengers (US set 2)", - "avengrgs", "Avengers In Galactic Storm (US)", - "avengrgsj", "Avengers In Galactic Storm (Japan)", - "avsp", "Alien vs. Predator (Euro 940520)", - "avspa", "Alien vs. Predator (Asia 940520)", - "avspd", "Alien vs. Predator (Euro 940520 Phoenix Edition) (bootleg)", - "avsph", "Alien vs. Predator (Hispanic 940520)", - "avspirit", "Avenging Spirit", - "avspj", "Alien vs. Predator (Japan 940520)", - "avspu", "Alien vs. Predator (USA 940520)", - "avtbingo", "Arrow Bingo", - "avtnfl", "NFL (ver 109)", - "avtsym14", "Symbols (ver 1.4)", - "avtsym25", "Symbols (ver 2.5)", - "awbios", "Atomiswave Bios", - "aztarac", "Aztarac", - "azumanga", "Azumanga Daioh Puzzle Bobble (GDL-0018)", - "azurian", "Azurian Attack", - "b83catms", "Cat & Mouse (Bellfruit) (System 83)", - "b83cops", "Cops & Robbers (Bellfruit) (System 83)", - "b85bdclb", "Big Deal Club (System 85, set 1)", - "b85bdclba", "Big Deal Club (System 85, set 2)", - "b85bdclbb", "Big Deal Club (System 85, set 3)", - "b85cb7p", "Bar Sevens (Bellfruit) (Protocol) (System 85)", - "b85cblit", "Cash Blitz (System 85, set 1)", - "b85cblita", "Cash Blitz (System 85, set 2)", - "b85cblitb", "Cash Blitz (System 85, set 3)", - "b85cexpl", "Cash Explosion (System 85)", - "b85clbpm", "Club Premier (System 85)", - "b85cops", "Cops 'n' Robbers (Dutch) (Bellfruit) (System 85)", - "b85dbldl", "Double Dealer (System 85, set 1)", - "b85dbldla", "Double Dealer (System 85, set 2)", - "b85dbldlb", "Double Dealer (System 85, set 3)", - "b85disc", "Discovey (Dutch) (Bellfruit) (System 85)", - "b85hilo", "Hi Lo Silver (System 85, set 1)", - "b85hiloa", "Hi Lo Silver (System 85, set 2)", - "b85jkwld", "Jokers Wild (Dutch) (System 85)", - "b85jpclb", "Jackpot Club (System 85, set 1)", - "b85jpclba", "Jackpot Club (System 85, set 2)", - "b85jpclbb", "Jackpot Club (System 85, set 3)", - "b85jpclbc", "Jackpot Club (System 85, set 4)", - "b85koc", "King of Clubs (Bellfruit) (System 85, set 1)", - "b85koca", "King of Clubs (Bellfruit) (System 85, set 2)", - "b85luckd", "Lucky Dice (Dutch) (System 85)", - "b85lucky", "Lucky Cards (Dutch) (System 85)", - "b85potp", "Pick Of The Pack (System 85)", - "b85ritz", "The Ritz (System 85, set 1)", - "b85ritza", "The Ritz (System 85, set 2)", - "b85ritzb", "The Ritz (System 85, set 3)", - "b85ritzc", "The Ritz (System 85, set 4)", - "b85ritzd", "The Ritz (System 85, set 5)", - "b85royal", "The Royal (System 85)", - "b85scard", "Supercards (Dutch, Game Card 39-340-271?) (System 85)", - "b85sngam", "Super Nudge Gambler (System 85)", - "baboshka", "Baboshka (Russia) (Atronic)", - "babydad", "Baby Dado", - "babypac", "Baby Pac-Man (set 1)", - "babypac2", "Baby Pac-Man (set 2)", - "babypkr", "Baby Poker", - "backfire", "Backfire! (set 1)", - "backfirea", "Backfire! (set 2)", - "backfirt", "Back Fire (Tecmo, bootleg)", - "backgamn", "Backgammon", - "baddudes", "Bad Dudes vs. Dragonninja (US)", - "badgirls", "Bad Girls", - "badlands", "Bad Lands", - "badlandsb", "Bad Lands (bootleg)", - "badlandsb2", "Bad Lands (bootleg, alternate)", - "bagman", "Bagman", - "bagmanf", "Bagman (bootleg on Crazy Kong hardware)", - "bagmanm2", "Bagman (bootleg on Moon Cresta hardware, set 2)", - "bagmanmc", "Bagman (bootleg on Moon Cresta hardware, set 1)", - "bagmans", "Bagman (Stern Electronics, set 1)", - "bagmans2", "Bagman (Stern Electronics, set 2)", - "bagnard", "Le Bagnard (set 1)", - "bagnarda", "Le Bagnard (set 2)", - "bagnardi", "Le Bagnard (Itisa, Spain)", - "bakatono", "Bakatonosama Mahjong Manyuuki (MOM-002)(MOH-002)", - "bakubaku", "Baku Baku Animal (J 950407 V1.000)", - "bakubrkr", "Bakuretsu Breaker", - "bakuhatu", "Mahjong Bakuhatsu Junjouden (Japan)", - "bakutotu", "Bakutotsu Kijuutei", - "balcube", "Bal Cube", - "ballbomb", "Balloon Bomber", - "ballboy", "Ball Boy", - "ballbros", "Balloon Brothers", - "balonfgt", "Vs. Balloon Fight (set BF4 A-3)", - "baluba", "Baluba-louk no Densetsu (Japan)", - "bam2", "Bust a Move 2 (Japanese ROM ver. 1999/07/17 10:00:00)", - "bananadr", "Mahjong Banana Dream [BET] (Japan 891124)", - "bananas", "Bananas Go Bahamas (set 1)", - "bananasa", "Bananas Go Bahamas (set 2)", - "banbam", "BanBam", - "bandido", "Bandido", - "bang", "Bang!", - "bangball", "Bang Bang Ball (v1.05)", - "bangbead", "Bang Bead", - "bangj", "Gun Gabacho (Japan)", - "bankp", "Bank Panic", - "bankrob", "Bank Robbery (Ver. 3.32)", - "bankroba", "Bank Robbery (Ver. 2.00)", - "baraduke", "Baraduke", - "barbball", "Barroom Baseball (prototype)", - "barbwire", "Barb Wire", - "barline", "Barline (Japan?)", - "barra_l1", "Barracora (L-1)", - "barricad", "Barricade", - "barrier", "Barrier", - "baryon", "Baryon - Future Assault", - "basebal2", "Baseball: The Season II", - "bass", "Sega Bass Fishing (Japan)", - "bassang2", "Bass Angler 2 (GE865 VER. JAA)", - "bassangl", "Bass Angler (GE765 VER. JAA)", - "basschal", "Sega Bass Fishing Challenge", - "bassdx", "Sega Bass Fishing Deluxe (Japan)", - "batcir", "Battle Circuit (Euro 970319)", - "batcira", "Battle Circuit (Asia 970319)", - "batcird", "Battle Circuit (Euro 970319 Phoenix Edition) (bootleg)", - "batcirj", "Battle Circuit (Japan 970319)", - "batlball", "Battle Balls (Germany)", - "batlballa", "Battle Balls (Hong Kong)", - "batlballe", "Battle Balls (Hong Kong, earlier)", - "batlballu", "Battle Balls (US)", - "batlbubl", "Battle Bubble (v2.00)", - "batlgear", "Battle Gear", - "batlgr2", "Battle Gear 2 (v2.04J)", - "batlgr2a", "Battle Gear 2 (v2.01J)", - "batlzone", "Battle Zone (bootleg of Mayday)", - "batman", "Batman", - "batman2", "Batman Part 2", - "batmanf", "Batman Forever (4.0)", - "batmanf3", "Batman Forever (3.0)", - "batmanfr", "Batman Forever (JUE 960507 V1.000)", - "batrider", "Armed Police Batrider (Europe) (Fri Feb 13 1998)", - "batriderc", "Armed Police Batrider (China) (Fri Feb 13 1998)", - "batriderj", "Armed Police Batrider (Japan, B version) (Fri Feb 13 1998)", - "batriderja", "Armed Police Batrider (Japan, older version) (Mon Dec 22 1997)", - "batriderk", "Armed Police Batrider (Korea) (Fri Feb 13 1998)", - "batridert", "Armed Police Batrider (Taiwan) (Mon Dec 22 1997)", - "batrideru", "Armed Police Batrider (USA) (Fri Feb 13 1998)", - "batsugun", "Batsugun", - "batsuguna", "Batsugun (older set)", - "batsugunsp", "Batsugun - Special Version", - "battlane", "Battle Lane! Vol. 5 (set 1)", - "battlane2", "Battle Lane! Vol. 5 (set 2)", - "battlane3", "Battle Lane! Vol. 5 (set 3)", - "battlcry", "Battlecry", - "battlera", "Battle Rangers (World)", - "battles", "Battles", - "battlex", "Battle Cross", - "battlnts", "Battlantis (program code G)", - "battlntsa", "Battlantis (program code F)", - "battlntsj", "Battlantis (Japan, program code E)", - "battroad", "The Battle-Road", - "bayroute", "Bay Route (set 3, World, FD1094 317-0116)", - "bayroute1", "Bay Route (set 1, US, unprotected)", - "bayrouteb1", "Bay Route (encrypted, protected bootleg)", - "bayrouteb2", "Bay Route (Datsu bootleg)", - "bayroutej", "Bay Route (set 2, Japan, FD1094 317-0115)", - "baywatch", "Baywatch", - "bbakraid", "Battle Bakraid - Unlimited Version (USA) (Tue Jun 8 1999)", - "bbakraidj", "Battle Bakraid - Unlimited Version (Japan) (Tue Jun 8 1999)", - "bbakraidja", "Battle Bakraid (Japan) (Wed Apr 7 1999)", - "bballoon", "BnB Arcade", - "bballrmt", "Baseball (Ramtek) [TTL]", - "bballs", "Bouncing Balls", - "bbb108", "Big Bang Bar (Beta 1.8 US)", - "bbb109", "Big Bang Bar (Beta 1.9 US)", - "bbbowlin", "Big Ball Bowling (Bowler)", - "bbbxing", "Best Bout Boxing", - "bbeltzac", "Black Belt (Zaccaria)", - "bbmanw", "Bomber Man World / New Dyna Blaster - Global Quest", - "bbmanwj", "Bomber Man World (Japan)", - "bbmanwja", "Bomber Man World (Japan, revised sound hardware)", - "bbnny_l2", "Bugs Bunny Birthday Ball (L-2)", - "bbnny_lu", "Bugs Bunny Birthday Ball (LU-2) European", - "bbonk", "Bigfoot Bonkers", - "bbprot", "unknown fighting game 'BB' (prototype)", - "bbros", "Buster Bros. (USA)", - "bbust2", "Beast Busters 2nd Nightmare", - "bbusters", "Beast Busters (World)", - "bbustersu", "Beast Busters (US, Version 2)", - "bcats_l2", "Bad Cats (LA-2)", - "bcats_l5", "Bad Cats (L-5)", - "bchance", "Bonne Chance! (French/English)", - "bchancep", "Bonne Chance! (Golden Poker prequel HW)", - "bchopper", "Battle Chopper", - "bcrusher", "Bone Crusher", - "bcruzm12", "Battle Cruiser M-12", - "bcstry", "B.C. Story (set 1)", - "bcstrya", "B.C. Story (set 2)", - "bdrdown", "Border Down (Rev A) (GDL-0023A)", - "beachpt", "Beach Patrol (Russia) (Atronic)", - "beachspi", "Beach Spikers (GDS-0014)", - "beaminv", "Beam Invader", - "bearnec", "Bear Necessities (Russia) (Atronic)", - "beastf", "Beastie Feastie", - "beastrzr", "Beastorizer (USA)", - "beastrzrb", "Beastorizer (USA bootleg)", - "beatclck", "Beat the Clock", - "beathead", "BeatHead (prototype)", - "beautyb", "Beauty Block", - "beebop", "Bee Bop (set 1)", - "beebopa", "Bee Bop (set 2)", - "beebopb", "Bee Bop (set 3)", - "beebopc", "Bee Bop (set 4)", - "beebopd", "Bee Bop (set 5)", - "beebope", "Bee Bop (set 6)", - "beeline", "Beeline (39-360-075)", - "beetlem", "Beetlemania (set 1)", - "beetlema", "Beetlemania (set 2)", - "beetlemb", "Beetlemania (set 3)", - "beetlemc", "Beetlemania (set 4)", - "beetlemd", "Beetlemania (set 5)", - "beetleup", "Beetles Unplugged (Russia) (Atronic)", - "beezer", "Beezer (set 1)", - "beezer1", "Beezer (set 2)", - "begas", "Bega's Battle (Revision 3)", - "begas1", "Bega's Battle (Revision 1)", - "bel", "Behind Enemy Lines", - "bellring", "Bell Ringer", - "benberob", "Ben Bero Beh (Japan)", - "berabohm", "Beraboh Man (Japan, Rev C)", - "berabohmb", "Beraboh Man (Japan, Rev B)", - "berenstn", "The Berenstain Bears in Big Paw's Cave", - "berlwall", "The Berlin Wall", - "berlwallt", "The Berlin Wall (bootleg ?)", - "bermudat", "Bermuda Triangle (World?)", - "bermudata", "Bermuda Triangle (World Wars) (US)", - "bermudatj", "Bermuda Triangle (Japan)", - "berzerk", "Berzerk (set 1)", - "berzerk1", "Berzerk (set 2)", - "berzerkg", "Berzerk (German Speech)", - "bestbest", "Best Of Best", - "bestleag", "Best League (bootleg of Big Striker, Italian Serie A)", - "bestleaw", "Best League (bootleg of Big Striker, World Cup)", - "bestri", "Bestri (Korea)", - "bg_barmy", "Barmy Army (BGT)", - "bg_ddb", "Ding Dong Bells (BGT)", - "bg_max", "Max A Million (BGT) (set 1)", - "bg_maxa", "Max A Million (BGT) (set 2)", - "bgaregga", "Battle Garegga (Europe / USA / Japan / Asia) (Sat Feb 3 1996)", - "bgareggabl", "1945 Part-2 (Chinese hack of Battle Garegga)", - "bgareggacn", "Battle Garegga - Type 2 (Denmark / China) (Tue Apr 2 1996)", - "bgareggahk", "Battle Garegga (Austria / Hong Kong) (Sat Feb 3 1996)", - "bgaregganv", "Battle Garegga - New Version (Austria / Hong Kong) (Sat Mar 2 1996)", - "bgareggat2", "Battle Garegga - Type 2 (Europe / USA / Japan / Asia) (Sat Mar 2 1996)", - "bgareggatw", "Battle Garegga (Taiwan / Germany) (Thu Feb 1 1996)", - "bguns_l7", "Big Guns (L-7)", - "bguns_l8", "Big Guns (L-8)", - "bguns_la", "Big Guns (L-A)", - "bguns_p1", "Big Guns (P-1)", - "bhead2k", "Beach Head 2000 Install - 05/27/03", - "bhead2k2", "Beach Head 2002 Install - 05/27/03", - "bhead2k3", "Beach Head 2003 Desert War Install - 05/27/03", - "bhead2ka", "Beach Head 2000 Install - 09/16/01", - "bhol_ltd", "Black Hole (LTD)", - "big10", "Big 10", - "bigappg", "The Big Apple (2131-13, U5-0)", - "bigbang", "Big Bang (9th Nov. 1993)", - "bigblue", "Big Blue (Russia) (Atronic)", - "bigbucks", "Big Bucks", - "bigd2", "Big D2", - "bigdeal", "Big Deal (Hungarian, set 1)", - "bigdealb", "Big Deal (Hungarian, set 2)", - "bigevglf", "Big Event Golf (US)", - "bigevglfj", "Big Event Golf (Japan)", - "bigfghtr", "Tatakae! Big Fighter (Japan)", - "bigfight", "Big Fight - Big Trouble In The Atlantic Ocean", - "biggame", "Big Game", - "bighouse", "Big House", - "bighurt", "Frank Thomas' Big Hurt (rev.3)", - "bigkarnk", "Big Karnak", - "bigkong", "Big Kong", - "bigprowr", "The Big Pro Wrestling!", - "bigrun", "Big Run (11th Rallye version)", - "bigstrik", "Big Striker", - "bigstrkb", "Big Striker (bootleg)", - "bigstrkba", "Big Striker (bootleg w/Italian teams)", - "bigtown", "Big Town", - "bigtwin", "Big Twin", - "bigtwinb", "Big Twin (No Girls Conversion)", - "bijokkog", "Bijokko Gakuen (Japan 880116)", - "bijokkoy", "Bijokko Yume Monogatari (Japan 870925)", - "bikiniko", "BiKiNikko - Okinawa de Ippai Shichaimashita (Japan)", - "bikkuric", "Bikkuri Card (Japan)", - "billiard", "The Billiards (Video Hustler bootleg)", - "billlist", "Billard List", - "bilyard", "Billiard", - "bingo", "Bingo", - "bingoc", "Bingo Circus (Rev. A 891001)", - "bingoman", "Bingo Mania (P03-P07-P14)", - "bingomana", "Bingo Mania (A03)", - "bingor1", "Bingo Roll / Bell Star? (set 1)", - "bingor2", "Bingo Roll / Bell Star? (set 2)", - "bingor3", "Bingo Roll / Bell Star? (set 3)", - "bingor4", "Bingo Roll / Bell Star? (set 4)", - "bingor5", "Bingo Roll / Bell Star V3? (set 5)", - "bingowng", "Bingo (set 1)", - "bingownga", "Bingo (set 2)", - "bioatack", "Bio Attack", - "biofreak", "BioFreaks (prototype)", - "biomtoy", "Biomechanical Toy (Ver. 1.0.1885)", - "biomtoya", "Biomechanical Toy (Ver. 1.0.1884)", - "bionicc", "Bionic Commando (Euro)", - "bionicc1", "Bionic Commando (US set 1)", - "bionicc2", "Bionic Commando (US set 2)", - "bioship", "Bio-ship Paladin", - "biplane4", "Biplane 4 [TTL]", - "birdiy", "Birdiy", - "birdtry", "Birdie Try (Japan)", - "bishi", "Bishi Bashi Championship Mini Game Senshuken (ver JAA, 3 Players)", - "bishjan", "Bishou Jan (Japan, Ver. 2.03)", - "bjourney", "Blue's Journey / Raguy (ALM-001)(ALH-001)", - "bjpoker", "Poker / Black Jack (Model 7521)", - "bjtwin", "Bombjack Twin (set 1)", - "bjtwina", "Bombjack Twin (set 2)", - "bjtwinp", "Bombjack Twin (prototype? with adult pictures)", - "bk2k_l4", "Black Knight 2000 (L-4)", - "bk2k_lg1", "Black Knight 2000 (LG-1)", - "bk2k_lg3", "Black Knight 2000 (LG-3)", - "bk2k_pu1", "Black Knight 2000 (PU-1)", - "bk_f4", "Black Knight (L-4, French speech)", - "bk_l3", "Black Knight (L-3)", - "bk_l4", "Black Knight (L-4)", - "bking", "Birdie King", - "bking2", "Birdie King 2", - "bking3", "Birdie King 3", - "bkrtmaq", "Bakuretsu Quiz Ma-Q Dai Bouken (Japan)", - "black", "Czernyj Korabl (Arcade bootleg of ZX Spectrum 'Blackbeard')", - "black100", "Blackwater 100", - "black100s", "Blackwater 100 (Single Ball Play)", - "blackbd", "Black Beard (Russia, set 1)", - "blackbda", "Black Beard (Russia, set 2)", - "blackbdb", "Black Beard (Russia, set 3)", - "blackblt", "Black Belt", - "blackjck", "Black Jack (Pinball)", - "blackt96", "Black Touch '96", - "bladestl", "Blades of Steel (version T)", - "bladestle", "Blades of Steel (version E)", - "bladestll", "Blades of Steel (version L)", - "blakpyra", "Black Pyramid", - "blandia", "Blandia", - "blandiap", "Blandia (prototype)", - "blasted", "Blasted", - "blaster", "Blaster", - "blasterkit", "Blaster (conversion kit)", - "blastero", "Blaster (location test)", - "blasto", "Blasto", - "blastoff", "Blast Off (Japan)", - "blazeon", "Blaze On (Japan)", - "blazer", "Blazer (Japan)", - "blazlaz", "Blazing Lazers", - "blazstar", "Blazing Star", - "blbeauty", "Black Beauty (Shuffle)", - "blckhole", "Black Hole (Rev. 4)", - "blckhole2", "Black Hole (Rev. 2)", - "blckhols", "Black Hole (Sound Only)", - "blckjack", "Black Jack", - "bldwolf", "Bloody Wolf (US)", - "bldwolfj", "Narazumono Sentoubutai Bloody Wolf (Japan)", - "bldyr3b", "Bloody Roar 3 (bootleg)", - "bldyroar", "Bloody Roar (Japan)", - "bldyror2", "Bloody Roar 2 (World)", - "bldyror2a", "Bloody Roar 2 (Asia)", - "bldyror2j", "Bloody Roar 2 (Japan)", - "bldyror2u", "Bloody Roar 2 (USA)", - "blitz", "NFL Blitz (boot ROM 1.2)", - "blitz11", "NFL Blitz (boot ROM 1.1)", - "blitz2k", "NFL Blitz 2000 Gold Edition", - "blitz99", "NFL Blitz '99", - "blkbustr", "BlockBuster", - "blkdrgon", "Black Dragon (Japan)", - "blkdrgonb", "Black Dragon (bootleg)", - "blkfever", "Black Fever", - "blkheart", "Black Heart", - "blkheartj", "Black Heart (Japan)", - "blkhole", "Black Hole", - "blkou_f1", "Blackout (L-1, French Speech)", - "blkou_l1", "Blackout (L-1)", - "blkou_t1", "Blackout (T-1)", - "blkpnthr", "Black Panther", - "blkrhino", "Black Rhino (3VXFC5344, New Zealand)", - "blkshpsq", "Black Sheep Squadron", - "blktiger", "Black Tiger", - "blktigera", "Black Tiger (older)", - "blktigerb1", "Black Tiger (bootleg set 1)", - "blktigerb2", "Black Tiger (bootleg set 2)", - "blktouch", "Black Touch (Korea)", - "blmbycar", "Blomby Car", - "blmbycaru", "Blomby Car (not encrypted)", - "block", "Block Block (World 910910)", - "block2", "Block 2 (S.P.A. Co. bootleg)", - "blockade", "Blockade", - "blockbl", "Block Block (bootleg)", - "blockcar", "Block Carnival / Thunder & Lightning 2", - "blockcarb", "Block Carnival / Thunder & Lightning 2 (bootleg)", - "blocken", "Blocken (Japan)", - "blockgal", "Block Gal (MC-8123B, 317-0029)", - "blockgalb", "Block Gal (bootleg)", - "blockhl", "Block Hole", - "blockj", "Block Block (Japan 910910)", - "blockjoy", "Block Block (World 911106 Joystick)", - "blockout", "Block Out (set 1)", - "blockout2", "Block Out (set 2)", - "blockoutj", "Block Out (Japan)", - "bloodbro", "Blood Bros. (set 1)", - "bloodbroa", "Blood Bros. (set 2)", - "bloodbrob", "Blood Bros. (set 3)", - "bloodstm", "Blood Storm (v2.22)", - "bloodstm10", "Blood Storm (v1.04)", - "bloodstm11", "Blood Storm (v1.10)", - "bloodstm21", "Blood Storm (v2.10)", - "bloodstm22", "Blood Storm (v2.20)", - "bloodwar", "Blood Warrior", - "bloto", "Blits Loto (Russia) (Extrema)", - "bloxeed", "Bloxeed (Japan, FD1094 317-0139)", - "bloxeedc", "Bloxeed (World, C System)", - "bloxeedu", "Bloxeed (US, C System)", - "blpearl", "Black Pearl (Russia) (Extrema)", - "blstroid", "Blasteroids (rev 4)", - "blstroid2", "Blasteroids (rev 2)", - "blstroid3", "Blasteroids (rev 3)", - "blstroidg", "Blasteroids (German, rev 2)", - "blstroidh", "Blasteroids (with heads)", - "blswhstl", "Bells & Whistles (Version L)", - "bluehawk", "Blue Hawk", - "bluehawkn", "Blue Hawk (NTC)", - "blueprnt", "Blue Print (Midway)", - "blueprntj", "Blue Print (Jaleco)", - "blueshrk", "Blue Shark", - "blvelvet", "Black Velvet", - "blzntrnd", "Blazing Tornado", - "bm1stmix", "beatmania (ver JA-B)", - "bm2ndmix", "beatmania 2nd MIX (ver JA-B)", - "bm2ndmxa", "beatmania 2nd MIX (ver JA-A)", - "bm37th", "Beatmania III Append 7th Mix", - "bm3final", "Beatmania III The Final", - "bm3rdmix", "beatmania 3rd MIX (ver JA-A)", - "bm4thmix", "beatmania 4th MIX (ver JA-A)", - "bm5thmix", "beatmania 5th MIX (ver JA-A)", - "bm6thmix", "beatmania 6th MIX (ver JA-A)", - "bm7thmix", "beatmania 7th MIX (ver JA-B)", - "bmaster", "Blade Master (World)", - "bmcbowl", "Konkyuu no Hoshi", - "bmclubmx", "beatmania Club MIX (ver JA-A)", - "bmcompm2", "beatmania complete MIX 2 (ver JA-A)", - "bmcompmx", "beatmania complete MIX (ver JA-B)", - "bmcorerm", "beatmania CORE REMIX (ver JA-A)", - "bmcpokr", "unknown BMC poker game", - "bmdct", "beatmania featuring Dreams Come True (ver JA-A)", - "bmf_at", "Batman Forever (Austrian)", - "bmf_be", "Batman Forever (Belgian)", - "bmf_ch", "Batman Forever (Swiss)", - "bmf_cn", "Batman Forever (Canadian)", - "bmf_de", "Batman Forever (German)", - "bmf_fr", "Batman Forever (French)", - "bmf_it", "Batman Forever (Italian)", - "bmf_jp", "Batman Forever (Japanese)", - "bmf_nl", "Batman Forever (Dutch)", - "bmf_no", "Batman Forever (Norwegian)", - "bmf_sp", "Batman Forever (Spanish)", - "bmf_sv", "Batman Forever (Swedish)", - "bmf_time", "Batman Forever (Timed Play)", - "bmf_uk", "Batman Forever (English)", - "bmfinal", "beatmania THE FINAL (ver JA-A)", - "bmiidx", "beatmania IIDX (863 JAB)", - "bmiidx2", "beatmania IIDX 2nd style (GC985 JAA)", - "bmiidx3", "beatmania IIDX 3rd style (GC992 JAC)", - "bmiidx3a", "beatmania IIDX 3rd style (GC992 JAA)", - "bmiidx4", "beatmania IIDX 4th style (GCA03 JAA)", - "bmiidx5", "beatmania IIDX 5th style (GCA17 JAA)", - "bmiidx6", "beatmania IIDX 6th style (GCB4U JAB)", - "bmiidx6a", "beatmania IIDX 6th style (GCB4U JAA)", - "bmiidx7", "beatmania IIDX 7th style (GCB44 JAA)", - "bmiidx8", "beatmania IIDX 8th style (GCC44 JAA)", - "bmiidxa", "beatmania IIDX (863 JAA)", - "bmiidxc", "beatmania IIDX with DDR 2nd Club Version (896 JAB)", - "bmiidxc2", "Beatmania IIDX Substream with DDR 2nd Club Version 2 (984 A01 BM)", - "bmiidxca", "beatmania IIDX with DDR 2nd Club Version (896 JAA)", - "bmiidxs", "beatmania IIDX Substream (983 JAA)", - "bmx", "BMX", - "bnglngby", "Vs. Raid on Bungeling Bay (RD4-2 B)", - "bnj", "Bump 'n' Jump", - "bnjm", "Bump 'n' Jump (Midway)", - "bnstars", "Vs. Janshi Brandnew Stars (MegaSystem32 Version)", - "bnstars1", "Vs. Janshi Brandnew Stars", - "bntyhunt", "Bounty Hunter (GCTech Co., LTD)", - "bnzabros", "Bonanza Bros (US, Floppy DS3-5000-07d? Based)", - "bnzabrosj", "Bonanza Bros (Japan, Floppy DS3-5000-07b Based)", - "bnzai_g3", "Banzai Run (L-3) Germany", - "bnzai_l1", "Banzai Run (L-1)", - "bnzai_l3", "Banzai Run (L-3)", - "bnzai_pa", "Banzai Run (P-A)", - "boblbobl", "Bobble Bobble (set 1)", - "boblbobl2", "Bobble Bobble (set 2)", - "bodyslam", "Body Slam (8751 317-0015)", - "bogeyman", "Bogey Manor", - "boggy84", "Boggy '84", - "boggy84b", "Boggy '84 (bootleg)", - "bombbee", "Bomb Bee", - "bomber", "Bomber (bootleg of Scramble)", - "bombjack", "Bomb Jack (set 1)", - "bombjack2", "Bomb Jack (set 2)", - "bombjackt", "Bomb Jack (Tecfri, Spain)", - "bombkick", "Bomb Kick (set 1)", - "bombkicka", "Bomb Kick (set 2)", - "bomblord", "Bomber Lord (bootleg)", - "bombrman", "Bomber Man (Japan)", - "bombsa", "Bombs Away", - "bonanza", "Touchstar Bonanza (Revision 3)", - "bonanzar2", "Touchstar Bonanza (Revision 2)", - "bonebstr", "Bone Busters Inc.", - "bongo", "Bongo", - "bonkadv", "B.C. Kid / Bonk's Adventure / Kyukyoku!! PC Genjin", - "bonuscrd", "Bonus Card (Austrian)", - "bonuscrda", "Bonus Card (Austrian, ATG Electronic hack)", - "bonzeadv", "Bonze Adventure (World, Newer)", - "bonzeadvo", "Bonze Adventure (World, Older)", - "bonzeadvu", "Bonze Adventure (US)", - "boobhack", "Booby Kids (Italian manufactured graphic hack / bootleg of Kid no Hore Hore Daisakusen (bootleg))", - "boogwing", "Boogie Wings (Euro v1.5, 92.12.07)", - "boogwinga", "Boogie Wings (Asia v1.5, 92.12.07)", - "bookra", "Book Of Ra (set 1)", - "bookthr", "Book Theatre (Ver 1.2)", - "boomrang", "Boomer Rang'r / Genesis (set 1)", - "boomranga", "Boomer Rang'r / Genesis (set 2)", - "boonggab", "Boong-Ga Boong-Ga (Spank'em!)", - "bootcamp", "Boot Camp", - "boothill", "Boot Hill", - "bop_l2", "The Machine: Bride of Pinbot (L-2)", - "bop_l3", "The Machine: Bride of Pinbot (L-3)", - "bop_l4", "The Machine: Bride of Pinbot (L-4)", - "bop_l5", "The Machine: Bride of Pinbot (L-5)", - "bop_l6", "The Machine: Bride of Pinbot (L-6)", - "bop_l7", "The Machine: Bride of Pinbot (L-7)", - "borench", "Borench", - "borntofi", "Born To Fight", - "bosco", "Bosconian (new version)", - "boscomd", "Bosconian (Midway, new version)", - "boscomdo", "Bosconian (Midway, old version)", - "boscoo", "Bosconian (old version)", - "boscoo2", "Bosconian (older version)", - "botanic", "Botanic (French)", - "botss", "Battle of the Solar System (rev. 1.1a 7/23/92)", - "botss11", "Battle of the Solar System (rev. 1.1 3/24/92)", - "bottl10b", "Bottle 10 (Italian, set 2)", - "bottle10", "Bottle 10 (Italian, set 1)", - "bottom9", "Bottom of the Ninth (version T)", - "bottom9n", "Bottom of the Ninth (version N)", - "bouldash", "Boulder Dash / Boulder Dash Part 2 (World)", - "bouldashj", "Boulder Dash / Boulder Dash Part 2 (Japan)", - "bounty", "The Bounty", - "bountyh", "Bounty Hunter", - "bowarrow", "Bow & Arrow (Prototype)", - "bowl3d", "3-D Bowling", - "bowler", "Bowling Alley", - "bowlrama", "Bowl-O-Rama", - "bowltry", "Bowling Try", - "boxer", "Boxer (prototype)", - "boxingb", "Boxing Bugs", - "boxingm", "Boxing Mania (ver JAA)", - "boxyboy", "Boxy Boy (SB?)", - "bpoker", "Video Poker (v1403)", - "br_l1", "Black Rose (L-1)", - "br_l3", "Black Rose (L-3)", - "br_l4", "Black Rose (L-4)", - "br_p17", "Black Rose (SP-1)", - "bradley", "Bradley Trainer", - "brain", "Brain", - "brapboys", "B.Rap Boys (World)", - "brapboysj", "B.Rap Boys Special (Japan)", - "brapboysu", "B.Rap Boys Special (US)", - "brasil", "Bra$il (Version 3)", - "brasil86", "Brasil 86", - "brasil87", "Brasil 87", - "brasil89", "Brasil 89 (set 1)", - "brasil89a", "Brasil 89 (set 2)", - "brasil93", "Brasil 93", - "braveff", "Brave Fire Fighters", - "brdrlinb", "Borderline (Karateco bootleg)", - "brdrline", "Borderline", - "brdrlinet", "Borderline (Tranquilizer Gun conversion)", - "brdrlins", "Borderline (Sidam bootleg)", - "break86", "Break '86", - "breakers", "Breakers", - "breakrev", "Breakers Revenge", - "breywood", "Breywood (Japan revision 2)", - "brickyrd", "Brickyard", - "brickzn", "Brick Zone (v5.0, Joystick)", - "brickzn11", "Brick Zone (v1.1)", - "brickznv4", "Brick Zone (v4.0, Spinner)", - "brival", "Burning Rival (World)", - "brivalj", "Burning Rival (Japan)", - "brix", "Brix", - "brixian", "Brixian", - "brkthru", "Break Thru (US)", - "brkthruj", "Kyohkoh-Toppa (Japan)", - "brod", "Brodjaga (Arcade bootleg of ZX Spectrum 'Inspector Gadget and the Circus of Fear')", - "bronx", "Bronx", - "brooklyn", "Brooklyn (set 1) (Bingo)", - "brooklyna", "Brooklyn (set 2) (Bingo)", - "brooks", "Brooks & Dunn (rev.T1)", - "brubber", "Burnin' Rubber", - "brutforc", "Brute Force", - "brvblade", "Brave Blade (World)", - "brvbladea", "Brave Blade (Asia)", - "brvbladej", "Brave Blade (Japan)", - "brvbladeu", "Brave Blade (USA)", - "brvteam", "Brave Team", - "bs94", "Buena Suerte '94", - "bsb105", "Breakshot (Beta)", - "bshark", "Battle Shark (World)", - "bsharkj", "Battle Shark (Japan)", - "bsharkjjs", "Battle Shark (Japan, Joystick)", - "bsharku", "Battle Shark (US)", - "bsktball", "Basketball", - "bsplash", "Banana Splash (set 1)", - "bssoccer", "Back Street Soccer (KRB-0031 PCB)", - "bssoccera", "Back Street Soccer (KRB-0032A PCB)", - "bstars", "Baseball Stars Professional (NGM-002)", - "bstars2", "Baseball Stars 2", - "bstarsh", "Baseball Stars Professional (NGH-002)", - "bstrk_l1", "Big Strike (Shuffle) (L-1)", - "bsuerte", "Buena Suerte (Spanish, set 1)", - "bsuertea", "Buena Suerte (Spanish, set 2)", - "bsuerteb", "Buena Suerte (Spanish, set 3)", - "bsuertec", "Buena Suerte (Spanish, set 4)", - "bsuerted", "Buena Suerte (Spanish, set 5)", - "bsuertee", "Buena Suerte (Spanish, set 6)", - "bsuertef", "Buena Suerte (Spanish, set 7)", - "bsuerteg", "Buena Suerte (Spanish, set 8)", - "bsuerteh", "Buena Suerte (Spanish, set 9)", - "bsuertei", "Buena Suerte (Spanish, set 10)", - "bsuertej", "Buena Suerte (Spanish, set 11)", - "bsuertek", "Buena Suerte (Spanish, set 12)", - "bsuertel", "Buena Suerte (Spanish, set 13)", - "bsuertem", "Buena Suerte (Spanish, set 14)", - "bsuerten", "Buena Suerte (Spanish, set 15)", - "bsuerteo", "Buena Suerte (Spanish, set 16)", - "bsuertep", "Buena Suerte (Spanish, set 17)", - "bsuerteq", "Buena Suerte (Spanish, set 18)", - "bsuerter", "Buena Suerte (Spanish, set 19)", - "bsuertes", "Buena Suerte (Spanish, set 20)", - "bsuertet", "Buena Suerte (Spanish, set 21)", - "bsuerteu", "Buena Suerte (Spanish, set 22)", - "bsv100r", "Breakshot (Redemption 1.0)", - "bsv102r", "Breakshot (Redemption 1.2)", - "bsv103", "Breakshot", - "btchamp", "Beat the Champ (GV053 UAA01)", - "btime", "Burger Time (Data East set 1)", - "btime2", "Burger Time (Data East set 2)", - "btime3", "Burger Time (Data East USA)", - "btimem", "Burger Time (Midway)", - "btippers", "Big Tippers (Russia)", - "btlecity", "Vs. Battle City", - "btlfield", "Battle Field (Japan)", - "btlfieldb", "Battle Field (bootleg)", - "btlkroad", "Battle K-Road", - "btltryst", "Battle Tryst (ver JAC)", - "btmn_101", "Batman (1.01)", - "btmn_103", "Batman (1.03)", - "btmn_106", "Batman (1.06)", - "btmn_g13", "Batman (1.03 Germany)", - "btoads", "Battletoads", - "bttf_a20", "Back To the Future (2.0)", - "bttf_a21", "Back To The Future (2.1)", - "bttf_a27", "Back To the Future (2.7)", - "bttf_g27", "Back To the Future (2.7 Germany)", - "bub68705", "Bubble Bobble (bootleg with 68705)", - "bubblem", "Bubble Memories: The Story Of Bubble Bobble III (Ver 2.4O 1996/02/15)", - "bubblemj", "Bubble Memories: The Story Of Bubble Bobble III (Ver 2.3J 1996/02/07)", - "bubbles", "Bubbles", - "bubblesp", "Bubbles (prototype version)", - "bubblesr", "Bubbles (Solid Red label)", - "bubbletr", "Bubble Trouble (Japan, Rev C)", - "bubl2000", "Bubble 2000", - "bublbob2", "Bubble Bobble II (Ver 2.5O 1994/10/05)", - "bublbob2p", "Bubble Bobble II (Ver 0.0J 1993/12/13, prototype)", - "bublbobl", "Bubble Bobble (Japan, Ver 0.1)", - "bublbobl1", "Bubble Bobble (Japan, Ver 0.0)", - "bublboblr", "Bubble Bobble (US, Ver 5.1)", - "bublboblr1", "Bubble Bobble (US, Ver 1.0)", - "bublpong", "Bubble Pong Pong", - "bubsymphb", "Bubble Symphony (bootleg with OKI6295)", - "bubsymphe", "Bubble Symphony (Ver 2.5O 1994/10/05)", - "bubsymphj", "Bubble Symphony (Ver 2.5J 1994/10/05)", - "bubsymphu", "Bubble Symphony (Ver 2.5A 1994/10/05)", - "bubsys", "Bubble System BIOS", - "bucaner", "Buccaneer", - "buccanrs", "Buccaneers (set 1)", - "buccanrsa", "Buccaneers (set 2)", - "buckrgrs", "Buck Rogers", - "buckrog", "Buck Rogers: Planet of Zoom", - "buckrogn", "Buck Rogers: Planet of Zoom (not encrypted, set 1)", - "buckrogn2", "Buck Rogers: Planet of Zoom (not encrypted, set 2)", - "bucky", "Bucky O'Hare (ver EAB)", - "buckyaab", "Bucky O'Hare (ver AAB)", - "buckyea", "Bucky O'Hare (ver EA)", - "buckyuab", "Bucky O'Hare (ver UAB)", - "bugfever", "Bugs Fever (Version 1.7R CGA)", - "bugfeverd", "Bugs Fever (Version 1.7E CGA)", - "bugfevero", "Bugs Fever (Version 1.6R CGA)", - "bugfeverv", "Bugs Fever (Version 1.7R Dual)", - "bugfeverv2", "Bugs Fever (Version 1.7E Dual)", - "buggyboy", "Buggy Boy/Speed Buggy (cockpit)", - "buggyboyjr", "Buggy Boy Junior/Speed Buggy (upright)", - "buggychl", "Buggy Challenge", - "buggychlt", "Buggy Challenge (Tecfri)", - "bujutsu", "Fighting Bujutsu", - "bullet", "Bullet (FD1094 317-0041)", - "bullfgt", "Bullfight (315-5065)", - "bullfgtr", "Bull Fighter", - "bullfgtrs", "Bull Fighter (Sega)", - "bullsdrt", "Bulls Eye Darts", - "bullsdrtg", "Bulls Eye Darts (Galaxian conversion)", - "bullseye", "301/Bullseye", - "bungeem", "Bungee Monkey (set 1)", - "bungeema", "Bungee Monkey (set 2)", - "buraiken", "Hissatsu Buraiken (Japan)", - "burglarx", "Burglar X", - "buriki", "Buriki One (rev.B)", - "burnforc", "Burning Force (Japan, new version (Rev C))", - "burnforco", "Burning Force (Japan, old version)", - "burningf", "Burning Fight (NGM-018)(NGH-018)", - "burningfh", "Burning Fight (NGH-018)(US)", - "burningfp", "Burning Fight (prototype)", - "bushido", "Bushido (set 1)", - "bushidoa", "Bushido (set 2)", - "buster", "Buster", - "butasan", "Butasan - Pig's & Bomber's (Japan, English)", - "butasanj", "Butasan (Japan, Japanese)", - "butrfly", "Butterfly Video Game (version U350C)", - "buzzard", "Buzzard", - "buzzundr", "Buzzundrum (Ace)", - "bwcasino", "Boardwalk Casino", - "bwidow", "Black Widow", - "bwings", "B-Wings (Japan new Ver.)", - "bwingsa", "B-Wings (Alt Ver.?)", - "bwingso", "B-Wings (Japan old Ver.)", - "bygone", "Bygone", - "bzone", "Battle Zone (rev 2)", - "bzonea", "Battle Zone (rev 1)", - "bzonec", "Battle Zone (cocktail)", - "c3_ppays", "The Phrase That Pays (Bellfruit) (Cobra 3?)", - "c3_rtime", "Radio Times (Bellfruit) (Cobra 3)", - "c3_telly", "Telly Addicts (Bellfruit) (Cobra 3)", - "c3_totp", "Top of the Pops (Bellfruit) (Cobra 3?)", - "cabal", "Cabal (World, Joystick version)", - "cabala", "Cabal (Alpha Trading)", - "cabalbl", "Cabal (bootleg of Joystick version, set 1, alternate sound hardware)", - "cabalbl2", "Cabal (bootleg of Joystick version, set 2)", - "cabalus", "Cabal (US set 1, Trackball version)", - "cabalus2", "Cabal (US set 2, Trackball version)", - "cabaret", "Cabaret", - "cachat", "Cachat (Japan)", - "cactjack", "Cactus Jack's", - "cactus", "Cactus (bootleg of Saboten Bombers)", - "cadanglr", "Angler Dangler (DECO Cassette)", - "cadash", "Cadash (World)", - "cadashf", "Cadash (France)", - "cadashg", "Cadash (Germany)", - "cadashi", "Cadash (Italy)", - "cadashj", "Cadash (Japan)", - "cadashp", "Cadash (World, prototype)", - "cadashu", "Cadash (US)", - "cafebrk", "Mahjong Cafe Break", - "cafedoll", "Mahjong Cafe Doll (Japan)", - "cafetime", "Mahjong Cafe Time", - "cairblad", "Change Air Blade (Japan)", - "calchase", "California Chase", - "calibr50", "Caliber 50", - "calipso", "Calipso", - "calorie", "Calorie Kun vs Moguranian", - "calorieb", "Calorie Kun vs Moguranian (bootleg)", - "calspeed", "California Speed (Version 2.1a, 4/17/98)", - "calspeeda", "California Speed (Version 1.0r7a 3/4/98)", - "cameltry", "Cameltry (US, YM2610)", - "cameltrya", "Cameltry (World, YM2203 + M6295)", - "cameltryau", "Cameltry (US, YM2203 + M6295)", - "cameltryj", "Cameltry (Japan, YM2610)", - "camlight", "Camel Lights", - "canasta", "Canasta '86'", - "candance", "Cannon Dancer (Japan)", - "candy", "Candy Candy", - "cannball", "Cannon Ball (Yun Sung, horizontal)", - "cannballv", "Cannon Ball (Yun Sung, vertical)", - "cannonb", "Cannon Ball (bootleg on Crazy Kong hardware) (set 1, buggy)", - "cannonb2", "Cannon Ball (bootleg on Crazy Kong hardware) (set 2, buggy)", - "cannonb3", "Cannon Ball (bootleg on Crazy Kong hardware) (set 3, no bonus game)", - "cannonbp", "Cannon Ball (Pac-Man Hardware)", - "canvas", "Canvas Croquis", - "canyon", "Canyon Bomber", - "canyonp", "Canyon Bomber (prototype)", - "capbowl", "Capcom Bowling (set 1)", - "capbowl2", "Capcom Bowling (set 2)", - "capbowl3", "Capcom Bowling (set 3)", - "capbowl4", "Capcom Bowling (set 4)", - "capcor", "Capitani Coraggiosi (Ver 1.3)", - "capitol", "Capitol", - "capsnk", "Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev C)", - "capsnka", "Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev A)", - "capsnkb", "Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS)", - "captaven", "Captain America and The Avengers (Asia Rev 1.4)", - "captavena", "Captain America and The Avengers (Asia Rev 1.0)", - "captavene", "Captain America and The Avengers (UK Rev 1.4)", - "captavenj", "Captain America and The Avengers (Japan Rev 0.2)", - "captavenu", "Captain America and The Avengers (US Rev 1.9)", - "captavenua", "Captain America and The Avengers (US Rev 1.4)", - "captavenuu", "Captain America and The Avengers (US Rev 1.6)", - "captcomm", "Captain Commando (World 911202)", - "captcommb", "Captain Commando (bootleg)", - "captcommj", "Captain Commando (Japan 911202)", - "captcommjr1", "Captain Commando (Japan 910928)", - "captcommr1", "Captain Commando (World 911014)", - "captcommu", "Captain Commando (USA 910928)", - "capunc", "Capitan Uncino (Ver 1.2)", - "car2", "Car 2 (bootleg of Head On 2)", - "caractn", "Car Action (set 1)", - "caractn2", "Car Action (set 2)", - "carb2002", "Carriage Bonus 2002 (bootleg)", - "carb2003", "Carriage Bonus 2003 (bootleg)", - "cardline", "Card Line", - "carhop", "Car Hop", - "carjmbre", "Car Jamboree", - "carket", "Carket Ball", - "carnevil", "CarnEvil (v1.0.3)", - "carnevil1", "CarnEvil (v1.0.1)", - "carnival", "Carnival (upright)", - "carnivalc", "Carnival (cocktail)", - "carnivalh", "Carnival (Head On hardware, set 1)", - "carnivalha", "Carnival (Head On hardware, set 2)", - "carnking", "Carnival King (v1.00.11)", - "carpolo", "Car Polo", - "carrera", "Carrera (Version 6.7)", - "cartfury", "Cart Fury", - "casanova", "Casanova", - "casbjack", "Casino Black Jack (color, Standard 00-05)", - "cascade", "Cascade", - "cashcade", "Cashcade (JPM) (SYSTEM5 VIDEO)", - "cashcrop", "Cash Crop (Russia)", - "cashquiz", "Cash Quiz (Type B, Version 5)", - "cashtrn", "Cash Train (v1.10)", - "casino5", "Casino Five (3315-02, U5-0)", - "caspoker", "Casino Poker (Ver PM86LO-35-5, German)", - "castaway", "Castaway (Russia) (Atronic) (set 1)", - "castawaya", "Castaway (Russia) (Atronic) (set 2)", - "castfant", "Astro Fantasia (DECO Cassette)", - "castfpt", "Fortune Pot (Castle) (MACH2000 V2rvA)", - "castrev", "Revolution (Castle) (MACH2000 V1rvE)", - "caswin", "Casino Winner", - "catacomb", "Catacomb", - "catacomp", "Catacomb (Pinball)", - "catapult", "Catapult", - "catch22", "Catch-22 (version 8.0)", - "catchp", "Catch (prototype)", - "caterplr", "Caterpillar (bootleg of Centipede)", - "catnmous", "Cat and Mouse (set 1)", - "catnmousa", "Cat and Mouse (set 2)", - "catt", "Catt (Japan)", - "cavelon", "Cavelon", - "caveman", "Caveman (Pinball/Video Combo, set 1)", - "cavemana", "Caveman (Pinball/Video Combo, set 2)", - "cavenger", "Cosmic Avenger", - "cavnegro", "Cavaleiro Negro", - "cavnegro1", "Cavaleiro Negro (alternate set 1)", - "cavnegro2", "Cavaleiro Negro (alternate set 2)", - "cawing", "Carrier Air Wing (World 901012)", - "cawingb2", "Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM205 set 2)", - "cawingbl", "Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM205 set 1)", - "cawingj", "U.S. Navy (Japan 901012)", - "cawingr1", "Carrier Air Wing (World 901009)", - "cawingu", "Carrier Air Wing (USA 901012)", - "cb2001", "Cherry Bonus 2001", - "cb3", "Cherry Bonus III (ver.1.40, encrypted)", - "cb3a", "Cherry Bonus III (ver.1.40, set 2)", - "cb3b", "Cherry Bonus III (alt)", - "cb3c", "Cherry Bonus III (alt, set 2)", - "cb3d", "Cherry Bonus III (set 3)", - "cb3e", "Cherry Bonus III (set 4, encrypted bootleg)", - "cbaj", "Cool Boarders Arcade Jam", - "cball", "Cannonball (Atari, prototype)", - "cbasebal", "Capcom Baseball (Japan)", - "cbdash", "Boulder Dash (DECO Cassette)", - "cbnj", "Bump 'n' Jump (DECO Cassette)", - "cbombers", "Chase Bombers (World)", - "cbombersj", "Chase Bombers (Japan)", - "cbombersp", "Chase Bombers (Japan Prototype)", - "cbtime", "Burger Time (DECO Cassette)", - "cburnrub", "Burnin' Rubber (DECO Cassette, set 1)", - "cburnrub2", "Burnin' Rubber (DECO Cassette, set 2)", - "cbuster", "Crude Buster (World FX version)", - "cbusterj", "Crude Buster (Japan)", - "cbusterw", "Crude Buster (World FU version)", - "cc_12", "Cactus Canyon (1.2)", - "cc_13", "Cactus Canyon (1.3)", - "ccasino", "Chinese Casino [BET] (Japan)", - "ccastles", "Crystal Castles (version 4)", - "ccastles1", "Crystal Castles (version 1)", - "ccastles2", "Crystal Castles (version 2)", - "ccastles3", "Crystal Castles (version 3)", - "ccastlesf", "Crystal Castles (version 3, French)", - "ccastlesg", "Crystal Castles (version 3, German)", - "ccastlesj", "Crystal Castles (joystick version)", - "ccastlesp", "Crystal Castles (version 3, Spanish)", - "ccboot", "Crazy Climber (bootleg set 1)", - "ccboot2", "Crazy Climber (bootleg set 2)", - "ccbootmr", "Crazy Climber (Model Racing bootleg)", - "ccclass", "Country Club Classic (v1.10 03-apr-1997)", - "cchance", "Cherry Chance", - "cchasm", "Cosmic Chasm (set 1)", - "cchasm1", "Cosmic Chasm (set 2)", - "cclimber", "Crazy Climber (US)", - "cclimberj", "Crazy Climber (Japan)", - "cclimbr2", "Crazy Climber 2 (Japan)", - "cclimbr2a", "Crazy Climber 2 (Japan, Harder)", - "cclimbroper", "Crazy Climber (Spanish, Operamatic bootleg)", - "cclownz", "Crazzy Clownz (Version 1.0)", - "ccruise", "Caribbean Cruise", - "cd32bios", "CD32 Bios", - "cdibios", "CD-i Bios", - "cdiscon1", "Disco No.1 (DECO Cassette)", - "cdsteljn", "DS Telejan (DECO Cassette, Japan)", - "cecmatch", "ChuckECheese's Match Game", - "centaur", "Centaur", - "centipdb", "Centipede (bootleg)", - "centipdd", "Centipede Dux (hack)", - "centiped", "Centipede (revision 3)", - "centiped2", "Centipede (revision 2)", - "centtime", "Centipede (1 player, timed)", - "cerberup", "Cerberus (Pinball)", - "cerberus", "Cerberus", - "cexplore", "Explorer (DECO Cassette)", - "cfarm", "Chicken Farm (Version 2.0)", - "cfblue", "Crazy Fruits Blue (Russia) (Atronic) (set 1)", - "cfbluea", "Crazy Fruits Blue (Russia) (Atronic) (set 2)", - "cfever1k", "Casino Fever 1k", - "cfever40", "Casino Fever 4.0", - "cfever50", "Casino Fever 5.0", - "cfever51", "Casino Fever 5.1", - "cfever61", "Casino Fever 6.1", - "cfghtice", "Fighting Ice Hockey (DECO Cassette)", - "cfgreen", "Crazy Fruits Green (Russia) (Atronic)", - "cfield", "Chaos Field (GDL-0025)", - "cfishing", "Fishing (DECO Cassette)", - "cflyball", "Flying Ball (DECO Cassette)", - "cftbl_l3", "Creature from the Black Lagoon (L-3,SP-1)", - "cftbl_l4", "Creature from the Black Lagoon (L-4)", - "cgangpzl", "Cosmo Gang the Puzzle (US)", - "cgangpzlj", "Cosmo Gang the Puzzle (Japan)", - "cgip30cs", "Credit Poker (ver.30c, standard)", - "cgold", "Caribbean Gold (3VXEC449, USA)", - "cgold2", "Caribbean Gold II (3XF5182H04, USA)", - "cgraplop", "Cluster Buster (DECO Cassette)", - "cgraplop2", "Graplop (no title screen) (DECO Cassette)", - "ch2000", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.4E Dual)", - "ch2000b1", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R, set 1)", - "ch2000b2", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT, set 1)", - "ch2000c1", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R, set 2)", - "ch2000c2", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT, set 2)", - "ch2000d1", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R, set 3)", - "ch2000d2", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT, set 3)", - "ch2000o", "Fruit Bonus 2000 / New Cherry 2000 (Version 3.9XT)", - "ch2000o2", "Fruit Bonus 2000 / New Cherry 2000 (Version 3.9D)", - "ch2000o3", "Fruit Bonus 2000 / New Cherry 2000 (Version 3.9)", - "ch2000v1", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R Dual)", - "ch2000v2", "Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT Dual)", - "chainrec", "Chain Reaction (World, Version 2.2, 1995.09.25)", - "chaknpop", "Chack'n Pop", - "challeng", "Challenger", - "cham24", "Chameleon 24", - "chamburger", "Hamburger (DECO Cassette, Japan)", - "chameleo", "Chameleon", - "champbas", "Champion Base Ball", - "champbasj", "Champion Base Ball (Japan set 1)", - "champbasja", "Champion Base Ball (Japan set 2)", - "champbb2", "Champion Base Ball Part-2: Pair Play (set 1)", - "champbb2a", "Champion Baseball II (set 2)", - "champbb2j", "Champion Baseball II (Japan)", - "champbwl", "Championship Bowling", - "champwr", "Champion Wrestler (World)", - "champwrj", "Champion Wrestler (Japan)", - "champwru", "Champion Wrestler (US)", - "chanbara", "Chanbara", - "chance", "Chance", - "chance32", "Chance Thirty Two", - "changela", "Change Lanes", - "changes", "Changes", - "changesa", "Changes (EME license)", - "chaosbrk", "Chaos Breaker (v2.02J)", - "chaoshea", "Chaos Heat (V2.09O)", - "chaosheaj", "Chaos Heat (V2.08J)", - "charlien", "Charlie Ninja", - "charlies", "Charlie's Angels", - "chasehq", "Chase H.Q. (World)", - "chasehq2", "Chase H.Q. 2 (v2.0.6.JP)", - "chasehqj", "Chase H.Q. (Japan)", - "chasehqju", "Chase H.Q. (Japan, upright?)", - "chasehqu", "Chase H.Q. (US)", - "chboxing", "Champion Boxing", - "checkman", "Check Man", - "checkmanj", "Check Man (Japan)", - "checkmat", "Checkmate", - "cheekyms", "Cheeky Mouse", - "cheesech", "Cheese Chase", - "cheetah", "Cheetah", - "chelnov", "Chelnov - Atomic Runner (World)", - "chelnovj", "Chelnov - Atomic Runner (Japan)", - "chelnovu", "Chelnov - Atomic Runner (US)", - "chessc2", "Chess Challenge 2", - "chewheel", "Cherry Wheel (Version 1.7)", - "chewing", "Chewing Gum", - "cheyenne", "Cheyenne (version 1.0)", - "chicken", "Chicken (Russia) (Atronic)", - "chihiro", "Chihiro Bios", - "chikij", "Chiki Chiki Boys (Japan 900619)", - "chiller", "Chiller (version 3.0)", - "chillicc", "Chilli Con Cash (set 1)", - "chimerab", "Chimera Beast (prototype)", - "chinagat", "China Gate (US)", - "chinatow", "China Town (Ver 1B, Dino4 HW)", - "chinatwn", "China Town (Japan)", - "chinhero", "Chinese Hero", - "chinhero2", "Chinese Hero (older, set 1)", - "chinhero3", "Chinese Hero (older, set 2)", - "chinherot", "Chinese Heroe (Taito)", - "chinmoku", "Mahjong Chinmoku no Hentai (Japan 900511)", - "chinsan", "Ganbare Chinsan Ooshoubu (MC-8123A, 317-5012)", - "chkun", "Chance Kun (Japan)", - "chleague", "Champion League (Poker)", - "chleagul", "Champion League (Lattine)", - "chmpnum", "Champion Number (V0.74)", - "chocomk", "Musapey's Choco Marker (Rev A) (GDL-0014A)", - "chocovdr", "Uchuu Daisakusen: Chocovader Contactee (Japan, CVC1 Ver.A)", - "chokchok", "Choky! Choky!", - "choko", "Janpai Puzzle Choukou (Japan 010820)", - "choplift", "Choplifter (8751 315-5151)", - "chopliftbl", "Choplifter (bootleg)", - "chopliftu", "Choplifter (unprotected)", - "chopper", "Chopper I (US set 1)", - "choppera", "Chopper I (US set 2)", - "chopperb", "Chopper I (US set 3)", - "choysun", "Choy Sun Doa (20131511, Malaysia)", - "chqflag", "Chequered Flag", - "chqflagj", "Chequered Flag (Japan)", - "chry10", "Cherry 10 (bootleg with PIC16F84)", - "chryangl", "Cherry Angel", - "chrygld", "Cherry Gold I", - "chsuper2", "Champion Super 2 (V0.13)", - "chsuper3", "Champion Super 3 (V0.35)", - "chucklck", "Chuck-A-Luck", - "chukatai", "Chuka Taisen (World)", - "chukataij", "Chuka Taisen (Japan)", - "chukataiu", "Chuka Taisen (US)", - "chwrestl", "Champion Pro Wrestling", - "chwy", "Highway Chase (DECO Cassette)", - "ciclone", "Ciclone", - "circa33", "Circa 1933", - "circus", "Circus / Acrobat TV", - "circusc", "Circus Charlie (level select, set 1)", - "circusc2", "Circus Charlie (level select, set 2)", - "circusc3", "Circus Charlie (no level select)", - "circuscc", "Circus Charlie (Centuri)", - "circusce", "Circus Charlie (Centuri, earlier)", - "circusp", "Circus", - "cischeat", "Cisco Heat", - "citalcup", "Champion Italian Cup (bootleg V220IT)", - "citybomb", "City Bomber (World)", - "citybombj", "City Bomber (Japan)", - "citycon", "City Connection (set 1)", - "citycona", "City Connection (set 2)", - "citylove", "City Love (Japan 860908)", - "cityslck", "City Slicker", - "cj3play", "Triple Play (Ver. 1.10)", - "cjddzsp", "Super Dou Di Zhu Special (V122CN)", - "cjdh2", "Chao Ji Da Heng 2 (V311CN)", - "cjdh2a", "Chao Ji Da Heng 2 (V311CNA)", - "cjdh2b", "Chao Ji Da Heng 2 (V311CNB)", - "cjdh2c", "Chao Ji Da Heng 2 (V215CN)", - "cjffruit", "Funny Fruit (Ver. 1.13)", - "ckong", "Crazy Kong", - "ckongalc", "Crazy Kong (Alca bootleg)", - "ckongcv", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 2)", - "ckongg", "Crazy Kong (bootleg on Galaxian hardware)", - "ckonggx", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 1)", - "ckongis", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 3)", - "ckongmc", "Crazy Kong (bootleg on Moon Cresta hardware)", - "ckongo", "Crazy Kong (Orca bootleg)", - "ckongpt2", "Crazy Kong Part II (set 1)", - "ckongpt2a", "Crazy Kong Part II (set 2)", - "ckongpt2b", "Crazy Kong Part II (alternative levels)", - "ckongpt2j", "Crazy Kong Part II (Japan)", - "ckongpt2jeu", "Crazy Kong Part II (Jeutel bootleg)", - "ckongs", "Crazy Kong (Scramble hardware)", - "ckpt_a17", "Checkpoint (1.7)", - "clapapa", "Rootin' Tootin' / La-Pa-Pa (DECO Cassette)", - "clapapa2", "Rootin' Tootin' (DECO Cassette)", - "clas1812", "Class of 1812", - "classice", "Classic Edition (Version 1.6E)", - "classice1", "Classic Edition (Version 1.6R, set 1)", - "classice2", "Classic Edition (Version 1.6LT, set 1)", - "classiced1", "Classic Edition (Version 1.6R, set 2)", - "classiced2", "Classic Edition (Version 1.6LT, set 2)", - "classicev", "Classic Edition (Version 1.6E Dual)", - "classicev1", "Classic Edition (Version 1.6R Dual)", - "classicev2", "Classic Edition (Version 1.6LT Dual)", - "claybust", "Claybuster", - "claychal", "Sega Clay Challenge", - "claypign", "Clay Pigeon (version 2.0)", - "clayshoo", "Clay Shoot", - "clbowl", "Coors Light Bowling", - "cleanswp", "Clean Sweep [TTL]", - "cleoftp", "Cleopatra Fortune Plus (GDL-0012)", - "cleopatr", "Cleopatra Fortune (Ver 2.1J 1996/09/05)", - "cleoptra", "Cleopatra", - "cliffhgr", "Cliff Hanger (set 1)", - "cliffhgra", "Cliff Hanger (set 2)", - "clkwise", "Clockwise (1VXEC534, New Zealand)", - "cloak", "Cloak & Dagger (rev 5)", - "cloakfr", "Cloak & Dagger (French)", - "cloakgr", "Cloak & Dagger (German)", - "cloaksp", "Cloak & Dagger (Spanish)", - "clocknch", "Lock'n'Chase (DECO Cassette)", - "closeenc", "Close Encounters of the Third Kind", - "cloud9", "Cloud 9 (prototype)", - "clown", "Clown", - "clowns", "Clowns (rev. 2)", - "clowns1", "Clowns (rev. 1)", - "clshroad", "Clash-Road", - "clshroadd", "Clash-Road (Data East license)", - "clshroads", "Clash-Road (Status license)", - "cltchitr", "Clutch Hitter (US, FD1094 317-0176)", - "cltchitrj", "Clutch Hitter (Japan, FD1094 317-0175)", - "club90s", "Mahjong CLUB 90's (set 1) (Japan 900919)", - "club90sa", "Mahjong CLUB 90's (set 2) (Japan 900919)", - "clubk2k3", "Club Kart: European Session (2003)", - "clubk2kf", "Club Kart: European Session (2003, not protected)", - "clubkprz", "Club Kart Prize", - "clubkpzb", "Club Kart Prize Ver. B", - "clubkrtd", "Club Kart: European Session (Rev D)", - "clubkrte", "Club Kart: European Session", - "cluckypo", "Lucky Poker (DECO Cassette)", - "cluclu", "Vs. Clu Clu Land", - "cluedo", "Cluedo (prod. 2D)", - "cluedo2", "Cluedo (prod. 2)", - "cluedo2c", "Cluedo (prod. 2C)", - "cluedod", "Cluedo (prod. 2D) (Protocol)", - "cmagica", "Carta Magica (Ver 1.8)", - "cmanhat", "Manhattan (DECO Cassette)", - "cmast91", "Cherry Master '91 (ver.1.30)", - "cmast92", "Cherry Master '92", - "cmast97", "Cherry Master '97", - "cmaster", "Cherry Master I (ver.1.01, set 1)", - "cmasterb", "Cherry Master I (ver.1.01, set 2)", - "cmasterbv", "Cherry Master I (ver.1.01, set 4, with Blitz Poker ROM?)", - "cmasterc", "Cherry Master I (ver.1.01, set 3)", - "cmasterd", "Cherry Master I (ver.1.01, set 5)", - "cmastere", "Cherry Master I (ver.1.01, set 6)", - "cmasterf", "Cherry Master I (ver.1.01, set 7)", - "cmehyou", "Mahjong Circuit no Mehyou (Japan)", - "cmezspin", "Cherry Master I (E-Z Spin bootleg / hack)", - "cmfun", "Cherry Master (Fun USA v2.5 bootleg / hack)", - "cmissnx", "Mission-X (DECO Cassette)", - "cmkenosp", "Coinmaster Keno (Y2K, Spanish, 2000-12-14)", - "cmkenospa", "Coinmaster Keno (Y2K, Spanish, 2000-12-02)", - "cmmb162", "Centipede / Millipede / Missile Command / Let's Go Bowling (rev 1.62)", - "cmrltv75", "Coinmaster Roulette V75 (Y2K, Spanish)", - "cmv4", "Cherry Master (ver.4, set 1)", - "cmv4a", "Cherry Master (ver.4, set 2)", - "cmv801", "Cherry Master (Corsica, ver.8.01)", - "cmwm", "Cherry Master (Watermelon bootleg / hack)", - "cndypuzl", "Candy Puzzle (v1.0)", - "cnightst", "Night Star (DECO Cassette, set 1)", - "cnightst2", "Night Star (DECO Cassette, set 2)", - "cninja", "Caveman Ninja (World ver 4)", - "cninja1", "Caveman Ninja (World ver 1)", - "cninjabl", "Caveman Ninja (bootleg)", - "cninjabl2", "Caveman Ninja (bootleg, alt)", - "cninjau", "Caveman Ninja (US ver 4)", - "cntct_l1", "Contact (L-1)", - "cntforce", "Counterforce", - "cntine31", "Continental 3 in 1 (Bingo)", - "cntinntl", "Continental (Bingo)", - "cntrygrl", "Country Girl (Japan set 1)", - "cntrygrla", "Country Girl (Japan set 2)", - "cntsteer", "Counter Steer (Japan)", - "cobra", "Cobra Command (Data East LD, set 1)", - "cobraa", "Cobra Command (Data East LD, set 2)", - "cobracom", "Cobra-Command (World revision 5)", - "cobracomj", "Cobra-Command (Japan)", - "cobram3", "Cobra Command (M.A.C.H. 3 hardware)", - "cobrap", "Cobra", - "cobraseg", "Cobra Command (Sega LaserDisc Hardware)", - "code1d", "Code One Dispatch (ver D)", - "code1db", "Code One Dispatch (ver B)", - "colmns97", "Columns '97 (JET 961209 V1.000)", - "colony7", "Colony 7 (set 1)", - "colony7a", "Colony 7 (set 2)", - "colorama", "Colorama (English)", - "colt", "Colt", - "columbia", "Columbia", - "columbus", "Columbus (set 1)", - "columbusa", "Columbus (set 2)", - "columbusb", "Columbus (set 3)", - "columbusc", "Columbus (set 4)", - "columbusd", "Columbus (set 5)", - "columbuse", "Columbus (set 6)", - "columbusf", "Columbus (set 7)", - "column2j", "Columns II: The Voyage Through Time (Japan)", - "columns", "Columns (World)", - "columns2", "Columns II: The Voyage Through Time (World)", - "columnsj", "Columns (Japan)", - "columnsu", "Columns (US, cocktail)", - "combat", "Combat (version 3.0)", - "combatsc", "Combat School (joystick)", - "combatscb", "Combat School (bootleg)", - "combatscj", "Combat School (Japan trackball)", - "combatsct", "Combat School (trackball)", - "combh", "Combat Hawk", - "comebaby", "Come On Baby", - "comet_l4", "Comet (L-4)", - "comet_l5", "Comet (L-5)", - "comg074", "Cal Omega - Game 7.4 (Gaming Poker, W.Export)", - "comg076", "Cal Omega - Game 7.6 (Arcade Poker)", - "comg079", "Cal Omega - Game 7.9 (Arcade Poker)", - "comg080", "Cal Omega - Game 8.0 (Arcade Black Jack)", - "comg094", "Cal Omega - Game 9.4 (Keno)", - "comg107", "Cal Omega - Game 10.7c (Big Game)", - "comg123", "Cal Omega - Game 12.3 (Ticket Poker)", - "comg125", "Cal Omega - Game 12.5 (Bingo)", - "comg127", "Cal Omega - Game 12.7 (Keno)", - "comg128", "Cal Omega - Game 12.8 (Arcade Game)", - "comg134", "Cal Omega - Game 13.4 (Nudge Bingo)", - "comg145", "Cal Omega - Game 14.5 (Pixels)", - "comg157", "Cal Omega - Game 15.7 (Double-Draw Poker)", - "comg159", "Cal Omega - Game 15.9 (Wild Double-Up)", - "comg164", "Cal Omega - Game 16.4 (Keno)", - "comg168", "Cal Omega - Game 16.8 (Keno)", - "comg172", "Cal Omega - Game 17.2 (Double Double Poker)", - "comg175", "Cal Omega - Game 17.51 (Gaming Draw Poker)", - "comg176", "Cal Omega - Game 17.6 (Nudge Bingo)", - "comg181", "Cal Omega - Game 18.1 (Nudge Bingo)", - "comg183", "Cal Omega - Game 18.3 (Pixels)", - "comg185", "Cal Omega - Game 18.5 (Pixels)", - "comg186", "Cal Omega - Game 18.6 (Pixels)", - "comg187", "Cal Omega - Game 18.7 (Amusement Poker)", - "comg204", "Cal Omega - Game 20.4 (Super Blackjack)", - "comg208", "Cal Omega - Game 20.8 (Winner's Choice)", - "comg227", "Cal Omega - Game 22.7 (Amusement Poker, d/d)", - "comg230", "Cal Omega - Game 23.0 (FC Bingo (4-card))", - "comg236", "Cal Omega - Game 23.6 (Hotline)", - "comg239", "Cal Omega - Game 23.9 (Gaming Draw Poker)", - "comg240", "Cal Omega - Game 24.0 (Gaming Draw Poker, hold)", - "comg246", "Cal Omega - Game 24.6 (Hotline)", - "comg272a", "Cal Omega - Game 27.2 (Keno, amusement)", - "comg272b", "Cal Omega - Game 27.2 (Keno, gaming)", - "comg5108", "Cal Omega - Game 51.08 (CEI Video Poker, Jacks or Better)", - "comg903d", "Cal Omega - System 903 Diag.PROM", - "comg905d", "Cal Omega - System 905 Diag.PROM", - "commando", "Commando (World)", - "commandob", "Commando (bootleg set 1)", - "commandob2", "Commando (bootleg set 2)", - "commandoj", "Senjou no Ookami", - "commandou", "Commando (US set 1)", - "commandou2", "Commando (US set 2)", - "commandw", "Command War - Super Special Battle & War Game (Ver 0.0J) (Prototype)", - "commsega", "Commando (Sega)", - "comotion", "Comotion", - "compgolf", "Competition Golf Final Round (revision 3)", - "compgolfo", "Competition Golf Final Round (old version)", - "complexx", "Complex X", - "condor", "Condor (bootleg of Phoenix)", - "coneyis", "Old Coney Island!", - "confmiss", "Confidential Mission (GDS-0001)", - "congo", "Congo Bongo (Rev C, 2 board stack)", - "congo_13", "Congo (1.3)", - "congo_20", "Congo (2.0)", - "congo_21", "Congo (2.1)", - "congoa", "Congo Bongo (Rev C, 3 board stack)", - "conquer", "Conqueror", - "contcirc", "Continental Circus (World)", - "contcircj", "Continental Circus (Japan)", - "contcircu", "Continental Circus (US set 1)", - "contcircua", "Continental Circus (US set 2)", - "contra", "Contra (US, set 1)", - "contra1", "Contra (US, set 2)", - "contrab", "Contra (bootleg)", - "contrabj", "Contra (Japan bootleg, set 1)", - "contrabj1", "Contra (Japan bootleg, set 2)", - "contraj", "Contra (Japan, set 1)", - "contraj1", "Contra (Japan, set 2)", - "cookbib", "Cookie & Bibi (set 1)", - "cookbib2", "Cookie & Bibi 2", - "cookbib3", "Cookie & Bibi 3", - "cookbiba", "Cookie & Bibi (set 2)", - "cookrace", "Cook Race", - "coolmini", "Cool Minigame Collection", - "coolpool", "Cool Pool", - "coolridr", "Cool Riders", - "coozumou", "Oozumou - The Grand Sumo (DECO Cassette, Japan)", - "cop01", "Cop 01 (set 1)", - "cop01a", "Cop 01 (set 2)", - "cops", "Cops", - "copsnrob", "Cops'n Robbers", - "coralr2", "Coral Riches II (1VXFC5472, New Zealand)", - "coronatn", "Coronation Street Quiz Game", - "coronatnd", "Coronation Street Quiz Game (Protocol)", - "corsario", "Corsario", - "corv_21", "Corvette (2.1)", - "corv_lx1", "Corvette (LX1)", - "corv_px4", "Corvette (PX4)", - "cosflash", "Cosmic Flash", - "cosmccop", "Cosmic Cop (World)", - "cosmic", "Cosmic", - "cosmica", "Cosmic Alien (version II)", - "cosmica1", "Cosmic Alien (first version)", - "cosmica2", "Cosmic Alien (early version II?)", - "cosmicg", "Cosmic Guerilla", - "cosmicgi", "Cosmic Guerilla (Spanish bootleg)", - "cosmicm2", "Cosmic Monsters 2", - "cosmicmo", "Cosmic Monsters (version II)", - "cosmo", "Cosmo", - "cosmogng", "Cosmo Gang the Video (US)", - "cosmogngj", "Cosmo Gang the Video (Japan)", - "cosmos", "Cosmos", - "cotton", "Cotton (set 4, World, FD1094 317-0181a)", - "cotton2", "Cotton 2 (JUET 970902 V1.000)", - "cottonbm", "Cotton Boomerang (JUET 980709 V1.000)", - "cottong", "Cotocoto Cottong", - "cottonj", "Cotton (set 2, Japan, Rev B, FD1094 317-0179b)", - "cottonja", "Cotton (set 1, Japan, Rev A, FD1094 317-0179a)", - "cottonu", "Cotton (set 3, US, FD1094 317-0180)", - "countdwn", "Count-Down", - "countrun", "Counter Run (NS6201-A 1988.3)", - "countrunb", "Counter Run (bootleg set 1)", - "countrunb2", "Counter Run (bootleg set 2)", - "countryc", "Country Club", - "couple", "The Couples (set 1)", - "couplei", "The Couples (set 3)", - "couplep", "The Couples (set 2)", - "cowboy", "Cowboy Eight Ball", - "cowrace", "Cow Race (King Derby hack)", - "cp_15", "The Champion Pub (1.5)", - "cp_16", "The Champion Pub (1.6)", - "cpoker", "Champion Poker (v220I)", - "cpokerpk", "Champion Italian PK (bootleg, blue board)", - "cpokerpkg", "Champion Italian PK (bootleg, green board)", - "cpokert", "Champion Poker (v200G)", - "cpokerx", "Champion Poker (v100)", - "cppicf", "Peter Pepper's Ice Cream Factory (DECO Cassette, set 1)", - "cppicf2", "Peter Pepper's Ice Cream Factory (DECO Cassette, set 2)", - "cprobowl", "Pro Bowling (DECO Cassette)", - "cprogolf", "Tournament Pro Golf (DECO Cassette)", - "cprogolf18", "18 Challenge Pro Golf (DECO Cassette, Japan)", - "cprogolfj", "Tournament Pro Golf (DECO Cassette, Japan)", - "cps3boot", "CPS3 Multi-game bootleg for HD6417095 type SH2 (New Generation, 3rd Strike, JoJo's Venture, JoJo's Bizarre Adventure, Red Earth)", - "cps3boota", "CPS3 Multi-game bootleg for dead security cart (New Generation, 2nd Impact, 3rd Strike)", - "cps3bs32", "Street Fighter III 2nd Impact: Giant Attack (USA 970930, bootleg for HD6417095 type SH2, V3)", - "cps3bs32a", "Street Fighter III 2nd Impact: Giant Attack (USA 970930, bootleg for HD6417095 type SH2, older)", - "cpsoccer", "Pro Soccer (DECO Cassette)", - "cpsoccerj", "Pro Soccer (DECO Cassette, Japan)", - "cptennis", "Pro Tennis (DECO Cassette)", - "cpthook", "Captain Hook", - "cpzn1", "ZN1", - "cpzn2", "ZN2", - "cr589fw", "CD-ROM Drive Updater 2.0 (700B04)", - "cr589fwa", "CD-ROM Drive Updater (700A04)", - "crackndj", "Crackin' DJ", - "cracksht", "Crackshot (version 2.0)", - "crakndj2", "Crackin' DJ Part 2", - "crash", "Crash", - "crater", "Crater Raider", - "crazyblk", "Crazy Blocks", - "crazycop", "Crazy Cop (Japan)", - "crazyfgt", "Crazy Fight", - "crazywar", "Crazy War", - "crbaloon", "Crazy Balloon (set 1)", - "crbaloon2", "Crazy Balloon (set 2)", - "crgolf", "Crowns Golf (834-5419-04)", - "crgolfa", "Crowns Golf (834-5419-03)", - "crgolfb", "Crowns Golf (set 3)", - "crgolfbt", "Champion Golf (bootleg)", - "crgolfc", "Champion Golf", - "crgolfhi", "Crowns Golf in Hawaii", - "crimec", "Crime City (World)", - "crimecj", "Crime City (Japan)", - "crimecu", "Crime City (US)", - "crimep2", "Crime Patrol 2: Drug Wars v1.3", - "crimep211", "Crime Patrol 2: Drug Wars v1.1", - "crimepat", "Crime Patrol v1.4", - "crimfght", "Crime Fighters (US 4 players)", - "crimfght2", "Crime Fighters (World 2 Players)", - "crimfghtj", "Crime Fighters (Japan 2 Players)", - "crisscrs", "Criss Cross (Sweden)", - "critcrsh", "Critter Crusher (EA 951204 V1.000)", - "crkdown", "Crack Down (World, Floppy Based, FD1094 317-0058-04c)", - "crkdownj", "Crack Down (Japan, Floppy Based, FD1094 317-0058-04b Rev A)", - "crkdownu", "Crack Down (US, Floppy Based, FD1094 317-0058-04d)", - "crockman", "Crock-Man", - "croquis", "Croquis (Germany)", - "crospang", "Cross Pang", - "crossbld", "Cross Blades! (Japan)", - "crossbow", "Crossbow (version 2.0)", - "croupier", "Croupier (Playmark Roulette v.20.05)", - "croupiera", "Croupier (Playmark Roulette v.09.04)", - "crsbingo", "Poker Carnival", - "crshnscr", "Crash 'n Score [TTL]", - "crshrace", "Lethal Crash Race (set 1)", - "crshrace2", "Lethal Crash Race (set 2)", - "crsword", "Crossed Swords (ALM-002)(ALH-002)", - "crszone", "Crisis Zone (CSZO4 Ver. B)", - "crszonev2a", "Crisis Zone (CSZO2 Ver. A)", - "crszonev3a", "Crisis Zone (CSZO3 Ver. A)", - "crszonev3b", "Crisis Zone (CSZO3 Ver. B, set 1)", - "crszonev3b2", "Crisis Zone (CSZO3 Ver. B, set 2)", - "crszonev4a", "Crisis Zone (CSZO4 Ver. A)", - "crtaxihr", "Crazy Taxi High Roller (Rev B) (GDX-0002B)", - "cruisin", "Cruisin", - "crush", "Crush Roller (set 1)", - "crush2", "Crush Roller (set 2)", - "crush3", "Crush Roller (set 3)", - "crush4", "Crush Roller (set 4)", - "crushbl", "Crush Roller (bootleg set 1)", - "crushbl2", "Crush Roller (bootleg set 2)", - "crushbl3", "Crush Roller (bootleg set 3)", - "crusherm", "Crusher Makochan (Japan)", - "crushs", "Crush Roller (bootleg set 4)", - "crusnexo", "Cruis'n Exotica (version 2.4)", - "crusnexoa", "Cruis'n Exotica (version 2.0)", - "crusnexob", "Cruis'n Exotica (version 1.6)", - "crusnexoc", "Cruis'n Exotica (version 1.3)", - "crusnexod", "Cruis'n Exotica (version 1.0)", - "crusnusa", "Cruis'n USA (rev L4.1)", - "crusnusa21", "Cruis'n USA (rev L2.1)", - "crusnusa40", "Cruis'n USA (rev L4.0)", - "crusnwld", "Cruis'n World (rev L2.5)", - "crusnwld13", "Cruis'n World (rev L1.3)", - "crusnwld17", "Cruis'n World (rev L1.7)", - "crusnwld19", "Cruis'n World (rev L1.9)", - "crusnwld20", "Cruis'n World (rev L2.0)", - "crusnwld23", "Cruis'n World (rev L2.3)", - "crusnwld24", "Cruis'n World (rev L2.4)", - "cryptklr", "Crypt Killer (GQ420 UAA)", - "crysbios", "Crystal System BIOS", - "crysking", "The Crystal of Kings", - "crystal", "Crystal Colours (CMC hardware)", - "crystal2", "Crystal Gal 2 (Japan 860620)", - "crystalc", "Crystals Colours (Ver 1.01)", - "crystalg", "Crystal Gal (Japan 860512)", - "crystals", "Crystal Springs (10155811, Malaysia)", - "crzmon2", "Crazy Monkey 2 (100310)", - "crzmon2_2", "Crazy Monkey 2 (100311 Lottery)", - "crzmon2_3", "Crazy Monkey 2 (100315 Entertainment)", - "crzrally", "Crazy Rally (set 1)", - "crzrallya", "Crazy Rally (set 2)", - "crzrallyg", "Crazy Rally (Gecas license)", - "crzytaxi", "Crazy Taxi (JPN, USA, EXP, KOR, AUS)", - "csclub", "Capcom Sports Club (Euro 971017)", - "csclub1", "Capcom Sports Club (Euro 970722)", - "csclub1d", "Capcom Sports Club (Euro 970722 Phoenix Edition) (bootleg)", - "cscluba", "Capcom Sports Club (Asia 970722)", - "csclubh", "Capcom Sports Club (Hispanic 970722)", - "csclubj", "Capcom Sports Club (Japan 970722)", - "csclubjy", "Capcom Sports Club (Japan 970722, yellow case)", - "cscrtry", "Scrum Try (DECO Cassette, set 1)", - "cscrtry2", "Scrum Try (DECO Cassette, set 2)", - "csdtenis", "Super Doubles Tennis (DECO Cassette, Japan)", - "cshift", "Chicken Shift", - "cshooter", "Cross Shooter (not encrypted)", - "cshootere", "Cross Shooter (encrypted)", - "csilver", "Captain Silver (World)", - "csilverj", "Captain Silver (Japan)", - "csk227it", "Champion Skill (with Ability)", - "csk234it", "Champion Skill (Ability, Poker & Symbols)", - "cskater", "Skater (DECO Cassette, Japan)", - "csmash", "Cosmic Smash (JPN, USA, EXP, KOR, AUS) (Rev A)", - "csmasho", "Cosmic Smash (JPN, USA, EXP, KOR, AUS)", - "csmic_l1", "Cosmic Gunfight (L-1)", - "cspike", "Gun Spike (JPN) / Cannon Spike (USA, EXP, KOR, AUS)", - "csplayh1", "Super CD Dai8dan Mahjong Hanafuda Cosplay Tengoku (Japan)", - "csplayh5", "Mahjong Hanafuda Cosplay Tengoku 5 (Japan)", - "csplayh7", "Cosplay Tengoku 7 - Super Kogal Grandprix (Japan)", - "csprint", "Championship Sprint (rev 3)", - "csprint1", "Championship Sprint (rev 1)", - "csprint2", "Championship Sprint (rev 2)", - "csprintf", "Championship Sprint (French)", - "csprintg", "Championship Sprint (German, rev 2)", - "csprintg1", "Championship Sprint (German, rev 1)", - "csprints", "Championship Sprint (Spanish, rev 2)", - "csprints1", "Championship Sprint (Spanish, rev 1)", - "cstlevna", "Vs. Castlevania", - "cstripxi", "Casino Strip XI", - "csuperas", "Super Astro Fighter (DECO Cassette)", - "cswat", "Cosmoswat", - "csweetht", "Sweet Heart (DECO Cassette)", - "ct2k3sa", "Crouching Tiger Hidden Dragon 2003 Super Plus alternate (The King of Fighters 2001 bootleg)", - "ct2k3sp", "Crouching Tiger Hidden Dragon 2003 Super Plus (The King of Fighters 2001 bootleg)", - "ctcheese", "Cut The Cheese (Redemption)", - "ctchzdlx", "Cut The Cheese Deluxe (Redemption)", - "cterrani", "Terranean (DECO Cassette)", - "cthd2003", "Crouching Tiger Hidden Dragon 2003 (The King of Fighters 2001 bootleg)", - "ctisland", "Treasure Island (DECO Cassette, set 1)", - "ctisland2", "Treasure Island (DECO Cassette, set 2)", - "ctisland3", "Treasure Island (DECO Cassette, set 3)", - "ctomaday", "Captain Tomaday", - "ctornado", "Tornado (DECO Cassette)", - "ctribe", "The Combatribes (US)", - "ctribe1", "The Combatribes (US set 1?)", - "ctribeb", "The Combatribes (bootleg set 1)", - "ctribeb2", "The Combatribes (bootleg set 2)", - "ctribej", "The Combatribes (Japan)", - "ctrpllrp", "Caterpillar Pacman Hack", - "ctsttape", "Test Tape (DECO Cassette)", - "cubeqst", "Cube Quest (01/04/84)", - "cubeqsta", "Cube Quest (12/30/83)", - "cubybop", "Cuby Bop (location test)", - "cueball", "Cue Ball Wizard", - "cuebrick", "Cue Brick (World version D)", - "cuebrickj", "Cue Brick (Japan)", - "cultname", "Seimei-Kantei-Meimei-Ki Cult Name", - "cultures", "Jibun wo Migaku Culture School Mahjong Hen", - "cuoreuno", "Cuore 1 (Italian)", - "cupfinal", "Taito Cup Finals (Ver 1.0O 1993/02/28)", - "cupsoc", "Seibu Cup Soccer (set 1)", - "cupsoca", "Seibu Cup Soccer (set 2)", - "cupsocb", "Seibu Cup Soccer (set 3)", - "cupsocs", "Seibu Cup Soccer :Selection: (set 1)", - "cupsocs2", "Seibu Cup Soccer :Selection: (set 2)", - "cupsocsb", "Seibu Cup Soccer :Selection: (bootleg, set 1)", - "cupsocsb2", "Seibu Cup Soccer :Selection: (bootleg, set 2)", - "cupsocsb3", "Seibu Cup Soccer :Selection: (bootleg, set 3)", - "curvebal", "Curve Ball", - "cutieq", "Cutie Q", - "cv_10", "Cirqus Voltaire (1.0)", - "cv_11", "Cirqus Voltaire (1.1)", - "cv_13", "Cirqus Voltaire (1.3)", - "cv_14", "Cirqus Voltaire (1.4)", - "cv_20h", "Cirqus Voltaire (2.0H)", - "cvs2gd", "Capcom Vs. SNK 2 Millionaire Fighting 2001 (Rev A) (GDL-0007A)", - "cvsgd", "Capcom Vs. SNK Millennium Fight 2000 Pro (GDL-0004)", - "cworld", "Capcom World (Japan)", - "cworld2j", "Adventure Quiz Capcom World 2 (Japan 920611)", - "cybattlr", "Cybattler", - "cyberbal", "Cyberball (rev 4)", - "cyberbal2", "Cyberball (rev 2)", - "cyberbal2p", "Cyberball 2072 (2 player, rev 4)", - "cyberbal2p1", "Cyberball 2072 (2 player, rev 1)", - "cyberbal2p2", "Cyberball 2072 (2 player, rev 2)", - "cyberbal2p3", "Cyberball 2072 (2 player, rev 3)", - "cyberbalp", "Cyberball (prototype)", - "cyberbalt", "Tournament Cyberball 2072 (rev 2)", - "cyberbalt1", "Tournament Cyberball 2072 (rev 1)", - "cyberlip", "Cyber-Lip (NGM-010)", - "cybertnk", "Cyber Tank (v1.4)", - "cybots", "Cyberbots: Fullmetal Madness (Euro 950424)", - "cybotsj", "Cyberbots: Fullmetal Madness (Japan 950420)", - "cybotsjd", "Cyberbots: Fullmetal Madness (Japan 950424) (decrypted bootleg)", - "cybotsu", "Cyberbots: Fullmetal Madness (USA 950424)", - "cybotsud", "Cyberbots: Fullmetal Madness (USA 950424 Phoenix Edition) (bootleg)", - "cybrcomm", "Cyber Commando (Rev. CY1, Japan)", - "cybrcycc", "Cyber Cycles (Rev. CB2 Ver.C)", - "cybrnaut", "Cybernaut", - "cybsled", "Cyber Sled (World)", - "cybsledj", "Cyber Sled (Japan)", - "cyclemb", "Cycle Maabou (Japan)", - "cycln_l4", "Cyclone (L-4)", - "cycln_l5", "Cyclone (L-5)", - "cyclopes", "Cyclopes", - "cyclshtg", "Cycle Shooting", - "cyclwarr", "Cycle Warriors (set 1)", - "cyclwarra", "Cycle Warriors (set 2)", - "cyvern", "Cyvern (US)", - "cyvernj", "Cyvern (Japan)", - "czeroize", "Zeroize (DECO Cassette)", - "czmon_13", "Crazy Monkey (100311 World)", - "czmon_15", "Crazy Monkey (100311 Entertainment)", - "czmon_16", "Crazy Monkey (100312 Russia)", - "czmon_5", "Crazy Monkey (030421 World)", - "czmon_7", "Crazy Monkey (031110 World)", - "czmon_7a", "Crazy Monkey (bootleg, 031110, backdoor set 1)", - "czmon_7b", "Crazy Monkey (bootleg, 031110, backdoor set 2)", - "czmon_8", "Crazy Monkey (050120 World)", - "czmon_8a", "Crazy Monkey (bootleg, 050120, backdoor)", - "czmon_8b", "Crazy Monkey (bootleg, 050120, changed version text)", - "czmon_8c", "Crazy Monkey (bootleg, 050120, VIDEO GAME-1 CM01)", - "czmon_8d", "Crazy Monkey (bootleg, 050120, LOTTOGAME (I))", - "czmon_8e", "Crazy Monkey (bootleg, 050120, LOTO PROGRAM V-CM2)", - "czmon_8f", "Crazy Monkey (bootleg, 050120, LOTOS CM01)", - "czmon_9", "Crazy Monkey (070315 Russia)", - "czmon_9a", "Crazy Monkey (bootleg, 070315, VIDEO GAME-1 O01 set 1)", - "czmon_9b", "Crazy Monkey (bootleg, 070315, VIDEO GAME-1 O01 set 2)", - "czmon_9c", "Crazy Monkey (bootleg, 070315, payout percentage 70)", - "d9final", "Dream 9 Final (v2.24)", - "dacholer", "Dacholer", - "dadandrn", "Kyukyoku Sentai Dadandarn (ver JAA)", - "dai2kaku", "Dai-Dai-Kakumei (Japan)", - "dai3wksi", "Dai San Wakusei Meteor (Japan)", - "daikaiju", "Daikaiju no Gyakushu", - "daimakai", "Daimakaimura (Japan)", - "daimakair", "Daimakaimura (Japan Resale Ver.)", - "daimyojn", "Mahjong Daimyojin (Japan, T017-PB-00)", - "daioh", "Daioh (set 1)", - "daioha", "Daioh (set 2)", - "daireika", "Mahjong Daireikai (Japan)", - "dairesya", "Dai Ressya Goutou (Japan)", - "daisenpu", "Daisenpu (Japan)", - "daiskiss", "Daisu-Kiss (ver JAA)", - "daisyari", "Daisyarin [BET] (Japan)", - "daitorid", "Daitoride", - "daitorida", "Daitoride (YMF278B version)", - "daiyogen", "Mahjong Daiyogen (Japan)", - "dakar", "Dakar", - "dakkochn", "DakkoChan House (MC-8123B, 317-5014)", - "dambustr", "Dambusters (US, set 1)", - "dambustra", "Dambusters (US, set 2)", - "dambustruk", "Dambusters (UK)", - "danceyes", "Dancing Eyes (US, DC3/VER.C)", - "danceyesj", "Dancing Eyes (Japan, DC1/VER.A)", - "danchih", "Danchi de Hanafuda (J 990607 V1.400)", - "danchiq", "Danchi de Quiz Okusan Yontaku Desuyo! (J 001128 V1.200)", - "dangar", "Ufo Robo Dangar (12/1/1986)", - "dangar2", "Ufo Robo Dangar (9/26/1986)", - "dangarb", "Ufo Robo Dangar (bootleg)", - "dangcurv", "Dangerous Curves (Ver 2.2 J)", - "dangerz", "Danger Zone", - "dangseed", "Dangerous Seed (Japan)", - "dankuga", "Dan-Ku-Ga (Ver 0.0J 1994/12/13) (Prototype)", - "daraku", "Daraku Tenshi - The Fallen Angels", - "darius", "Darius (World)", - "darius2", "Darius II (triple screen) (Japan)", - "darius2d", "Darius II (dual screen) (Japan, Rev 2)", - "darius2do", "Darius II (dual screen) (Japan, Rev 1)", - "dariuse", "Darius (Extra) (Japan)", - "dariusg", "Darius Gaiden - Silver Hawk (Ver 2.5O 1994/09/19)", - "dariusgj", "Darius Gaiden - Silver Hawk (Ver 2.5J 1994/09/19)", - "dariusgu", "Darius Gaiden - Silver Hawk (Ver 2.5A 1994/09/19)", - "dariusgx", "Darius Gaiden - Silver Hawk Extra Version (Ver 2.7J 1995/03/06) (Official Hack)", - "dariusj", "Darius (Japan)", - "dariuso", "Darius (Japan old version)", - "darkadv", "Dark Adventure", - "darkedge", "Dark Edge (World)", - "darkedgej", "Dark Edge (Japan)", - "darkhleg", "Dark Horse Legend (GX706 VER. JAA)", - "darkhors", "Dark Horse (bootleg of Jockey Club II)", - "darkmist", "The Lost Castle In Darkmist", - "darkplnt", "Dark Planet", - "darkseal", "Dark Seal (World revision 3)", - "darkseal1", "Dark Seal (World revision 1)", - "darkseal2", "Dark Seal 2 (Japan v2.1)", - "darksealj", "Dark Seal (Japan revision 4)", - "darkshad", "Dark Shadow", - "darktowr", "Dark Tower", - "darkwar", "Dark Warrior", - "darthvdr", "Darth Vader (bootleg of Space Invaders)", - "darwin", "Darwin 4078 (Japan)", - "dassault", "Desert Assault (US)", - "dassault4", "Desert Assault (US 4 Players)", - "dayto2pe", "Daytona USA 2 Power Edition", - "daytona", "Daytona USA (Japan, Revision A)", - "daytona2", "Daytona USA 2 (Revision A)", - "daytona93", "Daytona USA Deluxe '93", - "daytonam", "Daytona USA (Japan, To The MAXX)", - "daytonas", "Daytona USA (With Saturn Adverts)", - "daytonase", "Daytona USA Special Edition (Japan, Revision A)", - "daytonat", "Daytona USA (Japan, Turbo hack, set 1)", - "daytonata", "Daytona USA (Japan, Turbo hack, set 2)", - "dazzler", "Dazzler", - "dbc", "Da Ban Cheng (Hong Kong, V027H)", - "dblaxle", "Double Axle (US)", - "dblaxleu", "Double Axle (US, earlier)", - "dblchal", "Double Challenge (Version 1.5R, set 1)", - "dblchalc1", "Double Challenge (Version 1.5R, set 2)", - "dblchald1", "Double Challenge (Version 1.5R, set 3)", - "dblchalo", "Double Challenge (Version 1.1)", - "dblchalv1", "Double Challenge (Version 1.5R Dual)", - "dblcrown", "Double Crown (v1.0.3)", - "dbldynj", "The Double Dynamites (Japan)", - "dbldynu", "The Double Dynamites (US)", - "dblewing", "Double Wings", - "dblplay", "Super Baseball Double Play Home Run Derby", - "dblpoint", "Double Point", - "dblpointd", "Double Point (Dong Bang Electron, bootleg?)", - "dbreed", "Dragon Breed (M81 PCB version)", - "dbreedm72", "Dragon Breed (M72 PCB version)", - "dbz", "Dragonball Z (rev B)", - "dbz2", "Dragonball Z 2 - Super Battle", - "dbza", "Dragonball Z (rev A)", - "dbzvrvs", "Dragon Ball Z V.R.V.S. (Japan)", - "dcclub", "Dynamic Country Club (World, ROM Based)", - "dcclubfd", "Dynamic Country Club (US, Floppy Based, FD1094 317-0058-09d)", - "dcclubj", "Dynamic Country Club (Japan, ROM Based)", - "dcheese", "Double Cheese", - "dcon", "D-Con", - "dcrown", "Dream Crown (Set 1)", - "dcrowna", "Dream Crown (Set 2)", - "dd_l2", "Dr. Dude (LA-2)", - "dd_p06", "Dr. Dude (PA-6 WPC)", - "dd_p6", "Dr. Dude (PA-6)", - "dd_p7", "Dr. Dude (PA-7 WPC)", - "dday", "D-Day", - "ddayc", "D-Day (Centuri)", - "ddayjlc", "D-Day (Jaleco set 1)", - "ddayjlca", "D-Day (Jaleco set 2)", - "ddcrew", "D. D. Crew (World, 3 Players, FD1094 317-0190)", - "ddcrew1", "D. D. Crew (World, 4 Players, FD1094 317-0187)", - "ddcrew2", "D. D. Crew (World, 2 Players, FD1094 317-0184)", - "ddcrewj", "D. D. Crew (Japan, 4 Players, FD1094 317-0185)", - "ddcrewj2", "D. D. Crew (Japan, 2 Players, FD1094 317-0182)", - "ddcrewu", "D. D. Crew (US, 4 Players, FD1094 317-0186)", - "ddealer", "Double Dealer", - "ddenlovj", "Don Den Lover Vol. 1 - Shiro Kuro Tsukeyo! (Japan)", - "ddenlovr", "Don Den Lover Vol. 1 (Hong Kong)", - "ddenlovrb", "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea, bootleg)", - "ddenlovrk", "Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea)", - "ddonpach", "DoDonPachi (International, Master Ver. 97/02/05)", - "ddonpachj", "DoDonPachi (Japan, Master Ver. 97/02/05)", - "ddp2", "DoDonPachi II - Bee Storm (World, ver. 102)", - "ddp2100", "DoDonPachi II - Bee Storm (World, ver. 100)", - "ddp2100c", "DoDonPachi II - Bee Storm (China, ver. 100)", - "ddp2100hk", "DoDonPachi II - Bee Storm (Hong Kong, ver. 100)", - "ddp2100j", "DoDonPachi II - Bee Storm (Japan, ver. 100)", - "ddp2100k", "DoDonPachi II - Bee Storm (Korea, ver. 100)", - "ddp2100t", "DoDonPachi II - Bee Storm (Taiwan, ver. 100)", - "ddp2101", "DoDonPachi II - Bee Storm (World, ver. 101)", - "ddp2101c", "DoDonPachi II - Bee Storm (China, ver. 101)", - "ddp2101hk", "DoDonPachi II - Bee Storm (Hong Kong, ver. 101)", - "ddp2101j", "DoDonPachi II - Bee Storm (Japan, ver. 101)", - "ddp2101k", "DoDonPachi II - Bee Storm (Korea, ver. 101)", - "ddp2101t", "DoDonPachi II - Bee Storm (Taiwan, ver. 101)", - "ddp2c", "DoDonPachi II - Bee Storm (China, ver. 102)", - "ddp2hk", "DoDonPachi II - Bee Storm (Hong Kong, ver. 102)", - "ddp2j", "DoDonPachi II - Bee Storm (Japan, ver. 102)", - "ddp2k", "DoDonPachi II - Bee Storm (Korea, ver. 102)", - "ddp2t", "DoDonPachi II - Bee Storm (Taiwan, ver. 102)", - "ddpdfk", "DoDonPachi Dai-Fukkatsu Ver 1.5 (2008/06/23 MASTER VER 1.5)", - "ddpdfk10", "DoDonPachi Dai-Fukkatsu Ver 1.0 (2008/05/16 MASTER VER)", - "ddpdoj", "DoDonPachi Dai-Ou-Jou V101 (2002.04.05.Master Ver)", - "ddpdoja", "DoDonPachi Dai-Ou-Jou V100 (2002.04.05.Master Ver)", - "ddpdojb", "DoDonPachi Dai-Ou-Jou (2002.04.05 Master Ver)", - "ddpdojblk", "DoDonPachi Dai-Ou-Jou (2002.10.07.Black Ver)", - "ddpdojblka", "DoDonPachi Dai-Ou-Jou (2002.10.07 Black Ver)", - "ddpdojh", "Dodonpachi Daioujou Tamashii (V201, China)", - "ddr2m", "Dance Dance Revolution 2nd Mix (GN895 VER. JAA)", - "ddr2mc", "Dance Dance Revolution 2nd Mix with beatmaniaIIDX CLUB VERSiON (GE896 VER. JAA)", - "ddr2mc2", "Dance Dance Revolution 2nd Mix with beatmaniaIIDX substream CLUB VERSiON 2 (GE984 VER. JAA)", - "ddr2ml", "Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAB)", - "ddr2mla", "Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAA)", - "ddr3ma", "Dance Dance Revolution 3rd Mix (GN887 VER. AAA)", - "ddr3mj", "Dance Dance Revolution 3rd Mix (GN887 VER. JAA)", - "ddr3mk", "Dance Dance Revolution 3rd Mix - Ver.Korea2 (GN887 VER. KBA)", - "ddr3mka", "Dance Dance Revolution 3rd Mix - Ver.Korea (GN887 VER. KAA)", - "ddr3mp", "Dance Dance Revolution 3rd Mix Plus (G*A22 VER. JAA)", - "ddr4m", "Dance Dance Revolution 4th Mix (G*A33 VER. AAA)", - "ddr4mj", "Dance Dance Revolution 4th Mix (G*A33 VER. JAA)", - "ddr4mp", "Dance Dance Revolution 4th Mix Plus (G*A34 VER. JAA)", - "ddr4mps", "Dance Dance Revolution 4th Mix Plus Solo (G*A34 VER. JBA)", - "ddr4ms", "Dance Dance Revolution 4th Mix Solo (G*A33 VER. ABA)", - "ddr4msj", "Dance Dance Revolution 4th Mix Solo (G*A33 VER. JBA)", - "ddr5m", "Dance Dance Revolution 5th Mix (G*A27 VER. JAA)", - "ddra", "Dance Dance Revolution (GN845 VER. AAA)", - "ddragon", "Double Dragon (Japan)", - "ddragon2", "Double Dragon II - The Revenge (World)", - "ddragon2u", "Double Dragon II - The Revenge (US)", - "ddragon3", "Double Dragon 3 - The Rosetta Stone (US)", - "ddragon3b", "Double Dragon 3 - The Rosetta Stone (bootleg)", - "ddragon3j", "Double Dragon 3 - The Rosetta Stone (Japan)", - "ddragon3p", "Double Dragon 3 - The Rosetta Stone (prototype)", - "ddragon6809", "Double Dragon (bootleg with 3xM6809, set 1)", - "ddragon6809a", "Double Dragon (bootleg with 3xM6809, set 2)", - "ddragonb", "Double Dragon (bootleg with HD6309)", - "ddragonb2", "Double Dragon (bootleg)", - "ddragonba", "Double Dragon (bootleg with M6803)", - "ddragonu", "Double Dragon (US set 1)", - "ddragonua", "Double Dragon (US set 2)", - "ddragonub", "Double Dragon (US set 3)", - "ddragonw", "Double Dragon (World set 1)", - "ddragonw1", "Double Dragon (World set 2)", - "ddrbocd", "Dance Dance Revolution Best of Cool Dancers (GE892 VER. JAA)", - "ddream95", "Dunk Dream '95 (Japan 1.4, EAM)", - "ddrextrm", "Dance Dance Revolution Extreme (G*C36 VER. JAA)", - "ddribble", "Double Dribble", - "ddribblep", "Double Dribble (prototype?)", - "ddrj", "Dance Dance Revolution - Internet Ranking Ver (GC845 VER. JBA)", - "ddrja", "Dance Dance Revolution (GC845 VER. JAA)", - "ddrjb", "Dance Dance Revolution (GC845 VER. JAB)", - "ddrmax", "DDR Max - Dance Dance Revolution 6th Mix (G*B19 VER. JAA)", - "ddrmax2", "DDR Max 2 - Dance Dance Revolution 7th Mix (G*B20 VER. JAA)", - "ddrs2k", "Dance Dance Revolution Solo 2000 (GC905 VER. AAA)", - "ddrs2kj", "Dance Dance Revolution Solo 2000 (GC905 VER. JAA)", - "ddrsbm", "Dance Dance Revolution Solo Bass Mix (GQ894 VER. JAA)", - "ddru", "Dance Dance Revolution (GN845 VER. UAA)", - "ddrusa", "Dance Dance Revolution USA (G*A44 VER. UAA)", - "ddsom", "Dungeons & Dragons: Shadow over Mystara (Euro 960619)", - "ddsoma", "Dungeons & Dragons: Shadow over Mystara (Asia 960619)", - "ddsomb", "Dungeons & Dragons: Shadow over Mystara (Brazil 960223)", - "ddsomh", "Dungeons & Dragons: Shadow over Mystara (Hispanic 960223)", - "ddsomj", "Dungeons & Dragons: Shadow over Mystara (Japan 960619)", - "ddsomjr1", "Dungeons & Dragons: Shadow over Mystara (Japan 960206)", - "ddsomr1", "Dungeons & Dragons: Shadow over Mystara (Euro 960223)", - "ddsomr2", "Dungeons & Dragons: Shadow over Mystara (Euro 960209)", - "ddsomr3", "Dungeons & Dragons: Shadow over Mystara (Euro 960208)", - "ddsomu", "Dungeons & Dragons: Shadow over Mystara (USA 960619)", - "ddsomud", "Dungeons & Dragons: Shadow over Mystara (USA 960619 Phoenix Edition) (bootleg)", - "ddsomur1", "Dungeons & Dragons: Shadow over Mystara (USA 960209)", - "ddtod", "Dungeons & Dragons: Tower of Doom (Euro 940412)", - "ddtoda", "Dungeons & Dragons: Tower of Doom (Asia 940412)", - "ddtodar1", "Dungeons & Dragons: Tower of Doom (Asia 940113)", - "ddtodd", "Dungeons & Dragons: Tower of Doom (Euro 940412 Phoenix Edition) (bootleg)", - "ddtodh", "Dungeons & Dragons: Tower of Doom (Hispanic 940412)", - "ddtodhr1", "Dungeons & Dragons: Tower of Doom (Hispanic 940125)", - "ddtodhr2", "Dungeons & Dragons: Tower of Doom (Hispanic 940113)", - "ddtodj", "Dungeons & Dragons: Tower of Doom (Japan 940412)", - "ddtodjr1", "Dungeons & Dragons: Tower of Doom (Japan 940125)", - "ddtodjr2", "Dungeons & Dragons: Tower of Doom (Japan 940113)", - "ddtodr1", "Dungeons & Dragons: Tower of Doom (Euro 940113)", - "ddtodu", "Dungeons & Dragons: Tower of Doom (USA 940125)", - "ddtodur1", "Dungeons & Dragons: Tower of Doom (USA 940113)", - "ddungeon", "Dangerous Dungeons (set 1)", - "ddungeone", "Dangerous Dungeons (set 2)", - "ddux", "Dynamite Dux (set 3, World, FD1094 317-0096)", - "ddux1", "Dynamite Dux (set 1, 8751 317-0095)", - "dduxbl", "Dynamite Dux (Datsu bootleg)", - "dduxj", "Dynamite Dux (set 2, Japan, FD1094 317-0094)", - "ddz", "Dou Di Zhu", - "deadang", "Dead Angle", - "deadconx", "Dead Connection (World)", - "deadconxj", "Dead Connection (Japan)", - "deadeye", "Dead Eye", - "deadweap", "Deadly Weapon", - "dealer", "The Dealer", - "deathbrd", "Death Brade (Japan ver JM-3)", - "deathcox", "Death Crimson OX (JPN, USA, EXP, KOR, AUS)", - "deathrac", "Death Race [TTL]", - "deathsm2", "Deathsmiles II: Makai no Merry Christmas (2009/10/14 MASTER VER 4.00)", - "deathsml", "Deathsmiles (2007/10/09 MASTER VER)", - "decathlt", "Decathlete (JUET 960709 V1.001)", - "decathlto", "Decathlete (JUET 960424 V1.000)", - "decocass", "DECO Cassette System", - "deerhunt", "Deer Hunting USA V4.3", - "deerhunta", "Deer Hunting USA V4.2", - "deerhuntb", "Deer Hunting USA V4.0", - "deerhuntc", "Deer Hunting USA V3", - "deerhuntd", "Deer Hunting USA V2", - "deerhunte", "Deer Hunting USA V1", - "defcmnd", "Defense Command (Defender bootleg)", - "defence", "Defence Command (Defender bootleg)", - "defender", "Defender (Red label)", - "defenderb", "Defender (Blue label)", - "defenderg", "Defender (Green label)", - "defenderw", "Defender (White label)", - "defense", "Defense (System 16B, FD1089A 317-0028)", - "defndjeu", "Defender (bootleg)", - "deltrace", "Delta Race", - "deluxe5", "Deluxe 5 (ver. 0107, 07/01/2000, set 1)", - "deluxe5a", "Deluxe 5 (ver. 0107, 07/01/2000, set 2)", - "deluxe5b", "Deluxe 5 (ver. 0107, 07/01/2000, set 3)", - "demndrgn", "Demons & Dragons (prototype)", - "demoderb", "Demolition Derby", - "demoderbc", "Demolition Derby (cocktail)", - "demoderm", "Demolition Derby (MCR-3 Mono Board Version)", - "demofist", "Demolish Fist", - "demon", "Demon", - "demoneye", "Demoneye-X", - "demonwld", "Demon's World / Horror Story (set 1)", - "demonwld1", "Demon's World / Horror Story (set 2)", - "demonwld2", "Demon's World / Horror Story (set 3)", - "demonwld3", "Demon's World / Horror Story (set 4)", - "dendego", "Densha de GO! (Ver 2.2 J)", - "dendego2", "Densha de GO! 2 Kousoku-hen (Ver 2.5 J)", - "dendego23k", "Densha de GO! 2 Kousoku-hen 3000-bandai (Ver 2.20 J)", - "dendegox", "Densha de GO! EX (Ver 2.4 J)", - "denjinmk", "Denjin Makai", - "denseib", "Ghost Chaser Densei (SNES bootleg)", - "depthch", "Depthcharge", - "depthcho", "Depthcharge (older)", - "derbyo2k", "Derby Owners Club 2000 (Rev A)", - "derbyoc", "Derby Owners Club (JPN, USA, EXP, KOR, AUS) (Rev B)", - "derbyoc2", "Derby Owners Club II (JPN, USA, EXP, KOR, AUS) (Rev B)", - "derbyocw", "Derby Owners Club World Edition (JPN, USA, EXP, KOR, AUS) (Rev D)", - "deroon", "Deroon DeroDero", - "desert", "Desert Tank", - "desertbr", "Desert Breaker (World, FD1094 317-0196)", - "desertbrj", "Desert Breaker (Japan, FD1094 317-0194)", - "desertdn", "Desert Dan", - "desertgu", "Desert Gun", - "desertwr", "Desert War / Wangan Sensou", - "destdrby", "Destruction Derby [TTL]", - "desterth", "Destination Earth (bootleg of Lunar Rescue)", - "destiny", "Destiny - The Fortuneteller (USA)", - "destroyr", "Destroyer (version O2)", - "destroyr1", "Destroyer (version O1)", - "destryer", "Destroyer (Cidelsa) (set 1)", - "destryera", "Destroyer (Cidelsa) (set 2)", - "detatwin", "Detana!! Twin Bee (Japan ver. J)", - "detest", "Data East Test Chip", - "deucesw2", "Deuces Wild 2 - American Heritage (Ver. 2.02F)", - "devilfsg", "Devil Fish (Galaxian hardware, bootleg?)", - "devilfsh", "Devil Fish", - "devilw", "Devil World", - "devstors", "Devastators (ver. Z)", - "devstors2", "Devastators (ver. X)", - "devstors3", "Devastators (ver. V)", - "devzone", "Devil Zone", - "devzone2", "Devil Zone (easier)", - "df_djpkr", "Double Joker Poker (45%-75% payout)", - "dfeveron", "Dangun Feveron (Japan, Ver. 98/09/17)", - "dfndr_l4", "Defender (L-4)", - "dfruit", "Fruit Dream (Japan)", - "dh_lx2", "Dirty Harry (LX-2)", - "dharma", "Dharma Doujou", - "dharmak", "Dharma Doujou (Korea)", - "diamond", "Diamond Run", - "diamondp", "Diamond Lady", - "diehard", "Die Hard Arcade (UET 960515 V1.000)", - "dietgo", "Diet Go Go (Euro v1.1 1992.09.26)", - "dietgoe", "Diet Go Go (Euro v1.1 1992.08.04)", - "dietgoj", "Diet Go Go (Japan v1.1 1992.09.26)", - "dietgou", "Diet Go Go (USA v1.1 1992.09.26)", - "digdug", "Dig Dug (rev 2)", - "digdug1", "Dig Dug (rev 1)", - "digdug2", "Dig Dug II (New Ver.)", - "digdug2o", "Dig Dug II (Old Ver.)", - "digdugat", "Dig Dug (Atari, rev 2)", - "digdugat1", "Dig Dug (Atari, rev 1)", - "digger", "Digger", - "diggerc", "Digger (CVS)", - "diggerma", "Digger Man (prototype)", - "digsid", "Dig Dug (manufactured by Sidam)", - "dimahoo", "Dimahoo (Euro 000121)", - "dimahoou", "Dimahoo (USA 000121)", - "dimahoud", "Dimahoo (USA 000121 Phoenix Edition) (bootleg)", - "diner_l1", "Diner (L-1) Europe", - "diner_l3", "Diner (L-3)", - "diner_l4", "Diner (L-4)", - "dingo", "Dingo", - "dingoe", "Dingo (encrypted)", - "dino", "Cadillacs and Dinosaurs (World 930201)", - "dinoeggs", "Dinosaur Eggs", - "dinohunt", "Dinosaur Hunter (Chinese bootleg of Cadillacs and Dinosaurs)", - "dinoj", "Cadillacs: Kyouryuu Shin Seiki (Japan 930201)", - "dinopic", "Cadillacs and Dinosaurs (bootleg with PIC16c57, set 1)", - "dinopic2", "Cadillacs and Dinosaurs (bootleg with PIC16c57, set 2)", - "dinorex", "Dino Rex (World)", - "dinorexj", "Dino Rex (Japan)", - "dinorexu", "Dino Rex (US)", - "dinou", "Cadillacs and Dinosaurs (USA 930201)", - "dirtdash", "Dirt Dash (Rev. DT2)", - "dirtdvls", "Dirt Devils (set 1) (Revision A)", - "dirtdvlsa", "Dirt Devils (set 2) (Revision A)", - "dirtfoxj", "Dirt Fox (Japan)", - "dirtypig", "Dirty Pigskin Football", - "disco", "Disco No.1", - "disco79", "Disco '79", - "disco_l1", "Disco Fever (L-1)", - "discoboy", "Disco Boy", - "discoboyp", "Disco Boy (Promat license?)", - "discof", "Disco No.1 (Rev.F)", - "ditrio", "Diamond Trio (set 1)", - "diverboy", "Diver Boy", - "djboy", "DJ Boy (set 1)", - "djboya", "DJ Boy (set 2)", - "djboyj", "DJ Boy (Japan)", - "dkgensan", "Daiku no Gensan (Japan, M82)", - "dkgensanm72", "Daiku no Gensan (Japan, M72)", - "dking", "Donkey King", - "dkingjr", "Donkey King Jr. (bootleg of Donkey Kong Jr.)", - "dkong", "Donkey Kong (US set 1)", - "dkong3", "Donkey Kong 3 (US)", - "dkong3b", "Donkey Kong 3 (bootleg on Donkey Kong Jr. hardware)", - "dkong3j", "Donkey Kong 3 (Japan)", - "dkongf", "Donkey Kong Foundry (hack)", - "dkonghrd", "Donkey Kong (hard kit)", - "dkongj", "Donkey Kong (Japan set 1)", - "dkongjnrj", "Donkey Kong Junior (Japan?)", - "dkongjo", "Donkey Kong (Japan set 2)", - "dkongjo1", "Donkey Kong (Japan set 3)", - "dkongjr", "Donkey Kong Junior (US set F-2)", - "dkongjrb", "Donkey Kong Jr. (bootleg)", - "dkongjre", "Donkey Kong Junior (E kit)", - "dkongjrj", "Donkey Kong Jr. (Japan)", - "dkongjrm", "Donkey Kong Jr. (bootleg on Moon Cresta hardware)", - "dkongjrpb", "Donkey Kong Junior (P kit, bootleg)", - "dkongo", "Donkey Kong (US set 2)", - "dkongx", "Donkey Kong II - Jumpman Returns (V1.2) (hack)", - "dkongx11", "Donkey Kong II - Jumpman Returns (V1.1) (hack)", - "dlair", "Dragon's Lair (US Rev. F2)", - "dlair2", "Dragon's Lair 2: Time Warp (US v3.19)", - "dlair2_211", "Dragon's Lair 2: Time Warp (US v2.11)", - "dlair2_300", "Dragon's Lair 2: Time Warp (US v3.00)", - "dlair2_312", "Dragon's Lair 2: Time Warp (US v3.12)", - "dlair2_314", "Dragon's Lair 2: Time Warp (US v3.14)", - "dlair2_315", "Dragon's Lair 2: Time Warp (US v3.15)", - "dlair2_315s", "Dragon's Lair 2: Time Warp (Spanish v3.15)", - "dlair2_316e", "Dragon's Lair 2: Time Warp (Euro v3.16)", - "dlair2_317e", "Dragon's Lair 2: Time Warp (Euro v3.17)", - "dlair2_318", "Dragon's Lair 2: Time Warp (US v3.18)", - "dlair2_319e", "Dragon's Lair 2: Time Warp (Euro v3.19)", - "dlair2_319s", "Dragon's Lair 2: Time Warp (Spanish v3.19)", - "dlaira", "Dragon's Lair (US Rev. A, Pioneer PR-7820)", - "dlairb", "Dragon's Lair (US Rev. B, Pioneer PR-7820)", - "dlairc", "Dragon's Lair (US Rev. C, Pioneer PR-7820)", - "dlaird", "Dragon's Lair (US Rev. D, Pioneer LD-V1000)", - "dlaire", "Dragon's Lair (US Rev. E)", - "dlairf", "Dragon's Lair (US Rev. F)", - "dland", "Dream Land / Super Dream Land (bootleg of Bubble Bobble)", - "dleague", "Dynamite League (US)", - "dleaguej", "Dynamite League (Japan)", - "dleuro", "Dragon's Lair (European)", - "dlital", "Dragon's Lair (Italian)", - "dm_h5", "Demolition Man (H-5)", - "dm_h6", "Demolition Man (H-6)", - "dm_la1", "Demolition Man (LA-1)", - "dm_lx3", "Demolition Man (LX-3)", - "dm_lx4", "Demolition Man (LX-4)", - "dm_pa2", "Demolition Man (PA-2)", - "dm_px5", "Demolition Man (PX-5)", - "dmdtouch", "Diamond Touch (0400433V, Local)", - "dmndrby", "Diamond Derby (Newer)", - "dmndrbya", "Diamond Derby (Original)", - "dmnfrnt", "Demon Front (68k label V105, ROM M105XX 08/05/02) (ARM label V105, ROM 08/05/02 S105XX)", - "dmnfrnta", "Demon Front (68k label V102, ROM M102XX 06/19/02) (ARM label V102, ROM 05/24/02 S101XX)", - "dmnfrntb", "Demon Front (68k label V103, ROM M103XX 07/05/02) (ARM label V103, ROM 07/05/02 S103XX)", - "dmnfrntpcb", "Demon Front (68k label V107KR, ROM M107KR 11/03/03) (ARM label V106KR, ROM 10/16/03 S106KR) (JAMMA PCB)", - "dmx", "Dance Maniax (G*874 VER. JAA)", - "dmx2m", "Dance Maniax 2nd Mix (G*A39 VER. JAA)", - "dmx2majp", "Dance Maniax 2nd Mix Append J-Paradise (G*A38 VER. JAA)", - "dncfrks", "Dance Freaks (G*874 VER. KAA)", - "dncsprt", "Dancing Spirit (Russia) (Atronic)", - "dnmtdeka", "Dynamite Deka (J 960515 V1.000)", - "doa", "Dead or Alive (Model 2B, Revision B)", - "doa2", "Dead or Alive 2 (JPN, USA, EXP, KOR, AUS)", - "doa2m", "Dead or Alive 2 Millennium (JPN, USA, EXP, KOR, AUS)", - "doaa", "Dead or Alive (Model 2A, Revision A)", - "doapp", "Dead Or Alive ++ (Japan)", - "docastle", "Mr. Do's Castle (set 1)", - "docastle2", "Mr. Do's Castle (set 2)", - "docastleo", "Mr. Do's Castle (older)", - "dockman", "Dock Man", - "dodgecty", "Dodge City (9131-02)", - "dodgectya", "Dodge City (2131-82, U5-0D)", - "dodgectyb", "Dodge City (2131-82, U5-50)", - "dodgectyc", "Dodge City (2131-82, U5-0 GT)", - "dodgem", "Dodgem", - "dogfgt", "Acrobatic Dog-Fight", - "dogfgtj", "Dog-Fight (Japan)", - "dogfgtu", "Acrobatic Dog-Fight (USA)", - "dogfight", "Dog Fight (Thunderbolt)", - "dogosokb", "Dogou Souken (Joystick hack bootleg)", - "dogosoke", "Dogou Souken", - "dogpatch", "Dog Patch", - "dogyuun", "Dogyuun", - "dogyuuna", "Dogyuun (older set)", - "dogyuunt", "Dogyuun (location test)", - "dokaben", "Dokaben (Japan)", - "dokidoki", "Doki Doki Penguin Land", - "dokyusei", "Mahjong Doukyuusei", - "dokyusp", "Mahjong Doukyuusei Special", - "dollyptn", "Dolly Parton", - "dolmen", "Dolmen", - "dolphin", "Dolphin Blue", - "dolphinp", "Dolphin's Pearl (set 1)", - "dolphntr", "Dolphin Treasure (0200424V, NSW/ACT)", - "dolphtra", "Dolphin Treasure (0100424V, NSW/ACT)", - "domino", "Domino Man", - "domino2", "Domino II (Bingo)", - "dominob", "Domino Block", - "dominobv2", "Domino Block ver.2", - "dominos", "Dominos", - "dommy", "Dommy", - "doncdoon", "Hanabi de Doon! - Don-chan Puzzle", - "dondenmj", "Don Den Mahjong [BET] (Japan)", - "dondokod", "Don Doko Don (World)", - "dondokodj", "Don Doko Don (Japan)", - "dondokodu", "Don Doko Don (US)", - "donghaer", "Donggul Donggul Haerong", - "donpachi", "DonPachi (US)", - "donpachihk", "DonPachi (Hong Kong)", - "donpachij", "DonPachi (Japan)", - "donpachikr", "DonPachi (Korea)", - "dorachan", "Dorachan", - "doraemon", "Doraemon no Eawase Montage (prototype)", - "dorodon", "Dorodon (set 1)", - "dorodon2", "Dorodon (set 2)", - "dorunrun", "Do! Run Run (set 1)", - "dorunrun2", "Do! Run Run (set 2)", - "dorunrunc", "Do! Run Run (Do's Castle hardware, set 1)", - "dorunrunca", "Do! Run Run (Do's Castle hardware, set 2)", - "dotrikun", "Dottori Kun (new version)", - "dotrikun2", "Dottori Kun (old version)", - "dotron", "Discs of Tron (Upright)", - "dotrona", "Discs of Tron (Upright alternate)", - "dotrone", "Discs of Tron (Environmental)", - "doubledr", "Double Dragon (Neo-Geo)", - "douni", "Mr. Do vs. Unicorns", - "dowild", "Mr. Do's Wild Ride", - "downhill", "Downhill Bikers (DH3 Ver. A)", - "downtown", "DownTown / Mokugeki (set 1)", - "downtown2", "DownTown / Mokugeki (set 2)", - "downtownj", "DownTown / Mokugeki (joystick hack)", - "downtownp", "DownTown / Mokugeki (prototype)", - "dphl", "Draw Poker HI-LO (M.Kramer)", - "dphla", "Draw Poker HI-LO (Alt)", - "dphljp", "Draw Poker HI-LO (Japanese)", - "dphlunka", "Draw Poker HI-LO (unknown, rev 1)", - "dphlunkb", "Draw Poker HI-LO (unknown, rev 2)", - "dplay", "Double Play", - "dpoker", "Draw Poker (Bally, 03-20)", - "dquizgo", "Date Quiz Go Go (Korea)", - "dquizgo2", "Date Quiz Go Go Episode 2", - "drac_l1", "Bram Stoker's Dracula (L-1)", - "drac_p11", "Bram Stoker's Dracula (P-11)", - "draco", "Draco", - "dracula", "Dracula", - "dragchrn", "Dragon Chronicles (DC001 Ver. A)", - "dragfist", "Dragonfist", - "dragnblz", "Dragon Blaze", - "dragnfly", "Dragonfly (Konami Endeavour)", - "dragngun", "Dragon Gun (US)", - "dragngunj", "Dragon Gun (Japan)", - "dragon", "Dragon", - "dragoona", "Dragoon Might (ver AAB)", - "dragoonj", "Dragoon Might (ver JAA)", - "dragrace", "Drag Race", - "dragsphr", "Dragon Sphere", - "drakor", "Drakor", - "drakton", "Drakton (DK conversion)", - "drbyocwc", "Derby Owners Club World Edition (JPN, USA, EXP, KOR, AUS) (Rev C)", - "dreambal", "Dream Ball (Japan V2.4)", - "dreamwld", "Dream World", - "dremshpr", "Dream Shopper", - "drgnbowl", "Dragon Bowl", - "drgnbstr", "Dragon Buster", - "drgninja", "Dragonninja (Japan)", - "drgninjab", "Dragonninja (bootleg)", - "drgnmst", "Dragon Master", - "drgnunit", "Dragon Unit / Castle of Dragon", - "drgnwrld", "Dragon World (World, V040O)", - "drgnwrldv10c", "Zhong Guo Long (China, V010C)", - "drgnwrldv11h", "Dong Fang Zhi Zhu (Hong Kong, V011H)", - "drgnwrldv20j", "Zhong Guo Long (Japan, V020J)", - "drgnwrldv21", "Dragon World (World, V021O)", - "drgnwrldv21j", "Zhong Guo Long (Japan, V021J)", - "drgnwrldv30", "Dragon World (World, V030O)", - "drgpunch", "Dragon Punch (Japan)", - "drgw2", "Dragon World II (ver. 110X, Export)", - "drgw2c", "Zhong Guo Long II (ver. 100C, China)", - "drgw2j", "Chuugokuryuu II (ver. 100J, Japan)", - "drgw3", "Dragon World 3 (ver. 106)", - "drgw3100", "Dragon World 3 (Japan, ver. 100)", - "drgw3105", "Dragon World 3 (ver. 105)", - "drhl", "Drews Revenge (v.2.89, set 1)", - "drhla", "Drews Revenge (v.2.89, set 2)", - "dribling", "Dribbling", - "driblingbr", "Dribbling (bootleg, Brazil)", - "driblingo", "Dribbling (Olympia)", - "drifto94", "Drift Out '94 - The Hard Order (Japan)", - "driftout", "Drift Out (Europe)", - "driftoutj", "Drift Out (Japan)", - "drivedge", "Driver's Edge", - "driveout", "Drive Out (bootleg)", - "driveyes", "Driver's Eyes (Japan)", - "drivfrcb", "Driving Force (Galaxian conversion bootleg)", - "drivfrcg", "Driving Force (Galaxian conversion)", - "drivfrcp", "Driving Force (Pac-Man conversion)", - "drivfrct", "Top Racer (bootleg of Driving Force)", - "drktnjr", "Drakton (DKJr conversion)", - "drmario", "Vs. Dr. Mario", - "drmicro", "Dr. Micro", - "drmmake", "Dream Maker (Russia) (Atronic)", - "drmn", "DrumMania (GQ881 VER. JAD)", - "drmn10m", "DrumMania 10th Mix (G*D40 VER. JAA)", - "drmn2m", "DrumMania 2nd Mix (GE912 VER. JAB)", - "drmn2mpu", "DrumMania 2nd Mix Session Power Up Kit (GE912 VER. JAB)", - "drmn3m", "DrumMania 3rd Mix (G*A23 VER. JAA)", - "drmn4m", "DrumMania 4th Mix (G*A25 VER. JAA)", - "drmn5m", "DrumMania 5th Mix (G*B05 VER. JAA)", - "drmn6m", "DrumMania 6th Mix (G*B16 VER. JAA)", - "drmn7m", "DrumMania 7th Mix power-up ver. (G*C07 VER. JBA)", - "drmn7ma", "DrumMania 7th Mix (G*C07 VER. JAA)", - "drmn8m", "DrumMania 8th Mix (G*C07 VER. JAA)", - "drmn9m", "DrumMania 9th Mix (G*D09 VER. JAA)", - "drtomy", "Dr. Tomy", - "drtoppel", "Dr. Toppel's Adventure (World)", - "drtoppelj", "Dr. Toppel's Tankentai (Japan)", - "drtoppelu", "Dr. Toppel's Adventure (US)", - "drw80pk2", "Draw 80 Poker - Minn", - "drw80pkr", "Draw 80 Poker", - "dsaber", "Dragon Saber", - "dsaberj", "Dragon Saber (Japan, Rev B)", - "dsem", "Dancing Stage Euro Mix (G*936 VER. EAA)", - "dsem2", "Dancing Stage Euro Mix 2 (G*C23 VER. EAA)", - "dsfdct", "Dancing Stage featuring Dreams Come True (GC910 VER. JCA)", - "dsfdcta", "Dancing Stage featuring Dreams Come True (GC910 VER. JAA)", - "dsfdr", "Dancing Stage Featuring Disney's Rave (GCA37JAA)", - "dsftkd", "Dancing Stage featuring TRUE KiSS DESTiNATiON (G*884 VER. JAA)", - "dslayrr", "Dragon Slayer (Russia, set 1)", - "dslayrra", "Dragon Slayer (Russia, set 2)", - "dsmbl", "Deathsmiles MegaBlack Label (2008/10/06 MEGABLACK LABEL VER)", - "dsoccr94", "Dream Soccer '94 (World, M107 hardware)", - "dsoccr94j", "Dream Soccer '94 (Japan, M92 hardware)", - "dspirit", "Dragon Spirit (new version (DS3))", - "dspirit1", "Dragon Spirit (old version (DS1))", - "dspirit2", "Dragon Spirit (DS2)", - "dstage", "Dancing Stage - Internet Ranking Ver (GC845 VER. EBA)", - "dstagea", "Dancing Stage (GN845 VER. EAA)", - "dstlk", "Darkstalkers: The Night Warriors (Euro 940705)", - "dstlka", "Darkstalkers: The Night Warriors (Asia 940705)", - "dstlkh", "Darkstalkers: The Night Warriors (Hispanic 940818)", - "dstlku", "Darkstalkers: The Night Warriors (USA 940818)", - "dstlku1d", "Darkstalkers: The Night Warriors (USA 940705 Phoenix Edition) (bootleg)", - "dstlkur1", "Darkstalkers: The Night Warriors (USA 940705)", - "dtfamily", "Diet Family", - "dtoyoken", "Mahjong Dai Touyouken (Japan)", - "dtrvwz5", "Deluxe Trivia ? Whiz (6221-70, U5-0A Edition 5)", - "dualaslt", "Dual Assault", - "dualgame", "Dual Games (prototype)", - "duckhunt", "Vs. Duck Hunt (set DH3 E)", - "dumpmtmt", "Dump Matsumoto (Japan, 8751 317-0011a)", - "dungdrag", "Dungeons & Dragons", - "dungeonm", "Dungeon Magic (Ver 2.1O 1994/02/18)", - "dungeonmu", "Dungeon Magic (Ver 2.1A 1994/02/18)", - "dunhuang", "Mahjong Dunhuang", - "dunkmnia", "Dunk Mania (Asia, DM2/VER.C)", - "dunkmniajc", "Dunk Mania (Japan, DM1/VER.C)", - "dunkshot", "Dunk Shot (FD1089A 317-0022)", - "dvisland", "Devil Island (Version 1.4R CGA)", - "dvislando", "Devil Island (Version 1.0R CGA)", - "dvlrider", "Devil Riders", - "dvlriderg", "Devil Riders (German speech)", - "dvlrideri", "Devil Riders (Italian speech)", - "dvlsdre", "Devil's Dare", - "dvlsdre2", "Devil's Dare (Sound Only)", - "dw2001", "Dragon World 2001 (V100?, Japan)", - "dw2v100x", "Dragon World II (ver. 100X, Export)", - "dw_l1", "Doctor Who (L-1)", - "dw_l2", "Doctor Who (L-2)", - "dw_p5", "Doctor Who (P-5)", - "dwarfd", "Draw Poker III / Dwarfs Den (Dwarf Gfx)", - "dwarfda", "Draw Poker III / Dwarfs Den (Card Gfx)", - "dwex", "Dragon World 3 EX (ver. 100)", - "dwpc", "Dragon World Pretty Chance (V101, Japan)", - "dybb99", "Dynamite Baseball '99 (JPN) / World Series '99 (USA, EXP, KOR, AUS) (Rev B)", - "dybbnao", "Dynamite Baseball NAOMI (JPN)", - "dyger", "Dyger (Korea set 1)", - "dygera", "Dyger (Korea set 2)", - "dygolf", "Dynamic Golf / Virtua Golf (Rev A) (GDS-0009A)", - "dynabb", "Dynamite Baseball", - "dynabb97", "Dynamite Baseball 97 (Revision A)", - "dynablst", "Dynablaster / Bomber Man", - "dynablstb", "Dynablaster / Bomber Man (bootleg)", - "dynablstb2", "Dynablaster / Bomber Man (bootleg, alt)", - "dynabomb", "Dynamite Bomber (Korea, Rev 1.5)", - "dynadice", "Dynamic Dice", - "dynagear", "Dyna Gear", - "dynamcop", "Dynamite Cop (Export, Model 2A)", - "dynamcopb", "Dynamite Cop (Export, Model 2B)", - "dynamcopc", "Dynamite Cop (USA, Model 2C)", - "dynamski", "Dynamic Ski", - "dynashot", "Dynamic Shoot Kyousou", - "dyndeka2", "Dynamite Deka 2 (Japan, Model 2A)", - "dyndeka2b", "Dynamite Deka 2 (Japan, Model 2B)", - "dynduke", "Dynamite Duke (Europe set 1)", - "dyndukea", "Dynamite Duke (Europe set 2)", - "dyndukej", "Dynamite Duke (Japan)", - "dyndukeu", "Dynamite Duke (US)", - "dynobop", "Dyno Bop", - "dynwar", "Dynasty Wars (USA, B-Board 89624B-?)", - "dynwara", "Dynasty Wars (USA, B-Board 88622B-3)", - "dynwarj", "Tenchi wo Kurau (Japan)", - "dynwarjr", "Tenchi wo Kurau (Japan Resale Ver.)", - "dzigzag", "Zig Zag (Dig Dug hardware)", - "eagle", "Eagle (set 1)", - "eagle2", "Eagle (set 2)", - "eagle3", "Eagle (set 3)", - "eaglshot", "Eagle Shot Golf", - "earthjkr", "U.N. Defense Force: Earth Joker (Japan)", - "earthjkrp", "U.N. Defense Force: Earth Joker (Japan, prototype?)", - "eatpm_4g", "Elvira and the Party Monsters (LG-4)", - "eatpm_4u", "Elvira and the Party Monsters (LU-4)", - "eatpm_l1", "Elvira and the Party Monsters (LA-1)", - "eatpm_l2", "Elvira and the Party Monsters (LA-2)", - "eatpm_l4", "Elvira and the Party Monsters (LA-4)", - "eatpm_p7", "Elvira and the Party Monsters (PA-7)", - "eballchp", "Eight Ball Champ", - "eballd14", "Eight Ball Deluxe (rev. 14)", - "eballdlx", "Eight Ball Deluxe (rev. 15)", - "eballdlxp1", "Eight Ball Deluxe (prototype rev. 1)", - "eballdlxp2", "Eight Ball Deluxe (prototype rev. 2)", - "eballdlxp3", "Eight Ball Deluxe (prototype rev. 3)", - "eballdlxp4", "Eight Ball Deluxe (prototype rev. 4)", - "ebases", "Extra Bases", - "ec_bar5", "Bar 5 (older PCB) (Electrocoin)", - "ec_bar7", "Bar 7 (Concept Games Ltd) (?)", - "ec_barx", "Bar X (Electrocoin) (set 1)", - "ec_barx__0", "Bar X (Electrocoin) (set 28)", - "ec_barx__1", "Bar X (Electrocoin) (set 29)", - "ec_barx__2", "Bar X (Electrocoin) (set 30)", - "ec_barx__3", "Bar X (Electrocoin) (set 31)", - "ec_barx__4", "Bar X (Electrocoin) (set 32)", - "ec_barx__5", "Bar X (Electrocoin) (set 33)", - "ec_barx__6", "Bar X (Electrocoin) (set 34)", - "ec_barx__7", "Bar X (Electrocoin) (set 35)", - "ec_barx__8", "Bar X (Electrocoin) (set 36)", - "ec_barx__9", "Bar X (Electrocoin) (set 37)", - "ec_barx__a", "Bar X (Electrocoin) (set 2)", - "ec_barx__a0", "Bar X (Electrocoin) (set 64)", - "ec_barx__a1", "Bar X (Electrocoin) (set 65)", - "ec_barx__a2", "Bar X (Electrocoin) (set 66)", - "ec_barx__a3", "Bar X (Electrocoin) (set 67)", - "ec_barx__a4", "Bar X (Electrocoin) (set 68)", - "ec_barx__a5", "Bar X (Electrocoin) (set 69)", - "ec_barx__a6", "Bar X (Electrocoin) (set 70)", - "ec_barx__a7", "Bar X (Electrocoin) (set 71)", - "ec_barx__a8", "Bar X (Electrocoin) (set 72)", - "ec_barx__a9", "Bar X (Electrocoin) (set 73)", - "ec_barx__aa", "Bar X (Electrocoin) (set 38)", - "ec_barx__ab", "Bar X (Electrocoin) (set 39)", - "ec_barx__ac", "Bar X (Electrocoin) (set 40)", - "ec_barx__ad", "Bar X (Electrocoin) (set 41)", - "ec_barx__ae", "Bar X (Electrocoin) (set 42)", - "ec_barx__af", "Bar X (Electrocoin) (set 43)", - "ec_barx__ag", "Bar X (Electrocoin) (set 44)", - "ec_barx__ah", "Bar X (Electrocoin) (set 45)", - "ec_barx__ai", "Bar X (Electrocoin) (set 46)", - "ec_barx__aj", "Bar X (Electrocoin) (set 47)", - "ec_barx__ak", "Bar X (Electrocoin) (set 48)", - "ec_barx__al", "Bar X (Electrocoin) (set 49)", - "ec_barx__am", "Bar X (Electrocoin) (set 50)", - "ec_barx__an", "Bar X (Electrocoin) (set 51)", - "ec_barx__ao", "Bar X (Electrocoin) (set 52)", - "ec_barx__ap", "Bar X (Electrocoin) (set 53)", - "ec_barx__aq", "Bar X (Electrocoin) (set 54)", - "ec_barx__ar", "Bar X (Electrocoin) (set 55)", - "ec_barx__as", "Bar X (Electrocoin) (set 56)", - "ec_barx__at", "Bar X (Electrocoin) (set 57)", - "ec_barx__au", "Bar X (Electrocoin) (set 58)", - "ec_barx__av", "Bar X (Electrocoin) (set 59)", - "ec_barx__aw", "Bar X (Electrocoin) (set 60)", - "ec_barx__ax", "Bar X (Electrocoin) (set 61)", - "ec_barx__ay", "Bar X (Electrocoin) (set 62)", - "ec_barx__az", "Bar X (Electrocoin) (set 63)", - "ec_barx__b", "Bar X (Electrocoin) (set 3)", - "ec_barx__ba", "Bar X (Electrocoin) (set 74)", - "ec_barx__bb", "Bar X (Electrocoin) (set 75)", - "ec_barx__bc", "Bar X (Electrocoin) (set 76)", - "ec_barx__bd", "Bar X (Electrocoin) (set 77)", - "ec_barx__be", "Bar X (Electrocoin) (set 78)", - "ec_barx__bf", "Bar X (Electrocoin) (set 79)", - "ec_barx__bg", "Bar X (Electrocoin) (set 80)", - "ec_barx__bh", "Bar X (Electrocoin) (set 81)", - "ec_barx__bi", "Bar X (Electrocoin) (set 82)", - "ec_barx__bj", "Bar X (Electrocoin) (set 83)", - "ec_barx__bk", "Bar X (Electrocoin) (set 84)", - "ec_barx__bl", "Bar X (Electrocoin) (set 85)", - "ec_barx__bm", "Bar X (Electrocoin) (set 86)", - "ec_barx__bn", "Bar X (Electrocoin) (set 87)", - "ec_barx__bo", "Bar X (Electrocoin) (set 88)", - "ec_barx__bp", "Bar X (Electrocoin) (set 89)", - "ec_barx__bq", "Bar X (Electrocoin) (set 90)", - "ec_barx__br", "Bar X (Electrocoin) (set 91)", - "ec_barx__bs", "Bar X (Electrocoin) (set 92)", - "ec_barx__bt", "Bar X (Electrocoin) (set 93)", - "ec_barx__bu", "Bar X (Electrocoin) (set 94)", - "ec_barx__c", "Bar X (Electrocoin) (set 4)", - "ec_barx__d", "Bar X (Electrocoin) (set 5)", - "ec_barx__e", "Bar X (Electrocoin) (set 6)", - "ec_barx__f", "Bar X (Electrocoin) (set 7)", - "ec_barx__g", "Bar X (Electrocoin) (set 8)", - "ec_barx__h", "Bar X (Electrocoin) (set 9)", - "ec_barx__i", "Bar X (Electrocoin) (set 10)", - "ec_barx__j", "Bar X (Electrocoin) (set 11)", - "ec_barx__k", "Bar X (Electrocoin) (set 12)", - "ec_barx__l", "Bar X (Electrocoin) (set 13)", - "ec_barx__m", "Bar X (Electrocoin) (set 14)", - "ec_barx__n", "Bar X (Electrocoin) (set 15)", - "ec_barx__o", "Bar X (Electrocoin) (set 16)", - "ec_barx__p", "Bar X (Electrocoin) (set 17)", - "ec_barx__q", "Bar X (Electrocoin) (set 18)", - "ec_barx__r", "Bar X (Electrocoin) (set 19)", - "ec_barx__s", "Bar X (Electrocoin) (set 20)", - "ec_barx__t", "Bar X (Electrocoin) (set 21)", - "ec_barx__u", "Bar X (Electrocoin) (set 22)", - "ec_barx__v", "Bar X (Electrocoin) (set 23)", - "ec_barx__w", "Bar X (Electrocoin) (set 24)", - "ec_barx__x", "Bar X (Electrocoin) (set 25)", - "ec_barx__y", "Bar X (Electrocoin) (set 26)", - "ec_barx__z", "Bar X (Electrocoin) (set 27)", - "ec_barxmab", "Bar X (MAB PCB) (Electrocoin)", - "ec_barxo", "Bar X (older PCB) (Electrocoin) (set 1)", - "ec_barxoa", "Bar X (older PCB) (Electrocoin) (set 2)", - "ec_barxob", "Bar X (older PCB) (Electrocoin) (set 3)", - "ec_barxoc", "Bar X (older PCB) (Electrocoin) (set 4)", - "ec_barxod", "Bar X (older PCB) (Electrocoin) (set 5)", - "ec_barxoe", "Bar X (older PCB) (Electrocoin) (set 6)", - "ec_big7", "Big 7 / Super Big 7 (Electrocoin) (set 1)", - "ec_big7__0", "Big 7 / Super Big 7 (Electrocoin) (set 28)", - "ec_big7__1", "Big 7 / Super Big 7 (Electrocoin) (set 29)", - "ec_big7__2", "Big 7 / Super Big 7 (Electrocoin) (set 30)", - "ec_big7__3", "Big 7 / Super Big 7 (Electrocoin) (set 31)", - "ec_big7__4", "Big 7 / Super Big 7 (Electrocoin) (set 32)", - "ec_big7__5", "Big 7 / Super Big 7 (Electrocoin) (set 33)", - "ec_big7__6", "Big 7 / Super Big 7 (Electrocoin) (set 34)", - "ec_big7__7", "Big 7 / Super Big 7 (Electrocoin) (set 35)", - "ec_big7__8", "Big 7 / Super Big 7 (Electrocoin) (set 36)", - "ec_big7__9", "Big 7 / Super Big 7 (Electrocoin) (set 37)", - "ec_big7__a", "Big 7 / Super Big 7 (Electrocoin) (set 2)", - "ec_big7__a0", "Big 7 / Super Big 7 (Electrocoin) (set 64)", - "ec_big7__a1", "Big 7 / Super Big 7 (Electrocoin) (set 65)", - "ec_big7__a2", "Big 7 / Super Big 7 (Electrocoin) (set 66)", - "ec_big7__aa", "Big 7 / Super Big 7 (Electrocoin) (set 38)", - "ec_big7__ab", "Big 7 / Super Big 7 (Electrocoin) (set 39)", - "ec_big7__ac", "Big 7 / Super Big 7 (Electrocoin) (set 40)", - "ec_big7__ad", "Big 7 / Super Big 7 (Electrocoin) (set 41)", - "ec_big7__ae", "Big 7 / Super Big 7 (Electrocoin) (set 42)", - "ec_big7__af", "Big 7 / Super Big 7 (Electrocoin) (set 43)", - "ec_big7__ag", "Big 7 / Super Big 7 (Electrocoin) (set 44)", - "ec_big7__ah", "Big 7 / Super Big 7 (Electrocoin) (set 45)", - "ec_big7__ai", "Big 7 / Super Big 7 (Electrocoin) (set 46)", - "ec_big7__aj", "Big 7 / Super Big 7 (Electrocoin) (set 47)", - "ec_big7__ak", "Big 7 / Super Big 7 (Electrocoin) (set 48)", - "ec_big7__al", "Big 7 / Super Big 7 (Electrocoin) (set 49)", - "ec_big7__am", "Big 7 / Super Big 7 (Electrocoin) (set 50)", - "ec_big7__an", "Big 7 / Super Big 7 (Electrocoin) (set 51)", - "ec_big7__ao", "Big 7 / Super Big 7 (Electrocoin) (set 52)", - "ec_big7__ap", "Big 7 / Super Big 7 (Electrocoin) (set 53)", - "ec_big7__aq", "Big 7 / Super Big 7 (Electrocoin) (set 54)", - "ec_big7__ar", "Big 7 / Super Big 7 (Electrocoin) (set 55)", - "ec_big7__as", "Big 7 / Super Big 7 (Electrocoin) (set 56)", - "ec_big7__at", "Big 7 / Super Big 7 (Electrocoin) (set 57)", - "ec_big7__au", "Big 7 / Super Big 7 (Electrocoin) (set 58)", - "ec_big7__av", "Big 7 / Super Big 7 (Electrocoin) (set 59)", - "ec_big7__aw", "Big 7 / Super Big 7 (Electrocoin) (set 60)", - "ec_big7__ax", "Big 7 / Super Big 7 (Electrocoin) (set 61)", - "ec_big7__ay", "Big 7 / Super Big 7 (Electrocoin) (set 62)", - "ec_big7__az", "Big 7 / Super Big 7 (Electrocoin) (set 63)", - "ec_big7__b", "Big 7 / Super Big 7 (Electrocoin) (set 3)", - "ec_big7__c", "Big 7 / Super Big 7 (Electrocoin) (set 4)", - "ec_big7__d", "Big 7 / Super Big 7 (Electrocoin) (set 5)", - "ec_big7__e", "Big 7 / Super Big 7 (Electrocoin) (set 6)", - "ec_big7__f", "Big 7 / Super Big 7 (Electrocoin) (set 7)", - "ec_big7__g", "Big 7 / Super Big 7 (Electrocoin) (set 8)", - "ec_big7__h", "Big 7 / Super Big 7 (Electrocoin) (set 9)", - "ec_big7__i", "Big 7 / Super Big 7 (Electrocoin) (set 10)", - "ec_big7__j", "Big 7 / Super Big 7 (Electrocoin) (set 11)", - "ec_big7__k", "Big 7 / Super Big 7 (Electrocoin) (set 12)", - "ec_big7__l", "Big 7 / Super Big 7 (Electrocoin) (set 13)", - "ec_big7__m", "Big 7 / Super Big 7 (Electrocoin) (set 14)", - "ec_big7__n", "Big 7 / Super Big 7 (Electrocoin) (set 15)", - "ec_big7__o", "Big 7 / Super Big 7 (Electrocoin) (set 16)", - "ec_big7__p", "Big 7 / Super Big 7 (Electrocoin) (set 17)", - "ec_big7__q", "Big 7 / Super Big 7 (Electrocoin) (set 18)", - "ec_big7__r", "Big 7 / Super Big 7 (Electrocoin) (set 19)", - "ec_big7__s", "Big 7 / Super Big 7 (Electrocoin) (set 20)", - "ec_big7__t", "Big 7 / Super Big 7 (Electrocoin) (set 21)", - "ec_big7__u", "Big 7 / Super Big 7 (Electrocoin) (set 22)", - "ec_big7__v", "Big 7 / Super Big 7 (Electrocoin) (set 23)", - "ec_big7__w", "Big 7 / Super Big 7 (Electrocoin) (set 24)", - "ec_big7__x", "Big 7 / Super Big 7 (Electrocoin) (set 25)", - "ec_big7__y", "Big 7 / Super Big 7 (Electrocoin) (set 26)", - "ec_big7__z", "Big 7 / Super Big 7 (Electrocoin) (set 27)", - "ec_bx125", "Bar X 125 (Electrocoin) (set 1)", - "ec_bx125a", "Bar X 125 (Electrocoin) (set 2)", - "ec_bx180", "Bar X (Z180 hardware) (Electrocoin) (set 1)", - "ec_bx180a", "Bar X (Z180 hardware) (Electrocoin) (set 2)", - "ec_bxd7s", "Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 1)", - "ec_bxd7s__a", "Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 2)", - "ec_bxd7s__b", "Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 3)", - "ec_bxd7s__c", "Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 4)", - "ec_bxd7s__d", "Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 5)", - "ec_casbx", "Casino Bar X (Electrocoin) (set 1)", - "ec_casbx__a", "Casino Bar X (Electrocoin) (set 2)", - "ec_casbx__b", "Casino Bar X (Electrocoin) (set 3)", - "ec_casbxcon", "Casino Bar X (Concept Games Ltd) (?)", - "ec_casbxo", "Casino Bar X (older PCB) (Electrocoin) (set 1)", - "ec_casbxoa", "Casino Bar X (older PCB) (Electrocoin) (set 2)", - "ec_casmb", "Casino Multi Bar (Concept Games Ltd) (?)", - "ec_fltr", "Flutter (Concept Games Ltd) (?)", - "ec_gold7", "Golden 7 (Concept Games Ltd) (?)", - "ec_jackb", "Jackpot Bars (MAB PCB?) (Concept Games Ltd) (?)", - "ec_laby", "Labyrinth (v8) (Electrocoin)", - "ec_labya", "Labyrinth (v10) (Electrocoin)", - "ec_mag7s", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 1)", - "ec_mag7s__0", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 28)", - "ec_mag7s__1", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 29)", - "ec_mag7s__2", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 30)", - "ec_mag7s__3", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 31)", - "ec_mag7s__4", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 32)", - "ec_mag7s__5", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 33)", - "ec_mag7s__6", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 34)", - "ec_mag7s__7", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 35)", - "ec_mag7s__8", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 36)", - "ec_mag7s__9", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 37)", - "ec_mag7s__a", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 2)", - "ec_mag7s__a0", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 64)", - "ec_mag7s__aa", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 38)", - "ec_mag7s__ab", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 39)", - "ec_mag7s__ac", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 40)", - "ec_mag7s__ad", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 41)", - "ec_mag7s__ae", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 42)", - "ec_mag7s__af", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 43)", - "ec_mag7s__ag", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 44)", - "ec_mag7s__ah", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 45)", - "ec_mag7s__ai", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 46)", - "ec_mag7s__aj", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 47)", - "ec_mag7s__ak", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 48)", - "ec_mag7s__al", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 49)", - "ec_mag7s__am", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 50)", - "ec_mag7s__an", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 51)", - "ec_mag7s__ao", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 52)", - "ec_mag7s__ap", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 53)", - "ec_mag7s__aq", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 54)", - "ec_mag7s__ar", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 55)", - "ec_mag7s__as", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 56)", - "ec_mag7s__at", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 57)", - "ec_mag7s__au", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 58)", - "ec_mag7s__av", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 59)", - "ec_mag7s__aw", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 60)", - "ec_mag7s__ax", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 61)", - "ec_mag7s__ay", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 62)", - "ec_mag7s__az", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 63)", - "ec_mag7s__b", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 3)", - "ec_mag7s__c", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 4)", - "ec_mag7s__d", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 5)", - "ec_mag7s__e", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 6)", - "ec_mag7s__f", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 7)", - "ec_mag7s__g", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 8)", - "ec_mag7s__h", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 9)", - "ec_mag7s__i", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 10)", - "ec_mag7s__j", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 11)", - "ec_mag7s__k", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 12)", - "ec_mag7s__l", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 13)", - "ec_mag7s__m", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 14)", - "ec_mag7s__n", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 15)", - "ec_mag7s__o", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 16)", - "ec_mag7s__p", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 17)", - "ec_mag7s__q", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 18)", - "ec_mag7s__r", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 19)", - "ec_mag7s__s", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 20)", - "ec_mag7s__t", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 21)", - "ec_mag7s__u", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 22)", - "ec_mag7s__v", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 23)", - "ec_mag7s__w", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 24)", - "ec_mag7s__x", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 25)", - "ec_mag7s__y", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 26)", - "ec_mag7s__z", "Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 27)", - "ec_mgbel", "Megabell (Concept Games Ltd) (?)", - "ec_multb", "Multi Bar (Concept Games Ltd) (?)", - "ec_ndgxs", "Nudge Xcess (MAB PCB?) (Concept Games Ltd) (?)", - "ec_oxocg", "Oxo Classic Gold (Electrocoin) (?)", - "ec_oxocl", "Oxo Club (Electrocoin) (?)", - "ec_oxogb", "Oxo Golden Bars (Electrocoin) (?)", - "ec_oxorl", "Oxo Reels (Electrocoin) (?)", - "ec_oxorv", "Oxo Revolution (Electrocoin) (?)", - "ec_penni", "Pennies From Heaven (v1) (Electrocoin)", - "ec_pennia", "Pennies From Heaven (v6) (Electrocoin)", - "ec_pyram", "Pyramid (v1) (Electrocoin)", - "ec_pyrama", "Pyramid (v6) (Electrocoin)", - "ec_rcc", "Royal Casino Club (Electrocoin) (?)", - "ec_rdht7", "Red Hot 7 (MAB PCB?) (Concept Games Ltd) (?)", - "ec_redbr", "Red Bar (Electrocoin) (set 1)", - "ec_redbr__0", "Red Bar (Electrocoin) (set 28)", - "ec_redbr__1", "Red Bar (Electrocoin) (set 29)", - "ec_redbr__2", "Red Bar (Electrocoin) (set 30)", - "ec_redbr__3", "Red Bar (Electrocoin) (set 31)", - "ec_redbr__4", "Red Bar (Electrocoin) (set 32)", - "ec_redbr__5", "Red Bar (Electrocoin) (set 33)", - "ec_redbr__6", "Red Bar (Electrocoin) (set 34)", - "ec_redbr__7", "Red Bar (Electrocoin) (set 35)", - "ec_redbr__8", "Red Bar (Electrocoin) (set 36)", - "ec_redbr__9", "Red Bar (Electrocoin) (set 37)", - "ec_redbr__a", "Red Bar (Electrocoin) (set 2)", - "ec_redbr__a0", "Red Bar (Electrocoin) (set 64)", - "ec_redbr__a1", "Red Bar (Electrocoin) (set 65)", - "ec_redbr__a2", "Red Bar (Electrocoin) (set 66)", - "ec_redbr__a3", "Red Bar (Electrocoin) (set 67)", - "ec_redbr__a4", "Red Bar (Electrocoin) (set 68)", - "ec_redbr__a5", "Red Bar (Electrocoin) (set 69)", - "ec_redbr__a6", "Red Bar (Electrocoin) (set 70)", - "ec_redbr__a7", "Red Bar (Electrocoin) (set 71)", - "ec_redbr__a8", "Red Bar (Electrocoin) (set 72)", - "ec_redbr__a9", "Red Bar (Electrocoin) (set 73)", - "ec_redbr__aa", "Red Bar (Electrocoin) (set 38)", - "ec_redbr__ab", "Red Bar (Electrocoin) (set 39)", - "ec_redbr__ac", "Red Bar (Electrocoin) (set 40)", - "ec_redbr__ad", "Red Bar (Electrocoin) (set 41)", - "ec_redbr__ae", "Red Bar (Electrocoin) (set 42)", - "ec_redbr__af", "Red Bar (Electrocoin) (set 43)", - "ec_redbr__ag", "Red Bar (Electrocoin) (set 44)", - "ec_redbr__ah", "Red Bar (Electrocoin) (set 45)", - "ec_redbr__ai", "Red Bar (Electrocoin) (set 46)", - "ec_redbr__aj", "Red Bar (Electrocoin) (set 47)", - "ec_redbr__ak", "Red Bar (Electrocoin) (set 48)", - "ec_redbr__al", "Red Bar (Electrocoin) (set 49)", - "ec_redbr__am", "Red Bar (Electrocoin) (set 50)", - "ec_redbr__an", "Red Bar (Electrocoin) (set 51)", - "ec_redbr__ao", "Red Bar (Electrocoin) (set 52)", - "ec_redbr__ap", "Red Bar (Electrocoin) (set 53)", - "ec_redbr__aq", "Red Bar (Electrocoin) (set 54)", - "ec_redbr__ar", "Red Bar (Electrocoin) (set 55)", - "ec_redbr__as", "Red Bar (Electrocoin) (set 56)", - "ec_redbr__at", "Red Bar (Electrocoin) (set 57)", - "ec_redbr__au", "Red Bar (Electrocoin) (set 58)", - "ec_redbr__av", "Red Bar (Electrocoin) (set 59)", - "ec_redbr__aw", "Red Bar (Electrocoin) (set 60)", - "ec_redbr__ax", "Red Bar (Electrocoin) (set 61)", - "ec_redbr__ay", "Red Bar (Electrocoin) (set 62)", - "ec_redbr__az", "Red Bar (Electrocoin) (set 63)", - "ec_redbr__b", "Red Bar (Electrocoin) (set 3)", - "ec_redbr__b0", "Red Bar (Electrocoin) (set 100)", - "ec_redbr__b1", "Red Bar (Electrocoin) (set 101)", - "ec_redbr__ba", "Red Bar (Electrocoin) (set 74)", - "ec_redbr__bb", "Red Bar (Electrocoin) (set 75)", - "ec_redbr__bc", "Red Bar (Electrocoin) (set 76)", - "ec_redbr__bd", "Red Bar (Electrocoin) (set 77)", - "ec_redbr__be", "Red Bar (Electrocoin) (set 78)", - "ec_redbr__bf", "Red Bar (Electrocoin) (set 79)", - "ec_redbr__bg", "Red Bar (Electrocoin) (set 80)", - "ec_redbr__bh", "Red Bar (Electrocoin) (set 81)", - "ec_redbr__bi", "Red Bar (Electrocoin) (set 82)", - "ec_redbr__bj", "Red Bar (Electrocoin) (set 83)", - "ec_redbr__bk", "Red Bar (Electrocoin) (set 84)", - "ec_redbr__bl", "Red Bar (Electrocoin) (set 85)", - "ec_redbr__bm", "Red Bar (Electrocoin) (set 86)", - "ec_redbr__bn", "Red Bar (Electrocoin) (set 87)", - "ec_redbr__bo", "Red Bar (Electrocoin) (set 88)", - "ec_redbr__bp", "Red Bar (Electrocoin) (set 89)", - "ec_redbr__bq", "Red Bar (Electrocoin) (set 90)", - "ec_redbr__br", "Red Bar (Electrocoin) (set 91)", - "ec_redbr__bs", "Red Bar (Electrocoin) (set 92)", - "ec_redbr__bt", "Red Bar (Electrocoin) (set 93)", - "ec_redbr__bu", "Red Bar (Electrocoin) (set 94)", - "ec_redbr__bv", "Red Bar (Electrocoin) (set 95)", - "ec_redbr__bw", "Red Bar (Electrocoin) (set 96)", - "ec_redbr__bx", "Red Bar (Electrocoin) (set 97)", - "ec_redbr__by", "Red Bar (Electrocoin) (set 98)", - "ec_redbr__c", "Red Bar (Electrocoin) (set 4)", - "ec_redbr__d", "Red Bar (Electrocoin) (set 5)", - "ec_redbr__e", "Red Bar (Electrocoin) (set 6)", - "ec_redbr__f", "Red Bar (Electrocoin) (set 7)", - "ec_redbr__g", "Red Bar (Electrocoin) (set 8)", - "ec_redbr__h", "Red Bar (Electrocoin) (set 9)", - "ec_redbr__i", "Red Bar (Electrocoin) (set 10)", - "ec_redbr__j", "Red Bar (Electrocoin) (set 11)", - "ec_redbr__k", "Red Bar (Electrocoin) (set 12)", - "ec_redbr__l", "Red Bar (Electrocoin) (set 13)", - "ec_redbr__m", "Red Bar (Electrocoin) (set 14)", - "ec_redbr__n", "Red Bar (Electrocoin) (set 15)", - "ec_redbr__o", "Red Bar (Electrocoin) (set 16)", - "ec_redbr__p", "Red Bar (Electrocoin) (set 17)", - "ec_redbr__q", "Red Bar (Electrocoin) (set 18)", - "ec_redbr__r", "Red Bar (Electrocoin) (set 19)", - "ec_redbr__s", "Red Bar (Electrocoin) (set 20)", - "ec_redbr__t", "Red Bar (Electrocoin) (set 21)", - "ec_redbr__u", "Red Bar (Electrocoin) (set 22)", - "ec_redbr__v", "Red Bar (Electrocoin) (set 23)", - "ec_redbr__w", "Red Bar (Electrocoin) (set 24)", - "ec_redbr__x", "Red Bar (Electrocoin) (set 25)", - "ec_redbr__y", "Red Bar (Electrocoin) (set 26)", - "ec_redbr__z", "Red Bar (Electrocoin) (set 27)", - "ec_sbarx", "Super Bar X (Electrocoin) (set 1)", - "ec_sbarx__0", "Super Bar X (Electrocoin) (set 28)", - "ec_sbarx__1", "Super Bar X (Electrocoin) (set 29)", - "ec_sbarx__2", "Super Bar X (Electrocoin) (set 30)", - "ec_sbarx__3", "Super Bar X (Electrocoin) (set 31)", - "ec_sbarx__4", "Super Bar X (Electrocoin) (set 32)", - "ec_sbarx__5", "Super Bar X (Electrocoin) (set 33)", - "ec_sbarx__6", "Super Bar X (Electrocoin) (set 34)", - "ec_sbarx__7", "Super Bar X (Electrocoin) (set 35)", - "ec_sbarx__8", "Super Bar X (Electrocoin) (set 36)", - "ec_sbarx__9", "Super Bar X (Electrocoin) (set 37)", - "ec_sbarx__a", "Super Bar X (Electrocoin) (set 2)", - "ec_sbarx__a0", "Super Bar X (Electrocoin) (set 64)", - "ec_sbarx__a1", "Super Bar X (Electrocoin) (set 65)", - "ec_sbarx__a2", "Super Bar X (Electrocoin) (set 66)", - "ec_sbarx__a3", "Super Bar X (Electrocoin) (set 67)", - "ec_sbarx__a4", "Super Bar X (Electrocoin) (set 68)", - "ec_sbarx__aa", "Super Bar X (Electrocoin) (set 38)", - "ec_sbarx__ab", "Super Bar X (Electrocoin) (set 39)", - "ec_sbarx__ac", "Super Bar X (Electrocoin) (set 40)", - "ec_sbarx__ad", "Super Bar X (Electrocoin) (set 41)", - "ec_sbarx__ae", "Super Bar X (Electrocoin) (set 42)", - "ec_sbarx__af", "Super Bar X (Electrocoin) (set 43)", - "ec_sbarx__ag", "Super Bar X (Electrocoin) (set 44)", - "ec_sbarx__ah", "Super Bar X (Electrocoin) (set 45)", - "ec_sbarx__ai", "Super Bar X (Electrocoin) (set 46)", - "ec_sbarx__aj", "Super Bar X (Electrocoin) (set 47)", - "ec_sbarx__ak", "Super Bar X (Electrocoin) (set 48)", - "ec_sbarx__al", "Super Bar X (Electrocoin) (set 49)", - "ec_sbarx__am", "Super Bar X (Electrocoin) (set 50)", - "ec_sbarx__an", "Super Bar X (Electrocoin) (set 51)", - "ec_sbarx__ao", "Super Bar X (Electrocoin) (set 52)", - "ec_sbarx__ap", "Super Bar X (Electrocoin) (set 53)", - "ec_sbarx__aq", "Super Bar X (Electrocoin) (set 54)", - "ec_sbarx__ar", "Super Bar X (Electrocoin) (set 55)", - "ec_sbarx__as", "Super Bar X (Electrocoin) (set 56)", - "ec_sbarx__at", "Super Bar X (Electrocoin) (set 57)", - "ec_sbarx__au", "Super Bar X (Electrocoin) (set 58)", - "ec_sbarx__av", "Super Bar X (Electrocoin) (set 59)", - "ec_sbarx__aw", "Super Bar X (Electrocoin) (set 60)", - "ec_sbarx__ax", "Super Bar X (Electrocoin) (set 61)", - "ec_sbarx__ay", "Super Bar X (Electrocoin) (set 62)", - "ec_sbarx__az", "Super Bar X (Electrocoin) (set 63)", - "ec_sbarx__b", "Super Bar X (Electrocoin) (set 3)", - "ec_sbarx__c", "Super Bar X (Electrocoin) (set 4)", - "ec_sbarx__d", "Super Bar X (Electrocoin) (set 5)", - "ec_sbarx__e", "Super Bar X (Electrocoin) (set 6)", - "ec_sbarx__f", "Super Bar X (Electrocoin) (set 7)", - "ec_sbarx__g", "Super Bar X (Electrocoin) (set 8)", - "ec_sbarx__h", "Super Bar X (Electrocoin) (set 9)", - "ec_sbarx__i", "Super Bar X (Electrocoin) (set 10)", - "ec_sbarx__j", "Super Bar X (Electrocoin) (set 11)", - "ec_sbarx__k", "Super Bar X (Electrocoin) (set 12)", - "ec_sbarx__l", "Super Bar X (Electrocoin) (set 13)", - "ec_sbarx__m", "Super Bar X (Electrocoin) (set 14)", - "ec_sbarx__n", "Super Bar X (Electrocoin) (set 15)", - "ec_sbarx__o", "Super Bar X (Electrocoin) (set 16)", - "ec_sbarx__p", "Super Bar X (Electrocoin) (set 17)", - "ec_sbarx__q", "Super Bar X (Electrocoin) (set 18)", - "ec_sbarx__r", "Super Bar X (Electrocoin) (set 19)", - "ec_sbarx__s", "Super Bar X (Electrocoin) (set 20)", - "ec_sbarx__t", "Super Bar X (Electrocoin) (set 21)", - "ec_sbarx__u", "Super Bar X (Electrocoin) (set 22)", - "ec_sbarx__v", "Super Bar X (Electrocoin) (set 23)", - "ec_sbarx__w", "Super Bar X (Electrocoin) (set 24)", - "ec_sbarx__x", "Super Bar X (Electrocoin) (set 25)", - "ec_sbarx__y", "Super Bar X (Electrocoin) (set 26)", - "ec_sbarx__z", "Super Bar X (Electrocoin) (set 27)", - "ec_sbxbr", "Super Bar X (Brunel Research) (set 1)", - "ec_sbxbra", "Super Bar X (Brunel Research) (set 2)", - "ec_sbxbrb", "Super Bar X (Brunel Research) (set 3)", - "ec_sbxbrc", "Super Bar X (Brunel Research) (set 4)", - "ec_sbxbrd", "Super Bar X (Brunel Research) (set 5)", - "ec_sbxbre", "Super Bar X (Brunel Research) (set 6)", - "ec_sbxbrf", "Super Bar X (Brunel Research) (set 7)", - "ec_sbxbrg", "Super Bar X (Brunel Research) (set 8)", - "ec_sbxbrh", "Super Bar X (Brunel Research) (set 9)", - "ec_secrt", "Secret Castle (v1) (Electrocoin)", - "ec_spbdx", "Super Bar X Deluxe (Electrocoin) (set 1)", - "ec_spbdx__a", "Super Bar X Deluxe (Electrocoin) (set 2)", - "ec_spbdx__b", "Super Bar X Deluxe (Electrocoin) (set 3)", - "ec_spbdx__c", "Super Bar X Deluxe (Electrocoin) (set 4)", - "ec_spbdx__d", "Super Bar X Deluxe (Electrocoin) (set 5)", - "ec_spbg7mab", "Super Big 7 (MAB PCB) (Electrocoin) (?)", - "ec_sphin", "Sphinx (v2) (Electrocoin) (set 1)", - "ec_sphina", "Sphinx (v2) (Electrocoin) (set 2)", - "ec_sphinb", "Sphinx (v1) (Electrocoin)", - "ec_stair", "Stairway To Heaven (v11) (Electrocoin)", - "ec_staira", "Stairway To Heaven (v1) (Electrocoin)", - "ec_stkex", "Stake X (Concept Games Ltd) (?)", - "ec_sumnc", "Casino Super Multi Nudger (Concept / Electrocoin Oxo) (?)", - "ec_sumnd", "Super Multi Nudger (Concept / Electrocoin Oxo) (?)", - "ec_supbxcon", "Super Bar X (MAB PCB) (Concept Games Ltd) (?)", - "ec_supbxmab", "Super Bar X (MAB PCB) (Electrocoin) (?)", - "ec_supmb", "Super Multi Bar (Concept Games Ltd) (?)", - "ec_suprl", "Super Reels (Electrocoin) (?)", - "ec_unk5", "unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 1)", - "ec_unk5__a", "unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 2)", - "ec_unk5__b", "unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 3)", - "ec_unk5__c", "unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 4)", - "ec_unkt", "unknown 'T' (MAB PCB?) (Concept Games Ltd) (?)", - "eca", "Emergency Call Ambulance", - "ecap", "Emergency Call Ambulance (US location test?)", - "ecax", "Emergency Call Ambulance (Export)", - "eclipse", "Eclipse", - "ecofghtr", "Eco Fighters (World 931203)", - "ecofghtra", "Eco Fighters (Asia 931203)", - "ecofghtrd", "Eco Fighters (World 931203 Phoenix Edition) (bootleg)", - "ecofghtrh", "Eco Fighters (Hispanic 931203)", - "ecofghtru", "Eco Fighters (USA 940215)", - "ecofghtru1", "Eco Fighters (USA 931203)", - "edf", "E.D.F. : Earth Defense Force", - "edfbl", "E.D.F. : Earth Defense Force (bootleg)", - "edfu", "E.D.F. : Earth Defense Force (North America)", - "edrandy", "The Cliffhanger - Edward Randy (World ver 3)", - "edrandy1", "The Cliffhanger - Edward Randy (World ver 1)", - "edrandy2", "The Cliffhanger - Edward Randy (World ver 2)", - "edrandyj", "The Cliffhanger - Edward Randy (Japan ver 3)", - "eforest", "Enchanted Forest (12XF528902, US)", - "eforesta", "Enchanted Forest (4VXFC818, NSW)", - "eforestb", "Enchanted Forest (3VXFC5343, New Zealand)", - "egghunt", "Egg Hunt", - "eggor", "Eggor", - "eggs", "Eggs (USA)", - "eggventr", "Egg Venture (Release 10)", - "eggventr2", "Egg Venture (Release 2)", - "eggventr7", "Egg Venture (Release 7)", - "eggventr8", "Egg Venture (Release 8)", - "eggventra", "Egg Venture (A.L. Release)", - "eggventrd", "Egg Venture Deluxe", - "ehrgeiz", "Ehrgeiz (US, EG3/VER.A)", - "ehrgeizaa", "Ehrgeiz (Asia, EG2/VER.A)", - "ehrgeizja", "Ehrgeiz (Japan, EG1/VER.A)", - "eightbll", "Eight Ball", - "eightfrc", "Eight Forces", - "eightman", "Eight Man (NGM-025)(NGH-025)", - "einning", "Extra Inning / Ball Park II", - "ejanhs", "E-Jan High School (Japan)", - "ejihon", "Ejihon Tantei Jimusyo (J 950613 V1.000)", - "ejollyx5", "Euro Jolly X5", - "ejollyx9", "Euro Jolly X9", - "ejsakura", "E-Jan Sakurasou (Japan, SYS386F V2.0)", - "ejsakura12", "E-Jan Sakurasou (Japan, SYS386F V1.2)", - "elandore", "Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006)", - "eldorado", "El Dorado City of Gold", - "elecyoyo", "The Electric Yo-Yo (set 1)", - "elecyoyo2", "The Electric Yo-Yo (set 2)", - "elektra", "Elektra", - "elephfam", "Elephant Family (Italian, new)", - "elephfmb", "Elephant Family (Italian, old)", - "elevator", "Elevator Action", - "elevatorb", "Elevator Action (bootleg)", - "elgrande", "El Grande - 5 Card Draw (New)", - "elim2", "Eliminator (2 Players, set 1)", - "elim2a", "Eliminator (2 Players, set 2)", - "elim2c", "Eliminator (2 Players, cocktail)", - "elim4", "Eliminator (4 Players)", - "elim4p", "Eliminator (4 Players, prototype)", - "elvact2u", "Elevator Action II (Ver 2.2A 1995/02/20)", - "elvactr", "Elevator Action Returns (Ver 2.2O 1995/02/20)", - "elvactrj", "Elevator Action Returns (Ver 2.2J 1995/02/20)", - "elvis", "Elvis?", - "elvisf", "Elvis (5.00 France)", - "elvisf302", "Elvis (3.02 France)", - "elvisf303", "Elvis (3.03 France)", - "elvisf4", "Elvis (4.00 France)", - "elvisg", "Elvis (5.00 Germany)", - "elvisg302", "Elvis (3.02 Germany)", - "elvisg303", "Elvis (3.03 Germany)", - "elvisg4", "Elvis (4.00 Germany)", - "elvisi", "Elvis (5.00 Italy)", - "elvisi302", "Elvis (3.02 Italy)", - "elvisi303", "Elvis (3.03 Italy)", - "elvisi4", "Elvis (4.00 Italy)", - "elvisl", "Elvis (5.00 Spain)", - "elvisl302", "Elvis (3.02 Spain)", - "elvisl303", "Elvis (3.03 Spain)", - "elvisl4", "Elvis (4.00 Spain)", - "elvisp", "Elvis (5.00)", - "elvisp302", "Elvis (3.02)", - "elvisp303", "Elvis (3.03)", - "elvisp4", "Elvis (4.00)", - "embargo", "Embargo", - "embryon", "Embryon", - "emeralda", "Emeraldia (World)", - "emeraldaj", "Emeraldia (Japan Version B)", - "emeraldaja", "Emeraldia (Japan)", - "empcity", "Empire City: 1931 (bootleg?)", - "empcityi", "Empire City: 1931 (Italy)", - "empcityj", "Empire City: 1931 (Japan)", - "empcityu", "Empire City: 1931 (US)", - "empsback", "The Empire Strike Back", - "enchfrst", "Enchanted Forest (0400122V, Local)", - "enchlamp", "Enchanted Lamp (Konami Endeavour)", - "endless", "Gundam Wing: Endless Duel (SNES bootleg)", - "endurob2", "Enduro Racer (bootleg set 2)", - "endurobl", "Enduro Racer (bootleg set 1)", - "enduror", "Enduro Racer (YM2151, FD1089B 317-0013A)", - "enduror1", "Enduro Racer (YM2203, FD1089B 317-0013A)", - "enforce", "Enforce (World)", - "enforcej", "Enforce (Japan)", - "enforceja", "Enforce (Japan, Analog Controls)", - "enigma2", "Enigma II", - "enigma2a", "Enigma II (Space Invaders hardware)", - "enigma2b", "Phantoms II (Space Invaders hardware)", - "ep_21clb", "Twenty One Club (Maygay) (EPOCH) (3.2, set 1)", - "ep_21clba", "Twenty One Club (Maygay) (EPOCH) (3.2, set 2)", - "ep_25crt", "25 Carrot Gold (Maygay) (EPOCH) (1.2, set 1)", - "ep_25crta", "25 Carrot Gold (Maygay) (EPOCH) (1.1, set 2)", - "ep_25crtb", "25 Carrot Gold (Maygay) (EPOCH) (3.1, set 3)", - "ep_25crtc", "25 Carrot Gold (Maygay) (EPOCH) (4.1, set 4)", - "ep_25crtd", "25 Carrot Gold (Maygay) (EPOCH) (5.1, set 5)", - "ep_bartk", "Bar Trekkin (Maygay) (EPOCH) (4.5, set 1)", - "ep_bartka", "Bar Trekkin (Maygay) (EPOCH) (3.9, set 2)", - "ep_bartkb", "Bar Trekkin (Maygay) (EPOCH) (3.9, set 3)", - "ep_bartkc", "Bar Trekkin (Maygay) (EPOCH) (4.4, set 4)", - "ep_bartkd", "Bar Trekkin (Maygay) (EPOCH) (4.4, set 5)", - "ep_bartke", "Bar Trekkin (Maygay) (EPOCH) (4.5, set 6)", - "ep_bartkf", "Bar Trekkin (Maygay) (EPOCH) (4.2, set 7)", - "ep_baskr", "Pounds Of The Baskervilles (Maygay) (EPOCH) (1.7, set 1)", - "ep_baskra", "Pounds Of The Baskervilles (Maygay) (EPOCH) (2.2, set 2)", - "ep_baskrb", "Pounds Of The Baskervilles (Maygay) (EPOCH) (2.2, set 3)", - "ep_baskrc", "Pounds Of The Baskervilles (Maygay) (EPOCH) (1.7, set 4)", - "ep_baskrd", "Pounds Of The Baskervilles (Maygay) (EPOCH) (2.1, set 5)", - "ep_baskre", "Pounds Of The Baskervilles (Maygay) (EPOCH) (1.5, set 6)", - "ep_bathl", "Bat Outa Hell (Global) (EPOCH) (2.1, set 1)", - "ep_bathla", "Bat Outa Hell (Global) (EPOCH) (2.1, set 2)", - "ep_bathlb", "Bat Outa Hell (Global) (EPOCH) (2.2, set 3)", - "ep_bathlc", "Bat Outa Hell (Global) (EPOCH) (2.2, set 4)", - "ep_bathld", "Bat Outa Hell (Global) (EPOCH) (3.1, set 5)", - "ep_bathle", "Bat Outa Hell (Global) (EPOCH) (3.1, set 6)", - "ep_bathlf", "Bat Outa Hell (Global) (EPOCH) (4.1, set 7)", - "ep_bathlg", "Bat Outa Hell (Global) (EPOCH) (4.1, set 8)", - "ep_bathlh", "Bat Outa Hell (Global) (EPOCH) (3.3, set 9)", - "ep_batls", "Battleships (Maygay) (EPOCH) (2.2, set 1)", - "ep_batlsa", "Battleships (Maygay) (EPOCH) (2.2, set 2)", - "ep_batlsb", "Battleships (Maygay) (EPOCH) (1.9, set 3)", - "ep_batlsc", "Battleships (Maygay) (EPOCH) (1.9, set 4)", - "ep_bbars", "Balloon Bars (Maygay) (EPOCH) (1.2, set 1)", - "ep_bbarsa", "Balloon Bars (Maygay) (EPOCH) (1.2, set 2)", - "ep_bbarsb", "Balloon Bars (Maygay) (EPOCH) (2.0, set 3)", - "ep_bbarsc", "Balloon Bars (Maygay) (EPOCH) (2.0, set 4)", - "ep_bbonz", "Bingo Bonanza (Maygay - Union) (EPOCH) (set 1)", - "ep_bbonza", "Bingo Bonanza (Maygay - Union) (EPOCH) (set 2)", - "ep_beav3", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 3.3, set 1)", - "ep_beav3a", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 3.3, set 2)", - "ep_beav3b", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 4.2, set 3)", - "ep_beav3c", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 4.2, set 4)", - "ep_beavr", "Casino Beaver Las Vegas (Global) (EPOCH) (set 1)", - "ep_beavra", "Casino Beaver Las Vegas (Global) (EPOCH) (set 2)", - "ep_beavrb", "Casino Beaver Las Vegas (Global) (EPOCH) (set 3)", - "ep_beavrc", "Casino Beaver Las Vegas (Global) (EPOCH) (set 4)", - "ep_beavrd", "Casino Beaver Las Vegas (Global) (EPOCH) (set 5)", - "ep_beavre", "Casino Beaver Las Vegas (Global) (EPOCH) (set 6)", - "ep_beavrf", "Casino Beaver Las Vegas (Global) (EPOCH) (set 7)", - "ep_beavrg", "Casino Beaver Las Vegas (Global) (EPOCH) (set 8)", - "ep_beavrh", "Casino Beaver Las Vegas (Global) (EPOCH) (set 9)", - "ep_beavri", "Casino Beaver Las Vegas (Global) (EPOCH) (set 10)", - "ep_beavrj", "Casino Beaver Las Vegas (Global) (EPOCH) (set 11)", - "ep_beavrk", "Casino Beaver Las Vegas (Global) (EPOCH) (set 12)", - "ep_beavrl", "Casino Beaver Las Vegas (Global) (EPOCH) (set 13)", - "ep_beavrm", "Casino Beaver Las Vegas (Global) (EPOCH) (set 14)", - "ep_beavrn", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 2.3, set 5)", - "ep_beavro", "Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 2.3, set 6)", - "ep_bingb", "Bingo Belle (Maygay) (EPOCH) (1.3, set 1)", - "ep_bingba", "Bingo Belle (Maygay) (EPOCH) (1.3, set 2)", - "ep_bjclb", "Blackjack Club, The (Global) (EPOCH)", - "ep_braid", "Bank Raid (Extreme) (EPOCH) (BARA 0.1, set 1)", - "ep_braida", "Bank Raid (Extreme) (EPOCH) (BARA 0.1, set 2)", - "ep_braidb", "Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 3)", - "ep_braidc", "Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 4)", - "ep_braidd", "Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 5)", - "ep_braide", "Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 6)", - "ep_bubsq", "Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.2, set 1)", - "ep_bubsqa", "Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.2, set 2)", - "ep_bubsqb", "Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.3, set 3)", - "ep_bubsqc", "Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.3, set 4)", - "ep_bubsqd", "Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.4, set 5)", - "ep_bvrcl", "Beaver Las Vegas Club (Global) (EPOCH) (set 1)", - "ep_bvrcla", "Beaver Las Vegas Club (Global) (EPOCH) (set 2)", - "ep_bvrclb", "Beaver Las Vegas Club (Global) (EPOCH) (set 3)", - "ep_bvrclc", "Beaver Las Vegas Club (Global) (EPOCH) (set 4)", - "ep_bvrcld", "Beaver Las Vegas Club (Global) (EPOCH) (set 5)", - "ep_bvrcle", "Beaver Las Vegas Club (Global) (EPOCH) (set 6)", - "ep_bvrclf", "Beaver Las Vegas Club (Global) (EPOCH) (set 7)", - "ep_bvrclg", "Beaver Las Vegas Club (Global) (EPOCH) (set 8)", - "ep_bvrclh", "Beaver Las Vegas Club (Global) (EPOCH) (set 9)", - "ep_bvrcli", "Beaver Las Vegas Club (Global) (EPOCH) (set 10)", - "ep_bvrclj", "Beaver Las Vegas Club (Global) (EPOCH) (set 11)", - "ep_bvrclk", "Beaver Las Vegas Club (Global) (EPOCH) (set 12)", - "ep_bvruc", "Beaver Uncovered (Global) (EPOCH) (1.4, set 1)", - "ep_bvruca", "Beaver Uncovered (Global) (EPOCH) (1.4, set 2)", - "ep_bvrucb", "Beaver Uncovered (Global) (EPOCH) (1.6, set 3)", - "ep_bvrucc", "Beaver Uncovered (Global) (EPOCH) (2.3, set 4)", - "ep_cahoy", "Cash Ahoy (Maygay - Eclipse?) (EPOCH) (set 1)", - "ep_cahoya", "Cash Ahoy (Maygay) (EPOCH) (set 2)", - "ep_cahoyb", "Cash Ahoy (Maygay) (EPOCH) (set 3)", - "ep_calyp", "Calypso (Maygay) (EPOCH) (2.2, set 1)", - "ep_calypa", "Calypso (Maygay) (EPOCH) (2.2, set 2)", - "ep_cascz", "Casino Crazy (Global) (EPOCH) (set 1)", - "ep_cascza", "Casino Crazy (Global) (EPOCH) (2.1, set 2)", - "ep_casgc", "Casino Grand Club (Maygay) (EPOCH) (1.1, set 1)", - "ep_casgca", "Casino Grand Club (Maygay) (EPOCH) (1.1, set 2)", - "ep_casgcb", "Casino Grand Club (Maygay) (EPOCH) (1.4, set 3)", - "ep_casgcc", "Casino Grand Club (Maygay) (EPOCH) (1.4, set 4)", - "ep_cashn", "Cashino (Maygay - Extreme) (EPOCH) (CSHI 1.0, set 1)", - "ep_cashna", "Cashino (Maygay - Extreme) (EPOCH) (CSHI 1.0, set 2)", - "ep_casrd", "Casino Royale Deluxe Club (Maygay) (EPOCH) (1.5, set 1)", - "ep_casrda", "Casino Royale Deluxe Club (Maygay) (EPOCH) (1.3, set 2)", - "ep_cbrcl", "Cannonball Run Club (Global) (EPOCH) (set 1)", - "ep_cbrcla", "Cannonball Run Club (Global) (EPOCH) (set 2)", - "ep_cbrclb", "Cannonball Run Club (Global) (EPOCH) (set 3)", - "ep_cbrclc", "Cannonball Run Club (Global) (EPOCH) (set 4)", - "ep_cbrcld", "Cannonball Run Club (Global) (EPOCH) (set 5)", - "ep_cbrcle", "Cannonball Run Club (Global) (EPOCH) (set 6)", - "ep_cbrclf", "Cannonball Run Club (Global) (EPOCH) (set 7)", - "ep_cbrclg", "Cannonball Run Club (Global) (EPOCH) (set 8)", - "ep_cbrclh", "Cannonball Run Club (Global) (EPOCH) (set 9)", - "ep_cbrcli", "Cannonball Run Club (Global) (EPOCH) (set 10)", - "ep_cbrclj", "Cannonball Run Club (Global) (EPOCH) (set 11)", - "ep_cbrclk", "Cannonball Run Club (Global) (EPOCH) (set 12)", - "ep_cbrun", "Cannonball Run (Global) (EPOCH) (2.2, set 1)", - "ep_cbruna", "Cannonball Run (Global) (EPOCH) (2.2, set 2)", - "ep_cbrunb", "Cannonball Run (Global) (EPOCH) (2.4, set 3)", - "ep_cbrunc", "Cannonball Run (Global) (EPOCH) (2.4, set 4)", - "ep_cbrund", "Cannonball Run (Global) (EPOCH) (3.1, set 5)", - "ep_cbrune", "Cannonball Run (Global) (EPOCH) (3.1, set 6)", - "ep_cclas", "Casino Classic (Global) (EPOCH) (set 1)", - "ep_cclasa", "Casino Classic (Global) (EPOCH) (set 2)", - "ep_ccock", "Cash Cocktail (Maygay) (EPOCH) (1.1, set 1)", - "ep_ccocka", "Cash Cocktail (Maygay) (EPOCH) (1.1, set 2)", - "ep_ccockb", "Cash Cocktail (Maygay) (EPOCH) (1.1, set 3)", - "ep_ccockc", "Cash Cocktail (Maygay) (EPOCH) (1.1, set 4)", - "ep_cdspn", "Cardinal Spin (Maygay) (EPOCH) (1.1, set 1)", - "ep_cdspna", "Cardinal Spin (Maygay) (EPOCH) (1.1, set 2)", - "ep_cfall", "Cash Falls (Maygay) (EPOCH) (1.2, set 1)", - "ep_cfalla", "Cash Falls (Maygay) (EPOCH) (1.3, set 2)", - "ep_cfallb", "Cash Falls (Maygay) (EPOCH) (1.3, set 3)", - "ep_cfallc", "Cash Falls (Maygay) (EPOCH) (2.3, set 4)", - "ep_cfalld", "Cash Falls (Maygay) (EPOCH) (2.3, set 5)", - "ep_cfalle", "Cash Falls (Maygay) (EPOCH) (3.2, set 6)", - "ep_cfallf", "Cash Falls (Maygay) (EPOCH) (3.2, set 7)", - "ep_cflow", "Cash Flow (Maygay) (EPOCH) (3.7, set 1)", - "ep_cflowa", "Cash Flow (Maygay) (EPOCH) (3.2, set 2)", - "ep_cflowc", "Cash Flow (Maygay) (EPOCH) (3.A, set 3)", - "ep_cflowd", "Cash Flow (Maygay) (EPOCH) (3.A, set 4)", - "ep_cgord", "Cash Gordon (Maygay) (EPOCH) (2.1, set 1)", - "ep_cgorda", "Cash Gordon (Maygay) (EPOCH) (2.3, set 2)", - "ep_cgordb", "Cash Gordon (Maygay) (EPOCH) (2.3, set 3)", - "ep_cgordc", "Cash Gordon (Maygay) (EPOCH) (1.9, set 4)", - "ep_cgrc", "Casino Grand Classic (Global) (EPOCH) (set 1)", - "ep_cgrca", "Casino Grand Classic (Global) (EPOCH) (set 2)", - "ep_cgred", "Club Greed (Global) (EPOCH) (set 1)", - "ep_cgreda", "Club Greed (Global) (EPOCH) (set 2)", - "ep_chock", "Chocks Away (Maygay) (EPOCH) (1.1, set 1)", - "ep_chocka", "Chocks Away (Maygay) (EPOCH) (1.1, set 2)", - "ep_chockb", "Chocks Away (Maygay) (EPOCH) (1.1, set 3)", - "ep_cock", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 1)", - "ep_cocka", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 2)", - "ep_cockb", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 3)", - "ep_cockc", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 4)", - "ep_cockd", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 5)", - "ep_cocke", "Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 6)", - "ep_commd", "Complete Madness (Maygay) (EPOCH) (2.2, set 1)", - "ep_commda", "Complete Madness (Maygay) (EPOCH) (2.2, set 2)", - "ep_commdb", "Complete Madness (Maygay) (EPOCH) (1.1, set 3)", - "ep_commdc", "Complete Madness (Maygay) (EPOCH) (1.2, set 4)", - "ep_commdd", "Complete Madness (Maygay) (EPOCH) (2.1, set 5)", - "ep_cor2", "Coronation Street 2 (Maygay) (EPOCH) (3.7, set 1)", - "ep_cor2a", "Coronation Street 2 (Maygay) (EPOCH) (3.7, set 2)", - "ep_cor2b", "Coronation Street 2 (Maygay) (EPOCH) (3.8, set 3)", - "ep_cor2c", "Coronation Street 2 (Maygay) (EPOCH) (3.8, set 4)", - "ep_cormn", "Coronation Street Monopoly Club (Maygay) (EPOCH) (1.7, set 1)", - "ep_cormna", "Coronation Street Monopoly Club (Maygay) (EPOCH) (1.7, set 2)", - "ep_cosc", "Carry On Screaming (Maygay) (EPOCH) (1.3, set 1)", - "ep_cosca", "Carry On Screaming (Maygay) (EPOCH) (1.3, set 2)", - "ep_cow", "Carry On Winning (Maygay) (EPOCH) (1.3, set 1)", - "ep_cowa", "Carry On Winning (Maygay) (EPOCH) (1.3, set 2)", - "ep_crazy", "Reel Crazy (Maygay) (EPOCH) (1.6, set 1)", - "ep_crazya", "Reel Crazy (Maygay) (EPOCH) (1.6, set 2)", - "ep_crazyb", "Reel Crazy (Maygay) (EPOCH) (2.6, set 3)", - "ep_crazyc", "Reel Crazy (Maygay) (EPOCH) (2.6, set 4)", - "ep_crazyd", "Reel Crazy (Maygay) (EPOCH) (1.9, set 5)", - "ep_crazye", "Reel Crazy (Maygay) (EPOCH) (1.9, set 6)", - "ep_crzbn", "Crazy Bingo (Maygay) (EPOCH) (1.1, set 1)", - "ep_crzbna", "Crazy Bingo (Maygay) (EPOCH) (1.1, set 2)", - "ep_crzbnb", "Crazy Bingo (Maygay) (EPOCH) (1.1 Gala, set 3)", - "ep_crzbnc", "Crazy Bingo (Maygay) (EPOCH) (1.1 Gala, set 4)", - "ep_cshpn", "Cash In The Pan (Maygay) (EPOCH) (1.1, set 1)", - "ep_cshpna", "Cash In The Pan (Maygay) (EPOCH) (1.1, set 2)", - "ep_cslay", "Cash Slayer (Global) (EPOCH) (1.4, set 1)", - "ep_cslaya", "Cash Slayer (Global) (EPOCH) (set 2)", - "ep_cstrk", "Crazy Streak Club (Global) (EPOCH) (set 1)", - "ep_cstrka", "Crazy Streak Club (Global) (EPOCH) (set 2)", - "ep_cstrkb", "Crazy Streak Club (Global) (EPOCH) (set 3)", - "ep_cstrkc", "Crazy Streak Club (Global) (EPOCH) (set 4)", - "ep_cstrkd", "Crazy Streak Club (Global) (EPOCH) (set 5)", - "ep_cstrke", "Crazy Streak Club (Global) (EPOCH) (set 6)", - "ep_cstrkf", "Crazy Streak Club (Global) (EPOCH) (set 7)", - "ep_cstrkg", "Crazy Streak Club (Global) (EPOCH) (set 8)", - "ep_ctc", "Cut Throat Cash (Global) (EPOCH) (1.2, set 1)", - "ep_ctca", "Cut Throat Cash (Global) (EPOCH) (1.2, set 2)", - "ep_ctit", "Cash Of The Titans (Maygay) (EPOCH) (1.5, set 1)", - "ep_ctita", "Cash Of The Titans (Maygay) (EPOCH) (1.5, set 2)", - "ep_cyc", "Cyclone (Extreme) (EPOCH) (CYCL 0.2, set 1)", - "ep_cyca", "Cyclone (Extreme) (EPOCH) (CYCL 0.2, set 2)", - "ep_cycb", "Cyclone (Extreme) (EPOCH) (CYCL 0.3, set 3)", - "ep_cycc", "Cyclone (Extreme) (EPOCH) (CYCL 0.3, set 4)", - "ep_cycd", "Cyclone (Extreme) (EPOCH) (CYCL 0.1, set 5)", - "ep_cyce", "Cyclone (Extreme) (EPOCH) (CYCL 0.1, set 6)", - "ep_cycl", "Cyclone Club (Maygay) (EPOCH) (3.1, set 1)", - "ep_cycla", "Cyclone Club (Maygay) (EPOCH) (3.1, set 2)", - "ep_cyclb", "Cyclone Club (Maygay) (EPOCH) (2.1, set 3)", - "ep_dblim", "Double Impact (Maygay - Impulse) (EPOCH) (set 1)", - "ep_dblima", "Double Impact (Maygay - Impulse) (EPOCH) (set 2)", - "ep_dblimb", "Double Impact (Maygay - Impulse) (EPOCH) (set 3)", - "ep_dblimc", "Double Impact (Maygay - Impulse) (EPOCH) (set 4)", - "ep_dblimd", "Double Impact (Maygay - Impulse) (EPOCH) (set 5)", - "ep_ddq", "Dungeons & Drag Queens (Global) (EPOCH) (1.4, set 1)", - "ep_ddqa", "Dungeons & Drag Queens (Global) (EPOCH) (1.4, set 2)", - "ep_ddqb", "Dungeons & Drag Queens (Global) (EPOCH) (2.1, set 3)", - "ep_ddqc", "Dungeons & Drag Queens (Global) (EPOCH) (2.1, set 4)", - "ep_ddqcl", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 1)", - "ep_ddqcla", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 2)", - "ep_ddqclb", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 3)", - "ep_ddqclc", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 4)", - "ep_ddqcld", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 5)", - "ep_ddqcle", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 6)", - "ep_ddqclf", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 7)", - "ep_ddqclg", "Dungeons & Drag Queens Club (Global) (EPOCH) (set 8)", - "ep_ddqd", "Dungeons & Drag Queens (Global) (EPOCH) (2.2, set 5)", - "ep_ddqe", "Dungeons & Drag Queens (Global) (EPOCH) (2.2, set 6)", - "ep_ddqf", "Dungeons & Drag Queens (Global) (EPOCH) (2.4, set 7)", - "ep_ddqg", "Dungeons & Drag Queens (Global) (EPOCH) (2.4, set 8)", - "ep_ddqh", "Dungeons & Drag Queens (Global) (EPOCH) (2.5, set 9)", - "ep_ddqi", "Dungeons & Drag Queens (Global) (EPOCH) (2.5, set 10)", - "ep_dmbus", "Dambusters (Impulse) (EPOCH) (set 1)", - "ep_dmbusa", "Dambusters (Impulse) (EPOCH) (set 2)", - "ep_dmbusb", "Dambusters (Impulse) (EPOCH) (set 3)", - "ep_dmbusc", "Dambusters (Impulse) (EPOCH) (set 4)", - "ep_dmbusd", "Dambusters (Impulse) (EPOCH) (set 5)", - "ep_dmbuse", "Dambusters (Impulse) (EPOCH) (set 6)", - "ep_dmbusf", "Dambusters (Impulse) (EPOCH) (set 7)", - "ep_doubl", "Double Top (Maygay) (EPOCH) (1.4, set 1)", - "ep_doubla", "Double Top (Maygay) (EPOCH) (1.4, set 2)", - "ep_doublb", "Double Top (Maygay) (EPOCH) (1.6, set 3)", - "ep_doublc", "Double Top (Maygay) (EPOCH) (1.6, set 4)", - "ep_doubld", "Double Top (Maygay) (EPOCH) (1.4, set 5)", - "ep_duff", "The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 1)", - "ep_duffa", "The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 2)", - "ep_duffb", "The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 3)", - "ep_duffc", "The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 4)", - "ep_evil", "Evil Streak (Maygay) (EPOCH) (1.6, set 1)", - "ep_evila", "Evil Streak (Maygay) (EPOCH) (1.6, set 2)", - "ep_evilb", "Evil Streak (Maygay) (EPOCH) (1.4, set 3)", - "ep_fgods", "Fruit Of The Gods (Maygay) (EPOCH) (1.2, set 1)", - "ep_fgodsa", "Fruit Of The Gods (Maygay) (EPOCH) (1.2, set 2)", - "ep_fgodsb", "Fruit Of The Gods (Maygay) (EPOCH) (2.2, set 3)", - "ep_fgodsc", "Fruit Of The Gods (Maygay) (EPOCH) (2.2, set 4)", - "ep_fgodsd", "Fruit Of The Gods (Maygay) (EPOCH) (2.1, set 5)", - "ep_fgodse", "Fruit Of The Gods (Maygay) (EPOCH) (3.2, set 6)", - "ep_fgodsf", "Fruit Of The Gods (Maygay) (EPOCH) (1.1, set 7)", - "ep_fgodsg", "Fruit Of The Gods (Maygay) (EPOCH) (1.1, set 8)", - "ep_flash", "Flashback (Maygay - Impulse) (EPOCH) (set 1)", - "ep_flasha", "Flashback (Maygay - Impulse) (EPOCH) (set 2)", - "ep_flashb", "Flashback (Maygay - Impulse) (EPOCH) (set 3)", - "ep_flashc", "Flashback (Maygay - Impulse) (EPOCH) (set 4)", - "ep_flashd", "Flashback (Maygay - Impulse) (EPOCH) (set 5)", - "ep_flashe", "Flashback (Maygay - Impulse) (EPOCH) (set 6)", - "ep_flashf", "Flashback (Maygay - Impulse) (EPOCH) (set 7)", - "ep_fmf", "Full Moon Fever (Global) (EPOCH) (set 1)", - "ep_fmfa", "Full Moon Fever (Global) (EPOCH) (set 2)", - "ep_fnclb", "Fruit & Nudge Club (Maygay) (EPOCH) (set 1)", - "ep_fnclba", "Fruit & Nudge Club (Maygay) (EPOCH) (set 2)", - "ep_fog", "Fields of Gold (Global) (EPOCH) (set 1)", - "ep_foga", "Fields of Gold (Global) (EPOCH) (set 2)", - "ep_fortg", "Fortune & Glory (Maygay - Impulse) (EPOCH) (set 1)", - "ep_fortga", "Fortune & Glory (Maygay - Impulse) (EPOCH) (set 2)", - "ep_fortgb", "Fortune & Glory (Maygay - Impulse) (EPOCH) (set 3)", - "ep_fran", "Frantic (Maygay) (EPOCH) (set 1)", - "ep_frana", "Frantic (Maygay) (EPOCH) (set 2)", - "ep_fullm", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 1)", - "ep_fullma", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 2)", - "ep_fullmb", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 3)", - "ep_fullmc", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 4)", - "ep_fullmd", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 5)", - "ep_fullme", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 6)", - "ep_fullmf", "Full Moon Fever (Maygay - Impulse) (EPOCH) (set 7)", - "ep_funny", "Funny Money (Maygay) (EPOCH) (set 1)", - "ep_funnya", "Funny Money (Maygay) (EPOCH) (set 2)", - "ep_funnyb", "Funny Money (Maygay) (EPOCH) (set 3)", - "ep_funnyc", "Funny Money (Maygay) (EPOCH) (set 4)", - "ep_funnyd", "Funny Money (Maygay) (EPOCH) (set 5)", - "ep_funnye", "Funny Money (Maygay) (EPOCH) (set 6)", - "ep_funnyf", "Funny Money (Maygay) (EPOCH) (set 7)", - "ep_funnyg", "Funny Money (Maygay) (EPOCH) (set 8)", - "ep_geclb", "Great Escape Club (Maygay) (EPOCH) (1.C, set 1)", - "ep_geclba", "Great Escape Club (Maygay) (EPOCH) (1.C, set 2)", - "ep_geclbb", "Great Escape Club (Maygay) (EPOCH) (1.9, set 3)", - "ep_geron", "Geronimo (Maygay - Impulse) (EPOCH) (set 1)", - "ep_gerona", "Geronimo (Maygay - Impulse) (EPOCH) (set 2)", - "ep_geronb", "Geronimo (Maygay - Impulse) (EPOCH) (set 3)", - "ep_geronc", "Geronimo (Maygay - Impulse) (EPOCH) (set 4)", - "ep_gerond", "Geronimo (Maygay - Impulse) (EPOCH) (set 5)", - "ep_gerone", "Geronimo (Maygay - Impulse) (EPOCH) (set 6)", - "ep_gesc2", "Great Escape 2 (Maygay) (EPOCH) (2.1, set 1)", - "ep_gesc2a", "Great Escape 2 (Maygay) (EPOCH) (2.1, set 2)", - "ep_gldtp", "Gold Top (Maygay) (EPOCH) (1.1, set 1)", - "ep_gldtpa", "Gold Top (Maygay) (EPOCH) (1.1, set 2)", - "ep_goldf", "Gold Fever (Impulse) (EPOCH)", - "ep_greed", "Greed (Global) (EPOCH) (1.3, set 1)", - "ep_greeda", "Greed (Global) (EPOCH) (1.3, set 2)", - "ep_gresc", "Great Escape (Maygay) (EPOCH) (1.1, set 1)", - "ep_gresca", "Great Escape (Maygay) (EPOCH) (1.1, set 2)", - "ep_gridr", "Gridrunner (Maygay - Impulse) (EPOCH) (set 1)", - "ep_gridra", "Gridrunner (Maygay - Impulse) (EPOCH) (set 2)", - "ep_gridrb", "Gridrunner (Maygay - Impulse) (EPOCH) (set 3)", - "ep_gridrc", "Gridrunner (Maygay - Impulse) (EPOCH) (set 4)", - "ep_gridrd", "Gridrunner (Maygay - Impulse) (EPOCH) (set 5)", - "ep_grncl", "Grid Runner Club (Global) (EPOCH) (set 1)", - "ep_grncla", "Grid Runner Club (Global) (EPOCH) (set 2)", - "ep_grnclb", "Grid Runner Club (Global) (EPOCH) (set 3)", - "ep_grnclc", "Grid Runner Club (Global) (EPOCH) (set 4)", - "ep_grun", "Grid Runner (Global) (EPOCH) (set 1)", - "ep_gruna", "Grid Runner (Global) (EPOCH) (set 2)", - "ep_gtrot", "Globe Trotter (Global) (EPOCH) (set 1)", - "ep_gtrota", "Globe Trotter (Global) (EPOCH) (set 2)", - "ep_heybc", "Hey Big Spender Club (Global) (EPOCH) (set 1)", - "ep_heybca", "Hey Big Spender Club (Global) (EPOCH) (set 2)", - "ep_heybg", "Hey Big Spender (Global) (EPOCH) (set 1)", - "ep_heybga", "Hey Big Spender (Global) (EPOCH) (set 2)", - "ep_heybgb", "Hey Big Spender (Global) (EPOCH) (set 3)", - "ep_heybgc", "Hey Big Spender (Global) (EPOCH) (set 4)", - "ep_hhclb", "Haunted House Club (Maygay) (EPOCH) (1.4, set 1)", - "ep_hhclba", "Haunted House Club (Maygay) (EPOCH) (1.4, set 2)", - "ep_hhclbb", "Haunted House Club (Maygay) (EPOCH) (1.1, set 3)", - "ep_hhclbc", "Haunted House Club (Maygay) (EPOCH) (1.1, set 4)", - "ep_highv", "High Voltage (Maygay - Impulse) (EPOCH) (set 1)", - "ep_highva", "High Voltage (Maygay - Impulse) (EPOCH) (set 2)", - "ep_highvb", "High Voltage (Maygay - Impulse) (EPOCH) (set 3)", - "ep_highvc", "High Voltage (Maygay - Impulse) (EPOCH) (set 4)", - "ep_highvd", "High Voltage (Maygay - Impulse) (EPOCH) (set 5)", - "ep_highve", "High Voltage (Maygay - Impulse) (EPOCH) (set 6)", - "ep_highvf", "High Voltage (Maygay - Impulse) (EPOCH) (set 7)", - "ep_hiscl", "Hi Spirits Club (Global) (EPOCH) (set 1)", - "ep_hiscla", "Hi Spirits Club (Global) (EPOCH) (set 2)", - "ep_hispr", "Hi Spirits (Global) (EPOCH) (1.A, set 1)", - "ep_hispra", "Hi Spirits (Global) (EPOCH) (1.A, set 2)", - "ep_hisprb", "Hi Spirits (Global) (EPOCH) (4.2, set 3)", - "ep_hisprc", "Hi Spirits (Global) (EPOCH) (4.2, set 4)", - "ep_hisprd", "Hi Spirits (Global) (EPOCH) (3.2, set 5)", - "ep_hispre", "Hi Spirits (Global) (EPOCH) (3.2, set 6)", - "ep_hogmn", "Hog Money (Maygay - Impulse) (EPOCH) (set 1)", - "ep_hogmna", "Hog Money (Maygay - Impulse) (EPOCH) (set 2)", - "ep_hogmnb", "Hog Money (Maygay - Impulse) (EPOCH) (set 3)", - "ep_homer", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.A, set 1)", - "ep_homera", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.2, set 3)", - "ep_homerb", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.2, set 4)", - "ep_homerc", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.B, set 5)", - "ep_homerd", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.B, set 6)", - "ep_homere", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.1, set 7)", - "ep_homerf", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.1, set 8)", - "ep_homerg", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.1, set 9)", - "ep_homerh", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.1, set 10)", - "ep_homeri", "The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.9, set 2)", - "ep_htdgs", "Hot Dogs (Maygay) (EPOCH) (set 1)", - "ep_htdgsa", "Hot Dogs (Maygay) (EPOCH) (set 2)", - "ep_hubbl", "Hubble Bubble (Maygay) (EPOCH) (set 1)", - "ep_hubbla", "Hubble Bubble (Maygay) (EPOCH) (set 2)", - "ep_hur", "Hurricane (Global) (EPOCH) (set 1)", - "ep_hura", "Hurricane (Global) (EPOCH) (set 2)", - "ep_hurb", "Hurricane (Global) (EPOCH) (set 3)", - "ep_huric", "Hurricane (Maygay - Impulse) (EPOCH) (set 1)", - "ep_hurica", "Hurricane (Maygay - Impulse) (EPOCH) (set 2)", - "ep_huricb", "Hurricane (Maygay - Impulse) (EPOCH) (set 3)", - "ep_huricc", "Hurricane (Maygay - Impulse) (EPOCH) (set 4)", - "ep_huricd", "Hurricane (Maygay - Impulse) (EPOCH) (set 5)", - "ep_hurice", "Hurricane (Maygay - Impulse) (EPOCH) (set 6)", - "ep_hvns", "Heavens Above (Maygay) (EPOCH) (set 1)", - "ep_hvnsa", "Heavens Above (Maygay) (EPOCH) (set 2)", - "ep_hyst", "Hysteria (Maygay - Impulse) (EPOCH) (set 1)", - "ep_hysta", "Hysteria (Maygay - Impulse) (EPOCH) (set 2)", - "ep_icebg", "Ice Burger (Maygay) (EPOCH) (1.4, set 1)", - "ep_icebga", "Ice Burger (Maygay) (EPOCH) (1.2, set 2)", - "ep_icebgb", "Ice Burger (Maygay) (EPOCH) (1.4, set 3)", - "ep_icebgc", "Ice Burger (Maygay) (EPOCH) (1.3, set 4)", - "ep_icebgd", "Ice Burger (Maygay) (EPOCH) (1.1, set 5)", - "ep_icebge", "Ice Burger (Maygay) (EPOCH) (1.1, set 6)", - "ep_icebgf", "Ice Burger (Maygay) (EPOCH) (1.3, set 7)", - "ep_icebgg", "Ice Burger (Maygay) (EPOCH) (1.3, set 8)", - "ep_icebgh", "Ice Burger (Maygay) (EPOCH) (1.4, set 9)", - "ep_icebgi", "Ice Burger (Maygay) (EPOCH) (1.4, set 10)", - "ep_ifern", "Inferno (Impulse) (EPOCH) (set 1)", - "ep_iferna", "Inferno (Impulse) (EPOCH) (set 2)", - "ep_ijcl", "Italian Job Club (Maygay) (EPOCH) (2.6, set 1)", - "ep_ijcla", "Italian Job Club (Maygay) (EPOCH) (2.5, set 2)", - "ep_ijob", "Italian Job (Maygay) (EPOCH, v2.1)", - "ep_ijoba", "Italian Job (Maygay) (EPOCH, v1.1)", - "ep_imj", "I'm A Jackpot (Global) (EPOCH) (1.5)", - "ep_inca", "Inca Dinka Do (Maygay - Extreme) (EPOCH) (INCA 1.2, set 1)", - "ep_incaa", "Inca Dinka Do (Maygay - Extreme) (EPOCH) (INCA 1.2, set 2)", - "ep_incab", "Inca Dinka Do (Maygay - Extreme) (EPOCH) (INCA 1.1, set 3)", - "ep_itjb2", "Italian Job 2 (Maygay) (EPOCH) (1.5, set 1)", - "ep_itjb2a", "Italian Job 2 (Maygay) (EPOCH) (1.5, set 2)", - "ep_itjb2b", "Italian Job 2 (Maygay) (EPOCH) (2.3, set 3)", - "ep_itjb2c", "Italian Job 2 (Maygay) (EPOCH) (2.3, set 4)", - "ep_itjb3", "Italian Job 3 (Maygay) (EPOCH) (set 1)", - "ep_itjb3a", "Italian Job 3 (Maygay) (EPOCH) (set 2)", - "ep_jakbn", "Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.3, set 1)", - "ep_jakbna", "Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.3, set 2)", - "ep_jakbnb", "Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.5, set 3)", - "ep_jakbnc", "Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.5, set 4)", - "ep_jsttt", "Just The Ticket (Maygay) (EPOCH) (4.2, set 1)", - "ep_jsttta", "Just The Ticket (Maygay) (EPOCH) (4.2, set 2)", - "ep_jstttb", "Just The Ticket (Maygay) (EPOCH) (3.5, set 3)", - "ep_jstttc", "Just The Ticket (Maygay) (EPOCH) (3.4, set 4)", - "ep_jstttd", "Just The Ticket (Maygay) (EPOCH) (3.5, set 5)", - "ep_jsttte", "Just The Ticket (Maygay) (EPOCH) (3.5, set 6)", - "ep_jstttf", "Just The Ticket (Maygay) (EPOCH) (3.6, set 7)", - "ep_jstttg", "Just The Ticket (Maygay) (EPOCH) (3.6, set 8)", - "ep_kopcl", "Knockout Punch Club (Global) (EPOCH) (set 1)", - "ep_kopcla", "Knockout Punch Club (Global) (EPOCH) (set 2)", - "ep_kopclb", "Knockout Punch Club (Global) (EPOCH) (set 3)", - "ep_ll", "Lucky Ladders (Extreme) (EPOCH) (LULA 0.3, set 1)", - "ep_lla", "Lucky Ladders (Extreme) (EPOCH) (LULA 0.3, set 2)", - "ep_loadd", "Loaded (Maygay) (EPOCH) (LOAD 1.2, set 1)", - "ep_loadda", "Loaded (Maygay) (EPOCH) (LOAD 1.2, set 2)", - "ep_ltt", "Licence To Thrill (Global) (EPOCH) (set 1)", - "ep_ltta", "Licence To Thrill (Global) (EPOCH) (set 2)", - "ep_lug", "London Underground (Maygay) (EPOCH) (2.4, set 1)", - "ep_luga", "London Underground (Maygay) (EPOCH) (2.9, set 2)", - "ep_lugb", "London Underground (Maygay) (EPOCH) (3.1, set 3)", - "ep_lugc", "London Underground (Maygay) (EPOCH) (3.1, set 4)", - "ep_lukld", "Lucky Ladders (Maygay) (EPOCH) (LULA 0.2, set 1)", - "ep_luklda", "Lucky Ladders (Maygay) (EPOCH) (LULA 0.2, set 2)", - "ep_makmv", "Make Your Move (Global) (EPOCH) (set 1)", - "ep_makmva", "Make Your Move (Global) (EPOCH) (set 2)", - "ep_manic", "Manic Miner (Maygay - Impulse) (EPOCH) (set 1)", - "ep_manica", "Manic Miner (Maygay - Impulse) (EPOCH) (set 2)", - "ep_manicb", "Manic Miner (Maygay - Impulse) (EPOCH) (set 3)", - "ep_manicc", "Manic Miner (Maygay - Impulse) (EPOCH) (set 4)", - "ep_manicd", "Manic Miner (Maygay - Impulse) (EPOCH) (set 5)", - "ep_manice", "Manic Miner (Maygay - Impulse) (EPOCH) (set 6)", - "ep_manicf", "Manic Miner (Maygay - Impulse) (EPOCH) (set 7)", - "ep_mario", "Super Mario (Maygay) (EPOCH) (1.5, set 1)", - "ep_marioa", "Super Mario (Maygay) (EPOCH) (1.5, set 2)", - "ep_mariob", "Super Mario (Maygay) (EPOCH) (1.A, set 3)", - "ep_marioc", "Super Mario (Maygay) (EPOCH) (1.A, set 4)", - "ep_mariod", "Super Mario (Maygay) (EPOCH) (2.A, set 5)", - "ep_marioe", "Super Mario (Maygay) (EPOCH) (2.A, set 6)", - "ep_mariof", "Super Mario (Maygay) (EPOCH) (1.C, set 7)", - "ep_mariog", "Super Mario (Maygay) (EPOCH) (1.C, set 8)", - "ep_marioh", "Super Mario (Maygay) (EPOCH) (1.B, set 9)", - "ep_matrx", "Matrix (Maygay - Impulse) (EPOCH)", - "ep_merln", "Merlin's Magic (Maygay) (EPOCH) (1.91)", - "ep_midas", "Midas Touch Club (Maygay) (EPOCH) (1.1, set 1)", - "ep_midasa", "Midas Touch Club (Maygay) (EPOCH) (1.1, set 2)", - "ep_milhr", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.2, set 1)", - "ep_milhra", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.2, set 2)", - "ep_milhrb", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.3, set 3)", - "ep_milhrc", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.3, set 4)", - "ep_milhrd", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.6, set 5)", - "ep_milhre", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.6, set 6)", - "ep_milhrf", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.9, set 7)", - "ep_milhrg", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.9, set 8)", - "ep_mkart", "Mario Kart (Maygay) (EPOCH) (1.2, set 1)", - "ep_mkarta", "Mario Kart (Maygay) (EPOCH) (1.2, set 2)", - "ep_mkartb", "Mario Kart (Maygay) (EPOCH) (1.6, set 3)", - "ep_mkartc", "Mario Kart (Maygay) (EPOCH) (1.6, set 4)", - "ep_mkartd", "Mario Kart (Maygay) (EPOCH) (1.1, set 5)", - "ep_mkarte", "Mario Kart (Maygay) (EPOCH) (1.5, set 6)", - "ep_mlhrc", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 1)", - "ep_mlhrca", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 2)", - "ep_mlhrcb", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 3)", - "ep_mlhrcc", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 4)", - "ep_mlhrcd", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 5)", - "ep_mlhrce", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 6)", - "ep_monbs", "Monte Carlo Or Bust (Maygay) (EPOCH) (1.2, set 1)", - "ep_monbsa", "Monte Carlo Or Bust (Maygay) (EPOCH) (1.2, set 2)", - "ep_monky", "Monkey Business (Global) (EPOCH) (1.4, set 1)", - "ep_monkya", "Monkey Business (Global) (EPOCH) (1.5, set 2)", - "ep_monrt", "Money Returns Club, The (Global) (EPOCH) (set 1)", - "ep_monrta", "Money Returns Club, The (Global) (EPOCH) (set 2)", - "ep_monrtb", "Money Returns Club, The (Global) (EPOCH) (set 3)", - "ep_monrtc", "Money Returns Club, The (Global) (EPOCH) (set 4)", - "ep_monrtd", "Money Returns Club, The (Global) (EPOCH) (set 5)", - "ep_monrte", "Money Returns Club, The (Global) (EPOCH) (set 6)", - "ep_monrtf", "Money Returns Club, The (Global) (EPOCH) (set 7)", - "ep_monsh", "The Moonshine Club (Global) (EPOCH) (set 1)", - "ep_monsha", "The Moonshine Club (Global) (EPOCH) (set 2)", - "ep_monshb", "The Moonshine Club (Global) (EPOCH) (set 3)", - "ep_monshc", "The Moonshine Club (Global) (EPOCH) (set 4)", - "ep_monshd", "The Moonshine Club (Global) (EPOCH) (set 5)", - "ep_monshe", "The Moonshine Club (Global) (EPOCH) (set 6)", - "ep_monshf", "The Moonshine Club (Global) (EPOCH) (set 7)", - "ep_mrmus", "Mr Muscle (Maygay) (EPOCH) (1.2, set 1)", - "ep_mrmusa", "Mr Muscle (Maygay) (EPOCH) (1.2, set 2)", - "ep_mummy", "Mummy Talks (Impulse) (EPOCH) (set 1)", - "ep_mummya", "Mummy Talks (Impulse) (EPOCH) (set 2)", - "ep_mummyb", "Mummy Talks (Impulse) (EPOCH) (set 3)", - "ep_mummyc", "Mummy Talks (Impulse) (EPOCH) (set 4)", - "ep_mummyd", "Mummy Talks (Impulse) (EPOCH) (set 5)", - "ep_mummye", "Mummy Talks (Impulse) (EPOCH) (set 6)", - "ep_mummyf", "Mummy Talks (Impulse) (EPOCH) (set 7)", - "ep_mwom", "Mortal Wombat (Maygay) (EPOCH) (set 1)", - "ep_mwoma", "Mortal Wombat (Maygay) (EPOCH) (set 2)", - "ep_mwomb", "Mortal Wombat (Maygay) (EPOCH) (set 3)", - "ep_mwomc", "Mortal Wombat (Maygay) (EPOCH) (set 4)", - "ep_mwomd", "Mortal Wombat (Maygay) (EPOCH) (set 5)", - "ep_noter", "Note Runner (Maygay) (EPOCH) (NORU 0.1, set 1)", - "ep_notera", "Note Runner (Maygay) (EPOCH) (NORU 0.1, set 2)", - "ep_noterb", "Note Runner (Maygay) (EPOCH) (NORU 0.2, set 3)", - "ep_noterc", "Note Runner (Maygay) (EPOCH) (NORU 0.2, set 4)", - "ep_noterd", "Note Runner (Maygay) (EPOCH) (NORU 1.0, set 5)", - "ep_notere", "Note Runner (Maygay) (EPOCH) (NORU 1.0, set 6)", - "ep_nuns", "Nuns Of Navarone (Maygay) (EPOCH) (2.4, set 1)", - "ep_nunsa", "Nuns Of Navarone (Maygay) (EPOCH) (2.4, set 2)", - "ep_nyny", "New York New York (Maygay) (EPOCH) (3.6, set 1)", - "ep_nynya", "New York New York (Maygay) (EPOCH) (3.6, set 2)", - "ep_nynyb", "New York New York (Maygay) (EPOCH) (4.6, set 3)", - "ep_nynyc", "New York New York (Maygay) (EPOCH) (4.6, set 4)", - "ep_nynyd", "New York New York (Maygay) (EPOCH) (3.A, set 5)", - "ep_nynye", "New York New York (Maygay) (EPOCH) (3.A, set 6)", - "ep_nynyf", "New York New York (Maygay) (EPOCH) (3.9, set 7)", - "ep_otm", "Over The Moon (Maygay) (EPOCH) (1.2, set 1)", - "ep_otma", "Over The Moon (Maygay) (EPOCH) (1.2, set 2)", - "ep_otmcl", "Over The Moon Club (Maygay) (EPOCH) (set 1)", - "ep_otmcla", "Over The Moon Club (Maygay) (EPOCH) (set 2)", - "ep_ozzie", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (2.Z, set 1)", - "ep_ozziea", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) ( .2, set 2)", - "ep_ozzieb", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (5.J, set 3)", - "ep_ozziec", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (6.J, set 4)", - "ep_ozzied", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (1.1, set 5)", - "ep_ozziee", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (1.1, set 6)", - "ep_ozzief", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (2.Z, set 7)", - "ep_ozzieg", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (0.2, set 8)", - "ep_ozzieh", "Ozzie Ozzie Ozzie (Maygay) (EPOCH) (0.2, set 9)", - "ep_party", "Party Party (Global) (EPOCH) (1.1)", - "ep_pascl", "Passport To Riches Classic Club (Maygay) (EPOCH) (1.2, set 1)", - "ep_pascla", "Passport To Riches Classic Club (Maygay) (EPOCH) (1.2, set 2)", - "ep_passp", "Passport To Riches Club (Maygay) (EPOCH) (1.2, set 1)", - "ep_passpa", "Passport To Riches Club (Maygay) (EPOCH) (1.2, set 2)", - "ep_passpb", "Passport To Riches Classic Club (Maygay) (EPOCH) (1.3, set 3)", - "ep_passpc", "Passport To Riches Classic Club (Maygay) (EPOCH) (1.3, set 4)", - "ep_pesos", "Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 1)", - "ep_pesosa", "Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 2)", - "ep_pesosb", "Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 3)", - "ep_pesosc", "Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 4)", - "ep_pharo", "Pharaoh's Treasure (Maygay) (EPOCH) (set 1)", - "ep_pharoa", "Pharaoh's Treasure (Maygay) (EPOCH) (set 2)", - "ep_pizza", "Pizza The Action (Maygay) (EPOCH) (2.3, set 1)", - "ep_pizzaa", "Pizza The Action (Maygay) (EPOCH) (2.3, set 2)", - "ep_pizzab", "Pizza The Action (Maygay) (EPOCH) (2.1, set 3)", - "ep_pizzac", "Pizza The Action (Maygay) (EPOCH) (2.1, set 4)", - "ep_pkni", "The Phoenix Knights (Global) (EPOCH) (1.1, set 1)", - "ep_pknia", "The Phoenix Knights (Global) (EPOCH) (1.1, set 2)", - "ep_pknib", "The Phoenix Knights (Global) (EPOCH) (1.3, set 3)", - "ep_pknic", "The Phoenix Knights (Global) (EPOCH) (1.3, set 4)", - "ep_pknid", "The Phoenix Knights (Global) (EPOCH) (1.4, set 5)", - "ep_pknie", "The Phoenix Knights (Global) (EPOCH) (1.7, set 6)", - "ep_pknif", "The Phoenix Knights (Global) (EPOCH) (1.7, set 7)", - "ep_pwrpl", "Power Play (Maygay) (EPOCH) (PPLY 0.3, set 1)", - "ep_pwrpla", "Power Play (Maygay) (EPOCH) (PPLY 0.3, set 2)", - "ep_rags", "Rags To Riches Club (Maygay) (EPOCH) (1.10, set 1)", - "ep_ragsa", "Rags To Riches Club (Maygay) (EPOCH) (1.10, set 2)", - "ep_rchik", "Rich Chics Club (Global) (EPOCH) (set 1)", - "ep_rchika", "Rich Chics Club (Global) (EPOCH) (set 2)", - "ep_react", "Reactor (Maygay - Impulse) (EPOCH) (set 1)", - "ep_reacta", "Reactor (Maygay - Impulse) (EPOCH) (set 2)", - "ep_reactb", "Reactor (Maygay - Impulse) (EPOCH) (set 3)", - "ep_reactc", "Reactor (Maygay - Impulse) (EPOCH) (set 4)", - "ep_reactd", "Reactor (Maygay - Impulse) (EPOCH) (set 5)", - "ep_reacte", "Reactor (Maygay - Impulse) (EPOCH) (set 6)", - "ep_redl", "Red Line (Extreme) (EPOCH) (RELI 0.1, set 1)", - "ep_redla", "Red Line (Extreme) (EPOCH) (RELI 0.1, set 2)", - "ep_rlgdt", "Reel Good Time (Rebuild) (Global) (Version 1.0) (EPOCH)", - "ep_roost", "Roosters Millions (Maygay) (EPOCH) (1.2, set 1)", - "ep_roosta", "Roosters Millions (Maygay) (EPOCH) (1.2, set 2)", - "ep_royrc", "Royal Roulette Club (Impulse) (EPOCH) (set 1)", - "ep_royrca", "Royal Roulette Club (Impulse) (EPOCH) (set 2)", - "ep_royrl", "Royal Roulette (Maygay) (EPOCH) (set 1)", - "ep_royrla", "Royal Roulette (Maygay) (EPOCH) (set 2)", - "ep_royrlb", "Royal Roulette (Maygay) (EPOCH) (set 3)", - "ep_royrlc", "Royal Roulette (Maygay) (EPOCH) (set 4)", - "ep_royrld", "Royal Roulette (Maygay) (EPOCH) (set 5)", - "ep_royrle", "Royal Roulette (Maygay) (EPOCH) (set 6)", - "ep_rtt", "Round The Twist (Maygay) (EPOCH) (set 1)", - "ep_rtta", "Round The Twist (Maygay) (EPOCH) (set 2)", - "ep_scrm", "Screamin Demon (Maygay) (EPOCH) (SCDE 2.0, set 1)", - "ep_scrma", "Screamin Demon (Maygay) (EPOCH) (SCDE 2.0, set 2)", - "ep_scrmb", "Screamin Demon (Maygay) (EPOCH) (SCDE 1.0, set 3)", - "ep_scrmc", "Screamin Demon (Maygay) (EPOCH) (SCDE 1.0, set 4)", - "ep_sdcla", "Spotted Dick Classic (Global) (EPOCH) (set 1)", - "ep_sdclaa", "Spotted Dick Classic (Global) (EPOCH) (set 2)", - "ep_sdclab", "Spotted Dick Classic (Global) (EPOCH) (set 3)", - "ep_sdclac", "Spotted Dick Classic (Global) (EPOCH) (set 4)", - "ep_sdclad", "Spotted Dick Classic (Global) (EPOCH) (set 5)", - "ep_sdclae", "Spotted Dick Classic (Global) (EPOCH) (set 6)", - "ep_sdclaf", "Spotted Dick Classic (Global) (EPOCH) (set 7)", - "ep_sdclag", "Spotted Dick Classic (Global) (EPOCH) (set 8)", - "ep_sdclb", "Spotted Dick Club (Global) (EPOCH) (set 1)", - "ep_sdclba", "Spotted Dick Club (Global) (EPOCH) (set 2)", - "ep_secag", "Secret Agent (Maygay) (EPOCH) (1.5, set 1)", - "ep_secaga", "Secret Agent (Maygay) (EPOCH) (1.5, set 2)", - "ep_secagb", "Secret Agent (Maygay) (EPOCH) (1.3, set 3)", - "ep_simfr", "Simply Fruits (Maygay) (EPOCH) (1.2, set 1)", - "ep_simfra", "Simply Fruits (Maygay) (EPOCH) (1.2, set 2)", - "ep_simp", "The Simpsons (Maygay) (EPOCH) (3.6, set 1)", - "ep_simpa", "The Simpsons (Maygay) (EPOCH) (3.5, set 2)", - "ep_simpb", "The Simpsons (Maygay) (EPOCH) (3.5, set 3)", - "ep_simpc", "The Simpsons (Maygay) (EPOCH) (4.5, set 4)", - "ep_simpd", "The Simpsons (Maygay) (EPOCH) (4.5, set 5)", - "ep_simpe", "The Simpsons (Maygay) (EPOCH) (1.5, set 6)", - "ep_simpf", "The Simpsons (Maygay) (EPOCH) (1.5, set 7)", - "ep_simpg", "The Simpsons (Maygay) (EPOCH) (2.5, set 8)", - "ep_simph", "The Simpsons (Maygay) (EPOCH) (2.5, set 9)", - "ep_simpj", "The Simpsons (Maygay) (EPOCH) (1.8, set 10)", - "ep_simpk", "The Simpsons (Maygay) (EPOCH) (1.8, set 11)", - "ep_simpl", "The Simpsons (Maygay) (EPOCH) (3.7, set 12)", - "ep_simpm", "The Simpsons (Maygay) (EPOCH) (3.7, set 13)", - "ep_smoke", "Holy Smoke! (Impulse) (EPOCH) (set 1)", - "ep_smokea", "Holy Smoke! (Impulse) (EPOCH) (set 2)", - "ep_smokeb", "Holy Smoke! (Impulse) (EPOCH) (set 3)", - "ep_smokec", "Holy Smoke! (Impulse) (EPOCH) (set 4)", - "ep_smoked", "Holy Smoke! (Impulse) (EPOCH) (set 5)", - "ep_smokee", "Holy Smoke! (Impulse) (EPOCH) (set 6)", - "ep_smokef", "Holy Smoke! (Impulse) (EPOCH) (set 7)", - "ep_smokeg", "Holy Smoke! (Impulse) (EPOCH) (set 8)", - "ep_smokeh", "Holy Smoke! (Impulse) (EPOCH) (set 9)", - "ep_smokei", "Holy Smoke! (Impulse) (EPOCH) (set 10)", - "ep_smokej", "Holy Smoke! (Impulse) (EPOCH) (set 11)", - "ep_snbev", "Saturday Night Beaver (Global) (EPOCH) (1.8, set 1)", - "ep_snbeva", "Saturday Night Beaver (Global) (EPOCH) (1.8, set 2)", - "ep_snbevb", "Saturday Night Beaver (Global) (EPOCH) (1.9, set 3)", - "ep_snbevc", "Saturday Night Beaver (Global) (EPOCH) (1.9, set 4)", - "ep_snbevd", "Saturday Night Beaver (Global) (EPOCH) (2.1, set 5)", - "ep_snbeve", "Saturday Night Beaver (Global) (EPOCH) (2.1, set 6)", - "ep_snset", "Sunset Strip (Extreme) (EPOCH) (SUST 0.1, set 1)", - "ep_snseta", "Sunset Strip (Extreme) (EPOCH) (SUST 0.1, set 2)", - "ep_snw", "Super Nudge Wink (Maygay - Union) (EPOCH) (set 1)", - "ep_snwa", "Super Nudge Wink (Maygay - Union) (EPOCH) (set 2)", - "ep_snwb", "Super Nudge Wink (Maygay - Union) (EPOCH) (set 3)", - "ep_snwc", "Super Nudge Wink (Maygay - Union) (EPOCH) (set 4)", - "ep_snwd", "Super Nudge Wink (Maygay - Union) (EPOCH) (set 5)", - "ep_spart", "Spartacash (Maygay - Impulse) (EPOCH) (set 1)", - "ep_sparta", "Spartacash (Maygay - Impulse) (EPOCH) (set 2)", - "ep_spartb", "Spartacash (Maygay - Impulse) (EPOCH) (set 3)", - "ep_spcbw", "Special Brew (Maygay) (EPOCH) (1.1, set 1)", - "ep_spcbwa", "Special Brew (Maygay) (EPOCH) (1.1, set 2)", - "ep_spcbwb", "Special Brew (Maygay) (EPOCH) (1.3, set 3)", - "ep_spcbwc", "Special Brew (Maygay) (EPOCH) (1.3, set 4)", - "ep_spcbwd", "Special Brew (Maygay) (EPOCH) (1.5, set 5)", - "ep_spcbwe", "Special Brew (Maygay) (EPOCH) (1.5, set 6)", - "ep_spcbwf", "Special Brew (Maygay) (EPOCH) (1.6, set 7)", - "ep_spcbwg", "Special Brew (Maygay) (EPOCH) (1.6, set 8)", - "ep_spcbwh", "Special Brew (Maygay) (EPOCH) (1.4, set 9)", - "ep_spcbwi", "Special Brew (Maygay) (EPOCH) (1.4, set 10)", - "ep_spcbwj", "Special Brew (Maygay) (EPOCH) (1.8, set 11)", - "ep_spcbwk", "Special Brew (Maygay) (EPOCH) (1.8, set 12)", - "ep_spcbwl", "Special Brew (Maygay) (EPOCH) (1.9, set 13)", - "ep_spcbwm", "Special Brew (Maygay) (EPOCH) (1.9, set 14)", - "ep_spec", "Spectre (Maygay) (EPOCH) (1.6, set 1)", - "ep_speca", "Spectre (Maygay) (EPOCH) (1.6, set 2)", - "ep_specb", "Spectre (Maygay) (EPOCH) (1.3, set 3)", - "ep_spin", "Spin On It (Maygay - Impulse) (EPOCH) (set 1)", - "ep_spina", "Spin On It (Maygay - Impulse) (EPOCH) (set 2)", - "ep_spinb", "Spin On It (Maygay - Impulse) (EPOCH) (set 3)", - "ep_spinc", "Spin On It (Maygay - Impulse) (EPOCH) (set 4)", - "ep_spind", "Spin On It (Maygay - Impulse) (EPOCH) (set 5)", - "ep_spine", "Spin On It (Maygay - Impulse) (EPOCH) (set 6)", - "ep_spirt", "Hi Spirits (Global) (EPOCH) (2.3, set 1)", - "ep_spirta", "Hi Spirits (Global) (EPOCH) (2.3, set 2)", - "ep_spirtb", "Hi Spirits (Global) (EPOCH) (4.1, set 3)", - "ep_spntn", "Spin & Tonic (Maygay - Impulse) (EPOCH) (set 1)", - "ep_spntna", "Spin & Tonic (Maygay - Impulse) (EPOCH) (set 2)", - "ep_spntnb", "Spin & Tonic (Maygay - Impulse) (EPOCH) (set 3)", - "ep_spntnc", "Spin & Tonic (Maygay - Impulse) (EPOCH) (set 4)", - "ep_spook", "Spooky Hollow (Global) (EPOCH) (1.3, set 1)", - "ep_spooka", "Spooky Hollow (Global) (EPOCH) (1.3, set 2)", - "ep_spookb", "Spooky Hollow (Global) (EPOCH) (2.7, set 3)", - "ep_srwin", "Sir Winalot (Maygay) (EPOCH) (2.6, set 1)", - "ep_srwina", "Sir Winalot (Maygay) (EPOCH) (3.3, set 2)", - "ep_srwinb", "Sir Winalot (Maygay) (EPOCH) (3.3, set 3)", - "ep_srwinc", "Sir Winalot (Maygay) (EPOCH) (2.6, set 4)", - "ep_srwind", "Sir Winalot (Maygay) (EPOCH) (2.1, set 5)", - "ep_step", "Stepping Stones (Maygay) (EPOCH) (1.0, set 1)", - "ep_stepa", "Stepping Stones (Maygay) (EPOCH) (1.0, set 2)", - "ep_stm", "Storm Force (Global) (EPOCH) (set 1)", - "ep_stma", "Storm Force (Global) (EPOCH) (set 2)", - "ep_stmb", "Storm Force (Global) (EPOCH) (set 3)", - "ep_stmc", "Storm Force (Global) (EPOCH) (set 4)", - "ep_stmcl", "Storm Force Club (Global) (EPOCH) (set 1)", - "ep_stmcla", "Storm Force Club (Global) (EPOCH) (set 2)", - "ep_strat", "Stratagem (Maygay) (EPOCH) (set 1)", - "ep_strata", "Stratagem (Maygay) (EPOCH) (set 2)", - "ep_subb", "Subbuteo (Maygay) (EPOCH) (set 1)", - "ep_subba", "Subbuteo (Maygay) (EPOCH) (set 2)", - "ep_subbb", "Subbuteo (Maygay) (EPOCH) (set 3)", - "ep_subbc", "Subbuteo (Maygay) (EPOCH) (set 4)", - "ep_subbd", "Subbuteo (Maygay) (EPOCH) (set 5)", - "ep_subbe", "Subbuteo (Maygay) (EPOCH) (set 6)", - "ep_subbf", "Subbuteo (Maygay) (EPOCH) (set 7)", - "ep_subbg", "Subbuteo (Maygay) (EPOCH) (set 8)", - "ep_survi", "Survival (Maygay) (EPOCH) (1.4, set 1)", - "ep_survia", "Survival (Maygay) (EPOCH) (1.4, set 2)", - "ep_tak5", "Take Five (Maygay - Union) (EPOCH) (set 1)", - "ep_tak5a", "Take Five (Maygay - Union) (EPOCH) (set 2)", - "ep_tcrwn", "Triple Crown (Maygay) (EPOCH) (2.2, set 1)", - "ep_tcrwna", "Triple Crown (Maygay) (EPOCH) (2.2, set 2)", - "ep_tcrwnb", "Triple Crown (Maygay) (EPOCH) (2.2, set 3)", - "ep_tcrwnc", "Triple Crown (Maygay) (EPOCH) (2.2, set 4)", - "ep_tcrwnd", "Triple Crown (Maygay) (EPOCH) (3.1, set 5)", - "ep_tcrwne", "Triple Crown (Maygay) (EPOCH) (3.1, set 6)", - "ep_tincn", "Tin Can Alley (Maygay) (EPOCH) (1.5, set 1)", - "ep_tincna", "Tin Can Alley (Maygay) (EPOCH) (1.5, set 2)", - "ep_tits", "Title Shot Club (Maygay) (EPOCH) (1.7, set 1)", - "ep_titsa", "Title Shot Club (Maygay) (EPOCH) (1.7, set 2)", - "ep_titsb", "Title Shot Club (Maygay) (EPOCH) (1.5, set 3)", - "ep_tod", "Truth Or Dare (Global) (EPOCH) (set 1)", - "ep_toda", "Truth Or Dare (Global) (EPOCH) (set 2)", - "ep_tonfn", "Tons Of Fun (Maygay) (EPOCH) (1.5, set 1)", - "ep_tonfna", "Tons Of Fun (Maygay) (EPOCH) (1.5, set 2)", - "ep_tortr", "Torture TV (Maygay) (EPOCH) (1.3, set 1)", - "ep_tortra", "Torture TV (Maygay) (EPOCH) (1.3, set 2)", - "ep_tp", "Trivial Pursuit (Maygay) (EPOCH) (3.5, set 1)", - "ep_tp2", "Trivial Pursuit 2 (Maygay) (EPOCH) (2.2, set 1)", - "ep_tp2a", "Trivial Pursuit 2 (Maygay) (EPOCH) (2.2, set 2)", - "ep_tpa", "Trivial Pursuit (Maygay) (EPOCH) (3.5, set 2)", - "ep_tpb", "Trivial Pursuit (Maygay) (EPOCH) (2.1, set 3)", - "ep_trail", "Trailblazer (Maygay - Impulse) (EPOCH) (set 1)", - "ep_traila", "Trailblazer (Maygay - Impulse) (EPOCH) (set 2)", - "ep_trailb", "Trailblazer (Maygay - Impulse) (EPOCH) (set 3)", - "ep_treas", "Treasure Hunt (Global) (EPOCH) (Version 1.6)", - "ep_tree", "Tree Amigos (Maygay) (EPOCH) (TRAM 0.3, set 1)", - "ep_treea", "Tree Amigos (Maygay) (EPOCH) (TRAM 0.3, set 2)", - "ep_trics", "Triple Cash (Maygay - Union) (EPOCH) (set 1)", - "ep_tricsa", "Triple Cash (Maygay - Union) (EPOCH) (set 2)", - "ep_tutcl", "Tutankhamun Club (Maygay) (EPOCH) (2.1, set 1)", - "ep_tutcla", "Tutankhamun Club (Maygay) (EPOCH) (2.1, set 2)", - "ep_tutclb", "Tutankhamun Club (Maygay) (EPOCH) (1.8, set 3)", - "ep_twarp", "Time Warp (Extreme) (EPOCH) (TWRP 0.1, set 1)", - "ep_twarpa", "Time Warp (Extreme) (EPOCH) (TWRP 0.1, set 2)", - "ep_twarpb", "Time Warp (Extreme) (EPOCH) (TWRP 0.4, set 3)", - "ep_twarpc", "Time Warp (Extreme) (EPOCH) (TWRP 0.4, set 4)", - "ep_utncl", "Utter Nutter Club (Global) (EPOCH) (set 1)", - "ep_utncla", "Utter Nutter Club (Global) (EPOCH) (set 2)", - "ep_utnut", "Utter Nutter (Global) (EPOCH) (set 1)", - "ep_utnuta", "Utter Nutter (Global) (EPOCH) (set 2)", - "ep_utnutb", "Utter Nutter (Global) (EPOCH) (set 3)", - "ep_utnutc", "Utter Nutter (Global) (EPOCH) (set 4)", - "ep_vipjv", "Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 1.1, set 1)", - "ep_vipjva", "Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 1.1, set 2)", - "ep_vipjvb", "Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 2.2, set 3)", - "ep_vipjvc", "Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 2.2, set 4)", - "ep_vipjvd", "Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 2.1, set 5)", - "ep_wf", "Wildfire (Global) (EPOCH) (set 1)", - "ep_wfa", "Wildfire (Global) (EPOCH) (set 2)", - "ep_wfb", "Wildfire (Global) (EPOCH) (set 3)", - "ep_wfc", "Wildfire (Global) (EPOCH) (set 4)", - "ep_wfd", "Wildfire (Global) (EPOCH) (set 5)", - "ep_wfe", "Wildfire (Global) (EPOCH) (set 6)", - "ep_wff", "Wildfire (Global) (EPOCH) (set 7)", - "ep_wfg", "Wildfire (Global) (EPOCH) (set 8)", - "ep_wildf", "Wildfire (Maygay - Impulse) (EPOCH) (set 1)", - "ep_wildfa", "Wildfire (Maygay - Impulse) (EPOCH) (set 2)", - "ep_wipeo", "Wipeout (Maygay) (EPOCH) (set 1)", - "ep_wipeoa", "Wipeout (Maygay) (EPOCH) (set 2)", - "ep_wipeob", "Wipeout (Maygay) (EPOCH) (set 3)", - "ep_wipeoc", "Wipeout (Maygay) (EPOCH) (set 4)", - "ep_wipeoe", "Wipeout (Maygay) (EPOCH) (set 5)", - "ep_wleek", "Weakest Leek Club (Global) (EPOCH) (set 1)", - "ep_wleeka", "Weakest Leek Club (Global) (EPOCH) (set 2)", - "ep_word", "Word Up (Maygay) (EPOCH) (1.4, set 1)", - "ep_worda", "Word Up (Maygay) (EPOCH) (1.4, set 2)", - "ep_wordb", "Word Up (Maygay) (EPOCH) (2.4, set 3)", - "ep_wordc", "Word Up (Maygay) (EPOCH) (2.4, set 4)", - "ep_wordd", "Word Up (Maygay) (EPOCH) (3.1, set 5)", - "ep_worde", "Word Up (Maygay) (EPOCH) (3.1, set 6)", - "ep_wordf", "Word Up (Maygay) (EPOCH) (4.1, set 7)", - "ep_wordg", "Word Up (Maygay) (EPOCH) (4.1, set 8)", - "ep_wside", "Wildside (Global) (EPOCH) (1.2, set 1)", - "ep_wsidea", "Wildside (Global) (EPOCH) (set 2)", - "ep_wud", "What's Up Doc (Global) (EPOCH) (set 1)", - "ep_wuda", "What's Up Doc (Global) (EPOCH) (set 2)", - "ep_wudb", "What's Up Doc (Global) (EPOCH) (set 3)", - "ep_wudc", "What's Up Doc (Global) (EPOCH) (set 4)", - "ep_wudd", "What's Up Doc (Global) (EPOCH) (set 5)", - "ep_wude", "What's Up Doc (Global) (EPOCH) (set 6)", - "ep_xspot", "X Marks The Spot (Maygay) (EPOCH) (1.5, set 1)", - "ep_xspota", "X Marks The Spot (Maygay) (EPOCH) (1.5, set 2)", - "ep_xspotb", "X Marks The Spot (Maygay) (EPOCH) (1.4, set 3)", - "ep_xtra", "X-tra X-tra (Maygay) (EPOCH) (1.5, set 1)", - "ep_xtraa", "X-tra X-tra (Maygay) (EPOCH) (1.5, set 2)", - "eprom", "Escape from the Planet of the Robot Monsters (set 1)", - "eprom2", "Escape from the Planet of the Robot Monsters (set 2)", - "equites", "Equites", - "equitess", "Equites (Sega)", - "erosone", "Eros One", - "ertictac", "Erotictac/Tactic", - "ertictaca", "Erotictac/Tactic (ver 01)", - "ertictacb", "Erotictac/Tactic (set 2)", - "esb", "The Empire Strikes Back", - "escape", "Escape", - "esckids", "Escape Kids (Asia, 4 Players)", - "esckidsj", "Escape Kids (Japan, 2 Players)", - "esclwrld", "Escape from the Lost World", - "esclwrldg", "Escape from the Lost World (German)", - "escounts", "Every Second Counts (39-360-053)", - "esh", "Esh's Aurunmilla (set 1)", - "esha", "Esh's Aurunmilla (set 2)", - "esha_la1", "Earthshaker (LA-1)", - "esha_la3", "Earthshaker (LA-3)", - "esha_lg1", "Earthshaker (German) (LG-1)", - "esha_lg2", "Earthshaker (German) (LG-2)", - "esha_ma3", "Earthshaker (Metallica) (LA-3)", - "esha_pa1", "Earthshaker (Prototype) (PA-1)", - "esha_pr4", "Earthshaker (Family version) (PR-4)", - "eshb", "Esh's Aurunmilla (set 3)", - "espgal", "Espgaluda (2003/10/15 Master Ver)", - "espgal2", "Espgaluda II (2005/11/14 MASTER VER)", - "espial", "Espial (Europe)", - "espialu", "Espial (US?)", - "esprade", "ESP Ra.De. (International, Ver. 98/04/22)", - "espradej", "ESP Ra.De. (Japan, Ver. 98/04/21)", - "espradejo", "ESP Ra.De. (Japan, Ver. 98/04/14)", - "eswat", "E-Swat - Cyber Police (set 4, World, FD1094 317-0130)", - "eswatbl", "E-Swat - Cyber Police (bootleg)", - "eswatj", "E-Swat - Cyber Police (set 2, Japan, FD1094 317-0128)", - "eswatj1", "E-Swat - Cyber Police (set 1, Japan, FD1094 317-0131)", - "eswatu", "E-Swat - Cyber Police (set 3, US, FD1094 317-0129)", - "eto", "Kokontouzai Eto Monogatari (Japan)", - "euro2k2", "Europa 2002 (Ver 2.0, set 1)", - "euro2k2a", "Europa 2002 (Ver 2.0, set 2)", - "euro2k2s", "Europa 2002 Space (Ver 3.0)", - "euroch92", "Euro Champ '92 (World)", - "eurogame", "The Euro Game (set 1)", - "eurogamea", "The Euro Game (set 2)", - "europass", "Euro Pass (Ver 1.1)", - "evelknie", "Evel Knievel", - "evilngt", "Evil Night (ver UBA)", - "evilngte", "Evil Night (ver EAA)", - "evilston", "Evil Stone", - "evlfight", "Evil Fight", - "evosocc", "Evolution Soccer", - "ewf", "Earth Wind Fire", - "excalibr", "Excalibur", - "excelsr", "Excelsior (set 1)", - "excelsra", "Excelsior (set 2)", - "excitbj", "Exciting Black Jack", - "excitebk", "Vs. Excitebike (set EB4-4 A)", - "excitebka", "Vs. Excitebike (set EB4-3 ?)", - "excthour", "Exciting Hour", - "exctleag", "Excite League (FD1094 317-0079)", - "exctscc2", "Exciting Soccer II", - "exctsccr", "Exciting Soccer", - "exctsccra", "Exciting Soccer (alternate music)", - "exctsccrb", "Exciting Soccer (bootleg)", - "exctsccrj", "Exciting Soccer (Japan)", - "exctsccrjo", "Exciting Soccer (Japan, older)", - "exctsccru", "Exciting Soccer (US)", - "exedexes", "Exed Exes", - "exerion", "Exerion", - "exerionb", "Exerion (bootleg)", - "exeriont", "Exerion (Taito)", - "exerizer", "Exerizer (Japan)", - "exerizerb", "Exerizer (Japan) (bootleg)", - "exodus", "Exodus (bootleg?)", - "expcard", "Express Card / Top Card (Ver. 1.5)", - "explbrkr", "Explosive Breaker", - "explorer", "Explorer (bootleg of Scramble)", - "exprraid", "Express Raider (World, Rev 4)", - "exprraidi", "Express Raider (Italy)", - "exprraidu", "Express Raider (US, rev 5)", - "exsafar", "Safari (Russia) (Extrema)", - "extdwnhl", "Extreme Downhill (v1.5)", - "exterm", "Exterminator", - "extrmatn", "Extermination (World)", - "extrmatnj", "Extermination (Japan)", - "extrmatnu", "Extermination (US)", - "extrmth", "Treasure Hunt (Russia) (Extrema)", - "extrmti", "Treasure Island (Russia) (Extrema)", - "exvania", "Exvania (World)", - "exvaniaj", "Exvania (Japan)", - "exzisus", "Exzisus (Japan, dedicated)", - "exzisusa", "Exzisus (Japan, conversion)", - "exzisust", "Exzisus (TAD license)", - "eyes", "Eyes (US set 1)", - "eyes2", "Eyes (US set 2)", - "eyesb", "Eyes (bootleg set 1)", - "eyeszac", "Eyes (Italy)", - "eyeszacb", "Eyes (bootleg set 2, decrypted)", - "eztouch", "EZ Touch (v116 China)", - "f14_l1", "F14 Tomcat (L-1)", - "f14_p3", "F14 Tomcat (P-3)", - "f14_p4", "F14 Tomcat (P-4)", - "f15se", "F-15 Strike Eagle (rev. 2.2 02/25/91)", - "f15se21", "F-15 Strike Eagle (rev. 2.1 02/04/91)", - "f1dream", "F-1 Dream", - "f1dreamb", "F-1 Dream (bootleg)", - "f1en", "F1 Exhaust Note", - "f1gp", "F-1 Grand Prix", - "f1gp2", "F-1 Grand Prix Part II", - "f1gpb", "F-1 Grand Prix (Playmark bootleg)", - "f1gpp", "F1 Grand Prix", - "f1gpstar", "Grand Prix Star", - "f1gpstr2", "F-1 Grand Prix Star II", - "f1lap", "F1 Super Lap (World)", - "f1lapj", "F1 Super Lap (Japan)", - "f1superb", "F1 Super Battle", - "f355", "Ferrari F355 Challenge", - "f355bios", "Naomi Ferrari F355 Challenge Bios", - "f355twin", "Ferrari F355 Challenge (Twin)", - "f355twn2", "Ferrari F355 Challenge 2 (Twin)", - "fa", "F/A (Japan)", - "faceoff", "Face Off (Japan)", - "faeton", "Faeton", - "fairyl2", "Fairy Land 2 (set 1)", - "fairyl2a", "Fairy Land 2 (set 2)", - "fairyl2b", "Fairy Land 2 (set 3)", - "fairyl2bl", "Fairy Land 2 (bootleg)", - "falcnwld", "Falcons Wild - Wild Card 1991 (TVG)", - "falcnwlda", "Falcons Wild - World Wide Poker (Video Klein, set 1)", - "falcnwldb", "Falcons Wild - World Wide Poker (Video Klein, set 2)", - "falcnwldc", "Falcons Wild - World Wide Poker (Falcon original)", - "falcon", "Falcon (bootleg of Phoenix) (8085A CPU)", - "falconz", "Falcon (bootleg of Phoenix) (Z80 CPU)", - "famibox", "FamicomBox", - "famlyfun", "Family Fun!", - "fantasia", "Fantasia (940429 PCB, set 1)", - "fantasiaa", "Fantasia (940307 PCB)", - "fantasiab", "Fantasia (940429 PCB, set 2)", - "fantastc", "Fantastic (Galaga conversion on Galaxian hardware)", - "fantasy", "Fantasy (World)", - "fantasyj", "Fantasy (Japan)", - "fantasyu", "Fantasy (US)", - "fantazia", "Fantazia (bootleg?)", - "fantjour", "Fantastic Journey (ver EAA)", - "fantjoura", "Fantastic Journey (ver AAA)", - "fantland", "Fantasy Land (set 1)", - "fantlanda", "Fantasy Land (set 2)", - "fantsia2", "Fantasia II (Explicit)", - "fantsia2a", "Fantasia II (Less Explicit)", - "fantsy95", "Fantasy '95", - "fantzn2", "Fantasy Zone II - The Tears of Opa-Opa (MC-8123, 317-0057)", - "fantzn2x", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version)", - "fantzn2xp", "Fantasy Zone II - The Tears of Opa-Opa (System 16C version, prototype)", - "fantzone", "Fantasy Zone (Rev A, unprotected)", - "fantzone1", "Fantasy Zone (unprotected)", - "fantzonep", "Fantasy Zone (317-5000)", - "fantzonepr", "Fantasy Zone (prototype)", - "farfalla", "Farfalla", - "farfallag", "Farfalla (German speech)", - "farfallai", "Farfalla (Italian speech)", - "farmer", "Farmers Rebellion", - "farwest", "Far West", - "fashion", "Fashion (Version 2.14)", - "fashiong", "Fashion Gambler (set 1)", - "fashiong2", "Fashion Gambler (set 2)", - "fastdraw", "Fast Draw Showdown v1.3", - "fastdrwp", "Fast Draw (poker conversion kit)?", - "fastfred", "Fast Freddie", - "fastlane", "Fast Lane", - "fateulc", "Fate: Unlimited Codes (FUD1 ver. A)", - "fateulcb", "Fate: Unlimited Codes (bootleg)", - "fatfursp", "Fatal Fury Special / Garou Densetsu Special (set 1)(NGM-058)(NGH-058)", - "fatfurspa", "Fatal Fury Special / Garou Densetsu Special (set 2)(NGM-058)(NGH-058)", - "fatfurwa", "Fatal Fury: Wild Ambition (rev.A)", - "fatfury1", "Fatal Fury - King of Fighters / Garou Densetsu - shukumei no tatakai (NGM-033)(NGH-033)", - "fatfury2", "Fatal Fury 2 / Garou Densetsu 2 - arata-naru tatakai (NGM-047)(NGH-047)", - "fatfury3", "Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - haruka-naru tatakai (NGM-069)(NGH-069)", - "fathom", "Fathom", - "fax", "FAX", - "fax2", "FAX 2", - "fb2010", "Fruit Bonus 2010", - "fb2gen", "Fruit Bonus 2nd Generation (Version 1.8E Dual)", - "fb2genc1", "Fruit Bonus 2nd Generation (Version 1.8R, set 1)", - "fb2genc2", "Fruit Bonus 2nd Generation (Version 1.8LT, set 1)", - "fb2gend1", "Fruit Bonus 2nd Generation (Version 1.8R, set 2)", - "fb2gend2", "Fruit Bonus 2nd Generation (Version 1.8LT, set 2)", - "fb2geno", "Fruit Bonus 2nd Generation (Version 1.6XT)", - "fb2geno2", "Fruit Bonus 2nd Generation (Version 1.5)", - "fb2genv1", "Fruit Bonus 2nd Generation (Version 1.8R Dual)", - "fb2genv2", "Fruit Bonus 2nd Generation (Version 1.8LT Dual)", - "fb2nd", "Fruit Bonus 2nd Edition (Version 1.8R, set 1)", - "fb2ndc2", "Fruit Bonus 2nd Edition (Version 1.8LT, set 1)", - "fb2ndd1", "Fruit Bonus 2nd Edition (Version 1.8R, set 2)", - "fb2ndd2", "Fruit Bonus 2nd Edition (Version 1.8LT, set 2)", - "fb2ndo", "Fruit Bonus 2nd Edition (Version 1.5)", - "fb2ndv1", "Fruit Bonus 2nd Edition (Version 1.8R Dual)", - "fb2ndv2", "Fruit Bonus 2nd Edition (Version 1.8LT Dual)", - "fb3g", "Fruit Bonus 3G (Version 1.0.3)", - "fb4", "Fruit Bonus 2004 (Version 1.5R, set 1)", - "fb4b2", "Fruit Bonus 2004 (Version 1.5LT, set 1)", - "fb4c1", "Fruit Bonus 2004 (Version 1.5R, set 2)", - "fb4c2", "Fruit Bonus 2004 (Version 1.5LT, set 2)", - "fb4d1", "Fruit Bonus 2004 (Version 1.5R, set 3)", - "fb4d2", "Fruit Bonus 2004 (Version 1.5LT, set 3)", - "fb4exp", "Fruit Bonus 2005 (2004 Export - Version 1.5E Dual)", - "fb4o", "Fruit Bonus 2004 (Version 1.3XT)", - "fb4o2", "Fruit Bonus 2004 (Version 1.2)", - "fb4v1", "Fruit Bonus 2004 (Version 1.5R Dual)", - "fb4v2", "Fruit Bonus 2004 (Version 1.5LT Dual)", - "fb5", "Fruit Bonus 2005 (Version 1.5SH, set 1)", - "fb5c", "Fruit Bonus 2005 (Version 1.5SH, set 2)", - "fb5d", "Fruit Bonus 2005 (Version 1.5SH, set 3)", - "fb5v", "Fruit Bonus 2005 (Version 1.5SH Dual)", - "fb6", "Fruit Bonus '06 - 10th anniversary (Version 1.7E CGA)", - "fb6d1", "Fruit Bonus '06 - 10th anniversary (Version 1.7R CGA)", - "fb6d2", "Fruit Bonus '06 - 10th anniversary (Version 1.7LT CGA)", - "fb6s1", "Fruit Bonus '06 - 10th anniversary (Version 1.7R CGA, Compact PCB)", - "fb6s2", "Fruit Bonus '06 - 10th anniversary (Version 1.7LT CGA, Compact PCB)", - "fb6s3", "Fruit Bonus '06 - 10th anniversary (Version 1.3R CGA, Compact PCB)", - "fb6se", "Fruit Bonus 2006 Special Edition (Version 1.4E CGA)", - "fb6sed1", "Fruit Bonus 2006 Special Edition (Version 1.4R CGA)", - "fb6sed2", "Fruit Bonus 2006 Special Edition (Version 1.4LT CGA)", - "fb6sev", "Fruit Bonus 2006 Special Edition (Version 1.4E Dual)", - "fb6sev1", "Fruit Bonus 2006 Special Edition (Version 1.4R Dual)", - "fb6sev2", "Fruit Bonus 2006 Special Edition (Version 1.4LT Dual)", - "fb6v", "Fruit Bonus '06 - 10th anniversary (Version 1.7E Dual)", - "fb6v1", "Fruit Bonus '06 - 10th anniversary (Version 1.7R Dual)", - "fb6v2", "Fruit Bonus '06 - 10th anniversary (Version 1.7LT Dual)", - "fbait2bc", "Fisherman's Bait 2 - A Bass Challenge (GE865 VER. UAB)", - "fbaitbc", "Fisherman's Bait - A Bass Challenge (GE765 VER. UAB)", - "fbaitmc", "Fisherman's Bait - Marlin Challenge (GX889 VER. EA)", - "fbaitmca", "Fisherman's Bait - Marlin Challenge (GX889 VER. AA)", - "fbaitmcj", "Fisherman's Bait - Marlin Challenge (GX889 VER. JA)", - "fbaitmcu", "Fisherman's Bait - Marlin Challenge (GX889 VER. UA)", - "fball_ii", "Fireball II", - "fbclass", "Fireball Classic", - "fbcrazy", "Football Crazy (Video Quiz)", - "fbdeluxe", "Fruit Bonus Deluxe (Version 1.0.9)", - "fbdeluxeo", "Fruit Bonus Deluxe (Version 1.0.7)", - "fbfrenzy", "Football Frenzy (NGM-034)(NGH-034)", - "fcnudge", "Fruit Carnival Nudge (Version 2.1 Dual)", - "fcnudgeo", "Fruit Carnival Nudge (Version 2.0, set 1)", - "fcnudgeo2", "Fruit Carnival Nudge (Version 2.0, set 2)", - "fcnudgeo3", "Fruit Carnival Nudge (Version 1.7)", - "fcockt2", "Fruit Cocktail 2 (080707 Russia)", - "fcockt2_3", "Fruit Cocktail 2 (080909 World)", - "fcockt2_4", "Fruit Cocktail 2 (081105 World)", - "fcockt2_4a", "Fruit Cocktail 2 (bootleg, 081105, banking address hack)", - "fcockt2_4b", "Fruit Cocktail 2 (bootleg, 081105, banking address hack, no credit limit)", - "fcockt2_4d", "Fruit Cocktail 2 (bootleg, 081105, banking address hack, payout percentage 70)", - "fcockt2_4f", "Fruit Cocktail 2 (bootleg, 081105, LOTOS FR02)", - "fcockt2_5", "Fruit Cocktail 2 (081106 Russia)", - "fcockt2_6", "Fruit Cocktail 2 (090528 Lottery)", - "fcockt2_7", "Fruit Cocktail 2 (090813 Entertainment)", - "fcockt2a", "Fruit Cocktail 2 (bootleg, 080707, banking address hack)", - "fcockt_10", "Fruit Cocktail (070517 Russia)", - "fcockt_11", "Fruit Cocktail (070822 Russia)", - "fcockt_12", "Fruit Cocktail (070911 Russia)", - "fcockt_14", "Fruit Cocktail (090708 Entertainment)", - "fcockt_3", "Fruit Cocktail (030623 World)", - "fcockt_5", "Fruit Cocktail (031111 World)", - "fcockt_6", "Fruit Cocktail (040216 World)", - "fcockt_6a", "Fruit Cocktail (bootleg, 040216, banking address hack)", - "fcockt_6b", "Fruit Cocktail (bootleg, 040216, backdoor)", - "fcockt_6c", "Fruit Cocktail (bootleg, 040216, LotoRossy+)", - "fcockt_6d", "Fruit Cocktail (bootleg, 040216, VIDEO GAME-1 FR01)", - "fcockt_7", "Fruit Cocktail (050118 World)", - "fcockt_7a", "Fruit Cocktail (bootleg, 050118, backdoor)", - "fcockt_7b", "Fruit Cocktail (bootleg, 050118, VIDEO GAME-1 FR01)", - "fcockt_7c", "Fruit Cocktail (bootleg, 050118, payout percentage 40)", - "fcockt_7d", "Fruit Cocktail (bootleg, 050118, payout percentage 60)", - "fcockt_7e", "Fruit Cocktail (bootleg, 050118, payout percentage 70)", - "fcockt_7f", "Fruit Cocktail (bootleg, 050118, changed version text)", - "fcockt_7g", "Fruit Cocktail (bootleg, 050118, LOTO PROGRAM V-FC2)", - "fcockt_7h", "Fruit Cocktail (bootleg, 050118, LOTOS FR01)", - "fcockt_8", "Fruit Cocktail (060111 World)", - "fcockt_8a", "Fruit Cocktail (bootleg, 060111, LOTO COCKTAIL V01-0001)", - "fcockt_8b", "Fruit Cocktail (bootleg, 060111, LOTTOGAME (I))", - "fcockt_9", "Fruit Cocktail (070305 Russia)", - "fcombat", "Field Combat", - "fcrash", "Final Crash (bootleg of Final Fight)", - "fearless", "Fearless Pinocchio (V101US)", - "fenix", "Fenix (bootleg of Phoenix)", - "feversoc", "Fever Soccer", - "feversos", "Fever SOS (International, Ver. 98/09/25)", - "ffantasy", "Fighting Fantasy (Japan revision 2)", - "ffantasya", "Fighting Fantasy (Japan)", - "ffantasybl", "Fighting Fantasy (bootleg with 68705)", - "ffight", "Final Fight (World, set 1)", - "ffight2b", "Final Fight 2 (SNES bootleg)", - "ffighta", "Final Fight (World, set 2)", - "ffightbl", "Final Fight (bootleg)", - "ffightj", "Final Fight (Japan)", - "ffightj1", "Final Fight (Japan 900112)", - "ffightj2", "Final Fight (Japan 900305)", - "ffightj3", "Final Fight (Japan 900613)", - "ffightjh", "Street Smart / Final Fight (Japan, hack)", - "ffightu", "Final Fight (USA, set 1)", - "ffightu1", "Final Fight (USA, set 2)", - "ffightua", "Final Fight (USA 900112)", - "ffightub", "Final Fight (USA 900613)", - "ffortune", "Fantasy Fortune (1VXFC5460, New Zealand)", - "ffreveng", "Final Fight Revenge (JUET 990714 V1.000)", - "ffv101", "Flipper Football (v1.01)", - "ffv104", "Flipper Football (v1.04)", - "fghtatck", "Fighter & Attacker (US)", - "fghtbskt", "Fighting Basketball", - "fghthist", "Fighter's History (World ver 43-07, DE-0380-2 PCB)", - "fghthistj", "Fighter's History (Japan ver 41-07, DE-0395-1 PCB)", - "fghthistja", "Fighter's History (Japan ver 41-05, DE-0380-2 PCB)", - "fghthistjb", "Fighter's History (Japan ver 41-04, DE-0380-1 PCB)", - "fghthistu", "Fighter's History (US ver 42-05, DE-0395-1 PCB)", - "fghthistua", "Fighter's History (US ver 42-03, DE-0380-2 PCB)", - "fghtjam", "Capcom Fighting Jam (JAM1 Ver. A)", - "fghtmn", "Fighting Mania (QG918 VER. EAA)", - "fghtmna", "Fighting Mania (QG918 VER. AAA)", - "fghtmnk", "Fighting Mania (QG918 VER. KAA)", - "fghtmnu", "Fighting Mania (QG918 VER. UAA)", - "fgoal", "Field Goal (set 1)", - "fgoala", "Field Goal (set 2)", - "fgtlayer", "Fighting Layer (Japan, FTL1/VER.A)", - "fh_905h", "Funhouse 9.05H", - "fh_l3", "Funhouse L-3", - "fh_l4", "Funhouse L-4", - "fh_l5", "Funhouse L-5", - "fh_l9", "Funhouse L-9 (SL-2m)", - "fh_l9b", "Funhouse L-9 (SL-2m) Bootleg Improved German translation", - "fhawk", "Fighting Hawk (World)", - "fhawkj", "Fighting Hawk (Japan)", - "fhboxers", "Funky Head Boxers (JUETBKAL 951218 V1.000)", - "fhunter", "Fortune Hunter (2XF5196I01, USA)", - "fhuntera", "Fortune Hunter (2XF5196I02, USA)", - "fieldday", "Field Day", - "fightfev", "Fight Fever (set 1)", - "fightfeva", "Fight Fever (set 2)", - "fightrol", "Fighting Roller", - "filetto", "Filetto (v1.05 901009)", - "filthyr", "Filthy Rich (Russia)", - "finalap2", "Final Lap 2", - "finalap2j", "Final Lap 2 (Japan)", - "finalap3", "Final Lap 3 (World, set 1)", - "finalap3a", "Final Lap 3 (World, set 2)", - "finalap3bl", "Final Lap 3 (bootleg)", - "finalap3j", "Final Lap 3 (Japan)", - "finalap3jc", "Final Lap 3 (Japan - Rev C)", - "finalapr", "Final Lap R (Rev. B)", - "finalaprj", "Final Lap R (Japan Rev. C)", - "finalapro", "Final Lap R", - "finalb", "Final Blow (World)", - "finalbj", "Final Blow (Japan)", - "finalbny", "Mahjong Final Bunny [BET] (Japan)", - "finalbu", "Final Blow (US)", - "finalgdr", "Final Godori (Korea, version 2.20.5915)", - "finalizr", "Finalizer - Super Transformation", - "finalizrb", "Finalizer - Super Transformation (bootleg)", - "finallap", "Final Lap (Rev E)", - "finallapc", "Final Lap (Rev C)", - "finallapd", "Final Lap (Rev D)", - "finallapjb", "Final Lap (Japan, Rev B)", - "finallapjc", "Final Lap (Japan, Rev C)", - "finalttr", "Final Tetris", - "findlove", "Zenkoku Seifuku Bishoujo Grand Prix Find Love (J 971212 V1.000)", - "findout", "Find Out (Version 4.04)", - "finehour", "Finest Hour (Japan)", - "finfurl", "Final Furlong (FF2 Ver. A)", - "finfurl2", "Final Furlong 2 (World)", - "finfurl2j", "Final Furlong 2 (Japan)", - "finlarch", "Final Arch (J 950714 V1.001)", - "fire_l3", "Fire! (L-3)", - "fireact", "Fire Action", - "fireactd", "Fire Action Deluxe", - "firebarr", "Fire Barrel (Japan)", - "firebatl", "Fire Battle", - "firebeas", "Firebeast (prototype)", - "firebird", "Hot Fire Birds", - "firefox", "Fire Fox (set 1)", - "firefoxa", "Fire Fox (set 2)", - "firehawk", "Fire Hawk", - "firemntn", "Fire Mountain", - "fireone", "Fire One", - "fireshrk", "Fire Shark", - "fireshrka", "Fire Shark (earlier)", - "fireshrkd", "Fire Shark (Korea, set 1, easier)", - "fireshrkdh", "Fire Shark (Korea, set 2, harder)", - "firetrap", "Fire Trap (US)", - "firetrapbl", "Fire Trap (Japan bootleg)", - "firetrapj", "Fire Trap (Japan)", - "firetrk", "Fire Truck / Smokey Joe", - "firstcl", "First Class Traveller (set 1)", - "fishfren", "Fishin' Frenzy (prototype)", - "fitegolf", "Fighting Golf (World?)", - "fitegolfu", "Fighting Golf (US)", - "fitfight", "Fit of Fighting", - "fitter", "Fitter", - "fitterbl", "Fitter (bootleg of Round-Up)", - "fiveside", "Five a Side Soccer (ver UAA)", - "fixeight", "FixEight (Europe)", - "fixeighta", "FixEight (Southeast Asia)", - "fixeightat", "FixEight (Southeast Asia, Taito license)", - "fixeightbl", "FixEight (Korea, bootleg)", - "fixeighth", "FixEight (Hong Kong)", - "fixeightht", "FixEight (Hong Kong, Taito license)", - "fixeightj", "FixEight (Japan)", - "fixeightjt", "FixEight (Japan, Taito license)", - "fixeightk", "FixEight (Korea)", - "fixeightkt", "FixEight (Korea, Taito license)", - "fixeightt", "FixEight (Europe, Taito license)", - "fixeighttw", "FixEight (Taiwan)", - "fixeighttwt", "FixEight (Taiwan, Taito license)", - "fixeightu", "FixEight (USA)", - "fixeightut", "FixEight (USA, Taito license)", - "fjbuster", "Fujiyama Buster (Japan)", - "fjholden", "FJ Holden", - "flamegun", "Flame Gunner", - "flamegunj", "Flame Gunner (Japan)", - "flash_l1", "Flash (L-1)", - "flash_t1", "Flash (T-1) Ted Estes", - "flashgal", "Flashgal (set 1)", - "flashgala", "Flashgal (set 2)", - "flashgdn", "Flash Gordon", - "flashgdnf", "Flash Gordon (French)", - "flashgdnp1", "Flash Gordon (prototype rev. 1)", - "flashgdnp2", "Flash Gordon (prototype rev. 2)", - "flashgdnv", "Flash Gordon (Vocalizer sound)", - "flicker", "Flicker (prototype)", - "flicky", "Flicky (128k Version, System 2, 315-5051)", - "flickyo", "Flicky (64k Version, System 1, 315-5051, set 1)", - "flickys1", "Flicky (64k Version, System 1, 315-5051, set 2)", - "flickys2", "Flicky (128k Version, System 2, not encrypted)", - "flight2k", "Flight 2000", - "flipjack", "Flipper Jack", - "flipmaze", "Flip Maze (V2.04J)", - "flipshot", "Battle Flip Shot", - "flipull", "Flipull (Japan)", - "flkatck", "Flak Attack (Japan)", - "flkatcka", "Flak Attack (Japan, PWB 450593 sub-board)", - "flower", "Flower (US)", - "flowerj", "Flower (Japan)", - "flstory", "The FairyLand Story", - "flstoryj", "The FairyLand Story (Japan)", - "flyball", "Flyball (rev 2)", - "flyball1", "Flyball (rev 1)", - "flyboy", "Fly-Boy", - "flyboyb", "Fly-Boy (bootleg)", - "flytiger", "Flying Tiger (set 1)", - "flytigera", "Flying Tiger (set 2)", - "fmaniac3", "Fishing Maniac 3", - "fncywld", "Fancy World - Earth of Crisis", - "fnkyfish", "Funky Fish", - "fnshark", "Flyin' Shark (bootleg of Hishou Zame)", - "foathens", "Flame of Athens", - "foodf", "Food Fight (rev 3)", - "foodf2", "Food Fight (rev 2)", - "foodfc", "Food Fight (cocktail)", - "footchmp", "Football Champ (World)", - "footchmpbl", "Football Champ (World) (bootleg)", - "forcebrk", "Force Break (bootleg)", - "forceii", "Force II", - "forgottn", "Forgotten Worlds (World)", - "forgottnu", "Forgotten Worlds (USA, B-Board 88621B-2, Rev. C)", - "forgottnu1", "Forgotten Worlds (USA, B-Board 88618B-2, Rev. C)", - "forgottnua", "Forgotten Worlds (USA, B-Board 88618B-2, Rev. A)", - "forgottnuaa", "Forgotten Worlds (USA, B-Board 88618B-2, Rev. AA)", - "formatz", "Formation Z", - "fort2b", "Fortress 2 Blue Arcade (ver 1.01 / pcb ver 3.05)", - "fort2ba", "Fortress 2 Blue Arcade (ver 1.00 / pcb ver 3.05)", - "fortecar", "Forte Card (Ver 103, English)", - "fortecrd", "Forte Card (Ver 110, Spanish)", - "fortune1", "Fortune I (PK485-S) Draw Poker", - "fotns", "Fist Of The North Star", - "fourtrax", "Four Trax", - "foxylady", "Foxy Lady", - "fpoint", "Flash Point (set 2, Japan, FD1094 317-0127A)", - "fpoint1", "Flash Point (set 1, Japan, FD1094 317-0127A)", - "fpointbj", "Flash Point (Japan, bootleg)", - "fpointbl", "Flash Point (World, bootleg)", - "fpwr2_l2", "Firepower II (L-2)", - "frankst", "Mary Shelley's Frankenstein", - "frankstg", "Mary Shelley's Frankenstein (Germany)", - "franticf", "Frantic Fred", - "freddy", "Freddy: A Nightmare on Elm Street (rev.3)", - "freddy4", "Freddy: A Nightmare on Elm Street (rev.4)", - "fredmem", "Fred Flintstones' Memory Match (World?, Ticket version, 3/17/95)", - "fredmemc", "Fred Flintstones' Memory Match (Mandarin Chinese, 3/17/95)", - "fredmemj", "Fred Flintstones' Memory Match (Japan, High Score version, 3/20/95)", - "fredmemuk", "Fred Flintstones' Memory Match (UK, 3/17/95)", - "fredmemus", "Fred Flintstones' Memory Match (US, High Score version, 3/10/95)", - "fredmesp", "Fred Flintstones' Memory Match (Spanish, 3/17/95)", - "freedom", "Freedom", - "freefall", "Freefall", - "freekick", "Free Kick (NS6201-A 1987.10)", - "freekicka", "Free Kick (NS6201-A 1987.9)", - "freekickb1", "Free Kick (bootleg set 1)", - "freekickb2", "Free Kick (bootleg set 2)", - "freekickb3", "Free Kick (bootleg set 3)", - "freeze", "Freeze", - "freezeat", "Freeze (Atari) (prototype, English voice, 96/10/25)", - "freezeat2", "Freeze (Atari) (prototype, 96/10/18)", - "freezeat3", "Freeze (Atari) (prototype, 96/10/07)", - "freezeat4", "Freeze (Atari) (prototype, 96/10/03)", - "freezeat5", "Freeze (Atari) (prototype, 96/09/20, AMOA-96)", - "freezeat6", "Freeze (Atari) (prototype, 96/09/07, Jamma-96)", - "freezeatjp", "Freeze (Atari) (prototype, Japanese voice, 96/10/25)", - "frenzy", "Frenzy", - "fresh", "Fruit Fresh (Italy)", - "friskyt", "Frisky Tom (set 1)", - "friskyta", "Frisky Tom (set 2)", - "frogf", "Frog (Falcon bootleg)", - "frogg", "Frog (Galaxian hardware)", - "frogger", "Frogger", - "froggermc", "Frogger (Moon Cresta hardware)", - "froggers", "Frog", - "froggers1", "Frogger (Sega set 1)", - "froggers2", "Frogger (Sega set 2)", - "froggrs", "Frogger (Scramble hardware)", - "frogs", "Frogs", - "fromanc2", "Taisen Idol-Mahjong Final Romance 2 (Japan)", - "fromanc4", "Taisen Mahjong Final Romance 4 (Japan)", - "fromance", "Idol-Mahjong Final Romance (Japan)", - "fromancr", "Taisen Mahjong Final Romance R (Japan)", - "frontier", "Frontier", - "frontlin", "Front Line", - "fround", "The Final Round (version M)", - "froundl", "The Final Round (version L)", - "frpwr_l2", "Firepower (L-2)", - "frpwr_l6", "Firepower (L-6)", - "frpwr_t6", "Firepower (T-6)", - "fruitbun", "Fruits & Bunny (World?)", - "fruitpc", "Fruit Land", - "fruitstb", "Fruit Star Bonus (Ver 8.20PIR)", - "fruitstr", "Fruit Star (encrypted)", - "fs_lx2", "The Flintstones (LX-2)", - "fs_lx4", "The Flintstones (LX-4)", - "fs_lx5", "The Flintstones (LX-5)", - "fs_sp2", "The Flintstones (SP-2)", - "fshark", "Flying Shark (World)", - "fsharkbt", "Flying Shark (bootleg with 8741)", - "fsoccer", "Fighting Soccer (version 4)", - "fsoccerb", "Fighting Soccer (Joystick hack bootleg)", - "fsoccerba", "Fighting Soccer (Joystick hack bootleg, alt)", - "fsoccerj", "Fighting Soccer (Japan)", - "fspiderb", "Frog & Spiders (bootleg?)", - "fstarfrc", "Final Star Force (US)", - "fstarfrcj", "Final Star Force (Japan)", - "fstation", "Fun Station Spielekoffer 9 Spiele", - "fswords", "Fighters Swords (Korean release of Samurai Shodown III)", - "ft_l3", "Fish Tales (L-3)", - "ft_l4", "Fish Tales (L-4)", - "ft_l5", "Fish Tales (L-5)", - "ft_p4", "Fish Tales (P-4)", - "ftimpact", "Fighters' Impact (Ver 2.02O)", - "ftimpactj", "Fighters' Impact (Ver 2.02J)", - "ftimpactu", "Fighters' Impact (Ver 2.02A)", - "ftimpcta", "Fighters' Impact A (Ver 2.00J)", - "ftspeed", "Faster Than Speed", - "fullthrl", "Full Throttle (Japan)", - "fun4", "Fun Four (Set 1) [TTL]", - "fun4a", "Fun Four (Set 2) [TTL]", - "funcsino", "Status Fun Casino (V1.3s)", - "funcube", "Funcube (v1.5)", - "funcube2", "Funcube 2 (v1.1)", - "funcube3", "Funcube 3 (v1.1)", - "funcube4", "Funcube 4 (v1.0)", - "funcube5", "Funcube 5 (v1.0)", - "funkball", "Funky Ball", - "funkybee", "Funky Bee", - "funkybeeb", "Funky Bee (bootleg, harder)", - "funkyfig", "The First Funky Fighter (set 1)", - "funkyfiga", "The First Funky Fighter (set 2)", - "funkyjet", "Funky Jet (World, rev 1)", - "funkyjeta", "Funky Jet (World)", - "funkyjetj", "Funky Jet (Japan, rev 2)", - "funlddlx", "Funny Land de Luxe", - "funnyfm", "Funny Farm (v1.17)", - "funnyfma", "Funny Farm (v1.26)", - "funnyfmb", "Funny Farm (v1.30)", - "funnymou", "Funny Mouse (Japan)", - "funquiz", "Fun World Quiz (Austrian)", - "funriver", "Fun River (Version 1.4R CGA)", - "funriverd1", "Fun River (Version 1.3R CGA)", - "funriverv", "Fun River (Version 1.4R Dual)", - "funybubl", "Funny Bubble", - "funybublc", "Funny Bubble (Comad version)", - "funystrp", "Funny Strip", - "futari10", "Mushihime-Sama Futari Ver 1.0 (2006/10/23 MASTER VER.)", - "futari15", "Mushihime-Sama Futari Ver 1.5 (2006/12/8.MASTER VER. 1.54.)", - "futari15a", "Mushihime-Sama Futari Ver 1.5 (2006/12/8 MASTER VER 1.54)", - "futaribl", "Mushihime-Sama Futari Black Label (2007/12/11 BLACK LABEL VER)", - "futflash", "Future Flash", - "futrquen", "Future Queen", - "futspy", "Future Spy (315-5061)", - "futurspa", "Future Spa", - "futurwld", "Future World", - "fuudol", "Fuudol (Japan)", - "fvipers", "Fighting Vipers (Revision D)", - "fvipers2", "Fighting Vipers 2 (Revision A)", - "fx", "F-X (bootleg of S.R.D. Mission)", - "g13knd", "Golgo 13 Kiseki no Dandou (Japan, GLS1/VER.A)", - "g4u2", "Games 4 U 2 (94 5.6-0)", - "g4u3", "Games 4 U 3 (94 5.6-4)", - "g4u3a", "Games 4 U 3 (94 5.6-5)", - "g4u4", "Games 4 U 4 (94 5.6-5)", - "g4u5", "Games 4 U 5 (94 5.6-5)", - "g4u6", "Games 4 U 6 (94 5.6-5)", - "g4u7", "Games 4 U 7 (94 5.6-5a)", - "ga2", "Golden Axe: The Revenge of Death Adder (World)", - "ga2j", "Golden Axe: The Revenge of Death Adder (Japan)", - "ga2u", "Golden Axe: The Revenge of Death Adder (US)", - "gaia", "Gaia Crusaders", - "gaiapols", "Gaiapolis (ver EAF)", - "gaiapolsj", "Gaiapolis (ver JAF)", - "gaiapolsu", "Gaiapolis (ver UAF)", - "gaiden", "Ninja Gaiden (US)", - "gakupara", "Quiz Gakuen Paradise (Japan)", - "gakusai", "Mahjong Gakuensai (Japan)", - "gakusai2", "Mahjong Gakuensai 2 (Japan)", - "gal10ren", "Mahjong Gal 10-renpatsu (Japan)", - "gal3", "Galaxian 3 - Theater 6 : Project Dragoon", - "galactic", "Galactica - Batalha Espacial", - "galaga", "Galaga (Namco rev. B)", - "galaga3", "Galaga 3 (GP3 rev. D)", - "galaga3a", "Galaga 3 (GP3 rev. C)", - "galaga3b", "Galaga 3 (GP3)", - "galaga3c", "Galaga 3 (set 4)", - "galaga3m", "Galaga 3 (set 5)", - "galaga88", "Galaga '88", - "galaga88j", "Galaga '88 (Japan)", - "galagamf", "Galaga (Midway set 1 with fast shoot hack)", - "galagamk", "Galaga (Midway set 2)", - "galagamw", "Galaga (Midway set 1)", - "galagao", "Galaga (Namco)", - "galap1", "Space Invaders Galactica (galaxiana hack)", - "galap4", "Galaxian Part 4 (hack)", - "galapx", "Galaxian Part X (moonaln hack)", - "galastrm", "Galactic Storm (Japan)", - "galaxbsf", "Galaxian (bootleg, set 1)", - "galaxbsf2", "Galaxian (bootleg, set 3)", - "galaxi", "Galaxi (v2.0)", - "galaxia", "Galaxia (set 1)", - "galaxiaa", "Galaxia (set 2)", - "galaxiab", "Galaxia (set 3)", - "galaxiac", "Galaxia (set 4)", - "galaxian", "Galaxian (Namco set 1)", - "galaxiana", "Galaxian (Namco set 2)", - "galaxianbl", "Galaxian (bootleg, set 2)", - "galaxiani", "Galaxian (Irem)", - "galaxianm", "Galaxian (Midway set 1)", - "galaxianmo", "Galaxian (Midway set 2)", - "galaxiant", "Galaxian (Taito)", - "galaxrf", "Galaxian (Recreativos Franco S.A. Spanish bootleg)", - "galaxrfgg", "Galaxian Growing Galaxip / Galaxian Nave Creciente (Recreativos Franco S.A. Spanish bootleg)", - "galaxyfg", "Galaxy Fight - Universal Warriors", - "galaxygn", "Galaxy Gunners", - "galaxypi", "Galaxy", - "galaxyr", "Galaxy Ranger", - "galaxyrp", "Galaxy Ranger (Pioneer LDV1000)", - "galds", "Gals Ds - Three Dealers Casino House (bootleg?)", - "galemp", "Galaxy Empire (bootleg?)", - "galgame", "Galaxy Game", - "galgame2", "Galaxy Games StarPak 2", - "galgbios", "Galaxy Games (BIOS v1.90)", - "galhustl", "Gals Hustler", - "galivan", "Cosmo Police Galivan (12/26/1985)", - "galivan2", "Cosmo Police Galivan (12/16/1985)", - "galivan3", "Cosmo Police Galivan (12/11/1985)", - "galkaika", "Mahjong Gal no Kaika (Japan)", - "galkoku", "Mahjong Gal no Kokuhaku (Japan)", - "gallag", "Gallag", - "gallgall", "Gallagher's Gallery v2.2", - "gallop", "Gallop - Armed Police Unit (Japan)", - "galmedes", "Galmedes (Japan)", - "galpani2", "Gals Panic II (Asia)", - "galpani2e", "Gals Panic II (English)", - "galpani2e2", "Gals Panic II (English, 2 PCB ver.)", - "galpani2g", "Gals Panic II (Germany, 2 PCB ver.)", - "galpani2gs", "Gals Panic II (Germany, single PCB)", - "galpani2i", "Gals Panic II (Italy, single PCB)", - "galpani2j", "Gals Panic II (Japan)", - "galpani2t", "Gals Panic II (Taiwan)", - "galpani3", "Gals Panic 3 (Euro)", - "galpani3hk", "Gals Panic 3 (Hong Kong)", - "galpani3j", "Gals Panic 3 (Japan)", - "galpani3k", "Gals Panic 3 (Korea)", - "galpani4", "Gals Panic 4 (Japan)", - "galpani4k", "Gals Panic 4 (Korea)", - "galpanic", "Gals Panic (Unprotected)", - "galpanica", "Gals Panic (MCU Protected)", - "galpanis", "Gals Panic S - Extra Edition (Europe)", - "galpanisj", "Gals Panic S - Extra Edition (Japan)", - "galpanisk", "Gals Panic S - Extra Edition (Korea)", - "galpans2", "Gals Panic S2 (Japan)", - "galpans2a", "Gals Panic S2 (Asia)", - "galpans3", "Gals Panic S3 (Japan)", - "galpansu", "Gals Panic SU (Korea)", - "galsnew", "Gals Panic (US, EXPRO-02 PCB)", - "galsnewa", "Gals Panic (Export, EXPRO-02 PCB)", - "galsnewj", "Gals Panic (Japan, EXPRO-02 PCB)", - "galsnewk", "Gals Panic (Korea, EXPRO-02 PCB)", - "galspnbl", "Gals Pinball", - "galturbo", "Galaxian Turbo (superg hack)", - "galxwars", "Galaxy Wars (Universal set 1)", - "galxwars2", "Galaxy Wars (Universal set 2)", - "galxwarst", "Galaxy Wars (Taito?)", - "gamatron", "Gamatron", - "gamatros", "Gamatron (Sonic)", - "gambl186", "unknown 186 based gambling game (V398)", - "gambl186a", "unknown 186 based gambling game (V399)", - "gamecst2", "GameCristal (version 2.613)", - "gamecstl", "GameCristal", - "gametngk", "The Game Paradise - Master of Shooting! / Game Tengoku - The Game Paradise", - "gammagic", "Game Magic", - "gamshara", "Gamshara (10021 Ver.A)", - "gamt1", "Gaminator 1 (set 1)", - "gamt10", "Gaminator 10 (set 1)", - "gamt10a", "Gaminator 10 (set 2)", - "gamt10b", "Gaminator 10 (set 3)", - "gamt10bag", "Gaminator 10 (bootleg, Bag)", - "gamt10c", "Gaminator 10 (set 4)", - "gamt10d", "Gaminator 10 (set 5)", - "gamt10e", "Gaminator 10 (set 6)", - "gamt10ent", "Gaminator 10 (bootleg, Ent)", - "gamt10f", "Gaminator 10 (set 7)", - "gamt10g", "Gaminator 10 (set 8)", - "gamt10gmult", "Gaminator 10 (bootleg, Multiloto)", - "gamt10h", "Gaminator 10 (set 9)", - "gamt10i", "Gaminator 10 (set 10)", - "gamt10j", "Gaminator 10 (set 11)", - "gamt10k", "Gaminator 10 (set 12)", - "gamt10l", "Gaminator 10 (set 13)", - "gamt10lotc", "Gaminator 10 (bootleg, C-Loto)", - "gamt10lotm", "Gaminator 10 (bootleg, Lotomatic)", - "gamt10m", "Gaminator 10 (set 14)", - "gamt10n", "Gaminator 10 (set 15)", - "gamt10o", "Gaminator 10 (set 16)", - "gamt11", "Gaminator 11 (set 1)", - "gamt11a", "Gaminator 11 (set 2)", - "gamt11b", "Gaminator 11 (set 3)", - "gamt11bmult", "Gaminator 11 (bootleg, Multiloto)", - "gamt11c", "Gaminator 11 (set 4)", - "gamt12", "Gaminator 12 (set 1)", - "gamt12a", "Gaminator 12 (set 2)", - "gamt12b", "Gaminator 12 (set 3)", - "gamt16", "Gaminator 16 (set 1)", - "gamt16a", "Gaminator 16 (set 2)", - "gamt16b", "Gaminator 16 (set 3)", - "gamt16c", "Gaminator 16 (set 4)", - "gamt16d", "Gaminator 16 (set 5)", - "gamt16e", "Gaminator 16 (set 6)", - "gamt16f", "Gaminator 16 (set 7)", - "gamt16fmult", "Gaminator 16 (bootleg, Multiloto)", - "gamt16g", "Gaminator 16 (set 8)", - "gamt16h", "Gaminator 16 (set 9)", - "gamt16i", "Gaminator 16 (set 10)", - "gamt16j", "Gaminator 16 (set 11)", - "gamt16k", "Gaminator 16 (set 12)", - "gamt16lotc", "Gaminator 16 (bootleg, C-Loto)", - "gamt17", "Gaminator 17 (set 1)", - "gamt17a", "Gaminator 17 (set 2)", - "gamt17b", "Gaminator 17 (set 3)", - "gamt18", "Gaminator 18 (set 1)", - "gamt18a", "Gaminator 18 (set 2)", - "gamt18b", "Gaminator 18 (set 3)", - "gamt18bmult", "Gaminator 18 (bootleg, Multiloto)", - "gamt18c", "Gaminator 18 (set 4)", - "gamt18d", "Gaminator 18 (set 5)", - "gamt18ent", "Gaminator 18 (bootleg, Ent)", - "gamt18lotc", "Gaminator 18 (bootleg, C-Loto)", - "gamt19", "Gaminator 19 (set 1)", - "gamt19a", "Gaminator 19 (set 2)", - "gamt19ent", "Gaminator 19 (bootleg, Ent)", - "gamt19lotc", "Gaminator 19 (bootleg, C-Loto)", - "gamt19mult", "Gaminator 19 (bootleg, Multiloto)", - "gamt1a", "Gaminator 1 (set 2)", - "gamt1b", "Gaminator 1 (set 3)", - "gamt1ent", "Gaminator 1 (bootleg, Ent)", - "gamt1lotc", "Gaminator 1 (bootleg, C-Loto)", - "gamt20", "Gaminator 20 (set 1)", - "gamt20a", "Gaminator 20 (set 2)", - "gamt20b", "Gaminator 20 (set 3)", - "gamt20ent", "Gaminator 20 (bootleg, Ent)", - "gamt20lotc", "Gaminator 20 (bootleg, C-Loto)", - "gamt20lotm", "Gaminator 20 (bootleg, Lotomatic)", - "gamt21", "Gaminator 21 (set 1)", - "gamt21a", "Gaminator 21 (set 2)", - "gamt21amult", "Gaminator 21 (bootleg, Multiloto)", - "gamt22", "Gaminator 22 (set 1)", - "gamt22a", "Gaminator 22 (set 2)", - "gamt22amult", "Gaminator 22 (bootleg, Multiloto)", - "gamt22b", "Gaminator 22 (set 3)", - "gamt23", "Gaminator 23 (set 1)", - "gamt23a", "Gaminator 23 (set 2)", - "gamt23b", "Gaminator 23 (set 3)", - "gamt29", "Gaminator 29 (set 1)", - "gamt29a", "Gaminator 29 (set 2)", - "gamt30", "Gaminator 30 (set 1)", - "gamt31", "Gaminator 31 (set 1)", - "gamt31mult", "Gaminator 31 (bootleg, Multiloto)", - "gamt4", "Gaminator 4 (set 1)", - "gamt4a", "Gaminator 4 (set 2)", - "gamt4b", "Gaminator 4 (set 3)", - "gamt4c", "Gaminator 4 (set 4)", - "gamt4d", "Gaminator 4 (set 5)", - "gamt4dbag", "Gaminator 4 (bootleg, Bag, set 1)", - "gamt4e", "Gaminator 4 (set 6)", - "gamt4ent", "Gaminator 4 (bootleg, Ent)", - "gamt4f", "Gaminator 4 (set 7)", - "gamt4fbag", "Gaminator 4 (bootleg, Bag, set 2)", - "gamt4g", "Gaminator 4 (set 8)", - "gamt4h", "Gaminator 4 (set 9)", - "gamt4hbag", "Gaminator 4 (bootleg, Bag, set 3)", - "gamt4hmult", "Gaminator 4 (bootleg, Multiloto)", - "gamt4i", "Gaminator 4 (set 10)", - "gamt4ibag", "Gaminator 4 (bootleg, Bag, set 4)", - "gamt4j", "Gaminator 4 (set 11)", - "gamt4lotc", "Gaminator 4 (bootleg, C-Loto)", - "gamt4lotca", "Gaminator 4 (C-Loto, MK4)", - "gamt4lotm", "Gaminator 4 (bootleg, Lotomatic)", - "gamt5", "Gaminator 5 (set 1)", - "gamt6", "Gaminator 6 (set 1)", - "gamt6a", "Gaminator 6 (set 2)", - "gamt6b", "Gaminator 6 (set 3)", - "gamt6c", "Gaminator 6 (set 4)", - "gamt6d", "Gaminator 6 (set 5)", - "gamt6e", "Gaminator 6 (set 6)", - "gamt6ent", "Gaminator 6 (bootleg, Ent)", - "gamt6f", "Gaminator 6 (set 7)", - "gamt6lotc", "Gaminator 6 (bootleg, C-Loto)", - "gamt7", "Gaminator 7 (set 1)", - "gamt7a", "Gaminator 7 (set 2)", - "gamt7b", "Gaminator 7 (set 3)", - "gamt7c", "Gaminator 7 (set 4)", - "gamt7d", "Gaminator 7 (set 5)", - "gamt7e", "Gaminator 7 (set 6)", - "gamt7f", "Gaminator 7 (set 7)", - "gamt7g", "Gaminator 7 (set 8)", - "gamt7h", "Gaminator 7 (set 9)", - "gamt8", "Gaminator 8 (set 1)", - "gamt8a", "Gaminator 8 (set 2)", - "gamt8b", "Gaminator 8 (set 3)", - "gamt8c", "Gaminator 8 (set 4)", - "gamt8d", "Gaminator 8 (set 5)", - "gamt8lotc", "Gaminator 8 (bootleg, C-Loto)", - "gamt9", "Gaminator 9 (set 1)", - "gamt9a", "Gaminator 9 (set 2)", - "gamt9lotc", "Gaminator 9 (bootleg, C-Loto)", - "ganbare", "Ganbare! Marine Kun (Japan 2K0411)", - "gangonta", "Ganbare! Gonta!! 2 / Party Time: Gonta the Diver II (Japan Release)", - "gangrose", "Gangster's Roses (v4.70)", - "gangwars", "Gang Wars", - "gangwarsu", "Gang Wars (US)", - "ganjaja", "Ganbare Jajamaru Saisho wa Goo / Ganbare Jajamaru Hop Step & Jump", - "ganryu", "Ganryu / Musashi Ganryuki", - "gaplus", "Gaplus (GP2 rev. B)", - "gaplusa", "Gaplus (GP2)", - "gaplusd", "Gaplus (GP2 rev D, alternate hardware)", - "garage_4", "Garage (040219 World)", - "garage_4a", "Garage (bootleg, 040219, backdoor)", - "garage_4b", "Garage (bootleg, 040219, changed version text)", - "garage_4c", "Garage (bootleg, 040219, LOTO PROGRAM V-GG2)", - "garage_5", "Garage (050311 World)", - "garage_5a", "Garage (bootleg, 050311, backdoor)", - "garage_5b", "Garage (bootleg, 050311, VIDEO GAME-1 GA01)", - "garage_5c", "Garage (bootleg, 050311, payout percentage 70)", - "garage_5d", "Garage (bootleg, 050311, LOTTOGAME (I))", - "garage_5e", "Garage (bootleg, 050311, LOTOS GA01)", - "garage_6", "Garage (070213 Russia)", - "garage_7", "Garage (070329 Russia)", - "garage_9", "Garage (090715 Entertainment)", - "gardia", "Gardia (317-0006)", - "gardiab", "Gardia (317-0007?, bootleg)", - "garogun", "Garogun Seroyang (Korea)", - "garou", "Garou - Mark of the Wolves (NGM-2530)", - "garoubl", "Garou - Mark of the Wolves (bootleg)", - "garouh", "Garou - Mark of the Wolves (NGM-2530)(NGH-2530)", - "garoup", "Garou - Mark of the Wolves (prototype)", - "garuka", "Garuka (Japan ver. W)", - "garyoret", "Garyo Retsuden (Japan)", - "gatedoom", "Gate of Doom (US revision 4)", - "gatedoom1", "Gate of Doom (US revision 1)", - "gatsbee", "Gatsbee", - "gaunt2", "Gauntlet II", - "gaunt22p", "Gauntlet II (2 Players, rev 2)", - "gaunt22p1", "Gauntlet II (2 Players, rev 1)", - "gaunt22pg", "Gauntlet II (2 Players, German)", - "gaunt2g", "Gauntlet II (German)", - "gauntdl", "Gauntlet Dark Legacy (version DL 2.52)", - "gauntdl24", "Gauntlet Dark Legacy (version DL 2.4)", - "gauntleg", "Gauntlet Legends (version 1.6)", - "gauntleg12", "Gauntlet Legends (version 1.2)", - "gauntlet", "Gauntlet (rev 14)", - "gauntlet2p", "Gauntlet (2 Players, rev 6)", - "gauntlet2pg", "Gauntlet (2 Players, German, rev 4)", - "gauntlet2pg1", "Gauntlet (2 Players, German, rev 1)", - "gauntlet2pj", "Gauntlet (2 Players, Japanese, rev 5)", - "gauntlet2pj2", "Gauntlet (2 Players, Japanese, rev 2)", - "gauntlet2pr3", "Gauntlet (2 Players, rev 3)", - "gauntletg", "Gauntlet (German, rev 10)", - "gauntletgr3", "Gauntlet (German, rev 3)", - "gauntletgr6", "Gauntlet (German, rev 6)", - "gauntletgr8", "Gauntlet (German, rev 8)", - "gauntletj", "Gauntlet (Japanese, rev 13)", - "gauntletj12", "Gauntlet (Japanese, rev 12)", - "gauntletr1", "Gauntlet (rev 1)", - "gauntletr2", "Gauntlet (rev 2)", - "gauntletr4", "Gauntlet (rev 4)", - "gauntletr5", "Gauntlet (rev 5)", - "gauntletr7", "Gauntlet (rev 7)", - "gauntletr9", "Gauntlet (rev 9)", - "gauntlets", "Gauntlet (Spanish, rev 15)", - "gaxeduel", "Golden Axe - The Duel (JUETL 950117 V1.000)", - "gberet", "Green Beret", - "gberetb", "Green Beret (bootleg)", - "gblchmp", "Global Champion (Ver 2.1A 1994/07/29)", - "gbusters", "Gang Busters (set 1)", - "gbustersa", "Gang Busters (set 2)", - "gcastle", "Golden Castle (prototype?)", - "gchgchmp", "Gachaga Champ (GE877 VER. JAB)", - "gcpinbal", "Grand Cross", - "gdarius", "G-Darius (Ver 2.01J)", - "gdarius2", "G-Darius Ver.2 (Ver 2.03J)", - "gdariusb", "G-Darius (Ver 2.02A)", - "gdfs", "Mobil Suit Gundam Final Shooting (Japan)", - "gdvsgd", "Gundam vs. Gundam", - "geebee", "Gee Bee (Japan)", - "geebeeb", "Gee Bee (Europe)", - "geebeeg", "Gee Bee (US)", - "gegege", "GeGeGe no Kitarou Youkai Slot", - "geimulti", "GEI Multi Game", - "geishanz", "Geisha (0101408V, New Zealand)", - "gekiretu", "Quiz Gekiretsu Scramble (Japan)", - "gekiridn", "Gekirindan (Ver 2.3O 1995/09/21)", - "gekiridnj", "Gekirindan (Ver 2.3J 1995/09/21)", - "gekisha", "Mahjong Gekisha", - "gekisou", "Gekisou (Japan)", - "gekitsui", "Gekitsui Oh (Japan)", - "gekpurya", "Gekitou Pro Yakyuu Mizushima Shinji All Stars vs. Pro Yakyuu (Rev C) (GDT-0008C)", - "gemini", "Gemini Wing (Japan)", - "gemini2k", "Gemini 2000", - "gemini2k1", "Gemini 2000 (alternate set)", - "genesisp", "Genesis", - "genie", "Genie", - "geniep", "Genie (Pinball)", - "genix", "Genix Family", - "genpeitd", "Genpei ToumaDen", - "gensitou", "Genshi-Tou 1930's", - "geostorm", "Geo Storm (Japan)", - "gepoker", "Poker (Version 50.02 ICB, set 1)", - "gepoker1", "Poker (Version 50.02 ICB, set 2)", - "gepoker2", "Poker (Version 50.02 ICB, set 3)", - "getbass", "Get Bass", - "getrich", "Get Rich (Version 1.0.1)", - "getstarb1", "Get Star (bootleg set 1)", - "getstarb2", "Get Star (bootleg set 2)", - "getstarj", "Get Star (Japan)", - "gfire2", "Golden Fire II", - "gforce2", "Galaxy Force 2", - "gforce2j", "Galaxy Force 2 (Japan)", - "gforce2ja", "Galaxy Force 2 (Japan, Rev A)", - "ggate", "Golden Gate (set 1) (Bingo)", - "ggatea", "Golden Gate (set 2) (Bingo)", - "ggconnie", "Go! Go! Connie chan Jaka Jaka Janken", - "gghost", "Goalie Ghost", - "ggisuka", "Guilty Gear Isuka", - "ggram2", "Giant Gram: All Japan Pro Wrestling 2 (JPN, USA, EXP, KOR, AUS)", - "ggreats2", "Golfing Greats 2 (ver JAC)", - "gground", "Gain Ground (World, 3 Players, Floppy Based, FD1094 317-0058-03d Rev A)", - "ggroundj", "Gain Ground (Japan, 2 Players, Floppy Based, FD1094 317-0058-03b)", - "ggx", "Guilty Gear X (JPN)", - "ggx15", "Guilty Gear X ver. 1.5", - "ggxx", "Guilty Gear XX (GDL-0011)", - "ggxxac", "Guilty Gear XX Accent Core (GDL-0041)", - "ggxxrl", "Guilty Gear XX #Reload (Rev A) (GDL-0019A)", - "ggxxsla", "Guilty Gear XX Slash (Rev A) (GDL-0033A)", - "ghlpanic", "Ghoul Panic (Asia, OB2/VER.A)", - "ghoshunt", "Ghost Hunter", - "ghostb", "The Real Ghostbusters (US 2 Players, revision 2)", - "ghostb2a", "The Real Ghostbusters (US 2 Players)", - "ghostb3", "The Real Ghostbusters (US 3 Players)", - "ghostlop", "Ghostlop (prototype)", - "ghostmun", "Ghost Muncher", - "ghostsqu", "Ghost Squad (Rev A) (GDX-0012A)", - "ghouls", "Ghouls'n Ghosts (World)", - "ghoulsu", "Ghouls'n Ghosts (USA)", - "ghox", "Ghox (spinner)", - "ghoxj", "Ghox (joystick)", - "ghunter", "Gang Hunter (Spain)", - "ghv101", "Goofy Hoops", - "gi_l3", "Gilligan's Island (L-3)", - "gi_l4", "Gilligan's Island (L-4)", - "gi_l6", "Gilligan's Island (L-6)", - "gi_l9", "Gilligan's Island (L-9)", - "gigaman2", "Giga Man 2: The Power Fighters (bootleg of Mega Man 2: The Power Fighters)", - "gigandes", "Gigandes", - "gigandesa", "Gigandes (earlier)", - "gigas", "Gigas (MC-8123, 317-5002)", - "gigasb", "Gigas (bootleg)", - "gigasm2b", "Gigas Mark II (bootleg)", - "gigawing", "Giga Wing (USA 990222)", - "gigawinga", "Giga Wing (Asia 990222)", - "gigawingb", "Giga Wing (Brazil 990222)", - "gigawingd", "Giga Wing (USA 990222 Phoenix Edition) (bootleg)", - "gigawingh", "Giga Wing (Hispanic 990222)", - "gigawingj", "Giga Wing (Japan 990223)", - "gigawingjd", "Giga Wing (Japan 990223 Phoenix Edition) (bootleg)", - "gijoe", "G.I. Joe (World, EAB, set 1)", - "gijoea", "G.I. Joe (World, EB8, prototype?)", - "gijoej", "G.I. Joe (Japan, JAA)", - "gijoeu", "G.I. Joe (US, UAB)", - "gimeabrk", "Gimme A Break (7/7/85)", - "ginganin", "Ginga NinkyouDen (set 1)", - "ginganina", "Ginga NinkyouDen (set 2)", - "ginkun", "Ganbare Ginkun", - "gionbana", "Gionbana (Japan 890120)", - "girotutt", "GiroTutto", - "gjspace", "Gekitoride-Jong Space (10011 Ver.A)", - "gl_coc", "Carry On Clubbin' (Global) (v3.0) (Stealth)", - "gl_coc29", "Carry On Clubbin' (Global) (v2.9) (Stealth)", - "gl_coc29p", "Carry On Clubbin' (Global) (v2.9 Protocol) (Stealth)", - "gl_cocp", "Carry On Clubbin' (Global) (v3.0 Protocol) (Stealth)", - "gl_dow", "Deals On Wheels (Global) (v1.4) (Stealth)", - "gl_dowcl", "Deals On Wheels Club (Global) (v1.6) (Stealth)", - "gl_dowclp", "Deals On Wheels Club (Global) (v1.6 Protocol) (Stealth)", - "gl_dowp", "Deals On Wheels (Global) (v1.4 Protocol) (Stealth)", - "gl_grncl", "Grid Runner Club (Global) (Stealth?) (set 1)", - "gl_grncla", "Grid Runner Club (Global) (Stealth?) (set 2)", - "gl_hbh", "Heartbreak Hotel (Global) (v1.0) (Stealth)", - "gl_hbhcl", "Heartbreak Hotel Club (Global) (v1.9) (Stealth)", - "gl_hbhcla", "Heartbreak Hotel Club (Global) (Set 2) (Stealth)", - "gl_hbhclp", "Heartbreak Hotel Club (Global) (v1.9 Protocol) (Stealth)", - "gl_snbev", "Saturday Night Beaver (Global) (Stealth?) (set 1)", - "gl_snbeva", "Saturday Night Beaver (Global) (Stealth?) (set 2)", - "gl_uyr", "Up Yer Riggin Club (Global) (v2.8) (Stealth)", - "gl_uyrp", "Up Yer Riggin Club (Global) (v2.8 Protocol) (Stealth)", - "gl_wywh", "Wish You Were Here Club (Global) (v2.9) (Stealth)", - "gl_wywh24", "Wish You Were Here Club (Global) (v2.4) (Stealth)", - "gl_wywh24p", "Wish You Were Here Club (Global) (v2.4 Protocol) (Stealth)", - "gl_wywhp", "Wish You Were Here Club (Global) (v2.9 Protocol) (Stealth)", - "gladiatp", "Gladiators", - "gladiatr", "Gladiator (US)", - "glass", "Glass (Ver 1.1)", - "glass10", "Glass (Ver 1.0)", - "glassbrk", "Glass (Ver 1.0, Break Edition)", - "gldarrow", "Golden Arrow (Standard G8-03)", - "gldncrwn", "Golden Crown (Dutch, Game Card 95-752-011)", - "gldneye", "Goldeneye", - "gldnpkr", "Golden Poker (8VXEC037, New Zealand)", - "glfgreat", "Golfing Greats", - "glfgreatj", "Golfing Greats (Japan)", - "gloc", "G-LOC Air Battle (US)", - "glocr360", "G-LOC R360", - "glpracr", "Gallop Racer (English Ver 10.17.K)", - "glpracr2", "Gallop Racer 2 (USA)", - "glpracr2j", "Gallop Racer 2 (Japan)", - "glpracr2l", "Gallop Racer 2 Link HW (Japan)", - "glpracr3", "Gallop Racer 3 (Japan)", - "glpracrj", "Gallop Racer (Japanese Ver 9.01.12)", - "gluck2", "Good Luck II", - "gmahou", "Great Mahou Daisakusen (Japan 000121)", - "gmgalax", "Ghostmuncher Galaxian (bootleg)", - "gmine_l2", "Gold Mine (Shuffle) (L-2)", - "gmissile", "Guided Missile", - "gnbarich", "Gunbarich", - "gng", "Ghosts'n Goblins (World? set 1)", - "gnga", "Ghosts'n Goblins (World? set 2)", - "gngbl", "Ghosts'n Goblins (bootleg with Cross)", - "gngblita", "Ghosts'n Goblins (Italian bootleg, harder)", - "gngc", "Ghosts'n Goblins (World? set 3)", - "gngprot", "Ghosts'n Goblins (prototype)", - "gngt", "Ghosts'n Goblins (US)", - "gnome", "Gnome (070906 Russia)", - "gnome_10", "Gnome (100326 Lottery)", - "gnome_11", "Gnome (100326 Entertainment)", - "gnome_12", "Gnome (100326 Russia)", - "gnome_2", "Gnome (071115 Russia)", - "gnome_2a", "Gnome (bootleg, 071115, banking address hack)", - "gnome_3", "Gnome (080303 World)", - "gnome_3a", "Gnome (bootleg, 080303, banking address hack)", - "gnome_3b", "Gnome (bootleg, 080303, banking address hack, payout percentage 45)", - "gnome_3c", "Gnome (bootleg, 080303, banking address hack, payout percentage 60)", - "gnome_4", "Gnome (090402 Russia)", - "gnome_5", "Gnome (090406 World)", - "gnome_5a", "Gnome (bootleg, 090406, banking address hack, payout percentage 70)", - "gnome_5b", "Gnome (bootleg, 090406, LOTTOGAME (I))", - "gnome_7", "Gnome (090708 Lottery)", - "gnome_9", "Gnome (100326 World)", - "gnomea", "Gnome (bootleg, 070906, banking address hack set 1)", - "gnomeb", "Gnome (bootleg, 070906, banking address hack set 2)", - "gnomec", "Gnome (bootleg, 070906, banking address hack set 3)", - "gnomed", "Gnome (bootleg, 070906, VIDEO GAME-1 GN01)", - "gnomee", "Gnome (bootleg, 070906, LOTOS GN01)", - "gnr_300", "Guns N Roses (3.00)", - "go2000", "Go 2000", - "goal92", "Goal! '92", - "goaltogo", "Goal To Go", - "goalx3", "Goal! Goal! Goal!", - "gobyrc", "Go By RC (V2.03O)", - "godzilla", "Godzilla (Japan)", - "godzillp", "Godzilla (Pinball)", - "gogold", "Go For The Gold (Japan)", - "gogomile", "Go Go! Mile Smile", - "gogomilej", "Susume! Mile Smile (Japan)", - "goindol", "Goindol (World)", - "goindolk", "Goindol (Korea)", - "goindolu", "Goindol (US)", - "goinnuts", "Goin' Nuts", - "goketsuj", "Goketsuji Ichizoku: Matsuri Senzo Kuyou (v200906230)", - "gokuparo", "Gokujyou Parodius (ver JAD)", - "goldball", "Gold Ball (set 1)", - "goldballn", "Gold Ball (set 2)", - "goldbug", "Gold Bug", - "goldcity", "Gold City (Russia) (Atronic)", - "goldcue", "Golden Cue", - "goldenc", "Golden Canaries (1VXFC5462, New Zealand)", - "goldfish", "Gold Fish (020903, prototype)", - "goldfrui", "Gold Fruit", - "goldgame", "Golden Game (Bingo)", - "goldgkit1", "Golden Game Kit 1 Generation (Bingo)", - "goldgkitb", "Golden Game Kit Bingo Stake 6/10 (Bingo)", - "goldglen", "Golden Glenn (Russia) (Atronic)", - "goldgnew", "Golden Game Bingo New (Bingo)", - "goldgstake", "Golden Game Bingo Stake 6/10 (Bingo)", - "goldmedl", "Gold Medalist (set 1)", - "goldmedla", "Gold Medalist (set 2)", - "goldmedlb", "Gold Medalist (bootleg)", - "goldnaxe", "Golden Axe (set 6, US, 8751 317-123A)", - "goldnaxe1", "Golden Axe (set 1, World, FD1094 317-0110)", - "goldnaxe2", "Golden Axe (set 2, US, 8751 317-0112)", - "goldnaxe3", "Golden Axe (set 3, World, FD1094 317-0120)", - "goldnaxeb1", "Golden Axe (encrypted bootleg)", - "goldnaxeb2", "Golden Axe (bootleg)", - "goldnaxej", "Golden Axe (set 4, Japan, FD1094 317-0121)", - "goldnaxeu", "Golden Axe (set 5, US, FD1094 317-0122)", - "goldnpkb", "Golden Poker Double Up (Mini Boy)", - "goldnpkr", "Golden Poker Double Up (Big Boy)", - "goldprmd", "Golden Pyramids (MV4091, USA)", - "goldstar", "Golden Star", - "goldstbl", "Golden Star (Blue version)", - "goldwing", "Gold Wings", - "golgo13", "Golgo 13 (Japan, GLG1/VER.A)", - "gollygho", "Golly! Ghost!", - "gomoku", "Gomoku Narabe Renju", - "gondo", "Gondomania (US)", - "gonefsh2", "Gone Fishing 2", - "good", "Good (Korea)", - "goodejan", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 1)", - "goodejana", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 2)", - "goodluck", "Good Luck", - "goonies", "Vs. The Goonies (set E)", - "gorf", "Gorf", - "gorfpgm1", "Gorf (program 1)", - "gorfpgm1g", "Gorf (program 1, with German Language ROM)", - "gork", "Gork", - "gorkans", "Gorkans", - "gotcha", "Got-cha Mini Game Festival", - "gotya", "Got-Ya (12/24/1981, prototype?)", - "gowcaizr", "Voltage Fighter - Gowcaizer / Choujin Gakuen Gowcaizer", - "gp2quiz", "Gals Panic II - Quiz Version", - "gp2se", "Gals Panic II' - Special Edition (Japan)", - "gp98", "Grand Prix '98 (V100K)", - "gp_110", "Model 110", - "gpgolf", "Golden Par Golf (Joystick, V1.1)", - "gpilots", "Ghost Pilots (NGM-020)(NGH-020)", - "gpilotsh", "Ghost Pilots (NGH-020)(US)", - "gprider", "GP Rider (World, FD1094 317-0163)", - "gpriderj", "GP Rider (Japan, FD1094 317-0161)", - "gprideru", "GP Rider (US, FD1094 317-0162)", - "gprix", "Grand Prix (4.50)", - "gprix_301", "Grand Prix (3.01)", - "gprix_340", "Grand Prix (3.40)", - "gprix_350", "Grand Prix (3.50)", - "gprix_352", "Grand Prix (3.52)", - "gprix_400", "Grand Prix (4.00)", - "gprixf", "Grand Prix (4.50 France)", - "gprixf_301", "Grand Prix (3.01 France)", - "gprixf_340", "Grand Prix (3.40 France)", - "gprixf_350", "Grand Prix (3.50 France)", - "gprixf_352", "Grand Prix (3.52 France)", - "gprixf_400", "Grand Prix (4.00 France)", - "gprixg", "Grand Prix (4.50 Germany)", - "gprixg_301", "Grand Prix (3.01 Germany)", - "gprixg_340", "Grand Prix (3.40 Germany)", - "gprixg_350", "Grand Prix (3.50 Germany)", - "gprixg_352", "Grand Prix (3.52 Germany)", - "gprixg_400", "Grand Prix (4.00 Germany)", - "gprixi", "Grand Prix (4.50 Italy)", - "gprixi_301", "Grand Prix (3.01 Italy)", - "gprixi_340", "Grand Prix (3.40 Italy)", - "gprixi_350", "Grand Prix (3.50 Italy)", - "gprixi_352", "Grand Prix (3.52 Italy)", - "gprixi_400", "Grand Prix (4.00 Italy)", - "gprixl", "Grand Prix (4.50 Spain)", - "gprixl_301", "Grand Prix (3.01 Spain)", - "gprixl_340", "Grand Prix (3.40 Spain)", - "gprixl_350", "Grand Prix (3.50 Spain)", - "gprixl_352", "Grand Prix (3.52 Spain)", - "gprixl_400", "Grand Prix (4.00 Spain)", - "gpworld", "GP World", - "gq863", "Twinkle System", - "gradius", "Gradius (Japan, ROM version)", - "gradius2", "Gradius II - GOFER no Yabou (Japan New Ver.)", - "gradius2a", "Gradius II - GOFER no Yabou (Japan Old Ver.)", - "gradius2b", "Gradius II - GOFER no Yabou (Japan Older Ver.)", - "gradius3", "Gradius III (World, program code R)", - "gradius3a", "Gradius III (Asia)", - "gradius3j", "Gradius III (Japan, program code S)", - "gradius4", "Gradius 4: Fukkatsu", - "grainbow", "SD Gundam Sangokushi Rainbow Tairiku Senki", - "gram2000", "Giant Gram 2000 (JPN, USA, EXP, KOR, AUS)", - "grancan", "Grand Canyon (Russia) (Extrema)", - "grancapi", "Gran Capitan (Version 3)", - "grand_l4", "Grand Lizard (L-4)", - "grandprx", "Grand Prix", - "granny", "Granny and the Gators", - "granslam", "Grand Slam", - "granslam4", "Grand Slam (4 Players)", - "grasspin", "Grasspin", - "gratia", "Gratia - Second Earth (92047-01 version)", - "gratiaa", "Gratia - Second Earth (91022-10 version)", - "gravitar", "Gravitar (version 3)", - "gravitar2", "Gravitar (version 2)", - "gravp", "Gravitar (prototype)", - "grchamp", "Grand Champion", - "grdforce", "Guardian Force (JUET 980318 V0.105)", - "grdian", "Guardian (US)", - "grdians", "Guardians / Denjin Makai II", - "grdnstrm", "Guardian Storm (horizontal, not encrypted)", - "grdnstrmg", "Guardian Storm (Germany)", - "grdnstrmk", "Jeon Sin - Guardian Storm (Korea)", - "grdnstrmv", "Guardian Storm (vertical)", - "greatgun", "Great Guns", - "greatgur", "Great Gurianos (Japan?)", - "greenber", "Green Beret (Irem)", - "grescue", "Galaxy Rescue", - "grgar_l1", "Gorgar (L-1)", - "grgar_t1", "Gorgar (T-1)", - "gridiron", "Gridiron Fight", - "gridlee", "Gridlee", - "griffon", "Griffon (bootleg of Phoenix)", - "grindstm", "Grind Stormer", - "grindstma", "Grind Stormer (older set)", - "grmatch", "Grudge Match (Yankee Game Technology)", - "grndtour", "Grand Tour", - "grobda", "Grobda (New Ver.)", - "grobda2", "Grobda (Old Ver. set 1)", - "grobda3", "Grobda (Old Ver. set 2)", - "groovef", "Groove on Fight - Gouketsuji Ichizoku 3 (J 970416 V1.001)", - "groundfx", "Ground Effects / Super Ground Effects (Japan)", - "growl", "Growl (World)", - "growlp", "Growl (World, prototype)", - "growlu", "Growl (US)", - "grtesoro", "Gran Tesoro? / Play 2000 (v5.01) (Italy)", - "grtesoro4", "Gran Tesoro? / Play 2000 (v4.0) (Italy)", - "grudge", "Grudge Match (prototype)", - "gryzor", "Gryzor (set 1)", - "gryzor1", "Gryzor (set 2)", - "gs4002", "Selection (Version 40.02TMB, set 1)", - "gs4002a", "Selection (Version 40.02TMB, set 2)", - "gs_l3", "The Bally Game Show (L-3)", - "gs_l4", "The Bally Game Show (L-4)", - "gseeker", "Grid Seeker: Project Storm Hammer (Ver 1.3O)", - "gseekerj", "Grid Seeker: Project Storm Hammer (Ver 1.3J)", - "gseekeru", "Grid Seeker: Project Storm Hammer (Ver 1.3A)", - "gslgr94j", "Great Sluggers '94 (Japan)", - "gslgr94u", "Great Sluggers '94", - "gslugrsj", "Great Sluggers (Japan)", - "gstream", "G-Stream G2020", - "gstrik2", "Grand Striker 2 (Europe and Oceania)", - "gstrik2j", "Grand Striker 2 (Japan)", - "gstriker", "Grand Striker", - "gstrikera", "Grand Striker (Americas)", - "gstrikerj", "Grand Striker (Japan)", - "gsword", "Great Swordsman (World?)", - "gsword2", "Great Swordsman (Japan?)", - "gt103a1", "Trivia (Unsorted question roms)", - "gt103aa", "Trivia (Version 1.03a Alt questions 1)", - "gt103ab", "Trivia (Version 1.03a Alt questions 2)", - "gt103asx", "Trivia (Version 1.03a Sex questions)", - "gt2k", "Golden Tee 2K (v1.00)", - "gt2kp100", "Golden Tee 2K (v1.00) (alt protection)", - "gt2ks100", "Golden Tee 2K (v1.00S)", - "gt2kt500", "Golden Tee 2K Tournament (v5.00)", - "gt3d", "Golden Tee 3D Golf (v1.93N)", - "gt3dl19", "Golden Tee 3D Golf (v1.9L)", - "gt3dl191", "Golden Tee 3D Golf (v1.91L)", - "gt3dl192", "Golden Tee 3D Golf (v1.92L)", - "gt3ds192", "Golden Tee 3D Golf (v1.92S)", - "gt3dt211", "Golden Tee 3D Golf Tournament (v2.11)", - "gt3dt231", "Golden Tee 3D Golf Tournament (v2.31)", - "gt3dv14", "Golden Tee 3D Golf (v1.4)", - "gt3dv15", "Golden Tee 3D Golf (v1.5)", - "gt3dv16", "Golden Tee 3D Golf (v1.6)", - "gt3dv17", "Golden Tee 3D Golf (v1.7)", - "gt3dv18", "Golden Tee 3D Golf (v1.8)", - "gt507uk", "Trivia (UK Version 5.07)", - "gt97", "Golden Tee '97 (v1.30)", - "gt97s121", "Golden Tee '97 (v1.21S)", - "gt97t240", "Golden Tee '97 Tournament (v2.40)", - "gt97t243", "Golden Tee '97 Tournament (v2.43)", - "gt97v120", "Golden Tee '97 (v1.20)", - "gt97v121", "Golden Tee '97 (v1.21)", - "gt97v122", "Golden Tee '97 (v1.22)", - "gt98", "Golden Tee '98 (v1.10)", - "gt98s100", "Golden Tee '98 (v1.00S)", - "gt98t303", "Golden Tee '98 Tournament (v3.03)", - "gt98v100", "Golden Tee '98 (v1.00)", - "gt99", "Golden Tee '99 (v1.00)", - "gt99s100", "Golden Tee '99 (v1.00S)", - "gt99t400", "Golden Tee '99 Tournament (v4.00)", - "gtclassc", "Golden Tee Classic (v1.00)", - "gtclasscp", "Golden Tee Classic (v1.00) (alt protection)", - "gtclasscs", "Golden Tee Classic (v1.00S)", - "gtdiamond", "Golden Tee Diamond Edition Tournament (v3.05T ELC)", - "gteikob2", "Gingateikoku No Gyakushu (bootleg set 2)", - "gteikokb", "Gingateikoku No Gyakushu (bootleg set 1)", - "gteikoku", "Gingateikoku No Gyakushu", - "gtfore02", "Golden Tee Fore! 2002 (v2.01.04 UMV)", - "gtfore02o", "Golden Tee Fore! 2002 (v2.00.00)", - "gtfore04", "Golden Tee Fore! 2004", - "gtfore05", "Golden Tee Fore! 2005", - "gtfrk10m", "Guitar Freaks 10th Mix (G*D10 VER. JAB)", - "gtfrk10ma", "Guitar Freaks 10th Mix (G*D10 VER. JAA)", - "gtfrk10mb", "Guitar Freaks 10th Mix eAmusement (G*D10 VER. JBA)", - "gtfrk11m", "Guitar Freaks 11th Mix (G*D39 VER. JAA)", - "gtfrk3ma", "Guitar Freaks 3rd Mix (GE949 VER. JAB)", - "gtfrk3mb", "Guitar Freaks 3rd Mix - security cassette versionup (949JAZ02)", - "gtg", "Golden Tee Golf (Joystick, v3.1)", - "gtg2", "Golden Tee Golf II (Trackball, V2.2)", - "gtg2j", "Golden Tee Golf II (Joystick, V1.0)", - "gtg2t", "Golden Tee Golf II (Trackball, V1.1)", - "gtgt", "Golden Tee Golf (Trackball, v2.0)", - "gtgt1", "Golden Tee Golf (Trackball, v1.0)", - "gticlub", "GTI Club (ver EAA)", - "gticlub2", "GTI Club 2 (ver JAB)", - "gticlub2ea", "GTI Club 2 (ver EAA)", - "gticluba", "GTI Club (ver AAA)", - "gticlubj", "GTI Club (ver JAA)", - "gticlubu", "GTI Club (ver UAA)", - "gtipoker", "GTI Poker", - "gtipokra", "GTI Poker? (SMS hardware)", - "gtmr", "1000 Miglia: Great 1000 Miles Rally (94/07/18)", - "gtmr2", "Mille Miglia 2: Great 1000 Miles Rally (95/05/24)", - "gtmr2a", "Mille Miglia 2: Great 1000 Miles Rally (95/04/04)", - "gtmr2u", "Great 1000 Miles Rally 2 USA (95/05/18)", - "gtmra", "1000 Miglia: Great 1000 Miles Rally (94/06/13)", - "gtmre", "Great 1000 Miles Rally: Evolution Model!!! (94/09/06)", - "gtmrusa", "Great 1000 Miles Rally: U.S.A Version! (94/09/06)", - "gtrfrk2m", "Guitar Freaks 2nd Mix Ver 1.01 (GQ883 VER. JAD)", - "gtrfrk3m", "Guitar Freaks 3rd Mix (GE949 VER. JAC)", - "gtrfrk4m", "Guitar Freaks 4th Mix (G*A24 VER. JAA)", - "gtrfrk5m", "Guitar Freaks 5th Mix (G*A26 VER. JAA)", - "gtrfrk6m", "Guitar Freaks 6th Mix (G*B06 VER. JAA)", - "gtrfrk7m", "Guitar Freaks 7th Mix (G*B17 VER. JAA)", - "gtrfrk8m", "Guitar Freaks 8th Mix power-up ver. (G*C08 VER. JBA)", - "gtrfrk8ma", "Guitar Freaks 8th Mix (G*C08 VER. JAA)", - "gtrfrk9m", "Guitar Freaks 9th Mix (G*C39 VER. JAA)", - "gtrfrks", "Guitar Freaks (GQ886 VER. EAC)", - "gtrfrksa", "Guitar Freaks (GQ886 VER. AAC)", - "gtrfrksj", "Guitar Freaks (GQ886 VER. JAC)", - "gtrfrksu", "Guitar Freaks (GQ886 VER. UAC)", - "gtroppo", "Gone Troppo (1VXEC542, New Zealand)", - "gtroyal", "Golden Tee Royal Edition Tournament (v4.02T EDM)", - "gts1", "System 1", - "gts1s", "System 1 with sound board", - "gtsers1", "Trivia (Questions Series 1)", - "gtsers10", "Trivia (Questions Series 10)", - "gtsers10a", "Trivia (Questions Series 10 Alt Question Rom)", - "gtsers11", "Trivia (Questions Series 11)", - "gtsers11a", "Trivia (Questions Series 11 Alt Question Rom)", - "gtsers12", "Trivia (Questions Series 12)", - "gtsers14", "Trivia (Questions Series 14)", - "gtsers15", "Trivia (Questions Series 15)", - "gtsers2", "Trivia (Questions Series 2)", - "gtsers3", "Trivia (Questions Series 3)", - "gtsers4", "Trivia (Questions Series 4)", - "gtsers5", "Trivia (Questions Series 5)", - "gtsers7", "Trivia (Questions Series 7)", - "gtsers8", "Trivia (Questions Series 8)", - "gtsers9", "Trivia (Questions Series 9)", - "gtsersa", "Trivia (Alt revision questions set 1)", - "gtsersb", "Trivia (Alt revision questions set 2)", - "gtsupreme", "Golden Tee Supreme Edition Tournament (v5.10T ELC S)", - "guab", "Give us a Break (3rd edition)", - "guab21", "Give us a Break (21st edition)", - "guab3a", "Give us a Break (3rd edition alt?)", - "guab4", "Give us a Break (4th edition)", - "guab43", "Give us a Break (43rd edition)", - "guab6", "Give us a Break (6th edition)", - "guab6a", "Give us a Break (6th edition alt?)", - "guab7", "Give us a Break (7th edition)", - "guardian", "Guardians of the 'Hood", - "guiness", "The Guiness (Japan)", - "gulfstrm", "Gulf Storm (set 1)", - "gulfstrma", "Gulf Storm (set 2)", - "gulfstrmb", "Gulf Storm (set 3)", - "gulfstrmm", "Gulf Storm (Media Shoji)", - "gulfwar2", "Gulf War II (set 1)", - "gulfwar2a", "Gulf War II (set 2)", - "gumbo", "Gumbo", - "gunbalina", "Gunbalina (Japan, GNN1 Ver.A)", - "gunball", "Gun Ball (Japan)", - "gunbarl", "Gunbarl (Japan, GNB4/VER.A)", - "gunbird", "Gunbird (World)", - "gunbird2", "Gunbird 2", - "gunbirdj", "Gunbird (Japan)", - "gunbirdk", "Gunbird (Korea)", - "gunblade", "Gunblade NY (Revision A)", - "gunbuletj", "Gun Bullet (Japan, GN1)", - "gunbuletw", "Gun Bullet (World, GN3 Rev B)", - "gunbustr", "Gunbuster (World)", - "gunbustrj", "Gunbuster (Japan)", - "gunbustru", "Gunbuster (US)", - "gunchamp", "Gun Champ", - "gunchamps", "Gun Champ (newer, Super Shot hardware)", - "gundamex", "Mobile Suit Gundam EX Revue", - "gundamos", "Gundam Battle Operating Simulator (GDX-0013)", - "gundealr", "Gun Dealer", - "gundealra", "Gun Dealer (alt card set)", - "gundealrt", "Gun Dealer (Japan)", - "gundhara", "Gundhara", - "gundl94", "Gun Dealer '94", - "gundmct", "Mobile Suit Gundam: Federation Vs. Zeon (2001-02-08)", - "gundmgd", "Mobile Suit Gundam: Federation Vs. Zeon (GDL-0001)", - "gundmxgd", "Mobile Suit Gundam: Federation Vs. Zeon DX (GDL-0006)", - "gundzaft", "Gundam Seed: Federation vs. Z.A.F.T. (SED1 Ver. A)", - "gunfight", "Gun Fight (set 1)", - "gunfighto", "Gun Fight (set 2)", - "gunforc2", "Gun Force II (US)", - "gunforce", "Gunforce - Battle Fire Engulfed Terror Island (World)", - "gunforcej", "Gunforce - Battle Fire Engulfed Terror Island (Japan)", - "gunforceu", "Gunforce - Battle Fire Engulfed Terror Island (US)", - "gunfront", "Gun & Frontier (World)", - "gunfrontj", "Gun Frontier (Japan)", - "gunhard", "Gun Hard (Japan)", - "gunhohki", "Mahou Keibitai Gun Hohki (Japan)", - "gunlock", "Gunlock (Ver 2.3O 1994/01/20)", - "gunman", "Gunman [TTL]", - "gunmania", "GunMania (GL906 VER. JAA)", - "gunmast", "Gun Master", - "gunnail", "GunNail (28th May. 1992)", - "gunnrose", "Guns and Roses (C606191SMP, Australia)", - "gunpey", "Gunpey (Japan)", - "gunsmoke", "Gun.Smoke (World)", - "gunsmokej", "Gun.Smoke (Japan)", - "gunsmokeu", "Gun.Smoke (US set 1)", - "gunsmokeua", "Gun.Smoke (US set 2)", - "gunsur2", "Gun Survivor 2 Biohazard Code: Veronica (BHF1 Ver. E)", - "gunsur2e", "Gun Survivor 2 Biohazard Code: Veronica (BHF2 Ver. E)", - "gunwars", "Gunmen Wars (GM1 Ver. B)", - "gunwarsa", "Gunmen Wars (GM1 Ver. A)", - "gururin", "Gururin", - "gussun", "Gussun Oyoyo (Japan)", - "gutangtn", "Guttang Gottong", - "guts", "Guts n' Glory (prototype)", - "gutsn", "Guts'n (Japan)", - "guttangt", "Guttang Gottong (bootleg on Galaxian type hardware)", - "guwange", "Guwange (Japan, Master Ver. 99/06/24)", - "guwanges", "Guwange (Japan, Special Ver. 00/07/07)", - "guzzler", "Guzzler", - "guzzlers", "Guzzler (Swimmer Conversion)", - "gvrxpsup", "Global VR XP OS Update/Install - 06/11/02", - "gvrxpsys", "Global VR XP OS Install - 09/30/01", - "gw_l1", "The Getaway: High Speed II (L-1)", - "gw_l2", "The Getaway: High Speed II (L-2)", - "gw_l3", "The Getaway: High Speed II (L-3)", - "gw_l5", "The Getaway: High Speed II (L-5)", - "gw_p7", "The Getaway: High Speed II (P-7)", - "gw_pc", "The Getaway: High Speed II (P-C)", - "gwar", "Guerrilla War (US)", - "gwara", "Guerrilla War (Version 1)", - "gwarb", "Guerrilla War (Joystick hack bootleg)", - "gwarfare", "Global Warfare", - "gwarj", "Guevara (Japan)", - "gwarrior", "Galactic Warriors", - "gwing2", "Giga Wing 2 (JPN, USA, EXP, KOR, AUS)", - "gwinggen", "Giga Wing Generations (v2.02J)", - "gypmagic", "Gypsy Magic (Konami Endeavour)", - "gypsyjug", "Gypsy Juggler", - "gyrodine", "Gyrodine", - "gyrodinet", "Gyrodine (Taito Corporation license)", - "gyruss", "Gyruss", - "gyrussb", "Gyruss (bootleg?)", - "gyrussce", "Gyruss (Centuri)", - "hachamf", "Hacha Mecha Fighter (19th Sep. 1991)", - "hacher", "Hacher (hack of Win Win Bingo)", - "hachoo", "Hachoo!", - "haekaka", "Hae Hae Ka Ka Ka", - "hal21", "HAL21", - "hal21j", "HAL21 (Japan)", - "halley", "Halley Comet", - "halley87", "Halley's Comet '87", - "halleycj", "Halley's Comet (Japan, Older)", - "halleys", "Halley's Comet (US)", - "halleysc", "Halley's Comet (Japan, Newer)", - "hammer", "Hammer", - "hanaawas", "Hana Awase", - "hanagumi", "Sakura Taisen - Hanagumi Taisen Columns (J 971007 V1.010)", - "hanakanz", "Hana Kanzashi (Japan)", - "hanamai", "Hana no Mai (Japan)", - "hanamomb", "Mahjong Hana no Momoko gumi (Japan 881125)", - "hanamomo", "Mahjong Hana no Momoko gumi (Japan 881201)", - "hanaoji", "Hana to Ojisan [BET] (Japan 911209)", - "hanaroku", "Hanaroku", - "hanayara", "Hana wo Yaraneba! (Japan)", - "hangly", "Hangly-Man (set 1)", - "hangly2", "Hangly-Man (set 2)", - "hangly3", "Hangly-Man (set 3)", - "hangman", "Hangman", - "hangon", "Hang-On (Rev A)", - "hangon1", "Hang-On", - "hangon2", "Hang-On (ride-on)", - "hangonjr", "Hang-On Jr.", - "hangplt", "Hang Pilot (ver JAB)", - "hangpltu", "Hang Pilot (ver UAA)", - "happy6", "Happy 6-in-1 (ver. 102CN)", - "happy6101", "Happy 6-in-1 (ver. 101CN)", - "hapytour", "Happy Tour", - "hardbody", "Hardbody", - "hardbodyg", "Hardbody (German)", - "harddriv", "Hard Drivin' (cockpit, rev 7)", - "harddriv1", "Hard Drivin' (cockpit, rev 1)", - "harddriv2", "Hard Drivin' (cockpit, rev 2)", - "harddriv3", "Hard Drivin' (cockpit, rev 3)", - "harddrivb", "Hard Drivin' (cockpit, British, rev 7)", - "harddrivb5", "Hard Drivin' (cockpit, British, rev 5)", - "harddrivb6", "Hard Drivin' (cockpit, British, rev 6)", - "harddrivc", "Hard Drivin' (compact, rev 2)", - "harddrivc1", "Hard Drivin' (compact, rev 1)", - "harddrivcb", "Hard Drivin' (compact, British, rev 2)", - "harddrivcg", "Hard Drivin' (compact, German, rev 2)", - "harddrivg", "Hard Drivin' (cockpit, German, rev 7)", - "harddrivg4", "Hard Drivin' (cockpit, German, rev 4)", - "harddrivj", "Hard Drivin' (cockpit, Japan, rev 7)", - "harddrivj6", "Hard Drivin' (cockpit, Japan, rev 6)", - "harddunk", "Hard Dunk (World)", - "harddunkj", "Hard Dunk (Japan)", - "hardhat", "Hard Hat", - "hardhea2", "Hard Head 2 (v2.0)", - "hardhead", "Hard Head", - "hardheadb", "Hard Head (bootleg)", - "hardyard", "Hard Yardage (v1.20)", - "hardyard10", "Hard Yardage (v1.00)", - "harem", "Harem", - "haremchl", "Harem Challenge", - "harl_a10", "Harley Davidson (1.03 Display rev. 1.00)", - "harl_a13", "Harley Davidson (1.03)", - "harl_a18", "Harley Davidson (1.08)", - "harl_a30", "Harley Davidson (3.00)", - "harl_a40", "Harley Davidson (4.00)", - "harl_f13", "Harley Davidson (1.03 France)", - "harl_f18", "Harley Davidson (1.08 France)", - "harl_f30", "Harley Davidson (3.00 France)", - "harl_f40", "Harley Davidson (4.00 France)", - "harl_g13", "Harley Davidson (1.03 Germany)", - "harl_g18", "Harley Davidson (1.08 Germany)", - "harl_g30", "Harley Davidson (3.00 Germany)", - "harl_g40", "Harley Davidson (4.00 Germany)", - "harl_i13", "Harley Davidson (1.03 Italy)", - "harl_i18", "Harley Davidson (1.08 Italy)", - "harl_i30", "Harley Davidson (3.00 Italy)", - "harl_i40", "Harley Davidson (4.00 Italy)", - "harl_l13", "Harley Davidson (1.03 Spain)", - "harl_l18", "Harley Davidson (1.08 Spain)", - "harl_l30", "Harley Davidson (3.00 Spain)", - "harl_l40", "Harley Davidson (4.00 Spain)", - "harley", "Harley-Davidson and L.A. Riders (Revision B)", - "harleya", "Harley-Davidson and L.A. Riders (Revision A)", - "hasamu", "Hasamu (Japan)", - "hatena", "Adventure Quiz 2 - Hatena? no Daibouken (Japan 900228)", - "hatris", "Hatris (US)", - "hatrisj", "Hatris (Japan)", - "hattrick", "Hat Trick", - "haunthig", "Haunted House (IGS)", - "hawaii", "Hawaii (Russia)", - "hawkman", "Hawkman", - "hawkman1", "Hawkman (alternate set)", - "hayaosi1", "Hayaoshi Quiz Ouza Ketteisen - The King Of Quiz", - "hayaosi2", "Hayaoshi Quiz Grand Champion Taikai", - "hayaosi3", "Hayaoshi Quiz Nettou Namahousou", - "hb_bar7", "Bar Seven (Fairgames) (set 1)", - "hb_bar7a", "Bar Seven (Fairgames) (set 2)", - "hb_bigx", "Big X (JPM) (set 1)", - "hb_bigxa", "Big X (JPM) (set 2)", - "hb_bigxb", "Big X (JPM) (set 3)", - "hb_bigxc", "Big X (JPM) (set 4)", - "hb_bigxd", "Big X (JPM) (set 5)", - "hb_cashc", "Cash Crusade (Qps) (set 1)", - "hb_cashca", "Cash Crusade (Qps) (set 2)", - "hb_cashcb", "Cash Crusade (Qps) (set 3)", - "hb_cashx", "Cash X (Fairgames) (set 1)", - "hb_cashxa", "Cash X (Fairgames) (set 2)", - "hb_ccow", "Cash Cow (Qps) (set 1)", - "hb_ccowa", "Cash Cow (Qps) (set 2)", - "hb_ccowb", "Cash Cow (Qps) (set 3)", - "hb_cr", "Cash Raker (Qps) (set 1)", - "hb_cra", "Cash Raker (Qps) (set 2)", - "hb_crb", "Cash Raker (Qps) (set 3)", - "hb_cwf", "Cherry Win Falls (Fairgames) (set 1)", - "hb_cwfa", "Cherry Win Falls (Fairgames) (set 2)", - "hb_dac", "Dough & Arrow Club (Qps, set 1)", - "hb_daca", "Dough & Arrow Club (Qps, set 2)", - "hb_dacb", "Dough & Arrow Club (Qps, set 3)", - "hb_dacc", "Dough & Arrow Club (Qps, set 4)", - "hb_dacd", "Dough & Arrow Club (Qps, set 5)", - "hb_dace", "Dough & Arrow Club (Qps, set 6)", - "hb_dacf", "Dough & Arrow Club (Qps, set 7)", - "hb_dacg", "Dough & Arrow Club (Qps, set 8)", - "hb_dacz", "Dough & Arrow Club (Qps, set 9)", - "hb_frtcl", "Fruitopia Club (Qps) (set 1)", - "hb_frtcla", "Fruitopia Club (Qps) (set 2)", - "hb_frtclb", "Fruitopia Club (Qps) (set 3)", - "hb_frtclc", "Fruitopia Club (Qps) (set 4)", - "hb_frtcld", "Fruitopia Club (Qps) (set 5)", - "hb_frtcle", "Fruitopia Club (Qps) (set 6)", - "hb_frtclf", "Fruitopia Club (Qps) (set 7)", - "hb_frtclg", "Fruitopia Club (Qps) (set 8)", - "hb_frtclh", "Fruitopia Club (Qps) (set 9)", - "hb_frtcli", "Fruitopia Club (Qps) (set 10)", - "hb_frtclj", "Fruitopia Club (Qps) (set 11)", - "hb_frtclk", "Fruitopia Club (Qps) (set 12)", - "hb_frtcll", "Fruitopia Club (Qps) (set 13)", - "hb_frtclm", "Fruitopia Club (Qps) (set 14)", - "hb_frtcln", "Fruitopia Club (Qps) (set 15)", - "hb_gldpl", "Golden Palace (Qps / Mazooma) (set 1)", - "hb_gldpla", "Golden Palace (Qps / Mazooma) (set 2)", - "hb_gldwn", "Golden Winner (Fairgames) (set 1)", - "hb_gldwna", "Golden Winner (Fairgames) (set 2)", - "hb_gpal", "Golden Palace (Qps) (set 1)", - "hb_gpala", "Golden Palace (Qps) (set 2)", - "hb_gpalb", "Golden Palace (Qps) (set 3)", - "hb_gpalc", "Golden Palace (Qps) (set 4)", - "hb_gpald", "Golden Palace (Qps) (set 5)", - "hb_gpale", "Golden Palace (Qps) (set 6)", - "hb_gpalf", "Golden Palace (Qps) (set 7)", - "hb_gpalg", "Golden Palace (Qps) (set 8)", - "hb_gpalh", "Golden Palace (Qps) (set 9)", - "hb_gpali", "Golden Palace (Qps) (set 10)", - "hb_hotst", "Hot Stuff (JPM?) (set 1)", - "hb_hotsta", "Hot Stuff (JPM?) (set 2)", - "hb_hotstb", "Hot Stuff (JPM?) (set 3)", - "hb_hotstc", "Hot Stuff (JPM?) (set 4)", - "hb_hotstd", "Hot Stuff (JPM?) (set 5)", - "hb_hotste", "Hot Stuff (JPM?) (set 6)", - "hb_hotstf", "Hot Stuff (JPM?) (set 7)", - "hb_hotstg", "Hot Stuff (JPM?) (set 8)", - "hb_hotsth", "Hot Stuff (JPM?) (set 9)", - "hb_jailb", "Jail Break (Qps) (set 1)", - "hb_jailba", "Jail Break (Qps) (set 2)", - "hb_jkrwl", "Jokers Wild (Fairgames) (set 1)", - "hb_jkrwla", "Jokers Wild (Fairgames) (set 2)", - "hb_medal", "Medallion Job (Qps)", - "hb_mrmon", "Mr. Money (Qps) (set 1)", - "hb_mrmona", "Mr. Money (Qps) (set 2)", - "hb_mrmonb", "Mr. Money (Qps) (set 3)", - "hb_mrmonc", "Mr. Money (Qps) (set 4)", - "hb_rckrl", "Rock 'n' Roll (Qps) (set 1)", - "hb_rckrla", "Rock 'n' Roll (Qps) (set 2)", - "hb_rckrlb", "Rock 'n' Roll (Qps) (set 3)", - "hb_rckrlc", "Rock 'n' Roll (Qps) (set 4)", - "hb_rckrld", "Rock 'n' Roll (Qps) (set 5)", - "hb_rckrle", "Rock 'n' Roll (Qps) (set 6)", - "hb_rckrlf", "Rock 'n' Roll (Qps) (set 7)", - "hb_rckrlg", "Rock 'n' Roll (Qps) (set 8)", - "hb_rhv", "Red Hot Voucher (Qps) (set 1)", - "hb_rhva", "Red Hot Voucher (Qps) (set 2)", - "hb_ringb", "Ring A Bell (JPM) (set 1)", - "hb_ringba", "Ring A Bell (JPM) (set 2)", - "hb_ringbb", "Ring A Bell (JPM) (set 3)", - "hb_ringbc", "Ring A Bell (JPM) (set 4)", - "hb_ringbd", "Ring A Bell (JPM) (set 5)", - "hb_ringbe", "Ring A Bell (JPM) (set 6)", - "hb_ydd", "Yabba-Dabba-Dough (Qps) (set 1)", - "hb_ydda", "Yabba-Dabba-Dough (Qps) (set 2)", - "hbarrel", "Heavy Barrel (US)", - "hbarrelw", "Heavy Barrel (World)", - "hcastle", "Haunted Castle (version M)", - "hcastlee", "Haunted Castle (version E)", - "hcastlek", "Haunted Castle (version K)", - "hcrash", "Hyper Crash (version D)", - "hcrashc", "Hyper Crash (version C)", - "hd_l1", "Harley Davidson (L-1)", - "hd_l3", "Harley Davidson (L-3)", - "hdrivair", "Hard Drivin's Airborne (prototype)", - "hdrivairp", "Hard Drivin's Airborne (prototype, early rev)", - "headon", "Head On (2 players)", - "headon1", "Head On (1 player)", - "headon2", "Head On 2", - "headon2s", "Head On 2 (Sidam bootleg)", - "headonb", "Head On (bootleg on dedicated hardware)", - "headoni", "Head On (Irem, M-15 Hardware)", - "headonmz", "Head On (bootleg, alt maze)", - "headons", "Head On (Sidam bootleg, set 1)", - "headonsa", "Head On (Sidam bootleg, set 2)", - "heartatk", "Heart Attack", - "heartspd", "Hearts & Spades", - "heatbrl", "Heated Barrel (World version 3)", - "heatbrl2", "Heated Barrel (World version 2)", - "heatbrle", "Heated Barrel (Electronic Devices license)", - "heatbrlo", "Heated Barrel (World old version)", - "heatbrlu", "Heated Barrel (US)", - "heatof11", "Heat of Eleven '98 (ver EAA)", - "heavymtl", "Heavy Metal", - "heberpop", "Hebereke no Popoon (Japan)", - "hedpanic", "Head Panic (ver. 0117, 17/01/2000)", - "hedpanicf", "Head Panic (ver. 0315, 15/03/2000)", - "hedpanico", "Head Panic (ver. 0615, 15/06/1999)", - "heiankyo", "Heiankyo Alien", - "helifire", "HeliFire (set 1)", - "helifirea", "HeliFire (set 2)", - "hellfire", "Hellfire (2P set)", - "hellfire1", "Hellfire (1P set)", - "hellfire1a", "Hellfire (1P set, older)", - "hellfire2a", "Hellfire (2P set, older)", - "hellngt", "Hell Night (ver EAA)", - "herbiedk", "Herbie at the Olympics (DK conversion)", - "hercules", "Hercules", - "hermit", "The Hermit (Ver. 1.14)", - "hero", "Hero", - "herodk", "Hero in the Castle of Doom (DK conversion)", - "herodku", "Hero in the Castle of Doom (DK conversion not encrypted)", - "heuksun", "Heuk Sun Baek Sa (Korea)", - "hexa", "Hexa", - "hexagone", "L'Hexagone", - "hexion", "Hexion (Japan ver JAB)", - "hexpool", "Hex Pool (Shinkai)", - "hexpoola", "Hex Pool (Senko)", - "hg_frd", "Fruit Deuce (Hazel Grove)", - "hginga", "Hanafuda Hana Ginga", - "hgkairak", "Taisen Hot Gimmick Kairakuten (Japan)", - "hglbtrtr", "Harlem Globetrotters On Tour", - "hgokbang", "Hanafuda Hana Gokou Bangaihen (Japan)", - "hgokou", "Hanafuda Hana Gokou (Japan)", - "hh", "Haunted House (Rev. 2)", - "hh_1", "Haunted House (Rev. 1)", - "hharry", "Hammerin' Harry (World)", - "hharryu", "Hammerin' Harry (US)", - "hidctch2", "Hidden Catch 2 (pcb ver 3.03) (Kor/Eng) (AT89c52 protected)", - "hidctch2a", "Hidden Catch 2 (pcb ver 1.00) (Kor/Eng/Jpn/Chi)", - "hidctch3", "Hidden Catch 3 (ver 1.00 / pcb ver 3.05)", - "hideseek", "Hide & Seek", - "hidnc2k", "Hidden Catch 2000 (AT89c52 protected)", - "hidnctch", "Hidden Catch (World) / Tul Lin Gu Lim Chat Ki '98 (Korea) (pcb ver 3.03)", - "higemaru", "Pirate Ship Higemaru", - "highsplt", "Space Fever High Splitter (set 1)", - "highsplta", "Space Fever High Splitter (set 2)", - "highspltb", "Space Fever High Splitter (alt Sound)", - "hiimpact", "High Impact Football (rev LA5 02/15/91)", - "hiimpact1", "High Impact Football (rev LA1 12/16/90)", - "hiimpact2", "High Impact Football (rev LA2 12/26/90)", - "hiimpact3", "High Impact Football (rev LA3 12/27/90)", - "hiimpact4", "High Impact Football (rev LA4 02/04/91)", - "hiimpactp", "High Impact Football (prototype, rev 8.6 12/09/90)", - "hikaru", "Hikaru Bios", - "himesiki", "Himeshikibu (Japan)", - "hipai", "Hi Pai Paradise", - "hippodrm", "Hippodrome (US)", - "hirol_fr", "High Roller Casino (3.00 France)", - "hirol_gr", "High Roller Casino (3.00 Germany)", - "hirol_gr_210", "High Roller Casino (2.10 Germany)", - "hirol_it", "High Roller Casino (3.00 Italy)", - "hirolcas", "High Roller Casino (3.00)", - "hirolcas_210", "High Roller Casino (2.10)", - "hirolcat", "High Roller Casino (3.00) TEST", - "hironew", "High Roller Casino (ARM7 Sound Board)", - "hiryuken", "Hokuha Syourin Hiryu no Ken", - "hishouza", "Hishou Zame (Japan)", - "histryma", "The History of Martial Arts", - "hitice", "Hit the Ice (US)", - "hiticej", "Hit the Ice (Japan)", - "hitme", "Hit Me (set 1)", - "hitme1", "Hit Me (set 2)", - "hitnmiss", "Hit 'n Miss (version 3.0)", - "hitnmiss2", "Hit 'n Miss (version 2.0)", - "hitpoker", "Hit Poker (Bulgaria)", - "hjingi", "Hana Jingi (Japan, Bet)", - "hkagerou", "Hana Kagerou [BET] (Japan)", - "hldspin1", "Hold & Spin I (Version 2.7T, set 1)", - "hldspin1dt", "Hold & Spin I (Version 2.7T, set 2)", - "hldspin1o", "Hold & Spin I (Version 2.5T)", - "hldspin1vt", "Hold & Spin I (Version 2.7T Dual)", - "hldspin2", "Hold & Spin II (Version 2.8R, set 1)", - "hldspin2d1", "Hold & Spin II (Version 2.8R, set 2)", - "hldspin2o", "Hold & Spin II (Version 2.6)", - "hldspin2v1", "Hold & Spin II (Version 2.8R Dual)", - "hlywoodh", "Hollywood Heat", - "hmcompm2", "hiphopmania complete MIX 2 (ver UA-A)", - "hmcompmx", "hiphopmania complete MIX (ver UA-B)", - "hmgeo", "Heavy Metal Geomatrix (JPN, USA, EUR, ASI, AUS) (Rev A)", - "hnageman", "AV Hanafuda Hana no Ageman (Japan 900716)", - "hnayayoi", "Hana Yayoi (Japan)", - "hncholms", "Hunchback Olympic (Scramble hardware)", - "hndlchmp", "Handle Champ (GQ710 VER. JAB)", - "hnfubuki", "Hana Fubuki [BET] (Japan)", - "hng64", "Hyper NeoGeo 64 Bios", - "hngmnjpm", "Hangman (JPM)", - "hngmnjpmd", "Hangman (JPM) (Protocol)", - "hnkochou", "Hana Kochou (Japan, Bet)", - "hnoridur", "Hana Oriduru (Japan)", - "hnxmasev", "AV Hanafuda Hana no Christmas Eve (Japan 901204)", - "hoccer", "Hoccer (set 1)", - "hoccer2", "Hoccer (set 2)", - "hocrash", "Crash (bootleg of Head On)", - "hod", "House of Diamonds", - "hod2bios", "Naomi House of the Dead 2 Bios", - "hoedown", "Hoe Down", - "hogalley", "Vs. Hogan's Alley (set HA4-1 E-1)", - "holeland", "Hole Land", - "holo", "Holosseum (US)", - "homerun", "Moero!! Pro Yakyuu Homerun Kyousou", - "homo", "Homo", - "homura", "Homura (v2.04J)", - "honeydol", "Honey Dolls", - "hook", "Hook (World)", - "hook_401", "Hook (4.01)", - "hook_404", "Hook (4.04)", - "hook_408", "Hook (4.08)", - "hookj", "Hook (Japan)", - "hooku", "Hook (US)", - "hoops", "Hoops", - "hoops95", "Hoops (Europe/Asia 1.7)", - "hoops96", "Hoops '96 (Europe/Asia 2.0)", - "hopmappy", "Hopping Mappy", - "hopper", "SWP Hopper Board", - "hopprobo", "Hopper Robo", - "horekid", "Kid no Hore Hore Daisakusen", - "horekidb", "Kid no Hore Hore Daisakusen (bootleg)", - "horizon", "Horizon (Irem)", - "horshoes", "American Horseshoes (US)", - "hotblock", "Hot Blocks - Tetrix II", - "hotbubl", "Hot Bubble", - "hotchase", "Hot Chase", - "hotd", "House of the Dead", - "hotd2", "House of the Dead 2", - "hotd2o", "House of the Dead 2 (original)", - "hotd2p", "House of the Dead 2 (prototype)", - "hotd3", "The House of the Dead III (GDX-0001)", - "hotdebut", "Quiz de Idol! Hot Debut (Japan)", - "hotdoggn", "Hotdoggin'", - "hotdogst", "Hotdog Storm (International)", - "hotgm4ev", "Taisen Hot Gimmick 4 Ever (Japan)", - "hotgmck", "Taisen Hot Gimmick (Japan)", - "hotgmck3", "Taisen Hot Gimmick 3 Digital Surfing (Japan)", - "hotgmcki", "Mahjong Hot Gimmick Integral (Japan)", - "hotgmkmp", "Taisen Hot Gimmick Mix Party", - "hothand", "Hot Hand", - "hotmemry", "Hot Memory (V1.2, Germany, 12/28/94)", - "hotmemry11", "Hot Memory (V1.1, Germany, 11/30/94)", - "hotmind", "Hot Mind (Hard Times hardware)", - "hotminda", "Hot Mind (adjustable prize)", - "hotmindff", "Hot Mind (Fit of Fighting hardware)", - "hotpinbl", "Hot Pinball", - "hotrod", "Hot Rod (World, 3 Players, Turbo set 1, Floppy Based)", - "hotroda", "Hot Rod (World, 3 Players, Turbo set 2, Floppy Based)", - "hotrodj", "Hot Rod (Japan, 4 Players, Floppy Based)", - "hotshock", "Hot Shocker", - "hotshockb", "Hot Shocker (early revision?)", - "hotshots", "Hot Shots", - "hotslot", "Hot Slot (ver. 05.01)", - "hotslots", "Hot Slots (6.00)", - "hotsmash", "Vs. Hot Smash", - "hotstuff", "Olympic Hot Stuff (TAS 5 Reel System)", - "hottop", "Hot Toppings (Russia)", - "hotwheel", "Hot Wheels", - "hourouki", "Mahjong Hourouki Part 1 - Seisyun Hen (Japan)", - "housemn2", "House Mannequin Roppongi Live hen (Japan 870418)", - "housemnq", "House Mannequin (Japan 870217)", - "howzat", "Howzat!", - "hparadis", "Super Hana Paradise (Japan)", - "hpolym84", "Hyper Olympic '84", - "hpuncher", "Hard Puncher (Japan)", - "hrclass", "Home Run Classic (v1.21 12-feb-1997)", - "hrdtimes", "Hard Times (set 1)", - "hrdtimesa", "Hard Times (set 2)", - "hs_l3", "High Speed (L-3)", - "hs_l4", "High Speed (L-4)", - "hsf2", "Hyper Street Fighter 2: The Anniversary Edition (USA 040202)", - "hsf2a", "Hyper Street Fighter 2: The Anniversary Edition (Asia 040202)", - "hsf2d", "Hyper Street Fighter II: The Anniversary Edition (Asia 040202 Phoenix Edition) (bootleg)", - "hsf2j", "Hyper Street Fighter 2: The Anniversary Edition (Japan 031222)", - "hshavoc", "High Seas Havoc", - "hshot_p8", "Hot Shot Basketball (P-8)", - "hspot2", "Hot Spot 2", - "hspot3", "Hot Spot 3", - "hstennis", "Hot Shots Tennis (V1.1)", - "hstennis10", "Hot Shots Tennis (V1.0)", - "htchctch", "Hatch Catch", - "htengoku", "Hanafuda Hana Tengoku (Japan)", - "hthero", "Hat Trick Hero (Japan)", - "hthero93", "Hat Trick Hero '93 (Ver 1.0J 1993/02/28)", - "hthero94", "Hat Trick Hero '94 (Ver 2.2A 1994/05/26)", - "hthero95", "Hat Trick Hero '95 (Ver 2.5J 1994/11/03)", - "hthero95u", "Hat Trick Hero '95 (Ver 2.5A 1994/11/03)", - "httip_l1", "Hot Tip (L-1)", - "hulk", "Incredible Hulk,The", - "hunchbak", "Hunchback (set 1)", - "hunchbaka", "Hunchback (set 2)", - "hunchbkd", "Hunchback (DK conversion)", - "hunchbkg", "Hunchback (Galaxian hardware)", - "hunchbks", "Hunchback (Scramble hardware)", - "hunchbks2", "Hunchback (Scramble hardware, bootleg)", - "huncholy", "Hunchback Olympic", - "hurr_l2", "Hurricane (L-2)", - "hustle", "Hustle", - "hustler", "Video Hustler", - "hustlerb", "Video Hustler (bootleg, set 1)", - "hustlerb2", "Fatsy Gambler (Video Hustler bootleg)", - "hustlerb3", "Video Pool (Video Hustler bootleg)", - "hustlerb4", "Video Hustler (bootleg, set 2)", - "hustlerd", "Video Hustler (Dynamo Games)", - "hvnsgate", "Heaven's Gate", - "hvoltage", "High Voltage", - "hvymetal", "Heavy Metal (315-5135)", - "hvymetap", "Heavy Metal Meltdown", - "hvysmsh", "Heavy Smash (Europe version -2)", - "hvysmsha", "Heavy Smash (Asia version -4)", - "hvysmshj", "Heavy Smash (Japan version -2)", - "hvyunit", "Heavy Unit (World)", - "hvyunitj", "Heavy Unit (Japan, Newer)", - "hvyunitjo", "Heavy Unit (Japan, Older)", - "hvyunitu", "Heavy Unit -U.S.A. Version- (US)", - "hwchamp", "Heavyweight Champ", - "hwchampj", "Heavyweight Champ (Japan, FD1094 317-0046)", - "hwrace", "High Way Race", - "hydra", "Hydra", - "hydrap", "Hydra (prototype 5/14/90)", - "hydrap2", "Hydra (prototype 5/25/90)", - "hydrthnd", "Hydro Thunder", - "hyhoo", "Hayaoshi Taisen Quiz Hyhoo (Japan)", - "hyhoo2", "Hayaoshi Taisen Quiz Hyhoo 2 (Japan)", - "hyouban", "Mahjong Hyouban Musume [BET] (Japan)", - "hypbbc2p", "Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. JAA)", - "hypbbc2pk", "Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. KAA)", - "hypbl_l4", "HyperBall (L-4)", - "hyperath", "Hyper Athlete (GV021 Japan 1.00)", - "hyperbbc", "Hyper Bishi Bashi Champ (GQ876 VER. EAA)", - "hyperbbca", "Hyper Bishi Bashi Champ (GQ876 VER. AAA)", - "hyperpac", "Hyper Pacman", - "hyperpacb", "Hyper Pacman (bootleg)", - "hyperspc", "Hyperspace (bootleg of Asteroids)", - "hyperspt", "Hyper Sports", - "hypersptb", "Hyper Sports (bootleg)", - "hyperv2", "Hyper V2 (Global VR) Install - 06/12/02", - "hyperv2a", "Hyper V2 (Global VR) Install - 09/30/01", - "hyprdriv", "Hyperdrive", - "hyprduel", "Hyper Duel (Japan set 1)", - "hyprduel2", "Hyper Duel (Japan set 2)", - "hypreac2", "Mahjong Hyper Reaction 2 (Japan)", - "hypreact", "Mahjong Hyper Reaction (Japan)", - "hyprolym", "Hyper Olympic", - "hyprolymb", "Hyper Olympic (bootleg)", - "hypsptsp", "Hyper Sports Special (Japan)", - "i500_11b", "Indianapolis 500 (1.1 Belgium)", - "i500_11r", "Indianapolis 500 (1.1R)", - "ibara", "Ibara (2005/03/22 MASTER VER..)", - "ibarablk", "Ibara Kuro Black Label (2006/02/06. MASTER VER.)", - "ibarablka", "Ibara Kuro Black Label (2006/02/06 MASTER VER.)", - "iccash", "I C Cash (Russia) (Atronic)", - "iceclimb", "Vs. Ice Climber (set IC4-4 B-1)", - "iceclimba", "Vs. Ice Climber (set IC4-4 ?)", - "iceclmrd", "Vs. Ice Climber Dual (set IC4-4 A-1)", - "icecold", "Ice Cold Beer", - "icefever", "Ice Fever", - "ichiban", "Ichi Ban Jyan", - "ichir", "Puzzle & Action: Ichidant-R (World)", - "ichirj", "Puzzle & Action: Ichidant-R (Japan)", - "ichirjbl", "Puzzle & Action: Ichidant-R (Japan) (bootleg)", - "ichirk", "Puzzle & Action: Ichidant-R (Korea)", - "id4", "Independence Day", - "idhimitu", "Idol no Himitsu [BET] (Japan 890304)", - "idolmj", "Idol-Mahjong Housoukyoku (Japan)", - "idsoccer", "Indoor Soccer (set 1)", - "idsoccera", "Indoor Soccer (set 2)", - "iemoto", "Iemoto (Japan 871020)", - "iemotom", "Iemoto [BET] (Japan 871118)", - "iganinju", "Iga Ninjyutsuden (Japan)", - "igmo", "IGMO", - "igromula", "Igrosoft Multigame Bootleg (15 Games)", - "igromult", "Igrosoft Multigame Bootleg (10 Games)", - "igs_ncs", "New Champion Skill (v100n)", - "igs_ncs2", "New Champion Skill (v100n 2000)", - "igsm312", "unknown 'IGS 6POKER2' game (V312CN)", - "ij_l3", "Indiana Jones (L-3)", - "ij_l4", "Indiana Jones (L-4)", - "ij_l5", "Indiana Jones (L-5)", - "ij_l6", "Indiana Jones (L-6)", - "ij_l7", "Indiana Jones (L-7)", - "ij_lg7", "Indiana Jones (LG-7)", - "ikari", "Ikari Warriors (US JAMMA)", - "ikari3", "Ikari III - The Rescue (World, 8-Way Joystick)", - "ikari3j", "Ikari Three (Japan, Rotary Joystick)", - "ikari3k", "Ikari Three (Korea, 8-Way Joystick)", - "ikari3u", "Ikari III - The Rescue (US, Rotary Joystick)", - "ikaria", "Ikari Warriors (US)", - "ikarijp", "Ikari (Japan No Continues)", - "ikarijpb", "Ikari (Joystick hack bootleg)", - "ikarinc", "Ikari Warriors (US No Continues)", - "ikaruga", "Ikaruga (GDL-0010)", - "ikki", "Ikki (Japan)", - "illvelo", "Illvelo (Illmatic Envelope)", - "ilpag", "Il Pagliaccio (Italy, Ver. 2.7C)", - "imago", "Imago (cocktail set)", - "imagoa", "Imago (no cocktail set)", - "imekura", "Imekura Mahjong (Japan)", - "imgfight", "Image Fight (World, revision A)", - "imgfightj", "Image Fight (Japan)", - "imolagp", "Imola Grand Prix (set 1)", - "imolagpo", "Imola Grand Prix (set 2)", - "imsorry", "I'm Sorry (315-5110, US)", - "imsorryj", "Gonbee no I'm Sorry (315-5110, Japan)", - "inca", "Inca", - "incanp", "Incan Pyramids (Konami Endeavour)", - "ind250cc", "250 CC", - "indianbt", "Indian Battle", - "indianbtbr", "Indian Battle (Brazil)", - "indiandr", "Indian Dreaming (0100845V, Local)", - "indianmm", "Indian Dreaming - Maximillion$ (10130711, NSW/ACT)", - "indy4", "Indy 4 [TTL]", - "indy500", "INDY 500 Twin (Revision A, Newer)", - "indy500d", "INDY 500 Deluxe (Revision A)", - "indy500to", "INDY 500 Twin (Revision A)", - "indy800", "Indy 800 [TTL]", - "indyheat", "Danny Sullivan's Indy Heat", - "indytemp", "Indiana Jones and the Temple of Doom (set 1)", - "indytemp2", "Indiana Jones and the Temple of Doom (set 2)", - "indytemp3", "Indiana Jones and the Temple of Doom (set 3)", - "indytemp4", "Indiana Jones and the Temple of Doom (set 4)", - "indytempc", "Indiana Jones and the Temple of Doom (Cocktail)", - "indytempd", "Indiana Jones and the Temple of Doom (German)", - "inferno", "Inferno (Williams)", - "inidv3cy", "Initial D Arcade Stage Ver. 3 Cycraft Edition (Rev. B) (GDS-0039B)", - "initd", "Initial D Arcade Stage (Rev B) (Japan) (GDS-0020B)", - "initdexp", "Initial D Arcade Stage (Export) (GDS-0025)", - "initdv2e", "Initial D Arcade Stage Ver. 2 (Export) (GDS-0027)", - "initdv2j", "Initial D Arcade Stage Ver. 2 (Japan) (Rev. B) (GDS-0026B)", - "initdv2jo", "Initial D Arcade Stage Ver. 2 (Japan) (GDS-0026)", - "initdv3e", "Initial D Arcade Stage Ver. 3 (Export) (GDS-0033)", - "initdv3j", "Initial D Arcade Stage Ver. 3 (Japan) (Rev. C) (GDS-0032C)", - "initdv3jb", "Initial D Arcade Stage Ver. 3 (Japan) (Rev. B) (GDS-0032B)", - "inquiztr", "Inquizitor", - "insector", "Insector (prototype)", - "insectx", "Insector X (World)", - "insectxj", "Insector X (Japan)", - "intcup94", "International Cup '94 (Ver 2.2O 1994/05/26)", - "inthunt", "In The Hunt (World)", - "inthuntu", "In The Hunt (US)", - "intlaser", "International Team Laser (prototype)", - "intrepid", "Intrepid (set 1)", - "intrepid2", "Intrepid (set 2)", - "intrepidb", "Intrepid (Elsys bootleg, set 1)", - "intrepidb2", "Intrepid (Loris bootleg)", - "intrepidb3", "Intrepid (Elsys bootleg, set 2)", - "introdon", "Karaoke Quiz Intro Don Don! (J 960213 V1.000)", - "intrscti", "Intersecti", - "intruder", "Intruder", - "inttoote", "International Toote (Germany)", - "inttootea", "International Toote II (World?)", - "inufuku", "Quiz & Variety Sukusuku Inufuku (Japan)", - "inunoos", "Inu No Osanpo / Dog Walking (Rev A)", - "invad2ct", "Space Invaders II (Midway, cocktail)", - "invaddlx", "Space Invaders Deluxe", - "invader4", "Space Invaders Part Four", - "invaderl", "Space Invaders (Logitec)", - "invaders", "Space Invaders / Space Invaders M", - "invadpt2", "Space Invaders Part II (Taito)", - "invadpt2br", "Space Invaders Part II (Brazil)", - "invadrmr", "Space Invaders (Model Racing)", - "invasion", "Invasion (Sidam)", - "invasiona", "Invasion (bootleg set 1, normal graphics)", - "invasionb", "Invasion (bootleg set 2, no copyright)", - "invasionrz", "Invasion (bootleg set 3, R Z SRL Bologna)", - "invasionrza", "Invasion (bootleg set 4, R Z SRL Bologna)", - "invasnab", "Invasion - The Abductors (version 5.0)", - "invasnab3", "Invasion - The Abductors (version 3.0)", - "invasnab4", "Invasion - The Abductors (version 4.0)", - "invds", "Invinco / Deep Scan", - "invho2", "Invinco / Head On 2", - "invinco", "Invinco", - "invmulti", "Space Invaders Multigame (M8.03D)", - "invmultim1a", "Space Invaders Multigame (M8.01A)", - "invmultim2a", "Space Invaders Multigame (M8.02A)", - "invmultim2c", "Space Invaders Multigame (M8.02C)", - "invmultim3a", "Space Invaders Multigame (M8.03A)", - "invmultip", "Space Invaders Multigame (prototype)", - "invmultis1a", "Space Invaders Multigame (S0.81A)", - "invmultis2a", "Space Invaders Multigame (S0.82A)", - "invmultis3a", "Space Invaders Multigame (S0.83A)", - "invmultit3d", "Space Invaders Multigame (T8.03D)", - "invqix", "Space Invaders / Qix Silver Anniversary Edition (Ver. 2.03)", - "invrvnge", "Invader's Revenge (set 1)", - "invrvngea", "Invader's Revenge (set 2)", - "invrvngeb", "Invader's Revenge (set 3)", - "invrvngedu", "Invader's Revenge (Dutchford, single PCB)", - "invrvngegw", "Invader's Revenge (Game World, single PCB)", - "inwinner", "Instant Winner (Russia)", - "ipminvad", "IPM Invader", - "ipminvad1", "IPM Invader (Incomplete Dump)", - "ippatsu", "Ippatsu Gyakuten [BET] (Japan)", - "iqblock", "IQ-Block", - "iqblocka", "Shu Zi Le Yuan (V127M)", - "iqblockf", "Shu Zi Le Yuan (V113FR)", - "iqpipe", "IQ Pipe", - "irobot", "I, Robot", - "iron", "Iron (SNES bootleg)", - "ironclad", "Choutetsu Brikin'ger - Iron clad (Prototype)", - "ironclado", "Choutetsu Brikin'ger - Iron clad (Prototype, bootleg)", - "ironfort", "Iron Fortress", - "ironfortj", "Iron Fortress (Japan)", - "ironhors", "Iron Horse", - "ironmaid", "Iron Maiden", - "irrmaze", "The Irritating Maze / Ultra Denryu Iraira Bou", - "isgsm", "ISG Selection Master Type 2006 BIOS", - "island", "Island (050713 World)", - "island2", "Island 2 (060529 World)", - "island2_3", "Island 2 (061218 World)", - "island2_3a", "Island 2 (bootleg, 061218, VIDEO GAME-1 OS2-01)", - "island2_4", "Island 2 (070205 Russia)", - "island2_4a", "Island 2 (bootleg, 070205, banking address hack)", - "island2_5", "Island 2 (090528 Lottery)", - "island2_6", "Island 2 (090724 Entertainment)", - "island2a", "Island 2 (bootleg, 060529, banking address hack)", - "island2b", "Island 2 (bootleg, 060529, banking address hack, changed version text)", - "island2c", "Island 2 (bootleg, 060529, LOTTOGAME (I))", - "island_2", "Island (070409 Russia)", - "islanda", "Island (bootleg, 050713, backdoor)", - "islandb", "Island (bootleg, 050713, VIDEO GAME-1 OS01)", - "islandc", "Island (bootleg, 050713, LOTOS OS01)", - "istellar", "Interstellar Laser Fantasy", - "itaten", "Itazura Tenshi (Japan)", - "itazuram", "Itazura Monkey", - "iteagle", "Eagle BIOS", - "ivorytsk", "Ivory Tusk", - "ixion", "Ixion (prototype)", - "j2008", "unknown '008' (Unk) (MPS)", - "j2adnote", "Add A Note (JPM) (MPS, set 1)", - "j2adnotea", "Add A Note (JPM) (MPS, set 2)", - "j2adnoteb", "Add A Note (JPM) (MPS, set 3)", - "j2adnotec", "Add A Note (JPM) (MPS, set 4)", - "j2adnoted", "Add A Note (JPM) (MPS, set 5)", - "j2adnotee", "Add A Note (JPM) (MPS, set 6)", - "j2adnotef", "Add A Note (JPM) (MPS, set 7)", - "j2adnoteg", "Add A Note (JPM) (MPS, set 8)", - "j2adnoteh", "Add A Note (JPM) (MPS, set 9)", - "j2adnotei", "Add A Note (JPM) (MPS, set 10)", - "j2always", "Always Eight (Bwb) (MPS)", - "j2b7", "Bar 7? (JPM) (MPS)", - "j2bankch", "Bank Chase (JPM) (MPS)", - "j2bankrd", "Bank Raid (JPM) (MPS)", - "j2bigbnk", "Big Banker (JPM) (MPS)", - "j2bigbox", "Big Box (JPM) (MPS)", - "j2bigbuk", "Big Buck$ (JPM) (MPS)", - "j2bigdl", "Big Deal (JPM) (MPS)", - "j2bkroll", "Bank Roll (JPM) (MPS)", - "j2blkchy", "Black Cherry (JPM) (MPS)", - "j2blustr", "Blue Streak (Pcp) (MPS)", - "j2bodym", "Body Match (JPM) (MPS)", - "j2bonanz", "Bonanza (Eurocoin) (MPS)", - "j2cashab", "Cashablanca (JPM) (MPS)", - "j2cashbn", "Cash Bonus Club (JPM) (MPS)", - "j2cashfl", "Cash Falls (JPM) (MPS)", - "j2cashrl", "Cash Reels (JPM) (MPS)", - "j2cashro", "Cash Rolls (JPM) (MPS)", - "j2cashrv", "Cash Reserve (JPM) (MPS)", - "j2cashry", "Cashino Royale (Pcp) (MPS)", - "j2cashtd", "Cash Track Deluxe (JPM) (MPS)", - "j2cashtk", "Cash Track (JPM) (MPS)", - "j2casino", "Casino Classic (Pcp) (MPS)", - "j2chsn", "unknown 'chsnsn05' (Unk) (MPS)", - "j2clbbin", "Club Bingo (Crystal) (MPS)", - "j2club77", "Club 77 (Unk) (MPS)", - "j2coinct", "Coin Count (JPM) (MPS)", - "j2coinsh", "Coin Shoot (Bwb) (MPS)", - "j2contnd", "Continuous Nudger (Mdm) (MPS)", - "j2coppot", "Copper Pot (JPM) (MPS)", - "j2coprun", "Copper Run (JPM) (MPS)", - "j2cprndx", "Copper Run Deluxe (JPM) (MPS)", - "j2criscr", "Criss Cross Jackpot (Pcp) (MPS)", - "j2crkbnk", "Crack The Bank (JPM) (MPS)", - "j2crown", "Crown Dealer (Unk) (MPS)", - "j2cshalm", "Cash Alarm (Pcp) (MPS)", - "j2cshcrd", "Cash Cards (Pcp) (MPS)", - "j2cshfil", "Cash-Filla (Pcp) (MPS)", - "j2cshnud", "Cash Nudger (Mdm) (MPS)", - "j2cshsmh", "Cash Smash (Pcp) (MPS)", - "j2cvault", "Cash Vault (JPM) (MPS)", - "j2dropld", "Drop The Lot Deluxe (JPM) (MPS)", - "j2droplt", "Drop The Lot (JPM) (MPS)", - "j2ewn", "Each Way Nudger (JPM) (MPS)", - "j2ews", "Each Way Shuffle (JPM) (MPS)", - "j2exec", "Executive Club (JPM) (MPS)", - "j2fasttk", "Fast Trak (JPM) (MPS)", - "j2fiveal", "Five Alive (JPM) (MPS)", - "j2fiveln", "Five Liner (JPM) (MPS)", - "j2fivepn", "Fivepenny Nudger (Mdm) (MPS)", - "j2fqueen", "Find The Queen (JPM) (MPS)", - "j2frmtch", "Fruit Match (JPM) (MPS)", - "j2frucnx", "Fruit Connexion (Pcp) (MPS)", - "j2fullhs", "Full House Club (JPM) (MPS)", - "j2fws", "Five Way Shuffle (Set 1) (JPM) (MPS)", - "j2fwsa", "Five Way Shuffle (Set 2) (JPM) (MPS)", - "j2ghostb", "Ghostbuster (JPM) (MPS)", - "j2gldchy", "Golden Cherry (JPM) (MPS)", - "j2gldwin", "Golden Win (JPM) (MPS)", - "j2goldbr", "Golden Bars (JPM) (MPS)", - "j2goldrn", "Gold Run (JPM) (MPS)", - "j2hcash", "Hot Cash (Unk) (MPS)", - "j2hilocl", "Hi Lo Climber Club (Crystal) (MPS)", - "j2hinote", "Hi Note (JPM) (MPS)", - "j2hirola", "Hi Roll (Unk) (MPS)", - "j2hiroll", "Hi Roller (JPM) (MPS)", - "j2hitmon", "Hit Money (Pcp) (MPS)", - "j2hotpot", "Hot Pot (JPM) (MPS)", - "j2hotptd", "Hot Pot Deluxe (JPM) (MPS)", - "j2hotsht", "Hot Shot Club (JPM) (MPS)", - "j2hypnot", "Hypernote (JPM) (MPS)", - "j2jackbr", "Jackpot Bars (JPM) (MPS)", - "j2jackdc", "Jackpot Dice (JPM) (MPS)", - "j2jokers", "Jokers (JPM) (MPS)", - "j2kingcl", "King Of Clubs (JPM) (MPS)", - "j2lhs", "unknown 'lhs' (Unk) (MPS)", - "j2litean", "Lite A Nudge (JPM) (MPS)", - "j2litnot", "Lite A Note Club (Crystal) (MPS)", - "j2loots", "Loot Shoot (Pcp) (MPS)", - "j2lovshd", "Loot Shoot Deluxe (JPM) (MPS)", - "j2lovsht", "Loot Shoot (JPM) (MPS)", - "j2luckar", "Lucky Arrows (JPM) (MPS)", - "j2lucky2", "Lucky 2s (JPM) (MPS)", - "j2match", "Match It (JPM) (MPS)", - "j2maxima", "Maxima (Pcp) (MPS)", - "j2missis", "Mississippi Gambler Club (Crystal) (MPS)", - "j2monblt", "Money Belt (JPM) (MPS)", - "j2monbnd", "Money Bands (JPM) (MPS)", - "j2mongam", "Money Game (JPM) (MPS)", - "j2mongmd", "Money Game Deluxe (JPM) (MPS)", - "j2monmin", "Money Mine (Unk) (MPS)", - "j2monmtx", "Money Matrix (Bwb) (MPS)", - "j2montrp", "Money Trapper (Pcp) (MPS)", - "j2multwn", "Multi Win (JPM) (MPS)", - "j2nbz", "Nudge Bonanza (JPM) (MPS)", - "j2ncsp", "unknown 'ncsp0pp' (Bwb) (MPS)", - "j2nn2", "unknown 'nn_2' (Unk) (MPS)", - "j2nolimt", "No Limit Nudge (Mdm) (MPS)", - "j2notesh", "Note Shoot (JPM) (MPS)", - "j2notexc", "Note Exchange (Set 1) (JPM) (MPS)", - "j2notexca", "Note Exchange (Set 2) (JPM) (MPS)", - "j2notexcb", "Note Exchange (Set 3) (JPM) (MPS)", - "j2notspn", "Note Spinner (Unk) (MPS)", - "j2nrrp", "unknown 'nprpopp' (Bwb) (MPS)", - "j2nsc15", "unknown 'nsc15' (Pcp) (MPS)", - "j2nsw12", "unknown 'nsw12' (Pcp) (MPS)", - "j2nud5p", "5p Nudger (JPM) (MPS)", - "j2nudbnz", "Nudge Bonanza Deluxe (Set 1) (JPM) (MPS)", - "j2nudbnza", "Nudge Bonanza Deluxe (Set 2) (JPM) (MPS)", - "j2nuddud", "Nudge Double Up Deluxe (JPM) (MPS)", - "j2nuddup", "Nudge Double Up (JPM) (MPS)", - "j2nudfev", "Nudge Fever (Bwb) (MPS)", - "j2nudmon", "Nudge Money (Pcp) (MPS)", - "j2nudnud", "Nudge Nudge (JPM) (MPS)", - "j2nudshf", "Nudge Shuffler (JPM) (MPS)", - "j2nudup3", "Nudge Double Up MkIII (JPM) (MPS)", - "j2paypkt", "Pay Packet (Pcp) (MPS)", - "j2penny", "In For A Penny In For A Pound (Pcp) (MPS)", - "j2pharo", "Pharoah (Unk) (MPS)", - "j2pinac", "Pinnacle (JPM) (MPS)", - "j2pinclb", "Pinnacle Club (JPM) (MPS)", - "j2plsmnd", "Plus Money Deluxe (JPM) (MPS)", - "j2plsmon", "Plus Money (JPM) (MPS)", - "j2plsnud", "Plus Nudge (JPM) (MPS)", - "j2pndrsh", "Pound Rush (JPM) (MPS)", - "j2potlck", "Pot Luck (JPM) (MPS)", - "j2pyramd", "Pyramid (JPM) (MPS)", - "j2rdclb", "Royal Deal Club (JPM) (MPS)", - "j2reelbn", "Reel Bingo Club (Set 1) (JPM) (MPS)", - "j2reelbna", "Reel Bingo Club (Set 2) (JPM) (MPS)", - "j2reelbo", "Reel Bonus (JPM) (MPS)", - "j2reelcz", "Reel Crazy (JPM) (MPS)", - "j2reeldc", "Reel Deal Club (JPM) (MPS)", - "j2reelmc", "Reel Magic Club (JPM) (MPS)", - "j2reelmg", "Reel Magic (JPM) (MPS)", - "j2reelmgd", "Reel Magic (JPM) [Dutch] (MPS)", - "j2reelmo", "Reel Money (JPM) (MPS)", - "j2rm941", "unknown 'rm941' (Unk) (MPS)", - "j2rotnot", "Rota Note (JPM) (MPS)", - "j2roulcl", "Roulette Club (JPM) [Mps] (MPS)", - "j2sex", "Super Exchanger (Unk) (MPS)", - "j2silvcl", "Silver Classic (Pcp) (MPS)", - "j2silvsh", "Silver Shot (Pcp) (MPS)", - "j2sirich", "Strike It Rich (JPM) (MPS) (set 1)", - "j2siricha", "Strike It Rich (JPM) (MPS) (set 2)", - "j2sldgld", "Solid Gold (JPM) (MPS)", - "j2slvrgh", "Silver Ghost (JPM) (MPS)", - "j2sng", "Super Nudge Gambler (Cotswold Microsystems) (MPS)", - "j2spcrsv", "Special Reserve (JPM) (MPS)", - "j2ss", "Supa Stepper (JPM) (MPS)", - "j2sset", "Sunset Strip (v2.0) (Unk) (MPS?)", - "j2sstrea", "Supa Streak (Pcp) (MPS)", - "j2stahed", "Streets Ahead (JPM) (MPS)", - "j2strk10", "Strike Ten (Ace) (MPS)", - "j2supchy", "Super Cherry (Eurocoin) (MPS)", - "j2super7", "Super 7's (Unk) (MPS)", - "j2supfrc", "Supa Fruit Club (JPM) (MPS)", - "j2supfrt", "Supa Fruit (JPM) (MPS)", - "j2supln", "Super Line (JPM) (MPS)", - "j2suppot", "Super Pots (JPM) (MPS)", - "j2suprft", "Super Fruit (JPM) (MPS)", - "j2suprl", "Super Reel (JPM) (MPS)", - "j2suprsh", "Supershot (JPM) (MPS)", - "j2supsft", "Supashifta (JPM) (MPS)", - "j2supstp", "Supa Steppa (JPM) (MPS)", - "j2supstr", "Superstars (JPM) (MPS)", - "j2suptrk", "Supa Track (JPM) (MPS)", - "j2swbank", "Switch Back (JPM) (MPS)", - "j2take2", "Take 2 (JPM) (MPS)", - "j2topcd", "Top Card (Bwb) (MPS)", - "j2topsht", "Top Shot (JPM) (MPS)", - "j2trail", "Trailblazer (Bwb) (MPS)", - "j2tst", "MPS 1 Test Rom (JPM) (MPS)", - "j2tstplt", "Test Pilot (Set 1) (Pcp) (MPS)", - "j2tstplta", "Test Pilot (Set 2) (Pcp) (MPS)", - "j2tupnd", "Tuppenny Nudger (Mdm) (MPS)", - "j2tupnud", "Tuppenny Nudger (JPM) (MPS)", - "j2wag", "Win-A-Gain (Bwb) (MPS)", - "j2westrn", "Western (JPM) (MPS)", - "j2wrb", "Wild Reel Bingo (JPM) (MPS)", - "j2xxx", "Triple X (Bwb) (MPS)", - "j5ar80", "Around The World In Eighty Days (JPM) (SYSTEM5, set 1)", - "j5ar80a", "Around The World In Eighty Days (JPM) (SYSTEM5, set 2)", - "j5ar80b", "Around The World In Eighty Days (JPM) (SYSTEM5, set 3)", - "j5ar80c", "Around The World In Eighty Days (JPM) (SYSTEM5, set 4)", - "j5ar80cl", "Around The World Club (JPM) (SYSTEM5, set 1)", - "j5ar80cla", "Around The World Club (JPM) (SYSTEM5, set 2)", - "j5ar80clb", "Around The World Club (JPM) (SYSTEM5, set 3)", - "j5ar80clc", "Around The World Club (JPM) (SYSTEM5, set 4)", - "j5ar80d", "Around The World In Eighty Days (JPM) (SYSTEM5, set 5)", - "j5buc", "Buccaneer (JPM) (SYSTEM5)", - "j5cir", "Circus (JPM) (SYSTEM5, set 1)", - "j5cira", "Circus (JPM) (SYSTEM5, set 2)", - "j5cirb", "Circus (JPM) (SYSTEM5, set 3)", - "j5circ", "Circus (JPM) (SYSTEM5, set 4)", - "j5cird", "Circus (JPM) (SYSTEM5, set 5)", - "j5cire", "Circus (JPM) (SYSTEM5, set 6)", - "j5clbnud", "Club Nudger (JPM) (SYSTEM5-SAA, set 1)", - "j5clbnuda", "Club Nudger (JPM) (SYSTEM5-SAA, set 2)", - "j5daycls", "Daytona Classic (JPM) (SYSTEM5, set 1)", - "j5dayclsa", "Daytona Classic (JPM) (SYSTEM5, set 2)", - "j5daytn", "Daytona (JPM) (SYSTEM5, set 1)", - "j5daytna", "Daytona (JPM) (SYSTEM5, set 2)", - "j5dirty", "Dirty Dozen (JPM) (SYSTEM5, set 1)", - "j5dirtya", "Dirty Dozen (JPM) (SYSTEM5, set 2)", - "j5dirtyb", "Dirty Dozen (JPM) (SYSTEM5, set 3)", - "j5dirtyc", "Dirty Dozen (JPM) (SYSTEM5, set 4)", - "j5fair", "Fairground (JPM) (SYSTEM5, set 1)", - "j5faira", "Fairground (JPM) (SYSTEM5, set 2)", - "j5fairb", "Fairground (JPM) (SYSTEM5, set 3)", - "j5fairc", "Fairground (JPM) (SYSTEM5, set 4)", - "j5faird", "Fairground (JPM) (SYSTEM5, set 5)", - "j5faire", "Fairground (JPM) (SYSTEM5, set 6)", - "j5fairf", "Fairground (JPM) (SYSTEM5, set 7)", - "j5fairg", "Fairground (JPM) (SYSTEM5, set 8)", - "j5fairgd", "Fairground Attraction Club (JPM) (SYSTEM5, set 1)", - "j5fairgda", "Fairground Attraction Club (JPM) (SYSTEM5, set 2)", - "j5fairgdb", "Fairground Attraction Club (JPM) (SYSTEM5, set 3)", - "j5fairgdc", "Fairground Attraction Club (JPM) (SYSTEM5, set 4)", - "j5fairgdd", "Fairground Attraction Club (JPM) (SYSTEM5, set 5)", - "j5fairgde", "Fairground Attraction Club (JPM) (SYSTEM5, set 6)", - "j5fairh", "Fairground (JPM) (SYSTEM5, set 9)", - "j5fairi", "Fairground (JPM) (SYSTEM5, set 10)", - "j5fairj", "Fairground (JPM) (SYSTEM5, set 11)", - "j5fairk", "Fairground (JPM) (SYSTEM5, set 12)", - "j5fairl", "Fairground (JPM) (SYSTEM5, set 13)", - "j5fairm", "Fairground (JPM) (SYSTEM5, set 14)", - "j5fairn", "Fairground (JPM) (SYSTEM5, set 15)", - "j5fairo", "Fairground (JPM) (SYSTEM5, set 16)", - "j5fairp", "Fairground (JPM) (SYSTEM5, set 17)", - "j5fairq", "Fairground (JPM) (SYSTEM5, set 18)", - "j5fifth", "5th Avenue (JPM) (SYSTEM5-SAA)", - "j5filth", "Filthy Rich (JPM) (SYSTEM5, set 1)", - "j5filtha", "Filthy Rich (JPM) (SYSTEM5, set 2)", - "j5filthb", "Filthy Rich (JPM) (SYSTEM5, set 3)", - "j5filthc", "Filthy Rich (JPM) (SYSTEM5, set 4)", - "j5filthd", "Filthy Rich (JPM) (SYSTEM5, set 5)", - "j5filthe", "Filthy Rich (JPM) (SYSTEM5, set 6)", - "j5filthf", "Filthy Rich (JPM) (SYSTEM5, set 7)", - "j5filthg", "Filthy Rich (JPM) (SYSTEM5, set 8)", - "j5filthh", "Filthy Rich (JPM) (SYSTEM5, set 9)", - "j5filthi", "Filthy Rich (JPM) (SYSTEM5, set 10)", - "j5filthj", "Filthy Rich (JPM) (SYSTEM5, set 11)", - "j5firebl", "Fireball (JPM) (SYSTEM5-SAA, set 1)", - "j5firebla", "Fireball (JPM) (SYSTEM5-SAA, set 2)", - "j5fireblb", "Fireball (JPM) (SYSTEM5-SAA, set 3)", - "j5frmag", "Fruit Magic (JPM) (SYSTEM5-SAA)", - "j5goldbr", "Golden Bars (JPM) (SYSTEM5-SAA)", - "j5hagar", "Hagar (JPM) (SYSTEM5, set 1)", - "j5hagara", "Hagar (JPM) (SYSTEM5, set 2)", - "j5hagarb", "Hagar (JPM) (SYSTEM5, set 3)", - "j5hagarc", "Hagar (JPM) (SYSTEM5, set 4)", - "j5hagard", "Hagar (JPM) (SYSTEM5, set 5)", - "j5hagare", "Hagar (JPM) (SYSTEM5, set 6)", - "j5hagarf", "Hagar (JPM) (SYSTEM5, set 7)", - "j5hagarg", "Hagar (JPM) (SYSTEM5, set 8)", - "j5hagarh", "Hagar (JPM) (SYSTEM5, set 9)", - "j5hagari", "Hagar (JPM) (SYSTEM5, set 10)", - "j5hagarj", "Hagar (JPM) (SYSTEM5, set 11)", - "j5hagsho", "Hagar Showcase (JPM) (SYSTEM5, set 1)", - "j5hagshoa", "Hagar Showcase (JPM) (SYSTEM5, set 2)", - "j5hagshob", "Hagar Showcase (JPM) (SYSTEM5, set 3)", - "j5hagshoc", "Hagar Showcase (JPM) (SYSTEM5, set 4)", - "j5hilos", "Hi Lo Silver (JPM) (SYSTEM5)", - "j5holly", "Hollywood Nights (JPM) (SYSTEM5, set 1)", - "j5hollya", "Hollywood Nights (JPM) (SYSTEM5, set 2)", - "j5hollyb", "Hollywood Nights (JPM) (SYSTEM5, set 3)", - "j5hollyc", "Hollywood Nights (JPM) (SYSTEM5, set 4)", - "j5hollyd", "Hollywood Nights (JPM) (SYSTEM5, set 5)", - "j5hollye", "Hollywood Nights (JPM) (SYSTEM5, set 6)", - "j5hotdog", "Hot Dogs (JPM) (SYSTEM5, set 1)", - "j5hotdoga", "Hot Dogs (JPM) (SYSTEM5, set 2)", - "j5indsum", "Indian Summer (JPM) (SYSTEM5)", - "j5intr", "Intrigue (JPM) (SYSTEM5, set 1)", - "j5intra", "Intrigue (JPM) (SYSTEM5, set 2)", - "j5intrb", "Intrigue (JPM) (SYSTEM5, set 3)", - "j5intrc", "Intrigue (JPM) (SYSTEM5, set 4)", - "j5jokgld", "Jokers Gold (JPM) (SYSTEM5, set 1)", - "j5jokglda", "Jokers Gold (JPM) (SYSTEM5, set 2)", - "j5jokgldb", "Jokers Gold (JPM) (SYSTEM5, set 3)", - "j5jokgldc", "Jokers Gold (JPM) (SYSTEM5, set 4)", - "j5jokgldd", "Jokers Gold (JPM) (SYSTEM5, set 5)", - "j5jokglde", "Jokers Gold (JPM) (SYSTEM5, set 6)", - "j5jokgldf", "Jokers Gold (JPM) (SYSTEM5, set 7)", - "j5jokgldg", "Jokers Gold (JPM) (SYSTEM5, set 8)", - "j5jokgldh", "Jokers Gold (JPM) (SYSTEM5, set 9)", - "j5movie", "Movie Magic Club (Crystal) (SYSTEM5)", - "j5nite", "Nite Club (JPM) (SYSTEM5, set 1)", - "j5nitea", "Nite Club (JPM) (SYSTEM5, set 2)", - "j5nudfic", "Nudge Fiction (JPM) (SYSTEM5)", - "j5palm", "Palm Springs (JPM) (SYSTEM5, set 1)", - "j5palma", "Palm Springs (JPM) (SYSTEM5, set 2)", - "j5phnx", "Phoenix (JPM) (SYSTEM5, set 1)", - "j5phnxa", "Phoenix (JPM) (SYSTEM5, set 2)", - "j5popeye", "Popeye (JPM) (SYSTEM5, set 1)", - "j5popeyea", "Popeye (JPM) (SYSTEM5, set 2)", - "j5popeyeb", "Popeye (JPM) (SYSTEM5, set 3)", - "j5popeyec", "Popeye (JPM) (SYSTEM5, set 4)", - "j5popeyed", "Popeye (JPM) (SYSTEM5, set 5)", - "j5popeyee", "Popeye (JPM) (SYSTEM5, set 6)", - "j5popeyef", "Popeye (JPM) (SYSTEM5, set 7)", - "j5popeyeg", "Popeye (JPM) (SYSTEM5, set 8)", - "j5popeyeh", "Popeye (JPM) (SYSTEM5, set 9)", - "j5popeyei", "Popeye (JPM) (SYSTEM5, set 10)", - "j5popprz", "Prize Popeye Vending (JPM) (SYSTEM5, set 1)", - "j5popprza", "Prize Popeye Vending (JPM) (SYSTEM5, set 2)", - "j5popth", "Popeye's Treasure Hunt (JPM) (SYSTEM5, set 1)", - "j5poptha", "Popeye's Treasure Hunt (JPM) (SYSTEM5, set 2)", - "j5popthb", "Popeye's Treasure Hunt (JPM) (SYSTEM5, set 3)", - "j5reelgh", "Reel Ghost (JPM) (SYSTEM5-SAA)", - "j5revo", "Revolver (JPM) (SYSTEM5, set 1)", - "j5revoa", "Revolver (JPM) (SYSTEM5, set 2)", - "j5roul", "Roulette (JPM) (SYSTEM5)", - "j5roulcl", "Roulette Club (JPM) (SYSTEM5, set 1)", - "j5roulcla", "Roulette Club (JPM) (SYSTEM5, set 2)", - "j5roulclb", "Roulette Club (JPM) (SYSTEM5, set 3)", - "j5roulclc", "Roulette Club (JPM) (SYSTEM5, set 4)", - "j5sizl", "Sizzling (JPM) (SYSTEM5)", - "j5slvree", "Silver Reels (JPM) (SYSTEM5, set 1)", - "j5slvreea", "Silver Reels (JPM) (SYSTEM5, set 2)", - "j5slvstr", "Silver Streak (JPM) (SYSTEM5, set 1)", - "j5slvstra", "Silver Streak (JPM) (SYSTEM5, set 2)", - "j5slvstrb", "Silver Streak (JPM) (SYSTEM5, set 3)", - "j5street", "Streetwise (JPM) (SYSTEM5)", - "j5sup4", "Super 4 (JPM) (SYSTEM5-SAA)", - "j5supbar", "Super Bars (JPM) (SYSTEM5, set 1)", - "j5supbara", "Super Bars (JPM) (SYSTEM5, set 2)", - "j5suphi", "Super Hi-Lo (JPM) (SYSTEM5-SAA)", - "j5swop", "Swop A Fruit Club (JPM) (SYSTEM5-SAA)", - "j5td", "Tumbling Dice (JPM) (SYSTEM5-SAA)", - "j5term", "Terminator (JPM) (SYSTEM5)", - "j5topshp", "Top Of The Shop Club (JPM) (SYSTEM5)", - "j5trail", "Trailblazer Club (JPM) (SYSTEM5, set 1)", - "j5traila", "Trailblazer Club (JPM) (SYSTEM5, set 2)", - "j5trailb", "Trailblazer Club (JPM) (SYSTEM5, set 3)", - "j5tst1", "JPM System 5 Test Set (JPM) (SYSTEM5, set 1)", - "j5tst2", "JPM System 5 Test Set (JPM) (SYSTEM5, set 2)", - "j5tstal", "JPM System 5 Alpha Display Test Utility (JPM) (SYSTEM5)", - "j5uj", "Union Jackpot (JPM) (SYSTEM5, set 1)", - "j5uja", "Union Jackpot (JPM) (SYSTEM5, set 2)", - "j5ujb", "Union Jackpot (JPM) (SYSTEM5, set 3)", - "j5wsc", "Wall Street Club (JPM) (SYSTEM5, set 1)", - "j5wsca", "Wall Street Club (JPM) (SYSTEM5, set 2)", - "j6aceclb", "Ace Of Clubs (Crystal) (IMPACT, set 1)", - "j6aceclba", "Ace Of Clubs (Crystal) (IMPACT, set 2)", - "j6acehi", "Aces High (Ace) (IMPACT)", - "j6amdrm", "American Dream (Mdm) (IMPACT)", - "j6arcade", "Arcadia (JPM) (IMPACT) (V9, set 1)", - "j6arcadea", "Arcadia (JPM) (IMPACT) (V9, set 2)", - "j6arcadeb", "Arcadia (JPM) (IMPACT) (V9, set 3)", - "j6arcadec", "Arcadia (JPM) (IMPACT) (V9, set 4)", - "j6arcaded", "Arcadia (JPM) (IMPACT) (V9, set 5)", - "j6arcadee", "Arcadia (JPM) (IMPACT) (V10, set 1)", - "j6arcadef", "Arcadia (JPM) (IMPACT) (V10, set 2)", - "j6arcadeg", "Arcadia (JPM) (IMPACT) (V10, set 3)", - "j6arcadeh", "Arcadia (JPM) (IMPACT) (V10, set 4)", - "j6arcadei", "Arcadia (JPM) (IMPACT) (V10, set 5)", - "j6arcadej", "Arcadia (JPM) (IMPACT) (V10, set 6)", - "j6arcadek", "Arcadia (JPM) (IMPACT) (V10, set 7)", - "j6bags", "Three Bags Full (JPM) (IMPACT)", - "j6bbankr", "Big Banker (Crystal) (IMPACT) (BB 2 T 2)", - "j6big50", "Big 50 (JPM) (IMPACT) (set 1)", - "j6big50a", "Big 50 (JPM) (IMPACT) (set 2)", - "j6big50b", "Big 50 (JPM) (IMPACT) (set 3)", - "j6big50c", "Big 50 (JPM) (IMPACT) (set 4)", - "j6big50d", "Big 50 (JPM) (IMPACT) (set 5)", - "j6bigbnk", "Big Banker (JPM) (IMPACT) (BB10C 20) (set 1)", - "j6bigbnka", "Big Banker (JPM) (IMPACT) (BB10C 20) (set 2)", - "j6bigbnkb", "Big Banker (JPM) (IMPACT) (BB10C 20) (set 3)", - "j6bigbnkc", "Big Banker (JPM) (IMPACT) (BB10C 20) (set 4)", - "j6bigbnkd", "Big Banker (JPM) (IMPACT) (BB8 H18)", - "j6bigbnke", "Big Banker (JPM) (IMPACT) (BB8 P H18)", - "j6bigbnkf", "Big Banker (JPM) (IMPACT) (BB8 AH18)", - "j6bigbnkg", "Big Banker (JPM) (IMPACT) (BB6 C 16) (set 1)", - "j6bigbnkh", "Big Banker (JPM) (IMPACT) (BB6 C 16) (set 2)", - "j6bigbnki", "Big Banker (JPM) (IMPACT) (BB2B H11)", - "j6bigbnkj", "Big Banker (JPM) (IMPACT) (BB2BP H11)", - "j6bigbnkk", "Big Banker (JPM) (IMPACT) (BB2B AH11)", - "j6bigbnkl", "Big Banker (JPM) (IMPACT) (BB2BI H11)", - "j6bigbnkm", "Big Banker (JPM) (IMPACT) (BB2II H08)", - "j6bigbnkn", "Big Banker (JPM) (IMPACT) (BB 9C 19)", - "j6bigbnko", "Big Banker (JPM) (IMPACT) (BB5 I H15)", - "j6bigbnkp", "Big Banker (JPM) (IMPACT) (BB4 I H09)", - "j6bigbuk", "Big Bucks (JPM) (IMPACT) (set 1)", - "j6bigbuka", "Big Bucks (JPM) (IMPACT) (set 2)", - "j6bigbukb", "Big Bucks (JPM) (IMPACT) (set 3)", - "j6bigbukc", "Big Bucks (JPM) (IMPACT) (set 4)", - "j6bigbukd", "Big Bucks (JPM) (IMPACT) (set 5)", - "j6bigbuke", "Big Bucks (JPM) (IMPACT) (set 6)", - "j6bigbukf", "Big Bucks (JPM) (IMPACT) (set 7)", - "j6bigbukg", "Big Bucks (JPM) (IMPACT) (set 8)", - "j6bigbukh", "Big Bucks (JPM) (IMPACT) (set 9)", - "j6bigbuki", "Big Bucks (JPM) (IMPACT) (set 10)", - "j6bigbukj", "Big Bucks (JPM) (IMPACT) (set 11)", - "j6bigcsh", "Big Cash Machine (Empire) (IMPACT)", - "j6bigpct", "Big Picture (Ace) (IMPACT) (set 1)", - "j6bigpcta", "Big Picture (Ace) (IMPACT) (set 2)", - "j6bigpctb", "Big Picture (Ace) (IMPACT) (set 3)", - "j6bigtop", "Big Top Club (JPM) (IMPACT) (set 1)", - "j6bigtopa", "Big Top Club (JPM) (IMPACT) (set 2)", - "j6bigtopb", "Big Top Club (JPM) (IMPACT) (set 3)", - "j6bigtopc", "Big Top Club (JPM) (IMPACT) (set 4)", - "j6bigwhl", "Big Wheel (JPM) (IMPACT) (set 1)", - "j6bigwhla", "Big Wheel (JPM) (IMPACT) (set 2)", - "j6bigwhlb", "Big Wheel (JPM) (IMPACT) (set 3)", - "j6bigwhlc", "Big Wheel (JPM) (IMPACT) (set 4)", - "j6bigwhld", "Big Wheel (JPM) (IMPACT) (set 5)", - "j6bigwhle", "Big Wheel (JPM) (IMPACT) (set 6)", - "j6bmc", "Big Money Club (Crystal) (IMPACT) (set 1)", - "j6bmca", "Big Money Club (Crystal) (IMPACT) (set 2)", - "j6bnkrcl", "Banker Club (JPM) (IMPACT) (V6, set 1)", - "j6bnkrcla", "Banker Club (JPM) (IMPACT) (V6, set 2)", - "j6bnkrclb", "Banker Club (JPM) (IMPACT) (V6, set 3)", - "j6bnkrclc", "Banker Club (JPM) (IMPACT) (V2)", - "j6bno", "Big Nite Out (Crystal) (IMPACT) (set 1)", - "j6bnoa", "Big Nite Out (Crystal) (IMPACT) (set 2)", - "j6bnob", "Big Nite Out (Crystal) (IMPACT) (set 3)", - "j6bnoc", "Big Nite Out (Crystal) (IMPACT) (set 4)", - "j6bnza", "Bonanza (JPM) (IMPACT) (BO1 H06)", - "j6bnzaa", "Bonanza (JPM) (IMPACT) (BO1 P H06)", - "j6bnzab", "Bonanza (JPM) (IMPACT) (BO1 AH06)", - "j6bnzac", "Bonanza (JPM) (IMPACT) (BO1 I H06)", - "j6bnzad", "Bonanza (JPM) (IMPACT) (BO 9 14)", - "j6bnzae", "Bonanza (JPM) (IMPACT) (BO 9P 14)", - "j6bnzaf", "Bonanza (JPM) (IMPACT) (BO 9 A 14)", - "j6bnzag", "Bonanza (JPM) (IMPACT) (BO 9I 14)", - "j6bnzah", "Bonanza (JPM) (IMPACT) (BO5 H10)", - "j6bnzai", "Bonanza (JPM) (IMPACT) (BO5 I H10)", - "j6bnzaj", "Bonanza (JPM) (IMPACT) (incomplete pair)", - "j6bnzak", "Bonanza (JPM) (IMPACT) (BO06 11)", - "j6brkout", "Breakout (JPM) (IMPACT) (set 1)", - "j6brkouta", "Breakout (JPM) (IMPACT) (set 2)", - "j6btbw", "Born To Be Wild Club (Crystal) (IMPACT) (set 1)", - "j6btbwa", "Born To Be Wild Club (Crystal) (IMPACT) (set 2)", - "j6btbwb", "Born To Be Wild Club (Crystal) (IMPACT) (set 3)", - "j6btbwc", "Born To Be Wild Club (Crystal) (IMPACT) (set 4)", - "j6btbwd", "Born To Be Wild Club (Crystal) (IMPACT) (set 5)", - "j6bucks", "Bucks Fizz (Ace) (IMPACT)", - "j6camelt", "Camelot (JPM) (IMPACT) (set 1)", - "j6camelta", "Camelot (JPM) (IMPACT) (set 2)", - "j6cameltb", "Camelot (JPM) (IMPACT) (set 3)", - "j6cameltc", "Camelot (JPM) (IMPACT) (set 4)", - "j6cameltd", "Camelot (JPM) (IMPACT) (set 5)", - "j6cas5", "Casino 5ive Liner (JPM) (IMPACT) (set 1)", - "j6cas5a", "Casino 5ive Liner (JPM) (IMPACT) (set 2)", - "j6cas5b", "Casino 5ive Liner (JPM) (IMPACT) (set 3)", - "j6cas5c", "Casino 5ive Liner (JPM) (IMPACT) (set 4)", - "j6cas5d", "Casino 5ive Liner (JPM) (IMPACT) (set 5)", - "j6cas5e", "Casino 5ive Liner (JPM) (IMPACT) (set 6)", - "j6cas5f", "Casino 5ive Liner (JPM) (IMPACT) (set 7)", - "j6cas5g", "Casino 5ive Liner (JPM) (IMPACT) (set 8)", - "j6cas5h", "Casino 5ive Liner (JPM) (IMPACT) (set 9)", - "j6cas5i", "Casino 5ive Liner (JPM) (IMPACT) (set 10)", - "j6cas5j", "Casino 5ive Liner (JPM) (IMPACT) (set 11)", - "j6cas5k", "Casino 5ive Liner (JPM) (IMPACT) (set 12)", - "j6cas5l", "Casino 5ive Liner (JPM) (IMPACT) (set 13)", - "j6cascla", "Casino Crazy Classic Club (JPM) (IMPACT) (set 1)", - "j6casclaa", "Casino Crazy Classic Club (JPM) (IMPACT) (set 2)", - "j6casclab", "Casino Crazy Classic Club (JPM) (IMPACT) (set 3)", - "j6casclac", "Casino Crazy Classic Club (JPM) (IMPACT) (set 4)", - "j6casclad", "Casino Crazy Classic Club (JPM) (IMPACT) (set 5)", - "j6casclae", "Casino Crazy Classic Club (JPM) (IMPACT) (set 6)", - "j6casclaf", "Casino Crazy Classic Club (JPM) (IMPACT) (set 7)", - "j6casclag", "Casino Crazy Classic Club (JPM) (IMPACT) (set 8)", - "j6casclah", "Casino Crazy Classic Club (JPM) (IMPACT) (set 9)", - "j6casclai", "Casino Crazy Classic Club (JPM) (IMPACT) (set 10)", - "j6casclaj", "Casino Crazy Classic Club (JPM) (IMPACT) (set 11)", - "j6casclak", "Casino Crazy Classic Club (JPM) (IMPACT) (set 12)", - "j6casclal", "Casino Crazy Classic Club (JPM) (IMPACT) (set 13)", - "j6casclam", "Casino Crazy Classic Club (JPM) (IMPACT) (set 14)", - "j6casclan", "Casino Crazy Classic Club (JPM) (IMPACT) (set 15)", - "j6casclao", "Casino Crazy Classic Club (JPM) (IMPACT) (set 16)", - "j6casclap", "Casino Crazy Classic Club (JPM) (IMPACT) (set 17)", - "j6casclaq", "Casino Crazy Classic Club (JPM) (IMPACT) (set 18)", - "j6casclar", "Casino Crazy Classic Club (JPM) (IMPACT) (set 19)", - "j6casclas", "Casino Crazy Classic Club (JPM) (IMPACT) (set 20)", - "j6casclat", "Casino Crazy Classic Club (JPM) (IMPACT) (set 21)", - "j6casclb", "Casino Crazy Club (JPM) (IMPACT) (set 1)", - "j6casclba", "Casino Crazy Club (JPM) (IMPACT) (set 2)", - "j6cascz", "Casino Crazy (JPM) (IMPACT) (set 1)", - "j6cascza", "Casino Crazy (JPM) (IMPACT) (set 2)", - "j6casczb", "Casino Crazy (JPM) (IMPACT) (set 3)", - "j6casczc", "Casino Crazy (JPM) (IMPACT) (set 4)", - "j6casczd", "Casino Crazy (JPM) (IMPACT) (set 5)", - "j6cascze", "Casino Crazy (JPM) (IMPACT) (set 6)", - "j6casczf", "Casino Crazy (JPM) (IMPACT) (set 7)", - "j6casczg", "Casino Crazy (JPM) (IMPACT) (set 8)", - "j6casczh", "Casino Crazy (JPM) (IMPACT) (set 9)", - "j6casczi", "Casino Crazy (JPM) (IMPACT) (set 10)", - "j6casczj", "Casino Crazy (JPM) (IMPACT) (set 11)", - "j6casczk", "Casino Crazy (JPM) (IMPACT) (set 12)", - "j6casczl", "Casino Crazy (JPM) (IMPACT) (set 13)", - "j6casczm", "Casino Crazy (JPM) (IMPACT) (set 14)", - "j6caslas", "Casino Las Vegas (JPM) (IMPACT) (set 1)", - "j6caslasa", "Casino Las Vegas (JPM) (IMPACT) (set 2)", - "j6caslasb", "Casino Las Vegas (JPM) (IMPACT) (set 3)", - "j6caslasc", "Casino Las Vegas (JPM) (IMPACT) (set 4)", - "j6ccc", "Casino Crazy Club (Crystal) (IMPACT) (set 1)", - "j6ccca", "Casino Crazy Club (Crystal) (IMPACT) (set 2)", - "j6cccb", "Casino Crazy Club (Crystal) (IMPACT) (set 3)", - "j6cccc", "Casino Crazy Club (Crystal) (IMPACT) (set 4)", - "j6cccla", "Casino Crazy Classic (JPM) (IMPACT) (set 1)", - "j6ccclaa", "Casino Crazy Classic (JPM) (IMPACT) (set 2)", - "j6ccclab", "Casino Crazy Classic (JPM) (IMPACT) (set 3)", - "j6ccclac", "Casino Crazy Classic (JPM) (IMPACT) (set 4)", - "j6ccclad", "Casino Crazy Classic (JPM) (IMPACT) (set 5)", - "j6ccclae", "Casino Crazy Classic (JPM) (IMPACT) (set 6)", - "j6ccclaf", "Casino Crazy Classic (JPM) (IMPACT) (set 7)", - "j6ccclag", "Casino Crazy Classic (JPM) (IMPACT) (set 8)", - "j6ccclah", "Casino Crazy Classic (JPM) (IMPACT) (set 9)", - "j6ccclai", "Casino Crazy Classic (JPM) (IMPACT) (set 10)", - "j6ccclaj", "Casino Crazy Classic (JPM) (IMPACT) (set 11)", - "j6ccclak", "Casino Crazy Classic (JPM) (IMPACT) (set 12)", - "j6cdivr", "Cash Diver (Crystal) (IMPACT)", - "j6cheque", "Cheque Mate (JPM) (IMPACT)", - "j6cluclb", "Cluedo Club (JPM) (IMPACT) (set 1)", - "j6cluclba", "Cluedo Club (JPM) (IMPACT) (set 2)", - "j6cluclbb", "Cluedo Club (JPM) (IMPACT) (set 3)", - "j6cluclbc", "Cluedo Club (JPM) (IMPACT) (set 4)", - "j6cluclbd", "Cluedo Club (JPM) (IMPACT) (set 5)", - "j6cluclbe", "Cluedo Club (JPM) (IMPACT) (set 6)", - "j6cluclbf", "Cluedo Club (JPM) (IMPACT) (set 7)", - "j6cluclbg", "Cluedo Club (JPM) (IMPACT) (set 8)", - "j6cluclbh", "Cluedo Club (JPM) (IMPACT) (set 9)", - "j6cluclbi", "Cluedo Club (JPM) (IMPACT) (set 10)", - "j6cluclbj", "Cluedo Club (JPM) (IMPACT) (set 11)", - "j6cluclbk", "Cluedo Club (JPM) (IMPACT) (set 12)", - "j6cluclbl", "Cluedo Club (JPM) (IMPACT) (set 13)", - "j6col", "Coliseum (Mdm) (IMPACT) (set 1)", - "j6cola", "Coliseum (Mdm) (IMPACT) (set 2)", - "j6colb", "Coliseum (Mdm) (IMPACT) (set 3)", - "j6colc", "Coliseum (Mdm) (IMPACT) (set 4)", - "j6colcsh", "Coliseum Cash (JPM) (IMPACT) (set 1)", - "j6colcsha", "Coliseum Cash (JPM) (IMPACT) (set 2)", - "j6colcshb", "Coliseum Cash (JPM) (IMPACT) (set 3)", - "j6colcshc", "Coliseum Cash (JPM) (IMPACT) (set 4)", - "j6colcshd", "Coliseum Cash (JPM) (IMPACT) (set 5)", - "j6cold", "Coliseum (Mdm) (IMPACT) (set 5)", - "j6cole", "Coliseum (Mdm) (IMPACT) (set 6)", - "j6colf", "Coliseum (Mdm) (IMPACT) (set 7)", - "j6colic", "Coliseum (Crystal) (IMPACT) (set 1)", - "j6colica", "Coliseum (Crystal) (IMPACT) (set 2)", - "j6colicb", "Coliseum (Crystal) (IMPACT) (set 3)", - "j6colicc", "Coliseum (Crystal) (IMPACT) (set 4)", - "j6colicd", "Coliseum (Crystal) (IMPACT) (set 5)", - "j6colmon", "Colour Of Money (JPM) (IMPACT) (set 1)", - "j6colmona", "Colour Of Money (JPM) (IMPACT) (set 2)", - "j6colmonb", "Colour Of Money (JPM) (IMPACT) (set 3)", - "j6colmonc", "Colour Of Money (JPM) (IMPACT) (set 4)", - "j6colmond", "Colour Of Money (JPM) (IMPACT) (set 5)", - "j6colmone", "Colour Of Money (JPM) (IMPACT) (set 6)", - "j6colmonf", "Colour Of Money (JPM) (IMPACT) (set 7)", - "j6colmong", "Colour Of Money (JPM) (IMPACT) (set 8)", - "j6colmonh", "Colour Of Money (JPM) (IMPACT) (set 9)", - "j6colmoni", "Colour Of Money (JPM) (IMPACT) (set 10)", - "j6colmonj", "Colour Of Money (JPM) (IMPACT) (set 11)", - "j6coprob", "Cops 'n' Robbers (Qps) (IMPACT) (set 1)", - "j6coproba", "Cops 'n' Robbers (Qps) (IMPACT) (set 2)", - "j6coprobb", "Cops 'n' Robbers (Qps) (IMPACT) (set 3)", - "j6coprobc", "Cops 'n' Robbers (Qps) (IMPACT) (set 4)", - "j6coprobd", "Cops 'n' Robbers (Qps) (IMPACT) (set 5)", - "j6coprobe", "Cops 'n' Robbers (Qps) (IMPACT) (set 6)", - "j6cpal", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 1)", - "j6cpala", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 2)", - "j6cpalb", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 3)", - "j6cpalc", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 4)", - "j6cpald", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 5)", - "j6cpale", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 6)", - "j6cpalf", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 7)", - "j6cpalg", "Caesars Palace (Whitbread / Crystal) (IMPACT) (set 8)", - "j6cpclb", "Caesar's Palace Club (JPM) (IMPACT) (set 1)", - "j6cpclba", "Caesar's Palace Club (JPM) (IMPACT) (set 2)", - "j6cpclbb", "Caesar's Palace Club (JPM) (IMPACT) (set 3)", - "j6crack", "Cracker (JPM) (IMPACT) (set 1)", - "j6cracka", "Cracker (JPM) (IMPACT) (set 2)", - "j6crackb", "Cracker (JPM) (IMPACT) (set 3)", - "j6crackc", "Cracker (JPM) (IMPACT) (set 4)", - "j6crackd", "Cracker (JPM) (IMPACT) (set 5)", - "j6cracke", "Cracker (JPM) (IMPACT) (set 6)", - "j6crackf", "Cracker (JPM) (IMPACT) (set 7)", - "j6crackg", "Cracker (JPM) (IMPACT) (set 8)", - "j6crackh", "Cracker (JPM) (IMPACT) (set 9)", - "j6cracki", "Cracker (JPM) (IMPACT) (set 10)", - "j6crackj", "Cracker (JPM) (IMPACT) (set 11)", - "j6crakr", "Cracker (Crystal) (IMPACT) (set 1)", - "j6crakra", "Cracker (Crystal) (IMPACT) (set 2)", - "j6crakrb", "Cracker (Crystal) (IMPACT) (set 3)", - "j6crsfir", "Cross Fire (JPM) (IMPACT) (set 1)", - "j6crsfira", "Cross Fire (JPM) (IMPACT) (set 2)", - "j6crzclb", "Crazy Club (JPM) (IMPACT) (set 1)", - "j6crzclba", "Crazy Club (JPM) (IMPACT) (set 2)", - "j6crzclbb", "Crazy Club (JPM) (IMPACT) (set 3)", - "j6crzclbc", "Crazy Club (JPM) (IMPACT) (set 4)", - "j6cshbeu", "Cash Box Club (Empire) (Euro) (IMPACT)", - "j6cshbox", "Cash Box Club (Empire) (IMPACT) (set 1)", - "j6cshboxa", "Cash Box Club (Empire) (IMPACT) (set 2)", - "j6cshboxb", "Cash Box Club (Empire) (IMPACT) (set 3)", - "j6cshbst", "Cash Buster (JPM) (IMPACT) (set 1)", - "j6cshbsta", "Cash Buster (JPM) (IMPACT) (set 2)", - "j6cshbstb", "Cash Buster (JPM) (IMPACT) (set 3)", - "j6cshbstc", "Cash Buster (JPM) (IMPACT) (set 4)", - "j6cshbstd", "Cash Buster (JPM) (IMPACT) (set 5)", - "j6cshcnt", "Cash Countdown (JPM) (IMPACT) (set 1)", - "j6cshcnta", "Cash Countdown (JPM) (IMPACT) (set 2)", - "j6cshrd", "Cash Raider (Ace) (IMPACT) (set 1)", - "j6cshrda", "Cash Raider (Ace) (IMPACT) (set 2)", - "j6cshrdb", "Cash Raider (Ace) (IMPACT) (set 3)", - "j6cshrdc", "Cash Raider (Ace) (IMPACT) (set 4)", - "j6cshrdd", "Cash Raider (Ace) (IMPACT) (set 5)", - "j6cshtwr", "Cash Towers (JPM) (IMPACT)", - "j6cshvgs", "Cash Vegas Strip (JPM) (IMPACT) (set 1)", - "j6cshvgsa", "Cash Vegas Strip (JPM) (IMPACT) (set 2)", - "j6cshvgsb", "Cash Vegas Strip (JPM) (IMPACT) (set 3)", - "j6cshvgsc", "Cash Vegas Strip (JPM) (IMPACT) (set 4)", - "j6cshvgsd", "Cash Vegas Strip (JPM) (IMPACT) (set 5)", - "j6cshvgse", "Cash Vegas Strip (JPM) (IMPACT) (set 6)", - "j6cshvgsf", "Cash Vegas Strip (JPM) (IMPACT) (set 7)", - "j6cshvgsg", "Cash Vegas Strip (JPM) (IMPACT) (set 8)", - "j6cshvgsh", "Cash Vegas Strip (JPM) (IMPACT) (set 9)", - "j6cshvgsi", "Cash Vegas Strip (JPM) (IMPACT) (set 10)", - "j6cshvgsj", "Cash Vegas Strip (JPM) (IMPACT) (set 11)", - "j6cshvgsk", "Cash Vegas Strip (JPM) (IMPACT) (set 12)", - "j6cshvgsl", "Cash Vegas Strip (JPM) (IMPACT) (set 13)", - "j6cshvgsm", "Cash Vegas Strip (JPM) (IMPACT) (set 14)", - "j6cshvgsn", "Cash Vegas Strip (JPM) (IMPACT) (set 15)", - "j6cshvgso", "Cash Vegas Strip (JPM) (IMPACT) (set 16)", - "j6cshvgsp", "Cash Vegas Strip (JPM) (IMPACT) (set 17)", - "j6cshvgsq", "Cash Vegas Strip (JPM) (IMPACT) (set 18)", - "j6cshvgsr", "Cash Vegas Strip (JPM) (IMPACT) (set 19)", - "j6daygld", "Daytona Gold (JPM) (IMPACT) (set 1)", - "j6dayglda", "Daytona Gold (JPM) (IMPACT) (set 2)", - "j6daygldb", "Daytona Gold (JPM) (IMPACT) (set 3)", - "j6daygldc", "Daytona Gold (JPM) (IMPACT) (set 4)", - "j6daygldd", "Daytona Gold (JPM) (IMPACT) (set 5)", - "j6dayglde", "Daytona Gold (JPM) (IMPACT) (set 6)", - "j6dayml", "Daytona Millennium (JPM) (IMPACT) (set 1)", - "j6daymla", "Daytona Millennium (JPM) (IMPACT) (set 2)", - "j6daymlb", "Daytona Millennium (JPM) (IMPACT) (set 3)", - "j6dmngz", "Diamond Geezer (JPM) (IMPACT)", - "j6dmnjkr", "Demon Jokers (JPM) (IMPACT) (set 1)", - "j6dmnjkra", "Demon Jokers (JPM) (IMPACT) (set 2)", - "j6dmnjkrb", "Demon Jokers (JPM) (IMPACT) (set 3)", - "j6dmnjkrc", "Demon Jokers (JPM) (IMPACT) (set 4)", - "j6drdogh", "Dr Dough (Qps) (IMPACT)", - "j6dyfl", "Do You Feel Lucky (JPM) (IMPACT) (set 1)", - "j6dyfla", "Do You Feel Lucky (JPM) (IMPACT) (set 2)", - "j6dyflb", "Do You Feel Lucky (JPM) (IMPACT) (set 3)", - "j6dyflc", "Do You Feel Lucky (JPM) (IMPACT) (set 4)", - "j6dyfld", "Do You Feel Lucky (JPM) (IMPACT) (set 5)", - "j6dyfle", "Do You Feel Lucky (JPM) (IMPACT) (set 6)", - "j6dyflf", "Do You Feel Lucky (JPM) (IMPACT) (set 7)", - "j6dyflg", "Do You Feel Lucky (JPM) (IMPACT) (set 8)", - "j6dyflh", "Do You Feel Lucky (JPM) (IMPACT) (set 9)", - "j6dyfli", "Do You Feel Lucky (JPM) (IMPACT) (set 10)", - "j6dyflj", "Do You Feel Lucky (JPM) (IMPACT) (set 11)", - "j6easy", "Easy Money (Crystal) (IMPACT) (set 1)", - "j6easya", "Easy Money (Crystal) (IMPACT) (set 2)", - "j6easyb", "Easy Money (Crystal) (IMPACT) (set 3)", - "j6easyc", "Easy Money (Crystal) (IMPACT) (set 4)", - "j6euphor", "Euphoria (Ace) (IMPACT) (set 1)", - "j6euphora", "Euphoria (Ace) (IMPACT) (set 2)", - "j6euphorb", "Euphoria (Ace) (IMPACT) (set 3)", - "j6euphorc", "Euphoria (Ace) (IMPACT) (set 4)", - "j6euphord", "Euphoria (Ace) (IMPACT) (set 5)", - "j6euphore", "Euphoria (Ace) (IMPACT) (set 6)", - "j6euphorf", "Euphoria (Ace) (IMPACT) (set 7)", - "j6ewn", "Each Way Nudger (JPM) (IMPACT)", - "j6ewndg", "Each Way Nudger (Crystal) (IMPACT) (set 1)", - "j6ewndga", "Each Way Nudger (Crystal) (IMPACT) (set 2)", - "j6ewndgb", "Each Way Nudger (Crystal) (IMPACT) (set 3)", - "j6fastfr", "Fast Fruits Club (Qps) (IMPACT) (set 1)", - "j6fastfra", "Fast Fruits Club (Qps) (IMPACT) (set 2)", - "j6fasttk", "Fast Trak (JPM) (IMPACT) (set 1)", - "j6fasttka", "Fast Trak (JPM) (IMPACT) (set 2)", - "j6fasttkb", "Fast Trak (JPM) (IMPACT) (set 3)", - "j6fasttkc", "Fast Trak (JPM) (IMPACT) (set 4)", - "j6fbcrz", "Football Crazy (JPM) (IMPACT)", - "j6ffc", "Frame & Fortune Club (Crystal) (IMPACT) (set 1)", - "j6ffca", "Frame & Fortune Club (Crystal) (IMPACT) (set 2)", - "j6ffcb", "Frame & Fortune Club (Crystal) (IMPACT) (set 3)", - "j6ffcc", "Frame & Fortune Club (Crystal) (IMPACT) (set 4)", - "j6ffcd", "Frame & Fortune Club (Crystal) (IMPACT) (set 5)", - "j6ffce", "Frame & Fortune Club (Crystal) (IMPACT) (set 6)", - "j6fifth", "5th Dimension (Ace) (IMPACT)", - "j6filth", "Filthy Rich Club (JPM) (IMPACT) (set 1)", - "j6filtha", "Filthy Rich Club (JPM) (IMPACT) (set 2)", - "j6filthb", "Filthy Rich Club (JPM) (IMPACT) (set 3)", - "j6filthc", "Filthy Rich Club (JPM) (IMPACT) (set 4)", - "j6firbl", "Fireball (JPM) (IMPACT) (set 1)", - "j6firbla", "Fireball (JPM) (IMPACT) (set 2)", - "j6firblb", "Fireball (JPM) (IMPACT) (set 3)", - "j6firblc", "Fireball (JPM) (IMPACT) (set 4)", - "j6firbld", "Fireball (JPM) (IMPACT) (set 5)", - "j6firclb", "Firecracker Club (JPM) (IMPACT) (set 1)", - "j6firclba", "Firecracker Club (JPM) (IMPACT) (set 2)", - "j6firclbb", "Firecracker Club (JPM) (IMPACT) (set 3)", - "j6firclbc", "Firecracker Club (JPM) (IMPACT) (set 4)", - "j6fireck", "Firecracker (JPM) (IMPACT) (set 1)", - "j6firecka", "Firecracker (JPM) (IMPACT) (set 2)", - "j6fireckb", "Firecracker (JPM) (IMPACT) (set 3)", - "j6fireckc", "Firecracker (JPM) (IMPACT) (set 4)", - "j6fireckd", "Firecracker (JPM) (IMPACT) (set 5)", - "j6firecke", "Firecracker (JPM) (IMPACT) (set 6)", - "j6fivalv", "Five Alive Club (JPM) (IMPACT) (set 1)", - "j6fivalva", "Five Alive Club (JPM) (IMPACT) (set 2)", - "j6fivalvb", "Five Alive Club (JPM) (IMPACT) (set 3)", - "j6fiveln", "Five Liner (JPM) (IMPACT) (set 1)", - "j6fivelna", "Five Liner (JPM) (IMPACT) (set 2)", - "j6fivelnb", "Five Liner (JPM) (IMPACT) (set 3)", - "j6fivelnc", "Five Liner (JPM) (IMPACT) (set 4)", - "j6footy", "Football Fever (Empire) (IMPACT) (set 1)", - "j6footya", "Football Fever (Empire) (IMPACT) (set 2)", - "j6footyb", "Football Fever (Empire) (IMPACT) (set 3)", - "j6framft", "Frame & Fortune Club (JPM) (IMPACT)", - "j6frc10", "Force 10 (JPM) (IMPACT) (set 1)", - "j6frc10a", "Force 10 (JPM) (IMPACT) (set 2)", - "j6frc10b", "Force 10 (JPM) (IMPACT) (set 3)", - "j6frc10c", "Force 10 (JPM) (IMPACT) (set 4)", - "j6frc10d", "Force 10 (JPM) (IMPACT) (set 5)", - "j6frtmch", "The Fruit Machine (JPM) (IMPACT)", - "j6frtpot", "Fruitpots (Qps) (IMPACT) (set 1)", - "j6frtpota", "Fruitpots (Qps) (IMPACT) (set 2)", - "j6frtpotb", "Fruitpots (Qps) (IMPACT) (set 3)", - "j6frtpotc", "Fruitpots (Qps) (IMPACT) (set 4)", - "j6gforce", "G Force (JPM) (IMPACT) (set 1)", - "j6gforcea", "G Force (JPM) (IMPACT) (set 2)", - "j6gforceb", "G Force (JPM) (IMPACT) (set 3)", - "j6gforcec", "G Force (JPM) (IMPACT) (set 4)", - "j6gforced", "G Force (JPM) (IMPACT) (15GBP Jackpot)", - "j6gidogh", "G.I. Dough (Ace) (IMPACT)", - "j6gldclb", "Gladiator Club (JPM) (IMPACT) (set 1)", - "j6gldclba", "Gladiator Club (JPM) (IMPACT) (set 2)", - "j6gldclbb", "Gladiator Club (JPM) (IMPACT) (set 3)", - "j6gldmin", "Gold Mine (Empire) (IMPACT)", - "j6gldpl", "Golden Palace (Qps) (IMPACT)", - "j6gogold", "Go For Gold (JPM) (IMPACT) (set 1)", - "j6gogolda", "Go For Gold (JPM) (IMPACT) (set 2)", - "j6gogoldb", "Go For Gold (JPM) (IMPACT) (set 3)", - "j6gogoldc", "Go For Gold (JPM) (IMPACT) (set 4)", - "j6golddm", "Golden Demons (JPM) (IMPACT) (set 1)", - "j6golddma", "Golden Demons (JPM) (IMPACT) (set 2)", - "j6goldgl", "Golden Goal (JPM) (IMPACT) (set 1)", - "j6goldgla", "Golden Goal (JPM) (IMPACT) (set 2)", - "j6goldglb", "Golden Goal (JPM) (IMPACT) (set 3)", - "j6goldglc", "Golden Goal (JPM) (IMPACT) (set 4)", - "j6goldgld", "Golden Goal (JPM) (IMPACT) (set 5)", - "j6goldgle", "Golden Goal (JPM) (IMPACT) (set 6)", - "j6goldglf", "Golden Goal (JPM) (IMPACT) (set 7)", - "j6goldglg", "Golden Goal (JPM) (IMPACT) (set 8)", - "j6goldglh", "Golden Goal (JPM) (IMPACT) (set 9)", - "j6goldgli", "Golden Goal (JPM) (IMPACT) (set 10)", - "j6goldglj", "Golden Goal (JPM) (IMPACT) (set 11)", - "j6goldglk", "Golden Goal (JPM) (IMPACT) (set 12)", - "j6goldgll", "Golden Goal (JPM) (IMPACT) (set 13)", - "j6grc", "Gold Rush Club (Crystal) (IMPACT) (set 1)", - "j6grca", "Gold Rush Club (Crystal) (IMPACT) (set 2)", - "j6guab", "Give Us A Break (JPM) (IMPACT) (set 1)", - "j6guaba", "Give Us A Break (JPM) (IMPACT) (set 2)", - "j6guabb", "Give Us A Break (JPM) (IMPACT) (set 3)", - "j6guabc", "Give Us A Break (JPM) (IMPACT) (set 4)", - "j6guabcl", "Give Us A Break Club (JPM) (IMPACT) (set 1)", - "j6guabcla", "Give Us A Break Club (JPM) (IMPACT) (set 2)", - "j6guabd", "Give Us A Break (JPM) (IMPACT) (set 5)", - "j6guabe", "Give Us A Break (JPM) (IMPACT) (set 6)", - "j6guabf", "Give Us A Break (JPM) (IMPACT) (set 7)", - "j6h5clb", "High Five Club (JPM) (IMPACT) (set 1)", - "j6h5clba", "High Five Club (JPM) (IMPACT) (set 2)", - "j6hapyhr", "Happy Hour (JPM) (IMPACT) (set 1)", - "j6hapyhra", "Happy Hour (JPM) (IMPACT) (set 2)", - "j6hapyhrb", "Happy Hour (JPM) (IMPACT) (set 3)", - "j6hdc", "Hot Dogs Club (Crystal) (IMPACT) (set 1)", - "j6hdca", "Hot Dogs Club (Crystal) (IMPACT) (set 2)", - "j6hdcb", "Hot Dogs Club (Crystal) (IMPACT) (set 3)", - "j6hdcc", "Hot Dogs Club (Crystal) (IMPACT) (set 4)", - "j6hdcd", "Hot Dogs Club (Crystal) (IMPACT) (set 5)", - "j6hdce", "Hot Dogs Club (Crystal) (IMPACT) (set 6)", - "j6hdcf", "Hot Dogs Club (Crystal) (IMPACT) (set 7)", - "j6hdcg", "Hot Dogs Club (Crystal) (IMPACT) (set 8)", - "j6hifly", "Hi Flyer (Crystal) (IMPACT)", - "j6hikar", "Hi Karate (Crystal) (IMPACT) (set 1)", - "j6hikara", "Hi Karate (Crystal) (IMPACT) (set 2)", - "j6hikarb", "Hi Karate (Crystal) (IMPACT) (set 3)", - "j6hilosv", "Hi Lo Silver (JPM) (IMPACT) (set 1)", - "j6hilosva", "Hi Lo Silver (JPM) (IMPACT) (set 2)", - "j6hilosvb", "Hi Lo Silver (JPM) (IMPACT) (set 3)", - "j6hilosvc", "Hi Lo Silver (JPM) (IMPACT) (set 4)", - "j6hilosvd", "Hi Lo Silver (JPM) (IMPACT) (set 5)", - "j6hilosve", "Hi Lo Silver (JPM) (IMPACT) (set 6)", - "j6hiphop", "Hip Hopper (Ace) (IMPACT) (set 1)", - "j6hiphopa", "Hip Hopper (Ace) (IMPACT) (set 2)", - "j6hiphopb", "Hip Hopper (Ace) (IMPACT) (set 3)", - "j6hiphopc", "Hip Hopper (Ace) (IMPACT) (set 4)", - "j6hiphopd", "Hip Hopper (Ace) (IMPACT) (set 5)", - "j6hirlcl", "Hi Roller Club (JPM) (IMPACT) (set 1)", - "j6hirlcla", "Hi Roller Club (JPM) (IMPACT) (set 2)", - "j6hirlclb", "Hi Roller Club (JPM) (IMPACT) (set 3)", - "j6hirlclc", "Hi Roller Club (JPM) (IMPACT) (set 4)", - "j6hirol", "Hi Roller (JPM) (IMPACT) (set 1)", - "j6hirola", "Hi Roller (JPM) (IMPACT) (set 2)", - "j6hirolb", "Hi Roller (JPM) (IMPACT) (set 3)", - "j6hirolc", "Hi Roller (JPM) (IMPACT) (set 4)", - "j6hirold", "Hi Roller (JPM) (IMPACT) (set 5)", - "j6hisprt", "High Spirits (Empire) (IMPACT) (prototype?)", - "j6histk", "Hi Stakes (Qps) (IMPACT) (set 1)", - "j6histka", "Hi Stakes (Qps) (IMPACT) (set 2)", - "j6hotsht", "Hot Shot (Ace) (IMPACT) (set 1)", - "j6hotshta", "Hot Shot (Ace) (IMPACT) (set 2)", - "j6hotshtb", "Hot Shot (Ace) (IMPACT) (set 3)", - "j6hotshtc", "Hot Shot (Ace) (IMPACT) (set 4)", - "j6hotshtd", "Hot Shot (Ace) (IMPACT) (set 5)", - "j6hotshte", "Hot Shot (Ace) (IMPACT) (set 6)", - "j6hotshtf", "Hot Shot (Ace) (IMPACT) (set 7)", - "j6hotshtg", "Hot Shot (Ace) (IMPACT) (set 8)", - "j6hotshth", "Hot Shot (Ace) (IMPACT) (set 9)", - "j6hotshti", "Hot Shot (Ace) (IMPACT) (set 10)", - "j6hotshtj", "Hot Shot (Ace) (IMPACT) (set 11)", - "j6hotshtk", "Hot Shot (Ace) (IMPACT) (set 12)", - "j6hotshtl", "Hot Shot (Ace) (IMPACT) (set 13)", - "j6impact", "Hi Impact (JPM) (IMPACT) (set 1)", - "j6impacta", "Hi Impact (JPM) (IMPACT) (set 2)", - "j6impactb", "Hi Impact (JPM) (IMPACT) (set 3)", - "j6impactc", "Hi Impact (JPM) (IMPACT) (15GBP Jackpot)", - "j6impls", "Impulse (Crystal) (IMPACT)", - "j6impuls", "Impulse (JPM) (IMPACT) (set 1)", - "j6impulsa", "Impulse (JPM) (IMPACT) (set 2)", - "j6impulsb", "Impulse (JPM) (IMPACT) (set 3)", - "j6impulsc", "Impulse (JPM) (IMPACT) (set 4)", - "j6impulsd", "Impulse (JPM) (IMPACT) (set 5)", - "j6impulse", "Impulse (JPM) (IMPACT) (set 6)", - "j6impulsf", "Impulse (JPM) (IMPACT) (set 7)", - "j6indy", "Indiana Jones (JPM) (IMPACT) (set 1)", - "j6indya", "Indiana Jones (JPM) (IMPACT) (set 2)", - "j6indyb", "Indiana Jones (JPM) (IMPACT) (set 3)", - "j6indyc", "Indiana Jones (JPM) (IMPACT) (set 4)", - "j6indyd", "Indiana Jones (JPM) (IMPACT) (set 5)", - "j6indye", "Indiana Jones (JPM) (IMPACT) (set 6)", - "j6indyf", "Indiana Jones (JPM) (IMPACT) (set 7)", - "j6indyg", "Indiana Jones (JPM) (IMPACT) (set 8)", - "j6indyge", "Indiana Jones (JPM) (IMPACT, German set 1)", - "j6indyge2", "Indiana Jones (JPM) (IMPACT, German set 2)", - "j6indyh", "Indiana Jones (JPM) (IMPACT) (set 9)", - "j6indyi", "Indiana Jones (JPM) (IMPACT) (set 10)", - "j6indyj", "Indiana Jones (JPM) (IMPACT) (set 11)", - "j6indyk", "Indiana Jones (JPM) (IMPACT) (set 12)", - "j6jackjs", "Jackpot Justice (Qps) (IMPACT) (set 1)", - "j6jackjsa", "Jackpot Justice (Qps) (IMPACT) (set 2)", - "j6jackjsb", "Jackpot Justice (Qps) (IMPACT) (set 3)", - "j6jackjsc", "Jackpot Justice (Qps) (IMPACT) (set 4)", - "j6jkpldx", "Jokers Plus Deluxe (JPM) (IMPACT) (set 1)", - "j6jkpldxa", "Jokers Plus Deluxe (JPM) (IMPACT) (set 2)", - "j6jkrgld", "Jokers Gold (JPM) (IMPACT)", - "j6jkrpls", "Jokers Plus (JPM) (IMPACT) (set 1)", - "j6jkrplsa", "Jokers Plus (JPM) (IMPACT) (set 2)", - "j6jkrplsb", "Jokers Plus (JPM) (IMPACT) (set 3)", - "j6jkrplsc", "Jokers Plus (JPM) (IMPACT) (set 4)", - "j6jkrplsd", "Jokers Plus (JPM) (IMPACT) (set 5)", - "j6jkrplse", "Jokers Plus (JPM) (IMPACT) (set 6)", - "j6jkwld", "Jokers Wild (JPM) (IMPACT)", - "j6jungfv", "Jungle Fever (Ace) (IMPACT)", - "j6kamel", "Kameleon (JPM) (IMPACT)", - "j6kapang", "Kapang! (Crystal) (IMPACT) (set 1)", - "j6kapanga", "Kapang! (Crystal) (IMPACT) (set 2)", - "j6kfc", "Kung Fu Club (Crystal) (IMPACT) (set 1)", - "j6kfca", "Kung Fu Club (Crystal) (IMPACT) (set 2)", - "j6kfcb", "Kung Fu Club (Crystal) (IMPACT) (set 3)", - "j6knight", "Your Lucky Knight (JPM) (IMPACT) (set 1)", - "j6knighta", "Your Lucky Knight (JPM) (IMPACT) (set 2)", - "j6knightb", "Your Lucky Knight (JPM) (IMPACT) (set 3)", - "j6knightc", "Your Lucky Knight (JPM) (IMPACT) (set 4)", - "j6knightd", "Your Lucky Knight (JPM) (IMPACT) (set 5)", - "j6knighte", "Your Lucky Knight (JPM) (IMPACT) (set 6)", - "j6kungfu", "Kung Fu (Ace) (IMPACT) (set 1)", - "j6kungfua", "Kung Fu (Ace) (IMPACT) (set 2)", - "j6kungfub", "Kung Fu (Ace) (IMPACT) (set 3)", - "j6kungfuc", "Kung Fu (Ace) (IMPACT) (set 4)", - "j6kungfud", "Kung Fu (Ace) (IMPACT) (set 5)", - "j6luckla", "Lucky Las Vegas (JPM) (IMPACT) (set 1)", - "j6lucklaa", "Lucky Las Vegas (JPM) (IMPACT) (set 2)", - "j6lucklab", "Lucky Las Vegas (JPM) (IMPACT) (set 3)", - "j6lucklo", "Lucky Lottery Club (Crystal) (IMPACT) (set 1)", - "j6luckloa", "Lucky Lottery Club (Crystal) (IMPACT) (set 2)", - "j6magcir", "Magic Circle Club (JPM) (IMPACT) (set 1)", - "j6magcira", "Magic Circle Club (JPM) (IMPACT) (set 2)", - "j6magcirb", "Magic Circle Club (JPM) (IMPACT) (set 3)", - "j6magcirc", "Magic Circle Club (JPM) (IMPACT) (set 4)", - "j6magcird", "Magic Circle Club (JPM) (IMPACT) (set 5)", - "j6mavrk", "Maverick (JPM) (IMPACT) (set 1)", - "j6mavrka", "Maverick (JPM) (IMPACT) (set 2)", - "j6mavrkb", "Maverick (JPM) (IMPACT) (set 3)", - "j6mavrkc", "Maverick (JPM) (IMPACT) (set 4)", - "j6mavrkd", "Maverick (JPM) (IMPACT) (set 5)", - "j6maxcsh", "Maximus Cash (JPM) (IMPACT)", - "j6maxod", "Maximum Overdrive (JPM) (IMPACT) (set 1)", - "j6maxoda", "Maximum Overdrive (JPM) (IMPACT) (set 2)", - "j6maxodb", "Maximum Overdrive (JPM) (IMPACT) (set 3)", - "j6maxodc", "Maximum Overdrive (JPM) (IMPACT) (set 4)", - "j6medal", "Medallion Job (Qps) (IMPACT) (set 1)", - "j6medala", "Medallion Job (Qps) (IMPACT) (set 2)", - "j6medalb", "Medallion Job (Qps) (IMPACT) (set 3)", - "j6medalc", "Medallion Job (Qps) (IMPACT) (set 4)", - "j6medald", "Medallion Job (Qps) (IMPACT) (set 5)", - "j6megbck", "Mega Bucks (JPM) (IMPACT) (set 1)", - "j6megbcka", "Mega Bucks (JPM) (IMPACT) (set 2)", - "j6megbckb", "Mega Bucks (JPM) (IMPACT) (set 3)", - "j6megbckc", "Mega Bucks (JPM) (IMPACT) (set 4)", - "j6megbckd", "Mega Bucks (JPM) (IMPACT) (set 5)", - "j6milln", "Millionaire (JPM) (IMPACT) (set 1)", - "j6millna", "Millionaire (JPM) (IMPACT) (set 2)", - "j6monmad", "Money Madness (Ace) (IMPACT)", - "j6mono60", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 1)", - "j6mono60a", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 2)", - "j6mono60b", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 3)", - "j6mono60c", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 4)", - "j6mono60d", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 5)", - "j6mono60e", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 6)", - "j6mono60f", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 7)", - "j6mono60g", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 8)", - "j6mono60h", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 9)", - "j6mono60i", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 10)", - "j6mono60j", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 11)", - "j6mono60k", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 12)", - "j6mono60l", "Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 13)", - "j6monobn", "Monopoly Bingo (JPM) (IMPACT) (set 1)", - "j6monobna", "Monopoly Bingo (JPM) (IMPACT) (set 2)", - "j6monobnb", "Monopoly Bingo (JPM) (IMPACT) (set 3)", - "j6monst", "Monster Cash Club (Crystal) (IMPACT) (set 1)", - "j6monsta", "Monster Cash Club (Crystal) (IMPACT) (set 2)", - "j6monstb", "Monster Cash Club (Crystal) (IMPACT) (set 3)", - "j6monstc", "Monster Cash Club (Crystal) (IMPACT) (set 4)", - "j6monstd", "Monster Cash Club (Crystal) (IMPACT) (set 5)", - "j6montlk", "Money Talks (JPM) (IMPACT) (set 1)", - "j6montlka", "Money Talks (JPM) (IMPACT) (set 2)", - "j6montlkb", "Money Talks (JPM) (IMPACT) (set 3)", - "j6montlkc", "Money Talks (JPM) (IMPACT) (set 4)", - "j6montlkd", "Money Talks (JPM) (IMPACT) (set 5)", - "j6montlke", "Money Talks (JPM) (IMPACT) (set 6)", - "j6montlkf", "Money Talks (JPM) (IMPACT) (set 7)", - "j6montlkg", "Money Talks (JPM) (IMPACT) (set 8)", - "j6montlkh", "Money Talks (JPM) (IMPACT) (set 9)", - "j6outlaw", "Outlaw (JPM) (IMPACT, v3)", - "j6outlawc", "Outlaw (JPM) (IMPACT, Club?)", - "j6outlawd", "Outlaw (JPM) (IMPACT, v3) (Protocol)", - "j6oxo", "Oxo (JPM) (IMPACT) (set 1)", - "j6oxoa", "Oxo (JPM) (IMPACT) (set 2)", - "j6oxob", "Oxo (JPM) (IMPACT) (set 3)", - "j6oxobin", "Oxo Bingo (JPM) (IMPACT) (set 1)", - "j6oxobina", "Oxo Bingo (JPM) (IMPACT) (set 2)", - "j6oxobinb", "Oxo Bingo (JPM) (IMPACT) (set 3)", - "j6oxobinc", "Oxo Bingo (JPM) (IMPACT) (set 4)", - "j6oxobind", "Oxo Bingo (JPM) (IMPACT) (set 5)", - "j6oxobine", "Oxo Bingo (JPM) (IMPACT) (set 6)", - "j6oxobinf", "Oxo Bingo (JPM) (IMPACT) (set 7)", - "j6oxoc", "Oxo (JPM) (IMPACT) (set 4)", - "j6oxod", "Oxo (JPM) (IMPACT) (set 5)", - "j6oxoe", "Oxo (JPM) (IMPACT) (set 6)", - "j6pacman", "Pac Man Plus (Qps) (IMPACT)", - "j6papa", "Paparazzi (Empire) (IMPACT) (set 1)", - "j6papaa", "Paparazzi (Empire) (IMPACT) (set 2)", - "j6papab", "Paparazzi (Empire) (IMPACT) (set 3)", - "j6papac", "Paparazzi (Empire) (IMPACT) (set 4)", - "j6papad", "Paparazzi (Empire) (IMPACT) (set 5)", - "j6papae", "Paparazzi (Empire) (IMPACT) (set 6)", - "j6papaf", "Paparazzi (Empire) (IMPACT) (set 7)", - "j6phxgld", "Phoenix Gold (JPM) (IMPACT) (set 1)", - "j6phxglda", "Phoenix Gold (JPM) (IMPACT) (set 2)", - "j6phxgldb", "Phoenix Gold (JPM) (IMPACT) (set 3)", - "j6phxgldc", "Phoenix Gold (JPM) (IMPACT) (set 4)", - "j6phxgldd", "Phoenix Gold (JPM) (IMPACT) (set 5)", - "j6phxglde", "Phoenix Gold (JPM) (IMPACT) (set 6)", - "j6phxgldf", "Phoenix Gold (JPM) (IMPACT) (set 7)", - "j6phxgldg", "Phoenix Gold (JPM) (IMPACT) (set 8)", - "j6pinfvr", "Pinball Fever (Crystal) (IMPACT)", - "j6pinwzc", "Pinball Wizard (Crystal) (IMPACT) (set 1)", - "j6pinwzca", "Pinball Wizard (Crystal) (IMPACT) (set 2)", - "j6pinwzcb", "Pinball Wizard (Crystal) (IMPACT) (set 3)", - "j6pinwzd", "Pinball Wizard (JPM) (IMPACT) (set 1)", - "j6pinwzda", "Pinball Wizard (JPM) (IMPACT) (set 2)", - "j6pinwzdb", "Pinball Wizard (JPM) (IMPACT) (set 3)", - "j6pinwzdc", "Pinball Wizard (JPM) (IMPACT) (set 4)", - "j6pinwzdd", "Pinball Wizard (JPM) (IMPACT) (set 5)", - "j6pinwzde", "Pinball Wizard (JPM) (IMPACT) (set 6)", - "j6pirgld", "Pirates Gold (JPM) (IMPACT) (set 1)", - "j6pirglda", "Pirates Gold (JPM) (IMPACT) (set 2)", - "j6pnxgd", "Phoenix Gold De Luxe (JPM) (IMPACT)", - "j6pnxmil", "Phoenix Millennium (JPM) (IMPACT) (set 1)", - "j6pnxmila", "Phoenix Millennium (JPM) (IMPACT) (set 2)", - "j6pnxmilb", "Phoenix Millennium (JPM) (IMPACT) (set 3)", - "j6pnxmilc", "Phoenix Millennium (JPM) (IMPACT) (set 4)", - "j6pog", "Pot Of Gold (Ace) (IMPACT) (set 1)", - "j6poga", "Pot Of Gold (Ace) (IMPACT) (set 2)", - "j6pogb", "Pot Of Gold (Ace) (IMPACT) (set 3)", - "j6pogc", "Pot Of Gold (Ace) (IMPACT) (set 4)", - "j6pogcls", "Pot Of Gold Classic (JPM) (IMPACT) (set 1)", - "j6pogclsa", "Pot Of Gold Classic (JPM) (IMPACT) (set 2)", - "j6pogclsb", "Pot Of Gold Classic (JPM) (IMPACT) (set 3)", - "j6pogd", "Pot Of Gold (Ace) (IMPACT) (set 5)", - "j6pompay", "Up Pompay (Ace) (IMPACT) (set 1)", - "j6pompaya", "Up Pompay (Ace) (IMPACT) (set 2)", - "j6pompayb", "Up Pompay (Ace) (IMPACT) (set 3)", - "j6pompayc", "Up Pompay (Ace) (IMPACT) (set 4)", - "j6popoli", "Popeye & Olive (JPM) (IMPACT) (set 1)", - "j6popolia", "Popeye & Olive (JPM) (IMPACT) (set 2)", - "j6potg", "Pot Of Gold (Crystal) (IMPACT) (set 1)", - "j6potga", "Pot Of Gold (Crystal) (IMPACT) (set 2)", - "j6potgb", "Pot Of Gold (Crystal) (IMPACT) (set 3)", - "j6pwrlin", "Power Lines (JPM) (IMPACT) (set 1)", - "j6pwrlina", "Power Lines (JPM) (IMPACT) (set 2)", - "j6pwrspn", "Powerspin (JPM) (IMPACT) (set 1)", - "j6pwrspna", "Powerspin (JPM) (IMPACT) (set 2)", - "j6pwrspnb", "Powerspin (JPM) (IMPACT) (set 3)", - "j6pwrspnc", "Powerspin (JPM) (IMPACT) (set 4)", - "j6pwrspnd", "Powerspin (JPM) (IMPACT) (set 5)", - "j6pwrspne", "Powerspin (JPM) (IMPACT) (set 6)", - "j6quantm", "Quantum Leap (JPM) (IMPACT) (set 1)", - "j6quantma", "Quantum Leap (JPM) (IMPACT) (set 2)", - "j6quantmb", "Quantum Leap (JPM) (IMPACT) (set 3)", - "j6quantmc", "Quantum Leap (JPM) (IMPACT) (set 4)", - "j6quick", "Quicksilver (RAL) (IMPACT)", - "j6r2rum", "Ready To Rumble (Crystal) (IMPACT) (set 1)", - "j6r2ruma", "Ready To Rumble (Crystal) (IMPACT) (set 2)", - "j6r2rumb", "Ready To Rumble (Crystal) (IMPACT) (set 3)", - "j6r2rumc", "Ready To Rumble (Crystal) (IMPACT) (set 4)", - "j6r2rumd", "Ready To Rumble (Crystal) (IMPACT) (set 5)", - "j6r2rume", "Ready To Rumble (Crystal) (IMPACT) (set 6)", - "j6ra", "Red Alert (JPM) (IMPACT) (set 1)", - "j6raa", "Red Alert (JPM) (IMPACT) (set 2)", - "j6rab", "Red Alert (JPM) (IMPACT) (set 3)", - "j6rac", "Red Alert (JPM) (IMPACT) (set 4)", - "j6raclb", "Red Alert Club (JPM) (IMPACT) (set 1)", - "j6raclba", "Red Alert Club (JPM) (IMPACT) (set 2)", - "j6raclbb", "Red Alert Club (JPM) (IMPACT) (set 3)", - "j6raclbc", "Red Alert Club (JPM) (IMPACT) (set 4)", - "j6raclbd", "Red Alert Club (JPM) (IMPACT) (set 5)", - "j6rad", "Red Alert (JPM) (IMPACT) (set 5)", - "j6rager", "Red Alert (JPM) [German] (IMPACT)", - "j6ramese", "Rameses' Riches Club (Crystal) (IMPACT) (set 1)", - "j6ramesea", "Rameses' Riches Club (Crystal) (IMPACT) (set 2)", - "j6rameseb", "Rameses' Riches Club (Crystal) (IMPACT) (set 3)", - "j6ramesec", "Rameses' Riches Club (Crystal) (IMPACT) (set 4)", - "j6ramesed", "Rameses' Riches Club (Crystal) (IMPACT) (set 5)", - "j6ramesee", "Rameses' Riches Club (Crystal) (IMPACT) (set 6)", - "j6ramesef", "Rameses' Riches Club (Crystal) (IMPACT) (set 7)", - "j6rccls", "Roller Coaster Classic (JPM) (IMPACT) (set 1)", - "j6rcclsa", "Roller Coaster Classic (JPM) (IMPACT) (set 2)", - "j6rcclsb", "Roller Coaster Classic (JPM) (IMPACT) (set 3)", - "j6rcclub", "Roller Coaster Club (JPM) (IMPACT) (set 1)", - "j6rccluba", "Roller Coaster Club (JPM) (IMPACT) (set 2)", - "j6rcclubb", "Roller Coaster Club (JPM) (IMPACT) (set 3)", - "j6redal", "Red Alert (Crystal) (IMPACT) (set 1)", - "j6redala", "Red Alert (Crystal) (IMPACT) (set 2)", - "j6redarw", "Red Arrow (JPM) (IMPACT) (set 1)", - "j6redarwa", "Red Arrow (JPM) (IMPACT) (set 2)", - "j6redarwb", "Red Arrow (JPM) (IMPACT) (set 3)", - "j6redarwc", "Red Arrow (JPM) (IMPACT) (set 4)", - "j6redarwd", "Red Arrow (JPM) (IMPACT) (set 5)", - "j6redarwe", "Red Arrow (JPM) (IMPACT) (set 6)", - "j6redarwf", "Red Arrow (JPM) (IMPACT) (set 7)", - "j6redarwg", "Red Arrow (JPM) (IMPACT) (set 8)", - "j6redarwh", "Red Arrow (JPM) (IMPACT) (set 9)", - "j6redarwi", "Red Arrow (JPM) (IMPACT) (set 10)", - "j6redarwj", "Red Arrow (JPM) (IMPACT) (set 11)", - "j6redarww", "Red Arrow (Whitbread / JPM) (IMPACT)", - "j6reddmn", "Red Demon (JPM) (IMPACT)", - "j6reelb", "Reel Bingo Classic Club (Crystal) (IMPACT) (set 1)", - "j6reelba", "Reel Bingo Classic Club (Crystal) (IMPACT) (set 2)", - "j6reelmn", "Reel Money (JPM) (IMPACT) (set 1)", - "j6reelmna", "Reel Money (JPM) (IMPACT) (set 2)", - "j6reelmnb", "Reel Money (JPM) (IMPACT) (set 3)", - "j6reelmnc", "Reel Money (JPM) (IMPACT) (set 4)", - "j6reelmnd", "Reel Money (JPM) (IMPACT) (set 5)", - "j6reelth", "Reel Thing (Ace) (IMPACT) set 1)", - "j6reeltha", "Reel Thing (Ace) (IMPACT) set 2)", - "j6reelthb", "Reel Thing (Ace) (IMPACT) set 3)", - "j6rh6", "Red Hot 6 (JPM) (IMPACT) (set 1)", - "j6rh6a", "Red Hot 6 (JPM) (IMPACT) (set 2)", - "j6rh6b", "Red Hot 6 (JPM) (IMPACT) (set 3)", - "j6rh6c", "Red Hot 6 (JPM) (IMPACT) (set 4)", - "j6rh6cl", "Red Hot Six Club (JPM) (IMPACT) (set 1)", - "j6rh6cla", "Red Hot Six Club (JPM) (IMPACT) (set 2)", - "j6rh6clb", "Red Hot Six Club (JPM) (IMPACT) (set 3)", - "j6rh6clc", "Red Hot Six Club (JPM) (IMPACT) (set 4)", - "j6rh6cld", "Red Hot Six Club (JPM) (IMPACT) (set 5)", - "j6rh6d", "Red Hot 6 (JPM) (IMPACT) (set 5)", - "j6rh6e", "Red Hot 6 (JPM) (IMPACT) (set 6)", - "j6rhchil", "Red Hot Chili Stepper (Ace) (IMPACT) (set 1)", - "j6rhchila", "Red Hot Chili Stepper (Ace) (IMPACT) (set 2)", - "j6rhchilb", "Red Hot Chili Stepper (Ace) (IMPACT) (set 3)", - "j6rhchilc", "Red Hot Chili Stepper (Ace) (IMPACT) (set 4)", - "j6rhchild", "Red Hot Chili Stepper (Ace) (IMPACT) (set 5)", - "j6richpk", "Rich Pickings (Ace) (IMPACT)", - "j6rico", "Ricochet (JPM) (IMPACT) (set 1)", - "j6ricoa", "Ricochet (JPM) (IMPACT) (set 2)", - "j6ricob", "Ricochet (JPM) (IMPACT) (set 3)", - "j6ricoc", "Ricochet (JPM) (IMPACT) (set 4)", - "j6ricod", "Ricochet (JPM) (IMPACT) (set 5)", - "j6ricoe", "Ricochet (JPM) (IMPACT) (set 6)", - "j6robin", "Robin Hood (Ace) (IMPACT) (set 1)", - "j6robina", "Robin Hood (Ace) (IMPACT) (set 2)", - "j6robinb", "Robin Hood (Ace) (IMPACT) (set 3)", - "j6robinc", "Robin Hood (Ace) (IMPACT) (set 4)", - "j6roller", "Roller Coaster (JPM) (IMPACT) (set 1)", - "j6rollera", "Roller Coaster (JPM) (IMPACT) (set 2)", - "j6rollerb", "Roller Coaster (JPM) (IMPACT) (set 3)", - "j6rollerc", "Roller Coaster (JPM) (IMPACT) (set 4)", - "j6rollerd", "Roller Coaster (JPM) (IMPACT) (set 5)", - "j6rollere", "Roller Coaster (JPM) (IMPACT) (set 6)", - "j6rollerf", "Roller Coaster (JPM) (IMPACT) (set 7)", - "j6rollerg", "Roller Coaster (JPM) (IMPACT) (set 8)", - "j6rollerh", "Roller Coaster (JPM) (IMPACT) (set 9)", - "j6rolleri", "Roller Coaster (JPM) (IMPACT) (set 10)", - "j6rollerj", "Roller Coaster (JPM) (IMPACT) (set 11)", - "j6rollerk", "Roller Coaster (JPM) (IMPACT) (set 12)", - "j6rollerl", "Roller Coaster (JPM) (IMPACT) (set 13)", - "j6rollerm", "Roller Coaster (JPM) (IMPACT) (set 14)", - "j6rollern", "Roller Coaster (JPM) (IMPACT) (set 15)", - "j6rollero", "Roller Coaster (JPM) (IMPACT) (set 16)", - "j6rollerp", "Roller Coaster (JPM) (IMPACT) (set 17)", - "j6roof", "Thru' The Roof (Ace) (IMPACT) (set 1)", - "j6roofa", "Thru' The Roof (Ace) (IMPACT) (set 2)", - "j6royfls", "Royal Flush Club (JPM) (IMPACT) (set 1)", - "j6royflsa", "Royal Flush Club (JPM) (IMPACT) (set 2)", - "j6royflsb", "Royal Flush Club (JPM) (IMPACT) (set 3)", - "j6royflsc", "Royal Flush Club (JPM) (IMPACT) (set 4)", - "j6royflsd", "Royal Flush Club (JPM) (IMPACT) (set 5)", - "j6royflse", "Royal Flush Club (JPM) (IMPACT) (set 6)", - "j6samur", "Samurai Club (JPM) (IMPACT) (set 1)", - "j6samura", "Samurai Club (JPM) (IMPACT) (set 2)", - "j6samurb", "Samurai Club (JPM) (IMPACT) (set 3)", - "j6samurc", "Samurai Club (JPM) (IMPACT) (set 4)", - "j6samurd", "Samurai Club (JPM) (IMPACT) (set 5)", - "j6scarlt", "Captain Scarlet (Ace) (IMPACT)", - "j6shoot", "ShootOut (JPM / Whitbread) (IMPACT)", - "j6showtm", "It's Showtime (JPM) (IMPACT) (set 1)", - "j6showtma", "It's Showtime (JPM) (IMPACT) (set 2)", - "j6showtmb", "It's Showtime (JPM) (IMPACT) (set 3)", - "j6showtmc", "It's Showtime (JPM) (IMPACT) (set 4)", - "j6showtmd", "It's Showtime (JPM) (IMPACT) (set 5)", - "j6showtme", "It's Showtime (JPM) (IMPACT) (set 6)", - "j6showtmf", "It's Showtime (JPM) (IMPACT) (set 7)", - "j6showtmg", "It's Showtime (JPM) (IMPACT) (set 8)", - "j6showtmh", "It's Showtime (JPM) (IMPACT) (set 9)", - "j6showtmi", "It's Showtime (JPM) (IMPACT) (set 10)", - "j6showtmj", "It's Showtime (JPM) (IMPACT) (set 11)", - "j6showtmk", "It's Showtime (JPM) (IMPACT) (set 12)", - "j6showtml", "It's Showtime (JPM) (IMPACT) (set 13)", - "j6sidewd", "Sidewinder (JPM) (IMPACT) (set 1)", - "j6sidewda", "Sidewinder (JPM) (IMPACT) (set 2)", - "j6sidewdb", "Sidewinder (JPM) (IMPACT) (set 3)", - "j6sidewdc", "Sidewinder (JPM) (IMPACT) (set 4)", - "j6sidewdd", "Sidewinder (JPM) (IMPACT) (set 5)", - "j6sidewde", "Sidewinder (JPM) (IMPACT) (set 6)", - "j6slagn", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 1)", - "j6slagna", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 2)", - "j6slagnb", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 3)", - "j6slagnc", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 4)", - "j6slagnd", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 5)", - "j6slagne", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 6)", - "j6slagnf", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 7)", - "j6slagng", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 8)", - "j6slagnh", "Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 9)", - "j6slvgst", "Silver Ghost (JPM) (IMPACT) (set 1)", - "j6slvgsta", "Silver Ghost (JPM) (IMPACT) (set 2)", - "j6slvgstb", "Silver Ghost (JPM) (IMPACT) (set 3)", - "j6slvgstc", "Silver Ghost (JPM) (IMPACT) (set 4)", - "j6slvgstd", "Silver Ghost (JPM) (IMPACT) (set 5)", - "j6slvgste", "Silver Ghost (JPM) (IMPACT) (set 6)", - "j6slvgstf", "Silver Ghost (JPM) (IMPACT) (set 7)", - "j6slvgstg", "Silver Ghost (JPM) (IMPACT) (set 8)", - "j6snakes", "Snakes & Ladders (JPM) (IMPACT) (set 1)", - "j6snakesa", "Snakes & Ladders (JPM) (IMPACT) (set 2)", - "j6snakesb", "Snakes & Ladders (JPM) (IMPACT) (set 3)", - "j6snakesc", "Snakes & Ladders (JPM) (IMPACT) (set 4)", - "j6snakesd", "Snakes & Ladders (JPM) (IMPACT) (set 5)", - "j6snakese", "Snakes & Ladders (JPM) (IMPACT) (set 6)", - "j6snakesf", "Snakes & Ladders (JPM) (IMPACT) (set 7)", - "j6snakesg", "Snakes & Ladders (JPM) (IMPACT) (set 8)", - "j6sonic", "Sonic The Hedgehog (JPM) (IMPACT) (set 1)", - "j6sonica", "Sonic The Hedgehog (JPM) (IMPACT) (set 2)", - "j6sonicb", "Sonic The Hedgehog (JPM) (IMPACT) (set 3)", - "j6sonicc", "Sonic The Hedgehog (JPM) (IMPACT) (set 4)", - "j6sonicd", "Sonic The Hedgehog (JPM) (IMPACT) (set 5)", - "j6sonice", "Sonic The Hedgehog (JPM) (IMPACT) (set 6)", - "j6sonicf", "Sonic The Hedgehog (JPM) (IMPACT) (set 7)", - "j6sonicg", "Sonic The Hedgehog (JPM) (IMPACT) (set 8)", - "j6sonich", "Sonic The Hedgehog (JPM) (IMPACT) (set 9)", - "j6spcinv", "Space Invaders (Crystal) (IMPACT)", - "j6stards", "Stardust (JPM) (IMPACT) (set 1)", - "j6stardsa", "Stardust (JPM) (IMPACT) (set 2)", - "j6stardsb", "Stardust (JPM) (IMPACT) (set 3)", - "j6stardsc", "Stardust (JPM) (IMPACT) (set 4)", - "j6start", "Starturn (JPM) (IMPACT) (set 1)", - "j6starta", "Starturn (JPM) (IMPACT) (set 2)", - "j6strk10", "Strike 10 (Ace) (IMPACT) (set 1)", - "j6strk10a", "Strike 10 (Ace) (IMPACT) (set 2)", - "j6strk10b", "Strike 10 (Ace) (IMPACT) (set 3)", - "j6strk10c", "Strike 10 (Ace) (IMPACT) (set 4)", - "j6strk10d", "Strike 10 (Ace) (IMPACT) (set 5)", - "j6strk10e", "Strike 10 (Ace) (IMPACT) (set 6)", - "j6strk10f", "Strike 10 (Ace) (IMPACT) (set 7)", - "j6strk10g", "Strike 10 (Ace) (IMPACT) (set 8)", - "j6strk10h", "Strike 10 (Ace) (IMPACT) (set 9)", - "j6strk10i", "Strike 10 (Ace) (IMPACT) (set 10)", - "j6strk10j", "Strike 10 (Ace) (IMPACT) (set 11)", - "j6strk10k", "Strike 10 (Ace) (IMPACT) (set 12)", - "j6supbrk", "Super Breakout (JPM) (IMPACT) (set 1)", - "j6supbrka", "Super Breakout (JPM) (IMPACT) (set 2)", - "j6supbrkb", "Super Breakout (JPM) (IMPACT) (set 3)", - "j6supbrkc", "Super Breakout (JPM) (IMPACT) (set 4)", - "j6supbrkd", "Super Breakout (JPM) (IMPACT) (set 5)", - "j6supbrke", "Super Breakout (JPM) (IMPACT) (set 6)", - "j6supbrkf", "Super Breakout (JPM) (IMPACT) (set 7)", - "j6supbrkg", "Super Breakout (JPM) (IMPACT) (set 8)", - "j6supbrkh", "Super Breakout (JPM) (IMPACT) (set 9)", - "j6supbrki", "Super Breakout (JPM) (IMPACT) (set 10)", - "j6supbrkj", "Super Breakout (JPM) (IMPACT) (set 11)", - "j6svndb", "7 Deadly Bins (Ace) (IMPACT)", - "j6swpdrp", "Swop Till Ya Drop (JPM) (IMPACT)", - "j6tbirds", "Thunderbirds (JPM) (IMPACT) (set 1)", - "j6tbirdsa", "Thunderbirds (JPM) (IMPACT) (set 2)", - "j6tbirdsb", "Thunderbirds (JPM) (IMPACT) (set 3)", - "j6tbirdsc", "Thunderbirds (JPM) (IMPACT) (set 4)", - "j6tbirdsd", "Thunderbirds (JPM) (IMPACT) (set 5)", - "j6tbirdse", "Thunderbirds (JPM) (IMPACT) (set 6)", - "j6tbirdsf", "Thunderbirds (JPM) (IMPACT) (set 7)", - "j6tbirdsg", "Thunderbirds (JPM) (IMPACT) (set 8)", - "j6tbirdsh", "Thunderbirds (JPM) (IMPACT) (set 9)", - "j6tbirdsi", "Thunderbirds (JPM) (IMPACT) (set 10)", - "j6tbirdsj", "Thunderbirds (JPM) (IMPACT) (set 11)", - "j6tbirdsk", "Thunderbirds (JPM) (IMPACT) (set 12)", - "j6tbirdsl", "Thunderbirds (JPM) (IMPACT) (set 13)", - "j6tbirdsm", "Thunderbirds (JPM) (IMPACT) (set 14)", - "j6tbirdsn", "Thunderbirds (JPM) (IMPACT) (set 15)", - "j6tbirdso", "Thunderbirds (JPM) (IMPACT) (set 16)", - "j6tbirdsp", "Thunderbirds (JPM) (IMPACT) (set 17)", - "j6tbirdsq", "Thunderbirds (JPM) (IMPACT) (set 18)", - "j6tbirdsr", "Thunderbirds (JPM) (IMPACT) (set 19)", - "j6tbrdcl", "Thunderbirds Club (JPM) (IMPACT) (set 1)", - "j6tbrdcla", "Thunderbirds Club (JPM) (IMPACT) (set 2)", - "j6tbrdclb", "Thunderbirds Club (JPM) (IMPACT) (set 3)", - "j6tbrdclc", "Thunderbirds Club (JPM) (IMPACT) (set 4)", - "j6tbrdcld", "Thunderbirds Club (JPM) (IMPACT) (set 5)", - "j6tbrdcle", "Thunderbirds Club (JPM) (IMPACT) (set 6)", - "j6tbrdclf", "Thunderbirds Club (JPM) (IMPACT) (set 7)", - "j6tbrdclg", "Thunderbirds Club (JPM) (IMPACT) (set 8)", - "j6tbrdclh", "Thunderbirds Club (JPM) (IMPACT) (set 9)", - "j6tbrdcli", "Thunderbirds Club (JPM) (IMPACT) (set 10)", - "j6tbrdclj", "Thunderbirds Club (JPM) (IMPACT) (set 11)", - "j6tbrdclk", "Thunderbirds Club (JPM) (IMPACT) (set 12)", - "j6tbrdcll", "Thunderbirds Club (JPM) (IMPACT) (set 13)", - "j6thril", "Thriller (Crystal) (IMPACT) (set 1)", - "j6thrila", "Thriller (Crystal) (IMPACT) (set 2)", - "j6tomb", "Tomb Raider (JPM) (IMPACT) (set 1)", - "j6tomba", "Tomb Raider (JPM) (IMPACT) (set 2)", - "j6tombb", "Tomb Raider (JPM) (IMPACT) (set 3)", - "j6tombc", "Tomb Raider (JPM) (IMPACT) (set 4)", - "j6tombd", "Tomb Raider (JPM) (IMPACT) (set 5)", - "j6tombe", "Tomb Raider (JPM) (IMPACT) (set 6)", - "j6tombf", "Tomb Raider (JPM) (IMPACT) (set 7)", - "j6tombg", "Tomb Raider (JPM) (IMPACT) (set 8)", - "j6topflg", "Top Flight (Ace) (IMPACT)", - "j6tqust", "Treasure Quest (Crystal) (IMPACT) (set 1)", - "j6tqusta", "Treasure Quest (Crystal) (IMPACT) (set 2)", - "j6tqustb", "Treasure Quest (Crystal) (IMPACT) (set 3)", - "j6tqustc", "Treasure Quest (Crystal) (IMPACT) (set 4)", - "j6tutti", "Tutti Frutti (Qps) (IMPACT)", - "j6twst", "Twister (Ace) (IMPACT) (set 1)", - "j6twsta", "Twister (Ace) (IMPACT) (set 2)", - "j6twstb", "Twister (Ace) (IMPACT) (set 3)", - "j6twstc", "Twister (Ace) (IMPACT) (set 4)", - "j6twstd", "Twister (Ace) (IMPACT) (set 5)", - "j6twstdt", "Twister (JPM) [Dutch] (IMPACT)", - "j6twste", "Twister (Ace) (IMPACT) (set 6)", - "j6twstf", "Twister (Ace) (IMPACT) (set 7)", - "j6twstg", "Twister (Ace) (IMPACT) (set 8)", - "j6twsth", "Twister (Ace) (IMPACT) (set 9)", - "j6twsti", "Twister (Ace) (IMPACT) (set 10)", - "j6twstj", "Twister (Ace) (IMPACT) (set 11)", - "j6untch", "Untouchables (JPM) (IMPACT) (set 1)", - "j6untcha", "Untouchables (JPM) (IMPACT) (set 2)", - "j6vindal", "Vindaloot (JPM) (IMPACT)", - "j6vivark", "Viva Rock Vegas (JPM) (IMPACT) (set 1)", - "j6vivarka", "Viva Rock Vegas (JPM) (IMPACT) (set 2)", - "j6vivarkb", "Viva Rock Vegas (JPM) (IMPACT) (set 3)", - "j6vivarkc", "Viva Rock Vegas (JPM) (IMPACT) (set 4)", - "j6vivarkd", "Viva Rock Vegas (JPM) (IMPACT) (set 5)", - "j6vivarke", "Viva Rock Vegas (JPM) (IMPACT) (set 6)", - "j6vivarkf", "Viva Rock Vegas (JPM) (IMPACT) (set 7)", - "j6vivarkg", "Viva Rock Vegas (JPM) (IMPACT) (set 8)", - "j6vivarkh", "Viva Rock Vegas (JPM) (IMPACT) (set 9)", - "j6vivarki", "Viva Rock Vegas (JPM) (IMPACT) (set 10)", - "j6vivarkj", "Viva Rock Vegas (JPM) (IMPACT) (set 11)", - "j6vivarkk", "Viva Rock Vegas (JPM) (IMPACT) (set 12)", - "j6vivrkc", "Viva Rock Vegas Club (JPM) (IMPACT) (set 1)", - "j6vivrkca", "Viva Rock Vegas Club (JPM) (IMPACT) (set 2)", - "j6vivrkcb", "Viva Rock Vegas Club (JPM) (IMPACT) (set 3)", - "j6wildw", "Wild West (Ace) (IMPACT) (set 1)", - "j6wildwa", "Wild West (Ace) (IMPACT) (set 2)", - "j6wildwb", "Wild West (Ace) (IMPACT) (set 3)", - "j6wildwc", "Wild West (Ace) (IMPACT) (set 4)", - "j6wildwd", "Wild West (Ace) (IMPACT) (set 5)", - "j6wildwe", "Wild West (Ace) (IMPACT) (set 6)", - "j6wildwf", "Wild West (Ace) (IMPACT) (set 7)", - "j6wildwg", "Wild West (Ace) (IMPACT) (set 8)", - "j6wizard", "Wizard Of Odds (JPM) (IMPACT) (set 1)", - "j6wizarda", "Wizard Of Odds (JPM) (IMPACT) (set 2)", - "j6wizardb", "Wizard Of Odds (JPM) (IMPACT) (set 3)", - "j6wizardc", "Wizard Of Odds (JPM) (IMPACT) (set 4)", - "j6wizardd", "Wizard Of Odds (JPM) (IMPACT) (set 5)", - "j6wizarde", "Wizard Of Odds (JPM) (IMPACT) (set 6)", - "j6wldkng", "Wild King Club (JPM) (IMPACT) (set 1)", - "j6wldknga", "Wild King Club (JPM) (IMPACT) (set 2)", - "j6wthing", "Wild Thing (Empire) (IMPACT) (set 1)", - "j6wthinga", "Wild Thing (Empire) (IMPACT) (set 2)", - "j6wthingb", "Wild Thing (Empire) (IMPACT) (set 3)", - "j7bmagic", "Black Magic (JPM)", - "j7bullio", "Bullionaire (Ace)", - "j7cexprs", "Cash Xpress (JPM)", - "j7clbmag", "Club Magic (JPM)", - "j7crztrl", "Crazy Trails (JPM)", - "j7fantaz", "Fantaztec (JPM)", - "j7kerchn", "Ker - Chinq (JPM)", - "j7r2roll", "Ready To Roll (JPM)", - "j7razzma", "Razzamataz (JPM) (set 1)", - "j7razzmaa", "Razzamataz (JPM) (set 2)", - "j7tubgld", "Turbo Gold (JPM)", - "j7wldwkd", "Wild 'N' Wicked (JPM)", - "j80alad", "Aladdin's Cave (PCP)", - "j80bac", "Bank A Coin (JPM) (SYSTEM80)", - "j80blbnk", "Blankity Bank (PCP) (SYSTEM80)", - "j80bounc", "Bouncer (JPM) (SYSTEM80)", - "j80fortr", "Fortune Trail (JPM)", - "j80frogh", "Frog Hop (JPM) (SYSTEM80)", - "j80fruit", "Fruit Snappa (JPM) (SYSTEM80)", - "j80golds", "Golden Steppa (JPM) (SYSTEM80)", - "j80hotln", "Hot Lines (JPM) (SYSTEM80)", - "j80mster", "Masterspy (Pcp)", - "j80myspn", "Mystery Spin (JPM) (SYSTEM80)", - "j80nudg2", "Nudge Double Up MkII (JPM) (SYSTEM80)", - "j80plsnd", "Plus Nudge (JPM)", - "j80rr", "Road Runner (JPM) (SYSTEM80, set 1)", - "j80rra", "Road Runner (JPM) (SYSTEM80, set 2)", - "j80supbk", "Superbank (JPM) (SYSTEM80)", - "j80supst", "Supa Steppa (JPM) (SYSTEM80)", - "j80topsp", "Top Sprint (JPM) (SYSTEM80)", - "j80topup", "Top Up (JPM) (SYSTEM80)", - "j80tumbl", "Tumble (JPM) (SYSTEM80)", - "j80wsprt", "Winsprint (JPM) (V4, 5x20p) (SYSTEM80)", - "j80wsprt2", "Winsprint (JPM) (V2, 10x10p) (SYSTEM80)", - "j80wsprt3", "Winsprint (JPM) (V3, 50p, 5 credits) (SYSTEM80)", - "j_ewnd20", "Each Way Nudger (Barcrest?, set 3, version 20?)", - "j_ewnda", "Each Way Nudger (Barcrest?, set 2)", - "j_ewnud", "Each Way Nudger (Barcrest?, set 1)", - "j_ews", "Each Way Shifter (Barcrest?, set 1, version 16)", - "j_ews8a", "Each Way Shifter (Barcrest?, set 2, version 8a)", - "j_luck2", "Lucky Twos?", - "j_luckac", "Lucky Aces (Unk)", - "j_nuddup", "Nudge Double Up (JPM SRU, set 1)", - "j_nuddup2", "Nudge Double Up (JPM SRU, set 2)", - "j_plus2", "Plus 2 (JPM)", - "j_super2", "Super 2 (JPM)", - "j_unk", "unknown SRU Game (JPM?)", - "jack", "Jack the Giantkiller (set 1)", - "jack2", "Jack the Giantkiller (set 2)", - "jack2opn", "Jacks to Open", - "jack3", "Jack the Giantkiller (set 3)", - "jackal", "Jackal (World, 8-way Joystick)", - "jackalj", "Tokushu Butai Jackal (Japan, 8-way Joystick)", - "jackalr", "Jackal (World, Rotary Joystick)", - "jackie", "Happy Jackie (v110U)", - "jackler", "Jackler (Jungler bootleg)", - "jackpool", "Jackpot Cards / Jackpot Pool (Italy)", - "jackrabt", "Jack Rabbit (set 1)", - "jackrabt2", "Jack Rabbit (set 2)", - "jackrabts", "Jack Rabbit (special)", - "jailbrek", "Jail Break", - "jailbrekb", "Jail Break (bootleg)", - "jajamaru", "Vs. Ninja Jajamaru Kun (Japan)", - "jambo", "Jambo! Safari (JPN, USA, EXP, KOR, AUS) (Rev A)", - "jamesb", "James Bond (Timed Play)", - "jamesb2", "James Bond (3/5-Ball)", - "janbari", "Mahjong Janjan Baribari (Japan)", - "jangou", "Jangou [BET] (Japan)", - "janjans1", "Lovely Pop Mahjong JangJang Shimasho (Japan)", - "janjans2", "Lovely Pop Mahjong JangJang Shimasho 2 (Japan)", - "jankenmn", "Janken Man Kattara Ageru", - "janoh", "Jan Oh (set 1)", - "janoha", "Jan Oh (set 2)", - "janptr96", "Janputer '96 (Japan)", - "janptrsp", "Janputer Special (Japan)", - "janputer", "New Double Bet Mahjong (bootleg of Janputer)", - "janshi", "Janshi", - "janshin", "Jyanshin Densetsu - Quest of Jongmaster", - "janshinp", "Mahjong Janshin Plus (Japan)", - "jansou", "Jansou (set 1)", - "jansoua", "Jansou (set 2)", - "jantotsu", "4nin-uchi Mahjong Jantotsu", - "jantouki", "Jong Tou Ki (Japan)", - "janyoup2", "Janyou Part II (ver 7.03, July 1 1983)", - "janyuki", "Jong Yu Ki (Japan)", - "jb_10b", "Jack*Bot (1.0B) (Belgium/Canada)", - "jb_10r", "Jack*Bot (1.0R)", - "jchan", "Jackie Chan - The Kung-Fu Master", - "jchan2", "Jackie Chan in Fists of Fire", - "jclub2", "Jockey Club II (newer hardware)", - "jclub2o", "Jockey Club II (older hardware)", - "jclub2ob", "Jockey Club II (older hardware, set 2)", - "jcross", "Jumping Cross", - "jd_l1", "Judge Dredd (L-1)", - "jd_l6", "Judge Dredd (L-6)", - "jd_l7", "Judge Dredd (L-7)", - "jdredd", "Judge Dredd (Rev C Dec. 17 1997)", - "jdreddb", "Judge Dredd (Rev B Nov. 26 1997)", - "jdreddp", "Judge Dredd (rev LA1, prototype)", - "jedi", "Return of the Jedi", - "jestmagi", "Jester Magic (Konami Endeavour)", - "jetfight", "Jet Fighter (Set1) [TTL]", - "jetfighta", "Jet Fighter (Set2) [TTL]", - "jetwave", "Jet Wave (EAB, Euro v1.04)", - "jetwavej", "Jet Wave (JAB, Japan v1.04)", - "jgakuen", "Shiritsu Justice Gakuen: Legion of Heroes (Japan 971117)", - "jigkmgri", "Jigoku Meguri (Japan)", - "jin", "Jin", - "jingbell", "Jingle Bell (Italy, V133I)", - "jingystm", "Jingi Storm - The Arcade (GDL-0037)", - "jitsupro", "Jitsuryoku!! Pro Yakyuu (Japan)", - "jituroku", "Jitsuroku Maru-chi Mahjong (Japan)", - "jjack", "Jumping Jack", - "jjparad2", "Jan Jan Paradise 2", - "jjparads", "Jan Jan Paradise", - "jjpoker", "Jackpot Joker Poker (set 1)", - "jjpokerb", "Jackpot Joker Poker (set 2)", - "jjsquawk", "J. J. Squawkers", - "jjsquawkb", "J. J. Squawkers (bootleg)", - "jjsquawkb2", "J. J. Squawkers (bootleg, Blandia Conversion)", - "jkrmast", "Joker Master", - "jleague", "The J.League 1994 (Japan)", - "jm_12b", "Johnny Mnemonic (1.2B) Belgium", - "jm_12r", "Johnny Mnemonic (1.2R)", - "jmpbreak", "Jumping Break", - "jnero", "Johnny Nero Action Hero", - "jngld_l2", "Jungle Lord (L-2)", - "jngolady", "Jangou Lady (Japan)", - "jockeyc", "Jockey Club", - "jockeygp", "Jockey Grand Prix (set 1)", - "jockeygpa", "Jockey Grand Prix (set 2)", - "joemac", "Tatakae Genshizin Joe & Mac (Japan ver 1)", - "joemacr", "Joe & Mac Returns (World, Version 1.1, 1994.05.27)", - "joemacra", "Joe & Mac Returns (World, Version 1.0, 1994.05.19)", - "jogakuen", "Mahjong Jogakuen (Japan)", - "joinem", "Joinem", - "jojo", "JoJo's Venture (USA 990128)", - "jojoba", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927)", - "jojoban", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927, NO CD)", - "jojobane", "JoJo's Bizarre Adventure (Euro 990927, NO CD)", - "jojobaner1", "JoJo's Bizarre Adventure (Euro 990913, NO CD)", - "jojobanr1", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913, NO CD)", - "jojobar1", "JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913)", - "jojoj", "JoJo no Kimyou na Bouken (Japan 990128)", - "jojojr1", "JoJo no Kimyou na Bouken (Japan 990108)", - "jojojr2", "JoJo no Kimyou na Bouken (Japan 981202)", - "jojon", "JoJo's Venture (Asia 990128, NO CD)", - "jojonr1", "JoJo's Venture (Asia 990108, NO CD)", - "jojonr2", "JoJo's Venture (Asia 981202, NO CD)", - "jojor1", "JoJo's Venture (USA 990108)", - "jojor2", "JoJo's Venture (USA 981202)", - "jokercrd", "Joker Card (Ver.A267BC, encrypted)", - "jokpoker", "Joker Poker (Version 16.03B)", - "jokpokera", "Joker Poker (Version 16.03BI 5-10-85, Joker Poker ICB 9-30-86)", - "jokpokerb", "Joker Poker (Version 16.04BI 10-19-88, Joker Poker ICB 9-30-86)", - "jokpokerc", "Joker Poker (Version 16.03BI 5-10-85, Poker No Raise ICB 9-30-86)", - "jokrpokr", "Joker Poker", - "jokrwild", "Joker's Wild (encrypted)", - "jokrz_l3", "Jokerz! (L-3)", - "jokrz_l6", "Jokerz! (L-6)", - "jollycrd", "Jolly Card (Austrian)", - "jollyjgr", "Jolly Jogger", - "jolyc3x3", "Jolly Card (3x3 deal)", - "jolyc980", "Jolly Card Professional 2.0 (Spale Soft)", - "jolyccra", "Jolly Card (Croatian, set 1)", - "jolyccrb", "Jolly Card (Croatian, set 2)", - "jolycdab", "Jolly Card (Austrian, Fun World, bootleg)", - "jolycdev", "Jolly Card (Evona Electronic)", - "jolycdib", "Jolly Card (Italian, encrypted bootleg, set 1)", - "jolycdic", "Jolly Card (Italian, encrypted bootleg, set 2)", - "jolycdid", "Jolly Card (Italian, different colors, set 1)", - "jolycdie", "Jolly Card (Italian, different colors, set 2)", - "jolycdit", "Jolly Card (Italian, blue TAB board, encrypted)", - "jolycdsp", "Jolly Card (Spanish, blue TAB board, encrypted)", - "jolycmzs", "Jolly Card Professional 2.0 (MZS Tech)", - "jolyjokr", "Jolly Joker (98bet, set 1)", - "jolyjokra", "Jolly Joker (98bet, set 2)", - "jolyjokrb", "Jolly Joker (40bet, Croatian hack)", - "jolypark", "Jolly Park", - "jongbou", "Mahjong Block Jongbou (Japan)", - "jongkyo", "Jongkyo", - "jongtei", "Mahjong Jong-Tei (Japan, ver. NM532-01)", - "josvolly", "Joshi Volleyball", - "journey", "Journey", - "joust", "Joust (White/Green label)", - "joust2", "Joust 2 - Survival of the Fittest", - "joustr", "Joust (Solid Red label)", - "joustwr", "Joust (White/Red label)", - "joyfulr", "Joyful Road (Japan)", - "joyjoy", "Puzzled / Joy Joy Kid (NGM-021)(NGH-021)", - "joyman", "Joyman", - "jpark", "Jurassic Park (World)", - "jpark3", "Jurassic Park 3 (ver EBC)", - "jparkj", "Jurassic Park (Japan, Rev A, Deluxe)", - "jparkja", "Jurassic Park (Japan, Deluxe)", - "jparkjc", "Jurassic Park (Japan, Rev A, Conversion)", - "jpcoin", "Joker Poker (Coinmaster set 1)", - "jpcoin2", "Joker Poker (Coinmaster, Amusement Only)", - "jplstw20", "Lost World: Jurassic Park, The (2.00)", - "jplstw22", "Lost World: Jurassic Park, The (2.02)", - "jpopnics", "Jumping Pop (Nics, Korean bootleg of Plump Pop)", - "jptparty", "Jackpot Party (Russia)", - "jrking", "Junior King (bootleg of Donkey Kong Jr.)", - "jrpacman", "Jr. Pac-Man (11/9/83)", - "jrpacmanf", "Jr. Pac-Man (speedup hack)", - "jrpacmbl", "Jr. Pac-Man (Pengo hardware)", - "jsk", "Joryuu Syougi Kyoushitsu (Japan)", - "jspecter", "Jatre Specter (set 1)", - "jspecter2", "Jatre Specter (set 2)", - "jst_l2", "Joust (L-2)", - "jubileep", "Double-Up Poker (Jubilee)", - "juju", "JuJu Densetsu (Japan)", - "jujub", "JuJu Densetsu (Playmark bootleg)", - "jujuba", "JuJu Densetsu (Japan, bootleg)", - "jumpbug", "Jump Bug", - "jumpbugb", "Jump Bug (bootleg)", - "jumpcoas", "Jump Coaster", - "jumpcoast", "Jump Coaster (Taito)", - "jumping", "Jumping", - "jumpjkpt", "Jumping Jackpots (Russia) (Atronic)", - "jumpkids", "Jump Kids", - "jumppop", "Jumping Pop (set 1)", - "jumppope", "Jumping Pop (set 2)", - "jumpshot", "Jump Shot", - "jumpshotp", "Jump Shot Engineering Sample", - "junai", "Junai - Manatsu no First Kiss (Japan)", - "junai2", "Junai 2 - White Love Story (Japan)", - "jungleby", "Jungle Boy (bootleg)", - "jungleh", "Jungle Hunt (US)", - "junglehbr", "Jungle Hunt (Brazil)", - "junglek", "Jungle King (Japan)", - "junglekas", "Jungle King (alternate sound)", - "junglekj2", "Jungle King (Japan, earlier)", - "jungler", "Jungler", - "junglers", "Jungler (Stern Electronics)", - "junofrst", "Juno First", - "junofrstg", "Juno First (Gottlieb)", - "jupk_501", "Jurassic Park (5.01)", - "jupk_513", "Jurassic Park (5.13)", - "jupk_g51", "Jurassic Park (5.01 Germany)", - "jwildb52", "Joker's Wild (B52 system, set 1)", - "jwildb52a", "Joker's Wild (B52 system, set 2)", - "jwildb52h", "Joker's Wild (B52 system, Harrah's GFX)", - "jy_03", "Junk Yard (0.3)", - "jy_11", "Junk Yard (1.1)", - "jy_12", "Junk Yard (1.2)", - "jyangoku", "Jyangokushi: Haoh no Saihai (Japan 990527)", - "jzth", "Jue Zhan Tian Huang", - "kabukikl", "Far East of Eden - Kabuki Klash / Tengai Makyou - Shin Den", - "kabukiz", "Kabuki-Z (World)", - "kabukizj", "Kabuki-Z (Japan)", - "kageki", "Kageki (US)", - "kagekih", "Kageki (hack)", - "kagekij", "Kageki (Japan)", - "kaguya", "Mahjong Kaguyahime [BET] (Japan 880521)", - "kaguya2", "Mahjong Kaguyahime Sono2 [BET] (Japan 890829)", - "kaguya2f", "Mahjong Kaguyahime Sono2 Fukkokuban [BET] (Japan 010808)", - "kaiserkn", "Kaiser Knuckle (Ver 2.1O 1994/07/29)", - "kaiserknj", "Kaiser Knuckle (Ver 2.1J 1994/07/29)", - "kaitei", "Kaitei Takara Sagashi", - "kaiteids", "Kaitei Daisensou (Japan)", - "kaitein", "Kaitei Takara Sagashi (Namco license)", - "kaiunqz", "Kaiun Quiz (Japan, KW1/VER.A)", - "kakumei", "Mahjong Kakumei (Japan)", - "kakumei2", "Mahjong Kakumei 2 - Princess League (Japan)", - "kamakazi3", "Kamakazi III (superg hack)", - "kamenrid", "Masked Riders Club Battle Race", - "kamikaze", "Kamikaze", - "kamikcab", "Kamikaze Cabbie", - "kanatuen", "Kanatsuen no Onna [BET] (Japan 880905)", - "kangaroo", "Kangaroo", - "kangarooa", "Kangaroo (Atari)", - "kangaroob", "Kangaroo (bootleg)", - "kaos", "Kaos", - "karatblz", "Karate Blazers (World)", - "karatblzj", "Karate Blazers (Japan)", - "karatblzu", "Karate Blazers (US)", - "karatedo", "Karate Dou (Japan)", - "karatevs", "Taisen Karate Dou (Japan VS version)", - "karatour", "The Karate Tournament", - "karianx", "Karian Cross (Rev. 1.0)", - "karnov", "Karnov (US, rev 6)", - "karnova", "Karnov (US, rev 5)", - "karnovj", "Karnov (Japan)", - "karnovr", "Karnov's Revenge / Fighter's History Dynamite", - "karous", "Karous (GDL-0040)", - "kartduel", "Kart Duel (Japan, KTD1/VER.A)", - "kas89", "Kasino '89", - "kazan", "Ninja Kazan (World)", - "kbash", "Knuckle Bash", - "kbash2", "Knuckle Bash 2 (bootleg)", - "kbm", "Keyboardmania", - "kbm2nd", "Keyboardmania 2nd Mix", - "kbm3rd", "Keyboardmania 3rd Mix", - "kchamp", "Karate Champ (US)", - "kchampvs", "Karate Champ (US VS version, set 1)", - "kchampvs2", "Karate Champ (US VS version, set 2)", - "kdeadeye", "Dead Eye (GV054 UAA01)", - "kdynastg", "King of Dynast Gear (version 1.8)", - "keith", "Keith Courage In Alpha Zones", - "keithlcy", "Dramatic Adventure Quiz Keith & Lucy (Japan)", - "keks", "Keks (060328 World)", - "keks_2", "Keks (060403 World)", - "keks_2a", "Keks (bootleg, 060403, banking address hack)", - "keks_2b", "Keks (bootleg, 060403, banking address hack, changed version text)", - "keks_2c", "Keks (bootleg, 060403, VIDEO GAME-1 KS01 set 1)", - "keks_2d", "Keks (bootleg, 060403, VIDEO GAME-1 KS01 set 2)", - "keks_2e", "Keks (bootleg, 060403, banking address hack, payout percentage 60)", - "keks_2f", "Keks (bootleg, 060403, LOTTOGAME (I))", - "keks_2g", "Keks (bootleg, 060403, LOTOS KS01)", - "keks_3", "Keks (070119 Russia)", - "keks_3a", "Keks (bootleg, 070119, banking address hack set 1)", - "keks_3b", "Keks (bootleg, 070119, banking address hack set 2)", - "keks_4", "Keks (090604 Lottery)", - "keks_5", "Keks (090727 Entertainment)", - "keksa", "Keks (bootleg, 060328, banking address hack)", - "keksb", "Keks (bootleg, 060328, backdoor)", - "keksc", "Keks (bootleg, 060328, banking address hack, changed version text)", - "kengo", "Ken-Go", - "keroppi", "Kero Kero Keroppi's Let's Play Together (USA, Version 2.0)", - "keroppij", "Kero Kero Keroppi no Issyoni Asobou (Japan)", - "ket", "Ketsui: Kizuna Jigoku Tachi (2003/01/01. Master Ver.)", - "keta", "Ketsui: Kizuna Jigoku Tachi (2003/01/01 Master Ver.)", - "ketb", "Ketsui: Kizuna Jigoku Tachi (2003/01/01 Master Ver)", - "keyboard", "La Keyboard (GDS-0017)", - "kf10thep", "The King of Fighters 10th Anniversary Extra Plus (The King of Fighters 2002 bootleg)", - "kf2k2mp", "The King of Fighters 2002 Magic Plus (bootleg)", - "kf2k2mp2", "The King of Fighters 2002 Magic Plus II (bootleg)", - "kf2k2pla", "The King of Fighters 2002 Plus (bootleg set 2)", - "kf2k2pls", "The King of Fighters 2002 Plus (bootleg set 1)", - "kf2k3bl", "The King of Fighters 2003 (bootleg set 1)", - "kf2k3bla", "The King of Fighters 2003 (bootleg set 2)", - "kf2k3pcb", "The King of Fighters 2003 (Japan, JAMMA PCB)", - "kf2k3pl", "The King of Fighters 2004 Plus / Hero (The King of Fighters 2003 bootleg)", - "kf2k3upl", "The King of Fighters 2004 Ultra Plus (The King of Fighters 2003 bootleg)", - "kf2k5uni", "The King of Fighters 10th Anniversary 2005 Unique (The King of Fighters 2002 bootleg)", - "kftgoal", "Kick for the Goal", - "kgbird", "K.G. Bird (4VXFC5341, New Zealand, 5c)", - "kgbirda", "K.G. Bird (4VXFC5341, New Zealand, 10c)", - "kick", "Kick (upright)", - "kick4csh", "Kick '4' Cash", - "kickboy", "Kick Boy", - "kickc", "Kick (cocktail)", - "kicker", "Kicker", - "kickgoal", "Kick Goal", - "kickman", "Kickman (upright)", - "kicknrun", "Kick and Run (World)", - "kicknrunu", "Kick and Run (US)", - "kickoff", "Kick Off (Japan)", - "kickridr", "Kick Rider", - "kidniki", "Kid Niki - Radical Ninja (World)", - "kidnikiu", "Kid Niki - Radical Ninja (US)", - "kikaioh", "Choukou Senki Kikaioh (Japan 980914)", - "kikcubic", "Meikyu Jima (Japan)", - "kikcubicb", "Kickle Cubele", - "kikikai", "KiKi KaiKai", - "kikstart", "Kick Start - Wheelie King", - "killbld", "The Killing Blade (ver. 109, Chinese Board)", - "killbld104", "The Killing Blade (ver. 104)", - "killbldp", "The Killing Blade Plus (China, ver. 300)", - "killcom", "Killer Comet", - "kimbldhl", "Kimble Double HI-LO", - "kimblz80", "Kimble Double HI-LO (z80 version)", - "kingball", "King & Balloon (US)", - "kingballj", "King & Balloon (Japan)", - "kingdmgp", "Kingdom Grandprix", - "kingdrbb", "King Derby (Taiwan bootleg)", - "kingdrbb2", "King Derby (bootleg set 2)", - "kingdrby", "King Derby (1981)", - "kingofb", "King of Boxer (English)", - "kingpin", "Kingpin", - "kingrt66", "King of Route 66 (Rev A)", - "kingt_l1", "King Tut (Shuffle) (L-1)", - "kingtut", "King Tut (NSW, Australia)", - "kinniku", "Kinnikuman Muscle Grand Prix (KN1 Ver. A)", - "kinst", "Killer Instinct (v1.5d)", - "kinst13", "Killer Instinct (v1.3)", - "kinst14", "Killer Instinct (v1.4)", - "kinst2", "Killer Instinct 2 (v1.4)", - "kinst210", "Killer Instinct 2 (v1.0)", - "kinst211", "Killer Instinct 2 (v1.1)", - "kinst213", "Killer Instinct 2 (v1.3)", - "kinst2k3", "Killer Instinct 2 (v1.3k, upgrade kit)", - "kinst2k4", "Killer Instinct 2 (v1.4k, upgrade kit)", - "kinstb", "Killer Instinct (SNES bootleg)", - "kinstp", "Killer Instinct (proto v4.7)", - "kirameki", "Kirameki Star Road (Ver 2.10J 1997/08/29)", - "kirarast", "Ryuusei Janshi Kirara Star", - "kisekaeh", "Kisekae Hanafuda", - "kisekaem", "Kisekae Mahjong", - "kiss", "Kiss", - "kissp", "Kiss (prototype)", - "kittenk", "Kitten Kaboodle", - "kiwame", "Pro Mahjong Kiwame", - "kiwames", "Pro Mahjong Kiwame S (J 951020 V1.208)", - "kizuna", "Kizuna Encounter - Super Tag Battle / Fu'un Super Tag Battle", - "kizuna4p", "Kizuna Encounter - Super Tag Battle 4 Way Battle Version / Fu'un Super Tag Battle Special Version", - "kkotnoli", "Kkot No Li (Kill the Bees)", - "klax", "Klax (set 1)", - "klax2", "Klax (set 2)", - "klax3", "Klax (set 3)", - "klaxd", "Klax (Germany)", - "klaxj", "Klax (Japan)", - "klaxp1", "Klax (prototype set 1)", - "klaxp2", "Klax (prototype set 2)", - "klondkp", "KlonDike+", - "klxyj", "Kuai Le Xi You Ji", - "knckhead", "Knuckle Heads (World)", - "knckheadj", "Knuckle Heads (Japan)", - "knckheadjp", "Knuckle Heads (Japan, Prototype?)", - "kncljoe", "Knuckle Joe (set 1)", - "kncljoea", "Knuckle Joe (set 2)", - "kngtmare", "Knightmare (prototype)", - "knightb", "Knight Boy", - "knights", "Knights of the Round (World 911127)", - "knightsb", "Knights of the Round (bootleg)", - "knightsj", "Knights of the Round (Japan 911127, B-Board 91634B-2)", - "knightsja", "Knights of the Round (Japan 911127, B-Board 89625B-1)", - "knightsu", "Knights of the Round (USA 911127)", - "knockout", "Knock Out!! (bootleg?)", - "knpuzzle", "Kotoba no Puzzle Mojipittan (Japan, KPM1 Ver.A)", - "kod", "The King of Dragons (World 910805)", - "kodb", "The King of Dragons (bootleg)", - "kodj", "The King of Dragons (Japan 910805, B-Board 90629B-3)", - "kodja", "The King of Dragons (Japan 910805, B-Board 89625B-1)", - "kodr1", "The King of Dragons (World 910711)", - "kodu", "The King of Dragons (USA 910910)", - "kof10th", "The King of Fighters 10th Anniversary (The King of Fighters 2002 bootleg)", - "kof2000", "The King of Fighters 2000 (NGM-2570) (NGH-2570)", - "kof2000n", "The King of Fighters 2000 (not encrypted)", - "kof2001", "The King of Fighters 2001 (NGM-262?)", - "kof2001h", "The King of Fighters 2001 (NGH-2621)", - "kof2002", "The King of Fighters 2002 (NGM-2650)(NGH-2650)", - "kof2002b", "The King of Fighters 2002 (bootleg)", - "kof2003", "The King of Fighters 2003 (NGM-2710)", - "kof2003h", "The King of Fighters 2003 (NGH-2710)", - "kof2k4se", "The King of Fighters Special Edition 2004 (The King of Fighters 2002 bootleg)", - "kof94", "The King of Fighters '94 (NGM-055)(NGH-055)", - "kof95", "The King of Fighters '95 (NGM-084)", - "kof95a", "The King of Fighters '95 (NGM-084), alternate board", - "kof95h", "The King of Fighters '95 (NGH-084)", - "kof96", "The King of Fighters '96 (NGM-214)", - "kof96h", "The King of Fighters '96 (NGH-214)", - "kof97", "The King of Fighters '97 (NGM-2320)", - "kof97h", "The King of Fighters '97 (NGH-2320)", - "kof97k", "The King of Fighters '97 (Korean release)", - "kof97oro", "The King of Fighters '97 Oroshi Plus 2003 (bootleg)", - "kof97pls", "The King of Fighters '97 Plus (bootleg)", - "kof98", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGM-2420)", - "kof98a", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGM-2420, alternate board)", - "kof98h", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGH-2420)", - "kof98k", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board)", - "kof98ka", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board 2)", - "kof98um", "The King of Fighters '98: Ultimate Match (v1.00)", - "kof99", "The King of Fighters '99 - Millennium Battle (NGM-2510)", - "kof99e", "The King of Fighters '99 - Millennium Battle (earlier)", - "kof99h", "The King of Fighters '99 - Millennium Battle (NGH-2510)", - "kof99k", "The King of Fighters '99 - Millennium Battle (Korean release)", - "kof99p", "The King of Fighters '99 - Millennium Battle (prototype)", - "kofnw", "The King of Fighters Neowave", - "kofnwj", "The King of Fighters Neowave (Japan)", - "koftball", "King of Football", - "kofxi", "The King of Fighters XI", - "kog", "King of Gladiator (The King of Fighters '97 bootleg)", - "koikoi", "Koi Koi Part 2", - "koikois", "Koi Koi Shimasho", - "koikois2", "Koi Koi Shimasho 2 - Super Real Hanafuda (Japan)", - "koinomp", "Mahjong Koi no Magic Potion (Japan)", - "kok", "Povar / Sobrat' Buran / Agroprom (Arcade multi-game bootleg of ZX Spectrum 'Cookie', 'Jetpac' & 'Pssst')", - "kokoroj2", "Kokoroji 2", - "kollon", "Kollon (V2.04J)", - "kollonc", "Kollon (V2.04JC)", - "konam80a", "Konami 80's AC Special (GC826 VER. AAA)", - "konam80j", "Konami 80's Gallery (GC826 VER. JAA)", - "konam80k", "Konami 80's AC Special (GC826 VER. KAA)", - "konam80s", "Konami 80's AC Special (GC826 VER. EAA)", - "konam80u", "Konami 80's AC Special (GC826 VER. UAA)", - "konami88", "Konami '88", - "konamigt", "Konami GT", - "konamigv", "Baby Phoenix/GV System", - "konamigx", "System GX", - "konek", "Konek-Gorbunok", - "kong", "Kong (Donkey Kong conversion on Galaxian hardware)", - "konotako", "Kono Tako (10021 Ver.A)", - "kontest", "Konami Test Board (GX800, Japan)", - "konzero", "Zero (Konami Endeavour)", - "kopunch", "KO Punch", - "korinai", "Mahjong-zukino Korinai Menmen (Japan 880425)", - "korinaim", "Mahjong-zukino Korinai Menmen [BET] (Japan 880920)", - "korokoro", "Koro Koro Quest (Japan)", - "koroleva", "Snezhnaja Koroleva", - "korosuke", "Korosuke Roller (Japan)", - "koshien", "Ah Eikou no Koshien (Japan)", - "kosmokil", "Kosmo Killer", - "kosteel", "Kings of Steel", - "kotbinsp", "Kkot Bi Nyo Special (Korea)", - "kotbinyo", "Kkot Bi Nyo (Korea)", - "kothello", "Kyuukyoku no Othello", - "kotm", "King of the Monsters (set 1)", - "kotm2", "King of the Monsters 2 - The Next Thing (NGM-039)(NGH-039)", - "kotm2p", "King of the Monsters 2 - The Next Thing (prototype)", - "kotmh", "King of the Monsters (set 2)", - "kouyakyu", "The Koukouyakyuh", - "kov", "Knights of Valour / Sangoku Senki (ver. 117)", - "kov100", "Knights of Valour / Sangoku Senki (ver. 100, Japanese Board)", - "kov115", "Knights of Valour / Sangoku Senki (ver. 115)", - "kov2", "Knights of Valour 2 / Sangoku Senki 2 (ver. 107, 102, 100HK)", - "kov2100", "Knights of Valour 2 / Sangoku Senki 2 (ver. 100, 100, 100HK)", - "kov2101", "Knights of Valour 2 / Sangoku Senki 2 (ver. 101, 101, 100HK)", - "kov2102", "Knights of Valour 2 / Sangoku Senki 2 (ver. 102, 101, 100HK)", - "kov2103", "Knights of Valour 2 / Sangoku Senki 2 (ver. 103, 101, 100HK)", - "kov2106", "Knights of Valour 2 / Sangoku Senki 2 (ver. 106, 102, 100KH)", - "kov2nl", "Knights of Valour 2 New Legend (V302, China)", - "kov2nlo", "Knights of Valour 2 New Legend (V301, China)", - "kov2p", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M205XX, 200, 100CN)", - "kov2p202", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M202XX, 200, 100CN)", - "kov2p204", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M204XX, 200, 100CN)", - "kov3", "Knights of Valour 3 (V102, China)", - "kov7sprt", "Knights of Valour - The Seven Spirits", - "kovlsjb", "Knights of Valour: Luan Shi Jie Ba / Sangoku Senki: Luan Shi Jie Ba (ver. 200CN, set 1)", - "kovlsjba", "Knights of Valour: Luan Shi Jie Ba / Sangoku Senki: Luan Shi Jie Ba (ver. 200CN, set 2)", - "kovlsqh", "Knights of Valour: Luan Shi Quan Huang / Sangoku Senki: Luan Shi Quan Huang (ver. 200CN)", - "kovlsqh2", "Knights of Valour: Luan Shi Quan Huang 2 / Sangoku Senki: Luan Shi Quan Huang 2 (ver. 200CN)", - "kovplus", "Knights of Valour Plus / Sangoku Senki Plus (ver. 119, set 1)", - "kovplusa", "Knights of Valour Plus / Sangoku Senki Plus (ver. 119, set 2)", - "kovqhsgs", "Knights of Valour: Quan Huang San Guo Special / Sangoku Senki: Quan Huang San Guo Special (ver. 303CN)", - "kovsgqyz", "Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 1)", - "kovsgqyza", "Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 2)", - "kovsgqyzb", "Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 3)", - "kovsh", "Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 104, CN)", - "kovsh101", "Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 101, CN)", - "kovsh102", "Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 102, CN)", - "kovsh103", "Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 103, CN)", - "kovshp", "Knights of Valour Super Heroes Plus / Sangoku Senki Super Heroes Plus (ver. 101)", - "kovshpa", "Knights of Valour Super Heroes Plus / Sangoku Senki Super Heroes Plus (ver. 100)", - "kovshxas", "Knights of Valour: Aoshi Sanguo / Sangoku Senki: Aoshi Sanguo (ver. 202CN)", - "kovytzy", "Knights of Valour: Yi Tong Zhong Yuan / Sangoku Senki: Yi Tong Zhong Yuan (ver. 201, China)", - "kozure", "Kozure Ookami (Japan)", - "kpv106", "Kingpin (Pinball)", - "kram", "Kram (set 1)", - "kram2", "Kram (set 2)", - "kram3", "Kram (encrypted)", - "kroozr", "Kozmik Kroozr", - "krull", "Krull", - "krullp", "Krull (Pinball)", - "krzybowl", "Krazy Bowl", - "ksayakyu", "Kusayakyuu", - "ktiger", "Kyukyoku Tiger (Japan)", - "ktiger2", "Kyukyoku Tiger II (Ver 2.1J 1995/11/30)", - "kuhga", "Kuhga - Operation Code 'Vapor Trail' (Japan revision 3)", - "kungfub", "Kung-Fu Master (bootleg set 1)", - "kungfub2", "Kung-Fu Master (bootleg set 2)", - "kungfum", "Kung-Fu Master (World)", - "kungfumd", "Kung-Fu Master (US)", - "kungfur", "Kung-Fu Roushi", - "kungfut", "Kung-Fu Taikun (set 1)", - "kungfuta", "Kung-Fu Taikun (set 2)", - "kuniokun", "Nekketsu Kouha Kunio-kun (Japan)", - "kuniokunb", "Nekketsu Kouha Kunio-kun (Japan bootleg)", - "kurikint", "Kuri Kinton (World)", - "kurikinta", "Kuri Kinton (World, prototype?)", - "kurikintj", "Kuri Kinton (Japan)", - "kurikintu", "Kuri Kinton (US)", - "kurucham", "Kurukuru Chameleon (GDL-0034)", - "kurufev", "Kurukuru Fever", - "kurukuru", "Kuru Kuru Pyon Pyon (Japan)", - "kviper", "Konami Viper BIOS", - "kyros", "Kyros", - "kyrosj", "Kyros No Yakata (Japan)", - "kyuhito", "Kyukyoku no Hito [BET] (Japan 880824)", - "kyukaidk", "Kyuukai Douchuuki (Japan, new version (Rev B))", - "kyukaidko", "Kyuukai Douchuuki (Japan, old version)", - "kyustrkr", "Last Striker / Kyuukyoku no Striker", - "kz26", "KZ-26", - "labyrunr", "Labyrinth Runner (Japan)", - "labyrunrk", "Labyrinth Runner (World Ver. K)", - "lacrazyc", "Let's Attack Crazy Cross (GV027 Asia 1.10)", - "ladybgb2", "Lady Bug (bootleg set 2)", - "ladybug", "Lady Bug", - "ladybugb", "Lady Bug (bootleg set 1)", - "ladybugg", "Lady Bug (bootleg on Galaxian hardware)", - "ladyfrog", "Lady Frog", - "ladygolf", "Vs. Stroke & Match Golf (Ladies Version, set LG4 ?)", - "ladygolfe", "Vs. Stroke & Match Golf (Ladies Version, set LG4 E)", - "ladykill", "Lady Killer", - "ladylinr", "Lady Liner", - "ladyluck", "Lady Luck", - "ladylukt", "Lady Luck (Taito)", - "ladymstr", "Lady Master of Kung Fu", - "ladyshot", "Lady Sharpshooter", - "ladyshota", "Lady Sharpshooter (alternate set)", - "lagirl", "LA Girl", - "lagunar", "Laguna Racer", - "lah_110", "Last Action Hero (1.10)", - "lah_112", "Last Action Hero (1.12)", - "lah_l104", "Last Action Hero (1.04 Spain)", - "lah_l108", "Last Action Hero (1.08 Spain)", - "lamachin", "L.A. Machineguns", - "landbrk", "Land Breaker (World) / Miss Tang Ja Ru Gi (Korea) (pcb ver 3.02)", - "landbrka", "Land Breaker (World) / Miss Tang Ja Ru Gi (Korea) (pcb ver 3.03) (AT89c52 protected)", - "landgear", "Landing Gear (Ver 4.2 O)", - "landgeara", "Landing Gear (Ver 3.1 O)", - "landgearj", "Landing Gear (Ver 4.2 J)", - "landgearja", "Landing Gear (Ver 3.0 J)", - "landhigh", "Landing High Japan", - "landmakr", "Land Maker (Ver 2.01J 1998/06/01)", - "landmakrp", "Land Maker (Ver 2.02O 1998/06/02) (Prototype)", - "lans2004", "Lansquenet 2004 (Shock Troopers - 2nd Squad bootleg)", - "lapbylap", "Lap By Lap", - "laperla", "La Perla Nera (Ver 2.0)", - "laperlag", "La Perla Nera Gold (Ver 2.0)", - "laser", "Astro Laser (bootleg of Space Laser)", - "laser2k1", "Laser 2001 (Ver 1.2)", - "laserbas", "Laser Base (set 1)", - "laserbasa", "Laser Base (set 2)", - "laserbat", "Laser Battle", - "lasso", "Lasso", - "lasstixx", "Laser Strixx 2", - "lastbank", "Last Bank (v1.16)", - "lastbh", "The Last Bounty Hunter v0.06", - "lastblad", "The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGM-2340)", - "lastbladh", "The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGH-2340)", - "lastbld2", "The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (NGM-2430)(NGH-2430)", - "lastbrnx", "Last Bronx (Export, Revision A)", - "lastbrnxj", "Last Bronx (Japan, Revision A)", - "lastbrnxu", "Last Bronx (USA, Revision A)", - "lastday", "The Last Day (set 1)", - "lastdaya", "The Last Day (set 2)", - "lastduel", "Last Duel (US New Ver.)", - "lastduelb", "Last Duel (bootleg)", - "lastduelj", "Last Duel (Japan)", - "lastduelo", "Last Duel (US Old Ver.)", - "lastfght", "Last Fighting", - "lastfort", "Last Fortress - Toride", - "lastforte", "Last Fortress - Toride (Erotic, Rev C)", - "lastfortea", "Last Fortress - Toride (Erotic, Rev A)", - "lastfortg", "Last Fortress - Toride (German)", - "lastfortk", "Last Fortress - Toride (Korea)", - "lastlap", "Last Lap", - "lastmisn", "Last Mission (US revision 6)", - "lastmisnj", "Last Mission (Japan)", - "lastmisno", "Last Mission (US revision 5)", - "lastsold", "The Last Soldier (Korean release of The Last Blade)", - "laststar", "The Last Starfighter (prototype)", - "lastsurv", "Last Survivor (Japan, FD1094 317-0083)", - "lasvegas", "Las Vegas, Nevada", - "lazarian", "Lazarian", - "lazercmd", "Lazer Command", - "lazrlord", "Lazer Lord", - "lbeach", "Long Beach", - "lbgrande", "Libero Grande (Asia, LG2/VER.A)", - "lbgrandeja", "Libero Grande (Japan, LG1/VER.A)", - "lbowling", "League Bowling (NGM-019)(NGH-019)", - "lc_11", "League Champ (1.1)", - "lca", "Lights...Camera...Action!", - "lca2", "Lights...Camera...Action! (rev.2)", - "ldrink", "Lucky Drink (set 1)", - "ldrinka", "Lucky Drink (set 2)", - "ldrun", "Lode Runner (set 1)", - "ldrun2", "Lode Runner II - The Bungeling Strikes Back", - "ldrun3", "Lode Runner III - The Golden Labyrinth", - "ldrun3j", "Lode Runner III - Majin No Fukkatsu", - "ldrun4", "Lode Runner IV - Teikoku Karano Dasshutsu", - "ldruna", "Lode Runner (set 2)", - "le2", "Lethal Enforcers II: Gun Fighters (ver EAA)", - "le2j", "Lethal Enforcers II: The Western (ver JAA)", - "le2u", "Lethal Enforcers II: Gun Fighters (ver UAA)", - "leadang", "Lead Angle (Japan)", - "leader", "Leader", - "leaguemn", "Yakyuu Kakutou League-Man (Japan)", - "lectrono", "Lectronamo", - "ledstorm", "Led Storm (US)", - "ledstorm2", "Led Storm Rally 2011 (US)", - "legend", "Legend", - "legendb", "Legion (bootleg of Legend)", - "legendoh", "Legend of Heroes", - "legendos", "Legend of Success Joe / Ashita no Joe Densetsu", - "legion", "Legion - Spinner-87 (World ver 2.03)", - "legionna", "Legionnaire (World)", - "legionnau", "Legionnaire (US)", - "legiono", "Chouji Meikyuu Legion (Japan bootleg ver 1.05)", - "legofair", "Koukuu Kihei Monogatari - The Legend of Air Cavalry (Japan)", - "leking", "Le King", - "lemans24", "Le Mans 24 (Revision B)", - "lemmings", "Lemmings (US prototype)", - "lemnangl", "Mahjong Lemon Angel (Japan)", - "leprechn", "Leprechaun", - "leprechp", "Leprechaun (Pacific)", - "leprgld", "Leprechaun's Gold (Russia)", - "lethalen", "Lethal Enforcers (ver UAE, 11/19/92 15:04)", - "lethaleneab", "Lethal Enforcers (ver EAB, 10/14/92 19:53)", - "lethaleneae", "Lethal Enforcers (ver EAE, 11/19/92 16:24)", - "lethalenj", "Lethal Enforcers (ver JAD, 12/04/92 17:16)", - "lethalenua", "Lethal Enforcers (ver UAA, 08/17/92 21:38)", - "lethalenub", "Lethal Enforcers (ver UAB, 09/01/92 11:12)", - "lethalenux", "Lethal Enforcers (ver unknown, US, 08/06/92 15:11, hacked/proto?)", - "lethalj", "Lethal Justice", - "lethalth", "Lethal Thunder (World)", - "levers", "Levers", - "lghost", "Laser Ghost (World, FD1094 317-0166)", - "lghostu", "Laser Ghost (US, FD1094 317-0165)", - "lgp", "Laser Grand Prix", - "lgtnfght", "Lightning Fighters (World)", - "lgtnfghta", "Lightning Fighters (Asia)", - "lgtnfghtu", "Lightning Fighters (US)", - "lhaunt_10", "Lucky Haunter (090712 Entertainment)", - "lhaunt_11", "Lucky Haunter (100331 Entertainment)", - "lhaunt_2", "Lucky Haunter (030804 World)", - "lhaunt_4", "Lucky Haunter (031111 World)", - "lhaunt_4a", "Lucky Haunter (bootleg, 031111, backdoor)", - "lhaunt_5", "Lucky Haunter (040216 World)", - "lhaunt_5a", "Lucky Haunter (bootleg, 040216, backdoor)", - "lhaunt_6", "Lucky Haunter (040825 World)", - "lhaunt_6a", "Lucky Haunter (bootleg, 040825, backdoor)", - "lhaunt_6b", "Lucky Haunter (bootleg, 040825, VIDEO GAME-1 PB01)", - "lhaunt_6c", "Lucky Haunter (bootleg, 040825, changed version text)", - "lhaunt_6d", "Lucky Haunter (bootleg, 040825, LOTTOGAME (I))", - "lhaunt_6e", "Lucky Haunter (bootleg, 040825, LOTO PROGRAM V-LH2)", - "lhaunt_6f", "Lucky Haunter (bootleg, 040825, LOTOS PB01)", - "lhaunt_7", "Lucky Haunter (070402 Russia)", - "lhaunt_8", "Lucky Haunter (070604 Russia)", - "lhb", "Long Hu Bang (China, V035C)", - "lhb2", "Long Hu Bang II (Hong Kong, V185H)", - "lhbv33c", "Long Hu Bang (China, V033C)", - "lhzb2", "Mahjong Long Hu Zheng Ba 2 (set 1)", - "lhzb2a", "Mahjong Long Hu Zheng Ba 2 (VS221M)", - "lhzb3", "Long Hu Zheng Ba 3", - "lhzb4", "Long Hu Zheng Ba 4", - "liberate", "Liberation", - "liberateb", "Liberation (bootleg)", - "liberatr", "Liberator (set 1)", - "liberatr2", "Liberator (set 2)", - "liblrabl", "Libble Rabble", - "lifefrce", "Lifeforce (US)", - "lifefrcej", "Lifeforce (Japan)", - "lightbr", "Light Bringer (Ver 2.2O 1994/04/08)", - "lightbrj", "Light Bringer (Ver 2.1J 1994/02/18)", - "lightnin", "Lightning", - "lindbios", "Sega Lindbergh Bios", - "linkypip", "Linky Pipe", - "liquidk", "Liquid Kids (World)", - "liquidku", "Liquid Kids (US)", - "lithero", "Little Hero", - "littlerb", "Little Robin", - "livegal", "Live Gal (Japan 870530)", - "livequiz", "Live Quiz Show", - "lizard", "Pinball Lizard", - "lizwiz", "Lizard Wizard", - "lkage", "The Legend of Kage", - "lkageb", "The Legend of Kage (bootleg set 1)", - "lkageb2", "The Legend of Kage (bootleg set 2)", - "lkageb3", "The Legend of Kage (bootleg set 3)", - "lkageo", "The Legend of Kage (older)", - "lkageoo", "The Legend of Kage (oldest)", - "llander", "Lunar Lander (rev 2)", - "llander1", "Lunar Lander (rev 1)", - "llcharm", "Lucky Lady's Charm (set 1)", - "llcharma", "Lucky Lady's Charm (set 2)", - "lluck3x3", "Lucky Lady (3x3 deal)", - "lluck4x1", "Lucky Lady (4x1 aces)", - "lnc", "Lock'n'Chase", - "lockload", "Locked 'n Loaded (World)", - "lockloadu", "Locked 'n Loaded (US, Dragon Gun conversion)", - "lockon", "Lock-On (rev. E)", - "lockonc", "Lock-On (rev. C)", - "locoboot", "Loco-Motion (bootleg)", - "locomotn", "Loco-Motion", - "locomotp", "Locomotion", - "loderndf", "Lode Runner - The Dig Fight (ver. B)", - "loderndfa", "Lode Runner - The Dig Fight (ver. A)", - "loffire", "Line of Fire / Bakudan Yarou (World, FD1094 317-0136)", - "loffirej", "Line of Fire / Bakudan Yarou (Japan, FD1094 317-0134)", - "loffireu", "Line of Fire / Bakudan Yarou (US, FD1094 317-0135)", - "logger", "Logger", - "logicpr2", "Logic Pro 2 (Japan)", - "logicpro", "Logic Pro (Japan)", - "loht", "Legend of Hero Tonma", - "lohtb", "Legend of Hero Tonma (unprotected bootleg)", - "lohtb2", "Legend of Hero Tonma (Japan, bootleg with i8751)", - "lohtj", "Legend of Hero Tonma (Japan)", - "lol", "Life of Luxury (Russia)", - "lomakai", "Legend of Makai (World)", - "looper", "Looper", - "looping", "Looping", - "loopingv", "Looping (Venture Line license, set 1)", - "loopingva", "Looping (Venture Line license, set 2)", - "lordgun", "Lord of Gun (USA)", - "lordofk", "The Lord of King (Japan)", - "lortium", "Lortium", - "lostspc", "Lost in Space", - "losttomb", "Lost Tomb (easy)", - "losttombh", "Lost Tomb (hard)", - "lostwrld", "Lost Worlds (Japan)", - "lostwrldo", "Lost Worlds (Japan Old Ver.)", - "lostwrlp", "Lost World", - "lostwsga", "The Lost World (Revision A)", - "lotlot", "Lot Lot", - "lotr", "Lord Of The Rings, The (10.00)", - "lotr401", "Lord Of The Rings, The (4.01)", - "lotr410", "Lord Of The Rings, The (4.10)", - "lotr5", "Lord Of The Rings, The (5.00)", - "lotr501", "Lord Of The Rings, The (5.01)", - "lotr6", "Lord Of The Rings, The (6.00)", - "lotr7", "Lord Of The Rings, The (7.00)", - "lotr8", "Lord Of The Rings, The (8.00)", - "lotr9", "Lord Of The Rings, The (9.00)", - "lotr_fr", "Lord Of The Rings, The (10.00 France)", - "lotr_fr401", "Lord Of The Rings, The (4.01 France)", - "lotr_fr410", "Lord Of The Rings, The (4.10 France)", - "lotr_fr5", "Lord Of The Rings, The (5.0 France)", - "lotr_fr501", "Lord Of The Rings, The (5.01 France)", - "lotr_fr6", "Lord Of The Rings, The (6.0 France)", - "lotr_fr7", "Lord Of The Rings, The (7.0 France)", - "lotr_fr8", "Lord Of The Rings, The (8.0 France)", - "lotr_fr9", "Lord Of The Rings, The (9.0 France)", - "lotr_gr", "Lord Of The Rings, The (10.00 Germany)", - "lotr_gr401", "Lord Of The Rings, The (4.01 Germany)", - "lotr_gr410", "Lord Of The Rings, The (4.10 Germany)", - "lotr_gr5", "Lord Of The Rings, The (5.0 Germany)", - "lotr_gr501", "Lord Of The Rings, The (5.01 Germany)", - "lotr_gr6", "Lord Of The Rings, The (6.0 Germany)", - "lotr_gr7", "Lord Of The Rings, The (7.0 Germany)", - "lotr_gr8", "Lord Of The Rings, The (8.0 Germany)", - "lotr_gr9", "Lord Of The Rings, The (9.0 Germany)", - "lotr_it", "Lord Of The Rings, The (10.00 Italy)", - "lotr_it401", "Lord Of The Rings, The (4.01 Italy)", - "lotr_it410", "Lord Of The Rings, The (4.10 Italy)", - "lotr_it5", "Lord Of The Rings, The (5.0 Italy)", - "lotr_it501", "Lord Of The Rings, The (5.01 Italy)", - "lotr_it6", "Lord Of The Rings, The (6.0 Italy)", - "lotr_it7", "Lord Of The Rings, The (7.0 Italy)", - "lotr_it8", "Lord Of The Rings, The (8.0 Italy)", - "lotr_it9", "Lord Of The Rings, The (9.0 Italy)", - "lotr_le", "Lord Of The Rings, The (10.02 Limited Edition)", - "lotr_sp", "Lord Of The Rings, The (10.00 Spain)", - "lotr_sp401", "Lord Of The Rings, The (4.01 Spain)", - "lotr_sp5", "Lord Of The Rings, The (5.0 Spain)", - "lotr_sp501", "Lord Of The Rings, The (5.01 Spain)", - "lotr_sp6", "Lord Of The Rings, The (6.0 Spain)", - "lotr_sp7", "Lord Of The Rings, The (7.0 Spain)", - "lotr_sp8", "Lord Of The Rings, The (8.0 Spain)", - "lotr_sp9", "Lord Of The Rings, The (9.0 Spain)", - "lottof2", "Lotto Fun 2", - "lottofun", "Lotto Fun", - "lovehous", "Mahjong Love House [BET] (Japan 901024)", - "loverboy", "Lover Boy", - "lovewin", "Love To Win (Russia)", - "lpadv", "Logic Pro Adventure (Japan)", - "lrescue", "Lunar Rescue", - "lrescuem", "Lunar Rescue (Model Racing bootleg, set 1)", - "lrescuem2", "Lunar Rescue (Model Racing bootleg, set 2)", - "lresort", "Last Resort", - "lsasquad", "Land Sea Air Squad / Riku Kai Kuu Saizensen", - "lsrcu_l2", "Laser Cue (L-2)", - "lsrquiz", "Laser Quiz Italy", - "lsrquiz2", "Laser Quiz 2 Italy (v1.0)", - "ltcasinn", "Little Casino (newer)", - "ltcasino", "Little Casino (older)", - "luckboom", "Lucky Boom", - "luckboomh", "Lucky Boom (Hard Times hardware)", - "luckfoun", "Lucky Fountain (Konami Endeavour)", - "luckgrln", "Lucky Girl (newer Z180 based hardware)", - "luckshel", "Lucky Shell (Russia) (Extrema)", - "lucky74", "Lucky 74 (bootleg, set 1)", - "lucky74a", "Lucky 74 (bootleg, set 3)", - "lucky74b", "Lucky 74 (bootleg, set 2)", - "lucky8", "New Lucky 8 Lines (set 1, W-4)", - "lucky8a", "New Lucky 8 Lines (set 2, W-4)", - "lucky8b", "New Lucky 8 Lines (set 3, W-4, extended gfx)", - "lucky8c", "New Lucky 8 Lines (set 4, W-4)", - "lucky8d", "New Lucky 8 Lines (set 5, W-4, main 40%, d-up 60%)", - "lucky8e", "New Lucky 8 Lines (set 6, W-4, main 40%, d-up 60%)", - "lucky_l1", "Lucky Seven (L-1)", - "luckygrl", "Lucky Girl? (Wing)", - "luckylad", "Lucky Lady (Wing, encrypted)", - "luckyrlt", "Lucky Roulette Plus (6-players, Spanish)", - "luckywld", "Lucky & Wild", - "luckywldj", "Lucky & Wild (Japan)", - "luctoday", "Lucky Today", - "lunapark", "Luna Park (set 1, dual program)", - "lunaparkb", "Luna Park (set 2, dual program)", - "lunaparkc", "Luna Park (set 3)", - "lunarba1", "Lunar Battle (prototype, earlier)", - "lunarbat", "Lunar Battle (prototype, later)", - "lunelle", "Lunelle", - "lupin3", "Lupin III (set 1)", - "lupin3a", "Lupin III (set 2)", - "lupinsho", "Lupin The Third - The Shooting (GDS-0018)", - "luplup", "Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 3.0 / 990128)", - "luplup29", "Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 2.9 / 990108)", - "luptype", "Lupin The Third - The Typing (Rev A) (GDS-0021A)", - "lvcards", "Lovely Cards", - "lvgirl94", "Las Vegas Girl (Girl '94)", - "lvpoker", "Lovely Poker [BET]", - "lw3_200", "Lethal Weapon 3 (2.00)", - "lw3_205", "Lethal Weapon 3 (2.05)", - "lw3_207", "Lethal Weapon 3 (2.07 Canada)", - "lw3_208", "Lethal Weapon 3 (2.08)", - "lwar_a83", "Laser War (8.3)", - "lwar_e90", "Laser War (9.0 Europe)", - "lwings", "Legendary Wings (US set 1)", - "lwings2", "Legendary Wings (US set 2)", - "lwingsb", "Legendary Wings (bootleg)", - "lwingsj", "Ares no Tsubasa (Japan)", - "lzbal_l2", "Laser Ball (L-2)", - "lzbal_t2", "Laser Ball (T-2)", - "m1albsq", "Albert Square (Maygay) v4.1 (M1A/B)", - "m1albsq1", "Albert Square (Maygay) v1.1 (M1A/B)", - "m1albsq1p", "Albert Square (Maygay) v1.1 (Protocol) (M1A/B)", - "m1albsq2", "Albert Square (Maygay) v2.2 (M1A/B)", - "m1albsq3", "Albert Square (Maygay) v3.0 (M1A/B)", - "m1albsqp", "Albert Square (Maygay) v4.1 (Protocol) (M1A/B)", - "m1alley", "Alley Cat (Maygay) (M1A/B)", - "m1apollo", "Apollo 9 (Maygay) vA.1 (Newer) (M1A/B)", - "m1apollo11", "Apollo 9 (Maygay) v11? (M1A/B)", - "m1apollo11b", "Apollo 9 (Maygay) v11? (BwB Rebuild) (M1A/B)", - "m1apollo11p", "Apollo 9 (Maygay) v11? (Protocol) (M1A/B)", - "m1apollo2", "Apollo 9 (Maygay) v2.1 (M1A/B)", - "m1apollo2p", "Apollo 9 (Maygay) v2.1 (Protocol) (M1A/B)", - "m1apollo3", "Apollo 9 (Maygay) v3.1 (M1A/B)", - "m1apollo3p", "Apollo 9 (Maygay) v3.1 (Protocol) (M1A/B)", - "m1apollo4", "Apollo 9 (Maygay) v4.1 (Newer) (M1A/B)", - "m1apollo4o", "Apollo 9 (Maygay) v4.1 (Older, Token)(M1A/B)", - "m1apollo4p", "Apollo 9 (Maygay) v4.1 (Newer) (Protocol) (M1A/B)", - "m1apollo5", "Apollo 9 (Maygay) v5.1 (M1A/B)", - "m1apollo5p", "Apollo 9 (Maygay) v5.1 (Protocol) (M1A/B)", - "m1apollo7", "Apollo 9 (Maygay) v7.1 (M1A/B)", - "m1apollo7p", "Apollo 9 (Maygay) v7.1 (Protocol) (M1A/B)", - "m1apollo8", "Apollo 9 (Maygay) v8.1 (M1A/B)", - "m1apollo8p", "Apollo 9 (Maygay) v8.1 (Protocol) (M1A/B)", - "m1apollo9", "Apollo 9 (Maygay) v9.1 (M1A/B)", - "m1apollo9p", "Apollo 9 (Maygay) v9.1 (Protocol) (M1A/B)", - "m1apolloa", "Apollo 9 (Maygay) vA.1 (Older) (M1A/B)", - "m1apolloao", "Apollo 9 (Maygay) vA.1 (Older, 15GBP) (M1A/B)", - "m1apolloap", "Apollo 9 (Maygay) vA.1 (Older) (Protocol) (M1A/B)", - "m1apolloh", "Apollo 9 (Maygay) vA.1 (Newer) (Hack?) (M1A/B)", - "m1apollop", "Apollo 9 (Maygay) vA.1 (Newer) (Protocol) (M1A/B)", - "m1atunk", "Random Runner (Avantime?)", - "m1bankbs", "Bank Buster Club (Maygay) v2.9 (M1A/B)", - "m1bankbso", "Bank Buster Club (Maygay) v2.8 (M1A/B)", - "m1bankbsp", "Bank Buster Club (Maygay) v2.9 (Protocol) (M1A/B)", - "m1bankrl", "Bank Roll (Maygay) v1.1 (M1A/B)", - "m1bankrl2p", "Bank Roll (Maygay) v2.1 (Protocol) (M1A/B)", - "m1bankrlp", "Bank Roll (Maygay) v1.1 (Protocol) (M1A/B)", - "m1bargn", "Bar-gain (Maygay) v7.1 (M1A/B)", - "m1bargnc", "Casino Bar-gain (Maygay) v5.1 (M1A/B)", - "m1bargncp", "Casino Bar-gain (Maygay) v5.1 (Protocol)(M1A/B)", - "m1bargnp", "Bar-gain (Maygay) v7.1 (Protocol) (M1A/B)", - "m1bghou", "Big Ghoulies (Gemini) (M1A/B) (set 1)", - "m1bghoua", "Big Ghoulies (Gemini) (M1A/B) (set 2)", - "m1bghoub", "Big Ghoulies (Gemini) (M1A/B) (set 3)", - "m1bghouc", "Big Ghoulies (Gemini) (M1A/B) (set 4)", - "m1bghoud", "Big Ghoulies (Gemini) (M1A/B) (set 5)", - "m1bghoue", "Big Ghoulies (Gemini) (M1A/B) (set 6)", - "m1bghouf", "Big Ghoulies (Gemini) (M1A/B) (set 7)", - "m1bghoug", "Big Ghoulies (Gemini) (M1A/B) (set 8)", - "m1bigdel", "Big Deal (Maygay) (M1A/B)", - "m1bignit", "Mike Reid's Big Night Out (Maygay) (M1A/B) (set 1)", - "m1bignita", "Mike Reid's Big Night Out (Maygay) (M1A/B) (set 2)", - "m1bignitb", "Mike Reid's Big Night Out (Maygay) (M1A/B) (set 3)", - "m1bignitc", "Mike Reid's Big Night Out (Maygay) (M1A/B) (set 4)", - "m1blkhol", "Black Hole (Dutch) (Maygay) (M1A/B)", - "m1bluemx", "Blue Max (Maygay) v2.1 (M1A/B)", - "m1bluemxp", "Blue Max (Maygay) v2.1 (Protocol) (M1A/B)", - "m1bondi", "Bondi Beach (Maygay) v1.1 (Newer) (M1A/B)", - "m1bondi1", "Bondi Beach (Maygay) v1.1 (M1A/B)", - "m1bondi1p", "Bondi Beach (Maygay) v1.1 (Protocol) (M1A/B)", - "m1bondi2", "Bondi Beach (Maygay) v2.1 (M1A/B)", - "m1bondi2p", "Bondi Beach (Maygay) v2.1 (Protocol) (M1A/B)", - "m1bondi2po", "Bondi Beach (Maygay) v2.1 (Older) (Protocol) (M1A/B)", - "m1bondi3", "Bondi Beach (Maygay) v3.1 (M1A/B)", - "m1bondi4", "Bondi Beach (Maygay) v4.1 (M1A/B)", - "m1bondi4p", "Bondi Beach (Maygay) v4.1 (Protocol) (M1A/B)", - "m1bondip", "Bondi Beach (Maygay) v1.1 (Newer) (Protocol) (M1A/B)", - "m1bountc", "Bounty Hunter Club (Maygay) v1.3 (M1A/B)", - "m1bountcp", "Bounty Hunter Club (Maygay) v1.3 (Protocol) (M1A/B)", - "m1calyps", "Calypso (Maygay) (M1A/B) (set 1)", - "m1calypsa", "Calypso (Maygay) (M1A/B) (set 2)", - "m1calypsb", "Calypso (Maygay) (M1A/B) (set 3)", - "m1casclb", "Casino Club (Maygay) v1.2 (M1A/B)", - "m1casclb1", "Casino Club (Maygay) v1.1 (M1A/B)", - "m1casclbp", "Casino Club (Maygay) v1.2 (Protocol) (M1A/B)", - "m1casgcl", "Casino Gambler Club (Maygay) v1.2 (M1A/B)", - "m1casgclp", "Casino Gambler Club (Maygay) v1.2 (Protocol) (M1A/B)", - "m1cashc", "Cash Classic (Maygay) (M1A/B) (set 1)", - "m1cashca", "Cash Classic (Maygay) (M1A/B) (set 2)", - "m1cashln", "Cash Lines (Maygay) (M1A/B)", - "m1casroy", "Casino Royale Club (Maygay) v1.2 (M1A/B)", - "m1casroy1", "Casino Royale Club (Maygay) v1.1 (M1A/B)", - "m1casroyp", "Casino Royale Club (Maygay) v1.2 (Protocol) (M1A/B)", - "m1chain", "Chain Reaction (Maygay) (M1A/B)", - "m1cik", "Cash Is King (Maygay) v11? (M1A/B)", - "m1cik11", "Cash Is King (Maygay) v1.1 (M1A/B)", - "m1cik11n", "Cash Is King (Maygay) v1.1 (alternate) (M1A/B)", - "m1cik11np", "Cash Is King (Maygay) v1.1 (alternate,Protocol) (M1A/B)", - "m1cik11p", "Cash Is King (Maygay) v1.1 (Protocol) (M1A/B)", - "m1cik12", "Cash Is King (Maygay) v1.2 (M1A/B)", - "m1cik21", "Cash Is King (Maygay) v2.1 (M1A/B)", - "m1cik21p", "Cash Is King (Maygay) v2.1 (Protocol) (M1A/B)", - "m1cik31", "Cash Is King (Maygay) v3.1 (M1A/B)", - "m1cik31p", "Cash Is King (Maygay) v3.1 (Protocol) (M1A/B)", - "m1cik41", "Cash Is King (Maygay) v4.1 (M1A/B)", - "m1cik41p", "Cash Is King (Maygay) v4.1 (Protocol) (M1A/B)", - "m1cik51", "Cash Is King (Maygay) v5.1 (M1A/B)", - "m1cik51o", "Cash Is King (Maygay) v5.1 (Older) (M1A/B)", - "m1cik51p", "Cash Is King (Maygay) v5.1 (Protocol) (M1A/B)", - "m1cikh", "Cash Is King (Maygay) v11? (Hack?) (M1A/B)", - "m1cikp", "Cash Is King (Maygay) v11? (Protocol) (M1A/B)", - "m1clbfvr", "Club Fever (Maygay) v1.1 (M1A/B)", - "m1clbfvrp", "Club Fever (Maygay) v1.1 (Protocol) (M1A/B)", - "m1cluecb", "Cluedo Club (Maygay) v3.1 (M1A/B)", - "m1cluecb1", "Cluedo Club (Maygay) v1.1 (M1A/B)", - "m1cluecb1p", "Cluedo Club (Maygay) v1.1 (Protocol) (M1A/B)", - "m1cluecb2", "Cluedo Club (Maygay) v2.1 (M1A/B)", - "m1cluecb2p", "Cluedo Club (Maygay) v2.1 (Protocol) (M1A/B)", - "m1cluecbp", "Cluedo Club (Maygay) v3.1 (Protocol) (M1A/B)", - "m1cluedo", "Cluedo (Maygay) v6.1 (M1A/B)", - "m1cluedo1", "Cluedo (Maygay) v1.1 (M1A/B)", - "m1cluedo1h", "Cluedo (Maygay) v1.1 (Hack?) (M1A/B)", - "m1cluedo1p", "Cluedo (Maygay) v1.1 (Protocol) (M1A/B)", - "m1cluedo3", "Cluedo (Maygay) v3.1 (M1A/B)", - "m1cluedo3h", "Cluedo (Maygay) v3.1 (Hack?) (M1A/B)", - "m1cluedo3p", "Cluedo (Maygay) v3.1 (Protocol) (M1A/B)", - "m1cluedo4", "Cluedo (Maygay) v4.1 (M1A/B)", - "m1cluedo4p", "Cluedo (Maygay) v4.1 (Protocol) (M1A/B)", - "m1cluedo5", "Cluedo (Maygay) v5.1 (M1A/B)", - "m1cluedo5p", "Cluedo (Maygay) v5.1 (Protocol) (M1A/B)", - "m1cluedob1", "Cluedo (Maygay/BwB) v1.1 (M1A/B)", - "m1cluedob1h", "Cluedo (Maygay/BwB) v1.1 (Hack?) (M1A/B)", - "m1cluedob1p", "Cluedo (Maygay/BwB) v1.1 (Protocol) (M1A/B)", - "m1cluedob2", "Cluedo (Maygay/BwB) v2.1 (M1A/B)", - "m1cluedob2h", "Cluedo (Maygay/BwB) v2.1 (Hack?) (M1A/B)", - "m1cluedob2p", "Cluedo (Maygay/BwB) v2.1 (Protocol) (M1A/B)", - "m1cluedoi", "Cluedo (Maygay) v7.2 (Isle of Man) (M1A/B)", - "m1cluedoip", "Cluedo (Maygay) v7.2 (Isle of Man) (Protocol) (M1A/B)", - "m1cluedon", "Cluedo (Maygay) v1.2 (Newer) (M1A/B)", - "m1cluedonp", "Cluedo (Maygay) v1.2 (Newer) (Protocol) (M1A/B)", - "m1cluedop", "Cluedo (Maygay) v6.1 (Protocol) (M1A/B)", - "m1cluesh", "Super Cluedo Showcase (Maygay) v1.2 (M1A/B)", - "m1cluesho", "Super Cluedo Showcase (Maygay) v1.2 (Older) (M1A/B)", - "m1clueshop", "Super Cluedo Showcase (Maygay) v1.2 (Older) (Protocol) (M1A/B)", - "m1clueshp", "Super Cluedo Showcase (Maygay) v1.2 (Protocol) (M1A/B)", - "m1cluess", "Cluedo Super Sleuth (Maygay) v2.3 (M1A/B)", - "m1cluessa", "Cluedo Super Sleuth (Maygay) v1.2 (Newer) (M1A/B)", - "m1cluessap", "Cluedo Super Sleuth (Maygay) v1.2 (Newer) (Protocol) (M1A/B)", - "m1cluessb", "Cluedo Super Sleuth (Maygay) v7.1 (Older) (M1A/B)", - "m1cluessbp", "Cluedo Super Sleuth (Maygay) v7.1 (Older) (Protocol) (M1A/B)", - "m1cluessc", "Cluedo Super Sleuth (Maygay) v6.1 (Older) (M1A/B)", - "m1cluesscp", "Cluedo Super Sleuth (Maygay) v6.1 (Older) (Protocol) (M1A/B)", - "m1cluessd", "Cluedo Super Sleuth (Maygay) v5.1 (Older) (M1A/B)", - "m1cluessdp", "Cluedo Super Sleuth (Maygay) v5.1 (Older) (Protocol) (M1A/B)", - "m1cluesse", "Cluedo Super Sleuth (Maygay) v2.1 (Older) (M1A/B)", - "m1cluessep", "Cluedo Super Sleuth (Maygay) v2.1 (Older) (Protocol) (M1A/B)", - "m1cluessf", "Cluedo Super Sleuth (Maygay) v1.1 (Older) (M1A/B)", - "m1cluessfp", "Cluedo Super Sleuth (Maygay) v1.1 (Older) (Protocol) (M1A/B)", - "m1cluessg", "Cluedo Super Sleuth (Maygay) v7.1 (15GBP Jackpot) (Older) (M1A/B)", - "m1cluessh", "Cluedo Super Sleuth (Maygay) v2.3 (Newer) (Hack) (M1A/B)", - "m1cluessi", "Cluedo Super Sleuth (Maygay) v2.1 (10GBP Jackpot) (Older) (M1A/B)", - "m1cluessj", "Cluedo Super Sleuth (Maygay) v2.3 (5GBP Jackpot) (Older) (M1A/B)", - "m1cluessk", "Cluedo Super Sleuth (Maygay) v1.2 (Older) (M1A/B)", - "m1cluessl", "Cluedo Super Sleuth (Maygay) v4.1 (Older) (M1A/B)", - "m1cluesslp", "Cluedo Super Sleuth (Maygay) v4.1 (Older) (Protocol) (M1A/B)", - "m1cluessm", "Cluedo Super Sleuth (Maygay) v3.1 (Older) (M1A/B)", - "m1cluessmp", "Cluedo Super Sleuth (Maygay) v3.1 (Older) (Protocol) (M1A/B)", - "m1cluessn", "Cluedo Super Sleuth (Maygay) v1.1 (10GBP Jackpot) (Older) (M1A/B)", - "m1cluesso", "Cluedo Super Sleuth (Maygay) v2.1 (Older, alternate) (M1A/B)", - "m1cluessop", "Cluedo Super Sleuth (Maygay) v2.1 (Older, alternate) (Protocol) (M1A/B)", - "m1cluessp", "Cluedo Super Sleuth (Maygay) v2.3 (Newer) (Protocol) (M1A/B)", - "m1cluessq", "Cluedo Super Sleuth (Maygay) v5.1 (Older, alternate) (M1A/B)", - "m1cluessqp", "Cluedo Super Sleuth (Maygay) v5.1 (Older, alternate) (Protocol) (M1A/B)", - "m1cluessr", "Cluedo Super Sleuth (Maygay) v3.1 (Older, alternate) (M1A/B)", - "m1cluessrp", "Cluedo Super Sleuth (Maygay) v3.1 (Older, alternate) (Protocol) (M1A/B)", - "m1cluesss", "Cluedo Super Sleuth (Maygay) v4.1? (Older, alternate) (M1A/B)", - "m1cluesssp", "Cluedo Super Sleuth (Maygay) v4.1? (Older, alternate) (Protocol) (M1A/B)", - "m1coderd", "Code Red Club (Maygay) v2.1 (M1A/B)", - "m1coderdp", "Code Red Club (Maygay) v2.1 (Protocol) (M1A/B)", - "m1coro", "Coronation Street (Maygay) (M1A/B)", - "m1coro10h1", "Coronation Street (Maygay) v1.0 (Hack 1) (M1A/B)", - "m1coro10h2", "Coronation Street (Maygay) v1.0 (Hack 2) (M1A/B)", - "m1coro10h3", "Coronation Street (Maygay) v1.0 (Hack 3) (M1A/B)", - "m1coro11n", "Coronation Street (Maygay) v1.1 (Newer) (M1A/B)", - "m1coro11np", "Coronation Street (Maygay) v1.1 (Newer) (Protocol) (M1A/B)", - "m1coro12a", "Coronation Street (Maygay) v1.2 (Newer, G?) (Alternate) (M1A/B)", - "m1coro12g", "Coronation Street (Maygay) v1.2 (Newer, G?) (M1A/B)", - "m1coro12gp", "Coronation Street (Maygay) v1.2 (Newer, G?) (Protocol) (M1A/B)", - "m1coro12n", "Coronation Street (Maygay) v1.2 (Newer) (M1A/B)", - "m1coro12np", "Coronation Street (Maygay) v1.2 (Newer) (Protocol) (M1A/B)", - "m1coro21n", "Coronation Street (Maygay) v2.1 (Newer) (M1A/B)", - "m1coro21np", "Coronation Street (Maygay) v2.1 (Newer) (Protocol) (M1A/B)", - "m1coro21v", "Coronation Street (Maygay) v2.1 (Multivend) (M1A/B)", - "m1coro21vp", "Coronation Street (Maygay) v2.1 (Multivend) (Protocol)(M1A/B)", - "m1coro22n", "Coronation Street (Maygay) v2.2 (Newer) (M1A/B)", - "m1coro30h", "Coronation Street (Maygay) v3.0 (Hack) (M1A/B)", - "m1coro31", "Coronation Street (Maygay) v3.1 (Older) (M1A/B)", - "m1coro31p", "Coronation Street (Maygay) v3.1 (Older) (Protocol) (M1A/B)", - "m1coro32g", "Coronation Street (Maygay) v3.2 (Newer, G?) (M1A/B)", - "m1coro32gh", "Coronation Street (Maygay) v3.2 (Newer, G?) (Hack) (M1A/B)", - "m1coro32n", "Coronation Street (Maygay) v3.2 (Newer) (M1A/B)", - "m1coro32np", "Coronation Street (Maygay) v3.2 (Newer) (Protocol) (M1A/B)", - "m1coro81", "Coronation Street (Maygay) v8.1 (M1A/B)", - "m1coro81p", "Coronation Street (Maygay) v8.1 (Protocol) (M1A/B)", - "m1corocb", "Coronation Street Club (Maygay) v2.1 (M1A/B)", - "m1corocb1", "Coronation Street Club (Maygay) v1.1 (M1A/B)", - "m1corocb1p", "Coronation Street Club (Maygay) v1.1 (Protocol)(M1A/B)", - "m1corocbp", "Coronation Street Club (Maygay) v2.1 (Protocol) (M1A/B)", - "m1corop", "Coronation Street (Maygay) (Protocol) (M1A/B)", - "m1cororr", "Coronation Street - Rovers Return (Maygay) (set 1) (M1A/B)", - "m1cororra", "Coronation Street - Rovers Return (Maygay) (set 1) (Alternate) (M1A/B)", - "m1cororrb", "Coronation Street - Rovers Return (Maygay) (set 2) (M1A/B)", - "m1cororrb1", "Coronation Street - Rovers Return (Maygay) (set 2) (Alternate) (M1A/B)", - "m1cororrbh", "Coronation Street - Rovers Return (Maygay) (set 2) (Hack) (M1A/B)", - "m1cororrbp", "Coronation Street - Rovers Return (Maygay) (set 2) (Protocol) (M1A/B)", - "m1cororrc", "Coronation Street - Rovers Return (Maygay) (set 3) (M1A/B)", - "m1cororrc1", "Coronation Street - Rovers Return (Maygay) (set 3) (Alternate 1) (M1A/B)", - "m1cororrc2", "Coronation Street - Rovers Return (Maygay) (set 3) (Alternate 2) (M1A/B)", - "m1cororrd", "Coronation Street - Rovers Return (Maygay) (set 4) (M1A/B)", - "m1cororrdp", "Coronation Street - Rovers Return (Maygay) (set 4) (Protocol) (M1A/B)", - "m1cororre", "Coronation Street - Rovers Return (Maygay) (set 5) (M1A/B)", - "m1cororrf", "Coronation Street - Rovers Return (Maygay) (set 6) (BW) (M1A/B)", - "m1cororrfp", "Coronation Street - Rovers Return (Maygay) (set 6) (BW) (Protocol) (M1A/B)", - "m1cororrg", "Coronation Street - Rovers Return (Maygay) (set 7) (M1A/B)", - "m1cororrgp", "Coronation Street - Rovers Return (Maygay) (set 7) (Protocol) (M1A/B)", - "m1cororrh", "Coronation Street - Rovers Return (Maygay) (set 8) (M1A/B)", - "m1cororri", "Coronation Street - Rovers Return (Maygay) (set 9) (M1A/B)", - "m1cororrip", "Coronation Street - Rovers Return (Maygay) (set 9) (Protocol) (M1A/B)", - "m1cororrj", "Coronation Street - Rovers Return (Maygay) (set 10) (M1A/B)", - "m1cororrjp", "Coronation Street - Rovers Return (Maygay) (set 10) (Protocol) (M1A/B)", - "m1cororrk", "Coronation Street - Rovers Return (Maygay) (set 11) (M1A/B)", - "m1cororrl", "Coronation Street - Rovers Return (Maygay) (set 12) (M1A/B)", - "m1cororrlp", "Coronation Street - Rovers Return (Maygay) (set 12) (Protocol) (M1A/B)", - "m1cororrp", "Coronation Street - Rovers Return (Maygay) (set 1) (Protocol) (M1A/B)", - "m1corosh", "Coronation Street Showcase (Maygay) v1.1 (M1A/B)", - "m1coroshp", "Coronation Street Showcase (Maygay) v1.1 (Protocol)(M1A/B)", - "m1criss", "Criss Cross Club (Maygay) (Dutch) (M1A/B)", - "m1crzco", "Crazy Cobra (Gemini) (M1A/B) (set 1)", - "m1crzcoa", "Crazy Cobra (Gemini) (M1A/B) (set 2)", - "m1crzcob", "Crazy Cobra (Gemini) (M1A/B) (set 3)", - "m1crzcoc", "Crazy Cobra (Gemini) (M1A/B) (set 4)", - "m1crzcod", "Crazy Cobra (Gemini) (M1A/B) (set 5)", - "m1crzcoe", "Crazy Cobra (Gemini) (M1A/B) (set 6)", - "m1digdel", "Diggers Delight (Global) (M1A/B) (set 1)", - "m1digdela", "Diggers Delight (Global) (M1A/B) (set 2)", - "m1dkong", "Donkey Kong (Maygay) v9.2 (M1A/B)", - "m1dkong11", "Donkey Kong (Maygay) v1.1 (M1A/B)", - "m1dkong11p", "Donkey Kong (Maygay) v1.1 (M1A/B) (Protocol?)", - "m1dkong21", "Donkey Kong (Maygay) v2.1 (Older) (M1A/B)", - "m1dkong21n", "Donkey Kong (Maygay) v2.1 (M1A/B)", - "m1dkong21p", "Donkey Kong (Maygay) v2.1 (Older) (Protocol) (M1A/B)", - "m1dkong31", "Donkey Kong (Maygay) v3.1 (M1A/B)", - "m1dkong31p", "Donkey Kong (Maygay) v3.1 (Protocol) (M1A/B)", - "m1dkong41", "Donkey Kong (Maygay) v4.1 (M1A/B)", - "m1dkong41p", "Donkey Kong (Maygay) v4.1 (Protocol) (M1A/B)", - "m1dkong51", "Donkey Kong (Maygay) v5.1 (M1A/B)", - "m1dkong51p", "Donkey Kong (Maygay) v5.1 (Protocol) (M1A/B)", - "m1dkong81", "Donkey Kong (Maygay) v8.1 (Older) (M1A/B)", - "m1dkong81n", "Donkey Kong (Maygay) v8.1 (M1A/B)", - "m1dkong81na", "Donkey Kong (Maygay) v8.1 (Alternate) (M1A/B)", - "m1dkong81np", "Donkey Kong (Maygay) v8.1 (Protocol) (M1A/B)", - "m1dkong81p", "Donkey Kong (Maygay) v8.1 (Older) (Protocol) (M1A/B)", - "m1dkong91", "Donkey Kong (Maygay) v9.1 (Older) (M1A/B)", - "m1dkong91a", "Donkey Kong (Maygay) v9.1 (Older) (Alternate) (M1A/B)", - "m1dkong91h1", "Donkey Kong (Maygay) v9.1 (Older) (Hack 1) (M1A/B)", - "m1dkong91h2", "Donkey Kong (Maygay) v9.1 (Older) (Hack 2) (M1A/B)", - "m1dkong91n", "Donkey Kong (Maygay) v9.1 (M1A/B)", - "m1dkong91na", "Donkey Kong (Maygay) v9.1 (Alternate) (M1A/B)", - "m1dkong91np", "Donkey Kong (Maygay) v9.1 (Protocol) (M1A/B)", - "m1dkong91p", "Donkey Kong (Maygay) v9.1 (Older) (Protocol) (M1A/B)", - "m1dkonga", "Donkey Kong (Maygay) v9.2 (Alternate) (M1A/B)", - "m1dkongp", "Donkey Kong (Maygay) v9.2 (Protocol) (M1A/B)", - "m1dm4ev", "Diamonds Are Forever Club (Maygay) v5.1 (M1A/B)", - "m1dm4ev11", "Diamonds Are Forever Club (Maygay) v1.1 (M1A/B)", - "m1dm4evp", "Diamonds Are Forever Club (Maygay) v5.1 (Protocol) n(M1A/B)", - "m1dmnhrt", "Diamond Hearts (Maygay) (M1A/B)", - "m1dxmono", "Deluxe Monopoly (Maygay) v5.1 (M1A/B)", - "m1dxmono11", "Deluxe Monopoly (Maygay) v1.1 (M1A/B)", - "m1dxmono11m", "Deluxe Monopoly (Maygay) v1.1 (Code M) (M1A/B)", - "m1dxmono11mb", "Deluxe Monopoly (Maygay) v1.1 (Code M, Alternate) (M1A/B)", - "m1dxmono11o", "Deluxe Monopoly (Maygay) v1.1 (Older) (M1A/B)", - "m1dxmono11p", "Deluxe Monopoly (Maygay) v1.1 (Protocol) (M1A/B)", - "m1dxmono12", "Deluxe Monopoly (Maygay) v1.2 (M1A/B)", - "m1dxmono12a", "Deluxe Monopoly (Maygay) v1.2 (Alternate) (M1A/B)", - "m1dxmono12n", "Deluxe Monopoly (Maygay) v1.2 (Newer) (M1A/B)", - "m1dxmono12p", "Deluxe Monopoly (Maygay) v1.2 (Protocol) (M1A/B)", - "m1dxmono21p", "Deluxe Monopoly (Maygay) v2.1 (Protocol) (M1A/B)", - "m1dxmono30h", "Deluxe Monopoly (Maygay) v3.0 (Hack) (M1A/B)", - "m1dxmono31b", "Deluxe Monopoly (Maygay) v3.1 (BwB set) (M1A/B)", - "m1dxmono31h", "Deluxe Monopoly (Maygay) v3.1 (Hack) (M1A/B)", - "m1dxmono31h2", "Deluxe Monopoly (Maygay) v3.1 (Alternate Hack) (M1A/B)", - "m1dxmono31p", "Deluxe Monopoly (Maygay) v3.1 (Protocol) (M1A/B)", - "m1dxmono51", "Deluxe Monopoly (Maygay) v5.1 (Older) (M1A/B)", - "m1dxmono51o", "Deluxe Monopoly (Maygay) v5.1 (Older) (M1A/B) (alt?)", - "m1dxmono51p", "Deluxe Monopoly (Maygay) v5.1 (Older) (Protocol) (M1A/B)", - "m1dxmonop", "Deluxe Monopoly (Maygay) v5.1 (Protocol) (M1A/B)", - "m1eastnd", "Eastenders (Maygay) (M1A/B) (set 1)", - "m1eastnd0", "Eastenders (Maygay) (M1A/B) (set 28)", - "m1eastnd1", "Eastenders (Maygay) (M1A/B) (set 29)", - "m1eastnd2", "Eastenders (Maygay) (M1A/B) (set 30)", - "m1eastnd3", "Eastenders (Maygay) (M1A/B) (set 31)", - "m1eastnd4", "Eastenders (Maygay) (M1A/B) (set 32)", - "m1eastnd5", "Eastenders (Maygay) (M1A/B) (set 33)", - "m1eastnd6", "Eastenders (Maygay) (M1A/B) (set 34)", - "m1eastnd7", "Eastenders (Maygay) (M1A/B) (set 35)", - "m1eastnd8", "Eastenders (Maygay) (M1A/B) (set 36)", - "m1eastnd9", "Eastenders (Maygay) (M1A/B) (set 37)", - "m1eastnda", "Eastenders (Maygay) (M1A/B) (set 2)", - "m1eastndaa", "Eastenders (Maygay) (M1A/B) (set 38)", - "m1eastndab", "Eastenders (Maygay) (M1A/B) (set 39)", - "m1eastndac", "Eastenders (Maygay) (M1A/B) (set 40)", - "m1eastndad", "Eastenders (Maygay) (M1A/B) (set 41)", - "m1eastndae", "Eastenders (Maygay) (M1A/B) (set 42)", - "m1eastndaf", "Eastenders (Maygay) (M1A/B) (set 43)", - "m1eastndb", "Eastenders (Maygay) (M1A/B) (set 3)", - "m1eastndc", "Eastenders (Maygay) (M1A/B) (set 4)", - "m1eastndd", "Eastenders (Maygay) (M1A/B) (set 5)", - "m1eastnde", "Eastenders (Maygay) (M1A/B) (set 6)", - "m1eastndf", "Eastenders (Maygay) (M1A/B) (set 7)", - "m1eastndg", "Eastenders (Maygay) (M1A/B) (set 8)", - "m1eastndh", "Eastenders (Maygay) (M1A/B) (set 9)", - "m1eastndi", "Eastenders (Maygay) (M1A/B) (set 10)", - "m1eastndj", "Eastenders (Maygay) (M1A/B) (set 11)", - "m1eastndk", "Eastenders (Maygay) (M1A/B) (set 12)", - "m1eastndl", "Eastenders (Maygay) (M1A/B) (set 13)", - "m1eastndn", "Eastenders (Maygay) (M1A/B) (set 15)", - "m1eastndp", "Eastenders (Maygay) (M1A/B) (set 17)", - "m1eastndq", "Eastenders (Maygay) (M1A/B) (set 18)", - "m1eastndr", "Eastenders (Maygay) (M1A/B) (set 19)", - "m1eastnds", "Eastenders (Maygay) (M1A/B) (set 20)", - "m1eastndt", "Eastenders (Maygay) (M1A/B) (set 21)", - "m1eastndu", "Eastenders (Maygay) (M1A/B) (set 22)", - "m1eastndv", "Eastenders (Maygay) (M1A/B) (set 23)", - "m1eastndw", "Eastenders (Maygay) (M1A/B) (set 24)", - "m1eastndx", "Eastenders (Maygay) (M1A/B) (set 25)", - "m1eastndy", "Eastenders (Maygay) (M1A/B) (set 26)", - "m1eastndz", "Eastenders (Maygay) (M1A/B) (set 27)", - "m1eastqv", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 1)", - "m1eastqv0", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 28)", - "m1eastqv1", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 29)", - "m1eastqv2", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 30)", - "m1eastqv3", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 31)", - "m1eastqv5", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 33)", - "m1eastqv6", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 34)", - "m1eastqv7", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 35)", - "m1eastqv8", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 36)", - "m1eastqva", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 2)", - "m1eastqvaa", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 38)", - "m1eastqvb", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 3)", - "m1eastqvc", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 4)", - "m1eastqvd", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 5)", - "m1eastqvf", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 7)", - "m1eastqvg", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 8)", - "m1eastqvh", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 9)", - "m1eastqvi", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 10)", - "m1eastqvj", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 11)", - "m1eastqvk", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 12)", - "m1eastqvl", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 13)", - "m1eastqvm", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 14)", - "m1eastqvn", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 15)", - "m1eastqvo", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 16)", - "m1eastqvp", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 17)", - "m1eastqvq", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 18)", - "m1eastqvr", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 19)", - "m1eastqvs", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 20)", - "m1eastqvt", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 21)", - "m1eastqvu", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 22)", - "m1eastqvv", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 23)", - "m1eastqvw", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 24)", - "m1eastqvx", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 25)", - "m1eastqvy", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 26)", - "m1eastqvz", "Eastenders - Queen Vic (Maygay) (M1A/B) (set 27)", - "m1expclb", "Explorer Club (Maygay) (M1A/B) (set 2)", - "m1expclba", "Explorer Club (Maygay) (M1A/B) (set 3)", - "m1fantfb", "Fantasy Football (Maygay) (M1A/B) (set 1)", - "m1fantfba", "Fantasy Football (Maygay) (M1A/B) (set 2)", - "m1fantfbb", "Fantasy Football (Maygay) (M1A/B) (set 3)", - "m1fantfbc", "Fantasy Football (Maygay) (M1A/B) (set 4)", - "m1fantfbd", "Fantasy Football (Maygay) (M1A/B) (set 5)", - "m1fantfbf", "Fantasy Football (Maygay) (M1A/B) (set 7)", - "m1fantfbg", "Fantasy Football (Maygay) (M1A/B) (set 8)", - "m1fantfbh", "Fantasy Football (Maygay) (M1A/B) (set 9)", - "m1fantfbj", "Fantasy Football (Maygay) (M1A/B) (set 11)", - "m1fantfbk", "Fantasy Football (Maygay) (M1A/B) (set 12)", - "m1fantfbl", "Fantasy Football (Maygay) (M1A/B) (set 13)", - "m1fight", "Fight Night (Maygay) (M1A/B) (set 1)", - "m1fighta", "Fight Night (Maygay) (M1A/B) (set 2)", - "m1fightb", "Fight Night (Maygay) (M1A/B) (set 3)", - "m1fightc", "Fight Night (Maygay) (M1A/B) (set 4)", - "m1fightd", "Fight Night (Maygay) (M1A/B) (set 5)", - "m1fighte", "Fight Night (Maygay) (M1A/B) (set 6)", - "m1fightg", "Fight Night (Maygay) (M1A/B) (set 8)", - "m1fighth", "Fight Night (Maygay) (M1A/B) (set 9)", - "m1fighti", "Fight Night (Maygay) (M1A/B) (set 10)", - "m1fightj", "Fight Night (Maygay) (M1A/B) (set 11)", - "m1fightk", "Fight Night (Maygay) (M1A/B) (set 12)", - "m1fightl", "Fight Night (Maygay) (M1A/B) (set 13)", - "m1fightm", "Fight Night (Maygay) (M1A/B) (set 14)", - "m1fightn", "Fight Night (Maygay) (M1A/B) (set 15)", - "m1fighto", "Fight Night (Maygay) (M1A/B) (set 16)", - "m1fightp", "Fight Night (Maygay) (M1A/B) (set 17)", - "m1fightq", "Fight Night (Maygay) (M1A/B) (set 18)", - "m1fightr", "Fight Night (Maygay) (M1A/B) (set 19)", - "m1fights", "Fight Night (Maygay) (M1A/B) (set 20)", - "m1fightt", "Fight Night (Maygay) (M1A/B) (set 21)", - "m1fightu", "Fight Night (Maygay) (M1A/B) (set 22)", - "m1fightv", "Fight Night (Maygay) (M1A/B) (set 23)", - "m1fightw", "Fight Night (Maygay) (M1A/B) (set 24)", - "m1fightx", "Fight Night (Maygay) (M1A/B) (set 25)", - "m1fivest", "Five Star (Dutch) (Maygay) (M1A/B)", - "m1frexpl", "Fruit Explosion (Maygay) (M1A/B) (set 1)", - "m1frexpla", "Fruit Explosion (Maygay) (M1A/B) (set 2)", - "m1frexplc", "Fruit Explosion (Maygay) (M1A/B) (set 4)", - "m1frexpld", "Fruit Explosion (Maygay) (M1A/B) (set 5)", - "m1frexple", "Fruit Explosion (Maygay) (M1A/B) (set 6)", - "m1frexplg", "Fruit Explosion (Maygay) (M1A/B) (set 8)", - "m1frexplh", "Fruit Explosion (Maygay) (M1A/B) (set 9)", - "m1frexpli", "Fruit Explosion (Maygay) (M1A/B) (set 10)", - "m1frexplj", "Fruit Explosion (Maygay) (M1A/B) (set 11)", - "m1frexplk", "Fruit Explosion (Maygay) (M1A/B) (set 12)", - "m1frexpll", "Fruit Explosion (Maygay) (M1A/B) (set 13)", - "m1frexplm", "Fruit Explosion (Maygay) (M1A/B) (set 14)", - "m1frexpln", "Fruit Explosion (Maygay) (M1A/B) (set 15)", - "m1frexplo", "Fruit Explosion (Maygay) (M1A/B) (set 16)", - "m1frexplp", "Fruit Explosion (Maygay) (M1A/B) (set 17)", - "m1frexplq", "Fruit Explosion (Maygay) (M1A/B) (set 18)", - "m1frexplr", "Fruit Explosion (Maygay) (M1A/B) (set 19)", - "m1frexpls", "Fruit Explosion (Maygay) (M1A/B) (set 20)", - "m1frexplt", "Fruit Explosion (Maygay) (M1A/B) (set 21)", - "m1frexplu", "Fruit Explosion (Maygay) (M1A/B) (set 22)", - "m1frexplv", "Fruit Explosion (Maygay) (M1A/B) (set 23)", - "m1glad", "Gladiators (Maygay) (M1A/B) (set 1)", - "m1glad0", "Gladiators (Maygay) (M1A/B) (set 28)", - "m1glad1", "Gladiators (Maygay) (M1A/B) (set 29)", - "m1glada", "Gladiators (Maygay) (M1A/B) (set 2)", - "m1gladb", "Gladiators (Maygay) (M1A/B) (set 3)", - "m1gladc", "Gladiators (Maygay) (M1A/B) (set 4)", - "m1gladd", "Gladiators (Maygay) (M1A/B) (set 5)", - "m1glade", "Gladiators (Maygay) (M1A/B) (set 6)", - "m1gladf", "Gladiators (Maygay) (M1A/B) (set 7)", - "m1gladg", "Gladiators (Maygay) (M1A/B) (set 8)", - "m1gladh", "Gladiators (Maygay) (M1A/B) (set 9)", - "m1gladj", "Gladiators (Maygay) (M1A/B) (set 11)", - "m1gladk", "Gladiators (Maygay) (M1A/B) (set 12)", - "m1gladl", "Gladiators (Maygay) (M1A/B) (set 13)", - "m1gladm", "Gladiators (Maygay) (M1A/B) (set 14)", - "m1gladn", "Gladiators (Maygay) (M1A/B) (set 15)", - "m1glado", "Gladiators (Maygay) (M1A/B) (set 16)", - "m1gladp", "Gladiators (Maygay) (M1A/B) (set 17)", - "m1gladq", "Gladiators (Maygay) (M1A/B) (set 18)", - "m1gladr", "Gladiators (Maygay) (M1A/B) (set 19)", - "m1glads", "Gladiators (Maygay) (M1A/B) (set 20)", - "m1gladt", "Gladiators (Maygay) (M1A/B) (set 21)", - "m1gladu", "Gladiators (Maygay) (M1A/B) (set 22)", - "m1gladv", "Gladiators (Maygay) (M1A/B) (set 23)", - "m1gladw", "Gladiators (Maygay) (M1A/B) (set 24)", - "m1gladx", "Gladiators (Maygay) (M1A/B) (set 25)", - "m1glady", "Gladiators (Maygay) (M1A/B) (set 26)", - "m1gladz", "Gladiators (Maygay) (M1A/B) (set 27)", - "m1gold10", "Golden 10 (German) (Maygay) (M1A/B)", - "m1goldng", "Golden Nugget Club (Maygay) (M1A/B) (set 1)", - "m1goldnga", "Golden Nugget Club (Maygay) (M1A/B) (set 2)", - "m1goldngb", "Golden Nugget Club (Maygay) (M1A/B) (set 3)", - "m1goldngc", "Golden Nugget Club (Maygay) (M1A/B) (set 4)", - "m1goldngd", "Golden Nugget Club (Maygay) (M1A/B) (set 5)", - "m1goldnge", "Golden Nugget Club (Maygay) (M1A/B) (set 6)", - "m1goldsv", "Gold & Silver (Maygay) (M1A/B) (set 1)", - "m1goldsva", "Gold & Silver (Maygay) (M1A/B) (set 2)", - "m1gresc", "Great Escape, The (Maygay) (M1A/B) (set 1)", - "m1gresca", "Great Escape, The (Maygay) (M1A/B) (set 2)", - "m1grescb", "Great Escape, The (Maygay) (M1A/B) (set 3)", - "m1grescc", "Great Escape, The (Maygay) (M1A/B) (set 4)", - "m1grescd", "Great Escape, The (Maygay) (M1A/B) (set 5)", - "m1gresce", "Great Escape, The (Maygay) (M1A/B) (set 6)", - "m1grescf", "Great Escape, The (Maygay) (M1A/B) (set 7)", - "m1grescg", "Great Escape, The (Maygay) (M1A/B) (set 8)", - "m1gresch", "Great Escape, The (Maygay) (M1A/B) (set 9)", - "m1gresci", "Great Escape, The (Maygay) (M1A/B) (set 10)", - "m1grescj", "Great Escape, The (Maygay) (M1A/B) (set 11)", - "m1gresck", "Great Escape, The (Maygay) (M1A/B) (set 12)", - "m1grescl", "Great Escape, The (Maygay) (M1A/B) (set 13)", - "m1grescm", "Great Escape, The (Maygay) (M1A/B) (set 14)", - "m1grescn", "Great Escape, The (Maygay) (M1A/B) (set 15)", - "m1gresco", "Great Escape, The (Maygay) (M1A/B) (set 16)", - "m1grescp", "Great Escape, The (Maygay) (M1A/B) (set 17)", - "m1grescq", "Great Escape, The (Maygay) (M1A/B) (set 18)", - "m1gskill", "Greek Skill (Hitech Amusement)", - "m1guvnor", "The Guvnor (Maygay) (M1A/B) (set 1)", - "m1guvnora", "The Guvnor (Maygay) (M1A/B) (set 2)", - "m1guvnorb", "The Guvnor (Maygay) (M1A/B) (set 3)", - "m1guvnorc", "The Guvnor (Maygay) (M1A/B) (set 4)", - "m1guvnord", "The Guvnor (Maygay) (M1A/B) (set 5)", - "m1guvnore", "The Guvnor (Maygay) (M1A/B) (set 6)", - "m1guvnorf", "The Guvnor (Maygay) (M1A/B) (set 7)", - "m1guvnorg", "The Guvnor (Maygay) (M1A/B) (set 8)", - "m1guvnorh", "The Guvnor (Maygay) (M1A/B) (set 9)", - "m1guvnori", "The Guvnor (Maygay) (M1A/B) (set 10)", - "m1guvnorj", "The Guvnor (Maygay) (M1A/B) (set 11)", - "m1guvnork", "The Guvnor (Maygay) (M1A/B) (set 12)", - "m1guvnorl", "The Guvnor (Maygay) (M1A/B) (set 13)", - "m1guvnorm", "The Guvnor (Maygay) (M1A/B) (set 14)", - "m1guvnorn", "The Guvnor (Maygay) (M1A/B) (set 15)", - "m1guvnoro", "The Guvnor (Maygay) (M1A/B) (set 16)", - "m1guvnorp", "The Guvnor (Maygay) (M1A/B) (set 17)", - "m1guvnorq", "The Guvnor (Maygay) (M1A/B) (set 18)", - "m1guvnorr", "The Guvnor (Maygay) (M1A/B) (set 19)", - "m1guvnors", "The Guvnor (Maygay) (M1A/B) (set 20)", - "m1guvnort", "The Guvnor (Maygay) (M1A/B) (set 21)", - "m1hiloc", "Hi Lo Casino (Global) (M1A/B) (set 1)", - "m1hiloca", "Hi Lo Casino (Global) (M1A/B) (set 2)", - "m1hotpot", "Hot Pots (Maygay) (M1A/B) (set 1)", - "m1hotpot0", "Hot Pots (Maygay) (M1A/B) (set 28)", - "m1hotpotd", "Hot Pots (Maygay) (M1A/B) (set 5)", - "m1hotpote", "Hot Pots (Maygay) (M1A/B) (set 6)", - "m1hotpoth", "Hot Pots (Maygay) (M1A/B) (set 9)", - "m1hotpoti", "Hot Pots (Maygay) (M1A/B) (set 10)", - "m1hotpotj", "Hot Pots (Maygay) (M1A/B) (set 11)", - "m1hotpotk", "Hot Pots (Maygay) (M1A/B) (set 12)", - "m1hotpotl", "Hot Pots (Maygay) (M1A/B) (set 13)", - "m1hotpotm", "Hot Pots (Maygay) (M1A/B) (set 14)", - "m1hotpotn", "Hot Pots (Maygay) (M1A/B) (set 15)", - "m1hotpoto", "Hot Pots (Maygay) (M1A/B) (set 16)", - "m1hotpotp", "Hot Pots (Maygay) (M1A/B) (set 17)", - "m1hotpotq", "Hot Pots (Maygay) (M1A/B) (set 18)", - "m1hotpotr", "Hot Pots (Maygay) (M1A/B) (set 19)", - "m1hotpots", "Hot Pots (Maygay) (M1A/B) (set 20)", - "m1hotpott", "Hot Pots (Maygay) (M1A/B) (set 21)", - "m1hotpotu", "Hot Pots (Maygay) (M1A/B) (set 22)", - "m1hotpotv", "Hot Pots (Maygay) (M1A/B) (set 23)", - "m1hotpotw", "Hot Pots (Maygay) (M1A/B) (set 24)", - "m1hotpotx", "Hot Pots (Maygay) (M1A/B) (set 25)", - "m1hotpoty", "Hot Pots (Maygay) (M1A/B) (set 26)", - "m1hotpotz", "Hot Pots (Maygay) (M1A/B) (set 27)", - "m1htclb", "Hi Tension Club (Maygay) (M1A/B) (set 1)", - "m1htclba", "Hi Tension Club (Maygay) (M1A/B) (set 2)", - "m1imclb", "Instant Millionaire Club (Maygay) (M1A/B) (set 1)", - "m1imclba", "Instant Millionaire Club (Maygay) (M1A/B) (set 2)", - "m1imclbb", "Instant Millionaire Club (Maygay) (M1A/B) (set 3)", - "m1infern", "Inferno (Maygay) (M1A/B) (set 1)", - "m1inferna", "Inferno (Maygay) (M1A/B) (set 2)", - "m1infernb", "Inferno (Maygay) (M1A/B) (set 3)", - "m1infernc", "Inferno (Maygay) (M1A/B) (set 4)", - "m1infernd", "Inferno (Maygay) (M1A/B) (set 5)", - "m1inferne", "Inferno (Maygay) (M1A/B) (set 6)", - "m1infernf", "Inferno (Maygay) (M1A/B) (set 7)", - "m1inferng", "Inferno (Maygay) (M1A/B) (set 8)", - "m1infernh", "Inferno (Maygay) (M1A/B) (set 9)", - "m1inferni", "Inferno (Maygay) (M1A/B) (set 10)", - "m1infernj", "Inferno (Maygay) (M1A/B) (set 11)", - "m1infernk", "Inferno (Maygay) (M1A/B) (set 12)", - "m1infernl", "Inferno (Maygay) (M1A/B) (set 13)", - "m1inwin", "Instant Win (Maygay) (M1A/B) (set 1)", - "m1inwina", "Instant Win (Maygay) (M1A/B) (set 2)", - "m1inwinb", "Instant Win (Maygay) (M1A/B) (set 3)", - "m1inwinc", "Instant Win (Maygay) (M1A/B) (set 4)", - "m1inwinf", "Instant Win (Maygay) (M1A/B) (set 7)", - "m1inwinh", "Instant Win (Maygay) (M1A/B) (set 9)", - "m1inwini", "Instant Win (Maygay) (M1A/B) (set 10)", - "m1inwinj", "Instant Win (Maygay) (M1A/B) (set 11)", - "m1inwink", "Instant Win (Maygay) (M1A/B) (set 12)", - "m1inwinl", "Instant Win (Maygay) (M1A/B) (set 13)", - "m1inwinm", "Instant Win (Maygay) (M1A/B) (set 14)", - "m1inwinn", "Instant Win (Maygay) (M1A/B) (set 15)", - "m1inwino", "Instant Win (Maygay) (M1A/B) (set 16)", - "m1inwinp", "Instant Win (Maygay) (M1A/B) (set 17)", - "m1inwinq", "Instant Win (Maygay) (M1A/B) (set 18)", - "m1inwinr", "Instant Win (Maygay) (M1A/B) (set 19)", - "m1inwins", "Instant Win (Maygay) (M1A/B) (set 20)", - "m1inwint", "Instant Win (Maygay) (M1A/B) (set 21)", - "m1inwinu", "Instant Win (Maygay) (M1A/B) (set 22)", - "m1inwinv", "Instant Win (Maygay) (M1A/B) (set 23)", - "m1inwinw", "Instant Win (Maygay) (M1A/B) (set 24)", - "m1inwinx", "Instant Win (Maygay) (M1A/B) (set 25)", - "m1itjob", "Italian Job (Maygay) (M1A/B) (set 1)", - "m1itjobc", "Italian Job (Maygay) (M1A/B) (set 4)", - "m1itjobd", "Italian Job (Maygay) (M1A/B) (set 5)", - "m1itjobe", "Italian Job (Maygay) (M1A/B) (set 6)", - "m1itjobf", "Italian Job (Maygay) (M1A/B) (set 7)", - "m1itjobg", "Italian Job (Maygay) (M1A/B) (set 8)", - "m1itjobh", "Italian Job (Maygay) (M1A/B) (set 9)", - "m1itjobi", "Italian Job (Maygay) (M1A/B) (set 10)", - "m1itjobj", "Italian Job (Maygay) (M1A/B) (set 11)", - "m1itjobk", "Italian Job (Maygay) (M1A/B) (set 12)", - "m1itjobl", "Italian Job (Maygay) (M1A/B) (set 13)", - "m1itjobm", "Italian Job (Maygay) (M1A/B) (set 14)", - "m1itjobn", "Italian Job (Maygay) (M1A/B) (set 15)", - "m1itjobo", "Italian Job (Maygay) (M1A/B) (set 16)", - "m1itjobp", "Italian Job (Maygay) (M1A/B) (set 17)", - "m1itjobq", "Italian Job (Maygay) (M1A/B) (set 18)", - "m1itjobr", "Italian Job (Maygay) (M1A/B) (set 19)", - "m1itsko", "It's A Knockout (Maygay) (M1A/B) (set 1)", - "m1itsko0", "It's A Knockout (Maygay) (M1A/B) (set 28)", - "m1itsko1", "It's A Knockout (Maygay) (M1A/B) (set 29)", - "m1itsko2", "It's A Knockout (Maygay) (M1A/B) (set 30)", - "m1itsko3", "It's A Knockout (Maygay) (M1A/B) (set 31)", - "m1itsko4", "It's A Knockout (Maygay) (M1A/B) (set 32)", - "m1itsko5", "It's A Knockout (Maygay) (M1A/B) (set 33)", - "m1itsko6", "It's A Knockout (Maygay) (M1A/B) (set 34)", - "m1itsko7", "It's A Knockout (Maygay) (M1A/B) (set 35)", - "m1itsko8", "It's A Knockout (Maygay) (M1A/B) (set 36)", - "m1itskoa", "It's A Knockout (Maygay) (M1A/B) (set 2)", - "m1itskob", "It's A Knockout (Maygay) (M1A/B) (set 3)", - "m1itskoc", "It's A Knockout (Maygay) (M1A/B) (set 4)", - "m1itskod", "It's A Knockout (Maygay) (M1A/B) (set 5)", - "m1itskoe", "It's A Knockout (Maygay) (M1A/B) (set 6)", - "m1itskof", "It's A Knockout (Maygay) (M1A/B) (set 7)", - "m1itskog", "It's A Knockout (Maygay) (M1A/B) (set 8)", - "m1itskoh", "It's A Knockout (Maygay) (M1A/B) (set 9)", - "m1itskoi", "It's A Knockout (Maygay) (M1A/B) (set 10)", - "m1itskoj", "It's A Knockout (Maygay) (M1A/B) (set 11)", - "m1itskok", "It's A Knockout (Maygay) (M1A/B) (set 12)", - "m1itskol", "It's A Knockout (Maygay) (M1A/B) (set 13)", - "m1itskom", "It's A Knockout (Maygay) (M1A/B) (set 14)", - "m1itskon", "It's A Knockout (Maygay) (M1A/B) (set 15)", - "m1itskoo", "It's A Knockout (Maygay) (M1A/B) (set 16)", - "m1itskop", "It's A Knockout (Maygay) (M1A/B) (set 17)", - "m1itskoq", "It's A Knockout (Maygay) (M1A/B) (set 18)", - "m1itskor", "It's A Knockout (Maygay) (M1A/B) (set 19)", - "m1itskos", "It's A Knockout (Maygay) (M1A/B) (set 20)", - "m1itskot", "It's A Knockout (Maygay) (M1A/B) (set 21)", - "m1itskou", "It's A Knockout (Maygay) (M1A/B) (set 22)", - "m1itskov", "It's A Knockout (Maygay) (M1A/B) (set 23)", - "m1itskow", "It's A Knockout (Maygay) (M1A/B) (set 24)", - "m1itskox", "It's A Knockout (Maygay) (M1A/B) (set 25)", - "m1itskoy", "It's A Knockout (Maygay) (M1A/B) (set 26)", - "m1itskoz", "It's A Knockout (Maygay) (M1A/B) (set 27)", - "m1jbond", "James Bond (Maygay) (M1A/B) (set 1)", - "m1jbonda", "James Bond (Maygay) (M1A/B) (set 2)", - "m1jbondb", "James Bond (Maygay) (M1A/B) (set 3)", - "m1jbondc", "James Bond (Maygay) (M1A/B) (set 4)", - "m1jbondd", "James Bond (Maygay) (M1A/B) (set 5)", - "m1jbonde", "James Bond (Maygay) (M1A/B) (set 6)", - "m1jbondf", "James Bond (Maygay) (M1A/B) (set 7)", - "m1jbondg", "James Bond (Maygay) (M1A/B) (set 8)", - "m1jbondh", "James Bond (Maygay) (M1A/B) (set 9)", - "m1jbondi", "James Bond (Maygay) (M1A/B) (set 10)", - "m1jbondj", "James Bond (Maygay) (M1A/B) (set 11)", - "m1jbondk", "James Bond (Maygay) (M1A/B) (set 12)", - "m1jbondl", "James Bond (Maygay) (M1A/B) (set 13)", - "m1jbondm", "James Bond (Maygay) (M1A/B) (set 14)", - "m1jbondn", "James Bond (Maygay) (M1A/B) (set 15)", - "m1jbondo", "James Bond (Maygay) (M1A/B) (set 16)", - "m1jbondp", "James Bond (Maygay) (M1A/B) (set 17)", - "m1jbondq", "James Bond (Maygay) (M1A/B) (set 18)", - "m1jdwins", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 1)", - "m1jdwinsa", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 2)", - "m1jdwinsb", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 3)", - "m1jdwinsc", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 4)", - "m1jdwinsd", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 5)", - "m1jdwinse", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 6)", - "m1jdwinsf", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 7)", - "m1jdwinsg", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 8)", - "m1jdwinsh", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 9)", - "m1jdwinsi", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 10)", - "m1jdwinsj", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 11)", - "m1jdwinsk", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 12)", - "m1jdwinsl", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 13)", - "m1jdwinsm", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 14)", - "m1jdwinsn", "Jim Davison's Winning Streak (Maygay) (M1A/B) (set 15)", - "m1jpmult", "Jackpot Multiplier (Maygay) (M1A/B) (set 1)", - "m1jpmulta", "Jackpot Multiplier (Maygay) (M1A/B) (set 2)", - "m1jtjob", "Just The Job (Global) (M1A/B) (set 1)", - "m1jtjoba", "Just The Job (Global) (M1A/B) (set 2)", - "m1jtjobb", "Just The Job (Global) (M1A/B) (set 3)", - "m1jtjobc", "Just The Job (Global) (M1A/B) (set 4)", - "m1jtjobd", "Just The Job (Global) (M1A/B) (set 5)", - "m1jtjobe", "Just The Job (Global) (M1A/B) (set 6)", - "m1kingsw", "King Of The Swingers (Global) (M1A/B) (set 1)", - "m1kingswa", "King Of The Swingers (Global) (M1A/B) (set 2)", - "m1kingswb", "King Of The Swingers (Global) (M1A/B) (set 3)", - "m1kingswc", "King Of The Swingers (Global) (M1A/B) (set 4)", - "m1lca", "Lights Camera Action (Global) (M1A/B) (set 1)", - "m1lcaa", "Lights Camera Action (Global) (M1A/B) (set 2)", - "m1lcab", "Lights Camera Action (Global) (M1A/B) (set 3)", - "m1lcac", "Lights Camera Action (Global) (M1A/B) (set 4)", - "m1liveam", "Living In America (Maygay) (M1A/B) (set 1)", - "m1liveama", "Living In America (Maygay) (M1A/B) (set 2)", - "m1liveamb", "Living In America (Maygay) (M1A/B) (set 3)", - "m1lotmil", "Lottery Millionaire Club (Maygay) (M1A/B) (set 1)", - "m1lotmila", "Lottery Millionaire Club (Maygay) (M1A/B) (set 2)", - "m1lotmilb", "Lottery Millionaire Club (Maygay) (M1A/B) (set 3)", - "m1lotmilc", "Lottery Millionaire Club (Maygay) (M1A/B) (set 4)", - "m1luckno", "Lucky Numbers (Maygay) (M1A/B) (set 1)", - "m1lucknoa", "Lucky Numbers (Maygay) (M1A/B) (set 2)", - "m1lucknob", "Lucky Numbers (Maygay) (M1A/B) (set 3)", - "m1lucknoc", "Lucky Numbers (Maygay) (M1A/B) (set 4)", - "m1lucknod", "Lucky Numbers (Maygay) (M1A/B) (set 5)", - "m1lucknoe", "Lucky Numbers (Maygay) (M1A/B) (set 6)", - "m1lucknof", "Lucky Numbers (Maygay) (M1A/B) (set 7)", - "m1lucknog", "Lucky Numbers (Maygay) (M1A/B) (set 8)", - "m1lucknoh", "Lucky Numbers (Maygay) (M1A/B) (set 9)", - "m1lucknoi", "Lucky Numbers (Maygay) (M1A/B) (set 10)", - "m1lucknoj", "Lucky Numbers (Maygay) (M1A/B) (set 11)", - "m1lucknok", "Lucky Numbers (Maygay) (M1A/B) (set 12)", - "m1lucknol", "Lucky Numbers (Maygay) (M1A/B) (set 13)", - "m1lucknom", "Lucky Numbers (Maygay) (M1A/B) (set 14)", - "m1lucknon", "Lucky Numbers (Maygay) (M1A/B) (set 15)", - "m1lucknoo", "Lucky Numbers (Maygay) (M1A/B) (set 16)", - "m1lucknop", "Lucky Numbers (Maygay) (M1A/B) (set 17)", - "m1lucknoq", "Lucky Numbers (Maygay) (M1A/B) (set 18)", - "m1lucknor", "Lucky Numbers (Maygay) (M1A/B) (set 19)", - "m1lucknos", "Lucky Numbers (Maygay) (M1A/B) (set 20)", - "m1luxor", "Luxor Casino (Gemini) (M1A/B) (set 1)", - "m1luxora", "Luxor Casino (Gemini) (M1A/B) (set 2)", - "m1luxorb", "Luxor Casino (Gemini) (M1A/B) (set 3)", - "m1luxorc", "Luxor Casino (Gemini) (M1A/B) (set 4)", - "m1magic", "Magic Squares (Maygay) (M1A/B) (set 1)", - "m1magica", "Magic Squares (Maygay) (M1A/B) (set 2)", - "m1magicb", "Magic Squares (Maygay) (M1A/B) (set 3)", - "m1magicc", "Magic Squares (Maygay) (M1A/B) (set 4)", - "m1manhat", "Manhattan Skylines (Maygay) (M1A/B)", - "m1mb", "Monkey Business (Global) (M1A/B) (set 1)", - "m1mba", "Monkey Business (Global) (M1A/B) (set 2)", - "m1mbb", "Monkey Business (Global) (M1A/B) (set 3)", - "m1mbc", "Monkey Business (Global) (M1A/B) (set 4)", - "m1mbclb", "Monkey Business Club (Global) (M1A/B)", - "m1monclb", "Monopoly Club (Maygay) (M1A/B) (set 1)", - "m1monclba", "Monopoly Club (Maygay) (M1A/B) (set 2)", - "m1monclbb", "Monopoly Club (Maygay) (M1A/B) (set 3)", - "m1monclbc", "Monopoly Club (Maygay) (M1A/B) (set 4)", - "m1monclbd", "Monopoly Club (Maygay) (M1A/B) (set 5)", - "m1monclbe", "Monopoly Club (Maygay) (M1A/B) (set 6)", - "m1monclbf", "Monopoly Club (Maygay) (M1A/B) (set 7)", - "m1monclbg", "Monopoly Club (Maygay) (M1A/B) (set 8)", - "m1monclbh", "Monopoly Club (Maygay) (M1A/B) (set 9)", - "m1monclbi", "Monopoly Club (Maygay) (M1A/B) (set 10)", - "m1monclbj", "Monopoly Club (Maygay) (M1A/B) (set 11)", - "m1monclbk", "Monopoly Club (Maygay) (M1A/B) (set 12)", - "m1monclbl", "Monopoly Club (Maygay) (M1A/B) (set 13)", - "m1monclbm", "Monopoly Club (Maygay) (M1A/B) (set 14)", - "m1moncls", "Monopoly Classic (Maygay) (M1A/B) (set 1)", - "m1monclsa", "Monopoly Classic (Maygay) (M1A/B) (set 2)", - "m1monclsb", "Monopoly Classic (Maygay) (M1A/B) (set 3)", - "m1monclsc", "Monopoly Classic (Maygay) (M1A/B) (set 4)", - "m1monclsd", "Monopoly Classic (Maygay) (M1A/B) (set 5)", - "m1mongam", "Money Game Club (Maygay) (M1A/B) (set 1)", - "m1mongama", "Money Game Club (Maygay) (M1A/B) (set 2)", - "m1mongamb", "Money Game Club (Maygay) (M1A/B) (set 3)", - "m1monmon", "Money Money Money (Maygay) (M1A/B) (set 1)", - "m1monmona", "Money Money Money (Maygay) (M1A/B) (set 2)", - "m1monmonb", "Money Money Money (Maygay) (M1A/B) (set 3)", - "m1monmonc", "Money Money Money (Maygay) (M1A/B) (set 4)", - "m1monmond", "Money Money Money (Maygay) (M1A/B) (set 5)", - "m1monmone", "Money Money Money (Maygay) (M1A/B) (set 6)", - "m1monmonf", "Money Money Money (Maygay) (M1A/B) (set 7)", - "m1monmong", "Money Money Money (Maygay) (M1A/B) (set 8)", - "m1monmonh", "Money Money Money (Maygay) (M1A/B) (set 9)", - "m1monmoni", "Money Money Money (Maygay) (M1A/B) (set 10)", - "m1monmonj", "Money Money Money (Maygay) (M1A/B) (set 11)", - "m1monmonk", "Money Money Money (Maygay) (M1A/B) (set 12)", - "m1monmonl", "Money Money Money (Maygay) (M1A/B) (set 13)", - "m1monmonm", "Money Money Money (Maygay) (M1A/B) (set 14)", - "m1monmonn", "Money Money Money (Maygay) (M1A/B) (set 15)", - "m1monmono", "Money Money Money (Maygay) (M1A/B) (set 16)", - "m1monmonp", "Money Money Money (Maygay) (M1A/B) (set 17)", - "m1monmonq", "Money Money Money (Maygay) (M1A/B) (set 18)", - "m1monmonr", "Money Money Money (Maygay) (M1A/B) (set 19)", - "m1monmons", "Money Money Money (Maygay) (M1A/B) (set 20)", - "m1monmont", "Money Money Money (Maygay) (M1A/B) (set 21)", - "m1monmonu", "Money Money Money (Maygay) (M1A/B) (set 22)", - "m1monmonv", "Money Money Money (Maygay) (M1A/B) (set 23)", - "m1monmonw", "Money Money Money (Maygay) (M1A/B) (set 24)", - "m1mono", "Monopoly (Maygay) (M1A/B) (set 1)", - "m1mono0", "Monopoly (Maygay) (M1A/B) (set 28)", - "m1mono1", "Monopoly (Maygay) (M1A/B) (set 29)", - "m1mono2", "Monopoly (Maygay) (M1A/B) (set 30)", - "m1mono3", "Monopoly (Maygay) (M1A/B) (set 31)", - "m1mono4", "Monopoly (Maygay) (M1A/B) (set 32)", - "m1mono5", "Monopoly (Maygay) (M1A/B) (set 33)", - "m1mono6", "Monopoly (Maygay) (M1A/B) (set 34)", - "m1mono7", "Monopoly (Maygay) (M1A/B) (set 35)", - "m1mono8", "Monopoly (Maygay) (M1A/B) (set 36)", - "m1mono9", "Monopoly (Maygay) (M1A/B) (set 37)", - "m1monoa", "Monopoly (Maygay) (M1A/B) (set 2)", - "m1monoaa", "Monopoly (Maygay) (M1A/B) (set 38)", - "m1monoc", "Monopoly (Maygay) (M1A/B) (set 4)", - "m1monod", "Monopoly (Maygay) (M1A/B) (set 5)", - "m1monodt", "Monopoly (Dutch) (Maygay) (M1A/B)", - "m1monoe", "Monopoly (Maygay) (M1A/B) (set 6)", - "m1monof", "Monopoly (Maygay) (M1A/B) (set 7)", - "m1monog", "Monopoly (Maygay) (M1A/B) (set 8)", - "m1monoh", "Monopoly (Maygay) (M1A/B) (set 9)", - "m1monoi", "Monopoly (Maygay) (M1A/B) (set 10)", - "m1monok", "Monopoly (Maygay) (M1A/B) (set 12)", - "m1monol", "Monopoly (Maygay) (M1A/B) (set 13)", - "m1monom", "Monopoly (Maygay) (M1A/B) (set 14)", - "m1monon", "Monopoly (Maygay) (M1A/B) (set 15)", - "m1monoo", "Monopoly (Maygay) (M1A/B) (set 16)", - "m1monop", "Monopoly (Maygay) (M1A/B) (set 17)", - "m1monoq", "Monopoly (Maygay) (M1A/B) (set 18)", - "m1monor", "Monopoly (Maygay) (M1A/B) (set 19)", - "m1monos", "Monopoly (Maygay) (M1A/B) (set 20)", - "m1monot", "Monopoly (Maygay) (M1A/B) (set 21)", - "m1monou", "Monopoly (Maygay) (M1A/B) (set 22)", - "m1monov", "Monopoly (Maygay) (M1A/B) (set 23)", - "m1monow", "Monopoly (Maygay) (M1A/B) (set 24)", - "m1monox", "Monopoly (Maygay) (M1A/B) (set 25)", - "m1monoy", "Monopoly (Maygay) (M1A/B) (set 26)", - "m1monoz", "Monopoly (Maygay) (M1A/B) (set 27)", - "m1monstr", "Monster Cash (Maygay) (M1A/B) (set 1)", - "m1monstra", "Monster Cash (Maygay) (M1A/B) (set 2)", - "m1monstrb", "Monster Cash (Maygay) (M1A/B) (set 3)", - "m1monstrc", "Monster Cash (Maygay) (M1A/B) (set 4)", - "m1nhp", "Noel's House Party (Maygay) (M1A/B) (set 1)", - "m1nhpa", "Noel's House Party (Maygay) (M1A/B) (set 2)", - "m1nhpb", "Noel's House Party (Maygay) (M1A/B) (set 3)", - "m1nhpc", "Noel's House Party (Maygay) (M1A/B) (set 4)", - "m1nhpd", "Noel's House Party (Maygay) (M1A/B) (set 5)", - "m1nhpe", "Noel's House Party (Maygay) (M1A/B) (set 6)", - "m1nhpf", "Noel's House Party (Maygay) (M1A/B) (set 7)", - "m1nhpg", "Noel's House Party (Maygay) (M1A/B) (set 8)", - "m1nhph", "Noel's House Party (Maygay) (M1A/B) (set 9)", - "m1nhpi", "Noel's House Party (Maygay) (M1A/B) (set 10)", - "m1nhpj", "Noel's House Party (Maygay) (M1A/B) (set 11)", - "m1nhpk", "Noel's House Party (Maygay) (M1A/B) (set 12)", - "m1nhpl", "Noel's House Party (Maygay) (M1A/B) (set 13)", - "m1nhpm", "Noel's House Party (Maygay) (M1A/B) (set 14)", - "m1nudbnk", "Nudge Banker (Maygay) (M1A/B) (set 1)", - "m1nudbnka", "Nudge Banker (Maygay) (M1A/B) (set 2)", - "m1nudbnkb", "Nudge Banker (Maygay) (M1A/B) (set 3)", - "m1nudbnkc", "Nudge Banker (Maygay) (M1A/B) (set 4)", - "m1nudbnkd", "Nudge Banker (Maygay) (M1A/B) (set 5)", - "m1nudbnke", "Nudge Banker (Maygay) (M1A/B) (set 6)", - "m1nudbnkf", "Nudge Banker (Maygay) (M1A/B) (set 7)", - "m1nudbnkg", "Nudge Banker (Maygay) (M1A/B) (set 8)", - "m1nudbnkh", "Nudge Banker (Maygay) (M1A/B) (set 9)", - "m1nudbnki", "Nudge Banker (Maygay) (M1A/B) (set 10)", - "m1nudbnkj", "Nudge Banker (Maygay) (M1A/B) (set 11)", - "m1nudbnkk", "Nudge Banker (Maygay) (M1A/B) (set 12)", - "m1nudbnkl", "Nudge Banker (Maygay) (M1A/B) (set 13)", - "m1nudbnkm", "Nudge Banker (Maygay) (M1A/B) (set 14)", - "m1nudbnkn", "Nudge Banker (Maygay) (M1A/B) (set 15)", - "m1nudbnko", "Nudge Banker (Maygay) (M1A/B) (set 16)", - "m1nudbnkp", "Nudge Banker (Maygay) (M1A/B) (set 17)", - "m1nudbnkq", "Nudge Banker (Maygay) (M1A/B) (set 18)", - "m1nudbnkr", "Nudge Banker (Maygay) (M1A/B) (set 19)", - "m1nudbnks", "Nudge Banker (Maygay) (M1A/B) (set 20)", - "m1nudbnkt", "Nudge Banker (Maygay) (M1A/B) (set 21)", - "m1nudbnku", "Nudge Banker (Maygay) (M1A/B) (set 22)", - "m1nudbnkv", "Nudge Banker (Maygay) (M1A/B) (set 23)", - "m1nudunl", "Nudges Unlimited (Maygay) (M1A/B) (set 1)", - "m1nudunla", "Nudges Unlimited (Maygay) (M1A/B) (set 2)", - "m1nudunlb", "Nudges Unlimited (Maygay) (M1A/B) (set 3)", - "m1nudunlc", "Nudges Unlimited (Maygay) (M1A/B) (set 4)", - "m1nudunld", "Nudges Unlimited (Maygay) (M1A/B) (set 5)", - "m1nudunle", "Nudges Unlimited (Maygay) (M1A/B) (set 6)", - "m1omega", "Omega (Maygay) (M1A/B) (set 1)", - "m1omegaa", "Omega (Maygay) (M1A/B) (set 2)", - "m1onbus", "On The Buses (Maygay) (M1A/B) (set 1)", - "m1onbusa", "On The Buses (Maygay) (M1A/B) (set 2)", - "m1onbusb", "On The Buses (Maygay) (M1A/B) (set 3)", - "m1onbusc", "On The Buses (Maygay) (M1A/B) (set 4)", - "m1onbusd", "On The Buses (Maygay) (M1A/B) (set 5)", - "m1onbuse", "On The Buses (Maygay) (M1A/B) (set 6)", - "m1onbusf", "On The Buses (Maygay) (M1A/B) (set 7)", - "m1onbusg", "On The Buses (Maygay) (M1A/B) (set 8)", - "m1onbush", "On The Buses (Maygay) (M1A/B) (set 9)", - "m1onbusi", "On The Buses (Maygay) (M1A/B) (set 10)", - "m1onbusj", "On The Buses (Maygay) (M1A/B) (set 11)", - "m1onbusk", "On The Buses (Maygay) (M1A/B) (set 12)", - "m1onbusl", "On The Buses (Maygay) (M1A/B) (set 13)", - "m1onbusm", "On The Buses (Maygay) (M1A/B) (set 14)", - "m1onbusn", "On The Buses (Maygay) (M1A/B) (set 15)", - "m1onbuso", "On The Buses (Maygay) (M1A/B) (set 16)", - "m1onbusp", "On The Buses (Maygay) (M1A/B) (set 17)", - "m1ott", "Over The Top (Maygay) (M1A/B) (set 1)", - "m1otta", "Over The Top (Maygay) (M1A/B) (set 2)", - "m1piggy", "Piggy Bank (Maygay) (M1A/B) (set 1)", - "m1piggya", "Piggy Bank (Maygay) (M1A/B) (set 2)", - "m1piggyb", "Piggy Bank (Maygay) (M1A/B) (set 3)", - "m1piggyc", "Piggy Bank (Maygay) (M1A/B) (set 4)", - "m1pinkp", "Pink Panther (Maygay) (M1A/B) (set 1)", - "m1pinkpa", "Pink Panther (Maygay) (M1A/B) (set 2)", - "m1pinkpb", "Pink Panther (Maygay) (M1A/B) (set 3)", - "m1pinkpc", "Pink Panther (Maygay) (M1A/B) (set 4)", - "m1pinkpd", "Pink Panther (Maygay) (M1A/B) (set 5)", - "m1pinkpe", "Pink Panther (Maygay) (M1A/B) (set 6)", - "m1pinkpf", "Pink Panther (Maygay) (M1A/B) (set 7)", - "m1pinkpg", "Pink Panther (Maygay) (M1A/B) (set 8)", - "m1pinkph", "Pink Panther (Maygay) (M1A/B) (set 9)", - "m1pinkpi", "Pink Panther (Maygay) (M1A/B) (set 10)", - "m1pinkpj", "Pink Panther (Maygay) (M1A/B) (set 11)", - "m1pinkpk", "Pink Panther (Maygay) (M1A/B) (set 12)", - "m1pinkpl", "Pink Panther (Maygay) (M1A/B) (set 13)", - "m1pinkpm", "Pink Panther (Maygay) (M1A/B) (set 14)", - "m1pinkpn", "Pink Panther (Maygay) (M1A/B) (set 15)", - "m1pinkpo", "Pink Panther (Maygay) (M1A/B) (set 16)", - "m1pinkpp", "Pink Panther (Maygay) (M1A/B) (set 17)", - "m1pinkpq", "Pink Panther (Maygay) (M1A/B) (set 18)", - "m1pinkpr", "Pink Panther (Maygay) (M1A/B) (set 19)", - "m1ppc", "Pink Panther Club (Maygay) (M1A/B) (set 1)", - "m1ppca", "Pink Panther Club (Maygay) (M1A/B) (set 2)", - "m1ppcb", "Pink Panther Club (Maygay) (M1A/B) (set 3)", - "m1ppdt", "Pink Panther (German) (Maygay) (M1A/B)", - "m1przclu", "Prize Cluedo (Maygay) (M1A/B) (set 1)", - "m1przclua", "Prize Cluedo (Maygay) (M1A/B) (set 2)", - "m1przclub", "Prize Cluedo (Maygay) (M1A/B) (set 3)", - "m1przee", "Prize Eastenders (Maygay) (M1A/B) (set 1)", - "m1przeea", "Prize Eastenders (Maygay) (M1A/B) (set 2)", - "m1przeeb", "Prize Eastenders (Maygay) (M1A/B) (set 3)", - "m1przeec", "Prize Eastenders (Maygay) (M1A/B) (set 4)", - "m1races", "A Day At The Races (Maygay) (M1A/B) (set 1)", - "m1racesa", "A Day At The Races (Maygay) (M1A/B) (set 2)", - "m1racesb", "A Day At The Races (Maygay) (M1A/B) (set 3)", - "m1racesc", "A Day At The Races (Maygay) (M1A/B) (set 4)", - "m1reeldm", "Reel Diamonds (Maygay) (M1A/B) (set 1)", - "m1reeldma", "Reel Diamonds (Maygay) (M1A/B) (set 2)", - "m1reeldmb", "Reel Diamonds (Maygay) (M1A/B) (set 3)", - "m1reeldmc", "Reel Diamonds (Maygay) (M1A/B) (set 4)", - "m1reeldmd", "Reel Diamonds (Maygay) (M1A/B) (set 5)", - "m1reeldme", "Reel Diamonds (Maygay) (M1A/B) (set 6)", - "m1reeldmf", "Reel Diamonds (Maygay) (M1A/B) (set 7)", - "m1reeldmg", "Reel Diamonds (Maygay) (M1A/B) (set 8)", - "m1reeldmh", "Reel Diamonds (Maygay) (M1A/B) (set 9)", - "m1reeldmi", "Reel Diamonds (Maygay) (M1A/B) (set 10)", - "m1reeldmj", "Reel Diamonds (Maygay) (M1A/B) (set 11)", - "m1reeldmk", "Reel Diamonds (Maygay) (M1A/B) (set 12)", - "m1reeldml", "Reel Diamonds (Maygay) (M1A/B) (set 13)", - "m1reeldmm", "Reel Diamonds (Maygay) (M1A/B) (set 14)", - "m1reeldmn", "Reel Diamonds (Maygay) (M1A/B) (set 15)", - "m1reeldmo", "Reel Diamonds (Maygay) (M1A/B) (set 16)", - "m1retpp", "Return Of The Pink Panther (Maygay) (M1A/B) (set 1)", - "m1retppa", "Return Of The Pink Panther (Maygay) (M1A/B) (set 2)", - "m1retppb", "Return Of The Pink Panther (Maygay) (M1A/B) (set 3)", - "m1retppc", "Return Of The Pink Panther (Maygay) (M1A/B) (set 4)", - "m1retppd", "Return Of The Pink Panther (Maygay) (M1A/B) (set 5)", - "m1search", "Search Light (Maygay) (M1A/B) (set 1)", - "m1searcha", "Search Light (Maygay) (M1A/B) (set 2)", - "m1searchb", "Search Light (Maygay) (M1A/B) (set 3)", - "m1simps", "The Simpsons (Maygay) (M1A/B) (set 1)", - "m1simpsa", "The Simpsons (Maygay) (M1A/B) (set 2)", - "m1simpsb", "The Simpsons (Maygay) (M1A/B) (set 3)", - "m1simpsc", "The Simpsons (Maygay) (M1A/B) (set 4)", - "m1simpsd", "The Simpsons (Maygay) (M1A/B) (set 5)", - "m1simpse", "The Simpsons (Maygay) (M1A/B) (set 6)", - "m1simpsf", "The Simpsons (Maygay) (M1A/B) (set 7)", - "m1simpsg", "The Simpsons (Maygay) (M1A/B) (set 8)", - "m1sirich", "Strike It Rich (Maygay) (M1A/B) (set 1)", - "m1siricha", "Strike It Rich (Maygay) (M1A/B) (set 2)", - "m1sirichb", "Strike It Rich (Maygay) (M1A/B) (set 3)", - "m1sirichc", "Strike It Rich (Maygay) (M1A/B) (set 4)", - "m1sixspn", "Six Spinner (Maygay) (M1A/B)", - "m1spid", "Spiderman (Maygay) (M1A/B) (set 1)", - "m1spida", "Spiderman (Maygay) (M1A/B) (set 2)", - "m1spidb", "Spiderman (Maygay) (M1A/B) (set 3)", - "m1sprnov", "Super Nova (Dutch) (Maygay) (M1A/B)", - "m1sptlgt", "Spotlight (Maygay) (M1A/B) (set 1)", - "m1sptlgta", "Spotlight (Maygay) (M1A/B) (set 2)", - "m1sptlgtb", "Spotlight (Maygay) (M1A/B) (set 3)", - "m1sptlgtc", "Spotlight (Maygay) (M1A/B) (set 4)", - "m1sptlgtd", "Spotlight (Maygay) (M1A/B) (set 5)", - "m1sptlgte", "Spotlight (Maygay) (M1A/B) (set 6)", - "m1startr", "Star Trekking (Mdm) (M1A/B) (set 1)", - "m1startra", "Star Trekking (Mdm) (M1A/B) (set 2)", - "m1startrb", "Star Trekking (Mdm) (M1A/B) (set 3)", - "m1startrc", "Star Trekking (Mdm) (M1A/B) (set 4)", - "m1startrd", "Star Trekking (Mdm) (M1A/B) (set 5)", - "m1startre", "Star Trekking (Mdm) (M1A/B) (set 6)", - "m1startrf", "Star Trekking (Mdm) (M1A/B) (set 7)", - "m1startrg", "Star Trekking (Mdm) (M1A/B) (set 8)", - "m1startrh", "Star Trekking (Mdm) (M1A/B) (set 9)", - "m1startri", "Star Trekking (Mdm) (M1A/B) (set 10)", - "m1startrj", "Star Trekking (Mdm) (M1A/B) (set 11)", - "m1startrk", "Star Trekking (Mdm) (M1A/B) (set 12)", - "m1startrm", "Star Trekking (Mdm) (M1A/B) (set 14)", - "m1startrn", "Star Trekking (Mdm) (M1A/B) (set 15)", - "m1startro", "Star Trekking (Mdm) (M1A/B) (set 16)", - "m1startrp", "Star Trekking (Mdm) (M1A/B) (set 17)", - "m1startrq", "Star Trekking (Mdm) (M1A/B) (set 18)", - "m1startrr", "Star Trekking (Mdm) (M1A/B) (set 19)", - "m1sudnim", "Sudden Impact (Maygay) (M1A/B) (set 1)", - "m1sudnima", "Sudden Impact (Maygay) (M1A/B) (set 2)", - "m1sudnimb", "Sudden Impact (Maygay) (M1A/B) (set 3)", - "m1sudnimc", "Sudden Impact (Maygay) (M1A/B) (set 4)", - "m1suppot", "Super Pots (Maygay) (M1A/B) (set 1)", - "m1suppot0", "Super Pots (Maygay) (M1A/B) (set 28)", - "m1suppota", "Super Pots (Maygay) (M1A/B) (set 2)", - "m1suppotb", "Super Pots (Maygay) (M1A/B) (set 3)", - "m1suppotc", "Super Pots (Maygay) (M1A/B) (set 4)", - "m1suppotd", "Super Pots (Maygay) (M1A/B) (set 5)", - "m1suppote", "Super Pots (Maygay) (M1A/B) (set 6)", - "m1suppotf", "Super Pots (Maygay) (M1A/B) (set 7)", - "m1suppotg", "Super Pots (Maygay) (M1A/B) (set 8)", - "m1suppoti", "Super Pots (Maygay) (M1A/B) (set 10)", - "m1suppotj", "Super Pots (Maygay) (M1A/B) (set 11)", - "m1suppotk", "Super Pots (Maygay) (M1A/B) (set 12)", - "m1suppotl", "Super Pots (Maygay) (M1A/B) (set 13)", - "m1suppotm", "Super Pots (Maygay) (M1A/B) (set 14)", - "m1suppotn", "Super Pots (Maygay) (M1A/B) (set 15)", - "m1suppoto", "Super Pots (Maygay) (M1A/B) (set 16)", - "m1suppotp", "Super Pots (Maygay) (M1A/B) (set 17)", - "m1suppotq", "Super Pots (Maygay) (M1A/B) (set 18)", - "m1suppotr", "Super Pots (Maygay) (M1A/B) (set 19)", - "m1suppots", "Super Pots (Maygay) (M1A/B) (set 20)", - "m1suppott", "Super Pots (Maygay) (M1A/B) (set 21)", - "m1suppotu", "Super Pots (Maygay) (M1A/B) (set 22)", - "m1suppotv", "Super Pots (Maygay) (M1A/B) (set 23)", - "m1suppotw", "Super Pots (Maygay) (M1A/B) (set 24)", - "m1suppotx", "Super Pots (Maygay) (M1A/B) (set 25)", - "m1suppoty", "Super Pots (Maygay) (M1A/B) (set 26)", - "m1suppotz", "Super Pots (Maygay) (M1A/B) (set 27)", - "m1sycc", "Stake Yer Claim Club (Global) (M1A/B) (set 1)", - "m1sycca", "Stake Yer Claim Club (Global) (M1A/B) (set 2)", - "m1syccb", "Stake Yer Claim Club (Global) (M1A/B) (set 3)", - "m1taknot", "Take Note (Maygay) (M1A/B)", - "m1thatlf", "That's Life (Maygay) (M1A/B) (set 1)", - "m1thatlfa", "That's Life (Maygay) (M1A/B) (set 2)", - "m1thatlfb", "That's Life (Maygay) (M1A/B) (set 3)", - "m1thatlfc", "That's Life (Maygay) (M1A/B) (set 4)", - "m1thatlfd", "That's Life (Maygay) (M1A/B) (set 5)", - "m1thrill", "Thrills 'n' Spills (Global) (M1A/B) (set 1)", - "m1thrilla", "Thrills 'n' Spills (Global) (M1A/B) (set 2)", - "m1thrillb", "Thrills 'n' Spills (Global) (M1A/B) (set 3)", - "m1thrillc", "Thrills 'n' Spills (Global) (M1A/B) (set 4)", - "m1topstr", "Top Strike (Maygay - Bwb) (M1A/B)", - "m1topten", "Top Tenner (Maygay) (M1A/B) (set 1)", - "m1toptena", "Top Tenner (Maygay) (M1A/B) (set 2)", - "m1tpclb", "Trivial Pursuit Club (Maygay) (M1A/B) (set 1)", - "m1tpclba", "Trivial Pursuit Club (Maygay) (M1A/B) (set 2)", - "m1tpclbb", "Trivial Pursuit Club (Maygay) (M1A/B) (set 3)", - "m1tpclbc", "Trivial Pursuit Club (Maygay) (M1A/B) (set 4)", - "m1trivia", "Trivial Pursuit (Maygay) (M1A/B) (set 1)", - "m1triviaa", "Trivial Pursuit (Maygay) (M1A/B) (set 2)", - "m1triviab", "Trivial Pursuit (Maygay) (M1A/B) (set 3)", - "m1triviac", "Trivial Pursuit (Maygay) (M1A/B) (set 4)", - "m1triviad", "Trivial Pursuit (Maygay) (M1A/B) (set 5)", - "m1triviae", "Trivial Pursuit (Maygay) (M1A/B) (set 6)", - "m1triviaf", "Trivial Pursuit (Maygay) (M1A/B) (set 7)", - "m1triviag", "Trivial Pursuit (Maygay) (M1A/B) (set 8)", - "m1triviah", "Trivial Pursuit (Maygay) (M1A/B) (set 9)", - "m1triviai", "Trivial Pursuit (Maygay) (M1A/B) (set 10)", - "m1triviaj", "Trivial Pursuit (Maygay) (M1A/B) (set 11)", - "m1triviak", "Trivial Pursuit (Maygay) (M1A/B) (set 12)", - "m1trivial", "Trivial Pursuit (Maygay) (M1A/B) (set 13)", - "m1trivian", "Trivial Pursuit (Maygay) (M1A/B) (set 15)", - "m1triviap", "Trivial Pursuit (Maygay) (M1A/B) (set 17)", - "m1triviaq", "Trivial Pursuit (Maygay) (M1A/B) (set 18)", - "m1triviar", "Trivial Pursuit (Maygay) (M1A/B) (set 19)", - "m1trivias", "Trivial Pursuit (Maygay) (M1A/B) (set 20)", - "m1triviat", "Trivial Pursuit (Maygay) (M1A/B) (set 21)", - "m1triviau", "Trivial Pursuit (Maygay) (M1A/B) (set 22)", - "m1triviav", "Trivial Pursuit (Maygay) (M1A/B) (set 23)", - "m1triviaw", "Trivial Pursuit (Maygay) (M1A/B) (set 24)", - "m1triviax", "Trivial Pursuit (Maygay) (M1A/B) (set 25)", - "m1triviay", "Trivial Pursuit (Maygay) (M1A/B) (set 26)", - "m1triviaz", "Trivial Pursuit (Maygay) (M1A/B) (set 27)", - "m1trtr", "Trick Or Treat (Global) (M1A/B) (set 1)", - "m1trtra", "Trick Or Treat (Global) (M1A/B) (set 2)", - "m1trtrcl", "Trick Or Treat Club (Global) (M1A/B)", - "m1tstunt", "Test Unit (Maygay) (M1A/B)", - "m1ttcash", "Tick Tock Cash (Empire) (M1A/B)", - "m1ultchl", "Ultimate Challenge (Maygay) (M1A/B) (set 1)", - "m1ultchla", "Ultimate Challenge (Maygay) (M1A/B) (set 2)", - "m1ultchlb", "Ultimate Challenge (Maygay) (M1A/B) (set 3)", - "m1ultchlc", "Ultimate Challenge (Maygay) (M1A/B) (set 4)", - "m1undsie", "Under Siege (Maygay) (M1A/B) (set 1)", - "m1undsiea", "Under Siege (Maygay) (M1A/B) (set 2)", - "m1undsieb", "Under Siege (Maygay) (M1A/B) (set 3)", - "m1undsiec", "Under Siege (Maygay) (M1A/B) (set 4)", - "m1vegas", "Vegas Gambler Club (Maygay) (M1A/B) (set 1)", - "m1vegasa", "Vegas Gambler Club (Maygay) (M1A/B) (set 2)", - "m1vegasb", "Vegas Gambler Club (Maygay) (M1A/B) (set 3)", - "m1vegcrw", "Vegetable Crew (Global) (M1A/B)", - "m1wagon", "Wagon Trail (Maygay) (M1A/B) (set 1)", - "m1wagona", "Wagon Trail (Maygay) (M1A/B) (set 2)", - "m1wagonb", "Wagon Trail (Maygay) (M1A/B) (set 3)", - "m1wagonc", "Wagon Trail (Maygay) (M1A/B) (set 4)", - "m1winenc", "John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 1)", - "m1winenca", "John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 2)", - "m1winencb", "John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 3)", - "m1winencc", "John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 4)", - "m1wldzne", "Wild Zone (Maygay) (M1A/B) (set 1)", - "m1wldznea", "Wild Zone (Maygay) (M1A/B) (set 2)", - "m1wldzneb", "Wild Zone (Maygay) (M1A/B) (set 3)", - "m1wldznec", "Wild Zone (Maygay) (M1A/B) (set 4)", - "m1wldzned", "Wild Zone (Maygay) (M1A/B) (set 5)", - "m1wldznee", "Wild Zone (Maygay) (M1A/B) (set 6)", - "m1wldznef", "Wild Zone (Maygay) (M1A/B) (set 7)", - "m1wldzneg", "Wild Zone (Maygay) (M1A/B) (set 8)", - "m1wldzneh", "Wild Zone (Maygay) (M1A/B) (set 9)", - "m1wldznei", "Wild Zone (Maygay) (M1A/B) (set 10)", - "m1wldznej", "Wild Zone (Maygay) (M1A/B) (set 11)", - "m1wldznek", "Wild Zone (Maygay) (M1A/B) (set 12)", - "m1wldznel", "Wild Zone (Maygay) (M1A/B) (set 13)", - "m1wldznem", "Wild Zone (Maygay) (M1A/B) (set 14)", - "m1wldznen", "Wild Zone (Maygay) (M1A/B) (set 15)", - "m1wldzneo", "Wild Zone (Maygay) (M1A/B) (set 16)", - "m1wldznep", "Wild Zone (Maygay) (M1A/B) (set 17)", - "m1wldzneq", "Wild Zone (Maygay) (M1A/B) (set 18)", - "m1wldzner", "Wild Zone (Maygay) (M1A/B) (set 19)", - "m1wldznes", "Wild Zone (Maygay) (M1A/B) (set 20)", - "m1wotw", "War Of The Worlds (Maygay) (M1A/B) (set 1)", - "m1wotwa", "War Of The Worlds (Maygay) (M1A/B) (set 2)", - "m1wotwb", "War Of The Worlds (Maygay) (M1A/B) (set 3)", - "m21", "21 (Mirco)", - "m2hilite", "Hi-Lights (Barcrest) (MPU2)", - "m2svlite", "Silver Lights (Barcrest) (MPU2)", - "m3acech", "Ace Chase (Bwb) (MPU3)", - "m3autort", "Autoroute (Barcrest) (MPU3)", - "m3bankr", "Banker (Bwb) (MPU3)", - "m3big20j", "Big 20 Joker (Barcrest) (MPU3)", - "m3biggam", "The Big Game (Barcrest) (MPU3)", - "m3bigsht", "Big Shot (Barcrest) (MPU3)", - "m3blkhle", "Black Hole (Barcrest) (MPU3)", - "m3cabret", "Cabaret (Barcrest) (MPU3, set 1)", - "m3cabreta", "Cabaret (Barcrest) (MPU3, set 2)", - "m3cdash", "Cash Dash (Pcp) (MPU3)", - "m3chase", "Chase It (Bwb) (MPU3)", - "m3circle", "Special Circle Club (Barcrest) (MPU3, set 1)", - "m3circlea", "Special Circle Club (Barcrest) (MPU3, set 2)", - "m3circleb", "Special Circle Club (Barcrest) (MPU3, set 3)", - "m3cjoker", "Crazy Joker (Barcrest) (MPU3)", - "m3cskill", "Circle Skill (Barcrest) (MPU3)", - "m3cunlim", "Chances Unlimited (Barcrest) (MPU3)", - "m3fortun", "Fortune Numbers (Barcrest) (MPU3, set 1)", - "m3fortuna", "Fortune Numbers (Barcrest) (MPU3, set 2)", - "m3fortund", "Fortune Numbers (Barcrest) [Dutch] (MPU3)", - "m3gaward", "Golden Award (Barcrest) (MPU3)", - "m3gcrown", "Golden Crowns (Mdm) (MPU3)", - "m3gmine", "Gold Mine (Bwb) (MPU3)", - "m3hprvpr", "Hyper Viper (Barcrest) (MPU3)", - "m3lineup", "Line Up (Barcrest) (MPU3)", - "m3llotto", "Lucky Lotto (Barcrest) (MPU3)", - "m3loony", "Loonybin (Pcp) (MPU3)", - "m3lstrik", "Lucky Strike Club (Barcrest) (MPU3, set 1)", - "m3lstrika", "Lucky Strike Club (Barcrest) (MPU3, set 2)", - "m3magrp", "Magic Replay (Barcrest) (MPU3)", - "m3minmax", "Mini Max (Associated Leisure) (MPU3)", - "m3mremon", "More Money (VFS) (MPU3)", - "m3nnice", "Naughty But Nice (Barcrest) (MPU3)", - "m3nudge", "Nudges Unlimited (Barcrest) (MPU3)", - "m3oddson", "Odds On (Barcrest) (MPU3)", - "m3online", "On Line (Pcp) (MPU3)", - "m3optunl", "Options Unlimited (Barcrest) (MPU3)", - "m3oxo", "Noughts 'n' Crosses (VFS) (MPU3)", - "m3ratrce", "Rat Race (Bwb) (MPU3)", - "m3razdaz", "Razzle Dazzle (Barcrest) (MPU3, set 1)", - "m3razdaza", "Razzle Dazzle (Barcrest) (MPU3, set 2)", - "m3razdazd", "Razzle Dazzle (Barcrest) [Dutch] (MPU3)", - "m3replay", "Instant Replay (Barcrest) (MPU3)", - "m3rockpl", "Rock Pile (Pcp) (MPU3)", - "m3rollem", "Roll 'Em (Pcp) (MPU3)", - "m3rxchng", "Royal Exchange Club (Barcrest) (MPU3)", - "m3scoop", "Scoop (Peter Simper, prototype?) (MPU3)", - "m3sdeal", "Super Deal (Barcrest) (MPU3)", - "m3sexcu", "Super Exchanges Unlimited (Barcrest) (MPU3)", - "m3slight", "Strike A Light (Barcrest) (MPU3)", - "m3snaphp", "Snap Happy (Pcp) (MPU3)", - "m3snappy", "Snappy Viper (Barcrest) (MPU3)", - "m3spoof", "Spoof (Pcp) (MPU3, set 1)", - "m3spoofa", "Spoof (Pcp) (MPU3, set 2)", - "m3supadr", "Super Adders & Ladders (Barcrest) (MPU3)", - "m3supasw", "Supaswop (Bwb) (MPU3)", - "m3suplin", "Super Line Up (Barcrest) (MPU3, set 1)", - "m3suplina", "Super Line Up (Barcrest) (MPU3, set 2)", - "m3supnud", "Super Nudges Unlimited (Barcrest) (MPU3)", - "m3supser", "Super Series (Barcrest) (MPU3)", - "m3supspo", "Super Spoof (Pcp) (MPU3, set 1)", - "m3supspoa", "Super Spoof (Pcp) (MPU3, set 2)", - "m3supwin", "Super Win (Bwb) (MPU3, set 1)", - "m3supwina", "Super Win (Bwb) (MPU3, set 2)", - "m3sweep", "Sweep Stake Club (Barcrest) (MPU3, set 1)", - "m3sweepa", "Sweep Stake Club (Barcrest) (MPU3, set 2)", - "m3tfair", "Tuppenny Fair (Mdm) (MPU3)", - "m3tlktwn", "Talk of the Town (MPU3?)", - "m3toplin", "Top Line (Pcp) (MPU3)", - "m3topsht", "Top Shot (Barcrest) (MPU3)", - "m3tst", "MPU3 Unit Test (Program 5) (Barcrest) (MPU3)", - "m3wacky", "Wacky Racer (Mdm) (MPU3)", - "m3wigwam", "Wig Wam (Pcp) (MPU3)", - "m3winagn", "Win-A-Gain (Bwb) (MPU3, set 1)", - "m3winagna", "Win-A-Gain (Bwb) (MPU3, set 2)", - "m3winagnb", "Win-A-Gain (Bwb) (MPU3, set 3)", - "m3winstr", "Winstrike (Bwb) (MPU3)", - "m3winstra", "Winstrike (Barcrest) (MPU3)", - "m3xchngg", "Exchanges Galore (Barcrest) (MPU3)", - "m3xchngu", "Exchanges Unlimited (Barcrest) (MPU3, set 1)", - "m3xchngua", "Exchanges Unlimited (Barcrest) (MPU3, set 2)", - "m4", "M-4", - "m421", "Twenty One (Barcrest) (MPU4)", - "m421club", "21 Club (Barcrest) [DTW, Dutch] (MPU4)", - "m42punlm", "2p Unlimited (Mdm) (MPU4)", - "m4aao", "Against All Odds (Eurotek) (MPU4)", - "m4abeaut", "American Beauty (Avantime?) (MPU4) (AB, set 1)", - "m4abeaut_1", "American Beauty (Avantime?) (MPU4) (AB, set 2)", - "m4abeaut_2", "American Beauty (Avantime?) (MPU4) (AB, set 3)", - "m4abeaut_3", "American Beauty (Avantime?) (MPU4) (AB, set 4)", - "m4abeaut_4", "American Beauty (Avantime?) (MPU4) (AB, set 5)", - "m4abeaut_5", "American Beauty (Avantime?) (MPU4) (AB, set 6)", - "m4abeaut_6", "American Beauty (Avantime?) (MPU4) (AB, set 7)", - "m4abeaut_7", "American Beauty (Avantime?) (MPU4) (AB, set 8)", - "m4abeaut_8", "American Beauty (Avantime?) (MPU4) (AB, set 9)", - "m4abeaut_9", "American Beauty (Avantime?) (MPU4) (AB, set 10)", - "m4abeaut_c1", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 1)", - "m4abeaut_c10", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 10)", - "m4abeaut_c11", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 11)", - "m4abeaut_c12", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 12)", - "m4abeaut_c13", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 13)", - "m4abeaut_c14", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 14)", - "m4abeaut_c15", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 15)", - "m4abeaut_c16", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 1)", - "m4abeaut_c17", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 2)", - "m4abeaut_c18", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 3)", - "m4abeaut_c19", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 4)", - "m4abeaut_c2", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 2)", - "m4abeaut_c20", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 5)", - "m4abeaut_c21", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 6)", - "m4abeaut_c22", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 7)", - "m4abeaut_c23", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 8)", - "m4abeaut_c24", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 9)", - "m4abeaut_c25", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 10)", - "m4abeaut_c26", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 11)", - "m4abeaut_c27", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 12)", - "m4abeaut_c28", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 13)", - "m4abeaut_c29", "American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 14)", - "m4abeaut_c3", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 3)", - "m4abeaut_c30", "American Beauty (Avantime?) (MPU4) (M2C1, Czech, set 1)", - "m4abeaut_c31", "American Beauty (Avantime?) (MPU4) (M2C1, Czech, set 2)", - "m4abeaut_c4", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 4)", - "m4abeaut_c5", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 5)", - "m4abeaut_c6", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 6)", - "m4abeaut_c7", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 7)", - "m4abeaut_c8", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 8)", - "m4abeaut_c9", "American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 9)", - "m4abeaut_i1", "American Beauty (Avantime?) (MPU4) (A2I0, Israel, set 1)", - "m4abeaut_i2", "American Beauty (Avantime?) (MPU4) (A2I0, Israel, set 2)", - "m4abeaut_k1", "American Beauty (Avantime?) (MPU4) (A2K0, set 1)", - "m4abeaut_k2", "American Beauty (Avantime?) (MPU4) (A2K0, set 2)", - "m4abeaut_l1", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 1)", - "m4abeaut_l10", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 10)", - "m4abeaut_l11", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 11)", - "m4abeaut_l12", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 12)", - "m4abeaut_l13", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 1)", - "m4abeaut_l14", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 2)", - "m4abeaut_l15", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 3)", - "m4abeaut_l16", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 4)", - "m4abeaut_l17", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 5)", - "m4abeaut_l18", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 6)", - "m4abeaut_l19", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 7)", - "m4abeaut_l2", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 2)", - "m4abeaut_l20", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 8)", - "m4abeaut_l21", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 9)", - "m4abeaut_l22", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 10)", - "m4abeaut_l23", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 11)", - "m4abeaut_l24", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 12)", - "m4abeaut_l25", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 13)", - "m4abeaut_l26", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 14)", - "m4abeaut_l27", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 15)", - "m4abeaut_l28", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 16)", - "m4abeaut_l29", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 17)", - "m4abeaut_l3", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 3)", - "m4abeaut_l30", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 18)", - "m4abeaut_l31", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 19)", - "m4abeaut_l32", "American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 20)", - "m4abeaut_l33", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 1)", - "m4abeaut_l34", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 2)", - "m4abeaut_l35", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 3)", - "m4abeaut_l36", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 4)", - "m4abeaut_l37", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 5)", - "m4abeaut_l38", "American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 6)", - "m4abeaut_l4", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 4)", - "m4abeaut_l5", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 5)", - "m4abeaut_l6", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 6)", - "m4abeaut_l7", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 7)", - "m4abeaut_l8", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 8)", - "m4abeaut_l9", "American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 9)", - "m4abeaut_m1", "American Beauty (Avantime?) (MPU4) (ABM1, Montenegro, set 1)", - "m4abeaut_m2", "American Beauty (Avantime?) (MPU4) (ABM1, Montenegro, set 2)", - "m4abeaut_m3", "American Beauty (Avantime?) (MPU4) (ABM2, Montenegro, set 1)", - "m4abeaut_m4", "American Beauty (Avantime?) (MPU4) (ABM2, Montenegro, set 2)", - "m4abeaut_pb1", "American Beauty (Avantime?) (MPU4) (AJL0, Project Bar, set 1)", - "m4abeaut_pb2", "American Beauty (Avantime?) (MPU4) (AJL0, Project Bar, set 2)", - "m4abeaut_r1", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 1)", - "m4abeaut_r10", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 10)", - "m4abeaut_r11", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 11)", - "m4abeaut_r12", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 12)", - "m4abeaut_r13", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 13)", - "m4abeaut_r14", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 14)", - "m4abeaut_r2", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 2)", - "m4abeaut_r3", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 3)", - "m4abeaut_r4", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 4)", - "m4abeaut_r5", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 5)", - "m4abeaut_r6", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 6)", - "m4abeaut_r7", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 7)", - "m4abeaut_r8", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 8)", - "m4abeaut_r9", "American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 9)", - "m4abeaut_s1", "American Beauty (Avantime?) (MPU4) (ABS1, Slovakia, set 1)", - "m4abeaut_s2", "American Beauty (Avantime?) (MPU4) (ABS1, Slovakia, set 2)", - "m4abeaut_s3", "American Beauty (Avantime?) (MPU4) (ABS2, Slovakia, set 1)", - "m4abeaut_s4", "American Beauty (Avantime?) (MPU4) (ABS2, Slovakia, set 2)", - "m4abeaut_u1", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 1)", - "m4abeaut_u10", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 10)", - "m4abeaut_u11", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 11)", - "m4abeaut_u12", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 12)", - "m4abeaut_u13", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 13)", - "m4abeaut_u14", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 14)", - "m4abeaut_u15", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 15)", - "m4abeaut_u16", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 16)", - "m4abeaut_u17", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 17)", - "m4abeaut_u18", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 18)", - "m4abeaut_u19", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 19)", - "m4abeaut_u2", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 2)", - "m4abeaut_u20", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 20)", - "m4abeaut_u21", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 21)", - "m4abeaut_u22", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 22)", - "m4abeaut_u23", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 23)", - "m4abeaut_u24", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 24)", - "m4abeaut_u25", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 25)", - "m4abeaut_u26", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 26)", - "m4abeaut_u27", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 27)", - "m4abeaut_u28", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 28)", - "m4abeaut_u29", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 29)", - "m4abeaut_u3", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 3)", - "m4abeaut_u30", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 30)", - "m4abeaut_u31", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 31)", - "m4abeaut_u32", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 32)", - "m4abeaut_u33", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 33)", - "m4abeaut_u34", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 34)", - "m4abeaut_u35", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 35)", - "m4abeaut_u36", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 36)", - "m4abeaut_u37", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 37)", - "m4abeaut_u38", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 38)", - "m4abeaut_u39", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 39)", - "m4abeaut_u4", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 4)", - "m4abeaut_u40", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 40)", - "m4abeaut_u41", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 41)", - "m4abeaut_u42", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 42)", - "m4abeaut_u43", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 43)", - "m4abeaut_u44", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 44)", - "m4abeaut_u45", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 45)", - "m4abeaut_u46", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 46)", - "m4abeaut_u47", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 47)", - "m4abeaut_u48", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 48)", - "m4abeaut_u49", "American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 1)", - "m4abeaut_u5", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 5)", - "m4abeaut_u50", "American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 2)", - "m4abeaut_u51", "American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 3)", - "m4abeaut_u52", "American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 4)", - "m4abeaut_u53", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 1)", - "m4abeaut_u54", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 2)", - "m4abeaut_u55", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 3)", - "m4abeaut_u56", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 4)", - "m4abeaut_u57", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 5)", - "m4abeaut_u58", "American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 6)", - "m4abeaut_u59", "American Beauty (Avantime?) (MPU4) (A2U3, Ukraine, set 1)", - "m4abeaut_u6", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 6)", - "m4abeaut_u60", "American Beauty (Avantime?) (MPU4) (A2U3, Ukraine, set 2)", - "m4abeaut_u61", "American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 1)", - "m4abeaut_u62", "American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 2)", - "m4abeaut_u63", "American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 3)", - "m4abeaut_u64", "American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 4)", - "m4abeaut_u7", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 7)", - "m4abeaut_u8", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 8)", - "m4abeaut_u9", "American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 9)", - "m4abra", "Abracadabra (Bwb) (MPU4) (set 1)", - "m4abra__a", "Abracadabra (Bwb) (MPU4) (set 2)", - "m4abra__b", "Abracadabra (Bwb) (MPU4) (set 3)", - "m4abra__c", "Abracadabra (Bwb) (MPU4) (set 4)", - "m4acechs", "Ace Chase (Barcrest) (MPU4) (set 1)", - "m4acechs__a", "Ace Chase (Barcrest) (MPU4) (set 2)", - "m4acechs__b", "Ace Chase (Barcrest) (MPU4) (set 3)", - "m4acechs__c", "Ace Chase (Barcrest) (MPU4) (set 4)", - "m4acechs__d", "Ace Chase (Barcrest) (MPU4) (set 5)", - "m4acechs__e", "Ace Chase (Barcrest) (MPU4) (set 6)", - "m4acechs__f", "Ace Chase (Barcrest) (MPU4) (set 7)", - "m4acechs__g", "Ace Chase (Barcrest) (MPU4) (set 8)", - "m4acechs__h", "Ace Chase (Barcrest) (MPU4) (set 9)", - "m4acechs__i", "Ace Chase (Barcrest) (MPU4) (set 10)", - "m4acechs__j", "Ace Chase (Barcrest) (MPU4) (set 11)", - "m4acechs__k", "Ace Chase (Barcrest) (MPU4) (set 12)", - "m4acechs__l", "Ace Chase (Barcrest) (MPU4) (set 13)", - "m4acechs__m", "Ace Chase (Barcrest) (MPU4) (set 14)", - "m4acechs__n", "Ace Chase (Barcrest) (MPU4) (set 15)", - "m4acechs__o", "Ace Chase (Barcrest) (MPU4) (set 16)", - "m4acechs__p", "Ace Chase (Barcrest) (MPU4) (set 17)", - "m4acechs__q", "Ace Chase (Barcrest) (MPU4) (set 18)", - "m4acechs__r", "Ace Chase (Barcrest) (MPU4) (set 19)", - "m4acechs__s", "Ace Chase (Barcrest) (MPU4) (set 20)", - "m4acechs__t", "Ace Chase (Barcrest) (MPU4) (set 21)", - "m4acechs__u", "Ace Chase (Barcrest) (MPU4) (set 22)", - "m4actbnk", "Action Bank (Barcrest) (MPU4) (set 1)", - "m4actbnk__a", "Action Bank (Barcrest) (MPU4) (set 2)", - "m4actbnk__b", "Action Bank (Barcrest) (MPU4) (set 3)", - "m4actbnk__c", "Action Bank (Barcrest) (MPU4) (set 4)", - "m4actbnk__d", "Action Bank (Barcrest) (MPU4) (set 5)", - "m4actbnk__e", "Action Bank (Barcrest) (MPU4) (set 6)", - "m4actbnk__f", "Action Bank (Barcrest) (MPU4) (set 7)", - "m4actbnk__g", "Action Bank (Barcrest) (MPU4) (set 8)", - "m4actbnk__h", "Action Bank (Barcrest) (MPU4) (set 9)", - "m4actbnk__i", "Action Bank (Barcrest) (MPU4) (set 10)", - "m4actbnka", "Action Bank (Barcrest) (Mod 2 type, AC3.0) (MPU4)", - "m4actbnkb", "Action Bank (Barcrest) (Mod 2 type, ACT2.0) (MPU4)", - "m4actclb", "Action Club (Barcrest) (MPU4) (1.9)", - "m4actclba", "Action Club (Barcrest) (MPU4) (1.1)", - "m4actnot", "Action Note (Barcrest) (MPU4) (AN 1.2)", - "m4actpak", "Action Pack (Barcrest) (MPU4) (AP 0.4)", - "m4actpaka", "Action Pack (Barcrest) (MPU4) (AP 0.5)", - "m4addr", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1)", - "m4addr10", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, set 1)", - "m4addr10_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, set 2)", - "m4addr10c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, set 1)", - "m4addr10c_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, set 2)", - "m4addr10d", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0D, set 1)", - "m4addr10d_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0D, set 2)", - "m4addr10yd", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0YD, set 1)", - "m4addr10yd_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0YD, set 2)", - "m4addr3", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 1)", - "m4addr3_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 2)", - "m4addr3_b", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 3)", - "m4addr3_c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 4)", - "m4addr3_d", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 5)", - "m4addr3d", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 1)", - "m4addr3d_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 2)", - "m4addr3d_b", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 3)", - "m4addr3d_c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 4)", - "m4addr3yd", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 1)", - "m4addr3yd_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 2)", - "m4addr3yd_b", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 3)", - "m4addr3yd_c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 4)", - "m4addr4", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0, set 1)", - "m4addr4_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0, set 2)", - "m4addr4c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 1)", - "m4addr4c_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 2)", - "m4addr4c_b", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 3)", - "m4addr4d", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0D, set 1)", - "m4addr4yd", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0YD, set 1)", - "m4addr5", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0, set 1)", - "m4addr5_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0, set 2)", - "m4addr5c", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0C, set 1)", - "m4addr5c_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0C, set 2)", - "m4addr5d", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0D, set 1)", - "m4addr5d_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0D, set 2)", - "m4addr5yd", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0YD, set 1)", - "m4addr5yd_a", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0YD, set 2)", - "m4addr6lc", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1C)", - "m4addr6ld", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1D)", - "m4addr6lk", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1K)", - "m4addr6ly", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1Y)", - "m4addr6lybd", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1YBD)", - "m4addr6lyd", "Adders & Ladders (Barcrest) (MPU4) (A6L 0.1YD)", - "m4addr_h1", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, hack?, set 1)", - "m4addr_h2", "Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, hack?, set 2)", - "m4addrc", "Adders & Ladders Classic (Barcrest) (MPU4) (set 1)", - "m4addrc__a", "Adders & Ladders Classic (Barcrest) (MPU4) (set 2)", - "m4addrc__b", "Adders & Ladders Classic (Barcrest) (MPU4) (set 3)", - "m4addrc__c", "Adders & Ladders Classic (Barcrest) (MPU4) (set 4)", - "m4addrc__d", "Adders & Ladders Classic (Barcrest) (MPU4) (set 5)", - "m4addrc__e", "Adders & Ladders Classic (Barcrest) (MPU4) (set 6)", - "m4addrc__f", "Adders & Ladders Classic (Barcrest) (MPU4) (set 7)", - "m4addrc__h", "Adders & Ladders Classic (Barcrest) (MPU4) (set 8)", - "m4addrc__i", "Adders & Ladders Classic (Barcrest) (MPU4) (set 9)", - "m4addrc__j", "Adders & Ladders Classic (Barcrest) (MPU4) (set 10)", - "m4addrc__k", "Adders & Ladders Classic (Barcrest) (MPU4) (set 11)", - "m4addrc__l", "Adders & Ladders Classic (Barcrest) (MPU4) (set 12)", - "m4addrc__m", "Adders & Ladders Classic (Barcrest) (MPU4) (set 13)", - "m4addrc__n", "Adders & Ladders Classic (Barcrest) (MPU4) (set 14)", - "m4addrcc", "Adders & Ladders Classic Club (Barcrest) (MPU4) (set 1)", - "m4addrcc__a", "Adders & Ladders Classic Club (Barcrest) (MPU4) (set 2)", - "m4addrcc__b", "Adders & Ladders Classic Club (Barcrest) (MPU4) (set 3)", - "m4addrcc__c", "Adders & Ladders Classic Club (Barcrest) (MPU4) (set 4)", - "m4addrcc__d", "Adders & Ladders Classic Club (Barcrest) (MPU4) (set 5)", - "m4addrd", "Adders & Ladders (Barcrest) (DAL, Dutch) (MPU4)", - "m4aladn", "Aladdin's Cave (Crystal) (MPU4) (set 1)", - "m4aladna", "Aladdin's Cave (Crystal) (MPU4) (set 2)", - "m4aladnb", "Aladdin's Cave (Crystal) (MPU4) (set 3)", - "m4aladnc", "Aladdin's Cave (Crystal) (MPU4) (set 4)", - "m4aladnd", "Aladdin's Cave (Crystal) (MPU4) (set 5)", - "m4aladne", "Aladdin's Cave (Crystal) (MPU4) (set 6)", - "m4aladnf", "Aladdin's Cave (Crystal) (MPU4) (set 7)", - "m4aladng", "Aladdin's Cave (Crystal) (MPU4) (set 8)", - "m4aladnh", "Aladdin's Cave (Crystal) (MPU4) (set 9)", - "m4aladni", "Aladdin's Cave (Crystal) (MPU4) (set 10)", - "m4aliz", "AlizBaz (Qps) (German) (MPU4)", - "m4alladv", "All Cash Advance (Barcrest) (MPU4) (C2B 6.0)", - "m4alpha", "Alphabet (Barcrest) [A4B 1.0] (MPU4)", - "m4amalad", "American Aladdin (Avantime?) (MPU4) (set 1)", - "m4amalad__a", "American Aladdin (Avantime?) (MPU4) (set 2)", - "m4amalad__b", "American Aladdin (Avantime?) (MPU4) (set 3)", - "m4amalad__c", "American Aladdin (Avantime?) (MPU4) (set 4)", - "m4amalad__d", "American Aladdin (Avantime?) (MPU4) (set 5)", - "m4amalad__e", "American Aladdin (Avantime?) (MPU4) (set 6)", - "m4amalad__f", "American Aladdin (Avantime?) (MPU4) (set 7)", - "m4amalad__g", "American Aladdin (Avantime?) (MPU4) (set 8)", - "m4amalad__h", "American Aladdin (Avantime?) (MPU4) (set 9)", - "m4amalad__i", "American Aladdin (Avantime?) (MPU4) (set 10)", - "m4amalad__j", "American Aladdin (Avantime?) (MPU4) (set 11)", - "m4amalad__k", "American Aladdin (Avantime?) (MPU4) (set 12)", - "m4amalad__l", "American Aladdin (Avantime?) (MPU4) (set 13)", - "m4amalad__m", "American Aladdin (Avantime?) (MPU4) (set 14)", - "m4amalad__n", "American Aladdin (Avantime?) (MPU4) (set 15)", - "m4ambass", "Ambassador (Barcrest) (DAM, Dutch) (MPU4)", - "m4amhiwy", "American Highway (Barcrest) (MPU4) (DAH)", - "m4andybt", "Andy's Big Time Club (Barcrest) (MPU4) (set 1)", - "m4andybt__a", "Andy's Big Time Club (Barcrest) (MPU4) (set 2)", - "m4andybt__b", "Andy's Big Time Club (Barcrest) (MPU4) (set 3)", - "m4andybt__c", "Andy's Big Time Club (Barcrest) (MPU4) (set 4)", - "m4andycp", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10)", - "m4andycp10_a", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10, hack?)", - "m4andycp10c", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10C)", - "m4andycp10c_a", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 1)", - "m4andycp10c_b", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 2)", - "m4andycp10c_c", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 3)", - "m4andycp10c_d", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 4)", - "m4andycp10d", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10D)", - "m4andycp10k", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10K)", - "m4andycp10yd", "Andy Capp (Bwb / Barcrest) (MPU4) (AC10YD)", - "m4andycp20", "Andy Capp (Barcrest) (MPU4) (hack?, set 1)", - "m4andycp20_a", "Andy Capp (Barcrest) (MPU4) (hack?, set 2)", - "m4andycp20_b", "Andy Capp (Barcrest) (MPU4) (hack?, set 3)", - "m4andycp8", "Andy Capp (Barcrest) (MPU4) (AM8)", - "m4andycp8ad", "Andy Capp (Barcrest) (MPU4) (AN8 AD)", - "m4andycp8b", "Andy Capp (Barcrest) (MPU4) (AN8 B)", - "m4andycp8c", "Andy Capp (Barcrest) (MPU4) (AN8 C)", - "m4andycp8d", "Andy Capp (Barcrest) (MPU4) (AN8 D)", - "m4andycp8k", "Andy Capp (Barcrest) (MPU4) (AN8 K)", - "m4andycp8kd", "Andy Capp (Barcrest) (MPU4) (AN8 KD)", - "m4andycp8y", "Andy Capp (Barcrest) (MPU4) (AN8 Y)", - "m4andycp8yd", "Andy Capp (Barcrest) (MPU4) (AN8 YD)", - "m4andycpac", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5)", - "m4andycpac_a", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5, hack?)", - "m4andycpacc", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C)", - "m4andycpacc_a", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 1)", - "m4andycpacc_b", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 2)", - "m4andycpacc_c", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 3)", - "m4andycpacc_d", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 4)", - "m4andycpacc_e", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 5)", - "m4andycpaccsd", "Andy Capp (Bwb / Barcrest) (MPU4) (ACC5)", - "m4andycpacd", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 D)", - "m4andycpack", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 K)", - "m4andycpacyd", "Andy Capp (Bwb / Barcrest) (MPU4) (AC5 YD)", - "m4andycpc2", "Andy Capp (Barcrest) (MPU4) (C2T, set 1)", - "m4andycpc2_a", "Andy Capp (Barcrest) (MPU4) (C2T, set 2)", - "m4andycpc2ad", "Andy Capp (Barcrest) (MPU4) (C2T AD)", - "m4andycpc2b", "Andy Capp (Barcrest) (MPU4) (C2T B)", - "m4andycpc2bd", "Andy Capp (Barcrest) (MPU4) (C2T BD)", - "m4andycpc2d", "Andy Capp (Barcrest) (MPU4) (C2T D)", - "m4andycpc2k", "Andy Capp (Barcrest) (MPU4) (C2T K)", - "m4andycpc2kd", "Andy Capp (Barcrest) (MPU4) (C2T KD)", - "m4andycpc2r", "Andy Capp (Barcrest) (MPU4) (C2T R)", - "m4andycpc2rd", "Andy Capp (Barcrest) (MPU4) (C2T RD)", - "m4andycpc2y", "Andy Capp (Barcrest) (MPU4) (C2T Y)", - "m4andycpc2yd", "Andy Capp (Barcrest) (MPU4) (C2T YD)", - "m4andycpc5", "Andy Capp (Barcrest) (MPU4) (C5T)", - "m4andycpc5ad", "Andy Capp (Barcrest) (MPU4) (C5T AD)", - "m4andycpc5b", "Andy Capp (Barcrest) (MPU4) (C5T B)", - "m4andycpc5bd", "Andy Capp (Barcrest) (MPU4) (C5T BD)", - "m4andycpc5d", "Andy Capp (Barcrest) (MPU4) (C5T D)", - "m4andycpc5k", "Andy Capp (Barcrest) (MPU4) (C5T K)", - "m4andycpc5kd", "Andy Capp (Barcrest) (MPU4) (C5T KD)", - "m4andycpc5y", "Andy Capp (Barcrest) (MPU4) (C5T Y)", - "m4andycpc5yd", "Andy Capp (Barcrest) (MPU4) (C5T YD)", - "m4andycpd", "Andy Capp (Barcrest) (MPU4) (AND)", - "m4andycpdc", "Andy Capp (Barcrest) (MPU4) (AND C)", - "m4andycpdd", "Andy Capp (Barcrest) (MPU4) (AND D)", - "m4andycpdk", "Andy Capp (Barcrest) (MPU4) (AND K)", - "m4andycpdut", "Andy Capp (Barcrest) [DAC 1.3, Dutch] (MPU4)", - "m4andycpdy", "Andy Capp (Barcrest) (MPU4) (AND Y, set 1)", - "m4andycpdy_a", "Andy Capp (Barcrest) (MPU4) (AND Y, set 2)", - "m4andycpdyd", "Andy Capp (Barcrest) (MPU4) (AND YD)", - "m4andyfh", "Andy's Full House (Barcrest) (MPU4) (set 1)", - "m4andyfh__0", "Andy's Full House (Barcrest) (MPU4) (set 28)", - "m4andyfh__1", "Andy's Full House (Barcrest) (MPU4) (set 29)", - "m4andyfh__2", "Andy's Full House (Barcrest) (MPU4) (set 30)", - "m4andyfh__3", "Andy's Full House (Barcrest) (MPU4) (set 31)", - "m4andyfh__4", "Andy's Full House (Barcrest) (MPU4) (set 32)", - "m4andyfh__5", "Andy's Full House (Barcrest) (MPU4) (set 33)", - "m4andyfh__6", "Andy's Full House (Barcrest) (MPU4) (set 34)", - "m4andyfh__7", "Andy's Full House (Barcrest) (MPU4) (set 35)", - "m4andyfh__8", "Andy's Full House (Barcrest) (MPU4) (set 36)", - "m4andyfh__9", "Andy's Full House (Barcrest) (MPU4) (set 37)", - "m4andyfh__a", "Andy's Full House (Barcrest) (MPU4) (set 2)", - "m4andyfh__a0", "Andy's Full House (Barcrest) (MPU4) (set 64)", - "m4andyfh__a1", "Andy's Full House (Barcrest) (MPU4) (set 65)", - "m4andyfh__a2", "Andy's Full House (Barcrest) (MPU4) (set 66)", - "m4andyfh__a3", "Andy's Full House (Barcrest) (MPU4) (set 67)", - "m4andyfh__a4", "Andy's Full House (Barcrest) (MPU4) (set 68)", - "m4andyfh__aa", "Andy's Full House (Barcrest) (MPU4) (set 38)", - "m4andyfh__ab", "Andy's Full House (Barcrest) (MPU4) (set 39)", - "m4andyfh__ac", "Andy's Full House (Barcrest) (MPU4) (set 40)", - "m4andyfh__ad", "Andy's Full House (Barcrest) (MPU4) (set 41)", - "m4andyfh__ae", "Andy's Full House (Barcrest) (MPU4) (set 42)", - "m4andyfh__af", "Andy's Full House (Barcrest) (MPU4) (set 43)", - "m4andyfh__ag", "Andy's Full House (Barcrest) (MPU4) (set 44)", - "m4andyfh__ah", "Andy's Full House (Barcrest) (MPU4) (set 45)", - "m4andyfh__ai", "Andy's Full House (Barcrest) (MPU4) (set 46)", - "m4andyfh__aj", "Andy's Full House (Barcrest) (MPU4) (set 47)", - "m4andyfh__ak", "Andy's Full House (Barcrest) (MPU4) (set 48)", - "m4andyfh__al", "Andy's Full House (Barcrest) (MPU4) (set 49)", - "m4andyfh__am", "Andy's Full House (Barcrest) (MPU4) (set 50)", - "m4andyfh__an", "Andy's Full House (Barcrest) (MPU4) (set 51)", - "m4andyfh__ao", "Andy's Full House (Barcrest) (MPU4) (set 52)", - "m4andyfh__ap", "Andy's Full House (Barcrest) (MPU4) (set 53)", - "m4andyfh__aq", "Andy's Full House (Barcrest) (MPU4) (set 54)", - "m4andyfh__ar", "Andy's Full House (Barcrest) (MPU4) (set 55)", - "m4andyfh__as", "Andy's Full House (Barcrest) (MPU4) (set 56)", - "m4andyfh__at", "Andy's Full House (Barcrest) (MPU4) (set 57)", - "m4andyfh__au", "Andy's Full House (Barcrest) (MPU4) (set 58)", - "m4andyfh__av", "Andy's Full House (Barcrest) (MPU4) (set 59)", - "m4andyfh__aw", "Andy's Full House (Barcrest) (MPU4) (set 60)", - "m4andyfh__ax", "Andy's Full House (Barcrest) (MPU4) (set 61)", - "m4andyfh__ay", "Andy's Full House (Barcrest) (MPU4) (set 62)", - "m4andyfh__az", "Andy's Full House (Barcrest) (MPU4) (set 63)", - "m4andyfh__b", "Andy's Full House (Barcrest) (MPU4) (set 3)", - "m4andyfh__c", "Andy's Full House (Barcrest) (MPU4) (set 4)", - "m4andyfh__d", "Andy's Full House (Barcrest) (MPU4) (set 5)", - "m4andyfh__e", "Andy's Full House (Barcrest) (MPU4) (set 6)", - "m4andyfh__f", "Andy's Full House (Barcrest) (MPU4) (set 7)", - "m4andyfh__g", "Andy's Full House (Barcrest) (MPU4) (set 8)", - "m4andyfh__h", "Andy's Full House (Barcrest) (MPU4) (set 9)", - "m4andyfh__i", "Andy's Full House (Barcrest) (MPU4) (set 10)", - "m4andyfh__j", "Andy's Full House (Barcrest) (MPU4) (set 11)", - "m4andyfh__k", "Andy's Full House (Barcrest) (MPU4) (set 12)", - "m4andyfh__l", "Andy's Full House (Barcrest) (MPU4) (set 13)", - "m4andyfh__m", "Andy's Full House (Barcrest) (MPU4) (set 14)", - "m4andyfh__n", "Andy's Full House (Barcrest) (MPU4) (set 15)", - "m4andyfh__o", "Andy's Full House (Barcrest) (MPU4) (set 16)", - "m4andyfh__p", "Andy's Full House (Barcrest) (MPU4) (set 17)", - "m4andyfh__q", "Andy's Full House (Barcrest) (MPU4) (set 18)", - "m4andyfh__r", "Andy's Full House (Barcrest) (MPU4) (set 19)", - "m4andyfh__s", "Andy's Full House (Barcrest) (MPU4) (set 20)", - "m4andyfh__t", "Andy's Full House (Barcrest) (MPU4) (set 21)", - "m4andyfh__u", "Andy's Full House (Barcrest) (MPU4) (set 22)", - "m4andyfh__v", "Andy's Full House (Barcrest) (MPU4) (set 23)", - "m4andyfh__w", "Andy's Full House (Barcrest) (MPU4) (set 24)", - "m4andyfh__x", "Andy's Full House (Barcrest) (MPU4) (set 25)", - "m4andyfh__y", "Andy's Full House (Barcrest) (MPU4) (set 26)", - "m4andyfh__z", "Andy's Full House (Barcrest) (MPU4) (set 27)", - "m4andyfl", "Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL4 2.1KS)", - "m4andyfl3", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1)", - "m4andyfl3ad", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1AD)", - "m4andyfl3b", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1B)", - "m4andyfl3bd", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1BD)", - "m4andyfl3d", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1D)", - "m4andyfl3k", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1K)", - "m4andyfl3kd", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1KD)", - "m4andyfl3y", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1Y)", - "m4andyfl3yd", "Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1YD)", - "m4andyfl8", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1)", - "m4andyfl8ad", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1AD)", - "m4andyfl8b", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1B)", - "m4andyfl8bd", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1BD)", - "m4andyfl8bs", "Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL_ 2.4KS)", - "m4andyfl8c", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1C)", - "m4andyfl8d", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1D)", - "m4andyfl8k", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1K)", - "m4andyfl8kd", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1KD)", - "m4andyfl8y", "Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1Y)", - "m4andyflf", "Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0)", - "m4andyflfb", "Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0B)", - "m4andyflfc", "Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0C)", - "m4andyflfk", "Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0K)", - "m4andyflfr", "Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0R)", - "m4andyflt", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4)", - "m4andyfltad", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4AD)", - "m4andyfltb", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4B)", - "m4andyfltbd", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4BD)", - "m4andyfltd", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4D)", - "m4andyfltk", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4K)", - "m4andyfltkd", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4KD)", - "m4andyfltr", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4R)", - "m4andyfltrd", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4RD)", - "m4andyflty", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4Y)", - "m4andyfltyd", "Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4YD)", - "m4andyflu", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3)", - "m4andyfluad", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3AD)", - "m4andyflub", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3B)", - "m4andyflubd", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3BD)", - "m4andyflud", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3D)", - "m4andyfluk", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3K)", - "m4andyflukd", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3KD)", - "m4andyflur", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3R)", - "m4andyflurd", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3RD)", - "m4andyfluy", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3Y)", - "m4andyfluyd", "Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3YD)", - "m4andyge", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3, set 1)", - "m4andyge28", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1)", - "m4andyge28ad", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1AD)", - "m4andyge28b", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1B)", - "m4andyge28bd", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1BD)", - "m4andyge28c", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1C)", - "m4andyge28d", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1D)", - "m4andyge28k", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1K)", - "m4andyge28kd", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1KD)", - "m4andyge28y", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1Y)", - "m4andyge28yd", "Andy's Great Escape (Barcrest) (MPU4) (A28 0.1YD)", - "m4andyge2t", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1)", - "m4andyge2tad", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1AD)", - "m4andyge2tb", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1B)", - "m4andyge2tbd", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1BD)", - "m4andyge2td", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1D)", - "m4andyge2tk", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1K)", - "m4andyge2tkd", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1KD)", - "m4andyge2ty", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1Y)", - "m4andyge2tyd", "Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1YD)", - "m4andyge5t", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1)", - "m4andyge5tad", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1AD)", - "m4andyge5tb", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1B)", - "m4andyge5tbd", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1BD)", - "m4andyge5td", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1D)", - "m4andyge5tk", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1K)", - "m4andyge5tkd", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1KD)", - "m4andyge5ty", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1Y)", - "m4andyge5tyd", "Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1YD)", - "m4andyge_h1", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 3.0, hack?, set 1)", - "m4andyge_h2", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 3.0, hack?, set 2)", - "m4andyge_h3", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 0.3, hack?, set 1)", - "m4andyge_h4", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 0.3, hack?, set 2)", - "m4andyge_hx1", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 1)", - "m4andyge_hx2", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 2)", - "m4andyge_hx3", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 3)", - "m4andyge_hx4", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 4)", - "m4andyge_hx5", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0CX, hack?)", - "m4andygeg5", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0)", - "m4andygeg5a", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0A)", - "m4andygeg5c", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0C)", - "m4andygeg5d", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0D)", - "m4andygeg5k", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0K)", - "m4andygeg5yd", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0YD)", - "m4andygeg_2", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0)", - "m4andygeg_2c", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0C)", - "m4andygeg_2d", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0D)", - "m4andygeg_2k", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0K)", - "m4andygeg_2yd", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0YD)", - "m4andygegc2", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AGC 2.0)", - "m4andygegc2d", "Andy's Great Escape (Bwb / Barcrest) (MPU4) (AGC 2.0D)", - "m4andygen2_a", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3, set 2)", - "m4andygen2c", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3C)", - "m4andygen2d", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3D)", - "m4andygen2k", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3K)", - "m4andygen2y", "Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3Y)", - "m4apach", "Apache (Barcrest) (MPU4 w/ Plasma DMD?)", - "m4apachg", "Apache Gold (Empire) (MPU4, set 1)", - "m4apachga", "Apache Gold (Empire) (MPU4, set 2)", - "m4apachgb", "Apache Gold (Empire) (MPU4, set 3)", - "m4apachgc", "Apache Gold (Empire) (MPU4, set 4)", - "m4apachgd", "Apache Gold (Empire) (MPU4, set 5)", - "m4apachge", "Apache Gold (Empire) (MPU4, set 6)", - "m4apachgf", "Apache Gold (Empire) (MPU4, set 7)", - "m4atlan", "Atlantis (Barcrest) (DAT, Dutch) (MPU4)", - "m4bagcsh", "Bags Of Cash Club (Crystal) (MPU4) (set 1)", - "m4bagcsha", "Bags Of Cash Club (Crystal) (MPU4) (set 2)", - "m4bagtel", "Bagatelle (Barcrest) (MPU4) (set 1)", - "m4bagtel__0", "Bagatelle (Barcrest) (MPU4) (set 28)", - "m4bagtel__1", "Bagatelle (Barcrest) (MPU4) (set 29)", - "m4bagtel__2", "Bagatelle (Barcrest) (MPU4) (set 30)", - "m4bagtel__3", "Bagatelle (Barcrest) (MPU4) (set 31)", - "m4bagtel__4", "Bagatelle (Barcrest) (MPU4) (set 32)", - "m4bagtel__5", "Bagatelle (Barcrest) (MPU4) (set 33)", - "m4bagtel__6", "Bagatelle (Barcrest) (MPU4) (set 34)", - "m4bagtel__7", "Bagatelle (Barcrest) (MPU4) (set 35)", - "m4bagtel__8", "Bagatelle (Barcrest) (MPU4) (set 36)", - "m4bagtel__9", "Bagatelle (Barcrest) (MPU4) (set 37)", - "m4bagtel__a", "Bagatelle (Barcrest) (MPU4) (set 2)", - "m4bagtel__aa", "Bagatelle (Barcrest) (MPU4) (set 38)", - "m4bagtel__ab", "Bagatelle (Barcrest) (MPU4) (set 39)", - "m4bagtel__ac", "Bagatelle (Barcrest) (MPU4) (set 40)", - "m4bagtel__ad", "Bagatelle (Barcrest) (MPU4) (set 41)", - "m4bagtel__ae", "Bagatelle (Barcrest) (MPU4) (set 42)", - "m4bagtel__af", "Bagatelle (Barcrest) (MPU4) (set 43)", - "m4bagtel__ag", "Bagatelle (Barcrest) (MPU4) (set 45)", - "m4bagtel__b", "Bagatelle (Barcrest) (MPU4) (set 3)", - "m4bagtel__c", "Bagatelle (Barcrest) (MPU4) (set 4)", - "m4bagtel__d", "Bagatelle (Barcrest) (MPU4) (set 5)", - "m4bagtel__e", "Bagatelle (Barcrest) (MPU4) (set 6)", - "m4bagtel__f", "Bagatelle (Barcrest) (MPU4) (set 7)", - "m4bagtel__g", "Bagatelle (Barcrest) (MPU4) (set 8)", - "m4bagtel__h", "Bagatelle (Barcrest) (MPU4) (set 9)", - "m4bagtel__i", "Bagatelle (Barcrest) (MPU4) (set 10)", - "m4bagtel__j", "Bagatelle (Barcrest) (MPU4) (set 11)", - "m4bagtel__k", "Bagatelle (Barcrest) (MPU4) (set 12)", - "m4bagtel__l", "Bagatelle (Barcrest) (MPU4) (set 13)", - "m4bagtel__m", "Bagatelle (Barcrest) (MPU4) (set 14)", - "m4bagtel__n", "Bagatelle (Barcrest) (MPU4) (set 15)", - "m4bagtel__o", "Bagatelle (Barcrest) (MPU4) (set 16)", - "m4bagtel__p", "Bagatelle (Barcrest) (MPU4) (set 17)", - "m4bagtel__q", "Bagatelle (Barcrest) (MPU4) (set 18)", - "m4bagtel__r", "Bagatelle (Barcrest) (MPU4) (set 19)", - "m4bagtel__s", "Bagatelle (Barcrest) (MPU4) (set 20)", - "m4bagtel__t", "Bagatelle (Barcrest) (MPU4) (set 21)", - "m4bagtel__u", "Bagatelle (Barcrest) (MPU4) (set 22)", - "m4bagtel__v", "Bagatelle (Barcrest) (MPU4) (set 23)", - "m4bagtel__w", "Bagatelle (Barcrest) (MPU4) (set 24)", - "m4bagtel__x", "Bagatelle (Barcrest) (MPU4) (set 25)", - "m4bagtel__y", "Bagatelle (Barcrest) (MPU4) (set 26)", - "m4bagtel__z", "Bagatelle (Barcrest) (MPU4) (set 27)", - "m4bandgd", "Bands Of Gold (Eurogames) (MPU4)", - "m4bangin", "Bangin' Away (Global) (MPU4, set 1)", - "m4bangina", "Bangin' Away (Global) (MPU4, set 2)", - "m4banginb", "Bangin' Away (Global) (MPU4, set 3)", - "m4bangrs", "Bangers 'n' Cash (Empire) (MPU4, set 1)", - "m4bangrsa", "Bangers 'n' Cash (Empire) (MPU4, set 2)", - "m4bangrsb", "Bangers 'n' Cash (Empire) (MPU4, set 3)", - "m4bankrd", "Bank Raid (Empire) (MPU4, set 1)", - "m4bankrda", "Bank Raid (Empire) (MPU4, set 2)", - "m4bankrdb", "Bank Raid (Empire) (MPU4, set 3)", - "m4bankrdc", "Bank Raid (Empire) (MPU4, set 4)", - "m4bankrdd", "Bank Raid (Empire) (MPU4, set 5)", - "m4barcrz", "Bar Crazy (unknown) (MPU4?)", - "m4bben", "Big Ben (Avantime?) (MPU4) (set 1)", - "m4bben__a", "Big Ben (Avantime?) (MPU4) (set 2)", - "m4bben__b", "Big Ben (Avantime?) (MPU4) (set 3)", - "m4bben__c", "Big Ben (Avantime?) (MPU4) (set 4)", - "m4bben__d", "Big Ben (Avantime?) (MPU4) (set 5)", - "m4bben__e", "Big Ben (Avantime?) (MPU4) (set 6)", - "m4bben__f", "Big Ben (Avantime?) (MPU4) (set 7)", - "m4bben__g", "Big Ben (Avantime?) (MPU4) (set 8)", - "m4bben__h", "Big Ben (Avantime?) (MPU4) (set 9)", - "m4bben__i", "Big Ben (Avantime?) (MPU4) (set 10)", - "m4bbox", "Brain Box (Avantime?) (MPU4) (set 1)", - "m4bbox__a", "Brain Box (Avantime?) (MPU4) (set 2)", - "m4bbox__b", "Brain Box (Avantime?) (MPU4) (set 3)", - "m4bbox__c", "Brain Box (Avantime?) (MPU4) (set 4)", - "m4bbox__d", "Brain Box (Avantime?) (MPU4) (set 5)", - "m4bbox__e", "Brain Box (Avantime?) (MPU4) (set 6)", - "m4bbox__f", "Brain Box (Avantime?) (MPU4) (set 7)", - "m4bbox__g", "Brain Box (Avantime?) (MPU4) (set 8)", - "m4bbox__h", "Brain Box (Avantime?) (MPU4) (set 9)", - "m4bbox__i", "Brain Box (Avantime?) (MPU4) (set 10)", - "m4bclimb", "Bear Climber (MPU4?)", - "m4bdash", "Boulder Dash (Barcrest) (MPU4) (set 1)", - "m4bdash__0", "Boulder Dash (Barcrest) (MPU4) (set 28)", - "m4bdash__1", "Boulder Dash (Barcrest) (MPU4) (set 29)", - "m4bdash__2", "Boulder Dash (Barcrest) (MPU4) (set 30)", - "m4bdash__3", "Boulder Dash (Barcrest) (MPU4) (set 31)", - "m4bdash__4", "Boulder Dash (Barcrest) (MPU4) (set 32)", - "m4bdash__5", "Boulder Dash (Barcrest) (MPU4) (set 33)", - "m4bdash__6", "Boulder Dash (Barcrest) (MPU4) (set 34)", - "m4bdash__7", "Boulder Dash (Barcrest) (MPU4) (set 35)", - "m4bdash__8", "Boulder Dash (Barcrest) (MPU4) (set 36)", - "m4bdash__9", "Boulder Dash (Barcrest) (MPU4) (set 37)", - "m4bdash__a", "Boulder Dash (Barcrest) (MPU4) (set 2)", - "m4bdash__a0", "Boulder Dash (Barcrest) (MPU4) (set 64)", - "m4bdash__a1", "Boulder Dash (Barcrest) (MPU4) (set 65)", - "m4bdash__a2", "Boulder Dash (Barcrest) (MPU4) (set 66)", - "m4bdash__a3", "Boulder Dash (Barcrest) (MPU4) (set 67)", - "m4bdash__a4", "Boulder Dash (Barcrest) (MPU4) (set 68)", - "m4bdash__aa", "Boulder Dash (Barcrest) (MPU4) (set 38)", - "m4bdash__ab", "Boulder Dash (Barcrest) (MPU4) (set 39)", - "m4bdash__ac", "Boulder Dash (Barcrest) (MPU4) (set 40)", - "m4bdash__ad", "Boulder Dash (Barcrest) (MPU4) (set 41)", - "m4bdash__ae", "Boulder Dash (Barcrest) (MPU4) (set 42)", - "m4bdash__af", "Boulder Dash (Barcrest) (MPU4) (set 43)", - "m4bdash__ag", "Boulder Dash (Barcrest) (MPU4) (set 44)", - "m4bdash__ah", "Boulder Dash (Barcrest) (MPU4) (set 45)", - "m4bdash__ai", "Boulder Dash (Barcrest) (MPU4) (set 46)", - "m4bdash__aj", "Boulder Dash (Barcrest) (MPU4) (set 47)", - "m4bdash__ak", "Boulder Dash (Barcrest) (MPU4) (set 48)", - "m4bdash__al", "Boulder Dash (Barcrest) (MPU4) (set 49)", - "m4bdash__am", "Boulder Dash (Barcrest) (MPU4) (set 50)", - "m4bdash__an", "Boulder Dash (Barcrest) (MPU4) (set 51)", - "m4bdash__ao", "Boulder Dash (Barcrest) (MPU4) (set 52)", - "m4bdash__ap", "Boulder Dash (Barcrest) (MPU4) (set 53)", - "m4bdash__aq", "Boulder Dash (Barcrest) (MPU4) (set 54)", - "m4bdash__ar", "Boulder Dash (Barcrest) (MPU4) (set 55)", - "m4bdash__as", "Boulder Dash (Barcrest) (MPU4) (set 56)", - "m4bdash__at", "Boulder Dash (Barcrest) (MPU4) (set 57)", - "m4bdash__au", "Boulder Dash (Barcrest) (MPU4) (set 58)", - "m4bdash__av", "Boulder Dash (Barcrest) (MPU4) (set 59)", - "m4bdash__aw", "Boulder Dash (Barcrest) (MPU4) (set 60)", - "m4bdash__ax", "Boulder Dash (Barcrest) (MPU4) (set 61)", - "m4bdash__ay", "Boulder Dash (Barcrest) (MPU4) (set 62)", - "m4bdash__az", "Boulder Dash (Barcrest) (MPU4) (set 63)", - "m4bdash__b", "Boulder Dash (Barcrest) (MPU4) (set 3)", - "m4bdash__c", "Boulder Dash (Barcrest) (MPU4) (set 4)", - "m4bdash__d", "Boulder Dash (Barcrest) (MPU4) (set 5)", - "m4bdash__e", "Boulder Dash (Barcrest) (MPU4) (set 6)", - "m4bdash__f", "Boulder Dash (Barcrest) (MPU4) (set 7)", - "m4bdash__g", "Boulder Dash (Barcrest) (MPU4) (set 8)", - "m4bdash__h", "Boulder Dash (Barcrest) (MPU4) (set 9)", - "m4bdash__i", "Boulder Dash (Barcrest) (MPU4) (set 10)", - "m4bdash__j", "Boulder Dash (Barcrest) (MPU4) (set 11)", - "m4bdash__k", "Boulder Dash (Barcrest) (MPU4) (set 12)", - "m4bdash__l", "Boulder Dash (Barcrest) (MPU4) (set 13)", - "m4bdash__m", "Boulder Dash (Barcrest) (MPU4) (set 14)", - "m4bdash__n", "Boulder Dash (Barcrest) (MPU4) (set 15)", - "m4bdash__o", "Boulder Dash (Barcrest) (MPU4) (set 16)", - "m4bdash__p", "Boulder Dash (Barcrest) (MPU4) (set 17)", - "m4bdash__q", "Boulder Dash (Barcrest) (MPU4) (set 18)", - "m4bdash__r", "Boulder Dash (Barcrest) (MPU4) (set 19)", - "m4bdash__s", "Boulder Dash (Barcrest) (MPU4) (set 20)", - "m4bdash__t", "Boulder Dash (Barcrest) (MPU4) (set 21)", - "m4bdash__u", "Boulder Dash (Barcrest) (MPU4) (set 22)", - "m4bdash__v", "Boulder Dash (Barcrest) (MPU4) (set 23)", - "m4bdash__w", "Boulder Dash (Barcrest) (MPU4) (set 24)", - "m4bdash__x", "Boulder Dash (Barcrest) (MPU4) (set 25)", - "m4bdash__y", "Boulder Dash (Barcrest) (MPU4) (set 26)", - "m4bdash__z", "Boulder Dash (Barcrest) (MPU4) (set 27)", - "m4berser", "Berserk (Barcrest) (MPU4) (set 1)", - "m4berser__0", "Berserk (Barcrest) (MPU4) (set 28)", - "m4berser__1", "Berserk (Barcrest) (MPU4) (set 29)", - "m4berser__a", "Berserk (Barcrest) (MPU4) (set 2)", - "m4berser__b", "Berserk (Barcrest) (MPU4) (set 3)", - "m4berser__c", "Berserk (Barcrest) (MPU4) (set 4)", - "m4berser__d", "Berserk (Barcrest) (MPU4) (set 5)", - "m4berser__e", "Berserk (Barcrest) (MPU4) (set 6)", - "m4berser__f", "Berserk (Barcrest) (MPU4) (set 7)", - "m4berser__g", "Berserk (Barcrest) (MPU4) (set 8)", - "m4berser__h", "Berserk (Barcrest) (MPU4) (set 9)", - "m4berser__i", "Berserk (Barcrest) (MPU4) (set 10)", - "m4berser__j", "Berserk (Barcrest) (MPU4) (set 11)", - "m4berser__k", "Berserk (Barcrest) (MPU4) (set 12)", - "m4berser__l", "Berserk (Barcrest) (MPU4) (set 13)", - "m4berser__m", "Berserk (Barcrest) (MPU4) (set 14)", - "m4berser__n", "Berserk (Barcrest) (MPU4) (set 15)", - "m4berser__o", "Berserk (Barcrest) (MPU4) (set 16)", - "m4berser__p", "Berserk (Barcrest) (MPU4) (set 17)", - "m4berser__q", "Berserk (Barcrest) (MPU4) (set 18)", - "m4berser__r", "Berserk (Barcrest) (MPU4) (set 19)", - "m4berser__s", "Berserk (Barcrest) (MPU4) (set 20)", - "m4berser__t", "Berserk (Barcrest) (MPU4) (set 21)", - "m4berser__u", "Berserk (Barcrest) (MPU4) (set 22)", - "m4berser__v", "Berserk (Barcrest) (MPU4) (set 23)", - "m4berser__w", "Berserk (Barcrest) (MPU4) (set 24)", - "m4berser__x", "Berserk (Barcrest) (MPU4) (set 25)", - "m4berser__y", "Berserk (Barcrest) (MPU4) (set 26)", - "m4berser__z", "Berserk (Barcrest) (MPU4) (set 27)", - "m4bigapl", "The Big Apple (Mdm) (MPU4, set 1)", - "m4bigapla", "The Big Apple (Mdm) (MPU4, set 2)", - "m4bigaplb", "The Big Apple (Mdm) (MPU4, set 3)", - "m4bigaplc", "The Big Apple (Mdm) (MPU4, set 4)", - "m4bigapld", "The Big Apple (Mdm) (MPU4, set 5)", - "m4bigaple", "The Big Apple (Mdm) (MPU4, set 6)", - "m4bigban", "Big Bandit (Nova) (MPU4)", - "m4bigben", "Big Ben (Coinworld) (MPU4, set 1)", - "m4bigbena", "Big Ben (Coinworld) (MPU4, set 2)", - "m4bigbenb", "Big Ben (Coinworld) (MPU4, set 3)", - "m4bigbend", "Big Ben (Coinworld) (MPU4, set 4)", - "m4bigbene", "Big Ben (Coinworld) (MPU4, set 5)", - "m4bigbn", "Big Ben (Barcrest) (DBB, Dutch) (MPU4)", - "m4bigchd", "Big Chief (Barcrest) [BCH, Dutch] (MPU4)", - "m4bigchf", "Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 1)", - "m4bigchfa", "Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 2)", - "m4bigchfb", "Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 3)", - "m4bigchfc", "Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 4)", - "m4bigchs", "Big Cheese (Empire) (MPU4, set 1)", - "m4bigchsa", "Big Cheese (Empire) (MPU4, set 2)", - "m4bigchsb", "Big Cheese (Empire) (MPU4, set 3)", - "m4bigmt", "The Big Match (Bwb) (MPU4) (set 1)", - "m4bigmt__a", "The Big Match (Bwb) (MPU4) (set 2)", - "m4bigmt__b", "The Big Match (Bwb) (MPU4) (set 3)", - "m4bigmt__c", "The Big Match (Bwb) (MPU4) (set 4)", - "m4bigmt__d", "The Big Match (Bwb) (MPU4) (set 5)", - "m4bigmt__e", "The Big Match (Bwb) (MPU4) (set 6)", - "m4bigmt__f", "The Big Match (Bwb) (MPU4) (set 7)", - "m4bingbl", "Bingo Belle (Bwb) (MPU4) (set 1)", - "m4bingbl__a", "Bingo Belle (Bwb) (MPU4) (set 2)", - "m4bingbl__b", "Bingo Belle (Bwb) (MPU4) (set 3)", - "m4bingbl__c", "Bingo Belle (Bwb) (MPU4) (set 4)", - "m4bingbl__d", "Bingo Belle (Bwb) (MPU4) (set 5)", - "m4bingbl__e", "Bingo Belle (Bwb) (MPU4) (set 6)", - "m4bingbl__f", "Bingo Belle (Bwb) (MPU4) (set 7)", - "m4bingbl__g", "Bingo Belle (Bwb) (MPU4) (set 8)", - "m4bingbs", "Bingo Belle Showcase (Bwb) (MPU4) (set 1)", - "m4bingbs__a", "Bingo Belle Showcase (Bwb) (MPU4) (set 2)", - "m4bingbs__b", "Bingo Belle Showcase (Bwb) (MPU4) (set 3)", - "m4bingbs__c", "Bingo Belle Showcase (Bwb) (MPU4) (set 4)", - "m4bingbs__d", "Bingo Belle Showcase (Bwb) (MPU4) (set 5)", - "m4bingbs__e", "Bingo Belle Showcase (Bwb) (MPU4) (set 6)", - "m4bingbs__f", "Bingo Belle Showcase (Bwb) (MPU4) (set 7)", - "m4bingcl", "Bingo Club (Bwb) (MPU4) (set 1)", - "m4bingcl__a", "Bingo Club (Bwb) (MPU4) (set 2)", - "m4bingcl__b", "Bingo Club (Bwb) (MPU4) (set 3)", - "m4bj", "Black Jack (Barcrest) [Dutch] (MPU4)", - "m4bjac", "Blackjack Club (Barcrest) (MPU4) (set 1)", - "m4bjaca", "Blackjack Club (Barcrest) (MPU4) (set 2)", - "m4bjack", "Black Jack (Barcrest) (MPU4) (set 1)", - "m4bjacka", "Black Jack (Barcrest) (MPU4) (set 2)", - "m4bjc", "Black Jack Club (Barcrest) (Dutch) (MPU4)", - "m4bjsm", "Blackjack Super Multi (Barcrest) (MPU4) (SM H)", - "m4bjsma", "Blackjack Super Multi (Barcrest) (MPU4)", - "m4blflsh", "Blue Flash (Bwb) (MPU4) (set 1)", - "m4blflsha", "Blue Flash (Bwb) (MPU4) (set 2)", - "m4blflshb", "Blue Flash (Bwb) (MPU4) (set 3)", - "m4blflshc", "Blue Flash (Bwb) (MPU4) (set 4)", - "m4blflshd", "Blue Flash (Bwb) (MPU4) (set 5)", - "m4blflshe", "Blue Flash (Bwb) (MPU4) (set 6)", - "m4blkbul", "Super Play (Black Bull?) (Czech) (Barcrest) [XSP] (MPU4)", - "m4blkbuld", "Gun Smoke (Barcrest) (Dutch, alt sound roms) (MPU4)", - "m4blkcat", "Black Cat (Barcrest) (Dutch) (MPU4) (DBL 1.4)", - "m4blkgd", "Black Gold (Gemini) (MPU4) (set 1)", - "m4blkgda", "Black Gold (Gemini) (MPU4) (set 2)", - "m4blkmgc", "Black Magic (Avantime?) (MPU4) (Latvia, set 1)", - "m4blkmgc_1", "Black Magic (Avantime?) (MPU4) (Latvia, set 2)", - "m4blkmgc_u1", "Black Magic (Avantime?) (MPU4) (Ukraine, set 1)", - "m4blkmgc_u2", "Black Magic (Avantime?) (MPU4) (Ukraine, set 2)", - "m4blkmgc_u3", "Black Magic (Avantime?) (MPU4) (Ukraine, set 3)", - "m4blkmgc_u4", "Black Magic (Avantime?) (MPU4) (Ukraine, set 4)", - "m4blkmgc_u5", "Black Magic (Avantime?) (MPU4) (Ukraine, set 5)", - "m4blkmgc_u6", "Black Magic (Avantime?) (MPU4) (Ukraine, set 6)", - "m4blkwhd", "Black & White (Barcrest) [Dutch] (MPU4) (DBW 1.1)", - "m4blsbys", "Blues Boys (Bwb) (MPU4) (set 1)", - "m4blsbys__0", "Blues Boys (Bwb) (MPU4) (set 28)", - "m4blsbys__1", "Blues Boys (Bwb) (MPU4) (set 29)", - "m4blsbys__2", "Blues Boys (Bwb) (MPU4) (set 30)", - "m4blsbys__3", "Blues Boys (Bwb) (MPU4) (set 31)", - "m4blsbys__4", "Blues Boys (Bwb) (MPU4) (set 32)", - "m4blsbys__5", "Blues Boys (Bwb) (MPU4) (set 33)", - "m4blsbys__6", "Blues Boys (Bwb) (MPU4) (set 34)", - "m4blsbys__7", "Blues Boys (Bwb) (MPU4) (set 35)", - "m4blsbys__8", "Blues Boys (Bwb) (MPU4) (set 36)", - "m4blsbys__9", "Blues Boys (Bwb) (MPU4) (set 37)", - "m4blsbys__a", "Blues Boys (Bwb) (MPU4) (set 2)", - "m4blsbys__aa", "Blues Boys (Bwb) (MPU4) (set 38)", - "m4blsbys__ab", "Blues Boys (Bwb) (MPU4) (set 39)", - "m4blsbys__ac", "Blues Boys (Bwb) (MPU4) (set 40)", - "m4blsbys__ad", "Blues Boys (Bwb) (MPU4) (set 41)", - "m4blsbys__b", "Blues Boys (Bwb) (MPU4) (set 3)", - "m4blsbys__c", "Blues Boys (Bwb) (MPU4) (set 4)", - "m4blsbys__d", "Blues Boys (Bwb) (MPU4) (set 5)", - "m4blsbys__e", "Blues Boys (Bwb) (MPU4) (set 6)", - "m4blsbys__f", "Blues Boys (Bwb) (MPU4) (set 7)", - "m4blsbys__g", "Blues Boys (Bwb) (MPU4) (set 8)", - "m4blsbys__h", "Blues Boys (Bwb) (MPU4) (set 9)", - "m4blsbys__i", "Blues Boys (Bwb) (MPU4) (set 10)", - "m4blsbys__j", "Blues Boys (Bwb) (MPU4) (set 11)", - "m4blsbys__k", "Blues Boys (Bwb) (MPU4) (set 12)", - "m4blsbys__l", "Blues Boys (Bwb) (MPU4) (set 13)", - "m4blsbys__m", "Blues Boys (Bwb) (MPU4) (set 14)", - "m4blsbys__n", "Blues Boys (Bwb) (MPU4) (set 15)", - "m4blsbys__o", "Blues Boys (Bwb) (MPU4) (set 16)", - "m4blsbys__p", "Blues Boys (Bwb) (MPU4) (set 17)", - "m4blsbys__q", "Blues Boys (Bwb) (MPU4) (set 18)", - "m4blsbys__r", "Blues Boys (Bwb) (MPU4) (set 19)", - "m4blsbys__s", "Blues Boys (Bwb) (MPU4) (set 20)", - "m4blsbys__t", "Blues Boys (Bwb) (MPU4) (set 21)", - "m4blsbys__u", "Blues Boys (Bwb) (MPU4) (set 22)", - "m4blsbys__v", "Blues Boys (Bwb) (MPU4) (set 23)", - "m4blsbys__w", "Blues Boys (Bwb) (MPU4) (set 24)", - "m4blsbys__x", "Blues Boys (Bwb) (MPU4) (set 25)", - "m4blsbys__y", "Blues Boys (Bwb) (MPU4) (set 26)", - "m4blsbys__z", "Blues Boys (Bwb) (MPU4) (set 27)", - "m4blstbk", "Blast A Bank (Barcrest) (MPU4)", - "m4bluedm", "Blue Diamond (Barcrest) (MPU4) (DBD1.0)", - "m4bluemn", "Blue Moon (Barcrest) (MPU4) (BLU 2.3)", - "m4bluemna", "Blue Moon (Barcrest) (MPU4) (BLU 2.1)", - "m4bluemnb", "Blue Moon (Barcrest) (MPU4) (BLU 1.1)", - "m4bluesn", "Blues Boys (Nova) (MPU4)", - "m4blztrl", "Blazing Trails (Mdm) (MPU4, set 1)", - "m4blztrla", "Blazing Trails (Mdm) (MPU4, set 2)", - "m4bnknot", "Bank A Note (Barcrest) [BN 1.0] (MPU4)", - "m4bnkrol", "Bank Roller Club (Barcrest) (MPU4) (set 1)", - "m4bnkrol__a", "Bank Roller Club (Barcrest) (MPU4) (set 2)", - "m4bnkrol__b", "Bank Roller Club (Barcrest) (MPU4) (set 3)", - "m4bnkrol__c", "Bank Roller Club (Barcrest) (MPU4) (set 4)", - "m4bnkrol__d", "Bank Roller Club (Barcrest) (MPU4) (set 5)", - "m4bnkrol__e", "Bank Roller Club (Barcrest) (MPU4) (set 6)", - "m4bodymt", "Body Match (Mdm) (MPU4)", - "m4boltbl", "Bolt From The Blue (DJE) (MPU4, set 1)", - "m4boltbla", "Bolt From The Blue (DJE) (MPU4, set 2)", - "m4boltblb", "Bolt From The Blue (DJE) (MPU4, set 3)", - "m4boltblc", "Bolt From The Blue (DJE) (MPU4, set 4)", - "m4bonzbn", "Bingo Bonanza (unknown) (MPU4?)", - "m4booze", "Booze Cruise (Extreme) (MPU4)", - "m4brdway", "Broadway (Barcrest) (DBR, Dutch) (MPU4)", - "m4brktak", "Break & Take (Barcrest) (MPU4)", - "m4brnze", "Bronze Voyage (unknown) (MPU4) (set 1)", - "m4brnzea", "Bronze Voyage (unknown) (MPU4) (set 2)", - "m4brnzeb", "Bronze Voyage (unknown) (MPU4) (set 3)", - "m4brook", "Brooklyn (Barcrest) (MPU4) (PFT 1.8)", - "m4btclok", "Beat The Clock (Barcrest) (MPU4)", - "m4buc", "Buccaneer (Barcrest) (MPU4) (set 1)", - "m4buc__0", "Buccaneer (Barcrest) (MPU4) (set 28)", - "m4buc__1", "Buccaneer (Barcrest) (MPU4) (set 29)", - "m4buc__2", "Buccaneer (Barcrest) (MPU4) (set 30)", - "m4buc__3", "Buccaneer (Barcrest) (MPU4) (set 31)", - "m4buc__4", "Buccaneer (Barcrest) (MPU4) (set 32)", - "m4buc__5", "Buccaneer (Barcrest) (MPU4) (set 33)", - "m4buc__6", "Buccaneer (Barcrest) (MPU4) (set 34)", - "m4buc__7", "Buccaneer (Barcrest) (MPU4) (set 35)", - "m4buc__8", "Buccaneer (Barcrest) (MPU4) (set 36)", - "m4buc__9", "Buccaneer (Barcrest) (MPU4) (set 37)", - "m4buc__a", "Buccaneer (Barcrest) (MPU4) (set 2)", - "m4buc__aa", "Buccaneer (Barcrest) (MPU4) (set 38)", - "m4buc__ab", "Buccaneer (Barcrest) (MPU4) (set 39)", - "m4buc__ac", "Buccaneer (Barcrest) (MPU4) (set 40)", - "m4buc__ad", "Buccaneer (Barcrest) (MPU4) (set 41)", - "m4buc__ae", "Buccaneer (Barcrest) (MPU4) (set 42)", - "m4buc__af", "Buccaneer (Barcrest) (MPU4) (set 43)", - "m4buc__ag", "Buccaneer (Barcrest) (MPU4) (set 44)", - "m4buc__ah", "Buccaneer (Barcrest) (MPU4) (set 45)", - "m4buc__ai", "Buccaneer (Barcrest) (MPU4) (set 46)", - "m4buc__aj", "Buccaneer (Barcrest) (MPU4) (set 47)", - "m4buc__ak", "Buccaneer (Barcrest) (MPU4) (set 48)", - "m4buc__al", "Buccaneer (Barcrest) (MPU4) (set 49)", - "m4buc__am", "Buccaneer (Barcrest) (MPU4) (set 50)", - "m4buc__an", "Buccaneer (Barcrest) (MPU4) (set 51)", - "m4buc__ao", "Buccaneer (Barcrest) (MPU4) (set 52)", - "m4buc__ap", "Buccaneer (Barcrest) (MPU4) (set 53)", - "m4buc__aq", "Buccaneer (Barcrest) (MPU4) (set 54)", - "m4buc__ar", "Buccaneer (Barcrest) (MPU4) (set 55)", - "m4buc__as", "Buccaneer (Barcrest) (MPU4) (set 56)", - "m4buc__at", "Buccaneer (Barcrest) (MPU4) (set 57)", - "m4buc__au", "Buccaneer (Barcrest) (MPU4) (set 58)", - "m4buc__av", "Buccaneer (Barcrest) (MPU4) (set 59)", - "m4buc__aw", "Buccaneer (Barcrest) (MPU4) (set 60)", - "m4buc__ax", "Buccaneer (Barcrest) (MPU4) (set 61)", - "m4buc__ay", "Buccaneer (Barcrest) (MPU4) (set 62)", - "m4buc__az", "Buccaneer (Barcrest) (MPU4) (set 63)", - "m4buc__b", "Buccaneer (Barcrest) (MPU4) (set 3)", - "m4buc__c", "Buccaneer (Barcrest) (MPU4) (set 4)", - "m4buc__d", "Buccaneer (Barcrest) (MPU4) (set 5)", - "m4buc__e", "Buccaneer (Barcrest) (MPU4) (set 6)", - "m4buc__f", "Buccaneer (Barcrest) (MPU4) (set 7)", - "m4buc__g", "Buccaneer (Barcrest) (MPU4) (set 8)", - "m4buc__h", "Buccaneer (Barcrest) (MPU4) (set 9)", - "m4buc__i", "Buccaneer (Barcrest) (MPU4) (set 10)", - "m4buc__j", "Buccaneer (Barcrest) (MPU4) (set 11)", - "m4buc__k", "Buccaneer (Barcrest) (MPU4) (set 12)", - "m4buc__l", "Buccaneer (Barcrest) (MPU4) (set 13)", - "m4buc__m", "Buccaneer (Barcrest) (MPU4) (set 14)", - "m4buc__n", "Buccaneer (Barcrest) (MPU4) (set 15)", - "m4buc__o", "Buccaneer (Barcrest) (MPU4) (set 16)", - "m4buc__p", "Buccaneer (Barcrest) (MPU4) (set 17)", - "m4buc__q", "Buccaneer (Barcrest) (MPU4) (set 18)", - "m4buc__r", "Buccaneer (Barcrest) (MPU4) (set 19)", - "m4buc__s", "Buccaneer (Barcrest) (MPU4) (set 20)", - "m4buc__t", "Buccaneer (Barcrest) (MPU4) (set 21)", - "m4buc__u", "Buccaneer (Barcrest) (MPU4) (set 22)", - "m4buc__v", "Buccaneer (Barcrest) (MPU4) (set 23)", - "m4buc__w", "Buccaneer (Barcrest) (MPU4) (set 24)", - "m4buc__x", "Buccaneer (Barcrest) (MPU4) (set 25)", - "m4buc__y", "Buccaneer (Barcrest) (MPU4) (set 26)", - "m4buc__z", "Buccaneer (Barcrest) (MPU4) (set 27)", - "m4bucclb", "Buccaneer Club (Crystal) (MPU4) (set 1)", - "m4bucclba", "Buccaneer Club (Crystal) (MPU4) (set 2)", - "m4bucclbb", "Buccaneer Club (Crystal) (MPU4) (set 3)", - "m4bucclbc", "Buccaneer Club (Crystal) (MPU4) (set 4)", - "m4bucks", "Bucks Fizz Club (Barcrest) (MPU4)", - "m4bullio", "Bullion Club (Crystal) (MPU4) (set 1)", - "m4bullioa", "Bullion Club (Crystal) (MPU4) (set 2)", - "m4bulliob", "Bullion Club (Crystal) (MPU4) (set 3)", - "m4c2", "Circus Circus 2 (Nova?) (MPU4)", - "m4c9", "Cloud Nine (Barcrest) (MPU4) (set 1)", - "m4c999", "Cloud 999 (Barcrest) (MPU4) (OC9 0.3, set 1)", - "m4c999a", "Cloud 999 (Barcrest) (MPU4) (OC9 0.3, set 2)", - "m4c999b", "Cloud 999 (Barcrest) (MPU4) (CLN 3.6)", - "m4c999c", "Cloud 999 (Barcrest) (MPU4) (CLN 3.0)", - "m4c9__0", "Cloud Nine (Barcrest) (MPU4) (set 28)", - "m4c9__1", "Cloud Nine (Barcrest) (MPU4) (set 29)", - "m4c9__2", "Cloud Nine (Barcrest) (MPU4) (set 30)", - "m4c9__3", "Cloud Nine (Barcrest) (MPU4) (set 31)", - "m4c9__4", "Cloud Nine (Barcrest) (MPU4) (set 32)", - "m4c9__5", "Cloud Nine (Barcrest) (MPU4) (set 33)", - "m4c9__6", "Cloud Nine (Barcrest) (MPU4) (set 34)", - "m4c9__7", "Cloud Nine (Barcrest) (MPU4) (set 35)", - "m4c9__8", "Cloud Nine (Barcrest) (MPU4) (set 36)", - "m4c9__9", "Cloud Nine (Barcrest) (MPU4) (set 37)", - "m4c9__a", "Cloud Nine (Barcrest) (MPU4) (set 2)", - "m4c9__a0", "Cloud Nine (Barcrest) (MPU4) (set 64)", - "m4c9__a1", "Cloud Nine (Barcrest) (MPU4) (set 65)", - "m4c9__a2", "Cloud Nine (Barcrest) (MPU4) (set 66)", - "m4c9__a3", "Cloud Nine (Barcrest) (MPU4) (set 67)", - "m4c9__aa", "Cloud Nine (Barcrest) (MPU4) (set 38)", - "m4c9__ab", "Cloud Nine (Barcrest) (MPU4) (set 39)", - "m4c9__ac", "Cloud Nine (Barcrest) (MPU4) (set 40)", - "m4c9__ad", "Cloud Nine (Barcrest) (MPU4) (set 41)", - "m4c9__ae", "Cloud Nine (Barcrest) (MPU4) (set 42)", - "m4c9__af", "Cloud Nine (Barcrest) (MPU4) (set 43)", - "m4c9__ag", "Cloud Nine (Barcrest) (MPU4) (set 44)", - "m4c9__ah", "Cloud Nine (Barcrest) (MPU4) (set 45)", - "m4c9__ai", "Cloud Nine (Barcrest) (MPU4) (set 46)", - "m4c9__aj", "Cloud Nine (Barcrest) (MPU4) (set 47)", - "m4c9__ak", "Cloud Nine (Barcrest) (MPU4) (set 48)", - "m4c9__al", "Cloud Nine (Barcrest) (MPU4) (set 49)", - "m4c9__am", "Cloud Nine (Barcrest) (MPU4) (set 50)", - "m4c9__an", "Cloud Nine (Barcrest) (MPU4) (set 51)", - "m4c9__ao", "Cloud Nine (Barcrest) (MPU4) (set 52)", - "m4c9__ap", "Cloud Nine (Barcrest) (MPU4) (set 53)", - "m4c9__aq", "Cloud Nine (Barcrest) (MPU4) (set 54)", - "m4c9__ar", "Cloud Nine (Barcrest) (MPU4) (set 55)", - "m4c9__as", "Cloud Nine (Barcrest) (MPU4) (set 56)", - "m4c9__at", "Cloud Nine (Barcrest) (MPU4) (set 57)", - "m4c9__au", "Cloud Nine (Barcrest) (MPU4) (set 58)", - "m4c9__av", "Cloud Nine (Barcrest) (MPU4) (set 59)", - "m4c9__aw", "Cloud Nine (Barcrest) (MPU4) (set 60)", - "m4c9__ax", "Cloud Nine (Barcrest) (MPU4) (set 61)", - "m4c9__ay", "Cloud Nine (Barcrest) (MPU4) (set 62)", - "m4c9__az", "Cloud Nine (Barcrest) (MPU4) (set 63)", - "m4c9__b", "Cloud Nine (Barcrest) (MPU4) (set 3)", - "m4c9__c", "Cloud Nine (Barcrest) (MPU4) (set 4)", - "m4c9__d", "Cloud Nine (Barcrest) (MPU4) (set 5)", - "m4c9__e", "Cloud Nine (Barcrest) (MPU4) (set 6)", - "m4c9__f", "Cloud Nine (Barcrest) (MPU4) (set 7)", - "m4c9__g", "Cloud Nine (Barcrest) (MPU4) (set 8)", - "m4c9__h", "Cloud Nine (Barcrest) (MPU4) (set 9)", - "m4c9__i", "Cloud Nine (Barcrest) (MPU4) (set 10)", - "m4c9__j", "Cloud Nine (Barcrest) (MPU4) (set 11)", - "m4c9__k", "Cloud Nine (Barcrest) (MPU4) (set 12)", - "m4c9__l", "Cloud Nine (Barcrest) (MPU4) (set 13)", - "m4c9__m", "Cloud Nine (Barcrest) (MPU4) (set 14)", - "m4c9__n", "Cloud Nine (Barcrest) (MPU4) (set 15)", - "m4c9__o", "Cloud Nine (Barcrest) (MPU4) (set 16)", - "m4c9__p", "Cloud Nine (Barcrest) (MPU4) (set 17)", - "m4c9__q", "Cloud Nine (Barcrest) (MPU4) (set 18)", - "m4c9__r", "Cloud Nine (Barcrest) (MPU4) (set 19)", - "m4c9__s", "Cloud Nine (Barcrest) (MPU4) (set 20)", - "m4c9__t", "Cloud Nine (Barcrest) (MPU4) (set 21)", - "m4c9__u", "Cloud Nine (Barcrest) (MPU4) (set 22)", - "m4c9__v", "Cloud Nine (Barcrest) (MPU4) (set 23)", - "m4c9__w", "Cloud Nine (Barcrest) (MPU4) (set 24)", - "m4c9__x", "Cloud Nine (Barcrest) (MPU4) (set 25)", - "m4c9__y", "Cloud Nine (Barcrest) (MPU4) (set 26)", - "m4c9__z", "Cloud Nine (Barcrest) (MPU4) (set 27)", - "m4c9c", "Cloud Nine Club (Barcrest) (MPU4) (CNC 2.1)", - "m4calama", "Calamari Club (Barcrest) (MPU4) (set 1)", - "m4calama__a", "Calamari Club (Barcrest) (MPU4) (set 2)", - "m4calama__b", "Calamari Club (Barcrest) (MPU4) (set 3)", - "m4calama__c", "Calamari Club (Barcrest) (MPU4) (set 4)", - "m4calama__d", "Calamari Club (Barcrest) (MPU4) (set 5)", - "m4calama__e", "Calamari Club (Barcrest) (MPU4) (set 6)", - "m4calama__f", "Calamari Club (Barcrest) (MPU4) (set 7)", - "m4calama__g", "Calamari Club (Barcrest) (MPU4) (set 8)", - "m4calama__h", "Calamari Club (Barcrest) (MPU4) (set 9)", - "m4calama__i", "Calamari Club (Barcrest) (MPU4) (set 10)", - "m4calama__j", "Calamari Club (Barcrest) (MPU4) (set 11)", - "m4calicl", "California Club (Barcrest) (MPU4) (set 1)", - "m4calicla", "California Club (Barcrest) (MPU4) (set 2)", - "m4caliclb", "California Club (Barcrest) (MPU4) (set 3)", - "m4caliclc", "California Club (Barcrest) (MPU4) (set 4)", - "m4calicld", "California Club (Barcrest) (MPU4) (set 5)", - "m4captb", "Captain Bear (MPU4?)", - "m4cardcs", "Card Cash (Barcrest) (MPU4) (CCS 1.9)", - "m4carou", "Carousel Club (Crystal) (MPU4) (set 1)", - "m4caroua", "Carousel Club (Crystal) (MPU4) (set 2)", - "m4caroub", "Carousel Club (Crystal) (MPU4) (set 3)", - "m4carouc", "Carousel Club (Crystal) (MPU4) (set 4)", - "m4cashat", "Cash Attack (Barcrest) (MPU4) (set 1)", - "m4cashat__0", "Cash Attack (Barcrest) (MPU4) (set 28)", - "m4cashat__1", "Cash Attack (Barcrest) (MPU4) (set 29)", - "m4cashat__2", "Cash Attack (Barcrest) (MPU4) (set 30)", - "m4cashat__3", "Cash Attack (Barcrest) (MPU4) (set 31)", - "m4cashat__4", "Cash Attack (Barcrest) (MPU4) (set 32)", - "m4cashat__5", "Cash Attack (Barcrest) (MPU4) (set 33)", - "m4cashat__6", "Cash Attack (Barcrest) (MPU4) (set 34)", - "m4cashat__7", "Cash Attack (Barcrest) (MPU4) (set 35)", - "m4cashat__8", "Cash Attack (Barcrest) (MPU4) (set 36)", - "m4cashat__9", "Cash Attack (Barcrest) (MPU4) (set 37)", - "m4cashat__a", "Cash Attack (Barcrest) (MPU4) (set 2)", - "m4cashat__aa", "Cash Attack (Barcrest) (MPU4) (set 38)", - "m4cashat__ab", "Cash Attack (Barcrest) (MPU4) (set 39)", - "m4cashat__ac", "Cash Attack (Barcrest) (MPU4) (set 40)", - "m4cashat__ad", "Cash Attack (Barcrest) (MPU4) (set 41)", - "m4cashat__ae", "Cash Attack (Barcrest) (MPU4) (set 42)", - "m4cashat__af", "Cash Attack (Barcrest) (MPU4) (set 43)", - "m4cashat__ag", "Cash Attack (Barcrest) (MPU4) (set 44)", - "m4cashat__ah", "Cash Attack (Barcrest) (MPU4) (set 45)", - "m4cashat__ai", "Cash Attack (Barcrest) (MPU4) (set 46)", - "m4cashat__aj", "Cash Attack (Barcrest) (MPU4) (set 47)", - "m4cashat__ak", "Cash Attack (Barcrest) (MPU4) (set 48)", - "m4cashat__al", "Cash Attack (Barcrest) (MPU4) (set 49)", - "m4cashat__am", "Cash Attack (Barcrest) (MPU4) (set 50)", - "m4cashat__an", "Cash Attack (Barcrest) (MPU4) (set 51)", - "m4cashat__ao", "Cash Attack (Barcrest) (MPU4) (set 52)", - "m4cashat__ap", "Cash Attack (Barcrest) (MPU4) (set 53)", - "m4cashat__aq", "Cash Attack (Barcrest) (MPU4) (set 54)", - "m4cashat__ar", "Cash Attack (Barcrest) (MPU4) (set 55)", - "m4cashat__b", "Cash Attack (Barcrest) (MPU4) (set 3)", - "m4cashat__c", "Cash Attack (Barcrest) (MPU4) (set 4)", - "m4cashat__d", "Cash Attack (Barcrest) (MPU4) (set 5)", - "m4cashat__e", "Cash Attack (Barcrest) (MPU4) (set 6)", - "m4cashat__f", "Cash Attack (Barcrest) (MPU4) (set 7)", - "m4cashat__g", "Cash Attack (Barcrest) (MPU4) (set 8)", - "m4cashat__h", "Cash Attack (Barcrest) (MPU4) (set 9)", - "m4cashat__i", "Cash Attack (Barcrest) (MPU4) (set 10)", - "m4cashat__j", "Cash Attack (Barcrest) (MPU4) (set 11)", - "m4cashat__k", "Cash Attack (Barcrest) (MPU4) (set 12)", - "m4cashat__l", "Cash Attack (Barcrest) (MPU4) (set 13)", - "m4cashat__m", "Cash Attack (Barcrest) (MPU4) (set 14)", - "m4cashat__n", "Cash Attack (Barcrest) (MPU4) (set 15)", - "m4cashat__o", "Cash Attack (Barcrest) (MPU4) (set 16)", - "m4cashat__p", "Cash Attack (Barcrest) (MPU4) (set 17)", - "m4cashat__q", "Cash Attack (Barcrest) (MPU4) (set 18)", - "m4cashat__r", "Cash Attack (Barcrest) (MPU4) (set 19)", - "m4cashat__s", "Cash Attack (Barcrest) (MPU4) (set 20)", - "m4cashat__t", "Cash Attack (Barcrest) (MPU4) (set 21)", - "m4cashat__u", "Cash Attack (Barcrest) (MPU4) (set 22)", - "m4cashat__v", "Cash Attack (Barcrest) (MPU4) (set 23)", - "m4cashat__w", "Cash Attack (Barcrest) (MPU4) (set 24)", - "m4cashat__x", "Cash Attack (Barcrest) (MPU4) (set 25)", - "m4cashat__y", "Cash Attack (Barcrest) (MPU4) (set 26)", - "m4cashat__z", "Cash Attack (Barcrest) (MPU4) (set 27)", - "m4cashcn", "Cash Connect (Barcrest) (MPU4) (CCO 3.2)", - "m4cashco", "Cash Counter (Barcrest) (MPU4) (C3 2.4)", - "m4cashcoa", "Cash Counter (Barcrest) (MPU4) (C3 1.8)", - "m4cashcob", "Cash Counter (Barcrest) (MPU4) (CO 0.5)", - "m4cashcoc", "Cash Counter (Barcrest) (MPU4) (C3 3.1)", - "m4cashcod", "Cash Connect (Barcrest) (MPU4) (C3 2.0)", - "m4cashln", "Cash Lines (Barcrest) (MPU4) (set 1)", - "m4cashln__0", "Cash Lines (Barcrest) (MPU4) (set 28)", - "m4cashln__1", "Cash Lines (Barcrest) (MPU4) (set 29)", - "m4cashln__2", "Cash Lines (Barcrest) (MPU4) (set 30)", - "m4cashln__3", "Cash Lines (Barcrest) (MPU4) (set 31)", - "m4cashln__4", "Cash Lines (Barcrest) (MPU4) (set 32)", - "m4cashln__5", "Cash Lines (Barcrest) (MPU4) (set 33)", - "m4cashln__6", "Cash Lines (Barcrest) (MPU4) (set 34)", - "m4cashln__7", "Cash Lines (Barcrest) (MPU4) (set 35)", - "m4cashln__8", "Cash Lines (Barcrest) (MPU4) (set 36)", - "m4cashln__9", "Cash Lines (Barcrest) (MPU4) (set 37)", - "m4cashln__a", "Cash Lines (Barcrest) (MPU4) (set 2)", - "m4cashln__a0", "Cash Lines (Barcrest) (MPU4) (set 64)", - "m4cashln__a1", "Cash Lines (Barcrest) (MPU4) (set 65)", - "m4cashln__a2", "Cash Lines (Barcrest) (MPU4) (set 66)", - "m4cashln__a3", "Cash Lines (Barcrest) (MPU4) (set 67)", - "m4cashln__a4", "Cash Lines (Barcrest) (MPU4) (set 68)", - "m4cashln__a5", "Cash Lines (Barcrest) (MPU4) (set 69)", - "m4cashln__a6", "Cash Lines (Barcrest) (MPU4) (set 70)", - "m4cashln__a7", "Cash Lines (Barcrest) (MPU4) (set 71)", - "m4cashln__a8", "Cash Lines (Barcrest) (MPU4) (set 72)", - "m4cashln__a9", "Cash Lines (Barcrest) (MPU4) (set 73)", - "m4cashln__aa", "Cash Lines (Barcrest) (MPU4) (set 38)", - "m4cashln__ab", "Cash Lines (Barcrest) (MPU4) (set 39)", - "m4cashln__ac", "Cash Lines (Barcrest) (MPU4) (set 40)", - "m4cashln__ad", "Cash Lines (Barcrest) (MPU4) (set 41)", - "m4cashln__ae", "Cash Lines (Barcrest) (MPU4) (set 42)", - "m4cashln__af", "Cash Lines (Barcrest) (MPU4) (set 43)", - "m4cashln__ag", "Cash Lines (Barcrest) (MPU4) (set 44)", - "m4cashln__ah", "Cash Lines (Barcrest) (MPU4) (set 45)", - "m4cashln__ai", "Cash Lines (Barcrest) (MPU4) (set 46)", - "m4cashln__aj", "Cash Lines (Barcrest) (MPU4) (set 47)", - "m4cashln__ak", "Cash Lines (Barcrest) (MPU4) (set 48)", - "m4cashln__al", "Cash Lines (Barcrest) (MPU4) (set 49)", - "m4cashln__am", "Cash Lines (Barcrest) (MPU4) (set 50)", - "m4cashln__an", "Cash Lines (Barcrest) (MPU4) (set 51)", - "m4cashln__ao", "Cash Lines (Barcrest) (MPU4) (set 52)", - "m4cashln__ap", "Cash Lines (Barcrest) (MPU4) (set 53)", - "m4cashln__aq", "Cash Lines (Barcrest) (MPU4) (set 54)", - "m4cashln__ar", "Cash Lines (Barcrest) (MPU4) (set 55)", - "m4cashln__as", "Cash Lines (Barcrest) (MPU4) (set 56)", - "m4cashln__at", "Cash Lines (Barcrest) (MPU4) (set 57)", - "m4cashln__au", "Cash Lines (Barcrest) (MPU4) (set 58)", - "m4cashln__av", "Cash Lines (Barcrest) (MPU4) (set 59)", - "m4cashln__aw", "Cash Lines (Barcrest) (MPU4) (set 60)", - "m4cashln__ax", "Cash Lines (Barcrest) (MPU4) (set 61)", - "m4cashln__ay", "Cash Lines (Barcrest) (MPU4) (set 62)", - "m4cashln__az", "Cash Lines (Barcrest) (MPU4) (set 63)", - "m4cashln__b", "Cash Lines (Barcrest) (MPU4) (set 3)", - "m4cashln__ba", "Cash Lines (Barcrest) (MPU4) (set 74)", - "m4cashln__bb", "Cash Lines (Barcrest) (MPU4) (set 75)", - "m4cashln__bc", "Cash Lines (Barcrest) (MPU4) (set 76)", - "m4cashln__bd", "Cash Lines (Barcrest) (MPU4) (set 77)", - "m4cashln__be", "Cash Lines (Barcrest) (MPU4) (set 78)", - "m4cashln__bf", "Cash Lines (Barcrest) (MPU4) (set 79)", - "m4cashln__bg", "Cash Lines (Barcrest) (MPU4) (set 80)", - "m4cashln__bh", "Cash Lines (Barcrest) (MPU4) (set 81)", - "m4cashln__bi", "Cash Lines (Barcrest) (MPU4) (set 82)", - "m4cashln__bj", "Cash Lines (Barcrest) (MPU4) (set 83)", - "m4cashln__c", "Cash Lines (Barcrest) (MPU4) (set 4)", - "m4cashln__d", "Cash Lines (Barcrest) (MPU4) (set 5)", - "m4cashln__e", "Cash Lines (Barcrest) (MPU4) (set 6)", - "m4cashln__f", "Cash Lines (Barcrest) (MPU4) (set 7)", - "m4cashln__g", "Cash Lines (Barcrest) (MPU4) (set 8)", - "m4cashln__h", "Cash Lines (Barcrest) (MPU4) (set 9)", - "m4cashln__i", "Cash Lines (Barcrest) (MPU4) (set 10)", - "m4cashln__j", "Cash Lines (Barcrest) (MPU4) (set 11)", - "m4cashln__k", "Cash Lines (Barcrest) (MPU4) (set 12)", - "m4cashln__l", "Cash Lines (Barcrest) (MPU4) (set 13)", - "m4cashln__m", "Cash Lines (Barcrest) (MPU4) (set 14)", - "m4cashln__n", "Cash Lines (Barcrest) (MPU4) (set 15)", - "m4cashln__o", "Cash Lines (Barcrest) (MPU4) (set 16)", - "m4cashln__p", "Cash Lines (Barcrest) (MPU4) (set 17)", - "m4cashln__q", "Cash Lines (Barcrest) (MPU4) (set 18)", - "m4cashln__r", "Cash Lines (Barcrest) (MPU4) (set 19)", - "m4cashln__s", "Cash Lines (Barcrest) (MPU4) (set 20)", - "m4cashln__t", "Cash Lines (Barcrest) (MPU4) (set 21)", - "m4cashln__u", "Cash Lines (Barcrest) (MPU4) (set 22)", - "m4cashln__v", "Cash Lines (Barcrest) (MPU4) (set 23)", - "m4cashln__w", "Cash Lines (Barcrest) (MPU4) (set 24)", - "m4cashln__x", "Cash Lines (Barcrest) (MPU4) (set 25)", - "m4cashln__y", "Cash Lines (Barcrest) (MPU4) (set 26)", - "m4cashln__z", "Cash Lines (Barcrest) (MPU4) (set 27)", - "m4cashmn", "Cash Machine (Barcrest) (MPU4) (set 1)", - "m4cashmn__0", "Cash Machine (Barcrest) (MPU4) (set 28)", - "m4cashmn__1", "Cash Machine (Barcrest) (MPU4) (set 29)", - "m4cashmn__2", "Cash Machine (Barcrest) (MPU4) (set 30)", - "m4cashmn__3", "Cash Machine (Barcrest) (MPU4) (set 31)", - "m4cashmn__4", "Cash Machine (Barcrest) (MPU4) (set 32)", - "m4cashmn__5", "Cash Machine (Barcrest) (MPU4) (set 33)", - "m4cashmn__6", "Cash Machine (Barcrest) (MPU4) (set 34)", - "m4cashmn__7", "Cash Machine (Barcrest) (MPU4) (set 35)", - "m4cashmn__8", "Cash Machine (Barcrest) (MPU4) (set 36)", - "m4cashmn__9", "Cash Machine (Barcrest) (MPU4) (set 37)", - "m4cashmn__a", "Cash Machine (Barcrest) (MPU4) (set 2)", - "m4cashmn__aa", "Cash Machine (Barcrest) (MPU4) (set 38)", - "m4cashmn__ab", "Cash Machine (Barcrest) (MPU4) (set 39)", - "m4cashmn__ac", "Cash Machine (Barcrest) (MPU4) (set 40)", - "m4cashmn__ad", "Cash Machine (Barcrest) (MPU4) (set 41)", - "m4cashmn__ae", "Cash Machine (Barcrest) (MPU4) (set 42)", - "m4cashmn__af", "Cash Machine (Barcrest) (MPU4) (set 43)", - "m4cashmn__ag", "Cash Machine (Barcrest) (MPU4) (set 44)", - "m4cashmn__ah", "Cash Machine (Barcrest) (MPU4) (set 45)", - "m4cashmn__ai", "Cash Machine (Barcrest) (MPU4) (set 46)", - "m4cashmn__aj", "Cash Machine (Barcrest) (MPU4) (set 47)", - "m4cashmn__ak", "Cash Machine (Barcrest) (MPU4) (set 48)", - "m4cashmn__al", "Cash Machine (Barcrest) (MPU4) (set 49)", - "m4cashmn__b", "Cash Machine (Barcrest) (MPU4) (set 3)", - "m4cashmn__c", "Cash Machine (Barcrest) (MPU4) (set 4)", - "m4cashmn__d", "Cash Machine (Barcrest) (MPU4) (set 5)", - "m4cashmn__e", "Cash Machine (Barcrest) (MPU4) (set 6)", - "m4cashmn__f", "Cash Machine (Barcrest) (MPU4) (set 7)", - "m4cashmn__g", "Cash Machine (Barcrest) (MPU4) (set 8)", - "m4cashmn__h", "Cash Machine (Barcrest) (MPU4) (set 9)", - "m4cashmn__i", "Cash Machine (Barcrest) (MPU4) (set 10)", - "m4cashmn__j", "Cash Machine (Barcrest) (MPU4) (set 11)", - "m4cashmn__k", "Cash Machine (Barcrest) (MPU4) (set 12)", - "m4cashmn__l", "Cash Machine (Barcrest) (MPU4) (set 13)", - "m4cashmn__m", "Cash Machine (Barcrest) (MPU4) (set 14)", - "m4cashmn__n", "Cash Machine (Barcrest) (MPU4) (set 15)", - "m4cashmn__o", "Cash Machine (Barcrest) (MPU4) (set 16)", - "m4cashmn__p", "Cash Machine (Barcrest) (MPU4) (set 17)", - "m4cashmn__q", "Cash Machine (Barcrest) (MPU4) (set 18)", - "m4cashmn__r", "Cash Machine (Barcrest) (MPU4) (set 19)", - "m4cashmn__s", "Cash Machine (Barcrest) (MPU4) (set 20)", - "m4cashmn__t", "Cash Machine (Barcrest) (MPU4) (set 21)", - "m4cashmn__u", "Cash Machine (Barcrest) (MPU4) (set 22)", - "m4cashmn__v", "Cash Machine (Barcrest) (MPU4) (set 23)", - "m4cashmn__w", "Cash Machine (Barcrest) (MPU4) (set 24)", - "m4cashmn__x", "Cash Machine (Barcrest) (MPU4) (set 25)", - "m4cashmn__y", "Cash Machine (Barcrest) (MPU4) (set 26)", - "m4cashmn__z", "Cash Machine (Barcrest) (MPU4) (set 27)", - "m4cashmn__za", "Cash Machine (Barcrest) (MPU4) (CMH 0.6Y, hack?)", - "m4cashmn__zb", "Cash Machine (Barcrest) (MPU4) (CMA 0.7C, hack?)", - "m4cashmx", "Cash Matrix (Barcrest) (MPU4) (CM 1.7, set 1)", - "m4cashmxa", "Cash Matrix (Barcrest) (MPU4) (CM 1.7, set 2)", - "m4cashzn", "Cash Zone (Barcrest) (MPU4) (CAZ 1.2)", - "m4cashzna", "Cash Zone (Barcrest) (MPU4) (CAZ 1.5)", - "m4casmul", "Casino Multiplay (Barcrest) (MPU4)", - "m4casot", "Old Timer (Barcrest) (Dutch, alt 'Black and White' sound roms) (DOT1.1)", - "m4cbing", "Cherry Bingo (Redpoint Systems) (MPU4)", - "m4ccc", "Criss Cross Crazy (Coinworld) (MPU4?)", - "m4cclimb", "Crazy Climber (Crystal) (MPU4) (set 1)", - "m4cclimba", "Crazy Climber (Crystal) (MPU4) (set 2)", - "m4ccop", "Cash Cops (MPU4?) (set 1)", - "m4ccopa", "Cash Cops (MPU4?) (set 2)", - "m4ccopb", "Cash Cops (MPU4?) (set 3)", - "m4celclb", "Celebration Club (Barcrest) (MPU4)", - "m4centpt", "Centrepoint (Barcrest) (v1.3) (MPU4)", - "m4centpta", "Centrepoint (Barcrest) (v1.5) (MPU4)", - "m4ceptr", "Ceptor (Barcrest) (Dutch) (MPU4) (DCE 1.0)", - "m4cfinln", "Cup Final (Nova) (MPU4) (set 1)", - "m4cfinln__a", "Cup Final (Nova) (MPU4) (set 2)", - "m4ch30", "unknown MPU4 'CH3 0.1' (Barcrest) (MPU4)", - "m4chacec", "Chase The Ace [Cards] (Empire) (MPU4, set 1)", - "m4chaceca", "Chase The Ace [Cards] (Empire) (MPU4, set 2)", - "m4chacef", "Chase The Ace [Fruits] (Empire) (MPU4, set 1)", - "m4chacefa", "Chase The Ace [Fruits] (Empire) (MPU4, set 2)", - "m4chacefb", "Chase The Ace [Fruits] (Empire) (MPU4, set 3)", - "m4chacefc", "Chase The Ace [Fruits] (Empire) (MPU4, set 4)", - "m4chasei", "Chase Invaders (Barcrest) (MPU4) (set 1)", - "m4chaseia", "Chase Invaders (Barcrest) (MPU4) (set 2)", - "m4chaseib", "Chase Invaders (Barcrest) (MPU4) (set 3)", - "m4chaseic", "Chase Invaders (Barcrest) (MPU4) (set 4)", - "m4chaseid", "Chase Invaders (Barcrest) (MPU4) (set 5)", - "m4chaseie", "Chase Invaders (Barcrest) (MPU4) (set 6)", - "m4chaseif", "Chase Invaders (Barcrest) (MPU4) (set 7)", - "m4cheryo", "Cherryo (Barcrest) (DCH, Dutch) (MPU4)", - "m4clab", "Cash Lab (Qps) (MPU4) (set 1)", - "m4clab__a", "Cash Lab (Qps) (MPU4) (set 2)", - "m4clab__b", "Cash Lab (Qps) (MPU4) (set 3)", - "m4clab__c", "Cash Lab (Qps) (MPU4) (set 4)", - "m4clab__d", "Cash Lab (Qps) (MPU4) (set 5)", - "m4clab__e", "Cash Lab (Qps) (MPU4) (set 6)", - "m4clab__f", "Cash Lab (Qps) (MPU4) (set 7)", - "m4clab__g", "Cash Lab (Qps) (MPU4) (set 8)", - "m4clab__h", "Cash Lab (Qps) (MPU4) (set 9)", - "m4clab__i", "Cash Lab (Qps) (MPU4) (set 10)", - "m4clab__j", "Cash Lab (Qps) (MPU4) (set 11)", - "m4class", "First Class (Barcrest) [DFC, Dutch] (MPU4) (set 1)", - "m4classa", "First Class (Barcrest) [DFC, Dutch] (MPU4) (set 2)", - "m4clbclm", "Club Climber (Barcrest) (MPU4, C1C 3.3)", - "m4clbclma", "Club Climber (Barcrest) (MPU4, CC 4.5)", - "m4clbcls", "Club Classic (Barcrest) (MPU4)", - "m4clbcnt", "Club Connect (Barcrest) (MPU4) (set 1)", - "m4clbcnta", "Club Connect (Barcrest) (MPU4) (set 2)", - "m4clbcntb", "Club Connect (Barcrest) (MPU4) (set 3)", - "m4clbcntc", "Club Connect (Barcrest) (MPU4) (set 4)", - "m4clbcntd", "Club Connect (Barcrest) (MPU4) (set 5)", - "m4clbdbl", "Club Double (Barcrest) (MPU4) (CD 1.6)", - "m4clbrpl", "Club Replay (PCP) (MPU4) (01)", - "m4clbshf", "Club Shuffle (Barcrest) (MPU4)", - "m4clbveg", "Club Vegas (Barcrest) (MPU4) (set 1)", - "m4clbvega", "Club Vegas (Barcrest) (MPU4) (set 2)", - "m4clbvegb", "Club Vegas (Barcrest) (MPU4) (set 3)", - "m4clbvegc", "Club Vegas (Barcrest) (MPU4) (set 4)", - "m4clbx", "Club X (Barcrest) (MPU4) (set 1)", - "m4clbxa", "Club X (Barcrest) (MPU4) (set 2)", - "m4clbxb", "Club X (Barcrest) (MPU4) (set 3)", - "m4cld02", "unknown MPU4 'CLD 0.2C' (MPU4?)", - "m4click", "Clickity Click (Barcrest) (MPU4 w/ Plasma DMD)", - "m4clr", "MPU4 Meter Clear ROM", - "m4cmont", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 1)", - "m4cmont_1", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 2)", - "m4cmont_10", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 11)", - "m4cmont_11", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 12)", - "m4cmont_12", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 13)", - "m4cmont_13", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 14)", - "m4cmont_2", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 3)", - "m4cmont_3", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 4)", - "m4cmont_4", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 5)", - "m4cmont_5", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 6)", - "m4cmont_6", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 7)", - "m4cmont_7", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 8)", - "m4cmont_8", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 9)", - "m4cmont_9", "Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 10)", - "m4cmont_gt1", "Casino Monte Carlo (Avantime?) (MPU4) (GTR, set 1)", - "m4cmont_gt2", "Casino Monte Carlo (Avantime?) (MPU4) (GTR, set 2)", - "m4cmont_gt3", "Casino Monte Carlo (Avantime?) (MPU4) (GTR, set 3)", - "m4cmont_l1", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 1)", - "m4cmont_l10", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 10)", - "m4cmont_l11", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 11)", - "m4cmont_l12", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 12)", - "m4cmont_l13", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 13)", - "m4cmont_l14", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 14)", - "m4cmont_l15", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 15)", - "m4cmont_l16", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 16)", - "m4cmont_l2", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 2)", - "m4cmont_l3", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 3)", - "m4cmont_l4", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 4)", - "m4cmont_l5", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 5)", - "m4cmont_l6", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 6)", - "m4cmont_l7", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 7)", - "m4cmont_l8", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 8)", - "m4cmont_l9", "Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 9)", - "m4cmont_r1", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 1)", - "m4cmont_r2", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 2)", - "m4cmont_r3", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 3)", - "m4cmont_r4", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 4)", - "m4cmont_r5", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 5)", - "m4cmont_r6", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 6)", - "m4cmont_r7", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 7)", - "m4cmont_r8", "Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 8)", - "m4cmont_u1", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 1)", - "m4cmont_u10", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 10)", - "m4cmont_u11", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 11)", - "m4cmont_u12", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 12)", - "m4cmont_u13", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 13)", - "m4cmont_u14", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 14)", - "m4cmont_u15", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 15)", - "m4cmont_u16", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 16)", - "m4cmont_u17", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 17)", - "m4cmont_u18", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 18)", - "m4cmont_u19", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 19)", - "m4cmont_u2", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 2)", - "m4cmont_u20", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 20)", - "m4cmont_u21", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 21)", - "m4cmont_u22", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 22)", - "m4cmont_u23", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 23)", - "m4cmont_u24", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 24)", - "m4cmont_u25", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 25)", - "m4cmont_u26", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 26)", - "m4cmont_u27", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 27)", - "m4cmont_u3", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 3)", - "m4cmont_u4", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 4)", - "m4cmont_u5", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 5)", - "m4cmont_u6", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 6)", - "m4cmont_u7", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 7)", - "m4cmont_u8", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 8)", - "m4cmont_u9", "Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 9)", - "m4cojok", "Carry On Joker (Barcrest) (MPU4) (set 1)", - "m4cojok__a", "Carry On Joker (Barcrest) (MPU4) (set 2)", - "m4cojok__b", "Carry On Joker (Barcrest) (MPU4) (set 3)", - "m4cojok__c", "Carry On Joker (Barcrest) (MPU4) (set 4)", - "m4cojok__d", "Carry On Joker (Barcrest) (MPU4) (set 5)", - "m4cojok__e", "Carry On Joker (Barcrest) (MPU4) (set 6)", - "m4cojok__f", "Carry On Joker (Barcrest) (MPU4) (set 7)", - "m4coloss", "Colossus (Mdm) (MPU4, set 1)", - "m4colossa", "Colossus (Mdm) (MPU4, set 2)", - "m4colossb", "Colossus (Mdm) (MPU4, set 3)", - "m4colossc", "Colossus (Mdm) (MPU4, set 4)", - "m4colossd", "Colossus (Mdm) (MPU4, set 5)", - "m4colosse", "Colossus (Mdm) (MPU4, set 6)", - "m4colossf", "Colossus (Mdm) (MPU4, set 7)", - "m4colossg", "Colossus (Mdm) (MPU4, set 8)", - "m4coney", "Coney Island (Qps) (MPU4)", - "m4conn4", "Connect 4", - "m4copcsh", "Coppa Cash (Barcrest) (MPU4) (FC 2.0)", - "m4coscas", "Cosmic Casino (Barcrest) (MPU4) (set 1)", - "m4coscas__a", "Cosmic Casino (Barcrest) (MPU4) (set 2)", - "m4coscas__b", "Cosmic Casino (Barcrest) (MPU4) (set 3)", - "m4coscas__c", "Cosmic Casino (Barcrest) (MPU4) (set 4)", - "m4coscas__d", "Cosmic Casino (Barcrest) (MPU4) (set 5)", - "m4coscas__e", "Cosmic Casino (Barcrest) (MPU4) (set 6)", - "m4coscas__f", "Cosmic Casino (Barcrest) (MPU4) (set 7)", - "m4coscas__g", "Cosmic Casino (Barcrest) (MPU4) (set 8)", - "m4coscas__h", "Cosmic Casino (Barcrest) (MPU4) (set 9)", - "m4coscas__i", "Cosmic Casino (Barcrest) (MPU4) (set 10)", - "m4coscas__j", "Cosmic Casino (Barcrest) (MPU4) (set 11)", - "m4coscas__k", "Cosmic Casino (Barcrest) (MPU4) (set 12)", - "m4coscas__l", "Cosmic Casino (Barcrest) (MPU4) (set 13)", - "m4coscas__m", "Cosmic Casino (Barcrest) (MPU4) (set 14)", - "m4coscas__n", "Cosmic Casino (Barcrest) (MPU4) (set 15)", - "m4coscas__o", "Cosmic Casino (Barcrest) (MPU4) (set 16)", - "m4coscas__p", "Cosmic Casino (Barcrest) (MPU4) (set 17)", - "m4coscas__q", "Cosmic Casino (Barcrest) (MPU4) (set 18)", - "m4coscas__r", "Cosmic Casino (Barcrest) (MPU4) (set 19)", - "m4coscas__s", "Cosmic Casino (Barcrest) (MPU4) (set 20)", - "m4coscas__t", "Cosmic Casino (Barcrest) (MPU4) (set 21)", - "m4coscas__u", "Cosmic Casino (Barcrest) (MPU4) (set 22)", - "m4coscas__v", "Cosmic Casino (Barcrest) (MPU4) (set 23)", - "m4cpfinl", "Cup Final (Bwb) (MPU4) (set 1)", - "m4cpfinl__a", "Cup Final (Bwb) (MPU4) (set 2)", - "m4cpfinl__b", "Cup Final (Bwb) (MPU4) (set 3)", - "m4cpfinl__c", "Cup Final (Bwb) (MPU4) (set 4)", - "m4cpfinl__d", "Cup Final (Bwb) (MPU4) (set 5)", - "m4cpfinl__e", "Cup Final (Bwb) (MPU4) (set 6)", - "m4cpfinl__f", "Cup Final (Bwb) (MPU4) (set 7)", - "m4cpfinl__g", "Cup Final (Bwb) (MPU4) (set 8)", - "m4cpfinl__h", "Cup Final (Bwb) (MPU4) (set 9)", - "m4cpfinl__i", "Cup Final (Bwb) (MPU4) (set 10)", - "m4cpfinl__j", "Cup Final (Bwb) (MPU4) (set 11)", - "m4cpfinl__k", "Cup Final (Bwb) (MPU4) (set 12)", - "m4cpycat", "Copy Cat (Barcrest) (MPU4) (set 1)", - "m4cpycat__0", "Copy Cat (Barcrest) (MPU4) (set 28)", - "m4cpycat__1", "Copy Cat (Barcrest) (MPU4) (set 29)", - "m4cpycat__2", "Copy Cat (Barcrest) (MPU4) (set 30)", - "m4cpycat__3", "Copy Cat (Barcrest) (MPU4) (set 31)", - "m4cpycat__4", "Copy Cat (Barcrest) (MPU4) (set 32)", - "m4cpycat__5", "Copy Cat (Barcrest) (MPU4) (set 33)", - "m4cpycat__6", "Copy Cat (Barcrest) (MPU4) (set 34)", - "m4cpycat__7", "Copy Cat (Barcrest) (MPU4) (set 35)", - "m4cpycat__8", "Copy Cat (Barcrest) (MPU4) (set 36)", - "m4cpycat__a", "Copy Cat (Barcrest) (MPU4) (set 2)", - "m4cpycat__b", "Copy Cat (Barcrest) (MPU4) (set 3)", - "m4cpycat__c", "Copy Cat (Barcrest) (MPU4) (set 4)", - "m4cpycat__d", "Copy Cat (Barcrest) (MPU4) (set 5)", - "m4cpycat__e", "Copy Cat (Barcrest) (MPU4) (set 6)", - "m4cpycat__f", "Copy Cat (Barcrest) (MPU4) (set 7)", - "m4cpycat__g", "Copy Cat (Barcrest) (MPU4) (set 8)", - "m4cpycat__h", "Copy Cat (Barcrest) (MPU4) (set 9)", - "m4cpycat__i", "Copy Cat (Barcrest) (MPU4) (set 10)", - "m4cpycat__j", "Copy Cat (Barcrest) (MPU4) (set 11)", - "m4cpycat__k", "Copy Cat (Barcrest) (MPU4) (set 12)", - "m4cpycat__l", "Copy Cat (Barcrest) (MPU4) (set 13)", - "m4cpycat__m", "Copy Cat (Barcrest) (MPU4) (set 14)", - "m4cpycat__n", "Copy Cat (Barcrest) (MPU4) (set 15)", - "m4cpycat__o", "Copy Cat (Barcrest) (MPU4) (set 16)", - "m4cpycat__p", "Copy Cat (Barcrest) (MPU4) (set 17)", - "m4cpycat__q", "Copy Cat (Barcrest) (MPU4) (set 18)", - "m4cpycat__r", "Copy Cat (Barcrest) (MPU4) (set 19)", - "m4cpycat__s", "Copy Cat (Barcrest) (MPU4) (set 20)", - "m4cpycat__t", "Copy Cat (Barcrest) (MPU4) (set 21)", - "m4cpycat__u", "Copy Cat (Barcrest) (MPU4) (set 22)", - "m4cpycat__v", "Copy Cat (Barcrest) (MPU4) (set 23)", - "m4cpycat__w", "Copy Cat (Barcrest) (MPU4) (set 24)", - "m4cpycat__x", "Copy Cat (Barcrest) (MPU4) (set 25)", - "m4cpycat__y", "Copy Cat (Barcrest) (MPU4) (set 26)", - "m4cpycat__z", "Copy Cat (Barcrest) (MPU4) (set 27)", - "m4crdome", "Crystal Dome (Barcrest) (MPU4) (set 1)", - "m4crdome__a", "Crystal Dome (Barcrest) (MPU4) (set 2)", - "m4crdome__b", "Crystal Dome (Barcrest) (MPU4) (set 3)", - "m4crdome__c", "Crystal Dome (Barcrest) (MPU4) (set 4)", - "m4crdome__d", "Crystal Dome (Barcrest) (MPU4) (set 5)", - "m4crdome__e", "Crystal Dome (Barcrest) (MPU4) (set 6)", - "m4crdome__f", "Crystal Dome (Barcrest) (MPU4) (set 7)", - "m4crdome__g", "Crystal Dome (Barcrest) (MPU4) (set 8)", - "m4crdome__h", "Crystal Dome (Barcrest) (MPU4) (set 9)", - "m4crdome__i", "Crystal Dome (Barcrest) (MPU4) (set 10)", - "m4crdome__j", "Crystal Dome (Barcrest) (MPU4) (set 11)", - "m4crdome__k", "Crystal Dome (Barcrest) (MPU4) (set 12)", - "m4crdome__l", "Crystal Dome (Barcrest) (MPU4) (set 13)", - "m4crdome__m", "Crystal Dome (Barcrest) (MPU4) (set 14)", - "m4crdome__n", "Crystal Dome (Barcrest) (MPU4) (set 15)", - "m4crfire", "Crossfire (Empire) (MPU4, set 1)", - "m4crfirea", "Crossfire (Empire) (MPU4, set 2)", - "m4crjwl", "Crown Jewels Club (Barcrest) (MPU4) (set 1)", - "m4crjwl2", "Crown Jewels Mk II Club (Barcrest) (MPU4) (set 1)", - "m4crjwl2a", "Crown Jewels Mk II Club (Barcrest) (MPU4) (set 2)", - "m4crjwl2b", "Crown Jewels Mk II Club (Barcrest) (MPU4) (set 3)", - "m4crjwla", "Crown Jewels Club (Barcrest) (MPU4) (set 2)", - "m4crjwlb", "Crown Jewels Club (Barcrest) (MPU4) (set 3)", - "m4crjwlc", "Crown Jewels Club (Barcrest) (MPU4) (set 4)", - "m4crkpot", "Crackpot 100 Club (Barcrest) (MPU4) (set 1, C1P 1.2)", - "m4crkpota", "Crackpot 100 Club (Barcrest) (MPU4) (set 2, CP 3.8)", - "m4crkpotb", "Crackpot 100 Club (Barcrest) (MPU4) (set 3, CP 3.1)", - "m4crmaze", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0)", - "m4crmaze__c", "Crystal Maze (Barcrest) (MPU4) (CRM 2.3)", - "m4crmaze__d", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0AD)", - "m4crmaze__e", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0B)", - "m4crmaze__f", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0BD)", - "m4crmaze__g", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0C)", - "m4crmaze__h", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0D)", - "m4crmaze__i", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0KD)", - "m4crmaze__j", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0YD)", - "m4crmaze__k", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0K)", - "m4crmaze__l", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0Y)", - "m4crmaze__m", "Crystal Maze (Barcrest) (MPU4) (CRM 3.0, hack?)", - "m4crmaze__n", "Crystal Maze (Bwb / Barcrest) (MPU4) (CRC 0.7, hack?)", - "m4crmaze__o", "Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 1.0, hack?)", - "m4crmaze__p", "Crystal Maze (Bwb / Barcrest) (MPU4) (CRC 1.3, hack?)", - "m4crmaze__q", "Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 2.0, hack?, set 1)", - "m4crmaze__r", "Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 2.0, hack?, set 2)", - "m4crmaze__s", "Crystal Maze (Bwb / Barcrest) (MPU4) (CR8 1.2, hack?)", - "m4crzbn", "Crazy Bingo (Union) (MPU4)", - "m4crzcap", "Crazy Capers (Empire) (MPU4, set 1)", - "m4crzcapa", "Crazy Capers (Empire) (MPU4, set 2)", - "m4crzcapb", "Crazy Capers (Empire) (MPU4, set 3)", - "m4crzcapc", "Crazy Capers (Empire) (MPU4, set 4)", - "m4crzcav", "Crazy Cavern (Nova) (MPU4)", - "m4crzcl", "Crazy Climber Club (Crystal) (MPU4) (set 1)", - "m4crzcla", "Crazy Climber Club (Crystal) (MPU4) (set 2)", - "m4crzclb", "Crazy Climber Club (Crystal) (MPU4) (set 3)", - "m4crzclc", "Crazy Climber Club (Crystal) (MPU4) (set 4)", - "m4crzcld", "Crazy Climber Club (Crystal) (MPU4) (set 5)", - "m4crzcsn", "Crazy Casino (Nova) (MPU4)", - "m4crzjk", "Crazy Jokers (Nova?) (MPU4)", - "m4crzjwl", "Crown Jewels (Barcrest) (German) (MPU4) (set 1)", - "m4crzjwla", "Crown Jewels (Barcrest) (German) (MPU4) (set 2)", - "m4crzjwlb", "Crown Jewels (Barcrest) (German) (MPU4) (set 3)", - "m4crzjwlc", "Crown Jewels (Barcrest) (German) (MPU4) (set 4)", - "m4crzjwld", "Crown Jewels (Barcrest) (German) (MPU4) (set 5)", - "m4crzjwle", "Crown Jewels (Barcrest) (German) (MPU4) (set 6)", - "m4crzjwlf", "Crown Jewels (Barcrest) (German) (MPU4) (set 7)", - "m4crzjwlg", "Crown Jewels (Barcrest) (German) (MPU4) (set 8)", - "m4crzjwlh", "Crown Jewels (Barcrest) (German) (MPU4) (set 9)", - "m4cshenc", "Cash Encounters (Barcrest) (MPU4) (set 1)", - "m4cshenc__a", "Cash Encounters (Barcrest) (MPU4) (set 2)", - "m4cshenc__b", "Cash Encounters (Barcrest) (MPU4) (set 3)", - "m4cshenc__c", "Cash Encounters (Barcrest) (MPU4) (set 4)", - "m4cshenc__d", "Cash Encounters (Barcrest) (MPU4) (set 5)", - "m4cshino", "Cashino Deluxe (Pcp) (MPU4)", - "m4csoc", "Championship Soccer (Bwb) (MPU4) (set 1)", - "m4csoc__a", "Championship Soccer (Bwb) (MPU4) (set 2)", - "m4csoc__b", "Championship Soccer (Bwb) (MPU4) (set 3)", - "m4csoc__c", "Championship Soccer (Bwb) (MPU4) (set 4)", - "m4csoc__d", "Championship Soccer (Bwb) (MPU4) (set 5)", - "m4csoc__e", "Championship Soccer (Bwb) (MPU4) (set 6)", - "m4csoc__f", "Championship Soccer (Bwb) (MPU4) (set 7)", - "m4csoc__g", "Championship Soccer (Bwb) (MPU4) (set 8)", - "m4csoc__h", "Championship Soccer (Bwb) (MPU4) (set 9)", - "m4csoc__i", "Championship Soccer (Bwb) (MPU4) (set 10)", - "m4csoc__j", "Championship Soccer (Bwb) (MPU4) (set 11)", - "m4cstrik", "Cash Strike (Empire) (MPU4, set 1)", - "m4cstrika", "Cash Strike (Empire) (MPU4, set 2)", - "m4cstrikb", "Cash Strike (Empire) (MPU4, set 3)", - "m4cstrikc", "Cash Strike (Empire) (MPU4, set 4)", - "m4ctn", "Tuppenny Nudger Classic (Mdm?) (MPU4)", - "m4cwalk", "Cake Walk (Union) (MPU4)", - "m4czne", "Cash Zone (Bwb) (MPU4)", - "m4danced", "Dancing Diamonds (Bwb) (MPU4) (set 1)", - "m4danced__a", "Dancing Diamonds (Bwb) (MPU4) (set 2)", - "m4danced__b", "Dancing Diamonds (Bwb) (MPU4) (set 3)", - "m4danced__c", "Dancing Diamonds (Bwb) (MPU4) (set 4)", - "m4danced__d", "Dancing Diamonds (Bwb) (MPU4) (set 5)", - "m4danced__e", "Dancing Diamonds (Bwb) (MPU4) (set 6)", - "m4danced__f", "Dancing Diamonds (Bwb) (MPU4) (set 7)", - "m4danced__g", "Dancing Diamonds (Bwb) (MPU4) (set 8)", - "m4danced__h", "Dancing Diamonds (Bwb) (MPU4) (set 9)", - "m4danced__i", "Dancing Diamonds (Bwb) (MPU4) (set 10)", - "m4danced__j", "Dancing Diamonds (Bwb) (MPU4) (set 11)", - "m4danced__k", "Dancing Diamonds (Bwb) (MPU4) (set 12)", - "m4danced__l", "Dancing Diamonds (Bwb) (MPU4) (set 13)", - "m4danced__m", "Dancing Diamonds (Bwb) (MPU4) (set 14)", - "m4danced__n", "Dancing Diamonds (Bwb) (MPU4) (set 15)", - "m4danced__o", "Dancing Diamonds (Bwb) (MPU4) (set 16)", - "m4danced__p", "Dancing Diamonds (Bwb) (MPU4) (set 17)", - "m4danced__q", "Dancing Diamonds (Bwb) (MPU4) (set 18)", - "m4danced__r", "Dancing Diamonds (Bwb) (MPU4) (set 19)", - "m4danced__s", "Dancing Diamonds (Bwb) (MPU4) (set 20)", - "m4danced__t", "Dancing Diamonds (Bwb) (MPU4) (set 21)", - "m4danced__u", "Dancing Diamonds (Bwb) (MPU4) (set 22)", - "m4danced__v", "Dancing Diamonds (Bwb) (MPU4) (set 23)", - "m4danced__w", "Dancing Diamonds (Bwb) (MPU4) (set 24)", - "m4daytn", "Daytona (Bwb) (MPU4) (set 1)", - "m4daytn__a", "Daytona (Bwb) (MPU4) (set 2)", - "m4daytn__b", "Daytona (Bwb) (MPU4) (set 3)", - "m4daytn__c", "Daytona (Bwb) (MPU4) (set 4)", - "m4daytn__d", "Daytona (Bwb) (MPU4) (set 5)", - "m4daytn__e", "Daytona (Bwb) (MPU4) (set 6)", - "m4daytn__f", "Daytona (Bwb) (MPU4) (set 7)", - "m4daytn__g", "Daytona (Bwb) (MPU4) (set 8)", - "m4daytn__h", "Daytona (Bwb) (MPU4) (set 9)", - "m4daytn__i", "Daytona (Bwb) (MPU4) (set 10)", - "m4daytn__j", "Daytona (Bwb) (MPU4) (set 11)", - "m4daytn__k", "Daytona (Bwb) (MPU4) (set 12)", - "m4daytn__l", "Daytona (Bwb) (MPU4) (set 13)", - "m4daytn__m", "Daytona (Bwb) (MPU4) (set 14)", - "m4daytn__n", "Daytona (Bwb) (MPU4) (set 15)", - "m4dbl9", "Double 9's (Barcrest) (MPU4) (set 1)", - "m4dbl9a", "Double 9's (Barcrest) (MPU4) (set 2)", - "m4dblchn", "Double Chance (DJE) (MPU4)", - "m4dbldm", "Double Diamond Club (Barcrest) (MPU4) (set 1)", - "m4dbldm__a", "Double Diamond Club (Barcrest) (MPU4) (set 2)", - "m4dbldm__b", "Double Diamond Club (Barcrest) (MPU4) (set 3)", - "m4dbldm__c", "Double Diamond Club (Barcrest) (MPU4) (set 4)", - "m4dblup", "Double Up (Barcrest) (MPU4) (DU 1.5)", - "m4dcrls", "Double Crazy Reels (Qps) (MPU4) (set 1)", - "m4dcrls__a", "Double Crazy Reels (Qps) (MPU4) (set 2)", - "m4dcrls__b", "Double Crazy Reels (Qps) (MPU4) (set 3)", - "m4dcrls__c", "Double Crazy Reels (Qps) (MPU4) (set 4)", - "m4dcrls__d", "Double Crazy Reels (Qps) (MPU4) (set 5)", - "m4dcrls__e", "Double Crazy Reels (Qps) (MPU4) (set 6)", - "m4dcrls__f", "Double Crazy Reels (Qps) (MPU4) (set 7)", - "m4dcrls__g", "Double Crazy Reels (Qps) (MPU4) (set 8)", - "m4dcrls__h", "Double Crazy Reels (Qps) (MPU4) (set 9)", - "m4dcrls__i", "Double Crazy Reels (Qps) (MPU4) (set 10)", - "m4dcrls__j", "Double Crazy Reels (Qps) (MPU4) (set 11)", - "m4dcrls__k", "Double Crazy Reels (Qps) (MPU4) (set 12)", - "m4dcrls__l", "Double Crazy Reels (Qps) (MPU4) (set 13)", - "m4dcrls__m", "Double Crazy Reels (Qps) (MPU4) (set 14)", - "m4dcrls__n", "Double Crazy Reels (Qps) (MPU4) (set 15)", - "m4dcrls__o", "Double Crazy Reels (Qps) (MPU4) (set 16)", - "m4dcrls__p", "Double Crazy Reels (Qps) (MPU4) (set 17)", - "m4dcrls__q", "Double Crazy Reels (Qps) (MPU4) (set 18)", - "m4dcrls__r", "Double Crazy Reels (Qps) (MPU4) (set 19)", - "m4ddb", "Ding Dong Bells (Coinworld) (MPU4) (set 1)", - "m4ddba", "Ding Dong Bells (Coinworld) (MPU4) (set 2)", - "m4denmen", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2)", - "m4denmen_h1", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1, hack?)", - "m4denmen_h2", "Dennis The Menace (Barcrest) (MPU4) (V1 0.1, hack, set 1)", - "m4denmen_h3", "Dennis The Menace (Barcrest) (MPU4) (V1 0.1, hack, set 2)", - "m4denmend5", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1))", - "m4denmend5ad", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1AD)", - "m4denmend5b", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1B)", - "m4denmend5bd", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1BD)", - "m4denmend5d", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1D)", - "m4denmend5k", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1K)", - "m4denmend5kd", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1KD)", - "m4denmend5y", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1Y)", - "m4denmend5yd", "Dennis The Menace (Barcrest) (MPU4) (DM5 0.1YD)", - "m4denmend8", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1)", - "m4denmend8c", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1C)", - "m4denmend8d", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1D)", - "m4denmend8k", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1K)", - "m4denmend8y", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1Y)", - "m4denmend8yd", "Dennis The Menace (Barcrest) (MPU4) (DM8 0.1YD)", - "m4denmendnb", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2B)", - "m4denmendnc", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2C)", - "m4denmendnd", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2D)", - "m4denmendnk", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2K)", - "m4denmendny", "Dennis The Menace (Barcrest) (MPU4) (DEN 1.2Y)", - "m4denmendt", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1)", - "m4denmendtad", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1AD)", - "m4denmendtb", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1B)", - "m4denmendtbd", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1BD)", - "m4denmendtd", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1D)", - "m4denmendtk", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1K)", - "m4denmendtkd", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1KD)", - "m4denmendty", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1Y)", - "m4denmendtyd", "Dennis The Menace (Barcrest) (MPU4) (DMT 0.1YD)", - "m4dnj", "Double Nudge (unknown) (MPU4) (set 1)", - "m4dnja", "Double Nudge (unknown) (MPU4) (set 2)", - "m4dnjb", "Double Nudge (unknown) (MPU4) (set 3)", - "m4drac", "Dracula (Barcrest - Nova) (German) (MPU4) (set 1)", - "m4draca", "Dracula (Barcrest - Nova) (German) (MPU4) (set 2)", - "m4dracb", "Dracula (Barcrest - Nova) (German) (MPU4) (set 3)", - "m4dragon", "Dragon (Nova) (MPU4)", - "m4dtyfre", "Duty Free (Barcrest) (MPU4) (DUT 0.4)", - "m4dtyfre_h1", "Duty Free (Bwb / Barcrest) (MPU4) (DF4 4.1, hack?)", - "m4dtyfre_h2", "Duty Free (Barcrest) (MPU4) (DFT 0.1, hack?)", - "m4dtyfrebwb", "Duty Free (Bwb / Barcrest) (MPU4) (DF10 4.3, set 1)", - "m4dtyfrebwb_a", "Duty Free (Bwb / Barcrest) (MPU4) (DF10 4.3, set 2)", - "m4dtyfrebwb_b", "Duty Free (Bwb / Barcrest) (MPU4) (DF8 4.2)", - "m4dtyfrebwb_c", "Duty Free (Bwb / Barcrest) (MPU4) (DF8 2.2, set 1)", - "m4dtyfrebwb_d", "Duty Free (Bwb / Barcrest) (MPU4) (DF8 2.2, set 2)", - "m4dtyfrebwb_e", "Duty Free (Bwb / Barcrest) (MPU4) (DF4 4.1)", - "m4dtyfrebwb_f", "Duty Free (Bwb / Barcrest) (MPU4) (DF4 2.1)", - "m4dtyfrebwb_g", "Duty Free (Bwb / Barcrest) (MPU4) (DF4 1.1)", - "m4dtyfrebwb_h", "Duty Free (Bwb / Barcrest) (MPU4) (DFC 2.3)", - "m4dtyfref5", "Duty Free (Barcrest) (MPU4) (DF5 0.3)", - "m4dtyfref5ad", "Duty Free (Barcrest) (MPU4) (DF5 0.3AD)", - "m4dtyfref5b", "Duty Free (Barcrest) (MPU4) (DF5 0.3B)", - "m4dtyfref5bd", "Duty Free (Barcrest) (MPU4) (DF5 0.3BD)", - "m4dtyfref5d", "Duty Free (Barcrest) (MPU4) (DF5 0.3D)", - "m4dtyfref5k", "Duty Free (Barcrest) (MPU4) (DF5 0.3K)", - "m4dtyfref5kd", "Duty Free (Barcrest) (MPU4) (DF5 0.3KD)", - "m4dtyfref5r", "Duty Free (Barcrest) (MPU4) (DF5 0.3R)", - "m4dtyfref5rd", "Duty Free (Barcrest) (MPU4) (DF5 0.3RD)", - "m4dtyfref5y", "Duty Free (Barcrest) (MPU4) (DF5 0.3Y)", - "m4dtyfref5yd", "Duty Free (Barcrest) (MPU4) (DF5 0.3YD)", - "m4dtyfref8", "Duty Free (Barcrest) (MPU4) (DF8 0.1)", - "m4dtyfref8c", "Duty Free (Barcrest) (MPU4) (DF8 0.1C)", - "m4dtyfref8d", "Duty Free (Barcrest) (MPU4) (DF8 0.1D)", - "m4dtyfref8k", "Duty Free (Barcrest) (MPU4) (DF8 0.1K)", - "m4dtyfref8y", "Duty Free (Barcrest) (MPU4) (DF8 0.1Y)", - "m4dtyfref8yd", "Duty Free (Barcrest) (MPU4) (DF8 0.1YD)", - "m4dtyfreft", "Duty Free (Barcrest) (MPU4) (DFT 0.1)", - "m4dtyfreftad", "Duty Free (Barcrest) (MPU4) (DFT 0.1AD)", - "m4dtyfreftb", "Duty Free (Barcrest) (MPU4) (DFT 0.1B)", - "m4dtyfreftbd", "Duty Free (Barcrest) (MPU4) (DFT 0.1BD)", - "m4dtyfreftd", "Duty Free (Barcrest) (MPU4) (DFT 0.1D)", - "m4dtyfreftk", "Duty Free (Barcrest) (MPU4) (DFT 0.1K)", - "m4dtyfreftkd", "Duty Free (Barcrest) (MPU4) (DFT 0.1KD)", - "m4dtyfrefty", "Duty Free (Barcrest) (MPU4) (DFT 0.1Y)", - "m4dtyfreftyd", "Duty Free (Barcrest) (MPU4) (DFT 0.1YD)", - "m4dtyfreutb", "Duty Free (Barcrest) (MPU4) (DUT 0.4B)", - "m4dtyfreutc", "Duty Free (Barcrest) (MPU4) (DUT 0.4C)", - "m4dtyfrexd", "Duty Free (Barcrest) (MPU4) (XD5 0.2)", - "m4dtyfrexd_a", "Duty Free (Barcrest) (MPU4) (XD5 0.1)", - "m4dtyfrexdad", "Duty Free (Barcrest) (MPU4) (XD5 0.2AD)", - "m4dtyfrexdb", "Duty Free (Barcrest) (MPU4) (XD5 0.2B)", - "m4dtyfrexdbd", "Duty Free (Barcrest) (MPU4) (XD5 0.2BD)", - "m4dtyfrexdc", "Duty Free (Barcrest) (MPU4) (XD5 0.2C)", - "m4dtyfrexdd", "Duty Free (Barcrest) (MPU4) (XD5 0.2D)", - "m4dtyfrexdk", "Duty Free (Barcrest) (MPU4) (XD5 0.2K)", - "m4dtyfrexdkd", "Duty Free (Barcrest) (MPU4) (XD5 0.2KD)", - "m4dtyfrexdr", "Duty Free (Barcrest) (MPU4) (XD5 0.2R)", - "m4dtyfrexdrd", "Duty Free (Barcrest) (MPU4) (XD5 0.2RD)", - "m4dtyfrexdy", "Duty Free (Barcrest) (MPU4) (XD5 0.2Y)", - "m4dtyfrexdyd", "Duty Free (Barcrest) (MPU4) (XD5 0.2YD)", - "m4dtyfrexf", "Duty Free (Barcrest) (MPU4) (XFT 0.1)", - "m4dtyfrexfad", "Duty Free (Barcrest) (MPU4) (XFT 0.1AD)", - "m4dtyfrexfb", "Duty Free (Barcrest) (MPU4) (XFT 0.1B)", - "m4dtyfrexfbd", "Duty Free (Barcrest) (MPU4) (XFT 0.1BD)", - "m4dtyfrexfc", "Duty Free (Barcrest) (MPU4) (XFT 0.1C)", - "m4dtyfrexfd", "Duty Free (Barcrest) (MPU4) (XFT 0.1D)", - "m4dtyfrexfk", "Duty Free (Barcrest) (MPU4) (XFT 0.1K)", - "m4dtyfrexfkd", "Duty Free (Barcrest) (MPU4) (XFT 0.1KD)", - "m4dtyfrexfr", "Duty Free (Barcrest) (MPU4) (XFT 0.1R)", - "m4dtyfrexfrd", "Duty Free (Barcrest) (MPU4) (XFT 0.1RD)", - "m4dtyfrexfy", "Duty Free (Barcrest) (MPU4) (XFT 0.1Y)", - "m4dtyfrexfyd", "Duty Free (Barcrest) (MPU4) (XFT 0.1YD)", - "m4dz", "Danger Zone (Crystal) (MPU4)", - "m4eaw", "Everyone's A Winner (Barcrest) (MPU4) (set 1)", - "m4eaw__0", "Everyone's A Winner (Barcrest) (MPU4) (set 28)", - "m4eaw__1", "Everyone's A Winner (Barcrest) (MPU4) (set 29)", - "m4eaw__2", "Everyone's A Winner (Barcrest) (MPU4) (set 30)", - "m4eaw__3", "Everyone's A Winner (Barcrest) (MPU4) (set 31)", - "m4eaw__4", "Everyone's A Winner (Barcrest) (MPU4) (set 32)", - "m4eaw__5", "Everyone's A Winner (Barcrest) (MPU4) (set 33)", - "m4eaw__6", "Everyone's A Winner (Barcrest) (MPU4) (set 34)", - "m4eaw__7", "Everyone's A Winner (Barcrest) (MPU4) (set 35)", - "m4eaw__8", "Everyone's A Winner (Barcrest) (MPU4) (set 36)", - "m4eaw__9", "Everyone's A Winner (Barcrest) (MPU4) (set 37)", - "m4eaw__a", "Everyone's A Winner (Barcrest) (MPU4) (set 2)", - "m4eaw__a0", "Everyone's A Winner (Barcrest) (MPU4) (set 64)", - "m4eaw__a1", "Everyone's A Winner (Barcrest) (MPU4) (set 65)", - "m4eaw__a2", "Everyone's A Winner (Barcrest) (MPU4) (set 66)", - "m4eaw__a3", "Everyone's A Winner (Barcrest) (MPU4) (set 67)", - "m4eaw__a4", "Everyone's A Winner (Barcrest) (MPU4) (set 68)", - "m4eaw__a5", "Everyone's A Winner (Barcrest) (MPU4) (set 69)", - "m4eaw__a6", "Everyone's A Winner (Barcrest) (MPU4) (set 70)", - "m4eaw__a7", "Everyone's A Winner (Barcrest) (MPU4) (set 71)", - "m4eaw__a8", "Everyone's A Winner (Barcrest) (MPU4) (set 72)", - "m4eaw__a9", "Everyone's A Winner (Barcrest) (MPU4) (set 73)", - "m4eaw__aa", "Everyone's A Winner (Barcrest) (MPU4) (set 38)", - "m4eaw__ab", "Everyone's A Winner (Barcrest) (MPU4) (set 39)", - "m4eaw__ac", "Everyone's A Winner (Barcrest) (MPU4) (set 40)", - "m4eaw__ad", "Everyone's A Winner (Barcrest) (MPU4) (set 41)", - "m4eaw__ae", "Everyone's A Winner (Barcrest) (MPU4) (set 42)", - "m4eaw__af", "Everyone's A Winner (Barcrest) (MPU4) (set 43)", - "m4eaw__ag", "Everyone's A Winner (Barcrest) (MPU4) (set 44)", - "m4eaw__ah", "Everyone's A Winner (Barcrest) (MPU4) (set 45)", - "m4eaw__ai", "Everyone's A Winner (Barcrest) (MPU4) (set 46)", - "m4eaw__aj", "Everyone's A Winner (Barcrest) (MPU4) (set 47)", - "m4eaw__ak", "Everyone's A Winner (Barcrest) (MPU4) (set 48)", - "m4eaw__al", "Everyone's A Winner (Barcrest) (MPU4) (set 49)", - "m4eaw__am", "Everyone's A Winner (Barcrest) (MPU4) (set 50)", - "m4eaw__an", "Everyone's A Winner (Barcrest) (MPU4) (set 51)", - "m4eaw__ao", "Everyone's A Winner (Barcrest) (MPU4) (set 52)", - "m4eaw__ap", "Everyone's A Winner (Barcrest) (MPU4) (set 53)", - "m4eaw__aq", "Everyone's A Winner (Barcrest) (MPU4) (set 54)", - "m4eaw__ar", "Everyone's A Winner (Barcrest) (MPU4) (set 55)", - "m4eaw__as", "Everyone's A Winner (Barcrest) (MPU4) (set 56)", - "m4eaw__at", "Everyone's A Winner (Barcrest) (MPU4) (set 57)", - "m4eaw__au", "Everyone's A Winner (Barcrest) (MPU4) (set 58)", - "m4eaw__av", "Everyone's A Winner (Barcrest) (MPU4) (set 59)", - "m4eaw__aw", "Everyone's A Winner (Barcrest) (MPU4) (set 60)", - "m4eaw__ax", "Everyone's A Winner (Barcrest) (MPU4) (set 61)", - "m4eaw__ay", "Everyone's A Winner (Barcrest) (MPU4) (set 62)", - "m4eaw__az", "Everyone's A Winner (Barcrest) (MPU4) (set 63)", - "m4eaw__b", "Everyone's A Winner (Barcrest) (MPU4) (set 3)", - "m4eaw__ba", "Everyone's A Winner (Barcrest) (MPU4) (set 74)", - "m4eaw__bb", "Everyone's A Winner (Barcrest) (MPU4) (set 75)", - "m4eaw__bc", "Everyone's A Winner (Barcrest) (MPU4) (set 76)", - "m4eaw__bd", "Everyone's A Winner (Barcrest) (MPU4) (set 77)", - "m4eaw__be", "Everyone's A Winner (Barcrest) (MPU4) (set 78)", - "m4eaw__bf", "Everyone's A Winner (Barcrest) (MPU4) (set 79)", - "m4eaw__bg", "Everyone's A Winner (Barcrest) (MPU4) (set 80)", - "m4eaw__bh", "Everyone's A Winner (Barcrest) (MPU4) (set 81)", - "m4eaw__bi", "Everyone's A Winner (Barcrest) (MPU4) (set 82)", - "m4eaw__bj", "Everyone's A Winner (Barcrest) (MPU4) (set 83)", - "m4eaw__bk", "Everyone's A Winner (Barcrest) (MPU4) (set 84)", - "m4eaw__bl", "Everyone's A Winner (Barcrest) (MPU4) (set 85)", - "m4eaw__bm", "Everyone's A Winner (Barcrest) (MPU4) (set 86)", - "m4eaw__bn", "Everyone's A Winner (Barcrest) (MPU4) (set 87)", - "m4eaw__bo", "Everyone's A Winner (Barcrest) (MPU4) (set 88)", - "m4eaw__bp", "Everyone's A Winner (Barcrest) (MPU4) (set 89)", - "m4eaw__bq", "Everyone's A Winner (Barcrest) (MPU4) (set 90)", - "m4eaw__br", "Everyone's A Winner (Barcrest) (MPU4) (set 91)", - "m4eaw__bs", "Everyone's A Winner (Barcrest) (MPU4) (set 92)", - "m4eaw__bt", "Everyone's A Winner (Barcrest) (MPU4) (set 93)", - "m4eaw__bu", "Everyone's A Winner (Barcrest) (MPU4) (set 94)", - "m4eaw__bv", "Everyone's A Winner (Barcrest) (MPU4) (set 95)", - "m4eaw__bw", "Everyone's A Winner (Barcrest) (MPU4) (set 96)", - "m4eaw__bx", "Everyone's A Winner (Barcrest) (MPU4) (set 97)", - "m4eaw__bz", "Everyone's A Winner (Barcrest) (MPU4) (set 99)", - "m4eaw__c", "Everyone's A Winner (Barcrest) (MPU4) (set 4)", - "m4eaw__d", "Everyone's A Winner (Barcrest) (MPU4) (set 5)", - "m4eaw__e", "Everyone's A Winner (Barcrest) (MPU4) (set 6)", - "m4eaw__f", "Everyone's A Winner (Barcrest) (MPU4) (set 7)", - "m4eaw__g", "Everyone's A Winner (Barcrest) (MPU4) (set 8)", - "m4eaw__h", "Everyone's A Winner (Barcrest) (MPU4) (set 9)", - "m4eaw__i", "Everyone's A Winner (Barcrest) (MPU4) (set 10)", - "m4eaw__j", "Everyone's A Winner (Barcrest) (MPU4) (set 11)", - "m4eaw__k", "Everyone's A Winner (Barcrest) (MPU4) (set 12)", - "m4eaw__l", "Everyone's A Winner (Barcrest) (MPU4) (set 13)", - "m4eaw__m", "Everyone's A Winner (Barcrest) (MPU4) (set 14)", - "m4eaw__n", "Everyone's A Winner (Barcrest) (MPU4) (set 15)", - "m4eaw__o", "Everyone's A Winner (Barcrest) (MPU4) (set 16)", - "m4eaw__p", "Everyone's A Winner (Barcrest) (MPU4) (set 17)", - "m4eaw__q", "Everyone's A Winner (Barcrest) (MPU4) (set 18)", - "m4eaw__r", "Everyone's A Winner (Barcrest) (MPU4) (set 19)", - "m4eaw__s", "Everyone's A Winner (Barcrest) (MPU4) (set 20)", - "m4eaw__t", "Everyone's A Winner (Barcrest) (MPU4) (set 21)", - "m4eaw__u", "Everyone's A Winner (Barcrest) (MPU4) (set 22)", - "m4eaw__v", "Everyone's A Winner (Barcrest) (MPU4) (set 23)", - "m4eaw__w", "Everyone's A Winner (Barcrest) (MPU4) (set 24)", - "m4eaw__x", "Everyone's A Winner (Barcrest) (MPU4) (set 25)", - "m4eaw__y", "Everyone's A Winner (Barcrest) (MPU4) (set 26)", - "m4eaw__z", "Everyone's A Winner (Barcrest) (MPU4) (set 27)", - "m4eezee", "Eezee Fruits (Union) (MPU4)", - "m4eighth", "Eighth Wonder (Barcrest) (MPU4) (WON 2.2)", - "m4eightha", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 1)", - "m4eighthb", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 2)", - "m4eighthc", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 3)", - "m4eighthd", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 4, bad?)", - "m4eighthe", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 5)", - "m4eighthf", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 6)", - "m4eighthg", "Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 7)", - "m4elitc", "Elite Club (Crystal) (MPU4) (set 1)", - "m4elitca", "Elite Club (Crystal) (MPU4) (set 2)", - "m4elite", "Elite (Barcrest) (MPU4 w/ Plasma DMD?)", - "m4eureka", "Eureka (Empire) (MPU4, set 1)", - "m4eurekaa", "Eureka (Empire) (MPU4, set 2)", - "m4eurekab", "Eureka (Empire) (MPU4, set 3)", - "m4ewshft", "Each Way Shifter (Mdm) (MPU4)", - "m4excal", "Excalibur (Bwb) (MPU4) (set 1)", - "m4excal__a", "Excalibur (Bwb) (MPU4) (set 2)", - "m4excal__b", "Excalibur (Bwb) (MPU4) (set 3)", - "m4excal__c", "Excalibur (Bwb) (MPU4) (set 4)", - "m4excal__d", "Excalibur (Bwb) (MPU4) (set 5)", - "m4excal__e", "Excalibur (Bwb) (MPU4) (set 6)", - "m4excal__f", "Excalibur (Bwb) (MPU4) (set 7)", - "m4excal__g", "Excalibur (Bwb) (MPU4) (set 8)", - "m4excal__h", "Excalibur (Bwb) (MPU4) (set 9)", - "m4excal__i", "Excalibur (Bwb) (MPU4) (set 10)", - "m4excal__j", "Excalibur (Bwb) (MPU4) (set 11)", - "m4excaln", "Excalibur (Nova) (MPU4) (set 1)", - "m4excaln__a", "Excalibur (Nova) (MPU4) (set 2)", - "m4excam", "Excalibur (Mdm) (MPU4)", - "m4exgam", "Extra Game (Fairplay - Barcrest) (MPU4)", - "m4exlin", "Extra Lines (Pcp) (MPU4) (set 1)", - "m4exlina", "Extra Lines (Pcp) (MPU4) (set 2)", - "m4exotic", "Exotic Fruits (Bwb) (MPU4) (set 1)", - "m4exotic__a", "Exotic Fruits (Bwb) (MPU4) (set 2)", - "m4exotic__b", "Exotic Fruits (Bwb) (MPU4) (set 3)", - "m4exotic__c", "Exotic Fruits (Bwb) (MPU4) (set 4)", - "m4exotic__d", "Exotic Fruits (Bwb) (MPU4) (set 5)", - "m4exotic__e", "Exotic Fruits (Bwb) (MPU4) (set 6)", - "m4exprs", "Express (Barcrest) (DXP, Dutch) (MPU4)", - "m4fairg", "Fairground (Crystal) (MPU4)", - "m4fastfw", "Fast Forward (Barcrest) (MPU4) (set 1)", - "m4fastfw__a", "Fast Forward (Barcrest) (MPU4) (set 2)", - "m4fastfw__b", "Fast Forward (Barcrest) (MPU4) (set 3)", - "m4fastfw__c", "Fast Forward (Barcrest) (MPU4) (set 4)", - "m4fastfw__d", "Fast Forward (Barcrest) (MPU4) (set 5)", - "m4fastfw__e", "Fast Forward (Barcrest) (MPU4) (set 6)", - "m4fastfw__f", "Fast Forward (Barcrest) (MPU4) (set 7)", - "m4firebl", "Fireball (Mdm) (MPU4, set 1)", - "m4firebla", "Fireball (Mdm) (MPU4, set 2)", - "m4fireblb", "Fireball (Mdm) (MPU4, set 3)", - "m4fireblc", "Fireball (Mdm) (MPU4, set 4)", - "m4firebld", "Fireball (Mdm) (MPU4, set 5)", - "m4firice", "Fire & Ice (Bwb) (MPU4) (set 1)", - "m4firice__a", "Fire & Ice (Bwb) (MPU4) (set 2)", - "m4firice__b", "Fire & Ice (Bwb) (MPU4) (set 3)", - "m4firice__c", "Fire & Ice (Bwb) (MPU4) (set 4)", - "m4firice__d", "Fire & Ice (Bwb) (MPU4) (set 5)", - "m4firice__e", "Fire & Ice (Bwb) (MPU4) (set 6)", - "m4firice__f", "Fire & Ice (Bwb) (MPU4) (set 7)", - "m4firice__g", "Fire & Ice (Bwb) (MPU4) (set 8)", - "m4firice__h", "Fire & Ice (Bwb) (MPU4) (set 9)", - "m4firice__i", "Fire & Ice (Bwb) (MPU4) (set 10)", - "m4firice__j", "Fire & Ice (Bwb) (MPU4) (set 11)", - "m4flash", "Flash Cash (Barcrest) (MPU4, FC 1.0)", - "m4flshlt", "Flashlite (Bwb) (MPU4) (set 1)", - "m4flshlta", "Flashlite (Bwb) (MPU4) (set 2)", - "m4flshltb", "Flashlite (Bwb) (MPU4) (set 3)", - "m4flshltc", "Flashlite (Bwb) (MPU4) (set 4)", - "m4flshltd", "Flashlite (Bwb) (MPU4) (set 5)", - "m4flshlte", "Flashlite (Bwb) (MPU4) (set 6)", - "m4flshltf", "Flashlite (Bwb) (MPU4) (set 7)", - "m4flshltg", "Flashlite (Bwb) (MPU4) (set 8)", - "m4fortcb", "Fortune Club (Barcrest) (MPU4) (set 1)", - "m4fortcba", "Fortune Club (Barcrest) (MPU4) (set 2)", - "m4fortcbb", "Fortune Club (Barcrest) (MPU4) (set 3)", - "m4fourmr", "Four More (Bwb) (MPU4)", - "m4frcrak", "Fruit Cracker (Pcp) (MPU4)", - "m4frdrop", "Fruit Drop (Union) (MPU4)", - "m4fright", "Fright Night (Empire) (MPU4, v4.1X)", - "m4frighta", "Fright Night (Empire) (MPU4, v4.1)", - "m4frightb", "Fright Night (Empire) (MPU4, v4.1i)", - "m4frightc", "Fright Night (Empire) (MPU4, v?.?, set 1)", - "m4frightd", "Fright Night (Empire) (MPU4, v3.3)", - "m4frighte", "Fright Night (Empire) (MPU4, v3.0)", - "m4frightf", "Fright Night (Empire) (MPU4, v?.?, set 2)", - "m4frkstn", "Frank 'n' Stein (Crystal) (MPU4, set 1)", - "m4frkstna", "Frank 'n' Stein (Crystal) (MPU4, set 2)", - "m4frkstnb", "Frank 'n' Stein (Crystal) (MPU4, set 3)", - "m4frkstnc", "Frank 'n' Stein (Crystal) (MPU4, set 4)", - "m4frkstnd", "Frank 'n' Stein (Crystal) (MPU4, set 5)", - "m4frkstne", "Frank 'n' Stein (Crystal) (MPU4, set 6)", - "m4frkstnf", "Frank 'n' Stein (Crystal) (MPU4, set 7)", - "m4frkstng", "Frank 'n' Stein (Crystal) (MPU4, set 8)", - "m4frkstnh", "Frank 'n' Stein (Crystal) (MPU4, set 9)", - "m4frmani", "Fruit Mania (Crystal) (MPU4) (set 1)", - "m4frmania", "Fruit Mania (Crystal) (MPU4) (set 2)", - "m4frmanib", "Fruit Mania (Crystal) (MPU4) (set 3)", - "m4frmanic", "Fruit Mania (Crystal) (MPU4) (set 4)", - "m4frmtx", "Fruit Matrix (Avantime?) (MPU4) (set 1)", - "m4frmtx__a", "Fruit Matrix (Avantime?) (MPU4) (set 2)", - "m4frmtx__b", "Fruit Matrix (Avantime?) (MPU4) (set 3)", - "m4frmtx__c", "Fruit Matrix (Avantime?) (MPU4) (set 4)", - "m4frmtx__d", "Fruit Matrix (Avantime?) (MPU4) (set 5)", - "m4frmtx__e", "Fruit Matrix (Avantime?) (MPU4) (set 6)", - "m4frmtx__f", "Fruit Matrix (Avantime?) (MPU4) (set 7)", - "m4frnudg", "Fruit & Nudge (Avantime?) (MPU4) (set 1)", - "m4frnudg__a", "Fruit & Nudge (Avantime?) (MPU4) (set 2)", - "m4frnudg__b", "Fruit & Nudge (Avantime?) (MPU4) (set 3)", - "m4frnudg__c", "Fruit & Nudge (Avantime?) (MPU4) (set 4)", - "m4front", "Final Frontier (Mdm) (MPU4)", - "m4frtfl", "Fruit Full (Barcrest) (MPU4) (set 1)", - "m4frtfla", "Fruit Full (Barcrest) (MPU4) (set 2)", - "m4frtflc", "Fruit Full Club (Barcrest) (MPU4)", - "m4frtgm", "Fruit Game (Barcrest) (MPU4)", - "m4frtlnk", "Fruit Link Club (Barcrest) (MPU4) (set 1)", - "m4frtlnka", "Fruit Link Club (Barcrest) (MPU4) (set 2)", - "m4frtprs", "Fruit Preserve (Barcrest) (MPU4) (F4P 1.1, set 1)", - "m4frtprsa", "Fruit Preserve (Barcrest) (MPU4) (F4P 1.1, set 2)", - "m4fsx", "Fun Spot X (MPU4?) (set 1)", - "m4fsxa", "Fun Spot X (MPU4?) (set 2)", - "m4fsxb", "Fun Spot X (MPU4?) (set 3)", - "m4ftladn", "Find the Lady (Nova) (MPU4)", - "m4funh", "Fun House (unknown) (MPU4)", - "m4gambal", "Gamball (Barcrest) (MPU4) (set 1)", - "m4gambal__a", "Gamball (Barcrest) (MPU4) (set 2)", - "m4gambal__b", "Gamball (Barcrest) (MPU4) (set 3)", - "m4gambal__c", "Gamball (Barcrest) (MPU4) (set 4)", - "m4gamblr", "The Gambler (Empire) (MPU4, set 1)", - "m4gamblra", "The Gambler (Empire) (MPU4, set 2)", - "m4gamblrb", "The Gambler (Empire) (MPU4, set 3)", - "m4gb006", "Games Bond 006 (Barcrest) (MPU4) (set 1)", - "m4gb006__a", "Games Bond 006 (Barcrest) (MPU4) (set 2)", - "m4gb006__b", "Games Bond 006 (Barcrest) (MPU4) (set 3)", - "m4gb006__c", "Games Bond 006 (Barcrest) (MPU4) (set 4)", - "m4gbust", "Ghost Buster (Barcrest) (MPU4) (set 1)", - "m4gbust__a", "Ghost Buster (Barcrest) (MPU4) (set 2)", - "m4gbust__b", "Ghost Buster (Barcrest) (MPU4) (set 3)", - "m4gbust__c", "Ghost Buster (Barcrest) (MPU4) (set 4)", - "m4gbust__d", "Ghost Buster (Barcrest) (MPU4) (set 5)", - "m4gbust__e", "Ghost Buster (Barcrest) (MPU4) (set 6)", - "m4gbust__f", "Ghost Buster (Barcrest) (MPU4) (set 7)", - "m4gbust__g", "Ghost Buster (Barcrest) (MPU4) (set 8)", - "m4gbust__h", "Ghost Buster (Barcrest) (MPU4) (set 9)", - "m4gbust__i", "Ghost Buster (Barcrest) (MPU4) (set 10)", - "m4gbust__j", "Ghost Buster (Barcrest) (MPU4) (set 11)", - "m4gbust__k", "Ghost Buster (Barcrest) (MPU4) (set 12)", - "m4gbust__l", "Ghost Buster (Barcrest) (MPU4) (set 13)", - "m4gbust__m", "Ghost Buster (Barcrest) (MPU4) (set 14)", - "m4gbust__n", "Ghost Buster (Barcrest) (MPU4) (set 15)", - "m4gbust__o", "Ghost Buster (Barcrest) (MPU4) (set 16)", - "m4gbust__p", "Ghost Buster (Barcrest) (MPU4) (set 17)", - "m4gbust__q", "Ghost Buster (Barcrest) (MPU4) (set 18)", - "m4gbust__r", "Ghost Buster (Barcrest) (MPU4) (set 19)", - "m4gbust__s", "Ghost Buster (Barcrest) (MPU4) (set 20)", - "m4gbust__t", "Ghost Buster (Barcrest) (MPU4) (set 21)", - "m4gbust__u", "Ghost Buster (Barcrest) (MPU4) (set 22)", - "m4gbust__v", "Ghost Buster (Barcrest) (MPU4) (set 23)", - "m4gbust__w", "Ghost Buster (Barcrest) (MPU4) (set 24)", - "m4gclue", "Give Us A Clue (Barcrest) (MPU4) (set 1)", - "m4gclue__a", "Give Us A Clue (Barcrest) (MPU4) (set 2)", - "m4gclue__b", "Give Us A Clue (Barcrest) (MPU4) (set 3)", - "m4gclue__c", "Give Us A Clue (Barcrest) (MPU4) (set 4)", - "m4gclue__d", "Give Us A Clue (Barcrest) (MPU4) (set 5)", - "m4gclue__e", "Give Us A Clue (Barcrest) (MPU4) (set 6)", - "m4gclue__f", "Give Us A Clue (Barcrest) (MPU4) (set 7)", - "m4gclue__g", "Give Us A Clue (Barcrest) (MPU4) (set 8)", - "m4gclue__h", "Give Us A Clue (Barcrest) (MPU4) (set 9)", - "m4gclue__i", "Give Us A Clue (Barcrest) (MPU4) (set 10)", - "m4gclue__j", "Give Us A Clue (Barcrest) (MPU4) (set 11)", - "m4gclue__k", "Give Us A Clue (Barcrest) (MPU4) (set 12)", - "m4gclue__l", "Give Us A Clue (Barcrest) (MPU4) (set 13)", - "m4gclue__m", "Give Us A Clue (Barcrest) (MPU4) (set 14)", - "m4gclue__n", "Give Us A Clue (Barcrest) (MPU4) (set 15)", - "m4gclue__o", "Give Us A Clue (Barcrest) (MPU4) (set 16)", - "m4gclue__p", "Give Us A Clue (Barcrest) (MPU4) (set 17)", - "m4gclue__q", "Give Us A Clue (Barcrest) (MPU4) (set 18)", - "m4gclue__r", "Give Us A Clue (Barcrest) (MPU4) (set 19)", - "m4gclue__s", "Give Us A Clue (Barcrest) (MPU4) (set 20)", - "m4gclue__t", "Give Us A Clue (Barcrest) (MPU4) (set 21)", - "m4gclue__u", "Give Us A Clue (Barcrest) (MPU4) (set 22)", - "m4gclue__v", "Give Us A Clue (Barcrest) (MPU4) (set 23)", - "m4gclue__w", "Give Us A Clue (Barcrest) (MPU4) (set 24)", - "m4giant", "Giant (Barcrest) (DGI, Dutch) (MPU4)", - "m4gldgat", "Golden Gate (Barcrest) [DGG, Dutch] (MPU4)", - "m4gldjok", "Golden Joker (Barcrest) (Dutch) (MPU4) (DGJ 1.2)", - "m4gldstr", "Gold Strike (Barcrest) (MPU4) (G4S 2.0)", - "m4gnsmk", "Gun Smoke (Barcrest) (Dutch) (MPU4)", - "m4gobana", "Go Bananas (Union) (MPU4, set 1)", - "m4gobanaa", "Go Bananas (Union) (MPU4, set 2)", - "m4gobanab", "Go Bananas (Union) (MPU4, set 3)", - "m4gobanac", "Go Bananas (Union) (MPU4, set 4)", - "m4gobanad", "Go Bananas (Union) (MPU4, set 5)", - "m4goldfc", "Gold Fever (Crystal) (MPU4) (set 1)", - "m4goldfca", "Gold Fever (Crystal) (MPU4) (set 2)", - "m4goldfcb", "Gold Fever (Crystal) (MPU4) (set 3)", - "m4goldfv", "Gold Fever (Empire) (MPU4)", - "m4goldnn", "Golden Years (Nova) (MPU4)", - "m4goldxc", "Gold Exchange Club (Crystal) (MPU4) (set 1)", - "m4goldxca", "Gold Exchange Club (Crystal) (MPU4) (set 2)", - "m4goldxcb", "Gold Exchange Club (Crystal) (MPU4) (set 3)", - "m4goldxcc", "Gold Exchange Club (Crystal) (MPU4) (set 4)", - "m4goldxcd", "Gold Exchange Club (Crystal) (MPU4) (set 5)", - "m4goldxce", "Gold Exchange Club (Crystal) (MPU4) (set 6)", - "m4goodtm", "Let The Good Times Roll (Barcrest) (MPU4) (set 1)", - "m4goodtm__0", "Let The Good Times Roll (Barcrest) (MPU4) (set 28)", - "m4goodtm__1", "Let The Good Times Roll (Barcrest) (MPU4) (set 29)", - "m4goodtm__2", "Let The Good Times Roll (Barcrest) (MPU4) (set 30)", - "m4goodtm__3", "Let The Good Times Roll (Barcrest) (MPU4) (set 31)", - "m4goodtm__4", "Let The Good Times Roll (Barcrest) (MPU4) (set 32)", - "m4goodtm__5", "Let The Good Times Roll (Barcrest) (MPU4) (set 33)", - "m4goodtm__6", "Let The Good Times Roll (Barcrest) (MPU4) (set 34)", - "m4goodtm__7", "Let The Good Times Roll (Barcrest) (MPU4) (set 35)", - "m4goodtm__8", "Let The Good Times Roll (Barcrest) (MPU4) (set 36)", - "m4goodtm__9", "Let The Good Times Roll (Barcrest) (MPU4) (set 37)", - "m4goodtm__a", "Let The Good Times Roll (Barcrest) (MPU4) (set 2)", - "m4goodtm__a0", "Let The Good Times Roll (Barcrest) (MPU4) (set 64)", - "m4goodtm__a1", "Let The Good Times Roll (Barcrest) (MPU4) (set 65)", - "m4goodtm__a2", "Let The Good Times Roll (Barcrest) (MPU4) (set 66)", - "m4goodtm__a3", "Let The Good Times Roll (Barcrest) (MPU4) (set 67)", - "m4goodtm__a4", "Let The Good Times Roll (Barcrest) (MPU4) (set 68)", - "m4goodtm__a5", "Let The Good Times Roll (Barcrest) (MPU4) (set 69)", - "m4goodtm__a6", "Let The Good Times Roll (Barcrest) (MPU4) (set 70)", - "m4goodtm__aa", "Let The Good Times Roll (Barcrest) (MPU4) (set 38)", - "m4goodtm__ab", "Let The Good Times Roll (Barcrest) (MPU4) (set 39)", - "m4goodtm__ac", "Let The Good Times Roll (Barcrest) (MPU4) (set 40)", - "m4goodtm__ad", "Let The Good Times Roll (Barcrest) (MPU4) (set 41)", - "m4goodtm__ae", "Let The Good Times Roll (Barcrest) (MPU4) (set 42)", - "m4goodtm__af", "Let The Good Times Roll (Barcrest) (MPU4) (set 43)", - "m4goodtm__ag", "Let The Good Times Roll (Barcrest) (MPU4) (set 44)", - "m4goodtm__ah", "Let The Good Times Roll (Barcrest) (MPU4) (set 45)", - "m4goodtm__ai", "Let The Good Times Roll (Barcrest) (MPU4) (set 46)", - "m4goodtm__aj", "Let The Good Times Roll (Barcrest) (MPU4) (set 47)", - "m4goodtm__ak", "Let The Good Times Roll (Barcrest) (MPU4) (set 48)", - "m4goodtm__al", "Let The Good Times Roll (Barcrest) (MPU4) (set 49)", - "m4goodtm__am", "Let The Good Times Roll (Barcrest) (MPU4) (set 50)", - "m4goodtm__an", "Let The Good Times Roll (Barcrest) (MPU4) (set 51)", - "m4goodtm__ao", "Let The Good Times Roll (Barcrest) (MPU4) (set 52)", - "m4goodtm__ap", "Let The Good Times Roll (Barcrest) (MPU4) (set 53)", - "m4goodtm__aq", "Let The Good Times Roll (Barcrest) (MPU4) (set 54)", - "m4goodtm__ar", "Let The Good Times Roll (Barcrest) (MPU4) (set 55)", - "m4goodtm__as", "Let The Good Times Roll (Barcrest) (MPU4) (set 56)", - "m4goodtm__at", "Let The Good Times Roll (Barcrest) (MPU4) (set 57)", - "m4goodtm__au", "Let The Good Times Roll (Barcrest) (MPU4) (set 58)", - "m4goodtm__av", "Let The Good Times Roll (Barcrest) (MPU4) (set 59)", - "m4goodtm__aw", "Let The Good Times Roll (Barcrest) (MPU4) (set 60)", - "m4goodtm__ax", "Let The Good Times Roll (Barcrest) (MPU4) (set 61)", - "m4goodtm__ay", "Let The Good Times Roll (Barcrest) (MPU4) (set 62)", - "m4goodtm__az", "Let The Good Times Roll (Barcrest) (MPU4) (set 63)", - "m4goodtm__b", "Let The Good Times Roll (Barcrest) (MPU4) (set 3)", - "m4goodtm__c", "Let The Good Times Roll (Barcrest) (MPU4) (set 4)", - "m4goodtm__d", "Let The Good Times Roll (Barcrest) (MPU4) (set 5)", - "m4goodtm__e", "Let The Good Times Roll (Barcrest) (MPU4) (set 6)", - "m4goodtm__f", "Let The Good Times Roll (Barcrest) (MPU4) (set 7)", - "m4goodtm__g", "Let The Good Times Roll (Barcrest) (MPU4) (set 8)", - "m4goodtm__h", "Let The Good Times Roll (Barcrest) (MPU4) (set 9)", - "m4goodtm__i", "Let The Good Times Roll (Barcrest) (MPU4) (set 10)", - "m4goodtm__j", "Let The Good Times Roll (Barcrest) (MPU4) (set 11)", - "m4goodtm__k", "Let The Good Times Roll (Barcrest) (MPU4) (set 12)", - "m4goodtm__l", "Let The Good Times Roll (Barcrest) (MPU4) (set 13)", - "m4goodtm__m", "Let The Good Times Roll (Barcrest) (MPU4) (set 14)", - "m4goodtm__n", "Let The Good Times Roll (Barcrest) (MPU4) (set 15)", - "m4goodtm__o", "Let The Good Times Roll (Barcrest) (MPU4) (set 16)", - "m4goodtm__p", "Let The Good Times Roll (Barcrest) (MPU4) (set 17)", - "m4goodtm__q", "Let The Good Times Roll (Barcrest) (MPU4) (set 18)", - "m4goodtm__r", "Let The Good Times Roll (Barcrest) (MPU4) (set 19)", - "m4goodtm__s", "Let The Good Times Roll (Barcrest) (MPU4) (set 20)", - "m4goodtm__t", "Let The Good Times Roll (Barcrest) (MPU4) (set 21)", - "m4goodtm__u", "Let The Good Times Roll (Barcrest) (MPU4) (set 22)", - "m4goodtm__v", "Let The Good Times Roll (Barcrest) (MPU4) (set 23)", - "m4goodtm__w", "Let The Good Times Roll (Barcrest) (MPU4) (set 24)", - "m4goodtm__x", "Let The Good Times Roll (Barcrest) (MPU4) (set 25)", - "m4goodtm__y", "Let The Good Times Roll (Barcrest) (MPU4) (set 26)", - "m4goodtm__z", "Let The Good Times Roll (Barcrest) (MPU4) (set 27)", - "m4graff", "Graffiti (Barcrest) (MPU4) (set 1)", - "m4graff__a", "Graffiti (Barcrest) (MPU4) (set 2)", - "m4graff__b", "Graffiti (Barcrest) (MPU4) (set 3)", - "m4graffd", "Grafitti (Barcrest) [Dutch] (MPU4)", - "m4grands", "Grandstand Club (Barcrest) (MPU4) (G2D 4.0)", - "m4grandsa", "Grandstand Club (Barcrest) (MPU4) (GD 1.1)", - "m4grbbnk", "Grab The Bank (Barcrest) (MPU4) (G4B 2.0)", - "m4grbbnka", "Grab The Bank (Barcrest) (MPU4) (G4B 2.1)", - "m4grbbnkb", "Grab The Bank (Barcrest) (MPU4) (G4B 1.0)", - "m4gtrain", "Ghost Train (Empire) (MPU4, set 1)", - "m4gtraina", "Ghost Train (Empire) (MPU4, set 2)", - "m4gtrainb", "Ghost Train (Empire) (MPU4, set 3)", - "m4gtrainc", "Ghost Train (Empire) (MPU4, set 4)", - "m4gvibes", "Good Vibrations (Union - Empire) (MPU4, set 1)", - "m4gvibesa", "Good Vibrations (Union - Empire) (MPU4, set 2)", - "m4hapfrt", "Happy Fruits (Coinworld) (MPU4) (set 1)", - "m4hapfrta", "Happy Fruits (Coinworld) (MPU4) (set 2)", - "m4hapfrtb", "Happy Fruits (Coinworld) (MPU4) (set 3)", - "m4harle", "Harlequin (Bwb) (MPU4) (set 1)", - "m4harle__a", "Harlequin (Bwb) (MPU4) (set 2)", - "m4harle__b", "Harlequin (Bwb) (MPU4) (set 3)", - "m4harle__c", "Harlequin (Bwb) (MPU4) (set 4)", - "m4harle__d", "Harlequin (Bwb) (MPU4) (set 5)", - "m4harle__e", "Harlequin (Bwb) (MPU4) (set 6)", - "m4harle__f", "Harlequin (Bwb) (MPU4) (set 7)", - "m4harle__g", "Harlequin (Bwb) (MPU4) (set 8)", - "m4harle__h", "Harlequin (Bwb) (MPU4) (set 9)", - "m4harle__i", "Harlequin (Bwb) (MPU4) (set 10)", - "m4harle__j", "Harlequin (Bwb) (MPU4) (set 11)", - "m4harle__k", "Harlequin (Bwb) (MPU4) (set 12)", - "m4harle__l", "Harlequin (Bwb) (MPU4) (set 13)", - "m4harle__m", "Harlequin (Bwb) (MPU4) (set 14)", - "m4harle__n", "Harlequin (Bwb) (MPU4) (set 15)", - "m4harle__o", "Harlequin (Bwb) (MPU4) (set 16)", - "m4harle__p", "Harlequin (Bwb) (MPU4) (set 17)", - "m4harle__q", "Harlequin (Bwb) (MPU4) (set 18)", - "m4harle__r", "Harlequin (Bwb) (MPU4) (set 19)", - "m4harle__s", "Harlequin (Bwb) (MPU4) (set 20)", - "m4harle__t", "Harlequin (Bwb) (MPU4) (set 21)", - "m4harle__u", "Harlequin (Bwb) (MPU4) (set 22)", - "m4harle__v", "Harlequin (Bwb) (MPU4) (set 23)", - "m4harle__w", "Harlequin (Bwb) (MPU4) (set 24)", - "m4harle__x", "Harlequin (Bwb) (MPU4) (set 25)", - "m4haunt", "Haunted House (Empire) (MPU4, set 1)", - "m4haunta", "Haunted House (Empire) (MPU4, set 2)", - "m4hauntb", "Haunted House (Empire) (MPU4, set 3)", - "m4hauntc", "Haunted House (Empire) (MPU4, set 4)", - "m4hauntd", "Haunted House (Empire) (MPU4, set 5)", - "m4hijinx", "Hi Jinx (Barcrest) (MPU4) (set 1)", - "m4hijinx__0", "Hi Jinx (Barcrest) (MPU4) (set 28)", - "m4hijinx__1", "Hi Jinx (Barcrest) (MPU4) (set 29)", - "m4hijinx__2", "Hi Jinx (Barcrest) (MPU4) (set 30)", - "m4hijinx__3", "Hi Jinx (Barcrest) (MPU4) (set 31)", - "m4hijinx__4", "Hi Jinx (Barcrest) (MPU4) (set 32)", - "m4hijinx__5", "Hi Jinx (Barcrest) (MPU4) (set 33)", - "m4hijinx__6", "Hi Jinx (Barcrest) (MPU4) (set 34)", - "m4hijinx__7", "Hi Jinx (Barcrest) (MPU4) (set 35)", - "m4hijinx__8", "Hi Jinx (Barcrest) (MPU4) (set 36)", - "m4hijinx__9", "Hi Jinx (Barcrest) (MPU4) (set 37)", - "m4hijinx__a", "Hi Jinx (Barcrest) (MPU4) (set 2)", - "m4hijinx__aa", "Hi Jinx (Barcrest) (MPU4) (set 38)", - "m4hijinx__ab", "Hi Jinx (Barcrest) (MPU4) (set 39)", - "m4hijinx__b", "Hi Jinx (Barcrest) (MPU4) (set 3)", - "m4hijinx__c", "Hi Jinx (Barcrest) (MPU4) (set 4)", - "m4hijinx__d", "Hi Jinx (Barcrest) (MPU4) (set 5)", - "m4hijinx__e", "Hi Jinx (Barcrest) (MPU4) (set 6)", - "m4hijinx__f", "Hi Jinx (Barcrest) (MPU4) (set 7)", - "m4hijinx__g", "Hi Jinx (Barcrest) (MPU4) (set 8)", - "m4hijinx__h", "Hi Jinx (Barcrest) (MPU4) (set 9)", - "m4hijinx__i", "Hi Jinx (Barcrest) (MPU4) (set 10)", - "m4hijinx__j", "Hi Jinx (Barcrest) (MPU4) (set 11)", - "m4hijinx__k", "Hi Jinx (Barcrest) (MPU4) (set 12)", - "m4hijinx__l", "Hi Jinx (Barcrest) (MPU4) (set 13)", - "m4hijinx__m", "Hi Jinx (Barcrest) (MPU4) (set 14)", - "m4hijinx__n", "Hi Jinx (Barcrest) (MPU4) (set 15)", - "m4hijinx__o", "Hi Jinx (Barcrest) (MPU4) (set 16)", - "m4hijinx__p", "Hi Jinx (Barcrest) (MPU4) (set 17)", - "m4hijinx__q", "Hi Jinx (Barcrest) (MPU4) (set 18)", - "m4hijinx__r", "Hi Jinx (Barcrest) (MPU4) (set 19)", - "m4hijinx__s", "Hi Jinx (Barcrest) (MPU4) (set 20)", - "m4hijinx__t", "Hi Jinx (Barcrest) (MPU4) (set 21)", - "m4hijinx__u", "Hi Jinx (Barcrest) (MPU4) (set 22)", - "m4hijinx__v", "Hi Jinx (Barcrest) (MPU4) (set 23)", - "m4hijinx__w", "Hi Jinx (Barcrest) (MPU4) (set 24)", - "m4hijinx__x", "Hi Jinx (Barcrest) (MPU4) (set 25)", - "m4hijinx__y", "Hi Jinx (Barcrest) (MPU4) (set 26)", - "m4hijinx__z", "Hi Jinx (Barcrest) (MPU4) (set 27)", - "m4hilonv", "Hi Lo Casino (Nova) (MPU4)", - "m4hirise", "High Rise (Barcrest) (MPU4) (set 1)", - "m4hirisea", "High Rise (Barcrest) (MPU4) (set 2)", - "m4hiriseb", "High Rise (Barcrest) (MPU4) (set 3)", - "m4hirisec", "High Rise (Barcrest) (MPU4) (set 4)", - "m4hirised", "High Rise (Barcrest) (MPU4) (set 5)", - "m4hirisee", "High Rise (Barcrest) (MPU4) (set 6)", - "m4hirol", "Hi Roller Club (Crystal) (MPU4) (set 1)", - "m4hirola", "Hi Roller Club (Crystal) (MPU4) (set 2)", - "m4hiroll", "High Roller (Barcrest) (MPU4)", - "m4hisprt", "High Spirits (Empire) (MPU4, set 1)", - "m4hisprta", "High Spirits (Empire) (MPU4, set 2)", - "m4hisprtb", "High Spirits (Empire) (MPU4, set 3)", - "m4hisprtc", "High Spirits (Empire) (MPU4, set 4)", - "m4hisprtd", "High Spirits (Empire) (MPU4, set 5)", - "m4hisprte", "High Spirits (Empire) (MPU4, set 6)", - "m4hittop", "Hit The Top (Barcrest) (MPU4) (set 1)", - "m4hittop__0", "Hit The Top (Barcrest) (MPU4) (set 28)", - "m4hittop__1", "Hit The Top (Barcrest) (MPU4) (set 29)", - "m4hittop__2", "Hit The Top (Barcrest) (MPU4) (set 30)", - "m4hittop__3", "Hit The Top (Barcrest) (MPU4) (set 31)", - "m4hittop__4", "Hit The Top (Barcrest) (MPU4) (set 32)", - "m4hittop__5", "Hit The Top (Barcrest) (MPU4) (set 33)", - "m4hittop__6", "Hit The Top (Barcrest) (MPU4) (set 34)", - "m4hittop__7", "Hit The Top (Barcrest) (MPU4) (set 35)", - "m4hittop__8", "Hit The Top (Barcrest) (MPU4) (set 36)", - "m4hittop__9", "Hit The Top (Barcrest) (MPU4) (set 37)", - "m4hittop__a", "Hit The Top (Barcrest) (MPU4) (set 2)", - "m4hittop__aa", "Hit The Top (Barcrest) (MPU4) (set 38)", - "m4hittop__ab", "Hit The Top (Barcrest) (MPU4) (set 39)", - "m4hittop__ac", "Hit The Top (Barcrest) (MPU4) (set 40)", - "m4hittop__ad", "Hit The Top (Barcrest) (MPU4) (set 41)", - "m4hittop__ae", "Hit The Top (Barcrest) (MPU4) (set 42)", - "m4hittop__af", "Hit The Top (Barcrest) (MPU4) (set 43)", - "m4hittop__ag", "Hit The Top (Barcrest) (MPU4) (set 44)", - "m4hittop__ah", "Hit The Top (Barcrest) (MPU4) (set 45)", - "m4hittop__ai", "Hit The Top (Barcrest) (MPU4) (set 46)", - "m4hittop__aj", "Hit The Top (Barcrest) (MPU4) (set 47)", - "m4hittop__ak", "Hit The Top (Barcrest) (MPU4) (set 48)", - "m4hittop__al", "Hit The Top (Barcrest) (MPU4) (set 49)", - "m4hittop__am", "Hit The Top (Barcrest) (MPU4) (set 50)", - "m4hittop__an", "Hit The Top (Barcrest) (MPU4) (set 51)", - "m4hittop__ao", "Hit The Top (Barcrest) (MPU4) (set 52)", - "m4hittop__ap", "Hit The Top (Barcrest) (MPU4) (set 53)", - "m4hittop__aq", "Hit The Top (Barcrest) (MPU4) (set 54)", - "m4hittop__ar", "Hit The Top (Barcrest) (MPU4) (set 55)", - "m4hittop__as", "Hit The Top (Barcrest) (MPU4) (set 56)", - "m4hittop__at", "Hit The Top (Barcrest) (MPU4) (set 57)", - "m4hittop__au", "Hit The Top (Barcrest) (MPU4) (set 58)", - "m4hittop__av", "Hit The Top (Barcrest) (MPU4) (set 59)", - "m4hittop__aw", "Hit The Top (Barcrest) (MPU4) (set 60)", - "m4hittop__ax", "Hit The Top (Barcrest) (MPU4) (set 61)", - "m4hittop__b", "Hit The Top (Barcrest) (MPU4) (set 3)", - "m4hittop__c", "Hit The Top (Barcrest) (MPU4) (set 4)", - "m4hittop__d", "Hit The Top (Barcrest) (MPU4) (set 5)", - "m4hittop__e", "Hit The Top (Barcrest) (MPU4) (set 6)", - "m4hittop__f", "Hit The Top (Barcrest) (MPU4) (set 7)", - "m4hittop__g", "Hit The Top (Barcrest) (MPU4) (set 8)", - "m4hittop__h", "Hit The Top (Barcrest) (MPU4) (set 9)", - "m4hittop__i", "Hit The Top (Barcrest) (MPU4) (set 10)", - "m4hittop__j", "Hit The Top (Barcrest) (MPU4) (set 11)", - "m4hittop__k", "Hit The Top (Barcrest) (MPU4) (set 12)", - "m4hittop__l", "Hit The Top (Barcrest) (MPU4) (set 13)", - "m4hittop__m", "Hit The Top (Barcrest) (MPU4) (set 14)", - "m4hittop__n", "Hit The Top (Barcrest) (MPU4) (set 15)", - "m4hittop__o", "Hit The Top (Barcrest) (MPU4) (set 16)", - "m4hittop__p", "Hit The Top (Barcrest) (MPU4) (set 17)", - "m4hittop__q", "Hit The Top (Barcrest) (MPU4) (set 18)", - "m4hittop__r", "Hit The Top (Barcrest) (MPU4) (set 19)", - "m4hittop__s", "Hit The Top (Barcrest) (MPU4) (set 20)", - "m4hittop__t", "Hit The Top (Barcrest) (MPU4) (set 21)", - "m4hittop__u", "Hit The Top (Barcrest) (MPU4) (set 22)", - "m4hittop__v", "Hit The Top (Barcrest) (MPU4) (set 23)", - "m4hittop__w", "Hit The Top (Barcrest) (MPU4) (set 24)", - "m4hittop__x", "Hit The Top (Barcrest) (MPU4) (set 25)", - "m4hittop__y", "Hit The Top (Barcrest) (MPU4) (set 26)", - "m4hittop__z", "Hit The Top (Barcrest) (MPU4) (set 27)", - "m4hittp2", "Hit The Top (Barcrest) (MPU4, Mod 2 type, H4T 2.0, set 1)", - "m4hittp2a", "Hit The Top (Barcrest) (MPU4, Mod 2 type, H4T 2.0, set 2)", - "m4holdon", "Hold On (Barcrest) (Dutch) (MPU4)", - "m4holdtm", "Hold Timer (Barcrest) (Dutch) (MPU4) (DHT)", - "m4holywd", "Hollywood (Bwb) (MPU4)", - "m4hotcsh", "Hot Cash (Empire) (MPU4, set 1)", - "m4hotcsha", "Hot Cash (Empire) (MPU4, set 2)", - "m4hotcshb", "Hot Cash (Empire) (MPU4, set 3)", - "m4hotcshc", "Hot Cash (Empire) (MPU4, set 4)", - "m4hotrod", "Hot Rod (Barcrest) (MPU4) (set 1)", - "m4hotrod__a", "Hot Rod (Barcrest) (MPU4) (set 2)", - "m4hotrod__b", "Hot Rod (Barcrest) (MPU4) (set 3)", - "m4hotrod__c", "Hot Rod (Barcrest) (MPU4) (set 4)", - "m4hotrod__d", "Hot Rod (Barcrest) (MPU4) (set 5)", - "m4hotrod__e", "Hot Rod (Barcrest) (MPU4) (set 6)", - "m4hotrod__f", "Hot Rod (Barcrest) (MPU4) (set 7)", - "m4hotrod__g", "Hot Rod (Barcrest) (MPU4) (set 8)", - "m4hotrod__h", "Hot Rod (Barcrest) (MPU4) (set 9)", - "m4hotrod__i", "Hot Rod (Barcrest) (MPU4) (set 10)", - "m4hotrod__j", "Hot Rod (Barcrest) (MPU4) (set 11)", - "m4hotrod__k", "Hot Rod (Barcrest) (MPU4) (set 12)", - "m4hotrod__l", "Hot Rod (Barcrest) (MPU4) (set 13)", - "m4hotrod__m", "Hot Rod (Barcrest) (MPU4) (set 14)", - "m4hotrod__n", "Hot Rod (Barcrest) (MPU4) (set 15)", - "m4hotrod__o", "Hot Rod (Barcrest) (MPU4) (set 16)", - "m4hotrod__p", "Hot Rod (Barcrest) (MPU4) (set 17)", - "m4hotrod__q", "Hot Rod (Barcrest) (MPU4) (set 18)", - "m4hotrod__r", "Hot Rod (Barcrest) (MPU4) (set 19)", - "m4hotrod__s", "Hot Rod (Barcrest) (MPU4) (set 20)", - "m4hotrod__t", "Hot Rod (Barcrest) (MPU4) (set 21)", - "m4hotrod__u", "Hot Rod (Barcrest) (MPU4) (set 22)", - "m4hotrod__v", "Hot Rod (Barcrest) (MPU4) (set 23)", - "m4hpyjok", "Happy Joker (Barcrest) (Dutch) (MPU4) (DHJ1.2)", - "m4hslo", "unknown MPU4 'HOT 3.0' (MPU4?)", - "m4hstr", "Happy Streak (Coinworld) (MPU4) (set 1)", - "m4hstra", "Happy Streak (Coinworld) (MPU4) (set 2)", - "m4hstrb", "Happy Streak (Coinworld) (MPU4) (set 3)", - "m4hstrcs", "Casino Happy Streak (Coinworld) (MPU4) (set 1)", - "m4hstrcsa", "Casino Happy Streak (Coinworld) (MPU4) (set 2)", - "m4hstrcsb", "Casino Happy Streak (Coinworld) (MPU4) (set 3)", - "m4hstrcsc", "Casino Happy Streak (Coinworld) (MPU4) (set 4)", - "m4hstrcsd", "Casino Happy Streak (Coinworld) (MPU4) (set 5)", - "m4hvhel", "Heaven & Hell (Bwb) (MPU4) (set 1)", - "m4hvhel__a", "Heaven & Hell (Bwb) (MPU4) (set 2)", - "m4hvhel__b", "Heaven & Hell (Bwb) (MPU4) (set 3)", - "m4hvhel__c", "Heaven & Hell (Bwb) (MPU4) (set 4)", - "m4hvhel__d", "Heaven & Hell (Bwb) (MPU4) (set 5)", - "m4hvhel__e", "Heaven & Hell (Bwb) (MPU4) (set 6)", - "m4hvhel__f", "Heaven & Hell (Bwb) (MPU4) (set 7)", - "m4hvhel__g", "Heaven & Hell (Bwb) (MPU4) (set 8)", - "m4hvhel__h", "Heaven & Hell (Bwb) (MPU4) (set 9)", - "m4hypclb", "Hyper Viper Club (Barcrest) (MPU4) (set 1)", - "m4hypclb__a", "Hyper Viper Club (Barcrest) (MPU4) (set 2)", - "m4hypclb__b", "Hyper Viper Club (Barcrest) (MPU4) (set 3)", - "m4hypclb__c", "Hyper Viper Club (Barcrest) (MPU4) (set 4)", - "m4hypvip", "Hyper Viper (Barcrest) (MPU4) (set 1)", - "m4hypvip__a", "Hyper Viper (Barcrest) (MPU4) (set 2)", - "m4hypvip__b", "Hyper Viper (Barcrest) (MPU4) (set 3)", - "m4hypvip__c", "Hyper Viper (Barcrest) (MPU4) (set 4)", - "m4hypvip__d", "Hyper Viper (Barcrest) (MPU4) (set 5)", - "m4hypvip__e", "Hyper Viper (Barcrest) (MPU4) (set 6)", - "m4hypvip__f", "Hyper Viper (Barcrest) (MPU4) (set 7)", - "m4hypvip__g", "Hyper Viper (Barcrest) (MPU4) (set 8)", - "m4hypvip__h", "Hyper Viper (Barcrest) (MPU4) (set 9)", - "m4hypvip__i", "Hyper Viper (Barcrest) (MPU4) (set 10)", - "m4hypvip__j", "Hyper Viper (Barcrest) (MPU4) (set 11)", - "m4hypvip__k", "Hyper Viper (Barcrest) (MPU4) (set 12)", - "m4hypvip__l", "Hyper Viper (Barcrest) (MPU4) (set 13)", - "m4hypvip__m", "Hyper Viper (Barcrest) (MPU4) (set 14)", - "m4hypvip__n", "Hyper Viper (Barcrest) (MPU4) (set 15)", - "m4hypvip__o", "Hyper Viper (Barcrest) (MPU4) (set 16)", - "m4hypvip__p", "Hyper Viper (Barcrest) (MPU4) (set 17)", - "m4hypvip__q", "Hyper Viper (Barcrest) (MPU4) (set 18)", - "m4hypvip__r", "Hyper Viper (Barcrest) (MPU4) (set 19)", - "m4hypvip__s", "Hyper Viper (Barcrest) (MPU4) (set 20)", - "m4hypvip__t", "Hyper Viper (Barcrest) (MPU4) (set 21)", - "m4hypvip__u", "Hyper Viper (Barcrest) (MPU4) (set 22)", - "m4hypvip__v", "Hyper Viper (Barcrest) (MPU4) (set 23)", - "m4indycr", "Indy Cars (Bwb) (MPU4) (set 1)", - "m4indycr__a", "Indy Cars (Bwb) (MPU4) (set 2)", - "m4indycr__b", "Indy Cars (Bwb) (MPU4) (set 3)", - "m4indycr__c", "Indy Cars (Bwb) (MPU4) (set 4)", - "m4indycr__d", "Indy Cars (Bwb) (MPU4) (set 5)", - "m4indycr__e", "Indy Cars (Bwb) (MPU4) (set 6)", - "m4indycr__f", "Indy Cars (Bwb) (MPU4) (set 7)", - "m4intcep", "Interceptor (Barcrest) (MPU4) (INT 3.0)", - "m4intcepa", "Interceptor (Barcrest) (MPU4) (INT 3.0X)", - "m4intcepb", "Interceptor (Barcrest) (MPU4) (INT 1.1)", - "m4jakjok", "Jackpot Jokers (Bwb) (MPU4) (set 1)", - "m4jakjok__a", "Jackpot Jokers (Bwb) (MPU4) (set 2)", - "m4jakjok__b", "Jackpot Jokers (Bwb) (MPU4) (set 3)", - "m4jakjok__c", "Jackpot Jokers (Bwb) (MPU4) (set 4)", - "m4jakjoka", "Jackpot Jokers (alt) (Bwb) (MPU4)", - "m4jflash", "Jumping Jack Flash (Bwb) (MPU4) (set 1)", - "m4jflash__a", "Jumping Jack Flash (Bwb) (MPU4) (set 2)", - "m4jflash__b", "Jumping Jack Flash (Bwb) (MPU4) (set 3)", - "m4jflash__c", "Jumping Jack Flash (Bwb) (MPU4) (set 4)", - "m4jflash__d", "Jumping Jack Flash (Bwb) (MPU4) (set 5)", - "m4jflash__e", "Jumping Jack Flash (Bwb) (MPU4) (set 6)", - "m4jflash__f", "Jumping Jack Flash (Bwb) (MPU4) (set 7)", - "m4jflash__g", "Jumping Jack Flash (Bwb) (MPU4) (set 8)", - "m4jflash__h", "Jumping Jack Flash (Bwb) (MPU4) (set 9)", - "m4jflash__i", "Jumping Jack Flash (Bwb) (MPU4) (set 10)", - "m4jiggin", "Jiggin' In The Riggin' (Global) (MPU4) (set 1)", - "m4jiggina", "Jiggin' In The Riggin' (Global) (MPU4) (set 2)", - "m4jjc", "Jumping Jack Cash (Pcp) (MPU4) (set 1)", - "m4jjca", "Jumping Jack Cash (Pcp) (MPU4) (set 2)", - "m4jne", "The Jackpot's Not Enough (Empire) (MPU4)", - "m4jok2k", "Joker 2000 (Avantime?) (MPU4) (set 1)", - "m4jok2k__a", "Joker 2000 (Avantime?) (MPU4) (set 2)", - "m4jok2k__b", "Joker 2000 (Avantime?) (MPU4) (set 3)", - "m4jok300", "Jokers 300 (Barcrest) (German?) (MPU4)", - "m4jokmil", "Jokers Millennium (Barcrest) (German) (MPU4)", - "m4jolgem", "Jolly Gems (Barcrest) (MPU4) (set 1)", - "m4jolgem__0", "Jolly Gems (Barcrest) (MPU4) (set 28)", - "m4jolgem__1", "Jolly Gems (Barcrest) (MPU4) (set 29)", - "m4jolgem__2", "Jolly Gems (Barcrest) (MPU4) (set 30)", - "m4jolgem__3", "Jolly Gems (Barcrest) (MPU4) (set 31)", - "m4jolgem__4", "Jolly Gems (Barcrest) (MPU4) (set 32)", - "m4jolgem__5", "Jolly Gems (Barcrest) (MPU4) (set 33)", - "m4jolgem__6", "Jolly Gems (Barcrest) (MPU4) (set 34)", - "m4jolgem__7", "Jolly Gems (Barcrest) (MPU4) (set 35)", - "m4jolgem__8", "Jolly Gems (Barcrest) (MPU4) (set 36)", - "m4jolgem__9", "Jolly Gems (Barcrest) (MPU4) (set 37)", - "m4jolgem__a", "Jolly Gems (Barcrest) (MPU4) (set 2)", - "m4jolgem__aa", "Jolly Gems (Barcrest) (MPU4) (set 38)", - "m4jolgem__ab", "Jolly Gems (Barcrest) (MPU4) (set 39)", - "m4jolgem__ac", "Jolly Gems (Barcrest) (MPU4) (set 40)", - "m4jolgem__ad", "Jolly Gems (Barcrest) (MPU4) (set 41)", - "m4jolgem__ae", "Jolly Gems (Barcrest) (MPU4) (set 42)", - "m4jolgem__af", "Jolly Gems (Barcrest) (MPU4) (set 43)", - "m4jolgem__ag", "Jolly Gems (Barcrest) (MPU4) (set 44)", - "m4jolgem__ah", "Jolly Gems (Barcrest) (MPU4) (set 45)", - "m4jolgem__ai", "Jolly Gems (Barcrest) (MPU4) (set 46)", - "m4jolgem__aj", "Jolly Gems (Barcrest) (MPU4) (set 47)", - "m4jolgem__ak", "Jolly Gems (Barcrest) (MPU4) (set 48)", - "m4jolgem__al", "Jolly Gems (Barcrest) (MPU4) (set 49)", - "m4jolgem__am", "Jolly Gems (Barcrest) (MPU4) (set 50)", - "m4jolgem__an", "Jolly Gems (Barcrest) (MPU4) (set 51)", - "m4jolgem__ao", "Jolly Gems (Barcrest) (MPU4) (set 52)", - "m4jolgem__ap", "Jolly Gems (Barcrest) (MPU4) (set 53)", - "m4jolgem__b", "Jolly Gems (Barcrest) (MPU4) (set 3)", - "m4jolgem__c", "Jolly Gems (Barcrest) (MPU4) (set 4)", - "m4jolgem__d", "Jolly Gems (Barcrest) (MPU4) (set 5)", - "m4jolgem__e", "Jolly Gems (Barcrest) (MPU4) (set 6)", - "m4jolgem__f", "Jolly Gems (Barcrest) (MPU4) (set 7)", - "m4jolgem__g", "Jolly Gems (Barcrest) (MPU4) (set 8)", - "m4jolgem__h", "Jolly Gems (Barcrest) (MPU4) (set 9)", - "m4jolgem__i", "Jolly Gems (Barcrest) (MPU4) (set 10)", - "m4jolgem__j", "Jolly Gems (Barcrest) (MPU4) (set 11)", - "m4jolgem__k", "Jolly Gems (Barcrest) (MPU4) (set 12)", - "m4jolgem__l", "Jolly Gems (Barcrest) (MPU4) (set 13)", - "m4jolgem__m", "Jolly Gems (Barcrest) (MPU4) (set 14)", - "m4jolgem__n", "Jolly Gems (Barcrest) (MPU4) (set 15)", - "m4jolgem__o", "Jolly Gems (Barcrest) (MPU4) (set 16)", - "m4jolgem__p", "Jolly Gems (Barcrest) (MPU4) (set 17)", - "m4jolgem__q", "Jolly Gems (Barcrest) (MPU4) (set 18)", - "m4jolgem__r", "Jolly Gems (Barcrest) (MPU4) (set 19)", - "m4jolgem__s", "Jolly Gems (Barcrest) (MPU4) (set 20)", - "m4jolgem__t", "Jolly Gems (Barcrest) (MPU4) (set 21)", - "m4jolgem__u", "Jolly Gems (Barcrest) (MPU4) (set 22)", - "m4jolgem__v", "Jolly Gems (Barcrest) (MPU4) (set 23)", - "m4jolgem__w", "Jolly Gems (Barcrest) (MPU4) (set 24)", - "m4jolgem__x", "Jolly Gems (Barcrest) (MPU4) (set 25)", - "m4jolgem__y", "Jolly Gems (Barcrest) (MPU4) (set 26)", - "m4jolgem__z", "Jolly Gems (Barcrest) (MPU4) (set 27)", - "m4joljok", "Jolly Joker (Barcrest) (MPU4)", - "m4joljokd", "Jolly Joker (Barcrest) [Dutch] (MPU4) (DJJ)", - "m4joljokh", "Jolly Joker (Barcrest) [Hungarian] (MPU4) (HJJ)", - "m4joltav", "Jolly Taverner (Barcrest) (MPU4) (set 1)", - "m4joltava", "Jolly Taverner (Barcrest) (MPU4) (set 2)", - "m4joltavb", "Jolly Taverner (Barcrest) (MPU4) (set 3)", - "m4jp777", "Jackpot 777 (Cotswold Microsystems) (MPU4)", - "m4jpgem", "Jackpot Gems (Barcrest) (MPU4) (set 1)", - "m4jpgem__0", "Jackpot Gems (Barcrest) (MPU4) (set 28)", - "m4jpgem__1", "Jackpot Gems (Barcrest) (MPU4) (set 29)", - "m4jpgem__2", "Jackpot Gems (Barcrest) (MPU4) (set 30)", - "m4jpgem__3", "Jackpot Gems (Barcrest) (MPU4) (set 31)", - "m4jpgem__4", "Jackpot Gems (Barcrest) (MPU4) (set 32)", - "m4jpgem__5", "Jackpot Gems (Barcrest) (MPU4) (set 33)", - "m4jpgem__6", "Jackpot Gems (Barcrest) (MPU4) (set 34)", - "m4jpgem__7", "Jackpot Gems (Barcrest) (MPU4) (set 35)", - "m4jpgem__8", "Jackpot Gems (Barcrest) (MPU4) (set 36)", - "m4jpgem__9", "Jackpot Gems (Barcrest) (MPU4) (set 37)", - "m4jpgem__a", "Jackpot Gems (Barcrest) (MPU4) (set 2)", - "m4jpgem__a0", "Jackpot Gems (Barcrest) (MPU4) (set 64)", - "m4jpgem__a1", "Jackpot Gems (Barcrest) (MPU4) (set 65)", - "m4jpgem__a2", "Jackpot Gems (Barcrest) (MPU4) (set 66)", - "m4jpgem__a3", "Jackpot Gems (Barcrest) (MPU4) (set 67)", - "m4jpgem__a4", "Jackpot Gems (Barcrest) (MPU4) (set 68)", - "m4jpgem__a5", "Jackpot Gems (Barcrest) (MPU4) (set 69)", - "m4jpgem__a6", "Jackpot Gems (Barcrest) (MPU4) (set 70)", - "m4jpgem__a7", "Jackpot Gems (Barcrest) (MPU4) (set 71)", - "m4jpgem__a8", "Jackpot Gems (Barcrest) (MPU4) (set 72)", - "m4jpgem__a9", "Jackpot Gems (Barcrest) (MPU4) (set 73)", - "m4jpgem__aa", "Jackpot Gems (Barcrest) (MPU4) (set 38)", - "m4jpgem__ab", "Jackpot Gems (Barcrest) (MPU4) (set 39)", - "m4jpgem__ac", "Jackpot Gems (Barcrest) (MPU4) (set 40)", - "m4jpgem__ad", "Jackpot Gems (Barcrest) (MPU4) (set 41)", - "m4jpgem__ae", "Jackpot Gems (Barcrest) (MPU4) (set 42)", - "m4jpgem__af", "Jackpot Gems (Barcrest) (MPU4) (set 43)", - "m4jpgem__ag", "Jackpot Gems (Barcrest) (MPU4) (set 44)", - "m4jpgem__ah", "Jackpot Gems (Barcrest) (MPU4) (set 45)", - "m4jpgem__ai", "Jackpot Gems (Barcrest) (MPU4) (set 46)", - "m4jpgem__aj", "Jackpot Gems (Barcrest) (MPU4) (set 47)", - "m4jpgem__ak", "Jackpot Gems (Barcrest) (MPU4) (set 48)", - "m4jpgem__al", "Jackpot Gems (Barcrest) (MPU4) (set 49)", - "m4jpgem__am", "Jackpot Gems (Barcrest) (MPU4) (set 50)", - "m4jpgem__an", "Jackpot Gems (Barcrest) (MPU4) (set 51)", - "m4jpgem__ao", "Jackpot Gems (Barcrest) (MPU4) (set 52)", - "m4jpgem__ap", "Jackpot Gems (Barcrest) (MPU4) (set 53)", - "m4jpgem__aq", "Jackpot Gems (Barcrest) (MPU4) (set 54)", - "m4jpgem__ar", "Jackpot Gems (Barcrest) (MPU4) (set 55)", - "m4jpgem__as", "Jackpot Gems (Barcrest) (MPU4) (set 56)", - "m4jpgem__at", "Jackpot Gems (Barcrest) (MPU4) (set 57)", - "m4jpgem__au", "Jackpot Gems (Barcrest) (MPU4) (set 58)", - "m4jpgem__av", "Jackpot Gems (Barcrest) (MPU4) (set 59)", - "m4jpgem__aw", "Jackpot Gems (Barcrest) (MPU4) (set 60)", - "m4jpgem__ax", "Jackpot Gems (Barcrest) (MPU4) (set 61)", - "m4jpgem__ay", "Jackpot Gems (Barcrest) (MPU4) (set 62)", - "m4jpgem__az", "Jackpot Gems (Barcrest) (MPU4) (set 63)", - "m4jpgem__b", "Jackpot Gems (Barcrest) (MPU4) (set 3)", - "m4jpgem__ba", "Jackpot Gems (Barcrest) (MPU4) (set 74)", - "m4jpgem__bb", "Jackpot Gems (Barcrest) (MPU4) (set 75)", - "m4jpgem__bc", "Jackpot Gems (Barcrest) (MPU4) (set 76)", - "m4jpgem__bd", "Jackpot Gems (Barcrest) (MPU4) (set 77)", - "m4jpgem__be", "Jackpot Gems (Barcrest) (MPU4) (set 78)", - "m4jpgem__bf", "Jackpot Gems (Barcrest) (MPU4) (set 79)", - "m4jpgem__bg", "Jackpot Gems (Barcrest) (MPU4) (set 80)", - "m4jpgem__bh", "Jackpot Gems (Barcrest) (MPU4) (set 81)", - "m4jpgem__bi", "Jackpot Gems (Barcrest) (MPU4) (set 82)", - "m4jpgem__bj", "Jackpot Gems (Barcrest) (MPU4) (set 83)", - "m4jpgem__bk", "Jackpot Gems (Barcrest) (MPU4) (set 84)", - "m4jpgem__bl", "Jackpot Gems (Barcrest) (MPU4) (set 85)", - "m4jpgem__bm", "Jackpot Gems (Barcrest) (MPU4) (set 86)", - "m4jpgem__bn", "Jackpot Gems (Barcrest) (MPU4) (set 87)", - "m4jpgem__bo", "Jackpot Gems (Barcrest) (MPU4) (set 88)", - "m4jpgem__bp", "Jackpot Gems (Barcrest) (MPU4) (set 89)", - "m4jpgem__c", "Jackpot Gems (Barcrest) (MPU4) (set 4)", - "m4jpgem__d", "Jackpot Gems (Barcrest) (MPU4) (set 5)", - "m4jpgem__e", "Jackpot Gems (Barcrest) (MPU4) (set 6)", - "m4jpgem__f", "Jackpot Gems (Barcrest) (MPU4) (set 7)", - "m4jpgem__g", "Jackpot Gems (Barcrest) (MPU4) (set 8)", - "m4jpgem__h", "Jackpot Gems (Barcrest) (MPU4) (set 9)", - "m4jpgem__i", "Jackpot Gems (Barcrest) (MPU4) (set 10)", - "m4jpgem__j", "Jackpot Gems (Barcrest) (MPU4) (set 11)", - "m4jpgem__k", "Jackpot Gems (Barcrest) (MPU4) (set 12)", - "m4jpgem__l", "Jackpot Gems (Barcrest) (MPU4) (set 13)", - "m4jpgem__m", "Jackpot Gems (Barcrest) (MPU4) (set 14)", - "m4jpgem__n", "Jackpot Gems (Barcrest) (MPU4) (set 15)", - "m4jpgem__o", "Jackpot Gems (Barcrest) (MPU4) (set 16)", - "m4jpgem__p", "Jackpot Gems (Barcrest) (MPU4) (set 17)", - "m4jpgem__q", "Jackpot Gems (Barcrest) (MPU4) (set 18)", - "m4jpgem__r", "Jackpot Gems (Barcrest) (MPU4) (set 19)", - "m4jpgem__s", "Jackpot Gems (Barcrest) (MPU4) (set 20)", - "m4jpgem__t", "Jackpot Gems (Barcrest) (MPU4) (set 21)", - "m4jpgem__u", "Jackpot Gems (Barcrest) (MPU4) (set 22)", - "m4jpgem__v", "Jackpot Gems (Barcrest) (MPU4) (set 23)", - "m4jpgem__w", "Jackpot Gems (Barcrest) (MPU4) (set 24)", - "m4jpgem__x", "Jackpot Gems (Barcrest) (MPU4) (set 25)", - "m4jpgem__y", "Jackpot Gems (Barcrest) (MPU4) (set 26)", - "m4jpgem__z", "Jackpot Gems (Barcrest) (MPU4) (set 27)", - "m4jpgemc", "Jackpot Gems Classic (Barcrest) (MPU4) (set 1)", - "m4jpgemc__a", "Jackpot Gems Classic (Barcrest) (MPU4) (set 2)", - "m4jpgemc__b", "Jackpot Gems Classic (Barcrest) (MPU4) (set 3)", - "m4jpgemc__c", "Jackpot Gems Classic (Barcrest) (MPU4) (set 4)", - "m4jpgemc__d", "Jackpot Gems Classic (Barcrest) (MPU4) (set 5)", - "m4jpgemc__e", "Jackpot Gems Classic (Barcrest) (MPU4) (set 6)", - "m4jpgemc__f", "Jackpot Gems Classic (Barcrest) (MPU4) (set 7)", - "m4jpgemc__g", "Jackpot Gems Classic (Barcrest) (MPU4) (set 8)", - "m4jpgemc__h", "Jackpot Gems Classic (Barcrest) (MPU4) (set 9)", - "m4jpgemc__i", "Jackpot Gems Classic (Barcrest) (MPU4) (set 10)", - "m4jpgemc__j", "Jackpot Gems Classic (Barcrest) (MPU4) (set 11)", - "m4jpgemc__k", "Jackpot Gems Classic (Barcrest) (MPU4) (set 12)", - "m4jpgemc__l", "Jackpot Gems Classic (Barcrest) (MPU4) (set 13)", - "m4jpgemc__m", "Jackpot Gems Classic (Barcrest) (MPU4) (set 14)", - "m4jpgemc__n", "Jackpot Gems Classic (Barcrest) (MPU4) (set 15)", - "m4jpgemc__o", "Jackpot Gems Classic (Barcrest) (MPU4) (set 16)", - "m4jpgemc__p", "Jackpot Gems Classic (Barcrest) (MPU4) (set 17)", - "m4jpgemc__q", "Jackpot Gems Classic (Barcrest) (MPU4) (set 18)", - "m4jpgemc__r", "Jackpot Gems Classic (Barcrest) (MPU4) (set 19)", - "m4jpgemc__s", "Jackpot Gems Classic (Barcrest) (MPU4) (set 20)", - "m4jpgemc__t", "Jackpot Gems Classic (Barcrest) (MPU4) (set 21)", - "m4jpgemc__u", "Jackpot Gems Classic (Barcrest) (MPU4) (set 22)", - "m4jpgemc__v", "Jackpot Gems Classic (Barcrest) (MPU4) (set 23)", - "m4jpgemc__w", "Jackpot Gems Classic (Barcrest) (MPU4) (set 24)", - "m4jpjmp", "Jackpot Jump (Barcrest) (MPU4) (set 1)", - "m4jpjmpa", "Jackpot Jump (Barcrest) (MPU4) (set 2)", - "m4jpmcla", "Old Timer (Barcrest) (Dutch, alt 'JPM Classic' sound roms) (DOT1.1)", - "m4jungj", "Jungle Japes (MPU4?) (set 1)", - "m4jungja", "Jungle Japes (MPU4?) (set 2)", - "m4jungjb", "Jungle Japes (MPU4?) (set 3)", - "m4jungjc", "Jungle Japes (MPU4?) (set 4)", - "m4jungjk", "Jungle Jackpots (Qps) (MPU4) (set 1)", - "m4jungjk__a", "Jungle Jackpots (Qps) (MPU4) (set 2)", - "m4jungjk__b", "Jungle Jackpots (Qps) (MPU4) (set 3)", - "m4jungjk__c", "Jungle Jackpots (Qps) (MPU4) (set 4)", - "m4jungjk__d", "Jungle Jackpots (Qps) (MPU4) (set 5)", - "m4jungjk__e", "Jungle Jackpots (Qps) (MPU4) (set 6)", - "m4jwlcwn", "Jewel In the Crown (Barcrest) (MPU4) (set 1)", - "m4jwlcwn__0", "Jewel In the Crown (Barcrest) (MPU4) (set 28)", - "m4jwlcwn__1", "Jewel In the Crown (Barcrest) (MPU4) (set 29)", - "m4jwlcwn__2", "Jewel In the Crown (Barcrest) (MPU4) (set 30)", - "m4jwlcwn__3", "Jewel In the Crown (Barcrest) (MPU4) (set 31)", - "m4jwlcwn__4", "Jewel In the Crown (Barcrest) (MPU4) (set 32)", - "m4jwlcwn__5", "Jewel In the Crown (Barcrest) (MPU4) (set 33)", - "m4jwlcwn__6", "Jewel In the Crown (Barcrest) (MPU4) (set 34)", - "m4jwlcwn__a", "Jewel In the Crown (Barcrest) (MPU4) (set 2)", - "m4jwlcwn__b", "Jewel In the Crown (Barcrest) (MPU4) (set 3)", - "m4jwlcwn__c", "Jewel In the Crown (Barcrest) (MPU4) (set 4)", - "m4jwlcwn__d", "Jewel In the Crown (Barcrest) (MPU4) (set 5)", - "m4jwlcwn__e", "Jewel In the Crown (Barcrest) (MPU4) (set 6)", - "m4jwlcwn__f", "Jewel In the Crown (Barcrest) (MPU4) (set 7)", - "m4jwlcwn__g", "Jewel In the Crown (Barcrest) (MPU4) (set 8)", - "m4jwlcwn__h", "Jewel In the Crown (Barcrest) (MPU4) (set 9)", - "m4jwlcwn__i", "Jewel In the Crown (Barcrest) (MPU4) (set 10)", - "m4jwlcwn__j", "Jewel In the Crown (Barcrest) (MPU4) (set 11)", - "m4jwlcwn__k", "Jewel In the Crown (Barcrest) (MPU4) (set 12)", - "m4jwlcwn__l", "Jewel In the Crown (Barcrest) (MPU4) (set 13)", - "m4jwlcwn__m", "Jewel In the Crown (Barcrest) (MPU4) (set 14)", - "m4jwlcwn__n", "Jewel In the Crown (Barcrest) (MPU4) (set 15)", - "m4jwlcwn__o", "Jewel In the Crown (Barcrest) (MPU4) (set 16)", - "m4jwlcwn__p", "Jewel In the Crown (Barcrest) (MPU4) (set 17)", - "m4jwlcwn__q", "Jewel In the Crown (Barcrest) (MPU4) (set 18)", - "m4jwlcwn__r", "Jewel In the Crown (Barcrest) (MPU4) (set 19)", - "m4jwlcwn__s", "Jewel In the Crown (Barcrest) (MPU4) (set 20)", - "m4jwlcwn__t", "Jewel In the Crown (Barcrest) (MPU4) (set 21)", - "m4jwlcwn__u", "Jewel In the Crown (Barcrest) (MPU4) (set 22)", - "m4jwlcwn__v", "Jewel In the Crown (Barcrest) (MPU4) (set 23)", - "m4jwlcwn__w", "Jewel In the Crown (Barcrest) (MPU4) (set 24)", - "m4jwlcwn__x", "Jewel In the Crown (Barcrest) (MPU4) (set 25)", - "m4jwlcwn__y", "Jewel In the Crown (Barcrest) (MPU4) (set 26)", - "m4jwlcwn__z", "Jewel In the Crown (Barcrest) (MPU4) (set 27)", - "m4kingg", "King George (Avantime?) (MPU4) (set 1)", - "m4kingg__a", "King George (Avantime?) (MPU4) (set 2)", - "m4kingq", "Kings & Queens (Barcrest) (MPU4) (set 1)", - "m4kingq__a", "Kings & Queens (Barcrest) (MPU4) (set 2)", - "m4kingq__b", "Kings & Queens (Barcrest) (MPU4) (set 3)", - "m4kingq__c", "Kings & Queens (Barcrest) (MPU4) (set 4)", - "m4kingq__d", "Kings & Queens (Barcrest) (MPU4) (set 5)", - "m4kingq__e", "Kings & Queens (Barcrest) (MPU4) (set 6)", - "m4kingq__f", "Kings & Queens (Barcrest) (MPU4) (set 7)", - "m4kingq__g", "Kings & Queens (Barcrest) (MPU4) (set 8)", - "m4kingq__h", "Kings & Queens (Barcrest) (MPU4) (set 9)", - "m4kingq__i", "Kings & Queens (Barcrest) (MPU4) (set 10)", - "m4kingq__j", "Kings & Queens (Barcrest) (MPU4) (set 11)", - "m4kingq__k", "Kings & Queens (Barcrest) (MPU4) (set 12)", - "m4kingq__l", "Kings & Queens (Barcrest) (MPU4) (set 13)", - "m4kingq__m", "Kings & Queens (Barcrest) (MPU4) (set 14)", - "m4kingq__n", "Kings & Queens (Barcrest) (MPU4) (set 15)", - "m4kingq__o", "Kings & Queens (Barcrest) (MPU4) (set 16)", - "m4kingq__p", "Kings & Queens (Barcrest) (MPU4) (set 17)", - "m4kingq__r", "Kings & Queens (Barcrest) (MPU4) (set 18)", - "m4kingq__s", "Kings & Queens (Barcrest) (MPU4) (set 19)", - "m4kingq__t", "Kings & Queens (Barcrest) (MPU4) (set 20)", - "m4kingqc", "Kings & Queens Classic (Barcrest) (MPU4) (set 1)", - "m4kingqc__0", "Kings & Queens Classic (Barcrest) (MPU4) (set 26)", - "m4kingqc__1", "Kings & Queens Classic (Barcrest) (MPU4) (set 27)", - "m4kingqc__2", "Kings & Queens Classic (Barcrest) (MPU4) (set 28)", - "m4kingqc__3", "Kings & Queens Classic (Barcrest) (MPU4) (set 29)", - "m4kingqc__4", "Kings & Queens Classic (Barcrest) (MPU4) (set 30)", - "m4kingqc__5", "Kings & Queens Classic (Barcrest) (MPU4) (set 31)", - "m4kingqc__a", "Kings & Queens Classic (Barcrest) (MPU4) (set 2)", - "m4kingqc__b", "Kings & Queens Classic (Barcrest) (MPU4) (set 3)", - "m4kingqc__c", "Kings & Queens Classic (Barcrest) (MPU4) (set 4)", - "m4kingqc__d", "Kings & Queens Classic (Barcrest) (MPU4) (set 5)", - "m4kingqc__e", "Kings & Queens Classic (Barcrest) (MPU4) (set 6)", - "m4kingqc__f", "Kings & Queens Classic (Barcrest) (MPU4) (set 7)", - "m4kingqc__g", "Kings & Queens Classic (Barcrest) (MPU4) (set 8)", - "m4kingqc__h", "Kings & Queens Classic (Barcrest) (MPU4) (set 9)", - "m4kingqc__i", "Kings & Queens Classic (Barcrest) (MPU4) (set 10)", - "m4kingqc__j", "Kings & Queens Classic (Barcrest) (MPU4) (set 11)", - "m4kingqc__k", "Kings & Queens Classic (Barcrest) (MPU4) (set 12)", - "m4kingqc__l", "Kings & Queens Classic (Barcrest) (MPU4) (set 13)", - "m4kingqc__m", "Kings & Queens Classic (Barcrest) (MPU4) (set 14)", - "m4kingqc__n", "Kings & Queens Classic (Barcrest) (MPU4) (set 15)", - "m4kingqc__q", "Kings & Queens Classic (Barcrest) (MPU4) (set 16)", - "m4kingqc__r", "Kings & Queens Classic (Barcrest) (MPU4) (set 17)", - "m4kingqc__s", "Kings & Queens Classic (Barcrest) (MPU4) (set 18)", - "m4kingqc__t", "Kings & Queens Classic (Barcrest) (MPU4) (set 19)", - "m4kingqc__u", "Kings & Queens Classic (Barcrest) (MPU4) (set 20)", - "m4kingqc__v", "Kings & Queens Classic (Barcrest) (MPU4) (set 21)", - "m4kingqc__w", "Kings & Queens Classic (Barcrest) (MPU4) (set 22)", - "m4kingqc__x", "Kings & Queens Classic (Barcrest) (MPU4) (set 23)", - "m4kingqc__y", "Kings & Queens Classic (Barcrest) (MPU4) (set 24)", - "m4kingqc__z", "Kings & Queens Classic (Barcrest) (MPU4) (set 25)", - "m4kingqn", "Kings & Queens Club (Crystal) (MPU4) (set 1)", - "m4kingqna", "Kings & Queens Club (Crystal) (MPU4) (set 2)", - "m4kqclub", "Kings & Queens Club (Newby) (MPU4)", - "m4lazy", "Lazy Bones (Bwb) (MPU4) (set 1)", - "m4lazya", "Lazy Bones (Bwb) (MPU4) (set 2)", - "m4lazyb", "Lazy Bones (Bwb) (MPU4) (set 3)", - "m4libty", "Liberty (Barcrest) (Dutch) (MPU4)", - "m4lineup", "Line Up (Bwb - Barcrest) (MPU4) (set 1)", - "m4lineupa", "Line Up (Bwb - Barcrest) (MPU4) (set 2)", - "m4ln7", "Lucky No7 (Bwb) (MPU4) (set 1)", - "m4ln7__a", "Lucky No7 (Bwb) (MPU4) (set 2)", - "m4ln7__b", "Lucky No7 (Bwb) (MPU4) (set 3)", - "m4ln7__c", "Lucky No7 (Bwb) (MPU4) (set 4)", - "m4ln7__d", "Lucky No7 (Bwb) (MPU4) (set 5)", - "m4loadmn", "Loads A Money (Barcrest) (MPU4) (set 1)", - "m4loadmna", "Loads A Money (Barcrest) (MPU4) (set 2)", - "m4loadmnb", "Loads A Money (Barcrest) (MPU4) (set 3)", - "m4looplt", "Loop The Loot (Qps) (MPU4) (set 1)", - "m4looplt__a", "Loop The Loot (Qps) (MPU4) (set 2)", - "m4looplt__b", "Loop The Loot (Qps) (MPU4) (set 3)", - "m4looplt__c", "Loop The Loot (Qps) (MPU4) (set 4)", - "m4looplt__d", "Loop The Loot (Qps) (MPU4) (set 5)", - "m4looplt__e", "Loop The Loot (Qps) (MPU4) (set 6)", - "m4looplt__f", "Loop The Loot (Qps) (MPU4) (set 7)", - "m4looplt__g", "Loop The Loot (Qps) (MPU4) (set 8)", - "m4looplt__h", "Loop The Loot (Qps) (MPU4) (set 9)", - "m4looplt__i", "Loop The Loot (Qps) (MPU4) (set 10)", - "m4looplt__j", "Loop The Loot (Qps) (MPU4) (set 11)", - "m4looplt__k", "Loop The Loot (Qps) (MPU4) (set 12)", - "m4looplt__l", "Loop The Loot (Qps) (MPU4) (set 13)", - "m4looplt__m", "Loop The Loot (Qps) (MPU4) (set 14)", - "m4lotclb", "Lottery Club (Crystal) (MPU4) (set 1)", - "m4lotclba", "Lottery Club (Crystal) (MPU4) (set 2)", - "m4lotty", "Lotty Time (Union) (MPU4)", - "m4luck7", "Lucky 7 (Barcrest) (Dutch) (MPU4)", - "m4luckdv", "Lucky Devil (Barcrest) [Czech] (MPU4)", - "m4luckdvd", "Lucky Devil (Barcrest) [Dutch] (MPU4) (DLD)", - "m4lucklv", "Lucky Las Vegas (Barcrest) (MPU4) (set 1)", - "m4lucklv__0", "Lucky Las Vegas (Barcrest) (MPU4) (set 28)", - "m4lucklv__1", "Lucky Las Vegas (Barcrest) (MPU4) (set 29)", - "m4lucklv__2", "Lucky Las Vegas (Barcrest) (MPU4) (set 30)", - "m4lucklv__3", "Lucky Las Vegas (Barcrest) (MPU4) (set 31)", - "m4lucklv__4", "Lucky Las Vegas (Barcrest) (MPU4) (set 32)", - "m4lucklv__5", "Lucky Las Vegas (Barcrest) (MPU4) (set 33)", - "m4lucklv__6", "Lucky Las Vegas (Barcrest) (MPU4) (set 34)", - "m4lucklv__7", "Lucky Las Vegas (Barcrest) (MPU4) (set 35)", - "m4lucklv__8", "Lucky Las Vegas (Barcrest) (MPU4) (set 36)", - "m4lucklv__9", "Lucky Las Vegas (Barcrest) (MPU4) (set 37)", - "m4lucklv__a", "Lucky Las Vegas (Barcrest) (MPU4) (set 2)", - "m4lucklv__aa", "Lucky Las Vegas (Barcrest) (MPU4) (set 38)", - "m4lucklv__ab", "Lucky Las Vegas (Barcrest) (MPU4) (set 39)", - "m4lucklv__ac", "Lucky Las Vegas (Barcrest) (MPU4) (set 40)", - "m4lucklv__ad", "Lucky Las Vegas (Barcrest) (MPU4) (set 41)", - "m4lucklv__ae", "Lucky Las Vegas (Barcrest) (MPU4) (set 42)", - "m4lucklv__af", "Lucky Las Vegas (Barcrest) (MPU4) (set 43)", - "m4lucklv__ag", "Lucky Las Vegas (Barcrest) (MPU4) (set 44)", - "m4lucklv__ah", "Lucky Las Vegas (Barcrest) (MPU4) (set 45)", - "m4lucklv__ai", "Lucky Las Vegas (Barcrest) (MPU4) (set 46)", - "m4lucklv__b", "Lucky Las Vegas (Barcrest) (MPU4) (set 3)", - "m4lucklv__c", "Lucky Las Vegas (Barcrest) (MPU4) (set 4)", - "m4lucklv__d", "Lucky Las Vegas (Barcrest) (MPU4) (set 5)", - "m4lucklv__e", "Lucky Las Vegas (Barcrest) (MPU4) (set 6)", - "m4lucklv__f", "Lucky Las Vegas (Barcrest) (MPU4) (set 7)", - "m4lucklv__g", "Lucky Las Vegas (Barcrest) (MPU4) (set 8)", - "m4lucklv__h", "Lucky Las Vegas (Barcrest) (MPU4) (set 9)", - "m4lucklv__i", "Lucky Las Vegas (Barcrest) (MPU4) (set 10)", - "m4lucklv__j", "Lucky Las Vegas (Barcrest) (MPU4) (set 11)", - "m4lucklv__k", "Lucky Las Vegas (Barcrest) (MPU4) (set 12)", - "m4lucklv__l", "Lucky Las Vegas (Barcrest) (MPU4) (set 13)", - "m4lucklv__m", "Lucky Las Vegas (Barcrest) (MPU4) (set 14)", - "m4lucklv__n", "Lucky Las Vegas (Barcrest) (MPU4) (set 15)", - "m4lucklv__o", "Lucky Las Vegas (Barcrest) (MPU4) (set 16)", - "m4lucklv__p", "Lucky Las Vegas (Barcrest) (MPU4) (set 17)", - "m4lucklv__q", "Lucky Las Vegas (Barcrest) (MPU4) (set 18)", - "m4lucklv__r", "Lucky Las Vegas (Barcrest) (MPU4) (set 19)", - "m4lucklv__s", "Lucky Las Vegas (Barcrest) (MPU4) (set 20)", - "m4lucklv__t", "Lucky Las Vegas (Barcrest) (MPU4) (set 21)", - "m4lucklv__u", "Lucky Las Vegas (Barcrest) (MPU4) (set 22)", - "m4lucklv__v", "Lucky Las Vegas (Barcrest) (MPU4) (set 23)", - "m4lucklv__w", "Lucky Las Vegas (Barcrest) (MPU4) (set 24)", - "m4lucklv__x", "Lucky Las Vegas (Barcrest) (MPU4) (set 25)", - "m4lucklv__y", "Lucky Las Vegas (Barcrest) (MPU4) (set 26)", - "m4lucklv__z", "Lucky Las Vegas (Barcrest) (MPU4) (set 27)", - "m4lucksc", "Lucky Strike Club (Barcrest) (MPU4) (set 1)", - "m4lucksc__a", "Lucky Strike Club (Barcrest) (MPU4) (set 2)", - "m4lucksc__b", "Lucky Strike Club (Barcrest) (MPU4) (set 3)", - "m4lucksc__c", "Lucky Strike Club (Barcrest) (MPU4) (set 4)", - "m4lucksc__d", "Lucky Strike Club (Barcrest) (MPU4) (set 5)", - "m4lucksc__e", "Lucky Strike Club (Barcrest) (MPU4) (set 6)", - "m4lucksc__f", "Lucky Strike Club (Barcrest) (MPU4) (set 7)", - "m4lucksc__g", "Lucky Strike Club (Barcrest) (MPU4) (set 8)", - "m4lucksc__h", "Lucky Strike Club (Barcrest) (MPU4) (set 9)", - "m4lucksc__i", "Lucky Strike Club (Barcrest) (MPU4) (set 10)", - "m4lucksc__j", "Lucky Strike Club (Barcrest) (MPU4) (set 11)", - "m4lucksc__k", "Lucky Strike Club (Barcrest) (MPU4) (set 12)", - "m4lucksc__l", "Lucky Strike Club (Barcrest) (MPU4) (set 13)", - "m4luckst", "Lucky Strike (Barcrest) (MPU4) (set 1)", - "m4luckst__0", "Lucky Strike (Barcrest) (MPU4) (set 28)", - "m4luckst__1", "Lucky Strike (Barcrest) (MPU4) (set 29)", - "m4luckst__2", "Lucky Strike (Barcrest) (MPU4) (set 30)", - "m4luckst__3", "Lucky Strike (Barcrest) (MPU4) (set 31)", - "m4luckst__4", "Lucky Strike (Barcrest) (MPU4) (set 32)", - "m4luckst__5", "Lucky Strike (Barcrest) (MPU4) (set 33)", - "m4luckst__6", "Lucky Strike (Barcrest) (MPU4) (set 34)", - "m4luckst__7", "Lucky Strike (Barcrest) (MPU4) (set 35)", - "m4luckst__8", "Lucky Strike (Barcrest) (MPU4) (set 36)", - "m4luckst__9", "Lucky Strike (Barcrest) (MPU4) (set 37)", - "m4luckst__a", "Lucky Strike (Barcrest) (MPU4) (set 2)", - "m4luckst__aa", "Lucky Strike (Barcrest) (MPU4) (set 38)", - "m4luckst__ab", "Lucky Strike (Barcrest) (MPU4) (set 39)", - "m4luckst__ac", "Lucky Strike (Barcrest) (MPU4) (set 40)", - "m4luckst__ad", "Lucky Strike (Barcrest) (MPU4) (set 41)", - "m4luckst__ae", "Lucky Strike (Barcrest) (MPU4) (set 42)", - "m4luckst__af", "Lucky Strike (Barcrest) (MPU4) (set 43)", - "m4luckst__ag", "Lucky Strike (Barcrest) (MPU4) (set 44)", - "m4luckst__ah", "Lucky Strike (Barcrest) (MPU4) (set 45)", - "m4luckst__ai", "Lucky Strike (Barcrest) (MPU4) (set 46)", - "m4luckst__aj", "Lucky Strike (Barcrest) (MPU4) (set 47)", - "m4luckst__ak", "Lucky Strike (Barcrest) (MPU4) (set 48)", - "m4luckst__al", "Lucky Strike (Barcrest) (MPU4) (set 49)", - "m4luckst__am", "Lucky Strike (Barcrest) (MPU4) (set 50)", - "m4luckst__an", "Lucky Strike (Barcrest) (MPU4) (set 51)", - "m4luckst__ao", "Lucky Strike (Barcrest) (MPU4) (set 52)", - "m4luckst__ap", "Lucky Strike (Barcrest) (MPU4) (set 53)", - "m4luckst__aq", "Lucky Strike (Barcrest) (MPU4) (set 54)", - "m4luckst__ar", "Lucky Strike (Barcrest) (MPU4) (set 55)", - "m4luckst__as", "Lucky Strike (Barcrest) (MPU4) (set 56)", - "m4luckst__at", "Lucky Strike (Barcrest) (MPU4) (set 57)", - "m4luckst__au", "Lucky Strike (Barcrest) (MPU4) (set 58)", - "m4luckst__av", "Lucky Strike (Barcrest) (MPU4) (set 59)", - "m4luckst__aw", "Lucky Strike (Barcrest) (MPU4) (set 60)", - "m4luckst__b", "Lucky Strike (Barcrest) (MPU4) (set 3)", - "m4luckst__c", "Lucky Strike (Barcrest) (MPU4) (set 4)", - "m4luckst__d", "Lucky Strike (Barcrest) (MPU4) (set 5)", - "m4luckst__e", "Lucky Strike (Barcrest) (MPU4) (set 6)", - "m4luckst__f", "Lucky Strike (Barcrest) (MPU4) (set 7)", - "m4luckst__g", "Lucky Strike (Barcrest) (MPU4) (set 8)", - "m4luckst__h", "Lucky Strike (Barcrest) (MPU4) (set 9)", - "m4luckst__i", "Lucky Strike (Barcrest) (MPU4) (set 10)", - "m4luckst__j", "Lucky Strike (Barcrest) (MPU4) (set 11)", - "m4luckst__k", "Lucky Strike (Barcrest) (MPU4) (set 12)", - "m4luckst__l", "Lucky Strike (Barcrest) (MPU4) (set 13)", - "m4luckst__m", "Lucky Strike (Barcrest) (MPU4) (set 14)", - "m4luckst__n", "Lucky Strike (Barcrest) (MPU4) (set 15)", - "m4luckst__p", "Lucky Strike (Barcrest) (MPU4) (set 17)", - "m4luckst__q", "Lucky Strike (Barcrest) (MPU4) (set 18)", - "m4luckst__r", "Lucky Strike (Barcrest) (MPU4) (set 19)", - "m4luckst__s", "Lucky Strike (Barcrest) (MPU4) (set 20)", - "m4luckst__t", "Lucky Strike (Barcrest) (MPU4) (set 21)", - "m4luckst__u", "Lucky Strike (Barcrest) (MPU4) (set 22)", - "m4luckst__v", "Lucky Strike (Barcrest) (MPU4) (set 23)", - "m4luckst__w", "Lucky Strike (Barcrest) (MPU4) (set 24)", - "m4luckst__x", "Lucky Strike (Barcrest) (MPU4) (set 25)", - "m4luckst__y", "Lucky Strike (Barcrest) (MPU4) (set 26)", - "m4luckst__z", "Lucky Strike (Barcrest) (MPU4) (set 27)", - "m4luckwb", "Lucky Wild Boar (Barcrest) (MPU4) (set 1)", - "m4luckwba", "Lucky Wild Boar (Barcrest) (MPU4) (set 2)", - "m4luckwbb", "Lucky Wild Boar (Barcrest) (MPU4) (set 3)", - "m4luckwbc", "Lucky Wild Boar (Barcrest) (MPU4) (set 4)", - "m4luckwbd", "Lucky Wild Boar (Barcrest) (MPU4) (set 5)", - "m4luckwbe", "Lucky Wild Boar (Barcrest) (MPU4) (set 6)", - "m4luckwbf", "Lucky Wild Boar (Barcrest) (MPU4) (set 7)", - "m4luxor", "Luxor (Barcrest) (MPU4) (set 1)", - "m4luxor__a", "Luxor (Barcrest) (MPU4) (set 2)", - "m4luxor__b", "Luxor (Barcrest) (MPU4) (set 3)", - "m4luxor__c", "Luxor (Barcrest) (MPU4) (set 4)", - "m4luxor__d", "Luxor (Barcrest) (MPU4) (set 5)", - "m4luxor__e", "Luxor (Barcrest) (MPU4) (set 6)", - "m4luxor__f", "Luxor (Barcrest) (MPU4) (set 7)", - "m4luxor__g", "Luxor (Barcrest) (MPU4) (set 8)", - "m4luxor__h", "Luxor (Barcrest) (MPU4) (set 9)", - "m4luxor__i", "Luxor (Barcrest) (MPU4) (set 10)", - "m4luxor__j", "Luxor (Barcrest) (MPU4) (set 11)", - "m4luxor__k", "Luxor (Barcrest) (MPU4) (set 12)", - "m4luxor__l", "Luxor (Barcrest) (MPU4) (set 13)", - "m4luxor__m", "Luxor (Barcrest) (MPU4) (set 14)", - "m4luxor__n", "Luxor (Barcrest) (MPU4) (set 15)", - "m4luxor__o", "Luxor (Barcrest) (MPU4) (set 16)", - "m4luxor__p", "Luxor (Barcrest) (MPU4) (set 17)", - "m4luxor__q", "Luxor (Barcrest) (MPU4) (set 18)", - "m4luxor__r", "Luxor (Barcrest) (MPU4) (set 19)", - "m4luxor__s", "Luxor (Barcrest) (MPU4) (set 20)", - "m4luxor__t", "Luxor (Barcrest) (MPU4) (set 21)", - "m4luxor__u", "Luxor (Barcrest) (MPU4) (set 22)", - "m4luxor__v", "Luxor (Barcrest) (MPU4) (set 23)", - "m4luxor__w", "Luxor (Barcrest) (MPU4) (set 24)", - "m4luxor__x", "Luxor (Barcrest) (MPU4) (set 25)", - "m4luxor__y", "Luxor (Barcrest) (MPU4) (set 26)", - "m4luxor__z", "Luxor (Barcrest) (MPU4) (set 27)", - "m4lvlcl", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 1)", - "m4lvlcl__a", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 2)", - "m4lvlcl__b", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 3)", - "m4lvlcl__c", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 4)", - "m4lvlcl__d", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 5)", - "m4lvlcl__e", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 6)", - "m4lvlcl__f", "Lucky Las Vegas Classic (Barcrest) (MPU4) (set 7)", - "m4madhse", "Mad House (Barcrest) (MPU4) (set 1)", - "m4madhse__0", "Mad House (Barcrest) (MPU4) (set 28)", - "m4madhse__a", "Mad House (Barcrest) (MPU4) (set 2)", - "m4madhse__b", "Mad House (Barcrest) (MPU4) (set 3)", - "m4madhse__c", "Mad House (Barcrest) (MPU4) (set 4)", - "m4madhse__d", "Mad House (Barcrest) (MPU4) (set 5)", - "m4madhse__e", "Mad House (Barcrest) (MPU4) (set 6)", - "m4madhse__f", "Mad House (Barcrest) (MPU4) (set 7)", - "m4madhse__g", "Mad House (Barcrest) (MPU4) (set 8)", - "m4madhse__h", "Mad House (Barcrest) (MPU4) (set 9)", - "m4madhse__i", "Mad House (Barcrest) (MPU4) (set 10)", - "m4madhse__j", "Mad House (Barcrest) (MPU4) (set 11)", - "m4madhse__k", "Mad House (Barcrest) (MPU4) (set 12)", - "m4madhse__l", "Mad House (Barcrest) (MPU4) (set 13)", - "m4madhse__m", "Mad House (Barcrest) (MPU4) (set 14)", - "m4madhse__n", "Mad House (Barcrest) (MPU4) (set 15)", - "m4madhse__o", "Mad House (Barcrest) (MPU4) (set 16)", - "m4madhse__p", "Mad House (Barcrest) (MPU4) (set 17)", - "m4madhse__q", "Mad House (Barcrest) (MPU4) (set 18)", - "m4madhse__r", "Mad House (Barcrest) (MPU4) (set 19)", - "m4madhse__s", "Mad House (Barcrest) (MPU4) (set 20)", - "m4madhse__t", "Mad House (Barcrest) (MPU4) (set 21)", - "m4madhse__u", "Mad House (Barcrest) (MPU4) (set 22)", - "m4madhse__v", "Mad House (Barcrest) (MPU4) (set 23)", - "m4madhse__w", "Mad House (Barcrest) (MPU4) (set 24)", - "m4madhse__x", "Mad House (Barcrest) (MPU4) (set 25)", - "m4madhse__y", "Mad House (Barcrest) (MPU4) (set 26)", - "m4madhse__z", "Mad House (Barcrest) (MPU4) (set 27)", - "m4madmnc", "Mad Money Classic (Bwb) (MPU4) (set 1)", - "m4madmnc__a", "Mad Money Classic (Bwb) (MPU4) (set 2)", - "m4madmnc__b", "Mad Money Classic (Bwb) (MPU4) (set 3)", - "m4madmnc__c", "Mad Money Classic (Bwb) (MPU4) (set 4)", - "m4madmnc__d", "Mad Money Classic (Bwb) (MPU4) (set 5)", - "m4madmnc__e", "Mad Money Classic (Bwb) (MPU4) (set 6)", - "m4madmnc__f", "Mad Money Classic (Bwb) (MPU4) (set 7)", - "m4madmnc__g", "Mad Money Classic (Bwb) (MPU4) (set 8)", - "m4madmnc__h", "Mad Money Classic (Bwb) (MPU4) (set 9)", - "m4madmnc__i", "Mad Money Classic (Bwb) (MPU4) (set 10)", - "m4madmnc__j", "Mad Money Classic (Bwb) (MPU4) (set 11)", - "m4madmnc__k", "Mad Money Classic (Bwb) (MPU4) (set 12)", - "m4madmnc__l", "Mad Money Classic (Bwb) (MPU4) (set 13)", - "m4madmnc__m", "Mad Money Classic (Bwb) (MPU4) (set 14)", - "m4madmnc__n", "Mad Money Classic (Bwb) (MPU4) (set 15)", - "m4madmnc__o", "Mad Money Classic (Bwb) (MPU4) (set 16)", - "m4madmnc__p", "Mad Money Classic (Bwb) (MPU4) (set 17)", - "m4madmnc__q", "Mad Money Classic (Bwb) (MPU4) (set 18)", - "m4madmnc__r", "Mad Money Classic (Bwb) (MPU4) (set 19)", - "m4madmnc__s", "Mad Money Classic (Bwb) (MPU4) (set 20)", - "m4madmnc__t", "Mad Money Classic (Bwb) (MPU4) (set 21)", - "m4madmnc__u", "Mad Money Classic (Bwb) (MPU4) (set 22)", - "m4madmnc__v", "Mad Money Classic (Bwb) (MPU4) (set 23)", - "m4madmnc__w", "Mad Money Classic (Bwb) (MPU4) (set 24)", - "m4madmon", "Mad Money (Bwb) (MPU4) (set 1)", - "m4madmon__a", "Mad Money (Bwb) (MPU4) (set 2)", - "m4madmon__b", "Mad Money (Bwb) (MPU4) (set 3)", - "m4madmon__c", "Mad Money (Bwb) (MPU4) (set 4)", - "m4madmon__d", "Mad Money (Bwb) (MPU4) (set 5)", - "m4madmon__e", "Mad Money (Bwb) (MPU4) (set 6)", - "m4madmon__f", "Mad Money (Bwb) (MPU4) (set 7)", - "m4madmon__g", "Mad Money (Bwb) (MPU4) (set 8)", - "m4madmon__h", "Mad Money (Bwb) (MPU4) (set 9)", - "m4madmon__i", "Mad Money (Bwb) (MPU4) (set 10)", - "m4madmon__j", "Mad Money (Bwb) (MPU4) (set 11)", - "m4madmon__k", "Mad Money (Bwb) (MPU4) (set 12)", - "m4mag7s", "Magnificent 7s (Barcrest) (MPU4) (set 1)", - "m4mag7s__0", "Magnificent 7s (Barcrest) (MPU4) (set 28)", - "m4mag7s__1", "Magnificent 7s (Barcrest) (MPU4) (set 29)", - "m4mag7s__2", "Magnificent 7s (Barcrest) (MPU4) (set 30)", - "m4mag7s__3", "Magnificent 7s (Barcrest) (MPU4) (set 31)", - "m4mag7s__4", "Magnificent 7s (Barcrest) (MPU4) (set 32)", - "m4mag7s__5", "Magnificent 7s (Barcrest) (MPU4) (set 33)", - "m4mag7s__6", "Magnificent 7s (Barcrest) (MPU4) (set 34)", - "m4mag7s__7", "Magnificent 7s (Barcrest) (MPU4) (set 35)", - "m4mag7s__8", "Magnificent 7s (Barcrest) (MPU4) (set 36)", - "m4mag7s__9", "Magnificent 7s (Barcrest) (MPU4) (set 37)", - "m4mag7s__a", "Magnificent 7s (Barcrest) (MPU4) (set 2)", - "m4mag7s__aa", "Magnificent 7s (Barcrest) (MPU4) (set 38)", - "m4mag7s__ab", "Magnificent 7s (Barcrest) (MPU4) (set 39)", - "m4mag7s__ac", "Magnificent 7s (Barcrest) (MPU4) (set 40)", - "m4mag7s__ad", "Magnificent 7s (Barcrest) (MPU4) (set 41)", - "m4mag7s__ae", "Magnificent 7s (Barcrest) (MPU4) (set 42)", - "m4mag7s__af", "Magnificent 7s (Barcrest) (MPU4) (set 43)", - "m4mag7s__ag", "Magnificent 7s (Barcrest) (MPU4) (set 44)", - "m4mag7s__ah", "Magnificent 7s (Barcrest) (MPU4) (set 45)", - "m4mag7s__ai", "Magnificent 7s (Barcrest) (MPU4) (set 46)", - "m4mag7s__aj", "Magnificent 7s (Barcrest) (MPU4) (set 47)", - "m4mag7s__ak", "Magnificent 7s (Barcrest) (MPU4) (set 48)", - "m4mag7s__al", "Magnificent 7s (Barcrest) (MPU4) (set 49)", - "m4mag7s__am", "Magnificent 7s (Barcrest) (MPU4) (set 50)", - "m4mag7s__an", "Magnificent 7s (Barcrest) (MPU4) (set 51)", - "m4mag7s__ao", "Magnificent 7s (Barcrest) (MPU4) (set 52)", - "m4mag7s__ap", "Magnificent 7s (Barcrest) (MPU4) (set 53)", - "m4mag7s__aq", "Magnificent 7s (Barcrest) (MPU4) (set 54)", - "m4mag7s__ar", "Magnificent 7s (Barcrest) (MPU4) (set 55)", - "m4mag7s__as", "Magnificent 7s (Barcrest) (MPU4) (set 56)", - "m4mag7s__at", "Magnificent 7s (Barcrest) (MPU4) (set 57)", - "m4mag7s__au", "Magnificent 7s (Barcrest) (MPU4) (set 58)", - "m4mag7s__av", "Magnificent 7s (Barcrest) (MPU4) (set 59)", - "m4mag7s__aw", "Magnificent 7s (Barcrest) (MPU4) (set 60)", - "m4mag7s__ax", "Magnificent 7s (Barcrest) (MPU4) (set 61)", - "m4mag7s__b", "Magnificent 7s (Barcrest) (MPU4) (set 3)", - "m4mag7s__c", "Magnificent 7s (Barcrest) (MPU4) (set 4)", - "m4mag7s__d", "Magnificent 7s (Barcrest) (MPU4) (set 5)", - "m4mag7s__e", "Magnificent 7s (Barcrest) (MPU4) (set 6)", - "m4mag7s__f", "Magnificent 7s (Barcrest) (MPU4) (set 7)", - "m4mag7s__g", "Magnificent 7s (Barcrest) (MPU4) (set 8)", - "m4mag7s__h", "Magnificent 7s (Barcrest) (MPU4) (set 9)", - "m4mag7s__i", "Magnificent 7s (Barcrest) (MPU4) (set 10)", - "m4mag7s__j", "Magnificent 7s (Barcrest) (MPU4) (set 11)", - "m4mag7s__k", "Magnificent 7s (Barcrest) (MPU4) (set 12)", - "m4mag7s__l", "Magnificent 7s (Barcrest) (MPU4) (set 13)", - "m4mag7s__m", "Magnificent 7s (Barcrest) (MPU4) (set 14)", - "m4mag7s__n", "Magnificent 7s (Barcrest) (MPU4) (set 15)", - "m4mag7s__o", "Magnificent 7s (Barcrest) (MPU4) (set 16)", - "m4mag7s__p", "Magnificent 7s (Barcrest) (MPU4) (set 17)", - "m4mag7s__q", "Magnificent 7s (Barcrest) (MPU4) (set 18)", - "m4mag7s__r", "Magnificent 7s (Barcrest) (MPU4) (set 19)", - "m4mag7s__s", "Magnificent 7s (Barcrest) (MPU4) (set 20)", - "m4mag7s__t", "Magnificent 7s (Barcrest) (MPU4) (set 21)", - "m4mag7s__u", "Magnificent 7s (Barcrest) (MPU4) (set 22)", - "m4mag7s__v", "Magnificent 7s (Barcrest) (MPU4) (set 23)", - "m4mag7s__w", "Magnificent 7s (Barcrest) (MPU4) (set 24)", - "m4mag7s__x", "Magnificent 7s (Barcrest) (MPU4) (set 25)", - "m4mag7s__y", "Magnificent 7s (Barcrest) (MPU4) (set 26)", - "m4mag7s__z", "Magnificent 7s (Barcrest) (MPU4) (set 27)", - "m4magdrg", "Magic Dragon (Barcrest) (MPU4) (DMD1.0)", - "m4magi7", "Magic 7's (Crystal) (MPU4) (set 1)", - "m4magi7a", "Magic 7's (Crystal) (MPU4) (set 2)", - "m4maglin", "Magic Liner (Barcrest) (MPU4) (DMA2.1)", - "m4magrep", "Magic Replay (Barcrest) (Dutch) (MPU4)", - "m4magtbo", "Magic Turbo (Barcrest) (MPU4)", - "m4makmnt", "Make A Mint (Barcrest) (MPU4) (set 1)", - "m4makmnt__0", "Make A Mint (Barcrest) (MPU4) (set 28)", - "m4makmnt__1", "Make A Mint (Barcrest) (MPU4) (set 29)", - "m4makmnt__2", "Make A Mint (Barcrest) (MPU4) (set 30)", - "m4makmnt__3", "Make A Mint (Barcrest) (MPU4) (set 31)", - "m4makmnt__4", "Make A Mint (Barcrest) (MPU4) (set 32)", - "m4makmnt__5", "Make A Mint (Barcrest) (MPU4) (set 33)", - "m4makmnt__6", "Make A Mint (Barcrest) (MPU4) (set 34)", - "m4makmnt__7", "Make A Mint (Barcrest) (MPU4) (set 35)", - "m4makmnt__8", "Make A Mint (Barcrest) (MPU4) (set 36)", - "m4makmnt__9", "Make A Mint (Barcrest) (MPU4) (set 37)", - "m4makmnt__a", "Make A Mint (Barcrest) (MPU4) (set 2)", - "m4makmnt__aa", "Make A Mint (Barcrest) (MPU4) (set 38)", - "m4makmnt__ab", "Make A Mint (Barcrest) (MPU4) (set 39)", - "m4makmnt__ac", "Make A Mint (Barcrest) (MPU4) (set 40)", - "m4makmnt__ad", "Make A Mint (Barcrest) (MPU4) (set 41)", - "m4makmnt__ae", "Make A Mint (Barcrest) (MPU4) (set 42)", - "m4makmnt__af", "Make A Mint (Barcrest) (MPU4) (set 43)", - "m4makmnt__ag", "Make A Mint (Barcrest) (MPU4) (set 44)", - "m4makmnt__ah", "Make A Mint (Barcrest) (MPU4) (set 45)", - "m4makmnt__ai", "Make A Mint (Barcrest) (MPU4) (set 46)", - "m4makmnt__aj", "Make A Mint (Barcrest) (MPU4) (set 47)", - "m4makmnt__ak", "Make A Mint (Barcrest) (MPU4) (set 48)", - "m4makmnt__al", "Make A Mint (Barcrest) (MPU4) (set 49)", - "m4makmnt__am", "Make A Mint (Barcrest) (MPU4) (set 50)", - "m4makmnt__an", "Make A Mint (Barcrest) (MPU4) (set 51)", - "m4makmnt__ao", "Make A Mint (Barcrest) (MPU4) (set 52)", - "m4makmnt__ap", "Make A Mint (Barcrest) (MPU4) (set 53)", - "m4makmnt__aq", "Make A Mint (Barcrest) (MPU4) (set 54)", - "m4makmnt__ar", "Make A Mint (Barcrest) (MPU4) (set 55)", - "m4makmnt__as", "Make A Mint (Barcrest) (MPU4) (set 56)", - "m4makmnt__b", "Make A Mint (Barcrest) (MPU4) (set 3)", - "m4makmnt__c", "Make A Mint (Barcrest) (MPU4) (set 4)", - "m4makmnt__d", "Make A Mint (Barcrest) (MPU4) (set 5)", - "m4makmnt__e", "Make A Mint (Barcrest) (MPU4) (set 6)", - "m4makmnt__f", "Make A Mint (Barcrest) (MPU4) (set 7)", - "m4makmnt__g", "Make A Mint (Barcrest) (MPU4) (set 8)", - "m4makmnt__h", "Make A Mint (Barcrest) (MPU4) (set 9)", - "m4makmnt__i", "Make A Mint (Barcrest) (MPU4) (set 10)", - "m4makmnt__j", "Make A Mint (Barcrest) (MPU4) (set 11)", - "m4makmnt__k", "Make A Mint (Barcrest) (MPU4) (set 12)", - "m4makmnt__l", "Make A Mint (Barcrest) (MPU4) (set 13)", - "m4makmnt__m", "Make A Mint (Barcrest) (MPU4) (set 14)", - "m4makmnt__n", "Make A Mint (Barcrest) (MPU4) (set 15)", - "m4makmnt__o", "Make A Mint (Barcrest) (MPU4) (set 16)", - "m4makmnt__p", "Make A Mint (Barcrest) (MPU4) (set 17)", - "m4makmnt__q", "Make A Mint (Barcrest) (MPU4) (set 18)", - "m4makmnt__r", "Make A Mint (Barcrest) (MPU4) (set 19)", - "m4makmnt__s", "Make A Mint (Barcrest) (MPU4) (set 20)", - "m4makmnt__t", "Make A Mint (Barcrest) (MPU4) (set 21)", - "m4makmnt__u", "Make A Mint (Barcrest) (MPU4) (set 22)", - "m4makmnt__v", "Make A Mint (Barcrest) (MPU4) (set 23)", - "m4makmnt__w", "Make A Mint (Barcrest) (MPU4) (set 24)", - "m4makmnt__x", "Make A Mint (Barcrest) (MPU4) (set 25)", - "m4makmnt__y", "Make A Mint (Barcrest) (MPU4) (set 26)", - "m4makmnt__z", "Make A Mint (Barcrest) (MPU4) (set 27)", - "m4matdr", "Matador (unknown) (MPU4?)", - "m4maxmze", "Maximize (Union) (MPU4, set 1)", - "m4maxmzea", "Maximize (Union) (MPU4, set 2)", - "m4maxmzeb", "Maximize (Union) (MPU4, set 3)", - "m4maxmzec", "Maximize (Union) (MPU4, set 4)", - "m4maxmzed", "Maximize (Union) (MPU4, set 5)", - "m4mayhem", "Mayhem (Mdm) (MPU4, set 1)", - "m4mayhema", "Mayhem (Mdm) (MPU4, set 2)", - "m4mbel", "Millennium Bells (Avantime?) (MPU4) (set 1)", - "m4mbel__0", "Millennium Bells (Avantime?) (MPU4) (set 28)", - "m4mbel__1", "Millennium Bells (Avantime?) (MPU4) (set 29)", - "m4mbel__2", "Millennium Bells (Avantime?) (MPU4) (set 30)", - "m4mbel__3", "Millennium Bells (Avantime?) (MPU4) (set 31)", - "m4mbel__4", "Millennium Bells (Avantime?) (MPU4) (set 32)", - "m4mbel__5", "Millennium Bells (Avantime?) (MPU4) (set 33)", - "m4mbel__6", "Millennium Bells (Avantime?) (MPU4) (set 34)", - "m4mbel__7", "Millennium Bells (Avantime?) (MPU4) (set 35)", - "m4mbel__8", "Millennium Bells (Avantime?) (MPU4) (set 36)", - "m4mbel__9", "Millennium Bells (Avantime?) (MPU4) (set 37)", - "m4mbel__a", "Millennium Bells (Avantime?) (MPU4) (set 2)", - "m4mbel__a0", "Millennium Bells (Avantime?) (MPU4) (set 64)", - "m4mbel__aa", "Millennium Bells (Avantime?) (MPU4) (set 38)", - "m4mbel__ab", "Millennium Bells (Avantime?) (MPU4) (set 39)", - "m4mbel__ac", "Millennium Bells (Avantime?) (MPU4) (set 40)", - "m4mbel__ad", "Millennium Bells (Avantime?) (MPU4) (set 41)", - "m4mbel__ae", "Millennium Bells (Avantime?) (MPU4) (set 42)", - "m4mbel__af", "Millennium Bells (Avantime?) (MPU4) (set 43)", - "m4mbel__ag", "Millennium Bells (Avantime?) (MPU4) (set 44)", - "m4mbel__ah", "Millennium Bells (Avantime?) (MPU4) (set 45)", - "m4mbel__ai", "Millennium Bells (Avantime?) (MPU4) (set 46)", - "m4mbel__aj", "Millennium Bells (Avantime?) (MPU4) (set 47)", - "m4mbel__ak", "Millennium Bells (Avantime?) (MPU4) (set 48)", - "m4mbel__al", "Millennium Bells (Avantime?) (MPU4) (set 49)", - "m4mbel__am", "Millennium Bells (Avantime?) (MPU4) (set 50)", - "m4mbel__an", "Millennium Bells (Avantime?) (MPU4) (set 51)", - "m4mbel__ao", "Millennium Bells (Avantime?) (MPU4) (set 52)", - "m4mbel__ap", "Millennium Bells (Avantime?) (MPU4) (set 53)", - "m4mbel__aq", "Millennium Bells (Avantime?) (MPU4) (set 54)", - "m4mbel__ar", "Millennium Bells (Avantime?) (MPU4) (set 55)", - "m4mbel__as", "Millennium Bells (Avantime?) (MPU4) (set 56)", - "m4mbel__at", "Millennium Bells (Avantime?) (MPU4) (set 57)", - "m4mbel__au", "Millennium Bells (Avantime?) (MPU4) (set 58)", - "m4mbel__av", "Millennium Bells (Avantime?) (MPU4) (set 59)", - "m4mbel__aw", "Millennium Bells (Avantime?) (MPU4) (set 60)", - "m4mbel__ax", "Millennium Bells (Avantime?) (MPU4) (set 61)", - "m4mbel__ay", "Millennium Bells (Avantime?) (MPU4) (set 62)", - "m4mbel__az", "Millennium Bells (Avantime?) (MPU4) (set 63)", - "m4mbel__b", "Millennium Bells (Avantime?) (MPU4) (set 3)", - "m4mbel__c", "Millennium Bells (Avantime?) (MPU4) (set 4)", - "m4mbel__d", "Millennium Bells (Avantime?) (MPU4) (set 5)", - "m4mbel__e", "Millennium Bells (Avantime?) (MPU4) (set 6)", - "m4mbel__f", "Millennium Bells (Avantime?) (MPU4) (set 7)", - "m4mbel__g", "Millennium Bells (Avantime?) (MPU4) (set 8)", - "m4mbel__h", "Millennium Bells (Avantime?) (MPU4) (set 9)", - "m4mbel__i", "Millennium Bells (Avantime?) (MPU4) (set 10)", - "m4mbel__j", "Millennium Bells (Avantime?) (MPU4) (set 11)", - "m4mbel__k", "Millennium Bells (Avantime?) (MPU4) (set 12)", - "m4mbel__m", "Millennium Bells (Avantime?) (MPU4) (set 14)", - "m4mbel__n", "Millennium Bells (Avantime?) (MPU4) (set 15)", - "m4mbel__o", "Millennium Bells (Avantime?) (MPU4) (set 16)", - "m4mbel__p", "Millennium Bells (Avantime?) (MPU4) (set 17)", - "m4mbel__q", "Millennium Bells (Avantime?) (MPU4) (set 18)", - "m4mbel__r", "Millennium Bells (Avantime?) (MPU4) (set 19)", - "m4mbel__s", "Millennium Bells (Avantime?) (MPU4) (set 20)", - "m4mbel__t", "Millennium Bells (Avantime?) (MPU4) (set 21)", - "m4mbel__u", "Millennium Bells (Avantime?) (MPU4) (set 22)", - "m4mbel__v", "Millennium Bells (Avantime?) (MPU4) (set 23)", - "m4mbel__w", "Millennium Bells (Avantime?) (MPU4) (set 24)", - "m4mbel__x", "Millennium Bells (Avantime?) (MPU4) (set 25)", - "m4mbel__y", "Millennium Bells (Avantime?) (MPU4) (set 26)", - "m4mbel__z", "Millennium Bells (Avantime?) (MPU4) (set 27)", - "m4mecca", "Mecca Money (Union) (MPU4)", - "m4megbks", "Mega Bucks (Barcrest) (MPU4) (BUC 4.1X)", - "m4megbksa", "Mega Bucks (Barcrest) (MPU4) (BUC 4.1CX)", - "m4megbksb", "Mega Bucks (Barcrest) (MPU4) (BUC 4.1XD)", - "m4megbksc", "Mega Bucks (Barcrest) (MPU4) (BUC 3.1)", - "m4meglnk", "Megalink (Barcrest) (Dutch) (MPU4)", - "m4mgpn", "Monaco Grand Prix (Nova) (MPU4)", - "m4milclb", "Millionaire's Club (Barcrest) (MPU4) (set 1)", - "m4milclba", "Millionaire's Club (Barcrest) (MPU4) (set 2)", - "m4milclbb", "Millionaire's Club (Barcrest) (MPU4) (set 3)", - "m4milclbc", "Millionaire's Club (Barcrest) (MPU4) (set 4)", - "m4milclbd", "Millionaire's Club (Barcrest) (MPU4) (set 5)", - "m4milrou", "Millennium Roulette (Avantime?) (MPU4) (set 1)", - "m4milrou__a", "Millennium Roulette (Avantime?) (MPU4) (set 2)", - "m4mirage", "Mirage (Barcrest) (MPU4) (RAG 4.1)", - "m4mjp", "Mega Jackpot (Avantime?) (MPU4) (set 1)", - "m4mjp__a", "Mega Jackpot (Avantime?) (MPU4) (set 2)", - "m4mjp__b", "Mega Jackpot (Avantime?) (MPU4) (set 3)", - "m4mjp__c", "Mega Jackpot (Avantime?) (MPU4) (set 4)", - "m4mjp__d", "Mega Jackpot (Avantime?) (MPU4) (set 5)", - "m4mjp__e", "Mega Jackpot (Avantime?) (MPU4) (set 6)", - "m4mjp__f", "Mega Jackpot (Avantime?) (MPU4) (set 7)", - "m4mjp__g", "Mega Jackpot (Avantime?) (MPU4) (set 8)", - "m4mmm", "Money Mummy Money (Bwb) (MPU4) (set 1)", - "m4mmm__a", "Money Mummy Money (Bwb) (MPU4) (set 2)", - "m4mmm__b", "Money Mummy Money (Bwb) (MPU4) (set 3)", - "m4mmm__c", "Money Mummy Money (Bwb) (MPU4) (set 4)", - "m4mmm__d", "Money Mummy Money (Bwb) (MPU4) (set 5)", - "m4mmm__e", "Money Mummy Money (Bwb) (MPU4) (set 6)", - "m4mmm__f", "Money Mummy Money (Bwb) (MPU4) (set 7)", - "m4moneym", "Money Maker (Barcrest) (MPU4)", - "m4monspn", "Money Spinner (Empire) (MPU4, set 1)", - "m4monspna", "Money Spinner (Empire) (MPU4, set 2)", - "m4monspnb", "Money Spinner (Empire) (MPU4, set 3)", - "m4monte", "Monte Carlo (Barcrest) (MPU4) (set 1)", - "m4monte__a", "Monte Carlo (Barcrest) (MPU4) (set 2)", - "m4monte__b", "Monte Carlo (Barcrest) (MPU4) (set 3)", - "m4monte__c", "Monte Carlo (Barcrest) (MPU4) (set 4)", - "m4monte__d", "Monte Carlo (Barcrest) (MPU4) (set 5)", - "m4monte__e", "Monte Carlo (Barcrest) (MPU4) (set 6)", - "m4monte__f", "Monte Carlo (Barcrest) (MPU4) (set 7)", - "m4monte__g", "Monte Carlo (Barcrest) (MPU4) (set 8)", - "m4monte__h", "Monte Carlo (Barcrest) (MPU4) (set 9)", - "m4monte__i", "Monte Carlo (Barcrest) (MPU4) (set 10)", - "m4monte__j", "Monte Carlo (Barcrest) (MPU4) (set 11)", - "m4monte__k", "Monte Carlo (Barcrest) (MPU4) (set 12)", - "m4monte__l", "Monte Carlo (Barcrest) (MPU4) (set 13)", - "m4monte__m", "Monte Carlo (Barcrest) (MPU4) (set 14)", - "m4montrl", "Money Trail (Crystal) (MPU4) (set 1)", - "m4montrla", "Money Trail (Crystal) (MPU4) (set 2)", - "m4montrlb", "Money Trail (Crystal) (MPU4) (set 3)", - "m4montrlc", "Money Trail (Crystal) (MPU4) (set 4)", - "m4montrld", "Money Trail (Crystal) (MPU4) (set 5)", - "m4multcl", "Multiplay Club (Barcrest) (MPU4, MP 2.8)", - "m4multwy", "Multiway (Barcrest) (Dutch) (MPU4)", - "m4mystiq", "Mystique Club (Crystal) (MPU4) (set 1)", - "m4mystiqa", "Mystique Club (Crystal) (MPU4) (set 2)", - "m4mystiqb", "Mystique Club (Crystal) (MPU4) (set 3)", - "m4mystiqc", "Mystique Club (Crystal) (MPU4) (set 4)", - "m4ndup", "Nudge Double Up Deluxe (Crystal) (MPU4) (set 1)", - "m4ndupa", "Nudge Double Up Deluxe (Crystal) (MPU4) (set 2)", - "m4ndupb", "Nudge Double Up Deluxe (Crystal) (MPU4) (set 3)", - "m4ndupc", "Nudge Double Up Deluxe (Crystal) (MPU4) (set 4)", - "m4nhtt", "New Hit the Top (Barcrest) (MPU4) (set 1)", - "m4nhtt__a", "New Hit the Top (Barcrest) (MPU4) (set 2)", - "m4nhtt__b", "New Hit the Top (Barcrest) (MPU4) (set 3)", - "m4nhtt__c", "New Hit the Top (Barcrest) (MPU4) (set 4)", - "m4nhtt__d", "New Hit the Top (Barcrest) (MPU4) (set 5)", - "m4nhtt__e", "New Hit the Top (Barcrest) (MPU4) (set 6)", - "m4nhtt__f", "New Hit the Top (Barcrest) (MPU4) (set 7)", - "m4nhtt__g", "New Hit the Top (Barcrest) (MPU4) (set 8)", - "m4nhtt__h", "New Hit the Top (Barcrest) (MPU4) (set 9)", - "m4nhtt__i", "New Hit the Top (Barcrest) (MPU4) (set 10)", - "m4nhtt__j", "New Hit the Top (Barcrest) (MPU4) (set 11)", - "m4nick", "Nickelodeon (Barcrest) (MPU4) (set 1)", - "m4nicka", "Nickelodeon (Barcrest) (MPU4) (set 2)", - "m4nickb", "Nickelodeon (Barcrest) (MPU4) (set 3)", - "m4nickc", "Nickelodeon (Barcrest) (MPU4) (set 4)", - "m4nickd", "Nickelodeon (Barcrest) (MPU4) (set 5)", - "m4nicke", "Nickelodeon (Barcrest) (MPU4) (set 6)", - "m4nifty", "Nifty Fifty (Barcrest) (MPU4) (NF 2.0)", - "m4niftya", "Nifty Fifty (Barcrest) (MPU4) (NF 2.1, set 1)", - "m4niftyb", "Nifty Fifty (Barcrest) (MPU4) (NF 2.1, set 2)", - "m4nile", "Nile Jewels (Barcrest) (German) (MPU4) (GJN0.8)", - "m4nnww", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 1)", - "m4nnww__0", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 28)", - "m4nnww__1", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 29)", - "m4nnww__2", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 30)", - "m4nnww__3", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 31)", - "m4nnww__4", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 32)", - "m4nnww__5", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 33)", - "m4nnww__6", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 34)", - "m4nnww__7", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 35)", - "m4nnww__8", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 36)", - "m4nnww__9", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 37)", - "m4nnww__a", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 2)", - "m4nnww__aa", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 38)", - "m4nnww__ab", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 39)", - "m4nnww__ac", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 40)", - "m4nnww__ad", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 41)", - "m4nnww__ae", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 42)", - "m4nnww__af", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 43)", - "m4nnww__ag", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 44)", - "m4nnww__ah", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 45)", - "m4nnww__ai", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 46)", - "m4nnww__aj", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 47)", - "m4nnww__ak", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 48)", - "m4nnww__al", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 49)", - "m4nnww__am", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 50)", - "m4nnww__an", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 51)", - "m4nnww__ao", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 52)", - "m4nnww__ap", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 53)", - "m4nnww__aq", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 54)", - "m4nnww__ar", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 55)", - "m4nnww__as", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 56)", - "m4nnww__at", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 57)", - "m4nnww__au", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 58)", - "m4nnww__av", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 59)", - "m4nnww__aw", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 60)", - "m4nnww__ax", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 61)", - "m4nnww__ay", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 62)", - "m4nnww__az", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 63)", - "m4nnww__b", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 3)", - "m4nnww__c", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 4)", - "m4nnww__d", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 5)", - "m4nnww__e", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 6)", - "m4nnww__f", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 7)", - "m4nnww__g", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 8)", - "m4nnww__h", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 9)", - "m4nnww__i", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 10)", - "m4nnww__j", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 11)", - "m4nnww__k", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 12)", - "m4nnww__l", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 13)", - "m4nnww__m", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 14)", - "m4nnww__n", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 15)", - "m4nnww__o", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 16)", - "m4nnww__p", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 17)", - "m4nnww__q", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 18)", - "m4nnww__r", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 19)", - "m4nnww__s", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 20)", - "m4nnww__t", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 21)", - "m4nnww__u", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 22)", - "m4nnww__v", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 23)", - "m4nnww__w", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 24)", - "m4nnww__x", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 25)", - "m4nnww__y", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 26)", - "m4nnww__z", "Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 27)", - "m4nnwwc", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 1)", - "m4nnwwc__0", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 28)", - "m4nnwwc__1", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 29)", - "m4nnwwc__2", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 30)", - "m4nnwwc__3", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 31)", - "m4nnwwc__4", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 32)", - "m4nnwwc__5", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 33)", - "m4nnwwc__6", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 34)", - "m4nnwwc__7", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 35)", - "m4nnwwc__8", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 36)", - "m4nnwwc__9", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 37)", - "m4nnwwc__a", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 2)", - "m4nnwwc__aa", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 38)", - "m4nnwwc__ab", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 39)", - "m4nnwwc__ac", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 40)", - "m4nnwwc__ad", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 41)", - "m4nnwwc__b", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 3)", - "m4nnwwc__c", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 4)", - "m4nnwwc__d", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 5)", - "m4nnwwc__e", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 6)", - "m4nnwwc__f", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 7)", - "m4nnwwc__g", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 8)", - "m4nnwwc__h", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 9)", - "m4nnwwc__i", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 10)", - "m4nnwwc__j", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 11)", - "m4nnwwc__k", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 12)", - "m4nnwwc__l", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 13)", - "m4nnwwc__m", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 14)", - "m4nnwwc__n", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 15)", - "m4nnwwc__o", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 16)", - "m4nnwwc__p", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 17)", - "m4nnwwc__q", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 18)", - "m4nnwwc__r", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 19)", - "m4nnwwc__s", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 20)", - "m4nnwwc__t", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 21)", - "m4nnwwc__u", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 22)", - "m4nnwwc__v", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 23)", - "m4nnwwc__w", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 24)", - "m4nnwwc__x", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 25)", - "m4nnwwc__y", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 26)", - "m4nnwwc__z", "Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 27)", - "m4nod", "Nod And A Wink (Eurotech) (MPU4)", - "m4nspot", "Night Spot Club (Barcrest) (MPU4) (set 1)", - "m4nspota", "Night Spot Club (Barcrest) (MPU4) (set 2)", - "m4nspotb", "Night Spot Club (Barcrest) (MPU4) (set 3)", - "m4nud2p", "2p Nudger (Mdm?) (MPU4)", - "m4nudbnk", "Nudge Banker (Barcrest) (MPU4) (set 1)", - "m4nudbnk__a", "Nudge Banker (Barcrest) (MPU4) (set 2)", - "m4nudbnk__b", "Nudge Banker (Barcrest) (MPU4) (set 3)", - "m4nudbnk__c", "Nudge Banker (Barcrest) (MPU4) (set 4)", - "m4nudbnk__d", "Nudge Banker (Barcrest) (MPU4) (set 5)", - "m4nudbon", "Nudge Bonanza (Mdm) (MPU4, set 1)", - "m4nudbona", "Nudge Bonanza (Mdm) (MPU4, set 2)", - "m4nudgem", "Nudge Gems (Mdm) (MPU4)", - "m4nudgwc", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 1)", - "m4nudgwc__a", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 2)", - "m4nudgwc__b", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 3)", - "m4nudgwc__c", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 4)", - "m4nudgwc__d", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 5)", - "m4nudgwc__e", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 6)", - "m4nudgwc__f", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 7)", - "m4nudgwc__g", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 8)", - "m4nudgwc__h", "Nudge-A-Win (Concept Games Ltd) (MPU4) (set 9)", - "m4nudqst", "Nudge Quest (Barcrest) (MPU4) (NQ 2.0)", - "m4nudshf", "Nudge Shuffle (Barcrest) (MPU4) (set 1)", - "m4nudshfa", "Nudge Shuffle (Barcrest) (MPU4) (set 2)", - "m4nudshfb", "Nudge Shuffle (Barcrest) (MPU4) (set 3)", - "m4nudshfc", "Nudge Shuffle (Barcrest) (MPU4) (set 4)", - "m4nudup", "Nudge Up (Barcrest) (Dutch) (MPU4)", - "m4nudwin", "Nudge & Win (Crystal) (MPU4) (set 1)", - "m4nudwina", "Nudge & Win (Crystal) (MPU4) (set 2)", - "m4num1", "Number One (Barcrest) (Dutch) (MPU4)", - "m4oadrac", "Ooh Aah Dracula (Barcrest) (MPU4) (set 1)", - "m4oadrac__a", "Ooh Aah Dracula (Barcrest) (MPU4) (set 2)", - "m4oadrac__b", "Ooh Aah Dracula (Barcrest) (MPU4) (set 3)", - "m4oadrac__c", "Ooh Aah Dracula (Barcrest) (MPU4) (set 4)", - "m4oadrac__d", "Ooh Aah Dracula (Barcrest) (MPU4) (set 5)", - "m4oadrac__e", "Ooh Aah Dracula (Barcrest) (MPU4) (set 6)", - "m4oadrac__f", "Ooh Aah Dracula (Barcrest) (MPU4) (set 7)", - "m4oadrac__g", "Ooh Aah Dracula (Barcrest) (MPU4) (set 8)", - "m4oadrac__h", "Ooh Aah Dracula (Barcrest) (MPU4) (set 9)", - "m4octo", "Octopus (Nova) (MPU4)", - "m4oldtmr", "Old Timer (Barcrest) (Dutch) (MPU4) (DOT1.1)", - "m4olygn", "Olympic Gold (German) (Nova) (MPU4) (set 1)", - "m4olygn__a", "Olympic Gold (German) (Nova) (MPU4) (set 2)", - "m4omega", "Omega (Barcrest) (Dutch) (MPU4)", - "m4ordmnd", "Oriental Diamonds (Barcrest) (German) (MPU4)", - "m4orland", "Orlando Magic (Bwb) (MPU4) (set 1)", - "m4orland__a", "Orlando Magic (Bwb) (MPU4) (set 2)", - "m4orland__b", "Orlando Magic (Bwb) (MPU4) (set 3)", - "m4orland__c", "Orlando Magic (Bwb) (MPU4) (set 4)", - "m4orland__d", "Orlando Magic (Bwb) (MPU4) (set 5)", - "m4orland__e", "Orlando Magic (Bwb) (MPU4) (set 6)", - "m4orland__f", "Orlando Magic (Bwb) (MPU4) (set 7)", - "m4orland__g", "Orlando Magic (Bwb) (MPU4) (set 8)", - "m4orland__h", "Orlando Magic (Bwb) (MPU4) (set 9)", - "m4overmn", "Over The Moon (Barcrest) (MPU4) (set 1)", - "m4overmn__0", "Over The Moon (Barcrest) (MPU4) (set 28)", - "m4overmn__1", "Over The Moon (Barcrest) (MPU4) (set 29)", - "m4overmn__2", "Over The Moon (Barcrest) (MPU4) (set 30)", - "m4overmn__3", "Over The Moon (Barcrest) (MPU4) (set 31)", - "m4overmn__4", "Over The Moon (Barcrest) (MPU4) (set 32)", - "m4overmn__5", "Over The Moon (Barcrest) (MPU4) (set 33)", - "m4overmn__6", "Over The Moon (Barcrest) (MPU4) (set 34)", - "m4overmn__7", "Over The Moon (Barcrest) (MPU4) (set 35)", - "m4overmn__8", "Over The Moon (Barcrest) (MPU4) (set 36)", - "m4overmn__a", "Over The Moon (Barcrest) (MPU4) (set 2)", - "m4overmn__b", "Over The Moon (Barcrest) (MPU4) (set 3)", - "m4overmn__c", "Over The Moon (Barcrest) (MPU4) (set 4)", - "m4overmn__d", "Over The Moon (Barcrest) (MPU4) (set 5)", - "m4overmn__e", "Over The Moon (Barcrest) (MPU4) (set 6)", - "m4overmn__f", "Over The Moon (Barcrest) (MPU4) (set 7)", - "m4overmn__g", "Over The Moon (Barcrest) (MPU4) (set 8)", - "m4overmn__h", "Over The Moon (Barcrest) (MPU4) (set 9)", - "m4overmn__i", "Over The Moon (Barcrest) (MPU4) (set 10)", - "m4overmn__j", "Over The Moon (Barcrest) (MPU4) (set 11)", - "m4overmn__k", "Over The Moon (Barcrest) (MPU4) (set 12)", - "m4overmn__l", "Over The Moon (Barcrest) (MPU4) (set 13)", - "m4overmn__m", "Over The Moon (Barcrest) (MPU4) (set 14)", - "m4overmn__n", "Over The Moon (Barcrest) (MPU4) (set 15)", - "m4overmn__o", "Over The Moon (Barcrest) (MPU4) (set 16)", - "m4overmn__p", "Over The Moon (Barcrest) (MPU4) (set 17)", - "m4overmn__q", "Over The Moon (Barcrest) (MPU4) (set 18)", - "m4overmn__r", "Over The Moon (Barcrest) (MPU4) (set 19)", - "m4overmn__s", "Over The Moon (Barcrest) (MPU4) (set 20)", - "m4overmn__t", "Over The Moon (Barcrest) (MPU4) (set 21)", - "m4overmn__u", "Over The Moon (Barcrest) (MPU4) (set 22)", - "m4overmn__v", "Over The Moon (Barcrest) (MPU4) (set 23)", - "m4overmn__w", "Over The Moon (Barcrest) (MPU4) (set 24)", - "m4overmn__x", "Over The Moon (Barcrest) (MPU4) (set 25)", - "m4overmn__y", "Over The Moon (Barcrest) (MPU4) (set 26)", - "m4overmn__z", "Over The Moon (Barcrest) (MPU4) (set 27)", - "m4paracl", "Paradise Club (Crystal) (MPU4) (set 1)", - "m4paracla", "Paradise Club (Crystal) (MPU4) (set 2)", - "m4pbnudg", "Pinball Nudger (Empire) (MPU4, set 1)", - "m4pbnudga", "Pinball Nudger (Empire) (MPU4, set 2)", - "m4pbnudgb", "Pinball Nudger (Empire) (MPU4, set 3)", - "m4pick", "Pick A Fruit (JPM) (MPU4)", - "m4pitfal", "Pitfall (Empire) (MPU4, set 1)", - "m4pitfala", "Pitfall (Empire) (MPU4, set 2)", - "m4pitfalb", "Pitfall (Empire) (MPU4, set 3)", - "m4pitfalc", "Pitfall (Empire) (MPU4, set 4)", - "m4placbt", "Place Your Bets (Barcrest) (MPU4) (set 1)", - "m4placbt__0", "Place Your Bets (Barcrest) (MPU4) (set 28)", - "m4placbt__1", "Place Your Bets (Barcrest) (MPU4) (set 29)", - "m4placbt__2", "Place Your Bets (Barcrest) (MPU4) (set 30)", - "m4placbt__3", "Place Your Bets (Barcrest) (MPU4) (set 31)", - "m4placbt__4", "Place Your Bets (Barcrest) (MPU4) (set 32)", - "m4placbt__5", "Place Your Bets (Barcrest) (MPU4) (set 33)", - "m4placbt__6", "Place Your Bets (Barcrest) (MPU4) (set 34)", - "m4placbt__7", "Place Your Bets (Barcrest) (MPU4) (set 35)", - "m4placbt__8", "Place Your Bets (Barcrest) (MPU4) (set 36)", - "m4placbt__9", "Place Your Bets (Barcrest) (MPU4) (set 37)", - "m4placbt__a", "Place Your Bets (Barcrest) (MPU4) (set 2)", - "m4placbt__aa", "Place Your Bets (Barcrest) (MPU4) (set 38)", - "m4placbt__ab", "Place Your Bets (Barcrest) (MPU4) (set 39)", - "m4placbt__ac", "Place Your Bets (Barcrest) (MPU4) (set 40)", - "m4placbt__ad", "Place Your Bets (Barcrest) (MPU4) (set 41)", - "m4placbt__ae", "Place Your Bets (Barcrest) (MPU4) (set 42)", - "m4placbt__af", "Place Your Bets (Barcrest) (MPU4) (set 43)", - "m4placbt__ag", "Place Your Bets (Barcrest) (MPU4) (set 44)", - "m4placbt__ah", "Place Your Bets (Barcrest) (MPU4) (set 45)", - "m4placbt__ai", "Place Your Bets (Barcrest) (MPU4) (set 46)", - "m4placbt__aj", "Place Your Bets (Barcrest) (MPU4) (set 47)", - "m4placbt__ak", "Place Your Bets (Barcrest) (MPU4) (set 48)", - "m4placbt__al", "Place Your Bets (Barcrest) (MPU4) (set 49)", - "m4placbt__am", "Place Your Bets (Barcrest) (MPU4) (set 50)", - "m4placbt__an", "Place Your Bets (Barcrest) (MPU4) (set 51)", - "m4placbt__ao", "Place Your Bets (Barcrest) (MPU4) (set 52)", - "m4placbt__b", "Place Your Bets (Barcrest) (MPU4) (set 3)", - "m4placbt__c", "Place Your Bets (Barcrest) (MPU4) (set 4)", - "m4placbt__d", "Place Your Bets (Barcrest) (MPU4) (set 5)", - "m4placbt__e", "Place Your Bets (Barcrest) (MPU4) (set 6)", - "m4placbt__f", "Place Your Bets (Barcrest) (MPU4) (set 7)", - "m4placbt__g", "Place Your Bets (Barcrest) (MPU4) (set 8)", - "m4placbt__h", "Place Your Bets (Barcrest) (MPU4) (set 9)", - "m4placbt__i", "Place Your Bets (Barcrest) (MPU4) (set 10)", - "m4placbt__j", "Place Your Bets (Barcrest) (MPU4) (set 11)", - "m4placbt__k", "Place Your Bets (Barcrest) (MPU4) (set 12)", - "m4placbt__l", "Place Your Bets (Barcrest) (MPU4) (set 13)", - "m4placbt__m", "Place Your Bets (Barcrest) (MPU4) (set 14)", - "m4placbt__n", "Place Your Bets (Barcrest) (MPU4) (set 15)", - "m4placbt__o", "Place Your Bets (Barcrest) (MPU4) (set 16)", - "m4placbt__p", "Place Your Bets (Barcrest) (MPU4) (set 17)", - "m4placbt__q", "Place Your Bets (Barcrest) (MPU4) (set 18)", - "m4placbt__r", "Place Your Bets (Barcrest) (MPU4) (set 19)", - "m4placbt__s", "Place Your Bets (Barcrest) (MPU4) (set 20)", - "m4placbt__t", "Place Your Bets (Barcrest) (MPU4) (set 21)", - "m4placbt__u", "Place Your Bets (Barcrest) (MPU4) (set 22)", - "m4placbt__v", "Place Your Bets (Barcrest) (MPU4) (set 23)", - "m4placbt__w", "Place Your Bets (Barcrest) (MPU4) (set 24)", - "m4placbt__x", "Place Your Bets (Barcrest) (MPU4) (set 25)", - "m4placbt__y", "Place Your Bets (Barcrest) (MPU4) (set 26)", - "m4placbt__z", "Place Your Bets (Barcrest) (MPU4) (set 27)", - "m4pont", "Pontoon Club (Barcrest) (MPU4) (PON 3.0)", - "m4ponta", "Pontoon Club (Barcrest) (MPU4) (PON 4.0)", - "m4potblk", "Pot Black (Barcrest) (MPU4) (set 1)", - "m4potblk__0", "Pot Black (Barcrest) (MPU4) (set 28)", - "m4potblk__1", "Pot Black (Barcrest) (MPU4) (set 29)", - "m4potblk__2", "Pot Black (Barcrest) (MPU4) (set 30)", - "m4potblk__3", "Pot Black (Barcrest) (MPU4) (set 31)", - "m4potblk__4", "Pot Black (Barcrest) (MPU4) (set 32)", - "m4potblk__5", "Pot Black (Barcrest) (MPU4) (set 33)", - "m4potblk__6", "Pot Black (Barcrest) (MPU4) (set 34)", - "m4potblk__7", "Pot Black (Barcrest) (MPU4) (set 35)", - "m4potblk__8", "Pot Black (Barcrest) (MPU4) (set 36)", - "m4potblk__9", "Pot Black (Barcrest) (MPU4) (set 37)", - "m4potblk__a", "Pot Black (Barcrest) (MPU4) (set 2)", - "m4potblk__aa", "Pot Black (Barcrest) (MPU4) (set 38)", - "m4potblk__ab", "Pot Black (Barcrest) (MPU4) (set 39)", - "m4potblk__ac", "Pot Black (Barcrest) (MPU4) (set 40)", - "m4potblk__ad", "Pot Black (Barcrest) (MPU4) (set 41)", - "m4potblk__ae", "Pot Black (Barcrest) (MPU4) (set 42)", - "m4potblk__af", "Pot Black (Barcrest) (MPU4) (set 43)", - "m4potblk__ag", "Pot Black (Barcrest) (MPU4) (set 44)", - "m4potblk__ah", "Pot Black (Barcrest) (MPU4) (set 45)", - "m4potblk__ai", "Pot Black (Barcrest) (MPU4) (set 46)", - "m4potblk__aj", "Pot Black (Barcrest) (MPU4) (set 47)", - "m4potblk__ak", "Pot Black (Barcrest) (MPU4) (set 48)", - "m4potblk__al", "Pot Black (Barcrest) (MPU4) (set 49)", - "m4potblk__am", "Pot Black (Barcrest) (MPU4) (set 50)", - "m4potblk__an", "Pot Black (Barcrest) (MPU4) (set 51)", - "m4potblk__ao", "Pot Black (Barcrest) (MPU4) (set 52)", - "m4potblk__ap", "Pot Black (Barcrest) (MPU4) (set 53)", - "m4potblk__aq", "Pot Black (Barcrest) (MPU4) (set 54)", - "m4potblk__ar", "Pot Black (Barcrest) (MPU4) (set 55)", - "m4potblk__as", "Pot Black (Barcrest) (MPU4) (set 56)", - "m4potblk__at", "Pot Black (Barcrest) (MPU4) (set 57)", - "m4potblk__au", "Pot Black (Barcrest) (MPU4) (set 58)", - "m4potblk__av", "Pot Black (Barcrest) (MPU4) (set 59)", - "m4potblk__aw", "Pot Black (Barcrest) (MPU4) (set 60)", - "m4potblk__ax", "Pot Black (Barcrest) (MPU4) (set 61)", - "m4potblk__b", "Pot Black (Barcrest) (MPU4) (set 3)", - "m4potblk__c", "Pot Black (Barcrest) (MPU4) (set 4)", - "m4potblk__d", "Pot Black (Barcrest) (MPU4) (set 5)", - "m4potblk__e", "Pot Black (Barcrest) (MPU4) (set 6)", - "m4potblk__f", "Pot Black (Barcrest) (MPU4) (set 7)", - "m4potblk__g", "Pot Black (Barcrest) (MPU4) (set 8)", - "m4potblk__h", "Pot Black (Barcrest) (MPU4) (set 9)", - "m4potblk__i", "Pot Black (Barcrest) (MPU4) (set 10)", - "m4potblk__j", "Pot Black (Barcrest) (MPU4) (set 11)", - "m4potblk__k", "Pot Black (Barcrest) (MPU4) (set 12)", - "m4potblk__l", "Pot Black (Barcrest) (MPU4) (set 13)", - "m4potblk__m", "Pot Black (Barcrest) (MPU4) (set 14)", - "m4potblk__n", "Pot Black (Barcrest) (MPU4) (set 15)", - "m4potblk__o", "Pot Black (Barcrest) (MPU4) (set 16)", - "m4potblk__p", "Pot Black (Barcrest) (MPU4) (set 17)", - "m4potblk__q", "Pot Black (Barcrest) (MPU4) (set 18)", - "m4potblk__r", "Pot Black (Barcrest) (MPU4) (set 19)", - "m4potblk__s", "Pot Black (Barcrest) (MPU4) (set 20)", - "m4potblk__t", "Pot Black (Barcrest) (MPU4) (set 21)", - "m4potblk__u", "Pot Black (Barcrest) (MPU4) (set 22)", - "m4potblk__v", "Pot Black (Barcrest) (MPU4) (set 23)", - "m4potblk__w", "Pot Black (Barcrest) (MPU4) (set 24)", - "m4potblk__x", "Pot Black (Barcrest) (MPU4) (set 25)", - "m4potblk__y", "Pot Black (Barcrest) (MPU4) (set 26)", - "m4potblk__z", "Pot Black (Barcrest) (MPU4) (set 27)", - "m4potlck", "Pot Luck 100 Club (Barcrest) (MPU4) (P1L 2.2)", - "m4potlcka", "Pot Luck 100 Club (Barcrest) (MPU4) (PL 2.7)", - "m4prem", "Premier (Barcrest) (MPU4) (DPM)", - "m4przdty", "Prize Duty Free (Barcrest) (MPU4) (set 1)", - "m4przdty__a", "Prize Duty Free (Barcrest) (MPU4) (set 2)", - "m4przdty__b", "Prize Duty Free (Barcrest) (MPU4) (set 3)", - "m4przdty__c", "Prize Duty Free (Barcrest) (MPU4) (set 4)", - "m4przdty__d", "Prize Duty Free (Barcrest) (MPU4) (set 5)", - "m4przdty__e", "Prize Duty Free (Barcrest) (MPU4) (set 6)", - "m4przdty__f", "Prize Duty Free (Barcrest) (MPU4) (set 7)", - "m4przdty__g", "Prize Duty Free (Barcrest) (MPU4) (set 8)", - "m4przdty__h", "Prize Duty Free (Barcrest) (MPU4) (set 9)", - "m4przdty__i", "Prize Duty Free (Barcrest) (MPU4) (set 10)", - "m4przdty__j", "Prize Duty Free (Barcrest) (MPU4) (set 11)", - "m4przdty__k", "Prize Duty Free (Barcrest) (MPU4) (set 12)", - "m4przdty__l", "Prize Duty Free (Barcrest) (MPU4) (set 13)", - "m4przdty__m", "Prize Duty Free (Barcrest) (MPU4) (set 14)", - "m4przdty__n", "Prize Duty Free (Barcrest) (MPU4) (set 15)", - "m4przdty__o", "Prize Duty Free (Barcrest) (MPU4) (set 16)", - "m4przdty__p", "Prize Duty Free (Barcrest) (MPU4) (set 17)", - "m4przfrt", "Prize Fruit & Loot (Barcrest) (MPU4) (set 1)", - "m4przfrt__a", "Prize Fruit & Loot (Barcrest) (MPU4) (set 2)", - "m4przfrt__b", "Prize Fruit & Loot (Barcrest) (MPU4) (set 3)", - "m4przfrt__c", "Prize Fruit & Loot (Barcrest) (MPU4) (set 4)", - "m4przfrt__d", "Prize Fruit & Loot (Barcrest) (MPU4) (set 5)", - "m4przfrt__e", "Prize Fruit & Loot (Barcrest) (MPU4) (set 6)", - "m4przfrt__f", "Prize Fruit & Loot (Barcrest) (MPU4) (set 7)", - "m4przfrt__g", "Prize Fruit & Loot (Barcrest) (MPU4) (set 8)", - "m4przfrt__h", "Prize Fruit & Loot (Barcrest) (MPU4) (set 9)", - "m4przfrt__i", "Prize Fruit & Loot (Barcrest) (MPU4) (set 10)", - "m4przfrt__j", "Prize Fruit & Loot (Barcrest) (MPU4) (set 11)", - "m4przfrt__k", "Prize Fruit & Loot (Barcrest) (MPU4) (set 12)", - "m4przfrt__l", "Prize Fruit & Loot (Barcrest) (MPU4) (set 13)", - "m4przhr", "Prize High Roller (Barcrest) (MPU4) (set 1)", - "m4przhr__a", "Prize High Roller (Barcrest) (MPU4) (set 2)", - "m4przhr__b", "Prize High Roller (Barcrest) (MPU4) (set 3)", - "m4przhr__c", "Prize High Roller (Barcrest) (MPU4) (set 4)", - "m4przhr__d", "Prize High Roller (Barcrest) (MPU4) (set 5)", - "m4przhr__e", "Prize High Roller (Barcrest) (MPU4) (set 6)", - "m4przhr__f", "Prize High Roller (Barcrest) (MPU4) (set 7)", - "m4przhr__g", "Prize High Roller (Barcrest) (MPU4) (set 8)", - "m4przhr__h", "Prize High Roller (Barcrest) (MPU4) (set 9)", - "m4przhr__i", "Prize High Roller (Barcrest) (MPU4) (set 10)", - "m4przhr__j", "Prize High Roller (Barcrest) (MPU4) (set 11)", - "m4przhr__k", "Prize High Roller (Barcrest) (MPU4) (set 12)", - "m4przhr__l", "Prize High Roller (Barcrest) (MPU4) (set 13)", - "m4przhr__m", "Prize High Roller (Barcrest) (MPU4) (set 14)", - "m4przhr__n", "Prize High Roller (Barcrest) (MPU4) (set 15)", - "m4przhr__o", "Prize High Roller (Barcrest) (MPU4) (set 16)", - "m4przhr__p", "Prize High Roller (Barcrest) (MPU4) (set 17)", - "m4przlux", "Prize Luxor (Barcrest) (MPU4) (set 1)", - "m4przlux__a", "Prize Luxor (Barcrest) (MPU4) (set 2)", - "m4przlux__b", "Prize Luxor (Barcrest) (MPU4) (set 3)", - "m4przlux__c", "Prize Luxor (Barcrest) (MPU4) (set 4)", - "m4przlux__d", "Prize Luxor (Barcrest) (MPU4) (set 5)", - "m4przlux__e", "Prize Luxor (Barcrest) (MPU4) (set 6)", - "m4przlux__f", "Prize Luxor (Barcrest) (MPU4) (set 7)", - "m4przmc", "Prize Monte Carlo (Barcrest) (MPU4) (set 1)", - "m4przmc__a", "Prize Monte Carlo (Barcrest) (MPU4) (set 2)", - "m4przmc__b", "Prize Monte Carlo (Barcrest) (MPU4) (set 3)", - "m4przmc__c", "Prize Monte Carlo (Barcrest) (MPU4) (set 4)", - "m4przmc__d", "Prize Monte Carlo (Barcrest) (MPU4) (set 5)", - "m4przmc__e", "Prize Monte Carlo (Barcrest) (MPU4) (set 6)", - "m4przmc__f", "Prize Monte Carlo (Barcrest) (MPU4) (set 7)", - "m4przmns", "Prize Money Showcase (Barcrest) (MPU4) (set 1)", - "m4przmns__a", "Prize Money Showcase (Barcrest) (MPU4) (set 2)", - "m4przmns__b", "Prize Money Showcase (Barcrest) (MPU4) (set 3)", - "m4przmns__c", "Prize Money Showcase (Barcrest) (MPU4) (set 4)", - "m4przmns__d", "Prize Money Showcase (Barcrest) (MPU4) (set 5)", - "m4przmns__e", "Prize Money Showcase (Barcrest) (MPU4) (set 6)", - "m4przmns__f", "Prize Money Showcase (Barcrest) (MPU4) (set 7)", - "m4przmns__g", "Prize Money Showcase (Barcrest) (MPU4) (set 8)", - "m4przmns__h", "Prize Money Showcase (Barcrest) (MPU4) (set 9)", - "m4przmns__i", "Prize Money Showcase (Barcrest) (MPU4) (set 10)", - "m4przmns__j", "Prize Money Showcase (Barcrest) (MPU4) (set 11)", - "m4przmns__k", "Prize Money Showcase (Barcrest) (MPU4) (set 12)", - "m4przmns__l", "Prize Money Showcase (Barcrest) (MPU4) (set 13)", - "m4przmns__m", "Prize Money Showcase (Barcrest) (MPU4) (set 14)", - "m4przmns__n", "Prize Money Showcase (Barcrest) (MPU4) (set 15)", - "m4przmon", "Prize Money (Barcrest) (MPU4) (set 1)", - "m4przmon__0", "Prize Money (Barcrest) (MPU4) (set 28)", - "m4przmon__1", "Prize Money (Barcrest) (MPU4) (set 29)", - "m4przmon__a", "Prize Money (Barcrest) (MPU4) (set 2)", - "m4przmon__b", "Prize Money (Barcrest) (MPU4) (set 3)", - "m4przmon__c", "Prize Money (Barcrest) (MPU4) (set 4)", - "m4przmon__d", "Prize Money (Barcrest) (MPU4) (set 5)", - "m4przmon__e", "Prize Money (Barcrest) (MPU4) (set 6)", - "m4przmon__f", "Prize Money (Barcrest) (MPU4) (set 7)", - "m4przmon__g", "Prize Money (Barcrest) (MPU4) (set 8)", - "m4przmon__h", "Prize Money (Barcrest) (MPU4) (set 9)", - "m4przmon__i", "Prize Money (Barcrest) (MPU4) (set 10)", - "m4przmon__j", "Prize Money (Barcrest) (MPU4) (set 11)", - "m4przmon__k", "Prize Money (Barcrest) (MPU4) (set 12)", - "m4przmon__l", "Prize Money (Barcrest) (MPU4) (set 13)", - "m4przmon__m", "Prize Money (Barcrest) (MPU4) (set 14)", - "m4przmon__n", "Prize Money (Barcrest) (MPU4) (set 15)", - "m4przmon__o", "Prize Money (Barcrest) (MPU4) (set 16)", - "m4przmon__p", "Prize Money (Barcrest) (MPU4) (set 17)", - "m4przmon__q", "Prize Money (Barcrest) (MPU4) (set 18)", - "m4przmon__r", "Prize Money (Barcrest) (MPU4) (set 19)", - "m4przmon__s", "Prize Money (Barcrest) (MPU4) (set 20)", - "m4przmon__t", "Prize Money (Barcrest) (MPU4) (set 21)", - "m4przmon__u", "Prize Money (Barcrest) (MPU4) (set 22)", - "m4przmon__v", "Prize Money (Barcrest) (MPU4) (set 23)", - "m4przmon__w", "Prize Money (Barcrest) (MPU4) (set 24)", - "m4przmon__x", "Prize Money (Barcrest) (MPU4) (set 25)", - "m4przmon__y", "Prize Money (Barcrest) (MPU4) (set 26)", - "m4przmon__z", "Prize Money (Barcrest) (MPU4) (set 27)", - "m4przrf", "Prize Rich And Famous (Barcrest) (MPU4) (set 1)", - "m4przrf__a", "Prize Rich And Famous (Barcrest) (MPU4) (set 2)", - "m4przrf__b", "Prize Rich And Famous (Barcrest) (MPU4) (set 3)", - "m4przrf__c", "Prize Rich And Famous (Barcrest) (MPU4) (set 4)", - "m4przrf__d", "Prize Rich And Famous (Barcrest) (MPU4) (set 5)", - "m4przrf__e", "Prize Rich And Famous (Barcrest) (MPU4) (set 6)", - "m4przrf__f", "Prize Rich And Famous (Barcrest) (MPU4) (set 7)", - "m4przrf__g", "Prize Rich And Famous (Barcrest) (MPU4) (set 8)", - "m4przrf__h", "Prize Rich And Famous (Barcrest) (MPU4) (set 9)", - "m4przrf__i", "Prize Rich And Famous (Barcrest) (MPU4) (set 10)", - "m4przrf__j", "Prize Rich And Famous (Barcrest) (MPU4) (set 11)", - "m4przrfm", "Prize Run For Your Money (Barcrest) (MPU4) (set 1)", - "m4przrfm__a", "Prize Run For Your Money (Barcrest) (MPU4) (set 2)", - "m4przrfm__b", "Prize Run For Your Money (Barcrest) (MPU4) (set 3)", - "m4przrfm__c", "Prize Run For Your Money (Barcrest) (MPU4) (set 4)", - "m4przrfm__d", "Prize Run For Your Money (Barcrest) (MPU4) (set 5)", - "m4przrfm__e", "Prize Run For Your Money (Barcrest) (MPU4) (set 6)", - "m4przrfm__f", "Prize Run For Your Money (Barcrest) (MPU4) (set 7)", - "m4przrfm__g", "Prize Run For Your Money (Barcrest) (MPU4) (set 8)", - "m4przrfm__h", "Prize Run For Your Money (Barcrest) (MPU4) (set 9)", - "m4przrfm__i", "Prize Run For Your Money (Barcrest) (MPU4) (set 10)", - "m4przrfm__j", "Prize Run For Your Money (Barcrest) (MPU4) (set 11)", - "m4przrfm__k", "Prize Run For Your Money (Barcrest) (MPU4) (set 12)", - "m4przrfm__l", "Prize Run For Your Money (Barcrest) (MPU4) (set 13)", - "m4przrfm__m", "Prize Run For Your Money (Barcrest) (MPU4) (set 14)", - "m4przrfm__n", "Prize Run For Your Money (Barcrest) (MPU4) (set 15)", - "m4przrfm__o", "Prize Run For Your Money (Barcrest) (MPU4) (set 16)", - "m4przsss", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 1)", - "m4przsss__0", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 28)", - "m4przsss__a", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 2)", - "m4przsss__b", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 3)", - "m4przsss__c", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 4)", - "m4przsss__d", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 5)", - "m4przsss__e", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 6)", - "m4przsss__f", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 7)", - "m4przsss__g", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 8)", - "m4przsss__h", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 9)", - "m4przsss__i", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 10)", - "m4przsss__j", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 11)", - "m4przsss__k", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 12)", - "m4przsss__l", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 13)", - "m4przsss__m", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 14)", - "m4przsss__n", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 15)", - "m4przsss__o", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 16)", - "m4przsss__p", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 17)", - "m4przsss__q", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 18)", - "m4przsss__r", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 19)", - "m4przsss__s", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 20)", - "m4przsss__t", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 21)", - "m4przsss__u", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 22)", - "m4przsss__v", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 23)", - "m4przsss__w", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 24)", - "m4przsss__x", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 25)", - "m4przsss__y", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 26)", - "m4przsss__z", "Prize Spend Spend Spend (Barcrest) (MPU4) (set 27)", - "m4przve", "Prize Viva Esapana (Barcrest) (MPU4) (set 1)", - "m4przve__a", "Prize Viva Esapana (Barcrest) (MPU4) (set 2)", - "m4przve__b", "Prize Viva Esapana (Barcrest) (MPU4) (set 3)", - "m4przve__c", "Prize Viva Esapana (Barcrest) (MPU4) (set 4)", - "m4przve__d", "Prize Viva Esapana (Barcrest) (MPU4) (set 5)", - "m4przve__e", "Prize Viva Esapana (Barcrest) (MPU4) (set 6)", - "m4przve__f", "Prize Viva Esapana (Barcrest) (MPU4) (set 7)", - "m4przve__g", "Prize Viva Esapana (Barcrest) (MPU4) (set 8)", - "m4przve__h", "Prize Viva Esapana (Barcrest) (MPU4) (set 9)", - "m4przve__i", "Prize Viva Esapana (Barcrest) (MPU4) (set 10)", - "m4przve__j", "Prize Viva Esapana (Barcrest) (MPU4) (set 11)", - "m4przve__k", "Prize Viva Esapana (Barcrest) (MPU4) (set 12)", - "m4przve__l", "Prize Viva Esapana (Barcrest) (MPU4) (set 13)", - "m4przve__m", "Prize Viva Esapana (Barcrest) (MPU4) (set 14)", - "m4przve__n", "Prize Viva Esapana (Barcrest) (MPU4) (set 15)", - "m4przve__o", "Prize Viva Esapana (Barcrest) (MPU4) (set 16)", - "m4przve__p", "Prize Viva Esapana (Barcrest) (MPU4) (set 17)", - "m4przwo", "Prize What's On (Barcrest) (MPU4) (set 1)", - "m4przwo__a", "Prize What's On (Barcrest) (MPU4) (set 2)", - "m4przwo__b", "Prize What's On (Barcrest) (MPU4) (set 3)", - "m4przwo__c", "Prize What's On (Barcrest) (MPU4) (set 4)", - "m4przwo__d", "Prize What's On (Barcrest) (MPU4) (set 5)", - "m4przwo__e", "Prize What's On (Barcrest) (MPU4) (set 6)", - "m4przwo__f", "Prize What's On (Barcrest) (MPU4) (set 7)", - "m4przwta", "Prize Winner Takes All (Barcrest) (MPU4) (set 1)", - "m4przwta__a", "Prize Winner Takes All (Barcrest) (MPU4) (set 2)", - "m4przwta__b", "Prize Winner Takes All (Barcrest) (MPU4) (set 3)", - "m4przwta__c", "Prize Winner Takes All (Barcrest) (MPU4) (set 4)", - "m4przwta__d", "Prize Winner Takes All (Barcrest) (MPU4) (set 5)", - "m4przwta__e", "Prize Winner Takes All (Barcrest) (MPU4) (set 6)", - "m4przwta__f", "Prize Winner Takes All (Barcrest) (MPU4) (set 7)", - "m4przwta__g", "Prize Winner Takes All (Barcrest) (MPU4) (set 8)", - "m4przwta__h", "Prize Winner Takes All (Barcrest) (MPU4) (set 9)", - "m4przwta__i", "Prize Winner Takes All (Barcrest) (MPU4) (set 10)", - "m4przwta__j", "Prize Winner Takes All (Barcrest) (MPU4) (set 11)", - "m4przwta__k", "Prize Winner Takes All (Barcrest) (MPU4) (set 12)", - "m4przwta__l", "Prize Winner Takes All (Barcrest) (MPU4) (set 13)", - "m4przwta__m", "Prize Winner Takes All (Barcrest) (MPU4) (set 14)", - "m4przwta__n", "Prize Winner Takes All (Barcrest) (MPU4) (set 15)", - "m4przwta__o", "Prize Winner Takes All (Barcrest) (MPU4) (set 16)", - "m4przwta__p", "Prize Winner Takes All (Barcrest) (MPU4) (set 17)", - "m4ptblkc", "Pot Black Casino (Bwb - Barcrest) (MPU4)", - "m4pulwnc", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 1)", - "m4pulwnc__0", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 28)", - "m4pulwnc__1", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 29)", - "m4pulwnc__2", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 30)", - "m4pulwnc__3", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 31)", - "m4pulwnc__4", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 32)", - "m4pulwnc__a", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 2)", - "m4pulwnc__b", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 3)", - "m4pulwnc__c", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 4)", - "m4pulwnc__d", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 5)", - "m4pulwnc__e", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 6)", - "m4pulwnc__f", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 7)", - "m4pulwnc__g", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 8)", - "m4pulwnc__h", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 9)", - "m4pulwnc__i", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 10)", - "m4pulwnc__j", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 11)", - "m4pulwnc__k", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 12)", - "m4pulwnc__l", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 13)", - "m4pulwnc__m", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 14)", - "m4pulwnc__n", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 15)", - "m4pulwnc__o", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 16)", - "m4pulwnc__p", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 17)", - "m4pulwnc__q", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 18)", - "m4pulwnc__r", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 19)", - "m4pulwnc__s", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 20)", - "m4pulwnc__t", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 21)", - "m4pulwnc__u", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 22)", - "m4pulwnc__v", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 23)", - "m4pulwnc__w", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 24)", - "m4pulwnc__x", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 25)", - "m4pulwnc__y", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 26)", - "m4pulwnc__z", "Pull-A-Win (Concept Games Ltd) (MPU4) (set 27)", - "m4purmad", "Pure Madness (Union)", - "m4pzbing", "Prize Bingo (Bwb) (MPU4) (set 1)", - "m4pzbing__a", "Prize Bingo (Bwb) (MPU4) (set 2)", - "m4pzbing__b", "Prize Bingo (Bwb) (MPU4) (set 3)", - "m4pzbing__c", "Prize Bingo (Bwb) (MPU4) (set 4)", - "m4pzbing__d", "Prize Bingo (Bwb) (MPU4) (set 5)", - "m4pzbing__e", "Prize Bingo (Bwb) (MPU4) (set 6)", - "m4quidin", "Quids In (Bwb) (MPU4) (set 1)", - "m4quidin__a", "Quids In (Bwb) (MPU4) (set 2)", - "m4quidin__b", "Quids In (Bwb) (MPU4) (set 3)", - "m4quidis", "Quids In Showcase (Bwb) (MPU4) (set 1)", - "m4quidis__a", "Quids In Showcase (Bwb) (MPU4) (set 2)", - "m4quidis__b", "Quids In Showcase (Bwb) (MPU4) (set 3)", - "m4quidis__c", "Quids In Showcase (Bwb) (MPU4) (set 4)", - "m4quidis__d", "Quids In Showcase (Bwb) (MPU4) (set 5)", - "m4r2r", "Reel 2 Reel (Barcrest) (MPU4)", - "m4ra", "Red Alert (Barcrest) (MPU4) (set 1)", - "m4ra__a", "Red Alert (Barcrest) (MPU4) (set 2)", - "m4ra__b", "Red Alert (Barcrest) (MPU4) (set 3)", - "m4ra__c", "Red Alert (Barcrest) (MPU4) (set 4)", - "m4ra__d", "Red Alert (Barcrest) (MPU4) (set 5)", - "m4ra__e", "Red Alert (Barcrest) (MPU4) (set 6)", - "m4ra__f", "Red Alert (Barcrest) (MPU4) (set 7)", - "m4ra__g", "Red Alert (Barcrest) (MPU4) (set 8)", - "m4ra__h", "Red Alert (Barcrest) (MPU4) (set 9)", - "m4ra__i", "Red Alert (Barcrest) (MPU4) (set 10)", - "m4ra__j", "Red Alert (Barcrest) (MPU4) (set 11)", - "m4ra__k", "Red Alert (Barcrest) (MPU4) (set 12)", - "m4ra__l", "Red Alert (Barcrest) (MPU4) (set 13)", - "m4ra__m", "Red Alert (Barcrest) (MPU4) (set 14)", - "m4ra__n", "Red Alert (Barcrest) (MPU4) (set 15)", - "m4ra__o", "Red Alert (Barcrest) (MPU4) (set 16)", - "m4ra__p", "Red Alert (Barcrest) (MPU4) (set 17)", - "m4ra__q", "Red Alert (Barcrest) (MPU4) (set 18)", - "m4ra__r", "Red Alert (Barcrest) (MPU4) (set 19)", - "m4rackem", "Rack Em Up (Bwb) (MPU4) (set 1)", - "m4rackem__a", "Rack Em Up (Bwb) (MPU4) (set 2)", - "m4rackem__b", "Rack Em Up (Bwb) (MPU4) (set 3)", - "m4rackem__c", "Rack Em Up (Bwb) (MPU4) (set 4)", - "m4rackem__d", "Rack Em Up (Bwb) (MPU4) (set 5)", - "m4rags", "Rags To Riches Club (Crystal) (MPU4) (set 1)", - "m4ragsa", "Rags To Riches Club (Crystal) (MPU4) (set 2)", - "m4ragsb", "Rags To Riches Club (Crystal) (MPU4) (set 3)", - "m4ragsc", "Rags To Riches Club (Crystal) (MPU4) (set 4)", - "m4randr", "Random Roulette (Barcrest) (Dutch) (MPU4)", - "m4rbgold", "Rainbow Gold (Bwb) (MPU4) (set 1)", - "m4rbgold__a", "Rainbow Gold (Bwb) (MPU4) (set 2)", - "m4rbgold__b", "Rainbow Gold (Bwb) (MPU4) (set 3)", - "m4rbgold__c", "Rainbow Gold (Bwb) (MPU4) (set 4)", - "m4rbgold__d", "Rainbow Gold (Bwb) (MPU4) (set 5)", - "m4rbgold__e", "Rainbow Gold (Bwb) (MPU4) (set 6)", - "m4rbgold__f", "Rainbow Gold (Bwb) (MPU4) (set 7)", - "m4rbgold__g", "Rainbow Gold (Bwb) (MPU4) (set 8)", - "m4rbgold__h", "Rainbow Gold (Bwb) (MPU4) (set 9)", - "m4rbgold__i", "Rainbow Gold (Bwb) (MPU4) (set 10)", - "m4rbgold__j", "Rainbow Gold (Bwb) (MPU4) (set 11)", - "m4rbgold__k", "Rainbow Gold (Bwb) (MPU4) (set 12)", - "m4rbgold__l", "Rainbow Gold (Bwb) (MPU4) (set 13)", - "m4rbgold__m", "Rainbow Gold (Bwb) (MPU4) (set 14)", - "m4rbgold__n", "Rainbow Gold (Bwb) (MPU4) (set 15)", - "m4rbgold__o", "Rainbow Gold (Bwb) (MPU4) (set 16)", - "m4rbgold__p", "Rainbow Gold (Bwb) (MPU4) (set 17)", - "m4rbgold__q", "Rainbow Gold (Bwb) (MPU4) (set 18)", - "m4rckrol", "Rock 'n' Roll (Union - Empire) (MPU4, set 1)", - "m4rckrola", "Rock 'n' Roll (Union - Empire) (MPU4, set 2)", - "m4rckrolb", "Rock 'n' Roll (Union - Empire) (MPU4, set 3)", - "m4rdeal", "Reel Deal (Qps) (MPU4) (set 1)", - "m4rdeal__a", "Reel Deal (Qps) (MPU4) (set 2)", - "m4rdeal__b", "Reel Deal (Qps) (MPU4) (set 3)", - "m4rdeal__c", "Reel Deal (Qps) (MPU4) (set 4)", - "m4rdeal__d", "Reel Deal (Qps) (MPU4) (set 5)", - "m4rdeal__e", "Reel Deal (Qps) (MPU4) (set 6)", - "m4rdeal__f", "Reel Deal (Qps) (MPU4) (set 7)", - "m4rdeal__g", "Reel Deal (Qps) (MPU4) (set 8)", - "m4rdeal__h", "Reel Deal (Qps) (MPU4) (set 9)", - "m4rdeal__i", "Reel Deal (Qps) (MPU4) (set 10)", - "m4rdht", "Red Heat (Golden Nugget?) (Barcrest) (MPU4) (DRH 1.2)", - "m4ready", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 1)", - "m4ready__0", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 28)", - "m4ready__1", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 29)", - "m4ready__2", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 30)", - "m4ready__3", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 31)", - "m4ready__4", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 32)", - "m4ready__5", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 33)", - "m4ready__6", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 34)", - "m4ready__7", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 35)", - "m4ready__8", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 36)", - "m4ready__9", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 37)", - "m4ready__a", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 2)", - "m4ready__a0", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 64)", - "m4ready__a1", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 65)", - "m4ready__a2", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 66)", - "m4ready__a3", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 67)", - "m4ready__a4", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 68)", - "m4ready__a5", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 69)", - "m4ready__aa", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 38)", - "m4ready__ab", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 39)", - "m4ready__ac", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 40)", - "m4ready__ad", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 41)", - "m4ready__ae", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 42)", - "m4ready__af", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 43)", - "m4ready__ag", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 44)", - "m4ready__ah", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 45)", - "m4ready__ai", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 46)", - "m4ready__aj", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 47)", - "m4ready__ak", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 48)", - "m4ready__al", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 49)", - "m4ready__am", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 50)", - "m4ready__an", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 51)", - "m4ready__ao", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 52)", - "m4ready__ap", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 53)", - "m4ready__aq", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 54)", - "m4ready__ar", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 55)", - "m4ready__as", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 56)", - "m4ready__at", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 57)", - "m4ready__au", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 58)", - "m4ready__av", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 59)", - "m4ready__aw", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 60)", - "m4ready__ax", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 61)", - "m4ready__ay", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 62)", - "m4ready__az", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 63)", - "m4ready__b", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 3)", - "m4ready__c", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 4)", - "m4ready__d", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 5)", - "m4ready__e", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 6)", - "m4ready__f", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 7)", - "m4ready__g", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 8)", - "m4ready__h", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 9)", - "m4ready__i", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 10)", - "m4ready__j", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 11)", - "m4ready__k", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 12)", - "m4ready__l", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 13)", - "m4ready__m", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 14)", - "m4ready__n", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 15)", - "m4ready__o", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 16)", - "m4ready__p", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 17)", - "m4ready__q", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 18)", - "m4ready__r", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 19)", - "m4ready__s", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 20)", - "m4ready__t", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 21)", - "m4ready__u", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 22)", - "m4ready__v", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 23)", - "m4ready__w", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 24)", - "m4ready__x", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 25)", - "m4ready__y", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 26)", - "m4ready__z", "Ready Steady Go (Barcrest) (type 2) (MPU4) (set 27)", - "m4reelpk", "Reel Poker (Barcrest) (MPU4)", - "m4reeltm", "Reel Timer (Barcrest) (MPU4) (DWT)", - "m4remag", "unknown MPU4 'ZTP 0.7' (MPU4?)", - "m4revolv", "Revolva (Union) (MPU4)", - "m4rfym", "Run For Your Money (Barcrest) (MPU4) (set 1)", - "m4rfym__0", "Run For Your Money (Barcrest) (MPU4) (set 28)", - "m4rfym__1", "Run For Your Money (Barcrest) (MPU4) (set 29)", - "m4rfym__2", "Run For Your Money (Barcrest) (MPU4) (set 30)", - "m4rfym__3", "Run For Your Money (Barcrest) (MPU4) (set 31)", - "m4rfym__4", "Run For Your Money (Barcrest) (MPU4) (set 32)", - "m4rfym__5", "Run For Your Money (Barcrest) (MPU4) (set 33)", - "m4rfym__6", "Run For Your Money (Barcrest) (MPU4) (set 34)", - "m4rfym__7", "Run For Your Money (Barcrest) (MPU4) (set 35)", - "m4rfym__8", "Run For Your Money (Barcrest) (MPU4) (set 36)", - "m4rfym__9", "Run For Your Money (Barcrest) (MPU4) (set 37)", - "m4rfym__a", "Run For Your Money (Barcrest) (MPU4) (set 2)", - "m4rfym__a0", "Run For Your Money (Barcrest) (MPU4) (set 64)", - "m4rfym__a1", "Run For Your Money (Barcrest) (MPU4) (set 65)", - "m4rfym__a2", "Run For Your Money (Barcrest) (MPU4) (set 66)", - "m4rfym__a3", "Run For Your Money (Barcrest) (MPU4) (set 67)", - "m4rfym__a4", "Run For Your Money (Barcrest) (MPU4) (set 68)", - "m4rfym__a5", "Run For Your Money (Barcrest) (MPU4) (set 69)", - "m4rfym__aa", "Run For Your Money (Barcrest) (MPU4) (set 38)", - "m4rfym__ab", "Run For Your Money (Barcrest) (MPU4) (set 39)", - "m4rfym__ac", "Run For Your Money (Barcrest) (MPU4) (set 40)", - "m4rfym__ad", "Run For Your Money (Barcrest) (MPU4) (set 41)", - "m4rfym__ae", "Run For Your Money (Barcrest) (MPU4) (set 42)", - "m4rfym__af", "Run For Your Money (Barcrest) (MPU4) (set 43)", - "m4rfym__ag", "Run For Your Money (Barcrest) (MPU4) (set 44)", - "m4rfym__ah", "Run For Your Money (Barcrest) (MPU4) (set 45)", - "m4rfym__ai", "Run For Your Money (Barcrest) (MPU4) (set 46)", - "m4rfym__aj", "Run For Your Money (Barcrest) (MPU4) (set 47)", - "m4rfym__ak", "Run For Your Money (Barcrest) (MPU4) (set 48)", - "m4rfym__al", "Run For Your Money (Barcrest) (MPU4) (set 49)", - "m4rfym__am", "Run For Your Money (Barcrest) (MPU4) (set 50)", - "m4rfym__an", "Run For Your Money (Barcrest) (MPU4) (set 51)", - "m4rfym__ao", "Run For Your Money (Barcrest) (MPU4) (set 52)", - "m4rfym__ap", "Run For Your Money (Barcrest) (MPU4) (set 53)", - "m4rfym__aq", "Run For Your Money (Barcrest) (MPU4) (set 54)", - "m4rfym__ar", "Run For Your Money (Barcrest) (MPU4) (set 55)", - "m4rfym__as", "Run For Your Money (Barcrest) (MPU4) (set 56)", - "m4rfym__at", "Run For Your Money (Barcrest) (MPU4) (set 57)", - "m4rfym__au", "Run For Your Money (Barcrest) (MPU4) (set 58)", - "m4rfym__av", "Run For Your Money (Barcrest) (MPU4) (set 59)", - "m4rfym__aw", "Run For Your Money (Barcrest) (MPU4) (set 60)", - "m4rfym__ax", "Run For Your Money (Barcrest) (MPU4) (set 61)", - "m4rfym__ay", "Run For Your Money (Barcrest) (MPU4) (set 62)", - "m4rfym__az", "Run For Your Money (Barcrest) (MPU4) (set 63)", - "m4rfym__b", "Run For Your Money (Barcrest) (MPU4) (set 3)", - "m4rfym__c", "Run For Your Money (Barcrest) (MPU4) (set 4)", - "m4rfym__d", "Run For Your Money (Barcrest) (MPU4) (set 5)", - "m4rfym__e", "Run For Your Money (Barcrest) (MPU4) (set 6)", - "m4rfym__f", "Run For Your Money (Barcrest) (MPU4) (set 7)", - "m4rfym__g", "Run For Your Money (Barcrest) (MPU4) (set 8)", - "m4rfym__h", "Run For Your Money (Barcrest) (MPU4) (set 9)", - "m4rfym__i", "Run For Your Money (Barcrest) (MPU4) (set 10)", - "m4rfym__j", "Run For Your Money (Barcrest) (MPU4) (set 11)", - "m4rfym__k", "Run For Your Money (Barcrest) (MPU4) (set 12)", - "m4rfym__l", "Run For Your Money (Barcrest) (MPU4) (set 13)", - "m4rfym__m", "Run For Your Money (Barcrest) (MPU4) (set 14)", - "m4rfym__n", "Run For Your Money (Barcrest) (MPU4) (set 15)", - "m4rfym__o", "Run For Your Money (Barcrest) (MPU4) (set 16)", - "m4rfym__p", "Run For Your Money (Barcrest) (MPU4) (set 17)", - "m4rfym__q", "Run For Your Money (Barcrest) (MPU4) (set 18)", - "m4rfym__r", "Run For Your Money (Barcrest) (MPU4) (set 19)", - "m4rfym__s", "Run For Your Money (Barcrest) (MPU4) (set 20)", - "m4rfym__t", "Run For Your Money (Barcrest) (MPU4) (set 21)", - "m4rfym__u", "Run For Your Money (Barcrest) (MPU4) (set 22)", - "m4rfym__v", "Run For Your Money (Barcrest) (MPU4) (set 23)", - "m4rfym__w", "Run For Your Money (Barcrest) (MPU4) (set 24)", - "m4rfym__x", "Run For Your Money (Barcrest) (MPU4) (set 25)", - "m4rfym__y", "Run For Your Money (Barcrest) (MPU4) (set 26)", - "m4rfym__z", "Run For Your Money (Barcrest) (MPU4) (set 27)", - "m4rhfev", "Red Hot Fever (Bwb) (MPU4) (set 1)", - "m4rhfev__a", "Red Hot Fever (Bwb) (MPU4) (set 2)", - "m4rhfev__b", "Red Hot Fever (Bwb) (MPU4) (set 3)", - "m4rhfev__c", "Red Hot Fever (Bwb) (MPU4) (set 4)", - "m4rhfev__d", "Red Hot Fever (Bwb) (MPU4) (set 5)", - "m4rhfevc", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 1)", - "m4rhfevc__a", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 2)", - "m4rhfevc__b", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 3)", - "m4rhfevc__c", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 4)", - "m4rhfevc__d", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 5)", - "m4rhfevc__e", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 6)", - "m4rhfevc__f", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 7)", - "m4rhfevc__g", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 8)", - "m4rhfevc__h", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 9)", - "m4rhfevc__i", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 10)", - "m4rhfevc__j", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 11)", - "m4rhfevc__k", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 12)", - "m4rhfevc__l", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 13)", - "m4rhfevc__m", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 14)", - "m4rhfevc__n", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 15)", - "m4rhfevc__o", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 16)", - "m4rhfevc__p", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 17)", - "m4rhfevc__q", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 18)", - "m4rhfevc__r", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 19)", - "m4rhfevc__s", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 20)", - "m4rhfevc__t", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 21)", - "m4rhfevc__u", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 22)", - "m4rhfevc__v", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 23)", - "m4rhfevc__w", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 24)", - "m4rhfevc__x", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 25)", - "m4rhfevc__y", "Red Hot Fever (Concept Games Ltd) (MPU4) (set 26)", - "m4rhnote", "Red Hot Notes (Qps) (MPU4) (set 1)", - "m4rhnote__a", "Red Hot Notes (Qps) (MPU4) (set 2)", - "m4rhnote__b", "Red Hot Notes (Qps) (MPU4) (set 3)", - "m4rhnote__c", "Red Hot Notes (Qps) (MPU4) (set 4)", - "m4rhnote__d", "Red Hot Notes (Qps) (MPU4) (set 5)", - "m4rhnote__e", "Red Hot Notes (Qps) (MPU4) (set 6)", - "m4rhnote__f", "Red Hot Notes (Qps) (MPU4) (set 7)", - "m4rhnote__g", "Red Hot Notes (Qps) (MPU4) (set 8)", - "m4rhnote__h", "Red Hot Notes (Qps) (MPU4) (set 9)", - "m4rhnote__i", "Red Hot Notes (Qps) (MPU4) (set 10)", - "m4rhnote__j", "Red Hot Notes (Qps) (MPU4) (set 11)", - "m4rhnote__k", "Red Hot Notes (Qps) (MPU4) (set 12)", - "m4rhnote__l", "Red Hot Notes (Qps) (MPU4) (set 13)", - "m4rhnote__m", "Red Hot Notes (Qps) (MPU4) (set 14)", - "m4rhnote__n", "Red Hot Notes (Qps) (MPU4) (set 15)", - "m4rhnote__o", "Red Hot Notes (Qps) (MPU4) (set 16)", - "m4rhnote__p", "Red Hot Notes (Qps) (MPU4) (set 17)", - "m4rhnote__q", "Red Hot Notes (Qps) (MPU4) (set 18)", - "m4rhnote__r", "Red Hot Notes (Qps) (MPU4) (set 19)", - "m4rhnote__s", "Red Hot Notes (Qps) (MPU4) (set 20)", - "m4rhnote__t", "Red Hot Notes (Qps) (MPU4) (set 21)", - "m4rhnote__u", "Red Hot Notes (Qps) (MPU4) (set 22)", - "m4rhnote__v", "Red Hot Notes (Qps) (MPU4) (set 23)", - "m4rhnote__w", "Red Hot Notes (Qps) (MPU4) (set 24)", - "m4rhnote__x", "Red Hot Notes (Qps) (MPU4) (set 25)", - "m4rhnote__y", "Red Hot Notes (Qps) (MPU4) (set 26)", - "m4rhog", "Road Hog (Barcrest) (MPU4) (RR6 1.2)", - "m4rhog2", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 1)", - "m4rhog2__a", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 2)", - "m4rhog2__b", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 3)", - "m4rhog2__c", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 4)", - "m4rhog2__d", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 5)", - "m4rhog2__e", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 6)", - "m4rhog2__f", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 7)", - "m4rhog2__g", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 8)", - "m4rhog2__h", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 9)", - "m4rhog2__i", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 10)", - "m4rhog2__j", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 11)", - "m4rhog2__k", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 12)", - "m4rhog2__l", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 13)", - "m4rhog2__m", "Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 14)", - "m4rhog_h1", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 1)", - "m4rhog_h10", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 3)", - "m4rhog_h11", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 4)", - "m4rhog_h12", "Road Hog (Barcrest) (MPU4) (RR6 1.2?, hack?)", - "m4rhog_h13", "Road Hog (Barcrest) (MPU4) (RR6 1.2, hack?)", - "m4rhog_h14", "Road Hog (Barcrest) (MPU4) (RR6 1.2C, hack?, set 1)", - "m4rhog_h15", "Road Hog (Barcrest) (MPU4) (RR6 1.2C, hack?, set 2)", - "m4rhog_h2", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 2)", - "m4rhog_h3", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 3)", - "m4rhog_h4", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 4)", - "m4rhog_h5", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 5)", - "m4rhog_h6", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 6)", - "m4rhog_h7", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 7)", - "m4rhog_h8", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 1)", - "m4rhog_h9", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 2)", - "m4rhog_roc", "Road Hog (Bwb / Barcrest) (MPU4) (ROC 2.0, bad)", - "m4rhogc", "Road Hog Club (Barcrest) (MPU4) (set 1)", - "m4rhogc__a", "Road Hog Club (Barcrest) (MPU4) (set 2)", - "m4rhogc__b", "Road Hog Club (Barcrest) (MPU4) (set 3)", - "m4rhogr1", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0)", - "m4rhogr1c", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0C)", - "m4rhogr1d", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0D)", - "m4rhogr1k", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0K, set 1)", - "m4rhogr1k_a", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0K, set 2, wrong version number?)", - "m4rhogr1y", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0Y)", - "m4rhogr1yd", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0YD)", - "m4rhogr2", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0)", - "m4rhogr2c", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0C)", - "m4rhogr2d", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0D)", - "m4rhogr2k", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0K)", - "m4rhogr2y", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0Y)", - "m4rhogr2yd", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0YD)", - "m4rhogr3", "Road Hog (Bwb / Barcrest) (MPU4) (RO_ 3.0)", - "m4rhogr6ad", "Road Hog (Barcrest) (MPU4) (RR6 1.2AD)", - "m4rhogr6b", "Road Hog (Barcrest) (MPU4) (RR6 1.2B)", - "m4rhogr6c", "Road Hog (Barcrest) (MPU4) (RR6 1.2C)", - "m4rhogr6d", "Road Hog (Barcrest) (MPU4) (RR6 1.2D)", - "m4rhogr6k", "Road Hog (Barcrest) (MPU4) (RR6 1.2K)", - "m4rhogr6y", "Road Hog (Barcrest) (MPU4) (RR6 1.2Y)", - "m4rhogr6y_a", "Road Hog (Barcrest) (MPU4) (RR6 1.1Y)", - "m4rhogr6yd", "Road Hog (Barcrest) (MPU4) (RR6 1.2YD)", - "m4rhr", "Red Hot Roll (Barcrest) (MPU4) (set 1)", - "m4rhr__0", "Red Hot Roll (Barcrest) (MPU4) (set 28)", - "m4rhr__1", "Red Hot Roll (Barcrest) (MPU4) (set 29)", - "m4rhr__2", "Red Hot Roll (Barcrest) (MPU4) (set 30)", - "m4rhr__3", "Red Hot Roll (Barcrest) (MPU4) (set 31)", - "m4rhr__4", "Red Hot Roll (Barcrest) (MPU4) (set 32)", - "m4rhr__5", "Red Hot Roll (Barcrest) (MPU4) (set 33)", - "m4rhr__6", "Red Hot Roll (Barcrest) (MPU4) (set 34)", - "m4rhr__7", "Red Hot Roll (Barcrest) (MPU4) (set 35)", - "m4rhr__8", "Red Hot Roll (Barcrest) (MPU4) (set 36)", - "m4rhr__9", "Red Hot Roll (Barcrest) (MPU4) (set 37)", - "m4rhr__a", "Red Hot Roll (Barcrest) (MPU4) (set 2)", - "m4rhr__a0", "Red Hot Roll (Barcrest) (MPU4) (set 64)", - "m4rhr__a1", "Red Hot Roll (Barcrest) (MPU4) (set 65)", - "m4rhr__a2", "Red Hot Roll (Barcrest) (MPU4) (set 66)", - "m4rhr__a3", "Red Hot Roll (Barcrest) (MPU4) (set 67)", - "m4rhr__a4", "Red Hot Roll (Barcrest) (MPU4) (RH8 0.1C)", - "m4rhr__aa", "Red Hot Roll (Barcrest) (MPU4) (set 38)", - "m4rhr__ab", "Red Hot Roll (Barcrest) (MPU4) (set 39)", - "m4rhr__ac", "Red Hot Roll (Barcrest) (MPU4) (set 40)", - "m4rhr__ad", "Red Hot Roll (Barcrest) (MPU4) (set 41)", - "m4rhr__ae", "Red Hot Roll (Barcrest) (MPU4) (set 42)", - "m4rhr__af", "Red Hot Roll (Barcrest) (MPU4) (set 43)", - "m4rhr__ag", "Red Hot Roll (Barcrest) (MPU4) (set 44)", - "m4rhr__ah", "Red Hot Roll (Barcrest) (MPU4) (set 45)", - "m4rhr__ai", "Red Hot Roll (Barcrest) (MPU4) (set 46)", - "m4rhr__aj", "Red Hot Roll (Barcrest) (MPU4) (set 47)", - "m4rhr__ak", "Red Hot Roll (Barcrest) (MPU4) (set 48)", - "m4rhr__al", "Red Hot Roll (Barcrest) (MPU4) (set 49)", - "m4rhr__am", "Red Hot Roll (Barcrest) (MPU4) (set 50)", - "m4rhr__an", "Red Hot Roll (Barcrest) (MPU4) (set 51)", - "m4rhr__ao", "Red Hot Roll (Barcrest) (MPU4) (set 52)", - "m4rhr__ap", "Red Hot Roll (Barcrest) (MPU4) (set 53)", - "m4rhr__aq", "Red Hot Roll (Barcrest) (MPU4) (set 54)", - "m4rhr__ar", "Red Hot Roll (Barcrest) (MPU4) (set 55)", - "m4rhr__as", "Red Hot Roll (Barcrest) (MPU4) (set 56)", - "m4rhr__at", "Red Hot Roll (Barcrest) (MPU4) (set 57)", - "m4rhr__au", "Red Hot Roll (Barcrest) (MPU4) (set 58)", - "m4rhr__av", "Red Hot Roll (Barcrest) (MPU4) (set 59)", - "m4rhr__aw", "Red Hot Roll (Barcrest) (MPU4) (set 60)", - "m4rhr__ax", "Red Hot Roll (Barcrest) (MPU4) (set 61)", - "m4rhr__ay", "Red Hot Roll (Barcrest) (MPU4) (set 62)", - "m4rhr__az", "Red Hot Roll (Barcrest) (MPU4) (set 63)", - "m4rhr__b", "Red Hot Roll (Barcrest) (MPU4) (set 3)", - "m4rhr__c", "Red Hot Roll (Barcrest) (MPU4) (set 4)", - "m4rhr__d", "Red Hot Roll (Barcrest) (MPU4) (set 5)", - "m4rhr__e", "Red Hot Roll (Barcrest) (MPU4) (set 6)", - "m4rhr__f", "Red Hot Roll (Barcrest) (MPU4) (set 7)", - "m4rhr__g", "Red Hot Roll (Barcrest) (MPU4) (set 8)", - "m4rhr__h", "Red Hot Roll (Barcrest) (MPU4) (set 9)", - "m4rhr__i", "Red Hot Roll (Barcrest) (MPU4) (set 10)", - "m4rhr__j", "Red Hot Roll (Barcrest) (MPU4) (set 11)", - "m4rhr__k", "Red Hot Roll (Barcrest) (MPU4) (set 12)", - "m4rhr__l", "Red Hot Roll (Barcrest) (MPU4) (set 13)", - "m4rhr__m", "Red Hot Roll (Barcrest) (MPU4) (set 14)", - "m4rhr__n", "Red Hot Roll (Barcrest) (MPU4) (set 15)", - "m4rhr__o", "Red Hot Roll (Barcrest) (MPU4) (set 16)", - "m4rhr__p", "Red Hot Roll (Barcrest) (MPU4) (set 17)", - "m4rhr__q", "Red Hot Roll (Barcrest) (MPU4) (set 18)", - "m4rhr__r", "Red Hot Roll (Barcrest) (MPU4) (set 19)", - "m4rhr__s", "Red Hot Roll (Barcrest) (MPU4) (set 20)", - "m4rhr__t", "Red Hot Roll (Barcrest) (MPU4) (set 21)", - "m4rhr__u", "Red Hot Roll (Barcrest) (MPU4) (set 22)", - "m4rhr__v", "Red Hot Roll (Barcrest) (MPU4) (set 23)", - "m4rhr__w", "Red Hot Roll (Barcrest) (MPU4) (set 24)", - "m4rhr__x", "Red Hot Roll (Barcrest) (MPU4) (set 25)", - "m4rhr__y", "Red Hot Roll (Barcrest) (MPU4) (set 26)", - "m4rhr__z", "Red Hot Roll (Barcrest) (MPU4) (set 27)", - "m4rhrc", "Red Hot Roll Classic (Barcrest) (MPU4) (set 1)", - "m4rhrc__0", "Red Hot Roll Classic (Barcrest) (MPU4) (set 28)", - "m4rhrc__1", "Red Hot Roll Classic (Barcrest) (MPU4) (set 29)", - "m4rhrc__2", "Red Hot Roll Classic (Barcrest) (MPU4) (set 30)", - "m4rhrc__3", "Red Hot Roll Classic (Barcrest) (MPU4) (set 31)", - "m4rhrc__4", "Red Hot Roll Classic (Barcrest) (MPU4) (set 32)", - "m4rhrc__5", "Red Hot Roll Classic (Barcrest) (MPU4) (set 33)", - "m4rhrc__6", "Red Hot Roll Classic (Barcrest) (MPU4) (set 34)", - "m4rhrc__7", "Red Hot Roll Classic (Barcrest) (MPU4) (set 35)", - "m4rhrc__8", "Red Hot Roll Classic (Barcrest) (MPU4) (set 36)", - "m4rhrc__a", "Red Hot Roll Classic (Barcrest) (MPU4) (set 2)", - "m4rhrc__aa", "Red Hot Roll Classic (Barcrest) (MPU4) (set 38)", - "m4rhrc__b", "Red Hot Roll Classic (Barcrest) (MPU4) (set 3)", - "m4rhrc__c", "Red Hot Roll Classic (Barcrest) (MPU4) (set 4)", - "m4rhrc__d", "Red Hot Roll Classic (Barcrest) (MPU4) (set 5)", - "m4rhrc__e", "Red Hot Roll Classic (Barcrest) (MPU4) (set 6)", - "m4rhrc__f", "Red Hot Roll Classic (Barcrest) (MPU4) (set 7)", - "m4rhrc__g", "Red Hot Roll Classic (Barcrest) (MPU4) (set 8)", - "m4rhrc__h", "Red Hot Roll Classic (Barcrest) (MPU4) (set 9)", - "m4rhrc__i", "Red Hot Roll Classic (Barcrest) (MPU4) (set 10)", - "m4rhrc__j", "Red Hot Roll Classic (Barcrest) (MPU4) (set 11)", - "m4rhrc__k", "Red Hot Roll Classic (Barcrest) (MPU4) (set 12)", - "m4rhrc__l", "Red Hot Roll Classic (Barcrest) (MPU4) (set 13)", - "m4rhrc__m", "Red Hot Roll Classic (Barcrest) (MPU4) (set 14)", - "m4rhrc__n", "Red Hot Roll Classic (Barcrest) (MPU4) (set 15)", - "m4rhrc__o", "Red Hot Roll Classic (Barcrest) (MPU4) (set 16)", - "m4rhrc__p", "Red Hot Roll Classic (Barcrest) (MPU4) (set 17)", - "m4rhrc__q", "Red Hot Roll Classic (Barcrest) (MPU4) (set 18)", - "m4rhrc__r", "Red Hot Roll Classic (Barcrest) (MPU4) (set 19)", - "m4rhrc__s", "Red Hot Roll Classic (Barcrest) (MPU4) (set 20)", - "m4rhrc__t", "Red Hot Roll Classic (Barcrest) (MPU4) (set 21)", - "m4rhrc__u", "Red Hot Roll Classic (Barcrest) (MPU4) (set 22)", - "m4rhrc__v", "Red Hot Roll Classic (Barcrest) (MPU4) (set 23)", - "m4rhrc__w", "Red Hot Roll Classic (Barcrest) (MPU4) (set 24)", - "m4rhrc__x", "Red Hot Roll Classic (Barcrest) (MPU4) (set 25)", - "m4rhrc__y", "Red Hot Roll Classic (Barcrest) (MPU4) (set 26)", - "m4rhrc__z", "Red Hot Roll Classic (Barcrest) (MPU4) (set 27)", - "m4rhrcl", "Red Hot Roll Club (Barcrest) (MPU4) (set 1)", - "m4rhrcl__a", "Red Hot Roll Club (Barcrest) (MPU4) (set 2)", - "m4rhrcl__b", "Red Hot Roll Club (Barcrest) (MPU4) (set 3)", - "m4rhrcl__c", "Red Hot Roll Club (Barcrest) (MPU4) (set 4)", - "m4rhrock", "Red Hot Rocks (Qps) (MPU4) (set 1)", - "m4rhrock__a", "Red Hot Rocks (Qps) (MPU4) (set 2)", - "m4rhs", "Rocky Horror Show (Barcrest) (MPU4) (set 1)", - "m4rhs__a", "Rocky Horror Show (Barcrest) (MPU4) (set 2)", - "m4rhs__b", "Rocky Horror Show (Barcrest) (MPU4) (set 3)", - "m4rhs__c", "Rocky Horror Show (Barcrest) (MPU4) (set 4)", - "m4rhs__d", "Rocky Horror Show (Barcrest) (MPU4) (set 5)", - "m4rhs__e", "Rocky Horror Show (Barcrest) (MPU4) (set 6)", - "m4rhs__f", "Rocky Horror Show (Barcrest) (MPU4) (set 7)", - "m4rhs__g", "Rocky Horror Show (Barcrest) (MPU4) (set 8)", - "m4rhs__h", "Rocky Horror Show (Barcrest) (MPU4) (set 9)", - "m4rhs__i", "Rocky Horror Show (Barcrest) (MPU4) (set 10)", - "m4rhs__j", "Rocky Horror Show (Barcrest) (MPU4) (set 11)", - "m4rhs__k", "Rocky Horror Show (Barcrest) (MPU4) (set 12)", - "m4rhs__l", "Rocky Horror Show (Barcrest) (MPU4) (set 13)", - "m4rhwhl", "Red Hot Wheels (Qps) (MPU4) (set 1)", - "m4rhwhl__a", "Red Hot Wheels (Qps) (MPU4) (set 2)", - "m4rhwhl__b", "Red Hot Wheels (Qps) (MPU4) (set 3)", - "m4rhwhl__c", "Red Hot Wheels (Qps) (MPU4) (set 4)", - "m4richfm", "Rich & Famous (Barcrest) (MPU4) (set 1)", - "m4richfm__0", "Rich & Famous (Barcrest) (MPU4) (set 28)", - "m4richfm__1", "Rich & Famous (Barcrest) (MPU4) (set 29)", - "m4richfm__2", "Rich & Famous (Barcrest) (MPU4) (set 30)", - "m4richfm__3", "Rich & Famous (Barcrest) (MPU4) (set 31)", - "m4richfm__a", "Rich & Famous (Barcrest) (MPU4) (set 2)", - "m4richfm__b", "Rich & Famous (Barcrest) (MPU4) (set 3)", - "m4richfm__c", "Rich & Famous (Barcrest) (MPU4) (set 4)", - "m4richfm__d", "Rich & Famous (Barcrest) (MPU4) (set 5)", - "m4richfm__e", "Rich & Famous (Barcrest) (MPU4) (set 6)", - "m4richfm__f", "Rich & Famous (Barcrest) (MPU4) (set 7)", - "m4richfm__g", "Rich & Famous (Barcrest) (MPU4) (set 8)", - "m4richfm__h", "Rich & Famous (Barcrest) (MPU4) (set 9)", - "m4richfm__i", "Rich & Famous (Barcrest) (MPU4) (set 10)", - "m4richfm__j", "Rich & Famous (Barcrest) (MPU4) (set 11)", - "m4richfm__k", "Rich & Famous (Barcrest) (MPU4) (set 12)", - "m4richfm__l", "Rich & Famous (Barcrest) (MPU4) (set 13)", - "m4richfm__m", "Rich & Famous (Barcrest) (MPU4) (set 14)", - "m4richfm__n", "Rich & Famous (Barcrest) (MPU4) (set 15)", - "m4richfm__o", "Rich & Famous (Barcrest) (MPU4) (set 16)", - "m4richfm__p", "Rich & Famous (Barcrest) (MPU4) (set 17)", - "m4richfm__q", "Rich & Famous (Barcrest) (MPU4) (set 18)", - "m4richfm__r", "Rich & Famous (Barcrest) (MPU4) (set 19)", - "m4richfm__s", "Rich & Famous (Barcrest) (MPU4) (set 20)", - "m4richfm__t", "Rich & Famous (Barcrest) (MPU4) (set 21)", - "m4richfm__u", "Rich & Famous (Barcrest) (MPU4) (set 22)", - "m4richfm__v", "Rich & Famous (Barcrest) (MPU4) (set 23)", - "m4richfm__w", "Rich & Famous (Barcrest) (MPU4) (set 24)", - "m4richfm__x", "Rich & Famous (Barcrest) (MPU4) (set 25)", - "m4richfm__y", "Rich & Famous (Barcrest) (MPU4) (set 26)", - "m4richfm__z", "Rich & Famous (Barcrest) (MPU4) (set 27)", - "m4ringfr", "Ring Of Fire (Barcrest) (MPU4)", - "m4riocr", "Rio Grande (Crystal) (MPU4) (set 1)", - "m4riocra", "Rio Grande (Crystal) (MPU4) (set 2)", - "m4riotrp", "Rio Tropico (unknown) (MPU4)", - "m4rlpick", "Reel Picks (Crystal) (MPU4) (set 1)", - "m4rlpicka", "Reel Picks (Crystal) (MPU4) (set 2)", - "m4rlpickb", "Reel Picks (Crystal) (MPU4) (set 3)", - "m4rlpickc", "Reel Picks (Crystal) (MPU4) (set 4)", - "m4rltst", "MPU4 Reel Test (3.0)", - "m4rmg", "unknown MPU4 'CTP 0.4' (MPU4?)", - "m4rmtp", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 1)", - "m4rmtp__a", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 2)", - "m4rmtp__b", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 3)", - "m4rmtp__c", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 4)", - "m4rmtp__d", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 5)", - "m4rmtp__e", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 6)", - "m4rmtp__f", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 7)", - "m4rmtp__g", "Reel Magic Turbo Play (Avantime?) (MPU4) (set 8)", - "m4rmtpd", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 1)", - "m4rmtpd__0", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 28)", - "m4rmtpd__1", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 29)", - "m4rmtpd__2", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 30)", - "m4rmtpd__3", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 31)", - "m4rmtpd__4", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 32)", - "m4rmtpd__5", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 33)", - "m4rmtpd__6", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 34)", - "m4rmtpd__7", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 35)", - "m4rmtpd__8", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 36)", - "m4rmtpd__9", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 37)", - "m4rmtpd__a", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 2)", - "m4rmtpd__aa", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 38)", - "m4rmtpd__ab", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 39)", - "m4rmtpd__ac", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 40)", - "m4rmtpd__ad", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 41)", - "m4rmtpd__ae", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 42)", - "m4rmtpd__af", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 43)", - "m4rmtpd__ag", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 44)", - "m4rmtpd__ah", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 45)", - "m4rmtpd__ai", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 46)", - "m4rmtpd__aj", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 47)", - "m4rmtpd__ak", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 48)", - "m4rmtpd__al", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 49)", - "m4rmtpd__am", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 50)", - "m4rmtpd__b", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 3)", - "m4rmtpd__c", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 4)", - "m4rmtpd__d", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 5)", - "m4rmtpd__e", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 6)", - "m4rmtpd__f", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 7)", - "m4rmtpd__g", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 8)", - "m4rmtpd__h", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 9)", - "m4rmtpd__i", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 10)", - "m4rmtpd__j", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 11)", - "m4rmtpd__k", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 12)", - "m4rmtpd__l", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 13)", - "m4rmtpd__m", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 14)", - "m4rmtpd__n", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 15)", - "m4rmtpd__o", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 16)", - "m4rmtpd__p", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 17)", - "m4rmtpd__q", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 18)", - "m4rmtpd__r", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 19)", - "m4rmtpd__s", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 20)", - "m4rmtpd__t", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 21)", - "m4rmtpd__u", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 22)", - "m4rmtpd__v", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 23)", - "m4rmtpd__w", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 24)", - "m4rmtpd__x", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 25)", - "m4rmtpd__y", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 26)", - "m4rmtpd__z", "Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 27)", - "m4roadrn", "Road Runner (Barcrest) (Dutch) (MPU4) (DRO1.9)", - "m4robo", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 1)", - "m4robo__0", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 14)", - "m4robo__1", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 2)", - "m4robo__2", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 3)", - "m4robo__3", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 4)", - "m4robo__4", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 5)", - "m4robo__5", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 6)", - "m4robo__6", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 1)", - "m4robo__7", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 2)", - "m4robo__8", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 3)", - "m4robo__9", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 4)", - "m4robo__a", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 7)", - "m4robo__aa", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 5)", - "m4robo__ab", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 6)", - "m4robo__b", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 8)", - "m4robo__c", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 9)", - "m4robo__d", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 10)", - "m4robo__e", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 11)", - "m4robo__f", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 12)", - "m4robo__g", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 13)", - "m4robo__h", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 14)", - "m4robo__i", "Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 15)", - "m4robo__j", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 7)", - "m4robo__k", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 8)", - "m4robo__l", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 9)", - "m4robo__m", "Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 10)", - "m4robo__n", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 1)", - "m4robo__o", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 2)", - "m4robo__p", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 3)", - "m4robo__q", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 4)", - "m4robo__r", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 5)", - "m4robo__s", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 6)", - "m4robo__t", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 7)", - "m4robo__u", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 8)", - "m4robo__v", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 9)", - "m4robo__w", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 10)", - "m4robo__x", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 11)", - "m4robo__y", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 12)", - "m4robo__z", "Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 13)", - "m4rockmn", "Rocket Money (Barcrest) (MPU4) (set 1)", - "m4rockmn__a", "Rocket Money (Barcrest) (MPU4) (set 2)", - "m4rockmn__b", "Rocket Money (Barcrest) (MPU4) (set 3)", - "m4rockmn__c", "Rocket Money (Barcrest) (MPU4) (set 4)", - "m4rockmn__d", "Rocket Money (Barcrest) (MPU4) (set 5)", - "m4rockmn__e", "Rocket Money (Barcrest) (MPU4) (set 6)", - "m4rockmn__f", "Rocket Money (Barcrest) (MPU4) (set 7)", - "m4rockmn__g", "Rocket Money (Barcrest) (MPU4) (set 8)", - "m4rockmn__h", "Rocket Money (Barcrest) (MPU4) (set 9)", - "m4rockmn__i", "Rocket Money (Barcrest) (MPU4) (set 10)", - "m4rockmn__j", "Rocket Money (Barcrest) (MPU4) (set 11)", - "m4rockmn__k", "Rocket Money (Barcrest) (MPU4) (set 12)", - "m4rotex", "Rotex (Union) (MPU4)", - "m4royjwl", "Royal Jewels (Barcrest) (MPU4)", - "m4rsg", "Ready Steady Go (Barcrest) (MPU4, Mod 2 type, V1.2)", - "m4rsga", "Ready Steady Go (Barcrest) (MPU4, Mod 2 type, V1.0)", - "m4runawy", "Runaway Trail (Barcrest) (MPU4)", - "m4runawyb", "Runaway Trail (Barcrest) (v1.2?) (MPU4)", - "m4rwb", "Red White & Blue (Barcrest) (MPU4) (DRW)", - "m4safar", "Safari Club (Mdm) (MPU4)", - "m4salsa", "Salsa (Barcrest) (MPU4) (DSA)", - "m4samu", "Samurai (Barcrest) (Dutch) (MPU4)", - "m4sayno", "Say No More (Barcrest) (MPU4) (set 1)", - "m4sayno__a", "Say No More (Barcrest) (MPU4) (set 2)", - "m4sayno__b", "Say No More (Barcrest) (MPU4) (set 3)", - "m4sayno__c", "Say No More (Barcrest) (MPU4) (set 4)", - "m4sayno__d", "Say No More (Barcrest) (MPU4) (set 5)", - "m4sb5", "Sunset Boulevard (Barcrest) (MPU4) (BSB 0.3)", - "m4sbx", "Super Bear X (MPU4?) (set 1)", - "m4sbxa", "Super Bear X (MPU4?) (set 2)", - "m4sbxb", "Super Bear X (MPU4?) (set 3)", - "m4sbxc", "Super Bear X (MPU4?) (set 4)", - "m4sbxd", "Super Bear X (MPU4?) (set 5)", - "m4sbxe", "Super Bear X (MPU4?) (set 6)", - "m4screw", "Screwin' Around (Global) (MPU4, v0.8)", - "m4screwa", "Screwin' Around (Global) (MPU4, v0.7)", - "m4screwb", "Screwin' Around (Global) (MPU4, v0.5)", - "m4screwp", "Screwin' Around (Global) (MPU4, v0.8) (Protocol)", - "m4sctagt", "Secret Agent (Nova) (MPU4)", - "m4sdquid", "Sundance Quid (Qps) (MPU4) (set 1)", - "m4sdquid__a", "Sundance Quid (Qps) (MPU4) (set 2)", - "m4sdquid__b", "Sundance Quid (Qps) (MPU4) (set 3)", - "m4sdquid__c", "Sundance Quid (Qps) (MPU4) (set 4)", - "m4sdquid__d", "Sundance Quid (Qps) (MPU4) (set 5)", - "m4sdquid__e", "Sundance Quid (Qps) (MPU4) (set 6)", - "m4sdquid__f", "Sundance Quid (Qps) (MPU4) (set 7)", - "m4sdquid__g", "Sundance Quid (Qps) (MPU4) (set 8)", - "m4sdquid__h", "Sundance Quid (Qps) (MPU4) (set 9)", - "m4sdquid__i", "Sundance Quid (Qps) (MPU4) (set 10)", - "m4sdquid__j", "Sundance Quid (Qps) (MPU4) (set 11)", - "m4sdquid__k", "Sundance Quid (Qps) (MPU4) (set 12)", - "m4select", "Select (Union) (MPU4)", - "m4sgrab", "Smash 'n' Grab (Barcrest) (MPU4) (SAG 1.0, set 1)", - "m4sgraba", "Smash 'n' Grab (Barcrest) (MPU4) (set 1.0, set 2)", - "m4sgrabb", "Smash 'n' Grab (Barcrest) (MPU4) (SAG 3.4)", - "m4shkwav", "Shockwave (Qps) (MPU4) (set 1)", - "m4shkwav__a", "Shockwave (Qps) (MPU4) (set 2)", - "m4shkwav__b", "Shockwave (Qps) (MPU4) (set 3)", - "m4shkwav__c", "Shockwave (Qps) (MPU4) (set 4)", - "m4shkwav__d", "Shockwave (Qps) (MPU4) (set 5)", - "m4shkwav__e", "Shockwave (Qps) (MPU4) (set 6)", - "m4shkwav__f", "Shockwave (Qps) (MPU4) (set 7)", - "m4shkwav__g", "Shockwave (Qps) (MPU4) (set 8)", - "m4shocm", "Showcase Crystal Maze (Barcrest) (MPU4) (set 1)", - "m4shocm__a", "Showcase Crystal Maze (Barcrest) (MPU4) (set 2)", - "m4shocm__b", "Showcase Crystal Maze (Barcrest) (MPU4) (set 3)", - "m4shocm__c", "Showcase Crystal Maze (Barcrest) (MPU4) (set 4)", - "m4shocm__d", "Showcase Crystal Maze (Barcrest) (MPU4) (set 5)", - "m4shocm__e", "Showcase Crystal Maze (Barcrest) (MPU4) (set 6)", - "m4shocm__f", "Showcase Crystal Maze (Barcrest) (MPU4) (set 7)", - "m4shocm__g", "Showcase Crystal Maze (Barcrest) (MPU4) (set 8)", - "m4shocm__h", "Showcase Crystal Maze (Barcrest) (MPU4) (set 9)", - "m4shocm__i", "Showcase Crystal Maze (Barcrest) (MPU4) (set 10)", - "m4shocm__j", "Showcase Crystal Maze (Barcrest) (MPU4) (set 11)", - "m4shodf", "Showcase Duty Free (Barcrest) (MPU4) (set 1)", - "m4shodf__a", "Showcase Duty Free (Barcrest) (MPU4) (set 2)", - "m4shodf__b", "Showcase Duty Free (Barcrest) (MPU4) (set 3)", - "m4shodf__c", "Showcase Duty Free (Barcrest) (MPU4) (set 4)", - "m4shodf__d", "Showcase Duty Free (Barcrest) (MPU4) (set 5)", - "m4shodf__e", "Showcase Duty Free (Barcrest) (MPU4) (set 6)", - "m4shodf__f", "Showcase Duty Free (Barcrest) (MPU4) (set 7)", - "m4shodf__g", "Showcase Duty Free (Barcrest) (MPU4) (set 8)", - "m4shodf__h", "Showcase Duty Free (Barcrest) (MPU4) (set 9)", - "m4shodf__i", "Showcase Duty Free (Barcrest) (MPU4) (set 10)", - "m4shodf__j", "Showcase Duty Free (Barcrest) (MPU4) (set 11)", - "m4shodf__k", "Showcase Duty Free (Barcrest) (MPU4) (set 12)", - "m4shodf__l", "Showcase Duty Free (Barcrest) (MPU4) (set 13)", - "m4shoknr", "Shock 'n' Roll (Qps) (MPU4) (set 1)", - "m4shoknr__a", "Shock 'n' Roll (Qps) (MPU4) (set 2)", - "m4shoknr__b", "Shock 'n' Roll (Qps) (MPU4) (set 3)", - "m4shoknr__c", "Shock 'n' Roll (Qps) (MPU4) (set 4)", - "m4showtm", "Show Timer (Barcrest) (Dutch) (MPU4) (DSH1.3)", - "m4silnud", "Silver Nudger (Mdm?) (MPU4)", - "m4silshd", "Silver Shadow (Barcrest) (MPU4)", - "m4silshda", "Silver Shadow (Barcrest) (MPU4) (SH 2.0, set 1)", - "m4silshdb", "Silver Shadow (Barcrest) (MPU4) (SH 2.0, set 2)", - "m4sinbd", "Sinbad (Bwb) (MPU4) (set 1)", - "m4sinbd__a", "Sinbad (Bwb) (MPU4) (set 2)", - "m4sinbd__b", "Sinbad (Bwb) (MPU4) (set 3)", - "m4sinbd__c", "Sinbad (Bwb) (MPU4) (set 4)", - "m4sinbd__d", "Sinbad (Bwb) (MPU4) (set 5)", - "m4sinbd__e", "Sinbad (Bwb) (MPU4) (set 6)", - "m4sinbd__f", "Sinbad (Bwb) (MPU4) (set 7)", - "m4sinbd__g", "Sinbad (Bwb) (MPU4) (set 8)", - "m4sinbd__h", "Sinbad (Bwb) (MPU4) (set 9)", - "m4sinbd__i", "Sinbad (Bwb) (MPU4) (set 10)", - "m4sinbd__j", "Sinbad (Bwb) (MPU4) (set 11)", - "m4sinbd__k", "Sinbad (Bwb) (MPU4) (set 12)", - "m4sinbd__l", "Sinbad (Bwb) (MPU4) (set 13)", - "m4sinbd__m", "Sinbad (Bwb) (MPU4) (set 14)", - "m4sinbd__n", "Sinbad (Bwb) (MPU4) (set 15)", - "m4sinbd__o", "Sinbad (Bwb) (MPU4) (set 16)", - "m4sinbd__p", "Sinbad (Bwb) (MPU4) (set 17)", - "m4sinbd__q", "Sinbad (Bwb) (MPU4) (set 18)", - "m4sinbd__r", "Sinbad (Bwb) (MPU4) (set 19)", - "m4sinbd__s", "Sinbad (Bwb) (MPU4) (set 20)", - "m4sinbd__t", "Sinbad (Bwb) (MPU4) (set 21)", - "m4sinbd__u", "Sinbad (Bwb) (MPU4) (set 22)", - "m4sinbd__v", "Sinbad (Bwb) (MPU4) (set 23)", - "m4sinbd__w", "Sinbad (Bwb) (MPU4) (set 24)", - "m4sinbd__x", "Sinbad (Bwb) (MPU4) (set 25)", - "m4sinbdn", "Sinbad (Nova) (MPU4) (set 1)", - "m4sinbdn__a", "Sinbad (Nova) (MPU4) (set 2)", - "m4sinbdn__b", "Sinbad (Nova) (MPU4) (set 3)", - "m4sinbdn__c", "Sinbad (Nova) (MPU4) (set 4)", - "m4sinbdn__d", "Sinbad (Nova) (MPU4) (set 5)", - "m4sinbdn__e", "Sinbad (Nova) (MPU4) (set 6)", - "m4sinbdn__f", "Sinbad (Nova) (MPU4) (set 7)", - "m4sky", "Sky Sports (Bwb) (MPU4) (set 1)", - "m4sky__a", "Sky Sports (Bwb) (MPU4) (set 2)", - "m4sky__b", "Sky Sports (Bwb) (MPU4) (set 3)", - "m4sky__c", "Sky Sports (Bwb) (MPU4) (set 4)", - "m4sky__d", "Sky Sports (Bwb) (MPU4) (set 5)", - "m4smshgb", "Smash 'n' Grab (Mdm) (MPU4, set 1)", - "m4smshgba", "Smash 'n' Grab (Mdm) (MPU4, set 2)", - "m4smshgbb", "Smash 'n' Grab (Mdm) (MPU4, set 3)", - "m4smshgbc", "Smash 'n' Grab (Mdm) (MPU4, set 4)", - "m4snklad", "Snakes & Ladders (Mdm) (MPU4)", - "m4snookr", "Snooker (Eurocoin) (MPU4)", - "m4snowbl", "Snowball Bingo (Mdm) (MPU4)", - "m4solsil", "Solid Silver Club (Barcrest) (MPU4) (SOS 2.2)", - "m4solsila", "Solid Silver Club (Barcrest) (MPU4) (SOS 2.1)", - "m4souls", "Soul Sister (Bwb) (MPU4) (set 1)", - "m4souls__a", "Soul Sister (Bwb) (MPU4) (set 2)", - "m4souls__b", "Soul Sister (Bwb) (MPU4) (set 3)", - "m4souls__c", "Soul Sister (Bwb) (MPU4) (set 4)", - "m4souls__d", "Soul Sister (Bwb) (MPU4) (set 5)", - "m4souls__e", "Soul Sister (Bwb) (MPU4) (set 6)", - "m4souls__f", "Soul Sister (Bwb) (MPU4) (set 7)", - "m4specu", "Speculator Club (Bwb) (MPU4)", - "m4spinbt", "Spin The Bottle (Bwb) (MPU4) (set 1)", - "m4spinbt__a", "Spin The Bottle (Bwb) (MPU4) (set 2)", - "m4spinbt__b", "Spin The Bottle (Bwb) (MPU4) (set 3)", - "m4spinbt__c", "Spin The Bottle (Bwb) (MPU4) (set 4)", - "m4spinbt__d", "Spin The Bottle (Bwb) (MPU4) (set 5)", - "m4spinbt__e", "Spin The Bottle (Bwb) (MPU4) (set 6)", - "m4spinbt__f", "Spin The Bottle (Bwb) (MPU4) (set 7)", - "m4spinbt__g", "Spin The Bottle (Bwb) (MPU4) (set 8)", - "m4spnwin", "Spin A Win (Cotswold Microsystems) (MPU4) (set 1)", - "m4spnwina", "Spin A Win (Cotswold Microsystems) (MPU4) (set 2)", - "m4spnwnc", "Spin-A-Win (Concept Games Ltd) (MPU4) (set 1)", - "m4spnwnc__a", "Spin-A-Win (Concept Games Ltd) (MPU4) (set 2)", - "m4spnwnc__b", "Spin-A-Win (Concept Games Ltd) (MPU4) (set 3)", - "m4spotln", "Spotlight (Nova) (MPU4)", - "m4spton", "Spot On (Pcp) (MPU4)", - "m4squid", "Squids In (Barcrest) (MPU4) (set 1)", - "m4squid__a", "Squids In (Barcrest) (MPU4) (set 2)", - "m4squid__b", "Squids In (Barcrest) (MPU4) (set 3)", - "m4squid__c", "Squids In (Barcrest) (MPU4) (set 4)", - "m4ssclas", "Super Streak Classic (Barcrest) (MPU4) (set 1)", - "m4ssclas__a", "Super Streak Classic (Barcrest) (MPU4) (set 2)", - "m4ssclas__b", "Super Streak Classic (Barcrest) (MPU4) (set 3)", - "m4ssclas__c", "Super Streak Classic (Barcrest) (MPU4) (set 4)", - "m4ssclas__d", "Super Streak Classic (Barcrest) (MPU4) (set 5)", - "m4ssclas__e", "Super Streak Classic (Barcrest) (MPU4) (set 6)", - "m4ssclas__f", "Super Streak Classic (Barcrest) (MPU4) (hack)", - "m4sss", "Spend Spend Spend (Barcrest) (MPU4) (set 1)", - "m4sss__a", "Spend Spend Spend (Barcrest) (MPU4) (set 2)", - "m4sss__b", "Spend Spend Spend (Barcrest) (MPU4) (set 3)", - "m4sss__c", "Spend Spend Spend (Barcrest) (MPU4) (set 4)", - "m4sss__d", "Spend Spend Spend (Barcrest) (MPU4) (set 5)", - "m4sss__e", "Spend Spend Spend (Barcrest) (MPU4) (set 6)", - "m4sss__f", "Spend Spend Spend (Barcrest) (MPU4) (set 7)", - "m4sss__g", "Spend Spend Spend (Barcrest) (MPU4) (set 8)", - "m4sss__h", "Spend Spend Spend (Barcrest) (MPU4) (set 9)", - "m4sss__i", "Spend Spend Spend (Barcrest) (MPU4) (set 10)", - "m4sss__j", "Spend Spend Spend (Barcrest) (MPU4) (set 11)", - "m4sss__k", "Spend Spend Spend (Barcrest) (MPU4) (set 12)", - "m4sss__l", "Spend Spend Spend (Barcrest) (MPU4) (set 13)", - "m4sstrek", "Super Streak (bootleg) (MPU4)", - "m4stakeu", "Stake Up Club (Barcrest) (MPU4) (SU 4.4)", - "m4stakeua", "Stake Up Club (Barcrest) (MPU4) (SU 4.8)", - "m4stakex", "Stake X (Leisurama) (MPU4, set 1)", - "m4stakexa", "Stake X (Leisurama) (MPU4, set 2)", - "m4stand2", "Stand To Deliver (DJE) (MPU4)", - "m4starbr", "Stars And Bars (Barcrest) (Dutch) (MPU4)", - "m4stards", "Stardust (Barcrest) (Dutch) (MPU4)", - "m4starst", "Stars & Stripes (Bwb) (MPU4) (set 1)", - "m4starst__a", "Stars & Stripes (Bwb) (MPU4) (set 2)", - "m4starst__b", "Stars & Stripes (Bwb) (MPU4) (set 3)", - "m4starst__c", "Stars & Stripes (Bwb) (MPU4) (set 4)", - "m4starst__d", "Stars & Stripes (Bwb) (MPU4) (set 5)", - "m4starst__e", "Stars & Stripes (Bwb) (MPU4) (set 6)", - "m4starst__f", "Stars & Stripes (Bwb) (MPU4) (set 7)", - "m4starst__g", "Stars & Stripes (Bwb) (MPU4) (set 8)", - "m4starst__h", "Stars & Stripes (Bwb) (MPU4) (set 9)", - "m4starst__i", "Stars & Stripes (Bwb) (MPU4) (set 10)", - "m4starst__j", "Stars & Stripes (Bwb) (MPU4) (set 11)", - "m4stc", "unknown MPU4 'STC 0.1' (Barcrest) (MPU4)", - "m4steptm", "Step Timer (Barcrest) (Dutch) (MPU4) (DST 1.1)", - "m4stopcl", "Stop the Clock (Barcrest) (MPU4) (SC2.5)", - "m4sunclb", "Sun Club (Bwb) (MPU4) (set 1)", - "m4sunclba", "Sun Club (Bwb) (MPU4) (set 2)", - "m4sunday", "Sunday Sport (Pcp) (MPU4)", - "m4sunscl", "Sunset Club (Bwb) (MPU4) (set 1)", - "m4sunscla", "Sunset Club (Bwb) (MPU4) (set 2)", - "m4sunsclb", "Sunset Club (Bwb) (MPU4) (set 3)", - "m4sunset", "Sunset Boulevard (Barcrest) (MPU4) (BSB 0.4)", - "m4sunseta", "Sunset Boulevard (Barcrest) (MPU4) (B25 1.2, set 1)", - "m4sunsetb", "Sunset Boulevard (Barcrest) (MPU4) (B25 1.2, set 2)", - "m4sunsetc", "Sunset Boulevard (Barcrest) (MPU4) (OSB 0.2)", - "m4sunsetd", "Sunset Boulevard (Barcrest) (MPU4) (SBU 2.0)", - "m4sunsete", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.1)", - "m4sunsetf", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 1)", - "m4sunsetg", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 2)", - "m4sunseth", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 3, bad)", - "m4sunseti", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 4)", - "m4sunsetj", "Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 5)", - "m4sunsetk", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.1)", - "m4sunsetl", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 1)", - "m4sunsetm", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 2)", - "m4sunsetn", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 3)", - "m4sunseto", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 4)", - "m4sunsetp", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 5)", - "m4sunsetq", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 6)", - "m4sunsetr", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 7)", - "m4sunsets", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 8)", - "m4sunsett", "Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 9)", - "m4supbf", "Super Bucks Fizz Club (Barcrest) (MPU4) (set 1)", - "m4supbfa", "Super Bucks Fizz Club (Barcrest) (MPU4) (set 2)", - "m4supbjc", "Super Blackjack Club (Barcrest) (MPU4) (set 1)", - "m4supbjca", "Super Blackjack Club (Barcrest) (MPU4) (set 2)", - "m4supbjcb", "Super Blackjack Club (Barcrest) (MPU4) (set 3)", - "m4supbjcc", "Super Blackjack Club (Barcrest) (MPU4) (set 4)", - "m4supbjcd", "Super Blackjack Club (Barcrest) (MPU4) (set 5)", - "m4supfru", "Supafruits (Union) (MPU4, set 1)", - "m4supfrua", "Supafruits (Union) (MPU4, set 2)", - "m4suphv", "Super Hyper Viper (Barcrest) (MPU4) (set 1)", - "m4suphv__a", "Super Hyper Viper (Barcrest) (MPU4) (set 2)", - "m4suphv__b", "Super Hyper Viper (Barcrest) (MPU4) (set 3)", - "m4suphv__c", "Super Hyper Viper (Barcrest) (MPU4) (set 4)", - "m4suphv__d", "Super Hyper Viper (Barcrest) (MPU4) (set 5)", - "m4suphv__e", "Super Hyper Viper (Barcrest) (MPU4) (set 6)", - "m4suphv__f", "Super Hyper Viper (Barcrest) (MPU4) (set 7)", - "m4suphv__g", "Super Hyper Viper (Barcrest) (MPU4) (set 8)", - "m4suphv__h", "Super Hyper Viper (Barcrest) (MPU4) (set 9)", - "m4suphv__i", "Super Hyper Viper (Barcrest) (MPU4) (set 10)", - "m4suphv__j", "Super Hyper Viper (Barcrest) (MPU4) (set 11)", - "m4suphv__k", "Super Hyper Viper (Barcrest) (MPU4) (set 12)", - "m4suphv__l", "Super Hyper Viper (Barcrest) (MPU4) (set 13)", - "m4suphv__m", "Super Hyper Viper (Barcrest) (MPU4) (set 14)", - "m4suphv__n", "Super Hyper Viper (Barcrest) (MPU4) (set 15)", - "m4suphv__o", "Super Hyper Viper (Barcrest) (MPU4) (set 16)", - "m4suphv__p", "Super Hyper Viper (Barcrest) (MPU4) (set 17)", - "m4supjst", "Super Jester (Pcp) (MPU4) (set 1)", - "m4supjsta", "Super Jester (Pcp) (MPU4) (set 2)", - "m4supjstb", "Super Jester (Pcp) (MPU4) (set 3)", - "m4supjstc", "Super Jester (Pcp) (MPU4) (set 4)", - "m4supjstd", "Super Jester (Pcp) (MPU4) (set 5)", - "m4supjste", "Super Jester (Pcp) (MPU4) (set 6)", - "m4supleg", "Super League (Bwb) (MPU4) (set 1)", - "m4supleg__a", "Super League (Bwb) (MPU4) (set 2)", - "m4supleg__b", "Super League (Bwb) (MPU4) (set 3)", - "m4supleg__c", "Super League (Bwb) (MPU4) (set 4)", - "m4supleg__d", "Super League (Bwb) (MPU4) (set 5)", - "m4suplegw", "Super League (Whitbread / Bwb) (MPU4)", - "m4supscr", "Super Soccer (Bwb) (MPU4) (set 1)", - "m4supscr__a", "Super Soccer (Bwb) (MPU4) (set 2)", - "m4supscr__b", "Super Soccer (Bwb) (MPU4) (set 3)", - "m4supscr__c", "Super Soccer (Bwb) (MPU4) (set 4)", - "m4supscr__d", "Super Soccer (Bwb) (MPU4) (set 5)", - "m4supscr__e", "Super Soccer (Bwb) (MPU4) (set 6)", - "m4supscr__f", "Super Soccer (Bwb) (MPU4) (set 7)", - "m4supscr__g", "Super Soccer (Bwb) (MPU4) (set 8)", - "m4supscr__h", "Super Soccer (Bwb) (MPU4) (set 9)", - "m4supscr__i", "Super Soccer (Bwb) (MPU4) (set 10)", - "m4supscr__j", "Super Soccer (Bwb) (MPU4) (set 11)", - "m4supscr__k", "Super Soccer (Bwb) (MPU4) (set 12)", - "m4supscr__l", "Super Soccer (Bwb) (MPU4) (set 13)", - "m4supscr__m", "Super Soccer (Bwb) (MPU4) (set 14)", - "m4supscr__n", "Super Soccer (Bwb) (MPU4) (set 15)", - "m4supsl", "Supa Silva (Barcrest) (MPU4)", - "m4supslt", "Supa Slot (Barcrest) (MPU4)", - "m4supst", "Super Streak (Barcrest) (MPU4) (set 1)", - "m4supst__0", "Super Streak (Barcrest) (MPU4) (set 28)", - "m4supst__1", "Super Streak (Barcrest) (MPU4) (set 29)", - "m4supst__2", "Super Streak (Barcrest) (MPU4) (set 30)", - "m4supst__3", "Super Streak (Barcrest) (MPU4) (set 31)", - "m4supst__4", "Super Streak (Barcrest) (MPU4) (set 32)", - "m4supst__5", "Super Streak (Barcrest) (MPU4) (set 33)", - "m4supst__6", "Super Streak (Barcrest) (MPU4) (set 34)", - "m4supst__7", "Super Streak (Barcrest) (MPU4) (set 35)", - "m4supst__8", "Super Streak (Barcrest) (MPU4) (set 36)", - "m4supst__9", "Super Streak (Barcrest) (MPU4) (set 37)", - "m4supst__a", "Super Streak (Barcrest) (MPU4) (set 2)", - "m4supst__a0", "Super Streak (Barcrest) (MPU4) (set 64)", - "m4supst__a1", "Super Streak (Barcrest) (MPU4) (set 65)", - "m4supst__a2", "Super Streak (Barcrest) (MPU4) (set 66)", - "m4supst__a3", "Super Streak (Barcrest) (MPU4) (set 67)", - "m4supst__a4", "Super Streak (Barcrest) (MPU4) (set 68)", - "m4supst__a5", "Super Streak (Barcrest) (MPU4) (set 69)", - "m4supst__a6", "Super Streak (Barcrest) (MPU4) (set 70)", - "m4supst__a7", "Super Streak (Barcrest) (MPU4) (set 71)", - "m4supst__a8", "Super Streak (Barcrest) (MPU4) (set 72)", - "m4supst__a9", "Super Streak (Barcrest) (MPU4) (set 73)", - "m4supst__aa", "Super Streak (Barcrest) (MPU4) (set 38)", - "m4supst__ab", "Super Streak (Barcrest) (MPU4) (set 39)", - "m4supst__ac", "Super Streak (Barcrest) (MPU4) (set 40)", - "m4supst__ad", "Super Streak (Barcrest) (MPU4) (set 41)", - "m4supst__ae", "Super Streak (Barcrest) (MPU4) (set 42)", - "m4supst__af", "Super Streak (Barcrest) (MPU4) (set 43)", - "m4supst__ag", "Super Streak (Barcrest) (MPU4) (set 44)", - "m4supst__ah", "Super Streak (Barcrest) (MPU4) (set 45)", - "m4supst__ai", "Super Streak (Barcrest) (MPU4) (set 46)", - "m4supst__aj", "Super Streak (Barcrest) (MPU4) (set 47)", - "m4supst__ak", "Super Streak (Barcrest) (MPU4) (set 48)", - "m4supst__al", "Super Streak (Barcrest) (MPU4) (set 49)", - "m4supst__am", "Super Streak (Barcrest) (MPU4) (set 50)", - "m4supst__an", "Super Streak (Barcrest) (MPU4) (set 51)", - "m4supst__ao", "Super Streak (Barcrest) (MPU4) (set 52)", - "m4supst__ap", "Super Streak (Barcrest) (MPU4) (set 53)", - "m4supst__aq", "Super Streak (Barcrest) (MPU4) (set 54)", - "m4supst__ar", "Super Streak (Barcrest) (MPU4) (set 55)", - "m4supst__as", "Super Streak (Barcrest) (MPU4) (set 56)", - "m4supst__at", "Super Streak (Barcrest) (MPU4) (set 57)", - "m4supst__au", "Super Streak (Barcrest) (MPU4) (set 58)", - "m4supst__av", "Super Streak (Barcrest) (MPU4) (set 59)", - "m4supst__aw", "Super Streak (Barcrest) (MPU4) (set 60)", - "m4supst__ax", "Super Streak (Barcrest) (MPU4) (set 61)", - "m4supst__ay", "Super Streak (Barcrest) (MPU4) (set 62)", - "m4supst__az", "Super Streak (Barcrest) (MPU4) (set 63)", - "m4supst__b", "Super Streak (Barcrest) (MPU4) (set 3)", - "m4supst__b0", "Super Streak (Barcrest) (MPU4) (set 100)", - "m4supst__b1", "Super Streak (Barcrest) (MPU4) (set 101)", - "m4supst__b2", "Super Streak (Barcrest) (MPU4) (set 102)", - "m4supst__b3", "Super Streak (Barcrest) (MPU4) (set 103)", - "m4supst__b4", "Super Streak (Barcrest) (MPU4) (set 104)", - "m4supst__b5", "Super Streak (Barcrest) (MPU4) (set 105)", - "m4supst__ba", "Super Streak (Barcrest) (MPU4) (set 74)", - "m4supst__bb", "Super Streak (Barcrest) (MPU4) (set 75)", - "m4supst__bc", "Super Streak (Barcrest) (MPU4) (set 76)", - "m4supst__bd", "Super Streak (Barcrest) (MPU4) (set 77)", - "m4supst__be", "Super Streak (Barcrest) (MPU4) (set 78)", - "m4supst__bf", "Super Streak (Barcrest) (MPU4) (set 79)", - "m4supst__bg", "Super Streak (Barcrest) (MPU4) (set 80)", - "m4supst__bh", "Super Streak (Barcrest) (MPU4) (set 81)", - "m4supst__bi", "Super Streak (Barcrest) (MPU4) (set 82)", - "m4supst__bj", "Super Streak (Barcrest) (MPU4) (set 83)", - "m4supst__bk", "Super Streak (Barcrest) (MPU4) (set 84)", - "m4supst__bl", "Super Streak (Barcrest) (MPU4) (set 85)", - "m4supst__bm", "Super Streak (Barcrest) (MPU4) (set 86)", - "m4supst__bn", "Super Streak (Barcrest) (MPU4) (set 87)", - "m4supst__bo", "Super Streak (Barcrest) (MPU4) (set 88)", - "m4supst__bp", "Super Streak (Barcrest) (MPU4) (set 89)", - "m4supst__bq", "Super Streak (Barcrest) (MPU4) (set 90)", - "m4supst__br", "Super Streak (Barcrest) (MPU4) (set 91)", - "m4supst__bs", "Super Streak (Barcrest) (MPU4) (set 92)", - "m4supst__bt", "Super Streak (Barcrest) (MPU4) (set 93)", - "m4supst__bu", "Super Streak (Barcrest) (MPU4) (set 94)", - "m4supst__bv", "Super Streak (Barcrest) (MPU4) (set 95)", - "m4supst__bw", "Super Streak (Barcrest) (MPU4) (set 96)", - "m4supst__bx", "Super Streak (Barcrest) (MPU4) (set 97)", - "m4supst__by", "Super Streak (Barcrest) (MPU4) (set 98)", - "m4supst__bz", "Super Streak (Barcrest) (MPU4) (set 99)", - "m4supst__c", "Super Streak (Barcrest) (MPU4) (set 4)", - "m4supst__d", "Super Streak (Barcrest) (MPU4) (set 5)", - "m4supst__e", "Super Streak (Barcrest) (MPU4) (set 6)", - "m4supst__f", "Super Streak (Barcrest) (MPU4) (set 7)", - "m4supst__g", "Super Streak (Barcrest) (MPU4) (set 8)", - "m4supst__h", "Super Streak (Barcrest) (MPU4) (set 9)", - "m4supst__i", "Super Streak (Barcrest) (MPU4) (set 10)", - "m4supst__j", "Super Streak (Barcrest) (MPU4) (set 11)", - "m4supst__k", "Super Streak (Barcrest) (MPU4) (set 12)", - "m4supst__l", "Super Streak (Barcrest) (MPU4) (set 13)", - "m4supst__m", "Super Streak (Barcrest) (MPU4) (set 14)", - "m4supst__n", "Super Streak (Barcrest) (MPU4) (set 15)", - "m4supst__o", "Super Streak (Barcrest) (MPU4) (set 16)", - "m4supst__p", "Super Streak (Barcrest) (MPU4) (set 17)", - "m4supst__q", "Super Streak (Barcrest) (MPU4) (set 18)", - "m4supst__r", "Super Streak (Barcrest) (MPU4) (set 19)", - "m4supst__s", "Super Streak (Barcrest) (MPU4) (set 20)", - "m4supst__t", "Super Streak (Barcrest) (MPU4) (set 21)", - "m4supst__u", "Super Streak (Barcrest) (MPU4) (set 22)", - "m4supst__v", "Super Streak (Barcrest) (MPU4) (set 23)", - "m4supst__w", "Super Streak (Barcrest) (MPU4) (set 24)", - "m4supst__x", "Super Streak (Barcrest) (MPU4) (set 25)", - "m4supst__y", "Super Streak (Barcrest) (MPU4) (set 26)", - "m4supst__z", "Super Streak (Barcrest) (MPU4) (set 27)", - "m4suptrn", "Supatron (Barcrest) (MPU4)", - "m4suptub", "Super Tubes (Barcrest) (MPU4) (S4T 1.0, set 1))", - "m4suptuba", "Super Tubes (Barcrest) (MPU4) (S4T 1.0, set 2)", - "m4suptwo", "Super Two (Barcrest) (MPU4)", - "m4sure", "Sure Thing (Bwb) (MPU4) (set 1)", - "m4sure__a", "Sure Thing (Bwb) (MPU4) (set 2)", - "m4sure__b", "Sure Thing (Bwb) (MPU4) (set 3)", - "m4sure__c", "Sure Thing (Bwb) (MPU4) (set 4)", - "m4surf", "Super Surfin' (Gemini) (MPU4) (set 1)", - "m4surfa", "Super Surfin' (Gemini) (MPU4) (set 2)", - "m4surfb", "Super Surfin' (Gemini) (MPU4) (set 3)", - "m4swpnot", "Swap-A-Note (Barcrest) (v3.3) (MPU4)", - "m4swpnota", "Swap-A-Note (Barcrest) (v3.2D) (MPU4)", - "m4t266", "unknown MPU4 'TTO 1.1' (MPU4?)", - "m4taj", "Taj Mahal (Barcrest) (Dutch) (MPU4)", - "m4take2", "Take Two (Barcrest) (MPU4) (TTO 1.2)", - "m4take2a", "Take Two (Barcrest) (MPU4) (TTO 1.1)", - "m4take5", "Take 5 (Barcrest) (MPU4)", - "m4takepk", "Take Your Pick (Barcrest) (MPU4) (set 1)", - "m4takepk__0", "Take Your Pick (Barcrest) (MPU4) (set 28)", - "m4takepk__1", "Take Your Pick (Barcrest) (MPU4) (set 29)", - "m4takepk__a", "Take Your Pick (Barcrest) (MPU4) (set 2)", - "m4takepk__b", "Take Your Pick (Barcrest) (MPU4) (set 3)", - "m4takepk__c", "Take Your Pick (Barcrest) (MPU4) (set 4)", - "m4takepk__d", "Take Your Pick (Barcrest) (MPU4) (set 5)", - "m4takepk__e", "Take Your Pick (Barcrest) (MPU4) (set 6)", - "m4takepk__f", "Take Your Pick (Barcrest) (MPU4) (set 7)", - "m4takepk__g", "Take Your Pick (Barcrest) (MPU4) (set 8)", - "m4takepk__h", "Take Your Pick (Barcrest) (MPU4) (set 9)", - "m4takepk__i", "Take Your Pick (Barcrest) (MPU4) (set 10)", - "m4takepk__j", "Take Your Pick (Barcrest) (MPU4) (set 11)", - "m4takepk__k", "Take Your Pick (Barcrest) (MPU4) (set 12)", - "m4takepk__l", "Take Your Pick (Barcrest) (MPU4) (set 13)", - "m4takepk__m", "Take Your Pick (Barcrest) (MPU4) (set 14)", - "m4takepk__n", "Take Your Pick (Barcrest) (MPU4) (set 15)", - "m4takepk__o", "Take Your Pick (Barcrest) (MPU4) (set 16)", - "m4takepk__p", "Take Your Pick (Barcrest) (MPU4) (set 17)", - "m4takepk__q", "Take Your Pick (Barcrest) (MPU4) (set 18)", - "m4takepk__r", "Take Your Pick (Barcrest) (MPU4) (set 19)", - "m4takepk__s", "Take Your Pick (Barcrest) (MPU4) (set 20)", - "m4takepk__t", "Take Your Pick (Barcrest) (MPU4) (set 21)", - "m4takepk__u", "Take Your Pick (Barcrest) (MPU4) (set 22)", - "m4takepk__v", "Take Your Pick (Barcrest) (MPU4) (set 23)", - "m4takepk__w", "Take Your Pick (Barcrest) (MPU4) (set 24)", - "m4takepk__x", "Take Your Pick (Barcrest) (MPU4) (set 25)", - "m4takepk__y", "Take Your Pick (Barcrest) (MPU4) (set 26)", - "m4takepk__z", "Take Your Pick (Barcrest) (MPU4) (set 27)", - "m4tbplay", "Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 1)", - "m4tbplaya", "Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 2)", - "m4tbplayb", "Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 3)", - "m4tbreel", "Turbo Reel (Barcrest) (Dutch) (MPU4) (set 1)", - "m4tbrldx", "Turbo Reel (Barcrest) (Dutch) (MPU4) (set 3, Deluxe?)", - "m4techno", "Techno Reel (Barcrest) (MPU4) (DTE) (set 1)", - "m4technoa", "Techno Reel (Barcrest) (MPU4) (DTE) (set 2)", - "m4tenten", "10 X 10 (Barcrest) (MPU4) (set 1)", - "m4tenten__0", "10 X 10 (Barcrest) (MPU4) (set 28)", - "m4tenten__1", "10 X 10 (Barcrest) (MPU4) (set 29)", - "m4tenten__2", "10 X 10 (Barcrest) (MPU4) (set 30)", - "m4tenten__3", "10 X 10 (Barcrest) (MPU4) (set 31)", - "m4tenten__4", "10 X 10 (Barcrest) (MPU4) (set 32)", - "m4tenten__5", "10 X 10 (Barcrest) (MPU4) (set 33)", - "m4tenten__6", "10 X 10 (Barcrest) (MPU4) (set 34)", - "m4tenten__7", "10 X 10 (Barcrest) (MPU4) (set 35)", - "m4tenten__8", "10 X 10 (Barcrest) (MPU4) (set 36)", - "m4tenten__9", "10 X 10 (Barcrest) (MPU4) (set 37)", - "m4tenten__a", "10 X 10 (Barcrest) (MPU4) (set 2)", - "m4tenten__a0", "10 X 10 (Barcrest) (MPU4) (set 64)", - "m4tenten__a1", "10 X 10 (Barcrest) (MPU4) (set 65)", - "m4tenten__a2", "10 X 10 (Barcrest) (MPU4) (set 66)", - "m4tenten__aa", "10 X 10 (Barcrest) (MPU4) (set 38)", - "m4tenten__ab", "10 X 10 (Barcrest) (MPU4) (set 39)", - "m4tenten__ac", "10 X 10 (Barcrest) (MPU4) (set 40)", - "m4tenten__ad", "10 X 10 (Barcrest) (MPU4) (set 41)", - "m4tenten__ae", "10 X 10 (Barcrest) (MPU4) (set 42)", - "m4tenten__af", "10 X 10 (Barcrest) (MPU4) (set 43)", - "m4tenten__ag", "10 X 10 (Barcrest) (MPU4) (set 44)", - "m4tenten__ah", "10 X 10 (Barcrest) (MPU4) (set 45)", - "m4tenten__ai", "10 X 10 (Barcrest) (MPU4) (set 46)", - "m4tenten__aj", "10 X 10 (Barcrest) (MPU4) (set 47)", - "m4tenten__ak", "10 X 10 (Barcrest) (MPU4) (set 48)", - "m4tenten__al", "10 X 10 (Barcrest) (MPU4) (set 49)", - "m4tenten__am", "10 X 10 (Barcrest) (MPU4) (set 50)", - "m4tenten__an", "10 X 10 (Barcrest) (MPU4) (set 51)", - "m4tenten__ao", "10 X 10 (Barcrest) (MPU4) (set 52)", - "m4tenten__ap", "10 X 10 (Barcrest) (MPU4) (set 53)", - "m4tenten__aq", "10 X 10 (Barcrest) (MPU4) (set 54)", - "m4tenten__ar", "10 X 10 (Barcrest) (MPU4) (set 55)", - "m4tenten__as", "10 X 10 (Barcrest) (MPU4) (set 56)", - "m4tenten__at", "10 X 10 (Barcrest) (MPU4) (set 57)", - "m4tenten__au", "10 X 10 (Barcrest) (MPU4) (set 58)", - "m4tenten__av", "10 X 10 (Barcrest) (MPU4) (set 59)", - "m4tenten__aw", "10 X 10 (Barcrest) (MPU4) (set 60)", - "m4tenten__ax", "10 X 10 (Barcrest) (MPU4) (set 61)", - "m4tenten__ay", "10 X 10 (Barcrest) (MPU4) (set 62)", - "m4tenten__az", "10 X 10 (Barcrest) (MPU4) (set 63)", - "m4tenten__b", "10 X 10 (Barcrest) (MPU4) (set 3)", - "m4tenten__c", "10 X 10 (Barcrest) (MPU4) (set 4)", - "m4tenten__d", "10 X 10 (Barcrest) (MPU4) (set 5)", - "m4tenten__e", "10 X 10 (Barcrest) (MPU4) (set 6)", - "m4tenten__f", "10 X 10 (Barcrest) (MPU4) (set 7)", - "m4tenten__g", "10 X 10 (Barcrest) (MPU4) (set 8)", - "m4tenten__h", "10 X 10 (Barcrest) (MPU4) (set 9)", - "m4tenten__i", "10 X 10 (Barcrest) (MPU4) (set 10)", - "m4tenten__j", "10 X 10 (Barcrest) (MPU4) (set 11)", - "m4tenten__k", "10 X 10 (Barcrest) (MPU4) (set 12)", - "m4tenten__l", "10 X 10 (Barcrest) (MPU4) (set 13)", - "m4tenten__m", "10 X 10 (Barcrest) (MPU4) (set 14)", - "m4tenten__n", "10 X 10 (Barcrest) (MPU4) (set 15)", - "m4tenten__o", "10 X 10 (Barcrest) (MPU4) (set 16)", - "m4tenten__p", "10 X 10 (Barcrest) (MPU4) (set 17)", - "m4tenten__q", "10 X 10 (Barcrest) (MPU4) (set 18)", - "m4tenten__r", "10 X 10 (Barcrest) (MPU4) (set 19)", - "m4tenten__s", "10 X 10 (Barcrest) (MPU4) (set 20)", - "m4tenten__t", "10 X 10 (Barcrest) (MPU4) (set 21)", - "m4tenten__u", "10 X 10 (Barcrest) (MPU4) (set 22)", - "m4tenten__v", "10 X 10 (Barcrest) (MPU4) (set 23)", - "m4tenten__w", "10 X 10 (Barcrest) (MPU4) (set 24)", - "m4tenten__x", "10 X 10 (Barcrest) (MPU4) (set 25)", - "m4tenten__y", "10 X 10 (Barcrest) (MPU4) (set 26)", - "m4tenten__z", "10 X 10 (Barcrest) (MPU4) (set 27)", - "m4thehit", "The Hit (Barcrest) (MPU4)", - "m4themob", "The Mob (Mdm) (MPU4, set 1)", - "m4themoba", "The Mob (Mdm) (MPU4, set 2)", - "m4themobb", "The Mob (Mdm) (MPU4, set 3)", - "m4thestr", "The Streak (Barcrest) (MPU4) (set 1)", - "m4thestr__a", "The Streak (Barcrest) (MPU4) (set 2)", - "m4thestr__b", "The Streak (Barcrest) (MPU4) (set 3)", - "m4thestr__c", "The Streak (Barcrest) (MPU4) (set 4)", - "m4thestr__d", "The Streak (Barcrest) (MPU4) (set 5)", - "m4thestr__e", "The Streak (Barcrest) (MPU4) (set 6)", - "m4thestr__f", "The Streak (Barcrest) (MPU4) (set 7)", - "m4thestr__g", "The Streak (Barcrest) (MPU4) (set 8)", - "m4thestr__h", "The Streak (Barcrest) (MPU4) (set 9)", - "m4thestr__i", "The Streak (Barcrest) (MPU4) (set 10)", - "m4thestr__j", "The Streak (Barcrest) (MPU4) (set 11)", - "m4thestr__k", "The Streak (Barcrest) (MPU4) (set 12)", - "m4thestr__l", "The Streak (Barcrest) (MPU4) (set 13)", - "m4thestr__m", "The Streak (Barcrest) (MPU4) (set 14)", - "m4thestr__n", "The Streak (Barcrest) (MPU4) (set 15)", - "m4thestr__o", "The Streak (Barcrest) (MPU4) (set 16)", - "m4thestr__p", "The Streak (Barcrest) (MPU4) (set 17)", - "m4thestr__q", "The Streak (Barcrest) (MPU4) (set 18)", - "m4thestr__r", "The Streak (Barcrest) (MPU4) (set 19)", - "m4thestr__s", "The Streak (Barcrest) (MPU4) (set 20)", - "m4thestr__t", "The Streak (Barcrest) (MPU4) (set 21)", - "m4thestr__u", "The Streak (Barcrest) (MPU4) (set 22)", - "m4thestr__v", "The Streak (Barcrest) (MPU4) (set 23)", - "m4thestr__w", "The Streak (Barcrest) (MPU4) (set 24)", - "m4thestr__x", "The Streak (Barcrest) (MPU4) (set 25)", - "m4thestr__y", "The Streak (Barcrest) (MPU4) (set 26)", - "m4tic", "Tic Tac Toe (Barcrest) (MPU4) (set 1)", - "m4tic__a", "Tic Tac Toe (Barcrest) (MPU4) (set 2)", - "m4tic__b", "Tic Tac Toe (Barcrest) (MPU4) (set 3)", - "m4tic__c", "Tic Tac Toe (Barcrest) (MPU4) (set 4)", - "m4tic__d", "Tic Tac Toe (Barcrest) (MPU4) (set 5)", - "m4tic__e", "Tic Tac Toe (Barcrest) (MPU4) (set 6)", - "m4tic__f", "Tic Tac Toe (Barcrest) (MPU4) (set 7)", - "m4tic__g", "Tic Tac Toe (Barcrest) (MPU4) (set 8)", - "m4tic__h", "Tic Tac Toe (Barcrest) (MPU4) (set 9)", - "m4tic__i", "Tic Tac Toe (Barcrest) (MPU4) (set 10)", - "m4tic__j", "Tic Tac Toe (Barcrest) (MPU4) (set 11)", - "m4tic__k", "Tic Tac Toe (Barcrest) (MPU4) (set 12)", - "m4tic__l", "Tic Tac Toe (Barcrest) (MPU4) (set 13)", - "m4tic__m", "Tic Tac Toe (Barcrest) (MPU4) (set 14)", - "m4tic__n", "Tic Tac Toe (Barcrest) (MPU4) (set 15)", - "m4tic__o", "Tic Tac Toe (Barcrest) (MPU4) (set 16)", - "m4tic__p", "Tic Tac Toe (Barcrest) (MPU4) (set 17)", - "m4tic__r", "Tic Tac Toe (Barcrest) (MPU4) (set 18)", - "m4tic__s", "Tic Tac Toe (Barcrest) (MPU4) (set 19)", - "m4ticcla", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 1)", - "m4ticcla__0", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 28)", - "m4ticcla__a", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 2)", - "m4ticcla__b", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 3)", - "m4ticcla__c", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 4)", - "m4ticcla__d", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 5)", - "m4ticcla__e", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 6)", - "m4ticcla__f", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 7)", - "m4ticcla__g", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 8)", - "m4ticcla__h", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 9)", - "m4ticcla__i", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 10)", - "m4ticcla__j", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 11)", - "m4ticcla__k", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 12)", - "m4ticcla__l", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 13)", - "m4ticcla__m", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 14)", - "m4ticcla__n", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 15)", - "m4ticcla__o", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 16)", - "m4ticcla__p", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 17)", - "m4ticcla__q", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 18)", - "m4ticcla__r", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 19)", - "m4ticcla__s", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 20)", - "m4ticcla__t", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 21)", - "m4ticcla__u", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 22)", - "m4ticcla__v", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 23)", - "m4ticcla__w", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 24)", - "m4ticcla__x", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 25)", - "m4ticcla__y", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 26)", - "m4ticcla__z", "Tic Tac Toe Classic (Barcrest) (MPU4) (set 27)", - "m4ticglc", "Tic Tac Toe Gold (Barcrest) (MPU4) (set 1)", - "m4ticglc__a", "Tic Tac Toe Gold (Barcrest) (MPU4) (set 2)", - "m4ticglc__b", "Tic Tac Toe Gold (Barcrest) (MPU4) (set 3)", - "m4ticglc__c", "Tic Tac Toe Gold (Barcrest) (MPU4) (set 4)", - "m4ticglc__d", "Tic Tac Toe Gold (Barcrest) (MPU4) (set 5)", - "m4tiktak", "Tic Tak Cash (Barcrest) (MPU4)", - "m4toma", "Tomahawk (Barcrest) (MPU4)", - "m4toot", "Ten Out Of Ten (Barcrest) (MPU4) (set 1)", - "m4toot__0", "Ten Out Of Ten (Barcrest) (MPU4) (set 28)", - "m4toot__1", "Ten Out Of Ten (Barcrest) (MPU4) (set 29)", - "m4toot__2", "Ten Out Of Ten (Barcrest) (MPU4) (set 30)", - "m4toot__3", "Ten Out Of Ten (Barcrest) (MPU4) (set 31)", - "m4toot__4", "Ten Out Of Ten (Barcrest) (MPU4) (set 32)", - "m4toot__5", "Ten Out Of Ten (Barcrest) (MPU4) (set 33)", - "m4toot__6", "Ten Out Of Ten (Barcrest) (MPU4) (set 34)", - "m4toot__7", "Ten Out Of Ten (Barcrest) (MPU4) (set 35)", - "m4toot__8", "Ten Out Of Ten (Barcrest) (MPU4) (set 36)", - "m4toot__9", "Ten Out Of Ten (Barcrest) (MPU4) (set 37)", - "m4toot__a", "Ten Out Of Ten (Barcrest) (MPU4) (set 2)", - "m4toot__aa", "Ten Out Of Ten (Barcrest) (MPU4) (set 38)", - "m4toot__ab", "Ten Out Of Ten (Barcrest) (MPU4) (set 39)", - "m4toot__ac", "Ten Out Of Ten (Barcrest) (MPU4) (set 40)", - "m4toot__ad", "Ten Out Of Ten (Barcrest) (MPU4) (set 41)", - "m4toot__ae", "Ten Out Of Ten (Barcrest) (MPU4) (set 42)", - "m4toot__af", "Ten Out Of Ten (Barcrest) (MPU4) (set 43)", - "m4toot__ag", "Ten Out Of Ten (Barcrest) (MPU4) (set 44)", - "m4toot__ah", "Ten Out Of Ten (Barcrest) (MPU4) (set 45)", - "m4toot__ai", "Ten Out Of Ten (Barcrest) (MPU4) (set 46)", - "m4toot__aj", "Ten Out Of Ten (Barcrest) (MPU4) (set 47)", - "m4toot__ak", "Ten Out Of Ten (Barcrest) (MPU4) (set 48)", - "m4toot__al", "Ten Out Of Ten (Barcrest) (MPU4) (set 49)", - "m4toot__b", "Ten Out Of Ten (Barcrest) (MPU4) (set 3)", - "m4toot__c", "Ten Out Of Ten (Barcrest) (MPU4) (set 4)", - "m4toot__d", "Ten Out Of Ten (Barcrest) (MPU4) (set 5)", - "m4toot__e", "Ten Out Of Ten (Barcrest) (MPU4) (set 6)", - "m4toot__f", "Ten Out Of Ten (Barcrest) (MPU4) (set 7)", - "m4toot__g", "Ten Out Of Ten (Barcrest) (MPU4) (set 8)", - "m4toot__h", "Ten Out Of Ten (Barcrest) (MPU4) (set 9)", - "m4toot__i", "Ten Out Of Ten (Barcrest) (MPU4) (set 10)", - "m4toot__j", "Ten Out Of Ten (Barcrest) (MPU4) (set 11)", - "m4toot__k", "Ten Out Of Ten (Barcrest) (MPU4) (set 12)", - "m4toot__l", "Ten Out Of Ten (Barcrest) (MPU4) (set 13)", - "m4toot__m", "Ten Out Of Ten (Barcrest) (MPU4) (set 14)", - "m4toot__n", "Ten Out Of Ten (Barcrest) (MPU4) (set 15)", - "m4toot__o", "Ten Out Of Ten (Barcrest) (MPU4) (set 16)", - "m4toot__p", "Ten Out Of Ten (Barcrest) (MPU4) (set 17)", - "m4toot__q", "Ten Out Of Ten (Barcrest) (MPU4) (set 18)", - "m4toot__r", "Ten Out Of Ten (Barcrest) (MPU4) (set 19)", - "m4toot__s", "Ten Out Of Ten (Barcrest) (MPU4) (set 20)", - "m4toot__t", "Ten Out Of Ten (Barcrest) (MPU4) (set 21)", - "m4toot__u", "Ten Out Of Ten (Barcrest) (MPU4) (set 22)", - "m4toot__v", "Ten Out Of Ten (Barcrest) (MPU4) (set 23)", - "m4toot__w", "Ten Out Of Ten (Barcrest) (MPU4) (set 24)", - "m4toot__x", "Ten Out Of Ten (Barcrest) (MPU4) (set 25)", - "m4toot__y", "Ten Out Of Ten (Barcrest) (MPU4) (set 26)", - "m4toot__z", "Ten Out Of Ten (Barcrest) (MPU4) (set 27)", - "m4toot__za", "Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3, hack?)", - "m4toot__zb", "Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.4, hack?)", - "m4topact", "Top Action (Barcrest) (Dutch) (MPU4) (set 1)", - "m4topacta", "Top Action (Barcrest) (Dutch) (MPU4) (set 2)", - "m4topdk", "Top Deck (Barcrest) (Dutch) (MPU4)", - "m4topdog", "Top Dog (Barcrest) (MPU4) (set 1)", - "m4topdog__a", "Top Dog (Barcrest) (MPU4) (set 2)", - "m4topdog__b", "Top Dog (Barcrest) (MPU4) (set 3)", - "m4topdog__c", "Top Dog (Barcrest) (MPU4) (set 4)", - "m4topdog__d", "Top Dog (Barcrest) (MPU4) (set 5)", - "m4topdog__e", "Top Dog (Barcrest) (MPU4) (set 6)", - "m4topdog__f", "Top Dog (Barcrest) (MPU4) (set 7)", - "m4topdog__g", "Top Dog (Barcrest) (MPU4) (set 8)", - "m4topdog__h", "Top Dog (Barcrest) (MPU4) (set 9)", - "m4topdog__i", "Top Dog (Barcrest) (MPU4) (set 10)", - "m4topdog__j", "Top Dog (Barcrest) (MPU4) (set 11)", - "m4topdog__k", "Top Dog (Barcrest) (MPU4) (set 12)", - "m4topdog__l", "Top Dog (Barcrest) (MPU4) (set 13)", - "m4topdog__m", "Top Dog (Barcrest) (MPU4) (set 14)", - "m4topdog__n", "Top Dog (Barcrest) (MPU4) (set 15)", - "m4topdog__o", "Top Dog (Barcrest) (MPU4) (set 16)", - "m4topdog__p", "Top Dog (Barcrest) (MPU4) (set 17)", - "m4topdog__q", "Top Dog (Barcrest) (MPU4) (set 18)", - "m4topdog__r", "Top Dog (Barcrest) (MPU4) (set 19)", - "m4topdog__s", "Top Dog (Barcrest) (MPU4) (set 20)", - "m4topdog__t", "Top Dog (Barcrest) (MPU4) (set 21)", - "m4topdog__u", "Top Dog (Barcrest) (MPU4) (set 22)", - "m4topdog__v", "Top Dog (Barcrest) (MPU4) (set 23)", - "m4topdog__w", "Top Dog (Barcrest) (MPU4) (set 24)", - "m4topdog__x", "Top Dog (Barcrest) (MPU4) (set 25)", - "m4topdog__y", "Top Dog (Barcrest) (MPU4) (set 26)", - "m4topdog__z", "Top Dog (Barcrest) (MPU4) (set 27)", - "m4topgr", "Top Gear (Barcrest) (MPU4)", - "m4toplot", "Top The Lot (Barcrest) (MPU4, T4L 1.0)", - "m4toprn", "Top Run (Barcrest) (Dutch) (MPU4)", - "m4topst", "Top Stop (Barcrest) (MPU4)", - "m4toptak", "Top Take (Barcrest) (MPU4)", - "m4topten", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4)", - "m4topten__0", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2YD)", - "m4topten__1", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2H)", - "m4topten__2", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2K)", - "m4topten__3", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2R)", - "m4topten__4", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2)", - "m4topten__5", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2Y)", - "m4topten__6", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2AD)", - "m4topten__7", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2B)", - "m4topten__8", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2BD)", - "m4topten__9", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2C)", - "m4topten__a", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0, hack?)", - "m4topten__aa", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2D)", - "m4topten__ab", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2DH)", - "m4topten__ac", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2KD)", - "m4topten__ad", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2RD)", - "m4topten__ae", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2YD)", - "m4topten__af", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2H)", - "m4topten__ag", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2K)", - "m4topten__ah", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2R)", - "m4topten__ai", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2)", - "m4topten__aj", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2Y)", - "m4topten__ak", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4AD)", - "m4topten__al", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4B)", - "m4topten__am", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4BD)", - "m4topten__an", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4C)", - "m4topten__ao", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4D)", - "m4topten__ap", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4DH)", - "m4topten__aq", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4KD)", - "m4topten__ar", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4RD)", - "m4topten__as", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4YD)", - "m4topten__at", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4H)", - "m4topten__au", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4K)", - "m4topten__av", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4R)", - "m4topten__aw", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4Y)", - "m4topten__ax", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.1)", - "m4topten__b", "Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2, hack?)", - "m4topten__e", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0AD)", - "m4topten__f", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0B)", - "m4topten__g", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0BD)", - "m4topten__h", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0C)", - "m4topten__i", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0D)", - "m4topten__j", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0DH)", - "m4topten__k", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0KD)", - "m4topten__l", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0RD)", - "m4topten__m", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0YD)", - "m4topten__n", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0H)", - "m4topten__o", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0K)", - "m4topten__p", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0R)", - "m4topten__q", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0)", - "m4topten__r", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0Y)", - "m4topten__s", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2AD)", - "m4topten__t", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2B)", - "m4topten__u", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2BD)", - "m4topten__v", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2C)", - "m4topten__w", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2D)", - "m4topten__x", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2DH)", - "m4topten__y", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2KD)", - "m4topten__z", "Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2RD)", - "m4toptena", "Top Tenner (Barcrest) (MPU4, Mod 2 type, TP 2.7)", - "m4toptim", "Top Timer (Barcrest) (Dutch) (MPU4) (DTT) (set 1)", - "m4toptima", "Top Timer (Barcrest) (Dutch) (MPU4) (DTT) (set 2)", - "m4tornad", "Tornado (Qps) (MPU4) (set 1)", - "m4tornad__a", "Tornado (Qps) (MPU4) (set 2)", - "m4tornad__b", "Tornado (Qps) (MPU4) (set 3)", - "m4tornad__c", "Tornado (Qps) (MPU4) (set 4)", - "m4tornad__d", "Tornado (Qps) (MPU4) (set 5)", - "m4tornad__e", "Tornado (Qps) (MPU4) (set 6)", - "m4tornad__f", "Tornado (Qps) (MPU4) (set 7)", - "m4tornad__g", "Tornado (Qps) (MPU4) (set 8)", - "m4treel", "Turbo Reels (unknown) (MPU4?) (set 1)", - "m4treela", "Turbo Reels (unknown) (MPU4?) (set 2)", - "m4trex", "Trex (Bwb) (MPU4) (set 1)", - "m4trex__a", "Trex (Bwb) (MPU4) (set 2)", - "m4trex__b", "Trex (Bwb) (MPU4) (set 3)", - "m4trex__c", "Trex (Bwb) (MPU4) (set 4)", - "m4trex__d", "Trex (Bwb) (MPU4) (set 5)", - "m4trex__e", "Trex (Bwb) (MPU4) (set 6)", - "m4trex__f", "Trex (Bwb) (MPU4) (set 7)", - "m4trex__g", "Trex (Bwb) (MPU4) (set 8)", - "m4trex__h", "Trex (Bwb) (MPU4) (set 9)", - "m4trex__i", "Trex (Bwb) (MPU4) (set 10)", - "m4trex__j", "Trex (Bwb) (MPU4) (set 11)", - "m4trex__k", "Trex (Bwb) (MPU4) (set 12)", - "m4trex__l", "Trex (Bwb) (MPU4) (set 13)", - "m4trg", "Turbo Reel Gambler (Avantime?) (MPU4) (set 1)", - "m4trg__0", "Turbo Reel Gambler (Avantime?) (MPU4) (set 28)", - "m4trg__1", "Turbo Reel Gambler (Avantime?) (MPU4) (set 29)", - "m4trg__2", "Turbo Reel Gambler (Avantime?) (MPU4) (set 30)", - "m4trg__3", "Turbo Reel Gambler (Avantime?) (MPU4) (set 31)", - "m4trg__4", "Turbo Reel Gambler (Avantime?) (MPU4) (set 32)", - "m4trg__a", "Turbo Reel Gambler (Avantime?) (MPU4) (set 2)", - "m4trg__b", "Turbo Reel Gambler (Avantime?) (MPU4) (set 3)", - "m4trg__c", "Turbo Reel Gambler (Avantime?) (MPU4) (set 4)", - "m4trg__d", "Turbo Reel Gambler (Avantime?) (MPU4) (set 5)", - "m4trg__e", "Turbo Reel Gambler (Avantime?) (MPU4) (set 6)", - "m4trg__f", "Turbo Reel Gambler (Avantime?) (MPU4) (set 7)", - "m4trg__g", "Turbo Reel Gambler (Avantime?) (MPU4) (set 8)", - "m4trg__h", "Turbo Reel Gambler (Avantime?) (MPU4) (set 9)", - "m4trg__i", "Turbo Reel Gambler (Avantime?) (MPU4) (set 10)", - "m4trg__j", "Turbo Reel Gambler (Avantime?) (MPU4) (set 11)", - "m4trg__k", "Turbo Reel Gambler (Avantime?) (MPU4) (set 12)", - "m4trg__l", "Turbo Reel Gambler (Avantime?) (MPU4) (set 13)", - "m4trg__m", "Turbo Reel Gambler (Avantime?) (MPU4) (set 14)", - "m4trg__n", "Turbo Reel Gambler (Avantime?) (MPU4) (set 15)", - "m4trg__o", "Turbo Reel Gambler (Avantime?) (MPU4) (set 16)", - "m4trg__p", "Turbo Reel Gambler (Avantime?) (MPU4) (set 17)", - "m4trg__q", "Turbo Reel Gambler (Avantime?) (MPU4) (set 18)", - "m4trg__r", "Turbo Reel Gambler (Avantime?) (MPU4) (set 19)", - "m4trg__s", "Turbo Reel Gambler (Avantime?) (MPU4) (set 20)", - "m4trg__t", "Turbo Reel Gambler (Avantime?) (MPU4) (set 21)", - "m4trg__u", "Turbo Reel Gambler (Avantime?) (MPU4) (set 22)", - "m4trg__v", "Turbo Reel Gambler (Avantime?) (MPU4) (set 23)", - "m4trg__w", "Turbo Reel Gambler (Avantime?) (MPU4) (set 24)", - "m4trg__x", "Turbo Reel Gambler (Avantime?) (MPU4) (set 25)", - "m4trg__y", "Turbo Reel Gambler (Avantime?) (MPU4) (set 26)", - "m4trg__z", "Turbo Reel Gambler (Avantime?) (MPU4) (set 27)", - "m4tribnk", "Triple Bank (Barcrest) (Dutch) (MPU4)", - "m4tricol", "Tricolor (Barcrest) (Dutch) (MPU4)", - "m4tridic", "Triple Dice (Barcrest) (Dutch) (MPU4)", - "m4trimad", "Triple Madness (Union) (MPU4)", - "m4tropcl", "Tropicana Club (Barcrest) (MPU4) (set 1)", - "m4tropcla", "Tropicana Club (Barcrest) (MPU4) (set 2)", - "m4tropclb", "Tropicana Club (Barcrest) (MPU4) (set 3)", - "m4tropclc", "Tropicana Club (Barcrest) (MPU4) (set 4)", - "m4tropcld", "Tropicana Club (Barcrest) (MPU4) (set 5)", - "m4tst", "MPU4 Unit Test (Program 4)", - "m4tst2", "MPU4 Unit Test (Program 2)", - "m4ttak", "Tic Tac Take (unknown) (MPU4)", - "m4ttdia", "Ten Ten Do It Again (Barcrest) (MPU4) (set 1)", - "m4ttdia__a", "Ten Ten Do It Again (Barcrest) (MPU4) (set 2)", - "m4ttdia__b", "Ten Ten Do It Again (Barcrest) (MPU4) (set 3)", - "m4ttdia__c", "Ten Ten Do It Again (Barcrest) (MPU4) (set 4)", - "m4ttdia__d", "Ten Ten Do It Again (Barcrest) (MPU4) (set 5)", - "m4ttdia__e", "Ten Ten Do It Again (Barcrest) (MPU4) (set 6)", - "m4ttdia__f", "Ten Ten Do It Again (Barcrest) (MPU4) (set 7)", - "m4ttdia__g", "Ten Ten Do It Again (Barcrest) (MPU4) (set 8)", - "m4ttdia__h", "Ten Ten Do It Again (Barcrest) (MPU4) (set 9)", - "m4ttdia__i", "Ten Ten Do It Again (Barcrest) (MPU4) (set 10)", - "m4ttdia__j", "Ten Ten Do It Again (Barcrest) (MPU4) (set 11)", - "m4ttdia__k", "Ten Ten Do It Again (Barcrest) (MPU4) (set 12)", - "m4ttdia__l", "Ten Ten Do It Again (Barcrest) (MPU4) (set 13)", - "m4ttdia__m", "Ten Ten Do It Again (Barcrest) (MPU4) (set 14)", - "m4ttrail", "Treasure Trail (Empire) (MPU4, set 1)", - "m4ttraila", "Treasure Trail (Empire) (MPU4, set 2)", - "m4ttrailb", "Treasure Trail (Empire) (MPU4, set 3)", - "m4tupen", "Tuppenny Cracker (Barcrest - Bootleg) (MPU4)", - "m4tutcl", "Tutti Fruity Classic (Barcrest) (MPU4) (set 1)", - "m4tutcl__a", "Tutti Fruity Classic (Barcrest) (MPU4) (set 2)", - "m4tutcl__b", "Tutti Fruity Classic (Barcrest) (MPU4) (set 3)", - "m4tutcl__c", "Tutti Fruity Classic (Barcrest) (MPU4) (set 4)", - "m4tutcl__d", "Tutti Fruity Classic (Barcrest) (MPU4) (set 5)", - "m4tutcl__e", "Tutti Fruity Classic (Barcrest) (MPU4) (set 6)", - "m4tutcl__f", "Tutti Fruity Classic (Barcrest) (MPU4) (set 7)", - "m4tutcl__g", "Tutti Fruity Classic (Barcrest) (MPU4) (set 8)", - "m4tutcl__h", "Tutti Fruity Classic (Barcrest) (MPU4) (set 9)", - "m4tutcl__i", "Tutti Fruity Classic (Barcrest) (MPU4) (set 10)", - "m4tutcl__j", "Tutti Fruity Classic (Barcrest) (MPU4) (set 11)", - "m4tutcl__k", "Tutti Fruity Classic (Barcrest) (MPU4) (set 12)", - "m4tutfrt", "Tutti Fruity (Barcrest) (MPU4) (set 1)", - "m4tutfrt__0", "Tutti Fruity (Barcrest) (MPU4) (set 28)", - "m4tutfrt__1", "Tutti Fruity (Barcrest) (MPU4) (set 29)", - "m4tutfrt__2", "Tutti Fruity (Barcrest) (MPU4) (set 30)", - "m4tutfrt__3", "Tutti Fruity (Barcrest) (MPU4) (set 31)", - "m4tutfrt__4", "Tutti Fruity (Barcrest) (MPU4) (set 32)", - "m4tutfrt__5", "Tutti Fruity (Barcrest) (MPU4) (set 33)", - "m4tutfrt__6", "Tutti Fruity (Barcrest) (MPU4) (set 34)", - "m4tutfrt__7", "Tutti Fruity (Barcrest) (MPU4) (set 35)", - "m4tutfrt__8", "Tutti Fruity (Barcrest) (MPU4) (set 36)", - "m4tutfrt__9", "Tutti Fruity (Barcrest) (MPU4) (set 37)", - "m4tutfrt__a", "Tutti Fruity (Barcrest) (MPU4) (set 2)", - "m4tutfrt__a0", "Tutti Fruity (Barcrest) (MPU4) (set 64)", - "m4tutfrt__a1", "Tutti Fruity (Barcrest) (MPU4) (set 65)", - "m4tutfrt__a2", "Tutti Fruity (Barcrest) (MPU4) (set 66)", - "m4tutfrt__a3", "Tutti Fruity (Barcrest) (MPU4) (set 67)", - "m4tutfrt__a4", "Tutti Fruity (Barcrest) (MPU4) (set 68)", - "m4tutfrt__a5", "Tutti Fruity (Barcrest) (MPU4) (set 69)", - "m4tutfrt__aa", "Tutti Fruity (Barcrest) (MPU4) (set 38)", - "m4tutfrt__ab", "Tutti Fruity (Barcrest) (MPU4) (set 39)", - "m4tutfrt__ac", "Tutti Fruity (Barcrest) (MPU4) (set 40)", - "m4tutfrt__ad", "Tutti Fruity (Barcrest) (MPU4) (set 41)", - "m4tutfrt__ae", "Tutti Fruity (Barcrest) (MPU4) (set 42)", - "m4tutfrt__af", "Tutti Fruity (Barcrest) (MPU4) (set 43)", - "m4tutfrt__ag", "Tutti Fruity (Barcrest) (MPU4) (set 44)", - "m4tutfrt__ai", "Tutti Fruity (Barcrest) (MPU4) (set 46)", - "m4tutfrt__aj", "Tutti Fruity (Barcrest) (MPU4) (set 47)", - "m4tutfrt__ak", "Tutti Fruity (Barcrest) (MPU4) (set 48)", - "m4tutfrt__al", "Tutti Fruity (Barcrest) (MPU4) (set 49)", - "m4tutfrt__am", "Tutti Fruity (Barcrest) (MPU4) (set 50)", - "m4tutfrt__an", "Tutti Fruity (Barcrest) (MPU4) (set 51)", - "m4tutfrt__ao", "Tutti Fruity (Barcrest) (MPU4) (set 52)", - "m4tutfrt__ap", "Tutti Fruity (Barcrest) (MPU4) (set 53)", - "m4tutfrt__aq", "Tutti Fruity (Barcrest) (MPU4) (set 54)", - "m4tutfrt__ar", "Tutti Fruity (Barcrest) (MPU4) (set 55)", - "m4tutfrt__as", "Tutti Fruity (Barcrest) (MPU4) (set 56)", - "m4tutfrt__at", "Tutti Fruity (Barcrest) (MPU4) (set 57)", - "m4tutfrt__au", "Tutti Fruity (Barcrest) (MPU4) (set 58)", - "m4tutfrt__av", "Tutti Fruity (Barcrest) (MPU4) (set 59)", - "m4tutfrt__aw", "Tutti Fruity (Barcrest) (MPU4) (set 60)", - "m4tutfrt__ax", "Tutti Fruity (Barcrest) (MPU4) (set 61)", - "m4tutfrt__ay", "Tutti Fruity (Barcrest) (MPU4) (set 62)", - "m4tutfrt__az", "Tutti Fruity (Barcrest) (MPU4) (set 63)", - "m4tutfrt__b", "Tutti Fruity (Barcrest) (MPU4) (set 3)", - "m4tutfrt__c", "Tutti Fruity (Barcrest) (MPU4) (set 4)", - "m4tutfrt__d", "Tutti Fruity (Barcrest) (MPU4) (set 5)", - "m4tutfrt__e", "Tutti Fruity (Barcrest) (MPU4) (set 6)", - "m4tutfrt__f", "Tutti Fruity (Barcrest) (MPU4) (set 7)", - "m4tutfrt__g", "Tutti Fruity (Barcrest) (MPU4) (set 8)", - "m4tutfrt__h", "Tutti Fruity (Barcrest) (MPU4) (set 9)", - "m4tutfrt__i", "Tutti Fruity (Barcrest) (MPU4) (set 10)", - "m4tutfrt__j", "Tutti Fruity (Barcrest) (MPU4) (set 11)", - "m4tutfrt__k", "Tutti Fruity (Barcrest) (MPU4) (set 12)", - "m4tutfrt__l", "Tutti Fruity (Barcrest) (MPU4) (set 13)", - "m4tutfrt__m", "Tutti Fruity (Barcrest) (MPU4) (set 14)", - "m4tutfrt__n", "Tutti Fruity (Barcrest) (MPU4) (set 15)", - "m4tutfrt__o", "Tutti Fruity (Barcrest) (MPU4) (set 16)", - "m4tutfrt__p", "Tutti Fruity (Barcrest) (MPU4) (set 17)", - "m4tutfrt__q", "Tutti Fruity (Barcrest) (MPU4) (set 18)", - "m4tutfrt__r", "Tutti Fruity (Barcrest) (MPU4) (set 19)", - "m4tutfrt__s", "Tutti Fruity (Barcrest) (MPU4) (set 20)", - "m4tutfrt__t", "Tutti Fruity (Barcrest) (MPU4) (set 21)", - "m4tutfrt__u", "Tutti Fruity (Barcrest) (MPU4) (set 22)", - "m4tutfrt__v", "Tutti Fruity (Barcrest) (MPU4) (set 23)", - "m4tutfrt__w", "Tutti Fruity (Barcrest) (MPU4) (set 24)", - "m4tutfrt__x", "Tutti Fruity (Barcrest) (MPU4) (set 25)", - "m4tutfrt__y", "Tutti Fruity (Barcrest) (MPU4) (set 26)", - "m4tutfrt__z", "Tutti Fruity (Barcrest) (MPU4) (set 27)", - "m4twilgt", "Twilight (Barcrest) (Dutch) (MPU4)", - "m4twintm", "Twin Timer (Barcrest) (MPU4) (D2T 1.1)", - "m4twist", "Twist Again (Barcrest) (MPU4) (set 1)", - "m4twista", "Twist Again (Barcrest) (MPU4) (set 2)", - "m4twistb", "Twist Again (Barcrest) (MPU4) (set 3)", - "m4twstcl", "Twister Club (Crystal) (MPU4) (set 1)", - "m4twstcla", "Twister Club (Crystal) (MPU4) (set 2)", - "m4twstclb", "Twister Club (Crystal) (MPU4) (set 3)", - "m4twstr", "Twister (Crystal) (MPU4) (set 1)", - "m4twstra", "Twister (Crystal) (MPU4) (set 2)", - "m4twstrb", "Twister (Crystal) (MPU4) (set 3)", - "m4twstrc", "Twister (Crystal) (MPU4) (set 4)", - "m4twstrd", "Twister (Crystal) (MPU4) (set 5)", - "m4tylb", "Thank Your Lucky Bars (Crystal) (MPU4) (set 1)", - "m4tylba", "Thank Your Lucky Bars (Crystal) (MPU4) (set 2)", - "m4typcl", "Take Your Pick Club (Barcrest) (MPU4) (set 1)", - "m4typcl__a", "Take Your Pick Club (Barcrest) (MPU4) (set 2)", - "m4typcl__b", "Take Your Pick Club (Barcrest) (MPU4) (set 3)", - "m4typcl__c", "Take Your Pick Club (Barcrest) (MPU4) (set 4)", - "m4typcl__d", "Take Your Pick Club (Barcrest) (MPU4) (set 5)", - "m4unibox", "Unibox (Union) (MPU4, set 1)", - "m4uniboxa", "Unibox (Union) (MPU4, set 2)", - "m4unique", "Unique (Union) (MPU4, set 1)", - "m4uniquep", "Unique (Union) (MPU4, set 2)", - "m4univ", "Universe (Barcrest) (Dutch) (MPU4) (DUN)", - "m4unkjok", "unknown MPU4 'Joker' (MPU4?) (set 1)", - "m4unkjoka", "unknown MPU4 'Joker' (MPU4?) (set 2)", - "m4unkjokb", "unknown MPU4 'Joker' (MPU4?) (set 3)", - "m4unkjokc", "unknown MPU4 'Joker' (MPU4?) (set 4)", - "m4uuaw", "Up Up and Away (Barcrest) (MPU4) (set 1)", - "m4uuaw__0", "Up Up and Away (Barcrest) (MPU4) (set 28)", - "m4uuaw__1", "Up Up and Away (Barcrest) (MPU4) (set 29)", - "m4uuaw__2", "Up Up and Away (Barcrest) (MPU4) (set 30)", - "m4uuaw__3", "Up Up and Away (Barcrest) (MPU4) (set 31)", - "m4uuaw__4", "Up Up and Away (Barcrest) (MPU4) (set 32)", - "m4uuaw__5", "Up Up and Away (Barcrest) (MPU4) (set 33)", - "m4uuaw__6", "Up Up and Away (Barcrest) (MPU4) (set 34)", - "m4uuaw__7", "Up Up and Away (Barcrest) (MPU4) (set 35)", - "m4uuaw__8", "Up Up and Away (Barcrest) (MPU4) (set 36)", - "m4uuaw__9", "Up Up and Away (Barcrest) (MPU4) (set 37)", - "m4uuaw__a", "Up Up and Away (Barcrest) (MPU4) (set 2)", - "m4uuaw__aa", "Up Up and Away (Barcrest) (MPU4) (set 38)", - "m4uuaw__ab", "Up Up and Away (Barcrest) (MPU4) (set 39)", - "m4uuaw__ac", "Up Up and Away (Barcrest) (MPU4) (set 40)", - "m4uuaw__ad", "Up Up and Away (Barcrest) (MPU4) (set 41)", - "m4uuaw__ae", "Up Up and Away (Barcrest) (MPU4) (set 42)", - "m4uuaw__af", "Up Up and Away (Barcrest) (MPU4) (set 43)", - "m4uuaw__ag", "Up Up and Away (Barcrest) (MPU4) (set 44)", - "m4uuaw__ah", "Up Up and Away (Barcrest) (MPU4) (set 45)", - "m4uuaw__ai", "Up Up and Away (Barcrest) (MPU4) (set 46)", - "m4uuaw__aj", "Up Up and Away (Barcrest) (MPU4) (set 47)", - "m4uuaw__ak", "Up Up and Away (Barcrest) (MPU4) (set 48)", - "m4uuaw__al", "Up Up and Away (Barcrest) (MPU4) (set 49)", - "m4uuaw__am", "Up Up and Away (Barcrest) (MPU4) (set 50)", - "m4uuaw__an", "Up Up and Away (Barcrest) (MPU4) (set 51)", - "m4uuaw__ao", "Up Up and Away (Barcrest) (MPU4) (set 52)", - "m4uuaw__ap", "Up Up and Away (Barcrest) (MPU4) (set 53)", - "m4uuaw__aq", "Up Up and Away (Barcrest) (MPU4) (set 54)", - "m4uuaw__b", "Up Up and Away (Barcrest) (MPU4) (set 3)", - "m4uuaw__c", "Up Up and Away (Barcrest) (MPU4) (set 4)", - "m4uuaw__d", "Up Up and Away (Barcrest) (MPU4) (set 5)", - "m4uuaw__e", "Up Up and Away (Barcrest) (MPU4) (set 6)", - "m4uuaw__f", "Up Up and Away (Barcrest) (MPU4) (set 7)", - "m4uuaw__g", "Up Up and Away (Barcrest) (MPU4) (set 8)", - "m4uuaw__h", "Up Up and Away (Barcrest) (MPU4) (set 9)", - "m4uuaw__i", "Up Up and Away (Barcrest) (MPU4) (set 10)", - "m4uuaw__j", "Up Up and Away (Barcrest) (MPU4) (set 11)", - "m4uuaw__k", "Up Up and Away (Barcrest) (MPU4) (set 12)", - "m4uuaw__l", "Up Up and Away (Barcrest) (MPU4) (set 13)", - "m4uuaw__m", "Up Up and Away (Barcrest) (MPU4) (set 14)", - "m4uuaw__n", "Up Up and Away (Barcrest) (MPU4) (set 15)", - "m4uuaw__o", "Up Up and Away (Barcrest) (MPU4) (set 16)", - "m4uuaw__p", "Up Up and Away (Barcrest) (MPU4) (set 17)", - "m4uuaw__q", "Up Up and Away (Barcrest) (MPU4) (set 18)", - "m4uuaw__r", "Up Up and Away (Barcrest) (MPU4) (set 19)", - "m4uuaw__s", "Up Up and Away (Barcrest) (MPU4) (set 20)", - "m4uuaw__t", "Up Up and Away (Barcrest) (MPU4) (set 21)", - "m4uuaw__u", "Up Up and Away (Barcrest) (MPU4) (set 22)", - "m4uuaw__v", "Up Up and Away (Barcrest) (MPU4) (set 23)", - "m4uuaw__w", "Up Up and Away (Barcrest) (MPU4) (set 24)", - "m4uuaw__x", "Up Up and Away (Barcrest) (MPU4) (set 25)", - "m4uuaw__y", "Up Up and Away (Barcrest) (MPU4) (set 26)", - "m4uuaw__z", "Up Up and Away (Barcrest) (MPU4) (set 27)", - "m4vdexpr", "Voodoo Express (Bwb) (MPU4) (set 1)", - "m4vdexpr__a", "Voodoo Express (Bwb) (MPU4) (set 2)", - "m4vdexpr__b", "Voodoo Express (Bwb) (MPU4) (set 3)", - "m4vdexpr__c", "Voodoo Express (Bwb) (MPU4) (set 4)", - "m4vdexpr__d", "Voodoo Express (Bwb) (MPU4) (set 5)", - "m4vegast", "Vegas Strip (Barcrest) (MPU4) (set 1)", - "m4vegast__a", "Vegas Strip (Barcrest) (MPU4) (set 2)", - "m4vegast__b", "Vegas Strip (Barcrest) (MPU4) (set 3)", - "m4vegast__c", "Vegas Strip (Barcrest) (MPU4) (set 4)", - "m4vegast__d", "Vegas Strip (Barcrest) (MPU4) (set 5)", - "m4vegast__e", "Vegas Strip (Barcrest) (MPU4) (set 6)", - "m4vegast__f", "Vegas Strip (Barcrest) (MPU4) (set 7)", - "m4vegast__g", "Vegas Strip (Barcrest) (MPU4) (set 8)", - "m4vegast__h", "Vegas Strip (Barcrest) (MPU4) (set 9)", - "m4vegast__i", "Vegas Strip (Barcrest) (MPU4) (set 10)", - "m4vegast__j", "Vegas Strip (Barcrest) (MPU4) (set 11)", - "m4vegast__k", "Vegas Strip (Barcrest) (MPU4) (set 12)", - "m4vegast__l", "Vegas Strip (Barcrest) (MPU4) (set 13)", - "m4vegast__m", "Vegas Strip (Barcrest) (MPU4) (set 14)", - "m4vegast__n", "Vegas Strip (Barcrest) (MPU4) (set 15)", - "m4vegast__o", "Vegas Strip (Barcrest) (MPU4) (set 16)", - "m4vegast__p", "Vegas Strip (Barcrest) (MPU4) (set 17)", - "m4vegast__q", "Vegas Strip (Barcrest) (MPU4) (set 18)", - "m4vegast__r", "Vegas Strip (Barcrest) (MPU4) (set 19)", - "m4vegast__s", "Vegas Strip (Barcrest) (MPU4) (set 20)", - "m4vegast__t", "Vegas Strip (Barcrest) (MPU4) (set 21)", - "m4vegast__u", "Vegas Strip (Barcrest) (MPU4) (set 22)", - "m4vegast__v", "Vegas Strip (Barcrest) (MPU4) (set 23)", - "m4vegast__w", "Vegas Strip (Barcrest) (MPU4) (set 24)", - "m4vegast__x", "Vegas Strip (Barcrest) (MPU4) (set 25)", - "m4vegastg", "Vegas Strip (Barcrest) [German] (MPU4)", - "m4vfm", "Value For Money (Global) (MPU4)", - "m4vivaes", "Viva Espana (Barcrest) (MPU4) (set 1)", - "m4vivaes__0", "Viva Espana (Barcrest) (MPU4) (set 28)", - "m4vivaes__1", "Viva Espana (Barcrest) (MPU4) (set 29)", - "m4vivaes__2", "Viva Espana (Barcrest) (MPU4) (set 30)", - "m4vivaes__3", "Viva Espana (Barcrest) (MPU4) (set 31)", - "m4vivaes__4", "Viva Espana (Barcrest) (MPU4) (set 32)", - "m4vivaes__5", "Viva Espana (Barcrest) (MPU4) (set 33)", - "m4vivaes__6", "Viva Espana (Barcrest) (MPU4) (set 34)", - "m4vivaes__7", "Viva Espana (Barcrest) (MPU4) (set 35)", - "m4vivaes__8", "Viva Espana (Barcrest) (MPU4) (set 36)", - "m4vivaes__9", "Viva Espana (Barcrest) (MPU4) (set 37)", - "m4vivaes__a", "Viva Espana (Barcrest) (MPU4) (set 2)", - "m4vivaes__aa", "Viva Espana (Barcrest) (MPU4) (set 38)", - "m4vivaes__ab", "Viva Espana (Barcrest) (MPU4) (set 39)", - "m4vivaes__ac", "Viva Espana (Barcrest) (MPU4) (set 40)", - "m4vivaes__ad", "Viva Espana (Barcrest) (MPU4) (set 41)", - "m4vivaes__ae", "Viva Espana (Barcrest) (MPU4) (set 42)", - "m4vivaes__af", "Viva Espana (Barcrest) (MPU4) (set 43)", - "m4vivaes__ag", "Viva Espana (Barcrest) (MPU4) (set 44)", - "m4vivaes__ah", "Viva Espana (Barcrest) (MPU4) (set 45)", - "m4vivaes__ai", "Viva Espana (Barcrest) (MPU4) (set 46)", - "m4vivaes__aj", "Viva Espana (Barcrest) (MPU4) (set 47)", - "m4vivaes__ak", "Viva Espana (Barcrest) (MPU4) (set 48)", - "m4vivaes__al", "Viva Espana (Barcrest) (MPU4) (set 49)", - "m4vivaes__am", "Viva Espana (Barcrest) (MPU4) (set 50)", - "m4vivaes__an", "Viva Espana (Barcrest) (MPU4) (set 51)", - "m4vivaes__ao", "Viva Espana (Barcrest) (MPU4) (set 52)", - "m4vivaes__ap", "Viva Espana (Barcrest) (MPU4) (set 53)", - "m4vivaes__b", "Viva Espana (Barcrest) (MPU4) (set 3)", - "m4vivaes__c", "Viva Espana (Barcrest) (MPU4) (set 4)", - "m4vivaes__d", "Viva Espana (Barcrest) (MPU4) (set 5)", - "m4vivaes__e", "Viva Espana (Barcrest) (MPU4) (set 6)", - "m4vivaes__f", "Viva Espana (Barcrest) (MPU4) (set 7)", - "m4vivaes__g", "Viva Espana (Barcrest) (MPU4) (set 8)", - "m4vivaes__h", "Viva Espana (Barcrest) (MPU4) (set 9)", - "m4vivaes__i", "Viva Espana (Barcrest) (MPU4) (set 10)", - "m4vivaes__j", "Viva Espana (Barcrest) (MPU4) (set 11)", - "m4vivaes__k", "Viva Espana (Barcrest) (MPU4) (set 12)", - "m4vivaes__l", "Viva Espana (Barcrest) (MPU4) (set 13)", - "m4vivaes__m", "Viva Espana (Barcrest) (MPU4) (set 14)", - "m4vivaes__n", "Viva Espana (Barcrest) (MPU4) (set 15)", - "m4vivaes__o", "Viva Espana (Barcrest) (MPU4) (set 16)", - "m4vivaes__p", "Viva Espana (Barcrest) (MPU4) (set 17)", - "m4vivaes__q", "Viva Espana (Barcrest) (MPU4) (set 18)", - "m4vivaes__r", "Viva Espana (Barcrest) (MPU4) (set 19)", - "m4vivaes__s", "Viva Espana (Barcrest) (MPU4) (set 20)", - "m4vivaes__t", "Viva Espana (Barcrest) (MPU4) (set 21)", - "m4vivaes__u", "Viva Espana (Barcrest) (MPU4) (set 22)", - "m4vivaes__v", "Viva Espana (Barcrest) (MPU4) (set 23)", - "m4vivaes__w", "Viva Espana (Barcrest) (MPU4) (set 24)", - "m4vivaes__x", "Viva Espana (Barcrest) (MPU4) (set 25)", - "m4vivaes__y", "Viva Espana (Barcrest) (MPU4) (set 26)", - "m4vivaes__z", "Viva Espana (Barcrest) (MPU4) (set 27)", - "m4vivalv", "Viva Las Vegas (Barcrest) (MPU4) (set 1)", - "m4vivalv__0", "Viva Las Vegas (Barcrest) (MPU4) (set 28)", - "m4vivalv__1", "Viva Las Vegas (Barcrest) (MPU4) (set 29)", - "m4vivalv__2", "Viva Las Vegas (Barcrest) (MPU4) (set 30)", - "m4vivalv__3", "Viva Las Vegas (Barcrest) (MPU4) (set 31)", - "m4vivalv__4", "Viva Las Vegas (Barcrest) (MPU4) (set 32)", - "m4vivalv__5", "Viva Las Vegas (Barcrest) (MPU4) (set 33)", - "m4vivalv__6", "Viva Las Vegas (Barcrest) (MPU4) (set 34)", - "m4vivalv__7", "Viva Las Vegas (Barcrest) (MPU4) (set 35)", - "m4vivalv__8", "Viva Las Vegas (Barcrest) (MPU4) (set 36)", - "m4vivalv__a", "Viva Las Vegas (Barcrest) (MPU4) (set 2)", - "m4vivalv__b", "Viva Las Vegas (Barcrest) (MPU4) (set 3)", - "m4vivalv__c", "Viva Las Vegas (Barcrest) (MPU4) (set 4)", - "m4vivalv__e", "Viva Las Vegas (Barcrest) (MPU4) (set 6)", - "m4vivalv__f", "Viva Las Vegas (Barcrest) (MPU4) (set 7)", - "m4vivalv__g", "Viva Las Vegas (Barcrest) (MPU4) (set 8)", - "m4vivalv__h", "Viva Las Vegas (Barcrest) (MPU4) (set 9)", - "m4vivalv__i", "Viva Las Vegas (Barcrest) (MPU4) (set 10)", - "m4vivalv__j", "Viva Las Vegas (Barcrest) (MPU4) (set 11)", - "m4vivalv__k", "Viva Las Vegas (Barcrest) (MPU4) (set 12)", - "m4vivalv__l", "Viva Las Vegas (Barcrest) (MPU4) (set 13)", - "m4vivalv__m", "Viva Las Vegas (Barcrest) (MPU4) (set 14)", - "m4vivalv__n", "Viva Las Vegas (Barcrest) (MPU4) (set 15)", - "m4vivalv__o", "Viva Las Vegas (Barcrest) (MPU4) (set 16)", - "m4vivalv__p", "Viva Las Vegas (Barcrest) (MPU4) (set 17)", - "m4vivalv__q", "Viva Las Vegas (Barcrest) (MPU4) (set 18)", - "m4vivalv__r", "Viva Las Vegas (Barcrest) (MPU4) (set 19)", - "m4vivalv__s", "Viva Las Vegas (Barcrest) (MPU4) (set 20)", - "m4vivalv__t", "Viva Las Vegas (Barcrest) (MPU4) (set 21)", - "m4vivalv__u", "Viva Las Vegas (Barcrest) (MPU4) (set 22)", - "m4vivalv__v", "Viva Las Vegas (Barcrest) (MPU4) (set 23)", - "m4vivalv__w", "Viva Las Vegas (Barcrest) (MPU4) (set 24)", - "m4vivalv__x", "Viva Las Vegas (Barcrest) (MPU4) (set 25)", - "m4vivalv__y", "Viva Las Vegas (Barcrest) (MPU4) (set 26)", - "m4vivalv__z", "Viva Las Vegas (Barcrest) (MPU4) (set 27)", - "m4vivalvd", "Viva Las Vegas (Barcrest) [Dutch] (MPU4) (DLV)", - "m4vivan", "Viva Las Vegas (Nova) (MPU4)", - "m4vivess", "Viva Espana Showcase (Barcrest) (MPU4) (set 1)", - "m4vivess__a", "Viva Espana Showcase (Barcrest) (MPU4) (set 2)", - "m4vivess__b", "Viva Espana Showcase (Barcrest) (MPU4) (set 3)", - "m4vivess__c", "Viva Espana Showcase (Barcrest) (MPU4) (set 4)", - "m4vivess__d", "Viva Espana Showcase (Barcrest) (MPU4) (set 5)", - "m4vivess__f", "Viva Espana Showcase (Barcrest) (MPU4) (set 6)", - "m4vivess__g", "Viva Espana Showcase (Barcrest) (MPU4) (set 7)", - "m4vivess__i", "Viva Espana Showcase (Barcrest) (MPU4) (set 8)", - "m4vivess__j", "Viva Espana Showcase (Barcrest) (MPU4) (set 9)", - "m4vivess__k", "Viva Espana Showcase (Barcrest) (MPU4) (set 10)", - "m4vivess__l", "Viva Espana Showcase (Barcrest) (MPU4) (set 11)", - "m4vivess__m", "Viva Espana Showcase (Barcrest) (MPU4) (set 12)", - "m4vivess__n", "Viva Espana Showcase (Barcrest) (MPU4) (set 13)", - "m4vivess__o", "Viva Espana Showcase (Barcrest) (MPU4) (set 14)", - "m4vivess__p", "Viva Espana Showcase (Barcrest) (MPU4) (set 15)", - "m4viz", "Viz (Barcrest) (MPU4) (set 1)", - "m4viz__a", "Viz (Barcrest) (MPU4) (set 2)", - "m4viz__b", "Viz (Barcrest) (MPU4) (set 3)", - "m4viz__c", "Viz (Barcrest) (MPU4) (set 4)", - "m4viz__d", "Viz (Barcrest) (MPU4) (set 5)", - "m4viz__e", "Viz (Barcrest) (MPU4) (set 6)", - "m4viz__f", "Viz (Barcrest) (MPU4) (set 7)", - "m4viz__g", "Viz (Barcrest) (MPU4) (set 8)", - "m4viz__h", "Viz (Barcrest) (MPU4) (set 9)", - "m4viz__i", "Viz (Barcrest) (MPU4) (set 10)", - "m4viz__j", "Viz (Barcrest) (MPU4) (set 11)", - "m4viz__k", "Viz (Barcrest) (MPU4) (set 12)", - "m4viz__l", "Viz (Barcrest) (MPU4) (set 13)", - "m4viz__m", "Viz (Barcrest) (MPU4) (set 14)", - "m4viz__n", "Viz (Barcrest) (MPU4) (set 15)", - "m4viz__o", "Viz (Barcrest) (MPU4) (set 16)", - "m4viz__p", "Viz (Barcrest) (MPU4) (set 17)", - "m4viz__q", "Viz (Barcrest) (MPU4) (set 18)", - "m4viz__r", "Viz (Barcrest) (MPU4) (set 19)", - "m4viz__s", "Viz (Barcrest) (MPU4) (set 20)", - "m4viz__t", "Viz (Barcrest) (MPU4) (set 21)", - "m4viz__u", "Viz (Barcrest) (MPU4) (set 22)", - "m4viz__v", "Viz (Barcrest) (MPU4) (set 23)", - "m4viz__w", "Viz (Barcrest) (MPU4) (set 24)", - "m4volcan", "Volcano (Bwb) (MPU4) (set 1)", - "m4volcan__a", "Volcano (Bwb) (MPU4) (set 2)", - "m4volcan__b", "Volcano (Bwb) (MPU4) (set 3)", - "m4volcan__c", "Volcano (Bwb) (MPU4) (set 4)", - "m4volcan__d", "Volcano (Bwb) (MPU4) (set 5)", - "m4volcan__e", "Volcano (Bwb) (MPU4) (set 6)", - "m4volcan__f", "Volcano (Bwb) (MPU4) (set 7)", - "m4volcan__g", "Volcano (Bwb) (MPU4) (set 8)", - "m4voodoo", "Voodoo 1000 (Barcrest) (Dutch) (MPU4) (DDO 3.2)", - "m4wayin", "Way In (Barcrest) (MPU4) (set 1)", - "m4wayina", "Way In (Barcrest) (MPU4) (set 2)", - "m4wcnov", "World Cup (Nova) (MPU4)", - "m4wife", "Money Or Yer Wife (Gemini) (MPU4)", - "m4wildms", "Wild Mystery (Barcrest) (Dutch) (MPU4)", - "m4wildtm", "Wild Timer (Barcrest) (Dutch) (MPU4) (DWT 1.3)", - "m4wnud", "unknown MPU4 'W Nudge' (MPU4?)", - "m4wta", "Winner Takes All (Barcrest) (MPU4) (set 1)", - "m4wta__0", "Winner Takes All (Barcrest) (MPU4) (set 28)", - "m4wta__1", "Winner Takes All (Barcrest) (MPU4) (set 29)", - "m4wta__2", "Winner Takes All (Barcrest) (MPU4) (set 30)", - "m4wta__3", "Winner Takes All (Barcrest) (MPU4) (set 31)", - "m4wta__4", "Winner Takes All (Barcrest) (MPU4) (set 32)", - "m4wta__5", "Winner Takes All (Barcrest) (MPU4) (set 33)", - "m4wta__6", "Winner Takes All (Barcrest) (MPU4) (set 34)", - "m4wta__7", "Winner Takes All (Barcrest) (MPU4) (set 35)", - "m4wta__8", "Winner Takes All (Barcrest) (MPU4) (set 36)", - "m4wta__9", "Winner Takes All (Barcrest) (MPU4) (set 37)", - "m4wta__aa", "Winner Takes All (Barcrest) (MPU4) (set 38)", - "m4wta__ab", "Winner Takes All (Barcrest) (MPU4) (set 39)", - "m4wta__ac", "Winner Takes All (Barcrest) (MPU4) (set 40)", - "m4wta__ad", "Winner Takes All (Barcrest) (MPU4) (set 41)", - "m4wta__ae", "Winner Takes All (Barcrest) (MPU4) (set 42)", - "m4wta__af", "Winner Takes All (Barcrest) (MPU4) (set 43)", - "m4wta__ag", "Winner Takes All (Barcrest) (MPU4) (set 44)", - "m4wta__b", "Winner Takes All (Barcrest) (MPU4) (set 3)", - "m4wta__d", "Winner Takes All (Barcrest) (MPU4) (set 5)", - "m4wta__e", "Winner Takes All (Barcrest) (MPU4) (set 6)", - "m4wta__f", "Winner Takes All (Barcrest) (MPU4) (set 7)", - "m4wta__g", "Winner Takes All (Barcrest) (MPU4) (set 8)", - "m4wta__h", "Winner Takes All (Barcrest) (MPU4) (set 9)", - "m4wta__i", "Winner Takes All (Barcrest) (MPU4) (set 10)", - "m4wta__j", "Winner Takes All (Barcrest) (MPU4) (set 11)", - "m4wta__k", "Winner Takes All (Barcrest) (MPU4) (set 12)", - "m4wta__l", "Winner Takes All (Barcrest) (MPU4) (set 13)", - "m4wta__m", "Winner Takes All (Barcrest) (MPU4) (set 14)", - "m4wta__n", "Winner Takes All (Barcrest) (MPU4) (set 15)", - "m4wta__o", "Winner Takes All (Barcrest) (MPU4) (set 16)", - "m4wta__p", "Winner Takes All (Barcrest) (MPU4) (set 17)", - "m4wta__q", "Winner Takes All (Barcrest) (MPU4) (set 18)", - "m4wta__r", "Winner Takes All (Barcrest) (MPU4) (set 19)", - "m4wta__s", "Winner Takes All (Barcrest) (MPU4) (set 20)", - "m4wta__t", "Winner Takes All (Barcrest) (MPU4) (set 21)", - "m4wta__u", "Winner Takes All (Barcrest) (MPU4) (set 22)", - "m4wta__v", "Winner Takes All (Barcrest) (MPU4) (set 23)", - "m4wta__w", "Winner Takes All (Barcrest) (MPU4) (set 24)", - "m4wta__x", "Winner Takes All (Barcrest) (MPU4) (set 25)", - "m4wta__y", "Winner Takes All (Barcrest) (MPU4) (set 26)", - "m4wta__z", "Winner Takes All (Barcrest) (MPU4) (set 27)", - "m4wwc", "Wacky Weekend Club (Global) (MPU4) (set 1)", - "m4wwca", "Wacky Weekend Club (Global) (MPU4) (set 2)", - "m4wwcb", "Wacky Weekend Club (Global) (MPU4) (set 3)", - "m4xch", "X-change (Bwb) (MPU4) (set 1)", - "m4xch__a", "X-change (Bwb) (MPU4) (set 2)", - "m4xch__b", "X-change (Bwb) (MPU4) (set 3)", - "m4xch__c", "X-change (Bwb) (MPU4) (set 4)", - "m4xch__d", "X-change (Bwb) (MPU4) (set 5)", - "m4xch__e", "X-change (Bwb) (MPU4) (set 6)", - "m4xch__f", "X-change (Bwb) (MPU4) (set 7)", - "m4xch__g", "X-change (Bwb) (MPU4) (set 8)", - "m4xch__h", "X-change (Bwb) (MPU4) (set 9)", - "m4xch__i", "X-change (Bwb) (MPU4) (set 10)", - "m4xch__j", "X-change (Bwb) (MPU4) (set 11)", - "m4xch__k", "X-change (Bwb) (MPU4) (set 12)", - "m4xs", "X-s (Bwb) (MPU4) (set 1)", - "m4xs__a", "X-s (Bwb) (MPU4) (set 2)", - "m4xs__b", "X-s (Bwb) (MPU4) (set 3)", - "m4xs__c", "X-s (Bwb) (MPU4) (set 4)", - "m4xs__d", "X-s (Bwb) (MPU4) (set 5)", - "m4xs__e", "X-s (Bwb) (MPU4) (set 6)", - "m4xs__f", "X-s (Bwb) (MPU4) (set 7)", - "m4xtrm", "X-treme (Bwb) (MPU4) (set 1)", - "m4xtrm__a", "X-treme (Bwb) (MPU4) (set 2)", - "m4xtrm__b", "X-treme (Bwb) (MPU4) (set 3)", - "m4zill", "Zillionare's Challenge (Pure Leisure) (MPU4) (set 1)", - "m4zilla", "Zillionare's Challenge (Pure Leisure) (MPU4) (set 2)", - "m55050", "Fifty Fifty (Bwb) (MPU5)", - "m5aceclb", "Ace Of Clubs (Empire) (MPU5, set 1)", - "m5aceclba", "Ace Of Clubs (Empire) (MPU5, set 2)", - "m5aceclbb", "Ace Of Clubs (Empire) (MPU5, set 3)", - "m5addams", "Addams Family (Barcrest) (MPU5) (v0.5, set 1)", - "m5addamsa", "Addams Family (Barcrest) (MPU5) (v0.5, set 2)", - "m5addamsb", "Addams Family (Barcrest) (MPU5) (v0.5, set 3)", - "m5addamsc", "Addams Family (Barcrest) (MPU5) (v0.5, set 4)", - "m5addamsd", "Addams Family (Barcrest) (MPU5) (v0.5, set 5)", - "m5addamse", "Addams Family (Barcrest) (MPU5) (v0.5, set 6)", - "m5addamsf", "Addams Family (Barcrest) (MPU5) (v0.5, set 7)", - "m5addamsg", "Addams Family (Barcrest) (MPU5) (v0.5, set 8)", - "m5addamsh", "Addams Family (Barcrest) (MPU5) (v0.2, set 1)", - "m5addamsi", "Addams Family (Barcrest) (MPU5) (v0.2, set 2)", - "m5addamsj", "Addams Family (Barcrest) (MPU5) (v0.2, set 3)", - "m5addamsk", "Addams Family (Barcrest) (MPU5) (v0.3, set 1)", - "m5addamsl", "Addams Family (Barcrest) (MPU5) (v0.3, set 2)", - "m5addamsm", "Addams Family (Barcrest) (MPU5) (v0.3, set 3)", - "m5addamsn", "Addams Family (Barcrest) (MPU5) (v0.3, set 4)", - "m5addamso", "Addams Family (Barcrest) (MPU5) (v0.3, set 5)", - "m5addamsp", "Addams Family (Barcrest) (MPU5) (v0.3, set 6)", - "m5addamsq", "Addams Family (Barcrest) (MPU5) (v0.3, set 7)", - "m5addamsr", "Addams Family (Barcrest) (MPU5) (v0.3, set 8)", - "m5addamss", "Addams Family (Barcrest) (MPU5) (v0.3, set 9)", - "m5addlad", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 1)", - "m5addlada", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 2)", - "m5addladb", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 3)", - "m5addladc", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 4)", - "m5addladd", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 5)", - "m5addlade", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 6)", - "m5addladf", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 7)", - "m5addladg", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 8)", - "m5addladh", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 9)", - "m5addladi", "Adders & Ladders (Barcrest) (MPU5, v0.6, set 10)", - "m5addladj", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 1)", - "m5addladk", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 2)", - "m5addladl", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 3)", - "m5addladm", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 4)", - "m5addladn", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 5)", - "m5addlado", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 6)", - "m5addladp", "Adders & Ladders (Barcrest) (MPU5, v0.1, set 7)", - "m5addladq", "Adders & Ladders (Barcrest) (MPU5, v0.4, set 1)", - "m5addladr", "Adders & Ladders (Barcrest) (MPU5, v0.4, set 2)", - "m5addlads", "Adders & Ladders (Barcrest) (MPU5, v?.?)", - "m5all41", "All 4 One (Vivid) (MPU5, set 1)", - "m5all41a", "All 4 One (Vivid) (MPU5, set 2)", - "m5all41b", "All 4 One (Vivid) (MPU5, set 3)", - "m5all41c", "All 4 One (Vivid) (MPU5, set 4)", - "m5all41d", "All 4 One (Vivid) (MPU5, set 5)", - "m5all41e", "All 4 One (Vivid) (MPU5, set 6)", - "m5all41f", "All 4 One (Vivid) (MPU5, set 7)", - "m5all41g", "All 4 One (Vivid) (MPU5, set 8)", - "m5all41h", "All 4 One (Vivid) (MPU5, set 9)", - "m5all41i", "All 4 One (Vivid) (MPU5, set 10)", - "m5all41j", "All 4 One (Vivid) (MPU5, set 11)", - "m5all41k", "All 4 One (Vivid) (MPU5, set 12)", - "m5all41l", "All 4 One (Vivid) (MPU5, set 13)", - "m5all41low", "All 4 One (Lowen) (MPU5)", - "m5all41m", "All 4 One (Vivid) (MPU5, set 14)", - "m5arab", "Arabian Nights (Barcrest) (MPU5) (set 1)", - "m5arab03", "Arabian Nights (Barcrest) (MPU5) (set 2)", - "m5ashock", "Aftershock (Barcrest - Red Gaming) (MPU5, v1.2)", - "m5ashocka", "Aftershock (Barcrest - Red Gaming) (MPU5, v1.3)", - "m5atlan", "Atlantic (Vivid) (MPU5, v1.4)", - "m5atlana", "Atlantic (Vivid) (MPU5, v1.2)", - "m5austin", "Austin Powers (Barcrest) (MPU5) (set 1)", - "m5austin10", "Austin Powers (Barcrest) (MPU5) (set 2)", - "m5austin11", "Austin Powers (Barcrest) (MPU5) (set 3)", - "m5bankrl", "The Bank Roll (Barcrest) (MPU5)", - "m5barkng", "Barking Mad (Barcrest) (MPU5)", - "m5barmy", "Barmy Army (Barcrest) (MPU5)", - "m5barxdx", "Bar X Deluxe (Empire) (MPU5)", - "m5baxe", "Battle Axe (Barcrest) (MPU5) (set 1)", - "m5baxe04", "Battle Axe (Barcrest) (MPU5) (set 2)", - "m5bbank", "Break The Bank (Barcrest - Red Gaming) (MPU5) (set 1)", - "m5bbank13", "Break The Bank (Barcrest - Red Gaming) (MPU5) (set 2)", - "m5bbro", "Big Brother (Barcrest) (MPU5) (set 1)", - "m5bbro02", "Big Brother (Barcrest) (MPU5) (set 2)", - "m5bbrocl", "Big Brother Club (Barcrest) (MPU5)", - "m5beans", "Full Of Beans (Barcrest) (MPU5) (set 1)", - "m5beansa", "Full Of Beans (Barcrest) (MPU5) (set 2)", - "m5bigchs", "The Big Cheese (Barcrest) (MPU5) (set 1)", - "m5bigchs05", "The Big Cheese (Barcrest) (MPU5) (set 2)", - "m5biggam", "The Big Game (Barcrest) (MPU5) (set 1)", - "m5biggam11", "The Big Game (Barcrest) (MPU5) (set 2)", - "m5bigsht", "Big Shot (Barcrest - Red Gaming) (MPU5) (set 1)", - "m5bigsht04", "Big Shot (Barcrest - Red Gaming) (MPU5) (set 2)", - "m5bigsht11", "Big Shot (Barcrest - Red Gaming) (MPU5) (set 3)", - "m5bigsht13", "Big Shot (Barcrest - Red Gaming) (MPU5) (set 4)", - "m5bigshta", "Big Shot (Barcrest - Red Gaming) (MPU5) (set 5)", - "m5bling", "Bling King Crazy (Barcrest) (MPU5)", - "m5blkwht", "Black & White (Barcrest) (MPU5) (set 1)", - "m5blkwht01", "Black & White (Barcrest) (MPU5) (set 3)", - "m5blkwht11", "Black & White (Barcrest) (MPU5) (set 2)", - "m5bnkrs", "Bonkers (Barcrest - Red Gaming) (MPU5)", - "m5bnzclb", "Bonanza Club (Empire) (MPU5) (set 1)", - "m5bnzclb11", "Bonanza Club (Empire) (MPU5) (set 2)", - "m5btlbnk", "Bottle Bank (Vivid) (MPU5)", - "m5bttf", "Back To The Features (Vivid) (MPU5) (set 1)", - "m5bttfa", "Back To The Features (Vivid) (MPU5) (set 2)", - "m5bukroo", "Buckaroo (Empire) (MPU5)", - "m5bwaves", "Brain Waves (Barcrest) (MPU5) (set 1)", - "m5bwaves07", "Brain Waves (Barcrest) (MPU5) (set 2)", - "m5caesc", "Caesar's Cash (Vivid) (MPU5)", - "m5carclb", "Caribbean Club (Barcrest) (MPU5)", - "m5card", "Card Shark (Vivid) (MPU5)", - "m5carou", "Carousel (Empire) (MPU5)", - "m5carpet", "Magic Carpet (Bwb) (MPU5) (set 1)", - "m5carpet12", "Magic Carpet (Bwb) (MPU5) (set 2)", - "m5carwsh", "Car Wash (Bwb) (MPU5) (set 1)", - "m5carwsh10", "Car Wash (Bwb) (MPU5) (set 2)", - "m5casfev", "Casino Fever (Red Gaming) (MPU5) (set 1)", - "m5casfev12", "Casino Fever (Red Gaming) (MPU5) (set 2)", - "m5cashar", "Cash Arena (Barcrest) (MPU5) (set 1)", - "m5cashar04", "Cash Arena (Barcrest) (MPU5) (set 2)", - "m5cashat", "Cash Attack (Barcrest) (MPU5)", - "m5cashln", "Cash Lines (Barcrest) (MPU5)", - "m5cashrn", "Cash Run (Barcrest) (MPU5) (set 1)", - "m5cashrn01", "Cash Run (Barcrest) (MPU5) (set 2)", - "m5cashrn02", "Cash Run (Barcrest) (MPU5) (set 3)", - "m5cashrn04", "Cash Run (Barcrest) (MPU5) (set 4)", - "m5casroc", "Casino Royale Club (Empire) (MPU5)", - "m5cbrun", "Cannonball Run (Empire) (MPU5)", - "m5cbw", "Ca$h Bang Wallop (Barcrest) (MPU5) (set 1)", - "m5cbwa", "Ca$h Bang Wallop (Barcrest) (MPU5) (set 2)", - "m5centcl", "Centurion Club (Empire) (MPU5) (set 1)", - "m5centcl20", "Centurion Club (Empire) (MPU5) (set 2)", - "m5centcl21", "Centurion Club (Empire) (MPU5) (set 3)", - "m5centcl21a", "Centurion Club (Empire) (MPU5) (set 4)", - "m5centcla", "Centurion Club (Empire) (MPU5) (set 5)", - "m5circlb", "Circus Club (Bwb) (MPU5) (set 1)", - "m5circlb00", "Circus Club (Bwb) (MPU5) (set 2)", - "m5circlb15", "Circus Club (Bwb) (MPU5) (set 3)", - "m5circlb33", "Circus Club (Bwb) (MPU5) (set 4)", - "m5circus", "Circus (Bwb) (MPU5) (set 1)", - "m5circus0a", "Circus (Bwb) (MPU5) (set 2)", - "m5circus0b", "Circus (Bwb) (MPU5) (set 3)", - "m5circus11", "Circus (Bwb) (MPU5) (set 6)", - "m5circus20", "Circus (Bwb) (MPU5) (set 4)", - "m5circus21", "Circus (Bwb) (MPU5) (set 5)", - "m5clbtro", "Club Tropicana (Empire) (MPU5) (set 1)", - "m5clbtro24", "Club Tropicana (Empire) (MPU5) (set 2)", - "m5clbtro25", "Club Tropicana (Empire) (MPU5) (set 3)", - "m5clifhn", "Cliffhanger (Vivid) (MPU5)", - "m5clown", "Clown In Around (Bwb) (MPU5) (set 1)", - "m5clown11", "Clown In Around (Bwb) (MPU5) (set 2)", - "m5clown13", "Clown In Around (Bwb) (MPU5) (set 3)", - "m5clr", "MPU 5 Ram & Meter Clear (Barcrest) (MPU5)", - "m5clubsn", "Club Sandwich (Bwb) (MPU5) (set 1)", - "m5clubsn11", "Club Sandwich (Bwb) (MPU5) (set 2)", - "m5clubsn14", "Club Sandwich (Bwb) (MPU5) (set 3)", - "m5clubsn16", "Club Sandwich (Bwb) (MPU5) (set 4)", - "m5cmass", "Critical Mass (Barcrest - Red Gaming) (MPU5)", - "m5cnct4", "Connect 4 (Vivid) (MPU5) (set 1)", - "m5cnct415", "Connect 4 (Vivid) (MPU5) (set 2)", - "m5cnct420", "Connect 4 (Vivid) (MPU5) (set 3)", - "m5cockdd", "Cock A Doodle Dough! (Empire) (MPU5) (set 1)", - "m5cockdd05", "Cock A Doodle Dough! (Empire) (MPU5) (set 2)", - "m5codft", "The Codfather (Barcrest) (MPU5) (set 1)", - "m5codft02", "The Codfather (Barcrest) (MPU5) (set 2)", - "m5coloss", "Colossus Club (Empire) (MPU5)", - "m5cos", "Costa Del Cash Casino (Barcrest) (MPU5)", - "m5cosclb", "Costa Del Cash Club (Barcrest) (MPU5)", - "m5costa", "Costa Del Cash (Barcrest) (MPU5)", - "m5cpcash", "Captain Cash (Barcrest) (MPU5)", - "m5croclb", "Crocodile Rock Club (Empire) (MPU5)", - "m5crocrk", "Crocodile Rock (Empire) (MPU5) (set 1)", - "m5crocrk10", "Crocodile Rock (Empire) (MPU5) (set 2)", - "m5crsfir", "Crossfire (Empire) (MPU5)", - "m5crzkni", "Crazy Crazy Knights (Barcrest) (MPU5) (set 1)", - "m5crzkni03", "Crazy Crazy Knights (Barcrest) (MPU5) (set 2)", - "m5cshkcb", "Card Shark Club (Vivid) (MPU5) (set 1)", - "m5cshkcb12", "Card Shark Club (Vivid) (MPU5) (set 2)", - "m5cshkcb13", "Card Shark Club (Vivid) (MPU5) (set 3)", - "m5cshstx", "Cash Stax (Bwb) (MPU5)", - "m5cworan", "Clockwork Oranges (Empire) (MPU5) (set 1)", - "m5cworan12", "Clockwork Oranges (Empire) (MPU5) (set 2)", - "m5dblfun", "Double Fun (Lowen) (MPU5)", - "m5dblqts", "Double Or Quits (Bwb) (MPU5) (set 1)", - "m5dblqts1b", "Double Or Quits (Bwb) (MPU5) (set 4)", - "m5dblqtsa", "Double Or Quits (Bwb) (MPU5) (set 2)", - "m5dblqtsb", "Double Or Quits (Bwb) (MPU5) (set 3)", - "m5dbubl", "Double Bubble (Barcrest - Red Gaming) (MPU5)", - "m5devil", "Devil Of A Deal (Vivid) (MPU5)", - "m5dick", "Dick Turnip (Bwb) (MPU5) (set 1)", - "m5dick10", "Dick Turnip (Bwb) (MPU5) (set 2)", - "m5dmnf", "Diamonds Are Forever (Empire) (MPU5) (set 1)", - "m5dmnf10", "Diamonds Are Forever (Empire) (MPU5) (set 2)", - "m5dmnfcl", "Diamonds Are Forever Club (Empire) (MPU5) (set 1)", - "m5dmnfcl04", "Diamonds Are Forever Club (Empire) (MPU5) (set 2)", - "m5dmnstr", "Demon Streak (Barcrest - Red Gaming) (MPU5, set 1)", - "m5dmnstra", "Demon Streak (Barcrest - Red Gaming) (MPU5, set 2)", - "m5donna", "Donna Kebab (Bwb) (MPU5, set 1)", - "m5donnaa", "Donna Kebab (Bwb) (MPU5, set 3)", - "m5donnad", "Donna Kebab (Bwb) (MPU5, set 1, Datapak)", - "m5doshpk", "Do$h 'n' Pecks (Barcrest) (MPU5) (set 1)", - "m5doshpk05", "Do$h 'n' Pecks (Barcrest) (MPU5) (set 2)", - "m5draclb", "Ooh Aah Dracula Club (Barcrest) (MPU5) (set 1)", - "m5draclb01", "Ooh Aah Dracula Club (Barcrest) (MPU5) (set 3)", - "m5draclb07", "Ooh Aah Dracula Club (Barcrest) (MPU5) (set 2)", - "m5dragnd", "Dragon Drop (Barcrest - Red Gaming) (MPU5, set 1)", - "m5dragnda", "Dragon Drop (Barcrest - Red Gaming) (MPU5, set 2)", - "m5eggold", "Egyptian Gold (Bwb) (MPU5)", - "m5egr", "Elvis Gold Rush (Barcrest) (MPU5, set 1)", - "m5egra", "Elvis Gold Rush (Barcrest) (MPU5, set 2)", - "m5egss", "Elvis Gold Super Streak (Barcrest) (MPU5, set 1)", - "m5egssa", "Elvis Gold Super Streak (Barcrest) (MPU5, set 2)", - "m5elband", "El Bandido Club (Vivid) (MPU5)", - "m5elim", "Eliminator (Barcrest) (MPU5) (set 1)", - "m5elim03", "Eliminator (Barcrest) (MPU5) (set 2)", - "m5elim04", "Eliminator (Barcrest) (MPU5) (set 3)", - "m5evgrhr", "Elvis Gold Red Hot Roll (Barcrest) (MPU5, set 1)", - "m5evgrhra", "Elvis Gold Red Hot Roll (Barcrest) (MPU5, set 2)", - "m5ewn", "Each Way Nudge (Barcrest) (MPU5) (set 1)", - "m5ewn08", "Each Way Nudge (Barcrest) (MPU5) (set 2)", - "m5extrm", "Extreme (Empire) (MPU5)", - "m5extrmm", "Extreme Madness (Empire) (MPU5) (set 1)", - "m5extrmm04a", "Extreme Madness (Empire) (MPU5) (set 2)", - "m5extrmm04b", "Extreme Madness (Empire) (MPU5) (set 3)", - "m5extrmm10", "Extreme Madness (Empire) (MPU5) (set 4)", - "m5fair", "Fairground Attraction (Vivid) (MPU5)", - "m5fatcat", "Fat Cat (Empire) (MPU5)", - "m5fewmor", "A Few Dollars More (Empire) (MPU5) (v0.2, set 1)", - "m5fewmora", "A Few Dollars More (Empire) (MPU5) (v0.2, set 2)", - "m5fewmorb", "A Few Dollars More (Empire) (MPU5) (v0.3, set 1)", - "m5fewmorc", "A Few Dollars More (Empire) (MPU5) (v0.3, set 2)", - "m5fiddle", "On The Fiddle (Barcrest) (MPU5) (set 1)", - "m5fiddle03", "On The Fiddle (Barcrest) (MPU5) (set 2)", - "m5fire", "All Fired Up (Barcrest) (MPU5)", - "m5firebl", "Fireball (Barcrest) (MPU5)", - "m5fishcl", "Fish Full Of Dollars Club (Empire) (MPU5)", - "m5fishdl", "Fish Full Of Dollars (Empire) (MPU5) (set 1)", - "m5fishdl10", "Fish Full Of Dollars (Empire) (MPU5) (set 2)", - "m5flipcr", "Flippin Crazy (Barcrest) (MPU5)", - "m5fmonty", "The Full Monty (Empire) (MPU5) (set 1)", - "m5fmonty04a", "The Full Monty (Empire) (MPU5) (set 2)", - "m5fmonty04b", "The Full Monty (Empire) (MPU5) (set 3)", - "m5fmonty04c", "The Full Monty (Empire) (MPU5) (set 4)", - "m5fmount", "Full Mountie (Empire) (MPU5)", - "m5fnfair", "Funfair (Barcrest - Red Gaming) (MPU5)", - "m5fnfaird", "Funfair (Barcrest - Red Gaming) (MPU5) (Datapak)", - "m5fortby", "Fort Boyard (Barcrest) (MPU5) (set 1)", - "m5fortby01", "Fort Boyard (Barcrest) (MPU5) (set 2)", - "m5frnzy", "Frenzy (Barcrest) (MPU5) (set 1)", - "m5frnzya", "Frenzy (Barcrest) (MPU5) (set 2)", - "m5funsun", "Fun In The Sun (Barcrest) (MPU5) (set 1)", - "m5funsun03", "Fun In The Sun (Barcrest) (MPU5) (set 2)", - "m5fusir", "Fruits U Sir (Barcrest - Red Gaming) (MPU5) (set 1)", - "m5fusir11", "Fruits U Sir (Barcrest - Red Gaming) (MPU5) (set 2)", - "m5fusir12", "Fruits U Sir (Barcrest - Red Gaming) (MPU5) (set 3)", - "m5gdrag", "Golden Dragon (Barcrest) (MPU5)", - "m5gdrgcl", "Golden Dragon Club (Barcrest) (MPU5) (set 1)", - "m5gdrgcl05", "Golden Dragon Club (Barcrest) (MPU5) (set 2)", - "m5ggems", "Giant Gems (Vivid) (MPU5) (set 1)", - "m5ggems20", "Giant Gems (Vivid) (MPU5) (set 2)", - "m5gimmie", "Gimmie Gimmie Gimmie (Barcrest) (MPU5)", - "m5gkeys", "Golden Keys (Barcrest) (MPU5)", - "m5goape", "Going Ape (Bwb) (MPU5)", - "m5gophcl", "Gopher Gold Club (Empire) (MPU5)", - "m5gophr", "Gopher Gold (Empire) (MPU5)", - "m5gpclub", "Get Plastered Club (Bwb) (MPU5)", - "m5groll", "Golden Roll (Vivid) (MPU5)", - "m5grush", "Gold Rush (Barcrest) (MPU5) (set 1)", - "m5grush01", "Gold Rush (Barcrest) (MPU5) (set 6)", - "m5grush02", "Gold Rush (Barcrest) (MPU5) (set 5)", - "m5grush03", "Gold Rush (Barcrest) (MPU5) (set 4)", - "m5grush04", "Gold Rush (Barcrest) (MPU5) (set 3)", - "m5grush10", "Gold Rush (Barcrest) (MPU5) (set 2)", - "m5grush5", "Gold Rush Five Liner (Barcrest) (MPU5) (set 1)", - "m5grush504", "Gold Rush Five Liner (Barcrest) (MPU5) (set 2)", - "m5gruss", "Gold Rush Sit Down (Barcrest) (MPU5)", - "m5grusst", "Gold Rush Stampede (Barcrest) (MPU5) (set 1)", - "m5grusst03", "Gold Rush Stampede (Barcrest) (MPU5) (set 3)", - "m5grusst04", "Gold Rush Stampede (Barcrest) (MPU5) (set 2)", - "m5gsstrk", "Gold Super Streak (Barcrest) (MPU5) (set 1)", - "m5gsstrk07", "Gold Super Streak (Barcrest) (MPU5) (set 2)", - "m5gstrik", "Gold Strike (Barcrest) (MPU5) (set 1)", - "m5gstrik01", "Gold Strike (Barcrest) (MPU5) (set 4)", - "m5gstrik01a", "Gold Strike (Barcrest) (MPU5) (set 5)", - "m5gstrik02", "Gold Strike (Barcrest) (MPU5) (set 3)", - "m5gstrik11", "Gold Strike (Barcrest) (MPU5) (set 2)", - "m5gstrika", "Gold Strike (Barcrest) (MPU5) (set 6)", - "m5hellrz", "Hellraiser (Barcrest) (MPU5)", - "m5hgl", "Happy Go Lucky (Bwb) (MPU5) (set 1)", - "m5hgl14", "Happy Go Lucky (Bwb) (MPU5) (set 3)", - "m5hgl16", "Happy Go Lucky (Bwb) (MPU5) (set 2)", - "m5hiclau", "High Claudius (Vivid) (MPU5)", - "m5hifly", "High Flyer (Barcrest) (MPU5) (set 1)", - "m5hifly03", "High Flyer (Barcrest) (MPU5) (set 2)", - "m5hifly04", "High Flyer (Barcrest) (MPU5) (set 3)", - "m5hilok", "Hi Lo Karate (Vivid) (MPU5)", - "m5hisprt", "High Spirits (Empire) (MPU5)", - "m5hlsumo", "Hi Lo Sumo (Barcrest) (MPU5)", - "m5hocscl", "Hocus Pocus Club (Empire) (MPU5)", - "m5hocus", "Hocus Pocus (Empire) (MPU5) (set 1)", - "m5hocus10", "Hocus Pocus (Empire) (MPU5) (set 2)", - "m5holy", "The Holy Grail (Barcrest) (MPU5) (set 1)", - "m5holy10", "The Holy Grail (Barcrest) (MPU5) (set 2)", - "m5honmon", "Honey Money (Vivid) (MPU5) (set 1)", - "m5honmona", "Honey Money (Vivid) (MPU5) (set 2)", - "m5hopidl", "Hop Idol (Vivid) (MPU5)", - "m5horn", "Horn Of Plenty (Barcrest / Whitbread) (MPU5)", - "m5hotrk", "Hot Rocks (Barcrest) (MPU5)", - "m5hotsht", "Hot Shots (Empire) (MPU5) (set 1)", - "m5hotsht07a", "Hot Shots (Empire) (MPU5) (set 2)", - "m5hotsht08", "Hot Shots (Empire) (MPU5) (set 3)", - "m5hotsht08a", "Hot Shots (Empire) (MPU5) (set 4)", - "m5hotsht10", "Hot Shots (Empire) (MPU5) (set 5)", - "m5hotsht10a", "Hot Shots (Empire) (MPU5) (set 6)", - "m5hotslt", "Hot Slot (Barcrest) (MPU5)", - "m5hotstf", "Hot Stuff (Barcrest) (MPU5)", - "m5hula", "Hula Moolah (Empire) (MPU5) (set 1)", - "m5hula10", "Hula Moolah (Empire) (MPU5) (set 2)", - "m5hulacl", "Hula Moolah Club (Empire) (MPU5)", - "m5hypalx", "Hypalinx (Barcrest - Red Gaming) (MPU5)", - "m5hypno", "Hypnotic (Vivid) (MPU5)", - "m5hypvip", "Hyper Viper (Barcrest) (MPU5)", - "m5invad", "Invaders (Barcrest - Red Gaming) (MPU5)", - "m5jackbx", "Jack In The Box (Empire) (MPU5) (set 1)", - "m5jackbx03", "Jack In The Box (Empire) (MPU5) (set 2)", - "m5jackp2", "Jackpoteers 2 (Barcrest) (MPU5) (set 1)", - "m5jackp2a", "Jackpoteers 2 (Barcrest) (MPU5) (set 2)", - "m5jackpt", "Jackpoteers (Barcrest) (MPU5) (set 1)", - "m5jackpt07", "Jackpoteers (Barcrest) (MPU5) (set 2)", - "m5jakjok", "Jackpot Jokers (Lowen) (MPU5)", - "m5jcptgn", "Jackpot Genie (Barcrest - Red Gaming) (MPU5)", - "m5jcy", "Juicy Fruits (Empire) (MPU5)", - "m5jlstrk", "Jewel Strike (Barcrest - Red Gaming) (MPU5)", - "m5jlyjwl", "Jolly Jewels (Barcrest) (MPU5) (set 1)", - "m5jlyjwl01", "Jolly Jewels (Barcrest) (MPU5) (set 2)", - "m5jlyjwl02", "Jolly Jewels (Barcrest) (MPU5) (set 3)", - "m5jlyrog", "Jolly Roger (Barcrest) (MPU5) (set 1)", - "m5jlyroga", "Jolly Roger (Barcrest) (MPU5) (set 2)", - "m5jmpgem", "Jumping Gems (Empire) (MPU5) (set 1)", - "m5jmpgem01", "Jumping Gems (Empire) (MPU5) (set 2)", - "m5jmpgem03", "Jumping Gems (Empire) (MPU5) (set 3)", - "m5jmpgmc", "Jumping Gems Club (Empire) (MPU5)", - "m5jmpjok", "Jumpin Jokers (Vivid) (MPU5) (set 1)", - "m5jmpjok11", "Jumpin Jokers (Vivid) (MPU5) (set 2)", - "m5jmpjoka", "Jumpin Jokers (Vivid) (MPU5) (set 3)", - "m5jmpjokb", "Jumpin Jokers (Vivid) (MPU5) (set 4)", - "m5jokpak", "Joker In The Pack (Bwb) (MPU5)", - "m5kaleid", "Kaleidoscope Club (Empire) (MPU5)", - "m5kcclb", "King Cobra Club (Empire) (MPU5) (set 1)", - "m5kcclb24", "King Cobra Club (Empire) (MPU5) (set 2)", - "m5kingko", "King KO (Barcrest) (MPU5) (set 1)", - "m5kingko04", "King KO (Barcrest) (MPU5) (set 2)", - "m5kingko05", "King KO (Barcrest) (MPU5) (set 3)", - "m5kingqc", "Kings & Queens Club (Empire) (MPU5) (set 1)", - "m5kingqc06", "Kings & Queens Club (Empire) (MPU5) (set 2)", - "m5kingqc07", "Kings & Queens Club (Empire) (MPU5) (set 3)", - "m5kingqc08", "Kings & Queens Club (Empire) (MPU5) (set 4)", - "m5kkebab", "King Kebab (Barcrest) (MPU5) (set 1)", - "m5kkebab10", "King Kebab (Barcrest) (MPU5) (set 2)", - "m5kkebaba", "King Kebab (Barcrest) (MPU5) (set 3)", - "m5korma", "Korma Chameleon (Empire) (MPU5) (set 1)", - "m5korma12", "Korma Chameleon (Empire) (MPU5) (set 2)", - "m5kormcl", "Korma Chameleon Club (Empire) (MPU5)", - "m5lock", "Lock 'n' Load (Barcrest - Red Gaming) (MPU5) (set 1)", - "m5lock12", "Lock 'n' Load (Barcrest - Red Gaming) (MPU5) (set 3)", - "m5lock13", "Lock 'n' Load (Barcrest - Red Gaming) (MPU5) (set 2)", - "m5lockcl", "Lock 'n' Load Club (Barcrest - Red Gaming) (MPU5) (set 1)", - "m5lockcl14", "Lock 'n' Load Club (Barcrest - Red Gaming) (MPU5) (set 3)", - "m5lockcl15", "Lock 'n' Load Club (Barcrest - Red Gaming) (MPU5) (set 2)", - "m5loony", "Loony Juice (Vivid) (MPU5)", - "m5loot", "Loot 'n' Khamun (Vivid) (MPU5, set 1)", - "m5loota", "Loot 'n' Khamun (Vivid) (MPU5, set 2)", - "m5lotta", "Lotta Luck (Barcrest) (MPU5)", - "m5lvwire", "Live Wire (Bwb) (MPU5) (set 1)", - "m5lvwirea", "Live Wire (Bwb) (MPU5) (set 2)", - "m5mag7s", "Magnificent 7s (Vivid) (MPU5, set 1)", - "m5mag7sa", "Magnificent 7s (Vivid) (MPU5, set 2)", - "m5mag7sb", "Magnificent 7s (Vivid) (MPU5, set 3)", - "m5mag7sc", "Magnificent 7s (Vivid) (MPU5, set 4)", - "m5mag7sd", "Magnificent 7s (Vivid) (MPU5, set 5)", - "m5mag7se", "Magnificent 7s (Vivid) (MPU5, set 6)", - "m5martns", "Money Mad Martians (Barcrest) (MPU5) (set 1)", - "m5martns07", "Money Mad Martians (Barcrest) (MPU5) (set 2)", - "m5mega", "Mega Zone (Barcrest) (MPU5)", - "m5minesw", "Minesweeper (Bwb) (MPU5)", - "m5mmak", "Money Maker (Barcrest) (MPU5) (set 1)", - "m5mmak06", "Money Maker (Barcrest) (MPU5) (set 2)", - "m5monjok", "Monedin Joker (Spanish) (Barcrest) (MPU5) (set 1)", - "m5monjoka", "Monedin Joker (Spanish) (Barcrest) (MPU5) (set 2)", - "m5monmst", "Money Monster (Empire) (MPU5) (set 1)", - "m5monmsta", "Money Monster (Empire) (MPU5) (set 2)", - "m5monty", "Monty Python (Barcrest) (MPU5)", - "m5mpfc", "Monty Python's Flying Circus (Barcrest) (MPU5)", - "m5mpfccl", "Monty Python's Flying Circus Club (Barcrest) (MPU5)", - "m5mprio", "Monty Python Rio (Barcrest) (MPU5)", - "m5msf", "Manic Streak Features (Vivid) (MPU5, set 1)", - "m5msfa", "Manic Streak Features (Vivid) (MPU5, set 2)", - "m5neptun", "Neptunes Treasure (Barcrest) (MPU5)", - "m5nitro", "Nitro (Barcrest - Red Gaming) (MPU5)", - "m5nnww", "Nudge Nudge Wink Wink (Barcrest) (MPU5)", - "m5nnwwgl", "Nudge Nudge Wink Wink Gold (Barcrest) (MPU5)", - "m5oohaah", "Ooh Aah Dracula (Barcrest) (MPU5) (set 1)", - "m5oohaah01", "Ooh Aah Dracula (Barcrest) (MPU5) (set 2)", - "m5oohrio", "Ooh Ahh Dracula Rio (Barcrest) (MPU5)", - "m5openbx", "Open The Box (Barcrest) (MPU5) (set 1)", - "m5openbx01", "Open The Box (Barcrest) (MPU5) (set 4)", - "m5openbx05", "Open The Box (Barcrest) (MPU5) (set 3)", - "m5openbx06", "Open The Box (Barcrest) (MPU5) (set 2)", - "m5overld", "Overload (Barcrest) (MPU5) (set 1)", - "m5overld02", "Overload (Barcrest) (MPU5) (set 2)", - "m5overld10", "Overload (Barcrest) (MPU5) (set 3)", - "m5overld11", "Overload (Barcrest) (MPU5) (set 4)", - "m5paint", "Paint The Town Red (Barcrest - Red Gaming) (MPU5)", - "m5peepsh", "Peep Show (Barcrest) (MPU5)", - "m5piefac", "Pie Factory (Vivid) (MPU5) (set 1)", - "m5piefac12", "Pie Factory (Vivid) (MPU5) (set 3)", - "m5piefac23", "Pie Factory (Vivid) (MPU5) (set 2)", - "m5piefaca", "Pie Factory (Vivid) (MPU5) (set 4)", - "m5piefc2", "Pie Factory 2 (Vivid) (MPU5) (set 1)", - "m5piefc2a", "Pie Factory 2 (Vivid) (MPU5) (set 2)", - "m5piefc2b", "Pie Factory 2 (Vivid) (MPU5) (set 3)", - "m5piefcr", "Pie Factory Rio (Vivid) (MPU5)", - "m5ppussy", "Pink Pussy (Mdm) (MPU5)", - "m5psy2", "Psycho Cash Beast 2 (Barcrest) (MPU5)", - "m5psyccl", "Psycho Cash Beast Club (Barcrest) (MPU5) (set 1)", - "m5psyccl01", "Psycho Cash Beast Club (Barcrest) (MPU5) (set 2)", - "m5psyccla", "Psycho Cash Beast Club (Bwb) (MPU5) (set 1)", - "m5psyccla02", "Psycho Cash Beast Club (Bwb) (MPU5) (set 3)", - "m5psyccla24", "Psycho Cash Beast Club (Bwb) (MPU5) (set 2)", - "m5psycho", "Psycho Cash Beast (Barcrest) (MPU5) (set 1)", - "m5psycho06", "Psycho Cash Beast (Barcrest) (MPU5) (set 2)", - "m5psychoa", "Psycho Cash Beast (Bwb) (MPU5) (set 1)", - "m5psychoa21", "Psycho Cash Beast (Bwb) (MPU5) (set 2)", - "m5ptyani", "Party Animal (Barcrest) (MPU5) (set 1)", - "m5ptyani01", "Party Animal (Barcrest) (MPU5) (set 2)", - "m5qdraw", "Quick On The Draw (Vivid) (MPU5) (set 1)", - "m5qdraw12", "Quick On The Draw (Vivid) (MPU5) (set 2)", - "m5qdraw14", "Quick On The Draw (Vivid) (MPU5) (set 3)", - "m5qdraw15", "Quick On The Draw (Vivid) (MPU5) (set 4)", - "m5qdrawa", "Quick On The Draw (Vivid) (MPU5) (set 5)", - "m5qdrawb", "Quick On The Draw (Vivid) (MPU5) (set 6)", - "m5qshot", "Quack Shot (Barcrest) (MPU5) (set 1)", - "m5qshot04", "Quack Shot (Barcrest) (MPU5) (set 2)", - "m5quake", "Quake (Barcrest - Red Gaming) (MPU5)", - "m5rainrn", "Rainbow Runner (Barcrest - Red Gaming) (MPU5, set 1)", - "m5rainrna", "Rainbow Runner (Barcrest - Red Gaming) (MPU5, set 2)", - "m5rampg", "Rampage (Barcrest - Red Gaming) (MPU5) (set 1)", - "m5rampg11", "Rampage (Barcrest - Red Gaming) (MPU5) (set 2)", - "m5rampg12", "Rampage (Barcrest - Red Gaming) (MPU5) (set 3)", - "m5ramrcl", "Ram Raid Club (Empire) (MPU5)", - "m5ramrd", "Ram Raid (Empire) (MPU5)", - "m5ratpk", "Rat Pack (Vivid) (MPU5) (set 1)", - "m5ratpka", "Rat Pack (Vivid) (MPU5) (set 2)", - "m5rawin", "Reel A Win (Vivid / Whitbread) (MPU5)", - "m5razdz", "Razzle Dazzle Club (Barcrest) (MPU5) (set 1)", - "m5razdz10", "Razzle Dazzle Club (Barcrest) (MPU5) (set 2)", - "m5razdz11", "Razzle Dazzle Club (Barcrest) (MPU5) (set 3)", - "m5rcx", "Royal Exchange Club (Barcrest) (MPU5) (set 1)", - "m5rcxa", "Royal Exchange Club (Barcrest) (MPU5) (set 2)", - "m5rdwarf", "Red Dwarf (Barcrest - Red Gaming) (MPU5)", - "m5redbal", "Random Red Ball (Vivid) (MPU5)", - "m5redrck", "Ready To Rock (Barcrest) (MPU5) (set 1)", - "m5redrck10", "Ready To Rock (Barcrest) (MPU5) (set 2)", - "m5redrcka", "Ready To Rock (Barcrest) (MPU5) (set 3)", - "m5redx", "Red X (Barcrest - Red Gaming) (MPU5) (set 1)", - "m5redx12", "Red X (Barcrest - Red Gaming) (MPU5) (set 2)", - "m5reelth", "Reel Thunder (Bwb) (MPU5)", - "m5reelwn", "Reel A Win (Bwb) (MPU5) (set 1)", - "m5reelwn24", "Reel A Win (Bwb) (MPU5) (set 2)", - "m5resfrg", "Reservoir Frogs (Empire) (MPU5)", - "m5revo", "Revolution (Barcrest) (MPU5) (set 1)", - "m5revo13", "Revolution (Barcrest) (MPU5) (set 2)", - "m5revoa", "Revolution (Barcrest) (MPU5) (set 3)", - "m5rfymc", "Run For Your Money Club (Barcrest) (MPU5) (set 1)", - "m5rfymc06", "Run For Your Money Club (Barcrest) (MPU5) (Set 2)", - "m5rgclb", "Rio Grande Club (Barcrest) (MPU5) (set 1)", - "m5rgclb01", "Rio Grande Club (Barcrest) (MPU5) (set 7)", - "m5rgclb01a", "Rio Grande Club (Barcrest) (MPU5) (set 8)", - "m5rgclb03", "Rio Grande Club (Barcrest) (MPU5) (set 6)", - "m5rgclb11", "Rio Grande Club (Barcrest) (MPU5) (set 2)", - "m5rgclb12", "Rio Grande Club (Barcrest) (MPU5) (set 3)", - "m5rgclb20", "Rio Grande Club (Barcrest) (MPU5) (set 4)", - "m5rgclb21", "Rio Grande Club (Barcrest) (MPU5) (set 5)", - "m5rhkni", "Red Hot Knights (Barcrest) (MPU5)", - "m5rhrg", "Red Hot Roll Gold (Barcrest) (MPU5) (set 1)", - "m5rhrga", "Red Hot Roll Gold (Barcrest) (MPU5) (set 2)", - "m5rhrgt", "Red Hot Roll Triple (Barcrest) (MPU5) (set 1)", - "m5rhrgt02", "Red Hot Roll Triple (Barcrest) (MPU5) (set 3)", - "m5rhrgt12", "Red Hot Roll Triple (Barcrest) (MPU5) (set 2)", - "m5ritj", "Rumble In The Jungle (Barcrest) (MPU5)", - "m5rlup", "Roll Up (Bwb) (MPU5)", - "m5rollup", "Roll Up Roll Up (Vivid) (MPU5)", - "m5rollx", "Roll X (Empire) (MPU5) (set 1)", - "m5rollx12", "Roll X (Empire) (MPU5) (set 2)", - "m5ronr", "Reel Or No Reel (Empire) (MPU5) (set 1)", - "m5ronr05", "Reel Or No Reel (Empire) (MPU5) (set 2)", - "m5ronr07", "Reel Or No Reel (Empire) (MPU5) (set 3)", - "m5roof", "Raise The Roof (Barcrest) (MPU5) (set 1)", - "m5roofa", "Raise The Roof (Barcrest) (MPU5) (set 2)", - "m5round", "Round & Round (Bwb) (MPU5)", - "m5roundl", "Round & Round (Lowen) (MPU5)", - "m5rthh", "Return To The Haunted House (Empire) (MPU5)", - "m5rub", "Rubies & Diamonds (Barcrest) (MPU5)", - "m5rwb", "Red White & Blue (Barcrest) (MPU5)", - "m5rwbbwb", "Red White & Blue (Bwb) (MPU5) (set 1)", - "m5rwbbwb15", "Red White & Blue (Bwb) (MPU5) (set 4)", - "m5rwbbwb24", "Red White & Blue (Bwb) (MPU5) (set 2)", - "m5rwbbwb25", "Red White & Blue (Bwb) (MPU5) (set 3)", - "m5sblz", "Snail Blazer (Barcrest - Red Gaming) (MPU5)", - "m5scfinl", "Super Cup Final (Lowen) (MPU5)", - "m5scharg", "Super Charged (Barcrest) (MPU5) (set 1)", - "m5scharg05", "Super Charged (Barcrest) (MPU5) (set 2)", - "m5scharg06", "Super Charged (Barcrest) (MPU5) (set 3)", - "m5scharga", "Super Charged (Barcrest) (MPU5) (set 4)", - "m5sec7", "Secret 7s (Bwb) (MPU5) (set 1)", - "m5sec7a", "Secret 7s (Bwb) (MPU5) (set 2)", - "m5seven", "Seven Deadly Spins (Barcrest) (MPU5)", - "m5shark", "Shark Raving Mad (Vivid) (MPU5) (set 1)", - "m5sharka", "Shark Raving Mad (Vivid) (MPU5) (set 2)", - "m5sheik", "Sheik Yer Money (Barcrest) (MPU5)", - "m5showtm", "Showtime (Barcrest) (MPU5)", - "m5sil7", "Silver 7s (Bwb) (MPU5) (set 1)", - "m5sil7a", "Silver 7s (Bwb) (MPU5) (set 2)", - "m5silver", "Silver Screen (Barcrest) (MPU5) (set 1)", - "m5silver03", "Silver Screen (Barcrest) (MPU5) (set 3)", - "m5silver06", "Silver Screen (Barcrest) (MPU5) (set 2)", - "m5sixsht", "Six Shooter (Vivid) (MPU5) (v1.1, set 1)", - "m5sixshta", "Six Shooter (Vivid) (MPU5) (v1.1, set 2)", - "m5sixshtb", "Six Shooter (Vivid) (MPU5) (v2.0, set 1)", - "m5sixshtc", "Six Shooter (Vivid) (MPU5) (v2.0, set 2)", - "m5sixshtd", "Six Shooter (Vivid) (MPU5) (v2.0, set 3)", - "m5sixshte", "Six Shooter (Vivid) (MPU5) (v2.0, set 4)", - "m5sixshtf", "Six Shooter (Vivid) (MPU5) (v2.0, set 5)", - "m5sixshtg", "Six Shooter (Vivid) (MPU5) (v2.0, set 6)", - "m5sixshth", "Six Shooter (Vivid) (MPU5) (v2.0, set 7)", - "m5sixshti", "Six Shooter (Vivid) (MPU5) (v2.1, set 1)", - "m5sixshtj", "Six Shooter (Vivid) (MPU5) (v2.1, set 2)", - "m5sixshtk", "Six Shooter (Vivid) (MPU5) (v2.1, set 3)", - "m5sixshtl", "Six Shooter (Vivid) (MPU5) (v2.1, set 4)", - "m5sixshtm", "Six Shooter (Vivid) (MPU5) (v2.1, set 5)", - "m5sixshtn", "Six Shooter (Vivid) (MPU5) (v2.1, set 6)", - "m5skulcl", "Skullduggery Club (Empire) (MPU5) (set 1)", - "m5skulcl20", "Skullduggery Club (Empire) (MPU5) (set 2)", - "m5skulcl23", "Skullduggery Club (Empire) (MPU5) (set 3)", - "m5slide", "Slider (Barcrest - Red Gaming) (MPU5)", - "m5smobik", "Smokey Bikin (Bwb) (MPU5) (set 1)", - "m5smobik12", "Smokey Bikin (Bwb) (MPU5) (set 2)", - "m5sondr", "Son Of Dracula (Barcrest) (MPU5) (set 1)", - "m5sondr05", "Son Of Dracula (Barcrest) (MPU5) (set 2)", - "m5sondra", "Son Of Dracula (Barcrest) (MPU5) (15GBP Jackpot)", - "m5spddmn", "Speed Demon (Vivid) (MPU5)", - "m5speccl", "Spectrum Club (Vivid) (MPU5)", - "m5spicer", "The Spice Is Right (Barcrest) (MPU5) (set 1)", - "m5spicer06", "The Spice Is Right (Barcrest) (MPU5) (set 2)", - "m5spiker", "Spiker The Biker (Barcrest) (MPU5) (set 1)", - "m5spiker02", "Spiker The Biker (Barcrest) (MPU5) (set 2)", - "m5spikera", "Spiker The Biker (Barcrest) (MPU5) (set 3)", - "m5spins", "Spinsation (Barcrest) (MPU5)", - "m5squids", "Squids In (Barcrest) (MPU5) (set 1)", - "m5squids04a", "Squids In (Barcrest) (MPU5) (set 2)", - "m5squids05", "Squids In (Barcrest) (MPU5) (set 3)", - "m5squids06", "Squids In (Barcrest) (MPU5) (set 4)", - "m5sstrk", "Super Streak (Barcrest) (MPU5) (set 1)", - "m5sstrk02a", "Super Streak (Barcrest) (MPU5) (set 2)", - "m5starcl", "Stars & Stripes Club (Vivid) (MPU5)", - "m5stars", "Stars & Stripes (Vivid) (MPU5) (set 1)", - "m5stars10", "Stars & Stripes (Vivid) (MPU5) (set 8)", - "m5stars10a", "Stars & Stripes (Vivid) (MPU5) (set 9)", - "m5stars13a", "Stars & Stripes (Vivid) (MPU5) (set 2)", - "m5stars20", "Stars & Stripes (Vivid) (MPU5) (set 7)", - "m5stars22", "Stars & Stripes (Vivid) (MPU5) (set 6)", - "m5stars25", "Stars & Stripes (Vivid) (MPU5) (set 5)", - "m5stars25a", "Stars & Stripes (Vivid) (MPU5) (set 4)", - "m5stars26", "Stars & Stripes (Vivid) (MPU5) (set 3)", - "m5startr", "Stars & Stripes Triple (Vivid) (MPU5)", - "m5stax", "Stax Of Cash (Barcrest) (MPU5)", - "m5supnov", "Supernova (Barcrest) (MPU5) (set 1)", - "m5supnova", "Supernova (Barcrest) (MPU5) (set 2)", - "m5supro", "Super Roulette (Vivid) (MPU5) (set 1)", - "m5suproa", "Super Roulette (Vivid) (MPU5) (set 2)", - "m5supstr", "Super Star (Barcrest) (MPU5) (set 1)", - "m5supstra", "Super Star (Barcrest) (MPU5) (set 2)", - "m5tball", "Thunderball (Empire) (MPU5)", - "m5tbird", "Thunderbird (Barcrest) (MPU5)", - "m5tempcl", "Temple Of Treasure Club (Barcrest) (MPU5)", - "m5tempp", "Temple Of Pleasure (Vivid) (MPU5)", - "m5tempt", "Temple Of Treasure (Barcrest) (MPU5) (set 1)", - "m5tempt05", "Temple Of Treasure (Barcrest) (MPU5) (set 2)", - "m5tempt2", "Temple Of Treasure 2 (Barcrest) (MPU5) (set 1)", - "m5tempt203", "Temple Of Treasure 2 (Barcrest) (MPU5) (set 2)", - "m5tempt2a", "Temple Of Treasure 2 (Barcrest) (MPU5) (set 3)", - "m5tempta", "Temple Of Treasure (Barcrest) (MPU5) (set 3)", - "m5temptb", "Temple Of Treasure (Barcrest) (MPU5) (set 4)", - "m5thtsmg", "That's Magic (Barcrest - Red Gaming) (MPU5)", - "m5tictac", "Tic Tac Tut (Vivid) (MPU5)", - "m5tictacbwb", "Tic Tac Tut (Bwb) (MPU5) (set 1)", - "m5tictacbwb16", "Tic Tac Tut (Bwb) (MPU5) (set 2)", - "m5tomb", "Tomb Raiders (Empire) (MPU5)", - "m5topdog", "Top Dog (Barcrest) (MPU5) (set 1)", - "m5topdog04", "Top Dog (Barcrest) (MPU5) (set 2)", - "m5topdoga", "Top Dog (Barcrest) (MPU5) (set 3)", - "m5topdol", "Top Dollar (Barcrest - Red Gaming) (MPU5) (set 1)", - "m5topdola", "Top Dollar (Barcrest - Red Gaming) (MPU5) (set 2)", - "m5trail", "Trailblazer Club (Barcrest) (MPU5)", - "m5trclb", "Tomb Raiders Club (Empire) (MPU5)", - "m5tsar", "Tsar Wars (Empire) (MPU5)", - "m5tst", "MPU 5 Test Rom (Barcrest) (MPU5)", - "m5ttop", "Treble Top (Empire) (MPU5) (set 1)", - "m5ttop04", "Treble Top (Empire) (MPU5) (set 2)", - "m5ttop10", "Treble Top (Empire) (MPU5) (set 3)", - "m5ttopcl", "Treble Top Club (Empire) (MPU5)", - "m5ttwo", "Take Two (Barcrest) (MPU5)", - "m5ultimo", "Ultimo (Barcrest) (MPU5) (set 1)", - "m5ultimo03a", "Ultimo (Barcrest) (MPU5) (set 2)", - "m5ultimo04", "Ultimo (Barcrest) (MPU5) (set 3)", - "m5upover", "Up & Over (Barcrest) (MPU5) (set 1)", - "m5upover15", "Up & Over (Barcrest) (MPU5) (set 2)", - "m5vampup", "Vamp It Up (Barcrest) (MPU5)", - "m5vertcl", "Vertigo Club (Empire) (MPU5)", - "m5vertgo", "Vertigo (Empire) (MPU5)", - "m5whdres", "Who Dares Spins (MPU5)", - "m5winway", "Winning Ways (MPU5)", - "m5wking", "Wild King (Barcrest) (MPU5) (set 1)", - "m5wking05", "Wild King (Barcrest) (MPU5) (set 2)", - "m5wonga", "A Fish Called Wonga (Empire) (MPU5)", - "m5wthing", "Wild Thing Club (Empire) (MPU5) (set 1)", - "m5wthing11", "Wild Thing Club (Empire) (MPU5) (set 2)", - "m5wthing20", "Wild Thing Club (Empire) (MPU5) (set 3)", - "m5xchn", "Exchanges Unlimited (Barcrest) (MPU5)", - "m5xena", "Xena Warrior Princess (Bwb) (MPU5)", - "m5xfact", "X Factor (Empire) (MPU5) (set 1)", - "m5xfact02", "X Factor (Empire) (MPU5) (set 2)", - "m5xfact04", "X Factor (Empire) (MPU5) (set 3)", - "m5xfact11", "X Factor (Empire) (MPU5) (set 4)", - "m5zigzag", "Zig Zag (Barcrest - Red Gaming) (MPU5)", - "m660", "Mission 660 (US)", - "m660b", "Mission 660 (bootleg)", - "m660j", "Mission 660 (Japan)", - "m79amb", "M-79 Ambush", - "m_mpac", "Mr. and Mrs. PacMan", - "m_tppokr", "Top Poker (Dutch, Game Card 95-750-899)", - "mac2bios", "Multi Amenity Cassette System 2 BIOS", - "macattck", "Mac Attack", - "mace", "Mace: The Dark Age (boot ROM 1.0ce, HDD 1.0b)", - "macea", "Mace: The Dark Age (HDD 1.0a)", - "mach2", "Mach 2", - "mach3", "M.A.C.H. 3", - "macha", "Monoshiri Quiz Osyaberi Macha (Japan)", - "machbrkr", "Mach Breakers - Numan Athletics 2 (Japan)", - "machomou", "Macho Mouse", - "machridr", "Vs. Mach Rider (Endurance Course Version)", - "machridra", "Vs. Mach Rider (Fighting Course Version, set MR4-1 A)", - "macross", "Super Spacefortress Macross / Chou-Jikuu Yousai Macross", - "macross2", "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II", - "macrossp", "Macross Plus", - "macsbios", "Multi Amenity Cassette System BIOS", - "madalien", "Mad Alien", - "madaliena", "Mad Alien (Highway Chase)", - "madball", "Mad Ball V2.0", - "madballn", "Mad Ball V2.0 (With Nudity)", - "madcrash", "Mad Crasher", - "madcrush", "Mad Crusher (Japan)", - "maddog", "Mad Dog McCree v2.03 board rev.B", - "maddog2", "Mad Dog II: The Lost Gold v2.04", - "maddog21", "Mad Dog II: The Lost Gold v1.0", - "maddog22", "Mad Dog II: The Lost Gold v2.02", - "maddoga", "Mad Dog McCree v1C board rev.A", - "maddonna", "Mad Donna (set 1)", - "maddonnb", "Mad Donna (set 2)", - "madgear", "Mad Gear (US)", - "madgearj", "Mad Gear (Japan)", - "madmotor", "Mad Motor", - "madrace", "Mad Race", - "madshark", "Mad Shark", - "madzoo", "Mad Zoo (version U450C)", - "magdrop", "Magical Drop (Japan, Version 1.1, 1995.06.21)", - "magdrop2", "Magical Drop II", - "magdrop3", "Magical Drop III", - "magdropp", "Magical Drop Plus 1 (Japan, Version 2.1, 1995.09.12)", - "magerror", "Magical Error wo Sagase", - "magic", "Magic", - "magic10", "Magic's 10 (ver. 16.55)", - "magic102", "Magic's 10 2 (ver 1.1)", - "magic10a", "Magic's 10 (ver. 16.54)", - "magic10b", "Magic's 10 (ver. 16.45)", - "magic10c", "Magic's 10 (ver. 16.15)", - "magicard", "Magic Card (set 1)", - "magicarda", "Magic Card (set 2)", - "magicardb", "Magic Card (set 3)", - "magicarde", "Magic Card Export 94", - "magicardj", "Magic Card Jackpot (4.01)", - "magicbal", "Magicball Fighting (Korea)", - "magicbom", "Magic Bomb (Version 1)", - "magicbub", "Magic Bubble", - "magicbuba", "Magic Bubble (Adult version)", - "magicfly", "Magic Fly", - "magicle", "Magic Lotto Export (5.03)", - "magicmsk", "Magic Mask (MV4115, Export)", - "magicrd2", "Magic Card II (Bulgarian)", - "magicrd2a", "Magic Card II (Nov, Yugoslavian)", - "magicrd2b", "Magic Card II (green TAB or Impera board)", - "magicrd2c", "Magic Card II (blue TAB board, encrypted)", - "magicstk", "Magic Sticks", - "magictg", "Magic the Gathering: Armageddon (set 1)", - "magictga", "Magic the Gathering: Armageddon (set 2)", - "magix", "Magix / Rock", - "magixb", "Magix / Rock (no copyright message)", - "magjoker", "Magic Joker (v1.25.10.2000)", - "maglord", "Magician Lord (NGM-005)", - "maglordh", "Magician Lord (NGH-005)", - "magmax", "Mag Max", - "magodds", "Magical Odds (set 1)", - "magoddsa", "Magical Odds (set 2)", - "magoddsb", "Magical Odds (set 3)", - "magoddsc", "Magical Odds (set 4, custom encrypted CPU block)", - "magoddsd", "Magical Odds (set 5, custom encrypted CPU block)", - "magspeed", "Magical Speed", - "magspot", "Magical Spot", - "magspot2", "Magical Spot II", - "magtouch", "Magical Touch", - "magtruck", "Magical Truck Adventure", - "magworm", "Magic Worm (bootleg of Centipede, set 1)", - "magworma", "Magic Worm (bootleg of Centipede, set 2)", - "magzun", "Magical Zunou Power (J 961031 V1.000)", - "mahjngoh", "Mahjong Oh (V2.06J)", - "mahmajn", "Tokoro San no MahMahjan (Japan, ROM Based)", - "mahmajn2", "Tokoro San no MahMahjan 2 (Japan, ROM Based)", - "mahoudai", "Mahou Daisakusen (Japan)", - "mahretsu", "Mahjong Kyo Retsuden (NGM-004)(NGH-004)", - "maiko", "Maikobana (Japan 900802)", - "mainevt", "The Main Event (4 Players ver. Y)", - "mainevt2p", "The Main Event (2 Players ver. X)", - "mainevto", "The Main Event (4 Players ver. F)", - "mainline", "Mainline Double Joker Poker", - "mainsnk", "Main Event (1984)", - "majest12", "Majestic Twelve - The Space Invaders Part IV (Japan)", - "majorpkr", "Major Poker (v2.0)", - "majrjhdx", "Mahjong Raijinhai DX", - "majs101b", "Mahjong Studio 101 [BET] (Japan)", - "majtitl2", "Major Title 2 (World)", - "majtitl2j", "Major Title 2 (Japan)", - "majtitle", "Major Title (World)", - "majtitlej", "Major Title (Japan)", - "majuu", "Majuu no Ohkoku", - "majxtal7", "Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan)", - "makaiden", "Makai Densetsu (Japan)", - "makaijan", "Makaijan [BET] (Japan)", - "makaimur", "Makai-Mura (Japan)", - "makaimurc", "Makai-Mura (Japan Revision C)", - "makaimurg", "Makai-Mura (Japan Revision G)", - "maketrax", "Make Trax (US set 1)", - "maketrxb", "Make Trax (US set 2)", - "makyosen", "Makyou Senshi (Japan)", - "maletmad", "Mallet Madness v2.1", - "malzak", "Malzak", - "malzak2", "Malzak II", - "mamboagg", "Mambo A Go-Go (GQA40 VER. JAB)", - "mamboagga", "Mambo A Go-Go e-Amusement (GQA40 VER. JRB)", - "mamonoro", "Mamoru-kun wa Norowarete Shimatta!", - "mangchi", "Mang-Chi", - "manhatan", "Manhattan 24 Bunsyo (Japan)", - "maniach", "Mania Challenge (set 1)", - "maniach2", "Mania Challenge (set 2)", - "maniacsp", "Maniac Square (prototype)", - "maniacsq", "Maniac Square (unprotected)", - "manicpnc", "Manic Panic Ghosts!", - "manohman", "Mann, oh-Mann", - "manxtt", "Manx TT Superbike - DX (Revision D)", - "manxttc", "Manx TT Superbike - Twin (Revision C)", - "manybloc", "Many Block", - "mappy", "Mappy (US)", - "mappyj", "Mappy (Japan)", - "marble", "Marble Madness (set 1)", - "marble2", "Marble Madness (set 2)", - "marble3", "Marble Madness (set 3)", - "marble4", "Marble Madness (set 4)", - "marble5", "Marble Madness (set 5 - LSI Cartridge)", - "margmgc", "Margarita Magic (01J00101, NSW/ACT)", - "marineb", "Marine Boy", - "marinedt", "Marine Date", - "mariner", "Mariner", - "mario", "Mario Bros. (US, Revision F)", - "marioe", "Mario Bros. (US, Revision E)", - "marioj", "Mario Bros. (Japan)", - "marioo", "Mario Bros. (US, Unknown Rev)", - "markham", "Markham", - "mars", "Mars", - "marsp", "Mars - God of War", - "marstv", "Mars TV (JPN)", - "martmast", "Martial Masters (ver. 104, 102, 102US)", - "martmastc", "Martial Masters (ver. 104, 102, 101CN)", - "martmastc102", "Martial Masters (ver. 102, 101, 101CN)", - "maruchan", "Maru-Chan de Goo! (J 971216 V1.000)", - "marukin", "Super Marukin-Ban (Japan 901017)", - "marukodq", "Chibi Marukochan Deluxe Quiz", - "marvins", "Marvin's Maze", - "marvland", "Marvel Land (US)", - "marvlandj", "Marvel Land (Japan)", - "masao", "Masao", - "maski", "Maski Show (Russia) (Extrema)", - "mastboy", "Master Boy (Spanish, PCB Rev A)", - "mastboyi", "Master Boy (Italian, PCB Rev A)", - "masterw", "Master of Weapon (World)", - "masterwj", "Master of Weapon (Japan)", - "masterwu", "Master of Weapon (US)", - "mastkin", "The Masters of Kin", - "mastninj", "Master Ninja (bootleg of Shadow Warriors / Ninja Gaiden)", - "matahari", "Mata Hari", - "match98", "Match '98 (ver. 1.33)", - "matchit", "Match It", - "matchit2", "Match It II", - "matmania", "Mat Mania", - "matrim", "Matrimelee / Shin Gouketsuji Ichizoku Toukon (NGM-2660) (NGH-2660)", - "matrimbl", "Matrimelee / Shin Gouketsuji Ichizoku Toukon (bootleg)", - "mausuke", "Mausuke no Ojama the World (J 960314 V1.000)", - "mav_100", "Maverick (1.00)", - "mav_400", "Maverick (Display Rev. 4.00)", - "mav_401", "Maverick (Display Rev. 4.01)", - "mav_402", "Maverick (Display Rev. 4.02)", - "maverik", "Maverik", - "maxaflex", "Max-A-Flex", - "maxf_102", "Maximum Force v1.02", - "maxf_ng", "Maximum Force (No Gore version)", - "maxforce", "Maximum Force v1.05", - "maxidbl", "Maxi Double Poker (Ver. 1.10)", - "maxideal", "Maxi-Dealer", - "maxrpm", "Max RPM (ver 2)", - "maxspeed", "Maximum Speed", - "maya", "Maya (set 1)", - "mayaa", "Maya (set 2)", - "mayday", "Mayday (set 1)", - "maydaya", "Mayday (set 2)", - "maydayb", "Mayday (set 3)", - "mayhem", "Mayhem 2002", - "mayjin3", "Mayjinsen 3", - "mayjinsn", "Mayjinsen", - "mayjisn2", "Mayjinsen 2", - "mayumi", "Kikiippatsu Mayumi-chan (Japan)", - "mazan", "Mazan: Flash of the Blade (MAZ2 Ver. A)", - "mazana", "Mazan: Flash of the Blade (MAZ3 Ver. A)", - "maze", "Amazing Maze", - "mazeinv", "Maze Invaders (prototype)", - "mazerbla", "Mazer Blazer (set 1)", - "mazerblaa", "Mazer Blazer (set 2)", - "mazinger", "Mazinger Z (World)", - "mazingerj", "Mazinger Z (Japan)", - "mb_10", "Monster Bash (1.0)", - "mb_106", "Monster Bash (1.06)", - "mb_106b", "Monster Bash (1.06b)", - "mbaa", "Melty Blood Actress Again", - "mbaaa", "Melty Blood Actress Again (Ver. A)", - "mbomberj", "Muscle Bomber: The Body Explosion (Japan 930713)", - "mbombrd", "Muscle Bomber Duo: Ultimate Team Battle (World 931206)", - "mbombrdj", "Muscle Bomber Duo: Heat Up Warriors (Japan 931206)", - "mbossy", "Mike Bossy", - "mbrush", "Magic Brush (bootleg of Crush Roller)", - "mcastle", "Magic Castle", - "mcastlef", "Magic Castle (French speech)", - "mcastleg", "Magic Castle (German speech)", - "mcastlei", "Magic Castle (Italian speech)", - "mcatadv", "Magical Cat Adventure", - "mcatadvj", "Magical Cat Adventure (Japan)", - "mchampdx", "Multi Champ Deluxe (ver. 0106, 06/01/2000)", - "mchampdxa", "Multi Champ Deluxe (ver. 1126, 26/11/1999)", - "mchampdxb", "Multi Champ Deluxe (ver. 1114, 14/11/1999)", - "mcitylov", "City Love [BET] (Japan 860904)", - "mclass", "Magic Class (Ver 2.2)", - "mcnpshnt", "Mahjong Campus Hunting (Japan)", - "mcolors", "Magic Colors (ver. 1.7a)", - "mcombat", "Missile Combat (Videotron bootleg, set 1)", - "mcombata", "Missile Combat (Videotron bootleg, set 2)", - "mcombats", "Missile Combat (Sidam bootleg)", - "mcontest", "Miss Mahjong Contest (Japan)", - "mdhorse", "Derby Quiz My Dream Horse (Japan, MDH1/VER.A2)", - "mdntmrdr", "Midnight Marauders (Gun game)", - "mdrawpkr", "Draw Poker - Joker's Wild (Standard)", - "mdrawpkra", "Draw Poker - Joker's Wild (02-11)", - "mdrink", "Magic Drink (Ver 1.2)", - "mechatt", "Mechanized Attack (World)", - "mechattj", "Mechanized Attack (Japan)", - "mechattu", "Mechanized Attack (US)", - "mechattu1", "Mechanized Attack (US, Version 1, Single Player)", - "medlanes", "Meadows Lanes", - "medusa", "Medusa", - "megaaton", "Meg Aaton", - "megablst", "Mega Blast (World)", - "megablstj", "Mega Blast (Japan)", - "megablstu", "Mega Blast (US)", - "megadble", "Mega Double Poker (Ver. 1.63 Espagnol)", - "megadblj", "Mega Double Poker Jackpot (Ver. 1.26)", - "megadon", "Megadon", - "megadpkr", "Mega Double Poker (conversion kit, set 1)", - "megadpkrb", "Mega Double Poker (conversion kit, set 2)", - "megaforc", "Mega Force", - "megakat", "Mega Katok 2", - "megaline", "Mega Lines", - "megaman", "Mega Man: The Power Battle (CPS1, USA 951006)", - "megaman2", "Mega Man 2: The Power Fighters (USA 960708)", - "megaman2a", "Mega Man 2: The Power Fighters (Asia 960708)", - "megaman2h", "Mega Man 2: The Power Fighters (Hispanic 960712)", - "megamana", "Mega Man: The Power Battle (CPS1, Asia 951006)", - "megamn2d", "Mega Man 2: The Power Fighters (USA 960708 Phoenix Edition) (bootleg)", - "megaphx", "Mega Phoenix", - "megaplay", "Mega Play BIOS", - "megat2", "Pit Boss Megatouch II (9255-10-01 ROG, Standard version)", - "megat2a", "Pit Boss Megatouch II (9255-10-01 ROE, Standard version)", - "megat2b", "Pit Boss Megatouch II (9255-10-01 ROD, Standard version)", - "megat2ca", "Pit Boss Megatouch II (9255-10-06 ROG, California version)", - "megat2caa", "Pit Boss Megatouch II (9255-10-06 ROE, California version)", - "megat2mn", "Pit Boss Megatouch II (9255-10-02 ROG, Minnesota version)", - "megat3", "Megatouch III (9255-20-01 RON, Standard version)", - "megat3a", "Megatouch III (9255-20-01 ROK, Standard version)", - "megat3b", "Megatouch III (9255-20-01 ROF, Standard version)", - "megat3c", "Megatouch III (9255-20-01 ROB, Standard version)", - "megat3ca", "Megatouch III (9255-20-06 RON, California version)", - "megat3caa", "Megatouch III (9255-20-06 ROD, California version)", - "megat3d", "Megatouch III (9255-20-01 ROA, Standard version)", - "megat3nj", "Megatouch III (9255-20-07 ROG, New Jersey version)", - "megat3te", "Megatouch III Tournament Edition (9255-30-01 ROE, Standard version)", - "megat4", "Megatouch IV (9255-40-01 ROE, Standard version)", - "megat4a", "Megatouch IV (9255-40-01 ROD, Standard version)", - "megat4b", "Megatouch IV (9255-40-01 ROB, Standard version)", - "megat4c", "Megatouch IV (9255-40-01 ROA, Standard version)", - "megat4d", "Megatouch IV (9255-40-01 RO, Standard version)", - "megat4s", "Super Megatouch IV (9255-41-01 ROG, Standard version)", - "megat4sa", "Super Megatouch IV (9255-41-01 ROE, Standard version)", - "megat4sb", "Super Megatouch IV (9255-41-01 ROC, Standard version)", - "megat4smn", "Super Megatouch IV (9255-41-02 ROC, Minnesota version)", - "megat4snj", "Super Megatouch IV (9255-41-07 ROG, New Jersey version)", - "megat4st", "Super Megatouch IV Tournament Edition (9255-51-01 ROB, Standard version)", - "megat4stg", "Super Megatouch IV Turnier Version (9255-51-50 ROA, Bi-Lingual GER/ENG version)", - "megat4te", "Megatouch IV Tournament Edition (9255-50-01 ROD, Standard version)", - "megat4tea", "Megatouch IV Tournament Edition (9255-50-01 ROA, Standard version)", - "megat5", "Megatouch 5 (9255-60-01 ROI, Standard version)", - "megat5a", "Megatouch 5 (9255-60-01 ROC, Standard version)", - "megat5nj", "Megatouch 5 (9255-60-07 RON, New Jersey version)", - "megat5t", "Megatouch 5 Tournament Edition (9255-70-01 ROC, Standard version)", - "megat5tg", "Megatouch 5 Turnier Version (9255-70-50 ROD, Bi-Lingual GER/ENG version)", - "megat6", "Megatouch 6 (9255-80-01 ROA, Standard version)", - "megatack", "Megatack", - "megatech", "Mega-Tech", - "megazone", "Mega Zone (Konami set 1)", - "megazonea", "Mega Zone (Konami set 2)", - "megazoneb", "Mega Zone (Kosuka set 1)", - "megazonec", "Mega Zone (Kosuka set 2)", - "megazonei", "Mega Zone (Interlogic)", - "meijinsn", "Meijinsen", - "meikyuh", "Meikyuu Hunter G (Japan, set 1)", - "meikyuha", "Meikyuu Hunter G (Japan, set 2)", - "meltyb", "Melty Blood Act Cadenza Ver B (GDL-0039)", - "meltyba", "Melty Blood Act Cadenza Ver B (Rev A) (GDL-0039A)", - "meltybld", "Melty Blood Act Cadenza (Rev C) (GDL-0028C)", - "memlane", "Memory Lane", - "meosism", "Meosis Magic (Japan)", - "mephistp", "Mephisto (rev. 1.2)", - "mephistp1", "Mephisto (rev. 1.1)", - "mercs", "Mercs (World 900302)", - "mercsj", "Senjou no Ookami II (Japan 900302)", - "mercsu", "Mercs (USA 900608)", - "mercsur1", "Mercs (USA 900302)", - "merlinmm", "Merlins Money Maze", - "mermaid", "Mermaid", - "merryjn", "Merry Joiner", - "metafox", "Meta Fox", - "metalb", "Metal Black (World)", - "metalbj", "Metal Black (Japan)", - "metalman", "Metal Man", - "metalmx", "Metal Maniax (prototype)", - "metamrph", "Metamorphic Force (ver EAA)", - "metamrphj", "Metamorphic Force (ver JAA)", - "metamrphu", "Metamorphic Force (ver UAA)", - "meteor", "Meteoroids", - "meteorho", "Meteor (bootleg of Asteroids)", - "meteorp", "Meteor (Stern)", - "meteort", "Meteor (Taito)", - "meteorts", "Meteorites (bootleg of Asteroids)", - "metlclsh", "Metal Clash (Japan)", - "metlhawk", "Metal Hawk (Rev C)", - "metlhawkj", "Metal Hawk (Japan, Rev F)", - "metlsavr", "Metal Saver", - "metmqstr", "Metamoqester (International)", - "metrocrs", "Metro-Cross (set 1)", - "metrocrsa", "Metro-Cross (set 2)", - "mexico", "Mexico 86 (German speech)", - "mexico86", "Mexico 86 (bootleg of Kick and Run)", - "mf_achas", "Astro Chase (Max-A-Flex)", - "mf_bdash", "Boulder Dash (Max-A-Flex)", - "mf_brist", "Bristles (Max-A-Flex)", - "mf_flip", "Flip & Flop (Max-A-Flex)", - "mfightc", "Mahjong Fight Club (ver JAD)", - "mfightcc", "Mahjong Fight Club (ver JAC)", - "mfish_11", "Multi Fish (031124)", - "mfish_12", "Multi Fish (040308)", - "mfish_12a", "Multi Fish (bootleg, 040308, banking address hack)", - "mfish_13", "Multi Fish (040316)", - "mfish_3", "Multi Fish (021124)", - "mfish_3a", "Multi Fish (bootleg, 021124, banking address hack)", - "mfish_6", "Multi Fish (030124)", - "mfish_8", "Multi Fish (030522)", - "mfjump", "Monster Farm Jump (Japan)", - "mfunclub", "Mahjong Fun Club - Idol Saizensen (Japan)", - "mg_alad", "Aladdin's Cave (Maygay M2)", - "mg_bb", "Big Break (Maygay M2)", - "mg_ewg", "Each Way Gambler (Maygay M2)", - "mg_gbr", "Guinness Book Of Records (Maygay M2)", - "mg_jv", "Jack & Vera (Maygay M2)", - "mg_kf", "Krypton Factor (Maygay M2)", - "mg_lug", "London Underground (Maygay M2)", - "mg_pbw", "Pinball Wizard (Maygay M2)", - "mg_risk", "Risk (Maygay M2)", - "mg_scl", "Super Clue (Maygay M2)", - "mgakuen", "Mahjong Gakuen", - "mgakuen2", "Mahjong Gakuen 2 Gakuen-chou no Fukushuu", - "mgcldate", "Magical Date / Magical Date - dokidoki kokuhaku daisakusen (Ver 2.02J)", - "mgcldtex", "Magical Date EX / Magical Date - sotsugyou kokuhaku daisakusen (Ver 2.01J)", - "mgcrystl", "Magical Crystals (World, 92/01/10)", - "mgcrystlj", "Magical Crystals (Japan, 92/01/13)", - "mgcrystlo", "Magical Crystals (World, 91/12/10)", - "mgcs", "Mahjong Man Guan Cai Shen (V103CS)", - "mgdh", "Mahjong Man Guan Da Heng (Taiwan, V125T1)", - "mgdha", "Mahjong Man Guan Da Heng (Taiwan, V123T1)", - "mgfx", "Man Guan Fu Xing", - "mgion", "Gionbana [BET] (Japan 890207)", - "mgmen89", "Mahjong G-MEN'89 (Japan 890425)", - "mgnumber", "Magic Number", - "mgolf", "Atari Mini Golf (prototype)", - "mgprem11", "Magic Premium (v1.1)", - "mhavoc", "Major Havoc (rev 3)", - "mhavoc2", "Major Havoc (rev 2)", - "mhavocp", "Major Havoc (prototype)", - "mhavocrv", "Major Havoc (Return to Vax)", - "mhgaiden", "Mahjong Hourouki Gaiden (Japan)", - "mhhonban", "Mahjong Housoukyoku Honbanchuu (Japan)", - "mia", "M.I.A. - Missing in Action (version T)", - "mia2", "M.I.A. - Missing in Action (version S)", - "miaj", "M.I.A. - Missing in Action (Japan)", - "michigan", "Michigan (Bingo)", - "michkit1", "Michigan Bingo Kit 1 Generation (Bingo)", - "michkitb", "Michigan Kit Bingo Stake 6/10 (Bingo)", - "michnew", "Michigan Bingo New (Bingo)", - "michstake", "Michigan Bingo Stake 6/10 (Bingo)", - "micrombc", "Microman Battle Charge (J 990326 V1.000)", - "midearth", "Middle Earth", - "midnrun", "Midnight Run (Euro v1.11)", - "midres", "Midnight Resistance (World)", - "midresb", "Midnight Resistance (bootleg with 68705)", - "midresj", "Midnight Resistance (Japan)", - "midresu", "Midnight Resistance (US)", - "miexchng", "Money Puzzle Exchanger / Money Idol Exchanger", - "mightguy", "Mighty Guy", - "mightybj", "Vs. Mighty Bomb Jack (Japan)", - "mikie", "Mikie", - "mikiehs", "Mikie (High School Graffiti)", - "mikiej", "Shinnyuushain Tooru-kun", - "mil4000", "Millennium Nuovo 4000 (Version 2.0)", - "mil4000a", "Millennium Nuovo 4000 (Version 1.8)", - "mil4000b", "Millennium Nuovo 4000 (Version 1.5)", - "mil4000c", "Millennium Nuovo 4000 (Version 1.6)", - "millipdd", "Millipede Dux (hack)", - "milliped", "Millipede", - "milln_l3", "Millionaire (L-3)", - "millpac", "Millpac (bootleg of Centipede)", - "millsun", "Millennium Sun", - "mimonkey", "Mighty Monkey", - "mimonsco", "Mighty Monkey (bootleg on Super Cobra hardware)", - "mimonscr", "Mighty Monkey (bootleg on Scramble hardware)", - "minasan", "Minasanno Okagesamadesu! Daisugorokutaikai (MOM-001)(MOH-001)", - "minefld", "Minefield", - "mineswpr", "Minesweeper", - "mineswpr4", "Minesweeper (4-Player)", - "minferno", "Inferno (Meadows)", - "miniboy7", "Mini Boy 7 (set 1)", - "miniboy7a", "Mini Boy 7 (set 2)", - "miniboy7b", "Mini Boy 7 (set 3)", - "minigolf", "Mini Golf (11/25/85)", - "minigolf2", "Mini Golf (10/8/85)", - "minivadr", "Mini Vaders", - "mirage", "Mirage Youjuu Mahjongden (Japan)", - "mirax", "Mirax (set 1)", - "miraxa", "Mirax (set 2)", - "mirderby", "Miracle Derby - Ascot", - "mirninja", "Mirai Ninja (Japan)", - "misncrft", "Mission Craft (version 2.7)", - "misncrfta", "Mission Craft (version 2.4)", - "missb2", "Miss Bubble II", - "missile", "Missile Command (rev 3)", - "missile1", "Missile Command (rev 1)", - "missile2", "Missile Command (rev 2)", - "missilem", "Missile Command Multigame", - "missmw96", "Miss Mister World '96 (Nude)", - "missw96", "Miss World '96 (Nude) (set 1)", - "missw96a", "Miss World '96 (Nude) (set 2)", - "missw96b", "Miss World '96 (Nude) (set 3)", - "mizubaku", "Mizubaku Daibouken (Japan)", - "mj2", "Sega Network Taisen Mahjong MJ 2 (Rev C) (GDX-0006C)", - "mj3", "Sega Network Taisen Mahjong MJ 3 (Rev D) (GDX-0017D)", - "mj3f", "Sega Network Taisen Mahjong MJ 3 (Rev F) (GDX-0017F)", - "mj4simai", "Wakakusamonogatari Mahjong Yonshimai (Japan)", - "mjanbari", "Medal Mahjong Janjan Baribari [BET] (Japan)", - "mjangels", "Mahjong Angels - Comic Theater Vol.2 (Japan)", - "mjapinky", "Almond Pinky [BET] (Japan)", - "mjcamera", "Mahjong Camera Kozou (set 1) (Japan 881109)", - "mjcamerb", "Mahjong Camera Kozou (set 2) (Japan 881109)", - "mjchuuka", "Mahjong Chuukanejyo (China)", - "mjclinic", "Mahjong Clinic (Japan)", - "mjclub", "Mahjong Club [BET] (Japan)", - "mjcomv1", "Mahjong Comic Gekijou Vol.1 (Japan)", - "mjdchuka", "Mahjong The Dai Chuuka Ken (China, v. D111)", - "mjdejav2", "Mahjong Shinkirou Deja Vu 2 (Japan)", - "mjdejavu", "Mahjong Shinkirou Deja Vu (Japan)", - "mjderngr", "Mahjong Derringer (Japan)", - "mjdialq2", "Mahjong Dial Q2 (Japan)", - "mjdiplob", "Mahjong Diplomat [BET] (Japan)", - "mjegolf", "Mahjong Erotica Golf (Japan)", - "mjelct3", "Mahjong Electron Base (parts 2 & 3, Japan)", - "mjelct3a", "Mahjong Electron Base (parts 2 & 3, alt., Japan)", - "mjelctrb", "Mahjong Electron Base (parts 2 & 4, Japan, bootleg)", - "mjelctrn", "Mahjong Electron Base (parts 2 & 4, Japan)", - "mjflove", "Mahjong Fantasic Love (Japan)", - "mjfocus", "Mahjong Focus (Japan 890313)", - "mjfocusm", "Mahjong Focus [BET] (Japan 890510)", - "mjfriday", "Mahjong Friday (Japan)", - "mjgaiden", "Mahjong Gaiden [BET] (Japan 870803)", - "mjgottsu", "Mahjong Gottsu ee-kanji (Japan)", - "mjgottub", "Medal Mahjong Gottsu ee-kanji [BET] (Japan)", - "mjgtaste", "Mahjong G-Taste", - "mjhokite", "Mahjong Hourouki Okite (Japan)", - "mjifb", "Mahjong If...? [BET]", - "mjifb2", "Mahjong If...? [BET](2921)", - "mjifb3", "Mahjong If...? [BET](2931)", - "mjikaga", "Mahjong Ikaga Desu ka (Japan)", - "mjkinjas", "Mahjong Kinjirareta Asobi (Japan)", - "mjkjidai", "Mahjong Kyou Jidai (Japan)", - "mjkoiura", "Mahjong Koi Uranai (Japan set 1)", - "mjkojink", "Mahjong Kojinkyouju (Private Teacher) (Japan)", - "mjlaman", "Mahjong La Man (Japan)", - "mjleague", "Major League", - "mjlstory", "Mahjong Jikken Love Story (Japan)", - "mjmania", "Mahjong Mania - Kairakukan e Youkoso (Japan)", - "mjmyornt", "Mahjong The Mysterious Orient", - "mjmyster", "Mahjong The Mysterious World (set 1)", - "mjmyuniv", "Mahjong The Mysterious Universe", - "mjmywrld", "Mahjong The Mysterious World (set 2)", - "mjnanpaa", "Mahjong Nanpa Story (Japan 890712)", - "mjnanpas", "Mahjong Nanpa Story (Japan 890713)", - "mjnanpau", "Mahjong Nanpa Story (Ura) (Japan 890805)", - "mjnatsu", "Mahjong Natsu Monogatari (Japan)", - "mjnquest", "Mahjong Quest (Japan)", - "mjnquestb", "Mahjong Quest (No Nudity)", - "mjprivat", "Mahjong Private (Japan)", - "mjreach", "Mahjong Reach (bootleg)", - "mjreach1", "Mahjong Reach Ippatsu (Japan)", - "mjsenka", "Mahjong Senka (Japan)", - "mjsikakb", "Mahjong Shikaku (Japan 880722)", - "mjsikakc", "Mahjong Shikaku (Japan 880806)", - "mjsikakd", "Mahjong Shikaku (Japan 880802)", - "mjsikaku", "Mahjong Shikaku (Japan 880908)", - "mjsister", "Mahjong Sisters (Japan)", - "mjsiyoub", "Mahjong Shiyou (Japan)", - "mjtensin", "Mahjong Tensinhai (Japan)", - "mjuraden", "Mahjong Uranai Densetsu (Japan)", - "mjvegas", "Mahjong Vegas (Japan)", - "mjvegasa", "Mahjong Vegas (Japan, unprotected)", - "mjyarou", "Mahjong Yarou [BET] (Japan)", - "mjyougo", "Mahjong-yougo no Kisotairyoku (Japan)", - "mjyuugi", "Mahjong Yuugi (Japan set 1)", - "mjyuugia", "Mahjong Yuugi (Japan set 2)", - "mjzoomin", "Mahjong Channel Zoom In (Japan)", - "mk", "Mortal Kombat (rev 5.0 T-Unit 03/19/93)", - "mk2", "Mortal Kombat II (rev L3.1)", - "mk2chal", "Mortal Kombat II Challenger (hack)", - "mk2r11", "Mortal Kombat II (rev L1.1)", - "mk2r14", "Mortal Kombat II (rev L1.4)", - "mk2r20", "Mortal Kombat II (rev L2.0)", - "mk2r21", "Mortal Kombat II (rev L2.1)", - "mk2r30", "Mortal Kombat II (rev L3.0)", - "mk2r31e", "Mortal Kombat II (rev L3.1 (European))", - "mk2r32e", "Mortal Kombat II (rev L3.2 (European))", - "mk2r42", "Mortal Kombat II (rev L4.2, hack)", - "mk2r91", "Mortal Kombat II (rev L9.1, hack)", - "mk3", "Mortal Kombat 3 (rev 2.1)", - "mk3mdb", "Mortal Kombat 3 (bootleg of Megadrive version)", - "mk3p40", "Mortal Kombat 3 (rev 1 chip label p4.0)", - "mk3r10", "Mortal Kombat 3 (rev 1.0)", - "mk3r20", "Mortal Kombat 3 (rev 2.0)", - "mk4", "Mortal Kombat 4 (version 3.0)", - "mk4a", "Mortal Kombat 4 (version 2.1)", - "mk4b", "Mortal Kombat 4 (version 1.0)", - "mk6nsw11", "Aristocrat MK6 Base (11011901, NSW/ACT)", - "mkartagp", "Mario Kart Arcade GP (MKA2 Ver.B)", - "mkeibaou", "Mahjong Keibaou (Japan)", - "mkla1", "Mortal Kombat (rev 1.0 08/09/92)", - "mkla2", "Mortal Kombat (rev 2.0 08/18/92)", - "mkla3", "Mortal Kombat (rev 3.0 08/31/92)", - "mkla4", "Mortal Kombat (rev 4.0 09/28/92)", - "mknifty", "Mortal Kombat (Nifty Kombo, hack)", - "mknifty666", "Mortal Kombat (Nifty Kombo 666, hack)", - "mkoiuraa", "Mahjong Koi Uranai (Japan set 2)", - "mkprot4", "Mortal Kombat (prototype, rev 4.0 07/14/92)", - "mkprot8", "Mortal Kombat (prototype, rev 8.0 07/21/92)", - "mkprot9", "Mortal Kombat (prototype, rev 9.0 07/28/92)", - "mkr4", "Mortal Kombat (rev 4.0 T-Unit 02/11/93)", - "mktturbo", "Mortal Kombat (Turbo Ninja T-Unit 03/19/93, hack)", - "mkyawdim", "Mortal Kombat (Yawdim bootleg, set 1)", - "mkyawdim2", "Mortal Kombat (Yawdim bootleg, set 2)", - "mkyturbo", "Mortal Kombat (Turbo 3.1 09/09/93, hack)", - "mkyturboe", "Mortal Kombat (Turbo 3.0 08/31/92, hack)", - "mladyhtr", "Mahjong The Lady Hunter (Japan 900509)", - "mlander", "Moon Lander (bootleg of Lunar Rescue)", - "mlanding", "Midnight Landing (Germany)", - "mm_05", "Medieval Madness (0.50)", - "mm_10", "Medieval Madness (1.0)", - "mm_109", "Medieval Madness (1.09)", - "mm_109b", "Medieval Madness (1.09B)", - "mm_109c", "Medieval Madness (1.09C Profanity)", - "mm_10u", "Medieval Madness (1.0 Ultrapin)", - "mmaiko", "Maikobana [BET] (Japan 900911)", - "mmancp2u", "Mega Man: The Power Battle (CPS2, USA 951006, SAMPLE Version)", - "mmatrix", "Mars Matrix: Hyper Solid Shooting (USA 000412)", - "mmatrixd", "Mars Matrix: Hyper Solid Shooting (USA 000412 Phoenix Edition) (bootleg)", - "mmatrixj", "Mars Matrix: Hyper Solid Shooting (Japan 000412)", - "mmaulers", "Monster Maulers (ver EAA)", - "mmaze", "Marchen Maze (Japan)", - "mmcamera", "Mahjong Camera Kozou [BET] (Japan 890509)", - "mmehyou", "Medal Mahjong Circuit no Mehyou [BET] (Japan)", - "mmm_ldip", "Lucky Dip (Maygay)", - "mmmbanc", "Medal Mahjong Moukari Bancho (2007/06/05 MASTER VER.)", - "mmonkey", "Minky Monkey", - "mmpanic", "Monkey Mole Panic (USA)", - "mmpork", "Muchi Muchi Pork! (2007/ 4/17 MASTER VER.)", - "mmsikaku", "Mahjong Shikaku [BET] (Japan 880929)", - "mnchmobl", "Munch Mobile (US)", - "mnfb_c27", "Monday Night Football (2.7, 50cts)", - "mnight", "Mutant Night", - "mntecrlo", "Monte Carlo (Pinball)", - "mnumber", "Mystery Number", - "mnumitg", "Magic Number (Italian Gambling Game, Ver 1.5)", - "mocapb", "Mocap Boxing (ver AAA)", - "mocapbj", "Mocap Boxing (ver JAA)", - "mocapglf", "Mocap Golf (ver UAA)", - "moegonta", "Moeyo Gonta!! (Japan)", - "moeru", "Moeru Casinyo (GDL-0013)", - "mofflott", "Maze of Flott (Japan)", - "moguchan", "Mogu Chan (bootleg?)", - "mogura", "Mogura Desse (Japan)", - "mohicans", "Mohican Sun (Konami Endeavour)", - "mok", "The Maze of the Kings (GDS-0022)", - "mole", "Mole Attack", - "momoko", "Momoko 120%", - "momotaro", "Mahjong Momotarou (Japan)", - "monacogp", "Monaco GP (Set 1) [TTL]", - "monacogpa", "Monaco GP (Set 2) [TTL]", - "moneybnk", "Money In The Bank (NSW, Australia)", - "moneymac", "Money Machine (Version 1.7E Dual)", - "moneymacd1", "Money Machine (Version 1.7R)", - "moneymacd2", "Money Machine (Version 1.7LT)", - "moneymacv1", "Money Machine (Version 1.7R Dual)", - "moneymacv2", "Money Machine (Version 1.7LT Dual)", - "mongolnw", "Mongolfier New (Italian)", - "monkelf", "Monky Elf (Korean bootleg of Avenging Spirit)", - "monkeyba", "Monkey Ball (GDS-0008)", - "monkeyd", "Monkey Donkey", - "mononew", "Monopoly (ARM7 Sound Board)", - "monop233", "Monopoly (2.33)", - "monop251", "Monopoly (2.51)", - "monop301", "Monopoly (3.01)", - "monop303", "Monopoly (3.03)", - "monoplcl", "Monopoly Classic (JPM) (SYSTEM5 VIDEO)", - "monopldx", "Monopoly Deluxe (JPM) (SYSTEM5 VIDEO)", - "monopolf", "Monopoly (France)", - "monopolg", "Monopoly (Germany)", - "monopoli", "Monopoly (Italy)", - "monopoll", "Monopoly (Spain)", - "monopolp", "Monopoly (3.20)", - "monopoly", "Monopoly (JPM) (SYSTEM5 VIDEO, set 1)", - "monopolya", "Monopoly (JPM) (SYSTEM5 VIDEO, set 2)", - "monopred", "Monopoly (Coin dropper)", - "monrobwl", "Stars & Strikes (Bowler)", - "monshow", "The Monster Show (Konami Endeavour)", - "monspdr", "Money Spider (Ace)", - "monsterb", "Monster Bash", - "monsterb2", "Monster Bash (2 board version)", - "monsterz", "Monster Zero", - "montana", "Montana Bingo Stake 6/10 (Bingo)", - "montecar", "Monte Carlo", - "monymony", "Money Money", - "monzagp", "Monza GP", - "monzagpb", "Monza GP (bootleg)", - "moomesa", "Wild West C.O.W.-Boys of Moo Mesa (ver EAB)", - "moomesaaab", "Wild West C.O.W.-Boys of Moo Mesa (ver AAB)", - "moomesabl", "Wild West C.O.W.-Boys of Moo Mesa (bootleg)", - "moomesauab", "Wild West C.O.W.-Boys of Moo Mesa (ver UAB)", - "moomesauac", "Wild West C.O.W.-Boys of Moo Mesa (ver UAC)", - "moonal2", "Moon Alien Part 2", - "moonal2b", "Moon Alien Part 2 (older version)", - "moonaln", "Moon Alien", - "moonbase", "Moon Base (set 1)", - "moonbasea", "Moon Base (set 2)", - "mooncmw", "Moon War (Moon Cresta bootleg)", - "mooncptc", "Moon Cresta (Petaco S.A. Spanish bootleg)", - "mooncreg", "Moon Cresta (Electrogame S.A. Spanish bootleg)", - "mooncrgx", "Moon Cresta (Galaxian hardware)", - "mooncrs2", "Moon Cresta (bootleg set 2)", - "mooncrs3", "Moon Cresta (bootleg set 3)", - "mooncrs4", "Moon Crest (Moon Cresta bootleg)", - "mooncrsb", "Moon Cresta (bootleg set 1)", - "mooncrsl", "Cresta Mundo (Laguna S.A. Spanish Moon Cresta bootleg)", - "mooncrst", "Moon Cresta (Nichibutsu)", - "mooncrstg", "Moon Cresta (Gremlin)", - "mooncrsto", "Moon Cresta (Nichibutsu, old rev)", - "mooncrstu", "Moon Cresta (Nichibutsu USA, unencrypted)", - "mooncrstuk", "Moon Cresta (Nichibutsu UK)", - "mooncrstuku", "Moon Cresta (Nichibutsu UK, unencrypted)", - "moonlght", "Moon Light (bootleg of Golden Star)", - "moonqsr", "Moon Quasar", - "moonwar", "Moonwar", - "moonwara", "Moonwar (older)", - "moonwarp", "Moon War (prototype on Frenzy hardware)", - "moremore", "More More", - "moremorp", "More More Plus", - "mosaic", "Mosaic", - "mosaica", "Mosaic (Fuuki)", - "mosaicf2", "Mosaic (F2 System)", - "mosyougi", "Syougi No Tatsujin - Master of Syougi", - "motofren", "Moto Frenzy", - "motofrenft", "Moto Frenzy (Field Test Version)", - "motofrenmd", "Moto Frenzy (Mini Deluxe)", - "motofrenmf", "Moto Frenzy (Mini Deluxe Field Test Version)", - "motorace", "MotoRace USA", - "motoraid", "Motor Raid - Twin", - "motos", "Motos", - "mototour", "MotoTour / Zippy Race (Tecfri license)", - "motoxgo", "Motocross Go! (MG3 Ver. A)", - "motoxgov1a", "Motocross Go! (MG1 Ver. A, set 1)", - "motoxgov1a2", "Motocross Go! (MG1 Ver. A, set 2)", - "motoxgov2a", "Motocross Go! (MG2 Ver. A)", - "motrdome", "MotorDome", - "motrshow", "Motor Show (set 1)", - "motrshowa", "Motor Show (set 2)", - "mouja", "Mouja (Japan)", - "mouseatk", "Mouse Attack", - "mouser", "Mouser", - "mouserc", "Mouser (Cosmos)", - "mousn_l1", "Mousin' Around! (LA-1)", - "mousn_l4", "Mousin' Around! (LA-4)", - "mousn_lu", "Mousin' Around! (LU-1)", - "mousn_lx", "Mousin' Around! (LX-1)", - "moviecrd", "Movie Card", - "movmastr", "Movie Masters", - "mp_bio", "Bio-hazard Battle (Mega Play)", - "mp_col3", "Columns III (Mega Play)", - "mp_gaxe2", "Golden Axe II (Mega Play)", - "mp_gslam", "Grand Slam (Mega Play)", - "mp_mazin", "Mazin Wars / Mazin Saga (Mega Play)", - "mp_shnb3", "Shinobi III (Mega Play)", - "mp_soni2", "Sonic The Hedgehog 2 (Mega Play)", - "mp_sonic", "Sonic The Hedgehog (Mega Play)", - "mp_sor2", "Streets of Rage II (Mega Play)", - "mp_twc", "Tecmo World Cup (Mega Play)", - "mpang", "Mighty! Pang (Euro 001010)", - "mpangj", "Mighty! Pang (Japan 001011)", - "mpangr1", "Mighty! Pang (Euro 000925)", - "mpangu", "Mighty! Pang (USA 001010)", - "mpatrol", "Moon Patrol", - "mpatrolw", "Moon Patrol (Williams)", - "mplanets", "Mad Planets", - "mplanetsuk", "Mad Planets (UK)", - "mpoker", "Multi-Poker", - "mquake", "Moonquake", - "mranger", "Moon Ranger (bootleg of Moon Patrol)", - "mrblack", "Mr. Black", - "mrblack1", "Mr. Black (alternate set)", - "mrblkz80", "Mr. Black (Z-80 CPU)", - "mrdig", "Mr. Dig", - "mrdo", "Mr. Do!", - "mrdofix", "Mr. Do! (bugfixed)", - "mrdot", "Mr. Do! (Taito)", - "mrdoy", "Mr. Do! (prototype)", - "mrdrillr", "Mr. Driller (US, DRI3/VER.A2)", - "mrdrillrj", "Mr. Driller (Japan, DRI1/VER.A2)", - "mrdrilr2", "Mr. Driller 2 (Japan, DR21 Ver.A)", - "mrdrilrg", "Mr. Driller G (Japan, DRG1 Ver.A)", - "mrdrilrga", "Mr. Driller G ALT (Japan, DRG1 Ver.A)", - "mrdrlr2a", "Mr. Driller 2 (Asia, DR22 Ver.A)", - "mrdu", "Mr. Du!", - "mrflea", "The Amazing Adventures of Mr. F. Lea", - "mrgoemon", "Mr. Goemon (Japan)", - "mrheli", "Mr. HELI no Daibouken", - "mrjong", "Mr. Jong (Japan)", - "mrkicker", "Mr. Kicker", - "mrkougar", "Mr. Kougar", - "mrkougar2", "Mr. Kougar (earlier)", - "mrkougb", "Mr. Kougar (bootleg set 1)", - "mrkougb2", "Mr. Kougar (bootleg set 2)", - "mrlo", "Mr. Lo!", - "mrokumei", "Mahjong Rokumeikan (Japan)", - "mrtlbeat", "Martial Beat (G*B47 VER. JBA)", - "mrtnt", "Mr. TNT", - "mrviking", "Mister Viking (315-5041)", - "mrvikingj", "Mister Viking (315-5041, Japan)", - "ms4plus", "Metal Slug 4 Plus (bootleg)", - "ms5pcb", "Metal Slug 5 (JAMMA PCB)", - "ms5plus", "Metal Slug 5 Plus (bootleg)", - "msbingo", "Miss Bingo", - "mschamp", "Ms. Pacman Champion Edition / Zola-Puc Gal", - "mschamps", "Ms. Pacman Champion Edition / Super Zola-Puc Gal", - "mscoutm", "Mahjong Scout Man (Japan)", - "msgogo", "Mouse Shooter GoGo", - "msgundam", "Mobile Suit Gundam", - "msgundam1", "Mobile Suit Gundam (Japan)", - "msh", "Marvel Super Heroes (Euro 951024)", - "msha", "Marvel Super Heroes (Asia 951024)", - "mshb", "Marvel Super Heroes (Brazil 951117)", - "msheartb", "Ms. Pac-Man Heart Burn", - "mshh", "Marvel Super Heroes (Hispanic 951117)", - "mshj", "Marvel Super Heroes (Japan 951117)", - "mshjr1", "Marvel Super Heroes (Japan 951024)", - "mshu", "Marvel Super Heroes (USA 951024)", - "mshud", "Marvel Super Heroes (US 951024 Phoenix Edition) (bootleg)", - "mshuttle", "Moon Shuttle (US? set 1)", - "mshuttle2", "Moon Shuttle (US? set 2)", - "mshuttlej", "Moon Shuttle (Japan set 1)", - "mshuttlej2", "Moon Shuttle (Japan set 2)", - "mshvsf", "Marvel Super Heroes Vs. Street Fighter (Euro 970625)", - "mshvsfa", "Marvel Super Heroes Vs. Street Fighter (Asia 970625)", - "mshvsfa1", "Marvel Super Heroes Vs. Street Fighter (Asia 970620)", - "mshvsfb", "Marvel Super Heroes Vs. Street Fighter (Brazil 970827)", - "mshvsfb1", "Marvel Super Heroes Vs. Street Fighter (Brazil 970625)", - "mshvsfh", "Marvel Super Heroes Vs. Street Fighter (Hispanic 970625)", - "mshvsfj", "Marvel Super Heroes Vs. Street Fighter (Japan 970707)", - "mshvsfj1", "Marvel Super Heroes Vs. Street Fighter (Japan 970702)", - "mshvsfj2", "Marvel Super Heroes Vs. Street Fighter (Japan 970625)", - "mshvsfu", "Marvel Super Heroes Vs. Street Fighter (USA 970827)", - "mshvsfu1", "Marvel Super Heroes Vs. Street Fighter (USA 970625)", - "mshvsfu1d", "Marvel Super Heroes Vs. Street Fighter (USA 970625 Phoenix Edition) (bootleg)", - "msisaac", "Metal Soldier Isaac II", - "msjiken", "Mahjong Satsujin Jiken (Japan 881017)", - "mslider", "Monster Slider (Japan)", - "mslug", "Metal Slug - Super Vehicle-001", - "mslug2", "Metal Slug 2 - Super Vehicle-001/II (NGM-2410)(NGH-2410)", - "mslug3", "Metal Slug 3 (NGM-2560)", - "mslug3b6", "Metal Slug 6 (Metal Slug 3 bootleg)", - "mslug3h", "Metal Slug 3 (NGH-2560)", - "mslug4", "Metal Slug 4 (NGM-2630)", - "mslug4h", "Metal Slug 4 (NGH-2630)", - "mslug5", "Metal Slug 5 (NGM-2680)", - "mslug5h", "Metal Slug 5 (NGH-2680)", - "mslug6", "Metal Slug 6", - "mslugx", "Metal Slug X - Super Vehicle-001 (NGM-2500)(NGH-2500)", - "mspacii", "Ms. Pac-Man II (Orca bootleg set 1)", - "mspacii2", "Ms. Pac-Man II (Orca bootleg set 2)", - "mspacmab", "Ms. Pac-Man (bootleg)", - "mspacman", "Ms. Pac-Man", - "mspacmanbg", "Ms. Pac-Man ('Made in Greece' bootleg)", - "mspacmancr", "Ms. Pac-Man (bootleg on Crush Roller Hardware)", - "mspacmat", "Ms. Pac Attack", - "mspacmbe", "Ms. Pac-Man (bootleg, encrypted)", - "mspacmnf", "Ms. Pac-Man (speedup hack)", - "mspacpls", "Ms. Pac-Man Plus", - "mspuzzle", "Miss Puzzle", - "mspuzzleg", "Miss Puzzle (Clone of Gumbo)", - "mspuzzlen", "Miss Puzzle (Nudes)", - "mstadium", "Main Stadium (Japan)", - "mstworld", "Monsters World (bootleg of Super Pang)", - "msword", "Magic Sword: Heroic Fantasy (World 900725)", - "mswordj", "Magic Sword: Heroic Fantasy (Japan 900623)", - "mswordr1", "Magic Sword: Heroic Fantasy (World 900623)", - "mswordu", "Magic Sword: Heroic Fantasy (USA 900725)", - "mt_aftrb", "After Burner (Mega-Tech, SMS based)", - "mt_arrow", "Arrow Flash (Mega-Tech)", - "mt_astrm", "Alien Storm (Mega-Tech)", - "mt_astro", "Astro Warrior (Mega-Tech, SMS based)", - "mt_asyn", "Alien Syndrome (Mega-Tech, SMS based)", - "mt_bbros", "Bonanza Bros. (Mega-Tech)", - "mt_beast", "Altered Beast (Mega-Tech)", - "mt_calga", "California Games (Mega-Tech)", - "mt_cols", "Columns (Mega-Tech)", - "mt_crack", "Crack Down (Mega-Tech)", - "mt_eswat", "Cyber Police ESWAT: Enhanced Special Weapons and Tactics (Mega-Tech)", - "mt_fshrk", "Fire Shark (Mega-Tech)", - "mt_fwrld", "Forgotten Worlds (Mega-Tech)", - "mt_fz", "Fantasy Zone (Mega-Tech, SMS based)", - "mt_gaxe", "Golden Axe (Mega-Tech)", - "mt_gaxe2", "Golden Axe II (Mega-Tech)", - "mt_gfoot", "Great Football (Mega-Tech, SMS based)", - "mt_ggolf", "Great Golf (Mega-Tech, SMS based)", - "mt_gng", "Ghouls'n Ghosts (Mega-Tech)", - "mt_gsocr", "Great Soccer (Mega-Tech, SMS based)", - "mt_kcham", "Kid Chameleon (Mega-Tech)", - "mt_lastb", "Last Battle (Mega-Tech)", - "mt_mlh", "Mario Lemieux Hockey (Mega-Tech)", - "mt_mwalk", "Michael Jackson's Moonwalker (Mega-Tech)", - "mt_mystd", "Mystic Defender (Mega-Tech)", - "mt_orun", "Out Run (Mega-Tech, SMS based)", - "mt_parlg", "Parlour Games (Mega-Tech, SMS based)", - "mt_revsh", "The Revenge of Shinobi (Mega-Tech)", - "mt_shado", "Shadow Dancer (Mega-Tech)", - "mt_shang", "Super Hang-On (Mega-Tech)", - "mt_shar2", "Space Harrier II (Mega-Tech)", - "mt_shnbi", "Shinobi (Mega-Tech, SMS based)", - "mt_smgp", "Super Monaco GP (Mega-Tech)", - "mt_soni2", "Sonic The Hedgehog 2 (Mega-Tech)", - "mt_sonia", "Sonic The Hedgehog (Mega-Tech, set 2)", - "mt_sonic", "Sonic The Hedgehog (Mega-Tech, set 1)", - "mt_spman", "Spider-Man vs The Kingpin (Mega-Tech)", - "mt_srage", "Streets of Rage (Mega-Tech)", - "mt_srbb", "Super Real Basketball (Mega-Tech)", - "mt_stbld", "Super Thunder Blade (Mega-Tech)", - "mt_stf", "Joe Montana II: Sports Talk Football (Mega-Tech)", - "mt_tetri", "Tetris (Mega-Tech)", - "mt_tfor2", "Thunder Force II MD (Mega-Tech)", - "mt_tgolf", "Arnold Palmer Tournament Golf (Mega-Tech)", - "mt_tlbba", "Tommy Lasorda Baseball (Mega-Tech)", - "mt_tout", "Turbo Outrun (Mega-Tech)", - "mt_wcsoc", "World Championship Soccer (Mega-Tech)", - "mt_wwar", "Wrestle War (Mega-Tech)", - "mtburn", "Money To Burn (Russia)", - "mtetrisc", "Magical Tetris Challenge (981009 Japan)", - "mtkob2", "Mushiking The King Of Beetle 2K3 2nd", - "mtlchamp", "Martial Champion (ver EAB)", - "mtlchamp1", "Martial Champion (ver EAA)", - "mtlchampa", "Martial Champion (ver AAA)", - "mtlchampj", "Martial Champion (ver JAA)", - "mtlchampu", "Martial Champion (ver UAE)", - "mtlchampu1", "Martial Champion (ver UAD)", - "mtrain", "Magic Train (Ver. 1.31)", - "mtrainnv", "Magic Train (Clear NVRAM ROM?)", - "mtrap", "Mouse Trap (version 5)", - "mtrap3", "Mouse Trap (version 3)", - "mtrap4", "Mouse Trap (version 4)", - "mtrapb", "Mouse Trap (bootleg)", - "mtwins", "Mega Twins (World 900619)", - "mugsmash", "Mug Smashers", - "multchmp", "Multi Champ (World, ver. 2.5)", - "multchmpk", "Multi Champ (Korea)", - "multigam", "Multi Game (set 1)", - "multigm2", "Multi Game 2", - "multigm3", "Multi Game III", - "multigmb", "Multi Game (set 2)", - "multigmt", "Multi Game (Tung Sheng Electronics)", - "multiped", "Multipede (Centipede/Millipede multigame kit)", - "multiwin", "Multi Win (Ver.0167, encrypted)", - "mundial", "Mundial 90", - "murogem", "Muroge Monaco (set 1)", - "murogema", "Muroge Monaco (set 2)", - "murogemb", "Muroge Monaco (set 3)", - "murogmbl", "Muroge Monaco (bootleg?)", - "mushi2ea", "MushiKing II - The King Of Beetle II ENG (Ver. 2.001)", - "mushik2e", "MushiKing II - The King Of Beetle II ENG (Ver. 1.001)", - "mushisam", "Mushihime-Sama (2004/10/12.MASTER VER.)", - "mushisama", "Mushihime-Sama (2004/10/12 MASTER VER.)", - "mushisamb", "Mushihime-Sama (2004/10/12 MASTER VER)", - "mushitam", "Puzzle! Mushihime-Tama (2005/09/09.MASTER VER)", - "mushitama", "Puzzle! Mushihime-Tama (2005/09/09 MASTER VER)", - "mushmagi", "Mushroom Magic (Russia) (Atronic)", - "musicbal", "Music Ball", - "musicsrt", "Music Sort (ver 2.02, English)", - "musobana", "Musoubana (Japan)", - "mustache", "Mustache Boy", - "mustang", "US AAF Mustang (25th May. 1990)", - "mustangb", "US AAF Mustang (bootleg)", - "mustangb2", "US AAF Mustang (TAB Austria bootleg)", - "mustangs", "US AAF Mustang (25th May. 1990 / Seoul Trading)", - "mutantf", "Mutant Fighter (World ver EM-5)", - "mutantf3", "Mutant Fighter (World ver EM-3)", - "mutantf4", "Mutant Fighter (World ver EM-4)", - "mutnat", "Mutation Nation (NGM-014)(NGH-014)", - "mv1bon", "Believe It Or Not (Maygay, MV1 Video)", - "mv1cpc", "Caesar's Palace Club (Maygay, MV1 Video, set 1)", - "mv1cpca", "Caesar's Palace Club (Maygay, MV1 Video, set 2)", - "mv1cpcb", "Caesar's Palace Club (Maygay, MV1 Video, set 3)", - "mv1cwq", "Crossword Quiz (Maygay, MV1 Video, set 1)", - "mv1cwqa", "Crossword Quiz (Maygay, MV1 Video, set 2)", - "mv1guac", "Give Us A Clue (Maygay, MV1 Video, set 1)", - "mv1guaca", "Give Us A Clue (Maygay, MV1 Video, set 2)", - "mv1sfx", "Special Effects (Maygay, MV1 Video, set 1)", - "mv1sfx2", "Special Effects V2 (Maygay, MV1 Video)", - "mv1sfxa", "Special Effects (Maygay, MV1 Video, set 2)", - "mv1wc", "World Cup (Maygay, MV1 Video)", - "mv4in1", "Mini Vegas 4in1", - "mvp", "MVP (set 2, US, FD1094 317-0143)", - "mvpj", "MVP (set 1, Japan, FD1094 317-0142)", - "mvsc", "Marvel Vs. Capcom: Clash of Super Heroes (Euro 980123)", - "mvsc2", "Marvel Vs. Capcom 2 New Age of Heroes (JPN, USA, EUR, ASI, AUS) (Rev A)", - "mvsca", "Marvel Vs. Capcom: Clash of Super Heroes (Asia 980123)", - "mvscar1", "Marvel Vs. Capcom: Clash of Super Heroes (Asia 980112)", - "mvscb", "Marvel Vs. Capcom: Clash of Super Heroes (Brazil 980123)", - "mvsch", "Marvel Vs. Capcom: Clash of Super Heroes (Hispanic 980123)", - "mvscj", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980123)", - "mvscjr1", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980112)", - "mvscjsing", "Marvel Vs. Capcom: Clash of Super Heroes (Japan 980123) (Single PCB)", - "mvscr1", "Marvel Vs. Capcom: Clash of Super Heroes (Euro 980112)", - "mvscu", "Marvel Vs. Capcom: Clash of Super Heroes (USA 980123)", - "mvscud", "Marvel Vs. Capcom: Clash of Super Heroes (USA 980123 Phoenix Edition) (bootleg)", - "mvscur1", "Marvel Vs. Capcom: Clash of Super Heroes (USA 971222)", - "mwalk", "Michael Jackson's Moonwalker (World, FD1094/8751 317-0159)", - "mwalkbl", "Michael Jackson's Moonwalker (bootleg)", - "mwalkj", "Michael Jackson's Moonwalker (Japan, FD1094/8751 317-0157)", - "mwalku", "Michael Jackson's Moonwalker (US, FD1094/8751 317-0158)", - "mwarr", "Mighty Warriors", - "mwskins", "Skins Game (1.06)", - "mwskinsa", "Skins Game (1.06, alt)", - "mwskinso", "Skins Game (1.04)", - "mx5000", "MX5000", - "myangel", "Kosodate Quiz My Angel (Japan)", - "myangel2", "Kosodate Quiz My Angel 2 (Japan)", - "myangel3", "Kosodate Quiz My Angel 3 (Japan, KQT1/VER.A)", - "myfairld", "Virtual Mahjong 2 - My Fair Lady (J 980608 V1.000)", - "myhero", "My Hero (US, not encrypted)", - "myherok", "My Hero (Korea)", - "myqbert", "Mello Yello Q*bert", - "mystcast", "Mystery Castle", - "mystic", "Mystic", - "mysticm", "Mystic Marathon", - "mysticmp", "Mystic Marathon (prototype)", - "mysticri", "Mystic Riders (World)", - "mysticrib", "Mystic Riders (bootleg?)", - "myststar", "Mystic Star", - "mystston", "Mysterious Stones - Dr. John's Adventure", - "myststono", "Mysterious Stones - Dr. Kick in Adventure", - "myststonoi", "Mysterious Stones - Dr. Kick in Adventure (Itisa PCB)", - "mystwarr", "Mystic Warriors (ver EAA)", - "mystwarra", "Mystic Warriors (ver AAA)", - "mystwarrj", "Mystic Warriors (ver JAA)", - "mystwarru", "Mystic Warriors (ver UAA)", - "nagano98", "Nagano Winter Olympics '98 (GX720 EAA)", - "naganoj", "Hyper Olympic in Nagano (GX720 JAA)", - "nam1975", "NAM-1975 (NGM-001)(NGH-001)", - "namcostr", "Namco Stars", - "nametune", "Name That Tune (set 1)", - "nametune2", "Name That Tune (3/23/86)", - "naname", "Naname de Magic! (Japan)", - "naomi", "Naomi Bios", - "naomi2", "Naomi 2 Bios", - "naomigd", "Naomi GD-ROM Bios", - "narc", "Narc (rev 7.00)", - "narc2", "Narc (rev 2.00)", - "narc3", "Narc (rev 3.20)", - "nascar", "Nascar (4.50)", - "nascar_301", "Nascar (3.01)", - "nascar_340", "Nascar (3.40)", - "nascar_350", "Nascar (3.50)", - "nascar_352", "Nascar (3.52)", - "nascar_400", "Nascar (4.00)", - "nascarl", "Nascar (4.50 Spain)", - "nascarl_301", "Nascar (3.01 Spain)", - "nascarl_340", "Nascar (3.40 Spain)", - "nascarl_350", "Nascar (3.50 Spain)", - "nascarl_352", "Nascar (3.52 Spain)", - "nascarl_400", "Nascar (4.00 Spain)", - "nastar", "Nastar (World)", - "nastarw", "Nastar Warrior (US)", - "natodef", "NATO Defense", - "natodefa", "NATO Defense (alternate mazes)", - "natsuiro", "Natsuiro Mahjong (Japan)", - "naughtyb", "Naughty Boy", - "naughtyba", "Naughty Boy (bootleg)", - "naughtybc", "Naughty Boy (Cinematronics)", - "navarone", "Navarone", - "nbaf_11", "NBA Fastbreak (1.1)", - "nbaf_115", "NBA Fastbreak (1.15)", - "nbaf_11a", "NBA Fastbreak (1.1 - S2.0)", - "nbaf_11s", "NBA Fastbreak (1.1 - S0.4)", - "nbaf_21", "NBA Fastbreak (2.1)", - "nbaf_22", "NBA Fastbreak (2.2)", - "nbaf_23", "NBA Fastbreak (2.3)", - "nbaf_31", "NBA Fastbreak (3.1 - S3.0)", - "nbaf_31a", "NBA Fastbreak (3.1 - S1.0)", - "nbahangt", "NBA Hangtime (rev L1.1 04/16/96)", - "nbajam", "NBA Jam (rev 3.01 04/07/93)", - "nbajamex", "NBA Jam Extreme", - "nbajamr2", "NBA Jam (rev 2.00 02/10/93)", - "nbajamte", "NBA Jam TE (rev 4.0 03/23/94)", - "nbajamte1", "NBA Jam TE (rev 1.0 01/17/94)", - "nbajamte2", "NBA Jam TE (rev 2.0 01/28/94)", - "nbajamte3", "NBA Jam TE (rev 3.0 03/04/94)", - "nbajamten", "NBA Jam T.E. Nani Edition (rev 5.2 8/11/95, prototype)", - "nbamht", "NBA Maximum Hangtime (rev 1.03 06/09/97)", - "nbamht1", "NBA Maximum Hangtime (rev 1.0 11/08/96)", - "nbanfl", "NBA Showtime / NFL Blitz 2000", - "nbapbp", "NBA Play By Play", - "nbashowt", "NBA Showtime: NBA on NBC", - "nbbatman", "Ninja Baseball Bat Man (World)", - "nbbatman2bl", "Ninja Baseball Bat Man II (bootleg)", - "nbbatmanu", "Ninja Baseball Bat Man (US)", - "nc96", "New Cherry '96 Special Edition (v3.63, C1 PCB)", - "nc96a", "New Cherry '96 Special Edition (v3.62, C1 PCB)", - "nc96b", "New Cherry '96 Special Edition (v3.54, D PCB)", - "nc96c", "New Cherry '96 Special Edition (v3.62, DK PCB)", - "nc96txt", "New Cherry '96 Special Edition (v1.32 Texas XT, C2 PCB)", - "ncb3", "Cherry Bonus III (ver.1.40, set 1)", - "nclubv3", "Name Club Ver.3 (J 970723 V1.000)", - "ncombat", "Ninja Combat (NGM-009)", - "ncombath", "Ninja Combat (NGH-009)", - "ncommand", "Ninja Commando", - "ncv1", "Namco Classic Collection Vol.1", - "ncv1j", "Namco Classic Collection Vol.1 (Japan, v1.00)", - "ncv1j2", "Namco Classic Collection Vol.1 (Japan, v1.03)", - "ncv2", "Namco Classic Collection Vol.2", - "ncv2j", "Namco Classic Collection Vol.2 (Japan)", - "ndcfboxa", "Naomi DIMM Firmware Update for CF-BOX (Rev A) (GDS-0042A)", - "ndxron10", "Royal on Ten (Noraut Deluxe hack)", - "nebulray", "Nebulas Ray (World, NR2)", - "nebulrayj", "Nebulas Ray (Japan, NR1)", - "neckneck", "Neck-n-Neck (v1.2)", - "nekkyoku", "Rettou Juudan Nekkyoku Janshi - Higashi Nippon Hen (Japan)", - "nemesis", "Nemesis (ROM version)", - "nemesisp", "Nemesis", - "nemesisuk", "Nemesis (World?, ROM version)", - "nemo", "Nemo (World 901130)", - "nemoj", "Nemo (Japan 901120)", - "neobattl", "SD Gundam Neo Battling (Japan)", - "neobombe", "Neo Bomberman", - "neocup98", "Neo-Geo Cup '98 - The Road to the Victory", - "neodrift", "Neo Drift Out - New Technology", - "neogeo", "Neo-Geo", - "neomrdo", "Neo Mr. Do!", - "neptunp2", "Neptune's Pearls 2", - "neruton", "Mahjong Neruton Haikujiradan (Japan, Rev. B?)", - "nerutona", "Mahjong Neruton Haikujiradan (Japan, Rev. A?)", - "netchu02", "Netchuu Pro Yakyuu 2002 (NPY1 Ver. A)", - "netmerc", "NetMerc?", - "nettoqc", "Nettoh Quiz Champion (Japan)", - "netwars", "Net Wars", - "nevada", "VLC Nevada", - "newapunk", "New Atomic Punk - Global Quest (US)", - "newdixie", "New Dixieland (Bingo)", - "newfant", "New Fantasia (1995 copyright)", - "newfanta", "New Fantasia (1994 copyright)", - "newhilop", "New Hi-Low Poker", - "newmcard", "New Magic Card", - "newpuc2", "Newpuc2 (set 1)", - "newpuc2b", "Newpuc2 (set 2)", - "newpuckx", "New Puck-X", - "news", "News (set 1)", - "newsa", "News (set 2)", - "newsin7", "New Sinbad 7", - "newtangl", "New Tropical Angel", - "newwave", "New Wave", - "nextfase", "Next Fase (bootleg of Phoenix)", - "nf_20", "No Fear: Dangerous Sports (2.0)", - "nf_22", "No Fear: Dangerous Sports (2.2)", - "nf_23", "No Fear: Dangerous Sports (2.3)", - "nf_23f", "No Fear: Dangerous Sports (2.3F)", - "nf_23x", "No Fear: Dangerous Sports (2.3X)", - "nfb96", "New Fruit Bonus '96 Special Edition (v3.63, C1 PCB)", - "nfb96a", "New Fruit Bonus '96 Special Edition (v3.62, C1 PCB)", - "nfb96b", "New Fruit Bonus '96 Special Edition (v3.54, D PCB)", - "nfb96c", "New Fruit Bonus '96 Special Edition (v3.62, DK PCB)", - "nfb96se", "New Fruit Bonus '96 Special Edition (bootleg, set 1)", - "nfb96sea", "New Fruit Bonus '96 Special Edition (bootleg, set 2)", - "nfb96seb", "New Fruit Bonus '96 Special Edition (bootleg, set 3)", - "nfb96txt", "New Fruit Bonus '96 Special Edition (v1.22 Texas XT, C2 PCB)", - "nfl", "NFL", - "nflclsfb", "NFL Classic Football (US, NCF3 Ver.A.)", - "nflfoot", "NFL Football", - "nfm", "New Fruit Machine (Ming-Yang Electronic)", - "nfsug", "Need For Speed: Underground Install (2 Discs) (v1.1)", - "ngalsumr", "Night Gal Summer", - "ngbc", "Neo-Geo Battle Coliseum", - "ngdup23a", "Naomi DIMM Firmware Updater (Rev A) (GDS-0023A)", - "ngdup23c", "Naomi DIMM Firmware Updater (Rev C) (GDS-0023C)", - "ngdup23e", "Naomi DIMM Firmware Updater (Rev E) (GDS-0023E)", - "ngg_10", "No Good Gofers (1.0)", - "ngg_13", "No Good Gofers (1.3)", - "ngg_p06", "No Good Gofers (p0.6)", - "ngndshkr", "Nitro Ground Shaker", - "ngold", "Jack Potten's Poker (NGold, set 1)", - "ngolda", "Jack Potten's Poker (NGold, set 2)", - "ngoldb", "Jack Potten's Poker (NGold, set 3)", - "ngpgal", "Nekketsu Grand-Prix Gal (Japan)", - "ngtbunny", "Night Bunny (Japan 840601 MRN 2-10)", - "nhidctch", "New Hidden Catch (World) / New Tul Lin Gu Lim Chat Ki '98 (Korea) (pcb ver 3.02)", - "nibbler", "Nibbler (rev 9)", - "nibbler6", "Nibbler (rev 6)", - "nibbler8", "Nibbler (rev 8)", - "nibblero", "Nibbler (Olympia - rev 8)", - "nibblerp", "Nibbler (Pioneer Balloon conversion)", - "nightgal", "Night Gal (Japan 840920 AG 1-00)", - "nightlov", "Night Love (Japan 860705)", - "nightr20", "Night Rider (rev. 20)", - "nightrai", "Night Raid (V2.03J)", - "nightrdr", "Night Rider (rev. 21)", - "nightstr", "Night Striker (World)", - "nightstrj", "Night Striker (Japan)", - "nightstru", "Night Striker (US)", - "ninclown", "Ninja Clowns (08/27/91)", - "nineball", "Nine Ball", - "ninja", "Ninja (315-5102)", - "ninjak", "The Ninja Kids (World)", - "ninjakd2", "Ninja-Kid II / NinjaKun Ashura no Shou (set 1)", - "ninjakd2a", "Ninja-Kid II / NinjaKun Ashura no Shou (set 2, bootleg?)", - "ninjakd2b", "Ninja-Kid II / NinjaKun Ashura no Shou (set 3, bootleg?)", - "ninjakj", "The Ninja Kids (Japan)", - "ninjaku", "The Ninja Kids (US)", - "ninjakun", "Ninjakun Majou no Bouken", - "ninjamas", "Ninja Master's - haoh-ninpo-cho", - "ninjaslt", "Ninja Assault (NJA3 Ver. A)", - "ninjaslt1", "Ninja Assault (NJA1 Ver. A)", - "ninjaslt2", "Ninja Assault (NJA2 Ver. A)", - "ninjaslt4", "Ninja Assault (NJA4 Ver. A)", - "ninjaw", "The Ninja Warriors (World)", - "ninjawj", "The Ninja Warriors (Japan)", - "ninjawu", "The Ninja Warriors (US)", - "ninjemak", "Ninja Emaki (US)", - "nitd", "Nightmare in the Dark", - "nitdbl", "Nightmare in the Dark (bootleg)", - "nitedrvr", "Night Driver", - "nitrobal", "Nitro Ball (US)", - "niyanpai", "Niyanpai (Japan)", - "nkdodge", "Nekketsu Koukou Dodgeball Bu (Japan)", - "nkdodgeb", "Nekketsu Koukou Dodgeball Bu (Japan, bootleg)", - "nkishusp", "Mahjong Nenrikishu SP (Japan, V250J)", - "nmaster", "Oni - The Ninja Master (Japan)", - "nmg5", "Multi 5 / New Multi Game 5 (set 1)", - "nmg5a", "Multi 5 / New Multi Game 5 (set 2)", - "nmg5e", "Multi 5 / New Multi Game 5 (set 3, earlier)", - "nmouse", "Naughty Mouse (set 1)", - "nmouseb", "Naughty Mouse (set 2)", - "nmoves", "Night Moves", - "nmsengen", "Nekketsu Mahjong Sengen! AFTER 5 (Japan)", - "nndmseal", "Nandemo Seal Iinkai", - "nndmseala", "Nandemo Seal Iinkai (Astro Boy ver.)", - "noahsark", "Noah's Ark", - "nob", "Noboranka (Japan)", - "nobb", "Noboranka (Japan, bootleg)", - "nomnlnd", "No Man's Land", - "nomnlndg", "No Man's Land (Gottlieb)", - "noraut3a", "Noraut Joker Poker (V3.010a)", - "noraut3b", "Noraut Joker Poker (V3.011a)", - "norautdx", "Noraut Deluxe Poker (console)", - "norautjo", "Noraut Joker Poker (original)", - "norautjp", "Noraut Joker Poker (alt)", - "norautp", "Noraut Poker", - "norautpl", "Noraut Joker Poker (Prologic HW)", - "norautpn", "Noraut Deluxe Poker (bootleg)", - "norautra", "Noraut Red Hot Joker Poker (alt HW)", - "norautrh", "Noraut Red Hot Joker Poker", - "norautu", "Noraut Poker (NTX10A)", - "norautua", "Noraut unknown set 1 (console)", - "norautub", "Noraut unknown set 2 (console)", - "nost", "Nostradamus", - "nostj", "Nostradamus (Japan)", - "nostk", "Nostradamus (Korea)", - "nouryoku", "Nouryoku Koujou Iinkai", - "nouryokup", "Nouryoku Koujou Iinkai (prototype)", - "nova2001", "Nova 2001 (Japan)", - "nova2001u", "Nova 2001 (US)", - "novoplay", "Novo Play Multi Card / Club Card", - "npcartv1", "Neo Print V1 (World)", - "nprinces", "Ninja Princess (315-5051, 64k Ver. bootleg?)", - "nprincesb", "Ninja Princess (315-5051?, 128k Ver. bootleg?)", - "nprinceso", "Ninja Princess (315-5098, 128k Ver.)", - "nprincesu", "Ninja Princess (64k Ver. not encrypted)", - "nprsp", "NeopriSP Retro Collection (Japan)", - "nrallyx", "New Rally X", - "nrallyxb", "New Rally X (bootleg?)", - "nratechu", "Neratte Chu", - "ns8lines", "New Lucky 8 Lines / New Super 8 Lines (W-4)", - "ns8linew", "New Lucky 8 Lines / New Super 8 Lines (F-5, Witch Bonus)", - "nslasher", "Night Slashers (Korea Rev 1.3)", - "nslasherj", "Night Slashers (Japan Rev 1.2)", - "nslashers", "Night Slashers (Over Sea Rev 1.2)", - "nslasheru", "Night Slashers (US Rev 1.2, HuC6280 Sound CPU)", - "nsmpoker", "NSM Poker (TMS9995)", - "nspirit", "Ninja Spirit", - "nspiritj", "Saigo no Nindou (Japan)", - "nss", "Nintendo Super System BIOS", - "nss_actr", "Act Raiser (Nintendo Super System)", - "nss_adam", "The Addams Family (Nintendo Super System)", - "nss_aten", "David Crane's Amazing Tennis (Nintendo Super System)", - "nss_con3", "Contra 3: The Alien Wars (Nintendo Super System)", - "nss_fzer", "F-Zero (Nintendo Super System)", - "nss_lwep", "Lethal Weapon (Nintendo Super System)", - "nss_ncaa", "NCAA Basketball (Nintendo Super System)", - "nss_rob3", "Robocop 3 (Nintendo Super System)", - "nss_skin", "Skins Game (Nintendo Super System)", - "nss_smw", "Super Mario World (Nintendo Super System)", - "nss_ssoc", "Super Soccer (Nintendo Super System)", - "nss_sten", "Super Tennis (Nintendo Super System)", - "nstocker", "Night Stocker (10/6/86)", - "nstocker2", "Night Stocker (8/27/86)", - "nstrphnx", "New Star's Phoenix (Italian speech)", - "nsub", "N-Sub (upright)", - "ntcash", "NtCash", - "ntopstar", "Mahjong Nerae! Top Star (Japan)", - "nudgeit", "Nudge-It", - "nugent", "Nugent", - "numanath", "Numan Athletics (World)", - "numanathj", "Numan Athletics (Japan)", - "number1", "Number One", - "number10", "Number Dieci (Poker)", - "numbr10l", "Number Dieci (Lattine)", - "nunchaku", "Nunchackun", - "nwarr", "Night Warriors: Darkstalkers' Revenge (Euro 950316)", - "nwarra", "Night Warriors: Darkstalkers' Revenge (Asia 950302)", - "nwarrb", "Night Warriors: Darkstalkers' Revenge (Brazil 950403)", - "nwarrh", "Night Warriors: Darkstalkers' Revenge (Hispanic 950403)", - "nwarru", "Night Warriors: Darkstalkers' Revenge (USA 950406)", - "nwarrud", "Night Warriors: Darkstalkers' Revenge (USA 950406 Phoenix Edition) (bootleg)", - "nyanpani", "Nyan Nyan Panic (Japan)", - "nycaptor", "N.Y. Captor", - "nyjoker", "New York Joker", - "nyny", "New York! New York!", - "nynyg", "New York! New York! (Gottlieb)", - "nzeroteam", "New Zero Team", - "obaoba", "Oba-Oba", - "obaoba1", "Oba-Oba (alternate set)", - "oceanhun", "The Ocean Hunter", - "odeontw2", "Odeon Twister 2 (v202.19)", - "odin", "Odin", - "odin_dlx", "Odin De Luxe", - "odisea", "Odisea Paris-Dakar", - "oedfight", "Oedo Fight (Japan Bloodshed Ver.)", - "officeye", "Office Yeo In Cheon Ha (version 1.2)", - "offroad", "Ironman Ivan Stewart's Super Off-Road", - "offroadc", "Off Road Challenge (v1.63)", - "offroadc1", "Off Road Challenge (v1.10)", - "offroadc3", "Off Road Challenge (v1.30)", - "offroadc4", "Off Road Challenge (v1.40)", - "offroadc5", "Off Road Challenge (v1.50)", - "offroadt", "Ironman Ivan Stewart's Super Off-Road Track-Pak", - "offroadt2p", "Ironman Ivan Stewart's Super Off-Road Track-Pak (2 Players)", - "offrthnd", "Offroad Thunder", - "offtwall", "Off the Wall (2/3-player upright)", - "offtwallc", "Off the Wall (2-player cocktail)", - "ogonsiro", "Ougon no Shiro (Japan)", - "ohbakyuun", "Oh! Bakyuuun (Japan, OB1/VER.A)", - "ohmygod", "Oh My God! (Japan)", - "ohpaipee", "Oh! Paipee (Japan 890227)", - "oigas", "Oigas (bootleg)", - "oinori", "Oinori-daimyoujin Matsuri", - "oisipuzl", "Oishii Puzzle Ha Irimasenka", - "ojanko2", "Ojanko Yakata 2bankan (Japan)", - "ojankoc", "Ojanko Club (Japan)", - "ojankohs", "Ojanko High School (Japan)", - "ojankoy", "Ojanko Yakata (Japan)", - "ojousan", "Ojousan (Japan 871204)", - "ojousanm", "Ojousan [BET] (Japan 870108)", - "olds", "Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 101, Korean Board)", - "olds100", "Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 100, set 1)", - "olds100a", "Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 100, set 2)", - "olds103t", "Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 103, China, Tencent) (unprotected)", - "oldsplus", "Oriental Legend Special Plus / Xi You Shi E Zhuan Super Plus", - "olibochu", "Oli-Boo-Chu", - "oligam", "Olympian Games (Russia)", - "ollie", "Ollie King (GDX-0007)", - "olympic", "Olympic Games", - "olympus", "Olympus", - "olysoc92", "Olympic Soccer '92 (set 1)", - "olysoc92a", "Olympic Soccer '92 (set 2)", - "omega", "Omega", - "omegaf", "Omega Fighter", - "omegafs", "Omega Fighter Special", - "omegrace", "Omega Race (set 1)", - "omegrace2", "Omega Race (set 2)", - "omni", "Omni", - "omni_l1", "Omni (Shuffle) (L-1)", - "omotesnd", "Omotesandou (Japan 890215)", - "oneshot", "One Shot One Kill", - "onetwo", "One + Two", - "onetwoe", "One + Two (earlier)", - "onna34ro", "Onna Sansirou - Typhoon Gal (set 1)", - "onna34roa", "Onna Sansirou - Typhoon Gal (set 2)", - "opaopa", "Opa Opa (MC-8123, 317-0042)", - "opengolf", "Konami's Open Golf Championship (ver EAE)", - "opengolf2", "Konami's Open Golf Championship (ver EAD)", - "openice", "2 On 2 Open Ice Challenge (rev 1.21)", - "openmj", "Open Mahjong [BET] (Japan)", - "opthund", "Operation: Thunder", - "optiger", "Operation Tiger", - "opwolf", "Operation Wolf (World, set 1)", - "opwolf3", "Operation Wolf 3 (World)", - "opwolf3u", "Operation Wolf 3 (US)", - "opwolfa", "Operation Wolf (World, set 2)", - "opwolfb", "Operation Bear (bootleg of Operation Wolf)", - "opwolfj", "Operation Wolf (Japan)", - "opwolfu", "Operation Wolf (US)", - "orangec", "Orange Club - Maruhi Kagai Jugyou (Japan 880213)", - "orangeci", "Orange Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880221)", - "orbatak", "Orbatak (prototype)", - "orbit", "Orbit", - "orbit1", "Orbit 1", - "orbitor1", "Orbitor 1", - "orbitron", "Orbitron", - "orbs", "Orbs (10/7/94 prototype?)", - "ordyne", "Ordyne (Japan, English Version)", - "ordynej", "Ordyne (Japan)", - "orleg2", "Oriental Legend 2 (V104, China)", - "orleg2o", "Oriental Legend 2 (V103, China)", - "orlegend", "Oriental Legend / Xi You Shi E Zhuan (ver. 126)", - "orlegend105k", "Oriental Legend / Xi You Shi E Zhuan (ver. 105, Korean Board)", - "orlegend111c", "Oriental Legend / Xi You Shi E Zhuan (ver. 111, Chinese Board)", - "orlegendc", "Oriental Legend / Xi You Shi E Zhuan (ver. 112, Chinese Board)", - "orlegendca", "Oriental Legend / Xi You Shi E Zhuan (ver. ???, Chinese Board)", - "orlegende", "Oriental Legend / Xi You Shi E Zhuan (ver. 112)", - "orunners", "OutRunners (World)", - "orunnersj", "OutRunners (Japan)", - "orunnersu", "OutRunners (US)", - "oscar", "Psycho-Nics Oscar (World revision 0)", - "oscarj1", "Psycho-Nics Oscar (Japan revision 1)", - "oscarj2", "Psycho-Nics Oscar (Japan revision 2)", - "oscaru", "Psycho-Nics Oscar (US)", - "osman", "Osman (World)", - "otatidai", "Disco Mahjong Otachidai no Okite (Japan)", - "otchart", "Off The Charts (Russia)", - "otenamhf", "Otenami Haiken Final (V2.07JC)", - "otenamih", "Otenami Haiken (V2.04J)", - "otenki", "Otenki Kororin (V2.01J)", - "othello", "Othello (version 3.0)", - "othellos", "Othello Shiyouyo (J 980423 V1.002)", - "othldrby", "Othello Derby (Japan)", - "othunder", "Operation Thunderbolt (World)", - "othunderj", "Operation Thunderbolt (Japan)", - "othunderu", "Operation Thunderbolt (US)", - "othunderuo", "Operation Thunderbolt (US, older)", - "otonano", "Otona no Mahjong (Japan 880628)", - "otrigger", "OutTrigger (JPN, USA, EXP, KOR, AUS)", - "otwalls", "Off the Wall (Sente)", - "outfxies", "The Outfoxies (World, OU2)", - "outfxiesj", "The Outfoxies (Japan, OU1)", - "outlaw", "Outlaw [TTL]", - "outline", "Outline", - "outr2", "Out Run 2 (Rev A) (GDX-0004A)", - "outr2st", "Out Run 2 Special Tours (Rev A) (GDX-0014A)", - "outrun", "Out Run (sitdown/upright, Rev B)", - "outrunb", "Out Run (bootleg)", - "outrundx", "Out Run (deluxe sitdown)", - "outrundxa", "Out Run (deluxe sitdown earlier version)", - "outrundxj", "Out Run (Japan, deluxe sitdown, FD1089A 317-0019)", - "outrunra", "Out Run (sitdown/upright, Rev A)", - "outzone", "Out Zone", - "outzonea", "Out Zone (old set)", - "outzoneb", "Out Zone (older set)", - "outzonec", "Out Zone (oldest set)", - "outzoneh", "Out Zone (harder)", - "overdriv", "Over Drive", - "overrev", "Over Rev (Model 2C, Revision A)", - "overrevb", "Over Rev (Model 2B, Revision B)", - "overtop", "Over Top", - "ozmawars", "Ozma Wars (set 1)", - "ozmawars2", "Ozma Wars (set 2)", - "ozon1", "Ozon I", - "p47", "P-47 - The Phantom Fighter (World)", - "p47aces", "P-47 Aces", - "p47j", "P-47 - The Freedom Fighter (Japan)", - "p47je", "P-47 - The Freedom Fighter (Japan, Export)", - "p911", "Police 911 (ver UAD)", - "p9112", "Police 911 2 (ver A)", - "p911e", "Police 24/7 (ver EAA)", - "p911j", "Keisatsukan Shinjuku 24ji (ver JAC)", - "p911kc", "Police 911 (ver KAC)", - "p911uc", "Police 911 (ver UAC)", - "pacapp", "Paca Paca Passion (Japan, PPP1/VER.A2)", - "pacapp2", "Paca Paca Passion 2 (Japan, PKS1/VER.A)", - "pacappsp", "Paca Paca Passion Special (Japan, PSP1/VER.A)", - "pacgal", "Pac-Gal", - "pacheart", "Pac-Man (Hearts)", - "pachifev", "Pachifever", - "pachiten", "Medal Mahjong Pachi-Slot Tengoku [BET] (Japan)", - "pacland", "Pac-Land (World)", - "paclandj", "Pac-Land (Japan new)", - "paclandjo", "Pac-Land (Japan old)", - "paclandjo2", "Pac-Land (Japan older)", - "paclandm", "Pac-Land (Midway)", - "paclandp", "Pac-Land (United Amusements PC Engine)", - "pacman", "Pac-Man (Midway)", - "pacmanbl", "Pac-Man (Galaxian hardware, set 1)", - "pacmanbla", "Pac-Man (Galaxian hardware, set 2)", - "pacmanf", "Pac-Man (Midway, speedup hack)", - "pacmania", "Pac-Mania", - "pacmaniaj", "Pac-Mania (Japan)", - "pacmansp", "Puck Man (Spanish, 'Made in Greece' bootleg)", - "pacmod", "Pac-Man (Midway, harder)", - "pacnchmp", "Pac-Man & Chomp Chomp", - "pacnpal", "Pac & Pal", - "pacnpal2", "Pac & Pal (older)", - "pacominv", "Pacom Invader", - "pacplus", "Pac-Man Plus", - "pacslot", "Pac-Slot", - "pacuman", "Pacu-Man (Spanish bootleg of Puck Man)", - "paddle2", "Paddle 2 (bootleg on Block hardware)", - "paddlema", "Paddle Mania", - "paintlad", "Painted Lady (Splash) (Ver. 1.3 US)", - "paintrlr", "Paint Roller (bootleg of Crush Roller)", - "pairlove", "Pairs Love", - "pairs", "Pairs (V1.2, 09/30/94)", - "pairsa", "Pairs (09/07/94)", - "pairsnb", "Pairs (Nichibutsu) (Japan 890822)", - "pairsred", "Pairs Redemption (V1.0, 10/25/94)", - "pairsten", "Pairs (System Ten) (Japan 890826)", - "pajaroes", "Pajaro del Espacio (Spanish bootleg of UniWar S)", - "palamed", "Palamedes (Japan)", - "pandoras", "Pandora's Palace", - "pang", "Pang (World)", - "pang3", "Pang! 3 (Euro 950601)", - "pang3b", "Pang! 3 (bootleg)", - "pang3j", "Pang! 3: Kaitou Tachi no Karei na Gogo (Japan 950511)", - "pang3r1", "Pang! 3 (Euro 950511)", - "pangb", "Pang (bootleg, set 1)", - "pangb2", "Pang (bootleg, set 4)", - "pangba", "Pang (bootleg, set 3)", - "pangbold", "Pang (bootleg, set 2)", - "pangofun", "Pango Fun (Italy)", - "pangpang", "Pang Pang", - "pangpoms", "Pang Pom's", - "pangpomsm", "Pang Pom's (Mitchell)", - "panic", "Space Panic (version E)", - "panic2", "Space Panic (set 2)", - "panic3", "Space Panic (set 3)", - "panicbom", "Panic Bomber", - "panicger", "Space Panic (German)", - "panich", "Space Panic (harder)", - "panicprk", "Panic Park (PNP2 Ver. A)", - "panicprkj", "Panic Park (PNP1 Ver. B)", - "panicr", "Panic Road (Japan)", - "panicrg", "Panic Road (Germany)", - "panicstr", "Panic Street (Japan)", - "panikuru", "Panicuru Panekuru (Japan, PPA1 Ver.A)", - "panther", "Panther", - "panthera", "Panthera", - "panzer", "Panzer (bootleg of Spectar)", - "paperboy", "Paperboy (rev 3)", - "paperboyr1", "Paperboy (rev 1)", - "paperboyr2", "Paperboy (rev 2)", - "papillon", "Papillon", - "paprazzi", "Paparazzi", - "para2dx", "Paradise 2 Deluxe", - "paradice", "Paradice (Dutch, Game Card 95-750-615)", - "paradise", "Paradise", - "paradlx", "Paradise Deluxe", - "paragon", "Paragon", - "paranoia", "Paranoia", - "parentj", "Parent Jack", - "parodius", "Parodius DA! (World, set 1)", - "parodiusa", "Parodius DA! (Asia)", - "parodiuse", "Parodius DA! (World, set 2)", - "parodiusj", "Parodius DA! (Japan)", - "parrot3", "Parrot Poker III (Version 2.6E Dual)", - "parrot3b1", "Parrot Poker III (Version 2.6R, set 1)", - "parrot3d1", "Parrot Poker III (Version 2.6R, set 2)", - "parrot3o", "Parrot Poker III (Version 2.4)", - "parrot3v1", "Parrot Poker III (Version 2.6R Dual)", - "party", "Party", - "pasha2", "Pasha Pasha 2", - "pass", "Pass", - "passht4b", "Passing Shot (4 Players) (bootleg)", - "passsht", "Passing Shot (World, 2 Players, FD1094 317-0080)", - "passsht16a", "Passing Shot (Japan, 4 Players, System 16A, FD1094 317-0071)", - "passshta", "Passing Shot (World, 4 Players, FD1094 317-0074)", - "passshtb", "Passing Shot (2 Players) (bootleg)", - "passshtj", "Passing Shot (Japan, 4 Players, FD1094 317-0070)", - "pastelg", "Pastel Gal (Japan 851224)", - "patimono", "Mahjong Pachinko Monogatari (Japan)", - "pb_l2", "Pin-Bot (L-2)", - "pb_l3", "Pin-Bot (L-3)", - "pb_l5", "Pin-Bot (L-5)", - "pbaction", "Pinball Action (set 1)", - "pbaction2", "Pinball Action (set 2)", - "pbaction3", "Pinball Action (set 3, encrypted)", - "pbaction4", "Pinball Action (set 4, encrypted)", - "pbaction5", "Pinball Action (set 5, encrypted)", - "pballoon", "Pioneer Balloon", - "pballoonr", "Pioneer Balloon (Rock-Ola license)", - "pbancho", "Gyakuten!! Puzzle Bancho (Japan)", - "pbchmp95", "Pinball Champ '95", - "pbillian", "Prebillian", - "pbillrd", "Perfect Billiard", - "pbillrds", "Perfect Billiard (MC-8123, 317-0030)", - "pblbeach", "Pebble Beach - The Great Shot (JUE 950913 V0.990)", - "pbobbl2n", "Puzzle Bobble 2 / Bust-A-Move Again (Neo-Geo)", - "pbobble", "Puzzle Bobble (Japan, B-System)", - "pbobble2", "Puzzle Bobble 2 (Ver 2.3O 1995/07/31)", - "pbobble2j", "Puzzle Bobble 2 (Ver 2.2J 1995/07/20)", - "pbobble2o", "Puzzle Bobble 2 (Ver 2.2O 1995/07/20)", - "pbobble2u", "Bust-A-Move Again (Ver 2.3A 1995/07/31)", - "pbobble2x", "Puzzle Bobble 2X (Ver 2.2J 1995/11/11)", - "pbobble3", "Puzzle Bobble 3 (Ver 2.1O 1996/09/27)", - "pbobble3j", "Puzzle Bobble 3 (Ver 2.1J 1996/09/27)", - "pbobble3u", "Puzzle Bobble 3 (Ver 2.1A 1996/09/27)", - "pbobble4", "Puzzle Bobble 4 (Ver 2.04O 1997/12/19)", - "pbobble4j", "Puzzle Bobble 4 (Ver 2.04J 1997/12/19)", - "pbobble4u", "Puzzle Bobble 4 (Ver 2.04A 1997/12/19)", - "pbobblen", "Puzzle Bobble / Bust-A-Move (Neo-Geo) (NGM-083)", - "pbobblenb", "Puzzle Bobble / Bust-A-Move (Neo-Geo) (bootleg)", - "pbss330", "Pit Boss Superstar III 30 (9233-00-01)", - "pbst30", "Pit Boss Supertouch 30 (9234-10-01)", - "pbst30b", "Pit Boss Supertouch 30 (9234-00-01)", - "pc_1942", "1942 (PlayChoice-10)", - "pc_bball", "Baseball (PlayChoice-10)", - "pc_bfght", "Balloon Fight (PlayChoice-10)", - "pc_bload", "Bases Loaded (Prototype, PlayChoice-10)", - "pc_bstar", "Baseball Stars: Be a Champ! (PlayChoice-10)", - "pc_cntra", "Contra (PlayChoice-10)", - "pc_cshwk", "Captain Sky Hawk (PlayChoice-10)", - "pc_cvnia", "Castlevania (PlayChoice-10)", - "pc_dbldr", "Double Dribble (PlayChoice-10)", - "pc_ddrgn", "Double Dragon (PlayChoice-10)", - "pc_drmro", "Dr. Mario (PlayChoice-10)", - "pc_duckh", "Duck Hunt (PlayChoice-10)", - "pc_ebike", "Excite Bike (PlayChoice-10)", - "pc_ftqst", "Uncle Fester's Quest: The Addams Family (PlayChoice-10)", - "pc_gntlt", "Gauntlet (PlayChoice-10)", - "pc_golf", "Golf (PlayChoice-10)", - "pc_goons", "The Goonies (PlayChoice-10)", - "pc_grdue", "Gradius (PlayChoice-10, older)", - "pc_grdus", "Gradius (PlayChoice-10)", - "pc_hgaly", "Hogan's Alley (PlayChoice-10)", - "pc_kngfu", "Kung Fu (PlayChoice-10)", - "pc_mario", "Mario Bros. (PlayChoice-10)", - "pc_miket", "Mike Tyson's Punch-Out!! (PlayChoice-10)", - "pc_mman3", "Mega Man III (PlayChoice-10)", - "pc_moglf", "Mario's Open Golf (PlayChoice-10)", - "pc_mtoid", "Metroid (PlayChoice-10)", - "pc_ngai2", "Ninja Gaiden Episode II: The Dark Sword of Chaos (PlayChoice-10)", - "pc_ngai3", "Ninja Gaiden Episode III: The Ancient Ship of Doom (PlayChoice-10)", - "pc_ngaid", "Ninja Gaiden (PlayChoice-10)", - "pc_pinbt", "PinBot (PlayChoice-10)", - "pc_pwbld", "Power Blade (PlayChoice-10)", - "pc_pwrst", "Pro Wrestling (PlayChoice-10)", - "pc_radr2", "Rad Racer II (PlayChoice-10)", - "pc_radrc", "Rad Racer (PlayChoice-10)", - "pc_rcpam", "R.C. Pro-Am (PlayChoice-10)", - "pc_rkats", "Rockin' Kats (PlayChoice-10)", - "pc_rnatk", "Rush'n Attack (PlayChoice-10)", - "pc_rrngr", "Chip'n Dale: Rescue Rangers (PlayChoice-10)", - "pc_rygar", "Rygar (PlayChoice-10)", - "pc_sjetm", "Solar Jetman (PlayChoice-10)", - "pc_smb", "Super Mario Bros. (PlayChoice-10)", - "pc_smb2", "Super Mario Bros. 2 (PlayChoice-10)", - "pc_smb3", "Super Mario Bros. 3 (PlayChoice-10)", - "pc_suprc", "Super C (PlayChoice-10)", - "pc_tbowl", "Tecmo Bowl (PlayChoice-10)", - "pc_tenis", "Tennis (PlayChoice-10)", - "pc_tkfld", "Track & Field (PlayChoice-10)", - "pc_tmnt", "Teenage Mutant Ninja Turtles (PlayChoice-10)", - "pc_tmnt2", "Teenage Mutant Ninja Turtles II: The Arcade Game (PlayChoice-10)", - "pc_trjan", "Trojan (PlayChoice-10)", - "pc_vball", "Volley Ball (PlayChoice-10)", - "pc_virus", "Virus (Dr. Mario prototype, PlayChoice-10)", - "pc_wcup", "Nintendo World Cup (PlayChoice-10)", - "pc_wgnmn", "Wild Gunman (PlayChoice-10)", - "pc_ynoid", "Yo! Noid (PlayChoice-10)", - "pcktgal", "Pocket Gal (Japan)", - "pcktgal2", "Pocket Gal 2 (English)", - "pcktgal2j", "Pocket Gal 2 (Japanese)", - "pcktgalb", "Pocket Gal (bootleg)", - "pclb297w", "Print Club 2 '97 Winter Ver (J 971017 V1.100)", - "pclb298a", "Print Club 2 '98 Autumn Ver (J 980827 V1.000)", - "pclb2elk", "Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000)", - "pclub2", "Print Club 2 (U 970921 V1.000)", - "pclub298", "Print Club 2 '98 Spring Ver (J 971017 V1.100)", - "pclub2fc", "Print Club 2 Felix The Cat (Rev. A) (J 970415 V1.100)", - "pclub2kc", "Print Club Kome Kome Club (J 970203 V1.000)", - "pclub2v3", "Print Club 2 Vol. 3 (U 990310 V1.000)", - "pclubj", "Print Club (Japan Vol.1)", - "pclubjv2", "Print Club (Japan Vol.2)", - "pclubjv4", "Print Club (Japan Vol.4)", - "pclubjv5", "Print Club (Japan Vol.5)", - "pclubol", "Print Club Olive (J 980717 V1.000)", - "pclubor", "Print Club Goukakenran (J 991104 V1.000)", - "pclubpok", "Print Club Pokemon B (U 991126 V1.000)", - "pclubys", "Puzzle Club (Yun Sung, set 1)", - "pclubysa", "Puzzle Club (Yun Sung, set 2)", - "pcnfrk3m", "Percussion Freaks 3rd Mix (G*A23 VER. KAA)", - "pdrift", "Power Drift (World, Rev A)", - "pdrifta", "Power Drift (World)", - "pdrifte", "Power Drift (World, Earlier)", - "pdriftj", "Power Drift (Japan)", - "pebe0014", "Player's Edge Plus (BE0014) Blackjack", - "pecmen", "Mr. & Mrs. Pec-Men", - "peekaboo", "Peek-a-Boo!", - "peepshow", "Nozokimeguri Mahjong Peep Show (Japan 890404)", - "peggle", "Peggle (Joystick, v1.0)", - "pegglet", "Peggle (Trackball, v1.0)", - "peip0041", "Player's Edge Plus (IP0041) Double Deuces Wild Poker - French", - "peip0074", "Player's Edge Plus (IP0074) Joker Poker - French", - "peip0079", "Player's Edge Plus (IP0079) Standard Draw Poker - French", - "peke1012", "Player's Edge Plus (KE1012) Keno", - "peke1013", "Player's Edge Plus (KE1013) Keno", - "penalty", "Penalty (Bingo)", - "penbros", "Penguin Brothers (Japan)", - "penfan", "Penfan Girls - Step1. Mild Mind (set 1)", - "penfana", "Penfan Girls - Step1. Mild Mind (set 2)", - "pengadvb", "Penguin Adventure (bootleg of MSX version)", - "pengo", "Pengo (set 1 rev c)", - "pengo2", "Pengo (set 2)", - "pengo2u", "Pengo (set 2 not encrypted)", - "pengo3u", "Pengo (set 3 not encrypted)", - "pengo4", "Pengo (set 4)", - "pengob", "Pengo (bootleg)", - "penky", "Penky", - "penta", "Penta", - "pentacup", "Pentacup (rev. 1)", - "pentacup2", "Pentacup (rev. 2)", - "pepp0002", "Player's Edge Plus (PP0002) Standard Draw Poker", - "pepp0002a", "Player's Edge Plus (PP0002) Standard Draw Poker (International)", - "pepp0008", "Player's Edge Plus (PP0008) Standard Draw Poker", - "pepp0010", "Player's Edge Plus (PP0010) Standard Draw Poker", - "pepp0014", "Player's Edge Plus (PP0014) Standard Draw Poker (International)", - "pepp0014a", "Player's Edge Plus (PP0014) Standard Draw Poker", - "pepp0023", "Player's Edge Plus (PP0023) 10's or Better", - "pepp0040", "Player's Edge Plus (PP0040) Standard Draw Poker", - "pepp0041", "Player's Edge Plus (PP0041) Standard Draw Poker", - "pepp0043", "Player's Edge Plus (PP0043) 10's or Better", - "pepp0045", "Player's Edge Plus (PP0045) 10's or Better", - "pepp0046", "Player's Edge Plus (PP0046) 10's or Better", - "pepp0051", "Player's Edge Plus (PP0051) Joker Poker", - "pepp0053", "Player's Edge Plus (PP0053) Joker Poker (Aces or Better)", - "pepp0055", "Player's Edge Plus (PP0055) Deuces Wild Poker (set 1)", - "pepp0055a", "Player's Edge Plus (PP0055) Deuces Wild Poker (set 2)", - "pepp0055b", "Player's Edge Plus (PP0055) Deuces Wild Poker (set 3)", - "pepp0057", "Player's Edge Plus (PP0057) Deuces Wild Poker (set 1)", - "pepp0057a", "Player's Edge Plus (PP0057) Deuces Wild Poker (set 2)", - "pepp0059", "Player's Edge Plus (PP0059) Two Pair or Better (set 1)", - "pepp0059a", "Player's Edge Plus (PP0059) Two Pair or Better (set 2)", - "pepp0060", "Player's Edge Plus (PP0060) Standard Draw Poker (set 1)", - "pepp0060a", "Player's Edge Plus (PP0060) Standard Draw Poker (set 2)", - "pepp0064", "Player's Edge Plus (PP0064) Joker Poker", - "pepp0065", "Player's Edge Plus (PP0065) Joker Poker (Aces or Better)", - "pepp0083", "Player's Edge Plus (PP0083) 10's or Better", - "pepp0103", "Player's Edge Plus (PP0103) Deuces Wild Poker", - "pepp0116", "Player's Edge Plus (PP0116) Standard Draw Poker", - "pepp0118", "Player's Edge Plus (PP0118) Standard Draw Poker", - "pepp0120", "Player's Edge Plus (PP0120) Wild Sevens Poker", - "pepp0125", "Player's Edge Plus (PP0125) Deuces Wild Poker", - "pepp0126", "Player's Edge Plus (PP0126) Deuces Wild Poker", - "pepp0127", "Player's Edge Plus (PP0127) Deuces Joker Wild Poker", - "pepp0158", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 1)", - "pepp0158a", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 2)", - "pepp0158b", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 3)", - "pepp0159", "Player's Edge Plus (PP0159) Standard Draw Poker (International)", - "pepp0171", "Player's Edge Plus (PP0171) Joker Poker", - "pepp0178", "Player's Edge Plus (PP0178) 4 of a Kind Bonus Poker (Operator selectable special 4 of a Kind)", - "pepp0188", "Player's Edge Plus (PP0188) Standard Draw Poker (set 1)", - "pepp0188a", "Player's Edge Plus (PP0188) Standard Draw Poker (set 2)", - "pepp0190", "Player's Edge Plus (PP0190) Deuces Wild Poker", - "pepp0197", "Player's Edge Plus (PP0197) Standard Draw Poker (set 1)", - "pepp0197a", "Player's Edge Plus (PP0197) Standard Draw Poker (set 2)", - "pepp0203", "Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 1)", - "pepp0203a", "Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 2)", - "pepp0203b", "Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 3)", - "pepp0219", "Player's Edge Plus (PP0219) Standard Draw Poker", - "pepp0221", "Player's Edge Plus (PP0221) Standard Draw Poker (set 1)", - "pepp0221a", "Player's Edge Plus (PP0221) Standard Draw Poker (set 2)", - "pepp0224", "Player's Edge Plus (PP0224) Deuces Wild Poker (set 1)", - "pepp0224a", "Player's Edge Plus (PP0224) Deuces Wild Poker (set 2)", - "pepp0230", "Player's Edge Plus (PP0230) Standard Draw Poker", - "pepp0249", "Player's Edge Plus (PP0249) Deuces Wild Poker", - "pepp0250", "Player's Edge Plus (PP0250) Double Down Stud Poker", - "pepp0265", "Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 1)", - "pepp0265a", "Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 2)", - "pepp0274", "Player's Edge Plus (PP0274) Standard Draw Poker", - "pepp0290", "Player's Edge Plus (PP0290) Deuces Wild Poker", - "pepp0291", "Player's Edge Plus (PP0291) Deuces Wild Poker", - "pepp0409", "Player's Edge Plus (PP0409) 4 of a Kind Bonus Poker", - "pepp0410", "Player's Edge Plus (PP0410) 4 of a Kind Bonus Poker", - "pepp0417", "Player's Edge Plus (PP0417) Deuces Wild Poker (set 1)", - "pepp0417a", "Player's Edge Plus (PP0417) Deuces Wild Poker (set 2)", - "pepp0419", "Player's Edge Plus (PP0419) Standard Draw Poker", - "pepp0420", "Player's Edge Plus (PP0420) Standard Draw Poker", - "pepp0423", "Player's Edge Plus (PP0423) Standard Draw Poker", - "pepp0426", "Player's Edge Plus (PP0426) Joker Poker", - "pepp0428", "Player's Edge Plus (PP0428) Joker Poker", - "pepp0429", "Player's Edge Plus (PP0429) Joker Poker (Aces or Better)", - "pepp0434", "Player's Edge Plus (PP0434) Bonus Poker Deluxe", - "pepp0447", "Player's Edge Plus (PP0447) Standard Draw Poker (set 1)", - "pepp0447a", "Player's Edge Plus (PP0447) Standard Draw Poker (set 2)", - "pepp0449", "Player's Edge Plus (PP0449) Standard Draw Poker", - "pepp0452", "Player's Edge Plus (PP0452) Double Deuces Wild Poker", - "pepp0454", "Player's Edge Plus (PP0454) Bonus Poker Deluxe", - "pepp0455", "Player's Edge Plus (PP0455) Joker Poker", - "pepp0458", "Player's Edge Plus (PP0458) Joker Poker (Aces or Better)", - "pepp0488", "Player's Edge Plus (PP0488) Standard Draw Poker (Arizona Charlie's)", - "pepp0508", "Player's Edge Plus (PP0508) Loose Deuce Deuces Wild! Poker", - "pepp0509", "Player's Edge Plus (PP0509) Standard Draw Poker", - "pepp0510", "Player's Edge Plus (PP0510) Standard Draw Poker", - "pepp0514", "Player's Edge Plus (PP0514) Double Bonus Poker (set 1)", - "pepp0514a", "Player's Edge Plus (PP0514) Double Bonus Poker (set 2)", - "pepp0514b", "Player's Edge Plus (PP0514) Double Bonus Poker (set 3)", - "pepp0515", "Player's Edge Plus (PP0515) Double Bonus Poker (set 1)", - "pepp0515a", "Player's Edge Plus (PP0515) Double Bonus Poker (set 2)", - "pepp0516", "Player's Edge Plus (PP0516) Double Bonus Poker (set 1)", - "pepp0516a", "Player's Edge Plus (PP0516) Double Bonus Poker (set 2)", - "pepp0531", "Player's Edge Plus (PP0531) Joker Poker", - "pepp0536", "Player's Edge Plus (PP0536) Joker Poker", - "pepp0538", "Player's Edge Plus (PP0538) Double Bonus Poker", - "pepp0540", "Player's Edge Plus (PP0540) Double Bonus Poker", - "pepp0542", "Player's Edge Plus (PP0542) One Eyed Jacks Wild Poker", - "pepp0568", "Player's Edge Plus (PP0568) Joker Poker", - "pepp0585", "Player's Edge Plus (PP0585) Standard Draw Poker", - "pepp0713", "Player's Edge Plus (PP0713) Bonus Poker Deluxe", - "pepp0725", "Player's Edge Plus (PP0725) Double Bonus Poker (set 1)", - "pepp0725a", "Player's Edge Plus (PP0725) Double Bonus Poker (set 2)", - "pepp0726", "Player's Edge Plus (PP0726) Double Bonus Poker", - "pepp0728", "Player's Edge Plus (PP0728) Double Bonus Poker", - "pepp0760", "Player's Edge Plus (PP0760) Double Down Stud Poker", - "pepp0763", "Player's Edge Plus (PP0763) 4 of a Kind Bonus Poker", - "pepp0775", "Player's Edge Plus (PP0775) Royal Deuces Poker??", - "pepper2", "Pepper II (version 8)", - "pepper27", "Pepper II (version 7)", - "peps0014", "Player's Edge Plus (PS0014) Super Joker Slots", - "peps0021", "Player's Edge Plus (PS0021) Red White & Blue Slots", - "peps0022", "Player's Edge Plus (PS0022) Red White & Blue Slots", - "peps0042", "Player's Edge Plus (PS0042) Double Diamond Slots", - "peps0043", "Player's Edge Plus (PS0043) Double Diamond Slots", - "peps0045", "Player's Edge Plus (PS0045) Red White & Blue Slots", - "peps0047", "Player's Edge Plus (PS0047) Wild Cherry Slots", - "peps0092", "Player's Edge Plus (PS0092) Wild Cherry Slots", - "peps0206", "Player's Edge Plus (PS0206) Red White & Blue Slots", - "peps0207", "Player's Edge Plus (PS0207) Red White & Blue Slots", - "peps0296", "Player's Edge Plus (PS0296) Haywire Slots", - "peps0298", "Player's Edge Plus (PS0298) Double Diamond Slots", - "peps0308", "Player's Edge Plus (PS0308) Double Jackpot Slots", - "peps0364", "Player's Edge Plus (PS0364) Red White & Blue Slots", - "peps0426", "Player's Edge Plus (PS0426) Sizzling Sevens Slots", - "peps0581", "Player's Edge Plus (PS0581) Red White & Blue Slots", - "peps0615", "Player's Edge Plus (PS0615) Chaos Slots", - "peps0631", "Player's Edge Plus (PS0631) Red White & Blue Slots", - "peps0716", "Player's Edge Plus (PS0716) River Gambler Slots", - "pepsiman", "PEPSI Man", - "percuss", "The Percussor", - "perestro", "Perestroika Girls", - "perestrof", "Perestroika Girls (Fuuki license)", - "perfect", "Perfect Game (Russia)", - "perfrman", "Performan (Japan)", - "perfrmanu", "Performan (US)", - "pesadelo", "Pesadelo (bootleg of Knightmare on MSX)", - "peset001", "Player's Edge Plus (Set001) Set Chip", - "peset038", "Player's Edge Plus (Set038) Set Chip", - "pestplce", "Pest Place", - "petaco", "Petaco", - "petaco2", "Petaco 2", - "peterpak", "Peter Pack-Rat", - "pettanp", "Pettan Pyuu (Japan)", - "pex0002p", "Player's Edge Plus (X000002P+XP000038) Standard Draw Poker", - "pex0002pa", "Player's Edge Plus (X000002P+XP000109) Standard Draw Poker", - "pex0040p", "Player's Edge Plus (X000040P+XP000038) Standard Draw Poker", - "pex0045p", "Player's Edge Plus (X000045P+XP000038) 10's or Better", - "pex0046p", "Player's Edge Plus (X000046P+XP000038) 10's or Better", - "pex0053p", "Player's Edge Plus (X000053P+XP000038) Joker Poker (Aces or Better)", - "pex0054p", "Player's Edge Plus (X000054P+XP000038) Deuces Wild Poker", - "pex0055p", "Player's Edge Plus (X000055P+XP000019) Deuces Wild Poker", - "pex0055pa", "Player's Edge Plus (X000055P+XP000022) Deuces Wild Poker (The Orleans)", - "pex0055pb", "Player's Edge Plus (X000055P+XP000023) Deuces Wild Poker", - "pex0055pc", "Player's Edge Plus (X000055P+XP000028) Deuces Wild Poker", - "pex0055pd", "Player's Edge Plus (X000055P+XP000035) Deuces Wild Poker", - "pex0055pe", "Player's Edge Plus (X000055P+XP000038) Deuces Wild Poker", - "pex0055pf", "Player's Edge Plus (X000055P+XP000040) Deuces Wild Poker", - "pex0055pg", "Player's Edge Plus (X000055P+XP000053) Deuces Wild Poker", - "pex0055ph", "Player's Edge Plus (X000055P+XP000055) Deuces Wild Poker", - "pex0055pi", "Player's Edge Plus (X000055P+XP000063) Deuces Wild Poker", - "pex0055pj", "Player's Edge Plus (X000055P+XP000075) Deuces Wild Poker", - "pex0055pk", "Player's Edge Plus (X000055P+XP000079) Deuces Wild Poker", - "pex0055pl", "Player's Edge Plus (X000055P+XP000094) Deuces Wild Poker", - "pex0055pm", "Player's Edge Plus (X000055P+XP000095) Deuces Wild Poker", - "pex0055pn", "Player's Edge Plus (X000055P+XP000098) Deuces Wild Poker", - "pex0055po", "Player's Edge Plus (X000055P+XP000102) Deuces Wild Poker", - "pex0055pp", "Player's Edge Plus (X000055P+XP000104) Deuces Wild Poker", - "pex0055pq", "Player's Edge Plus (X000055P+XP000112) Deuces Wild Poker", - "pex0055pr", "Player's Edge Plus (X000055P+XP000126) Deuces Wild Poker", - "pex0060p", "Player's Edge Plus (X000060P+XP000038) Standard Draw Poker", - "pex0158p", "Player's Edge Plus (X000158P+XP000038) 4 of a Kind Bonus Poker", - "pex0171p", "Player's Edge Plus (X000171P+XP000038) Joker Poker", - "pex0188p", "Player's Edge Plus (X000188P+XP000038) Standard Draw Poker", - "pex0190p", "Player's Edge Plus (X000190P+XP000053) Deuces Wild Poker", - "pex0197p", "Player's Edge Plus (X000197P+XP000038) Standard Draw Poker", - "pex0203p", "Player's Edge Plus (X000203P+XP000038) 4 of a Kind Bonus Poker", - "pex0224p", "Player's Edge Plus (X000224P+XP000053) Deuces Wild Poker", - "pex0225p", "Player's Edge Plus (X000225P+XP000079) Dueces Joker Wild Poker", - "pex0265p", "Player's Edge Plus (X000265P+XP000038) 4 of a Kind Bonus Poker", - "pex0291p", "Player's Edge Plus (X000291P+XP000053) Deuces Wild Poker", - "pex0417p", "Player's Edge Plus (X000417P+XP000053) Deuces Wild Poker", - "pex0430p", "Player's Edge Plus (X000430P+XP000079) Dueces Joker Wild Poker", - "pex0434p", "Player's Edge Plus (X000434P+XP000038) Bonus Poker Deluxe", - "pex0447p", "Player's Edge Plus (X000447P+XP000038) Standard Draw Poker", - "pex0449p", "Player's Edge Plus (X000449P+XP000038) Standard Draw Poker", - "pex0451p", "Player's Edge Plus (X000451P+XP000038) Bonus Poker Deluxe", - "pex0452p", "Player's Edge Plus (X000452P+XP000038) Double Deuces Wild Poker", - "pex0454p", "Player's Edge Plus (X000454P+XP000038) Bonus Poker Deluxe", - "pex0458p", "Player's Edge Plus (X000458P+XP000038) Joker Poker (Aces or Better)", - "pex0459p", "Player's Edge Plus (X000459P+XP000038) Joker Poker", - "pex0459pa", "Player's Edge Plus (X000459P+XP000155) Joker Poker", - "pex0508p", "Player's Edge Plus (X000508P+XP000038) Loose Deuce Deuces Wild! Poker", - "pex0514p", "Player's Edge Plus (X000514P+XP000038) Double Bonus Poker", - "pex0515p", "Player's Edge Plus (X000515P+XP000038) Double Bonus Poker", - "pex0536p", "Player's Edge Plus (X000536P+XP000038) Joker Poker", - "pex0537p", "Player's Edge Plus (X000537P+XP000038) Standard Draw Poker", - "pex0568p", "Player's Edge Plus (X000568P+XP000038) Joker Poker", - "pex0581p", "Player's Edge Plus (X000581P+XP000038) 4 of a Kind Bonus Poker", - "pex0588p", "Player's Edge Plus (X000588P+XP000038) Joker Poker", - "pex0725p", "Player's Edge Plus (X000725P+XP000038) Double Bonus Poker", - "pex0726p", "Player's Edge Plus (X000726P+XP000038) Double Bonus Poker", - "pex0727p", "Player's Edge Plus (X000727P+XP000038) Double Bonus Poker", - "pex0763p", "Player's Edge Plus (X000763P+XP000038) 4 of a Kind Bonus Poker", - "pex0838s", "Player's Edge Plus (X000838S+XS000002) Five Times Pay Slots", - "pex0841s", "Player's Edge Plus (X000841S+XS000002) Five Times Pay Slots", - "pex0998s", "Player's Edge Plus (X000998S+XS000006) Triple Triple Diamond Slots", - "pex1087s", "Player's Edge Plus (X001087S+XS000006) Double Double Diamond Slots", - "pex2018p", "Player's Edge Plus (X002018P+XP000038) Full House Bonus Poker", - "pex2025p", "Player's Edge Plus (X002025P+XP000019) Deuces Wild Bonus Poker", - "pex2026p", "Player's Edge Plus (X002026P+XP000019) Deuces Wild Bonus Poker", - "pex2027p", "Player's Edge Plus (X002027P+XP000019) Deuces Wild Bonus Poker", - "pex2031p", "Player's Edge Plus (X002031P+XP000112) Lucky Deal Poker", - "pex2035p", "Player's Edge Plus (X002035P+XP000112) White Hot Aces Poker", - "pex2036p", "Player's Edge Plus (X002036P+XP000112) White Hot Aces Poker", - "pex2040p", "Player's Edge Plus (X002040P+XP000038) Nevada Bonus Poker", - "pex2042p", "Player's Edge Plus (X002042P+XP000038) Triple Bonus Poker", - "pex2043p", "Player's Edge Plus (X002043P+XP000038) Triple Bonus Poker", - "pex2045p", "Player's Edge Plus (X002045P+XP000038) Triple Bonus Poker", - "pex2066p", "Player's Edge Plus (X002066P+XP000038) Double Double Bonus Poker", - "pex2067p", "Player's Edge Plus (X002067P+XP000038) Double Double Bonus Poker", - "pex2068p", "Player's Edge Plus (X002068P+XP000038) Double Double Bonus Poker", - "pex2069p", "Player's Edge Plus (X002069P+XP000038) Double Double Bonus Poker", - "pex2070p", "Player's Edge Plus (X002070P+XP000038) Double Double Bonus Poker", - "pex2121p", "Player's Edge Plus (X002121P+XP000038) Standard Draw Poker", - "pex2121pa", "Player's Edge Plus (X002121P+XP000037) Standard Draw Poker", - "pex2150p", "Player's Edge Plus (X002150P+XP000038) 4 of a Kind Bonus Poker", - "pex2172p", "Player's Edge Plus (X002172P+XP000112) Ace$ Bonus Poker", - "pex2180p", "Player's Edge Plus (X002180P+XP000038) Double Bonus Poker", - "pex2241p", "Player's Edge Plus (X002241P+XP000079) 4 of a Kind Bonus Poker", - "pex2244p", "Player's Edge Plus (X002244P+XP000079) Double Bonus Poker", - "pex2245p", "Player's Edge Plus (X002245P+XP000055) Standard Draw Poker", - "pex2245pa", "Player's Edge Plus (X002245P+XP000079) Standard Draw Poker", - "pex2250p", "Player's Edge Plus (X002250P+XP000050) Shockwave Poker", - "pex2251p", "Player's Edge Plus (X002251P+XP000050) Shockwave Poker", - "pex2283p", "Player's Edge Plus (X002283P+XP000057) Dealt Deuces Wild Bonus Poker", - "pex2284p", "Player's Edge Plus (X002284P+XP000057) Barbaric Decues Wild Bonus Poker", - "pex2302p", "Player's Edge Plus (X002302P+XP000038) Bonus Poker Deluxe", - "pex2303p", "Player's Edge Plus (X002303P+XP000112) White Hot Aces Poker", - "pex2307p", "Player's Edge Plus (X002307P+XP000112) Triple Double Bonus Poker", - "pex2314p", "Player's Edge Plus (X002314P+XP000112) Triple Bonus Poker Plus", - "pex2374p", "Player's Edge Plus (X002374P+XP000112) Super Aces Poker (Horseshoe)", - "pex2377p", "Player's Edge Plus (X002377P+XP000112) Super Double Bonus Poker", - "pex2420p", "Player's Edge Plus (X002420P+XP000064) Deuces Wild Bonus Poker - French", - "pex2440p", "Player's Edge Plus (X002440P+XP000053) Deuces Wild Poker", - "pex2461p", "Player's Edge Plus (X002461P+XP000055) Joker Poker (Two Pair or Better)", - "pexm001p", "Player's Edge Plus (XM00001P+XMP00003) Multi-Poker", - "pexm002p", "Player's Edge Plus (XM00002P+XMP00006) Multi-Poker", - "pexm003p", "Player's Edge Plus (XM00003P+XMP00024) Multi-Poker", - "pexm004p", "Player's Edge Plus (XM00004P+XMP00002) Multi-Poker", - "pexm005p", "Player's Edge Plus (XM00005P+XMP00004) Multi-Poker", - "pexm006p", "Player's Edge Plus (XM00006P+XMP00006) Multi-Poker", - "pexm007p", "Player's Edge Plus (XM00007P+XMP00006) Multi-Poker", - "pexm008p", "Player's Edge Plus (XM00008P+XMP00006) Multi-Poker", - "pexmp017", "Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2298)", - "pexmp017a", "Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2352)", - "pexmp017b", "Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2426)", - "pexmp030", "Player's Edge Plus (XMP00030) 5-in-1 Wingboard (CG2426)", - "pf2012", "Psychic Force 2012", - "pfevr_l2", "Pennant Fever (L-2)", - "pfevr_p3", "Pennant Fever (P-3)", - "pfghtj", "Pocket Fighter (Japan 970904)", - "pgalvip", "Pocket Gals V.I.P (set 1)", - "pgalvipa", "Pocket Gals V.I.P (set 2)", - "pgear", "Powered Gear: Strategic Variant Armor Equipment (Japan 941024)", - "pgearr1", "Powered Gear: Strategic Variant Armor Equipment (Japan 940916)", - "pgm", "PGM (Polygame Master) System BIOS", - "pgm3in1", "Photo Y2K 2 (Flash 3-in-1)", - "pgoal", "Pleasure Goal / Futsal - 5 on 5 Mini Soccer (NGM-219)", - "phantasm", "Phantasm (Japan)", - "phantom", "Phantom (bootleg of Spectar)", - "phantom2", "Phantom II", - "phantoma", "Phantomas (bootleg of Spectar)", - "phantomp", "Phantom Pays (4VXFC5431, New Zealand)", - "pharo_l2", "Pharaoh (L-2)", - "pharrier", "Planet Harriers", - "phelios", "Phelios (Japan)", - "phklad", "Klad / Labyrinth (Photon System)", - "phnix_l1", "Phoenix (L-1)", - "phoenix", "Phoenix (Amstar)", - "phoenix3", "Phoenix (T.P.N.)", - "phoenixa", "Phoenix (Centuri, set 1)", - "phoenixb", "Phoenix (Centuri, set 2)", - "phoenixc", "Phoenix (Irecsa / G.G.I Corp, set 1)", - "phoenixc2", "Phoenix (Irecsa / G.G.I Corp, set 2)", - "phoenixc3", "Phoenix (Irecsa / G.G.I Corp, set 3)", - "phoenixc4", "Phoenix (Irecsa / G.G.I Corp, set 4)", - "phoenixj", "Phoenix (Taito Japan)", - "phoenixs", "Phoenix (Spanish bootleg)", - "phoenixt", "Phoenix (Taito)", - "phoenxp2", "Phoenix Part 2", - "photof", "Photo Finish (bootleg?)", - "photoply", "Photo Play 2000 (v2.01)", - "photoy2k", "Photo Y2K (ver. 105)", - "photoy2k102", "Photo Y2K (ver. 102, Japanese Board)", - "photoy2k104", "Photo Y2K (ver. 104)", - "phozon", "Phozon (Japan)", - "phozons", "Phozon (Sidam)", - "phpython", "Python (Photon System)", - "phrcraze", "Phraze Craze (6221-40, U5-0A)", - "phrcrazea", "Phraze Craze (6221-40, U5-0)", - "phrcrazeb", "Phraze Craze (6221-40, U5-3A Expanded Questions)", - "phrcrazec", "Phraze Craze (6221-40, U5-3 Expanded Questions)", - "phrcrazev", "Phraze Craze (6221-45, U5-2 Vertical)", - "phtetris", "Tetris (Photon System)", - "piccolop", "Piccolo Poker 100", - "pickin", "Pickin'", - "pickwin", "Pick 'n Win (Version 2.9E Dual)", - "pickwinb1", "Pick 'n Win (Version 2.9R, set 1)", - "pickwinbt", "Pick 'n Win (Version 2.8T, set 1)", - "pickwind1", "Pick 'n Win (Version 2.9R, set 2)", - "pickwindt", "Pick 'n Win (Version 2.8T, set 2)", - "pickwino", "Pick 'n Win (Version 2.6)", - "pickwino2", "Pick 'n Win (Version 2.5T)", - "pickwinv1", "Pick 'n Win (Version 2.9R Dual)", - "pickwinvt", "Pick 'n Win (Version 2.8T, Dual)", - "pignewt", "Pig Newton (version C)", - "pignewta", "Pig Newton (version A)", - "pigout", "Pig Out: Dine Like a Swine! (set 1)", - "pigouta", "Pig Out: Dine Like a Swine! (set 2)", - "pigskin", "Pigskin 621AD (rev 1.1K 8/01/90)", - "pigskina", "Pigskin 621AD (rev 2.0 7/06/90)", - "pigskinb", "Pigskin 621AD (rev 1.1 6/05/90)", - "pimbal", "Pimbal (Pinball 3000)", - "pinball", "Pinball", - "pinbo", "Pinbo (set 1)", - "pinboa", "Pinbo (set 2)", - "pinbos", "Pinbo (bootleg)", - "pinchamp", "Pinball Champ", - "pinchamp7", "Pinball Champ (7 digits)", - "pinchamp7g", "Pinball Champ (7 digits German speech)", - "pinchamp7i", "Pinball Champ (7 digits Italian speech)", - "pinchampg", "Pinball Champ (German speech)", - "pinchampi", "Pinball Champ (Italian speech)", - "pinclown", "Clown (Inder)", - "pingpong", "Konami's Ping-Pong", - "pinkiri8", "Pinkiri 8", - "pinkswts", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER....)", - "pinkswtsa", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER...)", - "pinkswtsb", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER.)", - "pinkswtsx", "Pink Sweets: Ibara Sorekara (2006/xx/xx MASTER VER.)", - "pinpool", "Pinball Pool", - "pipedrm", "Pipe Dream (World)", - "pipedrmj", "Pipe Dream (Japan)", - "pipedrmt", "Pipe Dream (Taiwan)", - "pipedrmu", "Pipe Dream (US)", - "pipeline", "Pipeline", - "pipibibs", "Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 1)", - "pipibibsa", "Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 2)", - "pipibibsbl", "Pipi & Bibis / Whoopee!! (bootleg)", - "pipibibsp", "Pipi & Bibis / Whoopee!! (prototype)", - "pir2001", "Pirate 2001 (Version 2.5E Dual)", - "pir2001b1", "Pirate 2001 (Version 2.5R, set 1)", - "pir2001bx", "Pirate 2001 (Version 2.40XT, set 1)", - "pir2001d1", "Pirate 2001 (Version 2.5R, set 2)", - "pir2001dx", "Pirate 2001 (Version 2.40XT, set 2)", - "pir2001o", "Pirate 2001 (Version 2.3N)", - "pir2001o2", "Pirate 2001 (Version 2.3)", - "pir2001o3", "Pirate 2001 (Version 2.20XT)", - "pir2001v1", "Pirate 2001 (Version 2.5R Dual)", - "pir2001vx", "Pirate 2001 (Version 2.40XT Dual)", - "pir2002", "Pirate 2002 (Version 2.0E Dual)", - "pir2002b1", "Pirate 2002 (Version 2.0R, set 1)", - "pir2002bx", "Pirate 2002 (Version 1.90XT, set 1)", - "pir2002d1", "Pirate 2002 (Version 2.0R, set 2)", - "pir2002dx", "Pirate 2002 (Version 1.90XT, set 2)", - "pir2002o", "Pirate 2002 (Version 1.8N)", - "pir2002o2", "Pirate 2002 (Version 1.8)", - "pir2002o3", "Pirate 2002 (Version 1.70XT)", - "pir2002v1", "Pirate 2002 (Version 2.0R Dual)", - "pir2002vx", "Pirate 2002 (Version 1.90XT Dual)", - "piranha", "Piranha", - "piranhah", "Piranha (hack)", - "piranhao", "Piranha (older)", - "pirate2", "Pirate 2 (061005 World)", - "pirate2_2", "Pirate 2 (070126 Russia)", - "pirate2_2a", "Pirate 2 (bootleg, 070126, banking address hack)", - "pirate2_3", "Pirate 2 (090528 Lottery)", - "pirate2_4", "Pirate 2 (090730 Entertainment)", - "pirate2a", "Pirate 2 (bootleg, 061005, banking address hack set 1)", - "pirate2b", "Pirate 2 (bootleg, 061005, banking address hack set 2)", - "pirate2c", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 1)", - "pirate2d", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 2)", - "pirate2e", "Pirate 2 (bootleg, 061005, banking address hack, changed version text set 3)", - "pirate2f", "Pirate 2 (bootleg, 061005, VIDEO GAME-1 PR01)", - "pirate2g", "Pirate 2 (bootleg, 061005, LOTTOGAME (I))", - "pirate2h", "Pirate 2 (bootleg, 061005, LOTOS PR01)", - "pirate_2", "Pirate (060210 World)", - "pirate_3", "Pirate (060803 World)", - "pirate_4", "Pirate (070412 Russia)", - "pirates", "Pirates", - "piratetr", "Pirate Treasure", - "pirati", "Pirati", - "piratpet", "Pirate Pete", - "pirpok2", "Pirate Poker II (Version 2.4E Dual)", - "pirpok2b1", "Pirate Poker II (Version 2.2R, set 1)", - "pirpok2d1", "Pirate Poker II (Version 2.2R, set 2)", - "pirpok2o", "Pirate Poker II (Version 2.0)", - "pirpok2v1", "Pirate Poker II (Version 2.2R Dual)", - "pisces", "Pisces", - "piscesb", "Pisces (bootleg)", - "pistoldm", "Pistol Daimyo no Bouken (Japan)", - "pitboss", "The Pit Boss (2214-04)", - "pitboss2", "Pit Boss II (9221-01C)", - "pitbossa", "The Pit Boss (2214-03, U5-0C)", - "pitbossa1", "The Pit Boss (2214-03, U5-1C)", - "pitbossb", "The Pit Boss (2214-02?)", - "pitbossc", "The Pit Boss (2214-?)", - "pitbossm", "Pit Boss Megastar (9244-00-01)", - "pitbossma", "Pit Boss Megastar (9243-00-01)", - "pitbosss", "Pit Boss Superstar (9221-10-00B)", - "pitbosssa", "Pit Boss Superstar (9221-10-00A)", - "pitbosssc", "Pit Boss Superstar (9221-12-01)", - "pitfall2", "Pitfall II (315-5093)", - "pitfall2a", "Pitfall II (315-5093, Flicky Conversion)", - "pitfall2u", "Pitfall II (not encrypted)", - "pitfight", "Pit Fighter (rev 9)", - "pitfight3", "Pit Fighter (rev 3)", - "pitfight4", "Pit Fighter (rev 4)", - "pitfight5", "Pit Fighter (rev 5)", - "pitfight6", "Pit Fighter (rev 6)", - "pitfight7", "Pit Fighter (rev 7)", - "pitfightb", "Pit Fighter (bootleg)", - "pitfightj", "Pit Fighter (Japan, 2 players)", - "pitnrun", "Pit & Run - F-1 Race (set 1)", - "pitnruna", "Pit & Run - F-1 Race (set 2)", - "pjustic", "Moero Justice Gakuen (JPN) / Project Justice (USA, EXP, KOR, AUS) (Rev A)", - "pkgnsh", "Pachinko Gindama Shoubu (Japan)", - "pkgnshdx", "Pachinko Gindama Shoubu DX (Japan)", - "pkladies", "Poker Ladies", - "pkladiesbl", "Poker Ladies (Censored bootleg)", - "pkladiesl", "Poker Ladies (Leprechaun ver. 510)", - "pkladiesla", "Poker Ladies (Leprechaun ver. 401)", - "pkrdewin", "Poker De Win", - "pkrmast", "Poker Master (set 1)", - "pkrmasta", "Poker Master (set 2)", - "pkrno_l1", "Pokerino (L-1)", - "pkscram", "PK Scramble", - "pktet346", "PK Tetris (v346I)", - "pktgaldx", "Pocket Gal Deluxe (Euro v3.00)", - "pktgaldxb", "Pocket Gal Deluxe (Euro v3.00, bootleg)", - "pktgaldxj", "Pocket Gal Deluxe (Japan v3.00)", - "pkunwar", "Penguin-Kun Wars (US)", - "pkunwarj", "Penguin-Kun Wars (Japan)", - "platoon", "Vs. Platoon", - "play_a24", "Playboy 35th Anniversary (2.4)", - "playball", "PlayBall! (prototype)", - "playboy", "Playboy", - "playboyf", "Playboy (5.00 France)", - "playboyf_203", "Playboy (2.03 France)", - "playboyf_300", "Playboy (3.00 France)", - "playboyf_303", "Playboy (3.03 France)", - "playboyf_401", "Playboy (4.01 France)", - "playboyg", "Playboy (5.00 Germany)", - "playboyg_203", "Playboy (2.03 Germany)", - "playboyg_300", "Playboy (3.00 Germany)", - "playboyg_303", "Playboy (3.03 Germany)", - "playboyg_401", "Playboy (4.01 Germany)", - "playboyi", "Playboy (5.00 Italy)", - "playboyi_203", "Playboy (2.03 Italy)", - "playboyi_300", "Playboy (3.00 Italy)", - "playboyi_303", "Playboy (3.03 Italy)", - "playboyi_401", "Playboy (4.01 Italy)", - "playboyl", "Playboy (5.00 Spain)", - "playboyl_203", "Playboy (2.03 Spain)", - "playboyl_300", "Playboy (3.00 Spain)", - "playboyl_303", "Playboy (3.03 Spain)", - "playboyl_401", "Playboy (4.01 Spain)", - "playboys", "Playboy (5.00)", - "playboys_203", "Playboy (2.03)", - "playboys_300", "Playboy (3.00)", - "playboys_303", "Playboy (3.03)", - "playboys_401", "Playboy (4.01)", - "playch10", "PlayChoice-10 BIOS", - "playnew", "Playboy (ARM7 Sound Board)", - "plegends", "Gogetsuji Legends (US, Ver. 95/06/20)", - "plegendsj", "Gouketsuji Gaiden - Saikyou Densetsu (Japan, Ver. 95/06/20)", - "pleiadbl", "Pleiads (bootleg set 1)", - "pleiadce", "Pleiads (Centuri)", - "pleiads", "Pleiads (Tehkan)", - "pleiadsb2", "Pleiads (bootleg set 2)", - "plgirls", "Play Girls", - "plgirls2", "Play Girls 2", - "plotting", "Plotting (World set 1)", - "plottinga", "Plotting (World set 2, protected)", - "plottingb", "Plotting (World set 3, earliest version)", - "plottingu", "Plotting (US)", - "plsmaswd", "Plasma Sword: Nightmare of Bilstein (USA 980316)", - "plsmaswda", "Plasma Sword: Nightmare of Bilstein (Asia 980316)", - "pltkids", "Pilot Kids (Model 2B, Revision A)", - "pltkidsa", "Pilot Kids (Model 2A)", - "plumppop", "Plump Pop (Japan)", - "plusalph", "Plus Alpha", - "plygonet", "Polygonet Commanders (ver UAA)", - "pma", "PMA Poker", - "pmpoker", "PlayMan Poker (German)", - "pmv112", "Pinball Magic", - "pmv112r", "Pinball Magic (Redemption)", - "pnchmn", "Punch Mania: Hokuto No Ken (GQ918 VER. JAB)", - "pnchmn2", "Punch Mania 2: Hokuto No Ken (GQA09 JAA)", - "pnchmna", "Punch Mania: Hokuto No Ken (GQ918 VER. JAB ALT CD)", - "pnickj", "Pnickies (Japan 940608)", - "pnkpnthr", "Pink Panther", - "pntnpuzl", "Paint & Puzzle", - "pnyaa", "Pochi and Nyaa", - "pocketrc", "Pocket Racer (Japan, PKR1/VER.B)", - "podrace", "Star Wars Pod Racer", - "poitto", "Poitto!", - "poizone", "Poizone", - "pokasuka", "Pokasuka Ghost", - "pokechmp", "Poke Champ", - "poker41", "Four in One Poker", - "poker52", "Poker 52 (Ver. 1.2)", - "poker72", "Poker Monarch (v2.50)", - "poker91", "Poker 91", - "pokerdub", "unknown French poker game", - "pokerduc", "unknown encrypted poker game", - "pokermon", "Mundial/Mondial (Italian/French)", - "pokeroul", "Poker Roulette (Version 8.22)", - "pokersis", "unknown Sisteme France Poker", - "pokio", "Pokio (Dutch, Game Card 95-750-278)", - "pokonl97", "Poker Only '97 (ver. 3.3)", - "pokrdice", "Poker Dice", - "polar", "Polar Explorer", - "polaris", "Polaris (Latest version)", - "polarisa", "Polaris (First revision)", - "polarisbr", "Polaris (Brazil)", - "polariso", "Polaris (Original version)", - "polepos", "Pole Position (World)", - "polepos2", "Pole Position II (Japan)", - "polepos2a", "Pole Position II (Atari)", - "polepos2b", "Pole Position II (bootleg)", - "polepos2bi", "Gran Premio F1 (Italian bootleg of Pole Position II)", - "poleposa1", "Pole Position (Atari version 1)", - "poleposa2", "Pole Position (Atari version 2)", - "poleposj", "Pole Position (Japan)", - "poleposn", "Pole Position (Sonic)", - "polic_l2", "Police Force (LA-2)", - "polic_l3", "Police Force (LA-3)", - "polic_l4", "Police Force (LA-4)", - "policetr", "Police Trainer (Rev 1.3)", - "policetr10", "Police Trainer (Rev 1.0)", - "policetr11", "Police Trainer (Rev 1.1)", - "policetr13a", "Police Trainer (Rev 1.3B Newer)", - "policetr13b", "Police Trainer (Rev 1.3B)", - "pollux", "Pollux (set 1)", - "polluxa", "Pollux (set 2)", - "polluxa2", "Pollux (set 3)", - "polynetw", "Poly-Net Warriors (ver JAA)", - "polyplay", "Poly-Play", - "polystar", "Tobe! Polystars (ver JAA)", - "pomp_l1", "Pompeii (Shuffle) (L-1)", - "pompingw", "Pomping World (Japan)", - "ponchin", "Mahjong Pon Chin Kan (Japan set 1)", - "ponchina", "Mahjong Pon Chin Kan (Japan set 2)", - "pong", "Pong (Rev E) external", - "pongf", "Pong (Rev E)", - "ponpoko", "Ponpoko", - "ponpokov", "Ponpoko (Venture Line)", - "pontoon", "Pontoon (FD1094 317-0153)", - "ponttehk", "Pontoon (Tehkan)", - "pool10", "Pool 10 (Italian, set 1)", - "pool10b", "Pool 10 (Italian, set 2)", - "pool10c", "Pool 10 (Italian, set 3)", - "pool10d", "Pool 10 (Italian, set 4)", - "pool10e", "Pool 10 (Italian, Dino 4 hardware, encrypted)", - "pool10f", "Pool 10 (Italian, set 5)", - "pool10g", "Pool 10 (Italian, set 6)", - "pool10h", "Pool 10 (Italian, set 7)", - "pool10i", "Pool 10 (Italian, set 8)", - "pool_l6", "Pool Sharks (LA-6)", - "pool_l7", "Pool Sharks (LA-7)", - "pool_le2", "Pool Sharks (LE-2)", - "pool_p7", "Pool Sharks (PA-7)", - "poolcham", "Pool Champion", - "poolchama", "Pool Champion (alternate sound)", - "poolchami", "Pool Champion (Italian speech)", - "poolshrk", "Poolshark", - "pootan", "Pootan", - "pooyan", "Pooyan", - "pooyans", "Pooyan (Stern Electronics)", - "pop_hh", "Popper (Hard Head bootleg)", - "pop_lx5", "Popeye Saves The Earth (LX-5)", - "pop_pa3", "Popeye Saves The Earth (PA-3)", - "popbingo", "Pop Bingo", - "popbounc", "Pop 'n Bounce / Gapporin", - "popeye", "Popeye (revision D)", - "popeyebl", "Popeye (bootleg)", - "popeyef", "Popeye (revision F)", - "popeyeman", "Popeye-Man", - "popeyeu", "Popeye (revision D not protected)", - "popflame", "Pop Flamer (protected)", - "popflamea", "Pop Flamer (not protected)", - "popflameb", "Pop Flamer (hack?)", - "popflamen", "Pop Flamer (bootleg on Naughty Boy PCB)", - "popn2", "Pop'n Music 2 (ver JA-A)", - "popn4", "Pop'n Music 4", - "popn5", "Pop'n Music 5", - "popn6", "Pop'n Music 6", - "popn7", "Pop'n Music 7", - "popn8", "Pop'n Music 8", - "popn9", "Pop'n Music 9 (ver JAB)", - "popnanm2", "Pop'n Music Animelo 2", - "popnpop", "Pop'n Pop (Ver 2.07O 1998/02/09)", - "popnpopj", "Pop'n Pop (Ver 2.07J 1998/02/09)", - "popnpopu", "Pop'n Pop (Ver 2.07A 1998/02/09)", - "popobear", "PoPo Bear", - "popper", "Popper", - "popshot", "Pop Shot (prototype)", - "popspops", "Pop's Pop's", - "porky", "Porky", - "porter", "Port Man (bootleg on Moon Cresta hardware)", - "portman", "Port Man", - "portrait", "Portraits (set 1)", - "portraita", "Portraits (set 2)", - "potgame", "Pot Game (Italian)", - "potgoldu", "Pot O' Gold (U.S. Games, v400x?)", - "potnpkra", "Jack Potten's Poker (set 2)", - "potnpkrb", "Jack Potten's Poker (set 3)", - "potnpkrc", "Jack Potten's Poker (set 4)", - "potnpkrd", "Jack Potten's Poker (set 5)", - "potnpkre", "Jack Potten's Poker (set 6)", - "potnpkrf", "Jack Potten's Poker (set 7, Royale GFX)", - "poto_a32", "The Phantom of the Opera (3.2)", - "potogold", "Pot of Gold", - "potopoto", "Poto Poto (Japan)", - "pottnpkr", "Jack Potten's Poker (set 1)", - "poundfor", "Pound for Pound (World)", - "poundforj", "Pound for Pound (Japan)", - "poundforu", "Pound for Pound (US)", - "pow", "P.O.W. - Prisoners of War (US version 1)", - "powerbal", "Power Balls", - "powerbals", "Power Balls (Super Slam conversion)", - "powercrd", "Power Card (Ver 0263, encrypted)", - "powerdrv", "Power Drive", - "powerins", "Power Instinct (USA)", - "powerinsa", "Power Instinct (USA, bootleg set 1)", - "powerinsb", "Power Instinct (USA, bootleg set 2)", - "powerinsj", "Gouketsuji Ichizoku (Japan)", - "powj", "Datsugoku - Prisoners of War (Japan)", - "powrplay", "Power Play", - "powyak96", "Jikkyou Powerful Pro Yakyuu '96 (GV017 Japan 1.03)", - "powyakex", "Jikkyou Powerful Pro Yakyuu EX (GX802 VER. JAB)", - "ppan", "Peter Pan (bootleg of Hook)", - "ppcar", "Pang Pang Car", - "ppchamp", "Pasha Pasha Champ Mini Game Festival (Korea)", - "ppd", "ParaParaDancing", - "ppking", "Ping-Pong King", - "ppmast93", "Ping Pong Masters '93", - "ppp", "ParaParaParadise", - "ppp11", "ParaParaParadise v1.1", - "ppp1mp", "ParaParaParadise 1st Mix Plus", - "ppp2nd", "ParaParaParadise 2nd Mix", - "pprobe", "Planet Probe (prototype?)", - "ppsatan", "Poka Poka Satan (Japan)", - "ppspeed", "Speed Up (Spanish bootleg of Pole Position)", - "pr_5xcsh", "5x Cash (Project) (PROCONN)", - "pr_7hvn", "777 Heaven (Project) (PROCONN)", - "pr_7hvna", "777 Heaven (Project) (10GBP Jackpot) (PROCONN)", - "pr_7hvnb", "777 Heaven (Project) (20p 6GBP Jackpot Version 114) (PROCONN)", - "pr_7hvnc", "777 Heaven (Project) (10p 3GBP Jackpot Version 380) (PROCONN)", - "pr_7hvnd", "777 Heaven (Project) (5p 3GBP Jackpot Version 105) (PROCONN)", - "pr_7hvne", "777 Heaven (Project) (set 6) (PROCONN)", - "pr_7hvnf", "777 Heaven (Project) (set 7) (PROCONN)", - "pr_7hvng", "777 Heaven (Project) (set 8) (PROCONN)", - "pr_7hvnh", "777 Heaven (Project) (set 9) (PROCONN)", - "pr_7hvni", "777 Heaven (Project) (set 10) (PROCONN)", - "pr_7hvnj", "777 Heaven (Project) (set 11) (PROCONN)", - "pr_7hvnk", "777 Heaven (Project) (set 12) (PROCONN)", - "pr_7hvnl", "777 Heaven (Project) (set 13) (PROCONN)", - "pr_7hvnm", "777 Heaven (Project) (set 14) (PROCONN)", - "pr_7hvnn", "777 Heaven (Project) (set 15) (PROCONN)", - "pr_7hvno", "777 Heaven (Project) (set 16) (PROCONN)", - "pr_7hvnp", "777 Heaven (Project) (set 17) (PROCONN)", - "pr_7hvnq", "777 Heaven (Project) (set 18) (PROCONN)", - "pr_7hvnr", "777 Heaven (Project) (set 19) (PROCONN)", - "pr_7hvns", "777 Heaven (Project) (set 20) (PROCONN)", - "pr_7hvnt", "777 Heaven (Project) (set 21) (PROCONN)", - "pr_7hvnu", "777 Heaven (Project) (set 22) (PROCONN)", - "pr_alwy9", "Always Nine (Pcp) (set 1) (PROCONN)", - "pr_alwy9a", "Always Nine (Pcp) (set 2) (PROCONN)", - "pr_barbl", "Bars & Bells (Project) (PROCONN)", - "pr_batls", "Battleships (Project) (set 1) (PROCONN)", - "pr_batlsa", "Battleships (Project) (set 2) (PROCONN)", - "pr_batlsb", "Battleships (Project) (set 3) (PROCONN)", - "pr_bears", "Bear Streak (set 1) (Coinworld)", - "pr_bearsa", "Bear Streak (set 2) (Coinworld)", - "pr_bearsb", "Bear Streak (set 3) (Coinworld)", - "pr_bearx", "Bear X (Version 2.3) (Coinworld)", - "pr_bearxa", "Bear X (Version 2.2) (Coinworld)", - "pr_bearxb", "Bear X (Version 1.3) (Coinworld)", - "pr_bearxc", "Bear X (20p set 1) (Coinworld)", - "pr_bearxd", "Bear X (20p set 2) (Coinworld)", - "pr_bearxe", "Bear X (10p set 1) (Coinworld)", - "pr_bearxf", "Bear X (10p set 2) (Coinworld)", - "pr_bearxg", "Bear X (10p set 3) (Coinworld)", - "pr_bearxh", "Bear X (10p set 4?) (Coinworld)", - "pr_bearxi", "Bear X (10p set 5) (Coinworld)", - "pr_bearxj", "Bear X (code 813) (Coinworld)", - "pr_bearxk", "Bear X (8GBP Token?) (Coinworld)", - "pr_bearxl", "Bear X (Version 41) (Coinworld)", - "pr_bearxlp", "Bear X (Version 41, Protocol) (Coinworld)", - "pr_bearxm", "Bear X (Version 31) (Coinworld)", - "pr_bigdp", "Big Dipper (Project) (set 1) (PROCONN)", - "pr_bigdpa", "Big Dipper (Project) (set 2) (PROCONN)", - "pr_btwar", "Beat The Warden (Project) (set 1) (PROCONN)", - "pr_btwara", "Beat The Warden (Project) (set 2) (PROCONN)", - "pr_btwarb", "Beat The Warden (Project) (set 3) (PROCONN)", - "pr_bulbn", "Bully's Big Night (Project) (PROCONN)", - "pr_bulbna", "Bully's Big Night (Project) (set 1) (PROCONN)", - "pr_bulbnb", "Bully's Big Night (Project) (set 2) (PROCONN)", - "pr_buljp", "Bully's Jackpot (Project) (set 1) (PROCONN)", - "pr_buljpa", "Bully's Jackpot (Project) (set 2) (PROCONN)", - "pr_bulls", "Bullseye (Project) (set 1) (PROCONN)", - "pr_bullsa", "Bullseye (Project) (set 2) (PROCONN)", - "pr_bullsb", "Bullseye (Project) (set 3) (PROCONN)", - "pr_cas7", "Casino Jackpot 7s (Project) (PROCONN)", - "pr_cashb", "Cash Back (Project) (PROCONN)", - "pr_chico", "Chico the Bandit (Project) (set 1) (PROCONN)", - "pr_chicoa", "Chico the Bandit (Project) (set 2) (PROCONN)", - "pr_chicob", "Chico the Bandit (Project) (set 3) (PROCONN)", - "pr_coolm", "Cool Million (Project) (set 1) (PROCONN)", - "pr_coolma", "Cool Million (Project) (set 2) (PROCONN)", - "pr_coolmb", "Cool Million (Project) (set 3) (PROCONN)", - "pr_coyot", "Crazy Coyote (Pcp) (10p) (PROCONN)", - "pr_coyota", "Crazy Coyote (Pcp) (20p) (PROCONN)", - "pr_crz77", "Crazy 777s (Project) (PROCONN)", - "pr_crzbr", "Crazy Bars (Project) (PROCONN)", - "pr_crzpy", "Crazy Pays (Project) (PROCONN)", - "pr_dblup", "Double Up (Project) (PROCONN)", - "pr_fire", "Fircecracker (Project) (PROCONN)", - "pr_flshc", "Flash The Cash (Project) (PROCONN)", - "pr_fspot", "Fun Spot (Version 4.1) (Coinworld)", - "pr_fspota", "Fun Spot (Version 3.1) (Coinworld)", - "pr_fspotb", "Fun Spot (Version 2.1, set 1) (Coinworld)", - "pr_fspotc", "Fun Spot (Version 2.1, 20p stake, 82%) (Coinworld)", - "pr_fspotd", "Fun Spot (Version 2.1, 7 button) (Coinworld)", - "pr_fspote", "Fun Spot (Version 1.1, set 1) (Coinworld)", - "pr_fspotf", "Fun Spot (Version 1.1, 20p stake, 82%) (Coinworld)", - "pr_fspotg", "Fun Spot (Version 1.1, 6 button) (Coinworld)", - "pr_ftwhl", "Fortune Wheel (Project) (PROCONN)", - "pr_funrn", "Fun On The Run (Project) (PROCONN)", - "pr_gdft", "Good Fortune (Project) (PROCONN)", - "pr_gldng", "Golden Nugget (Project) (PROCONN)", - "pr_gldnl", "Golden Nile (Project) (PROCONN)", - "pr_gnuc", "Golden Nugget (Version 2.2) (Coinworld)", - "pr_gnuca", "Golden Nugget (Version 1.2) (Coinworld)", - "pr_gogld", "Go For Gold (Project) (PROCONN)", - "pr_happy", "Happy Days (Project) (PROCONN)", - "pr_heato", "The Heat Is On (Project) (PROCONN)", - "pr_hiclm", "Hi Climber (Project) (PROCONN)", - "pr_hit6", "Hit The Six (Project) (set 1) (PROCONN)", - "pr_hit6a", "Hit The Six (Project) (set 2) (PROCONN)", - "pr_hit6b", "Hit The Six (Project) (set 3) (PROCONN)", - "pr_hotcs", "Hot Cash (Project) (PROCONN)", - "pr_hotsp", "Hot Spots (Project) (PROCONN)", - "pr_jkpt7", "Jackpot 7's (Project) (PROCONN)", - "pr_jkrwd", "Jokers Wild (Project) (PROCONN)", - "pr_jumpj", "Jumping Jacks (Project) (set 1) (PROCONN)", - "pr_jumpja", "Jumping Jacks (Project) (set 2) (PROCONN)", - "pr_lday", "'L' Of A Day (Project) (Cash set) (PROCONN)", - "pr_ldaya", "'L' Of A Day (Project) (Token set) (PROCONN)", - "pr_magln", "Magic Lines (Version 2.1) (Coinworld)", - "pr_maglna", "Magic Lines (Version 1.1) (Coinworld)", - "pr_medl", "Medalist (Project) (PROCONN)", - "pr_megmn", "Mega Money (Project) (PROCONN)", - "pr_nifty", "Nifty Fifty (Project) (PROCONN)", - "pr_nudxs", "Nudge XS (Project) (PROCONN)", - "pr_qksht", "Quickshot (Maygay) (PROCONN)", - "pr_rags", "Rags To Riches (Project) (PROCONN)", - "pr_reflx", "Reflex (Project) (PROCONN)", - "pr_roadr", "Road Riot (Project) (PROCONN)", - "pr_roll", "The Roll (Project) (PROCONN)", - "pr_sevab", "Seven's Above (Project) (PROCONN)", - "pr_sevml", "Sevens & Melons (Project) (PROCONN)", - "pr_sptb", "Simply the Best (Pcp) (PROCONN?)", - "pr_supbr", "Super Bars (PCP) (PROCONN)", - "pr_swop", "Swop It (Ace)", - "pr_theme", "Theme Park (Project) (PROCONN)", - "pr_trktp", "Trick or Treat (Protocol?) (Project) (PROCONN)", - "pr_trktr", "Trick or Treat (Project) (PROCONN)", - "pr_trpx", "Triple X (Project) (PROCONN)", - "pr_ttrai", "Treasure Trail (Project) (PROCONN)", - "pr_upnun", "Up & Under (Project) (PROCONN)", - "pr_walls", "Wall Street (Project) (PROCONN)", - "pr_whlft", "Wheel Of Fortune (Project) (PROCONN)", - "pr_wldkn", "Wild Kings (Project) (PROCONN)", - "pr_wnstk", "Winning Streak (Version 1.1) (Coinworld)", - "prehisle", "Prehistoric Isle in 1930 (World)", - "prehislek", "Prehistoric Isle in 1930 (Korea)", - "prehisleu", "Prehistoric Isle in 1930 (US)", - "preisle2", "Prehistoric Isle 2", - "prikura", "Princess Clara Daisakusen (J 960910 V1.000)", - "primella", "Primella", - "primglex", "Prime Goal EX (Japan, PG1/VER.A)", - "primrag2", "Primal Rage 2 (Ver 0.36a)", - "primrage", "Primal Rage (version 2.3)", - "primrage20", "Primal Rage (version 2.0)", - "princess", "Cosmic Princess", - "prmrsocr", "Premier Soccer (ver EAB)", - "prmrsocrj", "Premier Soccer (ver JAB)", - "prmtmfgt", "Prime Time Fighter (Ver 2.1A 1993/05/21) (New Version)", - "prmtmfgto", "Prime Time Fighter (Ver 2.1A 1993/05/21) (Old Version)", - "profpac", "Professor Pac-Man", - "progear", "Progear (USA 010117)", - "progeara", "Progear (Asia 010117)", - "progearj", "Progear no Arashi (Japan 010117)", - "progearjbl", "Progear no Arashi (Japan 010117) (decrypted bootleg)", - "progearjd", "Progear no Arashi (Japan 010117 Phoenix Edition) (bootleg)", - "progearud", "Progear (USA 010117 Phoenix Edition) (bootleg)", - "progolf", "18 Holes Pro Golf (set 1)", - "progolfa", "18 Holes Pro Golf (set 2)", - "progress", "Progress", - "promutrv", "Progressive Music Trivia (Question set 1)", - "promutrva", "Progressive Music Trivia (Question set 2)", - "promutrvb", "Progressive Music Trivia (Question set 3)", - "promutrvc", "Progressive Music Trivia (Question set 4)", - "propcycl", "Prop Cycle (Rev. PR2 Ver.A)", - "prosoccr", "Pro Soccer", - "prosport", "Pro Sports - Bowling, Tennis, and Golf (set 1)", - "prosporta", "Pro Sports - Bowling, Tennis, and Golf (set 2)", - "protennb", "Tennis (bootleg of Pro Tennis)", - "prtyanim", "Party Animal", - "prtytime", "Party Time: Gonta the Diver II / Ganbare! Gonta!! 2 (World Release)", - "psailor1", "Bishoujo Janshi Pretty Sailor 18-kin (Japan)", - "psailor2", "Bishoujo Janshi Pretty Sailor 2 (Japan)", - "psarc95", "PS Arcade 95", - "psattack", "P's Attack", - "psoldier", "Perfect Soldiers (Japan)", - "pspikes", "Power Spikes (World)", - "pspikes2", "Power Spikes II (NGM-068)", - "pspikesb", "Power Spikes (bootleg)", - "pspikesc", "Power Spikes (China)", - "pspikesk", "Power Spikes (Korea)", - "pspikesu", "Power Spikes (US)", - "pss61", "Super Mario Kart / Super Mario Collection / Star Fox (Super Famicom Box)", - "pss62", "New Super 3D Golf Simulation - Waialae No Kiseki / Super Mahjong 2 (Super Famicom Box)", - "pss63", "Super Donkey Kong / Super Tetris 2 + Bombliss (Super Famicom Box)", - "pss64", "Super Donkey Kong / Super Bomberman 2 (Super Famicom Box)", - "pstadium", "Mahjong Panic Stadium (Japan)", - "pstlpkr", "Pistol Poker", - "pstone", "Power Stone (JPN, USA, EUR, ASI, AUS)", - "pstone2", "Power Stone 2 (JPN, USA, EUR, ASI, AUS)", - "psurge", "Power Surge", - "psychic5", "Psychic 5 (set 1)", - "psychic5a", "Psychic 5 (set 2)", - "psychos", "Psycho Soldier (US)", - "psychosj", "Psycho Soldier (Japan)", - "psyforce", "Psychic Force (Ver 2.4O)", - "psyforcej", "Psychic Force (Ver 2.4J)", - "psyforcex", "Psychic Force EX (Ver 2.0J)", - "psyvar2", "Psyvariar 2 - The Will To Fabricate (GDL-0024)", - "psyvaria", "Psyvariar -Medium Unit- (V2.04J)", - "psyvarrv", "Psyvariar -Revision- (V2.04J)", - "ptblank", "Point Blank (World, GN2 Rev B)", - "ptblank2", "Point Blank 2 (GNB5/VER.A)", - "ptblank2ua", "Point Blank 2 (US, GNB3/VER.A)", - "ptblank3", "Point Blank 3 (Asia, GNN2 Ver.A)", - "ptrmj", "PT Reach Mahjong (Japan)", - "pturn", "Parallel Turn", - "puchicar", "Puchi Carat (Ver 2.02O 1997/10/29)", - "puchicarj", "Puchi Carat (Ver 2.02J 1997/10/29)", - "puckman", "Puck Man (Japan set 1)", - "puckmanb", "Puck Man (bootleg set 1)", - "puckmanf", "Puck Man (speedup hack)", - "puckmanh", "Puck Man (bootleg set 2)", - "puckmod", "Puck Man (Japan set 2)", - "puckpepl", "Puck People", - "puckpkmn", "Puckman Pockimon (set 1)", - "puckpkmna", "Puckman Pockimon (set 2)", - "puckpkmnb", "Puckman Pockimon (set 3)", - "pulirula", "PuLiRuLa (World)", - "pulirulaj", "PuLiRuLa (Japan)", - "pulltabs", "Pull Tabs", - "pulsar", "Pulsar", - "pulstar", "Pulstar", - "punchita", "Punch-Out!! (Italian bootleg)", - "punchout", "Punch-Out!!", - "punchoutj", "Punch-Out!! (Japan)", - "punchy", "Punchy The Clown", - "punipic", "The Punisher (bootleg with PIC16c57, set 1)", - "punipic2", "The Punisher (bootleg with PIC16c57, set 2)", - "punipic3", "The Punisher (bootleg with PIC16c57, set 3)", - "punisher", "The Punisher (World 930422)", - "punisherbz", "Biaofeng Zhanjing (Chinese bootleg of The Punisher)", - "punisherh", "The Punisher (Hispanic 930422)", - "punisherj", "The Punisher (Japan 930422)", - "punisheru", "The Punisher (USA 930422)", - "punk", "Punk!", - "punkshot", "Punk Shot (US 4 Players)", - "punkshot2", "Punk Shot (US 2 Players)", - "punkshotj", "Punk Shot (Japan 2 Players)", - "pururun", "Pururun", - "pushman", "Pushman (Korea, set 1)", - "pushmana", "Pushman (Korea, set 2)", - "pushmans", "Pushman (American Sammy license)", - "pushmant", "Pushman (Top Tronic license)", - "pushover", "Push Over (Summit Coin)", - "puyo", "Puyo Puyo (World)", - "puyobl", "Puyo Puyo (World, bootleg)", - "puyoda", "Puyo Puyo Da!", - "puyofev", "Puyo Puyo Fever (GDS-0031)", - "puyofevp", "Puyo Puyo Fever (prototype ver 0.01)", - "puyoj", "Puyo Puyo (Japan, Rev B)", - "puyoja", "Puyo Puyo (Japan, Rev A)", - "puyopuy2", "Puyo Puyo 2 (Japan)", - "puyosun", "Puyo Puyo Sun (J 961115 V0.001)", - "puzlbang", "Puzzle Bang Bang (Korea, version 2.9 / 990108)", - "puzlbanga", "Puzzle Bang Bang (Korea, version 2.8 / 990106)", - "puzlclub", "Puzzle Club (Japan prototype)", - "puzldama", "Taisen Puzzle-dama (ver JAA)", - "puzlstar", "Puzzle Star (ver. 100MG)", - "puzzldpr", "Puzzle De Pon! R!", - "puzzledp", "Puzzle De Pon!", - "puzzlekg", "Puzzle King (Dance & Puzzle)", - "puzzlet", "Puzzlet (Japan)", - "puzzli", "Puzzli", - "puzzli2", "Puzzli 2 (ver. 100)", - "puzzli2s", "Puzzli 2 Super (ver. 200)", - "puzzloop", "Puzz Loop (Europe, v0.94)", - "puzzloopa", "Puzz Loop (Asia)", - "puzzloope", "Puzz Loop (Europe, v0.93)", - "puzzloopj", "Puzz Loop (Japan)", - "puzzloopk", "Puzz Loop (Korea)", - "puzzloopu", "Puzz Loop (USA)", - "puzznic", "Puzznic (World)", - "puzznici", "Puzznic (Italian bootleg)", - "puzznicj", "Puzznic (Japan)", - "pwerplay", "Power Play (Pinball)", - "pwheelsj", "Power Wheels (Japan)", - "pwrgoal", "Taito Power Goal (Ver 2.5O 1994/11/03)", - "pwrinst2", "Power Instinct 2 (US, Ver. 94/04/08)", - "pwrinst2j", "Gouketsuji Ichizoku 2 (Japan, Ver. 94/04/08)", - "pwrkick", "Power Kick (Japan)", - "pwrshovl", "Power Shovel ni Norou!! - Power Shovel Simulator", - "py2k2", "Photo Y2K 2", - "pyenaget", "Pye-nage Taikai", - "pyramid", "Pyramid (Dutch, Game Card 95-750-898)", - "pyros", "Pyros (US)", - "pyson", "Konami Pyson BIOS", - "pz_f4", "The Party Zone (F-4)", - "pz_l1", "The Party Zone (L-1)", - "pz_l2", "The Party Zone (L-2)", - "pz_l3", "The Party Zone (L-3)", - "pzlbowl", "Puzzle De Bowling (Japan)", - "pzlbreak", "Puzzle Break", - "pzlestar", "Puzzle Star (Sang Ho Soft)", - "pzletime", "Puzzle Time (prototype)", - "pzloop2", "Puzz Loop 2 (Euro 010302)", - "pzloop2j", "Puzz Loop 2 (Japan 010226)", - "pzloop2jr1", "Puzz Loop 2 (Japan 010205)", - "qad", "Quiz & Dragons: Capcom Quiz Game (USA 920701)", - "qadjr", "Quiz & Dragons: Capcom Quiz Game (Japan Resale Ver. 940921)", - "qb3", "QB-3 (prototype)", - "qbert", "Q*bert (US set 1)", - "qberta", "Q*bert (US set 2)", - "qbertj", "Q*bert (Japan)", - "qbertqub", "Q*bert's Qubes", - "qberttst", "Q*bert (early test version)", - "qbquest", "Q*Bert's Quest", - "qbtrktst", "Q*bert Board Input Test Rom", - "qc", "Quarter Horse Classic", - "qcrayon", "Quiz Crayon Shinchan (Japan)", - "qcrayon2", "Crayon Shinchan Orato Asobo (Japan)", - "qdrmfgp", "Quiz Do Re Mi Fa Grand Prix (Japan)", - "qdrmfgp2", "Quiz Do Re Mi Fa Grand Prix 2 - Shin-Kyoku Nyuukadayo (Japan)", - "qgakumon", "Quiz Gakumon no Susume (Japan ver. JA2 Type L)", - "qgh", "Quiz Ghost Hunter (Japan, ROM Based)", - "qix", "Qix (Rev 2)", - "qix2", "Qix II (Tournament)", - "qixa", "Qix (set 2, smaller roms)", - "qixb", "Qix (set 2, larger roms)", - "qixo", "Qix (set 3, earlier)", - "qjinsei", "Quiz Jinsei Gekijoh (Japan)", - "qmegamis", "Quiz Ah Megamisama (JPN, USA, EXP, KOR, AUS)", - "qmhayaku", "Quiz-Mahjong Hayaku Yatteyo! (Japan)", - "qndream", "Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 960826)", - "qntoond", "Quintoon (Dutch, Game Card 95-750-243)", - "qntoondo", "Quintoon (Dutch, Game Card 95-750-136)", - "qos", "A Question of Sport (set 1, 39-960-107)", - "qosa", "A Question of Sport (set 2, 39-960-099)", - "qosb", "A Question of Sport (set 3, 39-960-089)", - "qotn", "Queen of the Nile (0200439V, NSW/ACT)", - "qrouka", "Quiz Rouka Ni Tattenasai (Japan, ROM Based)", - "qsangoku", "Quiz Sangokushi (Japan)", - "qsww", "Quiz Syukudai wo Wasuremashita (Japan, Floppy Based, FD1094 317-0058-08b)", - "qtheater", "Quiz Theater - 3tsu no Monogatari (Ver 2.3J 1994/11/10)", - "qtono1", "Quiz Tonosama no Yabou (Japan)", - "qtono2j", "Quiz Tonosama no Yabou 2: Zenkoku-ban (Japan 950123)", - "qtorimon", "Quiz Torimonochou (Japan)", - "quake", "Quake Arcade Tournament (Release Beta 2)", - "quantum", "Quantum (rev 2)", - "quantum1", "Quantum (rev 1)", - "quantump", "Quantum (prototype)", - "quaquiz2", "Quadro Quiz II", - "quarterb", "Quarterback (set 1)", - "quarterba", "Quarterback (set 2)", - "quarterh", "Quarter Horse (set 1, Pioneer PR-8210)", - "quarterha", "Quarter Horse (set 2, Pioneer PR-8210)", - "quarterhb", "Quarter Horse (set 3, Pioneer LD-V2000)", - "quartet", "Quartet (Rev A, 8751 315-5194)", - "quartet2", "Quartet 2 (8751 317-0010)", - "quartet2a", "Quartet 2 (unprotected)", - "quarteta", "Quartet (8751 315-5194)", - "quarth", "Quarth (Japan)", - "quasar", "Quasar (set 1)", - "quasara", "Quasar (set 2)", - "queen", "Queen?", - "queenotg", "Queen of the Games", - "quester", "Quester (Japan)", - "questers", "Quester Special Edition (Japan)", - "quickjac", "Quick Jack", - "quicksil", "Quicksilver", - "quintond", "Quintoon (UK, Game Card 95-751-206, Datapak)", - "quintono", "Quintoon (UK, Game Card 95-750-203)", - "quintoon", "Quintoon (UK, Game Card 95-750-206)", - "quiz", "Quiz (Revision 2)", - "quiz18k", "Miyasu Nonki no Quiz 18-Kin", - "quiz211", "Quiz (Revision 2.11)", - "quiz365", "Quiz 365 (Japan)", - "quiz365t", "Quiz 365 (Hong Kong & Taiwan)", - "quizard", "Quizard 3.2", - "quizchq", "Quiz Channel Question (Ver 1.00) (Japan)", - "quizchql", "Quiz Channel Question (Ver 1.23) (Taiwan?)", - "quizdai2", "Quiz Meitantei Neo & Geo - Quiz Daisousa Sen part 2 (NGM-042)(NGH-042)", - "quizdais", "Quiz Daisousa Sen - The Last Count Down (NGM-023)(NGH-023)", - "quizdaisk", "Quiz Daisousa Sen - The Last Count Down (Korean release)", - "quizdna", "Quiz DNA no Hanran (Japan)", - "quizf1", "Quiz F1 1-2 Finish (Japan)", - "quizhq", "Quiz H.Q. (Japan)", - "quizhuhu", "Moriguchi Hiroko no Quiz de Hyuu!Hyuu! (Ver 2.2J 1995/05/25)", - "quizkof", "Quiz King of Fighters (SAM-080)(SAH-080)", - "quizkofk", "Quiz King of Fighters (Korean release)", - "quizmeku", "Quiz Mekurumeku Story (Japan, ROM Based)", - "quizmoon", "Quiz Bisyoujo Senshi Sailor Moon - Chiryoku Tairyoku Toki no Un", - "quizmstr", "Quizmaster (German)", - "quizo", "Quiz Olympic (set 1)", - "quizoa", "Quiz Olympic (set 2)", - "quizpani", "Quiz Panicuru Fantasy", - "quizpun", "Quiz Punch", - "quizpun2", "Quiz Punch 2", - "quizqgd", "Quiz Keitai Q mode (GDL-0017)", - "quizrd12", "Quizard 1.2", - "quizrd17", "Quizard 1.7", - "quizrd18", "Quizard 1.8", - "quizrd22", "Quizard 2.2", - "quizrd23", "Quizard 2.3", - "quizrd34", "Quizard 3.4", - "quizrr40", "Quizard Rainbow 4.0", - "quizrr41", "Quizard Rainbow 4.1", - "quizrr42", "Quizard Rainbow 4.2", - "quizshow", "Quiz Show", - "quiztou", "Nettou! Gekitou! Quiztou!! (Japan)", - "quiztvqq", "Quiz TV Gassyuukoku Q&Q (Japan)", - "quizvadr", "Quizvaders (39-360-078)", - "quizvid", "Video Quiz", - "qwak", "Qwak (prototype)", - "qzchikyu", "Quiz Chikyu Bouei Gun (Japan)", - "qzkklgy2", "Quiz Kokology 2", - "qzkklogy", "Quiz Kokology", - "qzquest", "Quiz Quest - Hime to Yuusha no Monogatari (Japan)", - "qzshowby", "Quiz Sekai wa SHOW by shobai (Japan)", - "r2dtank", "R2D Tank", - "r2dx_v33", "Raiden II / DX (newer V33 PCB)", - "raaspec", "Spectrum I+", - "rab_103", "Adventures of Rocky and Bullwinkle and Friends (1.03 Spain)", - "rab_130", "Adventures of Rocky and Bullwinkle and Friends (1.30)", - "rab_320", "Adventures of Rocky and Bullwinkle and Friends (3.20)", - "rabbit", "Rabbit (Japan)", - "rabbitpk", "Rabbit Poker (Arizona Poker v1.1?)", - "rabiolep", "Rabio Lepus (Japan)", - "raccoon", "Raccoon World", - "racedriv", "Race Drivin' (cockpit, rev 5)", - "racedriv1", "Race Drivin' (cockpit, rev 1)", - "racedriv2", "Race Drivin' (cockpit, rev 2)", - "racedriv3", "Race Drivin' (cockpit, rev 3)", - "racedriv4", "Race Drivin' (cockpit, rev 4)", - "racedrivb", "Race Drivin' (cockpit, British, rev 5)", - "racedrivb1", "Race Drivin' (cockpit, British, rev 1)", - "racedrivb4", "Race Drivin' (cockpit, British, rev 4)", - "racedrivc", "Race Drivin' (compact, rev 5)", - "racedrivc1", "Race Drivin' (compact, rev 1)", - "racedrivc2", "Race Drivin' (compact, rev 2)", - "racedrivc4", "Race Drivin' (compact, rev 4)", - "racedrivcb", "Race Drivin' (compact, British, rev 5)", - "racedrivcb4", "Race Drivin' (compact, British, rev 4)", - "racedrivcg", "Race Drivin' (compact, German, rev 5)", - "racedrivcg4", "Race Drivin' (compact, German, rev 4)", - "racedrivg", "Race Drivin' (cockpit, German, rev 5)", - "racedrivg1", "Race Drivin' (cockpit, German, rev 2)", - "racedrivg4", "Race Drivin' (cockpit, German, rev 4)", - "racedrivpan", "Race Drivin' Panorama (prototype, rev 2.1)", - "raceon", "Race On! (RO2 Ver. A)", - "rachero", "Racing Hero (FD1094 317-0144)", - "racinfrc", "Racin' Force (ver EAC)", - "racinfrcu", "Racin' Force (ver UAB)", - "racingb", "Racing Beat (World)", - "racingbj", "Racing Beat (Japan)", - "racingj", "Racing Jam (JAC)", - "racingj2", "Racing Jam: Chapter 2 (EAE)", - "racingj2j", "Racing Jam: Chapter 2 (JAE)", - "racjamdx", "Racing Jam DX", - "rackempp", "Rack 'em Up! (Pinball)", - "rackemup", "Rack 'em Up (program code L)", - "racknrol", "Rack + Roll", - "radarscp", "Radar Scope", - "radarscp1", "Radar Scope (TRS01)", - "radarzon", "Radar Zone", - "radarzon1", "Radar Zone (Rev.1)", - "radarzont", "Radar Zone (Tuni)", - "radcl_g1", "Radical! (G-1)", - "radcl_l1", "Radical! (L-1)", - "radcl_p3", "Radical! (P-3)", - "radikalb", "Radikal Bikers (Version 2.02)", - "radirgy", "Radirgy (GDL-0032)", - "radirgya", "Radirgy (Rev A) (GDL-0032A)", - "radirgyn", "Radirgy Noa", - "radm", "Rad Mobile (World)", - "radmu", "Rad Mobile (US)", - "radr", "Rad Rally (World)", - "radrad", "Radical Radial", - "radrj", "Rad Rally (Japan)", - "radru", "Rad Rally (US)", - "raflesia", "Rafflesia (315-5162)", - "ragnagrd", "Ragnagard / Shin-Oh-Ken", - "ragtime", "The Great Ragtime Show (Japan v1.5, 92.12.07)", - "ragtimea", "The Great Ragtime Show (Japan v1.3, 92.11.26)", - "raiden", "Raiden (set 1)", - "raiden2", "Raiden II (set 1, US Fabtek)", - "raiden2a", "Raiden II (set 2, Hong Kong, Metrotainment)", - "raiden2b", "Raiden II (set 3, Japan)", - "raiden2c", "Raiden II (set 4, Italy)", - "raiden2d", "Raiden II (set 5, Easy Version)", - "raiden2e", "Raiden II (set 6, Easy Version)", - "raiden2f", "Raiden II (set 7, US Fabtek, Easy Version)", - "raiden2g", "Raiden II (set 8, US Fabtek, Easy Version)", - "raiden2nl", "Raiden II (set 9, The Netherlands)", - "raiden3", "Raiden III (v2.01J)", - "raiden4", "Raiden IV (v1.00J)", - "raidena", "Raiden (set 2)", - "raidenb", "Raiden (set 3)", - "raidendx", "Raiden DX (UK)", - "raidendxa1", "Raiden DX (Hong Kong, set 1)", - "raidendxa2", "Raiden DX (Hong Kong, set 2)", - "raidendxg", "Raiden DX (Germany)", - "raidendxj", "Raiden DX (Japan)", - "raidendxnl", "Raiden DX (The Netherlands)", - "raidendxu", "Raiden DX (US)", - "raidenk", "Raiden (Korea)", - "raident", "Raiden (Taiwan)", - "raidenu", "Raiden (US set 1)", - "raidenua", "Raiden (US set 2)", - "raiders", "Raiders", - "raiders5", "Raiders5", - "raiders5t", "Raiders5 (Japan)", - "raidersr3", "Raiders (Rev.3)", - "raiga", "Raiga - Strato Fighter (Japan)", - "raimais", "Raimais (World)", - "raimaisj", "Raimais (Japan)", - "raimaisjo", "Raimais (Japan, first revision)", - "raimfire", "Ready...Aim...Fire!", - "raizpin", "Raizin Ping Pong", - "rally", "Rally", - "rallybik", "Rally Bike / Dash Yarou", - "rallys", "Rallys (bootleg of Spectar, set 1)", - "rallysa", "Rallys (bootleg of Spectar, set 2)", - "rallyx", "Rally X (32k Ver.?)", - "rallyxa", "Rally X", - "rallyxm", "Rally X (Midway)", - "rallyxmr", "Rally X (Model Racing bootleg)", - "rambo3", "Rambo III (Europe)", - "rambo3p", "Rambo III (Europe, Proto?)", - "rambo3u", "Rambo III (US)", - "rampage", "Rampage (Rev 3, 8/27/86)", - "rampage2", "Rampage (Rev 2, 8/4/86)", - "rampart", "Rampart (Trackball)", - "rampart2p", "Rampart (Joystick)", - "rampartj", "Rampart (Japan, Joystick)", - "ramtek3", "unknown Ramtek Game (Maybe Hockey?) [TTL]", - "rangrmsn", "Ranger Mission", - "raphero", "Rapid Hero", - "rapidfip", "Rapid Fire", - "rapidfir", "Rapid Fire v1.1 (Build 239)", - "rapidfira", "Rapid Fire v1.1 (Build 238)", - "rapidfire", "Rapid Fire v1.0 (Build 236)", - "rapidrvr", "Rapid River (RD3 Ver. C)", - "rapidrvrp", "Rapid River (prototype)", - "rapidrvrv2c", "Rapid River (RD2 Ver. C)", - "rasce", "Ra Sceptor (Russia)", - "rascot", "Royal Ascot (Japan, terminal?)", - "rastan", "Rastan (World Rev 1)", - "rastana", "Rastan (World)", - "rastanu", "Rastan (US Rev 1)", - "rastanua", "Rastan (US)", - "rastanub", "Rastan (US, Earlier code base)", - "rastsag2", "Rastan Saga 2 (Japan)", - "rastsaga", "Rastan Saga (Japan Rev 1)", - "rastsagaa", "Rastan Saga (Japan)", - "ratrc_l1", "Rat Race (L-1)", - "raven", "Raven", - "raveracj", "Rave Racer (Rev. RV1 Ver.B, Japan)", - "raveracja", "Rave Racer (Rev. RV1, Japan)", - "raveracw", "Rave Racer (Rev. RV2, World)", - "raycris", "Ray Crisis (V2.03J)", - "rayforce", "Ray Force (Ver 2.3A 1994/01/20)", - "rayforcej", "Ray Force (Ver 2.3J 1994/01/20)", - "raystorm", "Ray Storm (Ver 2.06A)", - "raystormj", "Ray Storm (Ver 2.05J)", - "raystormo", "Ray Storm (Ver 2.05O)", - "raystormu", "Ray Storm (Ver 2.05A)", - "razmataz", "Razzmatazz", - "rbff1", "Real Bout Fatal Fury / Real Bout Garou Densetsu (NGM-095)(NGH-095)", - "rbff1a", "Real Bout Fatal Fury / Real Bout Garou Densetsu (bug fix revision)", - "rbff2", "Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGM-2400)", - "rbff2h", "Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGH-2400)", - "rbff2k", "Real Bout Fatal Fury 2 - The Newcomers (Korean release)", - "rbffspec", "Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special", - "rbffspeck", "Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special (Korean release)", - "rbibb", "Vs. Atari R.B.I. Baseball (set 1)", - "rbibba", "Vs. Atari R.B.I. Baseball (set 2)", - "rbisland", "Rainbow Islands (new version)", - "rbislande", "Rainbow Islands (Extra)", - "rbislando", "Rainbow Islands (old version)", - "rblaster", "Road Blaster (Data East LD)", - "rbmk", "Real Battle Mahjong King", - "rbtapper", "Tapper (Root Beer)", - "rcasino", "Royal Casino (D-2608208A1-2)", - "rcasino1", "Royal Casino (D-2608208A1-1, Larger Board)", - "rcasinoo", "Royal Casino (D-2608208A1-1, Smaller Board)", - "rcdego", "RC De Go (V2.03J)", - "rcdino4", "unknown encrypted Royal Card (Dino4 HW)", - "rchase", "Rail Chase (World)", - "rchase2", "Rail Chase 2 (Revision A)", - "rchasej", "Rail Chase (Japan)", - "rcirulet", "Ruleta RCI (6-players, Spanish)", - "rclimb", "Rock Climber (040815 World)", - "rclimb_3", "Rock Climber (040827 World)", - "rclimb_3a", "Rock Climber (bootleg, 040827, backdoor)", - "rclimb_3b", "Rock Climber (bootleg, 040827, new service menu)", - "rclimb_3c", "Rock Climber (bootleg, 040827, VIDEO GAME-1 SK01)", - "rclimb_3d", "Rock Climber (bootleg, 040827, LOTTOGAME (I))", - "rclimb_3e", "Rock Climber (bootleg, 040827, LOTOS SK01)", - "rclimb_4", "Rock Climber (070322 Russia)", - "rclimb_5", "Rock Climber (070621 Russia)", - "rclimb_7", "Rock Climber (090716 Entertainment)", - "rcorsair", "Red Corsair", - "rctnew", "Roller Coaster Tycoon (ARM7 Sound Board)", - "rctycn", "Roller Coaster Tycoon (7.02)", - "rctycn_400", "Roller Coaster Tycoon (4.00)", - "rctycn_600", "Roller Coaster Tycoon (6.00)", - "rctycn_701", "Roller Coaster Tycoon (7.01)", - "rctycnf", "Roller Coaster Tycoon (7.02 France)", - "rctycnf_400", "Roller Coaster Tycoon (4.00 France)", - "rctycnf_600", "Roller Coaster Tycoon (6.00 France)", - "rctycnf_701", "Roller Coaster Tycoon (7.01 France)", - "rctycng", "Roller Coaster Tycoon (7.02 Germany)", - "rctycng_400", "Roller Coaster Tycoon (4.00 Germany)", - "rctycng_701", "Roller Coaster Tycoon (7.01 Germany)", - "rctycni", "Roller Coaster Tycoon (7.02 Italy)", - "rctycni_400", "Roller Coaster Tycoon (4.00 Italy)", - "rctycni_600", "Roller Coaster Tycoon (6.00 Italy)", - "rctycni_701", "Roller Coaster Tycoon (7.01 Italy)", - "rctycnl", "Roller Coaster Tycoon (7.02 Spain)", - "rctycnl_400", "Roller Coaster Tycoon (4.00 Spain)", - "rctycnl_600", "Roller Coaster Tycoon (6.00 Spain)", - "rctycnl_701", "Roller Coaster Tycoon (7.01 Spain)", - "rdaction", "Rad Action / NinjaKun Ashura no Shou", - "rdft", "Raiden Fighters (Japan set 1)", - "rdft2", "Raiden Fighters 2 - Operation Hell Dive (Germany)", - "rdft22kc", "Raiden Fighters 2 - Operation Hell Dive 2000 (China, SYS386I)", - "rdft2a", "Raiden Fighters 2 - Operation Hell Dive (Hong Kong)", - "rdft2a2", "Raiden Fighters 2 - Operation Hell Dive (Korea)", - "rdft2j", "Raiden Fighters 2 - Operation Hell Dive (Japan set 1)", - "rdft2j2", "Raiden Fighters 2 - Operation Hell Dive (Japan set 2)", - "rdft2t", "Raiden Fighters 2 - Operation Hell Dive (Taiwan)", - "rdft2u", "Raiden Fighters 2 - Operation Hell Dive (US)", - "rdft2us", "Raiden Fighters 2 - Operation Hell Dive (US, single board)", - "rdfta", "Raiden Fighters (Austria)", - "rdftadi", "Raiden Fighters (Korea)", - "rdftam", "Raiden Fighters (Hong Kong)", - "rdftau", "Raiden Fighters (Australia)", - "rdftit", "Raiden Fighters (Italy)", - "rdftj", "Raiden Fighters (Japan set 2)", - "rdfts", "Raiden Fighters (Taiwan, single board)", - "rdftu", "Raiden Fighters (US)", - "rdkng_l1", "Road Kings (L-1)", - "rdkng_l2", "Road Kings (L-2)", - "rdkng_l3", "Road Kings (L-3)", - "rdkng_l4", "Road Kings (L-4)", - "re800ea", "Ruleta RE-800 (earlier, no attract)", - "re800v1", "Ruleta RE-800 (v1.0)", - "re800v3", "Ruleta RE-800 (v3.0)", - "re900", "Ruleta RE-900", - "reactor", "Reactor", - "reaktor", "Reaktor (Track & Field conversion)", - "real", "Real", - "realbrk", "Billiard Academy Real Break (Europe)", - "realbrkj", "Billiard Academy Real Break (Japan)", - "realbrkk", "Billiard Academy Real Break (Korea)", - "realbrod", "The Real Broadway (9131-20-00 R0A)", - "realpunc", "Real Puncher", - "rebus", "Rebus", - "recalh", "Recalhorn (Ver 1.42J 1994/5/11) (Prototype)", - "record", "Record (Version 1)", - "recordbr", "Recordbreaker (World)", - "redalert", "Red Alert", - "redbaron", "Red Baron (Revised Hardware)", - "redbarona", "Red Baron", - "redclash", "Red Clash (set 1)", - "redclasha", "Red Clash (set 2)", - "redclashk", "Red Clash (Kaneko)", - "redearth", "Red Earth (Euro 961121)", - "redearthr1", "Red Earth (Euro 961023)", - "redfoxwp2", "Red Fox War Planes II (China, set 1)", - "redfoxwp2a", "Red Fox War Planes II (China, set 2)", - "redhawk", "Red Hawk (US)", - "redhawkb", "Red Hawk (bootleg)", - "redhawke", "Red Hawk (Excellent Co., Ltd)", - "redhawki", "Red Hawk (Italy)", - "redlin2p", "Redline Racer (2 players)", - "redrobin", "Red Robin", - "redufo", "Defend the Terra Attack on the Red UFO", - "redufob", "Defend the Terra Attack on the Red UFO (bootleg)", - "reelemin", "Reel 'Em In (Russia)", - "reelfun", "Reel Fun (Version 7.03)", - "reelfun1", "Reel Fun (Version 7.01)", - "reelquak", "Reel'N Quake! (Ver. 1.05)", - "reelrock", "Reelin-n-Rockin (0100779V, Local)", - "regulus", "Regulus (315-5033, Rev A.)", - "reguluso", "Regulus (315-5033)", - "regulusu", "Regulus (not encrypted)", - "reikaids", "Reikai Doushi (Japan)", - "relief", "Relief Pitcher (set 1, 07 Jun 1992 / 28 May 1992)", - "relief2", "Relief Pitcher (set 2, 26 Apr 1992 / 08 Apr 1992)", - "relief3", "Relief Pitcher (set 3, 10 Apr 1992 / 08 Apr 1992)", - "renaiclb", "Mahjong Ren-ai Club (Japan)", - "renegade", "Renegade (US)", - "renju", "Renju Kizoku", - "repulse", "Repulse", - "rescraid", "Rescue Raider (5/11/87) (non-cartridge)", - "rescraida", "Rescue Raider (stand-alone)", - "rescu911", "Rescue 911 (rev.1)", - "rescue", "Rescue", - "rescueb", "Rescue (bootleg)", - "resdnt", "Resident (040415 World)", - "resdnt_2", "Resident (040513 World)", - "resdnt_2a", "Resident (bootleg, 040513, backdoor)", - "resdnt_2b", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 1)", - "resdnt_2c", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 2)", - "resdnt_2d", "Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 3)", - "resdnt_2e", "Resident (bootleg, 040513, LOTTOGAME (I))", - "resdnt_2f", "Resident (bootleg, 040513, LOTO PROGRAM V-RS2)", - "resdnt_2g", "Resident (bootleg, 040513, LOTOS SE01)", - "resdnt_3", "Resident (070222 Russia)", - "resdnt_6", "Resident (100311 World)", - "resdnt_8", "Resident (100311 Entertainment)", - "resdnt_9", "Resident (100316 Russia)", - "retofinv", "Return of the Invaders", - "retofinv1", "Return of the Invaders (bootleg set 1)", - "retofinv2", "Return of the Invaders (bootleg set 2)", - "revenger", "Revenger", - "revx", "Revolution X (Rev. 1.0 6/16/94)", - "rezon", "Rezon", - "rezont", "Rezon (Taito)", - "rf2", "Konami RF2 - Red Fighter", - "rfjet", "Raiden Fighters Jet (Germany)", - "rfjet2kc", "Raiden Fighters Jet 2000 (China, SYS386I)", - "rfjeta", "Raiden Fighters Jet (Korea)", - "rfjetj", "Raiden Fighters Jet (Japan)", - "rfjets", "Raiden Fighters Jet (US, single board)", - "rfjetsa", "Raiden Fighters Jet (US, single board, test version?)", - "rfjett", "Raiden Fighters Jet (Taiwan)", - "rfjetu", "Raiden Fighters Jet (US)", - "rflshdlx", "Royal Flush Deluxe", - "rfmpb", "Pinball 2000: Revenge From Mars (rev. 1)", - "rfmpbr2", "Pinball 2000: Revenge From Mars (rev. 2)", - "rgum", "Royal Gum (Italy)", - "ribbit", "Ribbit!", - "ridgera2", "Ridge Racer 2 (Rev. RRS2, World)", - "ridgera2j", "Ridge Racer 2 (Rev. RRS1 Ver.B, Japan)", - "ridgera2ja", "Ridge Racer 2 (Rev. RRS1, Japan)", - "ridgerac", "Ridge Racer (Rev. RR3, World)", - "ridgerac3", "Ridge Racer (Rev. RR2 Ver.B, World, 3-screen?)", - "ridgeracb", "Ridge Racer (Rev. RR2, World)", - "ridgeracf", "Ridge Racer Full Scale (World)", - "ridgeracj", "Ridge Racer (Rev. RR1, Japan)", - "ridhero", "Riding Hero (NGM-006)(NGH-006)", - "ridheroh", "Riding Hero (set 2)", - "ridingf", "Riding Fight (Ver 1.0O)", - "ridingfj", "Riding Fight (Ver 1.0J)", - "ridingfu", "Riding Fight (Ver 1.0A)", - "ridleofp", "Riddle of Pythagoras (Japan)", - "rimrockn", "Rim Rockin' Basketball (V2.2)", - "rimrockn12", "Rim Rockin' Basketball (V1.2)", - "rimrockn16", "Rim Rockin' Basketball (V1.6)", - "rimrockn20", "Rim Rockin' Basketball (V2.0)", - "ringdest", "Ring of Destruction: Slammasters II (Euro 940902)", - "ringdesta", "Ring of Destruction: Slammasters II (Asia 940831)", - "ringdstd", "Ring of Destruction: Slammasters II (Euro 940902 Phoenix Edition) (bootleg)", - "ringfgt", "Ring Fighter (set 1)", - "ringfgt2", "Ring Fighter (set 2)", - "ringking", "Ring King (US set 1)", - "ringking2", "Ring King (US set 2)", - "ringking3", "Ring King (US set 3)", - "ringkingw", "Ring King (US, Wood Place Inc.)", - "ringohja", "Ring no Ohja (Japan 2 Players ver. N)", - "ringout", "Ring Out 4x4", - "ringrage", "Ring Rage (Ver 2.3O 1992/08/09)", - "ringragej", "Ring Rage (Ver 2.3J 1992/08/09)", - "ringrageu", "Ring Rage (Ver 2.3A 1992/08/09)", - "rio", "Rio", - "riot", "Riot", - "riotcity", "Riot City (Japan)", - "rip300", "Ripley's Believe It or Not! (3.00)", - "rip301", "Ripley's Believe It or Not! (3.01)", - "rip302", "Ripley's Believe It or Not! (3.02)", - "rip310", "Ripley's Believe It or Not! (3.10)", - "ripcord", "Rip Cord", - "ripf300", "Ripley's Believe It or Not! (3.00 France)", - "ripf301", "Ripley's Believe It or Not! (3.01 France)", - "ripf302", "Ripley's Believe It or Not! (3.02 France)", - "ripf310", "Ripley's Believe It or Not! (3.10 France)", - "ripg300", "Ripley's Believe It or Not! (3.00 Germany)", - "ripg301", "Ripley's Believe It or Not! (3.01 Germany)", - "ripg302", "Ripley's Believe It or Not! (3.02 Germany)", - "ripg310", "Ripley's Believe It or Not! (3.10 Germany)", - "ripi300", "Ripley's Believe It or Not! (3.00 Italy)", - "ripi301", "Ripley's Believe It or Not! (3.01 Italy)", - "ripi302", "Ripley's Believe It or Not! (3.02 Italy)", - "ripi310", "Ripley's Believe It or Not! (3.10 Italy)", - "ripl300", "Ripley's Believe It or Not! (3.00 Spain)", - "ripl301", "Ripley's Believe It or Not! (3.01 Spain)", - "ripl302", "Ripley's Believe It or Not! (3.02 Spain)", - "ripl310", "Ripley's Believe It or Not! (3.10 Spain)", - "ripleys", "Ripley's Believe It or Not! (3.20)", - "ripleysf", "Ripley's Believe It or Not! (3.20 France)", - "ripleysg", "Ripley's Believe It or Not! (3.20 Germany)", - "ripleysi", "Ripley's Believe It or Not! (3.20 Italy)", - "ripleysl", "Ripley's Believe It or Not! (3.20 Spain)", - "ripoff", "Rip Off", - "ripribit", "Ripper Ribbit (Version 2.8.4)", - "riskchal", "Risky Challenge", - "riviera", "Riviera Hi-Score (2131-08, U5-4A)", - "rivieraa", "Riviera Hi-Score (2131-08, U5-4)", - "rivierab", "Riviera Hi-Score (2131-08, U5-2D)", - "rjammer", "Roller Jammer", - "rltennis", "Reality Tennis", - "rmancp2j", "Rockman: The Power Battle (CPS2, Japan 950922)", - "rmgoldyh", "Real Mahjong Gold Yumehai / Super Real Mahjong GOLD part.2 [BET] (Japan)", - "rmhaihai", "Real Mahjong Haihai (Japan)", - "rmhaihib", "Real Mahjong Haihai [BET] (Japan)", - "rmhaijin", "Real Mahjong Haihai Jinji Idou Hen (Japan)", - "rmhaisei", "Real Mahjong Haihai Seichouhen (Japan)", - "rmpgwt", "Rampage: World Tour (rev 1.3)", - "rmpgwt11", "Rampage: World Tour (rev 1.1)", - "roadblst", "Road Blasters (upright, rev 4)", - "roadblst1", "Road Blasters (upright, rev 1)", - "roadblst2", "Road Blasters (upright, rev 2)", - "roadblst3", "Road Blasters (upright, rev 3)", - "roadblstc", "Road Blasters (cockpit, rev 2)", - "roadblstc1", "Road Blasters (cockpit, rev 1)", - "roadblstcg", "Road Blasters (cockpit, German, rev 1)", - "roadblstg", "Road Blasters (upright, German, rev 3)", - "roadblstg1", "Road Blasters (upright, German, rev 1)", - "roadblstg2", "Road Blasters (upright, German, rev 2)", - "roadburn", "Road Burners", - "roadedge", "Roads Edge / Round Trip (rev.B)", - "roadf", "Road Fighter (set 1)", - "roadf2", "Road Fighter (set 2)", - "roadriot", "Road Riot 4WD (set 1, 13 Nov 1991)", - "roadrioto", "Road Riot 4WD (set 2, 04 Jun 1991)", - "roadrunm", "Road Runner (Midway)", - "roadrunn", "Road Runner (rev 2)", - "roadrunn1", "Road Runner (rev 1)", - "roadrunn2", "Road Runner (rev 1+)", - "roadrunr", "Road Runner", - "robadv", "Robin's Adventure (Version 1.7E Dual)", - "robadv2", "Robin's Adventure 2 (Version 1.7E Dual)", - "robadv2c1", "Robin's Adventure 2 (Version 1.7R, set 1)", - "robadv2c2", "Robin's Adventure 2 (Version 1.7LT, set 1)", - "robadv2c3", "Robin's Adventure 2 (Version 1.7SH, set 1)", - "robadv2d1", "Robin's Adventure 2 (Version 1.7R, set 2)", - "robadv2d2", "Robin's Adventure 2 (Version 1.7LT, set 2)", - "robadv2d3", "Robin's Adventure 2 (Version 1.7SH, set 2)", - "robadv2o", "Robin's Adventure 2 (Version 1.5SH)", - "robadv2o2", "Robin's Adventure 2 (Version 1.5)", - "robadv2v1", "Robin's Adventure 2 (Version 1.7R Dual)", - "robadv2v2", "Robin's Adventure 2 (Version 1.7LT Dual)", - "robadv2v3", "Robin's Adventure 2 (Version 1.7SH Dual)", - "robadvc1", "Robin's Adventure (Version 1.7R, set 1)", - "robadvd1", "Robin's Adventure (Version 1.7R, set 2)", - "robadvo", "Robin's Adventure (Version 1.5)", - "robadvv1", "Robin's Adventure (Version 1.7R Dual)", - "robby", "The Adventures of Robby Roto!", - "robo_a34", "Robocop (3.4)", - "roboarmy", "Robo Army", - "robocop", "Robocop (World revision 4)", - "robocop2", "Robocop 2 (Euro/Asia v0.10)", - "robocop2j", "Robocop 2 (Japan v0.11)", - "robocop2u", "Robocop 2 (US v0.05)", - "robocopb", "Robocop (World bootleg)", - "robocopj", "Robocop (Japan)", - "robocopu", "Robocop (US revision 1)", - "robocopu0", "Robocop (US revision 0)", - "robocopw", "Robocop (World revision 3)", - "robokid", "Atomic Robo-kid", - "robokidj", "Atomic Robo-kid (Japan, set 1)", - "robokidj2", "Atomic Robo-kid (Japan, set 2)", - "robot", "Robot (Zaccaria)", - "robotbwl", "Robot Bowl", - "robotf", "Robot (Zaccaria, French speech)", - "robotg", "Robot (Zaccaria, German speech)", - "roboti", "Robot (Zaccaria, Italian speech)", - "robotron", "Robotron: 2084 (Solid Blue label)", - "robotronyo", "Robotron: 2084 (Yellow/Orange label)", - "robowars", "Robo-War", - "robowres", "Robo Wres 2001", - "robowresb", "Robo Wres 2001 (bootleg)", - "rock", "Rock", - "rock2500", "Rock 2500", - "rock_enc", "Rock Encore", - "rockclim", "Rock Climber", - "rockduck", "Rock Duck (prototype?)", - "rockman2j", "Rockman 2: The Power Fighters (Japan 960708)", - "rockmanj", "Rockman: The Power Battle (CPS1, Japan 950922)", - "rockn", "Rock'n Tread (Japan)", - "rockn2", "Rock'n Tread 2 (Japan)", - "rockn3", "Rock'n 3 (Japan)", - "rockn4", "Rock'n 4 (Japan, prototype)", - "rockna", "Rock'n Tread (Japan, alternate)", - "rocknms", "Rock'n MegaSession (Japan)", - "rockrage", "Rock'n Rage (World)", - "rockragea", "Rock'n Rage (prototype?)", - "rockragej", "Koi no Hotrock (Japan)", - "rocktris", "Rock Tris", - "rocktrv2", "MTV Rock-N-Roll Trivia (Part 2)", - "rocky", "Rocky", - "rocnrope", "Roc'n Rope", - "rocnropek", "Roc'n Rope (Kosuka)", - "rodland", "Rod-Land (World)", - "rodlandj", "Rod-Land (Japan)", - "rodlandjb", "Rod-Land (Japan bootleg)", - "rohga", "Rohga Armor Force (Asia/Europe v5.0)", - "rohga1", "Rohga Armor Force (Asia/Europe v3.0 set 1)", - "rohga2", "Rohga Armor Force (Asia/Europe v3.0 set 2)", - "rohgah", "Rohga Armor Force (Hong Kong v3.0)", - "rohgau", "Rohga Armor Force (US v1.0)", - "roishtar", "The Return of Ishtar", - "roldfrog", "The Return of Lady Frog (set 1)", - "roldfroga", "The Return of Lady Frog (set 2)", - "roldisco", "Roller Disco", - "rollace", "Roller Aces (set 1)", - "rollace2", "Roller Aces (set 2)", - "rollerg", "Rollergames (US)", - "rollergj", "Rollergames (Japan)", - "rollfr_2", "Roll Fruit (040318)", - "rollfr_3", "Roll Fruit (080327)", - "rollfr_4", "Roll Fruit (080331)", - "rollingc", "Rolling Crash / Moon Base", - "rollr_e1", "Rollergames (PU-1)", - "rollr_ex", "Rollergames (EXPERIMENTAL)", - "rollr_g3", "Rollergames (LG-3) Germany", - "rollr_l2", "Rollergames (L-2)", - "rollr_l3", "Rollergames (LU-3) Europe", - "rollr_p2", "Rollergames (PA-2 / PA-1 Sound)", - "rollston", "Rolling Stones", - "romanl", "Roman Legions (Konami Endeavour)", - "rompers", "Rompers (Japan, new version (Rev B))", - "romperso", "Rompers (Japan, old version)", - "rongrong", "Puzzle Game Rong Rong (Europe)", - "rongrongg", "Puzzle Game Rong Rong (Germany)", - "rongrongj", "Puzzle Game Rong Rong (Japan)", - "ronjan", "Ron Jan (Super)", - "ropeman", "Ropeman (bootleg of Roc'n Rope)", - "rotaryf", "Rotary Fighter", - "rotation", "Rotation VIII", - "rotd", "Rage of the Dragons (NGM-264?)", - "rotr", "Rise of the Robots (prototype)", - "roughrac", "Rough Racer (Japan, Floppy Based, FD1094 317-0058-06b)", - "rougien", "Rougien", - "roul", "Super Lucky Roulette", - "roundup", "Round-Up", - "roundup5", "Round Up 5 - Super Delta Force", - "route16", "Route 16 (set 1)", - "route16a", "Route 16 (set 2)", - "route16b", "Route 16 (bootleg)", - "routex", "Route X (bootleg)", - "royal", "Royal (Pool 10 hack)", - "royalcdfr", "Royal Card (French)", - "royalcrd", "Royal Card (Austrian, set 1)", - "royalcrda", "Royal Card (Austrian, set 2)", - "royalcrdb", "Royal Card (Austrian/Polish, set 3)", - "royalcrdc", "Royal Card (Austrian, set 4)", - "royalcrdd", "Royal Card (Austrian, set 5)", - "royalcrde", "Royal Card (Austrian, set 6)", - "royalcrdf", "Royal Card (Slovak, encrypted)", - "royalcrdg", "Royal Card (Austrian, set 7, CMC C1030 HW)", - "royalcrdp", "Royal Card v2.0 Professional", - "royalcrdt", "Royal Card (TAB original)", - "royale", "Royale (set 1)", - "royalea", "Royale (set 2)", - "royalmah", "Royal Mahjong (Falcon bootleg, v1.01)", - "royalmj", "Royal Mahjong (Japan, v1.13)", - "royalngt", "Royal Night [BET] (Japan 840220 RN 2-00)", - "royalqn", "Royal Queen [BET] (Japan 841010 RQ 0-07)", - "royclark", "Roy Clark - The Entertainer", - "roylcrdn", "Royal Card (Nichibutsu)", - "roypok96", "Royal Poker '96 (set 1)", - "roypok96a", "Royal Poker '96 (set 2)", - "roypok96b", "Royal Poker '96 (set 3)", - "rpatrol", "River Patrol (Orca)", - "rpatrolb", "River Patrol (bootleg)", - "rpunch", "Rabbit Punch (US)", - "rranger", "Rough Ranger (v2.0)", - "rrangerb", "Rough Ranger (v2.0, bootleg)", - "rrreveng", "Road Riot's Revenge (prototype, Sep 06, 1994)", - "rrrevenga", "Road Riot's Revenge (prototype, Jan 27, 1994, set 1)", - "rrrevengb", "Road Riot's Revenge (prototype, Jan 27, 1994, set 2)", - "rrvac", "Ridge Racer V Arcade Battle (RRV3 Ver. A)", - "rs_l6", "Red and Ted's Road Show (L-6)", - "rs_la4", "Red and Ted's Road Show (La-4)", - "rs_la5", "Red and Ted's Road Show (La-5)", - "rs_lx2", "Red and Ted's Road Show (Lx-2)", - "rs_lx3", "Red and Ted's Road Show (Lx-3)", - "rs_lx4", "Red and Ted's Road Show (Lx-4)", - "rs_lx5", "Red and Ted's Road Show (Lx-5)", - "rsgun", "Radiant Silvergun (JUET 980523 V1.000)", - "rshark", "R-Shark", - "rthun2", "Rolling Thunder 2", - "rthun2j", "Rolling Thunder 2 (Japan)", - "rthunder", "Rolling Thunder (rev 3)", - "rthunder1", "Rolling Thunder (rev 1)", - "rthunder2", "Rolling Thunder (rev 2)", - "rtriv", "Romar Triv", - "rtype", "R-Type (World)", - "rtype2", "R-Type II", - "rtype2j", "R-Type II (Japan)", - "rtype2jc", "R-Type II (Japan, revision C)", - "rtypeb", "R-Type (World bootleg)", - "rtypej", "R-Type (Japan)", - "rtypejp", "R-Type (Japan prototype)", - "rtypeleo", "R-Type Leo (World)", - "rtypeleoj", "R-Type Leo (Japan)", - "rtypeu", "R-Type (US)", - "rugby", "Rugby? (four roses hardware)", - "rugrats", "Rug Rats", - "rumba", "Rumba Lumber", - "rumblef", "The Rumble Fish", - "rumblef2", "The Rumble Fish 2", - "runark", "Runark (Japan)", - "runaway", "Runaway (prototype)", - "rundeep", "Run Deep", - "rungun", "Run and Gun (ver EAA 1993 10.8)", - "rungun2", "Run and Gun 2 (ver UAA)", - "runguna", "Run and Gun (ver EAA 1993 10.4)", - "rungunu", "Run and Gun (ver UAB 1993 10.12)", - "rungunua", "Run and Gun (ver UBA 1993 10.8)", - "rushatck", "Rush'n Attack (US)", - "rushcrsh", "Rush & Crash (Japan)", - "rushhero", "Rushing Heroes (ver UAB)", - "rvrbt_l3", "Riverboat Gambler (L-3)", - "rvschool", "Rival Schools: United By Fate (Euro 971117)", - "rvschoola", "Rival Schools: United By Fate (Asia 971117)", - "rvschoolu", "Rival Schools: United By Fate (USA 971117)", - "rygar", "Rygar (US set 1)", - "rygar2", "Rygar (US set 2)", - "rygar3", "Rygar (US set 3 Old Version)", - "rygarj", "Argus no Senshi (Japan)", - "ryorioh", "Gourmet Battle Quiz Ryohrioh CooKing (Japan)", - "ryouran", "VS Mahjong Otome Ryouran", - "ryujin", "Ryu Jin (Japan)", - "ryukendn", "Ninja Ryukenden (Japan, set 1)", - "ryukendna", "Ninja Ryukenden (Japan, set 2)", - "ryukobou", "Mahjong Ryukobou (Japan, V030J)", - "ryukyu", "RyuKyu (Japan, FD1094 317-5023)", - "ryuuha", "Ryuuha [BET] (Japan 871027)", - "s1945", "Strikers 1945 (World)", - "s1945a", "Strikers 1945 (Japan / World)", - "s1945bl", "Strikers 1945 (Hong Kong, bootleg)", - "s1945ii", "Strikers 1945 II", - "s1945iii", "Strikers 1945 III (World) / Strikers 1999 (Japan)", - "s1945j", "Strikers 1945 (Japan)", - "s1945jn", "Strikers 1945 (Japan, unprotected)", - "s1945k", "Strikers 1945 (Korea)", - "s1945p", "Strikers 1945 Plus", - "s80tst", "System 80 Test", - "sabotenb", "Saboten Bombers (set 1)", - "sabotenba", "Saboten Bombers (set 2)", - "sadari", "Sadari", - "safari", "Safari (set 1)", - "safaria", "Safari (set 2, bootleg?)", - "safarir", "Safari Rally (World)", - "safarirj", "Safari Rally (Japan)", - "safemon", "Safe Money (Konami Endeavour)", - "sagaia", "Sagaia (dual screen) (World)", - "sailormn", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Europe)", - "sailormnh", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Hong Kong)", - "sailormnj", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Japan)", - "sailormnk", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Korea)", - "sailormno", "Pretty Soldier Sailor Moon (Ver. 95/03/22, Europe)", - "sailormnoh", "Pretty Soldier Sailor Moon (Ver. 95/03/22, Hong Kong)", - "sailormnoj", "Pretty Soldier Sailor Moon (Ver. 95/03/22, Japan)", - "sailormnok", "Pretty Soldier Sailor Moon (Ver. 95/03/22, Korea)", - "sailormnot", "Pretty Soldier Sailor Moon (Ver. 95/03/22, Taiwan)", - "sailormnou", "Pretty Soldier Sailor Moon (Ver. 95/03/22, USA)", - "sailormnt", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, Taiwan)", - "sailormnu", "Pretty Soldier Sailor Moon (Ver. 95/03/22B, USA)", - "sailorwa", "Mahjong Sailor Wars (Japan set 2)", - "sailorwr", "Mahjong Sailor Wars-R [BET] (Japan)", - "sailorws", "Mahjong Sailor Wars (Japan set 1)", - "saiyugou", "Sai Yu Gou Ma Roku (Japan)", - "saiyugoub1", "Sai Yu Gou Ma Roku (Japan bootleg 1)", - "saiyugoub2", "Sai Yu Gou Ma Roku (Japan bootleg 2)", - "saiyukip", "Slot Poker Saiyuki (Japan)", - "saklove", "Ying Hua Lian 2.0 (China, Ver. 1.02)", - "salamand", "Salamander (version D)", - "salamandj", "Salamander (version J)", - "salarymc", "Salary Man Champ (GCA18 VER. JAA)", - "salmankt", "Salary Man Kintarou", - "salmndr2", "Salamander 2 (ver JAA)", - "salmndr2a", "Salamander 2 (ver AAB)", - "saloon", "Saloon (French, encrypted)", - "samba", "Samba De Amigo (JPN) (Rev B)", - "samba2k", "Samba de Amigo ver. 2000", - "sambap", "Samba De Amigo (prototype)", - "samesame", "Same! Same! Same! (1P set)", - "samesame2", "Same! Same! Same! (2P set)", - "sammymdl", "Sammy Medal Game System Bios", - "sams64", "Samurai Shodown 64 / Samurai Spirits 64", - "sams64_2", "Samurai Shodown: Warrior's Rage / Samurai Spirits 2: Asura Zanmaden", - "samsh5sp", "Samurai Shodown V Special / Samurai Spirits Zero Special (NGM-2720)", - "samsh5sph", "Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720) (2nd release, less censored)", - "samsh5spho", "Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720) (1st release, censored)", - "samsho", "Samurai Shodown / Samurai Spirits (NGM-045)", - "samsho2", "Samurai Shodown II / Shin Samurai Spirits - Haohmaru jigokuhen (NGM-063)(NGH-063)", - "samsho2k", "Saulabi Spirits / Jin Saulabi Tu Hon (Korean release of Samurai Shodown II)", - "samsho3", "Samurai Shodown III / Samurai Spirits - Zankurou Musouken (NGM-087)", - "samsho3h", "Samurai Shodown III / Samurai Spirits - Zankurou Musouken (NGH-087)", - "samsho4", "Samurai Shodown IV - Amakusa's Revenge / Samurai Spirits - Amakusa Kourin (NGM-222)(NGH-222)", - "samsho4k", "Pae Wang Jeon Seol / Legend of a Warrior (Korean censored Samurai Shodown IV)", - "samsho5", "Samurai Shodown V / Samurai Spirits Zero (NGM-2700)", - "samsho5b", "Samurai Shodown V / Samurai Spirits Zero (bootleg)", - "samsho5h", "Samurai Shodown V / Samurai Spirits Zero (NGH-2700)", - "samshoh", "Samurai Shodown / Samurai Spirits (NGH-045)", - "samspsen", "Samurai Spirits Sen (v1.00)", - "samsptk", "Samurai Spirits Tenkaichi Kenkakuden", - "samurai", "Samurai", - "samuraia", "Samurai Aces (World)", - "sandor", "Puzzle & Action: Sando-R (J 951114 V1.000)", - "sandscrp", "Sand Scorpion", - "sandscrpa", "Sand Scorpion (Earlier)", - "sandscrpb", "Sand Scorpion (Chinese Title Screen, Revised Hardware)", - "sanjeon", "DaeJeon! SanJeon SuJeon (AJTUE 990412 V1.000)", - "santam", "Santa Maria (Russia) (Atronic)", - "sarge", "Sarge", - "sarukani", "Saru-Kani-Hamu-Zou (Japan)", - "sasissu", "Taisen Tanto-R Sashissu!! (J 980216 V1.000)", - "sasuke", "Sasuke vs. Commander", - "satansat", "Satan of Saturn (set 1)", - "satansata", "Satan of Saturn (set 2)", - "satansatind", "Satan of Saturn (Inder S.A., bootleg)", - "saturn2", "Saturn 2", - "saturnzi", "Saturn", - "sauro", "Sauro", - "saurop", "Sauro (Philko license)", - "savagere", "Savage Reign / Fu'un Mokushiroku - kakutou sousei", - "savanna", "Savanna (Jungler bootleg)", - "savgbees", "Savage Bees", - "savquest", "Savage Quest", - "sb2003", "Super Bubble 2003 (World, Ver 1.0)", - "sb2003a", "Super Bubble 2003 (Asia, Ver 1.0)", - "sbagman", "Super Bagman", - "sbagmans", "Super Bagman (Stern Electronics)", - "sbasebal", "Super Champion Baseball (US)", - "sbasketb", "Super Basketball (version I, encrypted)", - "sbaskete", "Super Basketball (version E, encrypted)", - "sbasketg", "Super Basketball (version G, encrypted)", - "sbasketh", "Super Basketball (version H, unprotected)", - "sbbros", "Super Buster Bros. (USA 901001)", - "sbdk", "Super Bike (DK conversion)", - "sbishi", "Super Bishi Bashi Championship (ver JAA, 2 Players)", - "sbishik", "Super Bishi Bashi Championship (ver KAA, 3 Players)", - "sblast2b", "Sonic Blast Man 2 Special Turbo (SNES bootleg)", - "sblazerp", "Star Blazer (Pioneer LDV1000)", - "sbm", "Sonic Blast Man (Japan)", - "sboblboa", "Super Bobble Bobble (set 1)", - "sboblbob", "Super Bobble Bobble (set 2)", - "sbomber", "Space Bomber (ver. B)", - "sbombera", "Space Bomber", - "sbowling", "Strike Bowling", - "sbp", "Super Bubble Pop", - "sbrkout", "Super Breakout (rev 04)", - "sbrkout3", "Super Breakout (rev 03)", - "sbsgomo", "Space Battle Ship Gomorrah", - "sbugger", "Space Bugger (set 1)", - "sbuggera", "Space Bugger (set 2)", - "sburners", "Street Burners [TTL]", - "sc1actv8", "Active 8 (Dutch) (Bellfruit) (Scorpion 1)", - "sc1armad", "Armada (Dutch) (Bellfruit) (Scorpion 1)", - "sc1barcd", "Barcode (Bellfruit) (set 1) (Scorpion 1)", - "sc1barcda", "Barcode (Bellfruit) (set 2) (Scorpion 1)", - "sc1bartk", "Bar Trek (Bellfruit) (Scorpion 1)", - "sc1bigmt", "The Big Match (Dutch) (Bellfruit) (Scorpion 1)", - "sc1boncl", "Bonanza Club (unknown) (Scorpion 1)", - "sc1btbc", "Beat The Bank Club (unknown) (Scorpion 1?)", - "sc1btclk", "Beat The Clock (Mdm) (set 1) (Scorpion 2/3?)", - "sc1btclka", "Beat The Clock (Mdm) (set 2) (Scorpion 2/3?)", - "sc1btclkb", "Beat The Clock (Mdm) (set 3) (Scorpion 2/3?)", - "sc1calyp", "Calypso (Dutch) (Bellfruit) (Scorpion 1)", - "sc1carro", "Carrousel (Dutch) (Bellfruit) (Scorpion 1)", - "sc1ccoin", "Cash Coin (Dutch) (Bellfruit) (Scorpion 1)", - "sc1ccroc", "Crazy Crocs (Mdm) (set 1) (Scorpion 2/3?)", - "sc1ccroca", "Crazy Crocs (Mdm) (set 2) (Scorpion 2/3?)", - "sc1ccrocb", "Crazy Crocs (Mdm) (set 3) (Scorpion 2/3?)", - "sc1ccrocc", "Crazy Crocs (Mdm) (set 4) (Scorpion 2/3?)", - "sc1cdm", "Club Diamond (Crystal) (set 1) (Scorpion 1)", - "sc1cdmp", "Club Diamond (Crystal) (set 1, Protocol) (Scorpion 1)", - "sc1cexpd", "Cash Explosion (Dutch) (Bellfruit) (Scorpion 1)", - "sc1cexpl", "Cash Explosion (Bellfruit) (set 1) (Scorpion 1)", - "sc1cexpla", "Cash Explosion (Bellfruit) (set 2) (Scorpion 1)", - "sc1cexplb", "Cash Explosion (Bellfruit) (set 3) (Scorpion 1)", - "sc1chain", "Chain Reaction (Bellfruit) (set 1) (Scorpion 1)", - "sc1chainp", "Chain Reaction (Bellfruit) (set 1, Protocol) (Scorpion 1)", - "sc1china", "China Town Club (Bellfruit) (set 2) (Scorpion 1)", - "sc1chinaa", "China Town Club (Bellfruit) (set 1) (Scorpion 1)", - "sc1chinaap", "China Town Club (Bellfruit) (set 1, Protocol) (Scorpion 1)", - "sc1chinab", "China Town Club (Bellfruit) (set 3) (Scorpion 1)", - "sc1chinabp", "China Town Club (Bellfruit) (set 3, Protocol) (Scorpion 1)", - "sc1chinap", "China Town Club (Bellfruit) (set 2, Protocol) (Scorpion 1)", - "sc1chqfl", "Chequered Flag (Global)", - "sc1cl2k", "Club 2000 (Dutch) (Bellfruit) (Scorpion 1)", - "sc1cl2k1", "Club 2001 (Dutch (Bellfruit) (Scorpion 1)", - "sc1cl65", "Club 65 Special (Bellfruit) (set 1) (Scorpion 1)", - "sc1cl65a", "Club 65 Special (Bellfruit) (set 5) (Scorpion 1)", - "sc1cl65ap", "Club 65 Special (Bellfruit) (set 5, Protocol) (Scorpion 1)", - "sc1cl65b", "Club 65 Special (Bellfruit) (set 4) (Scorpion 1)", - "sc1cl65bp", "Club 65 Special (Bellfruit) (set 4, Protocol) (Scorpion 1)", - "sc1cl65c", "Club 65 Special (Bellfruit) (set 3) (Scorpion 1)", - "sc1cl65cp", "Club 65 Special (Bellfruit) (set 3, Protocol) (Scorpion 1)", - "sc1cl65d", "Club 65 Special (Bellfruit) (set 2) (Scorpion 1)", - "sc1cl65dp", "Club 65 Special (Bellfruit) (set 2, Protocol) (Scorpion 1)", - "sc1class", "Classic (Dutch) (Bellfruit) (Scorpion 1)", - "sc1clatt", "Club Attraction (UK, Game Card 39-370-196)", - "sc1clatta", "Club Attraction (set 2)", - "sc1clb3", "Club 3000 (Dutch) (Bellfruit) (Scorpion 1)", - "sc1clbdm", "Club Diamond (Dutch) (Bellfruit) (Scorpion 1)", - "sc1clbdy", "Club Dynamite (Global) (set 1)", - "sc1clbdya", "Club Dynamite (Global) (set 2)", - "sc1clbrn", "Club Runner (Dutch) (unknown) (Scorpion 1)", - "sc1clbsp", "Club Spinner (Dutch) (unknown) (Scorpion 1)", - "sc1clbtm", "Club Temptation (Bellfruit) (set 1) (Scorpion 1)", - "sc1clbtma", "Club Temptation (Bellfruit) (set 2) (Scorpion 1)", - "sc1clbw", "Club Wise (Bellfruit) (set 2) (Scorpion 1)", - "sc1clbwa", "Club Wise (Bellfruit) (set 1) (Scorpion 1)", - "sc1clbxp", "Club Explosion (Bellfruit) (Scorpion 1) (set 1)", - "sc1clbxpa", "Club Explosion (Bellfruit) (Scorpion 1) (set 2)", - "sc1clins", "Cash Lines (Bellfruit) (Scorpion 1) (set 1)", - "sc1clinsa", "Cash Lines (Bellfruit) (Scorpion 1) (set 2)", - "sc1clinsb", "Cash Lines (Bellfruit) (Scorpion 1) (set 3)", - "sc1clinsc", "Cash Lines (Bellfruit) (Scorpion 1) (set 4)", - "sc1clinsd", "Cash Lines (Bellfruit) (Scorpion 1) (set 5)", - "sc1clinse", "Cash Lines (Bellfruit) (Scorpion 1) (set 6)", - "sc1clown", "Clown Around (Dutch) (Bellfruit) (Scorpion 1)", - "sc1copdd", "Cops 'n' Robbers Deluxe (Dutch) (Bellfruit) (Scorpion 1)", - "sc1copdx", "Cops 'n' Robbers (Bellfruit) (set 3) (Scorpion 1)", - "sc1cops", "Cops 'n' Robbers (Bellfruit) (set 1) (Scorpion 1)", - "sc1copsa", "Cops 'n' Robbers (Bellfruit) (set 2) (Scorpion 1)", - "sc1count", "Count Cash Club (Bellfruit) (set 2) (Scorpion 1)", - "sc1counta", "Count Cash Club (Bellfruit) (set 1) (Scorpion 1)", - "sc1countap", "Count Cash Club (Bellfruit) (set 1, Protocol) (Scorpion 1)", - "sc1countp", "Count Cash Club (Bellfruit) (set 2, Protocol) (Scorpion 1)", - "sc1crocr", "Croc And Roll (Mdm) (Scorpion 2/3?)", - "sc1crzyc", "Crazy Cash (Global) (set 1)", - "sc1crzyca", "Crazy Cash (Global) (set 2)", - "sc1cscl", "Cash Classic (Global) (set 1)", - "sc1cscla", "Cash Classic (Global) (set 2)", - "sc1cshat", "Cash Attraction (Bellfruit) (set 5, Protocol) (Scorpion 1)", - "sc1cshata", "Cash Attraction (Bellfruit) (set 1) (Scorpion 1)", - "sc1cshatb", "Cash Attraction (Bellfruit) (set 5) (Scorpion 1)", - "sc1cshatc", "Cash Attraction (Bellfruit) (set 2) (Scorpion 1)", - "sc1cshatf", "Cash Attraction (Bellfruit) (set 2, Protocol) (Scorpion 1)", - "sc1cshatg", "Cash Attraction (Bellfruit) (set 4, Protocol) (Scorpion 1)", - "sc1cshath", "Cash Attraction (Bellfruit) (set 3, Protocol) (Scorpion 1)", - "sc1cshati", "Cash Attraction (Bellfruit) (set 1, Protocol) (Scorpion 1)", - "sc1cshcd", "Cash Card (Dutch) (Bellfruit) (Scorpion 1)", - "sc1cshcda", "Cash Card (Bellfruit) (set 1) (Scorpion 1)", - "sc1cshcdb", "Cash Card (Bellfruit) (set 2) (Scorpion 1)", - "sc1cshin", "Cashino (Dutch) (Bellfruit) (Scorpion 1)", - "sc1cshwz", "Cash Wise (Bellfruit) (set 2) (Scorpion 1)", - "sc1cshwza", "Cash Wise (Bellfruit) (set 1) (Scorpion 1)", - "sc1cshwzb", "Cash Wise (Bellfruit) (set 3) (Scorpion 1)", - "sc1cshwzc", "Cash Wise (Bellfruit) (set 2, Protocol) (Scorpion 1)", - "sc1cshwzd", "Cash Wise (Bellfruit) (set 4, Protocol) (Scorpion 1)", - "sc1cshwze", "Cash Wise (Bellfruit) (set 1, Protocol) (Scorpion 1)", - "sc1cshwzf", "Cash Wise (Bellfruit) (set 3, Protocol) (Scorpion 1)", - "sc1cshwzg", "Cash Wise (Bellfruit) (set 4) (Scorpion 1)", - "sc1cwcl", "Clockwise (Bellfruit) (Scorpion 1)", - "sc1czbrk", "Crazy Break (Dutch) (unknown) (Scorpion 1)", - "sc1dago", "Dagobert's Vault (Dutch) (Elam) (Scorpion 1)", - "sc1days", "All In A Days Work (Global) (set 1)", - "sc1daysa", "All In A Days Work (Global) (set 2)", - "sc1dblch", "Double Chance (Bellfruit) (set 1) (Scorpion 1)", - "sc1dblcha", "Double Chance (Bellfruit) (set 2, bad) (Scorpion 1)", - "sc1dblchb", "Double Chance (Bellfruit) (set 3) (Scorpion 1)", - "sc1dip", "Diplomat (Eurocoin) (Scorpion 1)", - "sc1disc", "Discovey (Dutch) (Bellfruit) (Scorpion 1)", - "sc1dream", "Dream Machine (Dutch) (Bellfruit) (Scorpion 1)", - "sc1driv", "Driving School (Global) (set 1)", - "sc1driva", "Driving School (Global) (set 2)", - "sc1drivb", "Driving School (Global) (set 3)", - "sc1drivc", "Driving School (Global) (set 4)", - "sc1druby", "Diamonds & Rubys (Bellfruit) (Scorpion ?) (set 1)", - "sc1drubya", "Diamonds & Rubys (Bellfruit) (Scorpion ?) (set 2)", - "sc1energ", "Energy (Dutch) (unknown) (Scorpion 1)", - "sc1final", "Final Touch (Dutch) (unknown) (Scorpion 1)", - "sc1flash", "Flash (Dutch) (Bellfruit) (Scorpion 1)", - "sc1frpus", "Fruit Pursuit (Bellfruit) (set 1) (Scorpion 1?)", - "sc1frpusa", "Fruit Pursuit (Bellfruit) (set 2) (Scorpion 1?)", - "sc1frtln", "Fruit Lines (Dutch) (Bellfruit) (set 2) (Scorpion 1)", - "sc1fruit", "Fruit Lines (Dutch) (Bellfruit) (set 1) (Scorpion 1)", - "sc1funh", "Fun House Club (Bellfruit) (set 1) (Scorpion 1)", - "sc1funha", "Fun House Club (Bellfruit) (set 2) (Scorpion 1)", - "sc1funhp", "Fun House Club (Bellfruit) (set 1, Protocol, bad) (Scorpion 1)", - "sc1goldw", "Golden Winner (Bellfruit) (Scorpion ?)", - "sc1gprix", "Grand Prix (Dutch) (Dutch) (Bellfruit) (Scorpion 1)", - "sc1gslam", "Grand Slam (Dutch) (Bellfruit) (Scorpion 1)", - "sc1gtime", "Good Times (Dutch) (Bellfruit) (Scorpion 1)", - "sc1happy", "Happy Hour (Dutch) (Bellfruit) (Scorpion 1)", - "sc1hfcc", "Hi Flyer Club (Crystal) (set 1) (Scorpion 1)", - "sc1hfccp", "Hi Flyer Club (Crystal) (set 1, Protocol) (Scorpion 1)", - "sc1hipt", "High Point (Bellfruit) (Scorpion 1) (set 1)", - "sc1hipta", "High Point (Bellfruit) (Scorpion 1) (set 2)", - "sc1impc", "Impact (Dutch) (Bellfruit) (Scorpion 1)", - "sc1kings", "Kings Club (Dutch) (Bellfruit) (Scorpion 1)", - "sc1lamb", "Lambada (Eurocoin) (Scorpion 1)", - "sc1linx", "Linx (Bellfruit) (set 1) (Scorpion 1)", - "sc1linxa", "Linx (Bellfruit) (set 2) (Scorpion 1)", - "sc1linxp", "Linx (Bellfruit) (set 3, Protocol) (Scorpion 1)", - "sc1lotus", "Lotus SE (Dutch) (set 1)", - "sc1lotusa", "Lotus SE (Dutch) (set 2)", - "sc1ltdv", "Little Devil (Pcp)", - "sc1magc", "Magic Circle (Dutch) (Bellfruit) (Scorpion 1)", - "sc1manha", "Manhattan (Dutch) (Bellfruit) (Scorpion 1)", - "sc1mast", "Master Club (Dutch) (Bellfruit) (Scorpion 1)", - "sc1mist", "Mistral (Dutch) (Bellfruit) (Scorpion 1)", - "sc1moonl", "Moon Lite (Bwb)", - "sc1ofs56", "Only Fools and Horses (Bellfruit) (Scorpion 1?)", - "sc1olym", "Olympia (Dutch) (Bellfruit) (Scorpion 1)", - "sc1orac", "Oracle (Dutch) (Bellfruit) (Scorpion 1)", - "sc1pwrl", "Power Lines (Bellfruit) (set 1) (Scorpion 1)", - "sc1quat", "Quatro (Dutch) (Bellfruit) (Scorpion 1)", - "sc1rain", "Rainbow (Dutch) (Bellfruit) (Scorpion 1)", - "sc1re", "Reel Cash (Dutch) (Bellfruit) (Scorpion 1)", - "sc1reply", "Replay (Eurocoin) (Scorpion 1)", - "sc1rese", "Reel Cash SE (Dutch) (Bellfruit) (Scorpion 1)", - "sc1revo", "Revolution (Dutch) (Bellfruit) (Scorpion 1)", - "sc1rose", "Rose 'n' Crown (Dutch) (Bellfruit) (Scorpion 1)", - "sc1roul", "Roulette (Dutch, Game Card 39-360-129?)", - "sc1s1000", "Super 1000 (Deltasoft)", - "sc1sant", "Santana (Dutch) (Bellfruit) (Scorpion 1)", - "sc1sat", "Satellite (Dutch) (Bellfruit) (Scorpion 1)", - "sc1satse", "Satellite SE (Dutch) (Bellfruit) (Scorpion 1)", - "sc1scunk", "unknown Scorpion 1 'Super ?' (Bellfruit) (Scorpion 1)", - "sc1shan", "Shanghai (Dutch) (Bellfruit) (Scorpion 1)", - "sc1sir", "Strike It Rich (Bellfruit) (set 1) (Scorpion 1)", - "sc1sira", "Strike It Rich (Bellfruit) (set 3, bad) (Scorpion 1)", - "sc1sirb", "Strike It Rich (Bellfruit) (set 2) (Scorpion 1)", - "sc1sirc", "Strike It Rich (Bellfruit) (set 4, bad) (Scorpion 1)", - "sc1smoke", "Smokey Vs The Bandit (Mdm) (set 1) (Scorpion 2/3?)", - "sc1smokea", "Smokey Vs The Bandit (Mdm) (set 2) (Scorpion 2/3?)", - "sc1spct", "Spectre (Bellfruit) (set 1) (Scorpion 1)", - "sc1spcta", "Spectre (Bellfruit) (set 2) (Scorpion 1)", - "sc1spit", "Spitfire (Dutch) (Elam) (Scorpion 1)", - "sc1ster", "Sterling (Dutch) (Bellfruit) (Scorpion 1)", - "sc1str4", "Strike 4 (Dutch) (Bellfruit) (Scorpion 1) (set 1)", - "sc1str4a", "Strike 4 (Dutch) (Bellfruit) (Scorpion 1) (set 2)", - "sc1strk", "Strike (Dutch) (Bellfruit) (Scorpion 1)", - "sc1supfl", "Super Flush (Dutch) (Bellfruit) (Scorpion 1)", - "sc1sups", "Superstar (Dutch) (unknown) (Scorpion 1)", - "sc1t1k", "Top 1000 (Dutch) (Eurocoin) (Scorpion 1)", - "sc1tiara", "Tiara (Dutch) (Bellfruit) (Scorpion 1)", - "sc1torn", "Tornado (Dutch) (Bellfruit) (set 1) (Scorpion 1)", - "sc1torna", "Tornado (Dutch) (Bellfruit) (set 2) (Scorpion 1)", - "sc1tri", "Tri Star (Bellfruit) (set 1) (Scorpion 1)", - "sc1tria", "Tri Star (Bellfruit) (set 2) (Scorpion 1)", - "sc1triap", "Tri Star (Bellfruit) (set 2, Protocol) (Scorpion 1)", - "sc1trib", "Tri Star (Bellfruit) (set 3) (Scorpion 1)", - "sc1tribp", "Tri Star (Bellfruit) (set 3, Protocol) (Scorpion 1)", - "sc1twice", "Twice As Nice (Associated Leisure) (Scorpion 1)", - "sc1typ", "Typhoon Club (Bellfruit) (set 1) (Scorpion 1)", - "sc1typp", "Typhoon Club (Bellfruit) (set 1, Protocol) (Scorpion 1)", - "sc1ult", "Ultimate (Dutch) (Bellfruit) (Scorpion 1)", - "sc1vent", "Ventura (Dutch) (Bellfruit) (Scorpion 1)", - "sc1vict", "Victory (Dutch) (Bellfruit) (Scorpion 1)", - "sc1voy", "Voyager (Dutch) (Elam) (set 1) (Scorpion 1)", - "sc1voya", "Voyager (Dutch) (Elam) (set 2) (Scorpion 1)", - "sc1vsd", "Vegas Super Deal (Global)", - "sc1winfl", "Winfalls (Dutch) (Bellfruit) (Scorpion 1)", - "sc1winst", "Winning Streak (Bellfruit) (set 1) (Scorpion 1)", - "sc1winsta", "Winning Streak (Bellfruit) (set 2) (Scorpion 1)", - "sc1winstp", "Winning Streak (Bellfruit) (set 1, Protocol) (Scorpion 1)", - "sc1wof", "Wheel Of Fortune (Global) (set 1)", - "sc1wofa", "Wheel Of Fortune (Global) (set 2)", - "sc1wofb", "Wheel Of Fortune (Global) (set 3)", - "sc1wthn", "Wild Thing (Eurocoin) (Scorpion 1)", - "sc1wud", "What's Up Dr (Scorpion 1?)", - "sc1zep", "Zeppelin (Dutch) (Elam) (Scorpion 1)", - "sc2bar7", "Bar 7 (Concept) (set 1)", - "sc2bar7a", "Bar 7 (Concept) (set 2)", - "sc2bar7b", "Bar 7 (Concept) (set 3)", - "sc2bar7c", "Bar 7 (Concept) (set 4)", - "sc2bar7d", "Bar 7 (Concept) (set 5)", - "sc2bar7e", "Bar 7 (Concept) (set 6)", - "sc2bar7f", "Bar 7 (Concept) (set 7)", - "sc2bar7g", "Bar 7 (Concept) (set 8)", - "sc2bar7h", "Bar 7 (Concept) (set 9)", - "sc2bar7i", "Bar 7 (Concept) (set 10)", - "sc2bar7j", "Bar 7 (Concept) (set 11)", - "sc2bar7k", "Bar 7 (Concept) (set 12)", - "sc2bbar7", "Big Bar 7 (Concept) (set 1)", - "sc2bbar7a", "Big Bar 7 (Concept) (set 2)", - "sc2bbar7b", "Big Bar 7 (Concept) (set 3)", - "sc2bbar7c", "Big Bar 7 (Concept) (set 4)", - "sc2bbar7d", "Big Bar 7 (Concept) (set 5)", - "sc2bbar7e", "Big Bar 7 (Concept) (set 6)", - "sc2bbar7f", "Big Bar 7 (Concept) (set 7)", - "sc2bbar7g", "Big Bar 7 (Concept) (set 8)", - "sc2bbar7h", "Big Bar 7 (Concept) (set 9)", - "sc2bbar7i", "Big Bar 7 (Concept) (set 10)", - "sc2bbar7j", "Big Bar 7 (Concept) (set 11)", - "sc2bbar7k", "Big Bar 7 (Concept) (set 12)", - "sc2bbar7l", "Big Bar 7 (Concept) (set 13)", - "sc2bbar7m", "Big Bar 7 (Concept) (set 14)", - "sc2bbar7n", "Big Bar 7 (Concept) (set 15)", - "sc2bbar7o", "Big Bar 7 (Concept) (set 16)", - "sc2bbar7p", "Big Bar 7 (Concept) (set 17)", - "sc2brkfs", "The Big Breakfast (set 2) (Scorpion 2/3)", - "sc2brkfs1", "The Big Breakfast (set 1 UK, Single Site) (Scorpion 2/3)", - "sc2brkfs1p", "The Big Breakfast (set 1 UK, Single Site, Protocol) (Scorpion 2/3)", - "sc2brkfs2", "The Big Breakfast (set 4 UK, Arcade, 8GBP Jackpot) (Scorpion 2/3)", - "sc2brkfs3", "The Big Breakfast (set 3) (Scorpion 2/3)", - "sc2brkfs3p", "The Big Breakfast (set 4 UK, Arcade, 8GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2brkfs4", "The Big Breakfast (set 5 UK, Arcade, 10GBP Jackpot) (Scorpion 2/3)", - "sc2brkfs4p", "The Big Breakfast (set 5 UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2brkfs5", "The Big Breakfast (set 6 UK, Arcade, 10GBP Jackpot) (Scorpion 2/3)", - "sc2brkfs5p", "The Big Breakfast (set 6 UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2brkfs6", "The Big Breakfast (set 3, Protocol) (Scorpion 2/3)", - "sc2brkfsm", "The Big Breakfast Casino (Scorpion 2/3)", - "sc2brkfsm1", "The Big Breakfast Casino (Mazooma, set 1) (Scorpion 2/3)", - "sc2brkfsm2", "The Big Breakfast Casino (Mazooma, set 2) (Scorpion 2/3)", - "sc2brkfsp", "The Big Breakfast (set 2, Protocol) (Scorpion 2/3)", - "sc2call", "It's Your Call (Global) (v2.7) (Scorpion 2/3)", - "sc2callc", "It's Your Call (Club?) (Global) (v1.6) (Scorpion 2/3)", - "sc2callcp", "It's Your Call (Club?) (Global) (v1.6 Protocol) (Scorpion 2/3)", - "sc2callp", "It's Your Call (Global) (v2.7 Protocol) (Scorpion 2/3)", - "sc2casr", "Casino Royale (Bellfruit) (set 5, UK, 10GBP Jackpot, 3rd Triennial) (Scorpion 2/3)", - "sc2casr1", "Casino Royale (Bellfruit) (set 4, UK, 3rd Triennial) (Scorpion 2/3)", - "sc2casr1p", "Casino Royale (Bellfruit) (set 4, UK, 3rd Triennial, Protocol) (Scorpion 2/3)", - "sc2casr2", "Casino Royale (Bellfruit) (set 3, UK) (Scorpion 2/3)", - "sc2casr2p", "Casino Royale (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", - "sc2casr3", "Casino Royale (Bellfruit) (set 1, UK, 8GBP Jackpot) (Scorpion 2/3)", - "sc2casr3p", "Casino Royale (Bellfruit) (set 1, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2casr4", "Casino Royale (Bellfruit) (set 2, UK) (Scorpion 2/3)", - "sc2casr4p", "Casino Royale (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", - "sc2casrp", "Casino Royale (Bellfruit) (set 5, UK, 10GBP Jackpot, 3rd Triennial, Protocol) (Scorpion 2/3)", - "sc2catms", "Cat & Mouse (Bellfruit) (set 4, Deluxe) (Scorpion 2/3)", - "sc2catms1", "Cat & Mouse (Bellfruit) (set 10) (Scorpion 2/3)", - "sc2catms1p", "Cat & Mouse (Bellfruit) (set 10, Protocol) (Scorpion 2/3)", - "sc2catms2", "Cat & Mouse (Bellfruit) (set 9) (Scorpion 2/3)", - "sc2catms2p", "Cat & Mouse (Bellfruit) (set 9, Protocol) (Scorpion 2/3)", - "sc2catms3", "Cat & Mouse (Bellfruit) (set 1) (Scorpion 2/3)", - "sc2cb7", "Super Bar 7 Casino (Bellfruit) (set 3, UK) (Scorpion 2/3)", - "sc2cb71", "Super Bar 7 Casino (Bellfruit) (set 1, UK, All Cash) (Scorpion 2/3)", - "sc2cb72", "Super Bar 7 Casino (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2cb72p", "Super Bar 7 Casino (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2cb7p", "Super Bar 7 Casino (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", - "sc2cexpl", "Cash Explosion (Bellfruit) (set 2, Protocol) (Scorpion 2)", - "sc2cexpla", "Cash Explosion (Bellfruit) (set 1, Protocol) (Scorpion 2)", - "sc2cexplb", "Cash Explosion (Bellfruit) (set 3, Protocol) (Scorpion 2)", - "sc2cexplc", "Cash Explosion (Bellfruit) (set 2) (Scorpion 2)", - "sc2cexpld", "Cash Explosion (Bellfruit) (set 1) (Scorpion 2)", - "sc2cexple", "Cash Explosion (Bellfruit) (set 3) (Scorpion 2)", - "sc2cgc", "Carrot Gold Club (Bellfruit) (Protocol) (Scorpion 2/3)", - "sc2cgcas", "Club Grand Casino (Bellfruit) (set 1) (Scorpion 2/3)", - "sc2cgcas1", "Club Grand Casino (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2cgcas1p", "Club Grand Casino (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2cgcasp", "Club Grand Casino (Bellfruit) (set 1, Protocol) (Scorpion 2/3)", - "sc2cmbt", "Cat & Mouse & Bonzo Too (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2cmbtp", "Cat & Mouse & Bonzo Too (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2cnile", "Cash On The Nile Club (Bellfruit) (set 2 UK, 150GBP Jackpot) (Scorpion 2/3)", - "sc2cnile1", "Cash On The Nile Club (Bellfruit) (set 1 UK, 150GBP Jackpot) (Scorpion 2/3)", - "sc2cnile2", "Cash On The Nile Club (Bellfruit) (set 3 UK, 200GBP Jackpot) (Scorpion 2/3)", - "sc2cnile2p", "Cash On The Nile Club (Bellfruit) (set 3 UK, 200GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2cnilep", "Cash On The Nile Club (Bellfruit) (set 2 UK, 150GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2copcl", "Cops 'n' Robbers Club (Bellfruit) (set 9, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2copcl1", "Cops 'n' Robbers Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2copcl10", "Cops 'n' Robbers Club (Bellfruit) (set 6, UK) (Scorpion 2/3)", - "sc2copcl11", "Cops 'n' Robbers Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2copcl11p", "Cops 'n' Robbers Club (Bellfruit) (set 11, UK, Protocol) (Scorpion 2/3)", - "sc2copcl12", "Cops 'n' Robbers Club (Bellfruit) (set 10, UK, Protocol) (Scorpion 2/3)", - "sc2copcl1p", "Cops 'n' Robbers Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2copcl2", "Cops 'n' Robbers Club (Bellfruit) (set 10, UK) (Scorpion 2/3)", - "sc2copcl3", "Cops 'n' Robbers Club (Bellfruit) (set 12, UK) (Scorpion 2/3)", - "sc2copcl3p", "Cops 'n' Robbers Club (Bellfruit) (set 12, UK, Protocol) (Scorpion 2/3)", - "sc2copcl4", "Cops 'n' Robbers Club (Bellfruit) (set 3, UK) (Scorpion 2/3)", - "sc2copcl5", "Cops 'n' Robbers Club (Bellfruit) (set 11, UK) (Scorpion 2/3)", - "sc2copcl6", "Cops 'n' Robbers Club (Bellfruit) (set 4, UK) (Scorpion 2/3)", - "sc2copcl6p", "Cops 'n' Robbers Club (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3)", - "sc2copcl7", "Cops 'n' Robbers Club (Bellfruit) (set 5, UK) (Scorpion 2/3)", - "sc2copcl8", "Cops 'n' Robbers Club (Bellfruit) (set 8, UK) (Scorpion 2/3)", - "sc2copcl8p", "Cops 'n' Robbers Club (Bellfruit) (set 8, UK, Protocol) (Scorpion 2/3)", - "sc2copcl9", "Cops 'n' Robbers Club (Bellfruit) (set 7, UK) (Scorpion 2/3)", - "sc2copcl9p", "Cops 'n' Robbers Club (Bellfruit) (set 7, UK, Protocol) (Scorpion 2/3)", - "sc2copclp", "Cops 'n' Robbers Club (Bellfruit) (set 9, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2copdc", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 7, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2copdc1", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 3, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2copdc1p", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 3, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2copdc2", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 4, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2copdc2p", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 4, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2copdc3", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 5, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2copdc3p", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 5, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2copdc4", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 6, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2copdc4p", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 6, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2copdc5", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 1, UK, 200GBP Jackpot) (Scorpion 2/3)", - "sc2copdc5p", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 1, UK, 200GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2copdc6", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2copdcp", "Cops 'n' Robbers Club Deluxe (Bellfruit) (set 7, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2cops", "Cops 'n' Robbers (Bellfruit) (set 6) (Scorpion 2/3)", - "sc2cops1p", "Cops 'n' Robbers (Bellfruit) (set 6, Protocol) (Scorpion 2/3)", - "sc2cops2", "Cops 'n' Robbers (Bellfruit) (set 2) (Scorpion 2/3)", - "sc2cops3", "Cops 'n' Robbers (Bellfruit) (set 3) (Scorpion 2/3)", - "sc2cops3p", "Cops 'n' Robbers (Bellfruit) (set 3, Protocol) (Scorpion 2/3)", - "sc2cops4", "Cops 'n' Robbers (Bellfruit) (set 5) (Scorpion 2/3)", - "sc2cops5", "Cops 'n' Robbers (Bellfruit) (set 1) (Scorpion 2/3)", - "sc2copsc", "Casino Cops 'n' Robbers (Bellfruit) (set 1) (Scorpion 2/3)", - "sc2copsc1", "Casino Cops 'n' Robbers (Bellfruit) (set 2) (Scorpion 2/3)", - "sc2copsc1p", "Casino Cops 'n' Robbers (Bellfruit) (set 2, Protocol) (Scorpion 2/3)", - "sc2copsc1pa", "Casino Cops 'n' Robbers (Bellfruit) (set 2, Protocol) (Scorpion 2/3) (alt matrix rom)", - "sc2copscp", "Casino Cops 'n' Robbers (Bellfruit) (set 1, Protocol) (Scorpion 2/3)", - "sc2copsp", "Cops 'n' Robbers (Bellfruit) (set 4, Protocol) (Scorpion 2/3)", - "sc2cpe", "Club Public Enemy No.1 (set 5, UK) (Scorpion 2/3)", - "sc2cpe1", "Club Public Enemy No.1 (set 4, UK) (Scorpion 2/3)", - "sc2cpe1p", "Club Public Enemy No.1 (set 4, UK, Protocol) (Scorpion 2/3)", - "sc2cpe2", "Club Public Enemy No.1 (set 3, UK) (Scorpion 2/3)", - "sc2cpe2p", "Club Public Enemy No.1 (set 3, UK, Protocol) (Scorpion 2/3)", - "sc2cpe3", "Club Public Enemy No.1 (set 1, UK) (Scorpion 2/3)", - "sc2cpe3p", "Club Public Enemy No.1 (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2cpe4", "Club Public Enemy No.1 (set 2, UK) (Scorpion 2/3)", - "sc2cpe4p", "Club Public Enemy No.1 (set 2, UK, Protocol) (Scorpion 2/3)", - "sc2cpep", "Club Public Enemy No.1 (set 5, UK, Protocol) (Scorpion 2/3)", - "sc2cpg", "Pharaoh's Gold Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2cpg1", "Pharaoh's Gold Club (Bellfruit) (set 3, UK, p65) (Scorpion 2/3)", - "sc2cpg1p", "Pharaoh's Gold Club (Bellfruit) (set 3, UK, p65, Protocol) (Scorpion 2/3)", - "sc2cpg2", "Pharaoh's Gold Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2cpg2p", "Pharaoh's Gold Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2cpgp", "Pharaoh's Gold Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2cshcl", "Cashino Club (Bellfruit) (set 2) (Scorpion 2/3)", - "sc2cshcl1", "Cashino Club (Bellfruit) (set 1) (Scorpion 2/3)", - "sc2cshcl1p", "Cashino Club (Bellfruit) (set 1, Protocol) (Scorpion 2/3)", - "sc2cshclp", "Cashino Club (Bellfruit) (set 2, Protocol) (Scorpion 2/3)", - "sc2ctms2", "Cat & Mouse (Bellfruit) (set 2) (Scorpion 2/3)", - "sc2ctms21", "Cat & Mouse (Bellfruit) (set 7) (Scorpion 2/3)", - "sc2ctms21p", "Cat & Mouse (Bellfruit) (set 7, Protocol) (Scorpion 2/3)", - "sc2ctms22", "Cat & Mouse (Bellfruit) (set 6) (Scorpion 2/3)", - "sc2ctms22p", "Cat & Mouse (Bellfruit) (set 6, Protocol) (Scorpion 2/3)", - "sc2ctms23", "Cat & Mouse (Bellfruit) (set 5) (Scorpion 2/3)", - "sc2ctms23p", "Cat & Mouse (Bellfruit) (set 5, Protocol) (Scorpion 2/3)", - "sc2ctms24p", "Cat & Mouse (Bellfruit) (set 8, Protocol) (Scorpion 2/3)", - "sc2ctms25", "Cat & Mouse (Bellfruit) (set 3) (Scorpion 2/3)", - "sc2cvega", "Cash Vegas (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2cvega1", "Cash Vegas (Bellfruit) (set 4, UK, 10GBP Jackpot, 3rd Triennial) (Scorpion 2/3)", - "sc2cvega1p", "Cash Vegas (Bellfruit) (set 4, UK, 10GBP Jackpot, 3rd Triennial, Protocol) (Scorpion 2/3)", - "sc2cvega2", "Cash Vegas (Bellfruit) (set 3, UK, 8GBP Jackpot) (Scorpion 2/3)", - "sc2cvega2p", "Cash Vegas (Bellfruit) (set 3, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2cvega3", "Cash Vegas (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2cvega3p", "Cash Vegas (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2cvega4p", "Cash Vegas (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2dbl", "Double Diamond (Bellfruit) (set 2, UK) (Scorpion 2/3)", - "sc2dbl1", "Double Diamond (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2dbl1p", "Double Diamond (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2dblp", "Double Diamond (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", - "sc2dels", "Del's Millions (Bellfruit) (set 9, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2dels1", "Del's Millions (Bellfruit) (set 10, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2dels1p", "Del's Millions (Bellfruit) (set 10, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2dels2", "Del's Millions (Bellfruit) (set 7, UK, 8GBP Jackpot) (Scorpion 2/3)", - "sc2dels2p", "Del's Millions (Bellfruit) (set 7, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2dels3", "Del's Millions (Bellfruit) (set 3, UK, 8GBP Jackpot) (Scorpion 2/3)", - "sc2dels3p", "Del's Millions (Bellfruit) (set 3, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2dels4", "Del's Millions (Bellfruit) (set 6, UK) (Scorpion 2/3)", - "sc2dels4p", "Del's Millions (Bellfruit) (set 6, UK, Protocol) (Scorpion 2/3)", - "sc2dels5", "Del's Millions (Bellfruit) (set 5, UK) (Scorpion 2/3)", - "sc2dels6", "Del's Millions (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2dels7", "Del's Millions (Bellfruit) (set 2, UK) (Scorpion 2/3)", - "sc2dels8", "Del's Millions (Bellfruit) (set 8, UK) (Scorpion 2/3)", - "sc2dels9", "Del's Millions (Bellfruit) (set 5, UK, Protocol) (Scorpion 2/3)", - "sc2delsd", "Del's Millions (Bellfruit) (set 4, Deluxe) (Scorpion 2/3)", - "sc2delsm", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ11_N) (Scorpion 2/3)", - "sc2delsm1", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ13_N) (Scorpion 2/3)", - "sc2delsm1p", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ14_N) (Scorpion 2/3)", - "sc2delsm2", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ11_P) (Scorpion 2/3)", - "sc2delsm2p", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ12_P) (Scorpion 2/3)", - "sc2delsm3", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ13_P) (Scorpion 2/3)", - "sc2delsm3p", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ14_P) (Scorpion 2/3)", - "sc2delsmp", "Del's Millions (Bellfruit/Mazooma) (DMVMAZ12_N) (Scorpion 2/3)", - "sc2delsp", "Del's Millions (Bellfruit) (set 9, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2dick", "Spotted Dick (Global) (v3.1) (Scorpion 2/3)", - "sc2dick1", "Spotted Dick (Global) (v2.2) (Scorpion 2/3)", - "sc2dick2", "Spotted Dick (Global) (v1.5) (Scorpion 2/3)", - "sc2dick2e", "Spotted Dick (Global) (v?.? Euro) (Scorpion 2/3)", - "sc2dick2eu", "Spotted Dick (Global) (v?.? Euro unencrypted) (Scorpion 2/3)", - "sc2dick2p", "Spotted Dick (Global) (v1.5 Protocol ) (Scorpion 2/3)", - "sc2dickp", "Spotted Dick (Global) (v3.1 Protocol) (Scorpion 2/3)", - "sc2downt", "Down Town (Bellfruit) (set 7, UK) (Scorpion 2/3)", - "sc2downt1", "Down Town (Bellfruit) (set 4, UK, 16RM motor) (Scorpion 2/3)", - "sc2downt1p", "Down Town (Bellfruit) (set 4, UK, 16RM motor, Protocol) (Scorpion 2/3)", - "sc2downt2", "Down Town (Bellfruit) (set 6, UK) (Scorpion 2/3)", - "sc2downt2p", "Down Town (Bellfruit) (set 7, UK, Protocol) (Scorpion 2/3)", - "sc2downt3", "Down Town (Bellfruit) (set 11, UK, 15RM motor) (Scorpion 2/3)", - "sc2downt3a", "Down Town (Bellfruit) (set 8, UK) (Scorpion 2/3)", - "sc2downt3ap", "Down Town (Bellfruit) (set 8, UK, Protocol) (Scorpion 2/3)", - "sc2downt3p", "Down Town (Bellfruit) (set 11, UK, 15RM motor, Protocol) (Scorpion 2/3)", - "sc2downt4", "Down Town (Bellfruit) (set 10, UK, 15RM motor) (Scorpion 2/3)", - "sc2downt4a", "Down Town (Bellfruit) (set 9, UK) (Scorpion 2/3)", - "sc2downt4ap", "Down Town (Bellfruit) (set 9, UK, Protocol) (Scorpion 2/3)", - "sc2downt4p", "Down Town (Bellfruit) (set 10, UK, 15RM motor, Protocol) (Scorpion 2/3)", - "sc2downt5", "Down Town (Bellfruit) (set 5, UK) (Scorpion 2/3)", - "sc2downt6", "Down Town (Bellfruit) (set 1, UK, 16RM motor) (Scorpion 2/3)", - "sc2downt7", "Down Town (Bellfruit) (set 2, Irish, 16RM motor) (Scorpion 2/3)", - "sc2downt8a", "Down Town (Bellfruit) (set 3, UK, 16RM motor) (Scorpion 2/3)", - "sc2downt8ap", "Down Town (Bellfruit) (set 3, UK, 16RM motor, Protocol) (Scorpion 2/3)", - "sc2downtp", "Down Town (Bellfruit) (set 6, UK, Protocol) (Scorpion 2/3)", - "sc2drwho", "Dr.Who The Timelord (set 1, UK, Single Site) (Scorpion 2/3)", - "sc2drwho1", "Dr.Who The Timelord (set 2, UK, Arcade) (Scorpion 2/3)", - "sc2drwho1p", "Dr.Who The Timelord (set 2, UK, Arcade, Protocol) (Scorpion 2/3)", - "sc2drwho2", "Dr.Who The Timelord (set 3, UK, no Jackpot spin) (Scorpion 2/3)", - "sc2drwho2p", "Dr.Who The Timelord (set 3, UK, no Jackpot spin, Protocol) (Scorpion 2/3)", - "sc2drwho3", "Dr.Who The Timelord (set 4, UK, Arcade) (Scorpion 2/3)", - "sc2drwho3p", "Dr.Who The Timelord (set 4, UK, Arcade, Protocol) (Scorpion 2/3)", - "sc2drwho4", "Dr.Who The Timelord (set 5, UK) (Scorpion 2/3)", - "sc2drwho4p", "Dr.Who The Timelord (set 5, UK, Protocol) (Scorpion 2/3)", - "sc2drwho5", "Dr.Who The Timelord (set 6, UK, Arcade, 8GBP Jackpot) (Scorpion 2/3)", - "sc2drwho5p", "Dr.Who The Timelord (set 6, UK, Arcade, 8GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2drwho6", "Dr.Who The Timelord (set 7, UK, Arcade) (Scorpion 2/3)", - "sc2drwho6p", "Dr.Who The Timelord (set 7, UK, Arcade, Protocol) (Scorpion 2/3)", - "sc2drwho7", "Dr.Who The Timelord (set 8, UK, Arcade, 10GBP Jackpot) (Scorpion 2/3)", - "sc2drwho7p", "Dr.Who The Timelord (set 8, UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2drwhodx", "Dr.Who The Timelord Deluxe (set 1) (Scorpion 2/3)", - "sc2drwhodx1", "Dr.Who The Timelord Deluxe (set 2) (Scorpion 2/3)", - "sc2drwhomz", "Dr.Who The Timelord (Mazooma) (Scorpion 2/3)", - "sc2drwhomzp", "Dr.Who The Timelord (Mazooma, Protocol) (Scorpion 2/3)", - "sc2drwhop", "Dr.Who The Timelord (set 1, UK, Single Site Protocol) (Scorpion 2/3)", - "sc2drwhou", "Dr.Who The Timelord (set 1, UK, Single Site) (Scorpion 2/3) (not encrypted)", - "sc2easy", "Easy Money (Bellfruit) (set 1) (Scorpion 2/3)", - "sc2easy1", "Easy Money (Bellfruit) (set 3) (Scorpion 2/3)", - "sc2easy1p", "Easy Money (Bellfruit) (set 3, Protocol) (Scorpion 2/3)", - "sc2easy2", "Easy Money (Bellfruit) (set 2) (Scorpion 2/3)", - "sc2easy2p", "Easy Money (Bellfruit) (set 2, Protocol) (Scorpion 2/3)", - "sc2easyp", "Easy Money (Bellfruit) (set 1, Protocol) (Scorpion 2/3)", - "sc2eggs", "Eggs On Legs Tour (Bellfruit) (set 2, UK, Arcade, 10GBP Jackpot) (Scorpion 2/3)", - "sc2eggs1", "Eggs On Legs Tour (Bellfruit) (set 1, UK, Arcade, 10GBP Jackpot?) (Scorpion 2/3)", - "sc2eggs1p", "Eggs On Legs Tour (Bellfruit) (set 1, UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2eggsp", "Eggs On Legs Tour (Bellfruit) (set 2, UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2flaca", "Flash Cash (Bellfruit) (set 3, UK, 10GBP Jackpot, 3rd Triennial) (Scorpion 2/3)", - "sc2flaca1", "Flash Cash (Bellfruit) (set 1, UK, 10GBP Jackpot, 2nd Triennial) (Scorpion 2/3)", - "sc2flaca1p", "Flash Cash (Bellfruit) (set 1, UK, 10GBP Jackpot, 2nd Triennial, Protocol) (Scorpion 2/3)", - "sc2flaca2", "Flash Cash (Bellfruit) (set 2, UK, 10GBP Jackpot, 2nd Triennial) (Scorpion 2/3)", - "sc2flaca2p", "Flash Cash (Bellfruit) (set 2, UK, 10GBP Jackpot, 2nd Triennial, Protocol) (Scorpion 2/3)", - "sc2flacap", "Flash Cash (Bellfruit) (set 3, UK, 10GBP Jackpot, 3rd Triennial, Protocol) (Scorpion 2/3)", - "sc2flutr", "Flutter (Concept)", - "sc2focus", "Focus (Dutch, Game Card 95-750-347) (Scorpion 2/3)", - "sc2foot", "Football Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2foot1", "Football Club (Bellfruit) (set 3, UK, 100GBP Jackpot) (Scorpion 2/3)", - "sc2foot1p", "Football Club (Bellfruit) (set 3, UK, 100GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2foot2", "Football Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2foot2p", "Football Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2footp", "Football Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2gcclb", "Golden Casino Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2gcclb1", "Golden Casino Club (Bellfruit) (set 3, UK, 100GBP Jackpot) (Scorpion 2/3)", - "sc2gcclb1p", "Golden Casino Club (Bellfruit) (set 3, UK, 100GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2gcclb2", "Golden Casino Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2gcclb2p", "Golden Casino Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2gcclbp", "Golden Casino Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2goldr", "Gold Reserve (Mdm) (v1.3) (Scorpion 2/3)", - "sc2goldr1", "Gold Reserve (Mdm) (set 2) (Scorpion 2/3)", - "sc2goldrp", "Gold Reserve (Mdm) (v1.3 Protocol) (Scorpion 2/3)", - "sc2groul", "Golden Roulette (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2groulp", "Golden Roulette (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", - "sc2gsclb", "The Game Show Club (Bellfruit) (set 4, UK, Arcade, p65) (Scorpion 2/3)", - "sc2gsclb1", "The Game Show Club (Bellfruit) (set 7, UK, Arcade, 250GBP Jackpot, p65) (Scorpion 2/3)", - "sc2gsclb1p", "The Game Show Club (Bellfruit) (set 7, UK, Arcade, 250GBP Jackpot, p65, Protocol) (Scorpion 2/3)", - "sc2gsclb2", "The Game Show Club (Bellfruit) (set 3, UK, Arcade) (Scorpion 2/3)", - "sc2gsclb2p", "The Game Show Club (Bellfruit) (set 3, UK, Arcade, Protocol) (Scorpion 2/3)", - "sc2gsclb3", "The Game Show Club (Bellfruit) (set 5, UK, Arcade) (Scorpion 2/3)", - "sc2gsclb3p", "The Game Show Club (Bellfruit) (set 5, UK, Arcade, Protocol) (Scorpion 2/3)", - "sc2gsclb4", "The Game Show Club (Bellfruit) (set 6, UK, Arcade) (Scorpion 2/3)", - "sc2gsclb4p", "The Game Show Club (Bellfruit) (set 6, UK, Arcade, Protocol) (Scorpion 2/3)", - "sc2gsclb5", "The Game Show Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2gsclb6", "The Game Show Club (Bellfruit) (set 8, UK) (Scorpion 2/3)", - "sc2gsclb6p", "The Game Show Club (Bellfruit) (set 8, UK, Protocol) (Scorpion 2/3)", - "sc2gsclb7", "The Game Show Club (Bellfruit) (set 2, UK) (Scorpion 2/3)", - "sc2gsclbp", "The Game Show Club (Bellfruit) (set 4, UK, Arcade, p65, Protocol) (Scorpion 2/3)", - "sc2gslam", "Club Grand Slam (UK, set 2) (Scorpion 2/3)", - "sc2gslam1", "Club Grand Slam (UK, set 1) (Scorpion 2/3)", - "sc2gslam1p", "Club Grand Slam (UK, set 1, Protocol) (Scorpion 2/3)", - "sc2gslamp", "Club Grand Slam (UK, set 2, Protocol) (Scorpion 2/3)", - "sc2gtr", "The Great Train Robbery (Bellfruit) (Scorpion 2/3)", - "sc2heypr", "Hey Presto (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2heyprp", "Hey Presto (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2hifly", "High Flyer (Mdm) (v4.1) (Scorpion 2/3)", - "sc2hifly2", "High Flyer (Mdm) (v3.1) (Scorpion 2/3)", - "sc2hifly3", "High Flyer (Mdm) (v2.1) (Scorpion 2/3)", - "sc2hifly4", "High Flyer (Mdm) (v?.?) (Scorpion 2/3)", - "sc2hypr", "Hyperactive (Bellfruit) (set 1, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2hypr1", "Hyperactive (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2hypr1p", "Hyperactive (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2hyprp", "Hyperactive (Bellfruit) (set 1, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2inst", "Instant Jackpot (Bellfruit) (set 6, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2inst1", "Instant Jackpot (Bellfruit) (set 7, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2inst1p", "Instant Jackpot (Bellfruit) (set 7, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2inst2", "Instant Jackpot (Bellfruit) (set 4, UK) (Scorpion 2/3)", - "sc2inst2p", "Instant Jackpot (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3)", - "sc2inst3", "Instant Jackpot (Bellfruit) (set 5, UK, 8GBP Jackpot) (Scorpion 2/3)", - "sc2inst3p", "Instant Jackpot (Bellfruit) (set 5, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2inst4", "Instant Jackpot (Bellfruit) (set 3, UK) (Scorpion 2/3)", - "sc2inst4p", "Instant Jackpot (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", - "sc2inst5", "Instant Jackpot (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2inst6", "Instant Jackpot (Bellfruit) (set 2, UK) (Scorpion 2/3)", - "sc2instp", "Instant Jackpot (Bellfruit) (set 6, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2kcclb", "King Cash Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2kcclb1", "King Cash Club (Bellfruit) (set 2, UK) (Scorpion 2/3)", - "sc2kcclb1p", "King Cash Club (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", - "sc2kcclbp", "King Cash Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2luvv", "Luvvly Jubbly (set 3, UK, Multisite 10GBP/25p) (Scorpion 2/3)", - "sc2luvv1", "Luvvly Jubbly (set 3, UK, Multisite 10GBP/20p) (Scorpion 2/3)", - "sc2luvv1p", "Luvvly Jubbly (set 3, UK, Multisite 10GBP/20p, Protocol) (Scorpion 2/3)", - "sc2luvv2", "Luvvly Jubbly (set 2, UK, Multisite) (Scorpion 2/3)", - "sc2luvv2p", "Luvvly Jubbly (set 2, UK, Multisite, Protocol) (Scorpion 2/3)", - "sc2luvv4", "Luvvly Jubbly (set 4, UK, Multisite 4GBP/5p) (Scorpion 2/3)", - "sc2luvv4p", "Luvvly Jubbly (set 4, UK, Multisite 4GBP/5p, Protocol) (Scorpion 2/3)", - "sc2luvv6p", "Luvvly Jubbly (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2luvvp", "Luvvly Jubbly (set 3, UK, Multisite 10GBP/25p, Protocol) (Scorpion 2/3)", - "sc2maina", "Main Attraction (Bellfruit) (Scorpion 2/3)", - "sc2majes", "Majestic Bells (Bellfruit) (set 1) (set 1)", - "sc2majesp", "Majestic Bells (Bellfruit) (set 1, Protocol) (set 2)", - "sc2mam", "Make A Million (Bellfruit) (set 4, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2mam1", "Make A Million (Bellfruit) (set 5, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2mam1p", "Make A Million (Bellfruit) (set 5, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2mam2", "Make A Million (Bellfruit) (set 3, UK, 8GBP Jackpot) (Scorpion 2/3)", - "sc2mam2p", "Make A Million (Bellfruit) (set 3, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2mam3", "Make A Million (Bellfruit) (set 2, UK) (Scorpion 2/3)", - "sc2mam3a", "Make A Million (Bellfruit) (set 2, UK, alt) (Scorpion 2/3)", - "sc2mam3p", "Make A Million (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", - "sc2mam4", "Make A Million (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2mam4p", "Make A Million (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2mamcl", "Make A Million Club (Bellfruit) (set 3, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2mamcl1", "Make A Million Club (Bellfruit) (set 4, UK) (Scorpion 2/3)", - "sc2mamcl1p", "Make A Million Club (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3)", - "sc2mamcl2", "Make A Million Club (Bellfruit) (set 2, UK) (Scorpion 2/3)", - "sc2mamcl2p", "Make A Million Club (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", - "sc2mamcl3", "Make A Million Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2mamclp", "Make A Million Club (Bellfruit) (set 3, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2mamp", "Make A Million (Bellfruit) (set 4, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2motd", "Match Of The Day (Bellfruit) (set 9, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2motd1", "Match Of The Day (Bellfruit) (set 7, UK, 10GBP Jackpot, 1st Triennial) (Scorpion 2/3)", - "sc2motd1p", "Match Of The Day (Bellfruit) (set 7, UK, 10GBP Jackpot, 1st Triennial, Protocol) (Scorpion 2/3)", - "sc2motd2", "Match Of The Day (Bellfruit) (set 8, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2motd2p", "Match Of The Day (Bellfruit) (set 8, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2motd3", "Match Of The Day (Bellfruit) (set 6, UK) (Scorpion 2/3)", - "sc2motd3p", "Match Of The Day (Bellfruit) (set 6, UK, Protocol) (Scorpion 2/3)", - "sc2motd4", "Match Of The Day (Bellfruit) (set 3, UK, Arcade) (Scorpion 2/3)", - "sc2motd4p", "Match Of The Day (Bellfruit) (set 3, UK, Arcade, Protocol) (Scorpion 2/3)", - "sc2motd5", "Match Of The Day (Bellfruit) (set 2, UK, Single Site) (Scorpion 2/3)", - "sc2motd5p", "Match Of The Day (Bellfruit) (set 2, UK, Single Site, Protocol) (Scorpion 2/3)", - "sc2motd6", "Match Of The Day (Bellfruit) (set 4, Irish, 8GBP Jackpot) (Scorpion 2/3)", - "sc2motd6p", "Match Of The Day (Bellfruit) (set 4, Irish, 8GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2motd7", "Match Of The Day (Bellfruit) (set 5, UK) (Scorpion 2/3)", - "sc2motd8p", "Match Of The Day (Bellfruit) (set 5, UK, Protocol) (Scorpion 2/3)", - "sc2motd9", "Match Of The Day (Bellfruit) (set 1, Irish) (Scorpion 2/3)", - "sc2motdp", "Match Of The Day (Bellfruit) (set 9, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2ofool", "Only Fools & Horses (Bellfruit) (set 3) (Scorpion 2/3)", - "sc2ofool1", "Only Fools & Horses (Bellfruit) (set 1) (Scorpion 2/3)", - "sc2ofool2", "Only Fools & Horses (Bellfruit) (set 4) (Scorpion 2/3)", - "sc2ofool3", "Only Fools & Horses (Bellfruit) (set 2) (Scorpion 2/3)", - "sc2ofool4", "Only Fools & Horses (Bellfruit) (set 5) (Scorpion 2/3)", - "sc2olgld", "Olympic Gold (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2olgld1", "Olympic Gold (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3)", - "sc2olgld1p", "Olympic Gold (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc2olgldp", "Olympic Gold (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2payr", "Pay Roll Casino (Bellfruit/Mazooma) (Scorpion 2/3)", - "sc2pe1g", "Public Enemy No.1 (Bellfruit) [German] (Scorpion 2/3)", - "sc2pick", "Pick Of The Bunch (Global) (v2.3) (Scorpion 2/3)", - "sc2pickc", "Pick Of The Bunch (Club?) (Global) (v1.9) (Scorpion 2/3)", - "sc2pickcp", "Pick Of The Bunch (Club?) (Global) (v1.9 Protocol) (Scorpion 2/3)", - "sc2pickp", "Pick Of The Bunch (Global) (v2.3 Protocol) (Scorpion 2/3)", - "sc2prem", "Premier Club Manager (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2prem1", "Premier Club Manager (Bellfruit) (set 3, UK) (Scorpion 2/3)", - "sc2prem1p", "Premier Club Manager (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", - "sc2prem2", "Premier Club Manager (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2prom", "Along The Prom (Bellfruit) (Scorpion 2/3)", - "sc2ptytm", "Party Time (Bellfruit) (set 2) (Scorpion 2/3)", - "sc2ptytm1", "Party Time (Bellfruit) (set 1) (Scorpion 2/3)", - "sc2ptytmp", "Party Time (Bellfruit) (set 2, Protocol) (Scorpion 2/3)", - "sc2relgm", "Reel Gems (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2relgm1p", "Reel Gems (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", - "sc2relgmp", "Reel Gems (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2rock", "How Big's Your Rock? (Global) (v1.5) (Scorpion 2/3)", - "sc2rock1", "How Big's Your Rock? (Global) (v1.4) (Scorpion 2/3)", - "sc2rock1p", "How Big's Your Rock? (Global) (v1.4 Protocol) (Scorpion 2/3)", - "sc2rocke", "How Big's Your Rock? (Global) (v?.? Euro) (Scorpion 2/3)", - "sc2rockp", "How Big's Your Rock? (Global) (v1.5 Protocol) (Scorpion 2/3)", - "sc2scc", "Safe Cracker Club (Mdm) (v4.4) (Scorpion 2/3)", - "sc2scshx", "Super Cash X (Concept)", - "sc2scshxcas", "Super Casino Cash X (Concept)", - "sc2scshxgman", "Super Cash X (Concept) (Gamesman Hardware)", - "sc2scshxstar", "Super Cash X (Concept) (Starpoint Hardware)", - "sc2sghst", "Super Ghost (Concept)", - "sc2showt", "Showtime Spectacular (Bellfruit) (set 4, UK) (Scorpion 2/3)", - "sc2showt1", "Showtime Spectacular (Bellfruit) (set 5, UK) (Scorpion 2/3)", - "sc2showt1p", "Showtime Spectacular (Bellfruit) (set 5, UK, Protocol) (Scorpion 2/3)", - "sc2showt2", "Showtime Spectacular (Bellfruit) (set 3, UK) (Scorpion 2/3)", - "sc2showt2p", "Showtime Spectacular (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", - "sc2showt3", "Showtime Spectacular (Bellfruit) (set 2, UK) (Scorpion 2/3)", - "sc2showt3p", "Showtime Spectacular (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", - "sc2showt4", "Showtime Spectacular (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2showt4p", "Showtime Spectacular (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2showtp", "Showtime Spectacular (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3)", - "sc2smnud", "Super Multi Nudger (Concept)", - "sc2sstar", "Super Star (Bellfruit) (set 2, UK, 3rd Triennial) (Scorpion 2/3)", - "sc2sstar1", "Super Star (Bellfruit) (set 1, UK, 2nd Triennial) (Scorpion 2/3)", - "sc2sstar1p", "Super Star (Bellfruit) (set 1, UK, 2nd Triennial, Protocol) (Scorpion 2/3)", - "sc2sstar2", "Super Star (Bellfruit) (set 4, UK, 2nd Triennial) (Scorpion 2/3)", - "sc2sstar2p", "Super Star (Bellfruit) (set 4, UK, 2nd Triennial, Protocol) (Scorpion 2/3)", - "sc2sstar3", "Super Star (Bellfruit) (set 3, UK, 2nd Triennial) (Scorpion 2/3)", - "sc2sstar3p", "Super Star (Bellfruit) (set 3, UK, 2nd Triennial, Protocol) (Scorpion 2/3)", - "sc2sstarp", "Super Star (Bellfruit) (set 2, UK, 3rd Triennial, Protocol) (Scorpion 2/3)", - "sc2suprz", "Surprise Surprize (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2suprz1", "Surprise Surprize (Bellfruit) (set 2, UK) (Scorpion 2/3)", - "sc2suprz1p", "Surprise Surprize (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3)", - "sc2suprz2", "Surprise Surprize (Bellfruit) (set 4, UK) (Scorpion 2/3)", - "sc2suprz2p", "Surprise Surprize (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3)", - "sc2suprz3", "Surprise Surprize (Bellfruit) (set 3, UK) (Scorpion 2/3)", - "sc2suprzp", "Surprise Surprize (Bellfruit) (set 1, UK, Protocol)(Scorpion 2/3)", - "sc2topwk", "Top Wack (Bellfruit) (set 1, UK, 10GBP Jackpot, 1st Triennial) (Scorpion 2/3)", - "sc2topwkp", "Top Wack (Bellfruit) (set 1, UK, 10GBP Jackpot, 1st Triennial, Protocol) (Scorpion 2/3)", - "sc2town", "Round The Town (Bellfruit) (set 6) (Scorpion 2/3)", - "sc2town1", "Round The Town (Bellfruit) (set 4) (Scorpion 2/3)", - "sc2town1a", "Round The Town (Bellfruit) (set 4, alt) (Scorpion 2/3)", - "sc2town1p", "Round The Town (Bellfruit) (set 4, Protocol) (Scorpion 2/3)", - "sc2town2", "Round The Town (Bellfruit) (set 2) (Scorpion 2/3)", - "sc2town3", "Round The Town (Bellfruit) (set 3) (Scorpion 2/3)", - "sc2town3p", "Round The Town (Bellfruit) (set 3, Protocol) (Scorpion 2/3)", - "sc2town4", "Round The Town (Bellfruit) (set 1) (Scorpion 2/3)", - "sc2town5", "Round The Town (Bellfruit) (set 5) (Scorpion 2/3)", - "sc2townp", "Round The Town (Bellfruit) (set 6, Protocol) (Scorpion 2/3)", - "sc2wembl", "Match Of The Day - Road To Wembley (Bellfruit) (set 8, UK, 10GBP Jackpot, 15RM motor) (Scorpion 2/3)", - "sc2wembl1", "Match Of The Day - Road To Wembley (Bellfruit) (set 6, UK, 15RM motor) (Scorpion 2/3)", - "sc2wembl10", "Match Of The Day - Road To Wembley (Bellfruit) (set 5, Irish, 8GBP Jackpot, 16RM motor) (Scorpion 2/3)", - "sc2wembl1p", "Match Of The Day - Road To Wembley (Bellfruit) (set 6, UK, 15RM motor, Protocol) (Scorpion 2/3)", - "sc2wembl2", "Match Of The Day - Road To Wembley (Bellfruit) (set 7, UK) (Scorpion 2/3)", - "sc2wembl2p", "Match Of The Day - Road To Wembley (Bellfruit) (set 7, UK, Protocol) (Scorpion 2/3)", - "sc2wembl4p", "Match Of The Day - Road To Wembley (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3)", - "sc2wembl5a", "Match Of The Day - Road To Wembley (Bellfruit) (set 2, UK, 16RM motor) (Scorpion 2/3)", - "sc2wembl5ap", "Match Of The Day - Road To Wembley (Bellfruit) (set 2, UK, 16RM motor, Protocol) (Scorpion 2/3)", - "sc2wembl6ap", "Match Of The Day - Road To Wembley (Bellfruit) (set 4, Arcade, 16RM motor, Protocol) (Scorpion 2/3)", - "sc2wembl7a", "Match Of The Day - Road To Wembley (Bellfruit) (set 1, UK, 8GBP Jackpot, 16RM motor) (Scorpion 2/3)", - "sc2wembl7ap", "Match Of The Day - Road To Wembley (Bellfruit) (set 5, Irish, 8GBP Jackpot, 16RM motor, Protocol) (Scorpion 2/3)", - "sc2wembl8", "Match Of The Day - Road To Wembley (Bellfruit) (set 3, UK) (Scorpion 2/3)", - "sc2wembl9", "Match Of The Day - Road To Wembley (Bellfruit) (set 4, Arcade, 16RM motor) (Scorpion 2/3)", - "sc2wemblm", "Match Of The Day - Road To Wembley (Bellfruit/Mazooma) (Scorpion 2/3)", - "sc2wemblp", "Match Of The Day - Road To Wembley (Bellfruit) (set 8, UK, 10GBP Jackpot, 15RM motor, Protocol) (Scorpion 2/3)", - "sc2winst", "Winning Streak (Bellfruit) (set 1) (Scorpion 2)", - "sc2winstb", "Winning Streak (Bellfruit) (set 3) (Scorpion 2)", - "sc2winstbp", "Winning Streak (Bellfruit) (set 3, Protocol) (Scorpion 2)", - "sc2winstd", "Winning Streak (Bellfruit) (set 2) (Scorpion 2)", - "sc2winstdp", "Winning Streak (Bellfruit) (set 2, Protocol) (Scorpion 2)", - "sc2winste", "Winning Streak (Bellfruit) (set 4) (Scorpion 2)", - "sc2winstep", "Winning Streak (Bellfruit) (set 4, Protocol) (Scorpion 2)", - "sc2winstf", "Winning Streak (Bellfruit) (set 6) (Scorpion 2)", - "sc2winstfp", "Winning Streak (Bellfruit) (set 6, Protocol) (Scorpion 2)", - "sc2winstg", "Winning Streak (Bellfruit) (set 5) (Scorpion 2)", - "sc2winstp", "Winning Streak (Bellfruit) (set 1, Protocol) (Scorpion 2)", - "sc2wwcl", "Wild West Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3)", - "sc2wwcl1", "Wild West Club (Bellfruit) (set 1, UK) (Scorpion 2/3)", - "sc2wwcl1p", "Wild West Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3)", - "sc2wwclp", "Wild West Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3)", - "sc4a40", "Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 1)", - "sc4a40a", "Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 2)", - "sc4a40b", "Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 3)", - "sc4a40c", "Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 4)", - "sc4a40cl", "Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 1)", - "sc4a40cla", "Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 2)", - "sc4a40clb", "Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 3)", - "sc4a40clc", "Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 4)", - "sc4abra", "Abracadabra (Qps) (Scorpion 4) (set 1, 041)", - "sc4abraa", "Abracadabra (Qps) (Scorpion 4) (set 2, 041)", - "sc4abrab", "Abracadabra (Qps) (Scorpion 4) (set 3, 044)", - "sc4abrac", "Abracadabra (Qps) (Scorpion 4) (set 4, 044)", - "sc4abrad", "Abracadabra (Qps) (Scorpion 4) (set 5, 014)", - "sc4abrae", "Abracadabra (Qps) (Scorpion 4) (set 6, 014)", - "sc4acesh", "Aces High (Mazooma) (Scorpion 4) (set 1)", - "sc4acesha", "Aces High (Mazooma) (Scorpion 4) (set 2)", - "sc4aceshb", "Aces High (Mazooma) (Scorpion 4) (set 3)", - "sc4aceshc", "Aces High (Mazooma) (Scorpion 4) (set 4)", - "sc4adjb", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 1)", - "sc4adjba", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 2)", - "sc4adjbb", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 3)", - "sc4adjbc", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 4)", - "sc4adjbd", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 5)", - "sc4adjbe", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 6)", - "sc4adjbf", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 7)", - "sc4adjbg", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 8)", - "sc4adjbh", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 9)", - "sc4adjbi", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 10)", - "sc4adren", "Adrenalin (Mazooma) (Scorpion 4) (set 1)", - "sc4adrena", "Adrenalin (Mazooma) (Scorpion 4) (set 2)", - "sc4adrenb", "Adrenalin (Mazooma) (Scorpion 4) (set 3)", - "sc4adrenc", "Adrenalin (Mazooma) (Scorpion 4) (set 4)", - "sc4adsnt", "Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 4) (set 1)", - "sc4adsnta", "Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 4) (set 2)", - "sc4adwta", "Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 4) (set 1)", - "sc4adwtaa", "Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 4) (set 2)", - "sc4alad", "Aladdin's Cave (Mazooma) (Scorpion 4) (set 1)", - "sc4alada", "Aladdin's Cave (Mazooma) (Scorpion 4) (set 2)", - "sc4aztec", "Aztec Casino (Dutch) (Bellfruit) (Scorpion 4)", - "sc4azteca", "Aztec (Dutch) (Bellfruit) (Scorpion 4)", - "sc4bankb", "Bankety Bank (Qps) (Scorpion 4) (set 1)", - "sc4bankba", "Bankety Bank (Qps) (Scorpion 4) (set 2)", - "sc4bantm", "Bantam Of The Opera (Mazooma) (Scorpion 4) (set 1)", - "sc4bantma", "Bantam Of The Opera (Mazooma) (Scorpion 4) (set 2)", - "sc4bantmb", "Bantam Of The Opera (Mazooma) (Scorpion 4) (set 3)", - "sc4bantmc", "Bantam Of The Opera (Mazooma) (Scorpion 4) (set 4)", - "sc4bar7", "Bar 7's (PR1433) (Bellfruit) (Scorpion 4) (set 1)", - "sc4bar7a", "Bar 7's (PR1433) (Bellfruit) (Scorpion 4) (set 2)", - "sc4bar7b", "Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 1)", - "sc4bar7c", "Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 2)", - "sc4bar7d", "Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 3)", - "sc4bar7e", "Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 4)", - "sc4batl", "Battleships & Cruisers (Bellfruit) (Scorpion 4) (set 1)", - "sc4batla", "Battleships & Cruisers (Bellfruit) (Scorpion 4) (set 2)", - "sc4bb", "Bankety Bank (Qps) (Scorpion 4) (set 3)", - "sc4bba", "Bankety Bank (Qps) (Scorpion 4) (set 4)", - "sc4bbclb", "Bankety Bank Club (V1.0) (Qps) (Scorpion 4)", - "sc4bbclba", "Bankety Bank Club (V1.1) (Qps) (Scorpion 4)", - "sc4bbclbb", "Bankety Bank Club (V411) (Qps) (Scorpion 4) (set 1)", - "sc4bbclbc", "Bankety Bank Club (V411) (Qps) (Scorpion 4) (set 2)", - "sc4bblas", "Big Blaster (Mazooma) (Scorpion 4) (set 1)", - "sc4bblasa", "Big Blaster (Mazooma) (Scorpion 4) (set 2)", - "sc4bblasb", "Big Blaster (Mazooma) (Scorpion 4) (set 3)", - "sc4bblasc", "Big Blaster (Mazooma) (Scorpion 4) (set 4)", - "sc4bblasd", "Big Blaster (Mazooma) (Scorpion 4) (set 5)", - "sc4bblase", "Big Blaster (Mazooma) (Scorpion 4) (set 6)", - "sc4bblasf", "Big Blaster (Mazooma) (Scorpion 4) (set 7)", - "sc4bbust", "Blockbuster (Mazooma) (Scorpion 4)", - "sc4bed", "Bedazzled (Mazooma) (Scorpion 4) (set 1)", - "sc4beda", "Bedazzled (Mazooma) (Scorpion 4) (set 2)", - "sc4bedb", "Bedazzled (Mazooma) (Scorpion 4) (set 3)", - "sc4bedc", "Bedazzled (Mazooma) (Scorpion 4) (set 4)", - "sc4bedcl", "Bedazzled Club (Mazooma) (Scorpion 4) (set 1)", - "sc4bedcla", "Bedazzled Club (Mazooma) (Scorpion 4) (set 2)", - "sc4bedclb", "Bedazzled Club (Mazooma) (Scorpion 4) (set 3)", - "sc4bedclc", "Bedazzled Club (Mazooma) (Scorpion 4) (set 4)", - "sc4bedcld", "Bedazzled Club (Mazooma) (Scorpion 4) (set 5)", - "sc4bedd", "Bedazzled (Mazooma) (Scorpion 4) (set 5)", - "sc4bede", "Bedazzled (Mazooma) (Scorpion 4) (set 6)", - "sc4bgold", "Black Gold (Nova) (Scorpion 4) (set 1)", - "sc4bgolda", "Black Gold (Nova) (Scorpion 4) (set 2)", - "sc4bigdl", "Big Deal (Qps) (Scorpion 4) (set 1)", - "sc4bigdla", "Big Deal (Qps) (Scorpion 4) (set 2)", - "sc4bingb", "Bingo Belle (Mazooma) (Scorpion 4) (set 1)", - "sc4bingba", "Bingo Belle (Mazooma) (Scorpion 4) (set 2)", - "sc4blast", "Blast Off (011) (Qps) (Scorpion 4) (set 1)", - "sc4blasta", "Blast Off (041) (Qps) (Scorpion 4) (set 1)", - "sc4blastb", "Blast Off (011) (Qps) (Scorpion 4) (set 2)", - "sc4blastc", "Blast Off (041) (Qps) (Scorpion 4) (set 2)", - "sc4blastd", "Blast Off (042) (Qps) (Scorpion 4) (set 1)", - "sc4blaste", "Blast Off (042) (Qps) (Scorpion 4) (set 2)", - "sc4blokq", "Blockbuster (Qps) (Scorpion 4) (set 1)", - "sc4blokqa", "Blockbuster (Qps) (Scorpion 4) (set 2)", - "sc4blokqb", "Blockbuster (Qps) (Scorpion 4) (set 3)", - "sc4blokqc", "Blockbuster (Qps) (Scorpion 4) (set 4)", - "sc4blokqd", "Blockbuster (Qps) (Scorpion 4) (set 5)", - "sc4blokqe", "Blockbuster (Qps) (Scorpion 4) (set 6)", - "sc4blue", "Blue Rinse (Mazooma) (Scorpion 4) (set 1)", - "sc4bluea", "Blue Rinse (Mazooma) (Scorpion 4) (set 2)", - "sc4blueb", "Blue Rinse (Mazooma) (Scorpion 4) (set 3)", - "sc4bluec", "Blue Rinse (Mazooma) (Scorpion 4) (set 4)", - "sc4blued", "Blue Rinse (Mazooma) (Scorpion 4) (set 5)", - "sc4bluee", "Blue Rinse (Mazooma) (Scorpion 4) (set 6)", - "sc4bob", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 1)", - "sc4boba", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 2)", - "sc4bobb", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 3)", - "sc4bobc", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 4)", - "sc4bobcl", "Bobby Dazzler Club (Mazooma) (Scorpion 4) (set 1)", - "sc4bobcla", "Bobby Dazzler Club (Mazooma) (Scorpion 4) (set 2)", - "sc4bobd", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 5)", - "sc4bobe", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 6)", - "sc4bobf", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 7)", - "sc4bobg", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 8)", - "sc4bobh", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 9)", - "sc4bobi", "Bobby Dazzler (Mazooma) (Scorpion 4) (set 10)", - "sc4bonbx", "Bar X (Mazooma) (Scorpion 4) (set 1)", - "sc4bonbxa", "Bar X (Mazooma) (Scorpion 4) (set 6)", - "sc4bonbxb", "Bar X (Mazooma) (Scorpion 4) (set 7)", - "sc4bonbxc", "Bar X (Mazooma) (Scorpion 4) (set 2)", - "sc4bonbxd", "Bar X (Mazooma) (Scorpion 4) (set 3)", - "sc4bonbxe", "Bar X (Mazooma) (Scorpion 4) (set 4)", - "sc4bonbxf", "Bar X (Mazooma) (Scorpion 4) (set 5)", - "sc4bonbxg", "Bar X (Mazooma) (Scorpion 4) (set 8)", - "sc4bonbxh", "Bar X (Mazooma) (Scorpion 4) (set 9)", - "sc4bonbxi", "Bar X (Mazooma) (Scorpion 4) (set 10)", - "sc4bonbxj", "Bar X (Mazooma) (Scorpion 4) (set 11)", - "sc4bonbxk", "Bar X (Mazooma) (Scorpion 4) (set 12)", - "sc4bonbxl", "Bar X (Mazooma) (Scorpion 4) (set 13)", - "sc4boomb", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 4) (set 1)", - "sc4boomba", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 4) (set 2)", - "sc4botn", "Back Of The Net (Qps) (Scorpion 4) (set 1, 011)", - "sc4botna", "Back Of The Net (Qps) (Scorpion 4) (set 2, 011)", - "sc4bpb", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 1)", - "sc4bpba", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 3)", - "sc4bpbb", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 4)", - "sc4bpbc", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 2)", - "sc4bpbd", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 5)", - "sc4bpbe", "Bully's Prize Board (Bellfruit) (Scorpion 4) (set 6)", - "sc4brix", "Brix (German) (Nova) (Scorpion 4) (set 1)", - "sc4brixa", "Brix (German) (Nova) (Scorpion 4) (set 2)", - "sc4brixb", "Brix (German) (Nova) (Scorpion 4) (set 3)", - "sc4brkfs", "The Big Breakfast (BFM) (Scorpion 4) (set 1)", - "sc4brkfsa", "The Big Breakfast (BFM) (Scorpion 4) (set 2)", - "sc4brkfsb", "The Big Breakfast (BFM) (Scorpion 4) (set 3)", - "sc4brkfsc", "The Big Breakfast (BFM) (Scorpion 4) (set 4)", - "sc4brksp", "Break The Spell (Mazooma) (Scorpion 4) (set 1)", - "sc4brkspa", "Break The Spell (Mazooma) (Scorpion 4) (set 2)", - "sc4broll", "Bank Roll (Mazooma) (Scorpion 4) (set 1)", - "sc4brolla", "Bank Roll (Mazooma) (Scorpion 4) (set 2)", - "sc4brollb", "Bank Roll (Mazooma) (Scorpion 4) (set 3)", - "sc4brollc", "Bank Roll (Mazooma) (Scorpion 4) (set 4)", - "sc4bsp", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 1)", - "sc4bspa", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 2)", - "sc4bspb", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 3)", - "sc4bspc", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 4)", - "sc4bspd", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 5)", - "sc4bspe", "Bully's Star Prize (PR3042) (Bellfruit) (Scorpion 4) (set 1)", - "sc4bspf", "Bully's Star Prize (PR3042) (Bellfruit) (Scorpion 4) (set 2)", - "sc4bspg", "Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 6)", - "sc4bugs", "Bugs Money (Bellfruit) (Scorpion 4) (set 1)", - "sc4bugsa", "Bugs Money (Bellfruit) (Scorpion 4) (set 2)", - "sc4bugsb", "Bugs Money (Bellfruit) (Scorpion 4) (set 3)", - "sc4bugsc", "Bugs Money (Bellfruit) (Scorpion 4) (set 4)", - "sc4bulcl", "Bullseye Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4bulcla", "Bullseye Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4bulclb", "Bullseye Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4bulclc", "Bullseye Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4bulcld", "Bullseye Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4bulcle", "Bullseye Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4bulclf", "Bullseye Club (Bellfruit) (Scorpion 4) (set 7)", - "sc4bulclg", "Bullseye Club (Bellfruit) (Scorpion 4) (set 8)", - "sc4bulclh", "Bullseye Club (Bellfruit) (Scorpion 4) (set 9)", - "sc4bulcli", "Bullseye Club (Bellfruit) (Scorpion 4) (set 10)", - "sc4bulcs", "Bullseye Classic (Bellfruit) (Scorpion 4) (set 1)", - "sc4bulcsa", "Bullseye Classic (Bellfruit) (Scorpion 4) (set 2)", - "sc4bulcsb", "Bullseye Classic (Bellfruit) (Scorpion 4) (set 3)", - "sc4bulcsc", "Bullseye Classic (Bellfruit) (Scorpion 4) (set 4)", - "sc4bull", "Bullseye (Bellfruit) (Scorpion 4) (set 1)", - "sc4bulla", "Bullseye (Bellfruit) (Scorpion 4) (set 2)", - "sc4bullb", "Bullseye (Bellfruit) (Scorpion 4) (set 3)", - "sc4bullc", "Bullseye (Bellfruit) (Scorpion 4) (set 4)", - "sc4butch", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 1)", - "sc4butcha", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 2)", - "sc4butchb", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 3)", - "sc4butchc", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 4)", - "sc4butchd", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 5)", - "sc4butche", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 6)", - "sc4butchf", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 7)", - "sc4butchg", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 8)", - "sc4bwow", "Wheel Of Wealth (Bellfruit) (PR1726) (Scorpion 4) (WHEL013, set 1)", - "sc4bwowa", "Wheel Of Wealth (Bellfruit) (PR1726) (Scorpion 4) (WHEL013, set 2)", - "sc4cabin", "Cabin Fever (Mazooma) (Scorpion 4) (set 1)", - "sc4cabina", "Cabin Fever (Mazooma) (Scorpion 4) (set 2)", - "sc4cabinb", "Cabin Fever (Mazooma) (Scorpion 4) (set 3)", - "sc4cabinc", "Cabin Fever (Mazooma) (Scorpion 4) (set 4)", - "sc4cabind", "Cabin Fever (Mazooma) (Scorpion 4) (set 5)", - "sc4cabine", "Cabin Fever (Mazooma) (Scorpion 4) (set 6)", - "sc4cabinf", "Cabin Fever (Mazooma) (Scorpion 4) (set 7)", - "sc4cabing", "Cabin Fever (Mazooma) (Scorpion 4) (set 8)", - "sc4cabinh", "Cabin Fever (Mazooma) (Scorpion 4) (set 9)", - "sc4cabini", "Cabin Fever (Mazooma) (Scorpion 4) (set 10)", - "sc4cabinj", "Cabin Fever (Mazooma) (Scorpion 4) (set 11)", - "sc4cabink", "Cabin Fever (Mazooma) (Scorpion 4) (set 12)", - "sc4cabinl", "Cabin Fever (Mazooma) (Scorpion 4) (set 13)", - "sc4cabinm", "Cabin Fever (Mazooma) (Scorpion 4) (set 14)", - "sc4cad", "Cash Adder (V1.0) (Qps) (Scorpion 4) (set 1)", - "sc4cada", "Cash Adder (V1.0) (Qps) (Scorpion 4) (set 2)", - "sc4cadb", "Cash Adder (V011) (Qps) (Scorpion 4) (set 1)", - "sc4cadc", "Cash Adder (V041) (Qps) (Scorpion 4) (set 1)", - "sc4cadcl", "Cash Adder Club (411) (Qps) (Scorpion 4) (set 1)", - "sc4cadcla", "Cash Adder Club (411) (Qps) (Scorpion 4) (set 2)", - "sc4cadd", "Cash Adder (V012) (Qps) (Scorpion 4) (set 1)", - "sc4cade", "Cash Adder (V042) (Qps) (Scorpion 4) (set 1)", - "sc4cadf", "Cash Adder (V1.0) (Qps) (Scorpion 4) (set 3)", - "sc4cadg", "Cash Adder (V1.0) (Qps) (Scorpion 4) (set 4)", - "sc4cadh", "Cash Adder (V011) (Qps) (Scorpion 4) (set 2)", - "sc4cadi", "Cash Adder (V041) (Qps) (Scorpion 4) (set 2)", - "sc4cadj", "Cash Adder (V012) (Qps) (Scorpion 4) (set 2)", - "sc4cadk", "Cash Adder (V042) (Qps) (Scorpion 4) (set 2)", - "sc4cadl", "Cash Adder (V013) (Qps) (Scorpion 4) (set 1)", - "sc4cadm", "Cash Adder (V013) (Qps) (Scorpion 4) (set 2)", - "sc4cadn", "Cash Adder (V014) (Qps) (Scorpion 4) (set 1)", - "sc4cado", "Cash Adder (V043) (Qps) (Scorpion 4) (set 1)", - "sc4cadp", "Cash Adder (V014) (Qps) (Scorpion 4) (set 2)", - "sc4cadq", "Cash Adder (V043) (Qps) (Scorpion 4) (set 2)", - "sc4canca", "Can Can Cash Casino (Mazooma) (Scorpion 4) (set 1)", - "sc4cancaa", "Can Can Cash Casino (Mazooma) (Scorpion 4) (set 2)", - "sc4cancab", "Can Can Cash Casino (Mazooma) (Scorpion 4) (set 3)", - "sc4cancac", "Can Can Cash Casino (Mazooma) (Scorpion 4) (set 4)", - "sc4captn", "Captain Cash (Qps) (Scorpion 4) (set 1)", - "sc4captna", "Captain Cash (Qps) (Scorpion 4) (set 4)", - "sc4captnb", "Captain Cash (Qps) (Scorpion 4) (set 2)", - "sc4captnc", "Captain Cash (Qps) (Scorpion 4) (set 3)", - "sc4captnd", "Captain Cash (Qps) (Scorpion 4) (set 5)", - "sc4captne", "Captain Cash (Qps) (Scorpion 4) (set 6)", - "sc4captnf", "Captain Cash (Qps) (Scorpion 4) (set 7)", - "sc4cari", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 1)", - "sc4caria", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 2)", - "sc4carib", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 3)", - "sc4caric", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 4)", - "sc4carid", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 5)", - "sc4carie", "Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 6)", - "sc4cariq", "Caribbean Cash (Qps) (Scorpion 4) (set 1)", - "sc4cariqa", "Caribbean Cash (Qps) (Scorpion 4) (set 2)", - "sc4cariqb", "Caribbean Cash (Qps) (Scorpion 4) (set 3)", - "sc4cariqc", "Caribbean Cash (Qps) (Scorpion 4) (set 4)", - "sc4cariqd", "Caribbean Cash (Qps) (Scorpion 4) (set 5)", - "sc4cariqe", "Caribbean Cash (Qps) (Scorpion 4) (set 6)", - "sc4cariqf", "Caribbean Cash (Qps) (Scorpion 4) (set 7)", - "sc4cariqg", "Caribbean Cash (Qps) (Scorpion 4) (set 8)", - "sc4carry", "Carry On Winning (Bellfruit) (Scorpion 4) (set 1)", - "sc4carrya", "Carry On Winning (Bellfruit) (Scorpion 4) (set 2)", - "sc4cashg", "Cashanova (German) (Mazooma / Nova) (Scorpion 4)", - "sc4cashm", "Cashanova (Mazooma) (Scorpion 4) (set 1)", - "sc4cashma", "Cashanova (Mazooma) (Scorpion 4) (set 2)", - "sc4cashmb", "Cashanova (Mazooma) (Scorpion 4) (set 3)", - "sc4cashmc", "Cashanova (Mazooma) (Scorpion 4) (set 4)", - "sc4cashmd", "Cashanova (Mazooma) (Scorpion 4) (set 5)", - "sc4cashme", "Cashanova (Mazooma) (Scorpion 4) (set 6)", - "sc4cashn", "Cashanova (Dutch) (Mazooma / Eurocoin) (Scorpion 4)", - "sc4casry", "Casino Royale (PR2062) (Mazooma) (Scorpion 4) (set 1)", - "sc4casrya", "Casino Royale (PR2073) (Czech) (Mazooma) (Scorpion 4) (set 1)", - "sc4casryb", "Casino Royale (PR2073) (Czech) (Mazooma) (Scorpion 4) (set 2)", - "sc4casryc", "Casino Royale (PR2062) (Mazooma) (Scorpion 4) (set 2)", - "sc4casryd", "Casino Royale (PR2075) (Mazooma) (Scorpion 4) (set 1)", - "sc4casrye", "Casino Royale (PR2075) (Mazooma) (Scorpion 4) (set 2)", - "sc4casxt", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 1)", - "sc4casxta", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 2)", - "sc4casxtb", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 3)", - "sc4casxtc", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 4)", - "sc4casxtd", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 5)", - "sc4casxte", "Casino Xtravaganza (Mazooma) (Scorpion 4) (set 6)", - "sc4cbaz", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4cbaza", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4cbazb", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4cbazc", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4cbazd", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4cbaze", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4cbazf", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 7)", - "sc4cbazg", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 8)", - "sc4cbazh", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 9)", - "sc4cbazi", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 10)", - "sc4cbazj", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 11)", - "sc4cbazk", "Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 12)", - "sc4cblas", "Cash Blast (Voodoo Games) (Scorpion 4) (set 1)", - "sc4cblasa", "Cash Blast (Voodoo Games) (Scorpion 4) (set 2)", - "sc4cburn", "Cash 'n' Burn (Qps) (Scorpion 4) (set 1)", - "sc4cburna", "Cash 'n' Burn (Qps) (Scorpion 4) (set 2)", - "sc4ccc", "Criss Cross Crazy (Dutch) (Bellfruit) (Scorpion 4)", - "sc4cccsh", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 1)", - "sc4cccsha", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 2)", - "sc4cccshb", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 3)", - "sc4cccshc", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 4)", - "sc4cccshd", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 5)", - "sc4cccshe", "Criss Cross Cash (Mazooma) (Scorpion 4) (set 6)", - "sc4cckey", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 1)", - "sc4cckeya", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 2)", - "sc4cckeyb", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 3)", - "sc4cckeyc", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 4)", - "sc4cckeyd", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 5)", - "sc4cckeye", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 6)", - "sc4cckeyf", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 7)", - "sc4cckeyg", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 8)", - "sc4cckeyh", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 9)", - "sc4cckeyi", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 11)", - "sc4cckeyj", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 10)", - "sc4cckeyk", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 12)", - "sc4cckeyl", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 13)", - "sc4cckeym", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 14)", - "sc4cckeyn", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 15)", - "sc4cckeyo", "Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 16)", - "sc4cclas", "Club Class (Bellfruit) (Scorpion 4) (set 1)", - "sc4cclas0", "Club Class (Bellfruit) (Scorpion 4) (set 24)", - "sc4cclas1", "Club Class (Bellfruit) (Scorpion 4) (set 25)", - "sc4cclas2", "Club Class (Bellfruit) (Scorpion 4) (set 26)", - "sc4cclas3", "Club Class (Bellfruit) (Scorpion 4) (set 27)", - "sc4cclas4", "Club Class (Bellfruit) (Scorpion 4) (set 28)", - "sc4cclasa", "Club Class (Bellfruit) (Scorpion 4) (set 2)", - "sc4cclasb", "Club Class (Bellfruit) (Scorpion 4) (set 3)", - "sc4cclasc", "Club Class (Bellfruit) (Scorpion 4) (set 4)", - "sc4cclasd", "Club Class (Bellfruit) (Scorpion 4) (set 5)", - "sc4cclase", "Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 1)", - "sc4cclasf", "Club Class (Bellfruit) (Scorpion 4) (set 6)", - "sc4cclasg", "Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 2)", - "sc4cclash", "Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 3)", - "sc4cclasi", "Club Class (Bellfruit) (Scorpion 4) (set 7)", - "sc4cclasj", "Club Class (Bellfruit) (Scorpion 4) (set 8)", - "sc4cclask", "Club Class (Bellfruit) (Scorpion 4) (set 9)", - "sc4cclasl", "Club Class (Bellfruit) (Scorpion 4) (set 10)", - "sc4cclasm", "Club Class (Bellfruit) (Scorpion 4) (set 11)", - "sc4cclasn", "Club Class (Bellfruit) (Scorpion 4) (set 12)", - "sc4cclaso", "Club Class (Bellfruit) (Scorpion 4) (set 13)", - "sc4cclasp", "Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 4)", - "sc4cclasq", "Club Class (Bellfruit) (Scorpion 4) (set 14)", - "sc4cclasr", "Club Class (Bellfruit) (Scorpion 4) (set 15)", - "sc4cclass", "Club Class (Bellfruit) (Scorpion 4) (set 16)", - "sc4cclast", "Club Class (Bellfruit) (Scorpion 4) (set 17)", - "sc4cclasu", "Club Class (Bellfruit) (Scorpion 4) (set 18)", - "sc4cclasv", "Club Class (Bellfruit) (Scorpion 4) (set 19)", - "sc4cclasw", "Club Class (Bellfruit) (Scorpion 4) (set 20)", - "sc4cclasx", "Club Class (Bellfruit) (Scorpion 4) (set 21)", - "sc4cclasy", "Club Class (Bellfruit) (Scorpion 4) (set 22)", - "sc4cclasz", "Club Class (Bellfruit) (Scorpion 4) (set 23)", - "sc4cclim", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 1)", - "sc4cclima", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 2)", - "sc4cclimb", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 3)", - "sc4cclimc", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 4)", - "sc4cclimd", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 5)", - "sc4cclime", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 13)", - "sc4cclimf", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 14)", - "sc4cclimg", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 15)", - "sc4cclimh", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 6)", - "sc4cclimi", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 7)", - "sc4cclimj", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 16)", - "sc4cclimk", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 17)", - "sc4ccliml", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 18)", - "sc4cclimm", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 8)", - "sc4cclimn", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 9)", - "sc4cclimo", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 10)", - "sc4cclimp", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 11)", - "sc4cclimq", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 19)", - "sc4cclimr", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 20)", - "sc4cclims", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 12)", - "sc4cclimt", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 21)", - "sc4cclimu", "Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 22)", - "sc4ccogs", "Clever Cogs (Qps) (Scorpion 4)", - "sc4cconx", "Cash Connexion (Mazooma) (Scorpion 4) (set 1)", - "sc4cconxa", "Cash Connexion (Mazooma) (Scorpion 4) (set 2)", - "sc4cconxb", "Cash Connexion (Mazooma) (Scorpion 4) (set 3)", - "sc4cconxc", "Cash Connexion (Mazooma) (Scorpion 4) (set 4)", - "sc4cconxd", "Cash Connexion (Mazooma) (Scorpion 4) (set 5)", - "sc4ccrus", "Cash Crusaders (Mazooma) (Scorpion 4) (set 1)", - "sc4ccrusa", "Cash Crusaders (Mazooma) (Scorpion 4) (set 2)", - "sc4ccrusb", "Cash Crusaders (Mazooma) (Scorpion 4) (set 3)", - "sc4celeb", "I'm A Celebrity (Bellfruit) (Scorpion 4) (set 1)", - "sc4celeba", "I'm A Celebrity (Bellfruit) (Scorpion 4) (set 2)", - "sc4celebb", "I'm A Celebrity (Bellfruit) (Scorpion 4) (set 3)", - "sc4celebc", "I'm A Celebrity (Bellfruit) (Scorpion 4) (set 4)", - "sc4celebd", "I'm A Celebrity (Bellfruit) (Scorpion 4) (set 5)", - "sc4cerup", "Cash Eruption (Mazooma) (Scorpion 4)", - "sc4cexpl", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 1)", - "sc4cexpla", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 2)", - "sc4cexplb", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 3)", - "sc4cexplc", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 4)", - "sc4cexpld", "Cash Explosion (PR2120) (Mazooma) (Scorpion 4) (set 1)", - "sc4cexple", "Cash Explosion (PR2120) (Mazooma) (Scorpion 4) (set 2)", - "sc4cexplf", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 5)", - "sc4cexplg", "Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 6)", - "sc4cfcas", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 1)", - "sc4cfcas0", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 18)", - "sc4cfcas1", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 19)", - "sc4cfcas2", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 20)", - "sc4cfcas3", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 9)", - "sc4cfcas4", "Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 1)", - "sc4cfcas5", "Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 2)", - "sc4cfcas6", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 21)", - "sc4cfcas7", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 22)", - "sc4cfcas8", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 23)", - "sc4cfcas9", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 10)", - "sc4cfcasa", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 2)", - "sc4cfcasaa", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 24)", - "sc4cfcasab", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 11)", - "sc4cfcasac", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 12)", - "sc4cfcasad", "Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 3)", - "sc4cfcasae", "Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 4)", - "sc4cfcasaf", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 25)", - "sc4cfcasag", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 26)", - "sc4cfcasah", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 27)", - "sc4cfcasai", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 28)", - "sc4cfcasaj", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 29)", - "sc4cfcasak", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 30)", - "sc4cfcasal", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 31)", - "sc4cfcasam", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 32)", - "sc4cfcasb", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 3)", - "sc4cfcasc", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 5)", - "sc4cfcasd", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 6)", - "sc4cfcase", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 4)", - "sc4cfcasf", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 5)", - "sc4cfcasg", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 7)", - "sc4cfcash", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 8)", - "sc4cfcasi", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 1)", - "sc4cfcasj", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 2)", - "sc4cfcask", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 6)", - "sc4cfcasl", "Casino Crazy Fruits (ZYPF) (Bellfruit) (Scorpion 4) (set 2)", - "sc4cfcasm", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 7)", - "sc4cfcasn", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 3)", - "sc4cfcaso", "Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 4)", - "sc4cfcasp", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 8)", - "sc4cfcasq", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 9)", - "sc4cfcasr", "Casino Crazy Fruits (ZYPF) (Bellfruit) (Scorpion 4) (set 1)", - "sc4cfcass", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 10)", - "sc4cfcast", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 11)", - "sc4cfcasu", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 12)", - "sc4cfcasv", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 13)", - "sc4cfcasw", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 14)", - "sc4cfcasx", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 15)", - "sc4cfcasy", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 16)", - "sc4cfcasz", "Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 17)", - "sc4cfcla", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 1)", - "sc4cfclab", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 2)", - "sc4cfclac", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 3)", - "sc4cfclad", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 4)", - "sc4cfclae", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 5)", - "sc4cfclaf", "Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 6)", - "sc4cfclb", "Crazy Fruits Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4cfclba", "Crazy Fruits Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4cfclbb", "Crazy Fruits Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4cfdu", "Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 1)", - "sc4cfdua", "Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 2)", - "sc4cfdub", "Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 3)", - "sc4cfduc", "Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 4)", - "sc4cfgcl", "Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4cfgcla", "Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4cfgclb", "Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4cfgclc", "Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4cfqps", "Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 1)", - "sc4cfqpsa", "Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 4)", - "sc4cfqpsb", "Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 2)", - "sc4cfqpsc", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 1)", - "sc4cfqpsd", "Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 3)", - "sc4cfqpse", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 2)", - "sc4cfqpsf", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 3)", - "sc4cfqpsg", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 4)", - "sc4cfqpsh", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 5)", - "sc4cfqpsi", "Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 6)", - "sc4cfqpsj", "Crazy Fruits SP98 (PR4613) (Qps) (Scorpion 4)", - "sc4cfqpsk", "Crazy Fruits (PR6813, CCAS) (Qps) (Scorpion 4) (set 1)", - "sc4cfqpsl", "Crazy Fruits SP98 (PR4613) (BFM) (Scorpion 4) (set 1)", - "sc4cfqpsm", "Crazy Fruits SP98 (PR4613) (BFM / Whitbread) (Scorpion 4) (set 1)", - "sc4cfqpsn", "Crazy Fruits SP98 (PR4613) (BFM) (Scorpion 4) (set 2)", - "sc4cfqpso", "Crazy Fruits SP98 (PR4613) (BFM / Whitbread) (Scorpion 4) (set 2)", - "sc4cfqpsp", "Crazy Fruits SP98 (PR4613) (BFM) (Scorpion 4) (set 3)", - "sc4chain", "Chain Reaction (Bellfruit) (Scorpion 4) (set 1)", - "sc4chaina", "Chain Reaction (Bellfruit) (Scorpion 4) (set 2)", - "sc4chainb", "Chain Reaction (Bellfruit) (Scorpion 4) (set 3)", - "sc4chainc", "Chain Reaction (Bellfruit) (Scorpion 4) (set 4)", - "sc4chand", "Cash In Hand (Bellfruit) (Scorpion 4) (set 1)", - "sc4chanda", "Cash In Hand (Bellfruit) (Scorpion 4) (set 2)", - "sc4chandb", "Cash In Hand (Bellfruit) (Scorpion 4) (set 3)", - "sc4chandc", "Cash In Hand (Bellfruit) (Scorpion 4) (set 4)", - "sc4chavi", "Chav It (Bellfruit) (Scorpion 4) (set 1)", - "sc4chavia", "Chav It (Bellfruit) (Scorpion 4) (set 2)", - "sc4chavib", "Chav It (Bellfruit) (Scorpion 4) (set 3)", - "sc4chavic", "Chav It (Bellfruit) (Scorpion 4) (set 4)", - "sc4chavid", "Chav It (Bellfruit) (Scorpion 4) (set 5)", - "sc4chavie", "Chav It (Bellfruit) (Scorpion 4) (set 6)", - "sc4chavif", "Chav It (Bellfruit) (Scorpion 4) (set 7)", - "sc4chavig", "Chav It (Bellfruit) (Scorpion 4) (set 8)", - "sc4chavy", "Chavy Chase (Mazooma) (Scorpion 4) (set 1)", - "sc4chavya", "Chavy Chase (Mazooma) (Scorpion 4) (set 2)", - "sc4chavyb", "Chavy Chase (Mazooma) (Scorpion 4) (set 3)", - "sc4chavyc", "Chavy Chase (Mazooma) (Scorpion 4) (set 4)", - "sc4chavyd", "Chavy Chase (Mazooma) (Scorpion 4) (set 5)", - "sc4chavye", "Chavy Chase (Mazooma) (Scorpion 4) (set 6)", - "sc4chavyf", "Chavy Chase (Mazooma) (Scorpion 4) (set 7)", - "sc4chavyg", "Chavy Chase (Mazooma) (Scorpion 4) (set 8)", - "sc4chick", "Chickendales (Mazooma) (Scorpion 4)", - "sc4chub", "Chubby Does Vegas (Mazooma) (Scorpion 4) (set 1)", - "sc4chuba", "Chubby Does Vegas (Mazooma) (Scorpion 4) (set 2)", - "sc4chubb", "Chubby Does Vegas (Mazooma) (Scorpion 4) (set 3)", - "sc4cinv", "Cash Invaders (Bellfruit) (Scorpion 4) (set 1)", - "sc4cinva", "Cash Invaders (Bellfruit) (Scorpion 4) (set 2)", - "sc4cinvb", "Cash Invaders (Bellfruit) (Scorpion 4) (set 3)", - "sc4cinvc", "Cash Invaders (Bellfruit) (Scorpion 4) (set 4)", - "sc4cinvd", "Cash Invaders (Bellfruit) (Scorpion 4) (set 5)", - "sc4cinve", "Cash Invaders (Bellfruit) (Scorpion 4) (set 6)", - "sc4cinvf", "Cash Invaders (Bellfruit) (Scorpion 4) (set 7)", - "sc4cinvg", "Cash Invaders (Bellfruit) (Scorpion 4) (set 8)", - "sc4cinvh", "Cash Invaders (Bellfruit) (Scorpion 4) (set 9)", - "sc4cinvi", "Cash Invaders (Bellfruit) (Scorpion 4) (set 10)", - "sc4cj", "Cool Jewels (Bellfruit) (Scorpion 4) (set 1)", - "sc4cja", "Cool Jewels (Bellfruit) (Scorpion 4) (set 2)", - "sc4cjb", "Cool Jewels (Bellfruit) (Scorpion 4) (set 3)", - "sc4cjc", "Cool Jewels (Bellfruit) (Scorpion 4) (set 4)", - "sc4cjcl", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4cjcla", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4cjclb", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4cjclc", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4cjcld", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4cjcle", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4cjclf", "Cool Jewels Club (Bellfruit) (Scorpion 4) (set 7)", - "sc4cjd", "Cool Jewels (Bellfruit) (Scorpion 4) (set 5)", - "sc4ckx", "Casino King X (Mazooma) (Scorpion 4) (Top Box, set 1)", - "sc4ckxa", "Casino King X (Mazooma) (Scorpion 4) (Base, set 1)", - "sc4ckxb", "Casino King X (Mazooma) (Scorpion 4) (Base, set 2)", - "sc4ckxc", "Casino King X (Mazooma) (Scorpion 4) (Base, set 3)", - "sc4ckxd", "Casino King X (Mazooma) (Scorpion 4) (Top Box, set 2)", - "sc4ckxe", "Casino King X (Mazooma) (Scorpion 4) (Base, set 4)", - "sc4ckxf", "Casino King X (Mazooma) (Scorpion 4) (Base, set 5)", - "sc4ckxg", "Casino King X (Mazooma) (Scorpion 4) (Base, set 6)", - "sc4cla7", "Classic 7s (Mazooma) (Scorpion 4) (set 1)", - "sc4cla7a", "Classic 7s (Mazooma) (Scorpion 4) (set 2)", - "sc4cla7b", "Classic 7s (Mazooma) (Scorpion 4) (set 3)", - "sc4cla7c", "Classic 7s (Mazooma) (Scorpion 4) (set 4)", - "sc4clash", "Cash On The Lash (Mazooma) (Scorpion 4) (set 1)", - "sc4clasha", "Cash On The Lash (Mazooma) (Scorpion 4) (set 2)", - "sc4clashb", "Cash On The Lash (Mazooma) (Scorpion 4) (set 3)", - "sc4clashc", "Cash On The Lash (Mazooma) (Scorpion 4) (set 4)", - "sc4clashd", "Cash On The Lash (Mazooma) (Scorpion 4) (set 5)", - "sc4clashe", "Cash On The Lash (Mazooma) (Scorpion 4) (set 6)", - "sc4clashf", "Cash On The Lash (Mazooma) (Scorpion 4) (set 7)", - "sc4clashg", "Cash On The Lash (Mazooma) (Scorpion 4) (set 8)", - "sc4clbmn", "Club Moneybags (Bellfruit) (Scorpion 4) (set 1)", - "sc4clbmna", "Club Moneybags (Bellfruit) (Scorpion 4) (set 2)", - "sc4clbmnb", "Club Moneybags (Bellfruit) (Scorpion 4) (set 3)", - "sc4clbmnc", "Club Moneybags (Bellfruit) (Scorpion 4) (set 4)", - "sc4clbtm", "Club Temptation (Bellfruit) (Scorpion 4) (set 1)", - "sc4clbtma", "Club Temptation (Bellfruit) (Scorpion 4) (set 2)", - "sc4clbtmb", "Club Temptation (Bellfruit) (Scorpion 4) (set 3)", - "sc4clbtmc", "Club Temptation (Bellfruit) (Scorpion 4) (set 4)", - "sc4clbtmd", "Club Temptation (Bellfruit) (Scorpion 4) (set 5)", - "sc4clbtme", "Club Temptation (Bellfruit) (Scorpion 4) (set 6)", - "sc4clclo", "Club Clouseau (QPS) (Scorpion 4)", - "sc4clown", "Clown Around (Bellfruit) (Scorpion 4) (set 1)", - "sc4clowna", "Clown Around (Bellfruit) (Scorpion 4) (set 2)", - "sc4clownb", "Clown Around (Bellfruit) (Scorpion 4) (set 3)", - "sc4clownc", "Clown Around (Bellfruit) (Scorpion 4) (set 4)", - "sc4clownd", "Clown Around (Bellfruit) (Scorpion 4) (set 5)", - "sc4clowne", "Clown Around (Bellfruit) (Scorpion 4) (set 6)", - "sc4clownf", "Clown Around (Bellfruit) (Scorpion 4) (set 7)", - "sc4clowng", "Clown Around (Bellfruit) (Scorpion 4) (set 8)", - "sc4clucl", "Cluedo Club (Mazooma) (Scorpion 4) (set 1)", - "sc4clucla", "Cluedo Club (Mazooma) (Scorpion 4) (set 2)", - "sc4clue", "Cluedo (Mazooma) (Scorpion 4) (set 1)", - "sc4cluea", "Cluedo (Mazooma) (Scorpion 4) (set 2)", - "sc4clueb", "Cluedo (Mazooma) (Scorpion 4) (set 3)", - "sc4cluec", "Cluedo (Mazooma) (Scorpion 4) (set 4)", - "sc4clued", "Cluedo (Mazooma) (Scorpion 4) (set 5)", - "sc4cluee", "Cluedo (Mazooma) (Scorpion 4) (set 6)", - "sc4cluef", "Cluedo (Mazooma) (Scorpion 4) (set 7)", - "sc4clueg", "Cluedo (Mazooma) (Scorpion 4) (set 8)", - "sc4cmani", "Colour Mania (Bellfruit) (Scorpion 4) (set 1)", - "sc4cmania", "Colour Mania (Bellfruit) (Scorpion 4) (set 2)", - "sc4cmon", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 1)", - "sc4cmona", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 2)", - "sc4cmonb", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 3)", - "sc4cmonc", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 4)", - "sc4cmond", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 5)", - "sc4cmone", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 6)", - "sc4cmonf", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 7)", - "sc4cmong", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 8)", - "sc4cmonh", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 9)", - "sc4cmoni", "Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 10)", - "sc4cmous", "Cash & Mouse (V041) (Qps) (Scorpion 4) (set 1)", - "sc4cmousa", "Cash & Mouse (V011) (Qps) (Scorpion 4) (set 1)", - "sc4cmousb", "Cash & Mouse (V041) (Qps) (Scorpion 4) (set 2)", - "sc4cmousc", "Cash & Mouse (V011) (Qps) (Scorpion 4) (set 2)", - "sc4cnfr", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 1)", - "sc4cnfra", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 2)", - "sc4cnfrb", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 3)", - "sc4cnfrc", "Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 1)", - "sc4cnfrd", "Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 2)", - "sc4cnfre", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 4)", - "sc4cnfrf", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 5)", - "sc4cnfrg", "Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 6)", - "sc4cnfrh", "Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 3)", - "sc4cnfri", "Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 4)", - "sc4colos", "Colossus (Dutch) (Bellfruit) (Scorpion 4)", - "sc4copsr", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 1)", - "sc4copsra", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 2)", - "sc4copsrb", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 3)", - "sc4copsrc", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 4)", - "sc4copsrd", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 5)", - "sc4copsre", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 6)", - "sc4copsrf", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 7)", - "sc4copsrg", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 8)", - "sc4copsrh", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 9)", - "sc4copsri", "Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 10)", - "sc4corcl", "Coronation Street Club (Mazooma) (Scorpion 4) (set 1)", - "sc4corcla", "Coronation Street Club (Mazooma) (Scorpion 4) (set 2)", - "sc4coro", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 1)", - "sc4coroa", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 2)", - "sc4coroc", "Coronation Street Triple (Arcade Version 012) (PR2249) (Mazooma) (Scorpion 4) (set 1)", - "sc4corod", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 4) (set 1)", - "sc4corof", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 3)", - "sc4corog", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 4)", - "sc4coroh", "Coronation Street Triple (Arcade Version 012) (PR2249) (Mazooma) (Scorpion 4) (set 2)", - "sc4coroi", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 4) (set 2)", - "sc4coroj", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 5)", - "sc4corok", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 6)", - "sc4corol", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 7)", - "sc4corom", "Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 8)", - "sc4coron", "Coronation Street Triple (Bingo Version ?1) (PR2?4?) (Mazooma) (Scorpion 4)", - "sc4corotb", "Coronation Street Triple Top Box (PR2526, CSTB) (Mazooma) (Scorpion 4) (Top Box, set 1)", - "sc4corotba", "Coronation Street Triple Top Box (PR2526, CSTB) (Mazooma) (Scorpion 4) (Top Box, set 2)", - "sc4count", "Countdown (Bellfruit) (Scorpion 4) (set 1)", - "sc4counta", "Countdown (Bellfruit) (Scorpion 4) (set 2)", - "sc4cr", "Cash Raker (Qps) (Scorpion 4) (set 1)", - "sc4cra", "Cash Raker (Qps) (Scorpion 4) (set 2)", - "sc4crb", "Cash Raker (Qps) (Scorpion 4) (set 3)", - "sc4crc", "Cash Raker (V2.1) (Qps) (Scorpion 4) (set 1)", - "sc4crcc", "Cops 'n' Robbers Club Classic (Bellfruit) (Scorpion 4) (set 1)", - "sc4crcca", "Cops 'n' Robbers Club Classic (Bellfruit) (Scorpion 4) (set 2)", - "sc4crccb", "Cops 'n' Robbers Club Classic (65%) (Bellfruit) (Scorpion 4) (set 1)", - "sc4crccc", "Cops 'n' Robbers Club Classic (65%) (Bellfruit) (Scorpion 4) (set 2)", - "sc4crcl", "Cash Raker Club (V1.0) (Qps) (Scorpion 4) (set 1)", - "sc4crcla", "Cash Raker Club (V1.1) (Qps) (Scorpion 4) (set 1)", - "sc4crclb", "Cash Raker Club (V1.0) (Qps) (Scorpion 4) (set 2)", - "sc4crclc", "Cash Raker Club (V1.1) (Qps) (Scorpion 4) (set 2)", - "sc4crcld", "Cash Raker Club (V1.3) (Qps) (Scorpion 4)", - "sc4crcle", "Cash Raker Club (411) (Qps) (Scorpion 4) (set 1)", - "sc4crclf", "Cash Raker Club (411) (Qps) (Scorpion 4) (set 2)", - "sc4crcp", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 1)", - "sc4crcpa", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 2)", - "sc4crcpc", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 3)", - "sc4crcpd", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 4)", - "sc4crcpe", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 5)", - "sc4crcpf", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 6)", - "sc4crcpg", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 7)", - "sc4crcph", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 8)", - "sc4crcpi", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 9)", - "sc4crcpj", "Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 10)", - "sc4crd", "Cash Raker (V2.2) (Qps) (Scorpion 4) (set 1)", - "sc4cre", "Cash Raker (V2.1) (Qps) (Scorpion 4) (set 2)", - "sc4crf", "Cash Raker (V2.2) (Qps) (Scorpion 4) (set 2)", - "sc4crgc", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4crgca", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4crgcb", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4crgcc", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4crgcd", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4crgce", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4crgcf", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 7)", - "sc4crgcg", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 8)", - "sc4crgch", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 9)", - "sc4crgci", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 10)", - "sc4crgcj", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 11)", - "sc4crgck", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 12)", - "sc4crgcl", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 13)", - "sc4crgcm", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 14)", - "sc4crgcn", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 19)", - "sc4crgco", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 15)", - "sc4crgcp", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 20)", - "sc4crgcq", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 16)", - "sc4crgcr", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 21)", - "sc4crgcs", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 23)", - "sc4crgct", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 17)", - "sc4crgcu", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 22)", - "sc4crgcv", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 24)", - "sc4crgcw", "Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 18)", - "sc4crnjw", "Crown Jewels (Bellfruit) (Scorpion 4) (set 1)", - "sc4crnjwa", "Crown Jewels (Bellfruit) (Scorpion 4) (set 2)", - "sc4crsc", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 1)", - "sc4crsca", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 2)", - "sc4crscb", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 3)", - "sc4crscc", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 4)", - "sc4crscd", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 5)", - "sc4crsce", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 6)", - "sc4crscf", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 7)", - "sc4crscg", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 8)", - "sc4crzcs", "Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 1)", - "sc4crzcsa", "Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 2)", - "sc4crzcsb", "Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 3)", - "sc4crzcsc", "Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 4)", - "sc4crzgn", "Crazy Gang (Bellfruit) (Scorpion 4) (set 1, Top Box)", - "sc4crzgn0", "Crazy Gang (Bellfruit) (Scorpion 4) (set 18)", - "sc4crzgn1", "Crazy Gang (Bellfruit) (Scorpion 4) (set 19)", - "sc4crzgn2", "Crazy Gang (Bellfruit) (Scorpion 4) (set 20)", - "sc4crzgn3", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 7)", - "sc4crzgn4", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 8)", - "sc4crzgn5", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 9)", - "sc4crzgn6", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 10)", - "sc4crzgn7", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 11)", - "sc4crzgn8", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 12)", - "sc4crzgna", "Crazy Gang (Bellfruit) (Scorpion 4) (set 1)", - "sc4crzgnb", "Crazy Gang (Bellfruit) (Scorpion 4) (set 2, Top Box)", - "sc4crzgnc", "Crazy Gang (Bellfruit) (Scorpion 4) (set 2)", - "sc4crzgnd", "Crazy Gang (Bellfruit) (Scorpion 4) (set 3)", - "sc4crzgne", "Crazy Gang (Bellfruit) (Scorpion 4) (set 4)", - "sc4crzgnf", "Crazy Gang (Bellfruit) (Scorpion 4) (set 5)", - "sc4crzgng", "Crazy Gang (Bellfruit) (Scorpion 4) (set 3, Top Box)", - "sc4crzgnh", "Crazy Gang (Bellfruit) (Scorpion 4) (set 6)", - "sc4crzgni", "Crazy Gang (Bellfruit) (Scorpion 4) (set 7)", - "sc4crzgnj", "Crazy Gang (Bellfruit) (Scorpion 4) (set 4, Top Box)", - "sc4crzgnk", "Crazy Gang (Bellfruit) (Scorpion 4) (set 8)", - "sc4crzgnl", "Crazy Gang (Bellfruit) (Scorpion 4) (set 9)", - "sc4crzgnm", "Crazy Gang (Bellfruit) (Scorpion 4) (set 10)", - "sc4crzgnn", "Crazy Gang (Bellfruit) (Scorpion 4) (set 11)", - "sc4crzgno", "Crazy Gang (Bellfruit) (Scorpion 4) (set 12)", - "sc4crzgnp", "Crazy Gang (Bellfruit) (Scorpion 4) (set 13)", - "sc4crzgnq", "Crazy Gang (Bellfruit) (Scorpion 4) (set 14)", - "sc4crzgnr", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 1)", - "sc4crzgns", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 2)", - "sc4crzgnt", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 3)", - "sc4crzgnu", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 4)", - "sc4crzgnv", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 5)", - "sc4crzgnw", "Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 6)", - "sc4crzgnx", "Crazy Gang (Bellfruit) (Scorpion 4) (set 15)", - "sc4crzgny", "Crazy Gang (Bellfruit) (Scorpion 4) (set 16)", - "sc4crzgnz", "Crazy Gang (Bellfruit) (Scorpion 4) (set 17)", - "sc4crzky", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 1)", - "sc4crzkya", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 2)", - "sc4crzkyb", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 3)", - "sc4crzkyc", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 4)", - "sc4crzkyd", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 5)", - "sc4crzkye", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 6)", - "sc4crzkyf", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 7)", - "sc4crzkyg", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 8)", - "sc4crzkyh", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 9)", - "sc4crzkyi", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 1)", - "sc4crzkyj", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 2)", - "sc4crzkyk", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 3)", - "sc4crzkyl", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 10)", - "sc4crzkym", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 11)", - "sc4crzkyn", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 12)", - "sc4crzkyo", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 4)", - "sc4crzkyp", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 5)", - "sc4crzkyq", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 6)", - "sc4crzkyr", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 7)", - "sc4crzkys", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 8)", - "sc4crzkyt", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 13)", - "sc4crzkyu", "Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 14)", - "sc4crzkyv", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 9)", - "sc4crzkyw", "Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 10)", - "sc4crzwl", "Crazy World (Mazooma) (Scorpion 4) (set 1)", - "sc4crzwla", "Crazy World (Mazooma) (Scorpion 4) (set 2)", - "sc4crzwlb", "Crazy World (Mazooma) (Scorpion 4) (set 3)", - "sc4crzwlc", "Crazy World (Mazooma) (Scorpion 4) (set 4)", - "sc4crzwld", "Crazy World (Mazooma) (Scorpion 4) (set 5)", - "sc4crzwle", "Crazy World (Mazooma) (Scorpion 4) (set 6)", - "sc4crzwlf", "Crazy World (Mazooma) (Scorpion 4) (set 7)", - "sc4crzwlg", "Crazy World (Mazooma) (Scorpion 4) (set 8)", - "sc4ctl", "Cop The Lot (Bellfruit) (Scorpion 4) (set 1)", - "sc4ctla", "Cop The Lot (Bellfruit) (Scorpion 4) (set 2)", - "sc4ctlb", "Cop The Lot (Bellfruit) (Scorpion 4) (set 3)", - "sc4ctlc", "Cop The Lot (Bellfruit) (Scorpion 4) (set 4)", - "sc4ctlcl", "Cop The Lot Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4ctlcla", "Cop The Lot Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4ctlclb", "Cop The Lot Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4ctlclc", "Cop The Lot Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4ctld", "Cop The Lot (Bellfruit) (Scorpion 4) (set 5)", - "sc4ctle", "Cop The Lot (Bellfruit) (Scorpion 4) (set 6)", - "sc4cvani", "Cashvania (Qps) (Scorpion 4) (set 1)", - "sc4cvania", "Cashvania (Qps) (Scorpion 4) (set 2)", - "sc4cvanib", "Cashvania (Qps) (Scorpion 4) (set 3)", - "sc4cvanic", "Cashvania (Qps) (Scorpion 4) (set 4)", - "sc4cvanid", "Cashvania (Qps) (Scorpion 4) (set 5)", - "sc4cvanie", "Cashvania (Qps) (Scorpion 4) (set 6)", - "sc4cvanif", "Cashvania (Qps) (Scorpion 4) (set 7)", - "sc4cvanig", "Cashvania (Qps) (Scorpion 4) (set 8)", - "sc4cvanih", "Cashvania (Qps) (Scorpion 4) (set 9)", - "sc4cvanii", "Cashvania (Qps) (Scorpion 4) (set 10)", - "sc4cvclb", "Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 1)", - "sc4cvclba", "Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 2)", - "sc4cvclbb", "Cashvania Club (V2.0) (Qps) (Scorpion 4) (set 1)", - "sc4cvclbc", "Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 3)", - "sc4cvclbd", "Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 4)", - "sc4cvclbe", "Cashvania Club (V2.0) (Qps) (Scorpion 4) (set 2)", - "sc4cvclbf", "Cashvania Club (V411) (Qps) (Scorpion 4) (set 1)", - "sc4cvclbg", "Cashvania Club (V411) (Qps) (Scorpion 4) (set 2)", - "sc4cyc", "Count Yer Cash (Mazooma) (Scorpion 4) (set 1)", - "sc4cyca", "Count Yer Cash (Mazooma) (Scorpion 4) (set 2)", - "sc4cycb", "Count Yer Cash (Mazooma) (Scorpion 4) (set 3)", - "sc4cycc", "Count Yer Cash (Mazooma) (Scorpion 4) (set 4)", - "sc4cyccl", "Count Yer Cash Club (Mazooma) (Scorpion 4) (set 1)", - "sc4cyccla", "Count Yer Cash Club (Mazooma) (Scorpion 4) (set 2)", - "sc4cycclb", "Count Yer Cash Club (Mazooma) (Scorpion 4) (set 3)", - "sc4cycclc", "Count Yer Cash Club (Mazooma) (Scorpion 4) (set 4)", - "sc4cycd", "Count Yer Cash (Mazooma) (Scorpion 4) (set 5)", - "sc4czfr", "Crazy Fruits (Germany?) (PR6982, GCRF, 1.02) (Bellfruit) (Scorpion 4)", - "sc4czfra", "Crazy Fruits (Dutch) (PR1212, CRAZ) (Bellfruit) (Scorpion 4)", - "sc4czfrb", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 1)", - "sc4czfrc", "Crazy Fruits (PR6813, CCAS) (Qps) (Scorpion 4) (set 2)", - "sc4czfrd", "Crazy Fruits (Germany?) (PR6982, GCRF) (Bellfruit) (Scorpion 4)", - "sc4czfre", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 2)", - "sc4czfrf", "Crazy Fruits (PR6813, CRFR) (BFM + Whitbread) (Scorpion 4) (set 1)", - "sc4czfrg", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 3)", - "sc4czfrh", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 4)", - "sc4czfri", "Crazy Fruits (PR6813, CRFR) (BFM + Whitbread) (Scorpion 4) (set 2)", - "sc4czfrj", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 5)", - "sc4czfrk", "Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 6)", - "sc4darw", "Dough & Arrow (Qps) (Scorpion 4) (set 1)", - "sc4darwa", "Dough & Arrow (Qps) (Scorpion 4) (set 2)", - "sc4darwb", "Dough & Arrow (Qps) (Scorpion 4) (set 3)", - "sc4darwc", "Dough & Arrow (Qps) (Scorpion 4) (set 4)", - "sc4daylt", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 1)", - "sc4daylta", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 2)", - "sc4dayltb", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 3)", - "sc4dayltc", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 4)", - "sc4dayltd", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 1)", - "sc4daylte", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 2)", - "sc4dayltf", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 3)", - "sc4dayltg", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 5)", - "sc4daylth", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 6)", - "sc4daylti", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 7)", - "sc4dayltj", "Daylight Robbery (Bellfruit) (Scorpion 4) (set 8)", - "sc4dayltk", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 4)", - "sc4dayltl", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 5)", - "sc4dayltm", "Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 6)", - "sc4db", "Gold Fever (Mazooma) (Scorpion 4) (set 4)", - "sc4dbldm", "Double Diamond (Qps) (Scorpion 4)", - "sc4dblfr", "Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 1)", - "sc4dblfra", "Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 2)", - "sc4dblfrb", "Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 3)", - "sc4dblfrc", "Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 4)", - "sc4dblfrd", "Double Frenzy (PR2276) (212) (Qps) (Scorpion 4) (set 1)", - "sc4dblfre", "Double Frenzy (PR2276) (212) (Qps) (Scorpion 4) (set 2)", - "sc4dcrls", "Double Crazy Reels (021) (Mazooma) (Scorpion 4) (set 1)", - "sc4dcrlsa", "Double Crazy Reels (031) (Mazooma) (Scorpion 4) (set 1)", - "sc4dcrlsb", "Double Crazy Reels (022) (Mazooma) (Scorpion 4) (set 1)", - "sc4dcrlsc", "Double Crazy Reels (032) (Mazooma) (Scorpion 4) (set 1)", - "sc4dcrlsd", "Double Crazy Reels (023) (Mazooma) (Scorpion 4) (set 1)", - "sc4dcrlse", "Double Crazy Reels (033) (Mazooma) (Scorpion 4) (set 1)", - "sc4dcrlsf", "Double Crazy Reels (021) (Mazooma) (Scorpion 4) (set 2)", - "sc4dcrlsg", "Double Crazy Reels (031) (Mazooma) (Scorpion 4) (set 2)", - "sc4dcrlsh", "Double Crazy Reels (022) (Mazooma) (Scorpion 4) (set 2)", - "sc4dcrlsi", "Double Crazy Reels (032) (Mazooma) (Scorpion 4) (set 2)", - "sc4dcrlsj", "Double Crazy Reels (023) (Mazooma) (Scorpion 4) (set 2)", - "sc4dcrlsk", "Double Crazy Reels (033) (Mazooma) (Scorpion 4) (set 2)", - "sc4ddosh", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 1)", - "sc4ddosha", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 2)", - "sc4ddoshb", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 3)", - "sc4ddoshc", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 4)", - "sc4ddoshd", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 5)", - "sc4ddoshe", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 6)", - "sc4ddoshf", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 11)", - "sc4ddoshg", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 12)", - "sc4ddoshh", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 13)", - "sc4ddoshi", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 14)", - "sc4ddoshj", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 15)", - "sc4ddoshk", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 16)", - "sc4ddoshl", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 7)", - "sc4ddoshm", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 8)", - "sc4ddoshn", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 9)", - "sc4ddosho", "Doctor Dosh (Bellfruit) (Scorpion 4) (set 10)", - "sc4deepi", "Deep Impact (Mazooma) (Scorpion 4) (set 1)", - "sc4deepia", "Deep Impact (Mazooma) (Scorpion 4) (set 2)", - "sc4deepib", "Deep Impact (Mazooma) (Scorpion 4) (set 3)", - "sc4deepid", "Deep Impact (Mazooma) (Scorpion 4) (set 4)", - "sc4derby", "Demolition Derby (Bellfruit) (Scorpion 4) (set 1)", - "sc4derbya", "Demolition Derby (Bellfruit) (Scorpion 4) (set 2)", - "sc4derbyb", "Demolition Derby (Bellfruit) (Scorpion 4) (set 3)", - "sc4derbyc", "Demolition Derby (Bellfruit) (Scorpion 4) (set 4)", - "sc4derbyd", "Demolition Derby (Bellfruit) (Scorpion 4) (set 5)", - "sc4derbye", "Demolition Derby (Bellfruit) (Scorpion 4) (set 6)", - "sc4dhh", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 1)", - "sc4dhha", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 2)", - "sc4dhhb", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 3)", - "sc4dhhc", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 4)", - "sc4dhhd", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 5)", - "sc4dhhe", "Dough Ho Ho (Bellfruit) (Scorpion 4) (set 6)", - "sc4disco", "Disco Inferno (Mazooma) (Scorpion 4) (set 1)", - "sc4discoa", "Disco Inferno (Mazooma) (Scorpion 4) (set 3)", - "sc4discob", "Disco Inferno (Mazooma) (Scorpion 4) (set 2)", - "sc4discoc", "Disco Inferno (Mazooma) (Scorpion 4) (set 4)", - "sc4discod", "Disco Inferno (Mazooma) (Scorpion 4) (set 5)", - "sc4dmine", "Diamond Mine (Bellfruit) (Scorpion 4) (set 1)", - "sc4dminea", "Diamond Mine (Bellfruit) (Scorpion 4) (set 2)", - "sc4dmineb", "Diamond Mine (Bellfruit) (Scorpion 4) (set 3)", - "sc4dminec", "Diamond Mine (Bellfruit) (Scorpion 4) (set 4)", - "sc4dmined", "Diamond Mine (Bellfruit) (Scorpion 4) (set 5)", - "sc4dminee", "Diamond Mine (Bellfruit) (Scorpion 4) (set 6)", - "sc4dnd", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL016, set 1)", - "sc4dnda", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL422, set 2)", - "sc4dndb", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL016, set 2)", - "sc4dndbb", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE471, set 1)", - "sc4dndbba", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE472, set 1)", - "sc4dndbbb", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE471, set 2)", - "sc4dndbbc", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE472, set 2)", - "sc4dndbbd", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE473, set 1)", - "sc4dndbbe", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE571, set 1)", - "sc4dndbbf", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE572, set 1)", - "sc4dndbbg", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE473, set 2)", - "sc4dndbbh", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE571, set 2)", - "sc4dndbbi", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE572, set 2)", - "sc4dndbc", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 4) (BOXR571, set 1)", - "sc4dndbca", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 4) (BOXR571, set 2)", - "sc4dndbd", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA471, set 1)", - "sc4dndbda", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA471, set 2)", - "sc4dndbdb", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA472, set 1)", - "sc4dndbdc", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA571, set 1)", - "sc4dndbdd", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA472, set 2)", - "sc4dndbde", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA571, set 2)", - "sc4dndbe", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK012, set 1)", - "sc4dndbeb", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK422, set 1)", - "sc4dndbec", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK012, set 2)", - "sc4dndbed", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK422, set 2)", - "sc4dndbee", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK423, set 1)", - "sc4dndbef", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK425, set 1)", - "sc4dndbeg", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK013, set 1)", - "sc4dndbeh", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK014, set 1)", - "sc4dndbei", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK423, set 2)", - "sc4dndbej", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK425, set 2)", - "sc4dndbek", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK013, set 2)", - "sc4dndbel", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK014, set 2)", - "sc4dndbem", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK426, set 1)", - "sc4dndben", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK426, set 2)", - "sc4dndbr", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD471, set 1)", - "sc4dndbra", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD472, set 1)", - "sc4dndbrb", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD471, set 2)", - "sc4dndbrc", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD472, set 2)", - "sc4dndbrd", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD475, set 1)", - "sc4dndbre", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD571, set 1)", - "sc4dndbrf", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD475, set 2)", - "sc4dndbrg", "Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD571, set 2)", - "sc4dndc", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL422, set 1)", - "sc4dndcc", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR471, set 1)", - "sc4dndcca", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR474)", - "sc4dndccb", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR471, set 2)", - "sc4dndccc", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR475, set 1)", - "sc4dndccd", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR571, set 1)", - "sc4dndcce", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR475, set 2)", - "sc4dndccf", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR571, set 2)", - "sc4dndcl", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL313, set 1)", - "sc4dndcla", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL212, set 1)", - "sc4dndclb", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL391, set 1)", - "sc4dndclc", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL181, set 1)", - "sc4dndcld", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL313, set 2)", - "sc4dndcle", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL212, set 2)", - "sc4dndclf", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL391, set 2)", - "sc4dndclg", "Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL181, set 2)", - "sc4dndcs", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD211, set 1)", - "sc4dndcsa", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD212, set 1)", - "sc4dndcsb", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD211, set 2)", - "sc4dndcsc", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD212, set 2)", - "sc4dndcsd", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD215, set 1)", - "sc4dndcse", "Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD215, set 2)", - "sc4dndcw", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH271, set 1)", - "sc4dndcwa", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH272, set 1)", - "sc4dndcwb", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH271, set 2)", - "sc4dndcwc", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH272, set 2)", - "sc4dndd", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL402, set 1)", - "sc4dnddd", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO471, set 1)", - "sc4dnddda", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO571, set 1)", - "sc4dndddb", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO572, set 1)", - "sc4dndddc", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO573, set 1)", - "sc4dndddd", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO471, set 2)", - "sc4dnddde", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO571, set 2)", - "sc4dndddf", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO572, set 2)", - "sc4dndddg", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO573, set 2)", - "sc4dnddf", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC471, set 1)", - "sc4dnddfa", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC471, set 2)", - "sc4dnddfb", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC475, set 1)", - "sc4dnddfc", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC571, set 1)", - "sc4dnddfd", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC475, set 2)", - "sc4dnddfe", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC571, set 2)", - "sc4dnddw", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN471, set 1)", - "sc4dnddwa", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN473, set 1)", - "sc4dnddwb", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN471, set 2)", - "sc4dnddwc", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN473, set 2)", - "sc4dnddwd", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN475, set 1)", - "sc4dnddwe", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN572, set 1)", - "sc4dnddwf", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN475, set 2)", - "sc4dnddwg", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN572, set 2)", - "sc4dnde", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL017, set 1)", - "sc4dndf", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL018, set 1)", - "sc4dndg", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL402, set 2)", - "sc4dndh", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL017, set 2)", - "sc4dndhf", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA473, set 1)", - "sc4dndhfa", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA473, set 2)", - "sc4dndhfb", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA477, set 1)", - "sc4dndhfc", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA571, set 1)", - "sc4dndhfd", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA477, set 2)", - "sc4dndhfe", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA571, set 2)", - "sc4dndhff", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA471, set 1)", - "sc4dndhfg", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA472, set 1)", - "sc4dndhfh", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA471, set 2)", - "sc4dndhfi", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA472, set 2)", - "sc4dndhfj", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA476)", - "sc4dndhfk", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA572, set 1, bad?)", - "sc4dndhfl", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA572, set 2, bad?)", - "sc4dndi", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL018, set 2)", - "sc4dndj", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL406, set 1)", - "sc4dndk", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL428, set 1)", - "sc4dndl", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL406, set 2)", - "sc4dndlp", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN571, set 1)", - "sc4dndlpa", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN572, set 1)", - "sc4dndlpb", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN573, set 1)", - "sc4dndlpc", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN571, set 2)", - "sc4dndlpd", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN572, set 2)", - "sc4dndlpe", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN573, set 2)", - "sc4dndm", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL428, set 2)", - "sc4dndn", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL424, set 1)", - "sc4dndo", "Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL424, set 2)", - "sc4dndpg", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG471, set 1)", - "sc4dndpga", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG571, set 1)", - "sc4dndpgb", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG572, set 1)", - "sc4dndpgc", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG471, set 2)", - "sc4dndpgd", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPGB571, set 2)", - "sc4dndpge", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPGB572, set 2)", - "sc4dndra", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT471, set 1)", - "sc4dndraa", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT471, set 2)", - "sc4dndrab", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT474, set 1)", - "sc4dndrac", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT572, set 1)", - "sc4dndrad", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT474, set 2)", - "sc4dndrae", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT572, set 2)", - "sc4dndtp", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV411, set 1)", - "sc4dndtpa", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV412, set 1)", - "sc4dndtpb", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV413, set 1)", - "sc4dndtpc", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV414, set 1, bad)", - "sc4dndtpd", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV415, set 1)", - "sc4dndtpe", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV411, set 2)", - "sc4dndtpf", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV412, set 2)", - "sc4dndtpg", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV413, set 2)", - "sc4dndtph", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV414, set 2, bad)", - "sc4dndtpi", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV415, set 2)", - "sc4dndtpj", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV41A, set 1)", - "sc4dndtpk", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV41A, set 2)", - "sc4dndtpl", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV416, set 1)", - "sc4dndtpm", "Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV416, set 2)", - "sc4dndtr", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 4) (THRE571, set 1)", - "sc4dndtra", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 4) (THRE571, set 2)", - "sc4dndwb", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX412, set 1)", - "sc4dndwba", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX414, set 1)", - "sc4dndwbb", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX412, set 2)", - "sc4dndwbc", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX414, set 2)", - "sc4dndwbd", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX415, set 1)", - "sc4dndwbe", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX415, set 2)", - "sc4dndwbf", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX419, set 1)", - "sc4dndwbg", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX419, set 2)", - "sc4dndww", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH411, set 1)", - "sc4dndwwa", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH412, set 1)", - "sc4dndwwb", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH411, set 2)", - "sc4dndwwc", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH415, set 1)", - "sc4dndwwd", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH415, set 2)", - "sc4dndwwe", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH412, set 2)", - "sc4dndys", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO571, set 1)", - "sc4dndysa", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO474, set 1)", - "sc4dndysb", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO571, set 2)", - "sc4dndysc", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO474, set 2)", - "sc4dough", "Dough Selecta (Bellfruit) (Scorpion 4) (set 1)", - "sc4dougha", "Dough Selecta (Bellfruit) (Scorpion 4) (set 2)", - "sc4druby", "Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 1)", - "sc4drubya", "Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 2)", - "sc4drubyb", "Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 3)", - "sc4drubyc", "Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 4)", - "sc4drubyd", "Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 5)", - "sc4duckq", "Ducks Of Hazzard (Qps) (Scorpion 4) (set 1)", - "sc4duckqa", "Ducks Of Hazzard (Qps) (Scorpion 4) (set 2)", - "sc4ducks", "Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 1)", - "sc4ducksa", "Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 2)", - "sc4ducksb", "Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 3)", - "sc4ducksc", "Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 4)", - "sc4dyna", "Dynamite (Bellfruit) (Scorpion 4) (set 1)", - "sc4dynaa", "Dynamite (Bellfruit) (Scorpion 4) (set 2)", - "sc4eascs", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 1)", - "sc4eascsa", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 2)", - "sc4eascsb", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 3)", - "sc4eascsc", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 4)", - "sc4eascsd", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 5)", - "sc4eascse", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 6)", - "sc4eascsf", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 7)", - "sc4eascsg", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 8)", - "sc4eascsh", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 9)", - "sc4eascsi", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 10)", - "sc4eascsj", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 11)", - "sc4eascsk", "Casino Easy Streak (Bellfruit) (Scorpion 4) (set 12)", - "sc4easy", "Easy Streak (Bellfruit) (Scorpion 4) (set 1)", - "sc4easya", "Easy Streak (Bellfruit) (Scorpion 4) (set 2)", - "sc4easyb", "Easy Streak (Bellfruit) (Scorpion 4) (set 3)", - "sc4easyc", "Easy Streak (Bellfruit) (Scorpion 4) (set 4)", - "sc4easyd", "Easy Streak (Bellfruit) (Scorpion 4) (set 5)", - "sc4easye", "Easy Streak (Bellfruit) (Scorpion 4) (set 6)", - "sc4easyf", "Easy Streak (Bellfruit) (Scorpion 4) (set 11)", - "sc4emmer", "Emmerdale (Mazooma) (Scorpion 4) (set 1)", - "sc4emmera", "Emmerdale (Mazooma) (Scorpion 4) (set 2)", - "sc4emmerb", "Emmerdale (Mazooma) (Scorpion 4) (set 3)", - "sc4emmerc", "Emmerdale (Mazooma) (Scorpion 4) (set 4)", - "sc4evol", "Evolution (Qps) (Scorpion 4) (set 1)", - "sc4evola", "Evolution (Qps) (Scorpion 4) (set 2)", - "sc4evolb", "Evolution (Qps) (Scorpion 4) (set 3)", - "sc4evolc", "Evolution (Qps) (Scorpion 4) (set 4)", - "sc4evold", "Evolution (Qps) (Scorpion 4) (set 5)", - "sc4evole", "Evolution (Qps) (Scorpion 4) (set 6)", - "sc4evolf", "Evolution (Qps) (Scorpion 4) (set 7)", - "sc4evolg", "Evolution (Qps) (Scorpion 4) (set 8)", - "sc4fastf", "Fast 'n' Furious (Mazooma) (Scorpion 4) (set 1)", - "sc4fastfa", "Fast 'n' Furious (Mazooma) (Scorpion 4) (set 2)", - "sc4fastfb", "Fast 'n' Furious (Mazooma) (Scorpion 4) (set 3)", - "sc4fastfc", "Fast 'n' Furious (Mazooma) (Scorpion 4) (set 4)", - "sc4fbcrz", "Football Crazy (Bellfruit) (Scorpion 4) (set 1)", - "sc4fbcrza", "Football Crazy (Bellfruit) (Scorpion 4) (set 2)", - "sc4fbcrzb", "Football Crazy (Bellfruit) (Scorpion 4) (set 3)", - "sc4fbcrzc", "Football Crazy (Bellfruit) (Scorpion 4) (set 4)", - "sc4fbcrzd", "Football Crazy (Bellfruit) (Scorpion 4) (set 5)", - "sc4fbcrze", "Football Crazy (Bellfruit) (Scorpion 4) (set 6)", - "sc4fbcrzf", "Football Crazy (Bellfruit) (Scorpion 4) (set 7)", - "sc4fbcrzg", "Football Crazy (Bellfruit) (Scorpion 4) (set 8)", - "sc4fbcrzh", "Football Crazy (Bellfruit) (Scorpion 4) (set 9)", - "sc4fbcrzi", "Football Crazy (Bellfruit) (Scorpion 4) (set 10)", - "sc4fbspn", "Fat Boy Spin (Bellfruit) (Scorpion 4) (set 1)", - "sc4fbspna", "Fat Boy Spin (Bellfruit) (Scorpion 4) (set 2)", - "sc4fbspnb", "Fat Boy Spin (Bellfruit) (Scorpion 4) (set 3)", - "sc4fbspnc", "Fat Boy Spin (Bellfruit) (Scorpion 4) (set 4)", - "sc4fcc", "Firecracker Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4fcca", "Firecracker Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4fccb", "Firecracker Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4fccc", "Firecracker Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4fd7th", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 1)", - "sc4fd7tha", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 2)", - "sc4fd7thb", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 3)", - "sc4fd7thc", "Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 1)", - "sc4fd7thd", "Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 2)", - "sc4fd7the", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 4)", - "sc4fd7thf", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 5)", - "sc4fd7thg", "Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 6)", - "sc4fd7thh", "Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 3)", - "sc4fd7thi", "Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 4)", - "sc4fevdt", "Fever (PR1202) (Dutch) (Bellfruit) (Scorpion 4) (set 1)", - "sc4fevdta", "Fever (PR1202) (Dutch) (Bellfruit) (Scorpion 4) (set 2)", - "sc4fevdtb", "Fever (PR1202) (Dutch) (Bellfruit) (Scorpion 4) (set 3)", - "sc4fever", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 1)", - "sc4fevera", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 2)", - "sc4feverb", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 3)", - "sc4feverc", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 4)", - "sc4feverd", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 5)", - "sc4fevere", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 6)", - "sc4feverf", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 7)", - "sc4feverg", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 8)", - "sc4feverh", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 9)", - "sc4feverk", "Fever (PR1007) (Bellfruit) (Scorpion 4) (set 10)", - "sc4fevnx", "Fever The Next (Dutch) (Bellfruit) (Scorpion 4) (set 1)", - "sc4fevnxa", "Fever The Next (Dutch) (Bellfruit) (Scorpion 4) (set 2)", - "sc4ffru", "Fast Fruit (Qps / Mazooma) (Scorpion 4) (set 1)", - "sc4ffrua", "Fast Fruit (Qps) (Scorpion 4) (set 1)", - "sc4ffrub", "Fast Fruit (Qps / Mazooma) (Scorpion 4) (set 2)", - "sc4ffruc", "Fast Fruit (Qps) (Scorpion 4) (set 2)", - "sc4ffrud", "Fast Fruit (Qps) (Scorpion 4) (set 3)", - "sc4ffrue", "Fast Fruit (Qps) (Scorpion 4) (set 4)", - "sc4fguy", "Family Guy (Bellfruit) (Scorpion 4) (set 1)", - "sc4fguya", "Family Guy (Bellfruit) (Scorpion 4) (set 2)", - "sc4fguyb", "Family Guy (Bellfruit) (Scorpion 4) (set 3)", - "sc4fguyc", "Family Guy (Bellfruit) (Scorpion 4) (set 4)", - "sc4fguyd", "Family Guy (Bellfruit) (Scorpion 4) (set 5)", - "sc4fguye", "Family Guy (Bellfruit) (Scorpion 4) (set 6)", - "sc4fire", "Firepower (Mazooma) (Scorpion 4) (set 1)", - "sc4firea", "Firepower (Mazooma) (Scorpion 4) (set 2)", - "sc4fmj", "Full Metal Jackpot (Mazooma) (Scorpion 4) (set 1)", - "sc4fmja", "Full Metal Jackpot (Mazooma) (Scorpion 4) (set 2)", - "sc4fmjb", "Full Metal Jackpot (Mazooma) (Scorpion 4) (set 3)", - "sc4fmjc", "Full Metal Jackpot (Mazooma) (Scorpion 4) (set 4)", - "sc4fpitc", "Fever Pitch (Bellfruit) (Scorpion 4) (set 1)", - "sc4fpitca", "Fever Pitch (Bellfruit) (Scorpion 4) (set 2)", - "sc4fpitcb", "Fever Pitch (Bellfruit) (Scorpion 4) (set 3)", - "sc4fpitcc", "Fever Pitch (Bellfruit) (Scorpion 4) (set 11)", - "sc4fpitcd", "Fever Pitch (Bellfruit) (Scorpion 4) (set 4)", - "sc4fpitce", "Fever Pitch (Bellfruit) (Scorpion 4) (set 5)", - "sc4fpitcf", "Fever Pitch (Bellfruit) (Scorpion 4) (set 6)", - "sc4fpitcg", "Fever Pitch (Bellfruit) (Scorpion 4) (set 12)", - "sc4fpitch", "Fever Pitch (Bellfruit) (Scorpion 4) (set 7)", - "sc4fpitci", "Fever Pitch (Bellfruit) (Scorpion 4) (set 8)", - "sc4fpitcj", "Fever Pitch (Bellfruit) (Scorpion 4) (set 9)", - "sc4fpitck", "Fever Pitch (Bellfruit) (Scorpion 4) (set 10)", - "sc4frboo", "Frooty Booty (Bellfruit) (Scorpion 4) (set 1)", - "sc4frbooa", "Frooty Booty (Bellfruit) (Scorpion 4) (set 2)", - "sc4frboob", "Frooty Booty (Bellfruit) (Scorpion 4) (set 3)", - "sc4frbooc", "Frooty Booty (Bellfruit) (Scorpion 4) (set 4)", - "sc4frenz", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 1)", - "sc4frenza", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 2)", - "sc4frenzb", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 3)", - "sc4frenzc", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 4)", - "sc4frenzd", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 5)", - "sc4frenze", "Fruit Frenzy (Bellfruit) (Scorpion 4) (set 6)", - "sc4frsu", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 1)", - "sc4frsua", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 2)", - "sc4frsub", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 3)", - "sc4frsuc", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 4)", - "sc4frsud", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 5)", - "sc4frsue", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 6)", - "sc4frsuf", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 7)", - "sc4frsug", "Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 8)", - "sc4ftopi", "Fruitopia (Qps) (Scorpion 4) (set 1)", - "sc4ftopia", "Fruitopia (Qps) (Scorpion 4) (set 2)", - "sc4ftopib", "Fruitopia (Qps) (Scorpion 4) (set 3)", - "sc4ftopic", "Fruitopia (Qps) (Scorpion 4) (set 4)", - "sc4ftopid", "Fruitopia (V2.1) (Qps) (Scorpion 4) (set 1)", - "sc4ftopie", "Fruitopia (V2.2) (Qps) (Scorpion 4) (set 1)", - "sc4ftopif", "Fruitopia (V1.1) (Qps) (Scorpion 4) (set 1)", - "sc4ftopig", "Fruitopia (V2.1) (Qps) (Scorpion 4) (set 2)", - "sc4ftopih", "Fruitopia (V2.2) (Qps) (Scorpion 4) (set 2)", - "sc4ftopii", "Fruitopia (V1.1) (Qps) (Scorpion 4) (set 2)", - "sc4fullt", "Full Throttle (011) (Qps) (Scorpion 4) (set 1)", - "sc4fullta", "Full Throttle (041) (Qps) (Scorpion 4) (set 1)", - "sc4fulltb", "Full Throttle (011) (Qps) (Scorpion 4) (set 2)", - "sc4fulltc", "Full Throttle (041) (Qps) (Scorpion 4) (set 2)", - "sc4fulltd", "Full Throttle (012) (Qps) (Scorpion 4) (set 1)", - "sc4fullte", "Full Throttle (042) (Qps) (Scorpion 4) (set 1)", - "sc4fulltf", "Full Throttle (013) (Qps) (Scorpion 4) (set 1)", - "sc4fulltg", "Full Throttle (012) (Qps) (Scorpion 4) (set 2)", - "sc4fullth", "Full Throttle (042) (Qps) (Scorpion 4) (set 2)", - "sc4fullti", "Full Throttle (013) (Qps) (Scorpion 4) (set 2)", - "sc4fwp", "Five Ways Pays (Mazooma) (Scorpion 4) (set 1)", - "sc4fwpa", "Five Ways Pays (Mazooma) (Scorpion 4) (set 2)", - "sc4fwpb", "Five Ways Pays (Mazooma) (Scorpion 4) (set 3)", - "sc4fwpc", "Five Ways Pays (Mazooma) (Scorpion 4) (set 4)", - "sc4fwpcs", "Five Ways Pays (Mazooma) (Scorpion 4) (set 5)", - "sc4fwpcsa", "Five Ways Pays (Mazooma) (Scorpion 4) (set 6)", - "sc4fwpcsb", "Five Ways Pays (Mazooma) (Scorpion 4) (set 7)", - "sc4gag", "Grab A Granny (PR7019, GRAB) (Mazooma) (Scorpion 4) (set 1)", - "sc4gaga", "Grab A Granny (PR7019, GRAN) (Mazooma) (Scorpion 4) (set 1)", - "sc4gagb", "Grab A Granny (PR7019, GRAB) (Mazooma) (Scorpion 4) (set 2)", - "sc4gagc", "Grab A Granny (PR7019, GRAN) (Mazooma) (Scorpion 4) (set 2)", - "sc4gamcs", "The Game Casino (Dutch) (Bellfruit) (Scorpion 4)", - "sc4game", "The Game (Dutch) (Bellfruit) (Scorpion 4)", - "sc4gball", "Golden Balls (Bellfruit) (Scorpion 4) (set 1)", - "sc4gballa", "Golden Balls (Bellfruit) (Scorpion 4) (set 2)", - "sc4gballb", "Golden Balls (Bellfruit) (Scorpion 4) (set 3)", - "sc4gballc", "Golden Balls (Bellfruit) (Scorpion 4) (set 4)", - "sc4gbcas", "Casino Golden Balls (Bellfruit) (Scorpion 4) (set 1)", - "sc4gbcasa", "Casino Golden Balls (Bellfruit) (Scorpion 4) (set 2)", - "sc4gbcasb", "Casino Golden Balls (Bellfruit) (Scorpion 4) (set 3)", - "sc4gbcasc", "Casino Golden Balls (Bellfruit) (Scorpion 4) (set 4)", - "sc4gcb", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 1)", - "sc4gcba", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 2)", - "sc4gcbb", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 3)", - "sc4gcbc", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 4)", - "sc4gcbd", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 5)", - "sc4gcbe", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 6)", - "sc4gcbf", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 7)", - "sc4gcbg", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 8)", - "sc4gcbh", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 9)", - "sc4gcbi", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 10)", - "sc4gcbj", "Grand Blaster Cash (Mazooma) (Scorpion 4) (set 11)", - "sc4gcclb", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 1)", - "sc4gcclba", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 2)", - "sc4gcclbb", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 3)", - "sc4gcclbc", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 4)", - "sc4gcclbd", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 5)", - "sc4gcclbe", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 6)", - "sc4gcclbf", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 7)", - "sc4gcclbg", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 8)", - "sc4gcclbh", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 9)", - "sc4gcclbi", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 10)", - "sc4gcclbj", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 11)", - "sc4gcclbk", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 12)", - "sc4gcclbl", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 13)", - "sc4gcclbm", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 14)", - "sc4gcclbn", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 15)", - "sc4gcclbo", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 17)", - "sc4gcclbp", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 16)", - "sc4gcclbq", "Grandslam Casino (Bellfruit) (Scorpion 4) (set 18)", - "sc4gd", "Gold Digger (Bellfruit) (Scorpion 4) (set 1)", - "sc4gda", "Gold Digger (Bellfruit) (Scorpion 4) (set 2)", - "sc4gdb", "Gold Digger (Bellfruit) (Scorpion 4) (set 3)", - "sc4gdc", "Gold Digger (Bellfruit) (Scorpion 4) (set 4)", - "sc4gdclb", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4gdclba", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4gdclbb", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4gdclbc", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4gdclbd", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4gdclbe", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4gdclbf", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 7)", - "sc4gdclbg", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 8)", - "sc4gdclbh", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 9)", - "sc4gdclbi", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 10)", - "sc4gdclbj", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 11)", - "sc4gdclbk", "Gold Digger Club (Bellfruit) (Scorpion 4) (set 12)", - "sc4gdd", "Gold Digger (Bellfruit) (Scorpion 4) (set 5)", - "sc4gde", "Gold Digger (Bellfruit) (Scorpion 4) (set 6)", - "sc4gdf", "Gold Digger (Bellfruit) (Scorpion 4) (set 7)", - "sc4gdg", "Gold Digger (Bellfruit) (Scorpion 4) (set 8)", - "sc4gdmz", "Golden X (Mazooma) (PR2056) (Scorpion 4) (set 3)", - "sc4gdmza", "Golden X (Mazooma) (PR2056) (Scorpion 4) (set 4)", - "sc4gfev", "Gold Fever (Mazooma) (Scorpion 4) (set 1)", - "sc4gfeva", "Gold Fever (Mazooma) (Scorpion 4) (set 2)", - "sc4gfevb", "Gold Fever (Mazooma) (Scorpion 4) (set 3)", - "sc4ggame", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 1)", - "sc4ggame0", "Golden X (Mazooma) (PR2056) (Scorpion 4) (set 2)", - "sc4ggame1", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 7)", - "sc4ggame2", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 8)", - "sc4ggame3", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 6)", - "sc4ggame4", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 7)", - "sc4ggame5", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 8)", - "sc4ggame6", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 9)", - "sc4ggame7", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 1)", - "sc4ggame8", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 2)", - "sc4ggame9", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 3)", - "sc4ggamea", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 1)", - "sc4ggameaa", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 4)", - "sc4ggameab", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 5)", - "sc4ggameac", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 6)", - "sc4ggamead", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 7)", - "sc4ggameae", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 8)", - "sc4ggameb", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 2)", - "sc4ggamec", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 3)", - "sc4ggamed", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 4)", - "sc4ggamef", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 1)", - "sc4ggameg", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 2)", - "sc4ggamei", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 2)", - "sc4ggamej", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 3)", - "sc4ggamek", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 4)", - "sc4ggamel", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 1)", - "sc4ggamem", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 2)", - "sc4ggamen", "Golden X (Mazooma) (PR2056) (Scorpion 4) (set 1)", - "sc4ggamep", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 3)", - "sc4ggameq", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 4)", - "sc4ggamer", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 5)", - "sc4ggames", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 5)", - "sc4ggamet", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 6)", - "sc4ggameu", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 7)", - "sc4ggamev", "Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 5)", - "sc4ggamew", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 3)", - "sc4ggamex", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 4)", - "sc4ggamey", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 5)", - "sc4ggamez", "Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 6)", - "sc4ggcas", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 9)", - "sc4ggcasa", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 10)", - "sc4ggcasb", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 11)", - "sc4ggcasc", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 12)", - "sc4ggcl", "Golden Grid Club (V1.0) (Qps) (Scorpion 4)", - "sc4ggcla", "Golden Grid Club (V411) (Qps) (Scorpion 4) (set 1)", - "sc4ggclb", "Golden Grid Club (V411) (Qps) (Scorpion 4) (set 2)", - "sc4ggclc", "Golden Grid Club (V412) (Qps) (Scorpion 4) (set 1)", - "sc4ggcld", "Golden Grid Club (V412) (Qps) (Scorpion 4) (set 2)", - "sc4ggdlx", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 1)", - "sc4ggdlxa", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 3)", - "sc4ggdlxb", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 4)", - "sc4ggdlxc", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 2)", - "sc4ggdlxd", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 5)", - "sc4ggdlxe", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 6)", - "sc4ggdlxf", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 7)", - "sc4ggdlxg", "Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 8)", - "sc4ggg", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 1)", - "sc4gggb", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 2)", - "sc4gggc", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 3)", - "sc4gggd", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 4)", - "sc4ggge", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 5)", - "sc4gggf", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 6)", - "sc4gggg", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 13)", - "sc4gggh", "Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 1)", - "sc4gggi", "Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 2)", - "sc4gggk", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 7)", - "sc4gggl", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 8)", - "sc4gggm", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 9)", - "sc4gggn", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 10)", - "sc4gggo", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 11)", - "sc4gggp", "Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 12)", - "sc4gggq", "Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 3)", - "sc4gggr", "Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 4)", - "sc4gggs", "Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 5)", - "sc4gggtb", "Grand Golden Game (Mazooma) (PR2056, GGGT) (Scorpion 4) (Top Box, set 1)", - "sc4gggtba", "Grand Golden Game (Mazooma) (PR2056, GGGT) (Scorpion 4) (Top Box, set 2)", - "sc4ggrid", "Golden Grid (V1.0) (Qps) (Scorpion 4) (set 1)", - "sc4ggrida", "Golden Grid (V1.0) (Qps) (Scorpion 4) (set 2)", - "sc4ggridb", "Golden Grid (V1.1) (Qps) (Scorpion 4) (set 1)", - "sc4ggridc", "Golden Grid (V1.1) (Qps) (Scorpion 4) (set 2)", - "sc4ggridd", "Golden Grid (V1.3) (Qps) (Scorpion 4)", - "sc4ggride", "Golden Grid (V1.0) (Qps) (Scorpion 4) (set 3)", - "sc4ggridf", "Golden Grid (V1.0) (Qps) (Scorpion 4) (set 4)", - "sc4ggridg", "Golden Grid (V1.1) (Qps) (Scorpion 4) (set 3)", - "sc4ggridh", "Golden Grid (V1.1) (Qps) (Scorpion 4) (set 4)", - "sc4ggridi", "Golden Grid (V011) (Scorpion 4) (set 1)", - "sc4ggridj", "Golden Grid (V041) (Qps) (Scorpion 4) (set 1)", - "sc4ggridk", "Golden Grid (V011) (Scorpion 4) (set 2)", - "sc4ggridl", "Golden Grid (V041) (Qps) (Scorpion 4) (set 2)", - "sc4ggridm", "Golden Grid (V012) (Qps) (Scorpion 4) (set 1)", - "sc4ggridn", "Golden Grid (V012) (Qps) (Scorpion 4) (set 2)", - "sc4ggtb", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 1)", - "sc4ggtba", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 2)", - "sc4ggtbb", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 3)", - "sc4ghost", "Golden Ghost (Mazooma) (Scorpion 4) (set 1)", - "sc4ghosta", "Golden Ghost (Mazooma) (Scorpion 4) (Top Box, set 1)", - "sc4ghostb", "Golden Ghost (Mazooma) (Scorpion 4) (set 2)", - "sc4ghostc", "Golden Ghost (Mazooma) (Scorpion 4) (set 3)", - "sc4ghostd", "Golden Ghost (Mazooma) (Scorpion 4) (Top Box, set 2)", - "sc4ghoste", "Golden Ghost (Mazooma) (Scorpion 4) (set 4)", - "sc4ghostf", "Golden Ghost (Mazooma) (Scorpion 4) (set 5)", - "sc4ghostg", "Golden Ghost (Mazooma) (Scorpion 4) (set 6)", - "sc4ghosth", "Golden Ghost (Mazooma) (Scorpion 4) (Top Box, set 3)", - "sc4glad", "Gladiator (Mazooma) (Scorpion 4) (set 1)", - "sc4glada", "Gladiator (Mazooma) (Scorpion 4) (set 2)", - "sc4gladb", "Gladiator (Mazooma) (Scorpion 4) (set 3)", - "sc4gladc", "Gladiator (Mazooma) (Scorpion 4) (set 4)", - "sc4gladd", "Gladiator (Mazooma) (Scorpion 4) (set 5)", - "sc4glade", "Gladiator (Mazooma) (Scorpion 4) (set 6)", - "sc4gladf", "Gladiator (Mazooma) (Scorpion 4) (set 7)", - "sc4gladg", "Gladiator (Mazooma) (Scorpion 4) (set 8)", - "sc4gldcl", "Gladiator Club (Mazooma) (Scorpion 4) (set 1)", - "sc4gldcla", "Gladiator Club (Mazooma) (Scorpion 4) (set 2)", - "sc4gnc", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 1)", - "sc4gnca", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 2)", - "sc4gncb", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 3)", - "sc4gncc", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 4)", - "sc4gncd", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 5)", - "sc4gnce", "Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 6)", - "sc4gocas", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 5)", - "sc4gocasa", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 6)", - "sc4goldo", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 1)", - "sc4goldoa", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 2)", - "sc4goldob", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 3)", - "sc4goldoc", "Casino Golden Oldie (Mazooma) (Scorpion 4) (set 4)", - "sc4goldw", "Golden Winner (Bellfruit) (Scorpion 4) (set 1)", - "sc4goldwa", "Golden Winner (Bellfruit) (Scorpion 4) (set 2)", - "sc4goldwb", "Golden Winner (Bellfruit) (Scorpion 4) (set 3)", - "sc4goldwc", "Golden Winner (Bellfruit) (Scorpion 4) (set 4)", - "sc4goldwd", "Golden Winner (Bellfruit) (Scorpion 4) (set 5)", - "sc4goldwe", "Golden Winner (Bellfruit) (Scorpion 4) (set 6)", - "sc4goldwf", "Golden Winner (Bellfruit) (Scorpion 4) (set 7)", - "sc4goldwg", "Golden Winner (Bellfruit) (Scorpion 4) (set 8)", - "sc4goud", "Goudkoorts (Dutch) (Bellfruit) (Scorpion 4)", - "sc4greed", "Greedy Gonzalez (Bellfruit) (Scorpion 4) (set 1)", - "sc4greeda", "Greedy Gonzalez (Bellfruit) (Scorpion 4) (set 2)", - "sc4gshot", "Golden Shot (Qps) (Scorpion 4) (set 1)", - "sc4gshota", "Golden Shot Arcade (Qps) (Scorpion 4) (set 1)", - "sc4gshotb", "Golden Shot (Qps) (Scorpion 4) (set 2)", - "sc4gshotc", "Golden Shot Arcade (Qps) (Scorpion 4) (set 2)", - "sc4gslam", "Grandslam Club (BFM) (Scorpion 4) (set 1)", - "sc4gslama", "Grandslam Club (BFM) (Scorpion 4) (set 2)", - "sc4gslamb", "Grandslam Club (BFM) (Scorpion 4) (set 3)", - "sc4gslamc", "Grandslam Club (BFM) (Scorpion 4) (set 4)", - "sc4gslamd", "Grandslam Club (BFM) (Scorpion 4) (set 5)", - "sc4gslame", "Grandslam Club (BFM) (Scorpion 4) (set 6)", - "sc4gslamf", "Grandslam Club (BFM) (Scorpion 4) (set 7)", - "sc4gunp", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 1)", - "sc4gunpa", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 2)", - "sc4gunpb", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 3)", - "sc4gunpc", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 4)", - "sc4gunpd", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 5)", - "sc4gunpe", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 6)", - "sc4gunpf", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 7)", - "sc4gunpg", "Gunpowder Slot (Bellfruit) (Scorpion 4) (set 8)", - "sc4gx", "Bar X (Mazooma) (Scorpion 4) (BARX, set 1)", - "sc4gx3", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 1)", - "sc4gx3a", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 2)", - "sc4gx3b", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 3)", - "sc4gx3c", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 4)", - "sc4gx3d", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 5)", - "sc4gx3e", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 6)", - "sc4gx3f", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 7)", - "sc4gx3g", "Golden X (Mazooma) (Scorpion 4) (GLDX, set 8)", - "sc4gxa", "Bar X (Mazooma) (Scorpion 4) (BARX, set 8)", - "sc4gxb", "Bar X (Mazooma) (Scorpion 4) (BARX, set 9)", - "sc4gxcasa", "Bar X (Mazooma) (Scorpion 4) (BARX, set 2)", - "sc4gxcasb", "Bar X (Mazooma) (Scorpion 4) (BARX, set 3)", - "sc4gxcasc", "Bar X (Mazooma) (Scorpion 4) (BARX, set 4)", - "sc4gxcasd", "Bar X (Mazooma) (Scorpion 4) (BARX, set 5)", - "sc4gxcase", "Bar X (Mazooma) (Scorpion 4) (BARX, set 6)", - "sc4gxcasf", "Bar X (Mazooma) (Scorpion 4) (BARX, set 7)", - "sc4h6cl", "Hot Six Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4h6cla", "Hot Six Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4h6clb", "Hot Six Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4h6clc", "Hot Six Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4hapnt", "Happy Notes (Bellfruit) (Scorpion 4) (set 1)", - "sc4hapnta", "Happy Notes (Bellfruit) (Scorpion 4) (set 2)", - "sc4hapntb", "Happy Notes (Bellfruit) (Scorpion 4) (set 3)", - "sc4hapntc", "Happy Notes (Bellfruit) (Scorpion 4) (set 4)", - "sc4hapntd", "Happy Notes (Bellfruit) (Scorpion 4) (set 5)", - "sc4hapnte", "Happy Notes (Bellfruit) (Scorpion 4) (set 6)", - "sc4hdd", "Hickory Dickory Dosh (PR7016) (Mazooma) (Scorpion 4) (set 1)", - "sc4hdda", "Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 1)", - "sc4hddb", "Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 2)", - "sc4hddc", "Hickory Dickory Dosh (PR7016) (Mazooma) (Scorpion 4) (set 2)", - "sc4hddd", "Hickory Dickory Dosh (PR7016) (Mazooma) (Scorpion 4) (set 3)", - "sc4hdde", "Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 3)", - "sc4hddf", "Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 4)", - "sc4heatw", "Heatwave (Dutch) (Bellfruit) (Scorpion 4)", - "sc4hellb", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 1)", - "sc4hellbb", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 2)", - "sc4hellbc", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 3)", - "sc4hellbd", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 4)", - "sc4hellbe", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 5)", - "sc4hellbf", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 6)", - "sc4hellbg", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 7)", - "sc4hellbh", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 8)", - "sc4hellbi", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 9)", - "sc4hellbj", "Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 10)", - "sc4helld", "Hells Bells (PR1201) (Dutch) (Bellfruit) (Scorpion 4)", - "sc4helrd", "Hellraiser (Dutch) (Bellfruit) (Scorpion 4) (set 1)", - "sc4helrs", "Hellraiser (Dutch) (Bellfruit) (Scorpion 4) (set 2)", - "sc4hf", "Happy Fruits (Bellfruit) (Scorpion 4) (set 1)", - "sc4hfa", "Happy Fruits (Bellfruit) (Scorpion 4) (set 2)", - "sc4hfb", "Happy Fruits (Bellfruit) (Scorpion 4) (set 3)", - "sc4hfc", "Happy Fruits (Bellfruit) (Scorpion 4) (set 4)", - "sc4hfcl", "Happy Fruits Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4hfcla", "Happy Fruits Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4hfd", "Happy Fruits (Bellfruit) (Scorpion 4) (set 5)", - "sc4hfe", "Happy Fruits (Bellfruit) (Scorpion 4) (set 6)", - "sc4hff", "Happy Fruits (Bellfruit) (Scorpion 4) (set 7)", - "sc4hfg", "Happy Fruits (Bellfruit) (Scorpion 4) (set 8)", - "sc4hi5", "High 5 (Bellfruit) (Scorpion 4) (set 1)", - "sc4hi5a", "High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 1)", - "sc4hi5b", "High 5 (Bellfruit) (Scorpion 4) (set 2)", - "sc4hi5c", "High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 2)", - "sc4hi5d", "High 5 (Bellfruit) (Scorpion 4) (set 3)", - "sc4hi5e", "High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 3)", - "sc4hi5f", "High 5 (Bellfruit) (Scorpion 4) (set 4)", - "sc4hi5g", "High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 4)", - "sc4hill", "Hill Billionaire (Bellfruit) (Scorpion 4) (set 1)", - "sc4hilla", "Hill Billionaire (Bellfruit) (Scorpion 4) (set 2)", - "sc4hilo", "Hilowatha (Bellfruit) (Scorpion 4) (set 1)", - "sc4hiloa", "Hilowatha (Bellfruit) (Scorpion 4) (set 2)", - "sc4hilob", "Hilowatha (Bellfruit) (Scorpion 4) (set 3)", - "sc4hiloc", "Hilowatha (Bellfruit) (Scorpion 4) (set 4)", - "sc4hilod", "Hilowatha (Bellfruit) (Scorpion 4) (set 5)", - "sc4hiloe", "Hilowatha (Bellfruit) (Scorpion 4) (set 6)", - "sc4hilof", "Hilowatha (Bellfruit) (Scorpion 4) (set 7)", - "sc4hilog", "Hilowatha (Bellfruit) (Scorpion 4) (set 8)", - "sc4hiloh", "Hilowatha (Bellfruit) (Scorpion 4) (set 9)", - "sc4hiloi", "Hilowatha (Bellfruit) (Scorpion 4) (set 10)", - "sc4hiloj", "Hilowatha (Bellfruit) (Scorpion 4) (set 11)", - "sc4hilok", "Hilowatha (Bellfruit) (Scorpion 4) (set 12)", - "sc4himi", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 1)", - "sc4himia", "High 'n' Mighty (PR2119) (Mazooma) (Scorpion 4) (set 1)", - "sc4himib", "High 'n' Mighty (PR2067) (Mazooma) (Scorpion 4) (set 1)", - "sc4himic", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 2)", - "sc4himid", "High 'n' Mighty (PR2067) (Mazooma) (Scorpion 4) (set 2)", - "sc4himie", "High 'n' Mighty (PR2119) (Mazooma) (Scorpion 4) (set 2)", - "sc4himif", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 3)", - "sc4himig", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 4)", - "sc4himih", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 5)", - "sc4himii", "High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 6)", - "sc4hiss", "Hissing Quid (Qps) (Scorpion 4) (set 1)", - "sc4hissa", "Hissing Quid (Qps) (Scorpion 4) (set 2)", - "sc4hissb", "Hissing Quid (Qps) (Scorpion 4) (set 3)", - "sc4hissc", "Hissing Quid (Qps) (Scorpion 4) (set 4)", - "sc4hissd", "Hissing Quid (Qps) (Scorpion 4) (set 5)", - "sc4hisse", "Hissing Quid (Qps) (Scorpion 4) (set 6)", - "sc4hissf", "Hissing Quid (Qps) (Scorpion 4) (set 7)", - "sc4hissg", "Hissing Quid (Qps) (Scorpion 4) (set 8)", - "sc4hitsh", "Hit Shot (Bellfruit) (Scorpion 4) (set 1)", - "sc4hitsha", "Hit Shot (Bellfruit) (Scorpion 4) (set 2)", - "sc4hitshb", "Hit Shot (Bellfruit) (Scorpion 4) (set 3)", - "sc4hitshc", "Hit Shot (Bellfruit) (Scorpion 4) (set 4)", - "sc4hitshd", "Hit Shot (Bellfruit) (Scorpion 4) (set 5)", - "sc4hitshe", "Hit Shot (Bellfruit) (Scorpion 4) (set 6)", - "sc4hntcs", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 1)", - "sc4hntcsa", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 2)", - "sc4hntcsb", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 3)", - "sc4hntcsc", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 4)", - "sc4hntcsd", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 5)", - "sc4hntcse", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 6)", - "sc4hntcsf", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 7)", - "sc4hntcsg", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 8)", - "sc4hntcsh", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 9)", - "sc4hntcsi", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 10)", - "sc4hntcsj", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 11)", - "sc4hntcsk", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 12)", - "sc4hntcsl", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 13)", - "sc4hntcsm", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 14)", - "sc4hntcsn", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 15)", - "sc4hntcso", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 16)", - "sc4hntcsp", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 17)", - "sc4hntcsq", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 18)", - "sc4hntcsr", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 19)", - "sc4hntcss", "Happy Notes Casino (Bellfruit) (Scorpion 4) (set 20)", - "sc4holyw", "Hollywood (Bellfruit) (Scorpion 4) (set 1)", - "sc4holywa", "Hollywood (Bellfruit / Whitbread) (Scorpion 4) (set 1)", - "sc4holywb", "Hollywood (Bellfruit) (Scorpion 4) (set 2)", - "sc4holywc", "Hollywood (Bellfruit / Whitbread) (Scorpion 4) (set 2)", - "sc4hotdg", "Hot Dog (Bellfruit) (Scorpion 4) (set 1)", - "sc4hotdga", "Hot Dog (Bellfruit) (Scorpion 4) (set 2)", - "sc4hotdgb", "Hot Dog (Bellfruit) (Scorpion 4) (set 3)", - "sc4hotdgc", "Hot Dog (Bellfruit) (Scorpion 4) (set 4)", - "sc4hotpr", "Hot Property (Bellfruit) (Scorpion 4) (set 1)", - "sc4hotpra", "Hot Property (Bellfruit) (Scorpion 4) (Whitbread, set 1)", - "sc4hotprb", "Hot Property (Bellfruit) (Scorpion 4) (set 2)", - "sc4hotprc", "Hot Property (Bellfruit) (Scorpion 4) (Whitbread, set 2)", - "sc4hotprd", "Hot Property (Bellfruit) (Scorpion 4) (set 3)", - "sc4hotpre", "Hot Property (Bellfruit) (Scorpion 4) (set 4)", - "sc4hotrd", "Hot Rod (Bellfruit) (Scorpion 4) (set 1)", - "sc4hotrda", "Hot Rod (Bellfruit) (Scorpion 4) (set 2)", - "sc4hotsh", "Hot Shot (Bellfruit) (Scorpion 4) (set 1)", - "sc4hotsha", "Hot Shot (Bellfruit) (Scorpion 4) (set 2)", - "sc4hotwd", "Hot Wad (Bellfruit) (Scorpion 4) (set 1)", - "sc4hotwda", "Hot Wad (Bellfruit) (Scorpion 4) (set 2)", - "sc4hotwdb", "Hot Wad (Bellfruit) (Scorpion 4) (set 3)", - "sc4hotwdc", "Hot Wad (Bellfruit) (Scorpion 4) (set 4)", - "sc4hotwdd", "Hot Wad (Bellfruit) (Scorpion 4) (set 5)", - "sc4hotwde", "Hot Wad (Bellfruit) (Scorpion 4) (set 6)", - "sc4hyde", "Hyde & Streak (Mazooma) (Scorpion 4) (set 1)", - "sc4hydea", "Hyde & Streak (Mazooma) (Scorpion 4) (set 2)", - "sc4hydeb", "Hyde & Streak (Mazooma) (Scorpion 4) (set 3)", - "sc4hydec", "Hyde & Streak (Mazooma) (Scorpion 4) (set 4)", - "sc4hyper", "Hyperactive (Mazooma) (Scorpion 4) (set 1)", - "sc4hypera", "Hyperactive (Mazooma) (Scorpion 4) (set 2)", - "sc4ibiza", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 1)", - "sc4ibizaa", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 2)", - "sc4ibizab", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 3)", - "sc4ibizac", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 4)", - "sc4ibizad", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 5)", - "sc4ibizae", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 6)", - "sc4ibizaf", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 7)", - "sc4ibizag", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 8)", - "sc4ibizah", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 9)", - "sc4ibizai", "Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 10)", - "sc4ijclb", "Italian Job Club (Mazooma) (Scorpion 4)", - "sc4ijob", "Italian Job (Mazooma) (Scorpion 4) (set 1)", - "sc4ijoba", "Italian Job (Mazooma) (Scorpion 4) (set 2)", - "sc4ijobb", "Italian Job (Mazooma) (Scorpion 4) (set 3)", - "sc4ijobc", "Italian Job (Mazooma) (Scorpion 4) (set 4)", - "sc4ijobd", "Italian Job (Mazooma) (Scorpion 4) (set 5)", - "sc4ijobe", "Italian Job (Mazooma) (Scorpion 4) (set 6)", - "sc4ijobf", "Italian Job (Mazooma) (Scorpion 4) (set 7)", - "sc4ijobg", "Italian Job (Mazooma) (Scorpion 4) (set 8)", - "sc4ijobh", "Italian Job (Mazooma) (Scorpion 4) (set 9)", - "sc4ijobi", "Italian Job (Mazooma) (Scorpion 4) (set 10)", - "sc4ijobj", "Italian Job (Mazooma) (Scorpion 4) (set 11)", - "sc4ijobk", "Italian Job (Mazooma) (Scorpion 4) (set 12)", - "sc4ijobl", "Italian Job (Mazooma) (Scorpion 4) (set 13)", - "sc4ijobm", "Italian Job (Mazooma) (Scorpion 4) (set 14)", - "sc4inspn", "Inner Spin (Mazooma) (Scorpion 4) (set 1)", - "sc4inspna", "Inner Spin (Mazooma) (Scorpion 4) (set 2)", - "sc4ivply", "4 Play (Dutch) (Bellfruit) (Scorpion 4)", - "sc4jack", "Jack The Kipper (Mazooma) (Scorpion 4) (set 1)", - "sc4jacka", "Jack The Kipper (Mazooma) (Scorpion 4) (set 2)", - "sc4jackb", "Jack The Kipper (Mazooma) (Scorpion 4) (set 3)", - "sc4jackc", "Jack The Kipper (Mazooma) (Scorpion 4) (set 4)", - "sc4jackd", "Jack The Kipper (Mazooma) (Scorpion 4) (set 5)", - "sc4jacke", "Jack The Kipper (Mazooma) (Scorpion 4) (set 6)", - "sc4jackf", "Jack The Kipper (Mazooma) (Scorpion 4) (set 7)", - "sc4jackg", "Jack The Kipper (Mazooma) (Scorpion 4) (set 8)", - "sc4jbuck", "Jungle Bucks (Bellfruit) (Scorpion 4) (set 1)", - "sc4jbucka", "Jungle Bucks (Bellfruit) (Scorpion 4) (set 2)", - "sc4jbuckb", "Jungle Bucks (Bellfruit) (Scorpion 4) (set 3)", - "sc4jbuckc", "Jungle Bucks (Bellfruit) (Scorpion 4) (set 4)", - "sc4jbuckd", "Jungle Bucks (Bellfruit) (Scorpion 4) (set 5)", - "sc4jiggn", "Jiggery Pockery (German) (Nova) (Scorpion 4)", - "sc4jiggr", "Jiggery Pokery (Mazooma) (Scorpion 4) (set 1)", - "sc4jiggra", "Jiggery Pokery (Mazooma) (Scorpion 4) (set 2)", - "sc4jiggrb", "Jiggery Pokery (Mazooma) (Scorpion 4) (set 3)", - "sc4jiggrc", "Jiggery Pokery (Mazooma) (Scorpion 4) (set 4)", - "sc4jive", "Jive Money (PR2096) (Mazooma) (Scorpion 4)", - "sc4jivea", "Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 1)", - "sc4jiveb", "Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 2)", - "sc4jivec", "Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 3)", - "sc4jived", "Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 4)", - "sc4jjc", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 1)", - "sc4jjca", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 2)", - "sc4jjcb", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 3)", - "sc4jjcc", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 4)", - "sc4jjcd", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 5)", - "sc4jjce", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 6)", - "sc4jjcf", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 7)", - "sc4jjcg", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 8)", - "sc4jjch", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 9)", - "sc4jjci", "Jumping Jack Cash (Mazooma) (Scorpion 4) (set 10)", - "sc4jjf", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 1)", - "sc4jjfa", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 2)", - "sc4jjfb", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 3)", - "sc4jjfc", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 1)", - "sc4jjfd", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 2)", - "sc4jjfe", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 3)", - "sc4jjff", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 4)", - "sc4jjfg", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 4)", - "sc4jjfh", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 5)", - "sc4jjfi", "Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 6)", - "sc4jjfj", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 5)", - "sc4jjfk", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 6)", - "sc4jjfl", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 7)", - "sc4jjfm", "Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 8)", - "sc4jjok", "Jackpot Jokers (Bellfruit) (Scorpion 4) (set 1)", - "sc4jjoka", "Jackpot Jokers (Bellfruit) (Scorpion 4) (set 2)", - "sc4jjucl", "Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4jjucla", "Jackpot Junction Club (Ferry) (Bellfruit) (Scorpion 4) (set 1)", - "sc4jjuclb", "Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4jjuclc", "Jackpot Junction Club (Ferry) (Bellfruit) (Scorpion 4) (set 2)", - "sc4jjucld", "Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4jjucle", "Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4jjunc", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 1)", - "sc4jjunca", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 2)", - "sc4jjuncb", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 3)", - "sc4jjuncc", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 4)", - "sc4jjuncd", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 5)", - "sc4jjunce", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 6)", - "sc4jjuncf", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 7)", - "sc4jjuncg", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 8)", - "sc4jjunch", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 9)", - "sc4jjunci", "Jackpot Junction (Bellfruit) (Scorpion 4) (set 10)", - "sc4jolly", "Jolly Jousting (Qps) (Scorpion 4) (set 1)", - "sc4jollya", "Jolly Jousting (Qps) (Scorpion 4) (set 2)", - "sc4juicy", "Juicy Jackpots Club (PR1136) (65% Ferry) (Bellfruit) (Scorpion 4) (set 1)", - "sc4juicya", "Juicy Jackpots Club (PR1123) (Bellfruit) (Scorpion 4) (set 1)", - "sc4juicyb", "Juicy Jackpots Club (PR1136) (65% Ferry) (Bellfruit) (Scorpion 4) (set 2)", - "sc4juicyc", "Juicy Jackpots Club (PR1123) (Bellfruit) (Scorpion 4) (set 2)", - "sc4juicyd", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 1)", - "sc4juicye", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 2)", - "sc4juicyf", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 3)", - "sc4juicyg", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 4)", - "sc4juicyi", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (311 Club, set 1)", - "sc4juicyj", "Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (311 Club, set 2)", - "sc4kalei", "Kaleidoscope (011) (Qps) (Scorpion 4) (set 1)", - "sc4kaleia", "Kaleidoscope (041) (Qps) (Scorpion 4) (set 2)", - "sc4kaleib", "Kaleidoscope (011) (Qps) (Scorpion 4) (set 3)", - "sc4kaleic", "Kaleidoscope (041) (Qps) (Scorpion 4) (set 4)", - "sc4kaleid", "Kaleidoscope (051) (Qps) (Scorpion 4) (set 1)", - "sc4kaleie", "Kaleidoscope (051) (Qps) (Scorpion 4) (set 2)", - "sc4kkong", "King Kong Cash (Mazooma) (Scorpion 4) (set 1)", - "sc4kkonga", "King Kong Cash (Mazooma) (Scorpion 4) (set 2)", - "sc4kkongb", "King Kong Cash (Mazooma) (Scorpion 4) (set 3)", - "sc4kkongc", "King Kong Cash (Mazooma) (Scorpion 4) (set 4)", - "sc4kkongd", "King Kong Cash (Mazooma) (Scorpion 4) (set 5)", - "sc4kkonge", "King Kong Cash (Mazooma) (Scorpion 4) (set 6)", - "sc4kkongf", "King Kong Cash (Mazooma) (Scorpion 4) (set 7)", - "sc4kkongg", "King Kong Cash (Mazooma) (Scorpion 4) (set 8)", - "sc4kkongh", "King Kong Cash (Mazooma) (Scorpion 4) (set 9)", - "sc4kkongi", "King Kong Cash (Mazooma) (Scorpion 4) (set 10)", - "sc4kkongj", "King Kong Cash (Mazooma) (Scorpion 4) (set 11)", - "sc4knok", "Knockout (PR7061, KOUT) (Mazooma) (Scorpion 4) (set 1)", - "sc4knoka", "Knockout (PR7061, KOUT) (Mazooma) (Scorpion 4) (set 2)", - "sc4knokb", "Knockout (PR2057, PKOT) (Mazooma) (Scorpion 4) (set 1)", - "sc4knokc", "Knockout (PR2057, PKOT) (Mazooma) (Scorpion 4) (set 2)", - "sc4lasv", "Las Vegas (Dutch) (Bellfruit) (Scorpion 4) (set 1)", - "sc4lasva", "Las Vegas (Dutch) (Bellfruit) (Scorpion 4) (set 2)", - "sc4ldcas", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 1)", - "sc4ldcasa", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 2)", - "sc4ldcasb", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 3)", - "sc4ldcasc", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 4)", - "sc4ldcasd", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 5)", - "sc4ldcase", "Line Dancer Casino (Mazooma) (Scorpion 4) (set 6)", - "sc4ldvcl", "Little Devil Club (Mazooma) (Scorpion 4)", - "sc4ldvl", "Little Devil (Mazooma) (Scorpion 4) (set 1)", - "sc4ldvla", "Little Devil (Mazooma) (Scorpion 4) (set 2)", - "sc4ldvlb", "Little Devil (Mazooma) (Scorpion 4) (set 3)", - "sc4ldvlc", "Little Devil (Mazooma) (Scorpion 4) (set 4)", - "sc4leg", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 1)", - "sc4lega", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 2)", - "sc4legb", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 3)", - "sc4legc", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 4)", - "sc4legcb", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4legcba", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4legcbb", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4legcbc", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4legcbd", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4legcbe", "Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4legd", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 5)", - "sc4lege", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 6)", - "sc4legf", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 7)", - "sc4legg", "Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 8)", - "sc4lined", "Line Dancer (Mazooma) (Scorpion 4) (set 1)", - "sc4lineda", "Line Dancer (Mazooma) (Scorpion 4) (set 2)", - "sc4linedb", "Line Dancer (Mazooma) (Scorpion 4) (set 3)", - "sc4linedc", "Line Dancer (Mazooma) (Scorpion 4) (set 4)", - "sc4linedd", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 1)", - "sc4linede", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 2)", - "sc4linedf", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 3)", - "sc4linedg", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 4)", - "sc4linedh", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 5)", - "sc4linedi", "Line Dancer Arcade (Mazooma) (Scorpion 4) (set 6)", - "sc4lions", "Three Lions (Mazooma) (Scorpion 4) (set 1)", - "sc4lionsa", "Three Lions (Mazooma) (Scorpion 4) (set 2)", - "sc4lionsb", "Three Lions (Mazooma) (Scorpion 4) (set 3)", - "sc4lionsc", "Three Lions (Mazooma) (Scorpion 4) (set 4)", - "sc4lionsd", "Three Lions (Mazooma) (Scorpion 4) (set 5)", - "sc4lionse", "Three Lions (Mazooma) (Scorpion 4) (set 6)", - "sc4lionsf", "Three Lions (Mazooma) (Scorpion 4) (set 7)", - "sc4lir", "Let It Roll (Bellfruit) (Scorpion 4) (set 1)", - "sc4lira", "Let It Roll (Bellfruit) (Scorpion 4) (set 2)", - "sc4lirb", "Let It Roll (Bellfruit) (Scorpion 4) (set 3)", - "sc4lirc", "Let It Roll (Bellfruit) (Scorpion 4) (set 4)", - "sc4lird", "Let It Roll (Bellfruit) (Scorpion 4) (set 5)", - "sc4lire", "Let It Roll (Bellfruit) (Scorpion 4) (set 6)", - "sc4lirf", "Let It Roll (Bellfruit) (Scorpion 4) (set 7)", - "sc4lirg", "Let It Roll (Bellfruit) (Scorpion 4) (set 8)", - "sc4lirh", "Let It Roll (Bellfruit) (Scorpion 4) (set 9)", - "sc4liri", "Let It Roll (Bellfruit) (Scorpion 4) (set 10)", - "sc4lkbcl", "Lock Buster Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4lkbcla", "Lock Buster Club (Euro) (Bellfruit) (Scorpion 4) (set 1)", - "sc4lkbclb", "Lock Buster Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4lkbclc", "Lock Buster Club (Euro) (Bellfruit) (Scorpion 4) (set 2)", - "sc4lkbcld", "Lock Buster Club (Ferry) (Bellfruit) (Scorpion 4) (set 1)", - "sc4lkbcle", "Lock Buster Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4lkbclf", "Lock Buster Club (Ferry) (Bellfruit) (Scorpion 4) (set 2)", - "sc4lkbclg", "Lock Buster Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4lkbclh", "Lock Buster Club (Bellfruit) (Scorpion 4) (311 Club, set 1)", - "sc4lkbcli", "Lock Buster Club (Bellfruit) (Scorpion 4) (311 Club, set 2)", - "sc4lockb", "Lock Buster (Bellfruit) (Scorpion 4) (set 1)", - "sc4lockba", "Lock Buster (Bellfruit) (Scorpion 4) (set 2)", - "sc4lockbb", "Lock Buster (Bellfruit) (Scorpion 4) (set 3)", - "sc4lockbc", "Lock Buster (Bellfruit) (Scorpion 4) (set 4)", - "sc4lockbd", "Lock Buster (Bellfruit) (Scorpion 4) (set 5)", - "sc4lockbe", "Lock Buster (Bellfruit) (Scorpion 4) (set 6)", - "sc4lockbf", "Lock Buster (Bellfruit) (Scorpion 4) (set 7)", - "sc4lockbg", "Lock Buster (Bellfruit) (Scorpion 4) (set 8)", - "sc4lotr2", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 1)", - "sc4lotr2a", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 2)", - "sc4lotr2b", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 3)", - "sc4lotr2c", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 4)", - "sc4lotr2d", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 5)", - "sc4lotr2e", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 6)", - "sc4lotr2f", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 11)", - "sc4lotr2g", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 12)", - "sc4lotr2h", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 13)", - "sc4lotr2i", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 14)", - "sc4lotr2j", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 7)", - "sc4lotr2k", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 8)", - "sc4lotr2l", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 9)", - "sc4lotr2m", "Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 10)", - "sc4lotrf", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 1)", - "sc4lotrfa", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 2)", - "sc4lotrfb", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 3)", - "sc4lotrfc", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 4)", - "sc4lotrfd", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 5)", - "sc4lotrfe", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 6)", - "sc4lotrff", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 7)", - "sc4lotrfg", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 8)", - "sc4lotrr", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 1)", - "sc4lotrra", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 2)", - "sc4lotrrb", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 3)", - "sc4lotrrc", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 4)", - "sc4lotrrd", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 5)", - "sc4lotrre", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 6)", - "sc4lotrt", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 9)", - "sc4lotrta", "Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 10)", - "sc4ltr2c", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4ltr2ca", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4ltr2cb", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4ltr2cc", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4ltr2cd", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4ltr2ce", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4ltr2cf", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 7)", - "sc4ltr2cg", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 8)", - "sc4ltr2ch", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 9)", - "sc4ltr2ci", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 10)", - "sc4ltr2cj", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 11)", - "sc4ltr2ck", "Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 12)", - "sc4luck7", "Lucky 7s (Mazooma) (Scorpion 4) (Top Box)", - "sc4luck7a", "Lucky 7s (Mazooma) (Scorpion 4) (set 1)", - "sc4luck7b", "Lucky 7s (Mazooma) (Scorpion 4) (set 2)", - "sc4luck7c", "Lucky 7s (Mazooma) (Scorpion 4) (set 3)", - "sc4luck7d", "Lucky 7s (Mazooma) (Scorpion 4) (set 4)", - "sc4luckb", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 1)", - "sc4luckb0", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 6)", - "sc4luckb1", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 23)", - "sc4luckb2", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 24)", - "sc4luckb3", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 25)", - "sc4luckb4", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 26)", - "sc4luckba", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 2)", - "sc4luckbb", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 3)", - "sc4luckbc", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 4)", - "sc4luckbd", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 5)", - "sc4luckbe", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 6)", - "sc4luckbf", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 7)", - "sc4luckbg", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 8)", - "sc4luckbh", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 9)", - "sc4luckbi", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 10)", - "sc4luckbj", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 11)", - "sc4luckbk", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 12)", - "sc4luckbl", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 13)", - "sc4luckbm", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 14)", - "sc4luckbn", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 15)", - "sc4luckbo", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 16)", - "sc4luckbp", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 17)", - "sc4luckbq", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 1)", - "sc4luckbr", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 2)", - "sc4luckbs", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 3)", - "sc4luckbt", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 18)", - "sc4luckbu", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 19)", - "sc4luckbv", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 20)", - "sc4luckbw", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 21)", - "sc4luckbx", "Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 22)", - "sc4luckby", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 4)", - "sc4luckbz", "Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 5)", - "sc4m2m", "Money To Money (Mazooma) (Scorpion 4) (set 1)", - "sc4m2ma", "Money To Money (Mazooma) (Scorpion 4) (set 2)", - "sc4magci", "Magic Circle (011) (Qps) (Scorpion 4) (set 1)", - "sc4magcia", "Magic Circle (021) (Qps) (Scorpion 4) (set 1)", - "sc4magcib", "Magic Circle (031) (Qps) (Scorpion 4) (set 1)", - "sc4magcic", "Magic Circle (012) (Qps) (Scorpion 4) (set 1)", - "sc4magcid", "Magic Circle (012) (Qps) (Scorpion 4) (set 3)", - "sc4magcie", "Magic Circle (022) (Qps) (Scorpion 4) (set 1)", - "sc4magcif", "Magic Circle (032) (Qps) (Scorpion 4) (set 1)", - "sc4magcig", "Magic Circle (013) (Qps) (Scorpion 4) (set 1)", - "sc4magcih", "Magic Circle (014) (Qps) (Scorpion 4) (set 1)", - "sc4magcii", "Magic Circle (024) (Qps) (Scorpion 4) (set 1)", - "sc4magcij", "Magic Circle (034) (Qps) (Scorpion 4) (set 1)", - "sc4magcik", "Magic Circle (011) (Qps) (Scorpion 4) (set 2)", - "sc4magcil", "Magic Circle (021) (Qps) (Scorpion 4) (set 2)", - "sc4magcim", "Magic Circle (031) (Qps) (Scorpion 4) (set 2)", - "sc4magcin", "Magic Circle (012) (Qps) (Scorpion 4) (set 2)", - "sc4magcio", "Magic Circle (012) (Qps) (Scorpion 4) (set 4)", - "sc4magcip", "Magic Circle (022) (Qps) (Scorpion 4) (set 2)", - "sc4magciq", "Magic Circle (032) (Qps) (Scorpion 4) (set 2)", - "sc4magcir", "Magic Circle (013) (Qps) (Scorpion 4) (set 2)", - "sc4magcis", "Magic Circle (014) (Qps) (Scorpion 4) (set 2)", - "sc4magcit", "Magic Circle (024) (Qps) (Scorpion 4) (set 2)", - "sc4magciu", "Magic Circle (034) (Qps) (Scorpion 4) (set 2)", - "sc4magic", "Magic Poundabout (Qps) (Scorpion 4) (set 1)", - "sc4magica", "Magic Poundabout (Qps) (Scorpion 4) (set 2)", - "sc4magicb", "Magic Poundabout (Qps) (Scorpion 4) (set 3)", - "sc4magicc", "Magic Poundabout (Qps) (Scorpion 4) (set 4)", - "sc4manic", "Manic Miner (Bellfruit) (Scorpion 4) (set 1)", - "sc4manica", "Manic Miner (Bellfruit) (Scorpion 4) (set 2)", - "sc4manicb", "Manic Miner (Bellfruit) (Scorpion 4) (set 5)", - "sc4manicc", "Manic Miner (Bellfruit) (Scorpion 4) (set 6)", - "sc4manicd", "Manic Miner (Bellfruit) (Scorpion 4) (set 7)", - "sc4manice", "Manic Miner (Bellfruit) (Scorpion 4) (set 8)", - "sc4manicf", "Manic Miner (Bellfruit) (Scorpion 4) (set 9)", - "sc4manicg", "Manic Miner (Bellfruit) (Scorpion 4) (set 10)", - "sc4maxcc", "Maximus Cash Club (Mazooma) (Scorpion 4) (set 1)", - "sc4maxcca", "Maximus Cash Club (Mazooma) (Scorpion 4) (set 2)", - "sc4maxccb", "Maximus Cash Club (Mazooma) (Scorpion 4) (set 3)", - "sc4maxccc", "Maximus Cash Club (Mazooma) (Scorpion 4) (set 4)", - "sc4maxim", "Maximus Cash (Mazooma) (Scorpion 4) (set 1)", - "sc4maxima", "Maximus Cash (Mazooma) (Scorpion 4) (set 2)", - "sc4maximb", "Maximus Cash (Mazooma) (Scorpion 4) (set 3)", - "sc4maximc", "Maximus Cash (Mazooma) (Scorpion 4) (set 4)", - "sc4maximd", "Maximus Cash (Mazooma) (Scorpion 4) (set 5)", - "sc4maxime", "Maximus Cash (Mazooma) (Scorpion 4) (set 6)", - "sc4maximf", "Maximus Cash (Mazooma) (Scorpion 4) (set 7)", - "sc4maximg", "Maximus Cash (Mazooma) (Scorpion 4) (set 8)", - "sc4mbags", "Money Bags (Bellfruit) (Scorpion 4) (set 1)", - "sc4mbagsa", "Money Bags (Bellfruit) (Scorpion 4) (set 2)", - "sc4mbagsb", "Money Bags (Bellfruit) (Scorpion 4) (set 3)", - "sc4mbagsc", "Money Bags (Bellfruit) (Scorpion 4) (set 4)", - "sc4mcas", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 1)", - "sc4mcas0", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 15)", - "sc4mcas1", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 16)", - "sc4mcas2", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 17)", - "sc4mcas3", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 18)", - "sc4mcas4", "Monopoly Casino (PR2056) (Mazooma) (Scorpion 4) (GMTB, Top Box, set 3)", - "sc4mcask", "Monopoly Casino (PR2056) (Mazooma) (Scorpion 4) (GMTB, Top Box, set 1)", - "sc4mcasm", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 2)", - "sc4mcasn", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 3)", - "sc4mcaso", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 4)", - "sc4mcasp", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 5)", - "sc4mcasq", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 6)", - "sc4mcasr", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 7)", - "sc4mcass", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 8)", - "sc4mcast", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 9)", - "sc4mcasu", "Monopoly Casino (PR2056) (Mazooma) (Scorpion 4) (GMTB, Top Box, set 2)", - "sc4mcasv", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 10)", - "sc4mcasw", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 11)", - "sc4mcasx", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 12)", - "sc4mcasy", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 13)", - "sc4mcasz", "Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 14)", - "sc4mclb", "Monopoly Club (Mazooma) (Scorpion 4) (set 1)", - "sc4mclba", "Monopoly Club (Mazooma) (Scorpion 4) (set 2)", - "sc4mclbb", "Monopoly Club (Mazooma) (Scorpion 4) (set 3)", - "sc4mclbc", "Monopoly Club (Mazooma) (Scorpion 4) (set 4)", - "sc4mclbd", "Monopoly Club (Mazooma) (Scorpion 4) (set 5)", - "sc4mclbe", "Monopoly Club (Mazooma) (Scorpion 4) (set 6)", - "sc4mdm", "Monopoly Double Money (Bellfruit) (Scorpion 4) (set 1)", - "sc4mdma", "Monopoly Double Money (Bellfruit) (Scorpion 4) (set 2)", - "sc4mgr", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 1)", - "sc4mgra", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 2)", - "sc4mgrb", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 5)", - "sc4mgrc", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 6)", - "sc4mgrd", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 7)", - "sc4mgre", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 8)", - "sc4mgrf", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 9)", - "sc4mgrg", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 10)", - "sc4mgrh", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 3)", - "sc4mgri", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 4)", - "sc4mgrj", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 11)", - "sc4mgrk", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 12)", - "sc4mgrl", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 13)", - "sc4mgrm", "Money Go Round Casino (Bellfruit) (Scorpion 4) (set 14)", - "sc4mhn", "Monopoly Here & Now (Mazooma) (Scorpion 4) (set 1)", - "sc4mhna", "Monopoly Here & Now (Mazooma) (Scorpion 4) (set 2)", - "sc4mhp", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 1)", - "sc4mhpa", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 2)", - "sc4mhpb", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 3)", - "sc4mhpc", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 4)", - "sc4mhpd", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 5)", - "sc4mhpe", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 6)", - "sc4mhpf", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 7)", - "sc4mhpg", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 8)", - "sc4mhph", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 9)", - "sc4mhpi", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 10)", - "sc4mhpj", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 11)", - "sc4mhpk", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 12)", - "sc4mhpl", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 13)", - "sc4mhpm", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 14)", - "sc4mhpn", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 15)", - "sc4mhpo", "Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 16)", - "sc4milja", "Miljonairs Arcade (Dutch) (Bellfruit) (Scorpion 4)", - "sc4miljo", "Miljonairs (Dutch) (Bellfruit) (Scorpion 4) (set 1)", - "sc4milro", "Millionaires Row (Scorpion 4?)", - "sc4mmad", "Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 1)", - "sc4mmada", "Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 2)", - "sc4mmadb", "Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 3)", - "sc4mmadc", "Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 4)", - "sc4mmadd", "Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 5)", - "sc4mmade", "Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 6)", - "sc4mmadf", "Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 7)", - "sc4mmadg", "Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 8)", - "sc4mmb", "Monopoly Money Bags (Bellfruit) (Scorpion 4) (set 1)", - "sc4mmba", "Monopoly Money Bags (Bellfruit) (Scorpion 4) (set 2)", - "sc4mmm", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 1)", - "sc4mmma", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 2)", - "sc4mmmb", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 3)", - "sc4mmmc", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 4)", - "sc4mmmd", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 5)", - "sc4mmme", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 6)", - "sc4mmmf", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 7)", - "sc4mmmg", "Mental Money Monsters (Mazooma) (Scorpion 4) (set 8)", - "sc4mondx", "Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 1)", - "sc4mondxa", "Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 2)", - "sc4mondxb", "Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 3)", - "sc4mondxc", "Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 4)", - "sc4mondxd", "Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 1)", - "sc4mondxe", "Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 3)", - "sc4mondxf", "Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 4)", - "sc4mondxg", "Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 2)", - "sc4mono5", "Monopoly 5 (PR7089, MONF) (Mazooma) (Scorpion 4) (set 1)", - "sc4mono5a", "Monopoly 5 (PR7089, MONF) (Mazooma) (Scorpion 4) (set 2)", - "sc4monoa", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 1)", - "sc4monoaa", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 2)", - "sc4monoab", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 3)", - "sc4monoac", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 4)", - "sc4monoad", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 5)", - "sc4monoae", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 6)", - "sc4monoaf", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 7)", - "sc4monoag", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 8)", - "sc4monoah", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 9)", - "sc4monoai", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 10)", - "sc4monoaj", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 11)", - "sc4monoak", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 12)", - "sc4monoal", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 13)", - "sc4monoam", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 14)", - "sc4monoan", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 15)", - "sc4monoao", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 16)", - "sc4monoap", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 17)", - "sc4monoaq", "Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 18)", - "sc4monob", "Monopoly (Bellfruit) (Scorpion 4) (set 1)", - "sc4monoba", "Monopoly (Bellfruit) (Scorpion 4) (set 2)", - "sc4monobb", "Monopoly (Bellfruit) (Scorpion 4) (set 3)", - "sc4monobc", "Monopoly (Bellfruit) (Scorpion 4) (set 4)", - "sc4monobd", "Monopoly (Bellfruit) (Scorpion 4) (set 5)", - "sc4monobe", "Monopoly (Bellfruit) (Scorpion 4) (set 6)", - "sc4monobf", "Monopoly (Bellfruit) (Scorpion 4) (set 7)", - "sc4monobg", "Monopoly (Bellfruit) (Scorpion 4) (set 8)", - "sc4monobh", "Monopoly (Bellfruit) (Scorpion 4) (set 9)", - "sc4monobi", "Monopoly (Bellfruit) (Scorpion 4) (set 10)", - "sc4monobj", "Monopoly (Bellfruit) (Scorpion 4) (set 11)", - "sc4monobk", "Monopoly (Bellfruit) (Scorpion 4) (set 12)", - "sc4monobl", "Monopoly (Bellfruit) (Scorpion 4) (set 13)", - "sc4monobm", "Monopoly (Bellfruit) (Scorpion 4) (set 14)", - "sc4monod", "Monopoly (Mazooma) [German] (Scorpion 4) (set 1)", - "sc4monoda", "Monopoly (Mazooma) [German] (Scorpion 4) (set 2)", - "sc4monodb", "Monopoly (Mazooma) [German] (Scorpion 4) (set 3)", - "sc4monog", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 5)", - "sc4monoga", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 6)", - "sc4monop", "Monopoly Triple (PR2056, TBOX) (Mazooma) (Scorpion 4) (Top Box, set 1)", - "sc4monopa", "Monopoly Triple (PR2056, TBOX) (Mazooma) (Scorpion 4) (Top Box, set 2)", - "sc4monot", "Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 1)", - "sc4monota", "Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 2)", - "sc4monotb", "Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 3)", - "sc4monotc", "Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 4)", - "sc4monsp", "Money Spinner (Dutch) (Bellfruit) (Scorpion 4)", - "sc4mont", "Montego Pay (Qps) (Scorpion 4) (set 1)", - "sc4monta", "Montego Pay (Qps) (Scorpion 4) (set 2)", - "sc4montb", "Montego Pay (Qps) (Scorpion 4) (set 3)", - "sc4montc", "Montego Pay (Qps) (Scorpion 4) (set 4)", - "sc4montd", "Montego Pay (Qps) (Scorpion 4) (set 5)", - "sc4monte", "Montego Pay (Qps) (Scorpion 4) (set 6)", - "sc4montf", "Montego Pay (Qps) (Scorpion 4) (set 7)", - "sc4montg", "Montego Pay (Qps) (Scorpion 4) (set 8)", - "sc4month", "Montego Pay (Qps) (Scorpion 4) (set 9)", - "sc4monti", "Montego Pay (Qps) (Scorpion 4) (set 10)", - "sc4motor", "Motorway Mania (Bellfruit) (Scorpion 4) (set 1)", - "sc4motora", "Motorway Mania (Bellfruit) (Scorpion 4) (set 2)", - "sc4motorb", "Motorway Mania (Bellfruit) (Scorpion 4) (set 3)", - "sc4motorc", "Motorway Mania (Bellfruit) (Scorpion 4) (set 4)", - "sc4motord", "Motorway Mania (Bellfruit) (Scorpion 4) (set 5)", - "sc4motore", "Motorway Mania (Bellfruit) (Scorpion 4) (set 6)", - "sc4motorf", "Motorway Mania (Bellfruit) (Scorpion 4) (set 7)", - "sc4motorg", "Motorway Mania (Bellfruit) (Scorpion 4) (set 8)", - "sc4motorh", "Motorway Mania (Bellfruit) (Scorpion 4) (set 9)", - "sc4mou", "Move On Up (Qps) (Scorpion 4) (set 1)", - "sc4moua", "Move On Up (Qps) (Scorpion 4) (set 2)", - "sc4moub", "Move On Up (Qps) (Scorpion 4) (set 3)", - "sc4mowow", "Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 1)", - "sc4mowowa", "Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 2)", - "sc4mowowb", "Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 3)", - "sc4mowowc", "Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 4)", - "sc4mr2r", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 1)", - "sc4mr2ra", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 2)", - "sc4mr2rb", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 3)", - "sc4mr2rc", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 4)", - "sc4mr2rd", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 5)", - "sc4mr2re", "Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 6)", - "sc4mrh", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 1)", - "sc4mrha", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 2)", - "sc4mrhb", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 3)", - "sc4mrhc", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 4)", - "sc4mrhd", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 5)", - "sc4mrhe", "Monopoly Red Hot (Mazooma) (Scorpion 4) (set 6)", - "sc4msclb", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4msclba", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4msclbb", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4msclbc", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4msclbd", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4msclbe", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4msclbf", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 7)", - "sc4msclbg", "Money Spinner Club (Bellfruit) (Scorpion 4) (set 8)", - "sc4mspid", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 1)", - "sc4mspida", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 2)", - "sc4mspidb", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 3)", - "sc4mspidc", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 4)", - "sc4mspidd", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 5)", - "sc4mspide", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 6)", - "sc4mspidf", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 7)", - "sc4mspidg", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 8)", - "sc4mspidh", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 13)", - "sc4mspidi", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 14)", - "sc4mspidj", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 9)", - "sc4mspidk", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 10)", - "sc4mspidl", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 11)", - "sc4mspidm", "Casino Money Spider (Bellfruit) (Scorpion 4) (set 12)", - "sc4mtb", "Money To Burn (Bellfruit) (Scorpion 4) (set 1)", - "sc4mtba", "Money To Burn (Bellfruit) (Scorpion 4) (set 2)", - "sc4mtbb", "Money To Burn (Bellfruit) (Scorpion 4) (set 3)", - "sc4mtbc", "Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 1)", - "sc4mtbcl", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4mtbcla", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4mtbclb", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4mtbclc", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4mtbcld", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4mtbcle", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4mtbclf", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 7)", - "sc4mtbclg", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 8)", - "sc4mtbclh", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 9)", - "sc4mtbcli", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 10)", - "sc4mtbclj", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 11)", - "sc4mtbclk", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 12)", - "sc4mtbcll", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 13)", - "sc4mtbclm", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 14)", - "sc4mtbcln", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 15)", - "sc4mtbclo", "Money To Burn Club (Bellfruit) (Scorpion 4) (set 16)", - "sc4mtbd", "Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 2)", - "sc4mtbe", "Money To Burn (Bellfruit) (Scorpion 4) (set 4)", - "sc4mtbf", "Money To Burn (Bellfruit) (Scorpion 4) (set 5)", - "sc4mtbg", "Money To Burn (Bellfruit) (Scorpion 4) (set 6)", - "sc4mtbh", "Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 3)", - "sc4mtbi", "Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 4)", - "sc4mtbj", "Money To Burn (Bellfruit) (Scorpion 4) (set 7)", - "sc4mwwtb", "Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 1)", - "sc4mwwtba", "Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 2)", - "sc4mwwtbb", "Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 3)", - "sc4mwwtbc", "Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 4)", - "sc4mwwtbd", "Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 5)", - "sc4nmare", "A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 1)", - "sc4nmarea", "A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 2)", - "sc4nmareb", "A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 3)", - "sc4nmarec", "A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 4)", - "sc4nmtj", "Never Mind The Jackpots (Mazooma) (Scorpion 4) (011)", - "sc4nmtja", "Never Mind The Jackpots (Mazooma) (Scorpion 4) (014, set 1)", - "sc4nmtjb", "Never Mind The Jackpots (Mazooma) (Scorpion 4) (044, set 1)", - "sc4nmtjc", "Never Mind The Jackpots (Mazooma) (Scorpion 4) (014, set 2)", - "sc4nmtjd", "Never Mind The Jackpots (Mazooma) (Scorpion 4) (044, set 2)", - "sc4nudit", "Nudge It (Mazooma) (Scorpion 4) (set 1)", - "sc4nudita", "Nudge It (Mazooma) (Scorpion 4) (set 2)", - "sc4nuditb", "Nudge It (Mazooma) (Scorpion 4) (set 3)", - "sc4nunsm", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 1)", - "sc4nunsmb", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 2)", - "sc4nunsmc", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 3)", - "sc4nunsmd", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 4)", - "sc4nunsme", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 5)", - "sc4nunsmf", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 6)", - "sc4nunsmg", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 7)", - "sc4nunsmh", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 8)", - "sc4nunsmi", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 9)", - "sc4nunsmj", "Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 10)", - "sc4onup", "On The Up (Mazooma) (Scorpion 4) (set 1)", - "sc4onupa", "On The Up (Mazooma) (Scorpion 4) (set 2)", - "sc4opses", "Open Sesame (Bellfruit) (Scorpion 4) (set 1)", - "sc4opsesa", "Open Sesame (Bellfruit) (Scorpion 4) (set 2)", - "sc4outlw", "Outlaw (Bellfruit) (Scorpion 4) (set 1)", - "sc4outlwa", "Outlaw (Bellfruit) (Scorpion 4) (set 2)", - "sc4outlwb", "Outlaw (Bellfruit) (Scorpion 4) (set 3)", - "sc4outlwc", "Outlaw (Bellfruit) (Scorpion 4) (set 4)", - "sc4oyf", "Off Your Face (Bellfruit) (Scorpion 4) (set 1)", - "sc4oyfa", "Off Your Face (Bellfruit) (Scorpion 4) (set 2)", - "sc4paccl", "Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 1)", - "sc4paccla", "Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 2)", - "sc4pacclb", "Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 3)", - "sc4pacclc", "Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 4)", - "sc4paccs", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 1)", - "sc4paccsa", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 2)", - "sc4paccsb", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 3)", - "sc4paccsc", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 4)", - "sc4paccsd", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 5)", - "sc4paccse", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 6)", - "sc4paccsf", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 7)", - "sc4paccsg", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 8)", - "sc4paccsh", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 12)", - "sc4paccsi", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 13)", - "sc4paccsj", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 9)", - "sc4paccsk", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 10)", - "sc4paccsl", "Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 11)", - "sc4pacmn", "Pac Man (PR7026, PMAN) (Mazooma) (Scorpion 4) (set 1)", - "sc4pacmna", "Pac Man (PR7026, PMAN) (Mazooma) (Scorpion 4) (set 2)", - "sc4pacmnb", "Pac Man (PR7026, PMAN) (Mazooma) (Scorpion 4) (set 3)", - "sc4pacpl", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 1)", - "sc4pacpla", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 2)", - "sc4pacplb", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 3)", - "sc4pacplc", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 4)", - "sc4pacpld", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 5)", - "sc4pacple", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 6)", - "sc4pacplf", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 7)", - "sc4pacplg", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 8)", - "sc4pacplh", "Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 9)", - "sc4pacqp", "Pac Man (PR7072, QPAC) (QPS) (Scorpion 4) (set 1)", - "sc4pacqpa", "Pac Man (PR7072, QPAC) (QPS) (Scorpion 4) (set 2)", - "sc4pacqpb", "Pac Man (PR7072, QPAC) (QPS) (Scorpion 4) (set 3)", - "sc4party", "Party Time (German) (PR7151, GPTM) (Nova) (Scorpion 4)", - "sc4paytm", "Pay Time (Dutch) (Bellfruit) (Scorpion 4)", - "sc4pen1", "Public Enemy No1 (Bellfruit) (Scorpion 4) (set 1)", - "sc4pen1a", "Public Enemy No1 (Bellfruit) (Scorpion 4) (set 2)", - "sc4pen1b", "Public Enemy No1 (Bellfruit) (Scorpion 4) (set 3)", - "sc4pen1c", "Public Enemy No1 (Bellfruit) (Scorpion 4) (set 4)", - "sc4pen1d", "Public Enemy No1 (Bellfruit) (Scorpion 4) (set 5)", - "sc4pglcl", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4pglcla", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4pglclb", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4pglclc", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4pglcld", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4pglcle", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4pglclf", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 7)", - "sc4pglclg", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 8)", - "sc4pglclh", "Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 9)", - "sc4pglcs", "Pharaoh's Gold Casino (Dutch) (Bellfruit) (Scorpion 4) (set 1)", - "sc4pglcsa", "Pharaoh's Gold Casino (Dutch) (Bellfruit) (Scorpion 4) (set 2)", - "sc4pglcsb", "Pharaoh's Gold Casino (Dutch) (Bellfruit) (Scorpion 4) (set 3)", - "sc4pgold", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 1)", - "sc4pgolda", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 2)", - "sc4pgoldb", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 3)", - "sc4pgoldc", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 4)", - "sc4pgoldd", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 5)", - "sc4pgoldf", "Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 6)", - "sc4pipe", "Piping Hot (Mazooma) (Scorpion 4) (set 1)", - "sc4pipea", "Piping Hot (Mazooma) (Scorpion 4) (set 2)", - "sc4pir", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 1)", - "sc4pira", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 2)", - "sc4pirb", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 3)", - "sc4pirc", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 4)", - "sc4pird", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 5)", - "sc4pire", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 6)", - "sc4pirf", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 7)", - "sc4pirg", "The Prize Is Right (Bellfruit) (Scorpion 4) (set 8)", - "sc4plumb", "Plumb Crazy Club (413) (Qps) (Scorpion 4) (set 1)", - "sc4plumba", "Plumb Crazy Club (413) (Qps) (Scorpion 4) (set 2)", - "sc4plumbb", "Plumb Crazy Club (411) (Qps) (Scorpion 4) (set 1)", - "sc4plumbc", "Plumb Crazy Club (411) (Qps) (Scorpion 4) (set 2)", - "sc4plumbd", "Plumb Crazy Club (412) (Qps) (Scorpion 4) (set 1)", - "sc4plumbe", "Plumb Crazy Club (412) (Qps) (Scorpion 4) (set 2)", - "sc4pmani", "Pac Mania (PR2031, ANIA) (Mazooma) (Scorpion 4) (set 1)", - "sc4pmania", "Pac Mania (PR2031, ANIA) (Mazooma) (Scorpion 4) (set 2)", - "sc4po8", "Pieces Of Eight (V1.0) (Qps) (Scorpion 4) (set 1)", - "sc4po8a", "Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 1)", - "sc4po8b", "Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 2)", - "sc4po8c", "Pieces Of Eight (011) (Qps) (Scorpion 4) (set 1)", - "sc4po8d", "Pieces Of Eight (041) (Qps) (Scorpion 4) (set 1)", - "sc4po8e", "Pieces Of Eight (V1.0) (Qps) (Scorpion 4) (set 2)", - "sc4po8f", "Pieces Of Eight (V1.0) (Qps) (Scorpion 4) (set 3)", - "sc4po8g", "Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 3)", - "sc4po8h", "Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 4)", - "sc4po8i", "Pieces Of Eight (012) (Qps) (Scorpion 4) (set 1)", - "sc4po8j", "Pieces Of Eight (042) (Qps) (Scorpion 4) (set 1)", - "sc4po8k", "Pieces Of Eight (012) (Qps) (Scorpion 4) (set 2)", - "sc4po8l", "Pieces Of Eight (042) (Qps) (Scorpion 4) (set 2)", - "sc4po8m", "Pieces Of Eight (011) (Qps) (Scorpion 4) (set 2)", - "sc4po8n", "Pieces Of Eight (041) (Qps) (Scorpion 4) (set 2)", - "sc4pog", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 1)", - "sc4poga", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 2)", - "sc4pogb", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 3)", - "sc4pogbl", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4pogbla", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4pogblb", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4pogblc", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4pogbld", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4pogble", "Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4pogc", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 4)", - "sc4pogd", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 5)", - "sc4poge", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 6)", - "sc4pogf", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 7)", - "sc4pogg", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 8)", - "sc4pogh", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 9)", - "sc4pogi", "Pots Of Gold (Bellfruit) (Scorpion 4) (set 10)", - "sc4polem", "Pole Position (Mazooma) (Scorpion 4) (set 1)", - "sc4polema", "Pole Position (Mazooma) (Scorpion 4) (set 2)", - "sc4polemb", "Pole Position (Mazooma) (Scorpion 4) (set 3)", - "sc4polemc", "Pole Position (Mazooma) (Scorpion 4) (set 4)", - "sc4polemd", "Pole Position (Mazooma) (Scorpion 4) (set 5)", - "sc4polen", "Pole Position (German) (PR7012, GPOS) (Nova) (Scorpion 4)", - "sc4polic", "Police Squid (V1.0) (Qps) (Scorpion 4) (set 1)", - "sc4polica", "Police Squid (V2.0) (Qps) (Scorpion 4) (set 1)", - "sc4policb", "Police Squid (V1.0) (Qps) (Scorpion 4) (set 2)", - "sc4policc", "Police Squid (V2.0) (Qps) (Scorpion 4) (set 2)", - "sc4pony", "Pony Express (Bellfruit) (Scorpion 4) (set 1)", - "sc4ponya", "Pony Express (Bellfruit) (Scorpion 4) (set 2)", - "sc4ponyb", "Pony Express (Bellfruit) (Scorpion 4) (set 3)", - "sc4ponyc", "Pony Express (Bellfruit) (Scorpion 4) (set 4)", - "sc4ponyd", "Pony Express (Bellfruit) (Scorpion 4) (set 5)", - "sc4ponye", "Pony Express (Bellfruit) (Scorpion 4) (set 6)", - "sc4popey", "Popeye (Mazooma) (Scorpion 4) (set 1)", - "sc4popeya", "Popeye (Mazooma) (Scorpion 4) (set 2)", - "sc4popeyb", "Popeye (Mazooma) (Scorpion 4) (set 3)", - "sc4popeyc", "Popeye (Mazooma) (Scorpion 4) (set 4)", - "sc4popeyd", "Popeye (Mazooma) (Scorpion 4) (set 5)", - "sc4popeye", "Popeye (Mazooma) (Scorpion 4) (set 6)", - "sc4potp", "Pick Of The Pack (Bellfruit) (Scorpion 4) (set 1)", - "sc4potpa", "Pick Of The Pack (Bellfruit) (Scorpion 4) (set 2)", - "sc4potsh", "Pot Shot (Qps) (Scorpion 4) (set 1)", - "sc4potsha", "Pot Shot (Qps) (Scorpion 4) (set 2)", - "sc4pp", "Pink Panther (Mazooma) (Scorpion 4) (set 1)", - "sc4ppa", "Pink Panther (Mazooma) (Scorpion 4) (set 2)", - "sc4ppb", "Pink Panther (Mazooma) (Scorpion 4) (set 3)", - "sc4ppc", "Pink Panther (Mazooma) (Scorpion 4) (set 4)", - "sc4ppclb", "Pink Panther Club (411) (Qps) (Scorpion 4) (set 1)", - "sc4ppclba", "Pink Panther Club (412) (Qps) (Scorpion 4) (set 1)", - "sc4ppclbb", "Pink Panther Club (411) (Qps) (Scorpion 4) (set 2)", - "sc4ppclbc", "Pink Panther Club (412) (Qps) (Scorpion 4) (set 2)", - "sc4ppcr", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 1)", - "sc4ppcra", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 2)", - "sc4ppcrb", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 3)", - "sc4ppcrd", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 4)", - "sc4ppcre", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 5)", - "sc4ppcrf", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 6)", - "sc4ppcrg", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 7)", - "sc4ppcrh", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 8)", - "sc4ppcri", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 9)", - "sc4ppcrj", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 10)", - "sc4ppcrtb", "Pink Panther Clouseau's Revenge Top Box (Mazooma) (Scorpion 4)", - "sc4ppctc", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 1)", - "sc4ppctca", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 2)", - "sc4ppctcb", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 3)", - "sc4ppctcc", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 4)", - "sc4ppctcd", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 5)", - "sc4ppctce", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 6)", - "sc4ppctcf", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 7)", - "sc4ppctcg", "Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 8)", - "sc4ppd", "Pink Panther (Mazooma) (Scorpion 4) (set 5)", - "sc4ppdym", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 1)", - "sc4ppdymb", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 2)", - "sc4ppdymc", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 3)", - "sc4ppdymd", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 4)", - "sc4ppdymf", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 5)", - "sc4ppdymg", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 6)", - "sc4ppdymh", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 7)", - "sc4ppdymi", "Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 8)", - "sc4ppdymtb", "Pink Panther Double Your Money Top Box (Mazooma) (Scorpion 4) (set 1)", - "sc4ppdymtba", "Pink Panther Double Your Money Top Box (Mazooma) (Scorpion 4) (set 2)", - "sc4ppsag", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 1)", - "sc4ppsaga", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 2)", - "sc4ppsagb", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 3)", - "sc4ppsagc", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 4)", - "sc4ppsagd", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 5)", - "sc4ppsage", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 6)", - "sc4ppsagf", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 7)", - "sc4ppsagg", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 8)", - "sc4ppsagh", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 9)", - "sc4ppsagi", "Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 10)", - "sc4pstat", "Paystation (V2.0) (Qps) (Scorpion 4) (set 1)", - "sc4pstata", "Paystation (V2.1) (Qps) (Scorpion 4) (set 1)", - "sc4pstatb", "Paystation (V2.0) (Qps) (Scorpion 4) (set 2)", - "sc4pstatc", "Paystation (V2.1) (Qps) (Scorpion 4) (set 2)", - "sc4pstatd", "Paystation (V2.2) (Qps) (Scorpion 4)", - "sc4pstate", "Paystation (V2.3) (Qps) (Scorpion 4)", - "sc4pstatf", "Paystation (V011) (Qps) (Scorpion 4) (set 1)", - "sc4pstatg", "Paystation (V041) (Qps) (Scorpion 4) (set 1)", - "sc4pstath", "Paystation (V4.0) (Qps) (Scorpion 4) (set 1)", - "sc4pstati", "Paystation (V011) (Qps) (Scorpion 4) (set 2)", - "sc4pstatj", "Paystation (V041) (Qps) (Scorpion 4) (set 2)", - "sc4pstatm", "Paystation (V4.0) (Qps) (Scorpion 4) (set 2)", - "sc4pstatn", "Paystation (V012) (Qps) (Scorpion 4) (set 1)", - "sc4pstato", "Paystation (V042) (Qps) (Scorpion 4) (set 1)", - "sc4pstatp", "Paystation (V012) (Qps) (Scorpion 4) (set 2)", - "sc4pstatq", "Paystation (V042) (Qps) (Scorpion 4) (set 2)", - "sc4pwcrz", "Power Crazy (Bellfruit) (Scorpion 4) (set 1)", - "sc4pwcrza", "Power Crazy (Bellfruit) (Scorpion 4) (set 2)", - "sc4pwcrzb", "Power Crazy (Bellfruit) (Scorpion 4) (set 3)", - "sc4pwcrzc", "Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 1)", - "sc4pwcrzd", "Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 2)", - "sc4pwcrze", "Power Crazy (Bellfruit) (Scorpion 4) (set 4)", - "sc4pwcrzf", "Power Crazy (Bellfruit) (Scorpion 4) (set 5)", - "sc4pwcrzg", "Power Crazy (Bellfruit) (Scorpion 4) (set 6)", - "sc4pwcrzh", "Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 3)", - "sc4pwcrzi", "Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 4)", - "sc4pwrbl", "Powerball (Bellfruit) (Scorpion 4) (set 1)", - "sc4pwrbla", "Powerball (Bellfruit) (Scorpion 4) (set 2)", - "sc4pwrbq", "Power Ball (Qps) (Scorpion 4) (set 1)", - "sc4pwrbqa", "Power Ball (Qps) (Scorpion 4) (set 2)", - "sc4pwrpl", "Power Play (Mazooma) (Scorpion 4) (set 1)", - "sc4pwrpla", "Power Play (Mazooma) (Scorpion 4) (set 2)", - "sc4pwrplb", "Power Play (Mazooma) (Scorpion 4) (set 3)", - "sc4pwrplc", "Power Play (Mazooma) (Scorpion 4) (set 4)", - "sc4pwrsg", "Power Surge (Qps) (Scorpion 4) (set 1)", - "sc4pwrsga", "Power Surge (Qps) (Scorpion 4) (set 2)", - "sc4pwrsgb", "Power Surge (Qps) (Scorpion 4) (set 3)", - "sc4pwrsgc", "Power Surge (Qps) (Scorpion 4) (set 4)", - "sc4qmodo", "Quazzi Mo' Dough (Qps) (Scorpion 4) (set 1)", - "sc4qmodoa", "Quazzi Mo' Dough (Qps) (Scorpion 4) (set 2)", - "sc4qmodob", "Quazzi Mo' Dough (Qps) (Scorpion 4) (set 3)", - "sc4qmodoc", "Quazzi Mo' Dough (Qps) (Scorpion 4) (set 4)", - "sc4qmodod", "Quazzi Mo' Dough (Qps) (Scorpion 4) (set 5)", - "sc4quart", "Quaterback (Mazooma) (Scorpion 4) (set 1)", - "sc4quarta", "Quaterback (Mazooma) (Scorpion 4) (set 2)", - "sc4quartb", "Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 1)", - "sc4quartc", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 1)", - "sc4quartd", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 2)", - "sc4quarte", "Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 2)", - "sc4quartf", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 3)", - "sc4quartg", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 4)", - "sc4quarth", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 5)", - "sc4quarti", "Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 3)", - "sc4quartj", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 6)", - "sc4quartk", "Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 4)", - "sc4quartl", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 7)", - "sc4quartm", "Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 8)", - "sc4quidr", "Quid Rock (Qps) (Scorpion 4) (set 1)", - "sc4quidra", "Quid Rock (Qps) (Scorpion 4) (set 2)", - "sc4quidrb", "Quid Rock (Qps) (Scorpion 4) (set 3)", - "sc4quidrc", "Quid Rock (Qps) (Scorpion 4) (set 4)", - "sc4quidv", "Quid Vicious (Mazooma) (Scorpion 4) (set 1)", - "sc4quidva", "Quid Vicious (Mazooma) (Scorpion 4) (set 2)", - "sc4quidvb", "Quid Vicious (Mazooma) (Scorpion 4) (set 3)", - "sc4quidvc", "Quid Vicious (Mazooma) (Scorpion 4) (set 4)", - "sc4r2r", "Reel To Reel (Mazooma) (Scorpion 4) (set 1)", - "sc4r2ra", "Reel To Reel (Mazooma) (Scorpion 4) (set 2)", - "sc4r2rb", "Reel To Reel (Mazooma) (Scorpion 4) (set 3)", - "sc4r2rc", "Reel To Reel (Mazooma) (Scorpion 4) (set 4)", - "sc4r66", "Route 66 (Mazooma) (Scorpion 4)", - "sc4rbank", "Royle Banker (Bellfruit) (Scorpion 4) (set 1)", - "sc4rbanka", "Royle Banker (Bellfruit) (Scorpion 4) (set 2)", - "sc4rbankb", "Royle Banker (Bellfruit) (Scorpion 4) (set 3)", - "sc4rbankc", "Royle Banker (Bellfruit) (Scorpion 4) (set 4)", - "sc4rdrag", "Red Dragon (011) (Qps) (Scorpion 4) (set 1)", - "sc4rdraga", "Red Dragon (011) (Qps) (Scorpion 4) (set 2)", - "sc4rdragc", "Red Dragon (021) (Qps) (Scorpion 4) (set 1)", - "sc4rdragf", "Red Dragon (021) (Qps) (Scorpion 4) (set 2)", - "sc4rdrcl", "Red Dragon Club (411) (Qps) (Scorpion 4) (set 1)", - "sc4rdrcla", "Red Dragon Club (412) (Qps) (Scorpion 4)", - "sc4rdrclb", "Red Dragon Club (411) (Qps) (Scorpion 4) (set 2)", - "sc4redad", "Red Alert (Dutch) (Bellfruit) (Scorpion 4) (set 1)", - "sc4redada", "Red Alert (Dutch) (Bellfruit) (Scorpion 4) (set 2)", - "sc4redsq", "Red Square (Mazooma) (Scorpion 4) (set 1)", - "sc4redsqa", "Red Square (Mazooma) (Scorpion 4) (set 2)", - "sc4redsqb", "Red Square (Mazooma) (Scorpion 4) (set 3)", - "sc4redsqc", "Red Square (Mazooma) (Scorpion 4) (set 4)", - "sc4relcz", "Reely Crazy (Bellfruit) (Scorpion 4) (set 1)", - "sc4relcza", "Reely Crazy (Bellfruit) (Scorpion 4) (set 2)", - "sc4relczb", "Reely Crazy (Bellfruit) (Scorpion 4) (set 3)", - "sc4relczc", "Reely Crazy (Bellfruit) (Scorpion 4) (set 4)", - "sc4revo", "Revolver (Mazooma) (Scorpion 4) (set 1)", - "sc4revoa", "Revolver (Mazooma) (Scorpion 4) (set 2)", - "sc4revob", "Revolver (Mazooma) (Scorpion 4) (set 3)", - "sc4revoc", "Revolver (Mazooma) (Scorpion 4) (set 4)", - "sc4revod", "Revolver (Mazooma) (Scorpion 4) (set 5)", - "sc4revoe", "Revolver (Mazooma) (Scorpion 4) (set 6)", - "sc4rhx", "Red Hot X (Mazooma) (Scorpion 4) (set 1)", - "sc4rhxa", "Red Hot X (Mazooma) (Scorpion 4) (set 2)", - "sc4rhxb", "Red Hot X (Mazooma) (Scorpion 4) (set 9)", - "sc4rhxc", "Red Hot X (Mazooma) (Scorpion 4) (set 10)", - "sc4rhxcl", "Red Hot X Club (Mazooma) (Scorpion 4) (set 1)", - "sc4rhxcla", "Red Hot X Club (Mazooma) (Scorpion 4) (set 2)", - "sc4rhxclb", "Red Hot X Club (Mazooma) (Scorpion 4) (set 3)", - "sc4rhxclc", "Red Hot X Club (Mazooma) (Scorpion 4) (set 4)", - "sc4rhxcs", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 1)", - "sc4rhxcsa", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 2)", - "sc4rhxcsb", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 3)", - "sc4rhxcsc", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 4)", - "sc4rhxcsd", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 5)", - "sc4rhxcse", "Red Hot X Casino (Mazooma) (Scorpion 4) (set 6)", - "sc4rhxd", "Red Hot X (Mazooma) (Scorpion 4) (set 3)", - "sc4rhxe", "Red Hot X (Mazooma) (Scorpion 4) (set 4)", - "sc4rhxf", "Red Hot X (Mazooma) (Scorpion 4) (set 11)", - "sc4rhxg", "Red Hot X (Mazooma) (Scorpion 4) (set 12)", - "sc4rhxh", "Red Hot X (Mazooma) (Scorpion 4) (set 13)", - "sc4rhxi", "Red Hot X (Mazooma) (Scorpion 4) (set 14)", - "sc4rhxj", "Red Hot X (Mazooma) (Scorpion 4) (set 5)", - "sc4rhxk", "Red Hot X (Mazooma) (Scorpion 4) (set 6)", - "sc4rhxl", "Red Hot X (Mazooma) (Scorpion 4) (set 7)", - "sc4rhxm", "Red Hot X (Mazooma) (Scorpion 4) (set 8)", - "sc4rhxn", "Red Hot X (Mazooma) (Scorpion 4) (set 15)", - "sc4rhxo", "Red Hot X (Mazooma) (Scorpion 4) (set 16)", - "sc4rhxp", "Red Hot X (Mazooma) (Scorpion 4) (set 17)", - "sc4rhxq", "Red Hot X (Mazooma) (Scorpion 4) (set 18)", - "sc4rhxr", "Red Hot X (Mazooma) (Scorpion 4) (set 19)", - "sc4rhxs", "Red Hot X (Mazooma) (Scorpion 4) (set 20)", - "sc4rhxt", "Red Hot X (Mazooma) (Scorpion 4) (set 21)", - "sc4rhxu", "Red Hot X (Mazooma) (Scorpion 4) (set 22)", - "sc4rhxv", "Red Hot X (Mazooma) (Scorpion 4) (set 23)", - "sc4rhxw", "Red Hot X (Mazooma) (Scorpion 4) (set 24)", - "sc4rich", "Rich Geezer (Bellfruit) (Scorpion 4) (set 1)", - "sc4richa", "Rich Geezer (Bellfruit) (Scorpion 4) (set 2)", - "sc4richb", "Rich Geezer (Bellfruit) (Scorpion 4) (set 3)", - "sc4richc", "Rich Geezer (Bellfruit) (Scorpion 4) (set 4)", - "sc4richd", "Rich Geezer (Bellfruit) (Scorpion 4) (set 5)", - "sc4riche", "Rich Geezer (Bellfruit) (Scorpion 4) (set 6)", - "sc4richf", "Rich Geezer (Bellfruit) (Scorpion 4) (set 7)", - "sc4richg", "Rich Geezer (Bellfruit) (Scorpion 4) (set 8)", - "sc4richh", "Rich Geezer (Bellfruit) (Scorpion 4) (set 9)", - "sc4richi", "Rich Geezer (Bellfruit) (Scorpion 4) (set 10)", - "sc4richj", "Rich Geezer (Bellfruit) (Scorpion 4) (set 11)", - "sc4richk", "Rich Geezer (Bellfruit) (Scorpion 4) (set 12)", - "sc4richl", "Rich Geezer (Bellfruit) (Scorpion 4) (set 13)", - "sc4rio", "Rio Grande (Dutch) (Bellfruit) (Scorpion 4)", - "sc4rmo", "Roll Me Over Casino (Bellfruit) (Scorpion 4) (set 1)", - "sc4rmoa", "Roll Me Over Casino (Bellfruit) (Scorpion 4) (set 2)", - "sc4rogds", "Rogan Dosh (Qps) (Scorpion 4) (set 1)", - "sc4rogdsa", "Rogan Dosh (Qps) (Scorpion 4) (set 2)", - "sc4rogdsb", "Rogan Dosh (Qps) (Scorpion 4) (set 3)", - "sc4rogdsc", "Rogan Dosh (Qps) (Scorpion 4) (set 4)", - "sc4rogdsd", "Rogan Dosh (v2.0) (Qps) (Scorpion 4) (set 1)", - "sc4rogdse", "Rogan Dosh (v1.6) (Qps) (Scorpion 4)", - "sc4rogdsf", "Rogan Dosh (v2.0) (Qps) (Scorpion 4) (set 2)", - "sc4rogdsg", "Rogan Dosh (v2.1) (Qps) (Scorpion 4)", - "sc4roksc", "Rocket Science (V1.1) (Qps) (Scorpion 4) (set 1)", - "sc4roksca", "Rocket Science (011) (Qps) (Scorpion 4) (set 1)", - "sc4rokscb", "Rocket Science (V1.1) (Qps) (Scorpion 4) (set 2)", - "sc4rokscc", "Rocket Science (011) (Qps) (Scorpion 4) (set 2)", - "sc4rollo", "Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 1)", - "sc4rolloa", "Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 2)", - "sc4rollob", "Rollover Jackpot (PR7032) (Mazooma) (Scorpion 4) (set 1)", - "sc4rolloc", "Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 3)", - "sc4rollod", "Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 4)", - "sc4rolloe", "Rollover Jackpot (PR7032) (Mazooma) (Scorpion 4) (set 2)", - "sc4rollof", "Rollover Jackpot (PR7032) (Mazooma) (Scorpion 4) (set 3)", - "sc4rosts", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 1)", - "sc4rostsa", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 2)", - "sc4rostsb", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 3)", - "sc4rostsc", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 4)", - "sc4rostsd", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 5)", - "sc4rostse", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 6)", - "sc4rostsf", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 7)", - "sc4rostsg", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 8)", - "sc4rotc", "Return Of The Count (Mazooma) (Scorpion 4) (set 1)", - "sc4rotca", "Return Of The Count (Mazooma) (Scorpion 4) (set 2)", - "sc4rotcb", "Return Of The Count (Mazooma) (Scorpion 4) (set 3)", - "sc4rotcc", "Return Of The Count (Mazooma) (Scorpion 4) (set 4)", - "sc4rotcd", "Return Of The Count (Mazooma) (Scorpion 4) (set 5)", - "sc4rovrt", "Rovers Return (Mazooma) (Scorpion 4) (set 1)", - "sc4rovrta", "Rovers Return (Mazooma) (Scorpion 4) (set 2)", - "sc4rovrtb", "Rovers Return (Mazooma) (Scorpion 4) (set 3)", - "sc4rovrtc", "Rovers Return (Mazooma) (Scorpion 4) (set 4)", - "sc4rovrtd", "Rovers Return (Mazooma) (Scorpion 4) (set 5)", - "sc4rovrte", "Rovers Return (Mazooma) (Scorpion 4) (set 6)", - "sc4royle", "Royle Family (Bellfruit) (Scorpion 4) (set 1)", - "sc4roylea", "Royle Family (Bellfruit) (Scorpion 4) (set 2)", - "sc4royleb", "Royle Family (Bellfruit) (Scorpion 4) (set 3)", - "sc4roylec", "Royle Family (Bellfruit) (Scorpion 4) (set 4)", - "sc4royled", "Royle Family (Bellfruit) (Scorpion 4) (set 5)", - "sc4roylee", "Royle Family (Bellfruit) (Scorpion 4) (set 6)", - "sc4roylef", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 1)", - "sc4royleg", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 2)", - "sc4royleh", "Royle Family (Bellfruit) (Scorpion 4) (set 7)", - "sc4roylei", "Royle Family (Bellfruit) (Scorpion 4) (set 8)", - "sc4roylej", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 3)", - "sc4roylek", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 4)", - "sc4roylel", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 5)", - "sc4roylem", "Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 6)", - "sc4rt", "Rolling Thunder (Mazooma) (Scorpion 4) (set 1)", - "sc4rta", "Rolling Thunder (Mazooma) (Scorpion 4) (set 2)", - "sc4rtb", "Rolling Thunder (Mazooma) (Scorpion 4) (set 3)", - "sc4rtc", "Rolling Thunder (Mazooma) (Scorpion 4) (set 4)", - "sc4rtclb", "Rolling Thunder Club (Mazooma) (Scorpion 4) (set 1)", - "sc4rtclba", "Rolling Thunder Club (Mazooma) (Scorpion 4) (set 2)", - "sc4rtd", "Rolling Thunder (Mazooma) (Scorpion 4) (set 5)", - "sc4rttt", "Rise To The Top (Mazooma) (Scorpion 4) (set 1)", - "sc4rttta", "Rise To The Top (Mazooma) (Scorpion 4) (set 2)", - "sc4rtttb", "Rise To The Top (Mazooma) (Scorpion 4) (set 3)", - "sc4rtttc", "Rise To The Top (Mazooma) (Scorpion 4) (set 4)", - "sc4rtttd", "Rise To The Top (Mazooma) (Scorpion 4) (set 5)", - "sc4rttte", "Rise To The Top (Mazooma) (Scorpion 4) (set 6)", - "sc4rvl", "Revolution (Dutch) (Bellfruit) (Scorpion 4)", - "sc4rvlnx", "Revolution The Next (Dutch) (Bellfruit) (Scorpion 4)", - "sc4s16", "Section 16 (Mazooma) (Scorpion 4) (set 1)", - "sc4s16a", "Section 16 (Mazooma) (Scorpion 4) (set 2)", - "sc4s2k", "Sinbad 2000 (German) (Nova) (Scorpion 4)", - "sc4s6c", "Super 6 Club (65% Fixed) (Bellfruit) (Scorpion 4) (set 1)", - "sc4s6ca", "Super 6 Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4s6cb", "Super 6 Club (65% Fixed) (Bellfruit) (Scorpion 4) (set 2)", - "sc4s6cc", "Super 6 Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4s6cd", "Super 6 Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4s6ce", "Super 6 Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4sace", "Space Ace (Qps) (Scorpion 4) (set 1)", - "sc4sacea", "Space Ace (Qps) (Scorpion 4) (set 2)", - "sc4sahed", "Streaks Ahead (Qps) (Scorpion 4) (set 1)", - "sc4saheda", "Streaks Ahead (Qps) (Scorpion 4) (set 2)", - "sc4sahedb", "Streaks Ahead (Qps) (Scorpion 4) (set 3)", - "sc4sbust", "Space Buster (Qps) (Scorpion 4) (set 1)", - "sc4sbusta", "Space Buster (Qps) (Scorpion 4) (set 2)", - "sc4sdr", "Super Diamonds & Rubies (PR6921) (Bellfruit) (Scorpion 4) (set 1)", - "sc4sdra", "Super Diamonds & Rubies SP98 (PR6921) (Bellfruit) (Scorpion 4) (set 1)", - "sc4sdrb", "Super Diamonds & Rubies (PR6921) (Bellfruit) (Scorpion 4) (set 2)", - "sc4sdrc", "Super Diamonds & Rubies SP98 (PR6921) (Bellfruit) (Scorpion 4) (set 2)", - "sc4sf", "Street Fighter (Mazooma) (Scorpion 4) (set 1)", - "sc4sfa", "Street Fighter (Mazooma) (Scorpion 4) (set 2)", - "sc4sfb", "Street Fighter (Mazooma) (Scorpion 4) (set 3)", - "sc4sfc", "Street Fighter (Mazooma) (Scorpion 4) (set 4)", - "sc4sfd", "Street Fighter (Mazooma) (Scorpion 4) (set 5)", - "sc4showt", "Showtime (Bellfruit) (Scorpion 4) (set 1)", - "sc4showta", "Showtime (Bellfruit) (Scorpion 4) (set 2)", - "sc4showtb", "Showtime (Bellfruit) (Scorpion 4) (set 3)", - "sc4showtc", "Showtime (Bellfruit) (Scorpion 4) (set 4)", - "sc4showtd", "Showtime (Bellfruit) (Scorpion 4) (set 5)", - "sc4showte", "Showtime (Bellfruit) (Scorpion 4) (set 6)", - "sc4showtf", "Showtime (Bellfruit) (Scorpion 4) (set 7)", - "sc4sidsp", "Side Splitter (Mazooma) (Scorpion 4) (set 1)", - "sc4sidspa", "Side Splitter (Mazooma) (Scorpion 4) (set 2)", - "sc4sidspb", "Side Splitter (Mazooma) (Scorpion 4) (set 3)", - "sc4sidspc", "Side Splitter (Mazooma) (Scorpion 4) (set 4)", - "sc4sirpz", "Sir Prize (PR2004, SIRV) (Mazooma) (Scorpion 4)", - "sc4sirpza", "Sir Prize (PR7079, SIRP) (Mazooma) (Scorpion 4) (set 1)", - "sc4sirpzb", "Sir Prize (PR7079, SIRP) (Mazooma) (Scorpion 4) (set 2)", - "sc4slad", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 1)", - "sc4slada", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 2)", - "sc4sladb", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 3)", - "sc4sladc", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 4)", - "sc4sladd", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 5)", - "sc4slade", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 6)", - "sc4sladf", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 7)", - "sc4sladg", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 8)", - "sc4sladh", "Snakes & Ladders (Bellfruit) (Scorpion 4) (set 9)", - "sc4slc", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4slca", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 8)", - "sc4slcb", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4slcc", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4slcd", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 9)", - "sc4slce", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4slcf", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 10)", - "sc4slcg", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 11)", - "sc4slch", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 12)", - "sc4slci", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4slcj", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 13)", - "sc4slck", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 14)", - "sc4slcl", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 15)", - "sc4slcm", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4slcn", "Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 7)", - "sc4slih", "Some Like It Hot (Mazooma) (Scorpion 4) (set 1)", - "sc4sliha", "Some Like It Hot (Mazooma) (Scorpion 4) (set 2)", - "sc4slihb", "Some Like It Hot (Mazooma) (Scorpion 4) (set 3)", - "sc4slihc", "Some Like It Hot (Mazooma) (Scorpion 4) (set 4)", - "sc4slihd", "Some Like It Hot (Mazooma) (Scorpion 4) (set 5)", - "sc4slihe", "Some Like It Hot (Mazooma) (Scorpion 4) (set 6)", - "sc4smk7", "Smoking 7's (Bellfruit) (Scorpion 4)", - "sc4solgl", "Solid Gold (Bellfruit) (Scorpion 4) (set 1)", - "sc4solgla", "Solid Gold (Bellfruit) (Scorpion 4) (set 2)", - "sc4solglb", "Solid Gold (Bellfruit) (Scorpion 4) (set 3)", - "sc4solglc", "Solid Gold (Bellfruit) (Scorpion 4) (set 4)", - "sc4spark", "South Park (BFM) (Scorpion 4) (set 1)", - "sc4sparka", "South Park (BFM) (Scorpion 4) (set 2)", - "sc4sparkb", "South Park (BFM) (Scorpion 4) (set 3)", - "sc4sparkc", "South Park (BFM) (Scorpion 4) (set 4)", - "sc4sparkd", "South Park (BFM) (Scorpion 4) (set 5)", - "sc4sparke", "South Park (BFM) (Scorpion 4) (set 6)", - "sc4spice", "Spice It Up (Bellfruit) (Scorpion 4) (set 1)", - "sc4spicea", "Spice It Up (Bellfruit) (Scorpion 4) (set 2)", - "sc4spiceb", "Spice It Up (Bellfruit) (Scorpion 4) (set 3)", - "sc4spicec", "Spice It Up (Bellfruit) (Scorpion 4) (set 4)", - "sc4splgb", "Splash & Grab (Mazooma) (Scorpion 4) (set 1)", - "sc4splgba", "Splash & Grab (Mazooma) (Scorpion 4) (set 2)", - "sc4spred", "Spread Your Bet (Mazooma) (Scorpion 4)", - "sc4sprng", "Highly Sprung (Mazooma) (Scorpion 4)", - "sc4srr", "Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 1)", - "sc4srra", "Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 2)", - "sc4srrb", "Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 3)", - "sc4srrc", "Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 4)", - "sc4srrca", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 5)", - "sc4srrcaa", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 6)", - "sc4srrcab", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 7)", - "sc4srrcac", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 8)", - "sc4srrcad", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 9)", - "sc4srrcae", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 10)", - "sc4srrmz", "Shake Rattle Roll (Mazooma) (Scorpion 4) (Top Box)", - "sc4srrmza", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 1)", - "sc4srrmzb", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 2)", - "sc4srrmzc", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 3)", - "sc4srrmzd", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 1)", - "sc4srrmze", "Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 4)", - "sc4srrmzf", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 2)", - "sc4srrmzg", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 3)", - "sc4srrmzh", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 4)", - "sc4srrmzi", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 5)", - "sc4srrmzj", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 6)", - "sc4srrmzk", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 7)", - "sc4srrmzl", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 8)", - "sc4srrmzm", "Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 9)", - "sc4sslam", "Super Slam (Bellfruit) (Scorpion 4) (set 1)", - "sc4sslama", "Super Slam (Bellfruit) (Scorpion 4) (set 2)", - "sc4sstep", "Super Step (Qps) (Scorpion 4) (set 1)", - "sc4sstepa", "Super Step (Qps) (Scorpion 4) (set 2)", - "sc4sstepb", "Super Step (Qps / 21 Casino) (Scorpion 4)", - "sc4stag", "Stag Night (Bellfruit) (Scorpion 4) (set 1)", - "sc4staga", "Stag Night (Bellfruit) (Scorpion 4) (set 2)", - "sc4starp", "Starprize (Bellfruit) (Scorpion 4) (set 1)", - "sc4starpa", "Starprize (Bellfruit) (Scorpion 4) (set 2)", - "sc4starpb", "Starprize (Bellfruit) (Scorpion 4) (set 3)", - "sc4starpc", "Starprize (Bellfruit) (Scorpion 4) (set 4)", - "sc4starpd", "Starprize (Bellfruit) (Scorpion 4) (set 5)", - "sc4starpe", "Starprize (Bellfruit) (Scorpion 4) (set 6)", - "sc4starpf", "Starprize (Bellfruit) (Scorpion 4) (set 7)", - "sc4starpg", "Starprize (Bellfruit) (Scorpion 4) (set 8)", - "sc4starph", "Starprize (Bellfruit) (Scorpion 4) (set 9)", - "sc4starpi", "Starprize (Bellfruit) (Scorpion 4) (set 10)", - "sc4starpj", "Starprize (Bellfruit) (Scorpion 4) (set 11)", - "sc4starpk", "Starprize (Bellfruit) (Scorpion 4) (set 12)", - "sc4stirc", "Stir Crazy (Mazooma) (Scorpion 4) (set 1)", - "sc4stirca", "Stir Crazy (Mazooma) (Scorpion 4) (set 2)", - "sc4stircb", "Stir Crazy (Mazooma) (Scorpion 4) (set 3)", - "sc4stircc", "Stir Crazy (Mazooma) (Scorpion 4) (set 4)", - "sc4stircd", "Stir Crazy (Mazooma) (Scorpion 4) (set 5)", - "sc4stirce", "Stir Crazy (Mazooma) (Scorpion 4) (set 6)", - "sc4stircf", "Stir Crazy (Mazooma) (Scorpion 4) (set 7)", - "sc4stircg", "Stir Crazy (Mazooma) (Scorpion 4) (set 8)", - "sc4stirch", "Stir Crazy (Mazooma) (Scorpion 4) (set 9)", - "sc4stirci", "Stir Crazy (Mazooma) (Scorpion 4) (set 10)", - "sc4stircj", "Stir Crazy (Mazooma) (Scorpion 4) (set 11)", - "sc4stl", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 1)", - "sc4stla", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 2)", - "sc4stlb", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 3)", - "sc4stlc", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 4)", - "sc4stld", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 5)", - "sc4stle", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 6)", - "sc4stlf", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 7)", - "sc4stlg", "Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 8)", - "sc4strbr", "Stars 'n' Bars (PR1219) (Dutch) (Bellfruit) (Scorpion 4) (set 1)", - "sc4strbra", "Stars 'n' Bars Arcade (PR1263) (Dutch) (Bellfruit) (Scorpion 4) (set 1)", - "sc4strbrb", "Stars 'n' Bars (PR1219) (Dutch) (Bellfruit) (Scorpion 4) (set 2)", - "sc4strbrc", "Stars 'n' Bars Arcade (PR1263) (Dutch) (Bellfruit) (Scorpion 4) (set 2)", - "sc4strbrd", "Stars 'n' Bars Arcade (PR1263) (Dutch) (Bellfruit) (Scorpion 4) (set 3)", - "sc4strk", "The Streak (Mazooma) (Scorpion 4) (set 1)", - "sc4strka", "The Streak (Mazooma) (Scorpion 4) (set 2)", - "sc4strkb", "The Streak (Mazooma) (Scorpion 4) (set 3)", - "sc4strkc", "The Streak (Mazooma) (Scorpion 4) (set 4)", - "sc4strkd", "The Streak (Mazooma) (Scorpion 4) (set 5)", - "sc4strke", "The Streak (Mazooma) (Scorpion 4) (set 6)", - "sc4strkf", "The Streak (Mazooma) (Scorpion 4) (set 7)", - "sc4strkg", "The Streak (Mazooma) (Scorpion 4) (set 8)", - "sc4strkh", "The Streak (Mazooma) (Scorpion 4) (set 9)", - "sc4strki", "The Streak (Mazooma) (Scorpion 4) (set 10)", - "sc4strkj", "The Streak (Mazooma) (Scorpion 4) (set 11)", - "sc4strkk", "The Streak (Mazooma) (Scorpion 4) (set 12)", - "sc4strx", "Strike X (Bellfruit) (Scorpion 4) (set 1)", - "sc4strxa", "Strike X (Bellfruit) (Scorpion 4) (set 2)", - "sc4strxb", "Strike X (Bellfruit) (Scorpion 4) (set 3)", - "sc4strxc", "Strike X (Bellfruit) (Scorpion 4) (set 4)", - "sc4sumit", "Summit Up (Mazooma) (Scorpion 4) (set 1)", - "sc4sumita", "Summit Up (Mazooma) (Scorpion 4) (set 2)", - "sc4sumitb", "Summit Up (Mazooma) (Scorpion 4) (set 3)", - "sc4sumitc", "Summit Up (Mazooma) (Scorpion 4) (set 4)", - "sc4supst", "Super Streax (Mazooma) (Scorpion 4) (set 1)", - "sc4supsta", "Super Streax (Mazooma) (Scorpion 4) (set 2)", - "sc4sus", "Suits U Sir (Qps) (Scorpion 4) (set 1)", - "sc4susc", "Suits U Sir (Qps) (Scorpion 4) (set 2)", - "sc4suscl", "Suits U Sir Club (Qps) (Scorpion 4) (set 1)", - "sc4suscla", "Suits U Sir Club (Qps) (Scorpion 4) (set 4)", - "sc4susclb", "Suits U Sir Club (Qps) (Scorpion 4) (set 2)", - "sc4susclc", "Suits U Sir Club (Qps) (Scorpion 4) (set 3)", - "sc4susf", "Suits U Sir (Qps) (Scorpion 4) (set 3)", - "sc4susg", "Suits U Sir (Qps) (Scorpion 4) (set 4)", - "sc4sush", "Suits U Sir (Qps) (Scorpion 4) (set 5)", - "sc4susi", "Suits U Sir (Qps) (Scorpion 4) (set 6)", - "sc4susj", "Suits U Sir (Qps) (Scorpion 4) (set 7)", - "sc4susk", "Suits U Sir (Qps) (Scorpion 4) (set 8)", - "sc4swbak", "Switch Back (Mazooma) (Scorpion 4) (set 1)", - "sc4swbaka", "Switch Back (Mazooma) (Scorpion 4) (set 2)", - "sc4swbakb", "Switch Back (Mazooma) (Scorpion 4) (set 3)", - "sc4swbakc", "Switch Back (Mazooma) (Scorpion 4) (set 4)", - "sc4swywm", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 1)", - "sc4swywma", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 2)", - "sc4swywmb", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 3)", - "sc4swywmc", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 4)", - "sc4swywmd", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 5)", - "sc4swywme", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 6)", - "sc4swywmf", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 7)", - "sc4swywmg", "Spin When Your Winning (Mazooma) (Scorpion 4) (set 8)", - "sc4taekw", "Tae Kwon Dough (Qps) (Scorpion 4) (set 1)", - "sc4taekwa", "Tae Kwon Dough (Qps) (Scorpion 4) (set 2)", - "sc4taekwb", "Tae Kwon Dough (Qps) (Scorpion 4) (set 3)", - "sc4taekwc", "Tae Kwon Dough (Qps) (Scorpion 4) (set 8)", - "sc4taekwd", "Tae Kwon Dough (Qps) (Scorpion 4) (set 9)", - "sc4taekwe", "Tae Kwon Dough (Qps) (Scorpion 4) (set 10)", - "sc4taekwf", "Tae Kwon Dough (Qps) (Scorpion 4) (set 11)", - "sc4taekwg", "Tae Kwon Dough (Qps) (Scorpion 4) (set 4)", - "sc4taekwh", "Tae Kwon Dough (Qps) (Scorpion 4) (set 5)", - "sc4taekwi", "Tae Kwon Dough (Qps) (Scorpion 4) (set 6)", - "sc4taekwj", "Tae Kwon Dough (Qps) (Scorpion 4) (set 7)", - "sc4takcl", "Take Note Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4takcla", "Take Note Club 500 (Bellfruit) (Scorpion 4)", - "sc4takclb", "Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 1)", - "sc4takclc", "Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 2)", - "sc4takcld", "Take Note Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4takcle", "Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 3)", - "sc4takclf", "Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 4)", - "sc4takclg", "Take Note Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4takclh", "Take Note Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4takcli", "Take Note Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4takclj", "Take Note Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4taknt", "Take Note (Bellfruit) (Scorpion 4) (set 1)", - "sc4taknta", "Take Note (Bellfruit) (Scorpion 4) (set 2)", - "sc4tbana", "Top Banana (Bellfruit) (Scorpion 4) (set 1)", - "sc4tbanaa", "Top Banana (Bellfruit) (Scorpion 4) (set 2)", - "sc4tbox", "Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 4)", - "sc4tempt", "Temptation (Bellfruit) (Scorpion 4) (set 1)", - "sc4tempta", "Temptation (Bellfruit) (Scorpion 4) (set 2)", - "sc4temptb", "Temptation (Bellfruit) (Scorpion 4) (set 3)", - "sc4temptc", "Temptation (Bellfruit) (Scorpion 4) (set 4)", - "sc4temptd", "Temptation (Bellfruit) (Scorpion 4) (set 5)", - "sc4tempte", "Temptation (Bellfruit) (Scorpion 4) (set 6)", - "sc4temptf", "Temptation (Bellfruit) (Scorpion 4) (set 7)", - "sc4temptg", "Temptation (Bellfruit) (Scorpion 4) (set 8)", - "sc4tetri", "Tetris (Mazooma) (Scorpion 4) (set 1)", - "sc4tetria", "Tetris (Mazooma) (Scorpion 4) (set 2)", - "sc4tetrib", "Tetris (Mazooma) (Scorpion 4) (set 3)", - "sc4tetric", "Tetris (Mazooma) (Scorpion 4) (set 4)", - "sc4tetrid", "Tetris (Mazooma) (Scorpion 4) (set 5)", - "sc4tetrie", "Tetris (Mazooma) (Scorpion 4) (set 6)", - "sc4tetrif", "Tetris (Mazooma) (Scorpion 4) (set 7)", - "sc4tetrig", "Tetris (Mazooma) (Scorpion 4) (set 8)", - "sc4tetrih", "Tetris (Mazooma) (Scorpion 4) (set 9)", - "sc4tetrii", "Tetris (Mazooma) (Scorpion 4) (set 10)", - "sc4tetrij", "Tetris (Mazooma) (Scorpion 4) (set 11)", - "sc4tetrik", "Tetris (Mazooma) (Scorpion 4) (set 12)", - "sc4tfclb", "Tutti Frutti Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4tfclba", "Tutti Frutti Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4tgear", "Top Gear (Mazooma) (Scorpion 4) (set 1)", - "sc4tgeara", "Top Gear (Mazooma) (Scorpion 4) (set 2)", - "sc4tgearb", "Top Gear (Mazooma) (Scorpion 4) (set 3)", - "sc4tgearc", "Top Gear (Mazooma) (Scorpion 4) (set 4)", - "sc4tgeard", "Top Gear (Mazooma) (Scorpion 4) (set 5)", - "sc4tgeare", "Top Gear (Mazooma) (Scorpion 4) (set 6)", - "sc4tgearf", "Top Gear (Mazooma) (Scorpion 4) (set 7)", - "sc4tgearg", "Top Gear (Mazooma) (Scorpion 4) (set 8)", - "sc4tic2", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 1)", - "sc4tic2a", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 2)", - "sc4tic2b", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 3)", - "sc4tic2c", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 4)", - "sc4tic2d", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 5)", - "sc4tic2e", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 6)", - "sc4tic2f", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 7)", - "sc4tic2g", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 8)", - "sc4tic2h", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 4)", - "sc4tic2i", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 1)", - "sc4tic2j", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 2)", - "sc4tic2k", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 3)", - "sc4tic2l", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 5)", - "sc4tic2m", "Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 6)", - "sc4tic2n", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 9)", - "sc4tic2o", "Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 10)", - "sc4ticlb", "Treasure Island Club (Fixed 65%) (Bellfruit) (Scorpion 4) (set 1)", - "sc4ticlba", "Treasure Island Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4ticlbb", "Treasure Island Club (Fixed 65%) (Bellfruit) (Scorpion 4) (set 2)", - "sc4ticlbc", "Treasure Island Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4tload", "Top Loader (Mazooma) (Scorpion 4)", - "sc4tpsht", "Top Of The Shots (Mazooma) (Scorpion 4) (set 1)", - "sc4tpshta", "Top Of The Shots (Mazooma) (Scorpion 4) (set 2)", - "sc4tpshtb", "Top Of The Shots (Mazooma) (Scorpion 4) (set 3)", - "sc4tpshtc", "Top Of The Shots (Mazooma) (Scorpion 4) (set 4)", - "sc4tpshtd", "Top Of The Shots (Mazooma) (Scorpion 4) (set 5)", - "sc4tpshte", "Top Of The Shots (Mazooma) (Scorpion 4) (set 6)", - "sc4tpshtf", "Top Of The Shots (Mazooma) (Scorpion 4) (set 7)", - "sc4tpshtg", "Top Of The Shots (Mazooma) (Scorpion 4) (set 8)", - "sc4trail", "Trailblazer (Mazooma) (Scorpion 4) (set 1)", - "sc4traila", "Trailblazer (Mazooma) (Scorpion 4) (set 2)", - "sc4trailb", "Trailblazer (Mazooma) (Scorpion 4) (set 3)", - "sc4trailc", "Trailblazer (Mazooma) (Scorpion 4) (set 4)", - "sc4tri7", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 1)", - "sc4tri7a", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 2)", - "sc4tri7b", "Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 1)", - "sc4tri7c", "Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 2)", - "sc4tri7d", "Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 3)", - "sc4tri7e", "Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 4)", - "sc4tri7f", "Triple 7's (Bellfruit) (Scorpion 4) (set 1)", - "sc4tri7g", "Triple 7's (Bellfruit) (Scorpion 4) (set 2)", - "sc4tri7h", "Triple 7's (Bellfruit) (Scorpion 4) (set 3)", - "sc4tri7i", "Triple 7's (Bellfruit) (Scorpion 4) (set 4)", - "sc4tri7j", "Triple 7's (Bellfruit) (Scorpion 4) (set 5)", - "sc4tri7k", "Triple 7's (Bellfruit) (Scorpion 4) (set 6)", - "sc4tri7l", "Triple 7's (Bellfruit) (Scorpion 4) (set 7)", - "sc4tri7m", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 3)", - "sc4tri7n", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 4)", - "sc4tri7o", "Triple 7's (Bellfruit) (Scorpion 4) (set 8)", - "sc4tri7p", "Triple 7's (Bellfruit) (Scorpion 4) (set 9)", - "sc4tri7q", "Triple 7's (Bellfruit) (Scorpion 4) (set 10)", - "sc4tri7r", "Triple 7's (Bellfruit) (Scorpion 4) (set 11)", - "sc4tri7s", "Triple 7's (Bellfruit) (Scorpion 4) (set 12)", - "sc4tri7t", "Triple 7's (Bellfruit) (Scorpion 4) (set 13)", - "sc4tri7u", "Triple 7's (Bellfruit) (Scorpion 4) (set 14)", - "sc4tri7v", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 5)", - "sc4tri7w", "Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 6)", - "sc4tridn", "Trident, The (Mazooma) (Scorpion 4) (set 1)", - "sc4tridna", "Trident, The (Mazooma) (Scorpion 4) (set 2)", - "sc4trist", "Triple Streak (PR2188) (Mazooma) (Scorpion 4) (Top Box, set 1)", - "sc4trista", "Triple Streak (PR2188) (Mazooma) (Scorpion 4) (Top Box, set 2)", - "sc4tristb", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 1)", - "sc4tristc", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 2)", - "sc4tristd", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 3)", - "sc4triste", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 4)", - "sc4tristf", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 5)", - "sc4tristg", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 6)", - "sc4tristh", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 7)", - "sc4tristi", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 8)", - "sc4tristj", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 9)", - "sc4tristk", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 10)", - "sc4tristl", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 11)", - "sc4tristm", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 12)", - "sc4tristn", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 13)", - "sc4tristo", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 14)", - "sc4tristp", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 15)", - "sc4tristq", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 16)", - "sc4tristr", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 17)", - "sc4trists", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 18)", - "sc4tristt", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 19)", - "sc4tristu", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 20)", - "sc4tristv", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 21)", - "sc4tristw", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 22)", - "sc4tristx", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 23)", - "sc4tristy", "Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 24)", - "sc4tst", "Scorpion 4 Test Rig (Bellfruit) (Scorpion ?)", - "sc4ttomb", "Treasure Tomb (Bellfruit) (Scorpion 4) (set 1)", - "sc4ttomba", "Treasure Tomb (Bellfruit) (Scorpion 4) (set 2)", - "sc4ttombb", "Treasure Tomb (Bellfruit) (Scorpion 4) (set 3)", - "sc4ttombc", "Treasure Tomb (Bellfruit) (Scorpion 4) (set 4)", - "sc4ttp", "Take The Piste (Mazooma) (Scorpion 4) (set 1)", - "sc4ttpa", "Take The Piste (Mazooma) (Scorpion 4) (set 2)", - "sc4ttpb", "Take The Piste (Mazooma) (Scorpion 4) (set 3)", - "sc4ttpc", "Take The Piste (Mazooma) (Scorpion 4) (set 4)", - "sc4ttpd", "Take The Piste (Mazooma) (Scorpion 4) (set 5)", - "sc4ttpe", "Take The Piste (Mazooma) (Scorpion 4) (set 6)", - "sc4ttpf", "Take The Piste (Mazooma) (Scorpion 4) (set 7)", - "sc4ttpie", "Take The Piece (Bellfruit) (PR1714) (Scorpion 4) (set 1)", - "sc4ttpiea", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 1)", - "sc4ttpieb", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 2)", - "sc4ttpiec", "Take The Piece (Bellfruit) (PR1714) (Scorpion 4) (set 2)", - "sc4ttpied", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 3)", - "sc4ttpiee", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 4)", - "sc4ttpief", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 5)", - "sc4ttpieg", "Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 6)", - "sc4tub", "Tubular Bells (Bellfruit) (Scorpion 4) (set 1)", - "sc4tuba", "Tubular Bells (Bellfruit) (Scorpion 4) (set 2)", - "sc4tubb", "Tubular Bells (Bellfruit) (Scorpion 4) (set 3)", - "sc4tubc", "Tubular Bells (Bellfruit) (Scorpion 4) (set 4)", - "sc4twilt", "Twilight (Dutch) (Bellfruit) (Scorpion 4)", - "sc4typ", "Take Your Pick (Bellfruit) (Scorpion 4) (set 1)", - "sc4typa", "Take Your Pick (Bellfruit) (Scorpion 4) (set 2)", - "sc4typb", "Take Your Pick (Bellfruit) (Scorpion 4) (set 3)", - "sc4typc", "Take Your Pick (Bellfruit) (Scorpion 4) (set 4)", - "sc4ufg", "Up For Grabs (Mazooma) (Scorpion 4) (set 1)", - "sc4ufga", "Up For Grabs (Mazooma) (Scorpion 4) (set 2)", - "sc4ufi", "Up For It (Bellfruit) (Scorpion 4) (set 1)", - "sc4ufia", "Up For It (Bellfruit) (Scorpion 4) (set 2)", - "sc4ufib", "Up For It (Bellfruit) (Scorpion 4) (set 3)", - "sc4ufic", "Up For It (Bellfruit) (Scorpion 4) (set 4)", - "sc4ufid", "Up For It (Bellfruit) (Scorpion 4) (set 5)", - "sc4ufie", "Up For It (Bellfruit) (Scorpion 4) (set 6)", - "sc4valnv", "Valhalla (German) (PR7025, GVAL) (Nova) (Scorpion 4)", - "sc4valqp", "Valhalla (Dutch) (Qps) (Scorpion 4)", - "sc4vivam", "Viva Mexico (Bellfruit) (Scorpion 4) (set 1)", - "sc4vivama", "Viva Mexico (Bellfruit) (Scorpion 4) (set 2)", - "sc4vivamb", "Viva Mexico (Bellfruit) (Scorpion 4) (set 3)", - "sc4vivamc", "Viva Mexico (Bellfruit) (Scorpion 4) (set 4)", - "sc4vivcs", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 1)", - "sc4vivcsa", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 2)", - "sc4vivcsb", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 3)", - "sc4vivcsc", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 4)", - "sc4vivcsd", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 5)", - "sc4vivcse", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 6)", - "sc4vivcsf", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 7)", - "sc4vivcsg", "Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 8)", - "sc4vmclb", "Viva Mexico Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4vmclba", "Viva Mexico Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4vmclbb", "Viva Mexico Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4vmnv", "Viva Mexico (Nova) (Scorpion 4) (set 1)", - "sc4vmnva", "Viva Mexico (Nova) (Scorpion 4) (set 2)", - "sc4vrgcl", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 1)", - "sc4vrgcla", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 2)", - "sc4vrgclb", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 3)", - "sc4vrgclc", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 4)", - "sc4vrgcld", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 5)", - "sc4vrgcle", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 6)", - "sc4vrgclf", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 7)", - "sc4vrgclg", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 8)", - "sc4vrgclh", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 9)", - "sc4vrgcli", "Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 10)", - "sc4wadzl", "Wadzilla (Mazooma) (Scorpion 4) (set 1)", - "sc4wadzla", "Wadzilla (Mazooma) (Scorpion 4) (set 2)", - "sc4wag", "Win-A-Gain (German) (Nova) (Scorpion 4)", - "sc4waw", "Wet & Wild (Mazooma) (Scorpion 4) (set 1)", - "sc4wawa", "Wet & Wild (Mazooma) (Scorpion 4) (set 2)", - "sc4wawb", "Wet & Wild (Mazooma) (Scorpion 4) (set 3)", - "sc4wawc", "Wet & Wild (Mazooma) (Scorpion 4) (set 4)", - "sc4wawd", "Wet & Wild (Mazooma) (Scorpion 4) (set 5)", - "sc4wawe", "Wet & Wild (Mazooma) (Scorpion 4) (set 6)", - "sc4wawf", "Wet & Wild (Mazooma) (Scorpion 4) (set 7)", - "sc4wdw", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 1)", - "sc4wdwa", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 2)", - "sc4wdwb", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 3)", - "sc4wdwc", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 4)", - "sc4wdwd", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 5)", - "sc4wdwe", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 6)", - "sc4wdwf", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 7)", - "sc4wdwg", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 8)", - "sc4wdwh", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 9)", - "sc4wdwi", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 10)", - "sc4wdwj", "Who Dares Wins (Bellfruit) (Scorpion 4) (set 11)", - "sc4wernr", "Werner (German) (PR7027, GWER) (Nova) (Scorpion 4) (set 1)", - "sc4winsp", "Winning Spin Top Box (PR2526, WSPT) (Qps) (Scorpion 4) (set 1)", - "sc4winsp0", "Winning Spin Top Box (PR2526, WSPT) (Qps) (Scorpion 4) (set 2)", - "sc4winspa", "Winning Spin (Bingo V011) (Qps) (Scorpion 4) (set 1)", - "sc4winspb", "Winning Spin (V021) (Qps) (Scorpion 4) (set 1)", - "sc4winspc", "Winning Spin (V031) (Qps) (Scorpion 4) (set 1)", - "sc4winspd", "Winning Spin (Arcade V011) (Qps) (Scorpion 4) (set 1)", - "sc4winspe", "Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 1)", - "sc4winspf", "Winning Spin (V022) (Qps) (Scorpion 4) (set 1)", - "sc4winspg", "Winning Spin (V032) (Qps) (Scorpion 4) (set 1)", - "sc4winsph", "Winning Spin (Bingo V011) (Qps) (Scorpion 4) (set 2)", - "sc4winspi", "Winning Spin (V021) (Qps) (Scorpion 4) (set 2)", - "sc4winspj", "Winning Spin (V031) (Qps) (Scorpion 4) (set 2)", - "sc4winspk", "Winning Spin (Arcade V011) (Qps) (Scorpion 4) (set 2)", - "sc4winspl", "Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 2)", - "sc4winspm", "Winning Spin (V022) (Qps) (Scorpion 4) (set 2)", - "sc4winspn", "Winning Spin (V032) (Qps) (Scorpion 4) (set 2)", - "sc4winspo", "Winning Spin (Arcade V061) (Qps) (Scorpion 4) (set 1)", - "sc4winspp", "Winning Spin (Arcade V062) (Qps) (Scorpion 4) (set 1)", - "sc4winspq", "Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 3)", - "sc4winspr", "Winning Spin (V022) (Qps) (Scorpion 4) (set 3)", - "sc4winsps", "Winning Spin (V032) (Qps) (Scorpion 4) (set 3)", - "sc4winspt", "Winning Spin (Arcade V012) (Qps) (Scorpion 4) (set 1)", - "sc4winspu", "Winning Spin (Arcade V061) (Qps) (Scorpion 4) (set 2)", - "sc4winspv", "Winning Spin (Arcade V062) (Qps) (Scorpion 4) (set 2)", - "sc4winspw", "Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 4)", - "sc4winspx", "Winning Spin (V022) (Qps) (Scorpion 4) (set 4)", - "sc4winspy", "Winning Spin (V032) (Qps) (Scorpion 4) (set 4)", - "sc4winspz", "Winning Spin (Arcade V012) (Qps) (Scorpion 4) (set 2)", - "sc4winxp", "Win X-plosion (Dutch) (Bellfruit) (Scorpion 4)", - "sc4wldbn", "Wild Bunch (Bellfruit) (Scorpion 4) (set 1)", - "sc4wldbna", "Wild Bunch (Bellfruit) (Scorpion 4) (set 2)", - "sc4wldbnb", "Wild Bunch (Bellfruit) (Scorpion 4) (set 3)", - "sc4wldbnc", "Wild Bunch (Bellfruit) (Scorpion 4) (set 4)", - "sc4wldbnd", "Wild Bunch (Bellfruit) (Scorpion 4) (set 5)", - "sc4wldbne", "Wild Bunch (Bellfruit) (Scorpion 4) (set 6)", - "sc4wldbnf", "Wild Bunch (Bellfruit) (Scorpion 4) (set 7)", - "sc4wldbng", "Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 1)", - "sc4wldbnh", "Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 2)", - "sc4wldbni", "Wild Bunch (Bellfruit) (Scorpion 4) (set 8)", - "sc4wldbnj", "Wild Bunch (Bellfruit) (Scorpion 4) (set 9)", - "sc4wldbnk", "Wild Bunch (Bellfruit) (Scorpion 4) (set 10)", - "sc4wldbnl", "Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 3)", - "sc4wldbnm", "Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 4)", - "sc4wldbnn", "Wild Bunch (Bellfruit) (Scorpion 4) (set 11)", - "sc4wldbno", "Wild Bunch (Bellfruit) (Scorpion 4) (set 12)", - "sc4wldbnp", "Wild Bunch (Bellfruit) (Scorpion 4) (set 13)", - "sc4wldbnq", "Wild Bunch (Bellfruit) (Scorpion 4) (set 14)", - "sc4wldjk", "Wild Jackpots (Mazooma) (Scorpion 4) (set 1)", - "sc4wldjka", "Wild Jackpots (Mazooma) (Scorpion 4) (set 2)", - "sc4wldjkb", "Wild Jackpots (Mazooma) (Scorpion 4) (set 3)", - "sc4wldjkc", "Wild Jackpots (Mazooma) (Scorpion 4) (set 4)", - "sc4wldjkd", "Wild Jackpots (Mazooma) (Scorpion 4) (set 5)", - "sc4wldjke", "Wild Jackpots (Mazooma) (Scorpion 4) (set 6)", - "sc4wldjkf", "Wild Jackpots (Mazooma) (Scorpion 4) (set 7)", - "sc4wldjkg", "Wild Jackpots (Mazooma) (Scorpion 4) (set 8)", - "sc4wondw", "Wonder Wheel (Bellfruit) (Scorpion 4) (set 1)", - "sc4wondwa", "Wonder Wheel (Bellfruit) (Scorpion 4) (set 2)", - "sc4wrnlt", "Werner (German) (PR7027, GWER) (Nova) (Scorpion 4) (set 2)", - "sc4wspin", "Win Spinner Arcade (011) (Qps) (Scorpion 4) (set 1)", - "sc4wspinb", "Win Spinner SP Arcade (011) (Qps) (Scorpion 4) (set 1)", - "sc4wspinc", "Win Spinner Arcade (011) (Qps) (Scorpion 4) (set 2)", - "sc4wspind", "Win Spinner SP Arcade (011) (Qps) (Scorpion 4) (set 2)", - "sc4wtc", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 1)", - "sc4wtca", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 2)", - "sc4wtcb", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 3)", - "sc4wtcc", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 4)", - "sc4wtcd", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 5)", - "sc4wtce", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 6)", - "sc4wtcf", "Wild Thing Casino (Mazooma) (Scorpion 4) (set 7)", - "sc4wthng", "Wild Thing (Bellfruit) (Scorpion 4) (set 1)", - "sc4wthnga", "Wild Thing (Bellfruit) (Scorpion 4) (set 2)", - "sc4wthngb", "Wild Thing (Bellfruit) (Scorpion 4) (set 3)", - "sc4wthngc", "Wild Thing (Bellfruit) (Scorpion 4) (set 4)", - "sc4wthnm", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 1)", - "sc4wthnma", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 2)", - "sc4wthnmb", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 3)", - "sc4wthnmc", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 4)", - "sc4wthnmd", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 5)", - "sc4wthnme", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 6)", - "sc4wthnmf", "Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 7)", - "sc4wwys", "Win When Your Spinning (Bellfruit) (Scorpion 4) (set 1)", - "sc4wwysa", "Win When Your Spinning (Bellfruit) (Scorpion 4) (set 2)", - "sc4xcash", "Xtra Cash Casino (Dutch) (Bellfruit) (Scorpion 4)", - "sc4xmark", "X Marks The Spot (Bellfruit) (Scorpion 4) (set 1)", - "sc4xmarka", "X Marks The Spot (Bellfruit) (Scorpion 4) (set 2)", - "sc4ziggy", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 1)", - "sc4ziggya", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 2)", - "sc4ziggyb", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 3)", - "sc4ziggyc", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 4)", - "sc4ziggyd", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 5)", - "sc4ziggye", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 6)", - "sc4ziggyf", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 7)", - "sc4ziggyg", "Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 8)", - "sc5a40", "Around The Board In 40 Days (Mazooma) (Scorpion 5) (set 1)", - "sc5a40a", "Around The Board In 40 Days (Mazooma) (Scorpion 5) (set 2)", - "sc5adga", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 1)", - "sc5adgaa", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 2)", - "sc5adgab", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 3)", - "sc5adgac", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 4)", - "sc5adgad", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 5)", - "sc5adgae", "Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 6)", - "sc5adgtc", "Ant & Dec's Grab The Cash (Bellfruit) (Scorpion 5) (set 1)", - "sc5adgtca", "Ant & Dec's Grab The Cash (Bellfruit) (Scorpion 5) (set 2)", - "sc5adjb", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 1)", - "sc5adjba", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 2)", - "sc5adjbb", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 3)", - "sc5adjbc", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 4)", - "sc5adjbd", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 5)", - "sc5adjbe", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 6)", - "sc5adjbf", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 7)", - "sc5adjbg", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 8)", - "sc5adjbh", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 9)", - "sc5adjbi", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 10)", - "sc5adjbj", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 11)", - "sc5adjbk", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 12)", - "sc5adjbl", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 13)", - "sc5adjbm", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 14)", - "sc5adjbn", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 15)", - "sc5adjbo", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 16)", - "sc5adjbp", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 17)", - "sc5adjbq", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 18)", - "sc5adjbr", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 19)", - "sc5adjbs", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 20)", - "sc5adjbt", "Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 21)", - "sc5adsnt", "Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 5) (set 1)", - "sc5adsnta", "Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 5) (set 2)", - "sc5adwta", "Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 5) (set 1)", - "sc5adwtaa", "Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 5) (set 2)", - "sc5bantm", "Bantam Of The Opera (Mazooma) (Scorpion 5) (set 1)", - "sc5bantma", "Bantam Of The Opera (Mazooma) (Scorpion 5) (set 2)", - "sc5bar7", "Bar 7's (Bellfruit) (Scorpion 5) (set 1)", - "sc5bar7a", "Bar 7's (Bellfruit) (Scorpion 5) (set 2)", - "sc5bar7b", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 1)", - "sc5bar7c", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 2)", - "sc5bar7d", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 3)", - "sc5bar7e", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 4)", - "sc5bar7f", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 5)", - "sc5bar7g", "Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 6)", - "sc5batl", "Battleships & Cruisers (Bellfruit) (Scorpion 5) (set 1)", - "sc5batla", "Battleships & Cruisers (Bellfruit) (Scorpion 5) (set 2)", - "sc5bjob", "Bank Job (Bellfruit) (Scorpion 5) (set 1)", - "sc5bjoba", "Bank Job (Bellfruit) (Scorpion 5) (set 2)", - "sc5bjobb", "Bank Job (Bellfruit) (Scorpion 5) (set 3)", - "sc5bjobc", "Bank Job (Bellfruit) (Scorpion 5) (set 4)", - "sc5bjobd", "Bank Job (Bellfruit) (Scorpion 5) (set 5)", - "sc5bjobe", "Bank Job (Bellfruit) (Scorpion 5) (set 6)", - "sc5bjobf", "Bank Job (Bellfruit) (Scorpion 5) (set 7)", - "sc5bjobg", "Bank Job (Bellfruit) (Scorpion 5) (set 8)", - "sc5bjobh", "Bank Job (Bellfruit) (Scorpion 5) (set 9)", - "sc5bjobi", "Bank Job (Bellfruit) (Scorpion 5) (set 10)", - "sc5bkngx", "Bar King X (Mazooma) (Scorpion 5) (set 1)", - "sc5bkngxa", "Bar King X (Mazooma) (Scorpion 5) (set 2)", - "sc5bob", "Bobby Dazzler (Mazooma) (Scorpion 5) (set 1)", - "sc5boba", "Bobby Dazzler (Mazooma) (Scorpion 5) (set 2)", - "sc5bobb", "Bobby Dazzler (Mazooma) (Scorpion 5) (set 3)", - "sc5bobc", "Bobby Dazzler (Mazooma) (Scorpion 5) (set 4)", - "sc5bpb", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 1)", - "sc5bpba", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 5)", - "sc5bpbb", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 2)", - "sc5bpbc", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 6)", - "sc5bpbd", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 3)", - "sc5bpbe", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 4)", - "sc5bpbf", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 7)", - "sc5bpbg", "Bully's Prize Board (Bellfruit) (Scorpion 5) (set 8)", - "sc5bpfpb", "Bullseye Pounds For Points (Bellfruit) (Scorpion 5) (set 1)", - "sc5bpfpba", "Bullseye Pounds For Points (Bellfruit) (Scorpion 5) (set 2)", - "sc5bsp", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 1)", - "sc5bspa", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 2)", - "sc5bspb", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 3)", - "sc5bspc", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 4)", - "sc5bspd", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 5)", - "sc5bspe", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 6)", - "sc5bspf", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 7)", - "sc5bspg", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 8)", - "sc5bsph", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 9)", - "sc5bspi", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 10)", - "sc5bspj", "Bully's Star Prize (PR3012) (Bellfruit) (Scorpion 5) (set 1)", - "sc5bspk", "Bully's Star Prize (PR3012) (Bellfruit) (Scorpion 5) (set 2)", - "sc5bspl", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 13)", - "sc5bspm", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 14)", - "sc5bspn", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 15)", - "sc5bspo", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 16)", - "sc5bspp", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 17)", - "sc5bspq", "Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 18)", - "sc5btiab", "Bullseye Three In A Bed (Bellfruit) (Scorpion 5)", - "sc5btrip", "Bullseye Triple (Bellfruit) (Scorpion 5) (set 1)", - "sc5btripa", "Bullseye Triple (Bellfruit) (Scorpion 5) (set 2)", - "sc5btripb", "Bullseye Triple (Bellfruit) (Scorpion 5) (set 3)", - "sc5btripc", "Bullseye Triple (Bellfruit) (Scorpion 5) (set 4)", - "sc5bucc", "Buccaneers (Bellfruit) (Scorpion 5) (set 1)", - "sc5bucca", "Buccaneers (Bellfruit) (Scorpion 5) (set 2)", - "sc5buccb", "Buccaneers (Bellfruit) (Scorpion 5) (set 3)", - "sc5buccc", "Buccaneers (Bellfruit) (Scorpion 5) (set 4)", - "sc5buccd", "Buccaneers (Bellfruit) (Scorpion 5) (set 5)", - "sc5bucce", "Buccaneers (Bellfruit) (Scorpion 5) (set 6)", - "sc5bull", "Bullseye (Bellfruit) (Scorpion 5) (set 1)", - "sc5bull5", "Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 1)", - "sc5bull5a", "Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 2)", - "sc5bull5b", "Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 3)", - "sc5bull5c", "Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 4)", - "sc5bulla", "Bullseye (Bellfruit) (Scorpion 5) (set 2)", - "sc5bullb", "Bullseye (Bellfruit) (Scorpion 5) (set 3)", - "sc5bullc", "Bullseye (Bellfruit) (Scorpion 5) (set 4)", - "sc5bunny", "Bunny Money (Mazooma) (Scorpion 5) (set 1)", - "sc5bunnya", "Bunny Money (Mazooma) (Scorpion 5) (set 2)", - "sc5butch", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 1)", - "sc5butcha", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 2)", - "sc5butchb", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 3)", - "sc5butchc", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 4)", - "sc5butchd", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 5)", - "sc5butche", "Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 6)", - "sc5cabin", "Cabin Fever (Mazooma) (Scorpion 5) (set 1)", - "sc5cabina", "Cabin Fever (Mazooma) (Scorpion 5) (set 2)", - "sc5cabinb", "Cabin Fever (Mazooma) (Scorpion 5) (set 3)", - "sc5cabinc", "Cabin Fever (Mazooma) (Scorpion 5) (set 4)", - "sc5cari", "Caribbean Cash (Qps) (Scorpion 5) (set 1)", - "sc5caria", "Caribbean Cash (Qps) (Scorpion 5) (set 2)", - "sc5carib", "Caribbean Cash (Qps) (Scorpion 5) (set 3)", - "sc5caric", "Caribbean Cash (Qps) (Scorpion 5) (set 4)", - "sc5carid", "Caribbean Cash (Qps) (Scorpion 5) (set 5)", - "sc5carie", "Caribbean Cash (Qps) (Scorpion 5) (set 6)", - "sc5carif", "Caribbean Cash (Qps) (Scorpion 5) (set 7)", - "sc5carig", "Caribbean Cash (Qps) (Scorpion 5) (set 8)", - "sc5casxt", "Casino Xtravaganza (Mazooma) (Scorpion 5) (set 1)", - "sc5casxta", "Casino Xtravaganza (Mazooma) (Scorpion 5) (set 2)", - "sc5cbar7", "Classic Bar 7 (Mazooma) (Scorpion 5) (set 1)", - "sc5cbar7a", "Classic Bar 7 (Mazooma) (Scorpion 5) (set 2)", - "sc5cblas", "Cash Blast (Bellfruit) (Scorpion 5) (set 1)", - "sc5cblasa", "Cash Blast (Bellfruit) (Scorpion 5) (set 2)", - "sc5cbrun", "Cannonball Run (Bellfruit) (Scorpion 5) (set 1)", - "sc5cbruna", "Cannonball Run (Bellfruit) (Scorpion 5) (set 2)", - "sc5celeb", "I'm A Celebrity (Bellfruit) (Scorpion 5) (set 1)", - "sc5celeba", "I'm A Celebrity (Bellfruit) (Scorpion 5) (set 2)", - "sc5celebb", "I'm A Celebrity (Bellfruit) (Scorpion 5) (set 3)", - "sc5celebc", "I'm A Celebrity (Bellfruit) (Scorpion 5) (set 4)", - "sc5celebd", "I'm A Celebrity (Bellfruit) (Scorpion 5) (set 5)", - "sc5cfact", "Cash Factor (Bellfruit) (Scorpion 5) (set 1)", - "sc5cfacta", "Cash Factor (Bellfruit) (Scorpion 5) (set 2)", - "sc5cfcp", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 1)", - "sc5cfcpa", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 2)", - "sc5cfcpb", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 3)", - "sc5cfcpc", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 4)", - "sc5cfcpd", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 5)", - "sc5cfcpe", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 6)", - "sc5cfcpf", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 7)", - "sc5cfcpg", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 8)", - "sc5cfcph", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 9)", - "sc5cfcpi", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 10)", - "sc5cfcpj", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 11)", - "sc5cfcpk", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 12)", - "sc5cfcpl", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 13)", - "sc5cfcpm", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 14)", - "sc5cfcpn", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 15)", - "sc5cfcpo", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 16)", - "sc5cfcpp", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 17)", - "sc5cfcpq", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 18)", - "sc5cfcpr", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 19)", - "sc5cfcps", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 20)", - "sc5cfcpt", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 21)", - "sc5cfcpu", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 22)", - "sc5cfcpv", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 23)", - "sc5cfcpw", "Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 24)", - "sc5cfnc", "Crazy Fruit & Nutcase (Bellfruit) (Scorpion 5) (set 1)", - "sc5cfnca", "Crazy Fruit & Nutcase (Bellfruit) (Scorpion 5) (set 2)", - "sc5cfpt", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 1)", - "sc5cfpta", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 2)", - "sc5cfptb", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 3)", - "sc5cfptc", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 4)", - "sc5cfptd", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 5)", - "sc5cfpte", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 6)", - "sc5cfptf", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 7)", - "sc5cfptg", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 8)", - "sc5cfpth", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 9)", - "sc5cfpti", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 10)", - "sc5cfptj", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 11)", - "sc5cfptk", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 12)", - "sc5cfptl", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 13)", - "sc5cfptm", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 14)", - "sc5cfptn", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 15)", - "sc5cfpto", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 16)", - "sc5cfptp", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 17)", - "sc5cfptq", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 18)", - "sc5cfptr", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 19)", - "sc5cfpts", "Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 20)", - "sc5chain", "Chain Reaction (Bellfruit) (Scorpion 5) (set 1)", - "sc5chaina", "Chain Reaction (Bellfruit) (Scorpion 5) (set 2)", - "sc5chainb", "Chain Reaction (Bellfruit) (Scorpion 5) (set 3)", - "sc5chainc", "Chain Reaction (Bellfruit) (Scorpion 5) (set 4)", - "sc5chaind", "Chain Reaction (Bellfruit) (Scorpion 5) (set 5)", - "sc5chaine", "Chain Reaction (Bellfruit) (Scorpion 5) (set 6)", - "sc5chavi", "Chav It (Bellfruit) (Scorpion 5) (set 1)", - "sc5chavia", "Chav It (Bellfruit) (Scorpion 5) (set 2)", - "sc5chavib", "Chav It (Bellfruit) (Scorpion 5) (set 3)", - "sc5chavic", "Chav It (Bellfruit) (Scorpion 5) (set 4)", - "sc5chavid", "Chav It (Bellfruit) (Scorpion 5) (set 5)", - "sc5chavie", "Chav It (Bellfruit) (Scorpion 5) (set 6)", - "sc5chavy", "Chavy Chase (Mazooma) (Scorpion 5) (set 1)", - "sc5chavya", "Chavy Chase (Mazooma) (Scorpion 5) (set 2)", - "sc5chavyb", "Chavy Chase (Mazooma) (Scorpion 5) (set 3)", - "sc5chavyc", "Chavy Chase (Mazooma) (Scorpion 5) (set 4)", - "sc5chopc", "Chop 'n' Change (Mazooma) (Scorpion 5) (set 1)", - "sc5chopca", "Chop 'n' Change (Mazooma) (Scorpion 5) (set 2)", - "sc5cj", "Cool Jewels (Bellfruit) (Scorpion 5) (set 1)", - "sc5cja", "Cool Jewels (Bellfruit) (Scorpion 5) (set 2)", - "sc5cjb", "Cool Jewels (Bellfruit) (Scorpion 5) (set 3)", - "sc5cjc", "Cool Jewels (Bellfruit) (Scorpion 5) (set 4)", - "sc5cjd", "Cool Jewels (Bellfruit) (Scorpion 5) (set 5)", - "sc5cje", "Cool Jewels (Bellfruit) (Scorpion 5) (set 6)", - "sc5cjqps", "Crown Jewels (Z055) (QPS) (Scorpion 5) (set 1)", - "sc5cjqpsa", "Crown Jewels (Z055) (QPS) (Scorpion 5) (set 2)", - "sc5cjqpsb", "Crown Jewels (Z055) (QPS) (Scorpion 5) (set 3)", - "sc5cjqpsc", "Crown Jewels (Z055) (QPS) (Scorpion 5) (set 4)", - "sc5cknig", "Crazy Knights (Bellfruit) (Scorpion 5) (set 1)", - "sc5ckniga", "Crazy Knights (Bellfruit) (Scorpion 5) (set 2)", - "sc5cknigb", "Crazy Knights (Bellfruit) (Scorpion 5) (set 3)", - "sc5cknigc", "Crazy Knights (Bellfruit) (Scorpion 5) (set 4)", - "sc5clcas", "Cluedo Casino (Mazooma) (Scorpion 5) (set 1)", - "sc5clcasa", "Cluedo Casino (Mazooma) (Scorpion 5) (set 2)", - "sc5clnot", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 1)", - "sc5clnota", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 2)", - "sc5clnotb", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 3)", - "sc5clnotc", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 4)", - "sc5clnotd", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 5)", - "sc5clnote", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 6)", - "sc5clnotf", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 7)", - "sc5clnotg", "Cluedo Notorious (Bellfruit) (Scorpion 5) (set 8)", - "sc5clown", "Clown Around (Bellfruit) (Scorpion 5) (set 1)", - "sc5clowna", "Clown Around (Bellfruit) (Scorpion 5) (set 2)", - "sc5clownb", "Clown Around (Bellfruit) (Scorpion 5) (set 3)", - "sc5clownc", "Clown Around (Bellfruit) (Scorpion 5) (set 4)", - "sc5clownd", "Clown Around (Bellfruit) (Scorpion 5) (set 5)", - "sc5clowne", "Clown Around (Bellfruit) (Scorpion 5) (set 6)", - "sc5clu70", "Cluedo 70 (Qps) (Scorpion 5) (set 1)", - "sc5clu70a", "Cluedo 70 (Qps) (Scorpion 5) (set 2)", - "sc5clue", "Cluedo (Mazooma) (Scorpion 5) (set 1)", - "sc5cluea", "Cluedo (Mazooma) (Scorpion 5) (set 2)", - "sc5clueb", "Cluedo (Mazooma) (Scorpion 5) (set 3)", - "sc5cluec", "Cluedo (Mazooma) (Scorpion 5) (set 4)", - "sc5clus", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 1)", - "sc5clusa", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 2)", - "sc5clusb", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 3)", - "sc5clusc", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 4)", - "sc5clusd", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 5)", - "sc5cluse", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 6)", - "sc5clusf", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 7)", - "sc5clusg", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 8)", - "sc5clush", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 9)", - "sc5clusi", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 10)", - "sc5clusj", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 11)", - "sc5clusk", "Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 12)", - "sc5cmani", "Colour Mania (Bellfruit) (Scorpion 5) (set 1)", - "sc5cmania", "Colour Mania (Bellfruit) (Scorpion 5) (set 2)", - "sc5cmanib", "Colour Mania (Bellfruit) (Scorpion 5) (set 3)", - "sc5cmanic", "Colour Mania (Bellfruit) (Scorpion 5) (set 4)", - "sc5cmcob", "Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 1)", - "sc5cmcoba", "Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 2)", - "sc5cmcobb", "Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 3)", - "sc5cmcobc", "Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 4)", - "sc5colmo", "Colour Of Money (Bellfruit) (Scorpion 5) (set 1)", - "sc5colmoa", "Colour Of Money (Bellfruit) (Scorpion 5) (set 2)", - "sc5colmob", "Colour Of Money (Bellfruit) (Scorpion 5) (set 3)", - "sc5colmoc", "Colour Of Money (Bellfruit) (Scorpion 5) (set 4)", - "sc5copsr", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 1)", - "sc5copsra", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 2)", - "sc5copsrb", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 3)", - "sc5copsrc", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 4)", - "sc5copsrd", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 5)", - "sc5copsre", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 6)", - "sc5copsrf", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 7)", - "sc5copsrg", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 8)", - "sc5copsrh", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 9)", - "sc5copsri", "Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 10)", - "sc5coro", "Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 1)", - "sc5coro0", "Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 4)", - "sc5coro1", "Coronation Street Triple Bingo (V013) (Mazooma) (Scorpion 5) (set 2)", - "sc5coroa", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 1)", - "sc5corob", "Coronation Street Triple Arcade (V061) (Mazooma) (Scorpion 5) (set 1)", - "sc5coroc", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 1)", - "sc5corod", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 2)", - "sc5coroe", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 1)", - "sc5corof", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 2)", - "sc5corog", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 3)", - "sc5coroh", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 4)", - "sc5coroi", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 3)", - "sc5coroj", "Coronation Street Triple Arcade (V063) (Mazooma) (Scorpion 5) (set 1)", - "sc5corok", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 2)", - "sc5corol", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 3)", - "sc5corom", "Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 2)", - "sc5coron", "Coronation Street Triple Arcade (V061) (Mazooma) (Scorpion 5) (set 2)", - "sc5coroo", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 4)", - "sc5corop", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 5)", - "sc5coroq", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 5)", - "sc5coror", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 6)", - "sc5coros", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 7)", - "sc5corot", "Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 8)", - "sc5corou", "Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 6)", - "sc5corov", "Coronation Street Triple Arcade (V063) (Mazooma) (Scorpion 5) (set 2)", - "sc5corow", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 4)", - "sc5corox", "Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 5)", - "sc5coroy", "Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 3)", - "sc5coroz", "Coronation Street Triple Bingo (V013) (Mazooma) (Scorpion 5) (set 1)", - "sc5corst", "Coronation Street (Bellfruit) (Scorpion 5) (set 1)", - "sc5corsta", "Coronation Street (Bellfruit) (Scorpion 5) (set 2)", - "sc5corstb", "Coronation Street (Bellfruit) (Scorpion 5) (set 3)", - "sc5corstc", "Coronation Street (Bellfruit) (Scorpion 5) (set 4)", - "sc5count", "Countdown (Bellfruit) (Scorpion 5) (set 1)", - "sc5counta", "Countdown (Bellfruit) (Scorpion 5) (set 2)", - "sc5cpays", "Crazy Pays (Bellfruit) (Scorpion 5) (set 1)", - "sc5cpaysa", "Crazy Pays (Bellfruit) (Scorpion 5) (set 2)", - "sc5cpen1", "Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 1)", - "sc5cpen1a", "Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 2)", - "sc5cpen1b", "Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 3)", - "sc5cpen1c", "Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 4)", - "sc5craid", "Cash Raider (Mazooma) (Scorpion 5) (set 1)", - "sc5craida", "Cash Raider (Mazooma) (Scorpion 5) (set 2)", - "sc5crcpt", "Cops 'n' Robbers Community Party (Bellfruit) (Scorpion 5) (set 1)", - "sc5crcpta", "Cops 'n' Robbers Community Party (Bellfruit) (Scorpion 5) (set 2)", - "sc5crcptb", "Cops 'n' Robbers Community Party (Bellfruit) (Scorpion 5) (set 3)", - "sc5crnjw", "Crown Jewels (PR1608) (Bellfruit) (Scorpion 5) (set 1)", - "sc5crnjwa", "Crown Jewels (PR1608) (Bellfruit) (Scorpion 5) (set 2)", - "sc5crnjwb", "Crown Jewels (PR1608) (Bellfruit) (Scorpion 5) (set 3)", - "sc5crotr", "Cops 'n' Robbers On The Run (Bellfruit) (Scorpion 5) (set 1)", - "sc5crotra", "Cops 'n' Robbers On The Run (Bellfruit) (Scorpion 5) (set 2)", - "sc5crsc", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 1)", - "sc5crsca", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 2)", - "sc5crscb", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 3)", - "sc5crscc", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 4)", - "sc5crscd", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 5)", - "sc5crsce", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 6)", - "sc5crscf", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 7)", - "sc5crscg", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 8)", - "sc5crsch", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 9)", - "sc5crsci", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 10)", - "sc5crscj", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 11)", - "sc5crsck", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 12)", - "sc5crscl", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 13)", - "sc5crscm", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 14)", - "sc5crscn", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 15)", - "sc5crsco", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 16)", - "sc5crscp", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 17)", - "sc5crscq", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 18)", - "sc5crscr", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 19)", - "sc5crscs", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 20)", - "sc5crsct", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 21)", - "sc5crscu", "Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 22)", - "sc5crsgc", "Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 1)", - "sc5crsgca", "Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 2)", - "sc5crsgcb", "Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 3)", - "sc5crsgcc", "Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 4)", - "sc5crsgr", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 1)", - "sc5crsgra", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 2)", - "sc5crsgrb", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 3)", - "sc5crsgrc", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 4)", - "sc5crsgrd", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 5)", - "sc5crsgre", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 6)", - "sc5crsgrf", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 7)", - "sc5crsgrg", "Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 8)", - "sc5ctit", "Cash Of The Titans (Bellfruit) (Scorpion 5) (set 1)", - "sc5ctita", "Cash Of The Titans (Bellfruit) (Scorpion 5) (set 2)", - "sc5ctl", "Cop The Lot (Bellfruit) (Scorpion 5) (set 1)", - "sc5ctla", "Cop The Lot (Bellfruit) (Scorpion 5) (set 2)", - "sc5ctlb", "Cop The Lot (Bellfruit) (Scorpion 5) (set 3)", - "sc5ctlc", "Cop The Lot (Bellfruit) (Scorpion 5) (set 4)", - "sc5cvega", "Cash Vegas (Bellfruit) (Scorpion 5) (set 1)", - "sc5cvegaa", "Cash Vegas (Bellfruit) (Scorpion 5) (set 2)", - "sc5czfr", "Fruit Crazy Triple / Crazy Keys (QPS) (Scorpion 5)", - "sc5ddbbc", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 1)", - "sc5ddbbca", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 2)", - "sc5ddbbcb", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 3)", - "sc5ddbbcc", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 4)", - "sc5ddbbcd", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 5)", - "sc5ddbbce", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 6)", - "sc5ddbbcf", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 7)", - "sc5ddbbcg", "Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 8)", - "sc5ddosh", "Doctor Dosh (Bellfruit) (Scorpion 5) (set 1)", - "sc5ddosha", "Doctor Dosh (Bellfruit) (Scorpion 5) (set 2)", - "sc5ddply", "Deal Or No Deal Player's Choice (Bellfruit) (Scorpion 5) (set 1)", - "sc5ddplya", "Deal Or No Deal Player's Choice (Bellfruit) (Scorpion 5) (set 2)", - "sc5ddptg", "Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 1)", - "sc5ddptga", "Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 2)", - "sc5ddptgb", "Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 3)", - "sc5ddptgc", "Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 4)", - "sc5devil", "Devil Of A Deal (Mazooma) (Scorpion 5) (set 1)", - "sc5devila", "Devil Of A Deal (Mazooma) (Scorpion 5) (set 2)", - "sc5devilb", "Devil Of A Deal (Mazooma) (Scorpion 5) (set 3)", - "sc5devilc", "Devil Of A Deal (Mazooma) (Scorpion 5) (set 4)", - "sc5dhh", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 1)", - "sc5dhha", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 2)", - "sc5dhhb", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 3)", - "sc5dhhc", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 4)", - "sc5dhhd", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 5)", - "sc5dhhe", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 6)", - "sc5dhhf", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 7)", - "sc5dhhg", "Dough Ho Ho (Bellfruit) (Scorpion 5) (set 8)", - "sc5dmine", "Diamond Mine (Bellfruit) (Scorpion 5) (set 1)", - "sc5dminea", "Diamond Mine (Bellfruit) (Scorpion 5) (set 2)", - "sc5dmineb", "Diamond Mine (Bellfruit) (Scorpion 5) (set 3)", - "sc5dminec", "Diamond Mine (Bellfruit) (Scorpion 5) (set 4)", - "sc5dmined", "Diamond Mine (Bellfruit) (Scorpion 5) (set 5)", - "sc5dminee", "Diamond Mine (Bellfruit) (Scorpion 5) (set 6)", - "sc5dminef", "Diamond Mine (Bellfruit) (Scorpion 5) (set 7)", - "sc5dmineg", "Diamond Mine (Bellfruit) (Scorpion 5) (set 8)", - "sc5dmineh", "Diamond Mine (Bellfruit) (Scorpion 5) (set 9)", - "sc5dminei", "Diamond Mine (Bellfruit) (Scorpion 5) (set 10)", - "sc5dminej", "Diamond Mine (Bellfruit) (Scorpion 5) (set 11)", - "sc5dminek", "Diamond Mine (Bellfruit) (Scorpion 5) (set 12)", - "sc5dminel", "Diamond Mine (Bellfruit) (Scorpion 5) (set 13)", - "sc5dnd", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1)", - "sc5dnda", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndb", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndbb", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndbba", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndbbb", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndbbc", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndbbd", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndbbe", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndbbf", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndbbg", "Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndbc", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndbca", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndbcb", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndbcc", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndbcd", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndbce", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndbcf", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndbcg", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndbch", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndbci", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndbcj", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndbck", "Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndbd", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndbda", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndbdb", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndbdc", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndbdd", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndbde", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndbdf", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndbdg", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndbdh", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndbdi", "Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndbe", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndbea", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndbeb", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndbec", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndbed", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndbee", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndbef", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndbeg", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndbeh", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndbei", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndbej", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndbek", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndbel", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndbem", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndben", "Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndbl", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndbla", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndblb", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndblc", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndbld", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndble", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndblf", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndblg", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndblh", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndbli", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndblj", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndblk", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndbll", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndblm", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndbln", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndblo", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 16)", - "sc5dndblp", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 17)", - "sc5dndblq", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 18)", - "sc5dndblr", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 19)", - "sc5dndbls", "Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 20)", - "sc5dndbo", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndboa", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndbob", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndboc", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndbod", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndboe", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndbof", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndbog", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndboh", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndboi", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndboj", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndbok", "Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndbq", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 1)", - "sc5dndbqa", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 2)", - "sc5dndbqb", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 3)", - "sc5dndbqc", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 4)", - "sc5dndbqd", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 5)", - "sc5dndbqe", "Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 6)", - "sc5dndbr", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndbra", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndbrb", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndbrc", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndbrd", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndbre", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndbrf", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndbrg", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndbrh", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndbri", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndbrj", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndbrk", "Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndbrl", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndbrm", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndbrn", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndbro", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndbrp", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndbrq", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndbrr", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndbrs", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndbrt", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndbru", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 16)", - "sc5dndbrv", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 17)", - "sc5dndbrw", "Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 18)", - "sc5dndc", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndc2", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndc2a", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndc2b", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndc2c", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndc2d", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndc2e", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndc2f", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndc2g", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndc2h", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndc2i", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndc2j", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndc2k", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndc2l", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndc2m", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndc2n", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndc2o", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 16)", - "sc5dndc2p", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 17)", - "sc5dndc2q", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 18)", - "sc5dndc2r", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 19)", - "sc5dndc2s", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 20)", - "sc5dndc2t", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 21)", - "sc5dndc2u", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 22)", - "sc5dndc2v", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 23)", - "sc5dndc2w", "Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 24)", - "sc5dndc3", "Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndc3a", "Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndc3b", "Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndc3c", "Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndca", "Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndcaa", "Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndcab", "Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndcac", "Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndcad", "Deal Or No Deal The Crazy Chair Arcade (PR3362) (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndcae", "Deal Or No Deal The Crazy Chair Arcade (PR3362) (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndcb", "Deal Or No Deal Club Beat The Banker (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndcba", "Deal Or No Deal Club Beat The Banker (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndcc", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndcca", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndccb", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndccc", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndccd", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndcce", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndccf", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndccg", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndcch", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndcci", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndccj", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndcck", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndccl", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndccm", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndccn", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndcco", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 16)", - "sc5dndccp", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 17)", - "sc5dndccq", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 18)", - "sc5dndccr", "Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 19)", - "sc5dndcl", "Deal Or No Deal Club (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndcla", "Deal Or No Deal Club (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndcr", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndcra", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndcrb", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndcrc", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndcrd", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndcre", "Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndcs", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndcsa", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndcsb", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndcsc", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndcsd", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndcse", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndcsf", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndcsg", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndcsh", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndcsi", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndcsj", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndcsk", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndcsl", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndcsm", "Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndd", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5)", - "sc5dnddd", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1)", - "sc5dnddda", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndddb", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndddc", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndddd", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5)", - "sc5dnddde", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndddf", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndddg", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndddh", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndddi", "Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndde", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 1)", - "sc5dnddea", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 2)", - "sc5dnddeb", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 3)", - "sc5dnddec", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndded", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 5)", - "sc5dnddee", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 6)", - "sc5dnddef", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 7)", - "sc5dnddeg", "Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 8)", - "sc5dnddf", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 1)", - "sc5dnddfa", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 2)", - "sc5dnddfb", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 3)", - "sc5dnddfc", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 4)", - "sc5dnddfd", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 5)", - "sc5dnddfe", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 6)", - "sc5dnddff", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 7)", - "sc5dnddfg", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 8)", - "sc5dnddfh", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 9)", - "sc5dnddfi", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 10)", - "sc5dnddfj", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 11)", - "sc5dnddfk", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 12)", - "sc5dnddfl", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 13)", - "sc5dnddfm", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 14)", - "sc5dnddfn", "Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 15)", - "sc5dnddi", "Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 1)", - "sc5dnddia", "Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 2)", - "sc5dnddib", "Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 3)", - "sc5dnddic", "Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 4)", - "sc5dnddo", "Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 1)", - "sc5dnddoa", "Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 2)", - "sc5dnddob", "Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 3)", - "sc5dnddoc", "Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 4)", - "sc5dnddt", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 1)", - "sc5dnddta", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 2)", - "sc5dnddtb", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 3)", - "sc5dnddtc", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 4)", - "sc5dnddtd", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 5)", - "sc5dnddte", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 6)", - "sc5dnddtf", "Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 7)", - "sc5dnddw", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 1)", - "sc5dnddwa", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 2)", - "sc5dnddwb", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 3)", - "sc5dnddwc", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 4)", - "sc5dnddwd", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 5)", - "sc5dnddwe", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 6)", - "sc5dnddwf", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 7)", - "sc5dnddwg", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 8)", - "sc5dnddwh", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 9)", - "sc5dnddwi", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 10)", - "sc5dnddwj", "Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 11)", - "sc5dnde", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndf", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndfl", "Deal Or No Deal Feeling Lucky (PR3432) (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndfla", "Deal Or No Deal Feeling Lucky (PR3432) (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndflb", "Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndflc", "Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndfld", "Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndfle", "Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndg", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndgl", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndgla", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndglb", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndglc", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndgld", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndgle", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndglf", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndglg", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndglh", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndgli", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndglj", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndglk", "Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndgo", "Deal Or No Deal Game On (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndgoa", "Deal Or No Deal Game On (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndh", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndhf", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndhfa", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndhfb", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndhfc", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndhfd", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndhfe", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndhff", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndhfg", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndhfh", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndhfi", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndhfj", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndhfk", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndhfl", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndhfm", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndhfn", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndhfo", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 16)", - "sc5dndhfp", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 17)", - "sc5dndhfq", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 18)", - "sc5dndhfr", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 19)", - "sc5dndhfs", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 20)", - "sc5dndhft", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 21)", - "sc5dndhfu", "Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 22)", - "sc5dndi", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndj", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndk", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndl", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndld", "Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndlda", "Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndldb", "Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndldc", "Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndlp", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndlpa", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndlpb", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndlpc", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndlpd", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndlpe", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndlpf", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndlpg", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndlph", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndlpi", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndlpj", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndlpk", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndlpl", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndlpm", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndlpn", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndlpo", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 16)", - "sc5dndlpp", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 17)", - "sc5dndlpq", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 18)", - "sc5dndlpr", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 19)", - "sc5dndlps", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 20)", - "sc5dndlpt", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 21)", - "sc5dndlpu", "Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 22)", - "sc5dndm", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndmb", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndmba", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndmbb", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndmbc", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndmbd", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndmbe", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndmbf", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndmbg", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndmbh", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndmbi", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndmbj", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndmbk", "Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndmd", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndmda", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndmdb", "Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndmdc", "Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndmdd", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndmde", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndmdf", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndmdg", "Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndmdh", "Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndmdi", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndmdj", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndmdk", "Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndn", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndo", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 16)", - "sc5dndp", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 17)", - "sc5dndpa", "Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndpaa", "Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndpab", "Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndpac", "Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndpc", "Deal Or No Deal The Players Choice (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndpca", "Deal Or No Deal The Players Choice (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndpd", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndpda", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndpdb", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndpdc", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndpdd", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndpde", "Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndpg", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndpga", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndpgb", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndpgc", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndpgd", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndpge", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndpgf", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndpgg", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndpgh", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndpgi", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndpgj", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndpgk", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndpgl", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndpgm", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndpgn", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndpgo", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 16)", - "sc5dndpgp", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 17)", - "sc5dndpgq", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 18)", - "sc5dndpgr", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 19)", - "sc5dndpgs", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 20)", - "sc5dndpgt", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 21)", - "sc5dndpgu", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 22)", - "sc5dndpgv", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 23)", - "sc5dndpgw", "Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 24)", - "sc5dndpl", "Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndpla", "Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndplb", "Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndplc", "Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndq", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 18)", - "sc5dndr", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 19)", - "sc5dndra", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndraa", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndrab", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndrac", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndrad", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndrae", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndraf", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndrag", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndrah", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndrai", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndraj", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndrak", "Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndrr", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndrra", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndrrb", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndrrc", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndrrd", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndrre", "Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndrt", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndrta", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndrtb", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndrtc", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndrtd", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndrte", "Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 6)", - "sc5dnds", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 20)", - "sc5dndsi", "Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndsia", "Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndsib", "Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndsic", "Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndsid", "Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndt", "Deal Or No Deal (Bellfruit) (Scorpion 5) (set 21)", - "sc5dndtb", "Deal Or No Deal Think Big (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndtba", "Deal Or No Deal Think Big (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndtp", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndtpa", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndtpb", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndtpc", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndtpd", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndtpe", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndtpf", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndtpg", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndtph", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndtpi", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndtpj", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndtpk", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndtpl", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndtpm", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndtpn", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndtpo", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 16)", - "sc5dndtpp", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 17)", - "sc5dndtpq", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 18)", - "sc5dndtpr", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 19)", - "sc5dndtps", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 20)", - "sc5dndtpt", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 21)", - "sc5dndtpu", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 22)", - "sc5dndtpv", "Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 23)", - "sc5dndtr", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndtra", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndtrb", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndtrc", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndtrd", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndtre", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndtrf", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndtrg", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndtrh", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndtri", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndtrj", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndtrk", "Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndwb", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndwba", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndwbb", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndwbc", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndwbd", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndwbe", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndwbf", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndwbg", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndwbh", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndwbi", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndwbj", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndwbk", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndwbl", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndwbm", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndwbn", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndwbo", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 16)", - "sc5dndwbp", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 17)", - "sc5dndwbq", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 18)", - "sc5dndwbr", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 19)", - "sc5dndwbs", "Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 20)", - "sc5dndwc", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndwca", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndwcb", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndwcc", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndwcd", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndwce", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndwcf", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndwcg", "Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndwi", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndwia", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndwib", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndwic", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndwid", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndwie", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndwif", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndwig", "Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndww", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndwwa", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndwwb", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndwwc", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndwwd", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndwwe", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndwwf", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndwwg", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndwwh", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 9)", - "sc5dndwwi", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 10)", - "sc5dndwwj", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 11)", - "sc5dndwwk", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 12)", - "sc5dndwwl", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 13)", - "sc5dndwwm", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 14)", - "sc5dndwwn", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 15)", - "sc5dndwwo", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 16)", - "sc5dndwwp", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 17)", - "sc5dndwwq", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 18)", - "sc5dndwwr", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 19)", - "sc5dndwws", "Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 20)", - "sc5dndys", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 1)", - "sc5dndysa", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 2)", - "sc5dndysb", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 3)", - "sc5dndysc", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 4)", - "sc5dndysd", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 5)", - "sc5dndyse", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 6)", - "sc5dndysf", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 7)", - "sc5dndysg", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 8)", - "sc5dndysh", "Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 9)", - "sc5dough", "Dough Selecta (Bellfruit) (Scorpion 5) (set 1)", - "sc5dougha", "Dough Selecta (Bellfruit) (Scorpion 5) (set 2)", - "sc5dracp", "Drac Pack (Bellfruit) (Scorpion 5) (set 1)", - "sc5dracpa", "Drac Pack (Bellfruit) (Scorpion 5) (set 2)", - "sc5ducks", "Ducks Of Hazzard (Mazooma) (Scorpion 5)", - "sc5emmer", "Emmerdale (Mazooma) (Scorpion 5) (set 1)", - "sc5emmera", "Emmerdale (Mazooma) (Scorpion 5) (set 2)", - "sc5fast", "Fast Cash (Qps) (Scorpion 5)", - "sc5fbspn", "Fat Boy Spin (Bellfruit) (Scorpion 5) (set 1)", - "sc5fbspna", "Fat Boy Spin (Bellfruit) (Scorpion 5) (set 2)", - "sc5fdice", "Fire 'n' Dice (Bellfruit) (Scorpion 5) (set 1)", - "sc5fdicea", "Fire 'n' Dice (Bellfruit) (Scorpion 5) (set 2)", - "sc5fgbh", "Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 1)", - "sc5fgbha", "Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 2)", - "sc5fgbhb", "Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 3)", - "sc5fgbhc", "Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 4)", - "sc5fggp", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 1)", - "sc5fggpa", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 2)", - "sc5fggpb", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 3)", - "sc5fggpc", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 4)", - "sc5fggpd", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 5)", - "sc5fggpe", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 6)", - "sc5fggpf", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 7)", - "sc5fggpg", "Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 8)", - "sc5fguy", "Family Guy (Bellfruit) (Scorpion 5) (set 1)", - "sc5fguya", "Family Guy (Bellfruit) (Scorpion 5) (set 2)", - "sc5fguyb", "Family Guy (Bellfruit) (Scorpion 5) (set 3)", - "sc5fguyc", "Family Guy (Bellfruit) (Scorpion 5) (set 4)", - "sc5fguyd", "Family Guy (Bellfruit) (Scorpion 5) (set 5)", - "sc5fguye", "Family Guy (Bellfruit) (Scorpion 5) (set 6)", - "sc5fguyf", "Family Guy (Bellfruit) (Scorpion 5) (set 7)", - "sc5fguyg", "Family Guy (Bellfruit) (Scorpion 5) (set 8)", - "sc5fires", "Firestarter (Bellfruit) (Scorpion 5) (set 1)", - "sc5firesa", "Firestarter (Bellfruit) (Scorpion 5) (set 2)", - "sc5firesb", "Firestarter (Bellfruit) (Scorpion 5) (set 3)", - "sc5firesc", "Firestarter (Bellfruit) (Scorpion 5) (set 4)", - "sc5floop", "Fruit Loops (Mazooma) (Scorpion 5) (set 1)", - "sc5floopa", "Fruit Loops (Mazooma) (Scorpion 5) (set 2)", - "sc5fmj", "Full Metal Jackpot (Mazooma) (Scorpion 5) (set 1)", - "sc5fmja", "Full Metal Jackpot (Mazooma) (Scorpion 5) (set 2)", - "sc5fnclb", "Fight Night Club (Bellfruit) (Scorpion 5) (set 1)", - "sc5fnclba", "Fight Night Club (Bellfruit) (Scorpion 5) (set 2)", - "sc5fnclbb", "Fight Night Club (Bellfruit) (Scorpion 5) (set 3)", - "sc5fnclbc", "Fight Night Club (Bellfruit) (Scorpion 5) (set 4)", - "sc5fnclbd", "Fight Night Club (Bellfruit) (Scorpion 5) (set 5)", - "sc5fnclbe", "Fight Night Club (Bellfruit) (Scorpion 5) (set 6)", - "sc5frcrz", "Fruit Crazy (Mazooma) (Scorpion 5) (set 1)", - "sc5frcrza", "Fruit Crazy (Mazooma) (Scorpion 5) (set 2)", - "sc5ftcas", "Flash The Cash (Mazooma) (Scorpion 5) (set 1)", - "sc5ftcasa", "Flash The Cash (Mazooma) (Scorpion 5) (set 2)", - "sc5gball", "Golden Balls (Bellfruit) (Scorpion 5) (set 1)", - "sc5gballa", "Golden Balls (Bellfruit) (Scorpion 5) (set 2)", - "sc5gballb", "Golden Balls (Bellfruit) (Scorpion 5) (set 3)", - "sc5gballc", "Golden Balls (Bellfruit) (Scorpion 5) (set 4)", - "sc5gd", "Gold Digger (Bellfruit) (Scorpion 5) (set 1)", - "sc5gda", "Gold Digger (Bellfruit) (Scorpion 5) (set 2)", - "sc5gdclb", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 1)", - "sc5gdclba", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 2)", - "sc5gdclbb", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 3)", - "sc5gdclbc", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 4)", - "sc5gdclbd", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 5)", - "sc5gdclbe", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 6)", - "sc5gdclbf", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 7)", - "sc5gdclbg", "Gold Digger Club (Bellfruit) (Scorpion 5) (set 8)", - "sc5gdclbh", "Gold Digger (PR3509) (Bellfruit) (Scorpion 5) (set 1)", - "sc5gdclbi", "Gold Digger (PR3509) (Bellfruit) (Scorpion 5) (set 2)", - "sc5gdclbj", "Gold Digger Club (PR3429) (Bellfruit) (Scorpion 5) (set 1)", - "sc5gdclbk", "Gold Digger Club (PR3429) (Bellfruit) (Scorpion 5) (set 2)", - "sc5gdmz", "Gold Diggers (Mazooma) (Scorpion 5) (set 1)", - "sc5gdmza", "Gold Diggers (Mazooma) (Scorpion 5) (set 2)", - "sc5ggame", "Golden Game (Mazooma) (Scorpion 5) (set 1)", - "sc5ggamea", "Golden Game (Mazooma) (Scorpion 5) (set 2)", - "sc5ggameb", "Golden Game (Mazooma) (Scorpion 5) (set 3)", - "sc5ggamec", "Golden Game (Mazooma) (Scorpion 5) (set 4)", - "sc5ggamed", "Golden Game (Mazooma) (Scorpion 5) (set 5)", - "sc5ggg", "Grand Golden Game (Mazooma) (Scorpion 5) (set 1)", - "sc5ggga", "Grand Golden Game (Mazooma) (Scorpion 5) (set 3)", - "sc5gggb", "Grand Golden Game (Mazooma) (Scorpion 5) (set 2)", - "sc5gggc", "Grand Golden Game (Mazooma) (Scorpion 5) (set 4)", - "sc5glad", "Gladiator (Mazooma) (Scorpion 5) (set 1)", - "sc5glada", "Gladiator (Mazooma) (Scorpion 5) (set 2)", - "sc5gladb", "Gladiator (Mazooma) (Scorpion 5) (set 3)", - "sc5gladc", "Gladiator (Mazooma) (Scorpion 5) (set 4)", - "sc5gldfv", "Gold Fever (Bellfruit) (Scorpion 5) (set 1)", - "sc5gldfva", "Gold Fever (Bellfruit) (Scorpion 5) (set 2)", - "sc5gldfvb", "Gold Fever (Bellfruit) (Scorpion 5) (set 3)", - "sc5gldfvc", "Gold Fever (Bellfruit) (Scorpion 5) (set 4)", - "sc5gldfvd", "Gold Fever (Bellfruit) (Scorpion 5) (set 5)", - "sc5gldfve", "Gold Fever (Bellfruit) (Scorpion 5) (set 6)", - "sc5gldfvf", "Gold Fever (Bellfruit) (Scorpion 5) (set 7)", - "sc5gldfvg", "Gold Fever (Bellfruit) (Scorpion 5) (set 8)", - "sc5gldgo", "Golden Goals (Bellfruit) (Scorpion 5) (set 1)", - "sc5gldgoa", "Golden Goals (Bellfruit) (Scorpion 5) (set 2)", - "sc5gldsp", "Golden Spinner (PR2203) (Mazooma) (Scorpion 5)", - "sc5gldspa", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 1)", - "sc5gldspb", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 2)", - "sc5gldspc", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 3)", - "sc5gldspd", "Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 1)", - "sc5gldspe", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 4)", - "sc5gldspf", "Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 2)", - "sc5gldspg", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 5)", - "sc5gldsph", "Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 3)", - "sc5gldspi", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 6)", - "sc5gldspj", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 7)", - "sc5gldspk", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 8)", - "sc5gldspl", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 9)", - "sc5gldspm", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 10)", - "sc5gldspn", "Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 4)", - "sc5gldspo", "Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 11)", - "sc5gldspp", "Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 5)", - "sc5gmclb", "Grand Master Cash (Bellfruit) (Scorpion 5) (set 1)", - "sc5gmclba", "Grand Master Cash (Bellfruit) (Scorpion 5) (set 2)", - "sc5gmclbb", "Grand Master Cash (Bellfruit) (Scorpion 5) (set 3)", - "sc5gmclbc", "Grand Master Cash (Bellfruit) (Scorpion 5) (set 4)", - "sc5grq", "Get Rich Quick (Bellfruit) (Scorpion 5) (set 1)", - "sc5grqa", "Get Rich Quick (Bellfruit) (Scorpion 5) (set 2)", - "sc5grqb", "Get Rich Quick (Bellfruit) (Scorpion 5) (set 3)", - "sc5grqc", "Get Rich Quick (Bellfruit) (Scorpion 5) (set 4)", - "sc5gunp", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 1)", - "sc5gunpa", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 2)", - "sc5gunpb", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 3)", - "sc5gunpc", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 4)", - "sc5gunpd", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 5)", - "sc5gunpe", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 6)", - "sc5gunpf", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 7)", - "sc5gunpg", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 8)", - "sc5gunph", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 9)", - "sc5gunpi", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 10)", - "sc5gunpj", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 11)", - "sc5gunpk", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 12)", - "sc5gunpl", "Gunpowder Slot (Bellfruit) (Scorpion 5) (set 13)", - "sc5hapnt", "Happy Notes (Bellfruit) (Scorpion 5) (set 1)", - "sc5hapnta", "Happy Notes (Bellfruit) (Scorpion 5) (set 2)", - "sc5hapntb", "Happy Notes (Bellfruit) (Scorpion 5) (set 3)", - "sc5hapntc", "Happy Notes (Bellfruit) (Scorpion 5) (set 4)", - "sc5hapntd", "Happy Notes (Bellfruit) (Scorpion 5) (set 5)", - "sc5hapnte", "Happy Notes (Bellfruit) (Scorpion 5) (set 6)", - "sc5hapntf", "Happy Notes (Bellfruit) (Scorpion 5) (set 7)", - "sc5hapntg", "Happy Notes (Bellfruit) (Scorpion 5) (set 8)", - "sc5hellb", "Hells Bells (Bellfruit) (Scorpion 5) (set 1)", - "sc5hellba", "Hells Bells (Bellfruit) (Scorpion 5) (set 2)", - "sc5hill", "Hill Billionaire (Bellfruit) (Scorpion 5) (set 1)", - "sc5hilla", "Hill Billionaire (Bellfruit) (Scorpion 5) (set 2)", - "sc5hillb", "Hill Billionaire (Bellfruit) (Scorpion 5) (set 3)", - "sc5hirol", "High Roller (Mazooma) (Scorpion 5) (set 1)", - "sc5hirola", "High Roller (Mazooma) (Scorpion 5) (set 2)", - "sc5hirolb", "High Roller (Mazooma) (Scorpion 5) (set 3)", - "sc5hirolc", "High Roller (Mazooma) (Scorpion 5) (set 4)", - "sc5hirold", "High Roller (Mazooma) (Scorpion 5) (set 5)", - "sc5hirole", "High Roller (Mazooma) (Scorpion 5) (set 6)", - "sc5hiss", "Hissing Quid (Qps) (Scorpion 5) (set 1)", - "sc5hissa", "Hissing Quid (Qps) (Scorpion 5) (set 2)", - "sc5hissb", "Hissing Quid (Qps) (Scorpion 5) (set 3)", - "sc5hissc", "Hissing Quid (Qps) (Scorpion 5) (set 4)", - "sc5hog", "Road Hog (PR3208) (Bellfruit) (Scorpion 5) (set 3)", - "sc5hoga", "Road Hog (PR3208) (Bellfruit) (Scorpion 5) (set 4)", - "sc5hotdg", "Hot Dog (Bellfruit) (Scorpion 5) (set 1)", - "sc5hotdga", "Hot Dog (Bellfruit) (Scorpion 5) (set 2)", - "sc5hotdgb", "Hot Dog (Bellfruit) (Scorpion 5) (set 3)", - "sc5hotdgc", "Hot Dog (Bellfruit) (Scorpion 5) (set 4)", - "sc5hotdgd", "Hot Dog (Bellfruit) (Scorpion 5) (set 5)", - "sc5hotdge", "Hot Dog (Bellfruit) (Scorpion 5) (set 6)", - "sc5hotrd", "Hot Rod (Bellfruit) (Scorpion 5) (set 1)", - "sc5hotrda", "Hot Rod (Bellfruit) (Scorpion 5) (set 2)", - "sc5hotsh", "Hot Shot (Bellfruit) (Scorpion 5) (set 1)", - "sc5hotsha", "Hot Shot (Bellfruit) (Scorpion 5) (set 2)", - "sc5hotshb", "Hot Shot (Bellfruit) (Scorpion 5) (set 3)", - "sc5hotshc", "Hot Shot (Bellfruit) (Scorpion 5) (set 4)", - "sc5hotshd", "Hot Shot (Bellfruit) (Scorpion 5) (set 5)", - "sc5hotshe", "Hot Shot (Bellfruit) (Scorpion 5) (set 6)", - "sc5hotshf", "Hot Shot (Bellfruit) (Scorpion 5) (set 7)", - "sc5hotshg", "Hot Shot (Bellfruit) (Scorpion 5) (set 8)", - "sc5hotshh", "Hot Shot (Bellfruit) (Scorpion 5) (set 9)", - "sc5hotshi", "Hot Shot (Bellfruit) (Scorpion 5) (set 10)", - "sc5hotshj", "Hot Shot (Bellfruit) (Scorpion 5) (set 11)", - "sc5hotshk", "Hot Shot (Bellfruit) (Scorpion 5) (set 12)", - "sc5hotshl", "Hot Shot (Bellfruit) (Scorpion 5) (set 13)", - "sc5hotshm", "Hot Shot (Bellfruit) (Scorpion 5) (set 14)", - "sc5hotshn", "Hot Shot (Bellfruit) (Scorpion 5) (set 15)", - "sc5hotsho", "Hot Shot (Bellfruit) (Scorpion 5) (set 16)", - "sc5hotshp", "Hot Shot (Bellfruit) (Scorpion 5) (set 17)", - "sc5hotshq", "Hot Shot (Bellfruit) (Scorpion 5) (set 18)", - "sc5hotwd", "Hot Wad (Bellfruit) (Scorpion 5) (set 1)", - "sc5hotwda", "Hot Wad (Bellfruit) (Scorpion 5) (set 2)", - "sc5hotwdb", "Hot Wad (Bellfruit) (Scorpion 5) (set 3)", - "sc5hotwdc", "Hot Wad (Bellfruit) (Scorpion 5) (set 4)", - "sc5hotwdd", "Hot Wad (Bellfruit) (Scorpion 5) (set 5)", - "sc5hotwde", "Hot Wad (Bellfruit) (Scorpion 5) (set 6)", - "sc5hotwdf", "Hot Wad (Bellfruit) (Scorpion 5) (set 7)", - "sc5hotwdg", "Hot Wad (Bellfruit) (Scorpion 5) (set 8)", - "sc5hulk", "Hulk, The (Bellfruit) (Scorpion 5) (set 1)", - "sc5hulka", "Hulk, The (Bellfruit) (Scorpion 5) (set 2)", - "sc5hulkb", "Hulk, The (Bellfruit) (Scorpion 5) (set 3)", - "sc5hulkc", "Hulk, The (Bellfruit) (Scorpion 5) (set 4)", - "sc5hulkd", "Hulk, The (Bellfruit) (Scorpion 5) (set 5)", - "sc5hulke", "Hulk, The (Bellfruit) (Scorpion 5) (set 6)", - "sc5hulkf", "Hulk, The (Bellfruit) (Scorpion 5) (set 7)", - "sc5hulkg", "Hulk, The (Bellfruit) (Scorpion 5) (set 8)", - "sc5hulkh", "Hulk, The (Bellfruit) (Scorpion 5) (set 9)", - "sc5hulki", "Hulk, The (Bellfruit) (Scorpion 5) (set 10)", - "sc5iab", "It's A Bullseye (Mazooma) (Scorpion 5) (set 1)", - "sc5iaba", "It's A Bullseye (Mazooma) (Scorpion 5) (set 2)", - "sc5ijbdo", "Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 1)", - "sc5ijbdoa", "Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 2)", - "sc5ijbdob", "Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 3)", - "sc5ijbdoc", "Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 4)", - "sc5ijob", "Italian Job (Mazooma) (Scorpion 5) (set 1)", - "sc5ijoba", "Italian Job (Mazooma) (Scorpion 5) (set 2)", - "sc5ijobb", "Italian Job (Mazooma) (Scorpion 5) (set 3)", - "sc5ijobc", "Italian Job (Mazooma) (Scorpion 5) (set 4)", - "sc5ijobd", "Italian Job (Mazooma) (Scorpion 5) (set 5)", - "sc5ijobe", "Italian Job (Mazooma) (Scorpion 5) (set 6)", - "sc5ijobf", "Italian Job (Mazooma) (Scorpion 5) (set 7)", - "sc5ijobg", "Italian Job (Mazooma) (Scorpion 5) (set 8)", - "sc5ijobh", "Italian Job (Mazooma) (Scorpion 5) (set 9)", - "sc5ijobi", "Italian Job (Mazooma) (Scorpion 5) (set 10)", - "sc5inspn", "Inner Spin (Mazooma) (Scorpion 5) (set 1)", - "sc5inspna", "Inner Spin (Mazooma) (Scorpion 5) (set 2)", - "sc5jjok", "Jackpot Jokers (Bellfruit) (Scorpion 5) (set 1)", - "sc5jjoka", "Jackpot Jokers (Bellfruit) (Scorpion 5) (set 2)", - "sc5kingx", "King X (PR2077) (Mazooma) (Scorpion 5) (set 1)", - "sc5kingxa", "King X (PR2077) (Mazooma) (Scorpion 5) (set 2)", - "sc5kingxb", "King X Triple (PR2279) (Mazooma) (Scorpion 5) (set 1)", - "sc5kingxc", "King X 3P (PR2336) (Mazooma) (Scorpion 5) (set 1)", - "sc5kingxd", "King X Triple (PR2279) (Mazooma) (Scorpion 5) (set 2)", - "sc5kingxe", "King X 3P (PR2336) (Mazooma) (Scorpion 5) (set 2)", - "sc5ldvl", "Little Devil (Mazooma) (Scorpion 5) (set 1)", - "sc5ldvla", "Little Devil (Mazooma) (Scorpion 5) (set 2)", - "sc5ldvlb", "Little Devil (Mazooma) (Scorpion 5) (set 3)", - "sc5ldvlc", "Little Devil (Mazooma) (Scorpion 5) (set 4)", - "sc5ldvld", "Little Devil (Mazooma) (Scorpion 5) (set 5)", - "sc5ldvle", "Little Devil (Mazooma) (Scorpion 5) (set 6)", - "sc5lotrr", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 1)", - "sc5lotrra", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 2)", - "sc5lotrrb", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 3)", - "sc5lotrrc", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 4)", - "sc5lotrrd", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 5)", - "sc5lotrre", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 6)", - "sc5lotrrf", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 7)", - "sc5lotrrg", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 8)", - "sc5lotrrh", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 9)", - "sc5lotrri", "Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 10)", - "sc5manic", "Manic Miner (Bellfruit) (Scorpion 5) (set 1)", - "sc5manica", "Manic Miner (Bellfruit) (Scorpion 5) (set 2)", - "sc5manicb", "Manic Miner (Bellfruit) (Scorpion 5) (set 3)", - "sc5manicc", "Manic Miner (Bellfruit) (Scorpion 5) (set 4)", - "sc5manicd", "Manic Miner (Bellfruit) (Scorpion 5) (set 5)", - "sc5manice", "Manic Miner (Bellfruit) (Scorpion 5) (set 6)", - "sc5manicf", "Manic Miner (Bellfruit) (Scorpion 5) (set 7)", - "sc5manicg", "Manic Miner (Bellfruit) (Scorpion 5) (set 8)", - "sc5manich", "Manic Miner (Bellfruit) (Scorpion 5) (set 9)", - "sc5manici", "Manic Miner (Bellfruit) (Scorpion 5) (set 10)", - "sc5manicj", "Manic Miner (Bellfruit) (Scorpion 5) (set 11)", - "sc5manick", "Manic Miner (Bellfruit) (Scorpion 5) (set 12)", - "sc5manicl", "Manic Miner (Bellfruit) (Scorpion 5) (set 13)", - "sc5manicm", "Manic Miner (Bellfruit) (Scorpion 5) (set 14)", - "sc5manicn", "Manic Miner (Bellfruit) (Scorpion 5) (set 15)", - "sc5manico", "Manic Miner (Bellfruit) (Scorpion 5) (set 16)", - "sc5manicp", "Manic Miner (Bellfruit) (Scorpion 5) (set 17)", - "sc5manicq", "Manic Miner (Bellfruit) (Scorpion 5) (set 18)", - "sc5manicr", "Manic Miner (Bellfruit) (Scorpion 5) (set 19)", - "sc5manics", "Manic Miner (Bellfruit) (Scorpion 5) (set 20)", - "sc5manict", "Manic Miner (Bellfruit) (Scorpion 5) (set 21)", - "sc5manicu", "Manic Miner (Bellfruit) (Scorpion 5) (set 22)", - "sc5manicv", "Manic Miner (Bellfruit) (Scorpion 5) (set 23)", - "sc5manicw", "Manic Miner (Bellfruit) (Scorpion 5) (set 24)", - "sc5manicx", "Manic Miner (Bellfruit) (Scorpion 5) (set 25)", - "sc5manicy", "Manic Miner (Bellfruit) (Scorpion 5) (set 26)", - "sc5mcas", "Monopoly Casino (Mazooma) (Scorpion 5) (set 1)", - "sc5mcasa", "Monopoly Casino (Mazooma) (Scorpion 5) (set 3)", - "sc5mcasb", "Monopoly Casino (Mazooma) (Scorpion 5) (set 2)", - "sc5mcasc", "Monopoly Casino (Mazooma) (Scorpion 5) (set 4)", - "sc5mdm", "Monopoly Double Money (Bellfruit) (Scorpion 5) (set 1)", - "sc5mdma", "Monopoly Double Money (Bellfruit) (Scorpion 5) (set 2)", - "sc5mdmb", "Monopoly Double Money (Bellfruit) (Scorpion 5) (set 3)", - "sc5mdmc", "Monopoly Double Money (Bellfruit) (Scorpion 5) (set 4)", - "sc5mhn", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 1)", - "sc5mhna", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 2)", - "sc5mhnb", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 3)", - "sc5mhnc", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 4)", - "sc5mhnd", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 5)", - "sc5mhne", "Monopoly Here & Now (Mazooma) (Scorpion 5) (set 6)", - "sc5mhp", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 1)", - "sc5mhpa", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 2)", - "sc5mhpb", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 3)", - "sc5mhpc", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 4)", - "sc5mhpd", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 5)", - "sc5mhpe", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 6)", - "sc5mhpf", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 7)", - "sc5mhpg", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 8)", - "sc5mhph", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 9)", - "sc5mhpi", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 10)", - "sc5mhpj", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 11)", - "sc5mhpk", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 12)", - "sc5mhpl", "Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 13)", - "sc5mmad", "Money Madness (Mazooma) (Scorpion 5) (set 1)", - "sc5mmada", "Money Madness (Mazooma) (Scorpion 5) (set 2)", - "sc5mmadb", "Money Madness (Mazooma) (Scorpion 5) (set 3)", - "sc5mmadc", "Money Madness (Mazooma) (Scorpion 5) (set 4)", - "sc5mmb", "Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 1)", - "sc5mmba", "Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 2)", - "sc5mmbb", "Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 3)", - "sc5mmbc", "Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 4)", - "sc5mmbd", "Monopoly Money Bags (PR1911) (Bellfruit) (Scorpion 5) (set 1)", - "sc5mmbe", "Monopoly Money Bags (PR1911) (Bellfruit) (Scorpion 5) (set 2)", - "sc5mmm", "Mental Money Monsters (Mazooma) (Scorpion 5) (set 1)", - "sc5mmma", "Mental Money Monsters (Mazooma) (Scorpion 5) (set 2)", - "sc5mmmb", "Mental Money Monsters (Mazooma) (Scorpion 5) (set 3)", - "sc5mmmc", "Mental Money Monsters (Mazooma) (Scorpion 5) (set 4)", - "sc5mobob", "Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 1)", - "sc5moboba", "Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 2)", - "sc5mobobb", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 1)", - "sc5mobobc", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 2)", - "sc5mobobd", "Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 3)", - "sc5mobobe", "Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 4)", - "sc5mobobf", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 3)", - "sc5mobobg", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 4)", - "sc5mobobh", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 5)", - "sc5mobobi", "Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 6)", - "sc5mogta", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 1)", - "sc5mogtaa", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 2)", - "sc5mogtab", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 3)", - "sc5mogtac", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 4)", - "sc5mogtad", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 5)", - "sc5mogtae", "Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 6)", - "sc5mombc", "Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 1)", - "sc5mombca", "Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 2)", - "sc5mombcb", "Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 3)", - "sc5mombcc", "Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 4)", - "sc5momil", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 1)", - "sc5momila", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 2)", - "sc5momilb", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 3)", - "sc5momilc", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 4)", - "sc5momild", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 5)", - "sc5momile", "Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 6)", - "sc5moms", "Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 1)", - "sc5momsa", "Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 2)", - "sc5momsb", "Money Spinner (PR2395) (Qps) (Scorpion 5) (set 1)", - "sc5momsc", "Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 3)", - "sc5momsd", "Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 4)", - "sc5momse", "Money Spinner (PR2395) (Qps) (Scorpion 5) (set 2)", - "sc5monky", "Monkey Business / Toss The Monkey (Mazooma) (Scorpion 5) (set 1)", - "sc5monkya", "Monkey Business / Toss The Monkey (Mazooma) (Scorpion 5) (set 2)", - "sc5monop", "Monopoly (Mazooma) (Scorpion 5)", - "sc5monsp", "Money Spinner (Bellfruit) (Scorpion 5) (set 1)", - "sc5monspa", "Money Spinner (Bellfruit) (Scorpion 5) (set 2)", - "sc5monwa", "Monopoly Win Again (Qps) (Scorpion 5) (set 1)", - "sc5monwaa", "Monopoly Win Again (Qps) (Scorpion 5) (set 2)", - "sc5mopl", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 1)", - "sc5mopla", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 2)", - "sc5moplb", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 3)", - "sc5moplc", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 4)", - "sc5mopld", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 5)", - "sc5mople", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 6)", - "sc5moplf", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 7)", - "sc5moplg", "Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 8)", - "sc5mor2r", "Monopoly Road To Riches (Qps) (Scorpion 5) (set 1)", - "sc5mor2ra", "Monopoly Road To Riches (Qps) (Scorpion 5) (set 2)", - "sc5mowow", "Monopoly Wheel Of Wealth (Mazooma) (Scorpion 5) (set 1)", - "sc5mowowb", "Monopoly Wheel Of Wealth (Mazooma) (Scorpion 5) (set 2)", - "sc5mr2r", "Monopoly Road To Riches (PR2329) (Mazooma) (Scorpion 5) (set 1)", - "sc5mr2ra", "Monopoly Road To Riches (PR2329) (Mazooma) (Scorpion 5) (set 2)", - "sc5mr2rb", "Monopoly Road To Riches Club (PR2457) (Mazooma) (Scorpion 5)", - "sc5mrh", "Monopoly Red Hot (Mazooma) (Scorpion 5) (set 1)", - "sc5mrha", "Monopoly Red Hot (Mazooma) (Scorpion 5) (set 2)", - "sc5mrrcl", "Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 1)", - "sc5mrrcla", "Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 2)", - "sc5mrrclb", "Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 3)", - "sc5mrrclc", "Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 4)", - "sc5mww", "Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 1)", - "sc5mwwa", "Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 2)", - "sc5mwwb", "Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 3)", - "sc5mwwc", "Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 4)", - "sc5newcm", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 1)", - "sc5newcma", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 2)", - "sc5newcmb", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 3)", - "sc5newcmc", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 4)", - "sc5newcmd", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 5)", - "sc5newcme", "Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 6)", - "sc5nmare", "A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 1)", - "sc5nmarea", "A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 2)", - "sc5nmareb", "A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 3)", - "sc5nmarec", "A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 4)", - "sc5nunsb", "Nuns 'n' Roses (Bellfruit) (Scorpion 5)", - "sc5nunsm", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 1)", - "sc5nunsma", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 2)", - "sc5nunsmb", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 3)", - "sc5nunsmc", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 4)", - "sc5nunsmd", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 5)", - "sc5nunsme", "Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 6)", - "sc5parot", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 1)", - "sc5parota", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 2)", - "sc5parotb", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 3)", - "sc5parotc", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 4)", - "sc5parotd", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 5)", - "sc5parote", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 6)", - "sc5parotf", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 7)", - "sc5parotg", "Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 8)", - "sc5pilep", "Pile On The Pounds (Qps) (Scorpion 5) (set 1)", - "sc5pilepa", "Pile On The Pounds (Qps) (Scorpion 5) (set 2)", - "sc5pilepb", "Pile On The Pounds (Qps) (Scorpion 5) (set 3)", - "sc5pilepc", "Pile On The Pounds (Qps) (Scorpion 5) (set 4)", - "sc5pircl", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 1)", - "sc5pircla", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 2)", - "sc5pirclb", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 3)", - "sc5pirclc", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 4)", - "sc5pircld", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 5)", - "sc5pircle", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 6)", - "sc5pirclf", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 7)", - "sc5pirclg", "The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 8)", - "sc5plays", "28 Plays Later (Qps) (Scorpion 5) (set 1)", - "sc5playsa", "28 Plays Later (Qps) (Scorpion 5) (set 2)", - "sc5pog", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 1)", - "sc5poga", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 2)", - "sc5pogb", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 3)", - "sc5pogc", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 4)", - "sc5pogd", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 5)", - "sc5poge", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 6)", - "sc5pogf", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 7)", - "sc5pogg", "Pots Of Gold (Bellfruit) (Scorpion 5) (set 8)", - "sc5pompa", "Up Pompay (Bellfruit) (Scorpion 5) (set 1)", - "sc5pompaa", "Up Pompay (Bellfruit) (Scorpion 5) (set 2)", - "sc5pompab", "Up Pompay (Bellfruit) (Scorpion 5) (set 3)", - "sc5pony", "Pony Express (Bellfruit) (Scorpion 5) (set 1)", - "sc5ponya", "Pony Express (Bellfruit) (Scorpion 5) (set 2)", - "sc5ponyb", "Pony Express (Bellfruit) (Scorpion 5) (set 3)", - "sc5ponyc", "Pony Express (Bellfruit) (Scorpion 5) (set 4)", - "sc5ponyd", "Pony Express (Bellfruit) (Scorpion 5) (set 5)", - "sc5ponye", "Pony Express (Bellfruit) (Scorpion 5) (set 6)", - "sc5popey", "Popeye (Mazooma) (Scorpion 5) (set 1)", - "sc5popeya", "Popeye (Mazooma) (Scorpion 5) (set 2)", - "sc5popeyb", "Popeye (Mazooma) (Scorpion 5) (set 3)", - "sc5popeyc", "Popeye (Mazooma) (Scorpion 5) (set 4)", - "sc5popeyd", "Popeye (Mazooma) (Scorpion 5) (set 5)", - "sc5popeye", "Popeye (Mazooma) (Scorpion 5) (set 6)", - "sc5popeyf", "Popeye (Mazooma) (Scorpion 5) (set 7)", - "sc5popeyg", "Popeye (Mazooma) (Scorpion 5) (set 8)", - "sc5potog", "Pot Of Gold (QPS) (Scorpion 5) (set 1)", - "sc5potoga", "Pot Of Gold (QPS) (Scorpion 5) (set 2)", - "sc5potogb", "Pot Of Gold (QPS) (Scorpion 5) (set 3)", - "sc5potogc", "Pot Of Gold (QPS) (Scorpion 5) (set 4)", - "sc5potogd", "Pot Of Gold (QPS) (Scorpion 5) (set 5)", - "sc5potoge", "Pot Of Gold (QPS) (Scorpion 5) (set 6)", - "sc5potogf", "Pot Of Gold (QPS) (Scorpion 5) (set 7)", - "sc5potogg", "Pot Of Gold (QPS) (Scorpion 5) (set 8)", - "sc5potogh", "Pot Of Gold (QPS) (Scorpion 5) (set 9)", - "sc5potogi", "Pot Of Gold (QPS) (Scorpion 5) (set 10)", - "sc5potp", "Pick Of The Pack (Bellfruit) (Scorpion 5) (set 1)", - "sc5potpa", "Pick Of The Pack (Bellfruit) (Scorpion 5) (set 2)", - "sc5potsm", "Pots Of Luck (Mazooma) (Scorpion 5) (set 1)", - "sc5potsma", "Pots Of Luck (Mazooma) (Scorpion 5) (set 2)", - "sc5pp", "Pink Panther (Mazooma) (Scorpion 5) (set 1)", - "sc5ppa", "Pink Panther (Mazooma) (Scorpion 5) (set 2)", - "sc5ppb", "Pink Panther (Mazooma) (Scorpion 5) (set 3)", - "sc5ppc", "Pink Panther (Mazooma) (Scorpion 5) (set 4)", - "sc5ppcr", "Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 1)", - "sc5ppcra", "Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 5)", - "sc5ppcrb", "Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 2)", - "sc5ppcrc", "Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 3)", - "sc5ppcrd", "Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 4)", - "sc5ppctc", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 1)", - "sc5ppctca", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 2)", - "sc5ppctcb", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 3)", - "sc5ppctcc", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 4)", - "sc5ppctcd", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 5)", - "sc5ppctce", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 6)", - "sc5ppctcf", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 7)", - "sc5ppctcg", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 8)", - "sc5ppctch", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 9)", - "sc5ppctci", "Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 10)", - "sc5ppd", "Pink Panther (Mazooma) (Scorpion 5) (set 5)", - "sc5ppdym", "Pink Panther Double Your Money (Mazooma / QPS) (Scorpion 5) (set 1)", - "sc5ppdyma", "Pink Panther Double Your Money (Mazooma / QPS) (Scorpion 5) (set 2)", - "sc5ppe", "Pink Panther (Mazooma) (Scorpion 5) (set 6)", - "sc5ppf", "Pink Panther (Mazooma) (Scorpion 5) (set 7)", - "sc5ppg", "Pink Panther (Mazooma) (Scorpion 5) (set 8)", - "sc5ppsag", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 1)", - "sc5ppsaga", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 2)", - "sc5ppsagb", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 3)", - "sc5ppsagc", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 4)", - "sc5ppsagd", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 5)", - "sc5ppsage", "Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 6)", - "sc5pwrbl", "Powerball (Bellfruit) (Scorpion 5) (set 1)", - "sc5pwrbla", "Powerball (Bellfruit) (Scorpion 5) (set 2)", - "sc5pwrpl", "Power Play (Mazooma) (Scorpion 5) (set 1)", - "sc5pwrpla", "Power Play (Mazooma) (Scorpion 5) (set 2)", - "sc5qual", "Quality Streak (Bellfruit) (Scorpion 5) (set 1)", - "sc5quala", "Quality Streak (Bellfruit) (Scorpion 5) (set 2)", - "sc5qualb", "Quality Streak (Bellfruit) (Scorpion 5) (set 3)", - "sc5qualc", "Quality Streak (Bellfruit) (Scorpion 5) (set 4)", - "sc5quald", "Quality Streak (Bellfruit) (Scorpion 5) (set 5)", - "sc5quale", "Quality Streak (Bellfruit) (Scorpion 5) (set 6)", - "sc5qualf", "Quality Streak (Bellfruit) (Scorpion 5) (set 7)", - "sc5qualg", "Quality Streak (Bellfruit) (Scorpion 5) (set 8)", - "sc5qualh", "Quality Streak (Bellfruit) (Scorpion 5) (set 9)", - "sc5quali", "Quality Streak (Bellfruit) (Scorpion 5) (set 10)", - "sc5qualj", "Quality Streak (Bellfruit) (Scorpion 5) (set 11)", - "sc5qualk", "Quality Streak (Bellfruit) (Scorpion 5) (set 12)", - "sc5quall", "Quality Streak (Bellfruit) (Scorpion 5) (set 13)", - "sc5qualm", "Quality Streak (Bellfruit) (Scorpion 5) (set 14)", - "sc5quidv", "Quid Vicious (Mazooma) (Scorpion 5) (set 1)", - "sc5quidva", "Quid Vicious (Mazooma) (Scorpion 5) (set 2)", - "sc5quidvb", "Quid Vicious (Mazooma) (Scorpion 5) (set 3)", - "sc5quidvc", "Quid Vicious (Mazooma) (Scorpion 5) (set 4)", - "sc5quidvd", "Quid Vicious (Mazooma) (Scorpion 5) (set 5)", - "sc5quidve", "Quid Vicious (Mazooma) (Scorpion 5) (set 6)", - "sc5quidvf", "Quid Vicious (Mazooma) (Scorpion 5) (set 7)", - "sc5quidvg", "Quid Vicious (Mazooma) (Scorpion 5) (set 8)", - "sc5rainb", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 1)", - "sc5rainba", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 2)", - "sc5rainbb", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 3)", - "sc5rainbc", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 4)", - "sc5rainbd", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 5)", - "sc5rainbe", "Over The Rainbow (Bellfruit) (Scorpion 5) (set 6)", - "sc5redsq", "Red Square (Mazooma) (Scorpion 5) (set 1)", - "sc5redsqa", "Red Square (Mazooma) (Scorpion 5) (set 2)", - "sc5rhclb", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 1)", - "sc5rhclba", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 2)", - "sc5rhclbb", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 3)", - "sc5rhclbc", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 4)", - "sc5rhclbd", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 5)", - "sc5rhclbe", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 6)", - "sc5rhclbf", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 7)", - "sc5rhclbg", "Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 8)", - "sc5rhr", "Red Hot Reels (Qps) (Scorpion 5) (set 1)", - "sc5rhra", "Red Hot Reels (Qps) (Scorpion 5) (set 2)", - "sc5rhrb", "Red Hot Reels (Qps) (Scorpion 5) (set 3)", - "sc5rhrc", "Red Hot Reels (Qps) (Scorpion 5) (set 4)", - "sc5rhrd", "Red Hot Reels (Qps) (Scorpion 5) (set 5)", - "sc5rhre", "Red Hot Reels (Qps) (Scorpion 5) (set 6)", - "sc5rhx", "Red Hot X (Mazooma) (Scorpion 5) (set 1)", - "sc5rhxa", "Red Hot X (Mazooma) (Scorpion 5) (set 2)", - "sc5rhxb", "Red Hot X (Mazooma) (Scorpion 5) (set 3)", - "sc5rhxc", "Red Hot X (Mazooma) (Scorpion 5) (set 4)", - "sc5rhxcs", "Red Hot X Casino (Mazooma) (Scorpion 5) (set 1)", - "sc5rhxcsa", "Red Hot X Casino (Mazooma) (Scorpion 5) (set 2)", - "sc5rhxd", "Red Hot X (Mazooma) (Scorpion 5) (set 5)", - "sc5rhxe", "Red Hot X (Mazooma) (Scorpion 5) (set 6)", - "sc5rhxf", "Red Hot X (Mazooma) (Scorpion 5) (set 7)", - "sc5rosts", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 1)", - "sc5rostsa", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 2)", - "sc5rostsb", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 3)", - "sc5rostsc", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 4)", - "sc5rostsd", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 5)", - "sc5rostse", "Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 6)", - "sc5rovrt", "Rovers Return (Mazooma) (Scorpion 5) (set 1)", - "sc5rovrta", "Rovers Return (Mazooma) (Scorpion 5) (set 2)", - "sc5rovrtb", "Rovers Return (Mazooma) (Scorpion 5) (set 3)", - "sc5rovrtc", "Rovers Return (Mazooma) (Scorpion 5) (set 4)", - "sc5rssh", "Reel Spin Shady (Mazooma) (Scorpion 5) (set 1)", - "sc5rssha", "Reel Spin Shady (Mazooma) (Scorpion 5) (set 2)", - "sc5sbull", "Super Bullseye (Bellfruit) (Scorpion 5) (set 1)", - "sc5sbulla", "Super Bullseye (Bellfruit) (Scorpion 5) (set 2)", - "sc5sfts", "Shoot For The Stars (Bellfruit) (Scorpion 5) (set 1)", - "sc5sftsa", "Shoot For The Stars (Bellfruit) (Scorpion 5) (set 2)", - "sc5sftsb", "Shoot For The Stars (Bellfruit) (Scorpion 5) (set 3)", - "sc5sftsc", "Shoot For The Stars (Bellfruit) (Scorpion 5) (set 4)", - "sc5sharp", "Sharp Shooter (Voodoo) (Scorpion 5) (set 1)", - "sc5sharpa", "Sharp Shooter (Voodoo) (Scorpion 5) (set 2)", - "sc5showt", "Showtime (Bellfruit) (Scorpion 5) (set 1)", - "sc5showta", "Showtime (Bellfruit) (Scorpion 5) (set 2)", - "sc5showtb", "Showtime (Bellfruit) (Scorpion 5) (set 3)", - "sc5showtc", "Showtime (Bellfruit) (Scorpion 5) (set 4)", - "sc5showtd", "Showtime (Bellfruit) (Scorpion 5) (set 5)", - "sc5showte", "Showtime (Bellfruit) (Scorpion 5) (set 6)", - "sc5showtf", "Showtime (Bellfruit) (Scorpion 5) (set 7)", - "sc5showtg", "Showtime (Bellfruit) (Scorpion 5) (set 8)", - "sc5showth", "Showtime (Bellfruit) (Scorpion 5) (set 9)", - "sc5showti", "Showtime (Bellfruit) (Scorpion 5) (set 10)", - "sc5showtj", "Showtime (Bellfruit) (Scorpion 5) (set 11)", - "sc5showtk", "Showtime (Bellfruit) (Scorpion 5) (set 12)", - "sc5showtl", "Showtime (Bellfruit) (Scorpion 5) (set 13)", - "sc5showtm", "Showtime (Bellfruit) (Scorpion 5) (set 14)", - "sc5showtn", "Showtime (Bellfruit) (Scorpion 5) (set 15)", - "sc5showto", "Showtime (Bellfruit) (Scorpion 5) (set 16)", - "sc5showtp", "Showtime (Bellfruit) (Scorpion 5) (set 17)", - "sc5showtq", "Showtime (Bellfruit) (Scorpion 5) (set 18)", - "sc5showtr", "Showtime (Bellfruit) (Scorpion 5) (set 19)", - "sc5showts", "Showtime (Bellfruit) (Scorpion 5) (set 20)", - "sc5sitwi", "Spin It To Win It (Bellfruit) (Scorpion 5) (set 1)", - "sc5sitwia", "Spin It To Win It (Bellfruit) (Scorpion 5) (set 2)", - "sc5slad", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 1)", - "sc5slada", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 2)", - "sc5sladb", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 3)", - "sc5sladc", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 4)", - "sc5sladd", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 5)", - "sc5slade", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 6)", - "sc5sladf", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 7)", - "sc5sladg", "Snakes & Ladders (Bellfruit) (Scorpion 5) (set 8)", - "sc5sleut", "Super Sleuth (Mazooma) (Scorpion 5) (set 1)", - "sc5sleuta", "Super Sleuth (Mazooma) (Scorpion 5) (set 2)", - "sc5smtm", "Show Me The Money (Mazooma) (Scorpion 5) (set 1)", - "sc5smtma", "Show Me The Money (Mazooma) (Scorpion 5) (set 2)", - "sc5spice", "Spice It Up (Bellfruit) (Scorpion 5) (set 1)", - "sc5spicea", "Spice It Up (Bellfruit) (Scorpion 5) (set 3)", - "sc5spiceb", "Spice It Up (Bellfruit) (Scorpion 5) (set 2)", - "sc5spicec", "Spice It Up (Bellfruit) (Scorpion 5) (set 4)", - "sc5spiced", "Spice It Up (Bellfruit) (Scorpion 5) (set 5)", - "sc5spicee", "Spice It Up (Bellfruit) (Scorpion 5) (set 6)", - "sc5spnrn", "Spinning Around (Mazooma) (Scorpion 5) (set 1)", - "sc5spnrna", "Spinning Around (Mazooma) (Scorpion 5) (set 2)", - "sc5srace", "Streak Racer (Bellfruit) (Scorpion 5) (set 1)", - "sc5sracea", "Streak Racer (Bellfruit) (Scorpion 5) (set 2)", - "sc5srrcl", "Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 1)", - "sc5srrcla", "Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 2)", - "sc5srrclb", "Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 3)", - "sc5srrclc", "Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 4)", - "sc5srrqp", "Snake Rattle & Roll (Qps) (Scorpion 5) (set 1)", - "sc5srrqpa", "Snake Rattle & Roll (Qps) (Scorpion 5) (set 2)", - "sc5sumit", "Summit Up (Qps) (Scorpion 5) (set 1)", - "sc5sumita", "Summit Up (Qps) (Scorpion 5) (set 2)", - "sc5sus", "Suits U Sir (Qps) (Scorpion 5) (set 1)", - "sc5susa", "Suits U Sir (Qps) (Scorpion 5) (set 2)", - "sc5susb", "Suits U Sir (Qps) (Scorpion 5) (set 3)", - "sc5susc", "Suits U Sir (Qps) (Scorpion 5) (set 4)", - "sc5swbak", "Switch Back (Mazooma) (Scorpion 5) (set 1)", - "sc5swbaka", "Switch Back (Mazooma) (Scorpion 5) (set 2)", - "sc5swywm", "Spin When Your Winning (Mazooma) (Scorpion 5) (set 1)", - "sc5swywma", "Spin When Your Winning (Mazooma) (Scorpion 5) (set 2)", - "sc5swywmb", "Spin When Your Winning (Mazooma) (Scorpion 5) (set 3)", - "sc5swywmc", "Spin When Your Winning (Mazooma) (Scorpion 5) (set 4)", - "sc5tbox", "Top Box (Mazooma) (Scorpion 5) (set 1)", - "sc5tboxa", "Top Box (Mazooma) (Scorpion 5) (set 2)", - "sc5tboxb", "Top Box (Mazooma) (Scorpion 5) (set 3)", - "sc5tboxc", "Top Box (Mazooma) (Scorpion 5) (set 4)", - "sc5tboxd", "Top Box (Mazooma) (Scorpion 5) (set 5)", - "sc5tboxe", "Top Box (Mazooma) (Scorpion 5) (set 6)", - "sc5tboxf", "Top Box (Mazooma) (Scorpion 5) (set 7)", - "sc5tboxg", "Top Box (Mazooma) (Scorpion 5) (set 8)", - "sc5tboxh", "Top Box (Mazooma) (Scorpion 5) (set 9)", - "sc5tboxi", "Top Box (Mazooma) (Scorpion 5) (set 10)", - "sc5tboxj", "Top Box (Mazooma) (Scorpion 5) (set 11)", - "sc5tboxk", "Top Box (Mazooma) (Scorpion 5) (set 12)", - "sc5tboxl", "Top Box (Mazooma) (Scorpion 5) (set 13)", - "sc5tboxm", "Top Box (Mazooma) (Scorpion 5) (set 14)", - "sc5tboxn", "Top Box (Mazooma) (Scorpion 5) (set 15)", - "sc5tboxo", "Top Box (Mazooma) (Scorpion 5) (set 16)", - "sc5tboxp", "Top Box (Mazooma) (Scorpion 5) (set 17)", - "sc5tboxq", "Top Box (Mazooma) (Scorpion 5) (set 18)", - "sc5tpsht", "Top Of The Shots (Mazooma) (Scorpion 5) (set 1)", - "sc5tpshta", "Top Of The Shots (Mazooma) (Scorpion 5) (set 2)", - "sc5tpshtb", "Top Of The Shots (Mazooma) (Scorpion 5) (set 3)", - "sc5tpshtc", "Top Of The Shots (Mazooma) (Scorpion 5) (set 4)", - "sc5tpshtd", "Top Of The Shots (Mazooma) (Scorpion 5) (set 5)", - "sc5trail", "Trailblazer (Mazooma) (Scorpion 5) (set 1)", - "sc5traila", "Trailblazer (Mazooma) (Scorpion 5) (set 2)", - "sc5tsmp", "Trick Shot Multi Player (Bellfruit) (Scorpion 5) (set 1)", - "sc5tsmpa", "Trick Shot Multi Player (Bellfruit) (Scorpion 5) (set 2)", - "sc5ttpie", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 1)", - "sc5ttpiea", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 2)", - "sc5ttpieb", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 3)", - "sc5ttpiec", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 4)", - "sc5ttpied", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 5)", - "sc5ttpiee", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 6)", - "sc5ttpief", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 7)", - "sc5ttpieg", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 8)", - "sc5ttpieh", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 9)", - "sc5ttpiei", "Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 10)", - "sc5typ", "Take Your Pick (Bellfruit) (Scorpion 5) (set 1)", - "sc5typa", "Take Your Pick (Bellfruit) (Scorpion 5) (set 2)", - "sc5typb", "Take Your Pick (Bellfruit) (Scorpion 5) (set 3)", - "sc5typc", "Take Your Pick (Bellfruit) (Scorpion 5) (set 4)", - "sc5vamp", "Vampire Payer (Qps) (Scorpion 5) (set 1)", - "sc5vampa", "Vampire Payer (Qps) (Scorpion 5) (set 2)", - "sc5viper", "Viper Active (Bellfruit) (Scorpion 5) (set 1)", - "sc5vipera", "Viper Active (Bellfruit) (Scorpion 5) (set 2)", - "sc5vivam", "Viva Mexico (Bellfruit) (Scorpion 5) (set 1)", - "sc5vivama", "Viva Mexico (Bellfruit) (Scorpion 5) (set 2)", - "sc5viz", "Viz (Qps) (Scorpion 5) (set 1)", - "sc5viza", "Viz (Qps) (Scorpion 5) (set 2)", - "sc5vizb", "Viz (Qps) (Scorpion 5) (set 3)", - "sc5vizc", "Viz (Qps) (Scorpion 5) (set 4)", - "sc5wacky", "Wacky Racers (Bellfruit) (Scorpion 5) (set 1)", - "sc5wackya", "Wacky Racers (Bellfruit) (Scorpion 5) (set 2)", - "sc5wackyb", "Wacky Racers (Bellfruit) (Scorpion 5) (set 3)", - "sc5wackyc", "Wacky Racers (Bellfruit) (Scorpion 5) (set 4)", - "sc5wca", "Win Can Alley (Qps) (Scorpion 5) (set 1)", - "sc5wcaa", "Win Can Alley (Qps) (Scorpion 5) (set 2)", - "sc5wcab", "Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 1)", - "sc5wcac", "Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 1)", - "sc5wcad", "Win Can Alley (Qps) (Scorpion 5) (set 3)", - "sc5wcae", "Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 2)", - "sc5wcaf", "Win Can Alley (Qps) (Scorpion 5) (set 4)", - "sc5wcag", "Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 2)", - "sc5wcah", "Win Can Alley (Qps) (Scorpion 5) (set 5)", - "sc5wcai", "Win Can Alley (Qps) (Scorpion 5) (set 6)", - "sc5wcaj", "Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 3)", - "sc5wcak", "Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 3)", - "sc5wcal", "Win Can Alley (Qps) (Scorpion 5) (set 7)", - "sc5wcam", "Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 4)", - "sc5wcan", "Win Can Alley (Qps) (Scorpion 5) (set 8)", - "sc5wcao", "Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 4)", - "sc5wild", "Wild Reels (Mazooma) (Scorpion 5) (set 1)", - "sc5wilda", "Wild Reels (Mazooma) (Scorpion 5) (set 2)", - "sc5wldjk", "Wild Jackpots (Mazooma) (Scorpion 5) (set 1)", - "sc5wldjka", "Wild Jackpots (Mazooma) (Scorpion 5) (set 2)", - "sc5wok", "Wok n' Roll (Bellfruit) (Scorpion 5) (set 1)", - "sc5woka", "Wok n' Roll (Bellfruit) (Scorpion 5) (set 2)", - "sc5wotw", "War Of The Wads (Mazooma) (Scorpion 5) (set 1)", - "sc5wotwa", "War Of The Wads (Mazooma) (Scorpion 5) (set 2)", - "sc_14", "Safe Cracker (1.4)", - "sc_17", "Safe Cracker (1.7)", - "sc_17n", "Safe Cracker (1.7N)", - "sc_18", "Safe Cracker (1.8)", - "sc_18n", "Safe Cracker (1.8N)", - "sc_18s2", "Safe Cracker (1.8 alternate sound)", - "scandal", "Scandal Mahjong (Japan 890213)", - "scandalm", "Scandal Mahjong [BET] (Japan 890217)", - "scessjoe", "Success Joe (World)", - "scfinals", "Super Cup Finals (Ver 2.2O 1994/01/13)", - "scfinalso", "Super Cup Finals (Ver 2.1O 1993/11/19)", - "scg06nt", "Sega Club Golf 2006 Next Tours (Rev A) (GDX-0018A)", - "schamp", "Sonic Championship (USA)", - "schaser", "Space Chaser (set 1)", - "schasera", "Space Chaser (set 2)", - "schaserb", "Space Chaser (set 3)", - "schaserc", "Space Chaser (set 4)", - "schasercv", "Space Chaser (CV version - set 1)", - "scherrym", "Super Cherry Master", - "schery97", "Skill Cherry '97 (ver. sc3.52)", - "schery97a", "Skill Cherry '97 (ver. sc3.52c4)", - "schmeisr", "Schmeiser Robo (Japan)", - "sci", "Special Criminal Investigation (World set 1)", - "scia", "Special Criminal Investigation (World set 2)", - "scij", "Special Criminal Investigation (Japan)", - "scin", "Super Special Criminal Investigation (Negro Torino hack)", - "scion", "Scion", - "scionc", "Scion (Cinematronics)", - "sciu", "Special Criminal Investigation (US)", - "scobra", "Super Cobra", - "scobrab", "Super Cobra (bootleg)", - "scobras", "Super Cobra (Stern Electronics)", - "scobrase", "Super Cobra (Sega)", - "scontra", "Super Contra", - "scontraj", "Super Contra (Japan)", - "scorpion", "Scorpion (set 1)", - "scorpiona", "Scorpion (set 2)", - "scorpionb", "Scorpion (set 3)", - "scorpionmc", "Scorpion (Moon Cresta hardware)", - "scotrsht", "Scooter Shooter", - "scptour", "Smash Court Pro Tournament (SCP1)", - "scrabble", "Scrabble (rev. F)", - "scrabbled", "Scrabble (rev. F) (Protocol)", - "scram_tp", "Scramble (Pinball)", - "scramb2", "Scramble (bootleg)", - "scramblb", "Scramble (bootleg on Galaxian hardware)", - "scramble", "Scramble", - "scramblebb", "Scramble (bootleg?)", - "scramblebf", "Scramble (Karateko, French bootleg)", - "scrambler", "Scramble (Reben S.A. Spanish bootleg)", - "scrambles", "Scramble (Stern Electronics set 1)", - "scrambles2", "Scramble (Stern Electronics set 2)", - "scrambp", "Impacto (Billport S.A., Spanish bootleg of Scramble)", - "scrampt", "Scramble (Petaco S.A., Spanish bootleg)", - "scramrf", "Scramble (Recreativos Franco, Spanish bootleg)", - "screenp1", "Screen Play (Maygay, MV1 Video, ver. 1.9, set 1)", - "screenp1a", "Screen Play (Maygay, MV1 Video, ver. 1.9, set 2)", - "screenp2", "Screen Play (Maygay, MV1 Video, ver. 1.9, Isle of Man, set 1)", - "screenp2a", "Screen Play (Maygay, MV1 Video, ver. 1.9, Isle of Man, set 2)", - "screenp3", "Screen Play (Maygay, MV1 Video, SA5-082)", - "screenp3a", "Screen Play (Maygay, MV1 Video, SA5-083)", - "screenp4", "Screen Play (Maygay, MV1 Video, ver. ?.?)", - "screenpl", "Screen Play (Maygay, MV1 Video, ver. 4.0)", - "scregg", "Scrambled Egg", - "screwloo", "Screw Loose (prototype)", - "scross", "Stadium Cross (World)", - "scrossu", "Stadium Cross (US)", - "scrpn_l1", "Scorpion (L-1)", - "scrpn_t1", "Scorpion (T-1)", - "scud", "Scud Race Twin (Australia)", - "scuda", "Scud Race Twin (Export)", - "scudhamm", "Scud Hammer", - "scudj", "Scud Race Deluxe (Japan)", - "scudplus", "Scud Race Plus (Revision A)", - "scudplusa", "Scud Race Plus", - "sddz", "Super Dou Di Zhu", - "sderby", "Super Derby (v.07.03)", - "sderbya", "Super Derby (v.10.04)", - "sdfight", "SD Fighters (Korea)", - "sdgndmps", "SD Gundam Psycho Salamander no Kyoui", - "sdi", "SDI - Strategic Defense Initiative (Japan, old, System 16A, FD1089B 317-0027)", - "sdib", "SDI - Strategic Defense Initiative (System 16B, FD1089A 317-0028)", - "sdibl", "SDI - Strategic Defense Initiative (bootleg)", - "sdmg2", "Mahjong Super Da Man Guan II (China, V754C)", - "sdodgeb", "Super Dodge Ball / Kunio no Nekketsu Toukyuu Densetsu", - "sdtennis", "Super Doubles Tennis", - "sdungeon", "Space Dungeon", - "sdwx", "Sheng Dan Wu Xian", - "seabass", "Sea Bass Fishing (JUET 971110 V0.001)", - "seabattl", "Sea Battle (set 1)", - "seabattla", "Sea Battle (set 2)", - "searchar", "SAR - Search And Rescue (World)", - "searcharj", "SAR - Search And Rescue (Japan)", - "searcharu", "SAR - Search And Rescue (US)", - "searchey", "Search Eye", - "searchp2", "Search Eye Plus V2.0", - "searthie", "Super Earth Invasion (set 3)", - "searthin", "Super Earth Invasion (set 1)", - "searthina", "Super Earth Invasion (set 2)", - "seawitch", "Seawitch", - "seawld", "Sea World (Version 1.6E Dual)", - "seawldd1", "Sea World (Version 1.6R CGA)", - "seawolf", "Sea Wolf (set 1)", - "seawolf2", "Sea Wolf II", - "seawolfo", "Sea Wolf (set 2)", - "secolove", "Second Love (Japan 861201)", - "secondch", "Second Chance", - "secretab", "Secret Agent (bootleg)", - "secretag", "Secret Agent (World)", - "sectionz", "Section Z (set 1)", - "sectionza", "Section Z (set 2)", - "sectrzon", "Sector Zone", - "segajw", "Golden Poker Series "Joker's Wild" (Rev. B)", - "seganinj", "Sega Ninja (315-5102)", - "seganinju", "Sega Ninja (not encrypted)", - "segawski", "Sega Water Ski (Japan, Revision A)", - "seicross", "Seicross", - "seiha", "Seiha (Japan 870725)", - "seiham", "Seiha [BET] (Japan 870723)", - "selfeena", "Sel Feena", - "seljan2", "Return Of Sel Jan II (Japan, NM557)", - "semibase", "MuHanSeungBu (SemiCom Baseball) (Korea)", - "sengekis", "Sengeki Striker (Asia)", - "sengekisj", "Sengeki Striker (Japan)", - "sengokmj", "Sengoku Mahjong [BET] (Japan)", - "sengoku", "Sengoku / Sengoku Denshou (NGM-017)(NGH-017)", - "sengoku2", "Sengoku 2 / Sengoku Denshou 2", - "sengoku3", "Sengoku 3 / Sengoku Densho 2001", - "sengokuh", "Sengoku / Sengoku Denshou (NGH-017)(US)", - "senjyo", "Senjyo", - "senknow", "Sen-Know (Japan)", - "senko", "Senko No Ronde (Rev A) (GDL-0030A)", - "senkoo", "Senko No Ronde (GDL-0030)", - "senkosp", "Senko No Ronde Special (GDL-0038)", - "senkyu", "Senkyu (Japan set 1)", - "senkyua", "Senkyu (Japan set 2)", - "sentetst", "Sente Diagnostic Cartridge", - "setaroul", "Visco Roulette", - "sexappl", "Sex Appeal (Version 6.02)", - "sextriv", "Sex Triv", - "sextriv1", "Sexual Trivia (Version 1.02SB, set 1)", - "sextriv2", "Sexual Trivia (Version 1.02SB, set 2)", - "sexyboom", "Sexy Boom", - "sexygal", "Sexy Gal (Japan 850501 SXG 1-00)", - "sexyparo", "Sexy Parodius (ver JAA)", - "sexyparoa", "Sexy Parodius (ver AAA)", - "sf", "Street Fighter (World, Analog buttons)", - "sf2", "Street Fighter II: The World Warrior (World 910522)", - "sf2049", "San Francisco Rush 2049", - "sf2049se", "San Francisco Rush 2049: Special Edition", - "sf2049te", "San Francisco Rush 2049: Tournament Edition", - "sf2acc", "Street Fighter II': Champion Edition (Accelerator!, bootleg, set 1)", - "sf2acca", "Street Fighter II': Champion Edition (Accelerator!, bootleg, set 2)", - "sf2accp2", "Street Fighter II': Champion Edition (Accelerator Pt.II, bootleg)", - "sf2amf", "Street Fighter II': Champion Edition (Alpha Magic-F, bootleg)", - "sf2amf2", "Street Fighter II': Champion Edition (L735 Test Rom, bootleg)", - "sf2bhh", "Street Fighter II': Champion Edition (Hung Hsi, bootleg)", - "sf2ce", "Street Fighter II': Champion Edition (World 920513)", - "sf2ceblp", "Street Fighter II': Champion Edition (protected bootleg on non-dash board)", - "sf2ceea", "Street Fighter II': Champion Edition (World 920313)", - "sf2ceja", "Street Fighter II': Champion Edition (Japan 920322)", - "sf2cejb", "Street Fighter II': Champion Edition (Japan 920513)", - "sf2cejc", "Street Fighter II': Champion Edition (Japan 920803)", - "sf2ceua", "Street Fighter II': Champion Edition (USA 920313)", - "sf2ceub", "Street Fighter II': Champion Edition (USA 920513)", - "sf2ceuc", "Street Fighter II': Champion Edition (USA 920803)", - "sf2dkot2", "Street Fighter II': Champion Edition (Double K.O. Turbo II, bootleg)", - "sf2dongb", "Street Fighter II': Champion Edition (Dongfang Bubai protection, bootleg)", - "sf2eb", "Street Fighter II: The World Warrior (World 910214)", - "sf2ebbl", "Street Fighter II: The World Warrior (TAB Austria, bootleg, set 1)", - "sf2ed", "Street Fighter II: The World Warrior (World 910318)", - "sf2ee", "Street Fighter II: The World Warrior (World 910228)", - "sf2hf", "Street Fighter II': Hyper Fighting (World 921209)", - "sf2hfj", "Street Fighter II' Turbo: Hyper Fighting (Japan 921209)", - "sf2hfu", "Street Fighter II': Hyper Fighting (USA 921209)", - "sf2j", "Street Fighter II: The World Warrior (Japan 911210)", - "sf2ja", "Street Fighter II: The World Warrior (Japan 910214)", - "sf2jc", "Street Fighter II: The World Warrior (Japan 910306)", - "sf2jf", "Street Fighter II: The World Warrior (Japan 910411)", - "sf2jh", "Street Fighter II: The World Warrior (Japan 910522)", - "sf2jl", "Street Fighter II: The World Warrior (Japan 920312)", - "sf2koryu", "Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg)", - "sf2m1", "Street Fighter II': Champion Edition (M1, bootleg)", - "sf2m2", "Street Fighter II': Champion Edition (M2, bootleg)", - "sf2m3", "Street Fighter II': Champion Edition (M3, bootleg)", - "sf2m4", "Street Fighter II': Champion Edition (M4, bootleg)", - "sf2m5", "Street Fighter II': Champion Edition (M5, bootleg)", - "sf2m6", "Street Fighter II': Champion Edition (M6, bootleg)", - "sf2m7", "Street Fighter II': Champion Edition (M7, bootleg)", - "sf2m8", "Street Fighter II': Champion Edition (M8, bootleg)", - "sf2mdt", "Street Fighter II': Magic Delta Turbo (bootleg, set 1)", - "sf2mdta", "Street Fighter II': Magic Delta Turbo (bootleg, set 2)", - "sf2mdtb", "Street Fighter II': Magic Delta Turbo (bootleg, set 3)", - "sf2qp1", "Street Fighter II: The World Warrior (Quicken Pt-I, bootleg)", - "sf2rb", "Street Fighter II': Champion Edition (Rainbow, bootleg, set 1)", - "sf2rb2", "Street Fighter II': Champion Edition (Rainbow, bootleg, set 2)", - "sf2rb3", "Street Fighter II': Champion Edition (Rainbow, bootleg, set 3)", - "sf2red", "Street Fighter II': Champion Edition (Red Wave, bootleg)", - "sf2rk", "Street Fighter II: The World Warrior (RK, bootleg)", - "sf2stt", "Street Fighter II: The World Warrior (TAB Austria, bootleg, set 2)", - "sf2thndr", "Street Fighter II: The World Warrior (Thunder Edition, bootleg)", - "sf2ua", "Street Fighter II: The World Warrior (USA 910206)", - "sf2ub", "Street Fighter II: The World Warrior (USA 910214)", - "sf2uc", "Street Fighter II: The World Warrior (USA 910306)", - "sf2ud", "Street Fighter II: The World Warrior (USA 910318)", - "sf2ue", "Street Fighter II: The World Warrior (USA 910228)", - "sf2uf", "Street Fighter II: The World Warrior (USA 910411)", - "sf2ug", "Street Fighter II: The World Warrior (USA 910522, Rev. G)", - "sf2ui", "Street Fighter II: The World Warrior (USA 910522, Rev. I)", - "sf2uk", "Street Fighter II: The World Warrior (USA 911101)", - "sf2v004", "Street Fighter II': Champion Edition (V004, bootleg)", - "sf2yyc", "Street Fighter II': Champion Edition (YYC, bootleg)", - "sf_l1", "Slugfest (L-1)", - "sfa", "Street Fighter Alpha: Warriors' Dreams (Euro 950727)", - "sfa2", "Street Fighter Alpha 2 (Euro 960229)", - "sfa2u", "Street Fighter Alpha 2 (USA 960430)", - "sfa2ur1", "Street Fighter Alpha 2 (USA 960306)", - "sfa3", "Street Fighter Alpha 3 (Euro 980904)", - "sfa3b", "Street Fighter Alpha 3 (Brazil 980629)", - "sfa3h", "Street Fighter Alpha 3 (Hispanic 980904)", - "sfa3hr1", "Street Fighter Alpha 3 (Hispanic 980629)", - "sfa3u", "Street Fighter Alpha 3 (USA 980904)", - "sfa3ud", "Street Fighter Alpha 3 (USA 980904 Phoenix Edition) (bootleg)", - "sfa3ur1", "Street Fighter Alpha 3 (USA 980629)", - "sfad", "Street Fighter Alpha: Warriors' Dreams (Euro 950727 Phoenix Edition) (bootleg)", - "sfar1", "Street Fighter Alpha: Warriors' Dreams (Euro 950718)", - "sfar2", "Street Fighter Alpha: Warriors' Dreams (Euro 950627)", - "sfar3", "Street Fighter Alpha: Warriors' Dreams (Euro 950605)", - "sfau", "Street Fighter Alpha: Warriors' Dreams (USA 950627)", - "sfbonus", "Skill Fruit Bonus (Version 1.9R, set 1)", - "sfbonusd1", "Skill Fruit Bonus (Version 1.9R, set 2)", - "sfbonuso", "Skill Fruit Bonus (Version 1.7)", - "sfbonuso2", "Skill Fruit Bonus (Version 1.6)", - "sfbonusv1", "Skill Fruit Bonus (Version 1.9R Dual)", - "sfcbox", "Super Famicom Box BIOS", - "sfchamp", "Super Football Champ (Ver 2.5O)", - "sfchampj", "Super Football Champ (Ver 2.4J)", - "sfchampo", "Super Football Champ (Ver 2.4O)", - "sfchampu", "Super Football Champ (Ver 2.4A)", - "sfex", "Street Fighter EX (Euro 961219)", - "sfex2", "Street Fighter EX2 (USA 980526)", - "sfex2a", "Street Fighter EX2 (Asia 980312)", - "sfex2h", "Street Fighter EX2 (Hispanic 980312)", - "sfex2j", "Street Fighter EX2 (Japan 980312)", - "sfex2p", "Street Fighter EX2 Plus (USA 990611)", - "sfex2pa", "Street Fighter EX2 Plus (Asia 990611)", - "sfex2ph", "Street Fighter EX2 Plus (Hispanic 990611)", - "sfex2pj", "Street Fighter EX2 Plus (Japan 990611)", - "sfexa", "Street Fighter EX (Asia 961219)", - "sfexj", "Street Fighter EX (Japan 961130)", - "sfexp", "Street Fighter EX Plus (USA 970407)", - "sfexpj", "Street Fighter EX Plus (Japan 970407)", - "sfexpj1", "Street Fighter EX Plus (Japan 970311)", - "sfexpu1", "Street Fighter EX Plus (USA 970311)", - "sfexu", "Street Fighter EX (USA 961219)", - "sfight", "Sonic the Fighters (Japan)", - "sfight2", "Street Fighter II", - "sfight2a", "Street Fighter II (rev.1)", - "sfight2b", "Street Fighter II (rev.2)", - "sfiii", "Street Fighter III: New Generation (Euro 970204)", - "sfiii2", "Street Fighter III 2nd Impact: Giant Attack (USA 970930)", - "sfiii2j", "Street Fighter III 2nd Impact: Giant Attack (Japan 970930)", - "sfiii2n", "Street Fighter III 2nd Impact: Giant Attack (Asia 970930, NO CD)", - "sfiii3", "Street Fighter III 3rd Strike: Fight for the Future (Euro 990608)", - "sfiii3n", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990608, NO CD)", - "sfiii3nr1", "Street Fighter III 3rd Strike: Fight for the Future (Japan 990512, NO CD)", - "sfiii3r1", "Street Fighter III 3rd Strike: Fight for the Future (Euro 990512)", - "sfiii3u", "Street Fighter III 3rd Strike: Fight for the Future (USA 990608)", - "sfiii3ur1", "Street Fighter III 3rd Strike: Fight for the Future (USA 990512)", - "sfiiia", "Street Fighter III: New Generation (Asia 970204)", - "sfiiih", "Street Fighter III: New Generation (Hispanic 970204)", - "sfiiij", "Street Fighter III: New Generation (Japan 970204)", - "sfiiin", "Street Fighter III: New Generation (Asia 970204, NO CD, bios set 1)", - "sfiiina", "Street Fighter III: New Generation (Asia 970204, NO CD, bios set 2)", - "sfiiiu", "Street Fighter III: New Generation (USA 970204)", - "sfish2", "Sport Fishing 2 (UET 951106 V1.10e)", - "sfish2j", "Sport Fishing 2 (J 951201 V1.100)", - "sfj", "Street Fighter (Japan) (protected)", - "sfkick", "Super Free Kick (set 1)", - "sfkicka", "Super Free Kick (set 2)", - "sflush", "Straight Flush", - "sfootbal", "Street Football (11/12/86)", - "sformula", "Super Formula (Japan)", - "sfp", "Street Fighter (prototype)", - "sfposeid", "Sea Fighter Poseidon", - "sfruitb", "Super Fruit Bonus (Version 2.5E Dual)", - "sfruitbb1", "Super Fruit Bonus (Version 2.5R, set 1)", - "sfruitbb2", "Super Fruit Bonus (Version 2.0LT, set 1)", - "sfruitbbh", "Super Fruit Bonus (Version 2.2B, set 1)", - "sfruitbd1", "Super Fruit Bonus (Version 2.5R, set 2)", - "sfruitbd2", "Super Fruit Bonus (Version 2.0LT, set 2)", - "sfruitbdh", "Super Fruit Bonus (Version 2.2B, set 2)", - "sfruitbh", "Super Fruit Bonus (Version 2.2EB Dual)", - "sfruitbo", "Super Fruit Bonus (Version 2.0)", - "sfruitbo2", "Super Fruit Bonus (Version 1.80XT)", - "sfruitboh", "Super Fruit Bonus (Version 2.0B)", - "sfruitbv1", "Super Fruit Bonus (Version 2.5R Dual)", - "sfruitbv2", "Super Fruit Bonus (Version 2.0LT Dual)", - "sfruitbvh", "Super Fruit Bonus (Version 2.2B Dual)", - "sfrush", "San Francisco Rush", - "sfrushrk", "San Francisco Rush: The Rock", - "sftm", "Street Fighter: The Movie (v1.12)", - "sftm110", "Street Fighter: The Movie (v1.10)", - "sftm111", "Street Fighter: The Movie (v1.11)", - "sftmj", "Street Fighter: The Movie (v1.12N, Japan)", - "sfu", "Street Fighter (US, set 1)", - "sfua", "Street Fighter (US, set 2) (protected)", - "sfx", "SF-X", - "sfz2a", "Street Fighter Zero 2 (Asia 960227)", - "sfz2ad", "Street Fighter Zero 2 (Asia 960227 Phoenix Edition) (bootleg)", - "sfz2al", "Street Fighter Zero 2 Alpha (Asia 960826)", - "sfz2alb", "Street Fighter Zero 2 Alpha (Brazil 960813)", - "sfz2ald", "Street Fighter Zero 2 Alpha (Asia 960826 Phoenix Edition) (bootleg)", - "sfz2alh", "Street Fighter Zero 2 Alpha (Hispanic 960813)", - "sfz2alj", "Street Fighter Zero 2 Alpha (Japan 960805)", - "sfz2b", "Street Fighter Zero 2 (Brazil 960531)", - "sfz2br1", "Street Fighter Zero 2 (Brazil 960304)", - "sfz2h", "Street Fighter Zero 2 (Hispanic 960304)", - "sfz2j", "Street Fighter Zero 2 (Japan 960430)", - "sfz2jd", "Street Fighter Zero 2 (Japan 960227 Phoenix Edition) (bootleg)", - "sfz2jr1", "Street Fighter Zero 2 (Japan 960227)", - "sfz2n", "Street Fighter Zero 2 (Oceania 960229)", - "sfz3a", "Street Fighter Zero 3 (Asia 980904)", - "sfz3ar1", "Street Fighter Zero 3 (Asia 980701)", - "sfz3j", "Street Fighter Zero 3 (Japan 980904)", - "sfz3jr1", "Street Fighter Zero 3 (Japan 980727)", - "sfz3jr2", "Street Fighter Zero 3 (Japan 980629)", - "sfz3jr2d", "Street Fighter Zero 3 (Japan 980629 Phoenix Edition) (bootleg)", - "sfz3ugd", "Street Fighter Zero 3 Upper (GDL-0002)", - "sfza", "Street Fighter Zero (Asia 950627)", - "sfzar1", "Street Fighter Zero (Asia 950605)", - "sfzb", "Street Fighter Zero (Brazil 951109)", - "sfzbr1", "Street Fighter Zero (Brazil 950727)", - "sfzh", "Street Fighter Zero (Hispanic 950718)", - "sfzhr1", "Street Fighter Zero (Hispanic 950627)", - "sfzj", "Street Fighter Zero (Japan 950727)", - "sfzjr1", "Street Fighter Zero (Japan 950627)", - "sfzjr2", "Street Fighter Zero (Japan 950605)", - "sgemf", "Super Gem Fighter Mini Mix (USA 970904)", - "sgemfa", "Super Gem Fighter: Mini Mix (Asia 970904)", - "sgemfd", "Super Gem Fighter Mini Mix (USA 970904 Phoenix Edition) (bootleg)", - "sgemfh", "Super Gem Fighter: Mini Mix (Hispanic 970904)", - "sgladiat", "Gladiator 1984", - "sgmast", "Super Masters Golf (World?, Floppy Based, FD1094 317-0058-05d?)", - "sgmastc", "Jumbo Ozaki Super Masters Golf (World, Floppy Based, FD1094 317-0058-05c)", - "sgmastj", "Jumbo Ozaki Super Masters Golf (Japan, Floppy Based, FD1094 317-0058-05b)", - "sgmt1", "Super Game Mega Type 1", - "sgnascar", "NASCAR Racing", - "sgsafari", "Super Gran Safari (ver 3.11)", - "sgt24h", "Super GT 24h", - "sgtetris", "Sega Tetris", - "sgunner", "Steel Gunner (Rev B)", - "sgunner2", "Steel Gunner 2 (US)", - "sgunner2j", "Steel Gunner 2 (Japan, Rev A)", - "sgunnerj", "Steel Gunner (Japan)", - "sgyxz", "Warriors of Fate ('sgyxz' bootleg)", - "shabdama", "LD Mahjong #4 Shabon-Dama", - "shackled", "Shackled (US)", - "shadfgtr", "Shadow Fighters", - "shadfrce", "Shadow Force (US Version 2)", - "shadfrcej", "Shadow Force (Japan Version 3)", - "shadfrcejv2", "Shadow Force (Japan Version 2)", - "shadowld", "Shadowland (YD3)", - "shadoww", "Shadow Warriors (World, set 1)", - "shadowwa", "Shadow Warriors (World, set 2)", - "shaktamb", "Shakatto Tambourine Cho Powerup Chu 2K1 AUT (GDS-0016)", - "shaktmsp", "Shakatto Tambourine 2K1 SPR (GDS-0013)", - "shangha2", "Shanghai II (Japan, set 1)", - "shangha2a", "Shanghai II (Japan, set 2)", - "shangha3", "Shanghai III (World)", - "shangha3j", "Shanghai III (Japan)", - "shangha3u", "Shanghai III (US)", - "shanghai", "Shanghai (World)", - "shanghaij", "Shanghai (Japan)", - "shanghss", "Shanghai Shoryu Sairin (V2.03J)", - "shangkid", "Shanghai Kid", - "shangon", "Super Hang-On (sitdown/upright, unprotected)", - "shangon1", "Super Hang-On (mini ride-on?, FD1089B 317-0034)", - "shangon2", "Super Hang-On (mini ride-on, Rev A, FD1089B 317-0034)", - "shangon3", "Super Hang-On (sitdown/upright, FD1089B 317-0034)", - "shangonle", "Limited Edition Hang-On", - "shangonrb", "Super Hang-On (bootleg)", - "shangonro", "Super Hang-On (ride-on, Japan, FD1094 317-0038)", - "shangril", "Dengen Tenshi Taisen Janshi Shangri-la (JPN, USA, EXP, KOR, AUS)", - "shangtou", "Shanghai Sangokuhai Tougi (Ver 2.01J)", - "shanhigw", "Shanghai - The Great Wall / Shanghai Triple Threat (JUE 950623 V1.005)", - "shaolinb", "Shao-lin's Road (set 2)", - "shaolins", "Shao-lin's Road (set 1)", - "shaqattq", "Shaq Attaq (rev.5)", - "shaqattq2", "Shaq Attaq (rev.2)", - "shark", "Shark", - "sharkatt", "Shark Attack", - "sharkjaw", "Shark JAWS [TTL]", - "sharkpy", "Shark Party (Italy, v1.3)", - "sharkpya", "Shark Party (Italy, v1.6)", - "sharkpye", "Shark Party (English, Alpha license)", - "sharkt", "Shark (Taito)", - "sharrier", "Space Harrier (Rev A, 8751 315-5163A)", - "sharrier1", "Space Harrier (8751 315-5163)", - "shdancbl", "Shadow Dancer (bootleg)", - "shdancer", "Shadow Dancer (World)", - "shdancer1", "Shadow Dancer (US)", - "shdancerj", "Shadow Dancer (Japan)", - "sheriff", "Sheriff", - "shfin_l1", "Shuffle Inn (Shuffle) (L-1)", - "shienryu", "Shienryu (JUET 961226 V1.000)", - "shikgam2", "Shikigami No Shiro II / The Castle of Shikigami II (GDL-0021)", - "shikiga3", "Shikigami no Shiro III (v2.06J)", - "shikigam", "Shikigami no Shiro (V2.03J)", - "shimpact", "Super High Impact (rev LA1 09/30/91)", - "shimpactp4", "Super High Impact (prototype, rev 4.0 09/10/91)", - "shimpactp5", "Super High Impact (prototype, rev 5.0 09/15/91)", - "shimpactp6", "Super High Impact (prototype, rev 6.0 09/23/91)", - "shinfz", "Shinobi / FZ-2006 (Korean System 16 bootleg) (ISG Selection Master Type 2006)", - "shinobi", "Shinobi (set 6, System 16A, unprotected)", - "shinobi1", "Shinobi (set 1, System 16A, FD1094 317-0050)", - "shinobi2", "Shinobi (set 2, System 16B, FD1094 317-0049)", - "shinobi3", "Shinobi (set 3, System 16B, MC-8123B 317-0054)", - "shinobi4", "Shinobi (set 4, System 16B, MC-8123B 317-0054)", - "shinobi5", "Shinobi (set 5, System 16B, unprotected)", - "shinoblb", "Shinobi (Beta bootleg)", - "shinobld", "Shinobi (Datsu bootleg)", - "shinobls", "Shinobi (Star bootleg, System 16A)", - "shippumd", "Shippu Mahou Daisakusen (Japan)", - "shiryu2", "Strider Hiryu 2 (Japan 991213)", - "shisen", "Shisensho - Joshiryo-Hen (Japan)", - "shisen2", "Shisensho II", - "shngmtkb", "Shanghai Matekibuyuu", - "shock", "Shock", - "shocking", "Shocking", - "shockingk", "Shocking (Korea)", - "shocktr2", "Shock Troopers - 2nd Squad", - "shocktro", "Shock Troopers (set 1)", - "shocktroa", "Shock Troopers (set 2)", - "shogwarr", "Shogun Warriors (World)", - "shogwarru", "Shogun Warriors (US)", - "shollow", "Satan's Hollow (set 1)", - "shollow2", "Satan's Hollow (set 2)", - "shootbul", "Shoot the Bull", - "shootgal", "Shooting Gallery", - "shootopl", "Shootout Pool", - "shootout", "Shoot Out (US)", - "shootoutb", "Shoot Out (Korean Bootleg)", - "shootoutj", "Shoot Out (Japan)", - "shootpl", "Shootout Pool (JPN, USA, KOR, AUS) / Shootout Pool Prize (EXP)", - "shootplm", "Shootout Pool Medal", - "shougi", "Shougi", - "shougi2", "Shougi 2", - "showdown", "Showdown (version 5.0)", - "showhanc", "Wang Pai Dui Jue (China)", - "showhand", "Show Hand (Italy)", - "showqn", "Show Queen (Konami Endeavour)", - "shpeng", "Sea Hunter Penguin", - "shpinxii", "Sphinx II (Russia) (Atronic)", - "shrike", "Shrike Avenger (prototype)", - "shrknew", "Sharkey's Shootout (ARM7 Sound Board)", - "shrky_207", "Sharkey's Shootout (2.07)", - "shrkyfr", "Sharkey's Shootout (2.11 France)", - "shrkyfr_207", "Sharkey's Shootout (2.07 France)", - "shrkygr", "Sharkey's Shootout (2.11 Germany)", - "shrkygr_207", "Sharkey's Shootout (2.07 Germany)", - "shrkyit", "Sharkey's Shootout (2.11 Italy)", - "shrkyit_207", "Sharkey's Shootout (2.07 Italy)", - "shrkysht", "Sharkey's Shootout (2.11)", - "shtngmst", "Shooting Master (8751 315-5159)", - "shtngmste", "Shooting Master (EVG, 8751 315-5159a)", - "shtrider", "Shot Rider", - "shtridera", "Shot Rider (Sigma license)", - "shtstar", "Shooting Star", - "shtzone", "Shooting Zone System BIOS", - "shuffle", "Shuffleboard", - "shufshot", "Shuffleshot (v1.40)", - "shufshot137", "Shuffleshot (v1.37)", - "shufshot139", "Shuffleshot (v1.39)", - "shuttlei", "Shuttle Invader", - "shuuz", "Shuuz (version 8.0)", - "shuuz2", "Shuuz (version 7.1)", - "sia2650", "Super Invader Attack (bootleg of The Invaders)", - "sianniv", "Space Invaders Anniversary (V2.02J)", - "sichuan2", "Sichuan II (hack, set 1)", - "sichuan2a", "Sichuan II (hack, set 2)", - "sicv", "Space Invaders (CV Version)", - "sidampkr", "unknown Sidam Poker", - "sidearms", "Side Arms - Hyper Dyne (World)", - "sidearmsj", "Side Arms - Hyper Dyne (Japan)", - "sidearmsr", "Side Arms - Hyper Dyne (US)", - "sidebs", "Side by Side (Ver 2.7 J)", - "sidebs2", "Side by Side 2 (Ver 2.6 A)", - "sidebs2j", "Side by Side 2 Evoluzione (Ver 2.4 J)", - "sidebsja", "Side by Side (Ver 2.5 J)", - "sidepckt", "Side Pocket (World)", - "sidepcktb", "Side Pocket (bootleg)", - "sidepcktj", "Side Pocket (Japan)", - "sidetrac", "Side Trak", - "sidewndr", "Sidewinder", - "sigma2k", "Sigma Poker 2000", - "sigmapkr", "Sigma Poker", - "silentd", "Silent Dragon (World)", - "silentdj", "Silent Dragon (Japan)", - "silentdu", "Silent Dragon (US)", - "silkroad", "The Legend of Silkroad", - "silkroada", "The Legend of Silkroad (larger ROMs)", - "silkworm", "Silk Worm (World)", - "silkwormj", "Silk Worm (Japan)", - "silverga", "Silver Game", - "silvland", "Silver Land", - "silvmil", "Silver Millennium", - "silvslug", "Silver Slugger", - "simp_a20", "The Simpsons (2.0)", - "simp_a27", "The Simpsons (2.7)", - "simpbowl", "Simpsons Bowling (GQ829 UAA)", - "simpnew", "Simpsons Pinball Party, The (ARM7 Sound Board)", - "simpprtf", "Simpsons Pinball Party, The (5.00 France)", - "simpprtf_204", "Simpsons Pinball Party, The (2.04 France)", - "simpprtf_400", "Simpsons Pinball Party, The (4.00 France)", - "simpprtg", "Simpsons Pinball Party, The (5.00 Germany)", - "simpprtg_400", "Simpsons Pinball Party, The (4.00 Germany)", - "simpprti", "Simpsons Pinball Party, The (5.00 Italy)", - "simpprti_204", "Simpsons Pinball Party, The (2.04 Italy)", - "simpprti_400", "Simpsons Pinball Party, The (4.00 Italy)", - "simpprtl", "Simpsons Pinball Party, The (5.00 Spain)", - "simpprtl_204", "Simpsons Pinball Party, The (2.04 Spain)", - "simpprtl_400", "Simpsons Pinball Party, The (4.00 Spain)", - "simpprty", "Simpsons Pinball Party, The (5.00)", - "simpprty_204", "Simpsons Pinball Party, The (2.04)", - "simpprty_400", "Simpsons Pinball Party, The (4.00)", - "simpsons", "The Simpsons (4 Players World, set 1)", - "simpsons2p", "The Simpsons (2 Players World, set 1)", - "simpsons2p2", "The Simpsons (2 Players World, set 2)", - "simpsons2pa", "The Simpsons (2 Players Asia)", - "simpsons2pj", "The Simpsons (2 Players Japan)", - "simpsons4pa", "The Simpsons (4 Players World, set 2)", - "sinbad", "Sinbad", - "sinbadn", "Sinbad (Norway)", - "sindbadm", "Sindbad Mystery", - "sinistar", "Sinistar (revision 3)", - "sinistar1", "Sinistar (prototype version)", - "sinistar2", "Sinistar (revision 2)", - "sinvasn", "Space Invasion (Europe)", - "sinvasnb", "Space Invasion (bootleg)", - "sinvemag", "Super Invaders (bootleg set 2)", - "sinvzen", "Super Invaders (Zenitone-Microsec)", - "sisv", "Space Invaders (SV Version rev 4)", - "sisv1", "Space Invaders (SV Version rev 1)", - "sisv2", "Space Invaders (SV Version rev 2)", - "sisv3", "Space Invaders (SV Version rev 3)", - "sitv", "Space Invaders (TV Version rev 2)", - "sitv1", "Space Invaders (TV Version rev 1)", - "sjcd2kx3", "Super Joly 2000 - 3x", - "sjryuko", "Sukeban Jansi Ryuko (set 2, System 16B, FD1089B 317-5021)", - "sjryuko1", "Sukeban Jansi Ryuko (set 1, System 16A, FD1089B 317-5021)", - "skatebll", "Skateball", - "skatekds", "Vs. Skate Kids. (Graphic hack of Super Mario Bros.)", - "skattv", "Skat TV", - "skattva", "Skat TV (version TS3)", - "skeetsht", "Skeet Shot", - "skelagon", "Skelagon", - "skflight", "Skill Flight", - "skichamp", "Ski Champ", - "skijump", "Ski Jump", - "skill98", "Skill '98 (ver. s98-1.33)", - "skilldrp", "Skill Drop Georgia (Ver. G1.0S)", - "skimaxx", "Skimaxx", - "skingame", "The Irem Skins Game (US set 1)", - "skingame2", "The Irem Skins Game (US set 2)", - "skisuprg", "Sega Ski Super G", - "skns", "Super Kaneko Nova System BIOS", - "skullfng", "Skull Fang (World)", - "skullfngj", "Skull Fang (Japan)", - "skullxbo", "Skull & Crossbones (rev 5)", - "skullxbo1", "Skull & Crossbones (rev 1)", - "skullxbo2", "Skull & Crossbones (rev 2)", - "skullxbo3", "Skull & Crossbones (rev 3)", - "skullxbo4", "Skull & Crossbones (rev 4)", - "skyadvnt", "Sky Adventure (World)", - "skyadvntj", "Sky Adventure (Japan)", - "skyadvntu", "Sky Adventure (US)", - "skyalert", "Sky Alert", - "skyarmy", "Sky Army", - "skybase", "Sky Base", - "skybump", "Sky Bumper", - "skychut", "Sky Chuter", - "skydest", "Sky Destroyer (Japan)", - "skydiver", "Sky Diver", - "skyfox", "Sky Fox", - "skykid", "Sky Kid (new version)", - "skykidd", "Sky Kid (CUS60 version)", - "skykiddx", "Sky Kid Deluxe (set 1)", - "skykiddxo", "Sky Kid Deluxe (set 2)", - "skykido", "Sky Kid (old version)", - "skykids", "Sky Kid (Sipem)", - "skylancr", "Sky Lancer", - "skylancre", "Sky Lancer (Esco Trading Co license)", - "skylncr", "Sky Lancer (Bordun, version U450C)", - "skylove", "Sky Love", - "skyraid", "Sky Raider", - "skyraidr", "Sky Raider (Uniwars bootleg)", - "skyrobo", "Sky Robo", - "skyshark", "Sky Shark (US)", - "skyskipr", "Sky Skipper", - "skysmash", "Sky Smasher", - "skysoldr", "Sky Soldiers (US)", - "skysoldrbl", "Sky Soldiers (bootleg)", - "skytargt", "Sky Target", - "skywolf", "Sky Wolf (set 1)", - "skywolf2", "Sky Wolf (set 2)", - "skywolf3", "Sky Wolf (set 3)", - "sl2007", "Shooting Love 2007", - "slamdnk2", "Slam Dunk 2 (ver JAA)", - "slammast", "Saturday Night Slam Masters (World 930713)", - "slammastu", "Saturday Night Slam Masters (USA 930713)", - "slampic", "Saturday Night Slam Masters (bootleg with PIC16c57)", - "slapfigh", "Slap Fight (Japan set 1)", - "slapfigha", "Slap Fight (Japan set 2)", - "slapfighb1", "Slap Fight (bootleg set 1)", - "slapfighb2", "Slap Fight (bootleg set 2)", - "slapfighb3", "Slap Fight (bootleg set 3)", - "slapshot", "Slap Shot (Japan)", - "slasho", "Slashout (JPN, USA, EXP, KOR, AUS)", - "slashout", "Slashout (GDS-0004)", - "slbmania", "Silverball Mania", - "sleicpin", "Sleic Pin Ball", - "slikshot", "Slick Shot (V2.2)", - "slikshot16", "Slick Shot (V1.6)", - "slikshot17", "Slick Shot (V1.7)", - "slipstrm", "Slip Stream (Brazil 950515)", - "slipstrmh", "Slip Stream (Hispanic 950515)", - "slither", "Slither (set 1)", - "slithera", "Slither (set 2)", - "sliver", "Sliver", - "slmdunkj", "Slam Dunk (ver JAA 1993 10.8)", - "sloco93", "Super Loco 93 (Spanish, set 1)", - "sloco93a", "Super Loco 93 (Spanish, set 2)", - "slotcarn", "Slot Carnival", - "slotsnl", "Slots (Dutch, Game Card 95-750-368)", - "slqz2", "Mahjong Shuang Long Qiang Zhu 2 (VS203J)", - "slrasslt", "Solar Assault (ver UAA)", - "sltblgp1", "Slots (Belgian Cash, Game Card 95-752-008)", - "sltblgpo", "Slots (Belgian Cash, Game Card 95-750-938)", - "sltblgtk", "Slots (Belgian Token, Game Card 95-750-943)", - "slyspy", "Sly Spy (US revision 3)", - "slyspy2", "Sly Spy (US revision 2)", - "sm_ngacc", "Nudge Accumulator (Summit Coin)", - "sm_ultng", "Ultimate Nudge (Summit Coin)", - "smarinef", "Sega Marine Fishing", - "smash", "Smash (Crash bootleg)", - "smashtv", "Smash T.V. (rev 8.00)", - "smashtv3", "Smash T.V. (rev 3.01)", - "smashtv4", "Smash T.V. (rev 4.00)", - "smashtv5", "Smash T.V. (rev 5.00)", - "smashtv6", "Smash T.V. (rev 6.00)", - "smb", "Super Mario Brothers", - "smb1", "Super Mario Brothers (rev.1)", - "smb2", "Super Mario Brothers (rev.2)", - "smb3", "Super Mario Brothers (rev.3)", - "smbmush", "Super Mario Brothers Mushroom World", - "smbomb", "Super Muscle Bomber: The International Blowout (Japan 940831)", - "smbombr1", "Super Muscle Bomber: The International Blowout (Japan 940808)", - "smgolf", "Vs. Stroke & Match Golf (Men Version, set GF4-2 F)", - "smgolfb", "Vs. Stroke & Match Golf (Men Version, set GF4-2 ?)", - "smgolfj", "Vs. Stroke & Match Golf (Men Version) (Japan, set GF3 B)", - "smgp", "Super Monaco GP (World, Rev B, FD1094 317-0126a)", - "smgp5", "Super Monaco GP (World, FD1094 317-0126)", - "smgp6", "Super Monaco GP (World, Rev A, FD1094 317-0126a)", - "smgpj", "Super Monaco GP (Japan, Rev B, FD1094 317-0124a)", - "smgpja", "Super Monaco GP (Japan, Rev A, FD1094 317-0124a)", - "smgpu", "Super Monaco GP (US, Rev C, FD1094 317-0125a)", - "smgpu1", "Super Monaco GP (US, Rev B, FD1094 317-0125a)", - "smgpu2", "Super Monaco GP (US, Rev A, FD1094 317-0125a)", - "smleague", "Super Major League (U 960108 V1.000)", - "smlg99", "Super Major League '99", - "smman", "Six Million Dollar Man", - "smooncrs", "Super Moon Cresta", - "smoto16", "Super Moto (Italy, v1.6)", - "smoto20", "Super Rider (Italy, v2.0)", - "smshilo", "HI-LO Double Up Joker Poker", - "snake", "Snake Machine", - "snakepit", "Snake Pit", - "snakjack", "Snacks'n Jaxson", - "snapjack", "Snap Jack", - "snapper", "Snapper (Korea)", - "sncwgltd", "Sonic Wings Limited (Japan)", - "sngkace", "Sengoku Ace (Japan)", - "snlad", "Snake & Ladders", - "snookr10", "Snooker 10 (Ver 1.11)", - "snowboar", "Snow Board Championship (Version 2.1)", - "snowboara", "Snow Board Championship (Version 2.0)", - "snowbro2", "Snow Bros. 2 - With New Elves / Otenki Paradise", - "snowbro2b", "Snow Bros. 2 - With New Elves / Otenki Paradise (bootleg)", - "snowbro3", "Snow Brothers 3 - Magical Adventure", - "snowbros", "Snow Bros. - Nick & Tom (set 1)", - "snowbrosa", "Snow Bros. - Nick & Tom (set 2)", - "snowbrosb", "Snow Bros. - Nick & Tom (set 3)", - "snowbrosc", "Snow Bros. - Nick & Tom (set 4)", - "snowbrosd", "Snow Bros. - Nick & Tom (Dooyong license)", - "snowbrosj", "Snow Bros. - Nick & Tom (Japan)", - "snowbroswb", "Snow Bros. - Nick & Tom (The Winter Bobble hardware bootleg)", - "snspares", "Strikes n' Spares (rev.6)", - "snspares1", "Strikes n' Spares (rev.1)", - "socbrawl", "Soccer Brawl (NGM-031)", - "socbrawlh", "Soccer Brawl (NGH-031)", - "soccer", "Atari Soccer", - "soccernw", "Soccer New (Italian)", - "soccerss", "Soccer Superstars (ver EAA)", - "soccerssa", "Soccer Superstars (ver AAA)", - "soccerssj", "Soccer Superstars (ver JAC)", - "soccerssja", "Soccer Superstars (ver JAA)", - "socrking", "Soccer Kings", - "socrkingg", "Soccer Kings (German speech)", - "socrkingi", "Soccer Kings (Italian speech)", - "sogeki", "Sogeki (ver JAA)", - "sokonuke", "Sokonuke Taisen Game (Japan)", - "sokyugrt", "Soukyugurentai / Terra Diver (JUET 960821 V1.000)", - "solar_l2", "Solar Fire (L-2)", - "solarfox", "Solar Fox (upright)", - "solaride", "Solar Ride", - "solarq", "Solar Quest", - "solarwap", "Solar Wars (Sonic)", - "solarwar", "Solar-Warrior (US)", - "soldam", "Soldam", - "soldamj", "Soldam (Japan)", - "soldivid", "Sol Divide - The Sword Of Darkness", - "solfight", "Solar Fight (bootleg of Ozma Wars)", - "solfigtr", "Solitary Fighter (World)", - "solomon", "Solomon's Key (US)", - "solomonj", "Solomon no Kagi (Japan)", - "solvalou", "Solvalou (Japan)", - "sonic", "SegaSonic The Hedgehog (Japan, rev. C)", - "sonicbom", "Sonic Boom (FD1094 317-0053)", - "sonicp", "SegaSonic The Hedgehog (Japan, prototype)", - "sonicwi", "Sonic Wings (Japan)", - "sonicwi2", "Aero Fighters 2 / Sonic Wings 2", - "sonicwi3", "Aero Fighters 3 / Sonic Wings 3", - "sonofphx", "Son of Phoenix (bootleg of Repulse)", - "sonoth", "Something For Nothing (Russia)", - "sonson", "Son Son", - "sonsonj", "Son Son (Japan)", - "sonstwar", "Star Wars (Sonic)", - "sonstwr2", "Star Wars (Sonic, alternate set)", - "sopranof", "Sopranos, The (5.00 France)", - "sopranof_107", "Sopranos, The (1.07 France)", - "sopranof_300", "Sopranos, The (3.00 France)", - "sopranof_400", "Sopranos, The (4.00 France)", - "sopranog", "Sopranos, The (5.00 Germany)", - "sopranog_107", "Sopranos, The (1.07 Germany)", - "sopranog_300", "Sopranos, The (3.00 Germany)", - "sopranog_400", "Sopranos, The (4.00 Germany)", - "sopranoi", "Sopranos, The (5.00 Italy)", - "sopranoi_107", "Sopranos, The (1.07 Italy)", - "sopranoi_300", "Sopranos, The (3.00 Italy)", - "sopranoi_400", "Sopranos, The (4.00 Italy)", - "sopranol", "Sopranos, The (5.00 Spain)", - "sopranol_107", "Sopranos, The (1.07 Spain)", - "sopranol_300", "Sopranos, The (3.00 Spain)", - "sopranol_400", "Sopranos, The (4.00 Spain)", - "sopranos", "Sopranos, The (5.00)", - "sopranos_204", "Sopranos, The (2.04)", - "sopranos_300", "Sopranos, The (3.00)", - "sopranos_400", "Sopranos, The (4.00)", - "sorbit", "Super Orbit", - "sorcr_l1", "Sorcerer (L-1)", - "sorcr_l2", "Sorcerer (L-2)", - "sos", "SOS", - "sosterm", "S.O.S.", - "sothello", "Super Othello", - "sotsugyo", "Sotsugyo Shousho", - "soukobdx", "Souko Ban Deluxe (Japan, SB1)", - "soulcl2a", "Soul Calibur II (SC22 Ver. A)", - "soulcl2b", "Soul Calibur II (SC21 Ver. A)", - "soulcl2w", "Soul Calibur II (SC2? world version)", - "soulclb2", "Soul Calibur II (SC23 Ver. A)", - "soulclb3", "Soul Calibur III (SC31001-NA-A)", - "soulclb3a", "Soul Calibur III (SC31002-NA-A)", - "soulclbr", "Soul Calibur (World, SOC14/VER.C)", - "soulclbrja", "Soul Calibur (Japan, SOC11/VER.A2)", - "soulclbrjb", "Soul Calibur (Japan, SOC11/VER.B)", - "soulclbrjc", "Soul Calibur (Japan, SOC11/VER.C)", - "soulclbrub", "Soul Calibur (US, SOC13/VER.B)", - "soulclbruc", "Soul Calibur (US, SOC13/VER.C)", - "soulclbrwb", "Soul Calibur (World, SOC14/VER.B)", - "souledge", "Soul Edge Ver. II (World, SO4/VER.C)", - "souledgeaa", "Soul Edge (Asia, SO2/VER.A)", - "souledgeja", "Soul Edge (Japan, SO1/VER.A)", - "souledgeua", "Soul Edge (US, SO3/VER.A)", - "souledgeuc", "Soul Edge Ver. II (US, SO3/VER.C)", - "soulsurf", "Soul Surfer (Rev A)", - "soutenry", "Soutenryu (V2.07J)", - "sp_atw", "Around The World In Eighty Days (Crystal) (sp.ACE?)", - "sp_beau", "Beau Peep (Ace) (sp.ACE) (set 1)", - "sp_beau2", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 1)", - "sp_beau2a", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 2)", - "sp_beau2b", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 3)", - "sp_beau2c", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 4)", - "sp_beau2d", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 5)", - "sp_beau2e", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 6)", - "sp_beau2f", "Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 7)", - "sp_beaua", "Beau Peep (Ace) (sp.ACE) (set 2)", - "sp_beaub", "Beau Peep (Ace) (sp.ACE) (set 3)", - "sp_beauc", "Beau Peep (Ace) (sp.ACE) (set 4)", - "sp_beaud", "Beau Peep (Ace) (sp.ACE) (set 5)", - "sp_beaue", "Beau Peep (Ace) (sp.ACE) (set 6)", - "sp_beauf", "Beau Peep (Ace) (sp.ACE) (set 7)", - "sp_beaug", "Beau Peep (Ace) (sp.ACE) (set 8)", - "sp_beauh", "Beau Peep (Ace) (sp.ACE) (set 9)", - "sp_bigbd", "Big Break Deluxe Club (Ace) (sp.ACE) (set 1)", - "sp_bigbda", "Big Break Deluxe Club (Ace) (sp.ACE) (set 2)", - "sp_brkbk", "Break The Bank (Ace) (sp.ACE) (set 1)", - "sp_brkbka", "Break The Bank (Ace) (sp.ACE) (set 2)", - "sp_brkbkb", "Break The Bank (Ace) (sp.ACE) (set 3)", - "sp_brkbkc", "Break The Bank (Ace) (sp.ACE) (set 4)", - "sp_brkbkd", "Break The Bank (Ace) (sp.ACE) (set 5)", - "sp_camel", "Camelot (Ace) (sp.ACE) (set 1)", - "sp_camela", "Camelot (Ace) (sp.ACE) (set 2)", - "sp_camelb", "Camelot (Ace) (sp.ACE) (set 3)", - "sp_camelc", "Camelot (Ace) (sp.ACE) (set 4)", - "sp_cameld", "Camelot (Ace) (sp.ACE) (set 5)", - "sp_camele", "Camelot (Ace) (sp.ACE) (set 6)", - "sp_camelf", "Camelot (Ace) (sp.ACE) (set 7)", - "sp_camelg", "Camelot (Ace) (sp.ACE) (set 8)", - "sp_camelh", "Camelot (Ace) (sp.ACE) (set 9)", - "sp_cameli", "Camelot (Ace) (sp.ACE) (set 10)", - "sp_camelj", "Camelot (Ace) (sp.ACE) (set 11)", - "sp_camelk", "Camelot (Ace) (sp.ACE) (set 12)", - "sp_camell", "Camelot (Ace) (sp.ACE) (set 13)", - "sp_camelm", "Camelot (Ace) (sp.ACE) (set 14)", - "sp_cameln", "Camelot (Ace) (sp.ACE) (set 15)", - "sp_camelo", "Camelot (Ace) (sp.ACE) (set 16)", - "sp_carry", "Carry On (Pcp) (sp.ACE?) (set 1)", - "sp_carrya", "Carry On (Pcp) (sp.ACE?) (set 2)", - "sp_cbowl", "Cash Bowl (Ace) (sp.ACE) (set 1)", - "sp_cbowla", "Cash Bowl (Ace) (sp.ACE) (set 2)", - "sp_cbowlb", "Cash Bowl (Ace) (sp.ACE) (set 3)", - "sp_cbowlc", "Cash Bowl (Ace) (sp.ACE) (set 4)", - "sp_cbowld", "Cash Bowl (Ace) (sp.ACE) (set 5)", - "sp_cbowle", "Cash Bowl (Ace) (sp.ACE) (set 6)", - "sp_cbowlf", "Cash Bowl (Ace) (sp.ACE) (set 7)", - "sp_cbowlg", "Cash Bowl (Ace) (sp.ACE) (set 8)", - "sp_cbowlh", "Cash Bowl (Ace) (sp.ACE) (set 9)", - "sp_cbowli", "Cash Bowl (Ace) (sp.ACE) (set 10)", - "sp_cbowlj", "Cash Bowl (Ace) (sp.ACE) (set 11)", - "sp_cbowlk", "Cash Bowl (Ace) (sp.ACE) (set 12)", - "sp_cbowll", "Cash Bowl (Ace) (sp.ACE) (set 13)", - "sp_cbowlm", "Cash Bowl (Ace) (sp.ACE) (set 14)", - "sp_cbowln", "Cash Bowl (Ace) (sp.ACE) (set 15)", - "sp_cbowlo", "Cash Bowl (Ace) (sp.ACE) (set 16)", - "sp_cbowlp", "Cash Bowl (Ace) (sp.ACE) (set 17)", - "sp_cbowlq", "Cash Bowl (Ace) (sp.ACE) (set 18)", - "sp_cbowlr", "Cash Bowl (Ace) (sp.ACE) (set 19)", - "sp_cbowls", "Cash Bowl (Ace) (sp.ACE) (set 20)", - "sp_cbowlt", "Cash Bowl (Ace) (sp.ACE) (set 21)", - "sp_cbowlu", "Cash Bowl (Ace) (sp.ACE) (set 22)", - "sp_clbna", "Club National (Ace) (sp.ACE) (set 1)", - "sp_clbnaa", "Club National (Ace) (sp.ACE) (set 2)", - "sp_coder", "Code Red (Ace) (sp.ACE) (set 1)", - "sp_codera", "Code Red (Ace) (sp.ACE) (set 2)", - "sp_coderb", "Code Red (Ace) (sp.ACE) (set 3)", - "sp_coderc", "Code Red (Ace) (sp.ACE) (set 4)", - "sp_coderd", "Code Red (Ace) (sp.ACE) (set 5)", - "sp_codere", "Code Red (Ace) (sp.ACE) (set 6)", - "sp_coderf", "Code Red (Ace) (sp.ACE) (set 7)", - "sp_coderg", "Code Red (Ace) (sp.ACE) (set 8)", - "sp_cpal", "Caesars Palace (Ace) (sp.ACE?)", - "sp_crime", "Crime Watch (Ace) (sp.ACE) (set 1)", - "sp_crimea", "Crime Watch (Ace) (sp.ACE) (set 2)", - "sp_crimeb", "Crime Watch (Ace) (sp.ACE) (set 3)", - "sp_crimec", "Crime Watch (Ace) (sp.ACE) (set 4)", - "sp_crimed", "Crime Watch (Ace) (sp.ACE) (set 5)", - "sp_crimee", "Crime Watch (Ace) (sp.ACE) (set 6)", - "sp_crimef", "Crime Watch (Ace) (sp.ACE) (set 7)", - "sp_crimeg", "Crime Watch (Ace) (sp.ACE) (set 8)", - "sp_crimeh", "Crime Watch (Ace) (sp.ACE) (set 9)", - "sp_criss", "Criss Cross Cash (Ace) (sp.ACE) (set 1)", - "sp_crissa", "Criss Cross Cash (Ace) (sp.ACE) (set 2)", - "sp_crissb", "Criss Cross Cash (Ace) (sp.ACE) (set 3)", - "sp_crissc", "Criss Cross Cash (Ace) (sp.ACE) (set 4)", - "sp_crissd", "Criss Cross Cash (Ace) (sp.ACE) (set 5)", - "sp_crisse", "Criss Cross Cash (Ace) (sp.ACE) (set 6)", - "sp_crissf", "Criss Cross Cash (Ace) (sp.ACE) (set 7)", - "sp_crissg", "Criss Cross Cash (Ace) (sp.ACE) (set 8)", - "sp_crun", "Cash Run (Crystal) (sp.ACE?) (set 1)", - "sp_cruna", "Cash Run (Crystal) (sp.ACE?) (set 2)", - "sp_crunb", "Cash Run (Crystal) (sp.ACE?) (set 3)", - "sp_daytr", "Daytripper (Ace) (sp.ACE) (set 1)", - "sp_daytra", "Daytripper (Ace) (sp.ACE) (set 2)", - "sp_daytrb", "Daytripper (Ace) (sp.ACE) (set 3)", - "sp_daytrc", "Daytripper (Ace) (sp.ACE) (set 4)", - "sp_donky", "Donkey Derby (Ace) (sp.ACE) (set 1)", - "sp_donkya", "Donkey Derby (Ace) (sp.ACE) (set 2)", - "sp_donkyb", "Donkey Derby (Ace) (sp.ACE) (set 3)", - "sp_donkyc", "Donkey Derby (Ace) (sp.ACE) (set 4)", - "sp_donkyd", "Donkey Derby (Ace) (sp.ACE) (set 5)", - "sp_donkye", "Donkey Derby (Ace) (sp.ACE) (set 6)", - "sp_donkyf", "Donkey Derby (Ace) (sp.ACE) (set 7)", - "sp_donkyg", "Donkey Derby (Ace) (sp.ACE) (set 8)", - "sp_dyour", "Double Your Money (Ace) (sp.ACE)", - "sp_emmrd", "Emmerdale (Ace) (sp.ACE) (set 1)", - "sp_emmrda", "Emmerdale (Ace) (sp.ACE) (set 2)", - "sp_emmrdb", "Emmerdale (Ace) (sp.ACE) (set 3)", - "sp_emmrdc", "Emmerdale (Ace) (sp.ACE) (set 4)", - "sp_emmrdd", "Emmerdale (Ace) (sp.ACE) (set 5)", - "sp_emmrde", "Emmerdale (Ace) (sp.ACE) (set 6)", - "sp_emmrdf", "Emmerdale (Ace) (sp.ACE) (set 7)", - "sp_emmrdg", "Emmerdale (Ace) (sp.ACE) (set 8)", - "sp_emmrdh", "Emmerdale (Ace) (sp.ACE) (set 9)", - "sp_emmrdi", "Emmerdale (Ace) (sp.ACE) (set 10)", - "sp_emmrdj", "Emmerdale (Ace) (sp.ACE) (set 11)", - "sp_emmrdk", "Emmerdale (Ace) (sp.ACE) (set 12)", - "sp_emmrdn", "Emmerdale (Ace) (sp.ACE) (set 15)", - "sp_emmrdo", "Emmerdale (Ace) (sp.ACE) (set 16)", - "sp_festi", "Festival (Spanish) (Ace) (sp.ACE)", - "sp_five", "Fiver Fever (Crystal) (sp.ACE?) (set 1)", - "sp_fivea", "Fiver Fever (Crystal) (sp.ACE?) (set 2)", - "sp_front", "Final Frontier (Bwb) (sp.ACE?)", - "sp_ghost", "Ghost Trapper (Ace) (sp.ACE) (set 1)", - "sp_ghosta", "Ghost Trapper (Ace) (sp.ACE) (set 2)", - "sp_ghostb", "Ghost Trapper (Ace) (sp.ACE) (set 3)", - "sp_ghostc", "Ghost Trapper (Ace) (sp.ACE) (set 4)", - "sp_ghostd", "Ghost Trapper (Ace) (sp.ACE) (set 5)", - "sp_ghoste", "Ghost Trapper (Ace) (sp.ACE) (set 6)", - "sp_ghostf", "Ghost Trapper (Ace) (sp.ACE) (set 7)", - "sp_ghostg", "Ghost Trapper (Ace) (sp.ACE) (set 8)", - "sp_ghosth", "Ghost Trapper (Ace) (sp.ACE) (set 9)", - "sp_ghosti", "Ghost Trapper (Ace) (sp.ACE) (set 10)", - "sp_ghostj", "Ghost Trapper (Ace) (sp.ACE) (set 11)", - "sp_ghostk", "Ghost Trapper (Ace) (sp.ACE) (set 12)", - "sp_ghostl", "Ghost Trapper (Ace) (sp.ACE) (set 13)", - "sp_ghostm", "Ghost Trapper (Ace) (sp.ACE) (set 14)", - "sp_ghostn", "Ghost Trapper (Ace) (sp.ACE) (set 15)", - "sp_ghosto", "Ghost Trapper (Ace) (sp.ACE) (set 16)", - "sp_ghostp", "Ghost Trapper (Ace) (sp.ACE) (set 17)", - "sp_ghostq", "Ghost Trapper (Ace) (sp.ACE) (set 18)", - "sp_ghostr", "Ghost Trapper (Ace) (sp.ACE) (set 19)", - "sp_ghosts", "Ghost Trapper (Ace) (sp.ACE) (set 20)", - "sp_globe", "Globe Trotter (Ace) (sp.ACE) (set 1)", - "sp_globea", "Globe Trotter (Ace) (sp.ACE) (set 2)", - "sp_globeb", "Globe Trotter (Ace) (sp.ACE) (set 3)", - "sp_globec", "Globe Trotter (Ace) (sp.ACE) (set 4)", - "sp_globed", "Globe Trotter (Ace) (sp.ACE) (set 5)", - "sp_globee", "Globe Trotter (Ace) (sp.ACE) (set 6)", - "sp_globef", "Globe Trotter (Ace) (sp.ACE) (set 7)", - "sp_globeg", "Globe Trotter (Ace) (sp.ACE) (set 8)", - "sp_gnat", "Grand National (Ace) (sp.ACE) (set 1)", - "sp_gnata", "Grand National (Ace) (sp.ACE) (set 2)", - "sp_gnatb", "Grand National (Ace) (sp.ACE) (set 3)", - "sp_gnatc", "Grand National (Ace) (sp.ACE) (set 4)", - "sp_gnatd", "Grand National (Ace) (sp.ACE) (set 5)", - "sp_gnate", "Grand National (Ace) (sp.ACE) (set 6)", - "sp_gnatf", "Grand National (Ace) (sp.ACE) (set 7)", - "sp_gnatg", "Grand National (Ace) (sp.ACE) (set 8)", - "sp_gnath", "Grand National (Ace) (sp.ACE) (set 9)", - "sp_gnati", "Grand National (Ace) (sp.ACE) (set 10)", - "sp_gnatj", "Grand National (Ace) (sp.ACE) (set 11)", - "sp_gnatk", "Grand National (Ace) (sp.ACE) (set 12)", - "sp_gnatl", "Grand National (Ace) (sp.ACE) (set 13)", - "sp_gnatm", "Grand National (Ace) (sp.ACE) (set 14)", - "sp_gnatn", "Grand National (Ace) (sp.ACE) (set 15)", - "sp_gnato", "Grand National (Ace) (sp.ACE) (set 16)", - "sp_gol", "Gol (Spanish) (Ace) (sp.ACE)", - "sp_golda", "Golden Arrow Club (Ace) (sp.ACE) (set 1)", - "sp_goldaa", "Golden Arrow Club (Ace) (sp.ACE) (set 2)", - "sp_goldm", "Golden Mile (Ace) (sp.ACE) (set 1)", - "sp_goldm0", "Golden Mile (Ace) (sp.ACE) (set 28)", - "sp_goldm1", "Golden Mile (Ace) (sp.ACE) (set 29)", - "sp_goldm2", "Golden Mile (Ace) (sp.ACE) (set 30)", - "sp_goldm3", "Golden Mile (Ace) (sp.ACE) (set 31)", - "sp_goldma", "Golden Mile (Ace) (sp.ACE) (set 2)", - "sp_goldmb", "Golden Mile (Ace) (sp.ACE) (set 3)", - "sp_goldmc", "Golden Mile (Ace) (sp.ACE) (set 4)", - "sp_goldmd", "Golden Mile (Ace) (sp.ACE) (set 5)", - "sp_goldme", "Golden Mile (Ace) (sp.ACE) (set 6)", - "sp_goldmf", "Golden Mile (Ace) (sp.ACE) (set 7)", - "sp_goldmg", "Golden Mile (Ace) (sp.ACE) (set 8)", - "sp_goldmh", "Golden Mile (Ace) (sp.ACE) (set 9)", - "sp_goldmi", "Golden Mile (Ace) (sp.ACE) (set 10)", - "sp_goldmj", "Golden Mile (Ace) (sp.ACE) (set 11)", - "sp_goldmk", "Golden Mile (Ace) (sp.ACE) (set 12)", - "sp_goldml", "Golden Mile (Ace) (sp.ACE) (set 13)", - "sp_goldmm", "Golden Mile (Ace) (sp.ACE) (set 14)", - "sp_goldmn", "Golden Mile (Ace) (sp.ACE) (set 15)", - "sp_goldmo", "Golden Mile (Ace) (sp.ACE) (set 16)", - "sp_goldmp", "Golden Mile (Ace) (sp.ACE) (set 17)", - "sp_goldmq", "Golden Mile (Ace) (sp.ACE) (set 18)", - "sp_goldmr", "Golden Mile (Ace) (sp.ACE) (set 19)", - "sp_goldms", "Golden Mile (Ace) (sp.ACE) (set 20)", - "sp_goldmt", "Golden Mile (Ace) (sp.ACE) (set 21)", - "sp_goldmu", "Golden Mile (Ace) (sp.ACE) (set 22)", - "sp_goldmv", "Golden Mile (Ace) (sp.ACE) (set 23)", - "sp_goldmw", "Golden Mile (Ace) (sp.ACE) (set 24)", - "sp_goldmx", "Golden Mile (Ace) (sp.ACE) (set 25)", - "sp_goldmy", "Golden Mile (Ace) (sp.ACE) (set 26)", - "sp_goldmz", "Golden Mile (Ace) (sp.ACE) (set 27)", - "sp_golds", "Golden Streak (Ace) (sp.ACE) (set 1)", - "sp_goldsa", "Golden Streak (Ace) (sp.ACE) (set 2)", - "sp_goldsb", "Golden Streak (Ace) (sp.ACE) (set 3)", - "sp_goldsc", "Golden Streak (Ace) (sp.ACE) (set 4)", - "sp_goldsd", "Golden Streak (Ace) (sp.ACE) (set 5)", - "sp_goldse", "Golden Streak (Ace) (sp.ACE) (set 6)", - "sp_goldsf", "Golden Streak (Ace) (sp.ACE) (set 7)", - "sp_goldsg", "Golden Streak (Ace) (sp.ACE) (set 8)", - "sp_goldsh", "Golden Streak (Ace) (sp.ACE) (set 9)", - "sp_goldt", "Golden Streak (Golden Touch) (Ace) (sp.ACE)", - "sp_gprix", "Grand Prix (Ace) (sp.ACE) (set 1)", - "sp_gprixa", "Grand Prix (Ace) (sp.ACE) (set 2)", - "sp_gprixb", "Grand Prix (Ace) (sp.ACE) (set 3)", - "sp_gprixc", "Grand Prix (Ace) (sp.ACE) (set 4)", - "sp_gprixd", "Grand Prix (Ace) (sp.ACE) (set 5)", - "sp_gprixe", "Grand Prix (Ace) (sp.ACE) (set 6)", - "sp_gprixf", "Grand Prix (Ace) (sp.ACE) (set 7)", - "sp_gprixg", "Grand Prix (Ace) (sp.ACE) (set 8)", - "sp_gprixh", "Grand Prix (Ace) (sp.ACE) (set 9)", - "sp_here", "Here We Go (Ace) (sp.ACE) (set 1)", - "sp_herea", "Here We Go (Ace) (sp.ACE) (set 2)", - "sp_hereb", "Here We Go (Ace) (sp.ACE) (set 3)", - "sp_herec", "Here We Go (Ace) (sp.ACE) (set 4)", - "sp_hered", "Here We Go (Ace) (sp.ACE) (set 5)", - "sp_heree", "Here We Go (Ace) (sp.ACE) (set 6)", - "sp_heref", "Here We Go (Ace) (sp.ACE) (set 7)", - "sp_hereg", "Here We Go (Ace) (sp.ACE) (set 8)", - "sp_hideh", "Hi De Hi (Ace) (sp.ACE) (set 1)", - "sp_hideha", "Hi De Hi (Ace) (sp.ACE) (set 2)", - "sp_hidehb", "Hi De Hi (Ace) (sp.ACE) (set 3)", - "sp_hidehc", "Hi De Hi (Ace) (sp.ACE) (set 4)", - "sp_hidehd", "Hi De Hi (Ace) (sp.ACE) (set 5)", - "sp_hidehe", "Hi De Hi (Ace) (sp.ACE) (set 6)", - "sp_hidehf", "Hi De Hi (Ace) (sp.ACE) (set 7)", - "sp_hidehg", "Hi De Hi (Ace) (sp.ACE) (set 8)", - "sp_hidehh", "Hi De Hi (Ace) (sp.ACE) (set 9)", - "sp_hidehi", "Hi De Hi (Ace) (sp.ACE) (set 10)", - "sp_hidehj", "Hi De Hi (Ace) (sp.ACE) (set 11)", - "sp_hidehk", "Hi De Hi (Ace) (sp.ACE) (set 12)", - "sp_hidehl", "Hi De Hi (Ace) (sp.ACE) (set 13)", - "sp_hidehm", "Hi De Hi (Ace) (sp.ACE) (set 14)", - "sp_hidehn", "Hi De Hi (Ace) (sp.ACE) (set 15)", - "sp_hideho", "Hi De Hi (Ace) (sp.ACE) (set 16)", - "sp_hidehp", "Hi De Hi (Ace) (sp.ACE) (set 17)", - "sp_hifly", "Hi Flyer (Ace) (sp.ACE) (set 1)", - "sp_hiflya", "Hi Flyer (Ace) (sp.ACE) (set 2)", - "sp_hiflyb", "Hi Flyer (Ace) (sp.ACE) (set 3)", - "sp_hiflyc", "Hi Flyer (Ace) (sp.ACE) (set 4)", - "sp_hiflyd", "Hi Flyer (Ace) (sp.ACE) (set 5)", - "sp_hiflye", "Hi Flyer (Ace) (sp.ACE) (set 6)", - "sp_hiflyf", "Hi Flyer (Ace) (sp.ACE) (set 7)", - "sp_hiflyg", "Hi Flyer (Ace) (sp.ACE) (set 8)", - "sp_hiflyh", "Hi Flyer (Ace) (sp.ACE) (set 9)", - "sp_hiflyi", "Hi Flyer (Ace) (sp.ACE) (set 10)", - "sp_hiflyj", "Hi Flyer (Ace) (sp.ACE) (set 11)", - "sp_hiflyk", "Hi Flyer (Ace) (sp.ACE) (set 12)", - "sp_hiflyl", "Hi Flyer (Ace) (sp.ACE) (set 13)", - "sp_hiflym", "Hi Flyer (Ace) (sp.ACE) (set 14)", - "sp_hiflyn", "Hi Flyer (Ace) (sp.ACE) (set 15)", - "sp_hiflyo", "Hi Flyer (Ace) (sp.ACE) (set 16)", - "sp_hiflyp", "Hi Flyer (Ace) (sp.ACE) (set 17)", - "sp_holid", "Holiday Club (Ace) (sp.ACE) (set 1)", - "sp_holida", "Holiday Club (Ace) (sp.ACE) (set 2)", - "sp_juras", "Jurassic Trail (Ace) (sp.ACE)", - "sp_lotto", "Lotto (Spanish) (Ace) (sp.ACE)", - "sp_magmo", "Magic Money (Ace) (sp.ACE) (set 1)", - "sp_magmoa", "Magic Money (Ace) (sp.ACE) (set 2)", - "sp_magmob", "Magic Money (Ace) (sp.ACE) (set 3)", - "sp_magmoc", "Magic Money (Ace) (sp.ACE) (set 4)", - "sp_magmod", "Magic Money (Ace) (sp.ACE) (set 5)", - "sp_megmo", "Mega Money (Ace) (sp.ACE) (set 1)", - "sp_megmoa", "Mega Money (Ace) (sp.ACE) (set 2)", - "sp_megmob", "Mega Money (Ace) (sp.ACE) (set 3)", - "sp_megmoc", "Mega Money (Ace) (sp.ACE) (set 4)", - "sp_megmod", "Mega Money (Ace) (sp.ACE) (set 5)", - "sp_megmoe", "Mega Money (Ace) (sp.ACE) (set 6)", - "sp_megmof", "Mega Money (Ace) (sp.ACE) (set 7)", - "sp_megmog", "Mega Money (Ace) (sp.ACE) (set 8)", - "sp_monma", "Money Magic (Ace) (sp.ACE) (set 1)", - "sp_monmaa", "Money Magic (Ace) (sp.ACE) (set 2)", - "sp_monmab", "Money Magic (Ace) (sp.ACE) (set 3)", - "sp_monmac", "Money Magic (Ace) (sp.ACE) (set 4)", - "sp_monmad", "Money Magic (Ace) (sp.ACE) (set 5)", - "sp_monmo", "Money Mountain (Ace) (sp.ACE) (set 1)", - "sp_monmoa", "Money Mountain (Ace) (sp.ACE) (set 2)", - "sp_monmob", "Money Mountain (Ace) (sp.ACE) (set 3)", - "sp_monmoc", "Money Mountain (Ace) (sp.ACE) (set 4)", - "sp_monmod", "Money Mountain (Ace) (sp.ACE) (set 5)", - "sp_monmoe", "Money Mountain (Ace) (sp.ACE) (set 6)", - "sp_monmof", "Money Mountain (Ace) (sp.ACE) (set 7)", - "sp_monmog", "Money Mountain (Ace) (sp.ACE) (set 8)", - "sp_nudex", "Nudge Explosion (Ace) (sp.ACE) (set 1)", - "sp_nudexa", "Nudge Explosion (Ace) (sp.ACE) (set 2)", - "sp_onbox", "On The Box (Ace) (sp.ACE) (set 1)", - "sp_onboxa", "On The Box (Ace) (sp.ACE) (set 2)", - "sp_onboxb", "On The Box (Ace) (sp.ACE) (set 3)", - "sp_onboxc", "On The Box (Ace) (sp.ACE) (set 4)", - "sp_onboxd", "On The Box (Ace) (sp.ACE) (set 5)", - "sp_onboxe", "On The Box (Ace) (sp.ACE) (set 6)", - "sp_onboxf", "On The Box (Ace) (sp.ACE) (set 7)", - "sp_onboxg", "On The Box (Ace) (sp.ACE) (set 8)", - "sp_onboxh", "On The Box (Ace) (sp.ACE) (set 9)", - "sp_onboxi", "On The Box (Ace) (sp.ACE) (set 10)", - "sp_onboxj", "On The Box (Ace) (sp.ACE) (set 11)", - "sp_onboxk", "On The Box (Ace) (sp.ACE) (set 12)", - "sp_onboxl", "On The Box (Ace) (sp.ACE) (set 13)", - "sp_onboxm", "On The Box (Ace) (sp.ACE) (set 14)", - "sp_onboxn", "On The Box (Ace) (sp.ACE) (set 15)", - "sp_openb", "Open The Box (Ace) (sp.ACE) (set 1)", - "sp_openba", "Open The Box (Ace) (sp.ACE) (set 2)", - "sp_openbb", "Open The Box (Ace) (sp.ACE) (set 3)", - "sp_openbc", "Open The Box (Ace) (sp.ACE) (set 4)", - "sp_openbd", "Open The Box (Ace) (sp.ACE) (set 5)", - "sp_openbe", "Open The Box (Ace) (sp.ACE) (set 6)", - "sp_openbf", "Open The Box (Ace) (sp.ACE) (set 7)", - "sp_openbg", "Open The Box (Ace) (sp.ACE) (set 8)", - "sp_openbh", "Open The Box (Ace) (sp.ACE) (set 9)", - "sp_openbi", "Open The Box (Ace) (sp.ACE) (set 10)", - "sp_payrs", "Payrise (Ace) (sp.ACE) (set 1)", - "sp_payrsa", "Payrise (Ace) (sp.ACE) (set 2)", - "sp_payrsb", "Payrise (Ace) (sp.ACE) (set 3)", - "sp_payrsc", "Payrise (Ace) (sp.ACE) (set 4)", - "sp_payrsd", "Payrise (Ace) (sp.ACE) (set 5)", - "sp_payrse", "Payrise (Ace) (sp.ACE) (set 6)", - "sp_payrsf", "Payrise (Ace) (sp.ACE) (set 7)", - "sp_payrsg", "Payrise (Ace) (sp.ACE) (set 8)", - "sp_payrsh", "Payrise (Ace) (sp.ACE) (set 9)", - "sp_piste", "On The Piste (Ace) (sp.ACE) (set 1)", - "sp_pistea", "On The Piste (Ace) (sp.ACE) (set 2)", - "sp_pisteb", "On The Piste (Ace) (sp.ACE) (set 3)", - "sp_pistec", "On The Piste (Ace) (sp.ACE) (set 4)", - "sp_pisted", "On The Piste (Ace) (sp.ACE) (set 5)", - "sp_pistee", "On The Piste (Ace) (sp.ACE) (set 6)", - "sp_pistef", "On The Piste (Ace) (sp.ACE) (set 7)", - "sp_pisteg", "On The Piste (Ace) (sp.ACE) (set 8)", - "sp_pisteh", "On The Piste (Ace) (sp.ACE) (set 9)", - "sp_pistei", "On The Piste (Ace) (sp.ACE) (set 10)", - "sp_pistej", "On The Piste (Ace) (sp.ACE) (set 11)", - "sp_pistek", "On The Piste (Ace) (sp.ACE) (set 12)", - "sp_pistel", "On The Piste (Ace) (sp.ACE) (set 13)", - "sp_pistem", "On The Piste (Ace) (sp.ACE) (set 14)", - "sp_pisten", "On The Piste (Ace) (sp.ACE) (set 15)", - "sp_pisteo", "On The Piste (Ace) (sp.ACE) (set 16)", - "sp_pistep", "On The Piste (Ace) (sp.ACE) (set 17)", - "sp_playa", "Play It Again (Ace) (sp.ACE) (set 1)", - "sp_playaa", "Play It Again (Ace) (sp.ACE) (set 2)", - "sp_playab", "Play It Again (Ace) (sp.ACE) (set 3)", - "sp_playac", "Play It Again (Ace) (sp.ACE) (set 4)", - "sp_playad", "Play It Again (Ace) (sp.ACE) (set 5)", - "sp_playae", "Play It Again (Ace) (sp.ACE) (set 6)", - "sp_playaf", "Play It Again (Ace) (sp.ACE) (set 7)", - "sp_playag", "Play It Again (Ace) (sp.ACE) (set 8)", - "sp_playah", "Play It Again (Ace) (sp.ACE) (set 9)", - "sp_playai", "Play It Again (Ace) (sp.ACE) (set 10)", - "sp_pound", "Pound For Pound (Ace) (sp.ACE) (set 1)", - "sp_pounda", "Pound For Pound (Ace) (sp.ACE) (set 2)", - "sp_poundb", "Pound For Pound (Ace) (sp.ACE) (set 3)", - "sp_poundbwb", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 1)", - "sp_poundbwba", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 2)", - "sp_poundbwbb", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 3)", - "sp_poundbwbc", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 4)", - "sp_poundbwbd", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 5)", - "sp_poundbwbe", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 6)", - "sp_poundbwbf", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 7)", - "sp_poundbwbg", "Pound For Pound (Ace/Bwb) (sp.ACE) (set 8)", - "sp_poundc", "Pound For Pound (Ace) (sp.ACE) (set 4)", - "sp_poundd", "Pound For Pound (Ace) (sp.ACE) (set 5)", - "sp_pounde", "Pound For Pound (Ace) (sp.ACE) (set 6)", - "sp_poundf", "Pound For Pound (Ace) (sp.ACE) (set 7)", - "sp_poundg", "Pound For Pound (Ace) (sp.ACE) (set 8)", - "sp_poundh", "Pound For Pound (Ace) (sp.ACE) (set 9)", - "sp_poundi", "Pound For Pound (Ace) (sp.ACE) (set 10)", - "sp_poundj", "Pound For Pound (Ace) (sp.ACE) (set 11)", - "sp_poundk", "Pound For Pound (Ace) (sp.ACE) (set 12)", - "sp_poundl", "Pound For Pound (Ace) (sp.ACE) (set 13)", - "sp_poundm", "Pound For Pound (Ace) (sp.ACE) (set 14)", - "sp_poundn", "Pound For Pound (Ace) (sp.ACE) (set 15)", - "sp_poundo", "Pound For Pound (Ace) (sp.ACE) (set 16)", - "sp_poundp", "Pound For Pound (Ace) (sp.ACE) (set 17)", - "sp_przna", "Prize National (Ace) (sp.ACE) (set 1)", - "sp_prznaa", "Prize National (Ace) (sp.ACE) (set 2)", - "sp_prznab", "Prize National (Ace) (sp.ACE) (set 3)", - "sp_prznac", "Prize National (Ace) (sp.ACE) (set 4)", - "sp_prznad", "Prize National (Ace) (sp.ACE) (set 5)", - "sp_prznae", "Prize National (Ace) (sp.ACE) (set 6)", - "sp_prznaf", "Prize National (Ace) (sp.ACE) (set 7)", - "sp_prznag", "Prize National (Ace) (sp.ACE) (set 8)", - "sp_road", "Road To Hell (Ace) (sp.ACE)", - "sp_roof", "Thru' The Roof (Ace) (sp.ACE) (set 1)", - "sp_roofa", "Thru' The Roof (Ace) (sp.ACE) (set 2)", - "sp_skylm", "Sky's The Limit Club, The (Ace) (sp.ACE) (set 1)", - "sp_skylma", "Sky's The Limit Club, The (Ace) (sp.ACE) (set 2)", - "sp_spell", "Spellbound (Ace) (sp.ACE) (set 1)", - "sp_spella", "Spellbound (Ace) (sp.ACE) (set 2)", - "sp_spellb", "Spellbound (Ace) (sp.ACE) (set 3)", - "sp_spellc", "Spellbound (Ace) (sp.ACE) (set 4)", - "sp_spelld", "Spellbound (Ace) (sp.ACE) (set 5)", - "sp_spelle", "Spellbound (Ace) (sp.ACE) (set 6)", - "sp_spellf", "Spellbound (Ace) (sp.ACE) (set 7)", - "sp_spellg", "Spellbound (Ace) (sp.ACE) (set 8)", - "sp_spelli", "Spellbound (Ace) (sp.ACE) (set 10)", - "sp_spellj", "Spellbound (Ace) (sp.ACE) (set 11)", - "sp_swop", "Swop Shop (Ace) (sp.ACE) (set 1)", - "sp_swopa", "Swop Shop (Ace) (sp.ACE) (set 2)", - "sp_swopb", "Swop Shop (Ace) (sp.ACE) (set 3)", - "sp_swopc", "Swop Shop (Ace) (sp.ACE) (set 4)", - "sp_swopd", "Swop Shop (Ace) (sp.ACE) (set 5)", - "sp_swope", "Swop Shop (Ace) (sp.ACE) (set 6)", - "sp_swopf", "Swop Shop (Ace) (sp.ACE) (set 7)", - "sp_swopg", "Swop Shop (Ace) (sp.ACE) (set 8)", - "sp_timem", "Time Machine (Ace) (sp.ACE) (set 1)", - "sp_timema", "Time Machine (Ace) (sp.ACE) (set 2)", - "sp_timemb", "Time Machine (Ace) (sp.ACE) (set 3)", - "sp_timemc", "Time Machine (Ace) (sp.ACE) (set 4)", - "sp_timemd", "Time Machine (Ace) (sp.ACE) (set 5)", - "sp_timeme", "Time Machine (Ace) (sp.ACE) (set 6)", - "sp_timemf", "Time Machine (Ace) (sp.ACE) (set 7)", - "sp_timemg", "Time Machine (Ace) (sp.ACE) (set 8)", - "sp_timemh", "Time Machine (Ace) (sp.ACE) (set 9)", - "sp_timemi", "Time Machine (Ace) (sp.ACE) (set 10)", - "sp_timemj", "Time Machine (Ace) (sp.ACE) (set 11)", - "sp_timemk", "Time Machine (Ace) (sp.ACE) (set 12)", - "sp_tkpik", "Take Your Pick (Ace) (sp.ACE) (set 1)", - "sp_tkpika", "Take Your Pick (Ace) (sp.ACE) (set 2)", - "sp_tkpikb", "Take Your Pick (Ace) (sp.ACE) (set 3)", - "sp_tkpikc", "Take Your Pick (Ace) (sp.ACE) (set 4)", - "sp_tkpikd", "Take Your Pick (Ace) (sp.ACE) (set 5)", - "sp_tkpike", "Take Your Pick (Ace) (sp.ACE) (set 6)", - "sp_tkpikf", "Take Your Pick (Ace) (sp.ACE) (set 7)", - "sp_tz", "Twilight Zone (Ace) (sp.ACE) (set 1)", - "sp_tza", "Twilight Zone (Ace) (sp.ACE) (set 2)", - "sp_tzb", "Twilight Zone (Ace) (sp.ACE) (set 3)", - "sp_tzbwb", "Twilight Zone (Ace/Bwb) (sp.ACE)", - "sp_tzc", "Twilight Zone (Ace) (sp.ACE) (set 4)", - "sp_tzd", "Twilight Zone (Ace) (sp.ACE) (set 5)", - "sp_tze", "Twilight Zone (Ace) (sp.ACE) (set 6)", - "sp_tzf", "Twilight Zone (Ace) (sp.ACE) (set 7)", - "sp_tzfe", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 1)", - "sp_tzfea", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 2)", - "sp_tzfeb", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 3)", - "sp_tzfec", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 4)", - "sp_tzfed", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 5)", - "sp_tzfee", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 6)", - "sp_tzfef", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 7)", - "sp_tzfeg", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 8)", - "sp_tzfeh", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 9)", - "sp_tzfei", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 10)", - "sp_tzfej", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 11)", - "sp_tzfek", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 12)", - "sp_tzfel", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 13)", - "sp_tzfem", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 14)", - "sp_tzfen", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 15)", - "sp_tzfeo", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 16)", - "sp_tzfep", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 17)", - "sp_tzfeq", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 18)", - "sp_tzfer", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 19)", - "sp_tzfes", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 20)", - "sp_tzfet", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 21)", - "sp_tzfeu", "Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 22)", - "sp_tzg", "Twilight Zone (Ace) (sp.ACE) (set 8)", - "sp_tzh", "Twilight Zone (Ace) (sp.ACE) (set 9)", - "sp_woolp", "Woolpack (Ace) (sp.ACE) (set 1)", - "sp_woolpa", "Woolpack (Ace) (sp.ACE) (set 2)", - "sp_woolpb", "Woolpack (Ace) (sp.ACE) (set 3)", - "sp_woolpc", "Woolpack (Ace) (sp.ACE) (set 4)", - "sp_woolpd", "Woolpack (Ace) (sp.ACE) (set 5)", - "sp_woolpe", "Woolpack (Ace) (sp.ACE) (set 6)", - "sp_woolpf", "Woolpack (Ace) (sp.ACE) (set 7)", - "sp_woolpg", "Woolpack (Ace) (sp.ACE) (set 8)", - "sp_woolph", "Woolpack (Ace) (sp.ACE) (set 9)", - "sp_woolpi", "Woolpack (Ace) (sp.ACE) (set 10)", - "sp_woolpj", "Woolpack (Ace) (sp.ACE) (set 11)", - "sp_woolpk", "Woolpack (Ace) (sp.ACE) (set 12)", - "sp_woolpl", "Woolpack (Ace) (sp.ACE) (set 13)", - "sp_woolpm", "Woolpack (Ace) (sp.ACE) (set 14)", - "sp_woolpn", "Woolpack (Ace) (sp.ACE) (set 15)", - "sp_woolpo", "Woolpack (Ace) (sp.ACE) (set 16)", - "sp_zigzg", "Zig Zag (Ace) (sp.ACE) (set 1)", - "sp_zigzga", "Zig Zag (Ace) (sp.ACE) (set 2)", - "sp_zigzgb", "Zig Zag (Ace) (sp.ACE) (set 3)", - "sp_zigzgc", "Zig Zag (Ace) (sp.ACE) (set 4)", - "sp_zigzgd", "Zig Zag (Ace) (sp.ACE) (set 5)", - "sp_zigzge", "Zig Zag (Ace) (sp.ACE) (set 6)", - "sp_zigzgf", "Zig Zag (Ace) (sp.ACE) (set 7)", - "sp_zigzgg", "Zig Zag (Ace) (sp.ACE) (set 8)", - "sp_zigzgh", "Zig Zag (Ace) (sp.ACE) (set 9)", - "sp_zigzgi", "Zig Zag (Ace) (sp.ACE) (set 10)", - "sp_zigzgj", "Zig Zag (Ace) (sp.ACE) (set 11)", - "sp_zigzgk", "Zig Zag (Ace) (sp.ACE) (set 12)", - "sp_zigzgl", "Zig Zag (Ace) (sp.ACE) (set 13)", - "sp_zigzgm", "Zig Zag (Ace) (sp.ACE) (set 14)", - "spacbat2", "Space Battle (bootleg set 2)", - "spacbatt", "Space Battle (bootleg set 1)", - "spacbeam", "Space Beam", - "spacduel", "Space Duel", - "spacea91", "Space Ace (DL2 Conversion) (US v1.3)", - "spacea91_13e", "Space Ace (DL2 Conversion) (Euro v1.3)", - "spaceace", "Space Ace (US Rev. A3)", - "spaceacea", "Space Ace (US Rev. A)", - "spaceacea2", "Space Ace (US Rev. A2)", - "spaceaceeuro", "Space Ace (European)", - "spaceat2", "Space Attack II (bootleg of Super Invaders)", - "spaceatt", "Space Attack (bootleg of Space Invaders)", - "spacebrd", "Space Bird (bootleg)", - "spacecho", "Space Echo (set 1)", - "spacecho2", "Space Echo (set 2)", - "spacecom", "Space Combat (bootleg of Space Invaders)", - "spacecr", "Space Cruiser", - "spacecty", "Space City", - "spacedem", "Space Demon", - "spacedx", "Space Invaders DX (US, v2.1)", - "spacedxj", "Space Invaders DX (Japan, v2.1)", - "spacedxo", "Space Invaders DX (Japan, v2.0)", - "spacefb", "Space Firebird (rev. 04-u)", - "spacefba", "Space Firebird (rev. 02-a)", - "spacefbb", "Space Firebird (bootleg)", - "spacefbe", "Space Firebird (rev. 03-e set 1)", - "spacefbe2", "Space Firebird (rev. 03-e set 2)", - "spacefbg", "Space Firebird (Gremlin)", - "spacefev", "Space Fever (New Ver.)", - "spacefevo", "Space Fever (Old Ver.)", - "spacefevo2", "Space Fever (Older Ver.)", - "spacefrt", "Space Fortress (CVS)", - "spaceftr", "Space Fortress (Zaccaria)", - "spaceg", "Space Guerrilla", - "spacegun", "Space Gun (World)", - "spacegunj", "Space Gun (Japan)", - "spacegunu", "Space Gun (US)", - "spacehaw", "Space Hawks", - "spaceint", "Space Intruder", - "spaceintj", "Space Intruder (Japan)", - "spaceinv", "Space Invaders", - "spacejam", "Space Jam", - "spacejmf", "Space Jam (France)", - "spacejmg", "Space Jam (Germany)", - "spacejmi", "Space Jam (Italy)", - "spacelnc", "Space Launcher", - "spacempr", "Space Empire (bootleg)", - "spaceod", "Space Odyssey (version 2)", - "spaceod2", "Space Odyssey (version 1)", - "spaceph", "Space Phantoms (bootleg of Ozma Wars)", - "spacepir", "Space Pirates v2.2", - "spaceplt", "Space Pilot", - "spacerng", "Space Ranger (bootleg of Space Invaders)", - "spaceshp", "Space Ship", - "spaceskr", "Space Seeker", - "spacetrk", "Space Trek (upright)", - "spacetrkc", "Space Trek (cocktail)", - "spacewar", "Space Wars", - "spacewin", "Scacco Matto / Space Win", - "spacewr3", "Space War Part 3", - "spacezap", "Space Zap", - "spacfury", "Space Fury (revision C)", - "spacfurya", "Space Fury (revision A)", - "spacfuryb", "Space Fury (revision B)", - "spacmiss", "Space Missile - Space Fighting Game", - "spacwalk", "Space Walk", - "spain82", "Spain '82", - "spang", "Super Pang (World 900914)", - "spangbl", "Super Pang (World 900914, bootleg)", - "spangj", "Super Pang (Japan 901023)", - "sparkman", "Spark Man (v2.0, set 1)", - "sparkmana", "Spark Man (v2.0, set 2)", - "sparkz", "Sparkz (prototype)", - "spartanx", "Spartan X (Japan)", - "spatter", "Spatter", - "spawn", "Spawn In the Demon's Hand (JPN, USA, EUR, ASI, AUS) (Rev B)", - "spbactn", "Super Pinball Action (US)", - "spbactnj", "Super Pinball Action (Japan)", - "spbactnp", "Super Pinball Action (prototype)", - "spcdrag", "Space Dragon (Moon Cresta bootleg, set 1)", - "spcdraga", "Space Dragon (Moon Cresta bootleg, set 2)", - "spceking", "Space King", - "spcenctr", "Space Encounters", - "spcewarl", "Space War (Leijac Corporation)", - "spcewars", "Space War (Sanritsu)", - "spcforc2", "Space Force (set 2)", - "spcforce", "Space Force (set 1)", - "spcfrcii", "Special Forces II", - "spcgambl", "Space Gambler", - "spcinv95", "Space Invaders '95: The Attack Of Lunar Loonies (Ver 2.5O 1995/06/14)", - "spcinv95u", "Space Invaders '95: The Attack Of Lunar Loonies (Ver 2.5A 1995/06/14)", - "spcinvdj", "Space Invaders DX (Ver 2.6J 1994/09/14) (F3 Version)", - "spcking2", "Space King 2", - "spclaser", "Space Laser", - "spclforc", "Special Forces", - "spclords", "Space Lords (rev C)", - "spclordsa", "Space Lords (rev A)", - "spclordsb", "Space Lords (rev B)", - "spclordsg", "Space Lords (rev A, German)", - "spcpostn", "Space Position (Japan)", - "spcrider", "Space Riders", - "spctbird", "Space Thunderbird", - "spdball", "Speed Ball - Contest at Neonworld (prototype)", - "spdcoin", "Speed Coin (prototype)", - "spdodgeb", "Super Dodge Ball (US)", - "speakesy", "Speakeasy", - "speakesy4p", "Speakeasy 4 Player", - "speakres", "Speak & Rescue", - "speakresb", "Speak & Rescue (bootleg)", - "spec2k", "Spectrum 2000 (Euro)", - "spec2kv", "Spectrum 2000 (vertical)", - "specforc", "Special Force", - "specfrce", "Special Forces Elite Training", - "spectar", "Spectar (revision 3)", - "spectar1", "Spectar (revision 1?)", - "spectra", "Spectra IV", - "spectrm", "Spectrum", - "spectrm4", "Spectrum (ver 4)", - "speedatk", "Speed Attack! (Japan)", - "speedbal", "Speed Ball", - "speeddrp", "Speed Drop (Ver. 1.06)", - "speeddrv", "Speed Driver", - "speedfrk", "Speed Freak", - "speedrcr", "Speed Racer", - "speedspn", "Speed Spin", - "speedup", "Speed Up (Version 1.20)", - "speglsht", "Super Eagle Shot", - "spellbnd", "Spellbound", - "spelunk2", "Spelunker II", - "spelunkr", "Spelunker", - "spelunkrj", "Spelunker (Japan)", - "spf2t", "Super Puzzle Fighter II Turbo (USA 960620)", - "spf2ta", "Super Puzzle Fighter II Turbo (Asia 960529)", - "spf2td", "Super Puzzle Fighter II Turbo (USA 960620 Phoenix Edition) (bootleg)", - "spf2th", "Super Puzzle Fighter II Turbo (Hispanic 960531)", - "spf2xj", "Super Puzzle Fighter II X (Japan 960531)", - "spf2xjd", "Super Puzzle Fighter II X (Japan 960531 Phoenix Edition) (bootleg)", - "spfghmk2", "Space Fighter Mark II (set 1)", - "spfghmk22", "Space Fighter Mark II (set 2)", - "spicaadv", "Spica Adventure (v2.03J)", - "spiceup", "Spice It Up (Konami Endeavour)", - "spidermn", "The Amazing Spider-Man", - "spiders", "Spiders (set 1)", - "spiders2", "Spiders (set 2)", - "spiders3", "Spiders (set 3)", - "spidman", "Spider-Man: The Videogame (World)", - "spidmanj", "Spider-Man: The Videogame (Japan)", - "spidmanu", "Spider-Man: The Videogame (US)", - "spielbud", "Spiel Bude (German)", - "spiero", "Super Pierrot (Japan)", - "spikeofe", "Spikeout Final Edition", - "spikeout", "Spikeout (Revision C)", - "spiker", "Spiker", - "spiker2", "Spiker (5/5/86)", - "spiker3", "Spiker (6/9/86)", - "spikes91", "1991 Spikes (Italian bootleg, set 1)", - "spikes91b", "1991 Spikes (Italian bootleg, set 2)", - "spinkick", "Hec's Spinkick", - "spinlbrk", "Spinal Breakers (World)", - "spinlbrkj", "Spinal Breakers (Japan)", - "spinlbrku", "Spinal Breakers (US)", - "spinmast", "Spin Master / Miracle Adventure", - "spinner", "Spinner", - "spirit", "Spirit", - "spitboss", "Super Pit Boss (9221-02A)", - "spk115it", "Super Poker (v115IT)", - "spk116it", "Super Poker (v116IT)", - "spkrbtl", "Spikers Battle (GDS-0005)", - "spkrform", "Super Poker (v100xD03) / Formosa", - "splash", "Splash! (Ver. 1.2 World)", - "splash10", "Splash! (Ver. 1.0 World)", - "splat", "Splat!", - "splatter", "Splatter House (World, new version (SH3))", - "splatter2", "Splatter House (World, old version (SH2))", - "splatterj", "Splatter House (Japan, SH1)", - "splitsec", "Split Second", - "splmastr", "Spell Master (Russia) (Atronic)", - "splndrbt", "Splendor Blast", - "spnchout", "Super Punch-Out!!", - "spnchoutj", "Super Punch-Out!! (Japan)", - "spooky", "Spooky Night 2nd Edition (Version 2.0.4)", - "spookyi", "Spooky (Italian speech)", - "spookyo", "Spooky Night (Version 1.0.1)", - "spookyp", "Spooky", - "spool3", "Super Pool III (English)", - "spool3i", "Super Pool III (I-Vics)", - "spool99", "Super Pool 99 (Version 0.36)", - "spool99a", "Super Pool 99 (Version 0.33)", - "spool99b", "Super Pool 99 (Version 0.31)", - "spool99c", "Super Pool 99 (Version 0.26)", - "spotty", "Spotty (Ver. 2.0.2)", - "sprbreak", "Spring Break", - "sprbreaks", "Spring Break (single ball game)", - "sprcros2", "Super Cross II (Japan, set 1)", - "sprcros2a", "Super Cross II (Japan, set 2)", - "sprglbpg", "Super Glob (Pac-Man hardware) (German bootleg)", - "sprglobp", "Super Glob (Pac-Man hardware)", - "springbd", "Springboard (bootleg of Circus)", - "springer", "Springer", - "sprint1", "Sprint 1", - "sprint2", "Sprint 2 (set 1)", - "sprint2a", "Sprint 2 (set 2)", - "sprint2h", "Sprint 2 (color kit, Italy)", - "sprint4", "Sprint 4 (set 1)", - "sprint4a", "Sprint 4 (set 2)", - "sprint8", "Sprint 8", - "sprint8a", "Sprint 8 (play tag & chase)", - "sprk_090", "South Park (0.90)", - "sprk_096", "South Park (0.96)", - "sprk_103", "South Park (1.03)", - "sprtauth", "Sports Authority", - "sprtjam", "Sports Jam (GDS-0003)", - "sprtmtch", "Sports Match", - "sprtshot", "Sports Shooting USA", - "spss4240", "S-Plus (SS4240) Coral Reef", - "spstn_l5", "Space Station (L-5)", - "spuzbobl", "Super Puzzle Bobble (V2.05O)", - "spuzboblj", "Super Puzzle Bobble (V2.04J)", - "spy", "S.P.Y. - Special Project Y (World ver. N)", - "spyhunt", "Spy Hunter", - "spyhunt2", "Spy Hunter II (rev 2)", - "spyhunt2a", "Spy Hunter II (rev 1)", - "spyhuntp", "Spy Hunter (Playtronic license)", - "spyhuntpr", "Spy Hunter (Spain, Recreativos Franco S.A. PCB)", - "spyhuntr", "Spy Hunter (Pinball)", - "spyu", "S.P.Y. - Special Project Y (US ver. M)", - "sqbert", "Faster, Harder, More Challenging Q*bert (prototype)", - "sqix", "Super Qix (World, Rev 2)", - "sqixb1", "Super Qix (bootleg set 1)", - "sqixb2", "Super Qix (bootleg set 2)", - "sqixr1", "Super Qix (World, Rev 1)", - "sqixu", "Super Qix (US)", - "squaitsa", "Squash (Itisa)", - "squash", "Squash (Ver. 1.0)", - "sraider", "Space Raider", - "srally2", "Sega Rally 2", - "srally2x", "Sega Rally 2 DX", - "srallyc", "Sega Rally Championship - TWIN (Revision C)", - "srallyca", "Sega Rally Championship - DX (Revision A)", - "srallycb", "Sega Rally Championship - TWIN (Revision B)", - "sranger", "Super Ranger (v2.0)", - "srangerb", "Super Ranger (older, bootleg)", - "srangern", "Super Ranger (older, NOVA license)", - "srangero", "Super Ranger (older)", - "srangerw", "Super Ranger (older, WDK license)", - "srdarwin", "Super Real Darwin (World)", - "srdarwinj", "Super Real Darwin (Japan)", - "srdmissn", "S.R.D. Mission", - "srmdb", "Sunset Riders (bootleg of Megadrive version)", - "srmp1", "Super Real Mahjong Part 1 (Japan)", - "srmp2", "Super Real Mahjong Part 2 (Japan)", - "srmp3", "Super Real Mahjong Part 3 (Japan)", - "srmp4", "Super Real Mahjong PIV (Japan)", - "srmp4o", "Super Real Mahjong PIV (Japan, older set)", - "srmp5", "Super Real Mahjong P5", - "srmp6", "Super Real Mahjong P6 (Japan)", - "srmp7", "Super Real Mahjong P7 (Japan)", - "srmvs", "Super Real Mahjong VS", - "srumbler", "The Speed Rumbler (set 1)", - "srumbler2", "The Speed Rumbler (set 2)", - "srumbler3", "The Speed Rumbler (set 3)", - "sryudens", "Mahjong Seiryu Densetsu (Japan, NM502)", - "ss2005", "Super Shanghai 2005 (GDL-0031)", - "ss2005a", "Super Shanghai 2005 (Rev A) (GDL-0031A)", - "ss_01", "Scared Stiff (D0.1R with sound rev.25)", - "ss_03", "Scared Stiff (0.3)", - "ss_12", "Scared Stiff (1.2)", - "ss_14", "Scared Stiff (1.4)", - "ss_15", "Scared Stiff (1.5)", - "ssanchan", "Sanrin San Chan (Japan)", - "sscandal", "Seishun Scandal (315-5132, Japan)", - "sscope", "Silent Scope (ver xxD, Ver 1.33)", - "sscope2", "Silent Scope 2", - "sscopea", "Silent Scope (ver xxA, Ver 1.00)", - "sscopeb", "Silent Scope (ver xxB, Ver 1.20)", - "sscopec", "Silent Scope (ver xxC, Ver 1.30)", - "sscopex", "Silent Scope EX (ver UAA)", - "ssf2", "Super Street Fighter II: The New Challengers (World 930911)", - "ssf2a", "Super Street Fighter II: The New Challengers (Asia 931005)", - "ssf2ar1", "Super Street Fighter II: The New Challengers (Asia 930914)", - "ssf2h", "Super Street Fighter II: The New Challengers (Hispanic 930911)", - "ssf2j", "Super Street Fighter II: The New Challengers (Japan 931005)", - "ssf2jr1", "Super Street Fighter II: The New Challengers (Japan 930911)", - "ssf2jr2", "Super Street Fighter II: The New Challengers (Japan 930910)", - "ssf2mdb", "Super Street Fighter II - The New Challengers (bootleg of Japanese MegaDrive version)", - "ssf2t", "Super Street Fighter II Turbo (World 940223)", - "ssf2ta", "Super Street Fighter II Turbo (Asia 940223)", - "ssf2tb", "Super Street Fighter II: The Tournament Battle (World 931119)", - "ssf2tbd", "Super Street Fighter II: The Tournament Battle (World 931119 Phoenix Edition) (bootleg)", - "ssf2tbh", "Super Street Fighter II: The Tournament Battle (Hispanic 931005)", - "ssf2tbj", "Super Street Fighter II: The Tournament Battle (Japan 930911)", - "ssf2tbr1", "Super Street Fighter II: The Tournament Battle (World 930911)", - "ssf2tu", "Super Street Fighter II Turbo (USA 940323)", - "ssf2tur1", "Super Street Fighter II Turbo (USA 940223)", - "ssf2u", "Super Street Fighter II: The New Challengers (USA 930911)", - "ssf2ud", "Super Street Fighter II: The New Challengers (USA 930911 Phoenix Edition) (bootleg)", - "ssf2xj", "Super Street Fighter II X: Grand Master Challenge (Japan 940223)", - "ssf2xjd", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 Phoenix Edition) (bootleg)", - "ssf2xjr", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 rent version)", - "ssfindo", "See See Find Out", - "sshangha", "Super Shanghai Dragon's Eye (Japan)", - "sshanghab", "Super Shanghai Dragon's Eye (World, bootleg)", - "sshootep", "Sharpshooter", - "sshooter", "Sharpshooter (Rev 1.9)", - "sshooter11", "Sharpshooter (Rev 1.1)", - "sshooter12", "Sharpshooter (Rev 1.2)", - "sshooter17", "Sharpshooter (Rev 1.7)", - "sshootr2", "Sharp Shooter II", - "sshot", "Super Shot", - "sshtl_l7", "Space Shuttle (L-7)", - "sshtlzac", "Space Shuttle (Zaccaria)", - "sshuttle", "Space Shuttle (Taito)", - "sshuttle1", "Space Shuttle (Taito) (alternate set)", - "ssi", "Super Space Invaders '91 (World, Rev 1)", - "ssia", "Super Space Invaders '91 (World)", - "ssideki", "Super Sidekicks / Tokuten Ou", - "ssideki2", "Super Sidekicks 2 - The World Championship / Tokuten Ou 2 - real fight football (NGM-061)(NGH-061)", - "ssideki3", "Super Sidekicks 3 - The Next Glory / Tokuten Ou 3 - eikou e no michi", - "ssideki4", "The Ultimate 11 - The SNK Football Championship / Tokuten Ou - Honoo no Libero", - "ssingles", "Swinging Singles", - "ssipkr24", "SSI Poker (v2.4)", - "ssipkr30", "SSI Poker (v3.0)", - "ssipkr40", "SSI Poker (v4.0)", - "ssjkrpkr", "Southern Systems Joker Poker", - "sslam", "Super Slam (set 1)", - "sslama", "Super Slam (set 2)", - "ssmissin", "S.S. Mission", - "ssoldier", "Superior Soldiers (US)", - "ssozumo", "Syusse Oozumou (Japan)", - "sspac2k1", "Super Space 2001", - "sspacaho", "Space Attack / Head On", - "sspaceat", "Space Attack (upright set 1)", - "sspaceat2", "Space Attack (upright set 2)", - "sspaceat3", "Space Attack (upright set 3)", - "sspaceatc", "Space Attack (cocktail)", - "sspeedr", "Super Speed Race", - "sspiritj", "Scramble Spirits (Japan, Floppy DS3-5000-02-REV-A Based)", - "sspirits", "Scramble Spirits (World, Floppy Based)", - "sspirtfc", "Scramble Spirits (World, Floppy Based, FD1094 317-0058-02c)", - "ssprint", "Super Sprint (rev 4)", - "ssprint1", "Super Sprint (rev 1)", - "ssprint3", "Super Sprint (rev 3)", - "ssprintf", "Super Sprint (French)", - "ssprintg", "Super Sprint (German, rev 2)", - "ssprintg1", "Super Sprint (German, rev 1)", - "ssprints", "Super Sprint (Spanish)", - "ssriders", "Sunset Riders (4 Players ver EAC)", - "ssriders2", "Sunset Riders 2 (bootleg 4 Players ver ADD)", - "ssridersabd", "Sunset Riders (2 Players ver ABD)", - "ssridersadd", "Sunset Riders (4 Players ver ADD)", - "ssridersb", "Sunset Riders (bootleg 4 Players ver ADD)", - "ssriderseaa", "Sunset Riders (4 Players ver EAA)", - "ssridersebc", "Sunset Riders (2 Players ver EBC)", - "ssridersebd", "Sunset Riders (2 Players ver EBD)", - "ssridersjac", "Sunset Riders (4 Players ver JAC)", - "ssridersjbd", "Sunset Riders (2 Players ver JBD)", - "ssridersuab", "Sunset Riders (4 Players ver UAB)", - "ssridersuac", "Sunset Riders (4 Players ver UAC)", - "ssridersubc", "Sunset Riders (2 Players ver UBC)", - "ssridersuda", "Sunset Riders (4 Players ver UDA)", - "ssrj", "Super Speed Race Junior (Japan)", - "sss", "Steep Slope Sliders (JUET 981110 V1.000)", - "sst", "Supersonic", - "sstar", "Super Star", - "sstar97", "Super Star '97 (version V153B)", - "sstarbtl", "Super Star Battle", - "sstarcrs", "Super Star Crest", - "sstingry", "Super Stingray (Japan)", - "sstrangr", "Space Stranger", - "sstrangr2", "Space Stranger 2", - "sstrike", "Super Strike Bowling", - "sstriker", "Sorcer Striker (set 1)", - "sstrikera", "Sorcer Striker (set 2)", - "sstrkfgt", "Sega Strike Fighter (Rev A)", - "ssvc_a26", "Secret Service (2.6)", - "ssvc_b26", "Secret Service (2.6 alternate sound)", - "st_game", "unknown pinball game", - "st_ohla", "Oh La La (Stella)", - "st_vulkn", "Vulkan (Stella)", - "stactics", "Space Tactics", - "stadhero", "Stadium Hero (Japan)", - "stadhr96", "Stadium Hero '96 (World, EAJ)", - "stadhr96j", "Stadium Hero '96 (Japan, EAD)", - "stagger1", "Stagger I (Japan)", - "stakwin", "Stakes Winner / Stakes Winner - GI kinzen seiha e no michi", - "stakwin2", "Stakes Winner 2", - "starblad", "Starblade (World)", - "starbladj", "Starblade (Japan)", - "starcas", "Star Castle (version 3)", - "starcas1", "Star Castle (older)", - "starcase", "Star Castle (Mottoeis)", - "starcasp", "Star Castle (prototype)", - "starcrus", "Star Cruiser", - "starfght", "Star Fighter", - "starfgmc", "Starfighter (Moon Cresta bootleg)", - "starfigh", "Star Fighter (v1)", - "starfir2", "Star Fire 2", - "starfire", "Star Fire (set 1)", - "starfirea", "Star Fire (set 2)", - "starfirp", "Star Fire", - "starforc", "Star Force", - "starforca", "Star Force (encrypted, set 2)", - "starforcb", "Star Force (encrypted, bootleg)", - "starforce", "Star Force (encrypted, set 1)", - "stargate", "Stargate", - "stargatp", "Stargate (Pinball)", - "stargatp1", "Stargate (rev.1)", - "stargatp2", "Stargate (rev.2)", - "stargatp3", "Stargate (rev.3)", - "stargatp4", "Stargate (rev.4)", - "starglad", "Star Gladiator Episode I: Final Crusade (USA 960627)", - "stargladj", "Star Gladiator Episode I: Final Crusade (Japan 960627)", - "stargld2", "Star Gladiator 2: Nightmare of Bilstein (Japan 980316)", - "stargod", "Star God", - "stargoda", "Star God (alternate sound)", - "stargrds", "Star Guards", - "stargzr", "Stargazer", - "starhawk", "Star Hawk", - "starhrcl", "Star Horse (client)", - "starhrct", "Star Horse (server)", - "starhrse", "Star Horse (big screens)", - "starhrsp", "Star Horse Progress (Rev A)", - "starjack", "Star Jacker (Sega)", - "starjacks", "Star Jacker (Stern Electronics)", - "starlstr", "Vs. Star Luster", - "starrace", "Star Race", - "starrkr", "Star Raker", - "stars", "Stars", - "starseek", "Doki Doki Idol Star Seeker (GDL-0005)", - "starshot", "Star Shooter", - "starshp1", "Starship 1", - "starshpp", "Starship 1 (prototype?)", - "starsldr", "Star Soldier: Vanishing Earth", - "starspnr", "Starspinner (Dutch/Nederlands)", - "starswep", "Star Sweep (Japan, STP1/VER.A)", - "startrek", "Star Trek", - "startrep", "Star Trek (Pinball)", - "startrgn", "Star Trigon (Japan, STT1 Ver.A)", - "startrip", "Star Trip", - "startrkd", "Star Trek (Defender bootleg)", - "startrp", "Starship Troopers", - "starw", "Star Wars (bootleg of Galaxy Wars, set 1)", - "starw1", "Star Wars (bootleg of Galaxy Wars, set 2)", - "starwarr", "Star Warrior", - "starwars", "Star Wars (rev 2)", - "starwars1", "Star Wars (rev 1)", - "starzan", "Super Tarzan (Italy, V100I)", - "statriv2", "Triv Two", - "statriv2v", "Triv Two (Vertical)", - "statriv4", "Triv Four", - "statusbj", "Status Black Jack (V1.0c)", - "stcc", "Sega Touring Car Championship", - "stcca", "Sega Touring Car Championship (Revision A)", - "stccb", "Sega Touring Car Championship (Revision B)", - "stdragon", "Saint Dragon (set 1)", - "stdragona", "Saint Dragon (set 2)", - "stealsee", "Steal See", - "steaser", "Strip Teaser (Italy, Ver. 1.22)", - "steeltal", "Steel Talons (rev 2)", - "steeltal1", "Steel Talons (rev 1)", - "steeltalg", "Steel Talons (German, rev 2)", - "steeltalp", "Steel Talons (prototype)", - "steelwkr", "Steel Worker", - "steeplec", "Steeplechase [TTL]", - "stellcas", "Stellar Castle (Elettronolo)", - "stellecu", "Stelle e Cubi (Italy)", - "step3", "Stepping 3 Superior", - "stepstag", "Stepping Stage Special", - "stera", "Steraranger (Moon Cresta bootleg)", - "stest", "Speed Test", - "stfight", "Street Fight (Germany)", - "stfighta", "Street Fight (bootleg?)", - "stg", "Strike Gunner S.T.G", - "stillcra", "Still Crazy", - "stinger", "Stinger", - "stinger2", "Stinger (prototype?)", - "stingray", "Stingray", - "stisub", "Treasure Bonus (Subsino, v1.6)", - "stk_sprs", "Strikes and Spares", - "stkclmns", "Stack Columns (World)", - "stkclmnsj", "Stack Columns (Japan)", - "stlforce", "Steel Force", - "stlwr_l2", "Stellar Wars (L-2)", - "stmblade", "Storm Blade (US)", - "stntcycl", "Stunt Cycle [TTL]", - "stocker", "Stocker (3/19/85)", - "stoffy", "Super Toffy", - "stoffyu", "Super Toffy (Unico license)", - "stompin", "Stompin' (4/4/86)", - "stoneage", "Stoneage (bootleg of Caveman Ninja)", - "stonebal", "Stone Ball (4 Players)", - "stonebal2", "Stone Ball (2 Players)", - "storming", "Storming Party / Riku Kai Kuu Saizensen", - "strahl", "Koutetsu Yousai Strahl (Japan set 1)", - "strahla", "Koutetsu Yousai Strahl (Japan set 2)", - "strapids", "Shooting the Rapids", - "stratab", "Strata Bowling (V3)", - "stratab1", "Strata Bowling (V1)", - "stratgys", "Strategy X (Stern Electronics)", - "stratgyx", "Strategy X", - "stratof", "Raiga - Strato Fighter (US)", - "stratvox", "Stratovox", - "stratvoxb", "Stratovox (bootleg)", - "strax_p7", "Star Trax (domestic prototype)", - "streakng", "Streaking (set 1)", - "streaknga", "Streaking (set 2)", - "streetg", "Street Games (Revision 4)", - "streetg2", "Street Games II (Revision 7C)", - "streetg2r5", "Street Games II (Revision 5)", - "streetgr3", "Street Games (Revision 3)", - "streetsm", "Street Smart (US version 2)", - "streetsm1", "Street Smart (US version 1)", - "streetsmj", "Street Smart (Japan version 1)", - "streetsmw", "Street Smart (World version 1)", - "stress", "Stress Busters (J 981020 V1.000)", - "strfbomb", "Strafe Bomb (bootleg of Scramble)", - "strhoop", "Street Hoop / Street Slam / Dunk Dream (DEM-004)(DEH-004)", - "strider", "Strider (USA, B-Board 89624B-2)", - "strider2", "Strider 2 (USA 991213)", - "strider2a", "Strider 2 (Asia 991213)", - "striderj", "Strider Hiryu (Japan)", - "striderjr", "Strider Hiryu (Japan Resale Ver.)", - "striderua", "Strider (USA, B-Board 89624B-3)", - "strik_l4", "Strike Master (L-4)", - "strike", "Strike", - "striker", "Striker", - "strikext", "Striker Xtreme (1.02)", - "striv", "Super Triv", - "strkfgtr", "Strike Fighter (World)", - "strkfgtrj", "Strike Fighter (Japan)", - "strkforc", "Strike Force (rev 1 02/25/91)", - "strknew", "Striker Xtreme (ARM7 Sound Board)", - "strkzone", "Strike Zone Baseball", - "strlink", "Strong Link (Russia) (Extrema)", - "strlt_l1", "Star Light (L-1)", - "strngsci", "Strange Science", - "strnskil", "Strength & Skill", - "strongx", "Strong X", - "strsphnx", "Star's Phoenix (Italian speech)", - "strtdriv", "Street Drivin' (prototype)", - "strtheat", "Street Heat", - "strvmstr", "Super Trivia Master", - "strxt_fr", "Striker Xtreme (France)", - "strxt_gr", "Striker Xtreme (Germany)", - "strxt_it", "Striker Xtreme (Italy)", - "strxt_sp", "Striker Xtreme (Spain)", - "strxt_uk", "Striker Xtreme (UK)", - "sttng_g7", "Star Trek: The Next Generation (LG-7)", - "sttng_l1", "Star Trek: The Next Generation (LX-1)", - "sttng_l2", "Star Trek: The Next Generation (LX-2)", - "sttng_l7", "Star Trek: The Next Generation (LX-7)", - "sttng_p5", "Star Trek: The Next Generation (P-5)", - "sttng_s7", "Star Trek: The Next Generation (LX-7) SP1", - "sttng_x7", "Star Trek: The Next Generation (LX-7 Special)", - "stunrun", "S.T.U.N. Runner (rev 6)", - "stunrun0", "S.T.U.N. Runner (rev 0)", - "stunrun2", "S.T.U.N. Runner (rev 2)", - "stunrun2e", "S.T.U.N. Runner (rev 2, Europe)", - "stunrun3", "S.T.U.N. Runner (rev 3)", - "stunrun3e", "S.T.U.N. Runner (rev 3, Europe)", - "stunrun4", "S.T.U.N. Runner (rev 4)", - "stunrun5", "S.T.U.N. Runner (rev 5)", - "stunrune", "S.T.U.N. Runner (rev 5, Europe)", - "stunrunj", "S.T.U.N. Runner (rev 7, Japan)", - "stunrunp", "S.T.U.N. Runner (upright prototype)", - "stuntair", "Stunt Air", - "stvbios", "ST-V Bios", - "stwr_102", "Star Wars (1.02)", - "stwr_103", "Star Wars (1.03)", - "stwr_a14", "Star Wars (Display Rev.1.04)", - "stwr_e12", "Star Wars (1.02 England)", - "stwr_g11", "Star Wars (1.01 Germany)", - "styphp", "Stunt Typhoon Plus", - "su2000", "SU2000", - "sub", "Submarine (Sigma)", - "subhunt", "Sub Hunter", - "submar", "Submarine (Midway)", - "subroc3d", "Subroc-3D", - "subs", "Subs", - "sucasino", "Super Casino", - "suchie3", "Idol Janshi Suchie-Pai 3 (JPN)", - "suchipi", "Idol Janshi Suchie-Pai Special (Japan)", - "suikoenb", "Suiko Enbu / Outlaws of the Lost Dynasty (JUETL 950314 V2.001)", - "sukuinuf", "Quiz and Variety Suku Suku Inufuku 2 (IN2 Ver. A)", - "sultanw", "Sultan's Wish (Konami Endeavour)", - "sunaq", "SunA Quiz 6000 Academy (940620-6)", - "sundance", "Sundance", - "supbtime", "Super Burger Time (World, set 1)", - "supbtimea", "Super Burger Time (World, set 2)", - "supbtimej", "Super Burger Time (Japan)", - "supcrash", "Super Crash (bootleg of Head On)", - "supdrapo", "Super Draw Poker (set 1)", - "supdrapoa", "Super Draw Poker (set 2)", - "supdrapob", "Super Draw Poker (bootleg)", - "super21", "Super Twenty One", - "super9", "Super Nove (Playmark)", - "superabc", "Super ABC (Pac-Man multigame kit, Sep. 03 1999)", - "superabco", "Super ABC (Pac-Man multigame kit, Mar. 08 1999)", - "superbar", "Super Bar", - "superbik", "Superbike", - "superbon", "Agent Super Bond (Super Cobra conversion)", - "superbug", "Super Bug", - "superbwl", "Super Bowl (Version 16.03B)", - "superchs", "Super Chase - Criminal Termination (World)", - "superchsj", "Super Chase - Criminal Termination (Japan)", - "superchsp", "Super Chase - Criminal Termination (1992/10/26 20:24:29 CHASE 3 VER 1.1, prototype)", - "superchsu", "Super Chase - Criminal Termination (US)", - "supercrd", "Super Card (encrypted)", - "superdbl", "Super Double (French)", - "superdbz", "Super Dragon Ball Z (DB1 Ver. B)", - "superdix", "Super Dixieland (Bingo)", - "superdq", "Super Don Quix-ote (Long Scenes)", - "superdqa", "Super Don Quix-ote (Short Scenes, Alt)", - "superdqs", "Super Don Quix-ote (Short Scenes)", - "superg", "Super Galaxians (galaxiana hack)", - "supergm3", "Super Game III", - "supergx", "Super GX", - "superinv", "Super Invaders (bootleg set 1)", - "superman", "Superman (World)", - "supermanj", "Superman (Japan)", - "supermanu", "Superman (US)", - "supermap", "Superman (Pinball)", - "superpac", "Super Pac-Man", - "superpacm", "Super Pac-Man (Midway)", - "superspy", "The Super Spy (NGM-011)(NGH-011)", - "superten", "Super Ten V8.3", - "supertnk", "Super Tank", - "supertr2", "Super Triv II", - "supertr3", "Super Triv III", - "superwng", "Super Wing", - "superx", "Super-X (NTC)", - "superxm", "Super-X (Mitchell)", - "supjolly", "Super Jolly", - "suplup", "Super Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 4.0 / 990518)", - "supmodel", "Super Model", - "supnudg2", "Super Nudger II - P173 (Version 5.21)", - "suprball", "Super Ball (Version 1.3)", - "suprbowl", "Super Bowl", - "suprglob", "Super Glob", - "suprgolf", "Super Crowns Golf (Japan)", - "suprheli", "Super Heli (Super Cobra bootleg)", - "suprleag", "Super League (FD1094 317-0045)", - "suprloco", "Super Locomotive (Rev.A)", - "suprlocoo", "Super Locomotive", - "suprmatk", "Super Missile Attack (for rev 1)", - "suprmatkd", "Super Missile Attack (not encrypted)", - "suprmous", "Super Mouse", - "suprmrio", "Vs. Super Mario Bros. (set SM4-4 E)", - "suprmrioa", "Vs. Super Mario Bros. (set ?, harder)", - "suprmriobl", "Vs. Super Mario Bros. (bootleg with Z80, set 1)", - "suprmriobl2", "Vs. Super Mario Bros. (bootleg with Z80, set 2)", - "suprnova", "Super Nova", - "suprpick", "Super Picker", - "suprpokr", "Super Poker (Version 10.19S)", - "suprpokra", "Super Poker (Version 10.15S)", - "suprpokrb", "Super Poker (Version 10.10)", - "suprpool", "Super Pool (9743 rev.01)", - "suprridr", "Super Rider", - "suprslam", "From TV Animation Slam Dunk - Super Slams", - "suprstar", "Super Stars", - "suprtrio", "Super Trio", - "supxevs", "Vs. Super Xevious", - "suratk", "Surprise Attack (World ver. K)", - "suratka", "Surprise Attack (Asia ver. L)", - "suratkj", "Surprise Attack (Japan ver. M)", - "sureshop", "Sure Shot (Pinball)", - "sureshot", "Sure Shot", - "surfnsaf", "Surf'n Safari", - "surfplnt", "Surf Planet (Version 4.1)", - "surfplnt40", "Surf Planet (Version 4.0)", - "survarts", "Survival Arts (World)", - "survartsj", "Survival Arts (Japan)", - "survartsu", "Survival Arts (USA)", - "survival", "Survival", - "susume", "Susume! Taisen Puzzle-Dama (GV027 Japan 1.20)", - "sutapper", "Tapper (Suntory)", - "suzuk8h2", "Suzuka 8 Hours 2 (World, Rev B)", - "suzuk8h2j", "Suzuka 8 Hours 2 (Japan, Rev B)", - "suzuka8h", "Suzuka 8 Hours (World, Rev C)", - "suzuka8hj", "Suzuka 8 Hours (Japan, Rev B)", - "suzume", "Watashiha Suzumechan (Japan)", - "svc", "SNK vs. Capcom - SVC Chaos (NGM-2690)(NGH-2690)", - "svcboot", "SNK vs. Capcom - SVC Chaos (bootleg)", - "svcpcb", "SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 1)", - "svcpcba", "SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 2)", - "svcplus", "SNK vs. Capcom - SVC Chaos Plus (bootleg set 1)", - "svcplusa", "SNK vs. Capcom - SVC Chaos Plus (bootleg set 2)", - "svcsplus", "SNK vs. Capcom - SVC Chaos Super Plus (bootleg)", - "svf", "Super Visual Football: European Sega Cup", - "svg", "S.V.G. - Spectral vs Generation (M68k label V200) (ARM label V200, ROM 10/11/05 S.V.G V201)", - "svgpcb", "S.V.G. - Spectral vs Generation (M68k label V100JP) (ARM label V100JP ROM 05/12/05 S.V.G V100) (Japan, JAMMA PCB)", - "svolley", "Super Volleyball (Japan)", - "svolleybl", "Super Volleyball (bootleg)", - "svolleyk", "Super Volleyball (Korea)", - "svolleyu", "Super Volleyball (US)", - "svolly91", "Super Volley '91 (Japan)", - "svs", "Super Visual Soccer: Sega Cup (US)", - "swa", "Star Wars Arcade", - "swarm", "Swarm (bootleg?)", - "swat", "SWAT (315-5048)", - "swatpolc", "SWAT Police", - "swcourt", "Super World Court (World)", - "swcourtj", "Super World Court (Japan)", - "swe1pb", "Pinball 2000: Star Wars Episode 1", - "sweetgal", "Sweet Gal (Japan 850510 SWG 1-02)", - "sweetl", "Sweet Life (041220 World)", - "sweetl2", "Sweet Life 2 (071217 Russia)", - "sweetl2_2", "Sweet Life 2 (080320 World)", - "sweetl2_2a", "Sweet Life 2 (bootleg, 080320, banking address hack set 1)", - "sweetl2_2b", "Sweet Life 2 (bootleg, 080320, banking address hack set 2)", - "sweetl2_2c", "Sweet Life 2 (bootleg, 080320, VIDEO GAME-1 MD01)", - "sweetl2_2d", "Sweet Life 2 (bootleg, 080320, LOTTOGAME (I))", - "sweetl2_3", "Sweet Life 2 (090525 Lottery)", - "sweetl2_4", "Sweet Life 2 (090812 Entertainment)", - "sweetl_2", "Sweet Life (070412 Russia)", - "sweetla", "Sweet Life (bootleg, 041220, backdoor)", - "sweetlb", "Sweet Life (bootleg, 041220, banking address hack, changed version text)", - "swimmer", "Swimmer (set 1)", - "swimmera", "Swimmer (set 2)", - "swimmerb", "Swimmer (set 3)", - "swingin", "Swingin In The Green (Russia)", - "swisspkr", "Swiss Poker ('50 SG-.10', V2.5)", - "swrds_l2", "Swords of Fury (L-2)", - "sws", "Super World Stadium (Japan)", - "sws2000", "Super World Stadium 2000 (Japan, SS01/VER.A)", - "sws2001", "Super World Stadium 2001 (Japan, SS11/VER.A)", - "sws92", "Super World Stadium '92 (Japan)", - "sws92g", "Super World Stadium '92 Gekitouban (Japan)", - "sws93", "Super World Stadium '93 (Japan)", - "sws95", "Super World Stadium '95 (Japan)", - "sws96", "Super World Stadium '96 (Japan)", - "sws97", "Super World Stadium '97 (Japan)", - "sws98", "Super World Stadium '98 (Japan, SS81/VER.A)", - "sws99", "Super World Stadium '99 (Japan, SS91/VER.A3)", - "swthrt2v", "Sweet Hearts II (01J01986, Venezuela)", - "swtht2nz", "Sweet Hearts II (1VXFC5461, New Zealand)", - "swtril41", "Star Wars Trilogy (4.01)", - "swtril43", "Star Wars Trilogy (4.03)", - "swtrilgy", "Star Wars Trilogy (Revision A)", - "swtrilgya", "Star Wars Trilogy", - "sxevious", "Super Xevious", - "sxeviousj", "Super Xevious (Japan)", - "sxyreac2", "Pachinko Sexy Reaction 2 (Japan)", - "sxyreact", "Pachinko Sexy Reaction (Japan)", - "sys1test", "System 1 Test prom", - "sys246", "System 246 BIOS", - "sys256", "System 256 BIOS", - "sys573", "System 573 BIOS", - "syvalion", "Syvalion (Japan)", - "syvalionp", "Syvalion (World, prototype)", - "szaxxon", "Super Zaxxon (315-5013)", - "szone_l2", "Strike Zone (Shuffle) (L-2)", - "szone_l5", "Strike Zone (Shuffle) (L-5)", - "t2_l2", "Terminator 2: Judgment Day (L-2)", - "t2_l3", "Terminator 2: Judgment Day (L-3)", - "t2_l4", "Terminator 2: Judgment Day (L-4)", - "t2_l6", "Terminator 2: Judgment Day (L-6)", - "t2_l8", "Terminator 2: Judgment Day (L-8)", - "t2_p2f", "Terminator 2: Judgment Day (P-2F) Profanity", - "t3new", "Terminator 3: Rise of the Machines (ARM7 Sound Board)", - "tacscan", "Tac/Scan", - "tactcian", "Tactician (set 1)", - "tactcian2", "Tactician (set 2)", - "taf_h4", "The Addams Family (H-4)", - "taf_l1", "The Addams Family (L-1)", - "taf_l2", "The Addams Family (L-2)", - "taf_l3", "The Addams Family (L-3)", - "taf_l4", "The Addams Family (L-4)", - "taf_l5", "The Addams Family (L-5)", - "taf_l6", "The Addams Family (L-6)", - "taf_l7", "The Addams Family (Prototype L-5) (L-7)", - "taf_p2", "The Addams Family (Prototype) (P-2)", - "tafg_h3", "The Addams Family Special Collectors Edition (H-3)", - "tafg_la2", "The Addams Family Special Collectors Edition (LA-2)", - "tafg_la3", "The Addams Family Special Collectors Edition (LA-3)", - "tafg_lx3", "The Addams Family Special Collectors Edition Gold (LX-3)", - "tagteam", "Tag Team Wrestling", - "tagteamp", "Tag-Team Wrestling", - "tagteamp2", "Tag-Team Wrestling (rev.2)", - "taiko10", "Taiko No Tatsujin 10 (T101001-NA-A)", - "taiko9", "Taiko No Tatsujin 9 (TK91001-NA-A)", - "tail2nos", "Tail to Nose - Great Championship", - "tailg", "Tailgunner", - "taitest", "Taito Test Fixture", - "taitofx1", "Taito FX1", - "taitogn", "Taito GNET", - "taitotz", "Type Zero BIOS", - "taiwanmb", "Taiwan Mahjong [BET] (Japan 881208)", - "tajmah", "Tajmahal (Russia) (Atronic)", - "take5", "Take 5 [TTL]", - "takefive", "Take Five", - "takoron", "Noukone Puzzle Takoron (GDL-0042)", - "talbot", "Talbot", - "tangtang", "Tang Tang (ver. 0526, 26/05/2000)", - "tank", "Tank/Tank II [TTL]", - "tank8", "Tank 8 (set 1)", - "tank8a", "Tank 8 (set 2)", - "tank8b", "Tank 8 (set 3)", - "tank8c", "Tank 8 (set 4)", - "tank8d", "Tank 8 (set 5)", - "tankbatl", "Tank Battle (prototype rev. 4/21/92)", - "tankbatt", "Tank Battalion", - "tankbattb", "Tank Battalion (bootleg)", - "tankbust", "Tank Busters", - "tankfrce", "Tank Force (US, 2 Player)", - "tankfrce4", "Tank Force (US, 4 Player)", - "tankfrcej", "Tank Force (Japan)", - "tantr", "Puzzle & Action: Tant-R (Japan)", - "tantrbl", "Puzzle & Action: Tant-R (Japan) (bootleg set 1)", - "tantrbl2", "Puzzle & Action: Tant-R (Japan) (bootleg set 2)", - "tantrbl3", "Puzzle & Action: Tant-R (Japan) (bootleg set 3)", - "tantrkor", "Puzzle & Action: Tant-R (Korea)", - "taotaido", "Tao Taido (set 1)", - "taotaidoa", "Tao Taido (set 2)", - "tapatune", "Tap a Tune", - "tapper", "Tapper (Budweiser, set 1)", - "tappera", "Tapper (Budweiser, set 2)", - "targ", "Targ", - "targc", "Targ (cocktail?)", - "targeth", "Target Hits (ver 1.1)", - "targetha", "Target Hits (ver 1.0)", - "tarzan", "Tarzan (V109C)", - "tarzana", "Tarzan (V107)", - "tattack", "Time Attacker", - "tattass", "Tattoo Assassins (US prototype)", - "tattassa", "Tattoo Assassins (Asia prototype)", - "taurs_l1", "Taurus (Shuffle) (L-1)", - "taxi_l3", "Taxi (Marilyn) (L-3)", - "taxi_l4", "Taxi (Lola) (L-4)", - "taxi_lg1", "Taxi (Marilyn) (L-1) Germany", - "taxidriv", "Taxi Driver", - "tazmani2", "Tazz-Mania (set 2, alt hardware)", - "tazmania", "Tazz-Mania (set 1)", - "tazzmang", "Tazz-Mania (bootleg on Galaxian hardware)", - "tblkkuzu", "The Block Kuzushi (Japan)", - "tbowl", "Tecmo Bowl (World)", - "tbowlj", "Tecmo Bowl (Japan)", - "tbowlp", "Tecmo Bowl (World, prototype?)", - "tbyahhoo", "Twin Bee Yahhoo! (ver JAA)", - "tceptor", "Thunder Ceptor", - "tceptor2", "Thunder Ceptor II", - "tcl", "Taiwan Chess Legend", - "tcobra2", "Twin Cobra II (Ver 2.1O 1995/11/30)", - "tcobra2u", "Twin Cobra II (Ver 2.1A 1995/11/30)", - "tdawg_l1", "Top Dawg (Shuffle) (L-1)", - "tdfever", "TouchDown Fever (US)", - "tdfever2", "TouchDown Fever 2", - "tdfeverj", "TouchDown Fever (Japan)", - "tdoboon", "Taihou de Doboon", - "tdpgal", "Triple Draw Poker", - "tdragon", "Thunder Dragon (9th Jan. 1992)", - "tdragon1", "Thunder Dragon (4th Jun. 1991)", - "tdragon2", "Thunder Dragon 2 (9th Nov. 1993)", - "tdragon2a", "Thunder Dragon 2 (1st Oct. 1993)", - "tdragonb", "Thunder Dragon (bootleg)", - "tduno", "Touch de Uno! / Unou Nouryoku Check Machine", - "tduno2", "Touch de Uno! 2", - "te0144", "Puzzle Bobble (Italian Gambling Game)", - "teamqb", "John Elway's Team Quarterback (set 1)", - "teamqb2", "John Elway's Team Quarterback (set 2)", - "techbowl", "Technical Bowling (J 971212 V1.000)", - "techromn", "Tech Romancer (Euro 980914)", - "techromnu", "Tech Romancer (USA 980914)", - "tecmowcm", "Tecmo World Cup Millennium (Japan)", - "teddybb", "TeddyBoy Blues (315-5115, New Ver.)", - "teddybbo", "TeddyBoy Blues (315-5115, Old Ver.)", - "teddybbobl", "TeddyBoy Blues (Old Ver. bootleg)", - "teedoff", "Tee'd Off (Japan)", - "teedoffp", "Tee'd Off", - "teedoffp1", "Tee'd Off (rev.1)", - "teedoffp3", "Tee'd Off (rev.3)", - "teetert", "Teeter Torture (prototype)", - "tehkanwc", "Tehkan World Cup (set 1)", - "tehkanwcb", "Tehkan World Cup (set 2, bootleg?)", - "tehkanwcc", "Tehkan World Cup (set 3, bootleg)", - "tekipaki", "Teki Paki", - "tekken", "Tekken (World, TE4/VER.C)", - "tekken2", "Tekken 2 Ver.B (US, TES3/VER.D)", - "tekken2aa", "Tekken 2 (Asia, TES2/VER.A)", - "tekken2ab", "Tekken 2 Ver.B (Asia, TES2/VER.B)", - "tekken2jb", "Tekken 2 Ver.B (Japan, TES1/VER.B)", - "tekken2jc", "Tekken 2 Ver.B (Japan, TES1/VER.C)", - "tekken2ub", "Tekken 2 Ver.B (US, TES3/VER.B)", - "tekken3", "Tekken 3 (Japan, TET1/VER.E1)", - "tekken3aa", "Tekken 3 (Asia, TET2/VER.A)", - "tekken3ab", "Tekken 3 (Asia, TET2/VER.B)", - "tekken3ae", "Tekken 3 (Asia, TET2/VER.E1)", - "tekken3ja", "Tekken 3 (Japan, TET1/VER.A)", - "tekken3ua", "Tekken 3 (US, TET3/VER.A)", - "tekken3ud", "Tekken 3 (US, TET3/VER.D)", - "tekken4", "Tekken 4 (TEF3 Ver. C)", - "tekken4a", "Tekken 4 (TEF2 Ver. A)", - "tekken4b", "Tekken 4 (TEF1 Ver. A)", - "tekken4c", "Tekken 4 (TEF1 Ver. C)", - "tekken51", "Tekken 5.1 (TE51 Ver. B)", - "tekkenab", "Tekken (Asia, TE2/VER.B)", - "tekkenac", "Tekken (Asia, TE2/VER.C)", - "tekkenjb", "Tekken (Japan, TE1/VER.B)", - "tektagt", "Tekken Tag Tournament (US, TEG3/VER.C1)", - "tektagtac", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 1)", - "tektagtac1", "Tekken Tag Tournament (Asia, TEG2/VER.C1, set 2)", - "tektagtja", "Tekken Tag Tournament (Japan, TEG1/VER.A3)", - "tektagtjb", "Tekken Tag Tournament (Japan, TEG1/VER.B)", - "tektagtjc1", "Tekken Tag Tournament (Japan, TEG1/VER.C1)", - "tektagtub", "Tekken Tag Tournament (US, TEG3/VER.B)", - "teljan", "Tel Jan", - "telmahjn", "Telephone Mahjong (Japan 890111)", - "tempest", "Tempest (rev 3, Revised Hardware)", - "tempest1", "Tempest (rev 1)", - "tempest1r", "Tempest (rev 1, Revised Hardware)", - "tempest2", "Tempest (rev 2)", - "tempest3", "Tempest (rev 3)", - "temptube", "Tempest Tubes", - "tenballs", "Ten Balls (Ver 1.05)", - "tengai", "Tengai (World)", - "tengaij", "Sengoku Blade: Sengoku Ace Episode II / Tengai", - "tenkai", "Mahjong Tenkaigen", - "tenkai2b", "Mahjong Tenkaigen Part 2 (bootleg)", - "tenkaibb", "Mahjong Tenkaigen (bootleg b)", - "tenkaicb", "Mahjong Tenkaigen (bootleg c)", - "tenkaid", "Mahjong Tenkaigen (set 1)", - "tenkaie", "Mahjong Tenkaigen (set 2)", - "tenkomor", "Tenkomori Shooting (Asia, TKM2/VER.A1)", - "tenkomorja", "Tenkomori Shooting (Japan, TKM1/VER.A1)", - "tenpindx", "Ten Pin Deluxe", - "tenspot", "Ten Spot", - "tenthdeg", "Tenth Degree (prototype)", - "tenup", "Ten Up (compendium 17)", - "tenup3", "Ten Up (compendium 3)", - "terabrst", "Teraburst (1998/07/17 ver UEL)", - "terabrsta", "Teraburst (1998/02/25 ver AAA)", - "term2", "Terminator 2 - Judgment Day (rev LA4 08/03/92)", - "term2la1", "Terminator 2 - Judgment Day (rev LA1 11/01/91)", - "term2la2", "Terminator 2 - Judgment Day (rev LA2 12/09/91)", - "term2la3", "Terminator 2 - Judgment Day (rev LA3 03/27/92)", - "term3", "Terminator 3: Rise of the Machines (4.00)", - "term3_205", "Terminator 3: Rise of the Machines (2.05)", - "term3f", "Terminator 3: Rise of the Machines (4.00 France)", - "term3f_205", "Terminator 3: Rise of the Machines (2.05 France)", - "term3g", "Terminator 3: Rise of the Machines (4.00 Germany)", - "term3i", "Terminator 3: Rise of the Machines (4.00 Italy)", - "term3i_205", "Terminator 3: Rise of the Machines (2.05 Italy)", - "term3l", "Terminator 3: Rise of the Machines (4.00 Spain)", - "term3l_205", "Terminator 3: Rise of the Machines (2.05 Spain)", - "terracre", "Terra Cresta (YM3526 set 1)", - "terracrea", "Terra Cresta (YM3526 set 3)", - "terracren", "Terra Cresta (YM2203)", - "terracreo", "Terra Cresta (YM3526 set 2)", - "terraf", "Terra Force", - "terrafb", "Terra Force (Japan bootleg set 2)", - "terrafj", "Terra Force (Japan)", - "terrafjb", "Terra Force (Japan bootleg with additional Z80)", - "terrafu", "Terra Force (US)", - "tesorone", "Tesorone Dell'Isola (Italy, v2.41)", - "tesorone230", "Tesorone Dell'Isola (Italy, v2.30)", - "tesorone240", "Tesorone Dell'Isola (Italy, v2.40)", - "tetfight", "Tetris Fighters", - "tetkiwam", "Tetris Kiwamemichi (GDL-0020)", - "tetrbx", "Tetris / Bloxeed (Korean System 16 bootleg) (ISG Selection Master Type 2006)", - "tetris", "Tetris (set 4, Japan, System 16A, FD1094 317-0093)", - "tetris1", "Tetris (set 1, Japan, System 16B, FD1094 317-0091)", - "tetris2", "Tetris (set 2, Japan, System 16B, FD1094 317-0092)", - "tetris3", "Tetris (set 3, Japan, System 16A, FD1094 317-0093a)", - "tetrisbl", "Tetris (bootleg)", - "tetriskr", "Tetris (bootleg of Mirrorsoft PC-XT Tetris version)", - "tetrisp", "Tetris Plus", - "tetrisp2", "Tetris Plus 2 (World)", - "tetrisp2j", "Tetris Plus 2 (Japan, V2.2)", - "tetrisp2ja", "Tetris Plus 2 (Japan, V2.1)", - "tetrisse", "Tetris (Japan, System E)", - "tetrist", "Tetris (Japan, Taito B-System, Nastar Conversion Kit)", - "tetrista", "Tetris (Japan, Taito B-System, Master of Weapon Conversion Kit)", - "tetristh", "Tetris (Japan, Taito H-System)", - "tetrsark", "Tetris (D.R. Korea)", - "tf95_12", "WPC 95 Test Fixture (1.2)", - "tfa_13", "WPC Test Fixture: Alphanumeric (1.3)", - "tfdmd_l3", "WPC Test Fixture: DMD (L-3)", - "tfight", "Title Fight", - "tfrceac", "Thunder Force AC", - "tfrceacb", "Thunder Force AC (bootleg)", - "tfrceacj", "Thunder Force AC (Japan)", - "tfs_12", "WPC Test Fixture: Security (1.2)", - "tftc_104", "Tales From the Crypt (1.04 Spain)", - "tftc_200", "Tales From the Crypt (2.00)", - "tftc_300", "Tales From the Crypt (3.00)", - "tftc_302", "Tales From the Crypt (3.02 Dutch)", - "tftc_303", "Tales From the Crypt (3.03)", - "tfupdate", "Triforce DIMM Updater (GDT-0011)", - "tgm2", "Tetris the Absolute The Grand Master 2", - "tgm2p", "Tetris the Absolute The Grand Master 2 Plus", - "tgmj", "Tetris The Grand Master (Japan 980710)", - "tgtball", "Target Ball (Nude)", - "tgtballa", "Target Ball", - "tgtpanic", "Target Panic", - "thaiprin", "Thai Princess (30127721, Malaysia)", - "tharrier", "Task Force Harrier", - "tharrieru", "Task Force Harrier (US?)", - "thayers", "Thayer's Quest (set 1)", - "thayersa", "Thayer's Quest (set 2)", - "thedeep", "The Deep (Japan)", - "thedrink", "The Drink", - "theend", "The End", - "theendb", "The End (bootleg?)", - "theends", "The End (Stern Electronics)", - "thegames", "The Games", - "theglad", "The Gladiator / Road of the Sword / Shen Jian (M68k label V101) (ARM label V107, ROM 06/06/03 SHEN JIAN V107)", - "theglad100", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 01/16/03 SHEN JIAN)", - "theglad101", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V101, ROM 03/13/03 SHEN JIAN)", - "thegladpcb", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 02/25/03 SHEN JIAN) (Japan, JAMMA PCB)", - "theglob", "The Glob", - "theglob2", "The Glob (earlier)", - "theglob3", "The Glob (set 3)", - "theglobp", "The Glob (Pac-Man hardware)", - "thegrid", "The Grid (version 1.2)", - "thegrida", "The Grid (version 1.1)", - "thehand", "The Hand", - "thehustl", "The Hustler (Japan, program code M)", - "thehustlj", "The Hustler (Japan, program code J)", - "themj", "The Mah-jong (Japan)", - "thenanpa", "The Nanpa (Japan)", - "thepit", "The Pit", - "thepitj", "The Pit (Japan)", - "thepitm", "The Pit (bootleg on Moon Quasar hardware)", - "thepitu1", "The Pit (US set 1)", - "thepitu2", "The Pit (US set 2)", - "theroes", "Thunder Heroes", - "thetogyu", "The Togyu (315-5065, Japan)", - "thief", "Thief", - "thndblst", "Thunder Blaster (Japan)", - "thndbolt", "Thunderbolt", - "thndrbld", "Thunder Blade (upright, FD1094 317-0056)", - "thndrbld1", "Thunder Blade (deluxe/standing, unprotected)", - "thndrx2", "Thunder Cross II (World)", - "thndrx2a", "Thunder Cross II (Asia)", - "thndrx2j", "Thunder Cross II (Japan)", - "thndzone", "Thunder Zone (World, Rev 1)", - "thndzone4", "Thunder Zone (World 4 Players)", - "thndzonea", "Thunder Zone (World)", - "thndzonej", "Thunder Zone (Japan)", - "thoop", "Thunder Hoop (Ver. 1)", - "thoop2", "TH Strikes Back", - "thrild2", "Thrill Drive 2 (ver EBB)", - "thrild2a", "Thrill Drive 2 (ver AAA)", - "thrild2c", "Thrill Drive 2 (ver EAA)", - "thrilld", "Thrill Drive (JAE)", - "thrilldae", "Thrill Drive (EAA)", - "thrilldb", "Thrill Drive (JAB)", - "thund_p1", "Thunderball (P-1)", - "thunderh", "Operation Thunder Hurricane (ver EAA)", - "thunderhu", "Operation Thunder Hurricane (ver UAA)", - "thunderj", "ThunderJaws (rev 3)", - "thunderja", "ThunderJaws (rev 2)", - "thunderl", "Thunder & Lightning", - "thunderlbl", "Thunder & Lightning (bootleg with Tetris sound)", - "thunderx", "Thunder Cross (set 1)", - "thunderxa", "Thunder Cross (set 2)", - "thunderxb", "Thunder Cross (set 3)", - "thunderxj", "Thunder Cross (Japan)", - "thundfox", "Thunder Fox (World)", - "thundfoxj", "Thunder Fox (Japan)", - "thundfoxu", "Thunder Fox (US)", - "thunt", "Puzzle & Action: Treasure Hunt (JUET 970901 V2.00E)", - "thuntk", "Puzzle & Action: BoMulEul Chajara (JUET 970125 V2.00K)", - "tickee", "Tickee Tickats", - "tictac", "Tic Tac Trivia (6221-23, U5-0C Horizontal)", - "tictacv", "Tic Tac Trivia (6221-22, U5-0 Vertical)", - "tigerh", "Tiger Heli (US)", - "tigerhb1", "Tiger Heli (bootleg set 1)", - "tigerhb2", "Tiger Heli (bootleg set 2)", - "tigerhb3", "Tiger Heli (bootleg set 3)", - "tigerhj", "Tiger Heli (Japan)", - "tigeroad", "Tiger Road (US)", - "tigeroadb", "Tiger Road (US bootleg)", - "tigerrag", "Tiger Rag", - "tighook", "Tiger Hook (Version 2.1E Dual)", - "tighookc1", "Tiger Hook (Version 2.1R, set 1)", - "tighookc2", "Tiger Hook (Version 2.0LT, set 1)", - "tighookd1", "Tiger Hook (Version 2.1R, set 2)", - "tighookd2", "Tiger Hook (Version 2.0LT, set 2)", - "tighooko", "Tiger Hook (Version 1.7XT)", - "tighooko2", "Tiger Hook (Version 1.7)", - "tighookv1", "Tiger Hook (Version 2.1R Dual)", - "tighookv2", "Tiger Hook (Version 2.0LT Dual)", - "timber", "Timber", - "time2000", "Time 2000", - "timecris", "Time Crisis (Rev. TS2 Ver.B)", - "timecrisa", "Time Crisis (Rev. TS2 Ver.A)", - "timecrs2", "Time Crisis II (TSS3 Ver. B)", - "timecrs2v2b", "Time Crisis II (TSS2 Ver. B)", - "timecrs2v4a", "Time Crisis II (TSS4 Ver. A)", - "timecrs3", "Time Crisis 3 (TST1)", - "timecrs3e", "Time Crisis 3 (TST2 Ver. A)", - "timefgtr", "Time Fighter (Time Pilot conversion on Galaxian hardware)", - "timekill", "Time Killers (v1.32)", - "timekill121", "Time Killers (v1.21)", - "timekill131", "Time Killers (v1.31)", - "timelimt", "Time Limit", - "timeline", "Time Line", - "timeplt", "Time Pilot", - "timeplta", "Time Pilot (Atari)", - "timepltc", "Time Pilot (Centuri)", - "timescan", "Time Scanner (set 2, System 16B)", - "timescan1", "Time Scanner (set 1, System 16A, FD1089B 317-0024)", - "timesold", "Time Soldiers (US Rev 3)", - "timesold1", "Time Soldiers (US Rev 1)", - "timetrv", "Time Traveler", - "timetunl", "Time Tunnel", - "tinklpit", "Tinkle Pit (Japan)", - "tinstar", "The Tin Star (set 1)", - "tinstar2", "The Tin Star (set 2)", - "tinv2650", "The Invaders", - "tiptop", "Tip Top (3 board stack)", - "tisland", "Treasure Island", - "tisub", "Treasure Island (Subsino, set 1)", - "tisuba", "Treasure Island (Subsino, set 2)", - "titan", "Titan", - "titan1", "Titan (alternate set)", - "titanic", "Titanic (Coin dropper)", - "titlef", "Title Fight (World)", - "titlefj", "Title Fight (Japan)", - "titlefu", "Title Fight (US)", - "tjsb", "Mahjong Tian Jiang Shen Bing (V137C)", - "tjumpman", "Tobikose! Jumpman", - "tkdensho", "Toukidenshou - Angel Eyes (VER. 960614)", - "tkdenshoa", "Toukidenshou - Angel Eyes (VER. 960427)", - "tkmmpzdm", "Tokimeki Memorial Taisen Puzzle-dama (ver JAB)", - "tknight", "Tecmo Knight", - "tkoboxng", "Vs. T.K.O. Boxing", - "tm", "Touchmaster (v3.00 Euro)", - "tm2k", "Touchmaster 2000 Plus (v4.63 Standard)", - "tm2ka", "Touchmaster 2000 (v4.02 Standard)", - "tm2kb", "Touchmaster 2000 (v4.00 Standard)", - "tm3k", "Touchmaster 3000 (v5.02 Standard)", - "tm3ka", "Touchmaster 3000 (v5.01 Standard)", - "tm4k", "Touchmaster 4000 (v6.03 Standard)", - "tm4ka", "Touchmaster 4000 (v6.02 Standard)", - "tm4kb", "Touchmaster 4000 (v6.01 Standard)", - "tm4kca", "Touchmaster 4000 (v6.02 California)", - "tm4kmn", "Touchmaster 4000 (v6.01 Minnesota)", - "tm4knj", "Touchmaster 4000 (v6.03 New Jersey)", - "tm5k", "Touchmaster 5000 (v7.10 Standard)", - "tm5ka", "Touchmaster 5000 (v7.01 Standard)", - "tm5kca", "Touchmaster 5000 (v7.10 California)", - "tm5kmn", "Touchmaster 5000 (v7.10 Minnesota)", - "tm7k", "Touchmaster 7000 (v8.04 Standard)", - "tm7ka", "Touchmaster 7000 (v8.00 Standard)", - "tm7keval", "Touchmaster 7000 (v8.1X Evaluation)", - "tm7kmn", "Touchmaster 7000 (v8.04 Minnesota)", - "tm7kmna", "Touchmaster 7000 (v8.00 Minnesota)", - "tm7knj", "Touchmaster 7000 (v8.05 New Jersey)", - "tm8k", "Touchmaster 8000 (v9.04 Standard)", - "tm8k902", "Touchmaster 8000 (v9.02 Standard)", - "tmac_a18", "Time Machine (1.8)", - "tmac_a24", "Time Machine (2.4)", - "tmachzac", "Time Machine (Zaccaria)", - "tmachzacf", "Time Machine (Zaccaria, French speech)", - "tmachzacg", "Time Machine (Zaccaria, German speech)", - "tmdo", "Touchmaster (v2.2-01 Standard)", - "tmek", "T-MEK (v5.1, The Warlords)", - "tmek20", "T-MEK (v2.0, prototype)", - "tmek44", "T-MEK (v4.4)", - "tmek45", "T-MEK (v4.5)", - "tmek51p", "T-MEK (v5.1, prototype)", - "tmfnt_l5", "Time Fantasy (L-5)", - "tmht", "Teenage Mutant Hero Turtles (UK 4 Players, set 1)", - "tmht22pe", "Teenage Mutant Hero Turtles - Turtles in Time (2 Players ver EBA)", - "tmht2p", "Teenage Mutant Hero Turtles (UK 2 Players, set 1)", - "tmht2pa", "Teenage Mutant Hero Turtles (UK 2 Players, set 2)", - "tmhta", "Teenage Mutant Hero Turtles (UK 4 Players, set 2)", - "tmmjprd", "Tokimeki Mahjong Paradise - Dear My Love", - "tmnt", "Teenage Mutant Ninja Turtles (World 4 Players)", - "tmnt2", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver UAA)", - "tmnt22pu", "Teenage Mutant Ninja Turtles - Turtles in Time (2 Players ver UDA)", - "tmnt2a", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver ADA)", - "tmnt2pj", "Teenage Mutant Ninja Turtles (Japan 2 Players)", - "tmnt2po", "Teenage Mutant Ninja Turtles (Oceania 2 Players)", - "tmnt_103", "Teenage Mutant Ninja Turtles (1.03)", - "tmnt_104", "Teenage Mutant Ninja Turtles (1.04)", - "tmntj", "Teenage Mutant Ninja Turtles (Japan 4 Players)", - "tmntu", "Teenage Mutant Ninja Turtles (US 4 Players, set 1)", - "tmntua", "Teenage Mutant Ninja Turtles (US 4 Players, set 2)", - "tmosh", "Tokimeki Memorial Oshiete Your Heart (GQ673 JAA)", - "tmoshs", "Tokimeki Memorial Oshiete Your Heart Seal Version (GE755 JAA)", - "tmoshsp", "Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAB)", - "tmoshspa", "Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAA)", - "tmpdoki", "Tokimeki Mahjong Paradise - Doki Doki Hen", - "tmspoker", "unknown TMS9980 Poker Game", - "tmwrp_l2", "Time Warp (L-2)", - "tmwrp_t2", "Time Warp (T-2)", - "tndrcade", "Thundercade / Twin Formation", - "tndrcadej", "Tokusyu Butai U.A.G. (Japan)", - "tnextspc", "The Next Space (set 1)", - "tnextspc2", "The Next Space (set 2)", - "tnextspcj", "The Next Space (Japan)", - "tnk3", "T.N.K III (US)", - "tnk3j", "T.A.N.K (Japan)", - "tnzs", "The NewZealand Story (World, new version) (newer PCB)", - "tnzsj", "The NewZealand Story (Japan, new version) (newer PCB)", - "tnzsjo", "The NewZealand Story (Japan, old version) (older PCB)", - "tnzso", "The NewZealand Story (World, old version) (older PCB)", - "tnzsop", "The NewZealand Story (World, prototype?) (older PCB)", - "todruaga", "The Tower of Druaga (New Ver.)", - "todruagao", "The Tower of Druaga (Old Ver.)", - "todruagas", "The Tower of Druaga (Sidam)", - "toffy", "Toffy", - "togenkyo", "Tougenkyou (Japan 890418)", - "toggle", "Toggle (prototype)", - "toki", "Toki (World, set 1)", - "tokia", "Toki (World, set 2)", - "tokib", "Toki (Datsu bootleg)", - "tokimbsj", "Tokimeki Bishoujo [BET] (Japan)", - "tokio", "Tokio / Scramble Formation (newer)", - "tokiob", "Tokio / Scramble Formation (bootleg)", - "tokioo", "Tokio / Scramble Formation (older)", - "tokiou", "Tokio / Scramble Formation (US)", - "tokisens", "Toki no Senshi - Chrono Soldier", - "tokiu", "Toki (US, set 1)", - "tokiua", "Toki (US, set 2)", - "tokkae", "Taisen Tokkae-dama (ver JAA)", - "tokyocop", "Tokyo Cop (Italy)", - "tokyogal", "Tokyo Gal Zukan (Japan)", - "tokyowar", "Tokyo Wars (Rev. TW2 Ver.A)", - "tom_06", "Theatre Of Magic (0.6a)", - "tom_10f", "Theatre Of Magic (1.0 French)", - "tom_12", "Theatre Of Magic (1.2X)", - "tom_13", "Theatre Of Magic (1.3X)", - "tom_14h", "Theatre Of Magic (1.4H)", - "tomahawk", "Tomahawk 777 (rev 5)", - "tomahawk1", "Tomahawk 777 (rev 1)", - "tomcat", "TomCat (prototype)", - "tomcatsw", "TomCat (Star Wars hardware, prototype)", - "tomy_400", "The Who's Tommy Pinball Wizard (4.00)", - "tomy_h30", "The Who's Tommy Pinball Wizard (3.00, The Netherlands)", - "tondemo", "Tondemo Crisis (Japan)", - "tonton", "Waku Waku Doubutsu Land TonTon (Japan)", - "tontonb", "Tonton [BET] (Japan set 1)", - "tonypok", "Poker Master (Tony-Poker V3.A, hack?)", - "toobin", "Toobin' (rev 3)", - "toobin1", "Toobin' (rev 1)", - "toobin2", "Toobin' (rev 2)", - "toobin2e", "Toobin' (Europe, rev 2)", - "toobine", "Toobin' (Europe, rev 3)", - "toobing", "Toobin' (German, rev 3)", - "top21", "Top XXI (Version 1.2)", - "topaz_l1", "Topaz (Shuffle) (L-1)", - "topbladv", "Top Blade V", - "topgame", "Top Game Laser L10 (Bingo)", - "topgamet", "Top Game Turbo (Bingo)", - "topgear", "Top Gear (4VXFC969, New Zealand)", - "topgun", "Vs. Top Gun", - "topgunbl", "Top Gunner (bootleg, Rotary Joystick)", - "topgunnr", "Top Gunner (Exidy)", - "topgunr", "Top Gunner (US, 8-way Joystick)", - "tophuntr", "Top Hunter - Roddy & Cathy (NGM-046)", - "tophuntrh", "Top Hunter - Roddy & Cathy (NGH-046)", - "topland", "Top Landing (World)", - "toppin", "Top Pin", - "toppyrap", "Toppy & Rappy", - "topracer", "Top Racer (with MB8841 + MB8842, 1984)", - "topracera", "Top Racer (with MB8841 + MB8842, 1983)", - "topracern", "Top Racer (no MB8841 + MB8842)", - "toprollr", "Top Roller", - "topsecex", "Top Secret (Exidy) (version 1.0)", - "topsecrt", "Top Secret (Japan, old revision)", - "topshoot", "Top Shooter", - "topskatr", "Top Skater (Export, Revision A)", - "topskatrj", "Top Skater (Japan)", - "topskatru", "Top Skater (USA, Revision A)", - "topspeed", "Top Speed (World)", - "topspeedu", "Top Speed (US)", - "toramich", "Tora e no Michi (Japan)", - "toratora", "Tora Tora (prototype?)", - "torch", "Torch", - "toride2g", "Toride II Adauchi Gaiden", - "toride2gg", "Toride II Adauchi Gaiden (German)", - "toride2gk", "Toride II Bok Su Oi Jeon Adauchi Gaiden (Korea)", - "toride2j", "Toride II (Japan)", - "tornado1", "Tornado (set 1, Defender bootleg)", - "tornado2", "Tornado (set 2, Defender bootleg)", - "tornbase", "Tornado Baseball / Ball Park", - "torp_e21", "Torpedo Alley (2.1, Europe)", - "tortufam", "Tortuga Family (Italian)", - "torus", "Torus", - "toryumon", "Toryumon", - "totan_04", "Tales Of The Arabian Nights (0.4)", - "totan_12", "Tales Of The Arabian Nights (1.2)", - "totan_13", "Tales Of The Arabian Nights (1.3)", - "totan_14", "Tales Of The Arabian Nights (1.4)", - "totcarn", "Total Carnage (rev LA1 03/10/92)", - "totcarnp", "Total Carnage (prototype, rev 1.0 01/25/92)", - "totd", "The Typing of the Dead (JPN, USA, EXP, KOR, AUS) (Rev A)", - "totem", "Totem", - "totlvica", "Total Vice (ver AAB)", - "totlvice", "Total Vice (ver UAC)", - "totlvicj", "Total Vice (ver JAD)", - "totmejan", "Tottemo E Jong", - "touchdn", "Touchdown", - "toucheme", "Touche Me", - "touchgo", "Touch & Go (World)", - "touchgoe", "Touch & Go (earlier revision)", - "touchgon", "Touch & Go (Non North America)", - "toukon3", "Shin Nihon Pro Wrestling Toukon Retsuden 3 Arcade Edition (Japan, TR1/VER.A)", - "toukon4", "Shin Nihon Pro Wrestling Toukon Retsuden 4 Arcade Edition (TRF1 Ver. A)", - "tour4000", "Tour 4000", - "tour4010", "Tour 4010", - "toursol", "Tournament Solitaire (V1.06, 08/03/95)", - "toursol1", "Tournament Solitaire (V1.04, 06/22/95)", - "tourtab2", "Tournament Table (set 2)", - "tourtabl", "Tournament Table (set 1)", - "tourvis", "Tourvision PCE bootleg", - "touryuu", "Touryuumon (V1.1)?", - "toutrun", "Turbo Out Run (Out Run upgrade, FD1094 317-0118)", - "toutrun1", "Turbo Out Run (deluxe cockpit, FD1094 317-0109)", - "toutrun2", "Turbo Out Run (cockpit, FD1094 317-0106)", - "toutrun3", "Turbo Out Run (cockpit, FD1094 317-0107)", - "toutrunj", "Turbo Out Run (Japan, Out Run upgrade, FD1094 317-0117)", - "toyfight", "Toy Fighter", - "toyland", "Toy Land Adventure", - "toypop", "Toypop", - "tp2m32", "Tetris Plus 2 (MegaSystem 32 Version)", - "tp84", "Time Pilot '84 (set 1)", - "tp84a", "Time Pilot '84 (set 2)", - "tp84b", "Time Pilot '84 (set 3)", - "tpgolf", "Top Player's Golf (NGM-003)(NGH-003)", - "tpoker2", "Turbo Poker 2", - "tps", "TPS", - "tqst", "Treasure Quest", - "trackfld", "Track & Field", - "trackfldc", "Track & Field (Centuri)", - "trackfldnz", "Track & Field (NZ bootleg?)", - "trailblz", "Trail Blazer", - "trailer", "Trailer", - "trally", "Thrash Rally (ALM-003)(ALH-003)", - "tranqgun", "Tranquilizer Gun", - "transfrm", "Transformer", - "travrusa", "Traverse USA / Zippy Race", - "travrusab", "Traverse USA (bootleg)", - "trbwtchs", "Trouble Witches AC (v1.00J)", - "trckydoc", "Tricky Doc (set 1)", - "trckydoca", "Tricky Doc (set 2)", - "treahunt", "Treasure Hunt", - "trebltop", "Treble Top (39-360-070)", - "trek_110", "Star Trek 25th Anniversary (1.10)", - "trek_11a", "Star Trek 25th Anniversary (1.10 Alpha Display)", - "trek_120", "Star Trek 25th Anniversary (1.20)", - "trek_200", "Star Trek 25th Anniversary (2.00)", - "trek_201", "Star Trek 25th Anniversary (2.01)", - "trgheart", "Trigger Heart Exelica (Rev A) (GDL-0036A)", - "tricktrp", "Trick Trap (World?)", - "trident", "Trident", - "triforce", "Triforce Bios", - "trigon", "Trigon (Japan)", - "triothep", "Trio The Punch - Never Forget Me... (World)", - "triothepj", "Trio The Punch - Never Forget Me... (Japan)", - "tripdraw", "Tripple Draw (V3.1 s)", - "tripjok", "Triple Joker (Bingo)", - "triplay", "Triple Play", - "triplep", "Triple Punch (set 1)", - "triplepa", "Triple Punch (set 2)", - "triplew1", "Mahjong Triple Wars (Japan)", - "triplew2", "Mahjong Triple Wars 2 (Japan)", - "triplfun", "Triple Fun", - "triplhnt", "Triple Hunt", - "tripool", "Tri-Pool (Casino Tech)", - "tripoola", "Tri-Pool (Costal Games)", - "trisport", "Tri-Sports", - "trivia12", "Trivial Pursuit (Think Tank - Genus Edition) (12/14/84)", - "triviabb", "Trivial Pursuit (Baby Boomer Edition) (3/20/85)", - "triviaes", "Trivial Pursuit (Spanish)", - "triviag1", "Trivial Pursuit (Think Tank - Genus Edition) (set 1)", - "triviag2", "Trivial Pursuit (Genus II Edition)", - "trivialp", "Trivial Pursuit (New Edition) (prod. 1D)", - "trivialpd", "Trivial Pursuit (New Edition) (prod. 1D) (Protocol)", - "trivialpo", "Trivial Pursuit", - "triviasp", "Trivial Pursuit (All Star Sports Edition)", - "triviayp", "Trivial Pursuit (Young Players Edition)", - "trivquiz", "Triv Quiz", - "trizeal", "Trizeal (GDL-0026)", - "trizn_l1", "Tri Zone (L-1)", - "trizn_t1", "Tri Zone (T-1)", - "troangel", "Tropical Angel", - "trog", "Trog (rev LA5 03/29/91)", - "trog3", "Trog (rev LA3 02/14/91)", - "trog4", "Trog (rev LA4 03/11/91)", - "trogpa4", "Trog (prototype, rev 4.00 07/27/90)", - "trogpa6", "Trog (prototype, rev PA6-PAC 09/09/90)", - "trojan", "Trojan (US set 1)", - "trojana", "Trojan (US set 2)", - "trojanb", "Trojan (bootleg)", - "trojanj", "Tatakai no Banka (Japan)", - "trojanr", "Trojan (Romstar)", - "tron", "Tron (8/9)", - "tron2", "Tron (6/25)", - "tron3", "Tron (6/17)", - "tron4", "Tron (6/15)", - "trophyh", "Trophy Hunting - Bear & Moose V1.0", - "trstar", "Top Ranking Stars (Ver 2.1O 1993/05/21) (New Version)", - "trstar2k", "Triple Star 2000", - "trstarj", "Top Ranking Stars (Ver 2.1J 1993/05/21) (New Version)", - "trstaro", "Top Ranking Stars (Ver 2.1O 1993/05/21) (Old Version)", - "trstaroj", "Top Ranking Stars (Ver 2.1J 1993/05/21) (Old Version)", - "truckk", "Truck Kyosokyoku (Japan, TKK2/VER.A)", - "trucksp2", "Truck Stop (P-2)", - "trucksp3", "Truck Stop (P-3)", - "truco", "Truco-Tron", - "trucocl", "Truco Clemente", - "truxton", "Truxton / Tatsujin", - "truxton2", "Truxton II / Tatsujin Oh", - "trvchlng", "Trivia Challenge", - "trvgns", "Trivia Genius", - "trvhang", "Trivia Hangup (question set 1)", - "trvhanga", "Trivia Hangup (question set 2)", - "trvmadns", "Trivia Madness - Series A Question set", - "trvmadnsa", "Trivia Madness - Series B Question set", - "trvmstr", "Trivia Master (set 1)", - "trvmstra", "Trivia Master (set 2)", - "trvmstrb", "Trivia Master (set 3)", - "trvmstrc", "Trivia Master (set 4)", - "trvquest", "Trivia Quest", - "trvwz2", "Trivia ? Whiz (6221-05, Edition 2)", - "trvwz2a", "Trivia ? Whiz (6221-05, Edition 2 Alt Sex trivia)", - "trvwz3h", "Trivia ? Whiz (6221-05, Edition 3)", - "trvwz3ha", "Trivia ? Whiz (6221-05, Edition 3 Sex trivia III)", - "trvwz3v", "Trivia ? Whiz (6221-04, Edition 3 Vertical)", - "trvwz4", "Trivia ? Whiz (6221-13, U5-0B Edition 4)", - "trvwz4a", "Trivia ? Whiz (6221-13, U5-0B Edition 4 Alt Sex trivia)", - "trvwzh", "Trivia ? Whiz (6221-00)", - "trvwzha", "Trivia ? Whiz (6221-00, with Sex trivia)", - "trvwzhb", "Trivia ? Whiz (6221-00, Alt Gen trivia)", - "trvwzv", "Trivia ? Whiz (6221-02, Vertical)", - "tryout", "Pro Baseball Skill Tryout (Japan)", - "ts2", "Battle Arena Toshinden 2 (USA 951124)", - "ts2a", "Battle Arena Toshinden 2 (USA 951124) Older", - "ts2j", "Battle Arena Toshinden 2 (Japan 951124)", - "ts_la2", "The Shadow (LA-2)", - "ts_la4", "The Shadow (LA-4)", - "ts_lf6", "The Shadow (LF-6) French", - "ts_lh6", "The Shadow (LH-6)", - "ts_lm6", "The Shadow (LM-6) Mild", - "ts_lx4", "The Shadow (LX-4)", - "ts_lx5", "The Shadow (LX-5)", - "ts_pa1", "The Shadow (PA-1)", - "tsamurai", "Samurai Nihon-Ichi (set 1)", - "tsamurai2", "Samurai Nihon-Ichi (set 2)", - "tsamuraih", "Samurai Nihon-Ichi (bootleg, harder)", - "tsarevna", "Tsarevna (v1.29)", - "tsarevnaa", "Tsarevna (v1.31)", - "tsclass", "Trap Shoot Classic (v1.0 21-mar-1997)", - "tshingen", "Shingen Samurai-Fighter (Japan, English)", - "tshingena", "Takeda Shingen (Japan, Japanese)", - "tshoot", "Turkey Shoot", - "tsptr_l3", "Transporter the Rescue (L-3)", - "tst_galx", "Galaxian Test ROM", - "tst_invd", "Space Invaders Test ROM", - "tstrike", "Thunder Strike (set 1)", - "tstrikea", "Thunder Strike (set 2, older)", - "tstrk_l1", "Triple Strike (Shuffle) (L-1)", - "tsurugi", "Tsurugi (ver EAB)", - "tsurugij", "Tsurugi (ver JAC)", - "tt_game", "unknown Toptronic pinball game", - "ttblock", "T. T. Block [TTL]", - "ttchamp", "Table Tennis Champions (set 1)", - "ttchampa", "Table Tennis Champions (set 2)", - "ttfitter", "T.T. Fitter (Japan)", - "ttmahjng", "T.T Mahjong", - "tts_l1", "Tic-Tac-Strike (Shuffle) (L-1)", - "tts_l2", "Tic-Tac-Strike (Shuffle) (L-2)", - "ttt_10", "Ticket Tac Toe (1.0)", - "tturf", "Tough Turf (set 2, Japan, 8751 317-0104)", - "tturfbl", "Tough Turf (Datsu bootleg)", - "tturfu", "Tough Turf (set 1, US, 8751 317-0099)", - "tubeit", "Tube-It", - "tubep", "Tube Panic", - "tubepb", "Tube Panic (bootleg)", - "tugboat", "Tugboat", - "tumbleb", "Tumble Pop (bootleg)", - "tumbleb2", "Tumble Pop (bootleg with PIC)", - "tumblep", "Tumble Pop (World)", - "tumblepba", "Tumble Pop (Playmark bootleg)", - "tumblepj", "Tumble Pop (Japan)", - "tunhunt", "Tunnel Hunt", - "tunhuntc", "Tunnel Hunt (Centuri)", - "turbo", "Turbo", - "turboa", "Turbo (encrypted set 1)", - "turbob", "Turbo (encrypted set 2)", - "turbofrc", "Turbo Force (old revision)", - "turbosub", "Turbo Sub (prototype rev. TSCA)", - "turbosub6", "Turbo Sub (prototype rev. TSC6)", - "turbosub7", "Turbo Sub (prototype rev. TSC7)", - "turbotag", "Turbo Tag (prototype)", - "turfmast", "Neo Turf Masters / Big Tournament Golf", - "turkhunt", "Turkey Hunting USA V1.0", - "turpin", "Turpin", - "turpins", "Turpin (bootleg on Scramble hardware)", - "turrett", "Turret Tower", - "turtles", "Turtles", - "turtship", "Turtle Ship (North America)", - "turtshipj", "Turtle Ship (Japan)", - "turtshipk", "Turtle Ship (Korea)", - "tutankhm", "Tutankham", - "tutankhms", "Tutankham (Stern Electronics)", - "tutstomb", "Tut's Tomb", - "tv21", "T.V. 21", - "tv21_3", "T.V. 21 III", - "tvablast", "Aero Blasters (Tourvision PCE bootleg)", - "tvcolumn", "Columns (Tourvision PCE bootleg)", - "tvdunexp", "Dungeon Explorer (Tourvision PCE bootleg)", - "tvflaptw", "Final Lap Twin (Tourvision PCE bootleg)", - "tvfsoc90", "Formation Soccer - Human Cup '90 (Tourvision PCE bootleg)", - "tvgomola", "Gomola Speed (Tourvision PCE bootleg)", - "tvjchan", "Jackie Chan (Tourvision PCE bootleg)", - "tvlegaxe", "Makyo Densetsu - The Legenary Axe (Tourvision PCE bootleg)", - "tvpcgen2", "PC Genjin 2 - Pithecanthropus Computerurus (Tourvision PCE bootleg)", - "tvpoker", "T.V. Poker", - "tvpow11", "Power Eleven (Tourvision PCE bootleg)", - "tvpwlg4", "Power League IV (Tourvision PCE bootleg)", - "tvrs2", "Rastan Saga II (Tourvision PCE bootleg)", - "tvsci", "Special Criminal Investigation (Tourvision PCE bootleg)", - "tvsssold", "Super Star Soldier (Tourvision PCE bootleg)", - "tvsvball", "Super Volley ball (Tourvision PCE bootleg)", - "tvthbld", "Thunder Blade (Tourvision PCE bootleg)", - "tvusapb", "USA Pro Basketball (Tourvision PCE bootleg)", - "tvvolfd", "Volfied (Tourvision PCE bootleg)", - "twcup98", "Tecmo World Cup '98 (JUET 980410 V1.000)", - "twinactn", "Twin Action", - "twinadv", "Twin Adventure (World)", - "twinadvk", "Twin Adventure (Korea)", - "twinbee", "TwinBee (ROM version)", - "twinbrat", "Twin Brats (set 1)", - "twinbrata", "Twin Brats (set 2)", - "twincobr", "Twin Cobra (World)", - "twincobru", "Twin Cobra (US)", - "twineag2", "Twin Eagle II - The Rescue Mission", - "twineagl", "Twin Eagle - Revenge Joe's Brother", - "twinfalc", "Twin Falcons", - "twinhawk", "Twin Hawk (World)", - "twinhawku", "Twin Hawk (US)", - "twinkle", "Twinkle", - "twinqix", "Twin Qix (Ver 1.0A 1995/01/17) (Prototype)", - "twins", "Twins (set 1)", - "twinsa", "Twins (set 2)", - "twinspri", "Twinkle Star Sprites", - "twinsqua", "Twin Squash", - "twocrude", "Two Crude (US)", - "twotiger", "Two Tigers (dedicated)", - "twotigerc", "Two Tigers (Tron conversion)", - "twrldc94", "Tecmo World Cup '94 (set 1)", - "twrldc94a", "Tecmo World Cup '94 (set 2)", - "twrshaft", "Tower & Shaft", - "tws96", "Tecmo World Soccer '96", - "twst_300", "Twister (3.00)", - "twst_404", "Twister (4.04)", - "twst_405", "Twister (4.05)", - "tx1", "TX-1 (World)", - "tx1jb", "TX-1 (Japan rev. B)", - "tx1jc", "TX-1 (Japan rev. C)", - "txsector", "TX-Sector", - "tylz", "Tylz (prototype)", - "typhoon", "Typhoon", - "tz_92", "Twilight Zone (9.2)", - "tz_94ch", "Twilight Zone (9.4CH)", - "tz_94h", "Twilight Zone (9.4H)", - "tz_h7", "Twilight Zone (H-7)", - "tz_h8", "Twilight Zone (H-8)", - "tz_ifpa", "Twilight Zone (IFPA rules)", - "tz_l1", "Twilight Zone (L-1)", - "tz_l2", "Twilight Zone (L-2)", - "tz_l3", "Twilight Zone (L-3)", - "tz_l4", "Twilight Zone (L-4)", - "tz_p3", "Twilight Zone (P-3)", - "tz_p4", "Twilight Zone (P-4)", - "tz_pa1", "Twilight Zone (PA-1)", - "uballoon", "Ultra Balloon", - "uboat65", "U-boat 65", - "uccops", "Undercover Cops (World)", - "uccopsar", "Undercover Cops - Alpha Renewal Version", - "uccopsj", "Undercover Cops (Japan)", - "uccopsu", "Undercover Cops (US)", - "uchuuai", "Mahjong Uchuu yori Ai wo komete (Japan)", - "ucytokyu", "Uchuu Tokkyuu Medalian", - "uecology", "Ultimate Ecology (Japan 931203)", - "ufo_x", "UFO-X", - "ufosensi", "Ufo Senshi Yohko Chan (MC-8123, 317-0064)", - "ufosensib", "Ufo Senshi Yohko Chan (bootleg, not encrypted)", - "ultennis", "Ultimate Tennis", - "ultennisj", "Ultimate Tennis (v 1.4, Japan)", - "ultrainv", "Ultra Invaders", - "ultraman", "Ultraman (Japan)", - "ultramhm", "Ultra Maru-hi Mahjong (Japan)", - "ultratnk", "Ultra Tank", - "ultrax", "Ultra X Weapons / Ultra Keibitai", - "ultrchmp", "Se Gye Hweng Dan Ultra Champion (Korea)", - "ultrchmph", "Cheng Ba Shi Jie - Chao Shi Kong Guan Jun (Taiwan)", - "umanclub", "Ultraman Club - Tatakae! Ultraman Kyoudai!!", - "umipoker", "Umi de Poker / Marine Paradise (Japan)", - "umk3", "Ultimate Mortal Kombat 3 (rev 1.2)", - "umk3r10", "Ultimate Mortal Kombat 3 (rev 1.0)", - "umk3r11", "Ultimate Mortal Kombat 3 (rev 1.1)", - "unclepoo", "Uncle Poo", - "undefeat", "Under Defeat (GDL-0035)", - "undoukai", "The Undoukai (Japan)", - "undrfire", "Under Fire (World)", - "undrfirej", "Under Fire (Japan)", - "undrfireu", "Under Fire (US)", - "uniwars", "UniWar S", - "unkch1", "New Cherry Gold '99 (bootleg of Super Cherry Master) (set 1)", - "unkch2", "Super Cherry Gold (bootleg of Super Cherry Master)", - "unkch3", "New Cherry Gold '99 (bootleg of Super Cherry Master) (set 2)", - "unkch4", "Grand Cherry Master (bootleg of Super Cherry Master)", - "unkh8gam", "unknown H8 Italian Gambling game", - "unkhorse", "unknown Japanese horse gambling game", - "unkpacg", "unknown Pac-Man gambling game", - "unsquad", "U.N. Squadron (USA)", - "untoucha", "Untouchable (Japan)", - "uopoko", "Puzzle Uo Poko (International)", - "uopokoj", "Puzzle Uo Poko (Japan)", - "upndown", "Up'n Down (315-5030)", - "upndownu", "Up'n Down (not encrypted)", - "upscope", "Up Scope", - "upyoural", "Up Your Alley", - "urashima", "Otogizoushi Urashima Mahjong (Japan)", - "usafootb", "U.S.A. Football", - "usagi", "Usagi (V2.02J)", - "usagiol", "Usagi Online (v2.04J)", - "usagiym", "Usagi - Yamashiro Mahjong Hen (GDL-0022)", - "usclssic", "U.S. Classic", - "usg182", "Games V18.2", - "usg185", "Games V18.5", - "usg187c", "Games V18.7C", - "usg32", "Super Duper Casino (California V3.2)", - "usg82", "Super Ten V8.2", - "usg83x", "Super Ten V8.3X", - "usgames", "Games V25.4X", - "usvsthem", "Us vs. Them", - "utoukond", "Ultra Toukon Densetsu (Japan)", - "v4addlad", "Adders and Ladders (v2.1) (MPU4 Video)", - "v4addlad20", "Adders and Ladders (v2.0) (MPU4 Video)", - "v4barqs2", "Barquest 2 (v0.3) (MPU4 Video)", - "v4barqst", "Barquest (v2.6d) (MPU4 Video)", - "v4big40", "Big 40 Poker (Bwb) (MPU4 Video)", - "v4bigfrt", "Big Fruits (v2.0?) (MPU4 Video)", - "v4bios", "MPU4 Video Firmware", - "v4blox", "Blox (v2.0) (MPU4 Video)", - "v4bloxd", "Blox (v2.0, Datapak) (MPU4 Video)", - "v4bubbnk", "Bubbly Bonk (v4.0?) (MPU4 Video)", - "v4bulblx", "Bullion Blox (Bwb) (MPU4 Video)", - "v4cmaze", "The Crystal Maze (v1.3) (MPU4 Video)", - "v4cmaze2", "The New Crystal Maze Featuring Ocean Zone (v2.2) (MPU4 Video)", - "v4cmaze2a", "The New Crystal Maze Featuring Ocean Zone (v0.1, AMLD) (MPU4 Video)", - "v4cmaze2b", "The New Crystal Maze Featuring Ocean Zone (v2.0) (MPU4 Video)", - "v4cmaze2c", "The New Crystal Maze Featuring Ocean Zone (v?.?) (MPU4 Video)", - "v4cmaze2d", "The New Crystal Maze Featuring Ocean Zone (v2.2, Datapak) (MPU4 Video)", - "v4cmaze3", "The Crystal Maze Team Challenge (v0.9) (MPU4 Video)", - "v4cmaze3a", "The Crystal Maze Team Challenge (v1.2, AMLD) (MPU4 Video)", - "v4cmaze3b", "The Crystal Maze Team Challenge (v0.8) (MPU4 Video)", - "v4cmaze3c", "The Crystal Maze Team Challenge (v?.?) (MPU4 Video)", - "v4cmaze3d", "The Crystal Maze Team Challenge (v0.9, Datapak) (MPU4 Video)", - "v4cmazea", "The Crystal Maze (v0.1, AMLD) (MPU4 Video)", - "v4cmazeb", "The Crystal Maze (v1.2) (MPU4 Video)", - "v4cmazec", "The Crystal Maze (v1.3 alt) (MPU4 Video)", - "v4cmazed", "The Crystal Maze (v1.1) (MPU4 Video)", - "v4cmazedat", "The Crystal Maze (v1.3, Datapak) (MPU4 Video)", - "v4cshinf", "Cash Inferno (Bwb) (MPU4 Video)", - "v4cybcas", "Cyber Casino (Nova) (MPU4 Video)", - "v4dbltak", "Double Take (Bwb) (MPU4 Video)", - "v4dealem", "Deal 'Em (MPU4 Conversion Kit, v7.0)", - "v4eyedwn", "Eyes Down (v1.3) (MPU4 Video)", - "v4eyedwnd", "Eyes Down (v1.3, Datapak) (MPU4 Video)", - "v4frfact", "Fruit Factory (Bwb) (MPU4 Video)", - "v4gldrsh", "Gold Rush (Bwb) (MPU4 Video)", - "v4mate", "The Mating Game (v0.4) (MPU4 Video)", - "v4mated", "The Mating Game (v0.4, Datapak) (MPU4 Video)", - "v4mazbel", "Mazooma Belle (v2.5) (MPU4 Video)", - "v4mazbla", "Mazooma Belle (v1.5) (MPU4 Video)", - "v4mdice", "Miami Dice (Bwb) (MPU4 Video)", - "v4megbuk", "Megabucks Poker (Bwb) (MPU4 Video)", - "v4miami", "Miami Dice (Nova) (MPU4 Video)", - "v4missis", "Mississippi Lady (Nova) (MPU4 Video)", - "v4monte", "Monte Carlo Or Bust (Bwb) (MPU4 Video)", - "v4opt3", "Option 3 (v1.0) (MPU4 Video)", - "v4opt3d", "Option 3 (v1.0) (Datapak) (MPU4 Video)", - "v4ovrmn3", "Over Moon Pt3 (Bwb) (MPU4 Video)", - "v4picdil", "Piccadilly Nights (Nova) (MPU4 Video)", - "v4psi", "Prize Space Invaders (v1.1) (MPU4 Video)", - "v4psia", "Prize Space Invaders (v1.2) (MPU4 Video)", - "v4psib", "Prize Space Invaders (v2.0?) (MPU4 Video)", - "v4pztet", "Prize Tetris (Bwb) (MPU4 Video, set 1)", - "v4pzteta", "Prize Tetris (Bwb) (MPU4 Video, set 2)", - "v4quidgr", "Ten Quid Grid (v1.2) (MPU4 Video)", - "v4quidgr2", "Ten Quid Grid (v2.4) (MPU4 Video)", - "v4quidgr2d", "Ten Quid Grid (v2.4, Datapak) (MPU4 Video)", - "v4quidgrd", "Ten Quid Grid (v1.2, Datapak) (MPU4 Video)", - "v4redhtp", "Red Hot Poker (20p/10GBP Cash, release 3) (MPU4 Video)", - "v4rencas", "Reno Casino (Bwb) (MPU4 Video)", - "v4reno", "Reno Reels (20p/10GBP Cash, release A) (MPU4 Video)", - "v4rhmaz", "Red Hot Mazooma Belle (Bwb) (MPU4 Video)", - "v4shpwnd", "Shop Window (v2.0) (MPU4 Video)", - "v4sixx", "6-X (Bwb) (MPU4 Video)", - "v4sklcsh", "Skill Cash (v1.1) (MPU4 Video)", - "v4skltrk", "Skill Trek (v1.1) (MPU4 Video, set 1)", - "v4skltrka", "Skill Trek (v1.1) (MPU4 Video, set 2)", - "v4strike", "Strike it Lucky (v0.5) (MPU4 Video)", - "v4strike2", "Strike it Lucky (v0.53) (MPU4 Video)", - "v4strike2d", "Strike it Lucky (v0.53, Datapak) (MPU4 Video)", - "v4striked", "Strike it Lucky (v0.5, Datapak) (MPU4 Video)", - "v4sunbst", "Sunburst (Bwb) (MPU4 Video)", - "v4tetrs", "BwB Tetris v 2.2 (MPU4 Video)", - "v4time", "Time Machine (v2.0) (MPU4 Video)", - "v4timebn", "Time Bandit (Bwb) (MPU4 Video)", - "v4turnov", "Turnover (v2.3) (MPU4 Video)", - "v4vgpok", "Vegas Poker (prototype, release 2) (MPU4 Video)", - "v4wize", "Wize Move (v1.3d) (MPU4 Video)", - "v4wizea", "Wize Move (v1.2) (MPU4 Video)", - "valkyrie", "Valkyrie No Densetsu (Japan)", - "valtric", "Valtric", - "vamphalf", "Vamf x1/2 (Europe)", - "vamphalfk", "Vamp x1/2 (Korea)", - "vampj", "Vampire: The Night Warriors (Japan 940705)", - "vampja", "Vampire: The Night Warriors (Japan 940705 alt)", - "vampjr1", "Vampire: The Night Warriors (Japan 940630)", - "vandyke", "Vandyke (Japan)", - "vandykeb", "Vandyke (bootleg with PIC16c57)", - "vandykejal", "Vandyke (Jaleco, set 1)", - "vandykejal2", "Vandyke (Jaleco, set 2)", - "vangrd2", "Vanguard II", - "vanguard", "Vanguard (SNK)", - "vanguardc", "Vanguard (Centuri)", - "vanguardj", "Vanguard (Japan)", - "vanilla", "Mahjong Vanilla Syndrome (Japan)", - "vanvan", "Van-Van Car", - "vanvanb", "Van-Van Car (Karateco set 2)", - "vanvank", "Van-Van Car (Karateco set 1)", - "vaportra", "Vapor Trail - Hyper Offence Formation (World revision 1)", - "vaportra3", "Vapor Trail - Hyper Offence Formation (World revision 3?)", - "vaportrau", "Vapor Trail - Hyper Offence Formation (US)", - "vaportrx", "Vapor TRX", - "vaportrxp", "Vapor TRX (prototype)", - "varth", "Varth: Operation Thunderstorm (World 920714)", - "varthj", "Varth: Operation Thunderstorm (Japan 920714)", - "varthr1", "Varth: Operation Thunderstorm (World 920612)", - "varthu", "Varth: Operation Thunderstorm (USA 920612)", - "vasara", "Vasara", - "vasara2", "Vasara 2 (set 1)", - "vasara2a", "Vasara 2 (set 2)", - "vastar", "Vastar (set 1)", - "vastar2", "Vastar (set 2)", - "vastar3", "Vastar (set 3)", - "vastar4", "Vastar (set 4)", - "vathlete", "Virtua Athletics / Virtua Athlete (GDS-0019)", - "vautour", "Vautour (bootleg of Phoenix) (8085A CPU)", - "vautourz", "Vautour (bootleg of Phoenix) (Z80 CPU)", - "vball", "U.S. Championship V'ball (US)", - "vball2pj", "U.S. Championship V'ball (Japan)", - "vball2pjb", "U.S. Championship V'ball (bootleg of Japan set)", - "vballb", "U.S. Championship V'ball (bootleg of US set)", - "vblokbrk", "VS Block Breaker (Asia)", - "vbowl", "Virtua Bowling (World, V101XCM)", - "vbowlj", "Virtua Bowling (Japan, V100JCM)", - "vcarn", "Video Carnival 1999 / Super Royal Card (Version 0.11)", - "vcircle", "Vicious Circle (prototype)", - "vcombat", "Virtual Combat", - "vcop", "Virtua Cop (Revision B)", - "vcop2", "Virtua Cop 2", - "vcop3", "Virtua Cop 3 (Rev A) (GDX-0003A)", - "vcopa", "Virtua Cop (Revision A)", - "vector", "Vector", - "vega", "Vega", - "vegas", "Vegas", - "vegasfst", "Royal Vegas Joker Card (fast deal)", - "vegasfte", "Royal Vegas Joker Card (fast deal, English gfx)", - "vegasgp", "Vegas (Game Plan)", - "vegasmil", "Royal Vegas Joker Card (fast deal, Mile)", - "vegasslw", "Royal Vegas Joker Card (slow deal)", - "vegast", "Vegas (Taito)", - "vendetta", "Vendetta (World 4 Players ver. T)", - "vendetta2p", "Vendetta (World 2 Players ver. W)", - "vendetta2pd", "Vendetta (Asia 2 Players ver. D)", - "vendetta2pu", "Vendetta (Asia 2 Players ver. U)", - "vendettaj", "Crime Fighters 2 (Japan 2 Players ver. P)", - "vendettar", "Vendetta (World 4 Players ver. R)", - "venture", "Venture (version 5 set 1)", - "venture2", "Venture (version 5 set 2)", - "venture4", "Venture (version 4)", - "venus", "Venus (bootleg of Gyruss)", - "version4", "Version 4 (Version 4.3R CGA)", - "version4d2", "Version 4 (Version 4.3E CGA)", - "version4d3", "Version 4 (Version 4.3LT CGA)", - "version4o", "Version 4 (Version 4.2R CGA)", - "version4v", "Version 4 (Version 4.3R Dual)", - "version4v2", "Version 4 (Version 4.3E Dual)", - "version4v3", "Version 4 (Version 4.3LT Dual)", - "vf", "Virtua Fighter", - "vf2", "Virtua Fighter 2 (Version 2.1)", - "vf2a", "Virtua Fighter 2 (Revision A)", - "vf2b", "Virtua Fighter 2 (Revision B)", - "vf2o", "Virtua Fighter 2", - "vf3", "Virtua Fighter 3 (Revision C)", - "vf3a", "Virtua Fighter 3 (Revision A)", - "vf3tb", "Virtua Fighter 3 Team Battle", - "vf4", "Virtua Fighter 4 (GDS-0012)", - "vf4b", "Virtua Fighter 4 (Rev B) (GDS-0012B)", - "vf4c", "Virtua Fighter 4 (Rev C) (GDS-0012C)", - "vf4cart", "Virtua Fighter 4 (Cartridge)", - "vf4evo", "Virtua Fighter 4 Evolution (Rev B) (GDS-0024B)", - "vf4evoa", "Virtua Fighter 4 Evolution (Rev A) (GDS-0024A)", - "vf4evoct", "Virtua Fighter 4 Evolution (Cartridge)", - "vf4tuned", "Virtua Fighter 4 Final Tuned (Rev F) (GDS-0036F)", - "vf4tuneda", "Virtua Fighter 4 Final Tuned (Rev A) (GDS-0036A)", - "vf4tunedd", "Virtua Fighter 4 Final Tuned (Rev D) (GDS-0036D)", - "vfive", "V-Five (Japan)", - "vfkids", "Virtua Fighter Kids (JUET 960319 V0.000)", - "vformula", "Virtua Formula", - "vfremix", "Virtua Fighter Remix (JUETBKAL 950428 V1.000)", - "vfurlong", "Net Select Keiba Victory Furlong", - "vgoalsca", "V Goal Soccer (set 2)", - "vgoalsoc", "V Goal Soccer (set 1)", - "vhunt2", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970929)", - "vhunt2d", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970913 Phoenix Edition) (bootleg)", - "vhunt2r1", "Vampire Hunter 2: Darkstalkers Revenge (Japan 970913)", - "vhuntj", "Vampire Hunter: Darkstalkers' Revenge (Japan 950316)", - "vhuntjr1", "Vampire Hunter: Darkstalkers' Revenge (Japan 950307)", - "vhuntjr1s", "Vampire Hunter: Darkstalkers' Revenge (Japan 950307 stop version)", - "vhuntjr2", "Vampire Hunter: Darkstalkers' Revenge (Japan 950302)", - "victlapw", "Ace Driver: Victory Lap (Rev. ADV2)", - "victnine", "Victorious Nine", - "victor21", "Victor 21", - "victor5", "G.E.A.", - "victor6", "Victor 6 (v2.3N)", - "victor6a", "Victor 6 (v2.3)", - "victor6b", "Victor 6 (v1.2)", - "victorba", "Victor Banana", - "victory", "Victory", - "victoryp", "Victory (Pinball)", - "victroad", "Victory Road", - "videocba", "Video Cordoba", - "videodad", "Video Dado", - "videomat", "Videomat (Polish bootleg)", - "videopin", "Video Pinball", - "videopkr", "Video Poker", - "videtrna", "Videotron Poker (normal controls)", - "videtron", "Videotron Poker (cards selector, set 1)", - "videtron2", "Videotron Poker (cards selector, set 2)", - "vidvince", "Video Vince and the Game Factory (prototype)", - "viewpoin", "Viewpoint", - "vigilant", "Vigilante (World, set 1)", - "vigilant1", "Vigilante (World, set 2)", - "vigilantj", "Vigilante (Japan)", - "vigilantu", "Vigilante (US)", - "vigilantu2", "Vigilante (US) - Rev. G", - "viking", "Viking", - "vikingt", "Viking Treasure", - "vimana", "Vimana (World, set 1)", - "vimanaj", "Vimana (Japan)", - "vimanan", "Vimana (World, set 2)", - "vindctr2", "Vindicators Part II (rev 3)", - "vindctr2r1", "Vindicators Part II (rev 1)", - "vindctr2r2", "Vindicators Part II (rev 2)", - "vindictr", "Vindicators (rev 5)", - "vindictr1", "Vindicators (rev 1)", - "vindictr2", "Vindicators (rev 2)", - "vindictr4", "Vindicators (rev 4)", - "vindictre", "Vindicators (Europe, rev 5)", - "vindictre3", "Vindicators (Europe, rev 3)", - "vindictre4", "Vindicators (Europe, rev 4)", - "vindictrg", "Vindicators (German, rev 1)", - "viofight", "Violence Fight (World)", - "viofightj", "Violence Fight (Japan)", - "viofightu", "Violence Fight (US)", - "viostorm", "Violent Storm (ver EAC)", - "viostorma", "Violent Storm (ver AAC)", - "viostormab", "Violent Storm (ver AAB)", - "viostormeb", "Violent Storm (ver EAB)", - "viostormj", "Violent Storm (ver JAC)", - "viostormu", "Violent Storm (ver UAC)", - "viostormub", "Violent Storm (ver UAB)", - "vipclub", "Vip Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880310)", - "viper", "Viper", - "viperp", "Viper (Pinball)", - "viprp1", "Viper Phase 1 (New Version, World)", - "viprp1hk", "Viper Phase 1 (Hong Kong)", - "viprp1j", "Viper Phase 1 (New Version, Japan)", - "viprp1k", "Viper Phase 1 (New Version, Korea)", - "viprp1oj", "Viper Phase 1 (Japan)", - "viprp1ot", "Viper Phase 1 (Germany)", - "viprp1s", "Viper Phase 1 (New Version, Switzerland)", - "viprp1u", "Viper Phase 1 (New Version, US set 1)", - "viprp1ua", "Viper Phase 1 (New Version, US set 2)", - "viprsega", "Viper Night Drivin'", - "virnba", "Virtua NBA (JPN, USA, EXP, KOR, AUS)", - "virnbao", "Virtua NBA (JPN, USA, EXP, KOR, AUS) (original)", - "virnbap", "Virtua NBA (prototype)", - "vitaminc", "Mahjong Vitamin C (Japan)", - "vivdolls", "Vivid Dolls", - "vlcno_1a", "Volcano (Sound Only, alternate version)", - "vlcno_1b", "Volcano (Sound Only)", - "vlcno_ax", "Volcano", - "vliner", "V-Liner (set 1)", - "vlinero", "V-Liner (set 2)", - "vmahjong", "Virtual Mahjong (J 961214 V1.000)", - "vmetal", "Varia Metal", - "vmetaln", "Varia Metal (New Ways Trading Co.)", - "voleybal", "Voley Ball", - "volfied", "Volfied (World, revision 1)", - "volfiedj", "Volfied (Japan, revision 1)", - "volfiedjo", "Volfied (Japan)", - "volfiedo", "Volfied (World)", - "volfiedu", "Volfied (US, revision 1)", - "volfieduo", "Volfied (US)", - "vollyrmt", "Volly (Ramtek) [TTL]", - "voltan", "Voltan Escapes Cosmic Doom", - "von", "Cyber Troopers Virtual-On (USA, Revision B)", - "von2", "Virtual On 2: Oratorio Tangram (Revision B)", - "von254g", "Virtual On 2: Oratorio Tangram (ver 5.4g)", - "vonj", "Cyber Troopers Virtual-On (Japan, Revision B)", - "vonot", "Virtual On Oratorio Tangram M.S.B.S. ver5.66 2000 Edition", - "vortex", "Vortex", - "vortexp", "Vortex (Pinball)", - "voyager", "Star Trek: Voyager", - "vpoker", "Videotronics Poker", - "vpool", "Video Pool (bootleg on Moon Cresta hardware)", - "vr", "Virtua Racing", - "vrkon_l1", "Varkon (L-1)", - "vrnwrld", "Verne's World", - "vroulet", "Vegas Roulette", - "vs10yard", "Vs 10-Yard Fight (World, 11/05/84)", - "vs10yardj", "Vs 10-Yard Fight (Japan)", - "vs10yardu", "Vs 10-Yard Fight (US, Taito license)", - "vs2", "Virtua Striker 2 (Step 2.0)", - "vs2002ex", "Virtua Striker 2002 (GDT-0002)", - "vs2002j", "Virtua Striker 2002 (GDT-0001)", - "vs215", "Virtua Striker 2 (Step 1.5)", - "vs215o", "Virtua Striker 2 (Step 1.5, older)", - "vs298", "Virtua Striker 2 '98 (Step 2.0)", - "vs29815", "Virtua Striker 2 '98 (Step 1.5)", - "vs299", "Virtua Striker 2 '99", - "vs299a", "Virtua Striker 2 '99 (Revision A)", - "vs299b", "Virtua Striker 2 '99 (Revision B)", - "vs2_2k", "Virtua Striker 2 Ver. 2000 (JPN, USA, EXP, KOR, AUS) (Rev C)", - "vs2v991", "Virtua Striker 2 '99.1 (Revision B)", - "vs4", "Virtua Striker 4 (Export) (GDT-0015)", - "vs42006", "Virtua Striker 4 Ver.2006 (Japan) (Rev D) (GDT-0020D)", - "vs4j", "Virtua Striker 4 (Japan) (Rev E) (GDT-0013E)", - "vsav", "Vampire Savior: The Lord of Vampire (Euro 970519)", - "vsav2", "Vampire Savior 2: The Lord of Vampire (Japan 970913)", - "vsav2d", "Vampire Savior 2: The Lord of Vampire (Japan 970913 Phoenix Edition) (bootleg)", - "vsava", "Vampire Savior: The Lord of Vampire (Asia 970519)", - "vsavd", "Vampire Savior: The Lord of Vampire (Euro 970519 Phoenix Edition) (bootleg)", - "vsavh", "Vampire Savior: The Lord of Vampire (Hispanic 970519)", - "vsavj", "Vampire Savior: The Lord of Vampire (Japan 970519)", - "vsavu", "Vampire Savior: The Lord of Vampire (USA 970519)", - "vsbball", "Vs. BaseBall (US, set BA E-1)", - "vsbballj", "Vs. BaseBall (Japan, set BA A-3)", - "vsbballja", "Vs. BaseBall (Japan, set BA A-2)", - "vsbballjb", "Vs. BaseBall (Japan, set BA A-1)", - "vsfdf", "Vs. Freedom Force", - "vsgongf", "VS Gong Fight", - "vsgradus", "Vs. Gradius (US, set GR E)", - "vsgshoe", "Vs. Gumshoe (set GM5)", - "vshoot", "J-League Soccer V-Shoot (Japan)", - "vsmahjng", "Vs. Mahjong (Japan)", - "vsnetscr", "Versus Net Soccer (ver EAD)", - "vsnetscra", "Versus Net Soccer (ver AAA)", - "vsnetscreb", "Versus Net Soccer (ver EAB)", - "vsnetscrj", "Versus Net Soccer (ver JAB)", - "vsnetscru", "Versus Net Soccer (ver UAB)", - "vspinbal", "Vs. Pinball (US, set PN4 E-1)", - "vspinbalj", "Vs. Pinball (Japan, set PN3 B)", - "vspsx", "Video System PSX", - "vsskykid", "Vs. Super SkyKid", - "vsslalom", "Vs. Slalom", - "vssoccer", "Vs. Soccer (set SC4-2 A)", - "vssoccera", "Vs. Soccer (set SC4-3 ?)", - "vstennis", "Vs. Tennis (Japan/USA, set TE A-3)", - "vstennisa", "Vs. Tennis (Japan/USA, set 2)", - "vstennisb", "Vs. Tennis (Japan/USA, set 3)", - "vstetris", "Vs. Tetris", - "vstrik3", "Virtua Striker 3 Ver. 2002 (GDS-0006)", - "vstrik3c", "Virtua Striker 3 (USA, EXP, KOR, AUS) (Cart, Rev C)", - "vstrik3cb", "Virtua Striker 3 (USA, EXP, KOR, AUS) (Cart, Rev B)", - "vstriker", "Virtua Striker (Revision A)", - "vstrikero", "Virtua Striker", - "vtenis2c", "Virtua Tennis 2 / Power Smash 2 (JPN) (USA, EXP, KOR, AUS) (Cart, Rev A)", - "vtennis", "Virtua Tennis (USA, EXP, KOR, AUS) / Power Smash (JPN)", - "vtennis2", "Virtua Tennis 2 / Power Smash 2 (Rev A) (GDS-0015A)", - "vtennisg", "Virtua Tennis / Power Smash (GDS-0011)", - "vulcan", "Vulcan Venture (New)", - "vulcana", "Vulcan Venture (Old)", - "vulcanb", "Vulcan Venture (Oldest)", - "vulgus", "Vulgus (set 1)", - "vulgusa", "Vulgus (set 2)", - "vulgusj", "Vulgus (Japan?)", - "wackadoo", "Wack-A-Doodle-Doo (Redemption)", - "wacko", "Wacko", - "wakuwak7", "Waku Waku 7", - "wallc", "Wall Crash (set 1)", - "wallca", "Wall Crash (set 2)", - "wallst", "Wall Street", - "wanganmd", "Wangan Midnight (WMN1 Ver. A)", - "wangmd2b", "Wangan Midnight Maximum Tune 2 (Japan) (Rev A) (GDX-0016A)", - "wangmid", "Wangan Midnight Maximum Tune (Export) (Rev B) (GDX-0009B)", - "wangmid2", "Wangan Midnight Maximum Tune 2 (Export) (GDX-0015)", - "wanted", "Wanted", - "warcadia", "Waga Seishun no Arcadia", - "wardner", "Wardner (World)", - "wardnerj", "Wardner no Mori (Japan)", - "warfa", "War: The Final Assault", - "wargods", "War Gods (HD 10/09/1996 - Dual Resolution)", - "wargodsa", "War Gods (HD 08/15/1996)", - "wargodsb", "War Gods (HD 12/11/1995)", - "warlords", "Warlords", - "warofbug", "War of the Bugs or Monsterous Manouvers in a Mushroom Maze", - "warofbugg", "War of the Bugs or Monsterous Manouvers in a Mushroom Maze (German)", - "warofbugu", "War of the Bugs or Monsterous Manouvers in a Mushroom Maze (US)", - "warpsped", "Warp Speed (prototype)", - "warpwarp", "Warp & Warp", - "warpwarpr", "Warp Warp (Rock-Ola set 1)", - "warpwarpr2", "Warp Warp (Rock-Ola set 2)", - "warrior", "Warrior", - "warriorb", "Warrior Blade - Rastan Saga Episode III (Japan)", - "warzard", "Warzard (Japan 961121)", - "warzardr1", "Warzard (Japan 961023)", - "waterski", "Water Ski", - "waterwld", "Waterworld (rev.3)", - "waterwld2", "Waterworld (rev.2)", - "watrball", "Water Balls", - "waverunr", "Wave Runner (Japan, Revision A)", - "waveshrk", "Wave Shark (UAB, USA v1.04)", - "wb3", "Wonder Boy III - Monster Lair (set 6, World, System 16B, 8751 317-0098)", - "wb31", "Wonder Boy III - Monster Lair (set 1, Japan, System 16A, FD1094 317-0084)", - "wb32", "Wonder Boy III - Monster Lair (set 2, Japan, System 16B, FD1094 317-0085)", - "wb33", "Wonder Boy III - Monster Lair (set 3, World, System 16B, FD1094 317-0089)", - "wb34", "Wonder Boy III - Monster Lair (set 4, Japan, System 16B, FD1094 317-0087)", - "wb35", "Wonder Boy III - Monster Lair (set 5, Japan, System 16A, FD1089A 317-0086)", - "wb3bbl", "Wonder Boy III - Monster Lair (bootleg)", - "wbbc97", "Beach Festival World Championship 1997", - "wbdeluxe", "Wonder Boy Deluxe", - "wbeachvl", "World Beach Volley (set 1)", - "wbeachvl2", "World Beach Volley (set 2)", - "wbeachvl3", "World Beach Volley (set 3)", - "wbml", "Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043)", - "wbmlb", "Wonder Boy in Monster Land (English bootleg set 1)", - "wbmlbg", "Wonder Boy in Monster Land (English bootleg set 2)", - "wbmlbge", "Wonder Boy in Monster Land (English bootleg set 3)", - "wbmljb", "Wonder Boy in Monster Land (Japan bootleg)", - "wbmljo", "Wonder Boy in Monster Land (Japan Old Ver., MC-8123, 317-0043)", - "wbmlvc", "Wonder Boy in Monster Land (English, Virtual Console)", - "wboy", "Wonder Boy (set 1, 315-5177)", - "wboy2", "Wonder Boy (set 2, 315-5178)", - "wboy2u", "Wonder Boy (set 2, not encrypted)", - "wboy3", "Wonder Boy (set 3, 315-5135)", - "wboy4", "Wonder Boy (315-5162, 4-D Warriors Conversion)", - "wboy5", "Wonder Boy (set 5, bootleg)", - "wboyo", "Wonder Boy (set 1, 315-5135)", - "wboysys2", "Wonder Boy (system 2)", - "wboyu", "Wonder Boy (prototype?)", - "wboyub", "Wonder Boy (US bootleg)", - "wc90", "Tecmo World Cup '90 (World)", - "wc90a", "Tecmo World Cup '90 (Euro set 1)", - "wc90b", "Tecmo World Cup '90 (Euro set 2)", - "wc90b1", "Euro League (Italian hack of Tecmo World Cup '90)", - "wc90b2", "Worldcup '90", - "wc90t", "Tecmo World Cup '90 (trackball set 1)", - "wcat3", "Wild Cat 3", - "wcatcher", "Mahjong Wakuwaku Catcher (Japan)", - "wcbowl", "World Class Bowling (v1.66)", - "wcbowl11", "World Class Bowling (v1.1)", - "wcbowl12", "World Class Bowling (v1.2)", - "wcbowl13", "World Class Bowling (v1.3)", - "wcbowl13j", "World Class Bowling (v1.3J, Japan)", - "wcbowl14", "World Class Bowling (v1.4)", - "wcbowl140", "World Class Bowling Tournament (v1.40)", - "wcbowl15", "World Class Bowling (v1.5)", - "wcbowl16", "World Class Bowling (v1.6)", - "wcbowl161", "World Class Bowling (v1.61)", - "wcbowl165", "World Class Bowling (v1.65)", - "wcbowldx", "World Class Bowling Deluxe (v2.00)", - "wcherry", "Win Cherry (ver 0.16 - 19990219)", - "wcombat", "World Combat (ver UAA?)", - "wcombatj", "World Combat (ver JAA)", - "wcombatk", "World Combat (ver KBC)", - "wcs_l2", "World Cup Soccer (Lx-2)", - "wcs_p2", "World Cup Soccer (Pa-2)", - "wcs_p3", "World Cup Soccer (Px-3)", - "wcsoccer", "World Challenge Soccer (rev.1)", - "wcsoccerd2", "World Challenge Soccer (disp.rev.2)", - "wcup90", "World Cup 90", - "wcvol95", "World Cup Volley '95 (Japan v1.0)", - "wd_03r", "Who Dunnit (0.3 R)", - "wd_048r", "Who Dunnit (0.48 R)", - "wd_10f", "Who Dunnit (1.0 French)", - "wd_10g", "Who Dunnit (1.0 Germany)", - "wd_10r", "Who Dunnit (1.0 R)", - "wd_11", "Who Dunnit (1.1)", - "wd_12", "Who Dunnit (1.2)", - "wd_12g", "Who Dunnit (1.2 Germany)", - "wdun", "Who Dunnit (Russia)", - "wecleman", "WEC Le Mans 24 (set 1)", - "wecleman2", "WEC Le Mans 24 (set 2)", - "weddingr", "Wedding Rhapsody (GX624 JAA)", - "welltris", "Welltris (World?, 2 players)", - "welltrisj", "Welltris (Japan, 2 players)", - "westgun2", "Western Gun Part II", - "weststry", "West Story (bootleg of Blood Bros.)", - "westvent", "Western Venture (Ver. AA.02.D)", - "wexpress", "Western Express (Japan, rev 4)", - "wexpressb1", "Western Express (bootleg set 1)", - "wexpressb2", "Western Express (bootleg set 2)", - "wexpressb3", "Western Express (bootleg set 3)", - "wfortune", "Wheel Of Fortune (set 1)", - "wfortunea", "Wheel Of Fortune (set 2)", - "wg3dh", "Wayne Gretzky's 3D Hockey", - "wgp", "World Grand Prix (US)", - "wgp2", "World Grand Prix 2 (Japan)", - "wgpj", "World Grand Prix (Japan)", - "wgpjoy", "World Grand Prix (joystick version) (Japan, set 1)", - "wgpjoya", "World Grand Prix (joystick version) (Japan, set 2)", - "wh1", "World Heroes (ALM-005)", - "wh1h", "World Heroes (ALH-005)", - "wh1ha", "World Heroes (set 3)", - "wh2", "World Heroes 2 (ALM-006)(ALH-006)", - "wh2j", "World Heroes 2 Jet (ADM-007)(ADH-007)", - "whalecsh", "Whales of Cash (20155711, Malaysia)", - "wheelfir", "Wheels & Fire", - "wheelrun", "Wheels Runner", - "wheregld", "Where's the Gold (20177111, Malaysia)", - "whirl_l2", "Whirlwind (L-2)", - "whirl_l3", "Whirlwind (L-3)", - "whirl_lg3", "Whirlwind (LG-3)", - "whiterus", "White Russia (Konami Endeavour)", - "whizz", "Whizz", - "whodunit", "Who Dunit (version 9.0)", - "whodunit8", "Who Dunit (version 8.0)", - "whoopee", "Pipi & Bibis / Whoopee!! (Teki Paki hardware)", - "whp", "World Heroes Perfect", - "wiggie", "Wiggie Waggie", - "wildfang", "Wild Fang / Tecmo Knight", - "wildfangs", "Wild Fang", - "wildfyre", "Wildfyre", - "wildone", "Wild One (4VXEC5357, New Zealand)", - "wildpkr", "Wild Poker (ver. D 1.01)", - "wildplt", "Wild Pilot", - "wildways", "Wild Ways (10130111, Malaysia)", - "willow", "Willow (USA)", - "willowj", "Willow (Japan)", - "willowo", "Willow (USA Old Ver.)", - "wilytowr", "Wily Tower", - "winbid", "Winning Bid (Russia)", - "winbingo", "Win Win Bingo (set 1)", - "winbingoa", "Win Win Bingo (set 2)", - "windheat", "Winding Heat (EAA, Euro v2.11)", - "windheata", "Winding Heat (AAA, Asia v2.11)", - "windheatj", "Winding Heat (JAA, Japan v2.11)", - "windheatu", "Winding Heat (UBC, USA v2.22)", - "wingwar", "Wing War (World)", - "wingwarj", "Wing War (Japan)", - "wingwaru", "Wing War (US)", - "wink", "Wink (set 1)", - "winka", "Wink (set 2)", - "winner81", "Winners Circle (81, 28*28 PCB)", - "winner81b", "Winners Circle (81, 18*22 PCB)", - "winner82", "Winners Circle (82)", - "winrun", "Winning Run", - "winrun91", "Winning Run '91 (Japan)", - "winrungp", "Winning Run Suzuka Grand Prix (Japan)", - "winspike", "Winning Spike (ver EAA)", - "winspikej", "Winning Spike (ver JAA)", - "wintbob", "The Winter Bobble (bootleg of Snow Bros.)", - "winterht", "Winter Heat (JUET 971012 V1.000)", - "wipeormt", "Wipeout (Ramtek) [TTL]", - "wipeout", "Wipeout (rev.2)", - "wiping", "Wiping", - "wiseguy", "Wise Guy", - "witch", "Witch", - "witchb", "Witch (With ranking)", - "witchcda", "Witch Card (Spanish, witch game, set 1)", - "witchcdb", "Witch Card (Spanish, witch game, set 2)", - "witchcdc", "Witch Card (English, no witch game)", - "witchcdd", "Witch Card (German, WC3050, set 1 )", - "witchcde", "Witch Card (Video Klein CPU box, set 2)", - "witchcdf", "Witch Card (English, witch game, lamps)", - "witchcdg", "Witch Card (Falcon, enhanced sound)", - "witchcdh", "Witch Card (German, WC3050, set 2 )", - "witchcdi", "Witch Card (German, WC3050, 27-4-94)", - "witchcdk", "Witch Game (Video Klein, set 2)", - "witchcrd", "Witch Card (Video Klein CPU box, set 1)", - "witchgme", "Witch Game (Video Klein, set 1)", - "witchjol", "Jolli Witch (Export, 6T/12T ver 1.57D)", - "witchryl", "Witch Royal (Export version 2.1)", - "witchs", "Witch (Sega License)", - "wits", "Wit's (Japan)", - "wivernwg", "Wivern Wings", - "wiz", "Wiz", - "wizard", "Wizard (Ver 1.0)", - "wizdfire", "Wizard Fire (Over Sea v2.1)", - "wizdfireu", "Wizard Fire (US v1.1)", - "wizt", "Wiz (Taito, set 1)", - "wizta", "Wiz (Taito, set 2)", - "wizwarz", "Wiz Warz (prototype)", - "wizzquiz", "Wizz Quiz (Konami version)", - "wizzquiza", "Wizz Quiz (version 4)", - "wjammers", "Windjammers / Flying Power Disc", - "wlcc", "Wan Li Chang Cheng (China, V638C)", - "wldarrow", "Wild Arrow (color, Standard V4.8)", - "wldcourt", "World Court (Japan)", - "wldcp_l1", "World Cup Soccer (L-1)", - "wldkicks", "World Kicks (WK2 Ver. A)", - "wldkicksa", "World Kicks (WK3 Ver. A)", - "wldkicksb", "World Kicks PCB (WKC1 Ver. A)", - "wldrider", "Wild Riders (JPN, USA, EXP, KOR, AUS)", - "wldstrek", "Wild Streak (Russia)", - "wldwitch", "Wild Witch (Export, 6T/12T ver 1.84A)", - "wldwitcha", "Wild Witch (Export, 6T/12T ver 1.57-SP)", - "wldwitchb", "Wild Witch (Export, 6T/12T ver 1.57-TE)", - "wldwitchc", "Wild Witch (Export, 6T/12T ver 1.62A)", - "wldwitchd", "Wild Witch (Export, 6T/12T ver 1.62B)", - "wldwitche", "Wild Witch (Export, 6T/12T ver 1.62A-F)", - "wldwitchf", "Wild Witch (Export, 6T/12T ver 1.62A alt)", - "wldwitchg", "Wild Witch (Export, 6T/12T ver 1.62B alt)", - "wldwitchh", "Wild Witch (Export, 6T/12T ver 1.65A)", - "wldwitchi", "Wild Witch (Export, 6T/12T ver 1.65A-S)", - "wldwitchj", "Wild Witch (Export, 6T/12T ver 1.65A-S alt)", - "wldwitchk", "Wild Witch (Export, 6T/12T ver 1.65A-N)", - "wldwitchl", "Wild Witch (Export, 6T/12T ver 1.70A beta)", - "wldwitchm", "Wild Witch (Export, 6T/12T ver 1.70A)", - "wldwitchn", "Wild Witch (Export, 6T/12T ver 1.70A alt)", - "wldwitcho", "Wild Witch (Export, 6T/12T ver 1.74A-SP-BELG)", - "wldwitchp", "Wild Witch (Export, 6T/12T ver 1.74A)", - "wldwitchq", "Wild Witch (Export, 6T/12T ver 1.74A alt)", - "wldwitchr", "Wild Witch (Export, 6B/12B ver 1.75A-E English)", - "wldwitchs", "Wild Witch (Export, 6T/12T ver 1.76A)", - "wldwitcht", "Wild Witch (Export, 6T/12T ver 1.77A)", - "wldwitchu", "Wild Witch (Export, 6T/12T ver 1.79A)", - "wldwitchv", "Wild Witch (Export, 6T/12T ver 1.83A)", - "wlstar", "Wonder League Star - Sok-Magicball Fighting (Korea)", - "wmatch", "Water Match (315-5064)", - "wmg", "Williams Multigame", - "wms", "WMS SetUp/Clear Chips (set 1)", - "wmsa", "WMS SetUp/Clear Chips (set 2)", - "wmsb", "WMS SetUp/Clear Chips (set 3)", - "wmsboom", "Boom (Russia)", - "wmstopb", "Top Banana (Russia)", - "wndrmomo", "Wonder Momo", - "wndrplnt", "Wonder Planet (Japan)", - "wof", "Warriors of Fate (World 921031)", - "wofa", "Sangokushi II (Asia 921005)", - "wofhfh", "Huo Feng Huang (Chinese bootleg of Sangokushi II)", - "wofj", "Tenchi wo Kurau II: Sekiheki no Tatakai (Japan 921031)", - "wofr1", "Warriors of Fate (World 921002)", - "wofu", "Warriors of Fate (USA 921031)", - "wolffang", "Wolf Fang -Kuhga 2001- (Japan)", - "wolfman", "Wolf Man", - "wolfpack", "Wolf Pack (prototype)", - "wonder3", "Wonder 3 (Japan 910520)", - "wondl96", "Wonder League '96 (Korea)", - "wondstck", "Wonder Stick", - "woodpeca", "Woodpecker (set 2)", - "woodpeck", "Woodpecker (set 1)", - "worlddef", "World Defender", - "worldwar", "World Wars (World?)", - "wotw", "War of the Worlds", - "wotwc", "War of the Worlds (color)", - "wow", "Wizard of Wor", - "wowg", "Wizard of Wor (with German Language ROM)", - "wownfant", "WOW New Fantasia", - "wpksoc", "World PK Soccer", - "wpksocv2", "World PK Soccer V2 (ver 1.1)", - "wrally", "World Rally (set 1)", - "wrally2", "World Rally 2: Twin Racing", - "wrallya", "World Rally (set 2)", - "wrallyb", "World Rally (US, 930217)", - "wrecking", "Vs. Wrecking Crew", - "wrestwar", "Wrestle War (set 3, World, 8751 317-0103)", - "wrestwar1", "Wrestle War (set 1, Japan, FD1094 317-0090)", - "wrestwar2", "Wrestle War (set 2, World, FD1094 317-0102)", - "wrldtour", "Al's Garage Band Goes On A World Tour", - "wrldtour2", "Al's Garage Band Goes On A World Tour R02b", - "wrlok_l3", "Warlok (L-3)", - "wrofaero", "War of Aero - Project MEIOU", - "wrungp", "Wave Runner GP", - "ws", "World Stadium (Japan)", - "ws89", "World Stadium '89 (Japan)", - "ws90", "World Stadium '90 (Japan)", - "wsbbgd", "Super Major League / World Series Baseball (GDS-0010)", - "wschamp", "Wing Shooting Championship V2.00", - "wschampa", "Wing Shooting Championship V1.01", - "wschampb", "Wing Shooting Championship V1.00", - "wseries", "World Series: The Season", - "wsf", "World Soccer Finals", - "wsjr", "Who Shot Johnny Rock? v1.6", - "wsjr15", "Who Shot Johnny Rock? v1.5", - "wsports", "Winter Sports", - "wstrike", "Witch Strike (Export, 6T/12T ver 1.01A)", - "wstrikea", "Witch Strike (Export, 6T/12T ver 1.01B)", - "wswe", "World Soccer Winning Eleven Arcade Game Style", - "wswe2k3", "World Soccer Winning Eleven Arcade Game 2003", - "wtchjack", "Witch Jack (Export, 6T/12T ver 0.87-89)", - "wtchjacka", "Witch Jackpot (Export, 6T/12T ver 0.25)", - "wtchjackb", "Witch Jack (Export, 6T/12T ver 0.40)", - "wtchjackc", "Witch Jack (Export, 6T/12T ver 0.40T)", - "wtchjackd", "Witch Jack (Export, 6T/12T ver 0.62)", - "wtchjacke", "Witch Jack (Export, 6T/12T ver 0.64)", - "wtchjackf", "Witch Jack (Export, 6T/12T ver 0.65)", - "wtchjackg", "Witch Jack (Export, 6T/12T ver 0.70S)", - "wtchjackh", "Witch Jack (Export, 6T/12T ver 0.70P)", - "wtchjacki", "Witch Jack (Export, 6T/12T ver 0.87)", - "wtchjackj", "Witch Jack (Export, 6T/12T ver 0.87-88)", - "wtennis", "World Tennis", - "wtiger", "White Tiger Classic (0200954V, NSW/ACT)", - "wtigernz", "White Tiger (3VXFC5342, New Zealand)", - "wtrnymph", "Water-Nymph (Ver. 1.4)", - "wupndown", "Witch Up & Down (Export, 6T/12T ver 1.02)", - "wupndowna", "Witch Up & Down (Export, 6T/12T ver 0.99, set 1)", - "wupndownb", "Witch Up & Down (Export, 6T/12T ver 0.99, set 2)", - "wupndownc", "Witch Up & Down (Export, 6T/12T ver 0.99, set 3)", - "wupndownd", "Witch Up & Down (Export, 6T/12T ver 0.99T)", - "ww3", "WW III", - "ww_l2", "White Water (L-2)", - "ww_l3", "White Water (L-3)", - "ww_l4", "White Water (L-4)", - "ww_l5", "White Water (L-5)", - "ww_lh5", "White Water (LH-5)", - "ww_lh6", "White Water (LH-6)", - "ww_p1", "White Water (P-8 P-1 sound)", - "ww_p8", "White Water (P-8 P-2 sound)", - "wwallyj", "Wally wo Sagase! (rev B, Japan, FD1094 317-0197B)", - "wwallyja", "Wally wo Sagase! (rev A, Japan, FD1094 317-0197A)", - "wwestern", "Wild Western (set 1)", - "wwestern1", "Wild Western (set 2)", - "wwfmania", "WWF: Wrestlemania (rev 1.30 08/10/95)", - "wwfmaniab", "WWF: Wrestlemania (rev 1.20 08/02/95)", - "wwfmaniac", "WWF: Wrestlemania (rev 1.1 07/11/95)", - "wwfr_103", "WWF Royal Rumble (1.03)", - "wwfr_106", "WWF Royal Rumble (1.06)", - "wwfroyal", "WWF Royal Rumble (JPN, USA, EXP, KOR, AUS)", - "wwfsstar", "WWF Superstars (Europe)", - "wwfsstarb", "WWF Superstars (bootleg)", - "wwfsstarj", "WWF Superstars (Japan)", - "wwfsstaru", "WWF Superstars (US, Newer)", - "wwfsstarua", "WWF Superstars (US)", - "wwfwfest", "WWF WrestleFest (US set 1)", - "wwfwfesta", "WWF WrestleFest (US Tecmo)", - "wwfwfestb", "WWF WrestleFest (US bootleg)", - "wwfwfestj", "WWF WrestleFest (Japan)", - "wwfwfestk", "WWF WrestleFest (Korea)", - "wwjgtin", "Wai Wai Jockey Gate-In!", - "wyvernwg", "Wyvern Wings (set 1)", - "wyvernwga", "Wyvern Wings (set 2)", - "x2222", "X2222 (final debug?)", - "x2222o", "X2222 (5-level prototype)", - "x5jokers", "X Five Jokers (Version 1.12)", - "xday2", "X-Day 2 (Japan)", - "xenon", "Xenon", - "xenonf", "Xenon (French)", - "xenophob", "Xenophobe", - "xevi3dg", "Xevious 3D/G (Japan, XV31/VER.A)", - "xevios", "Xevios", - "xevious", "Xevious (Namco)", - "xeviousa", "Xevious (Atari, harder)", - "xeviousb", "Xevious (Atari)", - "xeviousc", "Xevious (Atari, Namco PCB)", - "xexex", "Xexex (ver EAA)", - "xexexa", "Xexex (ver AAA)", - "xexexj", "Xexex (ver JAA)", - "xfiles", "X-Files", - "xfiles2", "X-Files (2.04)", - "xfilesp", "X-Files (3.03)", - "xforce", "X Force", - "xiistag", "XII Stag (V2.01J)", - "xmcota", "X-Men: Children of the Atom (Euro 950331)", - "xmcotaa", "X-Men: Children of the Atom (Asia 950105)", - "xmcotaar1", "X-Men: Children of the Atom (Asia 941217)", - "xmcotah", "X-Men: Children of the Atom (Hispanic 950331)", - "xmcotahr1", "X-Men: Children of the Atom (Hispanic 950105)", - "xmcotaj", "X-Men: Children of the Atom (Japan 950105)", - "xmcotaj1", "X-Men: Children of the Atom (Japan 941222)", - "xmcotaj2", "X-Men: Children of the Atom (Japan 941219)", - "xmcotaj3", "X-Men: Children of the Atom (Japan 941217)", - "xmcotajr", "X-Men: Children of the Atom (Japan 941208 rent version)", - "xmcotar1", "X-Men: Children of the Atom (Euro 950105)", - "xmcotar1d", "X-Men: Children of the Atom (Euro 950105 Phoenix Edition) (bootleg)", - "xmcotau", "X-Men: Children of the Atom (USA 950105)", - "xmen", "X-Men (4 Players ver UBB)", - "xmen2pa", "X-Men (2 Players ver AAA)", - "xmen2pe", "X-Men (2 Players ver EAA)", - "xmen2pj", "X-Men (2 Players ver JAA)", - "xmen6p", "X-Men (6 Players ver ECB)", - "xmen6pu", "X-Men (6 Players ver UCB)", - "xmena", "X-Men (4 Players ver AEA)", - "xmenaa", "X-Men (4 Players ver ADA)", - "xmene", "X-Men (4 Players ver EBA)", - "xmenj", "X-Men (4 Players ver JBA)", - "xmultipl", "X Multiply (World, M81)", - "xmultiplm72", "X Multiply (Japan, M72)", - "xmvsf", "X-Men Vs. Street Fighter (Euro 961004)", - "xmvsfa", "X-Men Vs. Street Fighter (Asia 961023)", - "xmvsfar1", "X-Men Vs. Street Fighter (Asia 961004)", - "xmvsfar2", "X-Men Vs. Street Fighter (Asia 960919)", - "xmvsfar3", "X-Men Vs. Street Fighter (Asia 960910)", - "xmvsfb", "X-Men Vs. Street Fighter (Brazil 961023)", - "xmvsfh", "X-Men Vs. Street Fighter (Hispanic 961004)", - "xmvsfj", "X-Men Vs. Street Fighter (Japan 961004)", - "xmvsfjr1", "X-Men Vs. Street Fighter (Japan 960910)", - "xmvsfjr2", "X-Men Vs. Street Fighter (Japan 960909)", - "xmvsfr1", "X-Men Vs. Street Fighter (Euro 960910)", - "xmvsfu", "X-Men Vs. Street Fighter (USA 961023)", - "xmvsfu1d", "X-Men Vs. Street Fighter (USA 961004 Phoenix Edition) (bootleg)", - "xmvsfur1", "X-Men Vs. Street Fighter (USA 961004)", - "xorworld", "Xor World (prototype)", - "xplan", "X-Plan (Ver. 1.01)", - "xrally", "Xtreme Rally / Off Beat Racer!", - "xsandos", "X's & O's", - "xsedae", "X Se Dae Quiz (Korea)", - "xsleena", "Xain'd Sleena (World)", - "xsleenab", "Xain'd Sleena (bootleg)", - "xsleenaj", "Xain'd Sleena (Japan)", - "xtheball", "X the Ball", - "xtom3d", "X Tom 3D", - "xtrain", "X-Train (Ver. 1.3)", - "xtrial", "Xtrial Racing (ver JAB)", - "xtrmhnt2", "Extreme Hunting 2", - "xtrmhunt", "Extreme Hunting", - "xxmissio", "XX Mission", - "xybots", "Xybots (rev 2)", - "xybots0", "Xybots (rev 0)", - "xybots1", "Xybots (rev 1)", - "xybotsf", "Xybots (French, rev 3)", - "xybotsg", "Xybots (German, rev 3)", - "xymg", "Xing Yun Man Guan (China, V651C)", - "xyonix", "Xyonix", - "yachtmn", "Yachtsman", - "yamagchi", "Go Go Mr. Yamaguchi / Yuke Yuke Yamaguchi-kun", - "yamato", "Yamato (US)", - "yamato2", "Yamato (World?)", - "yamyam", "Yam! Yam!?", - "yanchamr", "Kaiketsu Yanchamaru (Japan)", - "yankeedo", "Yankee DO!", - "yarunara", "Mahjong Yarunara (Japan)", - "yellowcbb", "Yellow Cab (bootleg)", - "yellowcbj", "Yellow Cab (Japan)", - "yesnoj", "Yes/No Sinri Tokimeki Chart", - "yiear", "Yie Ar Kung-Fu (program code I)", - "yiear2", "Yie Ar Kung-Fu (program code G)", - "yieartf", "Yie Ar Kung-Fu (GX361 conversion)", - "yosakdon", "Yosaku To Donbei (set 1)", - "yosakdona", "Yosaku To Donbei (set 2)", - "yosimotm", "Mahjong Yoshimoto Gekijou [BET] (Japan)", - "yosimoto", "Mahjong Yoshimoto Gekijou (Japan)", - "youjyudn", "Youjyuden (Japan)", - "youkaidk1", "Yokai Douchuuki (Japan, old version (YD1))", - "youkaidk2", "Yokai Douchuuki (Japan, new version (YD2, Rev B))", - "youma", "Youma Ninpou Chou (Japan)", - "youma2", "Youma Ninpou Chou (Japan, alt)", - "youmab", "Youma Ninpou Chou (Game Electronics bootleg, set 1)", - "youmab2", "Youma Ninpou Chou (Game Electronics bootleg, set 2)", - "yujan", "Yu-Jan", - "yuka", "Yu-Ka", - "yukiwo", "Yukiwo (World, prototype)", - "yukon", "Yukon (version 2.0)", - "yukon1", "Yukon (version 1.0)", - "yukongld", "Yukon Gold (Russia)", - "yumefuda", "Yumefuda [BET]", - "yuyugogo", "Yuuyu no Quiz de GO!GO! (Japan)", - "yuyuhaku", "The Battle of Yu Yu Hakusho: Shitou! Ankoku Bujutsukai!", - "zankor", "Zankor (Italian speech)", - "zaryavos", "Zarya Vostoka", - "zarza", "Zarza", - "zarza1", "Zarza (alternate set)", - "zarzon", "Zarzon", - "zaviga", "Zaviga", - "zavigaj", "Zaviga (Japan)", - "zaxxon", "Zaxxon (set 1)", - "zaxxon2", "Zaxxon (set 2)", - "zaxxon3", "Zaxxon (set 3)", - "zaxxonb", "Jackson", - "zaxxonj", "Zaxxon (Japan)", - "zedblade", "Zed Blade / Operation Ragnarok", - "zekepeak", "Zeke's Peak", - "zektor", "Zektor (revision B)", - "zephy", "Zephy", - "zero", "Zero (set 1, Defender bootleg)", - "zero2", "Zero (set 2, Defender bootleg)", - "zerogu2", "Zero Gunner 2", - "zerogun", "Zero Gunner (Export, Model 2B)", - "zeroguna", "Zero Gunner (Export, Model 2A)", - "zerogunaj", "Zero Gunner (Japan, Model 2A)", - "zerogunj", "Zero Gunner (Japan, Model 2B)", - "zerohour", "Zero Hour (set 1)", - "zerohoura", "Zero Hour (set 2)", - "zeropnt", "Zero Point (set 1)", - "zeropnt2", "Zero Point 2", - "zeropnta", "Zero Point (set 2)", - "zeropntj", "Zero Point (Japan)", - "zeroteam", "Zero Team USA (set 1, US, Fabtek license)", - "zeroteama", "Zero Team (set 2, Japan? (earlier?))", - "zeroteamb", "Zero Team (set 3, Japan? (later batteryless))", - "zeroteamc", "Zero Team (set 4, Taiwan, Liang Hwa license)", - "zeroteamd", "Zero Team (set 5, Korea, Dream Soft license)", - "zeroteams", "Zero Team Selection", - "zeroteamsr", "Zero Team Suicide Revival Kit", - "zerotime", "Zero Time", - "zerotm2k", "Zero Team 2000", - "zerotrgt", "Zero Target (World, CW)", - "zerotrgta", "Zero Target (World, CT)", - "zerowing", "Zero Wing (2P set)", - "zerowing1", "Zero Wing (1P set)", - "zerowingw", "Zero Wing (2P set, Williams license)", - "zerozone", "Zero Zone", - "zgundm", "Mobile Suit Z-Gundam: A.E.U.G. vs Titans (ZGA1 Ver. A)", - "zgundmdx", "Mobile Suit Z-Gundam: A.E.U.G. vs Titans DX (ZDX1 Ver. A)", - "zigzag", "Zig Zag (Galaxian hardware, set 1)", - "zigzag2", "Zig Zag (Galaxian hardware, set 2)", - "zingzip", "Zing Zing Zip", - "zingzipbl", "Zing Zing Zip (bootleg)", - "zintrckb", "Zintrick / Oshidashi Zentrix (hack)", - "zipzap", "Zip & Zap", - "znpwfv", "Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000)", - "zoar", "Zoar", - "zodiack", "Zodiack", - "zokumahj", "Zoku Mahjong Housoukyoku (Japan)", - "zokuoten", "Zoku Otenamihaiken (V2.03J)", - "zombraid", "Zombie Raid (9/28/95, US)", - "zombraidp", "Zombie Raid (9/28/95, US, prototype PCB)", - "zombraidpj", "Zombie Raid (9/28/95, Japan, prototype PCB)", - "zombrvn", "Zombie Revenge (JPN, USA, EXP, KOR, AUS)", - "zoo", "Zoo (Ver. ZO.02.D)", - "zookeep", "Zoo Keeper (set 1)", - "zookeep2", "Zoo Keeper (set 2)", - "zookeep3", "Zoo Keeper (set 3)", - "zoom909", "Zoom 909", - "zooo", "Zooo (V2.01J)", - "zortonbr", "Zorton Brothers (Los Justicieros)", - "zunkyou", "Zunzunkyou No Yabou (Japan)", - "zunou", "Touch De Zunou (Rev A)", - "zupapa", "Zupapa!", - "zwackery", "Zwackery", - "zzblock", "Zun Zun Block [TTL]", - "zzyzzyxx", "Zzyzzyxx (set 1)", - "zzyzzyxx2", "Zzyzzyxx (set 2)", - "z80", "Z80", - "gfxdecode", "gfxdecode", - "palette", "palette", - "screen", "Video Screen", - "speaker", "Speaker", - "i8255", "8255 PPI", - "samples", "Samples", - "sega005_sound", "005 Custom", - "m6803", "M6803", - "irem_audio", "Irem Audio", - "ay8910", "AY-3-8910A", - "msm5205", "MSM5205", - "vr4300be_drc", "VR4300 (big) DRC", - "rsp_drc", "RSP DRC", - "dmadac", "DMA-driven DAC", - "n64_periphs", "N64 Periphal Chips", - "sh4", "SH-4 (little)", - "timer", "Timer", - "arm7", "ARM7", - "maple_dc", "MAPLE_DC", - "93c46_16", "Serial EEPROM 93C46 (64x16)", - "powervr2", "PowerVR 2", - "aica", "AICA", - "aicartc", "AICA RTC", - "mie", "MIE", - "mie_jvs", "MIE-JVS", - "sega_837_13551", "SEGA-837-13551", - "93c46_8", "Serial EEPROM 93C46 (128x8)", - "x76f100", "X76F100 Flash", - "naomi_m2_board", "NAOMI-M2-BOARD", - "m68000", "M68000", - "ym2151", "YM2151", - "okim6295", "OKI6295", - "netlist_sound", "Netlist sound device", - "netlist_analog_input", "netlist analog input", - "ym2203", "YM2203", - "qsound", "Q-Sound", - "dsp16", "DSP16", - "pxa255", "PXA255", - "93c66_16", "Serial EEPROM 93C66 (256x16)", - "cxd8530cq", "CXD8530CQ", - "psxirq", "PSX IRQ", - "psxdma", "PSX DMA", - "psxmdec", "PSX MDEC", - "psxrcnt", "PSX RCNT", - "psxsio0", "PSX SIO-0", - "znsec", "ZNSEC", - "zndip", "ZNDIP", - "psxsio1", "PSX SIO-1", - "ram", "RAM", - "cxd8561q", "CXD8561Q", - "spu", "SPU", - "at28c16", "AT28C16", - "ym2610", "YM2610", - "upd4990a", "uPD4990A", - "nvram", "NVRAM", - "z180", "Z180", - "namco", "Namco", - "dac", "DAC", - "amd_29lv200t", "AMD 29LV200T Flash", - "i8080", "8080", - "mb14241", "MB14241", - "ym2610b", "YM2610B", - "mc68hc11", "MC68HC11", - "m6809", "M6809", - "via6522", "6522 VIA", - "pia6821", "6821 PIA", - "c6545_1", "C6545-1 CRTC", - "mc146818", "MC146818", - "arm7_be", "ARM7 (big endian)", - "cdrom_image", "CD-ROM Image", - "nb1413m3", "Nichibutsu NB1413M3", - "kaneko_pandora", "Kaneko Pandora - PX79C480FP-3", - "upd7810", "uPD7810", - "ym2413", "YM2413", - "vsystem_spr", "vsystem_spr_device", - "i8088", "I8088", - "gotsndr2", "Gottlieb Sound rev. 2", - "m6502", "M6502", - "ay8913", "AY-3-8913A", - "sp0250", "SP0250", - "m68705", "M68705", - "buggychl_mcu", "BuggyChl MCU", - "msm5232", "MSM5232", - "v70", "V70", - "ymf271", "YMF271", - "sn76489a", "SN76489A", - "z80pio", "Z8420 PIO", - "isa8", "ISA8", - "isa8_slot", "ISA8_SLOT", - "4enlinea_cga", "ISA8_CGA_4ENLINEA", - "mc6845", "MC6845 CRTC", - "7474", "7474 TTL", - "galaxian_sound", "Galaxian Custom", - "discrete", "DISCRETE", - "tmp68301", "TMP68301", - "z80ctc", "Z80 CTC", - "ym3812", "YM3812", - "mc65c02", "M65C02", - "r4650be_drc", "IDT R4650 (big) DRC", - "h83002", "H8/3002", - "h8h_intc", "H8H INTC", - "h8_adc_3337", "H8 ADC 3337", - "h8_digital_port", "H8 digital port", - "h8_timer16", "H8 16-bits timer", - "h8h_16bits_timer_channel", "H8H 16-bits timer channel", - "h8_sci", "H8 Serial Communications Interface", - "namco_settings", "Namco settings device", - "rtc4543", "Epson R4543", - "devcb2_line_dispatch", "Line dispatcher (2 slots)", - "c352", "C352", - "ptm6840", "6840 PTM", - "t11", "T11", - "2804", "Parallel EEPROM 2804 (512x8)", - "tilemap", "Tilemap", - "atarimo", "Atari Motion Objects", - "atarscom", "Atari Sound Communications", - "pokey", "POKEY", - "tms5220c", "TMS5220C", - "decospr", "decospr_device", - "h46505", "H46505 CRTC", - "konami_cpu", "KONAMI", - "k052109", "Konami 052109", - "k051960", "Konami 051960", - "k051316", "Konami 051316", - "upd7759", "uPD7759", - "s2650", "S2650", - "s2636", "Signetics 2636", - "tms5100", "TMS5100", - "i8257", "DMA8257", - "latch8", "8 bit latch", - "mb8884", "MB8884", - "sn76496", "SN76496", - "pentium", "PENTIUM", - "pit8259", "8259 PIC", - "am9517a", "AM9517A", - "pit8254", "8254 PIT", - "kbdc8042", "Keyboard Controller 8042", - "at_keyb", "AT Keyboard", - "pci_bus_legacy", "PCI Bus Legacy", - "vga", "VGA", - "tms34010", "TMS34010", - "tms32026", "TMS32026", - "tlc34076", "TLC34076", - "r3041", "R3041", - "jaguargpu", "Jaguar GPU", - "jaguardsp", "Jaguar DSP", - "vt83c461", "VIA VT83C461", - "ata_slot", "ATA Connector", - "cojag_hdd", "cojag HDD", - "harddisk_image", "Harddisk", - "mediagx", "MEDIAGX", - "ide_controller", "IDE Controller (32 bit)", - "hdd", "IDE Hard Disk", - "ramdac", "ramdac", - "cdrom", "ATAPI CDROM", - "ppc403gcx", "PowerPC 403GCX", - "ymz280b", "YMZ280B", - "i80186", "I80186", - "leland_80186_sound", "Leland 80186 DAC", - "decocpu3", "Data East Pinball CPU Board Type 3", - "m6808", "M6808", - "decobsmt", "Data East/Sega/Stern BSMT2000 Sound Board", - "bsmt2000", "BSMT2000", - "tms32015", "TMS32015", - "decodmd2", "Data East Pinball Dot Matrix Display Type 2", - "m6809e", "M6809E", - "m6800", "M6800", - "h83048", "H8/3048", - "fd1094", "FD1094", - "sega_315_5248", "Sega 315-5248 Multiplier", - "sega_315_5249", "Sega 315-5249 Divider", - "sega_315_5250", "Sega 315-5250 Compare/Timer", - "sega_xboard_sprite", "Sega X-Board Sprites", - "segaic16_video", "Sega 16-bit Video", - "segaic16_road", "Sega 16-bit Road Generator", - "segapcm", "Sega PCM", - "sega_315_5195", "Sega 315-5195 Memory Mapper", - "sega_16bit_sprite", "Sega System 16B Sprites", - "n7751", "N7751", - "i8243", "I8243", - "sega_sys16a_sprite", "Sega System 16A Sprites", - "m68020", "M68020", - "tms32025", "TMS32025", - "m37702", "M37702", - "2864", "Parallel EEPROM 2864 (8192x8)", - "arm920t", "ARM920T", - "serflash", "SERFLASH", - "nmk004", "NMK004", - "h6280", "H6280", - "deco_bac06", "decbac06_device", - "deco_mxc06", "decmxc06_device", - "pic16c57", "PIC16C57", - "tmsprom", "TMSPROM", - "tms5110a", "TMS5110A", - "mc68307", "MC68307", - "mc68681", "MC68681", - "mc68681_channel", "DUART 68681 channel", - "bfm_bda", "BFM BDA VFD controller", - "mc68340", "MC68340", - "mcf5206e", "MCF5206E", - "mcf5206e_peripheral", "MCF5206E Peripheral", - "m68ec020", "M68EC020", - "m37710", "M37710", - "arm", "ARM", - "aakart", "AAKART", - "vsystem_spr2", "vsystem_spr2_device", - "vector_device", "VECTOR", - "dvg", "DVG", - "fd1089a", "FD1089A", - "sn76494", "SN76494", - "wpc", "Williams WPC ASIC", - "adsp2105", "ADSP-2105", - "tc0220ioc", "Taito TC0220IOC", - "tc0080vco", "Taito TC0080VCO", - "tc0140syt", "Taito TC0140SYT", - "v33", "V33", - "v35", "V35", - "iremga20", "Irem GA20", - "hd63705", "HD63705", - "c140", "C140", - "v30", "V30", - "m72_audio", "M72 Custom", - "naomi_rom_board", "NAOMI-ROM-BOARD", - "tms32010", "TMS32010", - "seibu_sound", "Seibu Sound System", - "k007232", "K007232", - "msm6242", "msm6242", - "taito_en", "Taito Ensoniq Sound System", - "mb87078", "Fujitsu MB87078", - "es5505", "ES5505", - "buffered_spriteram", "Buffered Sprite RAM", - "k007121", "Konami 007121", - "k051649", "K051649", - "sega315_5313", "Sega 315-5313 (Genesis VDP)", - "ym2612", "YM2612", - "segapsg", "SEGA VDP PSG", - "hc55516", "HC-55516", - "ldp1450", "Sony LDP-1450", - "amiga_paula", "Amiga Paula", - "legacy_mos8520", "LEGACY_MOS8520", - "amiga_fdc", "Amiga FDC", - "m6802", "M6802", - "v60", "V60", - "ym3438", "YM3438", - "rf5c68", "RF5C68", - "ymf278b", "YMF278B", - "huc6260", "HuC6260 VCE", - "huc6270", "HuC6270 VDC", - "c6280", "HuC6280", - "sn76477", "SN76477", - "address_map_bank", "Address Map Bank", - "hd63701", "HD63701", - "fd1089b", "FD1089B", - "gaelco_gae1", "Gaelco GAE1", - "m6504", "M6504", - "ym3526", "YM3526", - "avg_mhavoc", "AVG_MHAVOC", - "cdp1802", "CDP1802", - "cdp1852", "CDP1852", - "cdp1869", "RCA CDP1869", - "i8751", "I8751", - "ay8912", "AY-3-8912A", - "i8086", "I8086", - "r6545_1", "R6545-1 CRTC", - "sn76489", "SN76489", - "ticket_dispenser", "Ticket Dispenser", - "gamtor_vga", "GAMTOR_VGA", - "ttl74123", "TTL 74123", - "okim9810", "OKI9810", - "macronix_29l001mc", "Macronix 29L001MC Flash", - "aw_rom_board", "AW-ROM-BOARD", - "dcctrl", "DC_CONTROLLER", - "netlist_cpu", "Netlist cpu device", - "fixfreq", "FIXFREQ", - "e132xn", "E1-32XN", - "v20", "V20", - "m65sc02", "M65SC02", - "tc0100scn", "Taito TC0100SCN", - "tc0150rod", "Taito TC0150ROD", - "tc0110pcr", "Taito TC0110PCR", - "filter_volume", "Volume Filter", - "cxd8661r", "CXD8661R", - "cxd8654q", "CXD8654Q", - "mb8841", "MB8841", - "tms9118", "TMS9118 VDP", - "speaker_sound", "Filtered 1-bit DAC", - "seta001", "seta001_device", - "x1_010", "X1-010", - "atari2804", "Atari EEPROM Interface (2804)", - "tmp90841", "TMP90841", - "nmk112", "NMK 112", - "wmscvsd", "Williams CVSD Sound Board", - "gotsndr1", "Gottlieb Sound rev. 1", - "riot6532", "6532 RIOT", - "ym2149", "YM2149", - "tms34061", "TMS34061 VSC", - "ccpu", "Cinematronics CPU", - "n2a03", "N2A03", - "nesapu", "N2A03 APU", - "vlm5030", "VLM5030", - "tc0180vcu", "Taito TC0180VCU", - "naomi_m4_board", "NAOMI-M4-BOARD", - "pps4", "PPS4", - "atari_vg_earom", "ATARI VG EAROM", - "er5911_8", "Serial EEPROM ER5911 (128x8)", - "k056832", "Konami 056832", - "k05324x", "Konami 053244 & 053245", - "k053251", "Konami 053251", - "k053260", "K053260", - "sh2_drc", "SH-2 DRC", - "scudsp", "SCUDSP", - "scsp", "SCSP", - "cdda", "CD/DA", - "i8035", "I8035", - "sega_speech_sound", "Sega Speech Sound Board", - "sega315_5124", "Sega 315-5124", - "ldv1000", "Pioneer LD-V1000", - "pc090oj", "Taito PC090OJ", - "ymf262", "YMF262", - "93c56_16", "Serial EEPROM 93C56 (128x16)", - "wsf_80186_sound", "WSF 80186 DAC", - "m68010", "M68010", - "ataxx_80186_sound", "Ataxx 80186 DAC", - "trackfld_audio", "Track And Field Audio", - "hyprolyb_adpcm", "Hyper Olympics Audio", - "i8039", "I8039", - "mos656x_attack_ufo", "MOS656X", - "ppc603", "PowerPC 603", - "naomi_gdrom_board", "NAOMI-GDROM-BOARD", - "i8085a", "8085A", - "tms36xx", "TMS36XX", - "phoenix_sound", "Phoenix Custom", - "roc10937", "Rockwell 10937 VFD controller and compatible", - "acia6850", "6850 ACIA", - "clock", "Clock", - "i8031", "I8031", - "tms9928a", "TMS9928A VDP", - "deco16ic", "Data East IC 55 / 56 / 74 / 141", - "microtouch_serial", "Microtouch Serial Touchscreen", - "h63484", "H63484", - "atari2816", "Atari EEPROM Interface (2816)", - "2816", "Parallel EEPROM 2816 (2048x8)", - "cclimber_audio", "cclimber Sound Board", - "kaneko_view2_tilemap", "kaneko_view2_tilemap_device", - "kaneko16_sprite", "kaneko16_sprite_device", - "ppu2c04", "2C04 PPU", - "gaelco_cg1v", "Gaelco CG1V", - "ppc603e", "PowerPC 603e", - "scsibus", "SCSI bus", - "lsi53c810", "53C810 SCSI", - "k573cassslotserial", "KONAMI 573 CASSETTE SLOT (SERIAL)", - "mb89371", "MB89371", - "ata_interface", "ATA Interface", - "cr589", "Matsushita CR589", - "k573cassslot", "KONAMI 573 CASSETTE SLOT", - "k573cassx", "KONAMI 573 CASSETTE X", - "x76f041", "X76F041 Flash", - "fujitsu_29f016a", "Fujitsu 29F016A Flash", - "pccard", "PCCARD SLOT", - "m48t58", "M48T58", - "adc0834", "ADC0834", - "upd4701", "NEC uPD4701 Encoder", - "i386", "I386", - "ds2404", "DS2404", - "intel_e28f008sa", "Intel E28F008SA Flash", - "fifo7200", "IDT7200 FIFO", - "tmp95c063", "TMP95C063", - "atarivad", "Atari VAD", - "atjsa3", "Atari JSA III Sound Board", - "decocpu3b", "Data East Pinball CPU Board Type 3B", - "decodmd3", "Data East Pinball Dot Matrix Display Type 3", - "adsp2181", "ADSP-2181", - "gp9001vdp", "GP9001_VDP", - "v25", "V25", - "upd7807", "uPD7807", - "namco51", "Namco 51xx", - "mb8843", "MB8843", - "namco06xx", "Namco 06xx", - "hd6309", "HD6309", - "k007342", "Konami 007342", - "k007420", "Konami 007420", - "93c66_8", "Serial EEPROM 93C66 (512x8)", - "arm9", "ARM9", - "s3c2410", "Samsung S3C2410", - "qs1000", "QS1000", - "i8052", "I8052", - "i2cmem", "I2CMEM", - "s11c_bg", "Williams System 11C background music", - "asap", "ASAP", - "beezer_sound", "beezer SFX", - "i960kb", "i960kb", - "segas24_tile", "S24TILE", - "y8950", "Y8950", - "ttl74181", "TTL 74181", - "s14001a", "S14001A", - "exidy_sfx", "Exidy SFX", - "v9938", "V9938", - "r65c02", "R65C02", - "hd61830", "HD61830 LCDC", - "timeplt_audio", "Time Pilot Audio", - "filter_rc", "RC Filter", - "tiamc1_sound", "TIA-MC1 Custom", - "saa1099", "SAA1099", - "r5000le_drc", "R5000 (little) DRC", - "bus_master_ide_controller", "Bus Master IDE Controller", - "voodoo_1", "3dfx Voodoo Graphics", - "adsp2115", "ADSP-2115", - "k054338", "Konami 054338", - "k055555", "Konami 055555", - "h83044", "H8/3044", - "i486", "I486", - "k051733", "Konami 051733", - "midsg", "Midway Sounds Good Sound Board", - "seibu_crtc", "Seibu CRT Controller", - "es5506", "ES5506", - "kaneko_toybox", "kaneko_toybox_device", - "kaneko_hit", "kaneko_hit_device", - "atjsa1", "Atari JSA I Sound Board", - "k054000", "Konami 054000", - "k053936", "Konami 053936", - "k054539", "K054539", - "rtc65271", "RTC65271", - "pc16552d", "National Semiconductor PC16552D", - "ns16550", "National Semiconductor NS16550", - "scsicd", "SCSICD", - "am53cf96", "53CF96 SCSI", - "rf5c400", "RF5C400", - "decoc10707", "DECO C10707", - "segas24_sprite", "S24SPRITE", - "segas24_mixer", "S24MIXER", - "warpwarp_sound", "Warp Warp Custom", - "cirrus_vga", "Cirrus Logic VGA", - "ns16450", "National Semiconductor NS16450", - "decocomn", "Data East Common Video Functions", - "deco104", "DECO104PROT", - "deco16", "DECO16", - "deco222", "DECO 222", - "e116t", "E1-16T", - "wpcsnd", "Williams WPC Sound", - "namco50", "Namco 50xx", - "mb8842", "MB8842", - "namco52", "Namco 52xx", - "namco54", "Namco 54xx", - "mb8844", "MB8844", - "am29000", "AMD Am29000", - "i8051", "I8051", - "mc68901", "Motorola MC68901", - "micro3d_sound", "Microprose Custom", - "h83008", "H8/3008", - "h8_adc_3006", "H8 ADC 3006", - "mpc8240", "PowerPC MPC8240", - "voodoo_3", "3dfx Voodoo 3", - "avg_bzone", "AVG_BZONE", - "mathbox", "MATHBOX", - "kaneko_calc3", "kaneko_calc3_device", - "okim6376", "OKI6376", - "deco_karnovsprites", "karnovsprites_device", - "tms9128", "TMS9128 VDP", - "cxd8530bq", "CXD8530BQ", - "cxd8514q", "CXD8514Q", - "sharp_lh28f400", "Sharp LH28F400 Flash", - "decocpu7", "DECO CPU-7", - "ppc602", "PowerPC 602", - "decodmd1", "Data East Pinball Dot Matrix Display Type 1", - "tms34020", "TMS34020", - "m6801", "M6801", - "k005289", "K005289", - "i8279", "8279 KDC", - "k053252", "Konami 053252", - "k053247", "Konami 053246 & 053247", - "buggyboy_sound", "Buggy Boy Custom", - "ppc403ga", "PowerPC 403GA", - "ppc604", "PowerPC 604", - "k001604", "Konami 001604", - "cobra_jvs_host", "COBRA_JVS_HOST", - "cobra_jvs", "COBRA_JVS", - "alpha8301", "ALPHA-8301", - "avg", "AVG", - "seibu_adpcm", "Seibu ADPCM", - "i8041", "I8041", - "decocass_tape", "DECO Cassette Tape", - "trident_vga", "Trident VGA", - "smc91c94", "SMC91C94", - "tc0280grd", "Taito TC0280GRD & TC0430GRW", - "tc0360pri", "Taito TC0360PRI", - "e132n", "E1-32N", - "i8032", "I8032", - "deco146", "DECO146PROT", - "i80c32", "I80C32", - "vr4310le_drc", "VR4310 (little) DRC", - "voodoo_banshee", "3dfx Voodoo Banshee", - "74148", "TTL 74148", - "74153", "TTL 74153", - "rm7000le_drc", "RM7000 (little) DRC", - "m48t37", "M48T37", - "hd6303y", "HD6303Y", - "exidy440_sound", "Exidy 440 CVSD", - "tc0480scp", "Taito TC0480SCP", - "x2212", "X2212 NVRAM", - "akiko", "CBM AKIKO", - "microtouch", "Microtouch Touchscreen", - "scc68070", "SCC68070", - "mcd212", "MCD212", - "cdi68070", "CDI68070", - "cdicdic", "CDICDIC", - "cdislave", "CDISLAVE", - "m48t08", "MK48T08", - "alpha8201", "ALPHA-8201", - "pentium3", "Pentium III", - "ataflash", "ATA Flash PCCARD", - "mb3773", "MB3773", - "intel_te28f160", "Intel TE28F160 Flash", - "intel_e28f400b", "Intel E28F400B Flash", - "taito_zoom", "Taito Zoom Sound System", - "mn1020012a", "MN1020012A", - "zsg2", "ZSG-2", - "ide_baseboard", "IDE Baseboard", - "tc8830f", "TC8830F", - "cxd8606bq", "CXD8606BQ", - "cxd8561cq", "CXD8561CQ", - "i8742", "I8742", - "pr8210", "Pioneer PR-8210", - "i8049", "I8049", - "wiping_sound", "Wiping Custom", - "naomi_m1_board", "NAOMI-M1-BOARD", - "h83337", "H8/3337", - "h8_intc", "H8 INTC", - "h8_8bits_timer_channel", "H8 8-bits timer channel", - "h8_16bits_timer_channel", "H8 16-bits timer channel", - "h83007", "H8/3007", - "sh1_drc", "SH-1 DRC", - "tms9980a", "TMS9980A", - "wd33c93", "33C93 SCSI", - "cps3_custom", "CPS3 Custom", - "midssio", "Midway SSIO Sound Board", - "gms30c2132", "GMS30C2132", - "h83334", "H8/3334", - "tms32032", "TMS32032", - "adsp2104", "ADSP-2104", - "m48t35", "M48T35", - "tms32031", "TMS32031", - "tms57002", "TMS57002", - "scsihd", "SCSIHD", - "cxd8538q", "CXD8538Q", - "k056800", "Konami 056800 MIRAC", - "se3208", "SE3208", - "vr0video", "VRender0 Video", - "ds1302", "DS1302", - "vrender0", "VRender0", - "cem3394", "CEM3394", - "tms9927", "TMS9927 VTC", - "cquestrot", "Cube Quest Rotate CPU", - "cquestlin", "Cube Quest Line CPU", - "cquestsnd", "Cube Quest Sound CPU", - "simutrek", "Simutrek Modified PR-8210", - "i8748", "I8748", - "st0016", "ST0016", - "seibu_cop_legacy", "Seibu COP Legacy", - "atjsa2", "Atari JSA II Sound Board", - "sknsspr", "sknsspr_device", - "k055673", "Konami 055673", - "keycus_c431", "KEYCUS C431", - "m68040", "M68040", - "tms32051", "TMS32051", - "tc0640fio", "Taito TC0640FIO", - "93c56_8", "Serial EEPROM 93C56 (256x8)", - "pc080sn", "Taito PC080SN", - "toshiba_t5182", "T5182", - "ppc603r", "PowerPC 603R", - "mb86233", "MB86233", - "segam1audio", "Sega Model 1 Sound Board", - "multipcm", "Sega/Yamaha 315-5560", - "tc0510nio", "Taito TC0510NIO", - "v3021", "v3021", - "ics2115", "ICS2115", - "rtc9701", "rtc9701", - "ymz770", "Yamaha YMZ770", - "epic12", "epic12_device", - "sh3be", "SH-3 (big)", - "linearflash16mb", "Linear Flash PCCARD (16MB)", - "k573mcr", "Konami Memory Card Reader", - "k573cassyi", "KONAMI 573 CASSETTE YI", - "ds2401", "DS2401", - "linearflash32mb", "Linear Flash PCCARD (32MB)", - "k573dio", "Konami 573 digital I/O board", - "mas3507d", "MAS3507D", - "k573casszi", "KONAMI 573 CASSETTE ZI", - "zs01", "ZS01", - "k573cassxi", "KONAMI 573 CASSETTE XI", - "m68301", "M68301", - "midtcs", "Midway Turbo Chip Squeak Sound Board", - "5a22", "5A22", - "spc700", "SPC700", - "snes_sound", "SNES Custom DSP (SPC700)", - "beep", "Beep", - "tc0091lvc", "TC0091LVC", - "namco53", "Namco 53xx", - "58xx", "Namco 58xx", - "56xx", "Namco 56xx", - "i80c51", "I80C51", - "z80dma", "Z8410 DMA", - "pr7820", "Pioneer PR-7820", - "z80sio", "Z80 SIO", - "22vp932", "Phillips 22VP932", - "adsp21062", "ADSP21062", - "ds1204", "DS1204", - "midsnt", "Midway Squawk 'n' Talk Sound Board", - "tms5200", "TMS5200", - "cop402", "COP402", - "pic16c55", "PIC16C55", - "igs_025_022", "IGS025", - "igs022", "IGS022", - "upd96050", "uPD96050", - "k573msu", "Konami Multi Session Unit", - "adc0838", "ADC0838", - "keycus_c410", "KEYCUS C410", - "astrocade", "Astrocade", - "i8251", "I8251", - "sega_sharrier_sprite", "Sega Space Harrier Sprites", - "avg_starwars", "AVG_STARWARS", - "tms5220", "TMS5220", - "i80188", "I80188", - "snk6502_sound", "snk6502 Custom", - "venture_sound", "Exidy SFX+PSG", - "nscsi_bus", "NSCSI Bus", - "nscsi_connector", "NSCSI device connector abstraction", - "scsi_harddisk", "SCSI HARDDISK", - "ncr537xx", "53C7xx SCSI", - "pit8253", "8253 PIT", - "filetto_cga", "ISA8_CGA_FILETTO", - "tetriskr_cga", "ISA8_CGA_TETRISKR", - "namco_c45_road", "Namco C45 Road", - "e132t", "E1-32T", - "tms9995", "TMS9995", - "22vp931", "Phillips 22VP931", - "i4004", "Intel I4004", - "hd6845", "HD6845 CRTC", - "flower_sound", "Flower Custom Sound", - "e132xt", "E1-32XT", - "toaplan_scu", "toaplan_scu_device", - "nsc8105", "NSC8105", - "i8741", "I8741", - "funcube_touchscrene", "Funcube Touchscreen", - "namco62", "Namco 62xx", - "93c76_8", "Serial EEPROM 93C76 (1024x8)", - "kaneko_grap2", "kaneko_grap2_device", - "upd7756", "uPD7756", - "voodoo_2", "3dfx Voodoo 2", - "taito8741_4pack", "Taito 8741 MCU 4 pack", - "msm6585", "MSM6585", - "st0020", "st0020_device", - "geebee_sound", "Gee Bee Custom", - "namco_63701x", "Namco 63701X", - "sega_yboard_sprite", "Sega Y-Board Sprites", - "huc6202", "HuC6202 VPC", - "i8155", "8155 RIOT", - "bfm_bd1", "BFM BD1 VFD controller", - "bfm_adder2", "BFM ADDER2", - "gomoku_sound", "Gomoku Custom", - "k033906", "Konami 033906", - "k037122", "Konami 0371222", - "adc12138", "ADC12138", - "mb_vcu", "Mazer Blazer custom VCU", - "gridlee_sound", "Gridlee Custom", - "ym2608", "YM2608", - "m48t02", "M48T02", - "k573npu", "Konami Network PCB Unit", - "adc1038", "ADC1038", - "k056230", "Konami 056230", - "atari_rle", "Atari RLE Motion Objects", - "asic65", "ASIC65", - "ins8050", "INS 8050 SC/MP", - "sega_hangon_sprite", "Sega Hang On Sprites", - "adsp2100", "ADSP-2100", - "adsp2101", "ADSP-2101", - "dsp32c", "DSP32C", - "i8080a", "8080A", - "k573cassy", "KONAMI 573 CASSETTE Y", - "h8s2394", "H8S/2394", - "h8s_intc", "H8S INTC", - "h8_adc_2357", "H8 ADC 2357", - "h8s_16bits_timer_channel", "H8S 16-bits timer channel", - "segausbrom", "Sega Universal Sound Board with ROM", - "tms9902", "TMS9902 ACC", - "ppu2c05_01", "2C05_01 PPU", - "janshi_vdp", "JANSHIVDP", - "wmsadpcm", "Williams ADPCM Sound Board", - "josvolly8741_4pack", "joshi Vollyball 8741 MCU 4 pack", - "v810", "V810", - "midi_kbd", "Generic MIDI Keyboard", - "r4600le_drc", "R4600 (little) DRC", - "hd63484", "HD63484 CRTC", - "renegade_adpcm", "Renegade Custom ADPCM", - "tms3615", "TMS3615", - "er2055", "ER2055", - "pentium4", "Pentium 4", - "indervd", "Inder / Dinamic TMS Video", - "cop420", "COP420", - "decocpu1", "Data East Pinball CPU Board Type 1", - "snkwave", "SNK Wave", - "r5000be_drc", "R5000 (big) DRC", - "tmp91640", "TMP91640", - "saa5050", "SAA5050", - "m58715", "M58715", - "indersb", "Inder 4xDAC Sound Board", - "sega315_5246", "Sega 315-5246", - "cartslot_image", "Cartslot", - "software_list", "Software list", - "k053250", "K053250", - "ppu2c05_02", "2C05_02 PPU", - "gms30c2116", "GMS30C2116", - "mjkjidai_adpcm", "Custom ADPCM", - "decocpu2", "Data East Pinball CPU Board Type 2", - "atjsa3s", "Atari JSA IIIs Sound Board", - "es5503", "Ensoniq ES5503", - "u8106", "U8106", - "mc3417", "MC3417", - "keycus_c443", "KEYCUS C443", - "wmsnarc", "Williams NARC Sound Board", - "naughtyb_sound", "Naughty Boy Custom", - "ygv608", "YGV608", - "m50458", "m50458", - "s3520cf", "s3520cf", - "rp5h01", "RP5H01", - "m6m80011ap", "M6M80011AP EEPROM", - "igs028", "IGS028", - "upd4992", "uPD4992", - "sega_outrun_sprite", "Sega Out Run Sprites", - "er5911_16", "Serial EEPROM ER5911 (64x16)", - "y2404", "Y2404", - "59xx", "Namco 59xx", - "e116xt", "E1-16XT", - "bootleg_sys16a_sprite", "Bootleg System 16A Sprites", - "es8712", "ES8712", - "ppu2c03b", "2C03B PPU", - "segausb", "Sega Universal Sound Board", - "pleiads_sound", "Pleiads Custom", - "dsp56156", "DSP56156", - "linearflash64mb", "Linear Flash PCCARD (64MB)", - "keycus_c432", "KEYCUS C432", - "z8002", "Z8002", - "polepos_sound", "Pole Position Custom", - "netlist_analog_output", "netlist analog output", - "popflame_sound", "Pop Flamer Custom", - "keycus_c411", "KEYCUS C411", - "decocpu6", "DECO CPU-6", - "mb90082", "mb90082", - "puzzlet_io", "Puzzlet Coin/Start I/O", - "pentium2", "Pentium II", - "avg_quantum", "AVG_QUANTUM", - "i5000snd", "I5000", - "m58819", "M58819", - "m58817", "M58817", - "gaelco_serial", "gaelco_serial", - "at89c4051", "AT89C4051", - "redbaron_custom", "Red Baron Custom", - "redline_80186_sound", "Redline Racer 80186 DAC", - "sp0256", "SP0256", - "s3_vga", "S3 Graphics VGA", - "ibm8514a", "IBM8514A", - "bfm_dm01", "Bellfruit Dotmatrix 01", - "digitalker", "Digitalker", - "dsbz80", "Sega Z80-based Digital Sound Board", - "dm9368", "DM9368", - "m3745x", "Mitsubishi M37450", - "i860xr", "i860XR", - "i80c31", "I80C31", - "m68ec030", "M68EC030", - "keycus_c409", "KEYCUS C409", - "r3051", "R3051", - "gms30c2232", "GMS30C2232", - "midcsd", "Midway Chip Squeak Deluxe Sound Board", - "nile", "NiLe", - "keycus_c442", "KEYCUS C442", - "cxd8530aq", "CXD8530AQ", - "keycus_c406", "KEYCUS C406", - "avg_tempest", "AVG_TEMPEST", - "cop421", "COP421", - "avg_tomcat", "AVG_TOMCAT", - "ppu2c05_04", "2C05_04 PPU", - "tia_ntsc_video", "TIA Video (NTSC)", - "tia_sound", "TIA", - "esrip", "ESRIP", - "turrett_hdd", "Turrett Tower HDD", - "ttsnd", "Turret Tower Sound", - "tx1_sound", "TX-1 Custom", - "scn2674_device", "scn2674_device", - "ins8154", "INS8154", - "victory_sound", "Exidy SFX+PSG+Speech", - "ppu2c05_03", "2C05_03 PPU", - "r4700le_drc", "R4700 (little) DRC", - "ds5002fp", "DS5002FP", - "keycus_c430", "KEYCUS C430", - - // additional rom names from mame4all 0.37b5 - "64streej", "64th. Street - A Detective Story (Japan)", - "720b", "720 Degrees (set 2)", - "99lstwra", "'99 The Last War (alternate)", - "actfanc1", "Act-Fancer Cybernetick Hyper Weapon (World revision 1)", - "actfancj", "Act-Fancer Cybernetick Hyper Weapon (Japan revision 1)", - "alexkida", "Alex Kidd (set 2)", - "aliensya", "Alien Syndrome (set 2)", - "aliensyb", "Alien Syndrome (set 3)", - "aliensyj", "Alien Syndrome (Japan)", - "altbeas2", "Altered Beast (Version 2)", - "archriv2", "Arch Rivals (rev 2.0)", - "ark2jp", "Arkanoid - Revenge of DOH (Japan)", - "ark2us", "Arkanoid - Revenge of DOH (US)", - "arkanoi2", "Arkanoid - Revenge of DOH (World)", - "arkbl2", "Arkanoid (Japanese bootleg Set 2)", - "arknoidj", "Arkanoid (Japan)", - "arknoidu", "Arkanoid (US)", - "armorca2", "Armored Car (set 2)", - "astdelu1", "Asteroids Deluxe (rev 1)", - "asteroi1", "Asteroids (rev 1)", - "asteroib", "Asteroids (bootleg on Lunar Lander hardware)", - "astorm2p", "Alien Storm (2 Player)", - "atetckt2", "Tetris (Cocktail set 2)", - "atetcktl", "Tetris (Cocktail set 1)", - "atlants2", "Battle of Atlantis (set 2)", - "auraila", "Aurail (set 2)", - "avenger2", "Avengers (set 2)", - "battlan2", "Battle Lane Vol. 5 (set 2)", - "battlan3", "Battle Lane Vol. 5 (set 3)", - "battlntj", "Battlantis (Japan)", - "batugnsp", "Batsugun Special Ver.", - "bayrouta", "Bay Route (set 2)", - "bayrtbl1", "Bay Route (bootleg set 1)", - "bayrtbl2", "Bay Route (bootleg set 2)", - "berlwalt", "Berlin Wall, The (set 2)", - "bermudaa", "Bermuda Triangle (US early version)", - "bermudaj", "Bermuda Triangle (Japan)", - "bktigerb", "Black Tiger (bootleg)", - "bladstle", "Blades of Steel (version E)", - "blckgalb", "Block Gal (bootleg)", - "blckout2", "Block Out (set 2)", - "blkdrgnb", "Black Dragon (bootleg)", - "blsthead", "Blasteroids (with heads)", - "blstroi2", "Blasteroids (version 2)", - "blueprnj", "Blue Print (Jaleco)", - "bombjac2", "Bomb Jack (set 2)", - "bubbobr1", "Bubble Bobble (US)", - "bublbobr", "Bubble Bobble (US with mode select)", - "bullfgtj", "Tougyuu, The (Japan)", - "burningh", "Burning Fight (set 2)", - "bzone2", "Battle Zone (set 2)", - "cabal2", "Cabal (US set 2)", - "cameltru", "Camel Try (US)", - "canbprot", "Canyon Bomber (prototype)", - "captcomj", "Captain Commando (Japan)", - "captcomu", "Captain Commando (US)", - "carnvckt", "Carnival (cocktail)", - "ccastle2", "Crystal Castles (set 2)", - "cclimbrj", "Crazy Climber (Japan)", - "centipb2", "Centipede (bootleg set 2)", - "centipd2", "Centipede (revision 2)", - "champbbj", "Champion Baseball (Japan)", - "checkmaj", "Checkman (Japan)", - "chplft", "Choplifter", - "chplftb", "Choplifter (alternate)", - "chplftbl", "Choplifter (bootleg)", - "ckonga", "Crazy Kong (set 2)", - "ckongjeu", "Crazy Kong (Jeutel bootleg)", - "cninja0", "Caveman Ninja (World revision 0)", - "cobracmj", "Cobra-Command (Japan)", - "combasc", "Combat School (joystick)", - "combascb", "Combat School (bootleg)", - "combascj", "Combat School (Japan trackball)", - "combasct", "Combat School (trackball)", - "commandj", "Senjo no Ookami", - "commandu", "Commando (US)", - "contrajb", "Contra (Japan bootleg)", - "cosmognj", "Cosmo Gang the Video (Japan)", - "crbalon2", "Crazy Balloon (set 2)", - "crimfgt2", "Crime Fighters (World 2 Players)", - "crimfgtj", "Crime Fighters (Japan 2 Players)", - "cyberb2p", "Cyberball 2072 (2 player)", - "cyberba2", "Cyberball (Version 2)", - "cyberbt", "Tournament Cyberball 2072", - "darksea1", "Dark Seal (World revision 1)", - "darkseaj", "Dark Seal (Japan)", - "dbldyn", "Double Dynamites, The", - "ddrago3b", "Double Dragon 3 - The Rosetta Stone (bootleg)", - "deadconj", "Dead Connection (Japan)", - "defendg", "Defender (Green label)", - "defendw", "Defender (White label)", - "destderb", "Demolition Derby", - "destderm", "Demolition Derby (2-Player Mono Board Version)", - "devstor2", "Devastators (version X)", - "devstor3", "Devastators (version V)", - "digdug2a", "Dig Dug II (set 2)", - "digdugb", "Dig Dug (set 2)", - "dkjrbl", "Donkey Kong Junior (bootleg?)", - "dkjrjp", "Donkey Kong Junior (Japan)", - "dkngjrjp", "Donkey Kong Jr. (Original Japanese)", - "dkongjp", "Donkey Kong (Japan set 1)", - "dkongjpo", "Donkey Kong (Japan set 2)", - "docastl2", "Mr. Do's Castle (set 2)", - "dorunru2", "Do! Run Run (set 2)", - "dorunruc", "Do! Run Run (Do's Castle hardware)", - "dotriku2", "Dottori Kun (old version)", - "dspirito", "Dragon Spirit (old version)", - "dwj", "Tenchi wo Kurau (Japan)", - "earthinv", "Super Earth Invasion", - "einnings", "Extra Innings", - "elecyoy2", "Electric Yo-Yo, The (set 2)", - "elevatob", "Elevator Action (bootleg)", - "espiale", "Espial (Europe)", - "exctscca", "Exciting Soccer (alternate music)", - "exctsccb", "Exciting Soccer (bootleg)", - "exerizrb", "Exerizer (Japan) (bootleg)", - "fantzono", "Fantasy Zone (Old Ver.)", - "finalizb", "Finalizer - Super Transformation (bootleg)", - "firetpbl", "Fire Trap (Japan bootleg)", - "flicky2", "Flicky (set 2)", - "froggrmc", "Frogger (modified Moon Cresta hardware)", - "frogseg1", "Frogger (Sega set 1)", - "frogseg2", "Frogger (Sega set 2)", - "ftsoccer", "Fighting Soccer", - "galag88b", "Galaga '88 (set 2)", - "galag88j", "Galaga '88 (Japan)", - "galaga84", "Galaga '84", - "galagab2", "Galaga (bootleg)", - "galagads", "Galaga (fast shoot)", - "galaxb", "Galaxian (bootleg)", - "galmidw", "Galaxian (Midway)", - "gangwarb", "Gang Wars (bootleg)", - "gatedom1", "Gate of Doom (US revision 1)", - "gaunt2p", "Gauntlet (2 Players)", - "gauntir1", "Gauntlet (Intermediate Release 1)", - "gauntir2", "Gauntlet (Intermediate Release 2)", - "getstar", "Guardian", - "getstarb", "Get Star (bootleg)", - "ghoulsj", "Dai Makai-Mura (Japan)", - "goldnabl", "Golden Axe (bootleg)", - "goldnaxa", "Golden Axe (Version 2)", - "goldnaxb", "Golden Axe (Version 2 317-0110)", - "goldnaxc", "Golden Axe (Version 2 317-0122)", - "goldnaxj", "Golden Axe (Version 1, Japan)", - "gravitr2", "Gravitar (version 2)", - "grdius2a", "Gradius II - Gofer no Yabou (Japan set 2)", - "grdius2b", "Gradius II - Gofer no Yabou (Japan set 3)", - "grdius3a", "Gradius III (Asia)", - "gundeala", "Gun Dealer (set 2)", - "gunforcu", "Gunforce - Battle Fire Engulfed Terror Island (US)", - "gunfronj", "Gun Frontier (Japan)", - "gunsmoka", "Gun.Smoke (US set 2)", - "gunsmokj", "Gun.Smoke (Japan)", - "gunsmrom", "Gun.Smoke (US set 1)", - "hardhedb", "Hard Head (Bootleg)", - "hcastlea", "Haunted Castle (set 2)", - "hcastlej", "Akuma-Jou Dracula (Japan)", - "helifira", "HeliFire (revision A)", - "hitnmis2", "Hit 'n Miss (version 2.0)", - "hyprolyb", "Hyper Olympic (bootleg)", - "indytem2", "Indiana Jones and the Temple of Doom (set 2)", - "indytem3", "Indiana Jones and the Temple of Doom (set 3)", - "indytem4", "Indiana Jones and the Temple of Doom (set 4)", - "intrepi2", "Intrepid (set 2)", - "invrvnga", "Invader's Revenge (Dutchford)", - "jackrab2", "Jack Rabbit (set 2)", - "jackrabs", "Jack Rabbit (special)", - "junglkj2", "Jungle King (Japan, earlier)", - "junofstg", "Juno First (Gottlieb)", - "jyuohki", "Jyuohki (Japan)", - "kangaroa", "Kangaroo (Atari)", - "kangarob", "Kangaroo (bootleg)", - "karatblu", "Karate Blazers (US)", - "kicka", "Kick (cocktail)", - "kingbalj", "King & Balloon (Japan)", - "kodure", "Kodure Ookami (Japan)", - "kungfud", "Kung Fu Master (Data East)", - "kuniokub", "Nekketsu Kouha Kunio-kun (Japan bootleg)", - "kurikina", "Kuri Kinton (prototype?)", - "kyukaido", "Kyuukai Douchuuki (Japan old version)", - "lastmiss", "Last Mission (US revision 6)", - "lastmss2", "Last Mission (US revision 5)", - "lifefrcj", "Lifeforce (Japan)", - "losttmbh", "Lost Tomb (hard)", - "lstduela", "Last Duel (US set 2)", - "lstduelb", "Last Duel (bootleg)", - "lwingsjp", "Ales no Tsubasa (Japan)", - "mainevt2", "Main Event, The (version F)", - "makaimuc", "Makai-Mura (Revision C)", - "makaimug", "Makai-Mura (Revision G)", - "mappyjp", "Mappy (Japan)", - "marblea", "Marble Madness (set 3)", - "mariojp", "Mario Bros. (Japan)", - "marvlanj", "Marvel Land (Japan)", - "megaznik", "Mega Zone (Kosuka)", - "minigol2", "Mini Golf (set 2)", - "mjnquesb", "Mahjong Quest (No Nudity)", - "mk2r32", "Mortal Kombat II (rev L3.2 (European))", - "monwar2a", "Moon War II (set 2)", - "mooncrsg", "Moon Cresta (Gremlin)", - "moonwalk", "Moon Walker (Set 1)", - "moonwar2", "Moon War II (set 1)", - "moonwlka", "Moon Walker (Set 2)", - "moonwlkb", "Moon Walker (bootleg)", - "mrvikinj", "Mister Viking (Japan)", - "mspacatk", "Ms. Pac-Man Plus", - "myheroj", "Seishun Scandal (Japan)", - "naughtya", "Naughty Boy (bootleg)", - "naughtyc", "Naughty Boy (Cinematronics)", - "navalone", "Navalone", - "nbajamt1", "NBA Jam TE (rev 1.0 01/17/94)", - "nbajamt2", "NBA Jam TE (rev 2.0 01/28/94)", - "nbajamt3", "NBA Jam TE (rev 3.0 03/04/94)", - "nbamaxht", "NBA Maximum Hangtime (rev 1.0)", - "nebulbee", "Nebulous Bee", - "nemesuk", "Nemesis (World?)", - "nibblera", "Nibbler (set 2)", - "ninjak2a", "Ninja Kid II (set 2)", - "ninjak2b", "Ninja Kid II (set 3)", - "nov2001u", "Nova 2001 (US)", - "npacmod", "PuckMan (harder?)", - "nprincsb", "Ninja Princess (bootleg?)", - "nprincsu", "Ninja Princess (not encrypted)", - "offtwalc", "Off the Wall (2-player cocktail)", - "oscarj0", "Psycho-Nics Oscar (Japan revision 0)", - "oscarj", "Psycho-Nics Oscar (Japan revision 2)", - "outruna", "Out Run (set 2)", - "outzonep", "Out Zone (bootleg)", - "pacland2", "Pac-Land (set 2)", - "pacland3", "Pac-Land (set 3)", - "pacmanij", "Pac-Mania (Japan)", - "pacmanjp", "PuckMan (Japan set 2)", - "pacmanm", "Pac-Man (Midway)", - "panica", "Space Panic (set 2)", - "pbactio2", "Pinball Action (set 2)", - "pipibibi", "Pipi & Bibis / Whoopee (Japan) [bootleg ?]", - "pitfallu", "Pitfall II (not encrypted)", - "pitfigh3", "Pit Fighter (version 3)", - "polepos1", "Pole Position (Atari version 1)", - "poleposa", "Pole Position (Atari version 2)", - "poleps2a", "Pole Position II (Atari)", - "poleps2b", "Pole Position II (Atari bootleg 1)", - "poleps2c", "Pole Position II (Atari bootleg 2)", - "popeye2", "Popeye (set 2)", - "popflama", "Pop Flamer (set 2)", - "poundfou", "Pound for Pound (US)", - "prehislu", "Prehistoric Isle in 1930 (US)", - "pulirulj", "PuLiRuLa (Japan)", - "punishrj", "Punisher, The (Japan)", - "punishru", "Punisher, The (US)", - "punksht2", "Punk Shot (2 Players)", - "puzbobb", "Puzzle Bobble (Japan, B-System)", - "qadj", "Quiz & Dragons (Japan)", - "qbertjp", "Q*bert (Japan)", - "qtono2", "Quiz Tonosama no Yabou 2 Zenkoku-ban (Japan)", - "quartetj", "Quartet (Japan)", - "quartrba", "Quarterback (set 2)", - "qwakprot", "Qwak (prototype)", - "rainbow", "Rainbow Islands", - "rainbowe", "Rainbow Islands (Extra)", - "rambo3a", "Rambo III (set 2, US)", - "ramprt2p", "Rampart (2-player Joystick)", - "rastanu2", "Rastan (US set 2)", - "rescrdsa", "Rescue Raider (Stand-Alone)", - "retofin1", "Return of the Invaders (bootleg set 1)", - "retofin2", "Return of the Invaders (bootleg set 2)", - "ringkin2", "Ring King (set 2)", - "ringkin3", "Ring King (set 3)", - "robocpu0", "Robocop (US revision 0)", - "robotryo", "Robotron (Yellow/Orange label)", - "rockragj", "Koi no Hotrock (Japan)", - "rocnropk", "Roc'n Rope (Kosuka)", - "rthundro", "Rolling Thunder (old version)", - "rtypepj", "R-Type (Japan prototype)", - "saturn", "Saturn", - "schasrcv", "Space Chaser (CV version)", - "scrambls", "Scramble (Stern)", - "sctionza", "Section Z (set 2)", - "sdioj", "SDI - Strategic Defense Initiative (Japan)", - "seganinu", "Sega Ninja (not encrypted)", - "sengokh", "Sengoku / Sengoku Denshou (set 2)", - "sercharu", "SAR - Search And Rescue (US)", - "sf1", "Street Fighter (World)", - "sf1jp", "Street Fighter (Japan)", - "sf1us", "Street Fighter (US)", - "sf2a", "Street Fighter II - The World Warrior (US 910206)", - "sf2b", "Street Fighter II - The World Warrior (US 910214)", - "sf2cea", "Street Fighter II' - Champion Edition (US rev A)", - "sf2ceb", "Street Fighter II' - Champion Edition (US rev B)", - "sf2cej", "Street Fighter II' - Champion Edition (Japan)", - "sf2e", "Street Fighter II - The World Warrior (US 910228)", - "sf2jb", "Street Fighter II - The World Warrior (Japan 910214)", - "sf2t", "Street Fighter II' - Hyper Fighting (US)", - "sf2tj", "Street Fighter II' Turbo - Hyper Fighting (Japan)", - "sfeverbw", "Space Fever (black and white)", - "shangonb", "Super Hang-On (bootleg)", - "shdancrj", "Shadow Dancer (Japan)", - "shinobia", "Shinobi (set 2)", - "shinobib", "Shinobi (set 3)", - "shinobl", "Shinobi (bootleg)", - "shootoub", "Shoot Out (Korean Bootleg)", - "shootouj", "Shoot Out (Japan)", - "sichuana", "Sichuan II (hack ?) (set 2)", - "sidearjp", "Side Arms - Hyper Dyne (Japan)", - "sidearmr", "Side Arms - Hyper Dyne (US)", - "sidepctb", "Side Pocket (bootleg)", - "sidepctj", "Side Pocket (Japan)", - "silkwrm2", "Silkworm (set 2)", - "simps2pj", "Simpsons, The (2 Players Japan)", - "simpsn2p", "Simpsons, The (2 Players)", - "sinista1", "Sinistar (prototype version)", - "sinista2", "Sinistar (revision 2)", - "skingam2", "Irem Skins Game, The (US set 2)", - "skullxb2", "Skull & Crossbones (set 2)", - "skykiddo", "Sky Kid Deluxe (set 2)", - "slapbtjp", "Slap Fight (Japan bootleg)", - "slapbtuk", "Slap Fight (English bootleg)", - "snowbroa", "Snow Bros. - Nick & Tom (set 2)", - "snowbrob", "Snow Bros. - Nick & Tom (set 3)", - "snowbroj", "Snow Bros. - Nick & Tom (Japan)", - "spacfura", "Space Fury (revision A)", - "spinlbrj", "Spinal Breakers (Japan)", - "spinlbru", "Spinal Breakers (US)", - "spnchotj", "Super Punch-Out!! (Japan)", - "sptrekct", "Space Trek (cocktail)", - "spyhnt2a", "Spy Hunter 2 (rev 1)", - "sqixbl", "Super Qix (bootleg)", - "srumblr2", "Speed Rumbler, The (set 2)", - "sspacat2", "Space Attack (upright, older)", - "sspacatc", "Space Attack (cocktail)", - "ssrdrabd", "Sunset Riders (Asia 2 Players ver. ABD)", - "ssrdrebc", "Sunset Riders (World 2 Players ver. EBC)", - "ssrdrebd", "Sunset Riders (World 2 Players ver. EBD)", - "ssrdrjbd", "Sunset Riders (Japan 2 Players ver. JBD)", - "ssrdruac", "Sunset Riders (US 4 Players ver. UAC)", - "ssrdrubc", "Sunset Riders (US 2 Players ver. UBC)", - "ssrdruda", "Sunset Riders (US 4 Players ver. UDA)", - "starfore", "Star Force (encrypted)", - "starjacs", "Star Jacker (Stern)", - "starwar1", "Star Wars (rev 1)", - "stratvxb", "Stratovox (bootleg)", - "streets1", "Street Smart (US version 1)", - "streetsj", "Street Smart (Japan version 1)", - "stridrja", "Strider Hiryu (Japan set 2)", - "supbtimj", "Super Burger Time (Japan)", - "superpcm", "Super Pac-Man (Midway)", - "superqix", "Super Qix", - "suprmou2", "Funny Mouse (bootleg?)", - "surpratk", "Surprise Attack (Japan)", - "tankfrcj", "Tank Force (Japan)", - "tatsujn2", "Truxton II / Tatsujin II / Tatsujin Oh (Japan)", - "terracra", "Terra Cresta (YM2203)", - "terracrb", "Terra Cresta (YM3526 set 2)", - "tetrisa", "Tetris (Sega Set 2)", - "thehustj", "Hustler, The (Japan version J)", - "thnderxj", "Thunder Cross (Japan)", - "tigerh2", "Tiger Heli (set 2)", - "timesol1", "Time Soldiers (US Rev 1)", - "timscanr", "Time Scanner", - "tmnt22p", "Teenage Mutant Ninja Turtles - Turtles in Time (2 Players US)", - "tndrcadj", "Tokusyu Butai UAG (Japan)", - "tnzs2", "NewZealand Story 2, The (World)", - "tnzsb", "NewZealand Story, The (World, bootleg)", - "todruagb", "Tower of Druaga (set 2)", - "toki2", "Toki (set 2)", - "toki3", "Toki (set 3)", - "tomahaw5", "Tomahawk 777 (Revision 5)", - "toobinp", "Toobin' (Prototype)", - "trackflc", "Track & Field (Centuri)", - "trogp", "Trog (prototype, rev 4.00 07/27/90)", - "tsamura2", "Samurai Nihon-ichi (set 2)", - "tumblep2", "Tumble Pop (bootleg set 2)", - "tumblepb", "Tumble Pop (bootleg set 1)", - "tutankst", "Tutankham (Stern)", - "twincobu", "Twin Cobra (US)", - "vangrdce", "Vanguard (Centuri)", - "vanvans", "Van Van Car (Sanritsu)", - "vaportru", "Vapor Trail - Hyper Offence Formation (US)", - "vendett2", "Vendetta (Asia set 2)", - "vendettj", "Crime Fighters 2 (Japan)", - "vigilntj", "Vigilante (Japan)", - "vigilntu", "Vigilante (US)", - "vimana2", "Vimana (set 2)", - "vsyard", "10 Yard Fight (Vs. version 11/05/84)", - "vsyard2", "10 Yard Fight (Vs. version, set 2)", - "vulgus2", "Vulgus (set 2)", - "warlord", "Warlords", - "warpwar2", "Warp Warp (Rock-ola set 2)", - "warpwarr", "Warp Warp (Rock-ola set 1)", - "wb3a", "Wonder Boy III - Monster Lair (set 2)", - "wb3bl", "Wonder Boy III - Monster Lair (bootleg)", - "wbmlj", "Wonder Boy in Monster Land (Japan set 1)", - "wbmlj2", "Wonder Boy in Monster Land (Japan set 2)", - "wbmlju", "Wonder Boy in Monster Land (Japan not encrypted)", - "wboy4u", "Wonder Boy (set 4 not encrypted)", - "wexpresb", "Western Express (bootleg)", - "wwester1", "Wild Western (set 2)", - "yard", "10 Yard Fight", - "yokaidko", "Yokai Douchuuki (Japan old version)", - "youkaidk", "Yokai Douchuuki (Japan new version)", - "zzyzzyx2", "Zzyzzyxx (set 2)", - - NULL -}; diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index e437a367c2..9abbf8b4cd 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -94,53 +94,4 @@ namespace PlatformIds { return PlatformNames[id]; } - - int getMameTitleCount() - { - const char** mameNames = mameNameToRealName; - int count = 0; - while (*mameNames != NULL) - { - mameNames += 2; - count++; - } - return count; - } - - - const char* mameTitleSearch(const char* from) - { - // The start and end index range from [0, number of roms] - int iStart = 0; - static int mameCount = getMameTitleCount(); - int iEnd = mameCount; - - while (iStart < iEnd) - { - // The middle entry is halfway between the start and end index - const int iMiddle = (iStart + iEnd) / 2; - - // mameNameToRealName contains 2 sequential entries for every entry, so the indexes look like this: - // 0: key, value, - // 2: key, value, - // 4: key, value - // This means that there are twice as many indexes as there are numbers of ROMs. So to get the - // iMiddle'th entry, we need to multiply by 2 because iMiddle goes from [0, number of roms]. - const int iKey = iMiddle * 2; - const int comp = strcmp(mameNameToRealName[iKey], from); - if (comp < 0) - { - // Remember, iMiddle ranges from [0, number of roms] so we only increment by 1 - iStart = iMiddle + 1; - } - else if (comp > 0) - { - iEnd = iMiddle; - } - // The Key was found, now return the Value - else return mameNameToRealName[iKey + 1]; - } - return from; - } - } diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index be553e8fca..cf34c6eaf8 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -77,13 +77,6 @@ namespace PlatformIds PlatformId getPlatformId(const char* str); const char* getPlatformName(PlatformId id); - - // Get the number of Mame titles in the mameNameToRealName array - // Should only run this once and store in a static or cached variable - int getMameTitleCount(); - - // Perform a binary search for a game title given a rom name - const char* mameTitleSearch(const char* from); } #endif // ES_APP_PLATFORM_ID_H diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 7fd16dfa8b..df680023e6 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -9,6 +9,7 @@ #include "EmulationStation.h" #include "InputManager.h" #include "Log.h" +#include "MameNames.h" #include "platform.h" #include "PowerSaver.h" #include "ScraperCmdLine.h" @@ -282,6 +283,7 @@ int main(int argc, char* argv[]) PowerSaver::init(); ViewController::init(&window); CollectionSystemManager::init(&window); + MameNames::init(); window.pushGui(ViewController::get()); if(!scrape_cmdline) @@ -409,6 +411,7 @@ int main(int argc, char* argv[]) delete window.peekGui(); window.deinit(); + MameNames::deinit(); CollectionSystemManager::deinit(); SystemData::deleteSystems(); diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 2970e3563c..0e367c7bfd 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -11,6 +11,7 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Log.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/MameNames.h ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.h ${CMAKE_CURRENT_SOURCE_DIR}/src/PowerSaver.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer.h @@ -84,6 +85,7 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/InputConfig.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/InputManager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Log.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/MameNames.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/PowerSaver.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_draw_gl.cpp diff --git a/es-core/src/MameNames.cpp b/es-core/src/MameNames.cpp new file mode 100644 index 0000000000..ed998b2d5e --- /dev/null +++ b/es-core/src/MameNames.cpp @@ -0,0 +1,85 @@ +#include "MameNames.h" + +#include "resources/ResourceManager.h" +#include "utils/FileSystemUtil.h" +#include "Log.h" +#include +#include + +MameNames* MameNames::sInstance = nullptr; + +void MameNames::init() +{ + if(!sInstance) + sInstance = new MameNames(); + +} // init + +void MameNames::deinit() +{ + if(sInstance) + { + delete sInstance; + sInstance = nullptr; + } + +} // deinit + +MameNames* MameNames::getInstance() +{ + if(!sInstance) + sInstance = new MameNames(); + + return sInstance; + +} // getInstance + +MameNames::MameNames() +{ + std::string xmlpath = ResourceManager::getInstance()->getResourcePath(":/mamenames.xml"); + + if(!Utils::FileSystem::exists(xmlpath)) + return; + + LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\"..."; + + pugi::xml_document doc; + pugi::xml_parse_result result = doc.load_file(xmlpath.c_str()); + + if(!result) + { + LOG(LogError) << "Error parsing XML file \"" << xmlpath << "\"!\n " << result.description(); + return; + } + + for(pugi::xml_node gameNode = doc.child("game"); gameNode; gameNode = gameNode.next_sibling("game")) + { + NamePair namePair = { gameNode.child("mamename").text().get(), gameNode.child("realname").text().get() }; + names.push_back(namePair); + } + +} // MameNames + +MameNames::~MameNames() +{ + +} // ~MameNames + +std::string MameNames::getRealName(const std::string& _mameName) +{ + size_t start = 0; + size_t end = names.size(); + + while(start < end) + { + const size_t index = (start + end) / 2; + const int compare = strcmp(names[index].mameName.c_str(), _mameName.c_str()); + + if(compare < 0) start = index + 1; + else if( compare > 0) end = index; + else return names[index].realName; + } + + return _mameName; + +} // getRealName diff --git a/es-core/src/MameNames.h b/es-core/src/MameNames.h new file mode 100644 index 0000000000..5f8bb4634e --- /dev/null +++ b/es-core/src/MameNames.h @@ -0,0 +1,38 @@ +#pragma once +#ifndef ES_CORE_MAMENAMES_H +#define ES_CORE_MAMENAMES_H + +#include +#include + +namespace CEC { class ICECAdapter; } + +class MameNames +{ +public: + + static void init (); + static void deinit (); + static MameNames* getInstance(); + std::string getRealName(const std::string& _mameName); + +private: + + struct NamePair + { + std::string mameName; + std::string realName; + }; + + typedef std::vector namePairVector; + + MameNames(); + ~MameNames(); + + static MameNames* sInstance; + + namePairVector names; + +}; // MameNames + +#endif // ES_CORE_MAMENAMES_H diff --git a/resources/mamenames.xml b/resources/mamenames.xml new file mode 100644 index 0000000000..2f35d654e6 --- /dev/null +++ b/resources/mamenames.xml @@ -0,0 +1,121778 @@ + + 005 + 005 + + + 10yard + 10-Yard Fight (World, set 1) + + + 10yard85 + 10-Yard Fight '85 (US, Taito license) + + + 10yardj + 10-Yard Fight (Japan) + + + 11beat + Eleven Beat + + + 18w + 18 Wheeler (set 1) + + + 18w2 + 18 Wheeler (set 2) + + + 18wheelr + 18 Wheeler (Deluxe) (Rev A) + + + 18wheels + 18 Wheeler (Standard) + + + 18wheelu + 18 Wheeler (Upright) + + + 1941 + 1941: Counter Attack (World 900227) + + + 1941j + 1941: Counter Attack (Japan) + + + 1941r1 + 1941: Counter Attack (World) + + + 1941u + 1941: Counter Attack (USA 900227) + + + 1942 + 1942 (Revision B) + + + 1942a + 1942 (Revision A) + + + 1942abl + 1942 (Revision A, bootleg) + + + 1942b + 1942 (First Version) + + + 1942p + 1942 (prototype) + + + 1942w + 1942 (Williams Electronics license) + + + 1943 + 1943: The Battle of Midway (Euro) + + + 1943b + 1943: Battle of Midway (bootleg, hack of Japan set) + + + 1943j + 1943: Midway Kaisen (Japan, Rev B) + + + 1943ja + 1943: Midway Kaisen (Japan) + + + 1943kai + 1943 Kai: Midway Kaisen (Japan) + + + 1943u + 1943: The Battle of Midway (US, Rev C) + + + 1944 + 1944: The Loop Master (USA 000620) + + + 1944d + 1944: The Loop Master (USA 000620 Phoenix Edition) (bootleg) + + + 1944j + 1944: The Loop Master (Japan 000620) + + + 1945kiii + 1945k III + + + 19in1 + 19 in 1 MAME bootleg + + + 19xx + 19XX: The War Against Destiny (USA 951207) + + + 19xxa + 19XX: The War Against Destiny (Asia 951207) + + + 19xxb + 19XX: The War Against Destiny (Brazil 951218) + + + 19xxd + 19XX: The War Against Destiny (USA 951207 Phoenix Edition) (bootleg) + + + 19xxh + 19XX: The War Against Destiny (Hispanic 951218) + + + 19xxj + 19XX: The War Against Destiny (Japan 960104, yellow case) + + + 19xxjr1 + 19XX: The War Against Destiny (Japan 951225) + + + 19xxjr2 + 19XX: The War Against Destiny (Japan 951207) + + + 1on1gov + 1 on 1 Government (Japan) + + + 2020bb + 2020 Super Baseball (set 1) + + + 2020bba + 2020 Super Baseball (set 2) + + + 2020bbh + 2020 Super Baseball (set 3) + + + 20pacgal + Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.08) + + + 20pacgalr0 + Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.00) + + + 20pacgalr1 + Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.01) + + + 20pacgalr2 + Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.02) + + + 20pacgalr3 + Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.03) + + + 20pacgalr4 + Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.04) + + + 24cdjuke + Midcoin Juke Box 24CD + + + 25pacman + Pac-Man - 25th Anniversary Edition (Rev 3.00) + + + 25pacmano + Pac-Man - 25th Anniversary Edition (Rev 2.00) + + + 280zzzap + 280-ZZZAP + + + 2mindril + Two Minute Drill + + + 30test + 30 Test (Remake) + + + 39in1 + 39 in 1 MAME bootleg + + + 3bagflnz + 3 Bags Full (3VXFC5345, New Zealand) + + + 3bagflvt + 3 Bags Full (5VXFC790, Victoria) + + + 3countb + 3 Count Bout / Fire Suplex (NGM-043)(NGH-043) + + + 3dobios + 3DO Bios + + + 3ds + Three Ds - Three Dealers Casino House + + + 3in1semi + XESS - The New Revolution (SemiCom 3-in-1) + + + 3kokushi + Sankokushi (Japan) + + + 3on3dunk + 3 On 3 Dunk Madness (US, prototype? 1997/02/04) + + + 3stooges + The Three Stooges In Brides Is Brides (set 1) + + + 3stoogesa + The Three Stooges In Brides Is Brides (set 2) + + + 3super8 + 3 Super 8 (Italy) + + + 3wishrd + Three Wishes Red (Russia) (Atronic) + + + 3wonders + Three Wonders (World 910520) + + + 3wondersb + Three Wonders (bootleg) + + + 3wondersh + Three Wonders (hack) + + + 3wondersr1 + Three Wonders (World 910513) + + + 3wondersu + Three Wonders (USA 910520) + + + 3x3puzzl + 3X3 Puzzle (Enterprise) + + + 3x3puzzla + 3X3 Puzzle (Normal) + + + 40love + Forty-Love + + + 47pie2 + Idol Janshi Su-Chi-Pie 2 (v1.1) + + + 47pie2o + Idol Janshi Su-Chi-Pie 2 (v1.0) + + + 48in1 + 48 in 1 MAME bootleg (set 1, ver 3.09) + + + 48in1a + 48 in 1 MAME bootleg (set 3, ver 3.02) + + + 48in1b + 48 in 1 MAME bootleg (set 2, ver 3.09, alt flash) + + + 4dwarrio + 4-D Warriors (315-5162) + + + 4enlinea + Cuatro en Linea + + + 4enraya + 4 En Raya (set 1) + + + 4enrayaa + 4 En Raya (set 2) + + + 4in1 + 4 Fun in 1 + + + 4in1a + 4 in 1 MAME bootleg (set 1, ver 3.00) + + + 4in1b + 4 in 1 MAME bootleg (set 2) + + + 4in1boot + Puzzle King (includes bootleg of Snow Bros.) + + + 4psimasy + Mahjong 4P Simasyo (Japan) + + + 4roses + Four Roses (encrypted, set 1) + + + 4rosesa + Four Roses (encrypted, set 2) + + + 500gp + 500 GP (5GP3 Ver. C) + + + 50lions + 50 Lions (10120511, NSW/ACT) + + + 50lionsa + 50 Lions (10156111, Malaysia) + + + 5acespkr + 5-Aces Poker + + + 5clown + Five Clown (English, set 1) + + + 5clowna + Five Clown (English, set 2) + + + 5clownsp + Five Clown (Spanish hack) + + + 600 + 600 + + + 60in1 + 60 in 1 MAME bootleg (ver 3.00) + + + 64street + 64th. Street - A Detective Story (World) + + + 64streetj + 64th. Street - A Detective Story (Japan) + + + 720 + 720 Degrees (rev 4) + + + 720g + 720 Degrees (German, rev 2) + + + 720gr1 + 720 Degrees (German, rev 1) + + + 720r1 + 720 Degrees (rev 1) + + + 720r2 + 720 Degrees (rev 2) + + + 720r3 + 720 Degrees (rev 3) + + + 7jigen + 7jigen no Youseitachi - Mahjong 7 Dimensions (Japan) + + + 7mezzo + 7 e Mezzo + + + 7ordi + 7 Ordi (Korea) + + + 7smash + 7 Smash + + + 7toitsu + Chi-Toitsu + + + 800fath + 800 Fathoms + + + 86lions + 86 Lions + + + 88games + '88 Games + + + 8ball + Video Eight Ball + + + 8ball1 + Video Eight Ball (Rev.1) + + + 8ballact + Eight Ball Action (DK conversion) + + + 8ballact2 + Eight Ball Action (DKJr conversion) + + + 8bpm + Eight Ball Action (Pac-Man conversion) + + + 98best44 + Neo Print - '98 NeoPri Best 44 (Japan) + + + 99bottles + 99 Bottles of Beer + + + 99lstwar + '99: The Last War (set 1) + + + 99lstwara + '99: The Last War (set 2) + + + 99lstwark + '99: The Last War (Kyugo) + + + 9ballsht + 9-Ball Shootout (set 1) + + + 9ballsht2 + 9-Ball Shootout (set 2) + + + 9ballsht3 + 9-Ball Shootout (set 3) + + + 9ballshtc + 9-Ball Shootout Championship + + + a51mxr3k + Area 51 / Maximum Force Duo (R3000) + + + a51site4 + Area 51: Site 4 (HD Rev 2.01, September 7, 1998) + + + a51site4a + Area 51: Site 4 (HD Rev 2.0, September 11, 1998) + + + aadvent + African Adventure (Konami Endeavour) + + + aafb + All American Football (rev E) + + + aafbb + All American Football (rev B) + + + aafbc + All American Football (rev C) + + + aafbd2p + All American Football (rev D, 2 Players) + + + aar_101 + Aaron Spelling (1.01) + + + aavenger + Airborne Avenger + + + abacus + Abacus (Ver 1.0) + + + abaseb + Atari Baseball (set 1) + + + abaseb2 + Atari Baseball (set 2) + + + abattle + Astro Battle (set 1) + + + abattle2 + Astro Battle (set 2) + + + abcop + A.B. Cop (World, FD1094 317-0169b) + + + abcopj + A.B. Cop (Japan, FD1094 317-0169b) + + + abigchs + Big Cheese (Russia) (Atronic) + + + abnudge + Animal Bonus Nudge (Version 2.1 Dual) + + + abnudgeb + Animal Bonus Nudge (Version 2.0, set 1) + + + abnudged + Animal Bonus Nudge (Version 2.0, set 2) + + + abnudgeo + Animal Bonus Nudge (Version 1.7) + + + abscam + Abscam + + + abunai + Abunai Houkago - Mou Matenai (Japan 890325) + + + aburner + After Burner + + + aburner2 + After Burner II + + + aburner2g + After Burner II (German) + + + abv106 + Airborne + + + abv106r + Airborne (Redemption) + + + ac1bbclb + Big Break Club (Ace) (ACESYS1) (set 1) + + + ac1bbclba + Big Break Club (Ace) (ACESYS1) (set 2) + + + ac1bluec + Blue Chip (Pcp) (ACESYS1) (set 1) + + + ac1blueca + Blue Chip (Pcp) (ACESYS1) (set 2) + + + ac1bluecb + Blue Chip (Pcp) (ACESYS1) (set 3) + + + ac1bluecc + Blue Chip (Pcp) (ACESYS1) (set 4) + + + ac1bluecd + Blue Chip (Pcp) (ACESYS1) (set 5) + + + ac1clbmn + Club Money (Ace) (ACESYS1) (set 1) + + + ac1clbsv + Club Sovereign (Ace) (ACESYS1) + + + ac1clbxt + Club Xtra (Ace) (ACESYS1) (set 1) + + + ac1clbxta + Club Xtra (Ace) (ACESYS1) (set 2) + + + ac1dbldx + Double Deluxe (Pcp) (ACESYS1) + + + ac1gogld + Go For Gold (Ace) (ACESYS1) (set 1) + + + ac1hideh + Hi De Hi Deluxe (Ace) (ACESYS1) (set 1) + + + ac1hideha + Hi De Hi Deluxe (Ace) (ACESYS1) (set 2) + + + ac1hotpf + Hot Profit (Ace) (ACESYS1) + + + ac1nudbk + Nudge Break (Pcp) (ACESYS1) (set 1) + + + ac1nudbka + Nudge Break (Pcp) (ACESYS1) (set 2) + + + ac1nudbkb + Nudge Break (Pcp) (ACESYS1) (set 3) + + + ac1nudbkc + Nudge Break (Pcp) (ACESYS1) (set 4) + + + ac1nudbkd + Nudge Break (Pcp) (ACESYS1) (set 5) + + + ac1piaca + Play It Again Casino (Ace) (ACESYS1) + + + ac1piacl + Play It Again Club (Ace) (ACESYS1) (set 1) + + + ac1piacla + Play It Again Club (Ace) (ACESYS1) (set 2) + + + ac1piaclb + Play It Again Club (Ace) (ACESYS1) (set 3) + + + ac1piaclc + Play It Again Club (Ace) (ACESYS1) (set 4) + + + ac1primt + Primetime (Ace) (ACESYS1) (set 1) + + + ac1prmcl + Premier Club (Ace) (ACESYS1) (set 1) + + + ac1prmcla + Premier Club (Ace) (ACESYS1) (set 2) + + + ac1prmclb + Premier Club (Ace) (ACESYS1) (set 3) + + + ac1prmclc + Premier Club (Ace) (ACESYS1) (set 4) + + + ac1pster + Pound Sterling (Ace) (ACESYS1) + + + ac1pstrt + Pound Stretcher (Pcp) (ACESYS1) + + + ac1roll + Roll Up (Pcp) (ACESYS1) (set 1) + + + ac1rolla + Roll Up (Pcp) (ACESYS1) (set 2) + + + ac1rollb + Roll Up (Pcp) (ACESYS1) (set 3) + + + ac1rundx + Runner Deluxe Club (Ace) (ACESYS1) (set 1) + + + ac1rundxa + Runner Deluxe Club (Ace) (ACESYS1) (set 2) + + + ac1shid + Super Hi De Hi (Ace) (ACESYS1) (set 1) + + + ac1shida + Super Hi De Hi (Ace) (ACESYS1) (set 2) + + + ac1sstrk + Starstruck (Pcp) (ACESYS1) (set 1) + + + ac1sstrka + Starstruck (Pcp) (ACESYS1) (set 2) + + + ac1sstrkb + Starstruck (Pcp) (ACESYS1) (set 3) + + + ac1taklv + Take It Or Leave It (Ace) (ACESYS1) (set 1) + + + ac1totb + Top Of The Bill (Ace) (ACESYS1) + + + ac1xpres + Xpress (Pcp) (ACESYS1) + + + ace + Ace + + + aceattac + Ace Attacker (FD1094 317-0059) + + + aceattaca + Ace Attacker (Japan, System 16A, FD1094 317-0060) + + + acedrvrw + Ace Driver: Racing Evolution (Rev. AD2) + + + acefruit + Silhouette + + + acheart + Arcana Heart + + + acheartf + Arcana Heart Full + + + acitya + Atlantic City Action + + + aclown + Clown (Russia) (Atronic) + + + acombat + Astro Combat (newer, CB) + + + acombat3 + Astro Combat (unencrypted) + + + acombato + Astro Combat (older, PZ) + + + acommand + Alien Command + + + acpsx + Acclaim PSX + + + acrobatm + Acrobat Mission + + + act2000 + Action 2000 (Version 3.5E Dual) + + + act2000b1 + Action 2000 (Version 3.5R, set 2) + + + act2000bx + Action 2000 (Version 3.30XT, set 2) + + + act2000d1 + Action 2000 (Version 3.5R, set 1) + + + act2000dx + Action 2000 (Version 3.30XT, set 1) + + + act2000o + Action 2000 (Version 3.3) + + + act2000o2 + Action 2000 (Version 3.10XT) + + + act2000o3 + Action 2000 (Version 1.2) + + + act2000v1 + Action 2000 (Version 3.5R Dual) + + + act2000vx + Action 2000 (Version 3.30XT Dual) + + + actfancr + Act-Fancer Cybernetick Hyper Weapon (World revision 2) + + + actfancr1 + Act-Fancer Cybernetick Hyper Weapon (World revision 1) + + + actfancrj + Act-Fancer Cybernetick Hyper Weapon (Japan revision 1) + + + actionhw + Action Hollywood + + + ad2083 + A. D. 2083 + + + ad4ctl + Cop The Lot Club (Video) (Bellfruit) (Adder 4) (set 1) + + + ad4ctla + Cop The Lot Club (Video) (Bellfruit) (Adder 4) (set 2) + + + ad4film + Film Premiere (Video?) (Bellfruit) (Adder 4) (set 1) + + + ad4filma + Film Premiere (Video?) (Bellfruit) (Adder 4) (set 2) + + + ad4skill + Skill Dice (BFM) (Scorpion 4 + Adder 4) + + + ad5bpfpm + Bullseye Pounds For Points (Mazooma) (Adder 5) (set 1) + + + ad5bpfpma + Bullseye Pounds For Points (Mazooma) (Adder 5) (set 2) + + + ad5bpfpmb + Bullseye Pounds For Points (Mazooma) (Adder 5) (set 3) + + + ad5bpfpmc + Bullseye Pounds For Points (Mazooma) (Adder 5) (set 4) + + + ad5bpfpmd + Bullseye Pounds For Points (Mazooma) (Adder 5) (set 5) + + + ad5btc + Bullseye Triple Club (PR1758, BFGPBULS) (Bellfruit) (Adder 5) (set 1) + + + ad5btca + Bullseye Triple Club (PR1758, BFGPBULS) (Bellfruit) (Adder 5) (set 3) + + + ad5btcb + Bullseye Triple Club (PR1758, BFGNBULS) (Bellfruit) (Adder 5) (set 4) + + + ad5cmons + Crazy Money (Bellfruit) (Adder 5) (set 1) + + + ad5cmonsa + Crazy Money (Bellfruit) (Adder 5) (set 2) + + + ad5copsr + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 1) + + + ad5copsr0 + Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 7) + + + ad5copsr1 + Cops 'n' Robbers (PR2497) (Mazooma) (Adder 5) (set 2) + + + ad5copsr2 + Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 8) + + + ad5copsr3 + Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 1) + + + ad5copsr4 + Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 5) + + + ad5copsr5 + Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 2) + + + ad5copsr6 + Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 6) + + + ad5copsr7 + Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 4) + + + ad5copsra + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 2) + + + ad5copsrb + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 3) + + + ad5copsrc + Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 1) + + + ad5copsrd + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 4) + + + ad5copsre + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 5) + + + ad5copsrf + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 6) + + + ad5copsrg + Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 2) + + + ad5copsrh + Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 1) + + + ad5copsri + Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 2) + + + ad5copsrj + Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 5) + + + ad5copsrk + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 7) + + + ad5copsrl + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 8) + + + ad5copsrm + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 9) + + + ad5copsrn + Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 3) + + + ad5copsro + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 10) + + + ad5copsrp + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 11) + + + ad5copsrq + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 12) + + + ad5copsrr + Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 4) + + + ad5copsrs + Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 3) + + + ad5copsrt + Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 4) + + + ad5copsru + Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 6) + + + ad5copsrv + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 13) + + + ad5copsrw + Cops 'n' Robbers (PR3206) (Bellfruit) (Adder 5) (set 14) + + + ad5copsrx + Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 5) + + + ad5copsry + Cops 'n' Robbers (PR1965) (Bellfruit) (Adder 5) (set 6) + + + ad5copsrz + Cops 'n' Robbers (PR2497) (Mazooma) (Adder 5) (set 1) + + + ad5crcpt + Cops 'n' Robbers Community Party (Bellfruit) (Adder 5) (set 1) + + + ad5crcpta + Cops 'n' Robbers Community Party (Bellfruit) (Adder 5) (set 2) + + + ad5crsc + Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 1) + + + ad5crsca + Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 2) + + + ad5crscb + Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 3) + + + ad5crscc + Cops 'n' Robbers (PR2476) (Mazooma) (Adder 5) (set 4) + + + ad5crscd + Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 7) + + + ad5crsce + Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 8) + + + ad5crscf + Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 9) + + + ad5crscg + Cops 'n' Robbers (PR2495) (Mazooma) (Adder 5) (set 10) + + + ad5crsch + Cops 'n' Robbers (PR2628) (Mazooma) (Adder 5) (set 3) + + + ad5dnd + Deal Or No Deal (Bellfruit) (Adder 5) (set 1) + + + ad5dnda + Deal Or No Deal (Bellfruit) (Adder 5) (set 2) + + + ad5dndb + Deal Or No Deal (Bellfruit) (Adder 5) (set 3) + + + ad5dndc + Deal Or No Deal (Bellfruit) (Adder 5) (set 4) + + + ad5dndcl + Deal Or No Deal Club (Bellfruit) (Adder 5) (set 1) + + + ad5dndcla + Deal Or No Deal Club (Bellfruit) (Adder 5) (set 2) + + + ad5dndclb + Deal Or No Deal Club (Bellfruit) (Adder 5) (set 3) + + + ad5dndclc + Deal Or No Deal Club (Bellfruit) (Adder 5) (set 4) + + + ad5dndcld + Deal Or No Deal Club (Bellfruit) (Adder 5) (set 5) + + + ad5dndcle + Deal Or No Deal Club (Bellfruit) (Adder 5) (set 6) + + + ad5dndclf + Deal Or No Deal Club (Bellfruit) (Adder 5) (set 20) + + + ad5dndclg + Deal Or No Deal Club (Bellfruit) (Adder 5) (set 21) + + + ad5dndd + Deal Or No Deal (Bellfruit) (Adder 5) (set 5) + + + ad5dnddd + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Adder 5) (set 1) + + + ad5dnddda + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Adder 5) (set 2) + + + ad5dnde + Deal Or No Deal (Bellfruit) (Adder 5) (set 6) + + + ad5dndf + Deal Or No Deal (Bellfruit) (Adder 5) (set 7) + + + ad5dndg + Deal Or No Deal (Bellfruit) (Adder 5) (set 8) + + + ad5dndh + Deal Or No Deal (Bellfruit) (Adder 5) (set 9) + + + ad5dndi + Deal Or No Deal (Bellfruit) (Adder 5) (set 10) + + + ad5dndj + Deal Or No Deal (Bellfruit) (Adder 5) (set 11) + + + ad5dndk + Deal Or No Deal (Bellfruit) (Adder 5) (set 12) + + + ad5dndl + Deal Or No Deal (Bellfruit) (Adder 5) (set 13) + + + ad5dndm + Deal Or No Deal (Bellfruit) (Adder 5) (set 14) + + + ad5dndn + Deal Or No Deal (Bellfruit) (Adder 5) (set 15) + + + ad5dndo + Deal Or No Deal (Bellfruit) (Adder 5) (set 16) + + + ad5dndp + Deal Or No Deal (Bellfruit) (Adder 5) (set 17) + + + ad5dndpg + Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 1) + + + ad5dndpga + Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 2) + + + ad5dndpgb + Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 3) + + + ad5dndpgc + Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 4) + + + ad5dndpl + Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 1) + + + ad5dndpla + Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 2) + + + ad5dndplb + Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 3) + + + ad5dndplc + Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 4) + + + ad5dndq + Deal Or No Deal (Bellfruit) (Adder 5) (set 18) + + + ad5dndr + Deal Or No Deal (Bellfruit) (Adder 5) (set 19) + + + ad5dndu + Deal Or No Deal (Bellfruit) (Adder 5) (set 22) + + + ad5dndv + Deal Or No Deal (Bellfruit) (Adder 5) (set 23) + + + ad5eyes + Eyes Down (PR2242, MAZNEYDW) (Mazooma) (Adder 5) (set 1) + + + ad5eyesa + Eyes Down (PR2242, MAZNEYDW) (Mazooma) (Adder 5) (set 2) + + + ad5eyesb + Eyes Down (PR2246, MAZNEYDW) (Mazooma) (Adder 5) (set 1) + + + ad5eyesc + Eyes Down (PR2246, MAZPEYDW) (Mazooma) (Adder 5) (set 1) + + + ad5eyesd + Eyes Down (PR2242, MAZPEYDW) (Mazooma) (Adder 5) (set 1) + + + ad5eyese + Eyes Down (PR2242, MAZPEYDW) (Mazooma) (Adder 5) (set 2) + + + ad5eyesf + Eyes Down (PR2246, MAZPEYDW) (Mazooma) (Adder 5) (set 2) + + + ad5eyesg + Eyes Down (PR2246, MAZNEYDW) (Mazooma) (Adder 5) (set 2) + + + ad5gldmn + Gold Mine (Bellfruit) (Adder 5) (set 1) + + + ad5gldmna + Gold Mine (Bellfruit) (Adder 5) (set 2) + + + ad5gldmnb + Gold Mine (Bellfruit) (Adder 5) (set 3) + + + ad5gldmnc + Gold Mine (Bellfruit) (Adder 5) (set 4) + + + ad5gldmnd + Gold Mine (Bellfruit) (Adder 5) (set 5) + + + ad5gldmne + Gold Mine (Bellfruit) (Adder 5) (set 6) + + + ad5gldmnf + Gold Mine (Bellfruit) (Adder 5) (set 7) + + + ad5gldmng + Gold Mine (Bellfruit) (Adder 5) (set 8) + + + ad5gldmnh + Gold Mine (Bellfruit) (Adder 5) (set 9) + + + ad5gldmni + Gold Mine (Bellfruit) (Adder 5) (set 10) + + + ad5gldmnj + Gold Mine (Bellfruit) (Adder 5) (set 11) + + + ad5gldmnk + Gold Mine (Bellfruit) (Adder 5) (set 12) + + + ad5gldwn + Golden Winner (Mazooma) (Adder 5) (set 1) + + + ad5gldwna + Golden Winner (Mazooma) (Adder 5) (set 2) + + + ad5hir + Hi Roller (Bellfruit) (Adder 5) (set 1) + + + ad5hira + Hi Roller (Bellfruit) (Adder 5) (set 2) + + + ad5hirb + Hi Roller (Bellfruit) (Adder 5) (set 3) + + + ad5hirc + Hi Roller (Bellfruit) (Adder 5) (set 4) + + + ad5hircl + Hi Roller Club (Bellfruit) (Adder 5) (set 1) + + + ad5hircla + Hi Roller Club (Bellfruit) (Adder 5) (set 2) + + + ad5hirclb + Hi Roller Club (Bellfruit) (Adder 5) (set 3) + + + ad5jckmo + Jackpot Monopoly (PR2226, MAZNJACM) (Mazooma) (Adder 5) (set 1) + + + ad5jckmoa + Jackpot Monopoly (PR2226, MAZNJACM) (Mazooma) (Adder 5) (set 2) + + + ad5jckmob + Jackpot Monopoly (PR2253, MAZNJACM) (Mazooma) (Adder 5) + + + ad5jckmoc + Jackpot Monopoly (PR2226, MAZNJACM) (Mazooma) (Adder 5) (set 3) + + + ad5jckmod + Jackpot Monopoly (PR2226, MAZPJACM) (Mazooma) (Adder 5) (set 1) + + + ad5jckmoe + Jackpot Monopoly (PR2226, MAZPJACM) (Mazooma) (Adder 5) (set 2) + + + ad5mcob + Monte Carlo Or Bust (Qps) (Adder 5) (set 1) + + + ad5mcoba + Monte Carlo Or Bust (Qps) (Adder 5) (set 2) + + + ad5mcobb + Monte Carlo Or Bust (Qps) (Adder 5) (set 3) + + + ad5mcobc + Monte Carlo Or Bust (Qps) (Adder 5) (set 4) + + + ad5monop + Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 1) + + + ad5monopa + Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 2) + + + ad5monopb + Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 3) + + + ad5monopc + Random Monopoly (PR2217, MAZNRNDN) (Mazooma) (Adder 5) (set 4) + + + ad5monopd + Random Monopoly (PR2221, MAZNRNDN) (Mazooma) (Adder 5) (set 1) + + + ad5monope + Random Monopoly (PR2221, MAZNRNDN) (Mazooma) (Adder 5) (set 2) + + + ad5monopf + Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 1) + + + ad5monopg + Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 2) + + + ad5monoph + Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 3) + + + ad5monopi + Random Monopoly (PR2217, MAZPRNDN) (Mazooma) (Adder 5) (set 4) + + + ad5monopj + Random Monopoly (PR2221, MAZPRNDN) (Mazooma) (Adder 5) (set 1) + + + ad5monopk + Random Monopoly (PR2221, MAZPRNDN) (Mazooma) (Adder 5) (set 2) + + + ad5mowow + Monopoly Wheel Of Wealth (PR2365, MAZNBPFP) (Mazooma) (Adder 5) (set 1) + + + ad5mowowa + Monopoly Wheel Of Wealth (PR2365, MAZNWOWT) (Mazooma) (Adder 5) (set 1) + + + ad5mowowb + Monopoly Wheel Of Wealth (PR2365, MAZNWOWT) (Mazooma) (Adder 5) (set 2) + + + ad5mowowc + Monopoly Wheel Of Wealth (PR2389, MAZNWWBU) (Mazooma) (Adder 5) + + + ad5mowowd + Monopoly Wheel Of Wealth (PR2365, MAZNMWOW) (Mazooma) (Adder 5) + + + ad5mowowe + Monopoly Wheel Of Wealth (PR2365, MAZPBPFP) (Mazooma) (Adder 5) (set 1) + + + ad5mowowf + Monopoly Wheel Of Wealth (PR2365, MAZPWOWT) (Mazooma) (Adder 5) (set 1) + + + ad5mowowg + Monopoly Wheel Of Wealth (PR2365, MAZPWOWT) (Mazooma) (Adder 5) (set 2) + + + ad5mowowh + Monopoly Wheel Of Wealth (PR2389, MAZPWWBU) (Mazooma) (Adder 5) + + + ad5mowowi + Monopoly Wheel Of Wealth (PR2365, MAZPMWOW) (Mazooma) (Adder 5) + + + ad5mowowj + Monopoly Wheel Of Wealth (PR3075) (Adder 5) (set 1) + + + ad5mowowk + Monopoly Wheel Of Wealth (PR3075) (Adder 5) (set 2) + + + ad5mowowl + Monopoly Wheel Of Wealth (PR2365, MAZNBPFP) (Mazooma) (Adder 5) (set 2) + + + ad5mowowm + Monopoly Wheel Of Wealth (PR2365, MAZPBPFP) (Mazooma) (Adder 5) (set 2) + + + ad5mr2r + Monopoly Road To Riches (Mazooma) (Adder 5) (set 1) + + + ad5mr2ra + Monopoly Road To Riches (Mazooma) (Adder 5) (set 2) + + + ad5mr2rb + Monopoly Road To Riches (Mazooma) (Adder 5) (set 3) + + + ad5mr2rc + Monopoly Road To Riches (Mazooma) (Adder 5) (set 4) + + + ad5mr2rd + Monopoly Road To Riches (Mazooma) (Adder 5) (set 5) + + + ad5mr2re + Monopoly Road To Riches (Mazooma) (Adder 5) (set 6) + + + ad5mr2rf + Monopoly Road To Riches (Mazooma) (Adder 5) (set 7) + + + ad5mr2rg + Monopoly Road To Riches (Mazooma) (Adder 5) (set 8) + + + ad5mr2rh + Monopoly Road To Riches (Mazooma) (Adder 5) (set 9) + + + ad5mww + Random Monopoly Wonders Of The World (PR2284) (Mazooma) (Adder 5) + + + ad5mwwa + Random Monopoly Wonders Of The World (PR2291) (Mazooma) (Adder 5) + + + ad5pking + Poker King (Bellfruit) (Adder 5) (set 1) + + + ad5pkinga + Poker King (Bellfruit) (Adder 5) (set 2) + + + ad5pp + Pink Panther (PR2283, QPSNPINK) (Mazooma) (Adder 5) (set 1) + + + ad5ppa + Pink Panther (PR2283, QPSNPINK) (Mazooma) (Adder 5) (set 2) + + + ad5ppb + Pink Panther (PR2267, MAZNPINK) (Mazooma) (Adder 5) (set 1) + + + ad5ppbtb + Pink Panther Break The Bank (PR2304, QPSNPPBB) (Qps) (Adder 5) (set 1) + + + ad5ppbtba + Pink Panther Break The Bank (PR2304, QPSNPPBB) (Qps) (Adder 5) (set 2) + + + ad5ppbtbb + Pink Panther Break The Bank (PR2304, QPSPPPBB) (Qps) (Adder 5) (set 1) + + + ad5ppbtbc + Pink Panther Break The Bank (PR2304, QPSPPPBB) (Qps) (Adder 5) (set 2) + + + ad5ppc + Pink Panther (PR2267, MAZNPINK) (Mazooma) (Adder 5) (set 2) + + + ad5ppd + Pink Panther (MAZNPINK) (Mazooma) (Adder 5) (set 1) + + + ad5ppe + Pink Panther (MAZNPINK) (Mazooma) (Adder 5) (set 2) + + + ad5ppf + Pink Panther (PR2283, QPSPPINK) (Mazooma) (Adder 5) (set 1) + + + ad5ppg + Pink Panther (PR2283, QPSPPINK) (Mazooma) (Adder 5) (set 2) + + + ad5pph + Pink Panther (PR2267, MAZPPINK) (Mazooma) (Adder 5) + + + ad5ppi + Pink Panther (MAZPPINK) (Mazooma) (Adder 5) (set 1) + + + ad5ppj + Pink Panther (MAZPPINK) (Mazooma) (Adder 5) (set 2) + + + ad5rapid + Rapid Pay (Bellfruit) (Adder 5) (set 1) + + + ad5rapida + Rapid Pay (Bellfruit) (Adder 5) (set 2) + + + ad5rcash + Reel Cash (Mazooma) (Adder 5) (set 1) + + + ad5rcasha + Reel Cash (Mazooma) (Adder 5) (set 2) + + + ad5rroul + Reel Roulette (QPSNRLRO) (Mazooma) (Adder 5) + + + ad5rroula + Reel Roulette (QPSPRLRO) (Mazooma) (Adder 5) + + + ad5rroulb + Reel Roulette (MAZNRERO) (Mazooma) (Adder 5) + + + ad5rroulc + Reel Roulette (MAZPRERO) (Mazooma) (Adder 5) + + + ad5rsclb + Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 1) + + + ad5rsclba + Random Spinner Club (PR1826, BFGNRNDN) (Bellfruit) (Adder 5) (set 1) + + + ad5rsclbb + Random Spinner Club (PR1826, BFGNRNDN) (Bellfruit) (Adder 5) (set 2) + + + ad5rsclbc + Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 2) + + + ad5rsclbd + Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 3) + + + ad5rsclbe + Random Spinner Club (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 4) + + + ad5rsclbf + Random Spinner Club (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 1) + + + ad5rsclbg + Random Spinner Club (PR1826, BFGPRNDN) (Bellfruit) (Adder 5) (set 1) + + + ad5rsclbh + Random Spinner Club (PR1826, BFGPRNDN) (Bellfruit) (Adder 5) (set 2) + + + ad5rsclbi + Random Spinner Club (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 2) + + + ad5rsclbj + Random Spinner Club (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 3) + + + ad5rsnw + Random Spin 'n' Win (PR2226, MAZNRNDN) (Mazooma) (Adder 5) (set 1) + + + ad5rsnwa + Random Spin 'n' Win (PR2226, MAZNRNDN) (Mazooma) (Adder 5) (set 2) + + + ad5rsnwb + Random Spin 'n' Win (PR2226, MAZPRNDN) (Mazooma) (Adder 5) (set 1) + + + ad5rsnwc + Random Spin 'n' Win (PR2226, MAZPRNDN) (Mazooma) (Adder 5) (set 2) + + + ad5rspin + Random Spinner (PR1669, BFGNRNDN) (Bellfruit) (Adder 5) (set 1) + + + ad5rspinb + Random Spinner (PR1669, BFGPRNDN) (Bellfruit) (Adder 5) (set 2) + + + ad5rspinc + Random Spinner (Bellfruit) (Adder 5) (set 1) + + + ad5rsrm + Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 1) + + + ad5rsrma + Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 2) + + + ad5rsrr + Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 3) + + + ad5rsrra + Ronnie O'Sullivan's Rocket Money (Bellfruit) (Adder 5) (set 4) + + + ad5rwclb + Random Winner Club (PR1756, BFGNRWSX) (Bellfruit) (Adder 5) (set 1) + + + ad5rwclba + Random Winner Club (PR1756, BFGNRWSX) (Bellfruit) (Adder 5) (set 2) + + + ad5rwclbb + Random Winner Club (PR1756, BFGPRWSX) (Bellfruit) (Adder 5) (set 1) + + + ad5rwclbc + Random Winner Club (PR1756, BFGPRWSX) (Bellfruit) (Adder 5) (set 2) + + + ad5rwclbd + Random Winner Club (PR1757, BFGPRWCL) (Bellfruit) (Adder 5) + + + ad5rwclbe + Random Winner Club (PR1757, BFGNRWCL) (Bellfruit) (Adder 5) + + + ad5sslam + Super Slam (Bellfruit) (Adder 5) (set 1) + + + ad5sslama + Super Slam (Bellfruit) (Adder 5) (set 2) + + + ad5sslamb + Super Slam (Bellfruit) (Adder 5) (set 3) + + + ad5sslamc + Super Slam (Bellfruit) (Adder 5) (set 4) + + + ad5sslamd + Super Slam (Bellfruit) (Adder 5) (set 5) + + + ad5sslame + Super Slam (Bellfruit) (Adder 5) (set 6) + + + ad5sslamf + Super Slam (Bellfruit) (Adder 5) (set 7) + + + ad5tornc + Tornado Club (PR1629, 5.5, rv 8, BFGNTORD) (Bellfruit) (Adder 5) + + + ad5tornca + Tornado Club (PR1629, 5.8, rv 7, BFGNTORD) (Bellfruit) (Adder 5) + + + ad5torncb + Tornado Club (PR1629, 5.5, rv 8, BFGPTORD) (Bellfruit) (Adder 5) + + + ad5torncc + Tornado Club (PR1629, 5.8, rv 7, BFGPTORD) (Bellfruit) (Adder 5) + + + ad5torncd + Tornado Club (PR1627, 0.1, rv 1, BFGPTORN) (Bellfruit) (Adder 5) + + + ad5tornce + Tornado Club (PR1627, 0.1, rv 1, BFGNTORN) (Bellfruit) (Adder 5) + + + ad5vlv + Viva Las Vegas (Bellfruit) (Adder 5) (set 1) + + + ad5vlvb + Viva Las Vegas (Bellfruit) (Adder 5) (set 2) + + + ad5vlvc + Viva Las Vegas (Bellfruit) (Adder 5) (set 3) + + + ad5vlvd + Viva Las Vegas (Bellfruit) (Adder 5) (set 4) + + + ad5vlve + Viva Las Vegas (Bellfruit) (Adder 5) (set 5) + + + ad5vlvf + Viva Las Vegas (Bellfruit) (Adder 5) (set 6) + + + ad5vpa + Video Poker Ace (Bellfruit) (Adder 5) (set 1) + + + ad5vpaa + Video Poker Ace (Bellfruit) (Adder 5) (set 2) + + + ad5vpab + Video Poker Ace (Bellfruit) (Adder 5) (set 3) + + + ad5vpac + Video Poker Ace (Bellfruit) (Adder 5) (set 4) + + + adillor + Armadillo Racing (Rev. AM1 Ver.A) + + + adonis + Adonis (0200751V, NSW/ACT) + + + adults + Adults Only (Russia) (Extrema) + + + aerfboo2 + Aero Fighters (bootleg set 2) + + + aerfboot + Aero Fighters (bootleg set 1) + + + aeroboto + Aeroboto + + + aerofgt + Aero Fighters (World / USA + Canada / Korea / Hong Kong / Taiwan) (newer hardware) + + + aerofgtb + Aero Fighters (Taiwan / Japan, set 1) + + + aerofgtc + Aero Fighters (Taiwan / Japan, set 2) + + + aerofgts + Aero Fighters Special (Taiwan) + + + aerolitos + Aerolitos (Spanish bootleg of Asteroids) + + + afighter + Action Fighter (FD1089A 317-0018) + + + afire + Astro Fire + + + afm_10 + Attack From Mars (1.0) + + + afm_11 + Attack From Mars (1.1) + + + afm_113 + Attack From Mars (1.13) + + + afm_113b + Attack From Mars (1.13b) + + + afm_11u + Attack From Mars (1.1 Ultrapin) + + + aftor + Af-Tor + + + afv_l4 + Addams Family Values (Coin Dropper L-4) + + + agallet + Air Gallet (Europe) + + + agalleth + Air Gallet (Hong Kong) + + + agalletj + Akuu Gallet (Japan) + + + agalletk + Air Gallet (Korea) + + + agallett + Air Gallet (Taiwan) + + + agalletu + Air Gallet (USA) + + + agent777 + Agents 777 + + + agentx1 + Agent X (prototype, rev 1) + + + agentx2 + Agent X (prototype, rev 2) + + + agentx3 + Agent X (prototype, rev 3) + + + agentx4 + Agent X (prototype, rev 4) + + + agress + Agress - Missile Daisenryaku (Japan) + + + agressb + Agress - Missile Daisenryaku (English bootleg) + + + agsoccer + A.G. Soccer Ball + + + ainferno + Air Inferno (US) + + + ainfernoj + Air Inferno (Japan) + + + airass + Air Assault (World) + + + airattck + Air Attack (set 1) + + + airattcka + Air Attack (set 2) + + + airbustr + Air Buster: Trouble Specialty Raid Unit (World) + + + airbustrb + Air Buster: Trouble Specialty Raid Unit (bootleg) + + + airbustrj + Air Buster: Trouble Specialty Raid Unit (Japan) + + + airco22b + Air Combat 22 (Rev. ACS1 Ver.B, Japan) + + + aircomb + Air Combat (US) + + + aircombj + Air Combat (Japan) + + + airduel + Air Duel (Japan) + + + airlbios + Naomi Airline Pilots Deluxe Bios + + + airrace + Air Race (prototype) + + + airraid + Air Raid (encrypted) + + + airtrix + Air Trix + + + airwolf + Airwolf + + + airwolfa + Airwolf (US) + + + ajax + Ajax + + + ajaxj + Ajax (Japan) + + + akamaru + Panel & Variety Akamaru Q Jousyou Dont-R + + + aking + Angler King (AG1 Ver. A) + + + akiss + Mahjong Angel Kiss + + + akkanvdr + Akkanbeder (Ver 2.5J 1995/06/14) + + + akumajou + Akuma-Jou Dracula (Japan version P) + + + akumajoun + Akuma-Jou Dracula (Japan version N) + + + aladmdb + Aladdin (bootleg of Japanese Megadrive version) + + + albatross + Albatross (US Prototype?) + + + alcapone + Al Capone + + + alcat_l7 + Alley Cats (Shuffle) (L-7) + + + alcon + Alcon (US) + + + aleck64 + Aleck64 PIF BIOS + + + alexkidd + Alex Kidd: The Lost Stars (set 2, unprotected) + + + alexkidd1 + Alex Kidd: The Lost Stars (set 1, FD1089A 317-0021) + + + alg_bios + American Laser Games BIOS + + + algar_l1 + Algar (L-1) + + + ali + Ali + + + alibaba + Ali Baba and 40 Thieves + + + alibabab + Mustafa and 40 Thieves (bootleg) + + + alien + Alien: The Arcade Medal Edition + + + alien3 + Alien3: The Gun (World) + + + alien3u + Alien3: The Gun (US) + + + alienar + Alien Arena + + + alienaru + Alien Arena (Stargate upgrade) + + + aliencha + Alien Challenge (World) + + + alienchac + Alien Challenge (China) + + + aliencr + Alien Crush + + + alienfnt + Alien Front (Rev T) + + + alienfnta + Alien Front (Rev A) + + + alieninv + Alien Invasion + + + alieninvp2 + Alien Invasion Part II + + + aliens + Aliens (World set 1) + + + aliens2 + Aliens (World set 2) + + + aliens3 + Aliens (World set 3) + + + aliensa + Aliens (Asia) + + + aliensec + Alien Sector + + + aliensj + Aliens (Japan set 1) + + + aliensj2 + Aliens (Japan set 2) + + + alienstr + Alien Star + + + aliensu + Aliens (US) + + + aliensyn + Alien Syndrome (set 4, System 16B, unprotected) + + + aliensyn2 + Alien Syndrome (set 2, System 16A, FD1089A 317-0033) + + + aliensyn3 + Alien Syndrome (set 3, System 16B, FD1089A 317-0033) + + + aliensyn5 + Alien Syndrome (set 5, System 16A, FD1089B 317-0037) + + + aliensyn7 + Alien Syndrome (set 7, System 16B, MC-8123B 317-00xx) + + + aliensynj + Alien Syndrome (set 6, Japan, new, System 16B, FD1089A 317-0033) + + + aliensynjo + Alien Syndrome (set 1, Japan, old, System 16A, FD1089A 317-0033) + + + aligator + Alligator Hunt + + + aligatorun + Alligator Hunt (unprotected) + + + alleymas + Alley Master + + + allied + Allied System + + + alpha1v + Alpha One (Vision Electronics) + + + alphaho + Alpha Fighter / Head On + + + alpham2 + Alpha Mission II / ASO II - Last Guardian (NGM-007)(NGH-007) + + + alpham2p + Alpha Mission II / ASO II - Last Guardian (prototype) + + + alphamis + Alpha Mission + + + alphaone + Alpha One (prototype, 3 lives) + + + alphaonea + Alpha One (prototype, 5 lives) + + + alphaxz + The Alphax Z (Japan) + + + alpilota + Airline Pilots (Rev A) + + + alpiltdx + Airline Pilots Deluxe (Rev B) + + + alpine + Alpine Ski (set 1) + + + alpinea + Alpine Ski (set 2) + + + alpinerc + Alpine Racer (Rev. AR2 Ver.C) + + + alpinerd + Alpine Racer (Rev. AR2 Ver.D) + + + alpinesa + Alpine Surfer (Rev. AF2 Ver.A) + + + alpinr2a + Alpine Racer 2 (Rev. ARS2 Ver.A) + + + alpinr2b + Alpine Racer 2 (Rev. ARS2 Ver.B) + + + alpok_f6 + Alien Poker (L-6 French speech) + + + alpok_l2 + Alien Poker (L-2) + + + alpok_l6 + Alien Poker (L-6) + + + altair + Altair + + + altbeast + Altered Beast (set 8, 8751 317-0078) + + + altbeast2 + Altered Beast (set 2, MC-8123B 317-0066) + + + altbeast4 + Altered Beast (set 4, MC-8123B 317-0066) + + + altbeast5 + Altered Beast (set 5, FD1094 317-0069) + + + altbeast6 + Altered Beast (set 6, 8751 317-0076) + + + altbeastbl + Altered Beast (Datsu bootleg) + + + altbeastj + Juuouki (set 7, Japan, 8751 317-0077) + + + altbeastj1 + Juuouki (set 1, Japan, FD1094 317-0065) + + + altbeastj3 + Juuouki (set 3, Japan, FD1094 317-0068) + + + am_mg24 + Multi Game I (V.Ger 2.4) + + + am_mg3 + Multi Game III (V.Ger 3.5) + + + am_mg31i + Multi Game III (S.Ita 3.1) + + + am_mg33i + Multi Game III (S.Ita 3.3) + + + am_mg34i + Multi Game III (S.Ita 3.4) + + + am_mg35i + Multi Game III (S.Ita 3.5) + + + am_mg3a + Multi Game III (V.Ger 3.64) + + + amatelas + Sei Senshi Amatelass + + + amazon + Soldier Girl Amazon + + + amazonh + Amazon Hunt + + + ambush + Ambush + + + ambushh + Ambush (hack?) + + + ambushj + Ambush (Japan) + + + ambushv + Ambush (Volt Electronics) + + + amclink + Amcoe Link Control Box (Version 2.2) + + + amerdart + AmeriDarts (set 1) + + + amerdart2 + AmeriDarts (set 2) + + + amerdart3 + AmeriDarts (set 3) + + + america + America 1492 + + + amidar + Amidar + + + amidar1 + Amidar (older) + + + amidarb + Amidar (bootleg) + + + amidaro + Amidar (Olympia) + + + amidars + Amidar (Scramble hardware) + + + amidaru + Amidar (Stern Electronics) + + + amigo + Amigo + + + ampkr228 + American Poker II (iamp2 v28) + + + ampkr2b1 + American Poker II (bootleg, set 1) + + + ampkr2b2 + American Poker II (bootleg, set 2) + + + ampkr2b3 + American Poker II (bootleg, set 3) + + + ampkr2b4 + American Poker II (bootleg, set 4) + + + ampkr95 + American Poker 95 + + + ampoker2 + American Poker II + + + amspdwy + American Speedway (set 1) + + + amspdwya + American Speedway (set 2) + + + amusco + American Music Poker (V1.4) + + + amuse + Amuse (Version 50.08 IBA) + + + amuse1 + Amuse (Version 30.08 IBA) + + + ancienta + Ancient Atlantis (set 1) + + + ancientaa + Ancient Atlantis (set 2) + + + ancientab + Ancient Atlantis (set 3) + + + ancientac + Ancient Atlantis (set 4) + + + ancientad + Ancient Atlantis (set 5) + + + andretti + Mario Andretti + + + andretti4 + Mario Andretti (rev.T4) + + + androdun + Andro Dunos (NGM-049)(NGH-049) + + + andromed + Andromeda (Japan?) + + + andromep + Andromeda (set 1) + + + andromepa + Andromeda (set 2) + + + angelkds + Angel Kids (Japan) + + + anibonus + Animal Bonus (Version 1.8E Dual) + + + anibonusb1 + Animal Bonus (Version 1.7R, set 1) + + + anibonusb2 + Animal Bonus (Version 1.7LT, set 1) + + + anibonusd1 + Animal Bonus (Version 1.7R, set 2) + + + anibonusd2 + Animal Bonus (Version 1.7LT, set 2) + + + anibonuso + Animal Bonus (Version 1.5) + + + anibonuso2 + Animal Bonus (Version 1.4, set 1) + + + anibonuso3 + Animal Bonus (Version 1.4, set 2) + + + anibonusv1 + Animal Bonus (Version 1.8R Dual) + + + anibonusv2 + Animal Bonus (Version 1.8LT Dual) + + + anibonusxo + Animal Bonus (Version 1.50XT) + + + anibonusxo2 + Animal Bonus (Version 1.40XT, set 1) + + + anibonusxo3 + Animal Bonus (Version 1.40XT, set 2) + + + animalc + Animal Catch + + + animaljr + Exciting Animal Land Jr. (USA) + + + animaljrj + Waiwai Animal Land Jr. (Japan) + + + animaljrs + Animalandia Jr. (Spanish) + + + anithunt + Animal Treasure Hunt (Version 1.9R, set 1) + + + anithuntd1 + Animal Treasure Hunt (Version 1.9R, set 2) + + + anithunto + Animal Treasure Hunt (Version 1.7) + + + anithunto2 + Animal Treasure Hunt (Version 1.5) + + + anithuntv1 + Animal Treasure Hunt (Version 1.9R Dual) + + + anmlbskt + Animal Basket + + + antar + Antar (set 1) + + + antar2 + Antar (set 2) + + + antcleo + Antony and Cleopatra (10177211, Malaysia) + + + anteater + Anteater + + + anteaterg + Ameisenbaer (German) + + + anteateruk + The Anteater (UK) + + + antiairc + Anti-Aircraft [TTL] + + + aodk + Aggressors of Dark Kombat / Tsuukai GANGAN Koushinkyoku (ADM-008)(ADH-008) + + + aof + Art of Fighting / Ryuuko no Ken (NGM-044)(NGH-044) + + + aof2 + Art of Fighting 2 / Ryuuko no Ken 2 (NGM-056) + + + aof2a + Art of Fighting 2 / Ryuuko no Ken 2 (NGH-056) + + + aof3 + Art of Fighting 3 - The Path of the Warrior / Art of Fighting - Ryuuko no Ken Gaiden + + + aof3k + Art of Fighting 3 - The Path of the Warrior (Korean release) + + + aoh + Age Of Heroes - Silkroad 2 (v0.63 - 2001/02/07) + + + apache3 + Apache 3 + + + apache3a + Apache 3 (Kana Corporation license) + + + apb + APB - All Points Bulletin (rev 7) + + + apb1 + APB - All Points Bulletin (rev 1) + + + apb2 + APB - All Points Bulletin (rev 2) + + + apb3 + APB - All Points Bulletin (rev 3) + + + apb4 + APB - All Points Bulletin (rev 4) + + + apb5 + APB - All Points Bulletin (rev 5) + + + apb6 + APB - All Points Bulletin (rev 6) + + + apbf + APB - All Points Bulletin (French) + + + apbg + APB - All Points Bulletin (German) + + + aplatoon + Platoon V.?.? US + + + apollo13 + Apollo 13 + + + aponow + Apocaljpse Now (bootleg of Rescue) + + + apparel + Apparel Night (Japan 860929) + + + apple10 + Apple 10 (Ver 1.21) + + + appoooh + Appoooh + + + aquajack + Aqua Jack (World) + + + aquajackj + Aqua Jack (Japan) + + + aquajacku + Aqua Jack (US) + + + aquajet + Aqua Jet (Rev. AJ2 Ver.B) + + + aqualand + Aqualand + + + aquarium + Aquarium (Japan) + + + aquarush + Aqua Rush (Japan, AQ1/VER.A1) + + + ar_airh + SportTime Table Hockey (Arcadia, set 1, V 2.1) + + + ar_airh2 + SportTime Table Hockey (Arcadia, set 2) + + + ar_argh + Aaargh (Arcadia) + + + ar_bios + Arcadia System BIOS + + + ar_blast + Blastaball (Arcadia, V 2.1) + + + ar_bowl + SportTime Bowling (Arcadia, V 2.1) + + + ar_dart + World Darts (Arcadia, set 1, V 2.1) + + + ar_dart2 + World Darts (Arcadia, set 2) + + + ar_dlta + Delta Command (Arcadia) + + + ar_fast + Magic Johnson's Fast Break (Arcadia, V 2.8) + + + ar_fasta + Magic Johnson's Fast Break (Arcadia, V 2.7) + + + ar_ldrb + Leader Board (Arcadia, set 1, V 2.5) + + + ar_ldrba + Leader Board (Arcadia, set 2, V 2.4) + + + ar_ldrbb + Leader Board (Arcadia, set 3) + + + ar_ninj + Ninja Mission (Arcadia, set 1, V 2.5) + + + ar_ninj2 + Ninja Mission (Arcadia, set 2) + + + ar_pm + Pharaohs Match (Arcadia) + + + ar_rdwr + RoadWars (Arcadia, V 2.3) + + + ar_sdwr + Sidewinder (Arcadia, set 1, V 2.1) + + + ar_sdwr2 + Sidewinder (Arcadia, set 2) + + + ar_socc + World Trophy Soccer (Arcadia, V 3.0) + + + ar_spot + Spot (Arcadia, V 2.0) + + + ar_sprg + Space Ranger (Arcadia, V 2.0) + + + ar_xeon + Xenon (Arcadia, V 2.3) + + + arabfgt + Arabian Fight (World) + + + arabfgtj + Arabian Fight (Japan) + + + arabfgtu + Arabian Fight (US) + + + arabian + Arabian + + + arabiana + Arabian (Atari) + + + arabianm + Arabian Magic (Ver 1.0O 1992/07/06) + + + arabianmj + Arabian Magic (Ver 1.0J 1992/07/06) + + + arabianmu + Arabian Magic (Ver 1.0A 1992/07/06) + + + arac6000 + Super Six Plus II English Mark Darts + + + aracnis + Aracnis (bootleg of Scorpion on Moon Cresta hardware) + + + arbalest + Arbalester + + + arcadecl + Arcade Classics (prototype) + + + arcadian + Arcadia (NMK) + + + archrivl + Arch Rivals (rev 4.0 6/29/89) + + + archrivla + Arch Rivals (rev 2.0 5/03/89) + + + archrivlb + Arch Rivals (rev 2.0 5/03/89, 8-way Joystick bootleg) + + + arctthnd + Arctic Thunder (v1.002) + + + arctthndult + Ultimate Arctic Thunder + + + arcwins + Arctic Wins (4XF5227H03, USA) + + + area51 + Area 51 (R3000) + + + area51a + Area 51 (Atari Games license) + + + area51mx + Area 51 / Maximum Force Duo v2.0 + + + area51t + Area 51 (Time Warner license) + + + area88 + Area 88 (Japan) + + + area88r + Area 88 (Japan Resale Ver.) + + + arena + Arena + + + arescue + Air Rescue + + + argus + Argus + + + argusg + Argus (Gottlieb, prototype) + + + arian + Arian Mission + + + arist_l1 + Aristocrat (Shuffle) (L-1) + + + aristmk5 + MKV Set/Clear Chips (USA) + + + aristmk6 + Aristocrat MK6 Base (15011025, Malaysia) + + + ark1ball + Arkanoid (bootleg with MCU, harder) + + + arkangc + Arkanoid (Game Corporation bootleg, set 1) + + + arkangc2 + Arkanoid (Game Corporation bootleg, set 2) + + + arkanoid + Arkanoid (World) + + + arkanoidj + Arkanoid (Japan) + + + arkanoidjb + Arkanoid (bootleg with MCU, set 1) + + + arkanoidjb2 + Arkanoid (bootleg with MCU, set 2) + + + arkanoidjo + Arkanoid (Japan, older) + + + arkanoidu + Arkanoid (US) + + + arkanoiduo + Arkanoid (US, older) + + + arkarea + Ark Area + + + arkatayt + Arkanoid (Tayto bootleg) + + + arkatour + Tournament Arkanoid (US) + + + arkbloc2 + Block (Game Corporation bootleg, set 2) + + + arkbloc3 + Block (Game Corporation bootleg, set 3) + + + arkblock + Block (Game Corporation bootleg, set 1) + + + arkgcbl + Arkanoid (bootleg on Block hardware, set 1) + + + arkgcbla + Arkanoid (bootleg on Block hardware, set 2) + + + arknoid2 + Arkanoid - Revenge of DOH (World) + + + arknoid2b + Arkanoid - Revenge of DOH (Japan bootleg) + + + arknoid2j + Arkanoid - Revenge of DOH (Japan) + + + arknoid2u + Arkanoid - Revenge of DOH (US) + + + arkretrn + Arkanoid Returns (Ver 2.02O 1997/02/10) + + + arkretrnj + Arkanoid Returns (Ver 2.02J 1997/02/10) + + + arktayt2 + Arkanoid (Tayto bootleg, harder) + + + arlingtn + Arlington Horse Racing (v1.21-D) + + + armchmp2 + Arm Champs II v2.6 + + + armchmp2o + Arm Champs II v1.7 + + + armedf + Armed Formation + + + armedff + Armed Formation (Fillmore license) + + + armora + Armor Attack + + + armorap + Armor Attack (prototype) + + + armorar + Armor Attack (Rock-Ola) + + + armorcar + Armored Car (set 1) + + + armorcar2 + Armored Car (set 2) + + + armwar + Armored Warriors (Euro 941024) + + + armwar1d + Armored Warriors (Euro 941011 Phoenix Edition) (bootleg) + + + armwara + Armored Warriors (Asia 940920) + + + armwarr1 + Armored Warriors (Euro 941011) + + + armwaru + Armored Warriors (USA 941024) + + + armwaru1 + Armored Warriors (USA 940920) + + + armwrest + Arm Wrestling + + + as_acp + unknown Astra 'ACP' (Astra, V403) + + + as_bbr + Bullion Bars (Astra, V101) + + + as_bbra + Bullion Bars (Astra, V102,alt) + + + as_bbrb + Bullion Bars (Astra, V201) + + + as_bbrc + Bullion Bars (Astra, V003) + + + as_bbrd + Bullion Bars (Astra, V102) + + + as_bbre + Bullion Bars (Astra, V105) + + + as_bbrf + Bullion Bars (Astra, V004) + + + as_big10 + Big 10 (Astra, V500) + + + as_big10a + Big 10 (Astra, V503) + + + as_big10b + Big 10 (Astra, V507) + + + as_big10c + Big 10 (Astra, V601) + + + as_big10d + Big 10 (Astra, V605) + + + as_big15 + Big 15 (Astra, V101) + + + as_bigcs + Big Cash (Astra, V101) + + + as_bigcsa + Big Cash (Astra, V103) + + + as_bigtm + Big Time (Astra, V003) + + + as_celeb + Celebration (Astra, V100) + + + as_celeba + Celebration (Astra, V101) + + + as_celebb + Celebration (Astra, V201) + + + as_colmn + Colour Of Money (Astra, V200) + + + as_colmna + Colour Of Money (Astra, V107) + + + as_colmnb + Colour Of Money (Astra, V108) + + + as_colmnc + Colour Of Money (Astra, V109) + + + as_colmnd + Colour Of Money (Astra, V908) + + + as_cshah + Cash Ahoi (Lowen, V105) + + + as_cshcs + Cash Castle (Lowen, V006) + + + as_csv + Slot Slant (?) (Astra, V202) + + + as_dblcs + Double Cash (Astra, V110) + + + as_dblcsa + Double Cash (Astra, V112) + + + as_dblcsb + Double Cash (Astra, V108) + + + as_dblcsc + Double Cash (Astra, V109) + + + as_dblcsd + Double Cash (Astra, V106) + + + as_dblcse + Double Cash (Astra, V102) + + + as_dblcsf + Double Cash (Astra, V100) + + + as_dblcsg + Double Cash (Astra, V100, alt) + + + as_dblcsh + Double Cash (Astra, V004) + + + as_djp + Double Jackpot (Astra, V107) + + + as_djpa + Double Jackpot (Astra, V004) + + + as_djpb + Double Jackpot (Astra, V109) + + + as_fortn + Fortune Teller (Astra, V009) + + + as_gof + Game Of Fortune (Lowen, V208) + + + as_hc + Hokey Cokey (Astra, V107) + + + as_hca + Hokey Cokey (Astra, V109) + + + as_hcb + Hokey Cokey (Astra, V110) + + + as_hcc + Hokey Cokey (Astra, V111) + + + as_hcd + Hokey Cokey (Astra, V909) + + + as_hog + Hearts Of Gold (Astra, V002) + + + as_hr + Hot Reel (Astra, V004) + + + as_hxr + Hot Cross Run (Astra, V108) + + + as_jackb + Jackpot Bell (Astra, V104) + + + as_jjive + Jungle Jive (Astra, V107) + + + as_jjivea + Jungle Jive (Astra, V106) + + + as_jjiveb + Jungle Jive (Astra, V104) + + + as_jjivec + Jungle Jive (Astra, V102) + + + as_jjived + Jungle Jive (Astra, V101) + + + as_jjivee + Jungle Jive (Astra, V101, alt) + + + as_jjivef + Jungle Jive (Astra, V004) + + + as_jjiveg + Jungle Jive (Astra, V005) + + + as_jmpj + Jumping Jackpots (Astra, V100) + + + as_jmpja + Jumping Jackpots (Astra, V102) + + + as_jolly + Jolly Roger (Astra, V103) + + + as_jpx + Jackpot X (Astra, V100) + + + as_jpxa + Jackpot X (Astra, V101) + + + as_jpxb + Jackpot X (Astra, V002) + + + as_kingc + King Cash (Astra, V106) + + + as_kingca + King Cash (Astra, V103) + + + as_koc + King Of Clubs (Astra, V200) + + + as_koca + King Of Clubs (Astra, V101) + + + as_lbt + Little Big 10 (Astra, V103) + + + as_lbta + Little Big 10 (Astra, V102) + + + as_ldl + Little Devils (Astra, V700) + + + as_ldla + Little Devils (Astra, V600) + + + as_ldlb + Little Devils (Astra, V312) + + + as_ldlc + Little Devils (Astra, V003) + + + as_ldld + Little Devils (Astra, V102) + + + as_ldle + Little Devils (Astra, V103) + + + as_letsp + Let's Party (Astra, V904) + + + as_mp + Mission Possible (Lowen, V118) + + + as_mp2 + Mission Possible 2 (Lowen, V114) + + + as_otr + Over The Rainbow (Astra, V104) + + + as_otra + Over The Rainbow (Astra, V102) + + + as_party + Party Time (Astra, V105) + + + as_partya + Party Time (Astra, V110) + + + as_partyb + Party Time (Astra, V112) + + + as_partyc + Party Time (Astra, V206) + + + as_partyd + Party Time (Astra, V401) + + + as_partye + Party Time (Astra, V907) + + + as_partyf + Party Time (Astra, V906) + + + as_pb + Piggy Banking (Astra, V105) + + + as_pharg + Pharaoh's Gold (Astra, V005) + + + as_pharga + Pharaoh's Gold (Astra, V101) + + + as_phargb + Pharaoh's Gold (Astra, V102) + + + as_phargc + Pharaoh's Gold (Astra, V104) + + + as_phargd + Pharaoh's Gold (Astra, V106) + + + as_pharge + Pharaoh's Gold (Astra, V107) + + + as_pia + Pay It Again (Astra, V202) + + + as_piaa + Pay It Again (Astra, V206) + + + as_piab + Pay It Again (Astra, V904) + + + as_ptf + Party Fruits (Astra, V102) + + + as_ptfa + Party Fruits (Astra, V803) + + + as_ptfb + Party Fruits (Astra, V905) + + + as_ptfc + Party Fruits (Astra) + + + as_rab + Ring A Bell (Astra, V105) + + + as_raba + Ring A Bell (Astra, V106) + + + as_rabb + Ring A Bell (Astra, V107) + + + as_rabc + Ring A Bell (Astra, V104) + + + as_rbg + River Boat Gambler (Astra, V304) + + + as_rbga + River Boat Gambler (Astra, V303) + + + as_rbgb + River Boat Gambler (Astra, V104) + + + as_rbgc + River Boat Gambler (Astra, V102) + + + as_rbgd + River Boat Gambler (Astra, V101) + + + as_rbge + River Boat Gambler (Astra, V008) + + + as_rbglo + River Boat Gambler (Lowen, V106) + + + as_rox + Roll X (Astra, V006) + + + as_rtr + Ready To Roll (Astra, V101) + + + as_rtra + Ready To Roll (Astra, V101, alt 1) + + + as_rtrb + Ready To Roll (Astra, V101, alt 2) + + + as_rtrc + Ready To Roll (Astra, V101, alt 3) + + + as_rtrd + Ready To Roll (Astra, V100, ) + + + as_rtre + Ready To Roll (Astra, V100, alt) + + + as_rtrf + Ready To Roll (Astra, V200) + + + as_rtrg + Ready To Roll (Astra, V200, alt) + + + as_rtrh + Ready To Roll (Astra, V202) + + + as_siu + Step It Up (Astra, V202) + + + as_siua + Step It Up (Astra, V203) + + + as_sld + Super Little Devil (Astra, V700) + + + as_slda + Super Little Devil (Astra, V600) + + + as_sldb + Super Little Devil (Astra, V500) + + + as_sldc + Super Little Devil (Astra, V400) + + + as_sldd + Super Little Devil (Astra, V200) + + + as_slde + Super Little Devil (Astra, V101) + + + as_sltcl + Slots Classic (?) (Astra) + + + as_srb + Super Ring a Bell (Astra, V004) + + + as_srba + Super Ring a Bell (Astra, V100) + + + as_srbb + Super Ring a Bell (Astra, V101) + + + as_srbc + Super Ring a Bell (Astra, V201) + + + as_srbd + Super Ring a Bell (Astra, V202) + + + as_srbe + Super Ring a Bell (Astra, V203) + + + as_stp + Stampede (Astra, V103) + + + as_stpa + Stampede (Astra, V102) + + + as_stpb + Stampede (Astra, V105) + + + as_tbl + Triple Bells (Astra, V104) + + + as_tbla + Triple Bells (Astra, V105) + + + as_tblb + Triple Bells (Astra, V106) + + + as_tblc + Triple Bells (Astra, V103) + + + as_tbld + Triple Bells (Astra, V304) + + + as_tble + Triple Bells (Astra, V303) + + + as_tblf + Triple Bells (Astra, V301) + + + as_td + Twin Dragons (Astra, V103) + + + as_tem + Temptation (Astra, V101) + + + as_tema + Temptation (Astra, V006) + + + as_topsl + Top Slot (Astra, V103) + + + as_topsla + Top Slot (Astra, V104) + + + as_topslb + Top Slot (Astra, V201) + + + as_topslc + Top Slot (Astra, V203) + + + as_topsld + Top Slot (Astra, V205) + + + as_twp + Twin Pots (Astra, V106) + + + as_twpa + Twin Pots (Astra, V104) + + + as_vcv + Viva Cash Vegas (Astra, V005) + + + as_vcva + Viva Cash Vegas (Astra, V107) + + + as_vcvb + Viva Cash Vegas (Astra, V106) + + + as_vcvc + Viva Cash Vegas (Astra, V104) + + + as_vcvd + Viva Cash Vegas (Astra, V102) + + + as_vcve + Viva Cash Vegas (Astra, V101) + + + as_vn + Vegas Nights (Astra, V205) + + + as_ws + Win Streak (Astra, V100) + + + as_ww + Wicked Willy (Astra, V203) + + + as_wwa + Wicked Willy (Astra, V204) + + + as_wwb + Wicked Willy (Astra, V205) + + + as_wwc + Wicked Willy (Astra, V104) + + + as_wwd + Wicked Willy (Astra, V103) + + + as_wwe + Wicked Willy (Astra, V102) + + + ashnojoe + Ashita no Joe (Japan) + + + ashura + Ashura Blaster (World) + + + ashuraj + Ashura Blaster (Japan) + + + ashurau + Ashura Blaster (US) + + + asideral + Ataque Sideral (Spanish bootleg of UniWar S) + + + asndynmt + Asian Dynamite + + + aso + ASO - Armored Scrum Object + + + asoccer + American Soccer + + + assault + Assault (Rev B) + + + assaultj + Assault (Japan) + + + assaultp + Assault Plus (Japan) + + + astannie + Asteroid Annie and the Aliens + + + astdelux + Asteroids Deluxe (rev 3) + + + astdelux1 + Asteroids Deluxe (rev 1) + + + astdelux2 + Asteroids Deluxe (rev 2) + + + asterix + Asterix (ver EAD) + + + asterixaad + Asterix (ver AAD) + + + asterixeaa + Asterix (ver EAA) + + + asterixeac + Asterix (ver EAC) + + + asterixj + Asterix (ver JAD) + + + asterock + Asterock (Sidam bootleg of Asteroids) + + + asterockv + Asterock (Videotron bootleg of Asteroids) + + + asteroid + Asteroids (rev 4) + + + asteroid1 + Asteroids (rev 1) + + + asteroid2 + Asteroids (rev 2) + + + asteroidb + Asteroids (bootleg on Lunar Lander hardware) + + + astinvad + Astro Invader + + + astoneag + Stone Age (Astro, Ver. ENG.03.A) + + + astorm + Alien Storm (World, 2 Players, FD1094 317-0154) + + + astorm3 + Alien Storm (World, 3 Players, FD1094 317-0148) + + + astormb2 + Alien Storm (bootleg, set 2) + + + astormbl + Alien Storm (bootleg, set 1) + + + astormj + Alien Storm (Japan, 2 Players, FD1094 317-0146) + + + astormu + Alien Storm (US, 3 Players, FD1094 317-0147) + + + astrass + Astra SuperStars (J 980514 V1.002) + + + astrians + Astrians (clone of Swarm) + + + astrob + Astro Blaster (version 3) + + + astrob1 + Astro Blaster (version 1) + + + astrob2 + Astro Blaster (version 2) + + + astrob2a + Astro Blaster (version 2a) + + + astrobg + Astro Blaster (German) + + + astrof + Astro Fighter (set 1) + + + astrof2 + Astro Fighter (set 2) + + + astrof3 + Astro Fighter (set 3) + + + astrofl + Astro Flash (Japan) + + + astron + Astron Belt + + + astronp + Astron Belt (Pioneer LDV1000) + + + astropal + Astropal + + + astrowar + Astro Wars + + + astyanax + The Astyanax + + + asuka + Asuka & Asuka (World) + + + asukaj + Asuka & Asuka (Japan) + + + asurabld + Asura Blade - Sword of Dynasty (Japan) + + + asurabus + Asura Buster - Eternal Warriors (Japan) + + + asylum + Asylum (prototype) + + + atamanot + Computer Quiz Atama no Taisou (Japan) + + + atarians + The Atarians + + + atarifb + Atari Football (revision 2) + + + atarifb1 + Atari Football (revision 1) + + + atarifb4 + Atari Football (4 players) + + + atarisy1 + Atari System 1 BIOS + + + ataxx + Ataxx (set 1) + + + ataxxa + Ataxx (set 2) + + + ataxxe + Ataxx (Europe) + + + ataxxj + Ataxx (Japan) + + + atehate + Athena no Hatena ? + + + atetris + Tetris (set 1) + + + atetrisa + Tetris (set 2) + + + atetrisb + Tetris (bootleg set 1) + + + atetrisb2 + Tetris (bootleg set 2) + + + atetrisc + Tetris (cocktail set 1) + + + atetrisc2 + Tetris (cocktail set 2) + + + athena + Athena + + + atla_ltd + Atlantis (LTD) + + + atlantca + Atlantica (Russia) (Atronic) (set 1) + + + atlantcaa + Atlantica (Russia) (Atronic) (set 2) + + + atlantip + Atlantis + + + atlantis + Battle of Atlantis (set 1) + + + atlantis2 + Battle of Atlantis (set 2) + + + atlantisb + Battle of Atlantis (bootleg) + + + atlantol + Atlant Olimpic + + + atleta + Atleta + + + atluspsx + Atlus PSX + + + atombjt + Atom (bootleg of Bombjack Twin) + + + atomboy + Atomic Boy (revision B) + + + atomboya + Atomic Boy (revision A) + + + atomicp + Atomic Point (Korea) + + + atompunk + Atomic Punk (US) + + + atpsx + Atari PSX + + + atronic + Atronic SetUp/Clear Chips (Russia, set 1) + + + atronica + Atronic SetUp/Clear Chips (Russia, set 2) + + + attack + Attack + + + attackfc + Attack Force + + + attckexd + Attack [TTL] + + + attckufo + Attack Ufo + + + attila + Attila The Hun + + + atvtrack + ATV Track (set 1) + + + atvtracka + ATV Track (set 2) + + + atworld + Around The World (Version 1.4R CGA) + + + atworldd1 + Around The World (Version 1.3R CGA) + + + atworlde1 + Around The World (Version 1.3E CGA) + + + aurail + Aurail (set 3, US, unprotected) + + + aurail1 + Aurail (set 2, World, FD1089B 317-0168) + + + aurailj + Aurail (set 1, Japan, FD1089A 317-0167) + + + ausfache + Akatsuki Blitzkampf Ausf Achse + + + aust201 + Austin Powers (2.01) + + + aust300 + Austin Powers (3.00) + + + aust301 + Austin Powers (3.01) + + + austin + Austin Powers (3.02) + + + austinf + Austin Powers (France) + + + austing + Austin Powers (Germany) + + + austini + Austin Powers (Italy) + + + austnew + Austin Powers (ARM7 Sound Board) + + + autmoon + Autumn Moon (1VXFC5488, New Zealand) + + + automat + Automat (bootleg of Robocop) + + + av2mj1bb + AV2Mahjong No.1 Bay Bridge no Seijo (Japan) + + + av2mj2rg + AV2Mahjong No.2 Rouge no Kaori (Japan) + + + avalnche + Avalanche + + + avalon13 + The Key Of Avalon 1.3 - Chaotic Sabbat (client) (Rev C) (GDT-0010C) + + + avalon20 + The Key Of Avalon 2.0 - Eutaxy and Commandment (client) (Rev B) (GDT-0017B) + + + avalons + The Key Of Avalon - The Wizard Master (server) (Rev C) (GDT-0005C) + + + avefenix + Ave Fenix (Spanish bootleg of Phoenix) + + + avenger + Avenger [TTL] + + + avengers + Avengers (US set 1) + + + avengers2 + Avengers (US set 2) + + + avengrgs + Avengers In Galactic Storm (US) + + + avengrgsj + Avengers In Galactic Storm (Japan) + + + avsp + Alien vs. Predator (Euro 940520) + + + avspa + Alien vs. Predator (Asia 940520) + + + avspd + Alien vs. Predator (Euro 940520 Phoenix Edition) (bootleg) + + + avsph + Alien vs. Predator (Hispanic 940520) + + + avspirit + Avenging Spirit + + + avspj + Alien vs. Predator (Japan 940520) + + + avspu + Alien vs. Predator (USA 940520) + + + avtbingo + Arrow Bingo + + + avtnfl + NFL (ver 109) + + + avtsym14 + Symbols (ver 1.4) + + + avtsym25 + Symbols (ver 2.5) + + + awbios + Atomiswave Bios + + + aztarac + Aztarac + + + azumanga + Azumanga Daioh Puzzle Bobble (GDL-0018) + + + azurian + Azurian Attack + + + b83catms + Cat & Mouse (Bellfruit) (System 83) + + + b83cops + Cops & Robbers (Bellfruit) (System 83) + + + b85bdclb + Big Deal Club (System 85, set 1) + + + b85bdclba + Big Deal Club (System 85, set 2) + + + b85bdclbb + Big Deal Club (System 85, set 3) + + + b85cb7p + Bar Sevens (Bellfruit) (Protocol) (System 85) + + + b85cblit + Cash Blitz (System 85, set 1) + + + b85cblita + Cash Blitz (System 85, set 2) + + + b85cblitb + Cash Blitz (System 85, set 3) + + + b85cexpl + Cash Explosion (System 85) + + + b85clbpm + Club Premier (System 85) + + + b85cops + Cops 'n' Robbers (Dutch) (Bellfruit) (System 85) + + + b85dbldl + Double Dealer (System 85, set 1) + + + b85dbldla + Double Dealer (System 85, set 2) + + + b85dbldlb + Double Dealer (System 85, set 3) + + + b85disc + Discovey (Dutch) (Bellfruit) (System 85) + + + b85hilo + Hi Lo Silver (System 85, set 1) + + + b85hiloa + Hi Lo Silver (System 85, set 2) + + + b85jkwld + Jokers Wild (Dutch) (System 85) + + + b85jpclb + Jackpot Club (System 85, set 1) + + + b85jpclba + Jackpot Club (System 85, set 2) + + + b85jpclbb + Jackpot Club (System 85, set 3) + + + b85jpclbc + Jackpot Club (System 85, set 4) + + + b85koc + King of Clubs (Bellfruit) (System 85, set 1) + + + b85koca + King of Clubs (Bellfruit) (System 85, set 2) + + + b85luckd + Lucky Dice (Dutch) (System 85) + + + b85lucky + Lucky Cards (Dutch) (System 85) + + + b85potp + Pick Of The Pack (System 85) + + + b85ritz + The Ritz (System 85, set 1) + + + b85ritza + The Ritz (System 85, set 2) + + + b85ritzb + The Ritz (System 85, set 3) + + + b85ritzc + The Ritz (System 85, set 4) + + + b85ritzd + The Ritz (System 85, set 5) + + + b85royal + The Royal (System 85) + + + b85scard + Supercards (Dutch, Game Card 39-340-271?) (System 85) + + + b85sngam + Super Nudge Gambler (System 85) + + + baboshka + Baboshka (Russia) (Atronic) + + + babydad + Baby Dado + + + babypac + Baby Pac-Man (set 1) + + + babypac2 + Baby Pac-Man (set 2) + + + babypkr + Baby Poker + + + backfire + Backfire! (set 1) + + + backfirea + Backfire! (set 2) + + + backfirt + Back Fire (Tecmo, bootleg) + + + backgamn + Backgammon + + + baddudes + Bad Dudes vs. Dragonninja (US) + + + badgirls + Bad Girls + + + badlands + Bad Lands + + + badlandsb + Bad Lands (bootleg) + + + badlandsb2 + Bad Lands (bootleg, alternate) + + + bagman + Bagman + + + bagmanf + Bagman (bootleg on Crazy Kong hardware) + + + bagmanm2 + Bagman (bootleg on Moon Cresta hardware, set 2) + + + bagmanmc + Bagman (bootleg on Moon Cresta hardware, set 1) + + + bagmans + Bagman (Stern Electronics, set 1) + + + bagmans2 + Bagman (Stern Electronics, set 2) + + + bagnard + Le Bagnard (set 1) + + + bagnarda + Le Bagnard (set 2) + + + bagnardi + Le Bagnard (Itisa, Spain) + + + bakatono + Bakatonosama Mahjong Manyuuki (MOM-002)(MOH-002) + + + bakubaku + Baku Baku Animal (J 950407 V1.000) + + + bakubrkr + Bakuretsu Breaker + + + bakuhatu + Mahjong Bakuhatsu Junjouden (Japan) + + + bakutotu + Bakutotsu Kijuutei + + + balcube + Bal Cube + + + ballbomb + Balloon Bomber + + + ballboy + Ball Boy + + + ballbros + Balloon Brothers + + + balonfgt + Vs. Balloon Fight (set BF4 A-3) + + + baluba + Baluba-louk no Densetsu (Japan) + + + bam2 + Bust a Move 2 (Japanese ROM ver. 1999/07/17 10:00:00) + + + bananadr + Mahjong Banana Dream [BET] (Japan 891124) + + + bananas + Bananas Go Bahamas (set 1) + + + bananasa + Bananas Go Bahamas (set 2) + + + banbam + BanBam + + + bandido + Bandido + + + bang + Bang! + + + bangball + Bang Bang Ball (v1.05) + + + bangbead + Bang Bead + + + bangj + Gun Gabacho (Japan) + + + bankp + Bank Panic + + + bankrob + Bank Robbery (Ver. 3.32) + + + bankroba + Bank Robbery (Ver. 2.00) + + + baraduke + Baraduke + + + barbball + Barroom Baseball (prototype) + + + barbwire + Barb Wire + + + barline + Barline (Japan?) + + + barra_l1 + Barracora (L-1) + + + barricad + Barricade + + + barrier + Barrier + + + baryon + Baryon - Future Assault + + + basebal2 + Baseball: The Season II + + + bass + Sega Bass Fishing (Japan) + + + bassang2 + Bass Angler 2 (GE865 VER. JAA) + + + bassangl + Bass Angler (GE765 VER. JAA) + + + basschal + Sega Bass Fishing Challenge + + + bassdx + Sega Bass Fishing Deluxe (Japan) + + + batcir + Battle Circuit (Euro 970319) + + + batcira + Battle Circuit (Asia 970319) + + + batcird + Battle Circuit (Euro 970319 Phoenix Edition) (bootleg) + + + batcirj + Battle Circuit (Japan 970319) + + + batlball + Battle Balls (Germany) + + + batlballa + Battle Balls (Hong Kong) + + + batlballe + Battle Balls (Hong Kong, earlier) + + + batlballu + Battle Balls (US) + + + batlbubl + Battle Bubble (v2.00) + + + batlgear + Battle Gear + + + batlgr2 + Battle Gear 2 (v2.04J) + + + batlgr2a + Battle Gear 2 (v2.01J) + + + batlzone + Battle Zone (bootleg of Mayday) + + + batman + Batman + + + batman2 + Batman Part 2 + + + batmanf + Batman Forever (4.0) + + + batmanf3 + Batman Forever (3.0) + + + batmanfr + Batman Forever (JUE 960507 V1.000) + + + batrider + Armed Police Batrider (Europe) (Fri Feb 13 1998) + + + batriderc + Armed Police Batrider (China) (Fri Feb 13 1998) + + + batriderj + Armed Police Batrider (Japan, B version) (Fri Feb 13 1998) + + + batriderja + Armed Police Batrider (Japan, older version) (Mon Dec 22 1997) + + + batriderk + Armed Police Batrider (Korea) (Fri Feb 13 1998) + + + batridert + Armed Police Batrider (Taiwan) (Mon Dec 22 1997) + + + batrideru + Armed Police Batrider (USA) (Fri Feb 13 1998) + + + batsugun + Batsugun + + + batsuguna + Batsugun (older set) + + + batsugunsp + Batsugun - Special Version + + + battlane + Battle Lane! Vol. 5 (set 1) + + + battlane2 + Battle Lane! Vol. 5 (set 2) + + + battlane3 + Battle Lane! Vol. 5 (set 3) + + + battlcry + Battlecry + + + battlera + Battle Rangers (World) + + + battles + Battles + + + battlex + Battle Cross + + + battlnts + Battlantis (program code G) + + + battlntsa + Battlantis (program code F) + + + battlntsj + Battlantis (Japan, program code E) + + + battroad + The Battle-Road + + + bayroute + Bay Route (set 3, World, FD1094 317-0116) + + + bayroute1 + Bay Route (set 1, US, unprotected) + + + bayrouteb1 + Bay Route (encrypted, protected bootleg) + + + bayrouteb2 + Bay Route (Datsu bootleg) + + + bayroutej + Bay Route (set 2, Japan, FD1094 317-0115) + + + baywatch + Baywatch + + + bbakraid + Battle Bakraid - Unlimited Version (USA) (Tue Jun 8 1999) + + + bbakraidj + Battle Bakraid - Unlimited Version (Japan) (Tue Jun 8 1999) + + + bbakraidja + Battle Bakraid (Japan) (Wed Apr 7 1999) + + + bballoon + BnB Arcade + + + bballrmt + Baseball (Ramtek) [TTL] + + + bballs + Bouncing Balls + + + bbb108 + Big Bang Bar (Beta 1.8 US) + + + bbb109 + Big Bang Bar (Beta 1.9 US) + + + bbbowlin + Big Ball Bowling (Bowler) + + + bbbxing + Best Bout Boxing + + + bbeltzac + Black Belt (Zaccaria) + + + bbmanw + Bomber Man World / New Dyna Blaster - Global Quest + + + bbmanwj + Bomber Man World (Japan) + + + bbmanwja + Bomber Man World (Japan, revised sound hardware) + + + bbnny_l2 + Bugs Bunny Birthday Ball (L-2) + + + bbnny_lu + Bugs Bunny Birthday Ball (LU-2) European + + + bbonk + Bigfoot Bonkers + + + bbprot + unknown fighting game 'BB' (prototype) + + + bbros + Buster Bros. (USA) + + + bbust2 + Beast Busters 2nd Nightmare + + + bbusters + Beast Busters (World) + + + bbustersu + Beast Busters (US, Version 2) + + + bcats_l2 + Bad Cats (LA-2) + + + bcats_l5 + Bad Cats (L-5) + + + bchance + Bonne Chance! (French/English) + + + bchancep + Bonne Chance! (Golden Poker prequel HW) + + + bchopper + Battle Chopper + + + bcrusher + Bone Crusher + + + bcruzm12 + Battle Cruiser M-12 + + + bcstry + B.C. Story (set 1) + + + bcstrya + B.C. Story (set 2) + + + bdrdown + Border Down (Rev A) (GDL-0023A) + + + beachpt + Beach Patrol (Russia) (Atronic) + + + beachspi + Beach Spikers (GDS-0014) + + + beaminv + Beam Invader + + + bearnec + Bear Necessities (Russia) (Atronic) + + + beastf + Beastie Feastie + + + beastrzr + Beastorizer (USA) + + + beastrzrb + Beastorizer (USA bootleg) + + + beatclck + Beat the Clock + + + beathead + BeatHead (prototype) + + + beautyb + Beauty Block + + + beebop + Bee Bop (set 1) + + + beebopa + Bee Bop (set 2) + + + beebopb + Bee Bop (set 3) + + + beebopc + Bee Bop (set 4) + + + beebopd + Bee Bop (set 5) + + + beebope + Bee Bop (set 6) + + + beeline + Beeline (39-360-075) + + + beetlem + Beetlemania (set 1) + + + beetlema + Beetlemania (set 2) + + + beetlemb + Beetlemania (set 3) + + + beetlemc + Beetlemania (set 4) + + + beetlemd + Beetlemania (set 5) + + + beetleup + Beetles Unplugged (Russia) (Atronic) + + + beezer + Beezer (set 1) + + + beezer1 + Beezer (set 2) + + + begas + Bega's Battle (Revision 3) + + + begas1 + Bega's Battle (Revision 1) + + + bel + Behind Enemy Lines + + + bellring + Bell Ringer + + + benberob + Ben Bero Beh (Japan) + + + berabohm + Beraboh Man (Japan, Rev C) + + + berabohmb + Beraboh Man (Japan, Rev B) + + + berenstn + The Berenstain Bears in Big Paw's Cave + + + berlwall + The Berlin Wall + + + berlwallt + The Berlin Wall (bootleg ?) + + + bermudat + Bermuda Triangle (World?) + + + bermudata + Bermuda Triangle (World Wars) (US) + + + bermudatj + Bermuda Triangle (Japan) + + + berzerk + Berzerk (set 1) + + + berzerk1 + Berzerk (set 2) + + + berzerkg + Berzerk (German Speech) + + + bestbest + Best Of Best + + + bestleag + Best League (bootleg of Big Striker, Italian Serie A) + + + bestleaw + Best League (bootleg of Big Striker, World Cup) + + + bestri + Bestri (Korea) + + + bg_barmy + Barmy Army (BGT) + + + bg_ddb + Ding Dong Bells (BGT) + + + bg_max + Max A Million (BGT) (set 1) + + + bg_maxa + Max A Million (BGT) (set 2) + + + bgaregga + Battle Garegga (Europe / USA / Japan / Asia) (Sat Feb 3 1996) + + + bgareggabl + 1945 Part-2 (Chinese hack of Battle Garegga) + + + bgareggacn + Battle Garegga - Type 2 (Denmark / China) (Tue Apr 2 1996) + + + bgareggahk + Battle Garegga (Austria / Hong Kong) (Sat Feb 3 1996) + + + bgaregganv + Battle Garegga - New Version (Austria / Hong Kong) (Sat Mar 2 1996) + + + bgareggat2 + Battle Garegga - Type 2 (Europe / USA / Japan / Asia) (Sat Mar 2 1996) + + + bgareggatw + Battle Garegga (Taiwan / Germany) (Thu Feb 1 1996) + + + bguns_l7 + Big Guns (L-7) + + + bguns_l8 + Big Guns (L-8) + + + bguns_la + Big Guns (L-A) + + + bguns_p1 + Big Guns (P-1) + + + bhead2k + Beach Head 2000 Install - 05/27/03 + + + bhead2k2 + Beach Head 2002 Install - 05/27/03 + + + bhead2k3 + Beach Head 2003 Desert War Install - 05/27/03 + + + bhead2ka + Beach Head 2000 Install - 09/16/01 + + + bhol_ltd + Black Hole (LTD) + + + big10 + Big 10 + + + bigappg + The Big Apple (2131-13, U5-0) + + + bigbang + Big Bang (9th Nov. 1993) + + + bigblue + Big Blue (Russia) (Atronic) + + + bigbucks + Big Bucks + + + bigd2 + Big D2 + + + bigdeal + Big Deal (Hungarian, set 1) + + + bigdealb + Big Deal (Hungarian, set 2) + + + bigevglf + Big Event Golf (US) + + + bigevglfj + Big Event Golf (Japan) + + + bigfghtr + Tatakae! Big Fighter (Japan) + + + bigfight + Big Fight - Big Trouble In The Atlantic Ocean + + + biggame + Big Game + + + bighouse + Big House + + + bighurt + Frank Thomas' Big Hurt (rev.3) + + + bigkarnk + Big Karnak + + + bigkong + Big Kong + + + bigprowr + The Big Pro Wrestling! + + + bigrun + Big Run (11th Rallye version) + + + bigstrik + Big Striker + + + bigstrkb + Big Striker (bootleg) + + + bigstrkba + Big Striker (bootleg w/Italian teams) + + + bigtown + Big Town + + + bigtwin + Big Twin + + + bigtwinb + Big Twin (No Girls Conversion) + + + bijokkog + Bijokko Gakuen (Japan 880116) + + + bijokkoy + Bijokko Yume Monogatari (Japan 870925) + + + bikiniko + BiKiNikko - Okinawa de Ippai Shichaimashita (Japan) + + + bikkuric + Bikkuri Card (Japan) + + + billiard + The Billiards (Video Hustler bootleg) + + + billlist + Billard List + + + bilyard + Billiard + + + bingo + Bingo + + + bingoc + Bingo Circus (Rev. A 891001) + + + bingoman + Bingo Mania (P03-P07-P14) + + + bingomana + Bingo Mania (A03) + + + bingor1 + Bingo Roll / Bell Star? (set 1) + + + bingor2 + Bingo Roll / Bell Star? (set 2) + + + bingor3 + Bingo Roll / Bell Star? (set 3) + + + bingor4 + Bingo Roll / Bell Star? (set 4) + + + bingor5 + Bingo Roll / Bell Star V3? (set 5) + + + bingowng + Bingo (set 1) + + + bingownga + Bingo (set 2) + + + bioatack + Bio Attack + + + biofreak + BioFreaks (prototype) + + + biomtoy + Biomechanical Toy (Ver. 1.0.1885) + + + biomtoya + Biomechanical Toy (Ver. 1.0.1884) + + + bionicc + Bionic Commando (Euro) + + + bionicc1 + Bionic Commando (US set 1) + + + bionicc2 + Bionic Commando (US set 2) + + + bioship + Bio-ship Paladin + + + biplane4 + Biplane 4 [TTL] + + + birdiy + Birdiy + + + birdtry + Birdie Try (Japan) + + + bishi + Bishi Bashi Championship Mini Game Senshuken (ver JAA, 3 Players) + + + bishjan + Bishou Jan (Japan, Ver. 2.03) + + + bjourney + Blue's Journey / Raguy (ALM-001)(ALH-001) + + + bjpoker + Poker / Black Jack (Model 7521) + + + bjtwin + Bombjack Twin (set 1) + + + bjtwina + Bombjack Twin (set 2) + + + bjtwinp + Bombjack Twin (prototype? with adult pictures) + + + bk2k_l4 + Black Knight 2000 (L-4) + + + bk2k_lg1 + Black Knight 2000 (LG-1) + + + bk2k_lg3 + Black Knight 2000 (LG-3) + + + bk2k_pu1 + Black Knight 2000 (PU-1) + + + bk_f4 + Black Knight (L-4, French speech) + + + bk_l3 + Black Knight (L-3) + + + bk_l4 + Black Knight (L-4) + + + bking + Birdie King + + + bking2 + Birdie King 2 + + + bking3 + Birdie King 3 + + + bkrtmaq + Bakuretsu Quiz Ma-Q Dai Bouken (Japan) + + + black + Czernyj Korabl (Arcade bootleg of ZX Spectrum 'Blackbeard') + + + black100 + Blackwater 100 + + + black100s + Blackwater 100 (Single Ball Play) + + + blackbd + Black Beard (Russia, set 1) + + + blackbda + Black Beard (Russia, set 2) + + + blackbdb + Black Beard (Russia, set 3) + + + blackblt + Black Belt + + + blackjck + Black Jack (Pinball) + + + blackt96 + Black Touch '96 + + + bladestl + Blades of Steel (version T) + + + bladestle + Blades of Steel (version E) + + + bladestll + Blades of Steel (version L) + + + blakpyra + Black Pyramid + + + blandia + Blandia + + + blandiap + Blandia (prototype) + + + blasted + Blasted + + + blaster + Blaster + + + blasterkit + Blaster (conversion kit) + + + blastero + Blaster (location test) + + + blasto + Blasto + + + blastoff + Blast Off (Japan) + + + blazeon + Blaze On (Japan) + + + blazer + Blazer (Japan) + + + blazlaz + Blazing Lazers + + + blazstar + Blazing Star + + + blbeauty + Black Beauty (Shuffle) + + + blckhole + Black Hole (Rev. 4) + + + blckhole2 + Black Hole (Rev. 2) + + + blckhols + Black Hole (Sound Only) + + + blckjack + Black Jack + + + bldwolf + Bloody Wolf (US) + + + bldwolfj + Narazumono Sentoubutai Bloody Wolf (Japan) + + + bldyr3b + Bloody Roar 3 (bootleg) + + + bldyroar + Bloody Roar (Japan) + + + bldyror2 + Bloody Roar 2 (World) + + + bldyror2a + Bloody Roar 2 (Asia) + + + bldyror2j + Bloody Roar 2 (Japan) + + + bldyror2u + Bloody Roar 2 (USA) + + + blitz + NFL Blitz (boot ROM 1.2) + + + blitz11 + NFL Blitz (boot ROM 1.1) + + + blitz2k + NFL Blitz 2000 Gold Edition + + + blitz99 + NFL Blitz '99 + + + blkbustr + BlockBuster + + + blkdrgon + Black Dragon (Japan) + + + blkdrgonb + Black Dragon (bootleg) + + + blkfever + Black Fever + + + blkheart + Black Heart + + + blkheartj + Black Heart (Japan) + + + blkhole + Black Hole + + + blkou_f1 + Blackout (L-1, French Speech) + + + blkou_l1 + Blackout (L-1) + + + blkou_t1 + Blackout (T-1) + + + blkpnthr + Black Panther + + + blkrhino + Black Rhino (3VXFC5344, New Zealand) + + + blkshpsq + Black Sheep Squadron + + + blktiger + Black Tiger + + + blktigera + Black Tiger (older) + + + blktigerb1 + Black Tiger (bootleg set 1) + + + blktigerb2 + Black Tiger (bootleg set 2) + + + blktouch + Black Touch (Korea) + + + blmbycar + Blomby Car + + + blmbycaru + Blomby Car (not encrypted) + + + block + Block Block (World 910910) + + + block2 + Block 2 (S.P.A. Co. bootleg) + + + blockade + Blockade + + + blockbl + Block Block (bootleg) + + + blockcar + Block Carnival / Thunder & Lightning 2 + + + blockcarb + Block Carnival / Thunder & Lightning 2 (bootleg) + + + blocken + Blocken (Japan) + + + blockgal + Block Gal (MC-8123B, 317-0029) + + + blockgalb + Block Gal (bootleg) + + + blockhl + Block Hole + + + blockj + Block Block (Japan 910910) + + + blockjoy + Block Block (World 911106 Joystick) + + + blockout + Block Out (set 1) + + + blockout2 + Block Out (set 2) + + + blockoutj + Block Out (Japan) + + + bloodbro + Blood Bros. (set 1) + + + bloodbroa + Blood Bros. (set 2) + + + bloodbrob + Blood Bros. (set 3) + + + bloodstm + Blood Storm (v2.22) + + + bloodstm10 + Blood Storm (v1.04) + + + bloodstm11 + Blood Storm (v1.10) + + + bloodstm21 + Blood Storm (v2.10) + + + bloodstm22 + Blood Storm (v2.20) + + + bloodwar + Blood Warrior + + + bloto + Blits Loto (Russia) (Extrema) + + + bloxeed + Bloxeed (Japan, FD1094 317-0139) + + + bloxeedc + Bloxeed (World, C System) + + + bloxeedu + Bloxeed (US, C System) + + + blpearl + Black Pearl (Russia) (Extrema) + + + blstroid + Blasteroids (rev 4) + + + blstroid2 + Blasteroids (rev 2) + + + blstroid3 + Blasteroids (rev 3) + + + blstroidg + Blasteroids (German, rev 2) + + + blstroidh + Blasteroids (with heads) + + + blswhstl + Bells & Whistles (Version L) + + + bluehawk + Blue Hawk + + + bluehawkn + Blue Hawk (NTC) + + + blueprnt + Blue Print (Midway) + + + blueprntj + Blue Print (Jaleco) + + + blueshrk + Blue Shark + + + blvelvet + Black Velvet + + + blzntrnd + Blazing Tornado + + + bm1stmix + beatmania (ver JA-B) + + + bm2ndmix + beatmania 2nd MIX (ver JA-B) + + + bm2ndmxa + beatmania 2nd MIX (ver JA-A) + + + bm37th + Beatmania III Append 7th Mix + + + bm3final + Beatmania III The Final + + + bm3rdmix + beatmania 3rd MIX (ver JA-A) + + + bm4thmix + beatmania 4th MIX (ver JA-A) + + + bm5thmix + beatmania 5th MIX (ver JA-A) + + + bm6thmix + beatmania 6th MIX (ver JA-A) + + + bm7thmix + beatmania 7th MIX (ver JA-B) + + + bmaster + Blade Master (World) + + + bmcbowl + Konkyuu no Hoshi + + + bmclubmx + beatmania Club MIX (ver JA-A) + + + bmcompm2 + beatmania complete MIX 2 (ver JA-A) + + + bmcompmx + beatmania complete MIX (ver JA-B) + + + bmcorerm + beatmania CORE REMIX (ver JA-A) + + + bmcpokr + unknown BMC poker game + + + bmdct + beatmania featuring Dreams Come True (ver JA-A) + + + bmf_at + Batman Forever (Austrian) + + + bmf_be + Batman Forever (Belgian) + + + bmf_ch + Batman Forever (Swiss) + + + bmf_cn + Batman Forever (Canadian) + + + bmf_de + Batman Forever (German) + + + bmf_fr + Batman Forever (French) + + + bmf_it + Batman Forever (Italian) + + + bmf_jp + Batman Forever (Japanese) + + + bmf_nl + Batman Forever (Dutch) + + + bmf_no + Batman Forever (Norwegian) + + + bmf_sp + Batman Forever (Spanish) + + + bmf_sv + Batman Forever (Swedish) + + + bmf_time + Batman Forever (Timed Play) + + + bmf_uk + Batman Forever (English) + + + bmfinal + beatmania THE FINAL (ver JA-A) + + + bmiidx + beatmania IIDX (863 JAB) + + + bmiidx2 + beatmania IIDX 2nd style (GC985 JAA) + + + bmiidx3 + beatmania IIDX 3rd style (GC992 JAC) + + + bmiidx3a + beatmania IIDX 3rd style (GC992 JAA) + + + bmiidx4 + beatmania IIDX 4th style (GCA03 JAA) + + + bmiidx5 + beatmania IIDX 5th style (GCA17 JAA) + + + bmiidx6 + beatmania IIDX 6th style (GCB4U JAB) + + + bmiidx6a + beatmania IIDX 6th style (GCB4U JAA) + + + bmiidx7 + beatmania IIDX 7th style (GCB44 JAA) + + + bmiidx8 + beatmania IIDX 8th style (GCC44 JAA) + + + bmiidxa + beatmania IIDX (863 JAA) + + + bmiidxc + beatmania IIDX with DDR 2nd Club Version (896 JAB) + + + bmiidxc2 + Beatmania IIDX Substream with DDR 2nd Club Version 2 (984 A01 BM) + + + bmiidxca + beatmania IIDX with DDR 2nd Club Version (896 JAA) + + + bmiidxs + beatmania IIDX Substream (983 JAA) + + + bmx + BMX + + + bnglngby + Vs. Raid on Bungeling Bay (RD4-2 B) + + + bnj + Bump 'n' Jump + + + bnjm + Bump 'n' Jump (Midway) + + + bnstars + Vs. Janshi Brandnew Stars (MegaSystem32 Version) + + + bnstars1 + Vs. Janshi Brandnew Stars + + + bntyhunt + Bounty Hunter (GCTech Co., LTD) + + + bnzabros + Bonanza Bros (US, Floppy DS3-5000-07d? Based) + + + bnzabrosj + Bonanza Bros (Japan, Floppy DS3-5000-07b Based) + + + bnzai_g3 + Banzai Run (L-3) Germany + + + bnzai_l1 + Banzai Run (L-1) + + + bnzai_l3 + Banzai Run (L-3) + + + bnzai_pa + Banzai Run (P-A) + + + boblbobl + Bobble Bobble (set 1) + + + boblbobl2 + Bobble Bobble (set 2) + + + bodyslam + Body Slam (8751 317-0015) + + + bogeyman + Bogey Manor + + + boggy84 + Boggy '84 + + + boggy84b + Boggy '84 (bootleg) + + + bombbee + Bomb Bee + + + bomber + Bomber (bootleg of Scramble) + + + bombjack + Bomb Jack (set 1) + + + bombjack2 + Bomb Jack (set 2) + + + bombjackt + Bomb Jack (Tecfri, Spain) + + + bombkick + Bomb Kick (set 1) + + + bombkicka + Bomb Kick (set 2) + + + bomblord + Bomber Lord (bootleg) + + + bombrman + Bomber Man (Japan) + + + bombsa + Bombs Away + + + bonanza + Touchstar Bonanza (Revision 3) + + + bonanzar2 + Touchstar Bonanza (Revision 2) + + + bonebstr + Bone Busters Inc. + + + bongo + Bongo + + + bonkadv + B.C. Kid / Bonk's Adventure / Kyukyoku!! PC Genjin + + + bonuscrd + Bonus Card (Austrian) + + + bonuscrda + Bonus Card (Austrian, ATG Electronic hack) + + + bonzeadv + Bonze Adventure (World, Newer) + + + bonzeadvo + Bonze Adventure (World, Older) + + + bonzeadvu + Bonze Adventure (US) + + + boobhack + Booby Kids (Italian manufactured graphic hack / bootleg of Kid no Hore Hore Daisakusen (bootleg)) + + + boogwing + Boogie Wings (Euro v1.5, 92.12.07) + + + boogwinga + Boogie Wings (Asia v1.5, 92.12.07) + + + bookra + Book Of Ra (set 1) + + + bookthr + Book Theatre (Ver 1.2) + + + boomrang + Boomer Rang'r / Genesis (set 1) + + + boomranga + Boomer Rang'r / Genesis (set 2) + + + boonggab + Boong-Ga Boong-Ga (Spank'em!) + + + bootcamp + Boot Camp + + + boothill + Boot Hill + + + bop_l2 + The Machine: Bride of Pinbot (L-2) + + + bop_l3 + The Machine: Bride of Pinbot (L-3) + + + bop_l4 + The Machine: Bride of Pinbot (L-4) + + + bop_l5 + The Machine: Bride of Pinbot (L-5) + + + bop_l6 + The Machine: Bride of Pinbot (L-6) + + + bop_l7 + The Machine: Bride of Pinbot (L-7) + + + borench + Borench + + + borntofi + Born To Fight + + + bosco + Bosconian (new version) + + + boscomd + Bosconian (Midway, new version) + + + boscomdo + Bosconian (Midway, old version) + + + boscoo + Bosconian (old version) + + + boscoo2 + Bosconian (older version) + + + botanic + Botanic (French) + + + botss + Battle of the Solar System (rev. 1.1a 7/23/92) + + + botss11 + Battle of the Solar System (rev. 1.1 3/24/92) + + + bottl10b + Bottle 10 (Italian, set 2) + + + bottle10 + Bottle 10 (Italian, set 1) + + + bottom9 + Bottom of the Ninth (version T) + + + bottom9n + Bottom of the Ninth (version N) + + + bouldash + Boulder Dash / Boulder Dash Part 2 (World) + + + bouldashj + Boulder Dash / Boulder Dash Part 2 (Japan) + + + bounty + The Bounty + + + bountyh + Bounty Hunter + + + bowarrow + Bow & Arrow (Prototype) + + + bowl3d + 3-D Bowling + + + bowler + Bowling Alley + + + bowlrama + Bowl-O-Rama + + + bowltry + Bowling Try + + + boxer + Boxer (prototype) + + + boxingb + Boxing Bugs + + + boxingm + Boxing Mania (ver JAA) + + + boxyboy + Boxy Boy (SB?) + + + bpoker + Video Poker (v1403) + + + br_l1 + Black Rose (L-1) + + + br_l3 + Black Rose (L-3) + + + br_l4 + Black Rose (L-4) + + + br_p17 + Black Rose (SP-1) + + + bradley + Bradley Trainer + + + brain + Brain + + + brapboys + B.Rap Boys (World) + + + brapboysj + B.Rap Boys Special (Japan) + + + brapboysu + B.Rap Boys Special (US) + + + brasil + Bra$il (Version 3) + + + brasil86 + Brasil 86 + + + brasil87 + Brasil 87 + + + brasil89 + Brasil 89 (set 1) + + + brasil89a + Brasil 89 (set 2) + + + brasil93 + Brasil 93 + + + braveff + Brave Fire Fighters + + + brdrlinb + Borderline (Karateco bootleg) + + + brdrline + Borderline + + + brdrlinet + Borderline (Tranquilizer Gun conversion) + + + brdrlins + Borderline (Sidam bootleg) + + + break86 + Break '86 + + + breakers + Breakers + + + breakrev + Breakers Revenge + + + breywood + Breywood (Japan revision 2) + + + brickyrd + Brickyard + + + brickzn + Brick Zone (v5.0, Joystick) + + + brickzn11 + Brick Zone (v1.1) + + + brickznv4 + Brick Zone (v4.0, Spinner) + + + brival + Burning Rival (World) + + + brivalj + Burning Rival (Japan) + + + brix + Brix + + + brixian + Brixian + + + brkthru + Break Thru (US) + + + brkthruj + Kyohkoh-Toppa (Japan) + + + brod + Brodjaga (Arcade bootleg of ZX Spectrum 'Inspector Gadget and the Circus of Fear') + + + bronx + Bronx + + + brooklyn + Brooklyn (set 1) (Bingo) + + + brooklyna + Brooklyn (set 2) (Bingo) + + + brooks + Brooks & Dunn (rev.T1) + + + brubber + Burnin' Rubber + + + brutforc + Brute Force + + + brvblade + Brave Blade (World) + + + brvbladea + Brave Blade (Asia) + + + brvbladej + Brave Blade (Japan) + + + brvbladeu + Brave Blade (USA) + + + brvteam + Brave Team + + + bs94 + Buena Suerte '94 + + + bsb105 + Breakshot (Beta) + + + bshark + Battle Shark (World) + + + bsharkj + Battle Shark (Japan) + + + bsharkjjs + Battle Shark (Japan, Joystick) + + + bsharku + Battle Shark (US) + + + bsktball + Basketball + + + bsplash + Banana Splash (set 1) + + + bssoccer + Back Street Soccer (KRB-0031 PCB) + + + bssoccera + Back Street Soccer (KRB-0032A PCB) + + + bstars + Baseball Stars Professional (NGM-002) + + + bstars2 + Baseball Stars 2 + + + bstarsh + Baseball Stars Professional (NGH-002) + + + bstrk_l1 + Big Strike (Shuffle) (L-1) + + + bsuerte + Buena Suerte (Spanish, set 1) + + + bsuertea + Buena Suerte (Spanish, set 2) + + + bsuerteb + Buena Suerte (Spanish, set 3) + + + bsuertec + Buena Suerte (Spanish, set 4) + + + bsuerted + Buena Suerte (Spanish, set 5) + + + bsuertee + Buena Suerte (Spanish, set 6) + + + bsuertef + Buena Suerte (Spanish, set 7) + + + bsuerteg + Buena Suerte (Spanish, set 8) + + + bsuerteh + Buena Suerte (Spanish, set 9) + + + bsuertei + Buena Suerte (Spanish, set 10) + + + bsuertej + Buena Suerte (Spanish, set 11) + + + bsuertek + Buena Suerte (Spanish, set 12) + + + bsuertel + Buena Suerte (Spanish, set 13) + + + bsuertem + Buena Suerte (Spanish, set 14) + + + bsuerten + Buena Suerte (Spanish, set 15) + + + bsuerteo + Buena Suerte (Spanish, set 16) + + + bsuertep + Buena Suerte (Spanish, set 17) + + + bsuerteq + Buena Suerte (Spanish, set 18) + + + bsuerter + Buena Suerte (Spanish, set 19) + + + bsuertes + Buena Suerte (Spanish, set 20) + + + bsuertet + Buena Suerte (Spanish, set 21) + + + bsuerteu + Buena Suerte (Spanish, set 22) + + + bsv100r + Breakshot (Redemption 1.0) + + + bsv102r + Breakshot (Redemption 1.2) + + + bsv103 + Breakshot + + + btchamp + Beat the Champ (GV053 UAA01) + + + btime + Burger Time (Data East set 1) + + + btime2 + Burger Time (Data East set 2) + + + btime3 + Burger Time (Data East USA) + + + btimem + Burger Time (Midway) + + + btippers + Big Tippers (Russia) + + + btlecity + Vs. Battle City + + + btlfield + Battle Field (Japan) + + + btlfieldb + Battle Field (bootleg) + + + btlkroad + Battle K-Road + + + btltryst + Battle Tryst (ver JAC) + + + btmn_101 + Batman (1.01) + + + btmn_103 + Batman (1.03) + + + btmn_106 + Batman (1.06) + + + btmn_g13 + Batman (1.03 Germany) + + + btoads + Battletoads + + + bttf_a20 + Back To the Future (2.0) + + + bttf_a21 + Back To The Future (2.1) + + + bttf_a27 + Back To the Future (2.7) + + + bttf_g27 + Back To the Future (2.7 Germany) + + + bub68705 + Bubble Bobble (bootleg with 68705) + + + bubblem + Bubble Memories: The Story Of Bubble Bobble III (Ver 2.4O 1996/02/15) + + + bubblemj + Bubble Memories: The Story Of Bubble Bobble III (Ver 2.3J 1996/02/07) + + + bubbles + Bubbles + + + bubblesp + Bubbles (prototype version) + + + bubblesr + Bubbles (Solid Red label) + + + bubbletr + Bubble Trouble (Japan, Rev C) + + + bubl2000 + Bubble 2000 + + + bublbob2 + Bubble Bobble II (Ver 2.5O 1994/10/05) + + + bublbob2p + Bubble Bobble II (Ver 0.0J 1993/12/13, prototype) + + + bublbobl + Bubble Bobble (Japan, Ver 0.1) + + + bublbobl1 + Bubble Bobble (Japan, Ver 0.0) + + + bublboblr + Bubble Bobble (US, Ver 5.1) + + + bublboblr1 + Bubble Bobble (US, Ver 1.0) + + + bublpong + Bubble Pong Pong + + + bubsymphb + Bubble Symphony (bootleg with OKI6295) + + + bubsymphe + Bubble Symphony (Ver 2.5O 1994/10/05) + + + bubsymphj + Bubble Symphony (Ver 2.5J 1994/10/05) + + + bubsymphu + Bubble Symphony (Ver 2.5A 1994/10/05) + + + bubsys + Bubble System BIOS + + + bucaner + Buccaneer + + + buccanrs + Buccaneers (set 1) + + + buccanrsa + Buccaneers (set 2) + + + buckrgrs + Buck Rogers + + + buckrog + Buck Rogers: Planet of Zoom + + + buckrogn + Buck Rogers: Planet of Zoom (not encrypted, set 1) + + + buckrogn2 + Buck Rogers: Planet of Zoom (not encrypted, set 2) + + + bucky + Bucky O'Hare (ver EAB) + + + buckyaab + Bucky O'Hare (ver AAB) + + + buckyea + Bucky O'Hare (ver EA) + + + buckyuab + Bucky O'Hare (ver UAB) + + + bugfever + Bugs Fever (Version 1.7R CGA) + + + bugfeverd + Bugs Fever (Version 1.7E CGA) + + + bugfevero + Bugs Fever (Version 1.6R CGA) + + + bugfeverv + Bugs Fever (Version 1.7R Dual) + + + bugfeverv2 + Bugs Fever (Version 1.7E Dual) + + + buggyboy + Buggy Boy/Speed Buggy (cockpit) + + + buggyboyjr + Buggy Boy Junior/Speed Buggy (upright) + + + buggychl + Buggy Challenge + + + buggychlt + Buggy Challenge (Tecfri) + + + bujutsu + Fighting Bujutsu + + + bullet + Bullet (FD1094 317-0041) + + + bullfgt + Bullfight (315-5065) + + + bullfgtr + Bull Fighter + + + bullfgtrs + Bull Fighter (Sega) + + + bullsdrt + Bulls Eye Darts + + + bullsdrtg + Bulls Eye Darts (Galaxian conversion) + + + bullseye + 301/Bullseye + + + bungeem + Bungee Monkey (set 1) + + + bungeema + Bungee Monkey (set 2) + + + buraiken + Hissatsu Buraiken (Japan) + + + burglarx + Burglar X + + + buriki + Buriki One (rev.B) + + + burnforc + Burning Force (Japan, new version (Rev C)) + + + burnforco + Burning Force (Japan, old version) + + + burningf + Burning Fight (NGM-018)(NGH-018) + + + burningfh + Burning Fight (NGH-018)(US) + + + burningfp + Burning Fight (prototype) + + + bushido + Bushido (set 1) + + + bushidoa + Bushido (set 2) + + + buster + Buster + + + butasan + Butasan - Pig's & Bomber's (Japan, English) + + + butasanj + Butasan (Japan, Japanese) + + + butrfly + Butterfly Video Game (version U350C) + + + buzzard + Buzzard + + + buzzundr + Buzzundrum (Ace) + + + bwcasino + Boardwalk Casino + + + bwidow + Black Widow + + + bwings + B-Wings (Japan new Ver.) + + + bwingsa + B-Wings (Alt Ver.?) + + + bwingso + B-Wings (Japan old Ver.) + + + bygone + Bygone + + + bzone + Battle Zone (rev 2) + + + bzonea + Battle Zone (rev 1) + + + bzonec + Battle Zone (cocktail) + + + c3_ppays + The Phrase That Pays (Bellfruit) (Cobra 3?) + + + c3_rtime + Radio Times (Bellfruit) (Cobra 3) + + + c3_telly + Telly Addicts (Bellfruit) (Cobra 3) + + + c3_totp + Top of the Pops (Bellfruit) (Cobra 3?) + + + cabal + Cabal (World, Joystick version) + + + cabala + Cabal (Alpha Trading) + + + cabalbl + Cabal (bootleg of Joystick version, set 1, alternate sound hardware) + + + cabalbl2 + Cabal (bootleg of Joystick version, set 2) + + + cabalus + Cabal (US set 1, Trackball version) + + + cabalus2 + Cabal (US set 2, Trackball version) + + + cabaret + Cabaret + + + cachat + Cachat (Japan) + + + cactjack + Cactus Jack's + + + cactus + Cactus (bootleg of Saboten Bombers) + + + cadanglr + Angler Dangler (DECO Cassette) + + + cadash + Cadash (World) + + + cadashf + Cadash (France) + + + cadashg + Cadash (Germany) + + + cadashi + Cadash (Italy) + + + cadashj + Cadash (Japan) + + + cadashp + Cadash (World, prototype) + + + cadashu + Cadash (US) + + + cafebrk + Mahjong Cafe Break + + + cafedoll + Mahjong Cafe Doll (Japan) + + + cafetime + Mahjong Cafe Time + + + cairblad + Change Air Blade (Japan) + + + calchase + California Chase + + + calibr50 + Caliber 50 + + + calipso + Calipso + + + calorie + Calorie Kun vs Moguranian + + + calorieb + Calorie Kun vs Moguranian (bootleg) + + + calspeed + California Speed (Version 2.1a, 4/17/98) + + + calspeeda + California Speed (Version 1.0r7a 3/4/98) + + + cameltry + Cameltry (US, YM2610) + + + cameltrya + Cameltry (World, YM2203 + M6295) + + + cameltryau + Cameltry (US, YM2203 + M6295) + + + cameltryj + Cameltry (Japan, YM2610) + + + camlight + Camel Lights + + + canasta + Canasta '86' + + + candance + Cannon Dancer (Japan) + + + candy + Candy Candy + + + cannball + Cannon Ball (Yun Sung, horizontal) + + + cannballv + Cannon Ball (Yun Sung, vertical) + + + cannonb + Cannon Ball (bootleg on Crazy Kong hardware) (set 1, buggy) + + + cannonb2 + Cannon Ball (bootleg on Crazy Kong hardware) (set 2, buggy) + + + cannonb3 + Cannon Ball (bootleg on Crazy Kong hardware) (set 3, no bonus game) + + + cannonbp + Cannon Ball (Pac-Man Hardware) + + + canvas + Canvas Croquis + + + canyon + Canyon Bomber + + + canyonp + Canyon Bomber (prototype) + + + capbowl + Capcom Bowling (set 1) + + + capbowl2 + Capcom Bowling (set 2) + + + capbowl3 + Capcom Bowling (set 3) + + + capbowl4 + Capcom Bowling (set 4) + + + capcor + Capitani Coraggiosi (Ver 1.3) + + + capitol + Capitol + + + capsnk + Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev C) + + + capsnka + Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev A) + + + capsnkb + Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) + + + captaven + Captain America and The Avengers (Asia Rev 1.4) + + + captavena + Captain America and The Avengers (Asia Rev 1.0) + + + captavene + Captain America and The Avengers (UK Rev 1.4) + + + captavenj + Captain America and The Avengers (Japan Rev 0.2) + + + captavenu + Captain America and The Avengers (US Rev 1.9) + + + captavenua + Captain America and The Avengers (US Rev 1.4) + + + captavenuu + Captain America and The Avengers (US Rev 1.6) + + + captcomm + Captain Commando (World 911202) + + + captcommb + Captain Commando (bootleg) + + + captcommj + Captain Commando (Japan 911202) + + + captcommjr1 + Captain Commando (Japan 910928) + + + captcommr1 + Captain Commando (World 911014) + + + captcommu + Captain Commando (USA 910928) + + + capunc + Capitan Uncino (Ver 1.2) + + + car2 + Car 2 (bootleg of Head On 2) + + + caractn + Car Action (set 1) + + + caractn2 + Car Action (set 2) + + + carb2002 + Carriage Bonus 2002 (bootleg) + + + carb2003 + Carriage Bonus 2003 (bootleg) + + + cardline + Card Line + + + carhop + Car Hop + + + carjmbre + Car Jamboree + + + carket + Carket Ball + + + carnevil + CarnEvil (v1.0.3) + + + carnevil1 + CarnEvil (v1.0.1) + + + carnival + Carnival (upright) + + + carnivalc + Carnival (cocktail) + + + carnivalh + Carnival (Head On hardware, set 1) + + + carnivalha + Carnival (Head On hardware, set 2) + + + carnking + Carnival King (v1.00.11) + + + carpolo + Car Polo + + + carrera + Carrera (Version 6.7) + + + cartfury + Cart Fury + + + casanova + Casanova + + + casbjack + Casino Black Jack (color, Standard 00-05) + + + cascade + Cascade + + + cashcade + Cashcade (JPM) (SYSTEM5 VIDEO) + + + cashcrop + Cash Crop (Russia) + + + cashquiz + Cash Quiz (Type B, Version 5) + + + cashtrn + Cash Train (v1.10) + + + casino5 + Casino Five (3315-02, U5-0) + + + caspoker + Casino Poker (Ver PM86LO-35-5, German) + + + castaway + Castaway (Russia) (Atronic) (set 1) + + + castawaya + Castaway (Russia) (Atronic) (set 2) + + + castfant + Astro Fantasia (DECO Cassette) + + + castfpt + Fortune Pot (Castle) (MACH2000 V2rvA) + + + castrev + Revolution (Castle) (MACH2000 V1rvE) + + + caswin + Casino Winner + + + catacomb + Catacomb + + + catacomp + Catacomb (Pinball) + + + catapult + Catapult + + + catch22 + Catch-22 (version 8.0) + + + catchp + Catch (prototype) + + + caterplr + Caterpillar (bootleg of Centipede) + + + catnmous + Cat and Mouse (set 1) + + + catnmousa + Cat and Mouse (set 2) + + + catt + Catt (Japan) + + + cavelon + Cavelon + + + caveman + Caveman (Pinball/Video Combo, set 1) + + + cavemana + Caveman (Pinball/Video Combo, set 2) + + + cavenger + Cosmic Avenger + + + cavnegro + Cavaleiro Negro + + + cavnegro1 + Cavaleiro Negro (alternate set 1) + + + cavnegro2 + Cavaleiro Negro (alternate set 2) + + + cawing + Carrier Air Wing (World 901012) + + + cawingb2 + Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM205 set 2) + + + cawingbl + Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM205 set 1) + + + cawingj + U.S. Navy (Japan 901012) + + + cawingr1 + Carrier Air Wing (World 901009) + + + cawingu + Carrier Air Wing (USA 901012) + + + cb2001 + Cherry Bonus 2001 + + + cb3 + Cherry Bonus III (ver.1.40, encrypted) + + + cb3a + Cherry Bonus III (ver.1.40, set 2) + + + cb3b + Cherry Bonus III (alt) + + + cb3c + Cherry Bonus III (alt, set 2) + + + cb3d + Cherry Bonus III (set 3) + + + cb3e + Cherry Bonus III (set 4, encrypted bootleg) + + + cbaj + Cool Boarders Arcade Jam + + + cball + Cannonball (Atari, prototype) + + + cbasebal + Capcom Baseball (Japan) + + + cbdash + Boulder Dash (DECO Cassette) + + + cbnj + Bump 'n' Jump (DECO Cassette) + + + cbombers + Chase Bombers (World) + + + cbombersj + Chase Bombers (Japan) + + + cbombersp + Chase Bombers (Japan Prototype) + + + cbtime + Burger Time (DECO Cassette) + + + cburnrub + Burnin' Rubber (DECO Cassette, set 1) + + + cburnrub2 + Burnin' Rubber (DECO Cassette, set 2) + + + cbuster + Crude Buster (World FX version) + + + cbusterj + Crude Buster (Japan) + + + cbusterw + Crude Buster (World FU version) + + + cc_12 + Cactus Canyon (1.2) + + + cc_13 + Cactus Canyon (1.3) + + + ccasino + Chinese Casino [BET] (Japan) + + + ccastles + Crystal Castles (version 4) + + + ccastles1 + Crystal Castles (version 1) + + + ccastles2 + Crystal Castles (version 2) + + + ccastles3 + Crystal Castles (version 3) + + + ccastlesf + Crystal Castles (version 3, French) + + + ccastlesg + Crystal Castles (version 3, German) + + + ccastlesj + Crystal Castles (joystick version) + + + ccastlesp + Crystal Castles (version 3, Spanish) + + + ccboot + Crazy Climber (bootleg set 1) + + + ccboot2 + Crazy Climber (bootleg set 2) + + + ccbootmr + Crazy Climber (Model Racing bootleg) + + + ccclass + Country Club Classic (v1.10 03-apr-1997) + + + cchance + Cherry Chance + + + cchasm + Cosmic Chasm (set 1) + + + cchasm1 + Cosmic Chasm (set 2) + + + cclimber + Crazy Climber (US) + + + cclimberj + Crazy Climber (Japan) + + + cclimbr2 + Crazy Climber 2 (Japan) + + + cclimbr2a + Crazy Climber 2 (Japan, Harder) + + + cclimbroper + Crazy Climber (Spanish, Operamatic bootleg) + + + cclownz + Crazzy Clownz (Version 1.0) + + + ccruise + Caribbean Cruise + + + cd32bios + CD32 Bios + + + cdibios + CD-i Bios + + + cdiscon1 + Disco No.1 (DECO Cassette) + + + cdsteljn + DS Telejan (DECO Cassette, Japan) + + + cecmatch + ChuckECheese's Match Game + + + centaur + Centaur + + + centipdb + Centipede (bootleg) + + + centipdd + Centipede Dux (hack) + + + centiped + Centipede (revision 3) + + + centiped2 + Centipede (revision 2) + + + centtime + Centipede (1 player, timed) + + + cerberup + Cerberus (Pinball) + + + cerberus + Cerberus + + + cexplore + Explorer (DECO Cassette) + + + cfarm + Chicken Farm (Version 2.0) + + + cfblue + Crazy Fruits Blue (Russia) (Atronic) (set 1) + + + cfbluea + Crazy Fruits Blue (Russia) (Atronic) (set 2) + + + cfever1k + Casino Fever 1k + + + cfever40 + Casino Fever 4.0 + + + cfever50 + Casino Fever 5.0 + + + cfever51 + Casino Fever 5.1 + + + cfever61 + Casino Fever 6.1 + + + cfghtice + Fighting Ice Hockey (DECO Cassette) + + + cfgreen + Crazy Fruits Green (Russia) (Atronic) + + + cfield + Chaos Field (GDL-0025) + + + cfishing + Fishing (DECO Cassette) + + + cflyball + Flying Ball (DECO Cassette) + + + cftbl_l3 + Creature from the Black Lagoon (L-3,SP-1) + + + cftbl_l4 + Creature from the Black Lagoon (L-4) + + + cgangpzl + Cosmo Gang the Puzzle (US) + + + cgangpzlj + Cosmo Gang the Puzzle (Japan) + + + cgip30cs + Credit Poker (ver.30c, standard) + + + cgold + Caribbean Gold (3VXEC449, USA) + + + cgold2 + Caribbean Gold II (3XF5182H04, USA) + + + cgraplop + Cluster Buster (DECO Cassette) + + + cgraplop2 + Graplop (no title screen) (DECO Cassette) + + + ch2000 + Fruit Bonus 2000 / New Cherry 2000 (Version 4.4E Dual) + + + ch2000b1 + Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R, set 1) + + + ch2000b2 + Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT, set 1) + + + ch2000c1 + Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R, set 2) + + + ch2000c2 + Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT, set 2) + + + ch2000d1 + Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R, set 3) + + + ch2000d2 + Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT, set 3) + + + ch2000o + Fruit Bonus 2000 / New Cherry 2000 (Version 3.9XT) + + + ch2000o2 + Fruit Bonus 2000 / New Cherry 2000 (Version 3.9D) + + + ch2000o3 + Fruit Bonus 2000 / New Cherry 2000 (Version 3.9) + + + ch2000v1 + Fruit Bonus 2000 / New Cherry 2000 (Version 4.4R Dual) + + + ch2000v2 + Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT Dual) + + + chainrec + Chain Reaction (World, Version 2.2, 1995.09.25) + + + chaknpop + Chack'n Pop + + + challeng + Challenger + + + cham24 + Chameleon 24 + + + chamburger + Hamburger (DECO Cassette, Japan) + + + chameleo + Chameleon + + + champbas + Champion Base Ball + + + champbasj + Champion Base Ball (Japan set 1) + + + champbasja + Champion Base Ball (Japan set 2) + + + champbb2 + Champion Base Ball Part-2: Pair Play (set 1) + + + champbb2a + Champion Baseball II (set 2) + + + champbb2j + Champion Baseball II (Japan) + + + champbwl + Championship Bowling + + + champwr + Champion Wrestler (World) + + + champwrj + Champion Wrestler (Japan) + + + champwru + Champion Wrestler (US) + + + chanbara + Chanbara + + + chance + Chance + + + chance32 + Chance Thirty Two + + + changela + Change Lanes + + + changes + Changes + + + changesa + Changes (EME license) + + + chaosbrk + Chaos Breaker (v2.02J) + + + chaoshea + Chaos Heat (V2.09O) + + + chaosheaj + Chaos Heat (V2.08J) + + + charlien + Charlie Ninja + + + charlies + Charlie's Angels + + + chasehq + Chase H.Q. (World) + + + chasehq2 + Chase H.Q. 2 (v2.0.6.JP) + + + chasehqj + Chase H.Q. (Japan) + + + chasehqju + Chase H.Q. (Japan, upright?) + + + chasehqu + Chase H.Q. (US) + + + chboxing + Champion Boxing + + + checkman + Check Man + + + checkmanj + Check Man (Japan) + + + checkmat + Checkmate + + + cheekyms + Cheeky Mouse + + + cheesech + Cheese Chase + + + cheetah + Cheetah + + + chelnov + Chelnov - Atomic Runner (World) + + + chelnovj + Chelnov - Atomic Runner (Japan) + + + chelnovu + Chelnov - Atomic Runner (US) + + + chessc2 + Chess Challenge 2 + + + chewheel + Cherry Wheel (Version 1.7) + + + chewing + Chewing Gum + + + cheyenne + Cheyenne (version 1.0) + + + chicken + Chicken (Russia) (Atronic) + + + chihiro + Chihiro Bios + + + chikij + Chiki Chiki Boys (Japan 900619) + + + chiller + Chiller (version 3.0) + + + chillicc + Chilli Con Cash (set 1) + + + chimerab + Chimera Beast (prototype) + + + chinagat + China Gate (US) + + + chinatow + China Town (Ver 1B, Dino4 HW) + + + chinatwn + China Town (Japan) + + + chinhero + Chinese Hero + + + chinhero2 + Chinese Hero (older, set 1) + + + chinhero3 + Chinese Hero (older, set 2) + + + chinherot + Chinese Heroe (Taito) + + + chinmoku + Mahjong Chinmoku no Hentai (Japan 900511) + + + chinsan + Ganbare Chinsan Ooshoubu (MC-8123A, 317-5012) + + + chkun + Chance Kun (Japan) + + + chleague + Champion League (Poker) + + + chleagul + Champion League (Lattine) + + + chmpnum + Champion Number (V0.74) + + + chocomk + Musapey's Choco Marker (Rev A) (GDL-0014A) + + + chocovdr + Uchuu Daisakusen: Chocovader Contactee (Japan, CVC1 Ver.A) + + + chokchok + Choky! Choky! + + + choko + Janpai Puzzle Choukou (Japan 010820) + + + choplift + Choplifter (8751 315-5151) + + + chopliftbl + Choplifter (bootleg) + + + chopliftu + Choplifter (unprotected) + + + chopper + Chopper I (US set 1) + + + choppera + Chopper I (US set 2) + + + chopperb + Chopper I (US set 3) + + + choysun + Choy Sun Doa (20131511, Malaysia) + + + chqflag + Chequered Flag + + + chqflagj + Chequered Flag (Japan) + + + chry10 + Cherry 10 (bootleg with PIC16F84) + + + chryangl + Cherry Angel + + + chrygld + Cherry Gold I + + + chsuper2 + Champion Super 2 (V0.13) + + + chsuper3 + Champion Super 3 (V0.35) + + + chucklck + Chuck-A-Luck + + + chukatai + Chuka Taisen (World) + + + chukataij + Chuka Taisen (Japan) + + + chukataiu + Chuka Taisen (US) + + + chwrestl + Champion Pro Wrestling + + + chwy + Highway Chase (DECO Cassette) + + + ciclone + Ciclone + + + circa33 + Circa 1933 + + + circus + Circus / Acrobat TV + + + circusc + Circus Charlie (level select, set 1) + + + circusc2 + Circus Charlie (level select, set 2) + + + circusc3 + Circus Charlie (no level select) + + + circuscc + Circus Charlie (Centuri) + + + circusce + Circus Charlie (Centuri, earlier) + + + circusp + Circus + + + cischeat + Cisco Heat + + + citalcup + Champion Italian Cup (bootleg V220IT) + + + citybomb + City Bomber (World) + + + citybombj + City Bomber (Japan) + + + citycon + City Connection (set 1) + + + citycona + City Connection (set 2) + + + citylove + City Love (Japan 860908) + + + cityslck + City Slicker + + + cj3play + Triple Play (Ver. 1.10) + + + cjddzsp + Super Dou Di Zhu Special (V122CN) + + + cjdh2 + Chao Ji Da Heng 2 (V311CN) + + + cjdh2a + Chao Ji Da Heng 2 (V311CNA) + + + cjdh2b + Chao Ji Da Heng 2 (V311CNB) + + + cjdh2c + Chao Ji Da Heng 2 (V215CN) + + + cjffruit + Funny Fruit (Ver. 1.13) + + + ckong + Crazy Kong + + + ckongalc + Crazy Kong (Alca bootleg) + + + ckongcv + Crazy Kong (bootleg on Galaxian hardware, encrypted, set 2) + + + ckongg + Crazy Kong (bootleg on Galaxian hardware) + + + ckonggx + Crazy Kong (bootleg on Galaxian hardware, encrypted, set 1) + + + ckongis + Crazy Kong (bootleg on Galaxian hardware, encrypted, set 3) + + + ckongmc + Crazy Kong (bootleg on Moon Cresta hardware) + + + ckongo + Crazy Kong (Orca bootleg) + + + ckongpt2 + Crazy Kong Part II (set 1) + + + ckongpt2a + Crazy Kong Part II (set 2) + + + ckongpt2b + Crazy Kong Part II (alternative levels) + + + ckongpt2j + Crazy Kong Part II (Japan) + + + ckongpt2jeu + Crazy Kong Part II (Jeutel bootleg) + + + ckongs + Crazy Kong (Scramble hardware) + + + ckpt_a17 + Checkpoint (1.7) + + + clapapa + Rootin' Tootin' / La-Pa-Pa (DECO Cassette) + + + clapapa2 + Rootin' Tootin' (DECO Cassette) + + + clas1812 + Class of 1812 + + + classice + Classic Edition (Version 1.6E) + + + classice1 + Classic Edition (Version 1.6R, set 1) + + + classice2 + Classic Edition (Version 1.6LT, set 1) + + + classiced1 + Classic Edition (Version 1.6R, set 2) + + + classiced2 + Classic Edition (Version 1.6LT, set 2) + + + classicev + Classic Edition (Version 1.6E Dual) + + + classicev1 + Classic Edition (Version 1.6R Dual) + + + classicev2 + Classic Edition (Version 1.6LT Dual) + + + claybust + Claybuster + + + claychal + Sega Clay Challenge + + + claypign + Clay Pigeon (version 2.0) + + + clayshoo + Clay Shoot + + + clbowl + Coors Light Bowling + + + cleanswp + Clean Sweep [TTL] + + + cleoftp + Cleopatra Fortune Plus (GDL-0012) + + + cleopatr + Cleopatra Fortune (Ver 2.1J 1996/09/05) + + + cleoptra + Cleopatra + + + cliffhgr + Cliff Hanger (set 1) + + + cliffhgra + Cliff Hanger (set 2) + + + clkwise + Clockwise (1VXEC534, New Zealand) + + + cloak + Cloak & Dagger (rev 5) + + + cloakfr + Cloak & Dagger (French) + + + cloakgr + Cloak & Dagger (German) + + + cloaksp + Cloak & Dagger (Spanish) + + + clocknch + Lock'n'Chase (DECO Cassette) + + + closeenc + Close Encounters of the Third Kind + + + cloud9 + Cloud 9 (prototype) + + + clown + Clown + + + clowns + Clowns (rev. 2) + + + clowns1 + Clowns (rev. 1) + + + clshroad + Clash-Road + + + clshroadd + Clash-Road (Data East license) + + + clshroads + Clash-Road (Status license) + + + cltchitr + Clutch Hitter (US, FD1094 317-0176) + + + cltchitrj + Clutch Hitter (Japan, FD1094 317-0175) + + + club90s + Mahjong CLUB 90's (set 1) (Japan 900919) + + + club90sa + Mahjong CLUB 90's (set 2) (Japan 900919) + + + clubk2k3 + Club Kart: European Session (2003) + + + clubk2kf + Club Kart: European Session (2003, not protected) + + + clubkprz + Club Kart Prize + + + clubkpzb + Club Kart Prize Ver. B + + + clubkrtd + Club Kart: European Session (Rev D) + + + clubkrte + Club Kart: European Session + + + cluckypo + Lucky Poker (DECO Cassette) + + + cluclu + Vs. Clu Clu Land + + + cluedo + Cluedo (prod. 2D) + + + cluedo2 + Cluedo (prod. 2) + + + cluedo2c + Cluedo (prod. 2C) + + + cluedod + Cluedo (prod. 2D) (Protocol) + + + cmagica + Carta Magica (Ver 1.8) + + + cmanhat + Manhattan (DECO Cassette) + + + cmast91 + Cherry Master '91 (ver.1.30) + + + cmast92 + Cherry Master '92 + + + cmast97 + Cherry Master '97 + + + cmaster + Cherry Master I (ver.1.01, set 1) + + + cmasterb + Cherry Master I (ver.1.01, set 2) + + + cmasterbv + Cherry Master I (ver.1.01, set 4, with Blitz Poker ROM?) + + + cmasterc + Cherry Master I (ver.1.01, set 3) + + + cmasterd + Cherry Master I (ver.1.01, set 5) + + + cmastere + Cherry Master I (ver.1.01, set 6) + + + cmasterf + Cherry Master I (ver.1.01, set 7) + + + cmehyou + Mahjong Circuit no Mehyou (Japan) + + + cmezspin + Cherry Master I (E-Z Spin bootleg / hack) + + + cmfun + Cherry Master (Fun USA v2.5 bootleg / hack) + + + cmissnx + Mission-X (DECO Cassette) + + + cmkenosp + Coinmaster Keno (Y2K, Spanish, 2000-12-14) + + + cmkenospa + Coinmaster Keno (Y2K, Spanish, 2000-12-02) + + + cmmb162 + Centipede / Millipede / Missile Command / Let's Go Bowling (rev 1.62) + + + cmrltv75 + Coinmaster Roulette V75 (Y2K, Spanish) + + + cmv4 + Cherry Master (ver.4, set 1) + + + cmv4a + Cherry Master (ver.4, set 2) + + + cmv801 + Cherry Master (Corsica, ver.8.01) + + + cmwm + Cherry Master (Watermelon bootleg / hack) + + + cndypuzl + Candy Puzzle (v1.0) + + + cnightst + Night Star (DECO Cassette, set 1) + + + cnightst2 + Night Star (DECO Cassette, set 2) + + + cninja + Caveman Ninja (World ver 4) + + + cninja1 + Caveman Ninja (World ver 1) + + + cninjabl + Caveman Ninja (bootleg) + + + cninjabl2 + Caveman Ninja (bootleg, alt) + + + cninjau + Caveman Ninja (US ver 4) + + + cntct_l1 + Contact (L-1) + + + cntforce + Counterforce + + + cntine31 + Continental 3 in 1 (Bingo) + + + cntinntl + Continental (Bingo) + + + cntrygrl + Country Girl (Japan set 1) + + + cntrygrla + Country Girl (Japan set 2) + + + cntsteer + Counter Steer (Japan) + + + cobra + Cobra Command (Data East LD, set 1) + + + cobraa + Cobra Command (Data East LD, set 2) + + + cobracom + Cobra-Command (World revision 5) + + + cobracomj + Cobra-Command (Japan) + + + cobram3 + Cobra Command (M.A.C.H. 3 hardware) + + + cobrap + Cobra + + + cobraseg + Cobra Command (Sega LaserDisc Hardware) + + + code1d + Code One Dispatch (ver D) + + + code1db + Code One Dispatch (ver B) + + + colmns97 + Columns '97 (JET 961209 V1.000) + + + colony7 + Colony 7 (set 1) + + + colony7a + Colony 7 (set 2) + + + colorama + Colorama (English) + + + colt + Colt + + + columbia + Columbia + + + columbus + Columbus (set 1) + + + columbusa + Columbus (set 2) + + + columbusb + Columbus (set 3) + + + columbusc + Columbus (set 4) + + + columbusd + Columbus (set 5) + + + columbuse + Columbus (set 6) + + + columbusf + Columbus (set 7) + + + column2j + Columns II: The Voyage Through Time (Japan) + + + columns + Columns (World) + + + columns2 + Columns II: The Voyage Through Time (World) + + + columnsj + Columns (Japan) + + + columnsu + Columns (US, cocktail) + + + combat + Combat (version 3.0) + + + combatsc + Combat School (joystick) + + + combatscb + Combat School (bootleg) + + + combatscj + Combat School (Japan trackball) + + + combatsct + Combat School (trackball) + + + combh + Combat Hawk + + + comebaby + Come On Baby + + + comet_l4 + Comet (L-4) + + + comet_l5 + Comet (L-5) + + + comg074 + Cal Omega - Game 7.4 (Gaming Poker, W.Export) + + + comg076 + Cal Omega - Game 7.6 (Arcade Poker) + + + comg079 + Cal Omega - Game 7.9 (Arcade Poker) + + + comg080 + Cal Omega - Game 8.0 (Arcade Black Jack) + + + comg094 + Cal Omega - Game 9.4 (Keno) + + + comg107 + Cal Omega - Game 10.7c (Big Game) + + + comg123 + Cal Omega - Game 12.3 (Ticket Poker) + + + comg125 + Cal Omega - Game 12.5 (Bingo) + + + comg127 + Cal Omega - Game 12.7 (Keno) + + + comg128 + Cal Omega - Game 12.8 (Arcade Game) + + + comg134 + Cal Omega - Game 13.4 (Nudge Bingo) + + + comg145 + Cal Omega - Game 14.5 (Pixels) + + + comg157 + Cal Omega - Game 15.7 (Double-Draw Poker) + + + comg159 + Cal Omega - Game 15.9 (Wild Double-Up) + + + comg164 + Cal Omega - Game 16.4 (Keno) + + + comg168 + Cal Omega - Game 16.8 (Keno) + + + comg172 + Cal Omega - Game 17.2 (Double Double Poker) + + + comg175 + Cal Omega - Game 17.51 (Gaming Draw Poker) + + + comg176 + Cal Omega - Game 17.6 (Nudge Bingo) + + + comg181 + Cal Omega - Game 18.1 (Nudge Bingo) + + + comg183 + Cal Omega - Game 18.3 (Pixels) + + + comg185 + Cal Omega - Game 18.5 (Pixels) + + + comg186 + Cal Omega - Game 18.6 (Pixels) + + + comg187 + Cal Omega - Game 18.7 (Amusement Poker) + + + comg204 + Cal Omega - Game 20.4 (Super Blackjack) + + + comg208 + Cal Omega - Game 20.8 (Winner's Choice) + + + comg227 + Cal Omega - Game 22.7 (Amusement Poker, d/d) + + + comg230 + Cal Omega - Game 23.0 (FC Bingo (4-card)) + + + comg236 + Cal Omega - Game 23.6 (Hotline) + + + comg239 + Cal Omega - Game 23.9 (Gaming Draw Poker) + + + comg240 + Cal Omega - Game 24.0 (Gaming Draw Poker, hold) + + + comg246 + Cal Omega - Game 24.6 (Hotline) + + + comg272a + Cal Omega - Game 27.2 (Keno, amusement) + + + comg272b + Cal Omega - Game 27.2 (Keno, gaming) + + + comg5108 + Cal Omega - Game 51.08 (CEI Video Poker, Jacks or Better) + + + comg903d + Cal Omega - System 903 Diag.PROM + + + comg905d + Cal Omega - System 905 Diag.PROM + + + commando + Commando (World) + + + commandob + Commando (bootleg set 1) + + + commandob2 + Commando (bootleg set 2) + + + commandoj + Senjou no Ookami + + + commandou + Commando (US set 1) + + + commandou2 + Commando (US set 2) + + + commandw + Command War - Super Special Battle & War Game (Ver 0.0J) (Prototype) + + + commsega + Commando (Sega) + + + comotion + Comotion + + + compgolf + Competition Golf Final Round (revision 3) + + + compgolfo + Competition Golf Final Round (old version) + + + complexx + Complex X + + + condor + Condor (bootleg of Phoenix) + + + coneyis + Old Coney Island! + + + confmiss + Confidential Mission (GDS-0001) + + + congo + Congo Bongo (Rev C, 2 board stack) + + + congo_13 + Congo (1.3) + + + congo_20 + Congo (2.0) + + + congo_21 + Congo (2.1) + + + congoa + Congo Bongo (Rev C, 3 board stack) + + + conquer + Conqueror + + + contcirc + Continental Circus (World) + + + contcircj + Continental Circus (Japan) + + + contcircu + Continental Circus (US set 1) + + + contcircua + Continental Circus (US set 2) + + + contra + Contra (US, set 1) + + + contra1 + Contra (US, set 2) + + + contrab + Contra (bootleg) + + + contrabj + Contra (Japan bootleg, set 1) + + + contrabj1 + Contra (Japan bootleg, set 2) + + + contraj + Contra (Japan, set 1) + + + contraj1 + Contra (Japan, set 2) + + + cookbib + Cookie & Bibi (set 1) + + + cookbib2 + Cookie & Bibi 2 + + + cookbib3 + Cookie & Bibi 3 + + + cookbiba + Cookie & Bibi (set 2) + + + cookrace + Cook Race + + + coolmini + Cool Minigame Collection + + + coolpool + Cool Pool + + + coolridr + Cool Riders + + + coozumou + Oozumou - The Grand Sumo (DECO Cassette, Japan) + + + cop01 + Cop 01 (set 1) + + + cop01a + Cop 01 (set 2) + + + cops + Cops + + + copsnrob + Cops'n Robbers + + + coralr2 + Coral Riches II (1VXFC5472, New Zealand) + + + coronatn + Coronation Street Quiz Game + + + coronatnd + Coronation Street Quiz Game (Protocol) + + + corsario + Corsario + + + corv_21 + Corvette (2.1) + + + corv_lx1 + Corvette (LX1) + + + corv_px4 + Corvette (PX4) + + + cosflash + Cosmic Flash + + + cosmccop + Cosmic Cop (World) + + + cosmic + Cosmic + + + cosmica + Cosmic Alien (version II) + + + cosmica1 + Cosmic Alien (first version) + + + cosmica2 + Cosmic Alien (early version II?) + + + cosmicg + Cosmic Guerilla + + + cosmicgi + Cosmic Guerilla (Spanish bootleg) + + + cosmicm2 + Cosmic Monsters 2 + + + cosmicmo + Cosmic Monsters (version II) + + + cosmo + Cosmo + + + cosmogng + Cosmo Gang the Video (US) + + + cosmogngj + Cosmo Gang the Video (Japan) + + + cosmos + Cosmos + + + cotton + Cotton (set 4, World, FD1094 317-0181a) + + + cotton2 + Cotton 2 (JUET 970902 V1.000) + + + cottonbm + Cotton Boomerang (JUET 980709 V1.000) + + + cottong + Cotocoto Cottong + + + cottonj + Cotton (set 2, Japan, Rev B, FD1094 317-0179b) + + + cottonja + Cotton (set 1, Japan, Rev A, FD1094 317-0179a) + + + cottonu + Cotton (set 3, US, FD1094 317-0180) + + + countdwn + Count-Down + + + countrun + Counter Run (NS6201-A 1988.3) + + + countrunb + Counter Run (bootleg set 1) + + + countrunb2 + Counter Run (bootleg set 2) + + + countryc + Country Club + + + couple + The Couples (set 1) + + + couplei + The Couples (set 3) + + + couplep + The Couples (set 2) + + + cowboy + Cowboy Eight Ball + + + cowrace + Cow Race (King Derby hack) + + + cp_15 + The Champion Pub (1.5) + + + cp_16 + The Champion Pub (1.6) + + + cpoker + Champion Poker (v220I) + + + cpokerpk + Champion Italian PK (bootleg, blue board) + + + cpokerpkg + Champion Italian PK (bootleg, green board) + + + cpokert + Champion Poker (v200G) + + + cpokerx + Champion Poker (v100) + + + cppicf + Peter Pepper's Ice Cream Factory (DECO Cassette, set 1) + + + cppicf2 + Peter Pepper's Ice Cream Factory (DECO Cassette, set 2) + + + cprobowl + Pro Bowling (DECO Cassette) + + + cprogolf + Tournament Pro Golf (DECO Cassette) + + + cprogolf18 + 18 Challenge Pro Golf (DECO Cassette, Japan) + + + cprogolfj + Tournament Pro Golf (DECO Cassette, Japan) + + + cps3boot + CPS3 Multi-game bootleg for HD6417095 type SH2 (New Generation, 3rd Strike, JoJo's Venture, JoJo's Bizarre Adventure, Red Earth) + + + cps3boota + CPS3 Multi-game bootleg for dead security cart (New Generation, 2nd Impact, 3rd Strike) + + + cps3bs32 + Street Fighter III 2nd Impact: Giant Attack (USA 970930, bootleg for HD6417095 type SH2, V3) + + + cps3bs32a + Street Fighter III 2nd Impact: Giant Attack (USA 970930, bootleg for HD6417095 type SH2, older) + + + cpsoccer + Pro Soccer (DECO Cassette) + + + cpsoccerj + Pro Soccer (DECO Cassette, Japan) + + + cptennis + Pro Tennis (DECO Cassette) + + + cpthook + Captain Hook + + + cpzn1 + ZN1 + + + cpzn2 + ZN2 + + + cr589fw + CD-ROM Drive Updater 2.0 (700B04) + + + cr589fwa + CD-ROM Drive Updater (700A04) + + + crackndj + Crackin' DJ + + + cracksht + Crackshot (version 2.0) + + + crakndj2 + Crackin' DJ Part 2 + + + crash + Crash + + + crater + Crater Raider + + + crazyblk + Crazy Blocks + + + crazycop + Crazy Cop (Japan) + + + crazyfgt + Crazy Fight + + + crazywar + Crazy War + + + crbaloon + Crazy Balloon (set 1) + + + crbaloon2 + Crazy Balloon (set 2) + + + crgolf + Crowns Golf (834-5419-04) + + + crgolfa + Crowns Golf (834-5419-03) + + + crgolfb + Crowns Golf (set 3) + + + crgolfbt + Champion Golf (bootleg) + + + crgolfc + Champion Golf + + + crgolfhi + Crowns Golf in Hawaii + + + crimec + Crime City (World) + + + crimecj + Crime City (Japan) + + + crimecu + Crime City (US) + + + crimep2 + Crime Patrol 2: Drug Wars v1.3 + + + crimep211 + Crime Patrol 2: Drug Wars v1.1 + + + crimepat + Crime Patrol v1.4 + + + crimfght + Crime Fighters (US 4 players) + + + crimfght2 + Crime Fighters (World 2 Players) + + + crimfghtj + Crime Fighters (Japan 2 Players) + + + crisscrs + Criss Cross (Sweden) + + + critcrsh + Critter Crusher (EA 951204 V1.000) + + + crkdown + Crack Down (World, Floppy Based, FD1094 317-0058-04c) + + + crkdownj + Crack Down (Japan, Floppy Based, FD1094 317-0058-04b Rev A) + + + crkdownu + Crack Down (US, Floppy Based, FD1094 317-0058-04d) + + + crockman + Crock-Man + + + croquis + Croquis (Germany) + + + crospang + Cross Pang + + + crossbld + Cross Blades! (Japan) + + + crossbow + Crossbow (version 2.0) + + + croupier + Croupier (Playmark Roulette v.20.05) + + + croupiera + Croupier (Playmark Roulette v.09.04) + + + crsbingo + Poker Carnival + + + crshnscr + Crash 'n Score [TTL] + + + crshrace + Lethal Crash Race (set 1) + + + crshrace2 + Lethal Crash Race (set 2) + + + crsword + Crossed Swords (ALM-002)(ALH-002) + + + crszone + Crisis Zone (CSZO4 Ver. B) + + + crszonev2a + Crisis Zone (CSZO2 Ver. A) + + + crszonev3a + Crisis Zone (CSZO3 Ver. A) + + + crszonev3b + Crisis Zone (CSZO3 Ver. B, set 1) + + + crszonev3b2 + Crisis Zone (CSZO3 Ver. B, set 2) + + + crszonev4a + Crisis Zone (CSZO4 Ver. A) + + + crtaxihr + Crazy Taxi High Roller (Rev B) (GDX-0002B) + + + cruisin + Cruisin + + + crush + Crush Roller (set 1) + + + crush2 + Crush Roller (set 2) + + + crush3 + Crush Roller (set 3) + + + crush4 + Crush Roller (set 4) + + + crushbl + Crush Roller (bootleg set 1) + + + crushbl2 + Crush Roller (bootleg set 2) + + + crushbl3 + Crush Roller (bootleg set 3) + + + crusherm + Crusher Makochan (Japan) + + + crushs + Crush Roller (bootleg set 4) + + + crusnexo + Cruis'n Exotica (version 2.4) + + + crusnexoa + Cruis'n Exotica (version 2.0) + + + crusnexob + Cruis'n Exotica (version 1.6) + + + crusnexoc + Cruis'n Exotica (version 1.3) + + + crusnexod + Cruis'n Exotica (version 1.0) + + + crusnusa + Cruis'n USA (rev L4.1) + + + crusnusa21 + Cruis'n USA (rev L2.1) + + + crusnusa40 + Cruis'n USA (rev L4.0) + + + crusnwld + Cruis'n World (rev L2.5) + + + crusnwld13 + Cruis'n World (rev L1.3) + + + crusnwld17 + Cruis'n World (rev L1.7) + + + crusnwld19 + Cruis'n World (rev L1.9) + + + crusnwld20 + Cruis'n World (rev L2.0) + + + crusnwld23 + Cruis'n World (rev L2.3) + + + crusnwld24 + Cruis'n World (rev L2.4) + + + cryptklr + Crypt Killer (GQ420 UAA) + + + crysbios + Crystal System BIOS + + + crysking + The Crystal of Kings + + + crystal + Crystal Colours (CMC hardware) + + + crystal2 + Crystal Gal 2 (Japan 860620) + + + crystalc + Crystals Colours (Ver 1.01) + + + crystalg + Crystal Gal (Japan 860512) + + + crystals + Crystal Springs (10155811, Malaysia) + + + crzmon2 + Crazy Monkey 2 (100310) + + + crzmon2_2 + Crazy Monkey 2 (100311 Lottery) + + + crzmon2_3 + Crazy Monkey 2 (100315 Entertainment) + + + crzrally + Crazy Rally (set 1) + + + crzrallya + Crazy Rally (set 2) + + + crzrallyg + Crazy Rally (Gecas license) + + + crzytaxi + Crazy Taxi (JPN, USA, EXP, KOR, AUS) + + + csclub + Capcom Sports Club (Euro 971017) + + + csclub1 + Capcom Sports Club (Euro 970722) + + + csclub1d + Capcom Sports Club (Euro 970722 Phoenix Edition) (bootleg) + + + cscluba + Capcom Sports Club (Asia 970722) + + + csclubh + Capcom Sports Club (Hispanic 970722) + + + csclubj + Capcom Sports Club (Japan 970722) + + + csclubjy + Capcom Sports Club (Japan 970722, yellow case) + + + cscrtry + Scrum Try (DECO Cassette, set 1) + + + cscrtry2 + Scrum Try (DECO Cassette, set 2) + + + csdtenis + Super Doubles Tennis (DECO Cassette, Japan) + + + cshift + Chicken Shift + + + cshooter + Cross Shooter (not encrypted) + + + cshootere + Cross Shooter (encrypted) + + + csilver + Captain Silver (World) + + + csilverj + Captain Silver (Japan) + + + csk227it + Champion Skill (with Ability) + + + csk234it + Champion Skill (Ability, Poker & Symbols) + + + cskater + Skater (DECO Cassette, Japan) + + + csmash + Cosmic Smash (JPN, USA, EXP, KOR, AUS) (Rev A) + + + csmasho + Cosmic Smash (JPN, USA, EXP, KOR, AUS) + + + csmic_l1 + Cosmic Gunfight (L-1) + + + cspike + Gun Spike (JPN) / Cannon Spike (USA, EXP, KOR, AUS) + + + csplayh1 + Super CD Dai8dan Mahjong Hanafuda Cosplay Tengoku (Japan) + + + csplayh5 + Mahjong Hanafuda Cosplay Tengoku 5 (Japan) + + + csplayh7 + Cosplay Tengoku 7 - Super Kogal Grandprix (Japan) + + + csprint + Championship Sprint (rev 3) + + + csprint1 + Championship Sprint (rev 1) + + + csprint2 + Championship Sprint (rev 2) + + + csprintf + Championship Sprint (French) + + + csprintg + Championship Sprint (German, rev 2) + + + csprintg1 + Championship Sprint (German, rev 1) + + + csprints + Championship Sprint (Spanish, rev 2) + + + csprints1 + Championship Sprint (Spanish, rev 1) + + + cstlevna + Vs. Castlevania + + + cstripxi + Casino Strip XI + + + csuperas + Super Astro Fighter (DECO Cassette) + + + cswat + Cosmoswat + + + csweetht + Sweet Heart (DECO Cassette) + + + ct2k3sa + Crouching Tiger Hidden Dragon 2003 Super Plus alternate (The King of Fighters 2001 bootleg) + + + ct2k3sp + Crouching Tiger Hidden Dragon 2003 Super Plus (The King of Fighters 2001 bootleg) + + + ctcheese + Cut The Cheese (Redemption) + + + ctchzdlx + Cut The Cheese Deluxe (Redemption) + + + cterrani + Terranean (DECO Cassette) + + + cthd2003 + Crouching Tiger Hidden Dragon 2003 (The King of Fighters 2001 bootleg) + + + ctisland + Treasure Island (DECO Cassette, set 1) + + + ctisland2 + Treasure Island (DECO Cassette, set 2) + + + ctisland3 + Treasure Island (DECO Cassette, set 3) + + + ctomaday + Captain Tomaday + + + ctornado + Tornado (DECO Cassette) + + + ctribe + The Combatribes (US) + + + ctribe1 + The Combatribes (US set 1?) + + + ctribeb + The Combatribes (bootleg set 1) + + + ctribeb2 + The Combatribes (bootleg set 2) + + + ctribej + The Combatribes (Japan) + + + ctrpllrp + Caterpillar Pacman Hack + + + ctsttape + Test Tape (DECO Cassette) + + + cubeqst + Cube Quest (01/04/84) + + + cubeqsta + Cube Quest (12/30/83) + + + cubybop + Cuby Bop (location test) + + + cueball + Cue Ball Wizard + + + cuebrick + Cue Brick (World version D) + + + cuebrickj + Cue Brick (Japan) + + + cultname + Seimei-Kantei-Meimei-Ki Cult Name + + + cultures + Jibun wo Migaku Culture School Mahjong Hen + + + cuoreuno + Cuore 1 (Italian) + + + cupfinal + Taito Cup Finals (Ver 1.0O 1993/02/28) + + + cupsoc + Seibu Cup Soccer (set 1) + + + cupsoca + Seibu Cup Soccer (set 2) + + + cupsocb + Seibu Cup Soccer (set 3) + + + cupsocs + Seibu Cup Soccer :Selection: (set 1) + + + cupsocs2 + Seibu Cup Soccer :Selection: (set 2) + + + cupsocsb + Seibu Cup Soccer :Selection: (bootleg, set 1) + + + cupsocsb2 + Seibu Cup Soccer :Selection: (bootleg, set 2) + + + cupsocsb3 + Seibu Cup Soccer :Selection: (bootleg, set 3) + + + curvebal + Curve Ball + + + cutieq + Cutie Q + + + cv_10 + Cirqus Voltaire (1.0) + + + cv_11 + Cirqus Voltaire (1.1) + + + cv_13 + Cirqus Voltaire (1.3) + + + cv_14 + Cirqus Voltaire (1.4) + + + cv_20h + Cirqus Voltaire (2.0H) + + + cvs2gd + Capcom Vs. SNK 2 Millionaire Fighting 2001 (Rev A) (GDL-0007A) + + + cvsgd + Capcom Vs. SNK Millennium Fight 2000 Pro (GDL-0004) + + + cworld + Capcom World (Japan) + + + cworld2j + Adventure Quiz Capcom World 2 (Japan 920611) + + + cybattlr + Cybattler + + + cyberbal + Cyberball (rev 4) + + + cyberbal2 + Cyberball (rev 2) + + + cyberbal2p + Cyberball 2072 (2 player, rev 4) + + + cyberbal2p1 + Cyberball 2072 (2 player, rev 1) + + + cyberbal2p2 + Cyberball 2072 (2 player, rev 2) + + + cyberbal2p3 + Cyberball 2072 (2 player, rev 3) + + + cyberbalp + Cyberball (prototype) + + + cyberbalt + Tournament Cyberball 2072 (rev 2) + + + cyberbalt1 + Tournament Cyberball 2072 (rev 1) + + + cyberlip + Cyber-Lip (NGM-010) + + + cybertnk + Cyber Tank (v1.4) + + + cybots + Cyberbots: Fullmetal Madness (Euro 950424) + + + cybotsj + Cyberbots: Fullmetal Madness (Japan 950420) + + + cybotsjd + Cyberbots: Fullmetal Madness (Japan 950424) (decrypted bootleg) + + + cybotsu + Cyberbots: Fullmetal Madness (USA 950424) + + + cybotsud + Cyberbots: Fullmetal Madness (USA 950424 Phoenix Edition) (bootleg) + + + cybrcomm + Cyber Commando (Rev. CY1, Japan) + + + cybrcycc + Cyber Cycles (Rev. CB2 Ver.C) + + + cybrnaut + Cybernaut + + + cybsled + Cyber Sled (World) + + + cybsledj + Cyber Sled (Japan) + + + cyclemb + Cycle Maabou (Japan) + + + cycln_l4 + Cyclone (L-4) + + + cycln_l5 + Cyclone (L-5) + + + cyclopes + Cyclopes + + + cyclshtg + Cycle Shooting + + + cyclwarr + Cycle Warriors (set 1) + + + cyclwarra + Cycle Warriors (set 2) + + + cyvern + Cyvern (US) + + + cyvernj + Cyvern (Japan) + + + czeroize + Zeroize (DECO Cassette) + + + czmon_13 + Crazy Monkey (100311 World) + + + czmon_15 + Crazy Monkey (100311 Entertainment) + + + czmon_16 + Crazy Monkey (100312 Russia) + + + czmon_5 + Crazy Monkey (030421 World) + + + czmon_7 + Crazy Monkey (031110 World) + + + czmon_7a + Crazy Monkey (bootleg, 031110, backdoor set 1) + + + czmon_7b + Crazy Monkey (bootleg, 031110, backdoor set 2) + + + czmon_8 + Crazy Monkey (050120 World) + + + czmon_8a + Crazy Monkey (bootleg, 050120, backdoor) + + + czmon_8b + Crazy Monkey (bootleg, 050120, changed version text) + + + czmon_8c + Crazy Monkey (bootleg, 050120, VIDEO GAME-1 CM01) + + + czmon_8d + Crazy Monkey (bootleg, 050120, LOTTOGAME (I)) + + + czmon_8e + Crazy Monkey (bootleg, 050120, LOTO PROGRAM V-CM2) + + + czmon_8f + Crazy Monkey (bootleg, 050120, LOTOS CM01) + + + czmon_9 + Crazy Monkey (070315 Russia) + + + czmon_9a + Crazy Monkey (bootleg, 070315, VIDEO GAME-1 O01 set 1) + + + czmon_9b + Crazy Monkey (bootleg, 070315, VIDEO GAME-1 O01 set 2) + + + czmon_9c + Crazy Monkey (bootleg, 070315, payout percentage 70) + + + d9final + Dream 9 Final (v2.24) + + + dacholer + Dacholer + + + dadandrn + Kyukyoku Sentai Dadandarn (ver JAA) + + + dai2kaku + Dai-Dai-Kakumei (Japan) + + + dai3wksi + Dai San Wakusei Meteor (Japan) + + + daikaiju + Daikaiju no Gyakushu + + + daimakai + Daimakaimura (Japan) + + + daimakair + Daimakaimura (Japan Resale Ver.) + + + daimyojn + Mahjong Daimyojin (Japan, T017-PB-00) + + + daioh + Daioh (set 1) + + + daioha + Daioh (set 2) + + + daireika + Mahjong Daireikai (Japan) + + + dairesya + Dai Ressya Goutou (Japan) + + + daisenpu + Daisenpu (Japan) + + + daiskiss + Daisu-Kiss (ver JAA) + + + daisyari + Daisyarin [BET] (Japan) + + + daitorid + Daitoride + + + daitorida + Daitoride (YMF278B version) + + + daiyogen + Mahjong Daiyogen (Japan) + + + dakar + Dakar + + + dakkochn + DakkoChan House (MC-8123B, 317-5014) + + + dambustr + Dambusters (US, set 1) + + + dambustra + Dambusters (US, set 2) + + + dambustruk + Dambusters (UK) + + + danceyes + Dancing Eyes (US, DC3/VER.C) + + + danceyesj + Dancing Eyes (Japan, DC1/VER.A) + + + danchih + Danchi de Hanafuda (J 990607 V1.400) + + + danchiq + Danchi de Quiz Okusan Yontaku Desuyo! (J 001128 V1.200) + + + dangar + Ufo Robo Dangar (12/1/1986) + + + dangar2 + Ufo Robo Dangar (9/26/1986) + + + dangarb + Ufo Robo Dangar (bootleg) + + + dangcurv + Dangerous Curves (Ver 2.2 J) + + + dangerz + Danger Zone + + + dangseed + Dangerous Seed (Japan) + + + dankuga + Dan-Ku-Ga (Ver 0.0J 1994/12/13) (Prototype) + + + daraku + Daraku Tenshi - The Fallen Angels + + + darius + Darius (World) + + + darius2 + Darius II (triple screen) (Japan) + + + darius2d + Darius II (dual screen) (Japan, Rev 2) + + + darius2do + Darius II (dual screen) (Japan, Rev 1) + + + dariuse + Darius (Extra) (Japan) + + + dariusg + Darius Gaiden - Silver Hawk (Ver 2.5O 1994/09/19) + + + dariusgj + Darius Gaiden - Silver Hawk (Ver 2.5J 1994/09/19) + + + dariusgu + Darius Gaiden - Silver Hawk (Ver 2.5A 1994/09/19) + + + dariusgx + Darius Gaiden - Silver Hawk Extra Version (Ver 2.7J 1995/03/06) (Official Hack) + + + dariusj + Darius (Japan) + + + dariuso + Darius (Japan old version) + + + darkadv + Dark Adventure + + + darkedge + Dark Edge (World) + + + darkedgej + Dark Edge (Japan) + + + darkhleg + Dark Horse Legend (GX706 VER. JAA) + + + darkhors + Dark Horse (bootleg of Jockey Club II) + + + darkmist + The Lost Castle In Darkmist + + + darkplnt + Dark Planet + + + darkseal + Dark Seal (World revision 3) + + + darkseal1 + Dark Seal (World revision 1) + + + darkseal2 + Dark Seal 2 (Japan v2.1) + + + darksealj + Dark Seal (Japan revision 4) + + + darkshad + Dark Shadow + + + darktowr + Dark Tower + + + darkwar + Dark Warrior + + + darthvdr + Darth Vader (bootleg of Space Invaders) + + + darwin + Darwin 4078 (Japan) + + + dassault + Desert Assault (US) + + + dassault4 + Desert Assault (US 4 Players) + + + dayto2pe + Daytona USA 2 Power Edition + + + daytona + Daytona USA (Japan, Revision A) + + + daytona2 + Daytona USA 2 (Revision A) + + + daytona93 + Daytona USA Deluxe '93 + + + daytonam + Daytona USA (Japan, To The MAXX) + + + daytonas + Daytona USA (With Saturn Adverts) + + + daytonase + Daytona USA Special Edition (Japan, Revision A) + + + daytonat + Daytona USA (Japan, Turbo hack, set 1) + + + daytonata + Daytona USA (Japan, Turbo hack, set 2) + + + dazzler + Dazzler + + + dbc + Da Ban Cheng (Hong Kong, V027H) + + + dblaxle + Double Axle (US) + + + dblaxleu + Double Axle (US, earlier) + + + dblchal + Double Challenge (Version 1.5R, set 1) + + + dblchalc1 + Double Challenge (Version 1.5R, set 2) + + + dblchald1 + Double Challenge (Version 1.5R, set 3) + + + dblchalo + Double Challenge (Version 1.1) + + + dblchalv1 + Double Challenge (Version 1.5R Dual) + + + dblcrown + Double Crown (v1.0.3) + + + dbldynj + The Double Dynamites (Japan) + + + dbldynu + The Double Dynamites (US) + + + dblewing + Double Wings + + + dblplay + Super Baseball Double Play Home Run Derby + + + dblpoint + Double Point + + + dblpointd + Double Point (Dong Bang Electron, bootleg?) + + + dbreed + Dragon Breed (M81 PCB version) + + + dbreedm72 + Dragon Breed (M72 PCB version) + + + dbz + Dragonball Z (rev B) + + + dbz2 + Dragonball Z 2 - Super Battle + + + dbza + Dragonball Z (rev A) + + + dbzvrvs + Dragon Ball Z V.R.V.S. (Japan) + + + dcclub + Dynamic Country Club (World, ROM Based) + + + dcclubfd + Dynamic Country Club (US, Floppy Based, FD1094 317-0058-09d) + + + dcclubj + Dynamic Country Club (Japan, ROM Based) + + + dcheese + Double Cheese + + + dcon + D-Con + + + dcrown + Dream Crown (Set 1) + + + dcrowna + Dream Crown (Set 2) + + + dd_l2 + Dr. Dude (LA-2) + + + dd_p06 + Dr. Dude (PA-6 WPC) + + + dd_p6 + Dr. Dude (PA-6) + + + dd_p7 + Dr. Dude (PA-7 WPC) + + + dday + D-Day + + + ddayc + D-Day (Centuri) + + + ddayjlc + D-Day (Jaleco set 1) + + + ddayjlca + D-Day (Jaleco set 2) + + + ddcrew + D. D. Crew (World, 3 Players, FD1094 317-0190) + + + ddcrew1 + D. D. Crew (World, 4 Players, FD1094 317-0187) + + + ddcrew2 + D. D. Crew (World, 2 Players, FD1094 317-0184) + + + ddcrewj + D. D. Crew (Japan, 4 Players, FD1094 317-0185) + + + ddcrewj2 + D. D. Crew (Japan, 2 Players, FD1094 317-0182) + + + ddcrewu + D. D. Crew (US, 4 Players, FD1094 317-0186) + + + ddealer + Double Dealer + + + ddenlovj + Don Den Lover Vol. 1 - Shiro Kuro Tsukeyo! (Japan) + + + ddenlovr + Don Den Lover Vol. 1 (Hong Kong) + + + ddenlovrb + Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea, bootleg) + + + ddenlovrk + Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea) + + + ddonpach + DoDonPachi (International, Master Ver. 97/02/05) + + + ddonpachj + DoDonPachi (Japan, Master Ver. 97/02/05) + + + ddp2 + DoDonPachi II - Bee Storm (World, ver. 102) + + + ddp2100 + DoDonPachi II - Bee Storm (World, ver. 100) + + + ddp2100c + DoDonPachi II - Bee Storm (China, ver. 100) + + + ddp2100hk + DoDonPachi II - Bee Storm (Hong Kong, ver. 100) + + + ddp2100j + DoDonPachi II - Bee Storm (Japan, ver. 100) + + + ddp2100k + DoDonPachi II - Bee Storm (Korea, ver. 100) + + + ddp2100t + DoDonPachi II - Bee Storm (Taiwan, ver. 100) + + + ddp2101 + DoDonPachi II - Bee Storm (World, ver. 101) + + + ddp2101c + DoDonPachi II - Bee Storm (China, ver. 101) + + + ddp2101hk + DoDonPachi II - Bee Storm (Hong Kong, ver. 101) + + + ddp2101j + DoDonPachi II - Bee Storm (Japan, ver. 101) + + + ddp2101k + DoDonPachi II - Bee Storm (Korea, ver. 101) + + + ddp2101t + DoDonPachi II - Bee Storm (Taiwan, ver. 101) + + + ddp2c + DoDonPachi II - Bee Storm (China, ver. 102) + + + ddp2hk + DoDonPachi II - Bee Storm (Hong Kong, ver. 102) + + + ddp2j + DoDonPachi II - Bee Storm (Japan, ver. 102) + + + ddp2k + DoDonPachi II - Bee Storm (Korea, ver. 102) + + + ddp2t + DoDonPachi II - Bee Storm (Taiwan, ver. 102) + + + ddpdfk + DoDonPachi Dai-Fukkatsu Ver 1.5 (2008/06/23 MASTER VER 1.5) + + + ddpdfk10 + DoDonPachi Dai-Fukkatsu Ver 1.0 (2008/05/16 MASTER VER) + + + ddpdoj + DoDonPachi Dai-Ou-Jou V101 (2002.04.05.Master Ver) + + + ddpdoja + DoDonPachi Dai-Ou-Jou V100 (2002.04.05.Master Ver) + + + ddpdojb + DoDonPachi Dai-Ou-Jou (2002.04.05 Master Ver) + + + ddpdojblk + DoDonPachi Dai-Ou-Jou (2002.10.07.Black Ver) + + + ddpdojblka + DoDonPachi Dai-Ou-Jou (2002.10.07 Black Ver) + + + ddpdojh + Dodonpachi Daioujou Tamashii (V201, China) + + + ddr2m + Dance Dance Revolution 2nd Mix (GN895 VER. JAA) + + + ddr2mc + Dance Dance Revolution 2nd Mix with beatmaniaIIDX CLUB VERSiON (GE896 VER. JAA) + + + ddr2mc2 + Dance Dance Revolution 2nd Mix with beatmaniaIIDX substream CLUB VERSiON 2 (GE984 VER. JAA) + + + ddr2ml + Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAB) + + + ddr2mla + Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAA) + + + ddr3ma + Dance Dance Revolution 3rd Mix (GN887 VER. AAA) + + + ddr3mj + Dance Dance Revolution 3rd Mix (GN887 VER. JAA) + + + ddr3mk + Dance Dance Revolution 3rd Mix - Ver.Korea2 (GN887 VER. KBA) + + + ddr3mka + Dance Dance Revolution 3rd Mix - Ver.Korea (GN887 VER. KAA) + + + ddr3mp + Dance Dance Revolution 3rd Mix Plus (G*A22 VER. JAA) + + + ddr4m + Dance Dance Revolution 4th Mix (G*A33 VER. AAA) + + + ddr4mj + Dance Dance Revolution 4th Mix (G*A33 VER. JAA) + + + ddr4mp + Dance Dance Revolution 4th Mix Plus (G*A34 VER. JAA) + + + ddr4mps + Dance Dance Revolution 4th Mix Plus Solo (G*A34 VER. JBA) + + + ddr4ms + Dance Dance Revolution 4th Mix Solo (G*A33 VER. ABA) + + + ddr4msj + Dance Dance Revolution 4th Mix Solo (G*A33 VER. JBA) + + + ddr5m + Dance Dance Revolution 5th Mix (G*A27 VER. JAA) + + + ddra + Dance Dance Revolution (GN845 VER. AAA) + + + ddragon + Double Dragon (Japan) + + + ddragon2 + Double Dragon II - The Revenge (World) + + + ddragon2u + Double Dragon II - The Revenge (US) + + + ddragon3 + Double Dragon 3 - The Rosetta Stone (US) + + + ddragon3b + Double Dragon 3 - The Rosetta Stone (bootleg) + + + ddragon3j + Double Dragon 3 - The Rosetta Stone (Japan) + + + ddragon3p + Double Dragon 3 - The Rosetta Stone (prototype) + + + ddragon6809 + Double Dragon (bootleg with 3xM6809, set 1) + + + ddragon6809a + Double Dragon (bootleg with 3xM6809, set 2) + + + ddragonb + Double Dragon (bootleg with HD6309) + + + ddragonb2 + Double Dragon (bootleg) + + + ddragonba + Double Dragon (bootleg with M6803) + + + ddragonu + Double Dragon (US set 1) + + + ddragonua + Double Dragon (US set 2) + + + ddragonub + Double Dragon (US set 3) + + + ddragonw + Double Dragon (World set 1) + + + ddragonw1 + Double Dragon (World set 2) + + + ddrbocd + Dance Dance Revolution Best of Cool Dancers (GE892 VER. JAA) + + + ddream95 + Dunk Dream '95 (Japan 1.4, EAM) + + + ddrextrm + Dance Dance Revolution Extreme (G*C36 VER. JAA) + + + ddribble + Double Dribble + + + ddribblep + Double Dribble (prototype?) + + + ddrj + Dance Dance Revolution - Internet Ranking Ver (GC845 VER. JBA) + + + ddrja + Dance Dance Revolution (GC845 VER. JAA) + + + ddrjb + Dance Dance Revolution (GC845 VER. JAB) + + + ddrmax + DDR Max - Dance Dance Revolution 6th Mix (G*B19 VER. JAA) + + + ddrmax2 + DDR Max 2 - Dance Dance Revolution 7th Mix (G*B20 VER. JAA) + + + ddrs2k + Dance Dance Revolution Solo 2000 (GC905 VER. AAA) + + + ddrs2kj + Dance Dance Revolution Solo 2000 (GC905 VER. JAA) + + + ddrsbm + Dance Dance Revolution Solo Bass Mix (GQ894 VER. JAA) + + + ddru + Dance Dance Revolution (GN845 VER. UAA) + + + ddrusa + Dance Dance Revolution USA (G*A44 VER. UAA) + + + ddsom + Dungeons & Dragons: Shadow over Mystara (Euro 960619) + + + ddsoma + Dungeons & Dragons: Shadow over Mystara (Asia 960619) + + + ddsomb + Dungeons & Dragons: Shadow over Mystara (Brazil 960223) + + + ddsomh + Dungeons & Dragons: Shadow over Mystara (Hispanic 960223) + + + ddsomj + Dungeons & Dragons: Shadow over Mystara (Japan 960619) + + + ddsomjr1 + Dungeons & Dragons: Shadow over Mystara (Japan 960206) + + + ddsomr1 + Dungeons & Dragons: Shadow over Mystara (Euro 960223) + + + ddsomr2 + Dungeons & Dragons: Shadow over Mystara (Euro 960209) + + + ddsomr3 + Dungeons & Dragons: Shadow over Mystara (Euro 960208) + + + ddsomu + Dungeons & Dragons: Shadow over Mystara (USA 960619) + + + ddsomud + Dungeons & Dragons: Shadow over Mystara (USA 960619 Phoenix Edition) (bootleg) + + + ddsomur1 + Dungeons & Dragons: Shadow over Mystara (USA 960209) + + + ddtod + Dungeons & Dragons: Tower of Doom (Euro 940412) + + + ddtoda + Dungeons & Dragons: Tower of Doom (Asia 940412) + + + ddtodar1 + Dungeons & Dragons: Tower of Doom (Asia 940113) + + + ddtodd + Dungeons & Dragons: Tower of Doom (Euro 940412 Phoenix Edition) (bootleg) + + + ddtodh + Dungeons & Dragons: Tower of Doom (Hispanic 940412) + + + ddtodhr1 + Dungeons & Dragons: Tower of Doom (Hispanic 940125) + + + ddtodhr2 + Dungeons & Dragons: Tower of Doom (Hispanic 940113) + + + ddtodj + Dungeons & Dragons: Tower of Doom (Japan 940412) + + + ddtodjr1 + Dungeons & Dragons: Tower of Doom (Japan 940125) + + + ddtodjr2 + Dungeons & Dragons: Tower of Doom (Japan 940113) + + + ddtodr1 + Dungeons & Dragons: Tower of Doom (Euro 940113) + + + ddtodu + Dungeons & Dragons: Tower of Doom (USA 940125) + + + ddtodur1 + Dungeons & Dragons: Tower of Doom (USA 940113) + + + ddungeon + Dangerous Dungeons (set 1) + + + ddungeone + Dangerous Dungeons (set 2) + + + ddux + Dynamite Dux (set 3, World, FD1094 317-0096) + + + ddux1 + Dynamite Dux (set 1, 8751 317-0095) + + + dduxbl + Dynamite Dux (Datsu bootleg) + + + dduxj + Dynamite Dux (set 2, Japan, FD1094 317-0094) + + + ddz + Dou Di Zhu + + + deadang + Dead Angle + + + deadconx + Dead Connection (World) + + + deadconxj + Dead Connection (Japan) + + + deadeye + Dead Eye + + + deadweap + Deadly Weapon + + + dealer + The Dealer + + + deathbrd + Death Brade (Japan ver JM-3) + + + deathcox + Death Crimson OX (JPN, USA, EXP, KOR, AUS) + + + deathrac + Death Race [TTL] + + + deathsm2 + Deathsmiles II: Makai no Merry Christmas (2009/10/14 MASTER VER 4.00) + + + deathsml + Deathsmiles (2007/10/09 MASTER VER) + + + decathlt + Decathlete (JUET 960709 V1.001) + + + decathlto + Decathlete (JUET 960424 V1.000) + + + decocass + DECO Cassette System + + + deerhunt + Deer Hunting USA V4.3 + + + deerhunta + Deer Hunting USA V4.2 + + + deerhuntb + Deer Hunting USA V4.0 + + + deerhuntc + Deer Hunting USA V3 + + + deerhuntd + Deer Hunting USA V2 + + + deerhunte + Deer Hunting USA V1 + + + defcmnd + Defense Command (Defender bootleg) + + + defence + Defence Command (Defender bootleg) + + + defender + Defender (Red label) + + + defenderb + Defender (Blue label) + + + defenderg + Defender (Green label) + + + defenderw + Defender (White label) + + + defense + Defense (System 16B, FD1089A 317-0028) + + + defndjeu + Defender (bootleg) + + + deltrace + Delta Race + + + deluxe5 + Deluxe 5 (ver. 0107, 07/01/2000, set 1) + + + deluxe5a + Deluxe 5 (ver. 0107, 07/01/2000, set 2) + + + deluxe5b + Deluxe 5 (ver. 0107, 07/01/2000, set 3) + + + demndrgn + Demons & Dragons (prototype) + + + demoderb + Demolition Derby + + + demoderbc + Demolition Derby (cocktail) + + + demoderm + Demolition Derby (MCR-3 Mono Board Version) + + + demofist + Demolish Fist + + + demon + Demon + + + demoneye + Demoneye-X + + + demonwld + Demon's World / Horror Story (set 1) + + + demonwld1 + Demon's World / Horror Story (set 2) + + + demonwld2 + Demon's World / Horror Story (set 3) + + + demonwld3 + Demon's World / Horror Story (set 4) + + + dendego + Densha de GO! (Ver 2.2 J) + + + dendego2 + Densha de GO! 2 Kousoku-hen (Ver 2.5 J) + + + dendego23k + Densha de GO! 2 Kousoku-hen 3000-bandai (Ver 2.20 J) + + + dendegox + Densha de GO! EX (Ver 2.4 J) + + + denjinmk + Denjin Makai + + + denseib + Ghost Chaser Densei (SNES bootleg) + + + depthch + Depthcharge + + + depthcho + Depthcharge (older) + + + derbyo2k + Derby Owners Club 2000 (Rev A) + + + derbyoc + Derby Owners Club (JPN, USA, EXP, KOR, AUS) (Rev B) + + + derbyoc2 + Derby Owners Club II (JPN, USA, EXP, KOR, AUS) (Rev B) + + + derbyocw + Derby Owners Club World Edition (JPN, USA, EXP, KOR, AUS) (Rev D) + + + deroon + Deroon DeroDero + + + desert + Desert Tank + + + desertbr + Desert Breaker (World, FD1094 317-0196) + + + desertbrj + Desert Breaker (Japan, FD1094 317-0194) + + + desertdn + Desert Dan + + + desertgu + Desert Gun + + + desertwr + Desert War / Wangan Sensou + + + destdrby + Destruction Derby [TTL] + + + desterth + Destination Earth (bootleg of Lunar Rescue) + + + destiny + Destiny - The Fortuneteller (USA) + + + destroyr + Destroyer (version O2) + + + destroyr1 + Destroyer (version O1) + + + destryer + Destroyer (Cidelsa) (set 1) + + + destryera + Destroyer (Cidelsa) (set 2) + + + detatwin + Detana!! Twin Bee (Japan ver. J) + + + detest + Data East Test Chip + + + deucesw2 + Deuces Wild 2 - American Heritage (Ver. 2.02F) + + + devilfsg + Devil Fish (Galaxian hardware, bootleg?) + + + devilfsh + Devil Fish + + + devilw + Devil World + + + devstors + Devastators (ver. Z) + + + devstors2 + Devastators (ver. X) + + + devstors3 + Devastators (ver. V) + + + devzone + Devil Zone + + + devzone2 + Devil Zone (easier) + + + df_djpkr + Double Joker Poker (45%-75% payout) + + + dfeveron + Dangun Feveron (Japan, Ver. 98/09/17) + + + dfndr_l4 + Defender (L-4) + + + dfruit + Fruit Dream (Japan) + + + dh_lx2 + Dirty Harry (LX-2) + + + dharma + Dharma Doujou + + + dharmak + Dharma Doujou (Korea) + + + diamond + Diamond Run + + + diamondp + Diamond Lady + + + diehard + Die Hard Arcade (UET 960515 V1.000) + + + dietgo + Diet Go Go (Euro v1.1 1992.09.26) + + + dietgoe + Diet Go Go (Euro v1.1 1992.08.04) + + + dietgoj + Diet Go Go (Japan v1.1 1992.09.26) + + + dietgou + Diet Go Go (USA v1.1 1992.09.26) + + + digdug + Dig Dug (rev 2) + + + digdug1 + Dig Dug (rev 1) + + + digdug2 + Dig Dug II (New Ver.) + + + digdug2o + Dig Dug II (Old Ver.) + + + digdugat + Dig Dug (Atari, rev 2) + + + digdugat1 + Dig Dug (Atari, rev 1) + + + digger + Digger + + + diggerc + Digger (CVS) + + + diggerma + Digger Man (prototype) + + + digsid + Dig Dug (manufactured by Sidam) + + + dimahoo + Dimahoo (Euro 000121) + + + dimahoou + Dimahoo (USA 000121) + + + dimahoud + Dimahoo (USA 000121 Phoenix Edition) (bootleg) + + + diner_l1 + Diner (L-1) Europe + + + diner_l3 + Diner (L-3) + + + diner_l4 + Diner (L-4) + + + dingo + Dingo + + + dingoe + Dingo (encrypted) + + + dino + Cadillacs and Dinosaurs (World 930201) + + + dinoeggs + Dinosaur Eggs + + + dinohunt + Dinosaur Hunter (Chinese bootleg of Cadillacs and Dinosaurs) + + + dinoj + Cadillacs: Kyouryuu Shin Seiki (Japan 930201) + + + dinopic + Cadillacs and Dinosaurs (bootleg with PIC16c57, set 1) + + + dinopic2 + Cadillacs and Dinosaurs (bootleg with PIC16c57, set 2) + + + dinorex + Dino Rex (World) + + + dinorexj + Dino Rex (Japan) + + + dinorexu + Dino Rex (US) + + + dinou + Cadillacs and Dinosaurs (USA 930201) + + + dirtdash + Dirt Dash (Rev. DT2) + + + dirtdvls + Dirt Devils (set 1) (Revision A) + + + dirtdvlsa + Dirt Devils (set 2) (Revision A) + + + dirtfoxj + Dirt Fox (Japan) + + + dirtypig + Dirty Pigskin Football + + + disco + Disco No.1 + + + disco79 + Disco '79 + + + disco_l1 + Disco Fever (L-1) + + + discoboy + Disco Boy + + + discoboyp + Disco Boy (Promat license?) + + + discof + Disco No.1 (Rev.F) + + + ditrio + Diamond Trio (set 1) + + + diverboy + Diver Boy + + + djboy + DJ Boy (set 1) + + + djboya + DJ Boy (set 2) + + + djboyj + DJ Boy (Japan) + + + dkgensan + Daiku no Gensan (Japan, M82) + + + dkgensanm72 + Daiku no Gensan (Japan, M72) + + + dking + Donkey King + + + dkingjr + Donkey King Jr. (bootleg of Donkey Kong Jr.) + + + dkong + Donkey Kong (US set 1) + + + dkong3 + Donkey Kong 3 (US) + + + dkong3b + Donkey Kong 3 (bootleg on Donkey Kong Jr. hardware) + + + dkong3j + Donkey Kong 3 (Japan) + + + dkongf + Donkey Kong Foundry (hack) + + + dkonghrd + Donkey Kong (hard kit) + + + dkongj + Donkey Kong (Japan set 1) + + + dkongjnrj + Donkey Kong Junior (Japan?) + + + dkongjo + Donkey Kong (Japan set 2) + + + dkongjo1 + Donkey Kong (Japan set 3) + + + dkongjr + Donkey Kong Junior (US set F-2) + + + dkongjrb + Donkey Kong Jr. (bootleg) + + + dkongjre + Donkey Kong Junior (E kit) + + + dkongjrj + Donkey Kong Jr. (Japan) + + + dkongjrm + Donkey Kong Jr. (bootleg on Moon Cresta hardware) + + + dkongjrpb + Donkey Kong Junior (P kit, bootleg) + + + dkongo + Donkey Kong (US set 2) + + + dkongx + Donkey Kong II - Jumpman Returns (V1.2) (hack) + + + dkongx11 + Donkey Kong II - Jumpman Returns (V1.1) (hack) + + + dlair + Dragon's Lair (US Rev. F2) + + + dlair2 + Dragon's Lair 2: Time Warp (US v3.19) + + + dlair2_211 + Dragon's Lair 2: Time Warp (US v2.11) + + + dlair2_300 + Dragon's Lair 2: Time Warp (US v3.00) + + + dlair2_312 + Dragon's Lair 2: Time Warp (US v3.12) + + + dlair2_314 + Dragon's Lair 2: Time Warp (US v3.14) + + + dlair2_315 + Dragon's Lair 2: Time Warp (US v3.15) + + + dlair2_315s + Dragon's Lair 2: Time Warp (Spanish v3.15) + + + dlair2_316e + Dragon's Lair 2: Time Warp (Euro v3.16) + + + dlair2_317e + Dragon's Lair 2: Time Warp (Euro v3.17) + + + dlair2_318 + Dragon's Lair 2: Time Warp (US v3.18) + + + dlair2_319e + Dragon's Lair 2: Time Warp (Euro v3.19) + + + dlair2_319s + Dragon's Lair 2: Time Warp (Spanish v3.19) + + + dlaira + Dragon's Lair (US Rev. A, Pioneer PR-7820) + + + dlairb + Dragon's Lair (US Rev. B, Pioneer PR-7820) + + + dlairc + Dragon's Lair (US Rev. C, Pioneer PR-7820) + + + dlaird + Dragon's Lair (US Rev. D, Pioneer LD-V1000) + + + dlaire + Dragon's Lair (US Rev. E) + + + dlairf + Dragon's Lair (US Rev. F) + + + dland + Dream Land / Super Dream Land (bootleg of Bubble Bobble) + + + dleague + Dynamite League (US) + + + dleaguej + Dynamite League (Japan) + + + dleuro + Dragon's Lair (European) + + + dlital + Dragon's Lair (Italian) + + + dm_h5 + Demolition Man (H-5) + + + dm_h6 + Demolition Man (H-6) + + + dm_la1 + Demolition Man (LA-1) + + + dm_lx3 + Demolition Man (LX-3) + + + dm_lx4 + Demolition Man (LX-4) + + + dm_pa2 + Demolition Man (PA-2) + + + dm_px5 + Demolition Man (PX-5) + + + dmdtouch + Diamond Touch (0400433V, Local) + + + dmndrby + Diamond Derby (Newer) + + + dmndrbya + Diamond Derby (Original) + + + dmnfrnt + Demon Front (68k label V105, ROM M105XX 08/05/02) (ARM label V105, ROM 08/05/02 S105XX) + + + dmnfrnta + Demon Front (68k label V102, ROM M102XX 06/19/02) (ARM label V102, ROM 05/24/02 S101XX) + + + dmnfrntb + Demon Front (68k label V103, ROM M103XX 07/05/02) (ARM label V103, ROM 07/05/02 S103XX) + + + dmnfrntpcb + Demon Front (68k label V107KR, ROM M107KR 11/03/03) (ARM label V106KR, ROM 10/16/03 S106KR) (JAMMA PCB) + + + dmx + Dance Maniax (G*874 VER. JAA) + + + dmx2m + Dance Maniax 2nd Mix (G*A39 VER. JAA) + + + dmx2majp + Dance Maniax 2nd Mix Append J-Paradise (G*A38 VER. JAA) + + + dncfrks + Dance Freaks (G*874 VER. KAA) + + + dncsprt + Dancing Spirit (Russia) (Atronic) + + + dnmtdeka + Dynamite Deka (J 960515 V1.000) + + + doa + Dead or Alive (Model 2B, Revision B) + + + doa2 + Dead or Alive 2 (JPN, USA, EXP, KOR, AUS) + + + doa2m + Dead or Alive 2 Millennium (JPN, USA, EXP, KOR, AUS) + + + doaa + Dead or Alive (Model 2A, Revision A) + + + doapp + Dead Or Alive ++ (Japan) + + + docastle + Mr. Do's Castle (set 1) + + + docastle2 + Mr. Do's Castle (set 2) + + + docastleo + Mr. Do's Castle (older) + + + dockman + Dock Man + + + dodgecty + Dodge City (9131-02) + + + dodgectya + Dodge City (2131-82, U5-0D) + + + dodgectyb + Dodge City (2131-82, U5-50) + + + dodgectyc + Dodge City (2131-82, U5-0 GT) + + + dodgem + Dodgem + + + dogfgt + Acrobatic Dog-Fight + + + dogfgtj + Dog-Fight (Japan) + + + dogfgtu + Acrobatic Dog-Fight (USA) + + + dogfight + Dog Fight (Thunderbolt) + + + dogosokb + Dogou Souken (Joystick hack bootleg) + + + dogosoke + Dogou Souken + + + dogpatch + Dog Patch + + + dogyuun + Dogyuun + + + dogyuuna + Dogyuun (older set) + + + dogyuunt + Dogyuun (location test) + + + dokaben + Dokaben (Japan) + + + dokidoki + Doki Doki Penguin Land + + + dokyusei + Mahjong Doukyuusei + + + dokyusp + Mahjong Doukyuusei Special + + + dollyptn + Dolly Parton + + + dolmen + Dolmen + + + dolphin + Dolphin Blue + + + dolphinp + Dolphin's Pearl (set 1) + + + dolphntr + Dolphin Treasure (0200424V, NSW/ACT) + + + dolphtra + Dolphin Treasure (0100424V, NSW/ACT) + + + domino + Domino Man + + + domino2 + Domino II (Bingo) + + + dominob + Domino Block + + + dominobv2 + Domino Block ver.2 + + + dominos + Dominos + + + dommy + Dommy + + + doncdoon + Hanabi de Doon! - Don-chan Puzzle + + + dondenmj + Don Den Mahjong [BET] (Japan) + + + dondokod + Don Doko Don (World) + + + dondokodj + Don Doko Don (Japan) + + + dondokodu + Don Doko Don (US) + + + donghaer + Donggul Donggul Haerong + + + donpachi + DonPachi (US) + + + donpachihk + DonPachi (Hong Kong) + + + donpachij + DonPachi (Japan) + + + donpachikr + DonPachi (Korea) + + + dorachan + Dorachan + + + doraemon + Doraemon no Eawase Montage (prototype) + + + dorodon + Dorodon (set 1) + + + dorodon2 + Dorodon (set 2) + + + dorunrun + Do! Run Run (set 1) + + + dorunrun2 + Do! Run Run (set 2) + + + dorunrunc + Do! Run Run (Do's Castle hardware, set 1) + + + dorunrunca + Do! Run Run (Do's Castle hardware, set 2) + + + dotrikun + Dottori Kun (new version) + + + dotrikun2 + Dottori Kun (old version) + + + dotron + Discs of Tron (Upright) + + + dotrona + Discs of Tron (Upright alternate) + + + dotrone + Discs of Tron (Environmental) + + + doubledr + Double Dragon (Neo-Geo) + + + douni + Mr. Do vs. Unicorns + + + dowild + Mr. Do's Wild Ride + + + downhill + Downhill Bikers (DH3 Ver. A) + + + downtown + DownTown / Mokugeki (set 1) + + + downtown2 + DownTown / Mokugeki (set 2) + + + downtownj + DownTown / Mokugeki (joystick hack) + + + downtownp + DownTown / Mokugeki (prototype) + + + dphl + Draw Poker HI-LO (M.Kramer) + + + dphla + Draw Poker HI-LO (Alt) + + + dphljp + Draw Poker HI-LO (Japanese) + + + dphlunka + Draw Poker HI-LO (unknown, rev 1) + + + dphlunkb + Draw Poker HI-LO (unknown, rev 2) + + + dplay + Double Play + + + dpoker + Draw Poker (Bally, 03-20) + + + dquizgo + Date Quiz Go Go (Korea) + + + dquizgo2 + Date Quiz Go Go Episode 2 + + + drac_l1 + Bram Stoker's Dracula (L-1) + + + drac_p11 + Bram Stoker's Dracula (P-11) + + + draco + Draco + + + dracula + Dracula + + + dragchrn + Dragon Chronicles (DC001 Ver. A) + + + dragfist + Dragonfist + + + dragnblz + Dragon Blaze + + + dragnfly + Dragonfly (Konami Endeavour) + + + dragngun + Dragon Gun (US) + + + dragngunj + Dragon Gun (Japan) + + + dragon + Dragon + + + dragoona + Dragoon Might (ver AAB) + + + dragoonj + Dragoon Might (ver JAA) + + + dragrace + Drag Race + + + dragsphr + Dragon Sphere + + + drakor + Drakor + + + drakton + Drakton (DK conversion) + + + drbyocwc + Derby Owners Club World Edition (JPN, USA, EXP, KOR, AUS) (Rev C) + + + dreambal + Dream Ball (Japan V2.4) + + + dreamwld + Dream World + + + dremshpr + Dream Shopper + + + drgnbowl + Dragon Bowl + + + drgnbstr + Dragon Buster + + + drgninja + Dragonninja (Japan) + + + drgninjab + Dragonninja (bootleg) + + + drgnmst + Dragon Master + + + drgnunit + Dragon Unit / Castle of Dragon + + + drgnwrld + Dragon World (World, V040O) + + + drgnwrldv10c + Zhong Guo Long (China, V010C) + + + drgnwrldv11h + Dong Fang Zhi Zhu (Hong Kong, V011H) + + + drgnwrldv20j + Zhong Guo Long (Japan, V020J) + + + drgnwrldv21 + Dragon World (World, V021O) + + + drgnwrldv21j + Zhong Guo Long (Japan, V021J) + + + drgnwrldv30 + Dragon World (World, V030O) + + + drgpunch + Dragon Punch (Japan) + + + drgw2 + Dragon World II (ver. 110X, Export) + + + drgw2c + Zhong Guo Long II (ver. 100C, China) + + + drgw2j + Chuugokuryuu II (ver. 100J, Japan) + + + drgw3 + Dragon World 3 (ver. 106) + + + drgw3100 + Dragon World 3 (Japan, ver. 100) + + + drgw3105 + Dragon World 3 (ver. 105) + + + drhl + Drews Revenge (v.2.89, set 1) + + + drhla + Drews Revenge (v.2.89, set 2) + + + dribling + Dribbling + + + driblingbr + Dribbling (bootleg, Brazil) + + + driblingo + Dribbling (Olympia) + + + drifto94 + Drift Out '94 - The Hard Order (Japan) + + + driftout + Drift Out (Europe) + + + driftoutj + Drift Out (Japan) + + + drivedge + Driver's Edge + + + driveout + Drive Out (bootleg) + + + driveyes + Driver's Eyes (Japan) + + + drivfrcb + Driving Force (Galaxian conversion bootleg) + + + drivfrcg + Driving Force (Galaxian conversion) + + + drivfrcp + Driving Force (Pac-Man conversion) + + + drivfrct + Top Racer (bootleg of Driving Force) + + + drktnjr + Drakton (DKJr conversion) + + + drmario + Vs. Dr. Mario + + + drmicro + Dr. Micro + + + drmmake + Dream Maker (Russia) (Atronic) + + + drmn + DrumMania (GQ881 VER. JAD) + + + drmn10m + DrumMania 10th Mix (G*D40 VER. JAA) + + + drmn2m + DrumMania 2nd Mix (GE912 VER. JAB) + + + drmn2mpu + DrumMania 2nd Mix Session Power Up Kit (GE912 VER. JAB) + + + drmn3m + DrumMania 3rd Mix (G*A23 VER. JAA) + + + drmn4m + DrumMania 4th Mix (G*A25 VER. JAA) + + + drmn5m + DrumMania 5th Mix (G*B05 VER. JAA) + + + drmn6m + DrumMania 6th Mix (G*B16 VER. JAA) + + + drmn7m + DrumMania 7th Mix power-up ver. (G*C07 VER. JBA) + + + drmn7ma + DrumMania 7th Mix (G*C07 VER. JAA) + + + drmn8m + DrumMania 8th Mix (G*C07 VER. JAA) + + + drmn9m + DrumMania 9th Mix (G*D09 VER. JAA) + + + drtomy + Dr. Tomy + + + drtoppel + Dr. Toppel's Adventure (World) + + + drtoppelj + Dr. Toppel's Tankentai (Japan) + + + drtoppelu + Dr. Toppel's Adventure (US) + + + drw80pk2 + Draw 80 Poker - Minn + + + drw80pkr + Draw 80 Poker + + + dsaber + Dragon Saber + + + dsaberj + Dragon Saber (Japan, Rev B) + + + dsem + Dancing Stage Euro Mix (G*936 VER. EAA) + + + dsem2 + Dancing Stage Euro Mix 2 (G*C23 VER. EAA) + + + dsfdct + Dancing Stage featuring Dreams Come True (GC910 VER. JCA) + + + dsfdcta + Dancing Stage featuring Dreams Come True (GC910 VER. JAA) + + + dsfdr + Dancing Stage Featuring Disney's Rave (GCA37JAA) + + + dsftkd + Dancing Stage featuring TRUE KiSS DESTiNATiON (G*884 VER. JAA) + + + dslayrr + Dragon Slayer (Russia, set 1) + + + dslayrra + Dragon Slayer (Russia, set 2) + + + dsmbl + Deathsmiles MegaBlack Label (2008/10/06 MEGABLACK LABEL VER) + + + dsoccr94 + Dream Soccer '94 (World, M107 hardware) + + + dsoccr94j + Dream Soccer '94 (Japan, M92 hardware) + + + dspirit + Dragon Spirit (new version (DS3)) + + + dspirit1 + Dragon Spirit (old version (DS1)) + + + dspirit2 + Dragon Spirit (DS2) + + + dstage + Dancing Stage - Internet Ranking Ver (GC845 VER. EBA) + + + dstagea + Dancing Stage (GN845 VER. EAA) + + + dstlk + Darkstalkers: The Night Warriors (Euro 940705) + + + dstlka + Darkstalkers: The Night Warriors (Asia 940705) + + + dstlkh + Darkstalkers: The Night Warriors (Hispanic 940818) + + + dstlku + Darkstalkers: The Night Warriors (USA 940818) + + + dstlku1d + Darkstalkers: The Night Warriors (USA 940705 Phoenix Edition) (bootleg) + + + dstlkur1 + Darkstalkers: The Night Warriors (USA 940705) + + + dtfamily + Diet Family + + + dtoyoken + Mahjong Dai Touyouken (Japan) + + + dtrvwz5 + Deluxe Trivia ? Whiz (6221-70, U5-0A Edition 5) + + + dualaslt + Dual Assault + + + dualgame + Dual Games (prototype) + + + duckhunt + Vs. Duck Hunt (set DH3 E) + + + dumpmtmt + Dump Matsumoto (Japan, 8751 317-0011a) + + + dungdrag + Dungeons & Dragons + + + dungeonm + Dungeon Magic (Ver 2.1O 1994/02/18) + + + dungeonmu + Dungeon Magic (Ver 2.1A 1994/02/18) + + + dunhuang + Mahjong Dunhuang + + + dunkmnia + Dunk Mania (Asia, DM2/VER.C) + + + dunkmniajc + Dunk Mania (Japan, DM1/VER.C) + + + dunkshot + Dunk Shot (FD1089A 317-0022) + + + dvisland + Devil Island (Version 1.4R CGA) + + + dvislando + Devil Island (Version 1.0R CGA) + + + dvlrider + Devil Riders + + + dvlriderg + Devil Riders (German speech) + + + dvlrideri + Devil Riders (Italian speech) + + + dvlsdre + Devil's Dare + + + dvlsdre2 + Devil's Dare (Sound Only) + + + dw2001 + Dragon World 2001 (V100?, Japan) + + + dw2v100x + Dragon World II (ver. 100X, Export) + + + dw_l1 + Doctor Who (L-1) + + + dw_l2 + Doctor Who (L-2) + + + dw_p5 + Doctor Who (P-5) + + + dwarfd + Draw Poker III / Dwarfs Den (Dwarf Gfx) + + + dwarfda + Draw Poker III / Dwarfs Den (Card Gfx) + + + dwex + Dragon World 3 EX (ver. 100) + + + dwpc + Dragon World Pretty Chance (V101, Japan) + + + dybb99 + Dynamite Baseball '99 (JPN) / World Series '99 (USA, EXP, KOR, AUS) (Rev B) + + + dybbnao + Dynamite Baseball NAOMI (JPN) + + + dyger + Dyger (Korea set 1) + + + dygera + Dyger (Korea set 2) + + + dygolf + Dynamic Golf / Virtua Golf (Rev A) (GDS-0009A) + + + dynabb + Dynamite Baseball + + + dynabb97 + Dynamite Baseball 97 (Revision A) + + + dynablst + Dynablaster / Bomber Man + + + dynablstb + Dynablaster / Bomber Man (bootleg) + + + dynablstb2 + Dynablaster / Bomber Man (bootleg, alt) + + + dynabomb + Dynamite Bomber (Korea, Rev 1.5) + + + dynadice + Dynamic Dice + + + dynagear + Dyna Gear + + + dynamcop + Dynamite Cop (Export, Model 2A) + + + dynamcopb + Dynamite Cop (Export, Model 2B) + + + dynamcopc + Dynamite Cop (USA, Model 2C) + + + dynamski + Dynamic Ski + + + dynashot + Dynamic Shoot Kyousou + + + dyndeka2 + Dynamite Deka 2 (Japan, Model 2A) + + + dyndeka2b + Dynamite Deka 2 (Japan, Model 2B) + + + dynduke + Dynamite Duke (Europe set 1) + + + dyndukea + Dynamite Duke (Europe set 2) + + + dyndukej + Dynamite Duke (Japan) + + + dyndukeu + Dynamite Duke (US) + + + dynobop + Dyno Bop + + + dynwar + Dynasty Wars (USA, B-Board 89624B-?) + + + dynwara + Dynasty Wars (USA, B-Board 88622B-3) + + + dynwarj + Tenchi wo Kurau (Japan) + + + dynwarjr + Tenchi wo Kurau (Japan Resale Ver.) + + + dzigzag + Zig Zag (Dig Dug hardware) + + + eagle + Eagle (set 1) + + + eagle2 + Eagle (set 2) + + + eagle3 + Eagle (set 3) + + + eaglshot + Eagle Shot Golf + + + earthjkr + U.N. Defense Force: Earth Joker (Japan) + + + earthjkrp + U.N. Defense Force: Earth Joker (Japan, prototype?) + + + eatpm_4g + Elvira and the Party Monsters (LG-4) + + + eatpm_4u + Elvira and the Party Monsters (LU-4) + + + eatpm_l1 + Elvira and the Party Monsters (LA-1) + + + eatpm_l2 + Elvira and the Party Monsters (LA-2) + + + eatpm_l4 + Elvira and the Party Monsters (LA-4) + + + eatpm_p7 + Elvira and the Party Monsters (PA-7) + + + eballchp + Eight Ball Champ + + + eballd14 + Eight Ball Deluxe (rev. 14) + + + eballdlx + Eight Ball Deluxe (rev. 15) + + + eballdlxp1 + Eight Ball Deluxe (prototype rev. 1) + + + eballdlxp2 + Eight Ball Deluxe (prototype rev. 2) + + + eballdlxp3 + Eight Ball Deluxe (prototype rev. 3) + + + eballdlxp4 + Eight Ball Deluxe (prototype rev. 4) + + + ebases + Extra Bases + + + ec_bar5 + Bar 5 (older PCB) (Electrocoin) + + + ec_bar7 + Bar 7 (Concept Games Ltd) (?) + + + ec_barx + Bar X (Electrocoin) (set 1) + + + ec_barx__0 + Bar X (Electrocoin) (set 28) + + + ec_barx__1 + Bar X (Electrocoin) (set 29) + + + ec_barx__2 + Bar X (Electrocoin) (set 30) + + + ec_barx__3 + Bar X (Electrocoin) (set 31) + + + ec_barx__4 + Bar X (Electrocoin) (set 32) + + + ec_barx__5 + Bar X (Electrocoin) (set 33) + + + ec_barx__6 + Bar X (Electrocoin) (set 34) + + + ec_barx__7 + Bar X (Electrocoin) (set 35) + + + ec_barx__8 + Bar X (Electrocoin) (set 36) + + + ec_barx__9 + Bar X (Electrocoin) (set 37) + + + ec_barx__a + Bar X (Electrocoin) (set 2) + + + ec_barx__a0 + Bar X (Electrocoin) (set 64) + + + ec_barx__a1 + Bar X (Electrocoin) (set 65) + + + ec_barx__a2 + Bar X (Electrocoin) (set 66) + + + ec_barx__a3 + Bar X (Electrocoin) (set 67) + + + ec_barx__a4 + Bar X (Electrocoin) (set 68) + + + ec_barx__a5 + Bar X (Electrocoin) (set 69) + + + ec_barx__a6 + Bar X (Electrocoin) (set 70) + + + ec_barx__a7 + Bar X (Electrocoin) (set 71) + + + ec_barx__a8 + Bar X (Electrocoin) (set 72) + + + ec_barx__a9 + Bar X (Electrocoin) (set 73) + + + ec_barx__aa + Bar X (Electrocoin) (set 38) + + + ec_barx__ab + Bar X (Electrocoin) (set 39) + + + ec_barx__ac + Bar X (Electrocoin) (set 40) + + + ec_barx__ad + Bar X (Electrocoin) (set 41) + + + ec_barx__ae + Bar X (Electrocoin) (set 42) + + + ec_barx__af + Bar X (Electrocoin) (set 43) + + + ec_barx__ag + Bar X (Electrocoin) (set 44) + + + ec_barx__ah + Bar X (Electrocoin) (set 45) + + + ec_barx__ai + Bar X (Electrocoin) (set 46) + + + ec_barx__aj + Bar X (Electrocoin) (set 47) + + + ec_barx__ak + Bar X (Electrocoin) (set 48) + + + ec_barx__al + Bar X (Electrocoin) (set 49) + + + ec_barx__am + Bar X (Electrocoin) (set 50) + + + ec_barx__an + Bar X (Electrocoin) (set 51) + + + ec_barx__ao + Bar X (Electrocoin) (set 52) + + + ec_barx__ap + Bar X (Electrocoin) (set 53) + + + ec_barx__aq + Bar X (Electrocoin) (set 54) + + + ec_barx__ar + Bar X (Electrocoin) (set 55) + + + ec_barx__as + Bar X (Electrocoin) (set 56) + + + ec_barx__at + Bar X (Electrocoin) (set 57) + + + ec_barx__au + Bar X (Electrocoin) (set 58) + + + ec_barx__av + Bar X (Electrocoin) (set 59) + + + ec_barx__aw + Bar X (Electrocoin) (set 60) + + + ec_barx__ax + Bar X (Electrocoin) (set 61) + + + ec_barx__ay + Bar X (Electrocoin) (set 62) + + + ec_barx__az + Bar X (Electrocoin) (set 63) + + + ec_barx__b + Bar X (Electrocoin) (set 3) + + + ec_barx__ba + Bar X (Electrocoin) (set 74) + + + ec_barx__bb + Bar X (Electrocoin) (set 75) + + + ec_barx__bc + Bar X (Electrocoin) (set 76) + + + ec_barx__bd + Bar X (Electrocoin) (set 77) + + + ec_barx__be + Bar X (Electrocoin) (set 78) + + + ec_barx__bf + Bar X (Electrocoin) (set 79) + + + ec_barx__bg + Bar X (Electrocoin) (set 80) + + + ec_barx__bh + Bar X (Electrocoin) (set 81) + + + ec_barx__bi + Bar X (Electrocoin) (set 82) + + + ec_barx__bj + Bar X (Electrocoin) (set 83) + + + ec_barx__bk + Bar X (Electrocoin) (set 84) + + + ec_barx__bl + Bar X (Electrocoin) (set 85) + + + ec_barx__bm + Bar X (Electrocoin) (set 86) + + + ec_barx__bn + Bar X (Electrocoin) (set 87) + + + ec_barx__bo + Bar X (Electrocoin) (set 88) + + + ec_barx__bp + Bar X (Electrocoin) (set 89) + + + ec_barx__bq + Bar X (Electrocoin) (set 90) + + + ec_barx__br + Bar X (Electrocoin) (set 91) + + + ec_barx__bs + Bar X (Electrocoin) (set 92) + + + ec_barx__bt + Bar X (Electrocoin) (set 93) + + + ec_barx__bu + Bar X (Electrocoin) (set 94) + + + ec_barx__c + Bar X (Electrocoin) (set 4) + + + ec_barx__d + Bar X (Electrocoin) (set 5) + + + ec_barx__e + Bar X (Electrocoin) (set 6) + + + ec_barx__f + Bar X (Electrocoin) (set 7) + + + ec_barx__g + Bar X (Electrocoin) (set 8) + + + ec_barx__h + Bar X (Electrocoin) (set 9) + + + ec_barx__i + Bar X (Electrocoin) (set 10) + + + ec_barx__j + Bar X (Electrocoin) (set 11) + + + ec_barx__k + Bar X (Electrocoin) (set 12) + + + ec_barx__l + Bar X (Electrocoin) (set 13) + + + ec_barx__m + Bar X (Electrocoin) (set 14) + + + ec_barx__n + Bar X (Electrocoin) (set 15) + + + ec_barx__o + Bar X (Electrocoin) (set 16) + + + ec_barx__p + Bar X (Electrocoin) (set 17) + + + ec_barx__q + Bar X (Electrocoin) (set 18) + + + ec_barx__r + Bar X (Electrocoin) (set 19) + + + ec_barx__s + Bar X (Electrocoin) (set 20) + + + ec_barx__t + Bar X (Electrocoin) (set 21) + + + ec_barx__u + Bar X (Electrocoin) (set 22) + + + ec_barx__v + Bar X (Electrocoin) (set 23) + + + ec_barx__w + Bar X (Electrocoin) (set 24) + + + ec_barx__x + Bar X (Electrocoin) (set 25) + + + ec_barx__y + Bar X (Electrocoin) (set 26) + + + ec_barx__z + Bar X (Electrocoin) (set 27) + + + ec_barxmab + Bar X (MAB PCB) (Electrocoin) + + + ec_barxo + Bar X (older PCB) (Electrocoin) (set 1) + + + ec_barxoa + Bar X (older PCB) (Electrocoin) (set 2) + + + ec_barxob + Bar X (older PCB) (Electrocoin) (set 3) + + + ec_barxoc + Bar X (older PCB) (Electrocoin) (set 4) + + + ec_barxod + Bar X (older PCB) (Electrocoin) (set 5) + + + ec_barxoe + Bar X (older PCB) (Electrocoin) (set 6) + + + ec_big7 + Big 7 / Super Big 7 (Electrocoin) (set 1) + + + ec_big7__0 + Big 7 / Super Big 7 (Electrocoin) (set 28) + + + ec_big7__1 + Big 7 / Super Big 7 (Electrocoin) (set 29) + + + ec_big7__2 + Big 7 / Super Big 7 (Electrocoin) (set 30) + + + ec_big7__3 + Big 7 / Super Big 7 (Electrocoin) (set 31) + + + ec_big7__4 + Big 7 / Super Big 7 (Electrocoin) (set 32) + + + ec_big7__5 + Big 7 / Super Big 7 (Electrocoin) (set 33) + + + ec_big7__6 + Big 7 / Super Big 7 (Electrocoin) (set 34) + + + ec_big7__7 + Big 7 / Super Big 7 (Electrocoin) (set 35) + + + ec_big7__8 + Big 7 / Super Big 7 (Electrocoin) (set 36) + + + ec_big7__9 + Big 7 / Super Big 7 (Electrocoin) (set 37) + + + ec_big7__a + Big 7 / Super Big 7 (Electrocoin) (set 2) + + + ec_big7__a0 + Big 7 / Super Big 7 (Electrocoin) (set 64) + + + ec_big7__a1 + Big 7 / Super Big 7 (Electrocoin) (set 65) + + + ec_big7__a2 + Big 7 / Super Big 7 (Electrocoin) (set 66) + + + ec_big7__aa + Big 7 / Super Big 7 (Electrocoin) (set 38) + + + ec_big7__ab + Big 7 / Super Big 7 (Electrocoin) (set 39) + + + ec_big7__ac + Big 7 / Super Big 7 (Electrocoin) (set 40) + + + ec_big7__ad + Big 7 / Super Big 7 (Electrocoin) (set 41) + + + ec_big7__ae + Big 7 / Super Big 7 (Electrocoin) (set 42) + + + ec_big7__af + Big 7 / Super Big 7 (Electrocoin) (set 43) + + + ec_big7__ag + Big 7 / Super Big 7 (Electrocoin) (set 44) + + + ec_big7__ah + Big 7 / Super Big 7 (Electrocoin) (set 45) + + + ec_big7__ai + Big 7 / Super Big 7 (Electrocoin) (set 46) + + + ec_big7__aj + Big 7 / Super Big 7 (Electrocoin) (set 47) + + + ec_big7__ak + Big 7 / Super Big 7 (Electrocoin) (set 48) + + + ec_big7__al + Big 7 / Super Big 7 (Electrocoin) (set 49) + + + ec_big7__am + Big 7 / Super Big 7 (Electrocoin) (set 50) + + + ec_big7__an + Big 7 / Super Big 7 (Electrocoin) (set 51) + + + ec_big7__ao + Big 7 / Super Big 7 (Electrocoin) (set 52) + + + ec_big7__ap + Big 7 / Super Big 7 (Electrocoin) (set 53) + + + ec_big7__aq + Big 7 / Super Big 7 (Electrocoin) (set 54) + + + ec_big7__ar + Big 7 / Super Big 7 (Electrocoin) (set 55) + + + ec_big7__as + Big 7 / Super Big 7 (Electrocoin) (set 56) + + + ec_big7__at + Big 7 / Super Big 7 (Electrocoin) (set 57) + + + ec_big7__au + Big 7 / Super Big 7 (Electrocoin) (set 58) + + + ec_big7__av + Big 7 / Super Big 7 (Electrocoin) (set 59) + + + ec_big7__aw + Big 7 / Super Big 7 (Electrocoin) (set 60) + + + ec_big7__ax + Big 7 / Super Big 7 (Electrocoin) (set 61) + + + ec_big7__ay + Big 7 / Super Big 7 (Electrocoin) (set 62) + + + ec_big7__az + Big 7 / Super Big 7 (Electrocoin) (set 63) + + + ec_big7__b + Big 7 / Super Big 7 (Electrocoin) (set 3) + + + ec_big7__c + Big 7 / Super Big 7 (Electrocoin) (set 4) + + + ec_big7__d + Big 7 / Super Big 7 (Electrocoin) (set 5) + + + ec_big7__e + Big 7 / Super Big 7 (Electrocoin) (set 6) + + + ec_big7__f + Big 7 / Super Big 7 (Electrocoin) (set 7) + + + ec_big7__g + Big 7 / Super Big 7 (Electrocoin) (set 8) + + + ec_big7__h + Big 7 / Super Big 7 (Electrocoin) (set 9) + + + ec_big7__i + Big 7 / Super Big 7 (Electrocoin) (set 10) + + + ec_big7__j + Big 7 / Super Big 7 (Electrocoin) (set 11) + + + ec_big7__k + Big 7 / Super Big 7 (Electrocoin) (set 12) + + + ec_big7__l + Big 7 / Super Big 7 (Electrocoin) (set 13) + + + ec_big7__m + Big 7 / Super Big 7 (Electrocoin) (set 14) + + + ec_big7__n + Big 7 / Super Big 7 (Electrocoin) (set 15) + + + ec_big7__o + Big 7 / Super Big 7 (Electrocoin) (set 16) + + + ec_big7__p + Big 7 / Super Big 7 (Electrocoin) (set 17) + + + ec_big7__q + Big 7 / Super Big 7 (Electrocoin) (set 18) + + + ec_big7__r + Big 7 / Super Big 7 (Electrocoin) (set 19) + + + ec_big7__s + Big 7 / Super Big 7 (Electrocoin) (set 20) + + + ec_big7__t + Big 7 / Super Big 7 (Electrocoin) (set 21) + + + ec_big7__u + Big 7 / Super Big 7 (Electrocoin) (set 22) + + + ec_big7__v + Big 7 / Super Big 7 (Electrocoin) (set 23) + + + ec_big7__w + Big 7 / Super Big 7 (Electrocoin) (set 24) + + + ec_big7__x + Big 7 / Super Big 7 (Electrocoin) (set 25) + + + ec_big7__y + Big 7 / Super Big 7 (Electrocoin) (set 26) + + + ec_big7__z + Big 7 / Super Big 7 (Electrocoin) (set 27) + + + ec_bx125 + Bar X 125 (Electrocoin) (set 1) + + + ec_bx125a + Bar X 125 (Electrocoin) (set 2) + + + ec_bx180 + Bar X (Z180 hardware) (Electrocoin) (set 1) + + + ec_bx180a + Bar X (Z180 hardware) (Electrocoin) (set 2) + + + ec_bxd7s + Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 1) + + + ec_bxd7s__a + Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 2) + + + ec_bxd7s__b + Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 3) + + + ec_bxd7s__c + Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 4) + + + ec_bxd7s__d + Bar X Diamond 7s (2006 COOL7) (Electrocoin) (set 5) + + + ec_casbx + Casino Bar X (Electrocoin) (set 1) + + + ec_casbx__a + Casino Bar X (Electrocoin) (set 2) + + + ec_casbx__b + Casino Bar X (Electrocoin) (set 3) + + + ec_casbxcon + Casino Bar X (Concept Games Ltd) (?) + + + ec_casbxo + Casino Bar X (older PCB) (Electrocoin) (set 1) + + + ec_casbxoa + Casino Bar X (older PCB) (Electrocoin) (set 2) + + + ec_casmb + Casino Multi Bar (Concept Games Ltd) (?) + + + ec_fltr + Flutter (Concept Games Ltd) (?) + + + ec_gold7 + Golden 7 (Concept Games Ltd) (?) + + + ec_jackb + Jackpot Bars (MAB PCB?) (Concept Games Ltd) (?) + + + ec_laby + Labyrinth (v8) (Electrocoin) + + + ec_labya + Labyrinth (v10) (Electrocoin) + + + ec_mag7s + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 1) + + + ec_mag7s__0 + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 28) + + + ec_mag7s__1 + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 29) + + + ec_mag7s__2 + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 30) + + + ec_mag7s__3 + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 31) + + + ec_mag7s__4 + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 32) + + + ec_mag7s__5 + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 33) + + + ec_mag7s__6 + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 34) + + + ec_mag7s__7 + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 35) + + + ec_mag7s__8 + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 36) + + + ec_mag7s__9 + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 37) + + + ec_mag7s__a + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 2) + + + ec_mag7s__a0 + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 64) + + + ec_mag7s__aa + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 38) + + + ec_mag7s__ab + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 39) + + + ec_mag7s__ac + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 40) + + + ec_mag7s__ad + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 41) + + + ec_mag7s__ae + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 42) + + + ec_mag7s__af + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 43) + + + ec_mag7s__ag + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 44) + + + ec_mag7s__ah + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 45) + + + ec_mag7s__ai + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 46) + + + ec_mag7s__aj + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 47) + + + ec_mag7s__ak + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 48) + + + ec_mag7s__al + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 49) + + + ec_mag7s__am + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 50) + + + ec_mag7s__an + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 51) + + + ec_mag7s__ao + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 52) + + + ec_mag7s__ap + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 53) + + + ec_mag7s__aq + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 54) + + + ec_mag7s__ar + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 55) + + + ec_mag7s__as + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 56) + + + ec_mag7s__at + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 57) + + + ec_mag7s__au + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 58) + + + ec_mag7s__av + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 59) + + + ec_mag7s__aw + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 60) + + + ec_mag7s__ax + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 61) + + + ec_mag7s__ay + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 62) + + + ec_mag7s__az + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 63) + + + ec_mag7s__b + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 3) + + + ec_mag7s__c + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 4) + + + ec_mag7s__d + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 5) + + + ec_mag7s__e + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 6) + + + ec_mag7s__f + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 7) + + + ec_mag7s__g + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 8) + + + ec_mag7s__h + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 9) + + + ec_mag7s__i + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 10) + + + ec_mag7s__j + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 11) + + + ec_mag7s__k + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 12) + + + ec_mag7s__l + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 13) + + + ec_mag7s__m + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 14) + + + ec_mag7s__n + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 15) + + + ec_mag7s__o + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 16) + + + ec_mag7s__p + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 17) + + + ec_mag7s__q + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 18) + + + ec_mag7s__r + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 19) + + + ec_mag7s__s + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 20) + + + ec_mag7s__t + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 21) + + + ec_mag7s__u + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 22) + + + ec_mag7s__v + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 23) + + + ec_mag7s__w + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 24) + + + ec_mag7s__x + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 25) + + + ec_mag7s__y + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 26) + + + ec_mag7s__z + Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin) (set 27) + + + ec_mgbel + Megabell (Concept Games Ltd) (?) + + + ec_multb + Multi Bar (Concept Games Ltd) (?) + + + ec_ndgxs + Nudge Xcess (MAB PCB?) (Concept Games Ltd) (?) + + + ec_oxocg + Oxo Classic Gold (Electrocoin) (?) + + + ec_oxocl + Oxo Club (Electrocoin) (?) + + + ec_oxogb + Oxo Golden Bars (Electrocoin) (?) + + + ec_oxorl + Oxo Reels (Electrocoin) (?) + + + ec_oxorv + Oxo Revolution (Electrocoin) (?) + + + ec_penni + Pennies From Heaven (v1) (Electrocoin) + + + ec_pennia + Pennies From Heaven (v6) (Electrocoin) + + + ec_pyram + Pyramid (v1) (Electrocoin) + + + ec_pyrama + Pyramid (v6) (Electrocoin) + + + ec_rcc + Royal Casino Club (Electrocoin) (?) + + + ec_rdht7 + Red Hot 7 (MAB PCB?) (Concept Games Ltd) (?) + + + ec_redbr + Red Bar (Electrocoin) (set 1) + + + ec_redbr__0 + Red Bar (Electrocoin) (set 28) + + + ec_redbr__1 + Red Bar (Electrocoin) (set 29) + + + ec_redbr__2 + Red Bar (Electrocoin) (set 30) + + + ec_redbr__3 + Red Bar (Electrocoin) (set 31) + + + ec_redbr__4 + Red Bar (Electrocoin) (set 32) + + + ec_redbr__5 + Red Bar (Electrocoin) (set 33) + + + ec_redbr__6 + Red Bar (Electrocoin) (set 34) + + + ec_redbr__7 + Red Bar (Electrocoin) (set 35) + + + ec_redbr__8 + Red Bar (Electrocoin) (set 36) + + + ec_redbr__9 + Red Bar (Electrocoin) (set 37) + + + ec_redbr__a + Red Bar (Electrocoin) (set 2) + + + ec_redbr__a0 + Red Bar (Electrocoin) (set 64) + + + ec_redbr__a1 + Red Bar (Electrocoin) (set 65) + + + ec_redbr__a2 + Red Bar (Electrocoin) (set 66) + + + ec_redbr__a3 + Red Bar (Electrocoin) (set 67) + + + ec_redbr__a4 + Red Bar (Electrocoin) (set 68) + + + ec_redbr__a5 + Red Bar (Electrocoin) (set 69) + + + ec_redbr__a6 + Red Bar (Electrocoin) (set 70) + + + ec_redbr__a7 + Red Bar (Electrocoin) (set 71) + + + ec_redbr__a8 + Red Bar (Electrocoin) (set 72) + + + ec_redbr__a9 + Red Bar (Electrocoin) (set 73) + + + ec_redbr__aa + Red Bar (Electrocoin) (set 38) + + + ec_redbr__ab + Red Bar (Electrocoin) (set 39) + + + ec_redbr__ac + Red Bar (Electrocoin) (set 40) + + + ec_redbr__ad + Red Bar (Electrocoin) (set 41) + + + ec_redbr__ae + Red Bar (Electrocoin) (set 42) + + + ec_redbr__af + Red Bar (Electrocoin) (set 43) + + + ec_redbr__ag + Red Bar (Electrocoin) (set 44) + + + ec_redbr__ah + Red Bar (Electrocoin) (set 45) + + + ec_redbr__ai + Red Bar (Electrocoin) (set 46) + + + ec_redbr__aj + Red Bar (Electrocoin) (set 47) + + + ec_redbr__ak + Red Bar (Electrocoin) (set 48) + + + ec_redbr__al + Red Bar (Electrocoin) (set 49) + + + ec_redbr__am + Red Bar (Electrocoin) (set 50) + + + ec_redbr__an + Red Bar (Electrocoin) (set 51) + + + ec_redbr__ao + Red Bar (Electrocoin) (set 52) + + + ec_redbr__ap + Red Bar (Electrocoin) (set 53) + + + ec_redbr__aq + Red Bar (Electrocoin) (set 54) + + + ec_redbr__ar + Red Bar (Electrocoin) (set 55) + + + ec_redbr__as + Red Bar (Electrocoin) (set 56) + + + ec_redbr__at + Red Bar (Electrocoin) (set 57) + + + ec_redbr__au + Red Bar (Electrocoin) (set 58) + + + ec_redbr__av + Red Bar (Electrocoin) (set 59) + + + ec_redbr__aw + Red Bar (Electrocoin) (set 60) + + + ec_redbr__ax + Red Bar (Electrocoin) (set 61) + + + ec_redbr__ay + Red Bar (Electrocoin) (set 62) + + + ec_redbr__az + Red Bar (Electrocoin) (set 63) + + + ec_redbr__b + Red Bar (Electrocoin) (set 3) + + + ec_redbr__b0 + Red Bar (Electrocoin) (set 100) + + + ec_redbr__b1 + Red Bar (Electrocoin) (set 101) + + + ec_redbr__ba + Red Bar (Electrocoin) (set 74) + + + ec_redbr__bb + Red Bar (Electrocoin) (set 75) + + + ec_redbr__bc + Red Bar (Electrocoin) (set 76) + + + ec_redbr__bd + Red Bar (Electrocoin) (set 77) + + + ec_redbr__be + Red Bar (Electrocoin) (set 78) + + + ec_redbr__bf + Red Bar (Electrocoin) (set 79) + + + ec_redbr__bg + Red Bar (Electrocoin) (set 80) + + + ec_redbr__bh + Red Bar (Electrocoin) (set 81) + + + ec_redbr__bi + Red Bar (Electrocoin) (set 82) + + + ec_redbr__bj + Red Bar (Electrocoin) (set 83) + + + ec_redbr__bk + Red Bar (Electrocoin) (set 84) + + + ec_redbr__bl + Red Bar (Electrocoin) (set 85) + + + ec_redbr__bm + Red Bar (Electrocoin) (set 86) + + + ec_redbr__bn + Red Bar (Electrocoin) (set 87) + + + ec_redbr__bo + Red Bar (Electrocoin) (set 88) + + + ec_redbr__bp + Red Bar (Electrocoin) (set 89) + + + ec_redbr__bq + Red Bar (Electrocoin) (set 90) + + + ec_redbr__br + Red Bar (Electrocoin) (set 91) + + + ec_redbr__bs + Red Bar (Electrocoin) (set 92) + + + ec_redbr__bt + Red Bar (Electrocoin) (set 93) + + + ec_redbr__bu + Red Bar (Electrocoin) (set 94) + + + ec_redbr__bv + Red Bar (Electrocoin) (set 95) + + + ec_redbr__bw + Red Bar (Electrocoin) (set 96) + + + ec_redbr__bx + Red Bar (Electrocoin) (set 97) + + + ec_redbr__by + Red Bar (Electrocoin) (set 98) + + + ec_redbr__c + Red Bar (Electrocoin) (set 4) + + + ec_redbr__d + Red Bar (Electrocoin) (set 5) + + + ec_redbr__e + Red Bar (Electrocoin) (set 6) + + + ec_redbr__f + Red Bar (Electrocoin) (set 7) + + + ec_redbr__g + Red Bar (Electrocoin) (set 8) + + + ec_redbr__h + Red Bar (Electrocoin) (set 9) + + + ec_redbr__i + Red Bar (Electrocoin) (set 10) + + + ec_redbr__j + Red Bar (Electrocoin) (set 11) + + + ec_redbr__k + Red Bar (Electrocoin) (set 12) + + + ec_redbr__l + Red Bar (Electrocoin) (set 13) + + + ec_redbr__m + Red Bar (Electrocoin) (set 14) + + + ec_redbr__n + Red Bar (Electrocoin) (set 15) + + + ec_redbr__o + Red Bar (Electrocoin) (set 16) + + + ec_redbr__p + Red Bar (Electrocoin) (set 17) + + + ec_redbr__q + Red Bar (Electrocoin) (set 18) + + + ec_redbr__r + Red Bar (Electrocoin) (set 19) + + + ec_redbr__s + Red Bar (Electrocoin) (set 20) + + + ec_redbr__t + Red Bar (Electrocoin) (set 21) + + + ec_redbr__u + Red Bar (Electrocoin) (set 22) + + + ec_redbr__v + Red Bar (Electrocoin) (set 23) + + + ec_redbr__w + Red Bar (Electrocoin) (set 24) + + + ec_redbr__x + Red Bar (Electrocoin) (set 25) + + + ec_redbr__y + Red Bar (Electrocoin) (set 26) + + + ec_redbr__z + Red Bar (Electrocoin) (set 27) + + + ec_sbarx + Super Bar X (Electrocoin) (set 1) + + + ec_sbarx__0 + Super Bar X (Electrocoin) (set 28) + + + ec_sbarx__1 + Super Bar X (Electrocoin) (set 29) + + + ec_sbarx__2 + Super Bar X (Electrocoin) (set 30) + + + ec_sbarx__3 + Super Bar X (Electrocoin) (set 31) + + + ec_sbarx__4 + Super Bar X (Electrocoin) (set 32) + + + ec_sbarx__5 + Super Bar X (Electrocoin) (set 33) + + + ec_sbarx__6 + Super Bar X (Electrocoin) (set 34) + + + ec_sbarx__7 + Super Bar X (Electrocoin) (set 35) + + + ec_sbarx__8 + Super Bar X (Electrocoin) (set 36) + + + ec_sbarx__9 + Super Bar X (Electrocoin) (set 37) + + + ec_sbarx__a + Super Bar X (Electrocoin) (set 2) + + + ec_sbarx__a0 + Super Bar X (Electrocoin) (set 64) + + + ec_sbarx__a1 + Super Bar X (Electrocoin) (set 65) + + + ec_sbarx__a2 + Super Bar X (Electrocoin) (set 66) + + + ec_sbarx__a3 + Super Bar X (Electrocoin) (set 67) + + + ec_sbarx__a4 + Super Bar X (Electrocoin) (set 68) + + + ec_sbarx__aa + Super Bar X (Electrocoin) (set 38) + + + ec_sbarx__ab + Super Bar X (Electrocoin) (set 39) + + + ec_sbarx__ac + Super Bar X (Electrocoin) (set 40) + + + ec_sbarx__ad + Super Bar X (Electrocoin) (set 41) + + + ec_sbarx__ae + Super Bar X (Electrocoin) (set 42) + + + ec_sbarx__af + Super Bar X (Electrocoin) (set 43) + + + ec_sbarx__ag + Super Bar X (Electrocoin) (set 44) + + + ec_sbarx__ah + Super Bar X (Electrocoin) (set 45) + + + ec_sbarx__ai + Super Bar X (Electrocoin) (set 46) + + + ec_sbarx__aj + Super Bar X (Electrocoin) (set 47) + + + ec_sbarx__ak + Super Bar X (Electrocoin) (set 48) + + + ec_sbarx__al + Super Bar X (Electrocoin) (set 49) + + + ec_sbarx__am + Super Bar X (Electrocoin) (set 50) + + + ec_sbarx__an + Super Bar X (Electrocoin) (set 51) + + + ec_sbarx__ao + Super Bar X (Electrocoin) (set 52) + + + ec_sbarx__ap + Super Bar X (Electrocoin) (set 53) + + + ec_sbarx__aq + Super Bar X (Electrocoin) (set 54) + + + ec_sbarx__ar + Super Bar X (Electrocoin) (set 55) + + + ec_sbarx__as + Super Bar X (Electrocoin) (set 56) + + + ec_sbarx__at + Super Bar X (Electrocoin) (set 57) + + + ec_sbarx__au + Super Bar X (Electrocoin) (set 58) + + + ec_sbarx__av + Super Bar X (Electrocoin) (set 59) + + + ec_sbarx__aw + Super Bar X (Electrocoin) (set 60) + + + ec_sbarx__ax + Super Bar X (Electrocoin) (set 61) + + + ec_sbarx__ay + Super Bar X (Electrocoin) (set 62) + + + ec_sbarx__az + Super Bar X (Electrocoin) (set 63) + + + ec_sbarx__b + Super Bar X (Electrocoin) (set 3) + + + ec_sbarx__c + Super Bar X (Electrocoin) (set 4) + + + ec_sbarx__d + Super Bar X (Electrocoin) (set 5) + + + ec_sbarx__e + Super Bar X (Electrocoin) (set 6) + + + ec_sbarx__f + Super Bar X (Electrocoin) (set 7) + + + ec_sbarx__g + Super Bar X (Electrocoin) (set 8) + + + ec_sbarx__h + Super Bar X (Electrocoin) (set 9) + + + ec_sbarx__i + Super Bar X (Electrocoin) (set 10) + + + ec_sbarx__j + Super Bar X (Electrocoin) (set 11) + + + ec_sbarx__k + Super Bar X (Electrocoin) (set 12) + + + ec_sbarx__l + Super Bar X (Electrocoin) (set 13) + + + ec_sbarx__m + Super Bar X (Electrocoin) (set 14) + + + ec_sbarx__n + Super Bar X (Electrocoin) (set 15) + + + ec_sbarx__o + Super Bar X (Electrocoin) (set 16) + + + ec_sbarx__p + Super Bar X (Electrocoin) (set 17) + + + ec_sbarx__q + Super Bar X (Electrocoin) (set 18) + + + ec_sbarx__r + Super Bar X (Electrocoin) (set 19) + + + ec_sbarx__s + Super Bar X (Electrocoin) (set 20) + + + ec_sbarx__t + Super Bar X (Electrocoin) (set 21) + + + ec_sbarx__u + Super Bar X (Electrocoin) (set 22) + + + ec_sbarx__v + Super Bar X (Electrocoin) (set 23) + + + ec_sbarx__w + Super Bar X (Electrocoin) (set 24) + + + ec_sbarx__x + Super Bar X (Electrocoin) (set 25) + + + ec_sbarx__y + Super Bar X (Electrocoin) (set 26) + + + ec_sbarx__z + Super Bar X (Electrocoin) (set 27) + + + ec_sbxbr + Super Bar X (Brunel Research) (set 1) + + + ec_sbxbra + Super Bar X (Brunel Research) (set 2) + + + ec_sbxbrb + Super Bar X (Brunel Research) (set 3) + + + ec_sbxbrc + Super Bar X (Brunel Research) (set 4) + + + ec_sbxbrd + Super Bar X (Brunel Research) (set 5) + + + ec_sbxbre + Super Bar X (Brunel Research) (set 6) + + + ec_sbxbrf + Super Bar X (Brunel Research) (set 7) + + + ec_sbxbrg + Super Bar X (Brunel Research) (set 8) + + + ec_sbxbrh + Super Bar X (Brunel Research) (set 9) + + + ec_secrt + Secret Castle (v1) (Electrocoin) + + + ec_spbdx + Super Bar X Deluxe (Electrocoin) (set 1) + + + ec_spbdx__a + Super Bar X Deluxe (Electrocoin) (set 2) + + + ec_spbdx__b + Super Bar X Deluxe (Electrocoin) (set 3) + + + ec_spbdx__c + Super Bar X Deluxe (Electrocoin) (set 4) + + + ec_spbdx__d + Super Bar X Deluxe (Electrocoin) (set 5) + + + ec_spbg7mab + Super Big 7 (MAB PCB) (Electrocoin) (?) + + + ec_sphin + Sphinx (v2) (Electrocoin) (set 1) + + + ec_sphina + Sphinx (v2) (Electrocoin) (set 2) + + + ec_sphinb + Sphinx (v1) (Electrocoin) + + + ec_stair + Stairway To Heaven (v11) (Electrocoin) + + + ec_staira + Stairway To Heaven (v1) (Electrocoin) + + + ec_stkex + Stake X (Concept Games Ltd) (?) + + + ec_sumnc + Casino Super Multi Nudger (Concept / Electrocoin Oxo) (?) + + + ec_sumnd + Super Multi Nudger (Concept / Electrocoin Oxo) (?) + + + ec_supbxcon + Super Bar X (MAB PCB) (Concept Games Ltd) (?) + + + ec_supbxmab + Super Bar X (MAB PCB) (Electrocoin) (?) + + + ec_supmb + Super Multi Bar (Concept Games Ltd) (?) + + + ec_suprl + Super Reels (Electrocoin) (?) + + + ec_unk5 + unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 1) + + + ec_unk5__a + unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 2) + + + ec_unk5__b + unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 3) + + + ec_unk5__c + unknown 'Electrocoin' Fruit Machines (Electrocoin) (set 4) + + + ec_unkt + unknown 'T' (MAB PCB?) (Concept Games Ltd) (?) + + + eca + Emergency Call Ambulance + + + ecap + Emergency Call Ambulance (US location test?) + + + ecax + Emergency Call Ambulance (Export) + + + eclipse + Eclipse + + + ecofghtr + Eco Fighters (World 931203) + + + ecofghtra + Eco Fighters (Asia 931203) + + + ecofghtrd + Eco Fighters (World 931203 Phoenix Edition) (bootleg) + + + ecofghtrh + Eco Fighters (Hispanic 931203) + + + ecofghtru + Eco Fighters (USA 940215) + + + ecofghtru1 + Eco Fighters (USA 931203) + + + edf + E.D.F. : Earth Defense Force + + + edfbl + E.D.F. : Earth Defense Force (bootleg) + + + edfu + E.D.F. : Earth Defense Force (North America) + + + edrandy + The Cliffhanger - Edward Randy (World ver 3) + + + edrandy1 + The Cliffhanger - Edward Randy (World ver 1) + + + edrandy2 + The Cliffhanger - Edward Randy (World ver 2) + + + edrandyj + The Cliffhanger - Edward Randy (Japan ver 3) + + + eforest + Enchanted Forest (12XF528902, US) + + + eforesta + Enchanted Forest (4VXFC818, NSW) + + + eforestb + Enchanted Forest (3VXFC5343, New Zealand) + + + egghunt + Egg Hunt + + + eggor + Eggor + + + eggs + Eggs (USA) + + + eggventr + Egg Venture (Release 10) + + + eggventr2 + Egg Venture (Release 2) + + + eggventr7 + Egg Venture (Release 7) + + + eggventr8 + Egg Venture (Release 8) + + + eggventra + Egg Venture (A.L. Release) + + + eggventrd + Egg Venture Deluxe + + + ehrgeiz + Ehrgeiz (US, EG3/VER.A) + + + ehrgeizaa + Ehrgeiz (Asia, EG2/VER.A) + + + ehrgeizja + Ehrgeiz (Japan, EG1/VER.A) + + + eightbll + Eight Ball + + + eightfrc + Eight Forces + + + eightman + Eight Man (NGM-025)(NGH-025) + + + einning + Extra Inning / Ball Park II + + + ejanhs + E-Jan High School (Japan) + + + ejihon + Ejihon Tantei Jimusyo (J 950613 V1.000) + + + ejollyx5 + Euro Jolly X5 + + + ejollyx9 + Euro Jolly X9 + + + ejsakura + E-Jan Sakurasou (Japan, SYS386F V2.0) + + + ejsakura12 + E-Jan Sakurasou (Japan, SYS386F V1.2) + + + elandore + Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006) + + + eldorado + El Dorado City of Gold + + + elecyoyo + The Electric Yo-Yo (set 1) + + + elecyoyo2 + The Electric Yo-Yo (set 2) + + + elektra + Elektra + + + elephfam + Elephant Family (Italian, new) + + + elephfmb + Elephant Family (Italian, old) + + + elevator + Elevator Action + + + elevatorb + Elevator Action (bootleg) + + + elgrande + El Grande - 5 Card Draw (New) + + + elim2 + Eliminator (2 Players, set 1) + + + elim2a + Eliminator (2 Players, set 2) + + + elim2c + Eliminator (2 Players, cocktail) + + + elim4 + Eliminator (4 Players) + + + elim4p + Eliminator (4 Players, prototype) + + + elvact2u + Elevator Action II (Ver 2.2A 1995/02/20) + + + elvactr + Elevator Action Returns (Ver 2.2O 1995/02/20) + + + elvactrj + Elevator Action Returns (Ver 2.2J 1995/02/20) + + + elvis + Elvis? + + + elvisf + Elvis (5.00 France) + + + elvisf302 + Elvis (3.02 France) + + + elvisf303 + Elvis (3.03 France) + + + elvisf4 + Elvis (4.00 France) + + + elvisg + Elvis (5.00 Germany) + + + elvisg302 + Elvis (3.02 Germany) + + + elvisg303 + Elvis (3.03 Germany) + + + elvisg4 + Elvis (4.00 Germany) + + + elvisi + Elvis (5.00 Italy) + + + elvisi302 + Elvis (3.02 Italy) + + + elvisi303 + Elvis (3.03 Italy) + + + elvisi4 + Elvis (4.00 Italy) + + + elvisl + Elvis (5.00 Spain) + + + elvisl302 + Elvis (3.02 Spain) + + + elvisl303 + Elvis (3.03 Spain) + + + elvisl4 + Elvis (4.00 Spain) + + + elvisp + Elvis (5.00) + + + elvisp302 + Elvis (3.02) + + + elvisp303 + Elvis (3.03) + + + elvisp4 + Elvis (4.00) + + + embargo + Embargo + + + embryon + Embryon + + + emeralda + Emeraldia (World) + + + emeraldaj + Emeraldia (Japan Version B) + + + emeraldaja + Emeraldia (Japan) + + + empcity + Empire City: 1931 (bootleg?) + + + empcityi + Empire City: 1931 (Italy) + + + empcityj + Empire City: 1931 (Japan) + + + empcityu + Empire City: 1931 (US) + + + empsback + The Empire Strike Back + + + enchfrst + Enchanted Forest (0400122V, Local) + + + enchlamp + Enchanted Lamp (Konami Endeavour) + + + endless + Gundam Wing: Endless Duel (SNES bootleg) + + + endurob2 + Enduro Racer (bootleg set 2) + + + endurobl + Enduro Racer (bootleg set 1) + + + enduror + Enduro Racer (YM2151, FD1089B 317-0013A) + + + enduror1 + Enduro Racer (YM2203, FD1089B 317-0013A) + + + enforce + Enforce (World) + + + enforcej + Enforce (Japan) + + + enforceja + Enforce (Japan, Analog Controls) + + + enigma2 + Enigma II + + + enigma2a + Enigma II (Space Invaders hardware) + + + enigma2b + Phantoms II (Space Invaders hardware) + + + ep_21clb + Twenty One Club (Maygay) (EPOCH) (3.2, set 1) + + + ep_21clba + Twenty One Club (Maygay) (EPOCH) (3.2, set 2) + + + ep_25crt + 25 Carrot Gold (Maygay) (EPOCH) (1.2, set 1) + + + ep_25crta + 25 Carrot Gold (Maygay) (EPOCH) (1.1, set 2) + + + ep_25crtb + 25 Carrot Gold (Maygay) (EPOCH) (3.1, set 3) + + + ep_25crtc + 25 Carrot Gold (Maygay) (EPOCH) (4.1, set 4) + + + ep_25crtd + 25 Carrot Gold (Maygay) (EPOCH) (5.1, set 5) + + + ep_bartk + Bar Trekkin (Maygay) (EPOCH) (4.5, set 1) + + + ep_bartka + Bar Trekkin (Maygay) (EPOCH) (3.9, set 2) + + + ep_bartkb + Bar Trekkin (Maygay) (EPOCH) (3.9, set 3) + + + ep_bartkc + Bar Trekkin (Maygay) (EPOCH) (4.4, set 4) + + + ep_bartkd + Bar Trekkin (Maygay) (EPOCH) (4.4, set 5) + + + ep_bartke + Bar Trekkin (Maygay) (EPOCH) (4.5, set 6) + + + ep_bartkf + Bar Trekkin (Maygay) (EPOCH) (4.2, set 7) + + + ep_baskr + Pounds Of The Baskervilles (Maygay) (EPOCH) (1.7, set 1) + + + ep_baskra + Pounds Of The Baskervilles (Maygay) (EPOCH) (2.2, set 2) + + + ep_baskrb + Pounds Of The Baskervilles (Maygay) (EPOCH) (2.2, set 3) + + + ep_baskrc + Pounds Of The Baskervilles (Maygay) (EPOCH) (1.7, set 4) + + + ep_baskrd + Pounds Of The Baskervilles (Maygay) (EPOCH) (2.1, set 5) + + + ep_baskre + Pounds Of The Baskervilles (Maygay) (EPOCH) (1.5, set 6) + + + ep_bathl + Bat Outa Hell (Global) (EPOCH) (2.1, set 1) + + + ep_bathla + Bat Outa Hell (Global) (EPOCH) (2.1, set 2) + + + ep_bathlb + Bat Outa Hell (Global) (EPOCH) (2.2, set 3) + + + ep_bathlc + Bat Outa Hell (Global) (EPOCH) (2.2, set 4) + + + ep_bathld + Bat Outa Hell (Global) (EPOCH) (3.1, set 5) + + + ep_bathle + Bat Outa Hell (Global) (EPOCH) (3.1, set 6) + + + ep_bathlf + Bat Outa Hell (Global) (EPOCH) (4.1, set 7) + + + ep_bathlg + Bat Outa Hell (Global) (EPOCH) (4.1, set 8) + + + ep_bathlh + Bat Outa Hell (Global) (EPOCH) (3.3, set 9) + + + ep_batls + Battleships (Maygay) (EPOCH) (2.2, set 1) + + + ep_batlsa + Battleships (Maygay) (EPOCH) (2.2, set 2) + + + ep_batlsb + Battleships (Maygay) (EPOCH) (1.9, set 3) + + + ep_batlsc + Battleships (Maygay) (EPOCH) (1.9, set 4) + + + ep_bbars + Balloon Bars (Maygay) (EPOCH) (1.2, set 1) + + + ep_bbarsa + Balloon Bars (Maygay) (EPOCH) (1.2, set 2) + + + ep_bbarsb + Balloon Bars (Maygay) (EPOCH) (2.0, set 3) + + + ep_bbarsc + Balloon Bars (Maygay) (EPOCH) (2.0, set 4) + + + ep_bbonz + Bingo Bonanza (Maygay - Union) (EPOCH) (set 1) + + + ep_bbonza + Bingo Bonanza (Maygay - Union) (EPOCH) (set 2) + + + ep_beav3 + Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 3.3, set 1) + + + ep_beav3a + Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 3.3, set 2) + + + ep_beav3b + Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 4.2, set 3) + + + ep_beav3c + Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 4.2, set 4) + + + ep_beavr + Casino Beaver Las Vegas (Global) (EPOCH) (set 1) + + + ep_beavra + Casino Beaver Las Vegas (Global) (EPOCH) (set 2) + + + ep_beavrb + Casino Beaver Las Vegas (Global) (EPOCH) (set 3) + + + ep_beavrc + Casino Beaver Las Vegas (Global) (EPOCH) (set 4) + + + ep_beavrd + Casino Beaver Las Vegas (Global) (EPOCH) (set 5) + + + ep_beavre + Casino Beaver Las Vegas (Global) (EPOCH) (set 6) + + + ep_beavrf + Casino Beaver Las Vegas (Global) (EPOCH) (set 7) + + + ep_beavrg + Casino Beaver Las Vegas (Global) (EPOCH) (set 8) + + + ep_beavrh + Casino Beaver Las Vegas (Global) (EPOCH) (set 9) + + + ep_beavri + Casino Beaver Las Vegas (Global) (EPOCH) (set 10) + + + ep_beavrj + Casino Beaver Las Vegas (Global) (EPOCH) (set 11) + + + ep_beavrk + Casino Beaver Las Vegas (Global) (EPOCH) (set 12) + + + ep_beavrl + Casino Beaver Las Vegas (Global) (EPOCH) (set 13) + + + ep_beavrm + Casino Beaver Las Vegas (Global) (EPOCH) (set 14) + + + ep_beavrn + Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 2.3, set 5) + + + ep_beavro + Casino Beaver Las Vegas (Global) (EPOCH) (CA000720, 2.3, set 6) + + + ep_bingb + Bingo Belle (Maygay) (EPOCH) (1.3, set 1) + + + ep_bingba + Bingo Belle (Maygay) (EPOCH) (1.3, set 2) + + + ep_bjclb + Blackjack Club, The (Global) (EPOCH) + + + ep_braid + Bank Raid (Extreme) (EPOCH) (BARA 0.1, set 1) + + + ep_braida + Bank Raid (Extreme) (EPOCH) (BARA 0.1, set 2) + + + ep_braidb + Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 3) + + + ep_braidc + Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 4) + + + ep_braidd + Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 5) + + + ep_braide + Bank Raid (Extreme) (EPOCH) (BARA 0.5, set 6) + + + ep_bubsq + Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.2, set 1) + + + ep_bubsqa + Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.2, set 2) + + + ep_bubsqb + Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.3, set 3) + + + ep_bubsqc + Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.3, set 4) + + + ep_bubsqd + Bubble & Squeak (Extreme) (EPOCH) (BASQ 0.4, set 5) + + + ep_bvrcl + Beaver Las Vegas Club (Global) (EPOCH) (set 1) + + + ep_bvrcla + Beaver Las Vegas Club (Global) (EPOCH) (set 2) + + + ep_bvrclb + Beaver Las Vegas Club (Global) (EPOCH) (set 3) + + + ep_bvrclc + Beaver Las Vegas Club (Global) (EPOCH) (set 4) + + + ep_bvrcld + Beaver Las Vegas Club (Global) (EPOCH) (set 5) + + + ep_bvrcle + Beaver Las Vegas Club (Global) (EPOCH) (set 6) + + + ep_bvrclf + Beaver Las Vegas Club (Global) (EPOCH) (set 7) + + + ep_bvrclg + Beaver Las Vegas Club (Global) (EPOCH) (set 8) + + + ep_bvrclh + Beaver Las Vegas Club (Global) (EPOCH) (set 9) + + + ep_bvrcli + Beaver Las Vegas Club (Global) (EPOCH) (set 10) + + + ep_bvrclj + Beaver Las Vegas Club (Global) (EPOCH) (set 11) + + + ep_bvrclk + Beaver Las Vegas Club (Global) (EPOCH) (set 12) + + + ep_bvruc + Beaver Uncovered (Global) (EPOCH) (1.4, set 1) + + + ep_bvruca + Beaver Uncovered (Global) (EPOCH) (1.4, set 2) + + + ep_bvrucb + Beaver Uncovered (Global) (EPOCH) (1.6, set 3) + + + ep_bvrucc + Beaver Uncovered (Global) (EPOCH) (2.3, set 4) + + + ep_cahoy + Cash Ahoy (Maygay - Eclipse?) (EPOCH) (set 1) + + + ep_cahoya + Cash Ahoy (Maygay) (EPOCH) (set 2) + + + ep_cahoyb + Cash Ahoy (Maygay) (EPOCH) (set 3) + + + ep_calyp + Calypso (Maygay) (EPOCH) (2.2, set 1) + + + ep_calypa + Calypso (Maygay) (EPOCH) (2.2, set 2) + + + ep_cascz + Casino Crazy (Global) (EPOCH) (set 1) + + + ep_cascza + Casino Crazy (Global) (EPOCH) (2.1, set 2) + + + ep_casgc + Casino Grand Club (Maygay) (EPOCH) (1.1, set 1) + + + ep_casgca + Casino Grand Club (Maygay) (EPOCH) (1.1, set 2) + + + ep_casgcb + Casino Grand Club (Maygay) (EPOCH) (1.4, set 3) + + + ep_casgcc + Casino Grand Club (Maygay) (EPOCH) (1.4, set 4) + + + ep_cashn + Cashino (Maygay - Extreme) (EPOCH) (CSHI 1.0, set 1) + + + ep_cashna + Cashino (Maygay - Extreme) (EPOCH) (CSHI 1.0, set 2) + + + ep_casrd + Casino Royale Deluxe Club (Maygay) (EPOCH) (1.5, set 1) + + + ep_casrda + Casino Royale Deluxe Club (Maygay) (EPOCH) (1.3, set 2) + + + ep_cbrcl + Cannonball Run Club (Global) (EPOCH) (set 1) + + + ep_cbrcla + Cannonball Run Club (Global) (EPOCH) (set 2) + + + ep_cbrclb + Cannonball Run Club (Global) (EPOCH) (set 3) + + + ep_cbrclc + Cannonball Run Club (Global) (EPOCH) (set 4) + + + ep_cbrcld + Cannonball Run Club (Global) (EPOCH) (set 5) + + + ep_cbrcle + Cannonball Run Club (Global) (EPOCH) (set 6) + + + ep_cbrclf + Cannonball Run Club (Global) (EPOCH) (set 7) + + + ep_cbrclg + Cannonball Run Club (Global) (EPOCH) (set 8) + + + ep_cbrclh + Cannonball Run Club (Global) (EPOCH) (set 9) + + + ep_cbrcli + Cannonball Run Club (Global) (EPOCH) (set 10) + + + ep_cbrclj + Cannonball Run Club (Global) (EPOCH) (set 11) + + + ep_cbrclk + Cannonball Run Club (Global) (EPOCH) (set 12) + + + ep_cbrun + Cannonball Run (Global) (EPOCH) (2.2, set 1) + + + ep_cbruna + Cannonball Run (Global) (EPOCH) (2.2, set 2) + + + ep_cbrunb + Cannonball Run (Global) (EPOCH) (2.4, set 3) + + + ep_cbrunc + Cannonball Run (Global) (EPOCH) (2.4, set 4) + + + ep_cbrund + Cannonball Run (Global) (EPOCH) (3.1, set 5) + + + ep_cbrune + Cannonball Run (Global) (EPOCH) (3.1, set 6) + + + ep_cclas + Casino Classic (Global) (EPOCH) (set 1) + + + ep_cclasa + Casino Classic (Global) (EPOCH) (set 2) + + + ep_ccock + Cash Cocktail (Maygay) (EPOCH) (1.1, set 1) + + + ep_ccocka + Cash Cocktail (Maygay) (EPOCH) (1.1, set 2) + + + ep_ccockb + Cash Cocktail (Maygay) (EPOCH) (1.1, set 3) + + + ep_ccockc + Cash Cocktail (Maygay) (EPOCH) (1.1, set 4) + + + ep_cdspn + Cardinal Spin (Maygay) (EPOCH) (1.1, set 1) + + + ep_cdspna + Cardinal Spin (Maygay) (EPOCH) (1.1, set 2) + + + ep_cfall + Cash Falls (Maygay) (EPOCH) (1.2, set 1) + + + ep_cfalla + Cash Falls (Maygay) (EPOCH) (1.3, set 2) + + + ep_cfallb + Cash Falls (Maygay) (EPOCH) (1.3, set 3) + + + ep_cfallc + Cash Falls (Maygay) (EPOCH) (2.3, set 4) + + + ep_cfalld + Cash Falls (Maygay) (EPOCH) (2.3, set 5) + + + ep_cfalle + Cash Falls (Maygay) (EPOCH) (3.2, set 6) + + + ep_cfallf + Cash Falls (Maygay) (EPOCH) (3.2, set 7) + + + ep_cflow + Cash Flow (Maygay) (EPOCH) (3.7, set 1) + + + ep_cflowa + Cash Flow (Maygay) (EPOCH) (3.2, set 2) + + + ep_cflowc + Cash Flow (Maygay) (EPOCH) (3.A, set 3) + + + ep_cflowd + Cash Flow (Maygay) (EPOCH) (3.A, set 4) + + + ep_cgord + Cash Gordon (Maygay) (EPOCH) (2.1, set 1) + + + ep_cgorda + Cash Gordon (Maygay) (EPOCH) (2.3, set 2) + + + ep_cgordb + Cash Gordon (Maygay) (EPOCH) (2.3, set 3) + + + ep_cgordc + Cash Gordon (Maygay) (EPOCH) (1.9, set 4) + + + ep_cgrc + Casino Grand Classic (Global) (EPOCH) (set 1) + + + ep_cgrca + Casino Grand Classic (Global) (EPOCH) (set 2) + + + ep_cgred + Club Greed (Global) (EPOCH) (set 1) + + + ep_cgreda + Club Greed (Global) (EPOCH) (set 2) + + + ep_chock + Chocks Away (Maygay) (EPOCH) (1.1, set 1) + + + ep_chocka + Chocks Away (Maygay) (EPOCH) (1.1, set 2) + + + ep_chockb + Chocks Away (Maygay) (EPOCH) (1.1, set 3) + + + ep_cock + Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 1) + + + ep_cocka + Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 2) + + + ep_cockb + Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 3) + + + ep_cockc + Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 4) + + + ep_cockd + Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 5) + + + ep_cocke + Cock A Doodle Dosh (Maygay - Union) (EPOCH) (set 6) + + + ep_commd + Complete Madness (Maygay) (EPOCH) (2.2, set 1) + + + ep_commda + Complete Madness (Maygay) (EPOCH) (2.2, set 2) + + + ep_commdb + Complete Madness (Maygay) (EPOCH) (1.1, set 3) + + + ep_commdc + Complete Madness (Maygay) (EPOCH) (1.2, set 4) + + + ep_commdd + Complete Madness (Maygay) (EPOCH) (2.1, set 5) + + + ep_cor2 + Coronation Street 2 (Maygay) (EPOCH) (3.7, set 1) + + + ep_cor2a + Coronation Street 2 (Maygay) (EPOCH) (3.7, set 2) + + + ep_cor2b + Coronation Street 2 (Maygay) (EPOCH) (3.8, set 3) + + + ep_cor2c + Coronation Street 2 (Maygay) (EPOCH) (3.8, set 4) + + + ep_cormn + Coronation Street Monopoly Club (Maygay) (EPOCH) (1.7, set 1) + + + ep_cormna + Coronation Street Monopoly Club (Maygay) (EPOCH) (1.7, set 2) + + + ep_cosc + Carry On Screaming (Maygay) (EPOCH) (1.3, set 1) + + + ep_cosca + Carry On Screaming (Maygay) (EPOCH) (1.3, set 2) + + + ep_cow + Carry On Winning (Maygay) (EPOCH) (1.3, set 1) + + + ep_cowa + Carry On Winning (Maygay) (EPOCH) (1.3, set 2) + + + ep_crazy + Reel Crazy (Maygay) (EPOCH) (1.6, set 1) + + + ep_crazya + Reel Crazy (Maygay) (EPOCH) (1.6, set 2) + + + ep_crazyb + Reel Crazy (Maygay) (EPOCH) (2.6, set 3) + + + ep_crazyc + Reel Crazy (Maygay) (EPOCH) (2.6, set 4) + + + ep_crazyd + Reel Crazy (Maygay) (EPOCH) (1.9, set 5) + + + ep_crazye + Reel Crazy (Maygay) (EPOCH) (1.9, set 6) + + + ep_crzbn + Crazy Bingo (Maygay) (EPOCH) (1.1, set 1) + + + ep_crzbna + Crazy Bingo (Maygay) (EPOCH) (1.1, set 2) + + + ep_crzbnb + Crazy Bingo (Maygay) (EPOCH) (1.1 Gala, set 3) + + + ep_crzbnc + Crazy Bingo (Maygay) (EPOCH) (1.1 Gala, set 4) + + + ep_cshpn + Cash In The Pan (Maygay) (EPOCH) (1.1, set 1) + + + ep_cshpna + Cash In The Pan (Maygay) (EPOCH) (1.1, set 2) + + + ep_cslay + Cash Slayer (Global) (EPOCH) (1.4, set 1) + + + ep_cslaya + Cash Slayer (Global) (EPOCH) (set 2) + + + ep_cstrk + Crazy Streak Club (Global) (EPOCH) (set 1) + + + ep_cstrka + Crazy Streak Club (Global) (EPOCH) (set 2) + + + ep_cstrkb + Crazy Streak Club (Global) (EPOCH) (set 3) + + + ep_cstrkc + Crazy Streak Club (Global) (EPOCH) (set 4) + + + ep_cstrkd + Crazy Streak Club (Global) (EPOCH) (set 5) + + + ep_cstrke + Crazy Streak Club (Global) (EPOCH) (set 6) + + + ep_cstrkf + Crazy Streak Club (Global) (EPOCH) (set 7) + + + ep_cstrkg + Crazy Streak Club (Global) (EPOCH) (set 8) + + + ep_ctc + Cut Throat Cash (Global) (EPOCH) (1.2, set 1) + + + ep_ctca + Cut Throat Cash (Global) (EPOCH) (1.2, set 2) + + + ep_ctit + Cash Of The Titans (Maygay) (EPOCH) (1.5, set 1) + + + ep_ctita + Cash Of The Titans (Maygay) (EPOCH) (1.5, set 2) + + + ep_cyc + Cyclone (Extreme) (EPOCH) (CYCL 0.2, set 1) + + + ep_cyca + Cyclone (Extreme) (EPOCH) (CYCL 0.2, set 2) + + + ep_cycb + Cyclone (Extreme) (EPOCH) (CYCL 0.3, set 3) + + + ep_cycc + Cyclone (Extreme) (EPOCH) (CYCL 0.3, set 4) + + + ep_cycd + Cyclone (Extreme) (EPOCH) (CYCL 0.1, set 5) + + + ep_cyce + Cyclone (Extreme) (EPOCH) (CYCL 0.1, set 6) + + + ep_cycl + Cyclone Club (Maygay) (EPOCH) (3.1, set 1) + + + ep_cycla + Cyclone Club (Maygay) (EPOCH) (3.1, set 2) + + + ep_cyclb + Cyclone Club (Maygay) (EPOCH) (2.1, set 3) + + + ep_dblim + Double Impact (Maygay - Impulse) (EPOCH) (set 1) + + + ep_dblima + Double Impact (Maygay - Impulse) (EPOCH) (set 2) + + + ep_dblimb + Double Impact (Maygay - Impulse) (EPOCH) (set 3) + + + ep_dblimc + Double Impact (Maygay - Impulse) (EPOCH) (set 4) + + + ep_dblimd + Double Impact (Maygay - Impulse) (EPOCH) (set 5) + + + ep_ddq + Dungeons & Drag Queens (Global) (EPOCH) (1.4, set 1) + + + ep_ddqa + Dungeons & Drag Queens (Global) (EPOCH) (1.4, set 2) + + + ep_ddqb + Dungeons & Drag Queens (Global) (EPOCH) (2.1, set 3) + + + ep_ddqc + Dungeons & Drag Queens (Global) (EPOCH) (2.1, set 4) + + + ep_ddqcl + Dungeons & Drag Queens Club (Global) (EPOCH) (set 1) + + + ep_ddqcla + Dungeons & Drag Queens Club (Global) (EPOCH) (set 2) + + + ep_ddqclb + Dungeons & Drag Queens Club (Global) (EPOCH) (set 3) + + + ep_ddqclc + Dungeons & Drag Queens Club (Global) (EPOCH) (set 4) + + + ep_ddqcld + Dungeons & Drag Queens Club (Global) (EPOCH) (set 5) + + + ep_ddqcle + Dungeons & Drag Queens Club (Global) (EPOCH) (set 6) + + + ep_ddqclf + Dungeons & Drag Queens Club (Global) (EPOCH) (set 7) + + + ep_ddqclg + Dungeons & Drag Queens Club (Global) (EPOCH) (set 8) + + + ep_ddqd + Dungeons & Drag Queens (Global) (EPOCH) (2.2, set 5) + + + ep_ddqe + Dungeons & Drag Queens (Global) (EPOCH) (2.2, set 6) + + + ep_ddqf + Dungeons & Drag Queens (Global) (EPOCH) (2.4, set 7) + + + ep_ddqg + Dungeons & Drag Queens (Global) (EPOCH) (2.4, set 8) + + + ep_ddqh + Dungeons & Drag Queens (Global) (EPOCH) (2.5, set 9) + + + ep_ddqi + Dungeons & Drag Queens (Global) (EPOCH) (2.5, set 10) + + + ep_dmbus + Dambusters (Impulse) (EPOCH) (set 1) + + + ep_dmbusa + Dambusters (Impulse) (EPOCH) (set 2) + + + ep_dmbusb + Dambusters (Impulse) (EPOCH) (set 3) + + + ep_dmbusc + Dambusters (Impulse) (EPOCH) (set 4) + + + ep_dmbusd + Dambusters (Impulse) (EPOCH) (set 5) + + + ep_dmbuse + Dambusters (Impulse) (EPOCH) (set 6) + + + ep_dmbusf + Dambusters (Impulse) (EPOCH) (set 7) + + + ep_doubl + Double Top (Maygay) (EPOCH) (1.4, set 1) + + + ep_doubla + Double Top (Maygay) (EPOCH) (1.4, set 2) + + + ep_doublb + Double Top (Maygay) (EPOCH) (1.6, set 3) + + + ep_doublc + Double Top (Maygay) (EPOCH) (1.6, set 4) + + + ep_doubld + Double Top (Maygay) (EPOCH) (1.4, set 5) + + + ep_duff + The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 1) + + + ep_duffa + The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 2) + + + ep_duffb + The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 3) + + + ep_duffc + The Simpsons - Duff Beer Guide (Maygay) (EPOCH) (set 4) + + + ep_evil + Evil Streak (Maygay) (EPOCH) (1.6, set 1) + + + ep_evila + Evil Streak (Maygay) (EPOCH) (1.6, set 2) + + + ep_evilb + Evil Streak (Maygay) (EPOCH) (1.4, set 3) + + + ep_fgods + Fruit Of The Gods (Maygay) (EPOCH) (1.2, set 1) + + + ep_fgodsa + Fruit Of The Gods (Maygay) (EPOCH) (1.2, set 2) + + + ep_fgodsb + Fruit Of The Gods (Maygay) (EPOCH) (2.2, set 3) + + + ep_fgodsc + Fruit Of The Gods (Maygay) (EPOCH) (2.2, set 4) + + + ep_fgodsd + Fruit Of The Gods (Maygay) (EPOCH) (2.1, set 5) + + + ep_fgodse + Fruit Of The Gods (Maygay) (EPOCH) (3.2, set 6) + + + ep_fgodsf + Fruit Of The Gods (Maygay) (EPOCH) (1.1, set 7) + + + ep_fgodsg + Fruit Of The Gods (Maygay) (EPOCH) (1.1, set 8) + + + ep_flash + Flashback (Maygay - Impulse) (EPOCH) (set 1) + + + ep_flasha + Flashback (Maygay - Impulse) (EPOCH) (set 2) + + + ep_flashb + Flashback (Maygay - Impulse) (EPOCH) (set 3) + + + ep_flashc + Flashback (Maygay - Impulse) (EPOCH) (set 4) + + + ep_flashd + Flashback (Maygay - Impulse) (EPOCH) (set 5) + + + ep_flashe + Flashback (Maygay - Impulse) (EPOCH) (set 6) + + + ep_flashf + Flashback (Maygay - Impulse) (EPOCH) (set 7) + + + ep_fmf + Full Moon Fever (Global) (EPOCH) (set 1) + + + ep_fmfa + Full Moon Fever (Global) (EPOCH) (set 2) + + + ep_fnclb + Fruit & Nudge Club (Maygay) (EPOCH) (set 1) + + + ep_fnclba + Fruit & Nudge Club (Maygay) (EPOCH) (set 2) + + + ep_fog + Fields of Gold (Global) (EPOCH) (set 1) + + + ep_foga + Fields of Gold (Global) (EPOCH) (set 2) + + + ep_fortg + Fortune & Glory (Maygay - Impulse) (EPOCH) (set 1) + + + ep_fortga + Fortune & Glory (Maygay - Impulse) (EPOCH) (set 2) + + + ep_fortgb + Fortune & Glory (Maygay - Impulse) (EPOCH) (set 3) + + + ep_fran + Frantic (Maygay) (EPOCH) (set 1) + + + ep_frana + Frantic (Maygay) (EPOCH) (set 2) + + + ep_fullm + Full Moon Fever (Maygay - Impulse) (EPOCH) (set 1) + + + ep_fullma + Full Moon Fever (Maygay - Impulse) (EPOCH) (set 2) + + + ep_fullmb + Full Moon Fever (Maygay - Impulse) (EPOCH) (set 3) + + + ep_fullmc + Full Moon Fever (Maygay - Impulse) (EPOCH) (set 4) + + + ep_fullmd + Full Moon Fever (Maygay - Impulse) (EPOCH) (set 5) + + + ep_fullme + Full Moon Fever (Maygay - Impulse) (EPOCH) (set 6) + + + ep_fullmf + Full Moon Fever (Maygay - Impulse) (EPOCH) (set 7) + + + ep_funny + Funny Money (Maygay) (EPOCH) (set 1) + + + ep_funnya + Funny Money (Maygay) (EPOCH) (set 2) + + + ep_funnyb + Funny Money (Maygay) (EPOCH) (set 3) + + + ep_funnyc + Funny Money (Maygay) (EPOCH) (set 4) + + + ep_funnyd + Funny Money (Maygay) (EPOCH) (set 5) + + + ep_funnye + Funny Money (Maygay) (EPOCH) (set 6) + + + ep_funnyf + Funny Money (Maygay) (EPOCH) (set 7) + + + ep_funnyg + Funny Money (Maygay) (EPOCH) (set 8) + + + ep_geclb + Great Escape Club (Maygay) (EPOCH) (1.C, set 1) + + + ep_geclba + Great Escape Club (Maygay) (EPOCH) (1.C, set 2) + + + ep_geclbb + Great Escape Club (Maygay) (EPOCH) (1.9, set 3) + + + ep_geron + Geronimo (Maygay - Impulse) (EPOCH) (set 1) + + + ep_gerona + Geronimo (Maygay - Impulse) (EPOCH) (set 2) + + + ep_geronb + Geronimo (Maygay - Impulse) (EPOCH) (set 3) + + + ep_geronc + Geronimo (Maygay - Impulse) (EPOCH) (set 4) + + + ep_gerond + Geronimo (Maygay - Impulse) (EPOCH) (set 5) + + + ep_gerone + Geronimo (Maygay - Impulse) (EPOCH) (set 6) + + + ep_gesc2 + Great Escape 2 (Maygay) (EPOCH) (2.1, set 1) + + + ep_gesc2a + Great Escape 2 (Maygay) (EPOCH) (2.1, set 2) + + + ep_gldtp + Gold Top (Maygay) (EPOCH) (1.1, set 1) + + + ep_gldtpa + Gold Top (Maygay) (EPOCH) (1.1, set 2) + + + ep_goldf + Gold Fever (Impulse) (EPOCH) + + + ep_greed + Greed (Global) (EPOCH) (1.3, set 1) + + + ep_greeda + Greed (Global) (EPOCH) (1.3, set 2) + + + ep_gresc + Great Escape (Maygay) (EPOCH) (1.1, set 1) + + + ep_gresca + Great Escape (Maygay) (EPOCH) (1.1, set 2) + + + ep_gridr + Gridrunner (Maygay - Impulse) (EPOCH) (set 1) + + + ep_gridra + Gridrunner (Maygay - Impulse) (EPOCH) (set 2) + + + ep_gridrb + Gridrunner (Maygay - Impulse) (EPOCH) (set 3) + + + ep_gridrc + Gridrunner (Maygay - Impulse) (EPOCH) (set 4) + + + ep_gridrd + Gridrunner (Maygay - Impulse) (EPOCH) (set 5) + + + ep_grncl + Grid Runner Club (Global) (EPOCH) (set 1) + + + ep_grncla + Grid Runner Club (Global) (EPOCH) (set 2) + + + ep_grnclb + Grid Runner Club (Global) (EPOCH) (set 3) + + + ep_grnclc + Grid Runner Club (Global) (EPOCH) (set 4) + + + ep_grun + Grid Runner (Global) (EPOCH) (set 1) + + + ep_gruna + Grid Runner (Global) (EPOCH) (set 2) + + + ep_gtrot + Globe Trotter (Global) (EPOCH) (set 1) + + + ep_gtrota + Globe Trotter (Global) (EPOCH) (set 2) + + + ep_heybc + Hey Big Spender Club (Global) (EPOCH) (set 1) + + + ep_heybca + Hey Big Spender Club (Global) (EPOCH) (set 2) + + + ep_heybg + Hey Big Spender (Global) (EPOCH) (set 1) + + + ep_heybga + Hey Big Spender (Global) (EPOCH) (set 2) + + + ep_heybgb + Hey Big Spender (Global) (EPOCH) (set 3) + + + ep_heybgc + Hey Big Spender (Global) (EPOCH) (set 4) + + + ep_hhclb + Haunted House Club (Maygay) (EPOCH) (1.4, set 1) + + + ep_hhclba + Haunted House Club (Maygay) (EPOCH) (1.4, set 2) + + + ep_hhclbb + Haunted House Club (Maygay) (EPOCH) (1.1, set 3) + + + ep_hhclbc + Haunted House Club (Maygay) (EPOCH) (1.1, set 4) + + + ep_highv + High Voltage (Maygay - Impulse) (EPOCH) (set 1) + + + ep_highva + High Voltage (Maygay - Impulse) (EPOCH) (set 2) + + + ep_highvb + High Voltage (Maygay - Impulse) (EPOCH) (set 3) + + + ep_highvc + High Voltage (Maygay - Impulse) (EPOCH) (set 4) + + + ep_highvd + High Voltage (Maygay - Impulse) (EPOCH) (set 5) + + + ep_highve + High Voltage (Maygay - Impulse) (EPOCH) (set 6) + + + ep_highvf + High Voltage (Maygay - Impulse) (EPOCH) (set 7) + + + ep_hiscl + Hi Spirits Club (Global) (EPOCH) (set 1) + + + ep_hiscla + Hi Spirits Club (Global) (EPOCH) (set 2) + + + ep_hispr + Hi Spirits (Global) (EPOCH) (1.A, set 1) + + + ep_hispra + Hi Spirits (Global) (EPOCH) (1.A, set 2) + + + ep_hisprb + Hi Spirits (Global) (EPOCH) (4.2, set 3) + + + ep_hisprc + Hi Spirits (Global) (EPOCH) (4.2, set 4) + + + ep_hisprd + Hi Spirits (Global) (EPOCH) (3.2, set 5) + + + ep_hispre + Hi Spirits (Global) (EPOCH) (3.2, set 6) + + + ep_hogmn + Hog Money (Maygay - Impulse) (EPOCH) (set 1) + + + ep_hogmna + Hog Money (Maygay - Impulse) (EPOCH) (set 2) + + + ep_hogmnb + Hog Money (Maygay - Impulse) (EPOCH) (set 3) + + + ep_homer + The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.A, set 1) + + + ep_homera + The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.2, set 3) + + + ep_homerb + The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.2, set 4) + + + ep_homerc + The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.B, set 5) + + + ep_homerd + The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.B, set 6) + + + ep_homere + The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.1, set 7) + + + ep_homerf + The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (3.1, set 8) + + + ep_homerg + The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.1, set 9) + + + ep_homerh + The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.1, set 10) + + + ep_homeri + The Simpsons - Homer's Meltdown (Maygay) (EPOCH) (2.9, set 2) + + + ep_htdgs + Hot Dogs (Maygay) (EPOCH) (set 1) + + + ep_htdgsa + Hot Dogs (Maygay) (EPOCH) (set 2) + + + ep_hubbl + Hubble Bubble (Maygay) (EPOCH) (set 1) + + + ep_hubbla + Hubble Bubble (Maygay) (EPOCH) (set 2) + + + ep_hur + Hurricane (Global) (EPOCH) (set 1) + + + ep_hura + Hurricane (Global) (EPOCH) (set 2) + + + ep_hurb + Hurricane (Global) (EPOCH) (set 3) + + + ep_huric + Hurricane (Maygay - Impulse) (EPOCH) (set 1) + + + ep_hurica + Hurricane (Maygay - Impulse) (EPOCH) (set 2) + + + ep_huricb + Hurricane (Maygay - Impulse) (EPOCH) (set 3) + + + ep_huricc + Hurricane (Maygay - Impulse) (EPOCH) (set 4) + + + ep_huricd + Hurricane (Maygay - Impulse) (EPOCH) (set 5) + + + ep_hurice + Hurricane (Maygay - Impulse) (EPOCH) (set 6) + + + ep_hvns + Heavens Above (Maygay) (EPOCH) (set 1) + + + ep_hvnsa + Heavens Above (Maygay) (EPOCH) (set 2) + + + ep_hyst + Hysteria (Maygay - Impulse) (EPOCH) (set 1) + + + ep_hysta + Hysteria (Maygay - Impulse) (EPOCH) (set 2) + + + ep_icebg + Ice Burger (Maygay) (EPOCH) (1.4, set 1) + + + ep_icebga + Ice Burger (Maygay) (EPOCH) (1.2, set 2) + + + ep_icebgb + Ice Burger (Maygay) (EPOCH) (1.4, set 3) + + + ep_icebgc + Ice Burger (Maygay) (EPOCH) (1.3, set 4) + + + ep_icebgd + Ice Burger (Maygay) (EPOCH) (1.1, set 5) + + + ep_icebge + Ice Burger (Maygay) (EPOCH) (1.1, set 6) + + + ep_icebgf + Ice Burger (Maygay) (EPOCH) (1.3, set 7) + + + ep_icebgg + Ice Burger (Maygay) (EPOCH) (1.3, set 8) + + + ep_icebgh + Ice Burger (Maygay) (EPOCH) (1.4, set 9) + + + ep_icebgi + Ice Burger (Maygay) (EPOCH) (1.4, set 10) + + + ep_ifern + Inferno (Impulse) (EPOCH) (set 1) + + + ep_iferna + Inferno (Impulse) (EPOCH) (set 2) + + + ep_ijcl + Italian Job Club (Maygay) (EPOCH) (2.6, set 1) + + + ep_ijcla + Italian Job Club (Maygay) (EPOCH) (2.5, set 2) + + + ep_ijob + Italian Job (Maygay) (EPOCH, v2.1) + + + ep_ijoba + Italian Job (Maygay) (EPOCH, v1.1) + + + ep_imj + I'm A Jackpot (Global) (EPOCH) (1.5) + + + ep_inca + Inca Dinka Do (Maygay - Extreme) (EPOCH) (INCA 1.2, set 1) + + + ep_incaa + Inca Dinka Do (Maygay - Extreme) (EPOCH) (INCA 1.2, set 2) + + + ep_incab + Inca Dinka Do (Maygay - Extreme) (EPOCH) (INCA 1.1, set 3) + + + ep_itjb2 + Italian Job 2 (Maygay) (EPOCH) (1.5, set 1) + + + ep_itjb2a + Italian Job 2 (Maygay) (EPOCH) (1.5, set 2) + + + ep_itjb2b + Italian Job 2 (Maygay) (EPOCH) (2.3, set 3) + + + ep_itjb2c + Italian Job 2 (Maygay) (EPOCH) (2.3, set 4) + + + ep_itjb3 + Italian Job 3 (Maygay) (EPOCH) (set 1) + + + ep_itjb3a + Italian Job 3 (Maygay) (EPOCH) (set 2) + + + ep_jakbn + Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.3, set 1) + + + ep_jakbna + Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.3, set 2) + + + ep_jakbnb + Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.5, set 3) + + + ep_jakbnc + Jackpot & The Beanstreak (Extreme) (EPOCH) (JABS 0.5, set 4) + + + ep_jsttt + Just The Ticket (Maygay) (EPOCH) (4.2, set 1) + + + ep_jsttta + Just The Ticket (Maygay) (EPOCH) (4.2, set 2) + + + ep_jstttb + Just The Ticket (Maygay) (EPOCH) (3.5, set 3) + + + ep_jstttc + Just The Ticket (Maygay) (EPOCH) (3.4, set 4) + + + ep_jstttd + Just The Ticket (Maygay) (EPOCH) (3.5, set 5) + + + ep_jsttte + Just The Ticket (Maygay) (EPOCH) (3.5, set 6) + + + ep_jstttf + Just The Ticket (Maygay) (EPOCH) (3.6, set 7) + + + ep_jstttg + Just The Ticket (Maygay) (EPOCH) (3.6, set 8) + + + ep_kopcl + Knockout Punch Club (Global) (EPOCH) (set 1) + + + ep_kopcla + Knockout Punch Club (Global) (EPOCH) (set 2) + + + ep_kopclb + Knockout Punch Club (Global) (EPOCH) (set 3) + + + ep_ll + Lucky Ladders (Extreme) (EPOCH) (LULA 0.3, set 1) + + + ep_lla + Lucky Ladders (Extreme) (EPOCH) (LULA 0.3, set 2) + + + ep_loadd + Loaded (Maygay) (EPOCH) (LOAD 1.2, set 1) + + + ep_loadda + Loaded (Maygay) (EPOCH) (LOAD 1.2, set 2) + + + ep_ltt + Licence To Thrill (Global) (EPOCH) (set 1) + + + ep_ltta + Licence To Thrill (Global) (EPOCH) (set 2) + + + ep_lug + London Underground (Maygay) (EPOCH) (2.4, set 1) + + + ep_luga + London Underground (Maygay) (EPOCH) (2.9, set 2) + + + ep_lugb + London Underground (Maygay) (EPOCH) (3.1, set 3) + + + ep_lugc + London Underground (Maygay) (EPOCH) (3.1, set 4) + + + ep_lukld + Lucky Ladders (Maygay) (EPOCH) (LULA 0.2, set 1) + + + ep_luklda + Lucky Ladders (Maygay) (EPOCH) (LULA 0.2, set 2) + + + ep_makmv + Make Your Move (Global) (EPOCH) (set 1) + + + ep_makmva + Make Your Move (Global) (EPOCH) (set 2) + + + ep_manic + Manic Miner (Maygay - Impulse) (EPOCH) (set 1) + + + ep_manica + Manic Miner (Maygay - Impulse) (EPOCH) (set 2) + + + ep_manicb + Manic Miner (Maygay - Impulse) (EPOCH) (set 3) + + + ep_manicc + Manic Miner (Maygay - Impulse) (EPOCH) (set 4) + + + ep_manicd + Manic Miner (Maygay - Impulse) (EPOCH) (set 5) + + + ep_manice + Manic Miner (Maygay - Impulse) (EPOCH) (set 6) + + + ep_manicf + Manic Miner (Maygay - Impulse) (EPOCH) (set 7) + + + ep_mario + Super Mario (Maygay) (EPOCH) (1.5, set 1) + + + ep_marioa + Super Mario (Maygay) (EPOCH) (1.5, set 2) + + + ep_mariob + Super Mario (Maygay) (EPOCH) (1.A, set 3) + + + ep_marioc + Super Mario (Maygay) (EPOCH) (1.A, set 4) + + + ep_mariod + Super Mario (Maygay) (EPOCH) (2.A, set 5) + + + ep_marioe + Super Mario (Maygay) (EPOCH) (2.A, set 6) + + + ep_mariof + Super Mario (Maygay) (EPOCH) (1.C, set 7) + + + ep_mariog + Super Mario (Maygay) (EPOCH) (1.C, set 8) + + + ep_marioh + Super Mario (Maygay) (EPOCH) (1.B, set 9) + + + ep_matrx + Matrix (Maygay - Impulse) (EPOCH) + + + ep_merln + Merlin's Magic (Maygay) (EPOCH) (1.91) + + + ep_midas + Midas Touch Club (Maygay) (EPOCH) (1.1, set 1) + + + ep_midasa + Midas Touch Club (Maygay) (EPOCH) (1.1, set 2) + + + ep_milhr + Who Wants To Be A Millionhare? (Global) (EPOCH) (1.2, set 1) + + + ep_milhra + Who Wants To Be A Millionhare? (Global) (EPOCH) (1.2, set 2) + + + ep_milhrb + Who Wants To Be A Millionhare? (Global) (EPOCH) (1.3, set 3) + + + ep_milhrc + Who Wants To Be A Millionhare? (Global) (EPOCH) (1.3, set 4) + + + ep_milhrd + Who Wants To Be A Millionhare? (Global) (EPOCH) (1.6, set 5) + + + ep_milhre + Who Wants To Be A Millionhare? (Global) (EPOCH) (1.6, set 6) + + + ep_milhrf + Who Wants To Be A Millionhare? (Global) (EPOCH) (1.9, set 7) + + + ep_milhrg + Who Wants To Be A Millionhare? (Global) (EPOCH) (1.9, set 8) + + + ep_mkart + Mario Kart (Maygay) (EPOCH) (1.2, set 1) + + + ep_mkarta + Mario Kart (Maygay) (EPOCH) (1.2, set 2) + + + ep_mkartb + Mario Kart (Maygay) (EPOCH) (1.6, set 3) + + + ep_mkartc + Mario Kart (Maygay) (EPOCH) (1.6, set 4) + + + ep_mkartd + Mario Kart (Maygay) (EPOCH) (1.1, set 5) + + + ep_mkarte + Mario Kart (Maygay) (EPOCH) (1.5, set 6) + + + ep_mlhrc + Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 1) + + + ep_mlhrca + Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 2) + + + ep_mlhrcb + Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 3) + + + ep_mlhrcc + Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 4) + + + ep_mlhrcd + Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 5) + + + ep_mlhrce + Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 6) + + + ep_monbs + Monte Carlo Or Bust (Maygay) (EPOCH) (1.2, set 1) + + + ep_monbsa + Monte Carlo Or Bust (Maygay) (EPOCH) (1.2, set 2) + + + ep_monky + Monkey Business (Global) (EPOCH) (1.4, set 1) + + + ep_monkya + Monkey Business (Global) (EPOCH) (1.5, set 2) + + + ep_monrt + Money Returns Club, The (Global) (EPOCH) (set 1) + + + ep_monrta + Money Returns Club, The (Global) (EPOCH) (set 2) + + + ep_monrtb + Money Returns Club, The (Global) (EPOCH) (set 3) + + + ep_monrtc + Money Returns Club, The (Global) (EPOCH) (set 4) + + + ep_monrtd + Money Returns Club, The (Global) (EPOCH) (set 5) + + + ep_monrte + Money Returns Club, The (Global) (EPOCH) (set 6) + + + ep_monrtf + Money Returns Club, The (Global) (EPOCH) (set 7) + + + ep_monsh + The Moonshine Club (Global) (EPOCH) (set 1) + + + ep_monsha + The Moonshine Club (Global) (EPOCH) (set 2) + + + ep_monshb + The Moonshine Club (Global) (EPOCH) (set 3) + + + ep_monshc + The Moonshine Club (Global) (EPOCH) (set 4) + + + ep_monshd + The Moonshine Club (Global) (EPOCH) (set 5) + + + ep_monshe + The Moonshine Club (Global) (EPOCH) (set 6) + + + ep_monshf + The Moonshine Club (Global) (EPOCH) (set 7) + + + ep_mrmus + Mr Muscle (Maygay) (EPOCH) (1.2, set 1) + + + ep_mrmusa + Mr Muscle (Maygay) (EPOCH) (1.2, set 2) + + + ep_mummy + Mummy Talks (Impulse) (EPOCH) (set 1) + + + ep_mummya + Mummy Talks (Impulse) (EPOCH) (set 2) + + + ep_mummyb + Mummy Talks (Impulse) (EPOCH) (set 3) + + + ep_mummyc + Mummy Talks (Impulse) (EPOCH) (set 4) + + + ep_mummyd + Mummy Talks (Impulse) (EPOCH) (set 5) + + + ep_mummye + Mummy Talks (Impulse) (EPOCH) (set 6) + + + ep_mummyf + Mummy Talks (Impulse) (EPOCH) (set 7) + + + ep_mwom + Mortal Wombat (Maygay) (EPOCH) (set 1) + + + ep_mwoma + Mortal Wombat (Maygay) (EPOCH) (set 2) + + + ep_mwomb + Mortal Wombat (Maygay) (EPOCH) (set 3) + + + ep_mwomc + Mortal Wombat (Maygay) (EPOCH) (set 4) + + + ep_mwomd + Mortal Wombat (Maygay) (EPOCH) (set 5) + + + ep_noter + Note Runner (Maygay) (EPOCH) (NORU 0.1, set 1) + + + ep_notera + Note Runner (Maygay) (EPOCH) (NORU 0.1, set 2) + + + ep_noterb + Note Runner (Maygay) (EPOCH) (NORU 0.2, set 3) + + + ep_noterc + Note Runner (Maygay) (EPOCH) (NORU 0.2, set 4) + + + ep_noterd + Note Runner (Maygay) (EPOCH) (NORU 1.0, set 5) + + + ep_notere + Note Runner (Maygay) (EPOCH) (NORU 1.0, set 6) + + + ep_nuns + Nuns Of Navarone (Maygay) (EPOCH) (2.4, set 1) + + + ep_nunsa + Nuns Of Navarone (Maygay) (EPOCH) (2.4, set 2) + + + ep_nyny + New York New York (Maygay) (EPOCH) (3.6, set 1) + + + ep_nynya + New York New York (Maygay) (EPOCH) (3.6, set 2) + + + ep_nynyb + New York New York (Maygay) (EPOCH) (4.6, set 3) + + + ep_nynyc + New York New York (Maygay) (EPOCH) (4.6, set 4) + + + ep_nynyd + New York New York (Maygay) (EPOCH) (3.A, set 5) + + + ep_nynye + New York New York (Maygay) (EPOCH) (3.A, set 6) + + + ep_nynyf + New York New York (Maygay) (EPOCH) (3.9, set 7) + + + ep_otm + Over The Moon (Maygay) (EPOCH) (1.2, set 1) + + + ep_otma + Over The Moon (Maygay) (EPOCH) (1.2, set 2) + + + ep_otmcl + Over The Moon Club (Maygay) (EPOCH) (set 1) + + + ep_otmcla + Over The Moon Club (Maygay) (EPOCH) (set 2) + + + ep_ozzie + Ozzie Ozzie Ozzie (Maygay) (EPOCH) (2.Z, set 1) + + + ep_ozziea + Ozzie Ozzie Ozzie (Maygay) (EPOCH) ( .2, set 2) + + + ep_ozzieb + Ozzie Ozzie Ozzie (Maygay) (EPOCH) (5.J, set 3) + + + ep_ozziec + Ozzie Ozzie Ozzie (Maygay) (EPOCH) (6.J, set 4) + + + ep_ozzied + Ozzie Ozzie Ozzie (Maygay) (EPOCH) (1.1, set 5) + + + ep_ozziee + Ozzie Ozzie Ozzie (Maygay) (EPOCH) (1.1, set 6) + + + ep_ozzief + Ozzie Ozzie Ozzie (Maygay) (EPOCH) (2.Z, set 7) + + + ep_ozzieg + Ozzie Ozzie Ozzie (Maygay) (EPOCH) (0.2, set 8) + + + ep_ozzieh + Ozzie Ozzie Ozzie (Maygay) (EPOCH) (0.2, set 9) + + + ep_party + Party Party (Global) (EPOCH) (1.1) + + + ep_pascl + Passport To Riches Classic Club (Maygay) (EPOCH) (1.2, set 1) + + + ep_pascla + Passport To Riches Classic Club (Maygay) (EPOCH) (1.2, set 2) + + + ep_passp + Passport To Riches Club (Maygay) (EPOCH) (1.2, set 1) + + + ep_passpa + Passport To Riches Club (Maygay) (EPOCH) (1.2, set 2) + + + ep_passpb + Passport To Riches Classic Club (Maygay) (EPOCH) (1.3, set 3) + + + ep_passpc + Passport To Riches Classic Club (Maygay) (EPOCH) (1.3, set 4) + + + ep_pesos + Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 1) + + + ep_pesosa + Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 2) + + + ep_pesosb + Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 3) + + + ep_pesosc + Pick Yer Pesos (Maygay - Impulse) (EPOCH) (set 4) + + + ep_pharo + Pharaoh's Treasure (Maygay) (EPOCH) (set 1) + + + ep_pharoa + Pharaoh's Treasure (Maygay) (EPOCH) (set 2) + + + ep_pizza + Pizza The Action (Maygay) (EPOCH) (2.3, set 1) + + + ep_pizzaa + Pizza The Action (Maygay) (EPOCH) (2.3, set 2) + + + ep_pizzab + Pizza The Action (Maygay) (EPOCH) (2.1, set 3) + + + ep_pizzac + Pizza The Action (Maygay) (EPOCH) (2.1, set 4) + + + ep_pkni + The Phoenix Knights (Global) (EPOCH) (1.1, set 1) + + + ep_pknia + The Phoenix Knights (Global) (EPOCH) (1.1, set 2) + + + ep_pknib + The Phoenix Knights (Global) (EPOCH) (1.3, set 3) + + + ep_pknic + The Phoenix Knights (Global) (EPOCH) (1.3, set 4) + + + ep_pknid + The Phoenix Knights (Global) (EPOCH) (1.4, set 5) + + + ep_pknie + The Phoenix Knights (Global) (EPOCH) (1.7, set 6) + + + ep_pknif + The Phoenix Knights (Global) (EPOCH) (1.7, set 7) + + + ep_pwrpl + Power Play (Maygay) (EPOCH) (PPLY 0.3, set 1) + + + ep_pwrpla + Power Play (Maygay) (EPOCH) (PPLY 0.3, set 2) + + + ep_rags + Rags To Riches Club (Maygay) (EPOCH) (1.10, set 1) + + + ep_ragsa + Rags To Riches Club (Maygay) (EPOCH) (1.10, set 2) + + + ep_rchik + Rich Chics Club (Global) (EPOCH) (set 1) + + + ep_rchika + Rich Chics Club (Global) (EPOCH) (set 2) + + + ep_react + Reactor (Maygay - Impulse) (EPOCH) (set 1) + + + ep_reacta + Reactor (Maygay - Impulse) (EPOCH) (set 2) + + + ep_reactb + Reactor (Maygay - Impulse) (EPOCH) (set 3) + + + ep_reactc + Reactor (Maygay - Impulse) (EPOCH) (set 4) + + + ep_reactd + Reactor (Maygay - Impulse) (EPOCH) (set 5) + + + ep_reacte + Reactor (Maygay - Impulse) (EPOCH) (set 6) + + + ep_redl + Red Line (Extreme) (EPOCH) (RELI 0.1, set 1) + + + ep_redla + Red Line (Extreme) (EPOCH) (RELI 0.1, set 2) + + + ep_rlgdt + Reel Good Time (Rebuild) (Global) (Version 1.0) (EPOCH) + + + ep_roost + Roosters Millions (Maygay) (EPOCH) (1.2, set 1) + + + ep_roosta + Roosters Millions (Maygay) (EPOCH) (1.2, set 2) + + + ep_royrc + Royal Roulette Club (Impulse) (EPOCH) (set 1) + + + ep_royrca + Royal Roulette Club (Impulse) (EPOCH) (set 2) + + + ep_royrl + Royal Roulette (Maygay) (EPOCH) (set 1) + + + ep_royrla + Royal Roulette (Maygay) (EPOCH) (set 2) + + + ep_royrlb + Royal Roulette (Maygay) (EPOCH) (set 3) + + + ep_royrlc + Royal Roulette (Maygay) (EPOCH) (set 4) + + + ep_royrld + Royal Roulette (Maygay) (EPOCH) (set 5) + + + ep_royrle + Royal Roulette (Maygay) (EPOCH) (set 6) + + + ep_rtt + Round The Twist (Maygay) (EPOCH) (set 1) + + + ep_rtta + Round The Twist (Maygay) (EPOCH) (set 2) + + + ep_scrm + Screamin Demon (Maygay) (EPOCH) (SCDE 2.0, set 1) + + + ep_scrma + Screamin Demon (Maygay) (EPOCH) (SCDE 2.0, set 2) + + + ep_scrmb + Screamin Demon (Maygay) (EPOCH) (SCDE 1.0, set 3) + + + ep_scrmc + Screamin Demon (Maygay) (EPOCH) (SCDE 1.0, set 4) + + + ep_sdcla + Spotted Dick Classic (Global) (EPOCH) (set 1) + + + ep_sdclaa + Spotted Dick Classic (Global) (EPOCH) (set 2) + + + ep_sdclab + Spotted Dick Classic (Global) (EPOCH) (set 3) + + + ep_sdclac + Spotted Dick Classic (Global) (EPOCH) (set 4) + + + ep_sdclad + Spotted Dick Classic (Global) (EPOCH) (set 5) + + + ep_sdclae + Spotted Dick Classic (Global) (EPOCH) (set 6) + + + ep_sdclaf + Spotted Dick Classic (Global) (EPOCH) (set 7) + + + ep_sdclag + Spotted Dick Classic (Global) (EPOCH) (set 8) + + + ep_sdclb + Spotted Dick Club (Global) (EPOCH) (set 1) + + + ep_sdclba + Spotted Dick Club (Global) (EPOCH) (set 2) + + + ep_secag + Secret Agent (Maygay) (EPOCH) (1.5, set 1) + + + ep_secaga + Secret Agent (Maygay) (EPOCH) (1.5, set 2) + + + ep_secagb + Secret Agent (Maygay) (EPOCH) (1.3, set 3) + + + ep_simfr + Simply Fruits (Maygay) (EPOCH) (1.2, set 1) + + + ep_simfra + Simply Fruits (Maygay) (EPOCH) (1.2, set 2) + + + ep_simp + The Simpsons (Maygay) (EPOCH) (3.6, set 1) + + + ep_simpa + The Simpsons (Maygay) (EPOCH) (3.5, set 2) + + + ep_simpb + The Simpsons (Maygay) (EPOCH) (3.5, set 3) + + + ep_simpc + The Simpsons (Maygay) (EPOCH) (4.5, set 4) + + + ep_simpd + The Simpsons (Maygay) (EPOCH) (4.5, set 5) + + + ep_simpe + The Simpsons (Maygay) (EPOCH) (1.5, set 6) + + + ep_simpf + The Simpsons (Maygay) (EPOCH) (1.5, set 7) + + + ep_simpg + The Simpsons (Maygay) (EPOCH) (2.5, set 8) + + + ep_simph + The Simpsons (Maygay) (EPOCH) (2.5, set 9) + + + ep_simpj + The Simpsons (Maygay) (EPOCH) (1.8, set 10) + + + ep_simpk + The Simpsons (Maygay) (EPOCH) (1.8, set 11) + + + ep_simpl + The Simpsons (Maygay) (EPOCH) (3.7, set 12) + + + ep_simpm + The Simpsons (Maygay) (EPOCH) (3.7, set 13) + + + ep_smoke + Holy Smoke! (Impulse) (EPOCH) (set 1) + + + ep_smokea + Holy Smoke! (Impulse) (EPOCH) (set 2) + + + ep_smokeb + Holy Smoke! (Impulse) (EPOCH) (set 3) + + + ep_smokec + Holy Smoke! (Impulse) (EPOCH) (set 4) + + + ep_smoked + Holy Smoke! (Impulse) (EPOCH) (set 5) + + + ep_smokee + Holy Smoke! (Impulse) (EPOCH) (set 6) + + + ep_smokef + Holy Smoke! (Impulse) (EPOCH) (set 7) + + + ep_smokeg + Holy Smoke! (Impulse) (EPOCH) (set 8) + + + ep_smokeh + Holy Smoke! (Impulse) (EPOCH) (set 9) + + + ep_smokei + Holy Smoke! (Impulse) (EPOCH) (set 10) + + + ep_smokej + Holy Smoke! (Impulse) (EPOCH) (set 11) + + + ep_snbev + Saturday Night Beaver (Global) (EPOCH) (1.8, set 1) + + + ep_snbeva + Saturday Night Beaver (Global) (EPOCH) (1.8, set 2) + + + ep_snbevb + Saturday Night Beaver (Global) (EPOCH) (1.9, set 3) + + + ep_snbevc + Saturday Night Beaver (Global) (EPOCH) (1.9, set 4) + + + ep_snbevd + Saturday Night Beaver (Global) (EPOCH) (2.1, set 5) + + + ep_snbeve + Saturday Night Beaver (Global) (EPOCH) (2.1, set 6) + + + ep_snset + Sunset Strip (Extreme) (EPOCH) (SUST 0.1, set 1) + + + ep_snseta + Sunset Strip (Extreme) (EPOCH) (SUST 0.1, set 2) + + + ep_snw + Super Nudge Wink (Maygay - Union) (EPOCH) (set 1) + + + ep_snwa + Super Nudge Wink (Maygay - Union) (EPOCH) (set 2) + + + ep_snwb + Super Nudge Wink (Maygay - Union) (EPOCH) (set 3) + + + ep_snwc + Super Nudge Wink (Maygay - Union) (EPOCH) (set 4) + + + ep_snwd + Super Nudge Wink (Maygay - Union) (EPOCH) (set 5) + + + ep_spart + Spartacash (Maygay - Impulse) (EPOCH) (set 1) + + + ep_sparta + Spartacash (Maygay - Impulse) (EPOCH) (set 2) + + + ep_spartb + Spartacash (Maygay - Impulse) (EPOCH) (set 3) + + + ep_spcbw + Special Brew (Maygay) (EPOCH) (1.1, set 1) + + + ep_spcbwa + Special Brew (Maygay) (EPOCH) (1.1, set 2) + + + ep_spcbwb + Special Brew (Maygay) (EPOCH) (1.3, set 3) + + + ep_spcbwc + Special Brew (Maygay) (EPOCH) (1.3, set 4) + + + ep_spcbwd + Special Brew (Maygay) (EPOCH) (1.5, set 5) + + + ep_spcbwe + Special Brew (Maygay) (EPOCH) (1.5, set 6) + + + ep_spcbwf + Special Brew (Maygay) (EPOCH) (1.6, set 7) + + + ep_spcbwg + Special Brew (Maygay) (EPOCH) (1.6, set 8) + + + ep_spcbwh + Special Brew (Maygay) (EPOCH) (1.4, set 9) + + + ep_spcbwi + Special Brew (Maygay) (EPOCH) (1.4, set 10) + + + ep_spcbwj + Special Brew (Maygay) (EPOCH) (1.8, set 11) + + + ep_spcbwk + Special Brew (Maygay) (EPOCH) (1.8, set 12) + + + ep_spcbwl + Special Brew (Maygay) (EPOCH) (1.9, set 13) + + + ep_spcbwm + Special Brew (Maygay) (EPOCH) (1.9, set 14) + + + ep_spec + Spectre (Maygay) (EPOCH) (1.6, set 1) + + + ep_speca + Spectre (Maygay) (EPOCH) (1.6, set 2) + + + ep_specb + Spectre (Maygay) (EPOCH) (1.3, set 3) + + + ep_spin + Spin On It (Maygay - Impulse) (EPOCH) (set 1) + + + ep_spina + Spin On It (Maygay - Impulse) (EPOCH) (set 2) + + + ep_spinb + Spin On It (Maygay - Impulse) (EPOCH) (set 3) + + + ep_spinc + Spin On It (Maygay - Impulse) (EPOCH) (set 4) + + + ep_spind + Spin On It (Maygay - Impulse) (EPOCH) (set 5) + + + ep_spine + Spin On It (Maygay - Impulse) (EPOCH) (set 6) + + + ep_spirt + Hi Spirits (Global) (EPOCH) (2.3, set 1) + + + ep_spirta + Hi Spirits (Global) (EPOCH) (2.3, set 2) + + + ep_spirtb + Hi Spirits (Global) (EPOCH) (4.1, set 3) + + + ep_spntn + Spin & Tonic (Maygay - Impulse) (EPOCH) (set 1) + + + ep_spntna + Spin & Tonic (Maygay - Impulse) (EPOCH) (set 2) + + + ep_spntnb + Spin & Tonic (Maygay - Impulse) (EPOCH) (set 3) + + + ep_spntnc + Spin & Tonic (Maygay - Impulse) (EPOCH) (set 4) + + + ep_spook + Spooky Hollow (Global) (EPOCH) (1.3, set 1) + + + ep_spooka + Spooky Hollow (Global) (EPOCH) (1.3, set 2) + + + ep_spookb + Spooky Hollow (Global) (EPOCH) (2.7, set 3) + + + ep_srwin + Sir Winalot (Maygay) (EPOCH) (2.6, set 1) + + + ep_srwina + Sir Winalot (Maygay) (EPOCH) (3.3, set 2) + + + ep_srwinb + Sir Winalot (Maygay) (EPOCH) (3.3, set 3) + + + ep_srwinc + Sir Winalot (Maygay) (EPOCH) (2.6, set 4) + + + ep_srwind + Sir Winalot (Maygay) (EPOCH) (2.1, set 5) + + + ep_step + Stepping Stones (Maygay) (EPOCH) (1.0, set 1) + + + ep_stepa + Stepping Stones (Maygay) (EPOCH) (1.0, set 2) + + + ep_stm + Storm Force (Global) (EPOCH) (set 1) + + + ep_stma + Storm Force (Global) (EPOCH) (set 2) + + + ep_stmb + Storm Force (Global) (EPOCH) (set 3) + + + ep_stmc + Storm Force (Global) (EPOCH) (set 4) + + + ep_stmcl + Storm Force Club (Global) (EPOCH) (set 1) + + + ep_stmcla + Storm Force Club (Global) (EPOCH) (set 2) + + + ep_strat + Stratagem (Maygay) (EPOCH) (set 1) + + + ep_strata + Stratagem (Maygay) (EPOCH) (set 2) + + + ep_subb + Subbuteo (Maygay) (EPOCH) (set 1) + + + ep_subba + Subbuteo (Maygay) (EPOCH) (set 2) + + + ep_subbb + Subbuteo (Maygay) (EPOCH) (set 3) + + + ep_subbc + Subbuteo (Maygay) (EPOCH) (set 4) + + + ep_subbd + Subbuteo (Maygay) (EPOCH) (set 5) + + + ep_subbe + Subbuteo (Maygay) (EPOCH) (set 6) + + + ep_subbf + Subbuteo (Maygay) (EPOCH) (set 7) + + + ep_subbg + Subbuteo (Maygay) (EPOCH) (set 8) + + + ep_survi + Survival (Maygay) (EPOCH) (1.4, set 1) + + + ep_survia + Survival (Maygay) (EPOCH) (1.4, set 2) + + + ep_tak5 + Take Five (Maygay - Union) (EPOCH) (set 1) + + + ep_tak5a + Take Five (Maygay - Union) (EPOCH) (set 2) + + + ep_tcrwn + Triple Crown (Maygay) (EPOCH) (2.2, set 1) + + + ep_tcrwna + Triple Crown (Maygay) (EPOCH) (2.2, set 2) + + + ep_tcrwnb + Triple Crown (Maygay) (EPOCH) (2.2, set 3) + + + ep_tcrwnc + Triple Crown (Maygay) (EPOCH) (2.2, set 4) + + + ep_tcrwnd + Triple Crown (Maygay) (EPOCH) (3.1, set 5) + + + ep_tcrwne + Triple Crown (Maygay) (EPOCH) (3.1, set 6) + + + ep_tincn + Tin Can Alley (Maygay) (EPOCH) (1.5, set 1) + + + ep_tincna + Tin Can Alley (Maygay) (EPOCH) (1.5, set 2) + + + ep_tits + Title Shot Club (Maygay) (EPOCH) (1.7, set 1) + + + ep_titsa + Title Shot Club (Maygay) (EPOCH) (1.7, set 2) + + + ep_titsb + Title Shot Club (Maygay) (EPOCH) (1.5, set 3) + + + ep_tod + Truth Or Dare (Global) (EPOCH) (set 1) + + + ep_toda + Truth Or Dare (Global) (EPOCH) (set 2) + + + ep_tonfn + Tons Of Fun (Maygay) (EPOCH) (1.5, set 1) + + + ep_tonfna + Tons Of Fun (Maygay) (EPOCH) (1.5, set 2) + + + ep_tortr + Torture TV (Maygay) (EPOCH) (1.3, set 1) + + + ep_tortra + Torture TV (Maygay) (EPOCH) (1.3, set 2) + + + ep_tp + Trivial Pursuit (Maygay) (EPOCH) (3.5, set 1) + + + ep_tp2 + Trivial Pursuit 2 (Maygay) (EPOCH) (2.2, set 1) + + + ep_tp2a + Trivial Pursuit 2 (Maygay) (EPOCH) (2.2, set 2) + + + ep_tpa + Trivial Pursuit (Maygay) (EPOCH) (3.5, set 2) + + + ep_tpb + Trivial Pursuit (Maygay) (EPOCH) (2.1, set 3) + + + ep_trail + Trailblazer (Maygay - Impulse) (EPOCH) (set 1) + + + ep_traila + Trailblazer (Maygay - Impulse) (EPOCH) (set 2) + + + ep_trailb + Trailblazer (Maygay - Impulse) (EPOCH) (set 3) + + + ep_treas + Treasure Hunt (Global) (EPOCH) (Version 1.6) + + + ep_tree + Tree Amigos (Maygay) (EPOCH) (TRAM 0.3, set 1) + + + ep_treea + Tree Amigos (Maygay) (EPOCH) (TRAM 0.3, set 2) + + + ep_trics + Triple Cash (Maygay - Union) (EPOCH) (set 1) + + + ep_tricsa + Triple Cash (Maygay - Union) (EPOCH) (set 2) + + + ep_tutcl + Tutankhamun Club (Maygay) (EPOCH) (2.1, set 1) + + + ep_tutcla + Tutankhamun Club (Maygay) (EPOCH) (2.1, set 2) + + + ep_tutclb + Tutankhamun Club (Maygay) (EPOCH) (1.8, set 3) + + + ep_twarp + Time Warp (Extreme) (EPOCH) (TWRP 0.1, set 1) + + + ep_twarpa + Time Warp (Extreme) (EPOCH) (TWRP 0.1, set 2) + + + ep_twarpb + Time Warp (Extreme) (EPOCH) (TWRP 0.4, set 3) + + + ep_twarpc + Time Warp (Extreme) (EPOCH) (TWRP 0.4, set 4) + + + ep_utncl + Utter Nutter Club (Global) (EPOCH) (set 1) + + + ep_utncla + Utter Nutter Club (Global) (EPOCH) (set 2) + + + ep_utnut + Utter Nutter (Global) (EPOCH) (set 1) + + + ep_utnuta + Utter Nutter (Global) (EPOCH) (set 2) + + + ep_utnutb + Utter Nutter (Global) (EPOCH) (set 3) + + + ep_utnutc + Utter Nutter (Global) (EPOCH) (set 4) + + + ep_vipjv + Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 1.1, set 1) + + + ep_vipjva + Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 1.1, set 2) + + + ep_vipjvb + Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 2.2, set 3) + + + ep_vipjvc + Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 2.2, set 4) + + + ep_vipjvd + Viper Jive (Maygay - Extreme) (EPOCH) (JIVE 2.1, set 5) + + + ep_wf + Wildfire (Global) (EPOCH) (set 1) + + + ep_wfa + Wildfire (Global) (EPOCH) (set 2) + + + ep_wfb + Wildfire (Global) (EPOCH) (set 3) + + + ep_wfc + Wildfire (Global) (EPOCH) (set 4) + + + ep_wfd + Wildfire (Global) (EPOCH) (set 5) + + + ep_wfe + Wildfire (Global) (EPOCH) (set 6) + + + ep_wff + Wildfire (Global) (EPOCH) (set 7) + + + ep_wfg + Wildfire (Global) (EPOCH) (set 8) + + + ep_wildf + Wildfire (Maygay - Impulse) (EPOCH) (set 1) + + + ep_wildfa + Wildfire (Maygay - Impulse) (EPOCH) (set 2) + + + ep_wipeo + Wipeout (Maygay) (EPOCH) (set 1) + + + ep_wipeoa + Wipeout (Maygay) (EPOCH) (set 2) + + + ep_wipeob + Wipeout (Maygay) (EPOCH) (set 3) + + + ep_wipeoc + Wipeout (Maygay) (EPOCH) (set 4) + + + ep_wipeoe + Wipeout (Maygay) (EPOCH) (set 5) + + + ep_wleek + Weakest Leek Club (Global) (EPOCH) (set 1) + + + ep_wleeka + Weakest Leek Club (Global) (EPOCH) (set 2) + + + ep_word + Word Up (Maygay) (EPOCH) (1.4, set 1) + + + ep_worda + Word Up (Maygay) (EPOCH) (1.4, set 2) + + + ep_wordb + Word Up (Maygay) (EPOCH) (2.4, set 3) + + + ep_wordc + Word Up (Maygay) (EPOCH) (2.4, set 4) + + + ep_wordd + Word Up (Maygay) (EPOCH) (3.1, set 5) + + + ep_worde + Word Up (Maygay) (EPOCH) (3.1, set 6) + + + ep_wordf + Word Up (Maygay) (EPOCH) (4.1, set 7) + + + ep_wordg + Word Up (Maygay) (EPOCH) (4.1, set 8) + + + ep_wside + Wildside (Global) (EPOCH) (1.2, set 1) + + + ep_wsidea + Wildside (Global) (EPOCH) (set 2) + + + ep_wud + What's Up Doc (Global) (EPOCH) (set 1) + + + ep_wuda + What's Up Doc (Global) (EPOCH) (set 2) + + + ep_wudb + What's Up Doc (Global) (EPOCH) (set 3) + + + ep_wudc + What's Up Doc (Global) (EPOCH) (set 4) + + + ep_wudd + What's Up Doc (Global) (EPOCH) (set 5) + + + ep_wude + What's Up Doc (Global) (EPOCH) (set 6) + + + ep_xspot + X Marks The Spot (Maygay) (EPOCH) (1.5, set 1) + + + ep_xspota + X Marks The Spot (Maygay) (EPOCH) (1.5, set 2) + + + ep_xspotb + X Marks The Spot (Maygay) (EPOCH) (1.4, set 3) + + + ep_xtra + X-tra X-tra (Maygay) (EPOCH) (1.5, set 1) + + + ep_xtraa + X-tra X-tra (Maygay) (EPOCH) (1.5, set 2) + + + eprom + Escape from the Planet of the Robot Monsters (set 1) + + + eprom2 + Escape from the Planet of the Robot Monsters (set 2) + + + equites + Equites + + + equitess + Equites (Sega) + + + erosone + Eros One + + + ertictac + Erotictac/Tactic + + + ertictaca + Erotictac/Tactic (ver 01) + + + ertictacb + Erotictac/Tactic (set 2) + + + esb + The Empire Strikes Back + + + escape + Escape + + + esckids + Escape Kids (Asia, 4 Players) + + + esckidsj + Escape Kids (Japan, 2 Players) + + + esclwrld + Escape from the Lost World + + + esclwrldg + Escape from the Lost World (German) + + + escounts + Every Second Counts (39-360-053) + + + esh + Esh's Aurunmilla (set 1) + + + esha + Esh's Aurunmilla (set 2) + + + esha_la1 + Earthshaker (LA-1) + + + esha_la3 + Earthshaker (LA-3) + + + esha_lg1 + Earthshaker (German) (LG-1) + + + esha_lg2 + Earthshaker (German) (LG-2) + + + esha_ma3 + Earthshaker (Metallica) (LA-3) + + + esha_pa1 + Earthshaker (Prototype) (PA-1) + + + esha_pr4 + Earthshaker (Family version) (PR-4) + + + eshb + Esh's Aurunmilla (set 3) + + + espgal + Espgaluda (2003/10/15 Master Ver) + + + espgal2 + Espgaluda II (2005/11/14 MASTER VER) + + + espial + Espial (Europe) + + + espialu + Espial (US?) + + + esprade + ESP Ra.De. (International, Ver. 98/04/22) + + + espradej + ESP Ra.De. (Japan, Ver. 98/04/21) + + + espradejo + ESP Ra.De. (Japan, Ver. 98/04/14) + + + eswat + E-Swat - Cyber Police (set 4, World, FD1094 317-0130) + + + eswatbl + E-Swat - Cyber Police (bootleg) + + + eswatj + E-Swat - Cyber Police (set 2, Japan, FD1094 317-0128) + + + eswatj1 + E-Swat - Cyber Police (set 1, Japan, FD1094 317-0131) + + + eswatu + E-Swat - Cyber Police (set 3, US, FD1094 317-0129) + + + eto + Kokontouzai Eto Monogatari (Japan) + + + euro2k2 + Europa 2002 (Ver 2.0, set 1) + + + euro2k2a + Europa 2002 (Ver 2.0, set 2) + + + euro2k2s + Europa 2002 Space (Ver 3.0) + + + euroch92 + Euro Champ '92 (World) + + + eurogame + The Euro Game (set 1) + + + eurogamea + The Euro Game (set 2) + + + europass + Euro Pass (Ver 1.1) + + + evelknie + Evel Knievel + + + evilngt + Evil Night (ver UBA) + + + evilngte + Evil Night (ver EAA) + + + evilston + Evil Stone + + + evlfight + Evil Fight + + + evosocc + Evolution Soccer + + + ewf + Earth Wind Fire + + + excalibr + Excalibur + + + excelsr + Excelsior (set 1) + + + excelsra + Excelsior (set 2) + + + excitbj + Exciting Black Jack + + + excitebk + Vs. Excitebike (set EB4-4 A) + + + excitebka + Vs. Excitebike (set EB4-3 ?) + + + excthour + Exciting Hour + + + exctleag + Excite League (FD1094 317-0079) + + + exctscc2 + Exciting Soccer II + + + exctsccr + Exciting Soccer + + + exctsccra + Exciting Soccer (alternate music) + + + exctsccrb + Exciting Soccer (bootleg) + + + exctsccrj + Exciting Soccer (Japan) + + + exctsccrjo + Exciting Soccer (Japan, older) + + + exctsccru + Exciting Soccer (US) + + + exedexes + Exed Exes + + + exerion + Exerion + + + exerionb + Exerion (bootleg) + + + exeriont + Exerion (Taito) + + + exerizer + Exerizer (Japan) + + + exerizerb + Exerizer (Japan) (bootleg) + + + exodus + Exodus (bootleg?) + + + expcard + Express Card / Top Card (Ver. 1.5) + + + explbrkr + Explosive Breaker + + + explorer + Explorer (bootleg of Scramble) + + + exprraid + Express Raider (World, Rev 4) + + + exprraidi + Express Raider (Italy) + + + exprraidu + Express Raider (US, rev 5) + + + exsafar + Safari (Russia) (Extrema) + + + extdwnhl + Extreme Downhill (v1.5) + + + exterm + Exterminator + + + extrmatn + Extermination (World) + + + extrmatnj + Extermination (Japan) + + + extrmatnu + Extermination (US) + + + extrmth + Treasure Hunt (Russia) (Extrema) + + + extrmti + Treasure Island (Russia) (Extrema) + + + exvania + Exvania (World) + + + exvaniaj + Exvania (Japan) + + + exzisus + Exzisus (Japan, dedicated) + + + exzisusa + Exzisus (Japan, conversion) + + + exzisust + Exzisus (TAD license) + + + eyes + Eyes (US set 1) + + + eyes2 + Eyes (US set 2) + + + eyesb + Eyes (bootleg set 1) + + + eyeszac + Eyes (Italy) + + + eyeszacb + Eyes (bootleg set 2, decrypted) + + + eztouch + EZ Touch (v116 China) + + + f14_l1 + F14 Tomcat (L-1) + + + f14_p3 + F14 Tomcat (P-3) + + + f14_p4 + F14 Tomcat (P-4) + + + f15se + F-15 Strike Eagle (rev. 2.2 02/25/91) + + + f15se21 + F-15 Strike Eagle (rev. 2.1 02/04/91) + + + f1dream + F-1 Dream + + + f1dreamb + F-1 Dream (bootleg) + + + f1en + F1 Exhaust Note + + + f1gp + F-1 Grand Prix + + + f1gp2 + F-1 Grand Prix Part II + + + f1gpb + F-1 Grand Prix (Playmark bootleg) + + + f1gpp + F1 Grand Prix + + + f1gpstar + Grand Prix Star + + + f1gpstr2 + F-1 Grand Prix Star II + + + f1lap + F1 Super Lap (World) + + + f1lapj + F1 Super Lap (Japan) + + + f1superb + F1 Super Battle + + + f355 + Ferrari F355 Challenge + + + f355bios + Naomi Ferrari F355 Challenge Bios + + + f355twin + Ferrari F355 Challenge (Twin) + + + f355twn2 + Ferrari F355 Challenge 2 (Twin) + + + fa + F/A (Japan) + + + faceoff + Face Off (Japan) + + + faeton + Faeton + + + fairyl2 + Fairy Land 2 (set 1) + + + fairyl2a + Fairy Land 2 (set 2) + + + fairyl2b + Fairy Land 2 (set 3) + + + fairyl2bl + Fairy Land 2 (bootleg) + + + falcnwld + Falcons Wild - Wild Card 1991 (TVG) + + + falcnwlda + Falcons Wild - World Wide Poker (Video Klein, set 1) + + + falcnwldb + Falcons Wild - World Wide Poker (Video Klein, set 2) + + + falcnwldc + Falcons Wild - World Wide Poker (Falcon original) + + + falcon + Falcon (bootleg of Phoenix) (8085A CPU) + + + falconz + Falcon (bootleg of Phoenix) (Z80 CPU) + + + famibox + FamicomBox + + + famlyfun + Family Fun! + + + fantasia + Fantasia (940429 PCB, set 1) + + + fantasiaa + Fantasia (940307 PCB) + + + fantasiab + Fantasia (940429 PCB, set 2) + + + fantastc + Fantastic (Galaga conversion on Galaxian hardware) + + + fantasy + Fantasy (World) + + + fantasyj + Fantasy (Japan) + + + fantasyu + Fantasy (US) + + + fantazia + Fantazia (bootleg?) + + + fantjour + Fantastic Journey (ver EAA) + + + fantjoura + Fantastic Journey (ver AAA) + + + fantland + Fantasy Land (set 1) + + + fantlanda + Fantasy Land (set 2) + + + fantsia2 + Fantasia II (Explicit) + + + fantsia2a + Fantasia II (Less Explicit) + + + fantsy95 + Fantasy '95 + + + fantzn2 + Fantasy Zone II - The Tears of Opa-Opa (MC-8123, 317-0057) + + + fantzn2x + Fantasy Zone II - The Tears of Opa-Opa (System 16C version) + + + fantzn2xp + Fantasy Zone II - The Tears of Opa-Opa (System 16C version, prototype) + + + fantzone + Fantasy Zone (Rev A, unprotected) + + + fantzone1 + Fantasy Zone (unprotected) + + + fantzonep + Fantasy Zone (317-5000) + + + fantzonepr + Fantasy Zone (prototype) + + + farfalla + Farfalla + + + farfallag + Farfalla (German speech) + + + farfallai + Farfalla (Italian speech) + + + farmer + Farmers Rebellion + + + farwest + Far West + + + fashion + Fashion (Version 2.14) + + + fashiong + Fashion Gambler (set 1) + + + fashiong2 + Fashion Gambler (set 2) + + + fastdraw + Fast Draw Showdown v1.3 + + + fastdrwp + Fast Draw (poker conversion kit)? + + + fastfred + Fast Freddie + + + fastlane + Fast Lane + + + fateulc + Fate: Unlimited Codes (FUD1 ver. A) + + + fateulcb + Fate: Unlimited Codes (bootleg) + + + fatfursp + Fatal Fury Special / Garou Densetsu Special (set 1)(NGM-058)(NGH-058) + + + fatfurspa + Fatal Fury Special / Garou Densetsu Special (set 2)(NGM-058)(NGH-058) + + + fatfurwa + Fatal Fury: Wild Ambition (rev.A) + + + fatfury1 + Fatal Fury - King of Fighters / Garou Densetsu - shukumei no tatakai (NGM-033)(NGH-033) + + + fatfury2 + Fatal Fury 2 / Garou Densetsu 2 - arata-naru tatakai (NGM-047)(NGH-047) + + + fatfury3 + Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - haruka-naru tatakai (NGM-069)(NGH-069) + + + fathom + Fathom + + + fax + FAX + + + fax2 + FAX 2 + + + fb2010 + Fruit Bonus 2010 + + + fb2gen + Fruit Bonus 2nd Generation (Version 1.8E Dual) + + + fb2genc1 + Fruit Bonus 2nd Generation (Version 1.8R, set 1) + + + fb2genc2 + Fruit Bonus 2nd Generation (Version 1.8LT, set 1) + + + fb2gend1 + Fruit Bonus 2nd Generation (Version 1.8R, set 2) + + + fb2gend2 + Fruit Bonus 2nd Generation (Version 1.8LT, set 2) + + + fb2geno + Fruit Bonus 2nd Generation (Version 1.6XT) + + + fb2geno2 + Fruit Bonus 2nd Generation (Version 1.5) + + + fb2genv1 + Fruit Bonus 2nd Generation (Version 1.8R Dual) + + + fb2genv2 + Fruit Bonus 2nd Generation (Version 1.8LT Dual) + + + fb2nd + Fruit Bonus 2nd Edition (Version 1.8R, set 1) + + + fb2ndc2 + Fruit Bonus 2nd Edition (Version 1.8LT, set 1) + + + fb2ndd1 + Fruit Bonus 2nd Edition (Version 1.8R, set 2) + + + fb2ndd2 + Fruit Bonus 2nd Edition (Version 1.8LT, set 2) + + + fb2ndo + Fruit Bonus 2nd Edition (Version 1.5) + + + fb2ndv1 + Fruit Bonus 2nd Edition (Version 1.8R Dual) + + + fb2ndv2 + Fruit Bonus 2nd Edition (Version 1.8LT Dual) + + + fb3g + Fruit Bonus 3G (Version 1.0.3) + + + fb4 + Fruit Bonus 2004 (Version 1.5R, set 1) + + + fb4b2 + Fruit Bonus 2004 (Version 1.5LT, set 1) + + + fb4c1 + Fruit Bonus 2004 (Version 1.5R, set 2) + + + fb4c2 + Fruit Bonus 2004 (Version 1.5LT, set 2) + + + fb4d1 + Fruit Bonus 2004 (Version 1.5R, set 3) + + + fb4d2 + Fruit Bonus 2004 (Version 1.5LT, set 3) + + + fb4exp + Fruit Bonus 2005 (2004 Export - Version 1.5E Dual) + + + fb4o + Fruit Bonus 2004 (Version 1.3XT) + + + fb4o2 + Fruit Bonus 2004 (Version 1.2) + + + fb4v1 + Fruit Bonus 2004 (Version 1.5R Dual) + + + fb4v2 + Fruit Bonus 2004 (Version 1.5LT Dual) + + + fb5 + Fruit Bonus 2005 (Version 1.5SH, set 1) + + + fb5c + Fruit Bonus 2005 (Version 1.5SH, set 2) + + + fb5d + Fruit Bonus 2005 (Version 1.5SH, set 3) + + + fb5v + Fruit Bonus 2005 (Version 1.5SH Dual) + + + fb6 + Fruit Bonus '06 - 10th anniversary (Version 1.7E CGA) + + + fb6d1 + Fruit Bonus '06 - 10th anniversary (Version 1.7R CGA) + + + fb6d2 + Fruit Bonus '06 - 10th anniversary (Version 1.7LT CGA) + + + fb6s1 + Fruit Bonus '06 - 10th anniversary (Version 1.7R CGA, Compact PCB) + + + fb6s2 + Fruit Bonus '06 - 10th anniversary (Version 1.7LT CGA, Compact PCB) + + + fb6s3 + Fruit Bonus '06 - 10th anniversary (Version 1.3R CGA, Compact PCB) + + + fb6se + Fruit Bonus 2006 Special Edition (Version 1.4E CGA) + + + fb6sed1 + Fruit Bonus 2006 Special Edition (Version 1.4R CGA) + + + fb6sed2 + Fruit Bonus 2006 Special Edition (Version 1.4LT CGA) + + + fb6sev + Fruit Bonus 2006 Special Edition (Version 1.4E Dual) + + + fb6sev1 + Fruit Bonus 2006 Special Edition (Version 1.4R Dual) + + + fb6sev2 + Fruit Bonus 2006 Special Edition (Version 1.4LT Dual) + + + fb6v + Fruit Bonus '06 - 10th anniversary (Version 1.7E Dual) + + + fb6v1 + Fruit Bonus '06 - 10th anniversary (Version 1.7R Dual) + + + fb6v2 + Fruit Bonus '06 - 10th anniversary (Version 1.7LT Dual) + + + fbait2bc + Fisherman's Bait 2 - A Bass Challenge (GE865 VER. UAB) + + + fbaitbc + Fisherman's Bait - A Bass Challenge (GE765 VER. UAB) + + + fbaitmc + Fisherman's Bait - Marlin Challenge (GX889 VER. EA) + + + fbaitmca + Fisherman's Bait - Marlin Challenge (GX889 VER. AA) + + + fbaitmcj + Fisherman's Bait - Marlin Challenge (GX889 VER. JA) + + + fbaitmcu + Fisherman's Bait - Marlin Challenge (GX889 VER. UA) + + + fball_ii + Fireball II + + + fbclass + Fireball Classic + + + fbcrazy + Football Crazy (Video Quiz) + + + fbdeluxe + Fruit Bonus Deluxe (Version 1.0.9) + + + fbdeluxeo + Fruit Bonus Deluxe (Version 1.0.7) + + + fbfrenzy + Football Frenzy (NGM-034)(NGH-034) + + + fcnudge + Fruit Carnival Nudge (Version 2.1 Dual) + + + fcnudgeo + Fruit Carnival Nudge (Version 2.0, set 1) + + + fcnudgeo2 + Fruit Carnival Nudge (Version 2.0, set 2) + + + fcnudgeo3 + Fruit Carnival Nudge (Version 1.7) + + + fcockt2 + Fruit Cocktail 2 (080707 Russia) + + + fcockt2_3 + Fruit Cocktail 2 (080909 World) + + + fcockt2_4 + Fruit Cocktail 2 (081105 World) + + + fcockt2_4a + Fruit Cocktail 2 (bootleg, 081105, banking address hack) + + + fcockt2_4b + Fruit Cocktail 2 (bootleg, 081105, banking address hack, no credit limit) + + + fcockt2_4d + Fruit Cocktail 2 (bootleg, 081105, banking address hack, payout percentage 70) + + + fcockt2_4f + Fruit Cocktail 2 (bootleg, 081105, LOTOS FR02) + + + fcockt2_5 + Fruit Cocktail 2 (081106 Russia) + + + fcockt2_6 + Fruit Cocktail 2 (090528 Lottery) + + + fcockt2_7 + Fruit Cocktail 2 (090813 Entertainment) + + + fcockt2a + Fruit Cocktail 2 (bootleg, 080707, banking address hack) + + + fcockt_10 + Fruit Cocktail (070517 Russia) + + + fcockt_11 + Fruit Cocktail (070822 Russia) + + + fcockt_12 + Fruit Cocktail (070911 Russia) + + + fcockt_14 + Fruit Cocktail (090708 Entertainment) + + + fcockt_3 + Fruit Cocktail (030623 World) + + + fcockt_5 + Fruit Cocktail (031111 World) + + + fcockt_6 + Fruit Cocktail (040216 World) + + + fcockt_6a + Fruit Cocktail (bootleg, 040216, banking address hack) + + + fcockt_6b + Fruit Cocktail (bootleg, 040216, backdoor) + + + fcockt_6c + Fruit Cocktail (bootleg, 040216, LotoRossy+) + + + fcockt_6d + Fruit Cocktail (bootleg, 040216, VIDEO GAME-1 FR01) + + + fcockt_7 + Fruit Cocktail (050118 World) + + + fcockt_7a + Fruit Cocktail (bootleg, 050118, backdoor) + + + fcockt_7b + Fruit Cocktail (bootleg, 050118, VIDEO GAME-1 FR01) + + + fcockt_7c + Fruit Cocktail (bootleg, 050118, payout percentage 40) + + + fcockt_7d + Fruit Cocktail (bootleg, 050118, payout percentage 60) + + + fcockt_7e + Fruit Cocktail (bootleg, 050118, payout percentage 70) + + + fcockt_7f + Fruit Cocktail (bootleg, 050118, changed version text) + + + fcockt_7g + Fruit Cocktail (bootleg, 050118, LOTO PROGRAM V-FC2) + + + fcockt_7h + Fruit Cocktail (bootleg, 050118, LOTOS FR01) + + + fcockt_8 + Fruit Cocktail (060111 World) + + + fcockt_8a + Fruit Cocktail (bootleg, 060111, LOTO COCKTAIL V01-0001) + + + fcockt_8b + Fruit Cocktail (bootleg, 060111, LOTTOGAME (I)) + + + fcockt_9 + Fruit Cocktail (070305 Russia) + + + fcombat + Field Combat + + + fcrash + Final Crash (bootleg of Final Fight) + + + fearless + Fearless Pinocchio (V101US) + + + fenix + Fenix (bootleg of Phoenix) + + + feversoc + Fever Soccer + + + feversos + Fever SOS (International, Ver. 98/09/25) + + + ffantasy + Fighting Fantasy (Japan revision 2) + + + ffantasya + Fighting Fantasy (Japan) + + + ffantasybl + Fighting Fantasy (bootleg with 68705) + + + ffight + Final Fight (World, set 1) + + + ffight2b + Final Fight 2 (SNES bootleg) + + + ffighta + Final Fight (World, set 2) + + + ffightbl + Final Fight (bootleg) + + + ffightj + Final Fight (Japan) + + + ffightj1 + Final Fight (Japan 900112) + + + ffightj2 + Final Fight (Japan 900305) + + + ffightj3 + Final Fight (Japan 900613) + + + ffightjh + Street Smart / Final Fight (Japan, hack) + + + ffightu + Final Fight (USA, set 1) + + + ffightu1 + Final Fight (USA, set 2) + + + ffightua + Final Fight (USA 900112) + + + ffightub + Final Fight (USA 900613) + + + ffortune + Fantasy Fortune (1VXFC5460, New Zealand) + + + ffreveng + Final Fight Revenge (JUET 990714 V1.000) + + + ffv101 + Flipper Football (v1.01) + + + ffv104 + Flipper Football (v1.04) + + + fghtatck + Fighter & Attacker (US) + + + fghtbskt + Fighting Basketball + + + fghthist + Fighter's History (World ver 43-07, DE-0380-2 PCB) + + + fghthistj + Fighter's History (Japan ver 41-07, DE-0395-1 PCB) + + + fghthistja + Fighter's History (Japan ver 41-05, DE-0380-2 PCB) + + + fghthistjb + Fighter's History (Japan ver 41-04, DE-0380-1 PCB) + + + fghthistu + Fighter's History (US ver 42-05, DE-0395-1 PCB) + + + fghthistua + Fighter's History (US ver 42-03, DE-0380-2 PCB) + + + fghtjam + Capcom Fighting Jam (JAM1 Ver. A) + + + fghtmn + Fighting Mania (QG918 VER. EAA) + + + fghtmna + Fighting Mania (QG918 VER. AAA) + + + fghtmnk + Fighting Mania (QG918 VER. KAA) + + + fghtmnu + Fighting Mania (QG918 VER. UAA) + + + fgoal + Field Goal (set 1) + + + fgoala + Field Goal (set 2) + + + fgtlayer + Fighting Layer (Japan, FTL1/VER.A) + + + fh_905h + Funhouse 9.05H + + + fh_l3 + Funhouse L-3 + + + fh_l4 + Funhouse L-4 + + + fh_l5 + Funhouse L-5 + + + fh_l9 + Funhouse L-9 (SL-2m) + + + fh_l9b + Funhouse L-9 (SL-2m) Bootleg Improved German translation + + + fhawk + Fighting Hawk (World) + + + fhawkj + Fighting Hawk (Japan) + + + fhboxers + Funky Head Boxers (JUETBKAL 951218 V1.000) + + + fhunter + Fortune Hunter (2XF5196I01, USA) + + + fhuntera + Fortune Hunter (2XF5196I02, USA) + + + fieldday + Field Day + + + fightfev + Fight Fever (set 1) + + + fightfeva + Fight Fever (set 2) + + + fightrol + Fighting Roller + + + filetto + Filetto (v1.05 901009) + + + filthyr + Filthy Rich (Russia) + + + finalap2 + Final Lap 2 + + + finalap2j + Final Lap 2 (Japan) + + + finalap3 + Final Lap 3 (World, set 1) + + + finalap3a + Final Lap 3 (World, set 2) + + + finalap3bl + Final Lap 3 (bootleg) + + + finalap3j + Final Lap 3 (Japan) + + + finalap3jc + Final Lap 3 (Japan - Rev C) + + + finalapr + Final Lap R (Rev. B) + + + finalaprj + Final Lap R (Japan Rev. C) + + + finalapro + Final Lap R + + + finalb + Final Blow (World) + + + finalbj + Final Blow (Japan) + + + finalbny + Mahjong Final Bunny [BET] (Japan) + + + finalbu + Final Blow (US) + + + finalgdr + Final Godori (Korea, version 2.20.5915) + + + finalizr + Finalizer - Super Transformation + + + finalizrb + Finalizer - Super Transformation (bootleg) + + + finallap + Final Lap (Rev E) + + + finallapc + Final Lap (Rev C) + + + finallapd + Final Lap (Rev D) + + + finallapjb + Final Lap (Japan, Rev B) + + + finallapjc + Final Lap (Japan, Rev C) + + + finalttr + Final Tetris + + + findlove + Zenkoku Seifuku Bishoujo Grand Prix Find Love (J 971212 V1.000) + + + findout + Find Out (Version 4.04) + + + finehour + Finest Hour (Japan) + + + finfurl + Final Furlong (FF2 Ver. A) + + + finfurl2 + Final Furlong 2 (World) + + + finfurl2j + Final Furlong 2 (Japan) + + + finlarch + Final Arch (J 950714 V1.001) + + + fire_l3 + Fire! (L-3) + + + fireact + Fire Action + + + fireactd + Fire Action Deluxe + + + firebarr + Fire Barrel (Japan) + + + firebatl + Fire Battle + + + firebeas + Firebeast (prototype) + + + firebird + Hot Fire Birds + + + firefox + Fire Fox (set 1) + + + firefoxa + Fire Fox (set 2) + + + firehawk + Fire Hawk + + + firemntn + Fire Mountain + + + fireone + Fire One + + + fireshrk + Fire Shark + + + fireshrka + Fire Shark (earlier) + + + fireshrkd + Fire Shark (Korea, set 1, easier) + + + fireshrkdh + Fire Shark (Korea, set 2, harder) + + + firetrap + Fire Trap (US) + + + firetrapbl + Fire Trap (Japan bootleg) + + + firetrapj + Fire Trap (Japan) + + + firetrk + Fire Truck / Smokey Joe + + + firstcl + First Class Traveller (set 1) + + + fishfren + Fishin' Frenzy (prototype) + + + fitegolf + Fighting Golf (World?) + + + fitegolfu + Fighting Golf (US) + + + fitfight + Fit of Fighting + + + fitter + Fitter + + + fitterbl + Fitter (bootleg of Round-Up) + + + fiveside + Five a Side Soccer (ver UAA) + + + fixeight + FixEight (Europe) + + + fixeighta + FixEight (Southeast Asia) + + + fixeightat + FixEight (Southeast Asia, Taito license) + + + fixeightbl + FixEight (Korea, bootleg) + + + fixeighth + FixEight (Hong Kong) + + + fixeightht + FixEight (Hong Kong, Taito license) + + + fixeightj + FixEight (Japan) + + + fixeightjt + FixEight (Japan, Taito license) + + + fixeightk + FixEight (Korea) + + + fixeightkt + FixEight (Korea, Taito license) + + + fixeightt + FixEight (Europe, Taito license) + + + fixeighttw + FixEight (Taiwan) + + + fixeighttwt + FixEight (Taiwan, Taito license) + + + fixeightu + FixEight (USA) + + + fixeightut + FixEight (USA, Taito license) + + + fjbuster + Fujiyama Buster (Japan) + + + fjholden + FJ Holden + + + flamegun + Flame Gunner + + + flamegunj + Flame Gunner (Japan) + + + flash_l1 + Flash (L-1) + + + flash_t1 + Flash (T-1) Ted Estes + + + flashgal + Flashgal (set 1) + + + flashgala + Flashgal (set 2) + + + flashgdn + Flash Gordon + + + flashgdnf + Flash Gordon (French) + + + flashgdnp1 + Flash Gordon (prototype rev. 1) + + + flashgdnp2 + Flash Gordon (prototype rev. 2) + + + flashgdnv + Flash Gordon (Vocalizer sound) + + + flicker + Flicker (prototype) + + + flicky + Flicky (128k Version, System 2, 315-5051) + + + flickyo + Flicky (64k Version, System 1, 315-5051, set 1) + + + flickys1 + Flicky (64k Version, System 1, 315-5051, set 2) + + + flickys2 + Flicky (128k Version, System 2, not encrypted) + + + flight2k + Flight 2000 + + + flipjack + Flipper Jack + + + flipmaze + Flip Maze (V2.04J) + + + flipshot + Battle Flip Shot + + + flipull + Flipull (Japan) + + + flkatck + Flak Attack (Japan) + + + flkatcka + Flak Attack (Japan, PWB 450593 sub-board) + + + flower + Flower (US) + + + flowerj + Flower (Japan) + + + flstory + The FairyLand Story + + + flstoryj + The FairyLand Story (Japan) + + + flyball + Flyball (rev 2) + + + flyball1 + Flyball (rev 1) + + + flyboy + Fly-Boy + + + flyboyb + Fly-Boy (bootleg) + + + flytiger + Flying Tiger (set 1) + + + flytigera + Flying Tiger (set 2) + + + fmaniac3 + Fishing Maniac 3 + + + fncywld + Fancy World - Earth of Crisis + + + fnkyfish + Funky Fish + + + fnshark + Flyin' Shark (bootleg of Hishou Zame) + + + foathens + Flame of Athens + + + foodf + Food Fight (rev 3) + + + foodf2 + Food Fight (rev 2) + + + foodfc + Food Fight (cocktail) + + + footchmp + Football Champ (World) + + + footchmpbl + Football Champ (World) (bootleg) + + + forcebrk + Force Break (bootleg) + + + forceii + Force II + + + forgottn + Forgotten Worlds (World) + + + forgottnu + Forgotten Worlds (USA, B-Board 88621B-2, Rev. C) + + + forgottnu1 + Forgotten Worlds (USA, B-Board 88618B-2, Rev. C) + + + forgottnua + Forgotten Worlds (USA, B-Board 88618B-2, Rev. A) + + + forgottnuaa + Forgotten Worlds (USA, B-Board 88618B-2, Rev. AA) + + + formatz + Formation Z + + + fort2b + Fortress 2 Blue Arcade (ver 1.01 / pcb ver 3.05) + + + fort2ba + Fortress 2 Blue Arcade (ver 1.00 / pcb ver 3.05) + + + fortecar + Forte Card (Ver 103, English) + + + fortecrd + Forte Card (Ver 110, Spanish) + + + fortune1 + Fortune I (PK485-S) Draw Poker + + + fotns + Fist Of The North Star + + + fourtrax + Four Trax + + + foxylady + Foxy Lady + + + fpoint + Flash Point (set 2, Japan, FD1094 317-0127A) + + + fpoint1 + Flash Point (set 1, Japan, FD1094 317-0127A) + + + fpointbj + Flash Point (Japan, bootleg) + + + fpointbl + Flash Point (World, bootleg) + + + fpwr2_l2 + Firepower II (L-2) + + + frankst + Mary Shelley's Frankenstein + + + frankstg + Mary Shelley's Frankenstein (Germany) + + + franticf + Frantic Fred + + + freddy + Freddy: A Nightmare on Elm Street (rev.3) + + + freddy4 + Freddy: A Nightmare on Elm Street (rev.4) + + + fredmem + Fred Flintstones' Memory Match (World?, Ticket version, 3/17/95) + + + fredmemc + Fred Flintstones' Memory Match (Mandarin Chinese, 3/17/95) + + + fredmemj + Fred Flintstones' Memory Match (Japan, High Score version, 3/20/95) + + + fredmemuk + Fred Flintstones' Memory Match (UK, 3/17/95) + + + fredmemus + Fred Flintstones' Memory Match (US, High Score version, 3/10/95) + + + fredmesp + Fred Flintstones' Memory Match (Spanish, 3/17/95) + + + freedom + Freedom + + + freefall + Freefall + + + freekick + Free Kick (NS6201-A 1987.10) + + + freekicka + Free Kick (NS6201-A 1987.9) + + + freekickb1 + Free Kick (bootleg set 1) + + + freekickb2 + Free Kick (bootleg set 2) + + + freekickb3 + Free Kick (bootleg set 3) + + + freeze + Freeze + + + freezeat + Freeze (Atari) (prototype, English voice, 96/10/25) + + + freezeat2 + Freeze (Atari) (prototype, 96/10/18) + + + freezeat3 + Freeze (Atari) (prototype, 96/10/07) + + + freezeat4 + Freeze (Atari) (prototype, 96/10/03) + + + freezeat5 + Freeze (Atari) (prototype, 96/09/20, AMOA-96) + + + freezeat6 + Freeze (Atari) (prototype, 96/09/07, Jamma-96) + + + freezeatjp + Freeze (Atari) (prototype, Japanese voice, 96/10/25) + + + frenzy + Frenzy + + + fresh + Fruit Fresh (Italy) + + + friskyt + Frisky Tom (set 1) + + + friskyta + Frisky Tom (set 2) + + + frogf + Frog (Falcon bootleg) + + + frogg + Frog (Galaxian hardware) + + + frogger + Frogger + + + froggermc + Frogger (Moon Cresta hardware) + + + froggers + Frog + + + froggers1 + Frogger (Sega set 1) + + + froggers2 + Frogger (Sega set 2) + + + froggrs + Frogger (Scramble hardware) + + + frogs + Frogs + + + fromanc2 + Taisen Idol-Mahjong Final Romance 2 (Japan) + + + fromanc4 + Taisen Mahjong Final Romance 4 (Japan) + + + fromance + Idol-Mahjong Final Romance (Japan) + + + fromancr + Taisen Mahjong Final Romance R (Japan) + + + frontier + Frontier + + + frontlin + Front Line + + + fround + The Final Round (version M) + + + froundl + The Final Round (version L) + + + frpwr_l2 + Firepower (L-2) + + + frpwr_l6 + Firepower (L-6) + + + frpwr_t6 + Firepower (T-6) + + + fruitbun + Fruits & Bunny (World?) + + + fruitpc + Fruit Land + + + fruitstb + Fruit Star Bonus (Ver 8.20PIR) + + + fruitstr + Fruit Star (encrypted) + + + fs_lx2 + The Flintstones (LX-2) + + + fs_lx4 + The Flintstones (LX-4) + + + fs_lx5 + The Flintstones (LX-5) + + + fs_sp2 + The Flintstones (SP-2) + + + fshark + Flying Shark (World) + + + fsharkbt + Flying Shark (bootleg with 8741) + + + fsoccer + Fighting Soccer (version 4) + + + fsoccerb + Fighting Soccer (Joystick hack bootleg) + + + fsoccerba + Fighting Soccer (Joystick hack bootleg, alt) + + + fsoccerj + Fighting Soccer (Japan) + + + fspiderb + Frog & Spiders (bootleg?) + + + fstarfrc + Final Star Force (US) + + + fstarfrcj + Final Star Force (Japan) + + + fstation + Fun Station Spielekoffer 9 Spiele + + + fswords + Fighters Swords (Korean release of Samurai Shodown III) + + + ft_l3 + Fish Tales (L-3) + + + ft_l4 + Fish Tales (L-4) + + + ft_l5 + Fish Tales (L-5) + + + ft_p4 + Fish Tales (P-4) + + + ftimpact + Fighters' Impact (Ver 2.02O) + + + ftimpactj + Fighters' Impact (Ver 2.02J) + + + ftimpactu + Fighters' Impact (Ver 2.02A) + + + ftimpcta + Fighters' Impact A (Ver 2.00J) + + + ftspeed + Faster Than Speed + + + fullthrl + Full Throttle (Japan) + + + fun4 + Fun Four (Set 1) [TTL] + + + fun4a + Fun Four (Set 2) [TTL] + + + funcsino + Status Fun Casino (V1.3s) + + + funcube + Funcube (v1.5) + + + funcube2 + Funcube 2 (v1.1) + + + funcube3 + Funcube 3 (v1.1) + + + funcube4 + Funcube 4 (v1.0) + + + funcube5 + Funcube 5 (v1.0) + + + funkball + Funky Ball + + + funkybee + Funky Bee + + + funkybeeb + Funky Bee (bootleg, harder) + + + funkyfig + The First Funky Fighter (set 1) + + + funkyfiga + The First Funky Fighter (set 2) + + + funkyjet + Funky Jet (World, rev 1) + + + funkyjeta + Funky Jet (World) + + + funkyjetj + Funky Jet (Japan, rev 2) + + + funlddlx + Funny Land de Luxe + + + funnyfm + Funny Farm (v1.17) + + + funnyfma + Funny Farm (v1.26) + + + funnyfmb + Funny Farm (v1.30) + + + funnymou + Funny Mouse (Japan) + + + funquiz + Fun World Quiz (Austrian) + + + funriver + Fun River (Version 1.4R CGA) + + + funriverd1 + Fun River (Version 1.3R CGA) + + + funriverv + Fun River (Version 1.4R Dual) + + + funybubl + Funny Bubble + + + funybublc + Funny Bubble (Comad version) + + + funystrp + Funny Strip + + + futari10 + Mushihime-Sama Futari Ver 1.0 (2006/10/23 MASTER VER.) + + + futari15 + Mushihime-Sama Futari Ver 1.5 (2006/12/8.MASTER VER. 1.54.) + + + futari15a + Mushihime-Sama Futari Ver 1.5 (2006/12/8 MASTER VER 1.54) + + + futaribl + Mushihime-Sama Futari Black Label (2007/12/11 BLACK LABEL VER) + + + futflash + Future Flash + + + futrquen + Future Queen + + + futspy + Future Spy (315-5061) + + + futurspa + Future Spa + + + futurwld + Future World + + + fuudol + Fuudol (Japan) + + + fvipers + Fighting Vipers (Revision D) + + + fvipers2 + Fighting Vipers 2 (Revision A) + + + fx + F-X (bootleg of S.R.D. Mission) + + + g13knd + Golgo 13 Kiseki no Dandou (Japan, GLS1/VER.A) + + + g4u2 + Games 4 U 2 (94 5.6-0) + + + g4u3 + Games 4 U 3 (94 5.6-4) + + + g4u3a + Games 4 U 3 (94 5.6-5) + + + g4u4 + Games 4 U 4 (94 5.6-5) + + + g4u5 + Games 4 U 5 (94 5.6-5) + + + g4u6 + Games 4 U 6 (94 5.6-5) + + + g4u7 + Games 4 U 7 (94 5.6-5a) + + + ga2 + Golden Axe: The Revenge of Death Adder (World) + + + ga2j + Golden Axe: The Revenge of Death Adder (Japan) + + + ga2u + Golden Axe: The Revenge of Death Adder (US) + + + gaia + Gaia Crusaders + + + gaiapols + Gaiapolis (ver EAF) + + + gaiapolsj + Gaiapolis (ver JAF) + + + gaiapolsu + Gaiapolis (ver UAF) + + + gaiden + Ninja Gaiden (US) + + + gakupara + Quiz Gakuen Paradise (Japan) + + + gakusai + Mahjong Gakuensai (Japan) + + + gakusai2 + Mahjong Gakuensai 2 (Japan) + + + gal10ren + Mahjong Gal 10-renpatsu (Japan) + + + gal3 + Galaxian 3 - Theater 6 : Project Dragoon + + + galactic + Galactica - Batalha Espacial + + + galaga + Galaga (Namco rev. B) + + + galaga3 + Galaga 3 (GP3 rev. D) + + + galaga3a + Galaga 3 (GP3 rev. C) + + + galaga3b + Galaga 3 (GP3) + + + galaga3c + Galaga 3 (set 4) + + + galaga3m + Galaga 3 (set 5) + + + galaga88 + Galaga '88 + + + galaga88j + Galaga '88 (Japan) + + + galagamf + Galaga (Midway set 1 with fast shoot hack) + + + galagamk + Galaga (Midway set 2) + + + galagamw + Galaga (Midway set 1) + + + galagao + Galaga (Namco) + + + galap1 + Space Invaders Galactica (galaxiana hack) + + + galap4 + Galaxian Part 4 (hack) + + + galapx + Galaxian Part X (moonaln hack) + + + galastrm + Galactic Storm (Japan) + + + galaxbsf + Galaxian (bootleg, set 1) + + + galaxbsf2 + Galaxian (bootleg, set 3) + + + galaxi + Galaxi (v2.0) + + + galaxia + Galaxia (set 1) + + + galaxiaa + Galaxia (set 2) + + + galaxiab + Galaxia (set 3) + + + galaxiac + Galaxia (set 4) + + + galaxian + Galaxian (Namco set 1) + + + galaxiana + Galaxian (Namco set 2) + + + galaxianbl + Galaxian (bootleg, set 2) + + + galaxiani + Galaxian (Irem) + + + galaxianm + Galaxian (Midway set 1) + + + galaxianmo + Galaxian (Midway set 2) + + + galaxiant + Galaxian (Taito) + + + galaxrf + Galaxian (Recreativos Franco S.A. Spanish bootleg) + + + galaxrfgg + Galaxian Growing Galaxip / Galaxian Nave Creciente (Recreativos Franco S.A. Spanish bootleg) + + + galaxyfg + Galaxy Fight - Universal Warriors + + + galaxygn + Galaxy Gunners + + + galaxypi + Galaxy + + + galaxyr + Galaxy Ranger + + + galaxyrp + Galaxy Ranger (Pioneer LDV1000) + + + galds + Gals Ds - Three Dealers Casino House (bootleg?) + + + galemp + Galaxy Empire (bootleg?) + + + galgame + Galaxy Game + + + galgame2 + Galaxy Games StarPak 2 + + + galgbios + Galaxy Games (BIOS v1.90) + + + galhustl + Gals Hustler + + + galivan + Cosmo Police Galivan (12/26/1985) + + + galivan2 + Cosmo Police Galivan (12/16/1985) + + + galivan3 + Cosmo Police Galivan (12/11/1985) + + + galkaika + Mahjong Gal no Kaika (Japan) + + + galkoku + Mahjong Gal no Kokuhaku (Japan) + + + gallag + Gallag + + + gallgall + Gallagher's Gallery v2.2 + + + gallop + Gallop - Armed Police Unit (Japan) + + + galmedes + Galmedes (Japan) + + + galpani2 + Gals Panic II (Asia) + + + galpani2e + Gals Panic II (English) + + + galpani2e2 + Gals Panic II (English, 2 PCB ver.) + + + galpani2g + Gals Panic II (Germany, 2 PCB ver.) + + + galpani2gs + Gals Panic II (Germany, single PCB) + + + galpani2i + Gals Panic II (Italy, single PCB) + + + galpani2j + Gals Panic II (Japan) + + + galpani2t + Gals Panic II (Taiwan) + + + galpani3 + Gals Panic 3 (Euro) + + + galpani3hk + Gals Panic 3 (Hong Kong) + + + galpani3j + Gals Panic 3 (Japan) + + + galpani3k + Gals Panic 3 (Korea) + + + galpani4 + Gals Panic 4 (Japan) + + + galpani4k + Gals Panic 4 (Korea) + + + galpanic + Gals Panic (Unprotected) + + + galpanica + Gals Panic (MCU Protected) + + + galpanis + Gals Panic S - Extra Edition (Europe) + + + galpanisj + Gals Panic S - Extra Edition (Japan) + + + galpanisk + Gals Panic S - Extra Edition (Korea) + + + galpans2 + Gals Panic S2 (Japan) + + + galpans2a + Gals Panic S2 (Asia) + + + galpans3 + Gals Panic S3 (Japan) + + + galpansu + Gals Panic SU (Korea) + + + galsnew + Gals Panic (US, EXPRO-02 PCB) + + + galsnewa + Gals Panic (Export, EXPRO-02 PCB) + + + galsnewj + Gals Panic (Japan, EXPRO-02 PCB) + + + galsnewk + Gals Panic (Korea, EXPRO-02 PCB) + + + galspnbl + Gals Pinball + + + galturbo + Galaxian Turbo (superg hack) + + + galxwars + Galaxy Wars (Universal set 1) + + + galxwars2 + Galaxy Wars (Universal set 2) + + + galxwarst + Galaxy Wars (Taito?) + + + gamatron + Gamatron + + + gamatros + Gamatron (Sonic) + + + gambl186 + unknown 186 based gambling game (V398) + + + gambl186a + unknown 186 based gambling game (V399) + + + gamecst2 + GameCristal (version 2.613) + + + gamecstl + GameCristal + + + gametngk + The Game Paradise - Master of Shooting! / Game Tengoku - The Game Paradise + + + gammagic + Game Magic + + + gamshara + Gamshara (10021 Ver.A) + + + gamt1 + Gaminator 1 (set 1) + + + gamt10 + Gaminator 10 (set 1) + + + gamt10a + Gaminator 10 (set 2) + + + gamt10b + Gaminator 10 (set 3) + + + gamt10bag + Gaminator 10 (bootleg, Bag) + + + gamt10c + Gaminator 10 (set 4) + + + gamt10d + Gaminator 10 (set 5) + + + gamt10e + Gaminator 10 (set 6) + + + gamt10ent + Gaminator 10 (bootleg, Ent) + + + gamt10f + Gaminator 10 (set 7) + + + gamt10g + Gaminator 10 (set 8) + + + gamt10gmult + Gaminator 10 (bootleg, Multiloto) + + + gamt10h + Gaminator 10 (set 9) + + + gamt10i + Gaminator 10 (set 10) + + + gamt10j + Gaminator 10 (set 11) + + + gamt10k + Gaminator 10 (set 12) + + + gamt10l + Gaminator 10 (set 13) + + + gamt10lotc + Gaminator 10 (bootleg, C-Loto) + + + gamt10lotm + Gaminator 10 (bootleg, Lotomatic) + + + gamt10m + Gaminator 10 (set 14) + + + gamt10n + Gaminator 10 (set 15) + + + gamt10o + Gaminator 10 (set 16) + + + gamt11 + Gaminator 11 (set 1) + + + gamt11a + Gaminator 11 (set 2) + + + gamt11b + Gaminator 11 (set 3) + + + gamt11bmult + Gaminator 11 (bootleg, Multiloto) + + + gamt11c + Gaminator 11 (set 4) + + + gamt12 + Gaminator 12 (set 1) + + + gamt12a + Gaminator 12 (set 2) + + + gamt12b + Gaminator 12 (set 3) + + + gamt16 + Gaminator 16 (set 1) + + + gamt16a + Gaminator 16 (set 2) + + + gamt16b + Gaminator 16 (set 3) + + + gamt16c + Gaminator 16 (set 4) + + + gamt16d + Gaminator 16 (set 5) + + + gamt16e + Gaminator 16 (set 6) + + + gamt16f + Gaminator 16 (set 7) + + + gamt16fmult + Gaminator 16 (bootleg, Multiloto) + + + gamt16g + Gaminator 16 (set 8) + + + gamt16h + Gaminator 16 (set 9) + + + gamt16i + Gaminator 16 (set 10) + + + gamt16j + Gaminator 16 (set 11) + + + gamt16k + Gaminator 16 (set 12) + + + gamt16lotc + Gaminator 16 (bootleg, C-Loto) + + + gamt17 + Gaminator 17 (set 1) + + + gamt17a + Gaminator 17 (set 2) + + + gamt17b + Gaminator 17 (set 3) + + + gamt18 + Gaminator 18 (set 1) + + + gamt18a + Gaminator 18 (set 2) + + + gamt18b + Gaminator 18 (set 3) + + + gamt18bmult + Gaminator 18 (bootleg, Multiloto) + + + gamt18c + Gaminator 18 (set 4) + + + gamt18d + Gaminator 18 (set 5) + + + gamt18ent + Gaminator 18 (bootleg, Ent) + + + gamt18lotc + Gaminator 18 (bootleg, C-Loto) + + + gamt19 + Gaminator 19 (set 1) + + + gamt19a + Gaminator 19 (set 2) + + + gamt19ent + Gaminator 19 (bootleg, Ent) + + + gamt19lotc + Gaminator 19 (bootleg, C-Loto) + + + gamt19mult + Gaminator 19 (bootleg, Multiloto) + + + gamt1a + Gaminator 1 (set 2) + + + gamt1b + Gaminator 1 (set 3) + + + gamt1ent + Gaminator 1 (bootleg, Ent) + + + gamt1lotc + Gaminator 1 (bootleg, C-Loto) + + + gamt20 + Gaminator 20 (set 1) + + + gamt20a + Gaminator 20 (set 2) + + + gamt20b + Gaminator 20 (set 3) + + + gamt20ent + Gaminator 20 (bootleg, Ent) + + + gamt20lotc + Gaminator 20 (bootleg, C-Loto) + + + gamt20lotm + Gaminator 20 (bootleg, Lotomatic) + + + gamt21 + Gaminator 21 (set 1) + + + gamt21a + Gaminator 21 (set 2) + + + gamt21amult + Gaminator 21 (bootleg, Multiloto) + + + gamt22 + Gaminator 22 (set 1) + + + gamt22a + Gaminator 22 (set 2) + + + gamt22amult + Gaminator 22 (bootleg, Multiloto) + + + gamt22b + Gaminator 22 (set 3) + + + gamt23 + Gaminator 23 (set 1) + + + gamt23a + Gaminator 23 (set 2) + + + gamt23b + Gaminator 23 (set 3) + + + gamt29 + Gaminator 29 (set 1) + + + gamt29a + Gaminator 29 (set 2) + + + gamt30 + Gaminator 30 (set 1) + + + gamt31 + Gaminator 31 (set 1) + + + gamt31mult + Gaminator 31 (bootleg, Multiloto) + + + gamt4 + Gaminator 4 (set 1) + + + gamt4a + Gaminator 4 (set 2) + + + gamt4b + Gaminator 4 (set 3) + + + gamt4c + Gaminator 4 (set 4) + + + gamt4d + Gaminator 4 (set 5) + + + gamt4dbag + Gaminator 4 (bootleg, Bag, set 1) + + + gamt4e + Gaminator 4 (set 6) + + + gamt4ent + Gaminator 4 (bootleg, Ent) + + + gamt4f + Gaminator 4 (set 7) + + + gamt4fbag + Gaminator 4 (bootleg, Bag, set 2) + + + gamt4g + Gaminator 4 (set 8) + + + gamt4h + Gaminator 4 (set 9) + + + gamt4hbag + Gaminator 4 (bootleg, Bag, set 3) + + + gamt4hmult + Gaminator 4 (bootleg, Multiloto) + + + gamt4i + Gaminator 4 (set 10) + + + gamt4ibag + Gaminator 4 (bootleg, Bag, set 4) + + + gamt4j + Gaminator 4 (set 11) + + + gamt4lotc + Gaminator 4 (bootleg, C-Loto) + + + gamt4lotca + Gaminator 4 (C-Loto, MK4) + + + gamt4lotm + Gaminator 4 (bootleg, Lotomatic) + + + gamt5 + Gaminator 5 (set 1) + + + gamt6 + Gaminator 6 (set 1) + + + gamt6a + Gaminator 6 (set 2) + + + gamt6b + Gaminator 6 (set 3) + + + gamt6c + Gaminator 6 (set 4) + + + gamt6d + Gaminator 6 (set 5) + + + gamt6e + Gaminator 6 (set 6) + + + gamt6ent + Gaminator 6 (bootleg, Ent) + + + gamt6f + Gaminator 6 (set 7) + + + gamt6lotc + Gaminator 6 (bootleg, C-Loto) + + + gamt7 + Gaminator 7 (set 1) + + + gamt7a + Gaminator 7 (set 2) + + + gamt7b + Gaminator 7 (set 3) + + + gamt7c + Gaminator 7 (set 4) + + + gamt7d + Gaminator 7 (set 5) + + + gamt7e + Gaminator 7 (set 6) + + + gamt7f + Gaminator 7 (set 7) + + + gamt7g + Gaminator 7 (set 8) + + + gamt7h + Gaminator 7 (set 9) + + + gamt8 + Gaminator 8 (set 1) + + + gamt8a + Gaminator 8 (set 2) + + + gamt8b + Gaminator 8 (set 3) + + + gamt8c + Gaminator 8 (set 4) + + + gamt8d + Gaminator 8 (set 5) + + + gamt8lotc + Gaminator 8 (bootleg, C-Loto) + + + gamt9 + Gaminator 9 (set 1) + + + gamt9a + Gaminator 9 (set 2) + + + gamt9lotc + Gaminator 9 (bootleg, C-Loto) + + + ganbare + Ganbare! Marine Kun (Japan 2K0411) + + + gangonta + Ganbare! Gonta!! 2 / Party Time: Gonta the Diver II (Japan Release) + + + gangrose + Gangster's Roses (v4.70) + + + gangwars + Gang Wars + + + gangwarsu + Gang Wars (US) + + + ganjaja + Ganbare Jajamaru Saisho wa Goo / Ganbare Jajamaru Hop Step & Jump + + + ganryu + Ganryu / Musashi Ganryuki + + + gaplus + Gaplus (GP2 rev. B) + + + gaplusa + Gaplus (GP2) + + + gaplusd + Gaplus (GP2 rev D, alternate hardware) + + + garage_4 + Garage (040219 World) + + + garage_4a + Garage (bootleg, 040219, backdoor) + + + garage_4b + Garage (bootleg, 040219, changed version text) + + + garage_4c + Garage (bootleg, 040219, LOTO PROGRAM V-GG2) + + + garage_5 + Garage (050311 World) + + + garage_5a + Garage (bootleg, 050311, backdoor) + + + garage_5b + Garage (bootleg, 050311, VIDEO GAME-1 GA01) + + + garage_5c + Garage (bootleg, 050311, payout percentage 70) + + + garage_5d + Garage (bootleg, 050311, LOTTOGAME (I)) + + + garage_5e + Garage (bootleg, 050311, LOTOS GA01) + + + garage_6 + Garage (070213 Russia) + + + garage_7 + Garage (070329 Russia) + + + garage_9 + Garage (090715 Entertainment) + + + gardia + Gardia (317-0006) + + + gardiab + Gardia (317-0007?, bootleg) + + + garogun + Garogun Seroyang (Korea) + + + garou + Garou - Mark of the Wolves (NGM-2530) + + + garoubl + Garou - Mark of the Wolves (bootleg) + + + garouh + Garou - Mark of the Wolves (NGM-2530)(NGH-2530) + + + garoup + Garou - Mark of the Wolves (prototype) + + + garuka + Garuka (Japan ver. W) + + + garyoret + Garyo Retsuden (Japan) + + + gatedoom + Gate of Doom (US revision 4) + + + gatedoom1 + Gate of Doom (US revision 1) + + + gatsbee + Gatsbee + + + gaunt2 + Gauntlet II + + + gaunt22p + Gauntlet II (2 Players, rev 2) + + + gaunt22p1 + Gauntlet II (2 Players, rev 1) + + + gaunt22pg + Gauntlet II (2 Players, German) + + + gaunt2g + Gauntlet II (German) + + + gauntdl + Gauntlet Dark Legacy (version DL 2.52) + + + gauntdl24 + Gauntlet Dark Legacy (version DL 2.4) + + + gauntleg + Gauntlet Legends (version 1.6) + + + gauntleg12 + Gauntlet Legends (version 1.2) + + + gauntlet + Gauntlet (rev 14) + + + gauntlet2p + Gauntlet (2 Players, rev 6) + + + gauntlet2pg + Gauntlet (2 Players, German, rev 4) + + + gauntlet2pg1 + Gauntlet (2 Players, German, rev 1) + + + gauntlet2pj + Gauntlet (2 Players, Japanese, rev 5) + + + gauntlet2pj2 + Gauntlet (2 Players, Japanese, rev 2) + + + gauntlet2pr3 + Gauntlet (2 Players, rev 3) + + + gauntletg + Gauntlet (German, rev 10) + + + gauntletgr3 + Gauntlet (German, rev 3) + + + gauntletgr6 + Gauntlet (German, rev 6) + + + gauntletgr8 + Gauntlet (German, rev 8) + + + gauntletj + Gauntlet (Japanese, rev 13) + + + gauntletj12 + Gauntlet (Japanese, rev 12) + + + gauntletr1 + Gauntlet (rev 1) + + + gauntletr2 + Gauntlet (rev 2) + + + gauntletr4 + Gauntlet (rev 4) + + + gauntletr5 + Gauntlet (rev 5) + + + gauntletr7 + Gauntlet (rev 7) + + + gauntletr9 + Gauntlet (rev 9) + + + gauntlets + Gauntlet (Spanish, rev 15) + + + gaxeduel + Golden Axe - The Duel (JUETL 950117 V1.000) + + + gberet + Green Beret + + + gberetb + Green Beret (bootleg) + + + gblchmp + Global Champion (Ver 2.1A 1994/07/29) + + + gbusters + Gang Busters (set 1) + + + gbustersa + Gang Busters (set 2) + + + gcastle + Golden Castle (prototype?) + + + gchgchmp + Gachaga Champ (GE877 VER. JAB) + + + gcpinbal + Grand Cross + + + gdarius + G-Darius (Ver 2.01J) + + + gdarius2 + G-Darius Ver.2 (Ver 2.03J) + + + gdariusb + G-Darius (Ver 2.02A) + + + gdfs + Mobil Suit Gundam Final Shooting (Japan) + + + gdvsgd + Gundam vs. Gundam + + + geebee + Gee Bee (Japan) + + + geebeeb + Gee Bee (Europe) + + + geebeeg + Gee Bee (US) + + + gegege + GeGeGe no Kitarou Youkai Slot + + + geimulti + GEI Multi Game + + + geishanz + Geisha (0101408V, New Zealand) + + + gekiretu + Quiz Gekiretsu Scramble (Japan) + + + gekiridn + Gekirindan (Ver 2.3O 1995/09/21) + + + gekiridnj + Gekirindan (Ver 2.3J 1995/09/21) + + + gekisha + Mahjong Gekisha + + + gekisou + Gekisou (Japan) + + + gekitsui + Gekitsui Oh (Japan) + + + gekpurya + Gekitou Pro Yakyuu Mizushima Shinji All Stars vs. Pro Yakyuu (Rev C) (GDT-0008C) + + + gemini + Gemini Wing (Japan) + + + gemini2k + Gemini 2000 + + + gemini2k1 + Gemini 2000 (alternate set) + + + genesisp + Genesis + + + genie + Genie + + + geniep + Genie (Pinball) + + + genix + Genix Family + + + genpeitd + Genpei ToumaDen + + + gensitou + Genshi-Tou 1930's + + + geostorm + Geo Storm (Japan) + + + gepoker + Poker (Version 50.02 ICB, set 1) + + + gepoker1 + Poker (Version 50.02 ICB, set 2) + + + gepoker2 + Poker (Version 50.02 ICB, set 3) + + + getbass + Get Bass + + + getrich + Get Rich (Version 1.0.1) + + + getstarb1 + Get Star (bootleg set 1) + + + getstarb2 + Get Star (bootleg set 2) + + + getstarj + Get Star (Japan) + + + gfire2 + Golden Fire II + + + gforce2 + Galaxy Force 2 + + + gforce2j + Galaxy Force 2 (Japan) + + + gforce2ja + Galaxy Force 2 (Japan, Rev A) + + + ggate + Golden Gate (set 1) (Bingo) + + + ggatea + Golden Gate (set 2) (Bingo) + + + ggconnie + Go! Go! Connie chan Jaka Jaka Janken + + + gghost + Goalie Ghost + + + ggisuka + Guilty Gear Isuka + + + ggram2 + Giant Gram: All Japan Pro Wrestling 2 (JPN, USA, EXP, KOR, AUS) + + + ggreats2 + Golfing Greats 2 (ver JAC) + + + gground + Gain Ground (World, 3 Players, Floppy Based, FD1094 317-0058-03d Rev A) + + + ggroundj + Gain Ground (Japan, 2 Players, Floppy Based, FD1094 317-0058-03b) + + + ggx + Guilty Gear X (JPN) + + + ggx15 + Guilty Gear X ver. 1.5 + + + ggxx + Guilty Gear XX (GDL-0011) + + + ggxxac + Guilty Gear XX Accent Core (GDL-0041) + + + ggxxrl + Guilty Gear XX #Reload (Rev A) (GDL-0019A) + + + ggxxsla + Guilty Gear XX Slash (Rev A) (GDL-0033A) + + + ghlpanic + Ghoul Panic (Asia, OB2/VER.A) + + + ghoshunt + Ghost Hunter + + + ghostb + The Real Ghostbusters (US 2 Players, revision 2) + + + ghostb2a + The Real Ghostbusters (US 2 Players) + + + ghostb3 + The Real Ghostbusters (US 3 Players) + + + ghostlop + Ghostlop (prototype) + + + ghostmun + Ghost Muncher + + + ghostsqu + Ghost Squad (Rev A) (GDX-0012A) + + + ghouls + Ghouls'n Ghosts (World) + + + ghoulsu + Ghouls'n Ghosts (USA) + + + ghox + Ghox (spinner) + + + ghoxj + Ghox (joystick) + + + ghunter + Gang Hunter (Spain) + + + ghv101 + Goofy Hoops + + + gi_l3 + Gilligan's Island (L-3) + + + gi_l4 + Gilligan's Island (L-4) + + + gi_l6 + Gilligan's Island (L-6) + + + gi_l9 + Gilligan's Island (L-9) + + + gigaman2 + Giga Man 2: The Power Fighters (bootleg of Mega Man 2: The Power Fighters) + + + gigandes + Gigandes + + + gigandesa + Gigandes (earlier) + + + gigas + Gigas (MC-8123, 317-5002) + + + gigasb + Gigas (bootleg) + + + gigasm2b + Gigas Mark II (bootleg) + + + gigawing + Giga Wing (USA 990222) + + + gigawinga + Giga Wing (Asia 990222) + + + gigawingb + Giga Wing (Brazil 990222) + + + gigawingd + Giga Wing (USA 990222 Phoenix Edition) (bootleg) + + + gigawingh + Giga Wing (Hispanic 990222) + + + gigawingj + Giga Wing (Japan 990223) + + + gigawingjd + Giga Wing (Japan 990223 Phoenix Edition) (bootleg) + + + gijoe + G.I. Joe (World, EAB, set 1) + + + gijoea + G.I. Joe (World, EB8, prototype?) + + + gijoej + G.I. Joe (Japan, JAA) + + + gijoeu + G.I. Joe (US, UAB) + + + gimeabrk + Gimme A Break (7/7/85) + + + ginganin + Ginga NinkyouDen (set 1) + + + ginganina + Ginga NinkyouDen (set 2) + + + ginkun + Ganbare Ginkun + + + gionbana + Gionbana (Japan 890120) + + + girotutt + GiroTutto + + + gjspace + Gekitoride-Jong Space (10011 Ver.A) + + + gl_coc + Carry On Clubbin' (Global) (v3.0) (Stealth) + + + gl_coc29 + Carry On Clubbin' (Global) (v2.9) (Stealth) + + + gl_coc29p + Carry On Clubbin' (Global) (v2.9 Protocol) (Stealth) + + + gl_cocp + Carry On Clubbin' (Global) (v3.0 Protocol) (Stealth) + + + gl_dow + Deals On Wheels (Global) (v1.4) (Stealth) + + + gl_dowcl + Deals On Wheels Club (Global) (v1.6) (Stealth) + + + gl_dowclp + Deals On Wheels Club (Global) (v1.6 Protocol) (Stealth) + + + gl_dowp + Deals On Wheels (Global) (v1.4 Protocol) (Stealth) + + + gl_grncl + Grid Runner Club (Global) (Stealth?) (set 1) + + + gl_grncla + Grid Runner Club (Global) (Stealth?) (set 2) + + + gl_hbh + Heartbreak Hotel (Global) (v1.0) (Stealth) + + + gl_hbhcl + Heartbreak Hotel Club (Global) (v1.9) (Stealth) + + + gl_hbhcla + Heartbreak Hotel Club (Global) (Set 2) (Stealth) + + + gl_hbhclp + Heartbreak Hotel Club (Global) (v1.9 Protocol) (Stealth) + + + gl_snbev + Saturday Night Beaver (Global) (Stealth?) (set 1) + + + gl_snbeva + Saturday Night Beaver (Global) (Stealth?) (set 2) + + + gl_uyr + Up Yer Riggin Club (Global) (v2.8) (Stealth) + + + gl_uyrp + Up Yer Riggin Club (Global) (v2.8 Protocol) (Stealth) + + + gl_wywh + Wish You Were Here Club (Global) (v2.9) (Stealth) + + + gl_wywh24 + Wish You Were Here Club (Global) (v2.4) (Stealth) + + + gl_wywh24p + Wish You Were Here Club (Global) (v2.4 Protocol) (Stealth) + + + gl_wywhp + Wish You Were Here Club (Global) (v2.9 Protocol) (Stealth) + + + gladiatp + Gladiators + + + gladiatr + Gladiator (US) + + + glass + Glass (Ver 1.1) + + + glass10 + Glass (Ver 1.0) + + + glassbrk + Glass (Ver 1.0, Break Edition) + + + gldarrow + Golden Arrow (Standard G8-03) + + + gldncrwn + Golden Crown (Dutch, Game Card 95-752-011) + + + gldneye + Goldeneye + + + gldnpkr + Golden Poker (8VXEC037, New Zealand) + + + glfgreat + Golfing Greats + + + glfgreatj + Golfing Greats (Japan) + + + gloc + G-LOC Air Battle (US) + + + glocr360 + G-LOC R360 + + + glpracr + Gallop Racer (English Ver 10.17.K) + + + glpracr2 + Gallop Racer 2 (USA) + + + glpracr2j + Gallop Racer 2 (Japan) + + + glpracr2l + Gallop Racer 2 Link HW (Japan) + + + glpracr3 + Gallop Racer 3 (Japan) + + + glpracrj + Gallop Racer (Japanese Ver 9.01.12) + + + gluck2 + Good Luck II + + + gmahou + Great Mahou Daisakusen (Japan 000121) + + + gmgalax + Ghostmuncher Galaxian (bootleg) + + + gmine_l2 + Gold Mine (Shuffle) (L-2) + + + gmissile + Guided Missile + + + gnbarich + Gunbarich + + + gng + Ghosts'n Goblins (World? set 1) + + + gnga + Ghosts'n Goblins (World? set 2) + + + gngbl + Ghosts'n Goblins (bootleg with Cross) + + + gngblita + Ghosts'n Goblins (Italian bootleg, harder) + + + gngc + Ghosts'n Goblins (World? set 3) + + + gngprot + Ghosts'n Goblins (prototype) + + + gngt + Ghosts'n Goblins (US) + + + gnome + Gnome (070906 Russia) + + + gnome_10 + Gnome (100326 Lottery) + + + gnome_11 + Gnome (100326 Entertainment) + + + gnome_12 + Gnome (100326 Russia) + + + gnome_2 + Gnome (071115 Russia) + + + gnome_2a + Gnome (bootleg, 071115, banking address hack) + + + gnome_3 + Gnome (080303 World) + + + gnome_3a + Gnome (bootleg, 080303, banking address hack) + + + gnome_3b + Gnome (bootleg, 080303, banking address hack, payout percentage 45) + + + gnome_3c + Gnome (bootleg, 080303, banking address hack, payout percentage 60) + + + gnome_4 + Gnome (090402 Russia) + + + gnome_5 + Gnome (090406 World) + + + gnome_5a + Gnome (bootleg, 090406, banking address hack, payout percentage 70) + + + gnome_5b + Gnome (bootleg, 090406, LOTTOGAME (I)) + + + gnome_7 + Gnome (090708 Lottery) + + + gnome_9 + Gnome (100326 World) + + + gnomea + Gnome (bootleg, 070906, banking address hack set 1) + + + gnomeb + Gnome (bootleg, 070906, banking address hack set 2) + + + gnomec + Gnome (bootleg, 070906, banking address hack set 3) + + + gnomed + Gnome (bootleg, 070906, VIDEO GAME-1 GN01) + + + gnomee + Gnome (bootleg, 070906, LOTOS GN01) + + + gnr_300 + Guns N Roses (3.00) + + + go2000 + Go 2000 + + + goal92 + Goal! '92 + + + goaltogo + Goal To Go + + + goalx3 + Goal! Goal! Goal! + + + gobyrc + Go By RC (V2.03O) + + + godzilla + Godzilla (Japan) + + + godzillp + Godzilla (Pinball) + + + gogold + Go For The Gold (Japan) + + + gogomile + Go Go! Mile Smile + + + gogomilej + Susume! Mile Smile (Japan) + + + goindol + Goindol (World) + + + goindolk + Goindol (Korea) + + + goindolu + Goindol (US) + + + goinnuts + Goin' Nuts + + + goketsuj + Goketsuji Ichizoku: Matsuri Senzo Kuyou (v200906230) + + + gokuparo + Gokujyou Parodius (ver JAD) + + + goldball + Gold Ball (set 1) + + + goldballn + Gold Ball (set 2) + + + goldbug + Gold Bug + + + goldcity + Gold City (Russia) (Atronic) + + + goldcue + Golden Cue + + + goldenc + Golden Canaries (1VXFC5462, New Zealand) + + + goldfish + Gold Fish (020903, prototype) + + + goldfrui + Gold Fruit + + + goldgame + Golden Game (Bingo) + + + goldgkit1 + Golden Game Kit 1 Generation (Bingo) + + + goldgkitb + Golden Game Kit Bingo Stake 6/10 (Bingo) + + + goldglen + Golden Glenn (Russia) (Atronic) + + + goldgnew + Golden Game Bingo New (Bingo) + + + goldgstake + Golden Game Bingo Stake 6/10 (Bingo) + + + goldmedl + Gold Medalist (set 1) + + + goldmedla + Gold Medalist (set 2) + + + goldmedlb + Gold Medalist (bootleg) + + + goldnaxe + Golden Axe (set 6, US, 8751 317-123A) + + + goldnaxe1 + Golden Axe (set 1, World, FD1094 317-0110) + + + goldnaxe2 + Golden Axe (set 2, US, 8751 317-0112) + + + goldnaxe3 + Golden Axe (set 3, World, FD1094 317-0120) + + + goldnaxeb1 + Golden Axe (encrypted bootleg) + + + goldnaxeb2 + Golden Axe (bootleg) + + + goldnaxej + Golden Axe (set 4, Japan, FD1094 317-0121) + + + goldnaxeu + Golden Axe (set 5, US, FD1094 317-0122) + + + goldnpkb + Golden Poker Double Up (Mini Boy) + + + goldnpkr + Golden Poker Double Up (Big Boy) + + + goldprmd + Golden Pyramids (MV4091, USA) + + + goldstar + Golden Star + + + goldstbl + Golden Star (Blue version) + + + goldwing + Gold Wings + + + golgo13 + Golgo 13 (Japan, GLG1/VER.A) + + + gollygho + Golly! Ghost! + + + gomoku + Gomoku Narabe Renju + + + gondo + Gondomania (US) + + + gonefsh2 + Gone Fishing 2 + + + good + Good (Korea) + + + goodejan + Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 1) + + + goodejana + Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 2) + + + goodluck + Good Luck + + + goonies + Vs. The Goonies (set E) + + + gorf + Gorf + + + gorfpgm1 + Gorf (program 1) + + + gorfpgm1g + Gorf (program 1, with German Language ROM) + + + gork + Gork + + + gorkans + Gorkans + + + gotcha + Got-cha Mini Game Festival + + + gotya + Got-Ya (12/24/1981, prototype?) + + + gowcaizr + Voltage Fighter - Gowcaizer / Choujin Gakuen Gowcaizer + + + gp2quiz + Gals Panic II - Quiz Version + + + gp2se + Gals Panic II' - Special Edition (Japan) + + + gp98 + Grand Prix '98 (V100K) + + + gp_110 + Model 110 + + + gpgolf + Golden Par Golf (Joystick, V1.1) + + + gpilots + Ghost Pilots (NGM-020)(NGH-020) + + + gpilotsh + Ghost Pilots (NGH-020)(US) + + + gprider + GP Rider (World, FD1094 317-0163) + + + gpriderj + GP Rider (Japan, FD1094 317-0161) + + + gprideru + GP Rider (US, FD1094 317-0162) + + + gprix + Grand Prix (4.50) + + + gprix_301 + Grand Prix (3.01) + + + gprix_340 + Grand Prix (3.40) + + + gprix_350 + Grand Prix (3.50) + + + gprix_352 + Grand Prix (3.52) + + + gprix_400 + Grand Prix (4.00) + + + gprixf + Grand Prix (4.50 France) + + + gprixf_301 + Grand Prix (3.01 France) + + + gprixf_340 + Grand Prix (3.40 France) + + + gprixf_350 + Grand Prix (3.50 France) + + + gprixf_352 + Grand Prix (3.52 France) + + + gprixf_400 + Grand Prix (4.00 France) + + + gprixg + Grand Prix (4.50 Germany) + + + gprixg_301 + Grand Prix (3.01 Germany) + + + gprixg_340 + Grand Prix (3.40 Germany) + + + gprixg_350 + Grand Prix (3.50 Germany) + + + gprixg_352 + Grand Prix (3.52 Germany) + + + gprixg_400 + Grand Prix (4.00 Germany) + + + gprixi + Grand Prix (4.50 Italy) + + + gprixi_301 + Grand Prix (3.01 Italy) + + + gprixi_340 + Grand Prix (3.40 Italy) + + + gprixi_350 + Grand Prix (3.50 Italy) + + + gprixi_352 + Grand Prix (3.52 Italy) + + + gprixi_400 + Grand Prix (4.00 Italy) + + + gprixl + Grand Prix (4.50 Spain) + + + gprixl_301 + Grand Prix (3.01 Spain) + + + gprixl_340 + Grand Prix (3.40 Spain) + + + gprixl_350 + Grand Prix (3.50 Spain) + + + gprixl_352 + Grand Prix (3.52 Spain) + + + gprixl_400 + Grand Prix (4.00 Spain) + + + gpworld + GP World + + + gq863 + Twinkle System + + + gradius + Gradius (Japan, ROM version) + + + gradius2 + Gradius II - GOFER no Yabou (Japan New Ver.) + + + gradius2a + Gradius II - GOFER no Yabou (Japan Old Ver.) + + + gradius2b + Gradius II - GOFER no Yabou (Japan Older Ver.) + + + gradius3 + Gradius III (World, program code R) + + + gradius3a + Gradius III (Asia) + + + gradius3j + Gradius III (Japan, program code S) + + + gradius4 + Gradius 4: Fukkatsu + + + grainbow + SD Gundam Sangokushi Rainbow Tairiku Senki + + + gram2000 + Giant Gram 2000 (JPN, USA, EXP, KOR, AUS) + + + grancan + Grand Canyon (Russia) (Extrema) + + + grancapi + Gran Capitan (Version 3) + + + grand_l4 + Grand Lizard (L-4) + + + grandprx + Grand Prix + + + granny + Granny and the Gators + + + granslam + Grand Slam + + + granslam4 + Grand Slam (4 Players) + + + grasspin + Grasspin + + + gratia + Gratia - Second Earth (92047-01 version) + + + gratiaa + Gratia - Second Earth (91022-10 version) + + + gravitar + Gravitar (version 3) + + + gravitar2 + Gravitar (version 2) + + + gravp + Gravitar (prototype) + + + grchamp + Grand Champion + + + grdforce + Guardian Force (JUET 980318 V0.105) + + + grdian + Guardian (US) + + + grdians + Guardians / Denjin Makai II + + + grdnstrm + Guardian Storm (horizontal, not encrypted) + + + grdnstrmg + Guardian Storm (Germany) + + + grdnstrmk + Jeon Sin - Guardian Storm (Korea) + + + grdnstrmv + Guardian Storm (vertical) + + + greatgun + Great Guns + + + greatgur + Great Gurianos (Japan?) + + + greenber + Green Beret (Irem) + + + grescue + Galaxy Rescue + + + grgar_l1 + Gorgar (L-1) + + + grgar_t1 + Gorgar (T-1) + + + gridiron + Gridiron Fight + + + gridlee + Gridlee + + + griffon + Griffon (bootleg of Phoenix) + + + grindstm + Grind Stormer + + + grindstma + Grind Stormer (older set) + + + grmatch + Grudge Match (Yankee Game Technology) + + + grndtour + Grand Tour + + + grobda + Grobda (New Ver.) + + + grobda2 + Grobda (Old Ver. set 1) + + + grobda3 + Grobda (Old Ver. set 2) + + + groovef + Groove on Fight - Gouketsuji Ichizoku 3 (J 970416 V1.001) + + + groundfx + Ground Effects / Super Ground Effects (Japan) + + + growl + Growl (World) + + + growlp + Growl (World, prototype) + + + growlu + Growl (US) + + + grtesoro + Gran Tesoro? / Play 2000 (v5.01) (Italy) + + + grtesoro4 + Gran Tesoro? / Play 2000 (v4.0) (Italy) + + + grudge + Grudge Match (prototype) + + + gryzor + Gryzor (set 1) + + + gryzor1 + Gryzor (set 2) + + + gs4002 + Selection (Version 40.02TMB, set 1) + + + gs4002a + Selection (Version 40.02TMB, set 2) + + + gs_l3 + The Bally Game Show (L-3) + + + gs_l4 + The Bally Game Show (L-4) + + + gseeker + Grid Seeker: Project Storm Hammer (Ver 1.3O) + + + gseekerj + Grid Seeker: Project Storm Hammer (Ver 1.3J) + + + gseekeru + Grid Seeker: Project Storm Hammer (Ver 1.3A) + + + gslgr94j + Great Sluggers '94 (Japan) + + + gslgr94u + Great Sluggers '94 + + + gslugrsj + Great Sluggers (Japan) + + + gstream + G-Stream G2020 + + + gstrik2 + Grand Striker 2 (Europe and Oceania) + + + gstrik2j + Grand Striker 2 (Japan) + + + gstriker + Grand Striker + + + gstrikera + Grand Striker (Americas) + + + gstrikerj + Grand Striker (Japan) + + + gsword + Great Swordsman (World?) + + + gsword2 + Great Swordsman (Japan?) + + + gt103a1 + Trivia (Unsorted question roms) + + + gt103aa + Trivia (Version 1.03a Alt questions 1) + + + gt103ab + Trivia (Version 1.03a Alt questions 2) + + + gt103asx + Trivia (Version 1.03a Sex questions) + + + gt2k + Golden Tee 2K (v1.00) + + + gt2kp100 + Golden Tee 2K (v1.00) (alt protection) + + + gt2ks100 + Golden Tee 2K (v1.00S) + + + gt2kt500 + Golden Tee 2K Tournament (v5.00) + + + gt3d + Golden Tee 3D Golf (v1.93N) + + + gt3dl19 + Golden Tee 3D Golf (v1.9L) + + + gt3dl191 + Golden Tee 3D Golf (v1.91L) + + + gt3dl192 + Golden Tee 3D Golf (v1.92L) + + + gt3ds192 + Golden Tee 3D Golf (v1.92S) + + + gt3dt211 + Golden Tee 3D Golf Tournament (v2.11) + + + gt3dt231 + Golden Tee 3D Golf Tournament (v2.31) + + + gt3dv14 + Golden Tee 3D Golf (v1.4) + + + gt3dv15 + Golden Tee 3D Golf (v1.5) + + + gt3dv16 + Golden Tee 3D Golf (v1.6) + + + gt3dv17 + Golden Tee 3D Golf (v1.7) + + + gt3dv18 + Golden Tee 3D Golf (v1.8) + + + gt507uk + Trivia (UK Version 5.07) + + + gt97 + Golden Tee '97 (v1.30) + + + gt97s121 + Golden Tee '97 (v1.21S) + + + gt97t240 + Golden Tee '97 Tournament (v2.40) + + + gt97t243 + Golden Tee '97 Tournament (v2.43) + + + gt97v120 + Golden Tee '97 (v1.20) + + + gt97v121 + Golden Tee '97 (v1.21) + + + gt97v122 + Golden Tee '97 (v1.22) + + + gt98 + Golden Tee '98 (v1.10) + + + gt98s100 + Golden Tee '98 (v1.00S) + + + gt98t303 + Golden Tee '98 Tournament (v3.03) + + + gt98v100 + Golden Tee '98 (v1.00) + + + gt99 + Golden Tee '99 (v1.00) + + + gt99s100 + Golden Tee '99 (v1.00S) + + + gt99t400 + Golden Tee '99 Tournament (v4.00) + + + gtclassc + Golden Tee Classic (v1.00) + + + gtclasscp + Golden Tee Classic (v1.00) (alt protection) + + + gtclasscs + Golden Tee Classic (v1.00S) + + + gtdiamond + Golden Tee Diamond Edition Tournament (v3.05T ELC) + + + gteikob2 + Gingateikoku No Gyakushu (bootleg set 2) + + + gteikokb + Gingateikoku No Gyakushu (bootleg set 1) + + + gteikoku + Gingateikoku No Gyakushu + + + gtfore02 + Golden Tee Fore! 2002 (v2.01.04 UMV) + + + gtfore02o + Golden Tee Fore! 2002 (v2.00.00) + + + gtfore04 + Golden Tee Fore! 2004 + + + gtfore05 + Golden Tee Fore! 2005 + + + gtfrk10m + Guitar Freaks 10th Mix (G*D10 VER. JAB) + + + gtfrk10ma + Guitar Freaks 10th Mix (G*D10 VER. JAA) + + + gtfrk10mb + Guitar Freaks 10th Mix eAmusement (G*D10 VER. JBA) + + + gtfrk11m + Guitar Freaks 11th Mix (G*D39 VER. JAA) + + + gtfrk3ma + Guitar Freaks 3rd Mix (GE949 VER. JAB) + + + gtfrk3mb + Guitar Freaks 3rd Mix - security cassette versionup (949JAZ02) + + + gtg + Golden Tee Golf (Joystick, v3.1) + + + gtg2 + Golden Tee Golf II (Trackball, V2.2) + + + gtg2j + Golden Tee Golf II (Joystick, V1.0) + + + gtg2t + Golden Tee Golf II (Trackball, V1.1) + + + gtgt + Golden Tee Golf (Trackball, v2.0) + + + gtgt1 + Golden Tee Golf (Trackball, v1.0) + + + gticlub + GTI Club (ver EAA) + + + gticlub2 + GTI Club 2 (ver JAB) + + + gticlub2ea + GTI Club 2 (ver EAA) + + + gticluba + GTI Club (ver AAA) + + + gticlubj + GTI Club (ver JAA) + + + gticlubu + GTI Club (ver UAA) + + + gtipoker + GTI Poker + + + gtipokra + GTI Poker? (SMS hardware) + + + gtmr + 1000 Miglia: Great 1000 Miles Rally (94/07/18) + + + gtmr2 + Mille Miglia 2: Great 1000 Miles Rally (95/05/24) + + + gtmr2a + Mille Miglia 2: Great 1000 Miles Rally (95/04/04) + + + gtmr2u + Great 1000 Miles Rally 2 USA (95/05/18) + + + gtmra + 1000 Miglia: Great 1000 Miles Rally (94/06/13) + + + gtmre + Great 1000 Miles Rally: Evolution Model!!! (94/09/06) + + + gtmrusa + Great 1000 Miles Rally: U.S.A Version! (94/09/06) + + + gtrfrk2m + Guitar Freaks 2nd Mix Ver 1.01 (GQ883 VER. JAD) + + + gtrfrk3m + Guitar Freaks 3rd Mix (GE949 VER. JAC) + + + gtrfrk4m + Guitar Freaks 4th Mix (G*A24 VER. JAA) + + + gtrfrk5m + Guitar Freaks 5th Mix (G*A26 VER. JAA) + + + gtrfrk6m + Guitar Freaks 6th Mix (G*B06 VER. JAA) + + + gtrfrk7m + Guitar Freaks 7th Mix (G*B17 VER. JAA) + + + gtrfrk8m + Guitar Freaks 8th Mix power-up ver. (G*C08 VER. JBA) + + + gtrfrk8ma + Guitar Freaks 8th Mix (G*C08 VER. JAA) + + + gtrfrk9m + Guitar Freaks 9th Mix (G*C39 VER. JAA) + + + gtrfrks + Guitar Freaks (GQ886 VER. EAC) + + + gtrfrksa + Guitar Freaks (GQ886 VER. AAC) + + + gtrfrksj + Guitar Freaks (GQ886 VER. JAC) + + + gtrfrksu + Guitar Freaks (GQ886 VER. UAC) + + + gtroppo + Gone Troppo (1VXEC542, New Zealand) + + + gtroyal + Golden Tee Royal Edition Tournament (v4.02T EDM) + + + gts1 + System 1 + + + gts1s + System 1 with sound board + + + gtsers1 + Trivia (Questions Series 1) + + + gtsers10 + Trivia (Questions Series 10) + + + gtsers10a + Trivia (Questions Series 10 Alt Question Rom) + + + gtsers11 + Trivia (Questions Series 11) + + + gtsers11a + Trivia (Questions Series 11 Alt Question Rom) + + + gtsers12 + Trivia (Questions Series 12) + + + gtsers14 + Trivia (Questions Series 14) + + + gtsers15 + Trivia (Questions Series 15) + + + gtsers2 + Trivia (Questions Series 2) + + + gtsers3 + Trivia (Questions Series 3) + + + gtsers4 + Trivia (Questions Series 4) + + + gtsers5 + Trivia (Questions Series 5) + + + gtsers7 + Trivia (Questions Series 7) + + + gtsers8 + Trivia (Questions Series 8) + + + gtsers9 + Trivia (Questions Series 9) + + + gtsersa + Trivia (Alt revision questions set 1) + + + gtsersb + Trivia (Alt revision questions set 2) + + + gtsupreme + Golden Tee Supreme Edition Tournament (v5.10T ELC S) + + + guab + Give us a Break (3rd edition) + + + guab21 + Give us a Break (21st edition) + + + guab3a + Give us a Break (3rd edition alt?) + + + guab4 + Give us a Break (4th edition) + + + guab43 + Give us a Break (43rd edition) + + + guab6 + Give us a Break (6th edition) + + + guab6a + Give us a Break (6th edition alt?) + + + guab7 + Give us a Break (7th edition) + + + guardian + Guardians of the 'Hood + + + guiness + The Guiness (Japan) + + + gulfstrm + Gulf Storm (set 1) + + + gulfstrma + Gulf Storm (set 2) + + + gulfstrmb + Gulf Storm (set 3) + + + gulfstrmm + Gulf Storm (Media Shoji) + + + gulfwar2 + Gulf War II (set 1) + + + gulfwar2a + Gulf War II (set 2) + + + gumbo + Gumbo + + + gunbalina + Gunbalina (Japan, GNN1 Ver.A) + + + gunball + Gun Ball (Japan) + + + gunbarl + Gunbarl (Japan, GNB4/VER.A) + + + gunbird + Gunbird (World) + + + gunbird2 + Gunbird 2 + + + gunbirdj + Gunbird (Japan) + + + gunbirdk + Gunbird (Korea) + + + gunblade + Gunblade NY (Revision A) + + + gunbuletj + Gun Bullet (Japan, GN1) + + + gunbuletw + Gun Bullet (World, GN3 Rev B) + + + gunbustr + Gunbuster (World) + + + gunbustrj + Gunbuster (Japan) + + + gunbustru + Gunbuster (US) + + + gunchamp + Gun Champ + + + gunchamps + Gun Champ (newer, Super Shot hardware) + + + gundamex + Mobile Suit Gundam EX Revue + + + gundamos + Gundam Battle Operating Simulator (GDX-0013) + + + gundealr + Gun Dealer + + + gundealra + Gun Dealer (alt card set) + + + gundealrt + Gun Dealer (Japan) + + + gundhara + Gundhara + + + gundl94 + Gun Dealer '94 + + + gundmct + Mobile Suit Gundam: Federation Vs. Zeon (2001-02-08) + + + gundmgd + Mobile Suit Gundam: Federation Vs. Zeon (GDL-0001) + + + gundmxgd + Mobile Suit Gundam: Federation Vs. Zeon DX (GDL-0006) + + + gundzaft + Gundam Seed: Federation vs. Z.A.F.T. (SED1 Ver. A) + + + gunfight + Gun Fight (set 1) + + + gunfighto + Gun Fight (set 2) + + + gunforc2 + Gun Force II (US) + + + gunforce + Gunforce - Battle Fire Engulfed Terror Island (World) + + + gunforcej + Gunforce - Battle Fire Engulfed Terror Island (Japan) + + + gunforceu + Gunforce - Battle Fire Engulfed Terror Island (US) + + + gunfront + Gun & Frontier (World) + + + gunfrontj + Gun Frontier (Japan) + + + gunhard + Gun Hard (Japan) + + + gunhohki + Mahou Keibitai Gun Hohki (Japan) + + + gunlock + Gunlock (Ver 2.3O 1994/01/20) + + + gunman + Gunman [TTL] + + + gunmania + GunMania (GL906 VER. JAA) + + + gunmast + Gun Master + + + gunnail + GunNail (28th May. 1992) + + + gunnrose + Guns and Roses (C606191SMP, Australia) + + + gunpey + Gunpey (Japan) + + + gunsmoke + Gun.Smoke (World) + + + gunsmokej + Gun.Smoke (Japan) + + + gunsmokeu + Gun.Smoke (US set 1) + + + gunsmokeua + Gun.Smoke (US set 2) + + + gunsur2 + Gun Survivor 2 Biohazard Code: Veronica (BHF1 Ver. E) + + + gunsur2e + Gun Survivor 2 Biohazard Code: Veronica (BHF2 Ver. E) + + + gunwars + Gunmen Wars (GM1 Ver. B) + + + gunwarsa + Gunmen Wars (GM1 Ver. A) + + + gururin + Gururin + + + gussun + Gussun Oyoyo (Japan) + + + gutangtn + Guttang Gottong + + + guts + Guts n' Glory (prototype) + + + gutsn + Guts'n (Japan) + + + guttangt + Guttang Gottong (bootleg on Galaxian type hardware) + + + guwange + Guwange (Japan, Master Ver. 99/06/24) + + + guwanges + Guwange (Japan, Special Ver. 00/07/07) + + + guzzler + Guzzler + + + guzzlers + Guzzler (Swimmer Conversion) + + + gvrxpsup + Global VR XP OS Update/Install - 06/11/02 + + + gvrxpsys + Global VR XP OS Install - 09/30/01 + + + gw_l1 + The Getaway: High Speed II (L-1) + + + gw_l2 + The Getaway: High Speed II (L-2) + + + gw_l3 + The Getaway: High Speed II (L-3) + + + gw_l5 + The Getaway: High Speed II (L-5) + + + gw_p7 + The Getaway: High Speed II (P-7) + + + gw_pc + The Getaway: High Speed II (P-C) + + + gwar + Guerrilla War (US) + + + gwara + Guerrilla War (Version 1) + + + gwarb + Guerrilla War (Joystick hack bootleg) + + + gwarfare + Global Warfare + + + gwarj + Guevara (Japan) + + + gwarrior + Galactic Warriors + + + gwing2 + Giga Wing 2 (JPN, USA, EXP, KOR, AUS) + + + gwinggen + Giga Wing Generations (v2.02J) + + + gypmagic + Gypsy Magic (Konami Endeavour) + + + gypsyjug + Gypsy Juggler + + + gyrodine + Gyrodine + + + gyrodinet + Gyrodine (Taito Corporation license) + + + gyruss + Gyruss + + + gyrussb + Gyruss (bootleg?) + + + gyrussce + Gyruss (Centuri) + + + hachamf + Hacha Mecha Fighter (19th Sep. 1991) + + + hacher + Hacher (hack of Win Win Bingo) + + + hachoo + Hachoo! + + + haekaka + Hae Hae Ka Ka Ka + + + hal21 + HAL21 + + + hal21j + HAL21 (Japan) + + + halley + Halley Comet + + + halley87 + Halley's Comet '87 + + + halleycj + Halley's Comet (Japan, Older) + + + halleys + Halley's Comet (US) + + + halleysc + Halley's Comet (Japan, Newer) + + + hammer + Hammer + + + hanaawas + Hana Awase + + + hanagumi + Sakura Taisen - Hanagumi Taisen Columns (J 971007 V1.010) + + + hanakanz + Hana Kanzashi (Japan) + + + hanamai + Hana no Mai (Japan) + + + hanamomb + Mahjong Hana no Momoko gumi (Japan 881125) + + + hanamomo + Mahjong Hana no Momoko gumi (Japan 881201) + + + hanaoji + Hana to Ojisan [BET] (Japan 911209) + + + hanaroku + Hanaroku + + + hanayara + Hana wo Yaraneba! (Japan) + + + hangly + Hangly-Man (set 1) + + + hangly2 + Hangly-Man (set 2) + + + hangly3 + Hangly-Man (set 3) + + + hangman + Hangman + + + hangon + Hang-On (Rev A) + + + hangon1 + Hang-On + + + hangon2 + Hang-On (ride-on) + + + hangonjr + Hang-On Jr. + + + hangplt + Hang Pilot (ver JAB) + + + hangpltu + Hang Pilot (ver UAA) + + + happy6 + Happy 6-in-1 (ver. 102CN) + + + happy6101 + Happy 6-in-1 (ver. 101CN) + + + hapytour + Happy Tour + + + hardbody + Hardbody + + + hardbodyg + Hardbody (German) + + + harddriv + Hard Drivin' (cockpit, rev 7) + + + harddriv1 + Hard Drivin' (cockpit, rev 1) + + + harddriv2 + Hard Drivin' (cockpit, rev 2) + + + harddriv3 + Hard Drivin' (cockpit, rev 3) + + + harddrivb + Hard Drivin' (cockpit, British, rev 7) + + + harddrivb5 + Hard Drivin' (cockpit, British, rev 5) + + + harddrivb6 + Hard Drivin' (cockpit, British, rev 6) + + + harddrivc + Hard Drivin' (compact, rev 2) + + + harddrivc1 + Hard Drivin' (compact, rev 1) + + + harddrivcb + Hard Drivin' (compact, British, rev 2) + + + harddrivcg + Hard Drivin' (compact, German, rev 2) + + + harddrivg + Hard Drivin' (cockpit, German, rev 7) + + + harddrivg4 + Hard Drivin' (cockpit, German, rev 4) + + + harddrivj + Hard Drivin' (cockpit, Japan, rev 7) + + + harddrivj6 + Hard Drivin' (cockpit, Japan, rev 6) + + + harddunk + Hard Dunk (World) + + + harddunkj + Hard Dunk (Japan) + + + hardhat + Hard Hat + + + hardhea2 + Hard Head 2 (v2.0) + + + hardhead + Hard Head + + + hardheadb + Hard Head (bootleg) + + + hardyard + Hard Yardage (v1.20) + + + hardyard10 + Hard Yardage (v1.00) + + + harem + Harem + + + haremchl + Harem Challenge + + + harl_a10 + Harley Davidson (1.03 Display rev. 1.00) + + + harl_a13 + Harley Davidson (1.03) + + + harl_a18 + Harley Davidson (1.08) + + + harl_a30 + Harley Davidson (3.00) + + + harl_a40 + Harley Davidson (4.00) + + + harl_f13 + Harley Davidson (1.03 France) + + + harl_f18 + Harley Davidson (1.08 France) + + + harl_f30 + Harley Davidson (3.00 France) + + + harl_f40 + Harley Davidson (4.00 France) + + + harl_g13 + Harley Davidson (1.03 Germany) + + + harl_g18 + Harley Davidson (1.08 Germany) + + + harl_g30 + Harley Davidson (3.00 Germany) + + + harl_g40 + Harley Davidson (4.00 Germany) + + + harl_i13 + Harley Davidson (1.03 Italy) + + + harl_i18 + Harley Davidson (1.08 Italy) + + + harl_i30 + Harley Davidson (3.00 Italy) + + + harl_i40 + Harley Davidson (4.00 Italy) + + + harl_l13 + Harley Davidson (1.03 Spain) + + + harl_l18 + Harley Davidson (1.08 Spain) + + + harl_l30 + Harley Davidson (3.00 Spain) + + + harl_l40 + Harley Davidson (4.00 Spain) + + + harley + Harley-Davidson and L.A. Riders (Revision B) + + + harleya + Harley-Davidson and L.A. Riders (Revision A) + + + hasamu + Hasamu (Japan) + + + hatena + Adventure Quiz 2 - Hatena? no Daibouken (Japan 900228) + + + hatris + Hatris (US) + + + hatrisj + Hatris (Japan) + + + hattrick + Hat Trick + + + haunthig + Haunted House (IGS) + + + hawaii + Hawaii (Russia) + + + hawkman + Hawkman + + + hawkman1 + Hawkman (alternate set) + + + hayaosi1 + Hayaoshi Quiz Ouza Ketteisen - The King Of Quiz + + + hayaosi2 + Hayaoshi Quiz Grand Champion Taikai + + + hayaosi3 + Hayaoshi Quiz Nettou Namahousou + + + hb_bar7 + Bar Seven (Fairgames) (set 1) + + + hb_bar7a + Bar Seven (Fairgames) (set 2) + + + hb_bigx + Big X (JPM) (set 1) + + + hb_bigxa + Big X (JPM) (set 2) + + + hb_bigxb + Big X (JPM) (set 3) + + + hb_bigxc + Big X (JPM) (set 4) + + + hb_bigxd + Big X (JPM) (set 5) + + + hb_cashc + Cash Crusade (Qps) (set 1) + + + hb_cashca + Cash Crusade (Qps) (set 2) + + + hb_cashcb + Cash Crusade (Qps) (set 3) + + + hb_cashx + Cash X (Fairgames) (set 1) + + + hb_cashxa + Cash X (Fairgames) (set 2) + + + hb_ccow + Cash Cow (Qps) (set 1) + + + hb_ccowa + Cash Cow (Qps) (set 2) + + + hb_ccowb + Cash Cow (Qps) (set 3) + + + hb_cr + Cash Raker (Qps) (set 1) + + + hb_cra + Cash Raker (Qps) (set 2) + + + hb_crb + Cash Raker (Qps) (set 3) + + + hb_cwf + Cherry Win Falls (Fairgames) (set 1) + + + hb_cwfa + Cherry Win Falls (Fairgames) (set 2) + + + hb_dac + Dough & Arrow Club (Qps, set 1) + + + hb_daca + Dough & Arrow Club (Qps, set 2) + + + hb_dacb + Dough & Arrow Club (Qps, set 3) + + + hb_dacc + Dough & Arrow Club (Qps, set 4) + + + hb_dacd + Dough & Arrow Club (Qps, set 5) + + + hb_dace + Dough & Arrow Club (Qps, set 6) + + + hb_dacf + Dough & Arrow Club (Qps, set 7) + + + hb_dacg + Dough & Arrow Club (Qps, set 8) + + + hb_dacz + Dough & Arrow Club (Qps, set 9) + + + hb_frtcl + Fruitopia Club (Qps) (set 1) + + + hb_frtcla + Fruitopia Club (Qps) (set 2) + + + hb_frtclb + Fruitopia Club (Qps) (set 3) + + + hb_frtclc + Fruitopia Club (Qps) (set 4) + + + hb_frtcld + Fruitopia Club (Qps) (set 5) + + + hb_frtcle + Fruitopia Club (Qps) (set 6) + + + hb_frtclf + Fruitopia Club (Qps) (set 7) + + + hb_frtclg + Fruitopia Club (Qps) (set 8) + + + hb_frtclh + Fruitopia Club (Qps) (set 9) + + + hb_frtcli + Fruitopia Club (Qps) (set 10) + + + hb_frtclj + Fruitopia Club (Qps) (set 11) + + + hb_frtclk + Fruitopia Club (Qps) (set 12) + + + hb_frtcll + Fruitopia Club (Qps) (set 13) + + + hb_frtclm + Fruitopia Club (Qps) (set 14) + + + hb_frtcln + Fruitopia Club (Qps) (set 15) + + + hb_gldpl + Golden Palace (Qps / Mazooma) (set 1) + + + hb_gldpla + Golden Palace (Qps / Mazooma) (set 2) + + + hb_gldwn + Golden Winner (Fairgames) (set 1) + + + hb_gldwna + Golden Winner (Fairgames) (set 2) + + + hb_gpal + Golden Palace (Qps) (set 1) + + + hb_gpala + Golden Palace (Qps) (set 2) + + + hb_gpalb + Golden Palace (Qps) (set 3) + + + hb_gpalc + Golden Palace (Qps) (set 4) + + + hb_gpald + Golden Palace (Qps) (set 5) + + + hb_gpale + Golden Palace (Qps) (set 6) + + + hb_gpalf + Golden Palace (Qps) (set 7) + + + hb_gpalg + Golden Palace (Qps) (set 8) + + + hb_gpalh + Golden Palace (Qps) (set 9) + + + hb_gpali + Golden Palace (Qps) (set 10) + + + hb_hotst + Hot Stuff (JPM?) (set 1) + + + hb_hotsta + Hot Stuff (JPM?) (set 2) + + + hb_hotstb + Hot Stuff (JPM?) (set 3) + + + hb_hotstc + Hot Stuff (JPM?) (set 4) + + + hb_hotstd + Hot Stuff (JPM?) (set 5) + + + hb_hotste + Hot Stuff (JPM?) (set 6) + + + hb_hotstf + Hot Stuff (JPM?) (set 7) + + + hb_hotstg + Hot Stuff (JPM?) (set 8) + + + hb_hotsth + Hot Stuff (JPM?) (set 9) + + + hb_jailb + Jail Break (Qps) (set 1) + + + hb_jailba + Jail Break (Qps) (set 2) + + + hb_jkrwl + Jokers Wild (Fairgames) (set 1) + + + hb_jkrwla + Jokers Wild (Fairgames) (set 2) + + + hb_medal + Medallion Job (Qps) + + + hb_mrmon + Mr. Money (Qps) (set 1) + + + hb_mrmona + Mr. Money (Qps) (set 2) + + + hb_mrmonb + Mr. Money (Qps) (set 3) + + + hb_mrmonc + Mr. Money (Qps) (set 4) + + + hb_rckrl + Rock 'n' Roll (Qps) (set 1) + + + hb_rckrla + Rock 'n' Roll (Qps) (set 2) + + + hb_rckrlb + Rock 'n' Roll (Qps) (set 3) + + + hb_rckrlc + Rock 'n' Roll (Qps) (set 4) + + + hb_rckrld + Rock 'n' Roll (Qps) (set 5) + + + hb_rckrle + Rock 'n' Roll (Qps) (set 6) + + + hb_rckrlf + Rock 'n' Roll (Qps) (set 7) + + + hb_rckrlg + Rock 'n' Roll (Qps) (set 8) + + + hb_rhv + Red Hot Voucher (Qps) (set 1) + + + hb_rhva + Red Hot Voucher (Qps) (set 2) + + + hb_ringb + Ring A Bell (JPM) (set 1) + + + hb_ringba + Ring A Bell (JPM) (set 2) + + + hb_ringbb + Ring A Bell (JPM) (set 3) + + + hb_ringbc + Ring A Bell (JPM) (set 4) + + + hb_ringbd + Ring A Bell (JPM) (set 5) + + + hb_ringbe + Ring A Bell (JPM) (set 6) + + + hb_ydd + Yabba-Dabba-Dough (Qps) (set 1) + + + hb_ydda + Yabba-Dabba-Dough (Qps) (set 2) + + + hbarrel + Heavy Barrel (US) + + + hbarrelw + Heavy Barrel (World) + + + hcastle + Haunted Castle (version M) + + + hcastlee + Haunted Castle (version E) + + + hcastlek + Haunted Castle (version K) + + + hcrash + Hyper Crash (version D) + + + hcrashc + Hyper Crash (version C) + + + hd_l1 + Harley Davidson (L-1) + + + hd_l3 + Harley Davidson (L-3) + + + hdrivair + Hard Drivin's Airborne (prototype) + + + hdrivairp + Hard Drivin's Airborne (prototype, early rev) + + + headon + Head On (2 players) + + + headon1 + Head On (1 player) + + + headon2 + Head On 2 + + + headon2s + Head On 2 (Sidam bootleg) + + + headonb + Head On (bootleg on dedicated hardware) + + + headoni + Head On (Irem, M-15 Hardware) + + + headonmz + Head On (bootleg, alt maze) + + + headons + Head On (Sidam bootleg, set 1) + + + headonsa + Head On (Sidam bootleg, set 2) + + + heartatk + Heart Attack + + + heartspd + Hearts & Spades + + + heatbrl + Heated Barrel (World version 3) + + + heatbrl2 + Heated Barrel (World version 2) + + + heatbrle + Heated Barrel (Electronic Devices license) + + + heatbrlo + Heated Barrel (World old version) + + + heatbrlu + Heated Barrel (US) + + + heatof11 + Heat of Eleven '98 (ver EAA) + + + heavymtl + Heavy Metal + + + heberpop + Hebereke no Popoon (Japan) + + + hedpanic + Head Panic (ver. 0117, 17/01/2000) + + + hedpanicf + Head Panic (ver. 0315, 15/03/2000) + + + hedpanico + Head Panic (ver. 0615, 15/06/1999) + + + heiankyo + Heiankyo Alien + + + helifire + HeliFire (set 1) + + + helifirea + HeliFire (set 2) + + + hellfire + Hellfire (2P set) + + + hellfire1 + Hellfire (1P set) + + + hellfire1a + Hellfire (1P set, older) + + + hellfire2a + Hellfire (2P set, older) + + + hellngt + Hell Night (ver EAA) + + + herbiedk + Herbie at the Olympics (DK conversion) + + + hercules + Hercules + + + hermit + The Hermit (Ver. 1.14) + + + hero + Hero + + + herodk + Hero in the Castle of Doom (DK conversion) + + + herodku + Hero in the Castle of Doom (DK conversion not encrypted) + + + heuksun + Heuk Sun Baek Sa (Korea) + + + hexa + Hexa + + + hexagone + L'Hexagone + + + hexion + Hexion (Japan ver JAB) + + + hexpool + Hex Pool (Shinkai) + + + hexpoola + Hex Pool (Senko) + + + hg_frd + Fruit Deuce (Hazel Grove) + + + hginga + Hanafuda Hana Ginga + + + hgkairak + Taisen Hot Gimmick Kairakuten (Japan) + + + hglbtrtr + Harlem Globetrotters On Tour + + + hgokbang + Hanafuda Hana Gokou Bangaihen (Japan) + + + hgokou + Hanafuda Hana Gokou (Japan) + + + hh + Haunted House (Rev. 2) + + + hh_1 + Haunted House (Rev. 1) + + + hharry + Hammerin' Harry (World) + + + hharryu + Hammerin' Harry (US) + + + hidctch2 + Hidden Catch 2 (pcb ver 3.03) (Kor/Eng) (AT89c52 protected) + + + hidctch2a + Hidden Catch 2 (pcb ver 1.00) (Kor/Eng/Jpn/Chi) + + + hidctch3 + Hidden Catch 3 (ver 1.00 / pcb ver 3.05) + + + hideseek + Hide & Seek + + + hidnc2k + Hidden Catch 2000 (AT89c52 protected) + + + hidnctch + Hidden Catch (World) / Tul Lin Gu Lim Chat Ki '98 (Korea) (pcb ver 3.03) + + + higemaru + Pirate Ship Higemaru + + + highsplt + Space Fever High Splitter (set 1) + + + highsplta + Space Fever High Splitter (set 2) + + + highspltb + Space Fever High Splitter (alt Sound) + + + hiimpact + High Impact Football (rev LA5 02/15/91) + + + hiimpact1 + High Impact Football (rev LA1 12/16/90) + + + hiimpact2 + High Impact Football (rev LA2 12/26/90) + + + hiimpact3 + High Impact Football (rev LA3 12/27/90) + + + hiimpact4 + High Impact Football (rev LA4 02/04/91) + + + hiimpactp + High Impact Football (prototype, rev 8.6 12/09/90) + + + hikaru + Hikaru Bios + + + himesiki + Himeshikibu (Japan) + + + hipai + Hi Pai Paradise + + + hippodrm + Hippodrome (US) + + + hirol_fr + High Roller Casino (3.00 France) + + + hirol_gr + High Roller Casino (3.00 Germany) + + + hirol_gr_210 + High Roller Casino (2.10 Germany) + + + hirol_it + High Roller Casino (3.00 Italy) + + + hirolcas + High Roller Casino (3.00) + + + hirolcas_210 + High Roller Casino (2.10) + + + hirolcat + High Roller Casino (3.00) TEST + + + hironew + High Roller Casino (ARM7 Sound Board) + + + hiryuken + Hokuha Syourin Hiryu no Ken + + + hishouza + Hishou Zame (Japan) + + + histryma + The History of Martial Arts + + + hitice + Hit the Ice (US) + + + hiticej + Hit the Ice (Japan) + + + hitme + Hit Me (set 1) + + + hitme1 + Hit Me (set 2) + + + hitnmiss + Hit 'n Miss (version 3.0) + + + hitnmiss2 + Hit 'n Miss (version 2.0) + + + hitpoker + Hit Poker (Bulgaria) + + + hjingi + Hana Jingi (Japan, Bet) + + + hkagerou + Hana Kagerou [BET] (Japan) + + + hldspin1 + Hold & Spin I (Version 2.7T, set 1) + + + hldspin1dt + Hold & Spin I (Version 2.7T, set 2) + + + hldspin1o + Hold & Spin I (Version 2.5T) + + + hldspin1vt + Hold & Spin I (Version 2.7T Dual) + + + hldspin2 + Hold & Spin II (Version 2.8R, set 1) + + + hldspin2d1 + Hold & Spin II (Version 2.8R, set 2) + + + hldspin2o + Hold & Spin II (Version 2.6) + + + hldspin2v1 + Hold & Spin II (Version 2.8R Dual) + + + hlywoodh + Hollywood Heat + + + hmcompm2 + hiphopmania complete MIX 2 (ver UA-A) + + + hmcompmx + hiphopmania complete MIX (ver UA-B) + + + hmgeo + Heavy Metal Geomatrix (JPN, USA, EUR, ASI, AUS) (Rev A) + + + hnageman + AV Hanafuda Hana no Ageman (Japan 900716) + + + hnayayoi + Hana Yayoi (Japan) + + + hncholms + Hunchback Olympic (Scramble hardware) + + + hndlchmp + Handle Champ (GQ710 VER. JAB) + + + hnfubuki + Hana Fubuki [BET] (Japan) + + + hng64 + Hyper NeoGeo 64 Bios + + + hngmnjpm + Hangman (JPM) + + + hngmnjpmd + Hangman (JPM) (Protocol) + + + hnkochou + Hana Kochou (Japan, Bet) + + + hnoridur + Hana Oriduru (Japan) + + + hnxmasev + AV Hanafuda Hana no Christmas Eve (Japan 901204) + + + hoccer + Hoccer (set 1) + + + hoccer2 + Hoccer (set 2) + + + hocrash + Crash (bootleg of Head On) + + + hod + House of Diamonds + + + hod2bios + Naomi House of the Dead 2 Bios + + + hoedown + Hoe Down + + + hogalley + Vs. Hogan's Alley (set HA4-1 E-1) + + + holeland + Hole Land + + + holo + Holosseum (US) + + + homerun + Moero!! Pro Yakyuu Homerun Kyousou + + + homo + Homo + + + homura + Homura (v2.04J) + + + honeydol + Honey Dolls + + + hook + Hook (World) + + + hook_401 + Hook (4.01) + + + hook_404 + Hook (4.04) + + + hook_408 + Hook (4.08) + + + hookj + Hook (Japan) + + + hooku + Hook (US) + + + hoops + Hoops + + + hoops95 + Hoops (Europe/Asia 1.7) + + + hoops96 + Hoops '96 (Europe/Asia 2.0) + + + hopmappy + Hopping Mappy + + + hopper + SWP Hopper Board + + + hopprobo + Hopper Robo + + + horekid + Kid no Hore Hore Daisakusen + + + horekidb + Kid no Hore Hore Daisakusen (bootleg) + + + horizon + Horizon (Irem) + + + horshoes + American Horseshoes (US) + + + hotblock + Hot Blocks - Tetrix II + + + hotbubl + Hot Bubble + + + hotchase + Hot Chase + + + hotd + House of the Dead + + + hotd2 + House of the Dead 2 + + + hotd2o + House of the Dead 2 (original) + + + hotd2p + House of the Dead 2 (prototype) + + + hotd3 + The House of the Dead III (GDX-0001) + + + hotdebut + Quiz de Idol! Hot Debut (Japan) + + + hotdoggn + Hotdoggin' + + + hotdogst + Hotdog Storm (International) + + + hotgm4ev + Taisen Hot Gimmick 4 Ever (Japan) + + + hotgmck + Taisen Hot Gimmick (Japan) + + + hotgmck3 + Taisen Hot Gimmick 3 Digital Surfing (Japan) + + + hotgmcki + Mahjong Hot Gimmick Integral (Japan) + + + hotgmkmp + Taisen Hot Gimmick Mix Party + + + hothand + Hot Hand + + + hotmemry + Hot Memory (V1.2, Germany, 12/28/94) + + + hotmemry11 + Hot Memory (V1.1, Germany, 11/30/94) + + + hotmind + Hot Mind (Hard Times hardware) + + + hotminda + Hot Mind (adjustable prize) + + + hotmindff + Hot Mind (Fit of Fighting hardware) + + + hotpinbl + Hot Pinball + + + hotrod + Hot Rod (World, 3 Players, Turbo set 1, Floppy Based) + + + hotroda + Hot Rod (World, 3 Players, Turbo set 2, Floppy Based) + + + hotrodj + Hot Rod (Japan, 4 Players, Floppy Based) + + + hotshock + Hot Shocker + + + hotshockb + Hot Shocker (early revision?) + + + hotshots + Hot Shots + + + hotslot + Hot Slot (ver. 05.01) + + + hotslots + Hot Slots (6.00) + + + hotsmash + Vs. Hot Smash + + + hotstuff + Olympic Hot Stuff (TAS 5 Reel System) + + + hottop + Hot Toppings (Russia) + + + hotwheel + Hot Wheels + + + hourouki + Mahjong Hourouki Part 1 - Seisyun Hen (Japan) + + + housemn2 + House Mannequin Roppongi Live hen (Japan 870418) + + + housemnq + House Mannequin (Japan 870217) + + + howzat + Howzat! + + + hparadis + Super Hana Paradise (Japan) + + + hpolym84 + Hyper Olympic '84 + + + hpuncher + Hard Puncher (Japan) + + + hrclass + Home Run Classic (v1.21 12-feb-1997) + + + hrdtimes + Hard Times (set 1) + + + hrdtimesa + Hard Times (set 2) + + + hs_l3 + High Speed (L-3) + + + hs_l4 + High Speed (L-4) + + + hsf2 + Hyper Street Fighter 2: The Anniversary Edition (USA 040202) + + + hsf2a + Hyper Street Fighter 2: The Anniversary Edition (Asia 040202) + + + hsf2d + Hyper Street Fighter II: The Anniversary Edition (Asia 040202 Phoenix Edition) (bootleg) + + + hsf2j + Hyper Street Fighter 2: The Anniversary Edition (Japan 031222) + + + hshavoc + High Seas Havoc + + + hshot_p8 + Hot Shot Basketball (P-8) + + + hspot2 + Hot Spot 2 + + + hspot3 + Hot Spot 3 + + + hstennis + Hot Shots Tennis (V1.1) + + + hstennis10 + Hot Shots Tennis (V1.0) + + + htchctch + Hatch Catch + + + htengoku + Hanafuda Hana Tengoku (Japan) + + + hthero + Hat Trick Hero (Japan) + + + hthero93 + Hat Trick Hero '93 (Ver 1.0J 1993/02/28) + + + hthero94 + Hat Trick Hero '94 (Ver 2.2A 1994/05/26) + + + hthero95 + Hat Trick Hero '95 (Ver 2.5J 1994/11/03) + + + hthero95u + Hat Trick Hero '95 (Ver 2.5A 1994/11/03) + + + httip_l1 + Hot Tip (L-1) + + + hulk + Incredible Hulk,The + + + hunchbak + Hunchback (set 1) + + + hunchbaka + Hunchback (set 2) + + + hunchbkd + Hunchback (DK conversion) + + + hunchbkg + Hunchback (Galaxian hardware) + + + hunchbks + Hunchback (Scramble hardware) + + + hunchbks2 + Hunchback (Scramble hardware, bootleg) + + + huncholy + Hunchback Olympic + + + hurr_l2 + Hurricane (L-2) + + + hustle + Hustle + + + hustler + Video Hustler + + + hustlerb + Video Hustler (bootleg, set 1) + + + hustlerb2 + Fatsy Gambler (Video Hustler bootleg) + + + hustlerb3 + Video Pool (Video Hustler bootleg) + + + hustlerb4 + Video Hustler (bootleg, set 2) + + + hustlerd + Video Hustler (Dynamo Games) + + + hvnsgate + Heaven's Gate + + + hvoltage + High Voltage + + + hvymetal + Heavy Metal (315-5135) + + + hvymetap + Heavy Metal Meltdown + + + hvysmsh + Heavy Smash (Europe version -2) + + + hvysmsha + Heavy Smash (Asia version -4) + + + hvysmshj + Heavy Smash (Japan version -2) + + + hvyunit + Heavy Unit (World) + + + hvyunitj + Heavy Unit (Japan, Newer) + + + hvyunitjo + Heavy Unit (Japan, Older) + + + hvyunitu + Heavy Unit -U.S.A. Version- (US) + + + hwchamp + Heavyweight Champ + + + hwchampj + Heavyweight Champ (Japan, FD1094 317-0046) + + + hwrace + High Way Race + + + hydra + Hydra + + + hydrap + Hydra (prototype 5/14/90) + + + hydrap2 + Hydra (prototype 5/25/90) + + + hydrthnd + Hydro Thunder + + + hyhoo + Hayaoshi Taisen Quiz Hyhoo (Japan) + + + hyhoo2 + Hayaoshi Taisen Quiz Hyhoo 2 (Japan) + + + hyouban + Mahjong Hyouban Musume [BET] (Japan) + + + hypbbc2p + Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. JAA) + + + hypbbc2pk + Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. KAA) + + + hypbl_l4 + HyperBall (L-4) + + + hyperath + Hyper Athlete (GV021 Japan 1.00) + + + hyperbbc + Hyper Bishi Bashi Champ (GQ876 VER. EAA) + + + hyperbbca + Hyper Bishi Bashi Champ (GQ876 VER. AAA) + + + hyperpac + Hyper Pacman + + + hyperpacb + Hyper Pacman (bootleg) + + + hyperspc + Hyperspace (bootleg of Asteroids) + + + hyperspt + Hyper Sports + + + hypersptb + Hyper Sports (bootleg) + + + hyperv2 + Hyper V2 (Global VR) Install - 06/12/02 + + + hyperv2a + Hyper V2 (Global VR) Install - 09/30/01 + + + hyprdriv + Hyperdrive + + + hyprduel + Hyper Duel (Japan set 1) + + + hyprduel2 + Hyper Duel (Japan set 2) + + + hypreac2 + Mahjong Hyper Reaction 2 (Japan) + + + hypreact + Mahjong Hyper Reaction (Japan) + + + hyprolym + Hyper Olympic + + + hyprolymb + Hyper Olympic (bootleg) + + + hypsptsp + Hyper Sports Special (Japan) + + + i500_11b + Indianapolis 500 (1.1 Belgium) + + + i500_11r + Indianapolis 500 (1.1R) + + + ibara + Ibara (2005/03/22 MASTER VER..) + + + ibarablk + Ibara Kuro Black Label (2006/02/06. MASTER VER.) + + + ibarablka + Ibara Kuro Black Label (2006/02/06 MASTER VER.) + + + iccash + I C Cash (Russia) (Atronic) + + + iceclimb + Vs. Ice Climber (set IC4-4 B-1) + + + iceclimba + Vs. Ice Climber (set IC4-4 ?) + + + iceclmrd + Vs. Ice Climber Dual (set IC4-4 A-1) + + + icecold + Ice Cold Beer + + + icefever + Ice Fever + + + ichiban + Ichi Ban Jyan + + + ichir + Puzzle & Action: Ichidant-R (World) + + + ichirj + Puzzle & Action: Ichidant-R (Japan) + + + ichirjbl + Puzzle & Action: Ichidant-R (Japan) (bootleg) + + + ichirk + Puzzle & Action: Ichidant-R (Korea) + + + id4 + Independence Day + + + idhimitu + Idol no Himitsu [BET] (Japan 890304) + + + idolmj + Idol-Mahjong Housoukyoku (Japan) + + + idsoccer + Indoor Soccer (set 1) + + + idsoccera + Indoor Soccer (set 2) + + + iemoto + Iemoto (Japan 871020) + + + iemotom + Iemoto [BET] (Japan 871118) + + + iganinju + Iga Ninjyutsuden (Japan) + + + igmo + IGMO + + + igromula + Igrosoft Multigame Bootleg (15 Games) + + + igromult + Igrosoft Multigame Bootleg (10 Games) + + + igs_ncs + New Champion Skill (v100n) + + + igs_ncs2 + New Champion Skill (v100n 2000) + + + igsm312 + unknown 'IGS 6POKER2' game (V312CN) + + + ij_l3 + Indiana Jones (L-3) + + + ij_l4 + Indiana Jones (L-4) + + + ij_l5 + Indiana Jones (L-5) + + + ij_l6 + Indiana Jones (L-6) + + + ij_l7 + Indiana Jones (L-7) + + + ij_lg7 + Indiana Jones (LG-7) + + + ikari + Ikari Warriors (US JAMMA) + + + ikari3 + Ikari III - The Rescue (World, 8-Way Joystick) + + + ikari3j + Ikari Three (Japan, Rotary Joystick) + + + ikari3k + Ikari Three (Korea, 8-Way Joystick) + + + ikari3u + Ikari III - The Rescue (US, Rotary Joystick) + + + ikaria + Ikari Warriors (US) + + + ikarijp + Ikari (Japan No Continues) + + + ikarijpb + Ikari (Joystick hack bootleg) + + + ikarinc + Ikari Warriors (US No Continues) + + + ikaruga + Ikaruga (GDL-0010) + + + ikki + Ikki (Japan) + + + illvelo + Illvelo (Illmatic Envelope) + + + ilpag + Il Pagliaccio (Italy, Ver. 2.7C) + + + imago + Imago (cocktail set) + + + imagoa + Imago (no cocktail set) + + + imekura + Imekura Mahjong (Japan) + + + imgfight + Image Fight (World, revision A) + + + imgfightj + Image Fight (Japan) + + + imolagp + Imola Grand Prix (set 1) + + + imolagpo + Imola Grand Prix (set 2) + + + imsorry + I'm Sorry (315-5110, US) + + + imsorryj + Gonbee no I'm Sorry (315-5110, Japan) + + + inca + Inca + + + incanp + Incan Pyramids (Konami Endeavour) + + + ind250cc + 250 CC + + + indianbt + Indian Battle + + + indianbtbr + Indian Battle (Brazil) + + + indiandr + Indian Dreaming (0100845V, Local) + + + indianmm + Indian Dreaming - Maximillion$ (10130711, NSW/ACT) + + + indy4 + Indy 4 [TTL] + + + indy500 + INDY 500 Twin (Revision A, Newer) + + + indy500d + INDY 500 Deluxe (Revision A) + + + indy500to + INDY 500 Twin (Revision A) + + + indy800 + Indy 800 [TTL] + + + indyheat + Danny Sullivan's Indy Heat + + + indytemp + Indiana Jones and the Temple of Doom (set 1) + + + indytemp2 + Indiana Jones and the Temple of Doom (set 2) + + + indytemp3 + Indiana Jones and the Temple of Doom (set 3) + + + indytemp4 + Indiana Jones and the Temple of Doom (set 4) + + + indytempc + Indiana Jones and the Temple of Doom (Cocktail) + + + indytempd + Indiana Jones and the Temple of Doom (German) + + + inferno + Inferno (Williams) + + + inidv3cy + Initial D Arcade Stage Ver. 3 Cycraft Edition (Rev. B) (GDS-0039B) + + + initd + Initial D Arcade Stage (Rev B) (Japan) (GDS-0020B) + + + initdexp + Initial D Arcade Stage (Export) (GDS-0025) + + + initdv2e + Initial D Arcade Stage Ver. 2 (Export) (GDS-0027) + + + initdv2j + Initial D Arcade Stage Ver. 2 (Japan) (Rev. B) (GDS-0026B) + + + initdv2jo + Initial D Arcade Stage Ver. 2 (Japan) (GDS-0026) + + + initdv3e + Initial D Arcade Stage Ver. 3 (Export) (GDS-0033) + + + initdv3j + Initial D Arcade Stage Ver. 3 (Japan) (Rev. C) (GDS-0032C) + + + initdv3jb + Initial D Arcade Stage Ver. 3 (Japan) (Rev. B) (GDS-0032B) + + + inquiztr + Inquizitor + + + insector + Insector (prototype) + + + insectx + Insector X (World) + + + insectxj + Insector X (Japan) + + + intcup94 + International Cup '94 (Ver 2.2O 1994/05/26) + + + inthunt + In The Hunt (World) + + + inthuntu + In The Hunt (US) + + + intlaser + International Team Laser (prototype) + + + intrepid + Intrepid (set 1) + + + intrepid2 + Intrepid (set 2) + + + intrepidb + Intrepid (Elsys bootleg, set 1) + + + intrepidb2 + Intrepid (Loris bootleg) + + + intrepidb3 + Intrepid (Elsys bootleg, set 2) + + + introdon + Karaoke Quiz Intro Don Don! (J 960213 V1.000) + + + intrscti + Intersecti + + + intruder + Intruder + + + inttoote + International Toote (Germany) + + + inttootea + International Toote II (World?) + + + inufuku + Quiz & Variety Sukusuku Inufuku (Japan) + + + inunoos + Inu No Osanpo / Dog Walking (Rev A) + + + invad2ct + Space Invaders II (Midway, cocktail) + + + invaddlx + Space Invaders Deluxe + + + invader4 + Space Invaders Part Four + + + invaderl + Space Invaders (Logitec) + + + invaders + Space Invaders / Space Invaders M + + + invadpt2 + Space Invaders Part II (Taito) + + + invadpt2br + Space Invaders Part II (Brazil) + + + invadrmr + Space Invaders (Model Racing) + + + invasion + Invasion (Sidam) + + + invasiona + Invasion (bootleg set 1, normal graphics) + + + invasionb + Invasion (bootleg set 2, no copyright) + + + invasionrz + Invasion (bootleg set 3, R Z SRL Bologna) + + + invasionrza + Invasion (bootleg set 4, R Z SRL Bologna) + + + invasnab + Invasion - The Abductors (version 5.0) + + + invasnab3 + Invasion - The Abductors (version 3.0) + + + invasnab4 + Invasion - The Abductors (version 4.0) + + + invds + Invinco / Deep Scan + + + invho2 + Invinco / Head On 2 + + + invinco + Invinco + + + invmulti + Space Invaders Multigame (M8.03D) + + + invmultim1a + Space Invaders Multigame (M8.01A) + + + invmultim2a + Space Invaders Multigame (M8.02A) + + + invmultim2c + Space Invaders Multigame (M8.02C) + + + invmultim3a + Space Invaders Multigame (M8.03A) + + + invmultip + Space Invaders Multigame (prototype) + + + invmultis1a + Space Invaders Multigame (S0.81A) + + + invmultis2a + Space Invaders Multigame (S0.82A) + + + invmultis3a + Space Invaders Multigame (S0.83A) + + + invmultit3d + Space Invaders Multigame (T8.03D) + + + invqix + Space Invaders / Qix Silver Anniversary Edition (Ver. 2.03) + + + invrvnge + Invader's Revenge (set 1) + + + invrvngea + Invader's Revenge (set 2) + + + invrvngeb + Invader's Revenge (set 3) + + + invrvngedu + Invader's Revenge (Dutchford, single PCB) + + + invrvngegw + Invader's Revenge (Game World, single PCB) + + + inwinner + Instant Winner (Russia) + + + ipminvad + IPM Invader + + + ipminvad1 + IPM Invader (Incomplete Dump) + + + ippatsu + Ippatsu Gyakuten [BET] (Japan) + + + iqblock + IQ-Block + + + iqblocka + Shu Zi Le Yuan (V127M) + + + iqblockf + Shu Zi Le Yuan (V113FR) + + + iqpipe + IQ Pipe + + + irobot + I, Robot + + + iron + Iron (SNES bootleg) + + + ironclad + Choutetsu Brikin'ger - Iron clad (Prototype) + + + ironclado + Choutetsu Brikin'ger - Iron clad (Prototype, bootleg) + + + ironfort + Iron Fortress + + + ironfortj + Iron Fortress (Japan) + + + ironhors + Iron Horse + + + ironmaid + Iron Maiden + + + irrmaze + The Irritating Maze / Ultra Denryu Iraira Bou + + + isgsm + ISG Selection Master Type 2006 BIOS + + + island + Island (050713 World) + + + island2 + Island 2 (060529 World) + + + island2_3 + Island 2 (061218 World) + + + island2_3a + Island 2 (bootleg, 061218, VIDEO GAME-1 OS2-01) + + + island2_4 + Island 2 (070205 Russia) + + + island2_4a + Island 2 (bootleg, 070205, banking address hack) + + + island2_5 + Island 2 (090528 Lottery) + + + island2_6 + Island 2 (090724 Entertainment) + + + island2a + Island 2 (bootleg, 060529, banking address hack) + + + island2b + Island 2 (bootleg, 060529, banking address hack, changed version text) + + + island2c + Island 2 (bootleg, 060529, LOTTOGAME (I)) + + + island_2 + Island (070409 Russia) + + + islanda + Island (bootleg, 050713, backdoor) + + + islandb + Island (bootleg, 050713, VIDEO GAME-1 OS01) + + + islandc + Island (bootleg, 050713, LOTOS OS01) + + + istellar + Interstellar Laser Fantasy + + + itaten + Itazura Tenshi (Japan) + + + itazuram + Itazura Monkey + + + iteagle + Eagle BIOS + + + ivorytsk + Ivory Tusk + + + ixion + Ixion (prototype) + + + j2008 + unknown '008' (Unk) (MPS) + + + j2adnote + Add A Note (JPM) (MPS, set 1) + + + j2adnotea + Add A Note (JPM) (MPS, set 2) + + + j2adnoteb + Add A Note (JPM) (MPS, set 3) + + + j2adnotec + Add A Note (JPM) (MPS, set 4) + + + j2adnoted + Add A Note (JPM) (MPS, set 5) + + + j2adnotee + Add A Note (JPM) (MPS, set 6) + + + j2adnotef + Add A Note (JPM) (MPS, set 7) + + + j2adnoteg + Add A Note (JPM) (MPS, set 8) + + + j2adnoteh + Add A Note (JPM) (MPS, set 9) + + + j2adnotei + Add A Note (JPM) (MPS, set 10) + + + j2always + Always Eight (Bwb) (MPS) + + + j2b7 + Bar 7? (JPM) (MPS) + + + j2bankch + Bank Chase (JPM) (MPS) + + + j2bankrd + Bank Raid (JPM) (MPS) + + + j2bigbnk + Big Banker (JPM) (MPS) + + + j2bigbox + Big Box (JPM) (MPS) + + + j2bigbuk + Big Buck$ (JPM) (MPS) + + + j2bigdl + Big Deal (JPM) (MPS) + + + j2bkroll + Bank Roll (JPM) (MPS) + + + j2blkchy + Black Cherry (JPM) (MPS) + + + j2blustr + Blue Streak (Pcp) (MPS) + + + j2bodym + Body Match (JPM) (MPS) + + + j2bonanz + Bonanza (Eurocoin) (MPS) + + + j2cashab + Cashablanca (JPM) (MPS) + + + j2cashbn + Cash Bonus Club (JPM) (MPS) + + + j2cashfl + Cash Falls (JPM) (MPS) + + + j2cashrl + Cash Reels (JPM) (MPS) + + + j2cashro + Cash Rolls (JPM) (MPS) + + + j2cashrv + Cash Reserve (JPM) (MPS) + + + j2cashry + Cashino Royale (Pcp) (MPS) + + + j2cashtd + Cash Track Deluxe (JPM) (MPS) + + + j2cashtk + Cash Track (JPM) (MPS) + + + j2casino + Casino Classic (Pcp) (MPS) + + + j2chsn + unknown 'chsnsn05' (Unk) (MPS) + + + j2clbbin + Club Bingo (Crystal) (MPS) + + + j2club77 + Club 77 (Unk) (MPS) + + + j2coinct + Coin Count (JPM) (MPS) + + + j2coinsh + Coin Shoot (Bwb) (MPS) + + + j2contnd + Continuous Nudger (Mdm) (MPS) + + + j2coppot + Copper Pot (JPM) (MPS) + + + j2coprun + Copper Run (JPM) (MPS) + + + j2cprndx + Copper Run Deluxe (JPM) (MPS) + + + j2criscr + Criss Cross Jackpot (Pcp) (MPS) + + + j2crkbnk + Crack The Bank (JPM) (MPS) + + + j2crown + Crown Dealer (Unk) (MPS) + + + j2cshalm + Cash Alarm (Pcp) (MPS) + + + j2cshcrd + Cash Cards (Pcp) (MPS) + + + j2cshfil + Cash-Filla (Pcp) (MPS) + + + j2cshnud + Cash Nudger (Mdm) (MPS) + + + j2cshsmh + Cash Smash (Pcp) (MPS) + + + j2cvault + Cash Vault (JPM) (MPS) + + + j2dropld + Drop The Lot Deluxe (JPM) (MPS) + + + j2droplt + Drop The Lot (JPM) (MPS) + + + j2ewn + Each Way Nudger (JPM) (MPS) + + + j2ews + Each Way Shuffle (JPM) (MPS) + + + j2exec + Executive Club (JPM) (MPS) + + + j2fasttk + Fast Trak (JPM) (MPS) + + + j2fiveal + Five Alive (JPM) (MPS) + + + j2fiveln + Five Liner (JPM) (MPS) + + + j2fivepn + Fivepenny Nudger (Mdm) (MPS) + + + j2fqueen + Find The Queen (JPM) (MPS) + + + j2frmtch + Fruit Match (JPM) (MPS) + + + j2frucnx + Fruit Connexion (Pcp) (MPS) + + + j2fullhs + Full House Club (JPM) (MPS) + + + j2fws + Five Way Shuffle (Set 1) (JPM) (MPS) + + + j2fwsa + Five Way Shuffle (Set 2) (JPM) (MPS) + + + j2ghostb + Ghostbuster (JPM) (MPS) + + + j2gldchy + Golden Cherry (JPM) (MPS) + + + j2gldwin + Golden Win (JPM) (MPS) + + + j2goldbr + Golden Bars (JPM) (MPS) + + + j2goldrn + Gold Run (JPM) (MPS) + + + j2hcash + Hot Cash (Unk) (MPS) + + + j2hilocl + Hi Lo Climber Club (Crystal) (MPS) + + + j2hinote + Hi Note (JPM) (MPS) + + + j2hirola + Hi Roll (Unk) (MPS) + + + j2hiroll + Hi Roller (JPM) (MPS) + + + j2hitmon + Hit Money (Pcp) (MPS) + + + j2hotpot + Hot Pot (JPM) (MPS) + + + j2hotptd + Hot Pot Deluxe (JPM) (MPS) + + + j2hotsht + Hot Shot Club (JPM) (MPS) + + + j2hypnot + Hypernote (JPM) (MPS) + + + j2jackbr + Jackpot Bars (JPM) (MPS) + + + j2jackdc + Jackpot Dice (JPM) (MPS) + + + j2jokers + Jokers (JPM) (MPS) + + + j2kingcl + King Of Clubs (JPM) (MPS) + + + j2lhs + unknown 'lhs' (Unk) (MPS) + + + j2litean + Lite A Nudge (JPM) (MPS) + + + j2litnot + Lite A Note Club (Crystal) (MPS) + + + j2loots + Loot Shoot (Pcp) (MPS) + + + j2lovshd + Loot Shoot Deluxe (JPM) (MPS) + + + j2lovsht + Loot Shoot (JPM) (MPS) + + + j2luckar + Lucky Arrows (JPM) (MPS) + + + j2lucky2 + Lucky 2s (JPM) (MPS) + + + j2match + Match It (JPM) (MPS) + + + j2maxima + Maxima (Pcp) (MPS) + + + j2missis + Mississippi Gambler Club (Crystal) (MPS) + + + j2monblt + Money Belt (JPM) (MPS) + + + j2monbnd + Money Bands (JPM) (MPS) + + + j2mongam + Money Game (JPM) (MPS) + + + j2mongmd + Money Game Deluxe (JPM) (MPS) + + + j2monmin + Money Mine (Unk) (MPS) + + + j2monmtx + Money Matrix (Bwb) (MPS) + + + j2montrp + Money Trapper (Pcp) (MPS) + + + j2multwn + Multi Win (JPM) (MPS) + + + j2nbz + Nudge Bonanza (JPM) (MPS) + + + j2ncsp + unknown 'ncsp0pp' (Bwb) (MPS) + + + j2nn2 + unknown 'nn_2' (Unk) (MPS) + + + j2nolimt + No Limit Nudge (Mdm) (MPS) + + + j2notesh + Note Shoot (JPM) (MPS) + + + j2notexc + Note Exchange (Set 1) (JPM) (MPS) + + + j2notexca + Note Exchange (Set 2) (JPM) (MPS) + + + j2notexcb + Note Exchange (Set 3) (JPM) (MPS) + + + j2notspn + Note Spinner (Unk) (MPS) + + + j2nrrp + unknown 'nprpopp' (Bwb) (MPS) + + + j2nsc15 + unknown 'nsc15' (Pcp) (MPS) + + + j2nsw12 + unknown 'nsw12' (Pcp) (MPS) + + + j2nud5p + 5p Nudger (JPM) (MPS) + + + j2nudbnz + Nudge Bonanza Deluxe (Set 1) (JPM) (MPS) + + + j2nudbnza + Nudge Bonanza Deluxe (Set 2) (JPM) (MPS) + + + j2nuddud + Nudge Double Up Deluxe (JPM) (MPS) + + + j2nuddup + Nudge Double Up (JPM) (MPS) + + + j2nudfev + Nudge Fever (Bwb) (MPS) + + + j2nudmon + Nudge Money (Pcp) (MPS) + + + j2nudnud + Nudge Nudge (JPM) (MPS) + + + j2nudshf + Nudge Shuffler (JPM) (MPS) + + + j2nudup3 + Nudge Double Up MkIII (JPM) (MPS) + + + j2paypkt + Pay Packet (Pcp) (MPS) + + + j2penny + In For A Penny In For A Pound (Pcp) (MPS) + + + j2pharo + Pharoah (Unk) (MPS) + + + j2pinac + Pinnacle (JPM) (MPS) + + + j2pinclb + Pinnacle Club (JPM) (MPS) + + + j2plsmnd + Plus Money Deluxe (JPM) (MPS) + + + j2plsmon + Plus Money (JPM) (MPS) + + + j2plsnud + Plus Nudge (JPM) (MPS) + + + j2pndrsh + Pound Rush (JPM) (MPS) + + + j2potlck + Pot Luck (JPM) (MPS) + + + j2pyramd + Pyramid (JPM) (MPS) + + + j2rdclb + Royal Deal Club (JPM) (MPS) + + + j2reelbn + Reel Bingo Club (Set 1) (JPM) (MPS) + + + j2reelbna + Reel Bingo Club (Set 2) (JPM) (MPS) + + + j2reelbo + Reel Bonus (JPM) (MPS) + + + j2reelcz + Reel Crazy (JPM) (MPS) + + + j2reeldc + Reel Deal Club (JPM) (MPS) + + + j2reelmc + Reel Magic Club (JPM) (MPS) + + + j2reelmg + Reel Magic (JPM) (MPS) + + + j2reelmgd + Reel Magic (JPM) [Dutch] (MPS) + + + j2reelmo + Reel Money (JPM) (MPS) + + + j2rm941 + unknown 'rm941' (Unk) (MPS) + + + j2rotnot + Rota Note (JPM) (MPS) + + + j2roulcl + Roulette Club (JPM) [Mps] (MPS) + + + j2sex + Super Exchanger (Unk) (MPS) + + + j2silvcl + Silver Classic (Pcp) (MPS) + + + j2silvsh + Silver Shot (Pcp) (MPS) + + + j2sirich + Strike It Rich (JPM) (MPS) (set 1) + + + j2siricha + Strike It Rich (JPM) (MPS) (set 2) + + + j2sldgld + Solid Gold (JPM) (MPS) + + + j2slvrgh + Silver Ghost (JPM) (MPS) + + + j2sng + Super Nudge Gambler (Cotswold Microsystems) (MPS) + + + j2spcrsv + Special Reserve (JPM) (MPS) + + + j2ss + Supa Stepper (JPM) (MPS) + + + j2sset + Sunset Strip (v2.0) (Unk) (MPS?) + + + j2sstrea + Supa Streak (Pcp) (MPS) + + + j2stahed + Streets Ahead (JPM) (MPS) + + + j2strk10 + Strike Ten (Ace) (MPS) + + + j2supchy + Super Cherry (Eurocoin) (MPS) + + + j2super7 + Super 7's (Unk) (MPS) + + + j2supfrc + Supa Fruit Club (JPM) (MPS) + + + j2supfrt + Supa Fruit (JPM) (MPS) + + + j2supln + Super Line (JPM) (MPS) + + + j2suppot + Super Pots (JPM) (MPS) + + + j2suprft + Super Fruit (JPM) (MPS) + + + j2suprl + Super Reel (JPM) (MPS) + + + j2suprsh + Supershot (JPM) (MPS) + + + j2supsft + Supashifta (JPM) (MPS) + + + j2supstp + Supa Steppa (JPM) (MPS) + + + j2supstr + Superstars (JPM) (MPS) + + + j2suptrk + Supa Track (JPM) (MPS) + + + j2swbank + Switch Back (JPM) (MPS) + + + j2take2 + Take 2 (JPM) (MPS) + + + j2topcd + Top Card (Bwb) (MPS) + + + j2topsht + Top Shot (JPM) (MPS) + + + j2trail + Trailblazer (Bwb) (MPS) + + + j2tst + MPS 1 Test Rom (JPM) (MPS) + + + j2tstplt + Test Pilot (Set 1) (Pcp) (MPS) + + + j2tstplta + Test Pilot (Set 2) (Pcp) (MPS) + + + j2tupnd + Tuppenny Nudger (Mdm) (MPS) + + + j2tupnud + Tuppenny Nudger (JPM) (MPS) + + + j2wag + Win-A-Gain (Bwb) (MPS) + + + j2westrn + Western (JPM) (MPS) + + + j2wrb + Wild Reel Bingo (JPM) (MPS) + + + j2xxx + Triple X (Bwb) (MPS) + + + j5ar80 + Around The World In Eighty Days (JPM) (SYSTEM5, set 1) + + + j5ar80a + Around The World In Eighty Days (JPM) (SYSTEM5, set 2) + + + j5ar80b + Around The World In Eighty Days (JPM) (SYSTEM5, set 3) + + + j5ar80c + Around The World In Eighty Days (JPM) (SYSTEM5, set 4) + + + j5ar80cl + Around The World Club (JPM) (SYSTEM5, set 1) + + + j5ar80cla + Around The World Club (JPM) (SYSTEM5, set 2) + + + j5ar80clb + Around The World Club (JPM) (SYSTEM5, set 3) + + + j5ar80clc + Around The World Club (JPM) (SYSTEM5, set 4) + + + j5ar80d + Around The World In Eighty Days (JPM) (SYSTEM5, set 5) + + + j5buc + Buccaneer (JPM) (SYSTEM5) + + + j5cir + Circus (JPM) (SYSTEM5, set 1) + + + j5cira + Circus (JPM) (SYSTEM5, set 2) + + + j5cirb + Circus (JPM) (SYSTEM5, set 3) + + + j5circ + Circus (JPM) (SYSTEM5, set 4) + + + j5cird + Circus (JPM) (SYSTEM5, set 5) + + + j5cire + Circus (JPM) (SYSTEM5, set 6) + + + j5clbnud + Club Nudger (JPM) (SYSTEM5-SAA, set 1) + + + j5clbnuda + Club Nudger (JPM) (SYSTEM5-SAA, set 2) + + + j5daycls + Daytona Classic (JPM) (SYSTEM5, set 1) + + + j5dayclsa + Daytona Classic (JPM) (SYSTEM5, set 2) + + + j5daytn + Daytona (JPM) (SYSTEM5, set 1) + + + j5daytna + Daytona (JPM) (SYSTEM5, set 2) + + + j5dirty + Dirty Dozen (JPM) (SYSTEM5, set 1) + + + j5dirtya + Dirty Dozen (JPM) (SYSTEM5, set 2) + + + j5dirtyb + Dirty Dozen (JPM) (SYSTEM5, set 3) + + + j5dirtyc + Dirty Dozen (JPM) (SYSTEM5, set 4) + + + j5fair + Fairground (JPM) (SYSTEM5, set 1) + + + j5faira + Fairground (JPM) (SYSTEM5, set 2) + + + j5fairb + Fairground (JPM) (SYSTEM5, set 3) + + + j5fairc + Fairground (JPM) (SYSTEM5, set 4) + + + j5faird + Fairground (JPM) (SYSTEM5, set 5) + + + j5faire + Fairground (JPM) (SYSTEM5, set 6) + + + j5fairf + Fairground (JPM) (SYSTEM5, set 7) + + + j5fairg + Fairground (JPM) (SYSTEM5, set 8) + + + j5fairgd + Fairground Attraction Club (JPM) (SYSTEM5, set 1) + + + j5fairgda + Fairground Attraction Club (JPM) (SYSTEM5, set 2) + + + j5fairgdb + Fairground Attraction Club (JPM) (SYSTEM5, set 3) + + + j5fairgdc + Fairground Attraction Club (JPM) (SYSTEM5, set 4) + + + j5fairgdd + Fairground Attraction Club (JPM) (SYSTEM5, set 5) + + + j5fairgde + Fairground Attraction Club (JPM) (SYSTEM5, set 6) + + + j5fairh + Fairground (JPM) (SYSTEM5, set 9) + + + j5fairi + Fairground (JPM) (SYSTEM5, set 10) + + + j5fairj + Fairground (JPM) (SYSTEM5, set 11) + + + j5fairk + Fairground (JPM) (SYSTEM5, set 12) + + + j5fairl + Fairground (JPM) (SYSTEM5, set 13) + + + j5fairm + Fairground (JPM) (SYSTEM5, set 14) + + + j5fairn + Fairground (JPM) (SYSTEM5, set 15) + + + j5fairo + Fairground (JPM) (SYSTEM5, set 16) + + + j5fairp + Fairground (JPM) (SYSTEM5, set 17) + + + j5fairq + Fairground (JPM) (SYSTEM5, set 18) + + + j5fifth + 5th Avenue (JPM) (SYSTEM5-SAA) + + + j5filth + Filthy Rich (JPM) (SYSTEM5, set 1) + + + j5filtha + Filthy Rich (JPM) (SYSTEM5, set 2) + + + j5filthb + Filthy Rich (JPM) (SYSTEM5, set 3) + + + j5filthc + Filthy Rich (JPM) (SYSTEM5, set 4) + + + j5filthd + Filthy Rich (JPM) (SYSTEM5, set 5) + + + j5filthe + Filthy Rich (JPM) (SYSTEM5, set 6) + + + j5filthf + Filthy Rich (JPM) (SYSTEM5, set 7) + + + j5filthg + Filthy Rich (JPM) (SYSTEM5, set 8) + + + j5filthh + Filthy Rich (JPM) (SYSTEM5, set 9) + + + j5filthi + Filthy Rich (JPM) (SYSTEM5, set 10) + + + j5filthj + Filthy Rich (JPM) (SYSTEM5, set 11) + + + j5firebl + Fireball (JPM) (SYSTEM5-SAA, set 1) + + + j5firebla + Fireball (JPM) (SYSTEM5-SAA, set 2) + + + j5fireblb + Fireball (JPM) (SYSTEM5-SAA, set 3) + + + j5frmag + Fruit Magic (JPM) (SYSTEM5-SAA) + + + j5goldbr + Golden Bars (JPM) (SYSTEM5-SAA) + + + j5hagar + Hagar (JPM) (SYSTEM5, set 1) + + + j5hagara + Hagar (JPM) (SYSTEM5, set 2) + + + j5hagarb + Hagar (JPM) (SYSTEM5, set 3) + + + j5hagarc + Hagar (JPM) (SYSTEM5, set 4) + + + j5hagard + Hagar (JPM) (SYSTEM5, set 5) + + + j5hagare + Hagar (JPM) (SYSTEM5, set 6) + + + j5hagarf + Hagar (JPM) (SYSTEM5, set 7) + + + j5hagarg + Hagar (JPM) (SYSTEM5, set 8) + + + j5hagarh + Hagar (JPM) (SYSTEM5, set 9) + + + j5hagari + Hagar (JPM) (SYSTEM5, set 10) + + + j5hagarj + Hagar (JPM) (SYSTEM5, set 11) + + + j5hagsho + Hagar Showcase (JPM) (SYSTEM5, set 1) + + + j5hagshoa + Hagar Showcase (JPM) (SYSTEM5, set 2) + + + j5hagshob + Hagar Showcase (JPM) (SYSTEM5, set 3) + + + j5hagshoc + Hagar Showcase (JPM) (SYSTEM5, set 4) + + + j5hilos + Hi Lo Silver (JPM) (SYSTEM5) + + + j5holly + Hollywood Nights (JPM) (SYSTEM5, set 1) + + + j5hollya + Hollywood Nights (JPM) (SYSTEM5, set 2) + + + j5hollyb + Hollywood Nights (JPM) (SYSTEM5, set 3) + + + j5hollyc + Hollywood Nights (JPM) (SYSTEM5, set 4) + + + j5hollyd + Hollywood Nights (JPM) (SYSTEM5, set 5) + + + j5hollye + Hollywood Nights (JPM) (SYSTEM5, set 6) + + + j5hotdog + Hot Dogs (JPM) (SYSTEM5, set 1) + + + j5hotdoga + Hot Dogs (JPM) (SYSTEM5, set 2) + + + j5indsum + Indian Summer (JPM) (SYSTEM5) + + + j5intr + Intrigue (JPM) (SYSTEM5, set 1) + + + j5intra + Intrigue (JPM) (SYSTEM5, set 2) + + + j5intrb + Intrigue (JPM) (SYSTEM5, set 3) + + + j5intrc + Intrigue (JPM) (SYSTEM5, set 4) + + + j5jokgld + Jokers Gold (JPM) (SYSTEM5, set 1) + + + j5jokglda + Jokers Gold (JPM) (SYSTEM5, set 2) + + + j5jokgldb + Jokers Gold (JPM) (SYSTEM5, set 3) + + + j5jokgldc + Jokers Gold (JPM) (SYSTEM5, set 4) + + + j5jokgldd + Jokers Gold (JPM) (SYSTEM5, set 5) + + + j5jokglde + Jokers Gold (JPM) (SYSTEM5, set 6) + + + j5jokgldf + Jokers Gold (JPM) (SYSTEM5, set 7) + + + j5jokgldg + Jokers Gold (JPM) (SYSTEM5, set 8) + + + j5jokgldh + Jokers Gold (JPM) (SYSTEM5, set 9) + + + j5movie + Movie Magic Club (Crystal) (SYSTEM5) + + + j5nite + Nite Club (JPM) (SYSTEM5, set 1) + + + j5nitea + Nite Club (JPM) (SYSTEM5, set 2) + + + j5nudfic + Nudge Fiction (JPM) (SYSTEM5) + + + j5palm + Palm Springs (JPM) (SYSTEM5, set 1) + + + j5palma + Palm Springs (JPM) (SYSTEM5, set 2) + + + j5phnx + Phoenix (JPM) (SYSTEM5, set 1) + + + j5phnxa + Phoenix (JPM) (SYSTEM5, set 2) + + + j5popeye + Popeye (JPM) (SYSTEM5, set 1) + + + j5popeyea + Popeye (JPM) (SYSTEM5, set 2) + + + j5popeyeb + Popeye (JPM) (SYSTEM5, set 3) + + + j5popeyec + Popeye (JPM) (SYSTEM5, set 4) + + + j5popeyed + Popeye (JPM) (SYSTEM5, set 5) + + + j5popeyee + Popeye (JPM) (SYSTEM5, set 6) + + + j5popeyef + Popeye (JPM) (SYSTEM5, set 7) + + + j5popeyeg + Popeye (JPM) (SYSTEM5, set 8) + + + j5popeyeh + Popeye (JPM) (SYSTEM5, set 9) + + + j5popeyei + Popeye (JPM) (SYSTEM5, set 10) + + + j5popprz + Prize Popeye Vending (JPM) (SYSTEM5, set 1) + + + j5popprza + Prize Popeye Vending (JPM) (SYSTEM5, set 2) + + + j5popth + Popeye's Treasure Hunt (JPM) (SYSTEM5, set 1) + + + j5poptha + Popeye's Treasure Hunt (JPM) (SYSTEM5, set 2) + + + j5popthb + Popeye's Treasure Hunt (JPM) (SYSTEM5, set 3) + + + j5reelgh + Reel Ghost (JPM) (SYSTEM5-SAA) + + + j5revo + Revolver (JPM) (SYSTEM5, set 1) + + + j5revoa + Revolver (JPM) (SYSTEM5, set 2) + + + j5roul + Roulette (JPM) (SYSTEM5) + + + j5roulcl + Roulette Club (JPM) (SYSTEM5, set 1) + + + j5roulcla + Roulette Club (JPM) (SYSTEM5, set 2) + + + j5roulclb + Roulette Club (JPM) (SYSTEM5, set 3) + + + j5roulclc + Roulette Club (JPM) (SYSTEM5, set 4) + + + j5sizl + Sizzling (JPM) (SYSTEM5) + + + j5slvree + Silver Reels (JPM) (SYSTEM5, set 1) + + + j5slvreea + Silver Reels (JPM) (SYSTEM5, set 2) + + + j5slvstr + Silver Streak (JPM) (SYSTEM5, set 1) + + + j5slvstra + Silver Streak (JPM) (SYSTEM5, set 2) + + + j5slvstrb + Silver Streak (JPM) (SYSTEM5, set 3) + + + j5street + Streetwise (JPM) (SYSTEM5) + + + j5sup4 + Super 4 (JPM) (SYSTEM5-SAA) + + + j5supbar + Super Bars (JPM) (SYSTEM5, set 1) + + + j5supbara + Super Bars (JPM) (SYSTEM5, set 2) + + + j5suphi + Super Hi-Lo (JPM) (SYSTEM5-SAA) + + + j5swop + Swop A Fruit Club (JPM) (SYSTEM5-SAA) + + + j5td + Tumbling Dice (JPM) (SYSTEM5-SAA) + + + j5term + Terminator (JPM) (SYSTEM5) + + + j5topshp + Top Of The Shop Club (JPM) (SYSTEM5) + + + j5trail + Trailblazer Club (JPM) (SYSTEM5, set 1) + + + j5traila + Trailblazer Club (JPM) (SYSTEM5, set 2) + + + j5trailb + Trailblazer Club (JPM) (SYSTEM5, set 3) + + + j5tst1 + JPM System 5 Test Set (JPM) (SYSTEM5, set 1) + + + j5tst2 + JPM System 5 Test Set (JPM) (SYSTEM5, set 2) + + + j5tstal + JPM System 5 Alpha Display Test Utility (JPM) (SYSTEM5) + + + j5uj + Union Jackpot (JPM) (SYSTEM5, set 1) + + + j5uja + Union Jackpot (JPM) (SYSTEM5, set 2) + + + j5ujb + Union Jackpot (JPM) (SYSTEM5, set 3) + + + j5wsc + Wall Street Club (JPM) (SYSTEM5, set 1) + + + j5wsca + Wall Street Club (JPM) (SYSTEM5, set 2) + + + j6aceclb + Ace Of Clubs (Crystal) (IMPACT, set 1) + + + j6aceclba + Ace Of Clubs (Crystal) (IMPACT, set 2) + + + j6acehi + Aces High (Ace) (IMPACT) + + + j6amdrm + American Dream (Mdm) (IMPACT) + + + j6arcade + Arcadia (JPM) (IMPACT) (V9, set 1) + + + j6arcadea + Arcadia (JPM) (IMPACT) (V9, set 2) + + + j6arcadeb + Arcadia (JPM) (IMPACT) (V9, set 3) + + + j6arcadec + Arcadia (JPM) (IMPACT) (V9, set 4) + + + j6arcaded + Arcadia (JPM) (IMPACT) (V9, set 5) + + + j6arcadee + Arcadia (JPM) (IMPACT) (V10, set 1) + + + j6arcadef + Arcadia (JPM) (IMPACT) (V10, set 2) + + + j6arcadeg + Arcadia (JPM) (IMPACT) (V10, set 3) + + + j6arcadeh + Arcadia (JPM) (IMPACT) (V10, set 4) + + + j6arcadei + Arcadia (JPM) (IMPACT) (V10, set 5) + + + j6arcadej + Arcadia (JPM) (IMPACT) (V10, set 6) + + + j6arcadek + Arcadia (JPM) (IMPACT) (V10, set 7) + + + j6bags + Three Bags Full (JPM) (IMPACT) + + + j6bbankr + Big Banker (Crystal) (IMPACT) (BB 2 T 2) + + + j6big50 + Big 50 (JPM) (IMPACT) (set 1) + + + j6big50a + Big 50 (JPM) (IMPACT) (set 2) + + + j6big50b + Big 50 (JPM) (IMPACT) (set 3) + + + j6big50c + Big 50 (JPM) (IMPACT) (set 4) + + + j6big50d + Big 50 (JPM) (IMPACT) (set 5) + + + j6bigbnk + Big Banker (JPM) (IMPACT) (BB10C 20) (set 1) + + + j6bigbnka + Big Banker (JPM) (IMPACT) (BB10C 20) (set 2) + + + j6bigbnkb + Big Banker (JPM) (IMPACT) (BB10C 20) (set 3) + + + j6bigbnkc + Big Banker (JPM) (IMPACT) (BB10C 20) (set 4) + + + j6bigbnkd + Big Banker (JPM) (IMPACT) (BB8 H18) + + + j6bigbnke + Big Banker (JPM) (IMPACT) (BB8 P H18) + + + j6bigbnkf + Big Banker (JPM) (IMPACT) (BB8 AH18) + + + j6bigbnkg + Big Banker (JPM) (IMPACT) (BB6 C 16) (set 1) + + + j6bigbnkh + Big Banker (JPM) (IMPACT) (BB6 C 16) (set 2) + + + j6bigbnki + Big Banker (JPM) (IMPACT) (BB2B H11) + + + j6bigbnkj + Big Banker (JPM) (IMPACT) (BB2BP H11) + + + j6bigbnkk + Big Banker (JPM) (IMPACT) (BB2B AH11) + + + j6bigbnkl + Big Banker (JPM) (IMPACT) (BB2BI H11) + + + j6bigbnkm + Big Banker (JPM) (IMPACT) (BB2II H08) + + + j6bigbnkn + Big Banker (JPM) (IMPACT) (BB 9C 19) + + + j6bigbnko + Big Banker (JPM) (IMPACT) (BB5 I H15) + + + j6bigbnkp + Big Banker (JPM) (IMPACT) (BB4 I H09) + + + j6bigbuk + Big Bucks (JPM) (IMPACT) (set 1) + + + j6bigbuka + Big Bucks (JPM) (IMPACT) (set 2) + + + j6bigbukb + Big Bucks (JPM) (IMPACT) (set 3) + + + j6bigbukc + Big Bucks (JPM) (IMPACT) (set 4) + + + j6bigbukd + Big Bucks (JPM) (IMPACT) (set 5) + + + j6bigbuke + Big Bucks (JPM) (IMPACT) (set 6) + + + j6bigbukf + Big Bucks (JPM) (IMPACT) (set 7) + + + j6bigbukg + Big Bucks (JPM) (IMPACT) (set 8) + + + j6bigbukh + Big Bucks (JPM) (IMPACT) (set 9) + + + j6bigbuki + Big Bucks (JPM) (IMPACT) (set 10) + + + j6bigbukj + Big Bucks (JPM) (IMPACT) (set 11) + + + j6bigcsh + Big Cash Machine (Empire) (IMPACT) + + + j6bigpct + Big Picture (Ace) (IMPACT) (set 1) + + + j6bigpcta + Big Picture (Ace) (IMPACT) (set 2) + + + j6bigpctb + Big Picture (Ace) (IMPACT) (set 3) + + + j6bigtop + Big Top Club (JPM) (IMPACT) (set 1) + + + j6bigtopa + Big Top Club (JPM) (IMPACT) (set 2) + + + j6bigtopb + Big Top Club (JPM) (IMPACT) (set 3) + + + j6bigtopc + Big Top Club (JPM) (IMPACT) (set 4) + + + j6bigwhl + Big Wheel (JPM) (IMPACT) (set 1) + + + j6bigwhla + Big Wheel (JPM) (IMPACT) (set 2) + + + j6bigwhlb + Big Wheel (JPM) (IMPACT) (set 3) + + + j6bigwhlc + Big Wheel (JPM) (IMPACT) (set 4) + + + j6bigwhld + Big Wheel (JPM) (IMPACT) (set 5) + + + j6bigwhle + Big Wheel (JPM) (IMPACT) (set 6) + + + j6bmc + Big Money Club (Crystal) (IMPACT) (set 1) + + + j6bmca + Big Money Club (Crystal) (IMPACT) (set 2) + + + j6bnkrcl + Banker Club (JPM) (IMPACT) (V6, set 1) + + + j6bnkrcla + Banker Club (JPM) (IMPACT) (V6, set 2) + + + j6bnkrclb + Banker Club (JPM) (IMPACT) (V6, set 3) + + + j6bnkrclc + Banker Club (JPM) (IMPACT) (V2) + + + j6bno + Big Nite Out (Crystal) (IMPACT) (set 1) + + + j6bnoa + Big Nite Out (Crystal) (IMPACT) (set 2) + + + j6bnob + Big Nite Out (Crystal) (IMPACT) (set 3) + + + j6bnoc + Big Nite Out (Crystal) (IMPACT) (set 4) + + + j6bnza + Bonanza (JPM) (IMPACT) (BO1 H06) + + + j6bnzaa + Bonanza (JPM) (IMPACT) (BO1 P H06) + + + j6bnzab + Bonanza (JPM) (IMPACT) (BO1 AH06) + + + j6bnzac + Bonanza (JPM) (IMPACT) (BO1 I H06) + + + j6bnzad + Bonanza (JPM) (IMPACT) (BO 9 14) + + + j6bnzae + Bonanza (JPM) (IMPACT) (BO 9P 14) + + + j6bnzaf + Bonanza (JPM) (IMPACT) (BO 9 A 14) + + + j6bnzag + Bonanza (JPM) (IMPACT) (BO 9I 14) + + + j6bnzah + Bonanza (JPM) (IMPACT) (BO5 H10) + + + j6bnzai + Bonanza (JPM) (IMPACT) (BO5 I H10) + + + j6bnzaj + Bonanza (JPM) (IMPACT) (incomplete pair) + + + j6bnzak + Bonanza (JPM) (IMPACT) (BO06 11) + + + j6brkout + Breakout (JPM) (IMPACT) (set 1) + + + j6brkouta + Breakout (JPM) (IMPACT) (set 2) + + + j6btbw + Born To Be Wild Club (Crystal) (IMPACT) (set 1) + + + j6btbwa + Born To Be Wild Club (Crystal) (IMPACT) (set 2) + + + j6btbwb + Born To Be Wild Club (Crystal) (IMPACT) (set 3) + + + j6btbwc + Born To Be Wild Club (Crystal) (IMPACT) (set 4) + + + j6btbwd + Born To Be Wild Club (Crystal) (IMPACT) (set 5) + + + j6bucks + Bucks Fizz (Ace) (IMPACT) + + + j6camelt + Camelot (JPM) (IMPACT) (set 1) + + + j6camelta + Camelot (JPM) (IMPACT) (set 2) + + + j6cameltb + Camelot (JPM) (IMPACT) (set 3) + + + j6cameltc + Camelot (JPM) (IMPACT) (set 4) + + + j6cameltd + Camelot (JPM) (IMPACT) (set 5) + + + j6cas5 + Casino 5ive Liner (JPM) (IMPACT) (set 1) + + + j6cas5a + Casino 5ive Liner (JPM) (IMPACT) (set 2) + + + j6cas5b + Casino 5ive Liner (JPM) (IMPACT) (set 3) + + + j6cas5c + Casino 5ive Liner (JPM) (IMPACT) (set 4) + + + j6cas5d + Casino 5ive Liner (JPM) (IMPACT) (set 5) + + + j6cas5e + Casino 5ive Liner (JPM) (IMPACT) (set 6) + + + j6cas5f + Casino 5ive Liner (JPM) (IMPACT) (set 7) + + + j6cas5g + Casino 5ive Liner (JPM) (IMPACT) (set 8) + + + j6cas5h + Casino 5ive Liner (JPM) (IMPACT) (set 9) + + + j6cas5i + Casino 5ive Liner (JPM) (IMPACT) (set 10) + + + j6cas5j + Casino 5ive Liner (JPM) (IMPACT) (set 11) + + + j6cas5k + Casino 5ive Liner (JPM) (IMPACT) (set 12) + + + j6cas5l + Casino 5ive Liner (JPM) (IMPACT) (set 13) + + + j6cascla + Casino Crazy Classic Club (JPM) (IMPACT) (set 1) + + + j6casclaa + Casino Crazy Classic Club (JPM) (IMPACT) (set 2) + + + j6casclab + Casino Crazy Classic Club (JPM) (IMPACT) (set 3) + + + j6casclac + Casino Crazy Classic Club (JPM) (IMPACT) (set 4) + + + j6casclad + Casino Crazy Classic Club (JPM) (IMPACT) (set 5) + + + j6casclae + Casino Crazy Classic Club (JPM) (IMPACT) (set 6) + + + j6casclaf + Casino Crazy Classic Club (JPM) (IMPACT) (set 7) + + + j6casclag + Casino Crazy Classic Club (JPM) (IMPACT) (set 8) + + + j6casclah + Casino Crazy Classic Club (JPM) (IMPACT) (set 9) + + + j6casclai + Casino Crazy Classic Club (JPM) (IMPACT) (set 10) + + + j6casclaj + Casino Crazy Classic Club (JPM) (IMPACT) (set 11) + + + j6casclak + Casino Crazy Classic Club (JPM) (IMPACT) (set 12) + + + j6casclal + Casino Crazy Classic Club (JPM) (IMPACT) (set 13) + + + j6casclam + Casino Crazy Classic Club (JPM) (IMPACT) (set 14) + + + j6casclan + Casino Crazy Classic Club (JPM) (IMPACT) (set 15) + + + j6casclao + Casino Crazy Classic Club (JPM) (IMPACT) (set 16) + + + j6casclap + Casino Crazy Classic Club (JPM) (IMPACT) (set 17) + + + j6casclaq + Casino Crazy Classic Club (JPM) (IMPACT) (set 18) + + + j6casclar + Casino Crazy Classic Club (JPM) (IMPACT) (set 19) + + + j6casclas + Casino Crazy Classic Club (JPM) (IMPACT) (set 20) + + + j6casclat + Casino Crazy Classic Club (JPM) (IMPACT) (set 21) + + + j6casclb + Casino Crazy Club (JPM) (IMPACT) (set 1) + + + j6casclba + Casino Crazy Club (JPM) (IMPACT) (set 2) + + + j6cascz + Casino Crazy (JPM) (IMPACT) (set 1) + + + j6cascza + Casino Crazy (JPM) (IMPACT) (set 2) + + + j6casczb + Casino Crazy (JPM) (IMPACT) (set 3) + + + j6casczc + Casino Crazy (JPM) (IMPACT) (set 4) + + + j6casczd + Casino Crazy (JPM) (IMPACT) (set 5) + + + j6cascze + Casino Crazy (JPM) (IMPACT) (set 6) + + + j6casczf + Casino Crazy (JPM) (IMPACT) (set 7) + + + j6casczg + Casino Crazy (JPM) (IMPACT) (set 8) + + + j6casczh + Casino Crazy (JPM) (IMPACT) (set 9) + + + j6casczi + Casino Crazy (JPM) (IMPACT) (set 10) + + + j6casczj + Casino Crazy (JPM) (IMPACT) (set 11) + + + j6casczk + Casino Crazy (JPM) (IMPACT) (set 12) + + + j6casczl + Casino Crazy (JPM) (IMPACT) (set 13) + + + j6casczm + Casino Crazy (JPM) (IMPACT) (set 14) + + + j6caslas + Casino Las Vegas (JPM) (IMPACT) (set 1) + + + j6caslasa + Casino Las Vegas (JPM) (IMPACT) (set 2) + + + j6caslasb + Casino Las Vegas (JPM) (IMPACT) (set 3) + + + j6caslasc + Casino Las Vegas (JPM) (IMPACT) (set 4) + + + j6ccc + Casino Crazy Club (Crystal) (IMPACT) (set 1) + + + j6ccca + Casino Crazy Club (Crystal) (IMPACT) (set 2) + + + j6cccb + Casino Crazy Club (Crystal) (IMPACT) (set 3) + + + j6cccc + Casino Crazy Club (Crystal) (IMPACT) (set 4) + + + j6cccla + Casino Crazy Classic (JPM) (IMPACT) (set 1) + + + j6ccclaa + Casino Crazy Classic (JPM) (IMPACT) (set 2) + + + j6ccclab + Casino Crazy Classic (JPM) (IMPACT) (set 3) + + + j6ccclac + Casino Crazy Classic (JPM) (IMPACT) (set 4) + + + j6ccclad + Casino Crazy Classic (JPM) (IMPACT) (set 5) + + + j6ccclae + Casino Crazy Classic (JPM) (IMPACT) (set 6) + + + j6ccclaf + Casino Crazy Classic (JPM) (IMPACT) (set 7) + + + j6ccclag + Casino Crazy Classic (JPM) (IMPACT) (set 8) + + + j6ccclah + Casino Crazy Classic (JPM) (IMPACT) (set 9) + + + j6ccclai + Casino Crazy Classic (JPM) (IMPACT) (set 10) + + + j6ccclaj + Casino Crazy Classic (JPM) (IMPACT) (set 11) + + + j6ccclak + Casino Crazy Classic (JPM) (IMPACT) (set 12) + + + j6cdivr + Cash Diver (Crystal) (IMPACT) + + + j6cheque + Cheque Mate (JPM) (IMPACT) + + + j6cluclb + Cluedo Club (JPM) (IMPACT) (set 1) + + + j6cluclba + Cluedo Club (JPM) (IMPACT) (set 2) + + + j6cluclbb + Cluedo Club (JPM) (IMPACT) (set 3) + + + j6cluclbc + Cluedo Club (JPM) (IMPACT) (set 4) + + + j6cluclbd + Cluedo Club (JPM) (IMPACT) (set 5) + + + j6cluclbe + Cluedo Club (JPM) (IMPACT) (set 6) + + + j6cluclbf + Cluedo Club (JPM) (IMPACT) (set 7) + + + j6cluclbg + Cluedo Club (JPM) (IMPACT) (set 8) + + + j6cluclbh + Cluedo Club (JPM) (IMPACT) (set 9) + + + j6cluclbi + Cluedo Club (JPM) (IMPACT) (set 10) + + + j6cluclbj + Cluedo Club (JPM) (IMPACT) (set 11) + + + j6cluclbk + Cluedo Club (JPM) (IMPACT) (set 12) + + + j6cluclbl + Cluedo Club (JPM) (IMPACT) (set 13) + + + j6col + Coliseum (Mdm) (IMPACT) (set 1) + + + j6cola + Coliseum (Mdm) (IMPACT) (set 2) + + + j6colb + Coliseum (Mdm) (IMPACT) (set 3) + + + j6colc + Coliseum (Mdm) (IMPACT) (set 4) + + + j6colcsh + Coliseum Cash (JPM) (IMPACT) (set 1) + + + j6colcsha + Coliseum Cash (JPM) (IMPACT) (set 2) + + + j6colcshb + Coliseum Cash (JPM) (IMPACT) (set 3) + + + j6colcshc + Coliseum Cash (JPM) (IMPACT) (set 4) + + + j6colcshd + Coliseum Cash (JPM) (IMPACT) (set 5) + + + j6cold + Coliseum (Mdm) (IMPACT) (set 5) + + + j6cole + Coliseum (Mdm) (IMPACT) (set 6) + + + j6colf + Coliseum (Mdm) (IMPACT) (set 7) + + + j6colic + Coliseum (Crystal) (IMPACT) (set 1) + + + j6colica + Coliseum (Crystal) (IMPACT) (set 2) + + + j6colicb + Coliseum (Crystal) (IMPACT) (set 3) + + + j6colicc + Coliseum (Crystal) (IMPACT) (set 4) + + + j6colicd + Coliseum (Crystal) (IMPACT) (set 5) + + + j6colmon + Colour Of Money (JPM) (IMPACT) (set 1) + + + j6colmona + Colour Of Money (JPM) (IMPACT) (set 2) + + + j6colmonb + Colour Of Money (JPM) (IMPACT) (set 3) + + + j6colmonc + Colour Of Money (JPM) (IMPACT) (set 4) + + + j6colmond + Colour Of Money (JPM) (IMPACT) (set 5) + + + j6colmone + Colour Of Money (JPM) (IMPACT) (set 6) + + + j6colmonf + Colour Of Money (JPM) (IMPACT) (set 7) + + + j6colmong + Colour Of Money (JPM) (IMPACT) (set 8) + + + j6colmonh + Colour Of Money (JPM) (IMPACT) (set 9) + + + j6colmoni + Colour Of Money (JPM) (IMPACT) (set 10) + + + j6colmonj + Colour Of Money (JPM) (IMPACT) (set 11) + + + j6coprob + Cops 'n' Robbers (Qps) (IMPACT) (set 1) + + + j6coproba + Cops 'n' Robbers (Qps) (IMPACT) (set 2) + + + j6coprobb + Cops 'n' Robbers (Qps) (IMPACT) (set 3) + + + j6coprobc + Cops 'n' Robbers (Qps) (IMPACT) (set 4) + + + j6coprobd + Cops 'n' Robbers (Qps) (IMPACT) (set 5) + + + j6coprobe + Cops 'n' Robbers (Qps) (IMPACT) (set 6) + + + j6cpal + Caesars Palace (Whitbread / Crystal) (IMPACT) (set 1) + + + j6cpala + Caesars Palace (Whitbread / Crystal) (IMPACT) (set 2) + + + j6cpalb + Caesars Palace (Whitbread / Crystal) (IMPACT) (set 3) + + + j6cpalc + Caesars Palace (Whitbread / Crystal) (IMPACT) (set 4) + + + j6cpald + Caesars Palace (Whitbread / Crystal) (IMPACT) (set 5) + + + j6cpale + Caesars Palace (Whitbread / Crystal) (IMPACT) (set 6) + + + j6cpalf + Caesars Palace (Whitbread / Crystal) (IMPACT) (set 7) + + + j6cpalg + Caesars Palace (Whitbread / Crystal) (IMPACT) (set 8) + + + j6cpclb + Caesar's Palace Club (JPM) (IMPACT) (set 1) + + + j6cpclba + Caesar's Palace Club (JPM) (IMPACT) (set 2) + + + j6cpclbb + Caesar's Palace Club (JPM) (IMPACT) (set 3) + + + j6crack + Cracker (JPM) (IMPACT) (set 1) + + + j6cracka + Cracker (JPM) (IMPACT) (set 2) + + + j6crackb + Cracker (JPM) (IMPACT) (set 3) + + + j6crackc + Cracker (JPM) (IMPACT) (set 4) + + + j6crackd + Cracker (JPM) (IMPACT) (set 5) + + + j6cracke + Cracker (JPM) (IMPACT) (set 6) + + + j6crackf + Cracker (JPM) (IMPACT) (set 7) + + + j6crackg + Cracker (JPM) (IMPACT) (set 8) + + + j6crackh + Cracker (JPM) (IMPACT) (set 9) + + + j6cracki + Cracker (JPM) (IMPACT) (set 10) + + + j6crackj + Cracker (JPM) (IMPACT) (set 11) + + + j6crakr + Cracker (Crystal) (IMPACT) (set 1) + + + j6crakra + Cracker (Crystal) (IMPACT) (set 2) + + + j6crakrb + Cracker (Crystal) (IMPACT) (set 3) + + + j6crsfir + Cross Fire (JPM) (IMPACT) (set 1) + + + j6crsfira + Cross Fire (JPM) (IMPACT) (set 2) + + + j6crzclb + Crazy Club (JPM) (IMPACT) (set 1) + + + j6crzclba + Crazy Club (JPM) (IMPACT) (set 2) + + + j6crzclbb + Crazy Club (JPM) (IMPACT) (set 3) + + + j6crzclbc + Crazy Club (JPM) (IMPACT) (set 4) + + + j6cshbeu + Cash Box Club (Empire) (Euro) (IMPACT) + + + j6cshbox + Cash Box Club (Empire) (IMPACT) (set 1) + + + j6cshboxa + Cash Box Club (Empire) (IMPACT) (set 2) + + + j6cshboxb + Cash Box Club (Empire) (IMPACT) (set 3) + + + j6cshbst + Cash Buster (JPM) (IMPACT) (set 1) + + + j6cshbsta + Cash Buster (JPM) (IMPACT) (set 2) + + + j6cshbstb + Cash Buster (JPM) (IMPACT) (set 3) + + + j6cshbstc + Cash Buster (JPM) (IMPACT) (set 4) + + + j6cshbstd + Cash Buster (JPM) (IMPACT) (set 5) + + + j6cshcnt + Cash Countdown (JPM) (IMPACT) (set 1) + + + j6cshcnta + Cash Countdown (JPM) (IMPACT) (set 2) + + + j6cshrd + Cash Raider (Ace) (IMPACT) (set 1) + + + j6cshrda + Cash Raider (Ace) (IMPACT) (set 2) + + + j6cshrdb + Cash Raider (Ace) (IMPACT) (set 3) + + + j6cshrdc + Cash Raider (Ace) (IMPACT) (set 4) + + + j6cshrdd + Cash Raider (Ace) (IMPACT) (set 5) + + + j6cshtwr + Cash Towers (JPM) (IMPACT) + + + j6cshvgs + Cash Vegas Strip (JPM) (IMPACT) (set 1) + + + j6cshvgsa + Cash Vegas Strip (JPM) (IMPACT) (set 2) + + + j6cshvgsb + Cash Vegas Strip (JPM) (IMPACT) (set 3) + + + j6cshvgsc + Cash Vegas Strip (JPM) (IMPACT) (set 4) + + + j6cshvgsd + Cash Vegas Strip (JPM) (IMPACT) (set 5) + + + j6cshvgse + Cash Vegas Strip (JPM) (IMPACT) (set 6) + + + j6cshvgsf + Cash Vegas Strip (JPM) (IMPACT) (set 7) + + + j6cshvgsg + Cash Vegas Strip (JPM) (IMPACT) (set 8) + + + j6cshvgsh + Cash Vegas Strip (JPM) (IMPACT) (set 9) + + + j6cshvgsi + Cash Vegas Strip (JPM) (IMPACT) (set 10) + + + j6cshvgsj + Cash Vegas Strip (JPM) (IMPACT) (set 11) + + + j6cshvgsk + Cash Vegas Strip (JPM) (IMPACT) (set 12) + + + j6cshvgsl + Cash Vegas Strip (JPM) (IMPACT) (set 13) + + + j6cshvgsm + Cash Vegas Strip (JPM) (IMPACT) (set 14) + + + j6cshvgsn + Cash Vegas Strip (JPM) (IMPACT) (set 15) + + + j6cshvgso + Cash Vegas Strip (JPM) (IMPACT) (set 16) + + + j6cshvgsp + Cash Vegas Strip (JPM) (IMPACT) (set 17) + + + j6cshvgsq + Cash Vegas Strip (JPM) (IMPACT) (set 18) + + + j6cshvgsr + Cash Vegas Strip (JPM) (IMPACT) (set 19) + + + j6daygld + Daytona Gold (JPM) (IMPACT) (set 1) + + + j6dayglda + Daytona Gold (JPM) (IMPACT) (set 2) + + + j6daygldb + Daytona Gold (JPM) (IMPACT) (set 3) + + + j6daygldc + Daytona Gold (JPM) (IMPACT) (set 4) + + + j6daygldd + Daytona Gold (JPM) (IMPACT) (set 5) + + + j6dayglde + Daytona Gold (JPM) (IMPACT) (set 6) + + + j6dayml + Daytona Millennium (JPM) (IMPACT) (set 1) + + + j6daymla + Daytona Millennium (JPM) (IMPACT) (set 2) + + + j6daymlb + Daytona Millennium (JPM) (IMPACT) (set 3) + + + j6dmngz + Diamond Geezer (JPM) (IMPACT) + + + j6dmnjkr + Demon Jokers (JPM) (IMPACT) (set 1) + + + j6dmnjkra + Demon Jokers (JPM) (IMPACT) (set 2) + + + j6dmnjkrb + Demon Jokers (JPM) (IMPACT) (set 3) + + + j6dmnjkrc + Demon Jokers (JPM) (IMPACT) (set 4) + + + j6drdogh + Dr Dough (Qps) (IMPACT) + + + j6dyfl + Do You Feel Lucky (JPM) (IMPACT) (set 1) + + + j6dyfla + Do You Feel Lucky (JPM) (IMPACT) (set 2) + + + j6dyflb + Do You Feel Lucky (JPM) (IMPACT) (set 3) + + + j6dyflc + Do You Feel Lucky (JPM) (IMPACT) (set 4) + + + j6dyfld + Do You Feel Lucky (JPM) (IMPACT) (set 5) + + + j6dyfle + Do You Feel Lucky (JPM) (IMPACT) (set 6) + + + j6dyflf + Do You Feel Lucky (JPM) (IMPACT) (set 7) + + + j6dyflg + Do You Feel Lucky (JPM) (IMPACT) (set 8) + + + j6dyflh + Do You Feel Lucky (JPM) (IMPACT) (set 9) + + + j6dyfli + Do You Feel Lucky (JPM) (IMPACT) (set 10) + + + j6dyflj + Do You Feel Lucky (JPM) (IMPACT) (set 11) + + + j6easy + Easy Money (Crystal) (IMPACT) (set 1) + + + j6easya + Easy Money (Crystal) (IMPACT) (set 2) + + + j6easyb + Easy Money (Crystal) (IMPACT) (set 3) + + + j6easyc + Easy Money (Crystal) (IMPACT) (set 4) + + + j6euphor + Euphoria (Ace) (IMPACT) (set 1) + + + j6euphora + Euphoria (Ace) (IMPACT) (set 2) + + + j6euphorb + Euphoria (Ace) (IMPACT) (set 3) + + + j6euphorc + Euphoria (Ace) (IMPACT) (set 4) + + + j6euphord + Euphoria (Ace) (IMPACT) (set 5) + + + j6euphore + Euphoria (Ace) (IMPACT) (set 6) + + + j6euphorf + Euphoria (Ace) (IMPACT) (set 7) + + + j6ewn + Each Way Nudger (JPM) (IMPACT) + + + j6ewndg + Each Way Nudger (Crystal) (IMPACT) (set 1) + + + j6ewndga + Each Way Nudger (Crystal) (IMPACT) (set 2) + + + j6ewndgb + Each Way Nudger (Crystal) (IMPACT) (set 3) + + + j6fastfr + Fast Fruits Club (Qps) (IMPACT) (set 1) + + + j6fastfra + Fast Fruits Club (Qps) (IMPACT) (set 2) + + + j6fasttk + Fast Trak (JPM) (IMPACT) (set 1) + + + j6fasttka + Fast Trak (JPM) (IMPACT) (set 2) + + + j6fasttkb + Fast Trak (JPM) (IMPACT) (set 3) + + + j6fasttkc + Fast Trak (JPM) (IMPACT) (set 4) + + + j6fbcrz + Football Crazy (JPM) (IMPACT) + + + j6ffc + Frame & Fortune Club (Crystal) (IMPACT) (set 1) + + + j6ffca + Frame & Fortune Club (Crystal) (IMPACT) (set 2) + + + j6ffcb + Frame & Fortune Club (Crystal) (IMPACT) (set 3) + + + j6ffcc + Frame & Fortune Club (Crystal) (IMPACT) (set 4) + + + j6ffcd + Frame & Fortune Club (Crystal) (IMPACT) (set 5) + + + j6ffce + Frame & Fortune Club (Crystal) (IMPACT) (set 6) + + + j6fifth + 5th Dimension (Ace) (IMPACT) + + + j6filth + Filthy Rich Club (JPM) (IMPACT) (set 1) + + + j6filtha + Filthy Rich Club (JPM) (IMPACT) (set 2) + + + j6filthb + Filthy Rich Club (JPM) (IMPACT) (set 3) + + + j6filthc + Filthy Rich Club (JPM) (IMPACT) (set 4) + + + j6firbl + Fireball (JPM) (IMPACT) (set 1) + + + j6firbla + Fireball (JPM) (IMPACT) (set 2) + + + j6firblb + Fireball (JPM) (IMPACT) (set 3) + + + j6firblc + Fireball (JPM) (IMPACT) (set 4) + + + j6firbld + Fireball (JPM) (IMPACT) (set 5) + + + j6firclb + Firecracker Club (JPM) (IMPACT) (set 1) + + + j6firclba + Firecracker Club (JPM) (IMPACT) (set 2) + + + j6firclbb + Firecracker Club (JPM) (IMPACT) (set 3) + + + j6firclbc + Firecracker Club (JPM) (IMPACT) (set 4) + + + j6fireck + Firecracker (JPM) (IMPACT) (set 1) + + + j6firecka + Firecracker (JPM) (IMPACT) (set 2) + + + j6fireckb + Firecracker (JPM) (IMPACT) (set 3) + + + j6fireckc + Firecracker (JPM) (IMPACT) (set 4) + + + j6fireckd + Firecracker (JPM) (IMPACT) (set 5) + + + j6firecke + Firecracker (JPM) (IMPACT) (set 6) + + + j6fivalv + Five Alive Club (JPM) (IMPACT) (set 1) + + + j6fivalva + Five Alive Club (JPM) (IMPACT) (set 2) + + + j6fivalvb + Five Alive Club (JPM) (IMPACT) (set 3) + + + j6fiveln + Five Liner (JPM) (IMPACT) (set 1) + + + j6fivelna + Five Liner (JPM) (IMPACT) (set 2) + + + j6fivelnb + Five Liner (JPM) (IMPACT) (set 3) + + + j6fivelnc + Five Liner (JPM) (IMPACT) (set 4) + + + j6footy + Football Fever (Empire) (IMPACT) (set 1) + + + j6footya + Football Fever (Empire) (IMPACT) (set 2) + + + j6footyb + Football Fever (Empire) (IMPACT) (set 3) + + + j6framft + Frame & Fortune Club (JPM) (IMPACT) + + + j6frc10 + Force 10 (JPM) (IMPACT) (set 1) + + + j6frc10a + Force 10 (JPM) (IMPACT) (set 2) + + + j6frc10b + Force 10 (JPM) (IMPACT) (set 3) + + + j6frc10c + Force 10 (JPM) (IMPACT) (set 4) + + + j6frc10d + Force 10 (JPM) (IMPACT) (set 5) + + + j6frtmch + The Fruit Machine (JPM) (IMPACT) + + + j6frtpot + Fruitpots (Qps) (IMPACT) (set 1) + + + j6frtpota + Fruitpots (Qps) (IMPACT) (set 2) + + + j6frtpotb + Fruitpots (Qps) (IMPACT) (set 3) + + + j6frtpotc + Fruitpots (Qps) (IMPACT) (set 4) + + + j6gforce + G Force (JPM) (IMPACT) (set 1) + + + j6gforcea + G Force (JPM) (IMPACT) (set 2) + + + j6gforceb + G Force (JPM) (IMPACT) (set 3) + + + j6gforcec + G Force (JPM) (IMPACT) (set 4) + + + j6gforced + G Force (JPM) (IMPACT) (15GBP Jackpot) + + + j6gidogh + G.I. Dough (Ace) (IMPACT) + + + j6gldclb + Gladiator Club (JPM) (IMPACT) (set 1) + + + j6gldclba + Gladiator Club (JPM) (IMPACT) (set 2) + + + j6gldclbb + Gladiator Club (JPM) (IMPACT) (set 3) + + + j6gldmin + Gold Mine (Empire) (IMPACT) + + + j6gldpl + Golden Palace (Qps) (IMPACT) + + + j6gogold + Go For Gold (JPM) (IMPACT) (set 1) + + + j6gogolda + Go For Gold (JPM) (IMPACT) (set 2) + + + j6gogoldb + Go For Gold (JPM) (IMPACT) (set 3) + + + j6gogoldc + Go For Gold (JPM) (IMPACT) (set 4) + + + j6golddm + Golden Demons (JPM) (IMPACT) (set 1) + + + j6golddma + Golden Demons (JPM) (IMPACT) (set 2) + + + j6goldgl + Golden Goal (JPM) (IMPACT) (set 1) + + + j6goldgla + Golden Goal (JPM) (IMPACT) (set 2) + + + j6goldglb + Golden Goal (JPM) (IMPACT) (set 3) + + + j6goldglc + Golden Goal (JPM) (IMPACT) (set 4) + + + j6goldgld + Golden Goal (JPM) (IMPACT) (set 5) + + + j6goldgle + Golden Goal (JPM) (IMPACT) (set 6) + + + j6goldglf + Golden Goal (JPM) (IMPACT) (set 7) + + + j6goldglg + Golden Goal (JPM) (IMPACT) (set 8) + + + j6goldglh + Golden Goal (JPM) (IMPACT) (set 9) + + + j6goldgli + Golden Goal (JPM) (IMPACT) (set 10) + + + j6goldglj + Golden Goal (JPM) (IMPACT) (set 11) + + + j6goldglk + Golden Goal (JPM) (IMPACT) (set 12) + + + j6goldgll + Golden Goal (JPM) (IMPACT) (set 13) + + + j6grc + Gold Rush Club (Crystal) (IMPACT) (set 1) + + + j6grca + Gold Rush Club (Crystal) (IMPACT) (set 2) + + + j6guab + Give Us A Break (JPM) (IMPACT) (set 1) + + + j6guaba + Give Us A Break (JPM) (IMPACT) (set 2) + + + j6guabb + Give Us A Break (JPM) (IMPACT) (set 3) + + + j6guabc + Give Us A Break (JPM) (IMPACT) (set 4) + + + j6guabcl + Give Us A Break Club (JPM) (IMPACT) (set 1) + + + j6guabcla + Give Us A Break Club (JPM) (IMPACT) (set 2) + + + j6guabd + Give Us A Break (JPM) (IMPACT) (set 5) + + + j6guabe + Give Us A Break (JPM) (IMPACT) (set 6) + + + j6guabf + Give Us A Break (JPM) (IMPACT) (set 7) + + + j6h5clb + High Five Club (JPM) (IMPACT) (set 1) + + + j6h5clba + High Five Club (JPM) (IMPACT) (set 2) + + + j6hapyhr + Happy Hour (JPM) (IMPACT) (set 1) + + + j6hapyhra + Happy Hour (JPM) (IMPACT) (set 2) + + + j6hapyhrb + Happy Hour (JPM) (IMPACT) (set 3) + + + j6hdc + Hot Dogs Club (Crystal) (IMPACT) (set 1) + + + j6hdca + Hot Dogs Club (Crystal) (IMPACT) (set 2) + + + j6hdcb + Hot Dogs Club (Crystal) (IMPACT) (set 3) + + + j6hdcc + Hot Dogs Club (Crystal) (IMPACT) (set 4) + + + j6hdcd + Hot Dogs Club (Crystal) (IMPACT) (set 5) + + + j6hdce + Hot Dogs Club (Crystal) (IMPACT) (set 6) + + + j6hdcf + Hot Dogs Club (Crystal) (IMPACT) (set 7) + + + j6hdcg + Hot Dogs Club (Crystal) (IMPACT) (set 8) + + + j6hifly + Hi Flyer (Crystal) (IMPACT) + + + j6hikar + Hi Karate (Crystal) (IMPACT) (set 1) + + + j6hikara + Hi Karate (Crystal) (IMPACT) (set 2) + + + j6hikarb + Hi Karate (Crystal) (IMPACT) (set 3) + + + j6hilosv + Hi Lo Silver (JPM) (IMPACT) (set 1) + + + j6hilosva + Hi Lo Silver (JPM) (IMPACT) (set 2) + + + j6hilosvb + Hi Lo Silver (JPM) (IMPACT) (set 3) + + + j6hilosvc + Hi Lo Silver (JPM) (IMPACT) (set 4) + + + j6hilosvd + Hi Lo Silver (JPM) (IMPACT) (set 5) + + + j6hilosve + Hi Lo Silver (JPM) (IMPACT) (set 6) + + + j6hiphop + Hip Hopper (Ace) (IMPACT) (set 1) + + + j6hiphopa + Hip Hopper (Ace) (IMPACT) (set 2) + + + j6hiphopb + Hip Hopper (Ace) (IMPACT) (set 3) + + + j6hiphopc + Hip Hopper (Ace) (IMPACT) (set 4) + + + j6hiphopd + Hip Hopper (Ace) (IMPACT) (set 5) + + + j6hirlcl + Hi Roller Club (JPM) (IMPACT) (set 1) + + + j6hirlcla + Hi Roller Club (JPM) (IMPACT) (set 2) + + + j6hirlclb + Hi Roller Club (JPM) (IMPACT) (set 3) + + + j6hirlclc + Hi Roller Club (JPM) (IMPACT) (set 4) + + + j6hirol + Hi Roller (JPM) (IMPACT) (set 1) + + + j6hirola + Hi Roller (JPM) (IMPACT) (set 2) + + + j6hirolb + Hi Roller (JPM) (IMPACT) (set 3) + + + j6hirolc + Hi Roller (JPM) (IMPACT) (set 4) + + + j6hirold + Hi Roller (JPM) (IMPACT) (set 5) + + + j6hisprt + High Spirits (Empire) (IMPACT) (prototype?) + + + j6histk + Hi Stakes (Qps) (IMPACT) (set 1) + + + j6histka + Hi Stakes (Qps) (IMPACT) (set 2) + + + j6hotsht + Hot Shot (Ace) (IMPACT) (set 1) + + + j6hotshta + Hot Shot (Ace) (IMPACT) (set 2) + + + j6hotshtb + Hot Shot (Ace) (IMPACT) (set 3) + + + j6hotshtc + Hot Shot (Ace) (IMPACT) (set 4) + + + j6hotshtd + Hot Shot (Ace) (IMPACT) (set 5) + + + j6hotshte + Hot Shot (Ace) (IMPACT) (set 6) + + + j6hotshtf + Hot Shot (Ace) (IMPACT) (set 7) + + + j6hotshtg + Hot Shot (Ace) (IMPACT) (set 8) + + + j6hotshth + Hot Shot (Ace) (IMPACT) (set 9) + + + j6hotshti + Hot Shot (Ace) (IMPACT) (set 10) + + + j6hotshtj + Hot Shot (Ace) (IMPACT) (set 11) + + + j6hotshtk + Hot Shot (Ace) (IMPACT) (set 12) + + + j6hotshtl + Hot Shot (Ace) (IMPACT) (set 13) + + + j6impact + Hi Impact (JPM) (IMPACT) (set 1) + + + j6impacta + Hi Impact (JPM) (IMPACT) (set 2) + + + j6impactb + Hi Impact (JPM) (IMPACT) (set 3) + + + j6impactc + Hi Impact (JPM) (IMPACT) (15GBP Jackpot) + + + j6impls + Impulse (Crystal) (IMPACT) + + + j6impuls + Impulse (JPM) (IMPACT) (set 1) + + + j6impulsa + Impulse (JPM) (IMPACT) (set 2) + + + j6impulsb + Impulse (JPM) (IMPACT) (set 3) + + + j6impulsc + Impulse (JPM) (IMPACT) (set 4) + + + j6impulsd + Impulse (JPM) (IMPACT) (set 5) + + + j6impulse + Impulse (JPM) (IMPACT) (set 6) + + + j6impulsf + Impulse (JPM) (IMPACT) (set 7) + + + j6indy + Indiana Jones (JPM) (IMPACT) (set 1) + + + j6indya + Indiana Jones (JPM) (IMPACT) (set 2) + + + j6indyb + Indiana Jones (JPM) (IMPACT) (set 3) + + + j6indyc + Indiana Jones (JPM) (IMPACT) (set 4) + + + j6indyd + Indiana Jones (JPM) (IMPACT) (set 5) + + + j6indye + Indiana Jones (JPM) (IMPACT) (set 6) + + + j6indyf + Indiana Jones (JPM) (IMPACT) (set 7) + + + j6indyg + Indiana Jones (JPM) (IMPACT) (set 8) + + + j6indyge + Indiana Jones (JPM) (IMPACT, German set 1) + + + j6indyge2 + Indiana Jones (JPM) (IMPACT, German set 2) + + + j6indyh + Indiana Jones (JPM) (IMPACT) (set 9) + + + j6indyi + Indiana Jones (JPM) (IMPACT) (set 10) + + + j6indyj + Indiana Jones (JPM) (IMPACT) (set 11) + + + j6indyk + Indiana Jones (JPM) (IMPACT) (set 12) + + + j6jackjs + Jackpot Justice (Qps) (IMPACT) (set 1) + + + j6jackjsa + Jackpot Justice (Qps) (IMPACT) (set 2) + + + j6jackjsb + Jackpot Justice (Qps) (IMPACT) (set 3) + + + j6jackjsc + Jackpot Justice (Qps) (IMPACT) (set 4) + + + j6jkpldx + Jokers Plus Deluxe (JPM) (IMPACT) (set 1) + + + j6jkpldxa + Jokers Plus Deluxe (JPM) (IMPACT) (set 2) + + + j6jkrgld + Jokers Gold (JPM) (IMPACT) + + + j6jkrpls + Jokers Plus (JPM) (IMPACT) (set 1) + + + j6jkrplsa + Jokers Plus (JPM) (IMPACT) (set 2) + + + j6jkrplsb + Jokers Plus (JPM) (IMPACT) (set 3) + + + j6jkrplsc + Jokers Plus (JPM) (IMPACT) (set 4) + + + j6jkrplsd + Jokers Plus (JPM) (IMPACT) (set 5) + + + j6jkrplse + Jokers Plus (JPM) (IMPACT) (set 6) + + + j6jkwld + Jokers Wild (JPM) (IMPACT) + + + j6jungfv + Jungle Fever (Ace) (IMPACT) + + + j6kamel + Kameleon (JPM) (IMPACT) + + + j6kapang + Kapang! (Crystal) (IMPACT) (set 1) + + + j6kapanga + Kapang! (Crystal) (IMPACT) (set 2) + + + j6kfc + Kung Fu Club (Crystal) (IMPACT) (set 1) + + + j6kfca + Kung Fu Club (Crystal) (IMPACT) (set 2) + + + j6kfcb + Kung Fu Club (Crystal) (IMPACT) (set 3) + + + j6knight + Your Lucky Knight (JPM) (IMPACT) (set 1) + + + j6knighta + Your Lucky Knight (JPM) (IMPACT) (set 2) + + + j6knightb + Your Lucky Knight (JPM) (IMPACT) (set 3) + + + j6knightc + Your Lucky Knight (JPM) (IMPACT) (set 4) + + + j6knightd + Your Lucky Knight (JPM) (IMPACT) (set 5) + + + j6knighte + Your Lucky Knight (JPM) (IMPACT) (set 6) + + + j6kungfu + Kung Fu (Ace) (IMPACT) (set 1) + + + j6kungfua + Kung Fu (Ace) (IMPACT) (set 2) + + + j6kungfub + Kung Fu (Ace) (IMPACT) (set 3) + + + j6kungfuc + Kung Fu (Ace) (IMPACT) (set 4) + + + j6kungfud + Kung Fu (Ace) (IMPACT) (set 5) + + + j6luckla + Lucky Las Vegas (JPM) (IMPACT) (set 1) + + + j6lucklaa + Lucky Las Vegas (JPM) (IMPACT) (set 2) + + + j6lucklab + Lucky Las Vegas (JPM) (IMPACT) (set 3) + + + j6lucklo + Lucky Lottery Club (Crystal) (IMPACT) (set 1) + + + j6luckloa + Lucky Lottery Club (Crystal) (IMPACT) (set 2) + + + j6magcir + Magic Circle Club (JPM) (IMPACT) (set 1) + + + j6magcira + Magic Circle Club (JPM) (IMPACT) (set 2) + + + j6magcirb + Magic Circle Club (JPM) (IMPACT) (set 3) + + + j6magcirc + Magic Circle Club (JPM) (IMPACT) (set 4) + + + j6magcird + Magic Circle Club (JPM) (IMPACT) (set 5) + + + j6mavrk + Maverick (JPM) (IMPACT) (set 1) + + + j6mavrka + Maverick (JPM) (IMPACT) (set 2) + + + j6mavrkb + Maverick (JPM) (IMPACT) (set 3) + + + j6mavrkc + Maverick (JPM) (IMPACT) (set 4) + + + j6mavrkd + Maverick (JPM) (IMPACT) (set 5) + + + j6maxcsh + Maximus Cash (JPM) (IMPACT) + + + j6maxod + Maximum Overdrive (JPM) (IMPACT) (set 1) + + + j6maxoda + Maximum Overdrive (JPM) (IMPACT) (set 2) + + + j6maxodb + Maximum Overdrive (JPM) (IMPACT) (set 3) + + + j6maxodc + Maximum Overdrive (JPM) (IMPACT) (set 4) + + + j6medal + Medallion Job (Qps) (IMPACT) (set 1) + + + j6medala + Medallion Job (Qps) (IMPACT) (set 2) + + + j6medalb + Medallion Job (Qps) (IMPACT) (set 3) + + + j6medalc + Medallion Job (Qps) (IMPACT) (set 4) + + + j6medald + Medallion Job (Qps) (IMPACT) (set 5) + + + j6megbck + Mega Bucks (JPM) (IMPACT) (set 1) + + + j6megbcka + Mega Bucks (JPM) (IMPACT) (set 2) + + + j6megbckb + Mega Bucks (JPM) (IMPACT) (set 3) + + + j6megbckc + Mega Bucks (JPM) (IMPACT) (set 4) + + + j6megbckd + Mega Bucks (JPM) (IMPACT) (set 5) + + + j6milln + Millionaire (JPM) (IMPACT) (set 1) + + + j6millna + Millionaire (JPM) (IMPACT) (set 2) + + + j6monmad + Money Madness (Ace) (IMPACT) + + + j6mono60 + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 1) + + + j6mono60a + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 2) + + + j6mono60b + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 3) + + + j6mono60c + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 4) + + + j6mono60d + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 5) + + + j6mono60e + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 6) + + + j6mono60f + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 7) + + + j6mono60g + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 8) + + + j6mono60h + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 9) + + + j6mono60i + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 10) + + + j6mono60j + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 11) + + + j6mono60k + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 12) + + + j6mono60l + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 13) + + + j6monobn + Monopoly Bingo (JPM) (IMPACT) (set 1) + + + j6monobna + Monopoly Bingo (JPM) (IMPACT) (set 2) + + + j6monobnb + Monopoly Bingo (JPM) (IMPACT) (set 3) + + + j6monst + Monster Cash Club (Crystal) (IMPACT) (set 1) + + + j6monsta + Monster Cash Club (Crystal) (IMPACT) (set 2) + + + j6monstb + Monster Cash Club (Crystal) (IMPACT) (set 3) + + + j6monstc + Monster Cash Club (Crystal) (IMPACT) (set 4) + + + j6monstd + Monster Cash Club (Crystal) (IMPACT) (set 5) + + + j6montlk + Money Talks (JPM) (IMPACT) (set 1) + + + j6montlka + Money Talks (JPM) (IMPACT) (set 2) + + + j6montlkb + Money Talks (JPM) (IMPACT) (set 3) + + + j6montlkc + Money Talks (JPM) (IMPACT) (set 4) + + + j6montlkd + Money Talks (JPM) (IMPACT) (set 5) + + + j6montlke + Money Talks (JPM) (IMPACT) (set 6) + + + j6montlkf + Money Talks (JPM) (IMPACT) (set 7) + + + j6montlkg + Money Talks (JPM) (IMPACT) (set 8) + + + j6montlkh + Money Talks (JPM) (IMPACT) (set 9) + + + j6outlaw + Outlaw (JPM) (IMPACT, v3) + + + j6outlawc + Outlaw (JPM) (IMPACT, Club?) + + + j6outlawd + Outlaw (JPM) (IMPACT, v3) (Protocol) + + + j6oxo + Oxo (JPM) (IMPACT) (set 1) + + + j6oxoa + Oxo (JPM) (IMPACT) (set 2) + + + j6oxob + Oxo (JPM) (IMPACT) (set 3) + + + j6oxobin + Oxo Bingo (JPM) (IMPACT) (set 1) + + + j6oxobina + Oxo Bingo (JPM) (IMPACT) (set 2) + + + j6oxobinb + Oxo Bingo (JPM) (IMPACT) (set 3) + + + j6oxobinc + Oxo Bingo (JPM) (IMPACT) (set 4) + + + j6oxobind + Oxo Bingo (JPM) (IMPACT) (set 5) + + + j6oxobine + Oxo Bingo (JPM) (IMPACT) (set 6) + + + j6oxobinf + Oxo Bingo (JPM) (IMPACT) (set 7) + + + j6oxoc + Oxo (JPM) (IMPACT) (set 4) + + + j6oxod + Oxo (JPM) (IMPACT) (set 5) + + + j6oxoe + Oxo (JPM) (IMPACT) (set 6) + + + j6pacman + Pac Man Plus (Qps) (IMPACT) + + + j6papa + Paparazzi (Empire) (IMPACT) (set 1) + + + j6papaa + Paparazzi (Empire) (IMPACT) (set 2) + + + j6papab + Paparazzi (Empire) (IMPACT) (set 3) + + + j6papac + Paparazzi (Empire) (IMPACT) (set 4) + + + j6papad + Paparazzi (Empire) (IMPACT) (set 5) + + + j6papae + Paparazzi (Empire) (IMPACT) (set 6) + + + j6papaf + Paparazzi (Empire) (IMPACT) (set 7) + + + j6phxgld + Phoenix Gold (JPM) (IMPACT) (set 1) + + + j6phxglda + Phoenix Gold (JPM) (IMPACT) (set 2) + + + j6phxgldb + Phoenix Gold (JPM) (IMPACT) (set 3) + + + j6phxgldc + Phoenix Gold (JPM) (IMPACT) (set 4) + + + j6phxgldd + Phoenix Gold (JPM) (IMPACT) (set 5) + + + j6phxglde + Phoenix Gold (JPM) (IMPACT) (set 6) + + + j6phxgldf + Phoenix Gold (JPM) (IMPACT) (set 7) + + + j6phxgldg + Phoenix Gold (JPM) (IMPACT) (set 8) + + + j6pinfvr + Pinball Fever (Crystal) (IMPACT) + + + j6pinwzc + Pinball Wizard (Crystal) (IMPACT) (set 1) + + + j6pinwzca + Pinball Wizard (Crystal) (IMPACT) (set 2) + + + j6pinwzcb + Pinball Wizard (Crystal) (IMPACT) (set 3) + + + j6pinwzd + Pinball Wizard (JPM) (IMPACT) (set 1) + + + j6pinwzda + Pinball Wizard (JPM) (IMPACT) (set 2) + + + j6pinwzdb + Pinball Wizard (JPM) (IMPACT) (set 3) + + + j6pinwzdc + Pinball Wizard (JPM) (IMPACT) (set 4) + + + j6pinwzdd + Pinball Wizard (JPM) (IMPACT) (set 5) + + + j6pinwzde + Pinball Wizard (JPM) (IMPACT) (set 6) + + + j6pirgld + Pirates Gold (JPM) (IMPACT) (set 1) + + + j6pirglda + Pirates Gold (JPM) (IMPACT) (set 2) + + + j6pnxgd + Phoenix Gold De Luxe (JPM) (IMPACT) + + + j6pnxmil + Phoenix Millennium (JPM) (IMPACT) (set 1) + + + j6pnxmila + Phoenix Millennium (JPM) (IMPACT) (set 2) + + + j6pnxmilb + Phoenix Millennium (JPM) (IMPACT) (set 3) + + + j6pnxmilc + Phoenix Millennium (JPM) (IMPACT) (set 4) + + + j6pog + Pot Of Gold (Ace) (IMPACT) (set 1) + + + j6poga + Pot Of Gold (Ace) (IMPACT) (set 2) + + + j6pogb + Pot Of Gold (Ace) (IMPACT) (set 3) + + + j6pogc + Pot Of Gold (Ace) (IMPACT) (set 4) + + + j6pogcls + Pot Of Gold Classic (JPM) (IMPACT) (set 1) + + + j6pogclsa + Pot Of Gold Classic (JPM) (IMPACT) (set 2) + + + j6pogclsb + Pot Of Gold Classic (JPM) (IMPACT) (set 3) + + + j6pogd + Pot Of Gold (Ace) (IMPACT) (set 5) + + + j6pompay + Up Pompay (Ace) (IMPACT) (set 1) + + + j6pompaya + Up Pompay (Ace) (IMPACT) (set 2) + + + j6pompayb + Up Pompay (Ace) (IMPACT) (set 3) + + + j6pompayc + Up Pompay (Ace) (IMPACT) (set 4) + + + j6popoli + Popeye & Olive (JPM) (IMPACT) (set 1) + + + j6popolia + Popeye & Olive (JPM) (IMPACT) (set 2) + + + j6potg + Pot Of Gold (Crystal) (IMPACT) (set 1) + + + j6potga + Pot Of Gold (Crystal) (IMPACT) (set 2) + + + j6potgb + Pot Of Gold (Crystal) (IMPACT) (set 3) + + + j6pwrlin + Power Lines (JPM) (IMPACT) (set 1) + + + j6pwrlina + Power Lines (JPM) (IMPACT) (set 2) + + + j6pwrspn + Powerspin (JPM) (IMPACT) (set 1) + + + j6pwrspna + Powerspin (JPM) (IMPACT) (set 2) + + + j6pwrspnb + Powerspin (JPM) (IMPACT) (set 3) + + + j6pwrspnc + Powerspin (JPM) (IMPACT) (set 4) + + + j6pwrspnd + Powerspin (JPM) (IMPACT) (set 5) + + + j6pwrspne + Powerspin (JPM) (IMPACT) (set 6) + + + j6quantm + Quantum Leap (JPM) (IMPACT) (set 1) + + + j6quantma + Quantum Leap (JPM) (IMPACT) (set 2) + + + j6quantmb + Quantum Leap (JPM) (IMPACT) (set 3) + + + j6quantmc + Quantum Leap (JPM) (IMPACT) (set 4) + + + j6quick + Quicksilver (RAL) (IMPACT) + + + j6r2rum + Ready To Rumble (Crystal) (IMPACT) (set 1) + + + j6r2ruma + Ready To Rumble (Crystal) (IMPACT) (set 2) + + + j6r2rumb + Ready To Rumble (Crystal) (IMPACT) (set 3) + + + j6r2rumc + Ready To Rumble (Crystal) (IMPACT) (set 4) + + + j6r2rumd + Ready To Rumble (Crystal) (IMPACT) (set 5) + + + j6r2rume + Ready To Rumble (Crystal) (IMPACT) (set 6) + + + j6ra + Red Alert (JPM) (IMPACT) (set 1) + + + j6raa + Red Alert (JPM) (IMPACT) (set 2) + + + j6rab + Red Alert (JPM) (IMPACT) (set 3) + + + j6rac + Red Alert (JPM) (IMPACT) (set 4) + + + j6raclb + Red Alert Club (JPM) (IMPACT) (set 1) + + + j6raclba + Red Alert Club (JPM) (IMPACT) (set 2) + + + j6raclbb + Red Alert Club (JPM) (IMPACT) (set 3) + + + j6raclbc + Red Alert Club (JPM) (IMPACT) (set 4) + + + j6raclbd + Red Alert Club (JPM) (IMPACT) (set 5) + + + j6rad + Red Alert (JPM) (IMPACT) (set 5) + + + j6rager + Red Alert (JPM) [German] (IMPACT) + + + j6ramese + Rameses' Riches Club (Crystal) (IMPACT) (set 1) + + + j6ramesea + Rameses' Riches Club (Crystal) (IMPACT) (set 2) + + + j6rameseb + Rameses' Riches Club (Crystal) (IMPACT) (set 3) + + + j6ramesec + Rameses' Riches Club (Crystal) (IMPACT) (set 4) + + + j6ramesed + Rameses' Riches Club (Crystal) (IMPACT) (set 5) + + + j6ramesee + Rameses' Riches Club (Crystal) (IMPACT) (set 6) + + + j6ramesef + Rameses' Riches Club (Crystal) (IMPACT) (set 7) + + + j6rccls + Roller Coaster Classic (JPM) (IMPACT) (set 1) + + + j6rcclsa + Roller Coaster Classic (JPM) (IMPACT) (set 2) + + + j6rcclsb + Roller Coaster Classic (JPM) (IMPACT) (set 3) + + + j6rcclub + Roller Coaster Club (JPM) (IMPACT) (set 1) + + + j6rccluba + Roller Coaster Club (JPM) (IMPACT) (set 2) + + + j6rcclubb + Roller Coaster Club (JPM) (IMPACT) (set 3) + + + j6redal + Red Alert (Crystal) (IMPACT) (set 1) + + + j6redala + Red Alert (Crystal) (IMPACT) (set 2) + + + j6redarw + Red Arrow (JPM) (IMPACT) (set 1) + + + j6redarwa + Red Arrow (JPM) (IMPACT) (set 2) + + + j6redarwb + Red Arrow (JPM) (IMPACT) (set 3) + + + j6redarwc + Red Arrow (JPM) (IMPACT) (set 4) + + + j6redarwd + Red Arrow (JPM) (IMPACT) (set 5) + + + j6redarwe + Red Arrow (JPM) (IMPACT) (set 6) + + + j6redarwf + Red Arrow (JPM) (IMPACT) (set 7) + + + j6redarwg + Red Arrow (JPM) (IMPACT) (set 8) + + + j6redarwh + Red Arrow (JPM) (IMPACT) (set 9) + + + j6redarwi + Red Arrow (JPM) (IMPACT) (set 10) + + + j6redarwj + Red Arrow (JPM) (IMPACT) (set 11) + + + j6redarww + Red Arrow (Whitbread / JPM) (IMPACT) + + + j6reddmn + Red Demon (JPM) (IMPACT) + + + j6reelb + Reel Bingo Classic Club (Crystal) (IMPACT) (set 1) + + + j6reelba + Reel Bingo Classic Club (Crystal) (IMPACT) (set 2) + + + j6reelmn + Reel Money (JPM) (IMPACT) (set 1) + + + j6reelmna + Reel Money (JPM) (IMPACT) (set 2) + + + j6reelmnb + Reel Money (JPM) (IMPACT) (set 3) + + + j6reelmnc + Reel Money (JPM) (IMPACT) (set 4) + + + j6reelmnd + Reel Money (JPM) (IMPACT) (set 5) + + + j6reelth + Reel Thing (Ace) (IMPACT) set 1) + + + j6reeltha + Reel Thing (Ace) (IMPACT) set 2) + + + j6reelthb + Reel Thing (Ace) (IMPACT) set 3) + + + j6rh6 + Red Hot 6 (JPM) (IMPACT) (set 1) + + + j6rh6a + Red Hot 6 (JPM) (IMPACT) (set 2) + + + j6rh6b + Red Hot 6 (JPM) (IMPACT) (set 3) + + + j6rh6c + Red Hot 6 (JPM) (IMPACT) (set 4) + + + j6rh6cl + Red Hot Six Club (JPM) (IMPACT) (set 1) + + + j6rh6cla + Red Hot Six Club (JPM) (IMPACT) (set 2) + + + j6rh6clb + Red Hot Six Club (JPM) (IMPACT) (set 3) + + + j6rh6clc + Red Hot Six Club (JPM) (IMPACT) (set 4) + + + j6rh6cld + Red Hot Six Club (JPM) (IMPACT) (set 5) + + + j6rh6d + Red Hot 6 (JPM) (IMPACT) (set 5) + + + j6rh6e + Red Hot 6 (JPM) (IMPACT) (set 6) + + + j6rhchil + Red Hot Chili Stepper (Ace) (IMPACT) (set 1) + + + j6rhchila + Red Hot Chili Stepper (Ace) (IMPACT) (set 2) + + + j6rhchilb + Red Hot Chili Stepper (Ace) (IMPACT) (set 3) + + + j6rhchilc + Red Hot Chili Stepper (Ace) (IMPACT) (set 4) + + + j6rhchild + Red Hot Chili Stepper (Ace) (IMPACT) (set 5) + + + j6richpk + Rich Pickings (Ace) (IMPACT) + + + j6rico + Ricochet (JPM) (IMPACT) (set 1) + + + j6ricoa + Ricochet (JPM) (IMPACT) (set 2) + + + j6ricob + Ricochet (JPM) (IMPACT) (set 3) + + + j6ricoc + Ricochet (JPM) (IMPACT) (set 4) + + + j6ricod + Ricochet (JPM) (IMPACT) (set 5) + + + j6ricoe + Ricochet (JPM) (IMPACT) (set 6) + + + j6robin + Robin Hood (Ace) (IMPACT) (set 1) + + + j6robina + Robin Hood (Ace) (IMPACT) (set 2) + + + j6robinb + Robin Hood (Ace) (IMPACT) (set 3) + + + j6robinc + Robin Hood (Ace) (IMPACT) (set 4) + + + j6roller + Roller Coaster (JPM) (IMPACT) (set 1) + + + j6rollera + Roller Coaster (JPM) (IMPACT) (set 2) + + + j6rollerb + Roller Coaster (JPM) (IMPACT) (set 3) + + + j6rollerc + Roller Coaster (JPM) (IMPACT) (set 4) + + + j6rollerd + Roller Coaster (JPM) (IMPACT) (set 5) + + + j6rollere + Roller Coaster (JPM) (IMPACT) (set 6) + + + j6rollerf + Roller Coaster (JPM) (IMPACT) (set 7) + + + j6rollerg + Roller Coaster (JPM) (IMPACT) (set 8) + + + j6rollerh + Roller Coaster (JPM) (IMPACT) (set 9) + + + j6rolleri + Roller Coaster (JPM) (IMPACT) (set 10) + + + j6rollerj + Roller Coaster (JPM) (IMPACT) (set 11) + + + j6rollerk + Roller Coaster (JPM) (IMPACT) (set 12) + + + j6rollerl + Roller Coaster (JPM) (IMPACT) (set 13) + + + j6rollerm + Roller Coaster (JPM) (IMPACT) (set 14) + + + j6rollern + Roller Coaster (JPM) (IMPACT) (set 15) + + + j6rollero + Roller Coaster (JPM) (IMPACT) (set 16) + + + j6rollerp + Roller Coaster (JPM) (IMPACT) (set 17) + + + j6roof + Thru' The Roof (Ace) (IMPACT) (set 1) + + + j6roofa + Thru' The Roof (Ace) (IMPACT) (set 2) + + + j6royfls + Royal Flush Club (JPM) (IMPACT) (set 1) + + + j6royflsa + Royal Flush Club (JPM) (IMPACT) (set 2) + + + j6royflsb + Royal Flush Club (JPM) (IMPACT) (set 3) + + + j6royflsc + Royal Flush Club (JPM) (IMPACT) (set 4) + + + j6royflsd + Royal Flush Club (JPM) (IMPACT) (set 5) + + + j6royflse + Royal Flush Club (JPM) (IMPACT) (set 6) + + + j6samur + Samurai Club (JPM) (IMPACT) (set 1) + + + j6samura + Samurai Club (JPM) (IMPACT) (set 2) + + + j6samurb + Samurai Club (JPM) (IMPACT) (set 3) + + + j6samurc + Samurai Club (JPM) (IMPACT) (set 4) + + + j6samurd + Samurai Club (JPM) (IMPACT) (set 5) + + + j6scarlt + Captain Scarlet (Ace) (IMPACT) + + + j6shoot + ShootOut (JPM / Whitbread) (IMPACT) + + + j6showtm + It's Showtime (JPM) (IMPACT) (set 1) + + + j6showtma + It's Showtime (JPM) (IMPACT) (set 2) + + + j6showtmb + It's Showtime (JPM) (IMPACT) (set 3) + + + j6showtmc + It's Showtime (JPM) (IMPACT) (set 4) + + + j6showtmd + It's Showtime (JPM) (IMPACT) (set 5) + + + j6showtme + It's Showtime (JPM) (IMPACT) (set 6) + + + j6showtmf + It's Showtime (JPM) (IMPACT) (set 7) + + + j6showtmg + It's Showtime (JPM) (IMPACT) (set 8) + + + j6showtmh + It's Showtime (JPM) (IMPACT) (set 9) + + + j6showtmi + It's Showtime (JPM) (IMPACT) (set 10) + + + j6showtmj + It's Showtime (JPM) (IMPACT) (set 11) + + + j6showtmk + It's Showtime (JPM) (IMPACT) (set 12) + + + j6showtml + It's Showtime (JPM) (IMPACT) (set 13) + + + j6sidewd + Sidewinder (JPM) (IMPACT) (set 1) + + + j6sidewda + Sidewinder (JPM) (IMPACT) (set 2) + + + j6sidewdb + Sidewinder (JPM) (IMPACT) (set 3) + + + j6sidewdc + Sidewinder (JPM) (IMPACT) (set 4) + + + j6sidewdd + Sidewinder (JPM) (IMPACT) (set 5) + + + j6sidewde + Sidewinder (JPM) (IMPACT) (set 6) + + + j6slagn + Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 1) + + + j6slagna + Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 2) + + + j6slagnb + Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 3) + + + j6slagnc + Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 4) + + + j6slagnd + Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 5) + + + j6slagne + Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 6) + + + j6slagnf + Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 7) + + + j6slagng + Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 8) + + + j6slagnh + Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 9) + + + j6slvgst + Silver Ghost (JPM) (IMPACT) (set 1) + + + j6slvgsta + Silver Ghost (JPM) (IMPACT) (set 2) + + + j6slvgstb + Silver Ghost (JPM) (IMPACT) (set 3) + + + j6slvgstc + Silver Ghost (JPM) (IMPACT) (set 4) + + + j6slvgstd + Silver Ghost (JPM) (IMPACT) (set 5) + + + j6slvgste + Silver Ghost (JPM) (IMPACT) (set 6) + + + j6slvgstf + Silver Ghost (JPM) (IMPACT) (set 7) + + + j6slvgstg + Silver Ghost (JPM) (IMPACT) (set 8) + + + j6snakes + Snakes & Ladders (JPM) (IMPACT) (set 1) + + + j6snakesa + Snakes & Ladders (JPM) (IMPACT) (set 2) + + + j6snakesb + Snakes & Ladders (JPM) (IMPACT) (set 3) + + + j6snakesc + Snakes & Ladders (JPM) (IMPACT) (set 4) + + + j6snakesd + Snakes & Ladders (JPM) (IMPACT) (set 5) + + + j6snakese + Snakes & Ladders (JPM) (IMPACT) (set 6) + + + j6snakesf + Snakes & Ladders (JPM) (IMPACT) (set 7) + + + j6snakesg + Snakes & Ladders (JPM) (IMPACT) (set 8) + + + j6sonic + Sonic The Hedgehog (JPM) (IMPACT) (set 1) + + + j6sonica + Sonic The Hedgehog (JPM) (IMPACT) (set 2) + + + j6sonicb + Sonic The Hedgehog (JPM) (IMPACT) (set 3) + + + j6sonicc + Sonic The Hedgehog (JPM) (IMPACT) (set 4) + + + j6sonicd + Sonic The Hedgehog (JPM) (IMPACT) (set 5) + + + j6sonice + Sonic The Hedgehog (JPM) (IMPACT) (set 6) + + + j6sonicf + Sonic The Hedgehog (JPM) (IMPACT) (set 7) + + + j6sonicg + Sonic The Hedgehog (JPM) (IMPACT) (set 8) + + + j6sonich + Sonic The Hedgehog (JPM) (IMPACT) (set 9) + + + j6spcinv + Space Invaders (Crystal) (IMPACT) + + + j6stards + Stardust (JPM) (IMPACT) (set 1) + + + j6stardsa + Stardust (JPM) (IMPACT) (set 2) + + + j6stardsb + Stardust (JPM) (IMPACT) (set 3) + + + j6stardsc + Stardust (JPM) (IMPACT) (set 4) + + + j6start + Starturn (JPM) (IMPACT) (set 1) + + + j6starta + Starturn (JPM) (IMPACT) (set 2) + + + j6strk10 + Strike 10 (Ace) (IMPACT) (set 1) + + + j6strk10a + Strike 10 (Ace) (IMPACT) (set 2) + + + j6strk10b + Strike 10 (Ace) (IMPACT) (set 3) + + + j6strk10c + Strike 10 (Ace) (IMPACT) (set 4) + + + j6strk10d + Strike 10 (Ace) (IMPACT) (set 5) + + + j6strk10e + Strike 10 (Ace) (IMPACT) (set 6) + + + j6strk10f + Strike 10 (Ace) (IMPACT) (set 7) + + + j6strk10g + Strike 10 (Ace) (IMPACT) (set 8) + + + j6strk10h + Strike 10 (Ace) (IMPACT) (set 9) + + + j6strk10i + Strike 10 (Ace) (IMPACT) (set 10) + + + j6strk10j + Strike 10 (Ace) (IMPACT) (set 11) + + + j6strk10k + Strike 10 (Ace) (IMPACT) (set 12) + + + j6supbrk + Super Breakout (JPM) (IMPACT) (set 1) + + + j6supbrka + Super Breakout (JPM) (IMPACT) (set 2) + + + j6supbrkb + Super Breakout (JPM) (IMPACT) (set 3) + + + j6supbrkc + Super Breakout (JPM) (IMPACT) (set 4) + + + j6supbrkd + Super Breakout (JPM) (IMPACT) (set 5) + + + j6supbrke + Super Breakout (JPM) (IMPACT) (set 6) + + + j6supbrkf + Super Breakout (JPM) (IMPACT) (set 7) + + + j6supbrkg + Super Breakout (JPM) (IMPACT) (set 8) + + + j6supbrkh + Super Breakout (JPM) (IMPACT) (set 9) + + + j6supbrki + Super Breakout (JPM) (IMPACT) (set 10) + + + j6supbrkj + Super Breakout (JPM) (IMPACT) (set 11) + + + j6svndb + 7 Deadly Bins (Ace) (IMPACT) + + + j6swpdrp + Swop Till Ya Drop (JPM) (IMPACT) + + + j6tbirds + Thunderbirds (JPM) (IMPACT) (set 1) + + + j6tbirdsa + Thunderbirds (JPM) (IMPACT) (set 2) + + + j6tbirdsb + Thunderbirds (JPM) (IMPACT) (set 3) + + + j6tbirdsc + Thunderbirds (JPM) (IMPACT) (set 4) + + + j6tbirdsd + Thunderbirds (JPM) (IMPACT) (set 5) + + + j6tbirdse + Thunderbirds (JPM) (IMPACT) (set 6) + + + j6tbirdsf + Thunderbirds (JPM) (IMPACT) (set 7) + + + j6tbirdsg + Thunderbirds (JPM) (IMPACT) (set 8) + + + j6tbirdsh + Thunderbirds (JPM) (IMPACT) (set 9) + + + j6tbirdsi + Thunderbirds (JPM) (IMPACT) (set 10) + + + j6tbirdsj + Thunderbirds (JPM) (IMPACT) (set 11) + + + j6tbirdsk + Thunderbirds (JPM) (IMPACT) (set 12) + + + j6tbirdsl + Thunderbirds (JPM) (IMPACT) (set 13) + + + j6tbirdsm + Thunderbirds (JPM) (IMPACT) (set 14) + + + j6tbirdsn + Thunderbirds (JPM) (IMPACT) (set 15) + + + j6tbirdso + Thunderbirds (JPM) (IMPACT) (set 16) + + + j6tbirdsp + Thunderbirds (JPM) (IMPACT) (set 17) + + + j6tbirdsq + Thunderbirds (JPM) (IMPACT) (set 18) + + + j6tbirdsr + Thunderbirds (JPM) (IMPACT) (set 19) + + + j6tbrdcl + Thunderbirds Club (JPM) (IMPACT) (set 1) + + + j6tbrdcla + Thunderbirds Club (JPM) (IMPACT) (set 2) + + + j6tbrdclb + Thunderbirds Club (JPM) (IMPACT) (set 3) + + + j6tbrdclc + Thunderbirds Club (JPM) (IMPACT) (set 4) + + + j6tbrdcld + Thunderbirds Club (JPM) (IMPACT) (set 5) + + + j6tbrdcle + Thunderbirds Club (JPM) (IMPACT) (set 6) + + + j6tbrdclf + Thunderbirds Club (JPM) (IMPACT) (set 7) + + + j6tbrdclg + Thunderbirds Club (JPM) (IMPACT) (set 8) + + + j6tbrdclh + Thunderbirds Club (JPM) (IMPACT) (set 9) + + + j6tbrdcli + Thunderbirds Club (JPM) (IMPACT) (set 10) + + + j6tbrdclj + Thunderbirds Club (JPM) (IMPACT) (set 11) + + + j6tbrdclk + Thunderbirds Club (JPM) (IMPACT) (set 12) + + + j6tbrdcll + Thunderbirds Club (JPM) (IMPACT) (set 13) + + + j6thril + Thriller (Crystal) (IMPACT) (set 1) + + + j6thrila + Thriller (Crystal) (IMPACT) (set 2) + + + j6tomb + Tomb Raider (JPM) (IMPACT) (set 1) + + + j6tomba + Tomb Raider (JPM) (IMPACT) (set 2) + + + j6tombb + Tomb Raider (JPM) (IMPACT) (set 3) + + + j6tombc + Tomb Raider (JPM) (IMPACT) (set 4) + + + j6tombd + Tomb Raider (JPM) (IMPACT) (set 5) + + + j6tombe + Tomb Raider (JPM) (IMPACT) (set 6) + + + j6tombf + Tomb Raider (JPM) (IMPACT) (set 7) + + + j6tombg + Tomb Raider (JPM) (IMPACT) (set 8) + + + j6topflg + Top Flight (Ace) (IMPACT) + + + j6tqust + Treasure Quest (Crystal) (IMPACT) (set 1) + + + j6tqusta + Treasure Quest (Crystal) (IMPACT) (set 2) + + + j6tqustb + Treasure Quest (Crystal) (IMPACT) (set 3) + + + j6tqustc + Treasure Quest (Crystal) (IMPACT) (set 4) + + + j6tutti + Tutti Frutti (Qps) (IMPACT) + + + j6twst + Twister (Ace) (IMPACT) (set 1) + + + j6twsta + Twister (Ace) (IMPACT) (set 2) + + + j6twstb + Twister (Ace) (IMPACT) (set 3) + + + j6twstc + Twister (Ace) (IMPACT) (set 4) + + + j6twstd + Twister (Ace) (IMPACT) (set 5) + + + j6twstdt + Twister (JPM) [Dutch] (IMPACT) + + + j6twste + Twister (Ace) (IMPACT) (set 6) + + + j6twstf + Twister (Ace) (IMPACT) (set 7) + + + j6twstg + Twister (Ace) (IMPACT) (set 8) + + + j6twsth + Twister (Ace) (IMPACT) (set 9) + + + j6twsti + Twister (Ace) (IMPACT) (set 10) + + + j6twstj + Twister (Ace) (IMPACT) (set 11) + + + j6untch + Untouchables (JPM) (IMPACT) (set 1) + + + j6untcha + Untouchables (JPM) (IMPACT) (set 2) + + + j6vindal + Vindaloot (JPM) (IMPACT) + + + j6vivark + Viva Rock Vegas (JPM) (IMPACT) (set 1) + + + j6vivarka + Viva Rock Vegas (JPM) (IMPACT) (set 2) + + + j6vivarkb + Viva Rock Vegas (JPM) (IMPACT) (set 3) + + + j6vivarkc + Viva Rock Vegas (JPM) (IMPACT) (set 4) + + + j6vivarkd + Viva Rock Vegas (JPM) (IMPACT) (set 5) + + + j6vivarke + Viva Rock Vegas (JPM) (IMPACT) (set 6) + + + j6vivarkf + Viva Rock Vegas (JPM) (IMPACT) (set 7) + + + j6vivarkg + Viva Rock Vegas (JPM) (IMPACT) (set 8) + + + j6vivarkh + Viva Rock Vegas (JPM) (IMPACT) (set 9) + + + j6vivarki + Viva Rock Vegas (JPM) (IMPACT) (set 10) + + + j6vivarkj + Viva Rock Vegas (JPM) (IMPACT) (set 11) + + + j6vivarkk + Viva Rock Vegas (JPM) (IMPACT) (set 12) + + + j6vivrkc + Viva Rock Vegas Club (JPM) (IMPACT) (set 1) + + + j6vivrkca + Viva Rock Vegas Club (JPM) (IMPACT) (set 2) + + + j6vivrkcb + Viva Rock Vegas Club (JPM) (IMPACT) (set 3) + + + j6wildw + Wild West (Ace) (IMPACT) (set 1) + + + j6wildwa + Wild West (Ace) (IMPACT) (set 2) + + + j6wildwb + Wild West (Ace) (IMPACT) (set 3) + + + j6wildwc + Wild West (Ace) (IMPACT) (set 4) + + + j6wildwd + Wild West (Ace) (IMPACT) (set 5) + + + j6wildwe + Wild West (Ace) (IMPACT) (set 6) + + + j6wildwf + Wild West (Ace) (IMPACT) (set 7) + + + j6wildwg + Wild West (Ace) (IMPACT) (set 8) + + + j6wizard + Wizard Of Odds (JPM) (IMPACT) (set 1) + + + j6wizarda + Wizard Of Odds (JPM) (IMPACT) (set 2) + + + j6wizardb + Wizard Of Odds (JPM) (IMPACT) (set 3) + + + j6wizardc + Wizard Of Odds (JPM) (IMPACT) (set 4) + + + j6wizardd + Wizard Of Odds (JPM) (IMPACT) (set 5) + + + j6wizarde + Wizard Of Odds (JPM) (IMPACT) (set 6) + + + j6wldkng + Wild King Club (JPM) (IMPACT) (set 1) + + + j6wldknga + Wild King Club (JPM) (IMPACT) (set 2) + + + j6wthing + Wild Thing (Empire) (IMPACT) (set 1) + + + j6wthinga + Wild Thing (Empire) (IMPACT) (set 2) + + + j6wthingb + Wild Thing (Empire) (IMPACT) (set 3) + + + j7bmagic + Black Magic (JPM) + + + j7bullio + Bullionaire (Ace) + + + j7cexprs + Cash Xpress (JPM) + + + j7clbmag + Club Magic (JPM) + + + j7crztrl + Crazy Trails (JPM) + + + j7fantaz + Fantaztec (JPM) + + + j7kerchn + Ker - Chinq (JPM) + + + j7r2roll + Ready To Roll (JPM) + + + j7razzma + Razzamataz (JPM) (set 1) + + + j7razzmaa + Razzamataz (JPM) (set 2) + + + j7tubgld + Turbo Gold (JPM) + + + j7wldwkd + Wild 'N' Wicked (JPM) + + + j80alad + Aladdin's Cave (PCP) + + + j80bac + Bank A Coin (JPM) (SYSTEM80) + + + j80blbnk + Blankity Bank (PCP) (SYSTEM80) + + + j80bounc + Bouncer (JPM) (SYSTEM80) + + + j80fortr + Fortune Trail (JPM) + + + j80frogh + Frog Hop (JPM) (SYSTEM80) + + + j80fruit + Fruit Snappa (JPM) (SYSTEM80) + + + j80golds + Golden Steppa (JPM) (SYSTEM80) + + + j80hotln + Hot Lines (JPM) (SYSTEM80) + + + j80mster + Masterspy (Pcp) + + + j80myspn + Mystery Spin (JPM) (SYSTEM80) + + + j80nudg2 + Nudge Double Up MkII (JPM) (SYSTEM80) + + + j80plsnd + Plus Nudge (JPM) + + + j80rr + Road Runner (JPM) (SYSTEM80, set 1) + + + j80rra + Road Runner (JPM) (SYSTEM80, set 2) + + + j80supbk + Superbank (JPM) (SYSTEM80) + + + j80supst + Supa Steppa (JPM) (SYSTEM80) + + + j80topsp + Top Sprint (JPM) (SYSTEM80) + + + j80topup + Top Up (JPM) (SYSTEM80) + + + j80tumbl + Tumble (JPM) (SYSTEM80) + + + j80wsprt + Winsprint (JPM) (V4, 5x20p) (SYSTEM80) + + + j80wsprt2 + Winsprint (JPM) (V2, 10x10p) (SYSTEM80) + + + j80wsprt3 + Winsprint (JPM) (V3, 50p, 5 credits) (SYSTEM80) + + + j_ewnd20 + Each Way Nudger (Barcrest?, set 3, version 20?) + + + j_ewnda + Each Way Nudger (Barcrest?, set 2) + + + j_ewnud + Each Way Nudger (Barcrest?, set 1) + + + j_ews + Each Way Shifter (Barcrest?, set 1, version 16) + + + j_ews8a + Each Way Shifter (Barcrest?, set 2, version 8a) + + + j_luck2 + Lucky Twos? + + + j_luckac + Lucky Aces (Unk) + + + j_nuddup + Nudge Double Up (JPM SRU, set 1) + + + j_nuddup2 + Nudge Double Up (JPM SRU, set 2) + + + j_plus2 + Plus 2 (JPM) + + + j_super2 + Super 2 (JPM) + + + j_unk + unknown SRU Game (JPM?) + + + jack + Jack the Giantkiller (set 1) + + + jack2 + Jack the Giantkiller (set 2) + + + jack2opn + Jacks to Open + + + jack3 + Jack the Giantkiller (set 3) + + + jackal + Jackal (World, 8-way Joystick) + + + jackalj + Tokushu Butai Jackal (Japan, 8-way Joystick) + + + jackalr + Jackal (World, Rotary Joystick) + + + jackie + Happy Jackie (v110U) + + + jackler + Jackler (Jungler bootleg) + + + jackpool + Jackpot Cards / Jackpot Pool (Italy) + + + jackrabt + Jack Rabbit (set 1) + + + jackrabt2 + Jack Rabbit (set 2) + + + jackrabts + Jack Rabbit (special) + + + jailbrek + Jail Break + + + jailbrekb + Jail Break (bootleg) + + + jajamaru + Vs. Ninja Jajamaru Kun (Japan) + + + jambo + Jambo! Safari (JPN, USA, EXP, KOR, AUS) (Rev A) + + + jamesb + James Bond (Timed Play) + + + jamesb2 + James Bond (3/5-Ball) + + + janbari + Mahjong Janjan Baribari (Japan) + + + jangou + Jangou [BET] (Japan) + + + janjans1 + Lovely Pop Mahjong JangJang Shimasho (Japan) + + + janjans2 + Lovely Pop Mahjong JangJang Shimasho 2 (Japan) + + + jankenmn + Janken Man Kattara Ageru + + + janoh + Jan Oh (set 1) + + + janoha + Jan Oh (set 2) + + + janptr96 + Janputer '96 (Japan) + + + janptrsp + Janputer Special (Japan) + + + janputer + New Double Bet Mahjong (bootleg of Janputer) + + + janshi + Janshi + + + janshin + Jyanshin Densetsu - Quest of Jongmaster + + + janshinp + Mahjong Janshin Plus (Japan) + + + jansou + Jansou (set 1) + + + jansoua + Jansou (set 2) + + + jantotsu + 4nin-uchi Mahjong Jantotsu + + + jantouki + Jong Tou Ki (Japan) + + + janyoup2 + Janyou Part II (ver 7.03, July 1 1983) + + + janyuki + Jong Yu Ki (Japan) + + + jb_10b + Jack*Bot (1.0B) (Belgium/Canada) + + + jb_10r + Jack*Bot (1.0R) + + + jchan + Jackie Chan - The Kung-Fu Master + + + jchan2 + Jackie Chan in Fists of Fire + + + jclub2 + Jockey Club II (newer hardware) + + + jclub2o + Jockey Club II (older hardware) + + + jclub2ob + Jockey Club II (older hardware, set 2) + + + jcross + Jumping Cross + + + jd_l1 + Judge Dredd (L-1) + + + jd_l6 + Judge Dredd (L-6) + + + jd_l7 + Judge Dredd (L-7) + + + jdredd + Judge Dredd (Rev C Dec. 17 1997) + + + jdreddb + Judge Dredd (Rev B Nov. 26 1997) + + + jdreddp + Judge Dredd (rev LA1, prototype) + + + jedi + Return of the Jedi + + + jestmagi + Jester Magic (Konami Endeavour) + + + jetfight + Jet Fighter (Set1) [TTL] + + + jetfighta + Jet Fighter (Set2) [TTL] + + + jetwave + Jet Wave (EAB, Euro v1.04) + + + jetwavej + Jet Wave (JAB, Japan v1.04) + + + jgakuen + Shiritsu Justice Gakuen: Legion of Heroes (Japan 971117) + + + jigkmgri + Jigoku Meguri (Japan) + + + jin + Jin + + + jingbell + Jingle Bell (Italy, V133I) + + + jingystm + Jingi Storm - The Arcade (GDL-0037) + + + jitsupro + Jitsuryoku!! Pro Yakyuu (Japan) + + + jituroku + Jitsuroku Maru-chi Mahjong (Japan) + + + jjack + Jumping Jack + + + jjparad2 + Jan Jan Paradise 2 + + + jjparads + Jan Jan Paradise + + + jjpoker + Jackpot Joker Poker (set 1) + + + jjpokerb + Jackpot Joker Poker (set 2) + + + jjsquawk + J. J. Squawkers + + + jjsquawkb + J. J. Squawkers (bootleg) + + + jjsquawkb2 + J. J. Squawkers (bootleg, Blandia Conversion) + + + jkrmast + Joker Master + + + jleague + The J.League 1994 (Japan) + + + jm_12b + Johnny Mnemonic (1.2B) Belgium + + + jm_12r + Johnny Mnemonic (1.2R) + + + jmpbreak + Jumping Break + + + jnero + Johnny Nero Action Hero + + + jngld_l2 + Jungle Lord (L-2) + + + jngolady + Jangou Lady (Japan) + + + jockeyc + Jockey Club + + + jockeygp + Jockey Grand Prix (set 1) + + + jockeygpa + Jockey Grand Prix (set 2) + + + joemac + Tatakae Genshizin Joe & Mac (Japan ver 1) + + + joemacr + Joe & Mac Returns (World, Version 1.1, 1994.05.27) + + + joemacra + Joe & Mac Returns (World, Version 1.0, 1994.05.19) + + + jogakuen + Mahjong Jogakuen (Japan) + + + joinem + Joinem + + + jojo + JoJo's Venture (USA 990128) + + + jojoba + JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927) + + + jojoban + JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927, NO CD) + + + jojobane + JoJo's Bizarre Adventure (Euro 990927, NO CD) + + + jojobaner1 + JoJo's Bizarre Adventure (Euro 990913, NO CD) + + + jojobanr1 + JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913, NO CD) + + + jojobar1 + JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913) + + + jojoj + JoJo no Kimyou na Bouken (Japan 990128) + + + jojojr1 + JoJo no Kimyou na Bouken (Japan 990108) + + + jojojr2 + JoJo no Kimyou na Bouken (Japan 981202) + + + jojon + JoJo's Venture (Asia 990128, NO CD) + + + jojonr1 + JoJo's Venture (Asia 990108, NO CD) + + + jojonr2 + JoJo's Venture (Asia 981202, NO CD) + + + jojor1 + JoJo's Venture (USA 990108) + + + jojor2 + JoJo's Venture (USA 981202) + + + jokercrd + Joker Card (Ver.A267BC, encrypted) + + + jokpoker + Joker Poker (Version 16.03B) + + + jokpokera + Joker Poker (Version 16.03BI 5-10-85, Joker Poker ICB 9-30-86) + + + jokpokerb + Joker Poker (Version 16.04BI 10-19-88, Joker Poker ICB 9-30-86) + + + jokpokerc + Joker Poker (Version 16.03BI 5-10-85, Poker No Raise ICB 9-30-86) + + + jokrpokr + Joker Poker + + + jokrwild + Joker's Wild (encrypted) + + + jokrz_l3 + Jokerz! (L-3) + + + jokrz_l6 + Jokerz! (L-6) + + + jollycrd + Jolly Card (Austrian) + + + jollyjgr + Jolly Jogger + + + jolyc3x3 + Jolly Card (3x3 deal) + + + jolyc980 + Jolly Card Professional 2.0 (Spale Soft) + + + jolyccra + Jolly Card (Croatian, set 1) + + + jolyccrb + Jolly Card (Croatian, set 2) + + + jolycdab + Jolly Card (Austrian, Fun World, bootleg) + + + jolycdev + Jolly Card (Evona Electronic) + + + jolycdib + Jolly Card (Italian, encrypted bootleg, set 1) + + + jolycdic + Jolly Card (Italian, encrypted bootleg, set 2) + + + jolycdid + Jolly Card (Italian, different colors, set 1) + + + jolycdie + Jolly Card (Italian, different colors, set 2) + + + jolycdit + Jolly Card (Italian, blue TAB board, encrypted) + + + jolycdsp + Jolly Card (Spanish, blue TAB board, encrypted) + + + jolycmzs + Jolly Card Professional 2.0 (MZS Tech) + + + jolyjokr + Jolly Joker (98bet, set 1) + + + jolyjokra + Jolly Joker (98bet, set 2) + + + jolyjokrb + Jolly Joker (40bet, Croatian hack) + + + jolypark + Jolly Park + + + jongbou + Mahjong Block Jongbou (Japan) + + + jongkyo + Jongkyo + + + jongtei + Mahjong Jong-Tei (Japan, ver. NM532-01) + + + josvolly + Joshi Volleyball + + + journey + Journey + + + joust + Joust (White/Green label) + + + joust2 + Joust 2 - Survival of the Fittest + + + joustr + Joust (Solid Red label) + + + joustwr + Joust (White/Red label) + + + joyfulr + Joyful Road (Japan) + + + joyjoy + Puzzled / Joy Joy Kid (NGM-021)(NGH-021) + + + joyman + Joyman + + + jpark + Jurassic Park (World) + + + jpark3 + Jurassic Park 3 (ver EBC) + + + jparkj + Jurassic Park (Japan, Rev A, Deluxe) + + + jparkja + Jurassic Park (Japan, Deluxe) + + + jparkjc + Jurassic Park (Japan, Rev A, Conversion) + + + jpcoin + Joker Poker (Coinmaster set 1) + + + jpcoin2 + Joker Poker (Coinmaster, Amusement Only) + + + jplstw20 + Lost World: Jurassic Park, The (2.00) + + + jplstw22 + Lost World: Jurassic Park, The (2.02) + + + jpopnics + Jumping Pop (Nics, Korean bootleg of Plump Pop) + + + jptparty + Jackpot Party (Russia) + + + jrking + Junior King (bootleg of Donkey Kong Jr.) + + + jrpacman + Jr. Pac-Man (11/9/83) + + + jrpacmanf + Jr. Pac-Man (speedup hack) + + + jrpacmbl + Jr. Pac-Man (Pengo hardware) + + + jsk + Joryuu Syougi Kyoushitsu (Japan) + + + jspecter + Jatre Specter (set 1) + + + jspecter2 + Jatre Specter (set 2) + + + jst_l2 + Joust (L-2) + + + jubileep + Double-Up Poker (Jubilee) + + + juju + JuJu Densetsu (Japan) + + + jujub + JuJu Densetsu (Playmark bootleg) + + + jujuba + JuJu Densetsu (Japan, bootleg) + + + jumpbug + Jump Bug + + + jumpbugb + Jump Bug (bootleg) + + + jumpcoas + Jump Coaster + + + jumpcoast + Jump Coaster (Taito) + + + jumping + Jumping + + + jumpjkpt + Jumping Jackpots (Russia) (Atronic) + + + jumpkids + Jump Kids + + + jumppop + Jumping Pop (set 1) + + + jumppope + Jumping Pop (set 2) + + + jumpshot + Jump Shot + + + jumpshotp + Jump Shot Engineering Sample + + + junai + Junai - Manatsu no First Kiss (Japan) + + + junai2 + Junai 2 - White Love Story (Japan) + + + jungleby + Jungle Boy (bootleg) + + + jungleh + Jungle Hunt (US) + + + junglehbr + Jungle Hunt (Brazil) + + + junglek + Jungle King (Japan) + + + junglekas + Jungle King (alternate sound) + + + junglekj2 + Jungle King (Japan, earlier) + + + jungler + Jungler + + + junglers + Jungler (Stern Electronics) + + + junofrst + Juno First + + + junofrstg + Juno First (Gottlieb) + + + jupk_501 + Jurassic Park (5.01) + + + jupk_513 + Jurassic Park (5.13) + + + jupk_g51 + Jurassic Park (5.01 Germany) + + + jwildb52 + Joker's Wild (B52 system, set 1) + + + jwildb52a + Joker's Wild (B52 system, set 2) + + + jwildb52h + Joker's Wild (B52 system, Harrah's GFX) + + + jy_03 + Junk Yard (0.3) + + + jy_11 + Junk Yard (1.1) + + + jy_12 + Junk Yard (1.2) + + + jyangoku + Jyangokushi: Haoh no Saihai (Japan 990527) + + + jzth + Jue Zhan Tian Huang + + + kabukikl + Far East of Eden - Kabuki Klash / Tengai Makyou - Shin Den + + + kabukiz + Kabuki-Z (World) + + + kabukizj + Kabuki-Z (Japan) + + + kageki + Kageki (US) + + + kagekih + Kageki (hack) + + + kagekij + Kageki (Japan) + + + kaguya + Mahjong Kaguyahime [BET] (Japan 880521) + + + kaguya2 + Mahjong Kaguyahime Sono2 [BET] (Japan 890829) + + + kaguya2f + Mahjong Kaguyahime Sono2 Fukkokuban [BET] (Japan 010808) + + + kaiserkn + Kaiser Knuckle (Ver 2.1O 1994/07/29) + + + kaiserknj + Kaiser Knuckle (Ver 2.1J 1994/07/29) + + + kaitei + Kaitei Takara Sagashi + + + kaiteids + Kaitei Daisensou (Japan) + + + kaitein + Kaitei Takara Sagashi (Namco license) + + + kaiunqz + Kaiun Quiz (Japan, KW1/VER.A) + + + kakumei + Mahjong Kakumei (Japan) + + + kakumei2 + Mahjong Kakumei 2 - Princess League (Japan) + + + kamakazi3 + Kamakazi III (superg hack) + + + kamenrid + Masked Riders Club Battle Race + + + kamikaze + Kamikaze + + + kamikcab + Kamikaze Cabbie + + + kanatuen + Kanatsuen no Onna [BET] (Japan 880905) + + + kangaroo + Kangaroo + + + kangarooa + Kangaroo (Atari) + + + kangaroob + Kangaroo (bootleg) + + + kaos + Kaos + + + karatblz + Karate Blazers (World) + + + karatblzj + Karate Blazers (Japan) + + + karatblzu + Karate Blazers (US) + + + karatedo + Karate Dou (Japan) + + + karatevs + Taisen Karate Dou (Japan VS version) + + + karatour + The Karate Tournament + + + karianx + Karian Cross (Rev. 1.0) + + + karnov + Karnov (US, rev 6) + + + karnova + Karnov (US, rev 5) + + + karnovj + Karnov (Japan) + + + karnovr + Karnov's Revenge / Fighter's History Dynamite + + + karous + Karous (GDL-0040) + + + kartduel + Kart Duel (Japan, KTD1/VER.A) + + + kas89 + Kasino '89 + + + kazan + Ninja Kazan (World) + + + kbash + Knuckle Bash + + + kbash2 + Knuckle Bash 2 (bootleg) + + + kbm + Keyboardmania + + + kbm2nd + Keyboardmania 2nd Mix + + + kbm3rd + Keyboardmania 3rd Mix + + + kchamp + Karate Champ (US) + + + kchampvs + Karate Champ (US VS version, set 1) + + + kchampvs2 + Karate Champ (US VS version, set 2) + + + kdeadeye + Dead Eye (GV054 UAA01) + + + kdynastg + King of Dynast Gear (version 1.8) + + + keith + Keith Courage In Alpha Zones + + + keithlcy + Dramatic Adventure Quiz Keith & Lucy (Japan) + + + keks + Keks (060328 World) + + + keks_2 + Keks (060403 World) + + + keks_2a + Keks (bootleg, 060403, banking address hack) + + + keks_2b + Keks (bootleg, 060403, banking address hack, changed version text) + + + keks_2c + Keks (bootleg, 060403, VIDEO GAME-1 KS01 set 1) + + + keks_2d + Keks (bootleg, 060403, VIDEO GAME-1 KS01 set 2) + + + keks_2e + Keks (bootleg, 060403, banking address hack, payout percentage 60) + + + keks_2f + Keks (bootleg, 060403, LOTTOGAME (I)) + + + keks_2g + Keks (bootleg, 060403, LOTOS KS01) + + + keks_3 + Keks (070119 Russia) + + + keks_3a + Keks (bootleg, 070119, banking address hack set 1) + + + keks_3b + Keks (bootleg, 070119, banking address hack set 2) + + + keks_4 + Keks (090604 Lottery) + + + keks_5 + Keks (090727 Entertainment) + + + keksa + Keks (bootleg, 060328, banking address hack) + + + keksb + Keks (bootleg, 060328, backdoor) + + + keksc + Keks (bootleg, 060328, banking address hack, changed version text) + + + kengo + Ken-Go + + + keroppi + Kero Kero Keroppi's Let's Play Together (USA, Version 2.0) + + + keroppij + Kero Kero Keroppi no Issyoni Asobou (Japan) + + + ket + Ketsui: Kizuna Jigoku Tachi (2003/01/01. Master Ver.) + + + keta + Ketsui: Kizuna Jigoku Tachi (2003/01/01 Master Ver.) + + + ketb + Ketsui: Kizuna Jigoku Tachi (2003/01/01 Master Ver) + + + keyboard + La Keyboard (GDS-0017) + + + kf10thep + The King of Fighters 10th Anniversary Extra Plus (The King of Fighters 2002 bootleg) + + + kf2k2mp + The King of Fighters 2002 Magic Plus (bootleg) + + + kf2k2mp2 + The King of Fighters 2002 Magic Plus II (bootleg) + + + kf2k2pla + The King of Fighters 2002 Plus (bootleg set 2) + + + kf2k2pls + The King of Fighters 2002 Plus (bootleg set 1) + + + kf2k3bl + The King of Fighters 2003 (bootleg set 1) + + + kf2k3bla + The King of Fighters 2003 (bootleg set 2) + + + kf2k3pcb + The King of Fighters 2003 (Japan, JAMMA PCB) + + + kf2k3pl + The King of Fighters 2004 Plus / Hero (The King of Fighters 2003 bootleg) + + + kf2k3upl + The King of Fighters 2004 Ultra Plus (The King of Fighters 2003 bootleg) + + + kf2k5uni + The King of Fighters 10th Anniversary 2005 Unique (The King of Fighters 2002 bootleg) + + + kftgoal + Kick for the Goal + + + kgbird + K.G. Bird (4VXFC5341, New Zealand, 5c) + + + kgbirda + K.G. Bird (4VXFC5341, New Zealand, 10c) + + + kick + Kick (upright) + + + kick4csh + Kick '4' Cash + + + kickboy + Kick Boy + + + kickc + Kick (cocktail) + + + kicker + Kicker + + + kickgoal + Kick Goal + + + kickman + Kickman (upright) + + + kicknrun + Kick and Run (World) + + + kicknrunu + Kick and Run (US) + + + kickoff + Kick Off (Japan) + + + kickridr + Kick Rider + + + kidniki + Kid Niki - Radical Ninja (World) + + + kidnikiu + Kid Niki - Radical Ninja (US) + + + kikaioh + Choukou Senki Kikaioh (Japan 980914) + + + kikcubic + Meikyu Jima (Japan) + + + kikcubicb + Kickle Cubele + + + kikikai + KiKi KaiKai + + + kikstart + Kick Start - Wheelie King + + + killbld + The Killing Blade (ver. 109, Chinese Board) + + + killbld104 + The Killing Blade (ver. 104) + + + killbldp + The Killing Blade Plus (China, ver. 300) + + + killcom + Killer Comet + + + kimbldhl + Kimble Double HI-LO + + + kimblz80 + Kimble Double HI-LO (z80 version) + + + kingball + King & Balloon (US) + + + kingballj + King & Balloon (Japan) + + + kingdmgp + Kingdom Grandprix + + + kingdrbb + King Derby (Taiwan bootleg) + + + kingdrbb2 + King Derby (bootleg set 2) + + + kingdrby + King Derby (1981) + + + kingofb + King of Boxer (English) + + + kingpin + Kingpin + + + kingrt66 + King of Route 66 (Rev A) + + + kingt_l1 + King Tut (Shuffle) (L-1) + + + kingtut + King Tut (NSW, Australia) + + + kinniku + Kinnikuman Muscle Grand Prix (KN1 Ver. A) + + + kinst + Killer Instinct (v1.5d) + + + kinst13 + Killer Instinct (v1.3) + + + kinst14 + Killer Instinct (v1.4) + + + kinst2 + Killer Instinct 2 (v1.4) + + + kinst210 + Killer Instinct 2 (v1.0) + + + kinst211 + Killer Instinct 2 (v1.1) + + + kinst213 + Killer Instinct 2 (v1.3) + + + kinst2k3 + Killer Instinct 2 (v1.3k, upgrade kit) + + + kinst2k4 + Killer Instinct 2 (v1.4k, upgrade kit) + + + kinstb + Killer Instinct (SNES bootleg) + + + kinstp + Killer Instinct (proto v4.7) + + + kirameki + Kirameki Star Road (Ver 2.10J 1997/08/29) + + + kirarast + Ryuusei Janshi Kirara Star + + + kisekaeh + Kisekae Hanafuda + + + kisekaem + Kisekae Mahjong + + + kiss + Kiss + + + kissp + Kiss (prototype) + + + kittenk + Kitten Kaboodle + + + kiwame + Pro Mahjong Kiwame + + + kiwames + Pro Mahjong Kiwame S (J 951020 V1.208) + + + kizuna + Kizuna Encounter - Super Tag Battle / Fu'un Super Tag Battle + + + kizuna4p + Kizuna Encounter - Super Tag Battle 4 Way Battle Version / Fu'un Super Tag Battle Special Version + + + kkotnoli + Kkot No Li (Kill the Bees) + + + klax + Klax (set 1) + + + klax2 + Klax (set 2) + + + klax3 + Klax (set 3) + + + klaxd + Klax (Germany) + + + klaxj + Klax (Japan) + + + klaxp1 + Klax (prototype set 1) + + + klaxp2 + Klax (prototype set 2) + + + klondkp + KlonDike+ + + + klxyj + Kuai Le Xi You Ji + + + knckhead + Knuckle Heads (World) + + + knckheadj + Knuckle Heads (Japan) + + + knckheadjp + Knuckle Heads (Japan, Prototype?) + + + kncljoe + Knuckle Joe (set 1) + + + kncljoea + Knuckle Joe (set 2) + + + kngtmare + Knightmare (prototype) + + + knightb + Knight Boy + + + knights + Knights of the Round (World 911127) + + + knightsb + Knights of the Round (bootleg) + + + knightsj + Knights of the Round (Japan 911127, B-Board 91634B-2) + + + knightsja + Knights of the Round (Japan 911127, B-Board 89625B-1) + + + knightsu + Knights of the Round (USA 911127) + + + knockout + Knock Out!! (bootleg?) + + + knpuzzle + Kotoba no Puzzle Mojipittan (Japan, KPM1 Ver.A) + + + kod + The King of Dragons (World 910805) + + + kodb + The King of Dragons (bootleg) + + + kodj + The King of Dragons (Japan 910805, B-Board 90629B-3) + + + kodja + The King of Dragons (Japan 910805, B-Board 89625B-1) + + + kodr1 + The King of Dragons (World 910711) + + + kodu + The King of Dragons (USA 910910) + + + kof10th + The King of Fighters 10th Anniversary (The King of Fighters 2002 bootleg) + + + kof2000 + The King of Fighters 2000 (NGM-2570) (NGH-2570) + + + kof2000n + The King of Fighters 2000 (not encrypted) + + + kof2001 + The King of Fighters 2001 (NGM-262?) + + + kof2001h + The King of Fighters 2001 (NGH-2621) + + + kof2002 + The King of Fighters 2002 (NGM-2650)(NGH-2650) + + + kof2002b + The King of Fighters 2002 (bootleg) + + + kof2003 + The King of Fighters 2003 (NGM-2710) + + + kof2003h + The King of Fighters 2003 (NGH-2710) + + + kof2k4se + The King of Fighters Special Edition 2004 (The King of Fighters 2002 bootleg) + + + kof94 + The King of Fighters '94 (NGM-055)(NGH-055) + + + kof95 + The King of Fighters '95 (NGM-084) + + + kof95a + The King of Fighters '95 (NGM-084), alternate board + + + kof95h + The King of Fighters '95 (NGH-084) + + + kof96 + The King of Fighters '96 (NGM-214) + + + kof96h + The King of Fighters '96 (NGH-214) + + + kof97 + The King of Fighters '97 (NGM-2320) + + + kof97h + The King of Fighters '97 (NGH-2320) + + + kof97k + The King of Fighters '97 (Korean release) + + + kof97oro + The King of Fighters '97 Oroshi Plus 2003 (bootleg) + + + kof97pls + The King of Fighters '97 Plus (bootleg) + + + kof98 + The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGM-2420) + + + kof98a + The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGM-2420, alternate board) + + + kof98h + The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGH-2420) + + + kof98k + The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board) + + + kof98ka + The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board 2) + + + kof98um + The King of Fighters '98: Ultimate Match (v1.00) + + + kof99 + The King of Fighters '99 - Millennium Battle (NGM-2510) + + + kof99e + The King of Fighters '99 - Millennium Battle (earlier) + + + kof99h + The King of Fighters '99 - Millennium Battle (NGH-2510) + + + kof99k + The King of Fighters '99 - Millennium Battle (Korean release) + + + kof99p + The King of Fighters '99 - Millennium Battle (prototype) + + + kofnw + The King of Fighters Neowave + + + kofnwj + The King of Fighters Neowave (Japan) + + + koftball + King of Football + + + kofxi + The King of Fighters XI + + + kog + King of Gladiator (The King of Fighters '97 bootleg) + + + koikoi + Koi Koi Part 2 + + + koikois + Koi Koi Shimasho + + + koikois2 + Koi Koi Shimasho 2 - Super Real Hanafuda (Japan) + + + koinomp + Mahjong Koi no Magic Potion (Japan) + + + kok + Povar / Sobrat' Buran / Agroprom (Arcade multi-game bootleg of ZX Spectrum 'Cookie', 'Jetpac' & 'Pssst') + + + kokoroj2 + Kokoroji 2 + + + kollon + Kollon (V2.04J) + + + kollonc + Kollon (V2.04JC) + + + konam80a + Konami 80's AC Special (GC826 VER. AAA) + + + konam80j + Konami 80's Gallery (GC826 VER. JAA) + + + konam80k + Konami 80's AC Special (GC826 VER. KAA) + + + konam80s + Konami 80's AC Special (GC826 VER. EAA) + + + konam80u + Konami 80's AC Special (GC826 VER. UAA) + + + konami88 + Konami '88 + + + konamigt + Konami GT + + + konamigv + Baby Phoenix/GV System + + + konamigx + System GX + + + konek + Konek-Gorbunok + + + kong + Kong (Donkey Kong conversion on Galaxian hardware) + + + konotako + Kono Tako (10021 Ver.A) + + + kontest + Konami Test Board (GX800, Japan) + + + konzero + Zero (Konami Endeavour) + + + kopunch + KO Punch + + + korinai + Mahjong-zukino Korinai Menmen (Japan 880425) + + + korinaim + Mahjong-zukino Korinai Menmen [BET] (Japan 880920) + + + korokoro + Koro Koro Quest (Japan) + + + koroleva + Snezhnaja Koroleva + + + korosuke + Korosuke Roller (Japan) + + + koshien + Ah Eikou no Koshien (Japan) + + + kosmokil + Kosmo Killer + + + kosteel + Kings of Steel + + + kotbinsp + Kkot Bi Nyo Special (Korea) + + + kotbinyo + Kkot Bi Nyo (Korea) + + + kothello + Kyuukyoku no Othello + + + kotm + King of the Monsters (set 1) + + + kotm2 + King of the Monsters 2 - The Next Thing (NGM-039)(NGH-039) + + + kotm2p + King of the Monsters 2 - The Next Thing (prototype) + + + kotmh + King of the Monsters (set 2) + + + kouyakyu + The Koukouyakyuh + + + kov + Knights of Valour / Sangoku Senki (ver. 117) + + + kov100 + Knights of Valour / Sangoku Senki (ver. 100, Japanese Board) + + + kov115 + Knights of Valour / Sangoku Senki (ver. 115) + + + kov2 + Knights of Valour 2 / Sangoku Senki 2 (ver. 107, 102, 100HK) + + + kov2100 + Knights of Valour 2 / Sangoku Senki 2 (ver. 100, 100, 100HK) + + + kov2101 + Knights of Valour 2 / Sangoku Senki 2 (ver. 101, 101, 100HK) + + + kov2102 + Knights of Valour 2 / Sangoku Senki 2 (ver. 102, 101, 100HK) + + + kov2103 + Knights of Valour 2 / Sangoku Senki 2 (ver. 103, 101, 100HK) + + + kov2106 + Knights of Valour 2 / Sangoku Senki 2 (ver. 106, 102, 100KH) + + + kov2nl + Knights of Valour 2 New Legend (V302, China) + + + kov2nlo + Knights of Valour 2 New Legend (V301, China) + + + kov2p + Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M205XX, 200, 100CN) + + + kov2p202 + Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M202XX, 200, 100CN) + + + kov2p204 + Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M204XX, 200, 100CN) + + + kov3 + Knights of Valour 3 (V102, China) + + + kov7sprt + Knights of Valour - The Seven Spirits + + + kovlsjb + Knights of Valour: Luan Shi Jie Ba / Sangoku Senki: Luan Shi Jie Ba (ver. 200CN, set 1) + + + kovlsjba + Knights of Valour: Luan Shi Jie Ba / Sangoku Senki: Luan Shi Jie Ba (ver. 200CN, set 2) + + + kovlsqh + Knights of Valour: Luan Shi Quan Huang / Sangoku Senki: Luan Shi Quan Huang (ver. 200CN) + + + kovlsqh2 + Knights of Valour: Luan Shi Quan Huang 2 / Sangoku Senki: Luan Shi Quan Huang 2 (ver. 200CN) + + + kovplus + Knights of Valour Plus / Sangoku Senki Plus (ver. 119, set 1) + + + kovplusa + Knights of Valour Plus / Sangoku Senki Plus (ver. 119, set 2) + + + kovqhsgs + Knights of Valour: Quan Huang San Guo Special / Sangoku Senki: Quan Huang San Guo Special (ver. 303CN) + + + kovsgqyz + Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 1) + + + kovsgqyza + Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 2) + + + kovsgqyzb + Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 3) + + + kovsh + Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 104, CN) + + + kovsh101 + Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 101, CN) + + + kovsh102 + Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 102, CN) + + + kovsh103 + Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 103, CN) + + + kovshp + Knights of Valour Super Heroes Plus / Sangoku Senki Super Heroes Plus (ver. 101) + + + kovshpa + Knights of Valour Super Heroes Plus / Sangoku Senki Super Heroes Plus (ver. 100) + + + kovshxas + Knights of Valour: Aoshi Sanguo / Sangoku Senki: Aoshi Sanguo (ver. 202CN) + + + kovytzy + Knights of Valour: Yi Tong Zhong Yuan / Sangoku Senki: Yi Tong Zhong Yuan (ver. 201, China) + + + kozure + Kozure Ookami (Japan) + + + kpv106 + Kingpin (Pinball) + + + kram + Kram (set 1) + + + kram2 + Kram (set 2) + + + kram3 + Kram (encrypted) + + + kroozr + Kozmik Kroozr + + + krull + Krull + + + krullp + Krull (Pinball) + + + krzybowl + Krazy Bowl + + + ksayakyu + Kusayakyuu + + + ktiger + Kyukyoku Tiger (Japan) + + + ktiger2 + Kyukyoku Tiger II (Ver 2.1J 1995/11/30) + + + kuhga + Kuhga - Operation Code 'Vapor Trail' (Japan revision 3) + + + kungfub + Kung-Fu Master (bootleg set 1) + + + kungfub2 + Kung-Fu Master (bootleg set 2) + + + kungfum + Kung-Fu Master (World) + + + kungfumd + Kung-Fu Master (US) + + + kungfur + Kung-Fu Roushi + + + kungfut + Kung-Fu Taikun (set 1) + + + kungfuta + Kung-Fu Taikun (set 2) + + + kuniokun + Nekketsu Kouha Kunio-kun (Japan) + + + kuniokunb + Nekketsu Kouha Kunio-kun (Japan bootleg) + + + kurikint + Kuri Kinton (World) + + + kurikinta + Kuri Kinton (World, prototype?) + + + kurikintj + Kuri Kinton (Japan) + + + kurikintu + Kuri Kinton (US) + + + kurucham + Kurukuru Chameleon (GDL-0034) + + + kurufev + Kurukuru Fever + + + kurukuru + Kuru Kuru Pyon Pyon (Japan) + + + kviper + Konami Viper BIOS + + + kyros + Kyros + + + kyrosj + Kyros No Yakata (Japan) + + + kyuhito + Kyukyoku no Hito [BET] (Japan 880824) + + + kyukaidk + Kyuukai Douchuuki (Japan, new version (Rev B)) + + + kyukaidko + Kyuukai Douchuuki (Japan, old version) + + + kyustrkr + Last Striker / Kyuukyoku no Striker + + + kz26 + KZ-26 + + + labyrunr + Labyrinth Runner (Japan) + + + labyrunrk + Labyrinth Runner (World Ver. K) + + + lacrazyc + Let's Attack Crazy Cross (GV027 Asia 1.10) + + + ladybgb2 + Lady Bug (bootleg set 2) + + + ladybug + Lady Bug + + + ladybugb + Lady Bug (bootleg set 1) + + + ladybugg + Lady Bug (bootleg on Galaxian hardware) + + + ladyfrog + Lady Frog + + + ladygolf + Vs. Stroke & Match Golf (Ladies Version, set LG4 ?) + + + ladygolfe + Vs. Stroke & Match Golf (Ladies Version, set LG4 E) + + + ladykill + Lady Killer + + + ladylinr + Lady Liner + + + ladyluck + Lady Luck + + + ladylukt + Lady Luck (Taito) + + + ladymstr + Lady Master of Kung Fu + + + ladyshot + Lady Sharpshooter + + + ladyshota + Lady Sharpshooter (alternate set) + + + lagirl + LA Girl + + + lagunar + Laguna Racer + + + lah_110 + Last Action Hero (1.10) + + + lah_112 + Last Action Hero (1.12) + + + lah_l104 + Last Action Hero (1.04 Spain) + + + lah_l108 + Last Action Hero (1.08 Spain) + + + lamachin + L.A. Machineguns + + + landbrk + Land Breaker (World) / Miss Tang Ja Ru Gi (Korea) (pcb ver 3.02) + + + landbrka + Land Breaker (World) / Miss Tang Ja Ru Gi (Korea) (pcb ver 3.03) (AT89c52 protected) + + + landgear + Landing Gear (Ver 4.2 O) + + + landgeara + Landing Gear (Ver 3.1 O) + + + landgearj + Landing Gear (Ver 4.2 J) + + + landgearja + Landing Gear (Ver 3.0 J) + + + landhigh + Landing High Japan + + + landmakr + Land Maker (Ver 2.01J 1998/06/01) + + + landmakrp + Land Maker (Ver 2.02O 1998/06/02) (Prototype) + + + lans2004 + Lansquenet 2004 (Shock Troopers - 2nd Squad bootleg) + + + lapbylap + Lap By Lap + + + laperla + La Perla Nera (Ver 2.0) + + + laperlag + La Perla Nera Gold (Ver 2.0) + + + laser + Astro Laser (bootleg of Space Laser) + + + laser2k1 + Laser 2001 (Ver 1.2) + + + laserbas + Laser Base (set 1) + + + laserbasa + Laser Base (set 2) + + + laserbat + Laser Battle + + + lasso + Lasso + + + lasstixx + Laser Strixx 2 + + + lastbank + Last Bank (v1.16) + + + lastbh + The Last Bounty Hunter v0.06 + + + lastblad + The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGM-2340) + + + lastbladh + The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGH-2340) + + + lastbld2 + The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (NGM-2430)(NGH-2430) + + + lastbrnx + Last Bronx (Export, Revision A) + + + lastbrnxj + Last Bronx (Japan, Revision A) + + + lastbrnxu + Last Bronx (USA, Revision A) + + + lastday + The Last Day (set 1) + + + lastdaya + The Last Day (set 2) + + + lastduel + Last Duel (US New Ver.) + + + lastduelb + Last Duel (bootleg) + + + lastduelj + Last Duel (Japan) + + + lastduelo + Last Duel (US Old Ver.) + + + lastfght + Last Fighting + + + lastfort + Last Fortress - Toride + + + lastforte + Last Fortress - Toride (Erotic, Rev C) + + + lastfortea + Last Fortress - Toride (Erotic, Rev A) + + + lastfortg + Last Fortress - Toride (German) + + + lastfortk + Last Fortress - Toride (Korea) + + + lastlap + Last Lap + + + lastmisn + Last Mission (US revision 6) + + + lastmisnj + Last Mission (Japan) + + + lastmisno + Last Mission (US revision 5) + + + lastsold + The Last Soldier (Korean release of The Last Blade) + + + laststar + The Last Starfighter (prototype) + + + lastsurv + Last Survivor (Japan, FD1094 317-0083) + + + lasvegas + Las Vegas, Nevada + + + lazarian + Lazarian + + + lazercmd + Lazer Command + + + lazrlord + Lazer Lord + + + lbeach + Long Beach + + + lbgrande + Libero Grande (Asia, LG2/VER.A) + + + lbgrandeja + Libero Grande (Japan, LG1/VER.A) + + + lbowling + League Bowling (NGM-019)(NGH-019) + + + lc_11 + League Champ (1.1) + + + lca + Lights...Camera...Action! + + + lca2 + Lights...Camera...Action! (rev.2) + + + ldrink + Lucky Drink (set 1) + + + ldrinka + Lucky Drink (set 2) + + + ldrun + Lode Runner (set 1) + + + ldrun2 + Lode Runner II - The Bungeling Strikes Back + + + ldrun3 + Lode Runner III - The Golden Labyrinth + + + ldrun3j + Lode Runner III - Majin No Fukkatsu + + + ldrun4 + Lode Runner IV - Teikoku Karano Dasshutsu + + + ldruna + Lode Runner (set 2) + + + le2 + Lethal Enforcers II: Gun Fighters (ver EAA) + + + le2j + Lethal Enforcers II: The Western (ver JAA) + + + le2u + Lethal Enforcers II: Gun Fighters (ver UAA) + + + leadang + Lead Angle (Japan) + + + leader + Leader + + + leaguemn + Yakyuu Kakutou League-Man (Japan) + + + lectrono + Lectronamo + + + ledstorm + Led Storm (US) + + + ledstorm2 + Led Storm Rally 2011 (US) + + + legend + Legend + + + legendb + Legion (bootleg of Legend) + + + legendoh + Legend of Heroes + + + legendos + Legend of Success Joe / Ashita no Joe Densetsu + + + legion + Legion - Spinner-87 (World ver 2.03) + + + legionna + Legionnaire (World) + + + legionnau + Legionnaire (US) + + + legiono + Chouji Meikyuu Legion (Japan bootleg ver 1.05) + + + legofair + Koukuu Kihei Monogatari - The Legend of Air Cavalry (Japan) + + + leking + Le King + + + lemans24 + Le Mans 24 (Revision B) + + + lemmings + Lemmings (US prototype) + + + lemnangl + Mahjong Lemon Angel (Japan) + + + leprechn + Leprechaun + + + leprechp + Leprechaun (Pacific) + + + leprgld + Leprechaun's Gold (Russia) + + + lethalen + Lethal Enforcers (ver UAE, 11/19/92 15:04) + + + lethaleneab + Lethal Enforcers (ver EAB, 10/14/92 19:53) + + + lethaleneae + Lethal Enforcers (ver EAE, 11/19/92 16:24) + + + lethalenj + Lethal Enforcers (ver JAD, 12/04/92 17:16) + + + lethalenua + Lethal Enforcers (ver UAA, 08/17/92 21:38) + + + lethalenub + Lethal Enforcers (ver UAB, 09/01/92 11:12) + + + lethalenux + Lethal Enforcers (ver unknown, US, 08/06/92 15:11, hacked/proto?) + + + lethalj + Lethal Justice + + + lethalth + Lethal Thunder (World) + + + levers + Levers + + + lghost + Laser Ghost (World, FD1094 317-0166) + + + lghostu + Laser Ghost (US, FD1094 317-0165) + + + lgp + Laser Grand Prix + + + lgtnfght + Lightning Fighters (World) + + + lgtnfghta + Lightning Fighters (Asia) + + + lgtnfghtu + Lightning Fighters (US) + + + lhaunt_10 + Lucky Haunter (090712 Entertainment) + + + lhaunt_11 + Lucky Haunter (100331 Entertainment) + + + lhaunt_2 + Lucky Haunter (030804 World) + + + lhaunt_4 + Lucky Haunter (031111 World) + + + lhaunt_4a + Lucky Haunter (bootleg, 031111, backdoor) + + + lhaunt_5 + Lucky Haunter (040216 World) + + + lhaunt_5a + Lucky Haunter (bootleg, 040216, backdoor) + + + lhaunt_6 + Lucky Haunter (040825 World) + + + lhaunt_6a + Lucky Haunter (bootleg, 040825, backdoor) + + + lhaunt_6b + Lucky Haunter (bootleg, 040825, VIDEO GAME-1 PB01) + + + lhaunt_6c + Lucky Haunter (bootleg, 040825, changed version text) + + + lhaunt_6d + Lucky Haunter (bootleg, 040825, LOTTOGAME (I)) + + + lhaunt_6e + Lucky Haunter (bootleg, 040825, LOTO PROGRAM V-LH2) + + + lhaunt_6f + Lucky Haunter (bootleg, 040825, LOTOS PB01) + + + lhaunt_7 + Lucky Haunter (070402 Russia) + + + lhaunt_8 + Lucky Haunter (070604 Russia) + + + lhb + Long Hu Bang (China, V035C) + + + lhb2 + Long Hu Bang II (Hong Kong, V185H) + + + lhbv33c + Long Hu Bang (China, V033C) + + + lhzb2 + Mahjong Long Hu Zheng Ba 2 (set 1) + + + lhzb2a + Mahjong Long Hu Zheng Ba 2 (VS221M) + + + lhzb3 + Long Hu Zheng Ba 3 + + + lhzb4 + Long Hu Zheng Ba 4 + + + liberate + Liberation + + + liberateb + Liberation (bootleg) + + + liberatr + Liberator (set 1) + + + liberatr2 + Liberator (set 2) + + + liblrabl + Libble Rabble + + + lifefrce + Lifeforce (US) + + + lifefrcej + Lifeforce (Japan) + + + lightbr + Light Bringer (Ver 2.2O 1994/04/08) + + + lightbrj + Light Bringer (Ver 2.1J 1994/02/18) + + + lightnin + Lightning + + + lindbios + Sega Lindbergh Bios + + + linkypip + Linky Pipe + + + liquidk + Liquid Kids (World) + + + liquidku + Liquid Kids (US) + + + lithero + Little Hero + + + littlerb + Little Robin + + + livegal + Live Gal (Japan 870530) + + + livequiz + Live Quiz Show + + + lizard + Pinball Lizard + + + lizwiz + Lizard Wizard + + + lkage + The Legend of Kage + + + lkageb + The Legend of Kage (bootleg set 1) + + + lkageb2 + The Legend of Kage (bootleg set 2) + + + lkageb3 + The Legend of Kage (bootleg set 3) + + + lkageo + The Legend of Kage (older) + + + lkageoo + The Legend of Kage (oldest) + + + llander + Lunar Lander (rev 2) + + + llander1 + Lunar Lander (rev 1) + + + llcharm + Lucky Lady's Charm (set 1) + + + llcharma + Lucky Lady's Charm (set 2) + + + lluck3x3 + Lucky Lady (3x3 deal) + + + lluck4x1 + Lucky Lady (4x1 aces) + + + lnc + Lock'n'Chase + + + lockload + Locked 'n Loaded (World) + + + lockloadu + Locked 'n Loaded (US, Dragon Gun conversion) + + + lockon + Lock-On (rev. E) + + + lockonc + Lock-On (rev. C) + + + locoboot + Loco-Motion (bootleg) + + + locomotn + Loco-Motion + + + locomotp + Locomotion + + + loderndf + Lode Runner - The Dig Fight (ver. B) + + + loderndfa + Lode Runner - The Dig Fight (ver. A) + + + loffire + Line of Fire / Bakudan Yarou (World, FD1094 317-0136) + + + loffirej + Line of Fire / Bakudan Yarou (Japan, FD1094 317-0134) + + + loffireu + Line of Fire / Bakudan Yarou (US, FD1094 317-0135) + + + logger + Logger + + + logicpr2 + Logic Pro 2 (Japan) + + + logicpro + Logic Pro (Japan) + + + loht + Legend of Hero Tonma + + + lohtb + Legend of Hero Tonma (unprotected bootleg) + + + lohtb2 + Legend of Hero Tonma (Japan, bootleg with i8751) + + + lohtj + Legend of Hero Tonma (Japan) + + + lol + Life of Luxury (Russia) + + + lomakai + Legend of Makai (World) + + + looper + Looper + + + looping + Looping + + + loopingv + Looping (Venture Line license, set 1) + + + loopingva + Looping (Venture Line license, set 2) + + + lordgun + Lord of Gun (USA) + + + lordofk + The Lord of King (Japan) + + + lortium + Lortium + + + lostspc + Lost in Space + + + losttomb + Lost Tomb (easy) + + + losttombh + Lost Tomb (hard) + + + lostwrld + Lost Worlds (Japan) + + + lostwrldo + Lost Worlds (Japan Old Ver.) + + + lostwrlp + Lost World + + + lostwsga + The Lost World (Revision A) + + + lotlot + Lot Lot + + + lotr + Lord Of The Rings, The (10.00) + + + lotr401 + Lord Of The Rings, The (4.01) + + + lotr410 + Lord Of The Rings, The (4.10) + + + lotr5 + Lord Of The Rings, The (5.00) + + + lotr501 + Lord Of The Rings, The (5.01) + + + lotr6 + Lord Of The Rings, The (6.00) + + + lotr7 + Lord Of The Rings, The (7.00) + + + lotr8 + Lord Of The Rings, The (8.00) + + + lotr9 + Lord Of The Rings, The (9.00) + + + lotr_fr + Lord Of The Rings, The (10.00 France) + + + lotr_fr401 + Lord Of The Rings, The (4.01 France) + + + lotr_fr410 + Lord Of The Rings, The (4.10 France) + + + lotr_fr5 + Lord Of The Rings, The (5.0 France) + + + lotr_fr501 + Lord Of The Rings, The (5.01 France) + + + lotr_fr6 + Lord Of The Rings, The (6.0 France) + + + lotr_fr7 + Lord Of The Rings, The (7.0 France) + + + lotr_fr8 + Lord Of The Rings, The (8.0 France) + + + lotr_fr9 + Lord Of The Rings, The (9.0 France) + + + lotr_gr + Lord Of The Rings, The (10.00 Germany) + + + lotr_gr401 + Lord Of The Rings, The (4.01 Germany) + + + lotr_gr410 + Lord Of The Rings, The (4.10 Germany) + + + lotr_gr5 + Lord Of The Rings, The (5.0 Germany) + + + lotr_gr501 + Lord Of The Rings, The (5.01 Germany) + + + lotr_gr6 + Lord Of The Rings, The (6.0 Germany) + + + lotr_gr7 + Lord Of The Rings, The (7.0 Germany) + + + lotr_gr8 + Lord Of The Rings, The (8.0 Germany) + + + lotr_gr9 + Lord Of The Rings, The (9.0 Germany) + + + lotr_it + Lord Of The Rings, The (10.00 Italy) + + + lotr_it401 + Lord Of The Rings, The (4.01 Italy) + + + lotr_it410 + Lord Of The Rings, The (4.10 Italy) + + + lotr_it5 + Lord Of The Rings, The (5.0 Italy) + + + lotr_it501 + Lord Of The Rings, The (5.01 Italy) + + + lotr_it6 + Lord Of The Rings, The (6.0 Italy) + + + lotr_it7 + Lord Of The Rings, The (7.0 Italy) + + + lotr_it8 + Lord Of The Rings, The (8.0 Italy) + + + lotr_it9 + Lord Of The Rings, The (9.0 Italy) + + + lotr_le + Lord Of The Rings, The (10.02 Limited Edition) + + + lotr_sp + Lord Of The Rings, The (10.00 Spain) + + + lotr_sp401 + Lord Of The Rings, The (4.01 Spain) + + + lotr_sp5 + Lord Of The Rings, The (5.0 Spain) + + + lotr_sp501 + Lord Of The Rings, The (5.01 Spain) + + + lotr_sp6 + Lord Of The Rings, The (6.0 Spain) + + + lotr_sp7 + Lord Of The Rings, The (7.0 Spain) + + + lotr_sp8 + Lord Of The Rings, The (8.0 Spain) + + + lotr_sp9 + Lord Of The Rings, The (9.0 Spain) + + + lottof2 + Lotto Fun 2 + + + lottofun + Lotto Fun + + + lovehous + Mahjong Love House [BET] (Japan 901024) + + + loverboy + Lover Boy + + + lovewin + Love To Win (Russia) + + + lpadv + Logic Pro Adventure (Japan) + + + lrescue + Lunar Rescue + + + lrescuem + Lunar Rescue (Model Racing bootleg, set 1) + + + lrescuem2 + Lunar Rescue (Model Racing bootleg, set 2) + + + lresort + Last Resort + + + lsasquad + Land Sea Air Squad / Riku Kai Kuu Saizensen + + + lsrcu_l2 + Laser Cue (L-2) + + + lsrquiz + Laser Quiz Italy + + + lsrquiz2 + Laser Quiz 2 Italy (v1.0) + + + ltcasinn + Little Casino (newer) + + + ltcasino + Little Casino (older) + + + luckboom + Lucky Boom + + + luckboomh + Lucky Boom (Hard Times hardware) + + + luckfoun + Lucky Fountain (Konami Endeavour) + + + luckgrln + Lucky Girl (newer Z180 based hardware) + + + luckshel + Lucky Shell (Russia) (Extrema) + + + lucky74 + Lucky 74 (bootleg, set 1) + + + lucky74a + Lucky 74 (bootleg, set 3) + + + lucky74b + Lucky 74 (bootleg, set 2) + + + lucky8 + New Lucky 8 Lines (set 1, W-4) + + + lucky8a + New Lucky 8 Lines (set 2, W-4) + + + lucky8b + New Lucky 8 Lines (set 3, W-4, extended gfx) + + + lucky8c + New Lucky 8 Lines (set 4, W-4) + + + lucky8d + New Lucky 8 Lines (set 5, W-4, main 40%, d-up 60%) + + + lucky8e + New Lucky 8 Lines (set 6, W-4, main 40%, d-up 60%) + + + lucky_l1 + Lucky Seven (L-1) + + + luckygrl + Lucky Girl? (Wing) + + + luckylad + Lucky Lady (Wing, encrypted) + + + luckyrlt + Lucky Roulette Plus (6-players, Spanish) + + + luckywld + Lucky & Wild + + + luckywldj + Lucky & Wild (Japan) + + + luctoday + Lucky Today + + + lunapark + Luna Park (set 1, dual program) + + + lunaparkb + Luna Park (set 2, dual program) + + + lunaparkc + Luna Park (set 3) + + + lunarba1 + Lunar Battle (prototype, earlier) + + + lunarbat + Lunar Battle (prototype, later) + + + lunelle + Lunelle + + + lupin3 + Lupin III (set 1) + + + lupin3a + Lupin III (set 2) + + + lupinsho + Lupin The Third - The Shooting (GDS-0018) + + + luplup + Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 3.0 / 990128) + + + luplup29 + Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 2.9 / 990108) + + + luptype + Lupin The Third - The Typing (Rev A) (GDS-0021A) + + + lvcards + Lovely Cards + + + lvgirl94 + Las Vegas Girl (Girl '94) + + + lvpoker + Lovely Poker [BET] + + + lw3_200 + Lethal Weapon 3 (2.00) + + + lw3_205 + Lethal Weapon 3 (2.05) + + + lw3_207 + Lethal Weapon 3 (2.07 Canada) + + + lw3_208 + Lethal Weapon 3 (2.08) + + + lwar_a83 + Laser War (8.3) + + + lwar_e90 + Laser War (9.0 Europe) + + + lwings + Legendary Wings (US set 1) + + + lwings2 + Legendary Wings (US set 2) + + + lwingsb + Legendary Wings (bootleg) + + + lwingsj + Ares no Tsubasa (Japan) + + + lzbal_l2 + Laser Ball (L-2) + + + lzbal_t2 + Laser Ball (T-2) + + + m1albsq + Albert Square (Maygay) v4.1 (M1A/B) + + + m1albsq1 + Albert Square (Maygay) v1.1 (M1A/B) + + + m1albsq1p + Albert Square (Maygay) v1.1 (Protocol) (M1A/B) + + + m1albsq2 + Albert Square (Maygay) v2.2 (M1A/B) + + + m1albsq3 + Albert Square (Maygay) v3.0 (M1A/B) + + + m1albsqp + Albert Square (Maygay) v4.1 (Protocol) (M1A/B) + + + m1alley + Alley Cat (Maygay) (M1A/B) + + + m1apollo + Apollo 9 (Maygay) vA.1 (Newer) (M1A/B) + + + m1apollo11 + Apollo 9 (Maygay) v11? (M1A/B) + + + m1apollo11b + Apollo 9 (Maygay) v11? (BwB Rebuild) (M1A/B) + + + m1apollo11p + Apollo 9 (Maygay) v11? (Protocol) (M1A/B) + + + m1apollo2 + Apollo 9 (Maygay) v2.1 (M1A/B) + + + m1apollo2p + Apollo 9 (Maygay) v2.1 (Protocol) (M1A/B) + + + m1apollo3 + Apollo 9 (Maygay) v3.1 (M1A/B) + + + m1apollo3p + Apollo 9 (Maygay) v3.1 (Protocol) (M1A/B) + + + m1apollo4 + Apollo 9 (Maygay) v4.1 (Newer) (M1A/B) + + + m1apollo4o + Apollo 9 (Maygay) v4.1 (Older, Token)(M1A/B) + + + m1apollo4p + Apollo 9 (Maygay) v4.1 (Newer) (Protocol) (M1A/B) + + + m1apollo5 + Apollo 9 (Maygay) v5.1 (M1A/B) + + + m1apollo5p + Apollo 9 (Maygay) v5.1 (Protocol) (M1A/B) + + + m1apollo7 + Apollo 9 (Maygay) v7.1 (M1A/B) + + + m1apollo7p + Apollo 9 (Maygay) v7.1 (Protocol) (M1A/B) + + + m1apollo8 + Apollo 9 (Maygay) v8.1 (M1A/B) + + + m1apollo8p + Apollo 9 (Maygay) v8.1 (Protocol) (M1A/B) + + + m1apollo9 + Apollo 9 (Maygay) v9.1 (M1A/B) + + + m1apollo9p + Apollo 9 (Maygay) v9.1 (Protocol) (M1A/B) + + + m1apolloa + Apollo 9 (Maygay) vA.1 (Older) (M1A/B) + + + m1apolloao + Apollo 9 (Maygay) vA.1 (Older, 15GBP) (M1A/B) + + + m1apolloap + Apollo 9 (Maygay) vA.1 (Older) (Protocol) (M1A/B) + + + m1apolloh + Apollo 9 (Maygay) vA.1 (Newer) (Hack?) (M1A/B) + + + m1apollop + Apollo 9 (Maygay) vA.1 (Newer) (Protocol) (M1A/B) + + + m1atunk + Random Runner (Avantime?) + + + m1bankbs + Bank Buster Club (Maygay) v2.9 (M1A/B) + + + m1bankbso + Bank Buster Club (Maygay) v2.8 (M1A/B) + + + m1bankbsp + Bank Buster Club (Maygay) v2.9 (Protocol) (M1A/B) + + + m1bankrl + Bank Roll (Maygay) v1.1 (M1A/B) + + + m1bankrl2p + Bank Roll (Maygay) v2.1 (Protocol) (M1A/B) + + + m1bankrlp + Bank Roll (Maygay) v1.1 (Protocol) (M1A/B) + + + m1bargn + Bar-gain (Maygay) v7.1 (M1A/B) + + + m1bargnc + Casino Bar-gain (Maygay) v5.1 (M1A/B) + + + m1bargncp + Casino Bar-gain (Maygay) v5.1 (Protocol)(M1A/B) + + + m1bargnp + Bar-gain (Maygay) v7.1 (Protocol) (M1A/B) + + + m1bghou + Big Ghoulies (Gemini) (M1A/B) (set 1) + + + m1bghoua + Big Ghoulies (Gemini) (M1A/B) (set 2) + + + m1bghoub + Big Ghoulies (Gemini) (M1A/B) (set 3) + + + m1bghouc + Big Ghoulies (Gemini) (M1A/B) (set 4) + + + m1bghoud + Big Ghoulies (Gemini) (M1A/B) (set 5) + + + m1bghoue + Big Ghoulies (Gemini) (M1A/B) (set 6) + + + m1bghouf + Big Ghoulies (Gemini) (M1A/B) (set 7) + + + m1bghoug + Big Ghoulies (Gemini) (M1A/B) (set 8) + + + m1bigdel + Big Deal (Maygay) (M1A/B) + + + m1bignit + Mike Reid's Big Night Out (Maygay) (M1A/B) (set 1) + + + m1bignita + Mike Reid's Big Night Out (Maygay) (M1A/B) (set 2) + + + m1bignitb + Mike Reid's Big Night Out (Maygay) (M1A/B) (set 3) + + + m1bignitc + Mike Reid's Big Night Out (Maygay) (M1A/B) (set 4) + + + m1blkhol + Black Hole (Dutch) (Maygay) (M1A/B) + + + m1bluemx + Blue Max (Maygay) v2.1 (M1A/B) + + + m1bluemxp + Blue Max (Maygay) v2.1 (Protocol) (M1A/B) + + + m1bondi + Bondi Beach (Maygay) v1.1 (Newer) (M1A/B) + + + m1bondi1 + Bondi Beach (Maygay) v1.1 (M1A/B) + + + m1bondi1p + Bondi Beach (Maygay) v1.1 (Protocol) (M1A/B) + + + m1bondi2 + Bondi Beach (Maygay) v2.1 (M1A/B) + + + m1bondi2p + Bondi Beach (Maygay) v2.1 (Protocol) (M1A/B) + + + m1bondi2po + Bondi Beach (Maygay) v2.1 (Older) (Protocol) (M1A/B) + + + m1bondi3 + Bondi Beach (Maygay) v3.1 (M1A/B) + + + m1bondi4 + Bondi Beach (Maygay) v4.1 (M1A/B) + + + m1bondi4p + Bondi Beach (Maygay) v4.1 (Protocol) (M1A/B) + + + m1bondip + Bondi Beach (Maygay) v1.1 (Newer) (Protocol) (M1A/B) + + + m1bountc + Bounty Hunter Club (Maygay) v1.3 (M1A/B) + + + m1bountcp + Bounty Hunter Club (Maygay) v1.3 (Protocol) (M1A/B) + + + m1calyps + Calypso (Maygay) (M1A/B) (set 1) + + + m1calypsa + Calypso (Maygay) (M1A/B) (set 2) + + + m1calypsb + Calypso (Maygay) (M1A/B) (set 3) + + + m1casclb + Casino Club (Maygay) v1.2 (M1A/B) + + + m1casclb1 + Casino Club (Maygay) v1.1 (M1A/B) + + + m1casclbp + Casino Club (Maygay) v1.2 (Protocol) (M1A/B) + + + m1casgcl + Casino Gambler Club (Maygay) v1.2 (M1A/B) + + + m1casgclp + Casino Gambler Club (Maygay) v1.2 (Protocol) (M1A/B) + + + m1cashc + Cash Classic (Maygay) (M1A/B) (set 1) + + + m1cashca + Cash Classic (Maygay) (M1A/B) (set 2) + + + m1cashln + Cash Lines (Maygay) (M1A/B) + + + m1casroy + Casino Royale Club (Maygay) v1.2 (M1A/B) + + + m1casroy1 + Casino Royale Club (Maygay) v1.1 (M1A/B) + + + m1casroyp + Casino Royale Club (Maygay) v1.2 (Protocol) (M1A/B) + + + m1chain + Chain Reaction (Maygay) (M1A/B) + + + m1cik + Cash Is King (Maygay) v11? (M1A/B) + + + m1cik11 + Cash Is King (Maygay) v1.1 (M1A/B) + + + m1cik11n + Cash Is King (Maygay) v1.1 (alternate) (M1A/B) + + + m1cik11np + Cash Is King (Maygay) v1.1 (alternate,Protocol) (M1A/B) + + + m1cik11p + Cash Is King (Maygay) v1.1 (Protocol) (M1A/B) + + + m1cik12 + Cash Is King (Maygay) v1.2 (M1A/B) + + + m1cik21 + Cash Is King (Maygay) v2.1 (M1A/B) + + + m1cik21p + Cash Is King (Maygay) v2.1 (Protocol) (M1A/B) + + + m1cik31 + Cash Is King (Maygay) v3.1 (M1A/B) + + + m1cik31p + Cash Is King (Maygay) v3.1 (Protocol) (M1A/B) + + + m1cik41 + Cash Is King (Maygay) v4.1 (M1A/B) + + + m1cik41p + Cash Is King (Maygay) v4.1 (Protocol) (M1A/B) + + + m1cik51 + Cash Is King (Maygay) v5.1 (M1A/B) + + + m1cik51o + Cash Is King (Maygay) v5.1 (Older) (M1A/B) + + + m1cik51p + Cash Is King (Maygay) v5.1 (Protocol) (M1A/B) + + + m1cikh + Cash Is King (Maygay) v11? (Hack?) (M1A/B) + + + m1cikp + Cash Is King (Maygay) v11? (Protocol) (M1A/B) + + + m1clbfvr + Club Fever (Maygay) v1.1 (M1A/B) + + + m1clbfvrp + Club Fever (Maygay) v1.1 (Protocol) (M1A/B) + + + m1cluecb + Cluedo Club (Maygay) v3.1 (M1A/B) + + + m1cluecb1 + Cluedo Club (Maygay) v1.1 (M1A/B) + + + m1cluecb1p + Cluedo Club (Maygay) v1.1 (Protocol) (M1A/B) + + + m1cluecb2 + Cluedo Club (Maygay) v2.1 (M1A/B) + + + m1cluecb2p + Cluedo Club (Maygay) v2.1 (Protocol) (M1A/B) + + + m1cluecbp + Cluedo Club (Maygay) v3.1 (Protocol) (M1A/B) + + + m1cluedo + Cluedo (Maygay) v6.1 (M1A/B) + + + m1cluedo1 + Cluedo (Maygay) v1.1 (M1A/B) + + + m1cluedo1h + Cluedo (Maygay) v1.1 (Hack?) (M1A/B) + + + m1cluedo1p + Cluedo (Maygay) v1.1 (Protocol) (M1A/B) + + + m1cluedo3 + Cluedo (Maygay) v3.1 (M1A/B) + + + m1cluedo3h + Cluedo (Maygay) v3.1 (Hack?) (M1A/B) + + + m1cluedo3p + Cluedo (Maygay) v3.1 (Protocol) (M1A/B) + + + m1cluedo4 + Cluedo (Maygay) v4.1 (M1A/B) + + + m1cluedo4p + Cluedo (Maygay) v4.1 (Protocol) (M1A/B) + + + m1cluedo5 + Cluedo (Maygay) v5.1 (M1A/B) + + + m1cluedo5p + Cluedo (Maygay) v5.1 (Protocol) (M1A/B) + + + m1cluedob1 + Cluedo (Maygay/BwB) v1.1 (M1A/B) + + + m1cluedob1h + Cluedo (Maygay/BwB) v1.1 (Hack?) (M1A/B) + + + m1cluedob1p + Cluedo (Maygay/BwB) v1.1 (Protocol) (M1A/B) + + + m1cluedob2 + Cluedo (Maygay/BwB) v2.1 (M1A/B) + + + m1cluedob2h + Cluedo (Maygay/BwB) v2.1 (Hack?) (M1A/B) + + + m1cluedob2p + Cluedo (Maygay/BwB) v2.1 (Protocol) (M1A/B) + + + m1cluedoi + Cluedo (Maygay) v7.2 (Isle of Man) (M1A/B) + + + m1cluedoip + Cluedo (Maygay) v7.2 (Isle of Man) (Protocol) (M1A/B) + + + m1cluedon + Cluedo (Maygay) v1.2 (Newer) (M1A/B) + + + m1cluedonp + Cluedo (Maygay) v1.2 (Newer) (Protocol) (M1A/B) + + + m1cluedop + Cluedo (Maygay) v6.1 (Protocol) (M1A/B) + + + m1cluesh + Super Cluedo Showcase (Maygay) v1.2 (M1A/B) + + + m1cluesho + Super Cluedo Showcase (Maygay) v1.2 (Older) (M1A/B) + + + m1clueshop + Super Cluedo Showcase (Maygay) v1.2 (Older) (Protocol) (M1A/B) + + + m1clueshp + Super Cluedo Showcase (Maygay) v1.2 (Protocol) (M1A/B) + + + m1cluess + Cluedo Super Sleuth (Maygay) v2.3 (M1A/B) + + + m1cluessa + Cluedo Super Sleuth (Maygay) v1.2 (Newer) (M1A/B) + + + m1cluessap + Cluedo Super Sleuth (Maygay) v1.2 (Newer) (Protocol) (M1A/B) + + + m1cluessb + Cluedo Super Sleuth (Maygay) v7.1 (Older) (M1A/B) + + + m1cluessbp + Cluedo Super Sleuth (Maygay) v7.1 (Older) (Protocol) (M1A/B) + + + m1cluessc + Cluedo Super Sleuth (Maygay) v6.1 (Older) (M1A/B) + + + m1cluesscp + Cluedo Super Sleuth (Maygay) v6.1 (Older) (Protocol) (M1A/B) + + + m1cluessd + Cluedo Super Sleuth (Maygay) v5.1 (Older) (M1A/B) + + + m1cluessdp + Cluedo Super Sleuth (Maygay) v5.1 (Older) (Protocol) (M1A/B) + + + m1cluesse + Cluedo Super Sleuth (Maygay) v2.1 (Older) (M1A/B) + + + m1cluessep + Cluedo Super Sleuth (Maygay) v2.1 (Older) (Protocol) (M1A/B) + + + m1cluessf + Cluedo Super Sleuth (Maygay) v1.1 (Older) (M1A/B) + + + m1cluessfp + Cluedo Super Sleuth (Maygay) v1.1 (Older) (Protocol) (M1A/B) + + + m1cluessg + Cluedo Super Sleuth (Maygay) v7.1 (15GBP Jackpot) (Older) (M1A/B) + + + m1cluessh + Cluedo Super Sleuth (Maygay) v2.3 (Newer) (Hack) (M1A/B) + + + m1cluessi + Cluedo Super Sleuth (Maygay) v2.1 (10GBP Jackpot) (Older) (M1A/B) + + + m1cluessj + Cluedo Super Sleuth (Maygay) v2.3 (5GBP Jackpot) (Older) (M1A/B) + + + m1cluessk + Cluedo Super Sleuth (Maygay) v1.2 (Older) (M1A/B) + + + m1cluessl + Cluedo Super Sleuth (Maygay) v4.1 (Older) (M1A/B) + + + m1cluesslp + Cluedo Super Sleuth (Maygay) v4.1 (Older) (Protocol) (M1A/B) + + + m1cluessm + Cluedo Super Sleuth (Maygay) v3.1 (Older) (M1A/B) + + + m1cluessmp + Cluedo Super Sleuth (Maygay) v3.1 (Older) (Protocol) (M1A/B) + + + m1cluessn + Cluedo Super Sleuth (Maygay) v1.1 (10GBP Jackpot) (Older) (M1A/B) + + + m1cluesso + Cluedo Super Sleuth (Maygay) v2.1 (Older, alternate) (M1A/B) + + + m1cluessop + Cluedo Super Sleuth (Maygay) v2.1 (Older, alternate) (Protocol) (M1A/B) + + + m1cluessp + Cluedo Super Sleuth (Maygay) v2.3 (Newer) (Protocol) (M1A/B) + + + m1cluessq + Cluedo Super Sleuth (Maygay) v5.1 (Older, alternate) (M1A/B) + + + m1cluessqp + Cluedo Super Sleuth (Maygay) v5.1 (Older, alternate) (Protocol) (M1A/B) + + + m1cluessr + Cluedo Super Sleuth (Maygay) v3.1 (Older, alternate) (M1A/B) + + + m1cluessrp + Cluedo Super Sleuth (Maygay) v3.1 (Older, alternate) (Protocol) (M1A/B) + + + m1cluesss + Cluedo Super Sleuth (Maygay) v4.1? (Older, alternate) (M1A/B) + + + m1cluesssp + Cluedo Super Sleuth (Maygay) v4.1? (Older, alternate) (Protocol) (M1A/B) + + + m1coderd + Code Red Club (Maygay) v2.1 (M1A/B) + + + m1coderdp + Code Red Club (Maygay) v2.1 (Protocol) (M1A/B) + + + m1coro + Coronation Street (Maygay) (M1A/B) + + + m1coro10h1 + Coronation Street (Maygay) v1.0 (Hack 1) (M1A/B) + + + m1coro10h2 + Coronation Street (Maygay) v1.0 (Hack 2) (M1A/B) + + + m1coro10h3 + Coronation Street (Maygay) v1.0 (Hack 3) (M1A/B) + + + m1coro11n + Coronation Street (Maygay) v1.1 (Newer) (M1A/B) + + + m1coro11np + Coronation Street (Maygay) v1.1 (Newer) (Protocol) (M1A/B) + + + m1coro12a + Coronation Street (Maygay) v1.2 (Newer, G?) (Alternate) (M1A/B) + + + m1coro12g + Coronation Street (Maygay) v1.2 (Newer, G?) (M1A/B) + + + m1coro12gp + Coronation Street (Maygay) v1.2 (Newer, G?) (Protocol) (M1A/B) + + + m1coro12n + Coronation Street (Maygay) v1.2 (Newer) (M1A/B) + + + m1coro12np + Coronation Street (Maygay) v1.2 (Newer) (Protocol) (M1A/B) + + + m1coro21n + Coronation Street (Maygay) v2.1 (Newer) (M1A/B) + + + m1coro21np + Coronation Street (Maygay) v2.1 (Newer) (Protocol) (M1A/B) + + + m1coro21v + Coronation Street (Maygay) v2.1 (Multivend) (M1A/B) + + + m1coro21vp + Coronation Street (Maygay) v2.1 (Multivend) (Protocol)(M1A/B) + + + m1coro22n + Coronation Street (Maygay) v2.2 (Newer) (M1A/B) + + + m1coro30h + Coronation Street (Maygay) v3.0 (Hack) (M1A/B) + + + m1coro31 + Coronation Street (Maygay) v3.1 (Older) (M1A/B) + + + m1coro31p + Coronation Street (Maygay) v3.1 (Older) (Protocol) (M1A/B) + + + m1coro32g + Coronation Street (Maygay) v3.2 (Newer, G?) (M1A/B) + + + m1coro32gh + Coronation Street (Maygay) v3.2 (Newer, G?) (Hack) (M1A/B) + + + m1coro32n + Coronation Street (Maygay) v3.2 (Newer) (M1A/B) + + + m1coro32np + Coronation Street (Maygay) v3.2 (Newer) (Protocol) (M1A/B) + + + m1coro81 + Coronation Street (Maygay) v8.1 (M1A/B) + + + m1coro81p + Coronation Street (Maygay) v8.1 (Protocol) (M1A/B) + + + m1corocb + Coronation Street Club (Maygay) v2.1 (M1A/B) + + + m1corocb1 + Coronation Street Club (Maygay) v1.1 (M1A/B) + + + m1corocb1p + Coronation Street Club (Maygay) v1.1 (Protocol)(M1A/B) + + + m1corocbp + Coronation Street Club (Maygay) v2.1 (Protocol) (M1A/B) + + + m1corop + Coronation Street (Maygay) (Protocol) (M1A/B) + + + m1cororr + Coronation Street - Rovers Return (Maygay) (set 1) (M1A/B) + + + m1cororra + Coronation Street - Rovers Return (Maygay) (set 1) (Alternate) (M1A/B) + + + m1cororrb + Coronation Street - Rovers Return (Maygay) (set 2) (M1A/B) + + + m1cororrb1 + Coronation Street - Rovers Return (Maygay) (set 2) (Alternate) (M1A/B) + + + m1cororrbh + Coronation Street - Rovers Return (Maygay) (set 2) (Hack) (M1A/B) + + + m1cororrbp + Coronation Street - Rovers Return (Maygay) (set 2) (Protocol) (M1A/B) + + + m1cororrc + Coronation Street - Rovers Return (Maygay) (set 3) (M1A/B) + + + m1cororrc1 + Coronation Street - Rovers Return (Maygay) (set 3) (Alternate 1) (M1A/B) + + + m1cororrc2 + Coronation Street - Rovers Return (Maygay) (set 3) (Alternate 2) (M1A/B) + + + m1cororrd + Coronation Street - Rovers Return (Maygay) (set 4) (M1A/B) + + + m1cororrdp + Coronation Street - Rovers Return (Maygay) (set 4) (Protocol) (M1A/B) + + + m1cororre + Coronation Street - Rovers Return (Maygay) (set 5) (M1A/B) + + + m1cororrf + Coronation Street - Rovers Return (Maygay) (set 6) (BW) (M1A/B) + + + m1cororrfp + Coronation Street - Rovers Return (Maygay) (set 6) (BW) (Protocol) (M1A/B) + + + m1cororrg + Coronation Street - Rovers Return (Maygay) (set 7) (M1A/B) + + + m1cororrgp + Coronation Street - Rovers Return (Maygay) (set 7) (Protocol) (M1A/B) + + + m1cororrh + Coronation Street - Rovers Return (Maygay) (set 8) (M1A/B) + + + m1cororri + Coronation Street - Rovers Return (Maygay) (set 9) (M1A/B) + + + m1cororrip + Coronation Street - Rovers Return (Maygay) (set 9) (Protocol) (M1A/B) + + + m1cororrj + Coronation Street - Rovers Return (Maygay) (set 10) (M1A/B) + + + m1cororrjp + Coronation Street - Rovers Return (Maygay) (set 10) (Protocol) (M1A/B) + + + m1cororrk + Coronation Street - Rovers Return (Maygay) (set 11) (M1A/B) + + + m1cororrl + Coronation Street - Rovers Return (Maygay) (set 12) (M1A/B) + + + m1cororrlp + Coronation Street - Rovers Return (Maygay) (set 12) (Protocol) (M1A/B) + + + m1cororrp + Coronation Street - Rovers Return (Maygay) (set 1) (Protocol) (M1A/B) + + + m1corosh + Coronation Street Showcase (Maygay) v1.1 (M1A/B) + + + m1coroshp + Coronation Street Showcase (Maygay) v1.1 (Protocol)(M1A/B) + + + m1criss + Criss Cross Club (Maygay) (Dutch) (M1A/B) + + + m1crzco + Crazy Cobra (Gemini) (M1A/B) (set 1) + + + m1crzcoa + Crazy Cobra (Gemini) (M1A/B) (set 2) + + + m1crzcob + Crazy Cobra (Gemini) (M1A/B) (set 3) + + + m1crzcoc + Crazy Cobra (Gemini) (M1A/B) (set 4) + + + m1crzcod + Crazy Cobra (Gemini) (M1A/B) (set 5) + + + m1crzcoe + Crazy Cobra (Gemini) (M1A/B) (set 6) + + + m1digdel + Diggers Delight (Global) (M1A/B) (set 1) + + + m1digdela + Diggers Delight (Global) (M1A/B) (set 2) + + + m1dkong + Donkey Kong (Maygay) v9.2 (M1A/B) + + + m1dkong11 + Donkey Kong (Maygay) v1.1 (M1A/B) + + + m1dkong11p + Donkey Kong (Maygay) v1.1 (M1A/B) (Protocol?) + + + m1dkong21 + Donkey Kong (Maygay) v2.1 (Older) (M1A/B) + + + m1dkong21n + Donkey Kong (Maygay) v2.1 (M1A/B) + + + m1dkong21p + Donkey Kong (Maygay) v2.1 (Older) (Protocol) (M1A/B) + + + m1dkong31 + Donkey Kong (Maygay) v3.1 (M1A/B) + + + m1dkong31p + Donkey Kong (Maygay) v3.1 (Protocol) (M1A/B) + + + m1dkong41 + Donkey Kong (Maygay) v4.1 (M1A/B) + + + m1dkong41p + Donkey Kong (Maygay) v4.1 (Protocol) (M1A/B) + + + m1dkong51 + Donkey Kong (Maygay) v5.1 (M1A/B) + + + m1dkong51p + Donkey Kong (Maygay) v5.1 (Protocol) (M1A/B) + + + m1dkong81 + Donkey Kong (Maygay) v8.1 (Older) (M1A/B) + + + m1dkong81n + Donkey Kong (Maygay) v8.1 (M1A/B) + + + m1dkong81na + Donkey Kong (Maygay) v8.1 (Alternate) (M1A/B) + + + m1dkong81np + Donkey Kong (Maygay) v8.1 (Protocol) (M1A/B) + + + m1dkong81p + Donkey Kong (Maygay) v8.1 (Older) (Protocol) (M1A/B) + + + m1dkong91 + Donkey Kong (Maygay) v9.1 (Older) (M1A/B) + + + m1dkong91a + Donkey Kong (Maygay) v9.1 (Older) (Alternate) (M1A/B) + + + m1dkong91h1 + Donkey Kong (Maygay) v9.1 (Older) (Hack 1) (M1A/B) + + + m1dkong91h2 + Donkey Kong (Maygay) v9.1 (Older) (Hack 2) (M1A/B) + + + m1dkong91n + Donkey Kong (Maygay) v9.1 (M1A/B) + + + m1dkong91na + Donkey Kong (Maygay) v9.1 (Alternate) (M1A/B) + + + m1dkong91np + Donkey Kong (Maygay) v9.1 (Protocol) (M1A/B) + + + m1dkong91p + Donkey Kong (Maygay) v9.1 (Older) (Protocol) (M1A/B) + + + m1dkonga + Donkey Kong (Maygay) v9.2 (Alternate) (M1A/B) + + + m1dkongp + Donkey Kong (Maygay) v9.2 (Protocol) (M1A/B) + + + m1dm4ev + Diamonds Are Forever Club (Maygay) v5.1 (M1A/B) + + + m1dm4ev11 + Diamonds Are Forever Club (Maygay) v1.1 (M1A/B) + + + m1dm4evp + Diamonds Are Forever Club (Maygay) v5.1 (Protocol) n(M1A/B) + + + m1dmnhrt + Diamond Hearts (Maygay) (M1A/B) + + + m1dxmono + Deluxe Monopoly (Maygay) v5.1 (M1A/B) + + + m1dxmono11 + Deluxe Monopoly (Maygay) v1.1 (M1A/B) + + + m1dxmono11m + Deluxe Monopoly (Maygay) v1.1 (Code M) (M1A/B) + + + m1dxmono11mb + Deluxe Monopoly (Maygay) v1.1 (Code M, Alternate) (M1A/B) + + + m1dxmono11o + Deluxe Monopoly (Maygay) v1.1 (Older) (M1A/B) + + + m1dxmono11p + Deluxe Monopoly (Maygay) v1.1 (Protocol) (M1A/B) + + + m1dxmono12 + Deluxe Monopoly (Maygay) v1.2 (M1A/B) + + + m1dxmono12a + Deluxe Monopoly (Maygay) v1.2 (Alternate) (M1A/B) + + + m1dxmono12n + Deluxe Monopoly (Maygay) v1.2 (Newer) (M1A/B) + + + m1dxmono12p + Deluxe Monopoly (Maygay) v1.2 (Protocol) (M1A/B) + + + m1dxmono21p + Deluxe Monopoly (Maygay) v2.1 (Protocol) (M1A/B) + + + m1dxmono30h + Deluxe Monopoly (Maygay) v3.0 (Hack) (M1A/B) + + + m1dxmono31b + Deluxe Monopoly (Maygay) v3.1 (BwB set) (M1A/B) + + + m1dxmono31h + Deluxe Monopoly (Maygay) v3.1 (Hack) (M1A/B) + + + m1dxmono31h2 + Deluxe Monopoly (Maygay) v3.1 (Alternate Hack) (M1A/B) + + + m1dxmono31p + Deluxe Monopoly (Maygay) v3.1 (Protocol) (M1A/B) + + + m1dxmono51 + Deluxe Monopoly (Maygay) v5.1 (Older) (M1A/B) + + + m1dxmono51o + Deluxe Monopoly (Maygay) v5.1 (Older) (M1A/B) (alt?) + + + m1dxmono51p + Deluxe Monopoly (Maygay) v5.1 (Older) (Protocol) (M1A/B) + + + m1dxmonop + Deluxe Monopoly (Maygay) v5.1 (Protocol) (M1A/B) + + + m1eastnd + Eastenders (Maygay) (M1A/B) (set 1) + + + m1eastnd0 + Eastenders (Maygay) (M1A/B) (set 28) + + + m1eastnd1 + Eastenders (Maygay) (M1A/B) (set 29) + + + m1eastnd2 + Eastenders (Maygay) (M1A/B) (set 30) + + + m1eastnd3 + Eastenders (Maygay) (M1A/B) (set 31) + + + m1eastnd4 + Eastenders (Maygay) (M1A/B) (set 32) + + + m1eastnd5 + Eastenders (Maygay) (M1A/B) (set 33) + + + m1eastnd6 + Eastenders (Maygay) (M1A/B) (set 34) + + + m1eastnd7 + Eastenders (Maygay) (M1A/B) (set 35) + + + m1eastnd8 + Eastenders (Maygay) (M1A/B) (set 36) + + + m1eastnd9 + Eastenders (Maygay) (M1A/B) (set 37) + + + m1eastnda + Eastenders (Maygay) (M1A/B) (set 2) + + + m1eastndaa + Eastenders (Maygay) (M1A/B) (set 38) + + + m1eastndab + Eastenders (Maygay) (M1A/B) (set 39) + + + m1eastndac + Eastenders (Maygay) (M1A/B) (set 40) + + + m1eastndad + Eastenders (Maygay) (M1A/B) (set 41) + + + m1eastndae + Eastenders (Maygay) (M1A/B) (set 42) + + + m1eastndaf + Eastenders (Maygay) (M1A/B) (set 43) + + + m1eastndb + Eastenders (Maygay) (M1A/B) (set 3) + + + m1eastndc + Eastenders (Maygay) (M1A/B) (set 4) + + + m1eastndd + Eastenders (Maygay) (M1A/B) (set 5) + + + m1eastnde + Eastenders (Maygay) (M1A/B) (set 6) + + + m1eastndf + Eastenders (Maygay) (M1A/B) (set 7) + + + m1eastndg + Eastenders (Maygay) (M1A/B) (set 8) + + + m1eastndh + Eastenders (Maygay) (M1A/B) (set 9) + + + m1eastndi + Eastenders (Maygay) (M1A/B) (set 10) + + + m1eastndj + Eastenders (Maygay) (M1A/B) (set 11) + + + m1eastndk + Eastenders (Maygay) (M1A/B) (set 12) + + + m1eastndl + Eastenders (Maygay) (M1A/B) (set 13) + + + m1eastndn + Eastenders (Maygay) (M1A/B) (set 15) + + + m1eastndp + Eastenders (Maygay) (M1A/B) (set 17) + + + m1eastndq + Eastenders (Maygay) (M1A/B) (set 18) + + + m1eastndr + Eastenders (Maygay) (M1A/B) (set 19) + + + m1eastnds + Eastenders (Maygay) (M1A/B) (set 20) + + + m1eastndt + Eastenders (Maygay) (M1A/B) (set 21) + + + m1eastndu + Eastenders (Maygay) (M1A/B) (set 22) + + + m1eastndv + Eastenders (Maygay) (M1A/B) (set 23) + + + m1eastndw + Eastenders (Maygay) (M1A/B) (set 24) + + + m1eastndx + Eastenders (Maygay) (M1A/B) (set 25) + + + m1eastndy + Eastenders (Maygay) (M1A/B) (set 26) + + + m1eastndz + Eastenders (Maygay) (M1A/B) (set 27) + + + m1eastqv + Eastenders - Queen Vic (Maygay) (M1A/B) (set 1) + + + m1eastqv0 + Eastenders - Queen Vic (Maygay) (M1A/B) (set 28) + + + m1eastqv1 + Eastenders - Queen Vic (Maygay) (M1A/B) (set 29) + + + m1eastqv2 + Eastenders - Queen Vic (Maygay) (M1A/B) (set 30) + + + m1eastqv3 + Eastenders - Queen Vic (Maygay) (M1A/B) (set 31) + + + m1eastqv5 + Eastenders - Queen Vic (Maygay) (M1A/B) (set 33) + + + m1eastqv6 + Eastenders - Queen Vic (Maygay) (M1A/B) (set 34) + + + m1eastqv7 + Eastenders - Queen Vic (Maygay) (M1A/B) (set 35) + + + m1eastqv8 + Eastenders - Queen Vic (Maygay) (M1A/B) (set 36) + + + m1eastqva + Eastenders - Queen Vic (Maygay) (M1A/B) (set 2) + + + m1eastqvaa + Eastenders - Queen Vic (Maygay) (M1A/B) (set 38) + + + m1eastqvb + Eastenders - Queen Vic (Maygay) (M1A/B) (set 3) + + + m1eastqvc + Eastenders - Queen Vic (Maygay) (M1A/B) (set 4) + + + m1eastqvd + Eastenders - Queen Vic (Maygay) (M1A/B) (set 5) + + + m1eastqvf + Eastenders - Queen Vic (Maygay) (M1A/B) (set 7) + + + m1eastqvg + Eastenders - Queen Vic (Maygay) (M1A/B) (set 8) + + + m1eastqvh + Eastenders - Queen Vic (Maygay) (M1A/B) (set 9) + + + m1eastqvi + Eastenders - Queen Vic (Maygay) (M1A/B) (set 10) + + + m1eastqvj + Eastenders - Queen Vic (Maygay) (M1A/B) (set 11) + + + m1eastqvk + Eastenders - Queen Vic (Maygay) (M1A/B) (set 12) + + + m1eastqvl + Eastenders - Queen Vic (Maygay) (M1A/B) (set 13) + + + m1eastqvm + Eastenders - Queen Vic (Maygay) (M1A/B) (set 14) + + + m1eastqvn + Eastenders - Queen Vic (Maygay) (M1A/B) (set 15) + + + m1eastqvo + Eastenders - Queen Vic (Maygay) (M1A/B) (set 16) + + + m1eastqvp + Eastenders - Queen Vic (Maygay) (M1A/B) (set 17) + + + m1eastqvq + Eastenders - Queen Vic (Maygay) (M1A/B) (set 18) + + + m1eastqvr + Eastenders - Queen Vic (Maygay) (M1A/B) (set 19) + + + m1eastqvs + Eastenders - Queen Vic (Maygay) (M1A/B) (set 20) + + + m1eastqvt + Eastenders - Queen Vic (Maygay) (M1A/B) (set 21) + + + m1eastqvu + Eastenders - Queen Vic (Maygay) (M1A/B) (set 22) + + + m1eastqvv + Eastenders - Queen Vic (Maygay) (M1A/B) (set 23) + + + m1eastqvw + Eastenders - Queen Vic (Maygay) (M1A/B) (set 24) + + + m1eastqvx + Eastenders - Queen Vic (Maygay) (M1A/B) (set 25) + + + m1eastqvy + Eastenders - Queen Vic (Maygay) (M1A/B) (set 26) + + + m1eastqvz + Eastenders - Queen Vic (Maygay) (M1A/B) (set 27) + + + m1expclb + Explorer Club (Maygay) (M1A/B) (set 2) + + + m1expclba + Explorer Club (Maygay) (M1A/B) (set 3) + + + m1fantfb + Fantasy Football (Maygay) (M1A/B) (set 1) + + + m1fantfba + Fantasy Football (Maygay) (M1A/B) (set 2) + + + m1fantfbb + Fantasy Football (Maygay) (M1A/B) (set 3) + + + m1fantfbc + Fantasy Football (Maygay) (M1A/B) (set 4) + + + m1fantfbd + Fantasy Football (Maygay) (M1A/B) (set 5) + + + m1fantfbf + Fantasy Football (Maygay) (M1A/B) (set 7) + + + m1fantfbg + Fantasy Football (Maygay) (M1A/B) (set 8) + + + m1fantfbh + Fantasy Football (Maygay) (M1A/B) (set 9) + + + m1fantfbj + Fantasy Football (Maygay) (M1A/B) (set 11) + + + m1fantfbk + Fantasy Football (Maygay) (M1A/B) (set 12) + + + m1fantfbl + Fantasy Football (Maygay) (M1A/B) (set 13) + + + m1fight + Fight Night (Maygay) (M1A/B) (set 1) + + + m1fighta + Fight Night (Maygay) (M1A/B) (set 2) + + + m1fightb + Fight Night (Maygay) (M1A/B) (set 3) + + + m1fightc + Fight Night (Maygay) (M1A/B) (set 4) + + + m1fightd + Fight Night (Maygay) (M1A/B) (set 5) + + + m1fighte + Fight Night (Maygay) (M1A/B) (set 6) + + + m1fightg + Fight Night (Maygay) (M1A/B) (set 8) + + + m1fighth + Fight Night (Maygay) (M1A/B) (set 9) + + + m1fighti + Fight Night (Maygay) (M1A/B) (set 10) + + + m1fightj + Fight Night (Maygay) (M1A/B) (set 11) + + + m1fightk + Fight Night (Maygay) (M1A/B) (set 12) + + + m1fightl + Fight Night (Maygay) (M1A/B) (set 13) + + + m1fightm + Fight Night (Maygay) (M1A/B) (set 14) + + + m1fightn + Fight Night (Maygay) (M1A/B) (set 15) + + + m1fighto + Fight Night (Maygay) (M1A/B) (set 16) + + + m1fightp + Fight Night (Maygay) (M1A/B) (set 17) + + + m1fightq + Fight Night (Maygay) (M1A/B) (set 18) + + + m1fightr + Fight Night (Maygay) (M1A/B) (set 19) + + + m1fights + Fight Night (Maygay) (M1A/B) (set 20) + + + m1fightt + Fight Night (Maygay) (M1A/B) (set 21) + + + m1fightu + Fight Night (Maygay) (M1A/B) (set 22) + + + m1fightv + Fight Night (Maygay) (M1A/B) (set 23) + + + m1fightw + Fight Night (Maygay) (M1A/B) (set 24) + + + m1fightx + Fight Night (Maygay) (M1A/B) (set 25) + + + m1fivest + Five Star (Dutch) (Maygay) (M1A/B) + + + m1frexpl + Fruit Explosion (Maygay) (M1A/B) (set 1) + + + m1frexpla + Fruit Explosion (Maygay) (M1A/B) (set 2) + + + m1frexplc + Fruit Explosion (Maygay) (M1A/B) (set 4) + + + m1frexpld + Fruit Explosion (Maygay) (M1A/B) (set 5) + + + m1frexple + Fruit Explosion (Maygay) (M1A/B) (set 6) + + + m1frexplg + Fruit Explosion (Maygay) (M1A/B) (set 8) + + + m1frexplh + Fruit Explosion (Maygay) (M1A/B) (set 9) + + + m1frexpli + Fruit Explosion (Maygay) (M1A/B) (set 10) + + + m1frexplj + Fruit Explosion (Maygay) (M1A/B) (set 11) + + + m1frexplk + Fruit Explosion (Maygay) (M1A/B) (set 12) + + + m1frexpll + Fruit Explosion (Maygay) (M1A/B) (set 13) + + + m1frexplm + Fruit Explosion (Maygay) (M1A/B) (set 14) + + + m1frexpln + Fruit Explosion (Maygay) (M1A/B) (set 15) + + + m1frexplo + Fruit Explosion (Maygay) (M1A/B) (set 16) + + + m1frexplp + Fruit Explosion (Maygay) (M1A/B) (set 17) + + + m1frexplq + Fruit Explosion (Maygay) (M1A/B) (set 18) + + + m1frexplr + Fruit Explosion (Maygay) (M1A/B) (set 19) + + + m1frexpls + Fruit Explosion (Maygay) (M1A/B) (set 20) + + + m1frexplt + Fruit Explosion (Maygay) (M1A/B) (set 21) + + + m1frexplu + Fruit Explosion (Maygay) (M1A/B) (set 22) + + + m1frexplv + Fruit Explosion (Maygay) (M1A/B) (set 23) + + + m1glad + Gladiators (Maygay) (M1A/B) (set 1) + + + m1glad0 + Gladiators (Maygay) (M1A/B) (set 28) + + + m1glad1 + Gladiators (Maygay) (M1A/B) (set 29) + + + m1glada + Gladiators (Maygay) (M1A/B) (set 2) + + + m1gladb + Gladiators (Maygay) (M1A/B) (set 3) + + + m1gladc + Gladiators (Maygay) (M1A/B) (set 4) + + + m1gladd + Gladiators (Maygay) (M1A/B) (set 5) + + + m1glade + Gladiators (Maygay) (M1A/B) (set 6) + + + m1gladf + Gladiators (Maygay) (M1A/B) (set 7) + + + m1gladg + Gladiators (Maygay) (M1A/B) (set 8) + + + m1gladh + Gladiators (Maygay) (M1A/B) (set 9) + + + m1gladj + Gladiators (Maygay) (M1A/B) (set 11) + + + m1gladk + Gladiators (Maygay) (M1A/B) (set 12) + + + m1gladl + Gladiators (Maygay) (M1A/B) (set 13) + + + m1gladm + Gladiators (Maygay) (M1A/B) (set 14) + + + m1gladn + Gladiators (Maygay) (M1A/B) (set 15) + + + m1glado + Gladiators (Maygay) (M1A/B) (set 16) + + + m1gladp + Gladiators (Maygay) (M1A/B) (set 17) + + + m1gladq + Gladiators (Maygay) (M1A/B) (set 18) + + + m1gladr + Gladiators (Maygay) (M1A/B) (set 19) + + + m1glads + Gladiators (Maygay) (M1A/B) (set 20) + + + m1gladt + Gladiators (Maygay) (M1A/B) (set 21) + + + m1gladu + Gladiators (Maygay) (M1A/B) (set 22) + + + m1gladv + Gladiators (Maygay) (M1A/B) (set 23) + + + m1gladw + Gladiators (Maygay) (M1A/B) (set 24) + + + m1gladx + Gladiators (Maygay) (M1A/B) (set 25) + + + m1glady + Gladiators (Maygay) (M1A/B) (set 26) + + + m1gladz + Gladiators (Maygay) (M1A/B) (set 27) + + + m1gold10 + Golden 10 (German) (Maygay) (M1A/B) + + + m1goldng + Golden Nugget Club (Maygay) (M1A/B) (set 1) + + + m1goldnga + Golden Nugget Club (Maygay) (M1A/B) (set 2) + + + m1goldngb + Golden Nugget Club (Maygay) (M1A/B) (set 3) + + + m1goldngc + Golden Nugget Club (Maygay) (M1A/B) (set 4) + + + m1goldngd + Golden Nugget Club (Maygay) (M1A/B) (set 5) + + + m1goldnge + Golden Nugget Club (Maygay) (M1A/B) (set 6) + + + m1goldsv + Gold & Silver (Maygay) (M1A/B) (set 1) + + + m1goldsva + Gold & Silver (Maygay) (M1A/B) (set 2) + + + m1gresc + Great Escape, The (Maygay) (M1A/B) (set 1) + + + m1gresca + Great Escape, The (Maygay) (M1A/B) (set 2) + + + m1grescb + Great Escape, The (Maygay) (M1A/B) (set 3) + + + m1grescc + Great Escape, The (Maygay) (M1A/B) (set 4) + + + m1grescd + Great Escape, The (Maygay) (M1A/B) (set 5) + + + m1gresce + Great Escape, The (Maygay) (M1A/B) (set 6) + + + m1grescf + Great Escape, The (Maygay) (M1A/B) (set 7) + + + m1grescg + Great Escape, The (Maygay) (M1A/B) (set 8) + + + m1gresch + Great Escape, The (Maygay) (M1A/B) (set 9) + + + m1gresci + Great Escape, The (Maygay) (M1A/B) (set 10) + + + m1grescj + Great Escape, The (Maygay) (M1A/B) (set 11) + + + m1gresck + Great Escape, The (Maygay) (M1A/B) (set 12) + + + m1grescl + Great Escape, The (Maygay) (M1A/B) (set 13) + + + m1grescm + Great Escape, The (Maygay) (M1A/B) (set 14) + + + m1grescn + Great Escape, The (Maygay) (M1A/B) (set 15) + + + m1gresco + Great Escape, The (Maygay) (M1A/B) (set 16) + + + m1grescp + Great Escape, The (Maygay) (M1A/B) (set 17) + + + m1grescq + Great Escape, The (Maygay) (M1A/B) (set 18) + + + m1gskill + Greek Skill (Hitech Amusement) + + + m1guvnor + The Guvnor (Maygay) (M1A/B) (set 1) + + + m1guvnora + The Guvnor (Maygay) (M1A/B) (set 2) + + + m1guvnorb + The Guvnor (Maygay) (M1A/B) (set 3) + + + m1guvnorc + The Guvnor (Maygay) (M1A/B) (set 4) + + + m1guvnord + The Guvnor (Maygay) (M1A/B) (set 5) + + + m1guvnore + The Guvnor (Maygay) (M1A/B) (set 6) + + + m1guvnorf + The Guvnor (Maygay) (M1A/B) (set 7) + + + m1guvnorg + The Guvnor (Maygay) (M1A/B) (set 8) + + + m1guvnorh + The Guvnor (Maygay) (M1A/B) (set 9) + + + m1guvnori + The Guvnor (Maygay) (M1A/B) (set 10) + + + m1guvnorj + The Guvnor (Maygay) (M1A/B) (set 11) + + + m1guvnork + The Guvnor (Maygay) (M1A/B) (set 12) + + + m1guvnorl + The Guvnor (Maygay) (M1A/B) (set 13) + + + m1guvnorm + The Guvnor (Maygay) (M1A/B) (set 14) + + + m1guvnorn + The Guvnor (Maygay) (M1A/B) (set 15) + + + m1guvnoro + The Guvnor (Maygay) (M1A/B) (set 16) + + + m1guvnorp + The Guvnor (Maygay) (M1A/B) (set 17) + + + m1guvnorq + The Guvnor (Maygay) (M1A/B) (set 18) + + + m1guvnorr + The Guvnor (Maygay) (M1A/B) (set 19) + + + m1guvnors + The Guvnor (Maygay) (M1A/B) (set 20) + + + m1guvnort + The Guvnor (Maygay) (M1A/B) (set 21) + + + m1hiloc + Hi Lo Casino (Global) (M1A/B) (set 1) + + + m1hiloca + Hi Lo Casino (Global) (M1A/B) (set 2) + + + m1hotpot + Hot Pots (Maygay) (M1A/B) (set 1) + + + m1hotpot0 + Hot Pots (Maygay) (M1A/B) (set 28) + + + m1hotpotd + Hot Pots (Maygay) (M1A/B) (set 5) + + + m1hotpote + Hot Pots (Maygay) (M1A/B) (set 6) + + + m1hotpoth + Hot Pots (Maygay) (M1A/B) (set 9) + + + m1hotpoti + Hot Pots (Maygay) (M1A/B) (set 10) + + + m1hotpotj + Hot Pots (Maygay) (M1A/B) (set 11) + + + m1hotpotk + Hot Pots (Maygay) (M1A/B) (set 12) + + + m1hotpotl + Hot Pots (Maygay) (M1A/B) (set 13) + + + m1hotpotm + Hot Pots (Maygay) (M1A/B) (set 14) + + + m1hotpotn + Hot Pots (Maygay) (M1A/B) (set 15) + + + m1hotpoto + Hot Pots (Maygay) (M1A/B) (set 16) + + + m1hotpotp + Hot Pots (Maygay) (M1A/B) (set 17) + + + m1hotpotq + Hot Pots (Maygay) (M1A/B) (set 18) + + + m1hotpotr + Hot Pots (Maygay) (M1A/B) (set 19) + + + m1hotpots + Hot Pots (Maygay) (M1A/B) (set 20) + + + m1hotpott + Hot Pots (Maygay) (M1A/B) (set 21) + + + m1hotpotu + Hot Pots (Maygay) (M1A/B) (set 22) + + + m1hotpotv + Hot Pots (Maygay) (M1A/B) (set 23) + + + m1hotpotw + Hot Pots (Maygay) (M1A/B) (set 24) + + + m1hotpotx + Hot Pots (Maygay) (M1A/B) (set 25) + + + m1hotpoty + Hot Pots (Maygay) (M1A/B) (set 26) + + + m1hotpotz + Hot Pots (Maygay) (M1A/B) (set 27) + + + m1htclb + Hi Tension Club (Maygay) (M1A/B) (set 1) + + + m1htclba + Hi Tension Club (Maygay) (M1A/B) (set 2) + + + m1imclb + Instant Millionaire Club (Maygay) (M1A/B) (set 1) + + + m1imclba + Instant Millionaire Club (Maygay) (M1A/B) (set 2) + + + m1imclbb + Instant Millionaire Club (Maygay) (M1A/B) (set 3) + + + m1infern + Inferno (Maygay) (M1A/B) (set 1) + + + m1inferna + Inferno (Maygay) (M1A/B) (set 2) + + + m1infernb + Inferno (Maygay) (M1A/B) (set 3) + + + m1infernc + Inferno (Maygay) (M1A/B) (set 4) + + + m1infernd + Inferno (Maygay) (M1A/B) (set 5) + + + m1inferne + Inferno (Maygay) (M1A/B) (set 6) + + + m1infernf + Inferno (Maygay) (M1A/B) (set 7) + + + m1inferng + Inferno (Maygay) (M1A/B) (set 8) + + + m1infernh + Inferno (Maygay) (M1A/B) (set 9) + + + m1inferni + Inferno (Maygay) (M1A/B) (set 10) + + + m1infernj + Inferno (Maygay) (M1A/B) (set 11) + + + m1infernk + Inferno (Maygay) (M1A/B) (set 12) + + + m1infernl + Inferno (Maygay) (M1A/B) (set 13) + + + m1inwin + Instant Win (Maygay) (M1A/B) (set 1) + + + m1inwina + Instant Win (Maygay) (M1A/B) (set 2) + + + m1inwinb + Instant Win (Maygay) (M1A/B) (set 3) + + + m1inwinc + Instant Win (Maygay) (M1A/B) (set 4) + + + m1inwinf + Instant Win (Maygay) (M1A/B) (set 7) + + + m1inwinh + Instant Win (Maygay) (M1A/B) (set 9) + + + m1inwini + Instant Win (Maygay) (M1A/B) (set 10) + + + m1inwinj + Instant Win (Maygay) (M1A/B) (set 11) + + + m1inwink + Instant Win (Maygay) (M1A/B) (set 12) + + + m1inwinl + Instant Win (Maygay) (M1A/B) (set 13) + + + m1inwinm + Instant Win (Maygay) (M1A/B) (set 14) + + + m1inwinn + Instant Win (Maygay) (M1A/B) (set 15) + + + m1inwino + Instant Win (Maygay) (M1A/B) (set 16) + + + m1inwinp + Instant Win (Maygay) (M1A/B) (set 17) + + + m1inwinq + Instant Win (Maygay) (M1A/B) (set 18) + + + m1inwinr + Instant Win (Maygay) (M1A/B) (set 19) + + + m1inwins + Instant Win (Maygay) (M1A/B) (set 20) + + + m1inwint + Instant Win (Maygay) (M1A/B) (set 21) + + + m1inwinu + Instant Win (Maygay) (M1A/B) (set 22) + + + m1inwinv + Instant Win (Maygay) (M1A/B) (set 23) + + + m1inwinw + Instant Win (Maygay) (M1A/B) (set 24) + + + m1inwinx + Instant Win (Maygay) (M1A/B) (set 25) + + + m1itjob + Italian Job (Maygay) (M1A/B) (set 1) + + + m1itjobc + Italian Job (Maygay) (M1A/B) (set 4) + + + m1itjobd + Italian Job (Maygay) (M1A/B) (set 5) + + + m1itjobe + Italian Job (Maygay) (M1A/B) (set 6) + + + m1itjobf + Italian Job (Maygay) (M1A/B) (set 7) + + + m1itjobg + Italian Job (Maygay) (M1A/B) (set 8) + + + m1itjobh + Italian Job (Maygay) (M1A/B) (set 9) + + + m1itjobi + Italian Job (Maygay) (M1A/B) (set 10) + + + m1itjobj + Italian Job (Maygay) (M1A/B) (set 11) + + + m1itjobk + Italian Job (Maygay) (M1A/B) (set 12) + + + m1itjobl + Italian Job (Maygay) (M1A/B) (set 13) + + + m1itjobm + Italian Job (Maygay) (M1A/B) (set 14) + + + m1itjobn + Italian Job (Maygay) (M1A/B) (set 15) + + + m1itjobo + Italian Job (Maygay) (M1A/B) (set 16) + + + m1itjobp + Italian Job (Maygay) (M1A/B) (set 17) + + + m1itjobq + Italian Job (Maygay) (M1A/B) (set 18) + + + m1itjobr + Italian Job (Maygay) (M1A/B) (set 19) + + + m1itsko + It's A Knockout (Maygay) (M1A/B) (set 1) + + + m1itsko0 + It's A Knockout (Maygay) (M1A/B) (set 28) + + + m1itsko1 + It's A Knockout (Maygay) (M1A/B) (set 29) + + + m1itsko2 + It's A Knockout (Maygay) (M1A/B) (set 30) + + + m1itsko3 + It's A Knockout (Maygay) (M1A/B) (set 31) + + + m1itsko4 + It's A Knockout (Maygay) (M1A/B) (set 32) + + + m1itsko5 + It's A Knockout (Maygay) (M1A/B) (set 33) + + + m1itsko6 + It's A Knockout (Maygay) (M1A/B) (set 34) + + + m1itsko7 + It's A Knockout (Maygay) (M1A/B) (set 35) + + + m1itsko8 + It's A Knockout (Maygay) (M1A/B) (set 36) + + + m1itskoa + It's A Knockout (Maygay) (M1A/B) (set 2) + + + m1itskob + It's A Knockout (Maygay) (M1A/B) (set 3) + + + m1itskoc + It's A Knockout (Maygay) (M1A/B) (set 4) + + + m1itskod + It's A Knockout (Maygay) (M1A/B) (set 5) + + + m1itskoe + It's A Knockout (Maygay) (M1A/B) (set 6) + + + m1itskof + It's A Knockout (Maygay) (M1A/B) (set 7) + + + m1itskog + It's A Knockout (Maygay) (M1A/B) (set 8) + + + m1itskoh + It's A Knockout (Maygay) (M1A/B) (set 9) + + + m1itskoi + It's A Knockout (Maygay) (M1A/B) (set 10) + + + m1itskoj + It's A Knockout (Maygay) (M1A/B) (set 11) + + + m1itskok + It's A Knockout (Maygay) (M1A/B) (set 12) + + + m1itskol + It's A Knockout (Maygay) (M1A/B) (set 13) + + + m1itskom + It's A Knockout (Maygay) (M1A/B) (set 14) + + + m1itskon + It's A Knockout (Maygay) (M1A/B) (set 15) + + + m1itskoo + It's A Knockout (Maygay) (M1A/B) (set 16) + + + m1itskop + It's A Knockout (Maygay) (M1A/B) (set 17) + + + m1itskoq + It's A Knockout (Maygay) (M1A/B) (set 18) + + + m1itskor + It's A Knockout (Maygay) (M1A/B) (set 19) + + + m1itskos + It's A Knockout (Maygay) (M1A/B) (set 20) + + + m1itskot + It's A Knockout (Maygay) (M1A/B) (set 21) + + + m1itskou + It's A Knockout (Maygay) (M1A/B) (set 22) + + + m1itskov + It's A Knockout (Maygay) (M1A/B) (set 23) + + + m1itskow + It's A Knockout (Maygay) (M1A/B) (set 24) + + + m1itskox + It's A Knockout (Maygay) (M1A/B) (set 25) + + + m1itskoy + It's A Knockout (Maygay) (M1A/B) (set 26) + + + m1itskoz + It's A Knockout (Maygay) (M1A/B) (set 27) + + + m1jbond + James Bond (Maygay) (M1A/B) (set 1) + + + m1jbonda + James Bond (Maygay) (M1A/B) (set 2) + + + m1jbondb + James Bond (Maygay) (M1A/B) (set 3) + + + m1jbondc + James Bond (Maygay) (M1A/B) (set 4) + + + m1jbondd + James Bond (Maygay) (M1A/B) (set 5) + + + m1jbonde + James Bond (Maygay) (M1A/B) (set 6) + + + m1jbondf + James Bond (Maygay) (M1A/B) (set 7) + + + m1jbondg + James Bond (Maygay) (M1A/B) (set 8) + + + m1jbondh + James Bond (Maygay) (M1A/B) (set 9) + + + m1jbondi + James Bond (Maygay) (M1A/B) (set 10) + + + m1jbondj + James Bond (Maygay) (M1A/B) (set 11) + + + m1jbondk + James Bond (Maygay) (M1A/B) (set 12) + + + m1jbondl + James Bond (Maygay) (M1A/B) (set 13) + + + m1jbondm + James Bond (Maygay) (M1A/B) (set 14) + + + m1jbondn + James Bond (Maygay) (M1A/B) (set 15) + + + m1jbondo + James Bond (Maygay) (M1A/B) (set 16) + + + m1jbondp + James Bond (Maygay) (M1A/B) (set 17) + + + m1jbondq + James Bond (Maygay) (M1A/B) (set 18) + + + m1jdwins + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 1) + + + m1jdwinsa + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 2) + + + m1jdwinsb + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 3) + + + m1jdwinsc + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 4) + + + m1jdwinsd + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 5) + + + m1jdwinse + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 6) + + + m1jdwinsf + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 7) + + + m1jdwinsg + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 8) + + + m1jdwinsh + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 9) + + + m1jdwinsi + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 10) + + + m1jdwinsj + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 11) + + + m1jdwinsk + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 12) + + + m1jdwinsl + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 13) + + + m1jdwinsm + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 14) + + + m1jdwinsn + Jim Davison's Winning Streak (Maygay) (M1A/B) (set 15) + + + m1jpmult + Jackpot Multiplier (Maygay) (M1A/B) (set 1) + + + m1jpmulta + Jackpot Multiplier (Maygay) (M1A/B) (set 2) + + + m1jtjob + Just The Job (Global) (M1A/B) (set 1) + + + m1jtjoba + Just The Job (Global) (M1A/B) (set 2) + + + m1jtjobb + Just The Job (Global) (M1A/B) (set 3) + + + m1jtjobc + Just The Job (Global) (M1A/B) (set 4) + + + m1jtjobd + Just The Job (Global) (M1A/B) (set 5) + + + m1jtjobe + Just The Job (Global) (M1A/B) (set 6) + + + m1kingsw + King Of The Swingers (Global) (M1A/B) (set 1) + + + m1kingswa + King Of The Swingers (Global) (M1A/B) (set 2) + + + m1kingswb + King Of The Swingers (Global) (M1A/B) (set 3) + + + m1kingswc + King Of The Swingers (Global) (M1A/B) (set 4) + + + m1lca + Lights Camera Action (Global) (M1A/B) (set 1) + + + m1lcaa + Lights Camera Action (Global) (M1A/B) (set 2) + + + m1lcab + Lights Camera Action (Global) (M1A/B) (set 3) + + + m1lcac + Lights Camera Action (Global) (M1A/B) (set 4) + + + m1liveam + Living In America (Maygay) (M1A/B) (set 1) + + + m1liveama + Living In America (Maygay) (M1A/B) (set 2) + + + m1liveamb + Living In America (Maygay) (M1A/B) (set 3) + + + m1lotmil + Lottery Millionaire Club (Maygay) (M1A/B) (set 1) + + + m1lotmila + Lottery Millionaire Club (Maygay) (M1A/B) (set 2) + + + m1lotmilb + Lottery Millionaire Club (Maygay) (M1A/B) (set 3) + + + m1lotmilc + Lottery Millionaire Club (Maygay) (M1A/B) (set 4) + + + m1luckno + Lucky Numbers (Maygay) (M1A/B) (set 1) + + + m1lucknoa + Lucky Numbers (Maygay) (M1A/B) (set 2) + + + m1lucknob + Lucky Numbers (Maygay) (M1A/B) (set 3) + + + m1lucknoc + Lucky Numbers (Maygay) (M1A/B) (set 4) + + + m1lucknod + Lucky Numbers (Maygay) (M1A/B) (set 5) + + + m1lucknoe + Lucky Numbers (Maygay) (M1A/B) (set 6) + + + m1lucknof + Lucky Numbers (Maygay) (M1A/B) (set 7) + + + m1lucknog + Lucky Numbers (Maygay) (M1A/B) (set 8) + + + m1lucknoh + Lucky Numbers (Maygay) (M1A/B) (set 9) + + + m1lucknoi + Lucky Numbers (Maygay) (M1A/B) (set 10) + + + m1lucknoj + Lucky Numbers (Maygay) (M1A/B) (set 11) + + + m1lucknok + Lucky Numbers (Maygay) (M1A/B) (set 12) + + + m1lucknol + Lucky Numbers (Maygay) (M1A/B) (set 13) + + + m1lucknom + Lucky Numbers (Maygay) (M1A/B) (set 14) + + + m1lucknon + Lucky Numbers (Maygay) (M1A/B) (set 15) + + + m1lucknoo + Lucky Numbers (Maygay) (M1A/B) (set 16) + + + m1lucknop + Lucky Numbers (Maygay) (M1A/B) (set 17) + + + m1lucknoq + Lucky Numbers (Maygay) (M1A/B) (set 18) + + + m1lucknor + Lucky Numbers (Maygay) (M1A/B) (set 19) + + + m1lucknos + Lucky Numbers (Maygay) (M1A/B) (set 20) + + + m1luxor + Luxor Casino (Gemini) (M1A/B) (set 1) + + + m1luxora + Luxor Casino (Gemini) (M1A/B) (set 2) + + + m1luxorb + Luxor Casino (Gemini) (M1A/B) (set 3) + + + m1luxorc + Luxor Casino (Gemini) (M1A/B) (set 4) + + + m1magic + Magic Squares (Maygay) (M1A/B) (set 1) + + + m1magica + Magic Squares (Maygay) (M1A/B) (set 2) + + + m1magicb + Magic Squares (Maygay) (M1A/B) (set 3) + + + m1magicc + Magic Squares (Maygay) (M1A/B) (set 4) + + + m1manhat + Manhattan Skylines (Maygay) (M1A/B) + + + m1mb + Monkey Business (Global) (M1A/B) (set 1) + + + m1mba + Monkey Business (Global) (M1A/B) (set 2) + + + m1mbb + Monkey Business (Global) (M1A/B) (set 3) + + + m1mbc + Monkey Business (Global) (M1A/B) (set 4) + + + m1mbclb + Monkey Business Club (Global) (M1A/B) + + + m1monclb + Monopoly Club (Maygay) (M1A/B) (set 1) + + + m1monclba + Monopoly Club (Maygay) (M1A/B) (set 2) + + + m1monclbb + Monopoly Club (Maygay) (M1A/B) (set 3) + + + m1monclbc + Monopoly Club (Maygay) (M1A/B) (set 4) + + + m1monclbd + Monopoly Club (Maygay) (M1A/B) (set 5) + + + m1monclbe + Monopoly Club (Maygay) (M1A/B) (set 6) + + + m1monclbf + Monopoly Club (Maygay) (M1A/B) (set 7) + + + m1monclbg + Monopoly Club (Maygay) (M1A/B) (set 8) + + + m1monclbh + Monopoly Club (Maygay) (M1A/B) (set 9) + + + m1monclbi + Monopoly Club (Maygay) (M1A/B) (set 10) + + + m1monclbj + Monopoly Club (Maygay) (M1A/B) (set 11) + + + m1monclbk + Monopoly Club (Maygay) (M1A/B) (set 12) + + + m1monclbl + Monopoly Club (Maygay) (M1A/B) (set 13) + + + m1monclbm + Monopoly Club (Maygay) (M1A/B) (set 14) + + + m1moncls + Monopoly Classic (Maygay) (M1A/B) (set 1) + + + m1monclsa + Monopoly Classic (Maygay) (M1A/B) (set 2) + + + m1monclsb + Monopoly Classic (Maygay) (M1A/B) (set 3) + + + m1monclsc + Monopoly Classic (Maygay) (M1A/B) (set 4) + + + m1monclsd + Monopoly Classic (Maygay) (M1A/B) (set 5) + + + m1mongam + Money Game Club (Maygay) (M1A/B) (set 1) + + + m1mongama + Money Game Club (Maygay) (M1A/B) (set 2) + + + m1mongamb + Money Game Club (Maygay) (M1A/B) (set 3) + + + m1monmon + Money Money Money (Maygay) (M1A/B) (set 1) + + + m1monmona + Money Money Money (Maygay) (M1A/B) (set 2) + + + m1monmonb + Money Money Money (Maygay) (M1A/B) (set 3) + + + m1monmonc + Money Money Money (Maygay) (M1A/B) (set 4) + + + m1monmond + Money Money Money (Maygay) (M1A/B) (set 5) + + + m1monmone + Money Money Money (Maygay) (M1A/B) (set 6) + + + m1monmonf + Money Money Money (Maygay) (M1A/B) (set 7) + + + m1monmong + Money Money Money (Maygay) (M1A/B) (set 8) + + + m1monmonh + Money Money Money (Maygay) (M1A/B) (set 9) + + + m1monmoni + Money Money Money (Maygay) (M1A/B) (set 10) + + + m1monmonj + Money Money Money (Maygay) (M1A/B) (set 11) + + + m1monmonk + Money Money Money (Maygay) (M1A/B) (set 12) + + + m1monmonl + Money Money Money (Maygay) (M1A/B) (set 13) + + + m1monmonm + Money Money Money (Maygay) (M1A/B) (set 14) + + + m1monmonn + Money Money Money (Maygay) (M1A/B) (set 15) + + + m1monmono + Money Money Money (Maygay) (M1A/B) (set 16) + + + m1monmonp + Money Money Money (Maygay) (M1A/B) (set 17) + + + m1monmonq + Money Money Money (Maygay) (M1A/B) (set 18) + + + m1monmonr + Money Money Money (Maygay) (M1A/B) (set 19) + + + m1monmons + Money Money Money (Maygay) (M1A/B) (set 20) + + + m1monmont + Money Money Money (Maygay) (M1A/B) (set 21) + + + m1monmonu + Money Money Money (Maygay) (M1A/B) (set 22) + + + m1monmonv + Money Money Money (Maygay) (M1A/B) (set 23) + + + m1monmonw + Money Money Money (Maygay) (M1A/B) (set 24) + + + m1mono + Monopoly (Maygay) (M1A/B) (set 1) + + + m1mono0 + Monopoly (Maygay) (M1A/B) (set 28) + + + m1mono1 + Monopoly (Maygay) (M1A/B) (set 29) + + + m1mono2 + Monopoly (Maygay) (M1A/B) (set 30) + + + m1mono3 + Monopoly (Maygay) (M1A/B) (set 31) + + + m1mono4 + Monopoly (Maygay) (M1A/B) (set 32) + + + m1mono5 + Monopoly (Maygay) (M1A/B) (set 33) + + + m1mono6 + Monopoly (Maygay) (M1A/B) (set 34) + + + m1mono7 + Monopoly (Maygay) (M1A/B) (set 35) + + + m1mono8 + Monopoly (Maygay) (M1A/B) (set 36) + + + m1mono9 + Monopoly (Maygay) (M1A/B) (set 37) + + + m1monoa + Monopoly (Maygay) (M1A/B) (set 2) + + + m1monoaa + Monopoly (Maygay) (M1A/B) (set 38) + + + m1monoc + Monopoly (Maygay) (M1A/B) (set 4) + + + m1monod + Monopoly (Maygay) (M1A/B) (set 5) + + + m1monodt + Monopoly (Dutch) (Maygay) (M1A/B) + + + m1monoe + Monopoly (Maygay) (M1A/B) (set 6) + + + m1monof + Monopoly (Maygay) (M1A/B) (set 7) + + + m1monog + Monopoly (Maygay) (M1A/B) (set 8) + + + m1monoh + Monopoly (Maygay) (M1A/B) (set 9) + + + m1monoi + Monopoly (Maygay) (M1A/B) (set 10) + + + m1monok + Monopoly (Maygay) (M1A/B) (set 12) + + + m1monol + Monopoly (Maygay) (M1A/B) (set 13) + + + m1monom + Monopoly (Maygay) (M1A/B) (set 14) + + + m1monon + Monopoly (Maygay) (M1A/B) (set 15) + + + m1monoo + Monopoly (Maygay) (M1A/B) (set 16) + + + m1monop + Monopoly (Maygay) (M1A/B) (set 17) + + + m1monoq + Monopoly (Maygay) (M1A/B) (set 18) + + + m1monor + Monopoly (Maygay) (M1A/B) (set 19) + + + m1monos + Monopoly (Maygay) (M1A/B) (set 20) + + + m1monot + Monopoly (Maygay) (M1A/B) (set 21) + + + m1monou + Monopoly (Maygay) (M1A/B) (set 22) + + + m1monov + Monopoly (Maygay) (M1A/B) (set 23) + + + m1monow + Monopoly (Maygay) (M1A/B) (set 24) + + + m1monox + Monopoly (Maygay) (M1A/B) (set 25) + + + m1monoy + Monopoly (Maygay) (M1A/B) (set 26) + + + m1monoz + Monopoly (Maygay) (M1A/B) (set 27) + + + m1monstr + Monster Cash (Maygay) (M1A/B) (set 1) + + + m1monstra + Monster Cash (Maygay) (M1A/B) (set 2) + + + m1monstrb + Monster Cash (Maygay) (M1A/B) (set 3) + + + m1monstrc + Monster Cash (Maygay) (M1A/B) (set 4) + + + m1nhp + Noel's House Party (Maygay) (M1A/B) (set 1) + + + m1nhpa + Noel's House Party (Maygay) (M1A/B) (set 2) + + + m1nhpb + Noel's House Party (Maygay) (M1A/B) (set 3) + + + m1nhpc + Noel's House Party (Maygay) (M1A/B) (set 4) + + + m1nhpd + Noel's House Party (Maygay) (M1A/B) (set 5) + + + m1nhpe + Noel's House Party (Maygay) (M1A/B) (set 6) + + + m1nhpf + Noel's House Party (Maygay) (M1A/B) (set 7) + + + m1nhpg + Noel's House Party (Maygay) (M1A/B) (set 8) + + + m1nhph + Noel's House Party (Maygay) (M1A/B) (set 9) + + + m1nhpi + Noel's House Party (Maygay) (M1A/B) (set 10) + + + m1nhpj + Noel's House Party (Maygay) (M1A/B) (set 11) + + + m1nhpk + Noel's House Party (Maygay) (M1A/B) (set 12) + + + m1nhpl + Noel's House Party (Maygay) (M1A/B) (set 13) + + + m1nhpm + Noel's House Party (Maygay) (M1A/B) (set 14) + + + m1nudbnk + Nudge Banker (Maygay) (M1A/B) (set 1) + + + m1nudbnka + Nudge Banker (Maygay) (M1A/B) (set 2) + + + m1nudbnkb + Nudge Banker (Maygay) (M1A/B) (set 3) + + + m1nudbnkc + Nudge Banker (Maygay) (M1A/B) (set 4) + + + m1nudbnkd + Nudge Banker (Maygay) (M1A/B) (set 5) + + + m1nudbnke + Nudge Banker (Maygay) (M1A/B) (set 6) + + + m1nudbnkf + Nudge Banker (Maygay) (M1A/B) (set 7) + + + m1nudbnkg + Nudge Banker (Maygay) (M1A/B) (set 8) + + + m1nudbnkh + Nudge Banker (Maygay) (M1A/B) (set 9) + + + m1nudbnki + Nudge Banker (Maygay) (M1A/B) (set 10) + + + m1nudbnkj + Nudge Banker (Maygay) (M1A/B) (set 11) + + + m1nudbnkk + Nudge Banker (Maygay) (M1A/B) (set 12) + + + m1nudbnkl + Nudge Banker (Maygay) (M1A/B) (set 13) + + + m1nudbnkm + Nudge Banker (Maygay) (M1A/B) (set 14) + + + m1nudbnkn + Nudge Banker (Maygay) (M1A/B) (set 15) + + + m1nudbnko + Nudge Banker (Maygay) (M1A/B) (set 16) + + + m1nudbnkp + Nudge Banker (Maygay) (M1A/B) (set 17) + + + m1nudbnkq + Nudge Banker (Maygay) (M1A/B) (set 18) + + + m1nudbnkr + Nudge Banker (Maygay) (M1A/B) (set 19) + + + m1nudbnks + Nudge Banker (Maygay) (M1A/B) (set 20) + + + m1nudbnkt + Nudge Banker (Maygay) (M1A/B) (set 21) + + + m1nudbnku + Nudge Banker (Maygay) (M1A/B) (set 22) + + + m1nudbnkv + Nudge Banker (Maygay) (M1A/B) (set 23) + + + m1nudunl + Nudges Unlimited (Maygay) (M1A/B) (set 1) + + + m1nudunla + Nudges Unlimited (Maygay) (M1A/B) (set 2) + + + m1nudunlb + Nudges Unlimited (Maygay) (M1A/B) (set 3) + + + m1nudunlc + Nudges Unlimited (Maygay) (M1A/B) (set 4) + + + m1nudunld + Nudges Unlimited (Maygay) (M1A/B) (set 5) + + + m1nudunle + Nudges Unlimited (Maygay) (M1A/B) (set 6) + + + m1omega + Omega (Maygay) (M1A/B) (set 1) + + + m1omegaa + Omega (Maygay) (M1A/B) (set 2) + + + m1onbus + On The Buses (Maygay) (M1A/B) (set 1) + + + m1onbusa + On The Buses (Maygay) (M1A/B) (set 2) + + + m1onbusb + On The Buses (Maygay) (M1A/B) (set 3) + + + m1onbusc + On The Buses (Maygay) (M1A/B) (set 4) + + + m1onbusd + On The Buses (Maygay) (M1A/B) (set 5) + + + m1onbuse + On The Buses (Maygay) (M1A/B) (set 6) + + + m1onbusf + On The Buses (Maygay) (M1A/B) (set 7) + + + m1onbusg + On The Buses (Maygay) (M1A/B) (set 8) + + + m1onbush + On The Buses (Maygay) (M1A/B) (set 9) + + + m1onbusi + On The Buses (Maygay) (M1A/B) (set 10) + + + m1onbusj + On The Buses (Maygay) (M1A/B) (set 11) + + + m1onbusk + On The Buses (Maygay) (M1A/B) (set 12) + + + m1onbusl + On The Buses (Maygay) (M1A/B) (set 13) + + + m1onbusm + On The Buses (Maygay) (M1A/B) (set 14) + + + m1onbusn + On The Buses (Maygay) (M1A/B) (set 15) + + + m1onbuso + On The Buses (Maygay) (M1A/B) (set 16) + + + m1onbusp + On The Buses (Maygay) (M1A/B) (set 17) + + + m1ott + Over The Top (Maygay) (M1A/B) (set 1) + + + m1otta + Over The Top (Maygay) (M1A/B) (set 2) + + + m1piggy + Piggy Bank (Maygay) (M1A/B) (set 1) + + + m1piggya + Piggy Bank (Maygay) (M1A/B) (set 2) + + + m1piggyb + Piggy Bank (Maygay) (M1A/B) (set 3) + + + m1piggyc + Piggy Bank (Maygay) (M1A/B) (set 4) + + + m1pinkp + Pink Panther (Maygay) (M1A/B) (set 1) + + + m1pinkpa + Pink Panther (Maygay) (M1A/B) (set 2) + + + m1pinkpb + Pink Panther (Maygay) (M1A/B) (set 3) + + + m1pinkpc + Pink Panther (Maygay) (M1A/B) (set 4) + + + m1pinkpd + Pink Panther (Maygay) (M1A/B) (set 5) + + + m1pinkpe + Pink Panther (Maygay) (M1A/B) (set 6) + + + m1pinkpf + Pink Panther (Maygay) (M1A/B) (set 7) + + + m1pinkpg + Pink Panther (Maygay) (M1A/B) (set 8) + + + m1pinkph + Pink Panther (Maygay) (M1A/B) (set 9) + + + m1pinkpi + Pink Panther (Maygay) (M1A/B) (set 10) + + + m1pinkpj + Pink Panther (Maygay) (M1A/B) (set 11) + + + m1pinkpk + Pink Panther (Maygay) (M1A/B) (set 12) + + + m1pinkpl + Pink Panther (Maygay) (M1A/B) (set 13) + + + m1pinkpm + Pink Panther (Maygay) (M1A/B) (set 14) + + + m1pinkpn + Pink Panther (Maygay) (M1A/B) (set 15) + + + m1pinkpo + Pink Panther (Maygay) (M1A/B) (set 16) + + + m1pinkpp + Pink Panther (Maygay) (M1A/B) (set 17) + + + m1pinkpq + Pink Panther (Maygay) (M1A/B) (set 18) + + + m1pinkpr + Pink Panther (Maygay) (M1A/B) (set 19) + + + m1ppc + Pink Panther Club (Maygay) (M1A/B) (set 1) + + + m1ppca + Pink Panther Club (Maygay) (M1A/B) (set 2) + + + m1ppcb + Pink Panther Club (Maygay) (M1A/B) (set 3) + + + m1ppdt + Pink Panther (German) (Maygay) (M1A/B) + + + m1przclu + Prize Cluedo (Maygay) (M1A/B) (set 1) + + + m1przclua + Prize Cluedo (Maygay) (M1A/B) (set 2) + + + m1przclub + Prize Cluedo (Maygay) (M1A/B) (set 3) + + + m1przee + Prize Eastenders (Maygay) (M1A/B) (set 1) + + + m1przeea + Prize Eastenders (Maygay) (M1A/B) (set 2) + + + m1przeeb + Prize Eastenders (Maygay) (M1A/B) (set 3) + + + m1przeec + Prize Eastenders (Maygay) (M1A/B) (set 4) + + + m1races + A Day At The Races (Maygay) (M1A/B) (set 1) + + + m1racesa + A Day At The Races (Maygay) (M1A/B) (set 2) + + + m1racesb + A Day At The Races (Maygay) (M1A/B) (set 3) + + + m1racesc + A Day At The Races (Maygay) (M1A/B) (set 4) + + + m1reeldm + Reel Diamonds (Maygay) (M1A/B) (set 1) + + + m1reeldma + Reel Diamonds (Maygay) (M1A/B) (set 2) + + + m1reeldmb + Reel Diamonds (Maygay) (M1A/B) (set 3) + + + m1reeldmc + Reel Diamonds (Maygay) (M1A/B) (set 4) + + + m1reeldmd + Reel Diamonds (Maygay) (M1A/B) (set 5) + + + m1reeldme + Reel Diamonds (Maygay) (M1A/B) (set 6) + + + m1reeldmf + Reel Diamonds (Maygay) (M1A/B) (set 7) + + + m1reeldmg + Reel Diamonds (Maygay) (M1A/B) (set 8) + + + m1reeldmh + Reel Diamonds (Maygay) (M1A/B) (set 9) + + + m1reeldmi + Reel Diamonds (Maygay) (M1A/B) (set 10) + + + m1reeldmj + Reel Diamonds (Maygay) (M1A/B) (set 11) + + + m1reeldmk + Reel Diamonds (Maygay) (M1A/B) (set 12) + + + m1reeldml + Reel Diamonds (Maygay) (M1A/B) (set 13) + + + m1reeldmm + Reel Diamonds (Maygay) (M1A/B) (set 14) + + + m1reeldmn + Reel Diamonds (Maygay) (M1A/B) (set 15) + + + m1reeldmo + Reel Diamonds (Maygay) (M1A/B) (set 16) + + + m1retpp + Return Of The Pink Panther (Maygay) (M1A/B) (set 1) + + + m1retppa + Return Of The Pink Panther (Maygay) (M1A/B) (set 2) + + + m1retppb + Return Of The Pink Panther (Maygay) (M1A/B) (set 3) + + + m1retppc + Return Of The Pink Panther (Maygay) (M1A/B) (set 4) + + + m1retppd + Return Of The Pink Panther (Maygay) (M1A/B) (set 5) + + + m1search + Search Light (Maygay) (M1A/B) (set 1) + + + m1searcha + Search Light (Maygay) (M1A/B) (set 2) + + + m1searchb + Search Light (Maygay) (M1A/B) (set 3) + + + m1simps + The Simpsons (Maygay) (M1A/B) (set 1) + + + m1simpsa + The Simpsons (Maygay) (M1A/B) (set 2) + + + m1simpsb + The Simpsons (Maygay) (M1A/B) (set 3) + + + m1simpsc + The Simpsons (Maygay) (M1A/B) (set 4) + + + m1simpsd + The Simpsons (Maygay) (M1A/B) (set 5) + + + m1simpse + The Simpsons (Maygay) (M1A/B) (set 6) + + + m1simpsf + The Simpsons (Maygay) (M1A/B) (set 7) + + + m1simpsg + The Simpsons (Maygay) (M1A/B) (set 8) + + + m1sirich + Strike It Rich (Maygay) (M1A/B) (set 1) + + + m1siricha + Strike It Rich (Maygay) (M1A/B) (set 2) + + + m1sirichb + Strike It Rich (Maygay) (M1A/B) (set 3) + + + m1sirichc + Strike It Rich (Maygay) (M1A/B) (set 4) + + + m1sixspn + Six Spinner (Maygay) (M1A/B) + + + m1spid + Spiderman (Maygay) (M1A/B) (set 1) + + + m1spida + Spiderman (Maygay) (M1A/B) (set 2) + + + m1spidb + Spiderman (Maygay) (M1A/B) (set 3) + + + m1sprnov + Super Nova (Dutch) (Maygay) (M1A/B) + + + m1sptlgt + Spotlight (Maygay) (M1A/B) (set 1) + + + m1sptlgta + Spotlight (Maygay) (M1A/B) (set 2) + + + m1sptlgtb + Spotlight (Maygay) (M1A/B) (set 3) + + + m1sptlgtc + Spotlight (Maygay) (M1A/B) (set 4) + + + m1sptlgtd + Spotlight (Maygay) (M1A/B) (set 5) + + + m1sptlgte + Spotlight (Maygay) (M1A/B) (set 6) + + + m1startr + Star Trekking (Mdm) (M1A/B) (set 1) + + + m1startra + Star Trekking (Mdm) (M1A/B) (set 2) + + + m1startrb + Star Trekking (Mdm) (M1A/B) (set 3) + + + m1startrc + Star Trekking (Mdm) (M1A/B) (set 4) + + + m1startrd + Star Trekking (Mdm) (M1A/B) (set 5) + + + m1startre + Star Trekking (Mdm) (M1A/B) (set 6) + + + m1startrf + Star Trekking (Mdm) (M1A/B) (set 7) + + + m1startrg + Star Trekking (Mdm) (M1A/B) (set 8) + + + m1startrh + Star Trekking (Mdm) (M1A/B) (set 9) + + + m1startri + Star Trekking (Mdm) (M1A/B) (set 10) + + + m1startrj + Star Trekking (Mdm) (M1A/B) (set 11) + + + m1startrk + Star Trekking (Mdm) (M1A/B) (set 12) + + + m1startrm + Star Trekking (Mdm) (M1A/B) (set 14) + + + m1startrn + Star Trekking (Mdm) (M1A/B) (set 15) + + + m1startro + Star Trekking (Mdm) (M1A/B) (set 16) + + + m1startrp + Star Trekking (Mdm) (M1A/B) (set 17) + + + m1startrq + Star Trekking (Mdm) (M1A/B) (set 18) + + + m1startrr + Star Trekking (Mdm) (M1A/B) (set 19) + + + m1sudnim + Sudden Impact (Maygay) (M1A/B) (set 1) + + + m1sudnima + Sudden Impact (Maygay) (M1A/B) (set 2) + + + m1sudnimb + Sudden Impact (Maygay) (M1A/B) (set 3) + + + m1sudnimc + Sudden Impact (Maygay) (M1A/B) (set 4) + + + m1suppot + Super Pots (Maygay) (M1A/B) (set 1) + + + m1suppot0 + Super Pots (Maygay) (M1A/B) (set 28) + + + m1suppota + Super Pots (Maygay) (M1A/B) (set 2) + + + m1suppotb + Super Pots (Maygay) (M1A/B) (set 3) + + + m1suppotc + Super Pots (Maygay) (M1A/B) (set 4) + + + m1suppotd + Super Pots (Maygay) (M1A/B) (set 5) + + + m1suppote + Super Pots (Maygay) (M1A/B) (set 6) + + + m1suppotf + Super Pots (Maygay) (M1A/B) (set 7) + + + m1suppotg + Super Pots (Maygay) (M1A/B) (set 8) + + + m1suppoti + Super Pots (Maygay) (M1A/B) (set 10) + + + m1suppotj + Super Pots (Maygay) (M1A/B) (set 11) + + + m1suppotk + Super Pots (Maygay) (M1A/B) (set 12) + + + m1suppotl + Super Pots (Maygay) (M1A/B) (set 13) + + + m1suppotm + Super Pots (Maygay) (M1A/B) (set 14) + + + m1suppotn + Super Pots (Maygay) (M1A/B) (set 15) + + + m1suppoto + Super Pots (Maygay) (M1A/B) (set 16) + + + m1suppotp + Super Pots (Maygay) (M1A/B) (set 17) + + + m1suppotq + Super Pots (Maygay) (M1A/B) (set 18) + + + m1suppotr + Super Pots (Maygay) (M1A/B) (set 19) + + + m1suppots + Super Pots (Maygay) (M1A/B) (set 20) + + + m1suppott + Super Pots (Maygay) (M1A/B) (set 21) + + + m1suppotu + Super Pots (Maygay) (M1A/B) (set 22) + + + m1suppotv + Super Pots (Maygay) (M1A/B) (set 23) + + + m1suppotw + Super Pots (Maygay) (M1A/B) (set 24) + + + m1suppotx + Super Pots (Maygay) (M1A/B) (set 25) + + + m1suppoty + Super Pots (Maygay) (M1A/B) (set 26) + + + m1suppotz + Super Pots (Maygay) (M1A/B) (set 27) + + + m1sycc + Stake Yer Claim Club (Global) (M1A/B) (set 1) + + + m1sycca + Stake Yer Claim Club (Global) (M1A/B) (set 2) + + + m1syccb + Stake Yer Claim Club (Global) (M1A/B) (set 3) + + + m1taknot + Take Note (Maygay) (M1A/B) + + + m1thatlf + That's Life (Maygay) (M1A/B) (set 1) + + + m1thatlfa + That's Life (Maygay) (M1A/B) (set 2) + + + m1thatlfb + That's Life (Maygay) (M1A/B) (set 3) + + + m1thatlfc + That's Life (Maygay) (M1A/B) (set 4) + + + m1thatlfd + That's Life (Maygay) (M1A/B) (set 5) + + + m1thrill + Thrills 'n' Spills (Global) (M1A/B) (set 1) + + + m1thrilla + Thrills 'n' Spills (Global) (M1A/B) (set 2) + + + m1thrillb + Thrills 'n' Spills (Global) (M1A/B) (set 3) + + + m1thrillc + Thrills 'n' Spills (Global) (M1A/B) (set 4) + + + m1topstr + Top Strike (Maygay - Bwb) (M1A/B) + + + m1topten + Top Tenner (Maygay) (M1A/B) (set 1) + + + m1toptena + Top Tenner (Maygay) (M1A/B) (set 2) + + + m1tpclb + Trivial Pursuit Club (Maygay) (M1A/B) (set 1) + + + m1tpclba + Trivial Pursuit Club (Maygay) (M1A/B) (set 2) + + + m1tpclbb + Trivial Pursuit Club (Maygay) (M1A/B) (set 3) + + + m1tpclbc + Trivial Pursuit Club (Maygay) (M1A/B) (set 4) + + + m1trivia + Trivial Pursuit (Maygay) (M1A/B) (set 1) + + + m1triviaa + Trivial Pursuit (Maygay) (M1A/B) (set 2) + + + m1triviab + Trivial Pursuit (Maygay) (M1A/B) (set 3) + + + m1triviac + Trivial Pursuit (Maygay) (M1A/B) (set 4) + + + m1triviad + Trivial Pursuit (Maygay) (M1A/B) (set 5) + + + m1triviae + Trivial Pursuit (Maygay) (M1A/B) (set 6) + + + m1triviaf + Trivial Pursuit (Maygay) (M1A/B) (set 7) + + + m1triviag + Trivial Pursuit (Maygay) (M1A/B) (set 8) + + + m1triviah + Trivial Pursuit (Maygay) (M1A/B) (set 9) + + + m1triviai + Trivial Pursuit (Maygay) (M1A/B) (set 10) + + + m1triviaj + Trivial Pursuit (Maygay) (M1A/B) (set 11) + + + m1triviak + Trivial Pursuit (Maygay) (M1A/B) (set 12) + + + m1trivial + Trivial Pursuit (Maygay) (M1A/B) (set 13) + + + m1trivian + Trivial Pursuit (Maygay) (M1A/B) (set 15) + + + m1triviap + Trivial Pursuit (Maygay) (M1A/B) (set 17) + + + m1triviaq + Trivial Pursuit (Maygay) (M1A/B) (set 18) + + + m1triviar + Trivial Pursuit (Maygay) (M1A/B) (set 19) + + + m1trivias + Trivial Pursuit (Maygay) (M1A/B) (set 20) + + + m1triviat + Trivial Pursuit (Maygay) (M1A/B) (set 21) + + + m1triviau + Trivial Pursuit (Maygay) (M1A/B) (set 22) + + + m1triviav + Trivial Pursuit (Maygay) (M1A/B) (set 23) + + + m1triviaw + Trivial Pursuit (Maygay) (M1A/B) (set 24) + + + m1triviax + Trivial Pursuit (Maygay) (M1A/B) (set 25) + + + m1triviay + Trivial Pursuit (Maygay) (M1A/B) (set 26) + + + m1triviaz + Trivial Pursuit (Maygay) (M1A/B) (set 27) + + + m1trtr + Trick Or Treat (Global) (M1A/B) (set 1) + + + m1trtra + Trick Or Treat (Global) (M1A/B) (set 2) + + + m1trtrcl + Trick Or Treat Club (Global) (M1A/B) + + + m1tstunt + Test Unit (Maygay) (M1A/B) + + + m1ttcash + Tick Tock Cash (Empire) (M1A/B) + + + m1ultchl + Ultimate Challenge (Maygay) (M1A/B) (set 1) + + + m1ultchla + Ultimate Challenge (Maygay) (M1A/B) (set 2) + + + m1ultchlb + Ultimate Challenge (Maygay) (M1A/B) (set 3) + + + m1ultchlc + Ultimate Challenge (Maygay) (M1A/B) (set 4) + + + m1undsie + Under Siege (Maygay) (M1A/B) (set 1) + + + m1undsiea + Under Siege (Maygay) (M1A/B) (set 2) + + + m1undsieb + Under Siege (Maygay) (M1A/B) (set 3) + + + m1undsiec + Under Siege (Maygay) (M1A/B) (set 4) + + + m1vegas + Vegas Gambler Club (Maygay) (M1A/B) (set 1) + + + m1vegasa + Vegas Gambler Club (Maygay) (M1A/B) (set 2) + + + m1vegasb + Vegas Gambler Club (Maygay) (M1A/B) (set 3) + + + m1vegcrw + Vegetable Crew (Global) (M1A/B) + + + m1wagon + Wagon Trail (Maygay) (M1A/B) (set 1) + + + m1wagona + Wagon Trail (Maygay) (M1A/B) (set 2) + + + m1wagonb + Wagon Trail (Maygay) (M1A/B) (set 3) + + + m1wagonc + Wagon Trail (Maygay) (M1A/B) (set 4) + + + m1winenc + John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 1) + + + m1winenca + John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 2) + + + m1winencb + John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 3) + + + m1winencc + John Francombe's Winners Enclosure (Maygay) (M1A/B) (set 4) + + + m1wldzne + Wild Zone (Maygay) (M1A/B) (set 1) + + + m1wldznea + Wild Zone (Maygay) (M1A/B) (set 2) + + + m1wldzneb + Wild Zone (Maygay) (M1A/B) (set 3) + + + m1wldznec + Wild Zone (Maygay) (M1A/B) (set 4) + + + m1wldzned + Wild Zone (Maygay) (M1A/B) (set 5) + + + m1wldznee + Wild Zone (Maygay) (M1A/B) (set 6) + + + m1wldznef + Wild Zone (Maygay) (M1A/B) (set 7) + + + m1wldzneg + Wild Zone (Maygay) (M1A/B) (set 8) + + + m1wldzneh + Wild Zone (Maygay) (M1A/B) (set 9) + + + m1wldznei + Wild Zone (Maygay) (M1A/B) (set 10) + + + m1wldznej + Wild Zone (Maygay) (M1A/B) (set 11) + + + m1wldznek + Wild Zone (Maygay) (M1A/B) (set 12) + + + m1wldznel + Wild Zone (Maygay) (M1A/B) (set 13) + + + m1wldznem + Wild Zone (Maygay) (M1A/B) (set 14) + + + m1wldznen + Wild Zone (Maygay) (M1A/B) (set 15) + + + m1wldzneo + Wild Zone (Maygay) (M1A/B) (set 16) + + + m1wldznep + Wild Zone (Maygay) (M1A/B) (set 17) + + + m1wldzneq + Wild Zone (Maygay) (M1A/B) (set 18) + + + m1wldzner + Wild Zone (Maygay) (M1A/B) (set 19) + + + m1wldznes + Wild Zone (Maygay) (M1A/B) (set 20) + + + m1wotw + War Of The Worlds (Maygay) (M1A/B) (set 1) + + + m1wotwa + War Of The Worlds (Maygay) (M1A/B) (set 2) + + + m1wotwb + War Of The Worlds (Maygay) (M1A/B) (set 3) + + + m21 + 21 (Mirco) + + + m2hilite + Hi-Lights (Barcrest) (MPU2) + + + m2svlite + Silver Lights (Barcrest) (MPU2) + + + m3acech + Ace Chase (Bwb) (MPU3) + + + m3autort + Autoroute (Barcrest) (MPU3) + + + m3bankr + Banker (Bwb) (MPU3) + + + m3big20j + Big 20 Joker (Barcrest) (MPU3) + + + m3biggam + The Big Game (Barcrest) (MPU3) + + + m3bigsht + Big Shot (Barcrest) (MPU3) + + + m3blkhle + Black Hole (Barcrest) (MPU3) + + + m3cabret + Cabaret (Barcrest) (MPU3, set 1) + + + m3cabreta + Cabaret (Barcrest) (MPU3, set 2) + + + m3cdash + Cash Dash (Pcp) (MPU3) + + + m3chase + Chase It (Bwb) (MPU3) + + + m3circle + Special Circle Club (Barcrest) (MPU3, set 1) + + + m3circlea + Special Circle Club (Barcrest) (MPU3, set 2) + + + m3circleb + Special Circle Club (Barcrest) (MPU3, set 3) + + + m3cjoker + Crazy Joker (Barcrest) (MPU3) + + + m3cskill + Circle Skill (Barcrest) (MPU3) + + + m3cunlim + Chances Unlimited (Barcrest) (MPU3) + + + m3fortun + Fortune Numbers (Barcrest) (MPU3, set 1) + + + m3fortuna + Fortune Numbers (Barcrest) (MPU3, set 2) + + + m3fortund + Fortune Numbers (Barcrest) [Dutch] (MPU3) + + + m3gaward + Golden Award (Barcrest) (MPU3) + + + m3gcrown + Golden Crowns (Mdm) (MPU3) + + + m3gmine + Gold Mine (Bwb) (MPU3) + + + m3hprvpr + Hyper Viper (Barcrest) (MPU3) + + + m3lineup + Line Up (Barcrest) (MPU3) + + + m3llotto + Lucky Lotto (Barcrest) (MPU3) + + + m3loony + Loonybin (Pcp) (MPU3) + + + m3lstrik + Lucky Strike Club (Barcrest) (MPU3, set 1) + + + m3lstrika + Lucky Strike Club (Barcrest) (MPU3, set 2) + + + m3magrp + Magic Replay (Barcrest) (MPU3) + + + m3minmax + Mini Max (Associated Leisure) (MPU3) + + + m3mremon + More Money (VFS) (MPU3) + + + m3nnice + Naughty But Nice (Barcrest) (MPU3) + + + m3nudge + Nudges Unlimited (Barcrest) (MPU3) + + + m3oddson + Odds On (Barcrest) (MPU3) + + + m3online + On Line (Pcp) (MPU3) + + + m3optunl + Options Unlimited (Barcrest) (MPU3) + + + m3oxo + Noughts 'n' Crosses (VFS) (MPU3) + + + m3ratrce + Rat Race (Bwb) (MPU3) + + + m3razdaz + Razzle Dazzle (Barcrest) (MPU3, set 1) + + + m3razdaza + Razzle Dazzle (Barcrest) (MPU3, set 2) + + + m3razdazd + Razzle Dazzle (Barcrest) [Dutch] (MPU3) + + + m3replay + Instant Replay (Barcrest) (MPU3) + + + m3rockpl + Rock Pile (Pcp) (MPU3) + + + m3rollem + Roll 'Em (Pcp) (MPU3) + + + m3rxchng + Royal Exchange Club (Barcrest) (MPU3) + + + m3scoop + Scoop (Peter Simper, prototype?) (MPU3) + + + m3sdeal + Super Deal (Barcrest) (MPU3) + + + m3sexcu + Super Exchanges Unlimited (Barcrest) (MPU3) + + + m3slight + Strike A Light (Barcrest) (MPU3) + + + m3snaphp + Snap Happy (Pcp) (MPU3) + + + m3snappy + Snappy Viper (Barcrest) (MPU3) + + + m3spoof + Spoof (Pcp) (MPU3, set 1) + + + m3spoofa + Spoof (Pcp) (MPU3, set 2) + + + m3supadr + Super Adders & Ladders (Barcrest) (MPU3) + + + m3supasw + Supaswop (Bwb) (MPU3) + + + m3suplin + Super Line Up (Barcrest) (MPU3, set 1) + + + m3suplina + Super Line Up (Barcrest) (MPU3, set 2) + + + m3supnud + Super Nudges Unlimited (Barcrest) (MPU3) + + + m3supser + Super Series (Barcrest) (MPU3) + + + m3supspo + Super Spoof (Pcp) (MPU3, set 1) + + + m3supspoa + Super Spoof (Pcp) (MPU3, set 2) + + + m3supwin + Super Win (Bwb) (MPU3, set 1) + + + m3supwina + Super Win (Bwb) (MPU3, set 2) + + + m3sweep + Sweep Stake Club (Barcrest) (MPU3, set 1) + + + m3sweepa + Sweep Stake Club (Barcrest) (MPU3, set 2) + + + m3tfair + Tuppenny Fair (Mdm) (MPU3) + + + m3tlktwn + Talk of the Town (MPU3?) + + + m3toplin + Top Line (Pcp) (MPU3) + + + m3topsht + Top Shot (Barcrest) (MPU3) + + + m3tst + MPU3 Unit Test (Program 5) (Barcrest) (MPU3) + + + m3wacky + Wacky Racer (Mdm) (MPU3) + + + m3wigwam + Wig Wam (Pcp) (MPU3) + + + m3winagn + Win-A-Gain (Bwb) (MPU3, set 1) + + + m3winagna + Win-A-Gain (Bwb) (MPU3, set 2) + + + m3winagnb + Win-A-Gain (Bwb) (MPU3, set 3) + + + m3winstr + Winstrike (Bwb) (MPU3) + + + m3winstra + Winstrike (Barcrest) (MPU3) + + + m3xchngg + Exchanges Galore (Barcrest) (MPU3) + + + m3xchngu + Exchanges Unlimited (Barcrest) (MPU3, set 1) + + + m3xchngua + Exchanges Unlimited (Barcrest) (MPU3, set 2) + + + m4 + M-4 + + + m421 + Twenty One (Barcrest) (MPU4) + + + m421club + 21 Club (Barcrest) [DTW, Dutch] (MPU4) + + + m42punlm + 2p Unlimited (Mdm) (MPU4) + + + m4aao + Against All Odds (Eurotek) (MPU4) + + + m4abeaut + American Beauty (Avantime?) (MPU4) (AB, set 1) + + + m4abeaut_1 + American Beauty (Avantime?) (MPU4) (AB, set 2) + + + m4abeaut_2 + American Beauty (Avantime?) (MPU4) (AB, set 3) + + + m4abeaut_3 + American Beauty (Avantime?) (MPU4) (AB, set 4) + + + m4abeaut_4 + American Beauty (Avantime?) (MPU4) (AB, set 5) + + + m4abeaut_5 + American Beauty (Avantime?) (MPU4) (AB, set 6) + + + m4abeaut_6 + American Beauty (Avantime?) (MPU4) (AB, set 7) + + + m4abeaut_7 + American Beauty (Avantime?) (MPU4) (AB, set 8) + + + m4abeaut_8 + American Beauty (Avantime?) (MPU4) (AB, set 9) + + + m4abeaut_9 + American Beauty (Avantime?) (MPU4) (AB, set 10) + + + m4abeaut_c1 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 1) + + + m4abeaut_c10 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 10) + + + m4abeaut_c11 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 11) + + + m4abeaut_c12 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 12) + + + m4abeaut_c13 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 13) + + + m4abeaut_c14 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 14) + + + m4abeaut_c15 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 15) + + + m4abeaut_c16 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 1) + + + m4abeaut_c17 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 2) + + + m4abeaut_c18 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 3) + + + m4abeaut_c19 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 4) + + + m4abeaut_c2 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 2) + + + m4abeaut_c20 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 5) + + + m4abeaut_c21 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 6) + + + m4abeaut_c22 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 7) + + + m4abeaut_c23 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 8) + + + m4abeaut_c24 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 9) + + + m4abeaut_c25 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 10) + + + m4abeaut_c26 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 11) + + + m4abeaut_c27 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 12) + + + m4abeaut_c28 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 13) + + + m4abeaut_c29 + American Beauty (Avantime?) (MPU4) (ABC2, Czech, set 14) + + + m4abeaut_c3 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 3) + + + m4abeaut_c30 + American Beauty (Avantime?) (MPU4) (M2C1, Czech, set 1) + + + m4abeaut_c31 + American Beauty (Avantime?) (MPU4) (M2C1, Czech, set 2) + + + m4abeaut_c4 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 4) + + + m4abeaut_c5 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 5) + + + m4abeaut_c6 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 6) + + + m4abeaut_c7 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 7) + + + m4abeaut_c8 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 8) + + + m4abeaut_c9 + American Beauty (Avantime?) (MPU4) (ABC1, Czech, set 9) + + + m4abeaut_i1 + American Beauty (Avantime?) (MPU4) (A2I0, Israel, set 1) + + + m4abeaut_i2 + American Beauty (Avantime?) (MPU4) (A2I0, Israel, set 2) + + + m4abeaut_k1 + American Beauty (Avantime?) (MPU4) (A2K0, set 1) + + + m4abeaut_k2 + American Beauty (Avantime?) (MPU4) (A2K0, set 2) + + + m4abeaut_l1 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 1) + + + m4abeaut_l10 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 10) + + + m4abeaut_l11 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 11) + + + m4abeaut_l12 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 12) + + + m4abeaut_l13 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 1) + + + m4abeaut_l14 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 2) + + + m4abeaut_l15 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 3) + + + m4abeaut_l16 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 4) + + + m4abeaut_l17 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 5) + + + m4abeaut_l18 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 6) + + + m4abeaut_l19 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 7) + + + m4abeaut_l2 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 2) + + + m4abeaut_l20 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 8) + + + m4abeaut_l21 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 9) + + + m4abeaut_l22 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 10) + + + m4abeaut_l23 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 11) + + + m4abeaut_l24 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 12) + + + m4abeaut_l25 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 13) + + + m4abeaut_l26 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 14) + + + m4abeaut_l27 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 15) + + + m4abeaut_l28 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 16) + + + m4abeaut_l29 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 17) + + + m4abeaut_l3 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 3) + + + m4abeaut_l30 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 18) + + + m4abeaut_l31 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 19) + + + m4abeaut_l32 + American Beauty (Avantime?) (MPU4) (A2L0, Latvia, set 20) + + + m4abeaut_l33 + American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 1) + + + m4abeaut_l34 + American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 2) + + + m4abeaut_l35 + American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 3) + + + m4abeaut_l36 + American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 4) + + + m4abeaut_l37 + American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 5) + + + m4abeaut_l38 + American Beauty (Avantime?) (MPU4) (A3L0, Latvia, set 6) + + + m4abeaut_l4 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 4) + + + m4abeaut_l5 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 5) + + + m4abeaut_l6 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 6) + + + m4abeaut_l7 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 7) + + + m4abeaut_l8 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 8) + + + m4abeaut_l9 + American Beauty (Avantime?) (MPU4) (ABL0, Latvia, set 9) + + + m4abeaut_m1 + American Beauty (Avantime?) (MPU4) (ABM1, Montenegro, set 1) + + + m4abeaut_m2 + American Beauty (Avantime?) (MPU4) (ABM1, Montenegro, set 2) + + + m4abeaut_m3 + American Beauty (Avantime?) (MPU4) (ABM2, Montenegro, set 1) + + + m4abeaut_m4 + American Beauty (Avantime?) (MPU4) (ABM2, Montenegro, set 2) + + + m4abeaut_pb1 + American Beauty (Avantime?) (MPU4) (AJL0, Project Bar, set 1) + + + m4abeaut_pb2 + American Beauty (Avantime?) (MPU4) (AJL0, Project Bar, set 2) + + + m4abeaut_r1 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 1) + + + m4abeaut_r10 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 10) + + + m4abeaut_r11 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 11) + + + m4abeaut_r12 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 12) + + + m4abeaut_r13 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 13) + + + m4abeaut_r14 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 14) + + + m4abeaut_r2 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 2) + + + m4abeaut_r3 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 3) + + + m4abeaut_r4 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 4) + + + m4abeaut_r5 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 5) + + + m4abeaut_r6 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 6) + + + m4abeaut_r7 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 7) + + + m4abeaut_r8 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 8) + + + m4abeaut_r9 + American Beauty (Avantime?) (MPU4) (ABR1, Russia, set 9) + + + m4abeaut_s1 + American Beauty (Avantime?) (MPU4) (ABS1, Slovakia, set 1) + + + m4abeaut_s2 + American Beauty (Avantime?) (MPU4) (ABS1, Slovakia, set 2) + + + m4abeaut_s3 + American Beauty (Avantime?) (MPU4) (ABS2, Slovakia, set 1) + + + m4abeaut_s4 + American Beauty (Avantime?) (MPU4) (ABS2, Slovakia, set 2) + + + m4abeaut_u1 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 1) + + + m4abeaut_u10 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 10) + + + m4abeaut_u11 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 11) + + + m4abeaut_u12 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 12) + + + m4abeaut_u13 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 13) + + + m4abeaut_u14 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 14) + + + m4abeaut_u15 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 15) + + + m4abeaut_u16 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 16) + + + m4abeaut_u17 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 17) + + + m4abeaut_u18 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 18) + + + m4abeaut_u19 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 19) + + + m4abeaut_u2 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 2) + + + m4abeaut_u20 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 20) + + + m4abeaut_u21 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 21) + + + m4abeaut_u22 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 22) + + + m4abeaut_u23 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 23) + + + m4abeaut_u24 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 24) + + + m4abeaut_u25 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 25) + + + m4abeaut_u26 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 26) + + + m4abeaut_u27 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 27) + + + m4abeaut_u28 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 28) + + + m4abeaut_u29 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 29) + + + m4abeaut_u3 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 3) + + + m4abeaut_u30 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 30) + + + m4abeaut_u31 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 31) + + + m4abeaut_u32 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 32) + + + m4abeaut_u33 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 33) + + + m4abeaut_u34 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 34) + + + m4abeaut_u35 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 35) + + + m4abeaut_u36 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 36) + + + m4abeaut_u37 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 37) + + + m4abeaut_u38 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 38) + + + m4abeaut_u39 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 39) + + + m4abeaut_u4 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 4) + + + m4abeaut_u40 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 40) + + + m4abeaut_u41 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 41) + + + m4abeaut_u42 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 42) + + + m4abeaut_u43 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 43) + + + m4abeaut_u44 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 44) + + + m4abeaut_u45 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 45) + + + m4abeaut_u46 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 46) + + + m4abeaut_u47 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 47) + + + m4abeaut_u48 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 48) + + + m4abeaut_u49 + American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 1) + + + m4abeaut_u5 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 5) + + + m4abeaut_u50 + American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 2) + + + m4abeaut_u51 + American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 3) + + + m4abeaut_u52 + American Beauty (Avantime?) (MPU4) (ABU2, Ukraine, set 4) + + + m4abeaut_u53 + American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 1) + + + m4abeaut_u54 + American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 2) + + + m4abeaut_u55 + American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 3) + + + m4abeaut_u56 + American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 4) + + + m4abeaut_u57 + American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 5) + + + m4abeaut_u58 + American Beauty (Avantime?) (MPU4) (A2U2, Ukraine, set 6) + + + m4abeaut_u59 + American Beauty (Avantime?) (MPU4) (A2U3, Ukraine, set 1) + + + m4abeaut_u6 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 6) + + + m4abeaut_u60 + American Beauty (Avantime?) (MPU4) (A2U3, Ukraine, set 2) + + + m4abeaut_u61 + American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 1) + + + m4abeaut_u62 + American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 2) + + + m4abeaut_u63 + American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 3) + + + m4abeaut_u64 + American Beauty (Avantime?) (MPU4) (A3U2, Ukraine, set 4) + + + m4abeaut_u7 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 7) + + + m4abeaut_u8 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 8) + + + m4abeaut_u9 + American Beauty (Avantime?) (MPU4) (ABU1, Ukraine, set 9) + + + m4abra + Abracadabra (Bwb) (MPU4) (set 1) + + + m4abra__a + Abracadabra (Bwb) (MPU4) (set 2) + + + m4abra__b + Abracadabra (Bwb) (MPU4) (set 3) + + + m4abra__c + Abracadabra (Bwb) (MPU4) (set 4) + + + m4acechs + Ace Chase (Barcrest) (MPU4) (set 1) + + + m4acechs__a + Ace Chase (Barcrest) (MPU4) (set 2) + + + m4acechs__b + Ace Chase (Barcrest) (MPU4) (set 3) + + + m4acechs__c + Ace Chase (Barcrest) (MPU4) (set 4) + + + m4acechs__d + Ace Chase (Barcrest) (MPU4) (set 5) + + + m4acechs__e + Ace Chase (Barcrest) (MPU4) (set 6) + + + m4acechs__f + Ace Chase (Barcrest) (MPU4) (set 7) + + + m4acechs__g + Ace Chase (Barcrest) (MPU4) (set 8) + + + m4acechs__h + Ace Chase (Barcrest) (MPU4) (set 9) + + + m4acechs__i + Ace Chase (Barcrest) (MPU4) (set 10) + + + m4acechs__j + Ace Chase (Barcrest) (MPU4) (set 11) + + + m4acechs__k + Ace Chase (Barcrest) (MPU4) (set 12) + + + m4acechs__l + Ace Chase (Barcrest) (MPU4) (set 13) + + + m4acechs__m + Ace Chase (Barcrest) (MPU4) (set 14) + + + m4acechs__n + Ace Chase (Barcrest) (MPU4) (set 15) + + + m4acechs__o + Ace Chase (Barcrest) (MPU4) (set 16) + + + m4acechs__p + Ace Chase (Barcrest) (MPU4) (set 17) + + + m4acechs__q + Ace Chase (Barcrest) (MPU4) (set 18) + + + m4acechs__r + Ace Chase (Barcrest) (MPU4) (set 19) + + + m4acechs__s + Ace Chase (Barcrest) (MPU4) (set 20) + + + m4acechs__t + Ace Chase (Barcrest) (MPU4) (set 21) + + + m4acechs__u + Ace Chase (Barcrest) (MPU4) (set 22) + + + m4actbnk + Action Bank (Barcrest) (MPU4) (set 1) + + + m4actbnk__a + Action Bank (Barcrest) (MPU4) (set 2) + + + m4actbnk__b + Action Bank (Barcrest) (MPU4) (set 3) + + + m4actbnk__c + Action Bank (Barcrest) (MPU4) (set 4) + + + m4actbnk__d + Action Bank (Barcrest) (MPU4) (set 5) + + + m4actbnk__e + Action Bank (Barcrest) (MPU4) (set 6) + + + m4actbnk__f + Action Bank (Barcrest) (MPU4) (set 7) + + + m4actbnk__g + Action Bank (Barcrest) (MPU4) (set 8) + + + m4actbnk__h + Action Bank (Barcrest) (MPU4) (set 9) + + + m4actbnk__i + Action Bank (Barcrest) (MPU4) (set 10) + + + m4actbnka + Action Bank (Barcrest) (Mod 2 type, AC3.0) (MPU4) + + + m4actbnkb + Action Bank (Barcrest) (Mod 2 type, ACT2.0) (MPU4) + + + m4actclb + Action Club (Barcrest) (MPU4) (1.9) + + + m4actclba + Action Club (Barcrest) (MPU4) (1.1) + + + m4actnot + Action Note (Barcrest) (MPU4) (AN 1.2) + + + m4actpak + Action Pack (Barcrest) (MPU4) (AP 0.4) + + + m4actpaka + Action Pack (Barcrest) (MPU4) (AP 0.5) + + + m4addr + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1) + + + m4addr10 + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, set 1) + + + m4addr10_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, set 2) + + + m4addr10c + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, set 1) + + + m4addr10c_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, set 2) + + + m4addr10d + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0D, set 1) + + + m4addr10d_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0D, set 2) + + + m4addr10yd + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0YD, set 1) + + + m4addr10yd_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0YD, set 2) + + + m4addr3 + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 1) + + + m4addr3_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 2) + + + m4addr3_b + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 3) + + + m4addr3_c + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 4) + + + m4addr3_d + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 5) + + + m4addr3d + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 1) + + + m4addr3d_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 2) + + + m4addr3d_b + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 3) + + + m4addr3d_c + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 4) + + + m4addr3yd + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 1) + + + m4addr3yd_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 2) + + + m4addr3yd_b + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 3) + + + m4addr3yd_c + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 4) + + + m4addr4 + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0, set 1) + + + m4addr4_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0, set 2) + + + m4addr4c + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 1) + + + m4addr4c_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 2) + + + m4addr4c_b + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 3) + + + m4addr4d + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0D, set 1) + + + m4addr4yd + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0YD, set 1) + + + m4addr5 + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0, set 1) + + + m4addr5_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0, set 2) + + + m4addr5c + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0C, set 1) + + + m4addr5c_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0C, set 2) + + + m4addr5d + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0D, set 1) + + + m4addr5d_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0D, set 2) + + + m4addr5yd + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0YD, set 1) + + + m4addr5yd_a + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0YD, set 2) + + + m4addr6lc + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1C) + + + m4addr6ld + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1D) + + + m4addr6lk + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1K) + + + m4addr6ly + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1Y) + + + m4addr6lybd + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1YBD) + + + m4addr6lyd + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1YD) + + + m4addr_h1 + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, hack?, set 1) + + + m4addr_h2 + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, hack?, set 2) + + + m4addrc + Adders & Ladders Classic (Barcrest) (MPU4) (set 1) + + + m4addrc__a + Adders & Ladders Classic (Barcrest) (MPU4) (set 2) + + + m4addrc__b + Adders & Ladders Classic (Barcrest) (MPU4) (set 3) + + + m4addrc__c + Adders & Ladders Classic (Barcrest) (MPU4) (set 4) + + + m4addrc__d + Adders & Ladders Classic (Barcrest) (MPU4) (set 5) + + + m4addrc__e + Adders & Ladders Classic (Barcrest) (MPU4) (set 6) + + + m4addrc__f + Adders & Ladders Classic (Barcrest) (MPU4) (set 7) + + + m4addrc__h + Adders & Ladders Classic (Barcrest) (MPU4) (set 8) + + + m4addrc__i + Adders & Ladders Classic (Barcrest) (MPU4) (set 9) + + + m4addrc__j + Adders & Ladders Classic (Barcrest) (MPU4) (set 10) + + + m4addrc__k + Adders & Ladders Classic (Barcrest) (MPU4) (set 11) + + + m4addrc__l + Adders & Ladders Classic (Barcrest) (MPU4) (set 12) + + + m4addrc__m + Adders & Ladders Classic (Barcrest) (MPU4) (set 13) + + + m4addrc__n + Adders & Ladders Classic (Barcrest) (MPU4) (set 14) + + + m4addrcc + Adders & Ladders Classic Club (Barcrest) (MPU4) (set 1) + + + m4addrcc__a + Adders & Ladders Classic Club (Barcrest) (MPU4) (set 2) + + + m4addrcc__b + Adders & Ladders Classic Club (Barcrest) (MPU4) (set 3) + + + m4addrcc__c + Adders & Ladders Classic Club (Barcrest) (MPU4) (set 4) + + + m4addrcc__d + Adders & Ladders Classic Club (Barcrest) (MPU4) (set 5) + + + m4addrd + Adders & Ladders (Barcrest) (DAL, Dutch) (MPU4) + + + m4aladn + Aladdin's Cave (Crystal) (MPU4) (set 1) + + + m4aladna + Aladdin's Cave (Crystal) (MPU4) (set 2) + + + m4aladnb + Aladdin's Cave (Crystal) (MPU4) (set 3) + + + m4aladnc + Aladdin's Cave (Crystal) (MPU4) (set 4) + + + m4aladnd + Aladdin's Cave (Crystal) (MPU4) (set 5) + + + m4aladne + Aladdin's Cave (Crystal) (MPU4) (set 6) + + + m4aladnf + Aladdin's Cave (Crystal) (MPU4) (set 7) + + + m4aladng + Aladdin's Cave (Crystal) (MPU4) (set 8) + + + m4aladnh + Aladdin's Cave (Crystal) (MPU4) (set 9) + + + m4aladni + Aladdin's Cave (Crystal) (MPU4) (set 10) + + + m4aliz + AlizBaz (Qps) (German) (MPU4) + + + m4alladv + All Cash Advance (Barcrest) (MPU4) (C2B 6.0) + + + m4alpha + Alphabet (Barcrest) [A4B 1.0] (MPU4) + + + m4amalad + American Aladdin (Avantime?) (MPU4) (set 1) + + + m4amalad__a + American Aladdin (Avantime?) (MPU4) (set 2) + + + m4amalad__b + American Aladdin (Avantime?) (MPU4) (set 3) + + + m4amalad__c + American Aladdin (Avantime?) (MPU4) (set 4) + + + m4amalad__d + American Aladdin (Avantime?) (MPU4) (set 5) + + + m4amalad__e + American Aladdin (Avantime?) (MPU4) (set 6) + + + m4amalad__f + American Aladdin (Avantime?) (MPU4) (set 7) + + + m4amalad__g + American Aladdin (Avantime?) (MPU4) (set 8) + + + m4amalad__h + American Aladdin (Avantime?) (MPU4) (set 9) + + + m4amalad__i + American Aladdin (Avantime?) (MPU4) (set 10) + + + m4amalad__j + American Aladdin (Avantime?) (MPU4) (set 11) + + + m4amalad__k + American Aladdin (Avantime?) (MPU4) (set 12) + + + m4amalad__l + American Aladdin (Avantime?) (MPU4) (set 13) + + + m4amalad__m + American Aladdin (Avantime?) (MPU4) (set 14) + + + m4amalad__n + American Aladdin (Avantime?) (MPU4) (set 15) + + + m4ambass + Ambassador (Barcrest) (DAM, Dutch) (MPU4) + + + m4amhiwy + American Highway (Barcrest) (MPU4) (DAH) + + + m4andybt + Andy's Big Time Club (Barcrest) (MPU4) (set 1) + + + m4andybt__a + Andy's Big Time Club (Barcrest) (MPU4) (set 2) + + + m4andybt__b + Andy's Big Time Club (Barcrest) (MPU4) (set 3) + + + m4andybt__c + Andy's Big Time Club (Barcrest) (MPU4) (set 4) + + + m4andycp + Andy Capp (Bwb / Barcrest) (MPU4) (AC10) + + + m4andycp10_a + Andy Capp (Bwb / Barcrest) (MPU4) (AC10, hack?) + + + m4andycp10c + Andy Capp (Bwb / Barcrest) (MPU4) (AC10C) + + + m4andycp10c_a + Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 1) + + + m4andycp10c_b + Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 2) + + + m4andycp10c_c + Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 3) + + + m4andycp10c_d + Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 4) + + + m4andycp10d + Andy Capp (Bwb / Barcrest) (MPU4) (AC10D) + + + m4andycp10k + Andy Capp (Bwb / Barcrest) (MPU4) (AC10K) + + + m4andycp10yd + Andy Capp (Bwb / Barcrest) (MPU4) (AC10YD) + + + m4andycp20 + Andy Capp (Barcrest) (MPU4) (hack?, set 1) + + + m4andycp20_a + Andy Capp (Barcrest) (MPU4) (hack?, set 2) + + + m4andycp20_b + Andy Capp (Barcrest) (MPU4) (hack?, set 3) + + + m4andycp8 + Andy Capp (Barcrest) (MPU4) (AM8) + + + m4andycp8ad + Andy Capp (Barcrest) (MPU4) (AN8 AD) + + + m4andycp8b + Andy Capp (Barcrest) (MPU4) (AN8 B) + + + m4andycp8c + Andy Capp (Barcrest) (MPU4) (AN8 C) + + + m4andycp8d + Andy Capp (Barcrest) (MPU4) (AN8 D) + + + m4andycp8k + Andy Capp (Barcrest) (MPU4) (AN8 K) + + + m4andycp8kd + Andy Capp (Barcrest) (MPU4) (AN8 KD) + + + m4andycp8y + Andy Capp (Barcrest) (MPU4) (AN8 Y) + + + m4andycp8yd + Andy Capp (Barcrest) (MPU4) (AN8 YD) + + + m4andycpac + Andy Capp (Bwb / Barcrest) (MPU4) (AC5) + + + m4andycpac_a + Andy Capp (Bwb / Barcrest) (MPU4) (AC5, hack?) + + + m4andycpacc + Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C) + + + m4andycpacc_a + Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 1) + + + m4andycpacc_b + Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 2) + + + m4andycpacc_c + Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 3) + + + m4andycpacc_d + Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 4) + + + m4andycpacc_e + Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 5) + + + m4andycpaccsd + Andy Capp (Bwb / Barcrest) (MPU4) (ACC5) + + + m4andycpacd + Andy Capp (Bwb / Barcrest) (MPU4) (AC5 D) + + + m4andycpack + Andy Capp (Bwb / Barcrest) (MPU4) (AC5 K) + + + m4andycpacyd + Andy Capp (Bwb / Barcrest) (MPU4) (AC5 YD) + + + m4andycpc2 + Andy Capp (Barcrest) (MPU4) (C2T, set 1) + + + m4andycpc2_a + Andy Capp (Barcrest) (MPU4) (C2T, set 2) + + + m4andycpc2ad + Andy Capp (Barcrest) (MPU4) (C2T AD) + + + m4andycpc2b + Andy Capp (Barcrest) (MPU4) (C2T B) + + + m4andycpc2bd + Andy Capp (Barcrest) (MPU4) (C2T BD) + + + m4andycpc2d + Andy Capp (Barcrest) (MPU4) (C2T D) + + + m4andycpc2k + Andy Capp (Barcrest) (MPU4) (C2T K) + + + m4andycpc2kd + Andy Capp (Barcrest) (MPU4) (C2T KD) + + + m4andycpc2r + Andy Capp (Barcrest) (MPU4) (C2T R) + + + m4andycpc2rd + Andy Capp (Barcrest) (MPU4) (C2T RD) + + + m4andycpc2y + Andy Capp (Barcrest) (MPU4) (C2T Y) + + + m4andycpc2yd + Andy Capp (Barcrest) (MPU4) (C2T YD) + + + m4andycpc5 + Andy Capp (Barcrest) (MPU4) (C5T) + + + m4andycpc5ad + Andy Capp (Barcrest) (MPU4) (C5T AD) + + + m4andycpc5b + Andy Capp (Barcrest) (MPU4) (C5T B) + + + m4andycpc5bd + Andy Capp (Barcrest) (MPU4) (C5T BD) + + + m4andycpc5d + Andy Capp (Barcrest) (MPU4) (C5T D) + + + m4andycpc5k + Andy Capp (Barcrest) (MPU4) (C5T K) + + + m4andycpc5kd + Andy Capp (Barcrest) (MPU4) (C5T KD) + + + m4andycpc5y + Andy Capp (Barcrest) (MPU4) (C5T Y) + + + m4andycpc5yd + Andy Capp (Barcrest) (MPU4) (C5T YD) + + + m4andycpd + Andy Capp (Barcrest) (MPU4) (AND) + + + m4andycpdc + Andy Capp (Barcrest) (MPU4) (AND C) + + + m4andycpdd + Andy Capp (Barcrest) (MPU4) (AND D) + + + m4andycpdk + Andy Capp (Barcrest) (MPU4) (AND K) + + + m4andycpdut + Andy Capp (Barcrest) [DAC 1.3, Dutch] (MPU4) + + + m4andycpdy + Andy Capp (Barcrest) (MPU4) (AND Y, set 1) + + + m4andycpdy_a + Andy Capp (Barcrest) (MPU4) (AND Y, set 2) + + + m4andycpdyd + Andy Capp (Barcrest) (MPU4) (AND YD) + + + m4andyfh + Andy's Full House (Barcrest) (MPU4) (set 1) + + + m4andyfh__0 + Andy's Full House (Barcrest) (MPU4) (set 28) + + + m4andyfh__1 + Andy's Full House (Barcrest) (MPU4) (set 29) + + + m4andyfh__2 + Andy's Full House (Barcrest) (MPU4) (set 30) + + + m4andyfh__3 + Andy's Full House (Barcrest) (MPU4) (set 31) + + + m4andyfh__4 + Andy's Full House (Barcrest) (MPU4) (set 32) + + + m4andyfh__5 + Andy's Full House (Barcrest) (MPU4) (set 33) + + + m4andyfh__6 + Andy's Full House (Barcrest) (MPU4) (set 34) + + + m4andyfh__7 + Andy's Full House (Barcrest) (MPU4) (set 35) + + + m4andyfh__8 + Andy's Full House (Barcrest) (MPU4) (set 36) + + + m4andyfh__9 + Andy's Full House (Barcrest) (MPU4) (set 37) + + + m4andyfh__a + Andy's Full House (Barcrest) (MPU4) (set 2) + + + m4andyfh__a0 + Andy's Full House (Barcrest) (MPU4) (set 64) + + + m4andyfh__a1 + Andy's Full House (Barcrest) (MPU4) (set 65) + + + m4andyfh__a2 + Andy's Full House (Barcrest) (MPU4) (set 66) + + + m4andyfh__a3 + Andy's Full House (Barcrest) (MPU4) (set 67) + + + m4andyfh__a4 + Andy's Full House (Barcrest) (MPU4) (set 68) + + + m4andyfh__aa + Andy's Full House (Barcrest) (MPU4) (set 38) + + + m4andyfh__ab + Andy's Full House (Barcrest) (MPU4) (set 39) + + + m4andyfh__ac + Andy's Full House (Barcrest) (MPU4) (set 40) + + + m4andyfh__ad + Andy's Full House (Barcrest) (MPU4) (set 41) + + + m4andyfh__ae + Andy's Full House (Barcrest) (MPU4) (set 42) + + + m4andyfh__af + Andy's Full House (Barcrest) (MPU4) (set 43) + + + m4andyfh__ag + Andy's Full House (Barcrest) (MPU4) (set 44) + + + m4andyfh__ah + Andy's Full House (Barcrest) (MPU4) (set 45) + + + m4andyfh__ai + Andy's Full House (Barcrest) (MPU4) (set 46) + + + m4andyfh__aj + Andy's Full House (Barcrest) (MPU4) (set 47) + + + m4andyfh__ak + Andy's Full House (Barcrest) (MPU4) (set 48) + + + m4andyfh__al + Andy's Full House (Barcrest) (MPU4) (set 49) + + + m4andyfh__am + Andy's Full House (Barcrest) (MPU4) (set 50) + + + m4andyfh__an + Andy's Full House (Barcrest) (MPU4) (set 51) + + + m4andyfh__ao + Andy's Full House (Barcrest) (MPU4) (set 52) + + + m4andyfh__ap + Andy's Full House (Barcrest) (MPU4) (set 53) + + + m4andyfh__aq + Andy's Full House (Barcrest) (MPU4) (set 54) + + + m4andyfh__ar + Andy's Full House (Barcrest) (MPU4) (set 55) + + + m4andyfh__as + Andy's Full House (Barcrest) (MPU4) (set 56) + + + m4andyfh__at + Andy's Full House (Barcrest) (MPU4) (set 57) + + + m4andyfh__au + Andy's Full House (Barcrest) (MPU4) (set 58) + + + m4andyfh__av + Andy's Full House (Barcrest) (MPU4) (set 59) + + + m4andyfh__aw + Andy's Full House (Barcrest) (MPU4) (set 60) + + + m4andyfh__ax + Andy's Full House (Barcrest) (MPU4) (set 61) + + + m4andyfh__ay + Andy's Full House (Barcrest) (MPU4) (set 62) + + + m4andyfh__az + Andy's Full House (Barcrest) (MPU4) (set 63) + + + m4andyfh__b + Andy's Full House (Barcrest) (MPU4) (set 3) + + + m4andyfh__c + Andy's Full House (Barcrest) (MPU4) (set 4) + + + m4andyfh__d + Andy's Full House (Barcrest) (MPU4) (set 5) + + + m4andyfh__e + Andy's Full House (Barcrest) (MPU4) (set 6) + + + m4andyfh__f + Andy's Full House (Barcrest) (MPU4) (set 7) + + + m4andyfh__g + Andy's Full House (Barcrest) (MPU4) (set 8) + + + m4andyfh__h + Andy's Full House (Barcrest) (MPU4) (set 9) + + + m4andyfh__i + Andy's Full House (Barcrest) (MPU4) (set 10) + + + m4andyfh__j + Andy's Full House (Barcrest) (MPU4) (set 11) + + + m4andyfh__k + Andy's Full House (Barcrest) (MPU4) (set 12) + + + m4andyfh__l + Andy's Full House (Barcrest) (MPU4) (set 13) + + + m4andyfh__m + Andy's Full House (Barcrest) (MPU4) (set 14) + + + m4andyfh__n + Andy's Full House (Barcrest) (MPU4) (set 15) + + + m4andyfh__o + Andy's Full House (Barcrest) (MPU4) (set 16) + + + m4andyfh__p + Andy's Full House (Barcrest) (MPU4) (set 17) + + + m4andyfh__q + Andy's Full House (Barcrest) (MPU4) (set 18) + + + m4andyfh__r + Andy's Full House (Barcrest) (MPU4) (set 19) + + + m4andyfh__s + Andy's Full House (Barcrest) (MPU4) (set 20) + + + m4andyfh__t + Andy's Full House (Barcrest) (MPU4) (set 21) + + + m4andyfh__u + Andy's Full House (Barcrest) (MPU4) (set 22) + + + m4andyfh__v + Andy's Full House (Barcrest) (MPU4) (set 23) + + + m4andyfh__w + Andy's Full House (Barcrest) (MPU4) (set 24) + + + m4andyfh__x + Andy's Full House (Barcrest) (MPU4) (set 25) + + + m4andyfh__y + Andy's Full House (Barcrest) (MPU4) (set 26) + + + m4andyfh__z + Andy's Full House (Barcrest) (MPU4) (set 27) + + + m4andyfl + Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL4 2.1KS) + + + m4andyfl3 + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1) + + + m4andyfl3ad + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1AD) + + + m4andyfl3b + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1B) + + + m4andyfl3bd + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1BD) + + + m4andyfl3d + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1D) + + + m4andyfl3k + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1K) + + + m4andyfl3kd + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1KD) + + + m4andyfl3y + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1Y) + + + m4andyfl3yd + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1YD) + + + m4andyfl8 + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1) + + + m4andyfl8ad + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1AD) + + + m4andyfl8b + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1B) + + + m4andyfl8bd + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1BD) + + + m4andyfl8bs + Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL_ 2.4KS) + + + m4andyfl8c + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1C) + + + m4andyfl8d + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1D) + + + m4andyfl8k + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1K) + + + m4andyfl8kd + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1KD) + + + m4andyfl8y + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1Y) + + + m4andyflf + Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0) + + + m4andyflfb + Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0B) + + + m4andyflfc + Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0C) + + + m4andyflfk + Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0K) + + + m4andyflfr + Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0R) + + + m4andyflt + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4) + + + m4andyfltad + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4AD) + + + m4andyfltb + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4B) + + + m4andyfltbd + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4BD) + + + m4andyfltd + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4D) + + + m4andyfltk + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4K) + + + m4andyfltkd + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4KD) + + + m4andyfltr + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4R) + + + m4andyfltrd + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4RD) + + + m4andyflty + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4Y) + + + m4andyfltyd + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4YD) + + + m4andyflu + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3) + + + m4andyfluad + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3AD) + + + m4andyflub + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3B) + + + m4andyflubd + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3BD) + + + m4andyflud + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3D) + + + m4andyfluk + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3K) + + + m4andyflukd + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3KD) + + + m4andyflur + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3R) + + + m4andyflurd + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3RD) + + + m4andyfluy + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3Y) + + + m4andyfluyd + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3YD) + + + m4andyge + Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3, set 1) + + + m4andyge28 + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1) + + + m4andyge28ad + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1AD) + + + m4andyge28b + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1B) + + + m4andyge28bd + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1BD) + + + m4andyge28c + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1C) + + + m4andyge28d + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1D) + + + m4andyge28k + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1K) + + + m4andyge28kd + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1KD) + + + m4andyge28y + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1Y) + + + m4andyge28yd + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1YD) + + + m4andyge2t + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1) + + + m4andyge2tad + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1AD) + + + m4andyge2tb + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1B) + + + m4andyge2tbd + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1BD) + + + m4andyge2td + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1D) + + + m4andyge2tk + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1K) + + + m4andyge2tkd + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1KD) + + + m4andyge2ty + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1Y) + + + m4andyge2tyd + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1YD) + + + m4andyge5t + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1) + + + m4andyge5tad + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1AD) + + + m4andyge5tb + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1B) + + + m4andyge5tbd + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1BD) + + + m4andyge5td + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1D) + + + m4andyge5tk + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1K) + + + m4andyge5tkd + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1KD) + + + m4andyge5ty + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1Y) + + + m4andyge5tyd + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1YD) + + + m4andyge_h1 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 3.0, hack?, set 1) + + + m4andyge_h2 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 3.0, hack?, set 2) + + + m4andyge_h3 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 0.3, hack?, set 1) + + + m4andyge_h4 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 0.3, hack?, set 2) + + + m4andyge_hx1 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 1) + + + m4andyge_hx2 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 2) + + + m4andyge_hx3 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 3) + + + m4andyge_hx4 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 4) + + + m4andyge_hx5 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0CX, hack?) + + + m4andygeg5 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0) + + + m4andygeg5a + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0A) + + + m4andygeg5c + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0C) + + + m4andygeg5d + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0D) + + + m4andygeg5k + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0K) + + + m4andygeg5yd + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0YD) + + + m4andygeg_2 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0) + + + m4andygeg_2c + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0C) + + + m4andygeg_2d + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0D) + + + m4andygeg_2k + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0K) + + + m4andygeg_2yd + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0YD) + + + m4andygegc2 + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AGC 2.0) + + + m4andygegc2d + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AGC 2.0D) + + + m4andygen2_a + Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3, set 2) + + + m4andygen2c + Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3C) + + + m4andygen2d + Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3D) + + + m4andygen2k + Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3K) + + + m4andygen2y + Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3Y) + + + m4apach + Apache (Barcrest) (MPU4 w/ Plasma DMD?) + + + m4apachg + Apache Gold (Empire) (MPU4, set 1) + + + m4apachga + Apache Gold (Empire) (MPU4, set 2) + + + m4apachgb + Apache Gold (Empire) (MPU4, set 3) + + + m4apachgc + Apache Gold (Empire) (MPU4, set 4) + + + m4apachgd + Apache Gold (Empire) (MPU4, set 5) + + + m4apachge + Apache Gold (Empire) (MPU4, set 6) + + + m4apachgf + Apache Gold (Empire) (MPU4, set 7) + + + m4atlan + Atlantis (Barcrest) (DAT, Dutch) (MPU4) + + + m4bagcsh + Bags Of Cash Club (Crystal) (MPU4) (set 1) + + + m4bagcsha + Bags Of Cash Club (Crystal) (MPU4) (set 2) + + + m4bagtel + Bagatelle (Barcrest) (MPU4) (set 1) + + + m4bagtel__0 + Bagatelle (Barcrest) (MPU4) (set 28) + + + m4bagtel__1 + Bagatelle (Barcrest) (MPU4) (set 29) + + + m4bagtel__2 + Bagatelle (Barcrest) (MPU4) (set 30) + + + m4bagtel__3 + Bagatelle (Barcrest) (MPU4) (set 31) + + + m4bagtel__4 + Bagatelle (Barcrest) (MPU4) (set 32) + + + m4bagtel__5 + Bagatelle (Barcrest) (MPU4) (set 33) + + + m4bagtel__6 + Bagatelle (Barcrest) (MPU4) (set 34) + + + m4bagtel__7 + Bagatelle (Barcrest) (MPU4) (set 35) + + + m4bagtel__8 + Bagatelle (Barcrest) (MPU4) (set 36) + + + m4bagtel__9 + Bagatelle (Barcrest) (MPU4) (set 37) + + + m4bagtel__a + Bagatelle (Barcrest) (MPU4) (set 2) + + + m4bagtel__aa + Bagatelle (Barcrest) (MPU4) (set 38) + + + m4bagtel__ab + Bagatelle (Barcrest) (MPU4) (set 39) + + + m4bagtel__ac + Bagatelle (Barcrest) (MPU4) (set 40) + + + m4bagtel__ad + Bagatelle (Barcrest) (MPU4) (set 41) + + + m4bagtel__ae + Bagatelle (Barcrest) (MPU4) (set 42) + + + m4bagtel__af + Bagatelle (Barcrest) (MPU4) (set 43) + + + m4bagtel__ag + Bagatelle (Barcrest) (MPU4) (set 45) + + + m4bagtel__b + Bagatelle (Barcrest) (MPU4) (set 3) + + + m4bagtel__c + Bagatelle (Barcrest) (MPU4) (set 4) + + + m4bagtel__d + Bagatelle (Barcrest) (MPU4) (set 5) + + + m4bagtel__e + Bagatelle (Barcrest) (MPU4) (set 6) + + + m4bagtel__f + Bagatelle (Barcrest) (MPU4) (set 7) + + + m4bagtel__g + Bagatelle (Barcrest) (MPU4) (set 8) + + + m4bagtel__h + Bagatelle (Barcrest) (MPU4) (set 9) + + + m4bagtel__i + Bagatelle (Barcrest) (MPU4) (set 10) + + + m4bagtel__j + Bagatelle (Barcrest) (MPU4) (set 11) + + + m4bagtel__k + Bagatelle (Barcrest) (MPU4) (set 12) + + + m4bagtel__l + Bagatelle (Barcrest) (MPU4) (set 13) + + + m4bagtel__m + Bagatelle (Barcrest) (MPU4) (set 14) + + + m4bagtel__n + Bagatelle (Barcrest) (MPU4) (set 15) + + + m4bagtel__o + Bagatelle (Barcrest) (MPU4) (set 16) + + + m4bagtel__p + Bagatelle (Barcrest) (MPU4) (set 17) + + + m4bagtel__q + Bagatelle (Barcrest) (MPU4) (set 18) + + + m4bagtel__r + Bagatelle (Barcrest) (MPU4) (set 19) + + + m4bagtel__s + Bagatelle (Barcrest) (MPU4) (set 20) + + + m4bagtel__t + Bagatelle (Barcrest) (MPU4) (set 21) + + + m4bagtel__u + Bagatelle (Barcrest) (MPU4) (set 22) + + + m4bagtel__v + Bagatelle (Barcrest) (MPU4) (set 23) + + + m4bagtel__w + Bagatelle (Barcrest) (MPU4) (set 24) + + + m4bagtel__x + Bagatelle (Barcrest) (MPU4) (set 25) + + + m4bagtel__y + Bagatelle (Barcrest) (MPU4) (set 26) + + + m4bagtel__z + Bagatelle (Barcrest) (MPU4) (set 27) + + + m4bandgd + Bands Of Gold (Eurogames) (MPU4) + + + m4bangin + Bangin' Away (Global) (MPU4, set 1) + + + m4bangina + Bangin' Away (Global) (MPU4, set 2) + + + m4banginb + Bangin' Away (Global) (MPU4, set 3) + + + m4bangrs + Bangers 'n' Cash (Empire) (MPU4, set 1) + + + m4bangrsa + Bangers 'n' Cash (Empire) (MPU4, set 2) + + + m4bangrsb + Bangers 'n' Cash (Empire) (MPU4, set 3) + + + m4bankrd + Bank Raid (Empire) (MPU4, set 1) + + + m4bankrda + Bank Raid (Empire) (MPU4, set 2) + + + m4bankrdb + Bank Raid (Empire) (MPU4, set 3) + + + m4bankrdc + Bank Raid (Empire) (MPU4, set 4) + + + m4bankrdd + Bank Raid (Empire) (MPU4, set 5) + + + m4barcrz + Bar Crazy (unknown) (MPU4?) + + + m4bben + Big Ben (Avantime?) (MPU4) (set 1) + + + m4bben__a + Big Ben (Avantime?) (MPU4) (set 2) + + + m4bben__b + Big Ben (Avantime?) (MPU4) (set 3) + + + m4bben__c + Big Ben (Avantime?) (MPU4) (set 4) + + + m4bben__d + Big Ben (Avantime?) (MPU4) (set 5) + + + m4bben__e + Big Ben (Avantime?) (MPU4) (set 6) + + + m4bben__f + Big Ben (Avantime?) (MPU4) (set 7) + + + m4bben__g + Big Ben (Avantime?) (MPU4) (set 8) + + + m4bben__h + Big Ben (Avantime?) (MPU4) (set 9) + + + m4bben__i + Big Ben (Avantime?) (MPU4) (set 10) + + + m4bbox + Brain Box (Avantime?) (MPU4) (set 1) + + + m4bbox__a + Brain Box (Avantime?) (MPU4) (set 2) + + + m4bbox__b + Brain Box (Avantime?) (MPU4) (set 3) + + + m4bbox__c + Brain Box (Avantime?) (MPU4) (set 4) + + + m4bbox__d + Brain Box (Avantime?) (MPU4) (set 5) + + + m4bbox__e + Brain Box (Avantime?) (MPU4) (set 6) + + + m4bbox__f + Brain Box (Avantime?) (MPU4) (set 7) + + + m4bbox__g + Brain Box (Avantime?) (MPU4) (set 8) + + + m4bbox__h + Brain Box (Avantime?) (MPU4) (set 9) + + + m4bbox__i + Brain Box (Avantime?) (MPU4) (set 10) + + + m4bclimb + Bear Climber (MPU4?) + + + m4bdash + Boulder Dash (Barcrest) (MPU4) (set 1) + + + m4bdash__0 + Boulder Dash (Barcrest) (MPU4) (set 28) + + + m4bdash__1 + Boulder Dash (Barcrest) (MPU4) (set 29) + + + m4bdash__2 + Boulder Dash (Barcrest) (MPU4) (set 30) + + + m4bdash__3 + Boulder Dash (Barcrest) (MPU4) (set 31) + + + m4bdash__4 + Boulder Dash (Barcrest) (MPU4) (set 32) + + + m4bdash__5 + Boulder Dash (Barcrest) (MPU4) (set 33) + + + m4bdash__6 + Boulder Dash (Barcrest) (MPU4) (set 34) + + + m4bdash__7 + Boulder Dash (Barcrest) (MPU4) (set 35) + + + m4bdash__8 + Boulder Dash (Barcrest) (MPU4) (set 36) + + + m4bdash__9 + Boulder Dash (Barcrest) (MPU4) (set 37) + + + m4bdash__a + Boulder Dash (Barcrest) (MPU4) (set 2) + + + m4bdash__a0 + Boulder Dash (Barcrest) (MPU4) (set 64) + + + m4bdash__a1 + Boulder Dash (Barcrest) (MPU4) (set 65) + + + m4bdash__a2 + Boulder Dash (Barcrest) (MPU4) (set 66) + + + m4bdash__a3 + Boulder Dash (Barcrest) (MPU4) (set 67) + + + m4bdash__a4 + Boulder Dash (Barcrest) (MPU4) (set 68) + + + m4bdash__aa + Boulder Dash (Barcrest) (MPU4) (set 38) + + + m4bdash__ab + Boulder Dash (Barcrest) (MPU4) (set 39) + + + m4bdash__ac + Boulder Dash (Barcrest) (MPU4) (set 40) + + + m4bdash__ad + Boulder Dash (Barcrest) (MPU4) (set 41) + + + m4bdash__ae + Boulder Dash (Barcrest) (MPU4) (set 42) + + + m4bdash__af + Boulder Dash (Barcrest) (MPU4) (set 43) + + + m4bdash__ag + Boulder Dash (Barcrest) (MPU4) (set 44) + + + m4bdash__ah + Boulder Dash (Barcrest) (MPU4) (set 45) + + + m4bdash__ai + Boulder Dash (Barcrest) (MPU4) (set 46) + + + m4bdash__aj + Boulder Dash (Barcrest) (MPU4) (set 47) + + + m4bdash__ak + Boulder Dash (Barcrest) (MPU4) (set 48) + + + m4bdash__al + Boulder Dash (Barcrest) (MPU4) (set 49) + + + m4bdash__am + Boulder Dash (Barcrest) (MPU4) (set 50) + + + m4bdash__an + Boulder Dash (Barcrest) (MPU4) (set 51) + + + m4bdash__ao + Boulder Dash (Barcrest) (MPU4) (set 52) + + + m4bdash__ap + Boulder Dash (Barcrest) (MPU4) (set 53) + + + m4bdash__aq + Boulder Dash (Barcrest) (MPU4) (set 54) + + + m4bdash__ar + Boulder Dash (Barcrest) (MPU4) (set 55) + + + m4bdash__as + Boulder Dash (Barcrest) (MPU4) (set 56) + + + m4bdash__at + Boulder Dash (Barcrest) (MPU4) (set 57) + + + m4bdash__au + Boulder Dash (Barcrest) (MPU4) (set 58) + + + m4bdash__av + Boulder Dash (Barcrest) (MPU4) (set 59) + + + m4bdash__aw + Boulder Dash (Barcrest) (MPU4) (set 60) + + + m4bdash__ax + Boulder Dash (Barcrest) (MPU4) (set 61) + + + m4bdash__ay + Boulder Dash (Barcrest) (MPU4) (set 62) + + + m4bdash__az + Boulder Dash (Barcrest) (MPU4) (set 63) + + + m4bdash__b + Boulder Dash (Barcrest) (MPU4) (set 3) + + + m4bdash__c + Boulder Dash (Barcrest) (MPU4) (set 4) + + + m4bdash__d + Boulder Dash (Barcrest) (MPU4) (set 5) + + + m4bdash__e + Boulder Dash (Barcrest) (MPU4) (set 6) + + + m4bdash__f + Boulder Dash (Barcrest) (MPU4) (set 7) + + + m4bdash__g + Boulder Dash (Barcrest) (MPU4) (set 8) + + + m4bdash__h + Boulder Dash (Barcrest) (MPU4) (set 9) + + + m4bdash__i + Boulder Dash (Barcrest) (MPU4) (set 10) + + + m4bdash__j + Boulder Dash (Barcrest) (MPU4) (set 11) + + + m4bdash__k + Boulder Dash (Barcrest) (MPU4) (set 12) + + + m4bdash__l + Boulder Dash (Barcrest) (MPU4) (set 13) + + + m4bdash__m + Boulder Dash (Barcrest) (MPU4) (set 14) + + + m4bdash__n + Boulder Dash (Barcrest) (MPU4) (set 15) + + + m4bdash__o + Boulder Dash (Barcrest) (MPU4) (set 16) + + + m4bdash__p + Boulder Dash (Barcrest) (MPU4) (set 17) + + + m4bdash__q + Boulder Dash (Barcrest) (MPU4) (set 18) + + + m4bdash__r + Boulder Dash (Barcrest) (MPU4) (set 19) + + + m4bdash__s + Boulder Dash (Barcrest) (MPU4) (set 20) + + + m4bdash__t + Boulder Dash (Barcrest) (MPU4) (set 21) + + + m4bdash__u + Boulder Dash (Barcrest) (MPU4) (set 22) + + + m4bdash__v + Boulder Dash (Barcrest) (MPU4) (set 23) + + + m4bdash__w + Boulder Dash (Barcrest) (MPU4) (set 24) + + + m4bdash__x + Boulder Dash (Barcrest) (MPU4) (set 25) + + + m4bdash__y + Boulder Dash (Barcrest) (MPU4) (set 26) + + + m4bdash__z + Boulder Dash (Barcrest) (MPU4) (set 27) + + + m4berser + Berserk (Barcrest) (MPU4) (set 1) + + + m4berser__0 + Berserk (Barcrest) (MPU4) (set 28) + + + m4berser__1 + Berserk (Barcrest) (MPU4) (set 29) + + + m4berser__a + Berserk (Barcrest) (MPU4) (set 2) + + + m4berser__b + Berserk (Barcrest) (MPU4) (set 3) + + + m4berser__c + Berserk (Barcrest) (MPU4) (set 4) + + + m4berser__d + Berserk (Barcrest) (MPU4) (set 5) + + + m4berser__e + Berserk (Barcrest) (MPU4) (set 6) + + + m4berser__f + Berserk (Barcrest) (MPU4) (set 7) + + + m4berser__g + Berserk (Barcrest) (MPU4) (set 8) + + + m4berser__h + Berserk (Barcrest) (MPU4) (set 9) + + + m4berser__i + Berserk (Barcrest) (MPU4) (set 10) + + + m4berser__j + Berserk (Barcrest) (MPU4) (set 11) + + + m4berser__k + Berserk (Barcrest) (MPU4) (set 12) + + + m4berser__l + Berserk (Barcrest) (MPU4) (set 13) + + + m4berser__m + Berserk (Barcrest) (MPU4) (set 14) + + + m4berser__n + Berserk (Barcrest) (MPU4) (set 15) + + + m4berser__o + Berserk (Barcrest) (MPU4) (set 16) + + + m4berser__p + Berserk (Barcrest) (MPU4) (set 17) + + + m4berser__q + Berserk (Barcrest) (MPU4) (set 18) + + + m4berser__r + Berserk (Barcrest) (MPU4) (set 19) + + + m4berser__s + Berserk (Barcrest) (MPU4) (set 20) + + + m4berser__t + Berserk (Barcrest) (MPU4) (set 21) + + + m4berser__u + Berserk (Barcrest) (MPU4) (set 22) + + + m4berser__v + Berserk (Barcrest) (MPU4) (set 23) + + + m4berser__w + Berserk (Barcrest) (MPU4) (set 24) + + + m4berser__x + Berserk (Barcrest) (MPU4) (set 25) + + + m4berser__y + Berserk (Barcrest) (MPU4) (set 26) + + + m4berser__z + Berserk (Barcrest) (MPU4) (set 27) + + + m4bigapl + The Big Apple (Mdm) (MPU4, set 1) + + + m4bigapla + The Big Apple (Mdm) (MPU4, set 2) + + + m4bigaplb + The Big Apple (Mdm) (MPU4, set 3) + + + m4bigaplc + The Big Apple (Mdm) (MPU4, set 4) + + + m4bigapld + The Big Apple (Mdm) (MPU4, set 5) + + + m4bigaple + The Big Apple (Mdm) (MPU4, set 6) + + + m4bigban + Big Bandit (Nova) (MPU4) + + + m4bigben + Big Ben (Coinworld) (MPU4, set 1) + + + m4bigbena + Big Ben (Coinworld) (MPU4, set 2) + + + m4bigbenb + Big Ben (Coinworld) (MPU4, set 3) + + + m4bigbend + Big Ben (Coinworld) (MPU4, set 4) + + + m4bigbene + Big Ben (Coinworld) (MPU4, set 5) + + + m4bigbn + Big Ben (Barcrest) (DBB, Dutch) (MPU4) + + + m4bigchd + Big Chief (Barcrest) [BCH, Dutch] (MPU4) + + + m4bigchf + Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 1) + + + m4bigchfa + Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 2) + + + m4bigchfb + Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 3) + + + m4bigchfc + Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 4) + + + m4bigchs + Big Cheese (Empire) (MPU4, set 1) + + + m4bigchsa + Big Cheese (Empire) (MPU4, set 2) + + + m4bigchsb + Big Cheese (Empire) (MPU4, set 3) + + + m4bigmt + The Big Match (Bwb) (MPU4) (set 1) + + + m4bigmt__a + The Big Match (Bwb) (MPU4) (set 2) + + + m4bigmt__b + The Big Match (Bwb) (MPU4) (set 3) + + + m4bigmt__c + The Big Match (Bwb) (MPU4) (set 4) + + + m4bigmt__d + The Big Match (Bwb) (MPU4) (set 5) + + + m4bigmt__e + The Big Match (Bwb) (MPU4) (set 6) + + + m4bigmt__f + The Big Match (Bwb) (MPU4) (set 7) + + + m4bingbl + Bingo Belle (Bwb) (MPU4) (set 1) + + + m4bingbl__a + Bingo Belle (Bwb) (MPU4) (set 2) + + + m4bingbl__b + Bingo Belle (Bwb) (MPU4) (set 3) + + + m4bingbl__c + Bingo Belle (Bwb) (MPU4) (set 4) + + + m4bingbl__d + Bingo Belle (Bwb) (MPU4) (set 5) + + + m4bingbl__e + Bingo Belle (Bwb) (MPU4) (set 6) + + + m4bingbl__f + Bingo Belle (Bwb) (MPU4) (set 7) + + + m4bingbl__g + Bingo Belle (Bwb) (MPU4) (set 8) + + + m4bingbs + Bingo Belle Showcase (Bwb) (MPU4) (set 1) + + + m4bingbs__a + Bingo Belle Showcase (Bwb) (MPU4) (set 2) + + + m4bingbs__b + Bingo Belle Showcase (Bwb) (MPU4) (set 3) + + + m4bingbs__c + Bingo Belle Showcase (Bwb) (MPU4) (set 4) + + + m4bingbs__d + Bingo Belle Showcase (Bwb) (MPU4) (set 5) + + + m4bingbs__e + Bingo Belle Showcase (Bwb) (MPU4) (set 6) + + + m4bingbs__f + Bingo Belle Showcase (Bwb) (MPU4) (set 7) + + + m4bingcl + Bingo Club (Bwb) (MPU4) (set 1) + + + m4bingcl__a + Bingo Club (Bwb) (MPU4) (set 2) + + + m4bingcl__b + Bingo Club (Bwb) (MPU4) (set 3) + + + m4bj + Black Jack (Barcrest) [Dutch] (MPU4) + + + m4bjac + Blackjack Club (Barcrest) (MPU4) (set 1) + + + m4bjaca + Blackjack Club (Barcrest) (MPU4) (set 2) + + + m4bjack + Black Jack (Barcrest) (MPU4) (set 1) + + + m4bjacka + Black Jack (Barcrest) (MPU4) (set 2) + + + m4bjc + Black Jack Club (Barcrest) (Dutch) (MPU4) + + + m4bjsm + Blackjack Super Multi (Barcrest) (MPU4) (SM H) + + + m4bjsma + Blackjack Super Multi (Barcrest) (MPU4) + + + m4blflsh + Blue Flash (Bwb) (MPU4) (set 1) + + + m4blflsha + Blue Flash (Bwb) (MPU4) (set 2) + + + m4blflshb + Blue Flash (Bwb) (MPU4) (set 3) + + + m4blflshc + Blue Flash (Bwb) (MPU4) (set 4) + + + m4blflshd + Blue Flash (Bwb) (MPU4) (set 5) + + + m4blflshe + Blue Flash (Bwb) (MPU4) (set 6) + + + m4blkbul + Super Play (Black Bull?) (Czech) (Barcrest) [XSP] (MPU4) + + + m4blkbuld + Gun Smoke (Barcrest) (Dutch, alt sound roms) (MPU4) + + + m4blkcat + Black Cat (Barcrest) (Dutch) (MPU4) (DBL 1.4) + + + m4blkgd + Black Gold (Gemini) (MPU4) (set 1) + + + m4blkgda + Black Gold (Gemini) (MPU4) (set 2) + + + m4blkmgc + Black Magic (Avantime?) (MPU4) (Latvia, set 1) + + + m4blkmgc_1 + Black Magic (Avantime?) (MPU4) (Latvia, set 2) + + + m4blkmgc_u1 + Black Magic (Avantime?) (MPU4) (Ukraine, set 1) + + + m4blkmgc_u2 + Black Magic (Avantime?) (MPU4) (Ukraine, set 2) + + + m4blkmgc_u3 + Black Magic (Avantime?) (MPU4) (Ukraine, set 3) + + + m4blkmgc_u4 + Black Magic (Avantime?) (MPU4) (Ukraine, set 4) + + + m4blkmgc_u5 + Black Magic (Avantime?) (MPU4) (Ukraine, set 5) + + + m4blkmgc_u6 + Black Magic (Avantime?) (MPU4) (Ukraine, set 6) + + + m4blkwhd + Black & White (Barcrest) [Dutch] (MPU4) (DBW 1.1) + + + m4blsbys + Blues Boys (Bwb) (MPU4) (set 1) + + + m4blsbys__0 + Blues Boys (Bwb) (MPU4) (set 28) + + + m4blsbys__1 + Blues Boys (Bwb) (MPU4) (set 29) + + + m4blsbys__2 + Blues Boys (Bwb) (MPU4) (set 30) + + + m4blsbys__3 + Blues Boys (Bwb) (MPU4) (set 31) + + + m4blsbys__4 + Blues Boys (Bwb) (MPU4) (set 32) + + + m4blsbys__5 + Blues Boys (Bwb) (MPU4) (set 33) + + + m4blsbys__6 + Blues Boys (Bwb) (MPU4) (set 34) + + + m4blsbys__7 + Blues Boys (Bwb) (MPU4) (set 35) + + + m4blsbys__8 + Blues Boys (Bwb) (MPU4) (set 36) + + + m4blsbys__9 + Blues Boys (Bwb) (MPU4) (set 37) + + + m4blsbys__a + Blues Boys (Bwb) (MPU4) (set 2) + + + m4blsbys__aa + Blues Boys (Bwb) (MPU4) (set 38) + + + m4blsbys__ab + Blues Boys (Bwb) (MPU4) (set 39) + + + m4blsbys__ac + Blues Boys (Bwb) (MPU4) (set 40) + + + m4blsbys__ad + Blues Boys (Bwb) (MPU4) (set 41) + + + m4blsbys__b + Blues Boys (Bwb) (MPU4) (set 3) + + + m4blsbys__c + Blues Boys (Bwb) (MPU4) (set 4) + + + m4blsbys__d + Blues Boys (Bwb) (MPU4) (set 5) + + + m4blsbys__e + Blues Boys (Bwb) (MPU4) (set 6) + + + m4blsbys__f + Blues Boys (Bwb) (MPU4) (set 7) + + + m4blsbys__g + Blues Boys (Bwb) (MPU4) (set 8) + + + m4blsbys__h + Blues Boys (Bwb) (MPU4) (set 9) + + + m4blsbys__i + Blues Boys (Bwb) (MPU4) (set 10) + + + m4blsbys__j + Blues Boys (Bwb) (MPU4) (set 11) + + + m4blsbys__k + Blues Boys (Bwb) (MPU4) (set 12) + + + m4blsbys__l + Blues Boys (Bwb) (MPU4) (set 13) + + + m4blsbys__m + Blues Boys (Bwb) (MPU4) (set 14) + + + m4blsbys__n + Blues Boys (Bwb) (MPU4) (set 15) + + + m4blsbys__o + Blues Boys (Bwb) (MPU4) (set 16) + + + m4blsbys__p + Blues Boys (Bwb) (MPU4) (set 17) + + + m4blsbys__q + Blues Boys (Bwb) (MPU4) (set 18) + + + m4blsbys__r + Blues Boys (Bwb) (MPU4) (set 19) + + + m4blsbys__s + Blues Boys (Bwb) (MPU4) (set 20) + + + m4blsbys__t + Blues Boys (Bwb) (MPU4) (set 21) + + + m4blsbys__u + Blues Boys (Bwb) (MPU4) (set 22) + + + m4blsbys__v + Blues Boys (Bwb) (MPU4) (set 23) + + + m4blsbys__w + Blues Boys (Bwb) (MPU4) (set 24) + + + m4blsbys__x + Blues Boys (Bwb) (MPU4) (set 25) + + + m4blsbys__y + Blues Boys (Bwb) (MPU4) (set 26) + + + m4blsbys__z + Blues Boys (Bwb) (MPU4) (set 27) + + + m4blstbk + Blast A Bank (Barcrest) (MPU4) + + + m4bluedm + Blue Diamond (Barcrest) (MPU4) (DBD1.0) + + + m4bluemn + Blue Moon (Barcrest) (MPU4) (BLU 2.3) + + + m4bluemna + Blue Moon (Barcrest) (MPU4) (BLU 2.1) + + + m4bluemnb + Blue Moon (Barcrest) (MPU4) (BLU 1.1) + + + m4bluesn + Blues Boys (Nova) (MPU4) + + + m4blztrl + Blazing Trails (Mdm) (MPU4, set 1) + + + m4blztrla + Blazing Trails (Mdm) (MPU4, set 2) + + + m4bnknot + Bank A Note (Barcrest) [BN 1.0] (MPU4) + + + m4bnkrol + Bank Roller Club (Barcrest) (MPU4) (set 1) + + + m4bnkrol__a + Bank Roller Club (Barcrest) (MPU4) (set 2) + + + m4bnkrol__b + Bank Roller Club (Barcrest) (MPU4) (set 3) + + + m4bnkrol__c + Bank Roller Club (Barcrest) (MPU4) (set 4) + + + m4bnkrol__d + Bank Roller Club (Barcrest) (MPU4) (set 5) + + + m4bnkrol__e + Bank Roller Club (Barcrest) (MPU4) (set 6) + + + m4bodymt + Body Match (Mdm) (MPU4) + + + m4boltbl + Bolt From The Blue (DJE) (MPU4, set 1) + + + m4boltbla + Bolt From The Blue (DJE) (MPU4, set 2) + + + m4boltblb + Bolt From The Blue (DJE) (MPU4, set 3) + + + m4boltblc + Bolt From The Blue (DJE) (MPU4, set 4) + + + m4bonzbn + Bingo Bonanza (unknown) (MPU4?) + + + m4booze + Booze Cruise (Extreme) (MPU4) + + + m4brdway + Broadway (Barcrest) (DBR, Dutch) (MPU4) + + + m4brktak + Break & Take (Barcrest) (MPU4) + + + m4brnze + Bronze Voyage (unknown) (MPU4) (set 1) + + + m4brnzea + Bronze Voyage (unknown) (MPU4) (set 2) + + + m4brnzeb + Bronze Voyage (unknown) (MPU4) (set 3) + + + m4brook + Brooklyn (Barcrest) (MPU4) (PFT 1.8) + + + m4btclok + Beat The Clock (Barcrest) (MPU4) + + + m4buc + Buccaneer (Barcrest) (MPU4) (set 1) + + + m4buc__0 + Buccaneer (Barcrest) (MPU4) (set 28) + + + m4buc__1 + Buccaneer (Barcrest) (MPU4) (set 29) + + + m4buc__2 + Buccaneer (Barcrest) (MPU4) (set 30) + + + m4buc__3 + Buccaneer (Barcrest) (MPU4) (set 31) + + + m4buc__4 + Buccaneer (Barcrest) (MPU4) (set 32) + + + m4buc__5 + Buccaneer (Barcrest) (MPU4) (set 33) + + + m4buc__6 + Buccaneer (Barcrest) (MPU4) (set 34) + + + m4buc__7 + Buccaneer (Barcrest) (MPU4) (set 35) + + + m4buc__8 + Buccaneer (Barcrest) (MPU4) (set 36) + + + m4buc__9 + Buccaneer (Barcrest) (MPU4) (set 37) + + + m4buc__a + Buccaneer (Barcrest) (MPU4) (set 2) + + + m4buc__aa + Buccaneer (Barcrest) (MPU4) (set 38) + + + m4buc__ab + Buccaneer (Barcrest) (MPU4) (set 39) + + + m4buc__ac + Buccaneer (Barcrest) (MPU4) (set 40) + + + m4buc__ad + Buccaneer (Barcrest) (MPU4) (set 41) + + + m4buc__ae + Buccaneer (Barcrest) (MPU4) (set 42) + + + m4buc__af + Buccaneer (Barcrest) (MPU4) (set 43) + + + m4buc__ag + Buccaneer (Barcrest) (MPU4) (set 44) + + + m4buc__ah + Buccaneer (Barcrest) (MPU4) (set 45) + + + m4buc__ai + Buccaneer (Barcrest) (MPU4) (set 46) + + + m4buc__aj + Buccaneer (Barcrest) (MPU4) (set 47) + + + m4buc__ak + Buccaneer (Barcrest) (MPU4) (set 48) + + + m4buc__al + Buccaneer (Barcrest) (MPU4) (set 49) + + + m4buc__am + Buccaneer (Barcrest) (MPU4) (set 50) + + + m4buc__an + Buccaneer (Barcrest) (MPU4) (set 51) + + + m4buc__ao + Buccaneer (Barcrest) (MPU4) (set 52) + + + m4buc__ap + Buccaneer (Barcrest) (MPU4) (set 53) + + + m4buc__aq + Buccaneer (Barcrest) (MPU4) (set 54) + + + m4buc__ar + Buccaneer (Barcrest) (MPU4) (set 55) + + + m4buc__as + Buccaneer (Barcrest) (MPU4) (set 56) + + + m4buc__at + Buccaneer (Barcrest) (MPU4) (set 57) + + + m4buc__au + Buccaneer (Barcrest) (MPU4) (set 58) + + + m4buc__av + Buccaneer (Barcrest) (MPU4) (set 59) + + + m4buc__aw + Buccaneer (Barcrest) (MPU4) (set 60) + + + m4buc__ax + Buccaneer (Barcrest) (MPU4) (set 61) + + + m4buc__ay + Buccaneer (Barcrest) (MPU4) (set 62) + + + m4buc__az + Buccaneer (Barcrest) (MPU4) (set 63) + + + m4buc__b + Buccaneer (Barcrest) (MPU4) (set 3) + + + m4buc__c + Buccaneer (Barcrest) (MPU4) (set 4) + + + m4buc__d + Buccaneer (Barcrest) (MPU4) (set 5) + + + m4buc__e + Buccaneer (Barcrest) (MPU4) (set 6) + + + m4buc__f + Buccaneer (Barcrest) (MPU4) (set 7) + + + m4buc__g + Buccaneer (Barcrest) (MPU4) (set 8) + + + m4buc__h + Buccaneer (Barcrest) (MPU4) (set 9) + + + m4buc__i + Buccaneer (Barcrest) (MPU4) (set 10) + + + m4buc__j + Buccaneer (Barcrest) (MPU4) (set 11) + + + m4buc__k + Buccaneer (Barcrest) (MPU4) (set 12) + + + m4buc__l + Buccaneer (Barcrest) (MPU4) (set 13) + + + m4buc__m + Buccaneer (Barcrest) (MPU4) (set 14) + + + m4buc__n + Buccaneer (Barcrest) (MPU4) (set 15) + + + m4buc__o + Buccaneer (Barcrest) (MPU4) (set 16) + + + m4buc__p + Buccaneer (Barcrest) (MPU4) (set 17) + + + m4buc__q + Buccaneer (Barcrest) (MPU4) (set 18) + + + m4buc__r + Buccaneer (Barcrest) (MPU4) (set 19) + + + m4buc__s + Buccaneer (Barcrest) (MPU4) (set 20) + + + m4buc__t + Buccaneer (Barcrest) (MPU4) (set 21) + + + m4buc__u + Buccaneer (Barcrest) (MPU4) (set 22) + + + m4buc__v + Buccaneer (Barcrest) (MPU4) (set 23) + + + m4buc__w + Buccaneer (Barcrest) (MPU4) (set 24) + + + m4buc__x + Buccaneer (Barcrest) (MPU4) (set 25) + + + m4buc__y + Buccaneer (Barcrest) (MPU4) (set 26) + + + m4buc__z + Buccaneer (Barcrest) (MPU4) (set 27) + + + m4bucclb + Buccaneer Club (Crystal) (MPU4) (set 1) + + + m4bucclba + Buccaneer Club (Crystal) (MPU4) (set 2) + + + m4bucclbb + Buccaneer Club (Crystal) (MPU4) (set 3) + + + m4bucclbc + Buccaneer Club (Crystal) (MPU4) (set 4) + + + m4bucks + Bucks Fizz Club (Barcrest) (MPU4) + + + m4bullio + Bullion Club (Crystal) (MPU4) (set 1) + + + m4bullioa + Bullion Club (Crystal) (MPU4) (set 2) + + + m4bulliob + Bullion Club (Crystal) (MPU4) (set 3) + + + m4c2 + Circus Circus 2 (Nova?) (MPU4) + + + m4c9 + Cloud Nine (Barcrest) (MPU4) (set 1) + + + m4c999 + Cloud 999 (Barcrest) (MPU4) (OC9 0.3, set 1) + + + m4c999a + Cloud 999 (Barcrest) (MPU4) (OC9 0.3, set 2) + + + m4c999b + Cloud 999 (Barcrest) (MPU4) (CLN 3.6) + + + m4c999c + Cloud 999 (Barcrest) (MPU4) (CLN 3.0) + + + m4c9__0 + Cloud Nine (Barcrest) (MPU4) (set 28) + + + m4c9__1 + Cloud Nine (Barcrest) (MPU4) (set 29) + + + m4c9__2 + Cloud Nine (Barcrest) (MPU4) (set 30) + + + m4c9__3 + Cloud Nine (Barcrest) (MPU4) (set 31) + + + m4c9__4 + Cloud Nine (Barcrest) (MPU4) (set 32) + + + m4c9__5 + Cloud Nine (Barcrest) (MPU4) (set 33) + + + m4c9__6 + Cloud Nine (Barcrest) (MPU4) (set 34) + + + m4c9__7 + Cloud Nine (Barcrest) (MPU4) (set 35) + + + m4c9__8 + Cloud Nine (Barcrest) (MPU4) (set 36) + + + m4c9__9 + Cloud Nine (Barcrest) (MPU4) (set 37) + + + m4c9__a + Cloud Nine (Barcrest) (MPU4) (set 2) + + + m4c9__a0 + Cloud Nine (Barcrest) (MPU4) (set 64) + + + m4c9__a1 + Cloud Nine (Barcrest) (MPU4) (set 65) + + + m4c9__a2 + Cloud Nine (Barcrest) (MPU4) (set 66) + + + m4c9__a3 + Cloud Nine (Barcrest) (MPU4) (set 67) + + + m4c9__aa + Cloud Nine (Barcrest) (MPU4) (set 38) + + + m4c9__ab + Cloud Nine (Barcrest) (MPU4) (set 39) + + + m4c9__ac + Cloud Nine (Barcrest) (MPU4) (set 40) + + + m4c9__ad + Cloud Nine (Barcrest) (MPU4) (set 41) + + + m4c9__ae + Cloud Nine (Barcrest) (MPU4) (set 42) + + + m4c9__af + Cloud Nine (Barcrest) (MPU4) (set 43) + + + m4c9__ag + Cloud Nine (Barcrest) (MPU4) (set 44) + + + m4c9__ah + Cloud Nine (Barcrest) (MPU4) (set 45) + + + m4c9__ai + Cloud Nine (Barcrest) (MPU4) (set 46) + + + m4c9__aj + Cloud Nine (Barcrest) (MPU4) (set 47) + + + m4c9__ak + Cloud Nine (Barcrest) (MPU4) (set 48) + + + m4c9__al + Cloud Nine (Barcrest) (MPU4) (set 49) + + + m4c9__am + Cloud Nine (Barcrest) (MPU4) (set 50) + + + m4c9__an + Cloud Nine (Barcrest) (MPU4) (set 51) + + + m4c9__ao + Cloud Nine (Barcrest) (MPU4) (set 52) + + + m4c9__ap + Cloud Nine (Barcrest) (MPU4) (set 53) + + + m4c9__aq + Cloud Nine (Barcrest) (MPU4) (set 54) + + + m4c9__ar + Cloud Nine (Barcrest) (MPU4) (set 55) + + + m4c9__as + Cloud Nine (Barcrest) (MPU4) (set 56) + + + m4c9__at + Cloud Nine (Barcrest) (MPU4) (set 57) + + + m4c9__au + Cloud Nine (Barcrest) (MPU4) (set 58) + + + m4c9__av + Cloud Nine (Barcrest) (MPU4) (set 59) + + + m4c9__aw + Cloud Nine (Barcrest) (MPU4) (set 60) + + + m4c9__ax + Cloud Nine (Barcrest) (MPU4) (set 61) + + + m4c9__ay + Cloud Nine (Barcrest) (MPU4) (set 62) + + + m4c9__az + Cloud Nine (Barcrest) (MPU4) (set 63) + + + m4c9__b + Cloud Nine (Barcrest) (MPU4) (set 3) + + + m4c9__c + Cloud Nine (Barcrest) (MPU4) (set 4) + + + m4c9__d + Cloud Nine (Barcrest) (MPU4) (set 5) + + + m4c9__e + Cloud Nine (Barcrest) (MPU4) (set 6) + + + m4c9__f + Cloud Nine (Barcrest) (MPU4) (set 7) + + + m4c9__g + Cloud Nine (Barcrest) (MPU4) (set 8) + + + m4c9__h + Cloud Nine (Barcrest) (MPU4) (set 9) + + + m4c9__i + Cloud Nine (Barcrest) (MPU4) (set 10) + + + m4c9__j + Cloud Nine (Barcrest) (MPU4) (set 11) + + + m4c9__k + Cloud Nine (Barcrest) (MPU4) (set 12) + + + m4c9__l + Cloud Nine (Barcrest) (MPU4) (set 13) + + + m4c9__m + Cloud Nine (Barcrest) (MPU4) (set 14) + + + m4c9__n + Cloud Nine (Barcrest) (MPU4) (set 15) + + + m4c9__o + Cloud Nine (Barcrest) (MPU4) (set 16) + + + m4c9__p + Cloud Nine (Barcrest) (MPU4) (set 17) + + + m4c9__q + Cloud Nine (Barcrest) (MPU4) (set 18) + + + m4c9__r + Cloud Nine (Barcrest) (MPU4) (set 19) + + + m4c9__s + Cloud Nine (Barcrest) (MPU4) (set 20) + + + m4c9__t + Cloud Nine (Barcrest) (MPU4) (set 21) + + + m4c9__u + Cloud Nine (Barcrest) (MPU4) (set 22) + + + m4c9__v + Cloud Nine (Barcrest) (MPU4) (set 23) + + + m4c9__w + Cloud Nine (Barcrest) (MPU4) (set 24) + + + m4c9__x + Cloud Nine (Barcrest) (MPU4) (set 25) + + + m4c9__y + Cloud Nine (Barcrest) (MPU4) (set 26) + + + m4c9__z + Cloud Nine (Barcrest) (MPU4) (set 27) + + + m4c9c + Cloud Nine Club (Barcrest) (MPU4) (CNC 2.1) + + + m4calama + Calamari Club (Barcrest) (MPU4) (set 1) + + + m4calama__a + Calamari Club (Barcrest) (MPU4) (set 2) + + + m4calama__b + Calamari Club (Barcrest) (MPU4) (set 3) + + + m4calama__c + Calamari Club (Barcrest) (MPU4) (set 4) + + + m4calama__d + Calamari Club (Barcrest) (MPU4) (set 5) + + + m4calama__e + Calamari Club (Barcrest) (MPU4) (set 6) + + + m4calama__f + Calamari Club (Barcrest) (MPU4) (set 7) + + + m4calama__g + Calamari Club (Barcrest) (MPU4) (set 8) + + + m4calama__h + Calamari Club (Barcrest) (MPU4) (set 9) + + + m4calama__i + Calamari Club (Barcrest) (MPU4) (set 10) + + + m4calama__j + Calamari Club (Barcrest) (MPU4) (set 11) + + + m4calicl + California Club (Barcrest) (MPU4) (set 1) + + + m4calicla + California Club (Barcrest) (MPU4) (set 2) + + + m4caliclb + California Club (Barcrest) (MPU4) (set 3) + + + m4caliclc + California Club (Barcrest) (MPU4) (set 4) + + + m4calicld + California Club (Barcrest) (MPU4) (set 5) + + + m4captb + Captain Bear (MPU4?) + + + m4cardcs + Card Cash (Barcrest) (MPU4) (CCS 1.9) + + + m4carou + Carousel Club (Crystal) (MPU4) (set 1) + + + m4caroua + Carousel Club (Crystal) (MPU4) (set 2) + + + m4caroub + Carousel Club (Crystal) (MPU4) (set 3) + + + m4carouc + Carousel Club (Crystal) (MPU4) (set 4) + + + m4cashat + Cash Attack (Barcrest) (MPU4) (set 1) + + + m4cashat__0 + Cash Attack (Barcrest) (MPU4) (set 28) + + + m4cashat__1 + Cash Attack (Barcrest) (MPU4) (set 29) + + + m4cashat__2 + Cash Attack (Barcrest) (MPU4) (set 30) + + + m4cashat__3 + Cash Attack (Barcrest) (MPU4) (set 31) + + + m4cashat__4 + Cash Attack (Barcrest) (MPU4) (set 32) + + + m4cashat__5 + Cash Attack (Barcrest) (MPU4) (set 33) + + + m4cashat__6 + Cash Attack (Barcrest) (MPU4) (set 34) + + + m4cashat__7 + Cash Attack (Barcrest) (MPU4) (set 35) + + + m4cashat__8 + Cash Attack (Barcrest) (MPU4) (set 36) + + + m4cashat__9 + Cash Attack (Barcrest) (MPU4) (set 37) + + + m4cashat__a + Cash Attack (Barcrest) (MPU4) (set 2) + + + m4cashat__aa + Cash Attack (Barcrest) (MPU4) (set 38) + + + m4cashat__ab + Cash Attack (Barcrest) (MPU4) (set 39) + + + m4cashat__ac + Cash Attack (Barcrest) (MPU4) (set 40) + + + m4cashat__ad + Cash Attack (Barcrest) (MPU4) (set 41) + + + m4cashat__ae + Cash Attack (Barcrest) (MPU4) (set 42) + + + m4cashat__af + Cash Attack (Barcrest) (MPU4) (set 43) + + + m4cashat__ag + Cash Attack (Barcrest) (MPU4) (set 44) + + + m4cashat__ah + Cash Attack (Barcrest) (MPU4) (set 45) + + + m4cashat__ai + Cash Attack (Barcrest) (MPU4) (set 46) + + + m4cashat__aj + Cash Attack (Barcrest) (MPU4) (set 47) + + + m4cashat__ak + Cash Attack (Barcrest) (MPU4) (set 48) + + + m4cashat__al + Cash Attack (Barcrest) (MPU4) (set 49) + + + m4cashat__am + Cash Attack (Barcrest) (MPU4) (set 50) + + + m4cashat__an + Cash Attack (Barcrest) (MPU4) (set 51) + + + m4cashat__ao + Cash Attack (Barcrest) (MPU4) (set 52) + + + m4cashat__ap + Cash Attack (Barcrest) (MPU4) (set 53) + + + m4cashat__aq + Cash Attack (Barcrest) (MPU4) (set 54) + + + m4cashat__ar + Cash Attack (Barcrest) (MPU4) (set 55) + + + m4cashat__b + Cash Attack (Barcrest) (MPU4) (set 3) + + + m4cashat__c + Cash Attack (Barcrest) (MPU4) (set 4) + + + m4cashat__d + Cash Attack (Barcrest) (MPU4) (set 5) + + + m4cashat__e + Cash Attack (Barcrest) (MPU4) (set 6) + + + m4cashat__f + Cash Attack (Barcrest) (MPU4) (set 7) + + + m4cashat__g + Cash Attack (Barcrest) (MPU4) (set 8) + + + m4cashat__h + Cash Attack (Barcrest) (MPU4) (set 9) + + + m4cashat__i + Cash Attack (Barcrest) (MPU4) (set 10) + + + m4cashat__j + Cash Attack (Barcrest) (MPU4) (set 11) + + + m4cashat__k + Cash Attack (Barcrest) (MPU4) (set 12) + + + m4cashat__l + Cash Attack (Barcrest) (MPU4) (set 13) + + + m4cashat__m + Cash Attack (Barcrest) (MPU4) (set 14) + + + m4cashat__n + Cash Attack (Barcrest) (MPU4) (set 15) + + + m4cashat__o + Cash Attack (Barcrest) (MPU4) (set 16) + + + m4cashat__p + Cash Attack (Barcrest) (MPU4) (set 17) + + + m4cashat__q + Cash Attack (Barcrest) (MPU4) (set 18) + + + m4cashat__r + Cash Attack (Barcrest) (MPU4) (set 19) + + + m4cashat__s + Cash Attack (Barcrest) (MPU4) (set 20) + + + m4cashat__t + Cash Attack (Barcrest) (MPU4) (set 21) + + + m4cashat__u + Cash Attack (Barcrest) (MPU4) (set 22) + + + m4cashat__v + Cash Attack (Barcrest) (MPU4) (set 23) + + + m4cashat__w + Cash Attack (Barcrest) (MPU4) (set 24) + + + m4cashat__x + Cash Attack (Barcrest) (MPU4) (set 25) + + + m4cashat__y + Cash Attack (Barcrest) (MPU4) (set 26) + + + m4cashat__z + Cash Attack (Barcrest) (MPU4) (set 27) + + + m4cashcn + Cash Connect (Barcrest) (MPU4) (CCO 3.2) + + + m4cashco + Cash Counter (Barcrest) (MPU4) (C3 2.4) + + + m4cashcoa + Cash Counter (Barcrest) (MPU4) (C3 1.8) + + + m4cashcob + Cash Counter (Barcrest) (MPU4) (CO 0.5) + + + m4cashcoc + Cash Counter (Barcrest) (MPU4) (C3 3.1) + + + m4cashcod + Cash Connect (Barcrest) (MPU4) (C3 2.0) + + + m4cashln + Cash Lines (Barcrest) (MPU4) (set 1) + + + m4cashln__0 + Cash Lines (Barcrest) (MPU4) (set 28) + + + m4cashln__1 + Cash Lines (Barcrest) (MPU4) (set 29) + + + m4cashln__2 + Cash Lines (Barcrest) (MPU4) (set 30) + + + m4cashln__3 + Cash Lines (Barcrest) (MPU4) (set 31) + + + m4cashln__4 + Cash Lines (Barcrest) (MPU4) (set 32) + + + m4cashln__5 + Cash Lines (Barcrest) (MPU4) (set 33) + + + m4cashln__6 + Cash Lines (Barcrest) (MPU4) (set 34) + + + m4cashln__7 + Cash Lines (Barcrest) (MPU4) (set 35) + + + m4cashln__8 + Cash Lines (Barcrest) (MPU4) (set 36) + + + m4cashln__9 + Cash Lines (Barcrest) (MPU4) (set 37) + + + m4cashln__a + Cash Lines (Barcrest) (MPU4) (set 2) + + + m4cashln__a0 + Cash Lines (Barcrest) (MPU4) (set 64) + + + m4cashln__a1 + Cash Lines (Barcrest) (MPU4) (set 65) + + + m4cashln__a2 + Cash Lines (Barcrest) (MPU4) (set 66) + + + m4cashln__a3 + Cash Lines (Barcrest) (MPU4) (set 67) + + + m4cashln__a4 + Cash Lines (Barcrest) (MPU4) (set 68) + + + m4cashln__a5 + Cash Lines (Barcrest) (MPU4) (set 69) + + + m4cashln__a6 + Cash Lines (Barcrest) (MPU4) (set 70) + + + m4cashln__a7 + Cash Lines (Barcrest) (MPU4) (set 71) + + + m4cashln__a8 + Cash Lines (Barcrest) (MPU4) (set 72) + + + m4cashln__a9 + Cash Lines (Barcrest) (MPU4) (set 73) + + + m4cashln__aa + Cash Lines (Barcrest) (MPU4) (set 38) + + + m4cashln__ab + Cash Lines (Barcrest) (MPU4) (set 39) + + + m4cashln__ac + Cash Lines (Barcrest) (MPU4) (set 40) + + + m4cashln__ad + Cash Lines (Barcrest) (MPU4) (set 41) + + + m4cashln__ae + Cash Lines (Barcrest) (MPU4) (set 42) + + + m4cashln__af + Cash Lines (Barcrest) (MPU4) (set 43) + + + m4cashln__ag + Cash Lines (Barcrest) (MPU4) (set 44) + + + m4cashln__ah + Cash Lines (Barcrest) (MPU4) (set 45) + + + m4cashln__ai + Cash Lines (Barcrest) (MPU4) (set 46) + + + m4cashln__aj + Cash Lines (Barcrest) (MPU4) (set 47) + + + m4cashln__ak + Cash Lines (Barcrest) (MPU4) (set 48) + + + m4cashln__al + Cash Lines (Barcrest) (MPU4) (set 49) + + + m4cashln__am + Cash Lines (Barcrest) (MPU4) (set 50) + + + m4cashln__an + Cash Lines (Barcrest) (MPU4) (set 51) + + + m4cashln__ao + Cash Lines (Barcrest) (MPU4) (set 52) + + + m4cashln__ap + Cash Lines (Barcrest) (MPU4) (set 53) + + + m4cashln__aq + Cash Lines (Barcrest) (MPU4) (set 54) + + + m4cashln__ar + Cash Lines (Barcrest) (MPU4) (set 55) + + + m4cashln__as + Cash Lines (Barcrest) (MPU4) (set 56) + + + m4cashln__at + Cash Lines (Barcrest) (MPU4) (set 57) + + + m4cashln__au + Cash Lines (Barcrest) (MPU4) (set 58) + + + m4cashln__av + Cash Lines (Barcrest) (MPU4) (set 59) + + + m4cashln__aw + Cash Lines (Barcrest) (MPU4) (set 60) + + + m4cashln__ax + Cash Lines (Barcrest) (MPU4) (set 61) + + + m4cashln__ay + Cash Lines (Barcrest) (MPU4) (set 62) + + + m4cashln__az + Cash Lines (Barcrest) (MPU4) (set 63) + + + m4cashln__b + Cash Lines (Barcrest) (MPU4) (set 3) + + + m4cashln__ba + Cash Lines (Barcrest) (MPU4) (set 74) + + + m4cashln__bb + Cash Lines (Barcrest) (MPU4) (set 75) + + + m4cashln__bc + Cash Lines (Barcrest) (MPU4) (set 76) + + + m4cashln__bd + Cash Lines (Barcrest) (MPU4) (set 77) + + + m4cashln__be + Cash Lines (Barcrest) (MPU4) (set 78) + + + m4cashln__bf + Cash Lines (Barcrest) (MPU4) (set 79) + + + m4cashln__bg + Cash Lines (Barcrest) (MPU4) (set 80) + + + m4cashln__bh + Cash Lines (Barcrest) (MPU4) (set 81) + + + m4cashln__bi + Cash Lines (Barcrest) (MPU4) (set 82) + + + m4cashln__bj + Cash Lines (Barcrest) (MPU4) (set 83) + + + m4cashln__c + Cash Lines (Barcrest) (MPU4) (set 4) + + + m4cashln__d + Cash Lines (Barcrest) (MPU4) (set 5) + + + m4cashln__e + Cash Lines (Barcrest) (MPU4) (set 6) + + + m4cashln__f + Cash Lines (Barcrest) (MPU4) (set 7) + + + m4cashln__g + Cash Lines (Barcrest) (MPU4) (set 8) + + + m4cashln__h + Cash Lines (Barcrest) (MPU4) (set 9) + + + m4cashln__i + Cash Lines (Barcrest) (MPU4) (set 10) + + + m4cashln__j + Cash Lines (Barcrest) (MPU4) (set 11) + + + m4cashln__k + Cash Lines (Barcrest) (MPU4) (set 12) + + + m4cashln__l + Cash Lines (Barcrest) (MPU4) (set 13) + + + m4cashln__m + Cash Lines (Barcrest) (MPU4) (set 14) + + + m4cashln__n + Cash Lines (Barcrest) (MPU4) (set 15) + + + m4cashln__o + Cash Lines (Barcrest) (MPU4) (set 16) + + + m4cashln__p + Cash Lines (Barcrest) (MPU4) (set 17) + + + m4cashln__q + Cash Lines (Barcrest) (MPU4) (set 18) + + + m4cashln__r + Cash Lines (Barcrest) (MPU4) (set 19) + + + m4cashln__s + Cash Lines (Barcrest) (MPU4) (set 20) + + + m4cashln__t + Cash Lines (Barcrest) (MPU4) (set 21) + + + m4cashln__u + Cash Lines (Barcrest) (MPU4) (set 22) + + + m4cashln__v + Cash Lines (Barcrest) (MPU4) (set 23) + + + m4cashln__w + Cash Lines (Barcrest) (MPU4) (set 24) + + + m4cashln__x + Cash Lines (Barcrest) (MPU4) (set 25) + + + m4cashln__y + Cash Lines (Barcrest) (MPU4) (set 26) + + + m4cashln__z + Cash Lines (Barcrest) (MPU4) (set 27) + + + m4cashmn + Cash Machine (Barcrest) (MPU4) (set 1) + + + m4cashmn__0 + Cash Machine (Barcrest) (MPU4) (set 28) + + + m4cashmn__1 + Cash Machine (Barcrest) (MPU4) (set 29) + + + m4cashmn__2 + Cash Machine (Barcrest) (MPU4) (set 30) + + + m4cashmn__3 + Cash Machine (Barcrest) (MPU4) (set 31) + + + m4cashmn__4 + Cash Machine (Barcrest) (MPU4) (set 32) + + + m4cashmn__5 + Cash Machine (Barcrest) (MPU4) (set 33) + + + m4cashmn__6 + Cash Machine (Barcrest) (MPU4) (set 34) + + + m4cashmn__7 + Cash Machine (Barcrest) (MPU4) (set 35) + + + m4cashmn__8 + Cash Machine (Barcrest) (MPU4) (set 36) + + + m4cashmn__9 + Cash Machine (Barcrest) (MPU4) (set 37) + + + m4cashmn__a + Cash Machine (Barcrest) (MPU4) (set 2) + + + m4cashmn__aa + Cash Machine (Barcrest) (MPU4) (set 38) + + + m4cashmn__ab + Cash Machine (Barcrest) (MPU4) (set 39) + + + m4cashmn__ac + Cash Machine (Barcrest) (MPU4) (set 40) + + + m4cashmn__ad + Cash Machine (Barcrest) (MPU4) (set 41) + + + m4cashmn__ae + Cash Machine (Barcrest) (MPU4) (set 42) + + + m4cashmn__af + Cash Machine (Barcrest) (MPU4) (set 43) + + + m4cashmn__ag + Cash Machine (Barcrest) (MPU4) (set 44) + + + m4cashmn__ah + Cash Machine (Barcrest) (MPU4) (set 45) + + + m4cashmn__ai + Cash Machine (Barcrest) (MPU4) (set 46) + + + m4cashmn__aj + Cash Machine (Barcrest) (MPU4) (set 47) + + + m4cashmn__ak + Cash Machine (Barcrest) (MPU4) (set 48) + + + m4cashmn__al + Cash Machine (Barcrest) (MPU4) (set 49) + + + m4cashmn__b + Cash Machine (Barcrest) (MPU4) (set 3) + + + m4cashmn__c + Cash Machine (Barcrest) (MPU4) (set 4) + + + m4cashmn__d + Cash Machine (Barcrest) (MPU4) (set 5) + + + m4cashmn__e + Cash Machine (Barcrest) (MPU4) (set 6) + + + m4cashmn__f + Cash Machine (Barcrest) (MPU4) (set 7) + + + m4cashmn__g + Cash Machine (Barcrest) (MPU4) (set 8) + + + m4cashmn__h + Cash Machine (Barcrest) (MPU4) (set 9) + + + m4cashmn__i + Cash Machine (Barcrest) (MPU4) (set 10) + + + m4cashmn__j + Cash Machine (Barcrest) (MPU4) (set 11) + + + m4cashmn__k + Cash Machine (Barcrest) (MPU4) (set 12) + + + m4cashmn__l + Cash Machine (Barcrest) (MPU4) (set 13) + + + m4cashmn__m + Cash Machine (Barcrest) (MPU4) (set 14) + + + m4cashmn__n + Cash Machine (Barcrest) (MPU4) (set 15) + + + m4cashmn__o + Cash Machine (Barcrest) (MPU4) (set 16) + + + m4cashmn__p + Cash Machine (Barcrest) (MPU4) (set 17) + + + m4cashmn__q + Cash Machine (Barcrest) (MPU4) (set 18) + + + m4cashmn__r + Cash Machine (Barcrest) (MPU4) (set 19) + + + m4cashmn__s + Cash Machine (Barcrest) (MPU4) (set 20) + + + m4cashmn__t + Cash Machine (Barcrest) (MPU4) (set 21) + + + m4cashmn__u + Cash Machine (Barcrest) (MPU4) (set 22) + + + m4cashmn__v + Cash Machine (Barcrest) (MPU4) (set 23) + + + m4cashmn__w + Cash Machine (Barcrest) (MPU4) (set 24) + + + m4cashmn__x + Cash Machine (Barcrest) (MPU4) (set 25) + + + m4cashmn__y + Cash Machine (Barcrest) (MPU4) (set 26) + + + m4cashmn__z + Cash Machine (Barcrest) (MPU4) (set 27) + + + m4cashmn__za + Cash Machine (Barcrest) (MPU4) (CMH 0.6Y, hack?) + + + m4cashmn__zb + Cash Machine (Barcrest) (MPU4) (CMA 0.7C, hack?) + + + m4cashmx + Cash Matrix (Barcrest) (MPU4) (CM 1.7, set 1) + + + m4cashmxa + Cash Matrix (Barcrest) (MPU4) (CM 1.7, set 2) + + + m4cashzn + Cash Zone (Barcrest) (MPU4) (CAZ 1.2) + + + m4cashzna + Cash Zone (Barcrest) (MPU4) (CAZ 1.5) + + + m4casmul + Casino Multiplay (Barcrest) (MPU4) + + + m4casot + Old Timer (Barcrest) (Dutch, alt 'Black and White' sound roms) (DOT1.1) + + + m4cbing + Cherry Bingo (Redpoint Systems) (MPU4) + + + m4ccc + Criss Cross Crazy (Coinworld) (MPU4?) + + + m4cclimb + Crazy Climber (Crystal) (MPU4) (set 1) + + + m4cclimba + Crazy Climber (Crystal) (MPU4) (set 2) + + + m4ccop + Cash Cops (MPU4?) (set 1) + + + m4ccopa + Cash Cops (MPU4?) (set 2) + + + m4ccopb + Cash Cops (MPU4?) (set 3) + + + m4celclb + Celebration Club (Barcrest) (MPU4) + + + m4centpt + Centrepoint (Barcrest) (v1.3) (MPU4) + + + m4centpta + Centrepoint (Barcrest) (v1.5) (MPU4) + + + m4ceptr + Ceptor (Barcrest) (Dutch) (MPU4) (DCE 1.0) + + + m4cfinln + Cup Final (Nova) (MPU4) (set 1) + + + m4cfinln__a + Cup Final (Nova) (MPU4) (set 2) + + + m4ch30 + unknown MPU4 'CH3 0.1' (Barcrest) (MPU4) + + + m4chacec + Chase The Ace [Cards] (Empire) (MPU4, set 1) + + + m4chaceca + Chase The Ace [Cards] (Empire) (MPU4, set 2) + + + m4chacef + Chase The Ace [Fruits] (Empire) (MPU4, set 1) + + + m4chacefa + Chase The Ace [Fruits] (Empire) (MPU4, set 2) + + + m4chacefb + Chase The Ace [Fruits] (Empire) (MPU4, set 3) + + + m4chacefc + Chase The Ace [Fruits] (Empire) (MPU4, set 4) + + + m4chasei + Chase Invaders (Barcrest) (MPU4) (set 1) + + + m4chaseia + Chase Invaders (Barcrest) (MPU4) (set 2) + + + m4chaseib + Chase Invaders (Barcrest) (MPU4) (set 3) + + + m4chaseic + Chase Invaders (Barcrest) (MPU4) (set 4) + + + m4chaseid + Chase Invaders (Barcrest) (MPU4) (set 5) + + + m4chaseie + Chase Invaders (Barcrest) (MPU4) (set 6) + + + m4chaseif + Chase Invaders (Barcrest) (MPU4) (set 7) + + + m4cheryo + Cherryo (Barcrest) (DCH, Dutch) (MPU4) + + + m4clab + Cash Lab (Qps) (MPU4) (set 1) + + + m4clab__a + Cash Lab (Qps) (MPU4) (set 2) + + + m4clab__b + Cash Lab (Qps) (MPU4) (set 3) + + + m4clab__c + Cash Lab (Qps) (MPU4) (set 4) + + + m4clab__d + Cash Lab (Qps) (MPU4) (set 5) + + + m4clab__e + Cash Lab (Qps) (MPU4) (set 6) + + + m4clab__f + Cash Lab (Qps) (MPU4) (set 7) + + + m4clab__g + Cash Lab (Qps) (MPU4) (set 8) + + + m4clab__h + Cash Lab (Qps) (MPU4) (set 9) + + + m4clab__i + Cash Lab (Qps) (MPU4) (set 10) + + + m4clab__j + Cash Lab (Qps) (MPU4) (set 11) + + + m4class + First Class (Barcrest) [DFC, Dutch] (MPU4) (set 1) + + + m4classa + First Class (Barcrest) [DFC, Dutch] (MPU4) (set 2) + + + m4clbclm + Club Climber (Barcrest) (MPU4, C1C 3.3) + + + m4clbclma + Club Climber (Barcrest) (MPU4, CC 4.5) + + + m4clbcls + Club Classic (Barcrest) (MPU4) + + + m4clbcnt + Club Connect (Barcrest) (MPU4) (set 1) + + + m4clbcnta + Club Connect (Barcrest) (MPU4) (set 2) + + + m4clbcntb + Club Connect (Barcrest) (MPU4) (set 3) + + + m4clbcntc + Club Connect (Barcrest) (MPU4) (set 4) + + + m4clbcntd + Club Connect (Barcrest) (MPU4) (set 5) + + + m4clbdbl + Club Double (Barcrest) (MPU4) (CD 1.6) + + + m4clbrpl + Club Replay (PCP) (MPU4) (01) + + + m4clbshf + Club Shuffle (Barcrest) (MPU4) + + + m4clbveg + Club Vegas (Barcrest) (MPU4) (set 1) + + + m4clbvega + Club Vegas (Barcrest) (MPU4) (set 2) + + + m4clbvegb + Club Vegas (Barcrest) (MPU4) (set 3) + + + m4clbvegc + Club Vegas (Barcrest) (MPU4) (set 4) + + + m4clbx + Club X (Barcrest) (MPU4) (set 1) + + + m4clbxa + Club X (Barcrest) (MPU4) (set 2) + + + m4clbxb + Club X (Barcrest) (MPU4) (set 3) + + + m4cld02 + unknown MPU4 'CLD 0.2C' (MPU4?) + + + m4click + Clickity Click (Barcrest) (MPU4 w/ Plasma DMD) + + + m4clr + MPU4 Meter Clear ROM + + + m4cmont + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 1) + + + m4cmont_1 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 2) + + + m4cmont_10 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 11) + + + m4cmont_11 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 12) + + + m4cmont_12 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 13) + + + m4cmont_13 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 14) + + + m4cmont_2 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 3) + + + m4cmont_3 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 4) + + + m4cmont_4 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 5) + + + m4cmont_5 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 6) + + + m4cmont_6 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 7) + + + m4cmont_7 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 8) + + + m4cmont_8 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 9) + + + m4cmont_9 + Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 10) + + + m4cmont_gt1 + Casino Monte Carlo (Avantime?) (MPU4) (GTR, set 1) + + + m4cmont_gt2 + Casino Monte Carlo (Avantime?) (MPU4) (GTR, set 2) + + + m4cmont_gt3 + Casino Monte Carlo (Avantime?) (MPU4) (GTR, set 3) + + + m4cmont_l1 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 1) + + + m4cmont_l10 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 10) + + + m4cmont_l11 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 11) + + + m4cmont_l12 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 12) + + + m4cmont_l13 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 13) + + + m4cmont_l14 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 14) + + + m4cmont_l15 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 15) + + + m4cmont_l16 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 16) + + + m4cmont_l2 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 2) + + + m4cmont_l3 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 3) + + + m4cmont_l4 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 4) + + + m4cmont_l5 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 5) + + + m4cmont_l6 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 6) + + + m4cmont_l7 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 7) + + + m4cmont_l8 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 8) + + + m4cmont_l9 + Casino Monte Carlo (Avantime?) (MPU4) (Latvia, set 9) + + + m4cmont_r1 + Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 1) + + + m4cmont_r2 + Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 2) + + + m4cmont_r3 + Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 3) + + + m4cmont_r4 + Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 4) + + + m4cmont_r5 + Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 5) + + + m4cmont_r6 + Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 6) + + + m4cmont_r7 + Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 7) + + + m4cmont_r8 + Casino Monte Carlo (Avantime?) (MPU4) (Russia, set 8) + + + m4cmont_u1 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 1) + + + m4cmont_u10 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 10) + + + m4cmont_u11 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 11) + + + m4cmont_u12 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 12) + + + m4cmont_u13 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 13) + + + m4cmont_u14 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 14) + + + m4cmont_u15 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 15) + + + m4cmont_u16 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 16) + + + m4cmont_u17 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 17) + + + m4cmont_u18 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 18) + + + m4cmont_u19 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 19) + + + m4cmont_u2 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 2) + + + m4cmont_u20 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 20) + + + m4cmont_u21 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 21) + + + m4cmont_u22 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 22) + + + m4cmont_u23 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 23) + + + m4cmont_u24 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 24) + + + m4cmont_u25 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 25) + + + m4cmont_u26 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 26) + + + m4cmont_u27 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 27) + + + m4cmont_u3 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 3) + + + m4cmont_u4 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 4) + + + m4cmont_u5 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 5) + + + m4cmont_u6 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 6) + + + m4cmont_u7 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 7) + + + m4cmont_u8 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 8) + + + m4cmont_u9 + Casino Monte Carlo (Avantime?) (MPU4) (Ukraine, set 9) + + + m4cojok + Carry On Joker (Barcrest) (MPU4) (set 1) + + + m4cojok__a + Carry On Joker (Barcrest) (MPU4) (set 2) + + + m4cojok__b + Carry On Joker (Barcrest) (MPU4) (set 3) + + + m4cojok__c + Carry On Joker (Barcrest) (MPU4) (set 4) + + + m4cojok__d + Carry On Joker (Barcrest) (MPU4) (set 5) + + + m4cojok__e + Carry On Joker (Barcrest) (MPU4) (set 6) + + + m4cojok__f + Carry On Joker (Barcrest) (MPU4) (set 7) + + + m4coloss + Colossus (Mdm) (MPU4, set 1) + + + m4colossa + Colossus (Mdm) (MPU4, set 2) + + + m4colossb + Colossus (Mdm) (MPU4, set 3) + + + m4colossc + Colossus (Mdm) (MPU4, set 4) + + + m4colossd + Colossus (Mdm) (MPU4, set 5) + + + m4colosse + Colossus (Mdm) (MPU4, set 6) + + + m4colossf + Colossus (Mdm) (MPU4, set 7) + + + m4colossg + Colossus (Mdm) (MPU4, set 8) + + + m4coney + Coney Island (Qps) (MPU4) + + + m4conn4 + Connect 4 + + + m4copcsh + Coppa Cash (Barcrest) (MPU4) (FC 2.0) + + + m4coscas + Cosmic Casino (Barcrest) (MPU4) (set 1) + + + m4coscas__a + Cosmic Casino (Barcrest) (MPU4) (set 2) + + + m4coscas__b + Cosmic Casino (Barcrest) (MPU4) (set 3) + + + m4coscas__c + Cosmic Casino (Barcrest) (MPU4) (set 4) + + + m4coscas__d + Cosmic Casino (Barcrest) (MPU4) (set 5) + + + m4coscas__e + Cosmic Casino (Barcrest) (MPU4) (set 6) + + + m4coscas__f + Cosmic Casino (Barcrest) (MPU4) (set 7) + + + m4coscas__g + Cosmic Casino (Barcrest) (MPU4) (set 8) + + + m4coscas__h + Cosmic Casino (Barcrest) (MPU4) (set 9) + + + m4coscas__i + Cosmic Casino (Barcrest) (MPU4) (set 10) + + + m4coscas__j + Cosmic Casino (Barcrest) (MPU4) (set 11) + + + m4coscas__k + Cosmic Casino (Barcrest) (MPU4) (set 12) + + + m4coscas__l + Cosmic Casino (Barcrest) (MPU4) (set 13) + + + m4coscas__m + Cosmic Casino (Barcrest) (MPU4) (set 14) + + + m4coscas__n + Cosmic Casino (Barcrest) (MPU4) (set 15) + + + m4coscas__o + Cosmic Casino (Barcrest) (MPU4) (set 16) + + + m4coscas__p + Cosmic Casino (Barcrest) (MPU4) (set 17) + + + m4coscas__q + Cosmic Casino (Barcrest) (MPU4) (set 18) + + + m4coscas__r + Cosmic Casino (Barcrest) (MPU4) (set 19) + + + m4coscas__s + Cosmic Casino (Barcrest) (MPU4) (set 20) + + + m4coscas__t + Cosmic Casino (Barcrest) (MPU4) (set 21) + + + m4coscas__u + Cosmic Casino (Barcrest) (MPU4) (set 22) + + + m4coscas__v + Cosmic Casino (Barcrest) (MPU4) (set 23) + + + m4cpfinl + Cup Final (Bwb) (MPU4) (set 1) + + + m4cpfinl__a + Cup Final (Bwb) (MPU4) (set 2) + + + m4cpfinl__b + Cup Final (Bwb) (MPU4) (set 3) + + + m4cpfinl__c + Cup Final (Bwb) (MPU4) (set 4) + + + m4cpfinl__d + Cup Final (Bwb) (MPU4) (set 5) + + + m4cpfinl__e + Cup Final (Bwb) (MPU4) (set 6) + + + m4cpfinl__f + Cup Final (Bwb) (MPU4) (set 7) + + + m4cpfinl__g + Cup Final (Bwb) (MPU4) (set 8) + + + m4cpfinl__h + Cup Final (Bwb) (MPU4) (set 9) + + + m4cpfinl__i + Cup Final (Bwb) (MPU4) (set 10) + + + m4cpfinl__j + Cup Final (Bwb) (MPU4) (set 11) + + + m4cpfinl__k + Cup Final (Bwb) (MPU4) (set 12) + + + m4cpycat + Copy Cat (Barcrest) (MPU4) (set 1) + + + m4cpycat__0 + Copy Cat (Barcrest) (MPU4) (set 28) + + + m4cpycat__1 + Copy Cat (Barcrest) (MPU4) (set 29) + + + m4cpycat__2 + Copy Cat (Barcrest) (MPU4) (set 30) + + + m4cpycat__3 + Copy Cat (Barcrest) (MPU4) (set 31) + + + m4cpycat__4 + Copy Cat (Barcrest) (MPU4) (set 32) + + + m4cpycat__5 + Copy Cat (Barcrest) (MPU4) (set 33) + + + m4cpycat__6 + Copy Cat (Barcrest) (MPU4) (set 34) + + + m4cpycat__7 + Copy Cat (Barcrest) (MPU4) (set 35) + + + m4cpycat__8 + Copy Cat (Barcrest) (MPU4) (set 36) + + + m4cpycat__a + Copy Cat (Barcrest) (MPU4) (set 2) + + + m4cpycat__b + Copy Cat (Barcrest) (MPU4) (set 3) + + + m4cpycat__c + Copy Cat (Barcrest) (MPU4) (set 4) + + + m4cpycat__d + Copy Cat (Barcrest) (MPU4) (set 5) + + + m4cpycat__e + Copy Cat (Barcrest) (MPU4) (set 6) + + + m4cpycat__f + Copy Cat (Barcrest) (MPU4) (set 7) + + + m4cpycat__g + Copy Cat (Barcrest) (MPU4) (set 8) + + + m4cpycat__h + Copy Cat (Barcrest) (MPU4) (set 9) + + + m4cpycat__i + Copy Cat (Barcrest) (MPU4) (set 10) + + + m4cpycat__j + Copy Cat (Barcrest) (MPU4) (set 11) + + + m4cpycat__k + Copy Cat (Barcrest) (MPU4) (set 12) + + + m4cpycat__l + Copy Cat (Barcrest) (MPU4) (set 13) + + + m4cpycat__m + Copy Cat (Barcrest) (MPU4) (set 14) + + + m4cpycat__n + Copy Cat (Barcrest) (MPU4) (set 15) + + + m4cpycat__o + Copy Cat (Barcrest) (MPU4) (set 16) + + + m4cpycat__p + Copy Cat (Barcrest) (MPU4) (set 17) + + + m4cpycat__q + Copy Cat (Barcrest) (MPU4) (set 18) + + + m4cpycat__r + Copy Cat (Barcrest) (MPU4) (set 19) + + + m4cpycat__s + Copy Cat (Barcrest) (MPU4) (set 20) + + + m4cpycat__t + Copy Cat (Barcrest) (MPU4) (set 21) + + + m4cpycat__u + Copy Cat (Barcrest) (MPU4) (set 22) + + + m4cpycat__v + Copy Cat (Barcrest) (MPU4) (set 23) + + + m4cpycat__w + Copy Cat (Barcrest) (MPU4) (set 24) + + + m4cpycat__x + Copy Cat (Barcrest) (MPU4) (set 25) + + + m4cpycat__y + Copy Cat (Barcrest) (MPU4) (set 26) + + + m4cpycat__z + Copy Cat (Barcrest) (MPU4) (set 27) + + + m4crdome + Crystal Dome (Barcrest) (MPU4) (set 1) + + + m4crdome__a + Crystal Dome (Barcrest) (MPU4) (set 2) + + + m4crdome__b + Crystal Dome (Barcrest) (MPU4) (set 3) + + + m4crdome__c + Crystal Dome (Barcrest) (MPU4) (set 4) + + + m4crdome__d + Crystal Dome (Barcrest) (MPU4) (set 5) + + + m4crdome__e + Crystal Dome (Barcrest) (MPU4) (set 6) + + + m4crdome__f + Crystal Dome (Barcrest) (MPU4) (set 7) + + + m4crdome__g + Crystal Dome (Barcrest) (MPU4) (set 8) + + + m4crdome__h + Crystal Dome (Barcrest) (MPU4) (set 9) + + + m4crdome__i + Crystal Dome (Barcrest) (MPU4) (set 10) + + + m4crdome__j + Crystal Dome (Barcrest) (MPU4) (set 11) + + + m4crdome__k + Crystal Dome (Barcrest) (MPU4) (set 12) + + + m4crdome__l + Crystal Dome (Barcrest) (MPU4) (set 13) + + + m4crdome__m + Crystal Dome (Barcrest) (MPU4) (set 14) + + + m4crdome__n + Crystal Dome (Barcrest) (MPU4) (set 15) + + + m4crfire + Crossfire (Empire) (MPU4, set 1) + + + m4crfirea + Crossfire (Empire) (MPU4, set 2) + + + m4crjwl + Crown Jewels Club (Barcrest) (MPU4) (set 1) + + + m4crjwl2 + Crown Jewels Mk II Club (Barcrest) (MPU4) (set 1) + + + m4crjwl2a + Crown Jewels Mk II Club (Barcrest) (MPU4) (set 2) + + + m4crjwl2b + Crown Jewels Mk II Club (Barcrest) (MPU4) (set 3) + + + m4crjwla + Crown Jewels Club (Barcrest) (MPU4) (set 2) + + + m4crjwlb + Crown Jewels Club (Barcrest) (MPU4) (set 3) + + + m4crjwlc + Crown Jewels Club (Barcrest) (MPU4) (set 4) + + + m4crkpot + Crackpot 100 Club (Barcrest) (MPU4) (set 1, C1P 1.2) + + + m4crkpota + Crackpot 100 Club (Barcrest) (MPU4) (set 2, CP 3.8) + + + m4crkpotb + Crackpot 100 Club (Barcrest) (MPU4) (set 3, CP 3.1) + + + m4crmaze + Crystal Maze (Barcrest) (MPU4) (CRM 3.0) + + + m4crmaze__c + Crystal Maze (Barcrest) (MPU4) (CRM 2.3) + + + m4crmaze__d + Crystal Maze (Barcrest) (MPU4) (CRM 3.0AD) + + + m4crmaze__e + Crystal Maze (Barcrest) (MPU4) (CRM 3.0B) + + + m4crmaze__f + Crystal Maze (Barcrest) (MPU4) (CRM 3.0BD) + + + m4crmaze__g + Crystal Maze (Barcrest) (MPU4) (CRM 3.0C) + + + m4crmaze__h + Crystal Maze (Barcrest) (MPU4) (CRM 3.0D) + + + m4crmaze__i + Crystal Maze (Barcrest) (MPU4) (CRM 3.0KD) + + + m4crmaze__j + Crystal Maze (Barcrest) (MPU4) (CRM 3.0YD) + + + m4crmaze__k + Crystal Maze (Barcrest) (MPU4) (CRM 3.0K) + + + m4crmaze__l + Crystal Maze (Barcrest) (MPU4) (CRM 3.0Y) + + + m4crmaze__m + Crystal Maze (Barcrest) (MPU4) (CRM 3.0, hack?) + + + m4crmaze__n + Crystal Maze (Bwb / Barcrest) (MPU4) (CRC 0.7, hack?) + + + m4crmaze__o + Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 1.0, hack?) + + + m4crmaze__p + Crystal Maze (Bwb / Barcrest) (MPU4) (CRC 1.3, hack?) + + + m4crmaze__q + Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 2.0, hack?, set 1) + + + m4crmaze__r + Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 2.0, hack?, set 2) + + + m4crmaze__s + Crystal Maze (Bwb / Barcrest) (MPU4) (CR8 1.2, hack?) + + + m4crzbn + Crazy Bingo (Union) (MPU4) + + + m4crzcap + Crazy Capers (Empire) (MPU4, set 1) + + + m4crzcapa + Crazy Capers (Empire) (MPU4, set 2) + + + m4crzcapb + Crazy Capers (Empire) (MPU4, set 3) + + + m4crzcapc + Crazy Capers (Empire) (MPU4, set 4) + + + m4crzcav + Crazy Cavern (Nova) (MPU4) + + + m4crzcl + Crazy Climber Club (Crystal) (MPU4) (set 1) + + + m4crzcla + Crazy Climber Club (Crystal) (MPU4) (set 2) + + + m4crzclb + Crazy Climber Club (Crystal) (MPU4) (set 3) + + + m4crzclc + Crazy Climber Club (Crystal) (MPU4) (set 4) + + + m4crzcld + Crazy Climber Club (Crystal) (MPU4) (set 5) + + + m4crzcsn + Crazy Casino (Nova) (MPU4) + + + m4crzjk + Crazy Jokers (Nova?) (MPU4) + + + m4crzjwl + Crown Jewels (Barcrest) (German) (MPU4) (set 1) + + + m4crzjwla + Crown Jewels (Barcrest) (German) (MPU4) (set 2) + + + m4crzjwlb + Crown Jewels (Barcrest) (German) (MPU4) (set 3) + + + m4crzjwlc + Crown Jewels (Barcrest) (German) (MPU4) (set 4) + + + m4crzjwld + Crown Jewels (Barcrest) (German) (MPU4) (set 5) + + + m4crzjwle + Crown Jewels (Barcrest) (German) (MPU4) (set 6) + + + m4crzjwlf + Crown Jewels (Barcrest) (German) (MPU4) (set 7) + + + m4crzjwlg + Crown Jewels (Barcrest) (German) (MPU4) (set 8) + + + m4crzjwlh + Crown Jewels (Barcrest) (German) (MPU4) (set 9) + + + m4cshenc + Cash Encounters (Barcrest) (MPU4) (set 1) + + + m4cshenc__a + Cash Encounters (Barcrest) (MPU4) (set 2) + + + m4cshenc__b + Cash Encounters (Barcrest) (MPU4) (set 3) + + + m4cshenc__c + Cash Encounters (Barcrest) (MPU4) (set 4) + + + m4cshenc__d + Cash Encounters (Barcrest) (MPU4) (set 5) + + + m4cshino + Cashino Deluxe (Pcp) (MPU4) + + + m4csoc + Championship Soccer (Bwb) (MPU4) (set 1) + + + m4csoc__a + Championship Soccer (Bwb) (MPU4) (set 2) + + + m4csoc__b + Championship Soccer (Bwb) (MPU4) (set 3) + + + m4csoc__c + Championship Soccer (Bwb) (MPU4) (set 4) + + + m4csoc__d + Championship Soccer (Bwb) (MPU4) (set 5) + + + m4csoc__e + Championship Soccer (Bwb) (MPU4) (set 6) + + + m4csoc__f + Championship Soccer (Bwb) (MPU4) (set 7) + + + m4csoc__g + Championship Soccer (Bwb) (MPU4) (set 8) + + + m4csoc__h + Championship Soccer (Bwb) (MPU4) (set 9) + + + m4csoc__i + Championship Soccer (Bwb) (MPU4) (set 10) + + + m4csoc__j + Championship Soccer (Bwb) (MPU4) (set 11) + + + m4cstrik + Cash Strike (Empire) (MPU4, set 1) + + + m4cstrika + Cash Strike (Empire) (MPU4, set 2) + + + m4cstrikb + Cash Strike (Empire) (MPU4, set 3) + + + m4cstrikc + Cash Strike (Empire) (MPU4, set 4) + + + m4ctn + Tuppenny Nudger Classic (Mdm?) (MPU4) + + + m4cwalk + Cake Walk (Union) (MPU4) + + + m4czne + Cash Zone (Bwb) (MPU4) + + + m4danced + Dancing Diamonds (Bwb) (MPU4) (set 1) + + + m4danced__a + Dancing Diamonds (Bwb) (MPU4) (set 2) + + + m4danced__b + Dancing Diamonds (Bwb) (MPU4) (set 3) + + + m4danced__c + Dancing Diamonds (Bwb) (MPU4) (set 4) + + + m4danced__d + Dancing Diamonds (Bwb) (MPU4) (set 5) + + + m4danced__e + Dancing Diamonds (Bwb) (MPU4) (set 6) + + + m4danced__f + Dancing Diamonds (Bwb) (MPU4) (set 7) + + + m4danced__g + Dancing Diamonds (Bwb) (MPU4) (set 8) + + + m4danced__h + Dancing Diamonds (Bwb) (MPU4) (set 9) + + + m4danced__i + Dancing Diamonds (Bwb) (MPU4) (set 10) + + + m4danced__j + Dancing Diamonds (Bwb) (MPU4) (set 11) + + + m4danced__k + Dancing Diamonds (Bwb) (MPU4) (set 12) + + + m4danced__l + Dancing Diamonds (Bwb) (MPU4) (set 13) + + + m4danced__m + Dancing Diamonds (Bwb) (MPU4) (set 14) + + + m4danced__n + Dancing Diamonds (Bwb) (MPU4) (set 15) + + + m4danced__o + Dancing Diamonds (Bwb) (MPU4) (set 16) + + + m4danced__p + Dancing Diamonds (Bwb) (MPU4) (set 17) + + + m4danced__q + Dancing Diamonds (Bwb) (MPU4) (set 18) + + + m4danced__r + Dancing Diamonds (Bwb) (MPU4) (set 19) + + + m4danced__s + Dancing Diamonds (Bwb) (MPU4) (set 20) + + + m4danced__t + Dancing Diamonds (Bwb) (MPU4) (set 21) + + + m4danced__u + Dancing Diamonds (Bwb) (MPU4) (set 22) + + + m4danced__v + Dancing Diamonds (Bwb) (MPU4) (set 23) + + + m4danced__w + Dancing Diamonds (Bwb) (MPU4) (set 24) + + + m4daytn + Daytona (Bwb) (MPU4) (set 1) + + + m4daytn__a + Daytona (Bwb) (MPU4) (set 2) + + + m4daytn__b + Daytona (Bwb) (MPU4) (set 3) + + + m4daytn__c + Daytona (Bwb) (MPU4) (set 4) + + + m4daytn__d + Daytona (Bwb) (MPU4) (set 5) + + + m4daytn__e + Daytona (Bwb) (MPU4) (set 6) + + + m4daytn__f + Daytona (Bwb) (MPU4) (set 7) + + + m4daytn__g + Daytona (Bwb) (MPU4) (set 8) + + + m4daytn__h + Daytona (Bwb) (MPU4) (set 9) + + + m4daytn__i + Daytona (Bwb) (MPU4) (set 10) + + + m4daytn__j + Daytona (Bwb) (MPU4) (set 11) + + + m4daytn__k + Daytona (Bwb) (MPU4) (set 12) + + + m4daytn__l + Daytona (Bwb) (MPU4) (set 13) + + + m4daytn__m + Daytona (Bwb) (MPU4) (set 14) + + + m4daytn__n + Daytona (Bwb) (MPU4) (set 15) + + + m4dbl9 + Double 9's (Barcrest) (MPU4) (set 1) + + + m4dbl9a + Double 9's (Barcrest) (MPU4) (set 2) + + + m4dblchn + Double Chance (DJE) (MPU4) + + + m4dbldm + Double Diamond Club (Barcrest) (MPU4) (set 1) + + + m4dbldm__a + Double Diamond Club (Barcrest) (MPU4) (set 2) + + + m4dbldm__b + Double Diamond Club (Barcrest) (MPU4) (set 3) + + + m4dbldm__c + Double Diamond Club (Barcrest) (MPU4) (set 4) + + + m4dblup + Double Up (Barcrest) (MPU4) (DU 1.5) + + + m4dcrls + Double Crazy Reels (Qps) (MPU4) (set 1) + + + m4dcrls__a + Double Crazy Reels (Qps) (MPU4) (set 2) + + + m4dcrls__b + Double Crazy Reels (Qps) (MPU4) (set 3) + + + m4dcrls__c + Double Crazy Reels (Qps) (MPU4) (set 4) + + + m4dcrls__d + Double Crazy Reels (Qps) (MPU4) (set 5) + + + m4dcrls__e + Double Crazy Reels (Qps) (MPU4) (set 6) + + + m4dcrls__f + Double Crazy Reels (Qps) (MPU4) (set 7) + + + m4dcrls__g + Double Crazy Reels (Qps) (MPU4) (set 8) + + + m4dcrls__h + Double Crazy Reels (Qps) (MPU4) (set 9) + + + m4dcrls__i + Double Crazy Reels (Qps) (MPU4) (set 10) + + + m4dcrls__j + Double Crazy Reels (Qps) (MPU4) (set 11) + + + m4dcrls__k + Double Crazy Reels (Qps) (MPU4) (set 12) + + + m4dcrls__l + Double Crazy Reels (Qps) (MPU4) (set 13) + + + m4dcrls__m + Double Crazy Reels (Qps) (MPU4) (set 14) + + + m4dcrls__n + Double Crazy Reels (Qps) (MPU4) (set 15) + + + m4dcrls__o + Double Crazy Reels (Qps) (MPU4) (set 16) + + + m4dcrls__p + Double Crazy Reels (Qps) (MPU4) (set 17) + + + m4dcrls__q + Double Crazy Reels (Qps) (MPU4) (set 18) + + + m4dcrls__r + Double Crazy Reels (Qps) (MPU4) (set 19) + + + m4ddb + Ding Dong Bells (Coinworld) (MPU4) (set 1) + + + m4ddba + Ding Dong Bells (Coinworld) (MPU4) (set 2) + + + m4denmen + Dennis The Menace (Barcrest) (MPU4) (DEN 1.2) + + + m4denmen_h1 + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1, hack?) + + + m4denmen_h2 + Dennis The Menace (Barcrest) (MPU4) (V1 0.1, hack, set 1) + + + m4denmen_h3 + Dennis The Menace (Barcrest) (MPU4) (V1 0.1, hack, set 2) + + + m4denmend5 + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1)) + + + m4denmend5ad + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1AD) + + + m4denmend5b + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1B) + + + m4denmend5bd + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1BD) + + + m4denmend5d + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1D) + + + m4denmend5k + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1K) + + + m4denmend5kd + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1KD) + + + m4denmend5y + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1Y) + + + m4denmend5yd + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1YD) + + + m4denmend8 + Dennis The Menace (Barcrest) (MPU4) (DM8 0.1) + + + m4denmend8c + Dennis The Menace (Barcrest) (MPU4) (DM8 0.1C) + + + m4denmend8d + Dennis The Menace (Barcrest) (MPU4) (DM8 0.1D) + + + m4denmend8k + Dennis The Menace (Barcrest) (MPU4) (DM8 0.1K) + + + m4denmend8y + Dennis The Menace (Barcrest) (MPU4) (DM8 0.1Y) + + + m4denmend8yd + Dennis The Menace (Barcrest) (MPU4) (DM8 0.1YD) + + + m4denmendnb + Dennis The Menace (Barcrest) (MPU4) (DEN 1.2B) + + + m4denmendnc + Dennis The Menace (Barcrest) (MPU4) (DEN 1.2C) + + + m4denmendnd + Dennis The Menace (Barcrest) (MPU4) (DEN 1.2D) + + + m4denmendnk + Dennis The Menace (Barcrest) (MPU4) (DEN 1.2K) + + + m4denmendny + Dennis The Menace (Barcrest) (MPU4) (DEN 1.2Y) + + + m4denmendt + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1) + + + m4denmendtad + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1AD) + + + m4denmendtb + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1B) + + + m4denmendtbd + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1BD) + + + m4denmendtd + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1D) + + + m4denmendtk + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1K) + + + m4denmendtkd + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1KD) + + + m4denmendty + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1Y) + + + m4denmendtyd + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1YD) + + + m4dnj + Double Nudge (unknown) (MPU4) (set 1) + + + m4dnja + Double Nudge (unknown) (MPU4) (set 2) + + + m4dnjb + Double Nudge (unknown) (MPU4) (set 3) + + + m4drac + Dracula (Barcrest - Nova) (German) (MPU4) (set 1) + + + m4draca + Dracula (Barcrest - Nova) (German) (MPU4) (set 2) + + + m4dracb + Dracula (Barcrest - Nova) (German) (MPU4) (set 3) + + + m4dragon + Dragon (Nova) (MPU4) + + + m4dtyfre + Duty Free (Barcrest) (MPU4) (DUT 0.4) + + + m4dtyfre_h1 + Duty Free (Bwb / Barcrest) (MPU4) (DF4 4.1, hack?) + + + m4dtyfre_h2 + Duty Free (Barcrest) (MPU4) (DFT 0.1, hack?) + + + m4dtyfrebwb + Duty Free (Bwb / Barcrest) (MPU4) (DF10 4.3, set 1) + + + m4dtyfrebwb_a + Duty Free (Bwb / Barcrest) (MPU4) (DF10 4.3, set 2) + + + m4dtyfrebwb_b + Duty Free (Bwb / Barcrest) (MPU4) (DF8 4.2) + + + m4dtyfrebwb_c + Duty Free (Bwb / Barcrest) (MPU4) (DF8 2.2, set 1) + + + m4dtyfrebwb_d + Duty Free (Bwb / Barcrest) (MPU4) (DF8 2.2, set 2) + + + m4dtyfrebwb_e + Duty Free (Bwb / Barcrest) (MPU4) (DF4 4.1) + + + m4dtyfrebwb_f + Duty Free (Bwb / Barcrest) (MPU4) (DF4 2.1) + + + m4dtyfrebwb_g + Duty Free (Bwb / Barcrest) (MPU4) (DF4 1.1) + + + m4dtyfrebwb_h + Duty Free (Bwb / Barcrest) (MPU4) (DFC 2.3) + + + m4dtyfref5 + Duty Free (Barcrest) (MPU4) (DF5 0.3) + + + m4dtyfref5ad + Duty Free (Barcrest) (MPU4) (DF5 0.3AD) + + + m4dtyfref5b + Duty Free (Barcrest) (MPU4) (DF5 0.3B) + + + m4dtyfref5bd + Duty Free (Barcrest) (MPU4) (DF5 0.3BD) + + + m4dtyfref5d + Duty Free (Barcrest) (MPU4) (DF5 0.3D) + + + m4dtyfref5k + Duty Free (Barcrest) (MPU4) (DF5 0.3K) + + + m4dtyfref5kd + Duty Free (Barcrest) (MPU4) (DF5 0.3KD) + + + m4dtyfref5r + Duty Free (Barcrest) (MPU4) (DF5 0.3R) + + + m4dtyfref5rd + Duty Free (Barcrest) (MPU4) (DF5 0.3RD) + + + m4dtyfref5y + Duty Free (Barcrest) (MPU4) (DF5 0.3Y) + + + m4dtyfref5yd + Duty Free (Barcrest) (MPU4) (DF5 0.3YD) + + + m4dtyfref8 + Duty Free (Barcrest) (MPU4) (DF8 0.1) + + + m4dtyfref8c + Duty Free (Barcrest) (MPU4) (DF8 0.1C) + + + m4dtyfref8d + Duty Free (Barcrest) (MPU4) (DF8 0.1D) + + + m4dtyfref8k + Duty Free (Barcrest) (MPU4) (DF8 0.1K) + + + m4dtyfref8y + Duty Free (Barcrest) (MPU4) (DF8 0.1Y) + + + m4dtyfref8yd + Duty Free (Barcrest) (MPU4) (DF8 0.1YD) + + + m4dtyfreft + Duty Free (Barcrest) (MPU4) (DFT 0.1) + + + m4dtyfreftad + Duty Free (Barcrest) (MPU4) (DFT 0.1AD) + + + m4dtyfreftb + Duty Free (Barcrest) (MPU4) (DFT 0.1B) + + + m4dtyfreftbd + Duty Free (Barcrest) (MPU4) (DFT 0.1BD) + + + m4dtyfreftd + Duty Free (Barcrest) (MPU4) (DFT 0.1D) + + + m4dtyfreftk + Duty Free (Barcrest) (MPU4) (DFT 0.1K) + + + m4dtyfreftkd + Duty Free (Barcrest) (MPU4) (DFT 0.1KD) + + + m4dtyfrefty + Duty Free (Barcrest) (MPU4) (DFT 0.1Y) + + + m4dtyfreftyd + Duty Free (Barcrest) (MPU4) (DFT 0.1YD) + + + m4dtyfreutb + Duty Free (Barcrest) (MPU4) (DUT 0.4B) + + + m4dtyfreutc + Duty Free (Barcrest) (MPU4) (DUT 0.4C) + + + m4dtyfrexd + Duty Free (Barcrest) (MPU4) (XD5 0.2) + + + m4dtyfrexd_a + Duty Free (Barcrest) (MPU4) (XD5 0.1) + + + m4dtyfrexdad + Duty Free (Barcrest) (MPU4) (XD5 0.2AD) + + + m4dtyfrexdb + Duty Free (Barcrest) (MPU4) (XD5 0.2B) + + + m4dtyfrexdbd + Duty Free (Barcrest) (MPU4) (XD5 0.2BD) + + + m4dtyfrexdc + Duty Free (Barcrest) (MPU4) (XD5 0.2C) + + + m4dtyfrexdd + Duty Free (Barcrest) (MPU4) (XD5 0.2D) + + + m4dtyfrexdk + Duty Free (Barcrest) (MPU4) (XD5 0.2K) + + + m4dtyfrexdkd + Duty Free (Barcrest) (MPU4) (XD5 0.2KD) + + + m4dtyfrexdr + Duty Free (Barcrest) (MPU4) (XD5 0.2R) + + + m4dtyfrexdrd + Duty Free (Barcrest) (MPU4) (XD5 0.2RD) + + + m4dtyfrexdy + Duty Free (Barcrest) (MPU4) (XD5 0.2Y) + + + m4dtyfrexdyd + Duty Free (Barcrest) (MPU4) (XD5 0.2YD) + + + m4dtyfrexf + Duty Free (Barcrest) (MPU4) (XFT 0.1) + + + m4dtyfrexfad + Duty Free (Barcrest) (MPU4) (XFT 0.1AD) + + + m4dtyfrexfb + Duty Free (Barcrest) (MPU4) (XFT 0.1B) + + + m4dtyfrexfbd + Duty Free (Barcrest) (MPU4) (XFT 0.1BD) + + + m4dtyfrexfc + Duty Free (Barcrest) (MPU4) (XFT 0.1C) + + + m4dtyfrexfd + Duty Free (Barcrest) (MPU4) (XFT 0.1D) + + + m4dtyfrexfk + Duty Free (Barcrest) (MPU4) (XFT 0.1K) + + + m4dtyfrexfkd + Duty Free (Barcrest) (MPU4) (XFT 0.1KD) + + + m4dtyfrexfr + Duty Free (Barcrest) (MPU4) (XFT 0.1R) + + + m4dtyfrexfrd + Duty Free (Barcrest) (MPU4) (XFT 0.1RD) + + + m4dtyfrexfy + Duty Free (Barcrest) (MPU4) (XFT 0.1Y) + + + m4dtyfrexfyd + Duty Free (Barcrest) (MPU4) (XFT 0.1YD) + + + m4dz + Danger Zone (Crystal) (MPU4) + + + m4eaw + Everyone's A Winner (Barcrest) (MPU4) (set 1) + + + m4eaw__0 + Everyone's A Winner (Barcrest) (MPU4) (set 28) + + + m4eaw__1 + Everyone's A Winner (Barcrest) (MPU4) (set 29) + + + m4eaw__2 + Everyone's A Winner (Barcrest) (MPU4) (set 30) + + + m4eaw__3 + Everyone's A Winner (Barcrest) (MPU4) (set 31) + + + m4eaw__4 + Everyone's A Winner (Barcrest) (MPU4) (set 32) + + + m4eaw__5 + Everyone's A Winner (Barcrest) (MPU4) (set 33) + + + m4eaw__6 + Everyone's A Winner (Barcrest) (MPU4) (set 34) + + + m4eaw__7 + Everyone's A Winner (Barcrest) (MPU4) (set 35) + + + m4eaw__8 + Everyone's A Winner (Barcrest) (MPU4) (set 36) + + + m4eaw__9 + Everyone's A Winner (Barcrest) (MPU4) (set 37) + + + m4eaw__a + Everyone's A Winner (Barcrest) (MPU4) (set 2) + + + m4eaw__a0 + Everyone's A Winner (Barcrest) (MPU4) (set 64) + + + m4eaw__a1 + Everyone's A Winner (Barcrest) (MPU4) (set 65) + + + m4eaw__a2 + Everyone's A Winner (Barcrest) (MPU4) (set 66) + + + m4eaw__a3 + Everyone's A Winner (Barcrest) (MPU4) (set 67) + + + m4eaw__a4 + Everyone's A Winner (Barcrest) (MPU4) (set 68) + + + m4eaw__a5 + Everyone's A Winner (Barcrest) (MPU4) (set 69) + + + m4eaw__a6 + Everyone's A Winner (Barcrest) (MPU4) (set 70) + + + m4eaw__a7 + Everyone's A Winner (Barcrest) (MPU4) (set 71) + + + m4eaw__a8 + Everyone's A Winner (Barcrest) (MPU4) (set 72) + + + m4eaw__a9 + Everyone's A Winner (Barcrest) (MPU4) (set 73) + + + m4eaw__aa + Everyone's A Winner (Barcrest) (MPU4) (set 38) + + + m4eaw__ab + Everyone's A Winner (Barcrest) (MPU4) (set 39) + + + m4eaw__ac + Everyone's A Winner (Barcrest) (MPU4) (set 40) + + + m4eaw__ad + Everyone's A Winner (Barcrest) (MPU4) (set 41) + + + m4eaw__ae + Everyone's A Winner (Barcrest) (MPU4) (set 42) + + + m4eaw__af + Everyone's A Winner (Barcrest) (MPU4) (set 43) + + + m4eaw__ag + Everyone's A Winner (Barcrest) (MPU4) (set 44) + + + m4eaw__ah + Everyone's A Winner (Barcrest) (MPU4) (set 45) + + + m4eaw__ai + Everyone's A Winner (Barcrest) (MPU4) (set 46) + + + m4eaw__aj + Everyone's A Winner (Barcrest) (MPU4) (set 47) + + + m4eaw__ak + Everyone's A Winner (Barcrest) (MPU4) (set 48) + + + m4eaw__al + Everyone's A Winner (Barcrest) (MPU4) (set 49) + + + m4eaw__am + Everyone's A Winner (Barcrest) (MPU4) (set 50) + + + m4eaw__an + Everyone's A Winner (Barcrest) (MPU4) (set 51) + + + m4eaw__ao + Everyone's A Winner (Barcrest) (MPU4) (set 52) + + + m4eaw__ap + Everyone's A Winner (Barcrest) (MPU4) (set 53) + + + m4eaw__aq + Everyone's A Winner (Barcrest) (MPU4) (set 54) + + + m4eaw__ar + Everyone's A Winner (Barcrest) (MPU4) (set 55) + + + m4eaw__as + Everyone's A Winner (Barcrest) (MPU4) (set 56) + + + m4eaw__at + Everyone's A Winner (Barcrest) (MPU4) (set 57) + + + m4eaw__au + Everyone's A Winner (Barcrest) (MPU4) (set 58) + + + m4eaw__av + Everyone's A Winner (Barcrest) (MPU4) (set 59) + + + m4eaw__aw + Everyone's A Winner (Barcrest) (MPU4) (set 60) + + + m4eaw__ax + Everyone's A Winner (Barcrest) (MPU4) (set 61) + + + m4eaw__ay + Everyone's A Winner (Barcrest) (MPU4) (set 62) + + + m4eaw__az + Everyone's A Winner (Barcrest) (MPU4) (set 63) + + + m4eaw__b + Everyone's A Winner (Barcrest) (MPU4) (set 3) + + + m4eaw__ba + Everyone's A Winner (Barcrest) (MPU4) (set 74) + + + m4eaw__bb + Everyone's A Winner (Barcrest) (MPU4) (set 75) + + + m4eaw__bc + Everyone's A Winner (Barcrest) (MPU4) (set 76) + + + m4eaw__bd + Everyone's A Winner (Barcrest) (MPU4) (set 77) + + + m4eaw__be + Everyone's A Winner (Barcrest) (MPU4) (set 78) + + + m4eaw__bf + Everyone's A Winner (Barcrest) (MPU4) (set 79) + + + m4eaw__bg + Everyone's A Winner (Barcrest) (MPU4) (set 80) + + + m4eaw__bh + Everyone's A Winner (Barcrest) (MPU4) (set 81) + + + m4eaw__bi + Everyone's A Winner (Barcrest) (MPU4) (set 82) + + + m4eaw__bj + Everyone's A Winner (Barcrest) (MPU4) (set 83) + + + m4eaw__bk + Everyone's A Winner (Barcrest) (MPU4) (set 84) + + + m4eaw__bl + Everyone's A Winner (Barcrest) (MPU4) (set 85) + + + m4eaw__bm + Everyone's A Winner (Barcrest) (MPU4) (set 86) + + + m4eaw__bn + Everyone's A Winner (Barcrest) (MPU4) (set 87) + + + m4eaw__bo + Everyone's A Winner (Barcrest) (MPU4) (set 88) + + + m4eaw__bp + Everyone's A Winner (Barcrest) (MPU4) (set 89) + + + m4eaw__bq + Everyone's A Winner (Barcrest) (MPU4) (set 90) + + + m4eaw__br + Everyone's A Winner (Barcrest) (MPU4) (set 91) + + + m4eaw__bs + Everyone's A Winner (Barcrest) (MPU4) (set 92) + + + m4eaw__bt + Everyone's A Winner (Barcrest) (MPU4) (set 93) + + + m4eaw__bu + Everyone's A Winner (Barcrest) (MPU4) (set 94) + + + m4eaw__bv + Everyone's A Winner (Barcrest) (MPU4) (set 95) + + + m4eaw__bw + Everyone's A Winner (Barcrest) (MPU4) (set 96) + + + m4eaw__bx + Everyone's A Winner (Barcrest) (MPU4) (set 97) + + + m4eaw__bz + Everyone's A Winner (Barcrest) (MPU4) (set 99) + + + m4eaw__c + Everyone's A Winner (Barcrest) (MPU4) (set 4) + + + m4eaw__d + Everyone's A Winner (Barcrest) (MPU4) (set 5) + + + m4eaw__e + Everyone's A Winner (Barcrest) (MPU4) (set 6) + + + m4eaw__f + Everyone's A Winner (Barcrest) (MPU4) (set 7) + + + m4eaw__g + Everyone's A Winner (Barcrest) (MPU4) (set 8) + + + m4eaw__h + Everyone's A Winner (Barcrest) (MPU4) (set 9) + + + m4eaw__i + Everyone's A Winner (Barcrest) (MPU4) (set 10) + + + m4eaw__j + Everyone's A Winner (Barcrest) (MPU4) (set 11) + + + m4eaw__k + Everyone's A Winner (Barcrest) (MPU4) (set 12) + + + m4eaw__l + Everyone's A Winner (Barcrest) (MPU4) (set 13) + + + m4eaw__m + Everyone's A Winner (Barcrest) (MPU4) (set 14) + + + m4eaw__n + Everyone's A Winner (Barcrest) (MPU4) (set 15) + + + m4eaw__o + Everyone's A Winner (Barcrest) (MPU4) (set 16) + + + m4eaw__p + Everyone's A Winner (Barcrest) (MPU4) (set 17) + + + m4eaw__q + Everyone's A Winner (Barcrest) (MPU4) (set 18) + + + m4eaw__r + Everyone's A Winner (Barcrest) (MPU4) (set 19) + + + m4eaw__s + Everyone's A Winner (Barcrest) (MPU4) (set 20) + + + m4eaw__t + Everyone's A Winner (Barcrest) (MPU4) (set 21) + + + m4eaw__u + Everyone's A Winner (Barcrest) (MPU4) (set 22) + + + m4eaw__v + Everyone's A Winner (Barcrest) (MPU4) (set 23) + + + m4eaw__w + Everyone's A Winner (Barcrest) (MPU4) (set 24) + + + m4eaw__x + Everyone's A Winner (Barcrest) (MPU4) (set 25) + + + m4eaw__y + Everyone's A Winner (Barcrest) (MPU4) (set 26) + + + m4eaw__z + Everyone's A Winner (Barcrest) (MPU4) (set 27) + + + m4eezee + Eezee Fruits (Union) (MPU4) + + + m4eighth + Eighth Wonder (Barcrest) (MPU4) (WON 2.2) + + + m4eightha + Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 1) + + + m4eighthb + Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 2) + + + m4eighthc + Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 3) + + + m4eighthd + Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 4, bad?) + + + m4eighthe + Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 5) + + + m4eighthf + Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 6) + + + m4eighthg + Eighth Wonder (Barcrest) (MPU4) (BEW 0.3, set 7) + + + m4elitc + Elite Club (Crystal) (MPU4) (set 1) + + + m4elitca + Elite Club (Crystal) (MPU4) (set 2) + + + m4elite + Elite (Barcrest) (MPU4 w/ Plasma DMD?) + + + m4eureka + Eureka (Empire) (MPU4, set 1) + + + m4eurekaa + Eureka (Empire) (MPU4, set 2) + + + m4eurekab + Eureka (Empire) (MPU4, set 3) + + + m4ewshft + Each Way Shifter (Mdm) (MPU4) + + + m4excal + Excalibur (Bwb) (MPU4) (set 1) + + + m4excal__a + Excalibur (Bwb) (MPU4) (set 2) + + + m4excal__b + Excalibur (Bwb) (MPU4) (set 3) + + + m4excal__c + Excalibur (Bwb) (MPU4) (set 4) + + + m4excal__d + Excalibur (Bwb) (MPU4) (set 5) + + + m4excal__e + Excalibur (Bwb) (MPU4) (set 6) + + + m4excal__f + Excalibur (Bwb) (MPU4) (set 7) + + + m4excal__g + Excalibur (Bwb) (MPU4) (set 8) + + + m4excal__h + Excalibur (Bwb) (MPU4) (set 9) + + + m4excal__i + Excalibur (Bwb) (MPU4) (set 10) + + + m4excal__j + Excalibur (Bwb) (MPU4) (set 11) + + + m4excaln + Excalibur (Nova) (MPU4) (set 1) + + + m4excaln__a + Excalibur (Nova) (MPU4) (set 2) + + + m4excam + Excalibur (Mdm) (MPU4) + + + m4exgam + Extra Game (Fairplay - Barcrest) (MPU4) + + + m4exlin + Extra Lines (Pcp) (MPU4) (set 1) + + + m4exlina + Extra Lines (Pcp) (MPU4) (set 2) + + + m4exotic + Exotic Fruits (Bwb) (MPU4) (set 1) + + + m4exotic__a + Exotic Fruits (Bwb) (MPU4) (set 2) + + + m4exotic__b + Exotic Fruits (Bwb) (MPU4) (set 3) + + + m4exotic__c + Exotic Fruits (Bwb) (MPU4) (set 4) + + + m4exotic__d + Exotic Fruits (Bwb) (MPU4) (set 5) + + + m4exotic__e + Exotic Fruits (Bwb) (MPU4) (set 6) + + + m4exprs + Express (Barcrest) (DXP, Dutch) (MPU4) + + + m4fairg + Fairground (Crystal) (MPU4) + + + m4fastfw + Fast Forward (Barcrest) (MPU4) (set 1) + + + m4fastfw__a + Fast Forward (Barcrest) (MPU4) (set 2) + + + m4fastfw__b + Fast Forward (Barcrest) (MPU4) (set 3) + + + m4fastfw__c + Fast Forward (Barcrest) (MPU4) (set 4) + + + m4fastfw__d + Fast Forward (Barcrest) (MPU4) (set 5) + + + m4fastfw__e + Fast Forward (Barcrest) (MPU4) (set 6) + + + m4fastfw__f + Fast Forward (Barcrest) (MPU4) (set 7) + + + m4firebl + Fireball (Mdm) (MPU4, set 1) + + + m4firebla + Fireball (Mdm) (MPU4, set 2) + + + m4fireblb + Fireball (Mdm) (MPU4, set 3) + + + m4fireblc + Fireball (Mdm) (MPU4, set 4) + + + m4firebld + Fireball (Mdm) (MPU4, set 5) + + + m4firice + Fire & Ice (Bwb) (MPU4) (set 1) + + + m4firice__a + Fire & Ice (Bwb) (MPU4) (set 2) + + + m4firice__b + Fire & Ice (Bwb) (MPU4) (set 3) + + + m4firice__c + Fire & Ice (Bwb) (MPU4) (set 4) + + + m4firice__d + Fire & Ice (Bwb) (MPU4) (set 5) + + + m4firice__e + Fire & Ice (Bwb) (MPU4) (set 6) + + + m4firice__f + Fire & Ice (Bwb) (MPU4) (set 7) + + + m4firice__g + Fire & Ice (Bwb) (MPU4) (set 8) + + + m4firice__h + Fire & Ice (Bwb) (MPU4) (set 9) + + + m4firice__i + Fire & Ice (Bwb) (MPU4) (set 10) + + + m4firice__j + Fire & Ice (Bwb) (MPU4) (set 11) + + + m4flash + Flash Cash (Barcrest) (MPU4, FC 1.0) + + + m4flshlt + Flashlite (Bwb) (MPU4) (set 1) + + + m4flshlta + Flashlite (Bwb) (MPU4) (set 2) + + + m4flshltb + Flashlite (Bwb) (MPU4) (set 3) + + + m4flshltc + Flashlite (Bwb) (MPU4) (set 4) + + + m4flshltd + Flashlite (Bwb) (MPU4) (set 5) + + + m4flshlte + Flashlite (Bwb) (MPU4) (set 6) + + + m4flshltf + Flashlite (Bwb) (MPU4) (set 7) + + + m4flshltg + Flashlite (Bwb) (MPU4) (set 8) + + + m4fortcb + Fortune Club (Barcrest) (MPU4) (set 1) + + + m4fortcba + Fortune Club (Barcrest) (MPU4) (set 2) + + + m4fortcbb + Fortune Club (Barcrest) (MPU4) (set 3) + + + m4fourmr + Four More (Bwb) (MPU4) + + + m4frcrak + Fruit Cracker (Pcp) (MPU4) + + + m4frdrop + Fruit Drop (Union) (MPU4) + + + m4fright + Fright Night (Empire) (MPU4, v4.1X) + + + m4frighta + Fright Night (Empire) (MPU4, v4.1) + + + m4frightb + Fright Night (Empire) (MPU4, v4.1i) + + + m4frightc + Fright Night (Empire) (MPU4, v?.?, set 1) + + + m4frightd + Fright Night (Empire) (MPU4, v3.3) + + + m4frighte + Fright Night (Empire) (MPU4, v3.0) + + + m4frightf + Fright Night (Empire) (MPU4, v?.?, set 2) + + + m4frkstn + Frank 'n' Stein (Crystal) (MPU4, set 1) + + + m4frkstna + Frank 'n' Stein (Crystal) (MPU4, set 2) + + + m4frkstnb + Frank 'n' Stein (Crystal) (MPU4, set 3) + + + m4frkstnc + Frank 'n' Stein (Crystal) (MPU4, set 4) + + + m4frkstnd + Frank 'n' Stein (Crystal) (MPU4, set 5) + + + m4frkstne + Frank 'n' Stein (Crystal) (MPU4, set 6) + + + m4frkstnf + Frank 'n' Stein (Crystal) (MPU4, set 7) + + + m4frkstng + Frank 'n' Stein (Crystal) (MPU4, set 8) + + + m4frkstnh + Frank 'n' Stein (Crystal) (MPU4, set 9) + + + m4frmani + Fruit Mania (Crystal) (MPU4) (set 1) + + + m4frmania + Fruit Mania (Crystal) (MPU4) (set 2) + + + m4frmanib + Fruit Mania (Crystal) (MPU4) (set 3) + + + m4frmanic + Fruit Mania (Crystal) (MPU4) (set 4) + + + m4frmtx + Fruit Matrix (Avantime?) (MPU4) (set 1) + + + m4frmtx__a + Fruit Matrix (Avantime?) (MPU4) (set 2) + + + m4frmtx__b + Fruit Matrix (Avantime?) (MPU4) (set 3) + + + m4frmtx__c + Fruit Matrix (Avantime?) (MPU4) (set 4) + + + m4frmtx__d + Fruit Matrix (Avantime?) (MPU4) (set 5) + + + m4frmtx__e + Fruit Matrix (Avantime?) (MPU4) (set 6) + + + m4frmtx__f + Fruit Matrix (Avantime?) (MPU4) (set 7) + + + m4frnudg + Fruit & Nudge (Avantime?) (MPU4) (set 1) + + + m4frnudg__a + Fruit & Nudge (Avantime?) (MPU4) (set 2) + + + m4frnudg__b + Fruit & Nudge (Avantime?) (MPU4) (set 3) + + + m4frnudg__c + Fruit & Nudge (Avantime?) (MPU4) (set 4) + + + m4front + Final Frontier (Mdm) (MPU4) + + + m4frtfl + Fruit Full (Barcrest) (MPU4) (set 1) + + + m4frtfla + Fruit Full (Barcrest) (MPU4) (set 2) + + + m4frtflc + Fruit Full Club (Barcrest) (MPU4) + + + m4frtgm + Fruit Game (Barcrest) (MPU4) + + + m4frtlnk + Fruit Link Club (Barcrest) (MPU4) (set 1) + + + m4frtlnka + Fruit Link Club (Barcrest) (MPU4) (set 2) + + + m4frtprs + Fruit Preserve (Barcrest) (MPU4) (F4P 1.1, set 1) + + + m4frtprsa + Fruit Preserve (Barcrest) (MPU4) (F4P 1.1, set 2) + + + m4fsx + Fun Spot X (MPU4?) (set 1) + + + m4fsxa + Fun Spot X (MPU4?) (set 2) + + + m4fsxb + Fun Spot X (MPU4?) (set 3) + + + m4ftladn + Find the Lady (Nova) (MPU4) + + + m4funh + Fun House (unknown) (MPU4) + + + m4gambal + Gamball (Barcrest) (MPU4) (set 1) + + + m4gambal__a + Gamball (Barcrest) (MPU4) (set 2) + + + m4gambal__b + Gamball (Barcrest) (MPU4) (set 3) + + + m4gambal__c + Gamball (Barcrest) (MPU4) (set 4) + + + m4gamblr + The Gambler (Empire) (MPU4, set 1) + + + m4gamblra + The Gambler (Empire) (MPU4, set 2) + + + m4gamblrb + The Gambler (Empire) (MPU4, set 3) + + + m4gb006 + Games Bond 006 (Barcrest) (MPU4) (set 1) + + + m4gb006__a + Games Bond 006 (Barcrest) (MPU4) (set 2) + + + m4gb006__b + Games Bond 006 (Barcrest) (MPU4) (set 3) + + + m4gb006__c + Games Bond 006 (Barcrest) (MPU4) (set 4) + + + m4gbust + Ghost Buster (Barcrest) (MPU4) (set 1) + + + m4gbust__a + Ghost Buster (Barcrest) (MPU4) (set 2) + + + m4gbust__b + Ghost Buster (Barcrest) (MPU4) (set 3) + + + m4gbust__c + Ghost Buster (Barcrest) (MPU4) (set 4) + + + m4gbust__d + Ghost Buster (Barcrest) (MPU4) (set 5) + + + m4gbust__e + Ghost Buster (Barcrest) (MPU4) (set 6) + + + m4gbust__f + Ghost Buster (Barcrest) (MPU4) (set 7) + + + m4gbust__g + Ghost Buster (Barcrest) (MPU4) (set 8) + + + m4gbust__h + Ghost Buster (Barcrest) (MPU4) (set 9) + + + m4gbust__i + Ghost Buster (Barcrest) (MPU4) (set 10) + + + m4gbust__j + Ghost Buster (Barcrest) (MPU4) (set 11) + + + m4gbust__k + Ghost Buster (Barcrest) (MPU4) (set 12) + + + m4gbust__l + Ghost Buster (Barcrest) (MPU4) (set 13) + + + m4gbust__m + Ghost Buster (Barcrest) (MPU4) (set 14) + + + m4gbust__n + Ghost Buster (Barcrest) (MPU4) (set 15) + + + m4gbust__o + Ghost Buster (Barcrest) (MPU4) (set 16) + + + m4gbust__p + Ghost Buster (Barcrest) (MPU4) (set 17) + + + m4gbust__q + Ghost Buster (Barcrest) (MPU4) (set 18) + + + m4gbust__r + Ghost Buster (Barcrest) (MPU4) (set 19) + + + m4gbust__s + Ghost Buster (Barcrest) (MPU4) (set 20) + + + m4gbust__t + Ghost Buster (Barcrest) (MPU4) (set 21) + + + m4gbust__u + Ghost Buster (Barcrest) (MPU4) (set 22) + + + m4gbust__v + Ghost Buster (Barcrest) (MPU4) (set 23) + + + m4gbust__w + Ghost Buster (Barcrest) (MPU4) (set 24) + + + m4gclue + Give Us A Clue (Barcrest) (MPU4) (set 1) + + + m4gclue__a + Give Us A Clue (Barcrest) (MPU4) (set 2) + + + m4gclue__b + Give Us A Clue (Barcrest) (MPU4) (set 3) + + + m4gclue__c + Give Us A Clue (Barcrest) (MPU4) (set 4) + + + m4gclue__d + Give Us A Clue (Barcrest) (MPU4) (set 5) + + + m4gclue__e + Give Us A Clue (Barcrest) (MPU4) (set 6) + + + m4gclue__f + Give Us A Clue (Barcrest) (MPU4) (set 7) + + + m4gclue__g + Give Us A Clue (Barcrest) (MPU4) (set 8) + + + m4gclue__h + Give Us A Clue (Barcrest) (MPU4) (set 9) + + + m4gclue__i + Give Us A Clue (Barcrest) (MPU4) (set 10) + + + m4gclue__j + Give Us A Clue (Barcrest) (MPU4) (set 11) + + + m4gclue__k + Give Us A Clue (Barcrest) (MPU4) (set 12) + + + m4gclue__l + Give Us A Clue (Barcrest) (MPU4) (set 13) + + + m4gclue__m + Give Us A Clue (Barcrest) (MPU4) (set 14) + + + m4gclue__n + Give Us A Clue (Barcrest) (MPU4) (set 15) + + + m4gclue__o + Give Us A Clue (Barcrest) (MPU4) (set 16) + + + m4gclue__p + Give Us A Clue (Barcrest) (MPU4) (set 17) + + + m4gclue__q + Give Us A Clue (Barcrest) (MPU4) (set 18) + + + m4gclue__r + Give Us A Clue (Barcrest) (MPU4) (set 19) + + + m4gclue__s + Give Us A Clue (Barcrest) (MPU4) (set 20) + + + m4gclue__t + Give Us A Clue (Barcrest) (MPU4) (set 21) + + + m4gclue__u + Give Us A Clue (Barcrest) (MPU4) (set 22) + + + m4gclue__v + Give Us A Clue (Barcrest) (MPU4) (set 23) + + + m4gclue__w + Give Us A Clue (Barcrest) (MPU4) (set 24) + + + m4giant + Giant (Barcrest) (DGI, Dutch) (MPU4) + + + m4gldgat + Golden Gate (Barcrest) [DGG, Dutch] (MPU4) + + + m4gldjok + Golden Joker (Barcrest) (Dutch) (MPU4) (DGJ 1.2) + + + m4gldstr + Gold Strike (Barcrest) (MPU4) (G4S 2.0) + + + m4gnsmk + Gun Smoke (Barcrest) (Dutch) (MPU4) + + + m4gobana + Go Bananas (Union) (MPU4, set 1) + + + m4gobanaa + Go Bananas (Union) (MPU4, set 2) + + + m4gobanab + Go Bananas (Union) (MPU4, set 3) + + + m4gobanac + Go Bananas (Union) (MPU4, set 4) + + + m4gobanad + Go Bananas (Union) (MPU4, set 5) + + + m4goldfc + Gold Fever (Crystal) (MPU4) (set 1) + + + m4goldfca + Gold Fever (Crystal) (MPU4) (set 2) + + + m4goldfcb + Gold Fever (Crystal) (MPU4) (set 3) + + + m4goldfv + Gold Fever (Empire) (MPU4) + + + m4goldnn + Golden Years (Nova) (MPU4) + + + m4goldxc + Gold Exchange Club (Crystal) (MPU4) (set 1) + + + m4goldxca + Gold Exchange Club (Crystal) (MPU4) (set 2) + + + m4goldxcb + Gold Exchange Club (Crystal) (MPU4) (set 3) + + + m4goldxcc + Gold Exchange Club (Crystal) (MPU4) (set 4) + + + m4goldxcd + Gold Exchange Club (Crystal) (MPU4) (set 5) + + + m4goldxce + Gold Exchange Club (Crystal) (MPU4) (set 6) + + + m4goodtm + Let The Good Times Roll (Barcrest) (MPU4) (set 1) + + + m4goodtm__0 + Let The Good Times Roll (Barcrest) (MPU4) (set 28) + + + m4goodtm__1 + Let The Good Times Roll (Barcrest) (MPU4) (set 29) + + + m4goodtm__2 + Let The Good Times Roll (Barcrest) (MPU4) (set 30) + + + m4goodtm__3 + Let The Good Times Roll (Barcrest) (MPU4) (set 31) + + + m4goodtm__4 + Let The Good Times Roll (Barcrest) (MPU4) (set 32) + + + m4goodtm__5 + Let The Good Times Roll (Barcrest) (MPU4) (set 33) + + + m4goodtm__6 + Let The Good Times Roll (Barcrest) (MPU4) (set 34) + + + m4goodtm__7 + Let The Good Times Roll (Barcrest) (MPU4) (set 35) + + + m4goodtm__8 + Let The Good Times Roll (Barcrest) (MPU4) (set 36) + + + m4goodtm__9 + Let The Good Times Roll (Barcrest) (MPU4) (set 37) + + + m4goodtm__a + Let The Good Times Roll (Barcrest) (MPU4) (set 2) + + + m4goodtm__a0 + Let The Good Times Roll (Barcrest) (MPU4) (set 64) + + + m4goodtm__a1 + Let The Good Times Roll (Barcrest) (MPU4) (set 65) + + + m4goodtm__a2 + Let The Good Times Roll (Barcrest) (MPU4) (set 66) + + + m4goodtm__a3 + Let The Good Times Roll (Barcrest) (MPU4) (set 67) + + + m4goodtm__a4 + Let The Good Times Roll (Barcrest) (MPU4) (set 68) + + + m4goodtm__a5 + Let The Good Times Roll (Barcrest) (MPU4) (set 69) + + + m4goodtm__a6 + Let The Good Times Roll (Barcrest) (MPU4) (set 70) + + + m4goodtm__aa + Let The Good Times Roll (Barcrest) (MPU4) (set 38) + + + m4goodtm__ab + Let The Good Times Roll (Barcrest) (MPU4) (set 39) + + + m4goodtm__ac + Let The Good Times Roll (Barcrest) (MPU4) (set 40) + + + m4goodtm__ad + Let The Good Times Roll (Barcrest) (MPU4) (set 41) + + + m4goodtm__ae + Let The Good Times Roll (Barcrest) (MPU4) (set 42) + + + m4goodtm__af + Let The Good Times Roll (Barcrest) (MPU4) (set 43) + + + m4goodtm__ag + Let The Good Times Roll (Barcrest) (MPU4) (set 44) + + + m4goodtm__ah + Let The Good Times Roll (Barcrest) (MPU4) (set 45) + + + m4goodtm__ai + Let The Good Times Roll (Barcrest) (MPU4) (set 46) + + + m4goodtm__aj + Let The Good Times Roll (Barcrest) (MPU4) (set 47) + + + m4goodtm__ak + Let The Good Times Roll (Barcrest) (MPU4) (set 48) + + + m4goodtm__al + Let The Good Times Roll (Barcrest) (MPU4) (set 49) + + + m4goodtm__am + Let The Good Times Roll (Barcrest) (MPU4) (set 50) + + + m4goodtm__an + Let The Good Times Roll (Barcrest) (MPU4) (set 51) + + + m4goodtm__ao + Let The Good Times Roll (Barcrest) (MPU4) (set 52) + + + m4goodtm__ap + Let The Good Times Roll (Barcrest) (MPU4) (set 53) + + + m4goodtm__aq + Let The Good Times Roll (Barcrest) (MPU4) (set 54) + + + m4goodtm__ar + Let The Good Times Roll (Barcrest) (MPU4) (set 55) + + + m4goodtm__as + Let The Good Times Roll (Barcrest) (MPU4) (set 56) + + + m4goodtm__at + Let The Good Times Roll (Barcrest) (MPU4) (set 57) + + + m4goodtm__au + Let The Good Times Roll (Barcrest) (MPU4) (set 58) + + + m4goodtm__av + Let The Good Times Roll (Barcrest) (MPU4) (set 59) + + + m4goodtm__aw + Let The Good Times Roll (Barcrest) (MPU4) (set 60) + + + m4goodtm__ax + Let The Good Times Roll (Barcrest) (MPU4) (set 61) + + + m4goodtm__ay + Let The Good Times Roll (Barcrest) (MPU4) (set 62) + + + m4goodtm__az + Let The Good Times Roll (Barcrest) (MPU4) (set 63) + + + m4goodtm__b + Let The Good Times Roll (Barcrest) (MPU4) (set 3) + + + m4goodtm__c + Let The Good Times Roll (Barcrest) (MPU4) (set 4) + + + m4goodtm__d + Let The Good Times Roll (Barcrest) (MPU4) (set 5) + + + m4goodtm__e + Let The Good Times Roll (Barcrest) (MPU4) (set 6) + + + m4goodtm__f + Let The Good Times Roll (Barcrest) (MPU4) (set 7) + + + m4goodtm__g + Let The Good Times Roll (Barcrest) (MPU4) (set 8) + + + m4goodtm__h + Let The Good Times Roll (Barcrest) (MPU4) (set 9) + + + m4goodtm__i + Let The Good Times Roll (Barcrest) (MPU4) (set 10) + + + m4goodtm__j + Let The Good Times Roll (Barcrest) (MPU4) (set 11) + + + m4goodtm__k + Let The Good Times Roll (Barcrest) (MPU4) (set 12) + + + m4goodtm__l + Let The Good Times Roll (Barcrest) (MPU4) (set 13) + + + m4goodtm__m + Let The Good Times Roll (Barcrest) (MPU4) (set 14) + + + m4goodtm__n + Let The Good Times Roll (Barcrest) (MPU4) (set 15) + + + m4goodtm__o + Let The Good Times Roll (Barcrest) (MPU4) (set 16) + + + m4goodtm__p + Let The Good Times Roll (Barcrest) (MPU4) (set 17) + + + m4goodtm__q + Let The Good Times Roll (Barcrest) (MPU4) (set 18) + + + m4goodtm__r + Let The Good Times Roll (Barcrest) (MPU4) (set 19) + + + m4goodtm__s + Let The Good Times Roll (Barcrest) (MPU4) (set 20) + + + m4goodtm__t + Let The Good Times Roll (Barcrest) (MPU4) (set 21) + + + m4goodtm__u + Let The Good Times Roll (Barcrest) (MPU4) (set 22) + + + m4goodtm__v + Let The Good Times Roll (Barcrest) (MPU4) (set 23) + + + m4goodtm__w + Let The Good Times Roll (Barcrest) (MPU4) (set 24) + + + m4goodtm__x + Let The Good Times Roll (Barcrest) (MPU4) (set 25) + + + m4goodtm__y + Let The Good Times Roll (Barcrest) (MPU4) (set 26) + + + m4goodtm__z + Let The Good Times Roll (Barcrest) (MPU4) (set 27) + + + m4graff + Graffiti (Barcrest) (MPU4) (set 1) + + + m4graff__a + Graffiti (Barcrest) (MPU4) (set 2) + + + m4graff__b + Graffiti (Barcrest) (MPU4) (set 3) + + + m4graffd + Grafitti (Barcrest) [Dutch] (MPU4) + + + m4grands + Grandstand Club (Barcrest) (MPU4) (G2D 4.0) + + + m4grandsa + Grandstand Club (Barcrest) (MPU4) (GD 1.1) + + + m4grbbnk + Grab The Bank (Barcrest) (MPU4) (G4B 2.0) + + + m4grbbnka + Grab The Bank (Barcrest) (MPU4) (G4B 2.1) + + + m4grbbnkb + Grab The Bank (Barcrest) (MPU4) (G4B 1.0) + + + m4gtrain + Ghost Train (Empire) (MPU4, set 1) + + + m4gtraina + Ghost Train (Empire) (MPU4, set 2) + + + m4gtrainb + Ghost Train (Empire) (MPU4, set 3) + + + m4gtrainc + Ghost Train (Empire) (MPU4, set 4) + + + m4gvibes + Good Vibrations (Union - Empire) (MPU4, set 1) + + + m4gvibesa + Good Vibrations (Union - Empire) (MPU4, set 2) + + + m4hapfrt + Happy Fruits (Coinworld) (MPU4) (set 1) + + + m4hapfrta + Happy Fruits (Coinworld) (MPU4) (set 2) + + + m4hapfrtb + Happy Fruits (Coinworld) (MPU4) (set 3) + + + m4harle + Harlequin (Bwb) (MPU4) (set 1) + + + m4harle__a + Harlequin (Bwb) (MPU4) (set 2) + + + m4harle__b + Harlequin (Bwb) (MPU4) (set 3) + + + m4harle__c + Harlequin (Bwb) (MPU4) (set 4) + + + m4harle__d + Harlequin (Bwb) (MPU4) (set 5) + + + m4harle__e + Harlequin (Bwb) (MPU4) (set 6) + + + m4harle__f + Harlequin (Bwb) (MPU4) (set 7) + + + m4harle__g + Harlequin (Bwb) (MPU4) (set 8) + + + m4harle__h + Harlequin (Bwb) (MPU4) (set 9) + + + m4harle__i + Harlequin (Bwb) (MPU4) (set 10) + + + m4harle__j + Harlequin (Bwb) (MPU4) (set 11) + + + m4harle__k + Harlequin (Bwb) (MPU4) (set 12) + + + m4harle__l + Harlequin (Bwb) (MPU4) (set 13) + + + m4harle__m + Harlequin (Bwb) (MPU4) (set 14) + + + m4harle__n + Harlequin (Bwb) (MPU4) (set 15) + + + m4harle__o + Harlequin (Bwb) (MPU4) (set 16) + + + m4harle__p + Harlequin (Bwb) (MPU4) (set 17) + + + m4harle__q + Harlequin (Bwb) (MPU4) (set 18) + + + m4harle__r + Harlequin (Bwb) (MPU4) (set 19) + + + m4harle__s + Harlequin (Bwb) (MPU4) (set 20) + + + m4harle__t + Harlequin (Bwb) (MPU4) (set 21) + + + m4harle__u + Harlequin (Bwb) (MPU4) (set 22) + + + m4harle__v + Harlequin (Bwb) (MPU4) (set 23) + + + m4harle__w + Harlequin (Bwb) (MPU4) (set 24) + + + m4harle__x + Harlequin (Bwb) (MPU4) (set 25) + + + m4haunt + Haunted House (Empire) (MPU4, set 1) + + + m4haunta + Haunted House (Empire) (MPU4, set 2) + + + m4hauntb + Haunted House (Empire) (MPU4, set 3) + + + m4hauntc + Haunted House (Empire) (MPU4, set 4) + + + m4hauntd + Haunted House (Empire) (MPU4, set 5) + + + m4hijinx + Hi Jinx (Barcrest) (MPU4) (set 1) + + + m4hijinx__0 + Hi Jinx (Barcrest) (MPU4) (set 28) + + + m4hijinx__1 + Hi Jinx (Barcrest) (MPU4) (set 29) + + + m4hijinx__2 + Hi Jinx (Barcrest) (MPU4) (set 30) + + + m4hijinx__3 + Hi Jinx (Barcrest) (MPU4) (set 31) + + + m4hijinx__4 + Hi Jinx (Barcrest) (MPU4) (set 32) + + + m4hijinx__5 + Hi Jinx (Barcrest) (MPU4) (set 33) + + + m4hijinx__6 + Hi Jinx (Barcrest) (MPU4) (set 34) + + + m4hijinx__7 + Hi Jinx (Barcrest) (MPU4) (set 35) + + + m4hijinx__8 + Hi Jinx (Barcrest) (MPU4) (set 36) + + + m4hijinx__9 + Hi Jinx (Barcrest) (MPU4) (set 37) + + + m4hijinx__a + Hi Jinx (Barcrest) (MPU4) (set 2) + + + m4hijinx__aa + Hi Jinx (Barcrest) (MPU4) (set 38) + + + m4hijinx__ab + Hi Jinx (Barcrest) (MPU4) (set 39) + + + m4hijinx__b + Hi Jinx (Barcrest) (MPU4) (set 3) + + + m4hijinx__c + Hi Jinx (Barcrest) (MPU4) (set 4) + + + m4hijinx__d + Hi Jinx (Barcrest) (MPU4) (set 5) + + + m4hijinx__e + Hi Jinx (Barcrest) (MPU4) (set 6) + + + m4hijinx__f + Hi Jinx (Barcrest) (MPU4) (set 7) + + + m4hijinx__g + Hi Jinx (Barcrest) (MPU4) (set 8) + + + m4hijinx__h + Hi Jinx (Barcrest) (MPU4) (set 9) + + + m4hijinx__i + Hi Jinx (Barcrest) (MPU4) (set 10) + + + m4hijinx__j + Hi Jinx (Barcrest) (MPU4) (set 11) + + + m4hijinx__k + Hi Jinx (Barcrest) (MPU4) (set 12) + + + m4hijinx__l + Hi Jinx (Barcrest) (MPU4) (set 13) + + + m4hijinx__m + Hi Jinx (Barcrest) (MPU4) (set 14) + + + m4hijinx__n + Hi Jinx (Barcrest) (MPU4) (set 15) + + + m4hijinx__o + Hi Jinx (Barcrest) (MPU4) (set 16) + + + m4hijinx__p + Hi Jinx (Barcrest) (MPU4) (set 17) + + + m4hijinx__q + Hi Jinx (Barcrest) (MPU4) (set 18) + + + m4hijinx__r + Hi Jinx (Barcrest) (MPU4) (set 19) + + + m4hijinx__s + Hi Jinx (Barcrest) (MPU4) (set 20) + + + m4hijinx__t + Hi Jinx (Barcrest) (MPU4) (set 21) + + + m4hijinx__u + Hi Jinx (Barcrest) (MPU4) (set 22) + + + m4hijinx__v + Hi Jinx (Barcrest) (MPU4) (set 23) + + + m4hijinx__w + Hi Jinx (Barcrest) (MPU4) (set 24) + + + m4hijinx__x + Hi Jinx (Barcrest) (MPU4) (set 25) + + + m4hijinx__y + Hi Jinx (Barcrest) (MPU4) (set 26) + + + m4hijinx__z + Hi Jinx (Barcrest) (MPU4) (set 27) + + + m4hilonv + Hi Lo Casino (Nova) (MPU4) + + + m4hirise + High Rise (Barcrest) (MPU4) (set 1) + + + m4hirisea + High Rise (Barcrest) (MPU4) (set 2) + + + m4hiriseb + High Rise (Barcrest) (MPU4) (set 3) + + + m4hirisec + High Rise (Barcrest) (MPU4) (set 4) + + + m4hirised + High Rise (Barcrest) (MPU4) (set 5) + + + m4hirisee + High Rise (Barcrest) (MPU4) (set 6) + + + m4hirol + Hi Roller Club (Crystal) (MPU4) (set 1) + + + m4hirola + Hi Roller Club (Crystal) (MPU4) (set 2) + + + m4hiroll + High Roller (Barcrest) (MPU4) + + + m4hisprt + High Spirits (Empire) (MPU4, set 1) + + + m4hisprta + High Spirits (Empire) (MPU4, set 2) + + + m4hisprtb + High Spirits (Empire) (MPU4, set 3) + + + m4hisprtc + High Spirits (Empire) (MPU4, set 4) + + + m4hisprtd + High Spirits (Empire) (MPU4, set 5) + + + m4hisprte + High Spirits (Empire) (MPU4, set 6) + + + m4hittop + Hit The Top (Barcrest) (MPU4) (set 1) + + + m4hittop__0 + Hit The Top (Barcrest) (MPU4) (set 28) + + + m4hittop__1 + Hit The Top (Barcrest) (MPU4) (set 29) + + + m4hittop__2 + Hit The Top (Barcrest) (MPU4) (set 30) + + + m4hittop__3 + Hit The Top (Barcrest) (MPU4) (set 31) + + + m4hittop__4 + Hit The Top (Barcrest) (MPU4) (set 32) + + + m4hittop__5 + Hit The Top (Barcrest) (MPU4) (set 33) + + + m4hittop__6 + Hit The Top (Barcrest) (MPU4) (set 34) + + + m4hittop__7 + Hit The Top (Barcrest) (MPU4) (set 35) + + + m4hittop__8 + Hit The Top (Barcrest) (MPU4) (set 36) + + + m4hittop__9 + Hit The Top (Barcrest) (MPU4) (set 37) + + + m4hittop__a + Hit The Top (Barcrest) (MPU4) (set 2) + + + m4hittop__aa + Hit The Top (Barcrest) (MPU4) (set 38) + + + m4hittop__ab + Hit The Top (Barcrest) (MPU4) (set 39) + + + m4hittop__ac + Hit The Top (Barcrest) (MPU4) (set 40) + + + m4hittop__ad + Hit The Top (Barcrest) (MPU4) (set 41) + + + m4hittop__ae + Hit The Top (Barcrest) (MPU4) (set 42) + + + m4hittop__af + Hit The Top (Barcrest) (MPU4) (set 43) + + + m4hittop__ag + Hit The Top (Barcrest) (MPU4) (set 44) + + + m4hittop__ah + Hit The Top (Barcrest) (MPU4) (set 45) + + + m4hittop__ai + Hit The Top (Barcrest) (MPU4) (set 46) + + + m4hittop__aj + Hit The Top (Barcrest) (MPU4) (set 47) + + + m4hittop__ak + Hit The Top (Barcrest) (MPU4) (set 48) + + + m4hittop__al + Hit The Top (Barcrest) (MPU4) (set 49) + + + m4hittop__am + Hit The Top (Barcrest) (MPU4) (set 50) + + + m4hittop__an + Hit The Top (Barcrest) (MPU4) (set 51) + + + m4hittop__ao + Hit The Top (Barcrest) (MPU4) (set 52) + + + m4hittop__ap + Hit The Top (Barcrest) (MPU4) (set 53) + + + m4hittop__aq + Hit The Top (Barcrest) (MPU4) (set 54) + + + m4hittop__ar + Hit The Top (Barcrest) (MPU4) (set 55) + + + m4hittop__as + Hit The Top (Barcrest) (MPU4) (set 56) + + + m4hittop__at + Hit The Top (Barcrest) (MPU4) (set 57) + + + m4hittop__au + Hit The Top (Barcrest) (MPU4) (set 58) + + + m4hittop__av + Hit The Top (Barcrest) (MPU4) (set 59) + + + m4hittop__aw + Hit The Top (Barcrest) (MPU4) (set 60) + + + m4hittop__ax + Hit The Top (Barcrest) (MPU4) (set 61) + + + m4hittop__b + Hit The Top (Barcrest) (MPU4) (set 3) + + + m4hittop__c + Hit The Top (Barcrest) (MPU4) (set 4) + + + m4hittop__d + Hit The Top (Barcrest) (MPU4) (set 5) + + + m4hittop__e + Hit The Top (Barcrest) (MPU4) (set 6) + + + m4hittop__f + Hit The Top (Barcrest) (MPU4) (set 7) + + + m4hittop__g + Hit The Top (Barcrest) (MPU4) (set 8) + + + m4hittop__h + Hit The Top (Barcrest) (MPU4) (set 9) + + + m4hittop__i + Hit The Top (Barcrest) (MPU4) (set 10) + + + m4hittop__j + Hit The Top (Barcrest) (MPU4) (set 11) + + + m4hittop__k + Hit The Top (Barcrest) (MPU4) (set 12) + + + m4hittop__l + Hit The Top (Barcrest) (MPU4) (set 13) + + + m4hittop__m + Hit The Top (Barcrest) (MPU4) (set 14) + + + m4hittop__n + Hit The Top (Barcrest) (MPU4) (set 15) + + + m4hittop__o + Hit The Top (Barcrest) (MPU4) (set 16) + + + m4hittop__p + Hit The Top (Barcrest) (MPU4) (set 17) + + + m4hittop__q + Hit The Top (Barcrest) (MPU4) (set 18) + + + m4hittop__r + Hit The Top (Barcrest) (MPU4) (set 19) + + + m4hittop__s + Hit The Top (Barcrest) (MPU4) (set 20) + + + m4hittop__t + Hit The Top (Barcrest) (MPU4) (set 21) + + + m4hittop__u + Hit The Top (Barcrest) (MPU4) (set 22) + + + m4hittop__v + Hit The Top (Barcrest) (MPU4) (set 23) + + + m4hittop__w + Hit The Top (Barcrest) (MPU4) (set 24) + + + m4hittop__x + Hit The Top (Barcrest) (MPU4) (set 25) + + + m4hittop__y + Hit The Top (Barcrest) (MPU4) (set 26) + + + m4hittop__z + Hit The Top (Barcrest) (MPU4) (set 27) + + + m4hittp2 + Hit The Top (Barcrest) (MPU4, Mod 2 type, H4T 2.0, set 1) + + + m4hittp2a + Hit The Top (Barcrest) (MPU4, Mod 2 type, H4T 2.0, set 2) + + + m4holdon + Hold On (Barcrest) (Dutch) (MPU4) + + + m4holdtm + Hold Timer (Barcrest) (Dutch) (MPU4) (DHT) + + + m4holywd + Hollywood (Bwb) (MPU4) + + + m4hotcsh + Hot Cash (Empire) (MPU4, set 1) + + + m4hotcsha + Hot Cash (Empire) (MPU4, set 2) + + + m4hotcshb + Hot Cash (Empire) (MPU4, set 3) + + + m4hotcshc + Hot Cash (Empire) (MPU4, set 4) + + + m4hotrod + Hot Rod (Barcrest) (MPU4) (set 1) + + + m4hotrod__a + Hot Rod (Barcrest) (MPU4) (set 2) + + + m4hotrod__b + Hot Rod (Barcrest) (MPU4) (set 3) + + + m4hotrod__c + Hot Rod (Barcrest) (MPU4) (set 4) + + + m4hotrod__d + Hot Rod (Barcrest) (MPU4) (set 5) + + + m4hotrod__e + Hot Rod (Barcrest) (MPU4) (set 6) + + + m4hotrod__f + Hot Rod (Barcrest) (MPU4) (set 7) + + + m4hotrod__g + Hot Rod (Barcrest) (MPU4) (set 8) + + + m4hotrod__h + Hot Rod (Barcrest) (MPU4) (set 9) + + + m4hotrod__i + Hot Rod (Barcrest) (MPU4) (set 10) + + + m4hotrod__j + Hot Rod (Barcrest) (MPU4) (set 11) + + + m4hotrod__k + Hot Rod (Barcrest) (MPU4) (set 12) + + + m4hotrod__l + Hot Rod (Barcrest) (MPU4) (set 13) + + + m4hotrod__m + Hot Rod (Barcrest) (MPU4) (set 14) + + + m4hotrod__n + Hot Rod (Barcrest) (MPU4) (set 15) + + + m4hotrod__o + Hot Rod (Barcrest) (MPU4) (set 16) + + + m4hotrod__p + Hot Rod (Barcrest) (MPU4) (set 17) + + + m4hotrod__q + Hot Rod (Barcrest) (MPU4) (set 18) + + + m4hotrod__r + Hot Rod (Barcrest) (MPU4) (set 19) + + + m4hotrod__s + Hot Rod (Barcrest) (MPU4) (set 20) + + + m4hotrod__t + Hot Rod (Barcrest) (MPU4) (set 21) + + + m4hotrod__u + Hot Rod (Barcrest) (MPU4) (set 22) + + + m4hotrod__v + Hot Rod (Barcrest) (MPU4) (set 23) + + + m4hpyjok + Happy Joker (Barcrest) (Dutch) (MPU4) (DHJ1.2) + + + m4hslo + unknown MPU4 'HOT 3.0' (MPU4?) + + + m4hstr + Happy Streak (Coinworld) (MPU4) (set 1) + + + m4hstra + Happy Streak (Coinworld) (MPU4) (set 2) + + + m4hstrb + Happy Streak (Coinworld) (MPU4) (set 3) + + + m4hstrcs + Casino Happy Streak (Coinworld) (MPU4) (set 1) + + + m4hstrcsa + Casino Happy Streak (Coinworld) (MPU4) (set 2) + + + m4hstrcsb + Casino Happy Streak (Coinworld) (MPU4) (set 3) + + + m4hstrcsc + Casino Happy Streak (Coinworld) (MPU4) (set 4) + + + m4hstrcsd + Casino Happy Streak (Coinworld) (MPU4) (set 5) + + + m4hvhel + Heaven & Hell (Bwb) (MPU4) (set 1) + + + m4hvhel__a + Heaven & Hell (Bwb) (MPU4) (set 2) + + + m4hvhel__b + Heaven & Hell (Bwb) (MPU4) (set 3) + + + m4hvhel__c + Heaven & Hell (Bwb) (MPU4) (set 4) + + + m4hvhel__d + Heaven & Hell (Bwb) (MPU4) (set 5) + + + m4hvhel__e + Heaven & Hell (Bwb) (MPU4) (set 6) + + + m4hvhel__f + Heaven & Hell (Bwb) (MPU4) (set 7) + + + m4hvhel__g + Heaven & Hell (Bwb) (MPU4) (set 8) + + + m4hvhel__h + Heaven & Hell (Bwb) (MPU4) (set 9) + + + m4hypclb + Hyper Viper Club (Barcrest) (MPU4) (set 1) + + + m4hypclb__a + Hyper Viper Club (Barcrest) (MPU4) (set 2) + + + m4hypclb__b + Hyper Viper Club (Barcrest) (MPU4) (set 3) + + + m4hypclb__c + Hyper Viper Club (Barcrest) (MPU4) (set 4) + + + m4hypvip + Hyper Viper (Barcrest) (MPU4) (set 1) + + + m4hypvip__a + Hyper Viper (Barcrest) (MPU4) (set 2) + + + m4hypvip__b + Hyper Viper (Barcrest) (MPU4) (set 3) + + + m4hypvip__c + Hyper Viper (Barcrest) (MPU4) (set 4) + + + m4hypvip__d + Hyper Viper (Barcrest) (MPU4) (set 5) + + + m4hypvip__e + Hyper Viper (Barcrest) (MPU4) (set 6) + + + m4hypvip__f + Hyper Viper (Barcrest) (MPU4) (set 7) + + + m4hypvip__g + Hyper Viper (Barcrest) (MPU4) (set 8) + + + m4hypvip__h + Hyper Viper (Barcrest) (MPU4) (set 9) + + + m4hypvip__i + Hyper Viper (Barcrest) (MPU4) (set 10) + + + m4hypvip__j + Hyper Viper (Barcrest) (MPU4) (set 11) + + + m4hypvip__k + Hyper Viper (Barcrest) (MPU4) (set 12) + + + m4hypvip__l + Hyper Viper (Barcrest) (MPU4) (set 13) + + + m4hypvip__m + Hyper Viper (Barcrest) (MPU4) (set 14) + + + m4hypvip__n + Hyper Viper (Barcrest) (MPU4) (set 15) + + + m4hypvip__o + Hyper Viper (Barcrest) (MPU4) (set 16) + + + m4hypvip__p + Hyper Viper (Barcrest) (MPU4) (set 17) + + + m4hypvip__q + Hyper Viper (Barcrest) (MPU4) (set 18) + + + m4hypvip__r + Hyper Viper (Barcrest) (MPU4) (set 19) + + + m4hypvip__s + Hyper Viper (Barcrest) (MPU4) (set 20) + + + m4hypvip__t + Hyper Viper (Barcrest) (MPU4) (set 21) + + + m4hypvip__u + Hyper Viper (Barcrest) (MPU4) (set 22) + + + m4hypvip__v + Hyper Viper (Barcrest) (MPU4) (set 23) + + + m4indycr + Indy Cars (Bwb) (MPU4) (set 1) + + + m4indycr__a + Indy Cars (Bwb) (MPU4) (set 2) + + + m4indycr__b + Indy Cars (Bwb) (MPU4) (set 3) + + + m4indycr__c + Indy Cars (Bwb) (MPU4) (set 4) + + + m4indycr__d + Indy Cars (Bwb) (MPU4) (set 5) + + + m4indycr__e + Indy Cars (Bwb) (MPU4) (set 6) + + + m4indycr__f + Indy Cars (Bwb) (MPU4) (set 7) + + + m4intcep + Interceptor (Barcrest) (MPU4) (INT 3.0) + + + m4intcepa + Interceptor (Barcrest) (MPU4) (INT 3.0X) + + + m4intcepb + Interceptor (Barcrest) (MPU4) (INT 1.1) + + + m4jakjok + Jackpot Jokers (Bwb) (MPU4) (set 1) + + + m4jakjok__a + Jackpot Jokers (Bwb) (MPU4) (set 2) + + + m4jakjok__b + Jackpot Jokers (Bwb) (MPU4) (set 3) + + + m4jakjok__c + Jackpot Jokers (Bwb) (MPU4) (set 4) + + + m4jakjoka + Jackpot Jokers (alt) (Bwb) (MPU4) + + + m4jflash + Jumping Jack Flash (Bwb) (MPU4) (set 1) + + + m4jflash__a + Jumping Jack Flash (Bwb) (MPU4) (set 2) + + + m4jflash__b + Jumping Jack Flash (Bwb) (MPU4) (set 3) + + + m4jflash__c + Jumping Jack Flash (Bwb) (MPU4) (set 4) + + + m4jflash__d + Jumping Jack Flash (Bwb) (MPU4) (set 5) + + + m4jflash__e + Jumping Jack Flash (Bwb) (MPU4) (set 6) + + + m4jflash__f + Jumping Jack Flash (Bwb) (MPU4) (set 7) + + + m4jflash__g + Jumping Jack Flash (Bwb) (MPU4) (set 8) + + + m4jflash__h + Jumping Jack Flash (Bwb) (MPU4) (set 9) + + + m4jflash__i + Jumping Jack Flash (Bwb) (MPU4) (set 10) + + + m4jiggin + Jiggin' In The Riggin' (Global) (MPU4) (set 1) + + + m4jiggina + Jiggin' In The Riggin' (Global) (MPU4) (set 2) + + + m4jjc + Jumping Jack Cash (Pcp) (MPU4) (set 1) + + + m4jjca + Jumping Jack Cash (Pcp) (MPU4) (set 2) + + + m4jne + The Jackpot's Not Enough (Empire) (MPU4) + + + m4jok2k + Joker 2000 (Avantime?) (MPU4) (set 1) + + + m4jok2k__a + Joker 2000 (Avantime?) (MPU4) (set 2) + + + m4jok2k__b + Joker 2000 (Avantime?) (MPU4) (set 3) + + + m4jok300 + Jokers 300 (Barcrest) (German?) (MPU4) + + + m4jokmil + Jokers Millennium (Barcrest) (German) (MPU4) + + + m4jolgem + Jolly Gems (Barcrest) (MPU4) (set 1) + + + m4jolgem__0 + Jolly Gems (Barcrest) (MPU4) (set 28) + + + m4jolgem__1 + Jolly Gems (Barcrest) (MPU4) (set 29) + + + m4jolgem__2 + Jolly Gems (Barcrest) (MPU4) (set 30) + + + m4jolgem__3 + Jolly Gems (Barcrest) (MPU4) (set 31) + + + m4jolgem__4 + Jolly Gems (Barcrest) (MPU4) (set 32) + + + m4jolgem__5 + Jolly Gems (Barcrest) (MPU4) (set 33) + + + m4jolgem__6 + Jolly Gems (Barcrest) (MPU4) (set 34) + + + m4jolgem__7 + Jolly Gems (Barcrest) (MPU4) (set 35) + + + m4jolgem__8 + Jolly Gems (Barcrest) (MPU4) (set 36) + + + m4jolgem__9 + Jolly Gems (Barcrest) (MPU4) (set 37) + + + m4jolgem__a + Jolly Gems (Barcrest) (MPU4) (set 2) + + + m4jolgem__aa + Jolly Gems (Barcrest) (MPU4) (set 38) + + + m4jolgem__ab + Jolly Gems (Barcrest) (MPU4) (set 39) + + + m4jolgem__ac + Jolly Gems (Barcrest) (MPU4) (set 40) + + + m4jolgem__ad + Jolly Gems (Barcrest) (MPU4) (set 41) + + + m4jolgem__ae + Jolly Gems (Barcrest) (MPU4) (set 42) + + + m4jolgem__af + Jolly Gems (Barcrest) (MPU4) (set 43) + + + m4jolgem__ag + Jolly Gems (Barcrest) (MPU4) (set 44) + + + m4jolgem__ah + Jolly Gems (Barcrest) (MPU4) (set 45) + + + m4jolgem__ai + Jolly Gems (Barcrest) (MPU4) (set 46) + + + m4jolgem__aj + Jolly Gems (Barcrest) (MPU4) (set 47) + + + m4jolgem__ak + Jolly Gems (Barcrest) (MPU4) (set 48) + + + m4jolgem__al + Jolly Gems (Barcrest) (MPU4) (set 49) + + + m4jolgem__am + Jolly Gems (Barcrest) (MPU4) (set 50) + + + m4jolgem__an + Jolly Gems (Barcrest) (MPU4) (set 51) + + + m4jolgem__ao + Jolly Gems (Barcrest) (MPU4) (set 52) + + + m4jolgem__ap + Jolly Gems (Barcrest) (MPU4) (set 53) + + + m4jolgem__b + Jolly Gems (Barcrest) (MPU4) (set 3) + + + m4jolgem__c + Jolly Gems (Barcrest) (MPU4) (set 4) + + + m4jolgem__d + Jolly Gems (Barcrest) (MPU4) (set 5) + + + m4jolgem__e + Jolly Gems (Barcrest) (MPU4) (set 6) + + + m4jolgem__f + Jolly Gems (Barcrest) (MPU4) (set 7) + + + m4jolgem__g + Jolly Gems (Barcrest) (MPU4) (set 8) + + + m4jolgem__h + Jolly Gems (Barcrest) (MPU4) (set 9) + + + m4jolgem__i + Jolly Gems (Barcrest) (MPU4) (set 10) + + + m4jolgem__j + Jolly Gems (Barcrest) (MPU4) (set 11) + + + m4jolgem__k + Jolly Gems (Barcrest) (MPU4) (set 12) + + + m4jolgem__l + Jolly Gems (Barcrest) (MPU4) (set 13) + + + m4jolgem__m + Jolly Gems (Barcrest) (MPU4) (set 14) + + + m4jolgem__n + Jolly Gems (Barcrest) (MPU4) (set 15) + + + m4jolgem__o + Jolly Gems (Barcrest) (MPU4) (set 16) + + + m4jolgem__p + Jolly Gems (Barcrest) (MPU4) (set 17) + + + m4jolgem__q + Jolly Gems (Barcrest) (MPU4) (set 18) + + + m4jolgem__r + Jolly Gems (Barcrest) (MPU4) (set 19) + + + m4jolgem__s + Jolly Gems (Barcrest) (MPU4) (set 20) + + + m4jolgem__t + Jolly Gems (Barcrest) (MPU4) (set 21) + + + m4jolgem__u + Jolly Gems (Barcrest) (MPU4) (set 22) + + + m4jolgem__v + Jolly Gems (Barcrest) (MPU4) (set 23) + + + m4jolgem__w + Jolly Gems (Barcrest) (MPU4) (set 24) + + + m4jolgem__x + Jolly Gems (Barcrest) (MPU4) (set 25) + + + m4jolgem__y + Jolly Gems (Barcrest) (MPU4) (set 26) + + + m4jolgem__z + Jolly Gems (Barcrest) (MPU4) (set 27) + + + m4joljok + Jolly Joker (Barcrest) (MPU4) + + + m4joljokd + Jolly Joker (Barcrest) [Dutch] (MPU4) (DJJ) + + + m4joljokh + Jolly Joker (Barcrest) [Hungarian] (MPU4) (HJJ) + + + m4joltav + Jolly Taverner (Barcrest) (MPU4) (set 1) + + + m4joltava + Jolly Taverner (Barcrest) (MPU4) (set 2) + + + m4joltavb + Jolly Taverner (Barcrest) (MPU4) (set 3) + + + m4jp777 + Jackpot 777 (Cotswold Microsystems) (MPU4) + + + m4jpgem + Jackpot Gems (Barcrest) (MPU4) (set 1) + + + m4jpgem__0 + Jackpot Gems (Barcrest) (MPU4) (set 28) + + + m4jpgem__1 + Jackpot Gems (Barcrest) (MPU4) (set 29) + + + m4jpgem__2 + Jackpot Gems (Barcrest) (MPU4) (set 30) + + + m4jpgem__3 + Jackpot Gems (Barcrest) (MPU4) (set 31) + + + m4jpgem__4 + Jackpot Gems (Barcrest) (MPU4) (set 32) + + + m4jpgem__5 + Jackpot Gems (Barcrest) (MPU4) (set 33) + + + m4jpgem__6 + Jackpot Gems (Barcrest) (MPU4) (set 34) + + + m4jpgem__7 + Jackpot Gems (Barcrest) (MPU4) (set 35) + + + m4jpgem__8 + Jackpot Gems (Barcrest) (MPU4) (set 36) + + + m4jpgem__9 + Jackpot Gems (Barcrest) (MPU4) (set 37) + + + m4jpgem__a + Jackpot Gems (Barcrest) (MPU4) (set 2) + + + m4jpgem__a0 + Jackpot Gems (Barcrest) (MPU4) (set 64) + + + m4jpgem__a1 + Jackpot Gems (Barcrest) (MPU4) (set 65) + + + m4jpgem__a2 + Jackpot Gems (Barcrest) (MPU4) (set 66) + + + m4jpgem__a3 + Jackpot Gems (Barcrest) (MPU4) (set 67) + + + m4jpgem__a4 + Jackpot Gems (Barcrest) (MPU4) (set 68) + + + m4jpgem__a5 + Jackpot Gems (Barcrest) (MPU4) (set 69) + + + m4jpgem__a6 + Jackpot Gems (Barcrest) (MPU4) (set 70) + + + m4jpgem__a7 + Jackpot Gems (Barcrest) (MPU4) (set 71) + + + m4jpgem__a8 + Jackpot Gems (Barcrest) (MPU4) (set 72) + + + m4jpgem__a9 + Jackpot Gems (Barcrest) (MPU4) (set 73) + + + m4jpgem__aa + Jackpot Gems (Barcrest) (MPU4) (set 38) + + + m4jpgem__ab + Jackpot Gems (Barcrest) (MPU4) (set 39) + + + m4jpgem__ac + Jackpot Gems (Barcrest) (MPU4) (set 40) + + + m4jpgem__ad + Jackpot Gems (Barcrest) (MPU4) (set 41) + + + m4jpgem__ae + Jackpot Gems (Barcrest) (MPU4) (set 42) + + + m4jpgem__af + Jackpot Gems (Barcrest) (MPU4) (set 43) + + + m4jpgem__ag + Jackpot Gems (Barcrest) (MPU4) (set 44) + + + m4jpgem__ah + Jackpot Gems (Barcrest) (MPU4) (set 45) + + + m4jpgem__ai + Jackpot Gems (Barcrest) (MPU4) (set 46) + + + m4jpgem__aj + Jackpot Gems (Barcrest) (MPU4) (set 47) + + + m4jpgem__ak + Jackpot Gems (Barcrest) (MPU4) (set 48) + + + m4jpgem__al + Jackpot Gems (Barcrest) (MPU4) (set 49) + + + m4jpgem__am + Jackpot Gems (Barcrest) (MPU4) (set 50) + + + m4jpgem__an + Jackpot Gems (Barcrest) (MPU4) (set 51) + + + m4jpgem__ao + Jackpot Gems (Barcrest) (MPU4) (set 52) + + + m4jpgem__ap + Jackpot Gems (Barcrest) (MPU4) (set 53) + + + m4jpgem__aq + Jackpot Gems (Barcrest) (MPU4) (set 54) + + + m4jpgem__ar + Jackpot Gems (Barcrest) (MPU4) (set 55) + + + m4jpgem__as + Jackpot Gems (Barcrest) (MPU4) (set 56) + + + m4jpgem__at + Jackpot Gems (Barcrest) (MPU4) (set 57) + + + m4jpgem__au + Jackpot Gems (Barcrest) (MPU4) (set 58) + + + m4jpgem__av + Jackpot Gems (Barcrest) (MPU4) (set 59) + + + m4jpgem__aw + Jackpot Gems (Barcrest) (MPU4) (set 60) + + + m4jpgem__ax + Jackpot Gems (Barcrest) (MPU4) (set 61) + + + m4jpgem__ay + Jackpot Gems (Barcrest) (MPU4) (set 62) + + + m4jpgem__az + Jackpot Gems (Barcrest) (MPU4) (set 63) + + + m4jpgem__b + Jackpot Gems (Barcrest) (MPU4) (set 3) + + + m4jpgem__ba + Jackpot Gems (Barcrest) (MPU4) (set 74) + + + m4jpgem__bb + Jackpot Gems (Barcrest) (MPU4) (set 75) + + + m4jpgem__bc + Jackpot Gems (Barcrest) (MPU4) (set 76) + + + m4jpgem__bd + Jackpot Gems (Barcrest) (MPU4) (set 77) + + + m4jpgem__be + Jackpot Gems (Barcrest) (MPU4) (set 78) + + + m4jpgem__bf + Jackpot Gems (Barcrest) (MPU4) (set 79) + + + m4jpgem__bg + Jackpot Gems (Barcrest) (MPU4) (set 80) + + + m4jpgem__bh + Jackpot Gems (Barcrest) (MPU4) (set 81) + + + m4jpgem__bi + Jackpot Gems (Barcrest) (MPU4) (set 82) + + + m4jpgem__bj + Jackpot Gems (Barcrest) (MPU4) (set 83) + + + m4jpgem__bk + Jackpot Gems (Barcrest) (MPU4) (set 84) + + + m4jpgem__bl + Jackpot Gems (Barcrest) (MPU4) (set 85) + + + m4jpgem__bm + Jackpot Gems (Barcrest) (MPU4) (set 86) + + + m4jpgem__bn + Jackpot Gems (Barcrest) (MPU4) (set 87) + + + m4jpgem__bo + Jackpot Gems (Barcrest) (MPU4) (set 88) + + + m4jpgem__bp + Jackpot Gems (Barcrest) (MPU4) (set 89) + + + m4jpgem__c + Jackpot Gems (Barcrest) (MPU4) (set 4) + + + m4jpgem__d + Jackpot Gems (Barcrest) (MPU4) (set 5) + + + m4jpgem__e + Jackpot Gems (Barcrest) (MPU4) (set 6) + + + m4jpgem__f + Jackpot Gems (Barcrest) (MPU4) (set 7) + + + m4jpgem__g + Jackpot Gems (Barcrest) (MPU4) (set 8) + + + m4jpgem__h + Jackpot Gems (Barcrest) (MPU4) (set 9) + + + m4jpgem__i + Jackpot Gems (Barcrest) (MPU4) (set 10) + + + m4jpgem__j + Jackpot Gems (Barcrest) (MPU4) (set 11) + + + m4jpgem__k + Jackpot Gems (Barcrest) (MPU4) (set 12) + + + m4jpgem__l + Jackpot Gems (Barcrest) (MPU4) (set 13) + + + m4jpgem__m + Jackpot Gems (Barcrest) (MPU4) (set 14) + + + m4jpgem__n + Jackpot Gems (Barcrest) (MPU4) (set 15) + + + m4jpgem__o + Jackpot Gems (Barcrest) (MPU4) (set 16) + + + m4jpgem__p + Jackpot Gems (Barcrest) (MPU4) (set 17) + + + m4jpgem__q + Jackpot Gems (Barcrest) (MPU4) (set 18) + + + m4jpgem__r + Jackpot Gems (Barcrest) (MPU4) (set 19) + + + m4jpgem__s + Jackpot Gems (Barcrest) (MPU4) (set 20) + + + m4jpgem__t + Jackpot Gems (Barcrest) (MPU4) (set 21) + + + m4jpgem__u + Jackpot Gems (Barcrest) (MPU4) (set 22) + + + m4jpgem__v + Jackpot Gems (Barcrest) (MPU4) (set 23) + + + m4jpgem__w + Jackpot Gems (Barcrest) (MPU4) (set 24) + + + m4jpgem__x + Jackpot Gems (Barcrest) (MPU4) (set 25) + + + m4jpgem__y + Jackpot Gems (Barcrest) (MPU4) (set 26) + + + m4jpgem__z + Jackpot Gems (Barcrest) (MPU4) (set 27) + + + m4jpgemc + Jackpot Gems Classic (Barcrest) (MPU4) (set 1) + + + m4jpgemc__a + Jackpot Gems Classic (Barcrest) (MPU4) (set 2) + + + m4jpgemc__b + Jackpot Gems Classic (Barcrest) (MPU4) (set 3) + + + m4jpgemc__c + Jackpot Gems Classic (Barcrest) (MPU4) (set 4) + + + m4jpgemc__d + Jackpot Gems Classic (Barcrest) (MPU4) (set 5) + + + m4jpgemc__e + Jackpot Gems Classic (Barcrest) (MPU4) (set 6) + + + m4jpgemc__f + Jackpot Gems Classic (Barcrest) (MPU4) (set 7) + + + m4jpgemc__g + Jackpot Gems Classic (Barcrest) (MPU4) (set 8) + + + m4jpgemc__h + Jackpot Gems Classic (Barcrest) (MPU4) (set 9) + + + m4jpgemc__i + Jackpot Gems Classic (Barcrest) (MPU4) (set 10) + + + m4jpgemc__j + Jackpot Gems Classic (Barcrest) (MPU4) (set 11) + + + m4jpgemc__k + Jackpot Gems Classic (Barcrest) (MPU4) (set 12) + + + m4jpgemc__l + Jackpot Gems Classic (Barcrest) (MPU4) (set 13) + + + m4jpgemc__m + Jackpot Gems Classic (Barcrest) (MPU4) (set 14) + + + m4jpgemc__n + Jackpot Gems Classic (Barcrest) (MPU4) (set 15) + + + m4jpgemc__o + Jackpot Gems Classic (Barcrest) (MPU4) (set 16) + + + m4jpgemc__p + Jackpot Gems Classic (Barcrest) (MPU4) (set 17) + + + m4jpgemc__q + Jackpot Gems Classic (Barcrest) (MPU4) (set 18) + + + m4jpgemc__r + Jackpot Gems Classic (Barcrest) (MPU4) (set 19) + + + m4jpgemc__s + Jackpot Gems Classic (Barcrest) (MPU4) (set 20) + + + m4jpgemc__t + Jackpot Gems Classic (Barcrest) (MPU4) (set 21) + + + m4jpgemc__u + Jackpot Gems Classic (Barcrest) (MPU4) (set 22) + + + m4jpgemc__v + Jackpot Gems Classic (Barcrest) (MPU4) (set 23) + + + m4jpgemc__w + Jackpot Gems Classic (Barcrest) (MPU4) (set 24) + + + m4jpjmp + Jackpot Jump (Barcrest) (MPU4) (set 1) + + + m4jpjmpa + Jackpot Jump (Barcrest) (MPU4) (set 2) + + + m4jpmcla + Old Timer (Barcrest) (Dutch, alt 'JPM Classic' sound roms) (DOT1.1) + + + m4jungj + Jungle Japes (MPU4?) (set 1) + + + m4jungja + Jungle Japes (MPU4?) (set 2) + + + m4jungjb + Jungle Japes (MPU4?) (set 3) + + + m4jungjc + Jungle Japes (MPU4?) (set 4) + + + m4jungjk + Jungle Jackpots (Qps) (MPU4) (set 1) + + + m4jungjk__a + Jungle Jackpots (Qps) (MPU4) (set 2) + + + m4jungjk__b + Jungle Jackpots (Qps) (MPU4) (set 3) + + + m4jungjk__c + Jungle Jackpots (Qps) (MPU4) (set 4) + + + m4jungjk__d + Jungle Jackpots (Qps) (MPU4) (set 5) + + + m4jungjk__e + Jungle Jackpots (Qps) (MPU4) (set 6) + + + m4jwlcwn + Jewel In the Crown (Barcrest) (MPU4) (set 1) + + + m4jwlcwn__0 + Jewel In the Crown (Barcrest) (MPU4) (set 28) + + + m4jwlcwn__1 + Jewel In the Crown (Barcrest) (MPU4) (set 29) + + + m4jwlcwn__2 + Jewel In the Crown (Barcrest) (MPU4) (set 30) + + + m4jwlcwn__3 + Jewel In the Crown (Barcrest) (MPU4) (set 31) + + + m4jwlcwn__4 + Jewel In the Crown (Barcrest) (MPU4) (set 32) + + + m4jwlcwn__5 + Jewel In the Crown (Barcrest) (MPU4) (set 33) + + + m4jwlcwn__6 + Jewel In the Crown (Barcrest) (MPU4) (set 34) + + + m4jwlcwn__a + Jewel In the Crown (Barcrest) (MPU4) (set 2) + + + m4jwlcwn__b + Jewel In the Crown (Barcrest) (MPU4) (set 3) + + + m4jwlcwn__c + Jewel In the Crown (Barcrest) (MPU4) (set 4) + + + m4jwlcwn__d + Jewel In the Crown (Barcrest) (MPU4) (set 5) + + + m4jwlcwn__e + Jewel In the Crown (Barcrest) (MPU4) (set 6) + + + m4jwlcwn__f + Jewel In the Crown (Barcrest) (MPU4) (set 7) + + + m4jwlcwn__g + Jewel In the Crown (Barcrest) (MPU4) (set 8) + + + m4jwlcwn__h + Jewel In the Crown (Barcrest) (MPU4) (set 9) + + + m4jwlcwn__i + Jewel In the Crown (Barcrest) (MPU4) (set 10) + + + m4jwlcwn__j + Jewel In the Crown (Barcrest) (MPU4) (set 11) + + + m4jwlcwn__k + Jewel In the Crown (Barcrest) (MPU4) (set 12) + + + m4jwlcwn__l + Jewel In the Crown (Barcrest) (MPU4) (set 13) + + + m4jwlcwn__m + Jewel In the Crown (Barcrest) (MPU4) (set 14) + + + m4jwlcwn__n + Jewel In the Crown (Barcrest) (MPU4) (set 15) + + + m4jwlcwn__o + Jewel In the Crown (Barcrest) (MPU4) (set 16) + + + m4jwlcwn__p + Jewel In the Crown (Barcrest) (MPU4) (set 17) + + + m4jwlcwn__q + Jewel In the Crown (Barcrest) (MPU4) (set 18) + + + m4jwlcwn__r + Jewel In the Crown (Barcrest) (MPU4) (set 19) + + + m4jwlcwn__s + Jewel In the Crown (Barcrest) (MPU4) (set 20) + + + m4jwlcwn__t + Jewel In the Crown (Barcrest) (MPU4) (set 21) + + + m4jwlcwn__u + Jewel In the Crown (Barcrest) (MPU4) (set 22) + + + m4jwlcwn__v + Jewel In the Crown (Barcrest) (MPU4) (set 23) + + + m4jwlcwn__w + Jewel In the Crown (Barcrest) (MPU4) (set 24) + + + m4jwlcwn__x + Jewel In the Crown (Barcrest) (MPU4) (set 25) + + + m4jwlcwn__y + Jewel In the Crown (Barcrest) (MPU4) (set 26) + + + m4jwlcwn__z + Jewel In the Crown (Barcrest) (MPU4) (set 27) + + + m4kingg + King George (Avantime?) (MPU4) (set 1) + + + m4kingg__a + King George (Avantime?) (MPU4) (set 2) + + + m4kingq + Kings & Queens (Barcrest) (MPU4) (set 1) + + + m4kingq__a + Kings & Queens (Barcrest) (MPU4) (set 2) + + + m4kingq__b + Kings & Queens (Barcrest) (MPU4) (set 3) + + + m4kingq__c + Kings & Queens (Barcrest) (MPU4) (set 4) + + + m4kingq__d + Kings & Queens (Barcrest) (MPU4) (set 5) + + + m4kingq__e + Kings & Queens (Barcrest) (MPU4) (set 6) + + + m4kingq__f + Kings & Queens (Barcrest) (MPU4) (set 7) + + + m4kingq__g + Kings & Queens (Barcrest) (MPU4) (set 8) + + + m4kingq__h + Kings & Queens (Barcrest) (MPU4) (set 9) + + + m4kingq__i + Kings & Queens (Barcrest) (MPU4) (set 10) + + + m4kingq__j + Kings & Queens (Barcrest) (MPU4) (set 11) + + + m4kingq__k + Kings & Queens (Barcrest) (MPU4) (set 12) + + + m4kingq__l + Kings & Queens (Barcrest) (MPU4) (set 13) + + + m4kingq__m + Kings & Queens (Barcrest) (MPU4) (set 14) + + + m4kingq__n + Kings & Queens (Barcrest) (MPU4) (set 15) + + + m4kingq__o + Kings & Queens (Barcrest) (MPU4) (set 16) + + + m4kingq__p + Kings & Queens (Barcrest) (MPU4) (set 17) + + + m4kingq__r + Kings & Queens (Barcrest) (MPU4) (set 18) + + + m4kingq__s + Kings & Queens (Barcrest) (MPU4) (set 19) + + + m4kingq__t + Kings & Queens (Barcrest) (MPU4) (set 20) + + + m4kingqc + Kings & Queens Classic (Barcrest) (MPU4) (set 1) + + + m4kingqc__0 + Kings & Queens Classic (Barcrest) (MPU4) (set 26) + + + m4kingqc__1 + Kings & Queens Classic (Barcrest) (MPU4) (set 27) + + + m4kingqc__2 + Kings & Queens Classic (Barcrest) (MPU4) (set 28) + + + m4kingqc__3 + Kings & Queens Classic (Barcrest) (MPU4) (set 29) + + + m4kingqc__4 + Kings & Queens Classic (Barcrest) (MPU4) (set 30) + + + m4kingqc__5 + Kings & Queens Classic (Barcrest) (MPU4) (set 31) + + + m4kingqc__a + Kings & Queens Classic (Barcrest) (MPU4) (set 2) + + + m4kingqc__b + Kings & Queens Classic (Barcrest) (MPU4) (set 3) + + + m4kingqc__c + Kings & Queens Classic (Barcrest) (MPU4) (set 4) + + + m4kingqc__d + Kings & Queens Classic (Barcrest) (MPU4) (set 5) + + + m4kingqc__e + Kings & Queens Classic (Barcrest) (MPU4) (set 6) + + + m4kingqc__f + Kings & Queens Classic (Barcrest) (MPU4) (set 7) + + + m4kingqc__g + Kings & Queens Classic (Barcrest) (MPU4) (set 8) + + + m4kingqc__h + Kings & Queens Classic (Barcrest) (MPU4) (set 9) + + + m4kingqc__i + Kings & Queens Classic (Barcrest) (MPU4) (set 10) + + + m4kingqc__j + Kings & Queens Classic (Barcrest) (MPU4) (set 11) + + + m4kingqc__k + Kings & Queens Classic (Barcrest) (MPU4) (set 12) + + + m4kingqc__l + Kings & Queens Classic (Barcrest) (MPU4) (set 13) + + + m4kingqc__m + Kings & Queens Classic (Barcrest) (MPU4) (set 14) + + + m4kingqc__n + Kings & Queens Classic (Barcrest) (MPU4) (set 15) + + + m4kingqc__q + Kings & Queens Classic (Barcrest) (MPU4) (set 16) + + + m4kingqc__r + Kings & Queens Classic (Barcrest) (MPU4) (set 17) + + + m4kingqc__s + Kings & Queens Classic (Barcrest) (MPU4) (set 18) + + + m4kingqc__t + Kings & Queens Classic (Barcrest) (MPU4) (set 19) + + + m4kingqc__u + Kings & Queens Classic (Barcrest) (MPU4) (set 20) + + + m4kingqc__v + Kings & Queens Classic (Barcrest) (MPU4) (set 21) + + + m4kingqc__w + Kings & Queens Classic (Barcrest) (MPU4) (set 22) + + + m4kingqc__x + Kings & Queens Classic (Barcrest) (MPU4) (set 23) + + + m4kingqc__y + Kings & Queens Classic (Barcrest) (MPU4) (set 24) + + + m4kingqc__z + Kings & Queens Classic (Barcrest) (MPU4) (set 25) + + + m4kingqn + Kings & Queens Club (Crystal) (MPU4) (set 1) + + + m4kingqna + Kings & Queens Club (Crystal) (MPU4) (set 2) + + + m4kqclub + Kings & Queens Club (Newby) (MPU4) + + + m4lazy + Lazy Bones (Bwb) (MPU4) (set 1) + + + m4lazya + Lazy Bones (Bwb) (MPU4) (set 2) + + + m4lazyb + Lazy Bones (Bwb) (MPU4) (set 3) + + + m4libty + Liberty (Barcrest) (Dutch) (MPU4) + + + m4lineup + Line Up (Bwb - Barcrest) (MPU4) (set 1) + + + m4lineupa + Line Up (Bwb - Barcrest) (MPU4) (set 2) + + + m4ln7 + Lucky No7 (Bwb) (MPU4) (set 1) + + + m4ln7__a + Lucky No7 (Bwb) (MPU4) (set 2) + + + m4ln7__b + Lucky No7 (Bwb) (MPU4) (set 3) + + + m4ln7__c + Lucky No7 (Bwb) (MPU4) (set 4) + + + m4ln7__d + Lucky No7 (Bwb) (MPU4) (set 5) + + + m4loadmn + Loads A Money (Barcrest) (MPU4) (set 1) + + + m4loadmna + Loads A Money (Barcrest) (MPU4) (set 2) + + + m4loadmnb + Loads A Money (Barcrest) (MPU4) (set 3) + + + m4looplt + Loop The Loot (Qps) (MPU4) (set 1) + + + m4looplt__a + Loop The Loot (Qps) (MPU4) (set 2) + + + m4looplt__b + Loop The Loot (Qps) (MPU4) (set 3) + + + m4looplt__c + Loop The Loot (Qps) (MPU4) (set 4) + + + m4looplt__d + Loop The Loot (Qps) (MPU4) (set 5) + + + m4looplt__e + Loop The Loot (Qps) (MPU4) (set 6) + + + m4looplt__f + Loop The Loot (Qps) (MPU4) (set 7) + + + m4looplt__g + Loop The Loot (Qps) (MPU4) (set 8) + + + m4looplt__h + Loop The Loot (Qps) (MPU4) (set 9) + + + m4looplt__i + Loop The Loot (Qps) (MPU4) (set 10) + + + m4looplt__j + Loop The Loot (Qps) (MPU4) (set 11) + + + m4looplt__k + Loop The Loot (Qps) (MPU4) (set 12) + + + m4looplt__l + Loop The Loot (Qps) (MPU4) (set 13) + + + m4looplt__m + Loop The Loot (Qps) (MPU4) (set 14) + + + m4lotclb + Lottery Club (Crystal) (MPU4) (set 1) + + + m4lotclba + Lottery Club (Crystal) (MPU4) (set 2) + + + m4lotty + Lotty Time (Union) (MPU4) + + + m4luck7 + Lucky 7 (Barcrest) (Dutch) (MPU4) + + + m4luckdv + Lucky Devil (Barcrest) [Czech] (MPU4) + + + m4luckdvd + Lucky Devil (Barcrest) [Dutch] (MPU4) (DLD) + + + m4lucklv + Lucky Las Vegas (Barcrest) (MPU4) (set 1) + + + m4lucklv__0 + Lucky Las Vegas (Barcrest) (MPU4) (set 28) + + + m4lucklv__1 + Lucky Las Vegas (Barcrest) (MPU4) (set 29) + + + m4lucklv__2 + Lucky Las Vegas (Barcrest) (MPU4) (set 30) + + + m4lucklv__3 + Lucky Las Vegas (Barcrest) (MPU4) (set 31) + + + m4lucklv__4 + Lucky Las Vegas (Barcrest) (MPU4) (set 32) + + + m4lucklv__5 + Lucky Las Vegas (Barcrest) (MPU4) (set 33) + + + m4lucklv__6 + Lucky Las Vegas (Barcrest) (MPU4) (set 34) + + + m4lucklv__7 + Lucky Las Vegas (Barcrest) (MPU4) (set 35) + + + m4lucklv__8 + Lucky Las Vegas (Barcrest) (MPU4) (set 36) + + + m4lucklv__9 + Lucky Las Vegas (Barcrest) (MPU4) (set 37) + + + m4lucklv__a + Lucky Las Vegas (Barcrest) (MPU4) (set 2) + + + m4lucklv__aa + Lucky Las Vegas (Barcrest) (MPU4) (set 38) + + + m4lucklv__ab + Lucky Las Vegas (Barcrest) (MPU4) (set 39) + + + m4lucklv__ac + Lucky Las Vegas (Barcrest) (MPU4) (set 40) + + + m4lucklv__ad + Lucky Las Vegas (Barcrest) (MPU4) (set 41) + + + m4lucklv__ae + Lucky Las Vegas (Barcrest) (MPU4) (set 42) + + + m4lucklv__af + Lucky Las Vegas (Barcrest) (MPU4) (set 43) + + + m4lucklv__ag + Lucky Las Vegas (Barcrest) (MPU4) (set 44) + + + m4lucklv__ah + Lucky Las Vegas (Barcrest) (MPU4) (set 45) + + + m4lucklv__ai + Lucky Las Vegas (Barcrest) (MPU4) (set 46) + + + m4lucklv__b + Lucky Las Vegas (Barcrest) (MPU4) (set 3) + + + m4lucklv__c + Lucky Las Vegas (Barcrest) (MPU4) (set 4) + + + m4lucklv__d + Lucky Las Vegas (Barcrest) (MPU4) (set 5) + + + m4lucklv__e + Lucky Las Vegas (Barcrest) (MPU4) (set 6) + + + m4lucklv__f + Lucky Las Vegas (Barcrest) (MPU4) (set 7) + + + m4lucklv__g + Lucky Las Vegas (Barcrest) (MPU4) (set 8) + + + m4lucklv__h + Lucky Las Vegas (Barcrest) (MPU4) (set 9) + + + m4lucklv__i + Lucky Las Vegas (Barcrest) (MPU4) (set 10) + + + m4lucklv__j + Lucky Las Vegas (Barcrest) (MPU4) (set 11) + + + m4lucklv__k + Lucky Las Vegas (Barcrest) (MPU4) (set 12) + + + m4lucklv__l + Lucky Las Vegas (Barcrest) (MPU4) (set 13) + + + m4lucklv__m + Lucky Las Vegas (Barcrest) (MPU4) (set 14) + + + m4lucklv__n + Lucky Las Vegas (Barcrest) (MPU4) (set 15) + + + m4lucklv__o + Lucky Las Vegas (Barcrest) (MPU4) (set 16) + + + m4lucklv__p + Lucky Las Vegas (Barcrest) (MPU4) (set 17) + + + m4lucklv__q + Lucky Las Vegas (Barcrest) (MPU4) (set 18) + + + m4lucklv__r + Lucky Las Vegas (Barcrest) (MPU4) (set 19) + + + m4lucklv__s + Lucky Las Vegas (Barcrest) (MPU4) (set 20) + + + m4lucklv__t + Lucky Las Vegas (Barcrest) (MPU4) (set 21) + + + m4lucklv__u + Lucky Las Vegas (Barcrest) (MPU4) (set 22) + + + m4lucklv__v + Lucky Las Vegas (Barcrest) (MPU4) (set 23) + + + m4lucklv__w + Lucky Las Vegas (Barcrest) (MPU4) (set 24) + + + m4lucklv__x + Lucky Las Vegas (Barcrest) (MPU4) (set 25) + + + m4lucklv__y + Lucky Las Vegas (Barcrest) (MPU4) (set 26) + + + m4lucklv__z + Lucky Las Vegas (Barcrest) (MPU4) (set 27) + + + m4lucksc + Lucky Strike Club (Barcrest) (MPU4) (set 1) + + + m4lucksc__a + Lucky Strike Club (Barcrest) (MPU4) (set 2) + + + m4lucksc__b + Lucky Strike Club (Barcrest) (MPU4) (set 3) + + + m4lucksc__c + Lucky Strike Club (Barcrest) (MPU4) (set 4) + + + m4lucksc__d + Lucky Strike Club (Barcrest) (MPU4) (set 5) + + + m4lucksc__e + Lucky Strike Club (Barcrest) (MPU4) (set 6) + + + m4lucksc__f + Lucky Strike Club (Barcrest) (MPU4) (set 7) + + + m4lucksc__g + Lucky Strike Club (Barcrest) (MPU4) (set 8) + + + m4lucksc__h + Lucky Strike Club (Barcrest) (MPU4) (set 9) + + + m4lucksc__i + Lucky Strike Club (Barcrest) (MPU4) (set 10) + + + m4lucksc__j + Lucky Strike Club (Barcrest) (MPU4) (set 11) + + + m4lucksc__k + Lucky Strike Club (Barcrest) (MPU4) (set 12) + + + m4lucksc__l + Lucky Strike Club (Barcrest) (MPU4) (set 13) + + + m4luckst + Lucky Strike (Barcrest) (MPU4) (set 1) + + + m4luckst__0 + Lucky Strike (Barcrest) (MPU4) (set 28) + + + m4luckst__1 + Lucky Strike (Barcrest) (MPU4) (set 29) + + + m4luckst__2 + Lucky Strike (Barcrest) (MPU4) (set 30) + + + m4luckst__3 + Lucky Strike (Barcrest) (MPU4) (set 31) + + + m4luckst__4 + Lucky Strike (Barcrest) (MPU4) (set 32) + + + m4luckst__5 + Lucky Strike (Barcrest) (MPU4) (set 33) + + + m4luckst__6 + Lucky Strike (Barcrest) (MPU4) (set 34) + + + m4luckst__7 + Lucky Strike (Barcrest) (MPU4) (set 35) + + + m4luckst__8 + Lucky Strike (Barcrest) (MPU4) (set 36) + + + m4luckst__9 + Lucky Strike (Barcrest) (MPU4) (set 37) + + + m4luckst__a + Lucky Strike (Barcrest) (MPU4) (set 2) + + + m4luckst__aa + Lucky Strike (Barcrest) (MPU4) (set 38) + + + m4luckst__ab + Lucky Strike (Barcrest) (MPU4) (set 39) + + + m4luckst__ac + Lucky Strike (Barcrest) (MPU4) (set 40) + + + m4luckst__ad + Lucky Strike (Barcrest) (MPU4) (set 41) + + + m4luckst__ae + Lucky Strike (Barcrest) (MPU4) (set 42) + + + m4luckst__af + Lucky Strike (Barcrest) (MPU4) (set 43) + + + m4luckst__ag + Lucky Strike (Barcrest) (MPU4) (set 44) + + + m4luckst__ah + Lucky Strike (Barcrest) (MPU4) (set 45) + + + m4luckst__ai + Lucky Strike (Barcrest) (MPU4) (set 46) + + + m4luckst__aj + Lucky Strike (Barcrest) (MPU4) (set 47) + + + m4luckst__ak + Lucky Strike (Barcrest) (MPU4) (set 48) + + + m4luckst__al + Lucky Strike (Barcrest) (MPU4) (set 49) + + + m4luckst__am + Lucky Strike (Barcrest) (MPU4) (set 50) + + + m4luckst__an + Lucky Strike (Barcrest) (MPU4) (set 51) + + + m4luckst__ao + Lucky Strike (Barcrest) (MPU4) (set 52) + + + m4luckst__ap + Lucky Strike (Barcrest) (MPU4) (set 53) + + + m4luckst__aq + Lucky Strike (Barcrest) (MPU4) (set 54) + + + m4luckst__ar + Lucky Strike (Barcrest) (MPU4) (set 55) + + + m4luckst__as + Lucky Strike (Barcrest) (MPU4) (set 56) + + + m4luckst__at + Lucky Strike (Barcrest) (MPU4) (set 57) + + + m4luckst__au + Lucky Strike (Barcrest) (MPU4) (set 58) + + + m4luckst__av + Lucky Strike (Barcrest) (MPU4) (set 59) + + + m4luckst__aw + Lucky Strike (Barcrest) (MPU4) (set 60) + + + m4luckst__b + Lucky Strike (Barcrest) (MPU4) (set 3) + + + m4luckst__c + Lucky Strike (Barcrest) (MPU4) (set 4) + + + m4luckst__d + Lucky Strike (Barcrest) (MPU4) (set 5) + + + m4luckst__e + Lucky Strike (Barcrest) (MPU4) (set 6) + + + m4luckst__f + Lucky Strike (Barcrest) (MPU4) (set 7) + + + m4luckst__g + Lucky Strike (Barcrest) (MPU4) (set 8) + + + m4luckst__h + Lucky Strike (Barcrest) (MPU4) (set 9) + + + m4luckst__i + Lucky Strike (Barcrest) (MPU4) (set 10) + + + m4luckst__j + Lucky Strike (Barcrest) (MPU4) (set 11) + + + m4luckst__k + Lucky Strike (Barcrest) (MPU4) (set 12) + + + m4luckst__l + Lucky Strike (Barcrest) (MPU4) (set 13) + + + m4luckst__m + Lucky Strike (Barcrest) (MPU4) (set 14) + + + m4luckst__n + Lucky Strike (Barcrest) (MPU4) (set 15) + + + m4luckst__p + Lucky Strike (Barcrest) (MPU4) (set 17) + + + m4luckst__q + Lucky Strike (Barcrest) (MPU4) (set 18) + + + m4luckst__r + Lucky Strike (Barcrest) (MPU4) (set 19) + + + m4luckst__s + Lucky Strike (Barcrest) (MPU4) (set 20) + + + m4luckst__t + Lucky Strike (Barcrest) (MPU4) (set 21) + + + m4luckst__u + Lucky Strike (Barcrest) (MPU4) (set 22) + + + m4luckst__v + Lucky Strike (Barcrest) (MPU4) (set 23) + + + m4luckst__w + Lucky Strike (Barcrest) (MPU4) (set 24) + + + m4luckst__x + Lucky Strike (Barcrest) (MPU4) (set 25) + + + m4luckst__y + Lucky Strike (Barcrest) (MPU4) (set 26) + + + m4luckst__z + Lucky Strike (Barcrest) (MPU4) (set 27) + + + m4luckwb + Lucky Wild Boar (Barcrest) (MPU4) (set 1) + + + m4luckwba + Lucky Wild Boar (Barcrest) (MPU4) (set 2) + + + m4luckwbb + Lucky Wild Boar (Barcrest) (MPU4) (set 3) + + + m4luckwbc + Lucky Wild Boar (Barcrest) (MPU4) (set 4) + + + m4luckwbd + Lucky Wild Boar (Barcrest) (MPU4) (set 5) + + + m4luckwbe + Lucky Wild Boar (Barcrest) (MPU4) (set 6) + + + m4luckwbf + Lucky Wild Boar (Barcrest) (MPU4) (set 7) + + + m4luxor + Luxor (Barcrest) (MPU4) (set 1) + + + m4luxor__a + Luxor (Barcrest) (MPU4) (set 2) + + + m4luxor__b + Luxor (Barcrest) (MPU4) (set 3) + + + m4luxor__c + Luxor (Barcrest) (MPU4) (set 4) + + + m4luxor__d + Luxor (Barcrest) (MPU4) (set 5) + + + m4luxor__e + Luxor (Barcrest) (MPU4) (set 6) + + + m4luxor__f + Luxor (Barcrest) (MPU4) (set 7) + + + m4luxor__g + Luxor (Barcrest) (MPU4) (set 8) + + + m4luxor__h + Luxor (Barcrest) (MPU4) (set 9) + + + m4luxor__i + Luxor (Barcrest) (MPU4) (set 10) + + + m4luxor__j + Luxor (Barcrest) (MPU4) (set 11) + + + m4luxor__k + Luxor (Barcrest) (MPU4) (set 12) + + + m4luxor__l + Luxor (Barcrest) (MPU4) (set 13) + + + m4luxor__m + Luxor (Barcrest) (MPU4) (set 14) + + + m4luxor__n + Luxor (Barcrest) (MPU4) (set 15) + + + m4luxor__o + Luxor (Barcrest) (MPU4) (set 16) + + + m4luxor__p + Luxor (Barcrest) (MPU4) (set 17) + + + m4luxor__q + Luxor (Barcrest) (MPU4) (set 18) + + + m4luxor__r + Luxor (Barcrest) (MPU4) (set 19) + + + m4luxor__s + Luxor (Barcrest) (MPU4) (set 20) + + + m4luxor__t + Luxor (Barcrest) (MPU4) (set 21) + + + m4luxor__u + Luxor (Barcrest) (MPU4) (set 22) + + + m4luxor__v + Luxor (Barcrest) (MPU4) (set 23) + + + m4luxor__w + Luxor (Barcrest) (MPU4) (set 24) + + + m4luxor__x + Luxor (Barcrest) (MPU4) (set 25) + + + m4luxor__y + Luxor (Barcrest) (MPU4) (set 26) + + + m4luxor__z + Luxor (Barcrest) (MPU4) (set 27) + + + m4lvlcl + Lucky Las Vegas Classic (Barcrest) (MPU4) (set 1) + + + m4lvlcl__a + Lucky Las Vegas Classic (Barcrest) (MPU4) (set 2) + + + m4lvlcl__b + Lucky Las Vegas Classic (Barcrest) (MPU4) (set 3) + + + m4lvlcl__c + Lucky Las Vegas Classic (Barcrest) (MPU4) (set 4) + + + m4lvlcl__d + Lucky Las Vegas Classic (Barcrest) (MPU4) (set 5) + + + m4lvlcl__e + Lucky Las Vegas Classic (Barcrest) (MPU4) (set 6) + + + m4lvlcl__f + Lucky Las Vegas Classic (Barcrest) (MPU4) (set 7) + + + m4madhse + Mad House (Barcrest) (MPU4) (set 1) + + + m4madhse__0 + Mad House (Barcrest) (MPU4) (set 28) + + + m4madhse__a + Mad House (Barcrest) (MPU4) (set 2) + + + m4madhse__b + Mad House (Barcrest) (MPU4) (set 3) + + + m4madhse__c + Mad House (Barcrest) (MPU4) (set 4) + + + m4madhse__d + Mad House (Barcrest) (MPU4) (set 5) + + + m4madhse__e + Mad House (Barcrest) (MPU4) (set 6) + + + m4madhse__f + Mad House (Barcrest) (MPU4) (set 7) + + + m4madhse__g + Mad House (Barcrest) (MPU4) (set 8) + + + m4madhse__h + Mad House (Barcrest) (MPU4) (set 9) + + + m4madhse__i + Mad House (Barcrest) (MPU4) (set 10) + + + m4madhse__j + Mad House (Barcrest) (MPU4) (set 11) + + + m4madhse__k + Mad House (Barcrest) (MPU4) (set 12) + + + m4madhse__l + Mad House (Barcrest) (MPU4) (set 13) + + + m4madhse__m + Mad House (Barcrest) (MPU4) (set 14) + + + m4madhse__n + Mad House (Barcrest) (MPU4) (set 15) + + + m4madhse__o + Mad House (Barcrest) (MPU4) (set 16) + + + m4madhse__p + Mad House (Barcrest) (MPU4) (set 17) + + + m4madhse__q + Mad House (Barcrest) (MPU4) (set 18) + + + m4madhse__r + Mad House (Barcrest) (MPU4) (set 19) + + + m4madhse__s + Mad House (Barcrest) (MPU4) (set 20) + + + m4madhse__t + Mad House (Barcrest) (MPU4) (set 21) + + + m4madhse__u + Mad House (Barcrest) (MPU4) (set 22) + + + m4madhse__v + Mad House (Barcrest) (MPU4) (set 23) + + + m4madhse__w + Mad House (Barcrest) (MPU4) (set 24) + + + m4madhse__x + Mad House (Barcrest) (MPU4) (set 25) + + + m4madhse__y + Mad House (Barcrest) (MPU4) (set 26) + + + m4madhse__z + Mad House (Barcrest) (MPU4) (set 27) + + + m4madmnc + Mad Money Classic (Bwb) (MPU4) (set 1) + + + m4madmnc__a + Mad Money Classic (Bwb) (MPU4) (set 2) + + + m4madmnc__b + Mad Money Classic (Bwb) (MPU4) (set 3) + + + m4madmnc__c + Mad Money Classic (Bwb) (MPU4) (set 4) + + + m4madmnc__d + Mad Money Classic (Bwb) (MPU4) (set 5) + + + m4madmnc__e + Mad Money Classic (Bwb) (MPU4) (set 6) + + + m4madmnc__f + Mad Money Classic (Bwb) (MPU4) (set 7) + + + m4madmnc__g + Mad Money Classic (Bwb) (MPU4) (set 8) + + + m4madmnc__h + Mad Money Classic (Bwb) (MPU4) (set 9) + + + m4madmnc__i + Mad Money Classic (Bwb) (MPU4) (set 10) + + + m4madmnc__j + Mad Money Classic (Bwb) (MPU4) (set 11) + + + m4madmnc__k + Mad Money Classic (Bwb) (MPU4) (set 12) + + + m4madmnc__l + Mad Money Classic (Bwb) (MPU4) (set 13) + + + m4madmnc__m + Mad Money Classic (Bwb) (MPU4) (set 14) + + + m4madmnc__n + Mad Money Classic (Bwb) (MPU4) (set 15) + + + m4madmnc__o + Mad Money Classic (Bwb) (MPU4) (set 16) + + + m4madmnc__p + Mad Money Classic (Bwb) (MPU4) (set 17) + + + m4madmnc__q + Mad Money Classic (Bwb) (MPU4) (set 18) + + + m4madmnc__r + Mad Money Classic (Bwb) (MPU4) (set 19) + + + m4madmnc__s + Mad Money Classic (Bwb) (MPU4) (set 20) + + + m4madmnc__t + Mad Money Classic (Bwb) (MPU4) (set 21) + + + m4madmnc__u + Mad Money Classic (Bwb) (MPU4) (set 22) + + + m4madmnc__v + Mad Money Classic (Bwb) (MPU4) (set 23) + + + m4madmnc__w + Mad Money Classic (Bwb) (MPU4) (set 24) + + + m4madmon + Mad Money (Bwb) (MPU4) (set 1) + + + m4madmon__a + Mad Money (Bwb) (MPU4) (set 2) + + + m4madmon__b + Mad Money (Bwb) (MPU4) (set 3) + + + m4madmon__c + Mad Money (Bwb) (MPU4) (set 4) + + + m4madmon__d + Mad Money (Bwb) (MPU4) (set 5) + + + m4madmon__e + Mad Money (Bwb) (MPU4) (set 6) + + + m4madmon__f + Mad Money (Bwb) (MPU4) (set 7) + + + m4madmon__g + Mad Money (Bwb) (MPU4) (set 8) + + + m4madmon__h + Mad Money (Bwb) (MPU4) (set 9) + + + m4madmon__i + Mad Money (Bwb) (MPU4) (set 10) + + + m4madmon__j + Mad Money (Bwb) (MPU4) (set 11) + + + m4madmon__k + Mad Money (Bwb) (MPU4) (set 12) + + + m4mag7s + Magnificent 7s (Barcrest) (MPU4) (set 1) + + + m4mag7s__0 + Magnificent 7s (Barcrest) (MPU4) (set 28) + + + m4mag7s__1 + Magnificent 7s (Barcrest) (MPU4) (set 29) + + + m4mag7s__2 + Magnificent 7s (Barcrest) (MPU4) (set 30) + + + m4mag7s__3 + Magnificent 7s (Barcrest) (MPU4) (set 31) + + + m4mag7s__4 + Magnificent 7s (Barcrest) (MPU4) (set 32) + + + m4mag7s__5 + Magnificent 7s (Barcrest) (MPU4) (set 33) + + + m4mag7s__6 + Magnificent 7s (Barcrest) (MPU4) (set 34) + + + m4mag7s__7 + Magnificent 7s (Barcrest) (MPU4) (set 35) + + + m4mag7s__8 + Magnificent 7s (Barcrest) (MPU4) (set 36) + + + m4mag7s__9 + Magnificent 7s (Barcrest) (MPU4) (set 37) + + + m4mag7s__a + Magnificent 7s (Barcrest) (MPU4) (set 2) + + + m4mag7s__aa + Magnificent 7s (Barcrest) (MPU4) (set 38) + + + m4mag7s__ab + Magnificent 7s (Barcrest) (MPU4) (set 39) + + + m4mag7s__ac + Magnificent 7s (Barcrest) (MPU4) (set 40) + + + m4mag7s__ad + Magnificent 7s (Barcrest) (MPU4) (set 41) + + + m4mag7s__ae + Magnificent 7s (Barcrest) (MPU4) (set 42) + + + m4mag7s__af + Magnificent 7s (Barcrest) (MPU4) (set 43) + + + m4mag7s__ag + Magnificent 7s (Barcrest) (MPU4) (set 44) + + + m4mag7s__ah + Magnificent 7s (Barcrest) (MPU4) (set 45) + + + m4mag7s__ai + Magnificent 7s (Barcrest) (MPU4) (set 46) + + + m4mag7s__aj + Magnificent 7s (Barcrest) (MPU4) (set 47) + + + m4mag7s__ak + Magnificent 7s (Barcrest) (MPU4) (set 48) + + + m4mag7s__al + Magnificent 7s (Barcrest) (MPU4) (set 49) + + + m4mag7s__am + Magnificent 7s (Barcrest) (MPU4) (set 50) + + + m4mag7s__an + Magnificent 7s (Barcrest) (MPU4) (set 51) + + + m4mag7s__ao + Magnificent 7s (Barcrest) (MPU4) (set 52) + + + m4mag7s__ap + Magnificent 7s (Barcrest) (MPU4) (set 53) + + + m4mag7s__aq + Magnificent 7s (Barcrest) (MPU4) (set 54) + + + m4mag7s__ar + Magnificent 7s (Barcrest) (MPU4) (set 55) + + + m4mag7s__as + Magnificent 7s (Barcrest) (MPU4) (set 56) + + + m4mag7s__at + Magnificent 7s (Barcrest) (MPU4) (set 57) + + + m4mag7s__au + Magnificent 7s (Barcrest) (MPU4) (set 58) + + + m4mag7s__av + Magnificent 7s (Barcrest) (MPU4) (set 59) + + + m4mag7s__aw + Magnificent 7s (Barcrest) (MPU4) (set 60) + + + m4mag7s__ax + Magnificent 7s (Barcrest) (MPU4) (set 61) + + + m4mag7s__b + Magnificent 7s (Barcrest) (MPU4) (set 3) + + + m4mag7s__c + Magnificent 7s (Barcrest) (MPU4) (set 4) + + + m4mag7s__d + Magnificent 7s (Barcrest) (MPU4) (set 5) + + + m4mag7s__e + Magnificent 7s (Barcrest) (MPU4) (set 6) + + + m4mag7s__f + Magnificent 7s (Barcrest) (MPU4) (set 7) + + + m4mag7s__g + Magnificent 7s (Barcrest) (MPU4) (set 8) + + + m4mag7s__h + Magnificent 7s (Barcrest) (MPU4) (set 9) + + + m4mag7s__i + Magnificent 7s (Barcrest) (MPU4) (set 10) + + + m4mag7s__j + Magnificent 7s (Barcrest) (MPU4) (set 11) + + + m4mag7s__k + Magnificent 7s (Barcrest) (MPU4) (set 12) + + + m4mag7s__l + Magnificent 7s (Barcrest) (MPU4) (set 13) + + + m4mag7s__m + Magnificent 7s (Barcrest) (MPU4) (set 14) + + + m4mag7s__n + Magnificent 7s (Barcrest) (MPU4) (set 15) + + + m4mag7s__o + Magnificent 7s (Barcrest) (MPU4) (set 16) + + + m4mag7s__p + Magnificent 7s (Barcrest) (MPU4) (set 17) + + + m4mag7s__q + Magnificent 7s (Barcrest) (MPU4) (set 18) + + + m4mag7s__r + Magnificent 7s (Barcrest) (MPU4) (set 19) + + + m4mag7s__s + Magnificent 7s (Barcrest) (MPU4) (set 20) + + + m4mag7s__t + Magnificent 7s (Barcrest) (MPU4) (set 21) + + + m4mag7s__u + Magnificent 7s (Barcrest) (MPU4) (set 22) + + + m4mag7s__v + Magnificent 7s (Barcrest) (MPU4) (set 23) + + + m4mag7s__w + Magnificent 7s (Barcrest) (MPU4) (set 24) + + + m4mag7s__x + Magnificent 7s (Barcrest) (MPU4) (set 25) + + + m4mag7s__y + Magnificent 7s (Barcrest) (MPU4) (set 26) + + + m4mag7s__z + Magnificent 7s (Barcrest) (MPU4) (set 27) + + + m4magdrg + Magic Dragon (Barcrest) (MPU4) (DMD1.0) + + + m4magi7 + Magic 7's (Crystal) (MPU4) (set 1) + + + m4magi7a + Magic 7's (Crystal) (MPU4) (set 2) + + + m4maglin + Magic Liner (Barcrest) (MPU4) (DMA2.1) + + + m4magrep + Magic Replay (Barcrest) (Dutch) (MPU4) + + + m4magtbo + Magic Turbo (Barcrest) (MPU4) + + + m4makmnt + Make A Mint (Barcrest) (MPU4) (set 1) + + + m4makmnt__0 + Make A Mint (Barcrest) (MPU4) (set 28) + + + m4makmnt__1 + Make A Mint (Barcrest) (MPU4) (set 29) + + + m4makmnt__2 + Make A Mint (Barcrest) (MPU4) (set 30) + + + m4makmnt__3 + Make A Mint (Barcrest) (MPU4) (set 31) + + + m4makmnt__4 + Make A Mint (Barcrest) (MPU4) (set 32) + + + m4makmnt__5 + Make A Mint (Barcrest) (MPU4) (set 33) + + + m4makmnt__6 + Make A Mint (Barcrest) (MPU4) (set 34) + + + m4makmnt__7 + Make A Mint (Barcrest) (MPU4) (set 35) + + + m4makmnt__8 + Make A Mint (Barcrest) (MPU4) (set 36) + + + m4makmnt__9 + Make A Mint (Barcrest) (MPU4) (set 37) + + + m4makmnt__a + Make A Mint (Barcrest) (MPU4) (set 2) + + + m4makmnt__aa + Make A Mint (Barcrest) (MPU4) (set 38) + + + m4makmnt__ab + Make A Mint (Barcrest) (MPU4) (set 39) + + + m4makmnt__ac + Make A Mint (Barcrest) (MPU4) (set 40) + + + m4makmnt__ad + Make A Mint (Barcrest) (MPU4) (set 41) + + + m4makmnt__ae + Make A Mint (Barcrest) (MPU4) (set 42) + + + m4makmnt__af + Make A Mint (Barcrest) (MPU4) (set 43) + + + m4makmnt__ag + Make A Mint (Barcrest) (MPU4) (set 44) + + + m4makmnt__ah + Make A Mint (Barcrest) (MPU4) (set 45) + + + m4makmnt__ai + Make A Mint (Barcrest) (MPU4) (set 46) + + + m4makmnt__aj + Make A Mint (Barcrest) (MPU4) (set 47) + + + m4makmnt__ak + Make A Mint (Barcrest) (MPU4) (set 48) + + + m4makmnt__al + Make A Mint (Barcrest) (MPU4) (set 49) + + + m4makmnt__am + Make A Mint (Barcrest) (MPU4) (set 50) + + + m4makmnt__an + Make A Mint (Barcrest) (MPU4) (set 51) + + + m4makmnt__ao + Make A Mint (Barcrest) (MPU4) (set 52) + + + m4makmnt__ap + Make A Mint (Barcrest) (MPU4) (set 53) + + + m4makmnt__aq + Make A Mint (Barcrest) (MPU4) (set 54) + + + m4makmnt__ar + Make A Mint (Barcrest) (MPU4) (set 55) + + + m4makmnt__as + Make A Mint (Barcrest) (MPU4) (set 56) + + + m4makmnt__b + Make A Mint (Barcrest) (MPU4) (set 3) + + + m4makmnt__c + Make A Mint (Barcrest) (MPU4) (set 4) + + + m4makmnt__d + Make A Mint (Barcrest) (MPU4) (set 5) + + + m4makmnt__e + Make A Mint (Barcrest) (MPU4) (set 6) + + + m4makmnt__f + Make A Mint (Barcrest) (MPU4) (set 7) + + + m4makmnt__g + Make A Mint (Barcrest) (MPU4) (set 8) + + + m4makmnt__h + Make A Mint (Barcrest) (MPU4) (set 9) + + + m4makmnt__i + Make A Mint (Barcrest) (MPU4) (set 10) + + + m4makmnt__j + Make A Mint (Barcrest) (MPU4) (set 11) + + + m4makmnt__k + Make A Mint (Barcrest) (MPU4) (set 12) + + + m4makmnt__l + Make A Mint (Barcrest) (MPU4) (set 13) + + + m4makmnt__m + Make A Mint (Barcrest) (MPU4) (set 14) + + + m4makmnt__n + Make A Mint (Barcrest) (MPU4) (set 15) + + + m4makmnt__o + Make A Mint (Barcrest) (MPU4) (set 16) + + + m4makmnt__p + Make A Mint (Barcrest) (MPU4) (set 17) + + + m4makmnt__q + Make A Mint (Barcrest) (MPU4) (set 18) + + + m4makmnt__r + Make A Mint (Barcrest) (MPU4) (set 19) + + + m4makmnt__s + Make A Mint (Barcrest) (MPU4) (set 20) + + + m4makmnt__t + Make A Mint (Barcrest) (MPU4) (set 21) + + + m4makmnt__u + Make A Mint (Barcrest) (MPU4) (set 22) + + + m4makmnt__v + Make A Mint (Barcrest) (MPU4) (set 23) + + + m4makmnt__w + Make A Mint (Barcrest) (MPU4) (set 24) + + + m4makmnt__x + Make A Mint (Barcrest) (MPU4) (set 25) + + + m4makmnt__y + Make A Mint (Barcrest) (MPU4) (set 26) + + + m4makmnt__z + Make A Mint (Barcrest) (MPU4) (set 27) + + + m4matdr + Matador (unknown) (MPU4?) + + + m4maxmze + Maximize (Union) (MPU4, set 1) + + + m4maxmzea + Maximize (Union) (MPU4, set 2) + + + m4maxmzeb + Maximize (Union) (MPU4, set 3) + + + m4maxmzec + Maximize (Union) (MPU4, set 4) + + + m4maxmzed + Maximize (Union) (MPU4, set 5) + + + m4mayhem + Mayhem (Mdm) (MPU4, set 1) + + + m4mayhema + Mayhem (Mdm) (MPU4, set 2) + + + m4mbel + Millennium Bells (Avantime?) (MPU4) (set 1) + + + m4mbel__0 + Millennium Bells (Avantime?) (MPU4) (set 28) + + + m4mbel__1 + Millennium Bells (Avantime?) (MPU4) (set 29) + + + m4mbel__2 + Millennium Bells (Avantime?) (MPU4) (set 30) + + + m4mbel__3 + Millennium Bells (Avantime?) (MPU4) (set 31) + + + m4mbel__4 + Millennium Bells (Avantime?) (MPU4) (set 32) + + + m4mbel__5 + Millennium Bells (Avantime?) (MPU4) (set 33) + + + m4mbel__6 + Millennium Bells (Avantime?) (MPU4) (set 34) + + + m4mbel__7 + Millennium Bells (Avantime?) (MPU4) (set 35) + + + m4mbel__8 + Millennium Bells (Avantime?) (MPU4) (set 36) + + + m4mbel__9 + Millennium Bells (Avantime?) (MPU4) (set 37) + + + m4mbel__a + Millennium Bells (Avantime?) (MPU4) (set 2) + + + m4mbel__a0 + Millennium Bells (Avantime?) (MPU4) (set 64) + + + m4mbel__aa + Millennium Bells (Avantime?) (MPU4) (set 38) + + + m4mbel__ab + Millennium Bells (Avantime?) (MPU4) (set 39) + + + m4mbel__ac + Millennium Bells (Avantime?) (MPU4) (set 40) + + + m4mbel__ad + Millennium Bells (Avantime?) (MPU4) (set 41) + + + m4mbel__ae + Millennium Bells (Avantime?) (MPU4) (set 42) + + + m4mbel__af + Millennium Bells (Avantime?) (MPU4) (set 43) + + + m4mbel__ag + Millennium Bells (Avantime?) (MPU4) (set 44) + + + m4mbel__ah + Millennium Bells (Avantime?) (MPU4) (set 45) + + + m4mbel__ai + Millennium Bells (Avantime?) (MPU4) (set 46) + + + m4mbel__aj + Millennium Bells (Avantime?) (MPU4) (set 47) + + + m4mbel__ak + Millennium Bells (Avantime?) (MPU4) (set 48) + + + m4mbel__al + Millennium Bells (Avantime?) (MPU4) (set 49) + + + m4mbel__am + Millennium Bells (Avantime?) (MPU4) (set 50) + + + m4mbel__an + Millennium Bells (Avantime?) (MPU4) (set 51) + + + m4mbel__ao + Millennium Bells (Avantime?) (MPU4) (set 52) + + + m4mbel__ap + Millennium Bells (Avantime?) (MPU4) (set 53) + + + m4mbel__aq + Millennium Bells (Avantime?) (MPU4) (set 54) + + + m4mbel__ar + Millennium Bells (Avantime?) (MPU4) (set 55) + + + m4mbel__as + Millennium Bells (Avantime?) (MPU4) (set 56) + + + m4mbel__at + Millennium Bells (Avantime?) (MPU4) (set 57) + + + m4mbel__au + Millennium Bells (Avantime?) (MPU4) (set 58) + + + m4mbel__av + Millennium Bells (Avantime?) (MPU4) (set 59) + + + m4mbel__aw + Millennium Bells (Avantime?) (MPU4) (set 60) + + + m4mbel__ax + Millennium Bells (Avantime?) (MPU4) (set 61) + + + m4mbel__ay + Millennium Bells (Avantime?) (MPU4) (set 62) + + + m4mbel__az + Millennium Bells (Avantime?) (MPU4) (set 63) + + + m4mbel__b + Millennium Bells (Avantime?) (MPU4) (set 3) + + + m4mbel__c + Millennium Bells (Avantime?) (MPU4) (set 4) + + + m4mbel__d + Millennium Bells (Avantime?) (MPU4) (set 5) + + + m4mbel__e + Millennium Bells (Avantime?) (MPU4) (set 6) + + + m4mbel__f + Millennium Bells (Avantime?) (MPU4) (set 7) + + + m4mbel__g + Millennium Bells (Avantime?) (MPU4) (set 8) + + + m4mbel__h + Millennium Bells (Avantime?) (MPU4) (set 9) + + + m4mbel__i + Millennium Bells (Avantime?) (MPU4) (set 10) + + + m4mbel__j + Millennium Bells (Avantime?) (MPU4) (set 11) + + + m4mbel__k + Millennium Bells (Avantime?) (MPU4) (set 12) + + + m4mbel__m + Millennium Bells (Avantime?) (MPU4) (set 14) + + + m4mbel__n + Millennium Bells (Avantime?) (MPU4) (set 15) + + + m4mbel__o + Millennium Bells (Avantime?) (MPU4) (set 16) + + + m4mbel__p + Millennium Bells (Avantime?) (MPU4) (set 17) + + + m4mbel__q + Millennium Bells (Avantime?) (MPU4) (set 18) + + + m4mbel__r + Millennium Bells (Avantime?) (MPU4) (set 19) + + + m4mbel__s + Millennium Bells (Avantime?) (MPU4) (set 20) + + + m4mbel__t + Millennium Bells (Avantime?) (MPU4) (set 21) + + + m4mbel__u + Millennium Bells (Avantime?) (MPU4) (set 22) + + + m4mbel__v + Millennium Bells (Avantime?) (MPU4) (set 23) + + + m4mbel__w + Millennium Bells (Avantime?) (MPU4) (set 24) + + + m4mbel__x + Millennium Bells (Avantime?) (MPU4) (set 25) + + + m4mbel__y + Millennium Bells (Avantime?) (MPU4) (set 26) + + + m4mbel__z + Millennium Bells (Avantime?) (MPU4) (set 27) + + + m4mecca + Mecca Money (Union) (MPU4) + + + m4megbks + Mega Bucks (Barcrest) (MPU4) (BUC 4.1X) + + + m4megbksa + Mega Bucks (Barcrest) (MPU4) (BUC 4.1CX) + + + m4megbksb + Mega Bucks (Barcrest) (MPU4) (BUC 4.1XD) + + + m4megbksc + Mega Bucks (Barcrest) (MPU4) (BUC 3.1) + + + m4meglnk + Megalink (Barcrest) (Dutch) (MPU4) + + + m4mgpn + Monaco Grand Prix (Nova) (MPU4) + + + m4milclb + Millionaire's Club (Barcrest) (MPU4) (set 1) + + + m4milclba + Millionaire's Club (Barcrest) (MPU4) (set 2) + + + m4milclbb + Millionaire's Club (Barcrest) (MPU4) (set 3) + + + m4milclbc + Millionaire's Club (Barcrest) (MPU4) (set 4) + + + m4milclbd + Millionaire's Club (Barcrest) (MPU4) (set 5) + + + m4milrou + Millennium Roulette (Avantime?) (MPU4) (set 1) + + + m4milrou__a + Millennium Roulette (Avantime?) (MPU4) (set 2) + + + m4mirage + Mirage (Barcrest) (MPU4) (RAG 4.1) + + + m4mjp + Mega Jackpot (Avantime?) (MPU4) (set 1) + + + m4mjp__a + Mega Jackpot (Avantime?) (MPU4) (set 2) + + + m4mjp__b + Mega Jackpot (Avantime?) (MPU4) (set 3) + + + m4mjp__c + Mega Jackpot (Avantime?) (MPU4) (set 4) + + + m4mjp__d + Mega Jackpot (Avantime?) (MPU4) (set 5) + + + m4mjp__e + Mega Jackpot (Avantime?) (MPU4) (set 6) + + + m4mjp__f + Mega Jackpot (Avantime?) (MPU4) (set 7) + + + m4mjp__g + Mega Jackpot (Avantime?) (MPU4) (set 8) + + + m4mmm + Money Mummy Money (Bwb) (MPU4) (set 1) + + + m4mmm__a + Money Mummy Money (Bwb) (MPU4) (set 2) + + + m4mmm__b + Money Mummy Money (Bwb) (MPU4) (set 3) + + + m4mmm__c + Money Mummy Money (Bwb) (MPU4) (set 4) + + + m4mmm__d + Money Mummy Money (Bwb) (MPU4) (set 5) + + + m4mmm__e + Money Mummy Money (Bwb) (MPU4) (set 6) + + + m4mmm__f + Money Mummy Money (Bwb) (MPU4) (set 7) + + + m4moneym + Money Maker (Barcrest) (MPU4) + + + m4monspn + Money Spinner (Empire) (MPU4, set 1) + + + m4monspna + Money Spinner (Empire) (MPU4, set 2) + + + m4monspnb + Money Spinner (Empire) (MPU4, set 3) + + + m4monte + Monte Carlo (Barcrest) (MPU4) (set 1) + + + m4monte__a + Monte Carlo (Barcrest) (MPU4) (set 2) + + + m4monte__b + Monte Carlo (Barcrest) (MPU4) (set 3) + + + m4monte__c + Monte Carlo (Barcrest) (MPU4) (set 4) + + + m4monte__d + Monte Carlo (Barcrest) (MPU4) (set 5) + + + m4monte__e + Monte Carlo (Barcrest) (MPU4) (set 6) + + + m4monte__f + Monte Carlo (Barcrest) (MPU4) (set 7) + + + m4monte__g + Monte Carlo (Barcrest) (MPU4) (set 8) + + + m4monte__h + Monte Carlo (Barcrest) (MPU4) (set 9) + + + m4monte__i + Monte Carlo (Barcrest) (MPU4) (set 10) + + + m4monte__j + Monte Carlo (Barcrest) (MPU4) (set 11) + + + m4monte__k + Monte Carlo (Barcrest) (MPU4) (set 12) + + + m4monte__l + Monte Carlo (Barcrest) (MPU4) (set 13) + + + m4monte__m + Monte Carlo (Barcrest) (MPU4) (set 14) + + + m4montrl + Money Trail (Crystal) (MPU4) (set 1) + + + m4montrla + Money Trail (Crystal) (MPU4) (set 2) + + + m4montrlb + Money Trail (Crystal) (MPU4) (set 3) + + + m4montrlc + Money Trail (Crystal) (MPU4) (set 4) + + + m4montrld + Money Trail (Crystal) (MPU4) (set 5) + + + m4multcl + Multiplay Club (Barcrest) (MPU4, MP 2.8) + + + m4multwy + Multiway (Barcrest) (Dutch) (MPU4) + + + m4mystiq + Mystique Club (Crystal) (MPU4) (set 1) + + + m4mystiqa + Mystique Club (Crystal) (MPU4) (set 2) + + + m4mystiqb + Mystique Club (Crystal) (MPU4) (set 3) + + + m4mystiqc + Mystique Club (Crystal) (MPU4) (set 4) + + + m4ndup + Nudge Double Up Deluxe (Crystal) (MPU4) (set 1) + + + m4ndupa + Nudge Double Up Deluxe (Crystal) (MPU4) (set 2) + + + m4ndupb + Nudge Double Up Deluxe (Crystal) (MPU4) (set 3) + + + m4ndupc + Nudge Double Up Deluxe (Crystal) (MPU4) (set 4) + + + m4nhtt + New Hit the Top (Barcrest) (MPU4) (set 1) + + + m4nhtt__a + New Hit the Top (Barcrest) (MPU4) (set 2) + + + m4nhtt__b + New Hit the Top (Barcrest) (MPU4) (set 3) + + + m4nhtt__c + New Hit the Top (Barcrest) (MPU4) (set 4) + + + m4nhtt__d + New Hit the Top (Barcrest) (MPU4) (set 5) + + + m4nhtt__e + New Hit the Top (Barcrest) (MPU4) (set 6) + + + m4nhtt__f + New Hit the Top (Barcrest) (MPU4) (set 7) + + + m4nhtt__g + New Hit the Top (Barcrest) (MPU4) (set 8) + + + m4nhtt__h + New Hit the Top (Barcrest) (MPU4) (set 9) + + + m4nhtt__i + New Hit the Top (Barcrest) (MPU4) (set 10) + + + m4nhtt__j + New Hit the Top (Barcrest) (MPU4) (set 11) + + + m4nick + Nickelodeon (Barcrest) (MPU4) (set 1) + + + m4nicka + Nickelodeon (Barcrest) (MPU4) (set 2) + + + m4nickb + Nickelodeon (Barcrest) (MPU4) (set 3) + + + m4nickc + Nickelodeon (Barcrest) (MPU4) (set 4) + + + m4nickd + Nickelodeon (Barcrest) (MPU4) (set 5) + + + m4nicke + Nickelodeon (Barcrest) (MPU4) (set 6) + + + m4nifty + Nifty Fifty (Barcrest) (MPU4) (NF 2.0) + + + m4niftya + Nifty Fifty (Barcrest) (MPU4) (NF 2.1, set 1) + + + m4niftyb + Nifty Fifty (Barcrest) (MPU4) (NF 2.1, set 2) + + + m4nile + Nile Jewels (Barcrest) (German) (MPU4) (GJN0.8) + + + m4nnww + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 1) + + + m4nnww__0 + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 28) + + + m4nnww__1 + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 29) + + + m4nnww__2 + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 30) + + + m4nnww__3 + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 31) + + + m4nnww__4 + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 32) + + + m4nnww__5 + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 33) + + + m4nnww__6 + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 34) + + + m4nnww__7 + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 35) + + + m4nnww__8 + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 36) + + + m4nnww__9 + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 37) + + + m4nnww__a + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 2) + + + m4nnww__aa + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 38) + + + m4nnww__ab + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 39) + + + m4nnww__ac + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 40) + + + m4nnww__ad + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 41) + + + m4nnww__ae + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 42) + + + m4nnww__af + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 43) + + + m4nnww__ag + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 44) + + + m4nnww__ah + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 45) + + + m4nnww__ai + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 46) + + + m4nnww__aj + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 47) + + + m4nnww__ak + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 48) + + + m4nnww__al + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 49) + + + m4nnww__am + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 50) + + + m4nnww__an + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 51) + + + m4nnww__ao + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 52) + + + m4nnww__ap + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 53) + + + m4nnww__aq + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 54) + + + m4nnww__ar + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 55) + + + m4nnww__as + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 56) + + + m4nnww__at + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 57) + + + m4nnww__au + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 58) + + + m4nnww__av + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 59) + + + m4nnww__aw + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 60) + + + m4nnww__ax + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 61) + + + m4nnww__ay + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 62) + + + m4nnww__az + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 63) + + + m4nnww__b + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 3) + + + m4nnww__c + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 4) + + + m4nnww__d + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 5) + + + m4nnww__e + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 6) + + + m4nnww__f + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 7) + + + m4nnww__g + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 8) + + + m4nnww__h + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 9) + + + m4nnww__i + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 10) + + + m4nnww__j + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 11) + + + m4nnww__k + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 12) + + + m4nnww__l + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 13) + + + m4nnww__m + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 14) + + + m4nnww__n + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 15) + + + m4nnww__o + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 16) + + + m4nnww__p + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 17) + + + m4nnww__q + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 18) + + + m4nnww__r + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 19) + + + m4nnww__s + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 20) + + + m4nnww__t + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 21) + + + m4nnww__u + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 22) + + + m4nnww__v + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 23) + + + m4nnww__w + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 24) + + + m4nnww__x + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 25) + + + m4nnww__y + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 26) + + + m4nnww__z + Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 27) + + + m4nnwwc + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 1) + + + m4nnwwc__0 + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 28) + + + m4nnwwc__1 + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 29) + + + m4nnwwc__2 + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 30) + + + m4nnwwc__3 + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 31) + + + m4nnwwc__4 + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 32) + + + m4nnwwc__5 + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 33) + + + m4nnwwc__6 + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 34) + + + m4nnwwc__7 + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 35) + + + m4nnwwc__8 + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 36) + + + m4nnwwc__9 + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 37) + + + m4nnwwc__a + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 2) + + + m4nnwwc__aa + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 38) + + + m4nnwwc__ab + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 39) + + + m4nnwwc__ac + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 40) + + + m4nnwwc__ad + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 41) + + + m4nnwwc__b + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 3) + + + m4nnwwc__c + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 4) + + + m4nnwwc__d + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 5) + + + m4nnwwc__e + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 6) + + + m4nnwwc__f + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 7) + + + m4nnwwc__g + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 8) + + + m4nnwwc__h + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 9) + + + m4nnwwc__i + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 10) + + + m4nnwwc__j + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 11) + + + m4nnwwc__k + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 12) + + + m4nnwwc__l + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 13) + + + m4nnwwc__m + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 14) + + + m4nnwwc__n + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 15) + + + m4nnwwc__o + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 16) + + + m4nnwwc__p + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 17) + + + m4nnwwc__q + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 18) + + + m4nnwwc__r + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 19) + + + m4nnwwc__s + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 20) + + + m4nnwwc__t + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 21) + + + m4nnwwc__u + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 22) + + + m4nnwwc__v + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 23) + + + m4nnwwc__w + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 24) + + + m4nnwwc__x + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 25) + + + m4nnwwc__y + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 26) + + + m4nnwwc__z + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 27) + + + m4nod + Nod And A Wink (Eurotech) (MPU4) + + + m4nspot + Night Spot Club (Barcrest) (MPU4) (set 1) + + + m4nspota + Night Spot Club (Barcrest) (MPU4) (set 2) + + + m4nspotb + Night Spot Club (Barcrest) (MPU4) (set 3) + + + m4nud2p + 2p Nudger (Mdm?) (MPU4) + + + m4nudbnk + Nudge Banker (Barcrest) (MPU4) (set 1) + + + m4nudbnk__a + Nudge Banker (Barcrest) (MPU4) (set 2) + + + m4nudbnk__b + Nudge Banker (Barcrest) (MPU4) (set 3) + + + m4nudbnk__c + Nudge Banker (Barcrest) (MPU4) (set 4) + + + m4nudbnk__d + Nudge Banker (Barcrest) (MPU4) (set 5) + + + m4nudbon + Nudge Bonanza (Mdm) (MPU4, set 1) + + + m4nudbona + Nudge Bonanza (Mdm) (MPU4, set 2) + + + m4nudgem + Nudge Gems (Mdm) (MPU4) + + + m4nudgwc + Nudge-A-Win (Concept Games Ltd) (MPU4) (set 1) + + + m4nudgwc__a + Nudge-A-Win (Concept Games Ltd) (MPU4) (set 2) + + + m4nudgwc__b + Nudge-A-Win (Concept Games Ltd) (MPU4) (set 3) + + + m4nudgwc__c + Nudge-A-Win (Concept Games Ltd) (MPU4) (set 4) + + + m4nudgwc__d + Nudge-A-Win (Concept Games Ltd) (MPU4) (set 5) + + + m4nudgwc__e + Nudge-A-Win (Concept Games Ltd) (MPU4) (set 6) + + + m4nudgwc__f + Nudge-A-Win (Concept Games Ltd) (MPU4) (set 7) + + + m4nudgwc__g + Nudge-A-Win (Concept Games Ltd) (MPU4) (set 8) + + + m4nudgwc__h + Nudge-A-Win (Concept Games Ltd) (MPU4) (set 9) + + + m4nudqst + Nudge Quest (Barcrest) (MPU4) (NQ 2.0) + + + m4nudshf + Nudge Shuffle (Barcrest) (MPU4) (set 1) + + + m4nudshfa + Nudge Shuffle (Barcrest) (MPU4) (set 2) + + + m4nudshfb + Nudge Shuffle (Barcrest) (MPU4) (set 3) + + + m4nudshfc + Nudge Shuffle (Barcrest) (MPU4) (set 4) + + + m4nudup + Nudge Up (Barcrest) (Dutch) (MPU4) + + + m4nudwin + Nudge & Win (Crystal) (MPU4) (set 1) + + + m4nudwina + Nudge & Win (Crystal) (MPU4) (set 2) + + + m4num1 + Number One (Barcrest) (Dutch) (MPU4) + + + m4oadrac + Ooh Aah Dracula (Barcrest) (MPU4) (set 1) + + + m4oadrac__a + Ooh Aah Dracula (Barcrest) (MPU4) (set 2) + + + m4oadrac__b + Ooh Aah Dracula (Barcrest) (MPU4) (set 3) + + + m4oadrac__c + Ooh Aah Dracula (Barcrest) (MPU4) (set 4) + + + m4oadrac__d + Ooh Aah Dracula (Barcrest) (MPU4) (set 5) + + + m4oadrac__e + Ooh Aah Dracula (Barcrest) (MPU4) (set 6) + + + m4oadrac__f + Ooh Aah Dracula (Barcrest) (MPU4) (set 7) + + + m4oadrac__g + Ooh Aah Dracula (Barcrest) (MPU4) (set 8) + + + m4oadrac__h + Ooh Aah Dracula (Barcrest) (MPU4) (set 9) + + + m4octo + Octopus (Nova) (MPU4) + + + m4oldtmr + Old Timer (Barcrest) (Dutch) (MPU4) (DOT1.1) + + + m4olygn + Olympic Gold (German) (Nova) (MPU4) (set 1) + + + m4olygn__a + Olympic Gold (German) (Nova) (MPU4) (set 2) + + + m4omega + Omega (Barcrest) (Dutch) (MPU4) + + + m4ordmnd + Oriental Diamonds (Barcrest) (German) (MPU4) + + + m4orland + Orlando Magic (Bwb) (MPU4) (set 1) + + + m4orland__a + Orlando Magic (Bwb) (MPU4) (set 2) + + + m4orland__b + Orlando Magic (Bwb) (MPU4) (set 3) + + + m4orland__c + Orlando Magic (Bwb) (MPU4) (set 4) + + + m4orland__d + Orlando Magic (Bwb) (MPU4) (set 5) + + + m4orland__e + Orlando Magic (Bwb) (MPU4) (set 6) + + + m4orland__f + Orlando Magic (Bwb) (MPU4) (set 7) + + + m4orland__g + Orlando Magic (Bwb) (MPU4) (set 8) + + + m4orland__h + Orlando Magic (Bwb) (MPU4) (set 9) + + + m4overmn + Over The Moon (Barcrest) (MPU4) (set 1) + + + m4overmn__0 + Over The Moon (Barcrest) (MPU4) (set 28) + + + m4overmn__1 + Over The Moon (Barcrest) (MPU4) (set 29) + + + m4overmn__2 + Over The Moon (Barcrest) (MPU4) (set 30) + + + m4overmn__3 + Over The Moon (Barcrest) (MPU4) (set 31) + + + m4overmn__4 + Over The Moon (Barcrest) (MPU4) (set 32) + + + m4overmn__5 + Over The Moon (Barcrest) (MPU4) (set 33) + + + m4overmn__6 + Over The Moon (Barcrest) (MPU4) (set 34) + + + m4overmn__7 + Over The Moon (Barcrest) (MPU4) (set 35) + + + m4overmn__8 + Over The Moon (Barcrest) (MPU4) (set 36) + + + m4overmn__a + Over The Moon (Barcrest) (MPU4) (set 2) + + + m4overmn__b + Over The Moon (Barcrest) (MPU4) (set 3) + + + m4overmn__c + Over The Moon (Barcrest) (MPU4) (set 4) + + + m4overmn__d + Over The Moon (Barcrest) (MPU4) (set 5) + + + m4overmn__e + Over The Moon (Barcrest) (MPU4) (set 6) + + + m4overmn__f + Over The Moon (Barcrest) (MPU4) (set 7) + + + m4overmn__g + Over The Moon (Barcrest) (MPU4) (set 8) + + + m4overmn__h + Over The Moon (Barcrest) (MPU4) (set 9) + + + m4overmn__i + Over The Moon (Barcrest) (MPU4) (set 10) + + + m4overmn__j + Over The Moon (Barcrest) (MPU4) (set 11) + + + m4overmn__k + Over The Moon (Barcrest) (MPU4) (set 12) + + + m4overmn__l + Over The Moon (Barcrest) (MPU4) (set 13) + + + m4overmn__m + Over The Moon (Barcrest) (MPU4) (set 14) + + + m4overmn__n + Over The Moon (Barcrest) (MPU4) (set 15) + + + m4overmn__o + Over The Moon (Barcrest) (MPU4) (set 16) + + + m4overmn__p + Over The Moon (Barcrest) (MPU4) (set 17) + + + m4overmn__q + Over The Moon (Barcrest) (MPU4) (set 18) + + + m4overmn__r + Over The Moon (Barcrest) (MPU4) (set 19) + + + m4overmn__s + Over The Moon (Barcrest) (MPU4) (set 20) + + + m4overmn__t + Over The Moon (Barcrest) (MPU4) (set 21) + + + m4overmn__u + Over The Moon (Barcrest) (MPU4) (set 22) + + + m4overmn__v + Over The Moon (Barcrest) (MPU4) (set 23) + + + m4overmn__w + Over The Moon (Barcrest) (MPU4) (set 24) + + + m4overmn__x + Over The Moon (Barcrest) (MPU4) (set 25) + + + m4overmn__y + Over The Moon (Barcrest) (MPU4) (set 26) + + + m4overmn__z + Over The Moon (Barcrest) (MPU4) (set 27) + + + m4paracl + Paradise Club (Crystal) (MPU4) (set 1) + + + m4paracla + Paradise Club (Crystal) (MPU4) (set 2) + + + m4pbnudg + Pinball Nudger (Empire) (MPU4, set 1) + + + m4pbnudga + Pinball Nudger (Empire) (MPU4, set 2) + + + m4pbnudgb + Pinball Nudger (Empire) (MPU4, set 3) + + + m4pick + Pick A Fruit (JPM) (MPU4) + + + m4pitfal + Pitfall (Empire) (MPU4, set 1) + + + m4pitfala + Pitfall (Empire) (MPU4, set 2) + + + m4pitfalb + Pitfall (Empire) (MPU4, set 3) + + + m4pitfalc + Pitfall (Empire) (MPU4, set 4) + + + m4placbt + Place Your Bets (Barcrest) (MPU4) (set 1) + + + m4placbt__0 + Place Your Bets (Barcrest) (MPU4) (set 28) + + + m4placbt__1 + Place Your Bets (Barcrest) (MPU4) (set 29) + + + m4placbt__2 + Place Your Bets (Barcrest) (MPU4) (set 30) + + + m4placbt__3 + Place Your Bets (Barcrest) (MPU4) (set 31) + + + m4placbt__4 + Place Your Bets (Barcrest) (MPU4) (set 32) + + + m4placbt__5 + Place Your Bets (Barcrest) (MPU4) (set 33) + + + m4placbt__6 + Place Your Bets (Barcrest) (MPU4) (set 34) + + + m4placbt__7 + Place Your Bets (Barcrest) (MPU4) (set 35) + + + m4placbt__8 + Place Your Bets (Barcrest) (MPU4) (set 36) + + + m4placbt__9 + Place Your Bets (Barcrest) (MPU4) (set 37) + + + m4placbt__a + Place Your Bets (Barcrest) (MPU4) (set 2) + + + m4placbt__aa + Place Your Bets (Barcrest) (MPU4) (set 38) + + + m4placbt__ab + Place Your Bets (Barcrest) (MPU4) (set 39) + + + m4placbt__ac + Place Your Bets (Barcrest) (MPU4) (set 40) + + + m4placbt__ad + Place Your Bets (Barcrest) (MPU4) (set 41) + + + m4placbt__ae + Place Your Bets (Barcrest) (MPU4) (set 42) + + + m4placbt__af + Place Your Bets (Barcrest) (MPU4) (set 43) + + + m4placbt__ag + Place Your Bets (Barcrest) (MPU4) (set 44) + + + m4placbt__ah + Place Your Bets (Barcrest) (MPU4) (set 45) + + + m4placbt__ai + Place Your Bets (Barcrest) (MPU4) (set 46) + + + m4placbt__aj + Place Your Bets (Barcrest) (MPU4) (set 47) + + + m4placbt__ak + Place Your Bets (Barcrest) (MPU4) (set 48) + + + m4placbt__al + Place Your Bets (Barcrest) (MPU4) (set 49) + + + m4placbt__am + Place Your Bets (Barcrest) (MPU4) (set 50) + + + m4placbt__an + Place Your Bets (Barcrest) (MPU4) (set 51) + + + m4placbt__ao + Place Your Bets (Barcrest) (MPU4) (set 52) + + + m4placbt__b + Place Your Bets (Barcrest) (MPU4) (set 3) + + + m4placbt__c + Place Your Bets (Barcrest) (MPU4) (set 4) + + + m4placbt__d + Place Your Bets (Barcrest) (MPU4) (set 5) + + + m4placbt__e + Place Your Bets (Barcrest) (MPU4) (set 6) + + + m4placbt__f + Place Your Bets (Barcrest) (MPU4) (set 7) + + + m4placbt__g + Place Your Bets (Barcrest) (MPU4) (set 8) + + + m4placbt__h + Place Your Bets (Barcrest) (MPU4) (set 9) + + + m4placbt__i + Place Your Bets (Barcrest) (MPU4) (set 10) + + + m4placbt__j + Place Your Bets (Barcrest) (MPU4) (set 11) + + + m4placbt__k + Place Your Bets (Barcrest) (MPU4) (set 12) + + + m4placbt__l + Place Your Bets (Barcrest) (MPU4) (set 13) + + + m4placbt__m + Place Your Bets (Barcrest) (MPU4) (set 14) + + + m4placbt__n + Place Your Bets (Barcrest) (MPU4) (set 15) + + + m4placbt__o + Place Your Bets (Barcrest) (MPU4) (set 16) + + + m4placbt__p + Place Your Bets (Barcrest) (MPU4) (set 17) + + + m4placbt__q + Place Your Bets (Barcrest) (MPU4) (set 18) + + + m4placbt__r + Place Your Bets (Barcrest) (MPU4) (set 19) + + + m4placbt__s + Place Your Bets (Barcrest) (MPU4) (set 20) + + + m4placbt__t + Place Your Bets (Barcrest) (MPU4) (set 21) + + + m4placbt__u + Place Your Bets (Barcrest) (MPU4) (set 22) + + + m4placbt__v + Place Your Bets (Barcrest) (MPU4) (set 23) + + + m4placbt__w + Place Your Bets (Barcrest) (MPU4) (set 24) + + + m4placbt__x + Place Your Bets (Barcrest) (MPU4) (set 25) + + + m4placbt__y + Place Your Bets (Barcrest) (MPU4) (set 26) + + + m4placbt__z + Place Your Bets (Barcrest) (MPU4) (set 27) + + + m4pont + Pontoon Club (Barcrest) (MPU4) (PON 3.0) + + + m4ponta + Pontoon Club (Barcrest) (MPU4) (PON 4.0) + + + m4potblk + Pot Black (Barcrest) (MPU4) (set 1) + + + m4potblk__0 + Pot Black (Barcrest) (MPU4) (set 28) + + + m4potblk__1 + Pot Black (Barcrest) (MPU4) (set 29) + + + m4potblk__2 + Pot Black (Barcrest) (MPU4) (set 30) + + + m4potblk__3 + Pot Black (Barcrest) (MPU4) (set 31) + + + m4potblk__4 + Pot Black (Barcrest) (MPU4) (set 32) + + + m4potblk__5 + Pot Black (Barcrest) (MPU4) (set 33) + + + m4potblk__6 + Pot Black (Barcrest) (MPU4) (set 34) + + + m4potblk__7 + Pot Black (Barcrest) (MPU4) (set 35) + + + m4potblk__8 + Pot Black (Barcrest) (MPU4) (set 36) + + + m4potblk__9 + Pot Black (Barcrest) (MPU4) (set 37) + + + m4potblk__a + Pot Black (Barcrest) (MPU4) (set 2) + + + m4potblk__aa + Pot Black (Barcrest) (MPU4) (set 38) + + + m4potblk__ab + Pot Black (Barcrest) (MPU4) (set 39) + + + m4potblk__ac + Pot Black (Barcrest) (MPU4) (set 40) + + + m4potblk__ad + Pot Black (Barcrest) (MPU4) (set 41) + + + m4potblk__ae + Pot Black (Barcrest) (MPU4) (set 42) + + + m4potblk__af + Pot Black (Barcrest) (MPU4) (set 43) + + + m4potblk__ag + Pot Black (Barcrest) (MPU4) (set 44) + + + m4potblk__ah + Pot Black (Barcrest) (MPU4) (set 45) + + + m4potblk__ai + Pot Black (Barcrest) (MPU4) (set 46) + + + m4potblk__aj + Pot Black (Barcrest) (MPU4) (set 47) + + + m4potblk__ak + Pot Black (Barcrest) (MPU4) (set 48) + + + m4potblk__al + Pot Black (Barcrest) (MPU4) (set 49) + + + m4potblk__am + Pot Black (Barcrest) (MPU4) (set 50) + + + m4potblk__an + Pot Black (Barcrest) (MPU4) (set 51) + + + m4potblk__ao + Pot Black (Barcrest) (MPU4) (set 52) + + + m4potblk__ap + Pot Black (Barcrest) (MPU4) (set 53) + + + m4potblk__aq + Pot Black (Barcrest) (MPU4) (set 54) + + + m4potblk__ar + Pot Black (Barcrest) (MPU4) (set 55) + + + m4potblk__as + Pot Black (Barcrest) (MPU4) (set 56) + + + m4potblk__at + Pot Black (Barcrest) (MPU4) (set 57) + + + m4potblk__au + Pot Black (Barcrest) (MPU4) (set 58) + + + m4potblk__av + Pot Black (Barcrest) (MPU4) (set 59) + + + m4potblk__aw + Pot Black (Barcrest) (MPU4) (set 60) + + + m4potblk__ax + Pot Black (Barcrest) (MPU4) (set 61) + + + m4potblk__b + Pot Black (Barcrest) (MPU4) (set 3) + + + m4potblk__c + Pot Black (Barcrest) (MPU4) (set 4) + + + m4potblk__d + Pot Black (Barcrest) (MPU4) (set 5) + + + m4potblk__e + Pot Black (Barcrest) (MPU4) (set 6) + + + m4potblk__f + Pot Black (Barcrest) (MPU4) (set 7) + + + m4potblk__g + Pot Black (Barcrest) (MPU4) (set 8) + + + m4potblk__h + Pot Black (Barcrest) (MPU4) (set 9) + + + m4potblk__i + Pot Black (Barcrest) (MPU4) (set 10) + + + m4potblk__j + Pot Black (Barcrest) (MPU4) (set 11) + + + m4potblk__k + Pot Black (Barcrest) (MPU4) (set 12) + + + m4potblk__l + Pot Black (Barcrest) (MPU4) (set 13) + + + m4potblk__m + Pot Black (Barcrest) (MPU4) (set 14) + + + m4potblk__n + Pot Black (Barcrest) (MPU4) (set 15) + + + m4potblk__o + Pot Black (Barcrest) (MPU4) (set 16) + + + m4potblk__p + Pot Black (Barcrest) (MPU4) (set 17) + + + m4potblk__q + Pot Black (Barcrest) (MPU4) (set 18) + + + m4potblk__r + Pot Black (Barcrest) (MPU4) (set 19) + + + m4potblk__s + Pot Black (Barcrest) (MPU4) (set 20) + + + m4potblk__t + Pot Black (Barcrest) (MPU4) (set 21) + + + m4potblk__u + Pot Black (Barcrest) (MPU4) (set 22) + + + m4potblk__v + Pot Black (Barcrest) (MPU4) (set 23) + + + m4potblk__w + Pot Black (Barcrest) (MPU4) (set 24) + + + m4potblk__x + Pot Black (Barcrest) (MPU4) (set 25) + + + m4potblk__y + Pot Black (Barcrest) (MPU4) (set 26) + + + m4potblk__z + Pot Black (Barcrest) (MPU4) (set 27) + + + m4potlck + Pot Luck 100 Club (Barcrest) (MPU4) (P1L 2.2) + + + m4potlcka + Pot Luck 100 Club (Barcrest) (MPU4) (PL 2.7) + + + m4prem + Premier (Barcrest) (MPU4) (DPM) + + + m4przdty + Prize Duty Free (Barcrest) (MPU4) (set 1) + + + m4przdty__a + Prize Duty Free (Barcrest) (MPU4) (set 2) + + + m4przdty__b + Prize Duty Free (Barcrest) (MPU4) (set 3) + + + m4przdty__c + Prize Duty Free (Barcrest) (MPU4) (set 4) + + + m4przdty__d + Prize Duty Free (Barcrest) (MPU4) (set 5) + + + m4przdty__e + Prize Duty Free (Barcrest) (MPU4) (set 6) + + + m4przdty__f + Prize Duty Free (Barcrest) (MPU4) (set 7) + + + m4przdty__g + Prize Duty Free (Barcrest) (MPU4) (set 8) + + + m4przdty__h + Prize Duty Free (Barcrest) (MPU4) (set 9) + + + m4przdty__i + Prize Duty Free (Barcrest) (MPU4) (set 10) + + + m4przdty__j + Prize Duty Free (Barcrest) (MPU4) (set 11) + + + m4przdty__k + Prize Duty Free (Barcrest) (MPU4) (set 12) + + + m4przdty__l + Prize Duty Free (Barcrest) (MPU4) (set 13) + + + m4przdty__m + Prize Duty Free (Barcrest) (MPU4) (set 14) + + + m4przdty__n + Prize Duty Free (Barcrest) (MPU4) (set 15) + + + m4przdty__o + Prize Duty Free (Barcrest) (MPU4) (set 16) + + + m4przdty__p + Prize Duty Free (Barcrest) (MPU4) (set 17) + + + m4przfrt + Prize Fruit & Loot (Barcrest) (MPU4) (set 1) + + + m4przfrt__a + Prize Fruit & Loot (Barcrest) (MPU4) (set 2) + + + m4przfrt__b + Prize Fruit & Loot (Barcrest) (MPU4) (set 3) + + + m4przfrt__c + Prize Fruit & Loot (Barcrest) (MPU4) (set 4) + + + m4przfrt__d + Prize Fruit & Loot (Barcrest) (MPU4) (set 5) + + + m4przfrt__e + Prize Fruit & Loot (Barcrest) (MPU4) (set 6) + + + m4przfrt__f + Prize Fruit & Loot (Barcrest) (MPU4) (set 7) + + + m4przfrt__g + Prize Fruit & Loot (Barcrest) (MPU4) (set 8) + + + m4przfrt__h + Prize Fruit & Loot (Barcrest) (MPU4) (set 9) + + + m4przfrt__i + Prize Fruit & Loot (Barcrest) (MPU4) (set 10) + + + m4przfrt__j + Prize Fruit & Loot (Barcrest) (MPU4) (set 11) + + + m4przfrt__k + Prize Fruit & Loot (Barcrest) (MPU4) (set 12) + + + m4przfrt__l + Prize Fruit & Loot (Barcrest) (MPU4) (set 13) + + + m4przhr + Prize High Roller (Barcrest) (MPU4) (set 1) + + + m4przhr__a + Prize High Roller (Barcrest) (MPU4) (set 2) + + + m4przhr__b + Prize High Roller (Barcrest) (MPU4) (set 3) + + + m4przhr__c + Prize High Roller (Barcrest) (MPU4) (set 4) + + + m4przhr__d + Prize High Roller (Barcrest) (MPU4) (set 5) + + + m4przhr__e + Prize High Roller (Barcrest) (MPU4) (set 6) + + + m4przhr__f + Prize High Roller (Barcrest) (MPU4) (set 7) + + + m4przhr__g + Prize High Roller (Barcrest) (MPU4) (set 8) + + + m4przhr__h + Prize High Roller (Barcrest) (MPU4) (set 9) + + + m4przhr__i + Prize High Roller (Barcrest) (MPU4) (set 10) + + + m4przhr__j + Prize High Roller (Barcrest) (MPU4) (set 11) + + + m4przhr__k + Prize High Roller (Barcrest) (MPU4) (set 12) + + + m4przhr__l + Prize High Roller (Barcrest) (MPU4) (set 13) + + + m4przhr__m + Prize High Roller (Barcrest) (MPU4) (set 14) + + + m4przhr__n + Prize High Roller (Barcrest) (MPU4) (set 15) + + + m4przhr__o + Prize High Roller (Barcrest) (MPU4) (set 16) + + + m4przhr__p + Prize High Roller (Barcrest) (MPU4) (set 17) + + + m4przlux + Prize Luxor (Barcrest) (MPU4) (set 1) + + + m4przlux__a + Prize Luxor (Barcrest) (MPU4) (set 2) + + + m4przlux__b + Prize Luxor (Barcrest) (MPU4) (set 3) + + + m4przlux__c + Prize Luxor (Barcrest) (MPU4) (set 4) + + + m4przlux__d + Prize Luxor (Barcrest) (MPU4) (set 5) + + + m4przlux__e + Prize Luxor (Barcrest) (MPU4) (set 6) + + + m4przlux__f + Prize Luxor (Barcrest) (MPU4) (set 7) + + + m4przmc + Prize Monte Carlo (Barcrest) (MPU4) (set 1) + + + m4przmc__a + Prize Monte Carlo (Barcrest) (MPU4) (set 2) + + + m4przmc__b + Prize Monte Carlo (Barcrest) (MPU4) (set 3) + + + m4przmc__c + Prize Monte Carlo (Barcrest) (MPU4) (set 4) + + + m4przmc__d + Prize Monte Carlo (Barcrest) (MPU4) (set 5) + + + m4przmc__e + Prize Monte Carlo (Barcrest) (MPU4) (set 6) + + + m4przmc__f + Prize Monte Carlo (Barcrest) (MPU4) (set 7) + + + m4przmns + Prize Money Showcase (Barcrest) (MPU4) (set 1) + + + m4przmns__a + Prize Money Showcase (Barcrest) (MPU4) (set 2) + + + m4przmns__b + Prize Money Showcase (Barcrest) (MPU4) (set 3) + + + m4przmns__c + Prize Money Showcase (Barcrest) (MPU4) (set 4) + + + m4przmns__d + Prize Money Showcase (Barcrest) (MPU4) (set 5) + + + m4przmns__e + Prize Money Showcase (Barcrest) (MPU4) (set 6) + + + m4przmns__f + Prize Money Showcase (Barcrest) (MPU4) (set 7) + + + m4przmns__g + Prize Money Showcase (Barcrest) (MPU4) (set 8) + + + m4przmns__h + Prize Money Showcase (Barcrest) (MPU4) (set 9) + + + m4przmns__i + Prize Money Showcase (Barcrest) (MPU4) (set 10) + + + m4przmns__j + Prize Money Showcase (Barcrest) (MPU4) (set 11) + + + m4przmns__k + Prize Money Showcase (Barcrest) (MPU4) (set 12) + + + m4przmns__l + Prize Money Showcase (Barcrest) (MPU4) (set 13) + + + m4przmns__m + Prize Money Showcase (Barcrest) (MPU4) (set 14) + + + m4przmns__n + Prize Money Showcase (Barcrest) (MPU4) (set 15) + + + m4przmon + Prize Money (Barcrest) (MPU4) (set 1) + + + m4przmon__0 + Prize Money (Barcrest) (MPU4) (set 28) + + + m4przmon__1 + Prize Money (Barcrest) (MPU4) (set 29) + + + m4przmon__a + Prize Money (Barcrest) (MPU4) (set 2) + + + m4przmon__b + Prize Money (Barcrest) (MPU4) (set 3) + + + m4przmon__c + Prize Money (Barcrest) (MPU4) (set 4) + + + m4przmon__d + Prize Money (Barcrest) (MPU4) (set 5) + + + m4przmon__e + Prize Money (Barcrest) (MPU4) (set 6) + + + m4przmon__f + Prize Money (Barcrest) (MPU4) (set 7) + + + m4przmon__g + Prize Money (Barcrest) (MPU4) (set 8) + + + m4przmon__h + Prize Money (Barcrest) (MPU4) (set 9) + + + m4przmon__i + Prize Money (Barcrest) (MPU4) (set 10) + + + m4przmon__j + Prize Money (Barcrest) (MPU4) (set 11) + + + m4przmon__k + Prize Money (Barcrest) (MPU4) (set 12) + + + m4przmon__l + Prize Money (Barcrest) (MPU4) (set 13) + + + m4przmon__m + Prize Money (Barcrest) (MPU4) (set 14) + + + m4przmon__n + Prize Money (Barcrest) (MPU4) (set 15) + + + m4przmon__o + Prize Money (Barcrest) (MPU4) (set 16) + + + m4przmon__p + Prize Money (Barcrest) (MPU4) (set 17) + + + m4przmon__q + Prize Money (Barcrest) (MPU4) (set 18) + + + m4przmon__r + Prize Money (Barcrest) (MPU4) (set 19) + + + m4przmon__s + Prize Money (Barcrest) (MPU4) (set 20) + + + m4przmon__t + Prize Money (Barcrest) (MPU4) (set 21) + + + m4przmon__u + Prize Money (Barcrest) (MPU4) (set 22) + + + m4przmon__v + Prize Money (Barcrest) (MPU4) (set 23) + + + m4przmon__w + Prize Money (Barcrest) (MPU4) (set 24) + + + m4przmon__x + Prize Money (Barcrest) (MPU4) (set 25) + + + m4przmon__y + Prize Money (Barcrest) (MPU4) (set 26) + + + m4przmon__z + Prize Money (Barcrest) (MPU4) (set 27) + + + m4przrf + Prize Rich And Famous (Barcrest) (MPU4) (set 1) + + + m4przrf__a + Prize Rich And Famous (Barcrest) (MPU4) (set 2) + + + m4przrf__b + Prize Rich And Famous (Barcrest) (MPU4) (set 3) + + + m4przrf__c + Prize Rich And Famous (Barcrest) (MPU4) (set 4) + + + m4przrf__d + Prize Rich And Famous (Barcrest) (MPU4) (set 5) + + + m4przrf__e + Prize Rich And Famous (Barcrest) (MPU4) (set 6) + + + m4przrf__f + Prize Rich And Famous (Barcrest) (MPU4) (set 7) + + + m4przrf__g + Prize Rich And Famous (Barcrest) (MPU4) (set 8) + + + m4przrf__h + Prize Rich And Famous (Barcrest) (MPU4) (set 9) + + + m4przrf__i + Prize Rich And Famous (Barcrest) (MPU4) (set 10) + + + m4przrf__j + Prize Rich And Famous (Barcrest) (MPU4) (set 11) + + + m4przrfm + Prize Run For Your Money (Barcrest) (MPU4) (set 1) + + + m4przrfm__a + Prize Run For Your Money (Barcrest) (MPU4) (set 2) + + + m4przrfm__b + Prize Run For Your Money (Barcrest) (MPU4) (set 3) + + + m4przrfm__c + Prize Run For Your Money (Barcrest) (MPU4) (set 4) + + + m4przrfm__d + Prize Run For Your Money (Barcrest) (MPU4) (set 5) + + + m4przrfm__e + Prize Run For Your Money (Barcrest) (MPU4) (set 6) + + + m4przrfm__f + Prize Run For Your Money (Barcrest) (MPU4) (set 7) + + + m4przrfm__g + Prize Run For Your Money (Barcrest) (MPU4) (set 8) + + + m4przrfm__h + Prize Run For Your Money (Barcrest) (MPU4) (set 9) + + + m4przrfm__i + Prize Run For Your Money (Barcrest) (MPU4) (set 10) + + + m4przrfm__j + Prize Run For Your Money (Barcrest) (MPU4) (set 11) + + + m4przrfm__k + Prize Run For Your Money (Barcrest) (MPU4) (set 12) + + + m4przrfm__l + Prize Run For Your Money (Barcrest) (MPU4) (set 13) + + + m4przrfm__m + Prize Run For Your Money (Barcrest) (MPU4) (set 14) + + + m4przrfm__n + Prize Run For Your Money (Barcrest) (MPU4) (set 15) + + + m4przrfm__o + Prize Run For Your Money (Barcrest) (MPU4) (set 16) + + + m4przsss + Prize Spend Spend Spend (Barcrest) (MPU4) (set 1) + + + m4przsss__0 + Prize Spend Spend Spend (Barcrest) (MPU4) (set 28) + + + m4przsss__a + Prize Spend Spend Spend (Barcrest) (MPU4) (set 2) + + + m4przsss__b + Prize Spend Spend Spend (Barcrest) (MPU4) (set 3) + + + m4przsss__c + Prize Spend Spend Spend (Barcrest) (MPU4) (set 4) + + + m4przsss__d + Prize Spend Spend Spend (Barcrest) (MPU4) (set 5) + + + m4przsss__e + Prize Spend Spend Spend (Barcrest) (MPU4) (set 6) + + + m4przsss__f + Prize Spend Spend Spend (Barcrest) (MPU4) (set 7) + + + m4przsss__g + Prize Spend Spend Spend (Barcrest) (MPU4) (set 8) + + + m4przsss__h + Prize Spend Spend Spend (Barcrest) (MPU4) (set 9) + + + m4przsss__i + Prize Spend Spend Spend (Barcrest) (MPU4) (set 10) + + + m4przsss__j + Prize Spend Spend Spend (Barcrest) (MPU4) (set 11) + + + m4przsss__k + Prize Spend Spend Spend (Barcrest) (MPU4) (set 12) + + + m4przsss__l + Prize Spend Spend Spend (Barcrest) (MPU4) (set 13) + + + m4przsss__m + Prize Spend Spend Spend (Barcrest) (MPU4) (set 14) + + + m4przsss__n + Prize Spend Spend Spend (Barcrest) (MPU4) (set 15) + + + m4przsss__o + Prize Spend Spend Spend (Barcrest) (MPU4) (set 16) + + + m4przsss__p + Prize Spend Spend Spend (Barcrest) (MPU4) (set 17) + + + m4przsss__q + Prize Spend Spend Spend (Barcrest) (MPU4) (set 18) + + + m4przsss__r + Prize Spend Spend Spend (Barcrest) (MPU4) (set 19) + + + m4przsss__s + Prize Spend Spend Spend (Barcrest) (MPU4) (set 20) + + + m4przsss__t + Prize Spend Spend Spend (Barcrest) (MPU4) (set 21) + + + m4przsss__u + Prize Spend Spend Spend (Barcrest) (MPU4) (set 22) + + + m4przsss__v + Prize Spend Spend Spend (Barcrest) (MPU4) (set 23) + + + m4przsss__w + Prize Spend Spend Spend (Barcrest) (MPU4) (set 24) + + + m4przsss__x + Prize Spend Spend Spend (Barcrest) (MPU4) (set 25) + + + m4przsss__y + Prize Spend Spend Spend (Barcrest) (MPU4) (set 26) + + + m4przsss__z + Prize Spend Spend Spend (Barcrest) (MPU4) (set 27) + + + m4przve + Prize Viva Esapana (Barcrest) (MPU4) (set 1) + + + m4przve__a + Prize Viva Esapana (Barcrest) (MPU4) (set 2) + + + m4przve__b + Prize Viva Esapana (Barcrest) (MPU4) (set 3) + + + m4przve__c + Prize Viva Esapana (Barcrest) (MPU4) (set 4) + + + m4przve__d + Prize Viva Esapana (Barcrest) (MPU4) (set 5) + + + m4przve__e + Prize Viva Esapana (Barcrest) (MPU4) (set 6) + + + m4przve__f + Prize Viva Esapana (Barcrest) (MPU4) (set 7) + + + m4przve__g + Prize Viva Esapana (Barcrest) (MPU4) (set 8) + + + m4przve__h + Prize Viva Esapana (Barcrest) (MPU4) (set 9) + + + m4przve__i + Prize Viva Esapana (Barcrest) (MPU4) (set 10) + + + m4przve__j + Prize Viva Esapana (Barcrest) (MPU4) (set 11) + + + m4przve__k + Prize Viva Esapana (Barcrest) (MPU4) (set 12) + + + m4przve__l + Prize Viva Esapana (Barcrest) (MPU4) (set 13) + + + m4przve__m + Prize Viva Esapana (Barcrest) (MPU4) (set 14) + + + m4przve__n + Prize Viva Esapana (Barcrest) (MPU4) (set 15) + + + m4przve__o + Prize Viva Esapana (Barcrest) (MPU4) (set 16) + + + m4przve__p + Prize Viva Esapana (Barcrest) (MPU4) (set 17) + + + m4przwo + Prize What's On (Barcrest) (MPU4) (set 1) + + + m4przwo__a + Prize What's On (Barcrest) (MPU4) (set 2) + + + m4przwo__b + Prize What's On (Barcrest) (MPU4) (set 3) + + + m4przwo__c + Prize What's On (Barcrest) (MPU4) (set 4) + + + m4przwo__d + Prize What's On (Barcrest) (MPU4) (set 5) + + + m4przwo__e + Prize What's On (Barcrest) (MPU4) (set 6) + + + m4przwo__f + Prize What's On (Barcrest) (MPU4) (set 7) + + + m4przwta + Prize Winner Takes All (Barcrest) (MPU4) (set 1) + + + m4przwta__a + Prize Winner Takes All (Barcrest) (MPU4) (set 2) + + + m4przwta__b + Prize Winner Takes All (Barcrest) (MPU4) (set 3) + + + m4przwta__c + Prize Winner Takes All (Barcrest) (MPU4) (set 4) + + + m4przwta__d + Prize Winner Takes All (Barcrest) (MPU4) (set 5) + + + m4przwta__e + Prize Winner Takes All (Barcrest) (MPU4) (set 6) + + + m4przwta__f + Prize Winner Takes All (Barcrest) (MPU4) (set 7) + + + m4przwta__g + Prize Winner Takes All (Barcrest) (MPU4) (set 8) + + + m4przwta__h + Prize Winner Takes All (Barcrest) (MPU4) (set 9) + + + m4przwta__i + Prize Winner Takes All (Barcrest) (MPU4) (set 10) + + + m4przwta__j + Prize Winner Takes All (Barcrest) (MPU4) (set 11) + + + m4przwta__k + Prize Winner Takes All (Barcrest) (MPU4) (set 12) + + + m4przwta__l + Prize Winner Takes All (Barcrest) (MPU4) (set 13) + + + m4przwta__m + Prize Winner Takes All (Barcrest) (MPU4) (set 14) + + + m4przwta__n + Prize Winner Takes All (Barcrest) (MPU4) (set 15) + + + m4przwta__o + Prize Winner Takes All (Barcrest) (MPU4) (set 16) + + + m4przwta__p + Prize Winner Takes All (Barcrest) (MPU4) (set 17) + + + m4ptblkc + Pot Black Casino (Bwb - Barcrest) (MPU4) + + + m4pulwnc + Pull-A-Win (Concept Games Ltd) (MPU4) (set 1) + + + m4pulwnc__0 + Pull-A-Win (Concept Games Ltd) (MPU4) (set 28) + + + m4pulwnc__1 + Pull-A-Win (Concept Games Ltd) (MPU4) (set 29) + + + m4pulwnc__2 + Pull-A-Win (Concept Games Ltd) (MPU4) (set 30) + + + m4pulwnc__3 + Pull-A-Win (Concept Games Ltd) (MPU4) (set 31) + + + m4pulwnc__4 + Pull-A-Win (Concept Games Ltd) (MPU4) (set 32) + + + m4pulwnc__a + Pull-A-Win (Concept Games Ltd) (MPU4) (set 2) + + + m4pulwnc__b + Pull-A-Win (Concept Games Ltd) (MPU4) (set 3) + + + m4pulwnc__c + Pull-A-Win (Concept Games Ltd) (MPU4) (set 4) + + + m4pulwnc__d + Pull-A-Win (Concept Games Ltd) (MPU4) (set 5) + + + m4pulwnc__e + Pull-A-Win (Concept Games Ltd) (MPU4) (set 6) + + + m4pulwnc__f + Pull-A-Win (Concept Games Ltd) (MPU4) (set 7) + + + m4pulwnc__g + Pull-A-Win (Concept Games Ltd) (MPU4) (set 8) + + + m4pulwnc__h + Pull-A-Win (Concept Games Ltd) (MPU4) (set 9) + + + m4pulwnc__i + Pull-A-Win (Concept Games Ltd) (MPU4) (set 10) + + + m4pulwnc__j + Pull-A-Win (Concept Games Ltd) (MPU4) (set 11) + + + m4pulwnc__k + Pull-A-Win (Concept Games Ltd) (MPU4) (set 12) + + + m4pulwnc__l + Pull-A-Win (Concept Games Ltd) (MPU4) (set 13) + + + m4pulwnc__m + Pull-A-Win (Concept Games Ltd) (MPU4) (set 14) + + + m4pulwnc__n + Pull-A-Win (Concept Games Ltd) (MPU4) (set 15) + + + m4pulwnc__o + Pull-A-Win (Concept Games Ltd) (MPU4) (set 16) + + + m4pulwnc__p + Pull-A-Win (Concept Games Ltd) (MPU4) (set 17) + + + m4pulwnc__q + Pull-A-Win (Concept Games Ltd) (MPU4) (set 18) + + + m4pulwnc__r + Pull-A-Win (Concept Games Ltd) (MPU4) (set 19) + + + m4pulwnc__s + Pull-A-Win (Concept Games Ltd) (MPU4) (set 20) + + + m4pulwnc__t + Pull-A-Win (Concept Games Ltd) (MPU4) (set 21) + + + m4pulwnc__u + Pull-A-Win (Concept Games Ltd) (MPU4) (set 22) + + + m4pulwnc__v + Pull-A-Win (Concept Games Ltd) (MPU4) (set 23) + + + m4pulwnc__w + Pull-A-Win (Concept Games Ltd) (MPU4) (set 24) + + + m4pulwnc__x + Pull-A-Win (Concept Games Ltd) (MPU4) (set 25) + + + m4pulwnc__y + Pull-A-Win (Concept Games Ltd) (MPU4) (set 26) + + + m4pulwnc__z + Pull-A-Win (Concept Games Ltd) (MPU4) (set 27) + + + m4purmad + Pure Madness (Union) + + + m4pzbing + Prize Bingo (Bwb) (MPU4) (set 1) + + + m4pzbing__a + Prize Bingo (Bwb) (MPU4) (set 2) + + + m4pzbing__b + Prize Bingo (Bwb) (MPU4) (set 3) + + + m4pzbing__c + Prize Bingo (Bwb) (MPU4) (set 4) + + + m4pzbing__d + Prize Bingo (Bwb) (MPU4) (set 5) + + + m4pzbing__e + Prize Bingo (Bwb) (MPU4) (set 6) + + + m4quidin + Quids In (Bwb) (MPU4) (set 1) + + + m4quidin__a + Quids In (Bwb) (MPU4) (set 2) + + + m4quidin__b + Quids In (Bwb) (MPU4) (set 3) + + + m4quidis + Quids In Showcase (Bwb) (MPU4) (set 1) + + + m4quidis__a + Quids In Showcase (Bwb) (MPU4) (set 2) + + + m4quidis__b + Quids In Showcase (Bwb) (MPU4) (set 3) + + + m4quidis__c + Quids In Showcase (Bwb) (MPU4) (set 4) + + + m4quidis__d + Quids In Showcase (Bwb) (MPU4) (set 5) + + + m4r2r + Reel 2 Reel (Barcrest) (MPU4) + + + m4ra + Red Alert (Barcrest) (MPU4) (set 1) + + + m4ra__a + Red Alert (Barcrest) (MPU4) (set 2) + + + m4ra__b + Red Alert (Barcrest) (MPU4) (set 3) + + + m4ra__c + Red Alert (Barcrest) (MPU4) (set 4) + + + m4ra__d + Red Alert (Barcrest) (MPU4) (set 5) + + + m4ra__e + Red Alert (Barcrest) (MPU4) (set 6) + + + m4ra__f + Red Alert (Barcrest) (MPU4) (set 7) + + + m4ra__g + Red Alert (Barcrest) (MPU4) (set 8) + + + m4ra__h + Red Alert (Barcrest) (MPU4) (set 9) + + + m4ra__i + Red Alert (Barcrest) (MPU4) (set 10) + + + m4ra__j + Red Alert (Barcrest) (MPU4) (set 11) + + + m4ra__k + Red Alert (Barcrest) (MPU4) (set 12) + + + m4ra__l + Red Alert (Barcrest) (MPU4) (set 13) + + + m4ra__m + Red Alert (Barcrest) (MPU4) (set 14) + + + m4ra__n + Red Alert (Barcrest) (MPU4) (set 15) + + + m4ra__o + Red Alert (Barcrest) (MPU4) (set 16) + + + m4ra__p + Red Alert (Barcrest) (MPU4) (set 17) + + + m4ra__q + Red Alert (Barcrest) (MPU4) (set 18) + + + m4ra__r + Red Alert (Barcrest) (MPU4) (set 19) + + + m4rackem + Rack Em Up (Bwb) (MPU4) (set 1) + + + m4rackem__a + Rack Em Up (Bwb) (MPU4) (set 2) + + + m4rackem__b + Rack Em Up (Bwb) (MPU4) (set 3) + + + m4rackem__c + Rack Em Up (Bwb) (MPU4) (set 4) + + + m4rackem__d + Rack Em Up (Bwb) (MPU4) (set 5) + + + m4rags + Rags To Riches Club (Crystal) (MPU4) (set 1) + + + m4ragsa + Rags To Riches Club (Crystal) (MPU4) (set 2) + + + m4ragsb + Rags To Riches Club (Crystal) (MPU4) (set 3) + + + m4ragsc + Rags To Riches Club (Crystal) (MPU4) (set 4) + + + m4randr + Random Roulette (Barcrest) (Dutch) (MPU4) + + + m4rbgold + Rainbow Gold (Bwb) (MPU4) (set 1) + + + m4rbgold__a + Rainbow Gold (Bwb) (MPU4) (set 2) + + + m4rbgold__b + Rainbow Gold (Bwb) (MPU4) (set 3) + + + m4rbgold__c + Rainbow Gold (Bwb) (MPU4) (set 4) + + + m4rbgold__d + Rainbow Gold (Bwb) (MPU4) (set 5) + + + m4rbgold__e + Rainbow Gold (Bwb) (MPU4) (set 6) + + + m4rbgold__f + Rainbow Gold (Bwb) (MPU4) (set 7) + + + m4rbgold__g + Rainbow Gold (Bwb) (MPU4) (set 8) + + + m4rbgold__h + Rainbow Gold (Bwb) (MPU4) (set 9) + + + m4rbgold__i + Rainbow Gold (Bwb) (MPU4) (set 10) + + + m4rbgold__j + Rainbow Gold (Bwb) (MPU4) (set 11) + + + m4rbgold__k + Rainbow Gold (Bwb) (MPU4) (set 12) + + + m4rbgold__l + Rainbow Gold (Bwb) (MPU4) (set 13) + + + m4rbgold__m + Rainbow Gold (Bwb) (MPU4) (set 14) + + + m4rbgold__n + Rainbow Gold (Bwb) (MPU4) (set 15) + + + m4rbgold__o + Rainbow Gold (Bwb) (MPU4) (set 16) + + + m4rbgold__p + Rainbow Gold (Bwb) (MPU4) (set 17) + + + m4rbgold__q + Rainbow Gold (Bwb) (MPU4) (set 18) + + + m4rckrol + Rock 'n' Roll (Union - Empire) (MPU4, set 1) + + + m4rckrola + Rock 'n' Roll (Union - Empire) (MPU4, set 2) + + + m4rckrolb + Rock 'n' Roll (Union - Empire) (MPU4, set 3) + + + m4rdeal + Reel Deal (Qps) (MPU4) (set 1) + + + m4rdeal__a + Reel Deal (Qps) (MPU4) (set 2) + + + m4rdeal__b + Reel Deal (Qps) (MPU4) (set 3) + + + m4rdeal__c + Reel Deal (Qps) (MPU4) (set 4) + + + m4rdeal__d + Reel Deal (Qps) (MPU4) (set 5) + + + m4rdeal__e + Reel Deal (Qps) (MPU4) (set 6) + + + m4rdeal__f + Reel Deal (Qps) (MPU4) (set 7) + + + m4rdeal__g + Reel Deal (Qps) (MPU4) (set 8) + + + m4rdeal__h + Reel Deal (Qps) (MPU4) (set 9) + + + m4rdeal__i + Reel Deal (Qps) (MPU4) (set 10) + + + m4rdht + Red Heat (Golden Nugget?) (Barcrest) (MPU4) (DRH 1.2) + + + m4ready + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 1) + + + m4ready__0 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 28) + + + m4ready__1 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 29) + + + m4ready__2 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 30) + + + m4ready__3 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 31) + + + m4ready__4 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 32) + + + m4ready__5 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 33) + + + m4ready__6 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 34) + + + m4ready__7 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 35) + + + m4ready__8 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 36) + + + m4ready__9 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 37) + + + m4ready__a + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 2) + + + m4ready__a0 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 64) + + + m4ready__a1 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 65) + + + m4ready__a2 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 66) + + + m4ready__a3 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 67) + + + m4ready__a4 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 68) + + + m4ready__a5 + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 69) + + + m4ready__aa + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 38) + + + m4ready__ab + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 39) + + + m4ready__ac + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 40) + + + m4ready__ad + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 41) + + + m4ready__ae + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 42) + + + m4ready__af + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 43) + + + m4ready__ag + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 44) + + + m4ready__ah + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 45) + + + m4ready__ai + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 46) + + + m4ready__aj + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 47) + + + m4ready__ak + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 48) + + + m4ready__al + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 49) + + + m4ready__am + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 50) + + + m4ready__an + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 51) + + + m4ready__ao + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 52) + + + m4ready__ap + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 53) + + + m4ready__aq + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 54) + + + m4ready__ar + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 55) + + + m4ready__as + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 56) + + + m4ready__at + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 57) + + + m4ready__au + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 58) + + + m4ready__av + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 59) + + + m4ready__aw + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 60) + + + m4ready__ax + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 61) + + + m4ready__ay + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 62) + + + m4ready__az + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 63) + + + m4ready__b + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 3) + + + m4ready__c + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 4) + + + m4ready__d + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 5) + + + m4ready__e + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 6) + + + m4ready__f + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 7) + + + m4ready__g + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 8) + + + m4ready__h + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 9) + + + m4ready__i + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 10) + + + m4ready__j + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 11) + + + m4ready__k + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 12) + + + m4ready__l + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 13) + + + m4ready__m + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 14) + + + m4ready__n + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 15) + + + m4ready__o + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 16) + + + m4ready__p + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 17) + + + m4ready__q + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 18) + + + m4ready__r + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 19) + + + m4ready__s + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 20) + + + m4ready__t + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 21) + + + m4ready__u + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 22) + + + m4ready__v + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 23) + + + m4ready__w + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 24) + + + m4ready__x + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 25) + + + m4ready__y + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 26) + + + m4ready__z + Ready Steady Go (Barcrest) (type 2) (MPU4) (set 27) + + + m4reelpk + Reel Poker (Barcrest) (MPU4) + + + m4reeltm + Reel Timer (Barcrest) (MPU4) (DWT) + + + m4remag + unknown MPU4 'ZTP 0.7' (MPU4?) + + + m4revolv + Revolva (Union) (MPU4) + + + m4rfym + Run For Your Money (Barcrest) (MPU4) (set 1) + + + m4rfym__0 + Run For Your Money (Barcrest) (MPU4) (set 28) + + + m4rfym__1 + Run For Your Money (Barcrest) (MPU4) (set 29) + + + m4rfym__2 + Run For Your Money (Barcrest) (MPU4) (set 30) + + + m4rfym__3 + Run For Your Money (Barcrest) (MPU4) (set 31) + + + m4rfym__4 + Run For Your Money (Barcrest) (MPU4) (set 32) + + + m4rfym__5 + Run For Your Money (Barcrest) (MPU4) (set 33) + + + m4rfym__6 + Run For Your Money (Barcrest) (MPU4) (set 34) + + + m4rfym__7 + Run For Your Money (Barcrest) (MPU4) (set 35) + + + m4rfym__8 + Run For Your Money (Barcrest) (MPU4) (set 36) + + + m4rfym__9 + Run For Your Money (Barcrest) (MPU4) (set 37) + + + m4rfym__a + Run For Your Money (Barcrest) (MPU4) (set 2) + + + m4rfym__a0 + Run For Your Money (Barcrest) (MPU4) (set 64) + + + m4rfym__a1 + Run For Your Money (Barcrest) (MPU4) (set 65) + + + m4rfym__a2 + Run For Your Money (Barcrest) (MPU4) (set 66) + + + m4rfym__a3 + Run For Your Money (Barcrest) (MPU4) (set 67) + + + m4rfym__a4 + Run For Your Money (Barcrest) (MPU4) (set 68) + + + m4rfym__a5 + Run For Your Money (Barcrest) (MPU4) (set 69) + + + m4rfym__aa + Run For Your Money (Barcrest) (MPU4) (set 38) + + + m4rfym__ab + Run For Your Money (Barcrest) (MPU4) (set 39) + + + m4rfym__ac + Run For Your Money (Barcrest) (MPU4) (set 40) + + + m4rfym__ad + Run For Your Money (Barcrest) (MPU4) (set 41) + + + m4rfym__ae + Run For Your Money (Barcrest) (MPU4) (set 42) + + + m4rfym__af + Run For Your Money (Barcrest) (MPU4) (set 43) + + + m4rfym__ag + Run For Your Money (Barcrest) (MPU4) (set 44) + + + m4rfym__ah + Run For Your Money (Barcrest) (MPU4) (set 45) + + + m4rfym__ai + Run For Your Money (Barcrest) (MPU4) (set 46) + + + m4rfym__aj + Run For Your Money (Barcrest) (MPU4) (set 47) + + + m4rfym__ak + Run For Your Money (Barcrest) (MPU4) (set 48) + + + m4rfym__al + Run For Your Money (Barcrest) (MPU4) (set 49) + + + m4rfym__am + Run For Your Money (Barcrest) (MPU4) (set 50) + + + m4rfym__an + Run For Your Money (Barcrest) (MPU4) (set 51) + + + m4rfym__ao + Run For Your Money (Barcrest) (MPU4) (set 52) + + + m4rfym__ap + Run For Your Money (Barcrest) (MPU4) (set 53) + + + m4rfym__aq + Run For Your Money (Barcrest) (MPU4) (set 54) + + + m4rfym__ar + Run For Your Money (Barcrest) (MPU4) (set 55) + + + m4rfym__as + Run For Your Money (Barcrest) (MPU4) (set 56) + + + m4rfym__at + Run For Your Money (Barcrest) (MPU4) (set 57) + + + m4rfym__au + Run For Your Money (Barcrest) (MPU4) (set 58) + + + m4rfym__av + Run For Your Money (Barcrest) (MPU4) (set 59) + + + m4rfym__aw + Run For Your Money (Barcrest) (MPU4) (set 60) + + + m4rfym__ax + Run For Your Money (Barcrest) (MPU4) (set 61) + + + m4rfym__ay + Run For Your Money (Barcrest) (MPU4) (set 62) + + + m4rfym__az + Run For Your Money (Barcrest) (MPU4) (set 63) + + + m4rfym__b + Run For Your Money (Barcrest) (MPU4) (set 3) + + + m4rfym__c + Run For Your Money (Barcrest) (MPU4) (set 4) + + + m4rfym__d + Run For Your Money (Barcrest) (MPU4) (set 5) + + + m4rfym__e + Run For Your Money (Barcrest) (MPU4) (set 6) + + + m4rfym__f + Run For Your Money (Barcrest) (MPU4) (set 7) + + + m4rfym__g + Run For Your Money (Barcrest) (MPU4) (set 8) + + + m4rfym__h + Run For Your Money (Barcrest) (MPU4) (set 9) + + + m4rfym__i + Run For Your Money (Barcrest) (MPU4) (set 10) + + + m4rfym__j + Run For Your Money (Barcrest) (MPU4) (set 11) + + + m4rfym__k + Run For Your Money (Barcrest) (MPU4) (set 12) + + + m4rfym__l + Run For Your Money (Barcrest) (MPU4) (set 13) + + + m4rfym__m + Run For Your Money (Barcrest) (MPU4) (set 14) + + + m4rfym__n + Run For Your Money (Barcrest) (MPU4) (set 15) + + + m4rfym__o + Run For Your Money (Barcrest) (MPU4) (set 16) + + + m4rfym__p + Run For Your Money (Barcrest) (MPU4) (set 17) + + + m4rfym__q + Run For Your Money (Barcrest) (MPU4) (set 18) + + + m4rfym__r + Run For Your Money (Barcrest) (MPU4) (set 19) + + + m4rfym__s + Run For Your Money (Barcrest) (MPU4) (set 20) + + + m4rfym__t + Run For Your Money (Barcrest) (MPU4) (set 21) + + + m4rfym__u + Run For Your Money (Barcrest) (MPU4) (set 22) + + + m4rfym__v + Run For Your Money (Barcrest) (MPU4) (set 23) + + + m4rfym__w + Run For Your Money (Barcrest) (MPU4) (set 24) + + + m4rfym__x + Run For Your Money (Barcrest) (MPU4) (set 25) + + + m4rfym__y + Run For Your Money (Barcrest) (MPU4) (set 26) + + + m4rfym__z + Run For Your Money (Barcrest) (MPU4) (set 27) + + + m4rhfev + Red Hot Fever (Bwb) (MPU4) (set 1) + + + m4rhfev__a + Red Hot Fever (Bwb) (MPU4) (set 2) + + + m4rhfev__b + Red Hot Fever (Bwb) (MPU4) (set 3) + + + m4rhfev__c + Red Hot Fever (Bwb) (MPU4) (set 4) + + + m4rhfev__d + Red Hot Fever (Bwb) (MPU4) (set 5) + + + m4rhfevc + Red Hot Fever (Concept Games Ltd) (MPU4) (set 1) + + + m4rhfevc__a + Red Hot Fever (Concept Games Ltd) (MPU4) (set 2) + + + m4rhfevc__b + Red Hot Fever (Concept Games Ltd) (MPU4) (set 3) + + + m4rhfevc__c + Red Hot Fever (Concept Games Ltd) (MPU4) (set 4) + + + m4rhfevc__d + Red Hot Fever (Concept Games Ltd) (MPU4) (set 5) + + + m4rhfevc__e + Red Hot Fever (Concept Games Ltd) (MPU4) (set 6) + + + m4rhfevc__f + Red Hot Fever (Concept Games Ltd) (MPU4) (set 7) + + + m4rhfevc__g + Red Hot Fever (Concept Games Ltd) (MPU4) (set 8) + + + m4rhfevc__h + Red Hot Fever (Concept Games Ltd) (MPU4) (set 9) + + + m4rhfevc__i + Red Hot Fever (Concept Games Ltd) (MPU4) (set 10) + + + m4rhfevc__j + Red Hot Fever (Concept Games Ltd) (MPU4) (set 11) + + + m4rhfevc__k + Red Hot Fever (Concept Games Ltd) (MPU4) (set 12) + + + m4rhfevc__l + Red Hot Fever (Concept Games Ltd) (MPU4) (set 13) + + + m4rhfevc__m + Red Hot Fever (Concept Games Ltd) (MPU4) (set 14) + + + m4rhfevc__n + Red Hot Fever (Concept Games Ltd) (MPU4) (set 15) + + + m4rhfevc__o + Red Hot Fever (Concept Games Ltd) (MPU4) (set 16) + + + m4rhfevc__p + Red Hot Fever (Concept Games Ltd) (MPU4) (set 17) + + + m4rhfevc__q + Red Hot Fever (Concept Games Ltd) (MPU4) (set 18) + + + m4rhfevc__r + Red Hot Fever (Concept Games Ltd) (MPU4) (set 19) + + + m4rhfevc__s + Red Hot Fever (Concept Games Ltd) (MPU4) (set 20) + + + m4rhfevc__t + Red Hot Fever (Concept Games Ltd) (MPU4) (set 21) + + + m4rhfevc__u + Red Hot Fever (Concept Games Ltd) (MPU4) (set 22) + + + m4rhfevc__v + Red Hot Fever (Concept Games Ltd) (MPU4) (set 23) + + + m4rhfevc__w + Red Hot Fever (Concept Games Ltd) (MPU4) (set 24) + + + m4rhfevc__x + Red Hot Fever (Concept Games Ltd) (MPU4) (set 25) + + + m4rhfevc__y + Red Hot Fever (Concept Games Ltd) (MPU4) (set 26) + + + m4rhnote + Red Hot Notes (Qps) (MPU4) (set 1) + + + m4rhnote__a + Red Hot Notes (Qps) (MPU4) (set 2) + + + m4rhnote__b + Red Hot Notes (Qps) (MPU4) (set 3) + + + m4rhnote__c + Red Hot Notes (Qps) (MPU4) (set 4) + + + m4rhnote__d + Red Hot Notes (Qps) (MPU4) (set 5) + + + m4rhnote__e + Red Hot Notes (Qps) (MPU4) (set 6) + + + m4rhnote__f + Red Hot Notes (Qps) (MPU4) (set 7) + + + m4rhnote__g + Red Hot Notes (Qps) (MPU4) (set 8) + + + m4rhnote__h + Red Hot Notes (Qps) (MPU4) (set 9) + + + m4rhnote__i + Red Hot Notes (Qps) (MPU4) (set 10) + + + m4rhnote__j + Red Hot Notes (Qps) (MPU4) (set 11) + + + m4rhnote__k + Red Hot Notes (Qps) (MPU4) (set 12) + + + m4rhnote__l + Red Hot Notes (Qps) (MPU4) (set 13) + + + m4rhnote__m + Red Hot Notes (Qps) (MPU4) (set 14) + + + m4rhnote__n + Red Hot Notes (Qps) (MPU4) (set 15) + + + m4rhnote__o + Red Hot Notes (Qps) (MPU4) (set 16) + + + m4rhnote__p + Red Hot Notes (Qps) (MPU4) (set 17) + + + m4rhnote__q + Red Hot Notes (Qps) (MPU4) (set 18) + + + m4rhnote__r + Red Hot Notes (Qps) (MPU4) (set 19) + + + m4rhnote__s + Red Hot Notes (Qps) (MPU4) (set 20) + + + m4rhnote__t + Red Hot Notes (Qps) (MPU4) (set 21) + + + m4rhnote__u + Red Hot Notes (Qps) (MPU4) (set 22) + + + m4rhnote__v + Red Hot Notes (Qps) (MPU4) (set 23) + + + m4rhnote__w + Red Hot Notes (Qps) (MPU4) (set 24) + + + m4rhnote__x + Red Hot Notes (Qps) (MPU4) (set 25) + + + m4rhnote__y + Red Hot Notes (Qps) (MPU4) (set 26) + + + m4rhog + Road Hog (Barcrest) (MPU4) (RR6 1.2) + + + m4rhog2 + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 1) + + + m4rhog2__a + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 2) + + + m4rhog2__b + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 3) + + + m4rhog2__c + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 4) + + + m4rhog2__d + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 5) + + + m4rhog2__e + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 6) + + + m4rhog2__f + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 7) + + + m4rhog2__g + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 8) + + + m4rhog2__h + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 9) + + + m4rhog2__i + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 10) + + + m4rhog2__j + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 11) + + + m4rhog2__k + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 12) + + + m4rhog2__l + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 13) + + + m4rhog2__m + Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 14) + + + m4rhog_h1 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 1) + + + m4rhog_h10 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 3) + + + m4rhog_h11 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 4) + + + m4rhog_h12 + Road Hog (Barcrest) (MPU4) (RR6 1.2?, hack?) + + + m4rhog_h13 + Road Hog (Barcrest) (MPU4) (RR6 1.2, hack?) + + + m4rhog_h14 + Road Hog (Barcrest) (MPU4) (RR6 1.2C, hack?, set 1) + + + m4rhog_h15 + Road Hog (Barcrest) (MPU4) (RR6 1.2C, hack?, set 2) + + + m4rhog_h2 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 2) + + + m4rhog_h3 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 3) + + + m4rhog_h4 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 4) + + + m4rhog_h5 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 5) + + + m4rhog_h6 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 6) + + + m4rhog_h7 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 7) + + + m4rhog_h8 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 1) + + + m4rhog_h9 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 2) + + + m4rhog_roc + Road Hog (Bwb / Barcrest) (MPU4) (ROC 2.0, bad) + + + m4rhogc + Road Hog Club (Barcrest) (MPU4) (set 1) + + + m4rhogc__a + Road Hog Club (Barcrest) (MPU4) (set 2) + + + m4rhogc__b + Road Hog Club (Barcrest) (MPU4) (set 3) + + + m4rhogr1 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0) + + + m4rhogr1c + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0C) + + + m4rhogr1d + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0D) + + + m4rhogr1k + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0K, set 1) + + + m4rhogr1k_a + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0K, set 2, wrong version number?) + + + m4rhogr1y + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0Y) + + + m4rhogr1yd + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0YD) + + + m4rhogr2 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0) + + + m4rhogr2c + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0C) + + + m4rhogr2d + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0D) + + + m4rhogr2k + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0K) + + + m4rhogr2y + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0Y) + + + m4rhogr2yd + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0YD) + + + m4rhogr3 + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 3.0) + + + m4rhogr6ad + Road Hog (Barcrest) (MPU4) (RR6 1.2AD) + + + m4rhogr6b + Road Hog (Barcrest) (MPU4) (RR6 1.2B) + + + m4rhogr6c + Road Hog (Barcrest) (MPU4) (RR6 1.2C) + + + m4rhogr6d + Road Hog (Barcrest) (MPU4) (RR6 1.2D) + + + m4rhogr6k + Road Hog (Barcrest) (MPU4) (RR6 1.2K) + + + m4rhogr6y + Road Hog (Barcrest) (MPU4) (RR6 1.2Y) + + + m4rhogr6y_a + Road Hog (Barcrest) (MPU4) (RR6 1.1Y) + + + m4rhogr6yd + Road Hog (Barcrest) (MPU4) (RR6 1.2YD) + + + m4rhr + Red Hot Roll (Barcrest) (MPU4) (set 1) + + + m4rhr__0 + Red Hot Roll (Barcrest) (MPU4) (set 28) + + + m4rhr__1 + Red Hot Roll (Barcrest) (MPU4) (set 29) + + + m4rhr__2 + Red Hot Roll (Barcrest) (MPU4) (set 30) + + + m4rhr__3 + Red Hot Roll (Barcrest) (MPU4) (set 31) + + + m4rhr__4 + Red Hot Roll (Barcrest) (MPU4) (set 32) + + + m4rhr__5 + Red Hot Roll (Barcrest) (MPU4) (set 33) + + + m4rhr__6 + Red Hot Roll (Barcrest) (MPU4) (set 34) + + + m4rhr__7 + Red Hot Roll (Barcrest) (MPU4) (set 35) + + + m4rhr__8 + Red Hot Roll (Barcrest) (MPU4) (set 36) + + + m4rhr__9 + Red Hot Roll (Barcrest) (MPU4) (set 37) + + + m4rhr__a + Red Hot Roll (Barcrest) (MPU4) (set 2) + + + m4rhr__a0 + Red Hot Roll (Barcrest) (MPU4) (set 64) + + + m4rhr__a1 + Red Hot Roll (Barcrest) (MPU4) (set 65) + + + m4rhr__a2 + Red Hot Roll (Barcrest) (MPU4) (set 66) + + + m4rhr__a3 + Red Hot Roll (Barcrest) (MPU4) (set 67) + + + m4rhr__a4 + Red Hot Roll (Barcrest) (MPU4) (RH8 0.1C) + + + m4rhr__aa + Red Hot Roll (Barcrest) (MPU4) (set 38) + + + m4rhr__ab + Red Hot Roll (Barcrest) (MPU4) (set 39) + + + m4rhr__ac + Red Hot Roll (Barcrest) (MPU4) (set 40) + + + m4rhr__ad + Red Hot Roll (Barcrest) (MPU4) (set 41) + + + m4rhr__ae + Red Hot Roll (Barcrest) (MPU4) (set 42) + + + m4rhr__af + Red Hot Roll (Barcrest) (MPU4) (set 43) + + + m4rhr__ag + Red Hot Roll (Barcrest) (MPU4) (set 44) + + + m4rhr__ah + Red Hot Roll (Barcrest) (MPU4) (set 45) + + + m4rhr__ai + Red Hot Roll (Barcrest) (MPU4) (set 46) + + + m4rhr__aj + Red Hot Roll (Barcrest) (MPU4) (set 47) + + + m4rhr__ak + Red Hot Roll (Barcrest) (MPU4) (set 48) + + + m4rhr__al + Red Hot Roll (Barcrest) (MPU4) (set 49) + + + m4rhr__am + Red Hot Roll (Barcrest) (MPU4) (set 50) + + + m4rhr__an + Red Hot Roll (Barcrest) (MPU4) (set 51) + + + m4rhr__ao + Red Hot Roll (Barcrest) (MPU4) (set 52) + + + m4rhr__ap + Red Hot Roll (Barcrest) (MPU4) (set 53) + + + m4rhr__aq + Red Hot Roll (Barcrest) (MPU4) (set 54) + + + m4rhr__ar + Red Hot Roll (Barcrest) (MPU4) (set 55) + + + m4rhr__as + Red Hot Roll (Barcrest) (MPU4) (set 56) + + + m4rhr__at + Red Hot Roll (Barcrest) (MPU4) (set 57) + + + m4rhr__au + Red Hot Roll (Barcrest) (MPU4) (set 58) + + + m4rhr__av + Red Hot Roll (Barcrest) (MPU4) (set 59) + + + m4rhr__aw + Red Hot Roll (Barcrest) (MPU4) (set 60) + + + m4rhr__ax + Red Hot Roll (Barcrest) (MPU4) (set 61) + + + m4rhr__ay + Red Hot Roll (Barcrest) (MPU4) (set 62) + + + m4rhr__az + Red Hot Roll (Barcrest) (MPU4) (set 63) + + + m4rhr__b + Red Hot Roll (Barcrest) (MPU4) (set 3) + + + m4rhr__c + Red Hot Roll (Barcrest) (MPU4) (set 4) + + + m4rhr__d + Red Hot Roll (Barcrest) (MPU4) (set 5) + + + m4rhr__e + Red Hot Roll (Barcrest) (MPU4) (set 6) + + + m4rhr__f + Red Hot Roll (Barcrest) (MPU4) (set 7) + + + m4rhr__g + Red Hot Roll (Barcrest) (MPU4) (set 8) + + + m4rhr__h + Red Hot Roll (Barcrest) (MPU4) (set 9) + + + m4rhr__i + Red Hot Roll (Barcrest) (MPU4) (set 10) + + + m4rhr__j + Red Hot Roll (Barcrest) (MPU4) (set 11) + + + m4rhr__k + Red Hot Roll (Barcrest) (MPU4) (set 12) + + + m4rhr__l + Red Hot Roll (Barcrest) (MPU4) (set 13) + + + m4rhr__m + Red Hot Roll (Barcrest) (MPU4) (set 14) + + + m4rhr__n + Red Hot Roll (Barcrest) (MPU4) (set 15) + + + m4rhr__o + Red Hot Roll (Barcrest) (MPU4) (set 16) + + + m4rhr__p + Red Hot Roll (Barcrest) (MPU4) (set 17) + + + m4rhr__q + Red Hot Roll (Barcrest) (MPU4) (set 18) + + + m4rhr__r + Red Hot Roll (Barcrest) (MPU4) (set 19) + + + m4rhr__s + Red Hot Roll (Barcrest) (MPU4) (set 20) + + + m4rhr__t + Red Hot Roll (Barcrest) (MPU4) (set 21) + + + m4rhr__u + Red Hot Roll (Barcrest) (MPU4) (set 22) + + + m4rhr__v + Red Hot Roll (Barcrest) (MPU4) (set 23) + + + m4rhr__w + Red Hot Roll (Barcrest) (MPU4) (set 24) + + + m4rhr__x + Red Hot Roll (Barcrest) (MPU4) (set 25) + + + m4rhr__y + Red Hot Roll (Barcrest) (MPU4) (set 26) + + + m4rhr__z + Red Hot Roll (Barcrest) (MPU4) (set 27) + + + m4rhrc + Red Hot Roll Classic (Barcrest) (MPU4) (set 1) + + + m4rhrc__0 + Red Hot Roll Classic (Barcrest) (MPU4) (set 28) + + + m4rhrc__1 + Red Hot Roll Classic (Barcrest) (MPU4) (set 29) + + + m4rhrc__2 + Red Hot Roll Classic (Barcrest) (MPU4) (set 30) + + + m4rhrc__3 + Red Hot Roll Classic (Barcrest) (MPU4) (set 31) + + + m4rhrc__4 + Red Hot Roll Classic (Barcrest) (MPU4) (set 32) + + + m4rhrc__5 + Red Hot Roll Classic (Barcrest) (MPU4) (set 33) + + + m4rhrc__6 + Red Hot Roll Classic (Barcrest) (MPU4) (set 34) + + + m4rhrc__7 + Red Hot Roll Classic (Barcrest) (MPU4) (set 35) + + + m4rhrc__8 + Red Hot Roll Classic (Barcrest) (MPU4) (set 36) + + + m4rhrc__a + Red Hot Roll Classic (Barcrest) (MPU4) (set 2) + + + m4rhrc__aa + Red Hot Roll Classic (Barcrest) (MPU4) (set 38) + + + m4rhrc__b + Red Hot Roll Classic (Barcrest) (MPU4) (set 3) + + + m4rhrc__c + Red Hot Roll Classic (Barcrest) (MPU4) (set 4) + + + m4rhrc__d + Red Hot Roll Classic (Barcrest) (MPU4) (set 5) + + + m4rhrc__e + Red Hot Roll Classic (Barcrest) (MPU4) (set 6) + + + m4rhrc__f + Red Hot Roll Classic (Barcrest) (MPU4) (set 7) + + + m4rhrc__g + Red Hot Roll Classic (Barcrest) (MPU4) (set 8) + + + m4rhrc__h + Red Hot Roll Classic (Barcrest) (MPU4) (set 9) + + + m4rhrc__i + Red Hot Roll Classic (Barcrest) (MPU4) (set 10) + + + m4rhrc__j + Red Hot Roll Classic (Barcrest) (MPU4) (set 11) + + + m4rhrc__k + Red Hot Roll Classic (Barcrest) (MPU4) (set 12) + + + m4rhrc__l + Red Hot Roll Classic (Barcrest) (MPU4) (set 13) + + + m4rhrc__m + Red Hot Roll Classic (Barcrest) (MPU4) (set 14) + + + m4rhrc__n + Red Hot Roll Classic (Barcrest) (MPU4) (set 15) + + + m4rhrc__o + Red Hot Roll Classic (Barcrest) (MPU4) (set 16) + + + m4rhrc__p + Red Hot Roll Classic (Barcrest) (MPU4) (set 17) + + + m4rhrc__q + Red Hot Roll Classic (Barcrest) (MPU4) (set 18) + + + m4rhrc__r + Red Hot Roll Classic (Barcrest) (MPU4) (set 19) + + + m4rhrc__s + Red Hot Roll Classic (Barcrest) (MPU4) (set 20) + + + m4rhrc__t + Red Hot Roll Classic (Barcrest) (MPU4) (set 21) + + + m4rhrc__u + Red Hot Roll Classic (Barcrest) (MPU4) (set 22) + + + m4rhrc__v + Red Hot Roll Classic (Barcrest) (MPU4) (set 23) + + + m4rhrc__w + Red Hot Roll Classic (Barcrest) (MPU4) (set 24) + + + m4rhrc__x + Red Hot Roll Classic (Barcrest) (MPU4) (set 25) + + + m4rhrc__y + Red Hot Roll Classic (Barcrest) (MPU4) (set 26) + + + m4rhrc__z + Red Hot Roll Classic (Barcrest) (MPU4) (set 27) + + + m4rhrcl + Red Hot Roll Club (Barcrest) (MPU4) (set 1) + + + m4rhrcl__a + Red Hot Roll Club (Barcrest) (MPU4) (set 2) + + + m4rhrcl__b + Red Hot Roll Club (Barcrest) (MPU4) (set 3) + + + m4rhrcl__c + Red Hot Roll Club (Barcrest) (MPU4) (set 4) + + + m4rhrock + Red Hot Rocks (Qps) (MPU4) (set 1) + + + m4rhrock__a + Red Hot Rocks (Qps) (MPU4) (set 2) + + + m4rhs + Rocky Horror Show (Barcrest) (MPU4) (set 1) + + + m4rhs__a + Rocky Horror Show (Barcrest) (MPU4) (set 2) + + + m4rhs__b + Rocky Horror Show (Barcrest) (MPU4) (set 3) + + + m4rhs__c + Rocky Horror Show (Barcrest) (MPU4) (set 4) + + + m4rhs__d + Rocky Horror Show (Barcrest) (MPU4) (set 5) + + + m4rhs__e + Rocky Horror Show (Barcrest) (MPU4) (set 6) + + + m4rhs__f + Rocky Horror Show (Barcrest) (MPU4) (set 7) + + + m4rhs__g + Rocky Horror Show (Barcrest) (MPU4) (set 8) + + + m4rhs__h + Rocky Horror Show (Barcrest) (MPU4) (set 9) + + + m4rhs__i + Rocky Horror Show (Barcrest) (MPU4) (set 10) + + + m4rhs__j + Rocky Horror Show (Barcrest) (MPU4) (set 11) + + + m4rhs__k + Rocky Horror Show (Barcrest) (MPU4) (set 12) + + + m4rhs__l + Rocky Horror Show (Barcrest) (MPU4) (set 13) + + + m4rhwhl + Red Hot Wheels (Qps) (MPU4) (set 1) + + + m4rhwhl__a + Red Hot Wheels (Qps) (MPU4) (set 2) + + + m4rhwhl__b + Red Hot Wheels (Qps) (MPU4) (set 3) + + + m4rhwhl__c + Red Hot Wheels (Qps) (MPU4) (set 4) + + + m4richfm + Rich & Famous (Barcrest) (MPU4) (set 1) + + + m4richfm__0 + Rich & Famous (Barcrest) (MPU4) (set 28) + + + m4richfm__1 + Rich & Famous (Barcrest) (MPU4) (set 29) + + + m4richfm__2 + Rich & Famous (Barcrest) (MPU4) (set 30) + + + m4richfm__3 + Rich & Famous (Barcrest) (MPU4) (set 31) + + + m4richfm__a + Rich & Famous (Barcrest) (MPU4) (set 2) + + + m4richfm__b + Rich & Famous (Barcrest) (MPU4) (set 3) + + + m4richfm__c + Rich & Famous (Barcrest) (MPU4) (set 4) + + + m4richfm__d + Rich & Famous (Barcrest) (MPU4) (set 5) + + + m4richfm__e + Rich & Famous (Barcrest) (MPU4) (set 6) + + + m4richfm__f + Rich & Famous (Barcrest) (MPU4) (set 7) + + + m4richfm__g + Rich & Famous (Barcrest) (MPU4) (set 8) + + + m4richfm__h + Rich & Famous (Barcrest) (MPU4) (set 9) + + + m4richfm__i + Rich & Famous (Barcrest) (MPU4) (set 10) + + + m4richfm__j + Rich & Famous (Barcrest) (MPU4) (set 11) + + + m4richfm__k + Rich & Famous (Barcrest) (MPU4) (set 12) + + + m4richfm__l + Rich & Famous (Barcrest) (MPU4) (set 13) + + + m4richfm__m + Rich & Famous (Barcrest) (MPU4) (set 14) + + + m4richfm__n + Rich & Famous (Barcrest) (MPU4) (set 15) + + + m4richfm__o + Rich & Famous (Barcrest) (MPU4) (set 16) + + + m4richfm__p + Rich & Famous (Barcrest) (MPU4) (set 17) + + + m4richfm__q + Rich & Famous (Barcrest) (MPU4) (set 18) + + + m4richfm__r + Rich & Famous (Barcrest) (MPU4) (set 19) + + + m4richfm__s + Rich & Famous (Barcrest) (MPU4) (set 20) + + + m4richfm__t + Rich & Famous (Barcrest) (MPU4) (set 21) + + + m4richfm__u + Rich & Famous (Barcrest) (MPU4) (set 22) + + + m4richfm__v + Rich & Famous (Barcrest) (MPU4) (set 23) + + + m4richfm__w + Rich & Famous (Barcrest) (MPU4) (set 24) + + + m4richfm__x + Rich & Famous (Barcrest) (MPU4) (set 25) + + + m4richfm__y + Rich & Famous (Barcrest) (MPU4) (set 26) + + + m4richfm__z + Rich & Famous (Barcrest) (MPU4) (set 27) + + + m4ringfr + Ring Of Fire (Barcrest) (MPU4) + + + m4riocr + Rio Grande (Crystal) (MPU4) (set 1) + + + m4riocra + Rio Grande (Crystal) (MPU4) (set 2) + + + m4riotrp + Rio Tropico (unknown) (MPU4) + + + m4rlpick + Reel Picks (Crystal) (MPU4) (set 1) + + + m4rlpicka + Reel Picks (Crystal) (MPU4) (set 2) + + + m4rlpickb + Reel Picks (Crystal) (MPU4) (set 3) + + + m4rlpickc + Reel Picks (Crystal) (MPU4) (set 4) + + + m4rltst + MPU4 Reel Test (3.0) + + + m4rmg + unknown MPU4 'CTP 0.4' (MPU4?) + + + m4rmtp + Reel Magic Turbo Play (Avantime?) (MPU4) (set 1) + + + m4rmtp__a + Reel Magic Turbo Play (Avantime?) (MPU4) (set 2) + + + m4rmtp__b + Reel Magic Turbo Play (Avantime?) (MPU4) (set 3) + + + m4rmtp__c + Reel Magic Turbo Play (Avantime?) (MPU4) (set 4) + + + m4rmtp__d + Reel Magic Turbo Play (Avantime?) (MPU4) (set 5) + + + m4rmtp__e + Reel Magic Turbo Play (Avantime?) (MPU4) (set 6) + + + m4rmtp__f + Reel Magic Turbo Play (Avantime?) (MPU4) (set 7) + + + m4rmtp__g + Reel Magic Turbo Play (Avantime?) (MPU4) (set 8) + + + m4rmtpd + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 1) + + + m4rmtpd__0 + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 28) + + + m4rmtpd__1 + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 29) + + + m4rmtpd__2 + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 30) + + + m4rmtpd__3 + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 31) + + + m4rmtpd__4 + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 32) + + + m4rmtpd__5 + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 33) + + + m4rmtpd__6 + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 34) + + + m4rmtpd__7 + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 35) + + + m4rmtpd__8 + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 36) + + + m4rmtpd__9 + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 37) + + + m4rmtpd__a + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 2) + + + m4rmtpd__aa + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 38) + + + m4rmtpd__ab + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 39) + + + m4rmtpd__ac + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 40) + + + m4rmtpd__ad + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 41) + + + m4rmtpd__ae + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 42) + + + m4rmtpd__af + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 43) + + + m4rmtpd__ag + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 44) + + + m4rmtpd__ah + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 45) + + + m4rmtpd__ai + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 46) + + + m4rmtpd__aj + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 47) + + + m4rmtpd__ak + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 48) + + + m4rmtpd__al + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 49) + + + m4rmtpd__am + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 50) + + + m4rmtpd__b + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 3) + + + m4rmtpd__c + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 4) + + + m4rmtpd__d + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 5) + + + m4rmtpd__e + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 6) + + + m4rmtpd__f + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 7) + + + m4rmtpd__g + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 8) + + + m4rmtpd__h + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 9) + + + m4rmtpd__i + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 10) + + + m4rmtpd__j + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 11) + + + m4rmtpd__k + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 12) + + + m4rmtpd__l + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 13) + + + m4rmtpd__m + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 14) + + + m4rmtpd__n + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 15) + + + m4rmtpd__o + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 16) + + + m4rmtpd__p + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 17) + + + m4rmtpd__q + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 18) + + + m4rmtpd__r + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 19) + + + m4rmtpd__s + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 20) + + + m4rmtpd__t + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 21) + + + m4rmtpd__u + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 22) + + + m4rmtpd__v + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 23) + + + m4rmtpd__w + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 24) + + + m4rmtpd__x + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 25) + + + m4rmtpd__y + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 26) + + + m4rmtpd__z + Reel Magic Turbo Play Deluxe (Avantime?) (MPU4) (set 27) + + + m4roadrn + Road Runner (Barcrest) (Dutch) (MPU4) (DRO1.9) + + + m4robo + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 1) + + + m4robo__0 + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 14) + + + m4robo__1 + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 2) + + + m4robo__2 + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 3) + + + m4robo__3 + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 4) + + + m4robo__4 + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 5) + + + m4robo__5 + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 6) + + + m4robo__6 + Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 1) + + + m4robo__7 + Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 2) + + + m4robo__8 + Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 3) + + + m4robo__9 + Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 4) + + + m4robo__a + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 7) + + + m4robo__aa + Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 5) + + + m4robo__ab + Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 6) + + + m4robo__b + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 8) + + + m4robo__c + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 9) + + + m4robo__d + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 10) + + + m4robo__e + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 11) + + + m4robo__f + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 12) + + + m4robo__g + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 13) + + + m4robo__h + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 14) + + + m4robo__i + Robotica / Dream Machine (Avantime?) (MPU4) (Latvia, set 15) + + + m4robo__j + Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 7) + + + m4robo__k + Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 8) + + + m4robo__l + Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 9) + + + m4robo__m + Robotica / Dream Machine (Avantime?) (MPU4) (Russia, set 10) + + + m4robo__n + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 1) + + + m4robo__o + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 2) + + + m4robo__p + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 3) + + + m4robo__q + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 4) + + + m4robo__r + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 5) + + + m4robo__s + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 6) + + + m4robo__t + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 7) + + + m4robo__u + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 8) + + + m4robo__v + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 9) + + + m4robo__w + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 10) + + + m4robo__x + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 11) + + + m4robo__y + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 12) + + + m4robo__z + Robotica / Dream Machine (Avantime?) (MPU4) (Ukraine, set 13) + + + m4rockmn + Rocket Money (Barcrest) (MPU4) (set 1) + + + m4rockmn__a + Rocket Money (Barcrest) (MPU4) (set 2) + + + m4rockmn__b + Rocket Money (Barcrest) (MPU4) (set 3) + + + m4rockmn__c + Rocket Money (Barcrest) (MPU4) (set 4) + + + m4rockmn__d + Rocket Money (Barcrest) (MPU4) (set 5) + + + m4rockmn__e + Rocket Money (Barcrest) (MPU4) (set 6) + + + m4rockmn__f + Rocket Money (Barcrest) (MPU4) (set 7) + + + m4rockmn__g + Rocket Money (Barcrest) (MPU4) (set 8) + + + m4rockmn__h + Rocket Money (Barcrest) (MPU4) (set 9) + + + m4rockmn__i + Rocket Money (Barcrest) (MPU4) (set 10) + + + m4rockmn__j + Rocket Money (Barcrest) (MPU4) (set 11) + + + m4rockmn__k + Rocket Money (Barcrest) (MPU4) (set 12) + + + m4rotex + Rotex (Union) (MPU4) + + + m4royjwl + Royal Jewels (Barcrest) (MPU4) + + + m4rsg + Ready Steady Go (Barcrest) (MPU4, Mod 2 type, V1.2) + + + m4rsga + Ready Steady Go (Barcrest) (MPU4, Mod 2 type, V1.0) + + + m4runawy + Runaway Trail (Barcrest) (MPU4) + + + m4runawyb + Runaway Trail (Barcrest) (v1.2?) (MPU4) + + + m4rwb + Red White & Blue (Barcrest) (MPU4) (DRW) + + + m4safar + Safari Club (Mdm) (MPU4) + + + m4salsa + Salsa (Barcrest) (MPU4) (DSA) + + + m4samu + Samurai (Barcrest) (Dutch) (MPU4) + + + m4sayno + Say No More (Barcrest) (MPU4) (set 1) + + + m4sayno__a + Say No More (Barcrest) (MPU4) (set 2) + + + m4sayno__b + Say No More (Barcrest) (MPU4) (set 3) + + + m4sayno__c + Say No More (Barcrest) (MPU4) (set 4) + + + m4sayno__d + Say No More (Barcrest) (MPU4) (set 5) + + + m4sb5 + Sunset Boulevard (Barcrest) (MPU4) (BSB 0.3) + + + m4sbx + Super Bear X (MPU4?) (set 1) + + + m4sbxa + Super Bear X (MPU4?) (set 2) + + + m4sbxb + Super Bear X (MPU4?) (set 3) + + + m4sbxc + Super Bear X (MPU4?) (set 4) + + + m4sbxd + Super Bear X (MPU4?) (set 5) + + + m4sbxe + Super Bear X (MPU4?) (set 6) + + + m4screw + Screwin' Around (Global) (MPU4, v0.8) + + + m4screwa + Screwin' Around (Global) (MPU4, v0.7) + + + m4screwb + Screwin' Around (Global) (MPU4, v0.5) + + + m4screwp + Screwin' Around (Global) (MPU4, v0.8) (Protocol) + + + m4sctagt + Secret Agent (Nova) (MPU4) + + + m4sdquid + Sundance Quid (Qps) (MPU4) (set 1) + + + m4sdquid__a + Sundance Quid (Qps) (MPU4) (set 2) + + + m4sdquid__b + Sundance Quid (Qps) (MPU4) (set 3) + + + m4sdquid__c + Sundance Quid (Qps) (MPU4) (set 4) + + + m4sdquid__d + Sundance Quid (Qps) (MPU4) (set 5) + + + m4sdquid__e + Sundance Quid (Qps) (MPU4) (set 6) + + + m4sdquid__f + Sundance Quid (Qps) (MPU4) (set 7) + + + m4sdquid__g + Sundance Quid (Qps) (MPU4) (set 8) + + + m4sdquid__h + Sundance Quid (Qps) (MPU4) (set 9) + + + m4sdquid__i + Sundance Quid (Qps) (MPU4) (set 10) + + + m4sdquid__j + Sundance Quid (Qps) (MPU4) (set 11) + + + m4sdquid__k + Sundance Quid (Qps) (MPU4) (set 12) + + + m4select + Select (Union) (MPU4) + + + m4sgrab + Smash 'n' Grab (Barcrest) (MPU4) (SAG 1.0, set 1) + + + m4sgraba + Smash 'n' Grab (Barcrest) (MPU4) (set 1.0, set 2) + + + m4sgrabb + Smash 'n' Grab (Barcrest) (MPU4) (SAG 3.4) + + + m4shkwav + Shockwave (Qps) (MPU4) (set 1) + + + m4shkwav__a + Shockwave (Qps) (MPU4) (set 2) + + + m4shkwav__b + Shockwave (Qps) (MPU4) (set 3) + + + m4shkwav__c + Shockwave (Qps) (MPU4) (set 4) + + + m4shkwav__d + Shockwave (Qps) (MPU4) (set 5) + + + m4shkwav__e + Shockwave (Qps) (MPU4) (set 6) + + + m4shkwav__f + Shockwave (Qps) (MPU4) (set 7) + + + m4shkwav__g + Shockwave (Qps) (MPU4) (set 8) + + + m4shocm + Showcase Crystal Maze (Barcrest) (MPU4) (set 1) + + + m4shocm__a + Showcase Crystal Maze (Barcrest) (MPU4) (set 2) + + + m4shocm__b + Showcase Crystal Maze (Barcrest) (MPU4) (set 3) + + + m4shocm__c + Showcase Crystal Maze (Barcrest) (MPU4) (set 4) + + + m4shocm__d + Showcase Crystal Maze (Barcrest) (MPU4) (set 5) + + + m4shocm__e + Showcase Crystal Maze (Barcrest) (MPU4) (set 6) + + + m4shocm__f + Showcase Crystal Maze (Barcrest) (MPU4) (set 7) + + + m4shocm__g + Showcase Crystal Maze (Barcrest) (MPU4) (set 8) + + + m4shocm__h + Showcase Crystal Maze (Barcrest) (MPU4) (set 9) + + + m4shocm__i + Showcase Crystal Maze (Barcrest) (MPU4) (set 10) + + + m4shocm__j + Showcase Crystal Maze (Barcrest) (MPU4) (set 11) + + + m4shodf + Showcase Duty Free (Barcrest) (MPU4) (set 1) + + + m4shodf__a + Showcase Duty Free (Barcrest) (MPU4) (set 2) + + + m4shodf__b + Showcase Duty Free (Barcrest) (MPU4) (set 3) + + + m4shodf__c + Showcase Duty Free (Barcrest) (MPU4) (set 4) + + + m4shodf__d + Showcase Duty Free (Barcrest) (MPU4) (set 5) + + + m4shodf__e + Showcase Duty Free (Barcrest) (MPU4) (set 6) + + + m4shodf__f + Showcase Duty Free (Barcrest) (MPU4) (set 7) + + + m4shodf__g + Showcase Duty Free (Barcrest) (MPU4) (set 8) + + + m4shodf__h + Showcase Duty Free (Barcrest) (MPU4) (set 9) + + + m4shodf__i + Showcase Duty Free (Barcrest) (MPU4) (set 10) + + + m4shodf__j + Showcase Duty Free (Barcrest) (MPU4) (set 11) + + + m4shodf__k + Showcase Duty Free (Barcrest) (MPU4) (set 12) + + + m4shodf__l + Showcase Duty Free (Barcrest) (MPU4) (set 13) + + + m4shoknr + Shock 'n' Roll (Qps) (MPU4) (set 1) + + + m4shoknr__a + Shock 'n' Roll (Qps) (MPU4) (set 2) + + + m4shoknr__b + Shock 'n' Roll (Qps) (MPU4) (set 3) + + + m4shoknr__c + Shock 'n' Roll (Qps) (MPU4) (set 4) + + + m4showtm + Show Timer (Barcrest) (Dutch) (MPU4) (DSH1.3) + + + m4silnud + Silver Nudger (Mdm?) (MPU4) + + + m4silshd + Silver Shadow (Barcrest) (MPU4) + + + m4silshda + Silver Shadow (Barcrest) (MPU4) (SH 2.0, set 1) + + + m4silshdb + Silver Shadow (Barcrest) (MPU4) (SH 2.0, set 2) + + + m4sinbd + Sinbad (Bwb) (MPU4) (set 1) + + + m4sinbd__a + Sinbad (Bwb) (MPU4) (set 2) + + + m4sinbd__b + Sinbad (Bwb) (MPU4) (set 3) + + + m4sinbd__c + Sinbad (Bwb) (MPU4) (set 4) + + + m4sinbd__d + Sinbad (Bwb) (MPU4) (set 5) + + + m4sinbd__e + Sinbad (Bwb) (MPU4) (set 6) + + + m4sinbd__f + Sinbad (Bwb) (MPU4) (set 7) + + + m4sinbd__g + Sinbad (Bwb) (MPU4) (set 8) + + + m4sinbd__h + Sinbad (Bwb) (MPU4) (set 9) + + + m4sinbd__i + Sinbad (Bwb) (MPU4) (set 10) + + + m4sinbd__j + Sinbad (Bwb) (MPU4) (set 11) + + + m4sinbd__k + Sinbad (Bwb) (MPU4) (set 12) + + + m4sinbd__l + Sinbad (Bwb) (MPU4) (set 13) + + + m4sinbd__m + Sinbad (Bwb) (MPU4) (set 14) + + + m4sinbd__n + Sinbad (Bwb) (MPU4) (set 15) + + + m4sinbd__o + Sinbad (Bwb) (MPU4) (set 16) + + + m4sinbd__p + Sinbad (Bwb) (MPU4) (set 17) + + + m4sinbd__q + Sinbad (Bwb) (MPU4) (set 18) + + + m4sinbd__r + Sinbad (Bwb) (MPU4) (set 19) + + + m4sinbd__s + Sinbad (Bwb) (MPU4) (set 20) + + + m4sinbd__t + Sinbad (Bwb) (MPU4) (set 21) + + + m4sinbd__u + Sinbad (Bwb) (MPU4) (set 22) + + + m4sinbd__v + Sinbad (Bwb) (MPU4) (set 23) + + + m4sinbd__w + Sinbad (Bwb) (MPU4) (set 24) + + + m4sinbd__x + Sinbad (Bwb) (MPU4) (set 25) + + + m4sinbdn + Sinbad (Nova) (MPU4) (set 1) + + + m4sinbdn__a + Sinbad (Nova) (MPU4) (set 2) + + + m4sinbdn__b + Sinbad (Nova) (MPU4) (set 3) + + + m4sinbdn__c + Sinbad (Nova) (MPU4) (set 4) + + + m4sinbdn__d + Sinbad (Nova) (MPU4) (set 5) + + + m4sinbdn__e + Sinbad (Nova) (MPU4) (set 6) + + + m4sinbdn__f + Sinbad (Nova) (MPU4) (set 7) + + + m4sky + Sky Sports (Bwb) (MPU4) (set 1) + + + m4sky__a + Sky Sports (Bwb) (MPU4) (set 2) + + + m4sky__b + Sky Sports (Bwb) (MPU4) (set 3) + + + m4sky__c + Sky Sports (Bwb) (MPU4) (set 4) + + + m4sky__d + Sky Sports (Bwb) (MPU4) (set 5) + + + m4smshgb + Smash 'n' Grab (Mdm) (MPU4, set 1) + + + m4smshgba + Smash 'n' Grab (Mdm) (MPU4, set 2) + + + m4smshgbb + Smash 'n' Grab (Mdm) (MPU4, set 3) + + + m4smshgbc + Smash 'n' Grab (Mdm) (MPU4, set 4) + + + m4snklad + Snakes & Ladders (Mdm) (MPU4) + + + m4snookr + Snooker (Eurocoin) (MPU4) + + + m4snowbl + Snowball Bingo (Mdm) (MPU4) + + + m4solsil + Solid Silver Club (Barcrest) (MPU4) (SOS 2.2) + + + m4solsila + Solid Silver Club (Barcrest) (MPU4) (SOS 2.1) + + + m4souls + Soul Sister (Bwb) (MPU4) (set 1) + + + m4souls__a + Soul Sister (Bwb) (MPU4) (set 2) + + + m4souls__b + Soul Sister (Bwb) (MPU4) (set 3) + + + m4souls__c + Soul Sister (Bwb) (MPU4) (set 4) + + + m4souls__d + Soul Sister (Bwb) (MPU4) (set 5) + + + m4souls__e + Soul Sister (Bwb) (MPU4) (set 6) + + + m4souls__f + Soul Sister (Bwb) (MPU4) (set 7) + + + m4specu + Speculator Club (Bwb) (MPU4) + + + m4spinbt + Spin The Bottle (Bwb) (MPU4) (set 1) + + + m4spinbt__a + Spin The Bottle (Bwb) (MPU4) (set 2) + + + m4spinbt__b + Spin The Bottle (Bwb) (MPU4) (set 3) + + + m4spinbt__c + Spin The Bottle (Bwb) (MPU4) (set 4) + + + m4spinbt__d + Spin The Bottle (Bwb) (MPU4) (set 5) + + + m4spinbt__e + Spin The Bottle (Bwb) (MPU4) (set 6) + + + m4spinbt__f + Spin The Bottle (Bwb) (MPU4) (set 7) + + + m4spinbt__g + Spin The Bottle (Bwb) (MPU4) (set 8) + + + m4spnwin + Spin A Win (Cotswold Microsystems) (MPU4) (set 1) + + + m4spnwina + Spin A Win (Cotswold Microsystems) (MPU4) (set 2) + + + m4spnwnc + Spin-A-Win (Concept Games Ltd) (MPU4) (set 1) + + + m4spnwnc__a + Spin-A-Win (Concept Games Ltd) (MPU4) (set 2) + + + m4spnwnc__b + Spin-A-Win (Concept Games Ltd) (MPU4) (set 3) + + + m4spotln + Spotlight (Nova) (MPU4) + + + m4spton + Spot On (Pcp) (MPU4) + + + m4squid + Squids In (Barcrest) (MPU4) (set 1) + + + m4squid__a + Squids In (Barcrest) (MPU4) (set 2) + + + m4squid__b + Squids In (Barcrest) (MPU4) (set 3) + + + m4squid__c + Squids In (Barcrest) (MPU4) (set 4) + + + m4ssclas + Super Streak Classic (Barcrest) (MPU4) (set 1) + + + m4ssclas__a + Super Streak Classic (Barcrest) (MPU4) (set 2) + + + m4ssclas__b + Super Streak Classic (Barcrest) (MPU4) (set 3) + + + m4ssclas__c + Super Streak Classic (Barcrest) (MPU4) (set 4) + + + m4ssclas__d + Super Streak Classic (Barcrest) (MPU4) (set 5) + + + m4ssclas__e + Super Streak Classic (Barcrest) (MPU4) (set 6) + + + m4ssclas__f + Super Streak Classic (Barcrest) (MPU4) (hack) + + + m4sss + Spend Spend Spend (Barcrest) (MPU4) (set 1) + + + m4sss__a + Spend Spend Spend (Barcrest) (MPU4) (set 2) + + + m4sss__b + Spend Spend Spend (Barcrest) (MPU4) (set 3) + + + m4sss__c + Spend Spend Spend (Barcrest) (MPU4) (set 4) + + + m4sss__d + Spend Spend Spend (Barcrest) (MPU4) (set 5) + + + m4sss__e + Spend Spend Spend (Barcrest) (MPU4) (set 6) + + + m4sss__f + Spend Spend Spend (Barcrest) (MPU4) (set 7) + + + m4sss__g + Spend Spend Spend (Barcrest) (MPU4) (set 8) + + + m4sss__h + Spend Spend Spend (Barcrest) (MPU4) (set 9) + + + m4sss__i + Spend Spend Spend (Barcrest) (MPU4) (set 10) + + + m4sss__j + Spend Spend Spend (Barcrest) (MPU4) (set 11) + + + m4sss__k + Spend Spend Spend (Barcrest) (MPU4) (set 12) + + + m4sss__l + Spend Spend Spend (Barcrest) (MPU4) (set 13) + + + m4sstrek + Super Streak (bootleg) (MPU4) + + + m4stakeu + Stake Up Club (Barcrest) (MPU4) (SU 4.4) + + + m4stakeua + Stake Up Club (Barcrest) (MPU4) (SU 4.8) + + + m4stakex + Stake X (Leisurama) (MPU4, set 1) + + + m4stakexa + Stake X (Leisurama) (MPU4, set 2) + + + m4stand2 + Stand To Deliver (DJE) (MPU4) + + + m4starbr + Stars And Bars (Barcrest) (Dutch) (MPU4) + + + m4stards + Stardust (Barcrest) (Dutch) (MPU4) + + + m4starst + Stars & Stripes (Bwb) (MPU4) (set 1) + + + m4starst__a + Stars & Stripes (Bwb) (MPU4) (set 2) + + + m4starst__b + Stars & Stripes (Bwb) (MPU4) (set 3) + + + m4starst__c + Stars & Stripes (Bwb) (MPU4) (set 4) + + + m4starst__d + Stars & Stripes (Bwb) (MPU4) (set 5) + + + m4starst__e + Stars & Stripes (Bwb) (MPU4) (set 6) + + + m4starst__f + Stars & Stripes (Bwb) (MPU4) (set 7) + + + m4starst__g + Stars & Stripes (Bwb) (MPU4) (set 8) + + + m4starst__h + Stars & Stripes (Bwb) (MPU4) (set 9) + + + m4starst__i + Stars & Stripes (Bwb) (MPU4) (set 10) + + + m4starst__j + Stars & Stripes (Bwb) (MPU4) (set 11) + + + m4stc + unknown MPU4 'STC 0.1' (Barcrest) (MPU4) + + + m4steptm + Step Timer (Barcrest) (Dutch) (MPU4) (DST 1.1) + + + m4stopcl + Stop the Clock (Barcrest) (MPU4) (SC2.5) + + + m4sunclb + Sun Club (Bwb) (MPU4) (set 1) + + + m4sunclba + Sun Club (Bwb) (MPU4) (set 2) + + + m4sunday + Sunday Sport (Pcp) (MPU4) + + + m4sunscl + Sunset Club (Bwb) (MPU4) (set 1) + + + m4sunscla + Sunset Club (Bwb) (MPU4) (set 2) + + + m4sunsclb + Sunset Club (Bwb) (MPU4) (set 3) + + + m4sunset + Sunset Boulevard (Barcrest) (MPU4) (BSB 0.4) + + + m4sunseta + Sunset Boulevard (Barcrest) (MPU4) (B25 1.2, set 1) + + + m4sunsetb + Sunset Boulevard (Barcrest) (MPU4) (B25 1.2, set 2) + + + m4sunsetc + Sunset Boulevard (Barcrest) (MPU4) (OSB 0.2) + + + m4sunsetd + Sunset Boulevard (Barcrest) (MPU4) (SBU 2.0) + + + m4sunsete + Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.1) + + + m4sunsetf + Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 1) + + + m4sunsetg + Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 2) + + + m4sunseth + Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 3, bad) + + + m4sunseti + Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 4) + + + m4sunsetj + Sunset Boulevard (Barcrest) (MPU4) (BS__ 1.0, set 5) + + + m4sunsetk + Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.1) + + + m4sunsetl + Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 1) + + + m4sunsetm + Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 2) + + + m4sunsetn + Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 3) + + + m4sunseto + Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 4) + + + m4sunsetp + Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 5) + + + m4sunsetq + Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 6) + + + m4sunsetr + Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 7) + + + m4sunsets + Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 8) + + + m4sunsett + Sunset Boulevard (Barcrest) (MPU4) (SB__ 1.0, set 9) + + + m4supbf + Super Bucks Fizz Club (Barcrest) (MPU4) (set 1) + + + m4supbfa + Super Bucks Fizz Club (Barcrest) (MPU4) (set 2) + + + m4supbjc + Super Blackjack Club (Barcrest) (MPU4) (set 1) + + + m4supbjca + Super Blackjack Club (Barcrest) (MPU4) (set 2) + + + m4supbjcb + Super Blackjack Club (Barcrest) (MPU4) (set 3) + + + m4supbjcc + Super Blackjack Club (Barcrest) (MPU4) (set 4) + + + m4supbjcd + Super Blackjack Club (Barcrest) (MPU4) (set 5) + + + m4supfru + Supafruits (Union) (MPU4, set 1) + + + m4supfrua + Supafruits (Union) (MPU4, set 2) + + + m4suphv + Super Hyper Viper (Barcrest) (MPU4) (set 1) + + + m4suphv__a + Super Hyper Viper (Barcrest) (MPU4) (set 2) + + + m4suphv__b + Super Hyper Viper (Barcrest) (MPU4) (set 3) + + + m4suphv__c + Super Hyper Viper (Barcrest) (MPU4) (set 4) + + + m4suphv__d + Super Hyper Viper (Barcrest) (MPU4) (set 5) + + + m4suphv__e + Super Hyper Viper (Barcrest) (MPU4) (set 6) + + + m4suphv__f + Super Hyper Viper (Barcrest) (MPU4) (set 7) + + + m4suphv__g + Super Hyper Viper (Barcrest) (MPU4) (set 8) + + + m4suphv__h + Super Hyper Viper (Barcrest) (MPU4) (set 9) + + + m4suphv__i + Super Hyper Viper (Barcrest) (MPU4) (set 10) + + + m4suphv__j + Super Hyper Viper (Barcrest) (MPU4) (set 11) + + + m4suphv__k + Super Hyper Viper (Barcrest) (MPU4) (set 12) + + + m4suphv__l + Super Hyper Viper (Barcrest) (MPU4) (set 13) + + + m4suphv__m + Super Hyper Viper (Barcrest) (MPU4) (set 14) + + + m4suphv__n + Super Hyper Viper (Barcrest) (MPU4) (set 15) + + + m4suphv__o + Super Hyper Viper (Barcrest) (MPU4) (set 16) + + + m4suphv__p + Super Hyper Viper (Barcrest) (MPU4) (set 17) + + + m4supjst + Super Jester (Pcp) (MPU4) (set 1) + + + m4supjsta + Super Jester (Pcp) (MPU4) (set 2) + + + m4supjstb + Super Jester (Pcp) (MPU4) (set 3) + + + m4supjstc + Super Jester (Pcp) (MPU4) (set 4) + + + m4supjstd + Super Jester (Pcp) (MPU4) (set 5) + + + m4supjste + Super Jester (Pcp) (MPU4) (set 6) + + + m4supleg + Super League (Bwb) (MPU4) (set 1) + + + m4supleg__a + Super League (Bwb) (MPU4) (set 2) + + + m4supleg__b + Super League (Bwb) (MPU4) (set 3) + + + m4supleg__c + Super League (Bwb) (MPU4) (set 4) + + + m4supleg__d + Super League (Bwb) (MPU4) (set 5) + + + m4suplegw + Super League (Whitbread / Bwb) (MPU4) + + + m4supscr + Super Soccer (Bwb) (MPU4) (set 1) + + + m4supscr__a + Super Soccer (Bwb) (MPU4) (set 2) + + + m4supscr__b + Super Soccer (Bwb) (MPU4) (set 3) + + + m4supscr__c + Super Soccer (Bwb) (MPU4) (set 4) + + + m4supscr__d + Super Soccer (Bwb) (MPU4) (set 5) + + + m4supscr__e + Super Soccer (Bwb) (MPU4) (set 6) + + + m4supscr__f + Super Soccer (Bwb) (MPU4) (set 7) + + + m4supscr__g + Super Soccer (Bwb) (MPU4) (set 8) + + + m4supscr__h + Super Soccer (Bwb) (MPU4) (set 9) + + + m4supscr__i + Super Soccer (Bwb) (MPU4) (set 10) + + + m4supscr__j + Super Soccer (Bwb) (MPU4) (set 11) + + + m4supscr__k + Super Soccer (Bwb) (MPU4) (set 12) + + + m4supscr__l + Super Soccer (Bwb) (MPU4) (set 13) + + + m4supscr__m + Super Soccer (Bwb) (MPU4) (set 14) + + + m4supscr__n + Super Soccer (Bwb) (MPU4) (set 15) + + + m4supsl + Supa Silva (Barcrest) (MPU4) + + + m4supslt + Supa Slot (Barcrest) (MPU4) + + + m4supst + Super Streak (Barcrest) (MPU4) (set 1) + + + m4supst__0 + Super Streak (Barcrest) (MPU4) (set 28) + + + m4supst__1 + Super Streak (Barcrest) (MPU4) (set 29) + + + m4supst__2 + Super Streak (Barcrest) (MPU4) (set 30) + + + m4supst__3 + Super Streak (Barcrest) (MPU4) (set 31) + + + m4supst__4 + Super Streak (Barcrest) (MPU4) (set 32) + + + m4supst__5 + Super Streak (Barcrest) (MPU4) (set 33) + + + m4supst__6 + Super Streak (Barcrest) (MPU4) (set 34) + + + m4supst__7 + Super Streak (Barcrest) (MPU4) (set 35) + + + m4supst__8 + Super Streak (Barcrest) (MPU4) (set 36) + + + m4supst__9 + Super Streak (Barcrest) (MPU4) (set 37) + + + m4supst__a + Super Streak (Barcrest) (MPU4) (set 2) + + + m4supst__a0 + Super Streak (Barcrest) (MPU4) (set 64) + + + m4supst__a1 + Super Streak (Barcrest) (MPU4) (set 65) + + + m4supst__a2 + Super Streak (Barcrest) (MPU4) (set 66) + + + m4supst__a3 + Super Streak (Barcrest) (MPU4) (set 67) + + + m4supst__a4 + Super Streak (Barcrest) (MPU4) (set 68) + + + m4supst__a5 + Super Streak (Barcrest) (MPU4) (set 69) + + + m4supst__a6 + Super Streak (Barcrest) (MPU4) (set 70) + + + m4supst__a7 + Super Streak (Barcrest) (MPU4) (set 71) + + + m4supst__a8 + Super Streak (Barcrest) (MPU4) (set 72) + + + m4supst__a9 + Super Streak (Barcrest) (MPU4) (set 73) + + + m4supst__aa + Super Streak (Barcrest) (MPU4) (set 38) + + + m4supst__ab + Super Streak (Barcrest) (MPU4) (set 39) + + + m4supst__ac + Super Streak (Barcrest) (MPU4) (set 40) + + + m4supst__ad + Super Streak (Barcrest) (MPU4) (set 41) + + + m4supst__ae + Super Streak (Barcrest) (MPU4) (set 42) + + + m4supst__af + Super Streak (Barcrest) (MPU4) (set 43) + + + m4supst__ag + Super Streak (Barcrest) (MPU4) (set 44) + + + m4supst__ah + Super Streak (Barcrest) (MPU4) (set 45) + + + m4supst__ai + Super Streak (Barcrest) (MPU4) (set 46) + + + m4supst__aj + Super Streak (Barcrest) (MPU4) (set 47) + + + m4supst__ak + Super Streak (Barcrest) (MPU4) (set 48) + + + m4supst__al + Super Streak (Barcrest) (MPU4) (set 49) + + + m4supst__am + Super Streak (Barcrest) (MPU4) (set 50) + + + m4supst__an + Super Streak (Barcrest) (MPU4) (set 51) + + + m4supst__ao + Super Streak (Barcrest) (MPU4) (set 52) + + + m4supst__ap + Super Streak (Barcrest) (MPU4) (set 53) + + + m4supst__aq + Super Streak (Barcrest) (MPU4) (set 54) + + + m4supst__ar + Super Streak (Barcrest) (MPU4) (set 55) + + + m4supst__as + Super Streak (Barcrest) (MPU4) (set 56) + + + m4supst__at + Super Streak (Barcrest) (MPU4) (set 57) + + + m4supst__au + Super Streak (Barcrest) (MPU4) (set 58) + + + m4supst__av + Super Streak (Barcrest) (MPU4) (set 59) + + + m4supst__aw + Super Streak (Barcrest) (MPU4) (set 60) + + + m4supst__ax + Super Streak (Barcrest) (MPU4) (set 61) + + + m4supst__ay + Super Streak (Barcrest) (MPU4) (set 62) + + + m4supst__az + Super Streak (Barcrest) (MPU4) (set 63) + + + m4supst__b + Super Streak (Barcrest) (MPU4) (set 3) + + + m4supst__b0 + Super Streak (Barcrest) (MPU4) (set 100) + + + m4supst__b1 + Super Streak (Barcrest) (MPU4) (set 101) + + + m4supst__b2 + Super Streak (Barcrest) (MPU4) (set 102) + + + m4supst__b3 + Super Streak (Barcrest) (MPU4) (set 103) + + + m4supst__b4 + Super Streak (Barcrest) (MPU4) (set 104) + + + m4supst__b5 + Super Streak (Barcrest) (MPU4) (set 105) + + + m4supst__ba + Super Streak (Barcrest) (MPU4) (set 74) + + + m4supst__bb + Super Streak (Barcrest) (MPU4) (set 75) + + + m4supst__bc + Super Streak (Barcrest) (MPU4) (set 76) + + + m4supst__bd + Super Streak (Barcrest) (MPU4) (set 77) + + + m4supst__be + Super Streak (Barcrest) (MPU4) (set 78) + + + m4supst__bf + Super Streak (Barcrest) (MPU4) (set 79) + + + m4supst__bg + Super Streak (Barcrest) (MPU4) (set 80) + + + m4supst__bh + Super Streak (Barcrest) (MPU4) (set 81) + + + m4supst__bi + Super Streak (Barcrest) (MPU4) (set 82) + + + m4supst__bj + Super Streak (Barcrest) (MPU4) (set 83) + + + m4supst__bk + Super Streak (Barcrest) (MPU4) (set 84) + + + m4supst__bl + Super Streak (Barcrest) (MPU4) (set 85) + + + m4supst__bm + Super Streak (Barcrest) (MPU4) (set 86) + + + m4supst__bn + Super Streak (Barcrest) (MPU4) (set 87) + + + m4supst__bo + Super Streak (Barcrest) (MPU4) (set 88) + + + m4supst__bp + Super Streak (Barcrest) (MPU4) (set 89) + + + m4supst__bq + Super Streak (Barcrest) (MPU4) (set 90) + + + m4supst__br + Super Streak (Barcrest) (MPU4) (set 91) + + + m4supst__bs + Super Streak (Barcrest) (MPU4) (set 92) + + + m4supst__bt + Super Streak (Barcrest) (MPU4) (set 93) + + + m4supst__bu + Super Streak (Barcrest) (MPU4) (set 94) + + + m4supst__bv + Super Streak (Barcrest) (MPU4) (set 95) + + + m4supst__bw + Super Streak (Barcrest) (MPU4) (set 96) + + + m4supst__bx + Super Streak (Barcrest) (MPU4) (set 97) + + + m4supst__by + Super Streak (Barcrest) (MPU4) (set 98) + + + m4supst__bz + Super Streak (Barcrest) (MPU4) (set 99) + + + m4supst__c + Super Streak (Barcrest) (MPU4) (set 4) + + + m4supst__d + Super Streak (Barcrest) (MPU4) (set 5) + + + m4supst__e + Super Streak (Barcrest) (MPU4) (set 6) + + + m4supst__f + Super Streak (Barcrest) (MPU4) (set 7) + + + m4supst__g + Super Streak (Barcrest) (MPU4) (set 8) + + + m4supst__h + Super Streak (Barcrest) (MPU4) (set 9) + + + m4supst__i + Super Streak (Barcrest) (MPU4) (set 10) + + + m4supst__j + Super Streak (Barcrest) (MPU4) (set 11) + + + m4supst__k + Super Streak (Barcrest) (MPU4) (set 12) + + + m4supst__l + Super Streak (Barcrest) (MPU4) (set 13) + + + m4supst__m + Super Streak (Barcrest) (MPU4) (set 14) + + + m4supst__n + Super Streak (Barcrest) (MPU4) (set 15) + + + m4supst__o + Super Streak (Barcrest) (MPU4) (set 16) + + + m4supst__p + Super Streak (Barcrest) (MPU4) (set 17) + + + m4supst__q + Super Streak (Barcrest) (MPU4) (set 18) + + + m4supst__r + Super Streak (Barcrest) (MPU4) (set 19) + + + m4supst__s + Super Streak (Barcrest) (MPU4) (set 20) + + + m4supst__t + Super Streak (Barcrest) (MPU4) (set 21) + + + m4supst__u + Super Streak (Barcrest) (MPU4) (set 22) + + + m4supst__v + Super Streak (Barcrest) (MPU4) (set 23) + + + m4supst__w + Super Streak (Barcrest) (MPU4) (set 24) + + + m4supst__x + Super Streak (Barcrest) (MPU4) (set 25) + + + m4supst__y + Super Streak (Barcrest) (MPU4) (set 26) + + + m4supst__z + Super Streak (Barcrest) (MPU4) (set 27) + + + m4suptrn + Supatron (Barcrest) (MPU4) + + + m4suptub + Super Tubes (Barcrest) (MPU4) (S4T 1.0, set 1)) + + + m4suptuba + Super Tubes (Barcrest) (MPU4) (S4T 1.0, set 2) + + + m4suptwo + Super Two (Barcrest) (MPU4) + + + m4sure + Sure Thing (Bwb) (MPU4) (set 1) + + + m4sure__a + Sure Thing (Bwb) (MPU4) (set 2) + + + m4sure__b + Sure Thing (Bwb) (MPU4) (set 3) + + + m4sure__c + Sure Thing (Bwb) (MPU4) (set 4) + + + m4surf + Super Surfin' (Gemini) (MPU4) (set 1) + + + m4surfa + Super Surfin' (Gemini) (MPU4) (set 2) + + + m4surfb + Super Surfin' (Gemini) (MPU4) (set 3) + + + m4swpnot + Swap-A-Note (Barcrest) (v3.3) (MPU4) + + + m4swpnota + Swap-A-Note (Barcrest) (v3.2D) (MPU4) + + + m4t266 + unknown MPU4 'TTO 1.1' (MPU4?) + + + m4taj + Taj Mahal (Barcrest) (Dutch) (MPU4) + + + m4take2 + Take Two (Barcrest) (MPU4) (TTO 1.2) + + + m4take2a + Take Two (Barcrest) (MPU4) (TTO 1.1) + + + m4take5 + Take 5 (Barcrest) (MPU4) + + + m4takepk + Take Your Pick (Barcrest) (MPU4) (set 1) + + + m4takepk__0 + Take Your Pick (Barcrest) (MPU4) (set 28) + + + m4takepk__1 + Take Your Pick (Barcrest) (MPU4) (set 29) + + + m4takepk__a + Take Your Pick (Barcrest) (MPU4) (set 2) + + + m4takepk__b + Take Your Pick (Barcrest) (MPU4) (set 3) + + + m4takepk__c + Take Your Pick (Barcrest) (MPU4) (set 4) + + + m4takepk__d + Take Your Pick (Barcrest) (MPU4) (set 5) + + + m4takepk__e + Take Your Pick (Barcrest) (MPU4) (set 6) + + + m4takepk__f + Take Your Pick (Barcrest) (MPU4) (set 7) + + + m4takepk__g + Take Your Pick (Barcrest) (MPU4) (set 8) + + + m4takepk__h + Take Your Pick (Barcrest) (MPU4) (set 9) + + + m4takepk__i + Take Your Pick (Barcrest) (MPU4) (set 10) + + + m4takepk__j + Take Your Pick (Barcrest) (MPU4) (set 11) + + + m4takepk__k + Take Your Pick (Barcrest) (MPU4) (set 12) + + + m4takepk__l + Take Your Pick (Barcrest) (MPU4) (set 13) + + + m4takepk__m + Take Your Pick (Barcrest) (MPU4) (set 14) + + + m4takepk__n + Take Your Pick (Barcrest) (MPU4) (set 15) + + + m4takepk__o + Take Your Pick (Barcrest) (MPU4) (set 16) + + + m4takepk__p + Take Your Pick (Barcrest) (MPU4) (set 17) + + + m4takepk__q + Take Your Pick (Barcrest) (MPU4) (set 18) + + + m4takepk__r + Take Your Pick (Barcrest) (MPU4) (set 19) + + + m4takepk__s + Take Your Pick (Barcrest) (MPU4) (set 20) + + + m4takepk__t + Take Your Pick (Barcrest) (MPU4) (set 21) + + + m4takepk__u + Take Your Pick (Barcrest) (MPU4) (set 22) + + + m4takepk__v + Take Your Pick (Barcrest) (MPU4) (set 23) + + + m4takepk__w + Take Your Pick (Barcrest) (MPU4) (set 24) + + + m4takepk__x + Take Your Pick (Barcrest) (MPU4) (set 25) + + + m4takepk__y + Take Your Pick (Barcrest) (MPU4) (set 26) + + + m4takepk__z + Take Your Pick (Barcrest) (MPU4) (set 27) + + + m4tbplay + Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 1) + + + m4tbplaya + Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 2) + + + m4tbplayb + Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 3) + + + m4tbreel + Turbo Reel (Barcrest) (Dutch) (MPU4) (set 1) + + + m4tbrldx + Turbo Reel (Barcrest) (Dutch) (MPU4) (set 3, Deluxe?) + + + m4techno + Techno Reel (Barcrest) (MPU4) (DTE) (set 1) + + + m4technoa + Techno Reel (Barcrest) (MPU4) (DTE) (set 2) + + + m4tenten + 10 X 10 (Barcrest) (MPU4) (set 1) + + + m4tenten__0 + 10 X 10 (Barcrest) (MPU4) (set 28) + + + m4tenten__1 + 10 X 10 (Barcrest) (MPU4) (set 29) + + + m4tenten__2 + 10 X 10 (Barcrest) (MPU4) (set 30) + + + m4tenten__3 + 10 X 10 (Barcrest) (MPU4) (set 31) + + + m4tenten__4 + 10 X 10 (Barcrest) (MPU4) (set 32) + + + m4tenten__5 + 10 X 10 (Barcrest) (MPU4) (set 33) + + + m4tenten__6 + 10 X 10 (Barcrest) (MPU4) (set 34) + + + m4tenten__7 + 10 X 10 (Barcrest) (MPU4) (set 35) + + + m4tenten__8 + 10 X 10 (Barcrest) (MPU4) (set 36) + + + m4tenten__9 + 10 X 10 (Barcrest) (MPU4) (set 37) + + + m4tenten__a + 10 X 10 (Barcrest) (MPU4) (set 2) + + + m4tenten__a0 + 10 X 10 (Barcrest) (MPU4) (set 64) + + + m4tenten__a1 + 10 X 10 (Barcrest) (MPU4) (set 65) + + + m4tenten__a2 + 10 X 10 (Barcrest) (MPU4) (set 66) + + + m4tenten__aa + 10 X 10 (Barcrest) (MPU4) (set 38) + + + m4tenten__ab + 10 X 10 (Barcrest) (MPU4) (set 39) + + + m4tenten__ac + 10 X 10 (Barcrest) (MPU4) (set 40) + + + m4tenten__ad + 10 X 10 (Barcrest) (MPU4) (set 41) + + + m4tenten__ae + 10 X 10 (Barcrest) (MPU4) (set 42) + + + m4tenten__af + 10 X 10 (Barcrest) (MPU4) (set 43) + + + m4tenten__ag + 10 X 10 (Barcrest) (MPU4) (set 44) + + + m4tenten__ah + 10 X 10 (Barcrest) (MPU4) (set 45) + + + m4tenten__ai + 10 X 10 (Barcrest) (MPU4) (set 46) + + + m4tenten__aj + 10 X 10 (Barcrest) (MPU4) (set 47) + + + m4tenten__ak + 10 X 10 (Barcrest) (MPU4) (set 48) + + + m4tenten__al + 10 X 10 (Barcrest) (MPU4) (set 49) + + + m4tenten__am + 10 X 10 (Barcrest) (MPU4) (set 50) + + + m4tenten__an + 10 X 10 (Barcrest) (MPU4) (set 51) + + + m4tenten__ao + 10 X 10 (Barcrest) (MPU4) (set 52) + + + m4tenten__ap + 10 X 10 (Barcrest) (MPU4) (set 53) + + + m4tenten__aq + 10 X 10 (Barcrest) (MPU4) (set 54) + + + m4tenten__ar + 10 X 10 (Barcrest) (MPU4) (set 55) + + + m4tenten__as + 10 X 10 (Barcrest) (MPU4) (set 56) + + + m4tenten__at + 10 X 10 (Barcrest) (MPU4) (set 57) + + + m4tenten__au + 10 X 10 (Barcrest) (MPU4) (set 58) + + + m4tenten__av + 10 X 10 (Barcrest) (MPU4) (set 59) + + + m4tenten__aw + 10 X 10 (Barcrest) (MPU4) (set 60) + + + m4tenten__ax + 10 X 10 (Barcrest) (MPU4) (set 61) + + + m4tenten__ay + 10 X 10 (Barcrest) (MPU4) (set 62) + + + m4tenten__az + 10 X 10 (Barcrest) (MPU4) (set 63) + + + m4tenten__b + 10 X 10 (Barcrest) (MPU4) (set 3) + + + m4tenten__c + 10 X 10 (Barcrest) (MPU4) (set 4) + + + m4tenten__d + 10 X 10 (Barcrest) (MPU4) (set 5) + + + m4tenten__e + 10 X 10 (Barcrest) (MPU4) (set 6) + + + m4tenten__f + 10 X 10 (Barcrest) (MPU4) (set 7) + + + m4tenten__g + 10 X 10 (Barcrest) (MPU4) (set 8) + + + m4tenten__h + 10 X 10 (Barcrest) (MPU4) (set 9) + + + m4tenten__i + 10 X 10 (Barcrest) (MPU4) (set 10) + + + m4tenten__j + 10 X 10 (Barcrest) (MPU4) (set 11) + + + m4tenten__k + 10 X 10 (Barcrest) (MPU4) (set 12) + + + m4tenten__l + 10 X 10 (Barcrest) (MPU4) (set 13) + + + m4tenten__m + 10 X 10 (Barcrest) (MPU4) (set 14) + + + m4tenten__n + 10 X 10 (Barcrest) (MPU4) (set 15) + + + m4tenten__o + 10 X 10 (Barcrest) (MPU4) (set 16) + + + m4tenten__p + 10 X 10 (Barcrest) (MPU4) (set 17) + + + m4tenten__q + 10 X 10 (Barcrest) (MPU4) (set 18) + + + m4tenten__r + 10 X 10 (Barcrest) (MPU4) (set 19) + + + m4tenten__s + 10 X 10 (Barcrest) (MPU4) (set 20) + + + m4tenten__t + 10 X 10 (Barcrest) (MPU4) (set 21) + + + m4tenten__u + 10 X 10 (Barcrest) (MPU4) (set 22) + + + m4tenten__v + 10 X 10 (Barcrest) (MPU4) (set 23) + + + m4tenten__w + 10 X 10 (Barcrest) (MPU4) (set 24) + + + m4tenten__x + 10 X 10 (Barcrest) (MPU4) (set 25) + + + m4tenten__y + 10 X 10 (Barcrest) (MPU4) (set 26) + + + m4tenten__z + 10 X 10 (Barcrest) (MPU4) (set 27) + + + m4thehit + The Hit (Barcrest) (MPU4) + + + m4themob + The Mob (Mdm) (MPU4, set 1) + + + m4themoba + The Mob (Mdm) (MPU4, set 2) + + + m4themobb + The Mob (Mdm) (MPU4, set 3) + + + m4thestr + The Streak (Barcrest) (MPU4) (set 1) + + + m4thestr__a + The Streak (Barcrest) (MPU4) (set 2) + + + m4thestr__b + The Streak (Barcrest) (MPU4) (set 3) + + + m4thestr__c + The Streak (Barcrest) (MPU4) (set 4) + + + m4thestr__d + The Streak (Barcrest) (MPU4) (set 5) + + + m4thestr__e + The Streak (Barcrest) (MPU4) (set 6) + + + m4thestr__f + The Streak (Barcrest) (MPU4) (set 7) + + + m4thestr__g + The Streak (Barcrest) (MPU4) (set 8) + + + m4thestr__h + The Streak (Barcrest) (MPU4) (set 9) + + + m4thestr__i + The Streak (Barcrest) (MPU4) (set 10) + + + m4thestr__j + The Streak (Barcrest) (MPU4) (set 11) + + + m4thestr__k + The Streak (Barcrest) (MPU4) (set 12) + + + m4thestr__l + The Streak (Barcrest) (MPU4) (set 13) + + + m4thestr__m + The Streak (Barcrest) (MPU4) (set 14) + + + m4thestr__n + The Streak (Barcrest) (MPU4) (set 15) + + + m4thestr__o + The Streak (Barcrest) (MPU4) (set 16) + + + m4thestr__p + The Streak (Barcrest) (MPU4) (set 17) + + + m4thestr__q + The Streak (Barcrest) (MPU4) (set 18) + + + m4thestr__r + The Streak (Barcrest) (MPU4) (set 19) + + + m4thestr__s + The Streak (Barcrest) (MPU4) (set 20) + + + m4thestr__t + The Streak (Barcrest) (MPU4) (set 21) + + + m4thestr__u + The Streak (Barcrest) (MPU4) (set 22) + + + m4thestr__v + The Streak (Barcrest) (MPU4) (set 23) + + + m4thestr__w + The Streak (Barcrest) (MPU4) (set 24) + + + m4thestr__x + The Streak (Barcrest) (MPU4) (set 25) + + + m4thestr__y + The Streak (Barcrest) (MPU4) (set 26) + + + m4tic + Tic Tac Toe (Barcrest) (MPU4) (set 1) + + + m4tic__a + Tic Tac Toe (Barcrest) (MPU4) (set 2) + + + m4tic__b + Tic Tac Toe (Barcrest) (MPU4) (set 3) + + + m4tic__c + Tic Tac Toe (Barcrest) (MPU4) (set 4) + + + m4tic__d + Tic Tac Toe (Barcrest) (MPU4) (set 5) + + + m4tic__e + Tic Tac Toe (Barcrest) (MPU4) (set 6) + + + m4tic__f + Tic Tac Toe (Barcrest) (MPU4) (set 7) + + + m4tic__g + Tic Tac Toe (Barcrest) (MPU4) (set 8) + + + m4tic__h + Tic Tac Toe (Barcrest) (MPU4) (set 9) + + + m4tic__i + Tic Tac Toe (Barcrest) (MPU4) (set 10) + + + m4tic__j + Tic Tac Toe (Barcrest) (MPU4) (set 11) + + + m4tic__k + Tic Tac Toe (Barcrest) (MPU4) (set 12) + + + m4tic__l + Tic Tac Toe (Barcrest) (MPU4) (set 13) + + + m4tic__m + Tic Tac Toe (Barcrest) (MPU4) (set 14) + + + m4tic__n + Tic Tac Toe (Barcrest) (MPU4) (set 15) + + + m4tic__o + Tic Tac Toe (Barcrest) (MPU4) (set 16) + + + m4tic__p + Tic Tac Toe (Barcrest) (MPU4) (set 17) + + + m4tic__r + Tic Tac Toe (Barcrest) (MPU4) (set 18) + + + m4tic__s + Tic Tac Toe (Barcrest) (MPU4) (set 19) + + + m4ticcla + Tic Tac Toe Classic (Barcrest) (MPU4) (set 1) + + + m4ticcla__0 + Tic Tac Toe Classic (Barcrest) (MPU4) (set 28) + + + m4ticcla__a + Tic Tac Toe Classic (Barcrest) (MPU4) (set 2) + + + m4ticcla__b + Tic Tac Toe Classic (Barcrest) (MPU4) (set 3) + + + m4ticcla__c + Tic Tac Toe Classic (Barcrest) (MPU4) (set 4) + + + m4ticcla__d + Tic Tac Toe Classic (Barcrest) (MPU4) (set 5) + + + m4ticcla__e + Tic Tac Toe Classic (Barcrest) (MPU4) (set 6) + + + m4ticcla__f + Tic Tac Toe Classic (Barcrest) (MPU4) (set 7) + + + m4ticcla__g + Tic Tac Toe Classic (Barcrest) (MPU4) (set 8) + + + m4ticcla__h + Tic Tac Toe Classic (Barcrest) (MPU4) (set 9) + + + m4ticcla__i + Tic Tac Toe Classic (Barcrest) (MPU4) (set 10) + + + m4ticcla__j + Tic Tac Toe Classic (Barcrest) (MPU4) (set 11) + + + m4ticcla__k + Tic Tac Toe Classic (Barcrest) (MPU4) (set 12) + + + m4ticcla__l + Tic Tac Toe Classic (Barcrest) (MPU4) (set 13) + + + m4ticcla__m + Tic Tac Toe Classic (Barcrest) (MPU4) (set 14) + + + m4ticcla__n + Tic Tac Toe Classic (Barcrest) (MPU4) (set 15) + + + m4ticcla__o + Tic Tac Toe Classic (Barcrest) (MPU4) (set 16) + + + m4ticcla__p + Tic Tac Toe Classic (Barcrest) (MPU4) (set 17) + + + m4ticcla__q + Tic Tac Toe Classic (Barcrest) (MPU4) (set 18) + + + m4ticcla__r + Tic Tac Toe Classic (Barcrest) (MPU4) (set 19) + + + m4ticcla__s + Tic Tac Toe Classic (Barcrest) (MPU4) (set 20) + + + m4ticcla__t + Tic Tac Toe Classic (Barcrest) (MPU4) (set 21) + + + m4ticcla__u + Tic Tac Toe Classic (Barcrest) (MPU4) (set 22) + + + m4ticcla__v + Tic Tac Toe Classic (Barcrest) (MPU4) (set 23) + + + m4ticcla__w + Tic Tac Toe Classic (Barcrest) (MPU4) (set 24) + + + m4ticcla__x + Tic Tac Toe Classic (Barcrest) (MPU4) (set 25) + + + m4ticcla__y + Tic Tac Toe Classic (Barcrest) (MPU4) (set 26) + + + m4ticcla__z + Tic Tac Toe Classic (Barcrest) (MPU4) (set 27) + + + m4ticglc + Tic Tac Toe Gold (Barcrest) (MPU4) (set 1) + + + m4ticglc__a + Tic Tac Toe Gold (Barcrest) (MPU4) (set 2) + + + m4ticglc__b + Tic Tac Toe Gold (Barcrest) (MPU4) (set 3) + + + m4ticglc__c + Tic Tac Toe Gold (Barcrest) (MPU4) (set 4) + + + m4ticglc__d + Tic Tac Toe Gold (Barcrest) (MPU4) (set 5) + + + m4tiktak + Tic Tak Cash (Barcrest) (MPU4) + + + m4toma + Tomahawk (Barcrest) (MPU4) + + + m4toot + Ten Out Of Ten (Barcrest) (MPU4) (set 1) + + + m4toot__0 + Ten Out Of Ten (Barcrest) (MPU4) (set 28) + + + m4toot__1 + Ten Out Of Ten (Barcrest) (MPU4) (set 29) + + + m4toot__2 + Ten Out Of Ten (Barcrest) (MPU4) (set 30) + + + m4toot__3 + Ten Out Of Ten (Barcrest) (MPU4) (set 31) + + + m4toot__4 + Ten Out Of Ten (Barcrest) (MPU4) (set 32) + + + m4toot__5 + Ten Out Of Ten (Barcrest) (MPU4) (set 33) + + + m4toot__6 + Ten Out Of Ten (Barcrest) (MPU4) (set 34) + + + m4toot__7 + Ten Out Of Ten (Barcrest) (MPU4) (set 35) + + + m4toot__8 + Ten Out Of Ten (Barcrest) (MPU4) (set 36) + + + m4toot__9 + Ten Out Of Ten (Barcrest) (MPU4) (set 37) + + + m4toot__a + Ten Out Of Ten (Barcrest) (MPU4) (set 2) + + + m4toot__aa + Ten Out Of Ten (Barcrest) (MPU4) (set 38) + + + m4toot__ab + Ten Out Of Ten (Barcrest) (MPU4) (set 39) + + + m4toot__ac + Ten Out Of Ten (Barcrest) (MPU4) (set 40) + + + m4toot__ad + Ten Out Of Ten (Barcrest) (MPU4) (set 41) + + + m4toot__ae + Ten Out Of Ten (Barcrest) (MPU4) (set 42) + + + m4toot__af + Ten Out Of Ten (Barcrest) (MPU4) (set 43) + + + m4toot__ag + Ten Out Of Ten (Barcrest) (MPU4) (set 44) + + + m4toot__ah + Ten Out Of Ten (Barcrest) (MPU4) (set 45) + + + m4toot__ai + Ten Out Of Ten (Barcrest) (MPU4) (set 46) + + + m4toot__aj + Ten Out Of Ten (Barcrest) (MPU4) (set 47) + + + m4toot__ak + Ten Out Of Ten (Barcrest) (MPU4) (set 48) + + + m4toot__al + Ten Out Of Ten (Barcrest) (MPU4) (set 49) + + + m4toot__b + Ten Out Of Ten (Barcrest) (MPU4) (set 3) + + + m4toot__c + Ten Out Of Ten (Barcrest) (MPU4) (set 4) + + + m4toot__d + Ten Out Of Ten (Barcrest) (MPU4) (set 5) + + + m4toot__e + Ten Out Of Ten (Barcrest) (MPU4) (set 6) + + + m4toot__f + Ten Out Of Ten (Barcrest) (MPU4) (set 7) + + + m4toot__g + Ten Out Of Ten (Barcrest) (MPU4) (set 8) + + + m4toot__h + Ten Out Of Ten (Barcrest) (MPU4) (set 9) + + + m4toot__i + Ten Out Of Ten (Barcrest) (MPU4) (set 10) + + + m4toot__j + Ten Out Of Ten (Barcrest) (MPU4) (set 11) + + + m4toot__k + Ten Out Of Ten (Barcrest) (MPU4) (set 12) + + + m4toot__l + Ten Out Of Ten (Barcrest) (MPU4) (set 13) + + + m4toot__m + Ten Out Of Ten (Barcrest) (MPU4) (set 14) + + + m4toot__n + Ten Out Of Ten (Barcrest) (MPU4) (set 15) + + + m4toot__o + Ten Out Of Ten (Barcrest) (MPU4) (set 16) + + + m4toot__p + Ten Out Of Ten (Barcrest) (MPU4) (set 17) + + + m4toot__q + Ten Out Of Ten (Barcrest) (MPU4) (set 18) + + + m4toot__r + Ten Out Of Ten (Barcrest) (MPU4) (set 19) + + + m4toot__s + Ten Out Of Ten (Barcrest) (MPU4) (set 20) + + + m4toot__t + Ten Out Of Ten (Barcrest) (MPU4) (set 21) + + + m4toot__u + Ten Out Of Ten (Barcrest) (MPU4) (set 22) + + + m4toot__v + Ten Out Of Ten (Barcrest) (MPU4) (set 23) + + + m4toot__w + Ten Out Of Ten (Barcrest) (MPU4) (set 24) + + + m4toot__x + Ten Out Of Ten (Barcrest) (MPU4) (set 25) + + + m4toot__y + Ten Out Of Ten (Barcrest) (MPU4) (set 26) + + + m4toot__z + Ten Out Of Ten (Barcrest) (MPU4) (set 27) + + + m4toot__za + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3, hack?) + + + m4toot__zb + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.4, hack?) + + + m4topact + Top Action (Barcrest) (Dutch) (MPU4) (set 1) + + + m4topacta + Top Action (Barcrest) (Dutch) (MPU4) (set 2) + + + m4topdk + Top Deck (Barcrest) (Dutch) (MPU4) + + + m4topdog + Top Dog (Barcrest) (MPU4) (set 1) + + + m4topdog__a + Top Dog (Barcrest) (MPU4) (set 2) + + + m4topdog__b + Top Dog (Barcrest) (MPU4) (set 3) + + + m4topdog__c + Top Dog (Barcrest) (MPU4) (set 4) + + + m4topdog__d + Top Dog (Barcrest) (MPU4) (set 5) + + + m4topdog__e + Top Dog (Barcrest) (MPU4) (set 6) + + + m4topdog__f + Top Dog (Barcrest) (MPU4) (set 7) + + + m4topdog__g + Top Dog (Barcrest) (MPU4) (set 8) + + + m4topdog__h + Top Dog (Barcrest) (MPU4) (set 9) + + + m4topdog__i + Top Dog (Barcrest) (MPU4) (set 10) + + + m4topdog__j + Top Dog (Barcrest) (MPU4) (set 11) + + + m4topdog__k + Top Dog (Barcrest) (MPU4) (set 12) + + + m4topdog__l + Top Dog (Barcrest) (MPU4) (set 13) + + + m4topdog__m + Top Dog (Barcrest) (MPU4) (set 14) + + + m4topdog__n + Top Dog (Barcrest) (MPU4) (set 15) + + + m4topdog__o + Top Dog (Barcrest) (MPU4) (set 16) + + + m4topdog__p + Top Dog (Barcrest) (MPU4) (set 17) + + + m4topdog__q + Top Dog (Barcrest) (MPU4) (set 18) + + + m4topdog__r + Top Dog (Barcrest) (MPU4) (set 19) + + + m4topdog__s + Top Dog (Barcrest) (MPU4) (set 20) + + + m4topdog__t + Top Dog (Barcrest) (MPU4) (set 21) + + + m4topdog__u + Top Dog (Barcrest) (MPU4) (set 22) + + + m4topdog__v + Top Dog (Barcrest) (MPU4) (set 23) + + + m4topdog__w + Top Dog (Barcrest) (MPU4) (set 24) + + + m4topdog__x + Top Dog (Barcrest) (MPU4) (set 25) + + + m4topdog__y + Top Dog (Barcrest) (MPU4) (set 26) + + + m4topdog__z + Top Dog (Barcrest) (MPU4) (set 27) + + + m4topgr + Top Gear (Barcrest) (MPU4) + + + m4toplot + Top The Lot (Barcrest) (MPU4, T4L 1.0) + + + m4toprn + Top Run (Barcrest) (Dutch) (MPU4) + + + m4topst + Top Stop (Barcrest) (MPU4) + + + m4toptak + Top Take (Barcrest) (MPU4) + + + m4topten + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4) + + + m4topten__0 + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2YD) + + + m4topten__1 + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2H) + + + m4topten__2 + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2K) + + + m4topten__3 + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2R) + + + m4topten__4 + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2) + + + m4topten__5 + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2Y) + + + m4topten__6 + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2AD) + + + m4topten__7 + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2B) + + + m4topten__8 + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2BD) + + + m4topten__9 + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2C) + + + m4topten__a + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0, hack?) + + + m4topten__aa + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2D) + + + m4topten__ab + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2DH) + + + m4topten__ac + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2KD) + + + m4topten__ad + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2RD) + + + m4topten__ae + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2YD) + + + m4topten__af + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2H) + + + m4topten__ag + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2K) + + + m4topten__ah + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2R) + + + m4topten__ai + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2) + + + m4topten__aj + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2Y) + + + m4topten__ak + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4AD) + + + m4topten__al + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4B) + + + m4topten__am + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4BD) + + + m4topten__an + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4C) + + + m4topten__ao + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4D) + + + m4topten__ap + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4DH) + + + m4topten__aq + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4KD) + + + m4topten__ar + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4RD) + + + m4topten__as + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4YD) + + + m4topten__at + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4H) + + + m4topten__au + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4K) + + + m4topten__av + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4R) + + + m4topten__aw + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4Y) + + + m4topten__ax + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.1) + + + m4topten__b + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2, hack?) + + + m4topten__e + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0AD) + + + m4topten__f + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0B) + + + m4topten__g + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0BD) + + + m4topten__h + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0C) + + + m4topten__i + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0D) + + + m4topten__j + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0DH) + + + m4topten__k + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0KD) + + + m4topten__l + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0RD) + + + m4topten__m + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0YD) + + + m4topten__n + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0H) + + + m4topten__o + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0K) + + + m4topten__p + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0R) + + + m4topten__q + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0) + + + m4topten__r + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0Y) + + + m4topten__s + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2AD) + + + m4topten__t + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2B) + + + m4topten__u + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2BD) + + + m4topten__v + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2C) + + + m4topten__w + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2D) + + + m4topten__x + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2DH) + + + m4topten__y + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2KD) + + + m4topten__z + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2RD) + + + m4toptena + Top Tenner (Barcrest) (MPU4, Mod 2 type, TP 2.7) + + + m4toptim + Top Timer (Barcrest) (Dutch) (MPU4) (DTT) (set 1) + + + m4toptima + Top Timer (Barcrest) (Dutch) (MPU4) (DTT) (set 2) + + + m4tornad + Tornado (Qps) (MPU4) (set 1) + + + m4tornad__a + Tornado (Qps) (MPU4) (set 2) + + + m4tornad__b + Tornado (Qps) (MPU4) (set 3) + + + m4tornad__c + Tornado (Qps) (MPU4) (set 4) + + + m4tornad__d + Tornado (Qps) (MPU4) (set 5) + + + m4tornad__e + Tornado (Qps) (MPU4) (set 6) + + + m4tornad__f + Tornado (Qps) (MPU4) (set 7) + + + m4tornad__g + Tornado (Qps) (MPU4) (set 8) + + + m4treel + Turbo Reels (unknown) (MPU4?) (set 1) + + + m4treela + Turbo Reels (unknown) (MPU4?) (set 2) + + + m4trex + Trex (Bwb) (MPU4) (set 1) + + + m4trex__a + Trex (Bwb) (MPU4) (set 2) + + + m4trex__b + Trex (Bwb) (MPU4) (set 3) + + + m4trex__c + Trex (Bwb) (MPU4) (set 4) + + + m4trex__d + Trex (Bwb) (MPU4) (set 5) + + + m4trex__e + Trex (Bwb) (MPU4) (set 6) + + + m4trex__f + Trex (Bwb) (MPU4) (set 7) + + + m4trex__g + Trex (Bwb) (MPU4) (set 8) + + + m4trex__h + Trex (Bwb) (MPU4) (set 9) + + + m4trex__i + Trex (Bwb) (MPU4) (set 10) + + + m4trex__j + Trex (Bwb) (MPU4) (set 11) + + + m4trex__k + Trex (Bwb) (MPU4) (set 12) + + + m4trex__l + Trex (Bwb) (MPU4) (set 13) + + + m4trg + Turbo Reel Gambler (Avantime?) (MPU4) (set 1) + + + m4trg__0 + Turbo Reel Gambler (Avantime?) (MPU4) (set 28) + + + m4trg__1 + Turbo Reel Gambler (Avantime?) (MPU4) (set 29) + + + m4trg__2 + Turbo Reel Gambler (Avantime?) (MPU4) (set 30) + + + m4trg__3 + Turbo Reel Gambler (Avantime?) (MPU4) (set 31) + + + m4trg__4 + Turbo Reel Gambler (Avantime?) (MPU4) (set 32) + + + m4trg__a + Turbo Reel Gambler (Avantime?) (MPU4) (set 2) + + + m4trg__b + Turbo Reel Gambler (Avantime?) (MPU4) (set 3) + + + m4trg__c + Turbo Reel Gambler (Avantime?) (MPU4) (set 4) + + + m4trg__d + Turbo Reel Gambler (Avantime?) (MPU4) (set 5) + + + m4trg__e + Turbo Reel Gambler (Avantime?) (MPU4) (set 6) + + + m4trg__f + Turbo Reel Gambler (Avantime?) (MPU4) (set 7) + + + m4trg__g + Turbo Reel Gambler (Avantime?) (MPU4) (set 8) + + + m4trg__h + Turbo Reel Gambler (Avantime?) (MPU4) (set 9) + + + m4trg__i + Turbo Reel Gambler (Avantime?) (MPU4) (set 10) + + + m4trg__j + Turbo Reel Gambler (Avantime?) (MPU4) (set 11) + + + m4trg__k + Turbo Reel Gambler (Avantime?) (MPU4) (set 12) + + + m4trg__l + Turbo Reel Gambler (Avantime?) (MPU4) (set 13) + + + m4trg__m + Turbo Reel Gambler (Avantime?) (MPU4) (set 14) + + + m4trg__n + Turbo Reel Gambler (Avantime?) (MPU4) (set 15) + + + m4trg__o + Turbo Reel Gambler (Avantime?) (MPU4) (set 16) + + + m4trg__p + Turbo Reel Gambler (Avantime?) (MPU4) (set 17) + + + m4trg__q + Turbo Reel Gambler (Avantime?) (MPU4) (set 18) + + + m4trg__r + Turbo Reel Gambler (Avantime?) (MPU4) (set 19) + + + m4trg__s + Turbo Reel Gambler (Avantime?) (MPU4) (set 20) + + + m4trg__t + Turbo Reel Gambler (Avantime?) (MPU4) (set 21) + + + m4trg__u + Turbo Reel Gambler (Avantime?) (MPU4) (set 22) + + + m4trg__v + Turbo Reel Gambler (Avantime?) (MPU4) (set 23) + + + m4trg__w + Turbo Reel Gambler (Avantime?) (MPU4) (set 24) + + + m4trg__x + Turbo Reel Gambler (Avantime?) (MPU4) (set 25) + + + m4trg__y + Turbo Reel Gambler (Avantime?) (MPU4) (set 26) + + + m4trg__z + Turbo Reel Gambler (Avantime?) (MPU4) (set 27) + + + m4tribnk + Triple Bank (Barcrest) (Dutch) (MPU4) + + + m4tricol + Tricolor (Barcrest) (Dutch) (MPU4) + + + m4tridic + Triple Dice (Barcrest) (Dutch) (MPU4) + + + m4trimad + Triple Madness (Union) (MPU4) + + + m4tropcl + Tropicana Club (Barcrest) (MPU4) (set 1) + + + m4tropcla + Tropicana Club (Barcrest) (MPU4) (set 2) + + + m4tropclb + Tropicana Club (Barcrest) (MPU4) (set 3) + + + m4tropclc + Tropicana Club (Barcrest) (MPU4) (set 4) + + + m4tropcld + Tropicana Club (Barcrest) (MPU4) (set 5) + + + m4tst + MPU4 Unit Test (Program 4) + + + m4tst2 + MPU4 Unit Test (Program 2) + + + m4ttak + Tic Tac Take (unknown) (MPU4) + + + m4ttdia + Ten Ten Do It Again (Barcrest) (MPU4) (set 1) + + + m4ttdia__a + Ten Ten Do It Again (Barcrest) (MPU4) (set 2) + + + m4ttdia__b + Ten Ten Do It Again (Barcrest) (MPU4) (set 3) + + + m4ttdia__c + Ten Ten Do It Again (Barcrest) (MPU4) (set 4) + + + m4ttdia__d + Ten Ten Do It Again (Barcrest) (MPU4) (set 5) + + + m4ttdia__e + Ten Ten Do It Again (Barcrest) (MPU4) (set 6) + + + m4ttdia__f + Ten Ten Do It Again (Barcrest) (MPU4) (set 7) + + + m4ttdia__g + Ten Ten Do It Again (Barcrest) (MPU4) (set 8) + + + m4ttdia__h + Ten Ten Do It Again (Barcrest) (MPU4) (set 9) + + + m4ttdia__i + Ten Ten Do It Again (Barcrest) (MPU4) (set 10) + + + m4ttdia__j + Ten Ten Do It Again (Barcrest) (MPU4) (set 11) + + + m4ttdia__k + Ten Ten Do It Again (Barcrest) (MPU4) (set 12) + + + m4ttdia__l + Ten Ten Do It Again (Barcrest) (MPU4) (set 13) + + + m4ttdia__m + Ten Ten Do It Again (Barcrest) (MPU4) (set 14) + + + m4ttrail + Treasure Trail (Empire) (MPU4, set 1) + + + m4ttraila + Treasure Trail (Empire) (MPU4, set 2) + + + m4ttrailb + Treasure Trail (Empire) (MPU4, set 3) + + + m4tupen + Tuppenny Cracker (Barcrest - Bootleg) (MPU4) + + + m4tutcl + Tutti Fruity Classic (Barcrest) (MPU4) (set 1) + + + m4tutcl__a + Tutti Fruity Classic (Barcrest) (MPU4) (set 2) + + + m4tutcl__b + Tutti Fruity Classic (Barcrest) (MPU4) (set 3) + + + m4tutcl__c + Tutti Fruity Classic (Barcrest) (MPU4) (set 4) + + + m4tutcl__d + Tutti Fruity Classic (Barcrest) (MPU4) (set 5) + + + m4tutcl__e + Tutti Fruity Classic (Barcrest) (MPU4) (set 6) + + + m4tutcl__f + Tutti Fruity Classic (Barcrest) (MPU4) (set 7) + + + m4tutcl__g + Tutti Fruity Classic (Barcrest) (MPU4) (set 8) + + + m4tutcl__h + Tutti Fruity Classic (Barcrest) (MPU4) (set 9) + + + m4tutcl__i + Tutti Fruity Classic (Barcrest) (MPU4) (set 10) + + + m4tutcl__j + Tutti Fruity Classic (Barcrest) (MPU4) (set 11) + + + m4tutcl__k + Tutti Fruity Classic (Barcrest) (MPU4) (set 12) + + + m4tutfrt + Tutti Fruity (Barcrest) (MPU4) (set 1) + + + m4tutfrt__0 + Tutti Fruity (Barcrest) (MPU4) (set 28) + + + m4tutfrt__1 + Tutti Fruity (Barcrest) (MPU4) (set 29) + + + m4tutfrt__2 + Tutti Fruity (Barcrest) (MPU4) (set 30) + + + m4tutfrt__3 + Tutti Fruity (Barcrest) (MPU4) (set 31) + + + m4tutfrt__4 + Tutti Fruity (Barcrest) (MPU4) (set 32) + + + m4tutfrt__5 + Tutti Fruity (Barcrest) (MPU4) (set 33) + + + m4tutfrt__6 + Tutti Fruity (Barcrest) (MPU4) (set 34) + + + m4tutfrt__7 + Tutti Fruity (Barcrest) (MPU4) (set 35) + + + m4tutfrt__8 + Tutti Fruity (Barcrest) (MPU4) (set 36) + + + m4tutfrt__9 + Tutti Fruity (Barcrest) (MPU4) (set 37) + + + m4tutfrt__a + Tutti Fruity (Barcrest) (MPU4) (set 2) + + + m4tutfrt__a0 + Tutti Fruity (Barcrest) (MPU4) (set 64) + + + m4tutfrt__a1 + Tutti Fruity (Barcrest) (MPU4) (set 65) + + + m4tutfrt__a2 + Tutti Fruity (Barcrest) (MPU4) (set 66) + + + m4tutfrt__a3 + Tutti Fruity (Barcrest) (MPU4) (set 67) + + + m4tutfrt__a4 + Tutti Fruity (Barcrest) (MPU4) (set 68) + + + m4tutfrt__a5 + Tutti Fruity (Barcrest) (MPU4) (set 69) + + + m4tutfrt__aa + Tutti Fruity (Barcrest) (MPU4) (set 38) + + + m4tutfrt__ab + Tutti Fruity (Barcrest) (MPU4) (set 39) + + + m4tutfrt__ac + Tutti Fruity (Barcrest) (MPU4) (set 40) + + + m4tutfrt__ad + Tutti Fruity (Barcrest) (MPU4) (set 41) + + + m4tutfrt__ae + Tutti Fruity (Barcrest) (MPU4) (set 42) + + + m4tutfrt__af + Tutti Fruity (Barcrest) (MPU4) (set 43) + + + m4tutfrt__ag + Tutti Fruity (Barcrest) (MPU4) (set 44) + + + m4tutfrt__ai + Tutti Fruity (Barcrest) (MPU4) (set 46) + + + m4tutfrt__aj + Tutti Fruity (Barcrest) (MPU4) (set 47) + + + m4tutfrt__ak + Tutti Fruity (Barcrest) (MPU4) (set 48) + + + m4tutfrt__al + Tutti Fruity (Barcrest) (MPU4) (set 49) + + + m4tutfrt__am + Tutti Fruity (Barcrest) (MPU4) (set 50) + + + m4tutfrt__an + Tutti Fruity (Barcrest) (MPU4) (set 51) + + + m4tutfrt__ao + Tutti Fruity (Barcrest) (MPU4) (set 52) + + + m4tutfrt__ap + Tutti Fruity (Barcrest) (MPU4) (set 53) + + + m4tutfrt__aq + Tutti Fruity (Barcrest) (MPU4) (set 54) + + + m4tutfrt__ar + Tutti Fruity (Barcrest) (MPU4) (set 55) + + + m4tutfrt__as + Tutti Fruity (Barcrest) (MPU4) (set 56) + + + m4tutfrt__at + Tutti Fruity (Barcrest) (MPU4) (set 57) + + + m4tutfrt__au + Tutti Fruity (Barcrest) (MPU4) (set 58) + + + m4tutfrt__av + Tutti Fruity (Barcrest) (MPU4) (set 59) + + + m4tutfrt__aw + Tutti Fruity (Barcrest) (MPU4) (set 60) + + + m4tutfrt__ax + Tutti Fruity (Barcrest) (MPU4) (set 61) + + + m4tutfrt__ay + Tutti Fruity (Barcrest) (MPU4) (set 62) + + + m4tutfrt__az + Tutti Fruity (Barcrest) (MPU4) (set 63) + + + m4tutfrt__b + Tutti Fruity (Barcrest) (MPU4) (set 3) + + + m4tutfrt__c + Tutti Fruity (Barcrest) (MPU4) (set 4) + + + m4tutfrt__d + Tutti Fruity (Barcrest) (MPU4) (set 5) + + + m4tutfrt__e + Tutti Fruity (Barcrest) (MPU4) (set 6) + + + m4tutfrt__f + Tutti Fruity (Barcrest) (MPU4) (set 7) + + + m4tutfrt__g + Tutti Fruity (Barcrest) (MPU4) (set 8) + + + m4tutfrt__h + Tutti Fruity (Barcrest) (MPU4) (set 9) + + + m4tutfrt__i + Tutti Fruity (Barcrest) (MPU4) (set 10) + + + m4tutfrt__j + Tutti Fruity (Barcrest) (MPU4) (set 11) + + + m4tutfrt__k + Tutti Fruity (Barcrest) (MPU4) (set 12) + + + m4tutfrt__l + Tutti Fruity (Barcrest) (MPU4) (set 13) + + + m4tutfrt__m + Tutti Fruity (Barcrest) (MPU4) (set 14) + + + m4tutfrt__n + Tutti Fruity (Barcrest) (MPU4) (set 15) + + + m4tutfrt__o + Tutti Fruity (Barcrest) (MPU4) (set 16) + + + m4tutfrt__p + Tutti Fruity (Barcrest) (MPU4) (set 17) + + + m4tutfrt__q + Tutti Fruity (Barcrest) (MPU4) (set 18) + + + m4tutfrt__r + Tutti Fruity (Barcrest) (MPU4) (set 19) + + + m4tutfrt__s + Tutti Fruity (Barcrest) (MPU4) (set 20) + + + m4tutfrt__t + Tutti Fruity (Barcrest) (MPU4) (set 21) + + + m4tutfrt__u + Tutti Fruity (Barcrest) (MPU4) (set 22) + + + m4tutfrt__v + Tutti Fruity (Barcrest) (MPU4) (set 23) + + + m4tutfrt__w + Tutti Fruity (Barcrest) (MPU4) (set 24) + + + m4tutfrt__x + Tutti Fruity (Barcrest) (MPU4) (set 25) + + + m4tutfrt__y + Tutti Fruity (Barcrest) (MPU4) (set 26) + + + m4tutfrt__z + Tutti Fruity (Barcrest) (MPU4) (set 27) + + + m4twilgt + Twilight (Barcrest) (Dutch) (MPU4) + + + m4twintm + Twin Timer (Barcrest) (MPU4) (D2T 1.1) + + + m4twist + Twist Again (Barcrest) (MPU4) (set 1) + + + m4twista + Twist Again (Barcrest) (MPU4) (set 2) + + + m4twistb + Twist Again (Barcrest) (MPU4) (set 3) + + + m4twstcl + Twister Club (Crystal) (MPU4) (set 1) + + + m4twstcla + Twister Club (Crystal) (MPU4) (set 2) + + + m4twstclb + Twister Club (Crystal) (MPU4) (set 3) + + + m4twstr + Twister (Crystal) (MPU4) (set 1) + + + m4twstra + Twister (Crystal) (MPU4) (set 2) + + + m4twstrb + Twister (Crystal) (MPU4) (set 3) + + + m4twstrc + Twister (Crystal) (MPU4) (set 4) + + + m4twstrd + Twister (Crystal) (MPU4) (set 5) + + + m4tylb + Thank Your Lucky Bars (Crystal) (MPU4) (set 1) + + + m4tylba + Thank Your Lucky Bars (Crystal) (MPU4) (set 2) + + + m4typcl + Take Your Pick Club (Barcrest) (MPU4) (set 1) + + + m4typcl__a + Take Your Pick Club (Barcrest) (MPU4) (set 2) + + + m4typcl__b + Take Your Pick Club (Barcrest) (MPU4) (set 3) + + + m4typcl__c + Take Your Pick Club (Barcrest) (MPU4) (set 4) + + + m4typcl__d + Take Your Pick Club (Barcrest) (MPU4) (set 5) + + + m4unibox + Unibox (Union) (MPU4, set 1) + + + m4uniboxa + Unibox (Union) (MPU4, set 2) + + + m4unique + Unique (Union) (MPU4, set 1) + + + m4uniquep + Unique (Union) (MPU4, set 2) + + + m4univ + Universe (Barcrest) (Dutch) (MPU4) (DUN) + + + m4unkjok + unknown MPU4 'Joker' (MPU4?) (set 1) + + + m4unkjoka + unknown MPU4 'Joker' (MPU4?) (set 2) + + + m4unkjokb + unknown MPU4 'Joker' (MPU4?) (set 3) + + + m4unkjokc + unknown MPU4 'Joker' (MPU4?) (set 4) + + + m4uuaw + Up Up and Away (Barcrest) (MPU4) (set 1) + + + m4uuaw__0 + Up Up and Away (Barcrest) (MPU4) (set 28) + + + m4uuaw__1 + Up Up and Away (Barcrest) (MPU4) (set 29) + + + m4uuaw__2 + Up Up and Away (Barcrest) (MPU4) (set 30) + + + m4uuaw__3 + Up Up and Away (Barcrest) (MPU4) (set 31) + + + m4uuaw__4 + Up Up and Away (Barcrest) (MPU4) (set 32) + + + m4uuaw__5 + Up Up and Away (Barcrest) (MPU4) (set 33) + + + m4uuaw__6 + Up Up and Away (Barcrest) (MPU4) (set 34) + + + m4uuaw__7 + Up Up and Away (Barcrest) (MPU4) (set 35) + + + m4uuaw__8 + Up Up and Away (Barcrest) (MPU4) (set 36) + + + m4uuaw__9 + Up Up and Away (Barcrest) (MPU4) (set 37) + + + m4uuaw__a + Up Up and Away (Barcrest) (MPU4) (set 2) + + + m4uuaw__aa + Up Up and Away (Barcrest) (MPU4) (set 38) + + + m4uuaw__ab + Up Up and Away (Barcrest) (MPU4) (set 39) + + + m4uuaw__ac + Up Up and Away (Barcrest) (MPU4) (set 40) + + + m4uuaw__ad + Up Up and Away (Barcrest) (MPU4) (set 41) + + + m4uuaw__ae + Up Up and Away (Barcrest) (MPU4) (set 42) + + + m4uuaw__af + Up Up and Away (Barcrest) (MPU4) (set 43) + + + m4uuaw__ag + Up Up and Away (Barcrest) (MPU4) (set 44) + + + m4uuaw__ah + Up Up and Away (Barcrest) (MPU4) (set 45) + + + m4uuaw__ai + Up Up and Away (Barcrest) (MPU4) (set 46) + + + m4uuaw__aj + Up Up and Away (Barcrest) (MPU4) (set 47) + + + m4uuaw__ak + Up Up and Away (Barcrest) (MPU4) (set 48) + + + m4uuaw__al + Up Up and Away (Barcrest) (MPU4) (set 49) + + + m4uuaw__am + Up Up and Away (Barcrest) (MPU4) (set 50) + + + m4uuaw__an + Up Up and Away (Barcrest) (MPU4) (set 51) + + + m4uuaw__ao + Up Up and Away (Barcrest) (MPU4) (set 52) + + + m4uuaw__ap + Up Up and Away (Barcrest) (MPU4) (set 53) + + + m4uuaw__aq + Up Up and Away (Barcrest) (MPU4) (set 54) + + + m4uuaw__b + Up Up and Away (Barcrest) (MPU4) (set 3) + + + m4uuaw__c + Up Up and Away (Barcrest) (MPU4) (set 4) + + + m4uuaw__d + Up Up and Away (Barcrest) (MPU4) (set 5) + + + m4uuaw__e + Up Up and Away (Barcrest) (MPU4) (set 6) + + + m4uuaw__f + Up Up and Away (Barcrest) (MPU4) (set 7) + + + m4uuaw__g + Up Up and Away (Barcrest) (MPU4) (set 8) + + + m4uuaw__h + Up Up and Away (Barcrest) (MPU4) (set 9) + + + m4uuaw__i + Up Up and Away (Barcrest) (MPU4) (set 10) + + + m4uuaw__j + Up Up and Away (Barcrest) (MPU4) (set 11) + + + m4uuaw__k + Up Up and Away (Barcrest) (MPU4) (set 12) + + + m4uuaw__l + Up Up and Away (Barcrest) (MPU4) (set 13) + + + m4uuaw__m + Up Up and Away (Barcrest) (MPU4) (set 14) + + + m4uuaw__n + Up Up and Away (Barcrest) (MPU4) (set 15) + + + m4uuaw__o + Up Up and Away (Barcrest) (MPU4) (set 16) + + + m4uuaw__p + Up Up and Away (Barcrest) (MPU4) (set 17) + + + m4uuaw__q + Up Up and Away (Barcrest) (MPU4) (set 18) + + + m4uuaw__r + Up Up and Away (Barcrest) (MPU4) (set 19) + + + m4uuaw__s + Up Up and Away (Barcrest) (MPU4) (set 20) + + + m4uuaw__t + Up Up and Away (Barcrest) (MPU4) (set 21) + + + m4uuaw__u + Up Up and Away (Barcrest) (MPU4) (set 22) + + + m4uuaw__v + Up Up and Away (Barcrest) (MPU4) (set 23) + + + m4uuaw__w + Up Up and Away (Barcrest) (MPU4) (set 24) + + + m4uuaw__x + Up Up and Away (Barcrest) (MPU4) (set 25) + + + m4uuaw__y + Up Up and Away (Barcrest) (MPU4) (set 26) + + + m4uuaw__z + Up Up and Away (Barcrest) (MPU4) (set 27) + + + m4vdexpr + Voodoo Express (Bwb) (MPU4) (set 1) + + + m4vdexpr__a + Voodoo Express (Bwb) (MPU4) (set 2) + + + m4vdexpr__b + Voodoo Express (Bwb) (MPU4) (set 3) + + + m4vdexpr__c + Voodoo Express (Bwb) (MPU4) (set 4) + + + m4vdexpr__d + Voodoo Express (Bwb) (MPU4) (set 5) + + + m4vegast + Vegas Strip (Barcrest) (MPU4) (set 1) + + + m4vegast__a + Vegas Strip (Barcrest) (MPU4) (set 2) + + + m4vegast__b + Vegas Strip (Barcrest) (MPU4) (set 3) + + + m4vegast__c + Vegas Strip (Barcrest) (MPU4) (set 4) + + + m4vegast__d + Vegas Strip (Barcrest) (MPU4) (set 5) + + + m4vegast__e + Vegas Strip (Barcrest) (MPU4) (set 6) + + + m4vegast__f + Vegas Strip (Barcrest) (MPU4) (set 7) + + + m4vegast__g + Vegas Strip (Barcrest) (MPU4) (set 8) + + + m4vegast__h + Vegas Strip (Barcrest) (MPU4) (set 9) + + + m4vegast__i + Vegas Strip (Barcrest) (MPU4) (set 10) + + + m4vegast__j + Vegas Strip (Barcrest) (MPU4) (set 11) + + + m4vegast__k + Vegas Strip (Barcrest) (MPU4) (set 12) + + + m4vegast__l + Vegas Strip (Barcrest) (MPU4) (set 13) + + + m4vegast__m + Vegas Strip (Barcrest) (MPU4) (set 14) + + + m4vegast__n + Vegas Strip (Barcrest) (MPU4) (set 15) + + + m4vegast__o + Vegas Strip (Barcrest) (MPU4) (set 16) + + + m4vegast__p + Vegas Strip (Barcrest) (MPU4) (set 17) + + + m4vegast__q + Vegas Strip (Barcrest) (MPU4) (set 18) + + + m4vegast__r + Vegas Strip (Barcrest) (MPU4) (set 19) + + + m4vegast__s + Vegas Strip (Barcrest) (MPU4) (set 20) + + + m4vegast__t + Vegas Strip (Barcrest) (MPU4) (set 21) + + + m4vegast__u + Vegas Strip (Barcrest) (MPU4) (set 22) + + + m4vegast__v + Vegas Strip (Barcrest) (MPU4) (set 23) + + + m4vegast__w + Vegas Strip (Barcrest) (MPU4) (set 24) + + + m4vegast__x + Vegas Strip (Barcrest) (MPU4) (set 25) + + + m4vegastg + Vegas Strip (Barcrest) [German] (MPU4) + + + m4vfm + Value For Money (Global) (MPU4) + + + m4vivaes + Viva Espana (Barcrest) (MPU4) (set 1) + + + m4vivaes__0 + Viva Espana (Barcrest) (MPU4) (set 28) + + + m4vivaes__1 + Viva Espana (Barcrest) (MPU4) (set 29) + + + m4vivaes__2 + Viva Espana (Barcrest) (MPU4) (set 30) + + + m4vivaes__3 + Viva Espana (Barcrest) (MPU4) (set 31) + + + m4vivaes__4 + Viva Espana (Barcrest) (MPU4) (set 32) + + + m4vivaes__5 + Viva Espana (Barcrest) (MPU4) (set 33) + + + m4vivaes__6 + Viva Espana (Barcrest) (MPU4) (set 34) + + + m4vivaes__7 + Viva Espana (Barcrest) (MPU4) (set 35) + + + m4vivaes__8 + Viva Espana (Barcrest) (MPU4) (set 36) + + + m4vivaes__9 + Viva Espana (Barcrest) (MPU4) (set 37) + + + m4vivaes__a + Viva Espana (Barcrest) (MPU4) (set 2) + + + m4vivaes__aa + Viva Espana (Barcrest) (MPU4) (set 38) + + + m4vivaes__ab + Viva Espana (Barcrest) (MPU4) (set 39) + + + m4vivaes__ac + Viva Espana (Barcrest) (MPU4) (set 40) + + + m4vivaes__ad + Viva Espana (Barcrest) (MPU4) (set 41) + + + m4vivaes__ae + Viva Espana (Barcrest) (MPU4) (set 42) + + + m4vivaes__af + Viva Espana (Barcrest) (MPU4) (set 43) + + + m4vivaes__ag + Viva Espana (Barcrest) (MPU4) (set 44) + + + m4vivaes__ah + Viva Espana (Barcrest) (MPU4) (set 45) + + + m4vivaes__ai + Viva Espana (Barcrest) (MPU4) (set 46) + + + m4vivaes__aj + Viva Espana (Barcrest) (MPU4) (set 47) + + + m4vivaes__ak + Viva Espana (Barcrest) (MPU4) (set 48) + + + m4vivaes__al + Viva Espana (Barcrest) (MPU4) (set 49) + + + m4vivaes__am + Viva Espana (Barcrest) (MPU4) (set 50) + + + m4vivaes__an + Viva Espana (Barcrest) (MPU4) (set 51) + + + m4vivaes__ao + Viva Espana (Barcrest) (MPU4) (set 52) + + + m4vivaes__ap + Viva Espana (Barcrest) (MPU4) (set 53) + + + m4vivaes__b + Viva Espana (Barcrest) (MPU4) (set 3) + + + m4vivaes__c + Viva Espana (Barcrest) (MPU4) (set 4) + + + m4vivaes__d + Viva Espana (Barcrest) (MPU4) (set 5) + + + m4vivaes__e + Viva Espana (Barcrest) (MPU4) (set 6) + + + m4vivaes__f + Viva Espana (Barcrest) (MPU4) (set 7) + + + m4vivaes__g + Viva Espana (Barcrest) (MPU4) (set 8) + + + m4vivaes__h + Viva Espana (Barcrest) (MPU4) (set 9) + + + m4vivaes__i + Viva Espana (Barcrest) (MPU4) (set 10) + + + m4vivaes__j + Viva Espana (Barcrest) (MPU4) (set 11) + + + m4vivaes__k + Viva Espana (Barcrest) (MPU4) (set 12) + + + m4vivaes__l + Viva Espana (Barcrest) (MPU4) (set 13) + + + m4vivaes__m + Viva Espana (Barcrest) (MPU4) (set 14) + + + m4vivaes__n + Viva Espana (Barcrest) (MPU4) (set 15) + + + m4vivaes__o + Viva Espana (Barcrest) (MPU4) (set 16) + + + m4vivaes__p + Viva Espana (Barcrest) (MPU4) (set 17) + + + m4vivaes__q + Viva Espana (Barcrest) (MPU4) (set 18) + + + m4vivaes__r + Viva Espana (Barcrest) (MPU4) (set 19) + + + m4vivaes__s + Viva Espana (Barcrest) (MPU4) (set 20) + + + m4vivaes__t + Viva Espana (Barcrest) (MPU4) (set 21) + + + m4vivaes__u + Viva Espana (Barcrest) (MPU4) (set 22) + + + m4vivaes__v + Viva Espana (Barcrest) (MPU4) (set 23) + + + m4vivaes__w + Viva Espana (Barcrest) (MPU4) (set 24) + + + m4vivaes__x + Viva Espana (Barcrest) (MPU4) (set 25) + + + m4vivaes__y + Viva Espana (Barcrest) (MPU4) (set 26) + + + m4vivaes__z + Viva Espana (Barcrest) (MPU4) (set 27) + + + m4vivalv + Viva Las Vegas (Barcrest) (MPU4) (set 1) + + + m4vivalv__0 + Viva Las Vegas (Barcrest) (MPU4) (set 28) + + + m4vivalv__1 + Viva Las Vegas (Barcrest) (MPU4) (set 29) + + + m4vivalv__2 + Viva Las Vegas (Barcrest) (MPU4) (set 30) + + + m4vivalv__3 + Viva Las Vegas (Barcrest) (MPU4) (set 31) + + + m4vivalv__4 + Viva Las Vegas (Barcrest) (MPU4) (set 32) + + + m4vivalv__5 + Viva Las Vegas (Barcrest) (MPU4) (set 33) + + + m4vivalv__6 + Viva Las Vegas (Barcrest) (MPU4) (set 34) + + + m4vivalv__7 + Viva Las Vegas (Barcrest) (MPU4) (set 35) + + + m4vivalv__8 + Viva Las Vegas (Barcrest) (MPU4) (set 36) + + + m4vivalv__a + Viva Las Vegas (Barcrest) (MPU4) (set 2) + + + m4vivalv__b + Viva Las Vegas (Barcrest) (MPU4) (set 3) + + + m4vivalv__c + Viva Las Vegas (Barcrest) (MPU4) (set 4) + + + m4vivalv__e + Viva Las Vegas (Barcrest) (MPU4) (set 6) + + + m4vivalv__f + Viva Las Vegas (Barcrest) (MPU4) (set 7) + + + m4vivalv__g + Viva Las Vegas (Barcrest) (MPU4) (set 8) + + + m4vivalv__h + Viva Las Vegas (Barcrest) (MPU4) (set 9) + + + m4vivalv__i + Viva Las Vegas (Barcrest) (MPU4) (set 10) + + + m4vivalv__j + Viva Las Vegas (Barcrest) (MPU4) (set 11) + + + m4vivalv__k + Viva Las Vegas (Barcrest) (MPU4) (set 12) + + + m4vivalv__l + Viva Las Vegas (Barcrest) (MPU4) (set 13) + + + m4vivalv__m + Viva Las Vegas (Barcrest) (MPU4) (set 14) + + + m4vivalv__n + Viva Las Vegas (Barcrest) (MPU4) (set 15) + + + m4vivalv__o + Viva Las Vegas (Barcrest) (MPU4) (set 16) + + + m4vivalv__p + Viva Las Vegas (Barcrest) (MPU4) (set 17) + + + m4vivalv__q + Viva Las Vegas (Barcrest) (MPU4) (set 18) + + + m4vivalv__r + Viva Las Vegas (Barcrest) (MPU4) (set 19) + + + m4vivalv__s + Viva Las Vegas (Barcrest) (MPU4) (set 20) + + + m4vivalv__t + Viva Las Vegas (Barcrest) (MPU4) (set 21) + + + m4vivalv__u + Viva Las Vegas (Barcrest) (MPU4) (set 22) + + + m4vivalv__v + Viva Las Vegas (Barcrest) (MPU4) (set 23) + + + m4vivalv__w + Viva Las Vegas (Barcrest) (MPU4) (set 24) + + + m4vivalv__x + Viva Las Vegas (Barcrest) (MPU4) (set 25) + + + m4vivalv__y + Viva Las Vegas (Barcrest) (MPU4) (set 26) + + + m4vivalv__z + Viva Las Vegas (Barcrest) (MPU4) (set 27) + + + m4vivalvd + Viva Las Vegas (Barcrest) [Dutch] (MPU4) (DLV) + + + m4vivan + Viva Las Vegas (Nova) (MPU4) + + + m4vivess + Viva Espana Showcase (Barcrest) (MPU4) (set 1) + + + m4vivess__a + Viva Espana Showcase (Barcrest) (MPU4) (set 2) + + + m4vivess__b + Viva Espana Showcase (Barcrest) (MPU4) (set 3) + + + m4vivess__c + Viva Espana Showcase (Barcrest) (MPU4) (set 4) + + + m4vivess__d + Viva Espana Showcase (Barcrest) (MPU4) (set 5) + + + m4vivess__f + Viva Espana Showcase (Barcrest) (MPU4) (set 6) + + + m4vivess__g + Viva Espana Showcase (Barcrest) (MPU4) (set 7) + + + m4vivess__i + Viva Espana Showcase (Barcrest) (MPU4) (set 8) + + + m4vivess__j + Viva Espana Showcase (Barcrest) (MPU4) (set 9) + + + m4vivess__k + Viva Espana Showcase (Barcrest) (MPU4) (set 10) + + + m4vivess__l + Viva Espana Showcase (Barcrest) (MPU4) (set 11) + + + m4vivess__m + Viva Espana Showcase (Barcrest) (MPU4) (set 12) + + + m4vivess__n + Viva Espana Showcase (Barcrest) (MPU4) (set 13) + + + m4vivess__o + Viva Espana Showcase (Barcrest) (MPU4) (set 14) + + + m4vivess__p + Viva Espana Showcase (Barcrest) (MPU4) (set 15) + + + m4viz + Viz (Barcrest) (MPU4) (set 1) + + + m4viz__a + Viz (Barcrest) (MPU4) (set 2) + + + m4viz__b + Viz (Barcrest) (MPU4) (set 3) + + + m4viz__c + Viz (Barcrest) (MPU4) (set 4) + + + m4viz__d + Viz (Barcrest) (MPU4) (set 5) + + + m4viz__e + Viz (Barcrest) (MPU4) (set 6) + + + m4viz__f + Viz (Barcrest) (MPU4) (set 7) + + + m4viz__g + Viz (Barcrest) (MPU4) (set 8) + + + m4viz__h + Viz (Barcrest) (MPU4) (set 9) + + + m4viz__i + Viz (Barcrest) (MPU4) (set 10) + + + m4viz__j + Viz (Barcrest) (MPU4) (set 11) + + + m4viz__k + Viz (Barcrest) (MPU4) (set 12) + + + m4viz__l + Viz (Barcrest) (MPU4) (set 13) + + + m4viz__m + Viz (Barcrest) (MPU4) (set 14) + + + m4viz__n + Viz (Barcrest) (MPU4) (set 15) + + + m4viz__o + Viz (Barcrest) (MPU4) (set 16) + + + m4viz__p + Viz (Barcrest) (MPU4) (set 17) + + + m4viz__q + Viz (Barcrest) (MPU4) (set 18) + + + m4viz__r + Viz (Barcrest) (MPU4) (set 19) + + + m4viz__s + Viz (Barcrest) (MPU4) (set 20) + + + m4viz__t + Viz (Barcrest) (MPU4) (set 21) + + + m4viz__u + Viz (Barcrest) (MPU4) (set 22) + + + m4viz__v + Viz (Barcrest) (MPU4) (set 23) + + + m4viz__w + Viz (Barcrest) (MPU4) (set 24) + + + m4volcan + Volcano (Bwb) (MPU4) (set 1) + + + m4volcan__a + Volcano (Bwb) (MPU4) (set 2) + + + m4volcan__b + Volcano (Bwb) (MPU4) (set 3) + + + m4volcan__c + Volcano (Bwb) (MPU4) (set 4) + + + m4volcan__d + Volcano (Bwb) (MPU4) (set 5) + + + m4volcan__e + Volcano (Bwb) (MPU4) (set 6) + + + m4volcan__f + Volcano (Bwb) (MPU4) (set 7) + + + m4volcan__g + Volcano (Bwb) (MPU4) (set 8) + + + m4voodoo + Voodoo 1000 (Barcrest) (Dutch) (MPU4) (DDO 3.2) + + + m4wayin + Way In (Barcrest) (MPU4) (set 1) + + + m4wayina + Way In (Barcrest) (MPU4) (set 2) + + + m4wcnov + World Cup (Nova) (MPU4) + + + m4wife + Money Or Yer Wife (Gemini) (MPU4) + + + m4wildms + Wild Mystery (Barcrest) (Dutch) (MPU4) + + + m4wildtm + Wild Timer (Barcrest) (Dutch) (MPU4) (DWT 1.3) + + + m4wnud + unknown MPU4 'W Nudge' (MPU4?) + + + m4wta + Winner Takes All (Barcrest) (MPU4) (set 1) + + + m4wta__0 + Winner Takes All (Barcrest) (MPU4) (set 28) + + + m4wta__1 + Winner Takes All (Barcrest) (MPU4) (set 29) + + + m4wta__2 + Winner Takes All (Barcrest) (MPU4) (set 30) + + + m4wta__3 + Winner Takes All (Barcrest) (MPU4) (set 31) + + + m4wta__4 + Winner Takes All (Barcrest) (MPU4) (set 32) + + + m4wta__5 + Winner Takes All (Barcrest) (MPU4) (set 33) + + + m4wta__6 + Winner Takes All (Barcrest) (MPU4) (set 34) + + + m4wta__7 + Winner Takes All (Barcrest) (MPU4) (set 35) + + + m4wta__8 + Winner Takes All (Barcrest) (MPU4) (set 36) + + + m4wta__9 + Winner Takes All (Barcrest) (MPU4) (set 37) + + + m4wta__aa + Winner Takes All (Barcrest) (MPU4) (set 38) + + + m4wta__ab + Winner Takes All (Barcrest) (MPU4) (set 39) + + + m4wta__ac + Winner Takes All (Barcrest) (MPU4) (set 40) + + + m4wta__ad + Winner Takes All (Barcrest) (MPU4) (set 41) + + + m4wta__ae + Winner Takes All (Barcrest) (MPU4) (set 42) + + + m4wta__af + Winner Takes All (Barcrest) (MPU4) (set 43) + + + m4wta__ag + Winner Takes All (Barcrest) (MPU4) (set 44) + + + m4wta__b + Winner Takes All (Barcrest) (MPU4) (set 3) + + + m4wta__d + Winner Takes All (Barcrest) (MPU4) (set 5) + + + m4wta__e + Winner Takes All (Barcrest) (MPU4) (set 6) + + + m4wta__f + Winner Takes All (Barcrest) (MPU4) (set 7) + + + m4wta__g + Winner Takes All (Barcrest) (MPU4) (set 8) + + + m4wta__h + Winner Takes All (Barcrest) (MPU4) (set 9) + + + m4wta__i + Winner Takes All (Barcrest) (MPU4) (set 10) + + + m4wta__j + Winner Takes All (Barcrest) (MPU4) (set 11) + + + m4wta__k + Winner Takes All (Barcrest) (MPU4) (set 12) + + + m4wta__l + Winner Takes All (Barcrest) (MPU4) (set 13) + + + m4wta__m + Winner Takes All (Barcrest) (MPU4) (set 14) + + + m4wta__n + Winner Takes All (Barcrest) (MPU4) (set 15) + + + m4wta__o + Winner Takes All (Barcrest) (MPU4) (set 16) + + + m4wta__p + Winner Takes All (Barcrest) (MPU4) (set 17) + + + m4wta__q + Winner Takes All (Barcrest) (MPU4) (set 18) + + + m4wta__r + Winner Takes All (Barcrest) (MPU4) (set 19) + + + m4wta__s + Winner Takes All (Barcrest) (MPU4) (set 20) + + + m4wta__t + Winner Takes All (Barcrest) (MPU4) (set 21) + + + m4wta__u + Winner Takes All (Barcrest) (MPU4) (set 22) + + + m4wta__v + Winner Takes All (Barcrest) (MPU4) (set 23) + + + m4wta__w + Winner Takes All (Barcrest) (MPU4) (set 24) + + + m4wta__x + Winner Takes All (Barcrest) (MPU4) (set 25) + + + m4wta__y + Winner Takes All (Barcrest) (MPU4) (set 26) + + + m4wta__z + Winner Takes All (Barcrest) (MPU4) (set 27) + + + m4wwc + Wacky Weekend Club (Global) (MPU4) (set 1) + + + m4wwca + Wacky Weekend Club (Global) (MPU4) (set 2) + + + m4wwcb + Wacky Weekend Club (Global) (MPU4) (set 3) + + + m4xch + X-change (Bwb) (MPU4) (set 1) + + + m4xch__a + X-change (Bwb) (MPU4) (set 2) + + + m4xch__b + X-change (Bwb) (MPU4) (set 3) + + + m4xch__c + X-change (Bwb) (MPU4) (set 4) + + + m4xch__d + X-change (Bwb) (MPU4) (set 5) + + + m4xch__e + X-change (Bwb) (MPU4) (set 6) + + + m4xch__f + X-change (Bwb) (MPU4) (set 7) + + + m4xch__g + X-change (Bwb) (MPU4) (set 8) + + + m4xch__h + X-change (Bwb) (MPU4) (set 9) + + + m4xch__i + X-change (Bwb) (MPU4) (set 10) + + + m4xch__j + X-change (Bwb) (MPU4) (set 11) + + + m4xch__k + X-change (Bwb) (MPU4) (set 12) + + + m4xs + X-s (Bwb) (MPU4) (set 1) + + + m4xs__a + X-s (Bwb) (MPU4) (set 2) + + + m4xs__b + X-s (Bwb) (MPU4) (set 3) + + + m4xs__c + X-s (Bwb) (MPU4) (set 4) + + + m4xs__d + X-s (Bwb) (MPU4) (set 5) + + + m4xs__e + X-s (Bwb) (MPU4) (set 6) + + + m4xs__f + X-s (Bwb) (MPU4) (set 7) + + + m4xtrm + X-treme (Bwb) (MPU4) (set 1) + + + m4xtrm__a + X-treme (Bwb) (MPU4) (set 2) + + + m4xtrm__b + X-treme (Bwb) (MPU4) (set 3) + + + m4zill + Zillionare's Challenge (Pure Leisure) (MPU4) (set 1) + + + m4zilla + Zillionare's Challenge (Pure Leisure) (MPU4) (set 2) + + + m55050 + Fifty Fifty (Bwb) (MPU5) + + + m5aceclb + Ace Of Clubs (Empire) (MPU5, set 1) + + + m5aceclba + Ace Of Clubs (Empire) (MPU5, set 2) + + + m5aceclbb + Ace Of Clubs (Empire) (MPU5, set 3) + + + m5addams + Addams Family (Barcrest) (MPU5) (v0.5, set 1) + + + m5addamsa + Addams Family (Barcrest) (MPU5) (v0.5, set 2) + + + m5addamsb + Addams Family (Barcrest) (MPU5) (v0.5, set 3) + + + m5addamsc + Addams Family (Barcrest) (MPU5) (v0.5, set 4) + + + m5addamsd + Addams Family (Barcrest) (MPU5) (v0.5, set 5) + + + m5addamse + Addams Family (Barcrest) (MPU5) (v0.5, set 6) + + + m5addamsf + Addams Family (Barcrest) (MPU5) (v0.5, set 7) + + + m5addamsg + Addams Family (Barcrest) (MPU5) (v0.5, set 8) + + + m5addamsh + Addams Family (Barcrest) (MPU5) (v0.2, set 1) + + + m5addamsi + Addams Family (Barcrest) (MPU5) (v0.2, set 2) + + + m5addamsj + Addams Family (Barcrest) (MPU5) (v0.2, set 3) + + + m5addamsk + Addams Family (Barcrest) (MPU5) (v0.3, set 1) + + + m5addamsl + Addams Family (Barcrest) (MPU5) (v0.3, set 2) + + + m5addamsm + Addams Family (Barcrest) (MPU5) (v0.3, set 3) + + + m5addamsn + Addams Family (Barcrest) (MPU5) (v0.3, set 4) + + + m5addamso + Addams Family (Barcrest) (MPU5) (v0.3, set 5) + + + m5addamsp + Addams Family (Barcrest) (MPU5) (v0.3, set 6) + + + m5addamsq + Addams Family (Barcrest) (MPU5) (v0.3, set 7) + + + m5addamsr + Addams Family (Barcrest) (MPU5) (v0.3, set 8) + + + m5addamss + Addams Family (Barcrest) (MPU5) (v0.3, set 9) + + + m5addlad + Adders & Ladders (Barcrest) (MPU5, v0.6, set 1) + + + m5addlada + Adders & Ladders (Barcrest) (MPU5, v0.6, set 2) + + + m5addladb + Adders & Ladders (Barcrest) (MPU5, v0.6, set 3) + + + m5addladc + Adders & Ladders (Barcrest) (MPU5, v0.6, set 4) + + + m5addladd + Adders & Ladders (Barcrest) (MPU5, v0.6, set 5) + + + m5addlade + Adders & Ladders (Barcrest) (MPU5, v0.6, set 6) + + + m5addladf + Adders & Ladders (Barcrest) (MPU5, v0.6, set 7) + + + m5addladg + Adders & Ladders (Barcrest) (MPU5, v0.6, set 8) + + + m5addladh + Adders & Ladders (Barcrest) (MPU5, v0.6, set 9) + + + m5addladi + Adders & Ladders (Barcrest) (MPU5, v0.6, set 10) + + + m5addladj + Adders & Ladders (Barcrest) (MPU5, v0.1, set 1) + + + m5addladk + Adders & Ladders (Barcrest) (MPU5, v0.1, set 2) + + + m5addladl + Adders & Ladders (Barcrest) (MPU5, v0.1, set 3) + + + m5addladm + Adders & Ladders (Barcrest) (MPU5, v0.1, set 4) + + + m5addladn + Adders & Ladders (Barcrest) (MPU5, v0.1, set 5) + + + m5addlado + Adders & Ladders (Barcrest) (MPU5, v0.1, set 6) + + + m5addladp + Adders & Ladders (Barcrest) (MPU5, v0.1, set 7) + + + m5addladq + Adders & Ladders (Barcrest) (MPU5, v0.4, set 1) + + + m5addladr + Adders & Ladders (Barcrest) (MPU5, v0.4, set 2) + + + m5addlads + Adders & Ladders (Barcrest) (MPU5, v?.?) + + + m5all41 + All 4 One (Vivid) (MPU5, set 1) + + + m5all41a + All 4 One (Vivid) (MPU5, set 2) + + + m5all41b + All 4 One (Vivid) (MPU5, set 3) + + + m5all41c + All 4 One (Vivid) (MPU5, set 4) + + + m5all41d + All 4 One (Vivid) (MPU5, set 5) + + + m5all41e + All 4 One (Vivid) (MPU5, set 6) + + + m5all41f + All 4 One (Vivid) (MPU5, set 7) + + + m5all41g + All 4 One (Vivid) (MPU5, set 8) + + + m5all41h + All 4 One (Vivid) (MPU5, set 9) + + + m5all41i + All 4 One (Vivid) (MPU5, set 10) + + + m5all41j + All 4 One (Vivid) (MPU5, set 11) + + + m5all41k + All 4 One (Vivid) (MPU5, set 12) + + + m5all41l + All 4 One (Vivid) (MPU5, set 13) + + + m5all41low + All 4 One (Lowen) (MPU5) + + + m5all41m + All 4 One (Vivid) (MPU5, set 14) + + + m5arab + Arabian Nights (Barcrest) (MPU5) (set 1) + + + m5arab03 + Arabian Nights (Barcrest) (MPU5) (set 2) + + + m5ashock + Aftershock (Barcrest - Red Gaming) (MPU5, v1.2) + + + m5ashocka + Aftershock (Barcrest - Red Gaming) (MPU5, v1.3) + + + m5atlan + Atlantic (Vivid) (MPU5, v1.4) + + + m5atlana + Atlantic (Vivid) (MPU5, v1.2) + + + m5austin + Austin Powers (Barcrest) (MPU5) (set 1) + + + m5austin10 + Austin Powers (Barcrest) (MPU5) (set 2) + + + m5austin11 + Austin Powers (Barcrest) (MPU5) (set 3) + + + m5bankrl + The Bank Roll (Barcrest) (MPU5) + + + m5barkng + Barking Mad (Barcrest) (MPU5) + + + m5barmy + Barmy Army (Barcrest) (MPU5) + + + m5barxdx + Bar X Deluxe (Empire) (MPU5) + + + m5baxe + Battle Axe (Barcrest) (MPU5) (set 1) + + + m5baxe04 + Battle Axe (Barcrest) (MPU5) (set 2) + + + m5bbank + Break The Bank (Barcrest - Red Gaming) (MPU5) (set 1) + + + m5bbank13 + Break The Bank (Barcrest - Red Gaming) (MPU5) (set 2) + + + m5bbro + Big Brother (Barcrest) (MPU5) (set 1) + + + m5bbro02 + Big Brother (Barcrest) (MPU5) (set 2) + + + m5bbrocl + Big Brother Club (Barcrest) (MPU5) + + + m5beans + Full Of Beans (Barcrest) (MPU5) (set 1) + + + m5beansa + Full Of Beans (Barcrest) (MPU5) (set 2) + + + m5bigchs + The Big Cheese (Barcrest) (MPU5) (set 1) + + + m5bigchs05 + The Big Cheese (Barcrest) (MPU5) (set 2) + + + m5biggam + The Big Game (Barcrest) (MPU5) (set 1) + + + m5biggam11 + The Big Game (Barcrest) (MPU5) (set 2) + + + m5bigsht + Big Shot (Barcrest - Red Gaming) (MPU5) (set 1) + + + m5bigsht04 + Big Shot (Barcrest - Red Gaming) (MPU5) (set 2) + + + m5bigsht11 + Big Shot (Barcrest - Red Gaming) (MPU5) (set 3) + + + m5bigsht13 + Big Shot (Barcrest - Red Gaming) (MPU5) (set 4) + + + m5bigshta + Big Shot (Barcrest - Red Gaming) (MPU5) (set 5) + + + m5bling + Bling King Crazy (Barcrest) (MPU5) + + + m5blkwht + Black & White (Barcrest) (MPU5) (set 1) + + + m5blkwht01 + Black & White (Barcrest) (MPU5) (set 3) + + + m5blkwht11 + Black & White (Barcrest) (MPU5) (set 2) + + + m5bnkrs + Bonkers (Barcrest - Red Gaming) (MPU5) + + + m5bnzclb + Bonanza Club (Empire) (MPU5) (set 1) + + + m5bnzclb11 + Bonanza Club (Empire) (MPU5) (set 2) + + + m5btlbnk + Bottle Bank (Vivid) (MPU5) + + + m5bttf + Back To The Features (Vivid) (MPU5) (set 1) + + + m5bttfa + Back To The Features (Vivid) (MPU5) (set 2) + + + m5bukroo + Buckaroo (Empire) (MPU5) + + + m5bwaves + Brain Waves (Barcrest) (MPU5) (set 1) + + + m5bwaves07 + Brain Waves (Barcrest) (MPU5) (set 2) + + + m5caesc + Caesar's Cash (Vivid) (MPU5) + + + m5carclb + Caribbean Club (Barcrest) (MPU5) + + + m5card + Card Shark (Vivid) (MPU5) + + + m5carou + Carousel (Empire) (MPU5) + + + m5carpet + Magic Carpet (Bwb) (MPU5) (set 1) + + + m5carpet12 + Magic Carpet (Bwb) (MPU5) (set 2) + + + m5carwsh + Car Wash (Bwb) (MPU5) (set 1) + + + m5carwsh10 + Car Wash (Bwb) (MPU5) (set 2) + + + m5casfev + Casino Fever (Red Gaming) (MPU5) (set 1) + + + m5casfev12 + Casino Fever (Red Gaming) (MPU5) (set 2) + + + m5cashar + Cash Arena (Barcrest) (MPU5) (set 1) + + + m5cashar04 + Cash Arena (Barcrest) (MPU5) (set 2) + + + m5cashat + Cash Attack (Barcrest) (MPU5) + + + m5cashln + Cash Lines (Barcrest) (MPU5) + + + m5cashrn + Cash Run (Barcrest) (MPU5) (set 1) + + + m5cashrn01 + Cash Run (Barcrest) (MPU5) (set 2) + + + m5cashrn02 + Cash Run (Barcrest) (MPU5) (set 3) + + + m5cashrn04 + Cash Run (Barcrest) (MPU5) (set 4) + + + m5casroc + Casino Royale Club (Empire) (MPU5) + + + m5cbrun + Cannonball Run (Empire) (MPU5) + + + m5cbw + Ca$h Bang Wallop (Barcrest) (MPU5) (set 1) + + + m5cbwa + Ca$h Bang Wallop (Barcrest) (MPU5) (set 2) + + + m5centcl + Centurion Club (Empire) (MPU5) (set 1) + + + m5centcl20 + Centurion Club (Empire) (MPU5) (set 2) + + + m5centcl21 + Centurion Club (Empire) (MPU5) (set 3) + + + m5centcl21a + Centurion Club (Empire) (MPU5) (set 4) + + + m5centcla + Centurion Club (Empire) (MPU5) (set 5) + + + m5circlb + Circus Club (Bwb) (MPU5) (set 1) + + + m5circlb00 + Circus Club (Bwb) (MPU5) (set 2) + + + m5circlb15 + Circus Club (Bwb) (MPU5) (set 3) + + + m5circlb33 + Circus Club (Bwb) (MPU5) (set 4) + + + m5circus + Circus (Bwb) (MPU5) (set 1) + + + m5circus0a + Circus (Bwb) (MPU5) (set 2) + + + m5circus0b + Circus (Bwb) (MPU5) (set 3) + + + m5circus11 + Circus (Bwb) (MPU5) (set 6) + + + m5circus20 + Circus (Bwb) (MPU5) (set 4) + + + m5circus21 + Circus (Bwb) (MPU5) (set 5) + + + m5clbtro + Club Tropicana (Empire) (MPU5) (set 1) + + + m5clbtro24 + Club Tropicana (Empire) (MPU5) (set 2) + + + m5clbtro25 + Club Tropicana (Empire) (MPU5) (set 3) + + + m5clifhn + Cliffhanger (Vivid) (MPU5) + + + m5clown + Clown In Around (Bwb) (MPU5) (set 1) + + + m5clown11 + Clown In Around (Bwb) (MPU5) (set 2) + + + m5clown13 + Clown In Around (Bwb) (MPU5) (set 3) + + + m5clr + MPU 5 Ram & Meter Clear (Barcrest) (MPU5) + + + m5clubsn + Club Sandwich (Bwb) (MPU5) (set 1) + + + m5clubsn11 + Club Sandwich (Bwb) (MPU5) (set 2) + + + m5clubsn14 + Club Sandwich (Bwb) (MPU5) (set 3) + + + m5clubsn16 + Club Sandwich (Bwb) (MPU5) (set 4) + + + m5cmass + Critical Mass (Barcrest - Red Gaming) (MPU5) + + + m5cnct4 + Connect 4 (Vivid) (MPU5) (set 1) + + + m5cnct415 + Connect 4 (Vivid) (MPU5) (set 2) + + + m5cnct420 + Connect 4 (Vivid) (MPU5) (set 3) + + + m5cockdd + Cock A Doodle Dough! (Empire) (MPU5) (set 1) + + + m5cockdd05 + Cock A Doodle Dough! (Empire) (MPU5) (set 2) + + + m5codft + The Codfather (Barcrest) (MPU5) (set 1) + + + m5codft02 + The Codfather (Barcrest) (MPU5) (set 2) + + + m5coloss + Colossus Club (Empire) (MPU5) + + + m5cos + Costa Del Cash Casino (Barcrest) (MPU5) + + + m5cosclb + Costa Del Cash Club (Barcrest) (MPU5) + + + m5costa + Costa Del Cash (Barcrest) (MPU5) + + + m5cpcash + Captain Cash (Barcrest) (MPU5) + + + m5croclb + Crocodile Rock Club (Empire) (MPU5) + + + m5crocrk + Crocodile Rock (Empire) (MPU5) (set 1) + + + m5crocrk10 + Crocodile Rock (Empire) (MPU5) (set 2) + + + m5crsfir + Crossfire (Empire) (MPU5) + + + m5crzkni + Crazy Crazy Knights (Barcrest) (MPU5) (set 1) + + + m5crzkni03 + Crazy Crazy Knights (Barcrest) (MPU5) (set 2) + + + m5cshkcb + Card Shark Club (Vivid) (MPU5) (set 1) + + + m5cshkcb12 + Card Shark Club (Vivid) (MPU5) (set 2) + + + m5cshkcb13 + Card Shark Club (Vivid) (MPU5) (set 3) + + + m5cshstx + Cash Stax (Bwb) (MPU5) + + + m5cworan + Clockwork Oranges (Empire) (MPU5) (set 1) + + + m5cworan12 + Clockwork Oranges (Empire) (MPU5) (set 2) + + + m5dblfun + Double Fun (Lowen) (MPU5) + + + m5dblqts + Double Or Quits (Bwb) (MPU5) (set 1) + + + m5dblqts1b + Double Or Quits (Bwb) (MPU5) (set 4) + + + m5dblqtsa + Double Or Quits (Bwb) (MPU5) (set 2) + + + m5dblqtsb + Double Or Quits (Bwb) (MPU5) (set 3) + + + m5dbubl + Double Bubble (Barcrest - Red Gaming) (MPU5) + + + m5devil + Devil Of A Deal (Vivid) (MPU5) + + + m5dick + Dick Turnip (Bwb) (MPU5) (set 1) + + + m5dick10 + Dick Turnip (Bwb) (MPU5) (set 2) + + + m5dmnf + Diamonds Are Forever (Empire) (MPU5) (set 1) + + + m5dmnf10 + Diamonds Are Forever (Empire) (MPU5) (set 2) + + + m5dmnfcl + Diamonds Are Forever Club (Empire) (MPU5) (set 1) + + + m5dmnfcl04 + Diamonds Are Forever Club (Empire) (MPU5) (set 2) + + + m5dmnstr + Demon Streak (Barcrest - Red Gaming) (MPU5, set 1) + + + m5dmnstra + Demon Streak (Barcrest - Red Gaming) (MPU5, set 2) + + + m5donna + Donna Kebab (Bwb) (MPU5, set 1) + + + m5donnaa + Donna Kebab (Bwb) (MPU5, set 3) + + + m5donnad + Donna Kebab (Bwb) (MPU5, set 1, Datapak) + + + m5doshpk + Do$h 'n' Pecks (Barcrest) (MPU5) (set 1) + + + m5doshpk05 + Do$h 'n' Pecks (Barcrest) (MPU5) (set 2) + + + m5draclb + Ooh Aah Dracula Club (Barcrest) (MPU5) (set 1) + + + m5draclb01 + Ooh Aah Dracula Club (Barcrest) (MPU5) (set 3) + + + m5draclb07 + Ooh Aah Dracula Club (Barcrest) (MPU5) (set 2) + + + m5dragnd + Dragon Drop (Barcrest - Red Gaming) (MPU5, set 1) + + + m5dragnda + Dragon Drop (Barcrest - Red Gaming) (MPU5, set 2) + + + m5eggold + Egyptian Gold (Bwb) (MPU5) + + + m5egr + Elvis Gold Rush (Barcrest) (MPU5, set 1) + + + m5egra + Elvis Gold Rush (Barcrest) (MPU5, set 2) + + + m5egss + Elvis Gold Super Streak (Barcrest) (MPU5, set 1) + + + m5egssa + Elvis Gold Super Streak (Barcrest) (MPU5, set 2) + + + m5elband + El Bandido Club (Vivid) (MPU5) + + + m5elim + Eliminator (Barcrest) (MPU5) (set 1) + + + m5elim03 + Eliminator (Barcrest) (MPU5) (set 2) + + + m5elim04 + Eliminator (Barcrest) (MPU5) (set 3) + + + m5evgrhr + Elvis Gold Red Hot Roll (Barcrest) (MPU5, set 1) + + + m5evgrhra + Elvis Gold Red Hot Roll (Barcrest) (MPU5, set 2) + + + m5ewn + Each Way Nudge (Barcrest) (MPU5) (set 1) + + + m5ewn08 + Each Way Nudge (Barcrest) (MPU5) (set 2) + + + m5extrm + Extreme (Empire) (MPU5) + + + m5extrmm + Extreme Madness (Empire) (MPU5) (set 1) + + + m5extrmm04a + Extreme Madness (Empire) (MPU5) (set 2) + + + m5extrmm04b + Extreme Madness (Empire) (MPU5) (set 3) + + + m5extrmm10 + Extreme Madness (Empire) (MPU5) (set 4) + + + m5fair + Fairground Attraction (Vivid) (MPU5) + + + m5fatcat + Fat Cat (Empire) (MPU5) + + + m5fewmor + A Few Dollars More (Empire) (MPU5) (v0.2, set 1) + + + m5fewmora + A Few Dollars More (Empire) (MPU5) (v0.2, set 2) + + + m5fewmorb + A Few Dollars More (Empire) (MPU5) (v0.3, set 1) + + + m5fewmorc + A Few Dollars More (Empire) (MPU5) (v0.3, set 2) + + + m5fiddle + On The Fiddle (Barcrest) (MPU5) (set 1) + + + m5fiddle03 + On The Fiddle (Barcrest) (MPU5) (set 2) + + + m5fire + All Fired Up (Barcrest) (MPU5) + + + m5firebl + Fireball (Barcrest) (MPU5) + + + m5fishcl + Fish Full Of Dollars Club (Empire) (MPU5) + + + m5fishdl + Fish Full Of Dollars (Empire) (MPU5) (set 1) + + + m5fishdl10 + Fish Full Of Dollars (Empire) (MPU5) (set 2) + + + m5flipcr + Flippin Crazy (Barcrest) (MPU5) + + + m5fmonty + The Full Monty (Empire) (MPU5) (set 1) + + + m5fmonty04a + The Full Monty (Empire) (MPU5) (set 2) + + + m5fmonty04b + The Full Monty (Empire) (MPU5) (set 3) + + + m5fmonty04c + The Full Monty (Empire) (MPU5) (set 4) + + + m5fmount + Full Mountie (Empire) (MPU5) + + + m5fnfair + Funfair (Barcrest - Red Gaming) (MPU5) + + + m5fnfaird + Funfair (Barcrest - Red Gaming) (MPU5) (Datapak) + + + m5fortby + Fort Boyard (Barcrest) (MPU5) (set 1) + + + m5fortby01 + Fort Boyard (Barcrest) (MPU5) (set 2) + + + m5frnzy + Frenzy (Barcrest) (MPU5) (set 1) + + + m5frnzya + Frenzy (Barcrest) (MPU5) (set 2) + + + m5funsun + Fun In The Sun (Barcrest) (MPU5) (set 1) + + + m5funsun03 + Fun In The Sun (Barcrest) (MPU5) (set 2) + + + m5fusir + Fruits U Sir (Barcrest - Red Gaming) (MPU5) (set 1) + + + m5fusir11 + Fruits U Sir (Barcrest - Red Gaming) (MPU5) (set 2) + + + m5fusir12 + Fruits U Sir (Barcrest - Red Gaming) (MPU5) (set 3) + + + m5gdrag + Golden Dragon (Barcrest) (MPU5) + + + m5gdrgcl + Golden Dragon Club (Barcrest) (MPU5) (set 1) + + + m5gdrgcl05 + Golden Dragon Club (Barcrest) (MPU5) (set 2) + + + m5ggems + Giant Gems (Vivid) (MPU5) (set 1) + + + m5ggems20 + Giant Gems (Vivid) (MPU5) (set 2) + + + m5gimmie + Gimmie Gimmie Gimmie (Barcrest) (MPU5) + + + m5gkeys + Golden Keys (Barcrest) (MPU5) + + + m5goape + Going Ape (Bwb) (MPU5) + + + m5gophcl + Gopher Gold Club (Empire) (MPU5) + + + m5gophr + Gopher Gold (Empire) (MPU5) + + + m5gpclub + Get Plastered Club (Bwb) (MPU5) + + + m5groll + Golden Roll (Vivid) (MPU5) + + + m5grush + Gold Rush (Barcrest) (MPU5) (set 1) + + + m5grush01 + Gold Rush (Barcrest) (MPU5) (set 6) + + + m5grush02 + Gold Rush (Barcrest) (MPU5) (set 5) + + + m5grush03 + Gold Rush (Barcrest) (MPU5) (set 4) + + + m5grush04 + Gold Rush (Barcrest) (MPU5) (set 3) + + + m5grush10 + Gold Rush (Barcrest) (MPU5) (set 2) + + + m5grush5 + Gold Rush Five Liner (Barcrest) (MPU5) (set 1) + + + m5grush504 + Gold Rush Five Liner (Barcrest) (MPU5) (set 2) + + + m5gruss + Gold Rush Sit Down (Barcrest) (MPU5) + + + m5grusst + Gold Rush Stampede (Barcrest) (MPU5) (set 1) + + + m5grusst03 + Gold Rush Stampede (Barcrest) (MPU5) (set 3) + + + m5grusst04 + Gold Rush Stampede (Barcrest) (MPU5) (set 2) + + + m5gsstrk + Gold Super Streak (Barcrest) (MPU5) (set 1) + + + m5gsstrk07 + Gold Super Streak (Barcrest) (MPU5) (set 2) + + + m5gstrik + Gold Strike (Barcrest) (MPU5) (set 1) + + + m5gstrik01 + Gold Strike (Barcrest) (MPU5) (set 4) + + + m5gstrik01a + Gold Strike (Barcrest) (MPU5) (set 5) + + + m5gstrik02 + Gold Strike (Barcrest) (MPU5) (set 3) + + + m5gstrik11 + Gold Strike (Barcrest) (MPU5) (set 2) + + + m5gstrika + Gold Strike (Barcrest) (MPU5) (set 6) + + + m5hellrz + Hellraiser (Barcrest) (MPU5) + + + m5hgl + Happy Go Lucky (Bwb) (MPU5) (set 1) + + + m5hgl14 + Happy Go Lucky (Bwb) (MPU5) (set 3) + + + m5hgl16 + Happy Go Lucky (Bwb) (MPU5) (set 2) + + + m5hiclau + High Claudius (Vivid) (MPU5) + + + m5hifly + High Flyer (Barcrest) (MPU5) (set 1) + + + m5hifly03 + High Flyer (Barcrest) (MPU5) (set 2) + + + m5hifly04 + High Flyer (Barcrest) (MPU5) (set 3) + + + m5hilok + Hi Lo Karate (Vivid) (MPU5) + + + m5hisprt + High Spirits (Empire) (MPU5) + + + m5hlsumo + Hi Lo Sumo (Barcrest) (MPU5) + + + m5hocscl + Hocus Pocus Club (Empire) (MPU5) + + + m5hocus + Hocus Pocus (Empire) (MPU5) (set 1) + + + m5hocus10 + Hocus Pocus (Empire) (MPU5) (set 2) + + + m5holy + The Holy Grail (Barcrest) (MPU5) (set 1) + + + m5holy10 + The Holy Grail (Barcrest) (MPU5) (set 2) + + + m5honmon + Honey Money (Vivid) (MPU5) (set 1) + + + m5honmona + Honey Money (Vivid) (MPU5) (set 2) + + + m5hopidl + Hop Idol (Vivid) (MPU5) + + + m5horn + Horn Of Plenty (Barcrest / Whitbread) (MPU5) + + + m5hotrk + Hot Rocks (Barcrest) (MPU5) + + + m5hotsht + Hot Shots (Empire) (MPU5) (set 1) + + + m5hotsht07a + Hot Shots (Empire) (MPU5) (set 2) + + + m5hotsht08 + Hot Shots (Empire) (MPU5) (set 3) + + + m5hotsht08a + Hot Shots (Empire) (MPU5) (set 4) + + + m5hotsht10 + Hot Shots (Empire) (MPU5) (set 5) + + + m5hotsht10a + Hot Shots (Empire) (MPU5) (set 6) + + + m5hotslt + Hot Slot (Barcrest) (MPU5) + + + m5hotstf + Hot Stuff (Barcrest) (MPU5) + + + m5hula + Hula Moolah (Empire) (MPU5) (set 1) + + + m5hula10 + Hula Moolah (Empire) (MPU5) (set 2) + + + m5hulacl + Hula Moolah Club (Empire) (MPU5) + + + m5hypalx + Hypalinx (Barcrest - Red Gaming) (MPU5) + + + m5hypno + Hypnotic (Vivid) (MPU5) + + + m5hypvip + Hyper Viper (Barcrest) (MPU5) + + + m5invad + Invaders (Barcrest - Red Gaming) (MPU5) + + + m5jackbx + Jack In The Box (Empire) (MPU5) (set 1) + + + m5jackbx03 + Jack In The Box (Empire) (MPU5) (set 2) + + + m5jackp2 + Jackpoteers 2 (Barcrest) (MPU5) (set 1) + + + m5jackp2a + Jackpoteers 2 (Barcrest) (MPU5) (set 2) + + + m5jackpt + Jackpoteers (Barcrest) (MPU5) (set 1) + + + m5jackpt07 + Jackpoteers (Barcrest) (MPU5) (set 2) + + + m5jakjok + Jackpot Jokers (Lowen) (MPU5) + + + m5jcptgn + Jackpot Genie (Barcrest - Red Gaming) (MPU5) + + + m5jcy + Juicy Fruits (Empire) (MPU5) + + + m5jlstrk + Jewel Strike (Barcrest - Red Gaming) (MPU5) + + + m5jlyjwl + Jolly Jewels (Barcrest) (MPU5) (set 1) + + + m5jlyjwl01 + Jolly Jewels (Barcrest) (MPU5) (set 2) + + + m5jlyjwl02 + Jolly Jewels (Barcrest) (MPU5) (set 3) + + + m5jlyrog + Jolly Roger (Barcrest) (MPU5) (set 1) + + + m5jlyroga + Jolly Roger (Barcrest) (MPU5) (set 2) + + + m5jmpgem + Jumping Gems (Empire) (MPU5) (set 1) + + + m5jmpgem01 + Jumping Gems (Empire) (MPU5) (set 2) + + + m5jmpgem03 + Jumping Gems (Empire) (MPU5) (set 3) + + + m5jmpgmc + Jumping Gems Club (Empire) (MPU5) + + + m5jmpjok + Jumpin Jokers (Vivid) (MPU5) (set 1) + + + m5jmpjok11 + Jumpin Jokers (Vivid) (MPU5) (set 2) + + + m5jmpjoka + Jumpin Jokers (Vivid) (MPU5) (set 3) + + + m5jmpjokb + Jumpin Jokers (Vivid) (MPU5) (set 4) + + + m5jokpak + Joker In The Pack (Bwb) (MPU5) + + + m5kaleid + Kaleidoscope Club (Empire) (MPU5) + + + m5kcclb + King Cobra Club (Empire) (MPU5) (set 1) + + + m5kcclb24 + King Cobra Club (Empire) (MPU5) (set 2) + + + m5kingko + King KO (Barcrest) (MPU5) (set 1) + + + m5kingko04 + King KO (Barcrest) (MPU5) (set 2) + + + m5kingko05 + King KO (Barcrest) (MPU5) (set 3) + + + m5kingqc + Kings & Queens Club (Empire) (MPU5) (set 1) + + + m5kingqc06 + Kings & Queens Club (Empire) (MPU5) (set 2) + + + m5kingqc07 + Kings & Queens Club (Empire) (MPU5) (set 3) + + + m5kingqc08 + Kings & Queens Club (Empire) (MPU5) (set 4) + + + m5kkebab + King Kebab (Barcrest) (MPU5) (set 1) + + + m5kkebab10 + King Kebab (Barcrest) (MPU5) (set 2) + + + m5kkebaba + King Kebab (Barcrest) (MPU5) (set 3) + + + m5korma + Korma Chameleon (Empire) (MPU5) (set 1) + + + m5korma12 + Korma Chameleon (Empire) (MPU5) (set 2) + + + m5kormcl + Korma Chameleon Club (Empire) (MPU5) + + + m5lock + Lock 'n' Load (Barcrest - Red Gaming) (MPU5) (set 1) + + + m5lock12 + Lock 'n' Load (Barcrest - Red Gaming) (MPU5) (set 3) + + + m5lock13 + Lock 'n' Load (Barcrest - Red Gaming) (MPU5) (set 2) + + + m5lockcl + Lock 'n' Load Club (Barcrest - Red Gaming) (MPU5) (set 1) + + + m5lockcl14 + Lock 'n' Load Club (Barcrest - Red Gaming) (MPU5) (set 3) + + + m5lockcl15 + Lock 'n' Load Club (Barcrest - Red Gaming) (MPU5) (set 2) + + + m5loony + Loony Juice (Vivid) (MPU5) + + + m5loot + Loot 'n' Khamun (Vivid) (MPU5, set 1) + + + m5loota + Loot 'n' Khamun (Vivid) (MPU5, set 2) + + + m5lotta + Lotta Luck (Barcrest) (MPU5) + + + m5lvwire + Live Wire (Bwb) (MPU5) (set 1) + + + m5lvwirea + Live Wire (Bwb) (MPU5) (set 2) + + + m5mag7s + Magnificent 7s (Vivid) (MPU5, set 1) + + + m5mag7sa + Magnificent 7s (Vivid) (MPU5, set 2) + + + m5mag7sb + Magnificent 7s (Vivid) (MPU5, set 3) + + + m5mag7sc + Magnificent 7s (Vivid) (MPU5, set 4) + + + m5mag7sd + Magnificent 7s (Vivid) (MPU5, set 5) + + + m5mag7se + Magnificent 7s (Vivid) (MPU5, set 6) + + + m5martns + Money Mad Martians (Barcrest) (MPU5) (set 1) + + + m5martns07 + Money Mad Martians (Barcrest) (MPU5) (set 2) + + + m5mega + Mega Zone (Barcrest) (MPU5) + + + m5minesw + Minesweeper (Bwb) (MPU5) + + + m5mmak + Money Maker (Barcrest) (MPU5) (set 1) + + + m5mmak06 + Money Maker (Barcrest) (MPU5) (set 2) + + + m5monjok + Monedin Joker (Spanish) (Barcrest) (MPU5) (set 1) + + + m5monjoka + Monedin Joker (Spanish) (Barcrest) (MPU5) (set 2) + + + m5monmst + Money Monster (Empire) (MPU5) (set 1) + + + m5monmsta + Money Monster (Empire) (MPU5) (set 2) + + + m5monty + Monty Python (Barcrest) (MPU5) + + + m5mpfc + Monty Python's Flying Circus (Barcrest) (MPU5) + + + m5mpfccl + Monty Python's Flying Circus Club (Barcrest) (MPU5) + + + m5mprio + Monty Python Rio (Barcrest) (MPU5) + + + m5msf + Manic Streak Features (Vivid) (MPU5, set 1) + + + m5msfa + Manic Streak Features (Vivid) (MPU5, set 2) + + + m5neptun + Neptunes Treasure (Barcrest) (MPU5) + + + m5nitro + Nitro (Barcrest - Red Gaming) (MPU5) + + + m5nnww + Nudge Nudge Wink Wink (Barcrest) (MPU5) + + + m5nnwwgl + Nudge Nudge Wink Wink Gold (Barcrest) (MPU5) + + + m5oohaah + Ooh Aah Dracula (Barcrest) (MPU5) (set 1) + + + m5oohaah01 + Ooh Aah Dracula (Barcrest) (MPU5) (set 2) + + + m5oohrio + Ooh Ahh Dracula Rio (Barcrest) (MPU5) + + + m5openbx + Open The Box (Barcrest) (MPU5) (set 1) + + + m5openbx01 + Open The Box (Barcrest) (MPU5) (set 4) + + + m5openbx05 + Open The Box (Barcrest) (MPU5) (set 3) + + + m5openbx06 + Open The Box (Barcrest) (MPU5) (set 2) + + + m5overld + Overload (Barcrest) (MPU5) (set 1) + + + m5overld02 + Overload (Barcrest) (MPU5) (set 2) + + + m5overld10 + Overload (Barcrest) (MPU5) (set 3) + + + m5overld11 + Overload (Barcrest) (MPU5) (set 4) + + + m5paint + Paint The Town Red (Barcrest - Red Gaming) (MPU5) + + + m5peepsh + Peep Show (Barcrest) (MPU5) + + + m5piefac + Pie Factory (Vivid) (MPU5) (set 1) + + + m5piefac12 + Pie Factory (Vivid) (MPU5) (set 3) + + + m5piefac23 + Pie Factory (Vivid) (MPU5) (set 2) + + + m5piefaca + Pie Factory (Vivid) (MPU5) (set 4) + + + m5piefc2 + Pie Factory 2 (Vivid) (MPU5) (set 1) + + + m5piefc2a + Pie Factory 2 (Vivid) (MPU5) (set 2) + + + m5piefc2b + Pie Factory 2 (Vivid) (MPU5) (set 3) + + + m5piefcr + Pie Factory Rio (Vivid) (MPU5) + + + m5ppussy + Pink Pussy (Mdm) (MPU5) + + + m5psy2 + Psycho Cash Beast 2 (Barcrest) (MPU5) + + + m5psyccl + Psycho Cash Beast Club (Barcrest) (MPU5) (set 1) + + + m5psyccl01 + Psycho Cash Beast Club (Barcrest) (MPU5) (set 2) + + + m5psyccla + Psycho Cash Beast Club (Bwb) (MPU5) (set 1) + + + m5psyccla02 + Psycho Cash Beast Club (Bwb) (MPU5) (set 3) + + + m5psyccla24 + Psycho Cash Beast Club (Bwb) (MPU5) (set 2) + + + m5psycho + Psycho Cash Beast (Barcrest) (MPU5) (set 1) + + + m5psycho06 + Psycho Cash Beast (Barcrest) (MPU5) (set 2) + + + m5psychoa + Psycho Cash Beast (Bwb) (MPU5) (set 1) + + + m5psychoa21 + Psycho Cash Beast (Bwb) (MPU5) (set 2) + + + m5ptyani + Party Animal (Barcrest) (MPU5) (set 1) + + + m5ptyani01 + Party Animal (Barcrest) (MPU5) (set 2) + + + m5qdraw + Quick On The Draw (Vivid) (MPU5) (set 1) + + + m5qdraw12 + Quick On The Draw (Vivid) (MPU5) (set 2) + + + m5qdraw14 + Quick On The Draw (Vivid) (MPU5) (set 3) + + + m5qdraw15 + Quick On The Draw (Vivid) (MPU5) (set 4) + + + m5qdrawa + Quick On The Draw (Vivid) (MPU5) (set 5) + + + m5qdrawb + Quick On The Draw (Vivid) (MPU5) (set 6) + + + m5qshot + Quack Shot (Barcrest) (MPU5) (set 1) + + + m5qshot04 + Quack Shot (Barcrest) (MPU5) (set 2) + + + m5quake + Quake (Barcrest - Red Gaming) (MPU5) + + + m5rainrn + Rainbow Runner (Barcrest - Red Gaming) (MPU5, set 1) + + + m5rainrna + Rainbow Runner (Barcrest - Red Gaming) (MPU5, set 2) + + + m5rampg + Rampage (Barcrest - Red Gaming) (MPU5) (set 1) + + + m5rampg11 + Rampage (Barcrest - Red Gaming) (MPU5) (set 2) + + + m5rampg12 + Rampage (Barcrest - Red Gaming) (MPU5) (set 3) + + + m5ramrcl + Ram Raid Club (Empire) (MPU5) + + + m5ramrd + Ram Raid (Empire) (MPU5) + + + m5ratpk + Rat Pack (Vivid) (MPU5) (set 1) + + + m5ratpka + Rat Pack (Vivid) (MPU5) (set 2) + + + m5rawin + Reel A Win (Vivid / Whitbread) (MPU5) + + + m5razdz + Razzle Dazzle Club (Barcrest) (MPU5) (set 1) + + + m5razdz10 + Razzle Dazzle Club (Barcrest) (MPU5) (set 2) + + + m5razdz11 + Razzle Dazzle Club (Barcrest) (MPU5) (set 3) + + + m5rcx + Royal Exchange Club (Barcrest) (MPU5) (set 1) + + + m5rcxa + Royal Exchange Club (Barcrest) (MPU5) (set 2) + + + m5rdwarf + Red Dwarf (Barcrest - Red Gaming) (MPU5) + + + m5redbal + Random Red Ball (Vivid) (MPU5) + + + m5redrck + Ready To Rock (Barcrest) (MPU5) (set 1) + + + m5redrck10 + Ready To Rock (Barcrest) (MPU5) (set 2) + + + m5redrcka + Ready To Rock (Barcrest) (MPU5) (set 3) + + + m5redx + Red X (Barcrest - Red Gaming) (MPU5) (set 1) + + + m5redx12 + Red X (Barcrest - Red Gaming) (MPU5) (set 2) + + + m5reelth + Reel Thunder (Bwb) (MPU5) + + + m5reelwn + Reel A Win (Bwb) (MPU5) (set 1) + + + m5reelwn24 + Reel A Win (Bwb) (MPU5) (set 2) + + + m5resfrg + Reservoir Frogs (Empire) (MPU5) + + + m5revo + Revolution (Barcrest) (MPU5) (set 1) + + + m5revo13 + Revolution (Barcrest) (MPU5) (set 2) + + + m5revoa + Revolution (Barcrest) (MPU5) (set 3) + + + m5rfymc + Run For Your Money Club (Barcrest) (MPU5) (set 1) + + + m5rfymc06 + Run For Your Money Club (Barcrest) (MPU5) (Set 2) + + + m5rgclb + Rio Grande Club (Barcrest) (MPU5) (set 1) + + + m5rgclb01 + Rio Grande Club (Barcrest) (MPU5) (set 7) + + + m5rgclb01a + Rio Grande Club (Barcrest) (MPU5) (set 8) + + + m5rgclb03 + Rio Grande Club (Barcrest) (MPU5) (set 6) + + + m5rgclb11 + Rio Grande Club (Barcrest) (MPU5) (set 2) + + + m5rgclb12 + Rio Grande Club (Barcrest) (MPU5) (set 3) + + + m5rgclb20 + Rio Grande Club (Barcrest) (MPU5) (set 4) + + + m5rgclb21 + Rio Grande Club (Barcrest) (MPU5) (set 5) + + + m5rhkni + Red Hot Knights (Barcrest) (MPU5) + + + m5rhrg + Red Hot Roll Gold (Barcrest) (MPU5) (set 1) + + + m5rhrga + Red Hot Roll Gold (Barcrest) (MPU5) (set 2) + + + m5rhrgt + Red Hot Roll Triple (Barcrest) (MPU5) (set 1) + + + m5rhrgt02 + Red Hot Roll Triple (Barcrest) (MPU5) (set 3) + + + m5rhrgt12 + Red Hot Roll Triple (Barcrest) (MPU5) (set 2) + + + m5ritj + Rumble In The Jungle (Barcrest) (MPU5) + + + m5rlup + Roll Up (Bwb) (MPU5) + + + m5rollup + Roll Up Roll Up (Vivid) (MPU5) + + + m5rollx + Roll X (Empire) (MPU5) (set 1) + + + m5rollx12 + Roll X (Empire) (MPU5) (set 2) + + + m5ronr + Reel Or No Reel (Empire) (MPU5) (set 1) + + + m5ronr05 + Reel Or No Reel (Empire) (MPU5) (set 2) + + + m5ronr07 + Reel Or No Reel (Empire) (MPU5) (set 3) + + + m5roof + Raise The Roof (Barcrest) (MPU5) (set 1) + + + m5roofa + Raise The Roof (Barcrest) (MPU5) (set 2) + + + m5round + Round & Round (Bwb) (MPU5) + + + m5roundl + Round & Round (Lowen) (MPU5) + + + m5rthh + Return To The Haunted House (Empire) (MPU5) + + + m5rub + Rubies & Diamonds (Barcrest) (MPU5) + + + m5rwb + Red White & Blue (Barcrest) (MPU5) + + + m5rwbbwb + Red White & Blue (Bwb) (MPU5) (set 1) + + + m5rwbbwb15 + Red White & Blue (Bwb) (MPU5) (set 4) + + + m5rwbbwb24 + Red White & Blue (Bwb) (MPU5) (set 2) + + + m5rwbbwb25 + Red White & Blue (Bwb) (MPU5) (set 3) + + + m5sblz + Snail Blazer (Barcrest - Red Gaming) (MPU5) + + + m5scfinl + Super Cup Final (Lowen) (MPU5) + + + m5scharg + Super Charged (Barcrest) (MPU5) (set 1) + + + m5scharg05 + Super Charged (Barcrest) (MPU5) (set 2) + + + m5scharg06 + Super Charged (Barcrest) (MPU5) (set 3) + + + m5scharga + Super Charged (Barcrest) (MPU5) (set 4) + + + m5sec7 + Secret 7s (Bwb) (MPU5) (set 1) + + + m5sec7a + Secret 7s (Bwb) (MPU5) (set 2) + + + m5seven + Seven Deadly Spins (Barcrest) (MPU5) + + + m5shark + Shark Raving Mad (Vivid) (MPU5) (set 1) + + + m5sharka + Shark Raving Mad (Vivid) (MPU5) (set 2) + + + m5sheik + Sheik Yer Money (Barcrest) (MPU5) + + + m5showtm + Showtime (Barcrest) (MPU5) + + + m5sil7 + Silver 7s (Bwb) (MPU5) (set 1) + + + m5sil7a + Silver 7s (Bwb) (MPU5) (set 2) + + + m5silver + Silver Screen (Barcrest) (MPU5) (set 1) + + + m5silver03 + Silver Screen (Barcrest) (MPU5) (set 3) + + + m5silver06 + Silver Screen (Barcrest) (MPU5) (set 2) + + + m5sixsht + Six Shooter (Vivid) (MPU5) (v1.1, set 1) + + + m5sixshta + Six Shooter (Vivid) (MPU5) (v1.1, set 2) + + + m5sixshtb + Six Shooter (Vivid) (MPU5) (v2.0, set 1) + + + m5sixshtc + Six Shooter (Vivid) (MPU5) (v2.0, set 2) + + + m5sixshtd + Six Shooter (Vivid) (MPU5) (v2.0, set 3) + + + m5sixshte + Six Shooter (Vivid) (MPU5) (v2.0, set 4) + + + m5sixshtf + Six Shooter (Vivid) (MPU5) (v2.0, set 5) + + + m5sixshtg + Six Shooter (Vivid) (MPU5) (v2.0, set 6) + + + m5sixshth + Six Shooter (Vivid) (MPU5) (v2.0, set 7) + + + m5sixshti + Six Shooter (Vivid) (MPU5) (v2.1, set 1) + + + m5sixshtj + Six Shooter (Vivid) (MPU5) (v2.1, set 2) + + + m5sixshtk + Six Shooter (Vivid) (MPU5) (v2.1, set 3) + + + m5sixshtl + Six Shooter (Vivid) (MPU5) (v2.1, set 4) + + + m5sixshtm + Six Shooter (Vivid) (MPU5) (v2.1, set 5) + + + m5sixshtn + Six Shooter (Vivid) (MPU5) (v2.1, set 6) + + + m5skulcl + Skullduggery Club (Empire) (MPU5) (set 1) + + + m5skulcl20 + Skullduggery Club (Empire) (MPU5) (set 2) + + + m5skulcl23 + Skullduggery Club (Empire) (MPU5) (set 3) + + + m5slide + Slider (Barcrest - Red Gaming) (MPU5) + + + m5smobik + Smokey Bikin (Bwb) (MPU5) (set 1) + + + m5smobik12 + Smokey Bikin (Bwb) (MPU5) (set 2) + + + m5sondr + Son Of Dracula (Barcrest) (MPU5) (set 1) + + + m5sondr05 + Son Of Dracula (Barcrest) (MPU5) (set 2) + + + m5sondra + Son Of Dracula (Barcrest) (MPU5) (15GBP Jackpot) + + + m5spddmn + Speed Demon (Vivid) (MPU5) + + + m5speccl + Spectrum Club (Vivid) (MPU5) + + + m5spicer + The Spice Is Right (Barcrest) (MPU5) (set 1) + + + m5spicer06 + The Spice Is Right (Barcrest) (MPU5) (set 2) + + + m5spiker + Spiker The Biker (Barcrest) (MPU5) (set 1) + + + m5spiker02 + Spiker The Biker (Barcrest) (MPU5) (set 2) + + + m5spikera + Spiker The Biker (Barcrest) (MPU5) (set 3) + + + m5spins + Spinsation (Barcrest) (MPU5) + + + m5squids + Squids In (Barcrest) (MPU5) (set 1) + + + m5squids04a + Squids In (Barcrest) (MPU5) (set 2) + + + m5squids05 + Squids In (Barcrest) (MPU5) (set 3) + + + m5squids06 + Squids In (Barcrest) (MPU5) (set 4) + + + m5sstrk + Super Streak (Barcrest) (MPU5) (set 1) + + + m5sstrk02a + Super Streak (Barcrest) (MPU5) (set 2) + + + m5starcl + Stars & Stripes Club (Vivid) (MPU5) + + + m5stars + Stars & Stripes (Vivid) (MPU5) (set 1) + + + m5stars10 + Stars & Stripes (Vivid) (MPU5) (set 8) + + + m5stars10a + Stars & Stripes (Vivid) (MPU5) (set 9) + + + m5stars13a + Stars & Stripes (Vivid) (MPU5) (set 2) + + + m5stars20 + Stars & Stripes (Vivid) (MPU5) (set 7) + + + m5stars22 + Stars & Stripes (Vivid) (MPU5) (set 6) + + + m5stars25 + Stars & Stripes (Vivid) (MPU5) (set 5) + + + m5stars25a + Stars & Stripes (Vivid) (MPU5) (set 4) + + + m5stars26 + Stars & Stripes (Vivid) (MPU5) (set 3) + + + m5startr + Stars & Stripes Triple (Vivid) (MPU5) + + + m5stax + Stax Of Cash (Barcrest) (MPU5) + + + m5supnov + Supernova (Barcrest) (MPU5) (set 1) + + + m5supnova + Supernova (Barcrest) (MPU5) (set 2) + + + m5supro + Super Roulette (Vivid) (MPU5) (set 1) + + + m5suproa + Super Roulette (Vivid) (MPU5) (set 2) + + + m5supstr + Super Star (Barcrest) (MPU5) (set 1) + + + m5supstra + Super Star (Barcrest) (MPU5) (set 2) + + + m5tball + Thunderball (Empire) (MPU5) + + + m5tbird + Thunderbird (Barcrest) (MPU5) + + + m5tempcl + Temple Of Treasure Club (Barcrest) (MPU5) + + + m5tempp + Temple Of Pleasure (Vivid) (MPU5) + + + m5tempt + Temple Of Treasure (Barcrest) (MPU5) (set 1) + + + m5tempt05 + Temple Of Treasure (Barcrest) (MPU5) (set 2) + + + m5tempt2 + Temple Of Treasure 2 (Barcrest) (MPU5) (set 1) + + + m5tempt203 + Temple Of Treasure 2 (Barcrest) (MPU5) (set 2) + + + m5tempt2a + Temple Of Treasure 2 (Barcrest) (MPU5) (set 3) + + + m5tempta + Temple Of Treasure (Barcrest) (MPU5) (set 3) + + + m5temptb + Temple Of Treasure (Barcrest) (MPU5) (set 4) + + + m5thtsmg + That's Magic (Barcrest - Red Gaming) (MPU5) + + + m5tictac + Tic Tac Tut (Vivid) (MPU5) + + + m5tictacbwb + Tic Tac Tut (Bwb) (MPU5) (set 1) + + + m5tictacbwb16 + Tic Tac Tut (Bwb) (MPU5) (set 2) + + + m5tomb + Tomb Raiders (Empire) (MPU5) + + + m5topdog + Top Dog (Barcrest) (MPU5) (set 1) + + + m5topdog04 + Top Dog (Barcrest) (MPU5) (set 2) + + + m5topdoga + Top Dog (Barcrest) (MPU5) (set 3) + + + m5topdol + Top Dollar (Barcrest - Red Gaming) (MPU5) (set 1) + + + m5topdola + Top Dollar (Barcrest - Red Gaming) (MPU5) (set 2) + + + m5trail + Trailblazer Club (Barcrest) (MPU5) + + + m5trclb + Tomb Raiders Club (Empire) (MPU5) + + + m5tsar + Tsar Wars (Empire) (MPU5) + + + m5tst + MPU 5 Test Rom (Barcrest) (MPU5) + + + m5ttop + Treble Top (Empire) (MPU5) (set 1) + + + m5ttop04 + Treble Top (Empire) (MPU5) (set 2) + + + m5ttop10 + Treble Top (Empire) (MPU5) (set 3) + + + m5ttopcl + Treble Top Club (Empire) (MPU5) + + + m5ttwo + Take Two (Barcrest) (MPU5) + + + m5ultimo + Ultimo (Barcrest) (MPU5) (set 1) + + + m5ultimo03a + Ultimo (Barcrest) (MPU5) (set 2) + + + m5ultimo04 + Ultimo (Barcrest) (MPU5) (set 3) + + + m5upover + Up & Over (Barcrest) (MPU5) (set 1) + + + m5upover15 + Up & Over (Barcrest) (MPU5) (set 2) + + + m5vampup + Vamp It Up (Barcrest) (MPU5) + + + m5vertcl + Vertigo Club (Empire) (MPU5) + + + m5vertgo + Vertigo (Empire) (MPU5) + + + m5whdres + Who Dares Spins (MPU5) + + + m5winway + Winning Ways (MPU5) + + + m5wking + Wild King (Barcrest) (MPU5) (set 1) + + + m5wking05 + Wild King (Barcrest) (MPU5) (set 2) + + + m5wonga + A Fish Called Wonga (Empire) (MPU5) + + + m5wthing + Wild Thing Club (Empire) (MPU5) (set 1) + + + m5wthing11 + Wild Thing Club (Empire) (MPU5) (set 2) + + + m5wthing20 + Wild Thing Club (Empire) (MPU5) (set 3) + + + m5xchn + Exchanges Unlimited (Barcrest) (MPU5) + + + m5xena + Xena Warrior Princess (Bwb) (MPU5) + + + m5xfact + X Factor (Empire) (MPU5) (set 1) + + + m5xfact02 + X Factor (Empire) (MPU5) (set 2) + + + m5xfact04 + X Factor (Empire) (MPU5) (set 3) + + + m5xfact11 + X Factor (Empire) (MPU5) (set 4) + + + m5zigzag + Zig Zag (Barcrest - Red Gaming) (MPU5) + + + m660 + Mission 660 (US) + + + m660b + Mission 660 (bootleg) + + + m660j + Mission 660 (Japan) + + + m79amb + M-79 Ambush + + + m_mpac + Mr. and Mrs. PacMan + + + m_tppokr + Top Poker (Dutch, Game Card 95-750-899) + + + mac2bios + Multi Amenity Cassette System 2 BIOS + + + macattck + Mac Attack + + + mace + Mace: The Dark Age (boot ROM 1.0ce, HDD 1.0b) + + + macea + Mace: The Dark Age (HDD 1.0a) + + + mach2 + Mach 2 + + + mach3 + M.A.C.H. 3 + + + macha + Monoshiri Quiz Osyaberi Macha (Japan) + + + machbrkr + Mach Breakers - Numan Athletics 2 (Japan) + + + machomou + Macho Mouse + + + machridr + Vs. Mach Rider (Endurance Course Version) + + + machridra + Vs. Mach Rider (Fighting Course Version, set MR4-1 A) + + + macross + Super Spacefortress Macross / Chou-Jikuu Yousai Macross + + + macross2 + Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II + + + macrossp + Macross Plus + + + macsbios + Multi Amenity Cassette System BIOS + + + madalien + Mad Alien + + + madaliena + Mad Alien (Highway Chase) + + + madball + Mad Ball V2.0 + + + madballn + Mad Ball V2.0 (With Nudity) + + + madcrash + Mad Crasher + + + madcrush + Mad Crusher (Japan) + + + maddog + Mad Dog McCree v2.03 board rev.B + + + maddog2 + Mad Dog II: The Lost Gold v2.04 + + + maddog21 + Mad Dog II: The Lost Gold v1.0 + + + maddog22 + Mad Dog II: The Lost Gold v2.02 + + + maddoga + Mad Dog McCree v1C board rev.A + + + maddonna + Mad Donna (set 1) + + + maddonnb + Mad Donna (set 2) + + + madgear + Mad Gear (US) + + + madgearj + Mad Gear (Japan) + + + madmotor + Mad Motor + + + madrace + Mad Race + + + madshark + Mad Shark + + + madzoo + Mad Zoo (version U450C) + + + magdrop + Magical Drop (Japan, Version 1.1, 1995.06.21) + + + magdrop2 + Magical Drop II + + + magdrop3 + Magical Drop III + + + magdropp + Magical Drop Plus 1 (Japan, Version 2.1, 1995.09.12) + + + magerror + Magical Error wo Sagase + + + magic + Magic + + + magic10 + Magic's 10 (ver. 16.55) + + + magic102 + Magic's 10 2 (ver 1.1) + + + magic10a + Magic's 10 (ver. 16.54) + + + magic10b + Magic's 10 (ver. 16.45) + + + magic10c + Magic's 10 (ver. 16.15) + + + magicard + Magic Card (set 1) + + + magicarda + Magic Card (set 2) + + + magicardb + Magic Card (set 3) + + + magicarde + Magic Card Export 94 + + + magicardj + Magic Card Jackpot (4.01) + + + magicbal + Magicball Fighting (Korea) + + + magicbom + Magic Bomb (Version 1) + + + magicbub + Magic Bubble + + + magicbuba + Magic Bubble (Adult version) + + + magicfly + Magic Fly + + + magicle + Magic Lotto Export (5.03) + + + magicmsk + Magic Mask (MV4115, Export) + + + magicrd2 + Magic Card II (Bulgarian) + + + magicrd2a + Magic Card II (Nov, Yugoslavian) + + + magicrd2b + Magic Card II (green TAB or Impera board) + + + magicrd2c + Magic Card II (blue TAB board, encrypted) + + + magicstk + Magic Sticks + + + magictg + Magic the Gathering: Armageddon (set 1) + + + magictga + Magic the Gathering: Armageddon (set 2) + + + magix + Magix / Rock + + + magixb + Magix / Rock (no copyright message) + + + magjoker + Magic Joker (v1.25.10.2000) + + + maglord + Magician Lord (NGM-005) + + + maglordh + Magician Lord (NGH-005) + + + magmax + Mag Max + + + magodds + Magical Odds (set 1) + + + magoddsa + Magical Odds (set 2) + + + magoddsb + Magical Odds (set 3) + + + magoddsc + Magical Odds (set 4, custom encrypted CPU block) + + + magoddsd + Magical Odds (set 5, custom encrypted CPU block) + + + magspeed + Magical Speed + + + magspot + Magical Spot + + + magspot2 + Magical Spot II + + + magtouch + Magical Touch + + + magtruck + Magical Truck Adventure + + + magworm + Magic Worm (bootleg of Centipede, set 1) + + + magworma + Magic Worm (bootleg of Centipede, set 2) + + + magzun + Magical Zunou Power (J 961031 V1.000) + + + mahjngoh + Mahjong Oh (V2.06J) + + + mahmajn + Tokoro San no MahMahjan (Japan, ROM Based) + + + mahmajn2 + Tokoro San no MahMahjan 2 (Japan, ROM Based) + + + mahoudai + Mahou Daisakusen (Japan) + + + mahretsu + Mahjong Kyo Retsuden (NGM-004)(NGH-004) + + + maiko + Maikobana (Japan 900802) + + + mainevt + The Main Event (4 Players ver. Y) + + + mainevt2p + The Main Event (2 Players ver. X) + + + mainevto + The Main Event (4 Players ver. F) + + + mainline + Mainline Double Joker Poker + + + mainsnk + Main Event (1984) + + + majest12 + Majestic Twelve - The Space Invaders Part IV (Japan) + + + majorpkr + Major Poker (v2.0) + + + majrjhdx + Mahjong Raijinhai DX + + + majs101b + Mahjong Studio 101 [BET] (Japan) + + + majtitl2 + Major Title 2 (World) + + + majtitl2j + Major Title 2 (Japan) + + + majtitle + Major Title (World) + + + majtitlej + Major Title (Japan) + + + majuu + Majuu no Ohkoku + + + majxtal7 + Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan) + + + makaiden + Makai Densetsu (Japan) + + + makaijan + Makaijan [BET] (Japan) + + + makaimur + Makai-Mura (Japan) + + + makaimurc + Makai-Mura (Japan Revision C) + + + makaimurg + Makai-Mura (Japan Revision G) + + + maketrax + Make Trax (US set 1) + + + maketrxb + Make Trax (US set 2) + + + makyosen + Makyou Senshi (Japan) + + + maletmad + Mallet Madness v2.1 + + + malzak + Malzak + + + malzak2 + Malzak II + + + mamboagg + Mambo A Go-Go (GQA40 VER. JAB) + + + mamboagga + Mambo A Go-Go e-Amusement (GQA40 VER. JRB) + + + mamonoro + Mamoru-kun wa Norowarete Shimatta! + + + mangchi + Mang-Chi + + + manhatan + Manhattan 24 Bunsyo (Japan) + + + maniach + Mania Challenge (set 1) + + + maniach2 + Mania Challenge (set 2) + + + maniacsp + Maniac Square (prototype) + + + maniacsq + Maniac Square (unprotected) + + + manicpnc + Manic Panic Ghosts! + + + manohman + Mann, oh-Mann + + + manxtt + Manx TT Superbike - DX (Revision D) + + + manxttc + Manx TT Superbike - Twin (Revision C) + + + manybloc + Many Block + + + mappy + Mappy (US) + + + mappyj + Mappy (Japan) + + + marble + Marble Madness (set 1) + + + marble2 + Marble Madness (set 2) + + + marble3 + Marble Madness (set 3) + + + marble4 + Marble Madness (set 4) + + + marble5 + Marble Madness (set 5 - LSI Cartridge) + + + margmgc + Margarita Magic (01J00101, NSW/ACT) + + + marineb + Marine Boy + + + marinedt + Marine Date + + + mariner + Mariner + + + mario + Mario Bros. (US, Revision F) + + + marioe + Mario Bros. (US, Revision E) + + + marioj + Mario Bros. (Japan) + + + marioo + Mario Bros. (US, Unknown Rev) + + + markham + Markham + + + mars + Mars + + + marsp + Mars - God of War + + + marstv + Mars TV (JPN) + + + martmast + Martial Masters (ver. 104, 102, 102US) + + + martmastc + Martial Masters (ver. 104, 102, 101CN) + + + martmastc102 + Martial Masters (ver. 102, 101, 101CN) + + + maruchan + Maru-Chan de Goo! (J 971216 V1.000) + + + marukin + Super Marukin-Ban (Japan 901017) + + + marukodq + Chibi Marukochan Deluxe Quiz + + + marvins + Marvin's Maze + + + marvland + Marvel Land (US) + + + marvlandj + Marvel Land (Japan) + + + masao + Masao + + + maski + Maski Show (Russia) (Extrema) + + + mastboy + Master Boy (Spanish, PCB Rev A) + + + mastboyi + Master Boy (Italian, PCB Rev A) + + + masterw + Master of Weapon (World) + + + masterwj + Master of Weapon (Japan) + + + masterwu + Master of Weapon (US) + + + mastkin + The Masters of Kin + + + mastninj + Master Ninja (bootleg of Shadow Warriors / Ninja Gaiden) + + + matahari + Mata Hari + + + match98 + Match '98 (ver. 1.33) + + + matchit + Match It + + + matchit2 + Match It II + + + matmania + Mat Mania + + + matrim + Matrimelee / Shin Gouketsuji Ichizoku Toukon (NGM-2660) (NGH-2660) + + + matrimbl + Matrimelee / Shin Gouketsuji Ichizoku Toukon (bootleg) + + + mausuke + Mausuke no Ojama the World (J 960314 V1.000) + + + mav_100 + Maverick (1.00) + + + mav_400 + Maverick (Display Rev. 4.00) + + + mav_401 + Maverick (Display Rev. 4.01) + + + mav_402 + Maverick (Display Rev. 4.02) + + + maverik + Maverik + + + maxaflex + Max-A-Flex + + + maxf_102 + Maximum Force v1.02 + + + maxf_ng + Maximum Force (No Gore version) + + + maxforce + Maximum Force v1.05 + + + maxidbl + Maxi Double Poker (Ver. 1.10) + + + maxideal + Maxi-Dealer + + + maxrpm + Max RPM (ver 2) + + + maxspeed + Maximum Speed + + + maya + Maya (set 1) + + + mayaa + Maya (set 2) + + + mayday + Mayday (set 1) + + + maydaya + Mayday (set 2) + + + maydayb + Mayday (set 3) + + + mayhem + Mayhem 2002 + + + mayjin3 + Mayjinsen 3 + + + mayjinsn + Mayjinsen + + + mayjisn2 + Mayjinsen 2 + + + mayumi + Kikiippatsu Mayumi-chan (Japan) + + + mazan + Mazan: Flash of the Blade (MAZ2 Ver. A) + + + mazana + Mazan: Flash of the Blade (MAZ3 Ver. A) + + + maze + Amazing Maze + + + mazeinv + Maze Invaders (prototype) + + + mazerbla + Mazer Blazer (set 1) + + + mazerblaa + Mazer Blazer (set 2) + + + mazinger + Mazinger Z (World) + + + mazingerj + Mazinger Z (Japan) + + + mb_10 + Monster Bash (1.0) + + + mb_106 + Monster Bash (1.06) + + + mb_106b + Monster Bash (1.06b) + + + mbaa + Melty Blood Actress Again + + + mbaaa + Melty Blood Actress Again (Ver. A) + + + mbomberj + Muscle Bomber: The Body Explosion (Japan 930713) + + + mbombrd + Muscle Bomber Duo: Ultimate Team Battle (World 931206) + + + mbombrdj + Muscle Bomber Duo: Heat Up Warriors (Japan 931206) + + + mbossy + Mike Bossy + + + mbrush + Magic Brush (bootleg of Crush Roller) + + + mcastle + Magic Castle + + + mcastlef + Magic Castle (French speech) + + + mcastleg + Magic Castle (German speech) + + + mcastlei + Magic Castle (Italian speech) + + + mcatadv + Magical Cat Adventure + + + mcatadvj + Magical Cat Adventure (Japan) + + + mchampdx + Multi Champ Deluxe (ver. 0106, 06/01/2000) + + + mchampdxa + Multi Champ Deluxe (ver. 1126, 26/11/1999) + + + mchampdxb + Multi Champ Deluxe (ver. 1114, 14/11/1999) + + + mcitylov + City Love [BET] (Japan 860904) + + + mclass + Magic Class (Ver 2.2) + + + mcnpshnt + Mahjong Campus Hunting (Japan) + + + mcolors + Magic Colors (ver. 1.7a) + + + mcombat + Missile Combat (Videotron bootleg, set 1) + + + mcombata + Missile Combat (Videotron bootleg, set 2) + + + mcombats + Missile Combat (Sidam bootleg) + + + mcontest + Miss Mahjong Contest (Japan) + + + mdhorse + Derby Quiz My Dream Horse (Japan, MDH1/VER.A2) + + + mdntmrdr + Midnight Marauders (Gun game) + + + mdrawpkr + Draw Poker - Joker's Wild (Standard) + + + mdrawpkra + Draw Poker - Joker's Wild (02-11) + + + mdrink + Magic Drink (Ver 1.2) + + + mechatt + Mechanized Attack (World) + + + mechattj + Mechanized Attack (Japan) + + + mechattu + Mechanized Attack (US) + + + mechattu1 + Mechanized Attack (US, Version 1, Single Player) + + + medlanes + Meadows Lanes + + + medusa + Medusa + + + megaaton + Meg Aaton + + + megablst + Mega Blast (World) + + + megablstj + Mega Blast (Japan) + + + megablstu + Mega Blast (US) + + + megadble + Mega Double Poker (Ver. 1.63 Espagnol) + + + megadblj + Mega Double Poker Jackpot (Ver. 1.26) + + + megadon + Megadon + + + megadpkr + Mega Double Poker (conversion kit, set 1) + + + megadpkrb + Mega Double Poker (conversion kit, set 2) + + + megaforc + Mega Force + + + megakat + Mega Katok 2 + + + megaline + Mega Lines + + + megaman + Mega Man: The Power Battle (CPS1, USA 951006) + + + megaman2 + Mega Man 2: The Power Fighters (USA 960708) + + + megaman2a + Mega Man 2: The Power Fighters (Asia 960708) + + + megaman2h + Mega Man 2: The Power Fighters (Hispanic 960712) + + + megamana + Mega Man: The Power Battle (CPS1, Asia 951006) + + + megamn2d + Mega Man 2: The Power Fighters (USA 960708 Phoenix Edition) (bootleg) + + + megaphx + Mega Phoenix + + + megaplay + Mega Play BIOS + + + megat2 + Pit Boss Megatouch II (9255-10-01 ROG, Standard version) + + + megat2a + Pit Boss Megatouch II (9255-10-01 ROE, Standard version) + + + megat2b + Pit Boss Megatouch II (9255-10-01 ROD, Standard version) + + + megat2ca + Pit Boss Megatouch II (9255-10-06 ROG, California version) + + + megat2caa + Pit Boss Megatouch II (9255-10-06 ROE, California version) + + + megat2mn + Pit Boss Megatouch II (9255-10-02 ROG, Minnesota version) + + + megat3 + Megatouch III (9255-20-01 RON, Standard version) + + + megat3a + Megatouch III (9255-20-01 ROK, Standard version) + + + megat3b + Megatouch III (9255-20-01 ROF, Standard version) + + + megat3c + Megatouch III (9255-20-01 ROB, Standard version) + + + megat3ca + Megatouch III (9255-20-06 RON, California version) + + + megat3caa + Megatouch III (9255-20-06 ROD, California version) + + + megat3d + Megatouch III (9255-20-01 ROA, Standard version) + + + megat3nj + Megatouch III (9255-20-07 ROG, New Jersey version) + + + megat3te + Megatouch III Tournament Edition (9255-30-01 ROE, Standard version) + + + megat4 + Megatouch IV (9255-40-01 ROE, Standard version) + + + megat4a + Megatouch IV (9255-40-01 ROD, Standard version) + + + megat4b + Megatouch IV (9255-40-01 ROB, Standard version) + + + megat4c + Megatouch IV (9255-40-01 ROA, Standard version) + + + megat4d + Megatouch IV (9255-40-01 RO, Standard version) + + + megat4s + Super Megatouch IV (9255-41-01 ROG, Standard version) + + + megat4sa + Super Megatouch IV (9255-41-01 ROE, Standard version) + + + megat4sb + Super Megatouch IV (9255-41-01 ROC, Standard version) + + + megat4smn + Super Megatouch IV (9255-41-02 ROC, Minnesota version) + + + megat4snj + Super Megatouch IV (9255-41-07 ROG, New Jersey version) + + + megat4st + Super Megatouch IV Tournament Edition (9255-51-01 ROB, Standard version) + + + megat4stg + Super Megatouch IV Turnier Version (9255-51-50 ROA, Bi-Lingual GER/ENG version) + + + megat4te + Megatouch IV Tournament Edition (9255-50-01 ROD, Standard version) + + + megat4tea + Megatouch IV Tournament Edition (9255-50-01 ROA, Standard version) + + + megat5 + Megatouch 5 (9255-60-01 ROI, Standard version) + + + megat5a + Megatouch 5 (9255-60-01 ROC, Standard version) + + + megat5nj + Megatouch 5 (9255-60-07 RON, New Jersey version) + + + megat5t + Megatouch 5 Tournament Edition (9255-70-01 ROC, Standard version) + + + megat5tg + Megatouch 5 Turnier Version (9255-70-50 ROD, Bi-Lingual GER/ENG version) + + + megat6 + Megatouch 6 (9255-80-01 ROA, Standard version) + + + megatack + Megatack + + + megatech + Mega-Tech + + + megazone + Mega Zone (Konami set 1) + + + megazonea + Mega Zone (Konami set 2) + + + megazoneb + Mega Zone (Kosuka set 1) + + + megazonec + Mega Zone (Kosuka set 2) + + + megazonei + Mega Zone (Interlogic) + + + meijinsn + Meijinsen + + + meikyuh + Meikyuu Hunter G (Japan, set 1) + + + meikyuha + Meikyuu Hunter G (Japan, set 2) + + + meltyb + Melty Blood Act Cadenza Ver B (GDL-0039) + + + meltyba + Melty Blood Act Cadenza Ver B (Rev A) (GDL-0039A) + + + meltybld + Melty Blood Act Cadenza (Rev C) (GDL-0028C) + + + memlane + Memory Lane + + + meosism + Meosis Magic (Japan) + + + mephistp + Mephisto (rev. 1.2) + + + mephistp1 + Mephisto (rev. 1.1) + + + mercs + Mercs (World 900302) + + + mercsj + Senjou no Ookami II (Japan 900302) + + + mercsu + Mercs (USA 900608) + + + mercsur1 + Mercs (USA 900302) + + + merlinmm + Merlins Money Maze + + + mermaid + Mermaid + + + merryjn + Merry Joiner + + + metafox + Meta Fox + + + metalb + Metal Black (World) + + + metalbj + Metal Black (Japan) + + + metalman + Metal Man + + + metalmx + Metal Maniax (prototype) + + + metamrph + Metamorphic Force (ver EAA) + + + metamrphj + Metamorphic Force (ver JAA) + + + metamrphu + Metamorphic Force (ver UAA) + + + meteor + Meteoroids + + + meteorho + Meteor (bootleg of Asteroids) + + + meteorp + Meteor (Stern) + + + meteort + Meteor (Taito) + + + meteorts + Meteorites (bootleg of Asteroids) + + + metlclsh + Metal Clash (Japan) + + + metlhawk + Metal Hawk (Rev C) + + + metlhawkj + Metal Hawk (Japan, Rev F) + + + metlsavr + Metal Saver + + + metmqstr + Metamoqester (International) + + + metrocrs + Metro-Cross (set 1) + + + metrocrsa + Metro-Cross (set 2) + + + mexico + Mexico 86 (German speech) + + + mexico86 + Mexico 86 (bootleg of Kick and Run) + + + mf_achas + Astro Chase (Max-A-Flex) + + + mf_bdash + Boulder Dash (Max-A-Flex) + + + mf_brist + Bristles (Max-A-Flex) + + + mf_flip + Flip & Flop (Max-A-Flex) + + + mfightc + Mahjong Fight Club (ver JAD) + + + mfightcc + Mahjong Fight Club (ver JAC) + + + mfish_11 + Multi Fish (031124) + + + mfish_12 + Multi Fish (040308) + + + mfish_12a + Multi Fish (bootleg, 040308, banking address hack) + + + mfish_13 + Multi Fish (040316) + + + mfish_3 + Multi Fish (021124) + + + mfish_3a + Multi Fish (bootleg, 021124, banking address hack) + + + mfish_6 + Multi Fish (030124) + + + mfish_8 + Multi Fish (030522) + + + mfjump + Monster Farm Jump (Japan) + + + mfunclub + Mahjong Fun Club - Idol Saizensen (Japan) + + + mg_alad + Aladdin's Cave (Maygay M2) + + + mg_bb + Big Break (Maygay M2) + + + mg_ewg + Each Way Gambler (Maygay M2) + + + mg_gbr + Guinness Book Of Records (Maygay M2) + + + mg_jv + Jack & Vera (Maygay M2) + + + mg_kf + Krypton Factor (Maygay M2) + + + mg_lug + London Underground (Maygay M2) + + + mg_pbw + Pinball Wizard (Maygay M2) + + + mg_risk + Risk (Maygay M2) + + + mg_scl + Super Clue (Maygay M2) + + + mgakuen + Mahjong Gakuen + + + mgakuen2 + Mahjong Gakuen 2 Gakuen-chou no Fukushuu + + + mgcldate + Magical Date / Magical Date - dokidoki kokuhaku daisakusen (Ver 2.02J) + + + mgcldtex + Magical Date EX / Magical Date - sotsugyou kokuhaku daisakusen (Ver 2.01J) + + + mgcrystl + Magical Crystals (World, 92/01/10) + + + mgcrystlj + Magical Crystals (Japan, 92/01/13) + + + mgcrystlo + Magical Crystals (World, 91/12/10) + + + mgcs + Mahjong Man Guan Cai Shen (V103CS) + + + mgdh + Mahjong Man Guan Da Heng (Taiwan, V125T1) + + + mgdha + Mahjong Man Guan Da Heng (Taiwan, V123T1) + + + mgfx + Man Guan Fu Xing + + + mgion + Gionbana [BET] (Japan 890207) + + + mgmen89 + Mahjong G-MEN'89 (Japan 890425) + + + mgnumber + Magic Number + + + mgolf + Atari Mini Golf (prototype) + + + mgprem11 + Magic Premium (v1.1) + + + mhavoc + Major Havoc (rev 3) + + + mhavoc2 + Major Havoc (rev 2) + + + mhavocp + Major Havoc (prototype) + + + mhavocrv + Major Havoc (Return to Vax) + + + mhgaiden + Mahjong Hourouki Gaiden (Japan) + + + mhhonban + Mahjong Housoukyoku Honbanchuu (Japan) + + + mia + M.I.A. - Missing in Action (version T) + + + mia2 + M.I.A. - Missing in Action (version S) + + + miaj + M.I.A. - Missing in Action (Japan) + + + michigan + Michigan (Bingo) + + + michkit1 + Michigan Bingo Kit 1 Generation (Bingo) + + + michkitb + Michigan Kit Bingo Stake 6/10 (Bingo) + + + michnew + Michigan Bingo New (Bingo) + + + michstake + Michigan Bingo Stake 6/10 (Bingo) + + + micrombc + Microman Battle Charge (J 990326 V1.000) + + + midearth + Middle Earth + + + midnrun + Midnight Run (Euro v1.11) + + + midres + Midnight Resistance (World) + + + midresb + Midnight Resistance (bootleg with 68705) + + + midresj + Midnight Resistance (Japan) + + + midresu + Midnight Resistance (US) + + + miexchng + Money Puzzle Exchanger / Money Idol Exchanger + + + mightguy + Mighty Guy + + + mightybj + Vs. Mighty Bomb Jack (Japan) + + + mikie + Mikie + + + mikiehs + Mikie (High School Graffiti) + + + mikiej + Shinnyuushain Tooru-kun + + + mil4000 + Millennium Nuovo 4000 (Version 2.0) + + + mil4000a + Millennium Nuovo 4000 (Version 1.8) + + + mil4000b + Millennium Nuovo 4000 (Version 1.5) + + + mil4000c + Millennium Nuovo 4000 (Version 1.6) + + + millipdd + Millipede Dux (hack) + + + milliped + Millipede + + + milln_l3 + Millionaire (L-3) + + + millpac + Millpac (bootleg of Centipede) + + + millsun + Millennium Sun + + + mimonkey + Mighty Monkey + + + mimonsco + Mighty Monkey (bootleg on Super Cobra hardware) + + + mimonscr + Mighty Monkey (bootleg on Scramble hardware) + + + minasan + Minasanno Okagesamadesu! Daisugorokutaikai (MOM-001)(MOH-001) + + + minefld + Minefield + + + mineswpr + Minesweeper + + + mineswpr4 + Minesweeper (4-Player) + + + minferno + Inferno (Meadows) + + + miniboy7 + Mini Boy 7 (set 1) + + + miniboy7a + Mini Boy 7 (set 2) + + + miniboy7b + Mini Boy 7 (set 3) + + + minigolf + Mini Golf (11/25/85) + + + minigolf2 + Mini Golf (10/8/85) + + + minivadr + Mini Vaders + + + mirage + Mirage Youjuu Mahjongden (Japan) + + + mirax + Mirax (set 1) + + + miraxa + Mirax (set 2) + + + mirderby + Miracle Derby - Ascot + + + mirninja + Mirai Ninja (Japan) + + + misncrft + Mission Craft (version 2.7) + + + misncrfta + Mission Craft (version 2.4) + + + missb2 + Miss Bubble II + + + missile + Missile Command (rev 3) + + + missile1 + Missile Command (rev 1) + + + missile2 + Missile Command (rev 2) + + + missilem + Missile Command Multigame + + + missmw96 + Miss Mister World '96 (Nude) + + + missw96 + Miss World '96 (Nude) (set 1) + + + missw96a + Miss World '96 (Nude) (set 2) + + + missw96b + Miss World '96 (Nude) (set 3) + + + mizubaku + Mizubaku Daibouken (Japan) + + + mj2 + Sega Network Taisen Mahjong MJ 2 (Rev C) (GDX-0006C) + + + mj3 + Sega Network Taisen Mahjong MJ 3 (Rev D) (GDX-0017D) + + + mj3f + Sega Network Taisen Mahjong MJ 3 (Rev F) (GDX-0017F) + + + mj4simai + Wakakusamonogatari Mahjong Yonshimai (Japan) + + + mjanbari + Medal Mahjong Janjan Baribari [BET] (Japan) + + + mjangels + Mahjong Angels - Comic Theater Vol.2 (Japan) + + + mjapinky + Almond Pinky [BET] (Japan) + + + mjcamera + Mahjong Camera Kozou (set 1) (Japan 881109) + + + mjcamerb + Mahjong Camera Kozou (set 2) (Japan 881109) + + + mjchuuka + Mahjong Chuukanejyo (China) + + + mjclinic + Mahjong Clinic (Japan) + + + mjclub + Mahjong Club [BET] (Japan) + + + mjcomv1 + Mahjong Comic Gekijou Vol.1 (Japan) + + + mjdchuka + Mahjong The Dai Chuuka Ken (China, v. D111) + + + mjdejav2 + Mahjong Shinkirou Deja Vu 2 (Japan) + + + mjdejavu + Mahjong Shinkirou Deja Vu (Japan) + + + mjderngr + Mahjong Derringer (Japan) + + + mjdialq2 + Mahjong Dial Q2 (Japan) + + + mjdiplob + Mahjong Diplomat [BET] (Japan) + + + mjegolf + Mahjong Erotica Golf (Japan) + + + mjelct3 + Mahjong Electron Base (parts 2 & 3, Japan) + + + mjelct3a + Mahjong Electron Base (parts 2 & 3, alt., Japan) + + + mjelctrb + Mahjong Electron Base (parts 2 & 4, Japan, bootleg) + + + mjelctrn + Mahjong Electron Base (parts 2 & 4, Japan) + + + mjflove + Mahjong Fantasic Love (Japan) + + + mjfocus + Mahjong Focus (Japan 890313) + + + mjfocusm + Mahjong Focus [BET] (Japan 890510) + + + mjfriday + Mahjong Friday (Japan) + + + mjgaiden + Mahjong Gaiden [BET] (Japan 870803) + + + mjgottsu + Mahjong Gottsu ee-kanji (Japan) + + + mjgottub + Medal Mahjong Gottsu ee-kanji [BET] (Japan) + + + mjgtaste + Mahjong G-Taste + + + mjhokite + Mahjong Hourouki Okite (Japan) + + + mjifb + Mahjong If...? [BET] + + + mjifb2 + Mahjong If...? [BET](2921) + + + mjifb3 + Mahjong If...? [BET](2931) + + + mjikaga + Mahjong Ikaga Desu ka (Japan) + + + mjkinjas + Mahjong Kinjirareta Asobi (Japan) + + + mjkjidai + Mahjong Kyou Jidai (Japan) + + + mjkoiura + Mahjong Koi Uranai (Japan set 1) + + + mjkojink + Mahjong Kojinkyouju (Private Teacher) (Japan) + + + mjlaman + Mahjong La Man (Japan) + + + mjleague + Major League + + + mjlstory + Mahjong Jikken Love Story (Japan) + + + mjmania + Mahjong Mania - Kairakukan e Youkoso (Japan) + + + mjmyornt + Mahjong The Mysterious Orient + + + mjmyster + Mahjong The Mysterious World (set 1) + + + mjmyuniv + Mahjong The Mysterious Universe + + + mjmywrld + Mahjong The Mysterious World (set 2) + + + mjnanpaa + Mahjong Nanpa Story (Japan 890712) + + + mjnanpas + Mahjong Nanpa Story (Japan 890713) + + + mjnanpau + Mahjong Nanpa Story (Ura) (Japan 890805) + + + mjnatsu + Mahjong Natsu Monogatari (Japan) + + + mjnquest + Mahjong Quest (Japan) + + + mjnquestb + Mahjong Quest (No Nudity) + + + mjprivat + Mahjong Private (Japan) + + + mjreach + Mahjong Reach (bootleg) + + + mjreach1 + Mahjong Reach Ippatsu (Japan) + + + mjsenka + Mahjong Senka (Japan) + + + mjsikakb + Mahjong Shikaku (Japan 880722) + + + mjsikakc + Mahjong Shikaku (Japan 880806) + + + mjsikakd + Mahjong Shikaku (Japan 880802) + + + mjsikaku + Mahjong Shikaku (Japan 880908) + + + mjsister + Mahjong Sisters (Japan) + + + mjsiyoub + Mahjong Shiyou (Japan) + + + mjtensin + Mahjong Tensinhai (Japan) + + + mjuraden + Mahjong Uranai Densetsu (Japan) + + + mjvegas + Mahjong Vegas (Japan) + + + mjvegasa + Mahjong Vegas (Japan, unprotected) + + + mjyarou + Mahjong Yarou [BET] (Japan) + + + mjyougo + Mahjong-yougo no Kisotairyoku (Japan) + + + mjyuugi + Mahjong Yuugi (Japan set 1) + + + mjyuugia + Mahjong Yuugi (Japan set 2) + + + mjzoomin + Mahjong Channel Zoom In (Japan) + + + mk + Mortal Kombat (rev 5.0 T-Unit 03/19/93) + + + mk2 + Mortal Kombat II (rev L3.1) + + + mk2chal + Mortal Kombat II Challenger (hack) + + + mk2r11 + Mortal Kombat II (rev L1.1) + + + mk2r14 + Mortal Kombat II (rev L1.4) + + + mk2r20 + Mortal Kombat II (rev L2.0) + + + mk2r21 + Mortal Kombat II (rev L2.1) + + + mk2r30 + Mortal Kombat II (rev L3.0) + + + mk2r31e + Mortal Kombat II (rev L3.1 (European)) + + + mk2r32e + Mortal Kombat II (rev L3.2 (European)) + + + mk2r42 + Mortal Kombat II (rev L4.2, hack) + + + mk2r91 + Mortal Kombat II (rev L9.1, hack) + + + mk3 + Mortal Kombat 3 (rev 2.1) + + + mk3mdb + Mortal Kombat 3 (bootleg of Megadrive version) + + + mk3p40 + Mortal Kombat 3 (rev 1 chip label p4.0) + + + mk3r10 + Mortal Kombat 3 (rev 1.0) + + + mk3r20 + Mortal Kombat 3 (rev 2.0) + + + mk4 + Mortal Kombat 4 (version 3.0) + + + mk4a + Mortal Kombat 4 (version 2.1) + + + mk4b + Mortal Kombat 4 (version 1.0) + + + mk6nsw11 + Aristocrat MK6 Base (11011901, NSW/ACT) + + + mkartagp + Mario Kart Arcade GP (MKA2 Ver.B) + + + mkeibaou + Mahjong Keibaou (Japan) + + + mkla1 + Mortal Kombat (rev 1.0 08/09/92) + + + mkla2 + Mortal Kombat (rev 2.0 08/18/92) + + + mkla3 + Mortal Kombat (rev 3.0 08/31/92) + + + mkla4 + Mortal Kombat (rev 4.0 09/28/92) + + + mknifty + Mortal Kombat (Nifty Kombo, hack) + + + mknifty666 + Mortal Kombat (Nifty Kombo 666, hack) + + + mkoiuraa + Mahjong Koi Uranai (Japan set 2) + + + mkprot4 + Mortal Kombat (prototype, rev 4.0 07/14/92) + + + mkprot8 + Mortal Kombat (prototype, rev 8.0 07/21/92) + + + mkprot9 + Mortal Kombat (prototype, rev 9.0 07/28/92) + + + mkr4 + Mortal Kombat (rev 4.0 T-Unit 02/11/93) + + + mktturbo + Mortal Kombat (Turbo Ninja T-Unit 03/19/93, hack) + + + mkyawdim + Mortal Kombat (Yawdim bootleg, set 1) + + + mkyawdim2 + Mortal Kombat (Yawdim bootleg, set 2) + + + mkyturbo + Mortal Kombat (Turbo 3.1 09/09/93, hack) + + + mkyturboe + Mortal Kombat (Turbo 3.0 08/31/92, hack) + + + mladyhtr + Mahjong The Lady Hunter (Japan 900509) + + + mlander + Moon Lander (bootleg of Lunar Rescue) + + + mlanding + Midnight Landing (Germany) + + + mm_05 + Medieval Madness (0.50) + + + mm_10 + Medieval Madness (1.0) + + + mm_109 + Medieval Madness (1.09) + + + mm_109b + Medieval Madness (1.09B) + + + mm_109c + Medieval Madness (1.09C Profanity) + + + mm_10u + Medieval Madness (1.0 Ultrapin) + + + mmaiko + Maikobana [BET] (Japan 900911) + + + mmancp2u + Mega Man: The Power Battle (CPS2, USA 951006, SAMPLE Version) + + + mmatrix + Mars Matrix: Hyper Solid Shooting (USA 000412) + + + mmatrixd + Mars Matrix: Hyper Solid Shooting (USA 000412 Phoenix Edition) (bootleg) + + + mmatrixj + Mars Matrix: Hyper Solid Shooting (Japan 000412) + + + mmaulers + Monster Maulers (ver EAA) + + + mmaze + Marchen Maze (Japan) + + + mmcamera + Mahjong Camera Kozou [BET] (Japan 890509) + + + mmehyou + Medal Mahjong Circuit no Mehyou [BET] (Japan) + + + mmm_ldip + Lucky Dip (Maygay) + + + mmmbanc + Medal Mahjong Moukari Bancho (2007/06/05 MASTER VER.) + + + mmonkey + Minky Monkey + + + mmpanic + Monkey Mole Panic (USA) + + + mmpork + Muchi Muchi Pork! (2007/ 4/17 MASTER VER.) + + + mmsikaku + Mahjong Shikaku [BET] (Japan 880929) + + + mnchmobl + Munch Mobile (US) + + + mnfb_c27 + Monday Night Football (2.7, 50cts) + + + mnight + Mutant Night + + + mntecrlo + Monte Carlo (Pinball) + + + mnumber + Mystery Number + + + mnumitg + Magic Number (Italian Gambling Game, Ver 1.5) + + + mocapb + Mocap Boxing (ver AAA) + + + mocapbj + Mocap Boxing (ver JAA) + + + mocapglf + Mocap Golf (ver UAA) + + + moegonta + Moeyo Gonta!! (Japan) + + + moeru + Moeru Casinyo (GDL-0013) + + + mofflott + Maze of Flott (Japan) + + + moguchan + Mogu Chan (bootleg?) + + + mogura + Mogura Desse (Japan) + + + mohicans + Mohican Sun (Konami Endeavour) + + + mok + The Maze of the Kings (GDS-0022) + + + mole + Mole Attack + + + momoko + Momoko 120% + + + momotaro + Mahjong Momotarou (Japan) + + + monacogp + Monaco GP (Set 1) [TTL] + + + monacogpa + Monaco GP (Set 2) [TTL] + + + moneybnk + Money In The Bank (NSW, Australia) + + + moneymac + Money Machine (Version 1.7E Dual) + + + moneymacd1 + Money Machine (Version 1.7R) + + + moneymacd2 + Money Machine (Version 1.7LT) + + + moneymacv1 + Money Machine (Version 1.7R Dual) + + + moneymacv2 + Money Machine (Version 1.7LT Dual) + + + mongolnw + Mongolfier New (Italian) + + + monkelf + Monky Elf (Korean bootleg of Avenging Spirit) + + + monkeyba + Monkey Ball (GDS-0008) + + + monkeyd + Monkey Donkey + + + mononew + Monopoly (ARM7 Sound Board) + + + monop233 + Monopoly (2.33) + + + monop251 + Monopoly (2.51) + + + monop301 + Monopoly (3.01) + + + monop303 + Monopoly (3.03) + + + monoplcl + Monopoly Classic (JPM) (SYSTEM5 VIDEO) + + + monopldx + Monopoly Deluxe (JPM) (SYSTEM5 VIDEO) + + + monopolf + Monopoly (France) + + + monopolg + Monopoly (Germany) + + + monopoli + Monopoly (Italy) + + + monopoll + Monopoly (Spain) + + + monopolp + Monopoly (3.20) + + + monopoly + Monopoly (JPM) (SYSTEM5 VIDEO, set 1) + + + monopolya + Monopoly (JPM) (SYSTEM5 VIDEO, set 2) + + + monopred + Monopoly (Coin dropper) + + + monrobwl + Stars & Strikes (Bowler) + + + monshow + The Monster Show (Konami Endeavour) + + + monspdr + Money Spider (Ace) + + + monsterb + Monster Bash + + + monsterb2 + Monster Bash (2 board version) + + + monsterz + Monster Zero + + + montana + Montana Bingo Stake 6/10 (Bingo) + + + montecar + Monte Carlo + + + monymony + Money Money + + + monzagp + Monza GP + + + monzagpb + Monza GP (bootleg) + + + moomesa + Wild West C.O.W.-Boys of Moo Mesa (ver EAB) + + + moomesaaab + Wild West C.O.W.-Boys of Moo Mesa (ver AAB) + + + moomesabl + Wild West C.O.W.-Boys of Moo Mesa (bootleg) + + + moomesauab + Wild West C.O.W.-Boys of Moo Mesa (ver UAB) + + + moomesauac + Wild West C.O.W.-Boys of Moo Mesa (ver UAC) + + + moonal2 + Moon Alien Part 2 + + + moonal2b + Moon Alien Part 2 (older version) + + + moonaln + Moon Alien + + + moonbase + Moon Base (set 1) + + + moonbasea + Moon Base (set 2) + + + mooncmw + Moon War (Moon Cresta bootleg) + + + mooncptc + Moon Cresta (Petaco S.A. Spanish bootleg) + + + mooncreg + Moon Cresta (Electrogame S.A. Spanish bootleg) + + + mooncrgx + Moon Cresta (Galaxian hardware) + + + mooncrs2 + Moon Cresta (bootleg set 2) + + + mooncrs3 + Moon Cresta (bootleg set 3) + + + mooncrs4 + Moon Crest (Moon Cresta bootleg) + + + mooncrsb + Moon Cresta (bootleg set 1) + + + mooncrsl + Cresta Mundo (Laguna S.A. Spanish Moon Cresta bootleg) + + + mooncrst + Moon Cresta (Nichibutsu) + + + mooncrstg + Moon Cresta (Gremlin) + + + mooncrsto + Moon Cresta (Nichibutsu, old rev) + + + mooncrstu + Moon Cresta (Nichibutsu USA, unencrypted) + + + mooncrstuk + Moon Cresta (Nichibutsu UK) + + + mooncrstuku + Moon Cresta (Nichibutsu UK, unencrypted) + + + moonlght + Moon Light (bootleg of Golden Star) + + + moonqsr + Moon Quasar + + + moonwar + Moonwar + + + moonwara + Moonwar (older) + + + moonwarp + Moon War (prototype on Frenzy hardware) + + + moremore + More More + + + moremorp + More More Plus + + + mosaic + Mosaic + + + mosaica + Mosaic (Fuuki) + + + mosaicf2 + Mosaic (F2 System) + + + mosyougi + Syougi No Tatsujin - Master of Syougi + + + motofren + Moto Frenzy + + + motofrenft + Moto Frenzy (Field Test Version) + + + motofrenmd + Moto Frenzy (Mini Deluxe) + + + motofrenmf + Moto Frenzy (Mini Deluxe Field Test Version) + + + motorace + MotoRace USA + + + motoraid + Motor Raid - Twin + + + motos + Motos + + + mototour + MotoTour / Zippy Race (Tecfri license) + + + motoxgo + Motocross Go! (MG3 Ver. A) + + + motoxgov1a + Motocross Go! (MG1 Ver. A, set 1) + + + motoxgov1a2 + Motocross Go! (MG1 Ver. A, set 2) + + + motoxgov2a + Motocross Go! (MG2 Ver. A) + + + motrdome + MotorDome + + + motrshow + Motor Show (set 1) + + + motrshowa + Motor Show (set 2) + + + mouja + Mouja (Japan) + + + mouseatk + Mouse Attack + + + mouser + Mouser + + + mouserc + Mouser (Cosmos) + + + mousn_l1 + Mousin' Around! (LA-1) + + + mousn_l4 + Mousin' Around! (LA-4) + + + mousn_lu + Mousin' Around! (LU-1) + + + mousn_lx + Mousin' Around! (LX-1) + + + moviecrd + Movie Card + + + movmastr + Movie Masters + + + mp_bio + Bio-hazard Battle (Mega Play) + + + mp_col3 + Columns III (Mega Play) + + + mp_gaxe2 + Golden Axe II (Mega Play) + + + mp_gslam + Grand Slam (Mega Play) + + + mp_mazin + Mazin Wars / Mazin Saga (Mega Play) + + + mp_shnb3 + Shinobi III (Mega Play) + + + mp_soni2 + Sonic The Hedgehog 2 (Mega Play) + + + mp_sonic + Sonic The Hedgehog (Mega Play) + + + mp_sor2 + Streets of Rage II (Mega Play) + + + mp_twc + Tecmo World Cup (Mega Play) + + + mpang + Mighty! Pang (Euro 001010) + + + mpangj + Mighty! Pang (Japan 001011) + + + mpangr1 + Mighty! Pang (Euro 000925) + + + mpangu + Mighty! Pang (USA 001010) + + + mpatrol + Moon Patrol + + + mpatrolw + Moon Patrol (Williams) + + + mplanets + Mad Planets + + + mplanetsuk + Mad Planets (UK) + + + mpoker + Multi-Poker + + + mquake + Moonquake + + + mranger + Moon Ranger (bootleg of Moon Patrol) + + + mrblack + Mr. Black + + + mrblack1 + Mr. Black (alternate set) + + + mrblkz80 + Mr. Black (Z-80 CPU) + + + mrdig + Mr. Dig + + + mrdo + Mr. Do! + + + mrdofix + Mr. Do! (bugfixed) + + + mrdot + Mr. Do! (Taito) + + + mrdoy + Mr. Do! (prototype) + + + mrdrillr + Mr. Driller (US, DRI3/VER.A2) + + + mrdrillrj + Mr. Driller (Japan, DRI1/VER.A2) + + + mrdrilr2 + Mr. Driller 2 (Japan, DR21 Ver.A) + + + mrdrilrg + Mr. Driller G (Japan, DRG1 Ver.A) + + + mrdrilrga + Mr. Driller G ALT (Japan, DRG1 Ver.A) + + + mrdrlr2a + Mr. Driller 2 (Asia, DR22 Ver.A) + + + mrdu + Mr. Du! + + + mrflea + The Amazing Adventures of Mr. F. Lea + + + mrgoemon + Mr. Goemon (Japan) + + + mrheli + Mr. HELI no Daibouken + + + mrjong + Mr. Jong (Japan) + + + mrkicker + Mr. Kicker + + + mrkougar + Mr. Kougar + + + mrkougar2 + Mr. Kougar (earlier) + + + mrkougb + Mr. Kougar (bootleg set 1) + + + mrkougb2 + Mr. Kougar (bootleg set 2) + + + mrlo + Mr. Lo! + + + mrokumei + Mahjong Rokumeikan (Japan) + + + mrtlbeat + Martial Beat (G*B47 VER. JBA) + + + mrtnt + Mr. TNT + + + mrviking + Mister Viking (315-5041) + + + mrvikingj + Mister Viking (315-5041, Japan) + + + ms4plus + Metal Slug 4 Plus (bootleg) + + + ms5pcb + Metal Slug 5 (JAMMA PCB) + + + ms5plus + Metal Slug 5 Plus (bootleg) + + + msbingo + Miss Bingo + + + mschamp + Ms. Pacman Champion Edition / Zola-Puc Gal + + + mschamps + Ms. Pacman Champion Edition / Super Zola-Puc Gal + + + mscoutm + Mahjong Scout Man (Japan) + + + msgogo + Mouse Shooter GoGo + + + msgundam + Mobile Suit Gundam + + + msgundam1 + Mobile Suit Gundam (Japan) + + + msh + Marvel Super Heroes (Euro 951024) + + + msha + Marvel Super Heroes (Asia 951024) + + + mshb + Marvel Super Heroes (Brazil 951117) + + + msheartb + Ms. Pac-Man Heart Burn + + + mshh + Marvel Super Heroes (Hispanic 951117) + + + mshj + Marvel Super Heroes (Japan 951117) + + + mshjr1 + Marvel Super Heroes (Japan 951024) + + + mshu + Marvel Super Heroes (USA 951024) + + + mshud + Marvel Super Heroes (US 951024 Phoenix Edition) (bootleg) + + + mshuttle + Moon Shuttle (US? set 1) + + + mshuttle2 + Moon Shuttle (US? set 2) + + + mshuttlej + Moon Shuttle (Japan set 1) + + + mshuttlej2 + Moon Shuttle (Japan set 2) + + + mshvsf + Marvel Super Heroes Vs. Street Fighter (Euro 970625) + + + mshvsfa + Marvel Super Heroes Vs. Street Fighter (Asia 970625) + + + mshvsfa1 + Marvel Super Heroes Vs. Street Fighter (Asia 970620) + + + mshvsfb + Marvel Super Heroes Vs. Street Fighter (Brazil 970827) + + + mshvsfb1 + Marvel Super Heroes Vs. Street Fighter (Brazil 970625) + + + mshvsfh + Marvel Super Heroes Vs. Street Fighter (Hispanic 970625) + + + mshvsfj + Marvel Super Heroes Vs. Street Fighter (Japan 970707) + + + mshvsfj1 + Marvel Super Heroes Vs. Street Fighter (Japan 970702) + + + mshvsfj2 + Marvel Super Heroes Vs. Street Fighter (Japan 970625) + + + mshvsfu + Marvel Super Heroes Vs. Street Fighter (USA 970827) + + + mshvsfu1 + Marvel Super Heroes Vs. Street Fighter (USA 970625) + + + mshvsfu1d + Marvel Super Heroes Vs. Street Fighter (USA 970625 Phoenix Edition) (bootleg) + + + msisaac + Metal Soldier Isaac II + + + msjiken + Mahjong Satsujin Jiken (Japan 881017) + + + mslider + Monster Slider (Japan) + + + mslug + Metal Slug - Super Vehicle-001 + + + mslug2 + Metal Slug 2 - Super Vehicle-001/II (NGM-2410)(NGH-2410) + + + mslug3 + Metal Slug 3 (NGM-2560) + + + mslug3b6 + Metal Slug 6 (Metal Slug 3 bootleg) + + + mslug3h + Metal Slug 3 (NGH-2560) + + + mslug4 + Metal Slug 4 (NGM-2630) + + + mslug4h + Metal Slug 4 (NGH-2630) + + + mslug5 + Metal Slug 5 (NGM-2680) + + + mslug5h + Metal Slug 5 (NGH-2680) + + + mslug6 + Metal Slug 6 + + + mslugx + Metal Slug X - Super Vehicle-001 (NGM-2500)(NGH-2500) + + + mspacii + Ms. Pac-Man II (Orca bootleg set 1) + + + mspacii2 + Ms. Pac-Man II (Orca bootleg set 2) + + + mspacmab + Ms. Pac-Man (bootleg) + + + mspacman + Ms. Pac-Man + + + mspacmanbg + Ms. Pac-Man ('Made in Greece' bootleg) + + + mspacmancr + Ms. Pac-Man (bootleg on Crush Roller Hardware) + + + mspacmat + Ms. Pac Attack + + + mspacmbe + Ms. Pac-Man (bootleg, encrypted) + + + mspacmnf + Ms. Pac-Man (speedup hack) + + + mspacpls + Ms. Pac-Man Plus + + + mspuzzle + Miss Puzzle + + + mspuzzleg + Miss Puzzle (Clone of Gumbo) + + + mspuzzlen + Miss Puzzle (Nudes) + + + mstadium + Main Stadium (Japan) + + + mstworld + Monsters World (bootleg of Super Pang) + + + msword + Magic Sword: Heroic Fantasy (World 900725) + + + mswordj + Magic Sword: Heroic Fantasy (Japan 900623) + + + mswordr1 + Magic Sword: Heroic Fantasy (World 900623) + + + mswordu + Magic Sword: Heroic Fantasy (USA 900725) + + + mt_aftrb + After Burner (Mega-Tech, SMS based) + + + mt_arrow + Arrow Flash (Mega-Tech) + + + mt_astrm + Alien Storm (Mega-Tech) + + + mt_astro + Astro Warrior (Mega-Tech, SMS based) + + + mt_asyn + Alien Syndrome (Mega-Tech, SMS based) + + + mt_bbros + Bonanza Bros. (Mega-Tech) + + + mt_beast + Altered Beast (Mega-Tech) + + + mt_calga + California Games (Mega-Tech) + + + mt_cols + Columns (Mega-Tech) + + + mt_crack + Crack Down (Mega-Tech) + + + mt_eswat + Cyber Police ESWAT: Enhanced Special Weapons and Tactics (Mega-Tech) + + + mt_fshrk + Fire Shark (Mega-Tech) + + + mt_fwrld + Forgotten Worlds (Mega-Tech) + + + mt_fz + Fantasy Zone (Mega-Tech, SMS based) + + + mt_gaxe + Golden Axe (Mega-Tech) + + + mt_gaxe2 + Golden Axe II (Mega-Tech) + + + mt_gfoot + Great Football (Mega-Tech, SMS based) + + + mt_ggolf + Great Golf (Mega-Tech, SMS based) + + + mt_gng + Ghouls'n Ghosts (Mega-Tech) + + + mt_gsocr + Great Soccer (Mega-Tech, SMS based) + + + mt_kcham + Kid Chameleon (Mega-Tech) + + + mt_lastb + Last Battle (Mega-Tech) + + + mt_mlh + Mario Lemieux Hockey (Mega-Tech) + + + mt_mwalk + Michael Jackson's Moonwalker (Mega-Tech) + + + mt_mystd + Mystic Defender (Mega-Tech) + + + mt_orun + Out Run (Mega-Tech, SMS based) + + + mt_parlg + Parlour Games (Mega-Tech, SMS based) + + + mt_revsh + The Revenge of Shinobi (Mega-Tech) + + + mt_shado + Shadow Dancer (Mega-Tech) + + + mt_shang + Super Hang-On (Mega-Tech) + + + mt_shar2 + Space Harrier II (Mega-Tech) + + + mt_shnbi + Shinobi (Mega-Tech, SMS based) + + + mt_smgp + Super Monaco GP (Mega-Tech) + + + mt_soni2 + Sonic The Hedgehog 2 (Mega-Tech) + + + mt_sonia + Sonic The Hedgehog (Mega-Tech, set 2) + + + mt_sonic + Sonic The Hedgehog (Mega-Tech, set 1) + + + mt_spman + Spider-Man vs The Kingpin (Mega-Tech) + + + mt_srage + Streets of Rage (Mega-Tech) + + + mt_srbb + Super Real Basketball (Mega-Tech) + + + mt_stbld + Super Thunder Blade (Mega-Tech) + + + mt_stf + Joe Montana II: Sports Talk Football (Mega-Tech) + + + mt_tetri + Tetris (Mega-Tech) + + + mt_tfor2 + Thunder Force II MD (Mega-Tech) + + + mt_tgolf + Arnold Palmer Tournament Golf (Mega-Tech) + + + mt_tlbba + Tommy Lasorda Baseball (Mega-Tech) + + + mt_tout + Turbo Outrun (Mega-Tech) + + + mt_wcsoc + World Championship Soccer (Mega-Tech) + + + mt_wwar + Wrestle War (Mega-Tech) + + + mtburn + Money To Burn (Russia) + + + mtetrisc + Magical Tetris Challenge (981009 Japan) + + + mtkob2 + Mushiking The King Of Beetle 2K3 2nd + + + mtlchamp + Martial Champion (ver EAB) + + + mtlchamp1 + Martial Champion (ver EAA) + + + mtlchampa + Martial Champion (ver AAA) + + + mtlchampj + Martial Champion (ver JAA) + + + mtlchampu + Martial Champion (ver UAE) + + + mtlchampu1 + Martial Champion (ver UAD) + + + mtrain + Magic Train (Ver. 1.31) + + + mtrainnv + Magic Train (Clear NVRAM ROM?) + + + mtrap + Mouse Trap (version 5) + + + mtrap3 + Mouse Trap (version 3) + + + mtrap4 + Mouse Trap (version 4) + + + mtrapb + Mouse Trap (bootleg) + + + mtwins + Mega Twins (World 900619) + + + mugsmash + Mug Smashers + + + multchmp + Multi Champ (World, ver. 2.5) + + + multchmpk + Multi Champ (Korea) + + + multigam + Multi Game (set 1) + + + multigm2 + Multi Game 2 + + + multigm3 + Multi Game III + + + multigmb + Multi Game (set 2) + + + multigmt + Multi Game (Tung Sheng Electronics) + + + multiped + Multipede (Centipede/Millipede multigame kit) + + + multiwin + Multi Win (Ver.0167, encrypted) + + + mundial + Mundial 90 + + + murogem + Muroge Monaco (set 1) + + + murogema + Muroge Monaco (set 2) + + + murogemb + Muroge Monaco (set 3) + + + murogmbl + Muroge Monaco (bootleg?) + + + mushi2ea + MushiKing II - The King Of Beetle II ENG (Ver. 2.001) + + + mushik2e + MushiKing II - The King Of Beetle II ENG (Ver. 1.001) + + + mushisam + Mushihime-Sama (2004/10/12.MASTER VER.) + + + mushisama + Mushihime-Sama (2004/10/12 MASTER VER.) + + + mushisamb + Mushihime-Sama (2004/10/12 MASTER VER) + + + mushitam + Puzzle! Mushihime-Tama (2005/09/09.MASTER VER) + + + mushitama + Puzzle! Mushihime-Tama (2005/09/09 MASTER VER) + + + mushmagi + Mushroom Magic (Russia) (Atronic) + + + musicbal + Music Ball + + + musicsrt + Music Sort (ver 2.02, English) + + + musobana + Musoubana (Japan) + + + mustache + Mustache Boy + + + mustang + US AAF Mustang (25th May. 1990) + + + mustangb + US AAF Mustang (bootleg) + + + mustangb2 + US AAF Mustang (TAB Austria bootleg) + + + mustangs + US AAF Mustang (25th May. 1990 / Seoul Trading) + + + mutantf + Mutant Fighter (World ver EM-5) + + + mutantf3 + Mutant Fighter (World ver EM-3) + + + mutantf4 + Mutant Fighter (World ver EM-4) + + + mutnat + Mutation Nation (NGM-014)(NGH-014) + + + mv1bon + Believe It Or Not (Maygay, MV1 Video) + + + mv1cpc + Caesar's Palace Club (Maygay, MV1 Video, set 1) + + + mv1cpca + Caesar's Palace Club (Maygay, MV1 Video, set 2) + + + mv1cpcb + Caesar's Palace Club (Maygay, MV1 Video, set 3) + + + mv1cwq + Crossword Quiz (Maygay, MV1 Video, set 1) + + + mv1cwqa + Crossword Quiz (Maygay, MV1 Video, set 2) + + + mv1guac + Give Us A Clue (Maygay, MV1 Video, set 1) + + + mv1guaca + Give Us A Clue (Maygay, MV1 Video, set 2) + + + mv1sfx + Special Effects (Maygay, MV1 Video, set 1) + + + mv1sfx2 + Special Effects V2 (Maygay, MV1 Video) + + + mv1sfxa + Special Effects (Maygay, MV1 Video, set 2) + + + mv1wc + World Cup (Maygay, MV1 Video) + + + mv4in1 + Mini Vegas 4in1 + + + mvp + MVP (set 2, US, FD1094 317-0143) + + + mvpj + MVP (set 1, Japan, FD1094 317-0142) + + + mvsc + Marvel Vs. Capcom: Clash of Super Heroes (Euro 980123) + + + mvsc2 + Marvel Vs. Capcom 2 New Age of Heroes (JPN, USA, EUR, ASI, AUS) (Rev A) + + + mvsca + Marvel Vs. Capcom: Clash of Super Heroes (Asia 980123) + + + mvscar1 + Marvel Vs. Capcom: Clash of Super Heroes (Asia 980112) + + + mvscb + Marvel Vs. Capcom: Clash of Super Heroes (Brazil 980123) + + + mvsch + Marvel Vs. Capcom: Clash of Super Heroes (Hispanic 980123) + + + mvscj + Marvel Vs. Capcom: Clash of Super Heroes (Japan 980123) + + + mvscjr1 + Marvel Vs. Capcom: Clash of Super Heroes (Japan 980112) + + + mvscjsing + Marvel Vs. Capcom: Clash of Super Heroes (Japan 980123) (Single PCB) + + + mvscr1 + Marvel Vs. Capcom: Clash of Super Heroes (Euro 980112) + + + mvscu + Marvel Vs. Capcom: Clash of Super Heroes (USA 980123) + + + mvscud + Marvel Vs. Capcom: Clash of Super Heroes (USA 980123 Phoenix Edition) (bootleg) + + + mvscur1 + Marvel Vs. Capcom: Clash of Super Heroes (USA 971222) + + + mwalk + Michael Jackson's Moonwalker (World, FD1094/8751 317-0159) + + + mwalkbl + Michael Jackson's Moonwalker (bootleg) + + + mwalkj + Michael Jackson's Moonwalker (Japan, FD1094/8751 317-0157) + + + mwalku + Michael Jackson's Moonwalker (US, FD1094/8751 317-0158) + + + mwarr + Mighty Warriors + + + mwskins + Skins Game (1.06) + + + mwskinsa + Skins Game (1.06, alt) + + + mwskinso + Skins Game (1.04) + + + mx5000 + MX5000 + + + myangel + Kosodate Quiz My Angel (Japan) + + + myangel2 + Kosodate Quiz My Angel 2 (Japan) + + + myangel3 + Kosodate Quiz My Angel 3 (Japan, KQT1/VER.A) + + + myfairld + Virtual Mahjong 2 - My Fair Lady (J 980608 V1.000) + + + myhero + My Hero (US, not encrypted) + + + myherok + My Hero (Korea) + + + myqbert + Mello Yello Q*bert + + + mystcast + Mystery Castle + + + mystic + Mystic + + + mysticm + Mystic Marathon + + + mysticmp + Mystic Marathon (prototype) + + + mysticri + Mystic Riders (World) + + + mysticrib + Mystic Riders (bootleg?) + + + myststar + Mystic Star + + + mystston + Mysterious Stones - Dr. John's Adventure + + + myststono + Mysterious Stones - Dr. Kick in Adventure + + + myststonoi + Mysterious Stones - Dr. Kick in Adventure (Itisa PCB) + + + mystwarr + Mystic Warriors (ver EAA) + + + mystwarra + Mystic Warriors (ver AAA) + + + mystwarrj + Mystic Warriors (ver JAA) + + + mystwarru + Mystic Warriors (ver UAA) + + + nagano98 + Nagano Winter Olympics '98 (GX720 EAA) + + + naganoj + Hyper Olympic in Nagano (GX720 JAA) + + + nam1975 + NAM-1975 (NGM-001)(NGH-001) + + + namcostr + Namco Stars + + + nametune + Name That Tune (set 1) + + + nametune2 + Name That Tune (3/23/86) + + + naname + Naname de Magic! (Japan) + + + naomi + Naomi Bios + + + naomi2 + Naomi 2 Bios + + + naomigd + Naomi GD-ROM Bios + + + narc + Narc (rev 7.00) + + + narc2 + Narc (rev 2.00) + + + narc3 + Narc (rev 3.20) + + + nascar + Nascar (4.50) + + + nascar_301 + Nascar (3.01) + + + nascar_340 + Nascar (3.40) + + + nascar_350 + Nascar (3.50) + + + nascar_352 + Nascar (3.52) + + + nascar_400 + Nascar (4.00) + + + nascarl + Nascar (4.50 Spain) + + + nascarl_301 + Nascar (3.01 Spain) + + + nascarl_340 + Nascar (3.40 Spain) + + + nascarl_350 + Nascar (3.50 Spain) + + + nascarl_352 + Nascar (3.52 Spain) + + + nascarl_400 + Nascar (4.00 Spain) + + + nastar + Nastar (World) + + + nastarw + Nastar Warrior (US) + + + natodef + NATO Defense + + + natodefa + NATO Defense (alternate mazes) + + + natsuiro + Natsuiro Mahjong (Japan) + + + naughtyb + Naughty Boy + + + naughtyba + Naughty Boy (bootleg) + + + naughtybc + Naughty Boy (Cinematronics) + + + navarone + Navarone + + + nbaf_11 + NBA Fastbreak (1.1) + + + nbaf_115 + NBA Fastbreak (1.15) + + + nbaf_11a + NBA Fastbreak (1.1 - S2.0) + + + nbaf_11s + NBA Fastbreak (1.1 - S0.4) + + + nbaf_21 + NBA Fastbreak (2.1) + + + nbaf_22 + NBA Fastbreak (2.2) + + + nbaf_23 + NBA Fastbreak (2.3) + + + nbaf_31 + NBA Fastbreak (3.1 - S3.0) + + + nbaf_31a + NBA Fastbreak (3.1 - S1.0) + + + nbahangt + NBA Hangtime (rev L1.1 04/16/96) + + + nbajam + NBA Jam (rev 3.01 04/07/93) + + + nbajamex + NBA Jam Extreme + + + nbajamr2 + NBA Jam (rev 2.00 02/10/93) + + + nbajamte + NBA Jam TE (rev 4.0 03/23/94) + + + nbajamte1 + NBA Jam TE (rev 1.0 01/17/94) + + + nbajamte2 + NBA Jam TE (rev 2.0 01/28/94) + + + nbajamte3 + NBA Jam TE (rev 3.0 03/04/94) + + + nbajamten + NBA Jam T.E. Nani Edition (rev 5.2 8/11/95, prototype) + + + nbamht + NBA Maximum Hangtime (rev 1.03 06/09/97) + + + nbamht1 + NBA Maximum Hangtime (rev 1.0 11/08/96) + + + nbanfl + NBA Showtime / NFL Blitz 2000 + + + nbapbp + NBA Play By Play + + + nbashowt + NBA Showtime: NBA on NBC + + + nbbatman + Ninja Baseball Bat Man (World) + + + nbbatman2bl + Ninja Baseball Bat Man II (bootleg) + + + nbbatmanu + Ninja Baseball Bat Man (US) + + + nc96 + New Cherry '96 Special Edition (v3.63, C1 PCB) + + + nc96a + New Cherry '96 Special Edition (v3.62, C1 PCB) + + + nc96b + New Cherry '96 Special Edition (v3.54, D PCB) + + + nc96c + New Cherry '96 Special Edition (v3.62, DK PCB) + + + nc96txt + New Cherry '96 Special Edition (v1.32 Texas XT, C2 PCB) + + + ncb3 + Cherry Bonus III (ver.1.40, set 1) + + + nclubv3 + Name Club Ver.3 (J 970723 V1.000) + + + ncombat + Ninja Combat (NGM-009) + + + ncombath + Ninja Combat (NGH-009) + + + ncommand + Ninja Commando + + + ncv1 + Namco Classic Collection Vol.1 + + + ncv1j + Namco Classic Collection Vol.1 (Japan, v1.00) + + + ncv1j2 + Namco Classic Collection Vol.1 (Japan, v1.03) + + + ncv2 + Namco Classic Collection Vol.2 + + + ncv2j + Namco Classic Collection Vol.2 (Japan) + + + ndcfboxa + Naomi DIMM Firmware Update for CF-BOX (Rev A) (GDS-0042A) + + + ndxron10 + Royal on Ten (Noraut Deluxe hack) + + + nebulray + Nebulas Ray (World, NR2) + + + nebulrayj + Nebulas Ray (Japan, NR1) + + + neckneck + Neck-n-Neck (v1.2) + + + nekkyoku + Rettou Juudan Nekkyoku Janshi - Higashi Nippon Hen (Japan) + + + nemesis + Nemesis (ROM version) + + + nemesisp + Nemesis + + + nemesisuk + Nemesis (World?, ROM version) + + + nemo + Nemo (World 901130) + + + nemoj + Nemo (Japan 901120) + + + neobattl + SD Gundam Neo Battling (Japan) + + + neobombe + Neo Bomberman + + + neocup98 + Neo-Geo Cup '98 - The Road to the Victory + + + neodrift + Neo Drift Out - New Technology + + + neogeo + Neo-Geo + + + neomrdo + Neo Mr. Do! + + + neptunp2 + Neptune's Pearls 2 + + + neruton + Mahjong Neruton Haikujiradan (Japan, Rev. B?) + + + nerutona + Mahjong Neruton Haikujiradan (Japan, Rev. A?) + + + netchu02 + Netchuu Pro Yakyuu 2002 (NPY1 Ver. A) + + + netmerc + NetMerc? + + + nettoqc + Nettoh Quiz Champion (Japan) + + + netwars + Net Wars + + + nevada + VLC Nevada + + + newapunk + New Atomic Punk - Global Quest (US) + + + newdixie + New Dixieland (Bingo) + + + newfant + New Fantasia (1995 copyright) + + + newfanta + New Fantasia (1994 copyright) + + + newhilop + New Hi-Low Poker + + + newmcard + New Magic Card + + + newpuc2 + Newpuc2 (set 1) + + + newpuc2b + Newpuc2 (set 2) + + + newpuckx + New Puck-X + + + news + News (set 1) + + + newsa + News (set 2) + + + newsin7 + New Sinbad 7 + + + newtangl + New Tropical Angel + + + newwave + New Wave + + + nextfase + Next Fase (bootleg of Phoenix) + + + nf_20 + No Fear: Dangerous Sports (2.0) + + + nf_22 + No Fear: Dangerous Sports (2.2) + + + nf_23 + No Fear: Dangerous Sports (2.3) + + + nf_23f + No Fear: Dangerous Sports (2.3F) + + + nf_23x + No Fear: Dangerous Sports (2.3X) + + + nfb96 + New Fruit Bonus '96 Special Edition (v3.63, C1 PCB) + + + nfb96a + New Fruit Bonus '96 Special Edition (v3.62, C1 PCB) + + + nfb96b + New Fruit Bonus '96 Special Edition (v3.54, D PCB) + + + nfb96c + New Fruit Bonus '96 Special Edition (v3.62, DK PCB) + + + nfb96se + New Fruit Bonus '96 Special Edition (bootleg, set 1) + + + nfb96sea + New Fruit Bonus '96 Special Edition (bootleg, set 2) + + + nfb96seb + New Fruit Bonus '96 Special Edition (bootleg, set 3) + + + nfb96txt + New Fruit Bonus '96 Special Edition (v1.22 Texas XT, C2 PCB) + + + nfl + NFL + + + nflclsfb + NFL Classic Football (US, NCF3 Ver.A.) + + + nflfoot + NFL Football + + + nfm + New Fruit Machine (Ming-Yang Electronic) + + + nfsug + Need For Speed: Underground Install (2 Discs) (v1.1) + + + ngalsumr + Night Gal Summer + + + ngbc + Neo-Geo Battle Coliseum + + + ngdup23a + Naomi DIMM Firmware Updater (Rev A) (GDS-0023A) + + + ngdup23c + Naomi DIMM Firmware Updater (Rev C) (GDS-0023C) + + + ngdup23e + Naomi DIMM Firmware Updater (Rev E) (GDS-0023E) + + + ngg_10 + No Good Gofers (1.0) + + + ngg_13 + No Good Gofers (1.3) + + + ngg_p06 + No Good Gofers (p0.6) + + + ngndshkr + Nitro Ground Shaker + + + ngold + Jack Potten's Poker (NGold, set 1) + + + ngolda + Jack Potten's Poker (NGold, set 2) + + + ngoldb + Jack Potten's Poker (NGold, set 3) + + + ngpgal + Nekketsu Grand-Prix Gal (Japan) + + + ngtbunny + Night Bunny (Japan 840601 MRN 2-10) + + + nhidctch + New Hidden Catch (World) / New Tul Lin Gu Lim Chat Ki '98 (Korea) (pcb ver 3.02) + + + nibbler + Nibbler (rev 9) + + + nibbler6 + Nibbler (rev 6) + + + nibbler8 + Nibbler (rev 8) + + + nibblero + Nibbler (Olympia - rev 8) + + + nibblerp + Nibbler (Pioneer Balloon conversion) + + + nightgal + Night Gal (Japan 840920 AG 1-00) + + + nightlov + Night Love (Japan 860705) + + + nightr20 + Night Rider (rev. 20) + + + nightrai + Night Raid (V2.03J) + + + nightrdr + Night Rider (rev. 21) + + + nightstr + Night Striker (World) + + + nightstrj + Night Striker (Japan) + + + nightstru + Night Striker (US) + + + ninclown + Ninja Clowns (08/27/91) + + + nineball + Nine Ball + + + ninja + Ninja (315-5102) + + + ninjak + The Ninja Kids (World) + + + ninjakd2 + Ninja-Kid II / NinjaKun Ashura no Shou (set 1) + + + ninjakd2a + Ninja-Kid II / NinjaKun Ashura no Shou (set 2, bootleg?) + + + ninjakd2b + Ninja-Kid II / NinjaKun Ashura no Shou (set 3, bootleg?) + + + ninjakj + The Ninja Kids (Japan) + + + ninjaku + The Ninja Kids (US) + + + ninjakun + Ninjakun Majou no Bouken + + + ninjamas + Ninja Master's - haoh-ninpo-cho + + + ninjaslt + Ninja Assault (NJA3 Ver. A) + + + ninjaslt1 + Ninja Assault (NJA1 Ver. A) + + + ninjaslt2 + Ninja Assault (NJA2 Ver. A) + + + ninjaslt4 + Ninja Assault (NJA4 Ver. A) + + + ninjaw + The Ninja Warriors (World) + + + ninjawj + The Ninja Warriors (Japan) + + + ninjawu + The Ninja Warriors (US) + + + ninjemak + Ninja Emaki (US) + + + nitd + Nightmare in the Dark + + + nitdbl + Nightmare in the Dark (bootleg) + + + nitedrvr + Night Driver + + + nitrobal + Nitro Ball (US) + + + niyanpai + Niyanpai (Japan) + + + nkdodge + Nekketsu Koukou Dodgeball Bu (Japan) + + + nkdodgeb + Nekketsu Koukou Dodgeball Bu (Japan, bootleg) + + + nkishusp + Mahjong Nenrikishu SP (Japan, V250J) + + + nmaster + Oni - The Ninja Master (Japan) + + + nmg5 + Multi 5 / New Multi Game 5 (set 1) + + + nmg5a + Multi 5 / New Multi Game 5 (set 2) + + + nmg5e + Multi 5 / New Multi Game 5 (set 3, earlier) + + + nmouse + Naughty Mouse (set 1) + + + nmouseb + Naughty Mouse (set 2) + + + nmoves + Night Moves + + + nmsengen + Nekketsu Mahjong Sengen! AFTER 5 (Japan) + + + nndmseal + Nandemo Seal Iinkai + + + nndmseala + Nandemo Seal Iinkai (Astro Boy ver.) + + + noahsark + Noah's Ark + + + nob + Noboranka (Japan) + + + nobb + Noboranka (Japan, bootleg) + + + nomnlnd + No Man's Land + + + nomnlndg + No Man's Land (Gottlieb) + + + noraut3a + Noraut Joker Poker (V3.010a) + + + noraut3b + Noraut Joker Poker (V3.011a) + + + norautdx + Noraut Deluxe Poker (console) + + + norautjo + Noraut Joker Poker (original) + + + norautjp + Noraut Joker Poker (alt) + + + norautp + Noraut Poker + + + norautpl + Noraut Joker Poker (Prologic HW) + + + norautpn + Noraut Deluxe Poker (bootleg) + + + norautra + Noraut Red Hot Joker Poker (alt HW) + + + norautrh + Noraut Red Hot Joker Poker + + + norautu + Noraut Poker (NTX10A) + + + norautua + Noraut unknown set 1 (console) + + + norautub + Noraut unknown set 2 (console) + + + nost + Nostradamus + + + nostj + Nostradamus (Japan) + + + nostk + Nostradamus (Korea) + + + nouryoku + Nouryoku Koujou Iinkai + + + nouryokup + Nouryoku Koujou Iinkai (prototype) + + + nova2001 + Nova 2001 (Japan) + + + nova2001u + Nova 2001 (US) + + + novoplay + Novo Play Multi Card / Club Card + + + npcartv1 + Neo Print V1 (World) + + + nprinces + Ninja Princess (315-5051, 64k Ver. bootleg?) + + + nprincesb + Ninja Princess (315-5051?, 128k Ver. bootleg?) + + + nprinceso + Ninja Princess (315-5098, 128k Ver.) + + + nprincesu + Ninja Princess (64k Ver. not encrypted) + + + nprsp + NeopriSP Retro Collection (Japan) + + + nrallyx + New Rally X + + + nrallyxb + New Rally X (bootleg?) + + + nratechu + Neratte Chu + + + ns8lines + New Lucky 8 Lines / New Super 8 Lines (W-4) + + + ns8linew + New Lucky 8 Lines / New Super 8 Lines (F-5, Witch Bonus) + + + nslasher + Night Slashers (Korea Rev 1.3) + + + nslasherj + Night Slashers (Japan Rev 1.2) + + + nslashers + Night Slashers (Over Sea Rev 1.2) + + + nslasheru + Night Slashers (US Rev 1.2, HuC6280 Sound CPU) + + + nsmpoker + NSM Poker (TMS9995) + + + nspirit + Ninja Spirit + + + nspiritj + Saigo no Nindou (Japan) + + + nss + Nintendo Super System BIOS + + + nss_actr + Act Raiser (Nintendo Super System) + + + nss_adam + The Addams Family (Nintendo Super System) + + + nss_aten + David Crane's Amazing Tennis (Nintendo Super System) + + + nss_con3 + Contra 3: The Alien Wars (Nintendo Super System) + + + nss_fzer + F-Zero (Nintendo Super System) + + + nss_lwep + Lethal Weapon (Nintendo Super System) + + + nss_ncaa + NCAA Basketball (Nintendo Super System) + + + nss_rob3 + Robocop 3 (Nintendo Super System) + + + nss_skin + Skins Game (Nintendo Super System) + + + nss_smw + Super Mario World (Nintendo Super System) + + + nss_ssoc + Super Soccer (Nintendo Super System) + + + nss_sten + Super Tennis (Nintendo Super System) + + + nstocker + Night Stocker (10/6/86) + + + nstocker2 + Night Stocker (8/27/86) + + + nstrphnx + New Star's Phoenix (Italian speech) + + + nsub + N-Sub (upright) + + + ntcash + NtCash + + + ntopstar + Mahjong Nerae! Top Star (Japan) + + + nudgeit + Nudge-It + + + nugent + Nugent + + + numanath + Numan Athletics (World) + + + numanathj + Numan Athletics (Japan) + + + number1 + Number One + + + number10 + Number Dieci (Poker) + + + numbr10l + Number Dieci (Lattine) + + + nunchaku + Nunchackun + + + nwarr + Night Warriors: Darkstalkers' Revenge (Euro 950316) + + + nwarra + Night Warriors: Darkstalkers' Revenge (Asia 950302) + + + nwarrb + Night Warriors: Darkstalkers' Revenge (Brazil 950403) + + + nwarrh + Night Warriors: Darkstalkers' Revenge (Hispanic 950403) + + + nwarru + Night Warriors: Darkstalkers' Revenge (USA 950406) + + + nwarrud + Night Warriors: Darkstalkers' Revenge (USA 950406 Phoenix Edition) (bootleg) + + + nyanpani + Nyan Nyan Panic (Japan) + + + nycaptor + N.Y. Captor + + + nyjoker + New York Joker + + + nyny + New York! New York! + + + nynyg + New York! New York! (Gottlieb) + + + nzeroteam + New Zero Team + + + obaoba + Oba-Oba + + + obaoba1 + Oba-Oba (alternate set) + + + oceanhun + The Ocean Hunter + + + odeontw2 + Odeon Twister 2 (v202.19) + + + odin + Odin + + + odin_dlx + Odin De Luxe + + + odisea + Odisea Paris-Dakar + + + oedfight + Oedo Fight (Japan Bloodshed Ver.) + + + officeye + Office Yeo In Cheon Ha (version 1.2) + + + offroad + Ironman Ivan Stewart's Super Off-Road + + + offroadc + Off Road Challenge (v1.63) + + + offroadc1 + Off Road Challenge (v1.10) + + + offroadc3 + Off Road Challenge (v1.30) + + + offroadc4 + Off Road Challenge (v1.40) + + + offroadc5 + Off Road Challenge (v1.50) + + + offroadt + Ironman Ivan Stewart's Super Off-Road Track-Pak + + + offroadt2p + Ironman Ivan Stewart's Super Off-Road Track-Pak (2 Players) + + + offrthnd + Offroad Thunder + + + offtwall + Off the Wall (2/3-player upright) + + + offtwallc + Off the Wall (2-player cocktail) + + + ogonsiro + Ougon no Shiro (Japan) + + + ohbakyuun + Oh! Bakyuuun (Japan, OB1/VER.A) + + + ohmygod + Oh My God! (Japan) + + + ohpaipee + Oh! Paipee (Japan 890227) + + + oigas + Oigas (bootleg) + + + oinori + Oinori-daimyoujin Matsuri + + + oisipuzl + Oishii Puzzle Ha Irimasenka + + + ojanko2 + Ojanko Yakata 2bankan (Japan) + + + ojankoc + Ojanko Club (Japan) + + + ojankohs + Ojanko High School (Japan) + + + ojankoy + Ojanko Yakata (Japan) + + + ojousan + Ojousan (Japan 871204) + + + ojousanm + Ojousan [BET] (Japan 870108) + + + olds + Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 101, Korean Board) + + + olds100 + Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 100, set 1) + + + olds100a + Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 100, set 2) + + + olds103t + Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 103, China, Tencent) (unprotected) + + + oldsplus + Oriental Legend Special Plus / Xi You Shi E Zhuan Super Plus + + + olibochu + Oli-Boo-Chu + + + oligam + Olympian Games (Russia) + + + ollie + Ollie King (GDX-0007) + + + olympic + Olympic Games + + + olympus + Olympus + + + olysoc92 + Olympic Soccer '92 (set 1) + + + olysoc92a + Olympic Soccer '92 (set 2) + + + omega + Omega + + + omegaf + Omega Fighter + + + omegafs + Omega Fighter Special + + + omegrace + Omega Race (set 1) + + + omegrace2 + Omega Race (set 2) + + + omni + Omni + + + omni_l1 + Omni (Shuffle) (L-1) + + + omotesnd + Omotesandou (Japan 890215) + + + oneshot + One Shot One Kill + + + onetwo + One + Two + + + onetwoe + One + Two (earlier) + + + onna34ro + Onna Sansirou - Typhoon Gal (set 1) + + + onna34roa + Onna Sansirou - Typhoon Gal (set 2) + + + opaopa + Opa Opa (MC-8123, 317-0042) + + + opengolf + Konami's Open Golf Championship (ver EAE) + + + opengolf2 + Konami's Open Golf Championship (ver EAD) + + + openice + 2 On 2 Open Ice Challenge (rev 1.21) + + + openmj + Open Mahjong [BET] (Japan) + + + opthund + Operation: Thunder + + + optiger + Operation Tiger + + + opwolf + Operation Wolf (World, set 1) + + + opwolf3 + Operation Wolf 3 (World) + + + opwolf3u + Operation Wolf 3 (US) + + + opwolfa + Operation Wolf (World, set 2) + + + opwolfb + Operation Bear (bootleg of Operation Wolf) + + + opwolfj + Operation Wolf (Japan) + + + opwolfu + Operation Wolf (US) + + + orangec + Orange Club - Maruhi Kagai Jugyou (Japan 880213) + + + orangeci + Orange Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880221) + + + orbatak + Orbatak (prototype) + + + orbit + Orbit + + + orbit1 + Orbit 1 + + + orbitor1 + Orbitor 1 + + + orbitron + Orbitron + + + orbs + Orbs (10/7/94 prototype?) + + + ordyne + Ordyne (Japan, English Version) + + + ordynej + Ordyne (Japan) + + + orleg2 + Oriental Legend 2 (V104, China) + + + orleg2o + Oriental Legend 2 (V103, China) + + + orlegend + Oriental Legend / Xi You Shi E Zhuan (ver. 126) + + + orlegend105k + Oriental Legend / Xi You Shi E Zhuan (ver. 105, Korean Board) + + + orlegend111c + Oriental Legend / Xi You Shi E Zhuan (ver. 111, Chinese Board) + + + orlegendc + Oriental Legend / Xi You Shi E Zhuan (ver. 112, Chinese Board) + + + orlegendca + Oriental Legend / Xi You Shi E Zhuan (ver. ???, Chinese Board) + + + orlegende + Oriental Legend / Xi You Shi E Zhuan (ver. 112) + + + orunners + OutRunners (World) + + + orunnersj + OutRunners (Japan) + + + orunnersu + OutRunners (US) + + + oscar + Psycho-Nics Oscar (World revision 0) + + + oscarj1 + Psycho-Nics Oscar (Japan revision 1) + + + oscarj2 + Psycho-Nics Oscar (Japan revision 2) + + + oscaru + Psycho-Nics Oscar (US) + + + osman + Osman (World) + + + otatidai + Disco Mahjong Otachidai no Okite (Japan) + + + otchart + Off The Charts (Russia) + + + otenamhf + Otenami Haiken Final (V2.07JC) + + + otenamih + Otenami Haiken (V2.04J) + + + otenki + Otenki Kororin (V2.01J) + + + othello + Othello (version 3.0) + + + othellos + Othello Shiyouyo (J 980423 V1.002) + + + othldrby + Othello Derby (Japan) + + + othunder + Operation Thunderbolt (World) + + + othunderj + Operation Thunderbolt (Japan) + + + othunderu + Operation Thunderbolt (US) + + + othunderuo + Operation Thunderbolt (US, older) + + + otonano + Otona no Mahjong (Japan 880628) + + + otrigger + OutTrigger (JPN, USA, EXP, KOR, AUS) + + + otwalls + Off the Wall (Sente) + + + outfxies + The Outfoxies (World, OU2) + + + outfxiesj + The Outfoxies (Japan, OU1) + + + outlaw + Outlaw [TTL] + + + outline + Outline + + + outr2 + Out Run 2 (Rev A) (GDX-0004A) + + + outr2st + Out Run 2 Special Tours (Rev A) (GDX-0014A) + + + outrun + Out Run (sitdown/upright, Rev B) + + + outrunb + Out Run (bootleg) + + + outrundx + Out Run (deluxe sitdown) + + + outrundxa + Out Run (deluxe sitdown earlier version) + + + outrundxj + Out Run (Japan, deluxe sitdown, FD1089A 317-0019) + + + outrunra + Out Run (sitdown/upright, Rev A) + + + outzone + Out Zone + + + outzonea + Out Zone (old set) + + + outzoneb + Out Zone (older set) + + + outzonec + Out Zone (oldest set) + + + outzoneh + Out Zone (harder) + + + overdriv + Over Drive + + + overrev + Over Rev (Model 2C, Revision A) + + + overrevb + Over Rev (Model 2B, Revision B) + + + overtop + Over Top + + + ozmawars + Ozma Wars (set 1) + + + ozmawars2 + Ozma Wars (set 2) + + + ozon1 + Ozon I + + + p47 + P-47 - The Phantom Fighter (World) + + + p47aces + P-47 Aces + + + p47j + P-47 - The Freedom Fighter (Japan) + + + p47je + P-47 - The Freedom Fighter (Japan, Export) + + + p911 + Police 911 (ver UAD) + + + p9112 + Police 911 2 (ver A) + + + p911e + Police 24/7 (ver EAA) + + + p911j + Keisatsukan Shinjuku 24ji (ver JAC) + + + p911kc + Police 911 (ver KAC) + + + p911uc + Police 911 (ver UAC) + + + pacapp + Paca Paca Passion (Japan, PPP1/VER.A2) + + + pacapp2 + Paca Paca Passion 2 (Japan, PKS1/VER.A) + + + pacappsp + Paca Paca Passion Special (Japan, PSP1/VER.A) + + + pacgal + Pac-Gal + + + pacheart + Pac-Man (Hearts) + + + pachifev + Pachifever + + + pachiten + Medal Mahjong Pachi-Slot Tengoku [BET] (Japan) + + + pacland + Pac-Land (World) + + + paclandj + Pac-Land (Japan new) + + + paclandjo + Pac-Land (Japan old) + + + paclandjo2 + Pac-Land (Japan older) + + + paclandm + Pac-Land (Midway) + + + paclandp + Pac-Land (United Amusements PC Engine) + + + pacman + Pac-Man (Midway) + + + pacmanbl + Pac-Man (Galaxian hardware, set 1) + + + pacmanbla + Pac-Man (Galaxian hardware, set 2) + + + pacmanf + Pac-Man (Midway, speedup hack) + + + pacmania + Pac-Mania + + + pacmaniaj + Pac-Mania (Japan) + + + pacmansp + Puck Man (Spanish, 'Made in Greece' bootleg) + + + pacmod + Pac-Man (Midway, harder) + + + pacnchmp + Pac-Man & Chomp Chomp + + + pacnpal + Pac & Pal + + + pacnpal2 + Pac & Pal (older) + + + pacominv + Pacom Invader + + + pacplus + Pac-Man Plus + + + pacslot + Pac-Slot + + + pacuman + Pacu-Man (Spanish bootleg of Puck Man) + + + paddle2 + Paddle 2 (bootleg on Block hardware) + + + paddlema + Paddle Mania + + + paintlad + Painted Lady (Splash) (Ver. 1.3 US) + + + paintrlr + Paint Roller (bootleg of Crush Roller) + + + pairlove + Pairs Love + + + pairs + Pairs (V1.2, 09/30/94) + + + pairsa + Pairs (09/07/94) + + + pairsnb + Pairs (Nichibutsu) (Japan 890822) + + + pairsred + Pairs Redemption (V1.0, 10/25/94) + + + pairsten + Pairs (System Ten) (Japan 890826) + + + pajaroes + Pajaro del Espacio (Spanish bootleg of UniWar S) + + + palamed + Palamedes (Japan) + + + pandoras + Pandora's Palace + + + pang + Pang (World) + + + pang3 + Pang! 3 (Euro 950601) + + + pang3b + Pang! 3 (bootleg) + + + pang3j + Pang! 3: Kaitou Tachi no Karei na Gogo (Japan 950511) + + + pang3r1 + Pang! 3 (Euro 950511) + + + pangb + Pang (bootleg, set 1) + + + pangb2 + Pang (bootleg, set 4) + + + pangba + Pang (bootleg, set 3) + + + pangbold + Pang (bootleg, set 2) + + + pangofun + Pango Fun (Italy) + + + pangpang + Pang Pang + + + pangpoms + Pang Pom's + + + pangpomsm + Pang Pom's (Mitchell) + + + panic + Space Panic (version E) + + + panic2 + Space Panic (set 2) + + + panic3 + Space Panic (set 3) + + + panicbom + Panic Bomber + + + panicger + Space Panic (German) + + + panich + Space Panic (harder) + + + panicprk + Panic Park (PNP2 Ver. A) + + + panicprkj + Panic Park (PNP1 Ver. B) + + + panicr + Panic Road (Japan) + + + panicrg + Panic Road (Germany) + + + panicstr + Panic Street (Japan) + + + panikuru + Panicuru Panekuru (Japan, PPA1 Ver.A) + + + panther + Panther + + + panthera + Panthera + + + panzer + Panzer (bootleg of Spectar) + + + paperboy + Paperboy (rev 3) + + + paperboyr1 + Paperboy (rev 1) + + + paperboyr2 + Paperboy (rev 2) + + + papillon + Papillon + + + paprazzi + Paparazzi + + + para2dx + Paradise 2 Deluxe + + + paradice + Paradice (Dutch, Game Card 95-750-615) + + + paradise + Paradise + + + paradlx + Paradise Deluxe + + + paragon + Paragon + + + paranoia + Paranoia + + + parentj + Parent Jack + + + parodius + Parodius DA! (World, set 1) + + + parodiusa + Parodius DA! (Asia) + + + parodiuse + Parodius DA! (World, set 2) + + + parodiusj + Parodius DA! (Japan) + + + parrot3 + Parrot Poker III (Version 2.6E Dual) + + + parrot3b1 + Parrot Poker III (Version 2.6R, set 1) + + + parrot3d1 + Parrot Poker III (Version 2.6R, set 2) + + + parrot3o + Parrot Poker III (Version 2.4) + + + parrot3v1 + Parrot Poker III (Version 2.6R Dual) + + + party + Party + + + pasha2 + Pasha Pasha 2 + + + pass + Pass + + + passht4b + Passing Shot (4 Players) (bootleg) + + + passsht + Passing Shot (World, 2 Players, FD1094 317-0080) + + + passsht16a + Passing Shot (Japan, 4 Players, System 16A, FD1094 317-0071) + + + passshta + Passing Shot (World, 4 Players, FD1094 317-0074) + + + passshtb + Passing Shot (2 Players) (bootleg) + + + passshtj + Passing Shot (Japan, 4 Players, FD1094 317-0070) + + + pastelg + Pastel Gal (Japan 851224) + + + patimono + Mahjong Pachinko Monogatari (Japan) + + + pb_l2 + Pin-Bot (L-2) + + + pb_l3 + Pin-Bot (L-3) + + + pb_l5 + Pin-Bot (L-5) + + + pbaction + Pinball Action (set 1) + + + pbaction2 + Pinball Action (set 2) + + + pbaction3 + Pinball Action (set 3, encrypted) + + + pbaction4 + Pinball Action (set 4, encrypted) + + + pbaction5 + Pinball Action (set 5, encrypted) + + + pballoon + Pioneer Balloon + + + pballoonr + Pioneer Balloon (Rock-Ola license) + + + pbancho + Gyakuten!! Puzzle Bancho (Japan) + + + pbchmp95 + Pinball Champ '95 + + + pbillian + Prebillian + + + pbillrd + Perfect Billiard + + + pbillrds + Perfect Billiard (MC-8123, 317-0030) + + + pblbeach + Pebble Beach - The Great Shot (JUE 950913 V0.990) + + + pbobbl2n + Puzzle Bobble 2 / Bust-A-Move Again (Neo-Geo) + + + pbobble + Puzzle Bobble (Japan, B-System) + + + pbobble2 + Puzzle Bobble 2 (Ver 2.3O 1995/07/31) + + + pbobble2j + Puzzle Bobble 2 (Ver 2.2J 1995/07/20) + + + pbobble2o + Puzzle Bobble 2 (Ver 2.2O 1995/07/20) + + + pbobble2u + Bust-A-Move Again (Ver 2.3A 1995/07/31) + + + pbobble2x + Puzzle Bobble 2X (Ver 2.2J 1995/11/11) + + + pbobble3 + Puzzle Bobble 3 (Ver 2.1O 1996/09/27) + + + pbobble3j + Puzzle Bobble 3 (Ver 2.1J 1996/09/27) + + + pbobble3u + Puzzle Bobble 3 (Ver 2.1A 1996/09/27) + + + pbobble4 + Puzzle Bobble 4 (Ver 2.04O 1997/12/19) + + + pbobble4j + Puzzle Bobble 4 (Ver 2.04J 1997/12/19) + + + pbobble4u + Puzzle Bobble 4 (Ver 2.04A 1997/12/19) + + + pbobblen + Puzzle Bobble / Bust-A-Move (Neo-Geo) (NGM-083) + + + pbobblenb + Puzzle Bobble / Bust-A-Move (Neo-Geo) (bootleg) + + + pbss330 + Pit Boss Superstar III 30 (9233-00-01) + + + pbst30 + Pit Boss Supertouch 30 (9234-10-01) + + + pbst30b + Pit Boss Supertouch 30 (9234-00-01) + + + pc_1942 + 1942 (PlayChoice-10) + + + pc_bball + Baseball (PlayChoice-10) + + + pc_bfght + Balloon Fight (PlayChoice-10) + + + pc_bload + Bases Loaded (Prototype, PlayChoice-10) + + + pc_bstar + Baseball Stars: Be a Champ! (PlayChoice-10) + + + pc_cntra + Contra (PlayChoice-10) + + + pc_cshwk + Captain Sky Hawk (PlayChoice-10) + + + pc_cvnia + Castlevania (PlayChoice-10) + + + pc_dbldr + Double Dribble (PlayChoice-10) + + + pc_ddrgn + Double Dragon (PlayChoice-10) + + + pc_drmro + Dr. Mario (PlayChoice-10) + + + pc_duckh + Duck Hunt (PlayChoice-10) + + + pc_ebike + Excite Bike (PlayChoice-10) + + + pc_ftqst + Uncle Fester's Quest: The Addams Family (PlayChoice-10) + + + pc_gntlt + Gauntlet (PlayChoice-10) + + + pc_golf + Golf (PlayChoice-10) + + + pc_goons + The Goonies (PlayChoice-10) + + + pc_grdue + Gradius (PlayChoice-10, older) + + + pc_grdus + Gradius (PlayChoice-10) + + + pc_hgaly + Hogan's Alley (PlayChoice-10) + + + pc_kngfu + Kung Fu (PlayChoice-10) + + + pc_mario + Mario Bros. (PlayChoice-10) + + + pc_miket + Mike Tyson's Punch-Out!! (PlayChoice-10) + + + pc_mman3 + Mega Man III (PlayChoice-10) + + + pc_moglf + Mario's Open Golf (PlayChoice-10) + + + pc_mtoid + Metroid (PlayChoice-10) + + + pc_ngai2 + Ninja Gaiden Episode II: The Dark Sword of Chaos (PlayChoice-10) + + + pc_ngai3 + Ninja Gaiden Episode III: The Ancient Ship of Doom (PlayChoice-10) + + + pc_ngaid + Ninja Gaiden (PlayChoice-10) + + + pc_pinbt + PinBot (PlayChoice-10) + + + pc_pwbld + Power Blade (PlayChoice-10) + + + pc_pwrst + Pro Wrestling (PlayChoice-10) + + + pc_radr2 + Rad Racer II (PlayChoice-10) + + + pc_radrc + Rad Racer (PlayChoice-10) + + + pc_rcpam + R.C. Pro-Am (PlayChoice-10) + + + pc_rkats + Rockin' Kats (PlayChoice-10) + + + pc_rnatk + Rush'n Attack (PlayChoice-10) + + + pc_rrngr + Chip'n Dale: Rescue Rangers (PlayChoice-10) + + + pc_rygar + Rygar (PlayChoice-10) + + + pc_sjetm + Solar Jetman (PlayChoice-10) + + + pc_smb + Super Mario Bros. (PlayChoice-10) + + + pc_smb2 + Super Mario Bros. 2 (PlayChoice-10) + + + pc_smb3 + Super Mario Bros. 3 (PlayChoice-10) + + + pc_suprc + Super C (PlayChoice-10) + + + pc_tbowl + Tecmo Bowl (PlayChoice-10) + + + pc_tenis + Tennis (PlayChoice-10) + + + pc_tkfld + Track & Field (PlayChoice-10) + + + pc_tmnt + Teenage Mutant Ninja Turtles (PlayChoice-10) + + + pc_tmnt2 + Teenage Mutant Ninja Turtles II: The Arcade Game (PlayChoice-10) + + + pc_trjan + Trojan (PlayChoice-10) + + + pc_vball + Volley Ball (PlayChoice-10) + + + pc_virus + Virus (Dr. Mario prototype, PlayChoice-10) + + + pc_wcup + Nintendo World Cup (PlayChoice-10) + + + pc_wgnmn + Wild Gunman (PlayChoice-10) + + + pc_ynoid + Yo! Noid (PlayChoice-10) + + + pcktgal + Pocket Gal (Japan) + + + pcktgal2 + Pocket Gal 2 (English) + + + pcktgal2j + Pocket Gal 2 (Japanese) + + + pcktgalb + Pocket Gal (bootleg) + + + pclb297w + Print Club 2 '97 Winter Ver (J 971017 V1.100) + + + pclb298a + Print Club 2 '98 Autumn Ver (J 980827 V1.000) + + + pclb2elk + Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000) + + + pclub2 + Print Club 2 (U 970921 V1.000) + + + pclub298 + Print Club 2 '98 Spring Ver (J 971017 V1.100) + + + pclub2fc + Print Club 2 Felix The Cat (Rev. A) (J 970415 V1.100) + + + pclub2kc + Print Club Kome Kome Club (J 970203 V1.000) + + + pclub2v3 + Print Club 2 Vol. 3 (U 990310 V1.000) + + + pclubj + Print Club (Japan Vol.1) + + + pclubjv2 + Print Club (Japan Vol.2) + + + pclubjv4 + Print Club (Japan Vol.4) + + + pclubjv5 + Print Club (Japan Vol.5) + + + pclubol + Print Club Olive (J 980717 V1.000) + + + pclubor + Print Club Goukakenran (J 991104 V1.000) + + + pclubpok + Print Club Pokemon B (U 991126 V1.000) + + + pclubys + Puzzle Club (Yun Sung, set 1) + + + pclubysa + Puzzle Club (Yun Sung, set 2) + + + pcnfrk3m + Percussion Freaks 3rd Mix (G*A23 VER. KAA) + + + pdrift + Power Drift (World, Rev A) + + + pdrifta + Power Drift (World) + + + pdrifte + Power Drift (World, Earlier) + + + pdriftj + Power Drift (Japan) + + + pebe0014 + Player's Edge Plus (BE0014) Blackjack + + + pecmen + Mr. & Mrs. Pec-Men + + + peekaboo + Peek-a-Boo! + + + peepshow + Nozokimeguri Mahjong Peep Show (Japan 890404) + + + peggle + Peggle (Joystick, v1.0) + + + pegglet + Peggle (Trackball, v1.0) + + + peip0041 + Player's Edge Plus (IP0041) Double Deuces Wild Poker - French + + + peip0074 + Player's Edge Plus (IP0074) Joker Poker - French + + + peip0079 + Player's Edge Plus (IP0079) Standard Draw Poker - French + + + peke1012 + Player's Edge Plus (KE1012) Keno + + + peke1013 + Player's Edge Plus (KE1013) Keno + + + penalty + Penalty (Bingo) + + + penbros + Penguin Brothers (Japan) + + + penfan + Penfan Girls - Step1. Mild Mind (set 1) + + + penfana + Penfan Girls - Step1. Mild Mind (set 2) + + + pengadvb + Penguin Adventure (bootleg of MSX version) + + + pengo + Pengo (set 1 rev c) + + + pengo2 + Pengo (set 2) + + + pengo2u + Pengo (set 2 not encrypted) + + + pengo3u + Pengo (set 3 not encrypted) + + + pengo4 + Pengo (set 4) + + + pengob + Pengo (bootleg) + + + penky + Penky + + + penta + Penta + + + pentacup + Pentacup (rev. 1) + + + pentacup2 + Pentacup (rev. 2) + + + pepp0002 + Player's Edge Plus (PP0002) Standard Draw Poker + + + pepp0002a + Player's Edge Plus (PP0002) Standard Draw Poker (International) + + + pepp0008 + Player's Edge Plus (PP0008) Standard Draw Poker + + + pepp0010 + Player's Edge Plus (PP0010) Standard Draw Poker + + + pepp0014 + Player's Edge Plus (PP0014) Standard Draw Poker (International) + + + pepp0014a + Player's Edge Plus (PP0014) Standard Draw Poker + + + pepp0023 + Player's Edge Plus (PP0023) 10's or Better + + + pepp0040 + Player's Edge Plus (PP0040) Standard Draw Poker + + + pepp0041 + Player's Edge Plus (PP0041) Standard Draw Poker + + + pepp0043 + Player's Edge Plus (PP0043) 10's or Better + + + pepp0045 + Player's Edge Plus (PP0045) 10's or Better + + + pepp0046 + Player's Edge Plus (PP0046) 10's or Better + + + pepp0051 + Player's Edge Plus (PP0051) Joker Poker + + + pepp0053 + Player's Edge Plus (PP0053) Joker Poker (Aces or Better) + + + pepp0055 + Player's Edge Plus (PP0055) Deuces Wild Poker (set 1) + + + pepp0055a + Player's Edge Plus (PP0055) Deuces Wild Poker (set 2) + + + pepp0055b + Player's Edge Plus (PP0055) Deuces Wild Poker (set 3) + + + pepp0057 + Player's Edge Plus (PP0057) Deuces Wild Poker (set 1) + + + pepp0057a + Player's Edge Plus (PP0057) Deuces Wild Poker (set 2) + + + pepp0059 + Player's Edge Plus (PP0059) Two Pair or Better (set 1) + + + pepp0059a + Player's Edge Plus (PP0059) Two Pair or Better (set 2) + + + pepp0060 + Player's Edge Plus (PP0060) Standard Draw Poker (set 1) + + + pepp0060a + Player's Edge Plus (PP0060) Standard Draw Poker (set 2) + + + pepp0064 + Player's Edge Plus (PP0064) Joker Poker + + + pepp0065 + Player's Edge Plus (PP0065) Joker Poker (Aces or Better) + + + pepp0083 + Player's Edge Plus (PP0083) 10's or Better + + + pepp0103 + Player's Edge Plus (PP0103) Deuces Wild Poker + + + pepp0116 + Player's Edge Plus (PP0116) Standard Draw Poker + + + pepp0118 + Player's Edge Plus (PP0118) Standard Draw Poker + + + pepp0120 + Player's Edge Plus (PP0120) Wild Sevens Poker + + + pepp0125 + Player's Edge Plus (PP0125) Deuces Wild Poker + + + pepp0126 + Player's Edge Plus (PP0126) Deuces Wild Poker + + + pepp0127 + Player's Edge Plus (PP0127) Deuces Joker Wild Poker + + + pepp0158 + Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 1) + + + pepp0158a + Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 2) + + + pepp0158b + Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 3) + + + pepp0159 + Player's Edge Plus (PP0159) Standard Draw Poker (International) + + + pepp0171 + Player's Edge Plus (PP0171) Joker Poker + + + pepp0178 + Player's Edge Plus (PP0178) 4 of a Kind Bonus Poker (Operator selectable special 4 of a Kind) + + + pepp0188 + Player's Edge Plus (PP0188) Standard Draw Poker (set 1) + + + pepp0188a + Player's Edge Plus (PP0188) Standard Draw Poker (set 2) + + + pepp0190 + Player's Edge Plus (PP0190) Deuces Wild Poker + + + pepp0197 + Player's Edge Plus (PP0197) Standard Draw Poker (set 1) + + + pepp0197a + Player's Edge Plus (PP0197) Standard Draw Poker (set 2) + + + pepp0203 + Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 1) + + + pepp0203a + Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 2) + + + pepp0203b + Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 3) + + + pepp0219 + Player's Edge Plus (PP0219) Standard Draw Poker + + + pepp0221 + Player's Edge Plus (PP0221) Standard Draw Poker (set 1) + + + pepp0221a + Player's Edge Plus (PP0221) Standard Draw Poker (set 2) + + + pepp0224 + Player's Edge Plus (PP0224) Deuces Wild Poker (set 1) + + + pepp0224a + Player's Edge Plus (PP0224) Deuces Wild Poker (set 2) + + + pepp0230 + Player's Edge Plus (PP0230) Standard Draw Poker + + + pepp0249 + Player's Edge Plus (PP0249) Deuces Wild Poker + + + pepp0250 + Player's Edge Plus (PP0250) Double Down Stud Poker + + + pepp0265 + Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 1) + + + pepp0265a + Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 2) + + + pepp0274 + Player's Edge Plus (PP0274) Standard Draw Poker + + + pepp0290 + Player's Edge Plus (PP0290) Deuces Wild Poker + + + pepp0291 + Player's Edge Plus (PP0291) Deuces Wild Poker + + + pepp0409 + Player's Edge Plus (PP0409) 4 of a Kind Bonus Poker + + + pepp0410 + Player's Edge Plus (PP0410) 4 of a Kind Bonus Poker + + + pepp0417 + Player's Edge Plus (PP0417) Deuces Wild Poker (set 1) + + + pepp0417a + Player's Edge Plus (PP0417) Deuces Wild Poker (set 2) + + + pepp0419 + Player's Edge Plus (PP0419) Standard Draw Poker + + + pepp0420 + Player's Edge Plus (PP0420) Standard Draw Poker + + + pepp0423 + Player's Edge Plus (PP0423) Standard Draw Poker + + + pepp0426 + Player's Edge Plus (PP0426) Joker Poker + + + pepp0428 + Player's Edge Plus (PP0428) Joker Poker + + + pepp0429 + Player's Edge Plus (PP0429) Joker Poker (Aces or Better) + + + pepp0434 + Player's Edge Plus (PP0434) Bonus Poker Deluxe + + + pepp0447 + Player's Edge Plus (PP0447) Standard Draw Poker (set 1) + + + pepp0447a + Player's Edge Plus (PP0447) Standard Draw Poker (set 2) + + + pepp0449 + Player's Edge Plus (PP0449) Standard Draw Poker + + + pepp0452 + Player's Edge Plus (PP0452) Double Deuces Wild Poker + + + pepp0454 + Player's Edge Plus (PP0454) Bonus Poker Deluxe + + + pepp0455 + Player's Edge Plus (PP0455) Joker Poker + + + pepp0458 + Player's Edge Plus (PP0458) Joker Poker (Aces or Better) + + + pepp0488 + Player's Edge Plus (PP0488) Standard Draw Poker (Arizona Charlie's) + + + pepp0508 + Player's Edge Plus (PP0508) Loose Deuce Deuces Wild! Poker + + + pepp0509 + Player's Edge Plus (PP0509) Standard Draw Poker + + + pepp0510 + Player's Edge Plus (PP0510) Standard Draw Poker + + + pepp0514 + Player's Edge Plus (PP0514) Double Bonus Poker (set 1) + + + pepp0514a + Player's Edge Plus (PP0514) Double Bonus Poker (set 2) + + + pepp0514b + Player's Edge Plus (PP0514) Double Bonus Poker (set 3) + + + pepp0515 + Player's Edge Plus (PP0515) Double Bonus Poker (set 1) + + + pepp0515a + Player's Edge Plus (PP0515) Double Bonus Poker (set 2) + + + pepp0516 + Player's Edge Plus (PP0516) Double Bonus Poker (set 1) + + + pepp0516a + Player's Edge Plus (PP0516) Double Bonus Poker (set 2) + + + pepp0531 + Player's Edge Plus (PP0531) Joker Poker + + + pepp0536 + Player's Edge Plus (PP0536) Joker Poker + + + pepp0538 + Player's Edge Plus (PP0538) Double Bonus Poker + + + pepp0540 + Player's Edge Plus (PP0540) Double Bonus Poker + + + pepp0542 + Player's Edge Plus (PP0542) One Eyed Jacks Wild Poker + + + pepp0568 + Player's Edge Plus (PP0568) Joker Poker + + + pepp0585 + Player's Edge Plus (PP0585) Standard Draw Poker + + + pepp0713 + Player's Edge Plus (PP0713) Bonus Poker Deluxe + + + pepp0725 + Player's Edge Plus (PP0725) Double Bonus Poker (set 1) + + + pepp0725a + Player's Edge Plus (PP0725) Double Bonus Poker (set 2) + + + pepp0726 + Player's Edge Plus (PP0726) Double Bonus Poker + + + pepp0728 + Player's Edge Plus (PP0728) Double Bonus Poker + + + pepp0760 + Player's Edge Plus (PP0760) Double Down Stud Poker + + + pepp0763 + Player's Edge Plus (PP0763) 4 of a Kind Bonus Poker + + + pepp0775 + Player's Edge Plus (PP0775) Royal Deuces Poker?? + + + pepper2 + Pepper II (version 8) + + + pepper27 + Pepper II (version 7) + + + peps0014 + Player's Edge Plus (PS0014) Super Joker Slots + + + peps0021 + Player's Edge Plus (PS0021) Red White & Blue Slots + + + peps0022 + Player's Edge Plus (PS0022) Red White & Blue Slots + + + peps0042 + Player's Edge Plus (PS0042) Double Diamond Slots + + + peps0043 + Player's Edge Plus (PS0043) Double Diamond Slots + + + peps0045 + Player's Edge Plus (PS0045) Red White & Blue Slots + + + peps0047 + Player's Edge Plus (PS0047) Wild Cherry Slots + + + peps0092 + Player's Edge Plus (PS0092) Wild Cherry Slots + + + peps0206 + Player's Edge Plus (PS0206) Red White & Blue Slots + + + peps0207 + Player's Edge Plus (PS0207) Red White & Blue Slots + + + peps0296 + Player's Edge Plus (PS0296) Haywire Slots + + + peps0298 + Player's Edge Plus (PS0298) Double Diamond Slots + + + peps0308 + Player's Edge Plus (PS0308) Double Jackpot Slots + + + peps0364 + Player's Edge Plus (PS0364) Red White & Blue Slots + + + peps0426 + Player's Edge Plus (PS0426) Sizzling Sevens Slots + + + peps0581 + Player's Edge Plus (PS0581) Red White & Blue Slots + + + peps0615 + Player's Edge Plus (PS0615) Chaos Slots + + + peps0631 + Player's Edge Plus (PS0631) Red White & Blue Slots + + + peps0716 + Player's Edge Plus (PS0716) River Gambler Slots + + + pepsiman + PEPSI Man + + + percuss + The Percussor + + + perestro + Perestroika Girls + + + perestrof + Perestroika Girls (Fuuki license) + + + perfect + Perfect Game (Russia) + + + perfrman + Performan (Japan) + + + perfrmanu + Performan (US) + + + pesadelo + Pesadelo (bootleg of Knightmare on MSX) + + + peset001 + Player's Edge Plus (Set001) Set Chip + + + peset038 + Player's Edge Plus (Set038) Set Chip + + + pestplce + Pest Place + + + petaco + Petaco + + + petaco2 + Petaco 2 + + + peterpak + Peter Pack-Rat + + + pettanp + Pettan Pyuu (Japan) + + + pex0002p + Player's Edge Plus (X000002P+XP000038) Standard Draw Poker + + + pex0002pa + Player's Edge Plus (X000002P+XP000109) Standard Draw Poker + + + pex0040p + Player's Edge Plus (X000040P+XP000038) Standard Draw Poker + + + pex0045p + Player's Edge Plus (X000045P+XP000038) 10's or Better + + + pex0046p + Player's Edge Plus (X000046P+XP000038) 10's or Better + + + pex0053p + Player's Edge Plus (X000053P+XP000038) Joker Poker (Aces or Better) + + + pex0054p + Player's Edge Plus (X000054P+XP000038) Deuces Wild Poker + + + pex0055p + Player's Edge Plus (X000055P+XP000019) Deuces Wild Poker + + + pex0055pa + Player's Edge Plus (X000055P+XP000022) Deuces Wild Poker (The Orleans) + + + pex0055pb + Player's Edge Plus (X000055P+XP000023) Deuces Wild Poker + + + pex0055pc + Player's Edge Plus (X000055P+XP000028) Deuces Wild Poker + + + pex0055pd + Player's Edge Plus (X000055P+XP000035) Deuces Wild Poker + + + pex0055pe + Player's Edge Plus (X000055P+XP000038) Deuces Wild Poker + + + pex0055pf + Player's Edge Plus (X000055P+XP000040) Deuces Wild Poker + + + pex0055pg + Player's Edge Plus (X000055P+XP000053) Deuces Wild Poker + + + pex0055ph + Player's Edge Plus (X000055P+XP000055) Deuces Wild Poker + + + pex0055pi + Player's Edge Plus (X000055P+XP000063) Deuces Wild Poker + + + pex0055pj + Player's Edge Plus (X000055P+XP000075) Deuces Wild Poker + + + pex0055pk + Player's Edge Plus (X000055P+XP000079) Deuces Wild Poker + + + pex0055pl + Player's Edge Plus (X000055P+XP000094) Deuces Wild Poker + + + pex0055pm + Player's Edge Plus (X000055P+XP000095) Deuces Wild Poker + + + pex0055pn + Player's Edge Plus (X000055P+XP000098) Deuces Wild Poker + + + pex0055po + Player's Edge Plus (X000055P+XP000102) Deuces Wild Poker + + + pex0055pp + Player's Edge Plus (X000055P+XP000104) Deuces Wild Poker + + + pex0055pq + Player's Edge Plus (X000055P+XP000112) Deuces Wild Poker + + + pex0055pr + Player's Edge Plus (X000055P+XP000126) Deuces Wild Poker + + + pex0060p + Player's Edge Plus (X000060P+XP000038) Standard Draw Poker + + + pex0158p + Player's Edge Plus (X000158P+XP000038) 4 of a Kind Bonus Poker + + + pex0171p + Player's Edge Plus (X000171P+XP000038) Joker Poker + + + pex0188p + Player's Edge Plus (X000188P+XP000038) Standard Draw Poker + + + pex0190p + Player's Edge Plus (X000190P+XP000053) Deuces Wild Poker + + + pex0197p + Player's Edge Plus (X000197P+XP000038) Standard Draw Poker + + + pex0203p + Player's Edge Plus (X000203P+XP000038) 4 of a Kind Bonus Poker + + + pex0224p + Player's Edge Plus (X000224P+XP000053) Deuces Wild Poker + + + pex0225p + Player's Edge Plus (X000225P+XP000079) Dueces Joker Wild Poker + + + pex0265p + Player's Edge Plus (X000265P+XP000038) 4 of a Kind Bonus Poker + + + pex0291p + Player's Edge Plus (X000291P+XP000053) Deuces Wild Poker + + + pex0417p + Player's Edge Plus (X000417P+XP000053) Deuces Wild Poker + + + pex0430p + Player's Edge Plus (X000430P+XP000079) Dueces Joker Wild Poker + + + pex0434p + Player's Edge Plus (X000434P+XP000038) Bonus Poker Deluxe + + + pex0447p + Player's Edge Plus (X000447P+XP000038) Standard Draw Poker + + + pex0449p + Player's Edge Plus (X000449P+XP000038) Standard Draw Poker + + + pex0451p + Player's Edge Plus (X000451P+XP000038) Bonus Poker Deluxe + + + pex0452p + Player's Edge Plus (X000452P+XP000038) Double Deuces Wild Poker + + + pex0454p + Player's Edge Plus (X000454P+XP000038) Bonus Poker Deluxe + + + pex0458p + Player's Edge Plus (X000458P+XP000038) Joker Poker (Aces or Better) + + + pex0459p + Player's Edge Plus (X000459P+XP000038) Joker Poker + + + pex0459pa + Player's Edge Plus (X000459P+XP000155) Joker Poker + + + pex0508p + Player's Edge Plus (X000508P+XP000038) Loose Deuce Deuces Wild! Poker + + + pex0514p + Player's Edge Plus (X000514P+XP000038) Double Bonus Poker + + + pex0515p + Player's Edge Plus (X000515P+XP000038) Double Bonus Poker + + + pex0536p + Player's Edge Plus (X000536P+XP000038) Joker Poker + + + pex0537p + Player's Edge Plus (X000537P+XP000038) Standard Draw Poker + + + pex0568p + Player's Edge Plus (X000568P+XP000038) Joker Poker + + + pex0581p + Player's Edge Plus (X000581P+XP000038) 4 of a Kind Bonus Poker + + + pex0588p + Player's Edge Plus (X000588P+XP000038) Joker Poker + + + pex0725p + Player's Edge Plus (X000725P+XP000038) Double Bonus Poker + + + pex0726p + Player's Edge Plus (X000726P+XP000038) Double Bonus Poker + + + pex0727p + Player's Edge Plus (X000727P+XP000038) Double Bonus Poker + + + pex0763p + Player's Edge Plus (X000763P+XP000038) 4 of a Kind Bonus Poker + + + pex0838s + Player's Edge Plus (X000838S+XS000002) Five Times Pay Slots + + + pex0841s + Player's Edge Plus (X000841S+XS000002) Five Times Pay Slots + + + pex0998s + Player's Edge Plus (X000998S+XS000006) Triple Triple Diamond Slots + + + pex1087s + Player's Edge Plus (X001087S+XS000006) Double Double Diamond Slots + + + pex2018p + Player's Edge Plus (X002018P+XP000038) Full House Bonus Poker + + + pex2025p + Player's Edge Plus (X002025P+XP000019) Deuces Wild Bonus Poker + + + pex2026p + Player's Edge Plus (X002026P+XP000019) Deuces Wild Bonus Poker + + + pex2027p + Player's Edge Plus (X002027P+XP000019) Deuces Wild Bonus Poker + + + pex2031p + Player's Edge Plus (X002031P+XP000112) Lucky Deal Poker + + + pex2035p + Player's Edge Plus (X002035P+XP000112) White Hot Aces Poker + + + pex2036p + Player's Edge Plus (X002036P+XP000112) White Hot Aces Poker + + + pex2040p + Player's Edge Plus (X002040P+XP000038) Nevada Bonus Poker + + + pex2042p + Player's Edge Plus (X002042P+XP000038) Triple Bonus Poker + + + pex2043p + Player's Edge Plus (X002043P+XP000038) Triple Bonus Poker + + + pex2045p + Player's Edge Plus (X002045P+XP000038) Triple Bonus Poker + + + pex2066p + Player's Edge Plus (X002066P+XP000038) Double Double Bonus Poker + + + pex2067p + Player's Edge Plus (X002067P+XP000038) Double Double Bonus Poker + + + pex2068p + Player's Edge Plus (X002068P+XP000038) Double Double Bonus Poker + + + pex2069p + Player's Edge Plus (X002069P+XP000038) Double Double Bonus Poker + + + pex2070p + Player's Edge Plus (X002070P+XP000038) Double Double Bonus Poker + + + pex2121p + Player's Edge Plus (X002121P+XP000038) Standard Draw Poker + + + pex2121pa + Player's Edge Plus (X002121P+XP000037) Standard Draw Poker + + + pex2150p + Player's Edge Plus (X002150P+XP000038) 4 of a Kind Bonus Poker + + + pex2172p + Player's Edge Plus (X002172P+XP000112) Ace$ Bonus Poker + + + pex2180p + Player's Edge Plus (X002180P+XP000038) Double Bonus Poker + + + pex2241p + Player's Edge Plus (X002241P+XP000079) 4 of a Kind Bonus Poker + + + pex2244p + Player's Edge Plus (X002244P+XP000079) Double Bonus Poker + + + pex2245p + Player's Edge Plus (X002245P+XP000055) Standard Draw Poker + + + pex2245pa + Player's Edge Plus (X002245P+XP000079) Standard Draw Poker + + + pex2250p + Player's Edge Plus (X002250P+XP000050) Shockwave Poker + + + pex2251p + Player's Edge Plus (X002251P+XP000050) Shockwave Poker + + + pex2283p + Player's Edge Plus (X002283P+XP000057) Dealt Deuces Wild Bonus Poker + + + pex2284p + Player's Edge Plus (X002284P+XP000057) Barbaric Decues Wild Bonus Poker + + + pex2302p + Player's Edge Plus (X002302P+XP000038) Bonus Poker Deluxe + + + pex2303p + Player's Edge Plus (X002303P+XP000112) White Hot Aces Poker + + + pex2307p + Player's Edge Plus (X002307P+XP000112) Triple Double Bonus Poker + + + pex2314p + Player's Edge Plus (X002314P+XP000112) Triple Bonus Poker Plus + + + pex2374p + Player's Edge Plus (X002374P+XP000112) Super Aces Poker (Horseshoe) + + + pex2377p + Player's Edge Plus (X002377P+XP000112) Super Double Bonus Poker + + + pex2420p + Player's Edge Plus (X002420P+XP000064) Deuces Wild Bonus Poker - French + + + pex2440p + Player's Edge Plus (X002440P+XP000053) Deuces Wild Poker + + + pex2461p + Player's Edge Plus (X002461P+XP000055) Joker Poker (Two Pair or Better) + + + pexm001p + Player's Edge Plus (XM00001P+XMP00003) Multi-Poker + + + pexm002p + Player's Edge Plus (XM00002P+XMP00006) Multi-Poker + + + pexm003p + Player's Edge Plus (XM00003P+XMP00024) Multi-Poker + + + pexm004p + Player's Edge Plus (XM00004P+XMP00002) Multi-Poker + + + pexm005p + Player's Edge Plus (XM00005P+XMP00004) Multi-Poker + + + pexm006p + Player's Edge Plus (XM00006P+XMP00006) Multi-Poker + + + pexm007p + Player's Edge Plus (XM00007P+XMP00006) Multi-Poker + + + pexm008p + Player's Edge Plus (XM00008P+XMP00006) Multi-Poker + + + pexmp017 + Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2298) + + + pexmp017a + Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2352) + + + pexmp017b + Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2426) + + + pexmp030 + Player's Edge Plus (XMP00030) 5-in-1 Wingboard (CG2426) + + + pf2012 + Psychic Force 2012 + + + pfevr_l2 + Pennant Fever (L-2) + + + pfevr_p3 + Pennant Fever (P-3) + + + pfghtj + Pocket Fighter (Japan 970904) + + + pgalvip + Pocket Gals V.I.P (set 1) + + + pgalvipa + Pocket Gals V.I.P (set 2) + + + pgear + Powered Gear: Strategic Variant Armor Equipment (Japan 941024) + + + pgearr1 + Powered Gear: Strategic Variant Armor Equipment (Japan 940916) + + + pgm + PGM (Polygame Master) System BIOS + + + pgm3in1 + Photo Y2K 2 (Flash 3-in-1) + + + pgoal + Pleasure Goal / Futsal - 5 on 5 Mini Soccer (NGM-219) + + + phantasm + Phantasm (Japan) + + + phantom + Phantom (bootleg of Spectar) + + + phantom2 + Phantom II + + + phantoma + Phantomas (bootleg of Spectar) + + + phantomp + Phantom Pays (4VXFC5431, New Zealand) + + + pharo_l2 + Pharaoh (L-2) + + + pharrier + Planet Harriers + + + phelios + Phelios (Japan) + + + phklad + Klad / Labyrinth (Photon System) + + + phnix_l1 + Phoenix (L-1) + + + phoenix + Phoenix (Amstar) + + + phoenix3 + Phoenix (T.P.N.) + + + phoenixa + Phoenix (Centuri, set 1) + + + phoenixb + Phoenix (Centuri, set 2) + + + phoenixc + Phoenix (Irecsa / G.G.I Corp, set 1) + + + phoenixc2 + Phoenix (Irecsa / G.G.I Corp, set 2) + + + phoenixc3 + Phoenix (Irecsa / G.G.I Corp, set 3) + + + phoenixc4 + Phoenix (Irecsa / G.G.I Corp, set 4) + + + phoenixj + Phoenix (Taito Japan) + + + phoenixs + Phoenix (Spanish bootleg) + + + phoenixt + Phoenix (Taito) + + + phoenxp2 + Phoenix Part 2 + + + photof + Photo Finish (bootleg?) + + + photoply + Photo Play 2000 (v2.01) + + + photoy2k + Photo Y2K (ver. 105) + + + photoy2k102 + Photo Y2K (ver. 102, Japanese Board) + + + photoy2k104 + Photo Y2K (ver. 104) + + + phozon + Phozon (Japan) + + + phozons + Phozon (Sidam) + + + phpython + Python (Photon System) + + + phrcraze + Phraze Craze (6221-40, U5-0A) + + + phrcrazea + Phraze Craze (6221-40, U5-0) + + + phrcrazeb + Phraze Craze (6221-40, U5-3A Expanded Questions) + + + phrcrazec + Phraze Craze (6221-40, U5-3 Expanded Questions) + + + phrcrazev + Phraze Craze (6221-45, U5-2 Vertical) + + + phtetris + Tetris (Photon System) + + + piccolop + Piccolo Poker 100 + + + pickin + Pickin' + + + pickwin + Pick 'n Win (Version 2.9E Dual) + + + pickwinb1 + Pick 'n Win (Version 2.9R, set 1) + + + pickwinbt + Pick 'n Win (Version 2.8T, set 1) + + + pickwind1 + Pick 'n Win (Version 2.9R, set 2) + + + pickwindt + Pick 'n Win (Version 2.8T, set 2) + + + pickwino + Pick 'n Win (Version 2.6) + + + pickwino2 + Pick 'n Win (Version 2.5T) + + + pickwinv1 + Pick 'n Win (Version 2.9R Dual) + + + pickwinvt + Pick 'n Win (Version 2.8T, Dual) + + + pignewt + Pig Newton (version C) + + + pignewta + Pig Newton (version A) + + + pigout + Pig Out: Dine Like a Swine! (set 1) + + + pigouta + Pig Out: Dine Like a Swine! (set 2) + + + pigskin + Pigskin 621AD (rev 1.1K 8/01/90) + + + pigskina + Pigskin 621AD (rev 2.0 7/06/90) + + + pigskinb + Pigskin 621AD (rev 1.1 6/05/90) + + + pimbal + Pimbal (Pinball 3000) + + + pinball + Pinball + + + pinbo + Pinbo (set 1) + + + pinboa + Pinbo (set 2) + + + pinbos + Pinbo (bootleg) + + + pinchamp + Pinball Champ + + + pinchamp7 + Pinball Champ (7 digits) + + + pinchamp7g + Pinball Champ (7 digits German speech) + + + pinchamp7i + Pinball Champ (7 digits Italian speech) + + + pinchampg + Pinball Champ (German speech) + + + pinchampi + Pinball Champ (Italian speech) + + + pinclown + Clown (Inder) + + + pingpong + Konami's Ping-Pong + + + pinkiri8 + Pinkiri 8 + + + pinkswts + Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER....) + + + pinkswtsa + Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER...) + + + pinkswtsb + Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER.) + + + pinkswtsx + Pink Sweets: Ibara Sorekara (2006/xx/xx MASTER VER.) + + + pinpool + Pinball Pool + + + pipedrm + Pipe Dream (World) + + + pipedrmj + Pipe Dream (Japan) + + + pipedrmt + Pipe Dream (Taiwan) + + + pipedrmu + Pipe Dream (US) + + + pipeline + Pipeline + + + pipibibs + Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 1) + + + pipibibsa + Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 2) + + + pipibibsbl + Pipi & Bibis / Whoopee!! (bootleg) + + + pipibibsp + Pipi & Bibis / Whoopee!! (prototype) + + + pir2001 + Pirate 2001 (Version 2.5E Dual) + + + pir2001b1 + Pirate 2001 (Version 2.5R, set 1) + + + pir2001bx + Pirate 2001 (Version 2.40XT, set 1) + + + pir2001d1 + Pirate 2001 (Version 2.5R, set 2) + + + pir2001dx + Pirate 2001 (Version 2.40XT, set 2) + + + pir2001o + Pirate 2001 (Version 2.3N) + + + pir2001o2 + Pirate 2001 (Version 2.3) + + + pir2001o3 + Pirate 2001 (Version 2.20XT) + + + pir2001v1 + Pirate 2001 (Version 2.5R Dual) + + + pir2001vx + Pirate 2001 (Version 2.40XT Dual) + + + pir2002 + Pirate 2002 (Version 2.0E Dual) + + + pir2002b1 + Pirate 2002 (Version 2.0R, set 1) + + + pir2002bx + Pirate 2002 (Version 1.90XT, set 1) + + + pir2002d1 + Pirate 2002 (Version 2.0R, set 2) + + + pir2002dx + Pirate 2002 (Version 1.90XT, set 2) + + + pir2002o + Pirate 2002 (Version 1.8N) + + + pir2002o2 + Pirate 2002 (Version 1.8) + + + pir2002o3 + Pirate 2002 (Version 1.70XT) + + + pir2002v1 + Pirate 2002 (Version 2.0R Dual) + + + pir2002vx + Pirate 2002 (Version 1.90XT Dual) + + + piranha + Piranha + + + piranhah + Piranha (hack) + + + piranhao + Piranha (older) + + + pirate2 + Pirate 2 (061005 World) + + + pirate2_2 + Pirate 2 (070126 Russia) + + + pirate2_2a + Pirate 2 (bootleg, 070126, banking address hack) + + + pirate2_3 + Pirate 2 (090528 Lottery) + + + pirate2_4 + Pirate 2 (090730 Entertainment) + + + pirate2a + Pirate 2 (bootleg, 061005, banking address hack set 1) + + + pirate2b + Pirate 2 (bootleg, 061005, banking address hack set 2) + + + pirate2c + Pirate 2 (bootleg, 061005, banking address hack, changed version text set 1) + + + pirate2d + Pirate 2 (bootleg, 061005, banking address hack, changed version text set 2) + + + pirate2e + Pirate 2 (bootleg, 061005, banking address hack, changed version text set 3) + + + pirate2f + Pirate 2 (bootleg, 061005, VIDEO GAME-1 PR01) + + + pirate2g + Pirate 2 (bootleg, 061005, LOTTOGAME (I)) + + + pirate2h + Pirate 2 (bootleg, 061005, LOTOS PR01) + + + pirate_2 + Pirate (060210 World) + + + pirate_3 + Pirate (060803 World) + + + pirate_4 + Pirate (070412 Russia) + + + pirates + Pirates + + + piratetr + Pirate Treasure + + + pirati + Pirati + + + piratpet + Pirate Pete + + + pirpok2 + Pirate Poker II (Version 2.4E Dual) + + + pirpok2b1 + Pirate Poker II (Version 2.2R, set 1) + + + pirpok2d1 + Pirate Poker II (Version 2.2R, set 2) + + + pirpok2o + Pirate Poker II (Version 2.0) + + + pirpok2v1 + Pirate Poker II (Version 2.2R Dual) + + + pisces + Pisces + + + piscesb + Pisces (bootleg) + + + pistoldm + Pistol Daimyo no Bouken (Japan) + + + pitboss + The Pit Boss (2214-04) + + + pitboss2 + Pit Boss II (9221-01C) + + + pitbossa + The Pit Boss (2214-03, U5-0C) + + + pitbossa1 + The Pit Boss (2214-03, U5-1C) + + + pitbossb + The Pit Boss (2214-02?) + + + pitbossc + The Pit Boss (2214-?) + + + pitbossm + Pit Boss Megastar (9244-00-01) + + + pitbossma + Pit Boss Megastar (9243-00-01) + + + pitbosss + Pit Boss Superstar (9221-10-00B) + + + pitbosssa + Pit Boss Superstar (9221-10-00A) + + + pitbosssc + Pit Boss Superstar (9221-12-01) + + + pitfall2 + Pitfall II (315-5093) + + + pitfall2a + Pitfall II (315-5093, Flicky Conversion) + + + pitfall2u + Pitfall II (not encrypted) + + + pitfight + Pit Fighter (rev 9) + + + pitfight3 + Pit Fighter (rev 3) + + + pitfight4 + Pit Fighter (rev 4) + + + pitfight5 + Pit Fighter (rev 5) + + + pitfight6 + Pit Fighter (rev 6) + + + pitfight7 + Pit Fighter (rev 7) + + + pitfightb + Pit Fighter (bootleg) + + + pitfightj + Pit Fighter (Japan, 2 players) + + + pitnrun + Pit & Run - F-1 Race (set 1) + + + pitnruna + Pit & Run - F-1 Race (set 2) + + + pjustic + Moero Justice Gakuen (JPN) / Project Justice (USA, EXP, KOR, AUS) (Rev A) + + + pkgnsh + Pachinko Gindama Shoubu (Japan) + + + pkgnshdx + Pachinko Gindama Shoubu DX (Japan) + + + pkladies + Poker Ladies + + + pkladiesbl + Poker Ladies (Censored bootleg) + + + pkladiesl + Poker Ladies (Leprechaun ver. 510) + + + pkladiesla + Poker Ladies (Leprechaun ver. 401) + + + pkrdewin + Poker De Win + + + pkrmast + Poker Master (set 1) + + + pkrmasta + Poker Master (set 2) + + + pkrno_l1 + Pokerino (L-1) + + + pkscram + PK Scramble + + + pktet346 + PK Tetris (v346I) + + + pktgaldx + Pocket Gal Deluxe (Euro v3.00) + + + pktgaldxb + Pocket Gal Deluxe (Euro v3.00, bootleg) + + + pktgaldxj + Pocket Gal Deluxe (Japan v3.00) + + + pkunwar + Penguin-Kun Wars (US) + + + pkunwarj + Penguin-Kun Wars (Japan) + + + platoon + Vs. Platoon + + + play_a24 + Playboy 35th Anniversary (2.4) + + + playball + PlayBall! (prototype) + + + playboy + Playboy + + + playboyf + Playboy (5.00 France) + + + playboyf_203 + Playboy (2.03 France) + + + playboyf_300 + Playboy (3.00 France) + + + playboyf_303 + Playboy (3.03 France) + + + playboyf_401 + Playboy (4.01 France) + + + playboyg + Playboy (5.00 Germany) + + + playboyg_203 + Playboy (2.03 Germany) + + + playboyg_300 + Playboy (3.00 Germany) + + + playboyg_303 + Playboy (3.03 Germany) + + + playboyg_401 + Playboy (4.01 Germany) + + + playboyi + Playboy (5.00 Italy) + + + playboyi_203 + Playboy (2.03 Italy) + + + playboyi_300 + Playboy (3.00 Italy) + + + playboyi_303 + Playboy (3.03 Italy) + + + playboyi_401 + Playboy (4.01 Italy) + + + playboyl + Playboy (5.00 Spain) + + + playboyl_203 + Playboy (2.03 Spain) + + + playboyl_300 + Playboy (3.00 Spain) + + + playboyl_303 + Playboy (3.03 Spain) + + + playboyl_401 + Playboy (4.01 Spain) + + + playboys + Playboy (5.00) + + + playboys_203 + Playboy (2.03) + + + playboys_300 + Playboy (3.00) + + + playboys_303 + Playboy (3.03) + + + playboys_401 + Playboy (4.01) + + + playch10 + PlayChoice-10 BIOS + + + playnew + Playboy (ARM7 Sound Board) + + + plegends + Gogetsuji Legends (US, Ver. 95/06/20) + + + plegendsj + Gouketsuji Gaiden - Saikyou Densetsu (Japan, Ver. 95/06/20) + + + pleiadbl + Pleiads (bootleg set 1) + + + pleiadce + Pleiads (Centuri) + + + pleiads + Pleiads (Tehkan) + + + pleiadsb2 + Pleiads (bootleg set 2) + + + plgirls + Play Girls + + + plgirls2 + Play Girls 2 + + + plotting + Plotting (World set 1) + + + plottinga + Plotting (World set 2, protected) + + + plottingb + Plotting (World set 3, earliest version) + + + plottingu + Plotting (US) + + + plsmaswd + Plasma Sword: Nightmare of Bilstein (USA 980316) + + + plsmaswda + Plasma Sword: Nightmare of Bilstein (Asia 980316) + + + pltkids + Pilot Kids (Model 2B, Revision A) + + + pltkidsa + Pilot Kids (Model 2A) + + + plumppop + Plump Pop (Japan) + + + plusalph + Plus Alpha + + + plygonet + Polygonet Commanders (ver UAA) + + + pma + PMA Poker + + + pmpoker + PlayMan Poker (German) + + + pmv112 + Pinball Magic + + + pmv112r + Pinball Magic (Redemption) + + + pnchmn + Punch Mania: Hokuto No Ken (GQ918 VER. JAB) + + + pnchmn2 + Punch Mania 2: Hokuto No Ken (GQA09 JAA) + + + pnchmna + Punch Mania: Hokuto No Ken (GQ918 VER. JAB ALT CD) + + + pnickj + Pnickies (Japan 940608) + + + pnkpnthr + Pink Panther + + + pntnpuzl + Paint & Puzzle + + + pnyaa + Pochi and Nyaa + + + pocketrc + Pocket Racer (Japan, PKR1/VER.B) + + + podrace + Star Wars Pod Racer + + + poitto + Poitto! + + + poizone + Poizone + + + pokasuka + Pokasuka Ghost + + + pokechmp + Poke Champ + + + poker41 + Four in One Poker + + + poker52 + Poker 52 (Ver. 1.2) + + + poker72 + Poker Monarch (v2.50) + + + poker91 + Poker 91 + + + pokerdub + unknown French poker game + + + pokerduc + unknown encrypted poker game + + + pokermon + Mundial/Mondial (Italian/French) + + + pokeroul + Poker Roulette (Version 8.22) + + + pokersis + unknown Sisteme France Poker + + + pokio + Pokio (Dutch, Game Card 95-750-278) + + + pokonl97 + Poker Only '97 (ver. 3.3) + + + pokrdice + Poker Dice + + + polar + Polar Explorer + + + polaris + Polaris (Latest version) + + + polarisa + Polaris (First revision) + + + polarisbr + Polaris (Brazil) + + + polariso + Polaris (Original version) + + + polepos + Pole Position (World) + + + polepos2 + Pole Position II (Japan) + + + polepos2a + Pole Position II (Atari) + + + polepos2b + Pole Position II (bootleg) + + + polepos2bi + Gran Premio F1 (Italian bootleg of Pole Position II) + + + poleposa1 + Pole Position (Atari version 1) + + + poleposa2 + Pole Position (Atari version 2) + + + poleposj + Pole Position (Japan) + + + poleposn + Pole Position (Sonic) + + + polic_l2 + Police Force (LA-2) + + + polic_l3 + Police Force (LA-3) + + + polic_l4 + Police Force (LA-4) + + + policetr + Police Trainer (Rev 1.3) + + + policetr10 + Police Trainer (Rev 1.0) + + + policetr11 + Police Trainer (Rev 1.1) + + + policetr13a + Police Trainer (Rev 1.3B Newer) + + + policetr13b + Police Trainer (Rev 1.3B) + + + pollux + Pollux (set 1) + + + polluxa + Pollux (set 2) + + + polluxa2 + Pollux (set 3) + + + polynetw + Poly-Net Warriors (ver JAA) + + + polyplay + Poly-Play + + + polystar + Tobe! Polystars (ver JAA) + + + pomp_l1 + Pompeii (Shuffle) (L-1) + + + pompingw + Pomping World (Japan) + + + ponchin + Mahjong Pon Chin Kan (Japan set 1) + + + ponchina + Mahjong Pon Chin Kan (Japan set 2) + + + pong + Pong (Rev E) external + + + pongf + Pong (Rev E) + + + ponpoko + Ponpoko + + + ponpokov + Ponpoko (Venture Line) + + + pontoon + Pontoon (FD1094 317-0153) + + + ponttehk + Pontoon (Tehkan) + + + pool10 + Pool 10 (Italian, set 1) + + + pool10b + Pool 10 (Italian, set 2) + + + pool10c + Pool 10 (Italian, set 3) + + + pool10d + Pool 10 (Italian, set 4) + + + pool10e + Pool 10 (Italian, Dino 4 hardware, encrypted) + + + pool10f + Pool 10 (Italian, set 5) + + + pool10g + Pool 10 (Italian, set 6) + + + pool10h + Pool 10 (Italian, set 7) + + + pool10i + Pool 10 (Italian, set 8) + + + pool_l6 + Pool Sharks (LA-6) + + + pool_l7 + Pool Sharks (LA-7) + + + pool_le2 + Pool Sharks (LE-2) + + + pool_p7 + Pool Sharks (PA-7) + + + poolcham + Pool Champion + + + poolchama + Pool Champion (alternate sound) + + + poolchami + Pool Champion (Italian speech) + + + poolshrk + Poolshark + + + pootan + Pootan + + + pooyan + Pooyan + + + pooyans + Pooyan (Stern Electronics) + + + pop_hh + Popper (Hard Head bootleg) + + + pop_lx5 + Popeye Saves The Earth (LX-5) + + + pop_pa3 + Popeye Saves The Earth (PA-3) + + + popbingo + Pop Bingo + + + popbounc + Pop 'n Bounce / Gapporin + + + popeye + Popeye (revision D) + + + popeyebl + Popeye (bootleg) + + + popeyef + Popeye (revision F) + + + popeyeman + Popeye-Man + + + popeyeu + Popeye (revision D not protected) + + + popflame + Pop Flamer (protected) + + + popflamea + Pop Flamer (not protected) + + + popflameb + Pop Flamer (hack?) + + + popflamen + Pop Flamer (bootleg on Naughty Boy PCB) + + + popn2 + Pop'n Music 2 (ver JA-A) + + + popn4 + Pop'n Music 4 + + + popn5 + Pop'n Music 5 + + + popn6 + Pop'n Music 6 + + + popn7 + Pop'n Music 7 + + + popn8 + Pop'n Music 8 + + + popn9 + Pop'n Music 9 (ver JAB) + + + popnanm2 + Pop'n Music Animelo 2 + + + popnpop + Pop'n Pop (Ver 2.07O 1998/02/09) + + + popnpopj + Pop'n Pop (Ver 2.07J 1998/02/09) + + + popnpopu + Pop'n Pop (Ver 2.07A 1998/02/09) + + + popobear + PoPo Bear + + + popper + Popper + + + popshot + Pop Shot (prototype) + + + popspops + Pop's Pop's + + + porky + Porky + + + porter + Port Man (bootleg on Moon Cresta hardware) + + + portman + Port Man + + + portrait + Portraits (set 1) + + + portraita + Portraits (set 2) + + + potgame + Pot Game (Italian) + + + potgoldu + Pot O' Gold (U.S. Games, v400x?) + + + potnpkra + Jack Potten's Poker (set 2) + + + potnpkrb + Jack Potten's Poker (set 3) + + + potnpkrc + Jack Potten's Poker (set 4) + + + potnpkrd + Jack Potten's Poker (set 5) + + + potnpkre + Jack Potten's Poker (set 6) + + + potnpkrf + Jack Potten's Poker (set 7, Royale GFX) + + + poto_a32 + The Phantom of the Opera (3.2) + + + potogold + Pot of Gold + + + potopoto + Poto Poto (Japan) + + + pottnpkr + Jack Potten's Poker (set 1) + + + poundfor + Pound for Pound (World) + + + poundforj + Pound for Pound (Japan) + + + poundforu + Pound for Pound (US) + + + pow + P.O.W. - Prisoners of War (US version 1) + + + powerbal + Power Balls + + + powerbals + Power Balls (Super Slam conversion) + + + powercrd + Power Card (Ver 0263, encrypted) + + + powerdrv + Power Drive + + + powerins + Power Instinct (USA) + + + powerinsa + Power Instinct (USA, bootleg set 1) + + + powerinsb + Power Instinct (USA, bootleg set 2) + + + powerinsj + Gouketsuji Ichizoku (Japan) + + + powj + Datsugoku - Prisoners of War (Japan) + + + powrplay + Power Play + + + powyak96 + Jikkyou Powerful Pro Yakyuu '96 (GV017 Japan 1.03) + + + powyakex + Jikkyou Powerful Pro Yakyuu EX (GX802 VER. JAB) + + + ppan + Peter Pan (bootleg of Hook) + + + ppcar + Pang Pang Car + + + ppchamp + Pasha Pasha Champ Mini Game Festival (Korea) + + + ppd + ParaParaDancing + + + ppking + Ping-Pong King + + + ppmast93 + Ping Pong Masters '93 + + + ppp + ParaParaParadise + + + ppp11 + ParaParaParadise v1.1 + + + ppp1mp + ParaParaParadise 1st Mix Plus + + + ppp2nd + ParaParaParadise 2nd Mix + + + pprobe + Planet Probe (prototype?) + + + ppsatan + Poka Poka Satan (Japan) + + + ppspeed + Speed Up (Spanish bootleg of Pole Position) + + + pr_5xcsh + 5x Cash (Project) (PROCONN) + + + pr_7hvn + 777 Heaven (Project) (PROCONN) + + + pr_7hvna + 777 Heaven (Project) (10GBP Jackpot) (PROCONN) + + + pr_7hvnb + 777 Heaven (Project) (20p 6GBP Jackpot Version 114) (PROCONN) + + + pr_7hvnc + 777 Heaven (Project) (10p 3GBP Jackpot Version 380) (PROCONN) + + + pr_7hvnd + 777 Heaven (Project) (5p 3GBP Jackpot Version 105) (PROCONN) + + + pr_7hvne + 777 Heaven (Project) (set 6) (PROCONN) + + + pr_7hvnf + 777 Heaven (Project) (set 7) (PROCONN) + + + pr_7hvng + 777 Heaven (Project) (set 8) (PROCONN) + + + pr_7hvnh + 777 Heaven (Project) (set 9) (PROCONN) + + + pr_7hvni + 777 Heaven (Project) (set 10) (PROCONN) + + + pr_7hvnj + 777 Heaven (Project) (set 11) (PROCONN) + + + pr_7hvnk + 777 Heaven (Project) (set 12) (PROCONN) + + + pr_7hvnl + 777 Heaven (Project) (set 13) (PROCONN) + + + pr_7hvnm + 777 Heaven (Project) (set 14) (PROCONN) + + + pr_7hvnn + 777 Heaven (Project) (set 15) (PROCONN) + + + pr_7hvno + 777 Heaven (Project) (set 16) (PROCONN) + + + pr_7hvnp + 777 Heaven (Project) (set 17) (PROCONN) + + + pr_7hvnq + 777 Heaven (Project) (set 18) (PROCONN) + + + pr_7hvnr + 777 Heaven (Project) (set 19) (PROCONN) + + + pr_7hvns + 777 Heaven (Project) (set 20) (PROCONN) + + + pr_7hvnt + 777 Heaven (Project) (set 21) (PROCONN) + + + pr_7hvnu + 777 Heaven (Project) (set 22) (PROCONN) + + + pr_alwy9 + Always Nine (Pcp) (set 1) (PROCONN) + + + pr_alwy9a + Always Nine (Pcp) (set 2) (PROCONN) + + + pr_barbl + Bars & Bells (Project) (PROCONN) + + + pr_batls + Battleships (Project) (set 1) (PROCONN) + + + pr_batlsa + Battleships (Project) (set 2) (PROCONN) + + + pr_batlsb + Battleships (Project) (set 3) (PROCONN) + + + pr_bears + Bear Streak (set 1) (Coinworld) + + + pr_bearsa + Bear Streak (set 2) (Coinworld) + + + pr_bearsb + Bear Streak (set 3) (Coinworld) + + + pr_bearx + Bear X (Version 2.3) (Coinworld) + + + pr_bearxa + Bear X (Version 2.2) (Coinworld) + + + pr_bearxb + Bear X (Version 1.3) (Coinworld) + + + pr_bearxc + Bear X (20p set 1) (Coinworld) + + + pr_bearxd + Bear X (20p set 2) (Coinworld) + + + pr_bearxe + Bear X (10p set 1) (Coinworld) + + + pr_bearxf + Bear X (10p set 2) (Coinworld) + + + pr_bearxg + Bear X (10p set 3) (Coinworld) + + + pr_bearxh + Bear X (10p set 4?) (Coinworld) + + + pr_bearxi + Bear X (10p set 5) (Coinworld) + + + pr_bearxj + Bear X (code 813) (Coinworld) + + + pr_bearxk + Bear X (8GBP Token?) (Coinworld) + + + pr_bearxl + Bear X (Version 41) (Coinworld) + + + pr_bearxlp + Bear X (Version 41, Protocol) (Coinworld) + + + pr_bearxm + Bear X (Version 31) (Coinworld) + + + pr_bigdp + Big Dipper (Project) (set 1) (PROCONN) + + + pr_bigdpa + Big Dipper (Project) (set 2) (PROCONN) + + + pr_btwar + Beat The Warden (Project) (set 1) (PROCONN) + + + pr_btwara + Beat The Warden (Project) (set 2) (PROCONN) + + + pr_btwarb + Beat The Warden (Project) (set 3) (PROCONN) + + + pr_bulbn + Bully's Big Night (Project) (PROCONN) + + + pr_bulbna + Bully's Big Night (Project) (set 1) (PROCONN) + + + pr_bulbnb + Bully's Big Night (Project) (set 2) (PROCONN) + + + pr_buljp + Bully's Jackpot (Project) (set 1) (PROCONN) + + + pr_buljpa + Bully's Jackpot (Project) (set 2) (PROCONN) + + + pr_bulls + Bullseye (Project) (set 1) (PROCONN) + + + pr_bullsa + Bullseye (Project) (set 2) (PROCONN) + + + pr_bullsb + Bullseye (Project) (set 3) (PROCONN) + + + pr_cas7 + Casino Jackpot 7s (Project) (PROCONN) + + + pr_cashb + Cash Back (Project) (PROCONN) + + + pr_chico + Chico the Bandit (Project) (set 1) (PROCONN) + + + pr_chicoa + Chico the Bandit (Project) (set 2) (PROCONN) + + + pr_chicob + Chico the Bandit (Project) (set 3) (PROCONN) + + + pr_coolm + Cool Million (Project) (set 1) (PROCONN) + + + pr_coolma + Cool Million (Project) (set 2) (PROCONN) + + + pr_coolmb + Cool Million (Project) (set 3) (PROCONN) + + + pr_coyot + Crazy Coyote (Pcp) (10p) (PROCONN) + + + pr_coyota + Crazy Coyote (Pcp) (20p) (PROCONN) + + + pr_crz77 + Crazy 777s (Project) (PROCONN) + + + pr_crzbr + Crazy Bars (Project) (PROCONN) + + + pr_crzpy + Crazy Pays (Project) (PROCONN) + + + pr_dblup + Double Up (Project) (PROCONN) + + + pr_fire + Fircecracker (Project) (PROCONN) + + + pr_flshc + Flash The Cash (Project) (PROCONN) + + + pr_fspot + Fun Spot (Version 4.1) (Coinworld) + + + pr_fspota + Fun Spot (Version 3.1) (Coinworld) + + + pr_fspotb + Fun Spot (Version 2.1, set 1) (Coinworld) + + + pr_fspotc + Fun Spot (Version 2.1, 20p stake, 82%) (Coinworld) + + + pr_fspotd + Fun Spot (Version 2.1, 7 button) (Coinworld) + + + pr_fspote + Fun Spot (Version 1.1, set 1) (Coinworld) + + + pr_fspotf + Fun Spot (Version 1.1, 20p stake, 82%) (Coinworld) + + + pr_fspotg + Fun Spot (Version 1.1, 6 button) (Coinworld) + + + pr_ftwhl + Fortune Wheel (Project) (PROCONN) + + + pr_funrn + Fun On The Run (Project) (PROCONN) + + + pr_gdft + Good Fortune (Project) (PROCONN) + + + pr_gldng + Golden Nugget (Project) (PROCONN) + + + pr_gldnl + Golden Nile (Project) (PROCONN) + + + pr_gnuc + Golden Nugget (Version 2.2) (Coinworld) + + + pr_gnuca + Golden Nugget (Version 1.2) (Coinworld) + + + pr_gogld + Go For Gold (Project) (PROCONN) + + + pr_happy + Happy Days (Project) (PROCONN) + + + pr_heato + The Heat Is On (Project) (PROCONN) + + + pr_hiclm + Hi Climber (Project) (PROCONN) + + + pr_hit6 + Hit The Six (Project) (set 1) (PROCONN) + + + pr_hit6a + Hit The Six (Project) (set 2) (PROCONN) + + + pr_hit6b + Hit The Six (Project) (set 3) (PROCONN) + + + pr_hotcs + Hot Cash (Project) (PROCONN) + + + pr_hotsp + Hot Spots (Project) (PROCONN) + + + pr_jkpt7 + Jackpot 7's (Project) (PROCONN) + + + pr_jkrwd + Jokers Wild (Project) (PROCONN) + + + pr_jumpj + Jumping Jacks (Project) (set 1) (PROCONN) + + + pr_jumpja + Jumping Jacks (Project) (set 2) (PROCONN) + + + pr_lday + 'L' Of A Day (Project) (Cash set) (PROCONN) + + + pr_ldaya + 'L' Of A Day (Project) (Token set) (PROCONN) + + + pr_magln + Magic Lines (Version 2.1) (Coinworld) + + + pr_maglna + Magic Lines (Version 1.1) (Coinworld) + + + pr_medl + Medalist (Project) (PROCONN) + + + pr_megmn + Mega Money (Project) (PROCONN) + + + pr_nifty + Nifty Fifty (Project) (PROCONN) + + + pr_nudxs + Nudge XS (Project) (PROCONN) + + + pr_qksht + Quickshot (Maygay) (PROCONN) + + + pr_rags + Rags To Riches (Project) (PROCONN) + + + pr_reflx + Reflex (Project) (PROCONN) + + + pr_roadr + Road Riot (Project) (PROCONN) + + + pr_roll + The Roll (Project) (PROCONN) + + + pr_sevab + Seven's Above (Project) (PROCONN) + + + pr_sevml + Sevens & Melons (Project) (PROCONN) + + + pr_sptb + Simply the Best (Pcp) (PROCONN?) + + + pr_supbr + Super Bars (PCP) (PROCONN) + + + pr_swop + Swop It (Ace) + + + pr_theme + Theme Park (Project) (PROCONN) + + + pr_trktp + Trick or Treat (Protocol?) (Project) (PROCONN) + + + pr_trktr + Trick or Treat (Project) (PROCONN) + + + pr_trpx + Triple X (Project) (PROCONN) + + + pr_ttrai + Treasure Trail (Project) (PROCONN) + + + pr_upnun + Up & Under (Project) (PROCONN) + + + pr_walls + Wall Street (Project) (PROCONN) + + + pr_whlft + Wheel Of Fortune (Project) (PROCONN) + + + pr_wldkn + Wild Kings (Project) (PROCONN) + + + pr_wnstk + Winning Streak (Version 1.1) (Coinworld) + + + prehisle + Prehistoric Isle in 1930 (World) + + + prehislek + Prehistoric Isle in 1930 (Korea) + + + prehisleu + Prehistoric Isle in 1930 (US) + + + preisle2 + Prehistoric Isle 2 + + + prikura + Princess Clara Daisakusen (J 960910 V1.000) + + + primella + Primella + + + primglex + Prime Goal EX (Japan, PG1/VER.A) + + + primrag2 + Primal Rage 2 (Ver 0.36a) + + + primrage + Primal Rage (version 2.3) + + + primrage20 + Primal Rage (version 2.0) + + + princess + Cosmic Princess + + + prmrsocr + Premier Soccer (ver EAB) + + + prmrsocrj + Premier Soccer (ver JAB) + + + prmtmfgt + Prime Time Fighter (Ver 2.1A 1993/05/21) (New Version) + + + prmtmfgto + Prime Time Fighter (Ver 2.1A 1993/05/21) (Old Version) + + + profpac + Professor Pac-Man + + + progear + Progear (USA 010117) + + + progeara + Progear (Asia 010117) + + + progearj + Progear no Arashi (Japan 010117) + + + progearjbl + Progear no Arashi (Japan 010117) (decrypted bootleg) + + + progearjd + Progear no Arashi (Japan 010117 Phoenix Edition) (bootleg) + + + progearud + Progear (USA 010117 Phoenix Edition) (bootleg) + + + progolf + 18 Holes Pro Golf (set 1) + + + progolfa + 18 Holes Pro Golf (set 2) + + + progress + Progress + + + promutrv + Progressive Music Trivia (Question set 1) + + + promutrva + Progressive Music Trivia (Question set 2) + + + promutrvb + Progressive Music Trivia (Question set 3) + + + promutrvc + Progressive Music Trivia (Question set 4) + + + propcycl + Prop Cycle (Rev. PR2 Ver.A) + + + prosoccr + Pro Soccer + + + prosport + Pro Sports - Bowling, Tennis, and Golf (set 1) + + + prosporta + Pro Sports - Bowling, Tennis, and Golf (set 2) + + + protennb + Tennis (bootleg of Pro Tennis) + + + prtyanim + Party Animal + + + prtytime + Party Time: Gonta the Diver II / Ganbare! Gonta!! 2 (World Release) + + + psailor1 + Bishoujo Janshi Pretty Sailor 18-kin (Japan) + + + psailor2 + Bishoujo Janshi Pretty Sailor 2 (Japan) + + + psarc95 + PS Arcade 95 + + + psattack + P's Attack + + + psoldier + Perfect Soldiers (Japan) + + + pspikes + Power Spikes (World) + + + pspikes2 + Power Spikes II (NGM-068) + + + pspikesb + Power Spikes (bootleg) + + + pspikesc + Power Spikes (China) + + + pspikesk + Power Spikes (Korea) + + + pspikesu + Power Spikes (US) + + + pss61 + Super Mario Kart / Super Mario Collection / Star Fox (Super Famicom Box) + + + pss62 + New Super 3D Golf Simulation - Waialae No Kiseki / Super Mahjong 2 (Super Famicom Box) + + + pss63 + Super Donkey Kong / Super Tetris 2 + Bombliss (Super Famicom Box) + + + pss64 + Super Donkey Kong / Super Bomberman 2 (Super Famicom Box) + + + pstadium + Mahjong Panic Stadium (Japan) + + + pstlpkr + Pistol Poker + + + pstone + Power Stone (JPN, USA, EUR, ASI, AUS) + + + pstone2 + Power Stone 2 (JPN, USA, EUR, ASI, AUS) + + + psurge + Power Surge + + + psychic5 + Psychic 5 (set 1) + + + psychic5a + Psychic 5 (set 2) + + + psychos + Psycho Soldier (US) + + + psychosj + Psycho Soldier (Japan) + + + psyforce + Psychic Force (Ver 2.4O) + + + psyforcej + Psychic Force (Ver 2.4J) + + + psyforcex + Psychic Force EX (Ver 2.0J) + + + psyvar2 + Psyvariar 2 - The Will To Fabricate (GDL-0024) + + + psyvaria + Psyvariar -Medium Unit- (V2.04J) + + + psyvarrv + Psyvariar -Revision- (V2.04J) + + + ptblank + Point Blank (World, GN2 Rev B) + + + ptblank2 + Point Blank 2 (GNB5/VER.A) + + + ptblank2ua + Point Blank 2 (US, GNB3/VER.A) + + + ptblank3 + Point Blank 3 (Asia, GNN2 Ver.A) + + + ptrmj + PT Reach Mahjong (Japan) + + + pturn + Parallel Turn + + + puchicar + Puchi Carat (Ver 2.02O 1997/10/29) + + + puchicarj + Puchi Carat (Ver 2.02J 1997/10/29) + + + puckman + Puck Man (Japan set 1) + + + puckmanb + Puck Man (bootleg set 1) + + + puckmanf + Puck Man (speedup hack) + + + puckmanh + Puck Man (bootleg set 2) + + + puckmod + Puck Man (Japan set 2) + + + puckpepl + Puck People + + + puckpkmn + Puckman Pockimon (set 1) + + + puckpkmna + Puckman Pockimon (set 2) + + + puckpkmnb + Puckman Pockimon (set 3) + + + pulirula + PuLiRuLa (World) + + + pulirulaj + PuLiRuLa (Japan) + + + pulltabs + Pull Tabs + + + pulsar + Pulsar + + + pulstar + Pulstar + + + punchita + Punch-Out!! (Italian bootleg) + + + punchout + Punch-Out!! + + + punchoutj + Punch-Out!! (Japan) + + + punchy + Punchy The Clown + + + punipic + The Punisher (bootleg with PIC16c57, set 1) + + + punipic2 + The Punisher (bootleg with PIC16c57, set 2) + + + punipic3 + The Punisher (bootleg with PIC16c57, set 3) + + + punisher + The Punisher (World 930422) + + + punisherbz + Biaofeng Zhanjing (Chinese bootleg of The Punisher) + + + punisherh + The Punisher (Hispanic 930422) + + + punisherj + The Punisher (Japan 930422) + + + punisheru + The Punisher (USA 930422) + + + punk + Punk! + + + punkshot + Punk Shot (US 4 Players) + + + punkshot2 + Punk Shot (US 2 Players) + + + punkshotj + Punk Shot (Japan 2 Players) + + + pururun + Pururun + + + pushman + Pushman (Korea, set 1) + + + pushmana + Pushman (Korea, set 2) + + + pushmans + Pushman (American Sammy license) + + + pushmant + Pushman (Top Tronic license) + + + pushover + Push Over (Summit Coin) + + + puyo + Puyo Puyo (World) + + + puyobl + Puyo Puyo (World, bootleg) + + + puyoda + Puyo Puyo Da! + + + puyofev + Puyo Puyo Fever (GDS-0031) + + + puyofevp + Puyo Puyo Fever (prototype ver 0.01) + + + puyoj + Puyo Puyo (Japan, Rev B) + + + puyoja + Puyo Puyo (Japan, Rev A) + + + puyopuy2 + Puyo Puyo 2 (Japan) + + + puyosun + Puyo Puyo Sun (J 961115 V0.001) + + + puzlbang + Puzzle Bang Bang (Korea, version 2.9 / 990108) + + + puzlbanga + Puzzle Bang Bang (Korea, version 2.8 / 990106) + + + puzlclub + Puzzle Club (Japan prototype) + + + puzldama + Taisen Puzzle-dama (ver JAA) + + + puzlstar + Puzzle Star (ver. 100MG) + + + puzzldpr + Puzzle De Pon! R! + + + puzzledp + Puzzle De Pon! + + + puzzlekg + Puzzle King (Dance & Puzzle) + + + puzzlet + Puzzlet (Japan) + + + puzzli + Puzzli + + + puzzli2 + Puzzli 2 (ver. 100) + + + puzzli2s + Puzzli 2 Super (ver. 200) + + + puzzloop + Puzz Loop (Europe, v0.94) + + + puzzloopa + Puzz Loop (Asia) + + + puzzloope + Puzz Loop (Europe, v0.93) + + + puzzloopj + Puzz Loop (Japan) + + + puzzloopk + Puzz Loop (Korea) + + + puzzloopu + Puzz Loop (USA) + + + puzznic + Puzznic (World) + + + puzznici + Puzznic (Italian bootleg) + + + puzznicj + Puzznic (Japan) + + + pwerplay + Power Play (Pinball) + + + pwheelsj + Power Wheels (Japan) + + + pwrgoal + Taito Power Goal (Ver 2.5O 1994/11/03) + + + pwrinst2 + Power Instinct 2 (US, Ver. 94/04/08) + + + pwrinst2j + Gouketsuji Ichizoku 2 (Japan, Ver. 94/04/08) + + + pwrkick + Power Kick (Japan) + + + pwrshovl + Power Shovel ni Norou!! - Power Shovel Simulator + + + py2k2 + Photo Y2K 2 + + + pyenaget + Pye-nage Taikai + + + pyramid + Pyramid (Dutch, Game Card 95-750-898) + + + pyros + Pyros (US) + + + pyson + Konami Pyson BIOS + + + pz_f4 + The Party Zone (F-4) + + + pz_l1 + The Party Zone (L-1) + + + pz_l2 + The Party Zone (L-2) + + + pz_l3 + The Party Zone (L-3) + + + pzlbowl + Puzzle De Bowling (Japan) + + + pzlbreak + Puzzle Break + + + pzlestar + Puzzle Star (Sang Ho Soft) + + + pzletime + Puzzle Time (prototype) + + + pzloop2 + Puzz Loop 2 (Euro 010302) + + + pzloop2j + Puzz Loop 2 (Japan 010226) + + + pzloop2jr1 + Puzz Loop 2 (Japan 010205) + + + qad + Quiz & Dragons: Capcom Quiz Game (USA 920701) + + + qadjr + Quiz & Dragons: Capcom Quiz Game (Japan Resale Ver. 940921) + + + qb3 + QB-3 (prototype) + + + qbert + Q*bert (US set 1) + + + qberta + Q*bert (US set 2) + + + qbertj + Q*bert (Japan) + + + qbertqub + Q*bert's Qubes + + + qberttst + Q*bert (early test version) + + + qbquest + Q*Bert's Quest + + + qbtrktst + Q*bert Board Input Test Rom + + + qc + Quarter Horse Classic + + + qcrayon + Quiz Crayon Shinchan (Japan) + + + qcrayon2 + Crayon Shinchan Orato Asobo (Japan) + + + qdrmfgp + Quiz Do Re Mi Fa Grand Prix (Japan) + + + qdrmfgp2 + Quiz Do Re Mi Fa Grand Prix 2 - Shin-Kyoku Nyuukadayo (Japan) + + + qgakumon + Quiz Gakumon no Susume (Japan ver. JA2 Type L) + + + qgh + Quiz Ghost Hunter (Japan, ROM Based) + + + qix + Qix (Rev 2) + + + qix2 + Qix II (Tournament) + + + qixa + Qix (set 2, smaller roms) + + + qixb + Qix (set 2, larger roms) + + + qixo + Qix (set 3, earlier) + + + qjinsei + Quiz Jinsei Gekijoh (Japan) + + + qmegamis + Quiz Ah Megamisama (JPN, USA, EXP, KOR, AUS) + + + qmhayaku + Quiz-Mahjong Hayaku Yatteyo! (Japan) + + + qndream + Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 960826) + + + qntoond + Quintoon (Dutch, Game Card 95-750-243) + + + qntoondo + Quintoon (Dutch, Game Card 95-750-136) + + + qos + A Question of Sport (set 1, 39-960-107) + + + qosa + A Question of Sport (set 2, 39-960-099) + + + qosb + A Question of Sport (set 3, 39-960-089) + + + qotn + Queen of the Nile (0200439V, NSW/ACT) + + + qrouka + Quiz Rouka Ni Tattenasai (Japan, ROM Based) + + + qsangoku + Quiz Sangokushi (Japan) + + + qsww + Quiz Syukudai wo Wasuremashita (Japan, Floppy Based, FD1094 317-0058-08b) + + + qtheater + Quiz Theater - 3tsu no Monogatari (Ver 2.3J 1994/11/10) + + + qtono1 + Quiz Tonosama no Yabou (Japan) + + + qtono2j + Quiz Tonosama no Yabou 2: Zenkoku-ban (Japan 950123) + + + qtorimon + Quiz Torimonochou (Japan) + + + quake + Quake Arcade Tournament (Release Beta 2) + + + quantum + Quantum (rev 2) + + + quantum1 + Quantum (rev 1) + + + quantump + Quantum (prototype) + + + quaquiz2 + Quadro Quiz II + + + quarterb + Quarterback (set 1) + + + quarterba + Quarterback (set 2) + + + quarterh + Quarter Horse (set 1, Pioneer PR-8210) + + + quarterha + Quarter Horse (set 2, Pioneer PR-8210) + + + quarterhb + Quarter Horse (set 3, Pioneer LD-V2000) + + + quartet + Quartet (Rev A, 8751 315-5194) + + + quartet2 + Quartet 2 (8751 317-0010) + + + quartet2a + Quartet 2 (unprotected) + + + quarteta + Quartet (8751 315-5194) + + + quarth + Quarth (Japan) + + + quasar + Quasar (set 1) + + + quasara + Quasar (set 2) + + + queen + Queen? + + + queenotg + Queen of the Games + + + quester + Quester (Japan) + + + questers + Quester Special Edition (Japan) + + + quickjac + Quick Jack + + + quicksil + Quicksilver + + + quintond + Quintoon (UK, Game Card 95-751-206, Datapak) + + + quintono + Quintoon (UK, Game Card 95-750-203) + + + quintoon + Quintoon (UK, Game Card 95-750-206) + + + quiz + Quiz (Revision 2) + + + quiz18k + Miyasu Nonki no Quiz 18-Kin + + + quiz211 + Quiz (Revision 2.11) + + + quiz365 + Quiz 365 (Japan) + + + quiz365t + Quiz 365 (Hong Kong & Taiwan) + + + quizard + Quizard 3.2 + + + quizchq + Quiz Channel Question (Ver 1.00) (Japan) + + + quizchql + Quiz Channel Question (Ver 1.23) (Taiwan?) + + + quizdai2 + Quiz Meitantei Neo & Geo - Quiz Daisousa Sen part 2 (NGM-042)(NGH-042) + + + quizdais + Quiz Daisousa Sen - The Last Count Down (NGM-023)(NGH-023) + + + quizdaisk + Quiz Daisousa Sen - The Last Count Down (Korean release) + + + quizdna + Quiz DNA no Hanran (Japan) + + + quizf1 + Quiz F1 1-2 Finish (Japan) + + + quizhq + Quiz H.Q. (Japan) + + + quizhuhu + Moriguchi Hiroko no Quiz de Hyuu!Hyuu! (Ver 2.2J 1995/05/25) + + + quizkof + Quiz King of Fighters (SAM-080)(SAH-080) + + + quizkofk + Quiz King of Fighters (Korean release) + + + quizmeku + Quiz Mekurumeku Story (Japan, ROM Based) + + + quizmoon + Quiz Bisyoujo Senshi Sailor Moon - Chiryoku Tairyoku Toki no Un + + + quizmstr + Quizmaster (German) + + + quizo + Quiz Olympic (set 1) + + + quizoa + Quiz Olympic (set 2) + + + quizpani + Quiz Panicuru Fantasy + + + quizpun + Quiz Punch + + + quizpun2 + Quiz Punch 2 + + + quizqgd + Quiz Keitai Q mode (GDL-0017) + + + quizrd12 + Quizard 1.2 + + + quizrd17 + Quizard 1.7 + + + quizrd18 + Quizard 1.8 + + + quizrd22 + Quizard 2.2 + + + quizrd23 + Quizard 2.3 + + + quizrd34 + Quizard 3.4 + + + quizrr40 + Quizard Rainbow 4.0 + + + quizrr41 + Quizard Rainbow 4.1 + + + quizrr42 + Quizard Rainbow 4.2 + + + quizshow + Quiz Show + + + quiztou + Nettou! Gekitou! Quiztou!! (Japan) + + + quiztvqq + Quiz TV Gassyuukoku Q&Q (Japan) + + + quizvadr + Quizvaders (39-360-078) + + + quizvid + Video Quiz + + + qwak + Qwak (prototype) + + + qzchikyu + Quiz Chikyu Bouei Gun (Japan) + + + qzkklgy2 + Quiz Kokology 2 + + + qzkklogy + Quiz Kokology + + + qzquest + Quiz Quest - Hime to Yuusha no Monogatari (Japan) + + + qzshowby + Quiz Sekai wa SHOW by shobai (Japan) + + + r2dtank + R2D Tank + + + r2dx_v33 + Raiden II / DX (newer V33 PCB) + + + raaspec + Spectrum I+ + + + rab_103 + Adventures of Rocky and Bullwinkle and Friends (1.03 Spain) + + + rab_130 + Adventures of Rocky and Bullwinkle and Friends (1.30) + + + rab_320 + Adventures of Rocky and Bullwinkle and Friends (3.20) + + + rabbit + Rabbit (Japan) + + + rabbitpk + Rabbit Poker (Arizona Poker v1.1?) + + + rabiolep + Rabio Lepus (Japan) + + + raccoon + Raccoon World + + + racedriv + Race Drivin' (cockpit, rev 5) + + + racedriv1 + Race Drivin' (cockpit, rev 1) + + + racedriv2 + Race Drivin' (cockpit, rev 2) + + + racedriv3 + Race Drivin' (cockpit, rev 3) + + + racedriv4 + Race Drivin' (cockpit, rev 4) + + + racedrivb + Race Drivin' (cockpit, British, rev 5) + + + racedrivb1 + Race Drivin' (cockpit, British, rev 1) + + + racedrivb4 + Race Drivin' (cockpit, British, rev 4) + + + racedrivc + Race Drivin' (compact, rev 5) + + + racedrivc1 + Race Drivin' (compact, rev 1) + + + racedrivc2 + Race Drivin' (compact, rev 2) + + + racedrivc4 + Race Drivin' (compact, rev 4) + + + racedrivcb + Race Drivin' (compact, British, rev 5) + + + racedrivcb4 + Race Drivin' (compact, British, rev 4) + + + racedrivcg + Race Drivin' (compact, German, rev 5) + + + racedrivcg4 + Race Drivin' (compact, German, rev 4) + + + racedrivg + Race Drivin' (cockpit, German, rev 5) + + + racedrivg1 + Race Drivin' (cockpit, German, rev 2) + + + racedrivg4 + Race Drivin' (cockpit, German, rev 4) + + + racedrivpan + Race Drivin' Panorama (prototype, rev 2.1) + + + raceon + Race On! (RO2 Ver. A) + + + rachero + Racing Hero (FD1094 317-0144) + + + racinfrc + Racin' Force (ver EAC) + + + racinfrcu + Racin' Force (ver UAB) + + + racingb + Racing Beat (World) + + + racingbj + Racing Beat (Japan) + + + racingj + Racing Jam (JAC) + + + racingj2 + Racing Jam: Chapter 2 (EAE) + + + racingj2j + Racing Jam: Chapter 2 (JAE) + + + racjamdx + Racing Jam DX + + + rackempp + Rack 'em Up! (Pinball) + + + rackemup + Rack 'em Up (program code L) + + + racknrol + Rack + Roll + + + radarscp + Radar Scope + + + radarscp1 + Radar Scope (TRS01) + + + radarzon + Radar Zone + + + radarzon1 + Radar Zone (Rev.1) + + + radarzont + Radar Zone (Tuni) + + + radcl_g1 + Radical! (G-1) + + + radcl_l1 + Radical! (L-1) + + + radcl_p3 + Radical! (P-3) + + + radikalb + Radikal Bikers (Version 2.02) + + + radirgy + Radirgy (GDL-0032) + + + radirgya + Radirgy (Rev A) (GDL-0032A) + + + radirgyn + Radirgy Noa + + + radm + Rad Mobile (World) + + + radmu + Rad Mobile (US) + + + radr + Rad Rally (World) + + + radrad + Radical Radial + + + radrj + Rad Rally (Japan) + + + radru + Rad Rally (US) + + + raflesia + Rafflesia (315-5162) + + + ragnagrd + Ragnagard / Shin-Oh-Ken + + + ragtime + The Great Ragtime Show (Japan v1.5, 92.12.07) + + + ragtimea + The Great Ragtime Show (Japan v1.3, 92.11.26) + + + raiden + Raiden (set 1) + + + raiden2 + Raiden II (set 1, US Fabtek) + + + raiden2a + Raiden II (set 2, Hong Kong, Metrotainment) + + + raiden2b + Raiden II (set 3, Japan) + + + raiden2c + Raiden II (set 4, Italy) + + + raiden2d + Raiden II (set 5, Easy Version) + + + raiden2e + Raiden II (set 6, Easy Version) + + + raiden2f + Raiden II (set 7, US Fabtek, Easy Version) + + + raiden2g + Raiden II (set 8, US Fabtek, Easy Version) + + + raiden2nl + Raiden II (set 9, The Netherlands) + + + raiden3 + Raiden III (v2.01J) + + + raiden4 + Raiden IV (v1.00J) + + + raidena + Raiden (set 2) + + + raidenb + Raiden (set 3) + + + raidendx + Raiden DX (UK) + + + raidendxa1 + Raiden DX (Hong Kong, set 1) + + + raidendxa2 + Raiden DX (Hong Kong, set 2) + + + raidendxg + Raiden DX (Germany) + + + raidendxj + Raiden DX (Japan) + + + raidendxnl + Raiden DX (The Netherlands) + + + raidendxu + Raiden DX (US) + + + raidenk + Raiden (Korea) + + + raident + Raiden (Taiwan) + + + raidenu + Raiden (US set 1) + + + raidenua + Raiden (US set 2) + + + raiders + Raiders + + + raiders5 + Raiders5 + + + raiders5t + Raiders5 (Japan) + + + raidersr3 + Raiders (Rev.3) + + + raiga + Raiga - Strato Fighter (Japan) + + + raimais + Raimais (World) + + + raimaisj + Raimais (Japan) + + + raimaisjo + Raimais (Japan, first revision) + + + raimfire + Ready...Aim...Fire! + + + raizpin + Raizin Ping Pong + + + rally + Rally + + + rallybik + Rally Bike / Dash Yarou + + + rallys + Rallys (bootleg of Spectar, set 1) + + + rallysa + Rallys (bootleg of Spectar, set 2) + + + rallyx + Rally X (32k Ver.?) + + + rallyxa + Rally X + + + rallyxm + Rally X (Midway) + + + rallyxmr + Rally X (Model Racing bootleg) + + + rambo3 + Rambo III (Europe) + + + rambo3p + Rambo III (Europe, Proto?) + + + rambo3u + Rambo III (US) + + + rampage + Rampage (Rev 3, 8/27/86) + + + rampage2 + Rampage (Rev 2, 8/4/86) + + + rampart + Rampart (Trackball) + + + rampart2p + Rampart (Joystick) + + + rampartj + Rampart (Japan, Joystick) + + + ramtek3 + unknown Ramtek Game (Maybe Hockey?) [TTL] + + + rangrmsn + Ranger Mission + + + raphero + Rapid Hero + + + rapidfip + Rapid Fire + + + rapidfir + Rapid Fire v1.1 (Build 239) + + + rapidfira + Rapid Fire v1.1 (Build 238) + + + rapidfire + Rapid Fire v1.0 (Build 236) + + + rapidrvr + Rapid River (RD3 Ver. C) + + + rapidrvrp + Rapid River (prototype) + + + rapidrvrv2c + Rapid River (RD2 Ver. C) + + + rasce + Ra Sceptor (Russia) + + + rascot + Royal Ascot (Japan, terminal?) + + + rastan + Rastan (World Rev 1) + + + rastana + Rastan (World) + + + rastanu + Rastan (US Rev 1) + + + rastanua + Rastan (US) + + + rastanub + Rastan (US, Earlier code base) + + + rastsag2 + Rastan Saga 2 (Japan) + + + rastsaga + Rastan Saga (Japan Rev 1) + + + rastsagaa + Rastan Saga (Japan) + + + ratrc_l1 + Rat Race (L-1) + + + raven + Raven + + + raveracj + Rave Racer (Rev. RV1 Ver.B, Japan) + + + raveracja + Rave Racer (Rev. RV1, Japan) + + + raveracw + Rave Racer (Rev. RV2, World) + + + raycris + Ray Crisis (V2.03J) + + + rayforce + Ray Force (Ver 2.3A 1994/01/20) + + + rayforcej + Ray Force (Ver 2.3J 1994/01/20) + + + raystorm + Ray Storm (Ver 2.06A) + + + raystormj + Ray Storm (Ver 2.05J) + + + raystormo + Ray Storm (Ver 2.05O) + + + raystormu + Ray Storm (Ver 2.05A) + + + razmataz + Razzmatazz + + + rbff1 + Real Bout Fatal Fury / Real Bout Garou Densetsu (NGM-095)(NGH-095) + + + rbff1a + Real Bout Fatal Fury / Real Bout Garou Densetsu (bug fix revision) + + + rbff2 + Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGM-2400) + + + rbff2h + Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGH-2400) + + + rbff2k + Real Bout Fatal Fury 2 - The Newcomers (Korean release) + + + rbffspec + Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special + + + rbffspeck + Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special (Korean release) + + + rbibb + Vs. Atari R.B.I. Baseball (set 1) + + + rbibba + Vs. Atari R.B.I. Baseball (set 2) + + + rbisland + Rainbow Islands (new version) + + + rbislande + Rainbow Islands (Extra) + + + rbislando + Rainbow Islands (old version) + + + rblaster + Road Blaster (Data East LD) + + + rbmk + Real Battle Mahjong King + + + rbtapper + Tapper (Root Beer) + + + rcasino + Royal Casino (D-2608208A1-2) + + + rcasino1 + Royal Casino (D-2608208A1-1, Larger Board) + + + rcasinoo + Royal Casino (D-2608208A1-1, Smaller Board) + + + rcdego + RC De Go (V2.03J) + + + rcdino4 + unknown encrypted Royal Card (Dino4 HW) + + + rchase + Rail Chase (World) + + + rchase2 + Rail Chase 2 (Revision A) + + + rchasej + Rail Chase (Japan) + + + rcirulet + Ruleta RCI (6-players, Spanish) + + + rclimb + Rock Climber (040815 World) + + + rclimb_3 + Rock Climber (040827 World) + + + rclimb_3a + Rock Climber (bootleg, 040827, backdoor) + + + rclimb_3b + Rock Climber (bootleg, 040827, new service menu) + + + rclimb_3c + Rock Climber (bootleg, 040827, VIDEO GAME-1 SK01) + + + rclimb_3d + Rock Climber (bootleg, 040827, LOTTOGAME (I)) + + + rclimb_3e + Rock Climber (bootleg, 040827, LOTOS SK01) + + + rclimb_4 + Rock Climber (070322 Russia) + + + rclimb_5 + Rock Climber (070621 Russia) + + + rclimb_7 + Rock Climber (090716 Entertainment) + + + rcorsair + Red Corsair + + + rctnew + Roller Coaster Tycoon (ARM7 Sound Board) + + + rctycn + Roller Coaster Tycoon (7.02) + + + rctycn_400 + Roller Coaster Tycoon (4.00) + + + rctycn_600 + Roller Coaster Tycoon (6.00) + + + rctycn_701 + Roller Coaster Tycoon (7.01) + + + rctycnf + Roller Coaster Tycoon (7.02 France) + + + rctycnf_400 + Roller Coaster Tycoon (4.00 France) + + + rctycnf_600 + Roller Coaster Tycoon (6.00 France) + + + rctycnf_701 + Roller Coaster Tycoon (7.01 France) + + + rctycng + Roller Coaster Tycoon (7.02 Germany) + + + rctycng_400 + Roller Coaster Tycoon (4.00 Germany) + + + rctycng_701 + Roller Coaster Tycoon (7.01 Germany) + + + rctycni + Roller Coaster Tycoon (7.02 Italy) + + + rctycni_400 + Roller Coaster Tycoon (4.00 Italy) + + + rctycni_600 + Roller Coaster Tycoon (6.00 Italy) + + + rctycni_701 + Roller Coaster Tycoon (7.01 Italy) + + + rctycnl + Roller Coaster Tycoon (7.02 Spain) + + + rctycnl_400 + Roller Coaster Tycoon (4.00 Spain) + + + rctycnl_600 + Roller Coaster Tycoon (6.00 Spain) + + + rctycnl_701 + Roller Coaster Tycoon (7.01 Spain) + + + rdaction + Rad Action / NinjaKun Ashura no Shou + + + rdft + Raiden Fighters (Japan set 1) + + + rdft2 + Raiden Fighters 2 - Operation Hell Dive (Germany) + + + rdft22kc + Raiden Fighters 2 - Operation Hell Dive 2000 (China, SYS386I) + + + rdft2a + Raiden Fighters 2 - Operation Hell Dive (Hong Kong) + + + rdft2a2 + Raiden Fighters 2 - Operation Hell Dive (Korea) + + + rdft2j + Raiden Fighters 2 - Operation Hell Dive (Japan set 1) + + + rdft2j2 + Raiden Fighters 2 - Operation Hell Dive (Japan set 2) + + + rdft2t + Raiden Fighters 2 - Operation Hell Dive (Taiwan) + + + rdft2u + Raiden Fighters 2 - Operation Hell Dive (US) + + + rdft2us + Raiden Fighters 2 - Operation Hell Dive (US, single board) + + + rdfta + Raiden Fighters (Austria) + + + rdftadi + Raiden Fighters (Korea) + + + rdftam + Raiden Fighters (Hong Kong) + + + rdftau + Raiden Fighters (Australia) + + + rdftit + Raiden Fighters (Italy) + + + rdftj + Raiden Fighters (Japan set 2) + + + rdfts + Raiden Fighters (Taiwan, single board) + + + rdftu + Raiden Fighters (US) + + + rdkng_l1 + Road Kings (L-1) + + + rdkng_l2 + Road Kings (L-2) + + + rdkng_l3 + Road Kings (L-3) + + + rdkng_l4 + Road Kings (L-4) + + + re800ea + Ruleta RE-800 (earlier, no attract) + + + re800v1 + Ruleta RE-800 (v1.0) + + + re800v3 + Ruleta RE-800 (v3.0) + + + re900 + Ruleta RE-900 + + + reactor + Reactor + + + reaktor + Reaktor (Track & Field conversion) + + + real + Real + + + realbrk + Billiard Academy Real Break (Europe) + + + realbrkj + Billiard Academy Real Break (Japan) + + + realbrkk + Billiard Academy Real Break (Korea) + + + realbrod + The Real Broadway (9131-20-00 R0A) + + + realpunc + Real Puncher + + + rebus + Rebus + + + recalh + Recalhorn (Ver 1.42J 1994/5/11) (Prototype) + + + record + Record (Version 1) + + + recordbr + Recordbreaker (World) + + + redalert + Red Alert + + + redbaron + Red Baron (Revised Hardware) + + + redbarona + Red Baron + + + redclash + Red Clash (set 1) + + + redclasha + Red Clash (set 2) + + + redclashk + Red Clash (Kaneko) + + + redearth + Red Earth (Euro 961121) + + + redearthr1 + Red Earth (Euro 961023) + + + redfoxwp2 + Red Fox War Planes II (China, set 1) + + + redfoxwp2a + Red Fox War Planes II (China, set 2) + + + redhawk + Red Hawk (US) + + + redhawkb + Red Hawk (bootleg) + + + redhawke + Red Hawk (Excellent Co., Ltd) + + + redhawki + Red Hawk (Italy) + + + redlin2p + Redline Racer (2 players) + + + redrobin + Red Robin + + + redufo + Defend the Terra Attack on the Red UFO + + + redufob + Defend the Terra Attack on the Red UFO (bootleg) + + + reelemin + Reel 'Em In (Russia) + + + reelfun + Reel Fun (Version 7.03) + + + reelfun1 + Reel Fun (Version 7.01) + + + reelquak + Reel'N Quake! (Ver. 1.05) + + + reelrock + Reelin-n-Rockin (0100779V, Local) + + + regulus + Regulus (315-5033, Rev A.) + + + reguluso + Regulus (315-5033) + + + regulusu + Regulus (not encrypted) + + + reikaids + Reikai Doushi (Japan) + + + relief + Relief Pitcher (set 1, 07 Jun 1992 / 28 May 1992) + + + relief2 + Relief Pitcher (set 2, 26 Apr 1992 / 08 Apr 1992) + + + relief3 + Relief Pitcher (set 3, 10 Apr 1992 / 08 Apr 1992) + + + renaiclb + Mahjong Ren-ai Club (Japan) + + + renegade + Renegade (US) + + + renju + Renju Kizoku + + + repulse + Repulse + + + rescraid + Rescue Raider (5/11/87) (non-cartridge) + + + rescraida + Rescue Raider (stand-alone) + + + rescu911 + Rescue 911 (rev.1) + + + rescue + Rescue + + + rescueb + Rescue (bootleg) + + + resdnt + Resident (040415 World) + + + resdnt_2 + Resident (040513 World) + + + resdnt_2a + Resident (bootleg, 040513, backdoor) + + + resdnt_2b + Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 1) + + + resdnt_2c + Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 2) + + + resdnt_2d + Resident (bootleg, 040513, VIDEO GAME-1 SE01 set 3) + + + resdnt_2e + Resident (bootleg, 040513, LOTTOGAME (I)) + + + resdnt_2f + Resident (bootleg, 040513, LOTO PROGRAM V-RS2) + + + resdnt_2g + Resident (bootleg, 040513, LOTOS SE01) + + + resdnt_3 + Resident (070222 Russia) + + + resdnt_6 + Resident (100311 World) + + + resdnt_8 + Resident (100311 Entertainment) + + + resdnt_9 + Resident (100316 Russia) + + + retofinv + Return of the Invaders + + + retofinv1 + Return of the Invaders (bootleg set 1) + + + retofinv2 + Return of the Invaders (bootleg set 2) + + + revenger + Revenger + + + revx + Revolution X (Rev. 1.0 6/16/94) + + + rezon + Rezon + + + rezont + Rezon (Taito) + + + rf2 + Konami RF2 - Red Fighter + + + rfjet + Raiden Fighters Jet (Germany) + + + rfjet2kc + Raiden Fighters Jet 2000 (China, SYS386I) + + + rfjeta + Raiden Fighters Jet (Korea) + + + rfjetj + Raiden Fighters Jet (Japan) + + + rfjets + Raiden Fighters Jet (US, single board) + + + rfjetsa + Raiden Fighters Jet (US, single board, test version?) + + + rfjett + Raiden Fighters Jet (Taiwan) + + + rfjetu + Raiden Fighters Jet (US) + + + rflshdlx + Royal Flush Deluxe + + + rfmpb + Pinball 2000: Revenge From Mars (rev. 1) + + + rfmpbr2 + Pinball 2000: Revenge From Mars (rev. 2) + + + rgum + Royal Gum (Italy) + + + ribbit + Ribbit! + + + ridgera2 + Ridge Racer 2 (Rev. RRS2, World) + + + ridgera2j + Ridge Racer 2 (Rev. RRS1 Ver.B, Japan) + + + ridgera2ja + Ridge Racer 2 (Rev. RRS1, Japan) + + + ridgerac + Ridge Racer (Rev. RR3, World) + + + ridgerac3 + Ridge Racer (Rev. RR2 Ver.B, World, 3-screen?) + + + ridgeracb + Ridge Racer (Rev. RR2, World) + + + ridgeracf + Ridge Racer Full Scale (World) + + + ridgeracj + Ridge Racer (Rev. RR1, Japan) + + + ridhero + Riding Hero (NGM-006)(NGH-006) + + + ridheroh + Riding Hero (set 2) + + + ridingf + Riding Fight (Ver 1.0O) + + + ridingfj + Riding Fight (Ver 1.0J) + + + ridingfu + Riding Fight (Ver 1.0A) + + + ridleofp + Riddle of Pythagoras (Japan) + + + rimrockn + Rim Rockin' Basketball (V2.2) + + + rimrockn12 + Rim Rockin' Basketball (V1.2) + + + rimrockn16 + Rim Rockin' Basketball (V1.6) + + + rimrockn20 + Rim Rockin' Basketball (V2.0) + + + ringdest + Ring of Destruction: Slammasters II (Euro 940902) + + + ringdesta + Ring of Destruction: Slammasters II (Asia 940831) + + + ringdstd + Ring of Destruction: Slammasters II (Euro 940902 Phoenix Edition) (bootleg) + + + ringfgt + Ring Fighter (set 1) + + + ringfgt2 + Ring Fighter (set 2) + + + ringking + Ring King (US set 1) + + + ringking2 + Ring King (US set 2) + + + ringking3 + Ring King (US set 3) + + + ringkingw + Ring King (US, Wood Place Inc.) + + + ringohja + Ring no Ohja (Japan 2 Players ver. N) + + + ringout + Ring Out 4x4 + + + ringrage + Ring Rage (Ver 2.3O 1992/08/09) + + + ringragej + Ring Rage (Ver 2.3J 1992/08/09) + + + ringrageu + Ring Rage (Ver 2.3A 1992/08/09) + + + rio + Rio + + + riot + Riot + + + riotcity + Riot City (Japan) + + + rip300 + Ripley's Believe It or Not! (3.00) + + + rip301 + Ripley's Believe It or Not! (3.01) + + + rip302 + Ripley's Believe It or Not! (3.02) + + + rip310 + Ripley's Believe It or Not! (3.10) + + + ripcord + Rip Cord + + + ripf300 + Ripley's Believe It or Not! (3.00 France) + + + ripf301 + Ripley's Believe It or Not! (3.01 France) + + + ripf302 + Ripley's Believe It or Not! (3.02 France) + + + ripf310 + Ripley's Believe It or Not! (3.10 France) + + + ripg300 + Ripley's Believe It or Not! (3.00 Germany) + + + ripg301 + Ripley's Believe It or Not! (3.01 Germany) + + + ripg302 + Ripley's Believe It or Not! (3.02 Germany) + + + ripg310 + Ripley's Believe It or Not! (3.10 Germany) + + + ripi300 + Ripley's Believe It or Not! (3.00 Italy) + + + ripi301 + Ripley's Believe It or Not! (3.01 Italy) + + + ripi302 + Ripley's Believe It or Not! (3.02 Italy) + + + ripi310 + Ripley's Believe It or Not! (3.10 Italy) + + + ripl300 + Ripley's Believe It or Not! (3.00 Spain) + + + ripl301 + Ripley's Believe It or Not! (3.01 Spain) + + + ripl302 + Ripley's Believe It or Not! (3.02 Spain) + + + ripl310 + Ripley's Believe It or Not! (3.10 Spain) + + + ripleys + Ripley's Believe It or Not! (3.20) + + + ripleysf + Ripley's Believe It or Not! (3.20 France) + + + ripleysg + Ripley's Believe It or Not! (3.20 Germany) + + + ripleysi + Ripley's Believe It or Not! (3.20 Italy) + + + ripleysl + Ripley's Believe It or Not! (3.20 Spain) + + + ripoff + Rip Off + + + ripribit + Ripper Ribbit (Version 2.8.4) + + + riskchal + Risky Challenge + + + riviera + Riviera Hi-Score (2131-08, U5-4A) + + + rivieraa + Riviera Hi-Score (2131-08, U5-4) + + + rivierab + Riviera Hi-Score (2131-08, U5-2D) + + + rjammer + Roller Jammer + + + rltennis + Reality Tennis + + + rmancp2j + Rockman: The Power Battle (CPS2, Japan 950922) + + + rmgoldyh + Real Mahjong Gold Yumehai / Super Real Mahjong GOLD part.2 [BET] (Japan) + + + rmhaihai + Real Mahjong Haihai (Japan) + + + rmhaihib + Real Mahjong Haihai [BET] (Japan) + + + rmhaijin + Real Mahjong Haihai Jinji Idou Hen (Japan) + + + rmhaisei + Real Mahjong Haihai Seichouhen (Japan) + + + rmpgwt + Rampage: World Tour (rev 1.3) + + + rmpgwt11 + Rampage: World Tour (rev 1.1) + + + roadblst + Road Blasters (upright, rev 4) + + + roadblst1 + Road Blasters (upright, rev 1) + + + roadblst2 + Road Blasters (upright, rev 2) + + + roadblst3 + Road Blasters (upright, rev 3) + + + roadblstc + Road Blasters (cockpit, rev 2) + + + roadblstc1 + Road Blasters (cockpit, rev 1) + + + roadblstcg + Road Blasters (cockpit, German, rev 1) + + + roadblstg + Road Blasters (upright, German, rev 3) + + + roadblstg1 + Road Blasters (upright, German, rev 1) + + + roadblstg2 + Road Blasters (upright, German, rev 2) + + + roadburn + Road Burners + + + roadedge + Roads Edge / Round Trip (rev.B) + + + roadf + Road Fighter (set 1) + + + roadf2 + Road Fighter (set 2) + + + roadriot + Road Riot 4WD (set 1, 13 Nov 1991) + + + roadrioto + Road Riot 4WD (set 2, 04 Jun 1991) + + + roadrunm + Road Runner (Midway) + + + roadrunn + Road Runner (rev 2) + + + roadrunn1 + Road Runner (rev 1) + + + roadrunn2 + Road Runner (rev 1+) + + + roadrunr + Road Runner + + + robadv + Robin's Adventure (Version 1.7E Dual) + + + robadv2 + Robin's Adventure 2 (Version 1.7E Dual) + + + robadv2c1 + Robin's Adventure 2 (Version 1.7R, set 1) + + + robadv2c2 + Robin's Adventure 2 (Version 1.7LT, set 1) + + + robadv2c3 + Robin's Adventure 2 (Version 1.7SH, set 1) + + + robadv2d1 + Robin's Adventure 2 (Version 1.7R, set 2) + + + robadv2d2 + Robin's Adventure 2 (Version 1.7LT, set 2) + + + robadv2d3 + Robin's Adventure 2 (Version 1.7SH, set 2) + + + robadv2o + Robin's Adventure 2 (Version 1.5SH) + + + robadv2o2 + Robin's Adventure 2 (Version 1.5) + + + robadv2v1 + Robin's Adventure 2 (Version 1.7R Dual) + + + robadv2v2 + Robin's Adventure 2 (Version 1.7LT Dual) + + + robadv2v3 + Robin's Adventure 2 (Version 1.7SH Dual) + + + robadvc1 + Robin's Adventure (Version 1.7R, set 1) + + + robadvd1 + Robin's Adventure (Version 1.7R, set 2) + + + robadvo + Robin's Adventure (Version 1.5) + + + robadvv1 + Robin's Adventure (Version 1.7R Dual) + + + robby + The Adventures of Robby Roto! + + + robo_a34 + Robocop (3.4) + + + roboarmy + Robo Army + + + robocop + Robocop (World revision 4) + + + robocop2 + Robocop 2 (Euro/Asia v0.10) + + + robocop2j + Robocop 2 (Japan v0.11) + + + robocop2u + Robocop 2 (US v0.05) + + + robocopb + Robocop (World bootleg) + + + robocopj + Robocop (Japan) + + + robocopu + Robocop (US revision 1) + + + robocopu0 + Robocop (US revision 0) + + + robocopw + Robocop (World revision 3) + + + robokid + Atomic Robo-kid + + + robokidj + Atomic Robo-kid (Japan, set 1) + + + robokidj2 + Atomic Robo-kid (Japan, set 2) + + + robot + Robot (Zaccaria) + + + robotbwl + Robot Bowl + + + robotf + Robot (Zaccaria, French speech) + + + robotg + Robot (Zaccaria, German speech) + + + roboti + Robot (Zaccaria, Italian speech) + + + robotron + Robotron: 2084 (Solid Blue label) + + + robotronyo + Robotron: 2084 (Yellow/Orange label) + + + robowars + Robo-War + + + robowres + Robo Wres 2001 + + + robowresb + Robo Wres 2001 (bootleg) + + + rock + Rock + + + rock2500 + Rock 2500 + + + rock_enc + Rock Encore + + + rockclim + Rock Climber + + + rockduck + Rock Duck (prototype?) + + + rockman2j + Rockman 2: The Power Fighters (Japan 960708) + + + rockmanj + Rockman: The Power Battle (CPS1, Japan 950922) + + + rockn + Rock'n Tread (Japan) + + + rockn2 + Rock'n Tread 2 (Japan) + + + rockn3 + Rock'n 3 (Japan) + + + rockn4 + Rock'n 4 (Japan, prototype) + + + rockna + Rock'n Tread (Japan, alternate) + + + rocknms + Rock'n MegaSession (Japan) + + + rockrage + Rock'n Rage (World) + + + rockragea + Rock'n Rage (prototype?) + + + rockragej + Koi no Hotrock (Japan) + + + rocktris + Rock Tris + + + rocktrv2 + MTV Rock-N-Roll Trivia (Part 2) + + + rocky + Rocky + + + rocnrope + Roc'n Rope + + + rocnropek + Roc'n Rope (Kosuka) + + + rodland + Rod-Land (World) + + + rodlandj + Rod-Land (Japan) + + + rodlandjb + Rod-Land (Japan bootleg) + + + rohga + Rohga Armor Force (Asia/Europe v5.0) + + + rohga1 + Rohga Armor Force (Asia/Europe v3.0 set 1) + + + rohga2 + Rohga Armor Force (Asia/Europe v3.0 set 2) + + + rohgah + Rohga Armor Force (Hong Kong v3.0) + + + rohgau + Rohga Armor Force (US v1.0) + + + roishtar + The Return of Ishtar + + + roldfrog + The Return of Lady Frog (set 1) + + + roldfroga + The Return of Lady Frog (set 2) + + + roldisco + Roller Disco + + + rollace + Roller Aces (set 1) + + + rollace2 + Roller Aces (set 2) + + + rollerg + Rollergames (US) + + + rollergj + Rollergames (Japan) + + + rollfr_2 + Roll Fruit (040318) + + + rollfr_3 + Roll Fruit (080327) + + + rollfr_4 + Roll Fruit (080331) + + + rollingc + Rolling Crash / Moon Base + + + rollr_e1 + Rollergames (PU-1) + + + rollr_ex + Rollergames (EXPERIMENTAL) + + + rollr_g3 + Rollergames (LG-3) Germany + + + rollr_l2 + Rollergames (L-2) + + + rollr_l3 + Rollergames (LU-3) Europe + + + rollr_p2 + Rollergames (PA-2 / PA-1 Sound) + + + rollston + Rolling Stones + + + romanl + Roman Legions (Konami Endeavour) + + + rompers + Rompers (Japan, new version (Rev B)) + + + romperso + Rompers (Japan, old version) + + + rongrong + Puzzle Game Rong Rong (Europe) + + + rongrongg + Puzzle Game Rong Rong (Germany) + + + rongrongj + Puzzle Game Rong Rong (Japan) + + + ronjan + Ron Jan (Super) + + + ropeman + Ropeman (bootleg of Roc'n Rope) + + + rotaryf + Rotary Fighter + + + rotation + Rotation VIII + + + rotd + Rage of the Dragons (NGM-264?) + + + rotr + Rise of the Robots (prototype) + + + roughrac + Rough Racer (Japan, Floppy Based, FD1094 317-0058-06b) + + + rougien + Rougien + + + roul + Super Lucky Roulette + + + roundup + Round-Up + + + roundup5 + Round Up 5 - Super Delta Force + + + route16 + Route 16 (set 1) + + + route16a + Route 16 (set 2) + + + route16b + Route 16 (bootleg) + + + routex + Route X (bootleg) + + + royal + Royal (Pool 10 hack) + + + royalcdfr + Royal Card (French) + + + royalcrd + Royal Card (Austrian, set 1) + + + royalcrda + Royal Card (Austrian, set 2) + + + royalcrdb + Royal Card (Austrian/Polish, set 3) + + + royalcrdc + Royal Card (Austrian, set 4) + + + royalcrdd + Royal Card (Austrian, set 5) + + + royalcrde + Royal Card (Austrian, set 6) + + + royalcrdf + Royal Card (Slovak, encrypted) + + + royalcrdg + Royal Card (Austrian, set 7, CMC C1030 HW) + + + royalcrdp + Royal Card v2.0 Professional + + + royalcrdt + Royal Card (TAB original) + + + royale + Royale (set 1) + + + royalea + Royale (set 2) + + + royalmah + Royal Mahjong (Falcon bootleg, v1.01) + + + royalmj + Royal Mahjong (Japan, v1.13) + + + royalngt + Royal Night [BET] (Japan 840220 RN 2-00) + + + royalqn + Royal Queen [BET] (Japan 841010 RQ 0-07) + + + royclark + Roy Clark - The Entertainer + + + roylcrdn + Royal Card (Nichibutsu) + + + roypok96 + Royal Poker '96 (set 1) + + + roypok96a + Royal Poker '96 (set 2) + + + roypok96b + Royal Poker '96 (set 3) + + + rpatrol + River Patrol (Orca) + + + rpatrolb + River Patrol (bootleg) + + + rpunch + Rabbit Punch (US) + + + rranger + Rough Ranger (v2.0) + + + rrangerb + Rough Ranger (v2.0, bootleg) + + + rrreveng + Road Riot's Revenge (prototype, Sep 06, 1994) + + + rrrevenga + Road Riot's Revenge (prototype, Jan 27, 1994, set 1) + + + rrrevengb + Road Riot's Revenge (prototype, Jan 27, 1994, set 2) + + + rrvac + Ridge Racer V Arcade Battle (RRV3 Ver. A) + + + rs_l6 + Red and Ted's Road Show (L-6) + + + rs_la4 + Red and Ted's Road Show (La-4) + + + rs_la5 + Red and Ted's Road Show (La-5) + + + rs_lx2 + Red and Ted's Road Show (Lx-2) + + + rs_lx3 + Red and Ted's Road Show (Lx-3) + + + rs_lx4 + Red and Ted's Road Show (Lx-4) + + + rs_lx5 + Red and Ted's Road Show (Lx-5) + + + rsgun + Radiant Silvergun (JUET 980523 V1.000) + + + rshark + R-Shark + + + rthun2 + Rolling Thunder 2 + + + rthun2j + Rolling Thunder 2 (Japan) + + + rthunder + Rolling Thunder (rev 3) + + + rthunder1 + Rolling Thunder (rev 1) + + + rthunder2 + Rolling Thunder (rev 2) + + + rtriv + Romar Triv + + + rtype + R-Type (World) + + + rtype2 + R-Type II + + + rtype2j + R-Type II (Japan) + + + rtype2jc + R-Type II (Japan, revision C) + + + rtypeb + R-Type (World bootleg) + + + rtypej + R-Type (Japan) + + + rtypejp + R-Type (Japan prototype) + + + rtypeleo + R-Type Leo (World) + + + rtypeleoj + R-Type Leo (Japan) + + + rtypeu + R-Type (US) + + + rugby + Rugby? (four roses hardware) + + + rugrats + Rug Rats + + + rumba + Rumba Lumber + + + rumblef + The Rumble Fish + + + rumblef2 + The Rumble Fish 2 + + + runark + Runark (Japan) + + + runaway + Runaway (prototype) + + + rundeep + Run Deep + + + rungun + Run and Gun (ver EAA 1993 10.8) + + + rungun2 + Run and Gun 2 (ver UAA) + + + runguna + Run and Gun (ver EAA 1993 10.4) + + + rungunu + Run and Gun (ver UAB 1993 10.12) + + + rungunua + Run and Gun (ver UBA 1993 10.8) + + + rushatck + Rush'n Attack (US) + + + rushcrsh + Rush & Crash (Japan) + + + rushhero + Rushing Heroes (ver UAB) + + + rvrbt_l3 + Riverboat Gambler (L-3) + + + rvschool + Rival Schools: United By Fate (Euro 971117) + + + rvschoola + Rival Schools: United By Fate (Asia 971117) + + + rvschoolu + Rival Schools: United By Fate (USA 971117) + + + rygar + Rygar (US set 1) + + + rygar2 + Rygar (US set 2) + + + rygar3 + Rygar (US set 3 Old Version) + + + rygarj + Argus no Senshi (Japan) + + + ryorioh + Gourmet Battle Quiz Ryohrioh CooKing (Japan) + + + ryouran + VS Mahjong Otome Ryouran + + + ryujin + Ryu Jin (Japan) + + + ryukendn + Ninja Ryukenden (Japan, set 1) + + + ryukendna + Ninja Ryukenden (Japan, set 2) + + + ryukobou + Mahjong Ryukobou (Japan, V030J) + + + ryukyu + RyuKyu (Japan, FD1094 317-5023) + + + ryuuha + Ryuuha [BET] (Japan 871027) + + + s1945 + Strikers 1945 (World) + + + s1945a + Strikers 1945 (Japan / World) + + + s1945bl + Strikers 1945 (Hong Kong, bootleg) + + + s1945ii + Strikers 1945 II + + + s1945iii + Strikers 1945 III (World) / Strikers 1999 (Japan) + + + s1945j + Strikers 1945 (Japan) + + + s1945jn + Strikers 1945 (Japan, unprotected) + + + s1945k + Strikers 1945 (Korea) + + + s1945p + Strikers 1945 Plus + + + s80tst + System 80 Test + + + sabotenb + Saboten Bombers (set 1) + + + sabotenba + Saboten Bombers (set 2) + + + sadari + Sadari + + + safari + Safari (set 1) + + + safaria + Safari (set 2, bootleg?) + + + safarir + Safari Rally (World) + + + safarirj + Safari Rally (Japan) + + + safemon + Safe Money (Konami Endeavour) + + + sagaia + Sagaia (dual screen) (World) + + + sailormn + Pretty Soldier Sailor Moon (Ver. 95/03/22B, Europe) + + + sailormnh + Pretty Soldier Sailor Moon (Ver. 95/03/22B, Hong Kong) + + + sailormnj + Pretty Soldier Sailor Moon (Ver. 95/03/22B, Japan) + + + sailormnk + Pretty Soldier Sailor Moon (Ver. 95/03/22B, Korea) + + + sailormno + Pretty Soldier Sailor Moon (Ver. 95/03/22, Europe) + + + sailormnoh + Pretty Soldier Sailor Moon (Ver. 95/03/22, Hong Kong) + + + sailormnoj + Pretty Soldier Sailor Moon (Ver. 95/03/22, Japan) + + + sailormnok + Pretty Soldier Sailor Moon (Ver. 95/03/22, Korea) + + + sailormnot + Pretty Soldier Sailor Moon (Ver. 95/03/22, Taiwan) + + + sailormnou + Pretty Soldier Sailor Moon (Ver. 95/03/22, USA) + + + sailormnt + Pretty Soldier Sailor Moon (Ver. 95/03/22B, Taiwan) + + + sailormnu + Pretty Soldier Sailor Moon (Ver. 95/03/22B, USA) + + + sailorwa + Mahjong Sailor Wars (Japan set 2) + + + sailorwr + Mahjong Sailor Wars-R [BET] (Japan) + + + sailorws + Mahjong Sailor Wars (Japan set 1) + + + saiyugou + Sai Yu Gou Ma Roku (Japan) + + + saiyugoub1 + Sai Yu Gou Ma Roku (Japan bootleg 1) + + + saiyugoub2 + Sai Yu Gou Ma Roku (Japan bootleg 2) + + + saiyukip + Slot Poker Saiyuki (Japan) + + + saklove + Ying Hua Lian 2.0 (China, Ver. 1.02) + + + salamand + Salamander (version D) + + + salamandj + Salamander (version J) + + + salarymc + Salary Man Champ (GCA18 VER. JAA) + + + salmankt + Salary Man Kintarou + + + salmndr2 + Salamander 2 (ver JAA) + + + salmndr2a + Salamander 2 (ver AAB) + + + saloon + Saloon (French, encrypted) + + + samba + Samba De Amigo (JPN) (Rev B) + + + samba2k + Samba de Amigo ver. 2000 + + + sambap + Samba De Amigo (prototype) + + + samesame + Same! Same! Same! (1P set) + + + samesame2 + Same! Same! Same! (2P set) + + + sammymdl + Sammy Medal Game System Bios + + + sams64 + Samurai Shodown 64 / Samurai Spirits 64 + + + sams64_2 + Samurai Shodown: Warrior's Rage / Samurai Spirits 2: Asura Zanmaden + + + samsh5sp + Samurai Shodown V Special / Samurai Spirits Zero Special (NGM-2720) + + + samsh5sph + Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720) (2nd release, less censored) + + + samsh5spho + Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720) (1st release, censored) + + + samsho + Samurai Shodown / Samurai Spirits (NGM-045) + + + samsho2 + Samurai Shodown II / Shin Samurai Spirits - Haohmaru jigokuhen (NGM-063)(NGH-063) + + + samsho2k + Saulabi Spirits / Jin Saulabi Tu Hon (Korean release of Samurai Shodown II) + + + samsho3 + Samurai Shodown III / Samurai Spirits - Zankurou Musouken (NGM-087) + + + samsho3h + Samurai Shodown III / Samurai Spirits - Zankurou Musouken (NGH-087) + + + samsho4 + Samurai Shodown IV - Amakusa's Revenge / Samurai Spirits - Amakusa Kourin (NGM-222)(NGH-222) + + + samsho4k + Pae Wang Jeon Seol / Legend of a Warrior (Korean censored Samurai Shodown IV) + + + samsho5 + Samurai Shodown V / Samurai Spirits Zero (NGM-2700) + + + samsho5b + Samurai Shodown V / Samurai Spirits Zero (bootleg) + + + samsho5h + Samurai Shodown V / Samurai Spirits Zero (NGH-2700) + + + samshoh + Samurai Shodown / Samurai Spirits (NGH-045) + + + samspsen + Samurai Spirits Sen (v1.00) + + + samsptk + Samurai Spirits Tenkaichi Kenkakuden + + + samurai + Samurai + + + samuraia + Samurai Aces (World) + + + sandor + Puzzle & Action: Sando-R (J 951114 V1.000) + + + sandscrp + Sand Scorpion + + + sandscrpa + Sand Scorpion (Earlier) + + + sandscrpb + Sand Scorpion (Chinese Title Screen, Revised Hardware) + + + sanjeon + DaeJeon! SanJeon SuJeon (AJTUE 990412 V1.000) + + + santam + Santa Maria (Russia) (Atronic) + + + sarge + Sarge + + + sarukani + Saru-Kani-Hamu-Zou (Japan) + + + sasissu + Taisen Tanto-R Sashissu!! (J 980216 V1.000) + + + sasuke + Sasuke vs. Commander + + + satansat + Satan of Saturn (set 1) + + + satansata + Satan of Saturn (set 2) + + + satansatind + Satan of Saturn (Inder S.A., bootleg) + + + saturn2 + Saturn 2 + + + saturnzi + Saturn + + + sauro + Sauro + + + saurop + Sauro (Philko license) + + + savagere + Savage Reign / Fu'un Mokushiroku - kakutou sousei + + + savanna + Savanna (Jungler bootleg) + + + savgbees + Savage Bees + + + savquest + Savage Quest + + + sb2003 + Super Bubble 2003 (World, Ver 1.0) + + + sb2003a + Super Bubble 2003 (Asia, Ver 1.0) + + + sbagman + Super Bagman + + + sbagmans + Super Bagman (Stern Electronics) + + + sbasebal + Super Champion Baseball (US) + + + sbasketb + Super Basketball (version I, encrypted) + + + sbaskete + Super Basketball (version E, encrypted) + + + sbasketg + Super Basketball (version G, encrypted) + + + sbasketh + Super Basketball (version H, unprotected) + + + sbbros + Super Buster Bros. (USA 901001) + + + sbdk + Super Bike (DK conversion) + + + sbishi + Super Bishi Bashi Championship (ver JAA, 2 Players) + + + sbishik + Super Bishi Bashi Championship (ver KAA, 3 Players) + + + sblast2b + Sonic Blast Man 2 Special Turbo (SNES bootleg) + + + sblazerp + Star Blazer (Pioneer LDV1000) + + + sbm + Sonic Blast Man (Japan) + + + sboblboa + Super Bobble Bobble (set 1) + + + sboblbob + Super Bobble Bobble (set 2) + + + sbomber + Space Bomber (ver. B) + + + sbombera + Space Bomber + + + sbowling + Strike Bowling + + + sbp + Super Bubble Pop + + + sbrkout + Super Breakout (rev 04) + + + sbrkout3 + Super Breakout (rev 03) + + + sbsgomo + Space Battle Ship Gomorrah + + + sbugger + Space Bugger (set 1) + + + sbuggera + Space Bugger (set 2) + + + sburners + Street Burners [TTL] + + + sc1actv8 + Active 8 (Dutch) (Bellfruit) (Scorpion 1) + + + sc1armad + Armada (Dutch) (Bellfruit) (Scorpion 1) + + + sc1barcd + Barcode (Bellfruit) (set 1) (Scorpion 1) + + + sc1barcda + Barcode (Bellfruit) (set 2) (Scorpion 1) + + + sc1bartk + Bar Trek (Bellfruit) (Scorpion 1) + + + sc1bigmt + The Big Match (Dutch) (Bellfruit) (Scorpion 1) + + + sc1boncl + Bonanza Club (unknown) (Scorpion 1) + + + sc1btbc + Beat The Bank Club (unknown) (Scorpion 1?) + + + sc1btclk + Beat The Clock (Mdm) (set 1) (Scorpion 2/3?) + + + sc1btclka + Beat The Clock (Mdm) (set 2) (Scorpion 2/3?) + + + sc1btclkb + Beat The Clock (Mdm) (set 3) (Scorpion 2/3?) + + + sc1calyp + Calypso (Dutch) (Bellfruit) (Scorpion 1) + + + sc1carro + Carrousel (Dutch) (Bellfruit) (Scorpion 1) + + + sc1ccoin + Cash Coin (Dutch) (Bellfruit) (Scorpion 1) + + + sc1ccroc + Crazy Crocs (Mdm) (set 1) (Scorpion 2/3?) + + + sc1ccroca + Crazy Crocs (Mdm) (set 2) (Scorpion 2/3?) + + + sc1ccrocb + Crazy Crocs (Mdm) (set 3) (Scorpion 2/3?) + + + sc1ccrocc + Crazy Crocs (Mdm) (set 4) (Scorpion 2/3?) + + + sc1cdm + Club Diamond (Crystal) (set 1) (Scorpion 1) + + + sc1cdmp + Club Diamond (Crystal) (set 1, Protocol) (Scorpion 1) + + + sc1cexpd + Cash Explosion (Dutch) (Bellfruit) (Scorpion 1) + + + sc1cexpl + Cash Explosion (Bellfruit) (set 1) (Scorpion 1) + + + sc1cexpla + Cash Explosion (Bellfruit) (set 2) (Scorpion 1) + + + sc1cexplb + Cash Explosion (Bellfruit) (set 3) (Scorpion 1) + + + sc1chain + Chain Reaction (Bellfruit) (set 1) (Scorpion 1) + + + sc1chainp + Chain Reaction (Bellfruit) (set 1, Protocol) (Scorpion 1) + + + sc1china + China Town Club (Bellfruit) (set 2) (Scorpion 1) + + + sc1chinaa + China Town Club (Bellfruit) (set 1) (Scorpion 1) + + + sc1chinaap + China Town Club (Bellfruit) (set 1, Protocol) (Scorpion 1) + + + sc1chinab + China Town Club (Bellfruit) (set 3) (Scorpion 1) + + + sc1chinabp + China Town Club (Bellfruit) (set 3, Protocol) (Scorpion 1) + + + sc1chinap + China Town Club (Bellfruit) (set 2, Protocol) (Scorpion 1) + + + sc1chqfl + Chequered Flag (Global) + + + sc1cl2k + Club 2000 (Dutch) (Bellfruit) (Scorpion 1) + + + sc1cl2k1 + Club 2001 (Dutch (Bellfruit) (Scorpion 1) + + + sc1cl65 + Club 65 Special (Bellfruit) (set 1) (Scorpion 1) + + + sc1cl65a + Club 65 Special (Bellfruit) (set 5) (Scorpion 1) + + + sc1cl65ap + Club 65 Special (Bellfruit) (set 5, Protocol) (Scorpion 1) + + + sc1cl65b + Club 65 Special (Bellfruit) (set 4) (Scorpion 1) + + + sc1cl65bp + Club 65 Special (Bellfruit) (set 4, Protocol) (Scorpion 1) + + + sc1cl65c + Club 65 Special (Bellfruit) (set 3) (Scorpion 1) + + + sc1cl65cp + Club 65 Special (Bellfruit) (set 3, Protocol) (Scorpion 1) + + + sc1cl65d + Club 65 Special (Bellfruit) (set 2) (Scorpion 1) + + + sc1cl65dp + Club 65 Special (Bellfruit) (set 2, Protocol) (Scorpion 1) + + + sc1class + Classic (Dutch) (Bellfruit) (Scorpion 1) + + + sc1clatt + Club Attraction (UK, Game Card 39-370-196) + + + sc1clatta + Club Attraction (set 2) + + + sc1clb3 + Club 3000 (Dutch) (Bellfruit) (Scorpion 1) + + + sc1clbdm + Club Diamond (Dutch) (Bellfruit) (Scorpion 1) + + + sc1clbdy + Club Dynamite (Global) (set 1) + + + sc1clbdya + Club Dynamite (Global) (set 2) + + + sc1clbrn + Club Runner (Dutch) (unknown) (Scorpion 1) + + + sc1clbsp + Club Spinner (Dutch) (unknown) (Scorpion 1) + + + sc1clbtm + Club Temptation (Bellfruit) (set 1) (Scorpion 1) + + + sc1clbtma + Club Temptation (Bellfruit) (set 2) (Scorpion 1) + + + sc1clbw + Club Wise (Bellfruit) (set 2) (Scorpion 1) + + + sc1clbwa + Club Wise (Bellfruit) (set 1) (Scorpion 1) + + + sc1clbxp + Club Explosion (Bellfruit) (Scorpion 1) (set 1) + + + sc1clbxpa + Club Explosion (Bellfruit) (Scorpion 1) (set 2) + + + sc1clins + Cash Lines (Bellfruit) (Scorpion 1) (set 1) + + + sc1clinsa + Cash Lines (Bellfruit) (Scorpion 1) (set 2) + + + sc1clinsb + Cash Lines (Bellfruit) (Scorpion 1) (set 3) + + + sc1clinsc + Cash Lines (Bellfruit) (Scorpion 1) (set 4) + + + sc1clinsd + Cash Lines (Bellfruit) (Scorpion 1) (set 5) + + + sc1clinse + Cash Lines (Bellfruit) (Scorpion 1) (set 6) + + + sc1clown + Clown Around (Dutch) (Bellfruit) (Scorpion 1) + + + sc1copdd + Cops 'n' Robbers Deluxe (Dutch) (Bellfruit) (Scorpion 1) + + + sc1copdx + Cops 'n' Robbers (Bellfruit) (set 3) (Scorpion 1) + + + sc1cops + Cops 'n' Robbers (Bellfruit) (set 1) (Scorpion 1) + + + sc1copsa + Cops 'n' Robbers (Bellfruit) (set 2) (Scorpion 1) + + + sc1count + Count Cash Club (Bellfruit) (set 2) (Scorpion 1) + + + sc1counta + Count Cash Club (Bellfruit) (set 1) (Scorpion 1) + + + sc1countap + Count Cash Club (Bellfruit) (set 1, Protocol) (Scorpion 1) + + + sc1countp + Count Cash Club (Bellfruit) (set 2, Protocol) (Scorpion 1) + + + sc1crocr + Croc And Roll (Mdm) (Scorpion 2/3?) + + + sc1crzyc + Crazy Cash (Global) (set 1) + + + sc1crzyca + Crazy Cash (Global) (set 2) + + + sc1cscl + Cash Classic (Global) (set 1) + + + sc1cscla + Cash Classic (Global) (set 2) + + + sc1cshat + Cash Attraction (Bellfruit) (set 5, Protocol) (Scorpion 1) + + + sc1cshata + Cash Attraction (Bellfruit) (set 1) (Scorpion 1) + + + sc1cshatb + Cash Attraction (Bellfruit) (set 5) (Scorpion 1) + + + sc1cshatc + Cash Attraction (Bellfruit) (set 2) (Scorpion 1) + + + sc1cshatf + Cash Attraction (Bellfruit) (set 2, Protocol) (Scorpion 1) + + + sc1cshatg + Cash Attraction (Bellfruit) (set 4, Protocol) (Scorpion 1) + + + sc1cshath + Cash Attraction (Bellfruit) (set 3, Protocol) (Scorpion 1) + + + sc1cshati + Cash Attraction (Bellfruit) (set 1, Protocol) (Scorpion 1) + + + sc1cshcd + Cash Card (Dutch) (Bellfruit) (Scorpion 1) + + + sc1cshcda + Cash Card (Bellfruit) (set 1) (Scorpion 1) + + + sc1cshcdb + Cash Card (Bellfruit) (set 2) (Scorpion 1) + + + sc1cshin + Cashino (Dutch) (Bellfruit) (Scorpion 1) + + + sc1cshwz + Cash Wise (Bellfruit) (set 2) (Scorpion 1) + + + sc1cshwza + Cash Wise (Bellfruit) (set 1) (Scorpion 1) + + + sc1cshwzb + Cash Wise (Bellfruit) (set 3) (Scorpion 1) + + + sc1cshwzc + Cash Wise (Bellfruit) (set 2, Protocol) (Scorpion 1) + + + sc1cshwzd + Cash Wise (Bellfruit) (set 4, Protocol) (Scorpion 1) + + + sc1cshwze + Cash Wise (Bellfruit) (set 1, Protocol) (Scorpion 1) + + + sc1cshwzf + Cash Wise (Bellfruit) (set 3, Protocol) (Scorpion 1) + + + sc1cshwzg + Cash Wise (Bellfruit) (set 4) (Scorpion 1) + + + sc1cwcl + Clockwise (Bellfruit) (Scorpion 1) + + + sc1czbrk + Crazy Break (Dutch) (unknown) (Scorpion 1) + + + sc1dago + Dagobert's Vault (Dutch) (Elam) (Scorpion 1) + + + sc1days + All In A Days Work (Global) (set 1) + + + sc1daysa + All In A Days Work (Global) (set 2) + + + sc1dblch + Double Chance (Bellfruit) (set 1) (Scorpion 1) + + + sc1dblcha + Double Chance (Bellfruit) (set 2, bad) (Scorpion 1) + + + sc1dblchb + Double Chance (Bellfruit) (set 3) (Scorpion 1) + + + sc1dip + Diplomat (Eurocoin) (Scorpion 1) + + + sc1disc + Discovey (Dutch) (Bellfruit) (Scorpion 1) + + + sc1dream + Dream Machine (Dutch) (Bellfruit) (Scorpion 1) + + + sc1driv + Driving School (Global) (set 1) + + + sc1driva + Driving School (Global) (set 2) + + + sc1drivb + Driving School (Global) (set 3) + + + sc1drivc + Driving School (Global) (set 4) + + + sc1druby + Diamonds & Rubys (Bellfruit) (Scorpion ?) (set 1) + + + sc1drubya + Diamonds & Rubys (Bellfruit) (Scorpion ?) (set 2) + + + sc1energ + Energy (Dutch) (unknown) (Scorpion 1) + + + sc1final + Final Touch (Dutch) (unknown) (Scorpion 1) + + + sc1flash + Flash (Dutch) (Bellfruit) (Scorpion 1) + + + sc1frpus + Fruit Pursuit (Bellfruit) (set 1) (Scorpion 1?) + + + sc1frpusa + Fruit Pursuit (Bellfruit) (set 2) (Scorpion 1?) + + + sc1frtln + Fruit Lines (Dutch) (Bellfruit) (set 2) (Scorpion 1) + + + sc1fruit + Fruit Lines (Dutch) (Bellfruit) (set 1) (Scorpion 1) + + + sc1funh + Fun House Club (Bellfruit) (set 1) (Scorpion 1) + + + sc1funha + Fun House Club (Bellfruit) (set 2) (Scorpion 1) + + + sc1funhp + Fun House Club (Bellfruit) (set 1, Protocol, bad) (Scorpion 1) + + + sc1goldw + Golden Winner (Bellfruit) (Scorpion ?) + + + sc1gprix + Grand Prix (Dutch) (Dutch) (Bellfruit) (Scorpion 1) + + + sc1gslam + Grand Slam (Dutch) (Bellfruit) (Scorpion 1) + + + sc1gtime + Good Times (Dutch) (Bellfruit) (Scorpion 1) + + + sc1happy + Happy Hour (Dutch) (Bellfruit) (Scorpion 1) + + + sc1hfcc + Hi Flyer Club (Crystal) (set 1) (Scorpion 1) + + + sc1hfccp + Hi Flyer Club (Crystal) (set 1, Protocol) (Scorpion 1) + + + sc1hipt + High Point (Bellfruit) (Scorpion 1) (set 1) + + + sc1hipta + High Point (Bellfruit) (Scorpion 1) (set 2) + + + sc1impc + Impact (Dutch) (Bellfruit) (Scorpion 1) + + + sc1kings + Kings Club (Dutch) (Bellfruit) (Scorpion 1) + + + sc1lamb + Lambada (Eurocoin) (Scorpion 1) + + + sc1linx + Linx (Bellfruit) (set 1) (Scorpion 1) + + + sc1linxa + Linx (Bellfruit) (set 2) (Scorpion 1) + + + sc1linxp + Linx (Bellfruit) (set 3, Protocol) (Scorpion 1) + + + sc1lotus + Lotus SE (Dutch) (set 1) + + + sc1lotusa + Lotus SE (Dutch) (set 2) + + + sc1ltdv + Little Devil (Pcp) + + + sc1magc + Magic Circle (Dutch) (Bellfruit) (Scorpion 1) + + + sc1manha + Manhattan (Dutch) (Bellfruit) (Scorpion 1) + + + sc1mast + Master Club (Dutch) (Bellfruit) (Scorpion 1) + + + sc1mist + Mistral (Dutch) (Bellfruit) (Scorpion 1) + + + sc1moonl + Moon Lite (Bwb) + + + sc1ofs56 + Only Fools and Horses (Bellfruit) (Scorpion 1?) + + + sc1olym + Olympia (Dutch) (Bellfruit) (Scorpion 1) + + + sc1orac + Oracle (Dutch) (Bellfruit) (Scorpion 1) + + + sc1pwrl + Power Lines (Bellfruit) (set 1) (Scorpion 1) + + + sc1quat + Quatro (Dutch) (Bellfruit) (Scorpion 1) + + + sc1rain + Rainbow (Dutch) (Bellfruit) (Scorpion 1) + + + sc1re + Reel Cash (Dutch) (Bellfruit) (Scorpion 1) + + + sc1reply + Replay (Eurocoin) (Scorpion 1) + + + sc1rese + Reel Cash SE (Dutch) (Bellfruit) (Scorpion 1) + + + sc1revo + Revolution (Dutch) (Bellfruit) (Scorpion 1) + + + sc1rose + Rose 'n' Crown (Dutch) (Bellfruit) (Scorpion 1) + + + sc1roul + Roulette (Dutch, Game Card 39-360-129?) + + + sc1s1000 + Super 1000 (Deltasoft) + + + sc1sant + Santana (Dutch) (Bellfruit) (Scorpion 1) + + + sc1sat + Satellite (Dutch) (Bellfruit) (Scorpion 1) + + + sc1satse + Satellite SE (Dutch) (Bellfruit) (Scorpion 1) + + + sc1scunk + unknown Scorpion 1 'Super ?' (Bellfruit) (Scorpion 1) + + + sc1shan + Shanghai (Dutch) (Bellfruit) (Scorpion 1) + + + sc1sir + Strike It Rich (Bellfruit) (set 1) (Scorpion 1) + + + sc1sira + Strike It Rich (Bellfruit) (set 3, bad) (Scorpion 1) + + + sc1sirb + Strike It Rich (Bellfruit) (set 2) (Scorpion 1) + + + sc1sirc + Strike It Rich (Bellfruit) (set 4, bad) (Scorpion 1) + + + sc1smoke + Smokey Vs The Bandit (Mdm) (set 1) (Scorpion 2/3?) + + + sc1smokea + Smokey Vs The Bandit (Mdm) (set 2) (Scorpion 2/3?) + + + sc1spct + Spectre (Bellfruit) (set 1) (Scorpion 1) + + + sc1spcta + Spectre (Bellfruit) (set 2) (Scorpion 1) + + + sc1spit + Spitfire (Dutch) (Elam) (Scorpion 1) + + + sc1ster + Sterling (Dutch) (Bellfruit) (Scorpion 1) + + + sc1str4 + Strike 4 (Dutch) (Bellfruit) (Scorpion 1) (set 1) + + + sc1str4a + Strike 4 (Dutch) (Bellfruit) (Scorpion 1) (set 2) + + + sc1strk + Strike (Dutch) (Bellfruit) (Scorpion 1) + + + sc1supfl + Super Flush (Dutch) (Bellfruit) (Scorpion 1) + + + sc1sups + Superstar (Dutch) (unknown) (Scorpion 1) + + + sc1t1k + Top 1000 (Dutch) (Eurocoin) (Scorpion 1) + + + sc1tiara + Tiara (Dutch) (Bellfruit) (Scorpion 1) + + + sc1torn + Tornado (Dutch) (Bellfruit) (set 1) (Scorpion 1) + + + sc1torna + Tornado (Dutch) (Bellfruit) (set 2) (Scorpion 1) + + + sc1tri + Tri Star (Bellfruit) (set 1) (Scorpion 1) + + + sc1tria + Tri Star (Bellfruit) (set 2) (Scorpion 1) + + + sc1triap + Tri Star (Bellfruit) (set 2, Protocol) (Scorpion 1) + + + sc1trib + Tri Star (Bellfruit) (set 3) (Scorpion 1) + + + sc1tribp + Tri Star (Bellfruit) (set 3, Protocol) (Scorpion 1) + + + sc1twice + Twice As Nice (Associated Leisure) (Scorpion 1) + + + sc1typ + Typhoon Club (Bellfruit) (set 1) (Scorpion 1) + + + sc1typp + Typhoon Club (Bellfruit) (set 1, Protocol) (Scorpion 1) + + + sc1ult + Ultimate (Dutch) (Bellfruit) (Scorpion 1) + + + sc1vent + Ventura (Dutch) (Bellfruit) (Scorpion 1) + + + sc1vict + Victory (Dutch) (Bellfruit) (Scorpion 1) + + + sc1voy + Voyager (Dutch) (Elam) (set 1) (Scorpion 1) + + + sc1voya + Voyager (Dutch) (Elam) (set 2) (Scorpion 1) + + + sc1vsd + Vegas Super Deal (Global) + + + sc1winfl + Winfalls (Dutch) (Bellfruit) (Scorpion 1) + + + sc1winst + Winning Streak (Bellfruit) (set 1) (Scorpion 1) + + + sc1winsta + Winning Streak (Bellfruit) (set 2) (Scorpion 1) + + + sc1winstp + Winning Streak (Bellfruit) (set 1, Protocol) (Scorpion 1) + + + sc1wof + Wheel Of Fortune (Global) (set 1) + + + sc1wofa + Wheel Of Fortune (Global) (set 2) + + + sc1wofb + Wheel Of Fortune (Global) (set 3) + + + sc1wthn + Wild Thing (Eurocoin) (Scorpion 1) + + + sc1wud + What's Up Dr (Scorpion 1?) + + + sc1zep + Zeppelin (Dutch) (Elam) (Scorpion 1) + + + sc2bar7 + Bar 7 (Concept) (set 1) + + + sc2bar7a + Bar 7 (Concept) (set 2) + + + sc2bar7b + Bar 7 (Concept) (set 3) + + + sc2bar7c + Bar 7 (Concept) (set 4) + + + sc2bar7d + Bar 7 (Concept) (set 5) + + + sc2bar7e + Bar 7 (Concept) (set 6) + + + sc2bar7f + Bar 7 (Concept) (set 7) + + + sc2bar7g + Bar 7 (Concept) (set 8) + + + sc2bar7h + Bar 7 (Concept) (set 9) + + + sc2bar7i + Bar 7 (Concept) (set 10) + + + sc2bar7j + Bar 7 (Concept) (set 11) + + + sc2bar7k + Bar 7 (Concept) (set 12) + + + sc2bbar7 + Big Bar 7 (Concept) (set 1) + + + sc2bbar7a + Big Bar 7 (Concept) (set 2) + + + sc2bbar7b + Big Bar 7 (Concept) (set 3) + + + sc2bbar7c + Big Bar 7 (Concept) (set 4) + + + sc2bbar7d + Big Bar 7 (Concept) (set 5) + + + sc2bbar7e + Big Bar 7 (Concept) (set 6) + + + sc2bbar7f + Big Bar 7 (Concept) (set 7) + + + sc2bbar7g + Big Bar 7 (Concept) (set 8) + + + sc2bbar7h + Big Bar 7 (Concept) (set 9) + + + sc2bbar7i + Big Bar 7 (Concept) (set 10) + + + sc2bbar7j + Big Bar 7 (Concept) (set 11) + + + sc2bbar7k + Big Bar 7 (Concept) (set 12) + + + sc2bbar7l + Big Bar 7 (Concept) (set 13) + + + sc2bbar7m + Big Bar 7 (Concept) (set 14) + + + sc2bbar7n + Big Bar 7 (Concept) (set 15) + + + sc2bbar7o + Big Bar 7 (Concept) (set 16) + + + sc2bbar7p + Big Bar 7 (Concept) (set 17) + + + sc2brkfs + The Big Breakfast (set 2) (Scorpion 2/3) + + + sc2brkfs1 + The Big Breakfast (set 1 UK, Single Site) (Scorpion 2/3) + + + sc2brkfs1p + The Big Breakfast (set 1 UK, Single Site, Protocol) (Scorpion 2/3) + + + sc2brkfs2 + The Big Breakfast (set 4 UK, Arcade, 8GBP Jackpot) (Scorpion 2/3) + + + sc2brkfs3 + The Big Breakfast (set 3) (Scorpion 2/3) + + + sc2brkfs3p + The Big Breakfast (set 4 UK, Arcade, 8GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2brkfs4 + The Big Breakfast (set 5 UK, Arcade, 10GBP Jackpot) (Scorpion 2/3) + + + sc2brkfs4p + The Big Breakfast (set 5 UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2brkfs5 + The Big Breakfast (set 6 UK, Arcade, 10GBP Jackpot) (Scorpion 2/3) + + + sc2brkfs5p + The Big Breakfast (set 6 UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2brkfs6 + The Big Breakfast (set 3, Protocol) (Scorpion 2/3) + + + sc2brkfsm + The Big Breakfast Casino (Scorpion 2/3) + + + sc2brkfsm1 + The Big Breakfast Casino (Mazooma, set 1) (Scorpion 2/3) + + + sc2brkfsm2 + The Big Breakfast Casino (Mazooma, set 2) (Scorpion 2/3) + + + sc2brkfsp + The Big Breakfast (set 2, Protocol) (Scorpion 2/3) + + + sc2call + It's Your Call (Global) (v2.7) (Scorpion 2/3) + + + sc2callc + It's Your Call (Club?) (Global) (v1.6) (Scorpion 2/3) + + + sc2callcp + It's Your Call (Club?) (Global) (v1.6 Protocol) (Scorpion 2/3) + + + sc2callp + It's Your Call (Global) (v2.7 Protocol) (Scorpion 2/3) + + + sc2casr + Casino Royale (Bellfruit) (set 5, UK, 10GBP Jackpot, 3rd Triennial) (Scorpion 2/3) + + + sc2casr1 + Casino Royale (Bellfruit) (set 4, UK, 3rd Triennial) (Scorpion 2/3) + + + sc2casr1p + Casino Royale (Bellfruit) (set 4, UK, 3rd Triennial, Protocol) (Scorpion 2/3) + + + sc2casr2 + Casino Royale (Bellfruit) (set 3, UK) (Scorpion 2/3) + + + sc2casr2p + Casino Royale (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3) + + + sc2casr3 + Casino Royale (Bellfruit) (set 1, UK, 8GBP Jackpot) (Scorpion 2/3) + + + sc2casr3p + Casino Royale (Bellfruit) (set 1, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2casr4 + Casino Royale (Bellfruit) (set 2, UK) (Scorpion 2/3) + + + sc2casr4p + Casino Royale (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3) + + + sc2casrp + Casino Royale (Bellfruit) (set 5, UK, 10GBP Jackpot, 3rd Triennial, Protocol) (Scorpion 2/3) + + + sc2catms + Cat & Mouse (Bellfruit) (set 4, Deluxe) (Scorpion 2/3) + + + sc2catms1 + Cat & Mouse (Bellfruit) (set 10) (Scorpion 2/3) + + + sc2catms1p + Cat & Mouse (Bellfruit) (set 10, Protocol) (Scorpion 2/3) + + + sc2catms2 + Cat & Mouse (Bellfruit) (set 9) (Scorpion 2/3) + + + sc2catms2p + Cat & Mouse (Bellfruit) (set 9, Protocol) (Scorpion 2/3) + + + sc2catms3 + Cat & Mouse (Bellfruit) (set 1) (Scorpion 2/3) + + + sc2cb7 + Super Bar 7 Casino (Bellfruit) (set 3, UK) (Scorpion 2/3) + + + sc2cb71 + Super Bar 7 Casino (Bellfruit) (set 1, UK, All Cash) (Scorpion 2/3) + + + sc2cb72 + Super Bar 7 Casino (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2cb72p + Super Bar 7 Casino (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2cb7p + Super Bar 7 Casino (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3) + + + sc2cexpl + Cash Explosion (Bellfruit) (set 2, Protocol) (Scorpion 2) + + + sc2cexpla + Cash Explosion (Bellfruit) (set 1, Protocol) (Scorpion 2) + + + sc2cexplb + Cash Explosion (Bellfruit) (set 3, Protocol) (Scorpion 2) + + + sc2cexplc + Cash Explosion (Bellfruit) (set 2) (Scorpion 2) + + + sc2cexpld + Cash Explosion (Bellfruit) (set 1) (Scorpion 2) + + + sc2cexple + Cash Explosion (Bellfruit) (set 3) (Scorpion 2) + + + sc2cgc + Carrot Gold Club (Bellfruit) (Protocol) (Scorpion 2/3) + + + sc2cgcas + Club Grand Casino (Bellfruit) (set 1) (Scorpion 2/3) + + + sc2cgcas1 + Club Grand Casino (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2cgcas1p + Club Grand Casino (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2cgcasp + Club Grand Casino (Bellfruit) (set 1, Protocol) (Scorpion 2/3) + + + sc2cmbt + Cat & Mouse & Bonzo Too (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2cmbtp + Cat & Mouse & Bonzo Too (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2cnile + Cash On The Nile Club (Bellfruit) (set 2 UK, 150GBP Jackpot) (Scorpion 2/3) + + + sc2cnile1 + Cash On The Nile Club (Bellfruit) (set 1 UK, 150GBP Jackpot) (Scorpion 2/3) + + + sc2cnile2 + Cash On The Nile Club (Bellfruit) (set 3 UK, 200GBP Jackpot) (Scorpion 2/3) + + + sc2cnile2p + Cash On The Nile Club (Bellfruit) (set 3 UK, 200GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2cnilep + Cash On The Nile Club (Bellfruit) (set 2 UK, 150GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2copcl + Cops 'n' Robbers Club (Bellfruit) (set 9, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2copcl1 + Cops 'n' Robbers Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2copcl10 + Cops 'n' Robbers Club (Bellfruit) (set 6, UK) (Scorpion 2/3) + + + sc2copcl11 + Cops 'n' Robbers Club (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2copcl11p + Cops 'n' Robbers Club (Bellfruit) (set 11, UK, Protocol) (Scorpion 2/3) + + + sc2copcl12 + Cops 'n' Robbers Club (Bellfruit) (set 10, UK, Protocol) (Scorpion 2/3) + + + sc2copcl1p + Cops 'n' Robbers Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2copcl2 + Cops 'n' Robbers Club (Bellfruit) (set 10, UK) (Scorpion 2/3) + + + sc2copcl3 + Cops 'n' Robbers Club (Bellfruit) (set 12, UK) (Scorpion 2/3) + + + sc2copcl3p + Cops 'n' Robbers Club (Bellfruit) (set 12, UK, Protocol) (Scorpion 2/3) + + + sc2copcl4 + Cops 'n' Robbers Club (Bellfruit) (set 3, UK) (Scorpion 2/3) + + + sc2copcl5 + Cops 'n' Robbers Club (Bellfruit) (set 11, UK) (Scorpion 2/3) + + + sc2copcl6 + Cops 'n' Robbers Club (Bellfruit) (set 4, UK) (Scorpion 2/3) + + + sc2copcl6p + Cops 'n' Robbers Club (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3) + + + sc2copcl7 + Cops 'n' Robbers Club (Bellfruit) (set 5, UK) (Scorpion 2/3) + + + sc2copcl8 + Cops 'n' Robbers Club (Bellfruit) (set 8, UK) (Scorpion 2/3) + + + sc2copcl8p + Cops 'n' Robbers Club (Bellfruit) (set 8, UK, Protocol) (Scorpion 2/3) + + + sc2copcl9 + Cops 'n' Robbers Club (Bellfruit) (set 7, UK) (Scorpion 2/3) + + + sc2copcl9p + Cops 'n' Robbers Club (Bellfruit) (set 7, UK, Protocol) (Scorpion 2/3) + + + sc2copclp + Cops 'n' Robbers Club (Bellfruit) (set 9, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2copdc + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 7, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2copdc1 + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 3, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2copdc1p + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 3, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2copdc2 + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 4, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2copdc2p + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 4, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2copdc3 + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 5, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2copdc3p + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 5, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2copdc4 + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 6, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2copdc4p + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 6, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2copdc5 + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 1, UK, 200GBP Jackpot) (Scorpion 2/3) + + + sc2copdc5p + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 1, UK, 200GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2copdc6 + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2copdcp + Cops 'n' Robbers Club Deluxe (Bellfruit) (set 7, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2cops + Cops 'n' Robbers (Bellfruit) (set 6) (Scorpion 2/3) + + + sc2cops1p + Cops 'n' Robbers (Bellfruit) (set 6, Protocol) (Scorpion 2/3) + + + sc2cops2 + Cops 'n' Robbers (Bellfruit) (set 2) (Scorpion 2/3) + + + sc2cops3 + Cops 'n' Robbers (Bellfruit) (set 3) (Scorpion 2/3) + + + sc2cops3p + Cops 'n' Robbers (Bellfruit) (set 3, Protocol) (Scorpion 2/3) + + + sc2cops4 + Cops 'n' Robbers (Bellfruit) (set 5) (Scorpion 2/3) + + + sc2cops5 + Cops 'n' Robbers (Bellfruit) (set 1) (Scorpion 2/3) + + + sc2copsc + Casino Cops 'n' Robbers (Bellfruit) (set 1) (Scorpion 2/3) + + + sc2copsc1 + Casino Cops 'n' Robbers (Bellfruit) (set 2) (Scorpion 2/3) + + + sc2copsc1p + Casino Cops 'n' Robbers (Bellfruit) (set 2, Protocol) (Scorpion 2/3) + + + sc2copsc1pa + Casino Cops 'n' Robbers (Bellfruit) (set 2, Protocol) (Scorpion 2/3) (alt matrix rom) + + + sc2copscp + Casino Cops 'n' Robbers (Bellfruit) (set 1, Protocol) (Scorpion 2/3) + + + sc2copsp + Cops 'n' Robbers (Bellfruit) (set 4, Protocol) (Scorpion 2/3) + + + sc2cpe + Club Public Enemy No.1 (set 5, UK) (Scorpion 2/3) + + + sc2cpe1 + Club Public Enemy No.1 (set 4, UK) (Scorpion 2/3) + + + sc2cpe1p + Club Public Enemy No.1 (set 4, UK, Protocol) (Scorpion 2/3) + + + sc2cpe2 + Club Public Enemy No.1 (set 3, UK) (Scorpion 2/3) + + + sc2cpe2p + Club Public Enemy No.1 (set 3, UK, Protocol) (Scorpion 2/3) + + + sc2cpe3 + Club Public Enemy No.1 (set 1, UK) (Scorpion 2/3) + + + sc2cpe3p + Club Public Enemy No.1 (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2cpe4 + Club Public Enemy No.1 (set 2, UK) (Scorpion 2/3) + + + sc2cpe4p + Club Public Enemy No.1 (set 2, UK, Protocol) (Scorpion 2/3) + + + sc2cpep + Club Public Enemy No.1 (set 5, UK, Protocol) (Scorpion 2/3) + + + sc2cpg + Pharaoh's Gold Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2cpg1 + Pharaoh's Gold Club (Bellfruit) (set 3, UK, p65) (Scorpion 2/3) + + + sc2cpg1p + Pharaoh's Gold Club (Bellfruit) (set 3, UK, p65, Protocol) (Scorpion 2/3) + + + sc2cpg2 + Pharaoh's Gold Club (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2cpg2p + Pharaoh's Gold Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2cpgp + Pharaoh's Gold Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2cshcl + Cashino Club (Bellfruit) (set 2) (Scorpion 2/3) + + + sc2cshcl1 + Cashino Club (Bellfruit) (set 1) (Scorpion 2/3) + + + sc2cshcl1p + Cashino Club (Bellfruit) (set 1, Protocol) (Scorpion 2/3) + + + sc2cshclp + Cashino Club (Bellfruit) (set 2, Protocol) (Scorpion 2/3) + + + sc2ctms2 + Cat & Mouse (Bellfruit) (set 2) (Scorpion 2/3) + + + sc2ctms21 + Cat & Mouse (Bellfruit) (set 7) (Scorpion 2/3) + + + sc2ctms21p + Cat & Mouse (Bellfruit) (set 7, Protocol) (Scorpion 2/3) + + + sc2ctms22 + Cat & Mouse (Bellfruit) (set 6) (Scorpion 2/3) + + + sc2ctms22p + Cat & Mouse (Bellfruit) (set 6, Protocol) (Scorpion 2/3) + + + sc2ctms23 + Cat & Mouse (Bellfruit) (set 5) (Scorpion 2/3) + + + sc2ctms23p + Cat & Mouse (Bellfruit) (set 5, Protocol) (Scorpion 2/3) + + + sc2ctms24p + Cat & Mouse (Bellfruit) (set 8, Protocol) (Scorpion 2/3) + + + sc2ctms25 + Cat & Mouse (Bellfruit) (set 3) (Scorpion 2/3) + + + sc2cvega + Cash Vegas (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2cvega1 + Cash Vegas (Bellfruit) (set 4, UK, 10GBP Jackpot, 3rd Triennial) (Scorpion 2/3) + + + sc2cvega1p + Cash Vegas (Bellfruit) (set 4, UK, 10GBP Jackpot, 3rd Triennial, Protocol) (Scorpion 2/3) + + + sc2cvega2 + Cash Vegas (Bellfruit) (set 3, UK, 8GBP Jackpot) (Scorpion 2/3) + + + sc2cvega2p + Cash Vegas (Bellfruit) (set 3, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2cvega3 + Cash Vegas (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2cvega3p + Cash Vegas (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2cvega4p + Cash Vegas (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2dbl + Double Diamond (Bellfruit) (set 2, UK) (Scorpion 2/3) + + + sc2dbl1 + Double Diamond (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2dbl1p + Double Diamond (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2dblp + Double Diamond (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3) + + + sc2dels + Del's Millions (Bellfruit) (set 9, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2dels1 + Del's Millions (Bellfruit) (set 10, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2dels1p + Del's Millions (Bellfruit) (set 10, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2dels2 + Del's Millions (Bellfruit) (set 7, UK, 8GBP Jackpot) (Scorpion 2/3) + + + sc2dels2p + Del's Millions (Bellfruit) (set 7, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2dels3 + Del's Millions (Bellfruit) (set 3, UK, 8GBP Jackpot) (Scorpion 2/3) + + + sc2dels3p + Del's Millions (Bellfruit) (set 3, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2dels4 + Del's Millions (Bellfruit) (set 6, UK) (Scorpion 2/3) + + + sc2dels4p + Del's Millions (Bellfruit) (set 6, UK, Protocol) (Scorpion 2/3) + + + sc2dels5 + Del's Millions (Bellfruit) (set 5, UK) (Scorpion 2/3) + + + sc2dels6 + Del's Millions (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2dels7 + Del's Millions (Bellfruit) (set 2, UK) (Scorpion 2/3) + + + sc2dels8 + Del's Millions (Bellfruit) (set 8, UK) (Scorpion 2/3) + + + sc2dels9 + Del's Millions (Bellfruit) (set 5, UK, Protocol) (Scorpion 2/3) + + + sc2delsd + Del's Millions (Bellfruit) (set 4, Deluxe) (Scorpion 2/3) + + + sc2delsm + Del's Millions (Bellfruit/Mazooma) (DMVMAZ11_N) (Scorpion 2/3) + + + sc2delsm1 + Del's Millions (Bellfruit/Mazooma) (DMVMAZ13_N) (Scorpion 2/3) + + + sc2delsm1p + Del's Millions (Bellfruit/Mazooma) (DMVMAZ14_N) (Scorpion 2/3) + + + sc2delsm2 + Del's Millions (Bellfruit/Mazooma) (DMVMAZ11_P) (Scorpion 2/3) + + + sc2delsm2p + Del's Millions (Bellfruit/Mazooma) (DMVMAZ12_P) (Scorpion 2/3) + + + sc2delsm3 + Del's Millions (Bellfruit/Mazooma) (DMVMAZ13_P) (Scorpion 2/3) + + + sc2delsm3p + Del's Millions (Bellfruit/Mazooma) (DMVMAZ14_P) (Scorpion 2/3) + + + sc2delsmp + Del's Millions (Bellfruit/Mazooma) (DMVMAZ12_N) (Scorpion 2/3) + + + sc2delsp + Del's Millions (Bellfruit) (set 9, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2dick + Spotted Dick (Global) (v3.1) (Scorpion 2/3) + + + sc2dick1 + Spotted Dick (Global) (v2.2) (Scorpion 2/3) + + + sc2dick2 + Spotted Dick (Global) (v1.5) (Scorpion 2/3) + + + sc2dick2e + Spotted Dick (Global) (v?.? Euro) (Scorpion 2/3) + + + sc2dick2eu + Spotted Dick (Global) (v?.? Euro unencrypted) (Scorpion 2/3) + + + sc2dick2p + Spotted Dick (Global) (v1.5 Protocol ) (Scorpion 2/3) + + + sc2dickp + Spotted Dick (Global) (v3.1 Protocol) (Scorpion 2/3) + + + sc2downt + Down Town (Bellfruit) (set 7, UK) (Scorpion 2/3) + + + sc2downt1 + Down Town (Bellfruit) (set 4, UK, 16RM motor) (Scorpion 2/3) + + + sc2downt1p + Down Town (Bellfruit) (set 4, UK, 16RM motor, Protocol) (Scorpion 2/3) + + + sc2downt2 + Down Town (Bellfruit) (set 6, UK) (Scorpion 2/3) + + + sc2downt2p + Down Town (Bellfruit) (set 7, UK, Protocol) (Scorpion 2/3) + + + sc2downt3 + Down Town (Bellfruit) (set 11, UK, 15RM motor) (Scorpion 2/3) + + + sc2downt3a + Down Town (Bellfruit) (set 8, UK) (Scorpion 2/3) + + + sc2downt3ap + Down Town (Bellfruit) (set 8, UK, Protocol) (Scorpion 2/3) + + + sc2downt3p + Down Town (Bellfruit) (set 11, UK, 15RM motor, Protocol) (Scorpion 2/3) + + + sc2downt4 + Down Town (Bellfruit) (set 10, UK, 15RM motor) (Scorpion 2/3) + + + sc2downt4a + Down Town (Bellfruit) (set 9, UK) (Scorpion 2/3) + + + sc2downt4ap + Down Town (Bellfruit) (set 9, UK, Protocol) (Scorpion 2/3) + + + sc2downt4p + Down Town (Bellfruit) (set 10, UK, 15RM motor, Protocol) (Scorpion 2/3) + + + sc2downt5 + Down Town (Bellfruit) (set 5, UK) (Scorpion 2/3) + + + sc2downt6 + Down Town (Bellfruit) (set 1, UK, 16RM motor) (Scorpion 2/3) + + + sc2downt7 + Down Town (Bellfruit) (set 2, Irish, 16RM motor) (Scorpion 2/3) + + + sc2downt8a + Down Town (Bellfruit) (set 3, UK, 16RM motor) (Scorpion 2/3) + + + sc2downt8ap + Down Town (Bellfruit) (set 3, UK, 16RM motor, Protocol) (Scorpion 2/3) + + + sc2downtp + Down Town (Bellfruit) (set 6, UK, Protocol) (Scorpion 2/3) + + + sc2drwho + Dr.Who The Timelord (set 1, UK, Single Site) (Scorpion 2/3) + + + sc2drwho1 + Dr.Who The Timelord (set 2, UK, Arcade) (Scorpion 2/3) + + + sc2drwho1p + Dr.Who The Timelord (set 2, UK, Arcade, Protocol) (Scorpion 2/3) + + + sc2drwho2 + Dr.Who The Timelord (set 3, UK, no Jackpot spin) (Scorpion 2/3) + + + sc2drwho2p + Dr.Who The Timelord (set 3, UK, no Jackpot spin, Protocol) (Scorpion 2/3) + + + sc2drwho3 + Dr.Who The Timelord (set 4, UK, Arcade) (Scorpion 2/3) + + + sc2drwho3p + Dr.Who The Timelord (set 4, UK, Arcade, Protocol) (Scorpion 2/3) + + + sc2drwho4 + Dr.Who The Timelord (set 5, UK) (Scorpion 2/3) + + + sc2drwho4p + Dr.Who The Timelord (set 5, UK, Protocol) (Scorpion 2/3) + + + sc2drwho5 + Dr.Who The Timelord (set 6, UK, Arcade, 8GBP Jackpot) (Scorpion 2/3) + + + sc2drwho5p + Dr.Who The Timelord (set 6, UK, Arcade, 8GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2drwho6 + Dr.Who The Timelord (set 7, UK, Arcade) (Scorpion 2/3) + + + sc2drwho6p + Dr.Who The Timelord (set 7, UK, Arcade, Protocol) (Scorpion 2/3) + + + sc2drwho7 + Dr.Who The Timelord (set 8, UK, Arcade, 10GBP Jackpot) (Scorpion 2/3) + + + sc2drwho7p + Dr.Who The Timelord (set 8, UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2drwhodx + Dr.Who The Timelord Deluxe (set 1) (Scorpion 2/3) + + + sc2drwhodx1 + Dr.Who The Timelord Deluxe (set 2) (Scorpion 2/3) + + + sc2drwhomz + Dr.Who The Timelord (Mazooma) (Scorpion 2/3) + + + sc2drwhomzp + Dr.Who The Timelord (Mazooma, Protocol) (Scorpion 2/3) + + + sc2drwhop + Dr.Who The Timelord (set 1, UK, Single Site Protocol) (Scorpion 2/3) + + + sc2drwhou + Dr.Who The Timelord (set 1, UK, Single Site) (Scorpion 2/3) (not encrypted) + + + sc2easy + Easy Money (Bellfruit) (set 1) (Scorpion 2/3) + + + sc2easy1 + Easy Money (Bellfruit) (set 3) (Scorpion 2/3) + + + sc2easy1p + Easy Money (Bellfruit) (set 3, Protocol) (Scorpion 2/3) + + + sc2easy2 + Easy Money (Bellfruit) (set 2) (Scorpion 2/3) + + + sc2easy2p + Easy Money (Bellfruit) (set 2, Protocol) (Scorpion 2/3) + + + sc2easyp + Easy Money (Bellfruit) (set 1, Protocol) (Scorpion 2/3) + + + sc2eggs + Eggs On Legs Tour (Bellfruit) (set 2, UK, Arcade, 10GBP Jackpot) (Scorpion 2/3) + + + sc2eggs1 + Eggs On Legs Tour (Bellfruit) (set 1, UK, Arcade, 10GBP Jackpot?) (Scorpion 2/3) + + + sc2eggs1p + Eggs On Legs Tour (Bellfruit) (set 1, UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2eggsp + Eggs On Legs Tour (Bellfruit) (set 2, UK, Arcade, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2flaca + Flash Cash (Bellfruit) (set 3, UK, 10GBP Jackpot, 3rd Triennial) (Scorpion 2/3) + + + sc2flaca1 + Flash Cash (Bellfruit) (set 1, UK, 10GBP Jackpot, 2nd Triennial) (Scorpion 2/3) + + + sc2flaca1p + Flash Cash (Bellfruit) (set 1, UK, 10GBP Jackpot, 2nd Triennial, Protocol) (Scorpion 2/3) + + + sc2flaca2 + Flash Cash (Bellfruit) (set 2, UK, 10GBP Jackpot, 2nd Triennial) (Scorpion 2/3) + + + sc2flaca2p + Flash Cash (Bellfruit) (set 2, UK, 10GBP Jackpot, 2nd Triennial, Protocol) (Scorpion 2/3) + + + sc2flacap + Flash Cash (Bellfruit) (set 3, UK, 10GBP Jackpot, 3rd Triennial, Protocol) (Scorpion 2/3) + + + sc2flutr + Flutter (Concept) + + + sc2focus + Focus (Dutch, Game Card 95-750-347) (Scorpion 2/3) + + + sc2foot + Football Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2foot1 + Football Club (Bellfruit) (set 3, UK, 100GBP Jackpot) (Scorpion 2/3) + + + sc2foot1p + Football Club (Bellfruit) (set 3, UK, 100GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2foot2 + Football Club (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2foot2p + Football Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2footp + Football Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2gcclb + Golden Casino Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2gcclb1 + Golden Casino Club (Bellfruit) (set 3, UK, 100GBP Jackpot) (Scorpion 2/3) + + + sc2gcclb1p + Golden Casino Club (Bellfruit) (set 3, UK, 100GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2gcclb2 + Golden Casino Club (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2gcclb2p + Golden Casino Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2gcclbp + Golden Casino Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2goldr + Gold Reserve (Mdm) (v1.3) (Scorpion 2/3) + + + sc2goldr1 + Gold Reserve (Mdm) (set 2) (Scorpion 2/3) + + + sc2goldrp + Gold Reserve (Mdm) (v1.3 Protocol) (Scorpion 2/3) + + + sc2groul + Golden Roulette (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2groulp + Golden Roulette (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3) + + + sc2gsclb + The Game Show Club (Bellfruit) (set 4, UK, Arcade, p65) (Scorpion 2/3) + + + sc2gsclb1 + The Game Show Club (Bellfruit) (set 7, UK, Arcade, 250GBP Jackpot, p65) (Scorpion 2/3) + + + sc2gsclb1p + The Game Show Club (Bellfruit) (set 7, UK, Arcade, 250GBP Jackpot, p65, Protocol) (Scorpion 2/3) + + + sc2gsclb2 + The Game Show Club (Bellfruit) (set 3, UK, Arcade) (Scorpion 2/3) + + + sc2gsclb2p + The Game Show Club (Bellfruit) (set 3, UK, Arcade, Protocol) (Scorpion 2/3) + + + sc2gsclb3 + The Game Show Club (Bellfruit) (set 5, UK, Arcade) (Scorpion 2/3) + + + sc2gsclb3p + The Game Show Club (Bellfruit) (set 5, UK, Arcade, Protocol) (Scorpion 2/3) + + + sc2gsclb4 + The Game Show Club (Bellfruit) (set 6, UK, Arcade) (Scorpion 2/3) + + + sc2gsclb4p + The Game Show Club (Bellfruit) (set 6, UK, Arcade, Protocol) (Scorpion 2/3) + + + sc2gsclb5 + The Game Show Club (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2gsclb6 + The Game Show Club (Bellfruit) (set 8, UK) (Scorpion 2/3) + + + sc2gsclb6p + The Game Show Club (Bellfruit) (set 8, UK, Protocol) (Scorpion 2/3) + + + sc2gsclb7 + The Game Show Club (Bellfruit) (set 2, UK) (Scorpion 2/3) + + + sc2gsclbp + The Game Show Club (Bellfruit) (set 4, UK, Arcade, p65, Protocol) (Scorpion 2/3) + + + sc2gslam + Club Grand Slam (UK, set 2) (Scorpion 2/3) + + + sc2gslam1 + Club Grand Slam (UK, set 1) (Scorpion 2/3) + + + sc2gslam1p + Club Grand Slam (UK, set 1, Protocol) (Scorpion 2/3) + + + sc2gslamp + Club Grand Slam (UK, set 2, Protocol) (Scorpion 2/3) + + + sc2gtr + The Great Train Robbery (Bellfruit) (Scorpion 2/3) + + + sc2heypr + Hey Presto (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2heyprp + Hey Presto (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2hifly + High Flyer (Mdm) (v4.1) (Scorpion 2/3) + + + sc2hifly2 + High Flyer (Mdm) (v3.1) (Scorpion 2/3) + + + sc2hifly3 + High Flyer (Mdm) (v2.1) (Scorpion 2/3) + + + sc2hifly4 + High Flyer (Mdm) (v?.?) (Scorpion 2/3) + + + sc2hypr + Hyperactive (Bellfruit) (set 1, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2hypr1 + Hyperactive (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2hypr1p + Hyperactive (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2hyprp + Hyperactive (Bellfruit) (set 1, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2inst + Instant Jackpot (Bellfruit) (set 6, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2inst1 + Instant Jackpot (Bellfruit) (set 7, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2inst1p + Instant Jackpot (Bellfruit) (set 7, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2inst2 + Instant Jackpot (Bellfruit) (set 4, UK) (Scorpion 2/3) + + + sc2inst2p + Instant Jackpot (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3) + + + sc2inst3 + Instant Jackpot (Bellfruit) (set 5, UK, 8GBP Jackpot) (Scorpion 2/3) + + + sc2inst3p + Instant Jackpot (Bellfruit) (set 5, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2inst4 + Instant Jackpot (Bellfruit) (set 3, UK) (Scorpion 2/3) + + + sc2inst4p + Instant Jackpot (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3) + + + sc2inst5 + Instant Jackpot (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2inst6 + Instant Jackpot (Bellfruit) (set 2, UK) (Scorpion 2/3) + + + sc2instp + Instant Jackpot (Bellfruit) (set 6, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2kcclb + King Cash Club (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2kcclb1 + King Cash Club (Bellfruit) (set 2, UK) (Scorpion 2/3) + + + sc2kcclb1p + King Cash Club (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3) + + + sc2kcclbp + King Cash Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2luvv + Luvvly Jubbly (set 3, UK, Multisite 10GBP/25p) (Scorpion 2/3) + + + sc2luvv1 + Luvvly Jubbly (set 3, UK, Multisite 10GBP/20p) (Scorpion 2/3) + + + sc2luvv1p + Luvvly Jubbly (set 3, UK, Multisite 10GBP/20p, Protocol) (Scorpion 2/3) + + + sc2luvv2 + Luvvly Jubbly (set 2, UK, Multisite) (Scorpion 2/3) + + + sc2luvv2p + Luvvly Jubbly (set 2, UK, Multisite, Protocol) (Scorpion 2/3) + + + sc2luvv4 + Luvvly Jubbly (set 4, UK, Multisite 4GBP/5p) (Scorpion 2/3) + + + sc2luvv4p + Luvvly Jubbly (set 4, UK, Multisite 4GBP/5p, Protocol) (Scorpion 2/3) + + + sc2luvv6p + Luvvly Jubbly (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2luvvp + Luvvly Jubbly (set 3, UK, Multisite 10GBP/25p, Protocol) (Scorpion 2/3) + + + sc2maina + Main Attraction (Bellfruit) (Scorpion 2/3) + + + sc2majes + Majestic Bells (Bellfruit) (set 1) (set 1) + + + sc2majesp + Majestic Bells (Bellfruit) (set 1, Protocol) (set 2) + + + sc2mam + Make A Million (Bellfruit) (set 4, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2mam1 + Make A Million (Bellfruit) (set 5, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2mam1p + Make A Million (Bellfruit) (set 5, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2mam2 + Make A Million (Bellfruit) (set 3, UK, 8GBP Jackpot) (Scorpion 2/3) + + + sc2mam2p + Make A Million (Bellfruit) (set 3, UK, 8GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2mam3 + Make A Million (Bellfruit) (set 2, UK) (Scorpion 2/3) + + + sc2mam3a + Make A Million (Bellfruit) (set 2, UK, alt) (Scorpion 2/3) + + + sc2mam3p + Make A Million (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3) + + + sc2mam4 + Make A Million (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2mam4p + Make A Million (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2mamcl + Make A Million Club (Bellfruit) (set 3, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2mamcl1 + Make A Million Club (Bellfruit) (set 4, UK) (Scorpion 2/3) + + + sc2mamcl1p + Make A Million Club (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3) + + + sc2mamcl2 + Make A Million Club (Bellfruit) (set 2, UK) (Scorpion 2/3) + + + sc2mamcl2p + Make A Million Club (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3) + + + sc2mamcl3 + Make A Million Club (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2mamclp + Make A Million Club (Bellfruit) (set 3, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2mamp + Make A Million (Bellfruit) (set 4, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2motd + Match Of The Day (Bellfruit) (set 9, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2motd1 + Match Of The Day (Bellfruit) (set 7, UK, 10GBP Jackpot, 1st Triennial) (Scorpion 2/3) + + + sc2motd1p + Match Of The Day (Bellfruit) (set 7, UK, 10GBP Jackpot, 1st Triennial, Protocol) (Scorpion 2/3) + + + sc2motd2 + Match Of The Day (Bellfruit) (set 8, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2motd2p + Match Of The Day (Bellfruit) (set 8, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2motd3 + Match Of The Day (Bellfruit) (set 6, UK) (Scorpion 2/3) + + + sc2motd3p + Match Of The Day (Bellfruit) (set 6, UK, Protocol) (Scorpion 2/3) + + + sc2motd4 + Match Of The Day (Bellfruit) (set 3, UK, Arcade) (Scorpion 2/3) + + + sc2motd4p + Match Of The Day (Bellfruit) (set 3, UK, Arcade, Protocol) (Scorpion 2/3) + + + sc2motd5 + Match Of The Day (Bellfruit) (set 2, UK, Single Site) (Scorpion 2/3) + + + sc2motd5p + Match Of The Day (Bellfruit) (set 2, UK, Single Site, Protocol) (Scorpion 2/3) + + + sc2motd6 + Match Of The Day (Bellfruit) (set 4, Irish, 8GBP Jackpot) (Scorpion 2/3) + + + sc2motd6p + Match Of The Day (Bellfruit) (set 4, Irish, 8GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2motd7 + Match Of The Day (Bellfruit) (set 5, UK) (Scorpion 2/3) + + + sc2motd8p + Match Of The Day (Bellfruit) (set 5, UK, Protocol) (Scorpion 2/3) + + + sc2motd9 + Match Of The Day (Bellfruit) (set 1, Irish) (Scorpion 2/3) + + + sc2motdp + Match Of The Day (Bellfruit) (set 9, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2ofool + Only Fools & Horses (Bellfruit) (set 3) (Scorpion 2/3) + + + sc2ofool1 + Only Fools & Horses (Bellfruit) (set 1) (Scorpion 2/3) + + + sc2ofool2 + Only Fools & Horses (Bellfruit) (set 4) (Scorpion 2/3) + + + sc2ofool3 + Only Fools & Horses (Bellfruit) (set 2) (Scorpion 2/3) + + + sc2ofool4 + Only Fools & Horses (Bellfruit) (set 5) (Scorpion 2/3) + + + sc2olgld + Olympic Gold (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2olgld1 + Olympic Gold (Bellfruit) (set 2, UK, 10GBP Jackpot) (Scorpion 2/3) + + + sc2olgld1p + Olympic Gold (Bellfruit) (set 2, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc2olgldp + Olympic Gold (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2payr + Pay Roll Casino (Bellfruit/Mazooma) (Scorpion 2/3) + + + sc2pe1g + Public Enemy No.1 (Bellfruit) [German] (Scorpion 2/3) + + + sc2pick + Pick Of The Bunch (Global) (v2.3) (Scorpion 2/3) + + + sc2pickc + Pick Of The Bunch (Club?) (Global) (v1.9) (Scorpion 2/3) + + + sc2pickcp + Pick Of The Bunch (Club?) (Global) (v1.9 Protocol) (Scorpion 2/3) + + + sc2pickp + Pick Of The Bunch (Global) (v2.3 Protocol) (Scorpion 2/3) + + + sc2prem + Premier Club Manager (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2prem1 + Premier Club Manager (Bellfruit) (set 3, UK) (Scorpion 2/3) + + + sc2prem1p + Premier Club Manager (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3) + + + sc2prem2 + Premier Club Manager (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2prom + Along The Prom (Bellfruit) (Scorpion 2/3) + + + sc2ptytm + Party Time (Bellfruit) (set 2) (Scorpion 2/3) + + + sc2ptytm1 + Party Time (Bellfruit) (set 1) (Scorpion 2/3) + + + sc2ptytmp + Party Time (Bellfruit) (set 2, Protocol) (Scorpion 2/3) + + + sc2relgm + Reel Gems (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2relgm1p + Reel Gems (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3) + + + sc2relgmp + Reel Gems (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2rock + How Big's Your Rock? (Global) (v1.5) (Scorpion 2/3) + + + sc2rock1 + How Big's Your Rock? (Global) (v1.4) (Scorpion 2/3) + + + sc2rock1p + How Big's Your Rock? (Global) (v1.4 Protocol) (Scorpion 2/3) + + + sc2rocke + How Big's Your Rock? (Global) (v?.? Euro) (Scorpion 2/3) + + + sc2rockp + How Big's Your Rock? (Global) (v1.5 Protocol) (Scorpion 2/3) + + + sc2scc + Safe Cracker Club (Mdm) (v4.4) (Scorpion 2/3) + + + sc2scshx + Super Cash X (Concept) + + + sc2scshxcas + Super Casino Cash X (Concept) + + + sc2scshxgman + Super Cash X (Concept) (Gamesman Hardware) + + + sc2scshxstar + Super Cash X (Concept) (Starpoint Hardware) + + + sc2sghst + Super Ghost (Concept) + + + sc2showt + Showtime Spectacular (Bellfruit) (set 4, UK) (Scorpion 2/3) + + + sc2showt1 + Showtime Spectacular (Bellfruit) (set 5, UK) (Scorpion 2/3) + + + sc2showt1p + Showtime Spectacular (Bellfruit) (set 5, UK, Protocol) (Scorpion 2/3) + + + sc2showt2 + Showtime Spectacular (Bellfruit) (set 3, UK) (Scorpion 2/3) + + + sc2showt2p + Showtime Spectacular (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3) + + + sc2showt3 + Showtime Spectacular (Bellfruit) (set 2, UK) (Scorpion 2/3) + + + sc2showt3p + Showtime Spectacular (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3) + + + sc2showt4 + Showtime Spectacular (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2showt4p + Showtime Spectacular (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2showtp + Showtime Spectacular (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3) + + + sc2smnud + Super Multi Nudger (Concept) + + + sc2sstar + Super Star (Bellfruit) (set 2, UK, 3rd Triennial) (Scorpion 2/3) + + + sc2sstar1 + Super Star (Bellfruit) (set 1, UK, 2nd Triennial) (Scorpion 2/3) + + + sc2sstar1p + Super Star (Bellfruit) (set 1, UK, 2nd Triennial, Protocol) (Scorpion 2/3) + + + sc2sstar2 + Super Star (Bellfruit) (set 4, UK, 2nd Triennial) (Scorpion 2/3) + + + sc2sstar2p + Super Star (Bellfruit) (set 4, UK, 2nd Triennial, Protocol) (Scorpion 2/3) + + + sc2sstar3 + Super Star (Bellfruit) (set 3, UK, 2nd Triennial) (Scorpion 2/3) + + + sc2sstar3p + Super Star (Bellfruit) (set 3, UK, 2nd Triennial, Protocol) (Scorpion 2/3) + + + sc2sstarp + Super Star (Bellfruit) (set 2, UK, 3rd Triennial, Protocol) (Scorpion 2/3) + + + sc2suprz + Surprise Surprize (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2suprz1 + Surprise Surprize (Bellfruit) (set 2, UK) (Scorpion 2/3) + + + sc2suprz1p + Surprise Surprize (Bellfruit) (set 2, UK, Protocol) (Scorpion 2/3) + + + sc2suprz2 + Surprise Surprize (Bellfruit) (set 4, UK) (Scorpion 2/3) + + + sc2suprz2p + Surprise Surprize (Bellfruit) (set 4, UK, Protocol) (Scorpion 2/3) + + + sc2suprz3 + Surprise Surprize (Bellfruit) (set 3, UK) (Scorpion 2/3) + + + sc2suprzp + Surprise Surprize (Bellfruit) (set 1, UK, Protocol)(Scorpion 2/3) + + + sc2topwk + Top Wack (Bellfruit) (set 1, UK, 10GBP Jackpot, 1st Triennial) (Scorpion 2/3) + + + sc2topwkp + Top Wack (Bellfruit) (set 1, UK, 10GBP Jackpot, 1st Triennial, Protocol) (Scorpion 2/3) + + + sc2town + Round The Town (Bellfruit) (set 6) (Scorpion 2/3) + + + sc2town1 + Round The Town (Bellfruit) (set 4) (Scorpion 2/3) + + + sc2town1a + Round The Town (Bellfruit) (set 4, alt) (Scorpion 2/3) + + + sc2town1p + Round The Town (Bellfruit) (set 4, Protocol) (Scorpion 2/3) + + + sc2town2 + Round The Town (Bellfruit) (set 2) (Scorpion 2/3) + + + sc2town3 + Round The Town (Bellfruit) (set 3) (Scorpion 2/3) + + + sc2town3p + Round The Town (Bellfruit) (set 3, Protocol) (Scorpion 2/3) + + + sc2town4 + Round The Town (Bellfruit) (set 1) (Scorpion 2/3) + + + sc2town5 + Round The Town (Bellfruit) (set 5) (Scorpion 2/3) + + + sc2townp + Round The Town (Bellfruit) (set 6, Protocol) (Scorpion 2/3) + + + sc2wembl + Match Of The Day - Road To Wembley (Bellfruit) (set 8, UK, 10GBP Jackpot, 15RM motor) (Scorpion 2/3) + + + sc2wembl1 + Match Of The Day - Road To Wembley (Bellfruit) (set 6, UK, 15RM motor) (Scorpion 2/3) + + + sc2wembl10 + Match Of The Day - Road To Wembley (Bellfruit) (set 5, Irish, 8GBP Jackpot, 16RM motor) (Scorpion 2/3) + + + sc2wembl1p + Match Of The Day - Road To Wembley (Bellfruit) (set 6, UK, 15RM motor, Protocol) (Scorpion 2/3) + + + sc2wembl2 + Match Of The Day - Road To Wembley (Bellfruit) (set 7, UK) (Scorpion 2/3) + + + sc2wembl2p + Match Of The Day - Road To Wembley (Bellfruit) (set 7, UK, Protocol) (Scorpion 2/3) + + + sc2wembl4p + Match Of The Day - Road To Wembley (Bellfruit) (set 3, UK, Protocol) (Scorpion 2/3) + + + sc2wembl5a + Match Of The Day - Road To Wembley (Bellfruit) (set 2, UK, 16RM motor) (Scorpion 2/3) + + + sc2wembl5ap + Match Of The Day - Road To Wembley (Bellfruit) (set 2, UK, 16RM motor, Protocol) (Scorpion 2/3) + + + sc2wembl6ap + Match Of The Day - Road To Wembley (Bellfruit) (set 4, Arcade, 16RM motor, Protocol) (Scorpion 2/3) + + + sc2wembl7a + Match Of The Day - Road To Wembley (Bellfruit) (set 1, UK, 8GBP Jackpot, 16RM motor) (Scorpion 2/3) + + + sc2wembl7ap + Match Of The Day - Road To Wembley (Bellfruit) (set 5, Irish, 8GBP Jackpot, 16RM motor, Protocol) (Scorpion 2/3) + + + sc2wembl8 + Match Of The Day - Road To Wembley (Bellfruit) (set 3, UK) (Scorpion 2/3) + + + sc2wembl9 + Match Of The Day - Road To Wembley (Bellfruit) (set 4, Arcade, 16RM motor) (Scorpion 2/3) + + + sc2wemblm + Match Of The Day - Road To Wembley (Bellfruit/Mazooma) (Scorpion 2/3) + + + sc2wemblp + Match Of The Day - Road To Wembley (Bellfruit) (set 8, UK, 10GBP Jackpot, 15RM motor, Protocol) (Scorpion 2/3) + + + sc2winst + Winning Streak (Bellfruit) (set 1) (Scorpion 2) + + + sc2winstb + Winning Streak (Bellfruit) (set 3) (Scorpion 2) + + + sc2winstbp + Winning Streak (Bellfruit) (set 3, Protocol) (Scorpion 2) + + + sc2winstd + Winning Streak (Bellfruit) (set 2) (Scorpion 2) + + + sc2winstdp + Winning Streak (Bellfruit) (set 2, Protocol) (Scorpion 2) + + + sc2winste + Winning Streak (Bellfruit) (set 4) (Scorpion 2) + + + sc2winstep + Winning Streak (Bellfruit) (set 4, Protocol) (Scorpion 2) + + + sc2winstf + Winning Streak (Bellfruit) (set 6) (Scorpion 2) + + + sc2winstfp + Winning Streak (Bellfruit) (set 6, Protocol) (Scorpion 2) + + + sc2winstg + Winning Streak (Bellfruit) (set 5) (Scorpion 2) + + + sc2winstp + Winning Streak (Bellfruit) (set 1, Protocol) (Scorpion 2) + + + sc2wwcl + Wild West Club (Bellfruit) (set 2, UK, 250GBP Jackpot) (Scorpion 2/3) + + + sc2wwcl1 + Wild West Club (Bellfruit) (set 1, UK) (Scorpion 2/3) + + + sc2wwcl1p + Wild West Club (Bellfruit) (set 1, UK, Protocol) (Scorpion 2/3) + + + sc2wwclp + Wild West Club (Bellfruit) (set 2, UK, 250GBP Jackpot, Protocol) (Scorpion 2/3) + + + sc4a40 + Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 1) + + + sc4a40a + Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 2) + + + sc4a40b + Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 3) + + + sc4a40c + Around The Board In 40 Days (Mazooma) (Scorpion 4) (set 4) + + + sc4a40cl + Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 1) + + + sc4a40cla + Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 2) + + + sc4a40clb + Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 3) + + + sc4a40clc + Around The Board In 40 Days Club (Mazooma) (Scorpion 4) (set 4) + + + sc4abra + Abracadabra (Qps) (Scorpion 4) (set 1, 041) + + + sc4abraa + Abracadabra (Qps) (Scorpion 4) (set 2, 041) + + + sc4abrab + Abracadabra (Qps) (Scorpion 4) (set 3, 044) + + + sc4abrac + Abracadabra (Qps) (Scorpion 4) (set 4, 044) + + + sc4abrad + Abracadabra (Qps) (Scorpion 4) (set 5, 014) + + + sc4abrae + Abracadabra (Qps) (Scorpion 4) (set 6, 014) + + + sc4acesh + Aces High (Mazooma) (Scorpion 4) (set 1) + + + sc4acesha + Aces High (Mazooma) (Scorpion 4) (set 2) + + + sc4aceshb + Aces High (Mazooma) (Scorpion 4) (set 3) + + + sc4aceshc + Aces High (Mazooma) (Scorpion 4) (set 4) + + + sc4adjb + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 1) + + + sc4adjba + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 2) + + + sc4adjbb + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 3) + + + sc4adjbc + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 4) + + + sc4adjbd + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 5) + + + sc4adjbe + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 6) + + + sc4adjbf + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 7) + + + sc4adjbg + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 8) + + + sc4adjbh + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 9) + + + sc4adjbi + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 10) + + + sc4adren + Adrenalin (Mazooma) (Scorpion 4) (set 1) + + + sc4adrena + Adrenalin (Mazooma) (Scorpion 4) (set 2) + + + sc4adrenb + Adrenalin (Mazooma) (Scorpion 4) (set 3) + + + sc4adrenc + Adrenalin (Mazooma) (Scorpion 4) (set 4) + + + sc4adsnt + Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 4) (set 1) + + + sc4adsnta + Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 4) (set 2) + + + sc4adwta + Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 4) (set 1) + + + sc4adwtaa + Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 4) (set 2) + + + sc4alad + Aladdin's Cave (Mazooma) (Scorpion 4) (set 1) + + + sc4alada + Aladdin's Cave (Mazooma) (Scorpion 4) (set 2) + + + sc4aztec + Aztec Casino (Dutch) (Bellfruit) (Scorpion 4) + + + sc4azteca + Aztec (Dutch) (Bellfruit) (Scorpion 4) + + + sc4bankb + Bankety Bank (Qps) (Scorpion 4) (set 1) + + + sc4bankba + Bankety Bank (Qps) (Scorpion 4) (set 2) + + + sc4bantm + Bantam Of The Opera (Mazooma) (Scorpion 4) (set 1) + + + sc4bantma + Bantam Of The Opera (Mazooma) (Scorpion 4) (set 2) + + + sc4bantmb + Bantam Of The Opera (Mazooma) (Scorpion 4) (set 3) + + + sc4bantmc + Bantam Of The Opera (Mazooma) (Scorpion 4) (set 4) + + + sc4bar7 + Bar 7's (PR1433) (Bellfruit) (Scorpion 4) (set 1) + + + sc4bar7a + Bar 7's (PR1433) (Bellfruit) (Scorpion 4) (set 2) + + + sc4bar7b + Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 1) + + + sc4bar7c + Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 2) + + + sc4bar7d + Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 3) + + + sc4bar7e + Bar 7's (PR1438) (Bellfruit) (Scorpion 4) (Top Box?, set 4) + + + sc4batl + Battleships & Cruisers (Bellfruit) (Scorpion 4) (set 1) + + + sc4batla + Battleships & Cruisers (Bellfruit) (Scorpion 4) (set 2) + + + sc4bb + Bankety Bank (Qps) (Scorpion 4) (set 3) + + + sc4bba + Bankety Bank (Qps) (Scorpion 4) (set 4) + + + sc4bbclb + Bankety Bank Club (V1.0) (Qps) (Scorpion 4) + + + sc4bbclba + Bankety Bank Club (V1.1) (Qps) (Scorpion 4) + + + sc4bbclbb + Bankety Bank Club (V411) (Qps) (Scorpion 4) (set 1) + + + sc4bbclbc + Bankety Bank Club (V411) (Qps) (Scorpion 4) (set 2) + + + sc4bblas + Big Blaster (Mazooma) (Scorpion 4) (set 1) + + + sc4bblasa + Big Blaster (Mazooma) (Scorpion 4) (set 2) + + + sc4bblasb + Big Blaster (Mazooma) (Scorpion 4) (set 3) + + + sc4bblasc + Big Blaster (Mazooma) (Scorpion 4) (set 4) + + + sc4bblasd + Big Blaster (Mazooma) (Scorpion 4) (set 5) + + + sc4bblase + Big Blaster (Mazooma) (Scorpion 4) (set 6) + + + sc4bblasf + Big Blaster (Mazooma) (Scorpion 4) (set 7) + + + sc4bbust + Blockbuster (Mazooma) (Scorpion 4) + + + sc4bed + Bedazzled (Mazooma) (Scorpion 4) (set 1) + + + sc4beda + Bedazzled (Mazooma) (Scorpion 4) (set 2) + + + sc4bedb + Bedazzled (Mazooma) (Scorpion 4) (set 3) + + + sc4bedc + Bedazzled (Mazooma) (Scorpion 4) (set 4) + + + sc4bedcl + Bedazzled Club (Mazooma) (Scorpion 4) (set 1) + + + sc4bedcla + Bedazzled Club (Mazooma) (Scorpion 4) (set 2) + + + sc4bedclb + Bedazzled Club (Mazooma) (Scorpion 4) (set 3) + + + sc4bedclc + Bedazzled Club (Mazooma) (Scorpion 4) (set 4) + + + sc4bedcld + Bedazzled Club (Mazooma) (Scorpion 4) (set 5) + + + sc4bedd + Bedazzled (Mazooma) (Scorpion 4) (set 5) + + + sc4bede + Bedazzled (Mazooma) (Scorpion 4) (set 6) + + + sc4bgold + Black Gold (Nova) (Scorpion 4) (set 1) + + + sc4bgolda + Black Gold (Nova) (Scorpion 4) (set 2) + + + sc4bigdl + Big Deal (Qps) (Scorpion 4) (set 1) + + + sc4bigdla + Big Deal (Qps) (Scorpion 4) (set 2) + + + sc4bingb + Bingo Belle (Mazooma) (Scorpion 4) (set 1) + + + sc4bingba + Bingo Belle (Mazooma) (Scorpion 4) (set 2) + + + sc4blast + Blast Off (011) (Qps) (Scorpion 4) (set 1) + + + sc4blasta + Blast Off (041) (Qps) (Scorpion 4) (set 1) + + + sc4blastb + Blast Off (011) (Qps) (Scorpion 4) (set 2) + + + sc4blastc + Blast Off (041) (Qps) (Scorpion 4) (set 2) + + + sc4blastd + Blast Off (042) (Qps) (Scorpion 4) (set 1) + + + sc4blaste + Blast Off (042) (Qps) (Scorpion 4) (set 2) + + + sc4blokq + Blockbuster (Qps) (Scorpion 4) (set 1) + + + sc4blokqa + Blockbuster (Qps) (Scorpion 4) (set 2) + + + sc4blokqb + Blockbuster (Qps) (Scorpion 4) (set 3) + + + sc4blokqc + Blockbuster (Qps) (Scorpion 4) (set 4) + + + sc4blokqd + Blockbuster (Qps) (Scorpion 4) (set 5) + + + sc4blokqe + Blockbuster (Qps) (Scorpion 4) (set 6) + + + sc4blue + Blue Rinse (Mazooma) (Scorpion 4) (set 1) + + + sc4bluea + Blue Rinse (Mazooma) (Scorpion 4) (set 2) + + + sc4blueb + Blue Rinse (Mazooma) (Scorpion 4) (set 3) + + + sc4bluec + Blue Rinse (Mazooma) (Scorpion 4) (set 4) + + + sc4blued + Blue Rinse (Mazooma) (Scorpion 4) (set 5) + + + sc4bluee + Blue Rinse (Mazooma) (Scorpion 4) (set 6) + + + sc4bob + Bobby Dazzler (Mazooma) (Scorpion 4) (set 1) + + + sc4boba + Bobby Dazzler (Mazooma) (Scorpion 4) (set 2) + + + sc4bobb + Bobby Dazzler (Mazooma) (Scorpion 4) (set 3) + + + sc4bobc + Bobby Dazzler (Mazooma) (Scorpion 4) (set 4) + + + sc4bobcl + Bobby Dazzler Club (Mazooma) (Scorpion 4) (set 1) + + + sc4bobcla + Bobby Dazzler Club (Mazooma) (Scorpion 4) (set 2) + + + sc4bobd + Bobby Dazzler (Mazooma) (Scorpion 4) (set 5) + + + sc4bobe + Bobby Dazzler (Mazooma) (Scorpion 4) (set 6) + + + sc4bobf + Bobby Dazzler (Mazooma) (Scorpion 4) (set 7) + + + sc4bobg + Bobby Dazzler (Mazooma) (Scorpion 4) (set 8) + + + sc4bobh + Bobby Dazzler (Mazooma) (Scorpion 4) (set 9) + + + sc4bobi + Bobby Dazzler (Mazooma) (Scorpion 4) (set 10) + + + sc4bonbx + Bar X (Mazooma) (Scorpion 4) (set 1) + + + sc4bonbxa + Bar X (Mazooma) (Scorpion 4) (set 6) + + + sc4bonbxb + Bar X (Mazooma) (Scorpion 4) (set 7) + + + sc4bonbxc + Bar X (Mazooma) (Scorpion 4) (set 2) + + + sc4bonbxd + Bar X (Mazooma) (Scorpion 4) (set 3) + + + sc4bonbxe + Bar X (Mazooma) (Scorpion 4) (set 4) + + + sc4bonbxf + Bar X (Mazooma) (Scorpion 4) (set 5) + + + sc4bonbxg + Bar X (Mazooma) (Scorpion 4) (set 8) + + + sc4bonbxh + Bar X (Mazooma) (Scorpion 4) (set 9) + + + sc4bonbxi + Bar X (Mazooma) (Scorpion 4) (set 10) + + + sc4bonbxj + Bar X (Mazooma) (Scorpion 4) (set 11) + + + sc4bonbxk + Bar X (Mazooma) (Scorpion 4) (set 12) + + + sc4bonbxl + Bar X (Mazooma) (Scorpion 4) (set 13) + + + sc4boomb + Monopoly Boom Or Bust (Bellfruit) (Scorpion 4) (set 1) + + + sc4boomba + Monopoly Boom Or Bust (Bellfruit) (Scorpion 4) (set 2) + + + sc4botn + Back Of The Net (Qps) (Scorpion 4) (set 1, 011) + + + sc4botna + Back Of The Net (Qps) (Scorpion 4) (set 2, 011) + + + sc4bpb + Bully's Prize Board (Bellfruit) (Scorpion 4) (set 1) + + + sc4bpba + Bully's Prize Board (Bellfruit) (Scorpion 4) (set 3) + + + sc4bpbb + Bully's Prize Board (Bellfruit) (Scorpion 4) (set 4) + + + sc4bpbc + Bully's Prize Board (Bellfruit) (Scorpion 4) (set 2) + + + sc4bpbd + Bully's Prize Board (Bellfruit) (Scorpion 4) (set 5) + + + sc4bpbe + Bully's Prize Board (Bellfruit) (Scorpion 4) (set 6) + + + sc4brix + Brix (German) (Nova) (Scorpion 4) (set 1) + + + sc4brixa + Brix (German) (Nova) (Scorpion 4) (set 2) + + + sc4brixb + Brix (German) (Nova) (Scorpion 4) (set 3) + + + sc4brkfs + The Big Breakfast (BFM) (Scorpion 4) (set 1) + + + sc4brkfsa + The Big Breakfast (BFM) (Scorpion 4) (set 2) + + + sc4brkfsb + The Big Breakfast (BFM) (Scorpion 4) (set 3) + + + sc4brkfsc + The Big Breakfast (BFM) (Scorpion 4) (set 4) + + + sc4brksp + Break The Spell (Mazooma) (Scorpion 4) (set 1) + + + sc4brkspa + Break The Spell (Mazooma) (Scorpion 4) (set 2) + + + sc4broll + Bank Roll (Mazooma) (Scorpion 4) (set 1) + + + sc4brolla + Bank Roll (Mazooma) (Scorpion 4) (set 2) + + + sc4brollb + Bank Roll (Mazooma) (Scorpion 4) (set 3) + + + sc4brollc + Bank Roll (Mazooma) (Scorpion 4) (set 4) + + + sc4bsp + Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 1) + + + sc4bspa + Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 2) + + + sc4bspb + Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 3) + + + sc4bspc + Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 4) + + + sc4bspd + Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 5) + + + sc4bspe + Bully's Star Prize (PR3042) (Bellfruit) (Scorpion 4) (set 1) + + + sc4bspf + Bully's Star Prize (PR3042) (Bellfruit) (Scorpion 4) (set 2) + + + sc4bspg + Bully's Star Prize (PR3040) (Bellfruit) (Scorpion 4) (set 6) + + + sc4bugs + Bugs Money (Bellfruit) (Scorpion 4) (set 1) + + + sc4bugsa + Bugs Money (Bellfruit) (Scorpion 4) (set 2) + + + sc4bugsb + Bugs Money (Bellfruit) (Scorpion 4) (set 3) + + + sc4bugsc + Bugs Money (Bellfruit) (Scorpion 4) (set 4) + + + sc4bulcl + Bullseye Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4bulcla + Bullseye Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4bulclb + Bullseye Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4bulclc + Bullseye Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4bulcld + Bullseye Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4bulcle + Bullseye Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4bulclf + Bullseye Club (Bellfruit) (Scorpion 4) (set 7) + + + sc4bulclg + Bullseye Club (Bellfruit) (Scorpion 4) (set 8) + + + sc4bulclh + Bullseye Club (Bellfruit) (Scorpion 4) (set 9) + + + sc4bulcli + Bullseye Club (Bellfruit) (Scorpion 4) (set 10) + + + sc4bulcs + Bullseye Classic (Bellfruit) (Scorpion 4) (set 1) + + + sc4bulcsa + Bullseye Classic (Bellfruit) (Scorpion 4) (set 2) + + + sc4bulcsb + Bullseye Classic (Bellfruit) (Scorpion 4) (set 3) + + + sc4bulcsc + Bullseye Classic (Bellfruit) (Scorpion 4) (set 4) + + + sc4bull + Bullseye (Bellfruit) (Scorpion 4) (set 1) + + + sc4bulla + Bullseye (Bellfruit) (Scorpion 4) (set 2) + + + sc4bullb + Bullseye (Bellfruit) (Scorpion 4) (set 3) + + + sc4bullc + Bullseye (Bellfruit) (Scorpion 4) (set 4) + + + sc4butch + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 1) + + + sc4butcha + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 2) + + + sc4butchb + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 3) + + + sc4butchc + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 4) + + + sc4butchd + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 5) + + + sc4butche + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 6) + + + sc4butchf + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 7) + + + sc4butchg + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 4) (set 8) + + + sc4bwow + Wheel Of Wealth (Bellfruit) (PR1726) (Scorpion 4) (WHEL013, set 1) + + + sc4bwowa + Wheel Of Wealth (Bellfruit) (PR1726) (Scorpion 4) (WHEL013, set 2) + + + sc4cabin + Cabin Fever (Mazooma) (Scorpion 4) (set 1) + + + sc4cabina + Cabin Fever (Mazooma) (Scorpion 4) (set 2) + + + sc4cabinb + Cabin Fever (Mazooma) (Scorpion 4) (set 3) + + + sc4cabinc + Cabin Fever (Mazooma) (Scorpion 4) (set 4) + + + sc4cabind + Cabin Fever (Mazooma) (Scorpion 4) (set 5) + + + sc4cabine + Cabin Fever (Mazooma) (Scorpion 4) (set 6) + + + sc4cabinf + Cabin Fever (Mazooma) (Scorpion 4) (set 7) + + + sc4cabing + Cabin Fever (Mazooma) (Scorpion 4) (set 8) + + + sc4cabinh + Cabin Fever (Mazooma) (Scorpion 4) (set 9) + + + sc4cabini + Cabin Fever (Mazooma) (Scorpion 4) (set 10) + + + sc4cabinj + Cabin Fever (Mazooma) (Scorpion 4) (set 11) + + + sc4cabink + Cabin Fever (Mazooma) (Scorpion 4) (set 12) + + + sc4cabinl + Cabin Fever (Mazooma) (Scorpion 4) (set 13) + + + sc4cabinm + Cabin Fever (Mazooma) (Scorpion 4) (set 14) + + + sc4cad + Cash Adder (V1.0) (Qps) (Scorpion 4) (set 1) + + + sc4cada + Cash Adder (V1.0) (Qps) (Scorpion 4) (set 2) + + + sc4cadb + Cash Adder (V011) (Qps) (Scorpion 4) (set 1) + + + sc4cadc + Cash Adder (V041) (Qps) (Scorpion 4) (set 1) + + + sc4cadcl + Cash Adder Club (411) (Qps) (Scorpion 4) (set 1) + + + sc4cadcla + Cash Adder Club (411) (Qps) (Scorpion 4) (set 2) + + + sc4cadd + Cash Adder (V012) (Qps) (Scorpion 4) (set 1) + + + sc4cade + Cash Adder (V042) (Qps) (Scorpion 4) (set 1) + + + sc4cadf + Cash Adder (V1.0) (Qps) (Scorpion 4) (set 3) + + + sc4cadg + Cash Adder (V1.0) (Qps) (Scorpion 4) (set 4) + + + sc4cadh + Cash Adder (V011) (Qps) (Scorpion 4) (set 2) + + + sc4cadi + Cash Adder (V041) (Qps) (Scorpion 4) (set 2) + + + sc4cadj + Cash Adder (V012) (Qps) (Scorpion 4) (set 2) + + + sc4cadk + Cash Adder (V042) (Qps) (Scorpion 4) (set 2) + + + sc4cadl + Cash Adder (V013) (Qps) (Scorpion 4) (set 1) + + + sc4cadm + Cash Adder (V013) (Qps) (Scorpion 4) (set 2) + + + sc4cadn + Cash Adder (V014) (Qps) (Scorpion 4) (set 1) + + + sc4cado + Cash Adder (V043) (Qps) (Scorpion 4) (set 1) + + + sc4cadp + Cash Adder (V014) (Qps) (Scorpion 4) (set 2) + + + sc4cadq + Cash Adder (V043) (Qps) (Scorpion 4) (set 2) + + + sc4canca + Can Can Cash Casino (Mazooma) (Scorpion 4) (set 1) + + + sc4cancaa + Can Can Cash Casino (Mazooma) (Scorpion 4) (set 2) + + + sc4cancab + Can Can Cash Casino (Mazooma) (Scorpion 4) (set 3) + + + sc4cancac + Can Can Cash Casino (Mazooma) (Scorpion 4) (set 4) + + + sc4captn + Captain Cash (Qps) (Scorpion 4) (set 1) + + + sc4captna + Captain Cash (Qps) (Scorpion 4) (set 4) + + + sc4captnb + Captain Cash (Qps) (Scorpion 4) (set 2) + + + sc4captnc + Captain Cash (Qps) (Scorpion 4) (set 3) + + + sc4captnd + Captain Cash (Qps) (Scorpion 4) (set 5) + + + sc4captne + Captain Cash (Qps) (Scorpion 4) (set 6) + + + sc4captnf + Captain Cash (Qps) (Scorpion 4) (set 7) + + + sc4cari + Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 1) + + + sc4caria + Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 2) + + + sc4carib + Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 3) + + + sc4caric + Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 4) + + + sc4carid + Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 5) + + + sc4carie + Caribbean Cash (PR2326) (Mazooma) (Scorpion 4) (set 6) + + + sc4cariq + Caribbean Cash (Qps) (Scorpion 4) (set 1) + + + sc4cariqa + Caribbean Cash (Qps) (Scorpion 4) (set 2) + + + sc4cariqb + Caribbean Cash (Qps) (Scorpion 4) (set 3) + + + sc4cariqc + Caribbean Cash (Qps) (Scorpion 4) (set 4) + + + sc4cariqd + Caribbean Cash (Qps) (Scorpion 4) (set 5) + + + sc4cariqe + Caribbean Cash (Qps) (Scorpion 4) (set 6) + + + sc4cariqf + Caribbean Cash (Qps) (Scorpion 4) (set 7) + + + sc4cariqg + Caribbean Cash (Qps) (Scorpion 4) (set 8) + + + sc4carry + Carry On Winning (Bellfruit) (Scorpion 4) (set 1) + + + sc4carrya + Carry On Winning (Bellfruit) (Scorpion 4) (set 2) + + + sc4cashg + Cashanova (German) (Mazooma / Nova) (Scorpion 4) + + + sc4cashm + Cashanova (Mazooma) (Scorpion 4) (set 1) + + + sc4cashma + Cashanova (Mazooma) (Scorpion 4) (set 2) + + + sc4cashmb + Cashanova (Mazooma) (Scorpion 4) (set 3) + + + sc4cashmc + Cashanova (Mazooma) (Scorpion 4) (set 4) + + + sc4cashmd + Cashanova (Mazooma) (Scorpion 4) (set 5) + + + sc4cashme + Cashanova (Mazooma) (Scorpion 4) (set 6) + + + sc4cashn + Cashanova (Dutch) (Mazooma / Eurocoin) (Scorpion 4) + + + sc4casry + Casino Royale (PR2062) (Mazooma) (Scorpion 4) (set 1) + + + sc4casrya + Casino Royale (PR2073) (Czech) (Mazooma) (Scorpion 4) (set 1) + + + sc4casryb + Casino Royale (PR2073) (Czech) (Mazooma) (Scorpion 4) (set 2) + + + sc4casryc + Casino Royale (PR2062) (Mazooma) (Scorpion 4) (set 2) + + + sc4casryd + Casino Royale (PR2075) (Mazooma) (Scorpion 4) (set 1) + + + sc4casrye + Casino Royale (PR2075) (Mazooma) (Scorpion 4) (set 2) + + + sc4casxt + Casino Xtravaganza (Mazooma) (Scorpion 4) (set 1) + + + sc4casxta + Casino Xtravaganza (Mazooma) (Scorpion 4) (set 2) + + + sc4casxtb + Casino Xtravaganza (Mazooma) (Scorpion 4) (set 3) + + + sc4casxtc + Casino Xtravaganza (Mazooma) (Scorpion 4) (set 4) + + + sc4casxtd + Casino Xtravaganza (Mazooma) (Scorpion 4) (set 5) + + + sc4casxte + Casino Xtravaganza (Mazooma) (Scorpion 4) (set 6) + + + sc4cbaz + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4cbaza + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4cbazb + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4cbazc + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4cbazd + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4cbaze + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4cbazf + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 7) + + + sc4cbazg + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 8) + + + sc4cbazh + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 9) + + + sc4cbazi + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 10) + + + sc4cbazj + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 11) + + + sc4cbazk + Cash Bazaar Club (Bellfruit) (Scorpion 4) (set 12) + + + sc4cblas + Cash Blast (Voodoo Games) (Scorpion 4) (set 1) + + + sc4cblasa + Cash Blast (Voodoo Games) (Scorpion 4) (set 2) + + + sc4cburn + Cash 'n' Burn (Qps) (Scorpion 4) (set 1) + + + sc4cburna + Cash 'n' Burn (Qps) (Scorpion 4) (set 2) + + + sc4ccc + Criss Cross Crazy (Dutch) (Bellfruit) (Scorpion 4) + + + sc4cccsh + Criss Cross Cash (Mazooma) (Scorpion 4) (set 1) + + + sc4cccsha + Criss Cross Cash (Mazooma) (Scorpion 4) (set 2) + + + sc4cccshb + Criss Cross Cash (Mazooma) (Scorpion 4) (set 3) + + + sc4cccshc + Criss Cross Cash (Mazooma) (Scorpion 4) (set 4) + + + sc4cccshd + Criss Cross Cash (Mazooma) (Scorpion 4) (set 5) + + + sc4cccshe + Criss Cross Cash (Mazooma) (Scorpion 4) (set 6) + + + sc4cckey + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 1) + + + sc4cckeya + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 2) + + + sc4cckeyb + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 3) + + + sc4cckeyc + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 4) + + + sc4cckeyd + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 5) + + + sc4cckeye + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 6) + + + sc4cckeyf + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 7) + + + sc4cckeyg + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 8) + + + sc4cckeyh + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 9) + + + sc4cckeyi + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 11) + + + sc4cckeyj + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 10) + + + sc4cckeyk + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 12) + + + sc4cckeyl + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 13) + + + sc4cckeym + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 14) + + + sc4cckeyn + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 15) + + + sc4cckeyo + Casino Crazy Fruits Gold (Bellfruit) (Scorpion 4) (set 16) + + + sc4cclas + Club Class (Bellfruit) (Scorpion 4) (set 1) + + + sc4cclas0 + Club Class (Bellfruit) (Scorpion 4) (set 24) + + + sc4cclas1 + Club Class (Bellfruit) (Scorpion 4) (set 25) + + + sc4cclas2 + Club Class (Bellfruit) (Scorpion 4) (set 26) + + + sc4cclas3 + Club Class (Bellfruit) (Scorpion 4) (set 27) + + + sc4cclas4 + Club Class (Bellfruit) (Scorpion 4) (set 28) + + + sc4cclasa + Club Class (Bellfruit) (Scorpion 4) (set 2) + + + sc4cclasb + Club Class (Bellfruit) (Scorpion 4) (set 3) + + + sc4cclasc + Club Class (Bellfruit) (Scorpion 4) (set 4) + + + sc4cclasd + Club Class (Bellfruit) (Scorpion 4) (set 5) + + + sc4cclase + Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 1) + + + sc4cclasf + Club Class (Bellfruit) (Scorpion 4) (set 6) + + + sc4cclasg + Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 2) + + + sc4cclash + Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 3) + + + sc4cclasi + Club Class (Bellfruit) (Scorpion 4) (set 7) + + + sc4cclasj + Club Class (Bellfruit) (Scorpion 4) (set 8) + + + sc4cclask + Club Class (Bellfruit) (Scorpion 4) (set 9) + + + sc4cclasl + Club Class (Bellfruit) (Scorpion 4) (set 10) + + + sc4cclasm + Club Class (Bellfruit) (Scorpion 4) (set 11) + + + sc4cclasn + Club Class (Bellfruit) (Scorpion 4) (set 12) + + + sc4cclaso + Club Class (Bellfruit) (Scorpion 4) (set 13) + + + sc4cclasp + Club Class (65% Ferry) (Bellfruit) (Scorpion 4) (set 4) + + + sc4cclasq + Club Class (Bellfruit) (Scorpion 4) (set 14) + + + sc4cclasr + Club Class (Bellfruit) (Scorpion 4) (set 15) + + + sc4cclass + Club Class (Bellfruit) (Scorpion 4) (set 16) + + + sc4cclast + Club Class (Bellfruit) (Scorpion 4) (set 17) + + + sc4cclasu + Club Class (Bellfruit) (Scorpion 4) (set 18) + + + sc4cclasv + Club Class (Bellfruit) (Scorpion 4) (set 19) + + + sc4cclasw + Club Class (Bellfruit) (Scorpion 4) (set 20) + + + sc4cclasx + Club Class (Bellfruit) (Scorpion 4) (set 21) + + + sc4cclasy + Club Class (Bellfruit) (Scorpion 4) (set 22) + + + sc4cclasz + Club Class (Bellfruit) (Scorpion 4) (set 23) + + + sc4cclim + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 1) + + + sc4cclima + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 2) + + + sc4cclimb + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 3) + + + sc4cclimc + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 4) + + + sc4cclimd + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 5) + + + sc4cclime + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 13) + + + sc4cclimf + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 14) + + + sc4cclimg + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 15) + + + sc4cclimh + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 6) + + + sc4cclimi + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 7) + + + sc4cclimj + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 16) + + + sc4cclimk + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 17) + + + sc4ccliml + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 18) + + + sc4cclimm + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 8) + + + sc4cclimn + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 9) + + + sc4cclimo + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 10) + + + sc4cclimp + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 11) + + + sc4cclimq + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 19) + + + sc4cclimr + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 20) + + + sc4cclims + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 12) + + + sc4cclimt + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 21) + + + sc4cclimu + Casino Crazy Climber (Bellfruit) (Scorpion 4) (set 22) + + + sc4ccogs + Clever Cogs (Qps) (Scorpion 4) + + + sc4cconx + Cash Connexion (Mazooma) (Scorpion 4) (set 1) + + + sc4cconxa + Cash Connexion (Mazooma) (Scorpion 4) (set 2) + + + sc4cconxb + Cash Connexion (Mazooma) (Scorpion 4) (set 3) + + + sc4cconxc + Cash Connexion (Mazooma) (Scorpion 4) (set 4) + + + sc4cconxd + Cash Connexion (Mazooma) (Scorpion 4) (set 5) + + + sc4ccrus + Cash Crusaders (Mazooma) (Scorpion 4) (set 1) + + + sc4ccrusa + Cash Crusaders (Mazooma) (Scorpion 4) (set 2) + + + sc4ccrusb + Cash Crusaders (Mazooma) (Scorpion 4) (set 3) + + + sc4celeb + I'm A Celebrity (Bellfruit) (Scorpion 4) (set 1) + + + sc4celeba + I'm A Celebrity (Bellfruit) (Scorpion 4) (set 2) + + + sc4celebb + I'm A Celebrity (Bellfruit) (Scorpion 4) (set 3) + + + sc4celebc + I'm A Celebrity (Bellfruit) (Scorpion 4) (set 4) + + + sc4celebd + I'm A Celebrity (Bellfruit) (Scorpion 4) (set 5) + + + sc4cerup + Cash Eruption (Mazooma) (Scorpion 4) + + + sc4cexpl + Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 1) + + + sc4cexpla + Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 2) + + + sc4cexplb + Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 3) + + + sc4cexplc + Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 4) + + + sc4cexpld + Cash Explosion (PR2120) (Mazooma) (Scorpion 4) (set 1) + + + sc4cexple + Cash Explosion (PR2120) (Mazooma) (Scorpion 4) (set 2) + + + sc4cexplf + Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 5) + + + sc4cexplg + Cash Explosion (PR2076) (Mazooma) (Scorpion 4) (set 6) + + + sc4cfcas + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 1) + + + sc4cfcas0 + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 18) + + + sc4cfcas1 + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 19) + + + sc4cfcas2 + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 20) + + + sc4cfcas3 + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 9) + + + sc4cfcas4 + Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 1) + + + sc4cfcas5 + Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 2) + + + sc4cfcas6 + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 21) + + + sc4cfcas7 + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 22) + + + sc4cfcas8 + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 23) + + + sc4cfcas9 + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 10) + + + sc4cfcasa + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 2) + + + sc4cfcasaa + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 24) + + + sc4cfcasab + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 11) + + + sc4cfcasac + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 12) + + + sc4cfcasad + Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 3) + + + sc4cfcasae + Casino Crazy Fruits (CCFR) (Bellfruit) (Scorpion 4) (set 4) + + + sc4cfcasaf + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 25) + + + sc4cfcasag + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 26) + + + sc4cfcasah + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 27) + + + sc4cfcasai + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 28) + + + sc4cfcasaj + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 29) + + + sc4cfcasak + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 30) + + + sc4cfcasal + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 31) + + + sc4cfcasam + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 32) + + + sc4cfcasb + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 3) + + + sc4cfcasc + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 5) + + + sc4cfcasd + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 6) + + + sc4cfcase + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 4) + + + sc4cfcasf + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 5) + + + sc4cfcasg + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 7) + + + sc4cfcash + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 8) + + + sc4cfcasi + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 1) + + + sc4cfcasj + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 2) + + + sc4cfcask + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 6) + + + sc4cfcasl + Casino Crazy Fruits (ZYPF) (Bellfruit) (Scorpion 4) (set 2) + + + sc4cfcasm + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 7) + + + sc4cfcasn + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 3) + + + sc4cfcaso + Casino Crazy Fruits (ZYFR) (Bellfruit) (Scorpion 4) (set 4) + + + sc4cfcasp + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 8) + + + sc4cfcasq + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 9) + + + sc4cfcasr + Casino Crazy Fruits (ZYPF) (Bellfruit) (Scorpion 4) (set 1) + + + sc4cfcass + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 10) + + + sc4cfcast + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 11) + + + sc4cfcasu + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 12) + + + sc4cfcasv + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 13) + + + sc4cfcasw + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 14) + + + sc4cfcasx + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 15) + + + sc4cfcasy + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 16) + + + sc4cfcasz + Casino Crazy Fruits (Bellfruit) (Scorpion 4) (set 17) + + + sc4cfcla + Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 1) + + + sc4cfclab + Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 2) + + + sc4cfclac + Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 3) + + + sc4cfclad + Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 4) + + + sc4cfclae + Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 5) + + + sc4cfclaf + Crazy Fruits Classic (Bellfruit) (Scorpion 4) (set 6) + + + sc4cfclb + Crazy Fruits Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4cfclba + Crazy Fruits Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4cfclbb + Crazy Fruits Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4cfdu + Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 1) + + + sc4cfdua + Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 2) + + + sc4cfdub + Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 3) + + + sc4cfduc + Crazy Fruits Down Under (Bellfruit) (Scorpion 4) (set 4) + + + sc4cfgcl + Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4cfgcla + Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4cfgclb + Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4cfgclc + Crazy Fruits Gold Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4cfqps + Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 1) + + + sc4cfqpsa + Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 4) + + + sc4cfqpsb + Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 2) + + + sc4cfqpsc + Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 1) + + + sc4cfqpsd + Crazy Fruits (PR6813, CRFR) (Qps) (Scorpion 4) (set 3) + + + sc4cfqpse + Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 2) + + + sc4cfqpsf + Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 3) + + + sc4cfqpsg + Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 4) + + + sc4cfqpsh + Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 5) + + + sc4cfqpsi + Crazy Fruits V1.0 (PR2521, ECRZ) (Qps) (Scorpion 4) (set 6) + + + sc4cfqpsj + Crazy Fruits SP98 (PR4613) (Qps) (Scorpion 4) + + + sc4cfqpsk + Crazy Fruits (PR6813, CCAS) (Qps) (Scorpion 4) (set 1) + + + sc4cfqpsl + Crazy Fruits SP98 (PR4613) (BFM) (Scorpion 4) (set 1) + + + sc4cfqpsm + Crazy Fruits SP98 (PR4613) (BFM / Whitbread) (Scorpion 4) (set 1) + + + sc4cfqpsn + Crazy Fruits SP98 (PR4613) (BFM) (Scorpion 4) (set 2) + + + sc4cfqpso + Crazy Fruits SP98 (PR4613) (BFM / Whitbread) (Scorpion 4) (set 2) + + + sc4cfqpsp + Crazy Fruits SP98 (PR4613) (BFM) (Scorpion 4) (set 3) + + + sc4chain + Chain Reaction (Bellfruit) (Scorpion 4) (set 1) + + + sc4chaina + Chain Reaction (Bellfruit) (Scorpion 4) (set 2) + + + sc4chainb + Chain Reaction (Bellfruit) (Scorpion 4) (set 3) + + + sc4chainc + Chain Reaction (Bellfruit) (Scorpion 4) (set 4) + + + sc4chand + Cash In Hand (Bellfruit) (Scorpion 4) (set 1) + + + sc4chanda + Cash In Hand (Bellfruit) (Scorpion 4) (set 2) + + + sc4chandb + Cash In Hand (Bellfruit) (Scorpion 4) (set 3) + + + sc4chandc + Cash In Hand (Bellfruit) (Scorpion 4) (set 4) + + + sc4chavi + Chav It (Bellfruit) (Scorpion 4) (set 1) + + + sc4chavia + Chav It (Bellfruit) (Scorpion 4) (set 2) + + + sc4chavib + Chav It (Bellfruit) (Scorpion 4) (set 3) + + + sc4chavic + Chav It (Bellfruit) (Scorpion 4) (set 4) + + + sc4chavid + Chav It (Bellfruit) (Scorpion 4) (set 5) + + + sc4chavie + Chav It (Bellfruit) (Scorpion 4) (set 6) + + + sc4chavif + Chav It (Bellfruit) (Scorpion 4) (set 7) + + + sc4chavig + Chav It (Bellfruit) (Scorpion 4) (set 8) + + + sc4chavy + Chavy Chase (Mazooma) (Scorpion 4) (set 1) + + + sc4chavya + Chavy Chase (Mazooma) (Scorpion 4) (set 2) + + + sc4chavyb + Chavy Chase (Mazooma) (Scorpion 4) (set 3) + + + sc4chavyc + Chavy Chase (Mazooma) (Scorpion 4) (set 4) + + + sc4chavyd + Chavy Chase (Mazooma) (Scorpion 4) (set 5) + + + sc4chavye + Chavy Chase (Mazooma) (Scorpion 4) (set 6) + + + sc4chavyf + Chavy Chase (Mazooma) (Scorpion 4) (set 7) + + + sc4chavyg + Chavy Chase (Mazooma) (Scorpion 4) (set 8) + + + sc4chick + Chickendales (Mazooma) (Scorpion 4) + + + sc4chub + Chubby Does Vegas (Mazooma) (Scorpion 4) (set 1) + + + sc4chuba + Chubby Does Vegas (Mazooma) (Scorpion 4) (set 2) + + + sc4chubb + Chubby Does Vegas (Mazooma) (Scorpion 4) (set 3) + + + sc4cinv + Cash Invaders (Bellfruit) (Scorpion 4) (set 1) + + + sc4cinva + Cash Invaders (Bellfruit) (Scorpion 4) (set 2) + + + sc4cinvb + Cash Invaders (Bellfruit) (Scorpion 4) (set 3) + + + sc4cinvc + Cash Invaders (Bellfruit) (Scorpion 4) (set 4) + + + sc4cinvd + Cash Invaders (Bellfruit) (Scorpion 4) (set 5) + + + sc4cinve + Cash Invaders (Bellfruit) (Scorpion 4) (set 6) + + + sc4cinvf + Cash Invaders (Bellfruit) (Scorpion 4) (set 7) + + + sc4cinvg + Cash Invaders (Bellfruit) (Scorpion 4) (set 8) + + + sc4cinvh + Cash Invaders (Bellfruit) (Scorpion 4) (set 9) + + + sc4cinvi + Cash Invaders (Bellfruit) (Scorpion 4) (set 10) + + + sc4cj + Cool Jewels (Bellfruit) (Scorpion 4) (set 1) + + + sc4cja + Cool Jewels (Bellfruit) (Scorpion 4) (set 2) + + + sc4cjb + Cool Jewels (Bellfruit) (Scorpion 4) (set 3) + + + sc4cjc + Cool Jewels (Bellfruit) (Scorpion 4) (set 4) + + + sc4cjcl + Cool Jewels Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4cjcla + Cool Jewels Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4cjclb + Cool Jewels Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4cjclc + Cool Jewels Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4cjcld + Cool Jewels Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4cjcle + Cool Jewels Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4cjclf + Cool Jewels Club (Bellfruit) (Scorpion 4) (set 7) + + + sc4cjd + Cool Jewels (Bellfruit) (Scorpion 4) (set 5) + + + sc4ckx + Casino King X (Mazooma) (Scorpion 4) (Top Box, set 1) + + + sc4ckxa + Casino King X (Mazooma) (Scorpion 4) (Base, set 1) + + + sc4ckxb + Casino King X (Mazooma) (Scorpion 4) (Base, set 2) + + + sc4ckxc + Casino King X (Mazooma) (Scorpion 4) (Base, set 3) + + + sc4ckxd + Casino King X (Mazooma) (Scorpion 4) (Top Box, set 2) + + + sc4ckxe + Casino King X (Mazooma) (Scorpion 4) (Base, set 4) + + + sc4ckxf + Casino King X (Mazooma) (Scorpion 4) (Base, set 5) + + + sc4ckxg + Casino King X (Mazooma) (Scorpion 4) (Base, set 6) + + + sc4cla7 + Classic 7s (Mazooma) (Scorpion 4) (set 1) + + + sc4cla7a + Classic 7s (Mazooma) (Scorpion 4) (set 2) + + + sc4cla7b + Classic 7s (Mazooma) (Scorpion 4) (set 3) + + + sc4cla7c + Classic 7s (Mazooma) (Scorpion 4) (set 4) + + + sc4clash + Cash On The Lash (Mazooma) (Scorpion 4) (set 1) + + + sc4clasha + Cash On The Lash (Mazooma) (Scorpion 4) (set 2) + + + sc4clashb + Cash On The Lash (Mazooma) (Scorpion 4) (set 3) + + + sc4clashc + Cash On The Lash (Mazooma) (Scorpion 4) (set 4) + + + sc4clashd + Cash On The Lash (Mazooma) (Scorpion 4) (set 5) + + + sc4clashe + Cash On The Lash (Mazooma) (Scorpion 4) (set 6) + + + sc4clashf + Cash On The Lash (Mazooma) (Scorpion 4) (set 7) + + + sc4clashg + Cash On The Lash (Mazooma) (Scorpion 4) (set 8) + + + sc4clbmn + Club Moneybags (Bellfruit) (Scorpion 4) (set 1) + + + sc4clbmna + Club Moneybags (Bellfruit) (Scorpion 4) (set 2) + + + sc4clbmnb + Club Moneybags (Bellfruit) (Scorpion 4) (set 3) + + + sc4clbmnc + Club Moneybags (Bellfruit) (Scorpion 4) (set 4) + + + sc4clbtm + Club Temptation (Bellfruit) (Scorpion 4) (set 1) + + + sc4clbtma + Club Temptation (Bellfruit) (Scorpion 4) (set 2) + + + sc4clbtmb + Club Temptation (Bellfruit) (Scorpion 4) (set 3) + + + sc4clbtmc + Club Temptation (Bellfruit) (Scorpion 4) (set 4) + + + sc4clbtmd + Club Temptation (Bellfruit) (Scorpion 4) (set 5) + + + sc4clbtme + Club Temptation (Bellfruit) (Scorpion 4) (set 6) + + + sc4clclo + Club Clouseau (QPS) (Scorpion 4) + + + sc4clown + Clown Around (Bellfruit) (Scorpion 4) (set 1) + + + sc4clowna + Clown Around (Bellfruit) (Scorpion 4) (set 2) + + + sc4clownb + Clown Around (Bellfruit) (Scorpion 4) (set 3) + + + sc4clownc + Clown Around (Bellfruit) (Scorpion 4) (set 4) + + + sc4clownd + Clown Around (Bellfruit) (Scorpion 4) (set 5) + + + sc4clowne + Clown Around (Bellfruit) (Scorpion 4) (set 6) + + + sc4clownf + Clown Around (Bellfruit) (Scorpion 4) (set 7) + + + sc4clowng + Clown Around (Bellfruit) (Scorpion 4) (set 8) + + + sc4clucl + Cluedo Club (Mazooma) (Scorpion 4) (set 1) + + + sc4clucla + Cluedo Club (Mazooma) (Scorpion 4) (set 2) + + + sc4clue + Cluedo (Mazooma) (Scorpion 4) (set 1) + + + sc4cluea + Cluedo (Mazooma) (Scorpion 4) (set 2) + + + sc4clueb + Cluedo (Mazooma) (Scorpion 4) (set 3) + + + sc4cluec + Cluedo (Mazooma) (Scorpion 4) (set 4) + + + sc4clued + Cluedo (Mazooma) (Scorpion 4) (set 5) + + + sc4cluee + Cluedo (Mazooma) (Scorpion 4) (set 6) + + + sc4cluef + Cluedo (Mazooma) (Scorpion 4) (set 7) + + + sc4clueg + Cluedo (Mazooma) (Scorpion 4) (set 8) + + + sc4cmani + Colour Mania (Bellfruit) (Scorpion 4) (set 1) + + + sc4cmania + Colour Mania (Bellfruit) (Scorpion 4) (set 2) + + + sc4cmon + Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 1) + + + sc4cmona + Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 2) + + + sc4cmonb + Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 3) + + + sc4cmonc + Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 4) + + + sc4cmond + Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 5) + + + sc4cmone + Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 6) + + + sc4cmonf + Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 7) + + + sc4cmong + Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 8) + + + sc4cmonh + Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 9) + + + sc4cmoni + Casino Monopoly (PR2133) (Mazooma) (Scorpion 4) (set 10) + + + sc4cmous + Cash & Mouse (V041) (Qps) (Scorpion 4) (set 1) + + + sc4cmousa + Cash & Mouse (V011) (Qps) (Scorpion 4) (set 1) + + + sc4cmousb + Cash & Mouse (V041) (Qps) (Scorpion 4) (set 2) + + + sc4cmousc + Cash & Mouse (V011) (Qps) (Scorpion 4) (set 2) + + + sc4cnfr + Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 1) + + + sc4cnfra + Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 2) + + + sc4cnfrb + Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 3) + + + sc4cnfrc + Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 1) + + + sc4cnfrd + Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 2) + + + sc4cnfre + Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 4) + + + sc4cnfrf + Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 5) + + + sc4cnfrg + Cash 'n' Fruit (Bellfruit) (Scorpion 4) (set 6) + + + sc4cnfrh + Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 3) + + + sc4cnfri + Cash 'n' Fruit S+P98 (Bellfruit) (Scorpion 4) (set 4) + + + sc4colos + Colossus (Dutch) (Bellfruit) (Scorpion 4) + + + sc4copsr + Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 1) + + + sc4copsra + Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 2) + + + sc4copsrb + Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 3) + + + sc4copsrc + Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 4) + + + sc4copsrd + Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 5) + + + sc4copsre + Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 6) + + + sc4copsrf + Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 7) + + + sc4copsrg + Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 8) + + + sc4copsrh + Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 9) + + + sc4copsri + Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 10) + + + sc4corcl + Coronation Street Club (Mazooma) (Scorpion 4) (set 1) + + + sc4corcla + Coronation Street Club (Mazooma) (Scorpion 4) (set 2) + + + sc4coro + Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 1) + + + sc4coroa + Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 2) + + + sc4coroc + Coronation Street Triple (Arcade Version 012) (PR2249) (Mazooma) (Scorpion 4) (set 1) + + + sc4corod + Coronation Street Triple (PR2249) (Mazooma) (Scorpion 4) (set 1) + + + sc4corof + Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 3) + + + sc4corog + Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 4) + + + sc4coroh + Coronation Street Triple (Arcade Version 012) (PR2249) (Mazooma) (Scorpion 4) (set 2) + + + sc4coroi + Coronation Street Triple (PR2249) (Mazooma) (Scorpion 4) (set 2) + + + sc4coroj + Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 5) + + + sc4corok + Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 6) + + + sc4corol + Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 7) + + + sc4corom + Coronation Street (PR2252) (Mazooma) (Scorpion 4) (set 8) + + + sc4coron + Coronation Street Triple (Bingo Version ?1) (PR2?4?) (Mazooma) (Scorpion 4) + + + sc4corotb + Coronation Street Triple Top Box (PR2526, CSTB) (Mazooma) (Scorpion 4) (Top Box, set 1) + + + sc4corotba + Coronation Street Triple Top Box (PR2526, CSTB) (Mazooma) (Scorpion 4) (Top Box, set 2) + + + sc4count + Countdown (Bellfruit) (Scorpion 4) (set 1) + + + sc4counta + Countdown (Bellfruit) (Scorpion 4) (set 2) + + + sc4cr + Cash Raker (Qps) (Scorpion 4) (set 1) + + + sc4cra + Cash Raker (Qps) (Scorpion 4) (set 2) + + + sc4crb + Cash Raker (Qps) (Scorpion 4) (set 3) + + + sc4crc + Cash Raker (V2.1) (Qps) (Scorpion 4) (set 1) + + + sc4crcc + Cops 'n' Robbers Club Classic (Bellfruit) (Scorpion 4) (set 1) + + + sc4crcca + Cops 'n' Robbers Club Classic (Bellfruit) (Scorpion 4) (set 2) + + + sc4crccb + Cops 'n' Robbers Club Classic (65%) (Bellfruit) (Scorpion 4) (set 1) + + + sc4crccc + Cops 'n' Robbers Club Classic (65%) (Bellfruit) (Scorpion 4) (set 2) + + + sc4crcl + Cash Raker Club (V1.0) (Qps) (Scorpion 4) (set 1) + + + sc4crcla + Cash Raker Club (V1.1) (Qps) (Scorpion 4) (set 1) + + + sc4crclb + Cash Raker Club (V1.0) (Qps) (Scorpion 4) (set 2) + + + sc4crclc + Cash Raker Club (V1.1) (Qps) (Scorpion 4) (set 2) + + + sc4crcld + Cash Raker Club (V1.3) (Qps) (Scorpion 4) + + + sc4crcle + Cash Raker Club (411) (Qps) (Scorpion 4) (set 1) + + + sc4crclf + Cash Raker Club (411) (Qps) (Scorpion 4) (set 2) + + + sc4crcp + Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 1) + + + sc4crcpa + Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 2) + + + sc4crcpc + Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 3) + + + sc4crcpd + Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 4) + + + sc4crcpe + Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 5) + + + sc4crcpf + Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 6) + + + sc4crcpg + Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 7) + + + sc4crcph + Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 8) + + + sc4crcpi + Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 9) + + + sc4crcpj + Cops 'n' Robbers Club Platinum (Bellfruit) (Scorpion 4) (set 10) + + + sc4crd + Cash Raker (V2.2) (Qps) (Scorpion 4) (set 1) + + + sc4cre + Cash Raker (V2.1) (Qps) (Scorpion 4) (set 2) + + + sc4crf + Cash Raker (V2.2) (Qps) (Scorpion 4) (set 2) + + + sc4crgc + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4crgca + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4crgcb + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4crgcc + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4crgcd + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4crgce + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4crgcf + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 7) + + + sc4crgcg + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 8) + + + sc4crgch + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 9) + + + sc4crgci + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 10) + + + sc4crgcj + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 11) + + + sc4crgck + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 12) + + + sc4crgcl + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 13) + + + sc4crgcm + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 14) + + + sc4crgcn + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 19) + + + sc4crgco + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 15) + + + sc4crgcp + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 20) + + + sc4crgcq + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 16) + + + sc4crgcr + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 21) + + + sc4crgcs + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 23) + + + sc4crgct + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 17) + + + sc4crgcu + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 22) + + + sc4crgcv + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 24) + + + sc4crgcw + Cops 'n' Robbers Gold Club (Bellfruit) (Scorpion 4) (set 18) + + + sc4crnjw + Crown Jewels (Bellfruit) (Scorpion 4) (set 1) + + + sc4crnjwa + Crown Jewels (Bellfruit) (Scorpion 4) (set 2) + + + sc4crsc + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 1) + + + sc4crsca + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 2) + + + sc4crscb + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 3) + + + sc4crscc + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 4) + + + sc4crscd + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 5) + + + sc4crsce + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 6) + + + sc4crscf + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 7) + + + sc4crscg + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 4) (set 8) + + + sc4crzcs + Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 1) + + + sc4crzcsa + Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 2) + + + sc4crzcsb + Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 3) + + + sc4crzcsc + Crazy Casino SP98 (Bellfruit) (Scorpion 4) (set 4) + + + sc4crzgn + Crazy Gang (Bellfruit) (Scorpion 4) (set 1, Top Box) + + + sc4crzgn0 + Crazy Gang (Bellfruit) (Scorpion 4) (set 18) + + + sc4crzgn1 + Crazy Gang (Bellfruit) (Scorpion 4) (set 19) + + + sc4crzgn2 + Crazy Gang (Bellfruit) (Scorpion 4) (set 20) + + + sc4crzgn3 + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 7) + + + sc4crzgn4 + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 8) + + + sc4crzgn5 + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 9) + + + sc4crzgn6 + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 10) + + + sc4crzgn7 + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 11) + + + sc4crzgn8 + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 12) + + + sc4crzgna + Crazy Gang (Bellfruit) (Scorpion 4) (set 1) + + + sc4crzgnb + Crazy Gang (Bellfruit) (Scorpion 4) (set 2, Top Box) + + + sc4crzgnc + Crazy Gang (Bellfruit) (Scorpion 4) (set 2) + + + sc4crzgnd + Crazy Gang (Bellfruit) (Scorpion 4) (set 3) + + + sc4crzgne + Crazy Gang (Bellfruit) (Scorpion 4) (set 4) + + + sc4crzgnf + Crazy Gang (Bellfruit) (Scorpion 4) (set 5) + + + sc4crzgng + Crazy Gang (Bellfruit) (Scorpion 4) (set 3, Top Box) + + + sc4crzgnh + Crazy Gang (Bellfruit) (Scorpion 4) (set 6) + + + sc4crzgni + Crazy Gang (Bellfruit) (Scorpion 4) (set 7) + + + sc4crzgnj + Crazy Gang (Bellfruit) (Scorpion 4) (set 4, Top Box) + + + sc4crzgnk + Crazy Gang (Bellfruit) (Scorpion 4) (set 8) + + + sc4crzgnl + Crazy Gang (Bellfruit) (Scorpion 4) (set 9) + + + sc4crzgnm + Crazy Gang (Bellfruit) (Scorpion 4) (set 10) + + + sc4crzgnn + Crazy Gang (Bellfruit) (Scorpion 4) (set 11) + + + sc4crzgno + Crazy Gang (Bellfruit) (Scorpion 4) (set 12) + + + sc4crzgnp + Crazy Gang (Bellfruit) (Scorpion 4) (set 13) + + + sc4crzgnq + Crazy Gang (Bellfruit) (Scorpion 4) (set 14) + + + sc4crzgnr + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 1) + + + sc4crzgns + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 2) + + + sc4crzgnt + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 3) + + + sc4crzgnu + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 4) + + + sc4crzgnv + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 5) + + + sc4crzgnw + Crazy Gang Arcade (Bellfruit) (Scorpion 4) (set 6) + + + sc4crzgnx + Crazy Gang (Bellfruit) (Scorpion 4) (set 15) + + + sc4crzgny + Crazy Gang (Bellfruit) (Scorpion 4) (set 16) + + + sc4crzgnz + Crazy Gang (Bellfruit) (Scorpion 4) (set 17) + + + sc4crzky + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 1) + + + sc4crzkya + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 2) + + + sc4crzkyb + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 3) + + + sc4crzkyc + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 4) + + + sc4crzkyd + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 5) + + + sc4crzkye + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 6) + + + sc4crzkyf + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 7) + + + sc4crzkyg + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 8) + + + sc4crzkyh + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 9) + + + sc4crzkyi + Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 1) + + + sc4crzkyj + Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 2) + + + sc4crzkyk + Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 3) + + + sc4crzkyl + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 10) + + + sc4crzkym + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 11) + + + sc4crzkyn + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 12) + + + sc4crzkyo + Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 4) + + + sc4crzkyp + Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 5) + + + sc4crzkyq + Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 6) + + + sc4crzkyr + Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 7) + + + sc4crzkys + Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 8) + + + sc4crzkyt + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 13) + + + sc4crzkyu + Casino Crazy Keys (Bellfruit) (Scorpion 4) (set 14) + + + sc4crzkyv + Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 9) + + + sc4crzkyw + Casino Crazy Keys Arcade (Bellfruit) (Scorpion 4) (set 10) + + + sc4crzwl + Crazy World (Mazooma) (Scorpion 4) (set 1) + + + sc4crzwla + Crazy World (Mazooma) (Scorpion 4) (set 2) + + + sc4crzwlb + Crazy World (Mazooma) (Scorpion 4) (set 3) + + + sc4crzwlc + Crazy World (Mazooma) (Scorpion 4) (set 4) + + + sc4crzwld + Crazy World (Mazooma) (Scorpion 4) (set 5) + + + sc4crzwle + Crazy World (Mazooma) (Scorpion 4) (set 6) + + + sc4crzwlf + Crazy World (Mazooma) (Scorpion 4) (set 7) + + + sc4crzwlg + Crazy World (Mazooma) (Scorpion 4) (set 8) + + + sc4ctl + Cop The Lot (Bellfruit) (Scorpion 4) (set 1) + + + sc4ctla + Cop The Lot (Bellfruit) (Scorpion 4) (set 2) + + + sc4ctlb + Cop The Lot (Bellfruit) (Scorpion 4) (set 3) + + + sc4ctlc + Cop The Lot (Bellfruit) (Scorpion 4) (set 4) + + + sc4ctlcl + Cop The Lot Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4ctlcla + Cop The Lot Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4ctlclb + Cop The Lot Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4ctlclc + Cop The Lot Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4ctld + Cop The Lot (Bellfruit) (Scorpion 4) (set 5) + + + sc4ctle + Cop The Lot (Bellfruit) (Scorpion 4) (set 6) + + + sc4cvani + Cashvania (Qps) (Scorpion 4) (set 1) + + + sc4cvania + Cashvania (Qps) (Scorpion 4) (set 2) + + + sc4cvanib + Cashvania (Qps) (Scorpion 4) (set 3) + + + sc4cvanic + Cashvania (Qps) (Scorpion 4) (set 4) + + + sc4cvanid + Cashvania (Qps) (Scorpion 4) (set 5) + + + sc4cvanie + Cashvania (Qps) (Scorpion 4) (set 6) + + + sc4cvanif + Cashvania (Qps) (Scorpion 4) (set 7) + + + sc4cvanig + Cashvania (Qps) (Scorpion 4) (set 8) + + + sc4cvanih + Cashvania (Qps) (Scorpion 4) (set 9) + + + sc4cvanii + Cashvania (Qps) (Scorpion 4) (set 10) + + + sc4cvclb + Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 1) + + + sc4cvclba + Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 2) + + + sc4cvclbb + Cashvania Club (V2.0) (Qps) (Scorpion 4) (set 1) + + + sc4cvclbc + Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 3) + + + sc4cvclbd + Cashvania Club (V1.0) (Qps) (Scorpion 4) (set 4) + + + sc4cvclbe + Cashvania Club (V2.0) (Qps) (Scorpion 4) (set 2) + + + sc4cvclbf + Cashvania Club (V411) (Qps) (Scorpion 4) (set 1) + + + sc4cvclbg + Cashvania Club (V411) (Qps) (Scorpion 4) (set 2) + + + sc4cyc + Count Yer Cash (Mazooma) (Scorpion 4) (set 1) + + + sc4cyca + Count Yer Cash (Mazooma) (Scorpion 4) (set 2) + + + sc4cycb + Count Yer Cash (Mazooma) (Scorpion 4) (set 3) + + + sc4cycc + Count Yer Cash (Mazooma) (Scorpion 4) (set 4) + + + sc4cyccl + Count Yer Cash Club (Mazooma) (Scorpion 4) (set 1) + + + sc4cyccla + Count Yer Cash Club (Mazooma) (Scorpion 4) (set 2) + + + sc4cycclb + Count Yer Cash Club (Mazooma) (Scorpion 4) (set 3) + + + sc4cycclc + Count Yer Cash Club (Mazooma) (Scorpion 4) (set 4) + + + sc4cycd + Count Yer Cash (Mazooma) (Scorpion 4) (set 5) + + + sc4czfr + Crazy Fruits (Germany?) (PR6982, GCRF, 1.02) (Bellfruit) (Scorpion 4) + + + sc4czfra + Crazy Fruits (Dutch) (PR1212, CRAZ) (Bellfruit) (Scorpion 4) + + + sc4czfrb + Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 1) + + + sc4czfrc + Crazy Fruits (PR6813, CCAS) (Qps) (Scorpion 4) (set 2) + + + sc4czfrd + Crazy Fruits (Germany?) (PR6982, GCRF) (Bellfruit) (Scorpion 4) + + + sc4czfre + Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 2) + + + sc4czfrf + Crazy Fruits (PR6813, CRFR) (BFM + Whitbread) (Scorpion 4) (set 1) + + + sc4czfrg + Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 3) + + + sc4czfrh + Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 4) + + + sc4czfri + Crazy Fruits (PR6813, CRFR) (BFM + Whitbread) (Scorpion 4) (set 2) + + + sc4czfrj + Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 5) + + + sc4czfrk + Crazy Fruits (PR6813, CRFR) (BFM) (Scorpion 4) (set 6) + + + sc4darw + Dough & Arrow (Qps) (Scorpion 4) (set 1) + + + sc4darwa + Dough & Arrow (Qps) (Scorpion 4) (set 2) + + + sc4darwb + Dough & Arrow (Qps) (Scorpion 4) (set 3) + + + sc4darwc + Dough & Arrow (Qps) (Scorpion 4) (set 4) + + + sc4daylt + Daylight Robbery (Bellfruit) (Scorpion 4) (set 1) + + + sc4daylta + Daylight Robbery (Bellfruit) (Scorpion 4) (set 2) + + + sc4dayltb + Daylight Robbery (Bellfruit) (Scorpion 4) (set 3) + + + sc4dayltc + Daylight Robbery (Bellfruit) (Scorpion 4) (set 4) + + + sc4dayltd + Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 1) + + + sc4daylte + Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 2) + + + sc4dayltf + Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 3) + + + sc4dayltg + Daylight Robbery (Bellfruit) (Scorpion 4) (set 5) + + + sc4daylth + Daylight Robbery (Bellfruit) (Scorpion 4) (set 6) + + + sc4daylti + Daylight Robbery (Bellfruit) (Scorpion 4) (set 7) + + + sc4dayltj + Daylight Robbery (Bellfruit) (Scorpion 4) (set 8) + + + sc4dayltk + Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 4) + + + sc4dayltl + Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 5) + + + sc4dayltm + Daylight Robbery SP98 (Bellfruit) (Scorpion 4) (set 6) + + + sc4db + Gold Fever (Mazooma) (Scorpion 4) (set 4) + + + sc4dbldm + Double Diamond (Qps) (Scorpion 4) + + + sc4dblfr + Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 1) + + + sc4dblfra + Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 2) + + + sc4dblfrb + Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 3) + + + sc4dblfrc + Double Frenzy (PR7060) (Qps) (Scorpion 4) (set 4) + + + sc4dblfrd + Double Frenzy (PR2276) (212) (Qps) (Scorpion 4) (set 1) + + + sc4dblfre + Double Frenzy (PR2276) (212) (Qps) (Scorpion 4) (set 2) + + + sc4dcrls + Double Crazy Reels (021) (Mazooma) (Scorpion 4) (set 1) + + + sc4dcrlsa + Double Crazy Reels (031) (Mazooma) (Scorpion 4) (set 1) + + + sc4dcrlsb + Double Crazy Reels (022) (Mazooma) (Scorpion 4) (set 1) + + + sc4dcrlsc + Double Crazy Reels (032) (Mazooma) (Scorpion 4) (set 1) + + + sc4dcrlsd + Double Crazy Reels (023) (Mazooma) (Scorpion 4) (set 1) + + + sc4dcrlse + Double Crazy Reels (033) (Mazooma) (Scorpion 4) (set 1) + + + sc4dcrlsf + Double Crazy Reels (021) (Mazooma) (Scorpion 4) (set 2) + + + sc4dcrlsg + Double Crazy Reels (031) (Mazooma) (Scorpion 4) (set 2) + + + sc4dcrlsh + Double Crazy Reels (022) (Mazooma) (Scorpion 4) (set 2) + + + sc4dcrlsi + Double Crazy Reels (032) (Mazooma) (Scorpion 4) (set 2) + + + sc4dcrlsj + Double Crazy Reels (023) (Mazooma) (Scorpion 4) (set 2) + + + sc4dcrlsk + Double Crazy Reels (033) (Mazooma) (Scorpion 4) (set 2) + + + sc4ddosh + Doctor Dosh (Bellfruit) (Scorpion 4) (set 1) + + + sc4ddosha + Doctor Dosh (Bellfruit) (Scorpion 4) (set 2) + + + sc4ddoshb + Doctor Dosh (Bellfruit) (Scorpion 4) (set 3) + + + sc4ddoshc + Doctor Dosh (Bellfruit) (Scorpion 4) (set 4) + + + sc4ddoshd + Doctor Dosh (Bellfruit) (Scorpion 4) (set 5) + + + sc4ddoshe + Doctor Dosh (Bellfruit) (Scorpion 4) (set 6) + + + sc4ddoshf + Doctor Dosh (Bellfruit) (Scorpion 4) (set 11) + + + sc4ddoshg + Doctor Dosh (Bellfruit) (Scorpion 4) (set 12) + + + sc4ddoshh + Doctor Dosh (Bellfruit) (Scorpion 4) (set 13) + + + sc4ddoshi + Doctor Dosh (Bellfruit) (Scorpion 4) (set 14) + + + sc4ddoshj + Doctor Dosh (Bellfruit) (Scorpion 4) (set 15) + + + sc4ddoshk + Doctor Dosh (Bellfruit) (Scorpion 4) (set 16) + + + sc4ddoshl + Doctor Dosh (Bellfruit) (Scorpion 4) (set 7) + + + sc4ddoshm + Doctor Dosh (Bellfruit) (Scorpion 4) (set 8) + + + sc4ddoshn + Doctor Dosh (Bellfruit) (Scorpion 4) (set 9) + + + sc4ddosho + Doctor Dosh (Bellfruit) (Scorpion 4) (set 10) + + + sc4deepi + Deep Impact (Mazooma) (Scorpion 4) (set 1) + + + sc4deepia + Deep Impact (Mazooma) (Scorpion 4) (set 2) + + + sc4deepib + Deep Impact (Mazooma) (Scorpion 4) (set 3) + + + sc4deepid + Deep Impact (Mazooma) (Scorpion 4) (set 4) + + + sc4derby + Demolition Derby (Bellfruit) (Scorpion 4) (set 1) + + + sc4derbya + Demolition Derby (Bellfruit) (Scorpion 4) (set 2) + + + sc4derbyb + Demolition Derby (Bellfruit) (Scorpion 4) (set 3) + + + sc4derbyc + Demolition Derby (Bellfruit) (Scorpion 4) (set 4) + + + sc4derbyd + Demolition Derby (Bellfruit) (Scorpion 4) (set 5) + + + sc4derbye + Demolition Derby (Bellfruit) (Scorpion 4) (set 6) + + + sc4dhh + Dough Ho Ho (Bellfruit) (Scorpion 4) (set 1) + + + sc4dhha + Dough Ho Ho (Bellfruit) (Scorpion 4) (set 2) + + + sc4dhhb + Dough Ho Ho (Bellfruit) (Scorpion 4) (set 3) + + + sc4dhhc + Dough Ho Ho (Bellfruit) (Scorpion 4) (set 4) + + + sc4dhhd + Dough Ho Ho (Bellfruit) (Scorpion 4) (set 5) + + + sc4dhhe + Dough Ho Ho (Bellfruit) (Scorpion 4) (set 6) + + + sc4disco + Disco Inferno (Mazooma) (Scorpion 4) (set 1) + + + sc4discoa + Disco Inferno (Mazooma) (Scorpion 4) (set 3) + + + sc4discob + Disco Inferno (Mazooma) (Scorpion 4) (set 2) + + + sc4discoc + Disco Inferno (Mazooma) (Scorpion 4) (set 4) + + + sc4discod + Disco Inferno (Mazooma) (Scorpion 4) (set 5) + + + sc4dmine + Diamond Mine (Bellfruit) (Scorpion 4) (set 1) + + + sc4dminea + Diamond Mine (Bellfruit) (Scorpion 4) (set 2) + + + sc4dmineb + Diamond Mine (Bellfruit) (Scorpion 4) (set 3) + + + sc4dminec + Diamond Mine (Bellfruit) (Scorpion 4) (set 4) + + + sc4dmined + Diamond Mine (Bellfruit) (Scorpion 4) (set 5) + + + sc4dminee + Diamond Mine (Bellfruit) (Scorpion 4) (set 6) + + + sc4dnd + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL016, set 1) + + + sc4dnda + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL422, set 2) + + + sc4dndb + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL016, set 2) + + + sc4dndbb + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE471, set 1) + + + sc4dndbba + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE472, set 1) + + + sc4dndbbb + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE471, set 2) + + + sc4dndbbc + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE472, set 2) + + + sc4dndbbd + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE473, set 1) + + + sc4dndbbe + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE571, set 1) + + + sc4dndbbf + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE572, set 1) + + + sc4dndbbg + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE473, set 2) + + + sc4dndbbh + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE571, set 2) + + + sc4dndbbi + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE572, set 2) + + + sc4dndbc + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 4) (BOXR571, set 1) + + + sc4dndbca + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 4) (BOXR571, set 2) + + + sc4dndbd + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA471, set 1) + + + sc4dndbda + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA471, set 2) + + + sc4dndbdb + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA472, set 1) + + + sc4dndbdc + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA571, set 1) + + + sc4dndbdd + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA472, set 2) + + + sc4dndbde + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA571, set 2) + + + sc4dndbe + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK012, set 1) + + + sc4dndbeb + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK422, set 1) + + + sc4dndbec + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK012, set 2) + + + sc4dndbed + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK422, set 2) + + + sc4dndbee + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK423, set 1) + + + sc4dndbef + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK425, set 1) + + + sc4dndbeg + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK013, set 1) + + + sc4dndbeh + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK014, set 1) + + + sc4dndbei + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK423, set 2) + + + sc4dndbej + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK425, set 2) + + + sc4dndbek + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK013, set 2) + + + sc4dndbel + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK014, set 2) + + + sc4dndbem + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK426, set 1) + + + sc4dndben + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK426, set 2) + + + sc4dndbr + Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD471, set 1) + + + sc4dndbra + Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD472, set 1) + + + sc4dndbrb + Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD471, set 2) + + + sc4dndbrc + Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD472, set 2) + + + sc4dndbrd + Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD475, set 1) + + + sc4dndbre + Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD571, set 1) + + + sc4dndbrf + Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD475, set 2) + + + sc4dndbrg + Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD571, set 2) + + + sc4dndc + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL422, set 1) + + + sc4dndcc + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR471, set 1) + + + sc4dndcca + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR474) + + + sc4dndccb + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR471, set 2) + + + sc4dndccc + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR475, set 1) + + + sc4dndccd + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR571, set 1) + + + sc4dndcce + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR475, set 2) + + + sc4dndccf + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR571, set 2) + + + sc4dndcl + Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL313, set 1) + + + sc4dndcla + Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL212, set 1) + + + sc4dndclb + Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL391, set 1) + + + sc4dndclc + Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL181, set 1) + + + sc4dndcld + Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL313, set 2) + + + sc4dndcle + Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL212, set 2) + + + sc4dndclf + Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL391, set 2) + + + sc4dndclg + Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL181, set 2) + + + sc4dndcs + Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD211, set 1) + + + sc4dndcsa + Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD212, set 1) + + + sc4dndcsb + Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD211, set 2) + + + sc4dndcsc + Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD212, set 2) + + + sc4dndcsd + Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD215, set 1) + + + sc4dndcse + Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD215, set 2) + + + sc4dndcw + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH271, set 1) + + + sc4dndcwa + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH272, set 1) + + + sc4dndcwb + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH271, set 2) + + + sc4dndcwc + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH272, set 2) + + + sc4dndd + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL402, set 1) + + + sc4dnddd + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO471, set 1) + + + sc4dnddda + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO571, set 1) + + + sc4dndddb + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO572, set 1) + + + sc4dndddc + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO573, set 1) + + + sc4dndddd + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO471, set 2) + + + sc4dnddde + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO571, set 2) + + + sc4dndddf + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO572, set 2) + + + sc4dndddg + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO573, set 2) + + + sc4dnddf + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC471, set 1) + + + sc4dnddfa + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC471, set 2) + + + sc4dnddfb + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC475, set 1) + + + sc4dnddfc + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC571, set 1) + + + sc4dnddfd + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC475, set 2) + + + sc4dnddfe + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC571, set 2) + + + sc4dnddw + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN471, set 1) + + + sc4dnddwa + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN473, set 1) + + + sc4dnddwb + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN471, set 2) + + + sc4dnddwc + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN473, set 2) + + + sc4dnddwd + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN475, set 1) + + + sc4dnddwe + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN572, set 1) + + + sc4dnddwf + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN475, set 2) + + + sc4dnddwg + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN572, set 2) + + + sc4dnde + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL017, set 1) + + + sc4dndf + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL018, set 1) + + + sc4dndg + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL402, set 2) + + + sc4dndh + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL017, set 2) + + + sc4dndhf + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA473, set 1) + + + sc4dndhfa + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA473, set 2) + + + sc4dndhfb + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA477, set 1) + + + sc4dndhfc + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA571, set 1) + + + sc4dndhfd + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA477, set 2) + + + sc4dndhfe + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA571, set 2) + + + sc4dndhff + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA471, set 1) + + + sc4dndhfg + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA472, set 1) + + + sc4dndhfh + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA471, set 2) + + + sc4dndhfi + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA472, set 2) + + + sc4dndhfj + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA476) + + + sc4dndhfk + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA572, set 1, bad?) + + + sc4dndhfl + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA572, set 2, bad?) + + + sc4dndi + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL018, set 2) + + + sc4dndj + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL406, set 1) + + + sc4dndk + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL428, set 1) + + + sc4dndl + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL406, set 2) + + + sc4dndlp + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN571, set 1) + + + sc4dndlpa + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN572, set 1) + + + sc4dndlpb + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN573, set 1) + + + sc4dndlpc + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN571, set 2) + + + sc4dndlpd + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN572, set 2) + + + sc4dndlpe + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN573, set 2) + + + sc4dndm + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL428, set 2) + + + sc4dndn + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL424, set 1) + + + sc4dndo + Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL424, set 2) + + + sc4dndpg + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG471, set 1) + + + sc4dndpga + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG571, set 1) + + + sc4dndpgb + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG572, set 1) + + + sc4dndpgc + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG471, set 2) + + + sc4dndpgd + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPGB571, set 2) + + + sc4dndpge + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPGB572, set 2) + + + sc4dndra + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT471, set 1) + + + sc4dndraa + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT471, set 2) + + + sc4dndrab + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT474, set 1) + + + sc4dndrac + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT572, set 1) + + + sc4dndrad + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT474, set 2) + + + sc4dndrae + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT572, set 2) + + + sc4dndtp + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV411, set 1) + + + sc4dndtpa + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV412, set 1) + + + sc4dndtpb + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV413, set 1) + + + sc4dndtpc + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV414, set 1, bad) + + + sc4dndtpd + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV415, set 1) + + + sc4dndtpe + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV411, set 2) + + + sc4dndtpf + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV412, set 2) + + + sc4dndtpg + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV413, set 2) + + + sc4dndtph + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV414, set 2, bad) + + + sc4dndtpi + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV415, set 2) + + + sc4dndtpj + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV41A, set 1) + + + sc4dndtpk + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV41A, set 2) + + + sc4dndtpl + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV416, set 1) + + + sc4dndtpm + Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV416, set 2) + + + sc4dndtr + Deal Or No Deal Think Red (Bellfruit) (Scorpion 4) (THRE571, set 1) + + + sc4dndtra + Deal Or No Deal Think Red (Bellfruit) (Scorpion 4) (THRE571, set 2) + + + sc4dndwb + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX412, set 1) + + + sc4dndwba + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX414, set 1) + + + sc4dndwbb + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX412, set 2) + + + sc4dndwbc + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX414, set 2) + + + sc4dndwbd + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX415, set 1) + + + sc4dndwbe + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX415, set 2) + + + sc4dndwbf + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX419, set 1) + + + sc4dndwbg + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX419, set 2) + + + sc4dndww + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH411, set 1) + + + sc4dndwwa + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH412, set 1) + + + sc4dndwwb + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH411, set 2) + + + sc4dndwwc + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH415, set 1) + + + sc4dndwwd + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH415, set 2) + + + sc4dndwwe + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH412, set 2) + + + sc4dndys + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO571, set 1) + + + sc4dndysa + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO474, set 1) + + + sc4dndysb + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO571, set 2) + + + sc4dndysc + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO474, set 2) + + + sc4dough + Dough Selecta (Bellfruit) (Scorpion 4) (set 1) + + + sc4dougha + Dough Selecta (Bellfruit) (Scorpion 4) (set 2) + + + sc4druby + Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 1) + + + sc4drubya + Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 2) + + + sc4drubyb + Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 3) + + + sc4drubyc + Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 4) + + + sc4drubyd + Diamonds & Rubies (Bellfruit) (Scorpion 4) (Top Box?, set 5) + + + sc4duckq + Ducks Of Hazzard (Qps) (Scorpion 4) (set 1) + + + sc4duckqa + Ducks Of Hazzard (Qps) (Scorpion 4) (set 2) + + + sc4ducks + Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 1) + + + sc4ducksa + Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 2) + + + sc4ducksb + Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 3) + + + sc4ducksc + Ducks Of Hazzard (Mazooma) (Scorpion 4) (set 4) + + + sc4dyna + Dynamite (Bellfruit) (Scorpion 4) (set 1) + + + sc4dynaa + Dynamite (Bellfruit) (Scorpion 4) (set 2) + + + sc4eascs + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 1) + + + sc4eascsa + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 2) + + + sc4eascsb + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 3) + + + sc4eascsc + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 4) + + + sc4eascsd + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 5) + + + sc4eascse + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 6) + + + sc4eascsf + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 7) + + + sc4eascsg + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 8) + + + sc4eascsh + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 9) + + + sc4eascsi + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 10) + + + sc4eascsj + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 11) + + + sc4eascsk + Casino Easy Streak (Bellfruit) (Scorpion 4) (set 12) + + + sc4easy + Easy Streak (Bellfruit) (Scorpion 4) (set 1) + + + sc4easya + Easy Streak (Bellfruit) (Scorpion 4) (set 2) + + + sc4easyb + Easy Streak (Bellfruit) (Scorpion 4) (set 3) + + + sc4easyc + Easy Streak (Bellfruit) (Scorpion 4) (set 4) + + + sc4easyd + Easy Streak (Bellfruit) (Scorpion 4) (set 5) + + + sc4easye + Easy Streak (Bellfruit) (Scorpion 4) (set 6) + + + sc4easyf + Easy Streak (Bellfruit) (Scorpion 4) (set 11) + + + sc4emmer + Emmerdale (Mazooma) (Scorpion 4) (set 1) + + + sc4emmera + Emmerdale (Mazooma) (Scorpion 4) (set 2) + + + sc4emmerb + Emmerdale (Mazooma) (Scorpion 4) (set 3) + + + sc4emmerc + Emmerdale (Mazooma) (Scorpion 4) (set 4) + + + sc4evol + Evolution (Qps) (Scorpion 4) (set 1) + + + sc4evola + Evolution (Qps) (Scorpion 4) (set 2) + + + sc4evolb + Evolution (Qps) (Scorpion 4) (set 3) + + + sc4evolc + Evolution (Qps) (Scorpion 4) (set 4) + + + sc4evold + Evolution (Qps) (Scorpion 4) (set 5) + + + sc4evole + Evolution (Qps) (Scorpion 4) (set 6) + + + sc4evolf + Evolution (Qps) (Scorpion 4) (set 7) + + + sc4evolg + Evolution (Qps) (Scorpion 4) (set 8) + + + sc4fastf + Fast 'n' Furious (Mazooma) (Scorpion 4) (set 1) + + + sc4fastfa + Fast 'n' Furious (Mazooma) (Scorpion 4) (set 2) + + + sc4fastfb + Fast 'n' Furious (Mazooma) (Scorpion 4) (set 3) + + + sc4fastfc + Fast 'n' Furious (Mazooma) (Scorpion 4) (set 4) + + + sc4fbcrz + Football Crazy (Bellfruit) (Scorpion 4) (set 1) + + + sc4fbcrza + Football Crazy (Bellfruit) (Scorpion 4) (set 2) + + + sc4fbcrzb + Football Crazy (Bellfruit) (Scorpion 4) (set 3) + + + sc4fbcrzc + Football Crazy (Bellfruit) (Scorpion 4) (set 4) + + + sc4fbcrzd + Football Crazy (Bellfruit) (Scorpion 4) (set 5) + + + sc4fbcrze + Football Crazy (Bellfruit) (Scorpion 4) (set 6) + + + sc4fbcrzf + Football Crazy (Bellfruit) (Scorpion 4) (set 7) + + + sc4fbcrzg + Football Crazy (Bellfruit) (Scorpion 4) (set 8) + + + sc4fbcrzh + Football Crazy (Bellfruit) (Scorpion 4) (set 9) + + + sc4fbcrzi + Football Crazy (Bellfruit) (Scorpion 4) (set 10) + + + sc4fbspn + Fat Boy Spin (Bellfruit) (Scorpion 4) (set 1) + + + sc4fbspna + Fat Boy Spin (Bellfruit) (Scorpion 4) (set 2) + + + sc4fbspnb + Fat Boy Spin (Bellfruit) (Scorpion 4) (set 3) + + + sc4fbspnc + Fat Boy Spin (Bellfruit) (Scorpion 4) (set 4) + + + sc4fcc + Firecracker Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4fcca + Firecracker Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4fccb + Firecracker Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4fccc + Firecracker Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4fd7th + Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 1) + + + sc4fd7tha + Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 2) + + + sc4fd7thb + Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 3) + + + sc4fd7thc + Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 1) + + + sc4fd7thd + Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 2) + + + sc4fd7the + Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 4) + + + sc4fd7thf + Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 5) + + + sc4fd7thg + Frankie Dettori's 7th Heaven (Bellfruit) (Scorpion 4) (set 6) + + + sc4fd7thh + Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 3) + + + sc4fd7thi + Frankie Dettori's 7th Heaven SP98 (Bellfruit) (Scorpion 4) (set 4) + + + sc4fevdt + Fever (PR1202) (Dutch) (Bellfruit) (Scorpion 4) (set 1) + + + sc4fevdta + Fever (PR1202) (Dutch) (Bellfruit) (Scorpion 4) (set 2) + + + sc4fevdtb + Fever (PR1202) (Dutch) (Bellfruit) (Scorpion 4) (set 3) + + + sc4fever + Fever (PR1007) (Bellfruit) (Scorpion 4) (set 1) + + + sc4fevera + Fever (PR1007) (Bellfruit) (Scorpion 4) (set 2) + + + sc4feverb + Fever (PR1007) (Bellfruit) (Scorpion 4) (set 3) + + + sc4feverc + Fever (PR1007) (Bellfruit) (Scorpion 4) (set 4) + + + sc4feverd + Fever (PR1007) (Bellfruit) (Scorpion 4) (set 5) + + + sc4fevere + Fever (PR1007) (Bellfruit) (Scorpion 4) (set 6) + + + sc4feverf + Fever (PR1007) (Bellfruit) (Scorpion 4) (set 7) + + + sc4feverg + Fever (PR1007) (Bellfruit) (Scorpion 4) (set 8) + + + sc4feverh + Fever (PR1007) (Bellfruit) (Scorpion 4) (set 9) + + + sc4feverk + Fever (PR1007) (Bellfruit) (Scorpion 4) (set 10) + + + sc4fevnx + Fever The Next (Dutch) (Bellfruit) (Scorpion 4) (set 1) + + + sc4fevnxa + Fever The Next (Dutch) (Bellfruit) (Scorpion 4) (set 2) + + + sc4ffru + Fast Fruit (Qps / Mazooma) (Scorpion 4) (set 1) + + + sc4ffrua + Fast Fruit (Qps) (Scorpion 4) (set 1) + + + sc4ffrub + Fast Fruit (Qps / Mazooma) (Scorpion 4) (set 2) + + + sc4ffruc + Fast Fruit (Qps) (Scorpion 4) (set 2) + + + sc4ffrud + Fast Fruit (Qps) (Scorpion 4) (set 3) + + + sc4ffrue + Fast Fruit (Qps) (Scorpion 4) (set 4) + + + sc4fguy + Family Guy (Bellfruit) (Scorpion 4) (set 1) + + + sc4fguya + Family Guy (Bellfruit) (Scorpion 4) (set 2) + + + sc4fguyb + Family Guy (Bellfruit) (Scorpion 4) (set 3) + + + sc4fguyc + Family Guy (Bellfruit) (Scorpion 4) (set 4) + + + sc4fguyd + Family Guy (Bellfruit) (Scorpion 4) (set 5) + + + sc4fguye + Family Guy (Bellfruit) (Scorpion 4) (set 6) + + + sc4fire + Firepower (Mazooma) (Scorpion 4) (set 1) + + + sc4firea + Firepower (Mazooma) (Scorpion 4) (set 2) + + + sc4fmj + Full Metal Jackpot (Mazooma) (Scorpion 4) (set 1) + + + sc4fmja + Full Metal Jackpot (Mazooma) (Scorpion 4) (set 2) + + + sc4fmjb + Full Metal Jackpot (Mazooma) (Scorpion 4) (set 3) + + + sc4fmjc + Full Metal Jackpot (Mazooma) (Scorpion 4) (set 4) + + + sc4fpitc + Fever Pitch (Bellfruit) (Scorpion 4) (set 1) + + + sc4fpitca + Fever Pitch (Bellfruit) (Scorpion 4) (set 2) + + + sc4fpitcb + Fever Pitch (Bellfruit) (Scorpion 4) (set 3) + + + sc4fpitcc + Fever Pitch (Bellfruit) (Scorpion 4) (set 11) + + + sc4fpitcd + Fever Pitch (Bellfruit) (Scorpion 4) (set 4) + + + sc4fpitce + Fever Pitch (Bellfruit) (Scorpion 4) (set 5) + + + sc4fpitcf + Fever Pitch (Bellfruit) (Scorpion 4) (set 6) + + + sc4fpitcg + Fever Pitch (Bellfruit) (Scorpion 4) (set 12) + + + sc4fpitch + Fever Pitch (Bellfruit) (Scorpion 4) (set 7) + + + sc4fpitci + Fever Pitch (Bellfruit) (Scorpion 4) (set 8) + + + sc4fpitcj + Fever Pitch (Bellfruit) (Scorpion 4) (set 9) + + + sc4fpitck + Fever Pitch (Bellfruit) (Scorpion 4) (set 10) + + + sc4frboo + Frooty Booty (Bellfruit) (Scorpion 4) (set 1) + + + sc4frbooa + Frooty Booty (Bellfruit) (Scorpion 4) (set 2) + + + sc4frboob + Frooty Booty (Bellfruit) (Scorpion 4) (set 3) + + + sc4frbooc + Frooty Booty (Bellfruit) (Scorpion 4) (set 4) + + + sc4frenz + Fruit Frenzy (Bellfruit) (Scorpion 4) (set 1) + + + sc4frenza + Fruit Frenzy (Bellfruit) (Scorpion 4) (set 2) + + + sc4frenzb + Fruit Frenzy (Bellfruit) (Scorpion 4) (set 3) + + + sc4frenzc + Fruit Frenzy (Bellfruit) (Scorpion 4) (set 4) + + + sc4frenzd + Fruit Frenzy (Bellfruit) (Scorpion 4) (set 5) + + + sc4frenze + Fruit Frenzy (Bellfruit) (Scorpion 4) (set 6) + + + sc4frsu + Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 1) + + + sc4frsua + Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 2) + + + sc4frsub + Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 3) + + + sc4frsuc + Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 4) + + + sc4frsud + Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 5) + + + sc4frsue + Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 6) + + + sc4frsuf + Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 7) + + + sc4frsug + Casino Fruits 'n' Suits (Bellfruit) (Scorpion 4) (set 8) + + + sc4ftopi + Fruitopia (Qps) (Scorpion 4) (set 1) + + + sc4ftopia + Fruitopia (Qps) (Scorpion 4) (set 2) + + + sc4ftopib + Fruitopia (Qps) (Scorpion 4) (set 3) + + + sc4ftopic + Fruitopia (Qps) (Scorpion 4) (set 4) + + + sc4ftopid + Fruitopia (V2.1) (Qps) (Scorpion 4) (set 1) + + + sc4ftopie + Fruitopia (V2.2) (Qps) (Scorpion 4) (set 1) + + + sc4ftopif + Fruitopia (V1.1) (Qps) (Scorpion 4) (set 1) + + + sc4ftopig + Fruitopia (V2.1) (Qps) (Scorpion 4) (set 2) + + + sc4ftopih + Fruitopia (V2.2) (Qps) (Scorpion 4) (set 2) + + + sc4ftopii + Fruitopia (V1.1) (Qps) (Scorpion 4) (set 2) + + + sc4fullt + Full Throttle (011) (Qps) (Scorpion 4) (set 1) + + + sc4fullta + Full Throttle (041) (Qps) (Scorpion 4) (set 1) + + + sc4fulltb + Full Throttle (011) (Qps) (Scorpion 4) (set 2) + + + sc4fulltc + Full Throttle (041) (Qps) (Scorpion 4) (set 2) + + + sc4fulltd + Full Throttle (012) (Qps) (Scorpion 4) (set 1) + + + sc4fullte + Full Throttle (042) (Qps) (Scorpion 4) (set 1) + + + sc4fulltf + Full Throttle (013) (Qps) (Scorpion 4) (set 1) + + + sc4fulltg + Full Throttle (012) (Qps) (Scorpion 4) (set 2) + + + sc4fullth + Full Throttle (042) (Qps) (Scorpion 4) (set 2) + + + sc4fullti + Full Throttle (013) (Qps) (Scorpion 4) (set 2) + + + sc4fwp + Five Ways Pays (Mazooma) (Scorpion 4) (set 1) + + + sc4fwpa + Five Ways Pays (Mazooma) (Scorpion 4) (set 2) + + + sc4fwpb + Five Ways Pays (Mazooma) (Scorpion 4) (set 3) + + + sc4fwpc + Five Ways Pays (Mazooma) (Scorpion 4) (set 4) + + + sc4fwpcs + Five Ways Pays (Mazooma) (Scorpion 4) (set 5) + + + sc4fwpcsa + Five Ways Pays (Mazooma) (Scorpion 4) (set 6) + + + sc4fwpcsb + Five Ways Pays (Mazooma) (Scorpion 4) (set 7) + + + sc4gag + Grab A Granny (PR7019, GRAB) (Mazooma) (Scorpion 4) (set 1) + + + sc4gaga + Grab A Granny (PR7019, GRAN) (Mazooma) (Scorpion 4) (set 1) + + + sc4gagb + Grab A Granny (PR7019, GRAB) (Mazooma) (Scorpion 4) (set 2) + + + sc4gagc + Grab A Granny (PR7019, GRAN) (Mazooma) (Scorpion 4) (set 2) + + + sc4gamcs + The Game Casino (Dutch) (Bellfruit) (Scorpion 4) + + + sc4game + The Game (Dutch) (Bellfruit) (Scorpion 4) + + + sc4gball + Golden Balls (Bellfruit) (Scorpion 4) (set 1) + + + sc4gballa + Golden Balls (Bellfruit) (Scorpion 4) (set 2) + + + sc4gballb + Golden Balls (Bellfruit) (Scorpion 4) (set 3) + + + sc4gballc + Golden Balls (Bellfruit) (Scorpion 4) (set 4) + + + sc4gbcas + Casino Golden Balls (Bellfruit) (Scorpion 4) (set 1) + + + sc4gbcasa + Casino Golden Balls (Bellfruit) (Scorpion 4) (set 2) + + + sc4gbcasb + Casino Golden Balls (Bellfruit) (Scorpion 4) (set 3) + + + sc4gbcasc + Casino Golden Balls (Bellfruit) (Scorpion 4) (set 4) + + + sc4gcb + Grand Blaster Cash (Mazooma) (Scorpion 4) (set 1) + + + sc4gcba + Grand Blaster Cash (Mazooma) (Scorpion 4) (set 2) + + + sc4gcbb + Grand Blaster Cash (Mazooma) (Scorpion 4) (set 3) + + + sc4gcbc + Grand Blaster Cash (Mazooma) (Scorpion 4) (set 4) + + + sc4gcbd + Grand Blaster Cash (Mazooma) (Scorpion 4) (set 5) + + + sc4gcbe + Grand Blaster Cash (Mazooma) (Scorpion 4) (set 6) + + + sc4gcbf + Grand Blaster Cash (Mazooma) (Scorpion 4) (set 7) + + + sc4gcbg + Grand Blaster Cash (Mazooma) (Scorpion 4) (set 8) + + + sc4gcbh + Grand Blaster Cash (Mazooma) (Scorpion 4) (set 9) + + + sc4gcbi + Grand Blaster Cash (Mazooma) (Scorpion 4) (set 10) + + + sc4gcbj + Grand Blaster Cash (Mazooma) (Scorpion 4) (set 11) + + + sc4gcclb + Grandslam Casino (Bellfruit) (Scorpion 4) (set 1) + + + sc4gcclba + Grandslam Casino (Bellfruit) (Scorpion 4) (set 2) + + + sc4gcclbb + Grandslam Casino (Bellfruit) (Scorpion 4) (set 3) + + + sc4gcclbc + Grandslam Casino (Bellfruit) (Scorpion 4) (set 4) + + + sc4gcclbd + Grandslam Casino (Bellfruit) (Scorpion 4) (set 5) + + + sc4gcclbe + Grandslam Casino (Bellfruit) (Scorpion 4) (set 6) + + + sc4gcclbf + Grandslam Casino (Bellfruit) (Scorpion 4) (set 7) + + + sc4gcclbg + Grandslam Casino (Bellfruit) (Scorpion 4) (set 8) + + + sc4gcclbh + Grandslam Casino (Bellfruit) (Scorpion 4) (set 9) + + + sc4gcclbi + Grandslam Casino (Bellfruit) (Scorpion 4) (set 10) + + + sc4gcclbj + Grandslam Casino (Bellfruit) (Scorpion 4) (set 11) + + + sc4gcclbk + Grandslam Casino (Bellfruit) (Scorpion 4) (set 12) + + + sc4gcclbl + Grandslam Casino (Bellfruit) (Scorpion 4) (set 13) + + + sc4gcclbm + Grandslam Casino (Bellfruit) (Scorpion 4) (set 14) + + + sc4gcclbn + Grandslam Casino (Bellfruit) (Scorpion 4) (set 15) + + + sc4gcclbo + Grandslam Casino (Bellfruit) (Scorpion 4) (set 17) + + + sc4gcclbp + Grandslam Casino (Bellfruit) (Scorpion 4) (set 16) + + + sc4gcclbq + Grandslam Casino (Bellfruit) (Scorpion 4) (set 18) + + + sc4gd + Gold Digger (Bellfruit) (Scorpion 4) (set 1) + + + sc4gda + Gold Digger (Bellfruit) (Scorpion 4) (set 2) + + + sc4gdb + Gold Digger (Bellfruit) (Scorpion 4) (set 3) + + + sc4gdc + Gold Digger (Bellfruit) (Scorpion 4) (set 4) + + + sc4gdclb + Gold Digger Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4gdclba + Gold Digger Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4gdclbb + Gold Digger Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4gdclbc + Gold Digger Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4gdclbd + Gold Digger Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4gdclbe + Gold Digger Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4gdclbf + Gold Digger Club (Bellfruit) (Scorpion 4) (set 7) + + + sc4gdclbg + Gold Digger Club (Bellfruit) (Scorpion 4) (set 8) + + + sc4gdclbh + Gold Digger Club (Bellfruit) (Scorpion 4) (set 9) + + + sc4gdclbi + Gold Digger Club (Bellfruit) (Scorpion 4) (set 10) + + + sc4gdclbj + Gold Digger Club (Bellfruit) (Scorpion 4) (set 11) + + + sc4gdclbk + Gold Digger Club (Bellfruit) (Scorpion 4) (set 12) + + + sc4gdd + Gold Digger (Bellfruit) (Scorpion 4) (set 5) + + + sc4gde + Gold Digger (Bellfruit) (Scorpion 4) (set 6) + + + sc4gdf + Gold Digger (Bellfruit) (Scorpion 4) (set 7) + + + sc4gdg + Gold Digger (Bellfruit) (Scorpion 4) (set 8) + + + sc4gdmz + Golden X (Mazooma) (PR2056) (Scorpion 4) (set 3) + + + sc4gdmza + Golden X (Mazooma) (PR2056) (Scorpion 4) (set 4) + + + sc4gfev + Gold Fever (Mazooma) (Scorpion 4) (set 1) + + + sc4gfeva + Gold Fever (Mazooma) (Scorpion 4) (set 2) + + + sc4gfevb + Gold Fever (Mazooma) (Scorpion 4) (set 3) + + + sc4ggame + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 1) + + + sc4ggame0 + Golden X (Mazooma) (PR2056) (Scorpion 4) (set 2) + + + sc4ggame1 + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 7) + + + sc4ggame2 + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 8) + + + sc4ggame3 + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 6) + + + sc4ggame4 + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 7) + + + sc4ggame5 + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 8) + + + sc4ggame6 + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 9) + + + sc4ggame7 + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 1) + + + sc4ggame8 + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 2) + + + sc4ggame9 + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 3) + + + sc4ggamea + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 1) + + + sc4ggameaa + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 4) + + + sc4ggameab + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 5) + + + sc4ggameac + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 6) + + + sc4ggamead + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 7) + + + sc4ggameae + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 8) + + + sc4ggameb + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 2) + + + sc4ggamec + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 3) + + + sc4ggamed + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 4) + + + sc4ggamef + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 1) + + + sc4ggameg + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 2) + + + sc4ggamei + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 2) + + + sc4ggamej + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 3) + + + sc4ggamek + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 4) + + + sc4ggamel + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 1) + + + sc4ggamem + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 2) + + + sc4ggamen + Golden X (Mazooma) (PR2056) (Scorpion 4) (set 1) + + + sc4ggamep + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 3) + + + sc4ggameq + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 4) + + + sc4ggamer + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 5) + + + sc4ggames + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 5) + + + sc4ggamet + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 6) + + + sc4ggameu + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 7) + + + sc4ggamev + Golden X (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 5) + + + sc4ggamew + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 3) + + + sc4ggamex + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 4) + + + sc4ggamey + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 5) + + + sc4ggamez + Golden X (Mazooma) (PR2056, newer?) (Scorpion 4) (set 6) + + + sc4ggcas + Golden X (Mazooma) (Scorpion 4) (GLDX, set 9) + + + sc4ggcasa + Golden X (Mazooma) (Scorpion 4) (GLDX, set 10) + + + sc4ggcasb + Golden X (Mazooma) (Scorpion 4) (GLDX, set 11) + + + sc4ggcasc + Golden X (Mazooma) (Scorpion 4) (GLDX, set 12) + + + sc4ggcl + Golden Grid Club (V1.0) (Qps) (Scorpion 4) + + + sc4ggcla + Golden Grid Club (V411) (Qps) (Scorpion 4) (set 1) + + + sc4ggclb + Golden Grid Club (V411) (Qps) (Scorpion 4) (set 2) + + + sc4ggclc + Golden Grid Club (V412) (Qps) (Scorpion 4) (set 1) + + + sc4ggcld + Golden Grid Club (V412) (Qps) (Scorpion 4) (set 2) + + + sc4ggdlx + Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 1) + + + sc4ggdlxa + Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 3) + + + sc4ggdlxb + Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 4) + + + sc4ggdlxc + Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 2) + + + sc4ggdlxd + Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 5) + + + sc4ggdlxe + Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 6) + + + sc4ggdlxf + Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 7) + + + sc4ggdlxg + Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (GGDX, set 8) + + + sc4ggg + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 1) + + + sc4gggb + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 2) + + + sc4gggc + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 3) + + + sc4gggd + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 4) + + + sc4ggge + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 5) + + + sc4gggf + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 6) + + + sc4gggg + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 13) + + + sc4gggh + Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 1) + + + sc4gggi + Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 2) + + + sc4gggk + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 7) + + + sc4gggl + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 8) + + + sc4gggm + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 9) + + + sc4gggn + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 10) + + + sc4gggo + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 11) + + + sc4gggp + Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 12) + + + sc4gggq + Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 3) + + + sc4gggr + Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 4) + + + sc4gggs + Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 5) + + + sc4gggtb + Grand Golden Game (Mazooma) (PR2056, GGGT) (Scorpion 4) (Top Box, set 1) + + + sc4gggtba + Grand Golden Game (Mazooma) (PR2056, GGGT) (Scorpion 4) (Top Box, set 2) + + + sc4ggrid + Golden Grid (V1.0) (Qps) (Scorpion 4) (set 1) + + + sc4ggrida + Golden Grid (V1.0) (Qps) (Scorpion 4) (set 2) + + + sc4ggridb + Golden Grid (V1.1) (Qps) (Scorpion 4) (set 1) + + + sc4ggridc + Golden Grid (V1.1) (Qps) (Scorpion 4) (set 2) + + + sc4ggridd + Golden Grid (V1.3) (Qps) (Scorpion 4) + + + sc4ggride + Golden Grid (V1.0) (Qps) (Scorpion 4) (set 3) + + + sc4ggridf + Golden Grid (V1.0) (Qps) (Scorpion 4) (set 4) + + + sc4ggridg + Golden Grid (V1.1) (Qps) (Scorpion 4) (set 3) + + + sc4ggridh + Golden Grid (V1.1) (Qps) (Scorpion 4) (set 4) + + + sc4ggridi + Golden Grid (V011) (Scorpion 4) (set 1) + + + sc4ggridj + Golden Grid (V041) (Qps) (Scorpion 4) (set 1) + + + sc4ggridk + Golden Grid (V011) (Scorpion 4) (set 2) + + + sc4ggridl + Golden Grid (V041) (Qps) (Scorpion 4) (set 2) + + + sc4ggridm + Golden Grid (V012) (Qps) (Scorpion 4) (set 1) + + + sc4ggridn + Golden Grid (V012) (Qps) (Scorpion 4) (set 2) + + + sc4ggtb + Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 1) + + + sc4ggtba + Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 2) + + + sc4ggtbb + Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 3) + + + sc4ghost + Golden Ghost (Mazooma) (Scorpion 4) (set 1) + + + sc4ghosta + Golden Ghost (Mazooma) (Scorpion 4) (Top Box, set 1) + + + sc4ghostb + Golden Ghost (Mazooma) (Scorpion 4) (set 2) + + + sc4ghostc + Golden Ghost (Mazooma) (Scorpion 4) (set 3) + + + sc4ghostd + Golden Ghost (Mazooma) (Scorpion 4) (Top Box, set 2) + + + sc4ghoste + Golden Ghost (Mazooma) (Scorpion 4) (set 4) + + + sc4ghostf + Golden Ghost (Mazooma) (Scorpion 4) (set 5) + + + sc4ghostg + Golden Ghost (Mazooma) (Scorpion 4) (set 6) + + + sc4ghosth + Golden Ghost (Mazooma) (Scorpion 4) (Top Box, set 3) + + + sc4glad + Gladiator (Mazooma) (Scorpion 4) (set 1) + + + sc4glada + Gladiator (Mazooma) (Scorpion 4) (set 2) + + + sc4gladb + Gladiator (Mazooma) (Scorpion 4) (set 3) + + + sc4gladc + Gladiator (Mazooma) (Scorpion 4) (set 4) + + + sc4gladd + Gladiator (Mazooma) (Scorpion 4) (set 5) + + + sc4glade + Gladiator (Mazooma) (Scorpion 4) (set 6) + + + sc4gladf + Gladiator (Mazooma) (Scorpion 4) (set 7) + + + sc4gladg + Gladiator (Mazooma) (Scorpion 4) (set 8) + + + sc4gldcl + Gladiator Club (Mazooma) (Scorpion 4) (set 1) + + + sc4gldcla + Gladiator Club (Mazooma) (Scorpion 4) (set 2) + + + sc4gnc + Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 1) + + + sc4gnca + Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 2) + + + sc4gncb + Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 3) + + + sc4gncc + Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 4) + + + sc4gncd + Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 5) + + + sc4gnce + Golden Game Club (Mazooma) (Scorpion 4) (GLDC, set 6) + + + sc4gocas + Casino Golden Oldie (Mazooma) (Scorpion 4) (set 5) + + + sc4gocasa + Casino Golden Oldie (Mazooma) (Scorpion 4) (set 6) + + + sc4goldo + Casino Golden Oldie (Mazooma) (Scorpion 4) (set 1) + + + sc4goldoa + Casino Golden Oldie (Mazooma) (Scorpion 4) (set 2) + + + sc4goldob + Casino Golden Oldie (Mazooma) (Scorpion 4) (set 3) + + + sc4goldoc + Casino Golden Oldie (Mazooma) (Scorpion 4) (set 4) + + + sc4goldw + Golden Winner (Bellfruit) (Scorpion 4) (set 1) + + + sc4goldwa + Golden Winner (Bellfruit) (Scorpion 4) (set 2) + + + sc4goldwb + Golden Winner (Bellfruit) (Scorpion 4) (set 3) + + + sc4goldwc + Golden Winner (Bellfruit) (Scorpion 4) (set 4) + + + sc4goldwd + Golden Winner (Bellfruit) (Scorpion 4) (set 5) + + + sc4goldwe + Golden Winner (Bellfruit) (Scorpion 4) (set 6) + + + sc4goldwf + Golden Winner (Bellfruit) (Scorpion 4) (set 7) + + + sc4goldwg + Golden Winner (Bellfruit) (Scorpion 4) (set 8) + + + sc4goud + Goudkoorts (Dutch) (Bellfruit) (Scorpion 4) + + + sc4greed + Greedy Gonzalez (Bellfruit) (Scorpion 4) (set 1) + + + sc4greeda + Greedy Gonzalez (Bellfruit) (Scorpion 4) (set 2) + + + sc4gshot + Golden Shot (Qps) (Scorpion 4) (set 1) + + + sc4gshota + Golden Shot Arcade (Qps) (Scorpion 4) (set 1) + + + sc4gshotb + Golden Shot (Qps) (Scorpion 4) (set 2) + + + sc4gshotc + Golden Shot Arcade (Qps) (Scorpion 4) (set 2) + + + sc4gslam + Grandslam Club (BFM) (Scorpion 4) (set 1) + + + sc4gslama + Grandslam Club (BFM) (Scorpion 4) (set 2) + + + sc4gslamb + Grandslam Club (BFM) (Scorpion 4) (set 3) + + + sc4gslamc + Grandslam Club (BFM) (Scorpion 4) (set 4) + + + sc4gslamd + Grandslam Club (BFM) (Scorpion 4) (set 5) + + + sc4gslame + Grandslam Club (BFM) (Scorpion 4) (set 6) + + + sc4gslamf + Grandslam Club (BFM) (Scorpion 4) (set 7) + + + sc4gunp + Gunpowder Slot (Bellfruit) (Scorpion 4) (set 1) + + + sc4gunpa + Gunpowder Slot (Bellfruit) (Scorpion 4) (set 2) + + + sc4gunpb + Gunpowder Slot (Bellfruit) (Scorpion 4) (set 3) + + + sc4gunpc + Gunpowder Slot (Bellfruit) (Scorpion 4) (set 4) + + + sc4gunpd + Gunpowder Slot (Bellfruit) (Scorpion 4) (set 5) + + + sc4gunpe + Gunpowder Slot (Bellfruit) (Scorpion 4) (set 6) + + + sc4gunpf + Gunpowder Slot (Bellfruit) (Scorpion 4) (set 7) + + + sc4gunpg + Gunpowder Slot (Bellfruit) (Scorpion 4) (set 8) + + + sc4gx + Bar X (Mazooma) (Scorpion 4) (BARX, set 1) + + + sc4gx3 + Golden X (Mazooma) (Scorpion 4) (GLDX, set 1) + + + sc4gx3a + Golden X (Mazooma) (Scorpion 4) (GLDX, set 2) + + + sc4gx3b + Golden X (Mazooma) (Scorpion 4) (GLDX, set 3) + + + sc4gx3c + Golden X (Mazooma) (Scorpion 4) (GLDX, set 4) + + + sc4gx3d + Golden X (Mazooma) (Scorpion 4) (GLDX, set 5) + + + sc4gx3e + Golden X (Mazooma) (Scorpion 4) (GLDX, set 6) + + + sc4gx3f + Golden X (Mazooma) (Scorpion 4) (GLDX, set 7) + + + sc4gx3g + Golden X (Mazooma) (Scorpion 4) (GLDX, set 8) + + + sc4gxa + Bar X (Mazooma) (Scorpion 4) (BARX, set 8) + + + sc4gxb + Bar X (Mazooma) (Scorpion 4) (BARX, set 9) + + + sc4gxcasa + Bar X (Mazooma) (Scorpion 4) (BARX, set 2) + + + sc4gxcasb + Bar X (Mazooma) (Scorpion 4) (BARX, set 3) + + + sc4gxcasc + Bar X (Mazooma) (Scorpion 4) (BARX, set 4) + + + sc4gxcasd + Bar X (Mazooma) (Scorpion 4) (BARX, set 5) + + + sc4gxcase + Bar X (Mazooma) (Scorpion 4) (BARX, set 6) + + + sc4gxcasf + Bar X (Mazooma) (Scorpion 4) (BARX, set 7) + + + sc4h6cl + Hot Six Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4h6cla + Hot Six Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4h6clb + Hot Six Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4h6clc + Hot Six Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4hapnt + Happy Notes (Bellfruit) (Scorpion 4) (set 1) + + + sc4hapnta + Happy Notes (Bellfruit) (Scorpion 4) (set 2) + + + sc4hapntb + Happy Notes (Bellfruit) (Scorpion 4) (set 3) + + + sc4hapntc + Happy Notes (Bellfruit) (Scorpion 4) (set 4) + + + sc4hapntd + Happy Notes (Bellfruit) (Scorpion 4) (set 5) + + + sc4hapnte + Happy Notes (Bellfruit) (Scorpion 4) (set 6) + + + sc4hdd + Hickory Dickory Dosh (PR7016) (Mazooma) (Scorpion 4) (set 1) + + + sc4hdda + Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 1) + + + sc4hddb + Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 2) + + + sc4hddc + Hickory Dickory Dosh (PR7016) (Mazooma) (Scorpion 4) (set 2) + + + sc4hddd + Hickory Dickory Dosh (PR7016) (Mazooma) (Scorpion 4) (set 3) + + + sc4hdde + Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 3) + + + sc4hddf + Hickory Dickory Dosh (PR7045) (Mazooma) (Scorpion 4) (set 4) + + + sc4heatw + Heatwave (Dutch) (Bellfruit) (Scorpion 4) + + + sc4hellb + Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 1) + + + sc4hellbb + Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 2) + + + sc4hellbc + Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 3) + + + sc4hellbd + Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 4) + + + sc4hellbe + Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 5) + + + sc4hellbf + Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 6) + + + sc4hellbg + Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 7) + + + sc4hellbh + Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 8) + + + sc4hellbi + Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 9) + + + sc4hellbj + Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 10) + + + sc4helld + Hells Bells (PR1201) (Dutch) (Bellfruit) (Scorpion 4) + + + sc4helrd + Hellraiser (Dutch) (Bellfruit) (Scorpion 4) (set 1) + + + sc4helrs + Hellraiser (Dutch) (Bellfruit) (Scorpion 4) (set 2) + + + sc4hf + Happy Fruits (Bellfruit) (Scorpion 4) (set 1) + + + sc4hfa + Happy Fruits (Bellfruit) (Scorpion 4) (set 2) + + + sc4hfb + Happy Fruits (Bellfruit) (Scorpion 4) (set 3) + + + sc4hfc + Happy Fruits (Bellfruit) (Scorpion 4) (set 4) + + + sc4hfcl + Happy Fruits Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4hfcla + Happy Fruits Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4hfd + Happy Fruits (Bellfruit) (Scorpion 4) (set 5) + + + sc4hfe + Happy Fruits (Bellfruit) (Scorpion 4) (set 6) + + + sc4hff + Happy Fruits (Bellfruit) (Scorpion 4) (set 7) + + + sc4hfg + Happy Fruits (Bellfruit) (Scorpion 4) (set 8) + + + sc4hi5 + High 5 (Bellfruit) (Scorpion 4) (set 1) + + + sc4hi5a + High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 1) + + + sc4hi5b + High 5 (Bellfruit) (Scorpion 4) (set 2) + + + sc4hi5c + High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 2) + + + sc4hi5d + High 5 (Bellfruit) (Scorpion 4) (set 3) + + + sc4hi5e + High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 3) + + + sc4hi5f + High 5 (Bellfruit) (Scorpion 4) (set 4) + + + sc4hi5g + High 5 (Bellfruit / Whitbread) (Scorpion 4) (set 4) + + + sc4hill + Hill Billionaire (Bellfruit) (Scorpion 4) (set 1) + + + sc4hilla + Hill Billionaire (Bellfruit) (Scorpion 4) (set 2) + + + sc4hilo + Hilowatha (Bellfruit) (Scorpion 4) (set 1) + + + sc4hiloa + Hilowatha (Bellfruit) (Scorpion 4) (set 2) + + + sc4hilob + Hilowatha (Bellfruit) (Scorpion 4) (set 3) + + + sc4hiloc + Hilowatha (Bellfruit) (Scorpion 4) (set 4) + + + sc4hilod + Hilowatha (Bellfruit) (Scorpion 4) (set 5) + + + sc4hiloe + Hilowatha (Bellfruit) (Scorpion 4) (set 6) + + + sc4hilof + Hilowatha (Bellfruit) (Scorpion 4) (set 7) + + + sc4hilog + Hilowatha (Bellfruit) (Scorpion 4) (set 8) + + + sc4hiloh + Hilowatha (Bellfruit) (Scorpion 4) (set 9) + + + sc4hiloi + Hilowatha (Bellfruit) (Scorpion 4) (set 10) + + + sc4hiloj + Hilowatha (Bellfruit) (Scorpion 4) (set 11) + + + sc4hilok + Hilowatha (Bellfruit) (Scorpion 4) (set 12) + + + sc4himi + High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 1) + + + sc4himia + High 'n' Mighty (PR2119) (Mazooma) (Scorpion 4) (set 1) + + + sc4himib + High 'n' Mighty (PR2067) (Mazooma) (Scorpion 4) (set 1) + + + sc4himic + High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 2) + + + sc4himid + High 'n' Mighty (PR2067) (Mazooma) (Scorpion 4) (set 2) + + + sc4himie + High 'n' Mighty (PR2119) (Mazooma) (Scorpion 4) (set 2) + + + sc4himif + High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 3) + + + sc4himig + High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 4) + + + sc4himih + High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 5) + + + sc4himii + High 'n' Mighty (PR2999) (Mazooma) (Scorpion 4) (set 6) + + + sc4hiss + Hissing Quid (Qps) (Scorpion 4) (set 1) + + + sc4hissa + Hissing Quid (Qps) (Scorpion 4) (set 2) + + + sc4hissb + Hissing Quid (Qps) (Scorpion 4) (set 3) + + + sc4hissc + Hissing Quid (Qps) (Scorpion 4) (set 4) + + + sc4hissd + Hissing Quid (Qps) (Scorpion 4) (set 5) + + + sc4hisse + Hissing Quid (Qps) (Scorpion 4) (set 6) + + + sc4hissf + Hissing Quid (Qps) (Scorpion 4) (set 7) + + + sc4hissg + Hissing Quid (Qps) (Scorpion 4) (set 8) + + + sc4hitsh + Hit Shot (Bellfruit) (Scorpion 4) (set 1) + + + sc4hitsha + Hit Shot (Bellfruit) (Scorpion 4) (set 2) + + + sc4hitshb + Hit Shot (Bellfruit) (Scorpion 4) (set 3) + + + sc4hitshc + Hit Shot (Bellfruit) (Scorpion 4) (set 4) + + + sc4hitshd + Hit Shot (Bellfruit) (Scorpion 4) (set 5) + + + sc4hitshe + Hit Shot (Bellfruit) (Scorpion 4) (set 6) + + + sc4hntcs + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 1) + + + sc4hntcsa + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 2) + + + sc4hntcsb + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 3) + + + sc4hntcsc + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 4) + + + sc4hntcsd + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 5) + + + sc4hntcse + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 6) + + + sc4hntcsf + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 7) + + + sc4hntcsg + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 8) + + + sc4hntcsh + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 9) + + + sc4hntcsi + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 10) + + + sc4hntcsj + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 11) + + + sc4hntcsk + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 12) + + + sc4hntcsl + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 13) + + + sc4hntcsm + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 14) + + + sc4hntcsn + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 15) + + + sc4hntcso + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 16) + + + sc4hntcsp + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 17) + + + sc4hntcsq + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 18) + + + sc4hntcsr + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 19) + + + sc4hntcss + Happy Notes Casino (Bellfruit) (Scorpion 4) (set 20) + + + sc4holyw + Hollywood (Bellfruit) (Scorpion 4) (set 1) + + + sc4holywa + Hollywood (Bellfruit / Whitbread) (Scorpion 4) (set 1) + + + sc4holywb + Hollywood (Bellfruit) (Scorpion 4) (set 2) + + + sc4holywc + Hollywood (Bellfruit / Whitbread) (Scorpion 4) (set 2) + + + sc4hotdg + Hot Dog (Bellfruit) (Scorpion 4) (set 1) + + + sc4hotdga + Hot Dog (Bellfruit) (Scorpion 4) (set 2) + + + sc4hotdgb + Hot Dog (Bellfruit) (Scorpion 4) (set 3) + + + sc4hotdgc + Hot Dog (Bellfruit) (Scorpion 4) (set 4) + + + sc4hotpr + Hot Property (Bellfruit) (Scorpion 4) (set 1) + + + sc4hotpra + Hot Property (Bellfruit) (Scorpion 4) (Whitbread, set 1) + + + sc4hotprb + Hot Property (Bellfruit) (Scorpion 4) (set 2) + + + sc4hotprc + Hot Property (Bellfruit) (Scorpion 4) (Whitbread, set 2) + + + sc4hotprd + Hot Property (Bellfruit) (Scorpion 4) (set 3) + + + sc4hotpre + Hot Property (Bellfruit) (Scorpion 4) (set 4) + + + sc4hotrd + Hot Rod (Bellfruit) (Scorpion 4) (set 1) + + + sc4hotrda + Hot Rod (Bellfruit) (Scorpion 4) (set 2) + + + sc4hotsh + Hot Shot (Bellfruit) (Scorpion 4) (set 1) + + + sc4hotsha + Hot Shot (Bellfruit) (Scorpion 4) (set 2) + + + sc4hotwd + Hot Wad (Bellfruit) (Scorpion 4) (set 1) + + + sc4hotwda + Hot Wad (Bellfruit) (Scorpion 4) (set 2) + + + sc4hotwdb + Hot Wad (Bellfruit) (Scorpion 4) (set 3) + + + sc4hotwdc + Hot Wad (Bellfruit) (Scorpion 4) (set 4) + + + sc4hotwdd + Hot Wad (Bellfruit) (Scorpion 4) (set 5) + + + sc4hotwde + Hot Wad (Bellfruit) (Scorpion 4) (set 6) + + + sc4hyde + Hyde & Streak (Mazooma) (Scorpion 4) (set 1) + + + sc4hydea + Hyde & Streak (Mazooma) (Scorpion 4) (set 2) + + + sc4hydeb + Hyde & Streak (Mazooma) (Scorpion 4) (set 3) + + + sc4hydec + Hyde & Streak (Mazooma) (Scorpion 4) (set 4) + + + sc4hyper + Hyperactive (Mazooma) (Scorpion 4) (set 1) + + + sc4hypera + Hyperactive (Mazooma) (Scorpion 4) (set 2) + + + sc4ibiza + Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 1) + + + sc4ibizaa + Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 2) + + + sc4ibizab + Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 3) + + + sc4ibizac + Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 4) + + + sc4ibizad + Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 5) + + + sc4ibizae + Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 6) + + + sc4ibizaf + Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 7) + + + sc4ibizag + Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 8) + + + sc4ibizah + Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 9) + + + sc4ibizai + Red Hot Ibiza (Bellfruit) (Scorpion 4) (set 10) + + + sc4ijclb + Italian Job Club (Mazooma) (Scorpion 4) + + + sc4ijob + Italian Job (Mazooma) (Scorpion 4) (set 1) + + + sc4ijoba + Italian Job (Mazooma) (Scorpion 4) (set 2) + + + sc4ijobb + Italian Job (Mazooma) (Scorpion 4) (set 3) + + + sc4ijobc + Italian Job (Mazooma) (Scorpion 4) (set 4) + + + sc4ijobd + Italian Job (Mazooma) (Scorpion 4) (set 5) + + + sc4ijobe + Italian Job (Mazooma) (Scorpion 4) (set 6) + + + sc4ijobf + Italian Job (Mazooma) (Scorpion 4) (set 7) + + + sc4ijobg + Italian Job (Mazooma) (Scorpion 4) (set 8) + + + sc4ijobh + Italian Job (Mazooma) (Scorpion 4) (set 9) + + + sc4ijobi + Italian Job (Mazooma) (Scorpion 4) (set 10) + + + sc4ijobj + Italian Job (Mazooma) (Scorpion 4) (set 11) + + + sc4ijobk + Italian Job (Mazooma) (Scorpion 4) (set 12) + + + sc4ijobl + Italian Job (Mazooma) (Scorpion 4) (set 13) + + + sc4ijobm + Italian Job (Mazooma) (Scorpion 4) (set 14) + + + sc4inspn + Inner Spin (Mazooma) (Scorpion 4) (set 1) + + + sc4inspna + Inner Spin (Mazooma) (Scorpion 4) (set 2) + + + sc4ivply + 4 Play (Dutch) (Bellfruit) (Scorpion 4) + + + sc4jack + Jack The Kipper (Mazooma) (Scorpion 4) (set 1) + + + sc4jacka + Jack The Kipper (Mazooma) (Scorpion 4) (set 2) + + + sc4jackb + Jack The Kipper (Mazooma) (Scorpion 4) (set 3) + + + sc4jackc + Jack The Kipper (Mazooma) (Scorpion 4) (set 4) + + + sc4jackd + Jack The Kipper (Mazooma) (Scorpion 4) (set 5) + + + sc4jacke + Jack The Kipper (Mazooma) (Scorpion 4) (set 6) + + + sc4jackf + Jack The Kipper (Mazooma) (Scorpion 4) (set 7) + + + sc4jackg + Jack The Kipper (Mazooma) (Scorpion 4) (set 8) + + + sc4jbuck + Jungle Bucks (Bellfruit) (Scorpion 4) (set 1) + + + sc4jbucka + Jungle Bucks (Bellfruit) (Scorpion 4) (set 2) + + + sc4jbuckb + Jungle Bucks (Bellfruit) (Scorpion 4) (set 3) + + + sc4jbuckc + Jungle Bucks (Bellfruit) (Scorpion 4) (set 4) + + + sc4jbuckd + Jungle Bucks (Bellfruit) (Scorpion 4) (set 5) + + + sc4jiggn + Jiggery Pockery (German) (Nova) (Scorpion 4) + + + sc4jiggr + Jiggery Pokery (Mazooma) (Scorpion 4) (set 1) + + + sc4jiggra + Jiggery Pokery (Mazooma) (Scorpion 4) (set 2) + + + sc4jiggrb + Jiggery Pokery (Mazooma) (Scorpion 4) (set 3) + + + sc4jiggrc + Jiggery Pokery (Mazooma) (Scorpion 4) (set 4) + + + sc4jive + Jive Money (PR2096) (Mazooma) (Scorpion 4) + + + sc4jivea + Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 1) + + + sc4jiveb + Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 2) + + + sc4jivec + Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 3) + + + sc4jived + Jive Money (PR2160) (Mazooma) (Scorpion 4) (set 4) + + + sc4jjc + Jumping Jack Cash (Mazooma) (Scorpion 4) (set 1) + + + sc4jjca + Jumping Jack Cash (Mazooma) (Scorpion 4) (set 2) + + + sc4jjcb + Jumping Jack Cash (Mazooma) (Scorpion 4) (set 3) + + + sc4jjcc + Jumping Jack Cash (Mazooma) (Scorpion 4) (set 4) + + + sc4jjcd + Jumping Jack Cash (Mazooma) (Scorpion 4) (set 5) + + + sc4jjce + Jumping Jack Cash (Mazooma) (Scorpion 4) (set 6) + + + sc4jjcf + Jumping Jack Cash (Mazooma) (Scorpion 4) (set 7) + + + sc4jjcg + Jumping Jack Cash (Mazooma) (Scorpion 4) (set 8) + + + sc4jjch + Jumping Jack Cash (Mazooma) (Scorpion 4) (set 9) + + + sc4jjci + Jumping Jack Cash (Mazooma) (Scorpion 4) (set 10) + + + sc4jjf + Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 1) + + + sc4jjfa + Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 2) + + + sc4jjfb + Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 3) + + + sc4jjfc + Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 1) + + + sc4jjfd + Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 2) + + + sc4jjfe + Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 3) + + + sc4jjff + Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 4) + + + sc4jjfg + Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 4) + + + sc4jjfh + Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 5) + + + sc4jjfi + Jumping Jack Flash (PR6807) (Bellfruit) (Scorpion 4) (set 6) + + + sc4jjfj + Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 5) + + + sc4jjfk + Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 6) + + + sc4jjfl + Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 7) + + + sc4jjfm + Jumping Jack Flash SP98 (PR4607) (Bellfruit) (Scorpion 4) (set 8) + + + sc4jjok + Jackpot Jokers (Bellfruit) (Scorpion 4) (set 1) + + + sc4jjoka + Jackpot Jokers (Bellfruit) (Scorpion 4) (set 2) + + + sc4jjucl + Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4jjucla + Jackpot Junction Club (Ferry) (Bellfruit) (Scorpion 4) (set 1) + + + sc4jjuclb + Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4jjuclc + Jackpot Junction Club (Ferry) (Bellfruit) (Scorpion 4) (set 2) + + + sc4jjucld + Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4jjucle + Jackpot Junction Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4jjunc + Jackpot Junction (Bellfruit) (Scorpion 4) (set 1) + + + sc4jjunca + Jackpot Junction (Bellfruit) (Scorpion 4) (set 2) + + + sc4jjuncb + Jackpot Junction (Bellfruit) (Scorpion 4) (set 3) + + + sc4jjuncc + Jackpot Junction (Bellfruit) (Scorpion 4) (set 4) + + + sc4jjuncd + Jackpot Junction (Bellfruit) (Scorpion 4) (set 5) + + + sc4jjunce + Jackpot Junction (Bellfruit) (Scorpion 4) (set 6) + + + sc4jjuncf + Jackpot Junction (Bellfruit) (Scorpion 4) (set 7) + + + sc4jjuncg + Jackpot Junction (Bellfruit) (Scorpion 4) (set 8) + + + sc4jjunch + Jackpot Junction (Bellfruit) (Scorpion 4) (set 9) + + + sc4jjunci + Jackpot Junction (Bellfruit) (Scorpion 4) (set 10) + + + sc4jolly + Jolly Jousting (Qps) (Scorpion 4) (set 1) + + + sc4jollya + Jolly Jousting (Qps) (Scorpion 4) (set 2) + + + sc4juicy + Juicy Jackpots Club (PR1136) (65% Ferry) (Bellfruit) (Scorpion 4) (set 1) + + + sc4juicya + Juicy Jackpots Club (PR1123) (Bellfruit) (Scorpion 4) (set 1) + + + sc4juicyb + Juicy Jackpots Club (PR1136) (65% Ferry) (Bellfruit) (Scorpion 4) (set 2) + + + sc4juicyc + Juicy Jackpots Club (PR1123) (Bellfruit) (Scorpion 4) (set 2) + + + sc4juicyd + Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 1) + + + sc4juicye + Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 2) + + + sc4juicyf + Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 3) + + + sc4juicyg + Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (set 4) + + + sc4juicyi + Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (311 Club, set 1) + + + sc4juicyj + Juicy Jackpots Club (PR1136) (Bellfruit) (Scorpion 4) (311 Club, set 2) + + + sc4kalei + Kaleidoscope (011) (Qps) (Scorpion 4) (set 1) + + + sc4kaleia + Kaleidoscope (041) (Qps) (Scorpion 4) (set 2) + + + sc4kaleib + Kaleidoscope (011) (Qps) (Scorpion 4) (set 3) + + + sc4kaleic + Kaleidoscope (041) (Qps) (Scorpion 4) (set 4) + + + sc4kaleid + Kaleidoscope (051) (Qps) (Scorpion 4) (set 1) + + + sc4kaleie + Kaleidoscope (051) (Qps) (Scorpion 4) (set 2) + + + sc4kkong + King Kong Cash (Mazooma) (Scorpion 4) (set 1) + + + sc4kkonga + King Kong Cash (Mazooma) (Scorpion 4) (set 2) + + + sc4kkongb + King Kong Cash (Mazooma) (Scorpion 4) (set 3) + + + sc4kkongc + King Kong Cash (Mazooma) (Scorpion 4) (set 4) + + + sc4kkongd + King Kong Cash (Mazooma) (Scorpion 4) (set 5) + + + sc4kkonge + King Kong Cash (Mazooma) (Scorpion 4) (set 6) + + + sc4kkongf + King Kong Cash (Mazooma) (Scorpion 4) (set 7) + + + sc4kkongg + King Kong Cash (Mazooma) (Scorpion 4) (set 8) + + + sc4kkongh + King Kong Cash (Mazooma) (Scorpion 4) (set 9) + + + sc4kkongi + King Kong Cash (Mazooma) (Scorpion 4) (set 10) + + + sc4kkongj + King Kong Cash (Mazooma) (Scorpion 4) (set 11) + + + sc4knok + Knockout (PR7061, KOUT) (Mazooma) (Scorpion 4) (set 1) + + + sc4knoka + Knockout (PR7061, KOUT) (Mazooma) (Scorpion 4) (set 2) + + + sc4knokb + Knockout (PR2057, PKOT) (Mazooma) (Scorpion 4) (set 1) + + + sc4knokc + Knockout (PR2057, PKOT) (Mazooma) (Scorpion 4) (set 2) + + + sc4lasv + Las Vegas (Dutch) (Bellfruit) (Scorpion 4) (set 1) + + + sc4lasva + Las Vegas (Dutch) (Bellfruit) (Scorpion 4) (set 2) + + + sc4ldcas + Line Dancer Casino (Mazooma) (Scorpion 4) (set 1) + + + sc4ldcasa + Line Dancer Casino (Mazooma) (Scorpion 4) (set 2) + + + sc4ldcasb + Line Dancer Casino (Mazooma) (Scorpion 4) (set 3) + + + sc4ldcasc + Line Dancer Casino (Mazooma) (Scorpion 4) (set 4) + + + sc4ldcasd + Line Dancer Casino (Mazooma) (Scorpion 4) (set 5) + + + sc4ldcase + Line Dancer Casino (Mazooma) (Scorpion 4) (set 6) + + + sc4ldvcl + Little Devil Club (Mazooma) (Scorpion 4) + + + sc4ldvl + Little Devil (Mazooma) (Scorpion 4) (set 1) + + + sc4ldvla + Little Devil (Mazooma) (Scorpion 4) (set 2) + + + sc4ldvlb + Little Devil (Mazooma) (Scorpion 4) (set 3) + + + sc4ldvlc + Little Devil (Mazooma) (Scorpion 4) (set 4) + + + sc4leg + Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 1) + + + sc4lega + Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 2) + + + sc4legb + Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 3) + + + sc4legc + Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 4) + + + sc4legcb + Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4legcba + Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4legcbb + Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4legcbc + Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4legcbd + Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4legcbe + Who Wants To Be A Legionnaire Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4legd + Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 5) + + + sc4lege + Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 6) + + + sc4legf + Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 7) + + + sc4legg + Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 8) + + + sc4lined + Line Dancer (Mazooma) (Scorpion 4) (set 1) + + + sc4lineda + Line Dancer (Mazooma) (Scorpion 4) (set 2) + + + sc4linedb + Line Dancer (Mazooma) (Scorpion 4) (set 3) + + + sc4linedc + Line Dancer (Mazooma) (Scorpion 4) (set 4) + + + sc4linedd + Line Dancer Arcade (Mazooma) (Scorpion 4) (set 1) + + + sc4linede + Line Dancer Arcade (Mazooma) (Scorpion 4) (set 2) + + + sc4linedf + Line Dancer Arcade (Mazooma) (Scorpion 4) (set 3) + + + sc4linedg + Line Dancer Arcade (Mazooma) (Scorpion 4) (set 4) + + + sc4linedh + Line Dancer Arcade (Mazooma) (Scorpion 4) (set 5) + + + sc4linedi + Line Dancer Arcade (Mazooma) (Scorpion 4) (set 6) + + + sc4lions + Three Lions (Mazooma) (Scorpion 4) (set 1) + + + sc4lionsa + Three Lions (Mazooma) (Scorpion 4) (set 2) + + + sc4lionsb + Three Lions (Mazooma) (Scorpion 4) (set 3) + + + sc4lionsc + Three Lions (Mazooma) (Scorpion 4) (set 4) + + + sc4lionsd + Three Lions (Mazooma) (Scorpion 4) (set 5) + + + sc4lionse + Three Lions (Mazooma) (Scorpion 4) (set 6) + + + sc4lionsf + Three Lions (Mazooma) (Scorpion 4) (set 7) + + + sc4lir + Let It Roll (Bellfruit) (Scorpion 4) (set 1) + + + sc4lira + Let It Roll (Bellfruit) (Scorpion 4) (set 2) + + + sc4lirb + Let It Roll (Bellfruit) (Scorpion 4) (set 3) + + + sc4lirc + Let It Roll (Bellfruit) (Scorpion 4) (set 4) + + + sc4lird + Let It Roll (Bellfruit) (Scorpion 4) (set 5) + + + sc4lire + Let It Roll (Bellfruit) (Scorpion 4) (set 6) + + + sc4lirf + Let It Roll (Bellfruit) (Scorpion 4) (set 7) + + + sc4lirg + Let It Roll (Bellfruit) (Scorpion 4) (set 8) + + + sc4lirh + Let It Roll (Bellfruit) (Scorpion 4) (set 9) + + + sc4liri + Let It Roll (Bellfruit) (Scorpion 4) (set 10) + + + sc4lkbcl + Lock Buster Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4lkbcla + Lock Buster Club (Euro) (Bellfruit) (Scorpion 4) (set 1) + + + sc4lkbclb + Lock Buster Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4lkbclc + Lock Buster Club (Euro) (Bellfruit) (Scorpion 4) (set 2) + + + sc4lkbcld + Lock Buster Club (Ferry) (Bellfruit) (Scorpion 4) (set 1) + + + sc4lkbcle + Lock Buster Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4lkbclf + Lock Buster Club (Ferry) (Bellfruit) (Scorpion 4) (set 2) + + + sc4lkbclg + Lock Buster Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4lkbclh + Lock Buster Club (Bellfruit) (Scorpion 4) (311 Club, set 1) + + + sc4lkbcli + Lock Buster Club (Bellfruit) (Scorpion 4) (311 Club, set 2) + + + sc4lockb + Lock Buster (Bellfruit) (Scorpion 4) (set 1) + + + sc4lockba + Lock Buster (Bellfruit) (Scorpion 4) (set 2) + + + sc4lockbb + Lock Buster (Bellfruit) (Scorpion 4) (set 3) + + + sc4lockbc + Lock Buster (Bellfruit) (Scorpion 4) (set 4) + + + sc4lockbd + Lock Buster (Bellfruit) (Scorpion 4) (set 5) + + + sc4lockbe + Lock Buster (Bellfruit) (Scorpion 4) (set 6) + + + sc4lockbf + Lock Buster (Bellfruit) (Scorpion 4) (set 7) + + + sc4lockbg + Lock Buster (Bellfruit) (Scorpion 4) (set 8) + + + sc4lotr2 + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 1) + + + sc4lotr2a + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 2) + + + sc4lotr2b + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 3) + + + sc4lotr2c + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 4) + + + sc4lotr2d + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 5) + + + sc4lotr2e + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 6) + + + sc4lotr2f + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 11) + + + sc4lotr2g + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 12) + + + sc4lotr2h + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 13) + + + sc4lotr2i + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 14) + + + sc4lotr2j + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 7) + + + sc4lotr2k + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 8) + + + sc4lotr2l + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 9) + + + sc4lotr2m + Lord Of The Rings - The Two Towers (Bellfruit) (Scorpion 4) (set 10) + + + sc4lotrf + Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 1) + + + sc4lotrfa + Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 2) + + + sc4lotrfb + Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 3) + + + sc4lotrfc + Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 4) + + + sc4lotrfd + Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 5) + + + sc4lotrfe + Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 6) + + + sc4lotrff + Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 7) + + + sc4lotrfg + Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 8) + + + sc4lotrr + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 1) + + + sc4lotrra + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 2) + + + sc4lotrrb + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 3) + + + sc4lotrrc + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 4) + + + sc4lotrrd + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 5) + + + sc4lotrre + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 4) (set 6) + + + sc4lotrt + Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 9) + + + sc4lotrta + Lord Of The Rings - The Fellowship Of The Ring (Bellfruit) (Scorpion 4) (set 10) + + + sc4ltr2c + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4ltr2ca + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4ltr2cb + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4ltr2cc + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4ltr2cd + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4ltr2ce + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4ltr2cf + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 7) + + + sc4ltr2cg + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 8) + + + sc4ltr2ch + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 9) + + + sc4ltr2ci + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 10) + + + sc4ltr2cj + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 11) + + + sc4ltr2ck + Lord Of The Rings - The Two Towers Club (Bellfruit) (Scorpion 4) (set 12) + + + sc4luck7 + Lucky 7s (Mazooma) (Scorpion 4) (Top Box) + + + sc4luck7a + Lucky 7s (Mazooma) (Scorpion 4) (set 1) + + + sc4luck7b + Lucky 7s (Mazooma) (Scorpion 4) (set 2) + + + sc4luck7c + Lucky 7s (Mazooma) (Scorpion 4) (set 3) + + + sc4luck7d + Lucky 7s (Mazooma) (Scorpion 4) (set 4) + + + sc4luckb + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 1) + + + sc4luckb0 + Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 6) + + + sc4luckb1 + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 23) + + + sc4luckb2 + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 24) + + + sc4luckb3 + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 25) + + + sc4luckb4 + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 26) + + + sc4luckba + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 2) + + + sc4luckbb + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 3) + + + sc4luckbc + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 4) + + + sc4luckbd + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 5) + + + sc4luckbe + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 6) + + + sc4luckbf + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 7) + + + sc4luckbg + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 8) + + + sc4luckbh + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 9) + + + sc4luckbi + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 10) + + + sc4luckbj + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 11) + + + sc4luckbk + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 12) + + + sc4luckbl + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 13) + + + sc4luckbm + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 14) + + + sc4luckbn + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 15) + + + sc4luckbo + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 16) + + + sc4luckbp + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 17) + + + sc4luckbq + Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 1) + + + sc4luckbr + Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 2) + + + sc4luckbs + Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 3) + + + sc4luckbt + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 18) + + + sc4luckbu + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 19) + + + sc4luckbv + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 20) + + + sc4luckbw + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 21) + + + sc4luckbx + Lucky Balls Casino (Bellfruit) (Scorpion 4) (set 22) + + + sc4luckby + Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 4) + + + sc4luckbz + Lucky Balls Casino Arcade (Bellfruit) (Scorpion 4) (set 5) + + + sc4m2m + Money To Money (Mazooma) (Scorpion 4) (set 1) + + + sc4m2ma + Money To Money (Mazooma) (Scorpion 4) (set 2) + + + sc4magci + Magic Circle (011) (Qps) (Scorpion 4) (set 1) + + + sc4magcia + Magic Circle (021) (Qps) (Scorpion 4) (set 1) + + + sc4magcib + Magic Circle (031) (Qps) (Scorpion 4) (set 1) + + + sc4magcic + Magic Circle (012) (Qps) (Scorpion 4) (set 1) + + + sc4magcid + Magic Circle (012) (Qps) (Scorpion 4) (set 3) + + + sc4magcie + Magic Circle (022) (Qps) (Scorpion 4) (set 1) + + + sc4magcif + Magic Circle (032) (Qps) (Scorpion 4) (set 1) + + + sc4magcig + Magic Circle (013) (Qps) (Scorpion 4) (set 1) + + + sc4magcih + Magic Circle (014) (Qps) (Scorpion 4) (set 1) + + + sc4magcii + Magic Circle (024) (Qps) (Scorpion 4) (set 1) + + + sc4magcij + Magic Circle (034) (Qps) (Scorpion 4) (set 1) + + + sc4magcik + Magic Circle (011) (Qps) (Scorpion 4) (set 2) + + + sc4magcil + Magic Circle (021) (Qps) (Scorpion 4) (set 2) + + + sc4magcim + Magic Circle (031) (Qps) (Scorpion 4) (set 2) + + + sc4magcin + Magic Circle (012) (Qps) (Scorpion 4) (set 2) + + + sc4magcio + Magic Circle (012) (Qps) (Scorpion 4) (set 4) + + + sc4magcip + Magic Circle (022) (Qps) (Scorpion 4) (set 2) + + + sc4magciq + Magic Circle (032) (Qps) (Scorpion 4) (set 2) + + + sc4magcir + Magic Circle (013) (Qps) (Scorpion 4) (set 2) + + + sc4magcis + Magic Circle (014) (Qps) (Scorpion 4) (set 2) + + + sc4magcit + Magic Circle (024) (Qps) (Scorpion 4) (set 2) + + + sc4magciu + Magic Circle (034) (Qps) (Scorpion 4) (set 2) + + + sc4magic + Magic Poundabout (Qps) (Scorpion 4) (set 1) + + + sc4magica + Magic Poundabout (Qps) (Scorpion 4) (set 2) + + + sc4magicb + Magic Poundabout (Qps) (Scorpion 4) (set 3) + + + sc4magicc + Magic Poundabout (Qps) (Scorpion 4) (set 4) + + + sc4manic + Manic Miner (Bellfruit) (Scorpion 4) (set 1) + + + sc4manica + Manic Miner (Bellfruit) (Scorpion 4) (set 2) + + + sc4manicb + Manic Miner (Bellfruit) (Scorpion 4) (set 5) + + + sc4manicc + Manic Miner (Bellfruit) (Scorpion 4) (set 6) + + + sc4manicd + Manic Miner (Bellfruit) (Scorpion 4) (set 7) + + + sc4manice + Manic Miner (Bellfruit) (Scorpion 4) (set 8) + + + sc4manicf + Manic Miner (Bellfruit) (Scorpion 4) (set 9) + + + sc4manicg + Manic Miner (Bellfruit) (Scorpion 4) (set 10) + + + sc4maxcc + Maximus Cash Club (Mazooma) (Scorpion 4) (set 1) + + + sc4maxcca + Maximus Cash Club (Mazooma) (Scorpion 4) (set 2) + + + sc4maxccb + Maximus Cash Club (Mazooma) (Scorpion 4) (set 3) + + + sc4maxccc + Maximus Cash Club (Mazooma) (Scorpion 4) (set 4) + + + sc4maxim + Maximus Cash (Mazooma) (Scorpion 4) (set 1) + + + sc4maxima + Maximus Cash (Mazooma) (Scorpion 4) (set 2) + + + sc4maximb + Maximus Cash (Mazooma) (Scorpion 4) (set 3) + + + sc4maximc + Maximus Cash (Mazooma) (Scorpion 4) (set 4) + + + sc4maximd + Maximus Cash (Mazooma) (Scorpion 4) (set 5) + + + sc4maxime + Maximus Cash (Mazooma) (Scorpion 4) (set 6) + + + sc4maximf + Maximus Cash (Mazooma) (Scorpion 4) (set 7) + + + sc4maximg + Maximus Cash (Mazooma) (Scorpion 4) (set 8) + + + sc4mbags + Money Bags (Bellfruit) (Scorpion 4) (set 1) + + + sc4mbagsa + Money Bags (Bellfruit) (Scorpion 4) (set 2) + + + sc4mbagsb + Money Bags (Bellfruit) (Scorpion 4) (set 3) + + + sc4mbagsc + Money Bags (Bellfruit) (Scorpion 4) (set 4) + + + sc4mcas + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 1) + + + sc4mcas0 + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 15) + + + sc4mcas1 + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 16) + + + sc4mcas2 + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 17) + + + sc4mcas3 + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 18) + + + sc4mcas4 + Monopoly Casino (PR2056) (Mazooma) (Scorpion 4) (GMTB, Top Box, set 3) + + + sc4mcask + Monopoly Casino (PR2056) (Mazooma) (Scorpion 4) (GMTB, Top Box, set 1) + + + sc4mcasm + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 2) + + + sc4mcasn + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 3) + + + sc4mcaso + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 4) + + + sc4mcasp + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 5) + + + sc4mcasq + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 6) + + + sc4mcasr + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 7) + + + sc4mcass + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 8) + + + sc4mcast + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 9) + + + sc4mcasu + Monopoly Casino (PR2056) (Mazooma) (Scorpion 4) (GMTB, Top Box, set 2) + + + sc4mcasv + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 10) + + + sc4mcasw + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 11) + + + sc4mcasx + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 12) + + + sc4mcasy + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 13) + + + sc4mcasz + Monopoly Casino (PR2354) (Mazooma) (Scorpion 4) (GMBU, set 14) + + + sc4mclb + Monopoly Club (Mazooma) (Scorpion 4) (set 1) + + + sc4mclba + Monopoly Club (Mazooma) (Scorpion 4) (set 2) + + + sc4mclbb + Monopoly Club (Mazooma) (Scorpion 4) (set 3) + + + sc4mclbc + Monopoly Club (Mazooma) (Scorpion 4) (set 4) + + + sc4mclbd + Monopoly Club (Mazooma) (Scorpion 4) (set 5) + + + sc4mclbe + Monopoly Club (Mazooma) (Scorpion 4) (set 6) + + + sc4mdm + Monopoly Double Money (Bellfruit) (Scorpion 4) (set 1) + + + sc4mdma + Monopoly Double Money (Bellfruit) (Scorpion 4) (set 2) + + + sc4mgr + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 1) + + + sc4mgra + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 2) + + + sc4mgrb + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 5) + + + sc4mgrc + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 6) + + + sc4mgrd + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 7) + + + sc4mgre + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 8) + + + sc4mgrf + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 9) + + + sc4mgrg + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 10) + + + sc4mgrh + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 3) + + + sc4mgri + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 4) + + + sc4mgrj + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 11) + + + sc4mgrk + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 12) + + + sc4mgrl + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 13) + + + sc4mgrm + Money Go Round Casino (Bellfruit) (Scorpion 4) (set 14) + + + sc4mhn + Monopoly Here & Now (Mazooma) (Scorpion 4) (set 1) + + + sc4mhna + Monopoly Here & Now (Mazooma) (Scorpion 4) (set 2) + + + sc4mhp + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 1) + + + sc4mhpa + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 2) + + + sc4mhpb + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 3) + + + sc4mhpc + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 4) + + + sc4mhpd + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 5) + + + sc4mhpe + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 6) + + + sc4mhpf + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 7) + + + sc4mhpg + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 8) + + + sc4mhph + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 9) + + + sc4mhpi + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 10) + + + sc4mhpj + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 11) + + + sc4mhpk + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 12) + + + sc4mhpl + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 13) + + + sc4mhpm + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 14) + + + sc4mhpn + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 15) + + + sc4mhpo + Monopoly Hot Property (Bellfruit) (Scorpion 4) (set 16) + + + sc4milja + Miljonairs Arcade (Dutch) (Bellfruit) (Scorpion 4) + + + sc4miljo + Miljonairs (Dutch) (Bellfruit) (Scorpion 4) (set 1) + + + sc4milro + Millionaires Row (Scorpion 4?) + + + sc4mmad + Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 1) + + + sc4mmada + Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 2) + + + sc4mmadb + Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 3) + + + sc4mmadc + Money Madness (PR2533) (Mazooma) (Scorpion 4) (set 4) + + + sc4mmadd + Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 5) + + + sc4mmade + Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 6) + + + sc4mmadf + Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 7) + + + sc4mmadg + Money Madness (PR0000) (Mazooma) (Scorpion 4) (set 8) + + + sc4mmb + Monopoly Money Bags (Bellfruit) (Scorpion 4) (set 1) + + + sc4mmba + Monopoly Money Bags (Bellfruit) (Scorpion 4) (set 2) + + + sc4mmm + Mental Money Monsters (Mazooma) (Scorpion 4) (set 1) + + + sc4mmma + Mental Money Monsters (Mazooma) (Scorpion 4) (set 2) + + + sc4mmmb + Mental Money Monsters (Mazooma) (Scorpion 4) (set 3) + + + sc4mmmc + Mental Money Monsters (Mazooma) (Scorpion 4) (set 4) + + + sc4mmmd + Mental Money Monsters (Mazooma) (Scorpion 4) (set 5) + + + sc4mmme + Mental Money Monsters (Mazooma) (Scorpion 4) (set 6) + + + sc4mmmf + Mental Money Monsters (Mazooma) (Scorpion 4) (set 7) + + + sc4mmmg + Mental Money Monsters (Mazooma) (Scorpion 4) (set 8) + + + sc4mondx + Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 1) + + + sc4mondxa + Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 2) + + + sc4mondxb + Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 3) + + + sc4mondxc + Monopoly Deluxe (PR2202, MPDX 1.0) (Mazooma) (Scorpion 4) (set 4) + + + sc4mondxd + Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 1) + + + sc4mondxe + Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 3) + + + sc4mondxf + Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 4) + + + sc4mondxg + Monopoly Deluxe (PR2202, MPDX 1.1) (Mazooma) (Scorpion 4) (set 2) + + + sc4mono5 + Monopoly 5 (PR7089, MONF) (Mazooma) (Scorpion 4) (set 1) + + + sc4mono5a + Monopoly 5 (PR7089, MONF) (Mazooma) (Scorpion 4) (set 2) + + + sc4monoa + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 1) + + + sc4monoaa + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 2) + + + sc4monoab + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 3) + + + sc4monoac + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 4) + + + sc4monoad + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 5) + + + sc4monoae + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 6) + + + sc4monoaf + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 7) + + + sc4monoag + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 8) + + + sc4monoah + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 9) + + + sc4monoai + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 10) + + + sc4monoaj + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 11) + + + sc4monoak + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 12) + + + sc4monoal + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 13) + + + sc4monoam + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 14) + + + sc4monoan + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 15) + + + sc4monoao + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 16) + + + sc4monoap + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 17) + + + sc4monoaq + Monopoly Triple (PR2122, MOTR) (Mazooma) (Scorpion 4) (set 18) + + + sc4monob + Monopoly (Bellfruit) (Scorpion 4) (set 1) + + + sc4monoba + Monopoly (Bellfruit) (Scorpion 4) (set 2) + + + sc4monobb + Monopoly (Bellfruit) (Scorpion 4) (set 3) + + + sc4monobc + Monopoly (Bellfruit) (Scorpion 4) (set 4) + + + sc4monobd + Monopoly (Bellfruit) (Scorpion 4) (set 5) + + + sc4monobe + Monopoly (Bellfruit) (Scorpion 4) (set 6) + + + sc4monobf + Monopoly (Bellfruit) (Scorpion 4) (set 7) + + + sc4monobg + Monopoly (Bellfruit) (Scorpion 4) (set 8) + + + sc4monobh + Monopoly (Bellfruit) (Scorpion 4) (set 9) + + + sc4monobi + Monopoly (Bellfruit) (Scorpion 4) (set 10) + + + sc4monobj + Monopoly (Bellfruit) (Scorpion 4) (set 11) + + + sc4monobk + Monopoly (Bellfruit) (Scorpion 4) (set 12) + + + sc4monobl + Monopoly (Bellfruit) (Scorpion 4) (set 13) + + + sc4monobm + Monopoly (Bellfruit) (Scorpion 4) (set 14) + + + sc4monod + Monopoly (Mazooma) [German] (Scorpion 4) (set 1) + + + sc4monoda + Monopoly (Mazooma) [German] (Scorpion 4) (set 2) + + + sc4monodb + Monopoly (Mazooma) [German] (Scorpion 4) (set 3) + + + sc4monog + Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 5) + + + sc4monoga + Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 6) + + + sc4monop + Monopoly Triple (PR2056, TBOX) (Mazooma) (Scorpion 4) (Top Box, set 1) + + + sc4monopa + Monopoly Triple (PR2056, TBOX) (Mazooma) (Scorpion 4) (Top Box, set 2) + + + sc4monot + Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 1) + + + sc4monota + Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 2) + + + sc4monotb + Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 3) + + + sc4monotc + Monopoly TTT (PR2133) (Mazooma) (Scorpion 4) (set 4) + + + sc4monsp + Money Spinner (Dutch) (Bellfruit) (Scorpion 4) + + + sc4mont + Montego Pay (Qps) (Scorpion 4) (set 1) + + + sc4monta + Montego Pay (Qps) (Scorpion 4) (set 2) + + + sc4montb + Montego Pay (Qps) (Scorpion 4) (set 3) + + + sc4montc + Montego Pay (Qps) (Scorpion 4) (set 4) + + + sc4montd + Montego Pay (Qps) (Scorpion 4) (set 5) + + + sc4monte + Montego Pay (Qps) (Scorpion 4) (set 6) + + + sc4montf + Montego Pay (Qps) (Scorpion 4) (set 7) + + + sc4montg + Montego Pay (Qps) (Scorpion 4) (set 8) + + + sc4month + Montego Pay (Qps) (Scorpion 4) (set 9) + + + sc4monti + Montego Pay (Qps) (Scorpion 4) (set 10) + + + sc4motor + Motorway Mania (Bellfruit) (Scorpion 4) (set 1) + + + sc4motora + Motorway Mania (Bellfruit) (Scorpion 4) (set 2) + + + sc4motorb + Motorway Mania (Bellfruit) (Scorpion 4) (set 3) + + + sc4motorc + Motorway Mania (Bellfruit) (Scorpion 4) (set 4) + + + sc4motord + Motorway Mania (Bellfruit) (Scorpion 4) (set 5) + + + sc4motore + Motorway Mania (Bellfruit) (Scorpion 4) (set 6) + + + sc4motorf + Motorway Mania (Bellfruit) (Scorpion 4) (set 7) + + + sc4motorg + Motorway Mania (Bellfruit) (Scorpion 4) (set 8) + + + sc4motorh + Motorway Mania (Bellfruit) (Scorpion 4) (set 9) + + + sc4mou + Move On Up (Qps) (Scorpion 4) (set 1) + + + sc4moua + Move On Up (Qps) (Scorpion 4) (set 2) + + + sc4moub + Move On Up (Qps) (Scorpion 4) (set 3) + + + sc4mowow + Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 1) + + + sc4mowowa + Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 2) + + + sc4mowowb + Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 3) + + + sc4mowowc + Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 4) + + + sc4mr2r + Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 1) + + + sc4mr2ra + Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 2) + + + sc4mr2rb + Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 3) + + + sc4mr2rc + Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 4) + + + sc4mr2rd + Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 5) + + + sc4mr2re + Monopoly Road To Riches (Mazooma) (Scorpion 4) (set 6) + + + sc4mrh + Monopoly Red Hot (Mazooma) (Scorpion 4) (set 1) + + + sc4mrha + Monopoly Red Hot (Mazooma) (Scorpion 4) (set 2) + + + sc4mrhb + Monopoly Red Hot (Mazooma) (Scorpion 4) (set 3) + + + sc4mrhc + Monopoly Red Hot (Mazooma) (Scorpion 4) (set 4) + + + sc4mrhd + Monopoly Red Hot (Mazooma) (Scorpion 4) (set 5) + + + sc4mrhe + Monopoly Red Hot (Mazooma) (Scorpion 4) (set 6) + + + sc4msclb + Money Spinner Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4msclba + Money Spinner Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4msclbb + Money Spinner Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4msclbc + Money Spinner Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4msclbd + Money Spinner Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4msclbe + Money Spinner Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4msclbf + Money Spinner Club (Bellfruit) (Scorpion 4) (set 7) + + + sc4msclbg + Money Spinner Club (Bellfruit) (Scorpion 4) (set 8) + + + sc4mspid + Casino Money Spider (Bellfruit) (Scorpion 4) (set 1) + + + sc4mspida + Casino Money Spider (Bellfruit) (Scorpion 4) (set 2) + + + sc4mspidb + Casino Money Spider (Bellfruit) (Scorpion 4) (set 3) + + + sc4mspidc + Casino Money Spider (Bellfruit) (Scorpion 4) (set 4) + + + sc4mspidd + Casino Money Spider (Bellfruit) (Scorpion 4) (set 5) + + + sc4mspide + Casino Money Spider (Bellfruit) (Scorpion 4) (set 6) + + + sc4mspidf + Casino Money Spider (Bellfruit) (Scorpion 4) (set 7) + + + sc4mspidg + Casino Money Spider (Bellfruit) (Scorpion 4) (set 8) + + + sc4mspidh + Casino Money Spider (Bellfruit) (Scorpion 4) (set 13) + + + sc4mspidi + Casino Money Spider (Bellfruit) (Scorpion 4) (set 14) + + + sc4mspidj + Casino Money Spider (Bellfruit) (Scorpion 4) (set 9) + + + sc4mspidk + Casino Money Spider (Bellfruit) (Scorpion 4) (set 10) + + + sc4mspidl + Casino Money Spider (Bellfruit) (Scorpion 4) (set 11) + + + sc4mspidm + Casino Money Spider (Bellfruit) (Scorpion 4) (set 12) + + + sc4mtb + Money To Burn (Bellfruit) (Scorpion 4) (set 1) + + + sc4mtba + Money To Burn (Bellfruit) (Scorpion 4) (set 2) + + + sc4mtbb + Money To Burn (Bellfruit) (Scorpion 4) (set 3) + + + sc4mtbc + Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 1) + + + sc4mtbcl + Money To Burn Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4mtbcla + Money To Burn Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4mtbclb + Money To Burn Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4mtbclc + Money To Burn Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4mtbcld + Money To Burn Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4mtbcle + Money To Burn Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4mtbclf + Money To Burn Club (Bellfruit) (Scorpion 4) (set 7) + + + sc4mtbclg + Money To Burn Club (Bellfruit) (Scorpion 4) (set 8) + + + sc4mtbclh + Money To Burn Club (Bellfruit) (Scorpion 4) (set 9) + + + sc4mtbcli + Money To Burn Club (Bellfruit) (Scorpion 4) (set 10) + + + sc4mtbclj + Money To Burn Club (Bellfruit) (Scorpion 4) (set 11) + + + sc4mtbclk + Money To Burn Club (Bellfruit) (Scorpion 4) (set 12) + + + sc4mtbcll + Money To Burn Club (Bellfruit) (Scorpion 4) (set 13) + + + sc4mtbclm + Money To Burn Club (Bellfruit) (Scorpion 4) (set 14) + + + sc4mtbcln + Money To Burn Club (Bellfruit) (Scorpion 4) (set 15) + + + sc4mtbclo + Money To Burn Club (Bellfruit) (Scorpion 4) (set 16) + + + sc4mtbd + Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 2) + + + sc4mtbe + Money To Burn (Bellfruit) (Scorpion 4) (set 4) + + + sc4mtbf + Money To Burn (Bellfruit) (Scorpion 4) (set 5) + + + sc4mtbg + Money To Burn (Bellfruit) (Scorpion 4) (set 6) + + + sc4mtbh + Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 3) + + + sc4mtbi + Money To Burn SP98 (Bellfruit) (Scorpion 4) (set 4) + + + sc4mtbj + Money To Burn (Bellfruit) (Scorpion 4) (set 7) + + + sc4mwwtb + Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 1) + + + sc4mwwtba + Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 2) + + + sc4mwwtbb + Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 3) + + + sc4mwwtbc + Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 4) + + + sc4mwwtbd + Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 5) + + + sc4nmare + A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 1) + + + sc4nmarea + A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 2) + + + sc4nmareb + A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 3) + + + sc4nmarec + A Nightmare On Elm Street (Bellfruit) (Scorpion 4) (set 4) + + + sc4nmtj + Never Mind The Jackpots (Mazooma) (Scorpion 4) (011) + + + sc4nmtja + Never Mind The Jackpots (Mazooma) (Scorpion 4) (014, set 1) + + + sc4nmtjb + Never Mind The Jackpots (Mazooma) (Scorpion 4) (044, set 1) + + + sc4nmtjc + Never Mind The Jackpots (Mazooma) (Scorpion 4) (014, set 2) + + + sc4nmtjd + Never Mind The Jackpots (Mazooma) (Scorpion 4) (044, set 2) + + + sc4nudit + Nudge It (Mazooma) (Scorpion 4) (set 1) + + + sc4nudita + Nudge It (Mazooma) (Scorpion 4) (set 2) + + + sc4nuditb + Nudge It (Mazooma) (Scorpion 4) (set 3) + + + sc4nunsm + Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 1) + + + sc4nunsmb + Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 2) + + + sc4nunsmc + Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 3) + + + sc4nunsmd + Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 4) + + + sc4nunsme + Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 5) + + + sc4nunsmf + Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 6) + + + sc4nunsmg + Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 7) + + + sc4nunsmh + Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 8) + + + sc4nunsmi + Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 9) + + + sc4nunsmj + Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 10) + + + sc4onup + On The Up (Mazooma) (Scorpion 4) (set 1) + + + sc4onupa + On The Up (Mazooma) (Scorpion 4) (set 2) + + + sc4opses + Open Sesame (Bellfruit) (Scorpion 4) (set 1) + + + sc4opsesa + Open Sesame (Bellfruit) (Scorpion 4) (set 2) + + + sc4outlw + Outlaw (Bellfruit) (Scorpion 4) (set 1) + + + sc4outlwa + Outlaw (Bellfruit) (Scorpion 4) (set 2) + + + sc4outlwb + Outlaw (Bellfruit) (Scorpion 4) (set 3) + + + sc4outlwc + Outlaw (Bellfruit) (Scorpion 4) (set 4) + + + sc4oyf + Off Your Face (Bellfruit) (Scorpion 4) (set 1) + + + sc4oyfa + Off Your Face (Bellfruit) (Scorpion 4) (set 2) + + + sc4paccl + Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 1) + + + sc4paccla + Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 2) + + + sc4pacclb + Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 3) + + + sc4pacclc + Pac Man Club (PR2018, CPAC) (Mazooma) (Scorpion 4) (set 4) + + + sc4paccs + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 1) + + + sc4paccsa + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 2) + + + sc4paccsb + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 3) + + + sc4paccsc + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 4) + + + sc4paccsd + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 5) + + + sc4paccse + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 6) + + + sc4paccsf + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 7) + + + sc4paccsg + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 8) + + + sc4paccsh + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 12) + + + sc4paccsi + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 13) + + + sc4paccsj + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 9) + + + sc4paccsk + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 10) + + + sc4paccsl + Pac Man Casino (PR7049, PACL) (Mazooma) (Scorpion 4) (set 11) + + + sc4pacmn + Pac Man (PR7026, PMAN) (Mazooma) (Scorpion 4) (set 1) + + + sc4pacmna + Pac Man (PR7026, PMAN) (Mazooma) (Scorpion 4) (set 2) + + + sc4pacmnb + Pac Man (PR7026, PMAN) (Mazooma) (Scorpion 4) (set 3) + + + sc4pacpl + Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 1) + + + sc4pacpla + Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 2) + + + sc4pacplb + Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 3) + + + sc4pacplc + Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 4) + + + sc4pacpld + Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 5) + + + sc4pacple + Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 6) + + + sc4pacplf + Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 7) + + + sc4pacplg + Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 8) + + + sc4pacplh + Pac Man Plus (PR7058, PACP) (Mazooma) (Scorpion 4) (set 9) + + + sc4pacqp + Pac Man (PR7072, QPAC) (QPS) (Scorpion 4) (set 1) + + + sc4pacqpa + Pac Man (PR7072, QPAC) (QPS) (Scorpion 4) (set 2) + + + sc4pacqpb + Pac Man (PR7072, QPAC) (QPS) (Scorpion 4) (set 3) + + + sc4party + Party Time (German) (PR7151, GPTM) (Nova) (Scorpion 4) + + + sc4paytm + Pay Time (Dutch) (Bellfruit) (Scorpion 4) + + + sc4pen1 + Public Enemy No1 (Bellfruit) (Scorpion 4) (set 1) + + + sc4pen1a + Public Enemy No1 (Bellfruit) (Scorpion 4) (set 2) + + + sc4pen1b + Public Enemy No1 (Bellfruit) (Scorpion 4) (set 3) + + + sc4pen1c + Public Enemy No1 (Bellfruit) (Scorpion 4) (set 4) + + + sc4pen1d + Public Enemy No1 (Bellfruit) (Scorpion 4) (set 5) + + + sc4pglcl + Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4pglcla + Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4pglclb + Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4pglclc + Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4pglcld + Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4pglcle + Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4pglclf + Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 7) + + + sc4pglclg + Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 8) + + + sc4pglclh + Pharaoh's Gold Club (Bellfruit) (Scorpion 4) (set 9) + + + sc4pglcs + Pharaoh's Gold Casino (Dutch) (Bellfruit) (Scorpion 4) (set 1) + + + sc4pglcsa + Pharaoh's Gold Casino (Dutch) (Bellfruit) (Scorpion 4) (set 2) + + + sc4pglcsb + Pharaoh's Gold Casino (Dutch) (Bellfruit) (Scorpion 4) (set 3) + + + sc4pgold + Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 1) + + + sc4pgolda + Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 2) + + + sc4pgoldb + Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 3) + + + sc4pgoldc + Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 4) + + + sc4pgoldd + Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 5) + + + sc4pgoldf + Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 6) + + + sc4pipe + Piping Hot (Mazooma) (Scorpion 4) (set 1) + + + sc4pipea + Piping Hot (Mazooma) (Scorpion 4) (set 2) + + + sc4pir + The Prize Is Right (Bellfruit) (Scorpion 4) (set 1) + + + sc4pira + The Prize Is Right (Bellfruit) (Scorpion 4) (set 2) + + + sc4pirb + The Prize Is Right (Bellfruit) (Scorpion 4) (set 3) + + + sc4pirc + The Prize Is Right (Bellfruit) (Scorpion 4) (set 4) + + + sc4pird + The Prize Is Right (Bellfruit) (Scorpion 4) (set 5) + + + sc4pire + The Prize Is Right (Bellfruit) (Scorpion 4) (set 6) + + + sc4pirf + The Prize Is Right (Bellfruit) (Scorpion 4) (set 7) + + + sc4pirg + The Prize Is Right (Bellfruit) (Scorpion 4) (set 8) + + + sc4plumb + Plumb Crazy Club (413) (Qps) (Scorpion 4) (set 1) + + + sc4plumba + Plumb Crazy Club (413) (Qps) (Scorpion 4) (set 2) + + + sc4plumbb + Plumb Crazy Club (411) (Qps) (Scorpion 4) (set 1) + + + sc4plumbc + Plumb Crazy Club (411) (Qps) (Scorpion 4) (set 2) + + + sc4plumbd + Plumb Crazy Club (412) (Qps) (Scorpion 4) (set 1) + + + sc4plumbe + Plumb Crazy Club (412) (Qps) (Scorpion 4) (set 2) + + + sc4pmani + Pac Mania (PR2031, ANIA) (Mazooma) (Scorpion 4) (set 1) + + + sc4pmania + Pac Mania (PR2031, ANIA) (Mazooma) (Scorpion 4) (set 2) + + + sc4po8 + Pieces Of Eight (V1.0) (Qps) (Scorpion 4) (set 1) + + + sc4po8a + Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 1) + + + sc4po8b + Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 2) + + + sc4po8c + Pieces Of Eight (011) (Qps) (Scorpion 4) (set 1) + + + sc4po8d + Pieces Of Eight (041) (Qps) (Scorpion 4) (set 1) + + + sc4po8e + Pieces Of Eight (V1.0) (Qps) (Scorpion 4) (set 2) + + + sc4po8f + Pieces Of Eight (V1.0) (Qps) (Scorpion 4) (set 3) + + + sc4po8g + Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 3) + + + sc4po8h + Pieces Of Eight (V1.1) (Qps) (Scorpion 4) (set 4) + + + sc4po8i + Pieces Of Eight (012) (Qps) (Scorpion 4) (set 1) + + + sc4po8j + Pieces Of Eight (042) (Qps) (Scorpion 4) (set 1) + + + sc4po8k + Pieces Of Eight (012) (Qps) (Scorpion 4) (set 2) + + + sc4po8l + Pieces Of Eight (042) (Qps) (Scorpion 4) (set 2) + + + sc4po8m + Pieces Of Eight (011) (Qps) (Scorpion 4) (set 2) + + + sc4po8n + Pieces Of Eight (041) (Qps) (Scorpion 4) (set 2) + + + sc4pog + Pots Of Gold (Bellfruit) (Scorpion 4) (set 1) + + + sc4poga + Pots Of Gold (Bellfruit) (Scorpion 4) (set 2) + + + sc4pogb + Pots Of Gold (Bellfruit) (Scorpion 4) (set 3) + + + sc4pogbl + Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4pogbla + Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4pogblb + Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4pogblc + Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4pogbld + Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4pogble + Pots Of Gold Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4pogc + Pots Of Gold (Bellfruit) (Scorpion 4) (set 4) + + + sc4pogd + Pots Of Gold (Bellfruit) (Scorpion 4) (set 5) + + + sc4poge + Pots Of Gold (Bellfruit) (Scorpion 4) (set 6) + + + sc4pogf + Pots Of Gold (Bellfruit) (Scorpion 4) (set 7) + + + sc4pogg + Pots Of Gold (Bellfruit) (Scorpion 4) (set 8) + + + sc4pogh + Pots Of Gold (Bellfruit) (Scorpion 4) (set 9) + + + sc4pogi + Pots Of Gold (Bellfruit) (Scorpion 4) (set 10) + + + sc4polem + Pole Position (Mazooma) (Scorpion 4) (set 1) + + + sc4polema + Pole Position (Mazooma) (Scorpion 4) (set 2) + + + sc4polemb + Pole Position (Mazooma) (Scorpion 4) (set 3) + + + sc4polemc + Pole Position (Mazooma) (Scorpion 4) (set 4) + + + sc4polemd + Pole Position (Mazooma) (Scorpion 4) (set 5) + + + sc4polen + Pole Position (German) (PR7012, GPOS) (Nova) (Scorpion 4) + + + sc4polic + Police Squid (V1.0) (Qps) (Scorpion 4) (set 1) + + + sc4polica + Police Squid (V2.0) (Qps) (Scorpion 4) (set 1) + + + sc4policb + Police Squid (V1.0) (Qps) (Scorpion 4) (set 2) + + + sc4policc + Police Squid (V2.0) (Qps) (Scorpion 4) (set 2) + + + sc4pony + Pony Express (Bellfruit) (Scorpion 4) (set 1) + + + sc4ponya + Pony Express (Bellfruit) (Scorpion 4) (set 2) + + + sc4ponyb + Pony Express (Bellfruit) (Scorpion 4) (set 3) + + + sc4ponyc + Pony Express (Bellfruit) (Scorpion 4) (set 4) + + + sc4ponyd + Pony Express (Bellfruit) (Scorpion 4) (set 5) + + + sc4ponye + Pony Express (Bellfruit) (Scorpion 4) (set 6) + + + sc4popey + Popeye (Mazooma) (Scorpion 4) (set 1) + + + sc4popeya + Popeye (Mazooma) (Scorpion 4) (set 2) + + + sc4popeyb + Popeye (Mazooma) (Scorpion 4) (set 3) + + + sc4popeyc + Popeye (Mazooma) (Scorpion 4) (set 4) + + + sc4popeyd + Popeye (Mazooma) (Scorpion 4) (set 5) + + + sc4popeye + Popeye (Mazooma) (Scorpion 4) (set 6) + + + sc4potp + Pick Of The Pack (Bellfruit) (Scorpion 4) (set 1) + + + sc4potpa + Pick Of The Pack (Bellfruit) (Scorpion 4) (set 2) + + + sc4potsh + Pot Shot (Qps) (Scorpion 4) (set 1) + + + sc4potsha + Pot Shot (Qps) (Scorpion 4) (set 2) + + + sc4pp + Pink Panther (Mazooma) (Scorpion 4) (set 1) + + + sc4ppa + Pink Panther (Mazooma) (Scorpion 4) (set 2) + + + sc4ppb + Pink Panther (Mazooma) (Scorpion 4) (set 3) + + + sc4ppc + Pink Panther (Mazooma) (Scorpion 4) (set 4) + + + sc4ppclb + Pink Panther Club (411) (Qps) (Scorpion 4) (set 1) + + + sc4ppclba + Pink Panther Club (412) (Qps) (Scorpion 4) (set 1) + + + sc4ppclbb + Pink Panther Club (411) (Qps) (Scorpion 4) (set 2) + + + sc4ppclbc + Pink Panther Club (412) (Qps) (Scorpion 4) (set 2) + + + sc4ppcr + Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 1) + + + sc4ppcra + Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 2) + + + sc4ppcrb + Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 3) + + + sc4ppcrd + Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 4) + + + sc4ppcre + Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 5) + + + sc4ppcrf + Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 6) + + + sc4ppcrg + Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 7) + + + sc4ppcrh + Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 8) + + + sc4ppcri + Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 9) + + + sc4ppcrj + Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 4) (set 10) + + + sc4ppcrtb + Pink Panther Clouseau's Revenge Top Box (Mazooma) (Scorpion 4) + + + sc4ppctc + Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 1) + + + sc4ppctca + Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 2) + + + sc4ppctcb + Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 3) + + + sc4ppctcc + Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 4) + + + sc4ppctcd + Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 5) + + + sc4ppctce + Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 6) + + + sc4ppctcf + Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 7) + + + sc4ppctcg + Pink Panther Crack The Code (Bellfruit) (Scorpion 4) (set 8) + + + sc4ppd + Pink Panther (Mazooma) (Scorpion 4) (set 5) + + + sc4ppdym + Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 1) + + + sc4ppdymb + Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 2) + + + sc4ppdymc + Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 3) + + + sc4ppdymd + Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 4) + + + sc4ppdymf + Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 5) + + + sc4ppdymg + Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 6) + + + sc4ppdymh + Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 7) + + + sc4ppdymi + Pink Panther Double Your Money (Mazooma) (Scorpion 4) (set 8) + + + sc4ppdymtb + Pink Panther Double Your Money Top Box (Mazooma) (Scorpion 4) (set 1) + + + sc4ppdymtba + Pink Panther Double Your Money Top Box (Mazooma) (Scorpion 4) (set 2) + + + sc4ppsag + Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 1) + + + sc4ppsaga + Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 2) + + + sc4ppsagb + Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 3) + + + sc4ppsagc + Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 4) + + + sc4ppsagd + Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 5) + + + sc4ppsage + Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 6) + + + sc4ppsagf + Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 7) + + + sc4ppsagg + Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 8) + + + sc4ppsagh + Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 9) + + + sc4ppsagi + Pink Panther Strikes Again (Mazooma) (Scorpion 4) (set 10) + + + sc4pstat + Paystation (V2.0) (Qps) (Scorpion 4) (set 1) + + + sc4pstata + Paystation (V2.1) (Qps) (Scorpion 4) (set 1) + + + sc4pstatb + Paystation (V2.0) (Qps) (Scorpion 4) (set 2) + + + sc4pstatc + Paystation (V2.1) (Qps) (Scorpion 4) (set 2) + + + sc4pstatd + Paystation (V2.2) (Qps) (Scorpion 4) + + + sc4pstate + Paystation (V2.3) (Qps) (Scorpion 4) + + + sc4pstatf + Paystation (V011) (Qps) (Scorpion 4) (set 1) + + + sc4pstatg + Paystation (V041) (Qps) (Scorpion 4) (set 1) + + + sc4pstath + Paystation (V4.0) (Qps) (Scorpion 4) (set 1) + + + sc4pstati + Paystation (V011) (Qps) (Scorpion 4) (set 2) + + + sc4pstatj + Paystation (V041) (Qps) (Scorpion 4) (set 2) + + + sc4pstatm + Paystation (V4.0) (Qps) (Scorpion 4) (set 2) + + + sc4pstatn + Paystation (V012) (Qps) (Scorpion 4) (set 1) + + + sc4pstato + Paystation (V042) (Qps) (Scorpion 4) (set 1) + + + sc4pstatp + Paystation (V012) (Qps) (Scorpion 4) (set 2) + + + sc4pstatq + Paystation (V042) (Qps) (Scorpion 4) (set 2) + + + sc4pwcrz + Power Crazy (Bellfruit) (Scorpion 4) (set 1) + + + sc4pwcrza + Power Crazy (Bellfruit) (Scorpion 4) (set 2) + + + sc4pwcrzb + Power Crazy (Bellfruit) (Scorpion 4) (set 3) + + + sc4pwcrzc + Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 1) + + + sc4pwcrzd + Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 2) + + + sc4pwcrze + Power Crazy (Bellfruit) (Scorpion 4) (set 4) + + + sc4pwcrzf + Power Crazy (Bellfruit) (Scorpion 4) (set 5) + + + sc4pwcrzg + Power Crazy (Bellfruit) (Scorpion 4) (set 6) + + + sc4pwcrzh + Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 3) + + + sc4pwcrzi + Power Crazy SP98 (Bellfruit) (Scorpion 4) (set 4) + + + sc4pwrbl + Powerball (Bellfruit) (Scorpion 4) (set 1) + + + sc4pwrbla + Powerball (Bellfruit) (Scorpion 4) (set 2) + + + sc4pwrbq + Power Ball (Qps) (Scorpion 4) (set 1) + + + sc4pwrbqa + Power Ball (Qps) (Scorpion 4) (set 2) + + + sc4pwrpl + Power Play (Mazooma) (Scorpion 4) (set 1) + + + sc4pwrpla + Power Play (Mazooma) (Scorpion 4) (set 2) + + + sc4pwrplb + Power Play (Mazooma) (Scorpion 4) (set 3) + + + sc4pwrplc + Power Play (Mazooma) (Scorpion 4) (set 4) + + + sc4pwrsg + Power Surge (Qps) (Scorpion 4) (set 1) + + + sc4pwrsga + Power Surge (Qps) (Scorpion 4) (set 2) + + + sc4pwrsgb + Power Surge (Qps) (Scorpion 4) (set 3) + + + sc4pwrsgc + Power Surge (Qps) (Scorpion 4) (set 4) + + + sc4qmodo + Quazzi Mo' Dough (Qps) (Scorpion 4) (set 1) + + + sc4qmodoa + Quazzi Mo' Dough (Qps) (Scorpion 4) (set 2) + + + sc4qmodob + Quazzi Mo' Dough (Qps) (Scorpion 4) (set 3) + + + sc4qmodoc + Quazzi Mo' Dough (Qps) (Scorpion 4) (set 4) + + + sc4qmodod + Quazzi Mo' Dough (Qps) (Scorpion 4) (set 5) + + + sc4quart + Quaterback (Mazooma) (Scorpion 4) (set 1) + + + sc4quarta + Quaterback (Mazooma) (Scorpion 4) (set 2) + + + sc4quartb + Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 1) + + + sc4quartc + Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 1) + + + sc4quartd + Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 2) + + + sc4quarte + Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 2) + + + sc4quartf + Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 3) + + + sc4quartg + Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 4) + + + sc4quarth + Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 5) + + + sc4quarti + Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 3) + + + sc4quartj + Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 6) + + + sc4quartk + Quaterback (PR2072) (Italian) (Mazooma) (Scorpion 4) (set 4) + + + sc4quartl + Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 7) + + + sc4quartm + Quaterback (PR2064) (German) (Mazooma) (Scorpion 4) (set 8) + + + sc4quidr + Quid Rock (Qps) (Scorpion 4) (set 1) + + + sc4quidra + Quid Rock (Qps) (Scorpion 4) (set 2) + + + sc4quidrb + Quid Rock (Qps) (Scorpion 4) (set 3) + + + sc4quidrc + Quid Rock (Qps) (Scorpion 4) (set 4) + + + sc4quidv + Quid Vicious (Mazooma) (Scorpion 4) (set 1) + + + sc4quidva + Quid Vicious (Mazooma) (Scorpion 4) (set 2) + + + sc4quidvb + Quid Vicious (Mazooma) (Scorpion 4) (set 3) + + + sc4quidvc + Quid Vicious (Mazooma) (Scorpion 4) (set 4) + + + sc4r2r + Reel To Reel (Mazooma) (Scorpion 4) (set 1) + + + sc4r2ra + Reel To Reel (Mazooma) (Scorpion 4) (set 2) + + + sc4r2rb + Reel To Reel (Mazooma) (Scorpion 4) (set 3) + + + sc4r2rc + Reel To Reel (Mazooma) (Scorpion 4) (set 4) + + + sc4r66 + Route 66 (Mazooma) (Scorpion 4) + + + sc4rbank + Royle Banker (Bellfruit) (Scorpion 4) (set 1) + + + sc4rbanka + Royle Banker (Bellfruit) (Scorpion 4) (set 2) + + + sc4rbankb + Royle Banker (Bellfruit) (Scorpion 4) (set 3) + + + sc4rbankc + Royle Banker (Bellfruit) (Scorpion 4) (set 4) + + + sc4rdrag + Red Dragon (011) (Qps) (Scorpion 4) (set 1) + + + sc4rdraga + Red Dragon (011) (Qps) (Scorpion 4) (set 2) + + + sc4rdragc + Red Dragon (021) (Qps) (Scorpion 4) (set 1) + + + sc4rdragf + Red Dragon (021) (Qps) (Scorpion 4) (set 2) + + + sc4rdrcl + Red Dragon Club (411) (Qps) (Scorpion 4) (set 1) + + + sc4rdrcla + Red Dragon Club (412) (Qps) (Scorpion 4) + + + sc4rdrclb + Red Dragon Club (411) (Qps) (Scorpion 4) (set 2) + + + sc4redad + Red Alert (Dutch) (Bellfruit) (Scorpion 4) (set 1) + + + sc4redada + Red Alert (Dutch) (Bellfruit) (Scorpion 4) (set 2) + + + sc4redsq + Red Square (Mazooma) (Scorpion 4) (set 1) + + + sc4redsqa + Red Square (Mazooma) (Scorpion 4) (set 2) + + + sc4redsqb + Red Square (Mazooma) (Scorpion 4) (set 3) + + + sc4redsqc + Red Square (Mazooma) (Scorpion 4) (set 4) + + + sc4relcz + Reely Crazy (Bellfruit) (Scorpion 4) (set 1) + + + sc4relcza + Reely Crazy (Bellfruit) (Scorpion 4) (set 2) + + + sc4relczb + Reely Crazy (Bellfruit) (Scorpion 4) (set 3) + + + sc4relczc + Reely Crazy (Bellfruit) (Scorpion 4) (set 4) + + + sc4revo + Revolver (Mazooma) (Scorpion 4) (set 1) + + + sc4revoa + Revolver (Mazooma) (Scorpion 4) (set 2) + + + sc4revob + Revolver (Mazooma) (Scorpion 4) (set 3) + + + sc4revoc + Revolver (Mazooma) (Scorpion 4) (set 4) + + + sc4revod + Revolver (Mazooma) (Scorpion 4) (set 5) + + + sc4revoe + Revolver (Mazooma) (Scorpion 4) (set 6) + + + sc4rhx + Red Hot X (Mazooma) (Scorpion 4) (set 1) + + + sc4rhxa + Red Hot X (Mazooma) (Scorpion 4) (set 2) + + + sc4rhxb + Red Hot X (Mazooma) (Scorpion 4) (set 9) + + + sc4rhxc + Red Hot X (Mazooma) (Scorpion 4) (set 10) + + + sc4rhxcl + Red Hot X Club (Mazooma) (Scorpion 4) (set 1) + + + sc4rhxcla + Red Hot X Club (Mazooma) (Scorpion 4) (set 2) + + + sc4rhxclb + Red Hot X Club (Mazooma) (Scorpion 4) (set 3) + + + sc4rhxclc + Red Hot X Club (Mazooma) (Scorpion 4) (set 4) + + + sc4rhxcs + Red Hot X Casino (Mazooma) (Scorpion 4) (set 1) + + + sc4rhxcsa + Red Hot X Casino (Mazooma) (Scorpion 4) (set 2) + + + sc4rhxcsb + Red Hot X Casino (Mazooma) (Scorpion 4) (set 3) + + + sc4rhxcsc + Red Hot X Casino (Mazooma) (Scorpion 4) (set 4) + + + sc4rhxcsd + Red Hot X Casino (Mazooma) (Scorpion 4) (set 5) + + + sc4rhxcse + Red Hot X Casino (Mazooma) (Scorpion 4) (set 6) + + + sc4rhxd + Red Hot X (Mazooma) (Scorpion 4) (set 3) + + + sc4rhxe + Red Hot X (Mazooma) (Scorpion 4) (set 4) + + + sc4rhxf + Red Hot X (Mazooma) (Scorpion 4) (set 11) + + + sc4rhxg + Red Hot X (Mazooma) (Scorpion 4) (set 12) + + + sc4rhxh + Red Hot X (Mazooma) (Scorpion 4) (set 13) + + + sc4rhxi + Red Hot X (Mazooma) (Scorpion 4) (set 14) + + + sc4rhxj + Red Hot X (Mazooma) (Scorpion 4) (set 5) + + + sc4rhxk + Red Hot X (Mazooma) (Scorpion 4) (set 6) + + + sc4rhxl + Red Hot X (Mazooma) (Scorpion 4) (set 7) + + + sc4rhxm + Red Hot X (Mazooma) (Scorpion 4) (set 8) + + + sc4rhxn + Red Hot X (Mazooma) (Scorpion 4) (set 15) + + + sc4rhxo + Red Hot X (Mazooma) (Scorpion 4) (set 16) + + + sc4rhxp + Red Hot X (Mazooma) (Scorpion 4) (set 17) + + + sc4rhxq + Red Hot X (Mazooma) (Scorpion 4) (set 18) + + + sc4rhxr + Red Hot X (Mazooma) (Scorpion 4) (set 19) + + + sc4rhxs + Red Hot X (Mazooma) (Scorpion 4) (set 20) + + + sc4rhxt + Red Hot X (Mazooma) (Scorpion 4) (set 21) + + + sc4rhxu + Red Hot X (Mazooma) (Scorpion 4) (set 22) + + + sc4rhxv + Red Hot X (Mazooma) (Scorpion 4) (set 23) + + + sc4rhxw + Red Hot X (Mazooma) (Scorpion 4) (set 24) + + + sc4rich + Rich Geezer (Bellfruit) (Scorpion 4) (set 1) + + + sc4richa + Rich Geezer (Bellfruit) (Scorpion 4) (set 2) + + + sc4richb + Rich Geezer (Bellfruit) (Scorpion 4) (set 3) + + + sc4richc + Rich Geezer (Bellfruit) (Scorpion 4) (set 4) + + + sc4richd + Rich Geezer (Bellfruit) (Scorpion 4) (set 5) + + + sc4riche + Rich Geezer (Bellfruit) (Scorpion 4) (set 6) + + + sc4richf + Rich Geezer (Bellfruit) (Scorpion 4) (set 7) + + + sc4richg + Rich Geezer (Bellfruit) (Scorpion 4) (set 8) + + + sc4richh + Rich Geezer (Bellfruit) (Scorpion 4) (set 9) + + + sc4richi + Rich Geezer (Bellfruit) (Scorpion 4) (set 10) + + + sc4richj + Rich Geezer (Bellfruit) (Scorpion 4) (set 11) + + + sc4richk + Rich Geezer (Bellfruit) (Scorpion 4) (set 12) + + + sc4richl + Rich Geezer (Bellfruit) (Scorpion 4) (set 13) + + + sc4rio + Rio Grande (Dutch) (Bellfruit) (Scorpion 4) + + + sc4rmo + Roll Me Over Casino (Bellfruit) (Scorpion 4) (set 1) + + + sc4rmoa + Roll Me Over Casino (Bellfruit) (Scorpion 4) (set 2) + + + sc4rogds + Rogan Dosh (Qps) (Scorpion 4) (set 1) + + + sc4rogdsa + Rogan Dosh (Qps) (Scorpion 4) (set 2) + + + sc4rogdsb + Rogan Dosh (Qps) (Scorpion 4) (set 3) + + + sc4rogdsc + Rogan Dosh (Qps) (Scorpion 4) (set 4) + + + sc4rogdsd + Rogan Dosh (v2.0) (Qps) (Scorpion 4) (set 1) + + + sc4rogdse + Rogan Dosh (v1.6) (Qps) (Scorpion 4) + + + sc4rogdsf + Rogan Dosh (v2.0) (Qps) (Scorpion 4) (set 2) + + + sc4rogdsg + Rogan Dosh (v2.1) (Qps) (Scorpion 4) + + + sc4roksc + Rocket Science (V1.1) (Qps) (Scorpion 4) (set 1) + + + sc4roksca + Rocket Science (011) (Qps) (Scorpion 4) (set 1) + + + sc4rokscb + Rocket Science (V1.1) (Qps) (Scorpion 4) (set 2) + + + sc4rokscc + Rocket Science (011) (Qps) (Scorpion 4) (set 2) + + + sc4rollo + Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 1) + + + sc4rolloa + Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 2) + + + sc4rollob + Rollover Jackpot (PR7032) (Mazooma) (Scorpion 4) (set 1) + + + sc4rolloc + Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 3) + + + sc4rollod + Rollover Jackpot (PR7002) (Mazooma) (Scorpion 4) (set 4) + + + sc4rolloe + Rollover Jackpot (PR7032) (Mazooma) (Scorpion 4) (set 2) + + + sc4rollof + Rollover Jackpot (PR7032) (Mazooma) (Scorpion 4) (set 3) + + + sc4rosts + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 1) + + + sc4rostsa + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 2) + + + sc4rostsb + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 3) + + + sc4rostsc + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 4) + + + sc4rostsd + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 5) + + + sc4rostse + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 6) + + + sc4rostsf + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 7) + + + sc4rostsg + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 4) (set 8) + + + sc4rotc + Return Of The Count (Mazooma) (Scorpion 4) (set 1) + + + sc4rotca + Return Of The Count (Mazooma) (Scorpion 4) (set 2) + + + sc4rotcb + Return Of The Count (Mazooma) (Scorpion 4) (set 3) + + + sc4rotcc + Return Of The Count (Mazooma) (Scorpion 4) (set 4) + + + sc4rotcd + Return Of The Count (Mazooma) (Scorpion 4) (set 5) + + + sc4rovrt + Rovers Return (Mazooma) (Scorpion 4) (set 1) + + + sc4rovrta + Rovers Return (Mazooma) (Scorpion 4) (set 2) + + + sc4rovrtb + Rovers Return (Mazooma) (Scorpion 4) (set 3) + + + sc4rovrtc + Rovers Return (Mazooma) (Scorpion 4) (set 4) + + + sc4rovrtd + Rovers Return (Mazooma) (Scorpion 4) (set 5) + + + sc4rovrte + Rovers Return (Mazooma) (Scorpion 4) (set 6) + + + sc4royle + Royle Family (Bellfruit) (Scorpion 4) (set 1) + + + sc4roylea + Royle Family (Bellfruit) (Scorpion 4) (set 2) + + + sc4royleb + Royle Family (Bellfruit) (Scorpion 4) (set 3) + + + sc4roylec + Royle Family (Bellfruit) (Scorpion 4) (set 4) + + + sc4royled + Royle Family (Bellfruit) (Scorpion 4) (set 5) + + + sc4roylee + Royle Family (Bellfruit) (Scorpion 4) (set 6) + + + sc4roylef + Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 1) + + + sc4royleg + Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 2) + + + sc4royleh + Royle Family (Bellfruit) (Scorpion 4) (set 7) + + + sc4roylei + Royle Family (Bellfruit) (Scorpion 4) (set 8) + + + sc4roylej + Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 3) + + + sc4roylek + Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 4) + + + sc4roylel + Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 5) + + + sc4roylem + Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 6) + + + sc4rt + Rolling Thunder (Mazooma) (Scorpion 4) (set 1) + + + sc4rta + Rolling Thunder (Mazooma) (Scorpion 4) (set 2) + + + sc4rtb + Rolling Thunder (Mazooma) (Scorpion 4) (set 3) + + + sc4rtc + Rolling Thunder (Mazooma) (Scorpion 4) (set 4) + + + sc4rtclb + Rolling Thunder Club (Mazooma) (Scorpion 4) (set 1) + + + sc4rtclba + Rolling Thunder Club (Mazooma) (Scorpion 4) (set 2) + + + sc4rtd + Rolling Thunder (Mazooma) (Scorpion 4) (set 5) + + + sc4rttt + Rise To The Top (Mazooma) (Scorpion 4) (set 1) + + + sc4rttta + Rise To The Top (Mazooma) (Scorpion 4) (set 2) + + + sc4rtttb + Rise To The Top (Mazooma) (Scorpion 4) (set 3) + + + sc4rtttc + Rise To The Top (Mazooma) (Scorpion 4) (set 4) + + + sc4rtttd + Rise To The Top (Mazooma) (Scorpion 4) (set 5) + + + sc4rttte + Rise To The Top (Mazooma) (Scorpion 4) (set 6) + + + sc4rvl + Revolution (Dutch) (Bellfruit) (Scorpion 4) + + + sc4rvlnx + Revolution The Next (Dutch) (Bellfruit) (Scorpion 4) + + + sc4s16 + Section 16 (Mazooma) (Scorpion 4) (set 1) + + + sc4s16a + Section 16 (Mazooma) (Scorpion 4) (set 2) + + + sc4s2k + Sinbad 2000 (German) (Nova) (Scorpion 4) + + + sc4s6c + Super 6 Club (65% Fixed) (Bellfruit) (Scorpion 4) (set 1) + + + sc4s6ca + Super 6 Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4s6cb + Super 6 Club (65% Fixed) (Bellfruit) (Scorpion 4) (set 2) + + + sc4s6cc + Super 6 Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4s6cd + Super 6 Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4s6ce + Super 6 Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4sace + Space Ace (Qps) (Scorpion 4) (set 1) + + + sc4sacea + Space Ace (Qps) (Scorpion 4) (set 2) + + + sc4sahed + Streaks Ahead (Qps) (Scorpion 4) (set 1) + + + sc4saheda + Streaks Ahead (Qps) (Scorpion 4) (set 2) + + + sc4sahedb + Streaks Ahead (Qps) (Scorpion 4) (set 3) + + + sc4sbust + Space Buster (Qps) (Scorpion 4) (set 1) + + + sc4sbusta + Space Buster (Qps) (Scorpion 4) (set 2) + + + sc4sdr + Super Diamonds & Rubies (PR6921) (Bellfruit) (Scorpion 4) (set 1) + + + sc4sdra + Super Diamonds & Rubies SP98 (PR6921) (Bellfruit) (Scorpion 4) (set 1) + + + sc4sdrb + Super Diamonds & Rubies (PR6921) (Bellfruit) (Scorpion 4) (set 2) + + + sc4sdrc + Super Diamonds & Rubies SP98 (PR6921) (Bellfruit) (Scorpion 4) (set 2) + + + sc4sf + Street Fighter (Mazooma) (Scorpion 4) (set 1) + + + sc4sfa + Street Fighter (Mazooma) (Scorpion 4) (set 2) + + + sc4sfb + Street Fighter (Mazooma) (Scorpion 4) (set 3) + + + sc4sfc + Street Fighter (Mazooma) (Scorpion 4) (set 4) + + + sc4sfd + Street Fighter (Mazooma) (Scorpion 4) (set 5) + + + sc4showt + Showtime (Bellfruit) (Scorpion 4) (set 1) + + + sc4showta + Showtime (Bellfruit) (Scorpion 4) (set 2) + + + sc4showtb + Showtime (Bellfruit) (Scorpion 4) (set 3) + + + sc4showtc + Showtime (Bellfruit) (Scorpion 4) (set 4) + + + sc4showtd + Showtime (Bellfruit) (Scorpion 4) (set 5) + + + sc4showte + Showtime (Bellfruit) (Scorpion 4) (set 6) + + + sc4showtf + Showtime (Bellfruit) (Scorpion 4) (set 7) + + + sc4sidsp + Side Splitter (Mazooma) (Scorpion 4) (set 1) + + + sc4sidspa + Side Splitter (Mazooma) (Scorpion 4) (set 2) + + + sc4sidspb + Side Splitter (Mazooma) (Scorpion 4) (set 3) + + + sc4sidspc + Side Splitter (Mazooma) (Scorpion 4) (set 4) + + + sc4sirpz + Sir Prize (PR2004, SIRV) (Mazooma) (Scorpion 4) + + + sc4sirpza + Sir Prize (PR7079, SIRP) (Mazooma) (Scorpion 4) (set 1) + + + sc4sirpzb + Sir Prize (PR7079, SIRP) (Mazooma) (Scorpion 4) (set 2) + + + sc4slad + Snakes & Ladders (Bellfruit) (Scorpion 4) (set 1) + + + sc4slada + Snakes & Ladders (Bellfruit) (Scorpion 4) (set 2) + + + sc4sladb + Snakes & Ladders (Bellfruit) (Scorpion 4) (set 3) + + + sc4sladc + Snakes & Ladders (Bellfruit) (Scorpion 4) (set 4) + + + sc4sladd + Snakes & Ladders (Bellfruit) (Scorpion 4) (set 5) + + + sc4slade + Snakes & Ladders (Bellfruit) (Scorpion 4) (set 6) + + + sc4sladf + Snakes & Ladders (Bellfruit) (Scorpion 4) (set 7) + + + sc4sladg + Snakes & Ladders (Bellfruit) (Scorpion 4) (set 8) + + + sc4sladh + Snakes & Ladders (Bellfruit) (Scorpion 4) (set 9) + + + sc4slc + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4slca + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 8) + + + sc4slcb + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4slcc + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4slcd + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 9) + + + sc4slce + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4slcf + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 10) + + + sc4slcg + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 11) + + + sc4slch + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 12) + + + sc4slci + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4slcj + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 13) + + + sc4slck + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 14) + + + sc4slcl + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 15) + + + sc4slcm + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4slcn + Snakes & Ladders Club (Bellfruit) (Scorpion 4) (set 7) + + + sc4slih + Some Like It Hot (Mazooma) (Scorpion 4) (set 1) + + + sc4sliha + Some Like It Hot (Mazooma) (Scorpion 4) (set 2) + + + sc4slihb + Some Like It Hot (Mazooma) (Scorpion 4) (set 3) + + + sc4slihc + Some Like It Hot (Mazooma) (Scorpion 4) (set 4) + + + sc4slihd + Some Like It Hot (Mazooma) (Scorpion 4) (set 5) + + + sc4slihe + Some Like It Hot (Mazooma) (Scorpion 4) (set 6) + + + sc4smk7 + Smoking 7's (Bellfruit) (Scorpion 4) + + + sc4solgl + Solid Gold (Bellfruit) (Scorpion 4) (set 1) + + + sc4solgla + Solid Gold (Bellfruit) (Scorpion 4) (set 2) + + + sc4solglb + Solid Gold (Bellfruit) (Scorpion 4) (set 3) + + + sc4solglc + Solid Gold (Bellfruit) (Scorpion 4) (set 4) + + + sc4spark + South Park (BFM) (Scorpion 4) (set 1) + + + sc4sparka + South Park (BFM) (Scorpion 4) (set 2) + + + sc4sparkb + South Park (BFM) (Scorpion 4) (set 3) + + + sc4sparkc + South Park (BFM) (Scorpion 4) (set 4) + + + sc4sparkd + South Park (BFM) (Scorpion 4) (set 5) + + + sc4sparke + South Park (BFM) (Scorpion 4) (set 6) + + + sc4spice + Spice It Up (Bellfruit) (Scorpion 4) (set 1) + + + sc4spicea + Spice It Up (Bellfruit) (Scorpion 4) (set 2) + + + sc4spiceb + Spice It Up (Bellfruit) (Scorpion 4) (set 3) + + + sc4spicec + Spice It Up (Bellfruit) (Scorpion 4) (set 4) + + + sc4splgb + Splash & Grab (Mazooma) (Scorpion 4) (set 1) + + + sc4splgba + Splash & Grab (Mazooma) (Scorpion 4) (set 2) + + + sc4spred + Spread Your Bet (Mazooma) (Scorpion 4) + + + sc4sprng + Highly Sprung (Mazooma) (Scorpion 4) + + + sc4srr + Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 1) + + + sc4srra + Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 2) + + + sc4srrb + Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 3) + + + sc4srrc + Snake Rattle 'n' Roll (Bellfruit) (Scorpion 4) (set 4) + + + sc4srrca + Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 5) + + + sc4srrcaa + Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 6) + + + sc4srrcab + Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 7) + + + sc4srrcac + Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 8) + + + sc4srrcad + Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 9) + + + sc4srrcae + Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 10) + + + sc4srrmz + Shake Rattle Roll (Mazooma) (Scorpion 4) (Top Box) + + + sc4srrmza + Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 1) + + + sc4srrmzb + Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 2) + + + sc4srrmzc + Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 3) + + + sc4srrmzd + Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 1) + + + sc4srrmze + Shake Rattle Roll Casino (Mazooma) (Scorpion 4) (set 4) + + + sc4srrmzf + Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 2) + + + sc4srrmzg + Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 3) + + + sc4srrmzh + Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 4) + + + sc4srrmzi + Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 5) + + + sc4srrmzj + Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 6) + + + sc4srrmzk + Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 7) + + + sc4srrmzl + Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 8) + + + sc4srrmzm + Shake Rattle Roll Arcade (Mazooma) (Scorpion 4) (set 9) + + + sc4sslam + Super Slam (Bellfruit) (Scorpion 4) (set 1) + + + sc4sslama + Super Slam (Bellfruit) (Scorpion 4) (set 2) + + + sc4sstep + Super Step (Qps) (Scorpion 4) (set 1) + + + sc4sstepa + Super Step (Qps) (Scorpion 4) (set 2) + + + sc4sstepb + Super Step (Qps / 21 Casino) (Scorpion 4) + + + sc4stag + Stag Night (Bellfruit) (Scorpion 4) (set 1) + + + sc4staga + Stag Night (Bellfruit) (Scorpion 4) (set 2) + + + sc4starp + Starprize (Bellfruit) (Scorpion 4) (set 1) + + + sc4starpa + Starprize (Bellfruit) (Scorpion 4) (set 2) + + + sc4starpb + Starprize (Bellfruit) (Scorpion 4) (set 3) + + + sc4starpc + Starprize (Bellfruit) (Scorpion 4) (set 4) + + + sc4starpd + Starprize (Bellfruit) (Scorpion 4) (set 5) + + + sc4starpe + Starprize (Bellfruit) (Scorpion 4) (set 6) + + + sc4starpf + Starprize (Bellfruit) (Scorpion 4) (set 7) + + + sc4starpg + Starprize (Bellfruit) (Scorpion 4) (set 8) + + + sc4starph + Starprize (Bellfruit) (Scorpion 4) (set 9) + + + sc4starpi + Starprize (Bellfruit) (Scorpion 4) (set 10) + + + sc4starpj + Starprize (Bellfruit) (Scorpion 4) (set 11) + + + sc4starpk + Starprize (Bellfruit) (Scorpion 4) (set 12) + + + sc4stirc + Stir Crazy (Mazooma) (Scorpion 4) (set 1) + + + sc4stirca + Stir Crazy (Mazooma) (Scorpion 4) (set 2) + + + sc4stircb + Stir Crazy (Mazooma) (Scorpion 4) (set 3) + + + sc4stircc + Stir Crazy (Mazooma) (Scorpion 4) (set 4) + + + sc4stircd + Stir Crazy (Mazooma) (Scorpion 4) (set 5) + + + sc4stirce + Stir Crazy (Mazooma) (Scorpion 4) (set 6) + + + sc4stircf + Stir Crazy (Mazooma) (Scorpion 4) (set 7) + + + sc4stircg + Stir Crazy (Mazooma) (Scorpion 4) (set 8) + + + sc4stirch + Stir Crazy (Mazooma) (Scorpion 4) (set 9) + + + sc4stirci + Stir Crazy (Mazooma) (Scorpion 4) (set 10) + + + sc4stircj + Stir Crazy (Mazooma) (Scorpion 4) (set 11) + + + sc4stl + Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 1) + + + sc4stla + Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 2) + + + sc4stlb + Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 3) + + + sc4stlc + Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 4) + + + sc4stld + Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 5) + + + sc4stle + Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 6) + + + sc4stlf + Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 7) + + + sc4stlg + Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 8) + + + sc4strbr + Stars 'n' Bars (PR1219) (Dutch) (Bellfruit) (Scorpion 4) (set 1) + + + sc4strbra + Stars 'n' Bars Arcade (PR1263) (Dutch) (Bellfruit) (Scorpion 4) (set 1) + + + sc4strbrb + Stars 'n' Bars (PR1219) (Dutch) (Bellfruit) (Scorpion 4) (set 2) + + + sc4strbrc + Stars 'n' Bars Arcade (PR1263) (Dutch) (Bellfruit) (Scorpion 4) (set 2) + + + sc4strbrd + Stars 'n' Bars Arcade (PR1263) (Dutch) (Bellfruit) (Scorpion 4) (set 3) + + + sc4strk + The Streak (Mazooma) (Scorpion 4) (set 1) + + + sc4strka + The Streak (Mazooma) (Scorpion 4) (set 2) + + + sc4strkb + The Streak (Mazooma) (Scorpion 4) (set 3) + + + sc4strkc + The Streak (Mazooma) (Scorpion 4) (set 4) + + + sc4strkd + The Streak (Mazooma) (Scorpion 4) (set 5) + + + sc4strke + The Streak (Mazooma) (Scorpion 4) (set 6) + + + sc4strkf + The Streak (Mazooma) (Scorpion 4) (set 7) + + + sc4strkg + The Streak (Mazooma) (Scorpion 4) (set 8) + + + sc4strkh + The Streak (Mazooma) (Scorpion 4) (set 9) + + + sc4strki + The Streak (Mazooma) (Scorpion 4) (set 10) + + + sc4strkj + The Streak (Mazooma) (Scorpion 4) (set 11) + + + sc4strkk + The Streak (Mazooma) (Scorpion 4) (set 12) + + + sc4strx + Strike X (Bellfruit) (Scorpion 4) (set 1) + + + sc4strxa + Strike X (Bellfruit) (Scorpion 4) (set 2) + + + sc4strxb + Strike X (Bellfruit) (Scorpion 4) (set 3) + + + sc4strxc + Strike X (Bellfruit) (Scorpion 4) (set 4) + + + sc4sumit + Summit Up (Mazooma) (Scorpion 4) (set 1) + + + sc4sumita + Summit Up (Mazooma) (Scorpion 4) (set 2) + + + sc4sumitb + Summit Up (Mazooma) (Scorpion 4) (set 3) + + + sc4sumitc + Summit Up (Mazooma) (Scorpion 4) (set 4) + + + sc4supst + Super Streax (Mazooma) (Scorpion 4) (set 1) + + + sc4supsta + Super Streax (Mazooma) (Scorpion 4) (set 2) + + + sc4sus + Suits U Sir (Qps) (Scorpion 4) (set 1) + + + sc4susc + Suits U Sir (Qps) (Scorpion 4) (set 2) + + + sc4suscl + Suits U Sir Club (Qps) (Scorpion 4) (set 1) + + + sc4suscla + Suits U Sir Club (Qps) (Scorpion 4) (set 4) + + + sc4susclb + Suits U Sir Club (Qps) (Scorpion 4) (set 2) + + + sc4susclc + Suits U Sir Club (Qps) (Scorpion 4) (set 3) + + + sc4susf + Suits U Sir (Qps) (Scorpion 4) (set 3) + + + sc4susg + Suits U Sir (Qps) (Scorpion 4) (set 4) + + + sc4sush + Suits U Sir (Qps) (Scorpion 4) (set 5) + + + sc4susi + Suits U Sir (Qps) (Scorpion 4) (set 6) + + + sc4susj + Suits U Sir (Qps) (Scorpion 4) (set 7) + + + sc4susk + Suits U Sir (Qps) (Scorpion 4) (set 8) + + + sc4swbak + Switch Back (Mazooma) (Scorpion 4) (set 1) + + + sc4swbaka + Switch Back (Mazooma) (Scorpion 4) (set 2) + + + sc4swbakb + Switch Back (Mazooma) (Scorpion 4) (set 3) + + + sc4swbakc + Switch Back (Mazooma) (Scorpion 4) (set 4) + + + sc4swywm + Spin When Your Winning (Mazooma) (Scorpion 4) (set 1) + + + sc4swywma + Spin When Your Winning (Mazooma) (Scorpion 4) (set 2) + + + sc4swywmb + Spin When Your Winning (Mazooma) (Scorpion 4) (set 3) + + + sc4swywmc + Spin When Your Winning (Mazooma) (Scorpion 4) (set 4) + + + sc4swywmd + Spin When Your Winning (Mazooma) (Scorpion 4) (set 5) + + + sc4swywme + Spin When Your Winning (Mazooma) (Scorpion 4) (set 6) + + + sc4swywmf + Spin When Your Winning (Mazooma) (Scorpion 4) (set 7) + + + sc4swywmg + Spin When Your Winning (Mazooma) (Scorpion 4) (set 8) + + + sc4taekw + Tae Kwon Dough (Qps) (Scorpion 4) (set 1) + + + sc4taekwa + Tae Kwon Dough (Qps) (Scorpion 4) (set 2) + + + sc4taekwb + Tae Kwon Dough (Qps) (Scorpion 4) (set 3) + + + sc4taekwc + Tae Kwon Dough (Qps) (Scorpion 4) (set 8) + + + sc4taekwd + Tae Kwon Dough (Qps) (Scorpion 4) (set 9) + + + sc4taekwe + Tae Kwon Dough (Qps) (Scorpion 4) (set 10) + + + sc4taekwf + Tae Kwon Dough (Qps) (Scorpion 4) (set 11) + + + sc4taekwg + Tae Kwon Dough (Qps) (Scorpion 4) (set 4) + + + sc4taekwh + Tae Kwon Dough (Qps) (Scorpion 4) (set 5) + + + sc4taekwi + Tae Kwon Dough (Qps) (Scorpion 4) (set 6) + + + sc4taekwj + Tae Kwon Dough (Qps) (Scorpion 4) (set 7) + + + sc4takcl + Take Note Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4takcla + Take Note Club 500 (Bellfruit) (Scorpion 4) + + + sc4takclb + Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 1) + + + sc4takclc + Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 2) + + + sc4takcld + Take Note Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4takcle + Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 3) + + + sc4takclf + Take Note Club (Ferry) (Bellfruit) (Scorpion 4) (set 4) + + + sc4takclg + Take Note Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4takclh + Take Note Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4takcli + Take Note Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4takclj + Take Note Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4taknt + Take Note (Bellfruit) (Scorpion 4) (set 1) + + + sc4taknta + Take Note (Bellfruit) (Scorpion 4) (set 2) + + + sc4tbana + Top Banana (Bellfruit) (Scorpion 4) (set 1) + + + sc4tbanaa + Top Banana (Bellfruit) (Scorpion 4) (set 2) + + + sc4tbox + Golden X (Mazooma) (PR2056, TBOX) (Scorpion 4) (Top Box, set 4) + + + sc4tempt + Temptation (Bellfruit) (Scorpion 4) (set 1) + + + sc4tempta + Temptation (Bellfruit) (Scorpion 4) (set 2) + + + sc4temptb + Temptation (Bellfruit) (Scorpion 4) (set 3) + + + sc4temptc + Temptation (Bellfruit) (Scorpion 4) (set 4) + + + sc4temptd + Temptation (Bellfruit) (Scorpion 4) (set 5) + + + sc4tempte + Temptation (Bellfruit) (Scorpion 4) (set 6) + + + sc4temptf + Temptation (Bellfruit) (Scorpion 4) (set 7) + + + sc4temptg + Temptation (Bellfruit) (Scorpion 4) (set 8) + + + sc4tetri + Tetris (Mazooma) (Scorpion 4) (set 1) + + + sc4tetria + Tetris (Mazooma) (Scorpion 4) (set 2) + + + sc4tetrib + Tetris (Mazooma) (Scorpion 4) (set 3) + + + sc4tetric + Tetris (Mazooma) (Scorpion 4) (set 4) + + + sc4tetrid + Tetris (Mazooma) (Scorpion 4) (set 5) + + + sc4tetrie + Tetris (Mazooma) (Scorpion 4) (set 6) + + + sc4tetrif + Tetris (Mazooma) (Scorpion 4) (set 7) + + + sc4tetrig + Tetris (Mazooma) (Scorpion 4) (set 8) + + + sc4tetrih + Tetris (Mazooma) (Scorpion 4) (set 9) + + + sc4tetrii + Tetris (Mazooma) (Scorpion 4) (set 10) + + + sc4tetrij + Tetris (Mazooma) (Scorpion 4) (set 11) + + + sc4tetrik + Tetris (Mazooma) (Scorpion 4) (set 12) + + + sc4tfclb + Tutti Frutti Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4tfclba + Tutti Frutti Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4tgear + Top Gear (Mazooma) (Scorpion 4) (set 1) + + + sc4tgeara + Top Gear (Mazooma) (Scorpion 4) (set 2) + + + sc4tgearb + Top Gear (Mazooma) (Scorpion 4) (set 3) + + + sc4tgearc + Top Gear (Mazooma) (Scorpion 4) (set 4) + + + sc4tgeard + Top Gear (Mazooma) (Scorpion 4) (set 5) + + + sc4tgeare + Top Gear (Mazooma) (Scorpion 4) (set 6) + + + sc4tgearf + Top Gear (Mazooma) (Scorpion 4) (set 7) + + + sc4tgearg + Top Gear (Mazooma) (Scorpion 4) (set 8) + + + sc4tic2 + Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 1) + + + sc4tic2a + Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 2) + + + sc4tic2b + Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 3) + + + sc4tic2c + Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 4) + + + sc4tic2d + Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 5) + + + sc4tic2e + Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 6) + + + sc4tic2f + Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 7) + + + sc4tic2g + Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 8) + + + sc4tic2h + Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 4) + + + sc4tic2i + Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 1) + + + sc4tic2j + Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 2) + + + sc4tic2k + Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 3) + + + sc4tic2l + Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 5) + + + sc4tic2m + Tic Tac Two Casino Arcade (Mazooma) (Scorpion 4) (set 6) + + + sc4tic2n + Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 9) + + + sc4tic2o + Tic Tac Two Casino (Mazooma) (Scorpion 4) (set 10) + + + sc4ticlb + Treasure Island Club (Fixed 65%) (Bellfruit) (Scorpion 4) (set 1) + + + sc4ticlba + Treasure Island Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4ticlbb + Treasure Island Club (Fixed 65%) (Bellfruit) (Scorpion 4) (set 2) + + + sc4ticlbc + Treasure Island Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4tload + Top Loader (Mazooma) (Scorpion 4) + + + sc4tpsht + Top Of The Shots (Mazooma) (Scorpion 4) (set 1) + + + sc4tpshta + Top Of The Shots (Mazooma) (Scorpion 4) (set 2) + + + sc4tpshtb + Top Of The Shots (Mazooma) (Scorpion 4) (set 3) + + + sc4tpshtc + Top Of The Shots (Mazooma) (Scorpion 4) (set 4) + + + sc4tpshtd + Top Of The Shots (Mazooma) (Scorpion 4) (set 5) + + + sc4tpshte + Top Of The Shots (Mazooma) (Scorpion 4) (set 6) + + + sc4tpshtf + Top Of The Shots (Mazooma) (Scorpion 4) (set 7) + + + sc4tpshtg + Top Of The Shots (Mazooma) (Scorpion 4) (set 8) + + + sc4trail + Trailblazer (Mazooma) (Scorpion 4) (set 1) + + + sc4traila + Trailblazer (Mazooma) (Scorpion 4) (set 2) + + + sc4trailb + Trailblazer (Mazooma) (Scorpion 4) (set 3) + + + sc4trailc + Trailblazer (Mazooma) (Scorpion 4) (set 4) + + + sc4tri7 + Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 1) + + + sc4tri7a + Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 2) + + + sc4tri7b + Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 1) + + + sc4tri7c + Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 2) + + + sc4tri7d + Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 3) + + + sc4tri7e + Triple 7's Arcade (Bellfruit) (Scorpion 4) (set 4) + + + sc4tri7f + Triple 7's (Bellfruit) (Scorpion 4) (set 1) + + + sc4tri7g + Triple 7's (Bellfruit) (Scorpion 4) (set 2) + + + sc4tri7h + Triple 7's (Bellfruit) (Scorpion 4) (set 3) + + + sc4tri7i + Triple 7's (Bellfruit) (Scorpion 4) (set 4) + + + sc4tri7j + Triple 7's (Bellfruit) (Scorpion 4) (set 5) + + + sc4tri7k + Triple 7's (Bellfruit) (Scorpion 4) (set 6) + + + sc4tri7l + Triple 7's (Bellfruit) (Scorpion 4) (set 7) + + + sc4tri7m + Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 3) + + + sc4tri7n + Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 4) + + + sc4tri7o + Triple 7's (Bellfruit) (Scorpion 4) (set 8) + + + sc4tri7p + Triple 7's (Bellfruit) (Scorpion 4) (set 9) + + + sc4tri7q + Triple 7's (Bellfruit) (Scorpion 4) (set 10) + + + sc4tri7r + Triple 7's (Bellfruit) (Scorpion 4) (set 11) + + + sc4tri7s + Triple 7's (Bellfruit) (Scorpion 4) (set 12) + + + sc4tri7t + Triple 7's (Bellfruit) (Scorpion 4) (set 13) + + + sc4tri7u + Triple 7's (Bellfruit) (Scorpion 4) (set 14) + + + sc4tri7v + Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 5) + + + sc4tri7w + Triple 7's (Bellfruit) (Scorpion 4) (Top Box, set 6) + + + sc4tridn + Trident, The (Mazooma) (Scorpion 4) (set 1) + + + sc4tridna + Trident, The (Mazooma) (Scorpion 4) (set 2) + + + sc4trist + Triple Streak (PR2188) (Mazooma) (Scorpion 4) (Top Box, set 1) + + + sc4trista + Triple Streak (PR2188) (Mazooma) (Scorpion 4) (Top Box, set 2) + + + sc4tristb + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 1) + + + sc4tristc + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 2) + + + sc4tristd + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 3) + + + sc4triste + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 4) + + + sc4tristf + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 5) + + + sc4tristg + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 6) + + + sc4tristh + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 7) + + + sc4tristi + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 8) + + + sc4tristj + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 9) + + + sc4tristk + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 10) + + + sc4tristl + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 11) + + + sc4tristm + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 12) + + + sc4tristn + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 13) + + + sc4tristo + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 14) + + + sc4tristp + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 15) + + + sc4tristq + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 16) + + + sc4tristr + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 17) + + + sc4trists + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 18) + + + sc4tristt + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 19) + + + sc4tristu + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 20) + + + sc4tristv + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 21) + + + sc4tristw + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 22) + + + sc4tristx + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 23) + + + sc4tristy + Triple Streak (PR2167) (Mazooma) (Scorpion 4) (set 24) + + + sc4tst + Scorpion 4 Test Rig (Bellfruit) (Scorpion ?) + + + sc4ttomb + Treasure Tomb (Bellfruit) (Scorpion 4) (set 1) + + + sc4ttomba + Treasure Tomb (Bellfruit) (Scorpion 4) (set 2) + + + sc4ttombb + Treasure Tomb (Bellfruit) (Scorpion 4) (set 3) + + + sc4ttombc + Treasure Tomb (Bellfruit) (Scorpion 4) (set 4) + + + sc4ttp + Take The Piste (Mazooma) (Scorpion 4) (set 1) + + + sc4ttpa + Take The Piste (Mazooma) (Scorpion 4) (set 2) + + + sc4ttpb + Take The Piste (Mazooma) (Scorpion 4) (set 3) + + + sc4ttpc + Take The Piste (Mazooma) (Scorpion 4) (set 4) + + + sc4ttpd + Take The Piste (Mazooma) (Scorpion 4) (set 5) + + + sc4ttpe + Take The Piste (Mazooma) (Scorpion 4) (set 6) + + + sc4ttpf + Take The Piste (Mazooma) (Scorpion 4) (set 7) + + + sc4ttpie + Take The Piece (Bellfruit) (PR1714) (Scorpion 4) (set 1) + + + sc4ttpiea + Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 1) + + + sc4ttpieb + Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 2) + + + sc4ttpiec + Take The Piece (Bellfruit) (PR1714) (Scorpion 4) (set 2) + + + sc4ttpied + Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 3) + + + sc4ttpiee + Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 4) + + + sc4ttpief + Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 5) + + + sc4ttpieg + Take The Piece (Bellfruit) (PR1734) (Scorpion 4) (set 6) + + + sc4tub + Tubular Bells (Bellfruit) (Scorpion 4) (set 1) + + + sc4tuba + Tubular Bells (Bellfruit) (Scorpion 4) (set 2) + + + sc4tubb + Tubular Bells (Bellfruit) (Scorpion 4) (set 3) + + + sc4tubc + Tubular Bells (Bellfruit) (Scorpion 4) (set 4) + + + sc4twilt + Twilight (Dutch) (Bellfruit) (Scorpion 4) + + + sc4typ + Take Your Pick (Bellfruit) (Scorpion 4) (set 1) + + + sc4typa + Take Your Pick (Bellfruit) (Scorpion 4) (set 2) + + + sc4typb + Take Your Pick (Bellfruit) (Scorpion 4) (set 3) + + + sc4typc + Take Your Pick (Bellfruit) (Scorpion 4) (set 4) + + + sc4ufg + Up For Grabs (Mazooma) (Scorpion 4) (set 1) + + + sc4ufga + Up For Grabs (Mazooma) (Scorpion 4) (set 2) + + + sc4ufi + Up For It (Bellfruit) (Scorpion 4) (set 1) + + + sc4ufia + Up For It (Bellfruit) (Scorpion 4) (set 2) + + + sc4ufib + Up For It (Bellfruit) (Scorpion 4) (set 3) + + + sc4ufic + Up For It (Bellfruit) (Scorpion 4) (set 4) + + + sc4ufid + Up For It (Bellfruit) (Scorpion 4) (set 5) + + + sc4ufie + Up For It (Bellfruit) (Scorpion 4) (set 6) + + + sc4valnv + Valhalla (German) (PR7025, GVAL) (Nova) (Scorpion 4) + + + sc4valqp + Valhalla (Dutch) (Qps) (Scorpion 4) + + + sc4vivam + Viva Mexico (Bellfruit) (Scorpion 4) (set 1) + + + sc4vivama + Viva Mexico (Bellfruit) (Scorpion 4) (set 2) + + + sc4vivamb + Viva Mexico (Bellfruit) (Scorpion 4) (set 3) + + + sc4vivamc + Viva Mexico (Bellfruit) (Scorpion 4) (set 4) + + + sc4vivcs + Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 1) + + + sc4vivcsa + Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 2) + + + sc4vivcsb + Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 3) + + + sc4vivcsc + Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 4) + + + sc4vivcsd + Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 5) + + + sc4vivcse + Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 6) + + + sc4vivcsf + Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 7) + + + sc4vivcsg + Casino Viva Mexico (Bellfruit) (Scorpion 4) (set 8) + + + sc4vmclb + Viva Mexico Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4vmclba + Viva Mexico Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4vmclbb + Viva Mexico Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4vmnv + Viva Mexico (Nova) (Scorpion 4) (set 1) + + + sc4vmnva + Viva Mexico (Nova) (Scorpion 4) (set 2) + + + sc4vrgcl + Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 1) + + + sc4vrgcla + Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 2) + + + sc4vrgclb + Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 3) + + + sc4vrgclc + Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 4) + + + sc4vrgcld + Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 5) + + + sc4vrgcle + Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 6) + + + sc4vrgclf + Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 7) + + + sc4vrgclg + Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 8) + + + sc4vrgclh + Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 9) + + + sc4vrgcli + Very Rich Geezer Club (Bellfruit) (Scorpion 4) (set 10) + + + sc4wadzl + Wadzilla (Mazooma) (Scorpion 4) (set 1) + + + sc4wadzla + Wadzilla (Mazooma) (Scorpion 4) (set 2) + + + sc4wag + Win-A-Gain (German) (Nova) (Scorpion 4) + + + sc4waw + Wet & Wild (Mazooma) (Scorpion 4) (set 1) + + + sc4wawa + Wet & Wild (Mazooma) (Scorpion 4) (set 2) + + + sc4wawb + Wet & Wild (Mazooma) (Scorpion 4) (set 3) + + + sc4wawc + Wet & Wild (Mazooma) (Scorpion 4) (set 4) + + + sc4wawd + Wet & Wild (Mazooma) (Scorpion 4) (set 5) + + + sc4wawe + Wet & Wild (Mazooma) (Scorpion 4) (set 6) + + + sc4wawf + Wet & Wild (Mazooma) (Scorpion 4) (set 7) + + + sc4wdw + Who Dares Wins (Bellfruit) (Scorpion 4) (set 1) + + + sc4wdwa + Who Dares Wins (Bellfruit) (Scorpion 4) (set 2) + + + sc4wdwb + Who Dares Wins (Bellfruit) (Scorpion 4) (set 3) + + + sc4wdwc + Who Dares Wins (Bellfruit) (Scorpion 4) (set 4) + + + sc4wdwd + Who Dares Wins (Bellfruit) (Scorpion 4) (set 5) + + + sc4wdwe + Who Dares Wins (Bellfruit) (Scorpion 4) (set 6) + + + sc4wdwf + Who Dares Wins (Bellfruit) (Scorpion 4) (set 7) + + + sc4wdwg + Who Dares Wins (Bellfruit) (Scorpion 4) (set 8) + + + sc4wdwh + Who Dares Wins (Bellfruit) (Scorpion 4) (set 9) + + + sc4wdwi + Who Dares Wins (Bellfruit) (Scorpion 4) (set 10) + + + sc4wdwj + Who Dares Wins (Bellfruit) (Scorpion 4) (set 11) + + + sc4wernr + Werner (German) (PR7027, GWER) (Nova) (Scorpion 4) (set 1) + + + sc4winsp + Winning Spin Top Box (PR2526, WSPT) (Qps) (Scorpion 4) (set 1) + + + sc4winsp0 + Winning Spin Top Box (PR2526, WSPT) (Qps) (Scorpion 4) (set 2) + + + sc4winspa + Winning Spin (Bingo V011) (Qps) (Scorpion 4) (set 1) + + + sc4winspb + Winning Spin (V021) (Qps) (Scorpion 4) (set 1) + + + sc4winspc + Winning Spin (V031) (Qps) (Scorpion 4) (set 1) + + + sc4winspd + Winning Spin (Arcade V011) (Qps) (Scorpion 4) (set 1) + + + sc4winspe + Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 1) + + + sc4winspf + Winning Spin (V022) (Qps) (Scorpion 4) (set 1) + + + sc4winspg + Winning Spin (V032) (Qps) (Scorpion 4) (set 1) + + + sc4winsph + Winning Spin (Bingo V011) (Qps) (Scorpion 4) (set 2) + + + sc4winspi + Winning Spin (V021) (Qps) (Scorpion 4) (set 2) + + + sc4winspj + Winning Spin (V031) (Qps) (Scorpion 4) (set 2) + + + sc4winspk + Winning Spin (Arcade V011) (Qps) (Scorpion 4) (set 2) + + + sc4winspl + Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 2) + + + sc4winspm + Winning Spin (V022) (Qps) (Scorpion 4) (set 2) + + + sc4winspn + Winning Spin (V032) (Qps) (Scorpion 4) (set 2) + + + sc4winspo + Winning Spin (Arcade V061) (Qps) (Scorpion 4) (set 1) + + + sc4winspp + Winning Spin (Arcade V062) (Qps) (Scorpion 4) (set 1) + + + sc4winspq + Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 3) + + + sc4winspr + Winning Spin (V022) (Qps) (Scorpion 4) (set 3) + + + sc4winsps + Winning Spin (V032) (Qps) (Scorpion 4) (set 3) + + + sc4winspt + Winning Spin (Arcade V012) (Qps) (Scorpion 4) (set 1) + + + sc4winspu + Winning Spin (Arcade V061) (Qps) (Scorpion 4) (set 2) + + + sc4winspv + Winning Spin (Arcade V062) (Qps) (Scorpion 4) (set 2) + + + sc4winspw + Winning Spin (Bingo V012) (Qps) (Scorpion 4) (set 4) + + + sc4winspx + Winning Spin (V022) (Qps) (Scorpion 4) (set 4) + + + sc4winspy + Winning Spin (V032) (Qps) (Scorpion 4) (set 4) + + + sc4winspz + Winning Spin (Arcade V012) (Qps) (Scorpion 4) (set 2) + + + sc4winxp + Win X-plosion (Dutch) (Bellfruit) (Scorpion 4) + + + sc4wldbn + Wild Bunch (Bellfruit) (Scorpion 4) (set 1) + + + sc4wldbna + Wild Bunch (Bellfruit) (Scorpion 4) (set 2) + + + sc4wldbnb + Wild Bunch (Bellfruit) (Scorpion 4) (set 3) + + + sc4wldbnc + Wild Bunch (Bellfruit) (Scorpion 4) (set 4) + + + sc4wldbnd + Wild Bunch (Bellfruit) (Scorpion 4) (set 5) + + + sc4wldbne + Wild Bunch (Bellfruit) (Scorpion 4) (set 6) + + + sc4wldbnf + Wild Bunch (Bellfruit) (Scorpion 4) (set 7) + + + sc4wldbng + Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 1) + + + sc4wldbnh + Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 2) + + + sc4wldbni + Wild Bunch (Bellfruit) (Scorpion 4) (set 8) + + + sc4wldbnj + Wild Bunch (Bellfruit) (Scorpion 4) (set 9) + + + sc4wldbnk + Wild Bunch (Bellfruit) (Scorpion 4) (set 10) + + + sc4wldbnl + Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 3) + + + sc4wldbnm + Wild Bunch Casino (Bellfruit) (Scorpion 4) (set 4) + + + sc4wldbnn + Wild Bunch (Bellfruit) (Scorpion 4) (set 11) + + + sc4wldbno + Wild Bunch (Bellfruit) (Scorpion 4) (set 12) + + + sc4wldbnp + Wild Bunch (Bellfruit) (Scorpion 4) (set 13) + + + sc4wldbnq + Wild Bunch (Bellfruit) (Scorpion 4) (set 14) + + + sc4wldjk + Wild Jackpots (Mazooma) (Scorpion 4) (set 1) + + + sc4wldjka + Wild Jackpots (Mazooma) (Scorpion 4) (set 2) + + + sc4wldjkb + Wild Jackpots (Mazooma) (Scorpion 4) (set 3) + + + sc4wldjkc + Wild Jackpots (Mazooma) (Scorpion 4) (set 4) + + + sc4wldjkd + Wild Jackpots (Mazooma) (Scorpion 4) (set 5) + + + sc4wldjke + Wild Jackpots (Mazooma) (Scorpion 4) (set 6) + + + sc4wldjkf + Wild Jackpots (Mazooma) (Scorpion 4) (set 7) + + + sc4wldjkg + Wild Jackpots (Mazooma) (Scorpion 4) (set 8) + + + sc4wondw + Wonder Wheel (Bellfruit) (Scorpion 4) (set 1) + + + sc4wondwa + Wonder Wheel (Bellfruit) (Scorpion 4) (set 2) + + + sc4wrnlt + Werner (German) (PR7027, GWER) (Nova) (Scorpion 4) (set 2) + + + sc4wspin + Win Spinner Arcade (011) (Qps) (Scorpion 4) (set 1) + + + sc4wspinb + Win Spinner SP Arcade (011) (Qps) (Scorpion 4) (set 1) + + + sc4wspinc + Win Spinner Arcade (011) (Qps) (Scorpion 4) (set 2) + + + sc4wspind + Win Spinner SP Arcade (011) (Qps) (Scorpion 4) (set 2) + + + sc4wtc + Wild Thing Casino (Mazooma) (Scorpion 4) (set 1) + + + sc4wtca + Wild Thing Casino (Mazooma) (Scorpion 4) (set 2) + + + sc4wtcb + Wild Thing Casino (Mazooma) (Scorpion 4) (set 3) + + + sc4wtcc + Wild Thing Casino (Mazooma) (Scorpion 4) (set 4) + + + sc4wtcd + Wild Thing Casino (Mazooma) (Scorpion 4) (set 5) + + + sc4wtce + Wild Thing Casino (Mazooma) (Scorpion 4) (set 6) + + + sc4wtcf + Wild Thing Casino (Mazooma) (Scorpion 4) (set 7) + + + sc4wthng + Wild Thing (Bellfruit) (Scorpion 4) (set 1) + + + sc4wthnga + Wild Thing (Bellfruit) (Scorpion 4) (set 2) + + + sc4wthngb + Wild Thing (Bellfruit) (Scorpion 4) (set 3) + + + sc4wthngc + Wild Thing (Bellfruit) (Scorpion 4) (set 4) + + + sc4wthnm + Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 1) + + + sc4wthnma + Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 2) + + + sc4wthnmb + Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 3) + + + sc4wthnmc + Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 4) + + + sc4wthnmd + Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 5) + + + sc4wthnme + Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 6) + + + sc4wthnmf + Wild Thing Casino Arcade (Mazooma) (Scorpion 4) (set 7) + + + sc4wwys + Win When Your Spinning (Bellfruit) (Scorpion 4) (set 1) + + + sc4wwysa + Win When Your Spinning (Bellfruit) (Scorpion 4) (set 2) + + + sc4xcash + Xtra Cash Casino (Dutch) (Bellfruit) (Scorpion 4) + + + sc4xmark + X Marks The Spot (Bellfruit) (Scorpion 4) (set 1) + + + sc4xmarka + X Marks The Spot (Bellfruit) (Scorpion 4) (set 2) + + + sc4ziggy + Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 1) + + + sc4ziggya + Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 2) + + + sc4ziggyb + Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 3) + + + sc4ziggyc + Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 4) + + + sc4ziggyd + Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 5) + + + sc4ziggye + Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 6) + + + sc4ziggyf + Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 7) + + + sc4ziggyg + Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 8) + + + sc5a40 + Around The Board In 40 Days (Mazooma) (Scorpion 5) (set 1) + + + sc5a40a + Around The Board In 40 Days (Mazooma) (Scorpion 5) (set 2) + + + sc5adga + Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 1) + + + sc5adgaa + Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 2) + + + sc5adgab + Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 3) + + + sc5adgac + Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 4) + + + sc5adgad + Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 5) + + + sc5adgae + Ant & Dec's Grab The Ads (Bellfruit) (Scorpion 5) (set 6) + + + sc5adgtc + Ant & Dec's Grab The Cash (Bellfruit) (Scorpion 5) (set 1) + + + sc5adgtca + Ant & Dec's Grab The Cash (Bellfruit) (Scorpion 5) (set 2) + + + sc5adjb + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 1) + + + sc5adjba + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 2) + + + sc5adjbb + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 3) + + + sc5adjbc + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 4) + + + sc5adjbd + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 5) + + + sc5adjbe + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 6) + + + sc5adjbf + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 7) + + + sc5adjbg + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 8) + + + sc5adjbh + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 9) + + + sc5adjbi + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 10) + + + sc5adjbj + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 11) + + + sc5adjbk + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 12) + + + sc5adjbl + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 13) + + + sc5adjbm + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 14) + + + sc5adjbn + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 15) + + + sc5adjbo + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 16) + + + sc5adjbp + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 17) + + + sc5adjbq + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 18) + + + sc5adjbr + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 19) + + + sc5adjbs + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 20) + + + sc5adjbt + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 5) (set 21) + + + sc5adsnt + Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 5) (set 1) + + + sc5adsnta + Ant & Dec's Saturday Night Takeaway (Bellfruit) (Scorpion 5) (set 2) + + + sc5adwta + Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 5) (set 1) + + + sc5adwtaa + Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit) (Scorpion 5) (set 2) + + + sc5bantm + Bantam Of The Opera (Mazooma) (Scorpion 5) (set 1) + + + sc5bantma + Bantam Of The Opera (Mazooma) (Scorpion 5) (set 2) + + + sc5bar7 + Bar 7's (Bellfruit) (Scorpion 5) (set 1) + + + sc5bar7a + Bar 7's (Bellfruit) (Scorpion 5) (set 2) + + + sc5bar7b + Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 1) + + + sc5bar7c + Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 2) + + + sc5bar7d + Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 3) + + + sc5bar7e + Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 4) + + + sc5bar7f + Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 5) + + + sc5bar7g + Bar 7's Bingo (Bellfruit) (Scorpion 5) (set 6) + + + sc5batl + Battleships & Cruisers (Bellfruit) (Scorpion 5) (set 1) + + + sc5batla + Battleships & Cruisers (Bellfruit) (Scorpion 5) (set 2) + + + sc5bjob + Bank Job (Bellfruit) (Scorpion 5) (set 1) + + + sc5bjoba + Bank Job (Bellfruit) (Scorpion 5) (set 2) + + + sc5bjobb + Bank Job (Bellfruit) (Scorpion 5) (set 3) + + + sc5bjobc + Bank Job (Bellfruit) (Scorpion 5) (set 4) + + + sc5bjobd + Bank Job (Bellfruit) (Scorpion 5) (set 5) + + + sc5bjobe + Bank Job (Bellfruit) (Scorpion 5) (set 6) + + + sc5bjobf + Bank Job (Bellfruit) (Scorpion 5) (set 7) + + + sc5bjobg + Bank Job (Bellfruit) (Scorpion 5) (set 8) + + + sc5bjobh + Bank Job (Bellfruit) (Scorpion 5) (set 9) + + + sc5bjobi + Bank Job (Bellfruit) (Scorpion 5) (set 10) + + + sc5bkngx + Bar King X (Mazooma) (Scorpion 5) (set 1) + + + sc5bkngxa + Bar King X (Mazooma) (Scorpion 5) (set 2) + + + sc5bob + Bobby Dazzler (Mazooma) (Scorpion 5) (set 1) + + + sc5boba + Bobby Dazzler (Mazooma) (Scorpion 5) (set 2) + + + sc5bobb + Bobby Dazzler (Mazooma) (Scorpion 5) (set 3) + + + sc5bobc + Bobby Dazzler (Mazooma) (Scorpion 5) (set 4) + + + sc5bpb + Bully's Prize Board (Bellfruit) (Scorpion 5) (set 1) + + + sc5bpba + Bully's Prize Board (Bellfruit) (Scorpion 5) (set 5) + + + sc5bpbb + Bully's Prize Board (Bellfruit) (Scorpion 5) (set 2) + + + sc5bpbc + Bully's Prize Board (Bellfruit) (Scorpion 5) (set 6) + + + sc5bpbd + Bully's Prize Board (Bellfruit) (Scorpion 5) (set 3) + + + sc5bpbe + Bully's Prize Board (Bellfruit) (Scorpion 5) (set 4) + + + sc5bpbf + Bully's Prize Board (Bellfruit) (Scorpion 5) (set 7) + + + sc5bpbg + Bully's Prize Board (Bellfruit) (Scorpion 5) (set 8) + + + sc5bpfpb + Bullseye Pounds For Points (Bellfruit) (Scorpion 5) (set 1) + + + sc5bpfpba + Bullseye Pounds For Points (Bellfruit) (Scorpion 5) (set 2) + + + sc5bsp + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 1) + + + sc5bspa + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 2) + + + sc5bspb + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 3) + + + sc5bspc + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 4) + + + sc5bspd + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 5) + + + sc5bspe + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 6) + + + sc5bspf + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 7) + + + sc5bspg + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 8) + + + sc5bsph + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 9) + + + sc5bspi + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 10) + + + sc5bspj + Bully's Star Prize (PR3012) (Bellfruit) (Scorpion 5) (set 1) + + + sc5bspk + Bully's Star Prize (PR3012) (Bellfruit) (Scorpion 5) (set 2) + + + sc5bspl + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 13) + + + sc5bspm + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 14) + + + sc5bspn + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 15) + + + sc5bspo + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 16) + + + sc5bspp + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 17) + + + sc5bspq + Bully's Star Prize (PR3010) (Bellfruit) (Scorpion 5) (set 18) + + + sc5btiab + Bullseye Three In A Bed (Bellfruit) (Scorpion 5) + + + sc5btrip + Bullseye Triple (Bellfruit) (Scorpion 5) (set 1) + + + sc5btripa + Bullseye Triple (Bellfruit) (Scorpion 5) (set 2) + + + sc5btripb + Bullseye Triple (Bellfruit) (Scorpion 5) (set 3) + + + sc5btripc + Bullseye Triple (Bellfruit) (Scorpion 5) (set 4) + + + sc5bucc + Buccaneers (Bellfruit) (Scorpion 5) (set 1) + + + sc5bucca + Buccaneers (Bellfruit) (Scorpion 5) (set 2) + + + sc5buccb + Buccaneers (Bellfruit) (Scorpion 5) (set 3) + + + sc5buccc + Buccaneers (Bellfruit) (Scorpion 5) (set 4) + + + sc5buccd + Buccaneers (Bellfruit) (Scorpion 5) (set 5) + + + sc5bucce + Buccaneers (Bellfruit) (Scorpion 5) (set 6) + + + sc5bull + Bullseye (Bellfruit) (Scorpion 5) (set 1) + + + sc5bull5 + Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 1) + + + sc5bull5a + Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 2) + + + sc5bull5b + Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 3) + + + sc5bull5c + Bullseye 5 Reels (Bellfruit) (Scorpion 5) (set 4) + + + sc5bulla + Bullseye (Bellfruit) (Scorpion 5) (set 2) + + + sc5bullb + Bullseye (Bellfruit) (Scorpion 5) (set 3) + + + sc5bullc + Bullseye (Bellfruit) (Scorpion 5) (set 4) + + + sc5bunny + Bunny Money (Mazooma) (Scorpion 5) (set 1) + + + sc5bunnya + Bunny Money (Mazooma) (Scorpion 5) (set 2) + + + sc5butch + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 1) + + + sc5butcha + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 2) + + + sc5butchb + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 3) + + + sc5butchc + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 4) + + + sc5butchd + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 5) + + + sc5butche + Butch Cashidy & The Sundance Quid (Bellfruit) (Scorpion 5) (set 6) + + + sc5cabin + Cabin Fever (Mazooma) (Scorpion 5) (set 1) + + + sc5cabina + Cabin Fever (Mazooma) (Scorpion 5) (set 2) + + + sc5cabinb + Cabin Fever (Mazooma) (Scorpion 5) (set 3) + + + sc5cabinc + Cabin Fever (Mazooma) (Scorpion 5) (set 4) + + + sc5cari + Caribbean Cash (Qps) (Scorpion 5) (set 1) + + + sc5caria + Caribbean Cash (Qps) (Scorpion 5) (set 2) + + + sc5carib + Caribbean Cash (Qps) (Scorpion 5) (set 3) + + + sc5caric + Caribbean Cash (Qps) (Scorpion 5) (set 4) + + + sc5carid + Caribbean Cash (Qps) (Scorpion 5) (set 5) + + + sc5carie + Caribbean Cash (Qps) (Scorpion 5) (set 6) + + + sc5carif + Caribbean Cash (Qps) (Scorpion 5) (set 7) + + + sc5carig + Caribbean Cash (Qps) (Scorpion 5) (set 8) + + + sc5casxt + Casino Xtravaganza (Mazooma) (Scorpion 5) (set 1) + + + sc5casxta + Casino Xtravaganza (Mazooma) (Scorpion 5) (set 2) + + + sc5cbar7 + Classic Bar 7 (Mazooma) (Scorpion 5) (set 1) + + + sc5cbar7a + Classic Bar 7 (Mazooma) (Scorpion 5) (set 2) + + + sc5cblas + Cash Blast (Bellfruit) (Scorpion 5) (set 1) + + + sc5cblasa + Cash Blast (Bellfruit) (Scorpion 5) (set 2) + + + sc5cbrun + Cannonball Run (Bellfruit) (Scorpion 5) (set 1) + + + sc5cbruna + Cannonball Run (Bellfruit) (Scorpion 5) (set 2) + + + sc5celeb + I'm A Celebrity (Bellfruit) (Scorpion 5) (set 1) + + + sc5celeba + I'm A Celebrity (Bellfruit) (Scorpion 5) (set 2) + + + sc5celebb + I'm A Celebrity (Bellfruit) (Scorpion 5) (set 3) + + + sc5celebc + I'm A Celebrity (Bellfruit) (Scorpion 5) (set 4) + + + sc5celebd + I'm A Celebrity (Bellfruit) (Scorpion 5) (set 5) + + + sc5cfact + Cash Factor (Bellfruit) (Scorpion 5) (set 1) + + + sc5cfacta + Cash Factor (Bellfruit) (Scorpion 5) (set 2) + + + sc5cfcp + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 1) + + + sc5cfcpa + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 2) + + + sc5cfcpb + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 3) + + + sc5cfcpc + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 4) + + + sc5cfcpd + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 5) + + + sc5cfcpe + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 6) + + + sc5cfcpf + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 7) + + + sc5cfcpg + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 8) + + + sc5cfcph + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 9) + + + sc5cfcpi + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 10) + + + sc5cfcpj + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 11) + + + sc5cfcpk + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 12) + + + sc5cfcpl + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 13) + + + sc5cfcpm + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 14) + + + sc5cfcpn + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 15) + + + sc5cfcpo + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 16) + + + sc5cfcpp + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 17) + + + sc5cfcpq + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 18) + + + sc5cfcpr + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 19) + + + sc5cfcps + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 20) + + + sc5cfcpt + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 21) + + + sc5cfcpu + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 22) + + + sc5cfcpv + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 23) + + + sc5cfcpw + Crazy Fruits Community Party (Bellfruit) (Scorpion 5) (set 24) + + + sc5cfnc + Crazy Fruit & Nutcase (Bellfruit) (Scorpion 5) (set 1) + + + sc5cfnca + Crazy Fruit & Nutcase (Bellfruit) (Scorpion 5) (set 2) + + + sc5cfpt + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 1) + + + sc5cfpta + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 2) + + + sc5cfptb + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 3) + + + sc5cfptc + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 4) + + + sc5cfptd + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 5) + + + sc5cfpte + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 6) + + + sc5cfptf + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 7) + + + sc5cfptg + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 8) + + + sc5cfpth + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 9) + + + sc5cfpti + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 10) + + + sc5cfptj + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 11) + + + sc5cfptk + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 12) + + + sc5cfptl + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 13) + + + sc5cfptm + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 14) + + + sc5cfptn + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 15) + + + sc5cfpto + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 16) + + + sc5cfptp + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 17) + + + sc5cfptq + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 18) + + + sc5cfptr + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 19) + + + sc5cfpts + Crazy Fruits Casino Party Time (Bellfruit) (Scorpion 5) (set 20) + + + sc5chain + Chain Reaction (Bellfruit) (Scorpion 5) (set 1) + + + sc5chaina + Chain Reaction (Bellfruit) (Scorpion 5) (set 2) + + + sc5chainb + Chain Reaction (Bellfruit) (Scorpion 5) (set 3) + + + sc5chainc + Chain Reaction (Bellfruit) (Scorpion 5) (set 4) + + + sc5chaind + Chain Reaction (Bellfruit) (Scorpion 5) (set 5) + + + sc5chaine + Chain Reaction (Bellfruit) (Scorpion 5) (set 6) + + + sc5chavi + Chav It (Bellfruit) (Scorpion 5) (set 1) + + + sc5chavia + Chav It (Bellfruit) (Scorpion 5) (set 2) + + + sc5chavib + Chav It (Bellfruit) (Scorpion 5) (set 3) + + + sc5chavic + Chav It (Bellfruit) (Scorpion 5) (set 4) + + + sc5chavid + Chav It (Bellfruit) (Scorpion 5) (set 5) + + + sc5chavie + Chav It (Bellfruit) (Scorpion 5) (set 6) + + + sc5chavy + Chavy Chase (Mazooma) (Scorpion 5) (set 1) + + + sc5chavya + Chavy Chase (Mazooma) (Scorpion 5) (set 2) + + + sc5chavyb + Chavy Chase (Mazooma) (Scorpion 5) (set 3) + + + sc5chavyc + Chavy Chase (Mazooma) (Scorpion 5) (set 4) + + + sc5chopc + Chop 'n' Change (Mazooma) (Scorpion 5) (set 1) + + + sc5chopca + Chop 'n' Change (Mazooma) (Scorpion 5) (set 2) + + + sc5cj + Cool Jewels (Bellfruit) (Scorpion 5) (set 1) + + + sc5cja + Cool Jewels (Bellfruit) (Scorpion 5) (set 2) + + + sc5cjb + Cool Jewels (Bellfruit) (Scorpion 5) (set 3) + + + sc5cjc + Cool Jewels (Bellfruit) (Scorpion 5) (set 4) + + + sc5cjd + Cool Jewels (Bellfruit) (Scorpion 5) (set 5) + + + sc5cje + Cool Jewels (Bellfruit) (Scorpion 5) (set 6) + + + sc5cjqps + Crown Jewels (Z055) (QPS) (Scorpion 5) (set 1) + + + sc5cjqpsa + Crown Jewels (Z055) (QPS) (Scorpion 5) (set 2) + + + sc5cjqpsb + Crown Jewels (Z055) (QPS) (Scorpion 5) (set 3) + + + sc5cjqpsc + Crown Jewels (Z055) (QPS) (Scorpion 5) (set 4) + + + sc5cknig + Crazy Knights (Bellfruit) (Scorpion 5) (set 1) + + + sc5ckniga + Crazy Knights (Bellfruit) (Scorpion 5) (set 2) + + + sc5cknigb + Crazy Knights (Bellfruit) (Scorpion 5) (set 3) + + + sc5cknigc + Crazy Knights (Bellfruit) (Scorpion 5) (set 4) + + + sc5clcas + Cluedo Casino (Mazooma) (Scorpion 5) (set 1) + + + sc5clcasa + Cluedo Casino (Mazooma) (Scorpion 5) (set 2) + + + sc5clnot + Cluedo Notorious (Bellfruit) (Scorpion 5) (set 1) + + + sc5clnota + Cluedo Notorious (Bellfruit) (Scorpion 5) (set 2) + + + sc5clnotb + Cluedo Notorious (Bellfruit) (Scorpion 5) (set 3) + + + sc5clnotc + Cluedo Notorious (Bellfruit) (Scorpion 5) (set 4) + + + sc5clnotd + Cluedo Notorious (Bellfruit) (Scorpion 5) (set 5) + + + sc5clnote + Cluedo Notorious (Bellfruit) (Scorpion 5) (set 6) + + + sc5clnotf + Cluedo Notorious (Bellfruit) (Scorpion 5) (set 7) + + + sc5clnotg + Cluedo Notorious (Bellfruit) (Scorpion 5) (set 8) + + + sc5clown + Clown Around (Bellfruit) (Scorpion 5) (set 1) + + + sc5clowna + Clown Around (Bellfruit) (Scorpion 5) (set 2) + + + sc5clownb + Clown Around (Bellfruit) (Scorpion 5) (set 3) + + + sc5clownc + Clown Around (Bellfruit) (Scorpion 5) (set 4) + + + sc5clownd + Clown Around (Bellfruit) (Scorpion 5) (set 5) + + + sc5clowne + Clown Around (Bellfruit) (Scorpion 5) (set 6) + + + sc5clu70 + Cluedo 70 (Qps) (Scorpion 5) (set 1) + + + sc5clu70a + Cluedo 70 (Qps) (Scorpion 5) (set 2) + + + sc5clue + Cluedo (Mazooma) (Scorpion 5) (set 1) + + + sc5cluea + Cluedo (Mazooma) (Scorpion 5) (set 2) + + + sc5clueb + Cluedo (Mazooma) (Scorpion 5) (set 3) + + + sc5cluec + Cluedo (Mazooma) (Scorpion 5) (set 4) + + + sc5clus + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 1) + + + sc5clusa + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 2) + + + sc5clusb + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 3) + + + sc5clusc + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 4) + + + sc5clusd + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 5) + + + sc5cluse + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 6) + + + sc5clusf + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 7) + + + sc5clusg + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 8) + + + sc5clush + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 9) + + + sc5clusi + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 10) + + + sc5clusj + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 11) + + + sc5clusk + Cluedo The Usual Suspects (Mazooma) (Scorpion 5) (set 12) + + + sc5cmani + Colour Mania (Bellfruit) (Scorpion 5) (set 1) + + + sc5cmania + Colour Mania (Bellfruit) (Scorpion 5) (set 2) + + + sc5cmanib + Colour Mania (Bellfruit) (Scorpion 5) (set 3) + + + sc5cmanic + Colour Mania (Bellfruit) (Scorpion 5) (set 4) + + + sc5cmcob + Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 1) + + + sc5cmcoba + Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 2) + + + sc5cmcobb + Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 3) + + + sc5cmcobc + Monte Carlo Or Bust Club (Qps) (Scorpion 5) (set 4) + + + sc5colmo + Colour Of Money (Bellfruit) (Scorpion 5) (set 1) + + + sc5colmoa + Colour Of Money (Bellfruit) (Scorpion 5) (set 2) + + + sc5colmob + Colour Of Money (Bellfruit) (Scorpion 5) (set 3) + + + sc5colmoc + Colour Of Money (Bellfruit) (Scorpion 5) (set 4) + + + sc5copsr + Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 1) + + + sc5copsra + Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 2) + + + sc5copsrb + Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 3) + + + sc5copsrc + Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 4) + + + sc5copsrd + Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 5) + + + sc5copsre + Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 6) + + + sc5copsrf + Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 7) + + + sc5copsrg + Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 8) + + + sc5copsrh + Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 9) + + + sc5copsri + Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 10) + + + sc5coro + Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 1) + + + sc5coro0 + Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 4) + + + sc5coro1 + Coronation Street Triple Bingo (V013) (Mazooma) (Scorpion 5) (set 2) + + + sc5coroa + Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 1) + + + sc5corob + Coronation Street Triple Arcade (V061) (Mazooma) (Scorpion 5) (set 1) + + + sc5coroc + Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 1) + + + sc5corod + Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 2) + + + sc5coroe + Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 1) + + + sc5corof + Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 2) + + + sc5corog + Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 3) + + + sc5coroh + Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 4) + + + sc5coroi + Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 3) + + + sc5coroj + Coronation Street Triple Arcade (V063) (Mazooma) (Scorpion 5) (set 1) + + + sc5corok + Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 2) + + + sc5corol + Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 3) + + + sc5corom + Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 2) + + + sc5coron + Coronation Street Triple Arcade (V061) (Mazooma) (Scorpion 5) (set 2) + + + sc5coroo + Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 4) + + + sc5corop + Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 5) + + + sc5coroq + Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 5) + + + sc5coror + Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 6) + + + sc5coros + Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 7) + + + sc5corot + Coronation Street Single (PR2252) (Mazooma) (Scorpion 5) (set 8) + + + sc5corou + Coronation Street Triple Bingo (V012) (Mazooma) (Scorpion 5) (set 6) + + + sc5corov + Coronation Street Triple Arcade (V063) (Mazooma) (Scorpion 5) (set 2) + + + sc5corow + Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 4) + + + sc5corox + Coronation Street Triple (PR2249) (Mazooma) (Scorpion 5) (set 5) + + + sc5coroy + Coronation Street (PR2252) (Mazooma) (Scorpion 5) (set 3) + + + sc5coroz + Coronation Street Triple Bingo (V013) (Mazooma) (Scorpion 5) (set 1) + + + sc5corst + Coronation Street (Bellfruit) (Scorpion 5) (set 1) + + + sc5corsta + Coronation Street (Bellfruit) (Scorpion 5) (set 2) + + + sc5corstb + Coronation Street (Bellfruit) (Scorpion 5) (set 3) + + + sc5corstc + Coronation Street (Bellfruit) (Scorpion 5) (set 4) + + + sc5count + Countdown (Bellfruit) (Scorpion 5) (set 1) + + + sc5counta + Countdown (Bellfruit) (Scorpion 5) (set 2) + + + sc5cpays + Crazy Pays (Bellfruit) (Scorpion 5) (set 1) + + + sc5cpaysa + Crazy Pays (Bellfruit) (Scorpion 5) (set 2) + + + sc5cpen1 + Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 1) + + + sc5cpen1a + Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 2) + + + sc5cpen1b + Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 3) + + + sc5cpen1c + Public Enemy No1 Club (Bellfruit) (Scorpion 5) (set 4) + + + sc5craid + Cash Raider (Mazooma) (Scorpion 5) (set 1) + + + sc5craida + Cash Raider (Mazooma) (Scorpion 5) (set 2) + + + sc5crcpt + Cops 'n' Robbers Community Party (Bellfruit) (Scorpion 5) (set 1) + + + sc5crcpta + Cops 'n' Robbers Community Party (Bellfruit) (Scorpion 5) (set 2) + + + sc5crcptb + Cops 'n' Robbers Community Party (Bellfruit) (Scorpion 5) (set 3) + + + sc5crnjw + Crown Jewels (PR1608) (Bellfruit) (Scorpion 5) (set 1) + + + sc5crnjwa + Crown Jewels (PR1608) (Bellfruit) (Scorpion 5) (set 2) + + + sc5crnjwb + Crown Jewels (PR1608) (Bellfruit) (Scorpion 5) (set 3) + + + sc5crotr + Cops 'n' Robbers On The Run (Bellfruit) (Scorpion 5) (set 1) + + + sc5crotra + Cops 'n' Robbers On The Run (Bellfruit) (Scorpion 5) (set 2) + + + sc5crsc + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 1) + + + sc5crsca + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 2) + + + sc5crscb + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 3) + + + sc5crscc + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 4) + + + sc5crscd + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 5) + + + sc5crsce + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 6) + + + sc5crscf + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 7) + + + sc5crscg + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 8) + + + sc5crsch + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 9) + + + sc5crsci + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 10) + + + sc5crscj + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 11) + + + sc5crsck + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 12) + + + sc5crscl + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 13) + + + sc5crscm + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 14) + + + sc5crscn + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 15) + + + sc5crsco + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 16) + + + sc5crscp + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 17) + + + sc5crscq + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 18) + + + sc5crscr + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 19) + + + sc5crscs + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 20) + + + sc5crsct + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 21) + + + sc5crscu + Cops 'n' Robbers Safe Cracker (Bellfruit) (Scorpion 5) (set 22) + + + sc5crsgc + Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 1) + + + sc5crsgca + Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 2) + + + sc5crsgcb + Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 3) + + + sc5crsgcc + Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit) (Scorpion 5) (set 4) + + + sc5crsgr + Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 1) + + + sc5crsgra + Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 2) + + + sc5crsgrb + Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 3) + + + sc5crsgrc + Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 4) + + + sc5crsgrd + Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 5) + + + sc5crsgre + Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 6) + + + sc5crsgrf + Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 7) + + + sc5crsgrg + Cops 'n' Robbers Smash 'n' Grab (Bellfruit) (Scorpion 5) (set 8) + + + sc5ctit + Cash Of The Titans (Bellfruit) (Scorpion 5) (set 1) + + + sc5ctita + Cash Of The Titans (Bellfruit) (Scorpion 5) (set 2) + + + sc5ctl + Cop The Lot (Bellfruit) (Scorpion 5) (set 1) + + + sc5ctla + Cop The Lot (Bellfruit) (Scorpion 5) (set 2) + + + sc5ctlb + Cop The Lot (Bellfruit) (Scorpion 5) (set 3) + + + sc5ctlc + Cop The Lot (Bellfruit) (Scorpion 5) (set 4) + + + sc5cvega + Cash Vegas (Bellfruit) (Scorpion 5) (set 1) + + + sc5cvegaa + Cash Vegas (Bellfruit) (Scorpion 5) (set 2) + + + sc5czfr + Fruit Crazy Triple / Crazy Keys (QPS) (Scorpion 5) + + + sc5ddbbc + Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 1) + + + sc5ddbbca + Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 2) + + + sc5ddbbcb + Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 3) + + + sc5ddbbcc + Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 4) + + + sc5ddbbcd + Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 5) + + + sc5ddbbce + Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 6) + + + sc5ddbbcf + Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 7) + + + sc5ddbbcg + Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 8) + + + sc5ddosh + Doctor Dosh (Bellfruit) (Scorpion 5) (set 1) + + + sc5ddosha + Doctor Dosh (Bellfruit) (Scorpion 5) (set 2) + + + sc5ddply + Deal Or No Deal Player's Choice (Bellfruit) (Scorpion 5) (set 1) + + + sc5ddplya + Deal Or No Deal Player's Choice (Bellfruit) (Scorpion 5) (set 2) + + + sc5ddptg + Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 1) + + + sc5ddptga + Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 2) + + + sc5ddptgb + Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 3) + + + sc5ddptgc + Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 4) + + + sc5devil + Devil Of A Deal (Mazooma) (Scorpion 5) (set 1) + + + sc5devila + Devil Of A Deal (Mazooma) (Scorpion 5) (set 2) + + + sc5devilb + Devil Of A Deal (Mazooma) (Scorpion 5) (set 3) + + + sc5devilc + Devil Of A Deal (Mazooma) (Scorpion 5) (set 4) + + + sc5dhh + Dough Ho Ho (Bellfruit) (Scorpion 5) (set 1) + + + sc5dhha + Dough Ho Ho (Bellfruit) (Scorpion 5) (set 2) + + + sc5dhhb + Dough Ho Ho (Bellfruit) (Scorpion 5) (set 3) + + + sc5dhhc + Dough Ho Ho (Bellfruit) (Scorpion 5) (set 4) + + + sc5dhhd + Dough Ho Ho (Bellfruit) (Scorpion 5) (set 5) + + + sc5dhhe + Dough Ho Ho (Bellfruit) (Scorpion 5) (set 6) + + + sc5dhhf + Dough Ho Ho (Bellfruit) (Scorpion 5) (set 7) + + + sc5dhhg + Dough Ho Ho (Bellfruit) (Scorpion 5) (set 8) + + + sc5dmine + Diamond Mine (Bellfruit) (Scorpion 5) (set 1) + + + sc5dminea + Diamond Mine (Bellfruit) (Scorpion 5) (set 2) + + + sc5dmineb + Diamond Mine (Bellfruit) (Scorpion 5) (set 3) + + + sc5dminec + Diamond Mine (Bellfruit) (Scorpion 5) (set 4) + + + sc5dmined + Diamond Mine (Bellfruit) (Scorpion 5) (set 5) + + + sc5dminee + Diamond Mine (Bellfruit) (Scorpion 5) (set 6) + + + sc5dminef + Diamond Mine (Bellfruit) (Scorpion 5) (set 7) + + + sc5dmineg + Diamond Mine (Bellfruit) (Scorpion 5) (set 8) + + + sc5dmineh + Diamond Mine (Bellfruit) (Scorpion 5) (set 9) + + + sc5dminei + Diamond Mine (Bellfruit) (Scorpion 5) (set 10) + + + sc5dminej + Diamond Mine (Bellfruit) (Scorpion 5) (set 11) + + + sc5dminek + Diamond Mine (Bellfruit) (Scorpion 5) (set 12) + + + sc5dminel + Diamond Mine (Bellfruit) (Scorpion 5) (set 13) + + + sc5dnd + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1) + + + sc5dnda + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndb + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndbb + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndbba + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndbbb + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndbbc + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndbbd + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndbbe + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndbbf + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndbbg + Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndbc + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndbca + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndbcb + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndbcc + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndbcd + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndbce + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndbcf + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndbcg + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndbch + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndbci + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndbcj + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndbck + Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndbd + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndbda + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndbdb + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndbdc + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndbdd + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndbde + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndbdf + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndbdg + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndbdh + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndbdi + Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndbe + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndbea + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndbeb + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndbec + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndbed + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndbee + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndbef + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndbeg + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndbeh + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndbei + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndbej + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndbek + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndbel + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndbem + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndben + Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndbl + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndbla + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndblb + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndblc + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndbld + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndble + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndblf + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndblg + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndblh + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndbli + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndblj + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndblk + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndbll + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndblm + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndbln + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndblo + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 16) + + + sc5dndblp + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 17) + + + sc5dndblq + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 18) + + + sc5dndblr + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 19) + + + sc5dndbls + Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 20) + + + sc5dndbo + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndboa + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndbob + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndboc + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndbod + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndboe + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndbof + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndbog + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndboh + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndboi + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndboj + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndbok + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndbq + Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 1) + + + sc5dndbqa + Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 2) + + + sc5dndbqb + Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 3) + + + sc5dndbqc + Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 4) + + + sc5dndbqd + Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 5) + + + sc5dndbqe + Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 6) + + + sc5dndbr + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndbra + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndbrb + Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndbrc + Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndbrd + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndbre + Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndbrf + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndbrg + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndbrh + Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndbri + Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndbrj + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndbrk + Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndbrl + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndbrm + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndbrn + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndbro + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndbrp + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndbrq + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndbrr + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndbrs + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndbrt + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndbru + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 16) + + + sc5dndbrv + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 17) + + + sc5dndbrw + Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 18) + + + sc5dndc + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndc2 + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndc2a + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndc2b + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndc2c + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndc2d + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndc2e + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndc2f + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndc2g + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndc2h + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndc2i + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndc2j + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndc2k + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndc2l + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndc2m + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndc2n + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndc2o + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 16) + + + sc5dndc2p + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 17) + + + sc5dndc2q + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 18) + + + sc5dndc2r + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 19) + + + sc5dndc2s + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 20) + + + sc5dndc2t + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 21) + + + sc5dndc2u + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 22) + + + sc5dndc2v + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 23) + + + sc5dndc2w + Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 24) + + + sc5dndc3 + Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndc3a + Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndc3b + Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndc3c + Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndca + Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndcaa + Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndcab + Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndcac + Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndcad + Deal Or No Deal The Crazy Chair Arcade (PR3362) (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndcae + Deal Or No Deal The Crazy Chair Arcade (PR3362) (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndcb + Deal Or No Deal Club Beat The Banker (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndcba + Deal Or No Deal Club Beat The Banker (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndcc + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndcca + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndccb + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndccc + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndccd + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndcce + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndccf + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndccg + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndcch + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndcci + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndccj + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndcck + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndccl + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndccm + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndccn + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndcco + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 16) + + + sc5dndccp + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 17) + + + sc5dndccq + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 18) + + + sc5dndccr + Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 19) + + + sc5dndcl + Deal Or No Deal Club (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndcla + Deal Or No Deal Club (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndcr + Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndcra + Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndcrb + Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndcrc + Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndcrd + Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndcre + Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndcs + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndcsa + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndcsb + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndcsc + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndcsd + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndcse + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndcsf + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndcsg + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndcsh + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndcsi + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndcsj + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndcsk + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndcsl + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndcsm + Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndd + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5) + + + sc5dnddd + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1) + + + sc5dnddda + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndddb + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndddc + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndddd + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5) + + + sc5dnddde + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndddf + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndddg + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndddh + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndddi + Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndde + Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 1) + + + sc5dnddea + Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 2) + + + sc5dnddeb + Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 3) + + + sc5dnddec + Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndded + Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 5) + + + sc5dnddee + Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 6) + + + sc5dnddef + Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 7) + + + sc5dnddeg + Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 8) + + + sc5dnddf + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 1) + + + sc5dnddfa + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 2) + + + sc5dnddfb + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 3) + + + sc5dnddfc + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 4) + + + sc5dnddfd + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 5) + + + sc5dnddfe + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 6) + + + sc5dnddff + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 7) + + + sc5dnddfg + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 8) + + + sc5dnddfh + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 9) + + + sc5dnddfi + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 10) + + + sc5dnddfj + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 11) + + + sc5dnddfk + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 12) + + + sc5dnddfl + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 13) + + + sc5dnddfm + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 14) + + + sc5dnddfn + Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 15) + + + sc5dnddi + Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 1) + + + sc5dnddia + Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 2) + + + sc5dnddib + Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 3) + + + sc5dnddic + Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 4) + + + sc5dnddo + Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 1) + + + sc5dnddoa + Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 2) + + + sc5dnddob + Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 3) + + + sc5dnddoc + Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 4) + + + sc5dnddt + Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 1) + + + sc5dnddta + Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 2) + + + sc5dnddtb + Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 3) + + + sc5dnddtc + Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 4) + + + sc5dnddtd + Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 5) + + + sc5dnddte + Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 6) + + + sc5dnddtf + Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 7) + + + sc5dnddw + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 1) + + + sc5dnddwa + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 2) + + + sc5dnddwb + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 3) + + + sc5dnddwc + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 4) + + + sc5dnddwd + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 5) + + + sc5dnddwe + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 6) + + + sc5dnddwf + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 7) + + + sc5dnddwg + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 8) + + + sc5dnddwh + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 9) + + + sc5dnddwi + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 10) + + + sc5dnddwj + Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 11) + + + sc5dnde + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndf + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndfl + Deal Or No Deal Feeling Lucky (PR3432) (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndfla + Deal Or No Deal Feeling Lucky (PR3432) (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndflb + Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndflc + Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndfld + Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndfle + Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndg + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndgl + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndgla + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndglb + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndglc + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndgld + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndgle + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndglf + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndglg + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndglh + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndgli + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndglj + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndglk + Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndgo + Deal Or No Deal Game On (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndgoa + Deal Or No Deal Game On (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndh + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndhf + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndhfa + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndhfb + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndhfc + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndhfd + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndhfe + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndhff + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndhfg + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndhfh + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndhfi + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndhfj + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndhfk + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndhfl + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndhfm + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndhfn + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndhfo + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 16) + + + sc5dndhfp + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 17) + + + sc5dndhfq + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 18) + + + sc5dndhfr + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 19) + + + sc5dndhfs + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 20) + + + sc5dndhft + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 21) + + + sc5dndhfu + Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 22) + + + sc5dndi + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndj + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndk + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndl + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndld + Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndlda + Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndldb + Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndldc + Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndlp + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndlpa + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndlpb + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndlpc + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndlpd + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndlpe + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndlpf + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndlpg + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndlph + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndlpi + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndlpj + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndlpk + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndlpl + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndlpm + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndlpn + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndlpo + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 16) + + + sc5dndlpp + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 17) + + + sc5dndlpq + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 18) + + + sc5dndlpr + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 19) + + + sc5dndlps + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 20) + + + sc5dndlpt + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 21) + + + sc5dndlpu + Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 22) + + + sc5dndm + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndmb + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndmba + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndmbb + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndmbc + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndmbd + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndmbe + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndmbf + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndmbg + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndmbh + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndmbi + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndmbj + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndmbk + Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndmd + Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndmda + Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndmdb + Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndmdc + Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndmdd + Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndmde + Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndmdf + Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndmdg + Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndmdh + Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndmdi + Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndmdj + Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndmdk + Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndn + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndo + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 16) + + + sc5dndp + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 17) + + + sc5dndpa + Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndpaa + Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndpab + Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndpac + Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndpc + Deal Or No Deal The Players Choice (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndpca + Deal Or No Deal The Players Choice (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndpd + Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndpda + Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndpdb + Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndpdc + Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndpdd + Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndpde + Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndpg + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndpga + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndpgb + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndpgc + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndpgd + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndpge + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndpgf + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndpgg + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndpgh + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndpgi + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndpgj + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndpgk + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndpgl + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndpgm + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndpgn + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndpgo + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 16) + + + sc5dndpgp + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 17) + + + sc5dndpgq + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 18) + + + sc5dndpgr + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 19) + + + sc5dndpgs + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 20) + + + sc5dndpgt + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 21) + + + sc5dndpgu + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 22) + + + sc5dndpgv + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 23) + + + sc5dndpgw + Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 24) + + + sc5dndpl + Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndpla + Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndplb + Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndplc + Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndq + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 18) + + + sc5dndr + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 19) + + + sc5dndra + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndraa + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndrab + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndrac + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndrad + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndrae + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndraf + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndrag + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndrah + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndrai + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndraj + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndrak + Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndrr + Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndrra + Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndrrb + Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndrrc + Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndrrd + Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndrre + Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndrt + Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndrta + Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndrtb + Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndrtc + Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndrtd + Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndrte + Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 6) + + + sc5dnds + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 20) + + + sc5dndsi + Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndsia + Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndsib + Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndsic + Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndsid + Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndt + Deal Or No Deal (Bellfruit) (Scorpion 5) (set 21) + + + sc5dndtb + Deal Or No Deal Think Big (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndtba + Deal Or No Deal Think Big (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndtp + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndtpa + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndtpb + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndtpc + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndtpd + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndtpe + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndtpf + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndtpg + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndtph + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndtpi + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndtpj + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndtpk + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndtpl + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndtpm + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndtpn + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndtpo + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 16) + + + sc5dndtpp + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 17) + + + sc5dndtpq + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 18) + + + sc5dndtpr + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 19) + + + sc5dndtps + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 20) + + + sc5dndtpt + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 21) + + + sc5dndtpu + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 22) + + + sc5dndtpv + Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 23) + + + sc5dndtr + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndtra + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndtrb + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndtrc + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndtrd + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndtre + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndtrf + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndtrg + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndtrh + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndtri + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndtrj + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndtrk + Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndwb + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndwba + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndwbb + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndwbc + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndwbd + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndwbe + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndwbf + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndwbg + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndwbh + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndwbi + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndwbj + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndwbk + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndwbl + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndwbm + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndwbn + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndwbo + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 16) + + + sc5dndwbp + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 17) + + + sc5dndwbq + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 18) + + + sc5dndwbr + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 19) + + + sc5dndwbs + Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 20) + + + sc5dndwc + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndwca + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndwcb + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndwcc + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndwcd + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndwce + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndwcf + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndwcg + Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndwi + Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndwia + Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndwib + Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndwic + Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndwid + Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndwie + Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndwif + Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndwig + Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndww + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndwwa + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndwwb + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndwwc + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndwwd + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndwwe + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndwwf + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndwwg + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndwwh + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 9) + + + sc5dndwwi + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 10) + + + sc5dndwwj + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 11) + + + sc5dndwwk + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 12) + + + sc5dndwwl + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndwwm + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 14) + + + sc5dndwwn + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 15) + + + sc5dndwwo + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 16) + + + sc5dndwwp + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 17) + + + sc5dndwwq + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 18) + + + sc5dndwwr + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 19) + + + sc5dndwws + Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 20) + + + sc5dndys + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 1) + + + sc5dndysa + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 2) + + + sc5dndysb + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 3) + + + sc5dndysc + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 4) + + + sc5dndysd + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 5) + + + sc5dndyse + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 6) + + + sc5dndysf + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 7) + + + sc5dndysg + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 8) + + + sc5dndysh + Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 9) + + + sc5dough + Dough Selecta (Bellfruit) (Scorpion 5) (set 1) + + + sc5dougha + Dough Selecta (Bellfruit) (Scorpion 5) (set 2) + + + sc5dracp + Drac Pack (Bellfruit) (Scorpion 5) (set 1) + + + sc5dracpa + Drac Pack (Bellfruit) (Scorpion 5) (set 2) + + + sc5ducks + Ducks Of Hazzard (Mazooma) (Scorpion 5) + + + sc5emmer + Emmerdale (Mazooma) (Scorpion 5) (set 1) + + + sc5emmera + Emmerdale (Mazooma) (Scorpion 5) (set 2) + + + sc5fast + Fast Cash (Qps) (Scorpion 5) + + + sc5fbspn + Fat Boy Spin (Bellfruit) (Scorpion 5) (set 1) + + + sc5fbspna + Fat Boy Spin (Bellfruit) (Scorpion 5) (set 2) + + + sc5fdice + Fire 'n' Dice (Bellfruit) (Scorpion 5) (set 1) + + + sc5fdicea + Fire 'n' Dice (Bellfruit) (Scorpion 5) (set 2) + + + sc5fgbh + Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 1) + + + sc5fgbha + Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 2) + + + sc5fgbhb + Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 3) + + + sc5fgbhc + Family Guy Booze Hound (Bellfruit) (Scorpion 5) (set 4) + + + sc5fggp + Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 1) + + + sc5fggpa + Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 2) + + + sc5fggpb + Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 3) + + + sc5fggpc + Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 4) + + + sc5fggpd + Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 5) + + + sc5fggpe + Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 6) + + + sc5fggpf + Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 7) + + + sc5fggpg + Family Guy Griffin Plumbing (Bellfruit) (Scorpion 5) (set 8) + + + sc5fguy + Family Guy (Bellfruit) (Scorpion 5) (set 1) + + + sc5fguya + Family Guy (Bellfruit) (Scorpion 5) (set 2) + + + sc5fguyb + Family Guy (Bellfruit) (Scorpion 5) (set 3) + + + sc5fguyc + Family Guy (Bellfruit) (Scorpion 5) (set 4) + + + sc5fguyd + Family Guy (Bellfruit) (Scorpion 5) (set 5) + + + sc5fguye + Family Guy (Bellfruit) (Scorpion 5) (set 6) + + + sc5fguyf + Family Guy (Bellfruit) (Scorpion 5) (set 7) + + + sc5fguyg + Family Guy (Bellfruit) (Scorpion 5) (set 8) + + + sc5fires + Firestarter (Bellfruit) (Scorpion 5) (set 1) + + + sc5firesa + Firestarter (Bellfruit) (Scorpion 5) (set 2) + + + sc5firesb + Firestarter (Bellfruit) (Scorpion 5) (set 3) + + + sc5firesc + Firestarter (Bellfruit) (Scorpion 5) (set 4) + + + sc5floop + Fruit Loops (Mazooma) (Scorpion 5) (set 1) + + + sc5floopa + Fruit Loops (Mazooma) (Scorpion 5) (set 2) + + + sc5fmj + Full Metal Jackpot (Mazooma) (Scorpion 5) (set 1) + + + sc5fmja + Full Metal Jackpot (Mazooma) (Scorpion 5) (set 2) + + + sc5fnclb + Fight Night Club (Bellfruit) (Scorpion 5) (set 1) + + + sc5fnclba + Fight Night Club (Bellfruit) (Scorpion 5) (set 2) + + + sc5fnclbb + Fight Night Club (Bellfruit) (Scorpion 5) (set 3) + + + sc5fnclbc + Fight Night Club (Bellfruit) (Scorpion 5) (set 4) + + + sc5fnclbd + Fight Night Club (Bellfruit) (Scorpion 5) (set 5) + + + sc5fnclbe + Fight Night Club (Bellfruit) (Scorpion 5) (set 6) + + + sc5frcrz + Fruit Crazy (Mazooma) (Scorpion 5) (set 1) + + + sc5frcrza + Fruit Crazy (Mazooma) (Scorpion 5) (set 2) + + + sc5ftcas + Flash The Cash (Mazooma) (Scorpion 5) (set 1) + + + sc5ftcasa + Flash The Cash (Mazooma) (Scorpion 5) (set 2) + + + sc5gball + Golden Balls (Bellfruit) (Scorpion 5) (set 1) + + + sc5gballa + Golden Balls (Bellfruit) (Scorpion 5) (set 2) + + + sc5gballb + Golden Balls (Bellfruit) (Scorpion 5) (set 3) + + + sc5gballc + Golden Balls (Bellfruit) (Scorpion 5) (set 4) + + + sc5gd + Gold Digger (Bellfruit) (Scorpion 5) (set 1) + + + sc5gda + Gold Digger (Bellfruit) (Scorpion 5) (set 2) + + + sc5gdclb + Gold Digger Club (Bellfruit) (Scorpion 5) (set 1) + + + sc5gdclba + Gold Digger Club (Bellfruit) (Scorpion 5) (set 2) + + + sc5gdclbb + Gold Digger Club (Bellfruit) (Scorpion 5) (set 3) + + + sc5gdclbc + Gold Digger Club (Bellfruit) (Scorpion 5) (set 4) + + + sc5gdclbd + Gold Digger Club (Bellfruit) (Scorpion 5) (set 5) + + + sc5gdclbe + Gold Digger Club (Bellfruit) (Scorpion 5) (set 6) + + + sc5gdclbf + Gold Digger Club (Bellfruit) (Scorpion 5) (set 7) + + + sc5gdclbg + Gold Digger Club (Bellfruit) (Scorpion 5) (set 8) + + + sc5gdclbh + Gold Digger (PR3509) (Bellfruit) (Scorpion 5) (set 1) + + + sc5gdclbi + Gold Digger (PR3509) (Bellfruit) (Scorpion 5) (set 2) + + + sc5gdclbj + Gold Digger Club (PR3429) (Bellfruit) (Scorpion 5) (set 1) + + + sc5gdclbk + Gold Digger Club (PR3429) (Bellfruit) (Scorpion 5) (set 2) + + + sc5gdmz + Gold Diggers (Mazooma) (Scorpion 5) (set 1) + + + sc5gdmza + Gold Diggers (Mazooma) (Scorpion 5) (set 2) + + + sc5ggame + Golden Game (Mazooma) (Scorpion 5) (set 1) + + + sc5ggamea + Golden Game (Mazooma) (Scorpion 5) (set 2) + + + sc5ggameb + Golden Game (Mazooma) (Scorpion 5) (set 3) + + + sc5ggamec + Golden Game (Mazooma) (Scorpion 5) (set 4) + + + sc5ggamed + Golden Game (Mazooma) (Scorpion 5) (set 5) + + + sc5ggg + Grand Golden Game (Mazooma) (Scorpion 5) (set 1) + + + sc5ggga + Grand Golden Game (Mazooma) (Scorpion 5) (set 3) + + + sc5gggb + Grand Golden Game (Mazooma) (Scorpion 5) (set 2) + + + sc5gggc + Grand Golden Game (Mazooma) (Scorpion 5) (set 4) + + + sc5glad + Gladiator (Mazooma) (Scorpion 5) (set 1) + + + sc5glada + Gladiator (Mazooma) (Scorpion 5) (set 2) + + + sc5gladb + Gladiator (Mazooma) (Scorpion 5) (set 3) + + + sc5gladc + Gladiator (Mazooma) (Scorpion 5) (set 4) + + + sc5gldfv + Gold Fever (Bellfruit) (Scorpion 5) (set 1) + + + sc5gldfva + Gold Fever (Bellfruit) (Scorpion 5) (set 2) + + + sc5gldfvb + Gold Fever (Bellfruit) (Scorpion 5) (set 3) + + + sc5gldfvc + Gold Fever (Bellfruit) (Scorpion 5) (set 4) + + + sc5gldfvd + Gold Fever (Bellfruit) (Scorpion 5) (set 5) + + + sc5gldfve + Gold Fever (Bellfruit) (Scorpion 5) (set 6) + + + sc5gldfvf + Gold Fever (Bellfruit) (Scorpion 5) (set 7) + + + sc5gldfvg + Gold Fever (Bellfruit) (Scorpion 5) (set 8) + + + sc5gldgo + Golden Goals (Bellfruit) (Scorpion 5) (set 1) + + + sc5gldgoa + Golden Goals (Bellfruit) (Scorpion 5) (set 2) + + + sc5gldsp + Golden Spinner (PR2203) (Mazooma) (Scorpion 5) + + + sc5gldspa + Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 1) + + + sc5gldspb + Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 2) + + + sc5gldspc + Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 3) + + + sc5gldspd + Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 1) + + + sc5gldspe + Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 4) + + + sc5gldspf + Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 2) + + + sc5gldspg + Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 5) + + + sc5gldsph + Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 3) + + + sc5gldspi + Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 6) + + + sc5gldspj + Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 7) + + + sc5gldspk + Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 8) + + + sc5gldspl + Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 9) + + + sc5gldspm + Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 10) + + + sc5gldspn + Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 4) + + + sc5gldspo + Golden Spinner Bingo (011) (PR2546) (Mazooma) (Scorpion 5) (set 11) + + + sc5gldspp + Golden Spinner Arcade (061) (PR2546) (Mazooma) (Scorpion 5) (set 5) + + + sc5gmclb + Grand Master Cash (Bellfruit) (Scorpion 5) (set 1) + + + sc5gmclba + Grand Master Cash (Bellfruit) (Scorpion 5) (set 2) + + + sc5gmclbb + Grand Master Cash (Bellfruit) (Scorpion 5) (set 3) + + + sc5gmclbc + Grand Master Cash (Bellfruit) (Scorpion 5) (set 4) + + + sc5grq + Get Rich Quick (Bellfruit) (Scorpion 5) (set 1) + + + sc5grqa + Get Rich Quick (Bellfruit) (Scorpion 5) (set 2) + + + sc5grqb + Get Rich Quick (Bellfruit) (Scorpion 5) (set 3) + + + sc5grqc + Get Rich Quick (Bellfruit) (Scorpion 5) (set 4) + + + sc5gunp + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 1) + + + sc5gunpa + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 2) + + + sc5gunpb + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 3) + + + sc5gunpc + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 4) + + + sc5gunpd + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 5) + + + sc5gunpe + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 6) + + + sc5gunpf + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 7) + + + sc5gunpg + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 8) + + + sc5gunph + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 9) + + + sc5gunpi + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 10) + + + sc5gunpj + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 11) + + + sc5gunpk + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 12) + + + sc5gunpl + Gunpowder Slot (Bellfruit) (Scorpion 5) (set 13) + + + sc5hapnt + Happy Notes (Bellfruit) (Scorpion 5) (set 1) + + + sc5hapnta + Happy Notes (Bellfruit) (Scorpion 5) (set 2) + + + sc5hapntb + Happy Notes (Bellfruit) (Scorpion 5) (set 3) + + + sc5hapntc + Happy Notes (Bellfruit) (Scorpion 5) (set 4) + + + sc5hapntd + Happy Notes (Bellfruit) (Scorpion 5) (set 5) + + + sc5hapnte + Happy Notes (Bellfruit) (Scorpion 5) (set 6) + + + sc5hapntf + Happy Notes (Bellfruit) (Scorpion 5) (set 7) + + + sc5hapntg + Happy Notes (Bellfruit) (Scorpion 5) (set 8) + + + sc5hellb + Hells Bells (Bellfruit) (Scorpion 5) (set 1) + + + sc5hellba + Hells Bells (Bellfruit) (Scorpion 5) (set 2) + + + sc5hill + Hill Billionaire (Bellfruit) (Scorpion 5) (set 1) + + + sc5hilla + Hill Billionaire (Bellfruit) (Scorpion 5) (set 2) + + + sc5hillb + Hill Billionaire (Bellfruit) (Scorpion 5) (set 3) + + + sc5hirol + High Roller (Mazooma) (Scorpion 5) (set 1) + + + sc5hirola + High Roller (Mazooma) (Scorpion 5) (set 2) + + + sc5hirolb + High Roller (Mazooma) (Scorpion 5) (set 3) + + + sc5hirolc + High Roller (Mazooma) (Scorpion 5) (set 4) + + + sc5hirold + High Roller (Mazooma) (Scorpion 5) (set 5) + + + sc5hirole + High Roller (Mazooma) (Scorpion 5) (set 6) + + + sc5hiss + Hissing Quid (Qps) (Scorpion 5) (set 1) + + + sc5hissa + Hissing Quid (Qps) (Scorpion 5) (set 2) + + + sc5hissb + Hissing Quid (Qps) (Scorpion 5) (set 3) + + + sc5hissc + Hissing Quid (Qps) (Scorpion 5) (set 4) + + + sc5hog + Road Hog (PR3208) (Bellfruit) (Scorpion 5) (set 3) + + + sc5hoga + Road Hog (PR3208) (Bellfruit) (Scorpion 5) (set 4) + + + sc5hotdg + Hot Dog (Bellfruit) (Scorpion 5) (set 1) + + + sc5hotdga + Hot Dog (Bellfruit) (Scorpion 5) (set 2) + + + sc5hotdgb + Hot Dog (Bellfruit) (Scorpion 5) (set 3) + + + sc5hotdgc + Hot Dog (Bellfruit) (Scorpion 5) (set 4) + + + sc5hotdgd + Hot Dog (Bellfruit) (Scorpion 5) (set 5) + + + sc5hotdge + Hot Dog (Bellfruit) (Scorpion 5) (set 6) + + + sc5hotrd + Hot Rod (Bellfruit) (Scorpion 5) (set 1) + + + sc5hotrda + Hot Rod (Bellfruit) (Scorpion 5) (set 2) + + + sc5hotsh + Hot Shot (Bellfruit) (Scorpion 5) (set 1) + + + sc5hotsha + Hot Shot (Bellfruit) (Scorpion 5) (set 2) + + + sc5hotshb + Hot Shot (Bellfruit) (Scorpion 5) (set 3) + + + sc5hotshc + Hot Shot (Bellfruit) (Scorpion 5) (set 4) + + + sc5hotshd + Hot Shot (Bellfruit) (Scorpion 5) (set 5) + + + sc5hotshe + Hot Shot (Bellfruit) (Scorpion 5) (set 6) + + + sc5hotshf + Hot Shot (Bellfruit) (Scorpion 5) (set 7) + + + sc5hotshg + Hot Shot (Bellfruit) (Scorpion 5) (set 8) + + + sc5hotshh + Hot Shot (Bellfruit) (Scorpion 5) (set 9) + + + sc5hotshi + Hot Shot (Bellfruit) (Scorpion 5) (set 10) + + + sc5hotshj + Hot Shot (Bellfruit) (Scorpion 5) (set 11) + + + sc5hotshk + Hot Shot (Bellfruit) (Scorpion 5) (set 12) + + + sc5hotshl + Hot Shot (Bellfruit) (Scorpion 5) (set 13) + + + sc5hotshm + Hot Shot (Bellfruit) (Scorpion 5) (set 14) + + + sc5hotshn + Hot Shot (Bellfruit) (Scorpion 5) (set 15) + + + sc5hotsho + Hot Shot (Bellfruit) (Scorpion 5) (set 16) + + + sc5hotshp + Hot Shot (Bellfruit) (Scorpion 5) (set 17) + + + sc5hotshq + Hot Shot (Bellfruit) (Scorpion 5) (set 18) + + + sc5hotwd + Hot Wad (Bellfruit) (Scorpion 5) (set 1) + + + sc5hotwda + Hot Wad (Bellfruit) (Scorpion 5) (set 2) + + + sc5hotwdb + Hot Wad (Bellfruit) (Scorpion 5) (set 3) + + + sc5hotwdc + Hot Wad (Bellfruit) (Scorpion 5) (set 4) + + + sc5hotwdd + Hot Wad (Bellfruit) (Scorpion 5) (set 5) + + + sc5hotwde + Hot Wad (Bellfruit) (Scorpion 5) (set 6) + + + sc5hotwdf + Hot Wad (Bellfruit) (Scorpion 5) (set 7) + + + sc5hotwdg + Hot Wad (Bellfruit) (Scorpion 5) (set 8) + + + sc5hulk + Hulk, The (Bellfruit) (Scorpion 5) (set 1) + + + sc5hulka + Hulk, The (Bellfruit) (Scorpion 5) (set 2) + + + sc5hulkb + Hulk, The (Bellfruit) (Scorpion 5) (set 3) + + + sc5hulkc + Hulk, The (Bellfruit) (Scorpion 5) (set 4) + + + sc5hulkd + Hulk, The (Bellfruit) (Scorpion 5) (set 5) + + + sc5hulke + Hulk, The (Bellfruit) (Scorpion 5) (set 6) + + + sc5hulkf + Hulk, The (Bellfruit) (Scorpion 5) (set 7) + + + sc5hulkg + Hulk, The (Bellfruit) (Scorpion 5) (set 8) + + + sc5hulkh + Hulk, The (Bellfruit) (Scorpion 5) (set 9) + + + sc5hulki + Hulk, The (Bellfruit) (Scorpion 5) (set 10) + + + sc5iab + It's A Bullseye (Mazooma) (Scorpion 5) (set 1) + + + sc5iaba + It's A Bullseye (Mazooma) (Scorpion 5) (set 2) + + + sc5ijbdo + Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 1) + + + sc5ijbdoa + Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 2) + + + sc5ijbdob + Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 3) + + + sc5ijbdoc + Italian Job - Blow The Doors Off (Qps) (Scorpion 5) (set 4) + + + sc5ijob + Italian Job (Mazooma) (Scorpion 5) (set 1) + + + sc5ijoba + Italian Job (Mazooma) (Scorpion 5) (set 2) + + + sc5ijobb + Italian Job (Mazooma) (Scorpion 5) (set 3) + + + sc5ijobc + Italian Job (Mazooma) (Scorpion 5) (set 4) + + + sc5ijobd + Italian Job (Mazooma) (Scorpion 5) (set 5) + + + sc5ijobe + Italian Job (Mazooma) (Scorpion 5) (set 6) + + + sc5ijobf + Italian Job (Mazooma) (Scorpion 5) (set 7) + + + sc5ijobg + Italian Job (Mazooma) (Scorpion 5) (set 8) + + + sc5ijobh + Italian Job (Mazooma) (Scorpion 5) (set 9) + + + sc5ijobi + Italian Job (Mazooma) (Scorpion 5) (set 10) + + + sc5inspn + Inner Spin (Mazooma) (Scorpion 5) (set 1) + + + sc5inspna + Inner Spin (Mazooma) (Scorpion 5) (set 2) + + + sc5jjok + Jackpot Jokers (Bellfruit) (Scorpion 5) (set 1) + + + sc5jjoka + Jackpot Jokers (Bellfruit) (Scorpion 5) (set 2) + + + sc5kingx + King X (PR2077) (Mazooma) (Scorpion 5) (set 1) + + + sc5kingxa + King X (PR2077) (Mazooma) (Scorpion 5) (set 2) + + + sc5kingxb + King X Triple (PR2279) (Mazooma) (Scorpion 5) (set 1) + + + sc5kingxc + King X 3P (PR2336) (Mazooma) (Scorpion 5) (set 1) + + + sc5kingxd + King X Triple (PR2279) (Mazooma) (Scorpion 5) (set 2) + + + sc5kingxe + King X 3P (PR2336) (Mazooma) (Scorpion 5) (set 2) + + + sc5ldvl + Little Devil (Mazooma) (Scorpion 5) (set 1) + + + sc5ldvla + Little Devil (Mazooma) (Scorpion 5) (set 2) + + + sc5ldvlb + Little Devil (Mazooma) (Scorpion 5) (set 3) + + + sc5ldvlc + Little Devil (Mazooma) (Scorpion 5) (set 4) + + + sc5ldvld + Little Devil (Mazooma) (Scorpion 5) (set 5) + + + sc5ldvle + Little Devil (Mazooma) (Scorpion 5) (set 6) + + + sc5lotrr + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 1) + + + sc5lotrra + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 2) + + + sc5lotrrb + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 3) + + + sc5lotrrc + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 4) + + + sc5lotrrd + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 5) + + + sc5lotrre + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 6) + + + sc5lotrrf + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 7) + + + sc5lotrrg + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 8) + + + sc5lotrrh + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 9) + + + sc5lotrri + Lord Of The Rings - Return Of The King (Bellfruit) (Scorpion 5) (set 10) + + + sc5manic + Manic Miner (Bellfruit) (Scorpion 5) (set 1) + + + sc5manica + Manic Miner (Bellfruit) (Scorpion 5) (set 2) + + + sc5manicb + Manic Miner (Bellfruit) (Scorpion 5) (set 3) + + + sc5manicc + Manic Miner (Bellfruit) (Scorpion 5) (set 4) + + + sc5manicd + Manic Miner (Bellfruit) (Scorpion 5) (set 5) + + + sc5manice + Manic Miner (Bellfruit) (Scorpion 5) (set 6) + + + sc5manicf + Manic Miner (Bellfruit) (Scorpion 5) (set 7) + + + sc5manicg + Manic Miner (Bellfruit) (Scorpion 5) (set 8) + + + sc5manich + Manic Miner (Bellfruit) (Scorpion 5) (set 9) + + + sc5manici + Manic Miner (Bellfruit) (Scorpion 5) (set 10) + + + sc5manicj + Manic Miner (Bellfruit) (Scorpion 5) (set 11) + + + sc5manick + Manic Miner (Bellfruit) (Scorpion 5) (set 12) + + + sc5manicl + Manic Miner (Bellfruit) (Scorpion 5) (set 13) + + + sc5manicm + Manic Miner (Bellfruit) (Scorpion 5) (set 14) + + + sc5manicn + Manic Miner (Bellfruit) (Scorpion 5) (set 15) + + + sc5manico + Manic Miner (Bellfruit) (Scorpion 5) (set 16) + + + sc5manicp + Manic Miner (Bellfruit) (Scorpion 5) (set 17) + + + sc5manicq + Manic Miner (Bellfruit) (Scorpion 5) (set 18) + + + sc5manicr + Manic Miner (Bellfruit) (Scorpion 5) (set 19) + + + sc5manics + Manic Miner (Bellfruit) (Scorpion 5) (set 20) + + + sc5manict + Manic Miner (Bellfruit) (Scorpion 5) (set 21) + + + sc5manicu + Manic Miner (Bellfruit) (Scorpion 5) (set 22) + + + sc5manicv + Manic Miner (Bellfruit) (Scorpion 5) (set 23) + + + sc5manicw + Manic Miner (Bellfruit) (Scorpion 5) (set 24) + + + sc5manicx + Manic Miner (Bellfruit) (Scorpion 5) (set 25) + + + sc5manicy + Manic Miner (Bellfruit) (Scorpion 5) (set 26) + + + sc5mcas + Monopoly Casino (Mazooma) (Scorpion 5) (set 1) + + + sc5mcasa + Monopoly Casino (Mazooma) (Scorpion 5) (set 3) + + + sc5mcasb + Monopoly Casino (Mazooma) (Scorpion 5) (set 2) + + + sc5mcasc + Monopoly Casino (Mazooma) (Scorpion 5) (set 4) + + + sc5mdm + Monopoly Double Money (Bellfruit) (Scorpion 5) (set 1) + + + sc5mdma + Monopoly Double Money (Bellfruit) (Scorpion 5) (set 2) + + + sc5mdmb + Monopoly Double Money (Bellfruit) (Scorpion 5) (set 3) + + + sc5mdmc + Monopoly Double Money (Bellfruit) (Scorpion 5) (set 4) + + + sc5mhn + Monopoly Here & Now (Mazooma) (Scorpion 5) (set 1) + + + sc5mhna + Monopoly Here & Now (Mazooma) (Scorpion 5) (set 2) + + + sc5mhnb + Monopoly Here & Now (Mazooma) (Scorpion 5) (set 3) + + + sc5mhnc + Monopoly Here & Now (Mazooma) (Scorpion 5) (set 4) + + + sc5mhnd + Monopoly Here & Now (Mazooma) (Scorpion 5) (set 5) + + + sc5mhne + Monopoly Here & Now (Mazooma) (Scorpion 5) (set 6) + + + sc5mhp + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 1) + + + sc5mhpa + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 2) + + + sc5mhpb + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 3) + + + sc5mhpc + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 4) + + + sc5mhpd + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 5) + + + sc5mhpe + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 6) + + + sc5mhpf + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 7) + + + sc5mhpg + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 8) + + + sc5mhph + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 9) + + + sc5mhpi + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 10) + + + sc5mhpj + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 11) + + + sc5mhpk + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 12) + + + sc5mhpl + Monopoly Hot Property (Bellfruit) (Scorpion 5) (set 13) + + + sc5mmad + Money Madness (Mazooma) (Scorpion 5) (set 1) + + + sc5mmada + Money Madness (Mazooma) (Scorpion 5) (set 2) + + + sc5mmadb + Money Madness (Mazooma) (Scorpion 5) (set 3) + + + sc5mmadc + Money Madness (Mazooma) (Scorpion 5) (set 4) + + + sc5mmb + Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 1) + + + sc5mmba + Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 2) + + + sc5mmbb + Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 3) + + + sc5mmbc + Monopoly Money Bags (PR3413) (Bellfruit) (Scorpion 5) (set 4) + + + sc5mmbd + Monopoly Money Bags (PR1911) (Bellfruit) (Scorpion 5) (set 1) + + + sc5mmbe + Monopoly Money Bags (PR1911) (Bellfruit) (Scorpion 5) (set 2) + + + sc5mmm + Mental Money Monsters (Mazooma) (Scorpion 5) (set 1) + + + sc5mmma + Mental Money Monsters (Mazooma) (Scorpion 5) (set 2) + + + sc5mmmb + Mental Money Monsters (Mazooma) (Scorpion 5) (set 3) + + + sc5mmmc + Mental Money Monsters (Mazooma) (Scorpion 5) (set 4) + + + sc5mobob + Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 1) + + + sc5moboba + Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 2) + + + sc5mobobb + Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 1) + + + sc5mobobc + Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 2) + + + sc5mobobd + Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 3) + + + sc5mobobe + Monopoly Boom Or Bust Classic (Bellfruit) (Scorpion 5) (set 4) + + + sc5mobobf + Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 3) + + + sc5mobobg + Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 4) + + + sc5mobobh + Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 5) + + + sc5mobobi + Monopoly Boom Or Bust (Bellfruit) (Scorpion 5) (set 6) + + + sc5mogta + Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 1) + + + sc5mogtaa + Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 2) + + + sc5mogtab + Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 3) + + + sc5mogtac + Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 4) + + + sc5mogtad + Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 5) + + + sc5mogtae + Monopoly Go To Auction (Bellfruit) (Scorpion 5) (set 6) + + + sc5mombc + Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 1) + + + sc5mombca + Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 2) + + + sc5mombcb + Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 3) + + + sc5mombcc + Monopoly Money Bags Club (PR1945) (BFM) (Scorpion 5) (set 4) + + + sc5momil + Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 1) + + + sc5momila + Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 2) + + + sc5momilb + Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 3) + + + sc5momilc + Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 4) + + + sc5momild + Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 5) + + + sc5momile + Monopoly Millionaire (Bellfruit) (Scorpion 5) (set 6) + + + sc5moms + Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 1) + + + sc5momsa + Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 2) + + + sc5momsb + Money Spinner (PR2395) (Qps) (Scorpion 5) (set 1) + + + sc5momsc + Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 3) + + + sc5momsd + Monopoly Money Spinner (PR2496) (Qps) (Scorpion 5) (set 4) + + + sc5momse + Money Spinner (PR2395) (Qps) (Scorpion 5) (set 2) + + + sc5monky + Monkey Business / Toss The Monkey (Mazooma) (Scorpion 5) (set 1) + + + sc5monkya + Monkey Business / Toss The Monkey (Mazooma) (Scorpion 5) (set 2) + + + sc5monop + Monopoly (Mazooma) (Scorpion 5) + + + sc5monsp + Money Spinner (Bellfruit) (Scorpion 5) (set 1) + + + sc5monspa + Money Spinner (Bellfruit) (Scorpion 5) (set 2) + + + sc5monwa + Monopoly Win Again (Qps) (Scorpion 5) (set 1) + + + sc5monwaa + Monopoly Win Again (Qps) (Scorpion 5) (set 2) + + + sc5mopl + Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 1) + + + sc5mopla + Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 2) + + + sc5moplb + Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 3) + + + sc5moplc + Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 4) + + + sc5mopld + Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 5) + + + sc5mople + Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 6) + + + sc5moplf + Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 7) + + + sc5moplg + Monopoly Property Ladder (Bellfruit) (Scorpion 5) (set 8) + + + sc5mor2r + Monopoly Road To Riches (Qps) (Scorpion 5) (set 1) + + + sc5mor2ra + Monopoly Road To Riches (Qps) (Scorpion 5) (set 2) + + + sc5mowow + Monopoly Wheel Of Wealth (Mazooma) (Scorpion 5) (set 1) + + + sc5mowowb + Monopoly Wheel Of Wealth (Mazooma) (Scorpion 5) (set 2) + + + sc5mr2r + Monopoly Road To Riches (PR2329) (Mazooma) (Scorpion 5) (set 1) + + + sc5mr2ra + Monopoly Road To Riches (PR2329) (Mazooma) (Scorpion 5) (set 2) + + + sc5mr2rb + Monopoly Road To Riches Club (PR2457) (Mazooma) (Scorpion 5) + + + sc5mrh + Monopoly Red Hot (Mazooma) (Scorpion 5) (set 1) + + + sc5mrha + Monopoly Red Hot (Mazooma) (Scorpion 5) (set 2) + + + sc5mrrcl + Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 1) + + + sc5mrrcla + Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 2) + + + sc5mrrclb + Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 3) + + + sc5mrrclc + Monopoly Road To Riches Club (Mazooma) (Scorpion 5) (set 4) + + + sc5mww + Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 1) + + + sc5mwwa + Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 2) + + + sc5mwwb + Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 3) + + + sc5mwwc + Monopoly Wonders Of The World (Mazooma) (Scorpion 5) (set 4) + + + sc5newcm + Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 1) + + + sc5newcma + Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 2) + + + sc5newcmb + Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 3) + + + sc5newcmc + Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 4) + + + sc5newcmd + Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 5) + + + sc5newcme + Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 6) + + + sc5nmare + A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 1) + + + sc5nmarea + A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 2) + + + sc5nmareb + A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 3) + + + sc5nmarec + A Nightmare On Elm Street (Bellfruit) (Scorpion 5) (set 4) + + + sc5nunsb + Nuns 'n' Roses (Bellfruit) (Scorpion 5) + + + sc5nunsm + Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 1) + + + sc5nunsma + Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 2) + + + sc5nunsmb + Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 3) + + + sc5nunsmc + Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 4) + + + sc5nunsmd + Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 5) + + + sc5nunsme + Nuns 'n' Roses (Mazooma) (Scorpion 5) (set 6) + + + sc5parot + Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 1) + + + sc5parota + Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 2) + + + sc5parotb + Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 3) + + + sc5parotc + Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 4) + + + sc5parotd + Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 5) + + + sc5parote + Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 6) + + + sc5parotf + Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 7) + + + sc5parotg + Parrots Of The Caribbean (Bellfruit) (Scorpion 5) (set 8) + + + sc5pilep + Pile On The Pounds (Qps) (Scorpion 5) (set 1) + + + sc5pilepa + Pile On The Pounds (Qps) (Scorpion 5) (set 2) + + + sc5pilepb + Pile On The Pounds (Qps) (Scorpion 5) (set 3) + + + sc5pilepc + Pile On The Pounds (Qps) (Scorpion 5) (set 4) + + + sc5pircl + The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 1) + + + sc5pircla + The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 2) + + + sc5pirclb + The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 3) + + + sc5pirclc + The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 4) + + + sc5pircld + The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 5) + + + sc5pircle + The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 6) + + + sc5pirclf + The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 7) + + + sc5pirclg + The Prize Is Right Club (Bellfruit) (Scorpion 5) (set 8) + + + sc5plays + 28 Plays Later (Qps) (Scorpion 5) (set 1) + + + sc5playsa + 28 Plays Later (Qps) (Scorpion 5) (set 2) + + + sc5pog + Pots Of Gold (Bellfruit) (Scorpion 5) (set 1) + + + sc5poga + Pots Of Gold (Bellfruit) (Scorpion 5) (set 2) + + + sc5pogb + Pots Of Gold (Bellfruit) (Scorpion 5) (set 3) + + + sc5pogc + Pots Of Gold (Bellfruit) (Scorpion 5) (set 4) + + + sc5pogd + Pots Of Gold (Bellfruit) (Scorpion 5) (set 5) + + + sc5poge + Pots Of Gold (Bellfruit) (Scorpion 5) (set 6) + + + sc5pogf + Pots Of Gold (Bellfruit) (Scorpion 5) (set 7) + + + sc5pogg + Pots Of Gold (Bellfruit) (Scorpion 5) (set 8) + + + sc5pompa + Up Pompay (Bellfruit) (Scorpion 5) (set 1) + + + sc5pompaa + Up Pompay (Bellfruit) (Scorpion 5) (set 2) + + + sc5pompab + Up Pompay (Bellfruit) (Scorpion 5) (set 3) + + + sc5pony + Pony Express (Bellfruit) (Scorpion 5) (set 1) + + + sc5ponya + Pony Express (Bellfruit) (Scorpion 5) (set 2) + + + sc5ponyb + Pony Express (Bellfruit) (Scorpion 5) (set 3) + + + sc5ponyc + Pony Express (Bellfruit) (Scorpion 5) (set 4) + + + sc5ponyd + Pony Express (Bellfruit) (Scorpion 5) (set 5) + + + sc5ponye + Pony Express (Bellfruit) (Scorpion 5) (set 6) + + + sc5popey + Popeye (Mazooma) (Scorpion 5) (set 1) + + + sc5popeya + Popeye (Mazooma) (Scorpion 5) (set 2) + + + sc5popeyb + Popeye (Mazooma) (Scorpion 5) (set 3) + + + sc5popeyc + Popeye (Mazooma) (Scorpion 5) (set 4) + + + sc5popeyd + Popeye (Mazooma) (Scorpion 5) (set 5) + + + sc5popeye + Popeye (Mazooma) (Scorpion 5) (set 6) + + + sc5popeyf + Popeye (Mazooma) (Scorpion 5) (set 7) + + + sc5popeyg + Popeye (Mazooma) (Scorpion 5) (set 8) + + + sc5potog + Pot Of Gold (QPS) (Scorpion 5) (set 1) + + + sc5potoga + Pot Of Gold (QPS) (Scorpion 5) (set 2) + + + sc5potogb + Pot Of Gold (QPS) (Scorpion 5) (set 3) + + + sc5potogc + Pot Of Gold (QPS) (Scorpion 5) (set 4) + + + sc5potogd + Pot Of Gold (QPS) (Scorpion 5) (set 5) + + + sc5potoge + Pot Of Gold (QPS) (Scorpion 5) (set 6) + + + sc5potogf + Pot Of Gold (QPS) (Scorpion 5) (set 7) + + + sc5potogg + Pot Of Gold (QPS) (Scorpion 5) (set 8) + + + sc5potogh + Pot Of Gold (QPS) (Scorpion 5) (set 9) + + + sc5potogi + Pot Of Gold (QPS) (Scorpion 5) (set 10) + + + sc5potp + Pick Of The Pack (Bellfruit) (Scorpion 5) (set 1) + + + sc5potpa + Pick Of The Pack (Bellfruit) (Scorpion 5) (set 2) + + + sc5potsm + Pots Of Luck (Mazooma) (Scorpion 5) (set 1) + + + sc5potsma + Pots Of Luck (Mazooma) (Scorpion 5) (set 2) + + + sc5pp + Pink Panther (Mazooma) (Scorpion 5) (set 1) + + + sc5ppa + Pink Panther (Mazooma) (Scorpion 5) (set 2) + + + sc5ppb + Pink Panther (Mazooma) (Scorpion 5) (set 3) + + + sc5ppc + Pink Panther (Mazooma) (Scorpion 5) (set 4) + + + sc5ppcr + Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 1) + + + sc5ppcra + Pink Panther Clouseau's Revenge (Mazooma) (Scorpion 5) + + + sc5ppcrb + Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 2) + + + sc5ppcrc + Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 3) + + + sc5ppcrd + Pink Panther Clouseau's Revenge (Mazooma / QPS) (Scorpion 5) (set 4) + + + sc5ppctc + Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 1) + + + sc5ppctca + Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 2) + + + sc5ppctcb + Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 3) + + + sc5ppctcc + Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 4) + + + sc5ppctcd + Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 5) + + + sc5ppctce + Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 6) + + + sc5ppctcf + Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 7) + + + sc5ppctcg + Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 8) + + + sc5ppctch + Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 9) + + + sc5ppctci + Pink Panther Crack The Code (Bellfruit) (Scorpion 5) (set 10) + + + sc5ppd + Pink Panther (Mazooma) (Scorpion 5) (set 5) + + + sc5ppdym + Pink Panther Double Your Money (Mazooma / QPS) (Scorpion 5) (set 1) + + + sc5ppdyma + Pink Panther Double Your Money (Mazooma / QPS) (Scorpion 5) (set 2) + + + sc5ppe + Pink Panther (Mazooma) (Scorpion 5) (set 6) + + + sc5ppf + Pink Panther (Mazooma) (Scorpion 5) (set 7) + + + sc5ppg + Pink Panther (Mazooma) (Scorpion 5) (set 8) + + + sc5ppsag + Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 1) + + + sc5ppsaga + Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 2) + + + sc5ppsagb + Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 3) + + + sc5ppsagc + Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 4) + + + sc5ppsagd + Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 5) + + + sc5ppsage + Pink Panther Strikes Again (Mazooma) (Scorpion 5) (set 6) + + + sc5pwrbl + Powerball (Bellfruit) (Scorpion 5) (set 1) + + + sc5pwrbla + Powerball (Bellfruit) (Scorpion 5) (set 2) + + + sc5pwrpl + Power Play (Mazooma) (Scorpion 5) (set 1) + + + sc5pwrpla + Power Play (Mazooma) (Scorpion 5) (set 2) + + + sc5qual + Quality Streak (Bellfruit) (Scorpion 5) (set 1) + + + sc5quala + Quality Streak (Bellfruit) (Scorpion 5) (set 2) + + + sc5qualb + Quality Streak (Bellfruit) (Scorpion 5) (set 3) + + + sc5qualc + Quality Streak (Bellfruit) (Scorpion 5) (set 4) + + + sc5quald + Quality Streak (Bellfruit) (Scorpion 5) (set 5) + + + sc5quale + Quality Streak (Bellfruit) (Scorpion 5) (set 6) + + + sc5qualf + Quality Streak (Bellfruit) (Scorpion 5) (set 7) + + + sc5qualg + Quality Streak (Bellfruit) (Scorpion 5) (set 8) + + + sc5qualh + Quality Streak (Bellfruit) (Scorpion 5) (set 9) + + + sc5quali + Quality Streak (Bellfruit) (Scorpion 5) (set 10) + + + sc5qualj + Quality Streak (Bellfruit) (Scorpion 5) (set 11) + + + sc5qualk + Quality Streak (Bellfruit) (Scorpion 5) (set 12) + + + sc5quall + Quality Streak (Bellfruit) (Scorpion 5) (set 13) + + + sc5qualm + Quality Streak (Bellfruit) (Scorpion 5) (set 14) + + + sc5quidv + Quid Vicious (Mazooma) (Scorpion 5) (set 1) + + + sc5quidva + Quid Vicious (Mazooma) (Scorpion 5) (set 2) + + + sc5quidvb + Quid Vicious (Mazooma) (Scorpion 5) (set 3) + + + sc5quidvc + Quid Vicious (Mazooma) (Scorpion 5) (set 4) + + + sc5quidvd + Quid Vicious (Mazooma) (Scorpion 5) (set 5) + + + sc5quidve + Quid Vicious (Mazooma) (Scorpion 5) (set 6) + + + sc5quidvf + Quid Vicious (Mazooma) (Scorpion 5) (set 7) + + + sc5quidvg + Quid Vicious (Mazooma) (Scorpion 5) (set 8) + + + sc5rainb + Over The Rainbow (Bellfruit) (Scorpion 5) (set 1) + + + sc5rainba + Over The Rainbow (Bellfruit) (Scorpion 5) (set 2) + + + sc5rainbb + Over The Rainbow (Bellfruit) (Scorpion 5) (set 3) + + + sc5rainbc + Over The Rainbow (Bellfruit) (Scorpion 5) (set 4) + + + sc5rainbd + Over The Rainbow (Bellfruit) (Scorpion 5) (set 5) + + + sc5rainbe + Over The Rainbow (Bellfruit) (Scorpion 5) (set 6) + + + sc5redsq + Red Square (Mazooma) (Scorpion 5) (set 1) + + + sc5redsqa + Red Square (Mazooma) (Scorpion 5) (set 2) + + + sc5rhclb + Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 1) + + + sc5rhclba + Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 2) + + + sc5rhclbb + Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 3) + + + sc5rhclbc + Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 4) + + + sc5rhclbd + Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 5) + + + sc5rhclbe + Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 6) + + + sc5rhclbf + Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 7) + + + sc5rhclbg + Road Hog Club (PR3248) (Bellfruit) (Scorpion 5) (set 8) + + + sc5rhr + Red Hot Reels (Qps) (Scorpion 5) (set 1) + + + sc5rhra + Red Hot Reels (Qps) (Scorpion 5) (set 2) + + + sc5rhrb + Red Hot Reels (Qps) (Scorpion 5) (set 3) + + + sc5rhrc + Red Hot Reels (Qps) (Scorpion 5) (set 4) + + + sc5rhrd + Red Hot Reels (Qps) (Scorpion 5) (set 5) + + + sc5rhre + Red Hot Reels (Qps) (Scorpion 5) (set 6) + + + sc5rhx + Red Hot X (Mazooma) (Scorpion 5) (set 1) + + + sc5rhxa + Red Hot X (Mazooma) (Scorpion 5) (set 2) + + + sc5rhxb + Red Hot X (Mazooma) (Scorpion 5) (set 3) + + + sc5rhxc + Red Hot X (Mazooma) (Scorpion 5) (set 4) + + + sc5rhxcs + Red Hot X Casino (Mazooma) (Scorpion 5) (set 1) + + + sc5rhxcsa + Red Hot X Casino (Mazooma) (Scorpion 5) (set 2) + + + sc5rhxd + Red Hot X (Mazooma) (Scorpion 5) (set 5) + + + sc5rhxe + Red Hot X (Mazooma) (Scorpion 5) (set 6) + + + sc5rhxf + Red Hot X (Mazooma) (Scorpion 5) (set 7) + + + sc5rosts + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 1) + + + sc5rostsa + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 2) + + + sc5rostsb + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 3) + + + sc5rostsc + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 4) + + + sc5rostsd + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 5) + + + sc5rostse + Ronnie O'Sullivan's Tournament Snooker (Bellfruit) (Scorpion 5) (set 6) + + + sc5rovrt + Rovers Return (Mazooma) (Scorpion 5) (set 1) + + + sc5rovrta + Rovers Return (Mazooma) (Scorpion 5) (set 2) + + + sc5rovrtb + Rovers Return (Mazooma) (Scorpion 5) (set 3) + + + sc5rovrtc + Rovers Return (Mazooma) (Scorpion 5) (set 4) + + + sc5rssh + Reel Spin Shady (Mazooma) (Scorpion 5) (set 1) + + + sc5rssha + Reel Spin Shady (Mazooma) (Scorpion 5) (set 2) + + + sc5sbull + Super Bullseye (Bellfruit) (Scorpion 5) (set 1) + + + sc5sbulla + Super Bullseye (Bellfruit) (Scorpion 5) (set 2) + + + sc5sfts + Shoot For The Stars (Bellfruit) (Scorpion 5) (set 1) + + + sc5sftsa + Shoot For The Stars (Bellfruit) (Scorpion 5) (set 2) + + + sc5sftsb + Shoot For The Stars (Bellfruit) (Scorpion 5) (set 3) + + + sc5sftsc + Shoot For The Stars (Bellfruit) (Scorpion 5) (set 4) + + + sc5sharp + Sharp Shooter (Voodoo) (Scorpion 5) (set 1) + + + sc5sharpa + Sharp Shooter (Voodoo) (Scorpion 5) (set 2) + + + sc5showt + Showtime (Bellfruit) (Scorpion 5) (set 1) + + + sc5showta + Showtime (Bellfruit) (Scorpion 5) (set 2) + + + sc5showtb + Showtime (Bellfruit) (Scorpion 5) (set 3) + + + sc5showtc + Showtime (Bellfruit) (Scorpion 5) (set 4) + + + sc5showtd + Showtime (Bellfruit) (Scorpion 5) (set 5) + + + sc5showte + Showtime (Bellfruit) (Scorpion 5) (set 6) + + + sc5showtf + Showtime (Bellfruit) (Scorpion 5) (set 7) + + + sc5showtg + Showtime (Bellfruit) (Scorpion 5) (set 8) + + + sc5showth + Showtime (Bellfruit) (Scorpion 5) (set 9) + + + sc5showti + Showtime (Bellfruit) (Scorpion 5) (set 10) + + + sc5showtj + Showtime (Bellfruit) (Scorpion 5) (set 11) + + + sc5showtk + Showtime (Bellfruit) (Scorpion 5) (set 12) + + + sc5showtl + Showtime (Bellfruit) (Scorpion 5) (set 13) + + + sc5showtm + Showtime (Bellfruit) (Scorpion 5) (set 14) + + + sc5showtn + Showtime (Bellfruit) (Scorpion 5) (set 15) + + + sc5showto + Showtime (Bellfruit) (Scorpion 5) (set 16) + + + sc5showtp + Showtime (Bellfruit) (Scorpion 5) (set 17) + + + sc5showtq + Showtime (Bellfruit) (Scorpion 5) (set 18) + + + sc5showtr + Showtime (Bellfruit) (Scorpion 5) (set 19) + + + sc5showts + Showtime (Bellfruit) (Scorpion 5) (set 20) + + + sc5sitwi + Spin It To Win It (Bellfruit) (Scorpion 5) (set 1) + + + sc5sitwia + Spin It To Win It (Bellfruit) (Scorpion 5) (set 2) + + + sc5slad + Snakes & Ladders (Bellfruit) (Scorpion 5) (set 1) + + + sc5slada + Snakes & Ladders (Bellfruit) (Scorpion 5) (set 2) + + + sc5sladb + Snakes & Ladders (Bellfruit) (Scorpion 5) (set 3) + + + sc5sladc + Snakes & Ladders (Bellfruit) (Scorpion 5) (set 4) + + + sc5sladd + Snakes & Ladders (Bellfruit) (Scorpion 5) (set 5) + + + sc5slade + Snakes & Ladders (Bellfruit) (Scorpion 5) (set 6) + + + sc5sladf + Snakes & Ladders (Bellfruit) (Scorpion 5) (set 7) + + + sc5sladg + Snakes & Ladders (Bellfruit) (Scorpion 5) (set 8) + + + sc5sleut + Super Sleuth (Mazooma) (Scorpion 5) (set 1) + + + sc5sleuta + Super Sleuth (Mazooma) (Scorpion 5) (set 2) + + + sc5smtm + Show Me The Money (Mazooma) (Scorpion 5) (set 1) + + + sc5smtma + Show Me The Money (Mazooma) (Scorpion 5) (set 2) + + + sc5spice + Spice It Up (Bellfruit) (Scorpion 5) (set 1) + + + sc5spicea + Spice It Up (Bellfruit) (Scorpion 5) (set 3) + + + sc5spiceb + Spice It Up (Bellfruit) (Scorpion 5) (set 2) + + + sc5spicec + Spice It Up (Bellfruit) (Scorpion 5) (set 4) + + + sc5spiced + Spice It Up (Bellfruit) (Scorpion 5) (set 5) + + + sc5spicee + Spice It Up (Bellfruit) (Scorpion 5) (set 6) + + + sc5spnrn + Spinning Around (Mazooma) (Scorpion 5) (set 1) + + + sc5spnrna + Spinning Around (Mazooma) (Scorpion 5) (set 2) + + + sc5srace + Streak Racer (Bellfruit) (Scorpion 5) (set 1) + + + sc5sracea + Streak Racer (Bellfruit) (Scorpion 5) (set 2) + + + sc5srrcl + Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 1) + + + sc5srrcla + Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 2) + + + sc5srrclb + Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 3) + + + sc5srrclc + Snake Rattle 'n' Roll Club (Bellfruit) (Scorpion 5) (set 4) + + + sc5srrqp + Snake Rattle & Roll (Qps) (Scorpion 5) (set 1) + + + sc5srrqpa + Snake Rattle & Roll (Qps) (Scorpion 5) (set 2) + + + sc5sumit + Summit Up (Qps) (Scorpion 5) (set 1) + + + sc5sumita + Summit Up (Qps) (Scorpion 5) (set 2) + + + sc5sus + Suits U Sir (Qps) (Scorpion 5) (set 1) + + + sc5susa + Suits U Sir (Qps) (Scorpion 5) (set 2) + + + sc5susb + Suits U Sir (Qps) (Scorpion 5) (set 3) + + + sc5susc + Suits U Sir (Qps) (Scorpion 5) (set 4) + + + sc5swbak + Switch Back (Mazooma) (Scorpion 5) (set 1) + + + sc5swbaka + Switch Back (Mazooma) (Scorpion 5) (set 2) + + + sc5swywm + Spin When Your Winning (Mazooma) (Scorpion 5) (set 1) + + + sc5swywma + Spin When Your Winning (Mazooma) (Scorpion 5) (set 2) + + + sc5swywmb + Spin When Your Winning (Mazooma) (Scorpion 5) (set 3) + + + sc5swywmc + Spin When Your Winning (Mazooma) (Scorpion 5) (set 4) + + + sc5tbox + Top Box (Mazooma) (Scorpion 5) (set 1) + + + sc5tboxa + Top Box (Mazooma) (Scorpion 5) (set 2) + + + sc5tboxb + Top Box (Mazooma) (Scorpion 5) (set 3) + + + sc5tboxc + Top Box (Mazooma) (Scorpion 5) (set 4) + + + sc5tboxd + Top Box (Mazooma) (Scorpion 5) (set 5) + + + sc5tboxe + Top Box (Mazooma) (Scorpion 5) (set 6) + + + sc5tboxf + Top Box (Mazooma) (Scorpion 5) (set 7) + + + sc5tboxg + Top Box (Mazooma) (Scorpion 5) (set 8) + + + sc5tboxh + Top Box (Mazooma) (Scorpion 5) (set 9) + + + sc5tboxi + Top Box (Mazooma) (Scorpion 5) (set 10) + + + sc5tboxj + Top Box (Mazooma) (Scorpion 5) (set 11) + + + sc5tboxk + Top Box (Mazooma) (Scorpion 5) (set 12) + + + sc5tboxl + Top Box (Mazooma) (Scorpion 5) (set 13) + + + sc5tboxm + Top Box (Mazooma) (Scorpion 5) (set 14) + + + sc5tboxn + Top Box (Mazooma) (Scorpion 5) (set 15) + + + sc5tboxo + Top Box (Mazooma) (Scorpion 5) (set 16) + + + sc5tboxp + Top Box (Mazooma) (Scorpion 5) (set 17) + + + sc5tboxq + Top Box (Mazooma) (Scorpion 5) (set 18) + + + sc5tpsht + Top Of The Shots (Mazooma) (Scorpion 5) (set 1) + + + sc5tpshta + Top Of The Shots (Mazooma) (Scorpion 5) (set 2) + + + sc5tpshtb + Top Of The Shots (Mazooma) (Scorpion 5) (set 3) + + + sc5tpshtc + Top Of The Shots (Mazooma) (Scorpion 5) (set 4) + + + sc5tpshtd + Top Of The Shots (Mazooma) (Scorpion 5) (set 5) + + + sc5trail + Trailblazer (Mazooma) (Scorpion 5) (set 1) + + + sc5traila + Trailblazer (Mazooma) (Scorpion 5) (set 2) + + + sc5tsmp + Trick Shot Multi Player (Bellfruit) (Scorpion 5) (set 1) + + + sc5tsmpa + Trick Shot Multi Player (Bellfruit) (Scorpion 5) (set 2) + + + sc5ttpie + Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 1) + + + sc5ttpiea + Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 2) + + + sc5ttpieb + Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 3) + + + sc5ttpiec + Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 4) + + + sc5ttpied + Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 5) + + + sc5ttpiee + Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 6) + + + sc5ttpief + Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 7) + + + sc5ttpieg + Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 8) + + + sc5ttpieh + Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 9) + + + sc5ttpiei + Take The Piece (Bellfruit) (PR1714) (Scorpion 5) (set 10) + + + sc5typ + Take Your Pick (Bellfruit) (Scorpion 5) (set 1) + + + sc5typa + Take Your Pick (Bellfruit) (Scorpion 5) (set 2) + + + sc5typb + Take Your Pick (Bellfruit) (Scorpion 5) (set 3) + + + sc5typc + Take Your Pick (Bellfruit) (Scorpion 5) (set 4) + + + sc5vamp + Vampire Payer (Qps) (Scorpion 5) (set 1) + + + sc5vampa + Vampire Payer (Qps) (Scorpion 5) (set 2) + + + sc5viper + Viper Active (Bellfruit) (Scorpion 5) (set 1) + + + sc5vipera + Viper Active (Bellfruit) (Scorpion 5) (set 2) + + + sc5vivam + Viva Mexico (Bellfruit) (Scorpion 5) (set 1) + + + sc5vivama + Viva Mexico (Bellfruit) (Scorpion 5) (set 2) + + + sc5viz + Viz (Qps) (Scorpion 5) (set 1) + + + sc5viza + Viz (Qps) (Scorpion 5) (set 2) + + + sc5vizb + Viz (Qps) (Scorpion 5) (set 3) + + + sc5vizc + Viz (Qps) (Scorpion 5) (set 4) + + + sc5wacky + Wacky Racers (Bellfruit) (Scorpion 5) (set 1) + + + sc5wackya + Wacky Racers (Bellfruit) (Scorpion 5) (set 2) + + + sc5wackyb + Wacky Racers (Bellfruit) (Scorpion 5) (set 3) + + + sc5wackyc + Wacky Racers (Bellfruit) (Scorpion 5) (set 4) + + + sc5wca + Win Can Alley (Qps) (Scorpion 5) (set 1) + + + sc5wcaa + Win Can Alley (Qps) (Scorpion 5) (set 2) + + + sc5wcab + Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 1) + + + sc5wcac + Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 1) + + + sc5wcad + Win Can Alley (Qps) (Scorpion 5) (set 3) + + + sc5wcae + Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 2) + + + sc5wcaf + Win Can Alley (Qps) (Scorpion 5) (set 4) + + + sc5wcag + Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 2) + + + sc5wcah + Win Can Alley (Qps) (Scorpion 5) (set 5) + + + sc5wcai + Win Can Alley (Qps) (Scorpion 5) (set 6) + + + sc5wcaj + Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 3) + + + sc5wcak + Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 3) + + + sc5wcal + Win Can Alley (Qps) (Scorpion 5) (set 7) + + + sc5wcam + Win Can Alley (5 pound 10p version) (Qps) (Scorpion 5) (set 4) + + + sc5wcan + Win Can Alley (Qps) (Scorpion 5) (set 8) + + + sc5wcao + Win Can Alley (5 pound 10p Arcade version) (Qps) (Scorpion 5) (set 4) + + + sc5wild + Wild Reels (Mazooma) (Scorpion 5) (set 1) + + + sc5wilda + Wild Reels (Mazooma) (Scorpion 5) (set 2) + + + sc5wldjk + Wild Jackpots (Mazooma) (Scorpion 5) (set 1) + + + sc5wldjka + Wild Jackpots (Mazooma) (Scorpion 5) (set 2) + + + sc5wok + Wok n' Roll (Bellfruit) (Scorpion 5) (set 1) + + + sc5woka + Wok n' Roll (Bellfruit) (Scorpion 5) (set 2) + + + sc5wotw + War Of The Wads (Mazooma) (Scorpion 5) (set 1) + + + sc5wotwa + War Of The Wads (Mazooma) (Scorpion 5) (set 2) + + + sc_14 + Safe Cracker (1.4) + + + sc_17 + Safe Cracker (1.7) + + + sc_17n + Safe Cracker (1.7N) + + + sc_18 + Safe Cracker (1.8) + + + sc_18n + Safe Cracker (1.8N) + + + sc_18s2 + Safe Cracker (1.8 alternate sound) + + + scandal + Scandal Mahjong (Japan 890213) + + + scandalm + Scandal Mahjong [BET] (Japan 890217) + + + scessjoe + Success Joe (World) + + + scfinals + Super Cup Finals (Ver 2.2O 1994/01/13) + + + scfinalso + Super Cup Finals (Ver 2.1O 1993/11/19) + + + scg06nt + Sega Club Golf 2006 Next Tours (Rev A) (GDX-0018A) + + + schamp + Sonic Championship (USA) + + + schaser + Space Chaser (set 1) + + + schasera + Space Chaser (set 2) + + + schaserb + Space Chaser (set 3) + + + schaserc + Space Chaser (set 4) + + + schasercv + Space Chaser (CV version - set 1) + + + scherrym + Super Cherry Master + + + schery97 + Skill Cherry '97 (ver. sc3.52) + + + schery97a + Skill Cherry '97 (ver. sc3.52c4) + + + schmeisr + Schmeiser Robo (Japan) + + + sci + Special Criminal Investigation (World set 1) + + + scia + Special Criminal Investigation (World set 2) + + + scij + Special Criminal Investigation (Japan) + + + scin + Super Special Criminal Investigation (Negro Torino hack) + + + scion + Scion + + + scionc + Scion (Cinematronics) + + + sciu + Special Criminal Investigation (US) + + + scobra + Super Cobra + + + scobrab + Super Cobra (bootleg) + + + scobras + Super Cobra (Stern Electronics) + + + scobrase + Super Cobra (Sega) + + + scontra + Super Contra + + + scontraj + Super Contra (Japan) + + + scorpion + Scorpion (set 1) + + + scorpiona + Scorpion (set 2) + + + scorpionb + Scorpion (set 3) + + + scorpionmc + Scorpion (Moon Cresta hardware) + + + scotrsht + Scooter Shooter + + + scptour + Smash Court Pro Tournament (SCP1) + + + scrabble + Scrabble (rev. F) + + + scrabbled + Scrabble (rev. F) (Protocol) + + + scram_tp + Scramble (Pinball) + + + scramb2 + Scramble (bootleg) + + + scramblb + Scramble (bootleg on Galaxian hardware) + + + scramble + Scramble + + + scramblebb + Scramble (bootleg?) + + + scramblebf + Scramble (Karateko, French bootleg) + + + scrambler + Scramble (Reben S.A. Spanish bootleg) + + + scrambles + Scramble (Stern Electronics set 1) + + + scrambles2 + Scramble (Stern Electronics set 2) + + + scrambp + Impacto (Billport S.A., Spanish bootleg of Scramble) + + + scrampt + Scramble (Petaco S.A., Spanish bootleg) + + + scramrf + Scramble (Recreativos Franco, Spanish bootleg) + + + screenp1 + Screen Play (Maygay, MV1 Video, ver. 1.9, set 1) + + + screenp1a + Screen Play (Maygay, MV1 Video, ver. 1.9, set 2) + + + screenp2 + Screen Play (Maygay, MV1 Video, ver. 1.9, Isle of Man, set 1) + + + screenp2a + Screen Play (Maygay, MV1 Video, ver. 1.9, Isle of Man, set 2) + + + screenp3 + Screen Play (Maygay, MV1 Video, SA5-082) + + + screenp3a + Screen Play (Maygay, MV1 Video, SA5-083) + + + screenp4 + Screen Play (Maygay, MV1 Video, ver. ?.?) + + + screenpl + Screen Play (Maygay, MV1 Video, ver. 4.0) + + + scregg + Scrambled Egg + + + screwloo + Screw Loose (prototype) + + + scross + Stadium Cross (World) + + + scrossu + Stadium Cross (US) + + + scrpn_l1 + Scorpion (L-1) + + + scrpn_t1 + Scorpion (T-1) + + + scud + Scud Race Twin (Australia) + + + scuda + Scud Race Twin (Export) + + + scudhamm + Scud Hammer + + + scudj + Scud Race Deluxe (Japan) + + + scudplus + Scud Race Plus (Revision A) + + + scudplusa + Scud Race Plus + + + sddz + Super Dou Di Zhu + + + sderby + Super Derby (v.07.03) + + + sderbya + Super Derby (v.10.04) + + + sdfight + SD Fighters (Korea) + + + sdgndmps + SD Gundam Psycho Salamander no Kyoui + + + sdi + SDI - Strategic Defense Initiative (Japan, old, System 16A, FD1089B 317-0027) + + + sdib + SDI - Strategic Defense Initiative (System 16B, FD1089A 317-0028) + + + sdibl + SDI - Strategic Defense Initiative (bootleg) + + + sdmg2 + Mahjong Super Da Man Guan II (China, V754C) + + + sdodgeb + Super Dodge Ball / Kunio no Nekketsu Toukyuu Densetsu + + + sdtennis + Super Doubles Tennis + + + sdungeon + Space Dungeon + + + sdwx + Sheng Dan Wu Xian + + + seabass + Sea Bass Fishing (JUET 971110 V0.001) + + + seabattl + Sea Battle (set 1) + + + seabattla + Sea Battle (set 2) + + + searchar + SAR - Search And Rescue (World) + + + searcharj + SAR - Search And Rescue (Japan) + + + searcharu + SAR - Search And Rescue (US) + + + searchey + Search Eye + + + searchp2 + Search Eye Plus V2.0 + + + searthie + Super Earth Invasion (set 3) + + + searthin + Super Earth Invasion (set 1) + + + searthina + Super Earth Invasion (set 2) + + + seawitch + Seawitch + + + seawld + Sea World (Version 1.6E Dual) + + + seawldd1 + Sea World (Version 1.6R CGA) + + + seawolf + Sea Wolf (set 1) + + + seawolf2 + Sea Wolf II + + + seawolfo + Sea Wolf (set 2) + + + secolove + Second Love (Japan 861201) + + + secondch + Second Chance + + + secretab + Secret Agent (bootleg) + + + secretag + Secret Agent (World) + + + sectionz + Section Z (set 1) + + + sectionza + Section Z (set 2) + + + sectrzon + Sector Zone + + + segajw + Golden Poker Series "Joker's Wild" (Rev. B) + + + seganinj + Sega Ninja (315-5102) + + + seganinju + Sega Ninja (not encrypted) + + + segawski + Sega Water Ski (Japan, Revision A) + + + seicross + Seicross + + + seiha + Seiha (Japan 870725) + + + seiham + Seiha [BET] (Japan 870723) + + + selfeena + Sel Feena + + + seljan2 + Return Of Sel Jan II (Japan, NM557) + + + semibase + MuHanSeungBu (SemiCom Baseball) (Korea) + + + sengekis + Sengeki Striker (Asia) + + + sengekisj + Sengeki Striker (Japan) + + + sengokmj + Sengoku Mahjong [BET] (Japan) + + + sengoku + Sengoku / Sengoku Denshou (NGM-017)(NGH-017) + + + sengoku2 + Sengoku 2 / Sengoku Denshou 2 + + + sengoku3 + Sengoku 3 / Sengoku Densho 2001 + + + sengokuh + Sengoku / Sengoku Denshou (NGH-017)(US) + + + senjyo + Senjyo + + + senknow + Sen-Know (Japan) + + + senko + Senko No Ronde (Rev A) (GDL-0030A) + + + senkoo + Senko No Ronde (GDL-0030) + + + senkosp + Senko No Ronde Special (GDL-0038) + + + senkyu + Senkyu (Japan set 1) + + + senkyua + Senkyu (Japan set 2) + + + sentetst + Sente Diagnostic Cartridge + + + setaroul + Visco Roulette + + + sexappl + Sex Appeal (Version 6.02) + + + sextriv + Sex Triv + + + sextriv1 + Sexual Trivia (Version 1.02SB, set 1) + + + sextriv2 + Sexual Trivia (Version 1.02SB, set 2) + + + sexyboom + Sexy Boom + + + sexygal + Sexy Gal (Japan 850501 SXG 1-00) + + + sexyparo + Sexy Parodius (ver JAA) + + + sexyparoa + Sexy Parodius (ver AAA) + + + sf + Street Fighter (World, Analog buttons) + + + sf2 + Street Fighter II: The World Warrior (World 910522) + + + sf2049 + San Francisco Rush 2049 + + + sf2049se + San Francisco Rush 2049: Special Edition + + + sf2049te + San Francisco Rush 2049: Tournament Edition + + + sf2acc + Street Fighter II': Champion Edition (Accelerator!, bootleg, set 1) + + + sf2acca + Street Fighter II': Champion Edition (Accelerator!, bootleg, set 2) + + + sf2accp2 + Street Fighter II': Champion Edition (Accelerator Pt.II, bootleg) + + + sf2amf + Street Fighter II': Champion Edition (Alpha Magic-F, bootleg) + + + sf2amf2 + Street Fighter II': Champion Edition (L735 Test Rom, bootleg) + + + sf2bhh + Street Fighter II': Champion Edition (Hung Hsi, bootleg) + + + sf2ce + Street Fighter II': Champion Edition (World 920513) + + + sf2ceblp + Street Fighter II': Champion Edition (protected bootleg on non-dash board) + + + sf2ceea + Street Fighter II': Champion Edition (World 920313) + + + sf2ceja + Street Fighter II': Champion Edition (Japan 920322) + + + sf2cejb + Street Fighter II': Champion Edition (Japan 920513) + + + sf2cejc + Street Fighter II': Champion Edition (Japan 920803) + + + sf2ceua + Street Fighter II': Champion Edition (USA 920313) + + + sf2ceub + Street Fighter II': Champion Edition (USA 920513) + + + sf2ceuc + Street Fighter II': Champion Edition (USA 920803) + + + sf2dkot2 + Street Fighter II': Champion Edition (Double K.O. Turbo II, bootleg) + + + sf2dongb + Street Fighter II': Champion Edition (Dongfang Bubai protection, bootleg) + + + sf2eb + Street Fighter II: The World Warrior (World 910214) + + + sf2ebbl + Street Fighter II: The World Warrior (TAB Austria, bootleg, set 1) + + + sf2ed + Street Fighter II: The World Warrior (World 910318) + + + sf2ee + Street Fighter II: The World Warrior (World 910228) + + + sf2hf + Street Fighter II': Hyper Fighting (World 921209) + + + sf2hfj + Street Fighter II' Turbo: Hyper Fighting (Japan 921209) + + + sf2hfu + Street Fighter II': Hyper Fighting (USA 921209) + + + sf2j + Street Fighter II: The World Warrior (Japan 911210) + + + sf2ja + Street Fighter II: The World Warrior (Japan 910214) + + + sf2jc + Street Fighter II: The World Warrior (Japan 910306) + + + sf2jf + Street Fighter II: The World Warrior (Japan 910411) + + + sf2jh + Street Fighter II: The World Warrior (Japan 910522) + + + sf2jl + Street Fighter II: The World Warrior (Japan 920312) + + + sf2koryu + Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg) + + + sf2m1 + Street Fighter II': Champion Edition (M1, bootleg) + + + sf2m2 + Street Fighter II': Champion Edition (M2, bootleg) + + + sf2m3 + Street Fighter II': Champion Edition (M3, bootleg) + + + sf2m4 + Street Fighter II': Champion Edition (M4, bootleg) + + + sf2m5 + Street Fighter II': Champion Edition (M5, bootleg) + + + sf2m6 + Street Fighter II': Champion Edition (M6, bootleg) + + + sf2m7 + Street Fighter II': Champion Edition (M7, bootleg) + + + sf2m8 + Street Fighter II': Champion Edition (M8, bootleg) + + + sf2mdt + Street Fighter II': Magic Delta Turbo (bootleg, set 1) + + + sf2mdta + Street Fighter II': Magic Delta Turbo (bootleg, set 2) + + + sf2mdtb + Street Fighter II': Magic Delta Turbo (bootleg, set 3) + + + sf2qp1 + Street Fighter II: The World Warrior (Quicken Pt-I, bootleg) + + + sf2rb + Street Fighter II': Champion Edition (Rainbow, bootleg, set 1) + + + sf2rb2 + Street Fighter II': Champion Edition (Rainbow, bootleg, set 2) + + + sf2rb3 + Street Fighter II': Champion Edition (Rainbow, bootleg, set 3) + + + sf2red + Street Fighter II': Champion Edition (Red Wave, bootleg) + + + sf2rk + Street Fighter II: The World Warrior (RK, bootleg) + + + sf2stt + Street Fighter II: The World Warrior (TAB Austria, bootleg, set 2) + + + sf2thndr + Street Fighter II: The World Warrior (Thunder Edition, bootleg) + + + sf2ua + Street Fighter II: The World Warrior (USA 910206) + + + sf2ub + Street Fighter II: The World Warrior (USA 910214) + + + sf2uc + Street Fighter II: The World Warrior (USA 910306) + + + sf2ud + Street Fighter II: The World Warrior (USA 910318) + + + sf2ue + Street Fighter II: The World Warrior (USA 910228) + + + sf2uf + Street Fighter II: The World Warrior (USA 910411) + + + sf2ug + Street Fighter II: The World Warrior (USA 910522, Rev. G) + + + sf2ui + Street Fighter II: The World Warrior (USA 910522, Rev. I) + + + sf2uk + Street Fighter II: The World Warrior (USA 911101) + + + sf2v004 + Street Fighter II': Champion Edition (V004, bootleg) + + + sf2yyc + Street Fighter II': Champion Edition (YYC, bootleg) + + + sf_l1 + Slugfest (L-1) + + + sfa + Street Fighter Alpha: Warriors' Dreams (Euro 950727) + + + sfa2 + Street Fighter Alpha 2 (Euro 960229) + + + sfa2u + Street Fighter Alpha 2 (USA 960430) + + + sfa2ur1 + Street Fighter Alpha 2 (USA 960306) + + + sfa3 + Street Fighter Alpha 3 (Euro 980904) + + + sfa3b + Street Fighter Alpha 3 (Brazil 980629) + + + sfa3h + Street Fighter Alpha 3 (Hispanic 980904) + + + sfa3hr1 + Street Fighter Alpha 3 (Hispanic 980629) + + + sfa3u + Street Fighter Alpha 3 (USA 980904) + + + sfa3ud + Street Fighter Alpha 3 (USA 980904 Phoenix Edition) (bootleg) + + + sfa3ur1 + Street Fighter Alpha 3 (USA 980629) + + + sfad + Street Fighter Alpha: Warriors' Dreams (Euro 950727 Phoenix Edition) (bootleg) + + + sfar1 + Street Fighter Alpha: Warriors' Dreams (Euro 950718) + + + sfar2 + Street Fighter Alpha: Warriors' Dreams (Euro 950627) + + + sfar3 + Street Fighter Alpha: Warriors' Dreams (Euro 950605) + + + sfau + Street Fighter Alpha: Warriors' Dreams (USA 950627) + + + sfbonus + Skill Fruit Bonus (Version 1.9R, set 1) + + + sfbonusd1 + Skill Fruit Bonus (Version 1.9R, set 2) + + + sfbonuso + Skill Fruit Bonus (Version 1.7) + + + sfbonuso2 + Skill Fruit Bonus (Version 1.6) + + + sfbonusv1 + Skill Fruit Bonus (Version 1.9R Dual) + + + sfcbox + Super Famicom Box BIOS + + + sfchamp + Super Football Champ (Ver 2.5O) + + + sfchampj + Super Football Champ (Ver 2.4J) + + + sfchampo + Super Football Champ (Ver 2.4O) + + + sfchampu + Super Football Champ (Ver 2.4A) + + + sfex + Street Fighter EX (Euro 961219) + + + sfex2 + Street Fighter EX2 (USA 980526) + + + sfex2a + Street Fighter EX2 (Asia 980312) + + + sfex2h + Street Fighter EX2 (Hispanic 980312) + + + sfex2j + Street Fighter EX2 (Japan 980312) + + + sfex2p + Street Fighter EX2 Plus (USA 990611) + + + sfex2pa + Street Fighter EX2 Plus (Asia 990611) + + + sfex2ph + Street Fighter EX2 Plus (Hispanic 990611) + + + sfex2pj + Street Fighter EX2 Plus (Japan 990611) + + + sfexa + Street Fighter EX (Asia 961219) + + + sfexj + Street Fighter EX (Japan 961130) + + + sfexp + Street Fighter EX Plus (USA 970407) + + + sfexpj + Street Fighter EX Plus (Japan 970407) + + + sfexpj1 + Street Fighter EX Plus (Japan 970311) + + + sfexpu1 + Street Fighter EX Plus (USA 970311) + + + sfexu + Street Fighter EX (USA 961219) + + + sfight + Sonic the Fighters (Japan) + + + sfight2 + Street Fighter II + + + sfight2a + Street Fighter II (rev.1) + + + sfight2b + Street Fighter II (rev.2) + + + sfiii + Street Fighter III: New Generation (Euro 970204) + + + sfiii2 + Street Fighter III 2nd Impact: Giant Attack (USA 970930) + + + sfiii2j + Street Fighter III 2nd Impact: Giant Attack (Japan 970930) + + + sfiii2n + Street Fighter III 2nd Impact: Giant Attack (Asia 970930, NO CD) + + + sfiii3 + Street Fighter III 3rd Strike: Fight for the Future (Euro 990608) + + + sfiii3n + Street Fighter III 3rd Strike: Fight for the Future (Japan 990608, NO CD) + + + sfiii3nr1 + Street Fighter III 3rd Strike: Fight for the Future (Japan 990512, NO CD) + + + sfiii3r1 + Street Fighter III 3rd Strike: Fight for the Future (Euro 990512) + + + sfiii3u + Street Fighter III 3rd Strike: Fight for the Future (USA 990608) + + + sfiii3ur1 + Street Fighter III 3rd Strike: Fight for the Future (USA 990512) + + + sfiiia + Street Fighter III: New Generation (Asia 970204) + + + sfiiih + Street Fighter III: New Generation (Hispanic 970204) + + + sfiiij + Street Fighter III: New Generation (Japan 970204) + + + sfiiin + Street Fighter III: New Generation (Asia 970204, NO CD, bios set 1) + + + sfiiina + Street Fighter III: New Generation (Asia 970204, NO CD, bios set 2) + + + sfiiiu + Street Fighter III: New Generation (USA 970204) + + + sfish2 + Sport Fishing 2 (UET 951106 V1.10e) + + + sfish2j + Sport Fishing 2 (J 951201 V1.100) + + + sfj + Street Fighter (Japan) (protected) + + + sfkick + Super Free Kick (set 1) + + + sfkicka + Super Free Kick (set 2) + + + sflush + Straight Flush + + + sfootbal + Street Football (11/12/86) + + + sformula + Super Formula (Japan) + + + sfp + Street Fighter (prototype) + + + sfposeid + Sea Fighter Poseidon + + + sfruitb + Super Fruit Bonus (Version 2.5E Dual) + + + sfruitbb1 + Super Fruit Bonus (Version 2.5R, set 1) + + + sfruitbb2 + Super Fruit Bonus (Version 2.0LT, set 1) + + + sfruitbbh + Super Fruit Bonus (Version 2.2B, set 1) + + + sfruitbd1 + Super Fruit Bonus (Version 2.5R, set 2) + + + sfruitbd2 + Super Fruit Bonus (Version 2.0LT, set 2) + + + sfruitbdh + Super Fruit Bonus (Version 2.2B, set 2) + + + sfruitbh + Super Fruit Bonus (Version 2.2EB Dual) + + + sfruitbo + Super Fruit Bonus (Version 2.0) + + + sfruitbo2 + Super Fruit Bonus (Version 1.80XT) + + + sfruitboh + Super Fruit Bonus (Version 2.0B) + + + sfruitbv1 + Super Fruit Bonus (Version 2.5R Dual) + + + sfruitbv2 + Super Fruit Bonus (Version 2.0LT Dual) + + + sfruitbvh + Super Fruit Bonus (Version 2.2B Dual) + + + sfrush + San Francisco Rush + + + sfrushrk + San Francisco Rush: The Rock + + + sftm + Street Fighter: The Movie (v1.12) + + + sftm110 + Street Fighter: The Movie (v1.10) + + + sftm111 + Street Fighter: The Movie (v1.11) + + + sftmj + Street Fighter: The Movie (v1.12N, Japan) + + + sfu + Street Fighter (US, set 1) + + + sfua + Street Fighter (US, set 2) (protected) + + + sfx + SF-X + + + sfz2a + Street Fighter Zero 2 (Asia 960227) + + + sfz2ad + Street Fighter Zero 2 (Asia 960227 Phoenix Edition) (bootleg) + + + sfz2al + Street Fighter Zero 2 Alpha (Asia 960826) + + + sfz2alb + Street Fighter Zero 2 Alpha (Brazil 960813) + + + sfz2ald + Street Fighter Zero 2 Alpha (Asia 960826 Phoenix Edition) (bootleg) + + + sfz2alh + Street Fighter Zero 2 Alpha (Hispanic 960813) + + + sfz2alj + Street Fighter Zero 2 Alpha (Japan 960805) + + + sfz2b + Street Fighter Zero 2 (Brazil 960531) + + + sfz2br1 + Street Fighter Zero 2 (Brazil 960304) + + + sfz2h + Street Fighter Zero 2 (Hispanic 960304) + + + sfz2j + Street Fighter Zero 2 (Japan 960430) + + + sfz2jd + Street Fighter Zero 2 (Japan 960227 Phoenix Edition) (bootleg) + + + sfz2jr1 + Street Fighter Zero 2 (Japan 960227) + + + sfz2n + Street Fighter Zero 2 (Oceania 960229) + + + sfz3a + Street Fighter Zero 3 (Asia 980904) + + + sfz3ar1 + Street Fighter Zero 3 (Asia 980701) + + + sfz3j + Street Fighter Zero 3 (Japan 980904) + + + sfz3jr1 + Street Fighter Zero 3 (Japan 980727) + + + sfz3jr2 + Street Fighter Zero 3 (Japan 980629) + + + sfz3jr2d + Street Fighter Zero 3 (Japan 980629 Phoenix Edition) (bootleg) + + + sfz3ugd + Street Fighter Zero 3 Upper (GDL-0002) + + + sfza + Street Fighter Zero (Asia 950627) + + + sfzar1 + Street Fighter Zero (Asia 950605) + + + sfzb + Street Fighter Zero (Brazil 951109) + + + sfzbr1 + Street Fighter Zero (Brazil 950727) + + + sfzh + Street Fighter Zero (Hispanic 950718) + + + sfzhr1 + Street Fighter Zero (Hispanic 950627) + + + sfzj + Street Fighter Zero (Japan 950727) + + + sfzjr1 + Street Fighter Zero (Japan 950627) + + + sfzjr2 + Street Fighter Zero (Japan 950605) + + + sgemf + Super Gem Fighter Mini Mix (USA 970904) + + + sgemfa + Super Gem Fighter: Mini Mix (Asia 970904) + + + sgemfd + Super Gem Fighter Mini Mix (USA 970904 Phoenix Edition) (bootleg) + + + sgemfh + Super Gem Fighter: Mini Mix (Hispanic 970904) + + + sgladiat + Gladiator 1984 + + + sgmast + Super Masters Golf (World?, Floppy Based, FD1094 317-0058-05d?) + + + sgmastc + Jumbo Ozaki Super Masters Golf (World, Floppy Based, FD1094 317-0058-05c) + + + sgmastj + Jumbo Ozaki Super Masters Golf (Japan, Floppy Based, FD1094 317-0058-05b) + + + sgmt1 + Super Game Mega Type 1 + + + sgnascar + NASCAR Racing + + + sgsafari + Super Gran Safari (ver 3.11) + + + sgt24h + Super GT 24h + + + sgtetris + Sega Tetris + + + sgunner + Steel Gunner (Rev B) + + + sgunner2 + Steel Gunner 2 (US) + + + sgunner2j + Steel Gunner 2 (Japan, Rev A) + + + sgunnerj + Steel Gunner (Japan) + + + sgyxz + Warriors of Fate ('sgyxz' bootleg) + + + shabdama + LD Mahjong #4 Shabon-Dama + + + shackled + Shackled (US) + + + shadfgtr + Shadow Fighters + + + shadfrce + Shadow Force (US Version 2) + + + shadfrcej + Shadow Force (Japan Version 3) + + + shadfrcejv2 + Shadow Force (Japan Version 2) + + + shadowld + Shadowland (YD3) + + + shadoww + Shadow Warriors (World, set 1) + + + shadowwa + Shadow Warriors (World, set 2) + + + shaktamb + Shakatto Tambourine Cho Powerup Chu 2K1 AUT (GDS-0016) + + + shaktmsp + Shakatto Tambourine 2K1 SPR (GDS-0013) + + + shangha2 + Shanghai II (Japan, set 1) + + + shangha2a + Shanghai II (Japan, set 2) + + + shangha3 + Shanghai III (World) + + + shangha3j + Shanghai III (Japan) + + + shangha3u + Shanghai III (US) + + + shanghai + Shanghai (World) + + + shanghaij + Shanghai (Japan) + + + shanghss + Shanghai Shoryu Sairin (V2.03J) + + + shangkid + Shanghai Kid + + + shangon + Super Hang-On (sitdown/upright, unprotected) + + + shangon1 + Super Hang-On (mini ride-on?, FD1089B 317-0034) + + + shangon2 + Super Hang-On (mini ride-on, Rev A, FD1089B 317-0034) + + + shangon3 + Super Hang-On (sitdown/upright, FD1089B 317-0034) + + + shangonle + Limited Edition Hang-On + + + shangonrb + Super Hang-On (bootleg) + + + shangonro + Super Hang-On (ride-on, Japan, FD1094 317-0038) + + + shangril + Dengen Tenshi Taisen Janshi Shangri-la (JPN, USA, EXP, KOR, AUS) + + + shangtou + Shanghai Sangokuhai Tougi (Ver 2.01J) + + + shanhigw + Shanghai - The Great Wall / Shanghai Triple Threat (JUE 950623 V1.005) + + + shaolinb + Shao-lin's Road (set 2) + + + shaolins + Shao-lin's Road (set 1) + + + shaqattq + Shaq Attaq (rev.5) + + + shaqattq2 + Shaq Attaq (rev.2) + + + shark + Shark + + + sharkatt + Shark Attack + + + sharkjaw + Shark JAWS [TTL] + + + sharkpy + Shark Party (Italy, v1.3) + + + sharkpya + Shark Party (Italy, v1.6) + + + sharkpye + Shark Party (English, Alpha license) + + + sharkt + Shark (Taito) + + + sharrier + Space Harrier (Rev A, 8751 315-5163A) + + + sharrier1 + Space Harrier (8751 315-5163) + + + shdancbl + Shadow Dancer (bootleg) + + + shdancer + Shadow Dancer (World) + + + shdancer1 + Shadow Dancer (US) + + + shdancerj + Shadow Dancer (Japan) + + + sheriff + Sheriff + + + shfin_l1 + Shuffle Inn (Shuffle) (L-1) + + + shienryu + Shienryu (JUET 961226 V1.000) + + + shikgam2 + Shikigami No Shiro II / The Castle of Shikigami II (GDL-0021) + + + shikiga3 + Shikigami no Shiro III (v2.06J) + + + shikigam + Shikigami no Shiro (V2.03J) + + + shimpact + Super High Impact (rev LA1 09/30/91) + + + shimpactp4 + Super High Impact (prototype, rev 4.0 09/10/91) + + + shimpactp5 + Super High Impact (prototype, rev 5.0 09/15/91) + + + shimpactp6 + Super High Impact (prototype, rev 6.0 09/23/91) + + + shinfz + Shinobi / FZ-2006 (Korean System 16 bootleg) (ISG Selection Master Type 2006) + + + shinobi + Shinobi (set 6, System 16A, unprotected) + + + shinobi1 + Shinobi (set 1, System 16A, FD1094 317-0050) + + + shinobi2 + Shinobi (set 2, System 16B, FD1094 317-0049) + + + shinobi3 + Shinobi (set 3, System 16B, MC-8123B 317-0054) + + + shinobi4 + Shinobi (set 4, System 16B, MC-8123B 317-0054) + + + shinobi5 + Shinobi (set 5, System 16B, unprotected) + + + shinoblb + Shinobi (Beta bootleg) + + + shinobld + Shinobi (Datsu bootleg) + + + shinobls + Shinobi (Star bootleg, System 16A) + + + shippumd + Shippu Mahou Daisakusen (Japan) + + + shiryu2 + Strider Hiryu 2 (Japan 991213) + + + shisen + Shisensho - Joshiryo-Hen (Japan) + + + shisen2 + Shisensho II + + + shngmtkb + Shanghai Matekibuyuu + + + shock + Shock + + + shocking + Shocking + + + shockingk + Shocking (Korea) + + + shocktr2 + Shock Troopers - 2nd Squad + + + shocktro + Shock Troopers (set 1) + + + shocktroa + Shock Troopers (set 2) + + + shogwarr + Shogun Warriors (World) + + + shogwarru + Shogun Warriors (US) + + + shollow + Satan's Hollow (set 1) + + + shollow2 + Satan's Hollow (set 2) + + + shootbul + Shoot the Bull + + + shootgal + Shooting Gallery + + + shootopl + Shootout Pool + + + shootout + Shoot Out (US) + + + shootoutb + Shoot Out (Korean Bootleg) + + + shootoutj + Shoot Out (Japan) + + + shootpl + Shootout Pool (JPN, USA, KOR, AUS) / Shootout Pool Prize (EXP) + + + shootplm + Shootout Pool Medal + + + shougi + Shougi + + + shougi2 + Shougi 2 + + + showdown + Showdown (version 5.0) + + + showhanc + Wang Pai Dui Jue (China) + + + showhand + Show Hand (Italy) + + + showqn + Show Queen (Konami Endeavour) + + + shpeng + Sea Hunter Penguin + + + shpinxii + Sphinx II (Russia) (Atronic) + + + shrike + Shrike Avenger (prototype) + + + shrknew + Sharkey's Shootout (ARM7 Sound Board) + + + shrky_207 + Sharkey's Shootout (2.07) + + + shrkyfr + Sharkey's Shootout (2.11 France) + + + shrkyfr_207 + Sharkey's Shootout (2.07 France) + + + shrkygr + Sharkey's Shootout (2.11 Germany) + + + shrkygr_207 + Sharkey's Shootout (2.07 Germany) + + + shrkyit + Sharkey's Shootout (2.11 Italy) + + + shrkyit_207 + Sharkey's Shootout (2.07 Italy) + + + shrkysht + Sharkey's Shootout (2.11) + + + shtngmst + Shooting Master (8751 315-5159) + + + shtngmste + Shooting Master (EVG, 8751 315-5159a) + + + shtrider + Shot Rider + + + shtridera + Shot Rider (Sigma license) + + + shtstar + Shooting Star + + + shtzone + Shooting Zone System BIOS + + + shuffle + Shuffleboard + + + shufshot + Shuffleshot (v1.40) + + + shufshot137 + Shuffleshot (v1.37) + + + shufshot139 + Shuffleshot (v1.39) + + + shuttlei + Shuttle Invader + + + shuuz + Shuuz (version 8.0) + + + shuuz2 + Shuuz (version 7.1) + + + sia2650 + Super Invader Attack (bootleg of The Invaders) + + + sianniv + Space Invaders Anniversary (V2.02J) + + + sichuan2 + Sichuan II (hack, set 1) + + + sichuan2a + Sichuan II (hack, set 2) + + + sicv + Space Invaders (CV Version) + + + sidampkr + unknown Sidam Poker + + + sidearms + Side Arms - Hyper Dyne (World) + + + sidearmsj + Side Arms - Hyper Dyne (Japan) + + + sidearmsr + Side Arms - Hyper Dyne (US) + + + sidebs + Side by Side (Ver 2.7 J) + + + sidebs2 + Side by Side 2 (Ver 2.6 A) + + + sidebs2j + Side by Side 2 Evoluzione (Ver 2.4 J) + + + sidebsja + Side by Side (Ver 2.5 J) + + + sidepckt + Side Pocket (World) + + + sidepcktb + Side Pocket (bootleg) + + + sidepcktj + Side Pocket (Japan) + + + sidetrac + Side Trak + + + sidewndr + Sidewinder + + + sigma2k + Sigma Poker 2000 + + + sigmapkr + Sigma Poker + + + silentd + Silent Dragon (World) + + + silentdj + Silent Dragon (Japan) + + + silentdu + Silent Dragon (US) + + + silkroad + The Legend of Silkroad + + + silkroada + The Legend of Silkroad (larger ROMs) + + + silkworm + Silk Worm (World) + + + silkwormj + Silk Worm (Japan) + + + silverga + Silver Game + + + silvland + Silver Land + + + silvmil + Silver Millennium + + + silvslug + Silver Slugger + + + simp_a20 + The Simpsons (2.0) + + + simp_a27 + The Simpsons (2.7) + + + simpbowl + Simpsons Bowling (GQ829 UAA) + + + simpnew + Simpsons Pinball Party, The (ARM7 Sound Board) + + + simpprtf + Simpsons Pinball Party, The (5.00 France) + + + simpprtf_204 + Simpsons Pinball Party, The (2.04 France) + + + simpprtf_400 + Simpsons Pinball Party, The (4.00 France) + + + simpprtg + Simpsons Pinball Party, The (5.00 Germany) + + + simpprtg_400 + Simpsons Pinball Party, The (4.00 Germany) + + + simpprti + Simpsons Pinball Party, The (5.00 Italy) + + + simpprti_204 + Simpsons Pinball Party, The (2.04 Italy) + + + simpprti_400 + Simpsons Pinball Party, The (4.00 Italy) + + + simpprtl + Simpsons Pinball Party, The (5.00 Spain) + + + simpprtl_204 + Simpsons Pinball Party, The (2.04 Spain) + + + simpprtl_400 + Simpsons Pinball Party, The (4.00 Spain) + + + simpprty + Simpsons Pinball Party, The (5.00) + + + simpprty_204 + Simpsons Pinball Party, The (2.04) + + + simpprty_400 + Simpsons Pinball Party, The (4.00) + + + simpsons + The Simpsons (4 Players World, set 1) + + + simpsons2p + The Simpsons (2 Players World, set 1) + + + simpsons2p2 + The Simpsons (2 Players World, set 2) + + + simpsons2pa + The Simpsons (2 Players Asia) + + + simpsons2pj + The Simpsons (2 Players Japan) + + + simpsons4pa + The Simpsons (4 Players World, set 2) + + + sinbad + Sinbad + + + sinbadn + Sinbad (Norway) + + + sindbadm + Sindbad Mystery + + + sinistar + Sinistar (revision 3) + + + sinistar1 + Sinistar (prototype version) + + + sinistar2 + Sinistar (revision 2) + + + sinvasn + Space Invasion (Europe) + + + sinvasnb + Space Invasion (bootleg) + + + sinvemag + Super Invaders (bootleg set 2) + + + sinvzen + Super Invaders (Zenitone-Microsec) + + + sisv + Space Invaders (SV Version rev 4) + + + sisv1 + Space Invaders (SV Version rev 1) + + + sisv2 + Space Invaders (SV Version rev 2) + + + sisv3 + Space Invaders (SV Version rev 3) + + + sitv + Space Invaders (TV Version rev 2) + + + sitv1 + Space Invaders (TV Version rev 1) + + + sjcd2kx3 + Super Joly 2000 - 3x + + + sjryuko + Sukeban Jansi Ryuko (set 2, System 16B, FD1089B 317-5021) + + + sjryuko1 + Sukeban Jansi Ryuko (set 1, System 16A, FD1089B 317-5021) + + + skatebll + Skateball + + + skatekds + Vs. Skate Kids. (Graphic hack of Super Mario Bros.) + + + skattv + Skat TV + + + skattva + Skat TV (version TS3) + + + skeetsht + Skeet Shot + + + skelagon + Skelagon + + + skflight + Skill Flight + + + skichamp + Ski Champ + + + skijump + Ski Jump + + + skill98 + Skill '98 (ver. s98-1.33) + + + skilldrp + Skill Drop Georgia (Ver. G1.0S) + + + skimaxx + Skimaxx + + + skingame + The Irem Skins Game (US set 1) + + + skingame2 + The Irem Skins Game (US set 2) + + + skisuprg + Sega Ski Super G + + + skns + Super Kaneko Nova System BIOS + + + skullfng + Skull Fang (World) + + + skullfngj + Skull Fang (Japan) + + + skullxbo + Skull & Crossbones (rev 5) + + + skullxbo1 + Skull & Crossbones (rev 1) + + + skullxbo2 + Skull & Crossbones (rev 2) + + + skullxbo3 + Skull & Crossbones (rev 3) + + + skullxbo4 + Skull & Crossbones (rev 4) + + + skyadvnt + Sky Adventure (World) + + + skyadvntj + Sky Adventure (Japan) + + + skyadvntu + Sky Adventure (US) + + + skyalert + Sky Alert + + + skyarmy + Sky Army + + + skybase + Sky Base + + + skybump + Sky Bumper + + + skychut + Sky Chuter + + + skydest + Sky Destroyer (Japan) + + + skydiver + Sky Diver + + + skyfox + Sky Fox + + + skykid + Sky Kid (new version) + + + skykidd + Sky Kid (CUS60 version) + + + skykiddx + Sky Kid Deluxe (set 1) + + + skykiddxo + Sky Kid Deluxe (set 2) + + + skykido + Sky Kid (old version) + + + skykids + Sky Kid (Sipem) + + + skylancr + Sky Lancer + + + skylancre + Sky Lancer (Esco Trading Co license) + + + skylncr + Sky Lancer (Bordun, version U450C) + + + skylove + Sky Love + + + skyraid + Sky Raider + + + skyraidr + Sky Raider (Uniwars bootleg) + + + skyrobo + Sky Robo + + + skyshark + Sky Shark (US) + + + skyskipr + Sky Skipper + + + skysmash + Sky Smasher + + + skysoldr + Sky Soldiers (US) + + + skysoldrbl + Sky Soldiers (bootleg) + + + skytargt + Sky Target + + + skywolf + Sky Wolf (set 1) + + + skywolf2 + Sky Wolf (set 2) + + + skywolf3 + Sky Wolf (set 3) + + + sl2007 + Shooting Love 2007 + + + slamdnk2 + Slam Dunk 2 (ver JAA) + + + slammast + Saturday Night Slam Masters (World 930713) + + + slammastu + Saturday Night Slam Masters (USA 930713) + + + slampic + Saturday Night Slam Masters (bootleg with PIC16c57) + + + slapfigh + Slap Fight (Japan set 1) + + + slapfigha + Slap Fight (Japan set 2) + + + slapfighb1 + Slap Fight (bootleg set 1) + + + slapfighb2 + Slap Fight (bootleg set 2) + + + slapfighb3 + Slap Fight (bootleg set 3) + + + slapshot + Slap Shot (Japan) + + + slasho + Slashout (JPN, USA, EXP, KOR, AUS) + + + slashout + Slashout (GDS-0004) + + + slbmania + Silverball Mania + + + sleicpin + Sleic Pin Ball + + + slikshot + Slick Shot (V2.2) + + + slikshot16 + Slick Shot (V1.6) + + + slikshot17 + Slick Shot (V1.7) + + + slipstrm + Slip Stream (Brazil 950515) + + + slipstrmh + Slip Stream (Hispanic 950515) + + + slither + Slither (set 1) + + + slithera + Slither (set 2) + + + sliver + Sliver + + + slmdunkj + Slam Dunk (ver JAA 1993 10.8) + + + sloco93 + Super Loco 93 (Spanish, set 1) + + + sloco93a + Super Loco 93 (Spanish, set 2) + + + slotcarn + Slot Carnival + + + slotsnl + Slots (Dutch, Game Card 95-750-368) + + + slqz2 + Mahjong Shuang Long Qiang Zhu 2 (VS203J) + + + slrasslt + Solar Assault (ver UAA) + + + sltblgp1 + Slots (Belgian Cash, Game Card 95-752-008) + + + sltblgpo + Slots (Belgian Cash, Game Card 95-750-938) + + + sltblgtk + Slots (Belgian Token, Game Card 95-750-943) + + + slyspy + Sly Spy (US revision 3) + + + slyspy2 + Sly Spy (US revision 2) + + + sm_ngacc + Nudge Accumulator (Summit Coin) + + + sm_ultng + Ultimate Nudge (Summit Coin) + + + smarinef + Sega Marine Fishing + + + smash + Smash (Crash bootleg) + + + smashtv + Smash T.V. (rev 8.00) + + + smashtv3 + Smash T.V. (rev 3.01) + + + smashtv4 + Smash T.V. (rev 4.00) + + + smashtv5 + Smash T.V. (rev 5.00) + + + smashtv6 + Smash T.V. (rev 6.00) + + + smb + Super Mario Brothers + + + smb1 + Super Mario Brothers (rev.1) + + + smb2 + Super Mario Brothers (rev.2) + + + smb3 + Super Mario Brothers (rev.3) + + + smbmush + Super Mario Brothers Mushroom World + + + smbomb + Super Muscle Bomber: The International Blowout (Japan 940831) + + + smbombr1 + Super Muscle Bomber: The International Blowout (Japan 940808) + + + smgolf + Vs. Stroke & Match Golf (Men Version, set GF4-2 F) + + + smgolfb + Vs. Stroke & Match Golf (Men Version, set GF4-2 ?) + + + smgolfj + Vs. Stroke & Match Golf (Men Version) (Japan, set GF3 B) + + + smgp + Super Monaco GP (World, Rev B, FD1094 317-0126a) + + + smgp5 + Super Monaco GP (World, FD1094 317-0126) + + + smgp6 + Super Monaco GP (World, Rev A, FD1094 317-0126a) + + + smgpj + Super Monaco GP (Japan, Rev B, FD1094 317-0124a) + + + smgpja + Super Monaco GP (Japan, Rev A, FD1094 317-0124a) + + + smgpu + Super Monaco GP (US, Rev C, FD1094 317-0125a) + + + smgpu1 + Super Monaco GP (US, Rev B, FD1094 317-0125a) + + + smgpu2 + Super Monaco GP (US, Rev A, FD1094 317-0125a) + + + smleague + Super Major League (U 960108 V1.000) + + + smlg99 + Super Major League '99 + + + smman + Six Million Dollar Man + + + smooncrs + Super Moon Cresta + + + smoto16 + Super Moto (Italy, v1.6) + + + smoto20 + Super Rider (Italy, v2.0) + + + smshilo + HI-LO Double Up Joker Poker + + + snake + Snake Machine + + + snakepit + Snake Pit + + + snakjack + Snacks'n Jaxson + + + snapjack + Snap Jack + + + snapper + Snapper (Korea) + + + sncwgltd + Sonic Wings Limited (Japan) + + + sngkace + Sengoku Ace (Japan) + + + snlad + Snake & Ladders + + + snookr10 + Snooker 10 (Ver 1.11) + + + snowboar + Snow Board Championship (Version 2.1) + + + snowboara + Snow Board Championship (Version 2.0) + + + snowbro2 + Snow Bros. 2 - With New Elves / Otenki Paradise + + + snowbro2b + Snow Bros. 2 - With New Elves / Otenki Paradise (bootleg) + + + snowbro3 + Snow Brothers 3 - Magical Adventure + + + snowbros + Snow Bros. - Nick & Tom (set 1) + + + snowbrosa + Snow Bros. - Nick & Tom (set 2) + + + snowbrosb + Snow Bros. - Nick & Tom (set 3) + + + snowbrosc + Snow Bros. - Nick & Tom (set 4) + + + snowbrosd + Snow Bros. - Nick & Tom (Dooyong license) + + + snowbrosj + Snow Bros. - Nick & Tom (Japan) + + + snowbroswb + Snow Bros. - Nick & Tom (The Winter Bobble hardware bootleg) + + + snspares + Strikes n' Spares (rev.6) + + + snspares1 + Strikes n' Spares (rev.1) + + + socbrawl + Soccer Brawl (NGM-031) + + + socbrawlh + Soccer Brawl (NGH-031) + + + soccer + Atari Soccer + + + soccernw + Soccer New (Italian) + + + soccerss + Soccer Superstars (ver EAA) + + + soccerssa + Soccer Superstars (ver AAA) + + + soccerssj + Soccer Superstars (ver JAC) + + + soccerssja + Soccer Superstars (ver JAA) + + + socrking + Soccer Kings + + + socrkingg + Soccer Kings (German speech) + + + socrkingi + Soccer Kings (Italian speech) + + + sogeki + Sogeki (ver JAA) + + + sokonuke + Sokonuke Taisen Game (Japan) + + + sokyugrt + Soukyugurentai / Terra Diver (JUET 960821 V1.000) + + + solar_l2 + Solar Fire (L-2) + + + solarfox + Solar Fox (upright) + + + solaride + Solar Ride + + + solarq + Solar Quest + + + solarwap + Solar Wars (Sonic) + + + solarwar + Solar-Warrior (US) + + + soldam + Soldam + + + soldamj + Soldam (Japan) + + + soldivid + Sol Divide - The Sword Of Darkness + + + solfight + Solar Fight (bootleg of Ozma Wars) + + + solfigtr + Solitary Fighter (World) + + + solomon + Solomon's Key (US) + + + solomonj + Solomon no Kagi (Japan) + + + solvalou + Solvalou (Japan) + + + sonic + SegaSonic The Hedgehog (Japan, rev. C) + + + sonicbom + Sonic Boom (FD1094 317-0053) + + + sonicp + SegaSonic The Hedgehog (Japan, prototype) + + + sonicwi + Sonic Wings (Japan) + + + sonicwi2 + Aero Fighters 2 / Sonic Wings 2 + + + sonicwi3 + Aero Fighters 3 / Sonic Wings 3 + + + sonofphx + Son of Phoenix (bootleg of Repulse) + + + sonoth + Something For Nothing (Russia) + + + sonson + Son Son + + + sonsonj + Son Son (Japan) + + + sonstwar + Star Wars (Sonic) + + + sonstwr2 + Star Wars (Sonic, alternate set) + + + sopranof + Sopranos, The (5.00 France) + + + sopranof_107 + Sopranos, The (1.07 France) + + + sopranof_300 + Sopranos, The (3.00 France) + + + sopranof_400 + Sopranos, The (4.00 France) + + + sopranog + Sopranos, The (5.00 Germany) + + + sopranog_107 + Sopranos, The (1.07 Germany) + + + sopranog_300 + Sopranos, The (3.00 Germany) + + + sopranog_400 + Sopranos, The (4.00 Germany) + + + sopranoi + Sopranos, The (5.00 Italy) + + + sopranoi_107 + Sopranos, The (1.07 Italy) + + + sopranoi_300 + Sopranos, The (3.00 Italy) + + + sopranoi_400 + Sopranos, The (4.00 Italy) + + + sopranol + Sopranos, The (5.00 Spain) + + + sopranol_107 + Sopranos, The (1.07 Spain) + + + sopranol_300 + Sopranos, The (3.00 Spain) + + + sopranol_400 + Sopranos, The (4.00 Spain) + + + sopranos + Sopranos, The (5.00) + + + sopranos_204 + Sopranos, The (2.04) + + + sopranos_300 + Sopranos, The (3.00) + + + sopranos_400 + Sopranos, The (4.00) + + + sorbit + Super Orbit + + + sorcr_l1 + Sorcerer (L-1) + + + sorcr_l2 + Sorcerer (L-2) + + + sos + SOS + + + sosterm + S.O.S. + + + sothello + Super Othello + + + sotsugyo + Sotsugyo Shousho + + + soukobdx + Souko Ban Deluxe (Japan, SB1) + + + soulcl2a + Soul Calibur II (SC22 Ver. A) + + + soulcl2b + Soul Calibur II (SC21 Ver. A) + + + soulcl2w + Soul Calibur II (SC2? world version) + + + soulclb2 + Soul Calibur II (SC23 Ver. A) + + + soulclb3 + Soul Calibur III (SC31001-NA-A) + + + soulclb3a + Soul Calibur III (SC31002-NA-A) + + + soulclbr + Soul Calibur (World, SOC14/VER.C) + + + soulclbrja + Soul Calibur (Japan, SOC11/VER.A2) + + + soulclbrjb + Soul Calibur (Japan, SOC11/VER.B) + + + soulclbrjc + Soul Calibur (Japan, SOC11/VER.C) + + + soulclbrub + Soul Calibur (US, SOC13/VER.B) + + + soulclbruc + Soul Calibur (US, SOC13/VER.C) + + + soulclbrwb + Soul Calibur (World, SOC14/VER.B) + + + souledge + Soul Edge Ver. II (World, SO4/VER.C) + + + souledgeaa + Soul Edge (Asia, SO2/VER.A) + + + souledgeja + Soul Edge (Japan, SO1/VER.A) + + + souledgeua + Soul Edge (US, SO3/VER.A) + + + souledgeuc + Soul Edge Ver. II (US, SO3/VER.C) + + + soulsurf + Soul Surfer (Rev A) + + + soutenry + Soutenryu (V2.07J) + + + sp_atw + Around The World In Eighty Days (Crystal) (sp.ACE?) + + + sp_beau + Beau Peep (Ace) (sp.ACE) (set 1) + + + sp_beau2 + Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 1) + + + sp_beau2a + Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 2) + + + sp_beau2b + Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 3) + + + sp_beau2c + Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 4) + + + sp_beau2d + Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 5) + + + sp_beau2e + Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 6) + + + sp_beau2f + Further Adventures Of Beau Peep (Ace) (sp.ACE) (set 7) + + + sp_beaua + Beau Peep (Ace) (sp.ACE) (set 2) + + + sp_beaub + Beau Peep (Ace) (sp.ACE) (set 3) + + + sp_beauc + Beau Peep (Ace) (sp.ACE) (set 4) + + + sp_beaud + Beau Peep (Ace) (sp.ACE) (set 5) + + + sp_beaue + Beau Peep (Ace) (sp.ACE) (set 6) + + + sp_beauf + Beau Peep (Ace) (sp.ACE) (set 7) + + + sp_beaug + Beau Peep (Ace) (sp.ACE) (set 8) + + + sp_beauh + Beau Peep (Ace) (sp.ACE) (set 9) + + + sp_bigbd + Big Break Deluxe Club (Ace) (sp.ACE) (set 1) + + + sp_bigbda + Big Break Deluxe Club (Ace) (sp.ACE) (set 2) + + + sp_brkbk + Break The Bank (Ace) (sp.ACE) (set 1) + + + sp_brkbka + Break The Bank (Ace) (sp.ACE) (set 2) + + + sp_brkbkb + Break The Bank (Ace) (sp.ACE) (set 3) + + + sp_brkbkc + Break The Bank (Ace) (sp.ACE) (set 4) + + + sp_brkbkd + Break The Bank (Ace) (sp.ACE) (set 5) + + + sp_camel + Camelot (Ace) (sp.ACE) (set 1) + + + sp_camela + Camelot (Ace) (sp.ACE) (set 2) + + + sp_camelb + Camelot (Ace) (sp.ACE) (set 3) + + + sp_camelc + Camelot (Ace) (sp.ACE) (set 4) + + + sp_cameld + Camelot (Ace) (sp.ACE) (set 5) + + + sp_camele + Camelot (Ace) (sp.ACE) (set 6) + + + sp_camelf + Camelot (Ace) (sp.ACE) (set 7) + + + sp_camelg + Camelot (Ace) (sp.ACE) (set 8) + + + sp_camelh + Camelot (Ace) (sp.ACE) (set 9) + + + sp_cameli + Camelot (Ace) (sp.ACE) (set 10) + + + sp_camelj + Camelot (Ace) (sp.ACE) (set 11) + + + sp_camelk + Camelot (Ace) (sp.ACE) (set 12) + + + sp_camell + Camelot (Ace) (sp.ACE) (set 13) + + + sp_camelm + Camelot (Ace) (sp.ACE) (set 14) + + + sp_cameln + Camelot (Ace) (sp.ACE) (set 15) + + + sp_camelo + Camelot (Ace) (sp.ACE) (set 16) + + + sp_carry + Carry On (Pcp) (sp.ACE?) (set 1) + + + sp_carrya + Carry On (Pcp) (sp.ACE?) (set 2) + + + sp_cbowl + Cash Bowl (Ace) (sp.ACE) (set 1) + + + sp_cbowla + Cash Bowl (Ace) (sp.ACE) (set 2) + + + sp_cbowlb + Cash Bowl (Ace) (sp.ACE) (set 3) + + + sp_cbowlc + Cash Bowl (Ace) (sp.ACE) (set 4) + + + sp_cbowld + Cash Bowl (Ace) (sp.ACE) (set 5) + + + sp_cbowle + Cash Bowl (Ace) (sp.ACE) (set 6) + + + sp_cbowlf + Cash Bowl (Ace) (sp.ACE) (set 7) + + + sp_cbowlg + Cash Bowl (Ace) (sp.ACE) (set 8) + + + sp_cbowlh + Cash Bowl (Ace) (sp.ACE) (set 9) + + + sp_cbowli + Cash Bowl (Ace) (sp.ACE) (set 10) + + + sp_cbowlj + Cash Bowl (Ace) (sp.ACE) (set 11) + + + sp_cbowlk + Cash Bowl (Ace) (sp.ACE) (set 12) + + + sp_cbowll + Cash Bowl (Ace) (sp.ACE) (set 13) + + + sp_cbowlm + Cash Bowl (Ace) (sp.ACE) (set 14) + + + sp_cbowln + Cash Bowl (Ace) (sp.ACE) (set 15) + + + sp_cbowlo + Cash Bowl (Ace) (sp.ACE) (set 16) + + + sp_cbowlp + Cash Bowl (Ace) (sp.ACE) (set 17) + + + sp_cbowlq + Cash Bowl (Ace) (sp.ACE) (set 18) + + + sp_cbowlr + Cash Bowl (Ace) (sp.ACE) (set 19) + + + sp_cbowls + Cash Bowl (Ace) (sp.ACE) (set 20) + + + sp_cbowlt + Cash Bowl (Ace) (sp.ACE) (set 21) + + + sp_cbowlu + Cash Bowl (Ace) (sp.ACE) (set 22) + + + sp_clbna + Club National (Ace) (sp.ACE) (set 1) + + + sp_clbnaa + Club National (Ace) (sp.ACE) (set 2) + + + sp_coder + Code Red (Ace) (sp.ACE) (set 1) + + + sp_codera + Code Red (Ace) (sp.ACE) (set 2) + + + sp_coderb + Code Red (Ace) (sp.ACE) (set 3) + + + sp_coderc + Code Red (Ace) (sp.ACE) (set 4) + + + sp_coderd + Code Red (Ace) (sp.ACE) (set 5) + + + sp_codere + Code Red (Ace) (sp.ACE) (set 6) + + + sp_coderf + Code Red (Ace) (sp.ACE) (set 7) + + + sp_coderg + Code Red (Ace) (sp.ACE) (set 8) + + + sp_cpal + Caesars Palace (Ace) (sp.ACE?) + + + sp_crime + Crime Watch (Ace) (sp.ACE) (set 1) + + + sp_crimea + Crime Watch (Ace) (sp.ACE) (set 2) + + + sp_crimeb + Crime Watch (Ace) (sp.ACE) (set 3) + + + sp_crimec + Crime Watch (Ace) (sp.ACE) (set 4) + + + sp_crimed + Crime Watch (Ace) (sp.ACE) (set 5) + + + sp_crimee + Crime Watch (Ace) (sp.ACE) (set 6) + + + sp_crimef + Crime Watch (Ace) (sp.ACE) (set 7) + + + sp_crimeg + Crime Watch (Ace) (sp.ACE) (set 8) + + + sp_crimeh + Crime Watch (Ace) (sp.ACE) (set 9) + + + sp_criss + Criss Cross Cash (Ace) (sp.ACE) (set 1) + + + sp_crissa + Criss Cross Cash (Ace) (sp.ACE) (set 2) + + + sp_crissb + Criss Cross Cash (Ace) (sp.ACE) (set 3) + + + sp_crissc + Criss Cross Cash (Ace) (sp.ACE) (set 4) + + + sp_crissd + Criss Cross Cash (Ace) (sp.ACE) (set 5) + + + sp_crisse + Criss Cross Cash (Ace) (sp.ACE) (set 6) + + + sp_crissf + Criss Cross Cash (Ace) (sp.ACE) (set 7) + + + sp_crissg + Criss Cross Cash (Ace) (sp.ACE) (set 8) + + + sp_crun + Cash Run (Crystal) (sp.ACE?) (set 1) + + + sp_cruna + Cash Run (Crystal) (sp.ACE?) (set 2) + + + sp_crunb + Cash Run (Crystal) (sp.ACE?) (set 3) + + + sp_daytr + Daytripper (Ace) (sp.ACE) (set 1) + + + sp_daytra + Daytripper (Ace) (sp.ACE) (set 2) + + + sp_daytrb + Daytripper (Ace) (sp.ACE) (set 3) + + + sp_daytrc + Daytripper (Ace) (sp.ACE) (set 4) + + + sp_donky + Donkey Derby (Ace) (sp.ACE) (set 1) + + + sp_donkya + Donkey Derby (Ace) (sp.ACE) (set 2) + + + sp_donkyb + Donkey Derby (Ace) (sp.ACE) (set 3) + + + sp_donkyc + Donkey Derby (Ace) (sp.ACE) (set 4) + + + sp_donkyd + Donkey Derby (Ace) (sp.ACE) (set 5) + + + sp_donkye + Donkey Derby (Ace) (sp.ACE) (set 6) + + + sp_donkyf + Donkey Derby (Ace) (sp.ACE) (set 7) + + + sp_donkyg + Donkey Derby (Ace) (sp.ACE) (set 8) + + + sp_dyour + Double Your Money (Ace) (sp.ACE) + + + sp_emmrd + Emmerdale (Ace) (sp.ACE) (set 1) + + + sp_emmrda + Emmerdale (Ace) (sp.ACE) (set 2) + + + sp_emmrdb + Emmerdale (Ace) (sp.ACE) (set 3) + + + sp_emmrdc + Emmerdale (Ace) (sp.ACE) (set 4) + + + sp_emmrdd + Emmerdale (Ace) (sp.ACE) (set 5) + + + sp_emmrde + Emmerdale (Ace) (sp.ACE) (set 6) + + + sp_emmrdf + Emmerdale (Ace) (sp.ACE) (set 7) + + + sp_emmrdg + Emmerdale (Ace) (sp.ACE) (set 8) + + + sp_emmrdh + Emmerdale (Ace) (sp.ACE) (set 9) + + + sp_emmrdi + Emmerdale (Ace) (sp.ACE) (set 10) + + + sp_emmrdj + Emmerdale (Ace) (sp.ACE) (set 11) + + + sp_emmrdk + Emmerdale (Ace) (sp.ACE) (set 12) + + + sp_emmrdn + Emmerdale (Ace) (sp.ACE) (set 15) + + + sp_emmrdo + Emmerdale (Ace) (sp.ACE) (set 16) + + + sp_festi + Festival (Spanish) (Ace) (sp.ACE) + + + sp_five + Fiver Fever (Crystal) (sp.ACE?) (set 1) + + + sp_fivea + Fiver Fever (Crystal) (sp.ACE?) (set 2) + + + sp_front + Final Frontier (Bwb) (sp.ACE?) + + + sp_ghost + Ghost Trapper (Ace) (sp.ACE) (set 1) + + + sp_ghosta + Ghost Trapper (Ace) (sp.ACE) (set 2) + + + sp_ghostb + Ghost Trapper (Ace) (sp.ACE) (set 3) + + + sp_ghostc + Ghost Trapper (Ace) (sp.ACE) (set 4) + + + sp_ghostd + Ghost Trapper (Ace) (sp.ACE) (set 5) + + + sp_ghoste + Ghost Trapper (Ace) (sp.ACE) (set 6) + + + sp_ghostf + Ghost Trapper (Ace) (sp.ACE) (set 7) + + + sp_ghostg + Ghost Trapper (Ace) (sp.ACE) (set 8) + + + sp_ghosth + Ghost Trapper (Ace) (sp.ACE) (set 9) + + + sp_ghosti + Ghost Trapper (Ace) (sp.ACE) (set 10) + + + sp_ghostj + Ghost Trapper (Ace) (sp.ACE) (set 11) + + + sp_ghostk + Ghost Trapper (Ace) (sp.ACE) (set 12) + + + sp_ghostl + Ghost Trapper (Ace) (sp.ACE) (set 13) + + + sp_ghostm + Ghost Trapper (Ace) (sp.ACE) (set 14) + + + sp_ghostn + Ghost Trapper (Ace) (sp.ACE) (set 15) + + + sp_ghosto + Ghost Trapper (Ace) (sp.ACE) (set 16) + + + sp_ghostp + Ghost Trapper (Ace) (sp.ACE) (set 17) + + + sp_ghostq + Ghost Trapper (Ace) (sp.ACE) (set 18) + + + sp_ghostr + Ghost Trapper (Ace) (sp.ACE) (set 19) + + + sp_ghosts + Ghost Trapper (Ace) (sp.ACE) (set 20) + + + sp_globe + Globe Trotter (Ace) (sp.ACE) (set 1) + + + sp_globea + Globe Trotter (Ace) (sp.ACE) (set 2) + + + sp_globeb + Globe Trotter (Ace) (sp.ACE) (set 3) + + + sp_globec + Globe Trotter (Ace) (sp.ACE) (set 4) + + + sp_globed + Globe Trotter (Ace) (sp.ACE) (set 5) + + + sp_globee + Globe Trotter (Ace) (sp.ACE) (set 6) + + + sp_globef + Globe Trotter (Ace) (sp.ACE) (set 7) + + + sp_globeg + Globe Trotter (Ace) (sp.ACE) (set 8) + + + sp_gnat + Grand National (Ace) (sp.ACE) (set 1) + + + sp_gnata + Grand National (Ace) (sp.ACE) (set 2) + + + sp_gnatb + Grand National (Ace) (sp.ACE) (set 3) + + + sp_gnatc + Grand National (Ace) (sp.ACE) (set 4) + + + sp_gnatd + Grand National (Ace) (sp.ACE) (set 5) + + + sp_gnate + Grand National (Ace) (sp.ACE) (set 6) + + + sp_gnatf + Grand National (Ace) (sp.ACE) (set 7) + + + sp_gnatg + Grand National (Ace) (sp.ACE) (set 8) + + + sp_gnath + Grand National (Ace) (sp.ACE) (set 9) + + + sp_gnati + Grand National (Ace) (sp.ACE) (set 10) + + + sp_gnatj + Grand National (Ace) (sp.ACE) (set 11) + + + sp_gnatk + Grand National (Ace) (sp.ACE) (set 12) + + + sp_gnatl + Grand National (Ace) (sp.ACE) (set 13) + + + sp_gnatm + Grand National (Ace) (sp.ACE) (set 14) + + + sp_gnatn + Grand National (Ace) (sp.ACE) (set 15) + + + sp_gnato + Grand National (Ace) (sp.ACE) (set 16) + + + sp_gol + Gol (Spanish) (Ace) (sp.ACE) + + + sp_golda + Golden Arrow Club (Ace) (sp.ACE) (set 1) + + + sp_goldaa + Golden Arrow Club (Ace) (sp.ACE) (set 2) + + + sp_goldm + Golden Mile (Ace) (sp.ACE) (set 1) + + + sp_goldm0 + Golden Mile (Ace) (sp.ACE) (set 28) + + + sp_goldm1 + Golden Mile (Ace) (sp.ACE) (set 29) + + + sp_goldm2 + Golden Mile (Ace) (sp.ACE) (set 30) + + + sp_goldm3 + Golden Mile (Ace) (sp.ACE) (set 31) + + + sp_goldma + Golden Mile (Ace) (sp.ACE) (set 2) + + + sp_goldmb + Golden Mile (Ace) (sp.ACE) (set 3) + + + sp_goldmc + Golden Mile (Ace) (sp.ACE) (set 4) + + + sp_goldmd + Golden Mile (Ace) (sp.ACE) (set 5) + + + sp_goldme + Golden Mile (Ace) (sp.ACE) (set 6) + + + sp_goldmf + Golden Mile (Ace) (sp.ACE) (set 7) + + + sp_goldmg + Golden Mile (Ace) (sp.ACE) (set 8) + + + sp_goldmh + Golden Mile (Ace) (sp.ACE) (set 9) + + + sp_goldmi + Golden Mile (Ace) (sp.ACE) (set 10) + + + sp_goldmj + Golden Mile (Ace) (sp.ACE) (set 11) + + + sp_goldmk + Golden Mile (Ace) (sp.ACE) (set 12) + + + sp_goldml + Golden Mile (Ace) (sp.ACE) (set 13) + + + sp_goldmm + Golden Mile (Ace) (sp.ACE) (set 14) + + + sp_goldmn + Golden Mile (Ace) (sp.ACE) (set 15) + + + sp_goldmo + Golden Mile (Ace) (sp.ACE) (set 16) + + + sp_goldmp + Golden Mile (Ace) (sp.ACE) (set 17) + + + sp_goldmq + Golden Mile (Ace) (sp.ACE) (set 18) + + + sp_goldmr + Golden Mile (Ace) (sp.ACE) (set 19) + + + sp_goldms + Golden Mile (Ace) (sp.ACE) (set 20) + + + sp_goldmt + Golden Mile (Ace) (sp.ACE) (set 21) + + + sp_goldmu + Golden Mile (Ace) (sp.ACE) (set 22) + + + sp_goldmv + Golden Mile (Ace) (sp.ACE) (set 23) + + + sp_goldmw + Golden Mile (Ace) (sp.ACE) (set 24) + + + sp_goldmx + Golden Mile (Ace) (sp.ACE) (set 25) + + + sp_goldmy + Golden Mile (Ace) (sp.ACE) (set 26) + + + sp_goldmz + Golden Mile (Ace) (sp.ACE) (set 27) + + + sp_golds + Golden Streak (Ace) (sp.ACE) (set 1) + + + sp_goldsa + Golden Streak (Ace) (sp.ACE) (set 2) + + + sp_goldsb + Golden Streak (Ace) (sp.ACE) (set 3) + + + sp_goldsc + Golden Streak (Ace) (sp.ACE) (set 4) + + + sp_goldsd + Golden Streak (Ace) (sp.ACE) (set 5) + + + sp_goldse + Golden Streak (Ace) (sp.ACE) (set 6) + + + sp_goldsf + Golden Streak (Ace) (sp.ACE) (set 7) + + + sp_goldsg + Golden Streak (Ace) (sp.ACE) (set 8) + + + sp_goldsh + Golden Streak (Ace) (sp.ACE) (set 9) + + + sp_goldt + Golden Streak (Golden Touch) (Ace) (sp.ACE) + + + sp_gprix + Grand Prix (Ace) (sp.ACE) (set 1) + + + sp_gprixa + Grand Prix (Ace) (sp.ACE) (set 2) + + + sp_gprixb + Grand Prix (Ace) (sp.ACE) (set 3) + + + sp_gprixc + Grand Prix (Ace) (sp.ACE) (set 4) + + + sp_gprixd + Grand Prix (Ace) (sp.ACE) (set 5) + + + sp_gprixe + Grand Prix (Ace) (sp.ACE) (set 6) + + + sp_gprixf + Grand Prix (Ace) (sp.ACE) (set 7) + + + sp_gprixg + Grand Prix (Ace) (sp.ACE) (set 8) + + + sp_gprixh + Grand Prix (Ace) (sp.ACE) (set 9) + + + sp_here + Here We Go (Ace) (sp.ACE) (set 1) + + + sp_herea + Here We Go (Ace) (sp.ACE) (set 2) + + + sp_hereb + Here We Go (Ace) (sp.ACE) (set 3) + + + sp_herec + Here We Go (Ace) (sp.ACE) (set 4) + + + sp_hered + Here We Go (Ace) (sp.ACE) (set 5) + + + sp_heree + Here We Go (Ace) (sp.ACE) (set 6) + + + sp_heref + Here We Go (Ace) (sp.ACE) (set 7) + + + sp_hereg + Here We Go (Ace) (sp.ACE) (set 8) + + + sp_hideh + Hi De Hi (Ace) (sp.ACE) (set 1) + + + sp_hideha + Hi De Hi (Ace) (sp.ACE) (set 2) + + + sp_hidehb + Hi De Hi (Ace) (sp.ACE) (set 3) + + + sp_hidehc + Hi De Hi (Ace) (sp.ACE) (set 4) + + + sp_hidehd + Hi De Hi (Ace) (sp.ACE) (set 5) + + + sp_hidehe + Hi De Hi (Ace) (sp.ACE) (set 6) + + + sp_hidehf + Hi De Hi (Ace) (sp.ACE) (set 7) + + + sp_hidehg + Hi De Hi (Ace) (sp.ACE) (set 8) + + + sp_hidehh + Hi De Hi (Ace) (sp.ACE) (set 9) + + + sp_hidehi + Hi De Hi (Ace) (sp.ACE) (set 10) + + + sp_hidehj + Hi De Hi (Ace) (sp.ACE) (set 11) + + + sp_hidehk + Hi De Hi (Ace) (sp.ACE) (set 12) + + + sp_hidehl + Hi De Hi (Ace) (sp.ACE) (set 13) + + + sp_hidehm + Hi De Hi (Ace) (sp.ACE) (set 14) + + + sp_hidehn + Hi De Hi (Ace) (sp.ACE) (set 15) + + + sp_hideho + Hi De Hi (Ace) (sp.ACE) (set 16) + + + sp_hidehp + Hi De Hi (Ace) (sp.ACE) (set 17) + + + sp_hifly + Hi Flyer (Ace) (sp.ACE) (set 1) + + + sp_hiflya + Hi Flyer (Ace) (sp.ACE) (set 2) + + + sp_hiflyb + Hi Flyer (Ace) (sp.ACE) (set 3) + + + sp_hiflyc + Hi Flyer (Ace) (sp.ACE) (set 4) + + + sp_hiflyd + Hi Flyer (Ace) (sp.ACE) (set 5) + + + sp_hiflye + Hi Flyer (Ace) (sp.ACE) (set 6) + + + sp_hiflyf + Hi Flyer (Ace) (sp.ACE) (set 7) + + + sp_hiflyg + Hi Flyer (Ace) (sp.ACE) (set 8) + + + sp_hiflyh + Hi Flyer (Ace) (sp.ACE) (set 9) + + + sp_hiflyi + Hi Flyer (Ace) (sp.ACE) (set 10) + + + sp_hiflyj + Hi Flyer (Ace) (sp.ACE) (set 11) + + + sp_hiflyk + Hi Flyer (Ace) (sp.ACE) (set 12) + + + sp_hiflyl + Hi Flyer (Ace) (sp.ACE) (set 13) + + + sp_hiflym + Hi Flyer (Ace) (sp.ACE) (set 14) + + + sp_hiflyn + Hi Flyer (Ace) (sp.ACE) (set 15) + + + sp_hiflyo + Hi Flyer (Ace) (sp.ACE) (set 16) + + + sp_hiflyp + Hi Flyer (Ace) (sp.ACE) (set 17) + + + sp_holid + Holiday Club (Ace) (sp.ACE) (set 1) + + + sp_holida + Holiday Club (Ace) (sp.ACE) (set 2) + + + sp_juras + Jurassic Trail (Ace) (sp.ACE) + + + sp_lotto + Lotto (Spanish) (Ace) (sp.ACE) + + + sp_magmo + Magic Money (Ace) (sp.ACE) (set 1) + + + sp_magmoa + Magic Money (Ace) (sp.ACE) (set 2) + + + sp_magmob + Magic Money (Ace) (sp.ACE) (set 3) + + + sp_magmoc + Magic Money (Ace) (sp.ACE) (set 4) + + + sp_magmod + Magic Money (Ace) (sp.ACE) (set 5) + + + sp_megmo + Mega Money (Ace) (sp.ACE) (set 1) + + + sp_megmoa + Mega Money (Ace) (sp.ACE) (set 2) + + + sp_megmob + Mega Money (Ace) (sp.ACE) (set 3) + + + sp_megmoc + Mega Money (Ace) (sp.ACE) (set 4) + + + sp_megmod + Mega Money (Ace) (sp.ACE) (set 5) + + + sp_megmoe + Mega Money (Ace) (sp.ACE) (set 6) + + + sp_megmof + Mega Money (Ace) (sp.ACE) (set 7) + + + sp_megmog + Mega Money (Ace) (sp.ACE) (set 8) + + + sp_monma + Money Magic (Ace) (sp.ACE) (set 1) + + + sp_monmaa + Money Magic (Ace) (sp.ACE) (set 2) + + + sp_monmab + Money Magic (Ace) (sp.ACE) (set 3) + + + sp_monmac + Money Magic (Ace) (sp.ACE) (set 4) + + + sp_monmad + Money Magic (Ace) (sp.ACE) (set 5) + + + sp_monmo + Money Mountain (Ace) (sp.ACE) (set 1) + + + sp_monmoa + Money Mountain (Ace) (sp.ACE) (set 2) + + + sp_monmob + Money Mountain (Ace) (sp.ACE) (set 3) + + + sp_monmoc + Money Mountain (Ace) (sp.ACE) (set 4) + + + sp_monmod + Money Mountain (Ace) (sp.ACE) (set 5) + + + sp_monmoe + Money Mountain (Ace) (sp.ACE) (set 6) + + + sp_monmof + Money Mountain (Ace) (sp.ACE) (set 7) + + + sp_monmog + Money Mountain (Ace) (sp.ACE) (set 8) + + + sp_nudex + Nudge Explosion (Ace) (sp.ACE) (set 1) + + + sp_nudexa + Nudge Explosion (Ace) (sp.ACE) (set 2) + + + sp_onbox + On The Box (Ace) (sp.ACE) (set 1) + + + sp_onboxa + On The Box (Ace) (sp.ACE) (set 2) + + + sp_onboxb + On The Box (Ace) (sp.ACE) (set 3) + + + sp_onboxc + On The Box (Ace) (sp.ACE) (set 4) + + + sp_onboxd + On The Box (Ace) (sp.ACE) (set 5) + + + sp_onboxe + On The Box (Ace) (sp.ACE) (set 6) + + + sp_onboxf + On The Box (Ace) (sp.ACE) (set 7) + + + sp_onboxg + On The Box (Ace) (sp.ACE) (set 8) + + + sp_onboxh + On The Box (Ace) (sp.ACE) (set 9) + + + sp_onboxi + On The Box (Ace) (sp.ACE) (set 10) + + + sp_onboxj + On The Box (Ace) (sp.ACE) (set 11) + + + sp_onboxk + On The Box (Ace) (sp.ACE) (set 12) + + + sp_onboxl + On The Box (Ace) (sp.ACE) (set 13) + + + sp_onboxm + On The Box (Ace) (sp.ACE) (set 14) + + + sp_onboxn + On The Box (Ace) (sp.ACE) (set 15) + + + sp_openb + Open The Box (Ace) (sp.ACE) (set 1) + + + sp_openba + Open The Box (Ace) (sp.ACE) (set 2) + + + sp_openbb + Open The Box (Ace) (sp.ACE) (set 3) + + + sp_openbc + Open The Box (Ace) (sp.ACE) (set 4) + + + sp_openbd + Open The Box (Ace) (sp.ACE) (set 5) + + + sp_openbe + Open The Box (Ace) (sp.ACE) (set 6) + + + sp_openbf + Open The Box (Ace) (sp.ACE) (set 7) + + + sp_openbg + Open The Box (Ace) (sp.ACE) (set 8) + + + sp_openbh + Open The Box (Ace) (sp.ACE) (set 9) + + + sp_openbi + Open The Box (Ace) (sp.ACE) (set 10) + + + sp_payrs + Payrise (Ace) (sp.ACE) (set 1) + + + sp_payrsa + Payrise (Ace) (sp.ACE) (set 2) + + + sp_payrsb + Payrise (Ace) (sp.ACE) (set 3) + + + sp_payrsc + Payrise (Ace) (sp.ACE) (set 4) + + + sp_payrsd + Payrise (Ace) (sp.ACE) (set 5) + + + sp_payrse + Payrise (Ace) (sp.ACE) (set 6) + + + sp_payrsf + Payrise (Ace) (sp.ACE) (set 7) + + + sp_payrsg + Payrise (Ace) (sp.ACE) (set 8) + + + sp_payrsh + Payrise (Ace) (sp.ACE) (set 9) + + + sp_piste + On The Piste (Ace) (sp.ACE) (set 1) + + + sp_pistea + On The Piste (Ace) (sp.ACE) (set 2) + + + sp_pisteb + On The Piste (Ace) (sp.ACE) (set 3) + + + sp_pistec + On The Piste (Ace) (sp.ACE) (set 4) + + + sp_pisted + On The Piste (Ace) (sp.ACE) (set 5) + + + sp_pistee + On The Piste (Ace) (sp.ACE) (set 6) + + + sp_pistef + On The Piste (Ace) (sp.ACE) (set 7) + + + sp_pisteg + On The Piste (Ace) (sp.ACE) (set 8) + + + sp_pisteh + On The Piste (Ace) (sp.ACE) (set 9) + + + sp_pistei + On The Piste (Ace) (sp.ACE) (set 10) + + + sp_pistej + On The Piste (Ace) (sp.ACE) (set 11) + + + sp_pistek + On The Piste (Ace) (sp.ACE) (set 12) + + + sp_pistel + On The Piste (Ace) (sp.ACE) (set 13) + + + sp_pistem + On The Piste (Ace) (sp.ACE) (set 14) + + + sp_pisten + On The Piste (Ace) (sp.ACE) (set 15) + + + sp_pisteo + On The Piste (Ace) (sp.ACE) (set 16) + + + sp_pistep + On The Piste (Ace) (sp.ACE) (set 17) + + + sp_playa + Play It Again (Ace) (sp.ACE) (set 1) + + + sp_playaa + Play It Again (Ace) (sp.ACE) (set 2) + + + sp_playab + Play It Again (Ace) (sp.ACE) (set 3) + + + sp_playac + Play It Again (Ace) (sp.ACE) (set 4) + + + sp_playad + Play It Again (Ace) (sp.ACE) (set 5) + + + sp_playae + Play It Again (Ace) (sp.ACE) (set 6) + + + sp_playaf + Play It Again (Ace) (sp.ACE) (set 7) + + + sp_playag + Play It Again (Ace) (sp.ACE) (set 8) + + + sp_playah + Play It Again (Ace) (sp.ACE) (set 9) + + + sp_playai + Play It Again (Ace) (sp.ACE) (set 10) + + + sp_pound + Pound For Pound (Ace) (sp.ACE) (set 1) + + + sp_pounda + Pound For Pound (Ace) (sp.ACE) (set 2) + + + sp_poundb + Pound For Pound (Ace) (sp.ACE) (set 3) + + + sp_poundbwb + Pound For Pound (Ace/Bwb) (sp.ACE) (set 1) + + + sp_poundbwba + Pound For Pound (Ace/Bwb) (sp.ACE) (set 2) + + + sp_poundbwbb + Pound For Pound (Ace/Bwb) (sp.ACE) (set 3) + + + sp_poundbwbc + Pound For Pound (Ace/Bwb) (sp.ACE) (set 4) + + + sp_poundbwbd + Pound For Pound (Ace/Bwb) (sp.ACE) (set 5) + + + sp_poundbwbe + Pound For Pound (Ace/Bwb) (sp.ACE) (set 6) + + + sp_poundbwbf + Pound For Pound (Ace/Bwb) (sp.ACE) (set 7) + + + sp_poundbwbg + Pound For Pound (Ace/Bwb) (sp.ACE) (set 8) + + + sp_poundc + Pound For Pound (Ace) (sp.ACE) (set 4) + + + sp_poundd + Pound For Pound (Ace) (sp.ACE) (set 5) + + + sp_pounde + Pound For Pound (Ace) (sp.ACE) (set 6) + + + sp_poundf + Pound For Pound (Ace) (sp.ACE) (set 7) + + + sp_poundg + Pound For Pound (Ace) (sp.ACE) (set 8) + + + sp_poundh + Pound For Pound (Ace) (sp.ACE) (set 9) + + + sp_poundi + Pound For Pound (Ace) (sp.ACE) (set 10) + + + sp_poundj + Pound For Pound (Ace) (sp.ACE) (set 11) + + + sp_poundk + Pound For Pound (Ace) (sp.ACE) (set 12) + + + sp_poundl + Pound For Pound (Ace) (sp.ACE) (set 13) + + + sp_poundm + Pound For Pound (Ace) (sp.ACE) (set 14) + + + sp_poundn + Pound For Pound (Ace) (sp.ACE) (set 15) + + + sp_poundo + Pound For Pound (Ace) (sp.ACE) (set 16) + + + sp_poundp + Pound For Pound (Ace) (sp.ACE) (set 17) + + + sp_przna + Prize National (Ace) (sp.ACE) (set 1) + + + sp_prznaa + Prize National (Ace) (sp.ACE) (set 2) + + + sp_prznab + Prize National (Ace) (sp.ACE) (set 3) + + + sp_prznac + Prize National (Ace) (sp.ACE) (set 4) + + + sp_prznad + Prize National (Ace) (sp.ACE) (set 5) + + + sp_prznae + Prize National (Ace) (sp.ACE) (set 6) + + + sp_prznaf + Prize National (Ace) (sp.ACE) (set 7) + + + sp_prznag + Prize National (Ace) (sp.ACE) (set 8) + + + sp_road + Road To Hell (Ace) (sp.ACE) + + + sp_roof + Thru' The Roof (Ace) (sp.ACE) (set 1) + + + sp_roofa + Thru' The Roof (Ace) (sp.ACE) (set 2) + + + sp_skylm + Sky's The Limit Club, The (Ace) (sp.ACE) (set 1) + + + sp_skylma + Sky's The Limit Club, The (Ace) (sp.ACE) (set 2) + + + sp_spell + Spellbound (Ace) (sp.ACE) (set 1) + + + sp_spella + Spellbound (Ace) (sp.ACE) (set 2) + + + sp_spellb + Spellbound (Ace) (sp.ACE) (set 3) + + + sp_spellc + Spellbound (Ace) (sp.ACE) (set 4) + + + sp_spelld + Spellbound (Ace) (sp.ACE) (set 5) + + + sp_spelle + Spellbound (Ace) (sp.ACE) (set 6) + + + sp_spellf + Spellbound (Ace) (sp.ACE) (set 7) + + + sp_spellg + Spellbound (Ace) (sp.ACE) (set 8) + + + sp_spelli + Spellbound (Ace) (sp.ACE) (set 10) + + + sp_spellj + Spellbound (Ace) (sp.ACE) (set 11) + + + sp_swop + Swop Shop (Ace) (sp.ACE) (set 1) + + + sp_swopa + Swop Shop (Ace) (sp.ACE) (set 2) + + + sp_swopb + Swop Shop (Ace) (sp.ACE) (set 3) + + + sp_swopc + Swop Shop (Ace) (sp.ACE) (set 4) + + + sp_swopd + Swop Shop (Ace) (sp.ACE) (set 5) + + + sp_swope + Swop Shop (Ace) (sp.ACE) (set 6) + + + sp_swopf + Swop Shop (Ace) (sp.ACE) (set 7) + + + sp_swopg + Swop Shop (Ace) (sp.ACE) (set 8) + + + sp_timem + Time Machine (Ace) (sp.ACE) (set 1) + + + sp_timema + Time Machine (Ace) (sp.ACE) (set 2) + + + sp_timemb + Time Machine (Ace) (sp.ACE) (set 3) + + + sp_timemc + Time Machine (Ace) (sp.ACE) (set 4) + + + sp_timemd + Time Machine (Ace) (sp.ACE) (set 5) + + + sp_timeme + Time Machine (Ace) (sp.ACE) (set 6) + + + sp_timemf + Time Machine (Ace) (sp.ACE) (set 7) + + + sp_timemg + Time Machine (Ace) (sp.ACE) (set 8) + + + sp_timemh + Time Machine (Ace) (sp.ACE) (set 9) + + + sp_timemi + Time Machine (Ace) (sp.ACE) (set 10) + + + sp_timemj + Time Machine (Ace) (sp.ACE) (set 11) + + + sp_timemk + Time Machine (Ace) (sp.ACE) (set 12) + + + sp_tkpik + Take Your Pick (Ace) (sp.ACE) (set 1) + + + sp_tkpika + Take Your Pick (Ace) (sp.ACE) (set 2) + + + sp_tkpikb + Take Your Pick (Ace) (sp.ACE) (set 3) + + + sp_tkpikc + Take Your Pick (Ace) (sp.ACE) (set 4) + + + sp_tkpikd + Take Your Pick (Ace) (sp.ACE) (set 5) + + + sp_tkpike + Take Your Pick (Ace) (sp.ACE) (set 6) + + + sp_tkpikf + Take Your Pick (Ace) (sp.ACE) (set 7) + + + sp_tz + Twilight Zone (Ace) (sp.ACE) (set 1) + + + sp_tza + Twilight Zone (Ace) (sp.ACE) (set 2) + + + sp_tzb + Twilight Zone (Ace) (sp.ACE) (set 3) + + + sp_tzbwb + Twilight Zone (Ace/Bwb) (sp.ACE) + + + sp_tzc + Twilight Zone (Ace) (sp.ACE) (set 4) + + + sp_tzd + Twilight Zone (Ace) (sp.ACE) (set 5) + + + sp_tze + Twilight Zone (Ace) (sp.ACE) (set 6) + + + sp_tzf + Twilight Zone (Ace) (sp.ACE) (set 7) + + + sp_tzfe + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 1) + + + sp_tzfea + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 2) + + + sp_tzfeb + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 3) + + + sp_tzfec + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 4) + + + sp_tzfed + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 5) + + + sp_tzfee + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 6) + + + sp_tzfef + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 7) + + + sp_tzfeg + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 8) + + + sp_tzfeh + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 9) + + + sp_tzfei + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 10) + + + sp_tzfej + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 11) + + + sp_tzfek + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 12) + + + sp_tzfel + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 13) + + + sp_tzfem + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 14) + + + sp_tzfen + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 15) + + + sp_tzfeo + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 16) + + + sp_tzfep + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 17) + + + sp_tzfeq + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 18) + + + sp_tzfer + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 19) + + + sp_tzfes + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 20) + + + sp_tzfet + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 21) + + + sp_tzfeu + Twilight Zone - Further Encounters (Ace) (sp.ACE) (set 22) + + + sp_tzg + Twilight Zone (Ace) (sp.ACE) (set 8) + + + sp_tzh + Twilight Zone (Ace) (sp.ACE) (set 9) + + + sp_woolp + Woolpack (Ace) (sp.ACE) (set 1) + + + sp_woolpa + Woolpack (Ace) (sp.ACE) (set 2) + + + sp_woolpb + Woolpack (Ace) (sp.ACE) (set 3) + + + sp_woolpc + Woolpack (Ace) (sp.ACE) (set 4) + + + sp_woolpd + Woolpack (Ace) (sp.ACE) (set 5) + + + sp_woolpe + Woolpack (Ace) (sp.ACE) (set 6) + + + sp_woolpf + Woolpack (Ace) (sp.ACE) (set 7) + + + sp_woolpg + Woolpack (Ace) (sp.ACE) (set 8) + + + sp_woolph + Woolpack (Ace) (sp.ACE) (set 9) + + + sp_woolpi + Woolpack (Ace) (sp.ACE) (set 10) + + + sp_woolpj + Woolpack (Ace) (sp.ACE) (set 11) + + + sp_woolpk + Woolpack (Ace) (sp.ACE) (set 12) + + + sp_woolpl + Woolpack (Ace) (sp.ACE) (set 13) + + + sp_woolpm + Woolpack (Ace) (sp.ACE) (set 14) + + + sp_woolpn + Woolpack (Ace) (sp.ACE) (set 15) + + + sp_woolpo + Woolpack (Ace) (sp.ACE) (set 16) + + + sp_zigzg + Zig Zag (Ace) (sp.ACE) (set 1) + + + sp_zigzga + Zig Zag (Ace) (sp.ACE) (set 2) + + + sp_zigzgb + Zig Zag (Ace) (sp.ACE) (set 3) + + + sp_zigzgc + Zig Zag (Ace) (sp.ACE) (set 4) + + + sp_zigzgd + Zig Zag (Ace) (sp.ACE) (set 5) + + + sp_zigzge + Zig Zag (Ace) (sp.ACE) (set 6) + + + sp_zigzgf + Zig Zag (Ace) (sp.ACE) (set 7) + + + sp_zigzgg + Zig Zag (Ace) (sp.ACE) (set 8) + + + sp_zigzgh + Zig Zag (Ace) (sp.ACE) (set 9) + + + sp_zigzgi + Zig Zag (Ace) (sp.ACE) (set 10) + + + sp_zigzgj + Zig Zag (Ace) (sp.ACE) (set 11) + + + sp_zigzgk + Zig Zag (Ace) (sp.ACE) (set 12) + + + sp_zigzgl + Zig Zag (Ace) (sp.ACE) (set 13) + + + sp_zigzgm + Zig Zag (Ace) (sp.ACE) (set 14) + + + spacbat2 + Space Battle (bootleg set 2) + + + spacbatt + Space Battle (bootleg set 1) + + + spacbeam + Space Beam + + + spacduel + Space Duel + + + spacea91 + Space Ace (DL2 Conversion) (US v1.3) + + + spacea91_13e + Space Ace (DL2 Conversion) (Euro v1.3) + + + spaceace + Space Ace (US Rev. A3) + + + spaceacea + Space Ace (US Rev. A) + + + spaceacea2 + Space Ace (US Rev. A2) + + + spaceaceeuro + Space Ace (European) + + + spaceat2 + Space Attack II (bootleg of Super Invaders) + + + spaceatt + Space Attack (bootleg of Space Invaders) + + + spacebrd + Space Bird (bootleg) + + + spacecho + Space Echo (set 1) + + + spacecho2 + Space Echo (set 2) + + + spacecom + Space Combat (bootleg of Space Invaders) + + + spacecr + Space Cruiser + + + spacecty + Space City + + + spacedem + Space Demon + + + spacedx + Space Invaders DX (US, v2.1) + + + spacedxj + Space Invaders DX (Japan, v2.1) + + + spacedxo + Space Invaders DX (Japan, v2.0) + + + spacefb + Space Firebird (rev. 04-u) + + + spacefba + Space Firebird (rev. 02-a) + + + spacefbb + Space Firebird (bootleg) + + + spacefbe + Space Firebird (rev. 03-e set 1) + + + spacefbe2 + Space Firebird (rev. 03-e set 2) + + + spacefbg + Space Firebird (Gremlin) + + + spacefev + Space Fever (New Ver.) + + + spacefevo + Space Fever (Old Ver.) + + + spacefevo2 + Space Fever (Older Ver.) + + + spacefrt + Space Fortress (CVS) + + + spaceftr + Space Fortress (Zaccaria) + + + spaceg + Space Guerrilla + + + spacegun + Space Gun (World) + + + spacegunj + Space Gun (Japan) + + + spacegunu + Space Gun (US) + + + spacehaw + Space Hawks + + + spaceint + Space Intruder + + + spaceintj + Space Intruder (Japan) + + + spaceinv + Space Invaders + + + spacejam + Space Jam + + + spacejmf + Space Jam (France) + + + spacejmg + Space Jam (Germany) + + + spacejmi + Space Jam (Italy) + + + spacelnc + Space Launcher + + + spacempr + Space Empire (bootleg) + + + spaceod + Space Odyssey (version 2) + + + spaceod2 + Space Odyssey (version 1) + + + spaceph + Space Phantoms (bootleg of Ozma Wars) + + + spacepir + Space Pirates v2.2 + + + spaceplt + Space Pilot + + + spacerng + Space Ranger (bootleg of Space Invaders) + + + spaceshp + Space Ship + + + spaceskr + Space Seeker + + + spacetrk + Space Trek (upright) + + + spacetrkc + Space Trek (cocktail) + + + spacewar + Space Wars + + + spacewin + Scacco Matto / Space Win + + + spacewr3 + Space War Part 3 + + + spacezap + Space Zap + + + spacfury + Space Fury (revision C) + + + spacfurya + Space Fury (revision A) + + + spacfuryb + Space Fury (revision B) + + + spacmiss + Space Missile - Space Fighting Game + + + spacwalk + Space Walk + + + spain82 + Spain '82 + + + spang + Super Pang (World 900914) + + + spangbl + Super Pang (World 900914, bootleg) + + + spangj + Super Pang (Japan 901023) + + + sparkman + Spark Man (v2.0, set 1) + + + sparkmana + Spark Man (v2.0, set 2) + + + sparkz + Sparkz (prototype) + + + spartanx + Spartan X (Japan) + + + spatter + Spatter + + + spawn + Spawn In the Demon's Hand (JPN, USA, EUR, ASI, AUS) (Rev B) + + + spbactn + Super Pinball Action (US) + + + spbactnj + Super Pinball Action (Japan) + + + spbactnp + Super Pinball Action (prototype) + + + spcdrag + Space Dragon (Moon Cresta bootleg, set 1) + + + spcdraga + Space Dragon (Moon Cresta bootleg, set 2) + + + spceking + Space King + + + spcenctr + Space Encounters + + + spcewarl + Space War (Leijac Corporation) + + + spcewars + Space War (Sanritsu) + + + spcforc2 + Space Force (set 2) + + + spcforce + Space Force (set 1) + + + spcfrcii + Special Forces II + + + spcgambl + Space Gambler + + + spcinv95 + Space Invaders '95: The Attack Of Lunar Loonies (Ver 2.5O 1995/06/14) + + + spcinv95u + Space Invaders '95: The Attack Of Lunar Loonies (Ver 2.5A 1995/06/14) + + + spcinvdj + Space Invaders DX (Ver 2.6J 1994/09/14) (F3 Version) + + + spcking2 + Space King 2 + + + spclaser + Space Laser + + + spclforc + Special Forces + + + spclords + Space Lords (rev C) + + + spclordsa + Space Lords (rev A) + + + spclordsb + Space Lords (rev B) + + + spclordsg + Space Lords (rev A, German) + + + spcpostn + Space Position (Japan) + + + spcrider + Space Riders + + + spctbird + Space Thunderbird + + + spdball + Speed Ball - Contest at Neonworld (prototype) + + + spdcoin + Speed Coin (prototype) + + + spdodgeb + Super Dodge Ball (US) + + + speakesy + Speakeasy + + + speakesy4p + Speakeasy 4 Player + + + speakres + Speak & Rescue + + + speakresb + Speak & Rescue (bootleg) + + + spec2k + Spectrum 2000 (Euro) + + + spec2kv + Spectrum 2000 (vertical) + + + specforc + Special Force + + + specfrce + Special Forces Elite Training + + + spectar + Spectar (revision 3) + + + spectar1 + Spectar (revision 1?) + + + spectra + Spectra IV + + + spectrm + Spectrum + + + spectrm4 + Spectrum (ver 4) + + + speedatk + Speed Attack! (Japan) + + + speedbal + Speed Ball + + + speeddrp + Speed Drop (Ver. 1.06) + + + speeddrv + Speed Driver + + + speedfrk + Speed Freak + + + speedrcr + Speed Racer + + + speedspn + Speed Spin + + + speedup + Speed Up (Version 1.20) + + + speglsht + Super Eagle Shot + + + spellbnd + Spellbound + + + spelunk2 + Spelunker II + + + spelunkr + Spelunker + + + spelunkrj + Spelunker (Japan) + + + spf2t + Super Puzzle Fighter II Turbo (USA 960620) + + + spf2ta + Super Puzzle Fighter II Turbo (Asia 960529) + + + spf2td + Super Puzzle Fighter II Turbo (USA 960620 Phoenix Edition) (bootleg) + + + spf2th + Super Puzzle Fighter II Turbo (Hispanic 960531) + + + spf2xj + Super Puzzle Fighter II X (Japan 960531) + + + spf2xjd + Super Puzzle Fighter II X (Japan 960531 Phoenix Edition) (bootleg) + + + spfghmk2 + Space Fighter Mark II (set 1) + + + spfghmk22 + Space Fighter Mark II (set 2) + + + spicaadv + Spica Adventure (v2.03J) + + + spiceup + Spice It Up (Konami Endeavour) + + + spidermn + The Amazing Spider-Man + + + spiders + Spiders (set 1) + + + spiders2 + Spiders (set 2) + + + spiders3 + Spiders (set 3) + + + spidman + Spider-Man: The Videogame (World) + + + spidmanj + Spider-Man: The Videogame (Japan) + + + spidmanu + Spider-Man: The Videogame (US) + + + spielbud + Spiel Bude (German) + + + spiero + Super Pierrot (Japan) + + + spikeofe + Spikeout Final Edition + + + spikeout + Spikeout (Revision C) + + + spiker + Spiker + + + spiker2 + Spiker (5/5/86) + + + spiker3 + Spiker (6/9/86) + + + spikes91 + 1991 Spikes (Italian bootleg, set 1) + + + spikes91b + 1991 Spikes (Italian bootleg, set 2) + + + spinkick + Hec's Spinkick + + + spinlbrk + Spinal Breakers (World) + + + spinlbrkj + Spinal Breakers (Japan) + + + spinlbrku + Spinal Breakers (US) + + + spinmast + Spin Master / Miracle Adventure + + + spinner + Spinner + + + spirit + Spirit + + + spitboss + Super Pit Boss (9221-02A) + + + spk115it + Super Poker (v115IT) + + + spk116it + Super Poker (v116IT) + + + spkrbtl + Spikers Battle (GDS-0005) + + + spkrform + Super Poker (v100xD03) / Formosa + + + splash + Splash! (Ver. 1.2 World) + + + splash10 + Splash! (Ver. 1.0 World) + + + splat + Splat! + + + splatter + Splatter House (World, new version (SH3)) + + + splatter2 + Splatter House (World, old version (SH2)) + + + splatterj + Splatter House (Japan, SH1) + + + splitsec + Split Second + + + splmastr + Spell Master (Russia) (Atronic) + + + splndrbt + Splendor Blast + + + spnchout + Super Punch-Out!! + + + spnchoutj + Super Punch-Out!! (Japan) + + + spooky + Spooky Night 2nd Edition (Version 2.0.4) + + + spookyi + Spooky (Italian speech) + + + spookyo + Spooky Night (Version 1.0.1) + + + spookyp + Spooky + + + spool3 + Super Pool III (English) + + + spool3i + Super Pool III (I-Vics) + + + spool99 + Super Pool 99 (Version 0.36) + + + spool99a + Super Pool 99 (Version 0.33) + + + spool99b + Super Pool 99 (Version 0.31) + + + spool99c + Super Pool 99 (Version 0.26) + + + spotty + Spotty (Ver. 2.0.2) + + + sprbreak + Spring Break + + + sprbreaks + Spring Break (single ball game) + + + sprcros2 + Super Cross II (Japan, set 1) + + + sprcros2a + Super Cross II (Japan, set 2) + + + sprglbpg + Super Glob (Pac-Man hardware) (German bootleg) + + + sprglobp + Super Glob (Pac-Man hardware) + + + springbd + Springboard (bootleg of Circus) + + + springer + Springer + + + sprint1 + Sprint 1 + + + sprint2 + Sprint 2 (set 1) + + + sprint2a + Sprint 2 (set 2) + + + sprint2h + Sprint 2 (color kit, Italy) + + + sprint4 + Sprint 4 (set 1) + + + sprint4a + Sprint 4 (set 2) + + + sprint8 + Sprint 8 + + + sprint8a + Sprint 8 (play tag & chase) + + + sprk_090 + South Park (0.90) + + + sprk_096 + South Park (0.96) + + + sprk_103 + South Park (1.03) + + + sprtauth + Sports Authority + + + sprtjam + Sports Jam (GDS-0003) + + + sprtmtch + Sports Match + + + sprtshot + Sports Shooting USA + + + spss4240 + S-Plus (SS4240) Coral Reef + + + spstn_l5 + Space Station (L-5) + + + spuzbobl + Super Puzzle Bobble (V2.05O) + + + spuzboblj + Super Puzzle Bobble (V2.04J) + + + spy + S.P.Y. - Special Project Y (World ver. N) + + + spyhunt + Spy Hunter + + + spyhunt2 + Spy Hunter II (rev 2) + + + spyhunt2a + Spy Hunter II (rev 1) + + + spyhuntp + Spy Hunter (Playtronic license) + + + spyhuntpr + Spy Hunter (Spain, Recreativos Franco S.A. PCB) + + + spyhuntr + Spy Hunter (Pinball) + + + spyu + S.P.Y. - Special Project Y (US ver. M) + + + sqbert + Faster, Harder, More Challenging Q*bert (prototype) + + + sqix + Super Qix (World, Rev 2) + + + sqixb1 + Super Qix (bootleg set 1) + + + sqixb2 + Super Qix (bootleg set 2) + + + sqixr1 + Super Qix (World, Rev 1) + + + sqixu + Super Qix (US) + + + squaitsa + Squash (Itisa) + + + squash + Squash (Ver. 1.0) + + + sraider + Space Raider + + + srally2 + Sega Rally 2 + + + srally2x + Sega Rally 2 DX + + + srallyc + Sega Rally Championship - TWIN (Revision C) + + + srallyca + Sega Rally Championship - DX (Revision A) + + + srallycb + Sega Rally Championship - TWIN (Revision B) + + + sranger + Super Ranger (v2.0) + + + srangerb + Super Ranger (older, bootleg) + + + srangern + Super Ranger (older, NOVA license) + + + srangero + Super Ranger (older) + + + srangerw + Super Ranger (older, WDK license) + + + srdarwin + Super Real Darwin (World) + + + srdarwinj + Super Real Darwin (Japan) + + + srdmissn + S.R.D. Mission + + + srmdb + Sunset Riders (bootleg of Megadrive version) + + + srmp1 + Super Real Mahjong Part 1 (Japan) + + + srmp2 + Super Real Mahjong Part 2 (Japan) + + + srmp3 + Super Real Mahjong Part 3 (Japan) + + + srmp4 + Super Real Mahjong PIV (Japan) + + + srmp4o + Super Real Mahjong PIV (Japan, older set) + + + srmp5 + Super Real Mahjong P5 + + + srmp6 + Super Real Mahjong P6 (Japan) + + + srmp7 + Super Real Mahjong P7 (Japan) + + + srmvs + Super Real Mahjong VS + + + srumbler + The Speed Rumbler (set 1) + + + srumbler2 + The Speed Rumbler (set 2) + + + srumbler3 + The Speed Rumbler (set 3) + + + sryudens + Mahjong Seiryu Densetsu (Japan, NM502) + + + ss2005 + Super Shanghai 2005 (GDL-0031) + + + ss2005a + Super Shanghai 2005 (Rev A) (GDL-0031A) + + + ss_01 + Scared Stiff (D0.1R with sound rev.25) + + + ss_03 + Scared Stiff (0.3) + + + ss_12 + Scared Stiff (1.2) + + + ss_14 + Scared Stiff (1.4) + + + ss_15 + Scared Stiff (1.5) + + + ssanchan + Sanrin San Chan (Japan) + + + sscandal + Seishun Scandal (315-5132, Japan) + + + sscope + Silent Scope (ver xxD, Ver 1.33) + + + sscope2 + Silent Scope 2 + + + sscopea + Silent Scope (ver xxA, Ver 1.00) + + + sscopeb + Silent Scope (ver xxB, Ver 1.20) + + + sscopec + Silent Scope (ver xxC, Ver 1.30) + + + sscopex + Silent Scope EX (ver UAA) + + + ssf2 + Super Street Fighter II: The New Challengers (World 930911) + + + ssf2a + Super Street Fighter II: The New Challengers (Asia 931005) + + + ssf2ar1 + Super Street Fighter II: The New Challengers (Asia 930914) + + + ssf2h + Super Street Fighter II: The New Challengers (Hispanic 930911) + + + ssf2j + Super Street Fighter II: The New Challengers (Japan 931005) + + + ssf2jr1 + Super Street Fighter II: The New Challengers (Japan 930911) + + + ssf2jr2 + Super Street Fighter II: The New Challengers (Japan 930910) + + + ssf2mdb + Super Street Fighter II - The New Challengers (bootleg of Japanese MegaDrive version) + + + ssf2t + Super Street Fighter II Turbo (World 940223) + + + ssf2ta + Super Street Fighter II Turbo (Asia 940223) + + + ssf2tb + Super Street Fighter II: The Tournament Battle (World 931119) + + + ssf2tbd + Super Street Fighter II: The Tournament Battle (World 931119 Phoenix Edition) (bootleg) + + + ssf2tbh + Super Street Fighter II: The Tournament Battle (Hispanic 931005) + + + ssf2tbj + Super Street Fighter II: The Tournament Battle (Japan 930911) + + + ssf2tbr1 + Super Street Fighter II: The Tournament Battle (World 930911) + + + ssf2tu + Super Street Fighter II Turbo (USA 940323) + + + ssf2tur1 + Super Street Fighter II Turbo (USA 940223) + + + ssf2u + Super Street Fighter II: The New Challengers (USA 930911) + + + ssf2ud + Super Street Fighter II: The New Challengers (USA 930911 Phoenix Edition) (bootleg) + + + ssf2xj + Super Street Fighter II X: Grand Master Challenge (Japan 940223) + + + ssf2xjd + Super Street Fighter II X: Grand Master Challenge (Japan 940223 Phoenix Edition) (bootleg) + + + ssf2xjr + Super Street Fighter II X: Grand Master Challenge (Japan 940223 rent version) + + + ssfindo + See See Find Out + + + sshangha + Super Shanghai Dragon's Eye (Japan) + + + sshanghab + Super Shanghai Dragon's Eye (World, bootleg) + + + sshootep + Sharpshooter + + + sshooter + Sharpshooter (Rev 1.9) + + + sshooter11 + Sharpshooter (Rev 1.1) + + + sshooter12 + Sharpshooter (Rev 1.2) + + + sshooter17 + Sharpshooter (Rev 1.7) + + + sshootr2 + Sharp Shooter II + + + sshot + Super Shot + + + sshtl_l7 + Space Shuttle (L-7) + + + sshtlzac + Space Shuttle (Zaccaria) + + + sshuttle + Space Shuttle (Taito) + + + sshuttle1 + Space Shuttle (Taito) (alternate set) + + + ssi + Super Space Invaders '91 (World, Rev 1) + + + ssia + Super Space Invaders '91 (World) + + + ssideki + Super Sidekicks / Tokuten Ou + + + ssideki2 + Super Sidekicks 2 - The World Championship / Tokuten Ou 2 - real fight football (NGM-061)(NGH-061) + + + ssideki3 + Super Sidekicks 3 - The Next Glory / Tokuten Ou 3 - eikou e no michi + + + ssideki4 + The Ultimate 11 - The SNK Football Championship / Tokuten Ou - Honoo no Libero + + + ssingles + Swinging Singles + + + ssipkr24 + SSI Poker (v2.4) + + + ssipkr30 + SSI Poker (v3.0) + + + ssipkr40 + SSI Poker (v4.0) + + + ssjkrpkr + Southern Systems Joker Poker + + + sslam + Super Slam (set 1) + + + sslama + Super Slam (set 2) + + + ssmissin + S.S. Mission + + + ssoldier + Superior Soldiers (US) + + + ssozumo + Syusse Oozumou (Japan) + + + sspac2k1 + Super Space 2001 + + + sspacaho + Space Attack / Head On + + + sspaceat + Space Attack (upright set 1) + + + sspaceat2 + Space Attack (upright set 2) + + + sspaceat3 + Space Attack (upright set 3) + + + sspaceatc + Space Attack (cocktail) + + + sspeedr + Super Speed Race + + + sspiritj + Scramble Spirits (Japan, Floppy DS3-5000-02-REV-A Based) + + + sspirits + Scramble Spirits (World, Floppy Based) + + + sspirtfc + Scramble Spirits (World, Floppy Based, FD1094 317-0058-02c) + + + ssprint + Super Sprint (rev 4) + + + ssprint1 + Super Sprint (rev 1) + + + ssprint3 + Super Sprint (rev 3) + + + ssprintf + Super Sprint (French) + + + ssprintg + Super Sprint (German, rev 2) + + + ssprintg1 + Super Sprint (German, rev 1) + + + ssprints + Super Sprint (Spanish) + + + ssriders + Sunset Riders (4 Players ver EAC) + + + ssriders2 + Sunset Riders 2 (bootleg 4 Players ver ADD) + + + ssridersabd + Sunset Riders (2 Players ver ABD) + + + ssridersadd + Sunset Riders (4 Players ver ADD) + + + ssridersb + Sunset Riders (bootleg 4 Players ver ADD) + + + ssriderseaa + Sunset Riders (4 Players ver EAA) + + + ssridersebc + Sunset Riders (2 Players ver EBC) + + + ssridersebd + Sunset Riders (2 Players ver EBD) + + + ssridersjac + Sunset Riders (4 Players ver JAC) + + + ssridersjbd + Sunset Riders (2 Players ver JBD) + + + ssridersuab + Sunset Riders (4 Players ver UAB) + + + ssridersuac + Sunset Riders (4 Players ver UAC) + + + ssridersubc + Sunset Riders (2 Players ver UBC) + + + ssridersuda + Sunset Riders (4 Players ver UDA) + + + ssrj + Super Speed Race Junior (Japan) + + + sss + Steep Slope Sliders (JUET 981110 V1.000) + + + sst + Supersonic + + + sstar + Super Star + + + sstar97 + Super Star '97 (version V153B) + + + sstarbtl + Super Star Battle + + + sstarcrs + Super Star Crest + + + sstingry + Super Stingray (Japan) + + + sstrangr + Space Stranger + + + sstrangr2 + Space Stranger 2 + + + sstrike + Super Strike Bowling + + + sstriker + Sorcer Striker (set 1) + + + sstrikera + Sorcer Striker (set 2) + + + sstrkfgt + Sega Strike Fighter (Rev A) + + + ssvc_a26 + Secret Service (2.6) + + + ssvc_b26 + Secret Service (2.6 alternate sound) + + + st_game + unknown pinball game + + + st_ohla + Oh La La (Stella) + + + st_vulkn + Vulkan (Stella) + + + stactics + Space Tactics + + + stadhero + Stadium Hero (Japan) + + + stadhr96 + Stadium Hero '96 (World, EAJ) + + + stadhr96j + Stadium Hero '96 (Japan, EAD) + + + stagger1 + Stagger I (Japan) + + + stakwin + Stakes Winner / Stakes Winner - GI kinzen seiha e no michi + + + stakwin2 + Stakes Winner 2 + + + starblad + Starblade (World) + + + starbladj + Starblade (Japan) + + + starcas + Star Castle (version 3) + + + starcas1 + Star Castle (older) + + + starcase + Star Castle (Mottoeis) + + + starcasp + Star Castle (prototype) + + + starcrus + Star Cruiser + + + starfght + Star Fighter + + + starfgmc + Starfighter (Moon Cresta bootleg) + + + starfigh + Star Fighter (v1) + + + starfir2 + Star Fire 2 + + + starfire + Star Fire (set 1) + + + starfirea + Star Fire (set 2) + + + starfirp + Star Fire + + + starforc + Star Force + + + starforca + Star Force (encrypted, set 2) + + + starforcb + Star Force (encrypted, bootleg) + + + starforce + Star Force (encrypted, set 1) + + + stargate + Stargate + + + stargatp + Stargate (Pinball) + + + stargatp1 + Stargate (rev.1) + + + stargatp2 + Stargate (rev.2) + + + stargatp3 + Stargate (rev.3) + + + stargatp4 + Stargate (rev.4) + + + starglad + Star Gladiator Episode I: Final Crusade (USA 960627) + + + stargladj + Star Gladiator Episode I: Final Crusade (Japan 960627) + + + stargld2 + Star Gladiator 2: Nightmare of Bilstein (Japan 980316) + + + stargod + Star God + + + stargoda + Star God (alternate sound) + + + stargrds + Star Guards + + + stargzr + Stargazer + + + starhawk + Star Hawk + + + starhrcl + Star Horse (client) + + + starhrct + Star Horse (server) + + + starhrse + Star Horse (big screens) + + + starhrsp + Star Horse Progress (Rev A) + + + starjack + Star Jacker (Sega) + + + starjacks + Star Jacker (Stern Electronics) + + + starlstr + Vs. Star Luster + + + starrace + Star Race + + + starrkr + Star Raker + + + stars + Stars + + + starseek + Doki Doki Idol Star Seeker (GDL-0005) + + + starshot + Star Shooter + + + starshp1 + Starship 1 + + + starshpp + Starship 1 (prototype?) + + + starsldr + Star Soldier: Vanishing Earth + + + starspnr + Starspinner (Dutch/Nederlands) + + + starswep + Star Sweep (Japan, STP1/VER.A) + + + startrek + Star Trek + + + startrep + Star Trek (Pinball) + + + startrgn + Star Trigon (Japan, STT1 Ver.A) + + + startrip + Star Trip + + + startrkd + Star Trek (Defender bootleg) + + + startrp + Starship Troopers + + + starw + Star Wars (bootleg of Galaxy Wars, set 1) + + + starw1 + Star Wars (bootleg of Galaxy Wars, set 2) + + + starwarr + Star Warrior + + + starwars + Star Wars (rev 2) + + + starwars1 + Star Wars (rev 1) + + + starzan + Super Tarzan (Italy, V100I) + + + statriv2 + Triv Two + + + statriv2v + Triv Two (Vertical) + + + statriv4 + Triv Four + + + statusbj + Status Black Jack (V1.0c) + + + stcc + Sega Touring Car Championship + + + stcca + Sega Touring Car Championship (Revision A) + + + stccb + Sega Touring Car Championship (Revision B) + + + stdragon + Saint Dragon (set 1) + + + stdragona + Saint Dragon (set 2) + + + stealsee + Steal See + + + steaser + Strip Teaser (Italy, Ver. 1.22) + + + steeltal + Steel Talons (rev 2) + + + steeltal1 + Steel Talons (rev 1) + + + steeltalg + Steel Talons (German, rev 2) + + + steeltalp + Steel Talons (prototype) + + + steelwkr + Steel Worker + + + steeplec + Steeplechase [TTL] + + + stellcas + Stellar Castle (Elettronolo) + + + stellecu + Stelle e Cubi (Italy) + + + step3 + Stepping 3 Superior + + + stepstag + Stepping Stage Special + + + stera + Steraranger (Moon Cresta bootleg) + + + stest + Speed Test + + + stfight + Street Fight (Germany) + + + stfighta + Street Fight (bootleg?) + + + stg + Strike Gunner S.T.G + + + stillcra + Still Crazy + + + stinger + Stinger + + + stinger2 + Stinger (prototype?) + + + stingray + Stingray + + + stisub + Treasure Bonus (Subsino, v1.6) + + + stk_sprs + Strikes and Spares + + + stkclmns + Stack Columns (World) + + + stkclmnsj + Stack Columns (Japan) + + + stlforce + Steel Force + + + stlwr_l2 + Stellar Wars (L-2) + + + stmblade + Storm Blade (US) + + + stntcycl + Stunt Cycle [TTL] + + + stocker + Stocker (3/19/85) + + + stoffy + Super Toffy + + + stoffyu + Super Toffy (Unico license) + + + stompin + Stompin' (4/4/86) + + + stoneage + Stoneage (bootleg of Caveman Ninja) + + + stonebal + Stone Ball (4 Players) + + + stonebal2 + Stone Ball (2 Players) + + + storming + Storming Party / Riku Kai Kuu Saizensen + + + strahl + Koutetsu Yousai Strahl (Japan set 1) + + + strahla + Koutetsu Yousai Strahl (Japan set 2) + + + strapids + Shooting the Rapids + + + stratab + Strata Bowling (V3) + + + stratab1 + Strata Bowling (V1) + + + stratgys + Strategy X (Stern Electronics) + + + stratgyx + Strategy X + + + stratof + Raiga - Strato Fighter (US) + + + stratvox + Stratovox + + + stratvoxb + Stratovox (bootleg) + + + strax_p7 + Star Trax (domestic prototype) + + + streakng + Streaking (set 1) + + + streaknga + Streaking (set 2) + + + streetg + Street Games (Revision 4) + + + streetg2 + Street Games II (Revision 7C) + + + streetg2r5 + Street Games II (Revision 5) + + + streetgr3 + Street Games (Revision 3) + + + streetsm + Street Smart (US version 2) + + + streetsm1 + Street Smart (US version 1) + + + streetsmj + Street Smart (Japan version 1) + + + streetsmw + Street Smart (World version 1) + + + stress + Stress Busters (J 981020 V1.000) + + + strfbomb + Strafe Bomb (bootleg of Scramble) + + + strhoop + Street Hoop / Street Slam / Dunk Dream (DEM-004)(DEH-004) + + + strider + Strider (USA, B-Board 89624B-2) + + + strider2 + Strider 2 (USA 991213) + + + strider2a + Strider 2 (Asia 991213) + + + striderj + Strider Hiryu (Japan) + + + striderjr + Strider Hiryu (Japan Resale Ver.) + + + striderua + Strider (USA, B-Board 89624B-3) + + + strik_l4 + Strike Master (L-4) + + + strike + Strike + + + striker + Striker + + + strikext + Striker Xtreme (1.02) + + + striv + Super Triv + + + strkfgtr + Strike Fighter (World) + + + strkfgtrj + Strike Fighter (Japan) + + + strkforc + Strike Force (rev 1 02/25/91) + + + strknew + Striker Xtreme (ARM7 Sound Board) + + + strkzone + Strike Zone Baseball + + + strlink + Strong Link (Russia) (Extrema) + + + strlt_l1 + Star Light (L-1) + + + strngsci + Strange Science + + + strnskil + Strength & Skill + + + strongx + Strong X + + + strsphnx + Star's Phoenix (Italian speech) + + + strtdriv + Street Drivin' (prototype) + + + strtheat + Street Heat + + + strvmstr + Super Trivia Master + + + strxt_fr + Striker Xtreme (France) + + + strxt_gr + Striker Xtreme (Germany) + + + strxt_it + Striker Xtreme (Italy) + + + strxt_sp + Striker Xtreme (Spain) + + + strxt_uk + Striker Xtreme (UK) + + + sttng_g7 + Star Trek: The Next Generation (LG-7) + + + sttng_l1 + Star Trek: The Next Generation (LX-1) + + + sttng_l2 + Star Trek: The Next Generation (LX-2) + + + sttng_l7 + Star Trek: The Next Generation (LX-7) + + + sttng_p5 + Star Trek: The Next Generation (P-5) + + + sttng_s7 + Star Trek: The Next Generation (LX-7) SP1 + + + sttng_x7 + Star Trek: The Next Generation (LX-7 Special) + + + stunrun + S.T.U.N. Runner (rev 6) + + + stunrun0 + S.T.U.N. Runner (rev 0) + + + stunrun2 + S.T.U.N. Runner (rev 2) + + + stunrun2e + S.T.U.N. Runner (rev 2, Europe) + + + stunrun3 + S.T.U.N. Runner (rev 3) + + + stunrun3e + S.T.U.N. Runner (rev 3, Europe) + + + stunrun4 + S.T.U.N. Runner (rev 4) + + + stunrun5 + S.T.U.N. Runner (rev 5) + + + stunrune + S.T.U.N. Runner (rev 5, Europe) + + + stunrunj + S.T.U.N. Runner (rev 7, Japan) + + + stunrunp + S.T.U.N. Runner (upright prototype) + + + stuntair + Stunt Air + + + stvbios + ST-V Bios + + + stwr_102 + Star Wars (1.02) + + + stwr_103 + Star Wars (1.03) + + + stwr_a14 + Star Wars (Display Rev.1.04) + + + stwr_e12 + Star Wars (1.02 England) + + + stwr_g11 + Star Wars (1.01 Germany) + + + styphp + Stunt Typhoon Plus + + + su2000 + SU2000 + + + sub + Submarine (Sigma) + + + subhunt + Sub Hunter + + + submar + Submarine (Midway) + + + subroc3d + Subroc-3D + + + subs + Subs + + + sucasino + Super Casino + + + suchie3 + Idol Janshi Suchie-Pai 3 (JPN) + + + suchipi + Idol Janshi Suchie-Pai Special (Japan) + + + suikoenb + Suiko Enbu / Outlaws of the Lost Dynasty (JUETL 950314 V2.001) + + + sukuinuf + Quiz and Variety Suku Suku Inufuku 2 (IN2 Ver. A) + + + sultanw + Sultan's Wish (Konami Endeavour) + + + sunaq + SunA Quiz 6000 Academy (940620-6) + + + sundance + Sundance + + + supbtime + Super Burger Time (World, set 1) + + + supbtimea + Super Burger Time (World, set 2) + + + supbtimej + Super Burger Time (Japan) + + + supcrash + Super Crash (bootleg of Head On) + + + supdrapo + Super Draw Poker (set 1) + + + supdrapoa + Super Draw Poker (set 2) + + + supdrapob + Super Draw Poker (bootleg) + + + super21 + Super Twenty One + + + super9 + Super Nove (Playmark) + + + superabc + Super ABC (Pac-Man multigame kit, Sep. 03 1999) + + + superabco + Super ABC (Pac-Man multigame kit, Mar. 08 1999) + + + superbar + Super Bar + + + superbik + Superbike + + + superbon + Agent Super Bond (Super Cobra conversion) + + + superbug + Super Bug + + + superbwl + Super Bowl (Version 16.03B) + + + superchs + Super Chase - Criminal Termination (World) + + + superchsj + Super Chase - Criminal Termination (Japan) + + + superchsp + Super Chase - Criminal Termination (1992/10/26 20:24:29 CHASE 3 VER 1.1, prototype) + + + superchsu + Super Chase - Criminal Termination (US) + + + supercrd + Super Card (encrypted) + + + superdbl + Super Double (French) + + + superdbz + Super Dragon Ball Z (DB1 Ver. B) + + + superdix + Super Dixieland (Bingo) + + + superdq + Super Don Quix-ote (Long Scenes) + + + superdqa + Super Don Quix-ote (Short Scenes, Alt) + + + superdqs + Super Don Quix-ote (Short Scenes) + + + superg + Super Galaxians (galaxiana hack) + + + supergm3 + Super Game III + + + supergx + Super GX + + + superinv + Super Invaders (bootleg set 1) + + + superman + Superman (World) + + + supermanj + Superman (Japan) + + + supermanu + Superman (US) + + + supermap + Superman (Pinball) + + + superpac + Super Pac-Man + + + superpacm + Super Pac-Man (Midway) + + + superspy + The Super Spy (NGM-011)(NGH-011) + + + superten + Super Ten V8.3 + + + supertnk + Super Tank + + + supertr2 + Super Triv II + + + supertr3 + Super Triv III + + + superwng + Super Wing + + + superx + Super-X (NTC) + + + superxm + Super-X (Mitchell) + + + supjolly + Super Jolly + + + suplup + Super Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 4.0 / 990518) + + + supmodel + Super Model + + + supnudg2 + Super Nudger II - P173 (Version 5.21) + + + suprball + Super Ball (Version 1.3) + + + suprbowl + Super Bowl + + + suprglob + Super Glob + + + suprgolf + Super Crowns Golf (Japan) + + + suprheli + Super Heli (Super Cobra bootleg) + + + suprleag + Super League (FD1094 317-0045) + + + suprloco + Super Locomotive (Rev.A) + + + suprlocoo + Super Locomotive + + + suprmatk + Super Missile Attack (for rev 1) + + + suprmatkd + Super Missile Attack (not encrypted) + + + suprmous + Super Mouse + + + suprmrio + Vs. Super Mario Bros. (set SM4-4 E) + + + suprmrioa + Vs. Super Mario Bros. (set ?, harder) + + + suprmriobl + Vs. Super Mario Bros. (bootleg with Z80, set 1) + + + suprmriobl2 + Vs. Super Mario Bros. (bootleg with Z80, set 2) + + + suprnova + Super Nova + + + suprpick + Super Picker + + + suprpokr + Super Poker (Version 10.19S) + + + suprpokra + Super Poker (Version 10.15S) + + + suprpokrb + Super Poker (Version 10.10) + + + suprpool + Super Pool (9743 rev.01) + + + suprridr + Super Rider + + + suprslam + From TV Animation Slam Dunk - Super Slams + + + suprstar + Super Stars + + + suprtrio + Super Trio + + + supxevs + Vs. Super Xevious + + + suratk + Surprise Attack (World ver. K) + + + suratka + Surprise Attack (Asia ver. L) + + + suratkj + Surprise Attack (Japan ver. M) + + + sureshop + Sure Shot (Pinball) + + + sureshot + Sure Shot + + + surfnsaf + Surf'n Safari + + + surfplnt + Surf Planet (Version 4.1) + + + surfplnt40 + Surf Planet (Version 4.0) + + + survarts + Survival Arts (World) + + + survartsj + Survival Arts (Japan) + + + survartsu + Survival Arts (USA) + + + survival + Survival + + + susume + Susume! Taisen Puzzle-Dama (GV027 Japan 1.20) + + + sutapper + Tapper (Suntory) + + + suzuk8h2 + Suzuka 8 Hours 2 (World, Rev B) + + + suzuk8h2j + Suzuka 8 Hours 2 (Japan, Rev B) + + + suzuka8h + Suzuka 8 Hours (World, Rev C) + + + suzuka8hj + Suzuka 8 Hours (Japan, Rev B) + + + suzume + Watashiha Suzumechan (Japan) + + + svc + SNK vs. Capcom - SVC Chaos (NGM-2690)(NGH-2690) + + + svcboot + SNK vs. Capcom - SVC Chaos (bootleg) + + + svcpcb + SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 1) + + + svcpcba + SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 2) + + + svcplus + SNK vs. Capcom - SVC Chaos Plus (bootleg set 1) + + + svcplusa + SNK vs. Capcom - SVC Chaos Plus (bootleg set 2) + + + svcsplus + SNK vs. Capcom - SVC Chaos Super Plus (bootleg) + + + svf + Super Visual Football: European Sega Cup + + + svg + S.V.G. - Spectral vs Generation (M68k label V200) (ARM label V200, ROM 10/11/05 S.V.G V201) + + + svgpcb + S.V.G. - Spectral vs Generation (M68k label V100JP) (ARM label V100JP ROM 05/12/05 S.V.G V100) (Japan, JAMMA PCB) + + + svolley + Super Volleyball (Japan) + + + svolleybl + Super Volleyball (bootleg) + + + svolleyk + Super Volleyball (Korea) + + + svolleyu + Super Volleyball (US) + + + svolly91 + Super Volley '91 (Japan) + + + svs + Super Visual Soccer: Sega Cup (US) + + + swa + Star Wars Arcade + + + swarm + Swarm (bootleg?) + + + swat + SWAT (315-5048) + + + swatpolc + SWAT Police + + + swcourt + Super World Court (World) + + + swcourtj + Super World Court (Japan) + + + swe1pb + Pinball 2000: Star Wars Episode 1 + + + sweetgal + Sweet Gal (Japan 850510 SWG 1-02) + + + sweetl + Sweet Life (041220 World) + + + sweetl2 + Sweet Life 2 (071217 Russia) + + + sweetl2_2 + Sweet Life 2 (080320 World) + + + sweetl2_2a + Sweet Life 2 (bootleg, 080320, banking address hack set 1) + + + sweetl2_2b + Sweet Life 2 (bootleg, 080320, banking address hack set 2) + + + sweetl2_2c + Sweet Life 2 (bootleg, 080320, VIDEO GAME-1 MD01) + + + sweetl2_2d + Sweet Life 2 (bootleg, 080320, LOTTOGAME (I)) + + + sweetl2_3 + Sweet Life 2 (090525 Lottery) + + + sweetl2_4 + Sweet Life 2 (090812 Entertainment) + + + sweetl_2 + Sweet Life (070412 Russia) + + + sweetla + Sweet Life (bootleg, 041220, backdoor) + + + sweetlb + Sweet Life (bootleg, 041220, banking address hack, changed version text) + + + swimmer + Swimmer (set 1) + + + swimmera + Swimmer (set 2) + + + swimmerb + Swimmer (set 3) + + + swingin + Swingin In The Green (Russia) + + + swisspkr + Swiss Poker ('50 SG-.10', V2.5) + + + swrds_l2 + Swords of Fury (L-2) + + + sws + Super World Stadium (Japan) + + + sws2000 + Super World Stadium 2000 (Japan, SS01/VER.A) + + + sws2001 + Super World Stadium 2001 (Japan, SS11/VER.A) + + + sws92 + Super World Stadium '92 (Japan) + + + sws92g + Super World Stadium '92 Gekitouban (Japan) + + + sws93 + Super World Stadium '93 (Japan) + + + sws95 + Super World Stadium '95 (Japan) + + + sws96 + Super World Stadium '96 (Japan) + + + sws97 + Super World Stadium '97 (Japan) + + + sws98 + Super World Stadium '98 (Japan, SS81/VER.A) + + + sws99 + Super World Stadium '99 (Japan, SS91/VER.A3) + + + swthrt2v + Sweet Hearts II (01J01986, Venezuela) + + + swtht2nz + Sweet Hearts II (1VXFC5461, New Zealand) + + + swtril41 + Star Wars Trilogy (4.01) + + + swtril43 + Star Wars Trilogy (4.03) + + + swtrilgy + Star Wars Trilogy (Revision A) + + + swtrilgya + Star Wars Trilogy + + + sxevious + Super Xevious + + + sxeviousj + Super Xevious (Japan) + + + sxyreac2 + Pachinko Sexy Reaction 2 (Japan) + + + sxyreact + Pachinko Sexy Reaction (Japan) + + + sys1test + System 1 Test prom + + + sys246 + System 246 BIOS + + + sys256 + System 256 BIOS + + + sys573 + System 573 BIOS + + + syvalion + Syvalion (Japan) + + + syvalionp + Syvalion (World, prototype) + + + szaxxon + Super Zaxxon (315-5013) + + + szone_l2 + Strike Zone (Shuffle) (L-2) + + + szone_l5 + Strike Zone (Shuffle) (L-5) + + + t2_l2 + Terminator 2: Judgment Day (L-2) + + + t2_l3 + Terminator 2: Judgment Day (L-3) + + + t2_l4 + Terminator 2: Judgment Day (L-4) + + + t2_l6 + Terminator 2: Judgment Day (L-6) + + + t2_l8 + Terminator 2: Judgment Day (L-8) + + + t2_p2f + Terminator 2: Judgment Day (P-2F) Profanity + + + t3new + Terminator 3: Rise of the Machines (ARM7 Sound Board) + + + tacscan + Tac/Scan + + + tactcian + Tactician (set 1) + + + tactcian2 + Tactician (set 2) + + + taf_h4 + The Addams Family (H-4) + + + taf_l1 + The Addams Family (L-1) + + + taf_l2 + The Addams Family (L-2) + + + taf_l3 + The Addams Family (L-3) + + + taf_l4 + The Addams Family (L-4) + + + taf_l5 + The Addams Family (L-5) + + + taf_l6 + The Addams Family (L-6) + + + taf_l7 + The Addams Family (Prototype L-5) (L-7) + + + taf_p2 + The Addams Family (Prototype) (P-2) + + + tafg_h3 + The Addams Family Special Collectors Edition (H-3) + + + tafg_la2 + The Addams Family Special Collectors Edition (LA-2) + + + tafg_la3 + The Addams Family Special Collectors Edition (LA-3) + + + tafg_lx3 + The Addams Family Special Collectors Edition Gold (LX-3) + + + tagteam + Tag Team Wrestling + + + tagteamp + Tag-Team Wrestling + + + tagteamp2 + Tag-Team Wrestling (rev.2) + + + taiko10 + Taiko No Tatsujin 10 (T101001-NA-A) + + + taiko9 + Taiko No Tatsujin 9 (TK91001-NA-A) + + + tail2nos + Tail to Nose - Great Championship + + + tailg + Tailgunner + + + taitest + Taito Test Fixture + + + taitofx1 + Taito FX1 + + + taitogn + Taito GNET + + + taitotz + Type Zero BIOS + + + taiwanmb + Taiwan Mahjong [BET] (Japan 881208) + + + tajmah + Tajmahal (Russia) (Atronic) + + + take5 + Take 5 [TTL] + + + takefive + Take Five + + + takoron + Noukone Puzzle Takoron (GDL-0042) + + + talbot + Talbot + + + tangtang + Tang Tang (ver. 0526, 26/05/2000) + + + tank + Tank/Tank II [TTL] + + + tank8 + Tank 8 (set 1) + + + tank8a + Tank 8 (set 2) + + + tank8b + Tank 8 (set 3) + + + tank8c + Tank 8 (set 4) + + + tank8d + Tank 8 (set 5) + + + tankbatl + Tank Battle (prototype rev. 4/21/92) + + + tankbatt + Tank Battalion + + + tankbattb + Tank Battalion (bootleg) + + + tankbust + Tank Busters + + + tankfrce + Tank Force (US, 2 Player) + + + tankfrce4 + Tank Force (US, 4 Player) + + + tankfrcej + Tank Force (Japan) + + + tantr + Puzzle & Action: Tant-R (Japan) + + + tantrbl + Puzzle & Action: Tant-R (Japan) (bootleg set 1) + + + tantrbl2 + Puzzle & Action: Tant-R (Japan) (bootleg set 2) + + + tantrbl3 + Puzzle & Action: Tant-R (Japan) (bootleg set 3) + + + tantrkor + Puzzle & Action: Tant-R (Korea) + + + taotaido + Tao Taido (set 1) + + + taotaidoa + Tao Taido (set 2) + + + tapatune + Tap a Tune + + + tapper + Tapper (Budweiser, set 1) + + + tappera + Tapper (Budweiser, set 2) + + + targ + Targ + + + targc + Targ (cocktail?) + + + targeth + Target Hits (ver 1.1) + + + targetha + Target Hits (ver 1.0) + + + tarzan + Tarzan (V109C) + + + tarzana + Tarzan (V107) + + + tattack + Time Attacker + + + tattass + Tattoo Assassins (US prototype) + + + tattassa + Tattoo Assassins (Asia prototype) + + + taurs_l1 + Taurus (Shuffle) (L-1) + + + taxi_l3 + Taxi (Marilyn) (L-3) + + + taxi_l4 + Taxi (Lola) (L-4) + + + taxi_lg1 + Taxi (Marilyn) (L-1) Germany + + + taxidriv + Taxi Driver + + + tazmani2 + Tazz-Mania (set 2, alt hardware) + + + tazmania + Tazz-Mania (set 1) + + + tazzmang + Tazz-Mania (bootleg on Galaxian hardware) + + + tblkkuzu + The Block Kuzushi (Japan) + + + tbowl + Tecmo Bowl (World) + + + tbowlj + Tecmo Bowl (Japan) + + + tbowlp + Tecmo Bowl (World, prototype?) + + + tbyahhoo + Twin Bee Yahhoo! (ver JAA) + + + tceptor + Thunder Ceptor + + + tceptor2 + Thunder Ceptor II + + + tcl + Taiwan Chess Legend + + + tcobra2 + Twin Cobra II (Ver 2.1O 1995/11/30) + + + tcobra2u + Twin Cobra II (Ver 2.1A 1995/11/30) + + + tdawg_l1 + Top Dawg (Shuffle) (L-1) + + + tdfever + TouchDown Fever (US) + + + tdfever2 + TouchDown Fever 2 + + + tdfeverj + TouchDown Fever (Japan) + + + tdoboon + Taihou de Doboon + + + tdpgal + Triple Draw Poker + + + tdragon + Thunder Dragon (9th Jan. 1992) + + + tdragon1 + Thunder Dragon (4th Jun. 1991) + + + tdragon2 + Thunder Dragon 2 (9th Nov. 1993) + + + tdragon2a + Thunder Dragon 2 (1st Oct. 1993) + + + tdragonb + Thunder Dragon (bootleg) + + + tduno + Touch de Uno! / Unou Nouryoku Check Machine + + + tduno2 + Touch de Uno! 2 + + + te0144 + Puzzle Bobble (Italian Gambling Game) + + + teamqb + John Elway's Team Quarterback (set 1) + + + teamqb2 + John Elway's Team Quarterback (set 2) + + + techbowl + Technical Bowling (J 971212 V1.000) + + + techromn + Tech Romancer (Euro 980914) + + + techromnu + Tech Romancer (USA 980914) + + + tecmowcm + Tecmo World Cup Millennium (Japan) + + + teddybb + TeddyBoy Blues (315-5115, New Ver.) + + + teddybbo + TeddyBoy Blues (315-5115, Old Ver.) + + + teddybbobl + TeddyBoy Blues (Old Ver. bootleg) + + + teedoff + Tee'd Off (Japan) + + + teedoffp + Tee'd Off + + + teedoffp1 + Tee'd Off (rev.1) + + + teedoffp3 + Tee'd Off (rev.3) + + + teetert + Teeter Torture (prototype) + + + tehkanwc + Tehkan World Cup (set 1) + + + tehkanwcb + Tehkan World Cup (set 2, bootleg?) + + + tehkanwcc + Tehkan World Cup (set 3, bootleg) + + + tekipaki + Teki Paki + + + tekken + Tekken (World, TE4/VER.C) + + + tekken2 + Tekken 2 Ver.B (US, TES3/VER.D) + + + tekken2aa + Tekken 2 (Asia, TES2/VER.A) + + + tekken2ab + Tekken 2 Ver.B (Asia, TES2/VER.B) + + + tekken2jb + Tekken 2 Ver.B (Japan, TES1/VER.B) + + + tekken2jc + Tekken 2 Ver.B (Japan, TES1/VER.C) + + + tekken2ub + Tekken 2 Ver.B (US, TES3/VER.B) + + + tekken3 + Tekken 3 (Japan, TET1/VER.E1) + + + tekken3aa + Tekken 3 (Asia, TET2/VER.A) + + + tekken3ab + Tekken 3 (Asia, TET2/VER.B) + + + tekken3ae + Tekken 3 (Asia, TET2/VER.E1) + + + tekken3ja + Tekken 3 (Japan, TET1/VER.A) + + + tekken3ua + Tekken 3 (US, TET3/VER.A) + + + tekken3ud + Tekken 3 (US, TET3/VER.D) + + + tekken4 + Tekken 4 (TEF3 Ver. C) + + + tekken4a + Tekken 4 (TEF2 Ver. A) + + + tekken4b + Tekken 4 (TEF1 Ver. A) + + + tekken4c + Tekken 4 (TEF1 Ver. C) + + + tekken51 + Tekken 5.1 (TE51 Ver. B) + + + tekkenab + Tekken (Asia, TE2/VER.B) + + + tekkenac + Tekken (Asia, TE2/VER.C) + + + tekkenjb + Tekken (Japan, TE1/VER.B) + + + tektagt + Tekken Tag Tournament (US, TEG3/VER.C1) + + + tektagtac + Tekken Tag Tournament (Asia, TEG2/VER.C1, set 1) + + + tektagtac1 + Tekken Tag Tournament (Asia, TEG2/VER.C1, set 2) + + + tektagtja + Tekken Tag Tournament (Japan, TEG1/VER.A3) + + + tektagtjb + Tekken Tag Tournament (Japan, TEG1/VER.B) + + + tektagtjc1 + Tekken Tag Tournament (Japan, TEG1/VER.C1) + + + tektagtub + Tekken Tag Tournament (US, TEG3/VER.B) + + + teljan + Tel Jan + + + telmahjn + Telephone Mahjong (Japan 890111) + + + tempest + Tempest (rev 3, Revised Hardware) + + + tempest1 + Tempest (rev 1) + + + tempest1r + Tempest (rev 1, Revised Hardware) + + + tempest2 + Tempest (rev 2) + + + tempest3 + Tempest (rev 3) + + + temptube + Tempest Tubes + + + tenballs + Ten Balls (Ver 1.05) + + + tengai + Tengai (World) + + + tengaij + Sengoku Blade: Sengoku Ace Episode II / Tengai + + + tenkai + Mahjong Tenkaigen + + + tenkai2b + Mahjong Tenkaigen Part 2 (bootleg) + + + tenkaibb + Mahjong Tenkaigen (bootleg b) + + + tenkaicb + Mahjong Tenkaigen (bootleg c) + + + tenkaid + Mahjong Tenkaigen (set 1) + + + tenkaie + Mahjong Tenkaigen (set 2) + + + tenkomor + Tenkomori Shooting (Asia, TKM2/VER.A1) + + + tenkomorja + Tenkomori Shooting (Japan, TKM1/VER.A1) + + + tenpindx + Ten Pin Deluxe + + + tenspot + Ten Spot + + + tenthdeg + Tenth Degree (prototype) + + + tenup + Ten Up (compendium 17) + + + tenup3 + Ten Up (compendium 3) + + + terabrst + Teraburst (1998/07/17 ver UEL) + + + terabrsta + Teraburst (1998/02/25 ver AAA) + + + term2 + Terminator 2 - Judgment Day (rev LA4 08/03/92) + + + term2la1 + Terminator 2 - Judgment Day (rev LA1 11/01/91) + + + term2la2 + Terminator 2 - Judgment Day (rev LA2 12/09/91) + + + term2la3 + Terminator 2 - Judgment Day (rev LA3 03/27/92) + + + term3 + Terminator 3: Rise of the Machines (4.00) + + + term3_205 + Terminator 3: Rise of the Machines (2.05) + + + term3f + Terminator 3: Rise of the Machines (4.00 France) + + + term3f_205 + Terminator 3: Rise of the Machines (2.05 France) + + + term3g + Terminator 3: Rise of the Machines (4.00 Germany) + + + term3i + Terminator 3: Rise of the Machines (4.00 Italy) + + + term3i_205 + Terminator 3: Rise of the Machines (2.05 Italy) + + + term3l + Terminator 3: Rise of the Machines (4.00 Spain) + + + term3l_205 + Terminator 3: Rise of the Machines (2.05 Spain) + + + terracre + Terra Cresta (YM3526 set 1) + + + terracrea + Terra Cresta (YM3526 set 3) + + + terracren + Terra Cresta (YM2203) + + + terracreo + Terra Cresta (YM3526 set 2) + + + terraf + Terra Force + + + terrafb + Terra Force (Japan bootleg set 2) + + + terrafj + Terra Force (Japan) + + + terrafjb + Terra Force (Japan bootleg with additional Z80) + + + terrafu + Terra Force (US) + + + tesorone + Tesorone Dell'Isola (Italy, v2.41) + + + tesorone230 + Tesorone Dell'Isola (Italy, v2.30) + + + tesorone240 + Tesorone Dell'Isola (Italy, v2.40) + + + tetfight + Tetris Fighters + + + tetkiwam + Tetris Kiwamemichi (GDL-0020) + + + tetrbx + Tetris / Bloxeed (Korean System 16 bootleg) (ISG Selection Master Type 2006) + + + tetris + Tetris (set 4, Japan, System 16A, FD1094 317-0093) + + + tetris1 + Tetris (set 1, Japan, System 16B, FD1094 317-0091) + + + tetris2 + Tetris (set 2, Japan, System 16B, FD1094 317-0092) + + + tetris3 + Tetris (set 3, Japan, System 16A, FD1094 317-0093a) + + + tetrisbl + Tetris (bootleg) + + + tetriskr + Tetris (bootleg of Mirrorsoft PC-XT Tetris version) + + + tetrisp + Tetris Plus + + + tetrisp2 + Tetris Plus 2 (World) + + + tetrisp2j + Tetris Plus 2 (Japan, V2.2) + + + tetrisp2ja + Tetris Plus 2 (Japan, V2.1) + + + tetrisse + Tetris (Japan, System E) + + + tetrist + Tetris (Japan, Taito B-System, Nastar Conversion Kit) + + + tetrista + Tetris (Japan, Taito B-System, Master of Weapon Conversion Kit) + + + tetristh + Tetris (Japan, Taito H-System) + + + tetrsark + Tetris (D.R. Korea) + + + tf95_12 + WPC 95 Test Fixture (1.2) + + + tfa_13 + WPC Test Fixture: Alphanumeric (1.3) + + + tfdmd_l3 + WPC Test Fixture: DMD (L-3) + + + tfight + Title Fight + + + tfrceac + Thunder Force AC + + + tfrceacb + Thunder Force AC (bootleg) + + + tfrceacj + Thunder Force AC (Japan) + + + tfs_12 + WPC Test Fixture: Security (1.2) + + + tftc_104 + Tales From the Crypt (1.04 Spain) + + + tftc_200 + Tales From the Crypt (2.00) + + + tftc_300 + Tales From the Crypt (3.00) + + + tftc_302 + Tales From the Crypt (3.02 Dutch) + + + tftc_303 + Tales From the Crypt (3.03) + + + tfupdate + Triforce DIMM Updater (GDT-0011) + + + tgm2 + Tetris the Absolute The Grand Master 2 + + + tgm2p + Tetris the Absolute The Grand Master 2 Plus + + + tgmj + Tetris The Grand Master (Japan 980710) + + + tgtball + Target Ball (Nude) + + + tgtballa + Target Ball + + + tgtpanic + Target Panic + + + thaiprin + Thai Princess (30127721, Malaysia) + + + tharrier + Task Force Harrier + + + tharrieru + Task Force Harrier (US?) + + + thayers + Thayer's Quest (set 1) + + + thayersa + Thayer's Quest (set 2) + + + thedeep + The Deep (Japan) + + + thedrink + The Drink + + + theend + The End + + + theendb + The End (bootleg?) + + + theends + The End (Stern Electronics) + + + thegames + The Games + + + theglad + The Gladiator / Road of the Sword / Shen Jian (M68k label V101) (ARM label V107, ROM 06/06/03 SHEN JIAN V107) + + + theglad100 + The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 01/16/03 SHEN JIAN) + + + theglad101 + The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V101, ROM 03/13/03 SHEN JIAN) + + + thegladpcb + The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 02/25/03 SHEN JIAN) (Japan, JAMMA PCB) + + + theglob + The Glob + + + theglob2 + The Glob (earlier) + + + theglob3 + The Glob (set 3) + + + theglobp + The Glob (Pac-Man hardware) + + + thegrid + The Grid (version 1.2) + + + thegrida + The Grid (version 1.1) + + + thehand + The Hand + + + thehustl + The Hustler (Japan, program code M) + + + thehustlj + The Hustler (Japan, program code J) + + + themj + The Mah-jong (Japan) + + + thenanpa + The Nanpa (Japan) + + + thepit + The Pit + + + thepitj + The Pit (Japan) + + + thepitm + The Pit (bootleg on Moon Quasar hardware) + + + thepitu1 + The Pit (US set 1) + + + thepitu2 + The Pit (US set 2) + + + theroes + Thunder Heroes + + + thetogyu + The Togyu (315-5065, Japan) + + + thief + Thief + + + thndblst + Thunder Blaster (Japan) + + + thndbolt + Thunderbolt + + + thndrbld + Thunder Blade (upright, FD1094 317-0056) + + + thndrbld1 + Thunder Blade (deluxe/standing, unprotected) + + + thndrx2 + Thunder Cross II (World) + + + thndrx2a + Thunder Cross II (Asia) + + + thndrx2j + Thunder Cross II (Japan) + + + thndzone + Thunder Zone (World, Rev 1) + + + thndzone4 + Thunder Zone (World 4 Players) + + + thndzonea + Thunder Zone (World) + + + thndzonej + Thunder Zone (Japan) + + + thoop + Thunder Hoop (Ver. 1) + + + thoop2 + TH Strikes Back + + + thrild2 + Thrill Drive 2 (ver EBB) + + + thrild2a + Thrill Drive 2 (ver AAA) + + + thrild2c + Thrill Drive 2 (ver EAA) + + + thrilld + Thrill Drive (JAE) + + + thrilldae + Thrill Drive (EAA) + + + thrilldb + Thrill Drive (JAB) + + + thund_p1 + Thunderball (P-1) + + + thunderh + Operation Thunder Hurricane (ver EAA) + + + thunderhu + Operation Thunder Hurricane (ver UAA) + + + thunderj + ThunderJaws (rev 3) + + + thunderja + ThunderJaws (rev 2) + + + thunderl + Thunder & Lightning + + + thunderlbl + Thunder & Lightning (bootleg with Tetris sound) + + + thunderx + Thunder Cross (set 1) + + + thunderxa + Thunder Cross (set 2) + + + thunderxb + Thunder Cross (set 3) + + + thunderxj + Thunder Cross (Japan) + + + thundfox + Thunder Fox (World) + + + thundfoxj + Thunder Fox (Japan) + + + thundfoxu + Thunder Fox (US) + + + thunt + Puzzle & Action: Treasure Hunt (JUET 970901 V2.00E) + + + thuntk + Puzzle & Action: BoMulEul Chajara (JUET 970125 V2.00K) + + + tickee + Tickee Tickats + + + tictac + Tic Tac Trivia (6221-23, U5-0C Horizontal) + + + tictacv + Tic Tac Trivia (6221-22, U5-0 Vertical) + + + tigerh + Tiger Heli (US) + + + tigerhb1 + Tiger Heli (bootleg set 1) + + + tigerhb2 + Tiger Heli (bootleg set 2) + + + tigerhb3 + Tiger Heli (bootleg set 3) + + + tigerhj + Tiger Heli (Japan) + + + tigeroad + Tiger Road (US) + + + tigeroadb + Tiger Road (US bootleg) + + + tigerrag + Tiger Rag + + + tighook + Tiger Hook (Version 2.1E Dual) + + + tighookc1 + Tiger Hook (Version 2.1R, set 1) + + + tighookc2 + Tiger Hook (Version 2.0LT, set 1) + + + tighookd1 + Tiger Hook (Version 2.1R, set 2) + + + tighookd2 + Tiger Hook (Version 2.0LT, set 2) + + + tighooko + Tiger Hook (Version 1.7XT) + + + tighooko2 + Tiger Hook (Version 1.7) + + + tighookv1 + Tiger Hook (Version 2.1R Dual) + + + tighookv2 + Tiger Hook (Version 2.0LT Dual) + + + timber + Timber + + + time2000 + Time 2000 + + + timecris + Time Crisis (Rev. TS2 Ver.B) + + + timecrisa + Time Crisis (Rev. TS2 Ver.A) + + + timecrs2 + Time Crisis II (TSS3 Ver. B) + + + timecrs2v2b + Time Crisis II (TSS2 Ver. B) + + + timecrs2v4a + Time Crisis II (TSS4 Ver. A) + + + timecrs3 + Time Crisis 3 (TST1) + + + timecrs3e + Time Crisis 3 (TST2 Ver. A) + + + timefgtr + Time Fighter (Time Pilot conversion on Galaxian hardware) + + + timekill + Time Killers (v1.32) + + + timekill121 + Time Killers (v1.21) + + + timekill131 + Time Killers (v1.31) + + + timelimt + Time Limit + + + timeline + Time Line + + + timeplt + Time Pilot + + + timeplta + Time Pilot (Atari) + + + timepltc + Time Pilot (Centuri) + + + timescan + Time Scanner (set 2, System 16B) + + + timescan1 + Time Scanner (set 1, System 16A, FD1089B 317-0024) + + + timesold + Time Soldiers (US Rev 3) + + + timesold1 + Time Soldiers (US Rev 1) + + + timetrv + Time Traveler + + + timetunl + Time Tunnel + + + tinklpit + Tinkle Pit (Japan) + + + tinstar + The Tin Star (set 1) + + + tinstar2 + The Tin Star (set 2) + + + tinv2650 + The Invaders + + + tiptop + Tip Top (3 board stack) + + + tisland + Treasure Island + + + tisub + Treasure Island (Subsino, set 1) + + + tisuba + Treasure Island (Subsino, set 2) + + + titan + Titan + + + titan1 + Titan (alternate set) + + + titanic + Titanic (Coin dropper) + + + titlef + Title Fight (World) + + + titlefj + Title Fight (Japan) + + + titlefu + Title Fight (US) + + + tjsb + Mahjong Tian Jiang Shen Bing (V137C) + + + tjumpman + Tobikose! Jumpman + + + tkdensho + Toukidenshou - Angel Eyes (VER. 960614) + + + tkdenshoa + Toukidenshou - Angel Eyes (VER. 960427) + + + tkmmpzdm + Tokimeki Memorial Taisen Puzzle-dama (ver JAB) + + + tknight + Tecmo Knight + + + tkoboxng + Vs. T.K.O. Boxing + + + tm + Touchmaster (v3.00 Euro) + + + tm2k + Touchmaster 2000 Plus (v4.63 Standard) + + + tm2ka + Touchmaster 2000 (v4.02 Standard) + + + tm2kb + Touchmaster 2000 (v4.00 Standard) + + + tm3k + Touchmaster 3000 (v5.02 Standard) + + + tm3ka + Touchmaster 3000 (v5.01 Standard) + + + tm4k + Touchmaster 4000 (v6.03 Standard) + + + tm4ka + Touchmaster 4000 (v6.02 Standard) + + + tm4kb + Touchmaster 4000 (v6.01 Standard) + + + tm4kca + Touchmaster 4000 (v6.02 California) + + + tm4kmn + Touchmaster 4000 (v6.01 Minnesota) + + + tm4knj + Touchmaster 4000 (v6.03 New Jersey) + + + tm5k + Touchmaster 5000 (v7.10 Standard) + + + tm5ka + Touchmaster 5000 (v7.01 Standard) + + + tm5kca + Touchmaster 5000 (v7.10 California) + + + tm5kmn + Touchmaster 5000 (v7.10 Minnesota) + + + tm7k + Touchmaster 7000 (v8.04 Standard) + + + tm7ka + Touchmaster 7000 (v8.00 Standard) + + + tm7keval + Touchmaster 7000 (v8.1X Evaluation) + + + tm7kmn + Touchmaster 7000 (v8.04 Minnesota) + + + tm7kmna + Touchmaster 7000 (v8.00 Minnesota) + + + tm7knj + Touchmaster 7000 (v8.05 New Jersey) + + + tm8k + Touchmaster 8000 (v9.04 Standard) + + + tm8k902 + Touchmaster 8000 (v9.02 Standard) + + + tmac_a18 + Time Machine (1.8) + + + tmac_a24 + Time Machine (2.4) + + + tmachzac + Time Machine (Zaccaria) + + + tmachzacf + Time Machine (Zaccaria, French speech) + + + tmachzacg + Time Machine (Zaccaria, German speech) + + + tmdo + Touchmaster (v2.2-01 Standard) + + + tmek + T-MEK (v5.1, The Warlords) + + + tmek20 + T-MEK (v2.0, prototype) + + + tmek44 + T-MEK (v4.4) + + + tmek45 + T-MEK (v4.5) + + + tmek51p + T-MEK (v5.1, prototype) + + + tmfnt_l5 + Time Fantasy (L-5) + + + tmht + Teenage Mutant Hero Turtles (UK 4 Players, set 1) + + + tmht22pe + Teenage Mutant Hero Turtles - Turtles in Time (2 Players ver EBA) + + + tmht2p + Teenage Mutant Hero Turtles (UK 2 Players, set 1) + + + tmht2pa + Teenage Mutant Hero Turtles (UK 2 Players, set 2) + + + tmhta + Teenage Mutant Hero Turtles (UK 4 Players, set 2) + + + tmmjprd + Tokimeki Mahjong Paradise - Dear My Love + + + tmnt + Teenage Mutant Ninja Turtles (World 4 Players) + + + tmnt2 + Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver UAA) + + + tmnt22pu + Teenage Mutant Ninja Turtles - Turtles in Time (2 Players ver UDA) + + + tmnt2a + Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver ADA) + + + tmnt2pj + Teenage Mutant Ninja Turtles (Japan 2 Players) + + + tmnt2po + Teenage Mutant Ninja Turtles (Oceania 2 Players) + + + tmnt_103 + Teenage Mutant Ninja Turtles (1.03) + + + tmnt_104 + Teenage Mutant Ninja Turtles (1.04) + + + tmntj + Teenage Mutant Ninja Turtles (Japan 4 Players) + + + tmntu + Teenage Mutant Ninja Turtles (US 4 Players, set 1) + + + tmntua + Teenage Mutant Ninja Turtles (US 4 Players, set 2) + + + tmosh + Tokimeki Memorial Oshiete Your Heart (GQ673 JAA) + + + tmoshs + Tokimeki Memorial Oshiete Your Heart Seal Version (GE755 JAA) + + + tmoshsp + Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAB) + + + tmoshspa + Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAA) + + + tmpdoki + Tokimeki Mahjong Paradise - Doki Doki Hen + + + tmspoker + unknown TMS9980 Poker Game + + + tmwrp_l2 + Time Warp (L-2) + + + tmwrp_t2 + Time Warp (T-2) + + + tndrcade + Thundercade / Twin Formation + + + tndrcadej + Tokusyu Butai U.A.G. (Japan) + + + tnextspc + The Next Space (set 1) + + + tnextspc2 + The Next Space (set 2) + + + tnextspcj + The Next Space (Japan) + + + tnk3 + T.N.K III (US) + + + tnk3j + T.A.N.K (Japan) + + + tnzs + The NewZealand Story (World, new version) (newer PCB) + + + tnzsj + The NewZealand Story (Japan, new version) (newer PCB) + + + tnzsjo + The NewZealand Story (Japan, old version) (older PCB) + + + tnzso + The NewZealand Story (World, old version) (older PCB) + + + tnzsop + The NewZealand Story (World, prototype?) (older PCB) + + + todruaga + The Tower of Druaga (New Ver.) + + + todruagao + The Tower of Druaga (Old Ver.) + + + todruagas + The Tower of Druaga (Sidam) + + + toffy + Toffy + + + togenkyo + Tougenkyou (Japan 890418) + + + toggle + Toggle (prototype) + + + toki + Toki (World, set 1) + + + tokia + Toki (World, set 2) + + + tokib + Toki (Datsu bootleg) + + + tokimbsj + Tokimeki Bishoujo [BET] (Japan) + + + tokio + Tokio / Scramble Formation (newer) + + + tokiob + Tokio / Scramble Formation (bootleg) + + + tokioo + Tokio / Scramble Formation (older) + + + tokiou + Tokio / Scramble Formation (US) + + + tokisens + Toki no Senshi - Chrono Soldier + + + tokiu + Toki (US, set 1) + + + tokiua + Toki (US, set 2) + + + tokkae + Taisen Tokkae-dama (ver JAA) + + + tokyocop + Tokyo Cop (Italy) + + + tokyogal + Tokyo Gal Zukan (Japan) + + + tokyowar + Tokyo Wars (Rev. TW2 Ver.A) + + + tom_06 + Theatre Of Magic (0.6a) + + + tom_10f + Theatre Of Magic (1.0 French) + + + tom_12 + Theatre Of Magic (1.2X) + + + tom_13 + Theatre Of Magic (1.3X) + + + tom_14h + Theatre Of Magic (1.4H) + + + tomahawk + Tomahawk 777 (rev 5) + + + tomahawk1 + Tomahawk 777 (rev 1) + + + tomcat + TomCat (prototype) + + + tomcatsw + TomCat (Star Wars hardware, prototype) + + + tomy_400 + The Who's Tommy Pinball Wizard (4.00) + + + tomy_h30 + The Who's Tommy Pinball Wizard (3.00, The Netherlands) + + + tondemo + Tondemo Crisis (Japan) + + + tonton + Waku Waku Doubutsu Land TonTon (Japan) + + + tontonb + Tonton [BET] (Japan set 1) + + + tonypok + Poker Master (Tony-Poker V3.A, hack?) + + + toobin + Toobin' (rev 3) + + + toobin1 + Toobin' (rev 1) + + + toobin2 + Toobin' (rev 2) + + + toobin2e + Toobin' (Europe, rev 2) + + + toobine + Toobin' (Europe, rev 3) + + + toobing + Toobin' (German, rev 3) + + + top21 + Top XXI (Version 1.2) + + + topaz_l1 + Topaz (Shuffle) (L-1) + + + topbladv + Top Blade V + + + topgame + Top Game Laser L10 (Bingo) + + + topgamet + Top Game Turbo (Bingo) + + + topgear + Top Gear (4VXFC969, New Zealand) + + + topgun + Vs. Top Gun + + + topgunbl + Top Gunner (bootleg, Rotary Joystick) + + + topgunnr + Top Gunner (Exidy) + + + topgunr + Top Gunner (US, 8-way Joystick) + + + tophuntr + Top Hunter - Roddy & Cathy (NGM-046) + + + tophuntrh + Top Hunter - Roddy & Cathy (NGH-046) + + + topland + Top Landing (World) + + + toppin + Top Pin + + + toppyrap + Toppy & Rappy + + + topracer + Top Racer (with MB8841 + MB8842, 1984) + + + topracera + Top Racer (with MB8841 + MB8842, 1983) + + + topracern + Top Racer (no MB8841 + MB8842) + + + toprollr + Top Roller + + + topsecex + Top Secret (Exidy) (version 1.0) + + + topsecrt + Top Secret (Japan, old revision) + + + topshoot + Top Shooter + + + topskatr + Top Skater (Export, Revision A) + + + topskatrj + Top Skater (Japan) + + + topskatru + Top Skater (USA, Revision A) + + + topspeed + Top Speed (World) + + + topspeedu + Top Speed (US) + + + toramich + Tora e no Michi (Japan) + + + toratora + Tora Tora (prototype?) + + + torch + Torch + + + toride2g + Toride II Adauchi Gaiden + + + toride2gg + Toride II Adauchi Gaiden (German) + + + toride2gk + Toride II Bok Su Oi Jeon Adauchi Gaiden (Korea) + + + toride2j + Toride II (Japan) + + + tornado1 + Tornado (set 1, Defender bootleg) + + + tornado2 + Tornado (set 2, Defender bootleg) + + + tornbase + Tornado Baseball / Ball Park + + + torp_e21 + Torpedo Alley (2.1, Europe) + + + tortufam + Tortuga Family (Italian) + + + torus + Torus + + + toryumon + Toryumon + + + totan_04 + Tales Of The Arabian Nights (0.4) + + + totan_12 + Tales Of The Arabian Nights (1.2) + + + totan_13 + Tales Of The Arabian Nights (1.3) + + + totan_14 + Tales Of The Arabian Nights (1.4) + + + totcarn + Total Carnage (rev LA1 03/10/92) + + + totcarnp + Total Carnage (prototype, rev 1.0 01/25/92) + + + totd + The Typing of the Dead (JPN, USA, EXP, KOR, AUS) (Rev A) + + + totem + Totem + + + totlvica + Total Vice (ver AAB) + + + totlvice + Total Vice (ver UAC) + + + totlvicj + Total Vice (ver JAD) + + + totmejan + Tottemo E Jong + + + touchdn + Touchdown + + + toucheme + Touche Me + + + touchgo + Touch & Go (World) + + + touchgoe + Touch & Go (earlier revision) + + + touchgon + Touch & Go (Non North America) + + + toukon3 + Shin Nihon Pro Wrestling Toukon Retsuden 3 Arcade Edition (Japan, TR1/VER.A) + + + toukon4 + Shin Nihon Pro Wrestling Toukon Retsuden 4 Arcade Edition (TRF1 Ver. A) + + + tour4000 + Tour 4000 + + + tour4010 + Tour 4010 + + + toursol + Tournament Solitaire (V1.06, 08/03/95) + + + toursol1 + Tournament Solitaire (V1.04, 06/22/95) + + + tourtab2 + Tournament Table (set 2) + + + tourtabl + Tournament Table (set 1) + + + tourvis + Tourvision PCE bootleg + + + touryuu + Touryuumon (V1.1)? + + + toutrun + Turbo Out Run (Out Run upgrade, FD1094 317-0118) + + + toutrun1 + Turbo Out Run (deluxe cockpit, FD1094 317-0109) + + + toutrun2 + Turbo Out Run (cockpit, FD1094 317-0106) + + + toutrun3 + Turbo Out Run (cockpit, FD1094 317-0107) + + + toutrunj + Turbo Out Run (Japan, Out Run upgrade, FD1094 317-0117) + + + toyfight + Toy Fighter + + + toyland + Toy Land Adventure + + + toypop + Toypop + + + tp2m32 + Tetris Plus 2 (MegaSystem 32 Version) + + + tp84 + Time Pilot '84 (set 1) + + + tp84a + Time Pilot '84 (set 2) + + + tp84b + Time Pilot '84 (set 3) + + + tpgolf + Top Player's Golf (NGM-003)(NGH-003) + + + tpoker2 + Turbo Poker 2 + + + tps + TPS + + + tqst + Treasure Quest + + + trackfld + Track & Field + + + trackfldc + Track & Field (Centuri) + + + trackfldnz + Track & Field (NZ bootleg?) + + + trailblz + Trail Blazer + + + trailer + Trailer + + + trally + Thrash Rally (ALM-003)(ALH-003) + + + tranqgun + Tranquilizer Gun + + + transfrm + Transformer + + + travrusa + Traverse USA / Zippy Race + + + travrusab + Traverse USA (bootleg) + + + trbwtchs + Trouble Witches AC (v1.00J) + + + trckydoc + Tricky Doc (set 1) + + + trckydoca + Tricky Doc (set 2) + + + treahunt + Treasure Hunt + + + trebltop + Treble Top (39-360-070) + + + trek_110 + Star Trek 25th Anniversary (1.10) + + + trek_11a + Star Trek 25th Anniversary (1.10 Alpha Display) + + + trek_120 + Star Trek 25th Anniversary (1.20) + + + trek_200 + Star Trek 25th Anniversary (2.00) + + + trek_201 + Star Trek 25th Anniversary (2.01) + + + trgheart + Trigger Heart Exelica (Rev A) (GDL-0036A) + + + tricktrp + Trick Trap (World?) + + + trident + Trident + + + triforce + Triforce Bios + + + trigon + Trigon (Japan) + + + triothep + Trio The Punch - Never Forget Me... (World) + + + triothepj + Trio The Punch - Never Forget Me... (Japan) + + + tripdraw + Tripple Draw (V3.1 s) + + + tripjok + Triple Joker (Bingo) + + + triplay + Triple Play + + + triplep + Triple Punch (set 1) + + + triplepa + Triple Punch (set 2) + + + triplew1 + Mahjong Triple Wars (Japan) + + + triplew2 + Mahjong Triple Wars 2 (Japan) + + + triplfun + Triple Fun + + + triplhnt + Triple Hunt + + + tripool + Tri-Pool (Casino Tech) + + + tripoola + Tri-Pool (Costal Games) + + + trisport + Tri-Sports + + + trivia12 + Trivial Pursuit (Think Tank - Genus Edition) (12/14/84) + + + triviabb + Trivial Pursuit (Baby Boomer Edition) (3/20/85) + + + triviaes + Trivial Pursuit (Spanish) + + + triviag1 + Trivial Pursuit (Think Tank - Genus Edition) (set 1) + + + triviag2 + Trivial Pursuit (Genus II Edition) + + + trivialp + Trivial Pursuit (New Edition) (prod. 1D) + + + trivialpd + Trivial Pursuit (New Edition) (prod. 1D) (Protocol) + + + trivialpo + Trivial Pursuit + + + triviasp + Trivial Pursuit (All Star Sports Edition) + + + triviayp + Trivial Pursuit (Young Players Edition) + + + trivquiz + Triv Quiz + + + trizeal + Trizeal (GDL-0026) + + + trizn_l1 + Tri Zone (L-1) + + + trizn_t1 + Tri Zone (T-1) + + + troangel + Tropical Angel + + + trog + Trog (rev LA5 03/29/91) + + + trog3 + Trog (rev LA3 02/14/91) + + + trog4 + Trog (rev LA4 03/11/91) + + + trogpa4 + Trog (prototype, rev 4.00 07/27/90) + + + trogpa6 + Trog (prototype, rev PA6-PAC 09/09/90) + + + trojan + Trojan (US set 1) + + + trojana + Trojan (US set 2) + + + trojanb + Trojan (bootleg) + + + trojanj + Tatakai no Banka (Japan) + + + trojanr + Trojan (Romstar) + + + tron + Tron (8/9) + + + tron2 + Tron (6/25) + + + tron3 + Tron (6/17) + + + tron4 + Tron (6/15) + + + trophyh + Trophy Hunting - Bear & Moose V1.0 + + + trstar + Top Ranking Stars (Ver 2.1O 1993/05/21) (New Version) + + + trstar2k + Triple Star 2000 + + + trstarj + Top Ranking Stars (Ver 2.1J 1993/05/21) (New Version) + + + trstaro + Top Ranking Stars (Ver 2.1O 1993/05/21) (Old Version) + + + trstaroj + Top Ranking Stars (Ver 2.1J 1993/05/21) (Old Version) + + + truckk + Truck Kyosokyoku (Japan, TKK2/VER.A) + + + trucksp2 + Truck Stop (P-2) + + + trucksp3 + Truck Stop (P-3) + + + truco + Truco-Tron + + + trucocl + Truco Clemente + + + truxton + Truxton / Tatsujin + + + truxton2 + Truxton II / Tatsujin Oh + + + trvchlng + Trivia Challenge + + + trvgns + Trivia Genius + + + trvhang + Trivia Hangup (question set 1) + + + trvhanga + Trivia Hangup (question set 2) + + + trvmadns + Trivia Madness - Series A Question set + + + trvmadnsa + Trivia Madness - Series B Question set + + + trvmstr + Trivia Master (set 1) + + + trvmstra + Trivia Master (set 2) + + + trvmstrb + Trivia Master (set 3) + + + trvmstrc + Trivia Master (set 4) + + + trvquest + Trivia Quest + + + trvwz2 + Trivia ? Whiz (6221-05, Edition 2) + + + trvwz2a + Trivia ? Whiz (6221-05, Edition 2 Alt Sex trivia) + + + trvwz3h + Trivia ? Whiz (6221-05, Edition 3) + + + trvwz3ha + Trivia ? Whiz (6221-05, Edition 3 Sex trivia III) + + + trvwz3v + Trivia ? Whiz (6221-04, Edition 3 Vertical) + + + trvwz4 + Trivia ? Whiz (6221-13, U5-0B Edition 4) + + + trvwz4a + Trivia ? Whiz (6221-13, U5-0B Edition 4 Alt Sex trivia) + + + trvwzh + Trivia ? Whiz (6221-00) + + + trvwzha + Trivia ? Whiz (6221-00, with Sex trivia) + + + trvwzhb + Trivia ? Whiz (6221-00, Alt Gen trivia) + + + trvwzv + Trivia ? Whiz (6221-02, Vertical) + + + tryout + Pro Baseball Skill Tryout (Japan) + + + ts2 + Battle Arena Toshinden 2 (USA 951124) + + + ts2a + Battle Arena Toshinden 2 (USA 951124) Older + + + ts2j + Battle Arena Toshinden 2 (Japan 951124) + + + ts_la2 + The Shadow (LA-2) + + + ts_la4 + The Shadow (LA-4) + + + ts_lf6 + The Shadow (LF-6) French + + + ts_lh6 + The Shadow (LH-6) + + + ts_lm6 + The Shadow (LM-6) Mild + + + ts_lx4 + The Shadow (LX-4) + + + ts_lx5 + The Shadow (LX-5) + + + ts_pa1 + The Shadow (PA-1) + + + tsamurai + Samurai Nihon-Ichi (set 1) + + + tsamurai2 + Samurai Nihon-Ichi (set 2) + + + tsamuraih + Samurai Nihon-Ichi (bootleg, harder) + + + tsarevna + Tsarevna (v1.29) + + + tsarevnaa + Tsarevna (v1.31) + + + tsclass + Trap Shoot Classic (v1.0 21-mar-1997) + + + tshingen + Shingen Samurai-Fighter (Japan, English) + + + tshingena + Takeda Shingen (Japan, Japanese) + + + tshoot + Turkey Shoot + + + tsptr_l3 + Transporter the Rescue (L-3) + + + tst_galx + Galaxian Test ROM + + + tst_invd + Space Invaders Test ROM + + + tstrike + Thunder Strike (set 1) + + + tstrikea + Thunder Strike (set 2, older) + + + tstrk_l1 + Triple Strike (Shuffle) (L-1) + + + tsurugi + Tsurugi (ver EAB) + + + tsurugij + Tsurugi (ver JAC) + + + tt_game + unknown Toptronic pinball game + + + ttblock + T. T. Block [TTL] + + + ttchamp + Table Tennis Champions (set 1) + + + ttchampa + Table Tennis Champions (set 2) + + + ttfitter + T.T. Fitter (Japan) + + + ttmahjng + T.T Mahjong + + + tts_l1 + Tic-Tac-Strike (Shuffle) (L-1) + + + tts_l2 + Tic-Tac-Strike (Shuffle) (L-2) + + + ttt_10 + Ticket Tac Toe (1.0) + + + tturf + Tough Turf (set 2, Japan, 8751 317-0104) + + + tturfbl + Tough Turf (Datsu bootleg) + + + tturfu + Tough Turf (set 1, US, 8751 317-0099) + + + tubeit + Tube-It + + + tubep + Tube Panic + + + tubepb + Tube Panic (bootleg) + + + tugboat + Tugboat + + + tumbleb + Tumble Pop (bootleg) + + + tumbleb2 + Tumble Pop (bootleg with PIC) + + + tumblep + Tumble Pop (World) + + + tumblepba + Tumble Pop (Playmark bootleg) + + + tumblepj + Tumble Pop (Japan) + + + tunhunt + Tunnel Hunt + + + tunhuntc + Tunnel Hunt (Centuri) + + + turbo + Turbo + + + turboa + Turbo (encrypted set 1) + + + turbob + Turbo (encrypted set 2) + + + turbofrc + Turbo Force (old revision) + + + turbosub + Turbo Sub (prototype rev. TSCA) + + + turbosub6 + Turbo Sub (prototype rev. TSC6) + + + turbosub7 + Turbo Sub (prototype rev. TSC7) + + + turbotag + Turbo Tag (prototype) + + + turfmast + Neo Turf Masters / Big Tournament Golf + + + turkhunt + Turkey Hunting USA V1.0 + + + turpin + Turpin + + + turpins + Turpin (bootleg on Scramble hardware) + + + turrett + Turret Tower + + + turtles + Turtles + + + turtship + Turtle Ship (North America) + + + turtshipj + Turtle Ship (Japan) + + + turtshipk + Turtle Ship (Korea) + + + tutankhm + Tutankham + + + tutankhms + Tutankham (Stern Electronics) + + + tutstomb + Tut's Tomb + + + tv21 + T.V. 21 + + + tv21_3 + T.V. 21 III + + + tvablast + Aero Blasters (Tourvision PCE bootleg) + + + tvcolumn + Columns (Tourvision PCE bootleg) + + + tvdunexp + Dungeon Explorer (Tourvision PCE bootleg) + + + tvflaptw + Final Lap Twin (Tourvision PCE bootleg) + + + tvfsoc90 + Formation Soccer - Human Cup '90 (Tourvision PCE bootleg) + + + tvgomola + Gomola Speed (Tourvision PCE bootleg) + + + tvjchan + Jackie Chan (Tourvision PCE bootleg) + + + tvlegaxe + Makyo Densetsu - The Legenary Axe (Tourvision PCE bootleg) + + + tvpcgen2 + PC Genjin 2 - Pithecanthropus Computerurus (Tourvision PCE bootleg) + + + tvpoker + T.V. Poker + + + tvpow11 + Power Eleven (Tourvision PCE bootleg) + + + tvpwlg4 + Power League IV (Tourvision PCE bootleg) + + + tvrs2 + Rastan Saga II (Tourvision PCE bootleg) + + + tvsci + Special Criminal Investigation (Tourvision PCE bootleg) + + + tvsssold + Super Star Soldier (Tourvision PCE bootleg) + + + tvsvball + Super Volley ball (Tourvision PCE bootleg) + + + tvthbld + Thunder Blade (Tourvision PCE bootleg) + + + tvusapb + USA Pro Basketball (Tourvision PCE bootleg) + + + tvvolfd + Volfied (Tourvision PCE bootleg) + + + twcup98 + Tecmo World Cup '98 (JUET 980410 V1.000) + + + twinactn + Twin Action + + + twinadv + Twin Adventure (World) + + + twinadvk + Twin Adventure (Korea) + + + twinbee + TwinBee (ROM version) + + + twinbrat + Twin Brats (set 1) + + + twinbrata + Twin Brats (set 2) + + + twincobr + Twin Cobra (World) + + + twincobru + Twin Cobra (US) + + + twineag2 + Twin Eagle II - The Rescue Mission + + + twineagl + Twin Eagle - Revenge Joe's Brother + + + twinfalc + Twin Falcons + + + twinhawk + Twin Hawk (World) + + + twinhawku + Twin Hawk (US) + + + twinkle + Twinkle + + + twinqix + Twin Qix (Ver 1.0A 1995/01/17) (Prototype) + + + twins + Twins (set 1) + + + twinsa + Twins (set 2) + + + twinspri + Twinkle Star Sprites + + + twinsqua + Twin Squash + + + twocrude + Two Crude (US) + + + twotiger + Two Tigers (dedicated) + + + twotigerc + Two Tigers (Tron conversion) + + + twrldc94 + Tecmo World Cup '94 (set 1) + + + twrldc94a + Tecmo World Cup '94 (set 2) + + + twrshaft + Tower & Shaft + + + tws96 + Tecmo World Soccer '96 + + + twst_300 + Twister (3.00) + + + twst_404 + Twister (4.04) + + + twst_405 + Twister (4.05) + + + tx1 + TX-1 (World) + + + tx1jb + TX-1 (Japan rev. B) + + + tx1jc + TX-1 (Japan rev. C) + + + txsector + TX-Sector + + + tylz + Tylz (prototype) + + + typhoon + Typhoon + + + tz_92 + Twilight Zone (9.2) + + + tz_94ch + Twilight Zone (9.4CH) + + + tz_94h + Twilight Zone (9.4H) + + + tz_h7 + Twilight Zone (H-7) + + + tz_h8 + Twilight Zone (H-8) + + + tz_ifpa + Twilight Zone (IFPA rules) + + + tz_l1 + Twilight Zone (L-1) + + + tz_l2 + Twilight Zone (L-2) + + + tz_l3 + Twilight Zone (L-3) + + + tz_l4 + Twilight Zone (L-4) + + + tz_p3 + Twilight Zone (P-3) + + + tz_p4 + Twilight Zone (P-4) + + + tz_pa1 + Twilight Zone (PA-1) + + + uballoon + Ultra Balloon + + + uboat65 + U-boat 65 + + + uccops + Undercover Cops (World) + + + uccopsar + Undercover Cops - Alpha Renewal Version + + + uccopsj + Undercover Cops (Japan) + + + uccopsu + Undercover Cops (US) + + + uchuuai + Mahjong Uchuu yori Ai wo komete (Japan) + + + ucytokyu + Uchuu Tokkyuu Medalian + + + uecology + Ultimate Ecology (Japan 931203) + + + ufo_x + UFO-X + + + ufosensi + Ufo Senshi Yohko Chan (MC-8123, 317-0064) + + + ufosensib + Ufo Senshi Yohko Chan (bootleg, not encrypted) + + + ultennis + Ultimate Tennis + + + ultennisj + Ultimate Tennis (v 1.4, Japan) + + + ultrainv + Ultra Invaders + + + ultraman + Ultraman (Japan) + + + ultramhm + Ultra Maru-hi Mahjong (Japan) + + + ultratnk + Ultra Tank + + + ultrax + Ultra X Weapons / Ultra Keibitai + + + ultrchmp + Se Gye Hweng Dan Ultra Champion (Korea) + + + ultrchmph + Cheng Ba Shi Jie - Chao Shi Kong Guan Jun (Taiwan) + + + umanclub + Ultraman Club - Tatakae! Ultraman Kyoudai!! + + + umipoker + Umi de Poker / Marine Paradise (Japan) + + + umk3 + Ultimate Mortal Kombat 3 (rev 1.2) + + + umk3r10 + Ultimate Mortal Kombat 3 (rev 1.0) + + + umk3r11 + Ultimate Mortal Kombat 3 (rev 1.1) + + + unclepoo + Uncle Poo + + + undefeat + Under Defeat (GDL-0035) + + + undoukai + The Undoukai (Japan) + + + undrfire + Under Fire (World) + + + undrfirej + Under Fire (Japan) + + + undrfireu + Under Fire (US) + + + uniwars + UniWar S + + + unkch1 + New Cherry Gold '99 (bootleg of Super Cherry Master) (set 1) + + + unkch2 + Super Cherry Gold (bootleg of Super Cherry Master) + + + unkch3 + New Cherry Gold '99 (bootleg of Super Cherry Master) (set 2) + + + unkch4 + Grand Cherry Master (bootleg of Super Cherry Master) + + + unkh8gam + unknown H8 Italian Gambling game + + + unkhorse + unknown Japanese horse gambling game + + + unkpacg + unknown Pac-Man gambling game + + + unsquad + U.N. Squadron (USA) + + + untoucha + Untouchable (Japan) + + + uopoko + Puzzle Uo Poko (International) + + + uopokoj + Puzzle Uo Poko (Japan) + + + upndown + Up'n Down (315-5030) + + + upndownu + Up'n Down (not encrypted) + + + upscope + Up Scope + + + upyoural + Up Your Alley + + + urashima + Otogizoushi Urashima Mahjong (Japan) + + + usafootb + U.S.A. Football + + + usagi + Usagi (V2.02J) + + + usagiol + Usagi Online (v2.04J) + + + usagiym + Usagi - Yamashiro Mahjong Hen (GDL-0022) + + + usclssic + U.S. Classic + + + usg182 + Games V18.2 + + + usg185 + Games V18.5 + + + usg187c + Games V18.7C + + + usg32 + Super Duper Casino (California V3.2) + + + usg82 + Super Ten V8.2 + + + usg83x + Super Ten V8.3X + + + usgames + Games V25.4X + + + usvsthem + Us vs. Them + + + utoukond + Ultra Toukon Densetsu (Japan) + + + v4addlad + Adders and Ladders (v2.1) (MPU4 Video) + + + v4addlad20 + Adders and Ladders (v2.0) (MPU4 Video) + + + v4barqs2 + Barquest 2 (v0.3) (MPU4 Video) + + + v4barqst + Barquest (v2.6d) (MPU4 Video) + + + v4big40 + Big 40 Poker (Bwb) (MPU4 Video) + + + v4bigfrt + Big Fruits (v2.0?) (MPU4 Video) + + + v4bios + MPU4 Video Firmware + + + v4blox + Blox (v2.0) (MPU4 Video) + + + v4bloxd + Blox (v2.0, Datapak) (MPU4 Video) + + + v4bubbnk + Bubbly Bonk (v4.0?) (MPU4 Video) + + + v4bulblx + Bullion Blox (Bwb) (MPU4 Video) + + + v4cmaze + The Crystal Maze (v1.3) (MPU4 Video) + + + v4cmaze2 + The New Crystal Maze Featuring Ocean Zone (v2.2) (MPU4 Video) + + + v4cmaze2a + The New Crystal Maze Featuring Ocean Zone (v0.1, AMLD) (MPU4 Video) + + + v4cmaze2b + The New Crystal Maze Featuring Ocean Zone (v2.0) (MPU4 Video) + + + v4cmaze2c + The New Crystal Maze Featuring Ocean Zone (v?.?) (MPU4 Video) + + + v4cmaze2d + The New Crystal Maze Featuring Ocean Zone (v2.2, Datapak) (MPU4 Video) + + + v4cmaze3 + The Crystal Maze Team Challenge (v0.9) (MPU4 Video) + + + v4cmaze3a + The Crystal Maze Team Challenge (v1.2, AMLD) (MPU4 Video) + + + v4cmaze3b + The Crystal Maze Team Challenge (v0.8) (MPU4 Video) + + + v4cmaze3c + The Crystal Maze Team Challenge (v?.?) (MPU4 Video) + + + v4cmaze3d + The Crystal Maze Team Challenge (v0.9, Datapak) (MPU4 Video) + + + v4cmazea + The Crystal Maze (v0.1, AMLD) (MPU4 Video) + + + v4cmazeb + The Crystal Maze (v1.2) (MPU4 Video) + + + v4cmazec + The Crystal Maze (v1.3 alt) (MPU4 Video) + + + v4cmazed + The Crystal Maze (v1.1) (MPU4 Video) + + + v4cmazedat + The Crystal Maze (v1.3, Datapak) (MPU4 Video) + + + v4cshinf + Cash Inferno (Bwb) (MPU4 Video) + + + v4cybcas + Cyber Casino (Nova) (MPU4 Video) + + + v4dbltak + Double Take (Bwb) (MPU4 Video) + + + v4dealem + Deal 'Em (MPU4 Conversion Kit, v7.0) + + + v4eyedwn + Eyes Down (v1.3) (MPU4 Video) + + + v4eyedwnd + Eyes Down (v1.3, Datapak) (MPU4 Video) + + + v4frfact + Fruit Factory (Bwb) (MPU4 Video) + + + v4gldrsh + Gold Rush (Bwb) (MPU4 Video) + + + v4mate + The Mating Game (v0.4) (MPU4 Video) + + + v4mated + The Mating Game (v0.4, Datapak) (MPU4 Video) + + + v4mazbel + Mazooma Belle (v2.5) (MPU4 Video) + + + v4mazbla + Mazooma Belle (v1.5) (MPU4 Video) + + + v4mdice + Miami Dice (Bwb) (MPU4 Video) + + + v4megbuk + Megabucks Poker (Bwb) (MPU4 Video) + + + v4miami + Miami Dice (Nova) (MPU4 Video) + + + v4missis + Mississippi Lady (Nova) (MPU4 Video) + + + v4monte + Monte Carlo Or Bust (Bwb) (MPU4 Video) + + + v4opt3 + Option 3 (v1.0) (MPU4 Video) + + + v4opt3d + Option 3 (v1.0) (Datapak) (MPU4 Video) + + + v4ovrmn3 + Over Moon Pt3 (Bwb) (MPU4 Video) + + + v4picdil + Piccadilly Nights (Nova) (MPU4 Video) + + + v4psi + Prize Space Invaders (v1.1) (MPU4 Video) + + + v4psia + Prize Space Invaders (v1.2) (MPU4 Video) + + + v4psib + Prize Space Invaders (v2.0?) (MPU4 Video) + + + v4pztet + Prize Tetris (Bwb) (MPU4 Video, set 1) + + + v4pzteta + Prize Tetris (Bwb) (MPU4 Video, set 2) + + + v4quidgr + Ten Quid Grid (v1.2) (MPU4 Video) + + + v4quidgr2 + Ten Quid Grid (v2.4) (MPU4 Video) + + + v4quidgr2d + Ten Quid Grid (v2.4, Datapak) (MPU4 Video) + + + v4quidgrd + Ten Quid Grid (v1.2, Datapak) (MPU4 Video) + + + v4redhtp + Red Hot Poker (20p/10GBP Cash, release 3) (MPU4 Video) + + + v4rencas + Reno Casino (Bwb) (MPU4 Video) + + + v4reno + Reno Reels (20p/10GBP Cash, release A) (MPU4 Video) + + + v4rhmaz + Red Hot Mazooma Belle (Bwb) (MPU4 Video) + + + v4shpwnd + Shop Window (v2.0) (MPU4 Video) + + + v4sixx + 6-X (Bwb) (MPU4 Video) + + + v4sklcsh + Skill Cash (v1.1) (MPU4 Video) + + + v4skltrk + Skill Trek (v1.1) (MPU4 Video, set 1) + + + v4skltrka + Skill Trek (v1.1) (MPU4 Video, set 2) + + + v4strike + Strike it Lucky (v0.5) (MPU4 Video) + + + v4strike2 + Strike it Lucky (v0.53) (MPU4 Video) + + + v4strike2d + Strike it Lucky (v0.53, Datapak) (MPU4 Video) + + + v4striked + Strike it Lucky (v0.5, Datapak) (MPU4 Video) + + + v4sunbst + Sunburst (Bwb) (MPU4 Video) + + + v4tetrs + BwB Tetris v 2.2 (MPU4 Video) + + + v4time + Time Machine (v2.0) (MPU4 Video) + + + v4timebn + Time Bandit (Bwb) (MPU4 Video) + + + v4turnov + Turnover (v2.3) (MPU4 Video) + + + v4vgpok + Vegas Poker (prototype, release 2) (MPU4 Video) + + + v4wize + Wize Move (v1.3d) (MPU4 Video) + + + v4wizea + Wize Move (v1.2) (MPU4 Video) + + + valkyrie + Valkyrie No Densetsu (Japan) + + + valtric + Valtric + + + vamphalf + Vamf x1/2 (Europe) + + + vamphalfk + Vamp x1/2 (Korea) + + + vampj + Vampire: The Night Warriors (Japan 940705) + + + vampja + Vampire: The Night Warriors (Japan 940705 alt) + + + vampjr1 + Vampire: The Night Warriors (Japan 940630) + + + vandyke + Vandyke (Japan) + + + vandykeb + Vandyke (bootleg with PIC16c57) + + + vandykejal + Vandyke (Jaleco, set 1) + + + vandykejal2 + Vandyke (Jaleco, set 2) + + + vangrd2 + Vanguard II + + + vanguard + Vanguard (SNK) + + + vanguardc + Vanguard (Centuri) + + + vanguardj + Vanguard (Japan) + + + vanilla + Mahjong Vanilla Syndrome (Japan) + + + vanvan + Van-Van Car + + + vanvanb + Van-Van Car (Karateco set 2) + + + vanvank + Van-Van Car (Karateco set 1) + + + vaportra + Vapor Trail - Hyper Offence Formation (World revision 1) + + + vaportra3 + Vapor Trail - Hyper Offence Formation (World revision 3?) + + + vaportrau + Vapor Trail - Hyper Offence Formation (US) + + + vaportrx + Vapor TRX + + + vaportrxp + Vapor TRX (prototype) + + + varth + Varth: Operation Thunderstorm (World 920714) + + + varthj + Varth: Operation Thunderstorm (Japan 920714) + + + varthr1 + Varth: Operation Thunderstorm (World 920612) + + + varthu + Varth: Operation Thunderstorm (USA 920612) + + + vasara + Vasara + + + vasara2 + Vasara 2 (set 1) + + + vasara2a + Vasara 2 (set 2) + + + vastar + Vastar (set 1) + + + vastar2 + Vastar (set 2) + + + vastar3 + Vastar (set 3) + + + vastar4 + Vastar (set 4) + + + vathlete + Virtua Athletics / Virtua Athlete (GDS-0019) + + + vautour + Vautour (bootleg of Phoenix) (8085A CPU) + + + vautourz + Vautour (bootleg of Phoenix) (Z80 CPU) + + + vball + U.S. Championship V'ball (US) + + + vball2pj + U.S. Championship V'ball (Japan) + + + vball2pjb + U.S. Championship V'ball (bootleg of Japan set) + + + vballb + U.S. Championship V'ball (bootleg of US set) + + + vblokbrk + VS Block Breaker (Asia) + + + vbowl + Virtua Bowling (World, V101XCM) + + + vbowlj + Virtua Bowling (Japan, V100JCM) + + + vcarn + Video Carnival 1999 / Super Royal Card (Version 0.11) + + + vcircle + Vicious Circle (prototype) + + + vcombat + Virtual Combat + + + vcop + Virtua Cop (Revision B) + + + vcop2 + Virtua Cop 2 + + + vcop3 + Virtua Cop 3 (Rev A) (GDX-0003A) + + + vcopa + Virtua Cop (Revision A) + + + vector + Vector + + + vega + Vega + + + vegas + Vegas + + + vegasfst + Royal Vegas Joker Card (fast deal) + + + vegasfte + Royal Vegas Joker Card (fast deal, English gfx) + + + vegasgp + Vegas (Game Plan) + + + vegasmil + Royal Vegas Joker Card (fast deal, Mile) + + + vegasslw + Royal Vegas Joker Card (slow deal) + + + vegast + Vegas (Taito) + + + vendetta + Vendetta (World 4 Players ver. T) + + + vendetta2p + Vendetta (World 2 Players ver. W) + + + vendetta2pd + Vendetta (Asia 2 Players ver. D) + + + vendetta2pu + Vendetta (Asia 2 Players ver. U) + + + vendettaj + Crime Fighters 2 (Japan 2 Players ver. P) + + + vendettar + Vendetta (World 4 Players ver. R) + + + venture + Venture (version 5 set 1) + + + venture2 + Venture (version 5 set 2) + + + venture4 + Venture (version 4) + + + venus + Venus (bootleg of Gyruss) + + + version4 + Version 4 (Version 4.3R CGA) + + + version4d2 + Version 4 (Version 4.3E CGA) + + + version4d3 + Version 4 (Version 4.3LT CGA) + + + version4o + Version 4 (Version 4.2R CGA) + + + version4v + Version 4 (Version 4.3R Dual) + + + version4v2 + Version 4 (Version 4.3E Dual) + + + version4v3 + Version 4 (Version 4.3LT Dual) + + + vf + Virtua Fighter + + + vf2 + Virtua Fighter 2 (Version 2.1) + + + vf2a + Virtua Fighter 2 (Revision A) + + + vf2b + Virtua Fighter 2 (Revision B) + + + vf2o + Virtua Fighter 2 + + + vf3 + Virtua Fighter 3 (Revision C) + + + vf3a + Virtua Fighter 3 (Revision A) + + + vf3tb + Virtua Fighter 3 Team Battle + + + vf4 + Virtua Fighter 4 (GDS-0012) + + + vf4b + Virtua Fighter 4 (Rev B) (GDS-0012B) + + + vf4c + Virtua Fighter 4 (Rev C) (GDS-0012C) + + + vf4cart + Virtua Fighter 4 (Cartridge) + + + vf4evo + Virtua Fighter 4 Evolution (Rev B) (GDS-0024B) + + + vf4evoa + Virtua Fighter 4 Evolution (Rev A) (GDS-0024A) + + + vf4evoct + Virtua Fighter 4 Evolution (Cartridge) + + + vf4tuned + Virtua Fighter 4 Final Tuned (Rev F) (GDS-0036F) + + + vf4tuneda + Virtua Fighter 4 Final Tuned (Rev A) (GDS-0036A) + + + vf4tunedd + Virtua Fighter 4 Final Tuned (Rev D) (GDS-0036D) + + + vfive + V-Five (Japan) + + + vfkids + Virtua Fighter Kids (JUET 960319 V0.000) + + + vformula + Virtua Formula + + + vfremix + Virtua Fighter Remix (JUETBKAL 950428 V1.000) + + + vfurlong + Net Select Keiba Victory Furlong + + + vgoalsca + V Goal Soccer (set 2) + + + vgoalsoc + V Goal Soccer (set 1) + + + vhunt2 + Vampire Hunter 2: Darkstalkers Revenge (Japan 970929) + + + vhunt2d + Vampire Hunter 2: Darkstalkers Revenge (Japan 970913 Phoenix Edition) (bootleg) + + + vhunt2r1 + Vampire Hunter 2: Darkstalkers Revenge (Japan 970913) + + + vhuntj + Vampire Hunter: Darkstalkers' Revenge (Japan 950316) + + + vhuntjr1 + Vampire Hunter: Darkstalkers' Revenge (Japan 950307) + + + vhuntjr1s + Vampire Hunter: Darkstalkers' Revenge (Japan 950307 stop version) + + + vhuntjr2 + Vampire Hunter: Darkstalkers' Revenge (Japan 950302) + + + victlapw + Ace Driver: Victory Lap (Rev. ADV2) + + + victnine + Victorious Nine + + + victor21 + Victor 21 + + + victor5 + G.E.A. + + + victor6 + Victor 6 (v2.3N) + + + victor6a + Victor 6 (v2.3) + + + victor6b + Victor 6 (v1.2) + + + victorba + Victor Banana + + + victory + Victory + + + victoryp + Victory (Pinball) + + + victroad + Victory Road + + + videocba + Video Cordoba + + + videodad + Video Dado + + + videomat + Videomat (Polish bootleg) + + + videopin + Video Pinball + + + videopkr + Video Poker + + + videtrna + Videotron Poker (normal controls) + + + videtron + Videotron Poker (cards selector, set 1) + + + videtron2 + Videotron Poker (cards selector, set 2) + + + vidvince + Video Vince and the Game Factory (prototype) + + + viewpoin + Viewpoint + + + vigilant + Vigilante (World, set 1) + + + vigilant1 + Vigilante (World, set 2) + + + vigilantj + Vigilante (Japan) + + + vigilantu + Vigilante (US) + + + vigilantu2 + Vigilante (US) - Rev. G + + + viking + Viking + + + vikingt + Viking Treasure + + + vimana + Vimana (World, set 1) + + + vimanaj + Vimana (Japan) + + + vimanan + Vimana (World, set 2) + + + vindctr2 + Vindicators Part II (rev 3) + + + vindctr2r1 + Vindicators Part II (rev 1) + + + vindctr2r2 + Vindicators Part II (rev 2) + + + vindictr + Vindicators (rev 5) + + + vindictr1 + Vindicators (rev 1) + + + vindictr2 + Vindicators (rev 2) + + + vindictr4 + Vindicators (rev 4) + + + vindictre + Vindicators (Europe, rev 5) + + + vindictre3 + Vindicators (Europe, rev 3) + + + vindictre4 + Vindicators (Europe, rev 4) + + + vindictrg + Vindicators (German, rev 1) + + + viofight + Violence Fight (World) + + + viofightj + Violence Fight (Japan) + + + viofightu + Violence Fight (US) + + + viostorm + Violent Storm (ver EAC) + + + viostorma + Violent Storm (ver AAC) + + + viostormab + Violent Storm (ver AAB) + + + viostormeb + Violent Storm (ver EAB) + + + viostormj + Violent Storm (ver JAC) + + + viostormu + Violent Storm (ver UAC) + + + viostormub + Violent Storm (ver UAB) + + + vipclub + Vip Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880310) + + + viper + Viper + + + viperp + Viper (Pinball) + + + viprp1 + Viper Phase 1 (New Version, World) + + + viprp1hk + Viper Phase 1 (Hong Kong) + + + viprp1j + Viper Phase 1 (New Version, Japan) + + + viprp1k + Viper Phase 1 (New Version, Korea) + + + viprp1oj + Viper Phase 1 (Japan) + + + viprp1ot + Viper Phase 1 (Germany) + + + viprp1s + Viper Phase 1 (New Version, Switzerland) + + + viprp1u + Viper Phase 1 (New Version, US set 1) + + + viprp1ua + Viper Phase 1 (New Version, US set 2) + + + viprsega + Viper Night Drivin' + + + virnba + Virtua NBA (JPN, USA, EXP, KOR, AUS) + + + virnbao + Virtua NBA (JPN, USA, EXP, KOR, AUS) (original) + + + virnbap + Virtua NBA (prototype) + + + vitaminc + Mahjong Vitamin C (Japan) + + + vivdolls + Vivid Dolls + + + vlcno_1a + Volcano (Sound Only, alternate version) + + + vlcno_1b + Volcano (Sound Only) + + + vlcno_ax + Volcano + + + vliner + V-Liner (set 1) + + + vlinero + V-Liner (set 2) + + + vmahjong + Virtual Mahjong (J 961214 V1.000) + + + vmetal + Varia Metal + + + vmetaln + Varia Metal (New Ways Trading Co.) + + + voleybal + Voley Ball + + + volfied + Volfied (World, revision 1) + + + volfiedj + Volfied (Japan, revision 1) + + + volfiedjo + Volfied (Japan) + + + volfiedo + Volfied (World) + + + volfiedu + Volfied (US, revision 1) + + + volfieduo + Volfied (US) + + + vollyrmt + Volly (Ramtek) [TTL] + + + voltan + Voltan Escapes Cosmic Doom + + + von + Cyber Troopers Virtual-On (USA, Revision B) + + + von2 + Virtual On 2: Oratorio Tangram (Revision B) + + + von254g + Virtual On 2: Oratorio Tangram (ver 5.4g) + + + vonj + Cyber Troopers Virtual-On (Japan, Revision B) + + + vonot + Virtual On Oratorio Tangram M.S.B.S. ver5.66 2000 Edition + + + vortex + Vortex + + + vortexp + Vortex (Pinball) + + + voyager + Star Trek: Voyager + + + vpoker + Videotronics Poker + + + vpool + Video Pool (bootleg on Moon Cresta hardware) + + + vr + Virtua Racing + + + vrkon_l1 + Varkon (L-1) + + + vrnwrld + Verne's World + + + vroulet + Vegas Roulette + + + vs10yard + Vs 10-Yard Fight (World, 11/05/84) + + + vs10yardj + Vs 10-Yard Fight (Japan) + + + vs10yardu + Vs 10-Yard Fight (US, Taito license) + + + vs2 + Virtua Striker 2 (Step 2.0) + + + vs2002ex + Virtua Striker 2002 (GDT-0002) + + + vs2002j + Virtua Striker 2002 (GDT-0001) + + + vs215 + Virtua Striker 2 (Step 1.5) + + + vs215o + Virtua Striker 2 (Step 1.5, older) + + + vs298 + Virtua Striker 2 '98 (Step 2.0) + + + vs29815 + Virtua Striker 2 '98 (Step 1.5) + + + vs299 + Virtua Striker 2 '99 + + + vs299a + Virtua Striker 2 '99 (Revision A) + + + vs299b + Virtua Striker 2 '99 (Revision B) + + + vs2_2k + Virtua Striker 2 Ver. 2000 (JPN, USA, EXP, KOR, AUS) (Rev C) + + + vs2v991 + Virtua Striker 2 '99.1 (Revision B) + + + vs4 + Virtua Striker 4 (Export) (GDT-0015) + + + vs42006 + Virtua Striker 4 Ver.2006 (Japan) (Rev D) (GDT-0020D) + + + vs4j + Virtua Striker 4 (Japan) (Rev E) (GDT-0013E) + + + vsav + Vampire Savior: The Lord of Vampire (Euro 970519) + + + vsav2 + Vampire Savior 2: The Lord of Vampire (Japan 970913) + + + vsav2d + Vampire Savior 2: The Lord of Vampire (Japan 970913 Phoenix Edition) (bootleg) + + + vsava + Vampire Savior: The Lord of Vampire (Asia 970519) + + + vsavd + Vampire Savior: The Lord of Vampire (Euro 970519 Phoenix Edition) (bootleg) + + + vsavh + Vampire Savior: The Lord of Vampire (Hispanic 970519) + + + vsavj + Vampire Savior: The Lord of Vampire (Japan 970519) + + + vsavu + Vampire Savior: The Lord of Vampire (USA 970519) + + + vsbball + Vs. BaseBall (US, set BA E-1) + + + vsbballj + Vs. BaseBall (Japan, set BA A-3) + + + vsbballja + Vs. BaseBall (Japan, set BA A-2) + + + vsbballjb + Vs. BaseBall (Japan, set BA A-1) + + + vsfdf + Vs. Freedom Force + + + vsgongf + VS Gong Fight + + + vsgradus + Vs. Gradius (US, set GR E) + + + vsgshoe + Vs. Gumshoe (set GM5) + + + vshoot + J-League Soccer V-Shoot (Japan) + + + vsmahjng + Vs. Mahjong (Japan) + + + vsnetscr + Versus Net Soccer (ver EAD) + + + vsnetscra + Versus Net Soccer (ver AAA) + + + vsnetscreb + Versus Net Soccer (ver EAB) + + + vsnetscrj + Versus Net Soccer (ver JAB) + + + vsnetscru + Versus Net Soccer (ver UAB) + + + vspinbal + Vs. Pinball (US, set PN4 E-1) + + + vspinbalj + Vs. Pinball (Japan, set PN3 B) + + + vspsx + Video System PSX + + + vsskykid + Vs. Super SkyKid + + + vsslalom + Vs. Slalom + + + vssoccer + Vs. Soccer (set SC4-2 A) + + + vssoccera + Vs. Soccer (set SC4-3 ?) + + + vstennis + Vs. Tennis (Japan/USA, set TE A-3) + + + vstennisa + Vs. Tennis (Japan/USA, set 2) + + + vstennisb + Vs. Tennis (Japan/USA, set 3) + + + vstetris + Vs. Tetris + + + vstrik3 + Virtua Striker 3 Ver. 2002 (GDS-0006) + + + vstrik3c + Virtua Striker 3 (USA, EXP, KOR, AUS) (Cart, Rev C) + + + vstrik3cb + Virtua Striker 3 (USA, EXP, KOR, AUS) (Cart, Rev B) + + + vstriker + Virtua Striker (Revision A) + + + vstrikero + Virtua Striker + + + vtenis2c + Virtua Tennis 2 / Power Smash 2 (JPN) (USA, EXP, KOR, AUS) (Cart, Rev A) + + + vtennis + Virtua Tennis (USA, EXP, KOR, AUS) / Power Smash (JPN) + + + vtennis2 + Virtua Tennis 2 / Power Smash 2 (Rev A) (GDS-0015A) + + + vtennisg + Virtua Tennis / Power Smash (GDS-0011) + + + vulcan + Vulcan Venture (New) + + + vulcana + Vulcan Venture (Old) + + + vulcanb + Vulcan Venture (Oldest) + + + vulgus + Vulgus (set 1) + + + vulgusa + Vulgus (set 2) + + + vulgusj + Vulgus (Japan?) + + + wackadoo + Wack-A-Doodle-Doo (Redemption) + + + wacko + Wacko + + + wakuwak7 + Waku Waku 7 + + + wallc + Wall Crash (set 1) + + + wallca + Wall Crash (set 2) + + + wallst + Wall Street + + + wanganmd + Wangan Midnight (WMN1 Ver. A) + + + wangmd2b + Wangan Midnight Maximum Tune 2 (Japan) (Rev A) (GDX-0016A) + + + wangmid + Wangan Midnight Maximum Tune (Export) (Rev B) (GDX-0009B) + + + wangmid2 + Wangan Midnight Maximum Tune 2 (Export) (GDX-0015) + + + wanted + Wanted + + + warcadia + Waga Seishun no Arcadia + + + wardner + Wardner (World) + + + wardnerj + Wardner no Mori (Japan) + + + warfa + War: The Final Assault + + + wargods + War Gods (HD 10/09/1996 - Dual Resolution) + + + wargodsa + War Gods (HD 08/15/1996) + + + wargodsb + War Gods (HD 12/11/1995) + + + warlords + Warlords + + + warofbug + War of the Bugs or Monsterous Manouvers in a Mushroom Maze + + + warofbugg + War of the Bugs or Monsterous Manouvers in a Mushroom Maze (German) + + + warofbugu + War of the Bugs or Monsterous Manouvers in a Mushroom Maze (US) + + + warpsped + Warp Speed (prototype) + + + warpwarp + Warp & Warp + + + warpwarpr + Warp Warp (Rock-Ola set 1) + + + warpwarpr2 + Warp Warp (Rock-Ola set 2) + + + warrior + Warrior + + + warriorb + Warrior Blade - Rastan Saga Episode III (Japan) + + + warzard + Warzard (Japan 961121) + + + warzardr1 + Warzard (Japan 961023) + + + waterski + Water Ski + + + waterwld + Waterworld (rev.3) + + + waterwld2 + Waterworld (rev.2) + + + watrball + Water Balls + + + waverunr + Wave Runner (Japan, Revision A) + + + waveshrk + Wave Shark (UAB, USA v1.04) + + + wb3 + Wonder Boy III - Monster Lair (set 6, World, System 16B, 8751 317-0098) + + + wb31 + Wonder Boy III - Monster Lair (set 1, Japan, System 16A, FD1094 317-0084) + + + wb32 + Wonder Boy III - Monster Lair (set 2, Japan, System 16B, FD1094 317-0085) + + + wb33 + Wonder Boy III - Monster Lair (set 3, World, System 16B, FD1094 317-0089) + + + wb34 + Wonder Boy III - Monster Lair (set 4, Japan, System 16B, FD1094 317-0087) + + + wb35 + Wonder Boy III - Monster Lair (set 5, Japan, System 16A, FD1089A 317-0086) + + + wb3bbl + Wonder Boy III - Monster Lair (bootleg) + + + wbbc97 + Beach Festival World Championship 1997 + + + wbdeluxe + Wonder Boy Deluxe + + + wbeachvl + World Beach Volley (set 1) + + + wbeachvl2 + World Beach Volley (set 2) + + + wbeachvl3 + World Beach Volley (set 3) + + + wbml + Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043) + + + wbmlb + Wonder Boy in Monster Land (English bootleg set 1) + + + wbmlbg + Wonder Boy in Monster Land (English bootleg set 2) + + + wbmlbge + Wonder Boy in Monster Land (English bootleg set 3) + + + wbmljb + Wonder Boy in Monster Land (Japan bootleg) + + + wbmljo + Wonder Boy in Monster Land (Japan Old Ver., MC-8123, 317-0043) + + + wbmlvc + Wonder Boy in Monster Land (English, Virtual Console) + + + wboy + Wonder Boy (set 1, 315-5177) + + + wboy2 + Wonder Boy (set 2, 315-5178) + + + wboy2u + Wonder Boy (set 2, not encrypted) + + + wboy3 + Wonder Boy (set 3, 315-5135) + + + wboy4 + Wonder Boy (315-5162, 4-D Warriors Conversion) + + + wboy5 + Wonder Boy (set 5, bootleg) + + + wboyo + Wonder Boy (set 1, 315-5135) + + + wboysys2 + Wonder Boy (system 2) + + + wboyu + Wonder Boy (prototype?) + + + wboyub + Wonder Boy (US bootleg) + + + wc90 + Tecmo World Cup '90 (World) + + + wc90a + Tecmo World Cup '90 (Euro set 1) + + + wc90b + Tecmo World Cup '90 (Euro set 2) + + + wc90b1 + Euro League (Italian hack of Tecmo World Cup '90) + + + wc90b2 + Worldcup '90 + + + wc90t + Tecmo World Cup '90 (trackball set 1) + + + wcat3 + Wild Cat 3 + + + wcatcher + Mahjong Wakuwaku Catcher (Japan) + + + wcbowl + World Class Bowling (v1.66) + + + wcbowl11 + World Class Bowling (v1.1) + + + wcbowl12 + World Class Bowling (v1.2) + + + wcbowl13 + World Class Bowling (v1.3) + + + wcbowl13j + World Class Bowling (v1.3J, Japan) + + + wcbowl14 + World Class Bowling (v1.4) + + + wcbowl140 + World Class Bowling Tournament (v1.40) + + + wcbowl15 + World Class Bowling (v1.5) + + + wcbowl16 + World Class Bowling (v1.6) + + + wcbowl161 + World Class Bowling (v1.61) + + + wcbowl165 + World Class Bowling (v1.65) + + + wcbowldx + World Class Bowling Deluxe (v2.00) + + + wcherry + Win Cherry (ver 0.16 - 19990219) + + + wcombat + World Combat (ver UAA?) + + + wcombatj + World Combat (ver JAA) + + + wcombatk + World Combat (ver KBC) + + + wcs_l2 + World Cup Soccer (Lx-2) + + + wcs_p2 + World Cup Soccer (Pa-2) + + + wcs_p3 + World Cup Soccer (Px-3) + + + wcsoccer + World Challenge Soccer (rev.1) + + + wcsoccerd2 + World Challenge Soccer (disp.rev.2) + + + wcup90 + World Cup 90 + + + wcvol95 + World Cup Volley '95 (Japan v1.0) + + + wd_03r + Who Dunnit (0.3 R) + + + wd_048r + Who Dunnit (0.48 R) + + + wd_10f + Who Dunnit (1.0 French) + + + wd_10g + Who Dunnit (1.0 Germany) + + + wd_10r + Who Dunnit (1.0 R) + + + wd_11 + Who Dunnit (1.1) + + + wd_12 + Who Dunnit (1.2) + + + wd_12g + Who Dunnit (1.2 Germany) + + + wdun + Who Dunnit (Russia) + + + wecleman + WEC Le Mans 24 (set 1) + + + wecleman2 + WEC Le Mans 24 (set 2) + + + weddingr + Wedding Rhapsody (GX624 JAA) + + + welltris + Welltris (World?, 2 players) + + + welltrisj + Welltris (Japan, 2 players) + + + westgun2 + Western Gun Part II + + + weststry + West Story (bootleg of Blood Bros.) + + + westvent + Western Venture (Ver. AA.02.D) + + + wexpress + Western Express (Japan, rev 4) + + + wexpressb1 + Western Express (bootleg set 1) + + + wexpressb2 + Western Express (bootleg set 2) + + + wexpressb3 + Western Express (bootleg set 3) + + + wfortune + Wheel Of Fortune (set 1) + + + wfortunea + Wheel Of Fortune (set 2) + + + wg3dh + Wayne Gretzky's 3D Hockey + + + wgp + World Grand Prix (US) + + + wgp2 + World Grand Prix 2 (Japan) + + + wgpj + World Grand Prix (Japan) + + + wgpjoy + World Grand Prix (joystick version) (Japan, set 1) + + + wgpjoya + World Grand Prix (joystick version) (Japan, set 2) + + + wh1 + World Heroes (ALM-005) + + + wh1h + World Heroes (ALH-005) + + + wh1ha + World Heroes (set 3) + + + wh2 + World Heroes 2 (ALM-006)(ALH-006) + + + wh2j + World Heroes 2 Jet (ADM-007)(ADH-007) + + + whalecsh + Whales of Cash (20155711, Malaysia) + + + wheelfir + Wheels & Fire + + + wheelrun + Wheels Runner + + + wheregld + Where's the Gold (20177111, Malaysia) + + + whirl_l2 + Whirlwind (L-2) + + + whirl_l3 + Whirlwind (L-3) + + + whirl_lg3 + Whirlwind (LG-3) + + + whiterus + White Russia (Konami Endeavour) + + + whizz + Whizz + + + whodunit + Who Dunit (version 9.0) + + + whodunit8 + Who Dunit (version 8.0) + + + whoopee + Pipi & Bibis / Whoopee!! (Teki Paki hardware) + + + whp + World Heroes Perfect + + + wiggie + Wiggie Waggie + + + wildfang + Wild Fang / Tecmo Knight + + + wildfangs + Wild Fang + + + wildfyre + Wildfyre + + + wildone + Wild One (4VXEC5357, New Zealand) + + + wildpkr + Wild Poker (ver. D 1.01) + + + wildplt + Wild Pilot + + + wildways + Wild Ways (10130111, Malaysia) + + + willow + Willow (USA) + + + willowj + Willow (Japan) + + + willowo + Willow (USA Old Ver.) + + + wilytowr + Wily Tower + + + winbid + Winning Bid (Russia) + + + winbingo + Win Win Bingo (set 1) + + + winbingoa + Win Win Bingo (set 2) + + + windheat + Winding Heat (EAA, Euro v2.11) + + + windheata + Winding Heat (AAA, Asia v2.11) + + + windheatj + Winding Heat (JAA, Japan v2.11) + + + windheatu + Winding Heat (UBC, USA v2.22) + + + wingwar + Wing War (World) + + + wingwarj + Wing War (Japan) + + + wingwaru + Wing War (US) + + + wink + Wink (set 1) + + + winka + Wink (set 2) + + + winner81 + Winners Circle (81, 28*28 PCB) + + + winner81b + Winners Circle (81, 18*22 PCB) + + + winner82 + Winners Circle (82) + + + winrun + Winning Run + + + winrun91 + Winning Run '91 (Japan) + + + winrungp + Winning Run Suzuka Grand Prix (Japan) + + + winspike + Winning Spike (ver EAA) + + + winspikej + Winning Spike (ver JAA) + + + wintbob + The Winter Bobble (bootleg of Snow Bros.) + + + winterht + Winter Heat (JUET 971012 V1.000) + + + wipeormt + Wipeout (Ramtek) [TTL] + + + wipeout + Wipeout (rev.2) + + + wiping + Wiping + + + wiseguy + Wise Guy + + + witch + Witch + + + witchb + Witch (With ranking) + + + witchcda + Witch Card (Spanish, witch game, set 1) + + + witchcdb + Witch Card (Spanish, witch game, set 2) + + + witchcdc + Witch Card (English, no witch game) + + + witchcdd + Witch Card (German, WC3050, set 1 ) + + + witchcde + Witch Card (Video Klein CPU box, set 2) + + + witchcdf + Witch Card (English, witch game, lamps) + + + witchcdg + Witch Card (Falcon, enhanced sound) + + + witchcdh + Witch Card (German, WC3050, set 2 ) + + + witchcdi + Witch Card (German, WC3050, 27-4-94) + + + witchcdk + Witch Game (Video Klein, set 2) + + + witchcrd + Witch Card (Video Klein CPU box, set 1) + + + witchgme + Witch Game (Video Klein, set 1) + + + witchjol + Jolli Witch (Export, 6T/12T ver 1.57D) + + + witchryl + Witch Royal (Export version 2.1) + + + witchs + Witch (Sega License) + + + wits + Wit's (Japan) + + + wivernwg + Wivern Wings + + + wiz + Wiz + + + wizard + Wizard (Ver 1.0) + + + wizdfire + Wizard Fire (Over Sea v2.1) + + + wizdfireu + Wizard Fire (US v1.1) + + + wizt + Wiz (Taito, set 1) + + + wizta + Wiz (Taito, set 2) + + + wizwarz + Wiz Warz (prototype) + + + wizzquiz + Wizz Quiz (Konami version) + + + wizzquiza + Wizz Quiz (version 4) + + + wjammers + Windjammers / Flying Power Disc + + + wlcc + Wan Li Chang Cheng (China, V638C) + + + wldarrow + Wild Arrow (color, Standard V4.8) + + + wldcourt + World Court (Japan) + + + wldcp_l1 + World Cup Soccer (L-1) + + + wldkicks + World Kicks (WK2 Ver. A) + + + wldkicksa + World Kicks (WK3 Ver. A) + + + wldkicksb + World Kicks PCB (WKC1 Ver. A) + + + wldrider + Wild Riders (JPN, USA, EXP, KOR, AUS) + + + wldstrek + Wild Streak (Russia) + + + wldwitch + Wild Witch (Export, 6T/12T ver 1.84A) + + + wldwitcha + Wild Witch (Export, 6T/12T ver 1.57-SP) + + + wldwitchb + Wild Witch (Export, 6T/12T ver 1.57-TE) + + + wldwitchc + Wild Witch (Export, 6T/12T ver 1.62A) + + + wldwitchd + Wild Witch (Export, 6T/12T ver 1.62B) + + + wldwitche + Wild Witch (Export, 6T/12T ver 1.62A-F) + + + wldwitchf + Wild Witch (Export, 6T/12T ver 1.62A alt) + + + wldwitchg + Wild Witch (Export, 6T/12T ver 1.62B alt) + + + wldwitchh + Wild Witch (Export, 6T/12T ver 1.65A) + + + wldwitchi + Wild Witch (Export, 6T/12T ver 1.65A-S) + + + wldwitchj + Wild Witch (Export, 6T/12T ver 1.65A-S alt) + + + wldwitchk + Wild Witch (Export, 6T/12T ver 1.65A-N) + + + wldwitchl + Wild Witch (Export, 6T/12T ver 1.70A beta) + + + wldwitchm + Wild Witch (Export, 6T/12T ver 1.70A) + + + wldwitchn + Wild Witch (Export, 6T/12T ver 1.70A alt) + + + wldwitcho + Wild Witch (Export, 6T/12T ver 1.74A-SP-BELG) + + + wldwitchp + Wild Witch (Export, 6T/12T ver 1.74A) + + + wldwitchq + Wild Witch (Export, 6T/12T ver 1.74A alt) + + + wldwitchr + Wild Witch (Export, 6B/12B ver 1.75A-E English) + + + wldwitchs + Wild Witch (Export, 6T/12T ver 1.76A) + + + wldwitcht + Wild Witch (Export, 6T/12T ver 1.77A) + + + wldwitchu + Wild Witch (Export, 6T/12T ver 1.79A) + + + wldwitchv + Wild Witch (Export, 6T/12T ver 1.83A) + + + wlstar + Wonder League Star - Sok-Magicball Fighting (Korea) + + + wmatch + Water Match (315-5064) + + + wmg + Williams Multigame + + + wms + WMS SetUp/Clear Chips (set 1) + + + wmsa + WMS SetUp/Clear Chips (set 2) + + + wmsb + WMS SetUp/Clear Chips (set 3) + + + wmsboom + Boom (Russia) + + + wmstopb + Top Banana (Russia) + + + wndrmomo + Wonder Momo + + + wndrplnt + Wonder Planet (Japan) + + + wof + Warriors of Fate (World 921031) + + + wofa + Sangokushi II (Asia 921005) + + + wofhfh + Huo Feng Huang (Chinese bootleg of Sangokushi II) + + + wofj + Tenchi wo Kurau II: Sekiheki no Tatakai (Japan 921031) + + + wofr1 + Warriors of Fate (World 921002) + + + wofu + Warriors of Fate (USA 921031) + + + wolffang + Wolf Fang -Kuhga 2001- (Japan) + + + wolfman + Wolf Man + + + wolfpack + Wolf Pack (prototype) + + + wonder3 + Wonder 3 (Japan 910520) + + + wondl96 + Wonder League '96 (Korea) + + + wondstck + Wonder Stick + + + woodpeca + Woodpecker (set 2) + + + woodpeck + Woodpecker (set 1) + + + worlddef + World Defender + + + worldwar + World Wars (World?) + + + wotw + War of the Worlds + + + wotwc + War of the Worlds (color) + + + wow + Wizard of Wor + + + wowg + Wizard of Wor (with German Language ROM) + + + wownfant + WOW New Fantasia + + + wpksoc + World PK Soccer + + + wpksocv2 + World PK Soccer V2 (ver 1.1) + + + wrally + World Rally (set 1) + + + wrally2 + World Rally 2: Twin Racing + + + wrallya + World Rally (set 2) + + + wrallyb + World Rally (US, 930217) + + + wrecking + Vs. Wrecking Crew + + + wrestwar + Wrestle War (set 3, World, 8751 317-0103) + + + wrestwar1 + Wrestle War (set 1, Japan, FD1094 317-0090) + + + wrestwar2 + Wrestle War (set 2, World, FD1094 317-0102) + + + wrldtour + Al's Garage Band Goes On A World Tour + + + wrldtour2 + Al's Garage Band Goes On A World Tour R02b + + + wrlok_l3 + Warlok (L-3) + + + wrofaero + War of Aero - Project MEIOU + + + wrungp + Wave Runner GP + + + ws + World Stadium (Japan) + + + ws89 + World Stadium '89 (Japan) + + + ws90 + World Stadium '90 (Japan) + + + wsbbgd + Super Major League / World Series Baseball (GDS-0010) + + + wschamp + Wing Shooting Championship V2.00 + + + wschampa + Wing Shooting Championship V1.01 + + + wschampb + Wing Shooting Championship V1.00 + + + wseries + World Series: The Season + + + wsf + World Soccer Finals + + + wsjr + Who Shot Johnny Rock? v1.6 + + + wsjr15 + Who Shot Johnny Rock? v1.5 + + + wsports + Winter Sports + + + wstrike + Witch Strike (Export, 6T/12T ver 1.01A) + + + wstrikea + Witch Strike (Export, 6T/12T ver 1.01B) + + + wswe + World Soccer Winning Eleven Arcade Game Style + + + wswe2k3 + World Soccer Winning Eleven Arcade Game 2003 + + + wtchjack + Witch Jack (Export, 6T/12T ver 0.87-89) + + + wtchjacka + Witch Jackpot (Export, 6T/12T ver 0.25) + + + wtchjackb + Witch Jack (Export, 6T/12T ver 0.40) + + + wtchjackc + Witch Jack (Export, 6T/12T ver 0.40T) + + + wtchjackd + Witch Jack (Export, 6T/12T ver 0.62) + + + wtchjacke + Witch Jack (Export, 6T/12T ver 0.64) + + + wtchjackf + Witch Jack (Export, 6T/12T ver 0.65) + + + wtchjackg + Witch Jack (Export, 6T/12T ver 0.70S) + + + wtchjackh + Witch Jack (Export, 6T/12T ver 0.70P) + + + wtchjacki + Witch Jack (Export, 6T/12T ver 0.87) + + + wtchjackj + Witch Jack (Export, 6T/12T ver 0.87-88) + + + wtennis + World Tennis + + + wtiger + White Tiger Classic (0200954V, NSW/ACT) + + + wtigernz + White Tiger (3VXFC5342, New Zealand) + + + wtrnymph + Water-Nymph (Ver. 1.4) + + + wupndown + Witch Up & Down (Export, 6T/12T ver 1.02) + + + wupndowna + Witch Up & Down (Export, 6T/12T ver 0.99, set 1) + + + wupndownb + Witch Up & Down (Export, 6T/12T ver 0.99, set 2) + + + wupndownc + Witch Up & Down (Export, 6T/12T ver 0.99, set 3) + + + wupndownd + Witch Up & Down (Export, 6T/12T ver 0.99T) + + + ww3 + WW III + + + ww_l2 + White Water (L-2) + + + ww_l3 + White Water (L-3) + + + ww_l4 + White Water (L-4) + + + ww_l5 + White Water (L-5) + + + ww_lh5 + White Water (LH-5) + + + ww_lh6 + White Water (LH-6) + + + ww_p1 + White Water (P-8 P-1 sound) + + + ww_p8 + White Water (P-8 P-2 sound) + + + wwallyj + Wally wo Sagase! (rev B, Japan, FD1094 317-0197B) + + + wwallyja + Wally wo Sagase! (rev A, Japan, FD1094 317-0197A) + + + wwestern + Wild Western (set 1) + + + wwestern1 + Wild Western (set 2) + + + wwfmania + WWF: Wrestlemania (rev 1.30 08/10/95) + + + wwfmaniab + WWF: Wrestlemania (rev 1.20 08/02/95) + + + wwfmaniac + WWF: Wrestlemania (rev 1.1 07/11/95) + + + wwfr_103 + WWF Royal Rumble (1.03) + + + wwfr_106 + WWF Royal Rumble (1.06) + + + wwfroyal + WWF Royal Rumble (JPN, USA, EXP, KOR, AUS) + + + wwfsstar + WWF Superstars (Europe) + + + wwfsstarb + WWF Superstars (bootleg) + + + wwfsstarj + WWF Superstars (Japan) + + + wwfsstaru + WWF Superstars (US, Newer) + + + wwfsstarua + WWF Superstars (US) + + + wwfwfest + WWF WrestleFest (US set 1) + + + wwfwfesta + WWF WrestleFest (US Tecmo) + + + wwfwfestb + WWF WrestleFest (US bootleg) + + + wwfwfestj + WWF WrestleFest (Japan) + + + wwfwfestk + WWF WrestleFest (Korea) + + + wwjgtin + Wai Wai Jockey Gate-In! + + + wyvernwg + Wyvern Wings (set 1) + + + wyvernwga + Wyvern Wings (set 2) + + + x2222 + X2222 (final debug?) + + + x2222o + X2222 (5-level prototype) + + + x5jokers + X Five Jokers (Version 1.12) + + + xday2 + X-Day 2 (Japan) + + + xenon + Xenon + + + xenonf + Xenon (French) + + + xenophob + Xenophobe + + + xevi3dg + Xevious 3D/G (Japan, XV31/VER.A) + + + xevios + Xevios + + + xevious + Xevious (Namco) + + + xeviousa + Xevious (Atari, harder) + + + xeviousb + Xevious (Atari) + + + xeviousc + Xevious (Atari, Namco PCB) + + + xexex + Xexex (ver EAA) + + + xexexa + Xexex (ver AAA) + + + xexexj + Xexex (ver JAA) + + + xfiles + X-Files + + + xfiles2 + X-Files (2.04) + + + xfilesp + X-Files (3.03) + + + xforce + X Force + + + xiistag + XII Stag (V2.01J) + + + xmcota + X-Men: Children of the Atom (Euro 950331) + + + xmcotaa + X-Men: Children of the Atom (Asia 950105) + + + xmcotaar1 + X-Men: Children of the Atom (Asia 941217) + + + xmcotah + X-Men: Children of the Atom (Hispanic 950331) + + + xmcotahr1 + X-Men: Children of the Atom (Hispanic 950105) + + + xmcotaj + X-Men: Children of the Atom (Japan 950105) + + + xmcotaj1 + X-Men: Children of the Atom (Japan 941222) + + + xmcotaj2 + X-Men: Children of the Atom (Japan 941219) + + + xmcotaj3 + X-Men: Children of the Atom (Japan 941217) + + + xmcotajr + X-Men: Children of the Atom (Japan 941208 rent version) + + + xmcotar1 + X-Men: Children of the Atom (Euro 950105) + + + xmcotar1d + X-Men: Children of the Atom (Euro 950105 Phoenix Edition) (bootleg) + + + xmcotau + X-Men: Children of the Atom (USA 950105) + + + xmen + X-Men (4 Players ver UBB) + + + xmen2pa + X-Men (2 Players ver AAA) + + + xmen2pe + X-Men (2 Players ver EAA) + + + xmen2pj + X-Men (2 Players ver JAA) + + + xmen6p + X-Men (6 Players ver ECB) + + + xmen6pu + X-Men (6 Players ver UCB) + + + xmena + X-Men (4 Players ver AEA) + + + xmenaa + X-Men (4 Players ver ADA) + + + xmene + X-Men (4 Players ver EBA) + + + xmenj + X-Men (4 Players ver JBA) + + + xmultipl + X Multiply (World, M81) + + + xmultiplm72 + X Multiply (Japan, M72) + + + xmvsf + X-Men Vs. Street Fighter (Euro 961004) + + + xmvsfa + X-Men Vs. Street Fighter (Asia 961023) + + + xmvsfar1 + X-Men Vs. Street Fighter (Asia 961004) + + + xmvsfar2 + X-Men Vs. Street Fighter (Asia 960919) + + + xmvsfar3 + X-Men Vs. Street Fighter (Asia 960910) + + + xmvsfb + X-Men Vs. Street Fighter (Brazil 961023) + + + xmvsfh + X-Men Vs. Street Fighter (Hispanic 961004) + + + xmvsfj + X-Men Vs. Street Fighter (Japan 961004) + + + xmvsfjr1 + X-Men Vs. Street Fighter (Japan 960910) + + + xmvsfjr2 + X-Men Vs. Street Fighter (Japan 960909) + + + xmvsfr1 + X-Men Vs. Street Fighter (Euro 960910) + + + xmvsfu + X-Men Vs. Street Fighter (USA 961023) + + + xmvsfu1d + X-Men Vs. Street Fighter (USA 961004 Phoenix Edition) (bootleg) + + + xmvsfur1 + X-Men Vs. Street Fighter (USA 961004) + + + xorworld + Xor World (prototype) + + + xplan + X-Plan (Ver. 1.01) + + + xrally + Xtreme Rally / Off Beat Racer! + + + xsandos + X's & O's + + + xsedae + X Se Dae Quiz (Korea) + + + xsleena + Xain'd Sleena (World) + + + xsleenab + Xain'd Sleena (bootleg) + + + xsleenaj + Xain'd Sleena (Japan) + + + xtheball + X the Ball + + + xtom3d + X Tom 3D + + + xtrain + X-Train (Ver. 1.3) + + + xtrial + Xtrial Racing (ver JAB) + + + xtrmhnt2 + Extreme Hunting 2 + + + xtrmhunt + Extreme Hunting + + + xxmissio + XX Mission + + + xybots + Xybots (rev 2) + + + xybots0 + Xybots (rev 0) + + + xybots1 + Xybots (rev 1) + + + xybotsf + Xybots (French, rev 3) + + + xybotsg + Xybots (German, rev 3) + + + xymg + Xing Yun Man Guan (China, V651C) + + + xyonix + Xyonix + + + yachtmn + Yachtsman + + + yamagchi + Go Go Mr. Yamaguchi / Yuke Yuke Yamaguchi-kun + + + yamato + Yamato (US) + + + yamato2 + Yamato (World?) + + + yamyam + Yam! Yam!? + + + yanchamr + Kaiketsu Yanchamaru (Japan) + + + yankeedo + Yankee DO! + + + yarunara + Mahjong Yarunara (Japan) + + + yellowcbb + Yellow Cab (bootleg) + + + yellowcbj + Yellow Cab (Japan) + + + yesnoj + Yes/No Sinri Tokimeki Chart + + + yiear + Yie Ar Kung-Fu (program code I) + + + yiear2 + Yie Ar Kung-Fu (program code G) + + + yieartf + Yie Ar Kung-Fu (GX361 conversion) + + + yosakdon + Yosaku To Donbei (set 1) + + + yosakdona + Yosaku To Donbei (set 2) + + + yosimotm + Mahjong Yoshimoto Gekijou [BET] (Japan) + + + yosimoto + Mahjong Yoshimoto Gekijou (Japan) + + + youjyudn + Youjyuden (Japan) + + + youkaidk1 + Yokai Douchuuki (Japan, old version (YD1)) + + + youkaidk2 + Yokai Douchuuki (Japan, new version (YD2, Rev B)) + + + youma + Youma Ninpou Chou (Japan) + + + youma2 + Youma Ninpou Chou (Japan, alt) + + + youmab + Youma Ninpou Chou (Game Electronics bootleg, set 1) + + + youmab2 + Youma Ninpou Chou (Game Electronics bootleg, set 2) + + + yujan + Yu-Jan + + + yuka + Yu-Ka + + + yukiwo + Yukiwo (World, prototype) + + + yukon + Yukon (version 2.0) + + + yukon1 + Yukon (version 1.0) + + + yukongld + Yukon Gold (Russia) + + + yumefuda + Yumefuda [BET] + + + yuyugogo + Yuuyu no Quiz de GO!GO! (Japan) + + + yuyuhaku + The Battle of Yu Yu Hakusho: Shitou! Ankoku Bujutsukai! + + + zankor + Zankor (Italian speech) + + + zaryavos + Zarya Vostoka + + + zarza + Zarza + + + zarza1 + Zarza (alternate set) + + + zarzon + Zarzon + + + zaviga + Zaviga + + + zavigaj + Zaviga (Japan) + + + zaxxon + Zaxxon (set 1) + + + zaxxon2 + Zaxxon (set 2) + + + zaxxon3 + Zaxxon (set 3) + + + zaxxonb + Jackson + + + zaxxonj + Zaxxon (Japan) + + + zedblade + Zed Blade / Operation Ragnarok + + + zekepeak + Zeke's Peak + + + zektor + Zektor (revision B) + + + zephy + Zephy + + + zero + Zero (set 1, Defender bootleg) + + + zero2 + Zero (set 2, Defender bootleg) + + + zerogu2 + Zero Gunner 2 + + + zerogun + Zero Gunner (Export, Model 2B) + + + zeroguna + Zero Gunner (Export, Model 2A) + + + zerogunaj + Zero Gunner (Japan, Model 2A) + + + zerogunj + Zero Gunner (Japan, Model 2B) + + + zerohour + Zero Hour (set 1) + + + zerohoura + Zero Hour (set 2) + + + zeropnt + Zero Point (set 1) + + + zeropnt2 + Zero Point 2 + + + zeropnta + Zero Point (set 2) + + + zeropntj + Zero Point (Japan) + + + zeroteam + Zero Team USA (set 1, US, Fabtek license) + + + zeroteama + Zero Team (set 2, Japan? (earlier?)) + + + zeroteamb + Zero Team (set 3, Japan? (later batteryless)) + + + zeroteamc + Zero Team (set 4, Taiwan, Liang Hwa license) + + + zeroteamd + Zero Team (set 5, Korea, Dream Soft license) + + + zeroteams + Zero Team Selection + + + zeroteamsr + Zero Team Suicide Revival Kit + + + zerotime + Zero Time + + + zerotm2k + Zero Team 2000 + + + zerotrgt + Zero Target (World, CW) + + + zerotrgta + Zero Target (World, CT) + + + zerowing + Zero Wing (2P set) + + + zerowing1 + Zero Wing (1P set) + + + zerowingw + Zero Wing (2P set, Williams license) + + + zerozone + Zero Zone + + + zgundm + Mobile Suit Z-Gundam: A.E.U.G. vs Titans (ZGA1 Ver. A) + + + zgundmdx + Mobile Suit Z-Gundam: A.E.U.G. vs Titans DX (ZDX1 Ver. A) + + + zigzag + Zig Zag (Galaxian hardware, set 1) + + + zigzag2 + Zig Zag (Galaxian hardware, set 2) + + + zingzip + Zing Zing Zip + + + zingzipbl + Zing Zing Zip (bootleg) + + + zintrckb + Zintrick / Oshidashi Zentrix (hack) + + + zipzap + Zip & Zap + + + znpwfv + Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000) + + + zoar + Zoar + + + zodiack + Zodiack + + + zokumahj + Zoku Mahjong Housoukyoku (Japan) + + + zokuoten + Zoku Otenamihaiken (V2.03J) + + + zombraid + Zombie Raid (9/28/95, US) + + + zombraidp + Zombie Raid (9/28/95, US, prototype PCB) + + + zombraidpj + Zombie Raid (9/28/95, Japan, prototype PCB) + + + zombrvn + Zombie Revenge (JPN, USA, EXP, KOR, AUS) + + + zoo + Zoo (Ver. ZO.02.D) + + + zookeep + Zoo Keeper (set 1) + + + zookeep2 + Zoo Keeper (set 2) + + + zookeep3 + Zoo Keeper (set 3) + + + zoom909 + Zoom 909 + + + zooo + Zooo (V2.01J) + + + zortonbr + Zorton Brothers (Los Justicieros) + + + zunkyou + Zunzunkyou No Yabou (Japan) + + + zunou + Touch De Zunou (Rev A) + + + zupapa + Zupapa! + + + zwackery + Zwackery + + + zzblock + Zun Zun Block [TTL] + + + zzyzzyxx + Zzyzzyxx (set 1) + + + zzyzzyxx2 + Zzyzzyxx (set 2) + + + z80 + Z80 + + + gfxdecode + gfxdecode + + + palette + palette + + + screen + Video Screen + + + speaker + Speaker + + + i8255 + 8255 PPI + + + samples + Samples + + + sega005_sound + 005 Custom + + + m6803 + M6803 + + + irem_audio + Irem Audio + + + ay8910 + AY-3-8910A + + + msm5205 + MSM5205 + + + vr4300be_drc + VR4300 (big) DRC + + + rsp_drc + RSP DRC + + + dmadac + DMA-driven DAC + + + n64_periphs + N64 Periphal Chips + + + sh4 + SH-4 (little) + + + timer + Timer + + + arm7 + ARM7 + + + maple_dc + MAPLE_DC + + + 93c46_16 + Serial EEPROM 93C46 (64x16) + + + powervr2 + PowerVR 2 + + + aica + AICA + + + aicartc + AICA RTC + + + mie + MIE + + + mie_jvs + MIE-JVS + + + sega_837_13551 + SEGA-837-13551 + + + 93c46_8 + Serial EEPROM 93C46 (128x8) + + + x76f100 + X76F100 Flash + + + naomi_m2_board + NAOMI-M2-BOARD + + + m68000 + M68000 + + + ym2151 + YM2151 + + + okim6295 + OKI6295 + + + netlist_sound + Netlist sound device + + + netlist_analog_input + netlist analog input + + + ym2203 + YM2203 + + + qsound + Q-Sound + + + dsp16 + DSP16 + + + pxa255 + PXA255 + + + 93c66_16 + Serial EEPROM 93C66 (256x16) + + + cxd8530cq + CXD8530CQ + + + psxirq + PSX IRQ + + + psxdma + PSX DMA + + + psxmdec + PSX MDEC + + + psxrcnt + PSX RCNT + + + psxsio0 + PSX SIO-0 + + + znsec + ZNSEC + + + zndip + ZNDIP + + + psxsio1 + PSX SIO-1 + + + ram + RAM + + + cxd8561q + CXD8561Q + + + spu + SPU + + + at28c16 + AT28C16 + + + ym2610 + YM2610 + + + upd4990a + uPD4990A + + + nvram + NVRAM + + + z180 + Z180 + + + namco + Namco + + + dac + DAC + + + amd_29lv200t + AMD 29LV200T Flash + + + i8080 + 8080 + + + mb14241 + MB14241 + + + ym2610b + YM2610B + + + mc68hc11 + MC68HC11 + + + m6809 + M6809 + + + via6522 + 6522 VIA + + + pia6821 + 6821 PIA + + + c6545_1 + C6545-1 CRTC + + + mc146818 + MC146818 + + + arm7_be + ARM7 (big endian) + + + cdrom_image + CD-ROM Image + + + nb1413m3 + Nichibutsu NB1413M3 + + + kaneko_pandora + Kaneko Pandora - PX79C480FP-3 + + + upd7810 + uPD7810 + + + ym2413 + YM2413 + + + vsystem_spr + vsystem_spr_device + + + i8088 + I8088 + + + gotsndr2 + Gottlieb Sound rev. 2 + + + m6502 + M6502 + + + ay8913 + AY-3-8913A + + + sp0250 + SP0250 + + + m68705 + M68705 + + + buggychl_mcu + BuggyChl MCU + + + msm5232 + MSM5232 + + + v70 + V70 + + + ymf271 + YMF271 + + + sn76489a + SN76489A + + + z80pio + Z8420 PIO + + + isa8 + ISA8 + + + isa8_slot + ISA8_SLOT + + + 4enlinea_cga + ISA8_CGA_4ENLINEA + + + mc6845 + MC6845 CRTC + + + 7474 + 7474 TTL + + + galaxian_sound + Galaxian Custom + + + discrete + DISCRETE + + + tmp68301 + TMP68301 + + + z80ctc + Z80 CTC + + + ym3812 + YM3812 + + + mc65c02 + M65C02 + + + r4650be_drc + IDT R4650 (big) DRC + + + h83002 + H8/3002 + + + h8h_intc + H8H INTC + + + h8_adc_3337 + H8 ADC 3337 + + + h8_digital_port + H8 digital port + + + h8_timer16 + H8 16-bits timer + + + h8h_16bits_timer_channel + H8H 16-bits timer channel + + + h8_sci + H8 Serial Communications Interface + + + namco_settings + Namco settings device + + + rtc4543 + Epson R4543 + + + devcb2_line_dispatch + Line dispatcher (2 slots) + + + c352 + C352 + + + ptm6840 + 6840 PTM + + + t11 + T11 + + + 2804 + Parallel EEPROM 2804 (512x8) + + + tilemap + Tilemap + + + atarimo + Atari Motion Objects + + + atarscom + Atari Sound Communications + + + pokey + POKEY + + + tms5220c + TMS5220C + + + decospr + decospr_device + + + h46505 + H46505 CRTC + + + konami_cpu + KONAMI + + + k052109 + Konami 052109 + + + k051960 + Konami 051960 + + + k051316 + Konami 051316 + + + upd7759 + uPD7759 + + + s2650 + S2650 + + + s2636 + Signetics 2636 + + + tms5100 + TMS5100 + + + i8257 + DMA8257 + + + latch8 + 8 bit latch + + + mb8884 + MB8884 + + + sn76496 + SN76496 + + + pentium + PENTIUM + + + pit8259 + 8259 PIC + + + am9517a + AM9517A + + + pit8254 + 8254 PIT + + + kbdc8042 + Keyboard Controller 8042 + + + at_keyb + AT Keyboard + + + pci_bus_legacy + PCI Bus Legacy + + + vga + VGA + + + tms34010 + TMS34010 + + + tms32026 + TMS32026 + + + tlc34076 + TLC34076 + + + r3041 + R3041 + + + jaguargpu + Jaguar GPU + + + jaguardsp + Jaguar DSP + + + vt83c461 + VIA VT83C461 + + + ata_slot + ATA Connector + + + cojag_hdd + cojag HDD + + + harddisk_image + Harddisk + + + mediagx + MEDIAGX + + + ide_controller + IDE Controller (32 bit) + + + hdd + IDE Hard Disk + + + ramdac + ramdac + + + cdrom + ATAPI CDROM + + + ppc403gcx + PowerPC 403GCX + + + ymz280b + YMZ280B + + + i80186 + I80186 + + + leland_80186_sound + Leland 80186 DAC + + + decocpu3 + Data East Pinball CPU Board Type 3 + + + m6808 + M6808 + + + decobsmt + Data East/Sega/Stern BSMT2000 Sound Board + + + bsmt2000 + BSMT2000 + + + tms32015 + TMS32015 + + + decodmd2 + Data East Pinball Dot Matrix Display Type 2 + + + m6809e + M6809E + + + m6800 + M6800 + + + h83048 + H8/3048 + + + fd1094 + FD1094 + + + sega_315_5248 + Sega 315-5248 Multiplier + + + sega_315_5249 + Sega 315-5249 Divider + + + sega_315_5250 + Sega 315-5250 Compare/Timer + + + sega_xboard_sprite + Sega X-Board Sprites + + + segaic16_video + Sega 16-bit Video + + + segaic16_road + Sega 16-bit Road Generator + + + segapcm + Sega PCM + + + sega_315_5195 + Sega 315-5195 Memory Mapper + + + sega_16bit_sprite + Sega System 16B Sprites + + + n7751 + N7751 + + + i8243 + I8243 + + + sega_sys16a_sprite + Sega System 16A Sprites + + + m68020 + M68020 + + + tms32025 + TMS32025 + + + m37702 + M37702 + + + 2864 + Parallel EEPROM 2864 (8192x8) + + + arm920t + ARM920T + + + serflash + SERFLASH + + + nmk004 + NMK004 + + + h6280 + H6280 + + + deco_bac06 + decbac06_device + + + deco_mxc06 + decmxc06_device + + + pic16c57 + PIC16C57 + + + tmsprom + TMSPROM + + + tms5110a + TMS5110A + + + mc68307 + MC68307 + + + mc68681 + MC68681 + + + mc68681_channel + DUART 68681 channel + + + bfm_bda + BFM BDA VFD controller + + + mc68340 + MC68340 + + + mcf5206e + MCF5206E + + + mcf5206e_peripheral + MCF5206E Peripheral + + + m68ec020 + M68EC020 + + + m37710 + M37710 + + + arm + ARM + + + aakart + AAKART + + + vsystem_spr2 + vsystem_spr2_device + + + vector_device + VECTOR + + + dvg + DVG + + + fd1089a + FD1089A + + + sn76494 + SN76494 + + + wpc + Williams WPC ASIC + + + adsp2105 + ADSP-2105 + + + tc0220ioc + Taito TC0220IOC + + + tc0080vco + Taito TC0080VCO + + + tc0140syt + Taito TC0140SYT + + + v33 + V33 + + + v35 + V35 + + + iremga20 + Irem GA20 + + + hd63705 + HD63705 + + + c140 + C140 + + + v30 + V30 + + + m72_audio + M72 Custom + + + naomi_rom_board + NAOMI-ROM-BOARD + + + tms32010 + TMS32010 + + + seibu_sound + Seibu Sound System + + + k007232 + K007232 + + + msm6242 + msm6242 + + + taito_en + Taito Ensoniq Sound System + + + mb87078 + Fujitsu MB87078 + + + es5505 + ES5505 + + + buffered_spriteram + Buffered Sprite RAM + + + k007121 + Konami 007121 + + + k051649 + K051649 + + + sega315_5313 + Sega 315-5313 (Genesis VDP) + + + ym2612 + YM2612 + + + segapsg + SEGA VDP PSG + + + hc55516 + HC-55516 + + + ldp1450 + Sony LDP-1450 + + + amiga_paula + Amiga Paula + + + legacy_mos8520 + LEGACY_MOS8520 + + + amiga_fdc + Amiga FDC + + + m6802 + M6802 + + + v60 + V60 + + + ym3438 + YM3438 + + + rf5c68 + RF5C68 + + + ymf278b + YMF278B + + + huc6260 + HuC6260 VCE + + + huc6270 + HuC6270 VDC + + + c6280 + HuC6280 + + + sn76477 + SN76477 + + + address_map_bank + Address Map Bank + + + hd63701 + HD63701 + + + fd1089b + FD1089B + + + gaelco_gae1 + Gaelco GAE1 + + + m6504 + M6504 + + + ym3526 + YM3526 + + + avg_mhavoc + AVG_MHAVOC + + + cdp1802 + CDP1802 + + + cdp1852 + CDP1852 + + + cdp1869 + RCA CDP1869 + + + i8751 + I8751 + + + ay8912 + AY-3-8912A + + + i8086 + I8086 + + + r6545_1 + R6545-1 CRTC + + + sn76489 + SN76489 + + + ticket_dispenser + Ticket Dispenser + + + gamtor_vga + GAMTOR_VGA + + + ttl74123 + TTL 74123 + + + okim9810 + OKI9810 + + + macronix_29l001mc + Macronix 29L001MC Flash + + + aw_rom_board + AW-ROM-BOARD + + + dcctrl + DC_CONTROLLER + + + netlist_cpu + Netlist cpu device + + + fixfreq + FIXFREQ + + + e132xn + E1-32XN + + + v20 + V20 + + + m65sc02 + M65SC02 + + + tc0100scn + Taito TC0100SCN + + + tc0150rod + Taito TC0150ROD + + + tc0110pcr + Taito TC0110PCR + + + filter_volume + Volume Filter + + + cxd8661r + CXD8661R + + + cxd8654q + CXD8654Q + + + mb8841 + MB8841 + + + tms9118 + TMS9118 VDP + + + speaker_sound + Filtered 1-bit DAC + + + seta001 + seta001_device + + + x1_010 + X1-010 + + + atari2804 + Atari EEPROM Interface (2804) + + + tmp90841 + TMP90841 + + + nmk112 + NMK 112 + + + wmscvsd + Williams CVSD Sound Board + + + gotsndr1 + Gottlieb Sound rev. 1 + + + riot6532 + 6532 RIOT + + + ym2149 + YM2149 + + + tms34061 + TMS34061 VSC + + + ccpu + Cinematronics CPU + + + n2a03 + N2A03 + + + nesapu + N2A03 APU + + + vlm5030 + VLM5030 + + + tc0180vcu + Taito TC0180VCU + + + naomi_m4_board + NAOMI-M4-BOARD + + + pps4 + PPS4 + + + atari_vg_earom + ATARI VG EAROM + + + er5911_8 + Serial EEPROM ER5911 (128x8) + + + k056832 + Konami 056832 + + + k05324x + Konami 053244 & 053245 + + + k053251 + Konami 053251 + + + k053260 + K053260 + + + sh2_drc + SH-2 DRC + + + scudsp + SCUDSP + + + scsp + SCSP + + + cdda + CD/DA + + + i8035 + I8035 + + + sega_speech_sound + Sega Speech Sound Board + + + sega315_5124 + Sega 315-5124 + + + ldv1000 + Pioneer LD-V1000 + + + pc090oj + Taito PC090OJ + + + ymf262 + YMF262 + + + 93c56_16 + Serial EEPROM 93C56 (128x16) + + + wsf_80186_sound + WSF 80186 DAC + + + m68010 + M68010 + + + ataxx_80186_sound + Ataxx 80186 DAC + + + trackfld_audio + Track And Field Audio + + + hyprolyb_adpcm + Hyper Olympics Audio + + + i8039 + I8039 + + + mos656x_attack_ufo + MOS656X + + + ppc603 + PowerPC 603 + + + naomi_gdrom_board + NAOMI-GDROM-BOARD + + + i8085a + 8085A + + + tms36xx + TMS36XX + + + phoenix_sound + Phoenix Custom + + + roc10937 + Rockwell 10937 VFD controller and compatible + + + acia6850 + 6850 ACIA + + + clock + Clock + + + i8031 + I8031 + + + tms9928a + TMS9928A VDP + + + deco16ic + Data East IC 55 / 56 / 74 / 141 + + + microtouch_serial + Microtouch Serial Touchscreen + + + h63484 + H63484 + + + atari2816 + Atari EEPROM Interface (2816) + + + 2816 + Parallel EEPROM 2816 (2048x8) + + + cclimber_audio + cclimber Sound Board + + + kaneko_view2_tilemap + kaneko_view2_tilemap_device + + + kaneko16_sprite + kaneko16_sprite_device + + + ppu2c04 + 2C04 PPU + + + gaelco_cg1v + Gaelco CG1V + + + ppc603e + PowerPC 603e + + + scsibus + SCSI bus + + + lsi53c810 + 53C810 SCSI + + + k573cassslotserial + KONAMI 573 CASSETTE SLOT (SERIAL) + + + mb89371 + MB89371 + + + ata_interface + ATA Interface + + + cr589 + Matsushita CR589 + + + k573cassslot + KONAMI 573 CASSETTE SLOT + + + k573cassx + KONAMI 573 CASSETTE X + + + x76f041 + X76F041 Flash + + + fujitsu_29f016a + Fujitsu 29F016A Flash + + + pccard + PCCARD SLOT + + + m48t58 + M48T58 + + + adc0834 + ADC0834 + + + upd4701 + NEC uPD4701 Encoder + + + i386 + I386 + + + ds2404 + DS2404 + + + intel_e28f008sa + Intel E28F008SA Flash + + + fifo7200 + IDT7200 FIFO + + + tmp95c063 + TMP95C063 + + + atarivad + Atari VAD + + + atjsa3 + Atari JSA III Sound Board + + + decocpu3b + Data East Pinball CPU Board Type 3B + + + decodmd3 + Data East Pinball Dot Matrix Display Type 3 + + + adsp2181 + ADSP-2181 + + + gp9001vdp + GP9001_VDP + + + v25 + V25 + + + upd7807 + uPD7807 + + + namco51 + Namco 51xx + + + mb8843 + MB8843 + + + namco06xx + Namco 06xx + + + hd6309 + HD6309 + + + k007342 + Konami 007342 + + + k007420 + Konami 007420 + + + 93c66_8 + Serial EEPROM 93C66 (512x8) + + + arm9 + ARM9 + + + s3c2410 + Samsung S3C2410 + + + qs1000 + QS1000 + + + i8052 + I8052 + + + i2cmem + I2CMEM + + + s11c_bg + Williams System 11C background music + + + asap + ASAP + + + beezer_sound + beezer SFX + + + i960kb + i960kb + + + segas24_tile + S24TILE + + + y8950 + Y8950 + + + ttl74181 + TTL 74181 + + + s14001a + S14001A + + + exidy_sfx + Exidy SFX + + + v9938 + V9938 + + + r65c02 + R65C02 + + + hd61830 + HD61830 LCDC + + + timeplt_audio + Time Pilot Audio + + + filter_rc + RC Filter + + + tiamc1_sound + TIA-MC1 Custom + + + saa1099 + SAA1099 + + + r5000le_drc + R5000 (little) DRC + + + bus_master_ide_controller + Bus Master IDE Controller + + + voodoo_1 + 3dfx Voodoo Graphics + + + adsp2115 + ADSP-2115 + + + k054338 + Konami 054338 + + + k055555 + Konami 055555 + + + h83044 + H8/3044 + + + i486 + I486 + + + k051733 + Konami 051733 + + + midsg + Midway Sounds Good Sound Board + + + seibu_crtc + Seibu CRT Controller + + + es5506 + ES5506 + + + kaneko_toybox + kaneko_toybox_device + + + kaneko_hit + kaneko_hit_device + + + atjsa1 + Atari JSA I Sound Board + + + k054000 + Konami 054000 + + + k053936 + Konami 053936 + + + k054539 + K054539 + + + rtc65271 + RTC65271 + + + pc16552d + National Semiconductor PC16552D + + + ns16550 + National Semiconductor NS16550 + + + scsicd + SCSICD + + + am53cf96 + 53CF96 SCSI + + + rf5c400 + RF5C400 + + + decoc10707 + DECO C10707 + + + segas24_sprite + S24SPRITE + + + segas24_mixer + S24MIXER + + + warpwarp_sound + Warp Warp Custom + + + cirrus_vga + Cirrus Logic VGA + + + ns16450 + National Semiconductor NS16450 + + + decocomn + Data East Common Video Functions + + + deco104 + DECO104PROT + + + deco16 + DECO16 + + + deco222 + DECO 222 + + + e116t + E1-16T + + + wpcsnd + Williams WPC Sound + + + namco50 + Namco 50xx + + + mb8842 + MB8842 + + + namco52 + Namco 52xx + + + namco54 + Namco 54xx + + + mb8844 + MB8844 + + + am29000 + AMD Am29000 + + + i8051 + I8051 + + + mc68901 + Motorola MC68901 + + + micro3d_sound + Microprose Custom + + + h83008 + H8/3008 + + + h8_adc_3006 + H8 ADC 3006 + + + mpc8240 + PowerPC MPC8240 + + + voodoo_3 + 3dfx Voodoo 3 + + + avg_bzone + AVG_BZONE + + + mathbox + MATHBOX + + + kaneko_calc3 + kaneko_calc3_device + + + okim6376 + OKI6376 + + + deco_karnovsprites + karnovsprites_device + + + tms9128 + TMS9128 VDP + + + cxd8530bq + CXD8530BQ + + + cxd8514q + CXD8514Q + + + sharp_lh28f400 + Sharp LH28F400 Flash + + + decocpu7 + DECO CPU-7 + + + ppc602 + PowerPC 602 + + + decodmd1 + Data East Pinball Dot Matrix Display Type 1 + + + tms34020 + TMS34020 + + + m6801 + M6801 + + + k005289 + K005289 + + + i8279 + 8279 KDC + + + k053252 + Konami 053252 + + + k053247 + Konami 053246 & 053247 + + + buggyboy_sound + Buggy Boy Custom + + + ppc403ga + PowerPC 403GA + + + ppc604 + PowerPC 604 + + + k001604 + Konami 001604 + + + cobra_jvs_host + COBRA_JVS_HOST + + + cobra_jvs + COBRA_JVS + + + alpha8301 + ALPHA-8301 + + + avg + AVG + + + seibu_adpcm + Seibu ADPCM + + + i8041 + I8041 + + + decocass_tape + DECO Cassette Tape + + + trident_vga + Trident VGA + + + smc91c94 + SMC91C94 + + + tc0280grd + Taito TC0280GRD & TC0430GRW + + + tc0360pri + Taito TC0360PRI + + + e132n + E1-32N + + + i8032 + I8032 + + + deco146 + DECO146PROT + + + i80c32 + I80C32 + + + vr4310le_drc + VR4310 (little) DRC + + + voodoo_banshee + 3dfx Voodoo Banshee + + + 74148 + TTL 74148 + + + 74153 + TTL 74153 + + + rm7000le_drc + RM7000 (little) DRC + + + m48t37 + M48T37 + + + hd6303y + HD6303Y + + + exidy440_sound + Exidy 440 CVSD + + + tc0480scp + Taito TC0480SCP + + + x2212 + X2212 NVRAM + + + akiko + CBM AKIKO + + + microtouch + Microtouch Touchscreen + + + scc68070 + SCC68070 + + + mcd212 + MCD212 + + + cdi68070 + CDI68070 + + + cdicdic + CDICDIC + + + cdislave + CDISLAVE + + + m48t08 + MK48T08 + + + alpha8201 + ALPHA-8201 + + + pentium3 + Pentium III + + + ataflash + ATA Flash PCCARD + + + mb3773 + MB3773 + + + intel_te28f160 + Intel TE28F160 Flash + + + intel_e28f400b + Intel E28F400B Flash + + + taito_zoom + Taito Zoom Sound System + + + mn1020012a + MN1020012A + + + zsg2 + ZSG-2 + + + ide_baseboard + IDE Baseboard + + + tc8830f + TC8830F + + + cxd8606bq + CXD8606BQ + + + cxd8561cq + CXD8561CQ + + + i8742 + I8742 + + + pr8210 + Pioneer PR-8210 + + + i8049 + I8049 + + + wiping_sound + Wiping Custom + + + naomi_m1_board + NAOMI-M1-BOARD + + + h83337 + H8/3337 + + + h8_intc + H8 INTC + + + h8_8bits_timer_channel + H8 8-bits timer channel + + + h8_16bits_timer_channel + H8 16-bits timer channel + + + h83007 + H8/3007 + + + sh1_drc + SH-1 DRC + + + tms9980a + TMS9980A + + + wd33c93 + 33C93 SCSI + + + cps3_custom + CPS3 Custom + + + midssio + Midway SSIO Sound Board + + + gms30c2132 + GMS30C2132 + + + h83334 + H8/3334 + + + tms32032 + TMS32032 + + + adsp2104 + ADSP-2104 + + + m48t35 + M48T35 + + + tms32031 + TMS32031 + + + tms57002 + TMS57002 + + + scsihd + SCSIHD + + + cxd8538q + CXD8538Q + + + k056800 + Konami 056800 MIRAC + + + se3208 + SE3208 + + + vr0video + VRender0 Video + + + ds1302 + DS1302 + + + vrender0 + VRender0 + + + cem3394 + CEM3394 + + + tms9927 + TMS9927 VTC + + + cquestrot + Cube Quest Rotate CPU + + + cquestlin + Cube Quest Line CPU + + + cquestsnd + Cube Quest Sound CPU + + + simutrek + Simutrek Modified PR-8210 + + + i8748 + I8748 + + + st0016 + ST0016 + + + seibu_cop_legacy + Seibu COP Legacy + + + atjsa2 + Atari JSA II Sound Board + + + sknsspr + sknsspr_device + + + k055673 + Konami 055673 + + + keycus_c431 + KEYCUS C431 + + + m68040 + M68040 + + + tms32051 + TMS32051 + + + tc0640fio + Taito TC0640FIO + + + 93c56_8 + Serial EEPROM 93C56 (256x8) + + + pc080sn + Taito PC080SN + + + toshiba_t5182 + T5182 + + + ppc603r + PowerPC 603R + + + mb86233 + MB86233 + + + segam1audio + Sega Model 1 Sound Board + + + multipcm + Sega/Yamaha 315-5560 + + + tc0510nio + Taito TC0510NIO + + + v3021 + v3021 + + + ics2115 + ICS2115 + + + rtc9701 + rtc9701 + + + ymz770 + Yamaha YMZ770 + + + epic12 + epic12_device + + + sh3be + SH-3 (big) + + + linearflash16mb + Linear Flash PCCARD (16MB) + + + k573mcr + Konami Memory Card Reader + + + k573cassyi + KONAMI 573 CASSETTE YI + + + ds2401 + DS2401 + + + linearflash32mb + Linear Flash PCCARD (32MB) + + + k573dio + Konami 573 digital I/O board + + + mas3507d + MAS3507D + + + k573casszi + KONAMI 573 CASSETTE ZI + + + zs01 + ZS01 + + + k573cassxi + KONAMI 573 CASSETTE XI + + + m68301 + M68301 + + + midtcs + Midway Turbo Chip Squeak Sound Board + + + 5a22 + 5A22 + + + spc700 + SPC700 + + + snes_sound + SNES Custom DSP (SPC700) + + + beep + Beep + + + tc0091lvc + TC0091LVC + + + namco53 + Namco 53xx + + + 58xx + Namco 58xx + + + 56xx + Namco 56xx + + + i80c51 + I80C51 + + + z80dma + Z8410 DMA + + + pr7820 + Pioneer PR-7820 + + + z80sio + Z80 SIO + + + 22vp932 + Phillips 22VP932 + + + adsp21062 + ADSP21062 + + + ds1204 + DS1204 + + + midsnt + Midway Squawk 'n' Talk Sound Board + + + tms5200 + TMS5200 + + + cop402 + COP402 + + + pic16c55 + PIC16C55 + + + igs_025_022 + IGS025 + + + igs022 + IGS022 + + + upd96050 + uPD96050 + + + k573msu + Konami Multi Session Unit + + + adc0838 + ADC0838 + + + keycus_c410 + KEYCUS C410 + + + astrocade + Astrocade + + + i8251 + I8251 + + + sega_sharrier_sprite + Sega Space Harrier Sprites + + + avg_starwars + AVG_STARWARS + + + tms5220 + TMS5220 + + + i80188 + I80188 + + + snk6502_sound + snk6502 Custom + + + venture_sound + Exidy SFX+PSG + + + nscsi_bus + NSCSI Bus + + + nscsi_connector + NSCSI device connector abstraction + + + scsi_harddisk + SCSI HARDDISK + + + ncr537xx + 53C7xx SCSI + + + pit8253 + 8253 PIT + + + filetto_cga + ISA8_CGA_FILETTO + + + tetriskr_cga + ISA8_CGA_TETRISKR + + + namco_c45_road + Namco C45 Road + + + e132t + E1-32T + + + tms9995 + TMS9995 + + + 22vp931 + Phillips 22VP931 + + + i4004 + Intel I4004 + + + hd6845 + HD6845 CRTC + + + flower_sound + Flower Custom Sound + + + e132xt + E1-32XT + + + toaplan_scu + toaplan_scu_device + + + nsc8105 + NSC8105 + + + i8741 + I8741 + + + funcube_touchscrene + Funcube Touchscreen + + + namco62 + Namco 62xx + + + 93c76_8 + Serial EEPROM 93C76 (1024x8) + + + kaneko_grap2 + kaneko_grap2_device + + + upd7756 + uPD7756 + + + voodoo_2 + 3dfx Voodoo 2 + + + taito8741_4pack + Taito 8741 MCU 4 pack + + + msm6585 + MSM6585 + + + st0020 + st0020_device + + + geebee_sound + Gee Bee Custom + + + namco_63701x + Namco 63701X + + + sega_yboard_sprite + Sega Y-Board Sprites + + + huc6202 + HuC6202 VPC + + + i8155 + 8155 RIOT + + + bfm_bd1 + BFM BD1 VFD controller + + + bfm_adder2 + BFM ADDER2 + + + gomoku_sound + Gomoku Custom + + + k033906 + Konami 033906 + + + k037122 + Konami 0371222 + + + adc12138 + ADC12138 + + + mb_vcu + Mazer Blazer custom VCU + + + gridlee_sound + Gridlee Custom + + + ym2608 + YM2608 + + + m48t02 + M48T02 + + + k573npu + Konami Network PCB Unit + + + adc1038 + ADC1038 + + + k056230 + Konami 056230 + + + atari_rle + Atari RLE Motion Objects + + + asic65 + ASIC65 + + + ins8050 + INS 8050 SC/MP + + + sega_hangon_sprite + Sega Hang On Sprites + + + adsp2100 + ADSP-2100 + + + adsp2101 + ADSP-2101 + + + dsp32c + DSP32C + + + i8080a + 8080A + + + k573cassy + KONAMI 573 CASSETTE Y + + + h8s2394 + H8S/2394 + + + h8s_intc + H8S INTC + + + h8_adc_2357 + H8 ADC 2357 + + + h8s_16bits_timer_channel + H8S 16-bits timer channel + + + segausbrom + Sega Universal Sound Board with ROM + + + tms9902 + TMS9902 ACC + + + ppu2c05_01 + 2C05_01 PPU + + + janshi_vdp + JANSHIVDP + + + wmsadpcm + Williams ADPCM Sound Board + + + josvolly8741_4pack + joshi Vollyball 8741 MCU 4 pack + + + v810 + V810 + + + midi_kbd + Generic MIDI Keyboard + + + r4600le_drc + R4600 (little) DRC + + + hd63484 + HD63484 CRTC + + + renegade_adpcm + Renegade Custom ADPCM + + + tms3615 + TMS3615 + + + er2055 + ER2055 + + + pentium4 + Pentium 4 + + + indervd + Inder / Dinamic TMS Video + + + cop420 + COP420 + + + decocpu1 + Data East Pinball CPU Board Type 1 + + + snkwave + SNK Wave + + + r5000be_drc + R5000 (big) DRC + + + tmp91640 + TMP91640 + + + saa5050 + SAA5050 + + + m58715 + M58715 + + + indersb + Inder 4xDAC Sound Board + + + sega315_5246 + Sega 315-5246 + + + cartslot_image + Cartslot + + + software_list + Software list + + + k053250 + K053250 + + + ppu2c05_02 + 2C05_02 PPU + + + gms30c2116 + GMS30C2116 + + + mjkjidai_adpcm + Custom ADPCM + + + decocpu2 + Data East Pinball CPU Board Type 2 + + + atjsa3s + Atari JSA IIIs Sound Board + + + es5503 + Ensoniq ES5503 + + + u8106 + U8106 + + + mc3417 + MC3417 + + + keycus_c443 + KEYCUS C443 + + + wmsnarc + Williams NARC Sound Board + + + naughtyb_sound + Naughty Boy Custom + + + ygv608 + YGV608 + + + m50458 + m50458 + + + s3520cf + s3520cf + + + rp5h01 + RP5H01 + + + m6m80011ap + M6M80011AP EEPROM + + + igs028 + IGS028 + + + upd4992 + uPD4992 + + + sega_outrun_sprite + Sega Out Run Sprites + + + er5911_16 + Serial EEPROM ER5911 (64x16) + + + y2404 + Y2404 + + + 59xx + Namco 59xx + + + e116xt + E1-16XT + + + bootleg_sys16a_sprite + Bootleg System 16A Sprites + + + es8712 + ES8712 + + + ppu2c03b + 2C03B PPU + + + segausb + Sega Universal Sound Board + + + pleiads_sound + Pleiads Custom + + + dsp56156 + DSP56156 + + + linearflash64mb + Linear Flash PCCARD (64MB) + + + keycus_c432 + KEYCUS C432 + + + z8002 + Z8002 + + + polepos_sound + Pole Position Custom + + + netlist_analog_output + netlist analog output + + + popflame_sound + Pop Flamer Custom + + + keycus_c411 + KEYCUS C411 + + + decocpu6 + DECO CPU-6 + + + mb90082 + mb90082 + + + puzzlet_io + Puzzlet Coin/Start I/O + + + pentium2 + Pentium II + + + avg_quantum + AVG_QUANTUM + + + i5000snd + I5000 + + + m58819 + M58819 + + + m58817 + M58817 + + + gaelco_serial + gaelco_serial + + + at89c4051 + AT89C4051 + + + redbaron_custom + Red Baron Custom + + + redline_80186_sound + Redline Racer 80186 DAC + + + sp0256 + SP0256 + + + s3_vga + S3 Graphics VGA + + + ibm8514a + IBM8514A + + + bfm_dm01 + Bellfruit Dotmatrix 01 + + + digitalker + Digitalker + + + dsbz80 + Sega Z80-based Digital Sound Board + + + dm9368 + DM9368 + + + m3745x + Mitsubishi M37450 + + + i860xr + i860XR + + + i80c31 + I80C31 + + + m68ec030 + M68EC030 + + + keycus_c409 + KEYCUS C409 + + + r3051 + R3051 + + + gms30c2232 + GMS30C2232 + + + midcsd + Midway Chip Squeak Deluxe Sound Board + + + nile + NiLe + + + keycus_c442 + KEYCUS C442 + + + cxd8530aq + CXD8530AQ + + + keycus_c406 + KEYCUS C406 + + + avg_tempest + AVG_TEMPEST + + + cop421 + COP421 + + + avg_tomcat + AVG_TOMCAT + + + ppu2c05_04 + 2C05_04 PPU + + + tia_ntsc_video + TIA Video (NTSC) + + + tia_sound + TIA + + + esrip + ESRIP + + + turrett_hdd + Turrett Tower HDD + + + ttsnd + Turret Tower Sound + + + tx1_sound + TX-1 Custom + + + scn2674_device + scn2674_device + + + ins8154 + INS8154 + + + victory_sound + Exidy SFX+PSG+Speech + + + ppu2c05_03 + 2C05_03 PPU + + + r4700le_drc + R4700 (little) DRC + + + ds5002fp + DS5002FP + + + keycus_c430 + KEYCUS C430 + + + + + 64streej + 64th. Street - A Detective Story (Japan) + + + 720b + 720 Degrees (set 2) + + + 99lstwra + '99 The Last War (alternate) + + + actfanc1 + Act-Fancer Cybernetick Hyper Weapon (World revision 1) + + + actfancj + Act-Fancer Cybernetick Hyper Weapon (Japan revision 1) + + + alexkida + Alex Kidd (set 2) + + + aliensya + Alien Syndrome (set 2) + + + aliensyb + Alien Syndrome (set 3) + + + aliensyj + Alien Syndrome (Japan) + + + altbeas2 + Altered Beast (Version 2) + + + archriv2 + Arch Rivals (rev 2.0) + + + ark2jp + Arkanoid - Revenge of DOH (Japan) + + + ark2us + Arkanoid - Revenge of DOH (US) + + + arkanoi2 + Arkanoid - Revenge of DOH (World) + + + arkbl2 + Arkanoid (Japanese bootleg Set 2) + + + arknoidj + Arkanoid (Japan) + + + arknoidu + Arkanoid (US) + + + armorca2 + Armored Car (set 2) + + + astdelu1 + Asteroids Deluxe (rev 1) + + + asteroi1 + Asteroids (rev 1) + + + asteroib + Asteroids (bootleg on Lunar Lander hardware) + + + astorm2p + Alien Storm (2 Player) + + + atetckt2 + Tetris (Cocktail set 2) + + + atetcktl + Tetris (Cocktail set 1) + + + atlants2 + Battle of Atlantis (set 2) + + + auraila + Aurail (set 2) + + + avenger2 + Avengers (set 2) + + + battlan2 + Battle Lane Vol. 5 (set 2) + + + battlan3 + Battle Lane Vol. 5 (set 3) + + + battlntj + Battlantis (Japan) + + + batugnsp + Batsugun Special Ver. + + + bayrouta + Bay Route (set 2) + + + bayrtbl1 + Bay Route (bootleg set 1) + + + bayrtbl2 + Bay Route (bootleg set 2) + + + berlwalt + Berlin Wall, The (set 2) + + + bermudaa + Bermuda Triangle (US early version) + + + bermudaj + Bermuda Triangle (Japan) + + + bktigerb + Black Tiger (bootleg) + + + bladstle + Blades of Steel (version E) + + + blckgalb + Block Gal (bootleg) + + + blckout2 + Block Out (set 2) + + + blkdrgnb + Black Dragon (bootleg) + + + blsthead + Blasteroids (with heads) + + + blstroi2 + Blasteroids (version 2) + + + blueprnj + Blue Print (Jaleco) + + + bombjac2 + Bomb Jack (set 2) + + + bubbobr1 + Bubble Bobble (US) + + + bublbobr + Bubble Bobble (US with mode select) + + + bullfgtj + Tougyuu, The (Japan) + + + burningh + Burning Fight (set 2) + + + bzone2 + Battle Zone (set 2) + + + cabal2 + Cabal (US set 2) + + + cameltru + Camel Try (US) + + + canbprot + Canyon Bomber (prototype) + + + captcomj + Captain Commando (Japan) + + + captcomu + Captain Commando (US) + + + carnvckt + Carnival (cocktail) + + + ccastle2 + Crystal Castles (set 2) + + + cclimbrj + Crazy Climber (Japan) + + + centipb2 + Centipede (bootleg set 2) + + + centipd2 + Centipede (revision 2) + + + champbbj + Champion Baseball (Japan) + + + checkmaj + Checkman (Japan) + + + chplft + Choplifter + + + chplftb + Choplifter (alternate) + + + chplftbl + Choplifter (bootleg) + + + ckonga + Crazy Kong (set 2) + + + ckongjeu + Crazy Kong (Jeutel bootleg) + + + cninja0 + Caveman Ninja (World revision 0) + + + cobracmj + Cobra-Command (Japan) + + + combasc + Combat School (joystick) + + + combascb + Combat School (bootleg) + + + combascj + Combat School (Japan trackball) + + + combasct + Combat School (trackball) + + + commandj + Senjo no Ookami + + + commandu + Commando (US) + + + contrajb + Contra (Japan bootleg) + + + cosmognj + Cosmo Gang the Video (Japan) + + + crbalon2 + Crazy Balloon (set 2) + + + crimfgt2 + Crime Fighters (World 2 Players) + + + crimfgtj + Crime Fighters (Japan 2 Players) + + + cyberb2p + Cyberball 2072 (2 player) + + + cyberba2 + Cyberball (Version 2) + + + cyberbt + Tournament Cyberball 2072 + + + darksea1 + Dark Seal (World revision 1) + + + darkseaj + Dark Seal (Japan) + + + dbldyn + Double Dynamites, The + + + ddrago3b + Double Dragon 3 - The Rosetta Stone (bootleg) + + + deadconj + Dead Connection (Japan) + + + defendg + Defender (Green label) + + + defendw + Defender (White label) + + + destderb + Demolition Derby + + + destderm + Demolition Derby (2-Player Mono Board Version) + + + devstor2 + Devastators (version X) + + + devstor3 + Devastators (version V) + + + digdug2a + Dig Dug II (set 2) + + + digdugb + Dig Dug (set 2) + + + dkjrbl + Donkey Kong Junior (bootleg?) + + + dkjrjp + Donkey Kong Junior (Japan) + + + dkngjrjp + Donkey Kong Jr. (Original Japanese) + + + dkongjp + Donkey Kong (Japan set 1) + + + dkongjpo + Donkey Kong (Japan set 2) + + + docastl2 + Mr. Do's Castle (set 2) + + + dorunru2 + Do! Run Run (set 2) + + + dorunruc + Do! Run Run (Do's Castle hardware) + + + dotriku2 + Dottori Kun (old version) + + + dspirito + Dragon Spirit (old version) + + + dwj + Tenchi wo Kurau (Japan) + + + earthinv + Super Earth Invasion + + + einnings + Extra Innings + + + elecyoy2 + Electric Yo-Yo, The (set 2) + + + elevatob + Elevator Action (bootleg) + + + espiale + Espial (Europe) + + + exctscca + Exciting Soccer (alternate music) + + + exctsccb + Exciting Soccer (bootleg) + + + exerizrb + Exerizer (Japan) (bootleg) + + + fantzono + Fantasy Zone (Old Ver.) + + + finalizb + Finalizer - Super Transformation (bootleg) + + + firetpbl + Fire Trap (Japan bootleg) + + + flicky2 + Flicky (set 2) + + + froggrmc + Frogger (modified Moon Cresta hardware) + + + frogseg1 + Frogger (Sega set 1) + + + frogseg2 + Frogger (Sega set 2) + + + ftsoccer + Fighting Soccer + + + galag88b + Galaga '88 (set 2) + + + galag88j + Galaga '88 (Japan) + + + galaga84 + Galaga '84 + + + galagab2 + Galaga (bootleg) + + + galagads + Galaga (fast shoot) + + + galaxb + Galaxian (bootleg) + + + galmidw + Galaxian (Midway) + + + gangwarb + Gang Wars (bootleg) + + + gatedom1 + Gate of Doom (US revision 1) + + + gaunt2p + Gauntlet (2 Players) + + + gauntir1 + Gauntlet (Intermediate Release 1) + + + gauntir2 + Gauntlet (Intermediate Release 2) + + + getstar + Guardian + + + getstarb + Get Star (bootleg) + + + ghoulsj + Dai Makai-Mura (Japan) + + + goldnabl + Golden Axe (bootleg) + + + goldnaxa + Golden Axe (Version 2) + + + goldnaxb + Golden Axe (Version 2 317-0110) + + + goldnaxc + Golden Axe (Version 2 317-0122) + + + goldnaxj + Golden Axe (Version 1, Japan) + + + gravitr2 + Gravitar (version 2) + + + grdius2a + Gradius II - Gofer no Yabou (Japan set 2) + + + grdius2b + Gradius II - Gofer no Yabou (Japan set 3) + + + grdius3a + Gradius III (Asia) + + + gundeala + Gun Dealer (set 2) + + + gunforcu + Gunforce - Battle Fire Engulfed Terror Island (US) + + + gunfronj + Gun Frontier (Japan) + + + gunsmoka + Gun.Smoke (US set 2) + + + gunsmokj + Gun.Smoke (Japan) + + + gunsmrom + Gun.Smoke (US set 1) + + + hardhedb + Hard Head (Bootleg) + + + hcastlea + Haunted Castle (set 2) + + + hcastlej + Akuma-Jou Dracula (Japan) + + + helifira + HeliFire (revision A) + + + hitnmis2 + Hit 'n Miss (version 2.0) + + + hyprolyb + Hyper Olympic (bootleg) + + + indytem2 + Indiana Jones and the Temple of Doom (set 2) + + + indytem3 + Indiana Jones and the Temple of Doom (set 3) + + + indytem4 + Indiana Jones and the Temple of Doom (set 4) + + + intrepi2 + Intrepid (set 2) + + + invrvnga + Invader's Revenge (Dutchford) + + + jackrab2 + Jack Rabbit (set 2) + + + jackrabs + Jack Rabbit (special) + + + junglkj2 + Jungle King (Japan, earlier) + + + junofstg + Juno First (Gottlieb) + + + jyuohki + Jyuohki (Japan) + + + kangaroa + Kangaroo (Atari) + + + kangarob + Kangaroo (bootleg) + + + karatblu + Karate Blazers (US) + + + kicka + Kick (cocktail) + + + kingbalj + King & Balloon (Japan) + + + kodure + Kodure Ookami (Japan) + + + kungfud + Kung Fu Master (Data East) + + + kuniokub + Nekketsu Kouha Kunio-kun (Japan bootleg) + + + kurikina + Kuri Kinton (prototype?) + + + kyukaido + Kyuukai Douchuuki (Japan old version) + + + lastmiss + Last Mission (US revision 6) + + + lastmss2 + Last Mission (US revision 5) + + + lifefrcj + Lifeforce (Japan) + + + losttmbh + Lost Tomb (hard) + + + lstduela + Last Duel (US set 2) + + + lstduelb + Last Duel (bootleg) + + + lwingsjp + Ales no Tsubasa (Japan) + + + mainevt2 + Main Event, The (version F) + + + makaimuc + Makai-Mura (Revision C) + + + makaimug + Makai-Mura (Revision G) + + + mappyjp + Mappy (Japan) + + + marblea + Marble Madness (set 3) + + + mariojp + Mario Bros. (Japan) + + + marvlanj + Marvel Land (Japan) + + + megaznik + Mega Zone (Kosuka) + + + minigol2 + Mini Golf (set 2) + + + mjnquesb + Mahjong Quest (No Nudity) + + + mk2r32 + Mortal Kombat II (rev L3.2 (European)) + + + monwar2a + Moon War II (set 2) + + + mooncrsg + Moon Cresta (Gremlin) + + + moonwalk + Moon Walker (Set 1) + + + moonwar2 + Moon War II (set 1) + + + moonwlka + Moon Walker (Set 2) + + + moonwlkb + Moon Walker (bootleg) + + + mrvikinj + Mister Viking (Japan) + + + mspacatk + Ms. Pac-Man Plus + + + myheroj + Seishun Scandal (Japan) + + + naughtya + Naughty Boy (bootleg) + + + naughtyc + Naughty Boy (Cinematronics) + + + navalone + Navalone + + + nbajamt1 + NBA Jam TE (rev 1.0 01/17/94) + + + nbajamt2 + NBA Jam TE (rev 2.0 01/28/94) + + + nbajamt3 + NBA Jam TE (rev 3.0 03/04/94) + + + nbamaxht + NBA Maximum Hangtime (rev 1.0) + + + nebulbee + Nebulous Bee + + + nemesuk + Nemesis (World?) + + + nibblera + Nibbler (set 2) + + + ninjak2a + Ninja Kid II (set 2) + + + ninjak2b + Ninja Kid II (set 3) + + + nov2001u + Nova 2001 (US) + + + npacmod + PuckMan (harder?) + + + nprincsb + Ninja Princess (bootleg?) + + + nprincsu + Ninja Princess (not encrypted) + + + offtwalc + Off the Wall (2-player cocktail) + + + oscarj0 + Psycho-Nics Oscar (Japan revision 0) + + + oscarj + Psycho-Nics Oscar (Japan revision 2) + + + outruna + Out Run (set 2) + + + outzonep + Out Zone (bootleg) + + + pacland2 + Pac-Land (set 2) + + + pacland3 + Pac-Land (set 3) + + + pacmanij + Pac-Mania (Japan) + + + pacmanjp + PuckMan (Japan set 2) + + + pacmanm + Pac-Man (Midway) + + + panica + Space Panic (set 2) + + + pbactio2 + Pinball Action (set 2) + + + pipibibi + Pipi & Bibis / Whoopee (Japan) [bootleg ?] + + + pitfallu + Pitfall II (not encrypted) + + + pitfigh3 + Pit Fighter (version 3) + + + polepos1 + Pole Position (Atari version 1) + + + poleposa + Pole Position (Atari version 2) + + + poleps2a + Pole Position II (Atari) + + + poleps2b + Pole Position II (Atari bootleg 1) + + + poleps2c + Pole Position II (Atari bootleg 2) + + + popeye2 + Popeye (set 2) + + + popflama + Pop Flamer (set 2) + + + poundfou + Pound for Pound (US) + + + prehislu + Prehistoric Isle in 1930 (US) + + + pulirulj + PuLiRuLa (Japan) + + + punishrj + Punisher, The (Japan) + + + punishru + Punisher, The (US) + + + punksht2 + Punk Shot (2 Players) + + + puzbobb + Puzzle Bobble (Japan, B-System) + + + qadj + Quiz & Dragons (Japan) + + + qbertjp + Q*bert (Japan) + + + qtono2 + Quiz Tonosama no Yabou 2 Zenkoku-ban (Japan) + + + quartetj + Quartet (Japan) + + + quartrba + Quarterback (set 2) + + + qwakprot + Qwak (prototype) + + + rainbow + Rainbow Islands + + + rainbowe + Rainbow Islands (Extra) + + + rambo3a + Rambo III (set 2, US) + + + ramprt2p + Rampart (2-player Joystick) + + + rastanu2 + Rastan (US set 2) + + + rescrdsa + Rescue Raider (Stand-Alone) + + + retofin1 + Return of the Invaders (bootleg set 1) + + + retofin2 + Return of the Invaders (bootleg set 2) + + + ringkin2 + Ring King (set 2) + + + ringkin3 + Ring King (set 3) + + + robocpu0 + Robocop (US revision 0) + + + robotryo + Robotron (Yellow/Orange label) + + + rockragj + Koi no Hotrock (Japan) + + + rocnropk + Roc'n Rope (Kosuka) + + + rthundro + Rolling Thunder (old version) + + + rtypepj + R-Type (Japan prototype) + + + saturn + Saturn + + + schasrcv + Space Chaser (CV version) + + + scrambls + Scramble (Stern) + + + sctionza + Section Z (set 2) + + + sdioj + SDI - Strategic Defense Initiative (Japan) + + + seganinu + Sega Ninja (not encrypted) + + + sengokh + Sengoku / Sengoku Denshou (set 2) + + + sercharu + SAR - Search And Rescue (US) + + + sf1 + Street Fighter (World) + + + sf1jp + Street Fighter (Japan) + + + sf1us + Street Fighter (US) + + + sf2a + Street Fighter II - The World Warrior (US 910206) + + + sf2b + Street Fighter II - The World Warrior (US 910214) + + + sf2cea + Street Fighter II' - Champion Edition (US rev A) + + + sf2ceb + Street Fighter II' - Champion Edition (US rev B) + + + sf2cej + Street Fighter II' - Champion Edition (Japan) + + + sf2e + Street Fighter II - The World Warrior (US 910228) + + + sf2jb + Street Fighter II - The World Warrior (Japan 910214) + + + sf2t + Street Fighter II' - Hyper Fighting (US) + + + sf2tj + Street Fighter II' Turbo - Hyper Fighting (Japan) + + + sfeverbw + Space Fever (black and white) + + + shangonb + Super Hang-On (bootleg) + + + shdancrj + Shadow Dancer (Japan) + + + shinobia + Shinobi (set 2) + + + shinobib + Shinobi (set 3) + + + shinobl + Shinobi (bootleg) + + + shootoub + Shoot Out (Korean Bootleg) + + + shootouj + Shoot Out (Japan) + + + sichuana + Sichuan II (hack ?) (set 2) + + + sidearjp + Side Arms - Hyper Dyne (Japan) + + + sidearmr + Side Arms - Hyper Dyne (US) + + + sidepctb + Side Pocket (bootleg) + + + sidepctj + Side Pocket (Japan) + + + silkwrm2 + Silkworm (set 2) + + + simps2pj + Simpsons, The (2 Players Japan) + + + simpsn2p + Simpsons, The (2 Players) + + + sinista1 + Sinistar (prototype version) + + + sinista2 + Sinistar (revision 2) + + + skingam2 + Irem Skins Game, The (US set 2) + + + skullxb2 + Skull & Crossbones (set 2) + + + skykiddo + Sky Kid Deluxe (set 2) + + + slapbtjp + Slap Fight (Japan bootleg) + + + slapbtuk + Slap Fight (English bootleg) + + + snowbroa + Snow Bros. - Nick & Tom (set 2) + + + snowbrob + Snow Bros. - Nick & Tom (set 3) + + + snowbroj + Snow Bros. - Nick & Tom (Japan) + + + spacfura + Space Fury (revision A) + + + spinlbrj + Spinal Breakers (Japan) + + + spinlbru + Spinal Breakers (US) + + + spnchotj + Super Punch-Out!! (Japan) + + + sptrekct + Space Trek (cocktail) + + + spyhnt2a + Spy Hunter 2 (rev 1) + + + sqixbl + Super Qix (bootleg) + + + srumblr2 + Speed Rumbler, The (set 2) + + + sspacat2 + Space Attack (upright, older) + + + sspacatc + Space Attack (cocktail) + + + ssrdrabd + Sunset Riders (Asia 2 Players ver. ABD) + + + ssrdrebc + Sunset Riders (World 2 Players ver. EBC) + + + ssrdrebd + Sunset Riders (World 2 Players ver. EBD) + + + ssrdrjbd + Sunset Riders (Japan 2 Players ver. JBD) + + + ssrdruac + Sunset Riders (US 4 Players ver. UAC) + + + ssrdrubc + Sunset Riders (US 2 Players ver. UBC) + + + ssrdruda + Sunset Riders (US 4 Players ver. UDA) + + + starfore + Star Force (encrypted) + + + starjacs + Star Jacker (Stern) + + + starwar1 + Star Wars (rev 1) + + + stratvxb + Stratovox (bootleg) + + + streets1 + Street Smart (US version 1) + + + streetsj + Street Smart (Japan version 1) + + + stridrja + Strider Hiryu (Japan set 2) + + + supbtimj + Super Burger Time (Japan) + + + superpcm + Super Pac-Man (Midway) + + + superqix + Super Qix + + + suprmou2 + Funny Mouse (bootleg?) + + + surpratk + Surprise Attack (Japan) + + + tankfrcj + Tank Force (Japan) + + + tatsujn2 + Truxton II / Tatsujin II / Tatsujin Oh (Japan) + + + terracra + Terra Cresta (YM2203) + + + terracrb + Terra Cresta (YM3526 set 2) + + + tetrisa + Tetris (Sega Set 2) + + + thehustj + Hustler, The (Japan version J) + + + thnderxj + Thunder Cross (Japan) + + + tigerh2 + Tiger Heli (set 2) + + + timesol1 + Time Soldiers (US Rev 1) + + + timscanr + Time Scanner + + + tmnt22p + Teenage Mutant Ninja Turtles - Turtles in Time (2 Players US) + + + tndrcadj + Tokusyu Butai UAG (Japan) + + + tnzs2 + NewZealand Story 2, The (World) + + + tnzsb + NewZealand Story, The (World, bootleg) + + + todruagb + Tower of Druaga (set 2) + + + toki2 + Toki (set 2) + + + toki3 + Toki (set 3) + + + tomahaw5 + Tomahawk 777 (Revision 5) + + + toobinp + Toobin' (Prototype) + + + trackflc + Track & Field (Centuri) + + + trogp + Trog (prototype, rev 4.00 07/27/90) + + + tsamura2 + Samurai Nihon-ichi (set 2) + + + tumblep2 + Tumble Pop (bootleg set 2) + + + tumblepb + Tumble Pop (bootleg set 1) + + + tutankst + Tutankham (Stern) + + + twincobu + Twin Cobra (US) + + + vangrdce + Vanguard (Centuri) + + + vanvans + Van Van Car (Sanritsu) + + + vaportru + Vapor Trail - Hyper Offence Formation (US) + + + vendett2 + Vendetta (Asia set 2) + + + vendettj + Crime Fighters 2 (Japan) + + + vigilntj + Vigilante (Japan) + + + vigilntu + Vigilante (US) + + + vimana2 + Vimana (set 2) + + + vsyard + 10 Yard Fight (Vs. version 11/05/84) + + + vsyard2 + 10 Yard Fight (Vs. version, set 2) + + + vulgus2 + Vulgus (set 2) + + + warlord + Warlords + + + warpwar2 + Warp Warp (Rock-ola set 2) + + + warpwarr + Warp Warp (Rock-ola set 1) + + + wb3a + Wonder Boy III - Monster Lair (set 2) + + + wb3bl + Wonder Boy III - Monster Lair (bootleg) + + + wbmlj + Wonder Boy in Monster Land (Japan set 1) + + + wbmlj2 + Wonder Boy in Monster Land (Japan set 2) + + + wbmlju + Wonder Boy in Monster Land (Japan not encrypted) + + + wboy4u + Wonder Boy (set 4 not encrypted) + + + wexpresb + Western Express (bootleg) + + + wwester1 + Wild Western (set 2) + + + yard + 10 Yard Fight + + + yokaidko + Yokai Douchuuki (Japan old version) + + + youkaidk + Yokai Douchuuki (Japan new version) + + + zzyzzyx2 + Zzyzzyxx (set 2) + \ No newline at end of file From bb4c204e83a2890414438f3228c0ffcfad71b2b3 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 9 Feb 2018 18:37:40 +0100 Subject: [PATCH 251/603] Fix the Fedora instructions --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c20441ab82..6607bd46d1 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,9 @@ sudo apt-get install libsdl2-dev libfreeimage-dev libfreetype6-dev libcurl4-open **On Fedora:** All of this be easily installed with dnf ( With rpmfusion activated) : ```bash -sudo dnf install cmake SDL2-devel boost-devel freeimage-devel freetype-devel eigen3-devel curl-devel mesa-libGL-devel vlc-devel libcec-devel alsa-lib-devel +sudo dnf install SDL2-devel freeimage-devel freetype-devel curl-devel \ + alsa-lib-devel mesa-libGL-devel cmake \ + vlc-devel ``` Note this Repository uses a git submodule - to checkout the source and all submodules, use From e6df25074bdc6d42d2d0d3a73ebec9ccb548dbff Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 10 Feb 2018 11:35:24 +0100 Subject: [PATCH 252/603] Fix double // --- es-core/src/utils/FileSystemUtil.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 62d8d48130..b95357e8b5 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -62,7 +62,7 @@ namespace Utils // ignore "." and ".." if((name != ".") && (name != "..")) { - std::string fullName(path + "/" + name); + std::string fullName(getGenericPath(path + "/" + name)); contentList.push_back(fullName); if(_recursive && isDirectory(fullName)) From 267e547122a45d6c78e08317c04926b145aed5d6 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 15 Feb 2018 15:03:42 +0100 Subject: [PATCH 253/603] Rename MameNames::names to MameNAmes::mNamePairs --- es-core/src/MameNames.cpp | 8 ++++---- es-core/src/MameNames.h | 4 +--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/es-core/src/MameNames.cpp b/es-core/src/MameNames.cpp index ed998b2d5e..78743b5dd0 100644 --- a/es-core/src/MameNames.cpp +++ b/es-core/src/MameNames.cpp @@ -55,7 +55,7 @@ MameNames::MameNames() for(pugi::xml_node gameNode = doc.child("game"); gameNode; gameNode = gameNode.next_sibling("game")) { NamePair namePair = { gameNode.child("mamename").text().get(), gameNode.child("realname").text().get() }; - names.push_back(namePair); + mNamePairs.push_back(namePair); } } // MameNames @@ -68,16 +68,16 @@ MameNames::~MameNames() std::string MameNames::getRealName(const std::string& _mameName) { size_t start = 0; - size_t end = names.size(); + size_t end = mNamePairs.size(); while(start < end) { const size_t index = (start + end) / 2; - const int compare = strcmp(names[index].mameName.c_str(), _mameName.c_str()); + const int compare = strcmp(mNamePairs[index].mameName.c_str(), _mameName.c_str()); if(compare < 0) start = index + 1; else if( compare > 0) end = index; - else return names[index].realName; + else return mNamePairs[index].realName; } return _mameName; diff --git a/es-core/src/MameNames.h b/es-core/src/MameNames.h index 5f8bb4634e..52fd714559 100644 --- a/es-core/src/MameNames.h +++ b/es-core/src/MameNames.h @@ -5,8 +5,6 @@ #include #include -namespace CEC { class ICECAdapter; } - class MameNames { public: @@ -31,7 +29,7 @@ class MameNames static MameNames* sInstance; - namePairVector names; + namePairVector mNamePairs; }; // MameNames From dbcd749ae70710315fa291397a5b2e844a176982 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 15 Feb 2018 15:04:46 +0100 Subject: [PATCH 254/603] Add Utils::String::toLower and Utils::String::format --- es-core/src/utils/StringUtil.cpp | 37 ++++++++++++++++++++++++++++++++ es-core/src/utils/StringUtil.h | 2 ++ 2 files changed, 39 insertions(+) diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index 54e2b18f2b..fd70dfaa70 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -1,6 +1,7 @@ #include "utils/StringUtil.h" #include +#include namespace Utils { @@ -134,6 +135,17 @@ namespace Utils } // moveCursor + std::string toLower(const std::string& _string) + { + std::string string; + + for(size_t i = 0; i < _string.length(); ++i) + string += (char)tolower(_string[i]); + + return string; + + } // toLower + std::string toUpper(const std::string& _string) { std::string string; @@ -243,6 +255,31 @@ namespace Utils } // vectorToCommaString + std::string format(const char* _format, ...) + { + va_list args; + va_list copy; + + va_start(args, _format); + + va_copy(copy, args); + const int length = vsnprintf(nullptr, 0, _format, copy); + va_end(copy); + + char* buffer = new char[length + 1]; + va_copy(copy, args); + vsnprintf(buffer, length + 1, _format, copy); + va_end(copy); + + va_end(args); + + std::string out(buffer); + delete buffer; + + return out; + + } // format + } // String:: } // Utils:: diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h index 47fb7d1fe2..47bba35acb 100644 --- a/es-core/src/utils/StringUtil.h +++ b/es-core/src/utils/StringUtil.h @@ -16,6 +16,7 @@ namespace Utils size_t nextCursor (const std::string& _string, const size_t _cursor); size_t prevCursor (const std::string& _string, const size_t _cursor); size_t moveCursor (const std::string& _string, const size_t _cursor, const int _amount); + std::string toLower (const std::string& _string); std::string toUpper (const std::string& _string); std::string trim (const std::string& _string); std::string replace (const std::string& _string, const std::string& _replace, const std::string& _with); @@ -24,6 +25,7 @@ namespace Utils std::string removeParenthesis (const std::string& _string); stringVector commaStringToVector(const std::string& _string); std::string vectorToCommaString(stringVector _vector); + std::string format (const char* _string, ...); } // String:: From 5c6b29705ab99d6a3b171fb6b962e595cd3c3681 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 15 Feb 2018 15:05:47 +0100 Subject: [PATCH 255/603] Suggest vector access methods to be inlined --- es-core/src/math/Misc.h | 2 +- es-core/src/math/Vector2f.h | 8 ++++---- es-core/src/math/Vector2i.h | 8 ++++---- es-core/src/math/Vector3f.h | 12 ++++++------ es-core/src/math/Vector4f.h | 16 ++++++++-------- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/es-core/src/math/Misc.h b/es-core/src/math/Misc.h index a571796f16..ea07e2e7ee 100644 --- a/es-core/src/math/Misc.h +++ b/es-core/src/math/Misc.h @@ -29,7 +29,7 @@ namespace Math float bounce(const float _delayTime, const float _scrollTime, const float _currentTime, const float _scrollLength); float loop (const float _delayTime, const float _scrollTime, const float _currentTime, const float _scrollLength); - } // Math::Scroll:: + } // Scroll:: } // Math:: diff --git a/es-core/src/math/Vector2f.h b/es-core/src/math/Vector2f.h index 0616842845..b9c91fda08 100644 --- a/es-core/src/math/Vector2f.h +++ b/es-core/src/math/Vector2f.h @@ -46,10 +46,10 @@ class Vector2f float& operator[](const int _index) { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } const float& operator[](const int _index) const { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } - float& x() { return mX; } - float& y() { return mY; } - const float& x() const { return mX; } - const float& y() const { return mY; } + inline float& x() { return mX; } + inline float& y() { return mY; } + inline const float& x() const { return mX; } + inline const float& y() const { return mY; } Vector2f& round(); Vector2f& lerp (const Vector2f& _start, const Vector2f& _end, const float _fraction); diff --git a/es-core/src/math/Vector2i.h b/es-core/src/math/Vector2i.h index 7cc020ea54..0c91a11552 100644 --- a/es-core/src/math/Vector2i.h +++ b/es-core/src/math/Vector2i.h @@ -40,10 +40,10 @@ class Vector2i int& operator[](const int _index) { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } const int& operator[](const int _index) const { assert(_index < 2 && "index out of range"); return (&mX)[_index]; } - int& x() { return mX; } - int& y() { return mY; } - const int& x() const { return mX; } - const int& y() const { return mY; } + inline int& x() { return mX; } + inline int& y() { return mY; } + inline const int& x() const { return mX; } + inline const int& y() const { return mY; } static const Vector2i Zero () { return { 0, 0 }; } static const Vector2i UnitX() { return { 1, 0 }; } diff --git a/es-core/src/math/Vector3f.h b/es-core/src/math/Vector3f.h index c6237bc2ce..8126e70d2a 100644 --- a/es-core/src/math/Vector3f.h +++ b/es-core/src/math/Vector3f.h @@ -47,12 +47,12 @@ class Vector3f float& operator[](const int _index) { assert(_index < 3 && "index out of range"); return (&mX)[_index]; } const float& operator[](const int _index) const { assert(_index < 3 && "index out of range"); return (&mX)[_index]; } - float& x() { return mX; } - float& y() { return mY; } - float& z() { return mZ; } - const float& x() const { return mX; } - const float& y() const { return mY; } - const float& z() const { return mZ; } + inline float& x() { return mX; } + inline float& y() { return mY; } + inline float& z() { return mZ; } + inline const float& x() const { return mX; } + inline const float& y() const { return mY; } + inline const float& z() const { return mZ; } inline Vector2f& v2() { return *(Vector2f*)this; } inline const Vector2f& v2() const { return *(Vector2f*)this; } diff --git a/es-core/src/math/Vector4f.h b/es-core/src/math/Vector4f.h index 518c1450b3..1776c80fe1 100644 --- a/es-core/src/math/Vector4f.h +++ b/es-core/src/math/Vector4f.h @@ -49,14 +49,14 @@ class Vector4f float& operator[](const int _index) { assert(_index < 4 && "index out of range"); return (&mX)[_index]; } const float& operator[](const int _index) const { assert(_index < 4 && "index out of range"); return (&mX)[_index]; } - float& x() { return mX; } - float& y() { return mY; } - float& z() { return mZ; } - float& w() { return mW; } - const float& x() const { return mX; } - const float& y() const { return mY; } - const float& z() const { return mZ; } - const float& w() const { return mW; } + inline float& x() { return mX; } + inline float& y() { return mY; } + inline float& z() { return mZ; } + inline float& w() { return mW; } + inline const float& x() const { return mX; } + inline const float& y() const { return mY; } + inline const float& z() const { return mZ; } + inline const float& w() const { return mW; } inline Vector2f& v2() { return *(Vector2f*)this; } inline const Vector2f& v2() const { return *(Vector2f*)this; } From 33086042f9bc2a124746fb104308f06b97e686bf Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Tue, 20 Feb 2018 19:15:34 +0100 Subject: [PATCH 256/603] Fix getHomePath crash when the environment variable isn't set --- es-core/src/utils/FileSystemUtil.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index b95357e8b5..3cbb20a1ff 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -143,21 +143,24 @@ namespace Utils if(!path.length()) { // this should give us something like "/home/YOUR_USERNAME" on Linux and "C:/Users/YOUR_USERNAME/" on Windows - std::string envHome(getenv("HOME")); - if(envHome.length()) + char* envHome = getenv("HOME"); + if(envHome) path = getGenericPath(envHome); #if defined(_WIN32) // but does not seem to work for Windows XP or Vista, so try something else if(!path.length()) { - std::string envDir(getenv("HOMEDRIVE")); - std::string envPath(getenv("HOMEPATH")); - if(envDir.length() && envPath.length()) - path = getGenericPath(envDir + "/" + envPath); + char* envHomeDrive = getenv("HOMEDRIVE"); + char* envHomePath = getenv("HOMEPATH"); + if(envHomeDrive && envHomePath) + path = getGenericPath(std::string(envHomeDrive) + "/" + envHomePath); } #endif // _WIN32 + // no homepath found, fall back to current working directory + if(!path.length()) + path = getCWDPath(); } // return constructed homepath From 32258e1f00f07e5c43b6936a374571cf1b8f762f Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 27 Feb 2018 17:22:08 +0000 Subject: [PATCH 257/603] bump version to 2.8.0 and add -dev suffix to string --- es-app/src/EmulationStation.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 44d3247525..8bb4fa44a2 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -5,13 +5,13 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 7 -#define PROGRAM_VERSION_MAINTENANCE 4 -#define PROGRAM_VERSION_STRING "2.7.4rp" +#define PROGRAM_VERSION_MINOR 8 +#define PROGRAM_VERSION_MAINTENANCE 0 +#define PROGRAM_VERSION_STRING "2.8.0rp-dev" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,7,4\0" +#define RESOURCE_VERSION_STRING "2,8,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE #endif // ES_APP_EMULATION_STATION_H From d3cc0a77efff7fd9b94239474cd9bf8596d69b6e Mon Sep 17 00:00:00 2001 From: pjft Date: Tue, 27 Feb 2018 22:40:23 +0000 Subject: [PATCH 258/603] Limiting last played count to 50 --- es-app/src/CollectionSystemManager.cpp | 22 +++++++++++++++++++++- es-app/src/CollectionSystemManager.h | 2 ++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 6526a5faf3..e10a9784dd 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -16,6 +16,8 @@ std::string myCollectionsName = "collections"; +#define LAST_PLAYED_MAX 50 + /* Handling the getting, initialization, deinitialization, saving and deletion of * a CollectionSystemManager Instance */ CollectionSystemManager* CollectionSystemManager::sInstance = NULL; @@ -277,7 +279,23 @@ void CollectionSystemManager::updateCollectionSystem(FileData* file, CollectionS } } rootFolder->sort(getSortTypeFromString(mCollectionSystemDeclsIndex[name].defaultSort)); - ViewController::get()->onFileChanged(rootFolder, FILE_SORTED); + if (name == "recent") + { + trimCollectionCount(rootFolder, LAST_PLAYED_MAX); + ViewController::get()->onFileChanged(rootFolder, FILE_METADATA_CHANGED); + } + else + ViewController::get()->onFileChanged(rootFolder, FILE_SORTED); + } +} + +void CollectionSystemManager::trimCollectionCount(FileData* rootFolder, int limit) +{ + SystemData* curSys = rootFolder->getSystem(); + while (rootFolder->getChildren().size() > limit) + { + CollectionFileData* gameToRemove = (CollectionFileData*)rootFolder->getChildrenListToDisplay().back(); + ViewController::get()->getGameListView(curSys).get()->remove(gameToRemove, false); } } @@ -713,6 +731,8 @@ void CollectionSystemManager::populateAutoCollection(CollectionSystemData* sysDa } } rootFolder->sort(getSortTypeFromString(sysDecl.defaultSort)); + if (sysDecl.type == AUTO_LAST_PLAYED) + trimCollectionCount(rootFolder, LAST_PLAYED_MAX); sysData->isPopulated = true; } diff --git a/es-app/src/CollectionSystemManager.h b/es-app/src/CollectionSystemManager.h index 71709f8e31..23afe19320 100644 --- a/es-app/src/CollectionSystemManager.h +++ b/es-app/src/CollectionSystemManager.h @@ -103,6 +103,8 @@ class CollectionSystemManager std::vector getCollectionThemeFolders(bool custom); std::vector getUserCollectionThemeFolders(); + void trimCollectionCount(FileData* rootFolder, int limit); + bool themeFolderExists(std::string folder); bool includeFileInAutoCollections(FileData* file); From b73d38a7813d1a498f74bef609411518c1468e01 Mon Sep 17 00:00:00 2001 From: pjft Date: Fri, 2 Mar 2018 10:07:58 +0000 Subject: [PATCH 259/603] Fixing common path detection --- es-core/src/utils/FileSystemUtil.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 3cbb20a1ff..fbff551456 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -454,7 +454,7 @@ namespace Utils std::string common = isDirectory(_common) ? getGenericPath(_common) : getParent(_common); // check if path contains common - if(path.find_first_of(common) == 0) + if(path.find(common) == 0) { _contains = true; return path.substr(common.length() + 1); From c80d30493b038e8876842c6621e85fe3d8746eba Mon Sep 17 00:00:00 2001 From: pjft Date: Fri, 1 Dec 2017 19:28:45 +0000 Subject: [PATCH 260/603] Fix empty collections not showing up in Carousel for Full mode Also fixed empty favorites collection in Kiosk mode not initializing as intended after adding the first game, if empty at start. --- es-app/src/SystemData.cpp | 12 ++++++++++-- es-app/src/SystemData.h | 4 +++- es-app/src/views/SystemView.cpp | 2 +- es-app/src/views/ViewController.cpp | 2 ++ es-app/src/views/gamelist/BasicGameListView.cpp | 4 ++-- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 1ecc274b70..937c1f43aa 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -9,6 +9,7 @@ #include "platform.h" #include "Settings.h" #include "ThemeData.h" +#include "views/UIModeController.h" #include #include #ifdef WIN32 @@ -340,6 +341,13 @@ std::string SystemData::getConfigPath(bool forWrite) return "/etc/emulationstation/es_systems.cfg"; } +bool SystemData::isVisible() +{ + return (getDisplayedGameCount() > 0 || + (UIModeController::getInstance()->isUIModeFull() && mIsCollectionSystem) || + (mIsCollectionSystem && mName == "favorites")); +} + SystemData* SystemData::getNext() const { std::vector::const_iterator it = getIterator(); @@ -348,7 +356,7 @@ SystemData* SystemData::getNext() const it++; if (it == sSystemVector.cend()) it = sSystemVector.cbegin(); - } while ((*it)->getDisplayedGameCount() == 0); + } while (!(*it)->isVisible()); // as we are starting in a valid gamelistview, this will always succeed, even if we have to come full circle. return *it; @@ -362,7 +370,7 @@ SystemData* SystemData::getPrev() const it++; if (it == sSystemVector.crend()) it = sSystemVector.crbegin(); - } while ((*it)->getDisplayedGameCount() == 0); + } while (!(*it)->isVisible()); // as we are starting in a valid gamelistview, this will always succeed, even if we have to come full circle. return *it; diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index 24597cd540..ad0456b3c4 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -55,7 +55,9 @@ class SystemData inline std::vector::const_iterator getIterator() const { return std::find(sSystemVector.cbegin(), sSystemVector.cend(), this); }; inline std::vector::const_reverse_iterator getRevIterator() const { return std::find(sSystemVector.crbegin(), sSystemVector.crend(), this); }; inline bool isCollection() { return mIsCollectionSystem; }; - inline bool isGameSystem() { return mIsGameSystem; } + inline bool isGameSystem() { return mIsGameSystem; }; + + bool isVisible(); SystemData* getNext() const; SystemData* getPrev() const; diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index dd5fdfcd6e..fe850d566a 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -37,7 +37,7 @@ void SystemView::populate() if(mViewNeedsReload) getViewElements(theme); - if((*it)->getDisplayedGameCount() > 0) + if((*it)->isVisible()) { Entry e; e.name = (*it)->getName(); diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 0647f91937..c002b6e305 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -270,6 +270,7 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste if(exists != mGameListViews.cend()) return exists->second; + system->getIndex()->setUIModeFilters(); //if we didn't, make it, remember it, and return it std::shared_ptr view; @@ -442,6 +443,7 @@ void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) if(reloadTheme) system->loadTheme(); + system->getIndex()->setUIModeFilters(); std::shared_ptr newView = getGameListView(system); // to counter having come from a placeholder diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 4e479f317f..9d2a96b577 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -111,13 +111,13 @@ void BasicGameListView::remove(FileData *game, bool deleteFile) { std::vector siblings = parent->getChildrenListToDisplay(); auto gameIter = std::find(siblings.cbegin(), siblings.cend(), game); - int gamePos = (int)std::distance(siblings.cbegin(), gameIter); + unsigned int gamePos = (int)std::distance(siblings.cbegin(), gameIter); if (gameIter != siblings.cend()) { if ((gamePos + 1) < siblings.size()) { setCursor(siblings.at(gamePos + 1)); - } else if ((gamePos - 1) > 0) { + } else if (gamePos > 1) { setCursor(siblings.at(gamePos - 1)); } } From 25f31d154c3c12a5d7c6fa09893bd0f2b541ddea Mon Sep 17 00:00:00 2001 From: pjft Date: Fri, 9 Mar 2018 16:41:55 +0000 Subject: [PATCH 261/603] Fix crash when scraping folders --- es-app/src/CollectionSystemManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index e10a9784dd..b359dc45a0 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -221,7 +221,7 @@ void CollectionSystemManager::updateSystemsList() // updates all collection files related to the source file void CollectionSystemManager::refreshCollectionSystems(FileData* file) { - if (!file->getSystem()->isGameSystem()) + if (!file->getSystem()->isGameSystem() || file->getType() != GAME) return; std::map allCollections; From f6649ec0704cddb3e0480ac2c5fd292dec987f67 Mon Sep 17 00:00:00 2001 From: pjft Date: Fri, 9 Mar 2018 17:06:39 +0000 Subject: [PATCH 262/603] Fixing path generation on the Pi for getDirContents --- es-core/src/utils/FileSystemUtil.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 3cbb20a1ff..0cf054314c 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -88,7 +88,7 @@ namespace Utils // ignore "." and ".." if((name != ".") && (name != "..")) { - std::string fullName(path + "/" + name); + std::string fullName(getGenericPath(path + "/" + name)); contentList.push_back(fullName); if(_recursive && isDirectory(fullName)) From a585c00744e5b7256a651a59b306a1acec8467c3 Mon Sep 17 00:00:00 2001 From: pjft Date: Thu, 15 Mar 2018 20:46:09 +0000 Subject: [PATCH 263/603] Fix crash when changing theme from within a collection that'll no longer be present at the carousel level --- es-app/src/guis/GuiMenu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 86fd9538bc..b81fe8119e 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -261,6 +261,7 @@ void GuiMenu::openUISettings() if(needReload) { CollectionSystemManager::get()->updateSystemsList(); + ViewController::get()->goToStart(); ViewController::get()->reloadAll(); // TODO - replace this with some sort of signal-based implementation } }); From 41729f8cb8e8be12dcf9461704ee618a2ecd6004 Mon Sep 17 00:00:00 2001 From: Koerty Date: Fri, 23 Mar 2018 10:25:33 +0100 Subject: [PATCH 264/603] Rename gridSize to gridDimension in ImageGridComponent.h --- es-core/src/components/ImageGridComponent.h | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 440062c97e..e2c183e8ac 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -74,11 +74,11 @@ class ImageGridComponent : public IList return squareSize; }; - Vector2i getGridSize() const + Vector2i getGridDimension() const { Vector2f squareSize = getMaxSquareSize(); - Vector2i gridSize((int)(mSize.x() / (squareSize.x() + getPadding().x())), (int)(mSize.y() / (squareSize.y() + getPadding().y()))); - return gridSize; + Vector2i gridDimension((int)(mSize.x() / (squareSize.x() + getPadding().x())), (int)(mSize.y() / (squareSize.y() + getPadding().y()))); + return gridDimension; }; Vector2f getPadding() const { return Vector2f(24, 24); } @@ -127,7 +127,7 @@ bool ImageGridComponent::input(InputConfig* config, Input input) if(dir != Vector2i::Zero()) { - listInput(dir.x() + dir.y() * getGridSize().x()); + listInput(dir.x() + dir.y() * getGridDimension().x()); return true; } }else{ @@ -185,21 +185,21 @@ void ImageGridComponent::buildImages() { mImages.clear(); - Vector2i gridSize = getGridSize(); + Vector2i gridDimension = getGridDimension(); Vector2f squareSize = getMaxSquareSize(); Vector2f padding = getPadding(); // attempt to center within our size - Vector2f totalSize(gridSize.x() * (squareSize.x() + padding.x()), gridSize.y() * (squareSize.y() + padding.y())); + Vector2f totalSize(gridDimension.x() * (squareSize.x() + padding.x()), gridDimension.y() * (squareSize.y() + padding.y())); Vector2f offset(mSize.x() - totalSize.x(), mSize.y() - totalSize.y()); offset /= 2; - for(int y = 0; y < gridSize.y(); y++) + for(int y = 0; y < gridDimension.y(); y++) { - for(int x = 0; x < gridSize.x(); x++) + for(int x = 0; x < gridDimension.x(); x++) { mImages.push_back(ImageComponent(mWindow)); - ImageComponent& image = mImages.at(y * gridSize.x() + x); + ImageComponent& image = mImages.at(y * gridDimension.x() + x); image.setPosition((squareSize.x() + padding.x()) * (x + 0.5f) + offset.x(), (squareSize.y() + padding.y()) * (y + 0.5f) + offset.y()); image.setOrigin(0.5f, 0.5f); @@ -215,15 +215,15 @@ void ImageGridComponent::updateImages() if(mImages.empty()) buildImages(); - Vector2i gridSize = getGridSize(); + Vector2i gridDimension = getGridDimension(); - int cursorRow = mCursor / gridSize.x(); + int cursorRow = mCursor / gridDimension.x(); - int start = (cursorRow - (gridSize.y() / 2)) * gridSize.x(); + int start = (cursorRow - (gridDimension.y() / 2)) * gridDimension.x(); //if we're at the end put the row as close as we can and no higher - if(start + (gridSize.x() * gridSize.y()) >= (int)mEntries.size()) - start = gridSize.x() * ((int)mEntries.size()/gridSize.x() - gridSize.y() + 1); + if(start + (gridDimension.x() * gridDimension.y()) >= (int)mEntries.size()) + start = gridDimension.x() * ((int)mEntries.size()/gridDimension.x() - gridDimension.y() + 1); if(start < 0) start = 0; From 715ac69445ae5efd566f8fd15913b8276f99504e Mon Sep 17 00:00:00 2001 From: Koerty Date: Fri, 23 Mar 2018 10:54:46 +0100 Subject: [PATCH 265/603] Add automatically generated Clion files to gitignore --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 0686c4180e..5e12a9493c 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,8 @@ Makefile .cproject .project .settings/ + +# Clion +.idea/ +*.cmake +*.cbp From 565b519693cd486a276aee5691ce6246755a21c1 Mon Sep 17 00:00:00 2001 From: Jacob Mullins Date: Sun, 25 Mar 2018 12:33:23 -0400 Subject: [PATCH 266/603] Fixed a quirk in the Clion PR @Koerty accidentally excluded all .cmake files instead of the specific files that Clion generated, and was getting in my way of developing a new feature... So, I fixed it. --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5e12a9493c..4055d624e6 100644 --- a/.gitignore +++ b/.gitignore @@ -37,5 +37,6 @@ Makefile # Clion .idea/ -*.cmake +CPackConfig.cmake +CPackSourceConfig.cmake *.cbp From b4feb6998070d7d8429a4b5924e15547680188aa Mon Sep 17 00:00:00 2001 From: Koerty Date: Thu, 22 Mar 2018 08:03:12 +0100 Subject: [PATCH 267/603] Enable the grid view for developers - Add the remove function to GridGameListView - Enable the grid view in ViewController - The grid view will not be available in the menu yet, but can be enable by tweaking es_settings.cfg --- es-app/src/guis/GuiMenu.cpp | 5 +++ es-app/src/views/ViewController.cpp | 9 +++-- es-app/src/views/ViewController.h | 2 +- .../src/views/gamelist/GridGameListView.cpp | 37 +++++++++++++++++++ es-app/src/views/gamelist/GridGameListView.h | 2 + es-core/src/ThemeData.cpp | 2 +- 6 files changed, 52 insertions(+), 5 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 86fd9538bc..52aee19aec 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -273,6 +273,11 @@ void GuiMenu::openUISettings() styles.push_back("basic"); styles.push_back("detailed"); styles.push_back("video"); + + // Temporary "hack" so ES don't crash when leaving this menu after he enabled the grid by tweaking config file + if (Settings::getInstance()->getString("GamelistViewStyle") == "grid") + styles.push_back("grid"); + for (auto it = styles.cbegin(); it != styles.cend(); it++) gamelist_style->add(*it, *it, Settings::getInstance()->getString("GamelistViewStyle") == *it); s->addWithLabel("GAMELIST VIEW STYLE", gamelist_style); diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 0647f91937..44aeee195b 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -7,6 +7,7 @@ #include "guis/GuiMenu.h" #include "views/gamelist/DetailedGameListView.h" #include "views/gamelist/IGameListView.h" +#include "views/gamelist/GridGameListView.h" #include "views/gamelist/VideoGameListView.h" #include "views/SystemView.h" #include "views/UIModeController.h" @@ -283,6 +284,8 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste selectedViewType = BASIC; if (viewPreference.compare("detailed") == 0) selectedViewType = DETAILED; + if (viewPreference.compare("grid") == 0) + selectedViewType = GRID; if (viewPreference.compare("video") == 0) selectedViewType = VIDEO; @@ -313,9 +316,9 @@ std::shared_ptr ViewController::getGameListView(SystemData* syste case DETAILED: view = std::shared_ptr(new DetailedGameListView(mWindow, system->getRootFolder())); break; - // case GRID placeholder for future implementation. - // view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); - // break; + case GRID: + view = std::shared_ptr(new GridGameListView(mWindow, system->getRootFolder())); + break; case BASIC: default: view = std::shared_ptr(new BasicGameListView(mWindow, system->getRootFolder())); diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 10210ee7cf..eec5e9fdb1 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -61,8 +61,8 @@ class ViewController : public GuiComponent AUTOMATIC, BASIC, DETAILED, + GRID, VIDEO - // GRID TODO! }; struct State diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 82a916f3e4..b7fa1d0325 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -1,6 +1,7 @@ #include "views/gamelist/GridGameListView.h" #include "views/ViewController.h" +#include "SystemData.h" GridGameListView::GridGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), mGrid(window) @@ -43,11 +44,47 @@ void GridGameListView::populateList(const std::vector& files) } } +void GridGameListView::addPlaceholder() +{ + // empty grid - add a placeholder + FileData* placeholder = new FileData(PLACEHOLDER, "", this->mRoot->getSystem()->getSystemEnvData(), this->mRoot->getSystem()); + mGrid.add(placeholder->getName(), "", placeholder); +} + void GridGameListView::launch(FileData* game) { ViewController::get()->launch(game); } +void GridGameListView::remove(FileData *game, bool deleteFile) +{ + if (deleteFile) + Utils::FileSystem::removeFile(game->getPath()); // actually delete the file on the filesystem + FileData* parent = game->getParent(); + if (getCursor() == game) // Select next element in list, or prev if none + { + std::vector siblings = parent->getChildrenListToDisplay(); + auto gameIter = std::find(siblings.cbegin(), siblings.cend(), game); + int gamePos = (int)std::distance(siblings.cbegin(), gameIter); + if (gameIter != siblings.cend()) + { + if ((gamePos + 1) < siblings.size()) + { + setCursor(siblings.at(gamePos + 1)); + } else if ((gamePos - 1) > 0) { + setCursor(siblings.at(gamePos - 1)); + } + } + } + mGrid.remove(game); + if(mGrid.size() == 0) + { + addPlaceholder(); + } + delete game; // remove before repopulating (removes from parent) + onFileChanged(parent, FILE_REMOVED); // update the view, with game removed +} + std::vector GridGameListView::getHelpPrompts() { std::vector prompts; diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index b5072cdfe7..a6ded90280 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -24,6 +24,8 @@ class GridGameListView : public ISimpleGameListView protected: virtual void populateList(const std::vector& files) override; + virtual void remove(FileData* game, bool deleteFile) override; + virtual void addPlaceholder(); ImageGridComponent mGrid; }; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 63dc72b238..5ce54cf9a4 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -9,7 +9,7 @@ #include #include -std::vector ThemeData::sSupportedViews { { "system" }, { "basic" }, { "detailed" }, { "video" } }; +std::vector ThemeData::sSupportedViews { { "system" }, { "basic" }, { "detailed" }, { "grid" }, { "video" } }; std::vector ThemeData::sSupportedFeatures { { "video" }, { "carousel" }, { "z-index" } }; std::map> ThemeData::sElementMap { From 63f4806ac575f0dce0a388c10a1363b23d9ff72b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1ty=C3=A1s=20Mustoha?= Date: Wed, 28 Mar 2018 09:31:10 +0200 Subject: [PATCH 268/603] Remove leftover debug code --- es-app/src/SystemData.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 1ecc274b70..2a709f206e 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -79,8 +79,6 @@ void SystemData::populateFolder(FileData* folder) //make sure that this isn't a symlink to a thing we already have if(Utils::FileSystem::isSymlink(folderPath)) { - Utils::FileSystem::getCanonicalPath("/RetroGames/roms/nes/garbage/../smurf.nes"); - //if this symlink resolves to somewhere that's at the beginning of our path, it's gonna recurse if(folderPath.find(Utils::FileSystem::getCanonicalPath(folderPath)) == 0) { From a7c0d92766c05bd34e4bde8ff30e4c2c85fce1b8 Mon Sep 17 00:00:00 2001 From: Koerty Date: Thu, 22 Mar 2018 10:22:32 +0100 Subject: [PATCH 269/603] Use shoulder buttons for quick system swap in the grid view - Allow quick system swap using left/right shoulder in the grid view - Update the help prompt of the grid view accordingly --- es-app/src/views/gamelist/BasicGameListView.cpp | 10 ++++++++++ es-app/src/views/gamelist/BasicGameListView.h | 2 ++ es-app/src/views/gamelist/GridGameListView.cpp | 17 +++++++++++++++++ es-app/src/views/gamelist/GridGameListView.h | 2 ++ .../src/views/gamelist/ISimpleGameListView.cpp | 4 ++-- es-app/src/views/gamelist/ISimpleGameListView.h | 2 ++ 6 files changed, 35 insertions(+), 2 deletions(-) diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 4e479f317f..a4d0d9d341 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -97,6 +97,16 @@ void BasicGameListView::addPlaceholder() mList.add(placeholder->getName(), placeholder, (placeholder->getType() == PLACEHOLDER)); } +std::string BasicGameListView::getQuickSystemSelectRightButton() +{ + return "right"; +} + +std::string BasicGameListView::getQuickSystemSelectLeftButton() +{ + return "left"; +} + void BasicGameListView::launch(FileData* game) { ViewController::get()->launch(game); diff --git a/es-app/src/views/gamelist/BasicGameListView.h b/es-app/src/views/gamelist/BasicGameListView.h index fe16b96367..f1a216b0f5 100644 --- a/es-app/src/views/gamelist/BasicGameListView.h +++ b/es-app/src/views/gamelist/BasicGameListView.h @@ -24,6 +24,8 @@ class BasicGameListView : public ISimpleGameListView virtual void launch(FileData* game) override; protected: + virtual std::string getQuickSystemSelectRightButton() override; + virtual std::string getQuickSystemSelectLeftButton() override; virtual void populateList(const std::vector& files) override; virtual void remove(FileData* game, bool deleteFile) override; virtual void addPlaceholder(); diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index b7fa1d0325..6226158f35 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -1,6 +1,7 @@ #include "views/gamelist/GridGameListView.h" #include "views/ViewController.h" +#include "Settings.h" #include "SystemData.h" GridGameListView::GridGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), @@ -27,6 +28,16 @@ void GridGameListView::setCursor(FileData* file) } } +std::string GridGameListView::getQuickSystemSelectRightButton() +{ + return "pagedown"; //rightshoulder +} + +std::string GridGameListView::getQuickSystemSelectLeftButton() +{ + return "pageup"; //leftshoulder +} + bool GridGameListView::input(InputConfig* config, Input input) { if(config->isMappedTo("left", input) || config->isMappedTo("right", input)) @@ -88,6 +99,12 @@ void GridGameListView::remove(FileData *game, bool deleteFile) std::vector GridGameListView::getHelpPrompts() { std::vector prompts; + + if(Settings::getInstance()->getBool("QuickSystemSelect")) + { + prompts.push_back(HelpPrompt("l", "system")); + prompts.push_back(HelpPrompt("r", "system")); + } prompts.push_back(HelpPrompt("up/down/left/right", "scroll")); prompts.push_back(HelpPrompt("a", "launch")); prompts.push_back(HelpPrompt("b", "back")); diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index a6ded90280..0fb7fc1458 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -23,6 +23,8 @@ class GridGameListView : public ISimpleGameListView virtual void launch(FileData* game) override; protected: + virtual std::string getQuickSystemSelectRightButton() override; + virtual std::string getQuickSystemSelectLeftButton() override; virtual void populateList(const std::vector& files) override; virtual void remove(FileData* game, bool deleteFile) override; virtual void addPlaceholder(); diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 860eda0ba2..fb123f1f55 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -118,7 +118,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) } return true; - }else if(config->isMappedTo("right", input)) + }else if(config->isMappedTo(getQuickSystemSelectRightButton(), input)) { if(Settings::getInstance()->getBool("QuickSystemSelect")) { @@ -126,7 +126,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) ViewController::get()->goToNextGameList(); return true; } - }else if(config->isMappedTo("left", input)) + }else if(config->isMappedTo(getQuickSystemSelectLeftButton(), input)) { if(Settings::getInstance()->getBool("QuickSystemSelect")) { diff --git a/es-app/src/views/gamelist/ISimpleGameListView.h b/es-app/src/views/gamelist/ISimpleGameListView.h index f2d83b748e..f161eadd06 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.h +++ b/es-app/src/views/gamelist/ISimpleGameListView.h @@ -28,6 +28,8 @@ class ISimpleGameListView : public IGameListView virtual void launch(FileData* game) = 0; protected: + virtual std::string getQuickSystemSelectRightButton() = 0; + virtual std::string getQuickSystemSelectLeftButton() = 0; virtual void populateList(const std::vector& files) = 0; TextComponent mHeaderText; From 8d9c4a20eca1c5adee0bd4b55b6e0f9d219ab4bd Mon Sep 17 00:00:00 2001 From: Koerty Date: Thu, 22 Mar 2018 08:03:12 +0100 Subject: [PATCH 270/603] Rewrite the grid display code - Grid tile number of columns and rows is now controlled by the grid size, mMargin and mTileMaxSize - Add a variable mSelectedTileMaxSize to control the size of the selected tile - Update the render function to display the selected tile on top of the other --- .../src/views/gamelist/GridGameListView.cpp | 4 +- es-core/src/components/ImageGridComponent.h | 105 +++++++++--------- 2 files changed, 54 insertions(+), 55 deletions(-) diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index b7fa1d0325..915ce76956 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -6,8 +6,8 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), mGrid(window) { - mGrid.setPosition(0, mSize.y() * 0.2f); - mGrid.setSize(mSize.x(), mSize.y() * 0.8f); + mGrid.setPosition(mSize.x() * 0.1f, mSize.y() * 0.1f); +// mGrid.setSize(mSize.x(), mSize.y() * 0.8f); addChild(&mGrid); populateList(root->getChildrenListToDisplay()); diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index e2c183e8ac..95aed4bbf6 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -40,49 +40,15 @@ class ImageGridComponent : public IList void render(const Transform4x4f& parentTrans) override; private: - Vector2f getSquareSize(std::shared_ptr tex = nullptr) const - { - Vector2f aspect(1, 1); - - if(tex) - { - const Vector2i& texSize = tex->getSize(); - - if(texSize.x() > texSize.y()) - aspect[0] = (float)texSize.x() / texSize.y(); - else - aspect[1] = (float)texSize.y() / texSize.x(); - } - - return Vector2f(156 * aspect.x(), 156 * aspect.y()); - }; - - Vector2f getMaxSquareSize() const - { - Vector2f squareSize(32, 32); - - // calc biggest square size - for(auto it = mEntries.cbegin(); it != mEntries.cend(); it++) - { - Vector2f chkSize = getSquareSize(it->data.texture); - if(chkSize.x() > squareSize.x()) - squareSize[0] = chkSize[0]; - if(chkSize.y() > squareSize.y()) - squareSize[1] = chkSize[1]; - } - - return squareSize; - }; - + // Calculate how much tiles of size mTileMaxSize we can fit in a grid of size mSize using a margin of size mMargin Vector2i getGridDimension() const { - Vector2f squareSize = getMaxSquareSize(); - Vector2i gridDimension((int)(mSize.x() / (squareSize.x() + getPadding().x())), (int)(mSize.y() / (squareSize.y() + getPadding().y()))); - return gridDimension; + // GRID_SIZE = COLUMNS * TILE_SIZE + (COLUMNS - 1) * MARGIN + // <=> COLUMNS = (GRID_SIZE + MARGIN) / (TILE_SIZE + MARGIN) + return Vector2i((int) ((mSize.x() + mMargin.x()) / (mTileMaxSize.x() + mMargin.x())), + (int) ((mSize.y() + mMargin.y()) / (mTileMaxSize.y() + mMargin.y()))); }; - Vector2f getPadding() const { return Vector2f(24, 24); } - void buildImages(); void updateImages(); @@ -90,13 +56,24 @@ class ImageGridComponent : public IList bool mEntriesDirty; + Vector2f mMargin; + Vector2f mTileMaxSize; + Vector2f mSelectedTileMaxSize; + std::vector mImages; }; template ImageGridComponent::ImageGridComponent(Window* window) : IList(window) { + Vector2f screen = Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + mEntriesDirty = true; + + mSize = screen * 0.8f; + mMargin = screen * 0.01f; + mTileMaxSize = screen * 0.19f; + mSelectedTileMaxSize = mTileMaxSize + mMargin * 3.0f; } template @@ -158,11 +135,37 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) mEntriesDirty = false; } + // Dirty solution (took from updateImages function) to keep the selected image and render it later (on top of the others) + // Will be changed for a cleaner way with the introduction of GridTileComponent + Vector2i gridDimension = getGridDimension(); + + int cursorRow = mCursor / gridDimension.x(); + + int start = (cursorRow - (gridDimension.y() / 2)) * gridDimension.x(); + + //if we're at the end put the row as close as we can and no higher + if(start + (gridDimension.x() * gridDimension.y()) >= (int)mEntries.size()) + start = gridDimension.x() * ((int)mEntries.size()/gridDimension.x() - gridDimension.y() + 1); + + if(start < 0) + start = 0; + + unsigned int i = (unsigned int)start; + ImageComponent* selectedImage = NULL; for(auto it = mImages.begin(); it != mImages.end(); it++) { - it->render(trans); + // If it's the selected image, keep it for later, otherwise render it now + if(i == (unsigned int)mCursor) + selectedImage = it.base(); + else + it->render(trans); + i++; } + // Render the selected image on top of the others + if (selectedImage != NULL) + selectedImage->render(trans); + GuiComponent::renderChildren(trans); } @@ -179,31 +182,28 @@ void ImageGridComponent::onSizeChanged() updateImages(); } -// create and position imagecomponents (mImages) +// Create and position imagecomponents (mImages) template void ImageGridComponent::buildImages() { mImages.clear(); Vector2i gridDimension = getGridDimension(); - Vector2f squareSize = getMaxSquareSize(); - Vector2f padding = getPadding(); - - // attempt to center within our size - Vector2f totalSize(gridDimension.x() * (squareSize.x() + padding.x()), gridDimension.y() * (squareSize.y() + padding.y())); - Vector2f offset(mSize.x() - totalSize.x(), mSize.y() - totalSize.y()); - offset /= 2; + Vector2f startPosition = mTileMaxSize / 2; + Vector2f tileDistance = mTileMaxSize + mMargin; + // Layout tile size and position for(int y = 0; y < gridDimension.y(); y++) { for(int x = 0; x < gridDimension.x(); x++) { + // Create tiles mImages.push_back(ImageComponent(mWindow)); ImageComponent& image = mImages.at(y * gridDimension.x() + x); - image.setPosition((squareSize.x() + padding.x()) * (x + 0.5f) + offset.x(), (squareSize.y() + padding.y()) * (y + 0.5f) + offset.y()); + image.setPosition(x * tileDistance.x() + startPosition.x(), y * tileDistance.y() + startPosition.y()); image.setOrigin(0.5f, 0.5f); - image.setResize(squareSize.x(), squareSize.y()); + image.setMaxSize(mTileMaxSize); image.setImage(""); } } @@ -238,14 +238,13 @@ void ImageGridComponent::updateImages() continue; } - Vector2f squareSize = getSquareSize(mEntries.at(i).data.texture); if(i == (unsigned int)mCursor) { image.setColorShift(0xFFFFFFFF); - image.setResize(squareSize.x() + getPadding().x() * 0.95f, squareSize.y() + getPadding().y() * 0.95f); + image.setMaxSize(mSelectedTileMaxSize); }else{ image.setColorShift(0xAAAAAABB); - image.setResize(squareSize.x(), squareSize.y()); + image.setMaxSize(mTileMaxSize); } image.setImage(mEntries.at(i).data.texture); From 96b1f4b514211c4a017fc9c21c562cf6a1867fa7 Mon Sep 17 00:00:00 2001 From: Koerty Date: Sat, 31 Mar 2018 16:01:18 +0200 Subject: [PATCH 271/603] Small fix to the populateList function of the GridGameListView - Call the addPlaceholder function if grid is empty - Set the header text --- es-app/src/views/gamelist/GridGameListView.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 915ce76956..8fb6edf8b7 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -38,9 +38,17 @@ bool GridGameListView::input(InputConfig* config, Input input) void GridGameListView::populateList(const std::vector& files) { mGrid.clear(); - for(auto it = files.cbegin(); it != files.cend(); it++) + mHeaderText.setText(mRoot->getSystem()->getFullName()); + if (files.size() > 0) { - mGrid.add((*it)->getName(), (*it)->getThumbnailPath(), *it); + for (auto it = files.cbegin(); it != files.cend(); it++) + { + mGrid.add((*it)->getName(), (*it)->getThumbnailPath(), *it); + } + } + else + { + addPlaceholder(); } } From 87a9c7318a4c796a7eec746c501ba7163462f9be Mon Sep 17 00:00:00 2001 From: Koerty Date: Sun, 1 Apr 2018 17:18:12 +0200 Subject: [PATCH 272/603] Fix ImageComponent flipY --- es-core/src/components/ImageComponent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index aa82dce372..7dddba271b 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -223,7 +223,7 @@ void ImageComponent::updateVertices() } if(mFlipY) { - for(int i = 1; i < 6; i++) + for(int i = 0; i < 6; i++) mVertices[i].tex[1] = mVertices[i].tex[1] == py ? 0 : py; } } From c25eaab7fb5dc9168caa3deb1c24965f1977ec15 Mon Sep 17 00:00:00 2001 From: Koerty Date: Mon, 2 Apr 2018 15:28:33 +0200 Subject: [PATCH 273/603] Fix bad tile position when close to the last row and last row is full --- es-core/src/components/ImageGridComponent.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 95aed4bbf6..7cab9990ec 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -221,9 +221,13 @@ void ImageGridComponent::updateImages() int start = (cursorRow - (gridDimension.y() / 2)) * gridDimension.x(); - //if we're at the end put the row as close as we can and no higher + // If we are at the end put the row as close as we can and no higher, using the following formula + // Where E is the nb of entries, X the grid x dim (nb of column), Y the grid y dim (nb of line) + // start = first tile of last row - nb column * (nb line - 1) + // = (E - 1) / X * X - X * (Y - 1) + // = X * ((E - 1) / X - Y + 1) if(start + (gridDimension.x() * gridDimension.y()) >= (int)mEntries.size()) - start = gridDimension.x() * ((int)mEntries.size()/gridDimension.x() - gridDimension.y() + 1); + start = gridDimension.x() * (((int)mEntries.size() - 1) / gridDimension.x() - gridDimension.y() + 1); if(start < 0) start = 0; From 37a16fe3ed27b321a76011f155205afc2b02a8bc Mon Sep 17 00:00:00 2001 From: Koerty Date: Thu, 22 Mar 2018 10:22:32 +0100 Subject: [PATCH 274/603] Update the grid's help prompt - Add a left+right shoulder button icon - Update the outdated help prompt to match the one from the Basic view --- .../src/views/gamelist/GridGameListView.cpp | 16 +++-- es-core/src/components/HelpComponent.cpp | 1 + resources/help/button_lr.svg | 69 +++++++++++++++++++ 3 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 resources/help/button_lr.svg diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 27dfca0e93..4d979a5027 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -1,6 +1,8 @@ #include "views/gamelist/GridGameListView.h" +#include "views/UIModeController.h" #include "views/ViewController.h" +#include "CollectionSystemManager.h" #include "Settings.h" #include "SystemData.h" @@ -101,12 +103,16 @@ std::vector GridGameListView::getHelpPrompts() std::vector prompts; if(Settings::getInstance()->getBool("QuickSystemSelect")) - { - prompts.push_back(HelpPrompt("l", "system")); - prompts.push_back(HelpPrompt("r", "system")); - } - prompts.push_back(HelpPrompt("up/down/left/right", "scroll")); + prompts.push_back(HelpPrompt("lr", "system")); + prompts.push_back(HelpPrompt("up/down/left/right", "choose")); prompts.push_back(HelpPrompt("a", "launch")); prompts.push_back(HelpPrompt("b", "back")); + prompts.push_back(HelpPrompt("select", "options")); + prompts.push_back(HelpPrompt("x", "random")); + if(mRoot->getSystem()->isGameSystem() && !UIModeController::getInstance()->isUIModeKid()) + { + std::string prompt = CollectionSystemManager::get()->getEditingCollection(); + prompts.push_back(HelpPrompt("y", prompt)); + } return prompts; } diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index 55a97a37fa..93a0f937d4 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -24,6 +24,7 @@ static const std::map ICON_PATH_MAP { { "y", ":/help/button_y.svg" }, { "l", ":/help/button_l.svg" }, { "r", ":/help/button_r.svg" }, + { "lr", ":/help/button_lr.svg" }, { "start", ":/help/button_start.svg" }, { "select", ":/help/button_select.svg" } }; diff --git a/resources/help/button_lr.svg b/resources/help/button_lr.svg new file mode 100644 index 0000000000..0093848c47 --- /dev/null +++ b/resources/help/button_lr.svg @@ -0,0 +1,69 @@ + + + +image/svg+xml \ No newline at end of file From a006650c1c9eeb2b52aa45ed94c80c7c5b0dde4e Mon Sep 17 00:00:00 2001 From: Benjamin D Date: Thu, 22 Mar 2018 13:52:13 +0100 Subject: [PATCH 275/603] Add metadata from the detailed view to the grid view - Add the metadata from the detailed view to the grid view (minus the image, as it doesn't make sens in the grid view) - Add a callback to the ImageGridComponent to update the metadata info panel when cursor changed --- THEMES.md | 33 +++ .../src/views/gamelist/GridGameListView.cpp | 244 +++++++++++++++++- es-app/src/views/gamelist/GridGameListView.h | 28 +- es-core/src/components/ImageGridComponent.h | 9 +- 4 files changed, 310 insertions(+), 4 deletions(-) diff --git a/THEMES.md b/THEMES.md index 9f612d1992..ccb620bc88 100644 --- a/THEMES.md +++ b/THEMES.md @@ -472,6 +472,39 @@ Reference * `image name="logo"` - ALL - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. +* Metadata + * Labels + * `text name="md_lbl_rating"` - ALL + * `text name="md_lbl_releasedate"` - ALL + * `text name="md_lbl_developer"` - ALL + * `text name="md_lbl_publisher"` - ALL + * `text name="md_lbl_genre"` - ALL + * `text name="md_lbl_players"` - ALL + * `text name="md_lbl_lastplayed"` - ALL + * `text name="md_lbl_playcount"` - ALL + + * Values + * All values will follow to the right of their labels if a position isn't specified. + + * `rating name="md_rating"` - ALL + - The "rating" metadata. + * `datetime name="md_releasedate"` - ALL + - The "releasedate" metadata. + * `text name="md_developer"` - ALL + - The "developer" metadata. + * `text name="md_publisher"` - ALL + - The "publisher" metadata. + * `text name="md_genre"` - ALL + - The "genre" metadata. + * `text name="md_players"` - ALL + - The "players" metadata (number of players the game supports). + * `datetime name="md_lastplayed"` - ALL + - The "lastplayed" metadata. Displayed as a string representing the time relative to "now" (e.g. "3 hours ago"). + * `text name="md_playcount"` - ALL + - The "playcount" metadata (number of times the game has been played). + * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR | Z_INDEX + - Text is the "desc" metadata. If no `pos`/`size` is specified, will move and resize to fit under the lowest label and reach to the bottom of the screen. + --- #### system diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 9314905ddf..4c802959e4 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -1,19 +1,73 @@ #include "views/gamelist/GridGameListView.h" +#include "animations/LambdaAnimation.h" #include "views/UIModeController.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" #include "Settings.h" #include "SystemData.h" -GridGameListView::GridGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), - mGrid(window) +GridGameListView::GridGameListView(Window* window, FileData* root) : + ISimpleGameListView(window, root), + mGrid(window), + mDescContainer(window), mDescription(window), + + mLblRating(window), mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), + mLblGenre(window), mLblPlayers(window), mLblLastPlayed(window), mLblPlayCount(window), + + mRating(window), mReleaseDate(window), mDeveloper(window), mPublisher(window), + mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window) { + const float padding = 0.01f; + mGrid.setPosition(mSize.x() * 0.1f, mSize.y() * 0.1f); // mGrid.setSize(mSize.x(), mSize.y() * 0.8f); + mGrid.setCursorChangedCallback([&](const CursorState& /*state*/) { updateInfoPanel(); }); addChild(&mGrid); populateList(root->getChildrenListToDisplay()); + + // metadata labels + values + mLblRating.setText("Rating: "); + addChild(&mLblRating); + addChild(&mRating); + mLblReleaseDate.setText("Released: "); + addChild(&mLblReleaseDate); + addChild(&mReleaseDate); + mLblDeveloper.setText("Developer: "); + addChild(&mLblDeveloper); + addChild(&mDeveloper); + mLblPublisher.setText("Publisher: "); + addChild(&mLblPublisher); + addChild(&mPublisher); + mLblGenre.setText("Genre: "); + addChild(&mLblGenre); + addChild(&mGenre); + mLblPlayers.setText("Players: "); + addChild(&mLblPlayers); + addChild(&mPlayers); + mLblLastPlayed.setText("Last played: "); + addChild(&mLblLastPlayed); + mLastPlayed.setDisplayMode(DateTimeComponent::DISP_RELATIVE_TO_NOW); + addChild(&mLastPlayed); + mLblPlayCount.setText("Times played: "); + addChild(&mLblPlayCount); + addChild(&mPlayCount); + + mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.65f); + mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), mSize.y() - mDescContainer.getPosition().y()); + mDescContainer.setAutoScroll(true); + mDescContainer.setDefaultZIndex(40); + addChild(&mDescContainer); + + mDescription.setFont(Font::get(FONT_SIZE_SMALL)); + mDescription.setSize(mDescContainer.getSize().x(), 0); + mDescContainer.addChild(&mDescription); + + + initMDLabels(); + initMDValues(); + updateInfoPanel(); } FileData* GridGameListView::getCursor() @@ -65,6 +119,164 @@ void GridGameListView::populateList(const std::vector& files) } } +void GridGameListView::onThemeChanged(const std::shared_ptr& theme) +{ + ISimpleGameListView::onThemeChanged(theme); + + using namespace ThemeFlags; + + initMDLabels(); + std::vector labels = getMDLabels(); + assert(labels.size() == 8); + const char* lblElements[8] = { + "md_lbl_rating", "md_lbl_releasedate", "md_lbl_developer", "md_lbl_publisher", + "md_lbl_genre", "md_lbl_players", "md_lbl_lastplayed", "md_lbl_playcount" + }; + + for(unsigned int i = 0; i < labels.size(); i++) + { + labels[i]->applyTheme(theme, getName(), lblElements[i], ALL); + } + + + initMDValues(); + std::vector values = getMDValues(); + assert(values.size() == 8); + const char* valElements[8] = { + "md_rating", "md_releasedate", "md_developer", "md_publisher", + "md_genre", "md_players", "md_lastplayed", "md_playcount" + }; + + for(unsigned int i = 0; i < values.size(); i++) + { + values[i]->applyTheme(theme, getName(), valElements[i], ALL ^ ThemeFlags::TEXT); + } + + mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE | Z_INDEX); + mDescription.setSize(mDescContainer.getSize().x(), 0); + mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | ThemeFlags::ORIGIN | TEXT | ROTATION)); + + sortChildren(); +} + +void GridGameListView::initMDLabels() +{ + std::vector components = getMDLabels(); + + const unsigned int colCount = 2; + const unsigned int rowCount = (int)(components.size() / 2); + + Vector3f start(mSize.x() * 0.01f, mSize.y() * 0.625f, 0.0f); + + const float colSize = (mSize.x() * 0.48f) / colCount; + const float rowPadding = 0.01f * mSize.y(); + + for(unsigned int i = 0; i < components.size(); i++) + { + const unsigned int row = i % rowCount; + Vector3f pos(0.0f, 0.0f, 0.0f); + if(row == 0) + { + pos = start + Vector3f(colSize * (i / rowCount), 0, 0); + }else{ + // work from the last component + GuiComponent* lc = components[i-1]; + pos = lc->getPosition() + Vector3f(0, lc->getSize().y() + rowPadding, 0); + } + + components[i]->setFont(Font::get(FONT_SIZE_SMALL)); + components[i]->setPosition(pos); + components[i]->setDefaultZIndex(40); + } +} + +void GridGameListView::initMDValues() +{ + std::vector labels = getMDLabels(); + std::vector values = getMDValues(); + + std::shared_ptr defaultFont = Font::get(FONT_SIZE_SMALL); + mRating.setSize(defaultFont->getHeight() * 5.0f, (float)defaultFont->getHeight()); + mReleaseDate.setFont(defaultFont); + mDeveloper.setFont(defaultFont); + mPublisher.setFont(defaultFont); + mGenre.setFont(defaultFont); + mPlayers.setFont(defaultFont); + mLastPlayed.setFont(defaultFont); + mPlayCount.setFont(defaultFont); + + float bottom = 0.0f; + + const float colSize = (mSize.x() * 0.48f) / 2; + for(unsigned int i = 0; i < labels.size(); i++) + { + const float heightDiff = (labels[i]->getSize().y() - values[i]->getSize().y()) / 2; + values[i]->setPosition(labels[i]->getPosition() + Vector3f(labels[i]->getSize().x(), heightDiff, 0)); + values[i]->setSize(colSize - labels[i]->getSize().x(), values[i]->getSize().y()); + values[i]->setDefaultZIndex(40); + + float testBot = values[i]->getPosition().y() + values[i]->getSize().y(); + if(testBot > bottom) + bottom = testBot; + } + + mDescContainer.setPosition(mDescContainer.getPosition().x(), bottom + mSize.y() * 0.01f); + mDescContainer.setSize(mDescContainer.getSize().x(), mSize.y() - mDescContainer.getPosition().y()); +} + +void GridGameListView::updateInfoPanel() +{ + FileData* file = (mGrid.size() == 0 || mGrid.isScrolling()) ? NULL : mGrid.getSelected(); + + bool fadingOut; + if(file == NULL) + { + //mDescription.setText(""); + fadingOut = true; + }else{ + mDescription.setText(file->metadata.get("desc")); + mDescContainer.reset(); + + mRating.setValue(file->metadata.get("rating")); + mReleaseDate.setValue(file->metadata.get("releasedate")); + mDeveloper.setValue(file->metadata.get("developer")); + mPublisher.setValue(file->metadata.get("publisher")); + mGenre.setValue(file->metadata.get("genre")); + mPlayers.setValue(file->metadata.get("players")); + + if(file->getType() == GAME) + { + mLastPlayed.setValue(file->metadata.get("lastplayed")); + mPlayCount.setValue(file->metadata.get("playcount")); + } + + fadingOut = false; + } + + std::vector comps = getMDValues(); + comps.push_back(&mDescription); + std::vector labels = getMDLabels(); + comps.insert(comps.cend(), labels.cbegin(), labels.cend()); + + for(auto it = comps.cbegin(); it != comps.cend(); it++) + { + GuiComponent* comp = *it; + // an animation is playing + // then animate if reverse != fadingOut + // an animation is not playing + // then animate if opacity != our target opacity + if((comp->isAnimationPlaying(0) && comp->isAnimationReversed(0) != fadingOut) || + (!comp->isAnimationPlaying(0) && comp->getOpacity() != (fadingOut ? 0 : 255))) + { + auto func = [comp](float t) + { + comp->setOpacity((unsigned char)(Math::lerp(0.0f, 1.0f, t)*255)); + }; + comp->setAnimation(new LambdaAnimation(func, 150), 0, nullptr, fadingOut); + } + } +} + void GridGameListView::addPlaceholder() { // empty grid - add a placeholder @@ -106,6 +318,34 @@ void GridGameListView::remove(FileData *game, bool deleteFile) onFileChanged(parent, FILE_REMOVED); // update the view, with game removed } +std::vector GridGameListView::getMDLabels() +{ + std::vector ret; + ret.push_back(&mLblRating); + ret.push_back(&mLblReleaseDate); + ret.push_back(&mLblDeveloper); + ret.push_back(&mLblPublisher); + ret.push_back(&mLblGenre); + ret.push_back(&mLblPlayers); + ret.push_back(&mLblLastPlayed); + ret.push_back(&mLblPlayCount); + return ret; +} + +std::vector GridGameListView::getMDValues() +{ + std::vector ret; + ret.push_back(&mRating); + ret.push_back(&mReleaseDate); + ret.push_back(&mDeveloper); + ret.push_back(&mPublisher); + ret.push_back(&mGenre); + ret.push_back(&mPlayers); + ret.push_back(&mLastPlayed); + ret.push_back(&mPlayCount); + return ret; +} + std::vector GridGameListView::getHelpPrompts() { std::vector prompts; diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index 0fb7fc1458..7fd8b5f2fc 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -2,6 +2,9 @@ #ifndef ES_APP_VIEWS_GAME_LIST_GRID_GAME_LIST_VIEW_H #define ES_APP_VIEWS_GAME_LIST_GRID_GAME_LIST_VIEW_H +#include "components/DateTimeComponent.h" +#include "components/RatingComponent.h" +#include "components/ScrollableContainer.h" #include "components/ImageGridComponent.h" #include "views/gamelist/ISimpleGameListView.h" @@ -10,7 +13,7 @@ class GridGameListView : public ISimpleGameListView public: GridGameListView(Window* window, FileData* root); - //virtual void onThemeChanged(const std::shared_ptr& theme) override; + virtual void onThemeChanged(const std::shared_ptr& theme) override; virtual FileData* getCursor() override; virtual void setCursor(FileData*) override; @@ -30,6 +33,29 @@ class GridGameListView : public ISimpleGameListView virtual void addPlaceholder(); ImageGridComponent mGrid; + +private: + void updateInfoPanel(); + + void initMDLabels(); + void initMDValues(); + + TextComponent mLblRating, mLblReleaseDate, mLblDeveloper, mLblPublisher, mLblGenre, mLblPlayers, mLblLastPlayed, mLblPlayCount; + + RatingComponent mRating; + DateTimeComponent mReleaseDate; + TextComponent mDeveloper; + TextComponent mPublisher; + TextComponent mGenre; + TextComponent mPlayers; + DateTimeComponent mLastPlayed; + TextComponent mPlayCount; + + std::vector getMDLabels(); + std::vector getMDValues(); + + ScrollableContainer mDescContainer; + TextComponent mDescription; }; #endif // ES_APP_VIEWS_GAME_LIST_GRID_GAME_LIST_VIEW_H diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 95aed4bbf6..6acdb1073c 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -39,6 +39,8 @@ class ImageGridComponent : public IList void update(int deltaTime) override; void render(const Transform4x4f& parentTrans) override; + inline void setCursorChangedCallback(const std::function& func) { mCursorChangedCallback = func; } + private: // Calculate how much tiles of size mTileMaxSize we can fit in a grid of size mSize using a margin of size mMargin Vector2i getGridDimension() const @@ -54,6 +56,8 @@ class ImageGridComponent : public IList virtual void onCursorChanged(const CursorState& state); + std::function mCursorChangedCallback; + bool mEntriesDirty; Vector2f mMargin; @@ -170,9 +174,12 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) } template -void ImageGridComponent::onCursorChanged(const CursorState& /*state*/) +void ImageGridComponent::onCursorChanged(const CursorState& state) { updateImages(); + + if(mCursorChangedCallback) + mCursorChangedCallback(state); } template From 82e5c21da685d20c205f620212b2d5a20e11d8ab Mon Sep 17 00:00:00 2001 From: Koerty Date: Sat, 31 Mar 2018 15:59:14 +0200 Subject: [PATCH 276/603] Add base theming syntax for the grid - The themes can now configure following elements : pos, size - Change some default values for them --- THEMES.md | 12 ++++++++++-- es-app/src/views/gamelist/GridGameListView.cpp | 3 ++- es-core/src/ThemeData.cpp | 3 +++ es-core/src/components/ImageGridComponent.h | 11 +++++++++-- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/THEMES.md b/THEMES.md index ccb620bc88..5bd183f566 100644 --- a/THEMES.md +++ b/THEMES.md @@ -277,7 +277,7 @@ You can now change the order in which elements are rendered by setting `zIndex` * `carousel name="systemcarousel"` - 40 * `text name="systemInfo"` - 50 -##### basic, detailed, video +##### basic, detailed, grid, video * `image name="background"` - 0 * Extra Elements `extra="true"` - 10 * `textlist name="gamelist"` - 20 @@ -471,6 +471,8 @@ Reference - Displays the name of the system. Only present if no "logo" image is specified. Displayed at the top of the screen, centered by default. * `image name="logo"` - ALL - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. +* `imagegrid name="gamegrid"` - ALL + - The gamegrid. * Metadata * Labels @@ -564,7 +566,13 @@ Can be created as an extra. - Multiply each pixel's color by this color. For example, an all-white image with `FF0000` would become completely red. You can also control the transparency of an image with `FFFFFFAA` - keeping all the pixels their normal color and only affecting the alpha channel. * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. - + +#### imagegrid + +* `pos` - type: NORMALIZED_PAIR. +* `size` - type: NORMALIZED_PAIR. + - The size of the grid. Take care the selected tile can go out of the grid size, so don't position the grid too close to another element or the screen border. + #### video * `pos` - type: NORMALIZED_PAIR. diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 4c802959e4..a1496503f8 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -21,7 +21,6 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : const float padding = 0.01f; mGrid.setPosition(mSize.x() * 0.1f, mSize.y() * 0.1f); -// mGrid.setSize(mSize.x(), mSize.y() * 0.8f); mGrid.setCursorChangedCallback([&](const CursorState& /*state*/) { updateInfoPanel(); }); addChild(&mGrid); @@ -125,6 +124,8 @@ void GridGameListView::onThemeChanged(const std::shared_ptr& theme) using namespace ThemeFlags; + mGrid.applyTheme(theme, getName(), "gamegrid", ALL); + initMDLabels(); std::vector labels = getMDLabels(); assert(labels.size() == 8); diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 5ce54cf9a4..9df845a745 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -25,6 +25,9 @@ std::map> The { "tile", BOOLEAN }, { "color", COLOR }, { "zIndex", FLOAT } } }, + { "imagegrid", { + { "pos", NORMALIZED_PAIR }, + { "size", NORMALIZED_PAIR } } }, { "text", { { "pos", NORMALIZED_PAIR }, { "size", NORMALIZED_PAIR }, diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index e488a3be67..7cadd080e2 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -38,6 +38,7 @@ class ImageGridComponent : public IList bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Transform4x4f& parentTrans) override; + virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; inline void setCursorChangedCallback(const std::function& func) { mCursorChangedCallback = func; } @@ -74,10 +75,10 @@ ImageGridComponent::ImageGridComponent(Window* window) : IList @@ -173,6 +174,12 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) GuiComponent::renderChildren(trans); } +template +void ImageGridComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +{ + GuiComponent::applyTheme(theme, view, element, properties); +} + template void ImageGridComponent::onCursorChanged(const CursorState& state) { From 24c8a910e2c0c373b4f57806950dc59df8df5ccf Mon Sep 17 00:00:00 2001 From: Koerty Date: Sat, 7 Apr 2018 14:21:02 +0200 Subject: [PATCH 277/603] Disable random game selection in retropie settings menu --- es-app/src/views/gamelist/BasicGameListView.cpp | 3 ++- es-app/src/views/gamelist/GridGameListView.cpp | 3 ++- es-app/src/views/gamelist/ISimpleGameListView.cpp | 13 ++++++++----- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index a4d0d9d341..7adb8f8f27 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -151,7 +151,8 @@ std::vector BasicGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("a", "launch")); prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("select", "options")); - prompts.push_back(HelpPrompt("x", "random")); + if(mRoot->getSystem()->isGameSystem()) + prompts.push_back(HelpPrompt("x", "random")); if(mRoot->getSystem()->isGameSystem() && !UIModeController::getInstance()->isUIModeKid()) { std::string prompt = CollectionSystemManager::get()->getEditingCollection(); diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index a1496503f8..21dfc17c32 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -357,7 +357,8 @@ std::vector GridGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("a", "launch")); prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("select", "options")); - prompts.push_back(HelpPrompt("x", "random")); + if(mRoot->getSystem()->isGameSystem()) + prompts.push_back(HelpPrompt("x", "random")); if(mRoot->getSystem()->isGameSystem() && !UIModeController::getInstance()->isUIModeKid()) { std::string prompt = CollectionSystemManager::get()->getEditingCollection(); diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index fb123f1f55..45acb4caed 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -136,13 +136,16 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) } }else if (config->isMappedTo("x", input)) { - // go to random system game - FileData* randomGame = getCursor()->getSystem()->getRandomGame(); - if (randomGame) + if (mRoot->getSystem()->isGameSystem()) { - setCursor(randomGame); + // go to random system game + FileData* randomGame = getCursor()->getSystem()->getRandomGame(); + if (randomGame) + { + setCursor(randomGame); + } + return true; } - return true; }else if (config->isMappedTo("y", input) && !(UIModeController::getInstance()->isUIModeKid())) { if(mRoot->getSystem()->isGameSystem()) From 3993ace607afb714df66796dc817ab20ed33369f Mon Sep 17 00:00:00 2001 From: Koerty Date: Sat, 7 Apr 2018 21:23:10 +0200 Subject: [PATCH 278/603] Add GridTileComponent and base theming syntax - Add the GridTileComponent which hold the image and its background - Add base theming syntax for the ImageGrid and GridTIle - Numerous refactoring/cleaning in ImageGridComponent --- THEMES.md | 21 ++- .../src/views/gamelist/GridGameListView.cpp | 1 + es-core/CMakeLists.txt | 2 + es-core/src/ThemeData.cpp | 11 +- es-core/src/components/GridTileComponent.cpp | 153 ++++++++++++++++ es-core/src/components/GridTileComponent.h | 51 ++++++ es-core/src/components/ImageGridComponent.h | 172 ++++++++++-------- 7 files changed, 332 insertions(+), 79 deletions(-) create mode 100644 es-core/src/components/GridTileComponent.cpp create mode 100644 es-core/src/components/GridTileComponent.h diff --git a/THEMES.md b/THEMES.md index 5bd183f566..edc0ab3109 100644 --- a/THEMES.md +++ b/THEMES.md @@ -281,6 +281,7 @@ You can now change the order in which elements are rendered by setting `zIndex` * `image name="background"` - 0 * Extra Elements `extra="true"` - 10 * `textlist name="gamelist"` - 20 +* `imagegrid name="gamegrid"` - 20 * Media * `image name="md_image"` - 30 * `video name="md_video"` - 30 @@ -472,7 +473,11 @@ Reference * `image name="logo"` - ALL - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. * `imagegrid name="gamegrid"` - ALL - - The gamegrid. + - The gamegrid. The number of tile displayed is controlled by its size, margin and the default tile max size. +* `gridtile name="default"` - ALL + - Note that many of the default gridtile parameters change the selected gridtile parameters if they are not explicitly set by the theme. For example, changing the background image of the default gridtile also change the background image of the selected gridtile. Refer to the gridtile documentation for more informations. +* `gridtile name="selected"` - ALL + - See default gridtile description right above. * Metadata * Labels @@ -572,6 +577,20 @@ Can be created as an extra. * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. - The size of the grid. Take care the selected tile can go out of the grid size, so don't position the grid too close to another element or the screen border. +* `margin` - type: NORMALIZED_PAIR. + +#### gridtile + +* `size` - type: NORMALIZED_PAIR. + - The size of the default gridtile is used to calculate how many tiles can fit in the imagegrid. If not explicitly set, the size of the selected gridtile is equal the size of the default gridtile * 1.2 +* `padding` - type: NORMALIZED_PAIR. + - The padding around the gridtile content. Default `16 16`. If not explicitly set, the selected tile padding will be equal to the default tile padding. +* `backgroundImage` - type: PATH. + - If not explicitly set, the selected tile background image will be the same as the default tile background image. +* `imageColor` - type: COLOR. + - The default tile image color and selected tile image color have no influence on each others. +* `backgroundColor` - type: COLOR. + - The default tile background color and selected tile background color have no influence on each others. #### video diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index a1496503f8..e76f9d6716 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -21,6 +21,7 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : const float padding = 0.01f; mGrid.setPosition(mSize.x() * 0.1f, mSize.y() * 0.1f); + mGrid.setDefaultZIndex(20); mGrid.setCursorChangedCallback([&](const CursorState& /*state*/) { updateInfoPanel(); }); addChild(&mGrid); diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 0e367c7bfd..fb4dcbee88 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -33,6 +33,7 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GridTileComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageGridComponent.h @@ -106,6 +107,7 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GridTileComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/MenuComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/NinePatchComponent.cpp diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 9df845a745..6b39f3a35b 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -27,7 +27,14 @@ std::map> The { "zIndex", FLOAT } } }, { "imagegrid", { { "pos", NORMALIZED_PAIR }, - { "size", NORMALIZED_PAIR } } }, + { "size", NORMALIZED_PAIR }, + { "margin", NORMALIZED_PAIR } } }, + { "gridtile", { + { "size", NORMALIZED_PAIR }, + { "padding", NORMALIZED_PAIR }, + { "backgroundImage", PATH }, + { "imageColor", COLOR }, + { "backgroundColor", COLOR } } }, { "text", { { "pos", NORMALIZED_PAIR }, { "size", NORMALIZED_PAIR }, @@ -128,7 +135,7 @@ std::map> The }; #define MINIMUM_THEME_FORMAT_VERSION 3 -#define CURRENT_THEME_FORMAT_VERSION 5 +#define CURRENT_THEME_FORMAT_VERSION 6 // helper unsigned int getHexColor(const char* str) diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp new file mode 100644 index 0000000000..9e4f6f8103 --- /dev/null +++ b/es-core/src/components/GridTileComponent.cpp @@ -0,0 +1,153 @@ +#include "GridTileComponent.h" + +#include "resources/TextureResource.h" +#include "ThemeData.h" +#include "Renderer.h" + +GridTileComponent::GridTileComponent(Window* window) : GuiComponent(window), mBackground(window) +{ + mDefaultProperties.mSize = getDefaultTileSize(); + mDefaultProperties.mPadding = Vector2f(16.0f, 16.0f); + mDefaultProperties.mBackgroundImage = ":/frame.png"; + mDefaultProperties.mImageColor = 0xAAAAAABB; + mDefaultProperties.mBackgroundColor = 0xAAAAEEFF; + + mSelectedProperties.mSize = getSelectedTileSize(); + mSelectedProperties.mPadding = mDefaultProperties.mPadding; + mSelectedProperties.mBackgroundImage = mDefaultProperties.mBackgroundImage; + mSelectedProperties.mImageColor = 0xFFFFFFFF; + mSelectedProperties.mBackgroundColor = 0xFFFFFFFF; + + mImage = std::make_shared(mWindow); + mImage->setOrigin(0.5f, 0.5f); + + mBackground.setOrigin(0.5f, 0.5f); + + addChild(&mBackground); + addChild(&(*mImage)); + + setSelected(false); + setVisible(true); +} + +void GridTileComponent::render(const Transform4x4f& parentTrans) +{ + Transform4x4f trans = getTransform() * parentTrans; + + if (mVisible) + renderChildren(trans); +} + +// Update all the tile properties to the new status (selected or default) +void GridTileComponent::update() +{ + const GridTileProperties& currentProperties = getCurrentProperties(); + + mBackground.setImagePath(currentProperties.mBackgroundImage); + + mImage->setColorShift(currentProperties.mImageColor); + mBackground.setCenterColor(currentProperties.mBackgroundColor); + mBackground.setEdgeColor(currentProperties.mBackgroundColor); + + resize(); +} + +void GridTileComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +{ + Vector2f screen = Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + + const ThemeData::ThemeElement* elem = theme->getElement(view, "default", "gridtile"); + if (elem) + { + if (elem->has("size")) + mDefaultProperties.mSize = elem->get("size") * screen; + + if (elem->has("padding")) + mDefaultProperties.mPadding = elem->get("padding"); + + if (elem->has("backgroundImage")) + mDefaultProperties.mBackgroundImage = elem->get("backgroundImage"); + + if (elem->has("imageColor")) + mDefaultProperties.mImageColor = elem->get("imageColor"); + + if (elem->has("backgroundColor")) + mDefaultProperties.mBackgroundColor = elem->get("backgroundColor"); + } + + elem = theme->getElement(view, "selected", "gridtile"); + + mSelectedProperties.mSize = elem && elem->has("size") ? + elem->get("size") * screen : + getSelectedTileSize(); + + mSelectedProperties.mPadding = elem && elem->has("padding") ? + elem->get("padding") : + mDefaultProperties.mPadding; + + mSelectedProperties.mBackgroundImage = elem && elem->has("backgroundImage") ? + elem->get("backgroundImage") : + mDefaultProperties.mBackgroundImage; + + if (elem && elem->has("imageColor")) + mSelectedProperties.mImageColor = elem->get("imageColor"); + + if (elem && elem->has("backgroundColor")) + mSelectedProperties.mBackgroundColor = elem->get("backgroundColor"); +} + +// Made this a static function because the ImageGridComponent need to know the default tile size +// to calculate the grid dimension before it instantiate the GridTileComponents +Vector2f GridTileComponent::getDefaultTileSize() +{ + Vector2f screen = Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + + return screen * 0.22f; +} + +Vector2f GridTileComponent::getSelectedTileSize() const +{ + return mDefaultProperties.mSize * 1.2f; +} + +bool GridTileComponent::isSelected() const +{ + return mSelected; +} + +void GridTileComponent::setImage(const std::string& path) +{ + mImage->setImage(path); +} + +void GridTileComponent::setImage(const std::shared_ptr& texture) +{ + mImage->setImage(texture); + + // Resize now to prevent flickering images when scrolling + resize(); +} + +void GridTileComponent::setSelected(bool selected) +{ + mSelected = selected; +} + +void GridTileComponent::setVisible(bool visible) +{ + mVisible = visible; +} + +void GridTileComponent::resize() +{ + const GridTileProperties& currentProperties = getCurrentProperties(); + + mImage->setMaxSize(currentProperties.mSize - currentProperties.mPadding); + mBackground.fitTo(currentProperties.mSize - Vector2f(32.0f, 32.0f)); // (32f, 32f) the NinePatchComponent natural padding + mBackground.setPosition(getSize().x() / 2, getSize().y() / 2); +} + +const GridTileProperties& GridTileComponent::getCurrentProperties() const +{ + return mSelected ? mSelectedProperties : mDefaultProperties; +} \ No newline at end of file diff --git a/es-core/src/components/GridTileComponent.h b/es-core/src/components/GridTileComponent.h new file mode 100644 index 0000000000..cdee62624a --- /dev/null +++ b/es-core/src/components/GridTileComponent.h @@ -0,0 +1,51 @@ +#pragma once +#ifndef ES_CORE_COMPONENTS_GRID_TILE_COMPONENT_H +#define ES_CORE_COMPONENTS_GRID_TILE_COMPONENT_H + +#include "NinePatchComponent.h" +#include "ImageComponent.h" + +struct GridTileProperties +{ + Vector2f mSize; + Vector2f mPadding; + std::string mBackgroundImage; + unsigned int mImageColor; + unsigned int mBackgroundColor; +}; + +class GridTileComponent : public GuiComponent +{ +public: + GridTileComponent(Window* window); + + void render(const Transform4x4f& parentTrans) override; + void update(); + virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties); + + // Made this a static function because the ImageGridComponent need to know the default tile max size + // to calculate the grid dimension before it instantiate the GridTileComponents + static Vector2f getDefaultTileSize(); + Vector2f getSelectedTileSize() const; + bool isSelected() const; + + void setImage(const std::string& path); + void setImage(const std::shared_ptr& texture); + void setSelected(bool selected); + void setVisible(bool visible); + +private: + void resize(); + const GridTileProperties& getCurrentProperties() const; + + std::shared_ptr mImage; + NinePatchComponent mBackground; + + GridTileProperties mDefaultProperties; + GridTileProperties mSelectedProperties; + + bool mSelected; + bool mVisible; +}; + +#endif // ES_CORE_COMPONENTS_GRID_TILE_COMPONENT_H diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 7cadd080e2..68029eeece 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -4,6 +4,7 @@ #include "components/IList.h" #include "resources/TextureResource.h" +#include "GridTileComponent.h" struct ImageGridData { @@ -43,15 +44,17 @@ class ImageGridComponent : public IList inline void setCursorChangedCallback(const std::function& func) { mCursorChangedCallback = func; } private: - // Calculate how much tiles of size mTileMaxSize we can fit in a grid of size mSize using a margin of size mMargin - Vector2i getGridDimension() const + // Calculate how much tiles of size mTileSize we can fit in a grid of size mSize using a margin of size mMargin + void calcGridDimension() { - // GRID_SIZE = COLUMNS * TILE_SIZE + (COLUMNS - 1) * MARGIN - // <=> COLUMNS = (GRID_SIZE + MARGIN) / (TILE_SIZE + MARGIN) - return Vector2i((int) ((mSize.x() + mMargin.x()) / (mTileMaxSize.x() + mMargin.x())), - (int) ((mSize.y() + mMargin.y()) / (mTileMaxSize.y() + mMargin.y()))); + // GRID_SIZE = COLUMNS * TILE_SIZE + (COLUMNS - 1) * MARGIN + // <=> COLUMNS = (GRID_SIZE + MARGIN) / (TILE_SIZE + MARGIN) + Vector2f gridDimension = (mSize + mMargin) / (mTileSize + mMargin); + + mGridDimension = Vector2i(gridDimension.x(), gridDimension.y()); }; + int getStartPosition(); void buildImages(); void updateImages(); @@ -62,10 +65,12 @@ class ImageGridComponent : public IList bool mEntriesDirty; Vector2f mMargin; - Vector2f mTileMaxSize; - Vector2f mSelectedTileMaxSize; + Vector2f mTileSize; + Vector2i mGridDimension; + + std::vector< std::shared_ptr > mTiles; - std::vector mImages; + std::shared_ptr mTheme; }; template @@ -75,10 +80,11 @@ ImageGridComponent::ImageGridComponent(Window* window) : IList @@ -109,7 +115,7 @@ bool ImageGridComponent::input(InputConfig* config, Input input) if(dir != Vector2i::Zero()) { - listInput(dir.x() + dir.y() * getGridDimension().x()); + listInput(dir.x() + dir.y() * mGridDimension.x()); return true; } }else{ @@ -126,6 +132,9 @@ template void ImageGridComponent::update(int deltaTime) { listUpdate(deltaTime); + + for(auto it = mTiles.begin(); it != mTiles.end(); it++) + (*it)->update(); } template @@ -140,36 +149,20 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) mEntriesDirty = false; } - // Dirty solution (took from updateImages function) to keep the selected image and render it later (on top of the others) - // Will be changed for a cleaner way with the introduction of GridTileComponent - Vector2i gridDimension = getGridDimension(); - - int cursorRow = mCursor / gridDimension.x(); - - int start = (cursorRow - (gridDimension.y() / 2)) * gridDimension.x(); - - //if we're at the end put the row as close as we can and no higher - if(start + (gridDimension.x() * gridDimension.y()) >= (int)mEntries.size()) - start = gridDimension.x() * ((int)mEntries.size()/gridDimension.x() - gridDimension.y() + 1); - - if(start < 0) - start = 0; - - unsigned int i = (unsigned int)start; - ImageComponent* selectedImage = NULL; - for(auto it = mImages.begin(); it != mImages.end(); it++) + std::shared_ptr selectedTile = NULL; + for(auto it = mTiles.begin(); it != mTiles.end(); it++) { // If it's the selected image, keep it for later, otherwise render it now - if(i == (unsigned int)mCursor) - selectedImage = it.base(); + std::shared_ptr tile = (*it); + if(tile->isSelected()) + selectedTile = tile; else - it->render(trans); - i++; + tile->render(trans); } // Render the selected image on top of the others - if (selectedImage != NULL) - selectedImage->render(trans); + if (selectedTile != NULL) + selectedTile->render(trans); GuiComponent::renderChildren(trans); } @@ -178,6 +171,27 @@ template void ImageGridComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { GuiComponent::applyTheme(theme, view, element, properties); + + // Keep the theme pointer to apply it on the tiles later on + mTheme = theme; + + Vector2f screen = Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "imagegrid"); + + if (elem && elem->has("margin")) + mMargin = elem->get("margin") * screen; + + // We still need to manually get the grid tile size here, + // so we can recalculate the new grid dimension, and THEN (re)build the tiles + elem = theme->getElement(view, "default", "gridtile"); + + mTileSize = elem && elem->has("size") ? + elem->get("size") * screen : + GridTileComponent::getDefaultTileSize(); + + // Recalculate grid dimension after theme changed + calcGridDimension(); } template @@ -196,77 +210,83 @@ void ImageGridComponent::onSizeChanged() updateImages(); } -// Create and position imagecomponents (mImages) +// Create and position tiles (mTiles) template void ImageGridComponent::buildImages() { - mImages.clear(); + mTiles.clear(); - Vector2i gridDimension = getGridDimension(); - Vector2f startPosition = mTileMaxSize / 2; - Vector2f tileDistance = mTileMaxSize + mMargin; + Vector2f startPosition = mTileSize / 2; + Vector2f tileDistance = mTileSize + mMargin; // Layout tile size and position - for(int y = 0; y < gridDimension.y(); y++) + for(int y = 0; y < mGridDimension.y(); y++) { - for(int x = 0; x < gridDimension.x(); x++) + for(int x = 0; x < mGridDimension.x(); x++) { // Create tiles - mImages.push_back(ImageComponent(mWindow)); - ImageComponent& image = mImages.at(y * gridDimension.x() + x); + auto tile = std::make_shared(mWindow); + + tile->setPosition(x * tileDistance.x() + startPosition.x(), y * tileDistance.y() + startPosition.y()); + tile->setOrigin(0.5f, 0.5f); + tile->setImage(""); + + if (mTheme) + tile->applyTheme(mTheme, "grid", "gridtile", ThemeFlags::ALL); - image.setPosition(x * tileDistance.x() + startPosition.x(), y * tileDistance.y() + startPosition.y()); - image.setOrigin(0.5f, 0.5f); - image.setMaxSize(mTileMaxSize); - image.setImage(""); + mTiles.push_back(tile); } } } +// Return the starting position (the number of the game which will be displayed on top left of the screen) template -void ImageGridComponent::updateImages() +int ImageGridComponent::getStartPosition() { - if(mImages.empty()) - buildImages(); + int cursorRow = mCursor / mGridDimension.x(); - Vector2i gridDimension = getGridDimension(); - - int cursorRow = mCursor / gridDimension.x(); - - int start = (cursorRow - (gridDimension.y() / 2)) * gridDimension.x(); + int start = (cursorRow - (mGridDimension.y() / 2)) * mGridDimension.x(); // If we are at the end put the row as close as we can and no higher, using the following formula // Where E is the nb of entries, X the grid x dim (nb of column), Y the grid y dim (nb of line) // start = first tile of last row - nb column * (nb line - 1) // = (E - 1) / X * X - X * (Y - 1) // = X * ((E - 1) / X - Y + 1) - if(start + (gridDimension.x() * gridDimension.y()) >= (int)mEntries.size()) - start = gridDimension.x() * (((int)mEntries.size() - 1) / gridDimension.x() - gridDimension.y() + 1); + if(start + (mGridDimension.x() * mGridDimension.y()) >= (int)mEntries.size()) + start = mGridDimension.x() * (((int)mEntries.size() - 1) / mGridDimension.x() - mGridDimension.y() + 1); if(start < 0) start = 0; - unsigned int i = (unsigned int)start; - for(unsigned int img = 0; img < mImages.size(); img++) + return start; +} + +template +void ImageGridComponent::updateImages() +{ + if(mTiles.empty()) + buildImages(); + + int pos = getStartPosition(); + + for(int img = 0; img < mTiles.size(); img++) { - ImageComponent& image = mImages.at(img); - if(i >= (unsigned int)size()) + std::shared_ptr tile = mTiles.at(img); + + // If we have more tiles than we have to display images on screen, hide them + if(pos >= size()) { - image.setImage(""); + tile->setSelected(false); + tile->setImage(""); + tile->setVisible(false); continue; } - if(i == (unsigned int)mCursor) - { - image.setColorShift(0xFFFFFFFF); - image.setMaxSize(mSelectedTileMaxSize); - }else{ - image.setColorShift(0xAAAAAABB); - image.setMaxSize(mTileMaxSize); - } + tile->setSelected(pos == mCursor); + tile->setImage(mEntries.at(pos).data.texture); + tile->setVisible(true); - image.setImage(mEntries.at(i).data.texture); - i++; + pos++; } } From d23d5dbc59d8a2832768433aac7991a51e03bd4a Mon Sep 17 00:00:00 2001 From: Koerty Date: Thu, 12 Apr 2018 11:00:47 +0200 Subject: [PATCH 279/603] Add cropping and minSize to ImageComponent - A call to cropTop(0.2) will crop 20% of the top of the image - A call to minSIze(0.2, 0.2) will resize the image smallest side to 0.2 without breaking aspect ratio, but crop the extra lenght of the biggest side. - Call minSize(0.2, 0.2) and then uncrop() to define an image size by its smallest side --- es-core/src/GuiComponent.h | 2 +- es-core/src/components/ImageComponent.cpp | 105 +++++++++++++++++++--- es-core/src/components/ImageComponent.h | 25 +++++- 3 files changed, 115 insertions(+), 17 deletions(-) diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index ff291e54b4..4c15ba578b 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -56,7 +56,7 @@ class GuiComponent void setRotationOrigin(float originX, float originY); inline void setRotationOrigin(Vector2f origin) { setRotationOrigin(origin.x(), origin.y()); } - Vector2f getSize() const; + virtual Vector2f getSize() const; inline void setSize(const Vector2f& size) { setSize(size.x(), size.y()); } void setSize(float w, float h); virtual void onSizeChanged() {}; diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 7dddba271b..a416b76edf 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -14,9 +14,15 @@ Vector2i ImageComponent::getTextureSize() const return Vector2i::Zero(); } +Vector2f ImageComponent::getSize() const +{ + return GuiComponent::getSize() * (mBottomRightCrop - mTopLeftCrop); +} + ImageComponent::ImageComponent(Window* window, bool forceLoad, bool dynamic) : GuiComponent(window), - mTargetIsMax(false), mFlipX(false), mFlipY(false), mTargetSize(0, 0), mColorShift(0xFFFFFFFF), - mForceLoad(forceLoad), mDynamic(dynamic), mFadeOpacity(0), mFading(false), mRotateByTargetSize(false) + mTargetIsMax(false), mTargetIsMin(false), mFlipX(false), mFlipY(false), mTargetSize(0, 0), mColorShift(0xFFFFFFFF), + mForceLoad(forceLoad), mDynamic(dynamic), mFadeOpacity(0), mFading(false), mRotateByTargetSize(false), + mTopLeftCrop(0.0f, 0.0f), mBottomRightCrop(1.0f, 1.0f) { updateColors(); } @@ -63,6 +69,31 @@ void ImageComponent::resize() mSize[1] = Math::round(mSize[1]); mSize[0] = (mSize[1] / textureSize.y()) * textureSize.x(); + }else if(mTargetIsMin) + { + mSize = textureSize; + + Vector2f resizeScale((mTargetSize.x() / mSize.x()), (mTargetSize.y() / mSize.y())); + + if(resizeScale.x() > resizeScale.y()) + { + mSize[0] *= resizeScale.x(); + mSize[1] *= resizeScale.x(); + + float cropPercent = (mSize.y() - mTargetSize.y()) / (mSize.y() * 2); + crop(0, cropPercent, 0, cropPercent); + }else{ + mSize[0] *= resizeScale.y(); + mSize[1] *= resizeScale.y(); + + float cropPercent = (mSize.x() - mTargetSize.x()) / (mSize.x() * 2); + crop(cropPercent, 0, cropPercent, 0); + } + + // for SVG rasterization, always calculate width from rounded height (see comment above) + mSize[1] = Math::round(mSize[1]); + mSize[0] = (mSize[1] / textureSize.y()) * textureSize.x(); + }else{ // if both components are set, we just stretch // if no components are set, we don't resize at all @@ -132,6 +163,7 @@ void ImageComponent::setResize(float width, float height) { mTargetSize = Vector2f(width, height); mTargetIsMax = false; + mTargetIsMin = false; resize(); } @@ -139,6 +171,15 @@ void ImageComponent::setMaxSize(float width, float height) { mTargetSize = Vector2f(width, height); mTargetIsMax = true; + mTargetIsMin = false; + resize(); +} + +void ImageComponent::setMinSize(float width, float height) +{ + mTargetSize = Vector2f(width, height); + mTargetIsMax = false; + mTargetIsMin = true; resize(); } @@ -152,6 +193,43 @@ void ImageComponent::setRotateByTargetSize(bool rotate) mRotateByTargetSize = rotate; } +void ImageComponent::cropLeft(float percent) +{ + assert(percent >= 0.0f && percent <= 1.0f); + mTopLeftCrop.x() = percent; +} + +void ImageComponent::cropTop(float percent) +{ + assert(percent >= 0.0f && percent <= 1.0f); + mTopLeftCrop.y() = percent; +} + +void ImageComponent::cropRight(float percent) +{ + assert(percent >= 0.0f && percent <= 1.0f); + mBottomRightCrop.x() = 1.0f - percent; +} + +void ImageComponent::cropBot(float percent) +{ + assert(percent >= 0.0f && percent <= 1.0f); + mBottomRightCrop.y() = 1.0f - percent; +} + +void ImageComponent::crop(float left, float top, float right, float bot) +{ + cropLeft(left); + cropTop(top); + cropRight(right); + cropBot(bot); +} + +void ImageComponent::uncrop() +{ + crop(0, 0, 0, 0); +} + void ImageComponent::setFlipX(bool flip) { mFlipX = flip; @@ -187,8 +265,9 @@ void ImageComponent::updateVertices() // we go through this mess to make sure everything is properly rounded // if we just round vertices at the end, edge cases occur near sizes of 0.5 - Vector2f topLeft(0.0, 0.0); - Vector2f bottomRight(Math::round(mSize.x()), Math::round(mSize.y())); + Vector2f size(Math::round(mSize.x()), Math::round(mSize.y())); + Vector2f topLeft(size * mTopLeftCrop); + Vector2f bottomRight(size * mBottomRightCrop); mVertices[0].pos = Vector2f(topLeft.x(), topLeft.y()); mVertices[1].pos = Vector2f(topLeft.x(), bottomRight.y()); @@ -208,23 +287,23 @@ void ImageComponent::updateVertices() py = 1; } - mVertices[0].tex = Vector2f(0, py); - mVertices[1].tex = Vector2f(0, 0); - mVertices[2].tex = Vector2f(px, py); + mVertices[0].tex = Vector2f(mTopLeftCrop.x(), py - mTopLeftCrop.y()); + mVertices[1].tex = Vector2f(mTopLeftCrop.x(), 1 - mBottomRightCrop.y()); + mVertices[2].tex = Vector2f(px * mBottomRightCrop.x(), py - mTopLeftCrop.y()); - mVertices[3].tex = Vector2f(px, py); - mVertices[4].tex = Vector2f(0, 0); - mVertices[5].tex = Vector2f(px, 0); + mVertices[3].tex = Vector2f(px * mBottomRightCrop.x(), py - mTopLeftCrop.y()); + mVertices[4].tex = Vector2f(mTopLeftCrop.x(), 1 - mBottomRightCrop.y()); + mVertices[5].tex = Vector2f(px * mBottomRightCrop.x(), 1 - mBottomRightCrop.y()); if(mFlipX) { for(int i = 0; i < 6; i++) - mVertices[i].tex[0] = mVertices[i].tex[0] == px ? 0 : px; + mVertices[i].tex[0] = px - mVertices[i].tex[0]; } if(mFlipY) { for(int i = 0; i < 6; i++) - mVertices[i].tex[1] = mVertices[i].tex[1] == py ? 0 : py; + mVertices[i].tex[1] = py - mVertices[i].tex[1]; } } @@ -352,6 +431,8 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s setResize(elem->get("size") * scale); else if(elem->has("maxSize")) setMaxSize(elem->get("maxSize") * scale); + else if(elem->has("minSize")) + setMinSize(elem->get("minSize") * scale); } // position + size also implies origin diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index b557c9b5c4..7a93a0d851 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -40,8 +40,20 @@ class ImageComponent : public GuiComponent void setMaxSize(float width, float height); inline void setMaxSize(const Vector2f& size) { setMaxSize(size.x(), size.y()); } + void setMinSize(float width, float height); + inline void setMinSize(const Vector2f& size) { setMinSize(size.x(), size.y()); } + Vector2f getRotationSize() const override; + // Applied AFTER image positioning and sizing + // cropTop(0.2) will crop 20% of the top of the image. + void cropLeft(float percent); + void cropTop(float percent); + void cropRight(float percent); + void cropBot(float percent); + void crop(float left, float top, float right, float bot); + void uncrop(); + // Multiply all pixels in the image by this color when rendering. void setColorShift(unsigned int color); @@ -53,6 +65,8 @@ class ImageComponent : public GuiComponent // Returns the size of the current texture, or (0, 0) if none is loaded. May be different than drawn size (use getSize() for that). Vector2i getTextureSize() const; + Vector2f getSize() const override; + bool hasImage(); void render(const Transform4x4f& parentTrans) override; @@ -63,7 +77,7 @@ class ImageComponent : public GuiComponent private: Vector2f mTargetSize; - bool mFlipX, mFlipY, mTargetIsMax; + bool mFlipX, mFlipY, mTargetIsMax, mTargetIsMin; // Calculates the correct mSize from our resizing information (set by setResize/setMaxSize). // Used internally whenever the resizing parameters or texture change. @@ -86,11 +100,14 @@ class ImageComponent : public GuiComponent std::string mDefaultPath; std::shared_ptr mTexture; - unsigned char mFadeOpacity; - bool mFading; - bool mForceLoad; + unsigned char mFadeOpacity; + bool mFading; + bool mForceLoad; bool mDynamic; bool mRotateByTargetSize; + + Vector2f mTopLeftCrop; + Vector2f mBottomRightCrop; }; #endif // ES_CORE_COMPONENTS_IMAGE_COMPONENT_H From f9468010067463b3e1239f341defce5d905312a6 Mon Sep 17 00:00:00 2001 From: Koerty Date: Mon, 9 Apr 2018 00:58:30 +0200 Subject: [PATCH 280/603] Add scroll direction to the grid Vertical by default, but can be set to horizontal by the theme --- THEMES.md | 2 ++ es-core/src/ThemeData.cpp | 3 +- es-core/src/components/ImageGridComponent.h | 40 ++++++++++++++++----- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/THEMES.md b/THEMES.md index edc0ab3109..f44baaaf1e 100644 --- a/THEMES.md +++ b/THEMES.md @@ -578,6 +578,8 @@ Can be created as an extra. * `size` - type: NORMALIZED_PAIR. - The size of the grid. Take care the selected tile can go out of the grid size, so don't position the grid too close to another element or the screen border. * `margin` - type: NORMALIZED_PAIR. +* `scrollDirection` - type: STRING. + - `vertical` by default, can also be set to `horizontal`. Not that in `horizontal` mod, the tiles are ordered from top to bottom, then from left to right. #### gridtile diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 6b39f3a35b..49052fe2ad 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -28,7 +28,8 @@ std::map> The { "imagegrid", { { "pos", NORMALIZED_PAIR }, { "size", NORMALIZED_PAIR }, - { "margin", NORMALIZED_PAIR } } }, + { "margin", NORMALIZED_PAIR }, + { "scrollDirection", STRING } } }, { "gridtile", { { "size", NORMALIZED_PAIR }, { "padding", NORMALIZED_PAIR }, diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 68029eeece..cf1b72d139 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -6,6 +6,12 @@ #include "resources/TextureResource.h" #include "GridTileComponent.h" +enum ScrollDirection +{ + SCROLL_VERTICALLY, + SCROLL_HORIZONTALLY +}; + struct ImageGridData { std::shared_ptr texture; @@ -51,7 +57,9 @@ class ImageGridComponent : public IList // <=> COLUMNS = (GRID_SIZE + MARGIN) / (TILE_SIZE + MARGIN) Vector2f gridDimension = (mSize + mMargin) / (mTileSize + mMargin); - mGridDimension = Vector2i(gridDimension.x(), gridDimension.y()); + mGridDimension = mScrollDirection == SCROLL_VERTICALLY ? + Vector2i(gridDimension.x(), gridDimension.y()) : + Vector2i(gridDimension.y(), gridDimension.x()); }; int getStartPosition(); @@ -71,6 +79,8 @@ class ImageGridComponent : public IList std::vector< std::shared_ptr > mTiles; std::shared_ptr mTheme; + + ScrollDirection mScrollDirection; }; template @@ -85,6 +95,8 @@ ImageGridComponent::ImageGridComponent(Window* window) : IList @@ -105,13 +117,13 @@ bool ImageGridComponent::input(InputConfig* config, Input input) { Vector2i dir = Vector2i::Zero(); if(config->isMappedTo("up", input)) - dir[1] = -1; + dir[1 ^ mScrollDirection] = -1; else if(config->isMappedTo("down", input)) - dir[1] = 1; + dir[1 ^ mScrollDirection] = 1; else if(config->isMappedTo("left", input)) - dir[0] = -1; + dir[0 ^ mScrollDirection] = -1; else if(config->isMappedTo("right", input)) - dir[0] = 1; + dir[0 ^ mScrollDirection] = 1; if(dir != Vector2i::Zero()) { @@ -178,9 +190,14 @@ void ImageGridComponent::applyTheme(const std::shared_ptr& theme, Vector2f screen = Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); const ThemeData::ThemeElement* elem = theme->getElement(view, element, "imagegrid"); + if (elem) + { + if (elem->has("margin")) + mMargin = elem->get("margin") * screen; - if (elem && elem->has("margin")) - mMargin = elem->get("margin") * screen; + if (elem->has("scrollDirection")) + mScrollDirection = (ScrollDirection)(elem->get("scrollDirection") == "horizontal"); + } // We still need to manually get the grid tile size here, // so we can recalculate the new grid dimension, and THEN (re)build the tiles @@ -219,6 +236,8 @@ void ImageGridComponent::buildImages() Vector2f startPosition = mTileSize / 2; Vector2f tileDistance = mTileSize + mMargin; + int X, Y; + // Layout tile size and position for(int y = 0; y < mGridDimension.y(); y++) { @@ -227,7 +246,12 @@ void ImageGridComponent::buildImages() // Create tiles auto tile = std::make_shared(mWindow); - tile->setPosition(x * tileDistance.x() + startPosition.x(), y * tileDistance.y() + startPosition.y()); + // In Vertical mod, tiles are ordered from left to right, then from top to bottom + // In Horizontal mod, tiles are ordered from top to bottom, then from left to right + X = mScrollDirection == SCROLL_VERTICALLY ? x : y; + Y = mScrollDirection == SCROLL_VERTICALLY ? y : x; + + tile->setPosition(X * tileDistance.x() + startPosition.x(), Y * tileDistance.y() + startPosition.y()); tile->setOrigin(0.5f, 0.5f); tile->setImage(""); From deeaf438c7914493d55b53b36efa9cd1532b6e7d Mon Sep 17 00:00:00 2001 From: Koerty Date: Thu, 12 Apr 2018 10:25:11 +0200 Subject: [PATCH 281/603] Clean ImageGridComponent code - Separated private methods and attributes in 3 groups : - images & entries - tiles - miscellaneous - Renamed some methods : - buildImages -> buildTiles - updateImages -> updateTiles - Moved private methods implementation so they respect the same order as their declaration - Changed some methods internal variable names and other smalls clean --- es-core/src/components/ImageGridComponent.h | 128 ++++++++++---------- 1 file changed, 67 insertions(+), 61 deletions(-) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index cf1b72d139..0e46f0ab06 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -39,48 +39,39 @@ class ImageGridComponent : public IList ImageGridComponent(Window* window); void add(const std::string& name, const std::string& imagePath, const T& obj); - - void onSizeChanged() override; bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Transform4x4f& parentTrans) override; virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; - inline void setCursorChangedCallback(const std::function& func) { mCursorChangedCallback = func; } - -private: - // Calculate how much tiles of size mTileSize we can fit in a grid of size mSize using a margin of size mMargin - void calcGridDimension() - { - // GRID_SIZE = COLUMNS * TILE_SIZE + (COLUMNS - 1) * MARGIN - // <=> COLUMNS = (GRID_SIZE + MARGIN) / (TILE_SIZE + MARGIN) - Vector2f gridDimension = (mSize + mMargin) / (mTileSize + mMargin); - - mGridDimension = mScrollDirection == SCROLL_VERTICALLY ? - Vector2i(gridDimension.x(), gridDimension.y()) : - Vector2i(gridDimension.y(), gridDimension.x()); - }; + void onSizeChanged() override; - int getStartPosition(); - void buildImages(); - void updateImages(); + inline void setCursorChangedCallback(const std::function& func) { mCursorChangedCallback = func; } - virtual void onCursorChanged(const CursorState& state); +protected: + virtual void onCursorChanged(const CursorState& state) override; - std::function mCursorChangedCallback; +private: + // TILES + void buildTiles(); + void updateTiles(); + int getStartPosition() const; + void calcGridDimension(); + // IMAGES & ENTRIES bool mEntriesDirty; + // TILES Vector2f mMargin; Vector2f mTileSize; Vector2i mGridDimension; - - std::vector< std::shared_ptr > mTiles; - std::shared_ptr mTheme; + std::vector< std::shared_ptr > mTiles; + // MISCELLANEOUS ScrollDirection mScrollDirection; + std::function mCursorChangedCallback; }; template @@ -156,16 +147,17 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) if(mEntriesDirty) { - buildImages(); - updateImages(); + buildTiles(); + updateTiles(); mEntriesDirty = false; } std::shared_ptr selectedTile = NULL; for(auto it = mTiles.begin(); it != mTiles.end(); it++) { - // If it's the selected image, keep it for later, otherwise render it now std::shared_ptr tile = (*it); + + // If it's the selected image, keep it for later, otherwise render it now if(tile->isSelected()) selectedTile = tile; else @@ -212,24 +204,24 @@ void ImageGridComponent::applyTheme(const std::shared_ptr& theme, } template -void ImageGridComponent::onCursorChanged(const CursorState& state) +void ImageGridComponent::onSizeChanged() { - updateImages(); - - if(mCursorChangedCallback) - mCursorChangedCallback(state); + buildTiles(); + updateTiles(); } template -void ImageGridComponent::onSizeChanged() +void ImageGridComponent::onCursorChanged(const CursorState& state) { - buildImages(); - updateImages(); + updateTiles(); + + if(mCursorChangedCallback) + mCursorChangedCallback(state); } // Create and position tiles (mTiles) template -void ImageGridComponent::buildImages() +void ImageGridComponent::buildTiles() { mTiles.clear(); @@ -263,9 +255,38 @@ void ImageGridComponent::buildImages() } } +template +void ImageGridComponent::updateTiles() +{ + if(mTiles.empty()) + buildTiles(); + + int img = getStartPosition(); + + for(int ti = 0; ti < mTiles.size(); ti++) + { + std::shared_ptr tile = mTiles.at(ti); + + // If we have more tiles than we have to display images on screen, hide them + if(img >= size()) + { + tile->setSelected(false); + tile->setImage(""); + tile->setVisible(false); + continue; + } + + tile->setSelected(img == mCursor); + tile->setImage(mEntries.at(img).data.texture); + tile->setVisible(true); + + img++; + } +} + // Return the starting position (the number of the game which will be displayed on top left of the screen) template -int ImageGridComponent::getStartPosition() +int ImageGridComponent::getStartPosition() const { int cursorRow = mCursor / mGridDimension.x(); @@ -285,33 +306,18 @@ int ImageGridComponent::getStartPosition() return start; } +// Calculate how much tiles of size mTileSize we can fit in a grid of size mSize using a margin of size mMargin template -void ImageGridComponent::updateImages() +void ImageGridComponent::calcGridDimension() { - if(mTiles.empty()) - buildImages(); - - int pos = getStartPosition(); - - for(int img = 0; img < mTiles.size(); img++) - { - std::shared_ptr tile = mTiles.at(img); - - // If we have more tiles than we have to display images on screen, hide them - if(pos >= size()) - { - tile->setSelected(false); - tile->setImage(""); - tile->setVisible(false); - continue; - } + // GRID_SIZE = COLUMNS * TILE_SIZE + (COLUMNS - 1) * MARGIN + // <=> COLUMNS = (GRID_SIZE + MARGIN) / (TILE_SIZE + MARGIN) + Vector2f gridDimension = (mSize + mMargin) / (mTileSize + mMargin); - tile->setSelected(pos == mCursor); - tile->setImage(mEntries.at(pos).data.texture); - tile->setVisible(true); + mGridDimension = mScrollDirection == SCROLL_VERTICALLY ? + Vector2i(gridDimension.x(), gridDimension.y()) : + Vector2i(gridDimension.y(), gridDimension.x()); +}; - pos++; - } -} #endif // ES_CORE_COMPONENTS_IMAGE_GRID_COMPONENT_H From 99f73304750eac9098cc7f9f9ba33d44db3e7222 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Wed, 11 Apr 2018 20:17:58 -0700 Subject: [PATCH 282/603] fix for several small issues in Windows build --- es-app/src/CollectionSystemManager.cpp | 7 +++---- es-app/src/FileData.cpp | 2 +- es-core/src/utils/FileSystemUtil.cpp | 14 +++++++++++++- es-core/src/utils/FileSystemUtil.h | 1 + 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index b359dc45a0..2d2673beed 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -973,8 +973,7 @@ std::vector CollectionSystemManager::getCollectionsFromConfigFolder if (Utils::FileSystem::isRegularFile(*it)) { // it's a file - std::string file = *it; - std::string filename = file.substr(configPath.size()); + std::string filename = Utils::FileSystem::getFileName(*it); // need to confirm filename matches config format if (filename != "custom-.cfg" && Utils::String::startsWith(filename, "custom-") && Utils::String::endsWith(filename, ".cfg")) @@ -1041,7 +1040,7 @@ std::string getCustomCollectionConfigPath(std::string collectionName) std::string getCollectionsFolder() { - return Utils::FileSystem::getHomePath() + "/.emulationstation/collections/"; + return Utils::FileSystem::getGenericPath(Utils::FileSystem::getHomePath() + "/.emulationstation/collections/"); } bool systemSort(SystemData* sys1, SystemData* sys2) @@ -1049,4 +1048,4 @@ bool systemSort(SystemData* sys1, SystemData* sys2) std::string name1 = Utils::String::toUpper(sys1->getName()); std::string name2 = Utils::String::toUpper(sys2->getName()); return name1.compare(name2) < 0; -} \ No newline at end of file +} diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index be7dd0d847..9d87823e89 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -258,7 +258,7 @@ void FileData::launchGame(Window* window) const std::string rom = Utils::FileSystem::getEscapedPath(getPath()); const std::string basename = Utils::FileSystem::getStem(getPath()); - const std::string rom_raw = getPath(); + const std::string rom_raw = Utils::FileSystem::getPreferredPath(getPath()); command = Utils::String::replace(command, "%ROM%", rom); command = Utils::String::replace(command, "%BASENAME%", basename); diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index fdb2ad3dae..23234ee071 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -197,6 +197,18 @@ namespace Utils } // getExePath + std::string getPreferredPath(const std::string& _path) + { + std::string path = _path; + size_t offset = std::string::npos; +#if defined(_WIN32) + // convert '/' to '\\' + while((offset = path.find('/')) != std::string::npos) + path.replace(offset, 1, "\\"); +#endif // _WIN32 + return path; + } + std::string getGenericPath(const std::string& _path) { std::string path = _path; @@ -225,7 +237,7 @@ namespace Utils #if defined(_WIN32) // windows escapes stuff by just putting everything in quotes - return '"' + path + '"'; + return '"' + getPreferredPath(path) + '"'; #else // _WIN32 // insert a backslash before most characters that would mess up a bash path const char* invalidChars = "\\ '\"!$^&*(){}[]?;<>"; diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index 8a23bc9c66..bb71f7b7c2 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -16,6 +16,7 @@ namespace Utils std::string getHomePath (); std::string getCWDPath (); std::string getExePath (); + std::string getPreferredPath (const std::string& _path); std::string getGenericPath (const std::string& _path); std::string getEscapedPath (const std::string& _path); std::string getCanonicalPath (const std::string& _path); From 4a587ca3477c93511f6e1a03fbe40153a2fee7e0 Mon Sep 17 00:00:00 2001 From: Koerty Date: Sun, 15 Apr 2018 15:20:49 +0200 Subject: [PATCH 283/603] Fix calcGridDimension being called before mScrollDirection --- es-core/src/components/ImageGridComponent.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 0e46f0ab06..d53b60dff8 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -85,9 +85,9 @@ ImageGridComponent::ImageGridComponent(Window* window) : IList From 1b4a545c90e25cea427d2061bb5377af73b76e2b Mon Sep 17 00:00:00 2001 From: Koerty Date: Sun, 15 Apr 2018 20:41:25 +0200 Subject: [PATCH 284/603] Add "origin" theming element for help prompt --- THEMES.md | 2 ++ es-core/src/HelpStyle.cpp | 4 ++++ es-core/src/HelpStyle.h | 1 + es-core/src/ThemeData.cpp | 1 + es-core/src/components/HelpComponent.cpp | 1 + 5 files changed, 9 insertions(+) diff --git a/THEMES.md b/THEMES.md index f44baaaf1e..911b3207bb 100644 --- a/THEMES.md +++ b/THEMES.md @@ -729,6 +729,8 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice #### helpsystem * `pos` - type: NORMALIZED_PAIR. Default is "0.012 0.9515" +* `origin` - type: NORMALIZED_PAIR. + - Where on the component `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the component exactly in the middle of the screen. * `textColor` - type: COLOR. Default is 777777FF. * `iconColor` - type: COLOR. Default is 777777FF. * `fontPath` - type: PATH. diff --git a/es-core/src/HelpStyle.cpp b/es-core/src/HelpStyle.cpp index 97e679ab55..383ce821ed 100644 --- a/es-core/src/HelpStyle.cpp +++ b/es-core/src/HelpStyle.cpp @@ -6,6 +6,7 @@ HelpStyle::HelpStyle() { position = Vector2f(Renderer::getScreenWidth() * 0.012f, Renderer::getScreenHeight() * 0.9515f); + origin = Vector2f(0.0f, 0.0f); iconColor = 0x777777FF; textColor = 0x777777FF; @@ -24,6 +25,9 @@ void HelpStyle::applyTheme(const std::shared_ptr& theme, const std::s if(elem->has("pos")) position = elem->get("pos") * Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + if(elem->has("origin")) + origin = elem->get("origin"); + if(elem->has("textColor")) textColor = elem->get("textColor"); diff --git a/es-core/src/HelpStyle.h b/es-core/src/HelpStyle.h index 22f0e77d44..8682a8d864 100644 --- a/es-core/src/HelpStyle.h +++ b/es-core/src/HelpStyle.h @@ -12,6 +12,7 @@ class ThemeData; struct HelpStyle { Vector2f position; + Vector2f origin; unsigned int iconColor; unsigned int textColor; std::shared_ptr font; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 49052fe2ad..4a4f0d5128 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -104,6 +104,7 @@ std::map> The { "path", PATH } } }, { "helpsystem", { { "pos", NORMALIZED_PAIR }, + { "origin", NORMALIZED_PAIR }, { "textColor", COLOR }, { "iconColor", COLOR }, { "fontPath", PATH }, diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index 93a0f937d4..a64cc17330 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -97,6 +97,7 @@ void HelpComponent::updateGrid() mGrid->setPosition(Vector3f(mStyle.position.x(), mStyle.position.y(), 0.0f)); //mGrid->setPosition(OFFSET_X, Renderer::getScreenHeight() - mGrid->getSize().y() - OFFSET_Y); + mGrid->setOrigin(mStyle.origin); } std::shared_ptr HelpComponent::getIconTexture(const char* name) From e575f7708e00f6931e3bef5248e48e270a89d967 Mon Sep 17 00:00:00 2001 From: Koerty Date: Fri, 6 Apr 2018 18:37:34 +0200 Subject: [PATCH 285/603] Add the new metadata field md_title to grid, video and detailed views Unlike the others, it is by default positioned offscreen --- THEMES.md | 9 ++++++++- es-app/src/views/gamelist/DetailedGameListView.cpp | 12 +++++++++++- es-app/src/views/gamelist/DetailedGameListView.h | 1 + es-app/src/views/gamelist/GridGameListView.cpp | 12 +++++++++++- es-app/src/views/gamelist/GridGameListView.h | 1 + es-app/src/views/gamelist/VideoGameListView.cpp | 12 +++++++++++- es-app/src/views/gamelist/VideoGameListView.h | 1 + 7 files changed, 44 insertions(+), 4 deletions(-) diff --git a/THEMES.md b/THEMES.md index f44baaaf1e..2941c50d6f 100644 --- a/THEMES.md +++ b/THEMES.md @@ -306,6 +306,7 @@ You can now change the order in which elements are rendered by setting `zIndex` * `datetime name="md_lastplayed"` * `text name="md_playcount"` * `text name="md_description"` + * `text name="md_name"` * System Logo/Text - 50 * `text name="logoText"` * `image name="logo"` @@ -409,6 +410,8 @@ Reference - The "playcount" metadata (number of times the game has been played). * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR | Z_INDEX - Text is the "desc" metadata. If no `pos`/`size` is specified, will move and resize to fit under the lowest label and reach to the bottom of the screen. + * `text name="md_name"` - ALL + - The "name" metadata (the game name). Unlike the others metadata fields, the name is positioned offscreen by default #### video * `helpsystem name="help"` - ALL @@ -460,7 +463,9 @@ Reference - The "playcount" metadata (number of times the game has been played). * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR | Z_INDEX - Text is the "desc" metadata. If no `pos`/`size` is specified, will move and resize to fit under the lowest label and reach to the bottom of the screen. - + * `text name="md_name"` - ALL + - The "name" metadata (the game name). Unlike the others metadata fields, the name is positioned offscreen by default + --- #### grid @@ -511,6 +516,8 @@ Reference - The "playcount" metadata (number of times the game has been played). * `text name="md_description"` - POSITION | SIZE | FONT_PATH | FONT_SIZE | COLOR | Z_INDEX - Text is the "desc" metadata. If no `pos`/`size` is specified, will move and resize to fit under the lowest label and reach to the bottom of the screen. + * `text name="md_name"` - ALL + - The "name" metadata (the game name). Unlike the others metadata fields, the name is positioned offscreen by default --- diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index e4b0203b04..42d3ddcaed 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -12,7 +12,8 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mLblGenre(window), mLblPlayers(window), mLblLastPlayed(window), mLblPlayCount(window), mRating(window), mReleaseDate(window), mDeveloper(window), mPublisher(window), - mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window) + mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window), + mName(window) { //mHeaderImage.setPosition(mSize.x() * 0.25f, 0); @@ -57,6 +58,13 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : addChild(&mLblPlayCount); addChild(&mPlayCount); + mName.setPosition(mSize.x(), mSize.y()); + mName.setDefaultZIndex(40); + mName.setColor(0xAAAAAAFF); + mName.setFont(Font::get(FONT_SIZE_MEDIUM)); + mName.setHorizontalAlignment(ALIGN_CENTER); + addChild(&mName); + mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.65f); mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), mSize.y() - mDescContainer.getPosition().y()); mDescContainer.setAutoScroll(true); @@ -79,6 +87,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them using namespace ThemeFlags; mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION); + mName.applyTheme(theme, getName(), "md_name", ALL); initMDLabels(); std::vector labels = getMDLabels(); @@ -200,6 +209,7 @@ void DetailedGameListView::updateInfoPanel() mPublisher.setValue(file->metadata.get("publisher")); mGenre.setValue(file->metadata.get("genre")); mPlayers.setValue(file->metadata.get("players")); + mName.setValue(file->metadata.get("name")); if(file->getType() == GAME) { diff --git a/es-app/src/views/gamelist/DetailedGameListView.h b/es-app/src/views/gamelist/DetailedGameListView.h index dfcd389e35..76c8a93537 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.h +++ b/es-app/src/views/gamelist/DetailedGameListView.h @@ -36,6 +36,7 @@ class DetailedGameListView : public BasicGameListView TextComponent mPlayers; DateTimeComponent mLastPlayed; TextComponent mPlayCount; + TextComponent mName; std::vector getMDLabels(); std::vector getMDValues(); diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index bc5e9e481d..e53cb79745 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -16,7 +16,8 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : mLblGenre(window), mLblPlayers(window), mLblLastPlayed(window), mLblPlayCount(window), mRating(window), mReleaseDate(window), mDeveloper(window), mPublisher(window), - mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window) + mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window), + mName(window) { const float padding = 0.01f; @@ -54,6 +55,13 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : addChild(&mLblPlayCount); addChild(&mPlayCount); + mName.setPosition(mSize.x(), mSize.y()); + mName.setDefaultZIndex(40); + mName.setColor(0xAAAAAAFF); + mName.setFont(Font::get(FONT_SIZE_MEDIUM)); + mName.setHorizontalAlignment(ALIGN_CENTER); + addChild(&mName); + mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.65f); mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), mSize.y() - mDescContainer.getPosition().y()); mDescContainer.setAutoScroll(true); @@ -126,6 +134,7 @@ void GridGameListView::onThemeChanged(const std::shared_ptr& theme) using namespace ThemeFlags; mGrid.applyTheme(theme, getName(), "gamegrid", ALL); + mName.applyTheme(theme, getName(), "md_name", ALL); initMDLabels(); std::vector labels = getMDLabels(); @@ -245,6 +254,7 @@ void GridGameListView::updateInfoPanel() mPublisher.setValue(file->metadata.get("publisher")); mGenre.setValue(file->metadata.get("genre")); mPlayers.setValue(file->metadata.get("players")); + mName.setValue(file->metadata.get("name")); if(file->getType() == GAME) { diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index 7fd8b5f2fc..da09c87903 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -50,6 +50,7 @@ class GridGameListView : public ISimpleGameListView TextComponent mPlayers; DateTimeComponent mLastPlayed; TextComponent mPlayCount; + TextComponent mName; std::vector getMDLabels(); std::vector getMDValues(); diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index da7e2e2594..e9ae420bd0 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -23,7 +23,8 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : mLblGenre(window), mLblPlayers(window), mLblLastPlayed(window), mLblPlayCount(window), mRating(window), mReleaseDate(window), mDeveloper(window), mPublisher(window), - mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window) + mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window), + mName(window) { const float padding = 0.01f; @@ -91,6 +92,13 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : addChild(&mLblPlayCount); addChild(&mPlayCount); + mName.setPosition(mSize.x(), mSize.y()); + mName.setDefaultZIndex(40); + mName.setColor(0xAAAAAAFF); + mName.setFont(Font::get(FONT_SIZE_MEDIUM)); + mName.setHorizontalAlignment(ALIGN_CENTER); + addChild(&mName); + mDescContainer.setPosition(mSize.x() * padding, mSize.y() * 0.65f); mDescContainer.setSize(mSize.x() * (0.50f - 2*padding), mSize.y() - mDescContainer.getPosition().y()); mDescContainer.setAutoScroll(true); @@ -118,6 +126,7 @@ void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION); mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION); mVideo->applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY | Z_INDEX | ROTATION); + mName.applyTheme(theme, getName(), "md_name", ALL); initMDLabels(); std::vector labels = getMDLabels(); @@ -256,6 +265,7 @@ void VideoGameListView::updateInfoPanel() mPublisher.setValue(file->metadata.get("publisher")); mGenre.setValue(file->metadata.get("genre")); mPlayers.setValue(file->metadata.get("players")); + mName.setValue(file->metadata.get("name")); if(file->getType() == GAME) { diff --git a/es-app/src/views/gamelist/VideoGameListView.h b/es-app/src/views/gamelist/VideoGameListView.h index 37ba2253fb..8a8335866b 100644 --- a/es-app/src/views/gamelist/VideoGameListView.h +++ b/es-app/src/views/gamelist/VideoGameListView.h @@ -45,6 +45,7 @@ class VideoGameListView : public BasicGameListView TextComponent mPlayers; DateTimeComponent mLastPlayed; TextComponent mPlayCount; + TextComponent mName; std::vector getMDLabels(); std::vector getMDValues(); From 3100fa3a6d12146842af3ffa4e3e5325979e5f2c Mon Sep 17 00:00:00 2001 From: Koerty Date: Sun, 15 Apr 2018 14:29:02 +0200 Subject: [PATCH 286/603] Add grid default image and folder image Add default game image and folder image to the grid. They can be configured by the theme with the gameImage and folderImage properties of the imagegrid. --- THEMES.md | 4 ++ es-core/src/ThemeData.cpp | 2 + es-core/src/components/ImageGridComponent.h | 65 +++++++++++++++++++- resources/blank_game.png | Bin 0 -> 14299 bytes resources/folder.png | Bin 0 -> 586 bytes 5 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 resources/blank_game.png create mode 100644 resources/folder.png diff --git a/THEMES.md b/THEMES.md index f44baaaf1e..b9af4284b6 100644 --- a/THEMES.md +++ b/THEMES.md @@ -578,6 +578,10 @@ Can be created as an extra. * `size` - type: NORMALIZED_PAIR. - The size of the grid. Take care the selected tile can go out of the grid size, so don't position the grid too close to another element or the screen border. * `margin` - type: NORMALIZED_PAIR. +* `gameImage` - type: PATH. + - The default image used for games which doesn't have an image. +* `folderImage` - type: PATH. + - The default image used for folders which doesn't have an image. * `scrollDirection` - type: STRING. - `vertical` by default, can also be set to `horizontal`. Not that in `horizontal` mod, the tiles are ordered from top to bottom, then from left to right. diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 49052fe2ad..b8d2632861 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -29,6 +29,8 @@ std::map> The { "pos", NORMALIZED_PAIR }, { "size", NORMALIZED_PAIR }, { "margin", NORMALIZED_PAIR }, + { "gameImage", PATH }, + { "folderImage", PATH }, { "scrollDirection", STRING } } }, { "gridtile", { { "size", NORMALIZED_PAIR }, diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 0e46f0ab06..c5e6e8501c 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -2,6 +2,7 @@ #ifndef ES_CORE_COMPONENTS_IMAGE_GRID_COMPONENT_H #define ES_CORE_COMPONENTS_IMAGE_GRID_COMPONENT_H +#include "Log.h" #include "components/IList.h" #include "resources/TextureResource.h" #include "GridTileComponent.h" @@ -61,6 +62,8 @@ class ImageGridComponent : public IList // IMAGES & ENTRIES bool mEntriesDirty; + std::shared_ptr mDefaultGameTexture; + std::shared_ptr mDefaultFolderTexture; // TILES Vector2f mMargin; @@ -80,6 +83,8 @@ ImageGridComponent::ImageGridComponent(Window* window) : IList::add(const std::string& name, const std::string& imag typename IList::Entry entry; entry.name = name; entry.object = obj; - entry.data.texture = ResourceManager::getInstance()->fileExists(imagePath) ? TextureResource::get(imagePath) : TextureResource::get(":/button.png"); + + if (ResourceManager::getInstance()->fileExists(imagePath)) + { + entry.data.texture = TextureResource::get(imagePath); + } + else + { + // FileType::FOLDER = 2, but FileData is our template parameter T, + // so we don't want to bring that dependence to FileData here + if (obj->getType() == 2) + entry.data.texture = mDefaultFolderTexture; + else + entry.data.texture = mDefaultGameTexture; + } + static_cast*>(this)->add(entry); mEntriesDirty = true; } @@ -189,6 +208,50 @@ void ImageGridComponent::applyTheme(const std::shared_ptr& theme, if (elem->has("scrollDirection")) mScrollDirection = (ScrollDirection)(elem->get("scrollDirection") == "horizontal"); + + if (elem->has("gameImage")) + { + std::string path = elem->get("gameImage"); + + if (!ResourceManager::getInstance()->fileExists(path)) + LOG(LogWarning) << "Could not replace default game image, check path: " << path; + else + { + std::shared_ptr oldDefaultGameTexture = mDefaultGameTexture; + + mDefaultGameTexture = TextureResource::get(path); + + // mEntries are already loaded at this point, + // so we need to update them with new game image texture + for (auto it = mEntries.begin(); it != mEntries.end(); it++) + { + if ((*it).data.texture == oldDefaultGameTexture) + (*it).data.texture = mDefaultGameTexture; + } + } + } + + if (elem->has("folderImage")) + { + std::string path = elem->get("folderImage"); + + if (!ResourceManager::getInstance()->fileExists(path)) + LOG(LogWarning) << "Could not replace default folder image, check path: " << path; + else + { + std::shared_ptr oldDefaultFolderTexture = mDefaultFolderTexture; + + mDefaultFolderTexture = TextureResource::get(path); + + // mEntries are already loaded at this point, + // so we need to update them with new folder image texture + for (auto it = mEntries.begin(); it != mEntries.end(); it++) + { + if ((*it).data.texture == oldDefaultFolderTexture) + (*it).data.texture = mDefaultFolderTexture; + } + } + } } // We still need to manually get the grid tile size here, diff --git a/resources/blank_game.png b/resources/blank_game.png new file mode 100644 index 0000000000000000000000000000000000000000..23b2930632b52ff7570305ccc1e1993045096099 GIT binary patch literal 14299 zcmaL8XH-+)6E=EMfY7TD2||!ANKvFn3#jxaqI8HLy*KF)KoFz|0wSV-ND+}DNN+)! z^e#x3A|M^<^`7YOfA72Qy6b*mg_E<_-g{>D%slhVPNcS`5+xZk82|v3D$2KY00091 z3jq+s;D@o>2P?vpyN;3qP}sw=3_ifE%vdUyg0A>q$$-B^ z%7R~tAH~y#K$mmLfVC<2^p@CD&xEv%^YqaD$z8nwr&m-1k1u{{FMj;PzJh~&IBNBD zD5poRQd@feaKL|EgFNiSz=0a2-tD^WHmD(f`bUTFJgVTqE^N5N|1yy}qv|5unn+US zrKAuUqxU)QH}Zp6sqFx2uj#Ip9cH5ak!fYKKdGfS*n*JzQ17WE9$KDm@PTPsjKCx=WJU3ug4Alv0va&hAj3y+ZawEv%b zs@c~o#F)w1_|<;?zRwOxl(_oo{7qST8(fs~ zmOpD5B#P39uPjpEG3ooz-I<<5M(-TrH)PLsC+1K1o7|bHvX2w#(^)UFN;<|6_1lsP z2l` zf@f_;iMgfaQC|$Q(bZRcr}g8?Ve7sg7vCyY^l!zjTL%|luaCwykcfp*Em^lrz(T~$ z{aR+P%B8-Zo6k1xkt>r9vM)8g8aO8Rw!`uvU*4z36-ge+Mk@LD2j%W+oFj>)Sn}M| z7Rq1#R_{2~?QwlR?5HiR46w2lUNg)D_4j(OW&BTsZ{;suHX+Jj6~ zUuFq@Fnf5Gby>B%Qvdt;RJP#DhD}PFB$#xp=Ura&ZE>ohYb5Jq2fim&#su|*Y1a~=%3ZGGn!dj-l6 z#>SNGIQ%iJ*IO@%hpD6Lb7{PT$%Lj@`AEW)q29Fp)%!$c=+^}wulVMUC$31fAC>!` zf87f-o^b8^v-T*!TE^hFXkyH;Jw8J?>*A9ajEim#&&&&)cX#ESOh#269Cc>0c&9ATHle)uUNWvGsfxt+>-A% zVwR6~{G$}*?;Ci^oBc*#E`3YLHa~mVA6Ak0t5@IxS;a{{;TWG(@&IWLmA8a1I8+7L zidVTDFFe{WS8Hz#D|qDSe*c1xWt}*K{R+QIki7^b<>O`(OiiN4d;F`ijxY?+Y%J&%PV2agQept>#Bf@-rn|YFu|* z|1dM*aw|hNVA5(ObtM1vg6ofLldMVM)v}o3{6d%=EOT&4>?Z5LDWqAk_<}?0I8gp1 z&B7>CPAj5E`tsxb@3V(SgDEv80AM>W52IypWk$H5sv%-SNcS==1c`?i;x_ zZW^~Hg3_qcfO4Vrk8VFjGH}K^PF_f?N8In-*Mm!ORluW zq#Zx*guZ<+DI0Rhh5B3yFjDCKd{qgsW@ChUlT%OU(E%oa>n+BW`|P+cWz+iks)xh$SYXq5AhE=`gC2k0TSm!_ z`&b=xH0_&z=`Pt_Iv<5k&W@b?3J4Qdp>em~*ve;)%jwXgyzmvJ)M|z$`#i0qEt6on zA|!`nh)7W(DMa_;j8r}xKX?hYzxLR8({~+#K5tfFKX?3GBhIuqhlJT6AQMs=&=12| z=43tIh64?TrfaGV_9ihlYIwrN3Oea69WCx8byEXLQ3}9shy&Hx;(d4qD^6Mk&Trp& zl)ijuW28jCdFiL>&1}U~` zwQP)`{6?d0!cT8ZfLPYLQ55+{Yl`{-@R$iIrw4H5>87-}I_8)FTNM5^mzYX?3*p)m z9Jsva5MjDyVo0tsaDNf9$>123-#Qqy*l{LbqTk3X0+UleHD-cDWWIaS$*%xxv$7(m zt*iT7YCn*nL&LoxsG1&F2D#WBXrBSVj$4j}d?3;8Dr+G+ryz^q7rg*=x$r*b&bjaX z3A?mUf!ZPuv;)6=95>Q|_6Y(Voa>KX0^g}{ zU%7GlC11$30;g|PJJZR@;~%A?&sIcp;$G2W9&N(W)fY%0!sKW;x?KD|^xIBAzh*_>pApd{G#R zA&n&Mix6d};lOQS-m8YaLUosDRt<0uUIua?YBv$Dg6KgMkn>Bzhn=cQI-P&mKKuFm z%6l9*2edY`?)x}J_cYSUga}N^PNdMHj_F1ncBa-EPQzr*0W?-T0j6+k8lG1%f?k8Y ziBVOOu8kXwcNFAffLNRb7cREG?KB!_B^kR@1Ki`mog|QlP25s|7PajCOT#Az3O~Dk zv?wmG=h5L#er3F~DkRsgY81rL;yGzhkch46V8XF;sy{rrr~0R=)*JA8=P%u!BM)4c zL5y0^6kj2Gd>V>V1QKpZ!(H}N`u~uG!2{X;%dVSqVO7_yQDp;@gPgd;i)Hbzh#v($ zJ{QHJr+h!UEM%UnNS(&#LSg{!r%MQ|tQW~&O)t2~aR_)geXe&AzaV-8il#w8X<(z| z@YgZQ_<|@SyXL1v(2Edtw!5?#k#p^;xS$*VsV_1T_!6IW-uv4ArOCQ!)t=idvY782 z!oeLojX;|sA#hGc=q9~GDbz5WL$uNrRs#YS+``iiSE6;Kg(fyIt7}G2&B)?;SM^-LApcL}ca1ma?09MsEEgI;75bTxO2z?e!#y24+KPF_=s=a7B?6oeReklXVp&=%s(b zidd{{$NKVh(%_!Ml#}?>0FrwlpxIaz0Z3#x@Wp(h@YAQlCjLH_LnA-Q$@ig&F+-Mh z!wXr%dDhi{yCOhK*tZA`0J+h1c#O#~jFB0;68Wpe>~YoP7MXd-uhis{&*Fd|P#mA7 zCz_bYXM#JmZPZJ6?Tt_b1_^tbMFYt~lUlH9t}-_Ui_JkCGMrh76Z}k!zl7aw7qV=_ zds?H}iHdCS2<#C-rwnjB8ts?UzCn+G>+3ej{w@VNp8d2tjm)HN8Kvt*OHnE(H&z3K zVc_iMXn^soc>Kzsb=gqdx4E7wo+qkzrkHd&djtt{Gyo5Xa$);xU&Zst9F8xKk2@Sz$(Mq?zEZXEGMhlZlOiF_ zL6zCRg$jhfFFR~_TpG>xXku>4aqh6#hf z*S`~$3Sq3lB~Y(#o=WyY2oiFeu*B^-$QKl|?kyIX zyEtasTs5aTV=4*{6&K(2JtB$Z#H^EOFjV9B22YeYa1sO;)0f6&7jghM07z7bMC%)x zM}UvXg}LD)HBzikwgsH#BB&BNN=O6=Zkzu8VmYt-!?Noz2K5-Po{I+`eSpsdPy9@S zF{%Ls(ypyv>_!Aq7hIgyN2W%0GDkF+4rf&`x-hGOy0H88vTYCV{- zwL5&bt}pKxs??y&3|%^!sT8RSviLfh(A>{*hy_`3l+ad!P|dRt8x|a|9G0x0q3+$v za%8TavO#8uke*?AQa!IucE+<`t-#A@;PT(oyb0()^w+x={AF@iup{*41w9+uxC~deTd~{QK4r=eer*zW{`Z-FZ9(- zV)O>;pV`6ff02@<)2@c7L!Qx!ye$Xo0at;Jl~;Wk>a5$|5hy$Q(g9FqL%_Kdm$N`wW{~h`07XJfO2& zjpXevRAYNR9Go@rn6D9atmD=O>6rh_JDK#1S$KC5fv^70Uf#e}c7QoJ7(-!KHtnt! zQgP%vM5%BYYPmhL>(;wQp?hWCfks&8UyQ>t;uJ5>3Gy`_ILeM!`8Qrvo!1|ygK6Ch z8FpkAR{f{DZ^Y2gABYvOf4V`XhRk!xav@c%;52_lqJ+#qB3z5lf-DQfm*jfMM0wDx zfGg-deb#;cjm=J;y^8$v3RchBzd)m$Zsr6$DB78sThPXc|& zDXntq)W{`CN5jBm%!p=aOS+Ci%vS@T)(JjO7emr#pbJBDA*1X@EtPtAC6b30>cB}C zI$lG!>F#h);dMe<2+8aAPl$3*`lLsxAFM>+Rkx@LrD8Jvl0`_O3dQSSxd06}?P_7( zlvs#9C)VMg3m5l~kE67saVIzd(i{aYRj zZO#_7Sav)DI#%VcVgXgC*-~dpT+U2PcR!?_ZPC@{6xmd43WJWLvBre?Md2C2n8l&8 zoVzwG6g)d`kw5o{-{{@Rk9rXk1(Ep@i7bR8O^{0-` zDy9edy_BY2y3&h3l3&RAt)ve4)$<%CoFBH%c#;t8gG2!0zSC2<00d5WCaQfsN$omh z5>@=0qE@z5dqybeFsl9T{O7j7xZ1_Z4T>oXq@c;Dvh2B6y4r?IrT^KVbTvV<39>1k zC~~RO9n|qcS&`5E%_IBZ#_t>ci}5>xeo&F{!d^nk`%D82;>MKCft_?x=vd-(E(Mj* z-G>Pdc=MTh|F{R)UB5D_vP4?zAZ*?X_K)E*@@9{Wh2S5;)|ttSfwY>_vv6ou)XPC4g#jS3aj&v}K8SQEtL zMPRPH#bj)Uh$bTC?^VO9_tTK1Qba}HXhS2(@^#A3On>M%Mr_ehi1x_i1t7Jn*+Qzn z2P~n|7gJ|_PL7IB?Y6~({`BvV@l^hK=jT(qFEpKGx;%e&-0(n-IXy(mpS$rbXG~l%4V876kS-c*?(7!F6Rk1^Yj@9f?^rGi|~ zrMF#RpGMN+BfuQ+2pTL5Eho*tB1{$(Okt;2K|>yO?jFoN z=b_9?=-XE~m?4=;4ZN;$HdEG+o+c>*Mcy@M2iVBeFABpKDZQ@&%bK}KB z=&&t8;+t0>xKFjS6-BIEi;)`(D6{ji`{`!n>Wh{O<(*P`CiItapGLOAgia>!Pm}(9 zK6OyNgHmx@e0p9{pL~G>N6W=XjlW9rSZiqAjepsBuk4+eknk)kyZ?`!$~=SUO}O?K zS3wflE08{|-i|+M?h7C7*N;2S)#Nl@_^ns1eC&M=wIZ#ZnPNMUz73GnC0I{B{`qm^ zQnPsd*6xm7>-DS}-v6X&0>c{yfeAFC4^e(kLxilBeNY*VS^kxg`6%HPv2-*bd;CKy zSC3MBU5PC~v~Jes&l3Bipv9P=0}{Oe*2@4M|Bfldr({|ZVI@|JkvKbD{gVC9)>(Xw zHWbn!ljBzWT*x#$=N@qv9S|;`8hmG2Y-@-I|0{L+JJ9 zzWAO^Wh0Jrg9^?{$$?u%vkpG{vB7e?Jbyb=oq;_x!ZaFCOhh6u){ucRK# zg;>4Qp88(t@+@P6_Q1VRwi9%~2m<>kG7J!<)0PHu`jPrgn25sn!N6n)A(D40GMBpj z7*3CcMBLR%0H)5$#Yq}A2FtoH(b zZN+-6PM%XwZ;l0|2W}GpjSmh6Yq{1+{gO{?#9lZmB2hmcD9@ zgJ=pV0vxIgaI6U~9xC>Qdh=YyB=kB;O~1UGvKiA#?zl23u`;$nz76X z4;q8Rwd4lf>CV>EKk3wgB#$g;2T_?inK=DRggJ9F5pTIAy9>UFO0zNI>F53Th0-IKY=fTYo0SE=h z<;?}5wcY)O)3qSw-UvE>uT9^$)7XE`rq8?inGQJUdny}en!=fWG{h4!!mQ@hw1r{aZg`CN(9m=sk$-oP{da-`PtaI1YIH{76mz>zByM zZkgsLD~YQN99Of!asDbv+XP{}xE1+)`u)h||7^t97^?_maE*lYS+g5&?9S}*OEKHr zeu-{{FUjsyJ6$^4o%Ib&_hlIgy8aghVO8Xxs{`Tvgp!7kn^WUKMdHXjA2%x zz>5)+@)!SX{af`Q@a4qUp-6E8_=7=4e`SEo3=Ra?nd~@^tH3=6Bpf1EE>rpQFXlud zu%7RezlhSs!IRxpY9?vkFWFgOB|KkJr(iN(iz;iR<@gr1 zRb>fow7|^-^}aKh*TSJUgf~Tqp%)eZk_VeWbIjg5JQ7gUp%X}i>!iJ4Q5(Ry25-mX zZ~s>BT)y{8l8_~fA9@fFB{MYu#fQBN|5}&xPMJK%<~|stm@oLJNa(cszR!}!BnG{S z3Z{79M8HzsfRkkL&Up)l(AIfY37`_&L{L9mi^Kwctfvp=@ZVm5~K5d-{ z^2Bxv5nI6rL%2M-S-^o=_%GT9Gc*tU9fhBADQwM8NE2Jja+gyHU?fGNY}hz(Fgg^( z8u=rKbx-XYcV)x1rLT|(T(GDW1PL@_47*h=U4)2<~;H z5&l~oGg9Lu2sJ45C3H~vadeGN;ZWm>z-NM)MF`CB5;`Me(4Hqi zgm-Uh{PMA2T*+-BvqJI#qPP*xYXuJmy5%pzid!)KgvuU_0L$o%lfb-0HO5p+%ED!V z3Wl|X9Gr!^4cT3lLtnL{*L4(~mK8}!%#~oxMfK0$(A4PhV3B8>2I#0Nel7<21N%Xw-HoGNSdX_C!C?*dx?6VhSkk#GX%RR|y@r z4-!JNA^%)cofEwUJR+Ih{e($K(GJpi90iZ2C#)F)WDQW8QE<*6>4~F4ChUzU7~}}9 z9Yuoe42}U>K`cTbDPPhwBd`Jdm3@y3zxn89s551syy*<05y}Yx$p>*} zL55Lc$lO0&0F>~XxrH}k6y~rJ?>3qdF|ZHa`I*Ca+W#XOK`)zF%I1;=+#qj8R&R=a z?OFI&jRl|mdd>Ud`et<)REZF;K((mD>^LGJeL>s^n|p!j*CZV7glP-}M+P5n%Nr(b z*AAHp+75NYB541oX;SzVA>~_~qCn^l^ z=M}cZ)4UO%X$Rgsr>HkBe8YL|Ax(mQcn)t$7_^O0nS;qMP(<5+xsft6iEhAw9tDVe zxhW{4uMUzdwGUucj24ZIuoeQd2->l70lywOX5z$k+FdWkkQ#cM)J#mq$&Qgj8p6>1 z64v%tF+cxxH5v*?<+JWaKq*Yv_>C1aJgm`ouYsHY%P)ijCsViqq&K{#qWgiWury>G zCG7OCn(s3JGYL+OZ0!EN@9{vnSgQcm(c)^}{WrlQAb%@j-IB?#G8PQxgn1n%34F`z~m)|c!9?v&ye4sOA z!d}Y=*z<%4GDDgP%vP?@Rc{=i<9s=*HXH@3?q2Wy(hWwtL2#DJR^ZFKta#0)Ry2S9 z01?gH;`uF*j@5?+^SEmJP>RPwAVX^H;Y*BbCE3*JGEjXwsQxkvq8fadD2jP2E)6!Uz($W8rLo(Uar@MwGwq*#UFFsSkfRJf&; zK0badWt#N_fMA?df$nF-RBInHO$JuPZu2eg?Nl^Yzd^;)*K6J{%9_;O&$_hy#}A6$ zYxYYwxFkb`git^_8mjx%44FwIYQ&Pij8k5E^xpOVpp%|m?zTNWl*cYYz#wNoR zvz^RDsj->=pbVP$tKGKfu)9nTm#2>q_kmkgNzRPQi@mK#*k~6GupUrqFsVf6;W>2U zLPdI&ZJ6;QzUpTs<`j0${5<*w&&^ZA4*Rb5Z95~`@wmbtTSB+NBLW>E8YL&P%3>6+ z;?$1|e<#f)`Lelq7P`O@966Noaxhoey^-4+Fo0$VMp8Mbo~N(e2+>X~?B~s++m0@S+fj?oOQJaTcnSNNqZljhoW$>`&(25*7G?ZA_-O&jvQMd3s?+=6=ac?4HulGk z;Q*I=DQpgODjIJB7hqNYSaZ-`L~zDf%yqK)j;Wrw;AIxxdwOZ>_m_!hswBefHuB}@ z-U#~@^NkdK^8C`!?)ivz*6+mG3Pa4^_Xg#}GN5tqTb1Cf;f&03;V_x%&`0~sAc3`< zfRbt-5Jw`Ri;%2AoVm2%)6Vh5V*pb#n9O zbK4aczBwR3oy^&k*^>p-aoP-fyd-UEQ(JK^h_M_xM}tQMives^i=RoK3RB7HN%7;2 z@>J@6I)Pm&91kU2>6C6=odRg&6Z{cTo4Z*=DITsK@GR;%Nvq^;%ujp#kEAV7it1DEr)|D!b;Nsr9kwD>)N*}x!F@F z{=&V8d`5cS1d^iUmYHP>5bdpvUnj@Hv6}>8xo{qm!Z6W92+XeEY^6`nh(W=Im#>)! zB)eaUGV$LmxP3}X(kDYhf|ZygjNgD9JV7Tuq>i3v^#{S;3CotbLNF$L5QGKn63T!q zJMjWG?PUgv$%S5WkI*zl?lmE>2x-WS>MZ~%7iuf;%9gHb;r-k^0qBw3_1muQF%069 zT3D1>fg(!?OZ*S&&8v*reHS&4)%Qsb%zy7*{#m}Wtt!zok7FVCECNQOP%MwR#i$6} z5?+D|4DT$fn7z)%3q=3iuMoPXSMzT?_l&<|X)bxF19Klu2&f(jYCJ6vj1hpDnwVYc z42gCPxt(ylPt3xKcq9=3t{oBz$FTT6uXRYaws*$IIC20@E?~TnFDIX2Z0^cCR<{$N z9O3*Q(EH+$_2T1$fj2=h`Ajeqp>O){`Pu|c`i35QgenFf7pgsMmATbmiInRDJ1@W< zC3O4vQ@5!A&)QyQ;=2?N--4`3M_V6rsHL6SA&VjD;k@$7nl%K;SsQ=U1RH3+a2r)v zv=rO^9=G8}y?(>qbXbKTf;Tnpf?<|ZD=vZv-TlBsn?tQIkw>vOi@~MmGWT0z<5z>r zopymjbLgA+bdF8>b7|_I1_TUah zq?>T2?De>7H4@>Hi;zzqN|%A(p=CtgjIk%b!i;+;tCdD54+ZyUOeYfj{-EAXixKkn zEnzgyfivSukvHt+xbc0IH8810Pp*lQ9Rj-g2b~uzk|87M`CQt)9Lo82tSIc^8aBt>vS(D zI}t#_St0?!^(C1qlJ+Yi=G_VCeO5~Kg0vAoK9Tmi!Z-m2Z) z9;Yw{Jx@Mo;?%%2mpZwytHG*NYmW%crC%p|Bme~8fh$x|d|hnzJ{?1(OKmP~PXA<` zi1KrD4&>Mw4+ooESOl>NZgmQ0-#MG(WdDmLT}|lm5{OeqT9=$S>EaTH=27!18rr&{ zB7kFZKjN>cT4bvBB?e4UR8K*3VF*3wW#Slf-FGV%VdJRHR#>pd+4+lndd7>A`;*{eX+DDUj1Vo^S{ZAQKH$E3U|v#EpSg_xUNI`E6dMl- z^=k8!XENfpL~+@6PV2q06yCS|O>ArEOMOfAsE3ZJVq&)>T?BRZz?k zMBs%y+9Q6{#!`#B=|1!9#a`YIbq>Y23Y_F)vFlq}wwD}v=r)NF81bUSjnex!_xBy$ zb)hqc_4g8v=2#~>jn9_}YD8iNw^)Jvjszw-}i)rFJ-#N@cJB;lmc;(yMtIwXE&VC@e-DYwrR zhHM(VwU5ZPxj(p-xK;7~C&6EXJt0(2sSwYY@I7TmD1~bVq112blavi_gnWp2k9%}$ zUrZfD!?&=ZxTm*riNfF?$S-qtF34C=(*jD;v|?AYjgbwzr@7Bl*ny*zE^DusM%CFm zOT8>S4$PZ2qt(S6Spz!Hzxk-@^^zUzzuM!F_MwA2NiY|4IgpLhp`ucOk2E;man5KL z48Vx+;1yMHu{KcwUUVrUpglg%iFDsCkQFUzHXbyQ@Xz_qkm4C(CMe#)Utt={Y6BOv?+j$uNBPFCG-PN6 zm9tf3u_c81DaY4qI9x7^m+|{?AElu5g*?MCDe5WUBKK_3-F={<_Gv-o7a@bUTCdeU zv8*g5P%>TOAVTKUa}N)3qb&CB_g}hb+%UigV%!;y(8(9J3E4fFv66ACp&BYnfnTIF z_IHwRQU;8;_+v);eLUDuc*Y@a9n_D~~9^=RS8o#NWL}g*w=j3j!mULa$;Ax{DSj5iTV75M7 zf00wd;rcX2HB5k=<-w8T5A*a$z(i@WKfnPn!gCi>meD#3ZKsXJY0^twl5cAv_s%fx zs$>1{#!;f``J9=6z`PS}sGmi)=sx09nGAvGc!+J6KZ`h%fBCW+cWFXP&T(XVHUF6Y z27ISPQJtcaCO^wMW|K^RyZU(@qj#)v-PAkC(2N7hBKt ze7khf`}k++P+@ax@eK#6|JIrC7}PlT4m|swdx7lh?XZ)4CbB9iBDMz%@@JY)C!R8r z9a483PQPU8k@=MBZKKy1_U47XlP)x)_mOQQWhva_(p#nd;ewI!-gE8MIa!D1AJ0a+ z(oQ8(-74vgntm0_I0)Zp%loFKgEM+|zGl7nr}rdG;b%$%r(nC#12XGCQh~1NBQyD} ziRPa_7N#F)dEMQxd9e5wNx#*>lpw zc4z9IDo5(TY7omrtXmLPk`7{n0Lxs-~}z$eSxs79M3^Luy^H{lB(Lgk^RUTxBpHm?M!=zulTf;SBf#vPO4e|PXm0FGfo zqeyv8F?=_;sV}dZE0jAJ%JN+&Tt1+|SHglRzza%v2~sp=%KSH=Qve514|0OLY(Ip% zteOB!WL@Uy^==7(;}ZoHokOFKdfzplZ}vy0s(?=53iORX62ekSf_IxKk-l@I_`|&s zUj7h!Wn0S1Aob0KZOavpR70j}fe~Ve7TAZ2ts&3gYy8k$l{I3`?4q{5m#Dd>lIv3M^{+4dnn58} z-NF#v*AAv)S9%OLU7U$y3Kgd~kk_bxnMF#Obe$0vBhL4M9V~2FcpzD}jim6e7T9(Nm(lj5Wje2JsP60C2y<^wB~@q-}o zXTb@ukuJf4BZ?MJ3Aa`XzOnA-=5B>%_o|Gz<8z~P)Cpa|sB=+WcCKcgT|uB-?nAxJBb zm#Zf)M#GDBz4#9VP0q<=5tw8cc*XGbk!gAhrt}to5hqq5#l4Mjl-z75{u?!&)G7yW z5@X>R=$I;6{BmO+7tWvW{15mGm(xde?1y3N3nY+;{@B}qZWawj4S}f`=q7>JHoE(6~_-5Yo@Vq0s{|Ar36n8*7!#nQmKDVBzl_R?jrhyQU9e&i5u{^H7K^YQZB0d*%j$=i>;yY zYBUYgnfB6+@#<14KD;vAFkHJCw$w4`9$+uiUFX$&tifDw%=h31PsaGg4^zBcmmZ7L z=}5Q*Agy3yFULQwEJ;^Cr(9}U5%qxdy!HFlVBm0HF5<=eRnEpwQ7hwi_g`pQ-#w~V zQ&H-#=6+dKI6h#4`(2hfrAB%uE#uJ-N3T>n<#!v3kd7Rij)aWgVmIP%Hby;k1|C!V z4zIU<^-w_a64U8zFzpT-jjZo8MO9f_aO73JkxpsYUDmP}AVMIZqFt2zWM81ncp#8{bH0bJ>#{5JUA15XZf*RG9%i2XNM^7 z`F6;kN23A^T6{YJO{)r?#=CnbxE(M-SgxOemy%2W>3sf=_<1ewzS=@>kmb9?b9Sl2 zxUPHA`zo%XtU{fBZfBLqrk}jO;BIgIm14CJf$EkIvaU_mZOe_-D8|0?Q>Qm97ueSF zzNQ<-`&Q%pR@Q=eG_kE#?ws!#C#XFv`Sw}cJmfJcN~L>YUPbnNCs&ZcEk;LVzcox} zT`hBSI$rKvCNElvNRCGOWyl|U_Bz4+(;e1nm7g0)Rosu?oYu1pZl|9XvXt(+&KNdP zaO6)v&#dSnb~DpSr5VR7>bOh#==il>5A+3d^|{U)xj~@|+s^cs4N4RTf_Z@anP6UG z&4o8+oWQeS zcD4}Yc6L&5Uhgd{&J%P(b@yOjjq4;^x7Cj#{2obvfHll|gMgO^<4M11oiv}5*e}Rd VF_uS#fWN&1RPJcrE>ysV{9iGSqQn3I literal 0 HcmV?d00001 diff --git a/resources/folder.png b/resources/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..7582a4a2752c2ca0ac848f66318506bd3c64924a GIT binary patch literal 586 zcmeAS@N?(olHy`uVBq!ia0vp^^&rf_0wi;`T%7@=n3BBRT^Rni_n+Ah4nJ za0`PlBg3pY5H=O_J^D-f{NmeV&@JqFfiWsba4!+xb^mqevzo7!10gw^UFSc zdKGBcc}RhI4nzAxsfcrp58384Jd*1W5o`8gDPS;=`1H(Qd76VL+d)0kC$-V*Zmd23 zRU^UK@S{P^$?#Q68N=g;qEyOY|r+CkF2?-hRU7jypj?B(;%HL`J4 zQ(u34d3EyjO-T`THwu5gx%}9-J2SEFw*U8geCM_=dHdCGw$w%wd;i;i>kGafy>jLA zqnqW|FTG##;ULK1_&a}oK2Lh{bc@sV?8-X_n=FZaDJ;&~bmTtXD(DiqJ?w+=gTKsx*bmfmfPr99-zIo(qS$L+pZu70u z3#LA|#mny6@2dZ1=-n0Lyz<;1v#nR_D*A63{PDb6YxlcP$93M%xWePEa;^I3<6gl% zN;SqGd$(yK>!!V)^>`Os_lGB|ei&|A^F--+^P}C*Jc6cO+P-`Jt#fZ1eoU&i{CBFQ w%u_0@@815q3|}8?_P>i9@OFQ0OWkJ_5-&OSBdd2SFy Date: Sat, 21 Apr 2018 23:57:57 +0200 Subject: [PATCH 287/603] Fix md_name not fading out --- es-app/src/views/gamelist/DetailedGameListView.cpp | 1 + es-app/src/views/gamelist/GridGameListView.cpp | 1 + es-app/src/views/gamelist/VideoGameListView.cpp | 1 + 3 files changed, 3 insertions(+) diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 42d3ddcaed..247c92d103 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -223,6 +223,7 @@ void DetailedGameListView::updateInfoPanel() std::vector comps = getMDValues(); comps.push_back(&mImage); comps.push_back(&mDescription); + comps.push_back(&mName); std::vector labels = getMDLabels(); comps.insert(comps.cend(), labels.cbegin(), labels.cend()); diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index e53cb79745..66c827f80d 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -267,6 +267,7 @@ void GridGameListView::updateInfoPanel() std::vector comps = getMDValues(); comps.push_back(&mDescription); + comps.push_back(&mName); std::vector labels = getMDLabels(); comps.insert(comps.cend(), labels.cbegin(), labels.cend()); diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index e9ae420bd0..ee1d06b7bf 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -281,6 +281,7 @@ void VideoGameListView::updateInfoPanel() comps.push_back(mVideo); comps.push_back(&mDescription); comps.push_back(&mImage); + comps.push_back(&mName); std::vector labels = getMDLabels(); comps.insert(comps.cend(), labels.cbegin(), labels.cend()); From bfddb95ba8ef67d1ec5f032f2d68b107627d9ea6 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Tue, 24 Apr 2018 23:33:03 -0400 Subject: [PATCH 288/603] fix git submodule command --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6607bd46d1..df2c1a25fd 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ or ```bash git clone https://github.com/RetroPie/EmulationStation.git cd EmulationStation -git submodule init --update +git submodule update --init ``` Then, generate and build the Makefile with CMake: From ed2511e215560e0c47681d61ef1068eda711142e Mon Sep 17 00:00:00 2001 From: joemommasfat Date: Tue, 24 Apr 2018 23:07:25 -0600 Subject: [PATCH 289/603] add sortname to gamelist.xml to sort by a different name --- es-app/src/FileData.cpp | 8 ++++++++ es-app/src/FileData.h | 1 + es-app/src/FileSorts.cpp | 10 ++++++++-- es-app/src/MetaData.cpp | 2 ++ es-app/src/guis/GuiGamelistOptions.cpp | 8 ++++---- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 9d87823e89..828f43f0c1 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -82,6 +82,14 @@ const std::string& FileData::getName() return metadata.get("name"); } +const std::string& FileData::getSortName() +{ + if (metadata.get("sortname").empty()) + return metadata.get("name"); + else + return metadata.get("sortname"); +} + const std::vector& FileData::getChildrenListToDisplay() { FileFilterIndex* idx = CollectionSystemManager::get()->getSystemToView(mSystem)->getIndex(); diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 28a311b735..343cb056fd 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -37,6 +37,7 @@ class FileData virtual ~FileData(); virtual const std::string& getName(); + virtual const std::string& getSortName(); inline FileType getType() const { return mType; } inline const std::string& getPath() const { return mPath; } inline FileData* getParent() const { return mParent; } diff --git a/es-app/src/FileSorts.cpp b/es-app/src/FileSorts.cpp index 7ba070acae..58b4ba90a1 100644 --- a/es-app/src/FileSorts.cpp +++ b/es-app/src/FileSorts.cpp @@ -42,8 +42,14 @@ namespace FileSorts bool compareName(const FileData* file1, const FileData* file2) { // we compare the actual metadata name, as collection files have the system appended which messes up the order - std::string name1 = Utils::String::toUpper(file1->metadata.get("name")); - std::string name2 = Utils::String::toUpper(file2->metadata.get("name")); + std::string name1 = Utils::String::toUpper(file1->metadata.get("sortname")); + std::string name2 = Utils::String::toUpper(file2->metadata.get("sortname")); + if(name1.empty()){ + name1 = Utils::String::toUpper(file1->metadata.get("name")); + } + if(name2.empty()){ + name2 = Utils::String::toUpper(file2->metadata.get("name")); + } return name1.compare(name2) < 0; } diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 4db852dde2..8a977e9509 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -7,6 +7,7 @@ MetaDataDecl gameDecls[] = { // key, type, default, statistic, name in GuiMetaDataEd, prompt in GuiMetaDataEd {"name", MD_STRING, "", false, "name", "enter game name"}, + {"sortname", MD_STRING, "", false, "sortname", "enter game sort name"}, {"desc", MD_MULTILINE_STRING, "", false, "description", "enter description"}, {"image", MD_PATH, "", false, "image", "enter path to image"}, {"video", MD_PATH , "", false, "video", "enter path to video"}, @@ -28,6 +29,7 @@ const std::vector gameMDD(gameDecls, gameDecls + sizeof(gameDecls) MetaDataDecl folderDecls[] = { {"name", MD_STRING, "", false, "name", "enter game name"}, + {"sortname", MD_STRING, "", false, "sortname", "enter game sort name"}, {"desc", MD_MULTILINE_STRING, "", false, "description", "enter description"}, {"image", MD_PATH, "", false, "image", "enter path to image"}, {"thumbnail", MD_PATH, "", false, "thumbnail", "enter path to thumbnail"}, diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 5018816563..300a1e4104 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -30,7 +30,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui char startChar = '!'; char endChar = '_'; - char curChar = (char)toupper(getGamelist()->getCursor()->getName()[0]); + char curChar = (char)toupper(getGamelist()->getCursor()->getSortName()[0]); if(curChar < startChar || curChar > endChar) curChar = startChar; @@ -41,7 +41,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui const std::vector& files = getGamelist()->getCursor()->getParent()->getChildrenListToDisplay(); for (auto file : files) { - char candidate = (char)toupper(file->getName()[0]); + char candidate = (char)toupper(file->getSortName()[0]); if (c == candidate) { mJumpToLetterList->add(std::string(1, c), c, c == curChar); @@ -218,11 +218,11 @@ void GuiGamelistOptions::jumpToLetter() if(files.at(mid)->getName().empty()) continue; - char checkLetter = (char)toupper(files.at(mid)->getName()[0]); + char checkLetter = (char)toupper(files.at(mid)->getSortName()[0]); if(checkLetter < letter) min = mid + 1; - else if(checkLetter > letter || (mid > 0 && (letter == toupper(files.at(mid - 1)->getName()[0])))) + else if(checkLetter > letter || (mid > 0 && (letter == toupper(files.at(mid - 1)->getSortName()[0])))) max = mid - 1; else break; //exact match found From 918ecbe493ae0d9600d2d8bfafef560ec2e77043 Mon Sep 17 00:00:00 2001 From: Koerty Date: Sat, 21 Apr 2018 15:23:10 +0200 Subject: [PATCH 290/603] Rewrite NinePatchComponent to handle images of all sizes - Rewrite NinePatchComponent to handle images with a different size than 48x48 px - It's now possible to change the border sizes using setCornerSize function --- es-core/src/components/NinePatchComponent.cpp | 108 ++++++------------ es-core/src/components/NinePatchComponent.h | 7 +- 2 files changed, 43 insertions(+), 72 deletions(-) diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index 994ba5838b..5a2e39e11d 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -6,7 +6,8 @@ #include "ThemeData.h" NinePatchComponent::NinePatchComponent(Window* window, const std::string& path, unsigned int edgeColor, unsigned int centerColor) : GuiComponent(window), - mEdgeColor(edgeColor), mCenterColor(centerColor), + mCornerSize(16, 16), + mEdgeColor(edgeColor), mCenterColor(centerColor), mPath(path), mVertices(NULL), mColors(NULL) { @@ -51,83 +52,44 @@ void NinePatchComponent::buildVertices() mColors = new GLubyte[6 * 9 * 4]; updateColors(); - const Vector2f ts = Vector2f((float)mTexture->getSize().x(), (float)mTexture->getSize().y()); + const Vector2f texSize = Vector2f((float)mTexture->getSize().x(), (float)mTexture->getSize().y()); - //coordinates on the image in pixels, top left origin - const Vector2f pieceCoords[9] = { - Vector2f(0, 0), - Vector2f(16, 0), - Vector2f(32, 0), - Vector2f(0, 16), - Vector2f(16, 16), - Vector2f(32, 16), - Vector2f(0, 32), - Vector2f(16, 32), - Vector2f(32, 32), - }; + float imgSizeX[3] = {mCornerSize.x(), mSize.x() - mCornerSize.x() * 2, mCornerSize.x()}; + float imgSizeY[3] = {mCornerSize.y(), mSize.y() - mCornerSize.y() * 2, mCornerSize.y()}; + float imgPosX[3] = {0, imgSizeX[0], imgSizeX[0] + imgSizeX[1]}; + float imgPosY[3] = {0, imgSizeY[0], imgSizeY[0] + imgSizeY[1]}; - const Vector2f pieceSizes = getCornerSize(); - - //corners never stretch, so we calculate a width and height for slices 1, 3, 5, and 7 - float borderWidth = mSize.x() - (pieceSizes.x() * 2); //should be pieceSizes[0] and pieceSizes[2] - //if(borderWidth < pieceSizes.x()) - // borderWidth = pieceSizes.x(); - - float borderHeight = mSize.y() - (pieceSizes.y() * 2); //should be pieceSizes[0] and pieceSizes[6] - //if(borderHeight < pieceSizes.y()) - // borderHeight = pieceSizes.y(); - - mVertices[0 * 6].pos = pieceCoords[0]; //top left - mVertices[1 * 6].pos = pieceCoords[1]; //top middle - mVertices[2 * 6].pos = pieceCoords[1] + Vector2f(borderWidth, 0); //top right - - mVertices[3 * 6].pos = mVertices[0 * 6].pos + Vector2f(0, pieceSizes.y()); //mid left - mVertices[4 * 6].pos = mVertices[3 * 6].pos + Vector2f(pieceSizes.x(), 0); //mid middle - mVertices[5 * 6].pos = mVertices[4 * 6].pos + Vector2f(borderWidth, 0); //mid right - - mVertices[6 * 6].pos = mVertices[3 * 6].pos + Vector2f(0, borderHeight); //bot left - mVertices[7 * 6].pos = mVertices[6 * 6].pos + Vector2f(pieceSizes.x(), 0); //bot middle - mVertices[8 * 6].pos = mVertices[7 * 6].pos + Vector2f(borderWidth, 0); //bot right + //the "1 +" in posY and "-" in sizeY is to deal with texture coordinates having a bottom left corner origin vs. verticies having a top left origin + float texSizeX[3] = {mCornerSize.x() / texSize.x(), (texSize.x() - mCornerSize.x() * 2) / texSize.x(), mCornerSize.x() / texSize.x()}; + float texSizeY[3] = {-mCornerSize.y() / texSize.y(), -(texSize.y() - mCornerSize.y() * 2) / texSize.y(), -mCornerSize.y() / texSize.y()}; + float texPosX[3] = {0, texSizeX[0], texSizeX[0] + texSizeX[1]}; + float texPosY[3] = {1, 1 + texSizeY[0], 1 + texSizeY[0] + texSizeY[1]}; int v = 0; for(int slice = 0; slice < 9; slice++) { - Vector2f size; - - //corners - if(slice == 0 || slice == 2 || slice == 6 || slice == 8) - size = pieceSizes; - - //vertical borders - if(slice == 1 || slice == 7) - size = Vector2f(borderWidth, pieceSizes.y()); + int sliceX = slice % 3; + int sliceY = slice / 3; - //horizontal borders - if(slice == 3 || slice == 5) - size = Vector2f(pieceSizes.x(), borderHeight); + Vector2f imgPos = Vector2f(imgPosX[sliceX], imgPosY[sliceY]); + Vector2f imgSize = Vector2f(imgSizeX[sliceX], imgSizeY[sliceY]); - //center - if(slice == 4) - size = Vector2f(borderWidth, borderHeight); - - //no resizing will be necessary - //mVertices[v + 0] is already correct - mVertices[v + 1].pos = mVertices[v + 0].pos + size; - mVertices[v + 2].pos = Vector2f(mVertices[v + 0].pos.x(), mVertices[v + 1].pos.y()); - - mVertices[v + 3].pos = Vector2f(mVertices[v + 1].pos.x(), mVertices[v + 0].pos.y()); + mVertices[v + 0].pos = imgPos; + mVertices[v + 1].pos = imgPos + Vector2f(0, imgSize.y()); + mVertices[v + 2].pos = imgPos + Vector2f(imgSize.x(), 0); + mVertices[v + 3].pos = mVertices[v + 2].pos; mVertices[v + 4].pos = mVertices[v + 1].pos; - mVertices[v + 5].pos = mVertices[v + 0].pos; + mVertices[v + 5].pos = imgPos + imgSize; - //texture coordinates - //the y = (1 - y) is to deal with texture coordinates having a bottom left corner origin vs. verticies having a top left origin - mVertices[v + 0].tex = Vector2f(pieceCoords[slice].x() / ts.x(), 1 - (pieceCoords[slice].y() / ts.y())); - mVertices[v + 1].tex = Vector2f((pieceCoords[slice].x() + pieceSizes.x()) / ts.x(), 1 - ((pieceCoords[slice].y() + pieceSizes.y()) / ts.y())); - mVertices[v + 2].tex = Vector2f(mVertices[v + 0].tex.x(), mVertices[v + 1].tex.y()); + Vector2f texPos = Vector2f(texPosX[sliceX], texPosY[sliceY]); + Vector2f texSize = Vector2f(texSizeX[sliceX], texSizeY[sliceY]); - mVertices[v + 3].tex = Vector2f(mVertices[v + 1].tex.x(), mVertices[v + 0].tex.y()); + mVertices[v + 0].tex = texPos; + mVertices[v + 1].tex = texPos + Vector2f(0, texSize.y()); + mVertices[v + 2].tex = texPos + Vector2f(texSize.x(), 0); + mVertices[v + 3].tex = mVertices[v + 2].tex; mVertices[v + 4].tex = mVertices[v + 1].tex; - mVertices[v + 5].tex = mVertices[v + 0].tex; + mVertices[v + 5].tex = texPos + texSize; v += 6; } @@ -180,9 +142,15 @@ void NinePatchComponent::onSizeChanged() buildVertices(); } -Vector2f NinePatchComponent::getCornerSize() const +const Vector2f& NinePatchComponent::getCornerSize() const +{ + return mCornerSize; +} + +void NinePatchComponent::setCornerSize(int sizeX, int sizeY) { - return Vector2f(16, 16); + mCornerSize = Vector2f(sizeX, sizeY); + buildVertices(); } void NinePatchComponent::fitTo(Vector2f size, Vector3f position, Vector2f padding) @@ -191,8 +159,8 @@ void NinePatchComponent::fitTo(Vector2f size, Vector3f position, Vector2f paddin position[0] -= padding.x() / 2; position[1] -= padding.y() / 2; - setSize(size + Vector2f(getCornerSize().x() * 2, getCornerSize().y() * 2)); - setPosition(-getCornerSize().x() + position.x(), -getCornerSize().y() + position.y()); + setSize(size + mCornerSize * 2); + setPosition(-mCornerSize.x() + position.x(), -mCornerSize.y() + position.y()); } void NinePatchComponent::setImagePath(const std::string& path) diff --git a/es-core/src/components/NinePatchComponent.h b/es-core/src/components/NinePatchComponent.h index 5d08ecd64d..af9e3b9343 100644 --- a/es-core/src/components/NinePatchComponent.h +++ b/es-core/src/components/NinePatchComponent.h @@ -37,9 +37,11 @@ class NinePatchComponent : public GuiComponent virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; -private: - Vector2f getCornerSize() const; + const Vector2f& getCornerSize() const; + void setCornerSize(int sizeX, int sizeY); + inline void setCornerSize(const Vector2f& size) { setCornerSize(size.x(), size.y()); } +private: void buildVertices(); void updateColors(); @@ -53,6 +55,7 @@ class NinePatchComponent : public GuiComponent GLubyte* mColors; std::string mPath; + Vector2f mCornerSize; unsigned int mEdgeColor; unsigned int mCenterColor; std::shared_ptr mTexture; From a52a2f55976cf4e45e2105bdfd28b1d4be19a83f Mon Sep 17 00:00:00 2001 From: Koerty Date: Mon, 30 Apr 2018 20:59:05 +0200 Subject: [PATCH 291/603] Change grid creation flow - This changes make sure the buildTiles function is called only one time, at the end of the applyTheme function. - The buildTiles function now call calcGridDimension as both are linked to the same events --- es-core/src/components/ImageGridComponent.h | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index da5769cdc1..33d462c141 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -91,8 +91,6 @@ ImageGridComponent::ImageGridComponent(Window* window) : IList @@ -166,7 +164,6 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) if(mEntriesDirty) { - buildTiles(); updateTiles(); mEntriesDirty = false; } @@ -193,7 +190,10 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) template void ImageGridComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { - GuiComponent::applyTheme(theme, view, element, properties); + using namespace ThemeFlags; + + // Apply theme to GuiComponent but not size property, which will be applied at the end of this function + GuiComponent::applyTheme(theme, view, element, properties ^ SIZE); // Keep the theme pointer to apply it on the tiles later on mTheme = theme; @@ -262,8 +262,8 @@ void ImageGridComponent::applyTheme(const std::shared_ptr& theme, elem->get("size") * screen : GridTileComponent::getDefaultTileSize(); - // Recalculate grid dimension after theme changed - calcGridDimension(); + // Apply size property, will trigger a call to onSizeChanged() which will build the tiles + GuiComponent::applyTheme(theme, view, element, SIZE); } template @@ -288,6 +288,8 @@ void ImageGridComponent::buildTiles() { mTiles.clear(); + calcGridDimension(); + Vector2f startPosition = mTileSize / 2; Vector2f tileDistance = mTileSize + mMargin; @@ -321,9 +323,6 @@ void ImageGridComponent::buildTiles() template void ImageGridComponent::updateTiles() { - if(mTiles.empty()) - buildTiles(); - int img = getStartPosition(); for(int ti = 0; ti < mTiles.size(); ti++) From c80bb7ae8bee8c7b2d1ca5fb144ef23a963c5691 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Wed, 2 May 2018 19:09:32 -0400 Subject: [PATCH 292/603] document color option for RatingComponent --- THEMES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/THEMES.md b/THEMES.md index 970bd47cbc..311b6de0e8 100644 --- a/THEMES.md +++ b/THEMES.md @@ -719,6 +719,8 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice - Path to the "filled star" image. Image must be square (width equals height). * `unfilledPath` - type: PATH. - Path to the "unfilled star" image. Image must be square (width equals height). +* `color` - type: COLOR. + - Multiply each pixel's color by this color. For example, an all-white image with `FF0000` would become completely red. You can also control the transparency of an image with `FFFFFFAA` - keeping all the pixels their normal color and only affecting the alpha channel. * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. From fef505639fabd7af77dba7da005a0d551de71495 Mon Sep 17 00:00:00 2001 From: Koerty Date: Tue, 17 Apr 2018 18:05:33 +0200 Subject: [PATCH 293/603] Enable the grid view for everyone --- es-app/src/guis/GuiMenu.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 9e8a0a7c72..4cf41badc6 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -274,10 +274,7 @@ void GuiMenu::openUISettings() styles.push_back("basic"); styles.push_back("detailed"); styles.push_back("video"); - - // Temporary "hack" so ES don't crash when leaving this menu after he enabled the grid by tweaking config file - if (Settings::getInstance()->getString("GamelistViewStyle") == "grid") - styles.push_back("grid"); + styles.push_back("grid"); for (auto it = styles.cbegin(); it != styles.cend(); it++) gamelist_style->add(*it, *it, Settings::getInstance()->getString("GamelistViewStyle") == *it); From 80456f566af19d0cfbdb3da3b4e26a5b68bc62f6 Mon Sep 17 00:00:00 2001 From: Koerty Date: Wed, 9 May 2018 17:01:34 +0200 Subject: [PATCH 294/603] Partially display the last row if grid number of row isn't an integer - Also fix 2 bugs introduced by #428 - Also add log error message if grid dimensions are below 1 --- es-core/src/components/ImageGridComponent.h | 51 ++++++++++++++++++--- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 33d462c141..0e40037592 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -66,6 +66,7 @@ class ImageGridComponent : public IList std::shared_ptr mDefaultFolderTexture; // TILES + bool mLastRowPartial; Vector2f mMargin; Vector2f mTileSize; Vector2i mGridDimension; @@ -168,6 +169,17 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) mEntriesDirty = false; } + // Create a clipRect to hide tiles used to buffer texture loading + float scaleX = trans.r0().x(); + float scaleY = trans.r1().y(); + + Vector2i pos((int)Math::round(trans.translation()[0]), (int)Math::round(trans.translation()[1])); + Vector2i size((int)Math::round(mSize.x() * scaleX), (int)Math::round(mSize.y() * scaleY)); + + Renderer::pushClipRect(pos, size); + + // Render all the tiles but the selected one + std::shared_ptr selectedTile = NULL; for(auto it = mTiles.begin(); it != mTiles.end(); it++) { @@ -180,6 +192,8 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) tile->render(trans); } + Renderer::popClipRect(); + // Render the selected image on top of the others if (selectedTile != NULL) selectedTile->render(trans); @@ -264,6 +278,10 @@ void ImageGridComponent::applyTheme(const std::shared_ptr& theme, // Apply size property, will trigger a call to onSizeChanged() which will build the tiles GuiComponent::applyTheme(theme, view, element, SIZE); + + // Trigger the call manually if the theme have no "imagegrid" element + if (!elem) + buildTiles(); } template @@ -323,6 +341,9 @@ void ImageGridComponent::buildTiles() template void ImageGridComponent::updateTiles() { + if (!mTiles.size()) + return; + int img = getStartPosition(); for(int ti = 0; ti < mTiles.size(); ti++) @@ -350,17 +371,24 @@ void ImageGridComponent::updateTiles() template int ImageGridComponent::getStartPosition() const { + // The "partialRow" variable exist because we want to keep the same positioning behavior in both + // case, whenever we have an integer number of rows or not (the last partial row is ignored when + // calculating position and the cursor shouldn't end up in this row when close to the end) + int partialRow = (int)mLastRowPartial; + if ((int)mEntries.size() < mGridDimension.x() * (mGridDimension.y() - (int)mLastRowPartial)) + partialRow = 0; + int cursorRow = mCursor / mGridDimension.x(); - int start = (cursorRow - (mGridDimension.y() / 2)) * mGridDimension.x(); + int start = (cursorRow - ((mGridDimension.y() - partialRow) / 2)) * mGridDimension.x(); // If we are at the end put the row as close as we can and no higher, using the following formula // Where E is the nb of entries, X the grid x dim (nb of column), Y the grid y dim (nb of line) // start = first tile of last row - nb column * (nb line - 1) // = (E - 1) / X * X - X * (Y - 1) // = X * ((E - 1) / X - Y + 1) - if(start + (mGridDimension.x() * mGridDimension.y()) >= (int)mEntries.size()) - start = mGridDimension.x() * (((int)mEntries.size() - 1) / mGridDimension.x() - mGridDimension.y() + 1); + if(start + (mGridDimension.x() * (mGridDimension.y() - partialRow)) >= (int)mEntries.size()) + start = mGridDimension.x() * (((int)mEntries.size() - 1) / mGridDimension.x() - mGridDimension.y() + 1 + partialRow); if(start < 0) start = 0; @@ -376,9 +404,20 @@ void ImageGridComponent::calcGridDimension() // <=> COLUMNS = (GRID_SIZE + MARGIN) / (TILE_SIZE + MARGIN) Vector2f gridDimension = (mSize + mMargin) / (mTileSize + mMargin); - mGridDimension = mScrollDirection == SCROLL_VERTICALLY ? - Vector2i(gridDimension.x(), gridDimension.y()) : - Vector2i(gridDimension.y(), gridDimension.x()); + // Invert dimensions for horizontally scrolling grid + if (mScrollDirection == SCROLL_HORIZONTALLY) + gridDimension = Vector2f(gridDimension.y(), gridDimension.x()); + + mLastRowPartial = Math::floorf(gridDimension.y()) != gridDimension.y(); + + // Ceil y dim so we can display partial last row + mGridDimension = Vector2i(gridDimension.x(), Math::ceilf(gridDimension.y())); + + // Grid dimension validation + if (mGridDimension.x() < 1) + LOG(LogError) << "Theme defined grid X dimension below 1"; + if (mGridDimension.y() < 1) + LOG(LogError) << "Theme defined grid Y dimension below 1"; }; From c080ffb2c31ab2f85bc6868cdbdffdc59cf5f204 Mon Sep 17 00:00:00 2001 From: Koerty Date: Thu, 10 May 2018 23:43:08 +0200 Subject: [PATCH 295/603] NinePatch now position correctly when origin is different from 0 0 --- es-core/src/components/GridTileComponent.cpp | 1 - es-core/src/components/NinePatchComponent.cpp | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp index 9e4f6f8103..e5fa86a6a0 100644 --- a/es-core/src/components/GridTileComponent.cpp +++ b/es-core/src/components/GridTileComponent.cpp @@ -144,7 +144,6 @@ void GridTileComponent::resize() mImage->setMaxSize(currentProperties.mSize - currentProperties.mPadding); mBackground.fitTo(currentProperties.mSize - Vector2f(32.0f, 32.0f)); // (32f, 32f) the NinePatchComponent natural padding - mBackground.setPosition(getSize().x() / 2, getSize().y() / 2); } const GridTileProperties& GridTileComponent::getCurrentProperties() const diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index 5a2e39e11d..fedf95115b 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -160,7 +160,8 @@ void NinePatchComponent::fitTo(Vector2f size, Vector3f position, Vector2f paddin position[1] -= padding.y() / 2; setSize(size + mCornerSize * 2); - setPosition(-mCornerSize.x() + position.x(), -mCornerSize.y() + position.y()); + setPosition(position.x() + Math::lerp(-mCornerSize.x(), mCornerSize.x(), mOrigin.x()), + position.y() + Math::lerp(-mCornerSize.y(), mCornerSize.y(), mOrigin.y())); } void NinePatchComponent::setImagePath(const std::string& path) From 9f10b61dfad8067422794d9e7714bbf913d1e952 Mon Sep 17 00:00:00 2001 From: Koerty Date: Thu, 10 May 2018 22:26:29 +0200 Subject: [PATCH 296/603] Add 3 new theming properties to the grid tile background Add 3 new theming properties to the grid tile background : - backgroundCornerSize - backgroundCenterColor - backgroundEdgeColor --- THEMES.md | 12 +++- es-core/src/ThemeData.cpp | 7 ++- es-core/src/components/GridTileComponent.cpp | 60 +++++++++++++++----- es-core/src/components/GridTileComponent.h | 6 +- 4 files changed, 65 insertions(+), 20 deletions(-) diff --git a/THEMES.md b/THEMES.md index 311b6de0e8..bf9c62913f 100644 --- a/THEMES.md +++ b/THEMES.md @@ -598,12 +598,18 @@ Can be created as an extra. - The size of the default gridtile is used to calculate how many tiles can fit in the imagegrid. If not explicitly set, the size of the selected gridtile is equal the size of the default gridtile * 1.2 * `padding` - type: NORMALIZED_PAIR. - The padding around the gridtile content. Default `16 16`. If not explicitly set, the selected tile padding will be equal to the default tile padding. -* `backgroundImage` - type: PATH. - - If not explicitly set, the selected tile background image will be the same as the default tile background image. * `imageColor` - type: COLOR. - The default tile image color and selected tile image color have no influence on each others. +* `backgroundImage` - type: PATH. + - If not explicitly set, the selected tile background image will be the same as the default tile background image. +* `backgroundCornerSize` - type: NORMALIZED_PAIR. + - The corner size of the ninepatch used for the tile background. Default is `16 16`. * `backgroundColor` - type: COLOR. - - The default tile background color and selected tile background color have no influence on each others. + - A shortcut to define both the center color and edge color at the same time. The default tile background color and selected tile background color have no influence on each others. +* `backgroundCenterColor` - type: COLOR. + - Set the color of the center part of the ninepatch. The default tile background center color and selected tile background center color have no influence on each others. +* `backgroundEdgeColor` - type: COLOR. + - Set the color of the edge parts of the ninepatch. The default tile background edge color and selected tile background edge color have no influence on each others. #### video diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index cad63b0f68..fe78e4cee1 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -35,9 +35,12 @@ std::map> The { "gridtile", { { "size", NORMALIZED_PAIR }, { "padding", NORMALIZED_PAIR }, - { "backgroundImage", PATH }, { "imageColor", COLOR }, - { "backgroundColor", COLOR } } }, + { "backgroundImage", PATH }, + { "backgroundCornerSize", NORMALIZED_PAIR }, + { "backgroundColor", COLOR }, + { "backgroundCenterColor", COLOR }, + { "backgroundEdgeColor", COLOR } } }, { "text", { { "pos", NORMALIZED_PAIR }, { "size", NORMALIZED_PAIR }, diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp index e5fa86a6a0..6fcc7f776a 100644 --- a/es-core/src/components/GridTileComponent.cpp +++ b/es-core/src/components/GridTileComponent.cpp @@ -8,15 +8,19 @@ GridTileComponent::GridTileComponent(Window* window) : GuiComponent(window), mBa { mDefaultProperties.mSize = getDefaultTileSize(); mDefaultProperties.mPadding = Vector2f(16.0f, 16.0f); - mDefaultProperties.mBackgroundImage = ":/frame.png"; mDefaultProperties.mImageColor = 0xAAAAAABB; - mDefaultProperties.mBackgroundColor = 0xAAAAEEFF; + mDefaultProperties.mBackgroundImage = ":/frame.png"; + mDefaultProperties.mBackgroundCornerSize = Vector2f(16 ,16); + mDefaultProperties.mBackgroundCenterColor = 0xAAAAEEFF; + mDefaultProperties.mBackgroundEdgeColor = 0xAAAAEEFF; mSelectedProperties.mSize = getSelectedTileSize(); mSelectedProperties.mPadding = mDefaultProperties.mPadding; - mSelectedProperties.mBackgroundImage = mDefaultProperties.mBackgroundImage; mSelectedProperties.mImageColor = 0xFFFFFFFF; - mSelectedProperties.mBackgroundColor = 0xFFFFFFFF; + mSelectedProperties.mBackgroundImage = mDefaultProperties.mBackgroundImage; + mSelectedProperties.mBackgroundCornerSize = mDefaultProperties.mBackgroundCornerSize; + mSelectedProperties.mBackgroundCenterColor = 0xFFFFFFFF; + mSelectedProperties.mBackgroundEdgeColor = 0xFFFFFFFF; mImage = std::make_shared(mWindow); mImage->setOrigin(0.5f, 0.5f); @@ -46,8 +50,8 @@ void GridTileComponent::update() mBackground.setImagePath(currentProperties.mBackgroundImage); mImage->setColorShift(currentProperties.mImageColor); - mBackground.setCenterColor(currentProperties.mBackgroundColor); - mBackground.setEdgeColor(currentProperties.mBackgroundColor); + mBackground.setCenterColor(currentProperties.mBackgroundCenterColor); + mBackground.setEdgeColor(currentProperties.mBackgroundEdgeColor); resize(); } @@ -56,6 +60,7 @@ void GridTileComponent::applyTheme(const std::shared_ptr& theme, cons { Vector2f screen = Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + // Apply theme to the default gridtile const ThemeData::ThemeElement* elem = theme->getElement(view, "default", "gridtile"); if (elem) { @@ -65,16 +70,31 @@ void GridTileComponent::applyTheme(const std::shared_ptr& theme, cons if (elem->has("padding")) mDefaultProperties.mPadding = elem->get("padding"); + if (elem->has("imageColor")) + mDefaultProperties.mImageColor = elem->get("imageColor"); + if (elem->has("backgroundImage")) mDefaultProperties.mBackgroundImage = elem->get("backgroundImage"); - if (elem->has("imageColor")) - mDefaultProperties.mImageColor = elem->get("imageColor"); + if (elem->has("backgroundCornerSize")) + mDefaultProperties.mBackgroundCornerSize = elem->get("backgroundCornerSize"); if (elem->has("backgroundColor")) - mDefaultProperties.mBackgroundColor = elem->get("backgroundColor"); + { + mDefaultProperties.mBackgroundCenterColor = elem->get("backgroundColor"); + mDefaultProperties.mBackgroundEdgeColor = elem->get("backgroundColor"); + } + + if (elem->has("backgroundCenterColor")) + mDefaultProperties.mBackgroundCenterColor = elem->get("backgroundCenterColor"); + + if (elem->has("backgroundEdgeColor")) + mDefaultProperties.mBackgroundEdgeColor = elem->get("backgroundEdgeColor"); } + // Apply theme to the selected gridtile + // NOTE that some of the default gridtile properties influence on the selected gridtile properties + // See THEMES.md for more informations elem = theme->getElement(view, "selected", "gridtile"); mSelectedProperties.mSize = elem && elem->has("size") ? @@ -85,15 +105,28 @@ void GridTileComponent::applyTheme(const std::shared_ptr& theme, cons elem->get("padding") : mDefaultProperties.mPadding; + if (elem && elem->has("imageColor")) + mSelectedProperties.mImageColor = elem->get("imageColor"); + mSelectedProperties.mBackgroundImage = elem && elem->has("backgroundImage") ? elem->get("backgroundImage") : mDefaultProperties.mBackgroundImage; - if (elem && elem->has("imageColor")) - mSelectedProperties.mImageColor = elem->get("imageColor"); + mSelectedProperties.mBackgroundCornerSize = elem && elem->has("backgroundCornerSize") ? + elem->get("backgroundCornerSize") : + mDefaultProperties.mBackgroundCornerSize; if (elem && elem->has("backgroundColor")) - mSelectedProperties.mBackgroundColor = elem->get("backgroundColor"); + { + mSelectedProperties.mBackgroundCenterColor = elem->get("backgroundColor"); + mSelectedProperties.mBackgroundEdgeColor = elem->get("backgroundColor"); + } + + if (elem && elem->has("backgroundCenterColor")) + mSelectedProperties.mBackgroundCenterColor = elem->get("backgroundCenterColor"); + + if (elem && elem->has("backgroundEdgeColor")) + mSelectedProperties.mBackgroundEdgeColor = elem->get("backgroundEdgeColor"); } // Made this a static function because the ImageGridComponent need to know the default tile size @@ -143,7 +176,8 @@ void GridTileComponent::resize() const GridTileProperties& currentProperties = getCurrentProperties(); mImage->setMaxSize(currentProperties.mSize - currentProperties.mPadding); - mBackground.fitTo(currentProperties.mSize - Vector2f(32.0f, 32.0f)); // (32f, 32f) the NinePatchComponent natural padding + mBackground.setCornerSize(currentProperties.mBackgroundCornerSize); + mBackground.fitTo(currentProperties.mSize - mBackground.getCornerSize() * 2); } const GridTileProperties& GridTileComponent::getCurrentProperties() const diff --git a/es-core/src/components/GridTileComponent.h b/es-core/src/components/GridTileComponent.h index cdee62624a..c191ce94ab 100644 --- a/es-core/src/components/GridTileComponent.h +++ b/es-core/src/components/GridTileComponent.h @@ -9,9 +9,11 @@ struct GridTileProperties { Vector2f mSize; Vector2f mPadding; - std::string mBackgroundImage; unsigned int mImageColor; - unsigned int mBackgroundColor; + std::string mBackgroundImage; + Vector2f mBackgroundCornerSize; + unsigned int mBackgroundCenterColor; + unsigned int mBackgroundEdgeColor; }; class GridTileComponent : public GuiComponent From 0928498ef2e79e6a1969bb7888b48351ca673bdc Mon Sep 17 00:00:00 2001 From: John Rassa Date: Fri, 18 May 2018 21:59:44 -0400 Subject: [PATCH 297/603] Fix for Windows build --- es-core/src/components/ImageGridComponent.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 0e40037592..d43b16e343 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -204,10 +204,8 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) template void ImageGridComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { - using namespace ThemeFlags; - // Apply theme to GuiComponent but not size property, which will be applied at the end of this function - GuiComponent::applyTheme(theme, view, element, properties ^ SIZE); + GuiComponent::applyTheme(theme, view, element, properties ^ ThemeFlags::SIZE); // Keep the theme pointer to apply it on the tiles later on mTheme = theme; @@ -277,7 +275,7 @@ void ImageGridComponent::applyTheme(const std::shared_ptr& theme, GridTileComponent::getDefaultTileSize(); // Apply size property, will trigger a call to onSizeChanged() which will build the tiles - GuiComponent::applyTheme(theme, view, element, SIZE); + GuiComponent::applyTheme(theme, view, element, ThemeFlags::SIZE); // Trigger the call manually if the theme have no "imagegrid" element if (!elem) From 5913c9465e683f8e3017c963ce976b2c74e724e4 Mon Sep 17 00:00:00 2001 From: Koerty Date: Sun, 15 Apr 2018 15:20:49 +0200 Subject: [PATCH 298/603] Add extra buffer rows to the grid to load images ahead --- es-core/src/Window.cpp | 2 +- es-core/src/components/ImageGridComponent.h | 111 +++++++++++++++----- 2 files changed, 85 insertions(+), 28 deletions(-) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index b43d567e68..76e935db18 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -209,7 +209,7 @@ void Window::update(int deltaTime) // vram float textureVramUsageMb = TextureResource::getTotalMemUsage() / 1000.0f / 1000.0f; float textureTotalUsageMb = TextureResource::getTotalTextureSize() / 1000.0f / 1000.0f; - float fontVramUsageMb = Font::getTotalMemUsage() / 1000.0f / 1000.0f;; + float fontVramUsageMb = Font::getTotalMemUsage() / 1000.0f / 1000.0f; ss << "\nFont VRAM: " << fontVramUsageMb << " Tex VRAM: " << textureVramUsageMb << " Tex Max: " << textureTotalUsageMb; diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index d43b16e343..7d82728994 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -23,6 +23,7 @@ class ImageGridComponent : public IList { protected: using IList::mEntries; + using IList::mScrollTier; using IList::listUpdate; using IList::listInput; using IList::listRenderTitleOverlay; @@ -47,7 +48,6 @@ class ImageGridComponent : public IList virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; void onSizeChanged() override; - inline void setCursorChangedCallback(const std::function& func) { mCursorChangedCallback = func; } protected: @@ -57,11 +57,15 @@ class ImageGridComponent : public IList // TILES void buildTiles(); void updateTiles(); + void updateTileAtPos(int tilePos, int imgPos, int bufferTop, int bufferBot); int getStartPosition() const; void calcGridDimension(); // IMAGES & ENTRIES + const int texBuffersBehind[4] = { 1, 1, 1, 1 }; + const int texBuffersForward[4] = { 1, 2, 3, 3 }; bool mEntriesDirty; + int mLastCursor; std::shared_ptr mDefaultGameTexture; std::shared_ptr mDefaultFolderTexture; @@ -84,6 +88,7 @@ ImageGridComponent::ImageGridComponent(Window* window) : IList::render(const Transform4x4f& parentTrans) Renderer::pushClipRect(pos, size); // Render all the tiles but the selected one - std::shared_ptr selectedTile = NULL; for(auto it = mTiles.begin(); it != mTiles.end(); it++) { @@ -198,6 +202,8 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) if (selectedTile != NULL) selectedTile->render(trans); + listRenderTitleOverlay(trans); + GuiComponent::renderChildren(trans); } @@ -306,8 +312,8 @@ void ImageGridComponent::buildTiles() calcGridDimension(); - Vector2f startPosition = mTileSize / 2; Vector2f tileDistance = mTileSize + mMargin; + Vector2f startPosition = mTileSize / 2 - Vector2f(0, tileDistance.y() * texBuffersForward[3]); int X, Y; @@ -342,26 +348,69 @@ void ImageGridComponent::updateTiles() if (!mTiles.size()) return; - int img = getStartPosition(); - - for(int ti = 0; ti < mTiles.size(); ti++) + // Stop updating the tiles at highest scroll speed + if (mScrollTier == 3) { - std::shared_ptr tile = mTiles.at(ti); - - // If we have more tiles than we have to display images on screen, hide them - if(img >= size()) + for (int ti = 0; ti < mTiles.size(); ti++) { + std::shared_ptr tile = mTiles.at(ti); + tile->setSelected(false); - tile->setImage(""); + tile->setImage(mDefaultGameTexture); tile->setVisible(false); - continue; } + return; + } - tile->setSelected(img == mCursor); - tile->setImage(mEntries.at(img).data.texture); - tile->setVisible(true); + // 1 if scrolling down, -1 if scrolling up + int scrollDirection = mCursor >= mLastCursor ? 1 : -1; + + // If going down, update from top to bottom + // If going up, update from bottom to top + int ti = scrollDirection == 1 ? 0 : mTiles.size() - 1; + int end = scrollDirection == 1 ? mTiles.size() : -1; + + int img = getStartPosition(); + if (scrollDirection == -1) + img += mTiles.size() - 1; + + // Calculate buffer size depending on scroll speed and direction + int bufferBehind = (texBuffersForward[3] - texBuffersBehind[mScrollTier]) * mGridDimension.x(); + int bufferForward = (texBuffersForward[3] - texBuffersForward[mScrollTier]) * mGridDimension.x(); + + int bufferTop = scrollDirection == 1 ? bufferBehind : bufferForward; + int bufferBot = scrollDirection == 1 ? bufferForward : bufferBehind; + + // Update the tiles + while (ti != end) + { + updateTileAtPos(ti, img, bufferTop, bufferBot); - img++; + ti += scrollDirection; + img += scrollDirection; + } + + mLastCursor = mCursor; +} + +template +void ImageGridComponent::updateTileAtPos(int tilePos, int imgPos, int bufferTop, int bufferBot) +{ + std::shared_ptr tile = mTiles.at(tilePos); + + // If we have more tiles than we have to display images on screen, hide them + if(imgPos < 0 || imgPos >= size() + || tilePos < bufferTop || tilePos >= mTiles.size() - bufferBot) // Same for tiles out of the buffer + { + tile->setSelected(false); + tile->setImage(""); + tile->setVisible(false); + } + else + { + tile->setSelected(imgPos == mCursor); + tile->setImage(mEntries.at(imgPos).data.texture); + tile->setVisible(true); } } @@ -373,23 +422,28 @@ int ImageGridComponent::getStartPosition() const // case, whenever we have an integer number of rows or not (the last partial row is ignored when // calculating position and the cursor shouldn't end up in this row when close to the end) int partialRow = (int)mLastRowPartial; - if ((int)mEntries.size() < mGridDimension.x() * (mGridDimension.y() - (int)mLastRowPartial)) - partialRow = 0; int cursorRow = mCursor / mGridDimension.x(); int start = (cursorRow - ((mGridDimension.y() - partialRow) / 2)) * mGridDimension.x(); - // If we are at the end put the row as close as we can and no higher, using the following formula - // Where E is the nb of entries, X the grid x dim (nb of column), Y the grid y dim (nb of line) - // start = first tile of last row - nb column * (nb line - 1) - // = (E - 1) / X * X - X * (Y - 1) - // = X * ((E - 1) / X - Y + 1) - if(start + (mGridDimension.x() * (mGridDimension.y() - partialRow)) >= (int)mEntries.size()) - start = mGridDimension.x() * (((int)mEntries.size() - 1) / mGridDimension.x() - mGridDimension.y() + 1 + partialRow); + // Number of tiles which are just used as a buffer for texture loading + int bufferSize = texBuffersForward[3] * mGridDimension.x(); - if(start < 0) - start = 0; + if(start + (mGridDimension.x() * (mGridDimension.y() - partialRow)) >= (int)mEntries.size() + bufferSize) + { + // If we are at the end put the row as close as we can and no higher, using the following formula + // Where E is the nb of entries, X the grid x dim (nb of column), Y the grid y dim (nb of line) + // start = first tile of last row - nb column * (nb line - 1) + // = (E - 1) / X * X - X * (Y - 1) + // = X * ((E - 1) / X - Y + 1) + start = mGridDimension.x() * (((int)mEntries.size() - 1) / mGridDimension.x() - mGridDimension.y() + 1 + partialRow) + bufferSize; + } + + if(start < -bufferSize) + { + start = -bufferSize; + } return start; } @@ -416,6 +470,9 @@ void ImageGridComponent::calcGridDimension() LOG(LogError) << "Theme defined grid X dimension below 1"; if (mGridDimension.y() < 1) LOG(LogError) << "Theme defined grid Y dimension below 1"; + + // Add extra tiles to both side depending on max texture buffer + mGridDimension.y() += texBuffersForward[3] * 2; }; From cbc1d02b1bb7dea0adb6a6abfc015d4f1110a431 Mon Sep 17 00:00:00 2001 From: Rael Gugelmin Cunha Date: Thu, 10 May 2018 17:08:04 -0300 Subject: [PATCH 299/603] More restriction on kids mode (#431) --- es-app/src/FileFilterIndex.cpp | 24 ++++++++++--------- es-app/src/guis/GuiGamelistOptions.cpp | 13 ++++++---- .../src/guis/GuiGeneralScreensaverOptions.cpp | 7 ++++++ es-app/src/guis/GuiMenu.cpp | 13 ++++++++-- .../src/guis/GuiVideoScreensaverOptions.cpp | 6 ----- es-app/src/main.cpp | 6 +++++ es-app/src/views/SystemView.cpp | 4 ++-- es-app/src/views/ViewController.cpp | 5 ++-- .../src/views/gamelist/BasicGameListView.cpp | 5 ++-- .../src/views/gamelist/GridGameListView.cpp | 3 ++- es-app/src/views/gamelist/IGameListView.cpp | 3 ++- .../views/gamelist/ISimpleGameListView.cpp | 2 +- es-core/src/Settings.cpp | 3 ++- 13 files changed, 60 insertions(+), 34 deletions(-) diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index b7998a52f7..6d7429cbde 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -247,17 +247,19 @@ void FileFilterIndex::resetFilters() void FileFilterIndex::setUIModeFilters() { - if (!UIModeController::getInstance()->isUIModeFull()) - { - filterByHidden = true; - std::vector val = { "FALSE" }; - setFilter(HIDDEN_FILTER, &val); - } - if (UIModeController::getInstance()->isUIModeKid()) - { - filterByKidGame = true; - std::vector val = { "TRUE" }; - setFilter(KIDGAME_FILTER, &val); + if(!Settings::getInstance()->getBool("ForceDisableFilters")){ + if (!UIModeController::getInstance()->isUIModeFull()) + { + filterByHidden = true; + std::vector val = { "FALSE" }; + setFilter(HIDDEN_FILTER, &val); + } + if (UIModeController::getInstance()->isUIModeKid()) + { + filterByKidGame = true; + std::vector val = { "TRUE" }; + setFilter(KIDGAME_FILTER, &val); + } } } diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 300a1e4104..7510f0c5c5 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -77,11 +77,14 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui mMenu.addWithLabel("SORT GAMES BY", mListSort); } // show filtered menu - row.elements.clear(); - row.addElement(std::make_shared(mWindow, "FILTER GAMELIST", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.addElement(makeArrow(mWindow), false); - row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openGamelistFilter, this)); - mMenu.addRow(row); + if(!Settings::getInstance()->getBool("ForceDisableFilters")) + { + row.elements.clear(); + row.addElement(std::make_shared(mWindow, "FILTER GAMELIST", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.addElement(makeArrow(mWindow), false); + row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openGamelistFilter, this)); + mMenu.addRow(row); + } std::map customCollections = CollectionSystemManager::get()->getCustomCollectionSystems(); diff --git a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp index 40c8a25acc..30688c566c 100644 --- a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp +++ b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp @@ -2,6 +2,7 @@ #include "components/OptionListComponent.h" #include "components/SliderComponent.h" +#include "components/SwitchComponent.h" #include "guis/GuiMsgBox.h" #include "guis/GuiSlideshowScreensaverOptions.h" #include "guis/GuiVideoScreensaverOptions.h" @@ -17,6 +18,12 @@ GuiGeneralScreensaverOptions::GuiGeneralScreensaverOptions(Window* window, const Settings::getInstance()->setInt("ScreenSaverTime", (int)Math::round(screensaver_time->getValue()) * (1000 * 60)); PowerSaver::updateTimeouts(); }); + + // Allow ScreenSaver Controls - ScreenSaverControls + auto ss_controls = std::make_shared(mWindow); + ss_controls->setState(Settings::getInstance()->getBool("ScreenSaverControls")); + addWithLabel("SCREENSAVER CONTROLS", ss_controls); + addSaveFunc([ss_controls] { Settings::getInstance()->setBool("ScreenSaverControls", ss_controls->getState()); }); // screensaver behavior auto screensaver_behavior = std::make_shared< OptionListComponent >(mWindow, "SCREENSAVER BEHAVIOR", false); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 9e8a0a7c72..e591b9c172 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -39,8 +39,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN if (isFullUI) addEntry("CONFIGURE INPUT", 0x777777FF, true, [this] { openConfigInput(); }); - if (!(UIModeController::getInstance()->isUIModeKid() && Settings::getInstance()->getBool("hideQuitMenuOnKidUI"))) - addEntry("QUIT", 0x777777FF, true, [this] {openQuitMenu(); }); + addEntry("QUIT", 0x777777FF, true, [this] {openQuitMenu(); }); addChild(&mMenu); addVersionInfo(); @@ -312,6 +311,16 @@ void GuiMenu::openUISettings() s->addWithLabel("ON-SCREEN HELP", show_help); s->addSaveFunc([show_help] { Settings::getInstance()->setBool("ShowHelpPrompts", show_help->getState()); }); + // enable filters (ForceDisableFilters) + auto enable_filter = std::make_shared(mWindow); + enable_filter->setState(!Settings::getInstance()->getBool("ForceDisableFilters")); + s->addWithLabel("ENABLE FILTERS", enable_filter); + s->addSaveFunc([enable_filter] { + bool filter_is_enabled = !Settings::getInstance()->getBool("ForceDisableFilters"); + Settings::getInstance()->setBool("ForceDisableFilters", !enable_filter->getState()); + if (enable_filter->getState() != filter_is_enabled) ViewController::get()->ReloadAndGoToStart(); + }); + mWindow->pushGui(s); } diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.cpp b/es-app/src/guis/GuiVideoScreensaverOptions.cpp index 2fcd111cf6..b7489b0ecd 100644 --- a/es-app/src/guis/GuiVideoScreensaverOptions.cpp +++ b/es-app/src/guis/GuiVideoScreensaverOptions.cpp @@ -25,12 +25,6 @@ GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const cha addSaveFunc([ss_omx, this] { Settings::getInstance()->setBool("ScreenSaverOmxPlayer", ss_omx->getState()); }); #endif - // Allow ScreenSaver Controls - ScreenSaverControls - auto ss_controls = std::make_shared(mWindow); - ss_controls->setState(Settings::getInstance()->getBool("ScreenSaverControls")); - addWithLabel("SCREENSAVER CONTROLS", ss_controls); - addSaveFunc([ss_controls] { Settings::getInstance()->setBool("ScreenSaverControls", ss_controls->getState()); }); - // Render Video Game Name as subtitles auto ss_info = std::make_shared< OptionListComponent >(mWindow, "SHOW GAME INFO", false); std::vector info_type; diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index df680023e6..2cc9281461 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -132,6 +132,10 @@ bool parseArgs(int argc, char* argv[]) { Settings::getInstance()->setBool("ForceKid", true); } + else if (strcmp(argv[i], "--force-disable-filters") == 0) + { + Settings::getInstance()->setBool("ForceDisableFilters", true); + } else if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { #ifdef WIN32 @@ -158,7 +162,9 @@ bool parseArgs(int argc, char* argv[]) "--windowed not fullscreen, should be used with --resolution\n" "--vsync [1/on or 0/off] turn vsync on or off (default is on)\n" "--max-vram [size] Max VRAM to use in Mb before swapping. 0 for unlimited\n" + "--force-kid Force the UI mode to be Kid\n" "--force-kiosk Force the UI mode to be Kiosk\n" + "--force-disable-filters Force the UI to ignore applied filters in gamelist\n" "--help, -h summon a sentient, angry tuba\n\n" "More information available in README.md.\n"; return false; //exit after printing help diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index fe850d566a..c5204807b5 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -196,7 +196,7 @@ bool SystemView::input(InputConfig* config, Input input) config->isMappedTo("up", input) || config->isMappedTo("down", input)) listInput(0); - if(config->isMappedTo("select", input) && Settings::getInstance()->getBool("ScreenSaverControls")) + if(!UIModeController::getInstance()->isUIModeKid() && config->isMappedTo("select", input) && Settings::getInstance()->getBool("ScreenSaverControls")) { mWindow->startScreenSaver(); mWindow->renderScreenSaver(); @@ -382,7 +382,7 @@ std::vector SystemView::getHelpPrompts() prompts.push_back(HelpPrompt("a", "select")); prompts.push_back(HelpPrompt("x", "random")); - if (Settings::getInstance()->getBool("ScreenSaverControls")) + if (!UIModeController::getInstance()->isUIModeKid() && Settings::getInstance()->getBool("ScreenSaverControls")) prompts.push_back(HelpPrompt("select", "launch screensaver")); return prompts; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index c43d7729b7..81626cba63 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -357,7 +357,7 @@ bool ViewController::input(InputConfig* config, Input input) return true; // open menu - if(config->isMappedTo("start", input) && input.value != 0) + if(!UIModeController::getInstance()->isUIModeKid() && config->isMappedTo("start", input) && input.value != 0) { // open menu mWindow->pushGui(new GuiMenu(mWindow)); @@ -512,7 +512,8 @@ std::vector ViewController::getHelpPrompts() return prompts; prompts = mCurrentView->getHelpPrompts(); - prompts.push_back(HelpPrompt("start", "menu")); + if(!UIModeController::getInstance()->isUIModeKid()) + prompts.push_back(HelpPrompt("start", "menu")); return prompts; } diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 5c76e101cd..7a5ef8f1b9 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -150,10 +150,11 @@ std::vector BasicGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("up/down", "choose")); prompts.push_back(HelpPrompt("a", "launch")); prompts.push_back(HelpPrompt("b", "back")); - prompts.push_back(HelpPrompt("select", "options")); + if(!UIModeController::getInstance()->isUIModeKid()) + prompts.push_back(HelpPrompt("select", "options")); if(mRoot->getSystem()->isGameSystem()) prompts.push_back(HelpPrompt("x", "random")); - if(mRoot->getSystem()->isGameSystem() && !UIModeController::getInstance()->isUIModeKid()) + if(mRoot->getSystem()->isGameSystem() && UIModeController::getInstance()->isUIModeFull()) { std::string prompt = CollectionSystemManager::get()->getEditingCollection(); prompts.push_back(HelpPrompt("y", prompt)); diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 66c827f80d..a568a0943f 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -368,7 +368,8 @@ std::vector GridGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("up/down/left/right", "choose")); prompts.push_back(HelpPrompt("a", "launch")); prompts.push_back(HelpPrompt("b", "back")); - prompts.push_back(HelpPrompt("select", "options")); + if(!UIModeController::getInstance()->isUIModeKid()) + prompts.push_back(HelpPrompt("select", "options")); if(mRoot->getSystem()->isGameSystem()) prompts.push_back(HelpPrompt("x", "random")); if(mRoot->getSystem()->isGameSystem() && !UIModeController::getInstance()->isUIModeKid()) diff --git a/es-app/src/views/gamelist/IGameListView.cpp b/es-app/src/views/gamelist/IGameListView.cpp index a017d73bea..5fd5dbf076 100644 --- a/es-app/src/views/gamelist/IGameListView.cpp +++ b/es-app/src/views/gamelist/IGameListView.cpp @@ -1,6 +1,7 @@ #include "views/gamelist/IGameListView.h" #include "guis/GuiGamelistOptions.h" +#include "views/UIModeController.h" #include "views/ViewController.h" #include "Sound.h" #include "Window.h" @@ -8,7 +9,7 @@ bool IGameListView::input(InputConfig* config, Input input) { // select to open GuiGamelistOptions - if(config->isMappedTo("select", input) && input.value) + if(!UIModeController::getInstance()->isUIModeKid() && config->isMappedTo("select", input) && input.value) { Sound::getFromTheme(mTheme, getName(), "menuOpen")->play(); mWindow->pushGui(new GuiGamelistOptions(mWindow, this->mRoot->getSystem())); diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 45acb4caed..2caf26b1e0 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -146,7 +146,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) } return true; } - }else if (config->isMappedTo("y", input) && !(UIModeController::getInstance()->isUIModeKid())) + }else if (config->isMappedTo("y", input) && UIModeController::getInstance()->isUIModeFull()) { if(mRoot->getSystem()->isGameSystem()) { diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 2a999fb23e..a0169619a0 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -18,6 +18,7 @@ std::vector settings_dont_save { { "DebugImage" }, { "ForceKid" }, { "ForceKiosk" }, + { "ForceDisableFilters" }, { "IgnoreGamelist" }, { "HideConsole" }, { "ShowExit" }, @@ -138,7 +139,7 @@ void Settings::setDefaults() mStringMap["UIMode_passkey"] = "uuddlrlrba"; mBoolMap["ForceKiosk"] = false; mBoolMap["ForceKid"] = false; - mBoolMap["hideQuitMenuOnKidUI"] = false; + mBoolMap["ForceDisableFilters"] = false; mIntMap["WindowWidth"] = 0; mIntMap["WindowHeight"] = 0; From bdc3054423b6264d0bae1af037fe9330622b228f Mon Sep 17 00:00:00 2001 From: Koerty Date: Sun, 3 Jun 2018 00:57:02 +0200 Subject: [PATCH 300/603] Fix horizontal scrolling grid bugs This fix 2 bugs with the horizontal scrolling grid : - The grid is now positioned correctly (bug introduced by the buffer of the dynamic image loader) - The right column contain the partial tile in horizontal mod, not the bottom row --- es-core/src/components/ImageGridComponent.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 7d82728994..e17d31dd3d 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -313,7 +313,9 @@ void ImageGridComponent::buildTiles() calcGridDimension(); Vector2f tileDistance = mTileSize + mMargin; - Vector2f startPosition = mTileSize / 2 - Vector2f(0, tileDistance.y() * texBuffersForward[3]); + Vector2f bufferSize = Vector2f(mScrollDirection == SCROLL_HORIZONTALLY ? tileDistance.x() * texBuffersForward[3] : 0, + mScrollDirection == SCROLL_VERTICALLY ? tileDistance.y() * texBuffersForward[3] : 0); + Vector2f startPosition = mTileSize / 2 - bufferSize; int X, Y; @@ -456,15 +458,15 @@ void ImageGridComponent::calcGridDimension() // <=> COLUMNS = (GRID_SIZE + MARGIN) / (TILE_SIZE + MARGIN) Vector2f gridDimension = (mSize + mMargin) / (mTileSize + mMargin); - // Invert dimensions for horizontally scrolling grid - if (mScrollDirection == SCROLL_HORIZONTALLY) - gridDimension = Vector2f(gridDimension.y(), gridDimension.x()); - mLastRowPartial = Math::floorf(gridDimension.y()) != gridDimension.y(); // Ceil y dim so we can display partial last row mGridDimension = Vector2i(gridDimension.x(), Math::ceilf(gridDimension.y())); + // Invert dimensions for horizontally scrolling grid + if (mScrollDirection == SCROLL_HORIZONTALLY) + mGridDimension = Vector2i(mGridDimension.y(), mGridDimension.x()); + // Grid dimension validation if (mGridDimension.x() < 1) LOG(LogError) << "Theme defined grid X dimension below 1"; From 68dff607c830708e24a5d9ba3db6e33a9c286b97 Mon Sep 17 00:00:00 2001 From: pjft Date: Mon, 4 Jun 2018 18:55:14 +0100 Subject: [PATCH 301/603] Fix for image resize flicker when using MaxSize --- es-core/src/components/ImageComponent.cpp | 24 +++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index a416b76edf..3164336797 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -55,20 +55,19 @@ void ImageComponent::resize() mSize = textureSize; Vector2f resizeScale((mTargetSize.x() / mSize.x()), (mTargetSize.y() / mSize.y())); - + if(resizeScale.x() < resizeScale.y()) { - mSize[0] *= resizeScale.x(); - mSize[1] *= resizeScale.x(); + mSize[0] *= resizeScale.x(); // this will be mTargetSize.x(). We can't exceed it, nor be lower than it. + // we need to make sure we're not creating an image larger than max size + mSize[1] = Math::min(Math::round(mSize[1] *= resizeScale.x()), mTargetSize.y()); }else{ - mSize[0] *= resizeScale.y(); - mSize[1] *= resizeScale.y(); + mSize[1] = Math::round(mSize[1] *= resizeScale.y()); // this will be mTargetSize.y(). We can't exceed it. + + // for SVG rasterization, always calculate width from rounded height (see comment above) + // we need to make sure we're not creating an image larger than max size + mSize[0] = Math::min((mSize[1] / textureSize.y()) * textureSize.x(), mTargetSize.x()); } - - // for SVG rasterization, always calculate width from rounded height (see comment above) - mSize[1] = Math::round(mSize[1]); - mSize[0] = (mSize[1] / textureSize.y()) * textureSize.x(); - }else if(mTargetIsMin) { mSize = textureSize; @@ -91,8 +90,9 @@ void ImageComponent::resize() } // for SVG rasterization, always calculate width from rounded height (see comment above) - mSize[1] = Math::round(mSize[1]); - mSize[0] = (mSize[1] / textureSize.y()) * textureSize.x(); + // we need to make sure we're not creating an image smaller than min size + mSize[1] = Math::max(Math::round(mSize[1]), mTargetSize.y()); + mSize[0] = Math::max((mSize[1] / textureSize.y()) * textureSize.x(), mTargetSize.x()); }else{ // if both components are set, we just stretch From 86a2cb78408c0c1c3889c0f73709f4a0ce5cf4c5 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Wed, 23 May 2018 13:42:53 -0700 Subject: [PATCH 302/603] set curl to follow redirects to fix scraper error update to use legacy thegamesdb url --- es-app/src/scrapers/GamesDBScraper.cpp | 6 +++--- es-core/src/HttpReq.cpp | 27 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 2bcbb86a94..436bafee1c 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -84,12 +84,12 @@ void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std if (!cleanName.empty() && cleanName.substr(0,3) == "id:") { std::string gameID = cleanName.substr(3); - path = "thegamesdb.net/api/GetGame.php?id=" + HttpReq::urlEncode(gameID); + path = "legacy.thegamesdb.net/api/GetGame.php?id=" + HttpReq::urlEncode(gameID); usingGameID = true; }else{ if (cleanName.empty()) cleanName = params.game->getCleanName(); - path += "thegamesdb.net/api/GetGamesList.php?name=" + HttpReq::urlEncode(cleanName); + path += "legacy.thegamesdb.net/api/GetGamesList.php?name=" + HttpReq::urlEncode(cleanName); } if(usingGameID) @@ -201,7 +201,7 @@ void TheGamesDBRequest::processList(const pugi::xml_document& xmldoc, std::vecto for(int i = 0; game && i < MAX_SCRAPER_RESULTS; i++) { std::string id = game.child("id").text().get(); - std::string path = "thegamesdb.net/api/GetGame.php?id=" + id; + std::string path = "legacy.thegamesdb.net/api/GetGame.php?id=" + id; mRequestQueue->push(std::unique_ptr(new TheGamesDBRequest(results, path))); diff --git a/es-core/src/HttpReq.cpp b/es-core/src/HttpReq.cpp index 7005b2409e..9bdeedf797 100644 --- a/es-core/src/HttpReq.cpp +++ b/es-core/src/HttpReq.cpp @@ -58,6 +58,33 @@ HttpReq::HttpReq(const std::string& url) return; } + //set curl to handle redirects + err = curl_easy_setopt(mHandle, CURLOPT_FOLLOWLOCATION, 1L); + if(err != CURLE_OK) + { + mStatus = REQ_IO_ERROR; + onError(curl_easy_strerror(err)); + return; + } + + //set curl max redirects + err = curl_easy_setopt(mHandle, CURLOPT_MAXREDIRS, 2L); + if(err != CURLE_OK) + { + mStatus = REQ_IO_ERROR; + onError(curl_easy_strerror(err)); + return; + } + + //set curl restrict redirect protocols + err = curl_easy_setopt(mHandle, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); + if(err != CURLE_OK) + { + mStatus = REQ_IO_ERROR; + onError(curl_easy_strerror(err)); + return; + } + //tell curl how to write the data err = curl_easy_setopt(mHandle, CURLOPT_WRITEFUNCTION, &HttpReq::write_content); if(err != CURLE_OK) From 8763adedb1e5d8c2d3871b6ccb53047b4a9c04cf Mon Sep 17 00:00:00 2001 From: Koerty Date: Wed, 6 Jun 2018 23:26:21 +0200 Subject: [PATCH 303/603] Fix grid padding being 2 times smaller than it should be --- es-core/src/components/GridTileComponent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp index 6fcc7f776a..69cd1360eb 100644 --- a/es-core/src/components/GridTileComponent.cpp +++ b/es-core/src/components/GridTileComponent.cpp @@ -175,7 +175,7 @@ void GridTileComponent::resize() { const GridTileProperties& currentProperties = getCurrentProperties(); - mImage->setMaxSize(currentProperties.mSize - currentProperties.mPadding); + mImage->setMaxSize(currentProperties.mSize - currentProperties.mPadding * 2); mBackground.setCornerSize(currentProperties.mBackgroundCornerSize); mBackground.fitTo(currentProperties.mSize - mBackground.getCornerSize() * 2); } From 1fe57de7f610a3f281c60ffc036315d29cd5d46d Mon Sep 17 00:00:00 2001 From: John Rassa Date: Tue, 5 Jun 2018 19:26:38 -0700 Subject: [PATCH 304/603] add theme support for text and line spacing for logo text in system carousel --- THEMES.md | 10 +++++----- es-app/src/views/SystemView.cpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/THEMES.md b/THEMES.md index bf9c62913f..2af630b7e2 100644 --- a/THEMES.md +++ b/THEMES.md @@ -358,7 +358,7 @@ Reference * `text name="logoText"` - ALL - Displays the name of the system. Only present if no "logo" image is specified. Displayed at the top of the screen, centered by default. * `image name="logo"` - ALL - - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. + - A header image. If a non-empty `path` is specified, `text name="logoText"` will be hidden and this image will be, by default, displayed roughly in its place. * `textlist name="gamelist"` - ALL - The gamelist. `primaryColor` is for games, `secondaryColor` is for folders. Centered by default. @@ -372,7 +372,7 @@ Reference * `text name="logoText"` - ALL - Displays the name of the system. Only present if no "logo" image is specified. Displayed at the top of the screen, centered by default. * `image name="logo"` - ALL - - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. + - A header image. If a non-empty `path` is specified, `text name="logoText"` will be hidden and this image will be, by default, displayed roughly in its place. * `textlist name="gamelist"` - ALL - The gamelist. `primaryColor` is for games, `secondaryColor` is for folders. Left aligned by default. @@ -421,7 +421,7 @@ Reference * `text name="logoText"` - ALL - Displays the name of the system. Only present if no "logo" image is specified. Displayed at the top of the screen, centered by default. * `image name="logo"` - ALL - - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. + - A header image. If a non-empty `path` is specified, `text name="logoText"` will be hidden and this image will be, by default, displayed roughly in its place. * `textlist name="gamelist"` - ALL - The gamelist. `primaryColor` is for games, `secondaryColor` is for folders. Left aligned by default. @@ -476,7 +476,7 @@ Reference * `text name="logoText"` - ALL - Displays the name of the system. Only present if no "logo" image is specified. Displayed at the top of the screen, centered by default. * `image name="logo"` - ALL - - A header image. If a non-empty `path` is specified, `text name="headerText"` will be hidden and this image will be, by default, displayed roughly in its place. + - A header image. If a non-empty `path` is specified, `text name="logoText"` will be hidden and this image will be, by default, displayed roughly in its place. * `imagegrid name="gamegrid"` - ALL - The gamegrid. The number of tile displayed is controlled by its size, margin and the default tile max size. * `gridtile name="default"` - ALL @@ -528,7 +528,7 @@ Reference - The system logo carousel * `image name="logo"` - PATH | COLOR - A logo image, to be displayed in the system logo carousel. -* `text name="logoText"` - FONT_PATH | COLOR | FORCE_UPPERCASE +* `text name="logoText"` - FONT_PATH | COLOR | FORCE_UPPERCASE | LINE_SPACING | TEXT - A logo text, to be displayed system name in the system logo carousel when no logo is available. * `text name="systemInfo"` - ALL - Displays details of the system currently selected in the carousel. diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index c5204807b5..871ba8724f 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -68,7 +68,7 @@ void SystemView::populate() 0x000000FF, ALIGN_CENTER); text->setSize(mCarousel.logoSize * mCarousel.logoScale); - text->applyTheme((*it)->getTheme(), "system", "logoText", ThemeFlags::FONT_PATH | ThemeFlags::FONT_SIZE | ThemeFlags::COLOR | ThemeFlags::FORCE_UPPERCASE); + text->applyTheme((*it)->getTheme(), "system", "logoText", ThemeFlags::FONT_PATH | ThemeFlags::FONT_SIZE | ThemeFlags::COLOR | ThemeFlags::FORCE_UPPERCASE | ThemeFlags::LINE_SPACING | ThemeFlags::TEXT); e.data.logo = std::shared_ptr(text); if (mCarousel.type == VERTICAL || mCarousel.type == VERTICAL_WHEEL) From b097648dde9ed6c431592f3ca6e7c34e08d7575c Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Fri, 8 Jun 2018 04:40:02 +0000 Subject: [PATCH 305/603] InputManager: improve trigger axis calibration Some drivers (such as hid-sony) configure analog triggers (L2/R2) as axes with axis range -32768-32767, but the resting value starts at -32768, causing an initial or light press to register erroneously as a minus axis value. Fix by shifting ABS_Z and ABS_RZ axes that are detected to rest at -32768 so that they will range from 0-32767 instead. Patch based on Jools Wills' earlier commit: https://github.com/RetroPie/EmulationStation/pull/58 --- es-core/src/InputManager.cpp | 24 +++++++++++++++++++----- es-core/src/InputManager.h | 1 + 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 08c16865ca..dbf6e57882 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -101,7 +101,14 @@ void InputManager::addJoystickByDeviceIndex(int id) // set up the prevAxisValues int numAxes = SDL_JoystickNumAxes(joy); mPrevAxisValues[joyId] = new int[numAxes]; - std::fill(mPrevAxisValues[joyId], mPrevAxisValues[joyId] + numAxes, 0); //initialize array to 0 + mInitAxisValues[joyId] = new int[numAxes]; + + int axis; + for (int i = 0; i< numAxes; i++) { + axis = SDL_JoystickGetAxis(joy, i); + mInitAxisValues[joyId][i] = axis; + mPrevAxisValues[joyId][i] = axis; + } } void InputManager::removeJoystickByJoystickID(SDL_JoystickID joyId) @@ -198,21 +205,28 @@ InputConfig* InputManager::getInputConfigByDevice(int device) bool InputManager::parseEvent(const SDL_Event& ev, Window* window) { bool causedEvent = false; + int axis; switch(ev.type) { case SDL_JOYAXISMOTION: + axis = ev.jaxis.value; + // Check for ABS_Z/ABS_RZ trigger axes which rest at -32768 + if ((ev.jaxis.axis == 2 || ev.jaxis.axis == 5) && mInitAxisValues[ev.jaxis.which][ev.jaxis.axis] == -32768) + { + // shift to 0 - 32767. + axis = axis / 2 + 16384; + } //if it switched boundaries - if((abs(ev.jaxis.value) > DEADZONE) != (abs(mPrevAxisValues[ev.jaxis.which][ev.jaxis.axis]) > DEADZONE)) + if((abs(axis) > DEADZONE) != (abs(mPrevAxisValues[ev.jaxis.which][ev.jaxis.axis]) > DEADZONE)) { int normValue; - if(abs(ev.jaxis.value) <= DEADZONE) + if(abs(axis) <= DEADZONE) normValue = 0; else - if(ev.jaxis.value > 0) + if(axis > 0) normValue = 1; else normValue = -1; - window->input(getInputConfigByDevice(ev.jaxis.which), Input(ev.jaxis.which, TYPE_AXIS, ev.jaxis.axis, normValue, false)); causedEvent = true; } diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index fde96f0921..74c4c3f866 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -27,6 +27,7 @@ class InputManager InputConfig* mCECInputConfig; std::map mPrevAxisValues; + std::map mInitAxisValues; bool initialized() const; From 3d7d62047bd11e3e58ff1539d69d755a271aea62 Mon Sep 17 00:00:00 2001 From: Koerty Date: Fri, 8 Jun 2018 11:29:52 +0200 Subject: [PATCH 306/603] Grid fix freeze with big game collections This fix the infinite freeze with big game collections by storing the texture path instead of loading texture resource --- es-core/src/components/GridTileComponent.cpp | 3 + es-core/src/components/ImageGridComponent.h | 59 ++++++++++---------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp index 69cd1360eb..7dbe2c028b 100644 --- a/es-core/src/components/GridTileComponent.cpp +++ b/es-core/src/components/GridTileComponent.cpp @@ -151,6 +151,9 @@ bool GridTileComponent::isSelected() const void GridTileComponent::setImage(const std::string& path) { mImage->setImage(path); + + // Resize now to prevent flickering images when scrolling + resize(); } void GridTileComponent::setImage(const std::shared_ptr& texture) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index e17d31dd3d..e600624cc9 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -15,7 +15,7 @@ enum ScrollDirection struct ImageGridData { - std::shared_ptr texture; + std::string texturePath; }; template @@ -66,8 +66,8 @@ class ImageGridComponent : public IList const int texBuffersForward[4] = { 1, 2, 3, 3 }; bool mEntriesDirty; int mLastCursor; - std::shared_ptr mDefaultGameTexture; - std::shared_ptr mDefaultFolderTexture; + std::string mDefaultGameTexture; + std::string mDefaultFolderTexture; // TILES bool mLastRowPartial; @@ -89,8 +89,8 @@ ImageGridComponent::ImageGridComponent(Window* window) : IList::add(const std::string& name, const std::string& imag typename IList::Entry entry; entry.name = name; entry.object = obj; - - if (ResourceManager::getInstance()->fileExists(imagePath)) - { - entry.data.texture = TextureResource::get(imagePath); - } - else - { - // FileType::FOLDER = 2, but FileData is our template parameter T, - // so we don't want to bring that dependence to FileData here - if (obj->getType() == 2) - entry.data.texture = mDefaultFolderTexture; - else - entry.data.texture = mDefaultGameTexture; - } + entry.data.texturePath = imagePath; static_cast*>(this)->add(entry); mEntriesDirty = true; @@ -235,16 +222,15 @@ void ImageGridComponent::applyTheme(const std::shared_ptr& theme, LOG(LogWarning) << "Could not replace default game image, check path: " << path; else { - std::shared_ptr oldDefaultGameTexture = mDefaultGameTexture; - - mDefaultGameTexture = TextureResource::get(path); + std::string oldDefaultGameTexture = mDefaultGameTexture; + mDefaultGameTexture = path; // mEntries are already loaded at this point, // so we need to update them with new game image texture for (auto it = mEntries.begin(); it != mEntries.end(); it++) { - if ((*it).data.texture == oldDefaultGameTexture) - (*it).data.texture = mDefaultGameTexture; + if ((*it).data.texturePath == oldDefaultGameTexture) + (*it).data.texturePath = mDefaultGameTexture; } } } @@ -257,16 +243,15 @@ void ImageGridComponent::applyTheme(const std::shared_ptr& theme, LOG(LogWarning) << "Could not replace default folder image, check path: " << path; else { - std::shared_ptr oldDefaultFolderTexture = mDefaultFolderTexture; - - mDefaultFolderTexture = TextureResource::get(path); + std::string oldDefaultFolderTexture = mDefaultFolderTexture; + mDefaultFolderTexture = path; // mEntries are already loaded at this point, // so we need to update them with new folder image texture for (auto it = mEntries.begin(); it != mEntries.end(); it++) { - if ((*it).data.texture == oldDefaultFolderTexture) - (*it).data.texture = mDefaultFolderTexture; + if ((*it).data.texturePath == oldDefaultFolderTexture) + (*it).data.texturePath = mDefaultFolderTexture; } } } @@ -411,8 +396,22 @@ void ImageGridComponent::updateTileAtPos(int tilePos, int imgPos, int bufferT else { tile->setSelected(imgPos == mCursor); - tile->setImage(mEntries.at(imgPos).data.texture); tile->setVisible(true); + + std::string imagePath = mEntries.at(imgPos).data.texturePath; + if (ResourceManager::getInstance()->fileExists(imagePath)) + { + tile->setImage(imagePath); + } + else + { + // FileType::FOLDER = 2, but FileData is our template parameter T, + // so we don't want to bring that dependence to FileData here + if (mEntries.at(imgPos).object->getType() == 2) + tile->setImage(mDefaultFolderTexture); + else + tile->setImage(mDefaultGameTexture); + } } } From 21f21d82681573780b7f7c1acd8d3b0d82af06ce Mon Sep 17 00:00:00 2001 From: pjft Date: Sat, 9 Jun 2018 18:38:18 +0100 Subject: [PATCH 307/603] Final Fix for resizing images --- es-core/src/components/ImageComponent.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 3164336797..14f5fac134 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -62,7 +62,7 @@ void ImageComponent::resize() // we need to make sure we're not creating an image larger than max size mSize[1] = Math::min(Math::round(mSize[1] *= resizeScale.x()), mTargetSize.y()); }else{ - mSize[1] = Math::round(mSize[1] *= resizeScale.y()); // this will be mTargetSize.y(). We can't exceed it. + mSize[1] = Math::round(mSize[1] * resizeScale.y()); // this will be mTargetSize.y(). We can't exceed it. // for SVG rasterization, always calculate width from rounded height (see comment above) // we need to make sure we're not creating an image larger than max size @@ -112,8 +112,11 @@ void ImageComponent::resize() } } } + + mSize[0] = Math::round(mSize.x()); + mSize[1] = Math::round(mSize.y()); // mSize.y() should already be rounded - mTexture->rasterizeAt((size_t)Math::round(mSize.x()), (size_t)Math::round(mSize.y())); + mTexture->rasterizeAt((size_t)mSize.x(), (size_t)mSize.y()); onSizeChanged(); } From d02fab8463f7e1f6a067bc11604e5443376ff2b4 Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Tue, 12 Jun 2018 16:42:30 +0200 Subject: [PATCH 308/603] Fix SVG resize issue for option_arrow.svg. --- es-core/src/components/OptionListComponent.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index 7a4bf72c32..dd630f5bf5 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -143,6 +143,9 @@ class OptionListComponent : public GuiComponent mText.setHorizontalAlignment(ALIGN_CENTER); addChild(&mText); + mLeftArrow.setResize(0, mText.getFont()->getLetterHeight()); + mRightArrow.setResize(0, mText.getFont()->getLetterHeight()); + if(mMultiSelect) { mRightArrow.setImage(":/arrow.svg"); From 0d76ec52a53b78844686eeace7c1574232a5c9de Mon Sep 17 00:00:00 2001 From: pjft Date: Tue, 12 Jun 2018 22:20:03 +0100 Subject: [PATCH 309/603] Adjust mutex for SVG initialization and resizing --- es-core/src/resources/TextureData.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index 17e7cd6f7f..f493a91c46 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -35,11 +35,9 @@ void TextureData::initFromPath(const std::string& path) bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length) { // If already initialised then don't read again - { - std::unique_lock lock(mMutex); - if (mDataRGBA) - return true; - } + std::unique_lock lock(mMutex); + if (mDataRGBA) + return true; // nsvgParse excepts a modifiable, null-terminated string char* copy = (char*)malloc(length + 1); @@ -84,7 +82,6 @@ bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length ImageIO::flipPixelsVert(dataRGBA, mWidth, mHeight); - std::unique_lock lock(mMutex); mDataRGBA = dataRGBA; return true; From 891c552ce95301be72f3e19c472c550e16307b7d Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Mon, 2 Jul 2018 11:02:51 +0200 Subject: [PATCH 310/603] Updates artwork for input config, adds compass directions. --- es-core/src/guis/GuiInputConfig.cpp | 166 +++++++--------------------- resources/help/analog_down.svg | 20 ++-- resources/help/analog_left.svg | 22 ++-- resources/help/analog_right.svg | 20 ++-- resources/help/analog_stick.svg | 9 ++ resources/help/analog_thumb.svg | 18 ++- resources/help/analog_up.svg | 22 ++-- resources/help/button_1.svg | 5 + resources/help/button_2.svg | 5 + resources/help/button_3.svg | 5 + resources/help/button_4.svg | 5 + resources/help/button_a.svg | 19 +--- resources/help/button_b.svg | 24 +--- resources/help/button_circle.svg | 5 + resources/help/button_cross.svg | 5 + resources/help/button_hotkey.svg | 25 +---- resources/help/button_l.svg | 16 +-- resources/help/button_lr.svg | 79 ++----------- resources/help/button_lt.svg | 6 + resources/help/button_r.svg | 19 +--- resources/help/button_rt.svg | 6 + resources/help/button_select.svg | 35 ++---- resources/help/button_square.svg | 5 + resources/help/button_start.svg | 31 ++---- resources/help/button_triangle.svg | 5 + resources/help/button_x.svg | 19 +--- resources/help/button_y.svg | 19 +--- resources/help/buttons_east.svg | 8 ++ resources/help/buttons_north.svg | 8 ++ resources/help/buttons_south.svg | 8 ++ resources/help/buttons_west.svg | 8 ++ resources/help/dpad_all.svg | 63 ++--------- resources/help/dpad_down.svg | 58 ++-------- resources/help/dpad_left.svg | 58 ++-------- resources/help/dpad_leftright.svg | 59 ++-------- resources/help/dpad_right.svg | 58 ++-------- resources/help/dpad_up.svg | 58 ++-------- resources/help/dpad_updown.svg | 59 ++-------- resources/off.svg | 20 ++-- resources/on.svg | 17 +-- 40 files changed, 318 insertions(+), 779 deletions(-) create mode 100644 resources/help/analog_stick.svg create mode 100644 resources/help/button_1.svg create mode 100644 resources/help/button_2.svg create mode 100644 resources/help/button_3.svg create mode 100644 resources/help/button_4.svg create mode 100644 resources/help/button_circle.svg create mode 100644 resources/help/button_cross.svg create mode 100644 resources/help/button_lt.svg create mode 100644 resources/help/button_rt.svg create mode 100644 resources/help/button_square.svg create mode 100644 resources/help/button_triangle.svg create mode 100644 resources/help/buttons_east.svg create mode 100644 resources/help/buttons_north.svg create mode 100644 resources/help/buttons_south.svg create mode 100644 resources/help/buttons_west.svg diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index 2ec414c557..934551a66d 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -7,126 +7,42 @@ #include "Log.h" #include "Window.h" -// static const int inputCount = 10; -// static const char* inputName[inputCount] = { "Up", "Down", "Left", "Right", "A", "B", "Start", "Select", "PageUp", "PageDown" }; -// static const bool inputSkippable[inputCount] = { false, false, false, false, false, false, false, false, true, true }; -// static const char* inputDispName[inputCount] = { "UP", "DOWN", "LEFT", "RIGHT", "A", "B", "START", "SELECT", "PAGE UP", "PAGE DOWN" }; -// static const char* inputIcon[inputCount] = { ":/help/dpad_up.svg", ":/help/dpad_down.svg", ":/help/dpad_left.svg", ":/help/dpad_right.svg", -// ":/help/button_a.svg", ":/help/button_b.svg", ":/help/button_start.svg", ":/help/button_select.svg", -// ":/help/button_l.svg", ":/help/button_r.svg" }; - -static const int inputCount = 25; -static const char* inputName[inputCount] = -{ - "Up", - "Down", - "Left", - "Right", - "Start", - "Select", - "A", - "B", - "X", - "Y", - "LeftShoulder", - "RightShoulder", - "LeftTrigger", - "RightTrigger", - "LeftThumb", - "RightThumb", - "LeftAnalogUp", - "LeftAnalogDown", - "LeftAnalogLeft", - "LeftAnalogRight", - "RightAnalogUp", - "RightAnalogDown", - "RightAnalogLeft", - "RightAnalogRight", - "HotKeyEnable" -}; -static const bool inputSkippable[inputCount] = +struct InputConfigStructure { - false, - false, - false, - false, - true, - true, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true + const char* name; + const bool skippable; + const char* dispName; + const char* icon; }; -static const char* inputDispName[inputCount] = -{ - "D-PAD UP", - "D-PAD DOWN", - "D-PAD LEFT", - "D-PAD RIGHT", - "START", - "SELECT", - "A", - "B", - "X", - "Y", - "LEFT SHOULDER", - "RIGHT SHOULDER", - "LEFT TRIGGER", - "RIGHT TRIGGER", - "LEFT THUMB", - "RIGHT THUMB", - "LEFT ANALOG UP", - "LEFT ANALOG DOWN", - "LEFT ANALOG LEFT", - "LEFT ANALOG RIGHT", - "RIGHT ANALOG UP", - "RIGHT ANALOG DOWN", - "RIGHT ANALOG LEFT", - "RIGHT ANALOG RIGHT", - "HOTKEY ENABLE" -}; -static const char* inputIcon[inputCount] = + +static const int inputCount = 25; +static const InputConfigStructure GUI_INPUT_CONFIG_LIST[inputCount] = { - ":/help/dpad_up.svg", - ":/help/dpad_down.svg", - ":/help/dpad_left.svg", - ":/help/dpad_right.svg", - ":/help/button_start.svg", - ":/help/button_select.svg", - ":/help/button_a.svg", - ":/help/button_b.svg", - ":/help/button_x.svg", - ":/help/button_y.svg", - ":/help/button_l.svg", - ":/help/button_r.svg", - ":/help/button_l.svg", - ":/help/button_r.svg", - ":/help/analog_thumb.svg", - ":/help/analog_thumb.svg", - ":/help/analog_up.svg", - ":/help/analog_down.svg", - ":/help/analog_left.svg", - ":/help/analog_right.svg", - ":/help/analog_up.svg", - ":/help/analog_down.svg", - ":/help/analog_left.svg", - ":/help/analog_right.svg", - ":/help/button_hotkey.svg" + { "Up", false, "D-PAD UP", ":/help/dpad_up.svg" }, + { "Down", false, "D-PAD DOWN", ":/help/dpad_down.svg" }, + { "Left", false, "D-PAD LEFT", ":/help/dpad_left.svg" }, + { "Right", false, "D-PAD RIGHT", ":/help/dpad_right.svg" }, + { "Start", true, "START", ":/help/button_start.svg" }, + { "Select", true, "SELECT", ":/help/button_select.svg" }, + { "A", false, "BUTTON A / EAST", ":/help/buttons_east.svg" }, + { "B", true, "BUTTON B / SOUTH", ":/help/buttons_south.svg" }, + { "X", true, "BUTTON X / NORTH", ":/help/buttons_north.svg" }, + { "Y", true, "BUTTON Y / WEST", ":/help/buttons_west.svg" }, + { "LeftShoulder", true, "LEFT SHOULDER", ":/help/button_l.svg" }, + { "RightShoulder", true, "RIGHT SHOULDER", ":/help/button_r.svg" }, + { "LeftTrigger", true, "LEFT TRIGGER", ":/help/button_lt.svg" }, + { "RightTrigger", true, "RIGHT TRIGGER", ":/help/button_rt.svg" }, + { "LeftThumb", true, "LEFT THUMB", ":/help/analog_thumb.svg" }, + { "RightThumb", true, "RIGHT THUMB", ":/help/analog_thumb.svg" }, + { "LeftAnalogUp", true, "LEFT ANALOG UP", ":/help/analog_up.svg" }, + { "LeftAnalogDown", true, "LEFT ANALOG DOWN", ":/help/analog_down.svg" }, + { "LeftAnalogLeft", true, "LEFT ANALOG LEFT", ":/help/analog_left.svg" }, + { "LeftAnalogRight", true, "LEFT ANALOG RIGHT", ":/help/analog_right.svg" }, + { "RightAnalogUp", true, "RIGHT ANALOG UP", ":/help/analog_up.svg" }, + { "RightAnalogDown", true, "RIGHT ANALOG DOWN", ":/help/analog_down.svg" }, + { "RightAnalogLeft", true, "RIGHT ANALOG LEFT", ":/help/analog_left.svg" }, + { "RightAnalogRight", true, "RIGHT ANALOG RIGHT", ":/help/analog_right.svg" }, + { "HotKeyEnable", true, "HOTKEY ENABLE", ":/help/button_hotkey.svg" } }; //MasterVolUp and MasterVolDown are also hooked up, but do not appear on this screen. @@ -178,7 +94,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi // icon auto icon = std::make_shared(mWindow); - icon->setImage(inputIcon[i]); + icon->setImage(GUI_INPUT_CONFIG_LIST[i].icon); icon->setColorShift(0x777777FF); icon->setResize(0, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight() * 1.25f); row.addElement(icon, false); @@ -188,7 +104,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi spacer->setSize(16, 0); row.addElement(spacer, false); - auto text = std::make_shared(mWindow, inputDispName[i], Font::get(FONT_SIZE_MEDIUM), 0x777777FF); + auto text = std::make_shared(mWindow, GUI_INPUT_CONFIG_LIST[i].dispName, Font::get(FONT_SIZE_MEDIUM), 0x777777FF); row.addElement(text, true); auto mapping = std::make_shared(mWindow, "-NOT DEFINED-", Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT), 0x999999FF, ALIGN_RIGHT); @@ -251,7 +167,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi // only show "HOLD TO SKIP" if this input is skippable mList->setCursorChangedCallback([this](CursorState /*state*/) { - bool skippable = inputSkippable[mList->getCursorId()]; + bool skippable = GUI_INPUT_CONFIG_LIST[mList->getCursorId()].skippable; mSubtitle2->setOpacity(skippable * 255); }); @@ -317,7 +233,7 @@ void GuiInputConfig::onSizeChanged() void GuiInputConfig::update(int deltaTime) { - if(mConfiguringRow && mHoldingInput && inputSkippable[mHeldInputId]) + if(mConfiguringRow && mHoldingInput && GUI_INPUT_CONFIG_LIST[mHeldInputId].skippable) { int prevSec = mHeldTime / 1000; mHeldTime += deltaTime; @@ -395,7 +311,7 @@ bool GuiInputConfig::assign(Input input, int inputId) // if this input is mapped to something other than "nothing" or the current row, error // (if it's the same as what it was before, allow it) - if(mTargetConfig->getMappedTo(input).size() > 0 && !mTargetConfig->isMappedTo(inputName[inputId], input) && strcmp(inputName[inputId], "HotKeyEnable") != 0) + if(mTargetConfig->getMappedTo(input).size() > 0 && !mTargetConfig->isMappedTo(GUI_INPUT_CONFIG_LIST[inputId].name, input) && strcmp(GUI_INPUT_CONFIG_LIST[inputId].name, "HotKeyEnable") != 0) { error(mMappings.at(inputId), "Already mapped!"); return false; @@ -404,14 +320,14 @@ bool GuiInputConfig::assign(Input input, int inputId) setAssignedTo(mMappings.at(inputId), input); input.configured = true; - mTargetConfig->mapInput(inputName[inputId], input); + mTargetConfig->mapInput(GUI_INPUT_CONFIG_LIST[inputId].name, input); - LOG(LogInfo) << " Mapping [" << input.string() << "] -> " << inputName[inputId]; + LOG(LogInfo) << " Mapping [" << input.string() << "] -> " << GUI_INPUT_CONFIG_LIST[inputId].name; return true; } void GuiInputConfig::clearAssignment(int inputId) { - mTargetConfig->unmapInput(inputName[inputId]); + mTargetConfig->unmapInput(GUI_INPUT_CONFIG_LIST[inputId].name); } diff --git a/resources/help/analog_down.svg b/resources/help/analog_down.svg index e129aef1e5..e76f67d04f 100644 --- a/resources/help/analog_down.svg +++ b/resources/help/analog_down.svg @@ -1,15 +1,9 @@ - - - - - - - - - - - - - + + + + + + + diff --git a/resources/help/analog_left.svg b/resources/help/analog_left.svg index 852fa81951..c841f079de 100644 --- a/resources/help/analog_left.svg +++ b/resources/help/analog_left.svg @@ -1,17 +1,9 @@ - - - - - - - - - - - - - - - + + + + + + + diff --git a/resources/help/analog_right.svg b/resources/help/analog_right.svg index 6e08065d29..c163bf7037 100644 --- a/resources/help/analog_right.svg +++ b/resources/help/analog_right.svg @@ -1,15 +1,9 @@ - - - - - - - - - - - - - + + + + + + + diff --git a/resources/help/analog_stick.svg b/resources/help/analog_stick.svg new file mode 100644 index 0000000000..e6fb01e7cb --- /dev/null +++ b/resources/help/analog_stick.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/help/analog_thumb.svg b/resources/help/analog_thumb.svg index 4cbd0ef5cc..4da4ff50e6 100644 --- a/resources/help/analog_thumb.svg +++ b/resources/help/analog_thumb.svg @@ -1,13 +1,9 @@ - - - - - - - - - - - + + + + + + + diff --git a/resources/help/analog_up.svg b/resources/help/analog_up.svg index 61d32dbf6f..a004e43b5e 100644 --- a/resources/help/analog_up.svg +++ b/resources/help/analog_up.svg @@ -1,17 +1,9 @@ - - - - - - - - - - - - - - - + + + + + + + diff --git a/resources/help/button_1.svg b/resources/help/button_1.svg new file mode 100644 index 0000000000..aea898fe4c --- /dev/null +++ b/resources/help/button_1.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/help/button_2.svg b/resources/help/button_2.svg new file mode 100644 index 0000000000..4216cb9918 --- /dev/null +++ b/resources/help/button_2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/help/button_3.svg b/resources/help/button_3.svg new file mode 100644 index 0000000000..2c2f21f89a --- /dev/null +++ b/resources/help/button_3.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/help/button_4.svg b/resources/help/button_4.svg new file mode 100644 index 0000000000..dc31c17112 --- /dev/null +++ b/resources/help/button_4.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/help/button_a.svg b/resources/help/button_a.svg index a4f8e98dd5..c88ad1a3c7 100644 --- a/resources/help/button_a.svg +++ b/resources/help/button_a.svg @@ -1,16 +1,5 @@ - - - - - - - - - - - - + + + + diff --git a/resources/help/button_b.svg b/resources/help/button_b.svg index 3b01f4df4f..115fd1919d 100644 --- a/resources/help/button_b.svg +++ b/resources/help/button_b.svg @@ -1,21 +1,5 @@ - - - - - - - - - - - - + + + + diff --git a/resources/help/button_circle.svg b/resources/help/button_circle.svg new file mode 100644 index 0000000000..4f707be0ef --- /dev/null +++ b/resources/help/button_circle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/help/button_cross.svg b/resources/help/button_cross.svg new file mode 100644 index 0000000000..a6a906c703 --- /dev/null +++ b/resources/help/button_cross.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/help/button_hotkey.svg b/resources/help/button_hotkey.svg index c3e4f56f42..f4e200c8b5 100644 --- a/resources/help/button_hotkey.svg +++ b/resources/help/button_hotkey.svg @@ -1,22 +1,5 @@ - - - - - - - - - + + + + diff --git a/resources/help/button_l.svg b/resources/help/button_l.svg index a412137347..07dc3b0ab7 100644 --- a/resources/help/button_l.svg +++ b/resources/help/button_l.svg @@ -1,13 +1,5 @@ - - - - - - - - + + + + diff --git a/resources/help/button_lr.svg b/resources/help/button_lr.svg index 0093848c47..df6096811a 100644 --- a/resources/help/button_lr.svg +++ b/resources/help/button_lr.svg @@ -1,69 +1,12 @@ - - + + + + + + + + + + -image/svg+xml \ No newline at end of file + diff --git a/resources/help/button_lt.svg b/resources/help/button_lt.svg new file mode 100644 index 0000000000..0c4a212650 --- /dev/null +++ b/resources/help/button_lt.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/help/button_r.svg b/resources/help/button_r.svg index 32ab692b76..8db52740c7 100644 --- a/resources/help/button_r.svg +++ b/resources/help/button_r.svg @@ -1,16 +1,5 @@ - - - - - - - - + + + + diff --git a/resources/help/button_rt.svg b/resources/help/button_rt.svg new file mode 100644 index 0000000000..15f0fd0adc --- /dev/null +++ b/resources/help/button_rt.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/help/button_select.svg b/resources/help/button_select.svg index 32e1676111..eba861d6c6 100644 --- a/resources/help/button_select.svg +++ b/resources/help/button_select.svg @@ -1,25 +1,12 @@ - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/help/button_square.svg b/resources/help/button_square.svg new file mode 100644 index 0000000000..f0b8ac3625 --- /dev/null +++ b/resources/help/button_square.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/help/button_start.svg b/resources/help/button_start.svg index 7ec281877a..78fb5632e5 100644 --- a/resources/help/button_start.svg +++ b/resources/help/button_start.svg @@ -1,22 +1,11 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/resources/help/button_triangle.svg b/resources/help/button_triangle.svg new file mode 100644 index 0000000000..716e02cff7 --- /dev/null +++ b/resources/help/button_triangle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/help/button_x.svg b/resources/help/button_x.svg index 1466649dde..c0898eb234 100644 --- a/resources/help/button_x.svg +++ b/resources/help/button_x.svg @@ -1,16 +1,5 @@ - - - - - - - - - - - - + + + + diff --git a/resources/help/button_y.svg b/resources/help/button_y.svg index c815ea3efb..11ef2d2b8d 100644 --- a/resources/help/button_y.svg +++ b/resources/help/button_y.svg @@ -1,16 +1,5 @@ - - - - - - - - - - - - + + + + diff --git a/resources/help/buttons_east.svg b/resources/help/buttons_east.svg new file mode 100644 index 0000000000..a2d210e0fa --- /dev/null +++ b/resources/help/buttons_east.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/help/buttons_north.svg b/resources/help/buttons_north.svg new file mode 100644 index 0000000000..bec23c8110 --- /dev/null +++ b/resources/help/buttons_north.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/help/buttons_south.svg b/resources/help/buttons_south.svg new file mode 100644 index 0000000000..8d3814634a --- /dev/null +++ b/resources/help/buttons_south.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/help/buttons_west.svg b/resources/help/buttons_west.svg new file mode 100644 index 0000000000..fb5970c987 --- /dev/null +++ b/resources/help/buttons_west.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/help/dpad_all.svg b/resources/help/dpad_all.svg index 411eff4199..19ede31971 100644 --- a/resources/help/dpad_all.svg +++ b/resources/help/dpad_all.svg @@ -1,53 +1,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/help/dpad_down.svg b/resources/help/dpad_down.svg index 831db2aac9..84a41fc386 100644 --- a/resources/help/dpad_down.svg +++ b/resources/help/dpad_down.svg @@ -1,48 +1,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/help/dpad_left.svg b/resources/help/dpad_left.svg index f0576b4698..1b018d69ef 100644 --- a/resources/help/dpad_left.svg +++ b/resources/help/dpad_left.svg @@ -1,48 +1,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/help/dpad_leftright.svg b/resources/help/dpad_leftright.svg index e5493582e0..e18a6d725b 100644 --- a/resources/help/dpad_leftright.svg +++ b/resources/help/dpad_leftright.svg @@ -1,49 +1,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/help/dpad_right.svg b/resources/help/dpad_right.svg index 70ddeb47e5..228f5e044f 100644 --- a/resources/help/dpad_right.svg +++ b/resources/help/dpad_right.svg @@ -1,48 +1,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/help/dpad_up.svg b/resources/help/dpad_up.svg index fe2469e1d2..eb6dc0c9cd 100644 --- a/resources/help/dpad_up.svg +++ b/resources/help/dpad_up.svg @@ -1,48 +1,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/help/dpad_updown.svg b/resources/help/dpad_updown.svg index 6a306f9f35..85116059ce 100644 --- a/resources/help/dpad_updown.svg +++ b/resources/help/dpad_updown.svg @@ -1,49 +1,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/resources/off.svg b/resources/off.svg index 70490ee4a6..5dacfb38a4 100644 --- a/resources/off.svg +++ b/resources/off.svg @@ -1,13 +1,9 @@ - - - - - - + + + + + + + + diff --git a/resources/on.svg b/resources/on.svg index ec61bdc646..ab4d5d9d5a 100644 --- a/resources/on.svg +++ b/resources/on.svg @@ -1,14 +1,5 @@ - - - - - - - - + + + + From c3c5e24aecfc92d5846d613d11075609f71b8b0a Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Tue, 24 Jul 2018 15:10:30 +0200 Subject: [PATCH 311/603] Update artwork for busy indicator. --- resources/busy_0.svg | 25 +++++-------------------- resources/busy_1.svg | 25 +++++-------------------- resources/busy_2.svg | 25 +++++-------------------- resources/busy_3.svg | 25 +++++-------------------- 4 files changed, 20 insertions(+), 80 deletions(-) diff --git a/resources/busy_0.svg b/resources/busy_0.svg index 6dc4abb279..646e7c2ee8 100644 --- a/resources/busy_0.svg +++ b/resources/busy_0.svg @@ -1,22 +1,7 @@ - - - - - - - - - - - - - - - + + + + + diff --git a/resources/busy_1.svg b/resources/busy_1.svg index d130891326..19297c4e25 100644 --- a/resources/busy_1.svg +++ b/resources/busy_1.svg @@ -1,22 +1,7 @@ - - - - - - - - - - - - - - - + + + + + diff --git a/resources/busy_2.svg b/resources/busy_2.svg index 95862598b6..31bff4e9a7 100644 --- a/resources/busy_2.svg +++ b/resources/busy_2.svg @@ -1,22 +1,7 @@ - - - - - - - - - - - - - - - + + + + + diff --git a/resources/busy_3.svg b/resources/busy_3.svg index cf35d9cfce..523efb627b 100644 --- a/resources/busy_3.svg +++ b/resources/busy_3.svg @@ -1,22 +1,7 @@ - - - - - - - - - - - - - - - + + + + + From 3e27412d6512d69c79320fcbbfde26808f227019 Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Wed, 25 Jul 2018 14:52:13 +0200 Subject: [PATCH 312/603] Replace folder bitmap with svg artwork. --- es-core/src/components/ImageGridComponent.h | 2 +- resources/folder.png | Bin 586 -> 0 bytes resources/folder.svg | 5 +++++ 3 files changed, 6 insertions(+), 1 deletion(-) delete mode 100644 resources/folder.png create mode 100644 resources/folder.svg diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index e600624cc9..3580ac9295 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -90,7 +90,7 @@ ImageGridComponent::ImageGridComponent(Window* window) : IList4nJ za0`PlBg3pY5H=O_J^D-f{NmeV&@JqFfiWsba4!+xb^mqevzo7!10gw^UFSc zdKGBcc}RhI4nzAxsfcrp58384Jd*1W5o`8gDPS;=`1H(Qd76VL+d)0kC$-V*Zmd23 zRU^UK@S{P^$?#Q68N=g;qEyOY|r+CkF2?-hRU7jypj?B(;%HL`J4 zQ(u34d3EyjO-T`THwu5gx%}9-J2SEFw*U8geCM_=dHdCGw$w%wd;i;i>kGafy>jLA zqnqW|FTG##;ULK1_&a}oK2Lh{bc@sV?8-X_n=FZaDJ;&~bmTtXD(DiqJ?w+=gTKsx*bmfmfPr99-zIo(qS$L+pZu70u z3#LA|#mny6@2dZ1=-n0Lyz<;1v#nR_D*A63{PDb6YxlcP$93M%xWePEa;^I3<6gl% zN;SqGd$(yK>!!V)^>`Os_lGB|ei&|A^F--+^P}C*Jc6cO+P-`Jt#fZ1eoU&i{CBFQ w%u_0@@815q3|}8?_P>i9@OFQ0OWkJ_5-&OSBdd2SFy + + + + From c8c26203f1731ea5047d22137981c8bffc42f7c3 Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Wed, 25 Jul 2018 15:19:41 +0200 Subject: [PATCH 313/603] Replace blank_game bitmap with svg cartridge artwork. --- es-core/src/components/ImageGridComponent.h | 2 +- resources/blank_game.png | Bin 14299 -> 0 bytes resources/cartridge.svg | 26 ++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) delete mode 100644 resources/blank_game.png create mode 100644 resources/cartridge.svg diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 3580ac9295..0b30caec55 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -89,7 +89,7 @@ ImageGridComponent::ImageGridComponent(Window* window) : IListD%slhVPNcS`5+xZk82|v3D$2KY00091 z3jq+s;D@o>2P?vpyN;3qP}sw=3_ifE%vdUyg0A>q$$-B^ z%7R~tAH~y#K$mmLfVC<2^p@CD&xEv%^YqaD$z8nwr&m-1k1u{{FMj;PzJh~&IBNBD zD5poRQd@feaKL|EgFNiSz=0a2-tD^WHmD(f`bUTFJgVTqE^N5N|1yy}qv|5unn+US zrKAuUqxU)QH}Zp6sqFx2uj#Ip9cH5ak!fYKKdGfS*n*JzQ17WE9$KDm@PTPsjKCx=WJU3ug4Alv0va&hAj3y+ZawEv%b zs@c~o#F)w1_|<;?zRwOxl(_oo{7qST8(fs~ zmOpD5B#P39uPjpEG3ooz-I<<5M(-TrH)PLsC+1K1o7|bHvX2w#(^)UFN;<|6_1lsP z2l` zf@f_;iMgfaQC|$Q(bZRcr}g8?Ve7sg7vCyY^l!zjTL%|luaCwykcfp*Em^lrz(T~$ z{aR+P%B8-Zo6k1xkt>r9vM)8g8aO8Rw!`uvU*4z36-ge+Mk@LD2j%W+oFj>)Sn}M| z7Rq1#R_{2~?QwlR?5HiR46w2lUNg)D_4j(OW&BTsZ{;suHX+Jj6~ zUuFq@Fnf5Gby>B%Qvdt;RJP#DhD}PFB$#xp=Ura&ZE>ohYb5Jq2fim&#su|*Y1a~=%3ZGGn!dj-l6 z#>SNGIQ%iJ*IO@%hpD6Lb7{PT$%Lj@`AEW)q29Fp)%!$c=+^}wulVMUC$31fAC>!` zf87f-o^b8^v-T*!TE^hFXkyH;Jw8J?>*A9ajEim#&&&&)cX#ESOh#269Cc>0c&9ATHle)uUNWvGsfxt+>-A% zVwR6~{G$}*?;Ci^oBc*#E`3YLHa~mVA6Ak0t5@IxS;a{{;TWG(@&IWLmA8a1I8+7L zidVTDFFe{WS8Hz#D|qDSe*c1xWt}*K{R+QIki7^b<>O`(OiiN4d;F`ijxY?+Y%J&%PV2agQept>#Bf@-rn|YFu|* z|1dM*aw|hNVA5(ObtM1vg6ofLldMVM)v}o3{6d%=EOT&4>?Z5LDWqAk_<}?0I8gp1 z&B7>CPAj5E`tsxb@3V(SgDEv80AM>W52IypWk$H5sv%-SNcS==1c`?i;x_ zZW^~Hg3_qcfO4Vrk8VFjGH}K^PF_f?N8In-*Mm!ORluW zq#Zx*guZ<+DI0Rhh5B3yFjDCKd{qgsW@ChUlT%OU(E%oa>n+BW`|P+cWz+iks)xh$SYXq5AhE=`gC2k0TSm!_ z`&b=xH0_&z=`Pt_Iv<5k&W@b?3J4Qdp>em~*ve;)%jwXgyzmvJ)M|z$`#i0qEt6on zA|!`nh)7W(DMa_;j8r}xKX?hYzxLR8({~+#K5tfFKX?3GBhIuqhlJT6AQMs=&=12| z=43tIh64?TrfaGV_9ihlYIwrN3Oea69WCx8byEXLQ3}9shy&Hx;(d4qD^6Mk&Trp& zl)ijuW28jCdFiL>&1}U~` zwQP)`{6?d0!cT8ZfLPYLQ55+{Yl`{-@R$iIrw4H5>87-}I_8)FTNM5^mzYX?3*p)m z9Jsva5MjDyVo0tsaDNf9$>123-#Qqy*l{LbqTk3X0+UleHD-cDWWIaS$*%xxv$7(m zt*iT7YCn*nL&LoxsG1&F2D#WBXrBSVj$4j}d?3;8Dr+G+ryz^q7rg*=x$r*b&bjaX z3A?mUf!ZPuv;)6=95>Q|_6Y(Voa>KX0^g}{ zU%7GlC11$30;g|PJJZR@;~%A?&sIcp;$G2W9&N(W)fY%0!sKW;x?KD|^xIBAzh*_>pApd{G#R zA&n&Mix6d};lOQS-m8YaLUosDRt<0uUIua?YBv$Dg6KgMkn>Bzhn=cQI-P&mKKuFm z%6l9*2edY`?)x}J_cYSUga}N^PNdMHj_F1ncBa-EPQzr*0W?-T0j6+k8lG1%f?k8Y ziBVOOu8kXwcNFAffLNRb7cREG?KB!_B^kR@1Ki`mog|QlP25s|7PajCOT#Az3O~Dk zv?wmG=h5L#er3F~DkRsgY81rL;yGzhkch46V8XF;sy{rrr~0R=)*JA8=P%u!BM)4c zL5y0^6kj2Gd>V>V1QKpZ!(H}N`u~uG!2{X;%dVSqVO7_yQDp;@gPgd;i)Hbzh#v($ zJ{QHJr+h!UEM%UnNS(&#LSg{!r%MQ|tQW~&O)t2~aR_)geXe&AzaV-8il#w8X<(z| z@YgZQ_<|@SyXL1v(2Edtw!5?#k#p^;xS$*VsV_1T_!6IW-uv4ArOCQ!)t=idvY782 z!oeLojX;|sA#hGc=q9~GDbz5WL$uNrRs#YS+``iiSE6;Kg(fyIt7}G2&B)?;SM^-LApcL}ca1ma?09MsEEgI;75bTxO2z?e!#y24+KPF_=s=a7B?6oeReklXVp&=%s(b zidd{{$NKVh(%_!Ml#}?>0FrwlpxIaz0Z3#x@Wp(h@YAQlCjLH_LnA-Q$@ig&F+-Mh z!wXr%dDhi{yCOhK*tZA`0J+h1c#O#~jFB0;68Wpe>~YoP7MXd-uhis{&*Fd|P#mA7 zCz_bYXM#JmZPZJ6?Tt_b1_^tbMFYt~lUlH9t}-_Ui_JkCGMrh76Z}k!zl7aw7qV=_ zds?H}iHdCS2<#C-rwnjB8ts?UzCn+G>+3ej{w@VNp8d2tjm)HN8Kvt*OHnE(H&z3K zVc_iMXn^soc>Kzsb=gqdx4E7wo+qkzrkHd&djtt{Gyo5Xa$);xU&Zst9F8xKk2@Sz$(Mq?zEZXEGMhlZlOiF_ zL6zCRg$jhfFFR~_TpG>xXku>4aqh6#hf z*S`~$3Sq3lB~Y(#o=WyY2oiFeu*B^-$QKl|?kyIX zyEtasTs5aTV=4*{6&K(2JtB$Z#H^EOFjV9B22YeYa1sO;)0f6&7jghM07z7bMC%)x zM}UvXg}LD)HBzikwgsH#BB&BNN=O6=Zkzu8VmYt-!?Noz2K5-Po{I+`eSpsdPy9@S zF{%Ls(ypyv>_!Aq7hIgyN2W%0GDkF+4rf&`x-hGOy0H88vTYCV{- zwL5&bt}pKxs??y&3|%^!sT8RSviLfh(A>{*hy_`3l+ad!P|dRt8x|a|9G0x0q3+$v za%8TavO#8uke*?AQa!IucE+<`t-#A@;PT(oyb0()^w+x={AF@iup{*41w9+uxC~deTd~{QK4r=eer*zW{`Z-FZ9(- zV)O>;pV`6ff02@<)2@c7L!Qx!ye$Xo0at;Jl~;Wk>a5$|5hy$Q(g9FqL%_Kdm$N`wW{~h`07XJfO2& zjpXevRAYNR9Go@rn6D9atmD=O>6rh_JDK#1S$KC5fv^70Uf#e}c7QoJ7(-!KHtnt! zQgP%vM5%BYYPmhL>(;wQp?hWCfks&8UyQ>t;uJ5>3Gy`_ILeM!`8Qrvo!1|ygK6Ch z8FpkAR{f{DZ^Y2gABYvOf4V`XhRk!xav@c%;52_lqJ+#qB3z5lf-DQfm*jfMM0wDx zfGg-deb#;cjm=J;y^8$v3RchBzd)m$Zsr6$DB78sThPXc|& zDXntq)W{`CN5jBm%!p=aOS+Ci%vS@T)(JjO7emr#pbJBDA*1X@EtPtAC6b30>cB}C zI$lG!>F#h);dMe<2+8aAPl$3*`lLsxAFM>+Rkx@LrD8Jvl0`_O3dQSSxd06}?P_7( zlvs#9C)VMg3m5l~kE67saVIzd(i{aYRj zZO#_7Sav)DI#%VcVgXgC*-~dpT+U2PcR!?_ZPC@{6xmd43WJWLvBre?Md2C2n8l&8 zoVzwG6g)d`kw5o{-{{@Rk9rXk1(Ep@i7bR8O^{0-` zDy9edy_BY2y3&h3l3&RAt)ve4)$<%CoFBH%c#;t8gG2!0zSC2<00d5WCaQfsN$omh z5>@=0qE@z5dqybeFsl9T{O7j7xZ1_Z4T>oXq@c;Dvh2B6y4r?IrT^KVbTvV<39>1k zC~~RO9n|qcS&`5E%_IBZ#_t>ci}5>xeo&F{!d^nk`%D82;>MKCft_?x=vd-(E(Mj* z-G>Pdc=MTh|F{R)UB5D_vP4?zAZ*?X_K)E*@@9{Wh2S5;)|ttSfwY>_vv6ou)XPC4g#jS3aj&v}K8SQEtL zMPRPH#bj)Uh$bTC?^VO9_tTK1Qba}HXhS2(@^#A3On>M%Mr_ehi1x_i1t7Jn*+Qzn z2P~n|7gJ|_PL7IB?Y6~({`BvV@l^hK=jT(qFEpKGx;%e&-0(n-IXy(mpS$rbXG~l%4V876kS-c*?(7!F6Rk1^Yj@9f?^rGi|~ zrMF#RpGMN+BfuQ+2pTL5Eho*tB1{$(Okt;2K|>yO?jFoN z=b_9?=-XE~m?4=;4ZN;$HdEG+o+c>*Mcy@M2iVBeFABpKDZQ@&%bK}KB z=&&t8;+t0>xKFjS6-BIEi;)`(D6{ji`{`!n>Wh{O<(*P`CiItapGLOAgia>!Pm}(9 zK6OyNgHmx@e0p9{pL~G>N6W=XjlW9rSZiqAjepsBuk4+eknk)kyZ?`!$~=SUO}O?K zS3wflE08{|-i|+M?h7C7*N;2S)#Nl@_^ns1eC&M=wIZ#ZnPNMUz73GnC0I{B{`qm^ zQnPsd*6xm7>-DS}-v6X&0>c{yfeAFC4^e(kLxilBeNY*VS^kxg`6%HPv2-*bd;CKy zSC3MBU5PC~v~Jes&l3Bipv9P=0}{Oe*2@4M|Bfldr({|ZVI@|JkvKbD{gVC9)>(Xw zHWbn!ljBzWT*x#$=N@qv9S|;`8hmG2Y-@-I|0{L+JJ9 zzWAO^Wh0Jrg9^?{$$?u%vkpG{vB7e?Jbyb=oq;_x!ZaFCOhh6u){ucRK# zg;>4Qp88(t@+@P6_Q1VRwi9%~2m<>kG7J!<)0PHu`jPrgn25sn!N6n)A(D40GMBpj z7*3CcMBLR%0H)5$#Yq}A2FtoH(b zZN+-6PM%XwZ;l0|2W}GpjSmh6Yq{1+{gO{?#9lZmB2hmcD9@ zgJ=pV0vxIgaI6U~9xC>Qdh=YyB=kB;O~1UGvKiA#?zl23u`;$nz76X z4;q8Rwd4lf>CV>EKk3wgB#$g;2T_?inK=DRggJ9F5pTIAy9>UFO0zNI>F53Th0-IKY=fTYo0SE=h z<;?}5wcY)O)3qSw-UvE>uT9^$)7XE`rq8?inGQJUdny}en!=fWG{h4!!mQ@hw1r{aZg`CN(9m=sk$-oP{da-`PtaI1YIH{76mz>zByM zZkgsLD~YQN99Of!asDbv+XP{}xE1+)`u)h||7^t97^?_maE*lYS+g5&?9S}*OEKHr zeu-{{FUjsyJ6$^4o%Ib&_hlIgy8aghVO8Xxs{`Tvgp!7kn^WUKMdHXjA2%x zz>5)+@)!SX{af`Q@a4qUp-6E8_=7=4e`SEo3=Ra?nd~@^tH3=6Bpf1EE>rpQFXlud zu%7RezlhSs!IRxpY9?vkFWFgOB|KkJr(iN(iz;iR<@gr1 zRb>fow7|^-^}aKh*TSJUgf~Tqp%)eZk_VeWbIjg5JQ7gUp%X}i>!iJ4Q5(Ry25-mX zZ~s>BT)y{8l8_~fA9@fFB{MYu#fQBN|5}&xPMJK%<~|stm@oLJNa(cszR!}!BnG{S z3Z{79M8HzsfRkkL&Up)l(AIfY37`_&L{L9mi^Kwctfvp=@ZVm5~K5d-{ z^2Bxv5nI6rL%2M-S-^o=_%GT9Gc*tU9fhBADQwM8NE2Jja+gyHU?fGNY}hz(Fgg^( z8u=rKbx-XYcV)x1rLT|(T(GDW1PL@_47*h=U4)2<~;H z5&l~oGg9Lu2sJ45C3H~vadeGN;ZWm>z-NM)MF`CB5;`Me(4Hqi zgm-Uh{PMA2T*+-BvqJI#qPP*xYXuJmy5%pzid!)KgvuU_0L$o%lfb-0HO5p+%ED!V z3Wl|X9Gr!^4cT3lLtnL{*L4(~mK8}!%#~oxMfK0$(A4PhV3B8>2I#0Nel7<21N%Xw-HoGNSdX_C!C?*dx?6VhSkk#GX%RR|y@r z4-!JNA^%)cofEwUJR+Ih{e($K(GJpi90iZ2C#)F)WDQW8QE<*6>4~F4ChUzU7~}}9 z9Yuoe42}U>K`cTbDPPhwBd`Jdm3@y3zxn89s551syy*<05y}Yx$p>*} zL55Lc$lO0&0F>~XxrH}k6y~rJ?>3qdF|ZHa`I*Ca+W#XOK`)zF%I1;=+#qj8R&R=a z?OFI&jRl|mdd>Ud`et<)REZF;K((mD>^LGJeL>s^n|p!j*CZV7glP-}M+P5n%Nr(b z*AAHp+75NYB541oX;SzVA>~_~qCn^l^ z=M}cZ)4UO%X$Rgsr>HkBe8YL|Ax(mQcn)t$7_^O0nS;qMP(<5+xsft6iEhAw9tDVe zxhW{4uMUzdwGUucj24ZIuoeQd2->l70lywOX5z$k+FdWkkQ#cM)J#mq$&Qgj8p6>1 z64v%tF+cxxH5v*?<+JWaKq*Yv_>C1aJgm`ouYsHY%P)ijCsViqq&K{#qWgiWury>G zCG7OCn(s3JGYL+OZ0!EN@9{vnSgQcm(c)^}{WrlQAb%@j-IB?#G8PQxgn1n%34F`z~m)|c!9?v&ye4sOA z!d}Y=*z<%4GDDgP%vP?@Rc{=i<9s=*HXH@3?q2Wy(hWwtL2#DJR^ZFKta#0)Ry2S9 z01?gH;`uF*j@5?+^SEmJP>RPwAVX^H;Y*BbCE3*JGEjXwsQxkvq8fadD2jP2E)6!Uz($W8rLo(Uar@MwGwq*#UFFsSkfRJf&; zK0badWt#N_fMA?df$nF-RBInHO$JuPZu2eg?Nl^Yzd^;)*K6J{%9_;O&$_hy#}A6$ zYxYYwxFkb`git^_8mjx%44FwIYQ&Pij8k5E^xpOVpp%|m?zTNWl*cYYz#wNoR zvz^RDsj->=pbVP$tKGKfu)9nTm#2>q_kmkgNzRPQi@mK#*k~6GupUrqFsVf6;W>2U zLPdI&ZJ6;QzUpTs<`j0${5<*w&&^ZA4*Rb5Z95~`@wmbtTSB+NBLW>E8YL&P%3>6+ z;?$1|e<#f)`Lelq7P`O@966Noaxhoey^-4+Fo0$VMp8Mbo~N(e2+>X~?B~s++m0@S+fj?oOQJaTcnSNNqZljhoW$>`&(25*7G?ZA_-O&jvQMd3s?+=6=ac?4HulGk z;Q*I=DQpgODjIJB7hqNYSaZ-`L~zDf%yqK)j;Wrw;AIxxdwOZ>_m_!hswBefHuB}@ z-U#~@^NkdK^8C`!?)ivz*6+mG3Pa4^_Xg#}GN5tqTb1Cf;f&03;V_x%&`0~sAc3`< zfRbt-5Jw`Ri;%2AoVm2%)6Vh5V*pb#n9O zbK4aczBwR3oy^&k*^>p-aoP-fyd-UEQ(JK^h_M_xM}tQMives^i=RoK3RB7HN%7;2 z@>J@6I)Pm&91kU2>6C6=odRg&6Z{cTo4Z*=DITsK@GR;%Nvq^;%ujp#kEAV7it1DEr)|D!b;Nsr9kwD>)N*}x!F@F z{=&V8d`5cS1d^iUmYHP>5bdpvUnj@Hv6}>8xo{qm!Z6W92+XeEY^6`nh(W=Im#>)! zB)eaUGV$LmxP3}X(kDYhf|ZygjNgD9JV7Tuq>i3v^#{S;3CotbLNF$L5QGKn63T!q zJMjWG?PUgv$%S5WkI*zl?lmE>2x-WS>MZ~%7iuf;%9gHb;r-k^0qBw3_1muQF%069 zT3D1>fg(!?OZ*S&&8v*reHS&4)%Qsb%zy7*{#m}Wtt!zok7FVCECNQOP%MwR#i$6} z5?+D|4DT$fn7z)%3q=3iuMoPXSMzT?_l&<|X)bxF19Klu2&f(jYCJ6vj1hpDnwVYc z42gCPxt(ylPt3xKcq9=3t{oBz$FTT6uXRYaws*$IIC20@E?~TnFDIX2Z0^cCR<{$N z9O3*Q(EH+$_2T1$fj2=h`Ajeqp>O){`Pu|c`i35QgenFf7pgsMmATbmiInRDJ1@W< zC3O4vQ@5!A&)QyQ;=2?N--4`3M_V6rsHL6SA&VjD;k@$7nl%K;SsQ=U1RH3+a2r)v zv=rO^9=G8}y?(>qbXbKTf;Tnpf?<|ZD=vZv-TlBsn?tQIkw>vOi@~MmGWT0z<5z>r zopymjbLgA+bdF8>b7|_I1_TUah zq?>T2?De>7H4@>Hi;zzqN|%A(p=CtgjIk%b!i;+;tCdD54+ZyUOeYfj{-EAXixKkn zEnzgyfivSukvHt+xbc0IH8810Pp*lQ9Rj-g2b~uzk|87M`CQt)9Lo82tSIc^8aBt>vS(D zI}t#_St0?!^(C1qlJ+Yi=G_VCeO5~Kg0vAoK9Tmi!Z-m2Z) z9;Yw{Jx@Mo;?%%2mpZwytHG*NYmW%crC%p|Bme~8fh$x|d|hnzJ{?1(OKmP~PXA<` zi1KrD4&>Mw4+ooESOl>NZgmQ0-#MG(WdDmLT}|lm5{OeqT9=$S>EaTH=27!18rr&{ zB7kFZKjN>cT4bvBB?e4UR8K*3VF*3wW#Slf-FGV%VdJRHR#>pd+4+lndd7>A`;*{eX+DDUj1Vo^S{ZAQKH$E3U|v#EpSg_xUNI`E6dMl- z^=k8!XENfpL~+@6PV2q06yCS|O>ArEOMOfAsE3ZJVq&)>T?BRZz?k zMBs%y+9Q6{#!`#B=|1!9#a`YIbq>Y23Y_F)vFlq}wwD}v=r)NF81bUSjnex!_xBy$ zb)hqc_4g8v=2#~>jn9_}YD8iNw^)Jvjszw-}i)rFJ-#N@cJB;lmc;(yMtIwXE&VC@e-DYwrR zhHM(VwU5ZPxj(p-xK;7~C&6EXJt0(2sSwYY@I7TmD1~bVq112blavi_gnWp2k9%}$ zUrZfD!?&=ZxTm*riNfF?$S-qtF34C=(*jD;v|?AYjgbwzr@7Bl*ny*zE^DusM%CFm zOT8>S4$PZ2qt(S6Spz!Hzxk-@^^zUzzuM!F_MwA2NiY|4IgpLhp`ucOk2E;man5KL z48Vx+;1yMHu{KcwUUVrUpglg%iFDsCkQFUzHXbyQ@Xz_qkm4C(CMe#)Utt={Y6BOv?+j$uNBPFCG-PN6 zm9tf3u_c81DaY4qI9x7^m+|{?AElu5g*?MCDe5WUBKK_3-F={<_Gv-o7a@bUTCdeU zv8*g5P%>TOAVTKUa}N)3qb&CB_g}hb+%UigV%!;y(8(9J3E4fFv66ACp&BYnfnTIF z_IHwRQU;8;_+v);eLUDuc*Y@a9n_D~~9^=RS8o#NWL}g*w=j3j!mULa$;Ax{DSj5iTV75M7 zf00wd;rcX2HB5k=<-w8T5A*a$z(i@WKfnPn!gCi>meD#3ZKsXJY0^twl5cAv_s%fx zs$>1{#!;f``J9=6z`PS}sGmi)=sx09nGAvGc!+J6KZ`h%fBCW+cWFXP&T(XVHUF6Y z27ISPQJtcaCO^wMW|K^RyZU(@qj#)v-PAkC(2N7hBKt ze7khf`}k++P+@ax@eK#6|JIrC7}PlT4m|swdx7lh?XZ)4CbB9iBDMz%@@JY)C!R8r z9a483PQPU8k@=MBZKKy1_U47XlP)x)_mOQQWhva_(p#nd;ewI!-gE8MIa!D1AJ0a+ z(oQ8(-74vgntm0_I0)Zp%loFKgEM+|zGl7nr}rdG;b%$%r(nC#12XGCQh~1NBQyD} ziRPa_7N#F)dEMQxd9e5wNx#*>lpw zc4z9IDo5(TY7omrtXmLPk`7{n0Lxs-~}z$eSxs79M3^Luy^H{lB(Lgk^RUTxBpHm?M!=zulTf;SBf#vPO4e|PXm0FGfo zqeyv8F?=_;sV}dZE0jAJ%JN+&Tt1+|SHglRzza%v2~sp=%KSH=Qve514|0OLY(Ip% zteOB!WL@Uy^==7(;}ZoHokOFKdfzplZ}vy0s(?=53iORX62ekSf_IxKk-l@I_`|&s zUj7h!Wn0S1Aob0KZOavpR70j}fe~Ve7TAZ2ts&3gYy8k$l{I3`?4q{5m#Dd>lIv3M^{+4dnn58} z-NF#v*AAv)S9%OLU7U$y3Kgd~kk_bxnMF#Obe$0vBhL4M9V~2FcpzD}jim6e7T9(Nm(lj5Wje2JsP60C2y<^wB~@q-}o zXTb@ukuJf4BZ?MJ3Aa`XzOnA-=5B>%_o|Gz<8z~P)Cpa|sB=+WcCKcgT|uB-?nAxJBb zm#Zf)M#GDBz4#9VP0q<=5tw8cc*XGbk!gAhrt}to5hqq5#l4Mjl-z75{u?!&)G7yW z5@X>R=$I;6{BmO+7tWvW{15mGm(xde?1y3N3nY+;{@B}qZWawj4S}f`=q7>JHoE(6~_-5Yo@Vq0s{|Ar36n8*7!#nQmKDVBzl_R?jrhyQU9e&i5u{^H7K^YQZB0d*%j$=i>;yY zYBUYgnfB6+@#<14KD;vAFkHJCw$w4`9$+uiUFX$&tifDw%=h31PsaGg4^zBcmmZ7L z=}5Q*Agy3yFULQwEJ;^Cr(9}U5%qxdy!HFlVBm0HF5<=eRnEpwQ7hwi_g`pQ-#w~V zQ&H-#=6+dKI6h#4`(2hfrAB%uE#uJ-N3T>n<#!v3kd7Rij)aWgVmIP%Hby;k1|C!V z4zIU<^-w_a64U8zFzpT-jjZo8MO9f_aO73JkxpsYUDmP}AVMIZqFt2zWM81ncp#8{bH0bJ>#{5JUA15XZf*RG9%i2XNM^7 z`F6;kN23A^T6{YJO{)r?#=CnbxE(M-SgxOemy%2W>3sf=_<1ewzS=@>kmb9?b9Sl2 zxUPHA`zo%XtU{fBZfBLqrk}jO;BIgIm14CJf$EkIvaU_mZOe_-D8|0?Q>Qm97ueSF zzNQ<-`&Q%pR@Q=eG_kE#?ws!#C#XFv`Sw}cJmfJcN~L>YUPbnNCs&ZcEk;LVzcox} zT`hBSI$rKvCNElvNRCGOWyl|U_Bz4+(;e1nm7g0)Rosu?oYu1pZl|9XvXt(+&KNdP zaO6)v&#dSnb~DpSr5VR7>bOh#==il>5A+3d^|{U)xj~@|+s^cs4N4RTf_Z@anP6UG z&4o8+oWQeS zcD4}Yc6L&5Uhgd{&J%P(b@yOjjq4;^x7Cj#{2obvfHll|gMgO^<4M11oiv}5*e}Rd VF_uS#fWN&1RPJcrE>ysV{9iGSqQn3I diff --git a/resources/cartridge.svg b/resources/cartridge.svg new file mode 100644 index 0000000000..661c0371e6 --- /dev/null +++ b/resources/cartridge.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + From c253508803b2f990d9ef89dc707780f9837845ed Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Thu, 26 Jul 2018 09:58:05 +0200 Subject: [PATCH 314/603] Clean up checkbox svg artwork. --- resources/checkbox_checked.svg | 27 +++++---------------------- resources/checkbox_unchecked.svg | 11 +++-------- 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/resources/checkbox_checked.svg b/resources/checkbox_checked.svg index 952ce80d0b..5f19b53021 100644 --- a/resources/checkbox_checked.svg +++ b/resources/checkbox_checked.svg @@ -1,23 +1,6 @@ - - - - - - - - - - - - - - - - - - - + + + + + diff --git a/resources/checkbox_unchecked.svg b/resources/checkbox_unchecked.svg index a1b48e55e6..5808eb13df 100644 --- a/resources/checkbox_unchecked.svg +++ b/resources/checkbox_unchecked.svg @@ -1,9 +1,4 @@ - - - - - + + + From 181a5456fb0691e4321ddf3d1a260dca6b7cf01d Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Thu, 26 Jul 2018 10:36:05 +0200 Subject: [PATCH 315/603] Update svg artwork. --- resources/arrow.svg | 15 ++++----------- resources/fav_add.svg | 15 ++++----------- resources/fav_remove.svg | 11 +++-------- resources/option_arrow.svg | 15 ++++----------- resources/slider_knob.svg | 10 +++------- 5 files changed, 18 insertions(+), 48 deletions(-) diff --git a/resources/arrow.svg b/resources/arrow.svg index 442f00cb0c..505356adee 100644 --- a/resources/arrow.svg +++ b/resources/arrow.svg @@ -1,11 +1,4 @@ - - - - - - - - + + + + diff --git a/resources/fav_add.svg b/resources/fav_add.svg index 94aea1560a..34402f462b 100644 --- a/resources/fav_add.svg +++ b/resources/fav_add.svg @@ -1,12 +1,5 @@ - - - - - - - - - - + + + + diff --git a/resources/fav_remove.svg b/resources/fav_remove.svg index c086952db1..bb5f3f2a72 100644 --- a/resources/fav_remove.svg +++ b/resources/fav_remove.svg @@ -1,9 +1,4 @@ - - - - - - - + + + diff --git a/resources/option_arrow.svg b/resources/option_arrow.svg index 36d39eb8d1..3027a4bc9b 100644 --- a/resources/option_arrow.svg +++ b/resources/option_arrow.svg @@ -1,11 +1,4 @@ - - - - - - - - + + + + diff --git a/resources/slider_knob.svg b/resources/slider_knob.svg index 47d4e97ace..6600ecb6c3 100644 --- a/resources/slider_knob.svg +++ b/resources/slider_knob.svg @@ -1,8 +1,4 @@ - - - - - + + + From a2099a87ae223ee2d9df0552aba3284c0446a512 Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Thu, 26 Jul 2018 12:33:10 +0200 Subject: [PATCH 316/603] Update star svg artwork. --- resources/star_filled.svg | 14 +++----------- resources/star_unfilled.svg | 20 +++----------------- 2 files changed, 6 insertions(+), 28 deletions(-) diff --git a/resources/star_filled.svg b/resources/star_filled.svg index 11d7e0f411..0be43f7911 100644 --- a/resources/star_filled.svg +++ b/resources/star_filled.svg @@ -1,12 +1,4 @@ - - - - - + + + diff --git a/resources/star_unfilled.svg b/resources/star_unfilled.svg index d1063e40ae..9d3a2f7370 100644 --- a/resources/star_unfilled.svg +++ b/resources/star_unfilled.svg @@ -1,18 +1,4 @@ - - - - - + + + From 2adce66ac42b8d7df9299dbf1981765cccac1290 Mon Sep 17 00:00:00 2001 From: hissingshark Date: Thu, 26 Jul 2018 20:14:11 +0100 Subject: [PATCH 317/603] Vero4k autodetection and volume mixer fix --- CMakeLists.txt | 24 ++++++++++++++++++++++++ es-app/src/VolumeControl.cpp | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 66d06762eb..50a31be43b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,12 @@ elseif(EXISTS "/opt/vc/include/bcm_host.h") set(BCMHOST found) set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") #------------------------------------------------------------------------------- +#check if we're running on OSMC Vero4K +elseif(EXISTS "/opt/vero3/lib/libMali.so") + MESSAGE("libMali.so found") + set(VERO4K found) + set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") +#------------------------------------------------------------------------------- #check if we're running on olinuxino / odroid / etc elseif(EXISTS "/usr/lib/libMali.so" OR EXISTS "/usr/lib/arm-linux-gnueabihf/libMali.so" OR @@ -64,6 +70,10 @@ if(DEFINED BCMHOST) add_definitions(-D_RPI_) endif() +if(DEFINED VERO4K) + add_definitions(-D_VERO4K_) +endif() + if(DEFINED libCEC_FOUND) add_definitions(-DHAVE_LIBCEC) endif() @@ -135,6 +145,11 @@ if(DEFINED BCMHOST) "/opt/vc/include/interface/vmcs_host/linux" "/opt/vc/include/interface/vcos/pthreads" ) +#add include directory for Vero4K +elseif(DEFINED VERO4K) + LIST(APPEND COMMON_INCLUDE_DIRS + "/opt/vero3/include" + ) else() if(${GLSystem} MATCHES "Desktop OpenGL") LIST(APPEND COMMON_INCLUDE_DIRS @@ -153,6 +168,10 @@ if(DEFINED BCMHOST) link_directories( "/opt/vc/lib" ) +elseif(DEFINED VERO4K) + link_directories( + "/opt/vero3/lib" + ) endif() set(COMMON_LIBRARIES @@ -191,6 +210,11 @@ if(DEFINED BCMHOST) brcmEGL ${OPENGLES_LIBRARIES} ) +elseif(DEFINED VERO4K) + LIST(APPEND COMMON_LIBRARIES + EGL + ${OPENGLES_LIBRARIES} + ) else() if(MSVC) LIST(APPEND COMMON_LIBRARIES diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index 29b3f3b28a..99757d1d4b 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -8,7 +8,7 @@ #endif #if defined(__linux__) - #ifdef _RPI_ + #if defined(_RPI_) || defined(_VERO4K_) const char * VolumeControl::mixerName = "PCM"; #else const char * VolumeControl::mixerName = "Master"; From e7bc6f7006e2e6eabee8feea8d77530745c2c143 Mon Sep 17 00:00:00 2001 From: tminit Date: Sat, 21 Jul 2018 09:06:20 +0000 Subject: [PATCH 318/603] Changed Audio settings to be much more flexible Changed the selectable options for EmulationStation audio mixer (called AudioDevice in EmulationStation) to be a greater range of selectable options within Linux and RPi so that it is a lot more flexible and will work with any aftermarket add-on audio cards and RPi Audio HATs. Hopefully this gives people the flexibility that they need in order to avoid the issues people have with unusual RPi audio setups. Added the ability to select the audio card as well, by surfacing the audio card under the Audio Card setting. It was previously forced to 'default' for all linux users, which was too restrictive in some instances. This change now adds flexbility to support additional Linux and RPi Audio Cards. This option will only be available on Linux (and therefore RPi) as Windows uses a different audio subsystem. CHOOSING AUDIO ON LINUX AND RPi You now select which ALSA Audio Card you want EmulationStation to use by choosing the relevant AUDIO CARD option. If your one is not listed then you can add a custom one in the es_settings.cfg file (see below). You then select which ALSA Audio Mixer Control from that Audio Card that you want EmulationStation to use, by choosing the relevant AUDIO DEVICE option. (I kept the name AUDIO DEVICE as that what EmulationStation previously used to describe an Audio Mixer.) If your mixer name is not listed then you can add a custom one in the es_settings.cfg file (see below). ADDING A CUSTOM AUDIO CARD OR AUDIO DEVICE In addition I added the ability to manually change the setting in es_settings.cfg to add anything custom that you want. This will give advanced users enough extra power that should avoid even the most strange setups. Step 1: To add a custom Audio Card, edit the "AudioCard" setting and replace the value with the name of your Audio Card. You can find this out by opening a terminal window and running 'aplay -L'. This will generate a list of Audio Cards similar to the one below: pi@raspberrypi:~ $ aplay -L null Discard all samples (playback) or generate zero samples (capture) default:CARD=sndrpijustboomd snd_rpi_justboom_dac, Default Audio Device sysdefault:CARD=sndrpijustboomd snd_rpi_justboom_dac, Default Audio Device dmix:CARD=sndrpijustboomd,DEV=0 snd_rpi_justboom_dac, Direct sample mixing device dsnoop:CARD=sndrpijustboomd,DEV=0 snd_rpi_justboom_dac, Direct sample snooping device hw:CARD=sndrpijustboomd,DEV=0 snd_rpi_justboom_dac, Direct hardware device without any conversions plughw:CARD=sndrpijustboomd,DEV=0 snd_rpi_justboom_dac, Hardware device with all software conversions Select any one of the Audio Cards listed by using the first word on the line in your AudioCard settings in the es_settings.cfg, e.g. NOTE: If the AudioCard value is not listed, please either close and reopen EmulationStation (the settings is created upon close if it doesn't exist), or add it manually to the es_settings.cfg file. Step 2: To add a custom Audio Device (mixer), edit the "AudioDevice" setting and replace the value with the name of your Audio Device. You can get a list off avilable Audio Devices on the Audio Card by opening a terminal window and running 'amixer scontrols -D ', where is replaced with the name of your Audio Card that you found in Step 1. This command will generate a list of Audio Devices (mixers) that you can use in the AudioDevice setting in the es_settings.cfg file, e.g. pi@raspberrypi:~ $ amixer scontrols -D default Simple mixer control 'DSP Program',0 Simple mixer control 'Analogue',0 Simple mixer control 'Analogue Playback Boost',0 Simple mixer control 'Auto Mute',0 Simple mixer control 'Auto Mute Mono',0 Simple mixer control 'Auto Mute Time Left',0 Simple mixer control 'Auto Mute Time Right',0 Simple mixer control 'Clock Missing Period',0 Simple mixer control 'Deemphasis',0 Simple mixer control 'Digital',0 Simple mixer control 'Max Overclock DAC',0 Simple mixer control 'Max Overclock DSP',0 Simple mixer control 'Max Overclock PLL',0 Simple mixer control 'Volume Ramp Down Emergency Rate',0 Simple mixer control 'Volume Ramp Down Emergency Step',0 Simple mixer control 'Volume Ramp Down Rate',0 Simple mixer control 'Volume Ramp Down Step',0 Simple mixer control 'Volume Ramp Up Rate',0 Simple mixer control 'Volume Ramp Up Step',0 Select any one of the Simple mixer controls listed by using the name within the quotes within the AudioDevice setting in your es_settings.cfg file, e.g. Using the example above, the following two settings within the es_settings.cfg file will use the 'default' Audio Card to play sounds, and will use the 'Digital' mixer (Audio Device) to control the volume. NOTE: Any custom manually used settings will be overwritten if you select any of the other options in the GUI and exit the Sound Settings window, as the Sound Settings GUI window overwrites the es_settings.cfg options when you exit the window. Fix latest package renames fonts-droid is now fonts-droid-fallback vlc-nox is now vlc-bin Fixed up whitespacing to project tab standard Had not paid enough attention and had accidentally provided whitespacing in spaces rather than the project standard of tabs. This change fixes some additional use of spaces to ensure all the code in the two files now uses tabs. Vero4k autodetection and volume mixer fix --- CMakeLists.txt | 24 +++++++++++++++ README.md | 4 +-- es-app/src/VolumeControl.cpp | 16 +++++----- es-app/src/VolumeControl.h | 2 +- es-app/src/guis/GuiMenu.cpp | 60 ++++++++++++++++++++++++++++++------ 5 files changed, 86 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 66d06762eb..50a31be43b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,12 @@ elseif(EXISTS "/opt/vc/include/bcm_host.h") set(BCMHOST found) set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") #------------------------------------------------------------------------------- +#check if we're running on OSMC Vero4K +elseif(EXISTS "/opt/vero3/lib/libMali.so") + MESSAGE("libMali.so found") + set(VERO4K found) + set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") +#------------------------------------------------------------------------------- #check if we're running on olinuxino / odroid / etc elseif(EXISTS "/usr/lib/libMali.so" OR EXISTS "/usr/lib/arm-linux-gnueabihf/libMali.so" OR @@ -64,6 +70,10 @@ if(DEFINED BCMHOST) add_definitions(-D_RPI_) endif() +if(DEFINED VERO4K) + add_definitions(-D_VERO4K_) +endif() + if(DEFINED libCEC_FOUND) add_definitions(-DHAVE_LIBCEC) endif() @@ -135,6 +145,11 @@ if(DEFINED BCMHOST) "/opt/vc/include/interface/vmcs_host/linux" "/opt/vc/include/interface/vcos/pthreads" ) +#add include directory for Vero4K +elseif(DEFINED VERO4K) + LIST(APPEND COMMON_INCLUDE_DIRS + "/opt/vero3/include" + ) else() if(${GLSystem} MATCHES "Desktop OpenGL") LIST(APPEND COMMON_INCLUDE_DIRS @@ -153,6 +168,10 @@ if(DEFINED BCMHOST) link_directories( "/opt/vc/lib" ) +elseif(DEFINED VERO4K) + link_directories( + "/opt/vero3/lib" + ) endif() set(COMMON_LIBRARIES @@ -191,6 +210,11 @@ if(DEFINED BCMHOST) brcmEGL ${OPENGLES_LIBRARIES} ) +elseif(DEFINED VERO4K) + LIST(APPEND COMMON_LIBRARIES + EGL + ${OPENGLES_LIBRARIES} + ) else() if(MSVC) LIST(APPEND COMMON_LIBRARIES diff --git a/README.md b/README.md index df2c1a25fd..96c5c6782d 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ EmulationStation has a few dependencies. For building, you'll need CMake, SDL2, All of this be easily installed with apt-get: ```bash sudo apt-get install libsdl2-dev libfreeimage-dev libfreetype6-dev libcurl4-openssl-dev \ - libasound2-dev libgl1-mesa-dev build-essential cmake fonts-droid \ - libvlc-dev libvlccore-dev vlc-nox + libasound2-dev libgl1-mesa-dev build-essential cmake fonts-droid-fallback libvlc-dev \ + libvlccore-dev vlc-bin ``` **On Fedora:** All of this be easily installed with dnf ( With rpmfusion activated) : diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index 29b3f3b28a..cfa9f6c47e 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -8,7 +8,7 @@ #endif #if defined(__linux__) - #ifdef _RPI_ + #if defined(_RPI_) || defined(_VERO4K_) const char * VolumeControl::mixerName = "PCM"; #else const char * VolumeControl::mixerName = "Master"; @@ -22,7 +22,7 @@ std::weak_ptr VolumeControl::sInstance; VolumeControl::VolumeControl() : originalVolume(0), internalVolume(0) #if defined (__APPLE__) - #error TODO: Not implemented for MacOS yet!!! + #error TODO: Not implemented for MacOS yet!!! #elif defined(__linux__) , mixerIndex(0), mixerHandle(nullptr), mixerElem(nullptr), mixerSelemId(nullptr) #elif defined(WIN32) || defined(_WIN32) @@ -36,9 +36,9 @@ VolumeControl::VolumeControl() } VolumeControl::VolumeControl(const VolumeControl & right): - originalVolume(0), internalVolume(0) + originalVolume(0), internalVolume(0) #if defined (__APPLE__) - #error TODO: Not implemented for MacOS yet!!! + #error TODO: Not implemented for MacOS yet!!! #elif defined(__linux__) , mixerIndex(0), mixerHandle(nullptr), mixerElem(nullptr), mixerSelemId(nullptr) #elif defined(WIN32) || defined(_WIN32) @@ -86,9 +86,9 @@ void VolumeControl::init() //try to open mixer device if (mixerHandle == nullptr) { - #ifdef _RPI_ + // Allow users to override the AudioCard and MixerName in es_settings.cfg + mixerCard = Settings::getInstance()->getString("AudioCard").c_str(); mixerName = Settings::getInstance()->getString("AudioDevice").c_str(); - #endif snd_mixer_selem_id_alloca(&mixerSelemId); //sets simple-mixer index and name @@ -256,7 +256,7 @@ int VolumeControl::getVolume() const int volume = 0; #if defined (__APPLE__) - #error TODO: Not implemented for MacOS yet!!! + #error TODO: Not implemented for MacOS yet!!! #elif defined(__linux__) if (mixerElem != nullptr) { @@ -350,7 +350,7 @@ void VolumeControl::setVolume(int volume) //store values in internal variables internalVolume = volume; #if defined (__APPLE__) - #error TODO: Not implemented for MacOS yet!!! + #error TODO: Not implemented for MacOS yet!!! #elif defined(__linux__) if (mixerElem != nullptr) { diff --git a/es-app/src/VolumeControl.h b/es-app/src/VolumeControl.h index 75f598ffcf..a2e420e7e2 100644 --- a/es-app/src/VolumeControl.h +++ b/es-app/src/VolumeControl.h @@ -27,7 +27,7 @@ class VolumeControl static const char * mixerName; static const char * mixerCard; int mixerIndex; - snd_mixer_t* mixerHandle; + snd_mixer_t* mixerHandle; snd_mixer_elem_t* mixerElem; snd_mixer_selem_id_t* mixerSelemId; #elif defined(WIN32) || defined(_WIN32) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 53512c89b8..bacfdb3831 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -16,6 +16,7 @@ #include "SystemData.h" #include "VolumeControl.h" #include +#include GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU"), mVersion(window) { @@ -94,13 +95,49 @@ void GuiMenu::openSoundSettings() if (UIModeController::getInstance()->isUIModeFull()) { -#ifdef _RPI_ +#if defined(__linux__) + // audio card + auto audio_card = std::make_shared< OptionListComponent >(mWindow, "AUDIO CARD", false); + std::vector audio_cards; + #ifdef _RPI_ + // RPi Specific Audio Cards + audio_cards.push_back("local"); + audio_cards.push_back("hdmi"); + audio_cards.push_back("both"); + #endif + audio_cards.push_back("default"); + audio_cards.push_back("sysdefault"); + audio_cards.push_back("dmix"); + audio_cards.push_back("hw"); + audio_cards.push_back("plughw"); + audio_cards.push_back("null"); + if (Settings::getInstance()->getString("AudioCard") != "") { + if(std::find(audio_cards.begin(), audio_cards.end(), Settings::getInstance()->getString("AudioCard")) == audio_cards.end()) { + audio_cards.push_back(Settings::getInstance()->getString("AudioCard")); + } + } + for(auto ac = audio_cards.cbegin(); ac != audio_cards.cend(); ac++) + audio_card->add(*ac, *ac, Settings::getInstance()->getString("AudioCard") == *ac); + s->addWithLabel("AUDIO CARD", audio_card); + s->addSaveFunc([audio_card] { + Settings::getInstance()->setString("AudioCard", audio_card->getSelected()); + VolumeControl::getInstance()->deinit(); + VolumeControl::getInstance()->init(); + }); + // volume control device auto vol_dev = std::make_shared< OptionListComponent >(mWindow, "AUDIO DEVICE", false); std::vector transitions; transitions.push_back("PCM"); transitions.push_back("Speaker"); transitions.push_back("Master"); + transitions.push_back("Digital"); + transitions.push_back("Analogue"); + if (Settings::getInstance()->getString("AudioDevice") != "") { + if(std::find(transitions.begin(), transitions.end(), Settings::getInstance()->getString("AudioDevice")) == transitions.end()) { + transitions.push_back(Settings::getInstance()->getString("AudioDevice")); + } + } for(auto it = transitions.cbegin(); it != transitions.cend(); it++) vol_dev->add(*it, *it, Settings::getInstance()->getString("AudioDevice") == *it); s->addWithLabel("AUDIO DEVICE", vol_dev); @@ -134,14 +171,19 @@ void GuiMenu::openSoundSettings() #ifdef _RPI_ // OMX player Audio Device auto omx_audio_dev = std::make_shared< OptionListComponent >(mWindow, "OMX PLAYER AUDIO DEVICE", false); - std::vector devices; - devices.push_back("local"); - devices.push_back("hdmi"); - devices.push_back("both"); - // USB audio - devices.push_back("alsa:hw:0,0"); - devices.push_back("alsa:hw:1,0"); - for (auto it = devices.cbegin(); it != devices.cend(); it++) + std::vector omx_cards; + // RPi Specific Audio Cards + omx_cards.push_back("local"); + omx_cards.push_back("hdmi"); + omx_cards.push_back("both"); + omx_cards.push_back("alsa:hw:0,0"); + omx_cards.push_back("alsa:hw:1,0"); + if (Settings::getInstance()->getString("OMXAudioDev") != "") { + if (std::find(omx_cards.begin(), omx_cards.end(), Settings::getInstance()->getString("OMXAudioDev")) == omx_cards.end()) { + omx_cards.push_back(Settings::getInstance()->getString("OMXAudioDev")); + } + } + for (auto it = omx_cards.cbegin(); it != omx_cards.cend(); it++) omx_audio_dev->add(*it, *it, Settings::getInstance()->getString("OMXAudioDev") == *it); s->addWithLabel("OMX PLAYER AUDIO DEVICE", omx_audio_dev); s->addSaveFunc([omx_audio_dev] { From 15ccfc5a05ca82fe443c5844d57255563090479c Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 20 Aug 2018 15:32:31 +0200 Subject: [PATCH 319/603] Remove trailing '/' in getGenericPath --- es-core/src/utils/FileSystemUtil.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 23234ee071..9119cc17ef 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -226,6 +226,10 @@ namespace Utils while((offset = path.find("//")) != std::string::npos) path.erase(offset, 1); + // remove trailing '/' + while(path.length() && ((offset = path.find_last_of('/')) == (path.length() - 1))) + path.erase(offset, 1); + // return generic path return path; From 84b1038c3fd5848befc0a137d09228c7d7600245 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Tue, 21 Aug 2018 15:38:07 +0200 Subject: [PATCH 320/603] Fixes for roms larger than 2GB pi: #define _FILE_OFFSET_BITS 64 windows: Switch to use stat64 where needed --- es-core/src/utils/FileSystemUtil.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 23234ee071..a6d0ce4c36 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -1,3 +1,5 @@ +#define _FILE_OFFSET_BITS 64 + #include "utils/FileSystemUtil.h" #include "Settings.h" @@ -11,6 +13,7 @@ #define getcwd _getcwd #define mkdir(x,y) _mkdir(x) #define snprintf _snprintf +#define stat64 _stat64 #define unlink _unlink #define S_ISREG(x) (((x) & S_IFMT) == S_IFREG) #define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR) @@ -553,10 +556,10 @@ namespace Utils bool exists(const std::string& _path) { std::string path = getGenericPath(_path); - struct stat info; + struct stat64 info; - // check if stat succeeded - return (stat(path.c_str(), &info) == 0); + // check if stat64 succeeded + return (stat64(path.c_str(), &info) == 0); } // exists @@ -575,10 +578,10 @@ namespace Utils bool isRegularFile(const std::string& _path) { std::string path = getGenericPath(_path); - struct stat info; + struct stat64 info; - // check if stat succeeded - if(stat(path.c_str(), &info) != 0) + // check if stat64 succeeded + if(stat64(path.c_str(), &info) != 0) return false; // check for S_IFREG attribute @@ -649,11 +652,11 @@ namespace Utils { std::string path1 = getGenericPath(_path1); std::string path2 = getGenericPath(_path2); - struct stat info1; - struct stat info2; + struct stat64 info1; + struct stat64 info2; - // check if stat succeeded - if((stat(path1.c_str(), &info1) != 0) || (stat(path2.c_str(), &info2) != 0)) + // check if stat64 succeeded + if((stat64(path1.c_str(), &info1) != 0) || (stat64(path2.c_str(), &info2) != 0)) return false; // check if attributes are identical From 747e400593a7df86e9422edcc500012603054058 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 20 Aug 2018 13:54:58 +0200 Subject: [PATCH 321/603] Allow to show hidden files on Windows Skip hidden files earlier --- es-app/src/SystemData.cpp | 8 ++++---- es-app/src/guis/GuiMenu.cpp | 2 -- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 30790798ee..04fa62838e 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -97,6 +97,10 @@ void SystemData::populateFolder(FileData* folder) { filePath = *it; + // skip hidden files and folders + if(!showHidden && Utils::FileSystem::isHidden(filePath)) + continue; + //this is a little complicated because we allow a list of extensions to be defined (delimited with a space) //we first get the extension of the file itself: extension = Utils::FileSystem::getExtension(filePath); @@ -107,10 +111,6 @@ void SystemData::populateFolder(FileData* folder) isGame = false; if(std::find(mEnvData->mSearchExtensions.cbegin(), mEnvData->mSearchExtensions.cend(), extension) != mEnvData->mSearchExtensions.cend()) { - // skip hidden files - if(!showHidden && Utils::FileSystem::isHidden(filePath)) - continue; - FileData* newGame = new FileData(GAME, filePath, mEnvData, this); folder->addChild(newGame); isGame = true; diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 53512c89b8..37d4de0834 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -363,13 +363,11 @@ void GuiMenu::openOtherSettings() s->addWithLabel("PARSE GAMESLISTS ONLY", parse_gamelists); s->addSaveFunc([parse_gamelists] { Settings::getInstance()->setBool("ParseGamelistOnly", parse_gamelists->getState()); }); -#ifndef WIN32 // hidden files auto hidden_files = std::make_shared(mWindow); hidden_files->setState(Settings::getInstance()->getBool("ShowHiddenFiles")); s->addWithLabel("SHOW HIDDEN FILES", hidden_files); s->addSaveFunc([hidden_files] { Settings::getInstance()->setBool("ShowHiddenFiles", hidden_files->getState()); }); -#endif #ifdef _RPI_ // Video Player - VideoOmxPlayer From 3ea6a7423b9f7b71bff50425d1bbad55eeb140df Mon Sep 17 00:00:00 2001 From: Cristi Mitrana Date: Fri, 14 Sep 2018 13:29:28 +0300 Subject: [PATCH 322/603] Fix the `opacity` for the hold-to-skip message. This fixed the bug when toggling the visibility by calling `setOpacity` on the TextComponent didn't have any effect. --- es-core/src/guis/GuiInputConfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 es-core/src/guis/GuiInputConfig.cpp diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp old mode 100644 new mode 100755 index 934551a66d..fe3b95e9d8 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -81,7 +81,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mSubtitle1 = std::make_shared(mWindow, Utils::String::toUpper(ss.str()), Font::get(FONT_SIZE_MEDIUM), 0x555555FF, ALIGN_CENTER); mGrid.setEntry(mSubtitle1, Vector2i(0, 2), false, true); - mSubtitle2 = std::make_shared(mWindow, "HOLD ANY BUTTON TO SKIP", Font::get(FONT_SIZE_SMALL), 0x99999900, ALIGN_CENTER); + mSubtitle2 = std::make_shared(mWindow, "HOLD ANY BUTTON TO SKIP", Font::get(FONT_SIZE_SMALL), 0x999999FF, ALIGN_CENTER); mGrid.setEntry(mSubtitle2, Vector2i(0, 3), false, true); // 4 is a spacer row From 3f9ffaa33d26034392f62722f505e3599ead72b3 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 20 Sep 2018 18:49:07 +0200 Subject: [PATCH 323/603] Reset "StartupSystem" to "" if the requested system doesn't exist --- es-app/src/views/ViewController.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 81626cba63..0d81471eaf 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -56,6 +56,9 @@ void ViewController::goToStart() return; } } + + // Requested system doesn't exist + Settings::getInstance()->setString("StartupSystem", ""); } goToSystemView(SystemData::sSystemVector.at(0)); } From 38c2b9a67bd6a81e465fc6a9666b7b10875f2ff7 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Tue, 9 Oct 2018 13:23:32 +0200 Subject: [PATCH 324/603] Fix missing / in custom collection path --- es-app/src/CollectionSystemManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 2d2673beed..e40a894b50 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -1035,12 +1035,12 @@ bool CollectionSystemManager::includeFileInAutoCollections(FileData* file) std::string getCustomCollectionConfigPath(std::string collectionName) { - return getCollectionsFolder() + "custom-" + collectionName + ".cfg";; + return getCollectionsFolder() + "/custom-" + collectionName + ".cfg"; } std::string getCollectionsFolder() { - return Utils::FileSystem::getGenericPath(Utils::FileSystem::getHomePath() + "/.emulationstation/collections/"); + return Utils::FileSystem::getGenericPath(Utils::FileSystem::getHomePath() + "/.emulationstation/collections"); } bool systemSort(SystemData* sys1, SystemData* sys2) From a57b0ecfead8f662b0691c621c4503e0b7214415 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Fri, 12 Oct 2018 18:08:15 -0700 Subject: [PATCH 325/603] create new DateTimeComponent --- THEMES.md | 28 +- .../src/components/ScraperSearchComponent.cpp | 4 +- .../src/components/ScraperSearchComponent.h | 4 +- es-app/src/guis/GuiMetaDataEd.cpp | 8 +- .../views/gamelist/DetailedGameListView.cpp | 2 +- .../src/views/gamelist/GridGameListView.cpp | 2 +- .../src/views/gamelist/VideoGameListView.cpp | 2 +- es-core/CMakeLists.txt | 2 + es-core/src/ThemeData.cpp | 11 +- es-core/src/components/DateTimeComponent.cpp | 346 ++++-------------- es-core/src/components/DateTimeComponent.h | 64 +--- .../src/components/DateTimeEditComponent.cpp | 336 +++++++++++++++++ .../src/components/DateTimeEditComponent.h | 71 ++++ es-core/src/components/TextComponent.h | 11 +- 14 files changed, 549 insertions(+), 342 deletions(-) create mode 100644 es-core/src/components/DateTimeEditComponent.cpp create mode 100644 es-core/src/components/DateTimeEditComponent.h diff --git a/THEMES.md b/THEMES.md index 2af630b7e2..fc4ff063b1 100644 --- a/THEMES.md +++ b/THEMES.md @@ -731,14 +731,38 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice - z-index value for component. Components will be rendered in order of z-index value from low to high. #### datetime - * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. - - You should probably not set this. Leave it to `fontSize`. + - Possible combinations: + - `0 0` - automatically size so text fits on one line (expanding horizontally). + - `w 0` - automatically wrap text so it doesn't go beyond `w` (expanding vertically). + - `w h` - works like a "text box." If `h` is non-zero and `h` <= `fontSize` (implying it should be a single line of text), text that goes beyond `w` will be truncated with an elipses (...). +* `origin` - type: NORMALIZED_PAIR. + - Where on the component `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the component exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. +* `rotation` - type: FLOAT. + - angle in degrees that the text should be rotated. Positive values will rotate clockwise, negative values will rotate counterclockwise. +* `rotationOrigin` - type: NORMALIZED_PAIR. + - Point around which the text will be rotated. Defaults to `0.5 0.5`. * `color` - type: COLOR. +* `backgroundColor` - type: COLOR; * `fontPath` - type: PATH. + - Path to a truetype font (.ttf). * `fontSize` - type: FLOAT. + - Size of the font as a percentage of screen height (e.g. for a value of `0.1`, the text's height would be 10% of the screen height). +* `alignment` - type: STRING. + - Valid values are "left", "center", or "right". Controls alignment on the X axis. "center" will also align vertically. * `forceUppercase` - type: BOOLEAN. Draw text in uppercase. +* `lineSpacing` - type: FLOAT. Controls the space between lines (as a multiple of font height). Default is 1.5. +* `zIndex` - type: FLOAT. + - z-index value for component. Components will be rendered in order of z-index value from low to high. +* `displayRelative` - type: BOOLEAN. Renders the datetime as a a relative string (ex: 'x days ago') +* `format` - type: STRING. Specifies format for rendering datetime. + - %Y: The year, including the century (1900) + - %m: The month number [01,12] + - %d: The day of the month [01,31] + - %H: The hour (24-hour clock) [00,23] + - %M: The minute [00,59] + - %S: The second [00,59] #### sound diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index 3cffa40ec1..80428f9eae 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -1,7 +1,7 @@ #include "components/ScraperSearchComponent.h" #include "components/ComponentList.h" -#include "components/DateTimeComponent.h" +#include "components/DateTimeEditComponent.h" #include "components/ImageComponent.h" #include "components/RatingComponent.h" #include "components/ScrollableContainer.h" @@ -43,7 +43,7 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) const unsigned int mdColor = 0x777777FF; const unsigned int mdLblColor = 0x666666FF; mMD_Rating = std::make_shared(mWindow); - mMD_ReleaseDate = std::make_shared(mWindow); + mMD_ReleaseDate = std::make_shared(mWindow); mMD_ReleaseDate->setColor(mdColor); mMD_Developer = std::make_shared(mWindow, "", font, mdColor); mMD_Publisher = std::make_shared(mWindow, "", font, mdColor); diff --git a/es-app/src/components/ScraperSearchComponent.h b/es-app/src/components/ScraperSearchComponent.h index cb3ac6cae3..b2924a7a15 100644 --- a/es-app/src/components/ScraperSearchComponent.h +++ b/es-app/src/components/ScraperSearchComponent.h @@ -8,7 +8,7 @@ #include "GuiComponent.h" class ComponentList; -class DateTimeComponent; +class DateTimeEditComponent; class ImageComponent; class RatingComponent; class ScrollableContainer; @@ -69,7 +69,7 @@ class ScraperSearchComponent : public GuiComponent std::shared_ptr mMD_Grid; std::shared_ptr mMD_Rating; - std::shared_ptr mMD_ReleaseDate; + std::shared_ptr mMD_ReleaseDate; std::shared_ptr mMD_Developer; std::shared_ptr mMD_Publisher; std::shared_ptr mMD_Genre; diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index fcf780774c..0650b02144 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -2,7 +2,7 @@ #include "components/ButtonComponent.h" #include "components/ComponentList.h" -#include "components/DateTimeComponent.h" +#include "components/DateTimeEditComponent.h" #include "components/MenuComponent.h" #include "components/RatingComponent.h" #include "components/SwitchComponent.h" @@ -87,21 +87,21 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector } case MD_DATE: { - ed = std::make_shared(window); + ed = std::make_shared(window); row.addElement(ed, false); auto spacer = std::make_shared(mWindow); spacer->setSize(Renderer::getScreenWidth() * 0.0025f, 0); row.addElement(spacer, false); - // pass input to the actual DateTimeComponent instead of the spacer + // pass input to the actual DateTimeEditComponent instead of the spacer row.input_handler = std::bind(&GuiComponent::input, ed.get(), std::placeholders::_1, std::placeholders::_2); break; } case MD_TIME: { - ed = std::make_shared(window, DateTimeComponent::DISP_RELATIVE_TO_NOW); + ed = std::make_shared(window, DateTimeEditComponent::DISP_RELATIVE_TO_NOW); row.addElement(ed, false); break; } diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 247c92d103..87d2893f56 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -52,7 +52,7 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : addChild(&mPlayers); mLblLastPlayed.setText("Last played: "); addChild(&mLblLastPlayed); - mLastPlayed.setDisplayMode(DateTimeComponent::DISP_RELATIVE_TO_NOW); + mLastPlayed.setDisplayRelative(true); addChild(&mLastPlayed); mLblPlayCount.setText("Times played: "); addChild(&mLblPlayCount); diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index a568a0943f..084c3fc491 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -49,7 +49,7 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : addChild(&mPlayers); mLblLastPlayed.setText("Last played: "); addChild(&mLblLastPlayed); - mLastPlayed.setDisplayMode(DateTimeComponent::DISP_RELATIVE_TO_NOW); + mLastPlayed.setDisplayRelative(true); addChild(&mLastPlayed); mLblPlayCount.setText("Times played: "); addChild(&mLblPlayCount); diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index ee1d06b7bf..b57d669444 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -86,7 +86,7 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : addChild(&mPlayers); mLblLastPlayed.setText("Last played: "); addChild(&mLblLastPlayed); - mLastPlayed.setDisplayMode(DateTimeComponent::DISP_RELATIVE_TO_NOW); + mLastPlayed.setDisplayRelative(true); addChild(&mLastPlayed); mLblPlayCount.setText("Times played: "); addChild(&mLblPlayCount); diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index fb4dcbee88..4688849292 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -32,6 +32,7 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeEditComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GridTileComponent.h ${CMAKE_CURRENT_SOURCE_DIR}/src/components/IList.h @@ -106,6 +107,7 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentGrid.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ComponentList.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeComponent.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/components/DateTimeEditComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/HelpComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/GridTileComponent.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/components/ImageComponent.cpp diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index fe78e4cee1..628f085a77 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -90,10 +90,19 @@ std::map> The { "datetime", { { "pos", NORMALIZED_PAIR }, { "size", NORMALIZED_PAIR }, - { "color", COLOR }, + { "origin", NORMALIZED_PAIR }, + { "rotation", FLOAT }, + { "rotationOrigin", NORMALIZED_PAIR }, + { "backgroundColor", COLOR }, { "fontPath", PATH }, { "fontSize", FLOAT }, + { "color", COLOR }, + { "alignment", STRING }, { "forceUppercase", BOOLEAN }, + { "lineSpacing", FLOAT }, + { "value", STRING }, + { "format", STRING }, + { "displayRelative", BOOLEAN }, { "zIndex", FLOAT } } }, { "rating", { { "pos", NORMALIZED_PAIR }, diff --git a/es-core/src/components/DateTimeComponent.cpp b/es-core/src/components/DateTimeComponent.cpp index 644fd4f7e6..0052f11ad3 100644 --- a/es-core/src/components/DateTimeComponent.cpp +++ b/es-core/src/components/DateTimeComponent.cpp @@ -1,176 +1,25 @@ #include "components/DateTimeComponent.h" -#include "resources/Font.h" #include "utils/StringUtil.h" +#include "Log.h" #include "Renderer.h" +#include "Settings.h" -DateTimeComponent::DateTimeComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), - mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), - mColor(0x777777FF), mFont(Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT)), mUppercase(false), mAutoSize(true) +DateTimeComponent::DateTimeComponent(Window* window) : TextComponent(window), mDisplayRelative(false) { - updateTextCache(); + setFormat("%m/%d/%Y"); } -void DateTimeComponent::setDisplayMode(DisplayMode mode) +DateTimeComponent::DateTimeComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Alignment align, + Vector3f pos, Vector2f size, unsigned int bgcolor) : TextComponent(window, text, font, color, align, pos, size, bgcolor), mDisplayRelative(false) { - mDisplayMode = mode; - updateTextCache(); -} - -bool DateTimeComponent::input(InputConfig* config, Input input) -{ - if(input.value == 0) - return false; - - if(config->isMappedTo("a", input)) - { - if(mDisplayMode != DISP_RELATIVE_TO_NOW) //don't allow editing for relative times - mEditing = !mEditing; - - if(mEditing) - { - //started editing - mTimeBeforeEdit = mTime; - - //initialize to now if unset - if(mTime.getTime() == Utils::Time::NOT_A_DATE_TIME) - { - mTime = Utils::Time::now(); - updateTextCache(); - } - } - - return true; - } - - if(mEditing) - { - if(config->isMappedTo("b", input)) - { - mEditing = false; - mTime = mTimeBeforeEdit; - updateTextCache(); - return true; - } - - int incDir = 0; - if(config->isMappedTo("up", input) || config->isMappedTo("pageup", input)) - incDir = 1; - else if(config->isMappedTo("down", input) || config->isMappedTo("pagedown", input)) - incDir = -1; - - if(incDir != 0) - { - tm new_tm = mTime; - - if(mEditIndex == 0) - { - new_tm.tm_mon += incDir; - - if(new_tm.tm_mon > 11) - new_tm.tm_mon = 0; - else if(new_tm.tm_mon < 0) - new_tm.tm_mon = 11; - - } - else if(mEditIndex == 1) - { - const int days_in_month = Utils::Time::daysInMonth(new_tm.tm_year + 1900, new_tm.tm_mon + 1); - new_tm.tm_mday += incDir; - - if(new_tm.tm_mday > days_in_month) - new_tm.tm_mday = 1; - else if(new_tm.tm_mday < 1) - new_tm.tm_mday = days_in_month; - - } - else if(mEditIndex == 2) - { - new_tm.tm_year += incDir; - - if(new_tm.tm_year < 0) - new_tm.tm_year = 0; - } - - //validate day - const int days_in_month = Utils::Time::daysInMonth(new_tm.tm_year + 1900, new_tm.tm_mon + 1); - if(new_tm.tm_mday > days_in_month) - new_tm.tm_mday = days_in_month; - - mTime = new_tm; - - updateTextCache(); - return true; - } - - if(config->isMappedTo("right", input)) - { - mEditIndex++; - if(mEditIndex >= (int)mCursorBoxes.size()) - mEditIndex--; - return true; - } - - if(config->isMappedTo("left", input)) - { - mEditIndex--; - if(mEditIndex < 0) - mEditIndex++; - return true; - } - } - - return GuiComponent::input(config, input); -} - -void DateTimeComponent::update(int deltaTime) -{ - if(mDisplayMode == DISP_RELATIVE_TO_NOW) - { - mRelativeUpdateAccumulator += deltaTime; - if(mRelativeUpdateAccumulator > 1000) - { - mRelativeUpdateAccumulator = 0; - updateTextCache(); - } - } - - GuiComponent::update(deltaTime); -} - -void DateTimeComponent::render(const Transform4x4f& parentTrans) -{ - Transform4x4f trans = parentTrans * getTransform(); - - if(mTextCache) - { - // vertically center - Vector3f off(0, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); - trans.translate(off); - trans.round(); - - Renderer::setMatrix(trans); - - std::shared_ptr font = getFont(); - - mTextCache->setColor((mColor & 0xFFFFFF00) | getOpacity()); - font->renderTextCache(mTextCache.get()); - - if(mEditing) - { - if(mEditIndex >= 0 && (unsigned int)mEditIndex < mCursorBoxes.size()) - { - Renderer::drawRect((int)mCursorBoxes[mEditIndex][0], (int)mCursorBoxes[mEditIndex][1], - (int)mCursorBoxes[mEditIndex][2], (int)mCursorBoxes[mEditIndex][3], 0x00000022); - } - } - } + setFormat("%m/%d/%Y"); } void DateTimeComponent::setValue(const std::string& val) { mTime = val; - updateTextCache(); + onTextChanged(); } std::string DateTimeComponent::getValue() const @@ -178,159 +27,104 @@ std::string DateTimeComponent::getValue() const return mTime; } -DateTimeComponent::DisplayMode DateTimeComponent::getCurrentDisplayMode() const +void DateTimeComponent::setFormat(const std::string& format) { - /*if(mEditing) - { - if(mDisplayMode == DISP_RELATIVE_TO_NOW) - { - //TODO: if time component == 00:00:00, return DISP_DATE, else return DISP_DATE_TIME - return DISP_DATE; - } - }*/ - - return mDisplayMode; + mFormat = format; + onTextChanged(); } -std::string DateTimeComponent::getDisplayString(DisplayMode mode) const +void DateTimeComponent::setDisplayRelative(bool displayRelative) { - std::string fmt; - switch(mode) - { - case DISP_DATE: - fmt = "%m/%d/%Y"; - break; - case DISP_DATE_TIME: - fmt = "%m/%d/%Y %H:%M:%S"; - break; - case DISP_RELATIVE_TO_NOW: - { - //relative time - if(mTime.getTime() == 0) - return "never"; - - Utils::Time::DateTime now(Utils::Time::now()); - Utils::Time::Duration dur(now.getTime() - mTime.getTime()); - - char buf[64]; - - if(dur.getDays() > 0) - sprintf(buf, "%d day%s ago", dur.getDays(), (dur.getDays() > 1) ? "s" : ""); - else if(dur.getHours() > 0) - sprintf(buf, "%d hour%s ago", dur.getHours(), (dur.getHours() > 1) ? "s" : ""); - else if(dur.getMinutes() > 0) - sprintf(buf, "%d minute%s ago", dur.getMinutes(), (dur.getMinutes() > 1) ? "s" : ""); - else - sprintf(buf, "%d second%s ago", dur.getSeconds(), (dur.getSeconds() > 1) ? "s" : ""); - - return std::string(buf); - } - break; - } - - if(mTime.getTime() == 0) - return "unknown"; - - return Utils::Time::timeToString(mTime, fmt); + mDisplayRelative = displayRelative; + onTextChanged(); } -std::shared_ptr DateTimeComponent::getFont() const +void DateTimeComponent::onTextChanged() { - if(mFont) - return mFont; + mText = getDisplayString(); - return Font::get(FONT_SIZE_MEDIUM); + TextComponent::onTextChanged(); } -void DateTimeComponent::updateTextCache() +std::string DateTimeComponent::getDisplayString() const { - DisplayMode mode = getCurrentDisplayMode(); - const std::string dispString = mUppercase ? Utils::String::toUpper(getDisplayString(mode)) : getDisplayString(mode); - std::shared_ptr font = getFont(); - mTextCache = std::unique_ptr(font->buildTextCache(dispString, 0, 0, mColor)); - - if(mAutoSize) - { - mSize = mTextCache->metrics.size; - - mAutoSize = false; - if(getParent()) - getParent()->onSizeChanged(); - } + if (mDisplayRelative) { + //relative time + if(mTime.getTime() == 0) + return "never"; - //set up cursor positions - mCursorBoxes.clear(); + Utils::Time::DateTime now(Utils::Time::now()); + Utils::Time::Duration dur(now.getTime() - mTime.getTime()); - if(dispString.empty() || mode == DISP_RELATIVE_TO_NOW) - return; + char buf[64]; - //month - Vector2f start(0, 0); - Vector2f end = font->sizeText(dispString.substr(0, 2)); - Vector2f diff = end - start; - mCursorBoxes.push_back(Vector4f(start[0], start[1], diff[0], diff[1])); + if(dur.getDays() > 0) + sprintf(buf, "%d day%s ago", dur.getDays(), (dur.getDays() > 1) ? "s" : ""); + else if(dur.getHours() > 0) + sprintf(buf, "%d hour%s ago", dur.getHours(), (dur.getHours() > 1) ? "s" : ""); + else if(dur.getMinutes() > 0) + sprintf(buf, "%d minute%s ago", dur.getMinutes(), (dur.getMinutes() > 1) ? "s" : ""); + else + sprintf(buf, "%d second%s ago", dur.getSeconds(), (dur.getSeconds() > 1) ? "s" : ""); - //day - start[0] = font->sizeText(dispString.substr(0, 3)).x(); - end = font->sizeText(dispString.substr(0, 5)); - diff = end - start; - mCursorBoxes.push_back(Vector4f(start[0], start[1], diff[0], diff[1])); + return std::string(buf); + } - //year - start[0] = font->sizeText(dispString.substr(0, 6)).x(); - end = font->sizeText(dispString.substr(0, 10)); - diff = end - start; - mCursorBoxes.push_back(Vector4f(start[0], start[1], diff[0], diff[1])); + if(mTime.getTime() == 0) + return "unknown"; - //if mode == DISP_DATE_TIME do times too but I don't wanna do the logic for editing times because no one will ever use it so screw it + return Utils::Time::timeToString(mTime.getTime(), mFormat); } -void DateTimeComponent::setColor(unsigned int color) +void DateTimeComponent::render(const Transform4x4f& parentTrans) { - mColor = color; - if(mTextCache) - mTextCache->setColor(color); + TextComponent::render(parentTrans); } -void DateTimeComponent::setFont(std::shared_ptr font) -{ - mFont = font; - updateTextCache(); -} -void DateTimeComponent::onSizeChanged() +void DateTimeComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { - mAutoSize = false; - updateTextCache(); -} + GuiComponent::applyTheme(theme, view, element, properties); -void DateTimeComponent::setUppercase(bool uppercase) -{ - mUppercase = uppercase; - updateTextCache(); -} + using namespace ThemeFlags; -void DateTimeComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) -{ const ThemeData::ThemeElement* elem = theme->getElement(view, element, "datetime"); if(!elem) return; - // We set mAutoSize BEFORE calling GuiComponent::applyTheme because it calls - // setSize(), which will call updateTextCache(), which will reset mSize if - // mAutoSize == true, ignoring the theme's value. - if(properties & ThemeFlags::SIZE) - mAutoSize = !elem->has("size"); + if(elem->has("displayRelative")) + setDisplayRelative(elem->get("displayRelative")); - GuiComponent::applyTheme(theme, view, element, properties); - - using namespace ThemeFlags; + if(elem->has("format")) + setFormat(elem->get("format")); - if(properties & COLOR && elem->has("color")) + if (properties & COLOR && elem->has("color")) setColor(elem->get("color")); + setRenderBackground(false); + if (properties & COLOR && elem->has("backgroundColor")) { + setBackgroundColor(elem->get("backgroundColor")); + setRenderBackground(true); + } + + if(properties & ALIGNMENT && elem->has("alignment")) + { + std::string str = elem->get("alignment"); + if(str == "left") + setHorizontalAlignment(ALIGN_LEFT); + else if(str == "center") + setHorizontalAlignment(ALIGN_CENTER); + else if(str == "right") + setHorizontalAlignment(ALIGN_RIGHT); + else + LOG(LogError) << "Unknown text alignment string: " << str; + } + if(properties & FORCE_UPPERCASE && elem->has("forceUppercase")) setUppercase(elem->get("forceUppercase")); + if(properties & LINE_SPACING && elem->has("lineSpacing")) + setLineSpacing(elem->get("lineSpacing")); + setFont(Font::getFromTheme(elem, properties, mFont)); } diff --git a/es-core/src/components/DateTimeComponent.h b/es-core/src/components/DateTimeComponent.h index 8e629c4917..55d70ca5f6 100644 --- a/es-core/src/components/DateTimeComponent.h +++ b/es-core/src/components/DateTimeComponent.h @@ -3,69 +3,37 @@ #define ES_CORE_COMPONENTS_DATE_TIME_COMPONENT_H #include "utils/TimeUtil.h" -#include "GuiComponent.h" +#include "TextComponent.h" -class TextCache; +class ThemeData; -// Used to enter or display a specific point in time. -class DateTimeComponent : public GuiComponent +// Used to display date times. +class DateTimeComponent : public TextComponent { public: - enum DisplayMode - { - DISP_DATE, - DISP_DATE_TIME, - DISP_RELATIVE_TO_NOW - }; + DateTimeComponent(Window* window); + DateTimeComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color = 0x000000FF, Alignment align = ALIGN_LEFT, + Vector3f pos = Vector3f::Zero(), Vector2f size = Vector2f::Zero(), unsigned int bgcolor = 0x00000000); - DateTimeComponent(Window* window, DisplayMode dispMode = DISP_DATE); + void render(const Transform4x4f& parentTrans) override; void setValue(const std::string& val) override; std::string getValue() const override; - bool input(InputConfig* config, Input input) override; - void update(int deltaTime) override; - void render(const Transform4x4f& parentTrans) override; - void onSizeChanged() override; - - // Set how the point in time will be displayed: - // * DISP_DATE - only display the date. - // * DISP_DATE_TIME - display both the date and the time on that date. - // * DISP_RELATIVE_TO_NOW - intelligently display the point in time relative to right now (e.g. "5 secs ago", "3 minutes ago", "1 day ago". Automatically updates as time marches on. - // The initial value is DISP_DATE. - void setDisplayMode(DisplayMode mode); - - void setColor(unsigned int color); // Text color. - void setFont(std::shared_ptr font); // Font to display with. Default is Font::get(FONT_SIZE_MEDIUM). - void setUppercase(bool uppercase); // Force text to be uppercase when in DISP_RELATIVE_TO_NOW mode. + void setFormat(const std::string& format); + void setDisplayRelative(bool displayRelative); virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; -private: - std::shared_ptr getFont() const; +protected: + void onTextChanged() override; - std::string getDisplayString(DisplayMode mode) const; - DisplayMode getCurrentDisplayMode() const; - - void updateTextCache(); +private: + std::string getDisplayString() const; Utils::Time::DateTime mTime; - Utils::Time::DateTime mTimeBeforeEdit; - - bool mEditing; - int mEditIndex; - DisplayMode mDisplayMode; - - int mRelativeUpdateAccumulator; - - std::unique_ptr mTextCache; - std::vector mCursorBoxes; - - unsigned int mColor; - std::shared_ptr mFont; - bool mUppercase; - - bool mAutoSize; + std::string mFormat; + bool mDisplayRelative; }; #endif // ES_CORE_COMPONENTS_DATE_TIME_COMPONENT_H diff --git a/es-core/src/components/DateTimeEditComponent.cpp b/es-core/src/components/DateTimeEditComponent.cpp new file mode 100644 index 0000000000..1617934c01 --- /dev/null +++ b/es-core/src/components/DateTimeEditComponent.cpp @@ -0,0 +1,336 @@ +#include "components/DateTimeEditComponent.h" + +#include "resources/Font.h" +#include "utils/StringUtil.h" +#include "Renderer.h" + +DateTimeEditComponent::DateTimeEditComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), + mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), + mColor(0x777777FF), mFont(Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT)), mUppercase(false), mAutoSize(true) +{ + updateTextCache(); +} + +void DateTimeEditComponent::setDisplayMode(DisplayMode mode) +{ + mDisplayMode = mode; + updateTextCache(); +} + +bool DateTimeEditComponent::input(InputConfig* config, Input input) +{ + if(input.value == 0) + return false; + + if(config->isMappedTo("a", input)) + { + if(mDisplayMode != DISP_RELATIVE_TO_NOW) //don't allow editing for relative times + mEditing = !mEditing; + + if(mEditing) + { + //started editing + mTimeBeforeEdit = mTime; + + //initialize to now if unset + if(mTime.getTime() == Utils::Time::NOT_A_DATE_TIME) + { + mTime = Utils::Time::now(); + updateTextCache(); + } + } + + return true; + } + + if(mEditing) + { + if(config->isMappedTo("b", input)) + { + mEditing = false; + mTime = mTimeBeforeEdit; + updateTextCache(); + return true; + } + + int incDir = 0; + if(config->isMappedTo("up", input) || config->isMappedTo("pageup", input)) + incDir = 1; + else if(config->isMappedTo("down", input) || config->isMappedTo("pagedown", input)) + incDir = -1; + + if(incDir != 0) + { + tm new_tm = mTime; + + if(mEditIndex == 0) + { + new_tm.tm_mon += incDir; + + if(new_tm.tm_mon > 11) + new_tm.tm_mon = 0; + else if(new_tm.tm_mon < 0) + new_tm.tm_mon = 11; + + } + else if(mEditIndex == 1) + { + const int days_in_month = Utils::Time::daysInMonth(new_tm.tm_year + 1900, new_tm.tm_mon + 1); + new_tm.tm_mday += incDir; + + if(new_tm.tm_mday > days_in_month) + new_tm.tm_mday = 1; + else if(new_tm.tm_mday < 1) + new_tm.tm_mday = days_in_month; + + } + else if(mEditIndex == 2) + { + new_tm.tm_year += incDir; + + if(new_tm.tm_year < 0) + new_tm.tm_year = 0; + } + + //validate day + const int days_in_month = Utils::Time::daysInMonth(new_tm.tm_year + 1900, new_tm.tm_mon + 1); + if(new_tm.tm_mday > days_in_month) + new_tm.tm_mday = days_in_month; + + mTime = new_tm; + + updateTextCache(); + return true; + } + + if(config->isMappedTo("right", input)) + { + mEditIndex++; + if(mEditIndex >= (int)mCursorBoxes.size()) + mEditIndex--; + return true; + } + + if(config->isMappedTo("left", input)) + { + mEditIndex--; + if(mEditIndex < 0) + mEditIndex++; + return true; + } + } + + return GuiComponent::input(config, input); +} + +void DateTimeEditComponent::update(int deltaTime) +{ + if(mDisplayMode == DISP_RELATIVE_TO_NOW) + { + mRelativeUpdateAccumulator += deltaTime; + if(mRelativeUpdateAccumulator > 1000) + { + mRelativeUpdateAccumulator = 0; + updateTextCache(); + } + } + + GuiComponent::update(deltaTime); +} + +void DateTimeEditComponent::render(const Transform4x4f& parentTrans) +{ + Transform4x4f trans = parentTrans * getTransform(); + + if(mTextCache) + { + // vertically center + Vector3f off(0, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); + trans.translate(off); + trans.round(); + + Renderer::setMatrix(trans); + + std::shared_ptr font = getFont(); + + mTextCache->setColor((mColor & 0xFFFFFF00) | getOpacity()); + font->renderTextCache(mTextCache.get()); + + if(mEditing) + { + if(mEditIndex >= 0 && (unsigned int)mEditIndex < mCursorBoxes.size()) + { + Renderer::drawRect((int)mCursorBoxes[mEditIndex][0], (int)mCursorBoxes[mEditIndex][1], + (int)mCursorBoxes[mEditIndex][2], (int)mCursorBoxes[mEditIndex][3], 0x00000022); + } + } + } +} + +void DateTimeEditComponent::setValue(const std::string& val) +{ + mTime = val; + updateTextCache(); +} + +std::string DateTimeEditComponent::getValue() const +{ + return mTime; +} + +DateTimeEditComponent::DisplayMode DateTimeEditComponent::getCurrentDisplayMode() const +{ + /*if(mEditing) + { + if(mDisplayMode == DISP_RELATIVE_TO_NOW) + { + //TODO: if time component == 00:00:00, return DISP_DATE, else return DISP_DATE_TIME + return DISP_DATE; + } + }*/ + + return mDisplayMode; +} + +std::string DateTimeEditComponent::getDisplayString(DisplayMode mode) const +{ + std::string fmt; + switch(mode) + { + case DISP_DATE: + fmt = "%m/%d/%Y"; + break; + case DISP_DATE_TIME: + fmt = "%m/%d/%Y %H:%M:%S"; + break; + case DISP_RELATIVE_TO_NOW: + { + //relative time + if(mTime.getTime() == 0) + return "never"; + + Utils::Time::DateTime now(Utils::Time::now()); + Utils::Time::Duration dur(now.getTime() - mTime.getTime()); + + char buf[64]; + + if(dur.getDays() > 0) + sprintf(buf, "%d day%s ago", dur.getDays(), (dur.getDays() > 1) ? "s" : ""); + else if(dur.getHours() > 0) + sprintf(buf, "%d hour%s ago", dur.getHours(), (dur.getHours() > 1) ? "s" : ""); + else if(dur.getMinutes() > 0) + sprintf(buf, "%d minute%s ago", dur.getMinutes(), (dur.getMinutes() > 1) ? "s" : ""); + else + sprintf(buf, "%d second%s ago", dur.getSeconds(), (dur.getSeconds() > 1) ? "s" : ""); + + return std::string(buf); + } + break; + } + + if(mTime.getTime() == 0) + return "unknown"; + + return Utils::Time::timeToString(mTime, fmt); +} + +std::shared_ptr DateTimeEditComponent::getFont() const +{ + if(mFont) + return mFont; + + return Font::get(FONT_SIZE_MEDIUM); +} + +void DateTimeEditComponent::updateTextCache() +{ + DisplayMode mode = getCurrentDisplayMode(); + const std::string dispString = mUppercase ? Utils::String::toUpper(getDisplayString(mode)) : getDisplayString(mode); + std::shared_ptr font = getFont(); + mTextCache = std::unique_ptr(font->buildTextCache(dispString, 0, 0, mColor)); + + if(mAutoSize) + { + mSize = mTextCache->metrics.size; + + mAutoSize = false; + if(getParent()) + getParent()->onSizeChanged(); + } + + //set up cursor positions + mCursorBoxes.clear(); + + if(dispString.empty() || mode == DISP_RELATIVE_TO_NOW) + return; + + //month + Vector2f start(0, 0); + Vector2f end = font->sizeText(dispString.substr(0, 2)); + Vector2f diff = end - start; + mCursorBoxes.push_back(Vector4f(start[0], start[1], diff[0], diff[1])); + + //day + start[0] = font->sizeText(dispString.substr(0, 3)).x(); + end = font->sizeText(dispString.substr(0, 5)); + diff = end - start; + mCursorBoxes.push_back(Vector4f(start[0], start[1], diff[0], diff[1])); + + //year + start[0] = font->sizeText(dispString.substr(0, 6)).x(); + end = font->sizeText(dispString.substr(0, 10)); + diff = end - start; + mCursorBoxes.push_back(Vector4f(start[0], start[1], diff[0], diff[1])); + + //if mode == DISP_DATE_TIME do times too but I don't wanna do the logic for editing times because no one will ever use it so screw it +} + +void DateTimeEditComponent::setColor(unsigned int color) +{ + mColor = color; + if(mTextCache) + mTextCache->setColor(color); +} + +void DateTimeEditComponent::setFont(std::shared_ptr font) +{ + mFont = font; + updateTextCache(); +} + +void DateTimeEditComponent::onSizeChanged() +{ + mAutoSize = false; + updateTextCache(); +} + +void DateTimeEditComponent::setUppercase(bool uppercase) +{ + mUppercase = uppercase; + updateTextCache(); +} + +void DateTimeEditComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +{ + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "datetime"); + if(!elem) + return; + + // We set mAutoSize BEFORE calling GuiComponent::applyTheme because it calls + // setSize(), which will call updateTextCache(), which will reset mSize if + // mAutoSize == true, ignoring the theme's value. + if(properties & ThemeFlags::SIZE) + mAutoSize = !elem->has("size"); + + GuiComponent::applyTheme(theme, view, element, properties); + + using namespace ThemeFlags; + + if(properties & COLOR && elem->has("color")) + setColor(elem->get("color")); + + if(properties & FORCE_UPPERCASE && elem->has("forceUppercase")) + setUppercase(elem->get("forceUppercase")); + + setFont(Font::getFromTheme(elem, properties, mFont)); +} diff --git a/es-core/src/components/DateTimeEditComponent.h b/es-core/src/components/DateTimeEditComponent.h new file mode 100644 index 0000000000..535ba2f86a --- /dev/null +++ b/es-core/src/components/DateTimeEditComponent.h @@ -0,0 +1,71 @@ +#pragma once +#ifndef ES_CORE_COMPONENTS_DATE_TIME_EDIT_COMPONENT_H +#define ES_CORE_COMPONENTS_DATE_TIME_EDIT_COMPONENT_H + +#include "utils/TimeUtil.h" +#include "GuiComponent.h" + +class TextCache; + +// Used to enter or display a specific point in time. +class DateTimeEditComponent : public GuiComponent +{ +public: + enum DisplayMode + { + DISP_DATE, + DISP_DATE_TIME, + DISP_RELATIVE_TO_NOW + }; + + DateTimeEditComponent(Window* window, DisplayMode dispMode = DISP_DATE); + + void setValue(const std::string& val) override; + std::string getValue() const override; + + bool input(InputConfig* config, Input input) override; + void update(int deltaTime) override; + void render(const Transform4x4f& parentTrans) override; + void onSizeChanged() override; + + // Set how the point in time will be displayed: + // * DISP_DATE - only display the date. + // * DISP_DATE_TIME - display both the date and the time on that date. + // * DISP_RELATIVE_TO_NOW - intelligently display the point in time relative to right now (e.g. "5 secs ago", "3 minutes ago", "1 day ago". Automatically updates as time marches on. + // The initial value is DISP_DATE. + void setDisplayMode(DisplayMode mode); + + void setColor(unsigned int color); // Text color. + void setFont(std::shared_ptr font); // Font to display with. Default is Font::get(FONT_SIZE_MEDIUM). + void setUppercase(bool uppercase); // Force text to be uppercase when in DISP_RELATIVE_TO_NOW mode. + + virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; + +private: + std::shared_ptr getFont() const; + + std::string getDisplayString(DisplayMode mode) const; + DisplayMode getCurrentDisplayMode() const; + + void updateTextCache(); + + Utils::Time::DateTime mTime; + Utils::Time::DateTime mTimeBeforeEdit; + + bool mEditing; + int mEditIndex; + DisplayMode mDisplayMode; + + int mRelativeUpdateAccumulator; + + std::unique_ptr mTextCache; + std::vector mCursorBoxes; + + unsigned int mColor; + std::shared_ptr mFont; + bool mUppercase; + + bool mAutoSize; +}; + +#endif // ES_CORE_COMPONENTS_DATE_TIME_COMPONENT_H diff --git a/es-core/src/components/TextComponent.h b/es-core/src/components/TextComponent.h index 2603327f97..1721105772 100644 --- a/es-core/src/components/TextComponent.h +++ b/es-core/src/components/TextComponent.h @@ -37,15 +37,20 @@ class TextComponent : public GuiComponent unsigned char getOpacity() const override; void setOpacity(unsigned char opacity) override; - + inline std::shared_ptr getFont() const { return mFont; } virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; +protected: + virtual void onTextChanged(); + + std::string mText; + std::shared_ptr mFont; + private: void calculateExtent(); - void onTextChanged(); void onColorChanged(); unsigned int mColor; @@ -54,10 +59,8 @@ class TextComponent : public GuiComponent unsigned char mBgColorOpacity; bool mRenderBackground; - std::shared_ptr mFont; bool mUppercase; Vector2i mAutoCalcExtent; - std::string mText; std::shared_ptr mTextCache; Alignment mHorizontalAlignment; Alignment mVerticalAlignment; From 4fd0c66b90559ee9712ba98620db252b96451c2d Mon Sep 17 00:00:00 2001 From: John Rassa Date: Wed, 24 Oct 2018 16:19:27 -0700 Subject: [PATCH 326/603] allow variables in import elements --- es-core/src/ThemeData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index fe78e4cee1..0f3b8d9915 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -239,7 +239,7 @@ void ThemeData::parseIncludes(const pugi::xml_node& root) for(pugi::xml_node node = root.child("include"); node; node = node.next_sibling("include")) { - const char* relPath = node.text().get(); + std::string relPath = resolvePlaceholders(node.text().as_string()); std::string path = Utils::FileSystem::resolveRelativePath(relPath, mPaths.back(), true); if(!ResourceManager::getInstance()->fileExists(path)) throw error << "Included file \"" << relPath << "\" not found! (resolved to \"" << path << "\")"; From 065fd8edf189e22e8a92912fd0151d8f779a5f66 Mon Sep 17 00:00:00 2001 From: Rael Gugelmin Cunha Date: Wed, 9 May 2018 22:29:46 -0300 Subject: [PATCH 327/603] Skip mame bios/devices --- es-app/src/FileData.cpp | 10 + es-app/src/FileData.h | 1 + es-app/src/Gamelist.cpp | 24 ++- es-app/src/SystemData.cpp | 9 +- es-core/src/MameNames.cpp | 75 +++++++ es-core/src/MameNames.h | 8 +- resources/mamebioses.xml | 71 +++++++ resources/mamedevices.xml | 404 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 590 insertions(+), 12 deletions(-) create mode 100644 resources/mamebioses.xml create mode 100644 resources/mamedevices.xml diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 828f43f0c1..c9c5330b8d 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -196,6 +196,16 @@ std::string FileData::getKey() { return getFileName(); } +const bool FileData::isArcadeAsset() +{ + const std::string stem = Utils::FileSystem::getStem(mPath); + return ( + (mSystem && (mSystem->hasPlatformId(PlatformIds::ARCADE) || mSystem->hasPlatformId(PlatformIds::NEOGEO))) + && + (MameNames::getInstance()->isBios(stem) || MameNames::getInstance()->isDevice(stem)) + ); +} + FileData* FileData::getSourceFileData() { return this; diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 343cb056fd..63a9ce16e3 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -61,6 +61,7 @@ class FileData virtual inline void refreshMetadata() { return; }; virtual std::string getKey(); + const bool isArcadeAsset(); inline std::string getFullPath() { return getPath(); }; inline std::string getFileName() { return Utils::FileSystem::getFileName(getPath()); }; virtual FileData* getSourceFileData(); diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 784c28125d..01259431e3 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -48,7 +48,12 @@ FileData* findOrCreateFile(SystemData* system, const std::string& path, FileType } FileData* file = new FileData(type, path, system->getSystemEnvData(), system); - treeNode->addChild(file); + + // skipping arcade assets from gamelist + if(!file->isArcadeAsset()) + { + treeNode->addChild(file); + } return file; } @@ -124,16 +129,17 @@ void parseGamelist(SystemData* system) LOG(LogError) << "Error finding/creating FileData for \"" << path << "\", skipping."; continue; } + else if(!file->isArcadeAsset()) + { + std::string defaultName = file->metadata.get("name"); + file->metadata = MetaDataList::createFromXML(GAME_METADATA, fileNode, relativeTo); - //load the metadata - std::string defaultName = file->metadata.get("name"); - file->metadata = MetaDataList::createFromXML(GAME_METADATA, fileNode, relativeTo); - - //make sure name gets set if one didn't exist - if(file->metadata.get("name").empty()) - file->metadata.set("name", defaultName); + //make sure name gets set if one didn't exist + if(file->metadata.get("name").empty()) + file->metadata.set("name", defaultName); - file->metadata.resetChangedFlag(); + file->metadata.resetChangedFlag(); + } } } } diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 30790798ee..cd56b21457 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -112,8 +112,13 @@ void SystemData::populateFolder(FileData* folder) continue; FileData* newGame = new FileData(GAME, filePath, mEnvData, this); - folder->addChild(newGame); - isGame = true; + + // preventing new arcade assets to be added + if(!newGame->isArcadeAsset()) + { + folder->addChild(newGame); + isGame = true; + } } //add directories that also do not match an extension as folders diff --git a/es-core/src/MameNames.cpp b/es-core/src/MameNames.cpp index 78743b5dd0..7821af3667 100644 --- a/es-core/src/MameNames.cpp +++ b/es-core/src/MameNames.cpp @@ -57,6 +57,50 @@ MameNames::MameNames() NamePair namePair = { gameNode.child("mamename").text().get(), gameNode.child("realname").text().get() }; mNamePairs.push_back(namePair); } + + // Read bios + xmlpath = ResourceManager::getInstance()->getResourcePath(":/mamebioses.xml"); + + if(!Utils::FileSystem::exists(xmlpath)) + return; + + LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\"..."; + + result = doc.load_file(xmlpath.c_str()); + + if(!result) + { + LOG(LogError) << "Error parsing XML file \"" << xmlpath << "\"!\n " << result.description(); + return; + } + + for(pugi::xml_node biosNode = doc.child("bios"); biosNode; biosNode = biosNode.next_sibling("bios")) + { + std::string bios = biosNode.text().get(); + mMameBioses.push_back(bios); + } + + // Read devices + xmlpath = ResourceManager::getInstance()->getResourcePath(":/mamedevices.xml"); + + if(!Utils::FileSystem::exists(xmlpath)) + return; + + LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\"..."; + + result = doc.load_file(xmlpath.c_str()); + + if(!result) + { + LOG(LogError) << "Error parsing XML file \"" << xmlpath << "\"!\n " << result.description(); + return; + } + + for(pugi::xml_node deviceNode = doc.child("device"); deviceNode; deviceNode = deviceNode.next_sibling("device")) + { + std::string device = deviceNode.text().get(); + mMameDevices.push_back(device); + } } // MameNames @@ -83,3 +127,34 @@ std::string MameNames::getRealName(const std::string& _mameName) return _mameName; } // getRealName + +const bool MameNames::isBios(const std::string& _biosName) +{ + return MameNames::find(mMameBioses, _biosName); + +} // isBios + +const bool MameNames::isDevice(const std::string& _deviceName) +{ + return MameNames::find(mMameDevices, _deviceName); + +} // isDevice + +const bool MameNames::find(std::vector devices, const std::string& name) +{ + size_t start = 0; + size_t end = devices.size(); + + while(start < end) + { + const size_t index = (start + end) / 2; + const int compare = strcmp(devices[index].c_str(), name.c_str()); + + if(compare < 0) start = index + 1; + else if( compare > 0) end = index; + else return true; + } + + return false; + +} diff --git a/es-core/src/MameNames.h b/es-core/src/MameNames.h index 52fd714559..6f0ae21814 100644 --- a/es-core/src/MameNames.h +++ b/es-core/src/MameNames.h @@ -13,6 +13,8 @@ class MameNames static void deinit (); static MameNames* getInstance(); std::string getRealName(const std::string& _mameName); + const bool isBios(const std::string& _biosName); + const bool isDevice(const std::string& _deviceName); private: @@ -29,7 +31,11 @@ class MameNames static MameNames* sInstance; - namePairVector mNamePairs; + namePairVector mNamePairs; + std::vector mMameBioses; + std::vector mMameDevices; + + const bool find(const std::vector devices, const std::string& name); }; // MameNames diff --git a/resources/mamebioses.xml b/resources/mamebioses.xml new file mode 100644 index 0000000000..0e1f6c6381 --- /dev/null +++ b/resources/mamebioses.xml @@ -0,0 +1,71 @@ +3dobios +airlbios +aleck64 +alg_bios +allied +ar_bios +aristmk5 +aristmk6 +atarisy1 +awbios +bubsys +cdibios +cedmag +chihiro +coh1000a +coh1000c +coh1000t +coh1000w +coh1001l +coh1002e +coh1002m +coh1002v +coh3002c +coh3002t +crysbios +cubo +decocass +f355bios +f355dlx +galgbios +gp_110 +gq863 +gts1 +gts1s +hikaru +hng64 +hod2bios +isgsm +iteagle +konamigv +konamigx +kviper +lindbios +list.txt +macsbios +maxaflex +megaplay +megatech +naomi2 +naomi +naomigd +neogeo +nss +pgm +playch10 +pyson +sammymdl +segasp +sfcbox +shtzone +skns +stvbios +su2000 +sys246 +sys256 +sys573 +taitotz +tourvis +triforce +v4bios + diff --git a/resources/mamedevices.xml b/resources/mamedevices.xml new file mode 100644 index 0000000000..c959462cc9 --- /dev/null +++ b/resources/mamedevices.xml @@ -0,0 +1,404 @@ +22vp931 +3c505 +a1cass +a2091 +a2ap16 +a2ap16a +a2aplcrd +a2cffa02 +a2cffa2 +a2corvus +a2diskii +a2diskiing +a2hsscsi +a2iwm_flop +a2memexp +a2mouse +a2pic +a2ramfac +a2scsi +a2ssc +a2swyft +a2thunpl +a2tmstho +a2ultrme +a2ulttrm +a2vidtrm +a2vtc1 +a2vtc2 +a2vulcan +a2vulgld +a2zipdrv +a3fdc +a590 +abc1600mac +abc1600mover +abc55 +abc77 +abc800kb +abc830 +abc832 +abc834 +abc838 +abc99 +abc_fd2 +abc_hdc +abc_mem +abcsio +adam_ddp +adam_fdc +adam_kb +adam_prn +adam_spi +aga +aga_pc200 +aha1542 +alto2_cpu +amiga_ar1 +amiga_ar2 +amiga_ar3 +amigakbd +ap2000 +at_keybc +bbc_acorn1770 +bbc_acorn8271 +bbc_cumana1 +bbc_cumana2 +bbc_opus1770 +bbc_opus2791 +bbc_opus2793 +bbc_opus3 +bbc_weddb2 +bbc_weddb3 +betadisk +bml3kanji +bml3mp1802 +bml3mp1805 +bsmt2000 +buddha +bw2_ramcard +c1526 +c1540 +c1541 +c1541c +c1541dd +c1541ii +c1541pd +c1541pdc +c1551 +c1563 +c1570 +c1571 +c1581 +c2031 +c2040 +c2040fdc +c3040 +c4023 +c4040 +c64_cs +c64_fcc +c64_mscr +c64_nl10 +c64_supercpu +c64_xl80 +c8050 +c8050fdc +c8250 +c8250lp +c8280 +cbm2_hrga +cbm2_hrgb +cbm8000_hsg_a +cbm8000_hsg_b +cffa1 +cga +cga_iskr1030m +cga_iskr1031 +cga_m24 +cga_mc1502 +cga_poisk2 +cgenie_fdc +clgd542x +cmdhd +coco3_hdb1 +coco_fdc +coco_fdc_v11 +compiskb +comx_clm +comx_eb +comx_epr +comx_fd +comx_pl80 +comx_prn +comx_thm +cp400_fdc +cpc_brunword4 +cpc_ddi1 +cpc_dkspeech +cpc_hd20 +cpc_mf2 +cpc_ser +cpc_serams +cpc_smartwatch +cpc_ssa1 +cpc_transtape +crvfdc01 +crvfdc02 +csd1 +cuda +d2fdc +d9060 +d9090 +dectalk_isa +dj2db +djdma +dm_clgd5430 +dms3d2kp +dmv_k220 +dmv_k230 +dmv_k231 +dmv_k235 +dmv_k806 +dmv_keyb +dragon_fdc +dsp1bleg +dsp1leg +dsp1leg_hi +dsp2leg +dsp3leg +dsp4leg +e01 +e01s +ec1840_0002 +ec1841_0002 +ef9365 +ega +egret +electron_m2105 +electron_plus3 +ep64_exdos +epson_pf10 +epson_tf20 +et4000 +ex800 +fc_disksys +fd2000 +fd4000 +fdc344 +fdcmag +filetto_cga +finalchs +fsd1 +fsd2 +gfxultra +gfxultrp +gic +grip +hardbox +hd44780_a00 +hd61830 +hdc +hdc_ec1841 +hp98034 +hp98035 +ibm_mfc +ibm_vga +ie15_keyboard +imi5000h +indusgt +interpod +intv_ecs +intv_voice +iq151_disc2 +iq151_minigraf +iq151_ms151a +iq151_video32 +iq151_video64 +isa_hercules +isa_ibm_mda +isa_ibm_pgc +isbc_215g +jasmin +jvs13551 +k573dio +k573mcr +k573msu +k573npu +k7659kb +kb_3270pc +kb_ec1841 +kb_iskr1030 +kb_pcat84 +kb_pcxt83 +kc_d004 +kc_d004gide +keytronic_pc3270 +km035 +ks0066_f05 +laserfdc +ldv1000 +list.txt +lk201 +lux10828 +lux21046 +lux21056 +lx800 +lx810l +m1comm +m20_8086 +m24_kbd +m24_z8000 +m50458 +mach64 +mackbd +mc1502_rom +microdisc +midssio +mie +minichif +mm1kb +mpu401 +ms7004 +ms_natural +mshark +msm6222b +msx_cart_bm_012 +msx_cart_sfg01 +msx_cart_sfg05 +msx_moonsound +namco50 +namco51 +namco52 +namco53 +namco54 +namco62 +namcoc69 +namcoc70 +namcoc74 +namcoc75 +namcoc76 +nb_48gc +nb_824gc +nb_aenet +nb_amc3b +nb_cb264 +nb_image +nb_m2hr +nb_m2vc +nb_rtpd +nb_sp8s3 +nb_spdq +nb_vikbw +nb_wspt +newbrain_eim +newbrain_fdc +nmk004 +nsmdsa +nsmdsad +o2_voice +p1_fdc +p1_hdc +p1_rom +p72 +pc1512kb +pc1640_iga +pcd_kbd +pcd_video +pcx_video +pd3_30hr +pd3_c264 +pd3_lviw +pd3_mclr +pd3_pc16 +pdc +pds_sefp +pet_softbox +pet_superpet +pr8210 +psx_cd +ql_cumanafdi +ql_gold +ql_kdi +ql_mhd +ql_mpfdi +ql_opdbm +ql_pcmlqdi +ql_qdisc +ql_qplus4 +ql_qubide +ql_sdisk +ql_sqboard256 +ql_sqboard512 +ql_sqmouse512 +ql_sqmouse +ql_trump256 +ql_trump512 +ql_trump768 +ql_trump +qsound +s1410 +s3_764 +s3virge +s3virgedx +saa5050 +saa5052 +sb16 +sdtandy_fdc +sed1200 +segadimm +serbox +seta10leg +seta11leg +sfd1001 +side116 +simutrek +slutprov +sns_rom_sgb2 +sns_rom_sgb +spc1000_fdd_exp +stereo_fx +stic +sv603 +sx1541 +t5182 +tetriskr_cga +tgui9680 +ti99_bwg +ti99_evpc +ti99_fdc +ti99_gkracker +ti99_hfdc +ti99_myarcmem +ti99_pcode +ti99_rs232 +ti99_speech +tiki100_8088 +tms32031 +tms32032 +tvc_hbf +uni800 +unidisk +upd7220 +vic1515 +vic1520 +vic20_fe3 +victor9k_fdc +victor9kb +votrax +vp700 +vz_rs232 +vz_rtty +wangpc_lic +wangpc_rtc +wangpc_wdc +wangpckb +wd1002a_wx1 +wdxt_gen +wordpro +wyse700 +x68k_cz6bs1 +x820kb +xtide +ym2608 + From 0a62a6db2770d51eaee2a3cfc17046a4d7c26476 Mon Sep 17 00:00:00 2001 From: Rael Gugelmin Cunha Date: Mon, 5 Nov 2018 13:42:36 -0200 Subject: [PATCH 328/603] Removing no more used mameNameToRealName --- es-app/src/PlatformId.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 9abbf8b4cd..fa9af434ac 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -2,8 +2,6 @@ #include -extern const char* mameNameToRealName[]; - namespace PlatformIds { const char* PlatformNames[PLATFORM_COUNT + 1] = { From 464b0992ad939a87a3f1bb397d17f9b470b0153c Mon Sep 17 00:00:00 2001 From: Rael Gugelmin Cunha Date: Thu, 15 Nov 2018 14:38:20 -0200 Subject: [PATCH 329/603] Work with dpad and analogs --- es-app/src/components/TextListComponent.h | 6 +++--- es-app/src/guis/GuiFastSelect.cpp | 8 ++++---- es-app/src/views/SystemView.cpp | 16 ++++++++-------- es-app/src/views/UIModeController.cpp | 2 +- es-app/src/views/gamelist/GridGameListView.cpp | 2 +- .../src/views/gamelist/ISimpleGameListView.cpp | 4 ++-- es-core/src/InputConfig.cpp | 15 +++++++++++++++ es-core/src/InputConfig.h | 1 + es-core/src/Window.cpp | 4 ++-- es-core/src/components/ComponentGrid.cpp | 8 ++++---- es-core/src/components/ComponentList.cpp | 4 ++-- es-core/src/components/DateTimeEditComponent.cpp | 8 ++++---- es-core/src/components/ImageGridComponent.h | 10 +++++----- es-core/src/components/OptionListComponent.h | 4 ++-- es-core/src/components/SliderComponent.cpp | 4 ++-- es-core/src/components/TextEditComponent.cpp | 8 ++++---- 16 files changed, 60 insertions(+), 44 deletions(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 42ab9501b0..2873b18473 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -251,13 +251,13 @@ bool TextListComponent::input(InputConfig* config, Input input) { if(input.value != 0) { - if(config->isMappedTo("down", input)) + if(config->isMappedLike("down", input)) { listInput(1); return true; } - if(config->isMappedTo("up", input)) + if(config->isMappedLike("up", input)) { listInput(-1); return true; @@ -274,7 +274,7 @@ bool TextListComponent::input(InputConfig* config, Input input) return true; } }else{ - if(config->isMappedTo("down", input) || config->isMappedTo("up", input) || + if(config->isMappedLike("down", input) || config->isMappedLike("up", input) || config->isMappedTo("pagedown", input) || config->isMappedTo("pageup", input)) { stopScrolling(); diff --git a/es-app/src/guis/GuiFastSelect.cpp b/es-app/src/guis/GuiFastSelect.cpp index 1227621513..3bf0af8cdb 100644 --- a/es-app/src/guis/GuiFastSelect.cpp +++ b/es-app/src/guis/GuiFastSelect.cpp @@ -55,7 +55,7 @@ bool GuiFastSelect::input(InputConfig* config, Input input) return true; } - if(config->isMappedTo("up", input)) + if(config->isMappedLike("up", input)) { if(input.value != 0) setScrollDir(-1); @@ -63,7 +63,7 @@ bool GuiFastSelect::input(InputConfig* config, Input input) setScrollDir(0); return true; - }else if(config->isMappedTo("down", input)) + }else if(config->isMappedLike("down", input)) { if(input.value != 0) setScrollDir(1); @@ -71,12 +71,12 @@ bool GuiFastSelect::input(InputConfig* config, Input input) setScrollDir(0); return true; - }else if(config->isMappedTo("left", input) && input.value != 0) + }else if(config->isMappedLike("left", input) && input.value != 0) { mSortId = (mSortId + 1) % FileSorts::SortTypes.size(); updateSortText(); return true; - }else if(config->isMappedTo("right", input) && input.value != 0) + }else if(config->isMappedLike("right", input) && input.value != 0) { mSortId--; if(mSortId < 0) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 871ba8724f..cdd5b1ea10 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -150,12 +150,12 @@ bool SystemView::input(InputConfig* config, Input input) { case VERTICAL: case VERTICAL_WHEEL: - if (config->isMappedTo("up", input)) + if (config->isMappedLike("up", input)) { listInput(-1); return true; } - if (config->isMappedTo("down", input)) + if (config->isMappedLike("down", input)) { listInput(1); return true; @@ -164,12 +164,12 @@ bool SystemView::input(InputConfig* config, Input input) case HORIZONTAL: case HORIZONTAL_WHEEL: default: - if (config->isMappedTo("left", input)) + if (config->isMappedLike("left", input)) { listInput(-1); return true; } - if (config->isMappedTo("right", input)) + if (config->isMappedLike("right", input)) { listInput(1); return true; @@ -191,10 +191,10 @@ bool SystemView::input(InputConfig* config, Input input) return true; } }else{ - if(config->isMappedTo("left", input) || - config->isMappedTo("right", input) || - config->isMappedTo("up", input) || - config->isMappedTo("down", input)) + if(config->isMappedLike("left", input) || + config->isMappedLike("right", input) || + config->isMappedLike("up", input) || + config->isMappedLike("down", input)) listInput(0); if(!UIModeController::getInstance()->isUIModeKid() && config->isMappedTo("select", input) && Settings::getInstance()->getBool("ScreenSaverControls")) { diff --git a/es-app/src/views/UIModeController.cpp b/es-app/src/views/UIModeController.cpp index 8123958457..1012f52eb5 100644 --- a/es-app/src/views/UIModeController.cpp +++ b/es-app/src/views/UIModeController.cpp @@ -64,7 +64,7 @@ bool UIModeController::inputIsMatch(InputConfig * config, Input input) { for (auto valstring : mInputVals) { - if (config->isMappedTo(valstring, input) && + if (config->isMappedLike(valstring, input) && (mPassKeySequence[mPassKeyCounter] == valstring[0])) { mPassKeyCounter++; diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 084c3fc491..efaaab6d82 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -104,7 +104,7 @@ std::string GridGameListView::getQuickSystemSelectLeftButton() bool GridGameListView::input(InputConfig* config, Input input) { - if(config->isMappedTo("left", input) || config->isMappedTo("right", input)) + if(config->isMappedLike("left", input) || config->isMappedLike("right", input)) return GuiComponent::input(config, input); return ISimpleGameListView::input(config, input); diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 2caf26b1e0..5a1a68ed35 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -118,7 +118,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) } return true; - }else if(config->isMappedTo(getQuickSystemSelectRightButton(), input)) + }else if(config->isMappedLike(getQuickSystemSelectRightButton(), input)) { if(Settings::getInstance()->getBool("QuickSystemSelect")) { @@ -126,7 +126,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) ViewController::get()->goToNextGameList(); return true; } - }else if(config->isMappedTo(getQuickSystemSelectLeftButton(), input)) + }else if(config->isMappedLike(getQuickSystemSelectLeftButton(), input)) { if(Settings::getInstance()->getBool("QuickSystemSelect")) { diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index c5c299fff6..dd56dd30e2 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -111,6 +111,21 @@ bool InputConfig::isMappedTo(const std::string& name, Input input) return false; } +bool InputConfig::isMappedLike(const std::string& name, Input input) +{ + if(name == "left") + { + return isMappedTo("left", input) || isMappedTo("leftanalogleft", input) || isMappedTo("rightanalogleft", input); + }else if(name == "right"){ + return isMappedTo("right", input) || isMappedTo("leftanalogright", input) || isMappedTo("rightanalogright", input); + }else if(name == "up"){ + return isMappedTo("up", input) || isMappedTo("leftanalogup", input) || isMappedTo("rightanalogup", input); + }else if(name == "down"){ + return isMappedTo("down", input) || isMappedTo("leftanalogdown", input) || isMappedTo("rightanalogdown", input); + } + return isMappedTo(name, input); +} + std::vector InputConfig::getMappedTo(Input input) { std::vector maps; diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index f3f1cbf055..4969d8ff02 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -108,6 +108,7 @@ class InputConfig //Returns true if Input is mapped to this name, false otherwise. bool isMappedTo(const std::string& name, Input input); + bool isMappedLike(const std::string& name, Input input); //Returns a list of names this input is mapped to. std::vector getMappedTo(Input input); diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 76e935db18..3c0aa1d06c 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -120,9 +120,9 @@ void Window::input(InputConfig* config, Input input) if(mScreenSaver->isScreenSaverActive() && Settings::getInstance()->getBool("ScreenSaverControls") && (Settings::getInstance()->getString("ScreenSaverBehavior") == "random video")) { - if(mScreenSaver->getCurrentGame() != NULL && (config->isMappedTo("right", input) || config->isMappedTo("start", input) || config->isMappedTo("select", input))) + if(mScreenSaver->getCurrentGame() != NULL && (config->isMappedLike("right", input) || config->isMappedTo("start", input) || config->isMappedTo("select", input))) { - if(config->isMappedTo("right", input) || config->isMappedTo("select", input)) + if(config->isMappedLike("right", input) || config->isMappedTo("select", input)) { if (input.value != 0) { // handle screensaver control diff --git a/es-core/src/components/ComponentGrid.cpp b/es-core/src/components/ComponentGrid.cpp index f4e7619f43..066f9a3f0c 100644 --- a/es-core/src/components/ComponentGrid.cpp +++ b/es-core/src/components/ComponentGrid.cpp @@ -233,19 +233,19 @@ bool ComponentGrid::input(InputConfig* config, Input input) if(!input.value) return false; - if(config->isMappedTo("down", input)) + if(config->isMappedLike("down", input)) { return moveCursor(Vector2i(0, 1)); } - if(config->isMappedTo("up", input)) + if(config->isMappedLike("up", input)) { return moveCursor(Vector2i(0, -1)); } - if(config->isMappedTo("left", input)) + if(config->isMappedLike("left", input)) { return moveCursor(Vector2i(-1, 0)); } - if(config->isMappedTo("right", input)) + if(config->isMappedLike("right", input)) { return moveCursor(Vector2i(1, 0)); } diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 28cdf0cf7a..c2c42d8f39 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -75,10 +75,10 @@ bool ComponentList::input(InputConfig* config, Input input) } // input handler didn't consume the input - try to scroll - if(config->isMappedTo("up", input)) + if(config->isMappedLike("up", input)) { return listInput(input.value != 0 ? -1 : 0); - }else if(config->isMappedTo("down", input)) + }else if(config->isMappedLike("down", input)) { return listInput(input.value != 0 ? 1 : 0); diff --git a/es-core/src/components/DateTimeEditComponent.cpp b/es-core/src/components/DateTimeEditComponent.cpp index 1617934c01..d4b6636a39 100644 --- a/es-core/src/components/DateTimeEditComponent.cpp +++ b/es-core/src/components/DateTimeEditComponent.cpp @@ -54,9 +54,9 @@ bool DateTimeEditComponent::input(InputConfig* config, Input input) } int incDir = 0; - if(config->isMappedTo("up", input) || config->isMappedTo("pageup", input)) + if(config->isMappedLike("up", input) || config->isMappedTo("pageup", input)) incDir = 1; - else if(config->isMappedTo("down", input) || config->isMappedTo("pagedown", input)) + else if(config->isMappedLike("down", input) || config->isMappedTo("pagedown", input)) incDir = -1; if(incDir != 0) @@ -103,7 +103,7 @@ bool DateTimeEditComponent::input(InputConfig* config, Input input) return true; } - if(config->isMappedTo("right", input)) + if(config->isMappedLike("right", input)) { mEditIndex++; if(mEditIndex >= (int)mCursorBoxes.size()) @@ -111,7 +111,7 @@ bool DateTimeEditComponent::input(InputConfig* config, Input input) return true; } - if(config->isMappedTo("left", input)) + if(config->isMappedLike("left", input)) { mEditIndex--; if(mEditIndex < 0) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 0b30caec55..21a2558a72 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -117,13 +117,13 @@ bool ImageGridComponent::input(InputConfig* config, Input input) if(input.value != 0) { Vector2i dir = Vector2i::Zero(); - if(config->isMappedTo("up", input)) + if(config->isMappedLike("up", input)) dir[1 ^ mScrollDirection] = -1; - else if(config->isMappedTo("down", input)) + else if(config->isMappedLike("down", input)) dir[1 ^ mScrollDirection] = 1; - else if(config->isMappedTo("left", input)) + else if(config->isMappedLike("left", input)) dir[0 ^ mScrollDirection] = -1; - else if(config->isMappedTo("right", input)) + else if(config->isMappedLike("right", input)) dir[0 ^ mScrollDirection] = 1; if(dir != Vector2i::Zero()) @@ -132,7 +132,7 @@ bool ImageGridComponent::input(InputConfig* config, Input input) return true; } }else{ - if(config->isMappedTo("up", input) || config->isMappedTo("down", input) || config->isMappedTo("left", input) || config->isMappedTo("right", input)) + if(config->isMappedLike("up", input) || config->isMappedLike("down", input) || config->isMappedLike("left", input) || config->isMappedLike("right", input)) { stopScrolling(); } diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index dd630f5bf5..bf922acdcb 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -190,7 +190,7 @@ class OptionListComponent : public GuiComponent } if(!mMultiSelect) { - if(config->isMappedTo("left", input)) + if(config->isMappedLike("left", input)) { // move selection to previous unsigned int i = getSelectedId(); @@ -203,7 +203,7 @@ class OptionListComponent : public GuiComponent onSelectedChanged(); return true; - }else if(config->isMappedTo("right", input)) + }else if(config->isMappedLike("right", input)) { // move selection to next unsigned int i = getSelectedId(); diff --git a/es-core/src/components/SliderComponent.cpp b/es-core/src/components/SliderComponent.cpp index b2e9f61eb2..619c798356 100644 --- a/es-core/src/components/SliderComponent.cpp +++ b/es-core/src/components/SliderComponent.cpp @@ -22,7 +22,7 @@ SliderComponent::SliderComponent(Window* window, float min, float max, float inc bool SliderComponent::input(InputConfig* config, Input input) { - if(config->isMappedTo("left", input)) + if(config->isMappedLike("left", input)) { if(input.value) setValue(mValue - mSingleIncrement); @@ -31,7 +31,7 @@ bool SliderComponent::input(InputConfig* config, Input input) mMoveAccumulator = -MOVE_REPEAT_DELAY; return true; } - if(config->isMappedTo("right", input)) + if(config->isMappedLike("right", input)) { if(input.value) setValue(mValue + mSingleIncrement); diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index d5e0758033..c90ff504b4 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -90,9 +90,9 @@ void TextEditComponent::stopEditing() bool TextEditComponent::input(InputConfig* config, Input input) { - bool const cursor_left = (config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedTo("left", input)) || + bool const cursor_left = (config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedLike("left", input)) || (config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_LEFT); - bool const cursor_right = (config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedTo("right", input)) || + bool const cursor_right = (config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedLike("right", input)) || (config->getDeviceId() == DEVICE_KEYBOARD && input.id == SDLK_RIGHT); if(input.value == 0) @@ -129,10 +129,10 @@ bool TextEditComponent::input(InputConfig* config, Input input) return true; } - if(config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedTo("up", input)) + if(config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedLike("up", input)) { // TODO - }else if(config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedTo("down", input)) + }else if(config->getDeviceId() != DEVICE_KEYBOARD && config->isMappedLike("down", input)) { // TODO }else if(cursor_left || cursor_right) From c98a5d6220ec79bf0e0f5695d4a28b489cfb4952 Mon Sep 17 00:00:00 2001 From: Rael Gugelmin Cunha Date: Thu, 15 Nov 2018 15:09:08 -0200 Subject: [PATCH 330/603] Fixing kids/unattended mode --- es-app/src/views/gamelist/BasicGameListView.cpp | 2 +- es-core/src/Settings.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 7a5ef8f1b9..899f12578c 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -154,7 +154,7 @@ std::vector BasicGameListView::getHelpPrompts() prompts.push_back(HelpPrompt("select", "options")); if(mRoot->getSystem()->isGameSystem()) prompts.push_back(HelpPrompt("x", "random")); - if(mRoot->getSystem()->isGameSystem() && UIModeController::getInstance()->isUIModeFull()) + if(mRoot->getSystem()->isGameSystem() && !UIModeController::getInstance()->isUIModeKid()) { std::string prompt = CollectionSystemManager::get()->getEditingCollection(); prompts.push_back(HelpPrompt("y", prompt)); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index a0169619a0..77ff032964 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -18,7 +18,6 @@ std::vector settings_dont_save { { "DebugImage" }, { "ForceKid" }, { "ForceKiosk" }, - { "ForceDisableFilters" }, { "IgnoreGamelist" }, { "HideConsole" }, { "ShowExit" }, From a7a22e478d312a80245a2cb493d05c4a0b350dac Mon Sep 17 00:00:00 2001 From: "Keith F. Kelly" Date: Wed, 28 Nov 2018 10:55:12 -0800 Subject: [PATCH 331/603] Clarify the DELETE button's warning text. --- es-app/src/guis/GuiMetaDataEd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index 0650b02144..f07a5061e6 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -148,7 +148,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector if(mDeleteFunc) { auto deleteFileAndSelf = [&] { mDeleteFunc(); delete this; }; - auto deleteBtnFunc = [this, deleteFileAndSelf] { mWindow->pushGui(new GuiMsgBox(mWindow, "THIS WILL DELETE A FILE!\nARE YOU SURE?", "YES", deleteFileAndSelf, "NO", nullptr)); }; + auto deleteBtnFunc = [this, deleteFileAndSelf] { mWindow->pushGui(new GuiMsgBox(mWindow, "THIS WILL DELETE THE ACTUAL GAME FILE(S)!\nARE YOU SURE?", "YES", deleteFileAndSelf, "NO", nullptr)); }; buttons.push_back(std::make_shared(mWindow, "DELETE", "delete", deleteBtnFunc)); } From 8c4c024de11d3222f5672d2e16124e40825547d0 Mon Sep 17 00:00:00 2001 From: "Keith F. Kelly" Date: Wed, 28 Nov 2018 11:09:52 -0800 Subject: [PATCH 332/603] Add support to built-in thegamesdb.net scraper for TurboGrafx CD platform. --- es-app/src/PlatformId.cpp | 3 ++- es-app/src/PlatformId.h | 3 ++- es-app/src/scrapers/GamesDBScraper.cpp | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index fa9af434ac..383db7cbba 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -61,7 +61,8 @@ namespace PlatformIds "psvita", "psp", // playstation portable "snes", // super nintendo entertainment system - "pcengine", // turbografx-16/pcengine + "pcengine", // (aka turbografx-16) HuCards only + "pcenginecd", // (aka turbografx-16) CD-ROMs only "wonderswan", "wonderswancolor", "zxspectrum", diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index cf34c6eaf8..2380cb736a 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -62,7 +62,8 @@ namespace PlatformIds PLAYSTATION_VITA, PLAYSTATION_PORTABLE, SUPER_NINTENDO, - TURBOGRAFX_16, // (also PC Engine) + TURBOGRAFX_16, // (aka PC Engine) HuCards only + TURBOGRAFX_CD, // (aka PC Engine) CD-ROMs only WONDERSWAN, WONDERSWAN_COLOR, ZX_SPECTRUM, diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp index 436bafee1c..157b181ee6 100644 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ b/es-app/src/scrapers/GamesDBScraper.cpp @@ -64,7 +64,8 @@ const std::map gamesdb_platformid_map { { PLAYSTATION_VITA, "Sony Playstation Vita" }, { PLAYSTATION_PORTABLE, "Sony Playstation Portable" }, { SUPER_NINTENDO, "Super Nintendo (SNES)" }, - { TURBOGRAFX_16, "TurboGrafx 16" }, + { TURBOGRAFX_16, "TurboGrafx 16" }, // HuCards only + { TURBOGRAFX_CD, "TurboGrafx CD" }, // CD-ROMs only { WONDERSWAN, "WonderSwan" }, { WONDERSWAN_COLOR, "WonderSwan Color" }, { ZX_SPECTRUM, "Sinclair ZX Spectrum" }, From cdd43bf7e9aac19b51584f7d18a7e5ebd36d6e60 Mon Sep 17 00:00:00 2001 From: Cristi Mitrana Date: Fri, 11 Jan 2019 21:51:05 +0200 Subject: [PATCH 333/603] Add ScreenScraper.fr as scraping source --- es-app/CMakeLists.txt | 2 + es-app/src/PlatformId.cpp | 2 + es-app/src/PlatformId.h | 2 + es-app/src/scrapers/Scraper.cpp | 30 ++- es-app/src/scrapers/Scraper.h | 3 + es-app/src/scrapers/ScreenScraper.cpp | 339 ++++++++++++++++++++++++++ es-app/src/scrapers/ScreenScraper.h | 73 ++++++ es-core/src/utils/StringUtil.cpp | 14 ++ es-core/src/utils/StringUtil.h | 3 +- 9 files changed, 459 insertions(+), 9 deletions(-) create mode 100644 es-app/src/scrapers/ScreenScraper.cpp create mode 100644 es-app/src/scrapers/ScreenScraper.h diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 18473ff1c6..0dd0ee72d8 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -40,6 +40,7 @@ set(ES_HEADERS # Scrapers ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.h # Views ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.h @@ -96,6 +97,7 @@ set(ES_SOURCES # Scrapers ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.cpp # Views ${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGameListView.cpp diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 383db7cbba..54a1a977e0 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -61,6 +61,8 @@ namespace PlatformIds "psvita", "psp", // playstation portable "snes", // super nintendo entertainment system + "scummvm", + "x6800", "pcengine", // (aka turbografx-16) HuCards only "pcenginecd", // (aka turbografx-16) CD-ROMs only "wonderswan", diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index 2380cb736a..a4a53f861b 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -62,6 +62,8 @@ namespace PlatformIds PLAYSTATION_VITA, PLAYSTATION_PORTABLE, SUPER_NINTENDO, + SCUMMVM, + SHARP_X6800, TURBOGRAFX_16, // (aka PC Engine) HuCards only TURBOGRAFX_CD, // (aka PC Engine) CD-ROMs only WONDERSWAN, diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index 17eb8bc8bf..9f1ef9339a 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -2,6 +2,7 @@ #include "FileData.h" #include "GamesDBScraper.h" +#include "ScreenScraper.h" #include "Log.h" #include "Settings.h" #include "SystemData.h" @@ -9,7 +10,8 @@ #include const std::map scraper_request_funcs { - { "TheGamesDB", &thegamesdb_generate_scraper_requests } + { "TheGamesDB", &thegamesdb_generate_scraper_requests }, + { "ScreenScraper", &screenscraper_generate_scraper_requests } }; std::unique_ptr startScraperSearch(const ScraperSearchParams& params) @@ -126,7 +128,23 @@ MDResolveHandle::MDResolveHandle(const ScraperSearchResult& result, const Scrape { if(!result.imageUrl.empty()) { - std::string imgPath = getSaveAsPath(search, "image", result.imageUrl); + + std::string ext; + + // If we have a file extension returned by the scraper, then use it. + // Otherwise, try to guess it by the name of the URL, which point to an image. + if (!result.imageType.empty()) + { + ext = result.imageType; + }else{ + size_t dot = result.imageUrl.find_last_of('.'); + + if (dot != std::string::npos) + ext = result.imageUrl.substr(dot, std::string::npos); + } + + std::string imgPath = getSaveAsPath(search, "image", ext); + mFuncs.push_back(ResolvePair(downloadImageAsync(result.imageUrl, imgPath), [this, imgPath] { mResult.mdl.set("image", imgPath); @@ -269,7 +287,7 @@ bool resizeImage(const std::string& path, int maxWidth, int maxHeight) return saved; } -std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& suffix, const std::string& url) +std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& suffix, const std::string& extension) { const std::string subdirectory = params.system->getName(); const std::string name = Utils::FileSystem::getStem(params.game->getPath()) + "-" + suffix; @@ -284,11 +302,7 @@ std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& if(!Utils::FileSystem::exists(path)) Utils::FileSystem::createDirectory(path); - size_t dot = url.find_last_of('.'); - std::string ext; - if(dot != std::string::npos) - ext = url.substr(dot, std::string::npos); - path += name + ext; + path += name + extension; return path; } diff --git a/es-app/src/scrapers/Scraper.h b/es-app/src/scrapers/Scraper.h index 013ad5e546..48861978c0 100644 --- a/es-app/src/scrapers/Scraper.h +++ b/es-app/src/scrapers/Scraper.h @@ -31,6 +31,9 @@ struct ScraperSearchResult MetaDataList mdl; std::string imageUrl; std::string thumbnailUrl; + + // Needed to pre-set the image type + std::string imageType; }; // So let me explain why I've abstracted this so heavily. diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp new file mode 100644 index 0000000000..f4e8130da7 --- /dev/null +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -0,0 +1,339 @@ +#include "scrapers/ScreenScraper.h" + +#include "utils/TimeUtil.h" +#include "utils/StringUtil.h" +#include "FileData.h" +#include "Log.h" +#include "PlatformId.h" +#include "Settings.h" +#include "SystemData.h" +#include +#include + +using namespace PlatformIds; + +/** + List of systems and their IDs from + https://www.screenscraper.fr/api/systemesListe.php?devid=xxx&devpassword=yyy&softname=zzz&output=XML +**/ +const std::map screenscraper_platformid_map{ + { THREEDO, 29 }, + { AMIGA, 64 }, + { AMSTRAD_CPC, 65 }, + { APPLE_II, 86 }, + { ARCADE, 75 }, + { ATARI_800, 26 }, // Use ATARI_2600 as an alias for atari 800 + { ATARI_2600, 26 }, + { ATARI_5200, 40 }, + { ATARI_7800, 41 }, + { ATARI_JAGUAR, 27 }, + { ATARI_JAGUAR_CD, 171 }, + { ATARI_LYNX, 28 }, + { ATARI_ST, 42}, + // missing Atari XE ? + { COLECOVISION, 48 }, + { COMMODORE_64, 66 }, + { INTELLIVISION, 115 }, + { MAC_OS, 146 }, + { XBOX, 32 }, + { XBOX_360, 33 }, + { MSX, 113 }, + { NEOGEO, 142 }, + { NEOGEO_POCKET, 25}, + { NEOGEO_POCKET_COLOR, 82 }, + { NINTENDO_3DS, 17 }, + { NINTENDO_64, 14 }, + { NINTENDO_DS, 15 }, + { FAMICOM_DISK_SYSTEM, 106 }, + { NINTENDO_ENTERTAINMENT_SYSTEM, 3 }, + { GAME_BOY, 9 }, + { GAME_BOY_ADVANCE, 12 }, + { GAME_BOY_COLOR, 10 }, + { NINTENDO_GAMECUBE, 13 }, + { NINTENDO_WII, 16 }, + { NINTENDO_WII_U, 18 }, + { NINTENDO_VIRTUAL_BOY, 11 }, + { NINTENDO_GAME_AND_WATCH, 52 }, + { PC, 135 }, + { SCUMMVM, 123}, + { SEGA_32X, 19 }, + { SEGA_CD, 20 }, + { SEGA_DREAMCAST, 23 }, + { SEGA_GAME_GEAR, 21 }, + { SEGA_GENESIS, 1 }, + { SEGA_MASTER_SYSTEM, 2 }, + { SEGA_MEGA_DRIVE, 1 }, + { SEGA_SATURN, 22 }, + { SEGA_SG1000, 109 }, + { SHARP_X6800, 79}, + { PLAYSTATION, 57 }, + { PLAYSTATION_2, 58 }, + { PLAYSTATION_3, 59 }, + // missing Sony Playstation 4 ? + { PLAYSTATION_VITA, 62 }, + { PLAYSTATION_PORTABLE, 61 }, + { SUPER_NINTENDO, 4 }, + { TURBOGRAFX_16, 31 }, + { TURBOGRAFX_CD, 114 }, + { WONDERSWAN, 45 }, + { WONDERSWAN_COLOR, 46 }, + { ZX_SPECTRUM, 76 }, + { VIDEOPAC_ODYSSEY2, 104 }, + { VECTREX, 102 }, + { TRS80_COLOR_COMPUTER, 144 }, + { TANDY, 144 } +}; + + +// Helper XML parsing method, finding a node-by-name recursively. +pugi::xml_node find_node_by_name_re(const pugi::xml_node& node, const std::vector node_names) { + + for (const std::string& _val : node_names) + { + pugi::xpath_query query_node_name((static_cast("//") + _val).c_str()); + pugi::xpath_node_set results = node.select_nodes(query_node_name); + + if (results.size() > 0) + return results.first().node(); + } + + return pugi::xml_node(); +} + +// Help XML parsing method, finding an direct child XML node starting from the parent and filtering by an attribute value list. +pugi::xml_node find_child_by_attribute_list(const pugi::xml_node& node_parent, const std::string& node_name, const std::string& attribute_name, const std::vector attribute_values) +{ + for (auto _val : attribute_values) + { + for (pugi::xml_node node : node_parent.children(node_name.c_str())) + { + + if (strcmp(node.attribute(attribute_name.c_str()).value(), _val.c_str()) == 0) + return node; + } + } + + return pugi::xml_node(NULL); + +} + +void screenscraper_generate_scraper_requests(const ScraperSearchParams& params, + std::queue< std::unique_ptr >& requests, + std::vector& results) +{ + std::string path; + + ScreenScraperRequest::ScreenScraperConfig ssConfig; + + std::string cleanName = params.nameOverride; + if (cleanName.empty()) + cleanName = params.game->getCleanName(); + + path = ssConfig.getGameSearchUrl(cleanName); + auto& platforms = params.system->getPlatformIds(); + + for (auto platformIt = platforms.cbegin(); platformIt != platforms.cend(); platformIt++) + { + auto mapIt = screenscraper_platformid_map.find(*platformIt); + + if (mapIt != screenscraper_platformid_map.cend()) + { + path += "&systemeid="; + path += HttpReq::urlEncode(std::to_string(mapIt->second)); + }else{ + LOG(LogWarning) << "ScreenScraper: no support for platform " << getPlatformName(*platformIt); + } + + requests.push(std::unique_ptr(new ScreenScraperRequest(requests, results, path))); + } + +} + +void ScreenScraperRequest::process(const std::unique_ptr& req, std::vector& results) +{ + assert(req->status() == HttpReq::REQ_SUCCESS); + + pugi::xml_document doc; + pugi::xml_parse_result parseResult = doc.load(req->getContent().c_str()); + + if (!parseResult) + { + std::stringstream ss; + ss << "ScreenScraperRequest - Error parsing XML." << std::endl << parseResult.description() << ""; + + std::string err = ss.str(); + setError(err); + LOG(LogError) << err; + + return; + } + + processGame(doc, results); + +} + + +void ScreenScraperRequest::processGame(const pugi::xml_document& xmldoc, std::vector& results) +{ + pugi::xml_node data = xmldoc.child("Data"); + pugi::xml_node game = data.child("jeu"); + + if (game) + { + ScraperSearchResult result; + ScreenScraperRequest::ScreenScraperConfig ssConfig; + + std::string region = Utils::String::toLower(ssConfig.region).c_str(); + std::string language = Utils::String::toLower(ssConfig.language).c_str(); + + // Name fallback: US, WOR(LD). ( Xpath: Data/jeu[0]/noms/nom[*] ). + result.mdl.set("name", find_child_by_attribute_list(game.child("noms"), "nom", "region", { region, "wor", "us" , "ss", "eu", "jp" }).text().get()); + + // Description fallback language: EN, WOR(LD) + std::string description = find_child_by_attribute_list(game.child("synopsis"), "synopsis", "langue", { language, "en", "wor" }).text().get(); + + if (!description.empty()) { + result.mdl.set("desc", Utils::String::replace(description, " ", " ")); + } + + // Genre fallback language: EN. ( Xpath: Data/jeu[0]/genres/genre[*] ) + result.mdl.set("genre", find_child_by_attribute_list(game.child("genres"), "genre", "langue", { language, "en" }).text().get()); + LOG(LogDebug) << "Genre: " << result.mdl.get("genre"); + + // Get the date proper. The API returns multiple 'date' children nodes to the 'dates' main child of 'jeu'. + // Date fallback: WOR(LD), US, SS, JP, EU + std::string _date = find_child_by_attribute_list(game.child("dates"), "date", "region", { region, "wor", "us", "ss", "jp", "eu" }).text().get(); + LOG(LogDebug) << "Release Date (unparsed): " << _date; + + // Date can be YYYY-MM-DD or just YYYY. + if (_date.length() > 4) + { + result.mdl.set("releasedate", Utils::Time::DateTime(Utils::Time::stringToTime(_date, "%Y-%m-%d"))); + } else if (_date.length() > 0) + { + result.mdl.set("releasedate", Utils::Time::DateTime(Utils::Time::stringToTime(_date, "%Y"))); + } + + LOG(LogDebug) << "Release Date (parsed): " << result.mdl.get("releasedate"); + + /// Developer for the game( Xpath: Data/jeu[0]/developpeur ) + std::string developer = game.child("developpeur").text().get(); + if (!developer.empty()) + result.mdl.set("developer", Utils::String::replace(developer, " ", " ")); + + // Publisher for the game ( Xpath: Data/jeu[0]/editeur ) + std::string publisher = game.child("editeur").text().get(); + if (!publisher.empty()) + result.mdl.set("publisher", Utils::String::replace(publisher, " ", " ")); + + // Players + result.mdl.set("players", game.child("joueurs").text().get()); + + // TODO: Validate rating + if (Settings::getInstance()->getBool("ScrapeRatings") && game.child("note")) + { + float ratingVal = (game.child("note").text().as_int() / 20.0f); + std::stringstream ss; + ss << ratingVal; + result.mdl.set("rating", ss.str()); + } + + // Media super-node + pugi::xml_node media_list = game.child("medias"); + + if (media_list) + { + pugi::xml_node art = pugi::xml_node(NULL); + + // Do an XPath query for media[type='$media_type'], then filter by region + // We need to do this because any child of 'medias' has the form + // + // and we need to find the right media for the region. + pugi::xpath_node_set results = media_list.select_nodes((static_cast("media[@type='") + ssConfig.media_name + "']").c_str()); + + if (results.size()) + { + // Region fallback: WOR(LD), US, CUS(TOM?), JP, EU + for (auto _region : std::vector{ region, "wor", "us", "cus", "jp", "eu" }) + { + if (art) + break; + + for (auto node : results) + { + if (node.node().attribute("region").value() == _region) + { + art = node.node(); + break; + } + } + } + } // results + + if (art) + { + // Sending a 'softname' containing space will make the image URLs returned by the API also contain the space. + // Escape any spaces in the URL here + result.imageUrl = Utils::String::replace(art.text().get(), " ", "%20"); + + // Get the media type returned by ScreenScraper + std::string media_type = art.attribute("format").value(); + if (!media_type.empty()) + result.imageType = "." + media_type; + + // Ask for the same image, but with a smaller size, for the thumbnail displayed during scraping + result.thumbnailUrl = result.imageUrl + "&maxheight=250"; + }else{ + LOG(LogDebug) << "Failed to find media XML node with name=" << ssConfig.media_name; + } + + } + + results.push_back(result); + } // game +} + +// Currently not used in this module +void ScreenScraperRequest::processList(const pugi::xml_document& xmldoc, std::vector& results) +{ + assert(mRequestQueue != nullptr); + + LOG(LogDebug) << "Processing a list of results"; + + pugi::xml_node data = xmldoc.child("Data"); + pugi::xml_node game = data.child("jeu"); + + if (!game) + LOG(LogDebug) << "Found nothing"; + + ScreenScraperRequest::ScreenScraperConfig ssConfig; + + // limit the number of results per platform, not in total. + // otherwise if the first platform returns >= 7 games + // but the second platform contains the relevant game, + // the relevant result would not be shown. + for (int i = 0; game && i < MAX_SCRAPER_RESULTS; i++) + { + std::string id = game.child("id").text().get(); + std::string name = game.child("nom").text().get(); + std::string platformId = game.child("systemeid").text().get(); + std::string path = ssConfig.getGameSearchUrl(name) + "&systemeid=" + platformId + "&gameid=" + id; + + mRequestQueue->push(std::unique_ptr(new ScreenScraperRequest(results, path))); + + game = game.next_sibling("jeu"); + } + + +} + +std::string ScreenScraperRequest::ScreenScraperConfig::getGameSearchUrl(const std::string gameName) const +{ + return API_URL_BASE + + "/jeuInfos.php?devid=" + Utils::String::scramble(API_DEV_U, API_DEV_KEY) + + "&devpassword=" + Utils::String::scramble(API_DEV_P, API_DEV_KEY) + + "&softname=" + HttpReq::urlEncode(API_SOFT_NAME) + + "&output=xml" + + "&romnom=" + HttpReq::urlEncode(gameName); + +} diff --git a/es-app/src/scrapers/ScreenScraper.h b/es-app/src/scrapers/ScreenScraper.h new file mode 100644 index 0000000000..8cdfd216ab --- /dev/null +++ b/es-app/src/scrapers/ScreenScraper.h @@ -0,0 +1,73 @@ +#pragma once +#ifndef ES_APP_SCRAPERS_SCREEN_SCRAPER_H +#define ES_APP_SCRAPERS_SCREEN_SCRAPER_H + +#include "scrapers/Scraper.h" +#include "EmulationStation.h" + +namespace pugi { class xml_document; } + + +void screenscraper_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, + std::vector& results); + +class ScreenScraperRequest : public ScraperHttpRequest +{ +public: + // ctor for a GetGameList request + ScreenScraperRequest(std::queue< std::unique_ptr >& requestsWrite, std::vector& resultsWrite, const std::string& url) : ScraperHttpRequest(resultsWrite, url), mRequestQueue(&requestsWrite) {} + // ctor for a GetGame request + ScreenScraperRequest(std::vector& resultsWrite, const std::string& url) : ScraperHttpRequest(resultsWrite, url), mRequestQueue(nullptr) {} + + // Settings for the scraper + static const struct ScreenScraperConfig { + std::string getGameSearchUrl(const std::string gameName) const; + + // Access to the API + const std::string API_DEV_U = { 91, 32, 7, 17 }; + const std::string API_DEV_P = { 108, 28, 54, 55, 83, 43, 91, 44, 30, 22, 41, 12, 0, 108, 38, 29 }; + const std::string API_DEV_KEY = { 54, 73, 115, 100, 101, 67, 111, 107, 79, 66, 68, 66, 67, 56, 118, 77, 54, 88, 101, 54 }; + const std::string API_URL_BASE = "https://screenscraper.fr/api2"; + const std::string API_SOFT_NAME = "Emulationstation " + static_cast(PROGRAM_VERSION_STRING); + + /** Which type of image artwork we need. Possible values (not a comprehensive list): + - ss: in-game screenshot + - box-3D: 3D boxart + - box-2D: 2D boxart (default) + - screenmarque : marquee + - sstitle: in-game start screenshot + - steamgrid: Steam artwork + - wheel: spine + - support-2D: media showing the 2d boxart on the cart + - support-3D: media showing the 3d boxart on the cart + + Note that no all games contain values for these, so we default to "box-2D" since it's the most common. + **/ + std::string media_name = "box-2D"; + + // Which Region to use when selecting the artwork + // Applies to: artwork, name of the game, date of release + std::string region = "US"; + + // Which Language to use when selecting the textual information + // Applies to: description, genre + std::string language = "EN"; + + ScreenScraperConfig() {}; + } configuration; + +protected: + void process(const std::unique_ptr& req, std::vector& results) override; + + void processList(const pugi::xml_document& xmldoc, std::vector& results); + void processGame(const pugi::xml_document& xmldoc, std::vector& results); + bool isGameRequest() { return !mRequestQueue; } + + std::queue< std::unique_ptr >* mRequestQueue; + + +}; + + + +#endif // ES_APP_SCRAPERS_SCREEN_SCRAPER_H diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index fd70dfaa70..8d35f9701a 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -280,6 +280,20 @@ namespace Utils } // format + // Simple XOR scrambling of a string, with an accompanying key + std::string scramble(const std::string& _input, const std::string& key) + { + std::string buffer = _input; + + for (size_t i = 0; i < _input.size(); ++i) + { + buffer[i] = _input[i] ^ key[i]; + } + + return buffer; + + } // scramble + } // String:: } // Utils:: diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h index 47bba35acb..5fffa1d761 100644 --- a/es-core/src/utils/StringUtil.h +++ b/es-core/src/utils/StringUtil.h @@ -25,7 +25,8 @@ namespace Utils std::string removeParenthesis (const std::string& _string); stringVector commaStringToVector(const std::string& _string); std::string vectorToCommaString(stringVector _vector); - std::string format (const char* _string, ...); + std::string format (const char* _string, ...); + std::string scramble (const std::string& _input, const std::string& key); } // String:: From f8e3ac13406334b70b2c2f817371210ffe0793fd Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Sat, 19 Jan 2019 10:11:19 +0200 Subject: [PATCH 334/603] Fix UI Kiosk mode filters applying also to Kid mode. This fixes games marked both as hidden and kid not being shown in Kid mode. --- es-app/src/FileFilterIndex.cpp | 4 ++-- es-app/src/views/UIModeController.cpp | 6 ++++++ es-app/src/views/UIModeController.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index 6d7429cbde..bb077f8782 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -248,7 +248,7 @@ void FileFilterIndex::resetFilters() void FileFilterIndex::setUIModeFilters() { if(!Settings::getInstance()->getBool("ForceDisableFilters")){ - if (!UIModeController::getInstance()->isUIModeFull()) + if (UIModeController::getInstance()->isUIModeKiosk()) { filterByHidden = true; std::vector val = { "FALSE" }; @@ -259,7 +259,7 @@ void FileFilterIndex::setUIModeFilters() filterByKidGame = true; std::vector val = { "TRUE" }; setFilter(KIDGAME_FILTER, &val); - } + } } } diff --git a/es-app/src/views/UIModeController.cpp b/es-app/src/views/UIModeController.cpp index 1012f52eb5..6d1709ce1b 100644 --- a/es-app/src/views/UIModeController.cpp +++ b/es-app/src/views/UIModeController.cpp @@ -94,6 +94,12 @@ bool UIModeController::isUIModeKid() ((mCurrentUIMode == "Kid") && !Settings::getInstance()->getBool("ForceKiosk"))); } +bool UIModeController::isUIModeKiosk() +{ + return (Settings::getInstance()->getBool("ForceKiosk") || + ((mCurrentUIMode == "Kiosk") && !Settings::getInstance()->getBool("ForceKid"))); +} + std::string UIModeController::getFormattedPassKeyStr() { // supported sequence-inputs: u (up), d (down), l (left), r (right), a, b, x, y diff --git a/es-app/src/views/UIModeController.h b/es-app/src/views/UIModeController.h index e26d68c2c7..9746a1d79e 100644 --- a/es-app/src/views/UIModeController.h +++ b/es-app/src/views/UIModeController.h @@ -26,6 +26,7 @@ class UIModeController { bool isUIModeFull(); bool isUIModeKid(); + bool isUIModeKiosk(); inline std::vector getUIModes() { return mUIModes; }; private: UIModeController(); From ce04f7f297c35fa149b37051500590196fb79e01 Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Thu, 24 Jan 2019 20:00:19 +0200 Subject: [PATCH 335/603] Add checks for the Scraper, when the settings no longer match the list of available scrapers. If the Scraper configured in the settings is no longer available, don't crash when running the scraper. For single game scrapes, we show an error for the user to change the configuration. For batch scraping, silently choose the 1st scraper available in the list --- .../src/components/ScraperSearchComponent.cpp | 21 +++++++++++++------ es-app/src/guis/GuiMenu.cpp | 4 +++- es-app/src/scrapers/Scraper.cpp | 19 +++++++++++++++-- es-app/src/scrapers/Scraper.h | 3 +++ 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index 80428f9eae..87aacba10e 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -231,14 +231,23 @@ void ScraperSearchComponent::onSearchDone(const std::vector unsigned int color = 0x777777FF; if(results.empty()) { - ComponentListRow row; - row.addElement(std::make_shared(mWindow, "NO GAMES FOUND - SKIP", font, color), true); + // Check if the scraper used is still valid + if (!isValidConfiguredScraper()) + { + mWindow->pushGui(new GuiMsgBox(mWindow, Utils::String::toUpper("Configured scraper is no longer available.\nPlease change the scraping source in the settings."), + "FINISH", mSkipCallback)); + } + else + { + ComponentListRow row; + row.addElement(std::make_shared(mWindow, "NO GAMES FOUND - SKIP", font, color), true); - if(mSkipCallback) - row.makeAcceptInputHandler(mSkipCallback); + if(mSkipCallback) + row.makeAcceptInputHandler(mSkipCallback); - mResultList->addRow(row); - mGrid.resetCursor(); + mResultList->addRow(row); + mGrid.resetCursor(); + } }else{ ComponentListRow row; for(size_t i = 0; i < results.size(); i++) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index d1c7dfbe80..4483049758 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -55,8 +55,10 @@ void GuiMenu::openScraperSettings() // scrape from auto scraper_list = std::make_shared< OptionListComponent< std::string > >(mWindow, "SCRAPE FROM", false); std::vector scrapers = getScraperList(); + + // Select either the first entry of the one read from the settings, just in case the scraper from settings has vanished. for(auto it = scrapers.cbegin(); it != scrapers.cend(); it++) - scraper_list->add(*it, *it, *it == Settings::getInstance()->getString("Scraper")); + scraper_list->add(*it, *it, *it == Settings::getInstance()->getString("Scraper") || it==scrapers.cbegin()); s->addWithLabel("SCRAPE FROM", scraper_list); s->addSaveFunc([scraper_list] { Settings::getInstance()->setString("Scraper", scraper_list->getSelected()); }); diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index 9f1ef9339a..3d559f59f7 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -17,9 +17,18 @@ const std::map scraper_request_func std::unique_ptr startScraperSearch(const ScraperSearchParams& params) { const std::string& name = Settings::getInstance()->getString("Scraper"); - std::unique_ptr handle(new ScraperSearchHandle()); - scraper_request_funcs.at(name)(params, handle->mRequestQueue, handle->mResults); + + // Check if the Scraper in the settings still exists as a registered scraping source. + if (scraper_request_funcs.find(name) == scraper_request_funcs.end()) + { + LOG(LogWarning) << "Configured scraper (" << name << ") unavailable, scraping aborted."; + } + else + { + scraper_request_funcs.at(name)(params, handle->mRequestQueue, handle->mResults); + } + return handle; } @@ -34,6 +43,12 @@ std::vector getScraperList() return list; } +bool isValidConfiguredScraper() +{ + const std::string& name = Settings::getInstance()->getString("Scraper"); + return scraper_request_funcs.find(name) != scraper_request_funcs.end(); +} + // ScraperSearchHandle ScraperSearchHandle::ScraperSearchHandle() { diff --git a/es-app/src/scrapers/Scraper.h b/es-app/src/scrapers/Scraper.h index 48861978c0..c6dd6a2613 100644 --- a/es-app/src/scrapers/Scraper.h +++ b/es-app/src/scrapers/Scraper.h @@ -113,6 +113,9 @@ std::unique_ptr startScraperSearch(const ScraperSearchParam // returns a list of valid scraper names std::vector getScraperList(); +// returns true if the scraper configured in the settings is still valid +bool isValidConfiguredScraper(); + typedef void (*generate_scraper_requests_func)(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, std::vector& results); // ------------------------------------------------------------------------- From 253e5716d25bd7697012fbfbc2e7d2120a0307a6 Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Thu, 24 Jan 2019 20:05:07 +0200 Subject: [PATCH 336/603] Remove the TGDB scraper from the list of enabled scrapers --- es-app/src/scrapers/Scraper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index 3d559f59f7..eead8a8124 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -10,7 +10,7 @@ #include const std::map scraper_request_funcs { - { "TheGamesDB", &thegamesdb_generate_scraper_requests }, +// { "TheGamesDB", &thegamesdb_generate_scraper_requests }, { "ScreenScraper", &screenscraper_generate_scraper_requests } }; From 9db9d45f54fc89c850282781edbafb4a6ea8bda6 Mon Sep 17 00:00:00 2001 From: pjft Date: Fri, 25 Jan 2019 13:48:03 +0000 Subject: [PATCH 337/603] Fix for unset AudioCard setting --- es-core/src/Settings.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 77ff032964..0be5a6f245 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -134,6 +134,7 @@ void Settings::setDefaults() mStringMap["AudioDevice"] = "Master"; #endif + mStringMap["AudioCard"] = "default"; mStringMap["UIMode"] = "Full"; mStringMap["UIMode_passkey"] = "uuddlrlrba"; mBoolMap["ForceKiosk"] = false; From 87a32055218ac26fb548d8a62e05270b1304a479 Mon Sep 17 00:00:00 2001 From: Lubosz Sarnecki Date: Thu, 31 Jan 2019 21:19:34 +0100 Subject: [PATCH 338/603] Loading screen: Be more verbose about what is happening. Starting up emulationstation takes me about 1 minute over the network with a large collection of 27 systems with images. This patch uses the loading screen to tell the user about the status of the startup, with information how many systems are left for view initialization. The most beefy part of the startup process is initializing the views, and preloading images. This patch extends the `renderLoadingScreen` function to take a string and uses it in `ViewController::preload`. v2: Add SplashScreenProgress option enabled by default. --- es-app/src/main.cpp | 15 +++++++++++++-- es-app/src/views/ViewController.cpp | 13 ++++++++++++- es-core/src/Settings.cpp | 2 ++ es-core/src/Window.cpp | 10 ++++++---- es-core/src/Window.h | 2 +- 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 2cc9281461..57c100fa66 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -292,6 +292,9 @@ int main(int argc, char* argv[]) MameNames::init(); window.pushGui(ViewController::get()); + bool splashScreen = Settings::getInstance()->getBool("SplashScreen"); + bool splashScreenProgress = Settings::getInstance()->getBool("SplashScreenProgress"); + if(!scrape_cmdline) { if(!window.init()) @@ -303,8 +306,13 @@ int main(int argc, char* argv[]) std::string glExts = (const char*)glGetString(GL_EXTENSIONS); LOG(LogInfo) << "Checking available OpenGL extensions..."; LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (glExts.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); - if(Settings::getInstance()->getBool("SplashScreen")) - window.renderLoadingScreen(); + if(splashScreen) + { + std::string progressText = "Loading..."; + if (splashScreenProgress) + progressText = "Loading system config..."; + window.renderLoadingScreen(progressText); + } } const char* errorMsg = NULL; @@ -342,6 +350,9 @@ int main(int argc, char* argv[]) // this makes for no delays when accessing content, but a longer startup time ViewController::get()->preload(); + if(splashScreen && splashScreenProgress) + window.renderLoadingScreen("Done."); + //choose which GUI to open depending on if an input configuration already exists if(errorMsg == NULL) { diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 0d81471eaf..38fe2dff65 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -65,7 +65,7 @@ void ViewController::goToStart() void ViewController::ReloadAndGoToStart() { - mWindow->renderLoadingScreen(); + mWindow->renderLoadingScreen("Loading..."); ViewController::get()->reloadAll(); ViewController::get()->goToStart(); } @@ -429,8 +429,19 @@ void ViewController::render(const Transform4x4f& parentTrans) void ViewController::preload() { + uint32_t i = 0; for(auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++) { + if(Settings::getInstance()->getBool("SplashScreen") && + Settings::getInstance()->getBool("SplashScreenProgress")) + { + i++; + char buffer[100]; + sprintf (buffer, "Loading '%s' (%d/%d)", + (*it)->getFullName().c_str(), i, SystemData::sSystemVector.size()); + mWindow->renderLoadingScreen(std::string(buffer)); + } + (*it)->getIndex()->resetFilters(); getGameListView(*it); } diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 0be5a6f245..6e808d127a 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -22,6 +22,7 @@ std::vector settings_dont_save { { "HideConsole" }, { "ShowExit" }, { "SplashScreen" }, + { "SplashScreenProgress" }, { "VSync" }, { "Windowed" }, { "WindowWidth" }, @@ -60,6 +61,7 @@ void Settings::setDefaults() mBoolMap["ShowExit"] = true; mBoolMap["Windowed"] = false; mBoolMap["SplashScreen"] = true; + mBoolMap["SplashScreenProgress"] = true; mStringMap["StartupSystem"] = ""; mBoolMap["VSync"] = true; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 3c0aa1d06c..d7d0af7080 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -298,7 +298,7 @@ void Window::setAllowSleep(bool sleep) mAllowSleep = sleep; } -void Window::renderLoadingScreen() +void Window::renderLoadingScreen(std::string text) { Transform4x4f trans = Transform4x4f::Identity(); Renderer::setMatrix(trans); @@ -311,9 +311,11 @@ void Window::renderLoadingScreen() splash.render(trans); auto& font = mDefaultFonts.at(1); - TextCache* cache = font->buildTextCache("LOADING...", 0, 0, 0x656565FF); - trans = trans.translate(Vector3f(Math::round((Renderer::getScreenWidth() - cache->metrics.size.x()) / 2.0f), - Math::round(Renderer::getScreenHeight() * 0.835f), 0.0f)); + TextCache* cache = font->buildTextCache(text, 0, 0, 0x656565FF); + + float x = Math::round((Renderer::getScreenWidth() - cache->metrics.size.x()) / 2.0f); + float y = Math::round(Renderer::getScreenHeight() * 0.835f); + trans = trans.translate(Vector3f(x, y, 0.0f)); Renderer::setMatrix(trans); font->renderTextCache(cache); delete cache; diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 0cc6009d03..143a36cc2b 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -63,7 +63,7 @@ class Window bool getAllowSleep(); void setAllowSleep(bool sleep); - void renderLoadingScreen(); + void renderLoadingScreen(std::string text); void renderHelpPromptsEarly(); // used to render HelpPrompts before a fade void setHelpPrompts(const std::vector& prompts, const HelpStyle& style); From 44395f5f45f5fc87c86a6a2ca0499d185efa8445 Mon Sep 17 00:00:00 2001 From: acrummyidea Date: Thu, 7 Feb 2019 21:08:11 -0500 Subject: [PATCH 339/603] Adding new scraper GamesDBJSONScraper. The scraper uses the new GamesDb JSON API. On the first run it downloads a few resource files needed to intepret the otput of game search api calls these resources go into ~/.emulatiostation/scrapers The resource files include the list of developers and the list of publishers. To update the lists simply delete the files and relaunch emulationstation. Searching a game by id (GamesDB id) is done as before by manually edit the search query and query for "id:". --- CMake/Packages/FindRapidJSON.cmake | 71 ++++ CMakeLists.txt | 2 + es-app/CMakeLists.txt | 8 +- es-app/src/guis/GuiMenu.cpp | 2 +- es-app/src/scrapers/GamesDBJSONScraper.cpp | 392 ++++++++++++++++++ es-app/src/scrapers/GamesDBJSONScraper.h | 37 ++ .../scrapers/GamesDBJSONScraperResources.cpp | 207 +++++++++ .../scrapers/GamesDBJSONScraperResources.h | 42 ++ es-app/src/scrapers/GamesDBScraper.cpp | 211 ---------- es-app/src/scrapers/GamesDBScraper.h | 29 -- es-app/src/scrapers/Scraper.cpp | 4 +- 11 files changed, 759 insertions(+), 246 deletions(-) create mode 100644 CMake/Packages/FindRapidJSON.cmake create mode 100644 es-app/src/scrapers/GamesDBJSONScraper.cpp create mode 100644 es-app/src/scrapers/GamesDBJSONScraper.h create mode 100644 es-app/src/scrapers/GamesDBJSONScraperResources.cpp create mode 100644 es-app/src/scrapers/GamesDBJSONScraperResources.h delete mode 100644 es-app/src/scrapers/GamesDBScraper.cpp delete mode 100644 es-app/src/scrapers/GamesDBScraper.h diff --git a/CMake/Packages/FindRapidJSON.cmake b/CMake/Packages/FindRapidJSON.cmake new file mode 100644 index 0000000000..b5b69e7278 --- /dev/null +++ b/CMake/Packages/FindRapidJSON.cmake @@ -0,0 +1,71 @@ +#.rst: +# FindRapidjson +# -------- +# +# Find the native rapidjson includes and library. +# +# IMPORTED Targets +# ^^^^^^^^^^^^^^^^ +# +# +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# This module defines the following variables: +# +# :: +# +# RAPIDJSON_INCLUDE_DIRS - where to find rapidjson/document.h, etc. +# RAPIDJSON_LIBRARIES - List of libraries when using rapidjson. +# RAPIDJSON_FOUND - True if rapidjson found. +# +# :: +# +# +# Hints +# ^^^^^ +# +# A user may set ``RAPIDJSON_ROOT`` to a rapidjson installation root to tell this +# module where to look. + +#============================================================================= +# Copyright 2018 OWenT. +# +# 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.) + +unset(_RAPIDJSON_SEARCH_ROOT_INC) +unset(_RAPIDJSON_SEARCH_ROOT_LIB) + +# Search RAPIDJSON_ROOT first if it is set. +if (Rapidjson_ROOT) + set(RAPIDJSON_ROOT ${Rapidjson_ROOT}) +endif() + +if(RAPIDJSON_ROOT) + set(_RAPIDJSON_SEARCH_ROOT_INC PATHS ${RAPIDJSON_ROOT} ${RAPIDJSON_ROOT}/include NO_DEFAULT_PATH) +endif() + +# Try each search configuration. +find_path(RAPIDJSON_INCLUDE_DIRS NAMES rapidjson/document.h ${_RAPIDJSON_SEARCH_ROOT_INC}) + +mark_as_advanced(RAPIDJSON_INCLUDE_DIRS) + +# handle the QUIETLY and REQUIRED arguments and set RAPIDJSON_FOUND to TRUE if +# all listed variables are TRUE +include("FindPackageHandleStandardArgs") +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Rapidjson + REQUIRED_VARS RAPIDJSON_INCLUDE_DIRS + FOUND_VAR Rapidjson_FOUND +) + +if(Rapidjson_FOUND) + set(RAPIDJSON_FOUND ${Rapidjson_FOUND}) +endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 50a31be43b..b757e85749 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,6 +57,7 @@ find_package(FreeImage REQUIRED) find_package(SDL2 REQUIRED) find_package(CURL REQUIRED) find_package(VLC REQUIRED) +find_package(RapidJSON REQUIRED) find_package(libCEC) #add ALSA for Linux @@ -120,6 +121,7 @@ set(COMMON_INCLUDE_DIRS ${SDL2_INCLUDE_DIR} ${CURL_INCLUDE_DIR} ${VLC_INCLUDE_DIR} + ${RAPIDJSON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/external ${CMAKE_CURRENT_SOURCE_DIR}/es-core/src ) diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 0dd0ee72d8..4ff4fdcce9 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -39,7 +39,8 @@ set(ES_HEADERS # Scrapers ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraper.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraperResources.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.h # Views @@ -96,7 +97,8 @@ set(ES_SOURCES # Scrapers ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/Scraper.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBScraper.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraper.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/GamesDBJSONScraperResources.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.cpp # Views @@ -157,7 +159,7 @@ SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Alec Lofquist ") SET(CPACK_DEBIAN_PACKAGE_SECTION "misc") SET(CPACK_DEBIAN_PACKAGE_PRIORITY "extra") SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, libsdl2-2.0-0, libfreeimage3, libfreetype6, libcurl3, libasound2") -SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS "debhelper (>= 8.0.0), cmake, g++ (>= 4.8), libsdl2-dev, libfreeimage-dev, libfreetype6-dev, libcurl4-openssl-dev, libasound2-dev, libgl1-mesa-dev") +SET(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS "debhelper (>= 8.0.0), cmake, g++ (>= 4.8), libsdl2-dev, libfreeimage-dev, libfreetype6-dev, libcurl4-openssl-dev, libasound2-dev, libgl1-mesa-dev, rapidjson-dev") SET(CPACK_PACKAGE_VENDOR "emulationstation.org") SET(CPACK_PACKAGE_VERSION "2.0.0~rc1") diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 4483049758..2fd4c5f0ed 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -58,7 +58,7 @@ void GuiMenu::openScraperSettings() // Select either the first entry of the one read from the settings, just in case the scraper from settings has vanished. for(auto it = scrapers.cbegin(); it != scrapers.cend(); it++) - scraper_list->add(*it, *it, *it == Settings::getInstance()->getString("Scraper") || it==scrapers.cbegin()); + scraper_list->add(*it, *it, *it == Settings::getInstance()->getString("Scraper")); s->addWithLabel("SCRAPE FROM", scraper_list); s->addSaveFunc([scraper_list] { Settings::getInstance()->setString("Scraper", scraper_list->getSelected()); }); diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp new file mode 100644 index 0000000000..a40ee2ecab --- /dev/null +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -0,0 +1,392 @@ +#include +#include + +#include "scrapers/GamesDBJSONScraper.h" +#include "scrapers/GamesDBJSONScraperResources.h" + +#include "FileData.h" +#include "Log.h" +#include "PlatformId.h" +#include "Settings.h" +#include "SystemData.h" +#include "utils/TimeUtil.h" +#include + +/* When raspbian will get an up to date version of rapidjson we'll be + able to have it throw in case of error with the following: +#ifndef RAPIDJSON_ASSERT +#define RAPIDJSON_ASSERT(x) \ + if (!(x)) { \ + throw std::runtime_error("rapidjson internal assertion failure: " #x); \ + } +#endif // RAPIDJSON_ASSERT +*/ + +#include +#include + +using namespace PlatformIds; +using namespace rapidjson; + +namespace +{ +TheGamesDBJSONRequestResources resources; +} + +const std::map gamesdb_new_platformid_map{ + { THREEDO, "25" }, + { AMIGA, "4911" }, + { AMSTRAD_CPC, "4914" }, + { APPLE_II, "4942" }, + { ARCADE, "23" }, + { ATARI_800, "4943" }, + { ATARI_2600, "22" }, + { ATARI_5200, "26" }, + { ATARI_7800, "27" }, + { ATARI_JAGUAR, "28" }, + { ATARI_JAGUAR_CD, "29" }, + { ATARI_LYNX, "4924" }, + { ATARI_ST, "4937" }, + { ATARI_XE, "30" }, + { COLECOVISION, "31" }, + { COMMODORE_64, "40" }, + { INTELLIVISION, "32" }, + { MAC_OS, "37" }, + { XBOX, "14" }, + { XBOX_360, "15" }, + { MSX, "4929" }, + { NEOGEO, "24" }, + { NEOGEO_POCKET, "4922" }, + { NEOGEO_POCKET_COLOR, "4923" }, + { NINTENDO_3DS, "4912" }, + { NINTENDO_64, "3" }, + { NINTENDO_DS, "8" }, + { FAMICOM_DISK_SYSTEM, "4936" }, + { NINTENDO_ENTERTAINMENT_SYSTEM, "7" }, + { GAME_BOY, "4" }, + { GAME_BOY_ADVANCE, "5" }, + { GAME_BOY_COLOR, "41" }, + { NINTENDO_GAMECUBE, "2" }, + { NINTENDO_WII, "9" }, + { NINTENDO_WII_U, "38" }, + { NINTENDO_VIRTUAL_BOY, "4918" }, + { NINTENDO_GAME_AND_WATCH, "-1" }, + { PC, "1" }, + { SEGA_32X, "33" }, + { SEGA_CD, "21" }, + { SEGA_DREAMCAST, "16" }, + { SEGA_GAME_GEAR, "20" }, + { SEGA_GENESIS, "18" }, + { SEGA_MASTER_SYSTEM, "35" }, + { SEGA_MEGA_DRIVE, "36" }, + { SEGA_SATURN, "17" }, + { SEGA_SG1000, "4949" }, + { PLAYSTATION, "10" }, + { PLAYSTATION_2, "11" }, + { PLAYSTATION_3, "12" }, + { PLAYSTATION_4, "4919" }, + { PLAYSTATION_VITA, "39" }, + { PLAYSTATION_PORTABLE, "13" }, + { SUPER_NINTENDO, "6" }, + { TURBOGRAFX_16, "34" }, // HuCards only + { TURBOGRAFX_CD, "4955" }, // CD-ROMs only + { WONDERSWAN, "4925" }, + { WONDERSWAN_COLOR, "4926" }, + { ZX_SPECTRUM, "4913" }, + { VIDEOPAC_ODYSSEY2, "4927" }, + { VECTREX, "4939" }, + { TRS80_COLOR_COMPUTER, "4941" }, + { TANDY, "4941" }, +}; + +void thegamesdb_generate_json_scraper_requests(const ScraperSearchParams& params, + std::queue>& requests, std::vector& results) +{ + resources.prepare(); + std::string path = "https://api.thegamesdb.net"; + bool usingGameID = false; + const std::string apiKey = std::string("apikey=") + resources.getApiKey(); + std::string cleanName = params.nameOverride; + if (!cleanName.empty() && cleanName.substr(0, 3) == "id:") + { + std::string gameID = cleanName.substr(3); + path += "/Games/ByGameID?" + apiKey + + "&fields=players,publishers,genres,overview,last_updated,rating," + "platform,coop,youtube,os,processor,ram,hdd,video,sound,alternates&" + "include=boxart&id=" + + HttpReq::urlEncode(gameID); + usingGameID = true; + } else + { + if (cleanName.empty()) + cleanName = params.game->getCleanName(); + path += "/Games/ByGameName?" + apiKey + + "&fields=players,publishers,genres,overview,last_updated,rating," + "platform,coop,youtube,os,processor,ram,hdd,video,sound,alternates&" + "include=boxart&name=" + + HttpReq::urlEncode(cleanName); + } + + if (usingGameID) + { + // if we have the ID already, we don't need the GetGameList request + requests.push(std::unique_ptr(new TheGamesDBJSONRequest(results, path))); + } else + { + std::string platformQueryParam; + auto& platforms = params.system->getPlatformIds(); + if (!platforms.empty()) + { + bool first = true; + platformQueryParam += "&filter%5Bplatform%5D="; + for (auto platformIt = platforms.cbegin(); platformIt != platforms.cend(); platformIt++) + { + auto mapIt = gamesdb_new_platformid_map.find(*platformIt); + if (mapIt != gamesdb_new_platformid_map.cend()) + { + if (!first) + { + platformQueryParam += ","; + } + platformQueryParam += HttpReq::urlEncode(mapIt->second); + first = false; + } else + { + LOG(LogWarning) << "TheGamesDB scraper warning - no support for platform " + << getPlatformName(*platformIt); + } + } + path += platformQueryParam; + } + + requests.push(std::unique_ptr(new TheGamesDBJSONRequest(requests, results, path))); + } +} + +namespace +{ + +std::string getStringOrThrow(const Value& v, const std::string& key) +{ + if (!v.HasMember(key.c_str()) || !v[key.c_str()].IsString()) + { + throw std::runtime_error("rapidjson internal assertion failure: missing or non string key:" + key); + } + return v[key.c_str()].GetString(); +} + +int getIntOrThrow(const Value& v, const std::string& key) +{ + if (!v.HasMember(key.c_str()) || !v[key.c_str()].IsInt()) + { + throw std::runtime_error("rapidjson internal assertion failure: missing or non int key:" + key); + } + return v[key.c_str()].GetInt(); +} + +int getIntOrThrow(const Value& v) +{ + if (!v.IsInt()) + { + throw std::runtime_error("rapidjson internal assertion failure: not an int"); + } + return v.GetInt(); +} + +std::string getBoxartImage(const Value& v) +{ + if (!v.IsArray() || v.Size() == 0) + { + return ""; + } + for (int i = 0; i < v.Size(); ++i) + { + auto& im = v[i]; + std::string type = getStringOrThrow(im, "type"); + std::string side = getStringOrThrow(im, "side"); + if (type == "boxart" && side == "front") + { + return getStringOrThrow(im, "filename"); + } + } + return getStringOrThrow(v[0], "filename"); +} + +std::string getDeveloperString(const Value& v) +{ + if (!v.IsArray()) + { + return ""; + } + std::string out = ""; + bool first = true; + for (int i = 0; i < v.Size(); ++i) + { + auto mapIt = resources.gamesdb_new_developers_map.find(getIntOrThrow(v[i])); + if (mapIt == resources.gamesdb_new_developers_map.cend()) + { + continue; + } + if (!first) + { + out += ", "; + } + out += mapIt->second; + first = false; + } + return out; +} + +std::string getPublisherString(const Value& v) +{ + if (!v.IsArray()) + { + return ""; + } + std::string out = ""; + bool first = true; + for (int i = 0; i < v.Size(); ++i) + { + auto mapIt = resources.gamesdb_new_publishers_map.find(getIntOrThrow(v[i])); + if (mapIt == resources.gamesdb_new_publishers_map.cend()) + { + continue; + } + if (!first) + { + out += ", "; + } + out += mapIt->second; + first = false; + } + return out; +} + +std::string getGenreString(const Value& v) +{ + if (!v.IsArray()) + { + return ""; + } + std::string out = ""; + bool first = true; + for (int i = 0; i < v.Size(); ++i) + { + auto mapIt = resources.gamesdb_new_genres_map.find(getIntOrThrow(v[i])); + if (mapIt == resources.gamesdb_new_genres_map.cend()) + { + continue; + } + if (!first) + { + out += ", "; + } + out += mapIt->second; + first = false; + } + return out; +} + +void processGame(const Value& game, const Value& boxart, std::vector& results) +{ + std::string baseImageUrlThumb = getStringOrThrow(boxart["base_url"], "thumb"); + std::string baseImageUrlLarge = getStringOrThrow(boxart["base_url"], "large"); + + ScraperSearchResult result; + + result.mdl.set("name", getStringOrThrow(game, "game_title")); + if (game.HasMember("overview") && game["overview"].IsString()) + { + result.mdl.set("desc", game["overview"].GetString()); + } + if (game.HasMember("release_date") && game["release_date"].IsString()) + { + result.mdl.set( + "releasedate", Utils::Time::DateTime(Utils::Time::stringToTime(game["release_date"].GetString(), "%Y-%m-%d"))); + } + if (game.HasMember("developers") && game["developers"].IsArray()) + { + result.mdl.set("developer", getDeveloperString(game["developers"])); + } + if (game.HasMember("publishers") && game["publishers"].IsArray()) + { + result.mdl.set("publisher", getPublisherString(game["publishers"])); + } + if (game.HasMember("genres") && game["genres"].IsArray()) + { + + result.mdl.set("genre", getGenreString(game["genres"])); + } + if (game.HasMember("players") && game["players"].IsInt()) + { + result.mdl.set("players", std::to_string(game["players"].GetInt())); + } + + std::string id = std::to_string(getIntOrThrow(game, "id")); + if (boxart["data"].HasMember(id.c_str())) + { + std::string image = getBoxartImage(boxart["data"][id.c_str()]); + result.thumbnailUrl = baseImageUrlThumb + "/" + image; + result.imageUrl = baseImageUrlLarge + "/" + image; + } + + results.push_back(result); +} +} // namespace + +void TheGamesDBJSONRequest::process(const std::unique_ptr& req, std::vector& results) +{ + assert(req->status() == HttpReq::REQ_SUCCESS); + + Document doc; + doc.Parse(req->getContent().c_str()); + + if (doc.HasParseError()) + { + std::string err = + std::string("TheGamesDBJSONRequest - Error parsing JSON. \n\t") + GetParseError_En(doc.GetParseError()); + setError(err); + LOG(LogError) << err; + return; + } + + if (!doc.HasMember("data") || !doc["data"].HasMember("games") || !doc["data"]["games"].IsArray()) + { + std::string warn = "TheGamesDBJSONRequest - Response had no game data.\n"; + LOG(LogWarning) << warn; + return; + } + const Value& games = doc["data"]["games"]; + + if (!doc.HasMember("include") || !doc["include"].HasMember("boxart")) + { + std::string warn = "TheGamesDBJSONRequest - Response had no include boxart data.\n"; + LOG(LogWarning) << warn; + return; + } + + const Value& boxart = doc["include"]["boxart"]; + + if (!boxart.HasMember("base_url") || !boxart.HasMember("data") || !boxart.IsObject()) + { + std::string warn = "TheGamesDBJSONRequest - Response include had no usable boxart data.\n"; + LOG(LogWarning) << warn; + return; + } + + resources.ensureResources(); + + + for (int i = 0; i < games.Size(); ++i) + { + auto& v = games[i]; + try + { + processGame(v, boxart, results); + } + catch (std::runtime_error& e) + { + LOG(LogError) << "Error while processing game: " << e.what(); + } + } +} diff --git a/es-app/src/scrapers/GamesDBJSONScraper.h b/es-app/src/scrapers/GamesDBJSONScraper.h new file mode 100644 index 0000000000..505dbcf2be --- /dev/null +++ b/es-app/src/scrapers/GamesDBJSONScraper.h @@ -0,0 +1,37 @@ +#pragma once +#ifndef ES_APP_SCRAPERS_GAMES_DB_JSON_SCRAPER_H +#define ES_APP_SCRAPERS_GAMES_DB_JSON_SCRAPER_H + +#include "scrapers/Scraper.h" + +namespace pugi +{ +class xml_document; +} + +void thegamesdb_generate_json_scraper_requests(const ScraperSearchParams& params, + std::queue>& requests, std::vector& results); + +class TheGamesDBJSONRequest : public ScraperHttpRequest +{ + public: + // ctor for a GetGameList request + TheGamesDBJSONRequest(std::queue>& requestsWrite, + std::vector& resultsWrite, const std::string& url) + : ScraperHttpRequest(resultsWrite, url), mRequestQueue(&requestsWrite) + { + } + // ctor for a GetGame request + TheGamesDBJSONRequest(std::vector& resultsWrite, const std::string& url) + : ScraperHttpRequest(resultsWrite, url), mRequestQueue(nullptr) + { + } + + protected: + void process(const std::unique_ptr& req, std::vector& results) override; + bool isGameRequest() { return !mRequestQueue; } + + std::queue>* mRequestQueue; +}; + +#endif // ES_APP_SCRAPERS_GAMES_DB_JSON_SCRAPER_H diff --git a/es-app/src/scrapers/GamesDBJSONScraperResources.cpp b/es-app/src/scrapers/GamesDBJSONScraperResources.cpp new file mode 100644 index 0000000000..7d59bef46b --- /dev/null +++ b/es-app/src/scrapers/GamesDBJSONScraperResources.cpp @@ -0,0 +1,207 @@ +#include +#include +#include +#include + +#include "Log.h" + +#include "scrapers/GamesDBJSONScraperResources.h" +#include "utils/FileSystemUtil.h" + + +#include +#include + +using namespace rapidjson; + + +namespace +{ +constexpr char GamesDBAPIKey[] = "445fcbc3f32bb2474bc27016b99eb963d318ee3a608212c543b9a79de1041600"; + + +constexpr int MAX_WAIT_MS = 90000; +constexpr int POLL_TIME_MS = 500; +constexpr int MAX_WAIT_ITER = MAX_WAIT_MS / POLL_TIME_MS; + +constexpr char SCRAPER_RESOURCES_DIR[] = "scrapers"; +constexpr char DEVELOPERS_JSON_FILE[] = "gamesdb_developers.json"; +constexpr char PUBLISHERS_JSON_FILE[] = "gamesdb_publishers.json"; +constexpr char GENRES_JSON_FILE[] = "gamesdb_genres.json"; +constexpr char DEVELOPERS_ENDPOINT[] = "/Developers"; +constexpr char PUBLISHERS_ENDPOINT[] = "/Publishers"; +constexpr char GENRES_ENDPOINT[] = "/Genres"; + +std::string genFilePath(const std::string& file_name) +{ + return Utils::FileSystem::getGenericPath(getScrapersResouceDir() + "/" + file_name); +} + +void ensureScrapersResourcesDir() +{ + std::string path = getScrapersResouceDir(); + if (!Utils::FileSystem::exists(path)) + Utils::FileSystem::createDirectory(path); +} + +} // namespace + + +std::string getScrapersResouceDir() +{ + return Utils::FileSystem::getGenericPath( + Utils::FileSystem::getHomePath() + "/.emulationstation/" + SCRAPER_RESOURCES_DIR); +} + +std::string TheGamesDBJSONRequestResources::getApiKey() const { return GamesDBAPIKey; } + + +void TheGamesDBJSONRequestResources::prepare() +{ + if (checkLoaded()) + { + return; + } + + if (loadResource(gamesdb_new_developers_map, "developers", genFilePath(DEVELOPERS_JSON_FILE)) && + !gamesdb_developers_resource_request) + { + gamesdb_developers_resource_request = fetchResource(DEVELOPERS_ENDPOINT); + } + if (loadResource(gamesdb_new_publishers_map, "publishers", genFilePath(PUBLISHERS_JSON_FILE)) && + !gamesdb_publishers_resource_request) + { + gamesdb_publishers_resource_request = fetchResource(PUBLISHERS_ENDPOINT); + } + if (loadResource(gamesdb_new_genres_map, "genres", genFilePath(GENRES_JSON_FILE)) && !gamesdb_genres_resource_request) + { + gamesdb_genres_resource_request = fetchResource(GENRES_ENDPOINT); + } +} + +void TheGamesDBJSONRequestResources::ensureResources() +{ + + if (checkLoaded()) + { + return; + } + + + for (int i = 0; i < MAX_WAIT_ITER; ++i) + { + if (gamesdb_developers_resource_request && + saveResource(gamesdb_developers_resource_request.get(), gamesdb_new_developers_map, "developers", + genFilePath(DEVELOPERS_JSON_FILE))) + { + + gamesdb_developers_resource_request.reset(nullptr); + } + if (gamesdb_publishers_resource_request && + saveResource(gamesdb_publishers_resource_request.get(), gamesdb_new_publishers_map, "publishers", + genFilePath(PUBLISHERS_JSON_FILE))) + { + gamesdb_publishers_resource_request.reset(nullptr); + } + if (gamesdb_genres_resource_request && saveResource(gamesdb_genres_resource_request.get(), gamesdb_new_genres_map, + "genres", genFilePath(GENRES_JSON_FILE))) + { + gamesdb_genres_resource_request.reset(nullptr); + } + + if (!gamesdb_developers_resource_request && !gamesdb_publishers_resource_request && !gamesdb_genres_resource_request) + { + return; + } + std::this_thread::sleep_for(std::chrono::milliseconds(POLL_TIME_MS)); + } + LOG(LogError) << "Timed out while waiting for resources\n"; +} + +bool TheGamesDBJSONRequestResources::checkLoaded() +{ + return !gamesdb_new_genres_map.empty() && !gamesdb_new_developers_map.empty() && !gamesdb_new_publishers_map.empty(); +} + +bool TheGamesDBJSONRequestResources::saveResource(HttpReq* req, std::unordered_map& resource, + const std::string& resource_name, const std::string& file_name) +{ + + if (req == nullptr) + { + LOG(LogError) << "Http request pointer was null\n"; + return true; + } + if (req->status() == HttpReq::REQ_IN_PROGRESS) + { + return false; // Not ready: wait some more + } + if (req->status() != HttpReq::REQ_SUCCESS) + { + LOG(LogError) << "Resource request for " << file_name << " failed:\n\t" << req->getErrorMsg(); + return true; // Request failed, resetting request. + } + + ensureScrapersResourcesDir(); + + std::ofstream fout(file_name); + fout << req->getContent(); + fout.close(); + loadResource(resource, resource_name, file_name); + return true; +} + +std::unique_ptr TheGamesDBJSONRequestResources::fetchResource(const std::string& endpoint) +{ + std::string path = "https://api.thegamesdb.net"; + path += endpoint; + path += "?apikey=" + getApiKey(); + + return std::unique_ptr(new HttpReq(path)); +} + + +int TheGamesDBJSONRequestResources::loadResource( + std::unordered_map& resource, const std::string& resource_name, const std::string& file_name) +{ + + + std::ifstream fin(file_name); + if (!fin.good()) + { + return 1; + } + std::stringstream buffer; + buffer << fin.rdbuf(); + Document doc; + doc.Parse(buffer.str().c_str()); + + if (doc.HasParseError()) + { + std::string err = std::string("TheGamesDBJSONRequest - Error parsing JSON for resource file ") + file_name + + ":\n\t" + GetParseError_En(doc.GetParseError()); + LOG(LogError) << err; + return 1; + } + + if (!doc.HasMember("data") || !doc["data"].HasMember(resource_name.c_str()) || + !doc["data"][resource_name.c_str()].IsObject()) + { + std::string err = "TheGamesDBJSONRequest - Response had no resource data.\n"; + LOG(LogError) << err; + return 1; + } + auto& data = doc["data"][resource_name.c_str()]; + + for (Value::ConstMemberIterator itr = data.MemberBegin(); itr != data.MemberEnd(); ++itr) + { + auto& entry = itr->value; + if (!entry.IsObject() || !entry.HasMember("id") || !entry["id"].IsInt() || !entry.HasMember("name") || + !entry["name"].IsString()) + { + continue; + } + resource[entry["id"].GetInt()] = entry["name"].GetString(); + } + return resource.empty(); +} diff --git a/es-app/src/scrapers/GamesDBJSONScraperResources.h b/es-app/src/scrapers/GamesDBJSONScraperResources.h new file mode 100644 index 0000000000..4cbbcc5872 --- /dev/null +++ b/es-app/src/scrapers/GamesDBJSONScraperResources.h @@ -0,0 +1,42 @@ +#pragma once +#ifndef ES_APP_SCRAPERS_GAMES_DB_JSON_SCRAPER_RESOURCES_H +#define ES_APP_SCRAPERS_GAMES_DB_JSON_SCRAPER_RESOURCES_H + +#include +#include +#include +#include + +#include "HttpReq.h" + + +struct TheGamesDBJSONRequestResources +{ + TheGamesDBJSONRequestResources() = default; + + void prepare(); + void ensureResources(); + std::string getApiKey() const; + + std::unordered_map gamesdb_new_developers_map; + std::unordered_map gamesdb_new_publishers_map; + std::unordered_map gamesdb_new_genres_map; + + private: + bool checkLoaded(); + + bool saveResource(HttpReq* req, std::unordered_map& resource, const std::string& resource_name, + const std::string& file_name); + std::unique_ptr fetchResource(const std::string& endpoint); + + int loadResource( + std::unordered_map& resource, const std::string& resource_name, const std::string& file_name); + + std::unique_ptr gamesdb_developers_resource_request; + std::unique_ptr gamesdb_publishers_resource_request; + std::unique_ptr gamesdb_genres_resource_request; +}; + +std::string getScrapersResouceDir(); + +#endif // ES_APP_SCRAPERS_GAMES_DB_JSON_SCRAPER_H diff --git a/es-app/src/scrapers/GamesDBScraper.cpp b/es-app/src/scrapers/GamesDBScraper.cpp deleted file mode 100644 index 157b181ee6..0000000000 --- a/es-app/src/scrapers/GamesDBScraper.cpp +++ /dev/null @@ -1,211 +0,0 @@ -#include "scrapers/GamesDBScraper.h" - -#include "utils/TimeUtil.h" -#include "FileData.h" -#include "Log.h" -#include "PlatformId.h" -#include "Settings.h" -#include "SystemData.h" -#include - -using namespace PlatformIds; -const std::map gamesdb_platformid_map { - { THREEDO, "3DO" }, - { AMIGA, "Amiga" }, - { AMSTRAD_CPC, "Amstrad CPC" }, - // missing apple2 - { ARCADE, "Arcade" }, - // missing atari 800 - { ATARI_2600, "Atari 2600" }, - { ATARI_5200, "Atari 5200" }, - { ATARI_7800, "Atari 7800" }, - { ATARI_JAGUAR, "Atari Jaguar" }, - { ATARI_JAGUAR_CD, "Atari Jaguar CD" }, - { ATARI_LYNX, "Atari Lynx" }, - // missing atari ST/STE/Falcon - { ATARI_XE, "Atari XE" }, - { COLECOVISION, "Colecovision" }, - { COMMODORE_64, "Commodore 64" }, - { INTELLIVISION, "Intellivision" }, - { MAC_OS, "Mac OS" }, - { XBOX, "Microsoft Xbox" }, - { XBOX_360, "Microsoft Xbox 360" }, - { MSX, "MSX" }, - { NEOGEO, "Neo Geo" }, - { NEOGEO_POCKET, "Neo Geo Pocket" }, - { NEOGEO_POCKET_COLOR, "Neo Geo Pocket Color" }, - { NINTENDO_3DS, "Nintendo 3DS" }, - { NINTENDO_64, "Nintendo 64" }, - { NINTENDO_DS, "Nintendo DS" }, - { FAMICOM_DISK_SYSTEM, "Famicom Disk System" }, - { NINTENDO_ENTERTAINMENT_SYSTEM, "Nintendo Entertainment System (NES)" }, - { GAME_BOY, "Nintendo Game Boy" }, - { GAME_BOY_ADVANCE, "Nintendo Game Boy Advance" }, - { GAME_BOY_COLOR, "Nintendo Game Boy Color" }, - { NINTENDO_GAMECUBE, "Nintendo GameCube" }, - { NINTENDO_WII, "Nintendo Wii" }, - { NINTENDO_WII_U, "Nintendo Wii U" }, - { NINTENDO_VIRTUAL_BOY, "Nintendo Virtual Boy" }, - { NINTENDO_GAME_AND_WATCH, "Game & Watch" }, - { PC, "PC" }, - { SEGA_32X, "Sega 32X" }, - { SEGA_CD, "Sega CD" }, - { SEGA_DREAMCAST, "Sega Dreamcast" }, - { SEGA_GAME_GEAR, "Sega Game Gear" }, - { SEGA_GENESIS, "Sega Genesis" }, - { SEGA_MASTER_SYSTEM, "Sega Master System" }, - { SEGA_MEGA_DRIVE, "Sega Mega Drive" }, - { SEGA_SATURN, "Sega Saturn" }, - { SEGA_SG1000, "SEGA SG-1000" }, - { PLAYSTATION, "Sony Playstation" }, - { PLAYSTATION_2, "Sony Playstation 2" }, - { PLAYSTATION_3, "Sony Playstation 3" }, - { PLAYSTATION_4, "Sony Playstation 4" }, - { PLAYSTATION_VITA, "Sony Playstation Vita" }, - { PLAYSTATION_PORTABLE, "Sony Playstation Portable" }, - { SUPER_NINTENDO, "Super Nintendo (SNES)" }, - { TURBOGRAFX_16, "TurboGrafx 16" }, // HuCards only - { TURBOGRAFX_CD, "TurboGrafx CD" }, // CD-ROMs only - { WONDERSWAN, "WonderSwan" }, - { WONDERSWAN_COLOR, "WonderSwan Color" }, - { ZX_SPECTRUM, "Sinclair ZX Spectrum" }, - { VIDEOPAC_ODYSSEY2, "Magnavox Odyssey 2" }, - { VECTREX, "Vectrex" }, - { TRS80_COLOR_COMPUTER, "TRS-80 Color Computer" }, - { TANDY, "TRS-80 Color Computer" } -}; - -void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, - std::vector& results) -{ - std::string path; - bool usingGameID = false; - - std::string cleanName = params.nameOverride; - if (!cleanName.empty() && cleanName.substr(0,3) == "id:") - { - std::string gameID = cleanName.substr(3); - path = "legacy.thegamesdb.net/api/GetGame.php?id=" + HttpReq::urlEncode(gameID); - usingGameID = true; - }else{ - if (cleanName.empty()) - cleanName = params.game->getCleanName(); - path += "legacy.thegamesdb.net/api/GetGamesList.php?name=" + HttpReq::urlEncode(cleanName); - } - - if(usingGameID) - { - // if we have the ID already, we don't need the GetGameList request - requests.push(std::unique_ptr(new TheGamesDBRequest(results, path))); - }else if(params.system->getPlatformIds().empty()){ - // no platform specified, we're done - requests.push(std::unique_ptr(new TheGamesDBRequest(requests, results, path))); - }else{ - // go through the list, we need to split this into multiple requests - // because TheGamesDB API either sucks or I don't know how to use it properly... - std::string urlBase = path; - auto& platforms = params.system->getPlatformIds(); - for(auto platformIt = platforms.cbegin(); platformIt != platforms.cend(); platformIt++) - { - path = urlBase; - auto mapIt = gamesdb_platformid_map.find(*platformIt); - if(mapIt != gamesdb_platformid_map.cend()) - { - path += "&platform="; - path += HttpReq::urlEncode(mapIt->second); - }else{ - LOG(LogWarning) << "TheGamesDB scraper warning - no support for platform " << getPlatformName(*platformIt); - } - - requests.push(std::unique_ptr(new TheGamesDBRequest(requests, results, path))); - } - } -} - -void TheGamesDBRequest::process(const std::unique_ptr& req, std::vector& results) -{ - assert(req->status() == HttpReq::REQ_SUCCESS); - - pugi::xml_document doc; - pugi::xml_parse_result parseResult = doc.load(req->getContent().c_str()); - if(!parseResult) - { - std::stringstream ss; - ss << "TheGamesDBRequest - Error parsing XML. \n\t" << parseResult.description() << ""; - std::string err = ss.str(); - setError(err); - LOG(LogError) << err; - return; - } - - if (isGameRequest()) - processGame(doc, results); - else - processList(doc, results); -} - -void TheGamesDBRequest::processGame(const pugi::xml_document& xmldoc, std::vector& results) -{ - pugi::xml_node data = xmldoc.child("Data"); - - std::string baseImageUrl = data.child("baseImgUrl").text().get(); - - pugi::xml_node game = data.child("Game"); - if(game) - { - ScraperSearchResult result; - - result.mdl.set("name", game.child("GameTitle").text().get()); - result.mdl.set("desc", game.child("Overview").text().get()); - result.mdl.set("releasedate", Utils::Time::DateTime(Utils::Time::stringToTime(game.child("ReleaseDate").text().get(), "%m/%d/%Y"))); - result.mdl.set("developer", game.child("Developer").text().get()); - result.mdl.set("publisher", game.child("Publisher").text().get()); - result.mdl.set("genre", game.child("Genres").first_child().text().get()); - result.mdl.set("players", game.child("Players").text().get()); - - if(Settings::getInstance()->getBool("ScrapeRatings") && game.child("Rating")) - { - float ratingVal = (game.child("Rating").text().as_int() / 10.0f); - std::stringstream ss; - ss << ratingVal; - result.mdl.set("rating", ss.str()); - } - - pugi::xml_node images = game.child("Images"); - - if(images) - { - pugi::xml_node art = images.find_child_by_attribute("boxart", "side", "front"); - - if(art) - { - result.thumbnailUrl = baseImageUrl + art.attribute("thumb").as_string(); - result.imageUrl = baseImageUrl + art.text().get(); - } - } - - results.push_back(result); - } -} - -void TheGamesDBRequest::processList(const pugi::xml_document& xmldoc, std::vector& results) -{ - assert(mRequestQueue != nullptr); - - pugi::xml_node data = xmldoc.child("Data"); - pugi::xml_node game = data.child("Game"); - - // limit the number of results per platform, not in total. - // otherwise if the first platform returns >= 7 games - // but the second platform contains the relevant game, - // the relevant result would not be shown. - for(int i = 0; game && i < MAX_SCRAPER_RESULTS; i++) - { - std::string id = game.child("id").text().get(); - std::string path = "legacy.thegamesdb.net/api/GetGame.php?id=" + id; - - mRequestQueue->push(std::unique_ptr(new TheGamesDBRequest(results, path))); - - game = game.next_sibling("Game"); - } -} diff --git a/es-app/src/scrapers/GamesDBScraper.h b/es-app/src/scrapers/GamesDBScraper.h deleted file mode 100644 index 092366bd1d..0000000000 --- a/es-app/src/scrapers/GamesDBScraper.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once -#ifndef ES_APP_SCRAPERS_GAMES_DB_SCRAPER_H -#define ES_APP_SCRAPERS_GAMES_DB_SCRAPER_H - -#include "scrapers/Scraper.h" - -namespace pugi { class xml_document; } - -void thegamesdb_generate_scraper_requests(const ScraperSearchParams& params, std::queue< std::unique_ptr >& requests, - std::vector& results); - -class TheGamesDBRequest : public ScraperHttpRequest -{ -public: - // ctor for a GetGameList request - TheGamesDBRequest(std::queue< std::unique_ptr >& requestsWrite, std::vector& resultsWrite, const std::string& url) : ScraperHttpRequest(resultsWrite, url), mRequestQueue(&requestsWrite) {} - // ctor for a GetGame request - TheGamesDBRequest(std::vector& resultsWrite, const std::string& url) : ScraperHttpRequest(resultsWrite, url), mRequestQueue(nullptr) {} - -protected: - void process(const std::unique_ptr& req, std::vector& results) override; - void processList(const pugi::xml_document& xmldoc, std::vector& results); - void processGame(const pugi::xml_document& xmldoc, std::vector& results); - bool isGameRequest() { return !mRequestQueue; } - - std::queue< std::unique_ptr >* mRequestQueue; -}; - -#endif // ES_APP_SCRAPERS_GAMES_DB_SCRAPER_H diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index eead8a8124..76d3fc9634 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -1,7 +1,7 @@ #include "scrapers/Scraper.h" #include "FileData.h" -#include "GamesDBScraper.h" +#include "GamesDBJSONScraper.h" #include "ScreenScraper.h" #include "Log.h" #include "Settings.h" @@ -10,7 +10,7 @@ #include const std::map scraper_request_funcs { -// { "TheGamesDB", &thegamesdb_generate_scraper_requests }, + { "TheGamesDB", &thegamesdb_generate_json_scraper_requests }, { "ScreenScraper", &screenscraper_generate_scraper_requests } }; From 9ae899360c11fdd88f671713ddb965227b99e79f Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Fri, 8 Feb 2019 20:50:23 +0000 Subject: [PATCH 340/603] cosmetic - indent --- es-app/src/views/ViewController.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 38fe2dff65..8e543802f8 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -433,12 +433,12 @@ void ViewController::preload() for(auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++) { if(Settings::getInstance()->getBool("SplashScreen") && - Settings::getInstance()->getBool("SplashScreenProgress")) + Settings::getInstance()->getBool("SplashScreenProgress")) { i++; char buffer[100]; sprintf (buffer, "Loading '%s' (%d/%d)", - (*it)->getFullName().c_str(), i, SystemData::sSystemVector.size()); + (*it)->getFullName().c_str(), i, SystemData::sSystemVector.size()); mWindow->renderLoadingScreen(std::string(buffer)); } From 9af271d36f119717dfa2eca41a22509cc237682c Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Fri, 8 Feb 2019 21:35:50 +0000 Subject: [PATCH 341/603] add setting for searching for local game art - defaults to off --- es-app/src/FileData.cpp | 6 +++--- es-app/src/guis/GuiMenu.cpp | 5 +++++ es-core/src/Settings.cpp | 2 ++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index c9c5330b8d..1e07503a55 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -54,7 +54,7 @@ const std::string FileData::getThumbnailPath() const std::string thumbnail = metadata.get("thumbnail"); // no thumbnail, try image - if(thumbnail.empty()) + if(thumbnail.empty() && Settings::getInstance()->getBool("LocalArt")) { thumbnail = metadata.get("image"); @@ -115,7 +115,7 @@ const std::string FileData::getVideoPath() const std::string video = metadata.get("video"); // no video, try to use local video - if(video.empty()) + if(video.empty() && Settings::getInstance()->getBool("LocalArt")) { std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-video.mp4"; if(Utils::FileSystem::exists(path)) @@ -130,7 +130,7 @@ const std::string FileData::getMarqueePath() const std::string marquee = metadata.get("marquee"); // no marquee, try to use local marquee - if(marquee.empty()) + if(marquee.empty() && Settings::getInstance()->getBool("LocalArt")) { const char* extList[2] = { ".png", ".jpg" }; for(int i = 0; i < 2; i++) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 2fd4c5f0ed..534b4c4378 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -407,6 +407,11 @@ void GuiMenu::openOtherSettings() s->addWithLabel("PARSE GAMESLISTS ONLY", parse_gamelists); s->addSaveFunc([parse_gamelists] { Settings::getInstance()->setBool("ParseGamelistOnly", parse_gamelists->getState()); }); + auto local_art = std::make_shared(mWindow); + local_art->setState(Settings::getInstance()->getBool("LocalArt")); + s->addWithLabel("SEARCH FOR LOCAL ART", local_art); + s->addSaveFunc([local_art] { Settings::getInstance()->setBool("LocalArt", local_art->getState()); }); + // hidden files auto hidden_files = std::make_shared(mWindow); hidden_files->setState(Settings::getInstance()->getBool("ShowHiddenFiles")); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 6e808d127a..1a38ae5d2f 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -129,6 +129,8 @@ void Settings::setDefaults() mBoolMap["SortAllSystems"] = false; mBoolMap["UseCustomCollectionsSystem"] = true; + mBoolMap["LocalArt"] = false; + // Audio out device for volume control #ifdef _RPI_ mStringMap["AudioDevice"] = "PCM"; From 2fb5881fb66ca148b42693d1c0b0f6c71e04b530 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 9 Feb 2019 19:48:17 +0000 Subject: [PATCH 342/603] bump version to 2.9.0 (-dev) --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 8bb4fa44a2..2bd27925bc 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -5,13 +5,13 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 8 +#define PROGRAM_VERSION_MINOR 9 #define PROGRAM_VERSION_MAINTENANCE 0 -#define PROGRAM_VERSION_STRING "2.8.0rp-dev" +#define PROGRAM_VERSION_STRING "2.9.0rp-dev" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,8,0\0" +#define RESOURCE_VERSION_STRING "2,9,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE #endif // ES_APP_EMULATION_STATION_H From 1ee09bcca8b639d877586ddd03a9ef9420b3a10e Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Sun, 10 Feb 2019 12:47:53 +0200 Subject: [PATCH 343/603] Fix ScreenScraper search by filename --- es-app/src/scrapers/ScreenScraper.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index f4e8130da7..b84cabc709 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -125,11 +125,7 @@ void screenscraper_generate_scraper_requests(const ScraperSearchParams& params, ScreenScraperRequest::ScreenScraperConfig ssConfig; - std::string cleanName = params.nameOverride; - if (cleanName.empty()) - cleanName = params.game->getCleanName(); - - path = ssConfig.getGameSearchUrl(cleanName); + path = ssConfig.getGameSearchUrl(params.game->getFileName()); auto& platforms = params.system->getPlatformIds(); for (auto platformIt = platforms.cbegin(); platformIt != platforms.cend(); platformIt++) From 70bbcb0b1ec9d58cedbb952876e7fe0f333802af Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Tue, 12 Feb 2019 09:11:50 +0200 Subject: [PATCH 344/603] Fix getThumbnailPath ignoring the 'image' tag when 'LocalArt' is not set --- es-app/src/FileData.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 1e07503a55..bcec7a3b32 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -54,12 +54,12 @@ const std::string FileData::getThumbnailPath() const std::string thumbnail = metadata.get("thumbnail"); // no thumbnail, try image - if(thumbnail.empty() && Settings::getInstance()->getBool("LocalArt")) + if(thumbnail.empty()) { thumbnail = metadata.get("image"); // no image, try to use local image - if(thumbnail.empty()) + if(thumbnail.empty() && Settings::getInstance()->getBool("LocalArt")) { const char* extList[2] = { ".png", ".jpg" }; for(int i = 0; i < 2; i++) From 9d2f3de8a68dbd9edcdea7ed04ecac5973c56d5c Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Thu, 14 Feb 2019 09:41:26 +0200 Subject: [PATCH 345/603] Minor documentation formatting and updates --- GAMELISTS.md | 9 ++++++--- README.md | 41 +++++++++++++++++++++++------------------ 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/GAMELISTS.md b/GAMELISTS.md index 5c0ae17366..7064a27ca3 100644 --- a/GAMELISTS.md +++ b/GAMELISTS.md @@ -32,6 +32,7 @@ There are a few types of metadata: * `string` - just text. * `image_path` - a path to an image. This path should be either the absolute to the image, a path relative to the system games folder that starts with "./" (e.g. `./mm2_image.png`), or a path relative to the home directory that starts with "~/" (e.g. `~/.emulationstation/downloaded_images/nes/mm2-image.png`). Images will be automatically resized by OpenGL to fit the corresponding `` tag in the current theme. Smaller images will load faster, so try to keep resolution low! +* `video_path` - a path to a video. Similar to `image_path`. * `float` - a floating-point decimal value (written as a string). * `integer` - an integer value (written as a string). * `datetime` - a date and, potentially, a time. These are encoded as an ISO string, in the following format: "%Y%m%dT%H%M%S%F%q". For example, the release date for Chrono Trigger is encoded as "19950311T000000" (no time specified). @@ -43,22 +44,24 @@ Some metadata is also marked as "statistic" - these are kept track of by ES and * `name` - string, the displayed name for the game. * `desc` - string, a description of the game. Longer descriptions will automatically scroll, so don't worry about size. * `image` - image_path, the path to an image to display for the game (like box art or a screenshot). -* `thumbnail` - image_path, the path to a smaller image, displayed in image lists like the grid view. Should be small to ensure quick loading. *Currently not used.* +* `thumbnail` - image_path, the path to a smaller image, displayed in image lists like the grid view. Should be small to ensure quick loading. +* `video` - video_path, the path to a video to display for the game, for themes that support the _video_ viewstyle. * `rating` - float, the rating for the game, expressed as a floating point number between 0 and 1. Arbitrary values are fine (ES can display half-stars, quarter-stars, etc). * `releasedate` - datetime, the date the game was released. Displayed as date only, time is ignored. * `developer` - string, the developer for the game. * `publisher` - string, the publisher for the game. * `genre` - string, the (primary) genre for the game. * `players` - integer, the number of players the game supports. -* `playcount` - statistic, integer, the number of times this game has been played +* `playcount` - statistic, integer, the number of times this game has been played. * `lastplayed` - statistic, datetime, the last date and time this game was played. +* `sortname` - string, used in sorting the gamelist in a system, instead of `name`. #### `` * `name` - string, the displayed name for the folder. * `desc` - string, the description for the folder. * `image` - image_path, the path to an image to display for the folder. -* `thumbnail` - image_path, the path to a smaller image to display for the folder. *Currently not used.* +* `thumbnail` - image_path, the path to a smaller image to display for the folder. Things to be Aware Of diff --git a/README.md b/README.md index 96c5c6782d..49ff0c5338 100644 --- a/README.md +++ b/README.md @@ -9,21 +9,21 @@ Building EmulationStation uses some C++11 code, which means you'll need to use at least g++-4.7 on Linux, or VS2010 on Windows, to compile. -EmulationStation has a few dependencies. For building, you'll need CMake, SDL2, FreeImage, FreeType, and cURL. You also should probably install the `fonts-droid` package which contains fallback fonts for Chinese/Japanese/Korean characters, but ES will still work fine without it (this package is only used at run-time). +EmulationStation has a few dependencies. For building, you'll need CMake, SDL2, FreeImage, FreeType, cURL and RapidJSON. You also should probably install the `fonts-droid` package which contains fallback fonts for Chinese/Japanese/Korean characters, but ES will still work fine without it (this package is only used at run-time). **On Debian/Ubuntu:** -All of this be easily installed with apt-get: +All of this be easily installed with `apt-get`: ```bash -sudo apt-get install libsdl2-dev libfreeimage-dev libfreetype6-dev libcurl4-openssl-dev \ +sudo apt-get install libsdl2-dev libfreeimage-dev libfreetype6-dev libcurl4-openssl-dev rapidjson-dev \ libasound2-dev libgl1-mesa-dev build-essential cmake fonts-droid-fallback libvlc-dev \ libvlccore-dev vlc-bin ``` **On Fedora:** -All of this be easily installed with dnf ( With rpmfusion activated) : +All of this be easily installed with `dnf` (with rpmfusion activated) : ```bash sudo dnf install SDL2-devel freeimage-devel freetype-devel curl-devel \ alsa-lib-devel mesa-libGL-devel cmake \ - vlc-devel + vlc-devel rapidjson-devel ``` Note this Repository uses a git submodule - to checkout the source and all submodules, use @@ -57,10 +57,12 @@ Complete Raspberry Pi build instructions at [emulationstation.org](http://emulat [FreeType2](http://download.savannah.gnu.org/releases/freetype/freetype-2.4.9.tar.bz2) (you'll need to compile) -[SDL2](http://www.libsdl.org/release/SDL2-devel-2.0.3-VC.zip) +[SDL2](http://www.libsdl.org/release/SDL2-devel-2.0.8-VC.zip) [cURL](http://curl.haxx.se/download.html) (you'll need to compile or get the pre-compiled DLL version) +[RapisJSON](https://github.com/tencent/rapidjson) (you'll need the `include/rapidsjon` added to the include path) + (Remember to copy necessary .DLLs into the same folder as the executable: probably FreeImage.dll, freetype6.dll, SDL2.dll, libcurl.dll, and zlib1.dll. Exact list depends on if you built your libraries in "static" mode or not.) [CMake](http://www.cmake.org/cmake/resources/software.html) (this is used for generating the Visual Studio project) @@ -96,18 +98,21 @@ The new configuration will be added to the `~/.emulationstation/es_input.cfg` fi You can use `--help` or `-h` to view a list of command-line options. Briefly outlined here: ``` ---resolution [width] [height] - try and force a particular resolution ---gamelist-only - only display games defined in a gamelist.xml file. ---ignore-gamelist - do not parse any gamelist.xml files. ---draw-framerate - draw the framerate. ---no-exit - do not display 'exit' in the ES menu. ---debug - show the console window on Windows, do slightly more logging ---windowed - run ES in a window, works best in conjunction with --resolution [w] [h]. ---vsync [1/on or 0/off] - turn vsync on or off (default is on). ---scrape - run the interactive command-line metadata scraper. ---no-splash - don't show the splash screen. ---max-vram [size] - Max VRAM to use in Mb before swapping. 0 for unlimited. ---force-kiosk - Force the UI mode to be Kiosk. +--resolution [width] [height] try and force a particular resolution +--gamelist-only skip automatic game search, only read from gamelist.xml +--ignore-gamelist ignore the gamelist (useful for troubleshooting) +--draw-framerate display the framerate +--no-exit don't show the exit option in the menu +--no-splash don't show the splash screen +--debug more logging, show console on Windows +--scrape scrape using command line interface +--windowed not fullscreen, should be used with --resolution +--vsync [1/on or 0/off] turn vsync on or off (default is on) +--max-vram [size] Max VRAM to use in Mb before swapping. 0 for unlimited +--force-kid Force the UI mode to be Kid +--force-kiosk Force the UI mode to be Kiosk +--force-disable-filters Force the UI to ignore applied filters in gamelist +--help, -h summon a sentient, angry tuba ``` As long as ES hasn't frozen, you can always press F4 to close the application. From 718eae91fb9f345561e3465735cae208775fecc0 Mon Sep 17 00:00:00 2001 From: Spongman Date: Sat, 16 Feb 2019 18:07:26 -0800 Subject: [PATCH 346/603] Update GamesDBJSONScraper.cpp prevent `IsObject` assertion failure during `HasMember` call. --- es-app/src/scrapers/GamesDBJSONScraper.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index a40ee2ecab..8935c38336 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -322,12 +322,16 @@ void processGame(const Value& game, const Value& boxart, std::vector Date: Sun, 17 Feb 2019 21:13:10 +0100 Subject: [PATCH 347/603] Fixed rounding. --- es-app/src/VolumeControl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index cfa9f6c47e..862f1eaf55 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -273,7 +273,7 @@ int VolumeControl::getVolume() const rawVolume -= minVolume; if (rawVolume > 0) { - volume = (rawVolume * 100) / (maxVolume - minVolume); + volume = (rawVolume * 100.0) / (maxVolume - minVolume) + 0.5; } //else volume = 0; } From 55e4c47e4b71220d89925d2bbcb5e08a4a5822cd Mon Sep 17 00:00:00 2001 From: pjft Date: Wed, 20 Feb 2019 07:33:00 +0000 Subject: [PATCH 348/603] Change handling of screensaver to FileData only and respect UI Mode --- es-app/src/SystemScreenSaver.cpp | 122 ++++++++++--------------------- es-app/src/SystemScreenSaver.h | 1 + es-core/src/Window.cpp | 1 + es-core/src/Window.h | 3 +- 4 files changed, 41 insertions(+), 86 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 3fde901090..1837b94aa1 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -14,10 +14,8 @@ #include "Renderer.h" #include "Sound.h" #include "SystemData.h" -#include #include #include - #define FADE_TIME 300 SystemScreenSaver::SystemScreenSaver(Window* window) : @@ -262,27 +260,21 @@ unsigned long SystemScreenSaver::countGameListNodes(const char *nodeName) std::vector::const_iterator it; for (it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); ++it) { - // We only want images and videos from game systems that are not collections - if (!(*it)->isCollection() && (*it)->isGameSystem()) - { - pugi::xml_document doc; - pugi::xml_node root; - std::string xmlReadPath = (*it)->getGamelistPath(false); + // We only want nodes from game systems that are not collections + if (!(*it)->isGameSystem() || (*it)->isCollection()) + continue; + + FileData* rootFileData = (*it)->getRootFolder(); - if(Utils::FileSystem::exists(xmlReadPath)) + FileType type = GAME; + std::vector allFiles = rootFileData->getFilesRecursive(type, true); + std::vector::const_iterator itf; // declare an iterator to a vector of strings + + for(itf=allFiles.cbegin() ; itf < allFiles.cend(); itf++) { + if ((strcmp(nodeName, "video") == 0 && (*itf)->getVideoPath() != "") || + (strcmp(nodeName, "image") == 0 && (*itf)->getImagePath() != "")) { - pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); - if (!result) - continue; - root = doc.child("gameList"); - if (!root) - continue; - for(pugi::xml_node fileNode = root.child("game"); fileNode; fileNode = fileNode.next_sibling("game")) - { - pugi::xml_node node = fileNode.child(nodeName); - if (node) - ++nodeCount; - } + nodeCount++; } } } @@ -312,77 +304,37 @@ void SystemScreenSaver::pickGameListNode(unsigned long index, const char *nodeNa std::vector::const_iterator it; for (it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); ++it) { - pugi::xml_document doc; - pugi::xml_node root; - // We only want nodes from game systems that are not collections if (!(*it)->isGameSystem() || (*it)->isCollection()) continue; - std::string xmlReadPath = (*it)->getGamelistPath(false); + FileData* rootFileData = (*it)->getRootFolder(); - if(Utils::FileSystem::exists(xmlReadPath)) - { - pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); - if (!result) - continue; - root = doc.child("gameList"); - if (!root) - continue; - for(pugi::xml_node fileNode = root.child("game"); fileNode; fileNode = fileNode.next_sibling("game")) + FileType type = GAME; + std::vector allFiles = rootFileData->getFilesRecursive(type, true); + std::vector::const_iterator itf; // declare an iterator to a vector of strings + + for(itf=allFiles.cbegin() ; itf < allFiles.cend(); itf++) { + if ((strcmp(nodeName, "video") == 0 && (*itf)->getVideoPath() != "") || + (strcmp(nodeName, "image") == 0 && (*itf)->getImagePath() != "")) { - pugi::xml_node node = fileNode.child(nodeName); - if (node) + if (index-- == 0) { - // See if this is the desired index - if (index-- == 0) - { - // Yes. Resolve to a full path - path = Utils::FileSystem::resolveRelativePath(node.text().get(), (*it)->getStartPath(), true); - mSystemName = (*it)->getFullName(); - mGameName = fileNode.child("name").text().get(); - - // getting corresponding FileData - - // try the easy way. Should work for the majority of cases, unless in subfolders - FileData* rootFileData = (*it)->getRootFolder(); - std::string gamePath = Utils::FileSystem::resolveRelativePath(fileNode.child("path").text().get(), (*it)->getStartPath(), false); - - std::string shortPath = gamePath; - shortPath = shortPath.replace(0, (*it)->getStartPath().length()+1, ""); - - const std::unordered_map& children = rootFileData->getChildrenByFilename(); - std::unordered_map::const_iterator screenSaverGame = children.find(shortPath); - - if (screenSaverGame != children.cend()) - { - // Found the corresponding FileData - mCurrentGame = screenSaverGame->second; - } - else - { - // Couldn't find FileData. Going for the full iteration. - // iterate on children - FileType type = GAME; - std::vector allFiles = rootFileData->getFilesRecursive(type); - std::vector::const_iterator itf; // declare an iterator to a vector of strings - - int i = 0; - for(itf=allFiles.cbegin() ; itf < allFiles.cend(); itf++,i++ ) { - if ((*itf)->getPath() == gamePath) - { - mCurrentGame = (*itf); - break; - } - } - } - - // end of getting FileData - if (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never") - writeSubtitle(mGameName.c_str(), mSystemName.c_str(), - (Settings::getInstance()->getString("ScreenSaverGameInfo") == "always")); - return; - } + // We have it + path = ""; + if (strcmp(nodeName, "video") == 0) + path = (*itf)->getVideoPath(); + else if (strcmp(nodeName, "image") == 0) + path = (*itf)->getImagePath(); + mSystemName = (*it)->getFullName(); + mGameName = (*itf)->getName(); + mCurrentGame = (*itf); + + // end of getting FileData + if (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never") + writeSubtitle(mGameName.c_str(), mSystemName.c_str(), + (Settings::getInstance()->getString("ScreenSaverGameInfo") == "always")); + return; } } } diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index e96a6b01ee..a26f4407e9 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -25,6 +25,7 @@ class SystemScreenSaver : public Window::ScreenSaver virtual FileData* getCurrentGame(); virtual void launchGame(); + inline virtual void resetCounts() { mVideosCounted = false; mImagesCounted = false; }; private: unsigned long countGameListNodes(const char *nodeName); diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index d7d0af7080..2716792a0a 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -432,6 +432,7 @@ void Window::startScreenSaver() { mScreenSaver->stopScreenSaver(); mRenderScreenSaver = false; + mScreenSaver->resetCounts(); // Tell the GUI components the screensaver has stopped for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 143a36cc2b..738dcda98a 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -32,6 +32,7 @@ class Window virtual bool isScreenSaverActive() = 0; virtual FileData* getCurrentGame() = 0; virtual void launchGame() = 0; + virtual void resetCounts() = 0; }; class InfoPopup { @@ -82,7 +83,7 @@ class Window // Returns true if at least one component on the stack is processing bool isProcessing(); - + HelpComponent* mHelp; ImageComponent* mBackgroundOverlay; ScreenSaver* mScreenSaver; From ce6dd76656562bdd22f2880491ae4ff6d763498a Mon Sep 17 00:00:00 2001 From: Markus Pointner Date: Sun, 3 Mar 2019 04:26:32 +0100 Subject: [PATCH 349/603] extend list of mame bios files to hide --- resources/mamebioses.xml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/resources/mamebioses.xml b/resources/mamebioses.xml index 0e1f6c6381..788df49b13 100644 --- a/resources/mamebioses.xml +++ b/resources/mamebioses.xml @@ -7,8 +7,12 @@ aristmk5 aristmk6 atarisy1 +atluspsx +atpsx awbios +bctvidbs bubsys +cd32 cdibios cedmag chihiro @@ -22,6 +26,8 @@ coh1002v coh3002c coh3002t +cpzn1 +cpzn2 crysbios cubo decocass @@ -42,6 +48,7 @@ kviper lindbios list.txt +mac2bios macsbios maxaflex megaplay @@ -53,6 +60,7 @@ nss pgm playch10 +psarc95 pyson sammymdl segasp @@ -64,8 +72,11 @@ sys246 sys256 sys573 +taitofx1 +taitogn taitotz tourvis +tps triforce v4bios - +vspsx From 108cd714ea311faaef85f2caf39d6394c527b646 Mon Sep 17 00:00:00 2001 From: pjft Date: Sun, 3 Mar 2019 19:13:10 +0000 Subject: [PATCH 350/603] Fix jagged font in games list --- es-app/src/components/TextListComponent.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 2873b18473..c90329883b 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -200,7 +200,7 @@ void TextListComponent::render(const Transform4x4f& parentTrans) offset[0] = mHorizontalMargin; break; case ALIGN_CENTER: - offset[0] = (mSize.x() - entry.data.textCache->metrics.size.x()) / 2; + offset[0] = (int)((mSize.x() - entry.data.textCache->metrics.size.x()) / 2); if(offset[0] < mHorizontalMargin) offset[0] = mHorizontalMargin; break; From 5cc6bafd7db7ccd8e3f5e82cb11940cfffab2b4d Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 9 Mar 2019 00:23:13 +0100 Subject: [PATCH 351/603] Silence warnings --- es-app/src/CollectionSystemManager.cpp | 2 +- es-app/src/scrapers/GamesDBJSONScraper.cpp | 10 +++++----- es-app/src/scrapers/ScreenScraper.cpp | 4 ++-- es-app/src/views/UIModeController.cpp | 2 +- es-app/src/views/ViewController.cpp | 2 +- es-app/src/views/gamelist/GridGameListView.cpp | 2 +- es-core/src/components/GridTileComponent.cpp | 2 +- es-core/src/components/ImageGridComponent.h | 10 +++++----- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index e40a894b50..cb5e2481da 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -292,7 +292,7 @@ void CollectionSystemManager::updateCollectionSystem(FileData* file, CollectionS void CollectionSystemManager::trimCollectionCount(FileData* rootFolder, int limit) { SystemData* curSys = rootFolder->getSystem(); - while (rootFolder->getChildren().size() > limit) + while ((int)rootFolder->getChildren().size() > limit) { CollectionFileData* gameToRemove = (CollectionFileData*)rootFolder->getChildrenListToDisplay().back(); ViewController::get()->getGameListView(curSys).get()->remove(gameToRemove, false); diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index 8935c38336..ad4ddbf606 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -199,7 +199,7 @@ std::string getBoxartImage(const Value& v) { return ""; } - for (int i = 0; i < v.Size(); ++i) + for (int i = 0; i < (int)v.Size(); ++i) { auto& im = v[i]; std::string type = getStringOrThrow(im, "type"); @@ -220,7 +220,7 @@ std::string getDeveloperString(const Value& v) } std::string out = ""; bool first = true; - for (int i = 0; i < v.Size(); ++i) + for (int i = 0; i < (int)v.Size(); ++i) { auto mapIt = resources.gamesdb_new_developers_map.find(getIntOrThrow(v[i])); if (mapIt == resources.gamesdb_new_developers_map.cend()) @@ -245,7 +245,7 @@ std::string getPublisherString(const Value& v) } std::string out = ""; bool first = true; - for (int i = 0; i < v.Size(); ++i) + for (int i = 0; i < (int)v.Size(); ++i) { auto mapIt = resources.gamesdb_new_publishers_map.find(getIntOrThrow(v[i])); if (mapIt == resources.gamesdb_new_publishers_map.cend()) @@ -270,7 +270,7 @@ std::string getGenreString(const Value& v) } std::string out = ""; bool first = true; - for (int i = 0; i < v.Size(); ++i) + for (int i = 0; i < (int)v.Size(); ++i) { auto mapIt = resources.gamesdb_new_genres_map.find(getIntOrThrow(v[i])); if (mapIt == resources.gamesdb_new_genres_map.cend()) @@ -381,7 +381,7 @@ void TheGamesDBJSONRequest::process(const std::unique_ptr& req, std::ve resources.ensureResources(); - for (int i = 0; i < games.Size(); ++i) + for (int i = 0; i < (int)games.Size(); ++i) { auto& v = games[i]; try diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index b84cabc709..e9eb53378b 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -169,7 +169,7 @@ void ScreenScraperRequest::process(const std::unique_ptr& req, std::vec } -void ScreenScraperRequest::processGame(const pugi::xml_document& xmldoc, std::vector& results) +void ScreenScraperRequest::processGame(const pugi::xml_document& xmldoc, std::vector& out_results) { pugi::xml_node data = xmldoc.child("Data"); pugi::xml_node game = data.child("jeu"); @@ -285,7 +285,7 @@ void ScreenScraperRequest::processGame(const pugi::xml_document& xmldoc, std::ve } - results.push_back(result); + out_results.push_back(result); } // game } diff --git a/es-app/src/views/UIModeController.cpp b/es-app/src/views/UIModeController.cpp index 6d1709ce1b..2efa944c98 100644 --- a/es-app/src/views/UIModeController.cpp +++ b/es-app/src/views/UIModeController.cpp @@ -52,7 +52,7 @@ bool UIModeController::listen(InputConfig * config, Input input) mPassKeyCounter = 0; // current input is incorrect, reset counter } - if (mPassKeyCounter == (mPassKeySequence.length())) + if (mPassKeyCounter == (int)mPassKeySequence.length()) { unlockUIMode(); return true; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 8e543802f8..ada681e260 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -438,7 +438,7 @@ void ViewController::preload() i++; char buffer[100]; sprintf (buffer, "Loading '%s' (%d/%d)", - (*it)->getFullName().c_str(), i, SystemData::sSystemVector.size()); + (*it)->getFullName().c_str(), i, (int)SystemData::sSystemVector.size()); mWindow->renderLoadingScreen(std::string(buffer)); } diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index efaaab6d82..91f9c08b0a 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -314,7 +314,7 @@ void GridGameListView::remove(FileData *game, bool deleteFile) int gamePos = (int)std::distance(siblings.cbegin(), gameIter); if (gameIter != siblings.cend()) { - if ((gamePos + 1) < siblings.size()) + if ((gamePos + 1) < (int)siblings.size()) { setCursor(siblings.at(gamePos + 1)); } else if ((gamePos - 1) > 0) { diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp index 7dbe2c028b..745fede1a3 100644 --- a/es-core/src/components/GridTileComponent.cpp +++ b/es-core/src/components/GridTileComponent.cpp @@ -56,7 +56,7 @@ void GridTileComponent::update() resize(); } -void GridTileComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) +void GridTileComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& /*element*/, unsigned int /*properties*/) { Vector2f screen = Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 21a2558a72..65b329adcb 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -338,7 +338,7 @@ void ImageGridComponent::updateTiles() // Stop updating the tiles at highest scroll speed if (mScrollTier == 3) { - for (int ti = 0; ti < mTiles.size(); ti++) + for (int ti = 0; ti < (int)mTiles.size(); ti++) { std::shared_ptr tile = mTiles.at(ti); @@ -354,12 +354,12 @@ void ImageGridComponent::updateTiles() // If going down, update from top to bottom // If going up, update from bottom to top - int ti = scrollDirection == 1 ? 0 : mTiles.size() - 1; - int end = scrollDirection == 1 ? mTiles.size() : -1; + int ti = scrollDirection == 1 ? 0 : (int)mTiles.size() - 1; + int end = scrollDirection == 1 ? (int)mTiles.size() : -1; int img = getStartPosition(); if (scrollDirection == -1) - img += mTiles.size() - 1; + img += (int)mTiles.size() - 1; // Calculate buffer size depending on scroll speed and direction int bufferBehind = (texBuffersForward[3] - texBuffersBehind[mScrollTier]) * mGridDimension.x(); @@ -387,7 +387,7 @@ void ImageGridComponent::updateTileAtPos(int tilePos, int imgPos, int bufferT // If we have more tiles than we have to display images on screen, hide them if(imgPos < 0 || imgPos >= size() - || tilePos < bufferTop || tilePos >= mTiles.size() - bufferBot) // Same for tiles out of the buffer + || tilePos < bufferTop || tilePos >= (int)mTiles.size() - bufferBot) // Same for tiles out of the buffer { tile->setSelected(false); tile->setImage(""); From 04108649293a6413a2ee02b2c7d336efc01c76cf Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 9 Mar 2019 00:39:43 +0100 Subject: [PATCH 352/603] Add support for fullscreen borderless window --- es-app/src/main.cpp | 3 +++ es-core/src/Renderer_init_sdlgl.cpp | 2 +- es-core/src/Settings.cpp | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 57c100fa66..6c1fe80ef6 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -108,6 +108,9 @@ bool parseArgs(int argc, char* argv[]) Settings::getInstance()->setBool("Debug", true); Settings::getInstance()->setBool("HideConsole", false); Log::setReportingLevel(LogDebug); + }else if(strcmp(argv[i], "--fullscreen-borderless") == 0) + { + Settings::getInstance()->setBool("FullscreenBorderless", true); }else if(strcmp(argv[i], "--windowed") == 0) { Settings::getInstance()->setBool("Windowed", true); diff --git a/es-core/src/Renderer_init_sdlgl.cpp b/es-core/src/Renderer_init_sdlgl.cpp index 8beb8930dc..f87cddd0cc 100644 --- a/es-core/src/Renderer_init_sdlgl.cpp +++ b/es-core/src/Renderer_init_sdlgl.cpp @@ -73,7 +73,7 @@ namespace Renderer sdlWindow = SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, windowWidth, windowHeight, - SDL_WINDOW_OPENGL | (Settings::getInstance()->getBool("Windowed") ? 0 : SDL_WINDOW_FULLSCREEN)); + SDL_WINDOW_OPENGL | (Settings::getInstance()->getBool("Windowed") ? 0 : (Settings::getInstance()->getBool("FullscreenBorderless") ? SDL_WINDOW_BORDERLESS : SDL_WINDOW_FULLSCREEN))); if(sdlWindow == NULL) { diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 1a38ae5d2f..4a0c246308 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -24,6 +24,7 @@ std::vector settings_dont_save { { "SplashScreen" }, { "SplashScreenProgress" }, { "VSync" }, + { "FullscreenBorderless" }, { "Windowed" }, { "WindowWidth" }, { "WindowHeight" }, @@ -59,6 +60,7 @@ void Settings::setDefaults() mBoolMap["ShowHiddenFiles"] = false; mBoolMap["DrawFramerate"] = false; mBoolMap["ShowExit"] = true; + mBoolMap["FullscreenBorderless"] = false; mBoolMap["Windowed"] = false; mBoolMap["SplashScreen"] = true; mBoolMap["SplashScreenProgress"] = true; From 07a9f18ac65f3038b7c2e4076eceae0dd46a9087 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Wed, 13 Mar 2019 21:18:58 +0100 Subject: [PATCH 353/603] Fix FilesystemUtil::isEquivalent by eliminating it entirely --- es-app/src/Gamelist.cpp | 8 +++----- es-core/src/utils/FileSystemUtil.cpp | 16 ---------------- es-core/src/utils/FileSystemUtil.h | 1 - 3 files changed, 3 insertions(+), 22 deletions(-) diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 01259431e3..14af11757d 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -237,11 +237,9 @@ void updateGamelist(SystemData* system) continue; } - std::string nodePath = Utils::FileSystem::resolveRelativePath(pathNode.text().get(), system->getStartPath(), true); - std::string gamePath = (*fit)->getPath(); - if(nodePath == gamePath || (Utils::FileSystem::exists(nodePath) && - Utils::FileSystem::exists(gamePath) && - Utils::FileSystem::isEquivalent(nodePath, gamePath))) + std::string nodePath = Utils::FileSystem::getCanonicalPath(Utils::FileSystem::resolveRelativePath(pathNode.text().get(), system->getStartPath(), true)); + std::string gamePath = Utils::FileSystem::getCanonicalPath((*fit)->getPath()); + if(nodePath == gamePath) { // found it root.remove_child(fileNode); diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 6847f217bd..5a0a351c97 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -652,22 +652,6 @@ namespace Utils } // isHidden - bool isEquivalent(const std::string& _path1, const std::string& _path2) - { - std::string path1 = getGenericPath(_path1); - std::string path2 = getGenericPath(_path2); - struct stat64 info1; - struct stat64 info2; - - // check if stat64 succeeded - if((stat64(path1.c_str(), &info1) != 0) || (stat64(path2.c_str(), &info2) != 0)) - return false; - - // check if attributes are identical - return ((info1.st_dev == info2.st_dev) && (info1.st_ino == info2.st_ino) && (info1.st_size == info2.st_size) && (info1.st_mtime == info2.st_mtime)); - - } // isEquivalent - } // FileSystem:: } // Utils:: diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index bb71f7b7c2..48c7f4f5ac 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -37,7 +37,6 @@ namespace Utils bool isDirectory (const std::string& _path); bool isSymlink (const std::string& _path); bool isHidden (const std::string& _path); - bool isEquivalent (const std::string& _path1, const std::string& _path2); } // FileSystem:: From 72edb792d286c4a15403358d9b781ee65116571d Mon Sep 17 00:00:00 2001 From: jrassa Date: Mon, 29 Jan 2018 19:49:08 -0500 Subject: [PATCH 354/603] implement scripting support --- es-app/src/FileData.cpp | 5 +++++ es-app/src/guis/GuiMenu.cpp | 15 +++++++++++---- es-core/CMakeLists.txt | 1 + es-core/src/InputManager.cpp | 4 ++++ es-core/src/Scripting.cpp | 36 ++++++++++++++++++++++++++++++++++++ es-core/src/Scripting.h | 12 ++++++++++++ es-core/src/Settings.cpp | 4 ++++ es-core/src/Window.cpp | 10 +++++++--- es-core/src/platform.cpp | 3 ++- 9 files changed, 82 insertions(+), 8 deletions(-) create mode 100644 es-core/src/Scripting.cpp create mode 100644 es-core/src/Scripting.h diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index bcec7a3b32..16cdd164d3 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -10,6 +10,7 @@ #include "Log.h" #include "MameNames.h" #include "platform.h" +#include "Scripting.h" #include "SystemData.h" #include "VolumeControl.h" #include "Window.h" @@ -282,6 +283,8 @@ void FileData::launchGame(Window* window) command = Utils::String::replace(command, "%BASENAME%", basename); command = Utils::String::replace(command, "%ROM_RAW%", rom_raw); + Scripting::fireEvent("game-start", rom, basename); + LOG(LogInfo) << " " << command; int exitCode = runSystemCommand(command); @@ -290,6 +293,8 @@ void FileData::launchGame(Window* window) LOG(LogWarning) << "...launch terminated with nonzero exit code " << exitCode << "!"; } + Scripting::fireEvent("game-end"); + window->init(); VolumeControl::getInstance()->init(); window->normalizeNextUpdate(); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 534b4c4378..59d8ae4150 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -13,6 +13,7 @@ #include "views/ViewController.h" #include "CollectionSystemManager.h" #include "EmulationStation.h" +#include "Scripting.h" #include "SystemData.h" #include "VolumeControl.h" #include @@ -296,13 +297,15 @@ void GuiMenu::openUISettings() s->addSaveFunc([window, theme_set] { bool needReload = false; - if(Settings::getInstance()->getString("ThemeSet") != theme_set->getSelected()) + std::string oldTheme = Settings::getInstance()->getString("ThemeSet"); + if(oldTheme != theme_set->getSelected()) needReload = true; Settings::getInstance()->setString("ThemeSet", theme_set->getSelected()); if(needReload) { + Scripting::fireEvent("theme-changed", theme_set->getSelected(), oldTheme); CollectionSystemManager::get()->updateSystemsList(); ViewController::get()->goToStart(); ViewController::get()->reloadAll(); // TODO - replace this with some sort of signal-based implementation @@ -472,6 +475,7 @@ void GuiMenu::openQuitMenu() row.makeAcceptInputHandler([window] { window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", [] { + Scripting::fireEvent("quit"); if(quitES("/tmp/es-restart") != 0) LOG(LogWarning) << "Restart terminated with non-zero result!"; }, "NO", nullptr)); @@ -487,9 +491,8 @@ void GuiMenu::openQuitMenu() row.makeAcceptInputHandler([window] { window->pushGui(new GuiMsgBox(window, "REALLY QUIT?", "YES", [] { - SDL_Event ev; - ev.type = SDL_QUIT; - SDL_PushEvent(&ev); + Scripting::fireEvent("quit"); + quitES(""); }, "NO", nullptr)); }); row.addElement(std::make_shared(window, "QUIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); @@ -500,6 +503,8 @@ void GuiMenu::openQuitMenu() row.makeAcceptInputHandler([window] { window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", [] { + Scripting::fireEvent("quit", "reboot"); + Scripting::fireEvent("reboot"); if (quitES("/tmp/es-sysrestart") != 0) LOG(LogWarning) << "Restart terminated with non-zero result!"; }, "NO", nullptr)); @@ -511,6 +516,8 @@ void GuiMenu::openQuitMenu() row.makeAcceptInputHandler([window] { window->pushGui(new GuiMsgBox(window, "REALLY SHUTDOWN?", "YES", [] { + Scripting::fireEvent("quit", "shutdown"); + Scripting::fireEvent("shutdown"); if (quitES("/tmp/es-shutdown") != 0) LOG(LogWarning) << "Shutdown terminated with non-zero result!"; }, "NO", nullptr)); diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 4688849292..9e4302f1e3 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -92,6 +92,7 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/PowerSaver.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_draw_gl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init_sdlgl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/Scripting.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.cpp diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index dbf6e57882..93026c5ea0 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -4,6 +4,7 @@ #include "CECInput.h" #include "Log.h" #include "platform.h" +#include "Scripting.h" #include "Window.h" #include #include @@ -396,6 +397,9 @@ void InputManager::writeDeviceConfig(InputConfig* config) config->writeToXML(root); doc.save_file(path.c_str()); + + Scripting::fireEvent("config-changed"); + Scripting::fireEvent("controls-changed"); // execute any onFinish commands and re-load the config for changes doOnFinish(); diff --git a/es-core/src/Scripting.cpp b/es-core/src/Scripting.cpp new file mode 100644 index 0000000000..3038db0a40 --- /dev/null +++ b/es-core/src/Scripting.cpp @@ -0,0 +1,36 @@ +#include "Scripting.h" +#include "Log.h" +#include "platform.h" +#include "utils/FileSystemUtil.h" + +namespace Scripting +{ + void fireEvent(const std::string& eventName, const std::string& arg1, const std::string& arg2) + { + LOG(LogDebug) << "fireEvent: " << eventName << " " << arg1 << " " << arg2; + + std::list scriptDirList; + std::string test; + + // check in exepath + test = Utils::FileSystem::getExePath() + "/scripts/" + eventName; + if(Utils::FileSystem::exists(test)) + scriptDirList.push_back(test); + + // check in homepath + test = Utils::FileSystem::getHomePath() + "/.emulationstation/scripts/" + eventName; + if(Utils::FileSystem::exists(test)) + scriptDirList.push_back(test); + + for(std::list::const_iterator dirIt = scriptDirList.cbegin(); dirIt != scriptDirList.cend(); ++dirIt) { + std::list scripts = Utils::FileSystem::getDirContent(*dirIt); + for (std::list::const_iterator it = scripts.cbegin(); it != scripts.cend(); ++it) { + // append folder to path + std::string script = *it + " \"" + arg1 + "\" \"" + arg2 + "\""; + LOG(LogDebug) << " executing: " << script; + runSystemCommand(script); + } + } + } + +} // Scripting:: diff --git a/es-core/src/Scripting.h b/es-core/src/Scripting.h new file mode 100644 index 0000000000..3089a538cd --- /dev/null +++ b/es-core/src/Scripting.h @@ -0,0 +1,12 @@ +#pragma once +#ifndef ES_CORE_SCRIPTING_H +#define ES_CORE_SCRIPTING_H + +#include + +namespace Scripting +{ + void fireEvent(const std::string& eventName, const std::string& arg1="", const std::string& arg2=""); +} // Scripting:: + +#endif //ES_CORE_SCRIPTING_H diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 4a0c246308..13c09a84a1 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -2,6 +2,7 @@ #include "utils/FileSystemUtil.h" #include "Log.h" +#include "Scripting.h" #include "platform.h" #include #include @@ -193,6 +194,9 @@ void Settings::saveFile() } doc.save_file(path.c_str()); + + Scripting::fireEvent("config-changed"); + Scripting::fireEvent("settings-changed"); } void Settings::loadFile() diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 2716792a0a..39489494fb 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -7,6 +7,7 @@ #include "InputManager.h" #include "Log.h" #include "Renderer.h" +#include "Scripting.h" #include #include @@ -277,8 +278,10 @@ void Window::render() if (!isProcessing() && mAllowSleep && (!mScreenSaver || mScreenSaver->allowSleep())) { // go to sleep - mSleeping = true; - onSleep(); + if (mSleeping == false) { + mSleeping = true; + onSleep(); + } } } } @@ -401,11 +404,12 @@ void Window::setHelpPrompts(const std::vector& prompts, const HelpSt void Window::onSleep() { + Scripting::fireEvent("sleep"); } void Window::onWake() { - + Scripting::fireEvent("wake"); } bool Window::isProcessing() diff --git a/es-core/src/platform.cpp b/es-core/src/platform.cpp index 0319cf88f5..81722a549c 100644 --- a/es-core/src/platform.cpp +++ b/es-core/src/platform.cpp @@ -42,7 +42,8 @@ int runSystemCommand(const std::string& cmd_utf8) int quitES(const std::string& filename) { - touch(filename); + if (!filename.empty()) + touch(filename); SDL_Event* quit = new SDL_Event(); quit->type = SDL_QUIT; SDL_PushEvent(quit); From 945a4c9cfd8547f8f431f2478196152b471c9ae6 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sat, 6 Apr 2019 02:33:16 +0100 Subject: [PATCH 355/603] Revert "InputManager: improve trigger axis calibration" --- es-core/src/InputManager.cpp | 24 +++++------------------- es-core/src/InputManager.h | 1 - 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index dbf6e57882..08c16865ca 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -101,14 +101,7 @@ void InputManager::addJoystickByDeviceIndex(int id) // set up the prevAxisValues int numAxes = SDL_JoystickNumAxes(joy); mPrevAxisValues[joyId] = new int[numAxes]; - mInitAxisValues[joyId] = new int[numAxes]; - - int axis; - for (int i = 0; i< numAxes; i++) { - axis = SDL_JoystickGetAxis(joy, i); - mInitAxisValues[joyId][i] = axis; - mPrevAxisValues[joyId][i] = axis; - } + std::fill(mPrevAxisValues[joyId], mPrevAxisValues[joyId] + numAxes, 0); //initialize array to 0 } void InputManager::removeJoystickByJoystickID(SDL_JoystickID joyId) @@ -205,28 +198,21 @@ InputConfig* InputManager::getInputConfigByDevice(int device) bool InputManager::parseEvent(const SDL_Event& ev, Window* window) { bool causedEvent = false; - int axis; switch(ev.type) { case SDL_JOYAXISMOTION: - axis = ev.jaxis.value; - // Check for ABS_Z/ABS_RZ trigger axes which rest at -32768 - if ((ev.jaxis.axis == 2 || ev.jaxis.axis == 5) && mInitAxisValues[ev.jaxis.which][ev.jaxis.axis] == -32768) - { - // shift to 0 - 32767. - axis = axis / 2 + 16384; - } //if it switched boundaries - if((abs(axis) > DEADZONE) != (abs(mPrevAxisValues[ev.jaxis.which][ev.jaxis.axis]) > DEADZONE)) + if((abs(ev.jaxis.value) > DEADZONE) != (abs(mPrevAxisValues[ev.jaxis.which][ev.jaxis.axis]) > DEADZONE)) { int normValue; - if(abs(axis) <= DEADZONE) + if(abs(ev.jaxis.value) <= DEADZONE) normValue = 0; else - if(axis > 0) + if(ev.jaxis.value > 0) normValue = 1; else normValue = -1; + window->input(getInputConfigByDevice(ev.jaxis.which), Input(ev.jaxis.which, TYPE_AXIS, ev.jaxis.axis, normValue, false)); causedEvent = true; } diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index 74c4c3f866..fde96f0921 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -27,7 +27,6 @@ class InputManager InputConfig* mCECInputConfig; std::map mPrevAxisValues; - std::map mInitAxisValues; bool initialized() const; From 03341f236df1c1b71b63c2ccf1d1e873fe53653b Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Sat, 6 Apr 2019 10:02:15 +0100 Subject: [PATCH 356/603] Implement filterTrigger for PS3 controllers The hid-sony driver has both analog and digital buttons for the triggers, and the analog values range from -32767 to 32767, which can cause two unwanted input events (digital button and negative axis) per press. Implement a function to filter out unwanted input events during configuration, but isolate detection to known PS3 controllers with 6 axes so that older versions of hid-sony and the sixad driver (which use 25+ axes) are not impacted negatively. --- es-core/src/InputManager.cpp | 6 ++++++ es-core/src/InputManager.h | 1 + es-core/src/guis/GuiInputConfig.cpp | 26 ++++++++++++++++++++++++++ es-core/src/guis/GuiInputConfig.h | 1 + 4 files changed, 34 insertions(+) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 08c16865ca..9c9dad5542 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -171,6 +171,12 @@ void InputManager::deinit() } int InputManager::getNumJoysticks() { return (int)mJoysticks.size(); } + +int InputManager::getAxisCountByDevice(SDL_JoystickID id) +{ + return SDL_JoystickNumAxes(mJoysticks[id]); +} + int InputManager::getButtonCountByDevice(SDL_JoystickID id) { if(id == DEVICE_KEYBOARD) diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index fde96f0921..77ff0a16cb 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -48,6 +48,7 @@ class InputManager void deinit(); int getNumJoysticks(); + int getAxisCountByDevice(int deviceId); int getButtonCountByDevice(int deviceId); int getNumConfiguredDevices(); diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index fe3b95e9d8..3ec21f101f 100755 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -133,6 +133,11 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi return false; } + + // filter for input quirks specific to Sony DualShock 3 + if(filterTrigger(input, config)) + return false; + // we are configuring if(input.value != 0) { @@ -331,3 +336,24 @@ void GuiInputConfig::clearAssignment(int inputId) { mTargetConfig->unmapInput(GUI_INPUT_CONFIG_LIST[inputId].name); } + +bool GuiInputConfig::filterTrigger(Input input, InputConfig* config) +{ +#if defined(__linux__) + // match PlayStation joystick with 6 axes only + if((strstr(config->getDeviceName().c_str(), "PLAYSTATION") != NULL \ + || strstr(config->getDeviceName().c_str(), "PS3 Game") != NULL \ + || strstr(config->getDeviceName().c_str(), "PS(R) Game") != NULL) \ + && InputManager::getInstance()->getAxisCountByDevice(config->getDeviceId()) == 6) + { + // digital triggers are unwanted + if (input.type == TYPE_BUTTON && (input.id == 6 || input.id == 7)) + return true; + // ignore analog values < 0 + if (input.type == TYPE_AXIS && (input.id == 2 || input.id == 5) && input.value < 0) + return true; + } +#endif + + return false; +} diff --git a/es-core/src/guis/GuiInputConfig.h b/es-core/src/guis/GuiInputConfig.h index 134ad39036..bef5f03eab 100644 --- a/es-core/src/guis/GuiInputConfig.h +++ b/es-core/src/guis/GuiInputConfig.h @@ -28,6 +28,7 @@ class GuiInputConfig : public GuiComponent bool assign(Input input, int inputId); void clearAssignment(int inputId); + bool filterTrigger(Input input, InputConfig* config); void rowDone(); From f7af8357f8e64d0333cad32588d47034b0438d63 Mon Sep 17 00:00:00 2001 From: placroix74 Date: Sun, 7 Apr 2019 08:52:36 -0400 Subject: [PATCH 357/603] Code formatting --- es-core/src/Window.cpp | 62 +++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 2716792a0a..95e0713c91 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -414,34 +414,34 @@ bool Window::isProcessing() } void Window::startScreenSaver() - { - if (mScreenSaver && !mRenderScreenSaver) - { - // Tell the GUI components the screensaver is starting - for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) - (*i)->onScreenSaverActivate(); - - mScreenSaver->startScreenSaver(); - mRenderScreenSaver = true; - } - } - - void Window::cancelScreenSaver() - { - if (mScreenSaver && mRenderScreenSaver) - { - mScreenSaver->stopScreenSaver(); - mRenderScreenSaver = false; - mScreenSaver->resetCounts(); - - // Tell the GUI components the screensaver has stopped - for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) - (*i)->onScreenSaverDeactivate(); - } - } - - void Window::renderScreenSaver() - { - if (mScreenSaver) - mScreenSaver->renderScreenSaver(); - } +{ + if (mScreenSaver && !mRenderScreenSaver) + { + // Tell the GUI components the screensaver is starting + for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) + (*i)->onScreenSaverActivate(); + + mScreenSaver->startScreenSaver(); + mRenderScreenSaver = true; + } +} + +void Window::cancelScreenSaver() +{ + if (mScreenSaver && mRenderScreenSaver) + { + mScreenSaver->stopScreenSaver(); + mRenderScreenSaver = false; + mScreenSaver->resetCounts(); + + // Tell the GUI components the screensaver has stopped + for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) + (*i)->onScreenSaverDeactivate(); + } +} + +void Window::renderScreenSaver() +{ + if (mScreenSaver) + mScreenSaver->renderScreenSaver(); +} From 93629678801562375bd67fc70b8795d4198f5f05 Mon Sep 17 00:00:00 2001 From: placroix74 Date: Sun, 7 Apr 2019 08:54:06 -0400 Subject: [PATCH 358/603] [ScreenSaver] Consume input on cancel --- es-core/src/Window.cpp | 13 +++++++------ es-core/src/Window.h | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 95e0713c91..d197b86158 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -139,10 +139,6 @@ void Window::input(InputConfig* config, Input input) mSleeping = true; } } - /*else if(input.value != 0) - { - return; - }*/ } } @@ -157,7 +153,8 @@ void Window::input(InputConfig* config, Input input) } mTimeSinceLastInput = 0; - cancelScreenSaver(); + if (cancelScreenSaver()) + return; if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_g && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) { @@ -426,7 +423,7 @@ void Window::startScreenSaver() } } -void Window::cancelScreenSaver() +bool Window::cancelScreenSaver() { if (mScreenSaver && mRenderScreenSaver) { @@ -437,7 +434,11 @@ void Window::cancelScreenSaver() // Tell the GUI components the screensaver has stopped for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) (*i)->onScreenSaverDeactivate(); + + return true; } + + return false; } void Window::renderScreenSaver() diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 738dcda98a..3f104c648e 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -74,7 +74,7 @@ class Window inline void stopInfoPopup() { if (mInfoPopup) mInfoPopup->stop(); }; void startScreenSaver(); - void cancelScreenSaver(); + bool cancelScreenSaver(); void renderScreenSaver(); private: From 93fdfaa9c2815edd34ed79883d5a983eefde17d1 Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Thu, 11 Apr 2019 02:52:21 +0100 Subject: [PATCH 359/603] filterTrigger: generalize for more controllers * Filter axes 2/5 for all devices, but only if LeftTrigger or RightTrigger is being configured. This should fix compatibility with XBox 360 and other generic controllers that use these axes for triggers, but won't affect other controllers using these axes for analog sticks, etc. * Improve third-party PS3 detection (some Shanwan controllers have a grave accent in place of 'm' for 'Gamepad'). --- es-core/src/guis/GuiInputConfig.cpp | 22 +++++++++++++--------- es-core/src/guis/GuiInputConfig.h | 3 ++- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index 3ec21f101f..29111a4841 100755 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -133,9 +133,8 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi return false; } - - // filter for input quirks specific to Sony DualShock 3 - if(filterTrigger(input, config)) + // apply filtering for quirks related to trigger mapping + if(filterTrigger(input, config, i)) return false; // we are configuring @@ -337,21 +336,26 @@ void GuiInputConfig::clearAssignment(int inputId) mTargetConfig->unmapInput(GUI_INPUT_CONFIG_LIST[inputId].name); } -bool GuiInputConfig::filterTrigger(Input input, InputConfig* config) +bool GuiInputConfig::filterTrigger(Input input, InputConfig* config, int inputId) { #if defined(__linux__) // match PlayStation joystick with 6 axes only if((strstr(config->getDeviceName().c_str(), "PLAYSTATION") != NULL \ - || strstr(config->getDeviceName().c_str(), "PS3 Game") != NULL \ - || strstr(config->getDeviceName().c_str(), "PS(R) Game") != NULL) \ + || strstr(config->getDeviceName().c_str(), "PS3 Ga") != NULL \ + || strstr(config->getDeviceName().c_str(), "PS(R) Ga") != NULL) \ && InputManager::getInstance()->getAxisCountByDevice(config->getDeviceId()) == 6) { // digital triggers are unwanted if (input.type == TYPE_BUTTON && (input.id == 6 || input.id == 7)) return true; - // ignore analog values < 0 - if (input.type == TYPE_AXIS && (input.id == 2 || input.id == 5) && input.value < 0) - return true; + } + + // ignore negative pole for axes 2/5 only when triggers are being configured + if((mSkipAxis || strstr(GUI_INPUT_CONFIG_LIST[inputId].name, "Trigger") != NULL) \ + && input.type == TYPE_AXIS && (input.id == 2 || input.id == 5) && input.value < 0) + { + mSkipAxis = true; + return true; } #endif diff --git a/es-core/src/guis/GuiInputConfig.h b/es-core/src/guis/GuiInputConfig.h index bef5f03eab..d33a8fad7b 100644 --- a/es-core/src/guis/GuiInputConfig.h +++ b/es-core/src/guis/GuiInputConfig.h @@ -28,7 +28,7 @@ class GuiInputConfig : public GuiComponent bool assign(Input input, int inputId); void clearAssignment(int inputId); - bool filterTrigger(Input input, InputConfig* config); + bool filterTrigger(Input input, InputConfig* config, int inputId); void rowDone(); @@ -50,6 +50,7 @@ class GuiInputConfig : public GuiComponent Input mHeldInput; int mHeldTime; int mHeldInputId; + bool mSkipAxis; BusyComponent mBusyAnim; }; From 48663c0b298f3d60d5aeb2c026de5be8ca6cd2ae Mon Sep 17 00:00:00 2001 From: 5schatten Date: Tue, 16 Apr 2019 17:29:12 +0200 Subject: [PATCH 360/603] CMakeList.txt: added CMAKE_FIND_ROOT_PATH to detect RPi & Mali OpenGLES libs & headers --- CMakeLists.txt | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b757e85749..ef2d778a22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,23 +20,23 @@ elseif(GL) set(GLSystem "Desktop OpenGL" CACHE STRING "The OpenGL system to be used") #------------------------------------------------------------------------------- #check if we're running on Raspberry Pi -elseif(EXISTS "/opt/vc/include/bcm_host.h") +elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/bcm_host.h") MESSAGE("bcm_host.h found") set(BCMHOST found) set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") #------------------------------------------------------------------------------- #check if we're running on OSMC Vero4K -elseif(EXISTS "/opt/vero3/lib/libMali.so") +elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/opt/vero3/lib/libMali.so") MESSAGE("libMali.so found") set(VERO4K found) set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") #------------------------------------------------------------------------------- #check if we're running on olinuxino / odroid / etc -elseif(EXISTS "/usr/lib/libMali.so" OR - EXISTS "/usr/lib/arm-linux-gnueabihf/libMali.so" OR - EXISTS "/usr/lib/aarch64-linux-gnu/libMali.so" OR - EXISTS "/usr/lib/arm-linux-gnueabihf/mali-egl/libmali.so" OR - EXISTS "/usr/lib/arm-linux-gnueabihf/libmali.so") +elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/libMali.so" OR + EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libMali.so" OR + EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/aarch64-linux-gnu/libMali.so" OR + EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/mali-egl/libmali.so" OR + EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libmali.so") MESSAGE("libMali.so found") set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") else() @@ -142,15 +142,15 @@ endif() if(DEFINED BCMHOST) LIST(APPEND COMMON_INCLUDE_DIRS - "/opt/vc/include" - "/opt/vc/include/interface/vcos" - "/opt/vc/include/interface/vmcs_host/linux" - "/opt/vc/include/interface/vcos/pthreads" + "${CMAKE_FIND_ROOT_PATH}/opt/vc/include" + "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos" + "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vmcs_host/linux" + "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos/pthreads" ) #add include directory for Vero4K elseif(DEFINED VERO4K) LIST(APPEND COMMON_INCLUDE_DIRS - "/opt/vero3/include" + "${CMAKE_FIND_ROOT_PATH}/opt/vero3/include" ) else() if(${GLSystem} MATCHES "Desktop OpenGL") @@ -168,11 +168,11 @@ endif() #define libraries and directories if(DEFINED BCMHOST) link_directories( - "/opt/vc/lib" + "${CMAKE_FIND_ROOT_PATH}/opt/vc/lib" ) elseif(DEFINED VERO4K) link_directories( - "/opt/vero3/lib" + "${CMAKE_FIND_ROOT_PATH}/opt/vero3/lib" ) endif() From 6e123ba8c60897a6f7e9dff8cb1f606576ab859c Mon Sep 17 00:00:00 2001 From: Cristi Mitrana Date: Thu, 2 May 2019 11:54:55 +0300 Subject: [PATCH 361/603] scraper: change ScreenScraper API URL --- es-app/src/scrapers/ScreenScraper.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/scrapers/ScreenScraper.h b/es-app/src/scrapers/ScreenScraper.h index 8cdfd216ab..4c749008f1 100644 --- a/es-app/src/scrapers/ScreenScraper.h +++ b/es-app/src/scrapers/ScreenScraper.h @@ -27,7 +27,7 @@ class ScreenScraperRequest : public ScraperHttpRequest const std::string API_DEV_U = { 91, 32, 7, 17 }; const std::string API_DEV_P = { 108, 28, 54, 55, 83, 43, 91, 44, 30, 22, 41, 12, 0, 108, 38, 29 }; const std::string API_DEV_KEY = { 54, 73, 115, 100, 101, 67, 111, 107, 79, 66, 68, 66, 67, 56, 118, 77, 54, 88, 101, 54 }; - const std::string API_URL_BASE = "https://screenscraper.fr/api2"; + const std::string API_URL_BASE = "https://www.screenscraper.fr/api2"; const std::string API_SOFT_NAME = "Emulationstation " + static_cast(PROGRAM_VERSION_STRING); /** Which type of image artwork we need. Possible values (not a comprehensive list): From 573cd4cdd56f09ff6a27a552093b63906b919ed9 Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Wed, 12 Jun 2019 13:36:48 +0300 Subject: [PATCH 362/603] Fix 'Last Played' collection crash. --- es-app/src/CollectionSystemManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index cb5e2481da..0ccdd9ee1d 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -292,7 +292,7 @@ void CollectionSystemManager::updateCollectionSystem(FileData* file, CollectionS void CollectionSystemManager::trimCollectionCount(FileData* rootFolder, int limit) { SystemData* curSys = rootFolder->getSystem(); - while ((int)rootFolder->getChildren().size() > limit) + while ((int)rootFolder->getChildrenListToDisplay().size() > limit) { CollectionFileData* gameToRemove = (CollectionFileData*)rootFolder->getChildrenListToDisplay().back(); ViewController::get()->getGameListView(curSys).get()->remove(gameToRemove, false); From 1b06df1572fcdae21663aa138e1366d7d7714c42 Mon Sep 17 00:00:00 2001 From: pjft Date: Wed, 19 Jun 2019 10:04:17 +0100 Subject: [PATCH 363/603] Fix Kiosk Favorites not registering Had been broken a few months back. --- es-app/src/views/gamelist/ISimpleGameListView.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 5a1a68ed35..64f482e308 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -146,7 +146,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) } return true; } - }else if (config->isMappedTo("y", input) && UIModeController::getInstance()->isUIModeFull()) + }else if (config->isMappedTo("y", input) && !UIModeController::getInstance()->isUIModeKid()) { if(mRoot->getSystem()->isGameSystem()) { From a2f59ee2fcae35dbaad7264226c6a8541d7f9f4d Mon Sep 17 00:00:00 2001 From: Dan Leach Date: Wed, 19 Jun 2019 18:51:32 +0100 Subject: [PATCH 364/603] Add Game Info Font Settings to OMX Player Adds the ability for users to change the following features in OMX Player's subtitles (game info for screen saver). - font size - font file path - italic font file path - subtitle position These changes can be made in the GUI menus via the Video Screen Saver menu, or directly in the es_settings.cfg file. Safe OMX Player defaults are hard-coded into the EmulationStation application. Here's an example of the new keys loaded/saved into in the es_settings.cfg file: - `` - `` - `` - `` --- es-app/src/guis/GuiScreensaverOptions.cpp | 28 +++++++++++ es-app/src/guis/GuiScreensaverOptions.h | 1 + .../guis/GuiSlideshowScreensaverOptions.cpp | 28 ----------- .../src/guis/GuiSlideshowScreensaverOptions.h | 1 - .../src/guis/GuiVideoScreensaverOptions.cpp | 47 +++++++++++++++++-- es-core/src/Settings.cpp | 5 ++ .../src/components/VideoPlayerComponent.cpp | 10 +++- 7 files changed, 85 insertions(+), 35 deletions(-) diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index e9d2f068c3..6537694e5f 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -1,5 +1,6 @@ #include "guis/GuiScreensaverOptions.h" +#include "guis/GuiTextEditPopup.h" #include "views/ViewController.h" #include "Settings.h" #include "SystemData.h" @@ -67,3 +68,30 @@ std::vector GuiScreensaverOptions::getHelpPrompts() return prompts; } + +void GuiScreensaverOptions::addEditableTextComponent(ComponentListRow row, const std::string label, std::shared_ptr ed, std::string value) +{ + row.elements.clear(); + + auto lbl = std::make_shared(mWindow, Utils::String::toUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF); + row.addElement(lbl, true); // label + + row.addElement(ed, true); + + auto spacer = std::make_shared(mWindow); + spacer->setSize(Renderer::getScreenWidth() * 0.005f, 0); + row.addElement(spacer, false); + + auto bracket = std::make_shared(mWindow); + bracket->setImage(":/arrow.svg"); + bracket->setResize(Vector2f(0, lbl->getFont()->getLetterHeight())); + row.addElement(bracket, false); + + auto updateVal = [ed](const std::string& newVal) { ed->setValue(newVal); }; // ok callback (apply new value to ed) + row.makeAcceptInputHandler([this, label, ed, updateVal] { + mWindow->pushGui(new GuiTextEditPopup(mWindow, label, ed->getValue(), updateVal, false)); + }); + assert(ed); + addRow(row); + ed->setValue(value); +} diff --git a/es-app/src/guis/GuiScreensaverOptions.h b/es-app/src/guis/GuiScreensaverOptions.h index 6f61489f8b..cabcff3c59 100644 --- a/es-app/src/guis/GuiScreensaverOptions.h +++ b/es-app/src/guis/GuiScreensaverOptions.h @@ -15,6 +15,7 @@ class GuiScreensaverOptions : public GuiComponent inline void addRow(const ComponentListRow& row) { mMenu.addRow(row); }; inline void addWithLabel(const std::string& label, const std::shared_ptr& comp) { mMenu.addWithLabel(label, comp); }; inline void addSaveFunc(const std::function& func) { mSaveFuncs.push_back(func); }; + void addEditableTextComponent(ComponentListRow row, const std::string label, std::shared_ptr ed, std::string value); bool input(InputConfig* config, Input input) override; std::vector getHelpPrompts() override; diff --git a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp index e29b3e2e9a..9f3c5b9db9 100644 --- a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp +++ b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp @@ -80,31 +80,3 @@ void GuiSlideshowScreensaverOptions::addWithLabel(ComponentListRow row, const st addRow(row); } - -void GuiSlideshowScreensaverOptions::addEditableTextComponent(ComponentListRow row, const std::string label, std::shared_ptr ed, std::string value) -{ - row.elements.clear(); - - auto lbl = std::make_shared(mWindow, Utils::String::toUpper(label), Font::get(FONT_SIZE_MEDIUM), 0x777777FF); - row.addElement(lbl, true); // label - - row.addElement(ed, true); - - auto spacer = std::make_shared(mWindow); - spacer->setSize(Renderer::getScreenWidth() * 0.005f, 0); - row.addElement(spacer, false); - - auto bracket = std::make_shared(mWindow); - bracket->setImage(":/arrow.svg"); - bracket->setResize(Vector2f(0, lbl->getFont()->getLetterHeight())); - row.addElement(bracket, false); - - auto updateVal = [ed](const std::string& newVal) { ed->setValue(newVal); }; // ok callback (apply new value to ed) - row.makeAcceptInputHandler([this, label, ed, updateVal] { - mWindow->pushGui(new GuiTextEditPopup(mWindow, label, ed->getValue(), updateVal, false)); - }); - - assert(ed); - addRow(row); - ed->setValue(value); -} diff --git a/es-app/src/guis/GuiSlideshowScreensaverOptions.h b/es-app/src/guis/GuiSlideshowScreensaverOptions.h index 70705d0d29..4232a69bad 100644 --- a/es-app/src/guis/GuiSlideshowScreensaverOptions.h +++ b/es-app/src/guis/GuiSlideshowScreensaverOptions.h @@ -12,7 +12,6 @@ class GuiSlideshowScreensaverOptions : public GuiScreensaverOptions private: void addWithLabel(ComponentListRow row, const std::string label, std::shared_ptr component); - void addEditableTextComponent(ComponentListRow row, const std::string label, std::shared_ptr ed, std::string value); }; #endif // ES_APP_GUIS_GUI_SLIDESHOW_SCREENSAVER_OPTIONS_H diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.cpp b/es-app/src/guis/GuiVideoScreensaverOptions.cpp index b7489b0ecd..b491c2ff1f 100644 --- a/es-app/src/guis/GuiVideoScreensaverOptions.cpp +++ b/es-app/src/guis/GuiVideoScreensaverOptions.cpp @@ -18,6 +18,11 @@ GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const cha PowerSaver::updateTimeouts(); }); + auto stretch_screensaver = std::make_shared(mWindow); + stretch_screensaver->setState(Settings::getInstance()->getBool("StretchVideoOnScreenSaver")); + addWithLabel("STRETCH VIDEO ON SCREENSAVER", stretch_screensaver); + addSaveFunc([stretch_screensaver] { Settings::getInstance()->setBool("StretchVideoOnScreenSaver", stretch_screensaver->getState()); }); + #ifdef _RPI_ auto ss_omx = std::make_shared(mWindow); ss_omx->setState(Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); @@ -36,17 +41,49 @@ GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const cha addWithLabel("SHOW GAME INFO ON SCREENSAVER", ss_info); addSaveFunc([ss_info, this] { Settings::getInstance()->setString("ScreenSaverGameInfo", ss_info->getSelected()); }); +#ifdef _RPI_ + ComponentListRow row; + + // Set subtitle position + auto ss_omx_subs_align = std::make_shared< OptionListComponent >(mWindow, "GAME INFO ALIGNMENT", false); + std::vector align_mode; + align_mode.push_back("left"); + align_mode.push_back("center"); + for(auto it = align_mode.cbegin(); it != align_mode.cend(); it++) + ss_omx_subs_align->add(*it, *it, Settings::getInstance()->getString("SubtitleAlignment") == *it); + addWithLabel("GAME INFO ALIGNMENT", ss_omx_subs_align); + addSaveFunc([ss_omx_subs_align, this] { Settings::getInstance()->setString("SubtitleAlignment", ss_omx_subs_align->getSelected()); }); + + // Set font size + auto ss_omx_font_size = std::make_shared(mWindow, 1.f, 64.f, 1.f, "h"); + ss_omx_font_size->setValue((float)(Settings::getInstance()->getInt("SubtitleSize"))); + addWithLabel("GAME INFO FONT SIZE", ss_omx_font_size); + addSaveFunc([ss_omx_font_size] { + int subSize = (int)Math::round(ss_omx_font_size->getValue()); + Settings::getInstance()->setInt("SubtitleSize", subSize); + }); + + // Define subtitle font + auto ss_omx_font_file = std::make_shared(mWindow, "", Font::get(FONT_SIZE_SMALL), 0x777777FF); + addEditableTextComponent(row, "PATH TO FONT FILE", ss_omx_font_file, Settings::getInstance()->getString("SubtitleFont")); + addSaveFunc([ss_omx_font_file] { + Settings::getInstance()->setString("SubtitleFont", ss_omx_font_file->getValue()); + }); + + // Define subtitle italic font + auto ss_omx_italic_font_file = std::make_shared(mWindow, "", Font::get(FONT_SIZE_SMALL), 0x777777FF); + addEditableTextComponent(row, "PATH TO ITALIC FONT FILE", ss_omx_italic_font_file, Settings::getInstance()->getString("SubtitleItalicFont")); + addSaveFunc([ss_omx_italic_font_file] { + Settings::getInstance()->setString("SubtitleItalicFont", ss_omx_italic_font_file->getValue()); + }); +#endif + #ifndef _RPI_ auto captions_compatibility = std::make_shared(mWindow); captions_compatibility->setState(Settings::getInstance()->getBool("CaptionsCompatibility")); addWithLabel("USE COMPATIBLE LOW RESOLUTION FOR CAPTIONS", captions_compatibility); addSaveFunc([captions_compatibility] { Settings::getInstance()->setBool("CaptionsCompatibility", captions_compatibility->getState()); }); #endif - - auto stretch_screensaver = std::make_shared(mWindow); - stretch_screensaver->setState(Settings::getInstance()->getBool("StretchVideoOnScreenSaver")); - addWithLabel("STRETCH VIDEO ON SCREENSAVER", stretch_screensaver); - addSaveFunc([stretch_screensaver] { Settings::getInstance()->setBool("StretchVideoOnScreenSaver", stretch_screensaver->getState()); }); } GuiVideoScreensaverOptions::~GuiVideoScreensaverOptions() diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 13c09a84a1..c51f653f0a 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -117,6 +117,11 @@ void Settings::setDefaults() #ifdef _RPI_ // we're defaulting to OMX Player for full screen video on the Pi mBoolMap["ScreenSaverOmxPlayer"] = true; + // use OMX Player defaults + mStringMap["SubtitleFont"] = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"; + mStringMap["SubtitleItalicFont"] = "/usr/share/fonts/truetype/freefont/FreeSansOblique.ttf"; + mIntMap["SubtitleSize"] = 55; + mStringMap["SubtitleAlignment"] = "left"; #else mBoolMap["ScreenSaverOmxPlayer"] = false; #endif diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index eeaba91775..0b0948e427 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -156,7 +156,7 @@ void VideoPlayerComponent::startVideo() // We need to specify the layer of 10000 or above to ensure the video is displayed on top // of our SDL display - const char* argv[] = { "", "--layer", "10010", "--loop", "--no-osd", "--aspect-mode", "letterbox", "--vol", "0", "-o", "both","--win", buf1, "--orientation", buf2, "", "", "", "", NULL }; + const char* argv[] = { "", "--layer", "10010", "--loop", "--no-osd", "--aspect-mode", "letterbox", "--vol", "0", "-o", "both","--win", buf1, "--orientation", buf2, "", "", "", "", "", "", "", "", "", "", "", NULL }; // check if we want to mute the audio if (!Settings::getInstance()->getBool("VideoAudio") || (float)VolumeControl::getInstance()->getVolume() == 0) @@ -187,6 +187,14 @@ void VideoPlayerComponent::startVideo() argv[15] = "--subtitles"; argv[16] = subtitlePath.c_str(); argv[17] = mPlayingVideoPath.c_str(); + argv[18] = "--font"; + argv[19] = Settings::getInstance()->getString("SubtitleFont").c_str(); + argv[20] = "--italic-font"; + argv[21] = Settings::getInstance()->getString("SubtitleItalicFont").c_str(); + argv[22] = "--font-size"; + argv[23] = std::to_string(Settings::getInstance()->getInt("SubtitleSize")).c_str(); + argv[24] = "--align"; + argv[25] = Settings::getInstance()->getString("SubtitleAlignment").c_str(); } else { From c84290e7fb5b81d8c7fe8f6f160115c43c446fbc Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Thu, 11 Jul 2019 09:38:23 +0300 Subject: [PATCH 365/603] Makes the display of system's name in Collections configurable. * adds a new configuration option ("CollectionShowSystemInfo" = bool), in the 'Game Collections Settings' GUI. Defaults to previous behavior (true). * reloads the Collection when the configuration is changed. --- es-app/src/CollectionSystemManager.cpp | 1 - es-app/src/FileData.cpp | 19 +++++++++++-------- .../src/guis/GuiCollectionSystemsOptions.cpp | 10 +++++++++- es-app/src/guis/GuiCollectionSystemsOptions.h | 1 + es-core/src/Settings.cpp | 1 + 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 0ccdd9ee1d..ea3f629da7 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -1032,7 +1032,6 @@ bool CollectionSystemManager::includeFileInAutoCollections(FileData* file) return file->getName() != "kodi" && file->getSystem()->isGameSystem(); } - std::string getCustomCollectionConfigPath(std::string collectionName) { return getCollectionsFolder() + "/custom-" + collectionName + ".cfg"; diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 16cdd164d3..2238c60f92 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -345,14 +345,17 @@ void CollectionFileData::refreshMetadata() mDirty = true; } -const std::string& CollectionFileData::getName() -{ - if (mDirty) { - mCollectionFileName = Utils::String::removeParenthesis(mSourceFileData->metadata.get("name")); - mCollectionFileName += " [" + Utils::String::toUpper(mSourceFileData->getSystem()->getName()) + "]"; - mDirty = false; - } - return mCollectionFileName; +const std::string& CollectionFileData::getName() +{ + if (mDirty) { + mCollectionFileName = Utils::String::removeParenthesis(mSourceFileData->metadata.get("name")); + mCollectionFileName += " [" + Utils::String::toUpper(mSourceFileData->getSystem()->getName()) + "]"; + mDirty = false; + } + + if (Settings::getInstance()->getBool("CollectionShowSystemInfo")) + return mCollectionFileName; + return mSourceFileData->metadata.get("name"); } // returns Sort Type based on a string description diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.cpp b/es-app/src/guis/GuiCollectionSystemsOptions.cpp index 27df3082eb..ede6f3eb6b 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.cpp +++ b/es-app/src/guis/GuiCollectionSystemsOptions.cpp @@ -75,6 +75,10 @@ void GuiCollectionSystemsOptions::initializeMenu() sortAllSystemsSwitch->setState(Settings::getInstance()->getBool("SortAllSystems")); mMenu.addWithLabel("SORT CUSTOM COLLECTIONS AND SYSTEMS", sortAllSystemsSwitch); + toggleSystemNameInCollections = std::make_shared(mWindow); + toggleSystemNameInCollections->setState(Settings::getInstance()->getBool("CollectionShowSystemInfo")); + mMenu.addWithLabel("SHOW SYSTEM NAME IN COLLECTIONS", toggleSystemNameInCollections); + if(CollectionSystemManager::get()->isEditing()) { row.elements.clear(); @@ -170,11 +174,14 @@ void GuiCollectionSystemsOptions::applySettings() bool prevSort = Settings::getInstance()->getBool("SortAllSystems"); bool outBundle = bundleCustomCollections->getState(); bool prevBundle = Settings::getInstance()->getBool("UseCustomCollectionsSystem"); - bool needUpdateSettings = prevAuto != outAuto || prevCustom != outCustom || outSort != prevSort || outBundle != prevBundle; + bool prevShow = Settings::getInstance()->getBool("CollectionShowSystemInfo"); + bool outShow = toggleSystemNameInCollections->getState(); + bool needUpdateSettings = prevAuto != outAuto || prevCustom != outCustom || outSort != prevSort || outBundle != prevBundle || prevShow != outShow ; if (needUpdateSettings) { updateSettings(outAuto, outCustom); } + delete this; } @@ -184,6 +191,7 @@ void GuiCollectionSystemsOptions::updateSettings(std::string newAutoSettings, st Settings::getInstance()->setString("CollectionSystemsCustom", newCustomSettings); Settings::getInstance()->setBool("SortAllSystems", sortAllSystemsSwitch->getState()); Settings::getInstance()->setBool("UseCustomCollectionsSystem", bundleCustomCollections->getState()); + Settings::getInstance()->setBool("CollectionShowSystemInfo", toggleSystemNameInCollections->getState()); Settings::getInstance()->saveFile(); CollectionSystemManager::get()->loadEnabledListFromSettings(); CollectionSystemManager::get()->updateSystemsList(); diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.h b/es-app/src/guis/GuiCollectionSystemsOptions.h index fc6113e0a2..dd19bf9626 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.h +++ b/es-app/src/guis/GuiCollectionSystemsOptions.h @@ -30,6 +30,7 @@ class GuiCollectionSystemsOptions : public GuiComponent std::shared_ptr< OptionListComponent > customOptionList; std::shared_ptr sortAllSystemsSwitch; std::shared_ptr bundleCustomCollections; + std::shared_ptr toggleSystemNameInCollections; MenuComponent mMenu; SystemData* mSystem; }; diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 13c09a84a1..e4435077ac 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -129,6 +129,7 @@ void Settings::setDefaults() mStringMap["OMXAudioDev"] = "both"; mStringMap["CollectionSystemsAuto"] = ""; mStringMap["CollectionSystemsCustom"] = ""; + mBoolMap["CollectionShowSystemInfo"] = true; mBoolMap["SortAllSystems"] = false; mBoolMap["UseCustomCollectionsSystem"] = true; From 0903bb36ff87879b24d366eb27c59721e780c928 Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Wed, 17 Jul 2019 14:53:10 +0300 Subject: [PATCH 366/603] Added an option to force the compilation of Raspberry Pi specific bits. Useful when the VC4 legacy driver is not used for GLES, but usage of 'omxplayer' is still desired. --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ef2d778a22..f1f2c1be0e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 2.8) option(GLES "Set to ON if targeting OpenGL ES" ${GLES}) option(GL "Set to ON if targeting Desktop OpenGL" ${GL}) +option(RPI "Set to ON to enable the Raspberry PI video player (omxplayer)" ${RPI}) project(emulationstation-all) @@ -67,7 +68,7 @@ endif() #------------------------------------------------------------------------------- #set up compiler flags and excutable names -if(DEFINED BCMHOST) +if(DEFINED BCMHOST OR RPI) add_definitions(-D_RPI_) endif() From 8de1fc886027b422118474d09f20e3790bba283a Mon Sep 17 00:00:00 2001 From: John Rassa Date: Sun, 21 Jul 2019 23:13:48 -0400 Subject: [PATCH 367/603] add 'visible' theme element --- THEMES.md | 16 ++++++++++++++-- es-app/src/components/RatingComponent.cpp | 3 +++ .../views/gamelist/DetailedGameListView.cpp | 4 ++-- .../src/views/gamelist/GridGameListView.cpp | 2 +- .../src/views/gamelist/VideoGameListView.cpp | 8 ++++---- es-core/src/GuiComponent.cpp | 19 ++++++++++++++++++- es-core/src/GuiComponent.h | 4 ++++ es-core/src/ThemeData.cpp | 15 +++++++++++---- es-core/src/ThemeData.h | 1 + es-core/src/components/ImageComponent.cpp | 8 ++++++++ es-core/src/components/NinePatchComponent.cpp | 3 +++ .../src/components/ScrollableContainer.cpp | 3 +++ es-core/src/components/TextComponent.cpp | 3 +++ es-core/src/components/VideoComponent.cpp | 8 ++++++++ .../src/components/VideoPlayerComponent.cpp | 3 +++ es-core/src/components/VideoVlcComponent.cpp | 3 +++ 16 files changed, 89 insertions(+), 14 deletions(-) diff --git a/THEMES.md b/THEMES.md index fc4ff063b1..c10b2e57d0 100644 --- a/THEMES.md +++ b/THEMES.md @@ -576,6 +576,8 @@ Can be created as an extra. - If true, the image will be tiled instead of stretched to fit its size. Useful for backgrounds. * `color` - type: COLOR. - Multiply each pixel's color by this color. For example, an all-white image with `FF0000` would become completely red. You can also control the transparency of an image with `FFFFFFAA` - keeping all the pixels their normal color and only affecting the alpha channel. +* `visible` - type: BOOLEAN. + - If true, component will be rendered, otherwise rendering will be skipped. Can be used to hide elements from a particular view. * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. @@ -632,6 +634,8 @@ Can be created as an extra. - If true, image will be shown when selected game does not have a video and no `default` video is configured. * `showSnapshotDelay` - type: BOOLEAN - If true, playing of video will be delayed for `delayed` seconds, when game is selected. +* `visible` - type: BOOLEAN. + - If true, component will be rendered, otherwise rendering will be skipped. Can be used to hide elements from a particular view. * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. @@ -662,6 +666,8 @@ Can be created as an extra. - Valid values are "left", "center", or "right". Controls alignment on the X axis. "center" will also align vertically. * `forceUppercase` - type: BOOLEAN. Draw text in uppercase. * `lineSpacing` - type: FLOAT. Controls the space between lines (as a multiple of font height). Default is 1.5. +* `visible` - type: BOOLEAN. + - If true, component will be rendered, otherwise rendering will be skipped. Can be used to hide elements from a particular view. * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. @@ -705,11 +711,13 @@ Can be created as an extra. * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. * `path` - type: PATH. - -EmulationStation borrows the concept of "nine patches" from Android (or "9-Slices"). Currently the implementation is very simple and hard-coded to only use 48x48px images (16x16px for each "patch"). Check the `data/resources` directory for some examples (button.png, frame.png). +* `visible` - type: BOOLEAN. + - If true, component will be rendered, otherwise rendering will be skipped. Can be used to hide elements from a particular view. * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. +EmulationStation borrows the concept of "nine patches" from Android (or "9-Slices"). Currently the implementation is very simple and hard-coded to only use 48x48px images (16x16px for each "patch"). Check the `data/resources` directory for some examples (button.png, frame.png). + #### rating * `pos` - type: NORMALIZED_PAIR. @@ -727,6 +735,8 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice - Path to the "unfilled star" image. Image must be square (width equals height). * `color` - type: COLOR. - Multiply each pixel's color by this color. For example, an all-white image with `FF0000` would become completely red. You can also control the transparency of an image with `FFFFFFAA` - keeping all the pixels their normal color and only affecting the alpha channel. +* `visible` - type: BOOLEAN. + - If true, component will be rendered, otherwise rendering will be skipped. Can be used to hide elements from a particular view. * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. @@ -753,6 +763,8 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice - Valid values are "left", "center", or "right". Controls alignment on the X axis. "center" will also align vertically. * `forceUppercase` - type: BOOLEAN. Draw text in uppercase. * `lineSpacing` - type: FLOAT. Controls the space between lines (as a multiple of font height). Default is 1.5. +* `visible` - type: BOOLEAN. + - If true, component will be rendered, otherwise rendering will be skipped. Can be used to hide elements from a particular view. * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. * `displayRelative` - type: BOOLEAN. Renders the datetime as a a relative string (ex: 'x days ago') diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index 924a0cbccf..bd47d91af3 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -112,6 +112,9 @@ void RatingComponent::updateColors() void RatingComponent::render(const Transform4x4f& parentTrans) { + if (!isVisible()) + return; + Transform4x4f trans = parentTrans * getTransform(); trans.round(); Renderer::setMatrix(trans); diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 87d2893f56..8eec3506e4 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -86,7 +86,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them BasicGameListView::onThemeChanged(theme); using namespace ThemeFlags; - mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION); + mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION | VISIBLE); mName.applyTheme(theme, getName(), "md_name", ALL); initMDLabels(); @@ -116,7 +116,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them values[i]->applyTheme(theme, getName(), valElements[i], ALL ^ ThemeFlags::TEXT); } - mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE | Z_INDEX); + mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE | Z_INDEX | VISIBLE); mDescription.setSize(mDescContainer.getSize().x(), 0); mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | ThemeFlags::ORIGIN | TEXT | ROTATION)); diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 91f9c08b0a..8a0fbe7c8e 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -163,7 +163,7 @@ void GridGameListView::onThemeChanged(const std::shared_ptr& theme) values[i]->applyTheme(theme, getName(), valElements[i], ALL ^ ThemeFlags::TEXT); } - mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE | Z_INDEX); + mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE | Z_INDEX | VISIBLE); mDescription.setSize(mDescContainer.getSize().x(), 0); mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | ThemeFlags::ORIGIN | TEXT | ROTATION)); diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index b57d669444..1daa91b1a1 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -123,9 +123,9 @@ void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) BasicGameListView::onThemeChanged(theme); using namespace ThemeFlags; - mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION); - mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION); - mVideo->applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY | Z_INDEX | ROTATION); + mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION | VISIBLE); + mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION | VISIBLE); + mVideo->applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY | Z_INDEX | ROTATION | VISIBLE); mName.applyTheme(theme, getName(), "md_name", ALL); initMDLabels(); @@ -155,7 +155,7 @@ void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) values[i]->applyTheme(theme, getName(), valElements[i], ALL ^ ThemeFlags::TEXT); } - mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE | Z_INDEX); + mDescContainer.applyTheme(theme, getName(), "md_description", POSITION | ThemeFlags::SIZE | Z_INDEX | VISIBLE); mDescription.setSize(mDescContainer.getSize().x(), 0); mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | ThemeFlags::ORIGIN | TEXT | ROTATION)); diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 9b7d22aa22..32be193bcd 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -10,7 +10,7 @@ GuiComponent::GuiComponent(Window* window) : mWindow(window), mParent(NULL), mOpacity(255), mPosition(Vector3f::Zero()), mOrigin(Vector2f::Zero()), mRotationOrigin(0.5, 0.5), - mSize(Vector2f::Zero()), mTransform(Transform4x4f::Identity()), mIsProcessing(false) + mSize(Vector2f::Zero()), mTransform(Transform4x4f::Identity()), mIsProcessing(false), mVisible(true) { for(unsigned char i = 0; i < MAX_ANIMATIONS; i++) mAnimationMap[i] = NULL; @@ -62,6 +62,9 @@ void GuiComponent::update(int deltaTime) void GuiComponent::render(const Transform4x4f& parentTrans) { + if (!isVisible()) + return; + Transform4x4f trans = parentTrans * getTransform(); renderChildren(trans); } @@ -157,6 +160,15 @@ void GuiComponent::setDefaultZIndex(float z) mDefaultZIndex = z; } +bool GuiComponent::isVisible() const +{ + return mVisible; +} +void GuiComponent::setVisible(bool visible) +{ + mVisible = visible; +} + Vector2f GuiComponent::getCenter() const { return Vector2f(mPosition.x() - (getSize().x() * mOrigin.x()) + getSize().x() / 2, @@ -424,6 +436,11 @@ void GuiComponent::applyTheme(const std::shared_ptr& theme, const std setZIndex(elem->get("zIndex")); else setZIndex(getDefaultZIndex()); + + if(properties & ThemeFlags::VISIBLE && elem->has("visible")) + setVisible(elem->get("visible")); + else + setVisible(true); } void GuiComponent::updateHelpPrompts() diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 4c15ba578b..0820773897 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -76,6 +76,9 @@ class GuiComponent float getDefaultZIndex() const; void setDefaultZIndex(float zIndex); + bool isVisible() const; + void setVisible(bool visible); + // Returns the center point of the image (takes origin into account). Vector2f getCenter() const; @@ -157,6 +160,7 @@ class GuiComponent float mZIndex = 0; bool mIsProcessing; + bool mVisible; public: const static unsigned char MAX_ANIMATIONS = 4; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index cf2548089f..470d210011 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -10,7 +10,7 @@ #include std::vector ThemeData::sSupportedViews { { "system" }, { "basic" }, { "detailed" }, { "grid" }, { "video" } }; -std::vector ThemeData::sSupportedFeatures { { "video" }, { "carousel" }, { "z-index" } }; +std::vector ThemeData::sSupportedFeatures { { "video" }, { "carousel" }, { "z-index" }, { "visible" } }; std::map> ThemeData::sElementMap { { "image", { @@ -24,6 +24,7 @@ std::map> The { "default", PATH }, { "tile", BOOLEAN }, { "color", COLOR }, + { "visible", BOOLEAN }, { "zIndex", FLOAT } } }, { "imagegrid", { { "pos", NORMALIZED_PAIR }, @@ -56,6 +57,7 @@ std::map> The { "forceUppercase", BOOLEAN }, { "lineSpacing", FLOAT }, { "value", STRING }, + { "visible", BOOLEAN }, { "zIndex", FLOAT } } }, { "textlist", { { "pos", NORMALIZED_PAIR }, @@ -81,11 +83,13 @@ std::map> The { "pos", NORMALIZED_PAIR }, { "size", NORMALIZED_PAIR }, { "origin", NORMALIZED_PAIR }, - { "zIndex", FLOAT } } }, + { "visible", BOOLEAN }, + { "zIndex", FLOAT } } }, { "ninepatch", { { "pos", NORMALIZED_PAIR }, { "size", NORMALIZED_PAIR }, { "path", PATH }, + { "visible", BOOLEAN }, { "zIndex", FLOAT } } }, { "datetime", { { "pos", NORMALIZED_PAIR }, @@ -103,7 +107,8 @@ std::map> The { "value", STRING }, { "format", STRING }, { "displayRelative", BOOLEAN }, - { "zIndex", FLOAT } } }, + { "visible", BOOLEAN }, + { "zIndex", FLOAT } } }, { "rating", { { "pos", NORMALIZED_PAIR }, { "size", NORMALIZED_PAIR }, @@ -113,6 +118,7 @@ std::map> The { "color", COLOR }, { "filledPath", PATH }, { "unfilledPath", PATH }, + { "visible", BOOLEAN }, { "zIndex", FLOAT } } }, { "sound", { { "path", PATH } } }, @@ -132,7 +138,8 @@ std::map> The { "rotationOrigin", NORMALIZED_PAIR }, { "default", PATH }, { "delay", FLOAT }, - { "zIndex", FLOAT }, + { "visible", BOOLEAN }, + { "zIndex", FLOAT }, { "showSnapshotNoVideo", BOOLEAN }, { "showSnapshotDelay", BOOLEAN } } }, { "carousel", { diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 4fc9faa747..a2e9db3922 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -41,6 +41,7 @@ namespace ThemeFlags DELAY = 4096, Z_INDEX = 8192, ROTATION = 16384, + VISIBLE = 32768, ALL = 0xFFFFFFFF }; } diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 14f5fac134..67b03782af 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -317,6 +317,9 @@ void ImageComponent::updateColors() void ImageComponent::render(const Transform4x4f& parentTrans) { + if (!isVisible()) + return; + Transform4x4f trans = parentTrans * getTransform(); Renderer::setMatrix(trans); @@ -466,6 +469,11 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s setZIndex(elem->get("zIndex")); else setZIndex(getDefaultZIndex()); + + if(properties & ThemeFlags::VISIBLE && elem->has("visible")) + setVisible(elem->get("visible")); + else + setVisible(true); } std::vector ImageComponent::getHelpPrompts() diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index fedf95115b..4088e69f3a 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -103,6 +103,9 @@ void NinePatchComponent::buildVertices() void NinePatchComponent::render(const Transform4x4f& parentTrans) { + if (!isVisible()) + return; + Transform4x4f trans = parentTrans * getTransform(); trans.round(); diff --git a/es-core/src/components/ScrollableContainer.cpp b/es-core/src/components/ScrollableContainer.cpp index cedc547ce9..ba9116b162 100644 --- a/es-core/src/components/ScrollableContainer.cpp +++ b/es-core/src/components/ScrollableContainer.cpp @@ -13,6 +13,9 @@ ScrollableContainer::ScrollableContainer(Window* window) : GuiComponent(window), void ScrollableContainer::render(const Transform4x4f& parentTrans) { + if (!isVisible()) + return; + Transform4x4f trans = parentTrans * getTransform(); Vector2i clipPos((int)trans.translation().x(), (int)trans.translation().y()); diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index d1fc995f40..8c4083b2c3 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -95,6 +95,9 @@ void TextComponent::setUppercase(bool uppercase) void TextComponent::render(const Transform4x4f& parentTrans) { + if (!isVisible()) + return; + Transform4x4f trans = parentTrans * getTransform(); if (mRenderBackground) diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 6cd5f082a1..b76ed273b4 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -145,6 +145,9 @@ void VideoComponent::setOpacity(unsigned char opacity) void VideoComponent::render(const Transform4x4f& parentTrans) { + if (!isVisible()) + return; + Transform4x4f trans = parentTrans * getTransform(); GuiComponent::renderChildren(trans); @@ -223,6 +226,11 @@ void VideoComponent::applyTheme(const std::shared_ptr& theme, const s setZIndex(elem->get("zIndex")); else setZIndex(getDefaultZIndex()); + + if(properties & ThemeFlags::VISIBLE && elem->has("visible")) + setVisible(elem->get("visible")); + else + setVisible(true); } std::vector VideoComponent::getHelpPrompts() diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 0b0948e427..b7666e73d2 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -30,6 +30,9 @@ VideoPlayerComponent::~VideoPlayerComponent() void VideoPlayerComponent::render(const Transform4x4f& parentTrans) { + if (!isVisible()) + return; + VideoComponent::render(parentTrans); if (!mIsPlaying || mPlayerPid == -1) diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 91f7532e40..5a381b793c 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -131,6 +131,9 @@ void VideoVlcComponent::resize() void VideoVlcComponent::render(const Transform4x4f& parentTrans) { + if (!isVisible()) + return; + VideoComponent::render(parentTrans); float x, y; From 3f012aeef59c237b9ccb7596f3142c2eaf646a0c Mon Sep 17 00:00:00 2001 From: Hanno Zulla Date: Fri, 26 Jul 2019 12:38:54 +0200 Subject: [PATCH 368/603] Add BigBen kid's PS3 gamepad 146b:0902 to filterTrigger() --- es-core/src/guis/GuiInputConfig.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index 29111a4841..da7f5bdced 100755 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -339,11 +339,17 @@ void GuiInputConfig::clearAssignment(int inputId) bool GuiInputConfig::filterTrigger(Input input, InputConfig* config, int inputId) { #if defined(__linux__) - // match PlayStation joystick with 6 axes only - if((strstr(config->getDeviceName().c_str(), "PLAYSTATION") != NULL \ - || strstr(config->getDeviceName().c_str(), "PS3 Ga") != NULL \ - || strstr(config->getDeviceName().c_str(), "PS(R) Ga") != NULL) \ - && InputManager::getInstance()->getAxisCountByDevice(config->getDeviceId()) == 6) + // on Linux, some gamepads return both an analog axis and a digital button for the trigger; + // we want the analog axis only, so this function removes the button press event + + if(( + // match PlayStation joystick with 6 axes only + strstr(config->getDeviceName().c_str(), "PLAYSTATION") != NULL + || strstr(config->getDeviceName().c_str(), "PS3 Ga") != NULL + || strstr(config->getDeviceName().c_str(), "PS(R) Ga") != NULL + // BigBen kid's PS3 gamepad 146b:0902, matched on SDL GUID because its name "Bigben Interactive Bigben Game Pad" may be too generic + || strcmp(config->getDeviceGUIDString().c_str(), "030000006b1400000209000011010000") == 0 + ) && InputManager::getInstance()->getAxisCountByDevice(config->getDeviceId()) == 6) { // digital triggers are unwanted if (input.type == TYPE_BUTTON && (input.id == 6 || input.id == 7)) From 3f9ae446c8efc21e72483a9d94e13b3cf750e084 Mon Sep 17 00:00:00 2001 From: Marian Flor Date: Sun, 28 Jul 2019 18:04:57 +0200 Subject: [PATCH 369/603] reapplied #560 without whitespace changes --- es-app/src/SystemScreenSaver.cpp | 2 +- .../src/guis/GuiGeneralScreensaverOptions.cpp | 36 ++++++++++++++++--- es-core/src/Scripting.cpp | 25 +++++++++---- es-core/src/Scripting.h | 2 +- es-core/src/Settings.cpp | 4 ++- es-core/src/Settings.h | 1 + es-core/src/Window.cpp | 29 ++++++++++----- es-core/src/guis/GuiInputConfig.cpp | 0 es-core/src/utils/FileSystemUtil.cpp | 14 ++++++++ es-core/src/utils/FileSystemUtil.h | 3 ++ 10 files changed, 92 insertions(+), 24 deletions(-) mode change 100755 => 100644 es-core/src/guis/GuiInputConfig.cpp diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 1837b94aa1..444b2293b2 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -225,7 +225,7 @@ void SystemScreenSaver::renderScreenSaver() Renderer::setMatrix(Transform4x4f::Identity()); Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), (unsigned char)(255)); - // Only render the video if the state requires it + // Only render the image if the state requires it if ((int)mState >= STATE_FADE_IN_VIDEO) { if (mImageScreensaver->hasImage()) diff --git a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp index 30688c566c..774a625b56 100644 --- a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp +++ b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp @@ -12,13 +12,13 @@ GuiGeneralScreensaverOptions::GuiGeneralScreensaverOptions(Window* window, const { // screensaver time auto screensaver_time = std::make_shared(mWindow, 0.f, 30.f, 1.f, "m"); - screensaver_time->setValue((float)(Settings::getInstance()->getInt("ScreenSaverTime") / (1000 * 60))); + screensaver_time->setValue((float)(Settings::getInstance()->getInt("ScreenSaverTime") / Settings::ONE_MINUTE_IN_MS)); addWithLabel("SCREENSAVER AFTER", screensaver_time); addSaveFunc([screensaver_time] { - Settings::getInstance()->setInt("ScreenSaverTime", (int)Math::round(screensaver_time->getValue()) * (1000 * 60)); - PowerSaver::updateTimeouts(); + Settings::getInstance()->setInt("ScreenSaverTime", (int)Math::round(screensaver_time->getValue()) * Settings::ONE_MINUTE_IN_MS); + PowerSaver::updateTimeouts(); }); - + // Allow ScreenSaver Controls - ScreenSaverControls auto ss_controls = std::make_shared(mWindow); ss_controls->setState(Settings::getInstance()->getBool("ScreenSaverControls")); @@ -60,6 +60,33 @@ GuiGeneralScreensaverOptions::GuiGeneralScreensaverOptions(Window* window, const row.addElement(makeArrow(mWindow), false); row.makeAcceptInputHandler(std::bind(&GuiGeneralScreensaverOptions::openSlideshowScreensaverOptions, this)); addRow(row); + + // system sleep time + float stepw = 5.f; + float max = 120.f; + auto system_sleep_time = std::make_shared(mWindow, 0.f, max, stepw, "m"); + system_sleep_time->setValue((float)(Settings::getInstance()->getInt("SystemSleepTime") / Settings::ONE_MINUTE_IN_MS)); + addWithLabel("SYSTEM SLEEP AFTER", system_sleep_time); + addSaveFunc([this, system_sleep_time, screensaver_time, max, stepw] { + if (screensaver_time->getValue() > system_sleep_time->getValue() && system_sleep_time->getValue() > 0) { + int steps = Math::min(1 + (int)(screensaver_time->getValue() / stepw), (int)(max/stepw)); + int adj_system_sleep_time = steps*stepw; + system_sleep_time->setValue((float)adj_system_sleep_time); + std::string msg = ""; + if (!Settings::getInstance()->getBool("SystemSleepTimeHintDisplayed")) { + msg += "One time note: Enabling the system sleep time will trigger user-defined scripts."; + msg += "\nPlease see Retropie/Emulationstation Wiki on events for details."; + Settings::getInstance()->setBool("SystemSleepTimeHintDisplayed", true); + } + if (msg.length() > 0) { + msg += "\n\n"; + } + msg += "The system sleep delay is enabled, but is less than or equal to the screen saver start delay."; + msg += "\n\nAdjusted system sleep time to " + std::to_string(adj_system_sleep_time) + " minutes."; + mWindow->pushGui(new GuiMsgBox(mWindow, msg, "OK", [] { return; })); + } + Settings::getInstance()->setInt("SystemSleepTime", (int)Math::round(system_sleep_time->getValue()) * Settings::ONE_MINUTE_IN_MS); + }); } GuiGeneralScreensaverOptions::~GuiGeneralScreensaverOptions() @@ -73,4 +100,3 @@ void GuiGeneralScreensaverOptions::openVideoScreensaverOptions() { void GuiGeneralScreensaverOptions::openSlideshowScreensaverOptions() { mWindow->pushGui(new GuiSlideshowScreensaverOptions(mWindow, "SLIDESHOW SCREENSAVER")); } - diff --git a/es-core/src/Scripting.cpp b/es-core/src/Scripting.cpp index 3038db0a40..08725a6708 100644 --- a/es-core/src/Scripting.cpp +++ b/es-core/src/Scripting.cpp @@ -5,9 +5,9 @@ namespace Scripting { - void fireEvent(const std::string& eventName, const std::string& arg1, const std::string& arg2) - { - LOG(LogDebug) << "fireEvent: " << eventName << " " << arg1 << " " << arg2; + int fireEvent(const std::string& eventName, const std::string& arg1, const std::string& arg2) + { + LOG(LogDebug) << "fireEvent: " << eventName << " " << arg1 << " " << arg2; std::list scriptDirList; std::string test; @@ -21,16 +21,27 @@ namespace Scripting test = Utils::FileSystem::getHomePath() + "/.emulationstation/scripts/" + eventName; if(Utils::FileSystem::exists(test)) scriptDirList.push_back(test); - + // loop over found script paths per event and over scripts found in eventName folder. for(std::list::const_iterator dirIt = scriptDirList.cbegin(); dirIt != scriptDirList.cend(); ++dirIt) { std::list scripts = Utils::FileSystem::getDirContent(*dirIt); for (std::list::const_iterator it = scripts.cbegin(); it != scripts.cend(); ++it) { - // append folder to path - std::string script = *it + " \"" + arg1 + "\" \"" + arg2 + "\""; +#ifndef WIN32 // osx / linux + if (!Utils::FileSystem::isExecutable(*it)) { + LOG(LogWarning) << *it << " is not executable. Did you 'chmod u+x'?. Skipping this script."; + continue; + } +#endif + std::string script = *it; + if (arg1.length() > 0) { + script += " \"" + arg1 + "\""; + if (arg2.length() > 0) { + script += " \"" + arg2 + "\""; + } + } LOG(LogDebug) << " executing: " << script; runSystemCommand(script); } } - } + } } // Scripting:: diff --git a/es-core/src/Scripting.h b/es-core/src/Scripting.h index 3089a538cd..ad0d85294a 100644 --- a/es-core/src/Scripting.h +++ b/es-core/src/Scripting.h @@ -6,7 +6,7 @@ namespace Scripting { - void fireEvent(const std::string& eventName, const std::string& arg1="", const std::string& arg2=""); + int fireEvent(const std::string& eventName, const std::string& arg1="", const std::string& arg2=""); } // Scripting:: #endif //ES_CORE_SCRIPTING_H diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 455bea453a..4c50d62857 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -83,7 +83,9 @@ void Settings::setDefaults() mBoolMap["DebugText"] = false; mBoolMap["DebugImage"] = false; - mIntMap["ScreenSaverTime"] = 5*60*1000; // 5 minutes + mIntMap["ScreenSaverTime"] = 5 * Settings::ONE_MINUTE_IN_MS; + mIntMap["SystemSleepTime"] = 0 * Settings::ONE_MINUTE_IN_MS; + mBoolMap["SystemSleepTimeHintDisplayed"] = false; mIntMap["ScraperResizeWidth"] = 400; mIntMap["ScraperResizeHeight"] = 0; #ifdef _RPI_ diff --git a/es-core/src/Settings.h b/es-core/src/Settings.h index 413694b719..27a643b434 100644 --- a/es-core/src/Settings.h +++ b/es-core/src/Settings.h @@ -8,6 +8,7 @@ class Settings { public: + static const int ONE_MINUTE_IN_MS = 1000 * 60; static Settings* getInstance(); void loadFile(); diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 0f33e5e240..93c7be87a3 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -269,16 +269,13 @@ void Window::render() { mInfoPopup->render(transform); } - + if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0) { - if (!isProcessing() && mAllowSleep && (!mScreenSaver || mScreenSaver->allowSleep())) - { - // go to sleep - if (mSleeping == false) { - mSleeping = true; - onSleep(); - } + unsigned int systemSleepTime = (unsigned int)Settings::getInstance()->getInt("SystemSleepTime"); + if(!isProcessing() && mAllowSleep && systemSleepTime != 0 && mTimeSinceLastInput >= systemSleepTime) { + mSleeping = true; + onSleep(); } } } @@ -401,7 +398,19 @@ void Window::setHelpPrompts(const std::vector& prompts, const HelpSt void Window::onSleep() { - Scripting::fireEvent("sleep"); + if (Settings::getInstance()->getBool("Windowed")) { + LOG(LogInfo) << "running windowed. No further onSleep() processing."; + return; + } + + int gotErrors = Scripting::fireEvent("sleep"); + + if (gotErrors == 0 && mScreenSaver && mRenderScreenSaver) + { + mScreenSaver->stopScreenSaver(); + mRenderScreenSaver = false; + mScreenSaver->resetCounts(); + } } void Window::onWake() @@ -424,6 +433,7 @@ void Window::startScreenSaver() mScreenSaver->startScreenSaver(); mRenderScreenSaver = true; + Scripting::fireEvent("screensaver-start"); } } @@ -434,6 +444,7 @@ bool Window::cancelScreenSaver() mScreenSaver->stopScreenSaver(); mRenderScreenSaver = false; mScreenSaver->resetCounts(); + Scripting::fireEvent("screensaver-stop"); // Tell the GUI components the screensaver has stopped for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp old mode 100755 new mode 100644 diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 5a0a351c97..91389e90ba 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -651,6 +651,20 @@ namespace Utils return false; } // isHidden +#ifndef WIN32 // osx / linux + bool isExecutable(const std::string& _path) { + struct stat64 st; + if(stat64(_path.c_str(), &st) == 0){ + mode_t perm = st.st_mode; + // regular files and executables but not setuid, setgid, shared text (mode 0755) + mode_t mask = S_IFREG | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; + if(perm & mask == perm){ + return true; + } + } + return false; + } // isExecutable +#endif } // FileSystem:: diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index 48c7f4f5ac..a4e6bdfb6c 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -37,6 +37,9 @@ namespace Utils bool isDirectory (const std::string& _path); bool isSymlink (const std::string& _path); bool isHidden (const std::string& _path); +#ifndef WIN32 // osx / linux + bool isExecutable (const std::string& _path); +#endif } // FileSystem:: From 023e9d8916a3ef3e50c0d40567082945a062d271 Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Mon, 29 Jul 2019 14:59:46 +0300 Subject: [PATCH 370/603] Eliminate duplicate requests when multiple platforms are present for a system --- es-app/src/scrapers/ScreenScraper.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index e9eb53378b..75dc4eea14 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -127,19 +127,32 @@ void screenscraper_generate_scraper_requests(const ScraperSearchParams& params, path = ssConfig.getGameSearchUrl(params.game->getFileName()); auto& platforms = params.system->getPlatformIds(); + std::vector p_ids; + // Get the IDs of each platform from the ScreenScraper list for (auto platformIt = platforms.cbegin(); platformIt != platforms.cend(); platformIt++) { auto mapIt = screenscraper_platformid_map.find(*platformIt); if (mapIt != screenscraper_platformid_map.cend()) { - path += "&systemeid="; - path += HttpReq::urlEncode(std::to_string(mapIt->second)); + p_ids.push_back(mapIt->second); }else{ LOG(LogWarning) << "ScreenScraper: no support for platform " << getPlatformName(*platformIt); + // Add the scrape request without a platform/system ID + requests.push(std::unique_ptr(new ScreenScraperRequest(requests, results, path))); } + } + + // Sort the platform IDs and remove duplicates + std::sort(p_ids.begin(), p_ids.end()); + auto last = std::unique(p_ids.begin(), p_ids.end()); + p_ids.erase(last, p_ids.end()); + for (auto platform = p_ids.cbegin(); platform != p_ids.cend(); platform++) + { + path += "&systemeid="; + path += HttpReq::urlEncode(std::to_string(*platform)); requests.push(std::unique_ptr(new ScreenScraperRequest(requests, results, path))); } From 28168667ea9a0addd16dfb82253c4f5dfef0e927 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 8 Aug 2019 17:45:11 +0200 Subject: [PATCH 371/603] Fix Transform4x4f which was broken in many, many ways, but just out of pure luck worked anyway --- es-core/src/math/Transform4x4f.cpp | 132 ++++++++++++++--------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/es-core/src/math/Transform4x4f.cpp b/es-core/src/math/Transform4x4f.cpp index b26e5a2fcb..4944c08455 100644 --- a/es-core/src/math/Transform4x4f.cpp +++ b/es-core/src/math/Transform4x4f.cpp @@ -8,21 +8,21 @@ const Transform4x4f Transform4x4f::operator*(const Transform4x4f& _other) const return { { - tm[ 0] * om[ 0] + tm[ 1] * om[ 4] + tm[ 2] * om[ 8], - tm[ 0] * om[ 1] + tm[ 1] * om[ 5] + tm[ 2] * om[ 9], - tm[ 0] * om[ 2] + tm[ 1] * om[ 6] + tm[ 2] * om[10], + tm[ 0] * om[ 0] + tm[ 4] * om[ 1] + tm[ 8] * om[ 2], + tm[ 1] * om[ 0] + tm[ 5] * om[ 1] + tm[ 9] * om[ 2], + tm[ 2] * om[ 0] + tm[ 6] * om[ 1] + tm[10] * om[ 2], 0 }, { - tm[ 4] * om[ 0] + tm[ 5] * om[ 4] + tm[ 6] * om[ 8], - tm[ 4] * om[ 1] + tm[ 5] * om[ 5] + tm[ 6] * om[ 9], - tm[ 4] * om[ 2] + tm[ 5] * om[ 6] + tm[ 6] * om[10], + tm[ 0] * om[ 4] + tm[ 4] * om[ 5] + tm[ 8] * om[ 6], + tm[ 1] * om[ 4] + tm[ 5] * om[ 5] + tm[ 9] * om[ 6], + tm[ 2] * om[ 4] + tm[ 6] * om[ 5] + tm[10] * om[ 6], 0 }, { - tm[ 8] * om[ 0] + tm[ 9] * om[ 4] + tm[10] * om[ 8], - tm[ 8] * om[ 1] + tm[ 9] * om[ 5] + tm[10] * om[ 9], - tm[ 8] * om[ 2] + tm[ 9] * om[ 6] + tm[10] * om[10], + tm[ 0] * om[ 8] + tm[ 4] * om[ 9] + tm[ 8] * om[10], + tm[ 1] * om[ 8] + tm[ 5] * om[ 9] + tm[ 9] * om[10], + tm[ 2] * om[ 8] + tm[ 6] * om[ 9] + tm[10] * om[10], 0 }, { @@ -91,9 +91,9 @@ Transform4x4f& Transform4x4f::invert(const Transform4x4f& _other) tm[15] = 1; float Determinant = om[ 0] * tm[ 0] + - om[ 4] * tm[ 1] + - om[ 8] * tm[ 2] + - om[12] * tm[ 3]; + om[ 4] * tm[ 1] + + om[ 8] * tm[ 2] + + om[12] * tm[ 3]; if(Determinant != 0) Determinant = 1 / Determinant; @@ -121,13 +121,13 @@ Transform4x4f& Transform4x4f::scale(const Vector3f& _scale) const float* sv = (float*)&_scale; tm[ 0] *= sv[0]; - tm[ 1] *= sv[1]; - tm[ 2] *= sv[2]; - tm[ 4] *= sv[0]; + tm[ 1] *= sv[0]; + tm[ 2] *= sv[0]; + tm[ 4] *= sv[1]; tm[ 5] *= sv[1]; - tm[ 6] *= sv[2]; - tm[ 8] *= sv[0]; - tm[ 9] *= sv[1]; + tm[ 6] *= sv[1]; + tm[ 8] *= sv[2]; + tm[ 9] *= sv[2]; tm[10] *= sv[2]; return *this; @@ -151,23 +151,23 @@ Transform4x4f& Transform4x4f::rotate(const float _angle, const Vector3f& _axis) const float sy = s * y; const float sz = s * z; const float r[9] = { tx * x + c, - tx * y - sz, - tx * z + sy, - ty * x + sz, - ty * y + c, - ty * z - sx, - tz * x - sy, - tz * y + sx, - tz * z + c }; - const float temp[9] = { tm[ 0] * r[0] + tm[ 1] * r[3] + tm[ 2] * r[6], - tm[ 0] * r[1] + tm[ 1] * r[4] + tm[ 2] * r[7], - tm[ 0] * r[2] + tm[ 1] * r[5] + tm[ 2] * r[8], - tm[ 4] * r[0] + tm[ 5] * r[3] + tm[ 6] * r[6], - tm[ 4] * r[1] + tm[ 5] * r[4] + tm[ 6] * r[7], - tm[ 4] * r[2] + tm[ 5] * r[5] + tm[ 6] * r[8], - tm[ 8] * r[0] + tm[ 9] * r[3] + tm[10] * r[6], - tm[ 8] * r[1] + tm[ 9] * r[4] + tm[10] * r[7], - tm[ 8] * r[2] + tm[ 9] * r[5] + tm[10] * r[8] }; + tx * y - sz, + tx * z + sy, + ty * x + sz, + ty * y + c, + ty * z - sx, + tz * x - sy, + tz * y + sx, + tz * z + c }; + const float temp[9] = { tm[ 0] * r[0] + tm[ 4] * r[1] + tm[ 8] * r[2], + tm[ 1] * r[0] + tm[ 5] * r[1] + tm[ 9] * r[2], + tm[ 2] * r[0] + tm[ 6] * r[1] + tm[10] * r[2], + tm[ 0] * r[3] + tm[ 4] * r[4] + tm[ 8] * r[5], + tm[ 1] * r[3] + tm[ 5] * r[4] + tm[ 9] * r[5], + tm[ 2] * r[3] + tm[ 6] * r[4] + tm[ 0] * r[5], + tm[ 0] * r[6] + tm[ 4] * r[7] + tm[ 8] * r[8], + tm[ 1] * r[6] + tm[ 5] * r[7] + tm[ 9] * r[8], + tm[ 2] * r[6] + tm[ 6] * r[7] + tm[10] * r[8] }; tm[ 0] = temp[0]; tm[ 1] = temp[1]; @@ -188,17 +188,17 @@ Transform4x4f& Transform4x4f::rotateX(const float _angle) float* tm = (float*)this; const float s = Math::sinf(-_angle); const float c = Math::cosf(-_angle); - const float temp[6] = { tm[ 1] * c + tm[ 2] * s, - tm[ 1] * -s + tm[ 2] * c, - tm[ 5] * c + tm[ 6] * s, - tm[ 5] * -s + tm[ 6] * c, - tm[ 9] * c + tm[10] * s, - tm[ 9] * -s + tm[10] * c }; - - tm[ 1] = temp[0]; - tm[ 2] = temp[1]; - tm[ 5] = temp[2]; - tm[ 6] = temp[3]; + const float temp[6] = { tm[ 4] * c + tm[ 8] * -s, + tm[ 5] * c + tm[ 9] * -c, + tm[ 6] * c + tm[10] * -s, + tm[ 4] * s + tm[ 8] * c, + tm[ 5] * s + tm[ 9] * c, + tm[ 6] * s + tm[10] * c }; + + tm[ 4] = temp[0]; + tm[ 5] = temp[1]; + tm[ 6] = temp[2]; + tm[ 8] = temp[3]; tm[ 9] = temp[4]; tm[10] = temp[5]; @@ -211,18 +211,18 @@ Transform4x4f& Transform4x4f::rotateY(const float _angle) float* tm = (float*)this; const float s = Math::sinf(-_angle); const float c = Math::cosf(-_angle); - const float temp[6] = { tm[ 0] * c + tm[ 2] * -s, - tm[ 0] * s + tm[ 2] * c, - tm[ 4] * c + tm[ 6] * -s, - tm[ 4] * s + tm[ 6] * c, - tm[ 8] * c + tm[10] * -s, - tm[ 8] * s + tm[10] * c }; + const float temp[6] = { tm[ 0] * c + tm[ 8] * s, + tm[ 1] * c + tm[ 9] * s, + tm[ 2] * c + tm[10] * s, + tm[ 0] * -s + tm[ 8] * c, + tm[ 1] * -s + tm[ 9] * c, + tm[ 2] * -s + tm[10] * c }; tm[ 0] = temp[0]; - tm[ 2] = temp[1]; - tm[ 4] = temp[2]; - tm[ 6] = temp[3]; - tm[ 8] = temp[4]; + tm[ 1] = temp[1]; + tm[ 2] = temp[2]; + tm[ 8] = temp[3]; + tm[ 9] = temp[4]; tm[10] = temp[5]; return *this; @@ -234,19 +234,19 @@ Transform4x4f& Transform4x4f::rotateZ(const float _angle) float* tm = (float*)this; const float s = Math::sinf(-_angle); const float c = Math::cosf(-_angle); - const float temp[6] = { tm[ 0] * c + tm[ 1] * s, - tm[ 0] * -s + tm[ 1] * c, - tm[ 4] * c + tm[ 5] * s, - tm[ 4] * -s + tm[ 5] * c, - tm[ 8] * c + tm[ 9] * s, - tm[ 8] * -s + tm[ 9] * c }; + const float temp[6] = { tm[ 0] * c + tm[ 4] * -s, + tm[ 1] * c + tm[ 5] * -s, + tm[ 2] * c + tm[ 6] * -s, + tm[ 0] * s + tm[ 4] * c, + tm[ 1] * s + tm[ 5] * c, + tm[ 2] * s + tm[ 6] * c }; tm[ 0] = temp[0]; tm[ 1] = temp[1]; - tm[ 4] = temp[2]; - tm[ 5] = temp[3]; - tm[ 8] = temp[4]; - tm[ 9] = temp[5]; + tm[ 2] = temp[2]; + tm[ 4] = temp[3]; + tm[ 5] = temp[4]; + tm[ 6] = temp[5]; return *this; From ce8b16aacf2bade21a6d0a03f21d1deff78bc6e8 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 8 Aug 2019 21:49:48 +0200 Subject: [PATCH 372/603] Add Transform4x4f::orthoProjection --- es-core/src/math/Transform4x4f.cpp | 39 ++++++++++++++++++++++++++++++ es-core/src/math/Transform4x4f.h | 17 +++++++------ 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/es-core/src/math/Transform4x4f.cpp b/es-core/src/math/Transform4x4f.cpp index 4944c08455..f8ed5621b1 100644 --- a/es-core/src/math/Transform4x4f.cpp +++ b/es-core/src/math/Transform4x4f.cpp @@ -49,6 +49,45 @@ const Vector3f Transform4x4f::operator*(const Vector3f& _other) const } // operator* +Transform4x4f& Transform4x4f::orthoProjection(float _left, float _right, float _bottom, float _top, float _near, float _far) +{ + float* tm = (float*)this; + const float o[6] = { 2 / (_right - _left), + 2 / (_top - _bottom), + -2 / (_far - _near), + -(_right + _left) / (_right - _left), + -(_top + _bottom) / (_top - _bottom), + -(_far + _near) / (_far - _near) }; + const float temp[12] = { tm[ 0] * o[0], + tm[ 1] * o[0], + tm[ 2] * o[0], + tm[ 4] * o[1], + tm[ 5] * o[1], + tm[ 6] * o[1], + tm[ 8] * o[2], + tm[ 9] * o[2], + tm[10] * o[2], + tm[ 0] * o[3] + tm[ 4] * o[4] + tm[ 8] * o[5] + tm[12], + tm[ 1] * o[3] + tm[ 5] * o[4] + tm[ 9] * o[5] + tm[13], + tm[ 2] * o[3] + tm[ 6] * o[4] + tm[10] * o[5] + tm[14] }; + + tm[ 0] = temp[ 0]; + tm[ 1] = temp[ 1]; + tm[ 2] = temp[ 2]; + tm[ 4] = temp[ 3]; + tm[ 5] = temp[ 4]; + tm[ 6] = temp[ 5]; + tm[ 8] = temp[ 6]; + tm[ 9] = temp[ 7]; + tm[10] = temp[ 8]; + tm[12] = temp[ 9]; + tm[13] = temp[10]; + tm[14] = temp[11]; + + return *this; + +} // orthoProjection + Transform4x4f& Transform4x4f::invert(const Transform4x4f& _other) { float* tm = (float*)this; diff --git a/es-core/src/math/Transform4x4f.h b/es-core/src/math/Transform4x4f.h index b1646a692d..0f70a94baf 100644 --- a/es-core/src/math/Transform4x4f.h +++ b/es-core/src/math/Transform4x4f.h @@ -25,14 +25,15 @@ class Transform4x4f inline const Vector4f& r2() const { return mR2; } inline const Vector4f& r3() const { return mR3; } - Transform4x4f& invert (const Transform4x4f& _other); - Transform4x4f& scale (const Vector3f& _scale); - Transform4x4f& rotate (const float _angle, const Vector3f& _axis); - Transform4x4f& rotateX (const float _angle); - Transform4x4f& rotateY (const float _angle); - Transform4x4f& rotateZ (const float _angle); - Transform4x4f& translate(const Vector3f& _translation); - Transform4x4f& round (); + Transform4x4f& orthoProjection(float _left, float _right, float _bottom, float _top, float _near, float _far); + Transform4x4f& invert (const Transform4x4f& _other); + Transform4x4f& scale (const Vector3f& _scale); + Transform4x4f& rotate (const float _angle, const Vector3f& _axis); + Transform4x4f& rotateX (const float _angle); + Transform4x4f& rotateY (const float _angle); + Transform4x4f& rotateZ (const float _angle); + Transform4x4f& translate (const Vector3f& _translation); + Transform4x4f& round (); inline Vector3f& translation() { return mR3.v3(); } inline const Vector3f& translation() const { return mR3.v3(); } From f47fb048d57eae0623a684924cb87460133cb88c Mon Sep 17 00:00:00 2001 From: Fabrice CARUSO Date: Thu, 15 Aug 2019 01:50:23 +0200 Subject: [PATCH 373/603] Fix shutdown on Windows + process shutdown commands after main loop --- es-app/src/guis/GuiMenu.cpp | 8 ++++---- es-app/src/main.cpp | 2 ++ es-core/src/platform.cpp | 35 ++++++++++++++++++++++++++++++----- es-core/src/platform.h | 14 ++++++++++---- 4 files changed, 46 insertions(+), 13 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 59d8ae4150..800a4918a1 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -476,7 +476,7 @@ void GuiMenu::openQuitMenu() window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", [] { Scripting::fireEvent("quit"); - if(quitES("/tmp/es-restart") != 0) + if(quitES(QuitMode::RESTART) != 0) LOG(LogWarning) << "Restart terminated with non-zero result!"; }, "NO", nullptr)); }); @@ -492,7 +492,7 @@ void GuiMenu::openQuitMenu() window->pushGui(new GuiMsgBox(window, "REALLY QUIT?", "YES", [] { Scripting::fireEvent("quit"); - quitES(""); + quitES(); }, "NO", nullptr)); }); row.addElement(std::make_shared(window, "QUIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); @@ -505,7 +505,7 @@ void GuiMenu::openQuitMenu() [] { Scripting::fireEvent("quit", "reboot"); Scripting::fireEvent("reboot"); - if (quitES("/tmp/es-sysrestart") != 0) + if (quitES(QuitMode::REBOOT) != 0) LOG(LogWarning) << "Restart terminated with non-zero result!"; }, "NO", nullptr)); }); @@ -518,7 +518,7 @@ void GuiMenu::openQuitMenu() [] { Scripting::fireEvent("quit", "shutdown"); Scripting::fireEvent("shutdown"); - if (quitES("/tmp/es-shutdown") != 0) + if (quitES(QuitMode::SHUTDOWN) != 0) LOG(LogWarning) << "Shutdown terminated with non-zero result!"; }, "NO", nullptr)); }); diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 6c1fe80ef6..d25e910bcd 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -440,6 +440,8 @@ int main(int argc, char* argv[]) FreeImage_DeInitialise(); #endif + processQuitMode(); + LOG(LogInfo) << "EmulationStation cleanly shutting down."; return 0; diff --git a/es-core/src/platform.cpp b/es-core/src/platform.cpp index 81722a549c..d3b87fb27f 100644 --- a/es-core/src/platform.cpp +++ b/es-core/src/platform.cpp @@ -8,6 +8,8 @@ #endif #include +#include "Log.h" + int runShutdownCommand() { #ifdef WIN32 // windows @@ -40,11 +42,13 @@ int runSystemCommand(const std::string& cmd_utf8) #endif } -int quitES(const std::string& filename) +QuitMode quitMode = QuitMode::QUIT; + +int quitES(QuitMode mode) { - if (!filename.empty()) - touch(filename); - SDL_Event* quit = new SDL_Event(); + quitMode = mode; + + SDL_Event *quit = new SDL_Event(); quit->type = SDL_QUIT; SDL_PushEvent(quit); return 0; @@ -61,4 +65,25 @@ void touch(const std::string& filename) if (fd >= 0) close(fd); #endif -} \ No newline at end of file +} + +void processQuitMode() +{ + switch (quitMode) + { + case QuitMode::RESTART: + LOG(LogInfo) << "Restarting EmulationStation"; + touch("/tmp/es-restart"); + break; + case QuitMode::REBOOT: + LOG(LogInfo) << "Rebooting system"; + touch("/tmp/es-sysrestart"); + runRestartCommand(); + break; + case QuitMode::SHUTDOWN: + LOG(LogInfo) << "Shutting system down"; + touch("/tmp/es-shutdown"); + runShutdownCommand(); + break; + } +} diff --git a/es-core/src/platform.h b/es-core/src/platform.h index 7ffaf5d31e..7c09d8e37c 100644 --- a/es-core/src/platform.h +++ b/es-core/src/platform.h @@ -21,10 +21,16 @@ #define GLHEADER #endif -int runShutdownCommand(); // shut down the system (returns 0 if successful) -int runRestartCommand(); // restart the system (returns 0 if successful) +enum QuitMode +{ + QUIT = 0, + RESTART = 1, + SHUTDOWN = 2, + REBOOT = 3 +}; + int runSystemCommand(const std::string& cmd_utf8); // run a utf-8 encoded in the shell (requires wstring conversion on Windows) -int quitES(const std::string& filename); -void touch(const std::string& filename); +int quitES(QuitMode mode = QuitMode::QUIT); +void processQuitMode(); #endif // ES_CORE_PLATFORM_H From 95de3aae7f083cd5fc88f59e38dfe695eb379646 Mon Sep 17 00:00:00 2001 From: Fabrice CARUSO Date: Fri, 16 Aug 2019 09:47:37 +0200 Subject: [PATCH 374/603] Add --home command line to set custom home path + make windows version natively portable by detecting if .emulationstation is a subfolder of the exe. --- es-app/src/main.cpp | 19 +++++++- es-core/src/Settings.cpp | 5 +- es-core/src/utils/FileSystemUtil.cpp | 72 +++++++++++++++------------- es-core/src/utils/FileSystemUtil.h | 3 +- 4 files changed, 60 insertions(+), 39 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 6c1fe80ef6..c395a95ae2 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -31,8 +31,24 @@ bool scrape_cmdline = false; bool parseArgs(int argc, char* argv[]) { - Settings::getInstance()->setString("ExePath", argv[0]); + Utils::FileSystem::setExePath(argv[0]); + // We need to process --home before any call to Settings::getInstance(), because settings are loaded from homepath + for(int i = 1; i < argc; i++) + { + if (strcmp(argv[i], "--home") == 0) + { + if (i >= argc - 1) + { + std::cerr << "Invalid home path supplied."; + return false; + } + + Utils::FileSystem::setHomePath(argv[i + 1]); + break; + } + } + for(int i = 1; i < argc; i++) { if(strcmp(argv[i], "--resolution") == 0) @@ -168,6 +184,7 @@ bool parseArgs(int argc, char* argv[]) "--force-kid Force the UI mode to be Kid\n" "--force-kiosk Force the UI mode to be Kiosk\n" "--force-disable-filters Force the UI to ignore applied filters in gamelist\n" + "--home [path] Directory to use as home path\n" "--help, -h summon a sentient, angry tuba\n\n" "More information available in README.md.\n"; return false; //exit after printing help diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 455bea453a..e2c1286451 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -33,8 +33,7 @@ std::vector settings_dont_save { { "ScreenHeight" }, { "ScreenOffsetX" }, { "ScreenOffsetY" }, - { "ScreenRotate" }, - { "ExePath" } + { "ScreenRotate" } }; Settings::Settings() @@ -161,8 +160,6 @@ void Settings::setDefaults() mIntMap["ScreenOffsetX"] = 0; mIntMap["ScreenOffsetY"] = 0; mIntMap["ScreenRotate"] = 0; - - mStringMap["ExePath"] = ""; } template diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 5a0a351c97..bd2c84ba6d 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -2,7 +2,6 @@ #include "utils/FileSystemUtil.h" -#include "Settings.h" #include #include @@ -26,6 +25,8 @@ namespace Utils { namespace FileSystem { + static std::string homePath; + static std::string exePath; #if defined(_WIN32) static std::string convertFromWideString(const std::wstring wstring) @@ -138,36 +139,46 @@ namespace Utils } // getPathList + void setHomePath(const std::string& _path) + { + homePath = getGenericPath(_path); + } + std::string getHomePath() { - static std::string path; + if(homePath.length()) + return homePath; - // only construct the homepath once - if(!path.length()) + // Is it a portable installation ? Check if ".emulationstation/es_systems.cfg" exists in the exe's path + if(Utils::FileSystem::exists(getExePath() + "/.emulationstation/es_systems.cfg")) + homePath = getExePath(); + + // Check for HOME environment variable + if(!homePath.length()) { - // this should give us something like "/home/YOUR_USERNAME" on Linux and "C:/Users/YOUR_USERNAME/" on Windows char* envHome = getenv("HOME"); if(envHome) - path = getGenericPath(envHome); + homePath = getGenericPath(envHome); + } #if defined(_WIN32) - // but does not seem to work for Windows XP or Vista, so try something else - if(!path.length()) - { - char* envHomeDrive = getenv("HOMEDRIVE"); - char* envHomePath = getenv("HOMEPATH"); - if(envHomeDrive && envHomePath) - path = getGenericPath(std::string(envHomeDrive) + "/" + envHomePath); - } + // On Windows, HOME is not the system's user path but a user environment variable. + // Instead we get the home user's path using %HOMEDRIVE%/%HOMEPATH% which are system variables. + if(!homePath.length()) + { + char* envHomeDrive = getenv("HOMEDRIVE"); + char* envHomePath = getenv("HOMEPATH"); + if(envHomeDrive && envHomePath) + homePath = getGenericPath(std::string(envHomeDrive) + "/" + envHomePath); + } #endif // _WIN32 - // no homepath found, fall back to current working directory - if(!path.length()) - path = getCWDPath(); - } + // no homepath found, fall back to current working directory + if(!homePath.length()) + homePath = getCWDPath(); // return constructed homepath - return path; + return homePath; } // getHomePath @@ -180,23 +191,18 @@ namespace Utils } // getCWDPath - std::string getExePath() + void setExePath(const std::string& _path) { - static std::string path; - - // only construct the exepath once - if(!path.length()) - { - path = getCanonicalPath(Settings::getInstance()->getString("ExePath")); + std::string path = getCanonicalPath(_path); + if(isRegularFile(path)) + path = getParent(path); - if(isRegularFile(path)) - { - path = getParent(path); - } - } + exePath = path; + } // setExePath - // return constructed exepath - return path; + std::string getExePath() + { + return exePath; } // getExePath diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index 48c7f4f5ac..bb6ea67648 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -13,8 +13,10 @@ namespace Utils stringList getDirContent (const std::string& _path, const bool _recursive = false); stringList getPathList (const std::string& _path); + void setHomePath (const std::string& _path); std::string getHomePath (); std::string getCWDPath (); + void setExePath (const std::string& _path); std::string getExePath (); std::string getPreferredPath (const std::string& _path); std::string getGenericPath (const std::string& _path); @@ -37,7 +39,6 @@ namespace Utils bool isDirectory (const std::string& _path); bool isSymlink (const std::string& _path); bool isHidden (const std::string& _path); - } // FileSystem:: } // Utils:: From a02a747c502888ecee5c25efff36ba02d1fcbf3e Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 8 Aug 2019 22:16:11 +0200 Subject: [PATCH 375/603] Redid the entire Renderer Made all components render using triangle strips --- CMakeLists.txt | 16 +- es-app/src/SystemScreenSaver.cpp | 1 - es-app/src/components/AsyncReqComponent.cpp | 2 +- es-app/src/components/RatingComponent.cpp | 71 ++--- es-app/src/components/RatingComponent.h | 12 +- es-app/src/guis/GuiInfoPopup.cpp | 1 - es-app/src/guis/GuiMenu.cpp | 1 + es-app/src/main.cpp | 3 - es-app/src/views/SystemView.cpp | 1 - es-app/src/views/ViewController.h | 2 +- es-app/src/views/gamelist/IGameListView.h | 2 +- es-core/CMakeLists.txt | 11 +- es-core/src/GuiComponent.cpp | 2 +- es-core/src/HelpStyle.cpp | 1 - es-core/src/Renderer.h | 43 --- es-core/src/Renderer_draw_gl.cpp | 154 ---------- es-core/src/Renderer_init_sdlgl.cpp | 222 --------------- es-core/src/Window.cpp | 1 - es-core/src/components/BusyComponent.cpp | 1 - es-core/src/components/ButtonComponent.cpp | 1 - es-core/src/components/ComponentGrid.cpp | 37 +-- es-core/src/components/ComponentGrid.h | 11 +- es-core/src/components/ComponentList.cpp | 8 +- es-core/src/components/DateTimeComponent.cpp | 1 - .../src/components/DateTimeEditComponent.cpp | 1 - es-core/src/components/GridTileComponent.cpp | 1 - es-core/src/components/ImageComponent.cpp | 71 ++--- es-core/src/components/ImageComponent.h | 11 +- es-core/src/components/MenuComponent.h | 1 - es-core/src/components/NinePatchComponent.cpp | 101 +++---- es-core/src/components/NinePatchComponent.h | 12 +- .../src/components/ScrollableContainer.cpp | 3 +- es-core/src/components/SliderComponent.cpp | 1 - es-core/src/components/SwitchComponent.cpp | 1 - es-core/src/components/TextComponent.cpp | 1 - es-core/src/components/TextEditComponent.cpp | 1 - es-core/src/components/VideoComponent.cpp | 1 - .../src/components/VideoPlayerComponent.cpp | 10 +- es-core/src/components/VideoVlcComponent.cpp | 75 +---- es-core/src/guis/GuiDetectDevice.cpp | 1 - es-core/src/platform.h | 18 +- es-core/src/renderers/Renderer.cpp | 269 ++++++++++++++++++ es-core/src/renderers/Renderer.h | 102 +++++++ es-core/src/renderers/Renderer_GL21.cpp | 251 ++++++++++++++++ es-core/src/renderers/Renderer_GLES10.cpp | 251 ++++++++++++++++ es-core/src/resources/Font.cpp | 105 ++----- es-core/src/resources/Font.h | 14 +- es-core/src/resources/TextureData.cpp | 21 +- es-core/src/resources/TextureData.h | 4 +- 49 files changed, 1051 insertions(+), 881 deletions(-) delete mode 100644 es-core/src/Renderer.h delete mode 100644 es-core/src/Renderer_draw_gl.cpp delete mode 100644 es-core/src/Renderer_init_sdlgl.cpp create mode 100644 es-core/src/renderers/Renderer.cpp create mode 100644 es-core/src/renderers/Renderer.h create mode 100644 es-core/src/renderers/Renderer_GL21.cpp create mode 100644 es-core/src/renderers/Renderer_GLES10.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index f1f2c1be0e..9542da48cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) -option(GLES "Set to ON if targeting OpenGL ES" ${GLES}) +option(GLES "Set to ON if targeting Embedded OpenGL" ${GLES}) option(GL "Set to ON if targeting Desktop OpenGL" ${GL}) option(RPI "Set to ON to enable the Raspberry PI video player (omxplayer)" ${RPI}) @@ -16,7 +16,7 @@ LIST(APPEND CMAKE_MODULE_PATH #------------------------------------------------------------------------------- #set up OpenGL system variable if(GLES) - set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") + set(GLSystem "Embedded OpenGL" CACHE STRING "The OpenGL system to be used") elseif(GL) set(GLSystem "Desktop OpenGL" CACHE STRING "The OpenGL system to be used") #------------------------------------------------------------------------------- @@ -24,13 +24,13 @@ elseif(GL) elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/bcm_host.h") MESSAGE("bcm_host.h found") set(BCMHOST found) - set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") + set(GLSystem "Embedded OpenGL" CACHE STRING "The OpenGL system to be used") #------------------------------------------------------------------------------- #check if we're running on OSMC Vero4K elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/opt/vero3/lib/libMali.so") MESSAGE("libMali.so found") set(VERO4K found) - set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") + set(GLSystem "Embedded OpenGL" CACHE STRING "The OpenGL system to be used") #------------------------------------------------------------------------------- #check if we're running on olinuxino / odroid / etc elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/libMali.so" OR @@ -39,12 +39,12 @@ elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/libMali.so" OR EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/mali-egl/libmali.so" OR EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libmali.so") MESSAGE("libMali.so found") - set(GLSystem "OpenGL ES" CACHE STRING "The OpenGL system to be used") + set(GLSystem "Embedded OpenGL" CACHE STRING "The OpenGL system to be used") else() set(GLSystem "Desktop OpenGL" CACHE STRING "The OpenGL system to be used") endif(GLES) -set_property(CACHE GLSystem PROPERTY STRINGS "Desktop OpenGL" "OpenGL ES") +set_property(CACHE GLSystem PROPERTY STRINGS "Desktop OpenGL" "Embedded OpenGL") #finding necessary packages #------------------------------------------------------------------------------- @@ -109,9 +109,9 @@ endif() endif() if(${GLSystem} MATCHES "Desktop OpenGL") - add_definitions(-DUSE_OPENGL_DESKTOP) + add_definitions(-DUSE_OPENGL_21) else() - add_definitions(-DUSE_OPENGL_ES) + add_definitions(-DUSE_OPENGLES_10) endif() #------------------------------------------------------------------------------- diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 1837b94aa1..c5bcdf300b 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -11,7 +11,6 @@ #include "FileFilterIndex.h" #include "Log.h" #include "PowerSaver.h" -#include "Renderer.h" #include "Sound.h" #include "SystemData.h" #include diff --git a/es-app/src/components/AsyncReqComponent.cpp b/es-app/src/components/AsyncReqComponent.cpp index 5a95ae82c2..a4e5ff5725 100644 --- a/es-app/src/components/AsyncReqComponent.cpp +++ b/es-app/src/components/AsyncReqComponent.cpp @@ -1,7 +1,7 @@ #include "components/AsyncReqComponent.h" +#include "renderers/Renderer.h" #include "HttpReq.h" -#include "Renderer.h" AsyncReqComponent::AsyncReqComponent(Window* window, std::shared_ptr req, std::function)> onSuccess, std::function onCancel) : GuiComponent(window), diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index 924a0cbccf..a56b00b06c 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -1,7 +1,6 @@ #include "components/RatingComponent.h" #include "resources/TextureResource.h" -#include "Renderer.h" #include "ThemeData.h" RatingComponent::RatingComponent(Window* window) : GuiComponent(window), mColorShift(0xFFFFFFFF) @@ -76,38 +75,29 @@ void RatingComponent::onSizeChanged() void RatingComponent::updateVertices() { - const float numStars = NUM_RATING_STARS; - - const float h = Math::round(getSize().y()); // is the same as a single star's width - const float w = Math::round(h * mValue * numStars); - const float fw = Math::round(h * numStars); - - mVertices[0].pos = Vector2f(0.0f, 0.0f); - mVertices[0].tex = Vector2f(0.0f, 1.0f); - mVertices[1].pos = Vector2f(w, h); - mVertices[1].tex = Vector2f(mValue * numStars, 0.0f); - mVertices[2].pos = Vector2f(0.0f, h); - mVertices[2].tex = Vector2f(0.0f, 0.0f); - - mVertices[3] = mVertices[0]; - mVertices[4].pos = Vector2f(w, 0.0f); - mVertices[4].tex = Vector2f(mValue * numStars, 1.0f); - mVertices[5] = mVertices[1]; - - mVertices[6] = mVertices[4]; - mVertices[7].pos = Vector2f(fw, h); - mVertices[7].tex = Vector2f(numStars, 0.0f); - mVertices[8] = mVertices[1]; - - mVertices[9] = mVertices[6]; - mVertices[10].pos = Vector2f(fw, 0.0f); - mVertices[10].tex = Vector2f(numStars, 1.0f); - mVertices[11] = mVertices[7]; + const float numStars = NUM_RATING_STARS; + const float h = Math::round(getSize().y()); // is the same as a single star's width + const float w = Math::round(h * mValue * numStars); + const float fw = Math::round(h * numStars); + const unsigned int color = Renderer::convertColor(mColorShift); + + mVertices[0] = { { 0.0f, 0.0f }, { 0.0f, 1.0f }, color }; + mVertices[1] = { { 0.0f, h }, { 0.0f, 0.0f }, color }; + mVertices[2] = { { w, 0.0f }, { mValue * numStars, 1.0f }, color }; + mVertices[3] = { { w, h }, { mValue * numStars, 0.0f }, color }; + + mVertices[4] = { { 0.0f, 0.0f }, { 0.0f, 1.0f }, color }; + mVertices[5] = { { 0.0f, h }, { 0.0f, 0.0f }, color }; + mVertices[6] = { { fw, 0.0f }, { numStars, 1.0f }, color }; + mVertices[7] = { { fw, h }, { numStars, 0.0f }, color }; } void RatingComponent::updateColors() { - Renderer::buildGLColorArray(mColors, mColorShift, 12); + const unsigned int color = Renderer::convertColor(mColorShift); + + for(int i = 0; i < 8; ++i) + mVertices[i].col = color; } void RatingComponent::render(const Transform4x4f& parentTrans) @@ -116,30 +106,11 @@ void RatingComponent::render(const Transform4x4f& parentTrans) trans.round(); Renderer::setMatrix(trans); - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - - glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].pos); - glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].tex); - glColorPointer(4, GL_UNSIGNED_BYTE, 0, mColors); - mFilledTexture->bind(); - glDrawArrays(GL_TRIANGLES, 0, 6); + Renderer::drawTriangleStrips(&mVertices[0], 4); mUnfilledTexture->bind(); - glDrawArrays(GL_TRIANGLES, 6, 6); - - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); + Renderer::drawTriangleStrips(&mVertices[4], 4); renderChildren(trans); } diff --git a/es-app/src/components/RatingComponent.h b/es-app/src/components/RatingComponent.h index 6c47f00d23..ae2c3ae7e2 100644 --- a/es-app/src/components/RatingComponent.h +++ b/es-app/src/components/RatingComponent.h @@ -2,9 +2,8 @@ #ifndef ES_APP_COMPONENTS_RATING_COMPONENT_H #define ES_APP_COMPONENTS_RATING_COMPONENT_H +#include "renderers/Renderer.h" #include "GuiComponent.h" -#include "platform.h" -#include GLHEADER class TextureResource; @@ -43,14 +42,7 @@ class RatingComponent : public GuiComponent float mValue; - struct Vertex - { - Vector2f pos; - Vector2f tex; - } mVertices[12]; - - - GLubyte mColors[12*4]; + Renderer::Vertex mVertices[8]; unsigned int mColorShift; diff --git a/es-app/src/guis/GuiInfoPopup.cpp b/es-app/src/guis/GuiInfoPopup.cpp index a7fff0951f..e759e27f72 100644 --- a/es-app/src/guis/GuiInfoPopup.cpp +++ b/es-app/src/guis/GuiInfoPopup.cpp @@ -3,7 +3,6 @@ #include "components/ComponentGrid.h" #include "components/NinePatchComponent.h" #include "components/TextComponent.h" -#include "Renderer.h" #include GuiInfoPopup::GuiInfoPopup(Window* window, std::string message, int duration) : diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 59d8ae4150..1f544779ba 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -18,6 +18,7 @@ #include "VolumeControl.h" #include #include +#include "platform.h" GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU"), mVersion(window) { diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 6c1fe80ef6..de0a0339ec 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -306,9 +306,6 @@ int main(int argc, char* argv[]) return 1; } - std::string glExts = (const char*)glGetString(GL_EXTENSIONS); - LOG(LogInfo) << "Checking available OpenGL extensions..."; - LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (glExts.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); if(splashScreen) { std::string progressText = "Loading..."; diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index cdd5b1ea10..b3e48911a5 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -5,7 +5,6 @@ #include "views/UIModeController.h" #include "views/ViewController.h" #include "Log.h" -#include "Renderer.h" #include "Settings.h" #include "SystemData.h" #include "Window.h" diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index eec5e9fdb1..d1735edf1f 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -2,9 +2,9 @@ #ifndef ES_APP_VIEWS_VIEW_CONTROLLER_H #define ES_APP_VIEWS_VIEW_CONTROLLER_H +#include "renderers/Renderer.h" #include "FileData.h" #include "GuiComponent.h" -#include "Renderer.h" #include class IGameListView; diff --git a/es-app/src/views/gamelist/IGameListView.h b/es-app/src/views/gamelist/IGameListView.h index 988981593b..0c65897bb6 100644 --- a/es-app/src/views/gamelist/IGameListView.h +++ b/es-app/src/views/gamelist/IGameListView.h @@ -2,9 +2,9 @@ #ifndef ES_APP_VIEWS_GAME_LIST_IGAME_LIST_VIEW_H #define ES_APP_VIEWS_GAME_LIST_IGAME_LIST_VIEW_H +#include "renderers/Renderer.h" #include "FileData.h" #include "GuiComponent.h" -#include "Renderer.h" class ThemeData; class Window; diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 9e4302f1e3..0503055575 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -14,7 +14,6 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/MameNames.h ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.h ${CMAKE_CURRENT_SOURCE_DIR}/src/PowerSaver.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.h ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.h ${CMAKE_CURRENT_SOURCE_DIR}/src/ThemeData.h @@ -64,6 +63,9 @@ set(CORE_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector3f.h ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector4f.h + # Renderers + ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer.h + # Resources ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.h ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.h @@ -90,8 +92,6 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/MameNames.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/platform.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/PowerSaver.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_draw_gl.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer_init_sdlgl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Scripting.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Settings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/Sound.cpp @@ -137,6 +137,11 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector3f.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector4f.cpp + # Renderer + ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GL21.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GLES10.cpp + # Resources ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/ResourceManager.cpp diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 9b7d22aa22..e29f2fcf9c 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -2,8 +2,8 @@ #include "animations/Animation.h" #include "animations/AnimationController.h" +#include "renderers/Renderer.h" #include "Log.h" -#include "Renderer.h" #include "ThemeData.h" #include "Window.h" #include diff --git a/es-core/src/HelpStyle.cpp b/es-core/src/HelpStyle.cpp index 383ce821ed..3d3d4d6195 100644 --- a/es-core/src/HelpStyle.cpp +++ b/es-core/src/HelpStyle.cpp @@ -1,7 +1,6 @@ #include "HelpStyle.h" #include "resources/Font.h" -#include "Renderer.h" HelpStyle::HelpStyle() { diff --git a/es-core/src/Renderer.h b/es-core/src/Renderer.h deleted file mode 100644 index 358cf4031f..0000000000 --- a/es-core/src/Renderer.h +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once -#ifndef ES_CORE_RENDERER_H -#define ES_CORE_RENDERER_H - -#include "math/Vector2i.h" -#include "platform.h" -#include GLHEADER - -class Font; -class GuiComponent; -class Transform4x4f; - -//The Renderer provides several higher-level functions for drawing (rectangles, text, etc.). -//Renderer_draw_gl.cpp has most of the higher-level functions and wrappers. -//Renderer_init_*.cpp has platform-specific renderer initialziation/deinitialziation code. (e.g. the Raspberry Pi sets up dispmanx/OpenGL ES) -namespace Renderer -{ - bool init(); - void deinit(); - - unsigned int getWindowWidth(); - unsigned int getWindowHeight(); - unsigned int getScreenWidth(); - unsigned int getScreenHeight(); - unsigned int getScreenOffsetX(); - unsigned int getScreenOffsetY(); - unsigned int getScreenRotate(); - - void buildGLColorArray(GLubyte* ptr, unsigned int color, unsigned int vertCount); - - //graphics commands - void swapBuffers(); - - void pushClipRect(Vector2i pos, Vector2i dim); - void popClipRect(); - - void setMatrix(const Transform4x4f& transform); - - void drawRect(int x, int y, int w, int h, unsigned int color, GLenum blend_sfactor = GL_SRC_ALPHA, GLenum blend_dfactor = GL_ONE_MINUS_SRC_ALPHA); - void drawRect(float x, float y, float w, float h, unsigned int color, GLenum blend_sfactor = GL_SRC_ALPHA, GLenum blend_dfactor = GL_ONE_MINUS_SRC_ALPHA); -} - -#endif // ES_CORE_RENDERER_H diff --git a/es-core/src/Renderer_draw_gl.cpp b/es-core/src/Renderer_draw_gl.cpp deleted file mode 100644 index cac28c5d4b..0000000000 --- a/es-core/src/Renderer_draw_gl.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include "Renderer.h" - -#include "math/Misc.h" -#include "Log.h" -#include - -namespace Renderer { - struct ClipRect { - ClipRect(const int x, const int y, const int w, const int h) : - x(x), y(y), w(w), h(h) {}; - int x; - int y; - int w; - int h; - }; - - std::stack clipStack; - - void setColor4bArray(GLubyte* array, unsigned int color) - { - array[0] = ((color & 0xff000000) >> 24) & 255; - array[1] = ((color & 0x00ff0000) >> 16) & 255; - array[2] = ((color & 0x0000ff00) >> 8) & 255; - array[3] = ((color & 0x000000ff) ) & 255; - } - - void buildGLColorArray(GLubyte* ptr, unsigned int color, unsigned int vertCount) - { - unsigned int colorGl; - setColor4bArray((GLubyte*)&colorGl, color); - for(unsigned int i = 0; i < vertCount; i++) - { - ((GLuint*)ptr)[i] = colorGl; - } - } - - void pushClipRect(Vector2i pos, Vector2i dim) - { - ClipRect box(pos.x(), pos.y(), dim.x(), dim.y()); - if(box.w == 0) - box.w = Renderer::getScreenWidth() - box.x; - if(box.h == 0) - box.h = Renderer::getScreenHeight() - box.y; - - //glScissor starts at the bottom left of the window - //so (0, 0, 1, 1) is the bottom left pixel - //everything else uses y+ = down, so flip it to be consistent - switch(Renderer::getScreenRotate()) - { - case 0: { box = ClipRect(box.x, Renderer::getWindowHeight() - (box.y + box.h), box.w, box.h); } break; - case 1: { box = ClipRect(Renderer::getScreenHeight() - (box.y + box.h), Renderer::getWindowWidth() - (box.x + box.w), box.h, box.w); } break; - case 2: { box = ClipRect(Renderer::getScreenWidth() - (box.x + box.w), Renderer::getWindowHeight() - Renderer::getScreenHeight() + box.y, box.w, box.h); } break; - case 3: { box = ClipRect(box.y, Renderer::getWindowWidth() - Renderer::getScreenWidth() + box.x, box.h, box.w); } break; - } - - switch(Renderer::getScreenRotate()) - { - case 0: { box.x += Renderer::getScreenOffsetX(); box.y -= Renderer::getScreenOffsetY(); } break; - case 1: { box.x += Renderer::getScreenOffsetY(); box.y -= Renderer::getScreenOffsetX(); } break; - case 2: { box.x += Renderer::getScreenOffsetX(); box.y -= Renderer::getScreenOffsetY(); } break; - case 3: { box.x += Renderer::getScreenOffsetY(); box.y -= Renderer::getScreenOffsetX(); } break; - } - - //make sure the box fits within clipStack.top(), and clip further accordingly - if(clipStack.size()) - { - const ClipRect& top = clipStack.top(); - if(top.x > box.x) - box.x = top.x; - if(top.y > box.y) - box.y = top.y; - if(top.x + top.w < box.x + box.w) - box.w = (top.x + top.w) - box.x; - if(top.y + top.h < box.y + box.h) - box.h = (top.y + top.h) - box.y; - } - - if(box.w < 0) - box.w = 0; - if(box.h < 0) - box.h = 0; - - clipStack.push(box); - - glScissor(box.x, box.y, box.w, box.h); - glEnable(GL_SCISSOR_TEST); - } - - void popClipRect() - { - if(clipStack.empty()) - { - LOG(LogError) << "Tried to popClipRect while the stack was empty!"; - return; - } - - clipStack.pop(); - if(clipStack.empty()) - { - glDisable(GL_SCISSOR_TEST); - }else{ - const ClipRect& top = clipStack.top(); - glScissor(top.x, top.y, top.w, top.h); - } - } - - void drawRect(float x, float y, float w, float h, unsigned int color, GLenum blend_sfactor, GLenum blend_dfactor) - { - drawRect((int)Math::round(x), (int)Math::round(y), (int)Math::round(w), (int)Math::round(h), color, blend_sfactor, blend_dfactor); - } - - void drawRect(int x, int y, int w, int h, unsigned int color, GLenum blend_sfactor, GLenum blend_dfactor) - { -#ifdef USE_OPENGL_ES - GLshort points[12]; -#else - GLint points[12]; -#endif - - points[0] = x; points [1] = y; - points[2] = x; points[3] = y + h; - points[4] = x + w; points[5] = y; - - points[6] = x + w; points[7] = y; - points[8] = x; points[9] = y + h; - points[10] = x + w; points[11] = y + h; - - GLubyte colors[6*4]; - buildGLColorArray(colors, color, 6); - - glEnable(GL_BLEND); - glBlendFunc(blend_sfactor, blend_dfactor); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - -#ifdef USE_OPENGL_ES - glVertexPointer(2, GL_SHORT, 0, points); -#else - glVertexPointer(2, GL_INT, 0, points); -#endif - glColorPointer(4, GL_UNSIGNED_BYTE, 0, colors); - - glDrawArrays(GL_TRIANGLES, 0, 6); - - glDisable(GL_BLEND); - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - } - - void setMatrix(const Transform4x4f& matrix) - { - glLoadMatrixf((GLfloat*)&matrix); - } -}; diff --git a/es-core/src/Renderer_init_sdlgl.cpp b/es-core/src/Renderer_init_sdlgl.cpp deleted file mode 100644 index f87cddd0cc..0000000000 --- a/es-core/src/Renderer_init_sdlgl.cpp +++ /dev/null @@ -1,222 +0,0 @@ -#include "Renderer.h" - -#include "resources/ResourceManager.h" -#include "ImageIO.h" -#include "Log.h" -#include "Settings.h" -#include - -#ifdef USE_OPENGL_ES - #define glOrtho glOrthof -#endif - -namespace Renderer -{ - static bool initialCursorState; - - unsigned int windowWidth = 0; - unsigned int windowHeight = 0; - unsigned int screenWidth = 0; - unsigned int screenHeight = 0; - unsigned int screenOffsetX = 0; - unsigned int screenOffsetY = 0; - unsigned int screenRotate = 0; - - unsigned int getWindowWidth() { return windowWidth; } - unsigned int getWindowHeight() { return windowHeight; } - unsigned int getScreenWidth() { return screenWidth; } - unsigned int getScreenHeight() { return screenHeight; } - unsigned int getScreenOffsetX() { return screenOffsetX; } - unsigned int getScreenOffsetY() { return screenOffsetY; } - unsigned int getScreenRotate() { return screenRotate; } - - SDL_Window* sdlWindow = NULL; - SDL_GLContext sdlContext = NULL; - - bool createSurface() - { - LOG(LogInfo) << "Creating surface..."; - - if(SDL_Init(SDL_INIT_VIDEO) != 0) - { - LOG(LogError) << "Error initializing SDL!\n " << SDL_GetError(); - return false; - } - - //hide mouse cursor early - initialCursorState = SDL_ShowCursor(0) == 1; - - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - - // multisample anti-aliasing - //SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); - //SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2); - -#ifdef USE_OPENGL_ES - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); -#endif - - SDL_DisplayMode dispMode; - SDL_GetDesktopDisplayMode(0, &dispMode); - windowWidth = Settings::getInstance()->getInt("WindowWidth") ? Settings::getInstance()->getInt("WindowWidth") : dispMode.w; - windowHeight = Settings::getInstance()->getInt("WindowHeight") ? Settings::getInstance()->getInt("WindowHeight") : dispMode.h; - screenWidth = Settings::getInstance()->getInt("ScreenWidth") ? Settings::getInstance()->getInt("ScreenWidth") : windowWidth; - screenHeight = Settings::getInstance()->getInt("ScreenHeight") ? Settings::getInstance()->getInt("ScreenHeight") : windowHeight; - screenOffsetX = Settings::getInstance()->getInt("ScreenOffsetX") ? Settings::getInstance()->getInt("ScreenOffsetX") : 0; - screenOffsetY = Settings::getInstance()->getInt("ScreenOffsetY") ? Settings::getInstance()->getInt("ScreenOffsetY") : 0; - screenRotate = Settings::getInstance()->getInt("ScreenRotate") ? Settings::getInstance()->getInt("ScreenRotate") : 0; - - sdlWindow = SDL_CreateWindow("EmulationStation", - SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, - windowWidth, windowHeight, - SDL_WINDOW_OPENGL | (Settings::getInstance()->getBool("Windowed") ? 0 : (Settings::getInstance()->getBool("FullscreenBorderless") ? SDL_WINDOW_BORDERLESS : SDL_WINDOW_FULLSCREEN))); - - if(sdlWindow == NULL) - { - LOG(LogError) << "Error creating SDL window!\n\t" << SDL_GetError(); - return false; - } - - LOG(LogInfo) << "Created window successfully."; - - //support screen rotation - if((screenRotate == 1) || (screenRotate == 3)) - { - int temp; - temp = windowWidth; - windowWidth = windowHeight; - windowHeight = temp; - temp = screenWidth; - screenWidth = screenHeight; - screenHeight = temp; - temp = screenOffsetX; - screenOffsetX = screenOffsetY; - screenOffsetY = temp; - } - - //set an icon for the window - size_t width = 0; - size_t height = 0; - ResourceData resData = ResourceManager::getInstance()->getFileData(":/window_icon_256.png"); - std::vector rawData = ImageIO::loadFromMemoryRGBA32(resData.ptr.get(), resData.length, width, height); - if (!rawData.empty()) - { - ImageIO::flipPixelsVert(rawData.data(), width, height); - - //SDL interprets each pixel as a 32-bit number, so our masks must depend on the endianness (byte order) of the machine - #if SDL_BYTEORDER == SDL_BIG_ENDIAN - Uint32 rmask = 0xff000000; Uint32 gmask = 0x00ff0000; Uint32 bmask = 0x0000ff00; Uint32 amask = 0x000000ff; - #else - Uint32 rmask = 0x000000ff; Uint32 gmask = 0x0000ff00; Uint32 bmask = 0x00ff0000; Uint32 amask = 0xff000000; - #endif - //try creating SDL surface from logo data - SDL_Surface * logoSurface = SDL_CreateRGBSurfaceFrom((void *)rawData.data(), (int)width, (int)height, 32, (int)(width * 4), rmask, gmask, bmask, amask); - if (logoSurface != NULL) - { - SDL_SetWindowIcon(sdlWindow, logoSurface); - SDL_FreeSurface(logoSurface); - } - } - - sdlContext = SDL_GL_CreateContext(sdlWindow); - - // vsync - if(Settings::getInstance()->getBool("VSync")) - { - // SDL_GL_SetSwapInterval(0) for immediate updates (no vsync, default), - // 1 for updates synchronized with the vertical retrace, - // or -1 for late swap tearing. - // SDL_GL_SetSwapInterval returns 0 on success, -1 on error. - // if vsync is requested, try normal vsync; if that doesn't work, try late swap tearing - // if that doesn't work, report an error - if(SDL_GL_SetSwapInterval(1) != 0 && SDL_GL_SetSwapInterval(-1) != 0) - LOG(LogWarning) << "Tried to enable vsync, but failed! (" << SDL_GetError() << ")"; - } - else - SDL_GL_SetSwapInterval(0); - - return true; - } - - void destroySurface() - { - SDL_GL_DeleteContext(sdlContext); - sdlContext = NULL; - - SDL_DestroyWindow(sdlWindow); - sdlWindow = NULL; - - //show mouse cursor - SDL_ShowCursor(initialCursorState); - - SDL_Quit(); - } - - bool init() - { - if(!createSurface()) - return false; - - //gotta flip y since y=0 is at the bottom - switch(screenRotate) - { - case 0: - { - glViewport(screenOffsetX, windowHeight - screenHeight - screenOffsetY, screenWidth, screenHeight); - glMatrixMode(GL_PROJECTION); - glOrtho(0, screenWidth, screenHeight, 0, -1.0, 1.0); - } - break; - - case 1: - { - glViewport(screenOffsetY, windowWidth - screenWidth - screenOffsetX, screenHeight, screenWidth); - glMatrixMode(GL_PROJECTION); - glOrtho(0, screenHeight, screenWidth, 0, -1.0, 1.0); - glRotatef(90, 0, 0, 1); - glTranslatef(0, screenHeight * -1.0f, 0); - } - break; - - case 2: - { - glViewport(screenOffsetX, windowHeight - screenHeight - screenOffsetY, screenWidth, screenHeight); - glMatrixMode(GL_PROJECTION); - glOrtho(0, screenWidth, screenHeight, 0, -1.0, 1.0); - glRotatef(180, 0, 0, 1); - glTranslatef(screenWidth * -1.0f, screenHeight * -1.0f, 0); - } - break; - - case 3: - { - glViewport(screenOffsetY, windowWidth - screenWidth - screenOffsetX, screenHeight, screenWidth); - glMatrixMode(GL_PROJECTION); - glOrtho(0, screenHeight, screenWidth, 0, -1.0, 1.0); - glRotatef(270, 0, 0, 1); - glTranslatef(screenWidth * -1.0f, 0, 0); - } - break; - } - - glMatrixMode(GL_MODELVIEW); - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - - return true; - } - - void deinit() - { - destroySurface(); - } - - void swapBuffers() - { - SDL_GL_SwapWindow(sdlWindow); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - } -}; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 0f33e5e240..d3873a2154 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -6,7 +6,6 @@ #include "resources/TextureResource.h" #include "InputManager.h" #include "Log.h" -#include "Renderer.h" #include "Scripting.h" #include #include diff --git a/es-core/src/components/BusyComponent.cpp b/es-core/src/components/BusyComponent.cpp index 17f36df08d..a3049811f3 100644 --- a/es-core/src/components/BusyComponent.cpp +++ b/es-core/src/components/BusyComponent.cpp @@ -3,7 +3,6 @@ #include "components/AnimatedImageComponent.h" #include "components/ImageComponent.h" #include "components/TextComponent.h" -#include "Renderer.h" // animation definition AnimationFrame BUSY_ANIMATION_FRAMES[] = { diff --git a/es-core/src/components/ButtonComponent.cpp b/es-core/src/components/ButtonComponent.cpp index 9496046419..21e235bb4b 100644 --- a/es-core/src/components/ButtonComponent.cpp +++ b/es-core/src/components/ButtonComponent.cpp @@ -2,7 +2,6 @@ #include "resources/Font.h" #include "utils/StringUtil.h" -#include "Renderer.h" ButtonComponent::ButtonComponent(Window* window, const std::string& text, const std::string& helpText, const std::function& func) : GuiComponent(window), mBox(window, ":/button.png"), diff --git a/es-core/src/components/ComponentGrid.cpp b/es-core/src/components/ComponentGrid.cpp index 066f9a3f0c..10d2fdd14c 100644 --- a/es-core/src/components/ComponentGrid.cpp +++ b/es-core/src/components/ComponentGrid.cpp @@ -1,6 +1,5 @@ #include "components/ComponentGrid.h" -#include "Renderer.h" #include "Settings.h" using namespace GridFlags; @@ -151,6 +150,7 @@ void ComponentGrid::updateSeparators() { mLines.clear(); + const unsigned int color = Renderer::convertColor(0xC6C7C6FF); bool drawAll = Settings::getInstance()->getBool("DebugGrid"); Vector2f pos; @@ -174,28 +174,25 @@ void ComponentGrid::updateSeparators() if(it->border & BORDER_TOP || drawAll) { - mLines.push_back(Vert(pos.x(), pos.y())); - mLines.push_back(Vert(pos.x() + size.x(), pos.y())); + mLines.push_back( { { pos.x(), pos.y() }, { 0.0f, 0.0f }, color } ); + mLines.push_back( { { pos.x() + size.x(), pos.y() }, { 0.0f, 0.0f }, color } ); } if(it->border & BORDER_BOTTOM || drawAll) { - mLines.push_back(Vert(pos.x(), pos.y() + size.y())); - mLines.push_back(Vert(pos.x() + size.x(), mLines.back().y)); + mLines.push_back( { { pos.x(), pos.y() + size.y() }, { 0.0f, 0.0f }, color } ); + mLines.push_back( { { pos.x() + size.x(), mLines.back().pos.y() }, { 0.0f, 0.0f }, color } ); } if(it->border & BORDER_LEFT || drawAll) { - mLines.push_back(Vert(pos.x(), pos.y())); - mLines.push_back(Vert(pos.x(), pos.y() + size.y())); + mLines.push_back( { { pos.x(), pos.y() }, { 0.0f, 0.0f }, color } ); + mLines.push_back( { { pos.x(), pos.y() + size.y() }, { 0.0f, 0.0f }, color } ); } if(it->border & BORDER_RIGHT || drawAll) { - mLines.push_back(Vert(pos.x() + size.x(), pos.y())); - mLines.push_back(Vert(mLines.back().x, pos.y() + size.y())); + mLines.push_back( { { pos.x() + size.x(), pos.y() }, { 0.0f, 0.0f }, color } ); + mLines.push_back( { { mLines.back().pos.x(), pos.y() + size.y() }, { 0.0f, 0.0f }, color } ); } } - - mLineColors.reserve(mLines.size()); - Renderer::buildGLColorArray((GLubyte*)mLineColors.data(), 0xC6C7C6FF, (unsigned int)mLines.size()); } void ComponentGrid::onSizeChanged() @@ -365,20 +362,8 @@ void ComponentGrid::render(const Transform4x4f& parentTrans) if(mLines.size()) { Renderer::setMatrix(trans); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - - glVertexPointer(2, GL_FLOAT, 0, &mLines[0].x); - glColorPointer(4, GL_UNSIGNED_BYTE, 0, mLineColors.data()); - - glDrawArrays(GL_LINES, 0, (GLsizei)mLines.size()); - - glDisable(GL_BLEND); - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); + Renderer::bindTexture(0); + Renderer::drawLines(&mLines[0], mLines.size()); } } diff --git a/es-core/src/components/ComponentGrid.h b/es-core/src/components/ComponentGrid.h index aa6519175f..567f5d9196 100644 --- a/es-core/src/components/ComponentGrid.h +++ b/es-core/src/components/ComponentGrid.h @@ -3,6 +3,7 @@ #define ES_CORE_COMPONENTS_COMPONENT_GRID_H #include "math/Vector2i.h" +#include "renderers/Renderer.h" #include "GuiComponent.h" namespace GridFlags @@ -96,15 +97,7 @@ class ComponentGrid : public GuiComponent float* mRowHeights; float* mColWidths; - struct Vert - { - Vert(float xi = 0, float yi = 0) : x(xi), y(yi) {}; - float x; - float y; - }; - - std::vector mLines; - std::vector mLineColors; + std::vector mLines; // Update position & size void updateCellComponent(const GridEntry& cell); diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index c2c42d8f39..74b6dfde62 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -1,7 +1,5 @@ #include "components/ComponentList.h" -#include "Renderer.h" - #define TOTAL_HORIZONTAL_PADDING_PX 20 ComponentList::ComponentList(Window* window) : IList(window, LIST_SCROLL_STYLE_SLOW, LIST_NEVER_LOOP) @@ -204,10 +202,8 @@ void ComponentList::render(const Transform4x4f& parentTrans) // (1 - dst) + 0x77 const float selectedRowHeight = getRowHeight(mEntries.at(mCursor).data); - Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0xFFFFFFFF, - GL_ONE_MINUS_DST_COLOR, GL_ZERO); - Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0x777777FF, - GL_ONE, GL_ONE); + Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0xFFFFFFFF, Renderer::Blend::ONE_MINUS_DST_COLOR, Renderer::Blend::ZERO); + Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0x777777FF, Renderer::Blend::ONE, Renderer::Blend::ONE); // hack to draw 2px dark on left/right of the bar Renderer::drawRect(0.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF); diff --git a/es-core/src/components/DateTimeComponent.cpp b/es-core/src/components/DateTimeComponent.cpp index 0052f11ad3..2883b90561 100644 --- a/es-core/src/components/DateTimeComponent.cpp +++ b/es-core/src/components/DateTimeComponent.cpp @@ -2,7 +2,6 @@ #include "utils/StringUtil.h" #include "Log.h" -#include "Renderer.h" #include "Settings.h" DateTimeComponent::DateTimeComponent(Window* window) : TextComponent(window), mDisplayRelative(false) diff --git a/es-core/src/components/DateTimeEditComponent.cpp b/es-core/src/components/DateTimeEditComponent.cpp index d4b6636a39..efe5a94435 100644 --- a/es-core/src/components/DateTimeEditComponent.cpp +++ b/es-core/src/components/DateTimeEditComponent.cpp @@ -2,7 +2,6 @@ #include "resources/Font.h" #include "utils/StringUtil.h" -#include "Renderer.h" DateTimeEditComponent::DateTimeEditComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp index 745fede1a3..842c268b2b 100644 --- a/es-core/src/components/GridTileComponent.cpp +++ b/es-core/src/components/GridTileComponent.cpp @@ -2,7 +2,6 @@ #include "resources/TextureResource.h" #include "ThemeData.h" -#include "Renderer.h" GridTileComponent::GridTileComponent(Window* window) : GuiComponent(window), mBackground(window) { diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 14f5fac134..df86447a9d 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -2,7 +2,6 @@ #include "resources/TextureResource.h" #include "Log.h" -#include "Renderer.h" #include "Settings.h" #include "ThemeData.h" @@ -268,51 +267,36 @@ void ImageComponent::updateVertices() // we go through this mess to make sure everything is properly rounded // if we just round vertices at the end, edge cases occur near sizes of 0.5 - Vector2f size(Math::round(mSize.x()), Math::round(mSize.y())); - Vector2f topLeft(size * mTopLeftCrop); - Vector2f bottomRight(size * mBottomRightCrop); - - mVertices[0].pos = Vector2f(topLeft.x(), topLeft.y()); - mVertices[1].pos = Vector2f(topLeft.x(), bottomRight.y()); - mVertices[2].pos = Vector2f(bottomRight.x(), topLeft.y()); - - mVertices[3].pos = Vector2f(bottomRight.x(), topLeft.y()); - mVertices[4].pos = Vector2f(topLeft.x(), bottomRight.y()); - mVertices[5].pos = Vector2f(bottomRight.x(), bottomRight.y()); - - float px, py; - if(mTexture->isTiled()) - { - px = mSize.x() / getTextureSize().x(); - py = mSize.y() / getTextureSize().y(); - }else{ - px = 1; - py = 1; - } - - mVertices[0].tex = Vector2f(mTopLeftCrop.x(), py - mTopLeftCrop.y()); - mVertices[1].tex = Vector2f(mTopLeftCrop.x(), 1 - mBottomRightCrop.y()); - mVertices[2].tex = Vector2f(px * mBottomRightCrop.x(), py - mTopLeftCrop.y()); - - mVertices[3].tex = Vector2f(px * mBottomRightCrop.x(), py - mTopLeftCrop.y()); - mVertices[4].tex = Vector2f(mTopLeftCrop.x(), 1 - mBottomRightCrop.y()); - mVertices[5].tex = Vector2f(px * mBottomRightCrop.x(), 1 - mBottomRightCrop.y()); + const Vector2f size = { Math::round(mSize.x()), Math::round(mSize.y()) }; + const Vector2f topLeft = { size * mTopLeftCrop }; + const Vector2f bottomRight = { size * mBottomRightCrop }; + const float px = mTexture->isTiled() ? mSize.x() / getTextureSize().x() : 1.0f; + const float py = mTexture->isTiled() ? mSize.y() / getTextureSize().y() : 1.0f; + const unsigned int color = Renderer::convertColor(mColorShift); + + mVertices[0] = { { topLeft.x(), topLeft.y() }, { mTopLeftCrop.x(), py - mTopLeftCrop.y() }, color }; + mVertices[1] = { { topLeft.x(), bottomRight.y() }, { mTopLeftCrop.x(), 1.0f - mBottomRightCrop.y() }, color }; + mVertices[2] = { { bottomRight.x(), topLeft.y() }, { mBottomRightCrop.x() * px, py - mTopLeftCrop.y() }, color }; + mVertices[3] = { { bottomRight.x(), bottomRight.y() }, { mBottomRightCrop.x() * px, 1.0f - mBottomRightCrop.y() }, color }; if(mFlipX) { - for(int i = 0; i < 6; i++) + for(int i = 0; i < 4; i++) mVertices[i].tex[0] = px - mVertices[i].tex[0]; } if(mFlipY) { - for(int i = 0; i < 6; i++) + for(int i = 0; i < 4; i++) mVertices[i].tex[1] = py - mVertices[i].tex[1]; } } void ImageComponent::updateColors() { - Renderer::buildGLColorArray(mColors, mColorShift, 6); + const unsigned int color = Renderer::convertColor(mColorShift); + + for(int i = 0; i < 4; ++i) + mVertices[i].col = color; } void ImageComponent::render(const Transform4x4f& parentTrans) @@ -334,27 +318,8 @@ void ImageComponent::render(const Transform4x4f& parentTrans) // texture is bound in this case but we want to handle a fade so it doesn't just 'jump' in // when it finally loads fadeIn(mTexture->bind()); + Renderer::drawTriangleStrips(&mVertices[0], 4); - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - - glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].pos); - glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].tex); - glColorPointer(4, GL_UNSIGNED_BYTE, 0, mColors); - - glDrawArrays(GL_TRIANGLES, 0, 6); - - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); }else{ LOG(LogError) << "Image texture is not initialized!"; mTexture.reset(); diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 7a93a0d851..9d3121c514 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -2,10 +2,9 @@ #ifndef ES_CORE_COMPONENTS_IMAGE_COMPONENT_H #define ES_CORE_COMPONENTS_IMAGE_COMPONENT_H +#include "renderers/Renderer.h" #include "math/Vector2i.h" #include "GuiComponent.h" -#include "platform.h" -#include GLHEADER class TextureResource; @@ -83,13 +82,7 @@ class ImageComponent : public GuiComponent // Used internally whenever the resizing parameters or texture change. void resize(); - struct Vertex - { - Vector2f pos; - Vector2f tex; - } mVertices[6]; - - GLubyte mColors[6*4]; + Renderer::Vertex mVertices[4]; void updateVertices(); void updateColors(); diff --git a/es-core/src/components/MenuComponent.h b/es-core/src/components/MenuComponent.h index 7babd2d3a5..ad2f69db10 100644 --- a/es-core/src/components/MenuComponent.h +++ b/es-core/src/components/MenuComponent.h @@ -7,7 +7,6 @@ #include "components/NinePatchComponent.h" #include "components/TextComponent.h" #include "utils/StringUtil.h" -#include "Renderer.h" class ButtonComponent; class ImageComponent; diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index fedf95115b..d6c55ed0b9 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -2,14 +2,13 @@ #include "resources/TextureResource.h" #include "Log.h" -#include "Renderer.h" #include "ThemeData.h" NinePatchComponent::NinePatchComponent(Window* window, const std::string& path, unsigned int edgeColor, unsigned int centerColor) : GuiComponent(window), mCornerSize(16, 16), mEdgeColor(edgeColor), mCenterColor(centerColor), mPath(path), - mVertices(NULL), mColors(NULL) + mVertices(NULL) { if(!mPath.empty()) buildVertices(); @@ -19,15 +18,18 @@ NinePatchComponent::~NinePatchComponent() { if (mVertices != NULL) delete[] mVertices; - - if (mColors != NULL) - delete[] mColors; } void NinePatchComponent::updateColors() { - Renderer::buildGLColorArray(mColors, mEdgeColor, 6 * 9); - Renderer::buildGLColorArray(&mColors[4 * 6 * 4], mCenterColor, 6); + const unsigned int edgeColor = Renderer::convertColor(mEdgeColor); + const unsigned int centerColor = Renderer::convertColor(mCenterColor); + + for(int i = 0; i < 6*9; ++i) + mVertices[i].col = edgeColor; + + for(int i = 6*4; i < 6; ++i) + mVertices[(6*4)+i].col = mCenterColor; } void NinePatchComponent::buildVertices() @@ -35,61 +37,48 @@ void NinePatchComponent::buildVertices() if(mVertices != NULL) delete[] mVertices; - if(mColors != NULL) - delete[] mColors; - mTexture = TextureResource::get(mPath); if(mTexture->getSize() == Vector2i::Zero()) { mVertices = NULL; - mColors = NULL; LOG(LogWarning) << "NinePatchComponent missing texture!"; return; } - mVertices = new Vertex[6 * 9]; - mColors = new GLubyte[6 * 9 * 4]; - updateColors(); + mVertices = new Renderer::Vertex[6 * 9]; const Vector2f texSize = Vector2f((float)mTexture->getSize().x(), (float)mTexture->getSize().y()); - float imgSizeX[3] = {mCornerSize.x(), mSize.x() - mCornerSize.x() * 2, mCornerSize.x()}; - float imgSizeY[3] = {mCornerSize.y(), mSize.y() - mCornerSize.y() * 2, mCornerSize.y()}; - float imgPosX[3] = {0, imgSizeX[0], imgSizeX[0] + imgSizeX[1]}; - float imgPosY[3] = {0, imgSizeY[0], imgSizeY[0] + imgSizeY[1]}; + const float imgSizeX[3] = { mCornerSize.x(), mSize.x() - mCornerSize.x() * 2, mCornerSize.x()}; + const float imgSizeY[3] = { mCornerSize.y(), mSize.y() - mCornerSize.y() * 2, mCornerSize.y()}; + const float imgPosX[3] = { 0, imgSizeX[0], imgSizeX[0] + imgSizeX[1]}; + const float imgPosY[3] = { 0, imgSizeY[0], imgSizeY[0] + imgSizeY[1]}; //the "1 +" in posY and "-" in sizeY is to deal with texture coordinates having a bottom left corner origin vs. verticies having a top left origin - float texSizeX[3] = {mCornerSize.x() / texSize.x(), (texSize.x() - mCornerSize.x() * 2) / texSize.x(), mCornerSize.x() / texSize.x()}; - float texSizeY[3] = {-mCornerSize.y() / texSize.y(), -(texSize.y() - mCornerSize.y() * 2) / texSize.y(), -mCornerSize.y() / texSize.y()}; - float texPosX[3] = {0, texSizeX[0], texSizeX[0] + texSizeX[1]}; - float texPosY[3] = {1, 1 + texSizeY[0], 1 + texSizeY[0] + texSizeY[1]}; + const float texSizeX[3] = { mCornerSize.x() / texSize.x(), (texSize.x() - mCornerSize.x() * 2) / texSize.x(), mCornerSize.x() / texSize.x() }; + const float texSizeY[3] = { -mCornerSize.y() / texSize.y(), -(texSize.y() - mCornerSize.y() * 2) / texSize.y(), -mCornerSize.y() / texSize.y() }; + const float texPosX[3] = { 0, texSizeX[0], texSizeX[0] + texSizeX[1] }; + const float texPosY[3] = { 1, 1 + texSizeY[0], 1 + texSizeY[0] + texSizeY[1] }; int v = 0; for(int slice = 0; slice < 9; slice++) { - int sliceX = slice % 3; - int sliceY = slice / 3; - - Vector2f imgPos = Vector2f(imgPosX[sliceX], imgPosY[sliceY]); - Vector2f imgSize = Vector2f(imgSizeX[sliceX], imgSizeY[sliceY]); - - mVertices[v + 0].pos = imgPos; - mVertices[v + 1].pos = imgPos + Vector2f(0, imgSize.y()); - mVertices[v + 2].pos = imgPos + Vector2f(imgSize.x(), 0); - mVertices[v + 3].pos = mVertices[v + 2].pos; - mVertices[v + 4].pos = mVertices[v + 1].pos; - mVertices[v + 5].pos = imgPos + imgSize; - - Vector2f texPos = Vector2f(texPosX[sliceX], texPosY[sliceY]); - Vector2f texSize = Vector2f(texSizeX[sliceX], texSizeY[sliceY]); - - mVertices[v + 0].tex = texPos; - mVertices[v + 1].tex = texPos + Vector2f(0, texSize.y()); - mVertices[v + 2].tex = texPos + Vector2f(texSize.x(), 0); - mVertices[v + 3].tex = mVertices[v + 2].tex; - mVertices[v + 4].tex = mVertices[v + 1].tex; - mVertices[v + 5].tex = texPos + texSize; + const int sliceX = slice % 3; + const int sliceY = slice / 3; + const Vector2f imgPos = Vector2f(imgPosX[sliceX], imgPosY[sliceY]); + const Vector2f imgSize = Vector2f(imgSizeX[sliceX], imgSizeY[sliceY]); + const Vector2f texPos = Vector2f(texPosX[sliceX], texPosY[sliceY]); + const Vector2f texSize = Vector2f(texSizeX[sliceX], texSizeY[sliceY]); + + mVertices[v + 1] = { { imgPos.x() , imgPos.y() }, { texPos.x(), texPos.y() }, 0 }; + mVertices[v + 2] = { { imgPos.x() , imgPos.y() + imgSize.y() }, { texPos.x(), texPos.y() + texSize.y() }, 0 }; + mVertices[v + 3] = { { imgPos.x() + imgSize.x(), imgPos.y() }, { texPos.x() + texSize.x(), texPos.y() }, 0 }; + mVertices[v + 4] = { { imgPos.x() + imgSize.x(), imgPos.y() + imgSize.y() }, { texPos.x() + texSize.x(), texPos.y() + texSize.y() }, 0 }; + + // make duplicates of first and last vertex so this can be rendered as a triangle strip + mVertices[v + 0] = mVertices[v + 1]; + mVertices[v + 5] = mVertices[v + 4]; v += 6; } @@ -99,6 +88,8 @@ void NinePatchComponent::buildVertices() { mVertices[i].pos.round(); } + + updateColors(); } void NinePatchComponent::render(const Transform4x4f& parentTrans) @@ -111,27 +102,7 @@ void NinePatchComponent::render(const Transform4x4f& parentTrans) Renderer::setMatrix(trans); mTexture->bind(); - - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - - glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].pos); - glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &mVertices[0].tex); - glColorPointer(4, GL_UNSIGNED_BYTE, 0, mColors); - - glDrawArrays(GL_TRIANGLES, 0, 6 * 9); - - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); + Renderer::drawTriangleStrips(&mVertices[0], 6*9); } renderChildren(trans); diff --git a/es-core/src/components/NinePatchComponent.h b/es-core/src/components/NinePatchComponent.h index af9e3b9343..584dc61e3f 100644 --- a/es-core/src/components/NinePatchComponent.h +++ b/es-core/src/components/NinePatchComponent.h @@ -2,9 +2,8 @@ #ifndef ES_CORE_COMPONENTS_NINE_PATCH_COMPONENT_H #define ES_CORE_COMPONENTS_NINE_PATCH_COMPONENT_H +#include "renderers/Renderer.h" #include "GuiComponent.h" -#include "platform.h" -#include GLHEADER class TextureResource; @@ -45,14 +44,7 @@ class NinePatchComponent : public GuiComponent void buildVertices(); void updateColors(); - struct Vertex - { - Vector2f pos; - Vector2f tex; - }; - - Vertex* mVertices; - GLubyte* mColors; + Renderer::Vertex* mVertices; std::string mPath; Vector2f mCornerSize; diff --git a/es-core/src/components/ScrollableContainer.cpp b/es-core/src/components/ScrollableContainer.cpp index cedc547ce9..c0e6e6961d 100644 --- a/es-core/src/components/ScrollableContainer.cpp +++ b/es-core/src/components/ScrollableContainer.cpp @@ -1,6 +1,7 @@ #include "components/ScrollableContainer.h" -#include "Renderer.h" +#include "math/Vector2i.h" +#include "renderers/Renderer.h" #define AUTO_SCROLL_RESET_DELAY 3000 // ms to reset to top after we reach the bottom #define AUTO_SCROLL_DELAY 1000 // ms to wait before we start to scroll diff --git a/es-core/src/components/SliderComponent.cpp b/es-core/src/components/SliderComponent.cpp index 619c798356..c3b49ed188 100644 --- a/es-core/src/components/SliderComponent.cpp +++ b/es-core/src/components/SliderComponent.cpp @@ -1,7 +1,6 @@ #include "components/SliderComponent.h" #include "resources/Font.h" -#include "Renderer.h" #define MOVE_REPEAT_DELAY 500 #define MOVE_REPEAT_RATE 40 diff --git a/es-core/src/components/SwitchComponent.cpp b/es-core/src/components/SwitchComponent.cpp index ec549020bc..dd01b18072 100644 --- a/es-core/src/components/SwitchComponent.cpp +++ b/es-core/src/components/SwitchComponent.cpp @@ -1,7 +1,6 @@ #include "SwitchComponent.h" #include "resources/Font.h" -#include "Renderer.h" SwitchComponent::SwitchComponent(Window* window, bool state) : GuiComponent(window), mImage(window), mState(state) { diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index d1fc995f40..b5a22760a0 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -2,7 +2,6 @@ #include "utils/StringUtil.h" #include "Log.h" -#include "Renderer.h" #include "Settings.h" TextComponent::TextComponent(Window* window) : GuiComponent(window), diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index c90ff504b4..c5b2bce5be 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -2,7 +2,6 @@ #include "resources/Font.h" #include "utils/StringUtil.h" -#include "Renderer.h" #define TEXT_PADDING_HORIZ 10 #define TEXT_PADDING_VERT 2 diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 6cd5f082a1..3b9e9a7cf2 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -3,7 +3,6 @@ #include "resources/ResourceManager.h" #include "utils/FileSystemUtil.h" #include "PowerSaver.h" -#include "Renderer.h" #include "ThemeData.h" #include "Window.h" #include diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 0b0948e427..62711aecb2 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -1,9 +1,9 @@ #ifdef _RPI_ #include "components/VideoPlayerComponent.h" +#include "renderers/Renderer.h" #include "utils/StringUtil.h" #include "AudioManager.h" -#include "Renderer.h" #include "Settings.h" #include #include @@ -115,7 +115,7 @@ void VideoPlayerComponent::startVideo() case 1: { - const int x1 = (int)(Renderer::getScreenOffsetY() + Renderer::getScreenHeight() - y - mSize.y()); + const int x1 = (int)(Renderer::getScreenWidth() - Renderer::getScreenOffsetY() - y - mSize.y()); const int y1 = (int)(Renderer::getScreenOffsetX() + x); const int x2 = (int)(x1 + mSize.y()); const int y2 = (int)(y1 + mSize.x()); @@ -125,8 +125,8 @@ void VideoPlayerComponent::startVideo() case 2: { - const int x1 = (int)(Renderer::getScreenOffsetX() + Renderer::getScreenWidth() - x - mSize.x()); - const int y1 = (int)(Renderer::getScreenOffsetY() + Renderer::getScreenHeight() - y - mSize.y()); + const int x1 = (int)(Renderer::getScreenWidth() - Renderer::getScreenOffsetX() - x - mSize.x()); + const int y1 = (int)(Renderer::getScreenHeight() - Renderer::getScreenOffsetY() - y - mSize.y()); const int x2 = (int)(x1 + mSize.x()); const int y2 = (int)(y1 + mSize.y()); sprintf(buf1, "%d,%d,%d,%d", x1, y1, x2, y2); @@ -136,7 +136,7 @@ void VideoPlayerComponent::startVideo() case 3: { const int x1 = (int)(Renderer::getScreenOffsetY() + y); - const int y1 = (int)(Renderer::getScreenOffsetX() + Renderer::getScreenWidth() - x - mSize.x()); + const int y1 = (int)(Renderer::getScreenHeight() - Renderer::getScreenOffsetX() - x - mSize.x()); const int x2 = (int)(x1 + mSize.y()); const int y2 = (int)(y1 + mSize.x()); sprintf(buf1, "%d,%d,%d,%d", x1, y1, x2, y2); diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 91f7532e40..19f00c09ff 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -1,9 +1,9 @@ #include "components/VideoVlcComponent.h" +#include "renderers/Renderer.h" #include "resources/TextureResource.h" #include "utils/StringUtil.h" #include "PowerSaver.h" -#include "Renderer.h" #include "Settings.h" #include #include @@ -132,8 +132,6 @@ void VideoVlcComponent::resize() void VideoVlcComponent::render(const Transform4x4f& parentTrans) { VideoComponent::render(parentTrans); - float x, y; - Transform4x4f trans = parentTrans * getTransform(); GuiComponent::renderChildren(trans); @@ -141,73 +139,24 @@ void VideoVlcComponent::render(const Transform4x4f& parentTrans) if (mIsPlaying && mContext.valid) { - float tex_offs_x = 0.0f; - float tex_offs_y = 0.0f; - float x2; - float y2; - - x = 0.0; - y = 0.0; - x2 = mSize.x(); - y2 = mSize.y(); - - // Define a structure to contain the data for each vertex - struct Vertex - { - Vector2f pos; - Vector2f tex; - Vector4f colour; - } vertices[6]; - - // We need two triangles to cover the rectangular area - vertices[0].pos[0] = x; vertices[0].pos[1] = y; - vertices[1].pos[0] = x; vertices[1].pos[1] = y2; - vertices[2].pos[0] = x2; vertices[2].pos[1] = y; - - vertices[3].pos[0] = x2; vertices[3].pos[1] = y; - vertices[4].pos[0] = x; vertices[4].pos[1] = y2; - vertices[5].pos[0] = x2; vertices[5].pos[1] = y2; - - // Texture coordinates - vertices[0].tex[0] = -tex_offs_x; vertices[0].tex[1] = -tex_offs_y; - vertices[1].tex[0] = -tex_offs_x; vertices[1].tex[1] = 1.0f + tex_offs_y; - vertices[2].tex[0] = 1.0f + tex_offs_x; vertices[2].tex[1] = -tex_offs_y; - - vertices[3].tex[0] = 1.0f + tex_offs_x; vertices[3].tex[1] = -tex_offs_y; - vertices[4].tex[0] = -tex_offs_x; vertices[4].tex[1] = 1.0f + tex_offs_y; - vertices[5].tex[0] = 1.0f + tex_offs_x; vertices[5].tex[1] = 1.0f + tex_offs_y; - - // Colours - use this to fade the video in and out - for (int i = 0; i < (4 * 6); ++i) { - if ((i%4) < 3) - vertices[i / 4].colour[i % 4] = mFadeIn; - else - vertices[i / 4].colour[i % 4] = 1.0f; - } + const unsigned int fadeIn = (unsigned int)(Math::clamp(0.0f, mFadeIn, 1.0f) * 255.0f); + const unsigned int color = Renderer::convertColor((fadeIn << 24) | (fadeIn << 16) | (fadeIn << 8) | 255); + Renderer::Vertex vertices[4]; - glEnable(GL_TEXTURE_2D); + vertices[0] = { { 0.0f , 0.0f }, { 0.0f, 0.0f }, color }; + vertices[1] = { { 0.0f , mSize.y() }, { 0.0f, 1.0f }, color }; + vertices[2] = { { mSize.x(), 0.0f }, { 1.0f, 0.0f }, color }; + vertices[3] = { { mSize.x(), mSize.y() }, { 1.0f, 1.0f }, color }; // Build a texture for the video frame mTexture->initFromPixels((unsigned char*)mContext.surface->pixels, mContext.surface->w, mContext.surface->h); mTexture->bind(); // Render it - glEnableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - - glColorPointer(4, GL_FLOAT, sizeof(Vertex), &vertices[0].colour); - glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].pos); - glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].tex); - - glDrawArrays(GL_TRIANGLES, 0, 6); - - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - - glDisable(GL_TEXTURE_2D); - } else { + Renderer::drawTriangleStrips(&vertices[0], 4); + } + else + { VideoComponent::renderSnapshot(parentTrans); } } diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index faadbf4ac3..6632945e63 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -6,7 +6,6 @@ #include "utils/StringUtil.h" #include "InputManager.h" #include "PowerSaver.h" -#include "Renderer.h" #include "Window.h" #define HOLD_TIME 1000 diff --git a/es-core/src/platform.h b/es-core/src/platform.h index 7ffaf5d31e..9c5220bc3e 100644 --- a/es-core/src/platform.h +++ b/es-core/src/platform.h @@ -4,21 +4,9 @@ #include -//the Makefile defines one of these: -//#define USE_OPENGL_ES -//#define USE_OPENGL_DESKTOP - -#ifdef USE_OPENGL_ES - #define GLHEADER -#endif - -#ifdef USE_OPENGL_DESKTOP - //why the hell this naming inconsistency exists is well beyond me - #ifdef WIN32 - #define sleep Sleep - #endif - - #define GLHEADER +//why the hell this naming inconsistency exists is well beyond me +#ifdef WIN32 + #define sleep Sleep #endif int runShutdownCommand(); // shut down the system (returns 0 if successful) diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp new file mode 100644 index 0000000000..b107f1d29a --- /dev/null +++ b/es-core/src/renderers/Renderer.cpp @@ -0,0 +1,269 @@ +#include "renderers/Renderer.h" + +#include "math/Transform4x4f.h" +#include "math/Vector2i.h" +#include "resources/ResourceManager.h" +#include "ImageIO.h" +#include "Log.h" +#include "Settings.h" + +#include +#include + +namespace Renderer +{ + static std::stack clipStack; + static SDL_Window* sdlWindow = nullptr; + static int windowWidth = 0; + static int windowHeight = 0; + static int screenWidth = 0; + static int screenHeight = 0; + static int screenOffsetX = 0; + static int screenOffsetY = 0; + static int screenRotate = 0; + static bool initialCursorState = 1; + + static void setIcon() + { + size_t width = 0; + size_t height = 0; + ResourceData resData = ResourceManager::getInstance()->getFileData(":/window_icon_256.png"); + std::vector rawData = ImageIO::loadFromMemoryRGBA32(resData.ptr.get(), resData.length, width, height); + + if(!rawData.empty()) + { + ImageIO::flipPixelsVert(rawData.data(), width, height); + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + unsigned int rmask = 0xFF000000; + unsigned int gmask = 0x00FF0000; + unsigned int bmask = 0x0000FF00; + unsigned int amask = 0x000000FF; +#else + unsigned int rmask = 0x000000FF; + unsigned int gmask = 0x0000FF00; + unsigned int bmask = 0x00FF0000; + unsigned int amask = 0xFF000000; +#endif + // try creating SDL surface from logo data + SDL_Surface* logoSurface = SDL_CreateRGBSurfaceFrom((void*)rawData.data(), (int)width, (int)height, 32, (int)(width * 4), rmask, gmask, bmask, amask); + + if(logoSurface != nullptr) + { + SDL_SetWindowIcon(sdlWindow, logoSurface); + SDL_FreeSurface(logoSurface); + } + } + + } // setIcon + + static bool createWindow() + { + LOG(LogInfo) << "Creating window..."; + + if(SDL_Init(SDL_INIT_VIDEO) != 0) + { + LOG(LogError) << "Error initializing SDL!\n " << SDL_GetError(); + return false; + } + + initialCursorState = (SDL_ShowCursor(0) != 0); + + SDL_DisplayMode dispMode; + SDL_GetDesktopDisplayMode(0, &dispMode); + windowWidth = Settings::getInstance()->getInt("WindowWidth") ? Settings::getInstance()->getInt("WindowWidth") : dispMode.w; + windowHeight = Settings::getInstance()->getInt("WindowHeight") ? Settings::getInstance()->getInt("WindowHeight") : dispMode.h; + screenWidth = Settings::getInstance()->getInt("ScreenWidth") ? Settings::getInstance()->getInt("ScreenWidth") : windowWidth; + screenHeight = Settings::getInstance()->getInt("ScreenHeight") ? Settings::getInstance()->getInt("ScreenHeight") : windowHeight; + screenOffsetX = Settings::getInstance()->getInt("ScreenOffsetX") ? Settings::getInstance()->getInt("ScreenOffsetX") : 0; + screenOffsetY = Settings::getInstance()->getInt("ScreenOffsetY") ? Settings::getInstance()->getInt("ScreenOffsetY") : 0; + screenRotate = Settings::getInstance()->getInt("ScreenRotate") ? Settings::getInstance()->getInt("ScreenRotate") : 0; + + setupWindow(); + + unsigned int windowFlags = (Settings::getInstance()->getBool("Windowed") ? 0 : (Settings::getInstance()->getBool("FullscreenBorderless") ? SDL_WINDOW_BORDERLESS : SDL_WINDOW_FULLSCREEN)) | getWindowFlags(); + + if((sdlWindow = SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, windowWidth, windowHeight, windowFlags)) == nullptr) + { + LOG(LogError) << "Error creating SDL window!\n\t" << SDL_GetError(); + return false; + } + + LOG(LogInfo) << "Created window successfully."; + + createContext(); + setIcon(); + setSwapInterval(); + + return true; + + } // createWindow + + static void destroyWindow() + { + destroyContext(); + + SDL_DestroyWindow(sdlWindow); + sdlWindow = nullptr; + + SDL_ShowCursor(initialCursorState); + + SDL_Quit(); + + } // destroyWindow + + bool init() + { + if(!createWindow()) + return false; + + Transform4x4f projection = Transform4x4f::Identity(); + Rect viewport = Rect(0, 0, 0, 0); + + switch(screenRotate) + { + case 0: + { + viewport.x = screenOffsetX; + viewport.y = screenOffsetY; + viewport.w = screenWidth; + viewport.h = screenHeight; + + projection.orthoProjection(0, screenWidth, screenHeight, 0, -1.0, 1.0); + } + break; + + case 1: + { + viewport.x = windowWidth - screenOffsetY - screenHeight; + viewport.y = screenOffsetX; + viewport.w = screenHeight; + viewport.h = screenWidth; + + projection.orthoProjection(0, screenHeight, screenWidth, 0, -1.0, 1.0); + projection.rotate((float)ES_DEG_TO_RAD(90), {0, 0, 1}); + projection.translate({0, screenHeight * -1.0f, 0}); + } + break; + + case 2: + { + viewport.x = windowWidth - screenOffsetX - screenWidth; + viewport.y = windowHeight - screenOffsetY - screenHeight; + viewport.w = screenWidth; + viewport.h = screenHeight; + + projection.orthoProjection(0, screenWidth, screenHeight, 0, -1.0, 1.0); + projection.rotate((float)ES_DEG_TO_RAD(180), {0, 0, 1}); + projection.translate({screenWidth * -1.0f, screenHeight * -1.0f, 0}); + } + break; + + case 3: + { + viewport.x = screenOffsetY; + viewport.y = windowHeight - screenOffsetX - screenWidth; + viewport.w = screenHeight; + viewport.h = screenWidth; + + projection.orthoProjection(0, screenHeight, screenWidth, 0, -1.0, 1.0); + projection.rotate((float)ES_DEG_TO_RAD(270), {0, 0, 1}); + projection.translate({screenWidth * -1.0f, 0, 0}); + } + break; + } + + setViewport(viewport); + setProjection(projection); + swapBuffers(); + + return true; + + } // init + + void deinit() + { + destroyWindow(); + + } // deinit + + void pushClipRect(const Vector2i& _pos, const Vector2i& _size) + { + Rect box(_pos.x(), _pos.y(), _size.x(), _size.y()); + + if(box.w == 0) box.w = screenWidth - box.x; + if(box.h == 0) box.h = screenHeight - box.y; + + switch(screenRotate) + { + case 0: { box = Rect(screenOffsetX + box.x, screenOffsetY + box.y, box.w, box.h); } break; + case 1: { box = Rect(windowWidth - screenOffsetY - box.y - box.h, screenOffsetX + box.x, box.h, box.w); } break; + case 2: { box = Rect(windowWidth - screenOffsetX - box.x - box.w, windowHeight - screenOffsetY - box.y - box.h, box.w, box.h); } break; + case 3: { box = Rect(screenOffsetY + box.y, windowHeight - screenOffsetX - box.x - box.w, box.h, box.w); } break; + } + + // make sure the box fits within clipStack.top(), and clip further accordingly + if(clipStack.size()) + { + const Rect& top = clipStack.top(); + if( top.x > box.x) box.x = top.x; + if( top.y > box.y) box.y = top.y; + if((top.x + top.w) < (box.x + box.w)) box.w = (top.x + top.w) - box.x; + if((top.y + top.h) < (box.y + box.h)) box.h = (top.y + top.h) - box.y; + } + + if(box.w < 0) box.w = 0; + if(box.h < 0) box.h = 0; + + clipStack.push(box); + + setScissor(box); + + } // pushClipRect + + void popClipRect() + { + if(clipStack.empty()) + { + LOG(LogError) << "Tried to popClipRect while the stack was empty!"; + return; + } + + clipStack.pop(); + + if(clipStack.empty()) setScissor(Rect(0, 0, 0, 0)); + else setScissor(clipStack.top()); + + } // popClipRect + + void drawRect(const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + { + drawRect((int)Math::round(_x), (int)Math::round(_y), (int)Math::round(_w), (int)Math::round(_h), _color, _srcBlendFactor, _dstBlendFactor); + + } // drawRect + + void drawRect(const int _x, const int _y, const int _w, const int _h, const unsigned int _color, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + { + const unsigned int color = convertColor(_color); + Vertex vertices[4]; + + vertices[0] = { { (float)(_x ), (float)(_y ) }, { 0.0f, 0.0f }, color }; + vertices[1] = { { (float)(_x ), (float)(_y + _h) }, { 0.0f, 0.0f }, color }; + vertices[2] = { { (float)(_x + _w), (float)(_y ) }, { 0.0f, 0.0f }, color }; + vertices[3] = { { (float)(_x + _w), (float)(_y + _h) }, { 0.0f, 0.0f }, color }; + + bindTexture(0); + drawTriangleStrips(vertices, 4, _srcBlendFactor, _dstBlendFactor); + + } // drawRect + + SDL_Window* getSDLWindow() { return sdlWindow; } + int getWindowWidth() { return windowWidth; } + int getWindowHeight() { return windowHeight; } + int getScreenWidth() { return screenWidth; } + int getScreenHeight() { return screenHeight; } + int getScreenOffsetX() { return screenOffsetX; } + int getScreenOffsetY() { return screenOffsetY; } + int getScreenRotate() { return screenRotate; } + +} // Renderer:: diff --git a/es-core/src/renderers/Renderer.h b/es-core/src/renderers/Renderer.h new file mode 100644 index 0000000000..3a409d7a70 --- /dev/null +++ b/es-core/src/renderers/Renderer.h @@ -0,0 +1,102 @@ +#pragma once +#ifndef ES_CORE_RENDERER_RENDERER_H +#define ES_CORE_RENDERER_RENDERER_H + +#include "math/Vector2f.h" + +class Transform4x4f; +class Vector2i; +struct SDL_Window; + +namespace Renderer +{ + namespace Blend + { + enum Factor + { + ZERO = 0, + ONE = 1, + SRC_COLOR = 2, + ONE_MINUS_SRC_COLOR = 3, + SRC_ALPHA = 4, + ONE_MINUS_SRC_ALPHA = 5, + DST_COLOR = 6, + ONE_MINUS_DST_COLOR = 7, + DST_ALPHA = 8, + ONE_MINUS_DST_ALPHA = 9 + + }; // Factor + + } // Blend:: + + namespace Texture + { + enum Type + { + RGBA = 0, + ALPHA = 1 + + }; // Type + + } // Texture:: + + struct Rect + { + Rect(const int _x, const int _y, const int _w, const int _h) : x(_x), y(_y), w(_w), h(_h) { } + + int x; + int y; + int w; + int h; + + }; // Rect + + struct Vertex + { + Vertex() { } + Vertex(const Vector2f& _pos, const Vector2f& _tex, const unsigned int _col) : pos(_pos), tex(_tex), col(_col) { } + + Vector2f pos; + Vector2f tex; + unsigned int col; + + }; // Vertex + + bool init (); + void deinit (); + void pushClipRect (const Vector2i& _pos, const Vector2i& _size); + void popClipRect (); + void drawRect (const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); + void drawRect (const int _x, const int _y, const int _w, const int _h, const unsigned int _color, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); + + SDL_Window* getSDLWindow (); + int getWindowWidth (); + int getWindowHeight (); + int getScreenWidth (); + int getScreenHeight (); + int getScreenOffsetX(); + int getScreenOffsetY(); + int getScreenRotate (); + + // API specific + unsigned int convertColor (const unsigned int _color); + unsigned int getWindowFlags (); + void setupWindow (); + void createContext (); + void destroyContext (); + unsigned int createTexture (const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data); + void destroyTexture (const unsigned int _texture); + void updateTexture (const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data); + void bindTexture (const unsigned int _texture); + void drawLines (const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); + void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); + void setProjection (const Transform4x4f& _projection); + void setMatrix (const Transform4x4f& _matrix); + void setViewport (const Rect& _viewport); + void setScissor (const Rect& _scissor); + void setSwapInterval (); + void swapBuffers (); + +} // Renderer:: + +#endif // ES_CORE_RENDERER_RENDERER_H diff --git a/es-core/src/renderers/Renderer_GL21.cpp b/es-core/src/renderers/Renderer_GL21.cpp new file mode 100644 index 0000000000..4799409818 --- /dev/null +++ b/es-core/src/renderers/Renderer_GL21.cpp @@ -0,0 +1,251 @@ +#if defined(USE_OPENGL_21) + +#include "renderers/Renderer.h" +#include "Log.h" +#include "Settings.h" + +#include +#include + +namespace Renderer +{ + static SDL_GLContext sdlContext = nullptr; + + static GLenum convertBlendFactor(const Blend::Factor _blendFactor) + { + switch(_blendFactor) + { + case Blend::ZERO: { return GL_ZERO; } break; + case Blend::ONE: { return GL_ONE; } break; + case Blend::SRC_COLOR: { return GL_SRC_COLOR; } break; + case Blend::ONE_MINUS_SRC_COLOR: { return GL_ONE_MINUS_SRC_COLOR; } break; + case Blend::SRC_ALPHA: { return GL_SRC_ALPHA; } break; + case Blend::ONE_MINUS_SRC_ALPHA: { return GL_ONE_MINUS_SRC_ALPHA; } break; + case Blend::DST_COLOR: { return GL_DST_COLOR; } break; + case Blend::ONE_MINUS_DST_COLOR: { return GL_ONE_MINUS_DST_COLOR; } break; + case Blend::DST_ALPHA: { return GL_DST_ALPHA; } break; + case Blend::ONE_MINUS_DST_ALPHA: { return GL_ONE_MINUS_DST_ALPHA; } break; + default: { return GL_ZERO; } + } + + } // convertBlendFactor + + static GLenum convertTextureType(const Texture::Type _type) + { + switch(_type) + { + case Texture::RGBA: { return GL_RGBA; } break; + case Texture::ALPHA: { return GL_ALPHA; } break; + default: { return GL_ZERO; } + } + + } // convertTextureType + + unsigned int convertColor(const unsigned int _color) + { + // convert from rgba to abgr + unsigned char r = ((_color & 0xff000000) >> 24) & 255; + unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; + unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; + unsigned char a = ((_color & 0x000000ff) ) & 255; + + return ((a << 24) | (b << 16) | (g << 8) | (r)); + + } // convertColor + + unsigned int getWindowFlags() + { + return SDL_WINDOW_OPENGL; + + } // getWindowFlags + + void setupWindow() + { + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); + + } // setupWindow + + void createContext() + { + sdlContext = SDL_GL_CreateContext(getSDLWindow()); + SDL_GL_MakeCurrent(getSDLWindow(), sdlContext); + + glClearColor(0.5f, 0.5f, 0.5f, 0.0f); + + std::string glExts = (const char*)glGetString(GL_EXTENSIONS); + LOG(LogInfo) << "Checking available OpenGL extensions..."; + LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (glExts.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); + + } // createContext + + void destroyContext() + { + SDL_GL_DeleteContext(sdlContext); + sdlContext = nullptr; + + } // destroyContext + + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) + { + const GLenum type = convertTextureType(_type); + unsigned int texture; + + glGenTextures(1, &texture); + bindTexture(texture); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _linear ? GL_LINEAR : GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, _linear ? GL_LINEAR : GL_NEAREST); + + glPixelStorei(GL_PACK_ALIGNMENT, 1); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + glTexImage2D(GL_TEXTURE_2D, 0, type, _width, _height, 0, type, GL_UNSIGNED_BYTE, _data); + + return texture; + + } // createTexture + + void destroyTexture(const unsigned int _texture) + { + glDeleteTextures(1, &_texture); + + } // destroyTexture + + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) + { + bindTexture(_texture); + glTexSubImage2D(GL_TEXTURE_2D, 0, _x, _y, _width, _height, convertTextureType(_type), GL_UNSIGNED_BYTE, _data); + bindTexture(0); + + } // updateTexture + + void bindTexture(const unsigned int _texture) + { + glBindTexture(GL_TEXTURE_2D, _texture); + + if(_texture == 0) glDisable(GL_TEXTURE_2D); + else glEnable(GL_TEXTURE_2D); + + } // bindTexture + + void drawLines(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + { + glEnable(GL_BLEND); + glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor)); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + + glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos); + glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex); + glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col); + + glDrawArrays(GL_LINES, 0, _numVertices); + + glDisableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); + + glDisable(GL_BLEND); + + } // drawLines + + void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + { + glEnable(GL_BLEND); + glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor)); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + + glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos); + glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex); + glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVertices); + + glDisableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); + + glDisable(GL_BLEND); + + } // drawTriangleStrips + + void setProjection(const Transform4x4f& _projection) + { + glMatrixMode(GL_PROJECTION); + glLoadMatrixf((GLfloat*)&_projection); + + } // setProjection + + void setMatrix(const Transform4x4f& _matrix) + { + glMatrixMode(GL_MODELVIEW); + glLoadMatrixf((GLfloat*)&_matrix); + + } // setMatrix + + void setViewport(const Rect& _viewport) + { + // glViewport starts at the bottom left of the window + glViewport( _viewport.x, getWindowHeight() - _viewport.y - _viewport.h, _viewport.w, _viewport.h); + + } // setViewport + + void setScissor(const Rect& _scissor) + { + if((_scissor.x == 0) && (_scissor.y == 0) && (_scissor.w == 0) && (_scissor.h == 0)) + { + glDisable(GL_SCISSOR_TEST); + } + else + { + // glScissor starts at the bottom left of the window + glScissor(_scissor.x, getWindowHeight() - _scissor.y - _scissor.h, _scissor.w, _scissor.h); + glEnable(GL_SCISSOR_TEST); + } + + } // setScissor + + void setSwapInterval() + { + // vsync + if(Settings::getInstance()->getBool("VSync")) + { + // SDL_GL_SetSwapInterval(0) for immediate updates (no vsync, default), + // 1 for updates synchronized with the vertical retrace, + // or -1 for late swap tearing. + // SDL_GL_SetSwapInterval returns 0 on success, -1 on error. + // if vsync is requested, try normal vsync; if that doesn't work, try late swap tearing + // if that doesn't work, report an error + if(SDL_GL_SetSwapInterval(1) != 0 && SDL_GL_SetSwapInterval(-1) != 0) + LOG(LogWarning) << "Tried to enable vsync, but failed! (" << SDL_GetError() << ")"; + } + else + SDL_GL_SetSwapInterval(0); + + } // setSwapInterval + + void swapBuffers() + { + SDL_GL_SwapWindow(getSDLWindow()); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + } // swapBuffers + +} // Renderer:: + +#endif // USE_OPENGL_21 diff --git a/es-core/src/renderers/Renderer_GLES10.cpp b/es-core/src/renderers/Renderer_GLES10.cpp new file mode 100644 index 0000000000..1d402822e0 --- /dev/null +++ b/es-core/src/renderers/Renderer_GLES10.cpp @@ -0,0 +1,251 @@ +#if defined(USE_OPENGLES_10) + +#include "renderers/Renderer.h" +#include "Log.h" +#include "Settings.h" + +#include +#include + +namespace Renderer +{ + static SDL_GLContext sdlContext = nullptr; + + static GLenum convertBlendFactor(const Blend::Factor _blendFactor) + { + switch(_blendFactor) + { + case Blend::ZERO: { return GL_ZERO; } break; + case Blend::ONE: { return GL_ONE; } break; + case Blend::SRC_COLOR: { return GL_SRC_COLOR; } break; + case Blend::ONE_MINUS_SRC_COLOR: { return GL_ONE_MINUS_SRC_COLOR; } break; + case Blend::SRC_ALPHA: { return GL_SRC_ALPHA; } break; + case Blend::ONE_MINUS_SRC_ALPHA: { return GL_ONE_MINUS_SRC_ALPHA; } break; + case Blend::DST_COLOR: { return GL_DST_COLOR; } break; + case Blend::ONE_MINUS_DST_COLOR: { return GL_ONE_MINUS_DST_COLOR; } break; + case Blend::DST_ALPHA: { return GL_DST_ALPHA; } break; + case Blend::ONE_MINUS_DST_ALPHA: { return GL_ONE_MINUS_DST_ALPHA; } break; + default: { return GL_ZERO; } + } + + } // convertBlendFactor + + static GLenum convertTextureType(const Texture::Type _type) + { + switch(_type) + { + case Texture::RGBA: { return GL_RGBA; } break; + case Texture::ALPHA: { return GL_ALPHA; } break; + default: { return GL_ZERO; } + } + + } // convertTextureType + + unsigned int convertColor(const unsigned int _color) + { + // convert from rgba to abgr + unsigned char r = ((_color & 0xff000000) >> 24) & 255; + unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; + unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; + unsigned char a = ((_color & 0x000000ff) ) & 255; + + return ((a << 24) | (b << 16) | (g << 8) | (r)); + + } // convertColor + + unsigned int getWindowFlags() + { + return SDL_WINDOW_OPENGL; + + } // getWindowFlags + + void setupWindow() + { + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 0); + + } // setupWindow + + void createContext() + { + sdlContext = SDL_GL_CreateContext(getSDLWindow()); + SDL_GL_MakeCurrent(getSDLWindow(), sdlContext); + + glClearColor(0.5f, 0.5f, 0.5f, 0.0f); + + std::string glExts = (const char*)glGetString(GL_EXTENSIONS); + LOG(LogInfo) << "Checking available OpenGL extensions..."; + LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (glExts.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); + + } // createContext + + void destroyContext() + { + SDL_GL_DeleteContext(sdlContext); + sdlContext = nullptr; + + } // destroyContext + + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) + { + const GLenum type = convertTextureType(_type); + unsigned int texture; + + glGenTextures(1, &texture); + bindTexture(texture); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _linear ? GL_LINEAR : GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, _linear ? GL_LINEAR : GL_NEAREST); + + glPixelStorei(GL_PACK_ALIGNMENT, 1); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + glTexImage2D(GL_TEXTURE_2D, 0, type, _width, _height, 0, type, GL_UNSIGNED_BYTE, _data); + + return texture; + + } // createTexture + + void destroyTexture(const unsigned int _texture) + { + glDeleteTextures(1, &_texture); + + } // destroyTexture + + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) + { + bindTexture(_texture); + glTexSubImage2D(GL_TEXTURE_2D, 0, _x, _y, _width, _height, convertTextureType(_type), GL_UNSIGNED_BYTE, _data); + bindTexture(0); + + } // updateTexture + + void bindTexture(const unsigned int _texture) + { + glBindTexture(GL_TEXTURE_2D, _texture); + + if(_texture == 0) glDisable(GL_TEXTURE_2D); + else glEnable(GL_TEXTURE_2D); + + } // bindTexture + + void drawLines(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + { + glEnable(GL_BLEND); + glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor)); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + + glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos); + glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex); + glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col); + + glDrawArrays(GL_LINES, 0, _numVertices); + + glDisableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); + + glDisable(GL_BLEND); + + } // drawLines + + void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + { + glEnable(GL_BLEND); + glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor)); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); + + glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos); + glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex); + glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVertices); + + glDisableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); + + glDisable(GL_BLEND); + + } // drawTriangleStrips + + void setProjection(const Transform4x4f& _projection) + { + glMatrixMode(GL_PROJECTION); + glLoadMatrixf((GLfloat*)&_projection); + + } // setProjection + + void setMatrix(const Transform4x4f& _matrix) + { + glMatrixMode(GL_MODELVIEW); + glLoadMatrixf((GLfloat*)&_matrix); + + } // setMatrix + + void setViewport(const Rect& _viewport) + { + // glViewport starts at the bottom left of the window + glViewport( _viewport.x, getWindowHeight() - _viewport.y - _viewport.h, _viewport.w, _viewport.h); + + } // setViewport + + void setScissor(const Rect& _scissor) + { + if((_scissor.x == 0) && (_scissor.y == 0) && (_scissor.w == 0) && (_scissor.h == 0)) + { + glDisable(GL_SCISSOR_TEST); + } + else + { + // glScissor starts at the bottom left of the window + glScissor(_scissor.x, getWindowHeight() - _scissor.y - _scissor.h, _scissor.w, _scissor.h); + glEnable(GL_SCISSOR_TEST); + } + + } // setScissor + + void setSwapInterval() + { + // vsync + if(Settings::getInstance()->getBool("VSync")) + { + // SDL_GL_SetSwapInterval(0) for immediate updates (no vsync, default), + // 1 for updates synchronized with the vertical retrace, + // or -1 for late swap tearing. + // SDL_GL_SetSwapInterval returns 0 on success, -1 on error. + // if vsync is requested, try normal vsync; if that doesn't work, try late swap tearing + // if that doesn't work, report an error + if(SDL_GL_SetSwapInterval(1) != 0 && SDL_GL_SetSwapInterval(-1) != 0) + LOG(LogWarning) << "Tried to enable vsync, but failed! (" << SDL_GetError() << ")"; + } + else + SDL_GL_SetSwapInterval(0); + + } // setSwapInterval + + void swapBuffers() + { + SDL_GL_SwapWindow(getSDLWindow()); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + } // swapBuffers + +} // Renderer:: + +#endif // USE_OPENGLES_10 diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index f0e93e61cc..c84f059bd1 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -1,9 +1,13 @@ #include "resources/Font.h" +#include "renderers/Renderer.h" #include "utils/FileSystemUtil.h" #include "utils/StringUtil.h" #include "Log.h" -#include "Renderer.h" + +#ifdef WIN32 +#include +#endif FT_Library Font::sLibrary = NULL; @@ -171,27 +175,14 @@ bool Font::FontTexture::findEmpty(const Vector2i& size, Vector2i& cursor_out) void Font::FontTexture::initTexture() { assert(textureId == 0); - - glGenTextures(1, &textureId); - glBindTexture(GL_TEXTURE_2D, textureId); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glPixelStorei(GL_PACK_ALIGNMENT, 1); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, textureSize.x(), textureSize.y(), 0, GL_ALPHA, GL_UNSIGNED_BYTE, NULL); + textureId = Renderer::createTexture(Renderer::Texture::ALPHA, false, false, textureSize.x(), textureSize.y(), nullptr); } void Font::FontTexture::deinitTexture() { if(textureId != 0) { - glDeleteTextures(1, &textureId); + Renderer::destroyTexture(textureId); textureId = 0; } } @@ -355,9 +346,7 @@ Font::Glyph* Font::getGlyph(unsigned int id) glyph.bearing = Vector2f((float)g->metrics.horiBearingX / 64.0f, (float)g->metrics.horiBearingY / 64.0f); // upload glyph bitmap to texture - glBindTexture(GL_TEXTURE_2D, tex->textureId); - glTexSubImage2D(GL_TEXTURE_2D, 0, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), GL_ALPHA, GL_UNSIGNED_BYTE, g->bitmap.buffer); - glBindTexture(GL_TEXTURE_2D, 0); + Renderer::updateTexture(tex->textureId, Renderer::Texture::ALPHA, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), g->bitmap.buffer); // update max glyph height if(glyphSize.y() > mMaxGlyphHeight) @@ -392,11 +381,8 @@ void Font::rebuildTextures() Vector2i glyphSize((int)(it->second.texSize.x() * tex->textureSize.x()), (int)(it->second.texSize.y() * tex->textureSize.y())); // upload to texture - glBindTexture(GL_TEXTURE_2D, tex->textureId); - glTexSubImage2D(GL_TEXTURE_2D, 0, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), GL_ALPHA, GL_UNSIGNED_BYTE, glyphSlot->bitmap.buffer); + Renderer::updateTexture(tex->textureId, Renderer::Texture::ALPHA, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), glyphSlot->bitmap.buffer); } - - glBindTexture(GL_TEXTURE_2D, 0); } void Font::renderTextCache(TextCache* cache) @@ -413,27 +399,8 @@ void Font::renderTextCache(TextCache* cache) auto vertexList = *it; - glBindTexture(GL_TEXTURE_2D, *it->textureIdPtr); - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - - glVertexPointer(2, GL_FLOAT, sizeof(TextCache::Vertex), &it->verts[0].pos); - glTexCoordPointer(2, GL_FLOAT, sizeof(TextCache::Vertex), &it->verts[0].tex); - glColorPointer(4, GL_UNSIGNED_BYTE, 0, it->colors.data()); - - glDrawArrays(GL_TRIANGLES, 0, (GLsizei)(it->verts.size())); - - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); + Renderer::bindTexture(*it->textureIdPtr); + Renderer::drawTriangleStrips(&it->verts[0], it->verts.size()); } } @@ -605,7 +572,7 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign float y = offset[1] + (yBot + yTop)/2.0f; // vertices by texture - std::map< FontTexture*, std::vector > vertMap; + std::map< FontTexture*, std::vector > vertMap; size_t cursor = 0; while(cursor < text.length()) @@ -628,37 +595,23 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign if(glyph == NULL) continue; - std::vector& verts = vertMap[glyph->texture]; + std::vector& verts = vertMap[glyph->texture]; size_t oldVertSize = verts.size(); verts.resize(oldVertSize + 6); - TextCache::Vertex* tri = verts.data() + oldVertSize; - - const float glyphStartX = x + glyph->bearing.x(); + Renderer::Vertex* vertices = verts.data() + oldVertSize; - const Vector2i& textureSize = glyph->texture->textureSize; + const float glyphStartX = x + glyph->bearing.x(); + const Vector2i& textureSize = glyph->texture->textureSize; + const unsigned int convertedColor = Renderer::convertColor(color); - // triangle 1 - // round to fix some weird "cut off" text bugs - tri[0].pos = Vector2f(Math::round(glyphStartX), Math::round(y + (glyph->texSize.y() * textureSize.y() - glyph->bearing.y()))); - tri[1].pos = Vector2f(Math::round(glyphStartX + glyph->texSize.x() * textureSize.x()), Math::round(y - glyph->bearing.y())); - tri[2].pos = Vector2f(tri[0].pos.x(), tri[1].pos.y()); + vertices[1] = { { Math::round(glyphStartX ), Math::round(y - glyph->bearing.y() ) }, { glyph->texPos.x(), glyph->texPos.y() }, convertedColor }; + vertices[2] = { { Math::round(glyphStartX ), Math::round(y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y())) }, { glyph->texPos.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; + vertices[3] = { { Math::round(glyphStartX + glyph->texSize.x() * textureSize.x()), Math::round(y - glyph->bearing.y() ) }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() }, convertedColor }; + vertices[4] = { { Math::round(glyphStartX + glyph->texSize.x() * textureSize.x()), Math::round(y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y())) }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; - //tri[0].tex = Vector2f(0, 0); - //tri[0].tex = Vector2f(1, 1); - //tri[0].tex = Vector2f(0, 1); - - tri[0].tex = Vector2f(glyph->texPos.x(), glyph->texPos.y() + glyph->texSize.y()); - tri[1].tex = Vector2f(glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y()); - tri[2].tex = Vector2f(tri[0].tex.x(), tri[1].tex.y()); - - // triangle 2 - tri[3].pos = tri[0].pos; - tri[4].pos = tri[1].pos; - tri[5].pos = Vector2f(tri[1].pos.x(), tri[0].pos.y()); - - tri[3].tex = tri[0].tex; - tri[4].tex = tri[1].tex; - tri[5].tex = Vector2f(tri[1].tex.x(), tri[0].tex.y()); + // make duplicates of first and last vertex so this can be rendered as a triangle strip + vertices[0] = vertices[1]; + vertices[5] = vertices[4]; // advance x += glyph->advance.x(); @@ -677,9 +630,6 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign vertList.textureIdPtr = &it->first->textureId; vertList.verts = it->second; - - vertList.colors.resize(4 * it->second.size()); - Renderer::buildGLColorArray(vertList.colors.data(), color, (unsigned int)(it->second.size())); } clearFaceCache(); @@ -694,8 +644,11 @@ TextCache* Font::buildTextCache(const std::string& text, float offsetX, float of void TextCache::setColor(unsigned int color) { - for(auto it = vertexLists.cbegin(); it != vertexLists.cend(); it++) - Renderer::buildGLColorArray((GLubyte*)(it->colors.data()), color, (unsigned int)(it->verts.size())); + const unsigned int convertedColor = Renderer::convertColor(color); + + for(auto it = vertexLists.begin(); it != vertexLists.end(); it++) + for(auto it2 = it->verts.begin(); it2 != it->verts.end(); it2++) + it2->col = convertedColor; } std::shared_ptr Font::getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig) diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index 585c892461..72a201f9c4 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -4,8 +4,8 @@ #include "math/Vector2f.h" #include "math/Vector2i.h" +#include "renderers/Renderer.h" #include "resources/ResourceManager.h" -#include "Renderer.h" #include "ThemeData.h" #include #include FT_FREETYPE_H @@ -74,7 +74,7 @@ class Font : public IReloadable struct FontTexture { - GLuint textureId; + unsigned int textureId; Vector2i textureSize; Vector2i writePos; @@ -141,17 +141,11 @@ class Font : public IReloadable class TextCache { protected: - struct Vertex - { - Vector2f pos; - Vector2f tex; - }; struct VertexList { - GLuint* textureIdPtr; // this is a pointer because the texture ID can change during deinit/reinit (when launching a game) - std::vector verts; - std::vector colors; + std::vector verts; + unsigned int* textureIdPtr; // this is a pointer because the texture ID can change during deinit/reinit (when launching a game) }; std::vector vertexLists; diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index f493a91c46..11cc756379 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -1,11 +1,10 @@ #include "resources/TextureData.h" #include "math/Misc.h" +#include "renderers/Renderer.h" #include "resources/ResourceManager.h" #include "ImageIO.h" #include "Log.h" -#include "platform.h" -#include GLHEADER #include #include #include @@ -162,7 +161,7 @@ bool TextureData::uploadAndBind() std::unique_lock lock(mMutex); if (mTextureID != 0) { - glBindTexture(GL_TEXTURE_2D, mTextureID); + Renderer::bindTexture(mTextureID); } else { @@ -174,19 +173,9 @@ bool TextureData::uploadAndBind() // Make sure we're ready to upload if ((mWidth == 0) || (mHeight == 0) || (mDataRGBA == nullptr)) return false; - glGetError(); - //now for the openGL texture stuff - glGenTextures(1, &mTextureID); - glBindTexture(GL_TEXTURE_2D, mTextureID); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)mWidth, (GLsizei)mHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, mDataRGBA); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - - const GLint wrapMode = mTile ? GL_REPEAT : GL_CLAMP_TO_EDGE; - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode); + // Upload texture + mTextureID = Renderer::createTexture(Renderer::Texture::RGBA, true, mTile, mWidth, mHeight, mDataRGBA); } return true; } @@ -196,7 +185,7 @@ void TextureData::releaseVRAM() std::unique_lock lock(mMutex); if (mTextureID != 0) { - glDeleteTextures(1, &mTextureID); + Renderer::destroyTexture(mTextureID); mTextureID = 0; } } diff --git a/es-core/src/resources/TextureData.h b/es-core/src/resources/TextureData.h index 3ac6f239ef..44dc92623c 100644 --- a/es-core/src/resources/TextureData.h +++ b/es-core/src/resources/TextureData.h @@ -2,8 +2,6 @@ #ifndef ES_CORE_RESOURCES_TEXTURE_DATA_H #define ES_CORE_RESOURCES_TEXTURE_DATA_H -#include "platform.h" -#include GLHEADER #include #include @@ -53,7 +51,7 @@ class TextureData std::mutex mMutex; bool mTile; std::string mPath; - GLuint mTextureID; + unsigned int mTextureID; unsigned char* mDataRGBA; size_t mWidth; size_t mHeight; From 9de16045c9afe27455af190518aff84194cfc9ee Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sun, 25 Aug 2019 17:23:02 +0200 Subject: [PATCH 376/603] whitespace cleanup fix faulty line endings silence warnings on windows --- README.md | 28 +++++++------- es-app/src/CollectionSystemManager.cpp | 2 +- es-app/src/FileData.cpp | 22 +++++------ es-app/src/FileFilterIndex.cpp | 4 +- es-app/src/MetaData.cpp | 2 +- es-app/src/MetaData.h | 2 +- es-app/src/ScraperCmdLine.cpp | 6 +-- es-app/src/SystemData.cpp | 4 +- es-app/src/SystemData.h | 2 +- es-app/src/VolumeControl.cpp | 8 ++-- es-app/src/animations/LaunchAnimation.h | 4 +- es-app/src/components/AsyncReqComponent.cpp | 6 +-- es-app/src/components/AsyncReqComponent.h | 2 +- .../src/components/ScraperSearchComponent.cpp | 24 ++++++------ .../src/components/ScraperSearchComponent.h | 4 +- es-app/src/components/TextListComponent.h | 16 ++++---- es-app/src/guis/GuiFastSelect.cpp | 2 +- es-app/src/guis/GuiGamelistFilter.cpp | 2 +- es-app/src/guis/GuiGamelistOptions.cpp | 2 +- .../src/guis/GuiGeneralScreensaverOptions.cpp | 4 +- es-app/src/guis/GuiMenu.cpp | 6 +-- es-app/src/guis/GuiMetaDataEd.cpp | 2 +- es-app/src/guis/GuiMetaDataEd.h | 6 +-- es-app/src/guis/GuiScraperMulti.h | 2 +- es-app/src/guis/GuiScraperStart.cpp | 14 +++---- es-app/src/guis/GuiSettings.cpp | 2 +- es-app/src/main.cpp | 8 ++-- es-app/src/scrapers/Scraper.cpp | 14 +++---- es-app/src/scrapers/Scraper.h | 6 +-- es-app/src/scrapers/ScreenScraper.cpp | 6 +-- es-app/src/scrapers/ScreenScraper.h | 2 +- es-app/src/views/UIModeController.h | 8 ++-- es-app/src/views/ViewController.h | 4 +- .../views/gamelist/DetailedGameListView.cpp | 20 +++++----- es-app/src/views/gamelist/IGameListView.cpp | 2 +- es-app/src/views/gamelist/IGameListView.h | 2 +- .../views/gamelist/ISimpleGameListView.cpp | 2 +- .../src/views/gamelist/ISimpleGameListView.h | 2 +- es-core/src/HttpReq.cpp | 8 ++-- es-core/src/HttpReq.h | 2 +- es-core/src/InputConfig.cpp | 2 +- es-core/src/InputManager.cpp | 10 ++--- es-core/src/MameNames.cpp | 28 +++++++------- es-core/src/MameNames.h | 2 +- es-core/src/Settings.cpp | 2 +- es-core/src/Sound.cpp | 2 +- es-core/src/ThemeData.cpp | 24 ++++++------ es-core/src/ThemeData.h | 2 +- es-core/src/Window.cpp | 6 +-- .../src/components/AnimatedImageComponent.cpp | 2 +- .../src/components/AnimatedImageComponent.h | 2 +- es-core/src/components/BusyComponent.cpp | 2 +- es-core/src/components/ButtonComponent.cpp | 10 ++--- es-core/src/components/ButtonComponent.h | 2 +- es-core/src/components/ComponentGrid.cpp | 16 ++++---- es-core/src/components/ComponentGrid.h | 10 ++--- es-core/src/components/ComponentList.h | 8 ++-- .../src/components/DateTimeEditComponent.cpp | 18 ++++----- .../src/components/DateTimeEditComponent.h | 2 +- es-core/src/components/HelpComponent.cpp | 6 +-- es-core/src/components/IList.h | 12 +++--- es-core/src/components/ImageComponent.cpp | 8 ++-- es-core/src/components/NinePatchComponent.cpp | 2 +- .../src/components/ScrollableContainer.cpp | 2 +- es-core/src/components/SliderComponent.cpp | 8 ++-- es-core/src/components/SliderComponent.h | 4 +- es-core/src/components/SwitchComponent.cpp | 2 +- es-core/src/components/TextComponent.cpp | 6 +-- es-core/src/components/TextEditComponent.cpp | 8 ++-- es-core/src/components/TextEditComponent.h | 2 +- es-core/src/guis/GuiDetectDevice.cpp | 8 ++-- es-core/src/guis/GuiInputConfig.cpp | 20 ++++++---- es-core/src/guis/GuiInputConfig.h | 2 +- es-core/src/guis/GuiMsgBox.cpp | 10 ++--- es-core/src/guis/GuiMsgBox.h | 4 +- es-core/src/guis/GuiTextEditPopup.cpp | 2 +- es-core/src/guis/GuiTextEditPopup.h | 2 +- es-core/src/platform.cpp | 8 ++-- es-core/src/renderers/Renderer.cpp | 2 +- es-core/src/renderers/Renderer.h | 10 ++--- es-core/src/renderers/Renderer_GL21.cpp | 4 +- es-core/src/renderers/Renderer_GLES10.cpp | 4 +- es-core/src/resources/Font.cpp | 20 +++++----- es-core/src/resources/Font.h | 6 +-- es-core/src/utils/FileSystemUtil.cpp | 38 +++++++++---------- es-core/src/utils/FileSystemUtil.h | 1 + es-core/src/utils/StringUtil.cpp | 13 +++---- es-core/src/utils/StringUtil.h | 2 +- es-core/src/utils/TimeUtil.cpp | 4 +- 89 files changed, 318 insertions(+), 316 deletions(-) diff --git a/README.md b/README.md index 49ff0c5338..7543220f61 100644 --- a/README.md +++ b/README.md @@ -98,20 +98,20 @@ The new configuration will be added to the `~/.emulationstation/es_input.cfg` fi You can use `--help` or `-h` to view a list of command-line options. Briefly outlined here: ``` ---resolution [width] [height] try and force a particular resolution ---gamelist-only skip automatic game search, only read from gamelist.xml ---ignore-gamelist ignore the gamelist (useful for troubleshooting) ---draw-framerate display the framerate ---no-exit don't show the exit option in the menu ---no-splash don't show the splash screen ---debug more logging, show console on Windows ---scrape scrape using command line interface ---windowed not fullscreen, should be used with --resolution ---vsync [1/on or 0/off] turn vsync on or off (default is on) ---max-vram [size] Max VRAM to use in Mb before swapping. 0 for unlimited ---force-kid Force the UI mode to be Kid ---force-kiosk Force the UI mode to be Kiosk ---force-disable-filters Force the UI to ignore applied filters in gamelist +--resolution [width] [height] try and force a particular resolution +--gamelist-only skip automatic game search, only read from gamelist.xml +--ignore-gamelist ignore the gamelist (useful for troubleshooting) +--draw-framerate display the framerate +--no-exit don't show the exit option in the menu +--no-splash don't show the splash screen +--debug more logging, show console on Windows +--scrape scrape using command line interface +--windowed not fullscreen, should be used with --resolution +--vsync [1/on or 0/off] turn vsync on or off (default is on) +--max-vram [size] Max VRAM to use in Mb before swapping. 0 for unlimited +--force-kid Force the UI mode to be Kid +--force-kiosk Force the UI mode to be Kiosk +--force-disable-filters Force the UI to ignore applied filters in gamelist --help, -h summon a sentient, angry tuba ``` diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index ea3f629da7..6b665df78c 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -284,7 +284,7 @@ void CollectionSystemManager::updateCollectionSystem(FileData* file, CollectionS trimCollectionCount(rootFolder, LAST_PLAYED_MAX); ViewController::get()->onFileChanged(rootFolder, FILE_METADATA_CHANGED); } - else + else ViewController::get()->onFileChanged(rootFolder, FILE_SORTED); } } diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 2238c60f92..f4781d13d4 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -345,17 +345,17 @@ void CollectionFileData::refreshMetadata() mDirty = true; } -const std::string& CollectionFileData::getName() -{ - if (mDirty) { - mCollectionFileName = Utils::String::removeParenthesis(mSourceFileData->metadata.get("name")); - mCollectionFileName += " [" + Utils::String::toUpper(mSourceFileData->getSystem()->getName()) + "]"; - mDirty = false; - } - - if (Settings::getInstance()->getBool("CollectionShowSystemInfo")) - return mCollectionFileName; - return mSourceFileData->metadata.get("name"); +const std::string& CollectionFileData::getName() +{ + if (mDirty) { + mCollectionFileName = Utils::String::removeParenthesis(mSourceFileData->metadata.get("name")); + mCollectionFileName += " [" + Utils::String::toUpper(mSourceFileData->getSystem()->getName()) + "]"; + mDirty = false; + } + + if (Settings::getInstance()->getBool("CollectionShowSystemInfo")) + return mCollectionFileName; + return mSourceFileData->metadata.get("name"); } // returns Sort Type based on a string description diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index bb077f8782..4ddf6b8302 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -280,10 +280,10 @@ void FileFilterIndex::debugPrintIndexes() } for (auto x: favoritesIndexAllKeys) { LOG(LogInfo) << "Favorites Index: " << x.first << ": " << x.second; - } + } for (auto x : hiddenIndexAllKeys) { LOG(LogInfo) << "Hidden Index: " << x.first << ": " << x.second; - } + } for (auto x : kidGameIndexAllKeys) { LOG(LogInfo) << "KidGames Index: " << x.first << ": " << x.second; } diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 8a977e9509..27ef542af4 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -108,7 +108,7 @@ void MetaDataList::appendToXML(pugi::xml_node& parent, bool ignoreDefaults, cons // if it's just the default (and we ignore defaults), don't write it if(ignoreDefaults && mapIter->second == mddIter->defaultValue) continue; - + // try and make paths relative if we can std::string value = mapIter->second; if (mddIter->type == MD_PATH) diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 6ed8f6d44c..717f24bfd6 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -48,7 +48,7 @@ class MetaDataList void appendToXML(pugi::xml_node& parent, bool ignoreDefaults, const std::string& relativeTo) const; MetaDataList(MetaDataListType type); - + void set(const std::string& key, const std::string& value); const std::string& get(const std::string& key) const; diff --git a/es-app/src/ScraperCmdLine.cpp b/es-app/src/ScraperCmdLine.cpp index 768808fcce..dda5635957 100644 --- a/es-app/src/ScraperCmdLine.cpp +++ b/es-app/src/ScraperCmdLine.cpp @@ -64,7 +64,7 @@ int run_scraper_cmdline() std::string system_choice; std::getline(std::cin, system_choice); - + if(system_choice == "y" || system_choice == "Y") { out << "Will scrape all platforms.\n"; @@ -92,7 +92,7 @@ int run_scraper_cmdline() } std::getline(std::cin, sys_name); - + if(sys_name.empty()) break; @@ -209,7 +209,7 @@ int run_scraper_cmdline() int choice = -1; std::string choice_str; - + out << "Your choice: "; std::getline(std::cin, choice_str); diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index d6e72cfd32..65c4fc9757 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -346,7 +346,7 @@ std::string SystemData::getConfigPath(bool forWrite) bool SystemData::isVisible() { - return (getDisplayedGameCount() > 0 || + return (getDisplayedGameCount() > 0 || (UIModeController::getInstance()->isUIModeFull() && mIsCollectionSystem) || (mIsCollectionSystem && mName == "favorites")); } @@ -494,7 +494,7 @@ void SystemData::loadTheme() sysData.insert(std::pair("system.name", getName())); sysData.insert(std::pair("system.theme", getThemeFolder())); sysData.insert(std::pair("system.fullName", getFullName())); - + mTheme->loadFile(sysData, path); } catch(ThemeException& e) { diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index ad0456b3c4..63bf667fec 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -58,7 +58,7 @@ class SystemData inline bool isGameSystem() { return mIsGameSystem; }; bool isVisible(); - + SystemData* getNext() const; SystemData* getPrev() const; static SystemData* getRandomSystem(); diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index 862f1eaf55..9153523ed8 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -184,7 +184,7 @@ void VolumeControl::init() } } } - else + else { //Windows Vista or above. use EndpointVolume API. get device enumerator if (endpointVolume == nullptr) @@ -299,7 +299,7 @@ int VolumeControl::getVolume() const mixerControlDetails.cMultipleItems = 0; //always 0 except for a MIXERCONTROL_CONTROLF_MULTIPLE control mixerControlDetails.paDetails = &value; mixerControlDetails.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); - if (mixerGetControlDetails((HMIXEROBJ)mixerHandle, &mixerControlDetails, MIXER_GETCONTROLDETAILSF_VALUE) == MMSYSERR_NOERROR) + if (mixerGetControlDetails((HMIXEROBJ)mixerHandle, &mixerControlDetails, MIXER_GETCONTROLDETAILSF_VALUE) == MMSYSERR_NOERROR) { volume = (int)Math::round((value.dwValue * 100) / 65535.0f); } @@ -321,7 +321,7 @@ int VolumeControl::getVolume() const { LOG(LogError) << "VolumeControl::getVolume() - Failed to get master volume!"; } - + } #endif //clamp to 0-100 range @@ -361,7 +361,7 @@ void VolumeControl::setVolume(int volume) { //ok. bring into minVolume-maxVolume range and set long rawVolume = (volume * (maxVolume - minVolume) / 100) + minVolume; - if (snd_mixer_selem_set_playback_volume(mixerElem, SND_MIXER_SCHN_FRONT_LEFT, rawVolume) < 0 + if (snd_mixer_selem_set_playback_volume(mixerElem, SND_MIXER_SCHN_FRONT_LEFT, rawVolume) < 0 || snd_mixer_selem_set_playback_volume(mixerElem, SND_MIXER_SCHN_FRONT_RIGHT, rawVolume) < 0) { LOG(LogError) << "VolumeControl::getVolume() - Failed to set mixer volume!"; diff --git a/es-app/src/animations/LaunchAnimation.h b/es-app/src/animations/LaunchAnimation.h index 40d9f093d9..2c548afb80 100644 --- a/es-app/src/animations/LaunchAnimation.h +++ b/es-app/src/animations/LaunchAnimation.h @@ -32,7 +32,7 @@ class LaunchAnimation : public Animation { public: //Target is a centerpoint - LaunchAnimation(Transform4x4f& camera, float& fade, const Vector3f& target, int duration) : + LaunchAnimation(Transform4x4f& camera, float& fade, const Vector3f& target, int duration) : mCameraStart(camera), mTarget(target), mDuration(duration), cameraOut(camera), fadeOut(fade) {} int getDuration() const override { return mDuration; } @@ -51,7 +51,7 @@ class LaunchAnimation : public Animation const Vector2f centerPoint = Vector2f().lerp(startPoint, Vector2f(mTarget), Math::smootherStep(0.0, 1.0, t)); cameraOut.translate(Vector3f((sw / 2) - centerPoint.x(), (sh / 2) - centerPoint.y(), 0)); - + fadeOut = Math::lerp(0.0, 1.0, t*t); } diff --git a/es-app/src/components/AsyncReqComponent.cpp b/es-app/src/components/AsyncReqComponent.cpp index a4e5ff5725..6c811dcf85 100644 --- a/es-app/src/components/AsyncReqComponent.cpp +++ b/es-app/src/components/AsyncReqComponent.cpp @@ -3,11 +3,11 @@ #include "renderers/Renderer.h" #include "HttpReq.h" -AsyncReqComponent::AsyncReqComponent(Window* window, std::shared_ptr req, std::function)> onSuccess, std::function onCancel) - : GuiComponent(window), +AsyncReqComponent::AsyncReqComponent(Window* window, std::shared_ptr req, std::function)> onSuccess, std::function onCancel) + : GuiComponent(window), mSuccessFunc(onSuccess), mCancelFunc(onCancel), mTime(0), mRequest(req) { - + } bool AsyncReqComponent::input(InputConfig* config, Input input) diff --git a/es-app/src/components/AsyncReqComponent.h b/es-app/src/components/AsyncReqComponent.h index 35cb017340..6b051157bd 100644 --- a/es-app/src/components/AsyncReqComponent.h +++ b/es-app/src/components/AsyncReqComponent.h @@ -6,7 +6,7 @@ class HttpReq; -/* +/* Used to asynchronously run an HTTP request. Displays a simple animation on the UI to show the application hasn't frozen. Can be canceled by the user pressing B. diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index 87aacba10e..bc28d3b264 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -15,7 +15,7 @@ #include "Window.h" ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) : GuiComponent(window), - mGrid(window, Vector2i(4, 3)), mBusyAnim(window), + mGrid(window, Vector2i(4, 3)), mBusyAnim(window), mSearchType(type) { addChild(&mGrid); @@ -37,7 +37,7 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) mResultDesc = std::make_shared(mWindow, "Result desc", Font::get(FONT_SIZE_SMALL), 0x777777FF); mDescContainer->addChild(mResultDesc.get()); mDescContainer->setAutoScroll(true); - + // metadata auto font = Font::get(FONT_SIZE_SMALL); // this gets replaced in onSizeChanged() so its just a placeholder const unsigned int mdColor = 0x777777FF; @@ -78,7 +78,7 @@ ScraperSearchComponent::ScraperSearchComponent(Window* window, SearchType type) void ScraperSearchComponent::onSizeChanged() { mGrid.setSize(mSize); - + if(mSize.x() == 0 || mSize.y() == 0) return; @@ -87,10 +87,10 @@ void ScraperSearchComponent::onSizeChanged() mGrid.setColWidthPerc(0, 0.02f); // looks better when this is higher in auto mode else mGrid.setColWidthPerc(0, 0.01f); - + mGrid.setColWidthPerc(1, 0.25f); mGrid.setColWidthPerc(2, 0.25f); - + // row heights if(mSearchType == ALWAYS_ACCEPT_FIRST_RESULT) // show name mGrid.setRowHeightPerc(0, (mResultName->getFont()->getHeight() * 1.6f) / mGrid.getSize().y()); // result name @@ -112,12 +112,12 @@ void ScraperSearchComponent::onSizeChanged() // metadata resizeMetadata(); - + if(mSearchType != ALWAYS_ACCEPT_FIRST_RESULT) mDescContainer->setSize(mGrid.getColWidth(1)*boxartCellScale + mGrid.getColWidth(2), mResultDesc->getFont()->getHeight() * 3); else mDescContainer->setSize(mGrid.getColWidth(3)*boxartCellScale, mResultDesc->getFont()->getHeight() * 8); - + mResultDesc->setSize(mDescContainer->getSize().x(), 0); // make desc text wrap at edge of container mGrid.onSizeChanged(); @@ -299,7 +299,7 @@ void ScraperSearchComponent::updateInfoPane() { i = 0; } - + if(i != -1 && (int)mScraperResults.size() > i) { ScraperSearchResult& res = mScraperResults.at(i); @@ -401,7 +401,7 @@ void ScraperSearchComponent::update(int deltaTime) auto results = mSearchHandle->getResults(); auto statusString = mSearchHandle->getStatusString(); - // we reset here because onSearchDone in auto mode can call mSkipCallback() which can call + // we reset here because onSearchDone in auto mode can call mSkipCallback() which can call // another search() which will set our mSearchHandle to something important mSearchHandle.reset(); @@ -455,9 +455,9 @@ void ScraperSearchComponent::openInputScreen(ScraperSearchParams& params) }; stop(); - mWindow->pushGui(new GuiTextEditPopup(mWindow, "SEARCH FOR", + mWindow->pushGui(new GuiTextEditPopup(mWindow, "SEARCH FOR", // initial value is last search if there was one, otherwise the clean path name - params.nameOverride.empty() ? params.game->getCleanName() : params.nameOverride, + params.nameOverride.empty() ? params.game->getCleanName() : params.nameOverride, searchForFunc, false, "SEARCH")); } @@ -466,7 +466,7 @@ std::vector ScraperSearchComponent::getHelpPrompts() std::vector prompts = mGrid.getHelpPrompts(); if(getSelectedIndex() != -1) prompts.push_back(HelpPrompt("a", "accept result")); - + return prompts; } diff --git a/es-app/src/components/ScraperSearchComponent.h b/es-app/src/components/ScraperSearchComponent.h index b2924a7a15..6af36e7952 100644 --- a/es-app/src/components/ScraperSearchComponent.h +++ b/es-app/src/components/ScraperSearchComponent.h @@ -40,7 +40,7 @@ class ScraperSearchComponent : public GuiComponent void update(int deltaTime) override; void render(const Transform4x4f& parentTrans) override; std::vector getHelpPrompts() override; - void onSizeChanged() override; + void onSizeChanged() override; void onFocusGained() override; void onFocusLost() override; @@ -84,7 +84,7 @@ class ScraperSearchComponent : public GuiComponent MetaDataPair(const std::shared_ptr& f, const std::shared_ptr& s, bool r = true) : first(f), second(s), resize(r) {}; }; - + std::vector mMD_Pairs; SearchType mSearchType; diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index c90329883b..5e4c26b8e0 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -37,14 +37,14 @@ class TextListComponent : public IList using IList::stopScrolling; TextListComponent(Window* window); - + bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Transform4x4f& parentTrans) override; void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; void add(const std::string& name, const T& obj, unsigned int colorId); - + enum Alignment { ALIGN_LEFT, @@ -63,7 +63,7 @@ class TextListComponent : public IList it->data.textCache.reset(); } - inline void setUppercase(bool /*uppercase*/) + inline void setUppercase(bool /*uppercase*/) { mUppercase = true; for(auto it = mEntries.begin(); it != mEntries.end(); it++) @@ -106,7 +106,7 @@ class TextListComponent : public IList }; template -TextListComponent::TextListComponent(Window* window) : +TextListComponent::TextListComponent(Window* window) : IList(window), mSelectorImage(window) { mMarqueeOffset = 0; @@ -131,7 +131,7 @@ template void TextListComponent::render(const Transform4x4f& parentTrans) { Transform4x4f trans = parentTrans * getTransform(); - + std::shared_ptr& font = mFont; if(size() == 0) @@ -143,7 +143,7 @@ void TextListComponent::render(const Transform4x4f& parentTrans) //number of entries that can fit on the screen simultaniously int screenCount = (int)(mSize.y() / entrySize + 0.5f); - + if(size() >= screenCount) { startEntry = mCursor - screenCount/2; @@ -174,7 +174,7 @@ void TextListComponent::render(const Transform4x4f& parentTrans) // clip to inside margins Vector3f dim(mSize.x(), mSize.y(), 0); dim = trans * dim - trans.translation(); - Renderer::pushClipRect(Vector2i((int)(trans.translation().x() + mHorizontalMargin), (int)trans.translation().y()), + Renderer::pushClipRect(Vector2i((int)(trans.translation().x() + mHorizontalMargin), (int)trans.translation().y()), Vector2i((int)(dim.x() - mHorizontalMargin*2), (int)dim.y())); for(int i = startEntry; i < listCutoff; i++) @@ -274,7 +274,7 @@ bool TextListComponent::input(InputConfig* config, Input input) return true; } }else{ - if(config->isMappedLike("down", input) || config->isMappedLike("up", input) || + if(config->isMappedLike("down", input) || config->isMappedLike("up", input) || config->isMappedTo("pagedown", input) || config->isMappedTo("pageup", input)) { stopScrolling(); diff --git a/es-app/src/guis/GuiFastSelect.cpp b/es-app/src/guis/GuiFastSelect.cpp index 3bf0af8cdb..b6d16d456e 100644 --- a/es-app/src/guis/GuiFastSelect.cpp +++ b/es-app/src/guis/GuiFastSelect.cpp @@ -6,7 +6,7 @@ static const std::string LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -GuiFastSelect::GuiFastSelect(Window* window, IGameListView* gamelist) : GuiComponent(window), +GuiFastSelect::GuiFastSelect(Window* window, IGameListView* gamelist) : GuiComponent(window), mBackground(window), mSortText(window), mLetterText(window), mGameList(gamelist) { setPosition(Renderer::getScreenWidth() * 0.2f, Renderer::getScreenHeight() * 0.2f); diff --git a/es-app/src/guis/GuiGamelistFilter.cpp b/es-app/src/guis/GuiGamelistFilter.cpp index 8a3625a1e3..f7a68b67ca 100644 --- a/es-app/src/guis/GuiGamelistFilter.cpp +++ b/es-app/src/guis/GuiGamelistFilter.cpp @@ -50,7 +50,7 @@ GuiGamelistFilter::~GuiGamelistFilter() void GuiGamelistFilter::addFiltersToMenu() { std::vector decls = mFilterIndex->getFilterDataDecls(); - + int skip = 0; if (!UIModeController::getInstance()->isUIModeFull()) skip = 1; diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 7510f0c5c5..764ef0b3fe 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -83,7 +83,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui row.addElement(std::make_shared(mWindow, "FILTER GAMELIST", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); row.addElement(makeArrow(mWindow), false); row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openGamelistFilter, this)); - mMenu.addRow(row); + mMenu.addRow(row); } std::map customCollections = CollectionSystemManager::get()->getCustomCollectionSystems(); diff --git a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp index 30688c566c..69817db9ac 100644 --- a/es-app/src/guis/GuiGeneralScreensaverOptions.cpp +++ b/es-app/src/guis/GuiGeneralScreensaverOptions.cpp @@ -18,12 +18,12 @@ GuiGeneralScreensaverOptions::GuiGeneralScreensaverOptions(Window* window, const Settings::getInstance()->setInt("ScreenSaverTime", (int)Math::round(screensaver_time->getValue()) * (1000 * 60)); PowerSaver::updateTimeouts(); }); - + // Allow ScreenSaver Controls - ScreenSaverControls auto ss_controls = std::make_shared(mWindow); ss_controls->setState(Settings::getInstance()->getBool("ScreenSaverControls")); addWithLabel("SCREENSAVER CONTROLS", ss_controls); - addSaveFunc([ss_controls] { Settings::getInstance()->setBool("ScreenSaverControls", ss_controls->getState()); }); + addSaveFunc([ss_controls] { Settings::getInstance()->setBool("ScreenSaverControls", ss_controls->getState()); }); // screensaver behavior auto screensaver_behavior = std::make_shared< OptionListComponent >(mWindow, "SCREENSAVER BEHAVIOR", false); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 8d46080e2d..8e588989fb 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -222,7 +222,7 @@ void GuiMenu::openUISettings() msg += "To unlock and return to the full UI, enter this code: \n"; msg += "\"" + UIModeController::getInstance()->getFormattedPassKeyStr() + "\"\n\n"; msg += "Do you want to proceed?"; - window->pushGui(new GuiMsgBox(window, msg, + window->pushGui(new GuiMsgBox(window, msg, "YES", [selectedMode] { LOG(LogDebug) << "Setting UI mode to " << selectedMode; Settings::getInstance()->setString("UIMode", selectedMode); @@ -360,9 +360,9 @@ void GuiMenu::openUISettings() auto enable_filter = std::make_shared(mWindow); enable_filter->setState(!Settings::getInstance()->getBool("ForceDisableFilters")); s->addWithLabel("ENABLE FILTERS", enable_filter); - s->addSaveFunc([enable_filter] { + s->addSaveFunc([enable_filter] { bool filter_is_enabled = !Settings::getInstance()->getBool("ForceDisableFilters"); - Settings::getInstance()->setBool("ForceDisableFilters", !enable_filter->getState()); + Settings::getInstance()->setBool("ForceDisableFilters", !enable_filter->getState()); if (enable_filter->getState() != filter_is_enabled) ViewController::get()->ReloadAndGoToStart(); }); diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index f07a5061e6..fe7d29a968 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -155,7 +155,7 @@ GuiMetaDataEd::GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector mButtons = makeButtonGrid(mWindow, buttons); mGrid.setEntry(mButtons, Vector2i(0, 2), true, false); - // resize + center + // resize + center float width = (float)Math::min(Renderer::getScreenHeight(), (int)(Renderer::getScreenWidth() * 0.90f)); setSize(width, Renderer::getScreenHeight() * 0.82f); setPosition((Renderer::getScreenWidth() - mSize.x()) / 2, (Renderer::getScreenHeight() - mSize.y()) / 2); diff --git a/es-app/src/guis/GuiMetaDataEd.h b/es-app/src/guis/GuiMetaDataEd.h index ee192f982b..b7b7665be7 100644 --- a/es-app/src/guis/GuiMetaDataEd.h +++ b/es-app/src/guis/GuiMetaDataEd.h @@ -14,9 +14,9 @@ class TextComponent; class GuiMetaDataEd : public GuiComponent { public: - GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams params, + GuiMetaDataEd(Window* window, MetaDataList* md, const std::vector& mdd, ScraperSearchParams params, const std::string& header, std::function savedCallback, std::function deleteFunc); - + bool input(InputConfig* config, Input input) override; void onSizeChanged() override; virtual std::vector getHelpPrompts() override; @@ -29,7 +29,7 @@ class GuiMetaDataEd : public GuiComponent NinePatchComponent mBackground; ComponentGrid mGrid; - + std::shared_ptr mTitle; std::shared_ptr mSubtitle; std::shared_ptr mHeaderGrid; diff --git a/es-app/src/guis/GuiScraperMulti.h b/es-app/src/guis/GuiScraperMulti.h index 39d4d52134..6622f0b8ca 100644 --- a/es-app/src/guis/GuiScraperMulti.h +++ b/es-app/src/guis/GuiScraperMulti.h @@ -23,7 +23,7 @@ class GuiScraperMulti : public GuiComponent void acceptResult(const ScraperSearchResult& result); void skip(); void doNextSearch(); - + void finish(); unsigned int mTotalGames; diff --git a/es-app/src/guis/GuiScraperStart.cpp b/es-app/src/guis/GuiScraperStart.cpp index 10c2a9b867..2242046901 100644 --- a/es-app/src/guis/GuiScraperStart.cpp +++ b/es-app/src/guis/GuiScraperStart.cpp @@ -15,9 +15,9 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window), // add filters (with first one selected) mFilters = std::make_shared< OptionListComponent >(mWindow, "SCRAPE THESE GAMES", false); - mFilters->add("All Games", + mFilters->add("All Games", [](SystemData*, FileData*) -> bool { return true; }, false); - mFilters->add("Only missing image", + mFilters->add("Only missing image", [](SystemData*, FileData* g) -> bool { return g->metadata.get("image").empty(); }, true); mMenu.addWithLabel("Filter", mFilters); @@ -47,9 +47,9 @@ void GuiScraperStart::pressedStart() { if((*it)->getPlatformIds().empty()) { - mWindow->pushGui(new GuiMsgBox(mWindow, - Utils::String::toUpper("Warning: some of your selected systems do not have a platform set. Results may be even more inaccurate than usual!\nContinue anyway?"), - "YES", std::bind(&GuiScraperStart::start, this), + mWindow->pushGui(new GuiMsgBox(mWindow, + Utils::String::toUpper("Warning: some of your selected systems do not have a platform set. Results may be even more inaccurate than usual!\nContinue anyway?"), + "YES", std::bind(&GuiScraperStart::start, this), "NO", nullptr)); return; } @@ -86,7 +86,7 @@ std::queue GuiScraperStart::getSearches(std::vectorisMappedTo("b", input)) { delete this; diff --git a/es-app/src/guis/GuiSettings.cpp b/es-app/src/guis/GuiSettings.cpp index 53f96c439e..98e4c0fd58 100644 --- a/es-app/src/guis/GuiSettings.cpp +++ b/es-app/src/guis/GuiSettings.cpp @@ -47,7 +47,7 @@ bool GuiSettings::input(InputConfig* config, Input input) delete window->peekGui(); return true; } - + return GuiComponent::input(config, input); } diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 47323fee00..dd6538b8fa 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -36,19 +36,19 @@ bool parseArgs(int argc, char* argv[]) // We need to process --home before any call to Settings::getInstance(), because settings are loaded from homepath for(int i = 1; i < argc; i++) { - if (strcmp(argv[i], "--home") == 0) + if(strcmp(argv[i], "--home") == 0) { - if (i >= argc - 1) + if(i >= argc - 1) { std::cerr << "Invalid home path supplied."; return false; } - + Utils::FileSystem::setHomePath(argv[i + 1]); break; } } - + for(int i = 1; i < argc; i++) { if(strcmp(argv[i], "--resolution") == 0) diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index 76d3fc9634..bc3e6b00dd 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -105,7 +105,7 @@ ScraperRequest::ScraperRequest(std::vector& resultsWrite) : // ScraperHttpRequest -ScraperHttpRequest::ScraperHttpRequest(std::vector& resultsWrite, const std::string& url) +ScraperHttpRequest::ScraperHttpRequest(std::vector& resultsWrite, const std::string& url) : ScraperRequest(resultsWrite) { setStatus(ASYNC_IN_PROGRESS); @@ -148,7 +148,7 @@ MDResolveHandle::MDResolveHandle(const ScraperSearchResult& result, const Scrape // If we have a file extension returned by the scraper, then use it. // Otherwise, try to guess it by the name of the URL, which point to an image. - if (!result.imageType.empty()) + if (!result.imageType.empty()) { ext = result.imageType; }else{ @@ -158,7 +158,7 @@ MDResolveHandle::MDResolveHandle(const ScraperSearchResult& result, const Scrape ext = result.imageUrl.substr(dot, std::string::npos); } - std::string imgPath = getSaveAsPath(search, "image", ext); + std::string imgPath = getSaveAsPath(search, "image", ext); mFuncs.push_back(ResolvePair(downloadImageAsync(result.imageUrl, imgPath), [this, imgPath] { @@ -172,7 +172,7 @@ void MDResolveHandle::update() { if(mStatus == ASYNC_DONE || mStatus == ASYNC_ERROR) return; - + auto it = mFuncs.cbegin(); while(it != mFuncs.cend()) { @@ -195,11 +195,11 @@ void MDResolveHandle::update() std::unique_ptr downloadImageAsync(const std::string& url, const std::string& saveAs) { - return std::unique_ptr(new ImageDownloadHandle(url, saveAs, + return std::unique_ptr(new ImageDownloadHandle(url, saveAs, Settings::getInstance()->getInt("ScraperResizeWidth"), Settings::getInstance()->getInt("ScraperResizeHeight"))); } -ImageDownloadHandle::ImageDownloadHandle(const std::string& url, const std::string& path, int maxWidth, int maxHeight) : +ImageDownloadHandle::ImageDownloadHandle(const std::string& url, const std::string& path, int maxWidth, int maxHeight) : mSavePath(path), mMaxWidth(maxWidth), mMaxHeight(maxHeight), mReq(new HttpReq(url)) { } @@ -253,7 +253,7 @@ bool resizeImage(const std::string& path, int maxWidth, int maxHeight) FREE_IMAGE_FORMAT format = FIF_UNKNOWN; FIBITMAP* image = NULL; - + //detect the filetype format = FreeImage_GetFileType(path.c_str(), 0); if(format == FIF_UNKNOWN) diff --git a/es-app/src/scrapers/Scraper.h b/es-app/src/scrapers/Scraper.h index c6dd6a2613..b86fc90803 100644 --- a/es-app/src/scrapers/Scraper.h +++ b/es-app/src/scrapers/Scraper.h @@ -53,8 +53,8 @@ struct ScraperSearchResult // We could do this if we used threads. Right now ES doesn't because I'm pretty sure I'll fuck it up, // and I'm not sure of the performance of threads on the Pi (single-core ARM). -// We could also do this if we used coroutines. -// I can't find a really good cross-platform coroutine library (x86/64/ARM Linux + Windows), +// We could also do this if we used coroutines. +// I can't find a really good cross-platform coroutine library (x86/64/ARM Linux + Windows), // and I don't want to spend more time chasing libraries than just writing it the long way once. // So, I did it the "long" way. @@ -71,7 +71,7 @@ class ScraperRequest : public AsyncHandle // returns "true" once we're done virtual void update() = 0; - + protected: std::vector& mResults; }; diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index 75dc4eea14..7be4ebbe47 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -195,7 +195,7 @@ void ScreenScraperRequest::processGame(const pugi::xml_document& xmldoc, std::ve std::string region = Utils::String::toLower(ssConfig.region).c_str(); std::string language = Utils::String::toLower(ssConfig.language).c_str(); - // Name fallback: US, WOR(LD). ( Xpath: Data/jeu[0]/noms/nom[*] ). + // Name fallback: US, WOR(LD). ( Xpath: Data/jeu[0]/noms/nom[*] ). result.mdl.set("name", find_child_by_attribute_list(game.child("noms"), "nom", "region", { region, "wor", "us" , "ss", "eu", "jp" }).text().get()); // Description fallback language: EN, WOR(LD) @@ -256,7 +256,7 @@ void ScreenScraperRequest::processGame(const pugi::xml_document& xmldoc, std::ve // Do an XPath query for media[type='$media_type'], then filter by region // We need to do this because any child of 'medias' has the form - // + // // and we need to find the right media for the region. pugi::xpath_node_set results = media_list.select_nodes((static_cast("media[@type='") + ssConfig.media_name + "']").c_str()); @@ -281,7 +281,7 @@ void ScreenScraperRequest::processGame(const pugi::xml_document& xmldoc, std::ve if (art) { - // Sending a 'softname' containing space will make the image URLs returned by the API also contain the space. + // Sending a 'softname' containing space will make the image URLs returned by the API also contain the space. // Escape any spaces in the URL here result.imageUrl = Utils::String::replace(art.text().get(), " ", "%20"); diff --git a/es-app/src/scrapers/ScreenScraper.h b/es-app/src/scrapers/ScreenScraper.h index 4c749008f1..2999a4649e 100644 --- a/es-app/src/scrapers/ScreenScraper.h +++ b/es-app/src/scrapers/ScreenScraper.h @@ -46,7 +46,7 @@ class ScreenScraperRequest : public ScraperHttpRequest std::string media_name = "box-2D"; // Which Region to use when selecting the artwork - // Applies to: artwork, name of the game, date of release + // Applies to: artwork, name of the game, date of release std::string region = "US"; // Which Language to use when selecting the textual information diff --git a/es-app/src/views/UIModeController.h b/es-app/src/views/UIModeController.h index 9746a1d79e..04913a190d 100644 --- a/es-app/src/views/UIModeController.h +++ b/es-app/src/views/UIModeController.h @@ -17,7 +17,7 @@ class UIModeController { // Monitor input for UI mode change, returns true (consumes input) when UI mode change is triggered. bool listen(InputConfig* config, Input input); - + // Get the current Passphrase as a (unicode) formatted, comma-separated, string. std::string getFormattedPassKeyStr(); @@ -33,13 +33,13 @@ class UIModeController { bool inputIsMatch(InputConfig * config, Input input); bool isValidInput(InputConfig * config, Input input); void logInput(InputConfig * config, Input input); - + // Return UI mode to 'FULL' - void unlockUIMode(); + void unlockUIMode(); static UIModeController * sInstance; const std::vector mUIModes = { "Full", "Kiosk", "Kid" }; - + // default passkeyseq = "uuddlrlrba", as defined in the setting 'UIMode_passkey'. std::string mPassKeySequence; int mPassKeyCounter; diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index d1735edf1f..c5a4d3acaf 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -91,11 +91,11 @@ class ViewController : public GuiComponent void playViewTransition(); int getSystemId(SystemData* system); - + std::shared_ptr mCurrentView; std::map< SystemData*, std::shared_ptr > mGameListViews; std::shared_ptr mSystemListView; - + Transform4x4f mCamera; float mFadeOpacity; bool mLockInput; diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 87d2893f56..bf332e54c6 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -3,15 +3,15 @@ #include "animations/LambdaAnimation.h" #include "views/ViewController.h" -DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : - BasicGameListView(window, root), - mDescContainer(window), mDescription(window), +DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : + BasicGameListView(window, root), + mDescContainer(window), mDescription(window), mImage(window), - mLblRating(window), mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), + mLblRating(window), mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), mLblGenre(window), mLblPlayers(window), mLblLastPlayed(window), mLblPlayCount(window), - mRating(window), mReleaseDate(window), mDeveloper(window), mPublisher(window), + mRating(window), mReleaseDate(window), mDeveloper(window), mPublisher(window), mGenre(window), mPlayers(window), mLastPlayed(window), mPlayCount(window), mName(window) { @@ -93,7 +93,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them std::vector labels = getMDLabels(); assert(labels.size() == 8); const char* lblElements[8] = { - "md_lbl_rating", "md_lbl_releasedate", "md_lbl_developer", "md_lbl_publisher", + "md_lbl_rating", "md_lbl_releasedate", "md_lbl_developer", "md_lbl_publisher", "md_lbl_genre", "md_lbl_players", "md_lbl_lastplayed", "md_lbl_playcount" }; @@ -107,7 +107,7 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them std::vector values = getMDValues(); assert(values.size() == 8); const char* valElements[8] = { - "md_rating", "md_releasedate", "md_developer", "md_publisher", + "md_rating", "md_releasedate", "md_developer", "md_publisher", "md_genre", "md_players", "md_lastplayed", "md_playcount" }; @@ -131,7 +131,7 @@ void DetailedGameListView::initMDLabels() const unsigned int rowCount = (int)(components.size() / 2); Vector3f start(mSize.x() * 0.01f, mSize.y() * 0.625f, 0.0f); - + const float colSize = (mSize.x() * 0.48f) / colCount; const float rowPadding = 0.01f * mSize.y(); @@ -216,7 +216,7 @@ void DetailedGameListView::updateInfoPanel() mLastPlayed.setValue(file->metadata.get("lastplayed")); mPlayCount.setValue(file->metadata.get("playcount")); } - + fadingOut = false; } @@ -234,7 +234,7 @@ void DetailedGameListView::updateInfoPanel() // then animate if reverse != fadingOut // an animation is not playing // then animate if opacity != our target opacity - if((comp->isAnimationPlaying(0) && comp->isAnimationReversed(0) != fadingOut) || + if((comp->isAnimationPlaying(0) && comp->isAnimationReversed(0) != fadingOut) || (!comp->isAnimationPlaying(0) && comp->getOpacity() != (fadingOut ? 0 : 255))) { auto func = [comp](float t) diff --git a/es-app/src/views/gamelist/IGameListView.cpp b/es-app/src/views/gamelist/IGameListView.cpp index 5fd5dbf076..4b48bdd372 100644 --- a/es-app/src/views/gamelist/IGameListView.cpp +++ b/es-app/src/views/gamelist/IGameListView.cpp @@ -16,7 +16,7 @@ bool IGameListView::input(InputConfig* config, Input input) return true; // Ctrl-R to reload a view when debugging - }else if(Settings::getInstance()->getBool("Debug") && config->getDeviceId() == DEVICE_KEYBOARD && + }else if(Settings::getInstance()->getBool("Debug") && config->getDeviceId() == DEVICE_KEYBOARD && (SDL_GetModState() & (KMOD_LCTRL | KMOD_RCTRL)) && input.id == SDLK_r && input.value != 0) { LOG(LogDebug) << "reloading view"; diff --git a/es-app/src/views/gamelist/IGameListView.h b/es-app/src/views/gamelist/IGameListView.h index 0c65897bb6..da6299d274 100644 --- a/es-app/src/views/gamelist/IGameListView.h +++ b/es-app/src/views/gamelist/IGameListView.h @@ -22,7 +22,7 @@ class IGameListView : public GuiComponent // NOTE: FILE_SORTED is only reported for the topmost FileData, where the sort started. // Since sorts are recursive, that FileData's children probably changed too. virtual void onFileChanged(FileData* file, FileChangeType change) = 0; - + // Called whenever the theme changes. virtual void onThemeChanged(const std::shared_ptr& theme) = 0; diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 64f482e308..7d361fc940 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -15,7 +15,7 @@ ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGame mHeaderText.setPosition(0, 0); mHeaderText.setHorizontalAlignment(ALIGN_CENTER); mHeaderText.setDefaultZIndex(50); - + mHeaderImage.setResize(0, mSize.y() * 0.185f); mHeaderImage.setOrigin(0.5f, 0.0f); mHeaderImage.setPosition(mSize.x() / 2, 0); diff --git a/es-app/src/views/gamelist/ISimpleGameListView.h b/es-app/src/views/gamelist/ISimpleGameListView.h index f161eadd06..785f3992ca 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.h +++ b/es-app/src/views/gamelist/ISimpleGameListView.h @@ -17,7 +17,7 @@ class ISimpleGameListView : public IGameListView // NOTE: FILE_SORTED is only reported for the topmost FileData, where the sort started. // Since sorts are recursive, that FileData's children probably changed too. virtual void onFileChanged(FileData* file, FileChangeType change); - + // Called whenever the theme changes. virtual void onThemeChanged(const std::shared_ptr& theme); diff --git a/es-core/src/HttpReq.cpp b/es-core/src/HttpReq.cpp index 9bdeedf797..feaea8a3cb 100644 --- a/es-core/src/HttpReq.cpp +++ b/es-core/src/HttpReq.cpp @@ -33,7 +33,7 @@ std::string HttpReq::urlEncode(const std::string &s) bool HttpReq::isUrl(const std::string& str) { //the worst guess - return (!str.empty() && !Utils::FileSystem::exists(str) && + return (!str.empty() && !Utils::FileSystem::exists(str) && (str.find("http://") != std::string::npos || str.find("https://") != std::string::npos || str.find("www.") != std::string::npos)); } @@ -77,7 +77,7 @@ HttpReq::HttpReq(const std::string& url) } //set curl restrict redirect protocols - err = curl_easy_setopt(mHandle, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); + err = curl_easy_setopt(mHandle, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); if(err != CURLE_OK) { mStatus = REQ_IO_ERROR; @@ -150,7 +150,7 @@ HttpReq::Status HttpReq::status() if(msg->msg == CURLMSG_DONE) { HttpReq* req = s_requests[msg->easy_handle]; - + if(req == NULL) { LOG(LogError) << "Cannot find easy handle!"; @@ -201,5 +201,5 @@ size_t HttpReq::write_content(void* buff, size_t size, size_t nmemb, void* req_p //used as a curl callback /*int HttpReq::update_progress(void* req_ptr, double dlTotal, double dlNow, double ulTotal, double ulNow) { - + }*/ diff --git a/es-core/src/HttpReq.h b/es-core/src/HttpReq.h index 238efc5442..f6032a3c76 100644 --- a/es-core/src/HttpReq.h +++ b/es-core/src/HttpReq.h @@ -10,7 +10,7 @@ * HttpReq myRequest("www.google.com", "/index.html"); * //for blocking behavior: while(myRequest.status() == HttpReq::REQ_IN_PROGRESS); * //for non-blocking behavior: check if(myRequest.status() != HttpReq::REQ_IN_PROGRESS) in some sort of update method - * + * * //once one of those completes, the request is ready * if(myRequest.status() != REQ_SUCCESS) * { diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index dd56dd30e2..7cb6697460 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -93,7 +93,7 @@ bool InputConfig::isMappedTo(const std::string& name, Input input) Input comp; if(!getInputByName(name, &comp)) return false; - + if(comp.configured && comp.type == input.type && comp.id == input.id) { if(comp.type == TYPE_HAT) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index d074367ebf..441812ca9d 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -20,7 +20,7 @@ // It can change even if the device is the same, and is only used to open joysticks (required to receive SDL events). // 2. SDL_JoystickID - this is an ID for each joystick that is supposed to remain consistent between plugging and unplugging. // ES doesn't care if it does, though. -// 3. "Device ID" - this is something I made up and is what InputConfig's getDeviceID() returns. +// 3. "Device ID" - this is something I made up and is what InputConfig's getDeviceID() returns. // This is actually just an SDL_JoystickID (also called instance ID), but -1 means "keyboard" instead of "error." // 4. Joystick GUID - this is some squashed version of joystick vendor, version, and a bunch of other device-specific things. // It should remain the same across runs of the program/system restarts/device reordering and is what I use to identify which joystick to load. @@ -53,7 +53,7 @@ void InputManager::init() if(initialized()) deinit(); - SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, + SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, Settings::getInstance()->getBool("BackgroundJoystickInput") ? "1" : "0"); SDL_InitSubSystem(SDL_INIT_JOYSTICK); SDL_JoystickEventState(SDL_ENABLE); @@ -78,7 +78,7 @@ void InputManager::init() void InputManager::addJoystickByDeviceIndex(int id) { assert(id >= 0 && id < SDL_NumJoysticks()); - + // open joystick & add to our list SDL_Joystick* joy = SDL_JoystickOpen(id); assert(joy); @@ -287,7 +287,7 @@ bool InputManager::loadInputConfig(InputConfig* config) std::string path = getConfigPath(); if(!Utils::FileSystem::exists(path)) return false; - + pugi::xml_document doc; pugi::xml_parse_result res = doc.load_file(path.c_str()); @@ -392,7 +392,7 @@ void InputManager::writeDeviceConfig(InputConfig* config) Scripting::fireEvent("config-changed"); Scripting::fireEvent("controls-changed"); - + // execute any onFinish commands and re-load the config for changes doOnFinish(); loadInputConfig(config); diff --git a/es-core/src/MameNames.cpp b/es-core/src/MameNames.cpp index 7821af3667..e0dee5c4b6 100644 --- a/es-core/src/MameNames.cpp +++ b/es-core/src/MameNames.cpp @@ -57,45 +57,45 @@ MameNames::MameNames() NamePair namePair = { gameNode.child("mamename").text().get(), gameNode.child("realname").text().get() }; mNamePairs.push_back(namePair); } - + // Read bios xmlpath = ResourceManager::getInstance()->getResourcePath(":/mamebioses.xml"); - + if(!Utils::FileSystem::exists(xmlpath)) return; - + LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\"..."; - + result = doc.load_file(xmlpath.c_str()); - + if(!result) { LOG(LogError) << "Error parsing XML file \"" << xmlpath << "\"!\n " << result.description(); return; } - + for(pugi::xml_node biosNode = doc.child("bios"); biosNode; biosNode = biosNode.next_sibling("bios")) { std::string bios = biosNode.text().get(); mMameBioses.push_back(bios); } - + // Read devices xmlpath = ResourceManager::getInstance()->getResourcePath(":/mamedevices.xml"); - + if(!Utils::FileSystem::exists(xmlpath)) return; - + LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\"..."; - + result = doc.load_file(xmlpath.c_str()); - + if(!result) { LOG(LogError) << "Error parsing XML file \"" << xmlpath << "\"!\n " << result.description(); return; } - + for(pugi::xml_node deviceNode = doc.child("device"); deviceNode; deviceNode = deviceNode.next_sibling("device")) { std::string device = deviceNode.text().get(); @@ -137,7 +137,7 @@ const bool MameNames::isBios(const std::string& _biosName) const bool MameNames::isDevice(const std::string& _deviceName) { return MameNames::find(mMameDevices, _deviceName); - + } // isDevice const bool MameNames::find(std::vector devices, const std::string& name) @@ -156,5 +156,5 @@ const bool MameNames::find(std::vector devices, const std::string& } return false; - + } diff --git a/es-core/src/MameNames.h b/es-core/src/MameNames.h index 6f0ae21814..02036d65d4 100644 --- a/es-core/src/MameNames.h +++ b/es-core/src/MameNames.h @@ -34,7 +34,7 @@ class MameNames namePairVector mNamePairs; std::vector mMameBioses; std::vector mMameDevices; - + const bool find(const std::vector devices, const std::string& name); }; // MameNames diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index e2c1286451..3ad7f65865 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -33,7 +33,7 @@ std::vector settings_dont_save { { "ScreenHeight" }, { "ScreenOffsetX" }, { "ScreenOffsetY" }, - { "ScreenRotate" } + { "ScreenRotate" } }; Settings::Settings() diff --git a/es-core/src/Sound.cpp b/es-core/src/Sound.cpp index af0b63f903..e3f46e279b 100644 --- a/es-core/src/Sound.cpp +++ b/es-core/src/Sound.cpp @@ -122,7 +122,7 @@ void Sound::play() { //replay from start. rewind the sample to the beginning mSamplePos = 0; - + } else { diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index cf2548089f..ce55194b33 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -298,12 +298,12 @@ void ThemeData::parseVariables(const pugi::xml_node& root) { ThemeException error; error.setFiles(mPaths); - + pugi::xml_node variables = root.child("variables"); if(!variables) return; - + for(pugi::xml_node_iterator it = variables.begin(); it != variables.end(); ++it) { std::string key = it->name(); @@ -335,7 +335,7 @@ void ThemeData::parseViews(const pugi::xml_node& root) viewKey = nameAttr.substr(prevOff, off - prevOff); prevOff = nameAttr.find_first_not_of(delim, off); off = nameAttr.find_first_of(delim, prevOff); - + if (std::find(sSupportedViews.cbegin(), sSupportedViews.cend(), viewKey) != sSupportedViews.cend()) { ThemeView& view = mViews.insert(std::pair(viewKey, ThemeView())).first->second; @@ -368,8 +368,8 @@ void ThemeData::parseView(const pugi::xml_node& root, ThemeView& view) std::string elemKey = nameAttr.substr(prevOff, off - prevOff); prevOff = nameAttr.find_first_not_of(delim, off); off = nameAttr.find_first_of(delim, prevOff); - - parseElement(node, elemTypeIt->second, + + parseElement(node, elemTypeIt->second, view.elements.insert(std::pair(elemKey, ThemeElement())).first->second); if(std::find(view.orderedKeys.cbegin(), view.orderedKeys.cend(), elemKey) == view.orderedKeys.cend()) @@ -386,7 +386,7 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::mapsecond.type != expectedType && !expectedType.empty()) { - LOG(LogWarning) << " requested mismatched theme type for [" << view << "." << element << "] - expected \"" + LOG(LogWarning) << " requested mismatched theme type for [" << view << "." << element << "] - expected \"" << expectedType << "\", got \"" << elemIt->second.type << "\""; return NULL; } @@ -512,7 +512,7 @@ std::vector ThemeData::makeExtras(const std::shared_ptrmViews.find(view); if(viewIt == theme->mViews.cend()) return comps; - + for(auto it = viewIt->second.orderedKeys.cbegin(); it != viewIt->second.orderedKeys.cend(); it++) { ThemeElement& elem = viewIt->second.elements.at(*it); @@ -540,9 +540,9 @@ std::map ThemeData::getThemeSets() static const size_t pathCount = 2; std::string paths[pathCount] = - { - "/etc/emulationstation/themes", - Utils::FileSystem::getHomePath() + "/.emulationstation/themes" + { + "/etc/emulationstation/themes", + Utils::FileSystem::getHomePath() + "/.emulationstation/themes" }; for(size_t i = 0; i < pathCount; i++) diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 4fc9faa747..b6cc6fb902 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -54,7 +54,7 @@ class ThemeException : public std::exception template friend ThemeException& operator<<(ThemeException& e, T msg); - + inline void setFiles(const std::deque& deque) { *this << "from theme \"" << deque.front() << "\"\n"; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index d3873a2154..0a510a5c1a 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -221,7 +221,7 @@ void Window::update(int deltaTime) if(peekGui()) peekGui()->update(deltaTime); - + // Update the screensaver if (mScreenSaver) mScreenSaver->update(deltaTime); @@ -259,7 +259,7 @@ void Window::render() unsigned int screensaverTime = (unsigned int)Settings::getInstance()->getInt("ScreenSaverTime"); if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0) startScreenSaver(); - + // Always call the screensaver render function regardless of whether the screensaver is active // or not because it may perform a fade on transition renderScreenSaver(); @@ -268,7 +268,7 @@ void Window::render() { mInfoPopup->render(transform); } - + if(mTimeSinceLastInput >= screensaverTime && screensaverTime != 0) { if (!isProcessing() && mAllowSleep && (!mScreenSaver || mScreenSaver->allowSleep())) diff --git a/es-core/src/components/AnimatedImageComponent.cpp b/es-core/src/components/AnimatedImageComponent.cpp index 347fc3c7a2..b0332fe65b 100644 --- a/es-core/src/components/AnimatedImageComponent.cpp +++ b/es-core/src/components/AnimatedImageComponent.cpp @@ -25,7 +25,7 @@ void AnimatedImageComponent::load(const AnimationDef* def) auto img = std::unique_ptr(new ImageComponent(mWindow)); img->setResize(mSize.x(), mSize.y()); img->setImage(std::string(def->frames[i].path), false); - + mFrames.push_back(ImageFrame(std::move(img), def->frames[i].time)); } diff --git a/es-core/src/components/AnimatedImageComponent.h b/es-core/src/components/AnimatedImageComponent.h index dce1b90790..c128ed30b5 100644 --- a/es-core/src/components/AnimatedImageComponent.h +++ b/es-core/src/components/AnimatedImageComponent.h @@ -23,7 +23,7 @@ class AnimatedImageComponent : public GuiComponent { public: AnimatedImageComponent(Window* window); - + void load(const AnimationDef* def); // no reference to def is kept after loading is complete void reset(); // set to frame 0 diff --git a/es-core/src/components/BusyComponent.cpp b/es-core/src/components/BusyComponent.cpp index a3049811f3..a37d690beb 100644 --- a/es-core/src/components/BusyComponent.cpp +++ b/es-core/src/components/BusyComponent.cpp @@ -45,7 +45,7 @@ void BusyComponent::onSizeChanged() mGrid.setColWidthPerc(3, textWidth / mSize.x()); mGrid.setRowHeightPerc(1, textHeight / mSize.y()); - + mBackground.fitTo(Vector2f(mGrid.getColWidth(1) + mGrid.getColWidth(2) + mGrid.getColWidth(3), textHeight + 2), mAnimation->getPosition(), Vector2f(0, 0)); } diff --git a/es-core/src/components/ButtonComponent.cpp b/es-core/src/components/ButtonComponent.cpp index 21e235bb4b..0ada6ece66 100644 --- a/es-core/src/components/ButtonComponent.cpp +++ b/es-core/src/components/ButtonComponent.cpp @@ -5,9 +5,9 @@ ButtonComponent::ButtonComponent(Window* window, const std::string& text, const std::string& helpText, const std::function& func) : GuiComponent(window), mBox(window, ":/button.png"), - mFont(Font::get(FONT_SIZE_MEDIUM)), - mFocused(false), - mEnabled(true), + mFont(Font::get(FONT_SIZE_MEDIUM)), + mFocused(false), + mEnabled(true), mTextColorFocused(0xFFFFFFFF), mTextColorUnfocused(0x777777FF) { setPressedFunc(func); @@ -41,7 +41,7 @@ void ButtonComponent::setText(const std::string& text, const std::string& helpTe { mText = Utils::String::toUpper(text); mHelpText = helpText; - + mTextCache = std::unique_ptr(mFont->buildTextCache(mText, 0, 0, getCurTextColor())); float minWidth = mFont->sizeText("DELETE").x() + 12; @@ -87,7 +87,7 @@ void ButtonComponent::render(const Transform4x4f& parentTrans) { Transform4x4f trans = parentTrans * getTransform(); trans.round(); - + mBox.render(trans); if(mTextCache) diff --git a/es-core/src/components/ButtonComponent.h b/es-core/src/components/ButtonComponent.h index 65288209cd..2c25881f04 100644 --- a/es-core/src/components/ButtonComponent.h +++ b/es-core/src/components/ButtonComponent.h @@ -38,7 +38,7 @@ class ButtonComponent : public GuiComponent bool mEnabled; unsigned int mTextColorFocused; unsigned int mTextColorUnfocused; - + unsigned int getCurTextColor() const; void updateImage(); diff --git a/es-core/src/components/ComponentGrid.cpp b/es-core/src/components/ComponentGrid.cpp index 10d2fdd14c..90b6162d92 100644 --- a/es-core/src/components/ComponentGrid.cpp +++ b/es-core/src/components/ComponentGrid.cpp @@ -4,7 +4,7 @@ using namespace GridFlags; -ComponentGrid::ComponentGrid(Window* window, const Vector2i& gridDimensions) : GuiComponent(window), +ComponentGrid::ComponentGrid(Window* window, const Vector2i& gridDimensions) : GuiComponent(window), mGridSize(gridDimensions), mCursor(0, 0) { assert(gridDimensions.x() > 0 && gridDimensions.y() > 0); @@ -39,7 +39,7 @@ float ComponentGrid::getColWidth(int col) if(mColWidths[x] == 0) between++; } - + return (freeWidthPerc * mSize.x()) / between; } @@ -57,7 +57,7 @@ float ComponentGrid::getRowHeight(int row) if(mRowHeights[y] == 0) between++; } - + return (freeHeightPerc * mSize.y()) / between; } @@ -142,7 +142,7 @@ void ComponentGrid::updateCellComponent(const GridEntry& cell) // center component pos[0] = pos.x() + (size.x() - cell.component->getSize().x()) / 2; pos[1] = pos.y() + (size.y() - cell.component->getSize().y()) / 2; - + cell.component->setPosition(pos); } @@ -206,7 +206,7 @@ void ComponentGrid::onSizeChanged() const ComponentGrid::GridEntry* ComponentGrid::getCellAt(int x, int y) const { assert(x >= 0 && x < mGridSize.x() && y >= 0 && y < mGridSize.y()); - + for(auto it = mCells.cbegin(); it != mCells.cend(); it++) { int xmin = it->pos.x(); @@ -276,7 +276,7 @@ bool ComponentGrid::moveCursor(Vector2i dir) const GridEntry* currentCursorEntry = getCellAt(mCursor); Vector2i searchAxis(dir.x() == 0, dir.y() == 0); - + while(mCursor.x() >= 0 && mCursor.y() >= 0 && mCursor.x() < mGridSize.x() && mCursor.y() < mGridSize.y()) { mCursor = mCursor + dir; @@ -357,7 +357,7 @@ void ComponentGrid::render(const Transform4x4f& parentTrans) Transform4x4f trans = parentTrans * getTransform(); renderChildren(trans); - + // draw cell separators if(mLines.size()) { @@ -410,7 +410,7 @@ std::vector ComponentGrid::getHelpPrompts() const GridEntry* e = getCellAt(mCursor); if(e) prompts = e->component->getHelpPrompts(); - + bool canScrollVert = mGridSize.y() > 1; bool canScrollHoriz = mGridSize.x() > 1; for(auto it = prompts.cbegin(); it != prompts.cend(); it++) diff --git a/es-core/src/components/ComponentGrid.h b/es-core/src/components/ComponentGrid.h index 567f5d9196..5fad30e0e3 100644 --- a/es-core/src/components/ComponentGrid.h +++ b/es-core/src/components/ComponentGrid.h @@ -35,7 +35,7 @@ class ComponentGrid : public GuiComponent bool removeEntry(const std::shared_ptr& comp); - void setEntry(const std::shared_ptr& comp, const Vector2i& pos, bool canFocus, bool resize = true, + void setEntry(const std::shared_ptr& comp, const Vector2i& pos, bool canFocus, bool resize = true, const Vector2i& size = Vector2i(1, 1), unsigned int border = GridFlags::BORDER_NONE, GridFlags::UpdateType updateType = GridFlags::UPDATE_ALWAYS); void textInput(const char* text) override; @@ -83,8 +83,8 @@ class ComponentGrid : public GuiComponent unsigned int border; GridEntry(const Vector2i& p = Vector2i::Zero(), const Vector2i& d = Vector2i::Zero(), - const std::shared_ptr& cmp = nullptr, bool f = false, bool r = true, - GridFlags::UpdateType u = GridFlags::UPDATE_ALWAYS, unsigned int b = GridFlags::BORDER_NONE) : + const std::shared_ptr& cmp = nullptr, bool f = false, bool r = true, + GridFlags::UpdateType u = GridFlags::UPDATE_ALWAYS, unsigned int b = GridFlags::BORDER_NONE) : pos(p), dim(d), component(cmp), canFocus(f), resize(r), updateType(u), border(b) {}; @@ -96,7 +96,7 @@ class ComponentGrid : public GuiComponent float* mRowHeights; float* mColWidths; - + std::vector mLines; // Update position & size @@ -105,7 +105,7 @@ class ComponentGrid : public GuiComponent const GridEntry* getCellAt(int x, int y) const; inline const GridEntry* getCellAt(const Vector2i& pos) const { return getCellAt(pos.x(), pos.y()); } - + Vector2i mGridSize; std::vector mCells; diff --git a/es-core/src/components/ComponentList.h b/es-core/src/components/ComponentList.h index 429b5f5d65..c5c0f9c2e9 100644 --- a/es-core/src/components/ComponentList.h +++ b/es-core/src/components/ComponentList.h @@ -20,10 +20,10 @@ struct ComponentListRow // The input handler is called when the user enters any input while this row is highlighted (including up/down). // Return false to let the list try to use it or true if the input has been consumed. - // If no input handler is supplied (input_handler == nullptr), the default behavior is to forward the input to + // If no input handler is supplied (input_handler == nullptr), the default behavior is to forward the input to // the rightmost element in the currently selected row. std::function input_handler; - + inline void addElement(const std::shared_ptr& component, bool resize_width, bool invert_when_selected = true) { elements.push_back(ComponentListElement(component, resize_width, invert_when_selected)); @@ -62,7 +62,7 @@ class ComponentList : public IList bool moveCursor(int amt); inline int getCursorId() const { return mCursor; } - + float getTotalRowHeight() const; inline float getRowHeight(int row) const { return getRowHeight(mEntries.at(row).data); } @@ -78,7 +78,7 @@ class ComponentList : public IList void updateCameraOffset(); void updateElementPosition(const ComponentListRow& row); void updateElementSize(const ComponentListRow& row); - + float getRowHeight(const ComponentListRow& row) const; float mSelectorBarOffset; diff --git a/es-core/src/components/DateTimeEditComponent.cpp b/es-core/src/components/DateTimeEditComponent.cpp index efe5a94435..fef38aa478 100644 --- a/es-core/src/components/DateTimeEditComponent.cpp +++ b/es-core/src/components/DateTimeEditComponent.cpp @@ -3,8 +3,8 @@ #include "resources/Font.h" #include "utils/StringUtil.h" -DateTimeEditComponent::DateTimeEditComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), - mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), +DateTimeEditComponent::DateTimeEditComponent(Window* window, DisplayMode dispMode) : GuiComponent(window), + mEditing(false), mEditIndex(0), mDisplayMode(dispMode), mRelativeUpdateAccumulator(0), mColor(0x777777FF), mFont(Font::get(FONT_SIZE_SMALL, FONT_PATH_LIGHT)), mUppercase(false), mAutoSize(true) { updateTextCache(); @@ -70,7 +70,7 @@ bool DateTimeEditComponent::input(InputConfig* config, Input input) new_tm.tm_mon = 0; else if(new_tm.tm_mon < 0) new_tm.tm_mon = 11; - + } else if(mEditIndex == 1) { @@ -97,7 +97,7 @@ bool DateTimeEditComponent::input(InputConfig* config, Input input) new_tm.tm_mday = days_in_month; mTime = new_tm; - + updateTextCache(); return true; } @@ -109,7 +109,7 @@ bool DateTimeEditComponent::input(InputConfig* config, Input input) mEditIndex--; return true; } - + if(config->isMappedLike("left", input)) { mEditIndex--; @@ -159,7 +159,7 @@ void DateTimeEditComponent::render(const Transform4x4f& parentTrans) { if(mEditIndex >= 0 && (unsigned int)mEditIndex < mCursorBoxes.size()) { - Renderer::drawRect((int)mCursorBoxes[mEditIndex][0], (int)mCursorBoxes[mEditIndex][1], + Renderer::drawRect((int)mCursorBoxes[mEditIndex][0], (int)mCursorBoxes[mEditIndex][1], (int)mCursorBoxes[mEditIndex][2], (int)mCursorBoxes[mEditIndex][3], 0x00000022); } } @@ -221,12 +221,12 @@ std::string DateTimeEditComponent::getDisplayString(DisplayMode mode) const sprintf(buf, "%d minute%s ago", dur.getMinutes(), (dur.getMinutes() > 1) ? "s" : ""); else sprintf(buf, "%d second%s ago", dur.getSeconds(), (dur.getSeconds() > 1) ? "s" : ""); - + return std::string(buf); } break; } - + if(mTime.getTime() == 0) return "unknown"; @@ -316,7 +316,7 @@ void DateTimeEditComponent::applyTheme(const std::shared_ptr& theme, return; // We set mAutoSize BEFORE calling GuiComponent::applyTheme because it calls - // setSize(), which will call updateTextCache(), which will reset mSize if + // setSize(), which will call updateTextCache(), which will reset mSize if // mAutoSize == true, ignoring the theme's value. if(properties & ThemeFlags::SIZE) mAutoSize = !elem->has("size"); diff --git a/es-core/src/components/DateTimeEditComponent.h b/es-core/src/components/DateTimeEditComponent.h index 535ba2f86a..55a010a1bd 100644 --- a/es-core/src/components/DateTimeEditComponent.h +++ b/es-core/src/components/DateTimeEditComponent.h @@ -46,7 +46,7 @@ class DateTimeEditComponent : public GuiComponent std::string getDisplayString(DisplayMode mode) const; DisplayMode getCurrentDisplayMode() const; - + void updateTextCache(); Utils::Time::DateTime mTime; diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index a64cc17330..1d7ef55291 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -63,7 +63,7 @@ void HelpComponent::updateGrid() mGrid = std::make_shared(mWindow, Vector2i((int)mPrompts.size() * 4, 1)); // [icon] [spacer1] [text] [spacer2] - + std::vector< std::shared_ptr > icons; std::vector< std::shared_ptr > labels; @@ -105,7 +105,7 @@ std::shared_ptr HelpComponent::getIconTexture(const char* name) auto it = mIconCache.find(name); if(it != mIconCache.cend()) return it->second; - + auto pathLookup = ICON_PATH_MAP.find(name); if(pathLookup == ICON_PATH_MAP.cend()) { @@ -136,7 +136,7 @@ void HelpComponent::setOpacity(unsigned char opacity) void HelpComponent::render(const Transform4x4f& parentTrans) { Transform4x4f trans = parentTrans * getTransform(); - + if(mGrid) mGrid->render(trans); } diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index 4b75e0138f..93f61ce9a8 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -75,9 +75,9 @@ class IList : public GuiComponent const ListLoopType mLoopType; std::vector mEntries; - + public: - IList(Window* window, const ScrollTierList& tierList = LIST_SCROLL_STYLE_QUICK, const ListLoopType& loopType = LIST_PAUSE_AT_END) : GuiComponent(window), + IList(Window* window, const ScrollTierList& tierList = LIST_SCROLL_STYLE_QUICK, const ListLoopType& loopType = LIST_PAUSE_AT_END) : GuiComponent(window), mGradient(window), mTierList(tierList), mLoopType(loopType) { mCursor = 0; @@ -85,7 +85,7 @@ class IList : public GuiComponent mScrollVelocity = 0; mScrollTierAccumulator = 0; mScrollCursorAccumulator = 0; - + mTitleOverlayOpacity = 0x00; mTitleOverlayColor = 0xFFFFFF00; mGradient.setResize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); @@ -98,7 +98,7 @@ class IList : public GuiComponent return (mScrollVelocity != 0 && mScrollTier > 0); } - int getScrollingVelocity() + int getScrollingVelocity() { return mScrollVelocity; } @@ -151,7 +151,7 @@ class IList : public GuiComponent return false; } - + // entry management void add(const Entry& e) { @@ -255,7 +255,7 @@ class IList : public GuiComponent Vector2f off = mTitleOverlayFont->sizeText(text); off[0] = (Renderer::getScreenWidth() - off.x()) * 0.5f; off[1] = (Renderer::getScreenHeight() - off.y()) * 0.5f; - + Transform4x4f identTrans = Transform4x4f::Identity(); mGradient.setOpacity(mTitleOverlayOpacity); diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index df86447a9d..b42021ddb9 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -45,7 +45,7 @@ void ImageComponent::resize() }else{ // SVG rasterization is determined by height (see SVGResource.cpp), and rasterization is done in terms of pixels // if rounding is off enough in the rasterization step (for images with extreme aspect ratios), it can cause cutoff when the aspect ratio breaks - // so, we always make sure the resultant height is an integer to make sure cutoff doesn't happen, and scale width from that + // so, we always make sure the resultant height is an integer to make sure cutoff doesn't happen, and scale width from that // (you'll see this scattered throughout the function) // this is probably not the best way, so if you're familiar with this problem and have a better solution, please make a pull request! @@ -62,7 +62,7 @@ void ImageComponent::resize() mSize[1] = Math::min(Math::round(mSize[1] *= resizeScale.x()), mTargetSize.y()); }else{ mSize[1] = Math::round(mSize[1] * resizeScale.y()); // this will be mTargetSize.y(). We can't exceed it. - + // for SVG rasterization, always calculate width from rounded height (see comment above) // we need to make sure we're not creating an image larger than max size mSize[0] = Math::min((mSize[1] / textureSize.y()) * textureSize.x(), mTargetSize.x()); @@ -151,7 +151,7 @@ void ImageComponent::setImage(const char* path, size_t length, bool tile) mTexture = TextureResource::get("", tile); mTexture->initFromMemory(path, length); - + resize(); } @@ -386,7 +386,7 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s } Vector2f scale = getParent() ? getParent()->getSize() : Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - + if(properties & POSITION && elem->has("pos")) { Vector2f denormalized = elem->get("pos") * scale; diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index d6c55ed0b9..e546fb57e8 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -96,7 +96,7 @@ void NinePatchComponent::render(const Transform4x4f& parentTrans) { Transform4x4f trans = parentTrans * getTransform(); trans.round(); - + if(mTexture && mVertices != NULL) { Renderer::setMatrix(trans); diff --git a/es-core/src/components/ScrollableContainer.cpp b/es-core/src/components/ScrollableContainer.cpp index c0e6e6961d..eed40827ae 100644 --- a/es-core/src/components/ScrollableContainer.cpp +++ b/es-core/src/components/ScrollableContainer.cpp @@ -7,7 +7,7 @@ #define AUTO_SCROLL_DELAY 1000 // ms to wait before we start to scroll #define AUTO_SCROLL_SPEED 50 // ms between scrolls -ScrollableContainer::ScrollableContainer(Window* window) : GuiComponent(window), +ScrollableContainer::ScrollableContainer(Window* window) : GuiComponent(window), mAutoScrollDelay(0), mAutoScrollSpeed(0), mAutoScrollAccumulator(0), mScrollPos(0, 0), mScrollDir(0, 0), mAutoScrollResetAccumulator(0) { } diff --git a/es-core/src/components/SliderComponent.cpp b/es-core/src/components/SliderComponent.cpp index c3b49ed188..bc4fa8d91c 100644 --- a/es-core/src/components/SliderComponent.cpp +++ b/es-core/src/components/SliderComponent.cpp @@ -15,7 +15,7 @@ SliderComponent::SliderComponent(Window* window, float min, float max, float inc mKnob.setOrigin(0.5f, 0.5f); mKnob.setImage(":/slider_knob.svg"); - + setSize(Renderer::getScreenWidth() * 0.15f, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight()); } @@ -54,7 +54,7 @@ void SliderComponent::update(int deltaTime) mMoveAccumulator -= MOVE_REPEAT_RATE; } } - + GuiComponent::update(deltaTime); } @@ -76,7 +76,7 @@ void SliderComponent::render(const Transform4x4f& parentTrans) //render knob mKnob.render(trans); - + GuiComponent::renderChildren(trans); } @@ -100,7 +100,7 @@ void SliderComponent::onSizeChanged() { if(!mSuffix.empty()) mFont = Font::get((int)(mSize.y()), FONT_PATH_LIGHT); - + onValueChanged(); } diff --git a/es-core/src/components/SliderComponent.h b/es-core/src/components/SliderComponent.h index e4297d5b7b..f3ae181fce 100644 --- a/es-core/src/components/SliderComponent.h +++ b/es-core/src/components/SliderComponent.h @@ -21,9 +21,9 @@ class SliderComponent : public GuiComponent bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; void render(const Transform4x4f& parentTrans) override; - + void onSizeChanged() override; - + virtual std::vector getHelpPrompts() override; private: diff --git a/es-core/src/components/SwitchComponent.cpp b/es-core/src/components/SwitchComponent.cpp index dd01b18072..ac413c2fc7 100644 --- a/es-core/src/components/SwitchComponent.cpp +++ b/es-core/src/components/SwitchComponent.cpp @@ -29,7 +29,7 @@ bool SwitchComponent::input(InputConfig* config, Input input) void SwitchComponent::render(const Transform4x4f& parentTrans) { Transform4x4f trans = parentTrans * getTransform(); - + mImage.render(trans); renderChildren(trans); diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index b5a22760a0..9e61d5e145 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -4,7 +4,7 @@ #include "Log.h" #include "Settings.h" -TextComponent::TextComponent(Window* window) : GuiComponent(window), +TextComponent::TextComponent(Window* window) : GuiComponent(window), mFont(Font::get(FONT_SIZE_MEDIUM)), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mHorizontalAlignment(ALIGN_LEFT), mVerticalAlignment(ALIGN_CENTER), mLineSpacing(1.5f), mBgColor(0), mRenderBackground(false) @@ -12,7 +12,7 @@ TextComponent::TextComponent(Window* window) : GuiComponent(window), } TextComponent::TextComponent(Window* window, const std::string& text, const std::shared_ptr& font, unsigned int color, Alignment align, - Vector3f pos, Vector2f size, unsigned int bgcolor) : GuiComponent(window), + Vector3f pos, Vector2f size, unsigned int bgcolor) : GuiComponent(window), mFont(NULL), mUppercase(false), mColor(0x000000FF), mAutoCalcExtent(true, true), mHorizontalAlignment(align), mVerticalAlignment(ALIGN_CENTER), mLineSpacing(1.5f), mBgColor(0), mRenderBackground(false) @@ -255,7 +255,7 @@ void TextComponent::applyTheme(const std::shared_ptr& theme, const st return; if (properties & COLOR && elem->has("color")) - setColor(elem->get("color")); + setColor(elem->get("color")); setRenderBackground(false); if (properties & COLOR && elem->has("backgroundColor")) { diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index c5b2bce5be..d30c293c81 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -10,12 +10,12 @@ #define CURSOR_REPEAT_SPEED 28 // lower is faster TextEditComponent::TextEditComponent(Window* window) : GuiComponent(window), - mBox(window, ":/textinput_ninepatch.png"), mFocused(false), - mScrollOffset(0.0f, 0.0f), mCursor(0), mEditing(false), mFont(Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT)), + mBox(window, ":/textinput_ninepatch.png"), mFocused(false), + mScrollOffset(0.0f, 0.0f), mCursor(0), mEditing(false), mFont(Font::get(FONT_SIZE_MEDIUM, FONT_PATH_LIGHT)), mCursorRepeatDir(0) { addChild(&mBox); - + onFocusLost(); setSize(4096, mFont->getHeight() + TEXT_PADDING_VERT); @@ -217,7 +217,7 @@ void TextEditComponent::onCursorChanged() { if(isMultiline()) { - Vector2f textSize = mFont->getWrappedTextCursorOffset(mText, getTextAreaSize().x(), mCursor); + Vector2f textSize = mFont->getWrappedTextCursorOffset(mText, getTextAreaSize().x(), mCursor); if(mScrollOffset.y() + getTextAreaSize().y() < textSize.y() + mFont->getHeight()) //need to scroll down? { diff --git a/es-core/src/components/TextEditComponent.h b/es-core/src/components/TextEditComponent.h index 74e743a2e9..c388b30aac 100644 --- a/es-core/src/components/TextEditComponent.h +++ b/es-core/src/components/TextEditComponent.h @@ -13,7 +13,7 @@ class TextEditComponent : public GuiComponent { public: TextEditComponent(Window* window); - + void textInput(const char* text) override; bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index 6632945e63..45d9a6bd23 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -10,7 +10,7 @@ #define HOLD_TIME 1000 -GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun, const std::function& doneCallback) : GuiComponent(window), mFirstRun(firstRun), +GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun, const std::function& doneCallback) : GuiComponent(window), mFirstRun(firstRun), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 5)) { mHoldingConfig = NULL; @@ -19,16 +19,16 @@ GuiDetectDevice::GuiDetectDevice(Window* window, bool firstRun, const std::funct addChild(&mBackground); addChild(&mGrid); - + // title - mTitle = std::make_shared(mWindow, firstRun ? "WELCOME" : "CONFIGURE INPUT", + mTitle = std::make_shared(mWindow, firstRun ? "WELCOME" : "CONFIGURE INPUT", Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); mGrid.setEntry(mTitle, Vector2i(0, 0), false, true, Vector2i(1, 1), GridFlags::BORDER_BOTTOM); // device info std::stringstream deviceInfo; int numDevices = InputManager::getInstance()->getNumJoysticks(); - + if(numDevices > 0) deviceInfo << numDevices << " GAMEPAD" << (numDevices > 1 ? "S" : "") << " DETECTED"; else diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index 29111a4841..474ca4f267 100755 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -50,8 +50,8 @@ static const InputConfigStructure GUI_INPUT_CONFIG_LIST[inputCount] = #define HOLD_TO_SKIP_MS 1000 -GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function& okCallback) : GuiComponent(window), - mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 7)), +GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfigureAll, const std::function& okCallback) : GuiComponent(window), + mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 7)), mTargetConfig(target), mHoldingInput(false), mBusyAnim(window) { LOG(LogInfo) << "Configuring device " << target->getDeviceId() << " (" << target->getDeviceName() << ")."; @@ -70,7 +70,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mTitle = std::make_shared(mWindow, "CONFIGURING", Font::get(FONT_SIZE_LARGE), 0x555555FF, ALIGN_CENTER); mGrid.setEntry(mTitle, Vector2i(0, 1), false, true); - + std::stringstream ss; if(target->getDeviceId() == DEVICE_KEYBOARD) ss << "KEYBOARD"; @@ -91,7 +91,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi for(int i = 0; i < inputCount; i++) { ComponentListRow row; - + // icon auto icon = std::make_shared(mWindow); icon->setImage(GUI_INPUT_CONFIG_LIST[i].icon); @@ -128,7 +128,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi setPress(mapping); return true; } - + // we're not configuring and they didn't press A to start, so ignore this return false; } @@ -185,7 +185,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi InputManager::getInstance()->writeDeviceConfig(mTargetConfig); // save if(okCallback) okCallback(); - delete this; + delete this; }; buttons.push_back(std::make_shared(mWindow, "OK", "ok", [this, okFunction] { // check if the hotkey enable button is set. if not prompt the user to use select or nothing. @@ -263,7 +263,7 @@ void GuiInputConfig::update(int deltaTime) } } -// move cursor to the next thing if we're configuring all, +// move cursor to the next thing if we're configuring all, // or come out of "configure mode" if we were only configuring one row void GuiInputConfig::rowDone() { @@ -322,7 +322,7 @@ bool GuiInputConfig::assign(Input input, int inputId) } setAssignedTo(mMappings.at(inputId), input); - + input.configured = true; mTargetConfig->mapInput(GUI_INPUT_CONFIG_LIST[inputId].name, input); @@ -357,6 +357,10 @@ bool GuiInputConfig::filterTrigger(Input input, InputConfig* config, int inputId mSkipAxis = true; return true; } +#else + (void)input; + (void)config; + (void)inputId; #endif return false; diff --git a/es-core/src/guis/GuiInputConfig.h b/es-core/src/guis/GuiInputConfig.h index d33a8fad7b..3cdf0f9101 100644 --- a/es-core/src/guis/GuiInputConfig.h +++ b/es-core/src/guis/GuiInputConfig.h @@ -52,7 +52,7 @@ class GuiInputConfig : public GuiComponent int mHeldInputId; bool mSkipAxis; - BusyComponent mBusyAnim; + BusyComponent mBusyAnim; }; #endif // ES_CORE_GUIS_GUI_INPUT_CONFIG_H diff --git a/es-core/src/guis/GuiMsgBox.cpp b/es-core/src/guis/GuiMsgBox.cpp index 7f05603200..9db9ffff11 100644 --- a/es-core/src/guis/GuiMsgBox.cpp +++ b/es-core/src/guis/GuiMsgBox.cpp @@ -5,10 +5,10 @@ #define HORIZONTAL_PADDING_PX 20 -GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, +GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, const std::string& name1, const std::function& func1, - const std::string& name2, const std::function& func2, - const std::string& name3, const std::function& func3) : GuiComponent(window), + const std::string& name2, const std::function& func2, + const std::string& name3, const std::function& func3) : GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 2)) { float width = Renderer::getScreenWidth() * 0.6f; // max width @@ -66,7 +66,7 @@ GuiMsgBox::GuiMsgBox(Window* window, const std::string& text, bool GuiMsgBox::input(InputConfig* config, Input input) { // special case for when GuiMsgBox comes up to report errors before anything has been configured - if(config->getDeviceId() == DEVICE_KEYBOARD && !config->isConfigured() && input.value && + if(config->getDeviceId() == DEVICE_KEYBOARD && !config->isConfigured() && input.value && (input.id == SDLK_RETURN || input.id == SDLK_ESCAPE || input.id == SDLK_SPACE)) { mAcceleratorFunc(); @@ -86,7 +86,7 @@ void GuiMsgBox::onSizeChanged() { mGrid.setSize(mSize); mGrid.setRowHeightPerc(1, mButtonGrid->getSize().y() / mSize.y()); - + // update messagebox size mMsg->setSize(mSize.x() - HORIZONTAL_PADDING_PX*2, mGrid.getRowHeight(0)); mGrid.onSizeChanged(); diff --git a/es-core/src/guis/GuiMsgBox.h b/es-core/src/guis/GuiMsgBox.h index 0719183451..cd9883244b 100644 --- a/es-core/src/guis/GuiMsgBox.h +++ b/es-core/src/guis/GuiMsgBox.h @@ -12,9 +12,9 @@ class TextComponent; class GuiMsgBox : public GuiComponent { public: - GuiMsgBox(Window* window, const std::string& text, + GuiMsgBox(Window* window, const std::string& text, const std::string& name1 = "OK", const std::function& func1 = nullptr, - const std::string& name2 = "", const std::function& func2 = nullptr, + const std::string& name2 = "", const std::function& func2 = nullptr, const std::string& name3 = "", const std::function& func3 = nullptr); bool input(InputConfig* config, Input input) override; diff --git a/es-core/src/guis/GuiTextEditPopup.cpp b/es-core/src/guis/GuiTextEditPopup.cpp index 267939430e..4c14bddb47 100644 --- a/es-core/src/guis/GuiTextEditPopup.cpp +++ b/es-core/src/guis/GuiTextEditPopup.cpp @@ -4,7 +4,7 @@ #include "components/MenuComponent.h" #include "components/TextEditComponent.h" -GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, const std::string& initValue, +GuiTextEditPopup::GuiTextEditPopup(Window* window, const std::string& title, const std::string& initValue, const std::function& okCallback, bool multiLine, const char* acceptBtnText) : GuiComponent(window), mBackground(window, ":/frame.png"), mGrid(window, Vector2i(1, 3)), mMultiLine(multiLine) { diff --git a/es-core/src/guis/GuiTextEditPopup.h b/es-core/src/guis/GuiTextEditPopup.h index eca29ec41a..4658fca4ab 100644 --- a/es-core/src/guis/GuiTextEditPopup.h +++ b/es-core/src/guis/GuiTextEditPopup.h @@ -12,7 +12,7 @@ class TextEditComponent; class GuiTextEditPopup : public GuiComponent { public: - GuiTextEditPopup(Window* window, const std::string& title, const std::string& initValue, + GuiTextEditPopup(Window* window, const std::string& title, const std::string& initValue, const std::function& okCallback, bool multiLine, const char* acceptBtnText = "OK"); bool input(InputConfig* config, Input input); diff --git a/es-core/src/platform.cpp b/es-core/src/platform.cpp index d3b87fb27f..81262310b7 100644 --- a/es-core/src/platform.cpp +++ b/es-core/src/platform.cpp @@ -71,15 +71,15 @@ void processQuitMode() { switch (quitMode) { - case QuitMode::RESTART: + case QuitMode::RESTART: LOG(LogInfo) << "Restarting EmulationStation"; touch("/tmp/es-restart"); - break; - case QuitMode::REBOOT: + break; + case QuitMode::REBOOT: LOG(LogInfo) << "Rebooting system"; touch("/tmp/es-sysrestart"); runRestartCommand(); - break; + break; case QuitMode::SHUTDOWN: LOG(LogInfo) << "Shutting system down"; touch("/tmp/es-shutdown"); diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index b107f1d29a..65b5fedf9d 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -47,7 +47,7 @@ namespace Renderer #endif // try creating SDL surface from logo data SDL_Surface* logoSurface = SDL_CreateRGBSurfaceFrom((void*)rawData.data(), (int)width, (int)height, 32, (int)(width * 4), rmask, gmask, bmask, amask); - + if(logoSurface != nullptr) { SDL_SetWindowIcon(sdlWindow, logoSurface); diff --git a/es-core/src/renderers/Renderer.h b/es-core/src/renderers/Renderer.h index 3a409d7a70..f542385757 100644 --- a/es-core/src/renderers/Renderer.h +++ b/es-core/src/renderers/Renderer.h @@ -62,13 +62,13 @@ namespace Renderer }; // Vertex - bool init (); - void deinit (); + bool init (); + void deinit (); void pushClipRect (const Vector2i& _pos, const Vector2i& _size); void popClipRect (); - void drawRect (const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); - void drawRect (const int _x, const int _y, const int _w, const int _h, const unsigned int _color, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); - + void drawRect (const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); + void drawRect (const int _x, const int _y, const int _w, const int _h, const unsigned int _color, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); + SDL_Window* getSDLWindow (); int getWindowWidth (); int getWindowHeight (); diff --git a/es-core/src/renderers/Renderer_GL21.cpp b/es-core/src/renderers/Renderer_GL21.cpp index 4799409818..f3b4247ec5 100644 --- a/es-core/src/renderers/Renderer_GL21.cpp +++ b/es-core/src/renderers/Renderer_GL21.cpp @@ -225,8 +225,8 @@ namespace Renderer // vsync if(Settings::getInstance()->getBool("VSync")) { - // SDL_GL_SetSwapInterval(0) for immediate updates (no vsync, default), - // 1 for updates synchronized with the vertical retrace, + // SDL_GL_SetSwapInterval(0) for immediate updates (no vsync, default), + // 1 for updates synchronized with the vertical retrace, // or -1 for late swap tearing. // SDL_GL_SetSwapInterval returns 0 on success, -1 on error. // if vsync is requested, try normal vsync; if that doesn't work, try late swap tearing diff --git a/es-core/src/renderers/Renderer_GLES10.cpp b/es-core/src/renderers/Renderer_GLES10.cpp index 1d402822e0..3a99b45d1f 100644 --- a/es-core/src/renderers/Renderer_GLES10.cpp +++ b/es-core/src/renderers/Renderer_GLES10.cpp @@ -225,8 +225,8 @@ namespace Renderer // vsync if(Settings::getInstance()->getBool("VSync")) { - // SDL_GL_SetSwapInterval(0) for immediate updates (no vsync, default), - // 1 for updates synchronized with the vertical retrace, + // SDL_GL_SetSwapInterval(0) for immediate updates (no vsync, default), + // 1 for updates synchronized with the vertical retrace, // or -1 for late swap tearing. // SDL_GL_SetSwapInterval returns 0 on success, -1 on error. // if vsync is requested, try normal vsync; if that doesn't work, try late swap tearing diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index c84f059bd1..ad8e671d4f 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -19,7 +19,7 @@ Font::FontFace::FontFace(ResourceData&& d, int size) : data(d) { int err = FT_New_Memory_Face(sLibrary, data.ptr.get(), (FT_Long)data.length, 0, &face); assert(!err); - + if(!err) FT_Set_Pixel_Sizes(face, 0, size); } @@ -75,7 +75,7 @@ size_t Font::getTotalMemUsage() Font::Font(int size, const std::string& path) : mSize(size), mPath(path) { assert(mSize > 0); - + mMaxGlyphHeight = 0; if(!sLibrary) @@ -204,7 +204,7 @@ void Font::getTextureForNewGlyph(const Vector2i& glyphSize, FontTexture*& tex_ou mTextures.push_back(FontTexture()); tex_out = &mTextures.back(); tex_out->initTexture(); - + bool ok = tex_out->findEmpty(glyphSize, cursor_out); if(!ok) { @@ -248,7 +248,7 @@ std::vector getFallbackFontPaths() #else // Linux - const char* paths[] = { + const char* paths[] = { "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", "/usr/share/fonts/truetype/freefont/FreeMono.ttf", "/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf" // japanese, chinese, present on Debian @@ -337,7 +337,7 @@ Font::Glyph* Font::getGlyph(unsigned int id) // create glyph Glyph& glyph = mGlyphMap[id]; - + glyph.texture = tex; glyph.texPos = Vector2f(cursor.x() / (float)tex->textureSize.x(), cursor.y() / (float)tex->textureSize.y()); glyph.texSize = Vector2f(glyphSize.x() / (float)tex->textureSize.x(), glyphSize.y() / (float)tex->textureSize.y()); @@ -375,11 +375,11 @@ void Font::rebuildTextures() FT_Load_Char(face, it->first, FT_LOAD_RENDER); FontTexture* tex = it->second.texture; - + // find the position/size Vector2i cursor((int)(it->second.texPos.x() * tex->textureSize.x()), (int)(it->second.texPos.y() * tex->textureSize.y())); Vector2i glyphSize((int)(it->second.texSize.x() * tex->textureSize.x()), (int)(it->second.texSize.y() * tex->textureSize.y())); - + // upload to texture Renderer::updateTexture(tex->textureId, Renderer::Texture::ALPHA, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), glyphSlot->bitmap.buffer); } @@ -566,7 +566,7 @@ float Font::getNewlineStartOffset(const std::string& text, const unsigned int& c TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsigned int color, float xLen, Alignment alignment, float lineSpacing) { float x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, 0, xLen, alignment) : 0); - + float yTop = getGlyph('S')->bearing.y(); float yBot = getHeight(lineSpacing); float y = offset[1] + (yBot + yTop)/2.0f; @@ -656,13 +656,13 @@ std::shared_ptr Font::getFromTheme(const ThemeData::ThemeElement* elem, un using namespace ThemeFlags; if(!(properties & FONT_PATH) && !(properties & FONT_SIZE)) return orig; - + std::shared_ptr font; int size = (orig ? orig->mSize : FONT_SIZE_MEDIUM); std::string path = (orig ? orig->mPath : getDefaultPath()); float sh = (float)Renderer::getScreenHeight(); - if(properties & FONT_SIZE && elem->has("fontSize")) + if(properties & FONT_SIZE && elem->has("fontSize")) size = (int)(sh * elem->get("fontSize")); if(properties & FONT_PATH && elem->has("fontPath")) path = elem->get("fontPath"); diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index 72a201f9c4..448ab5f9ba 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -45,7 +45,7 @@ class Font : public IReloadable TextCache* buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color); TextCache* buildTextCache(const std::string& text, Vector2f offset, unsigned int color, float xLen, Alignment alignment = ALIGN_LEFT, float lineSpacing = 1.5f); void renderTextCache(TextCache* cache); - + std::string wrapText(std::string text, float xLen); // Inserts newlines into text to make it wrap properly. Vector2f sizeWrappedText(std::string text, float xLen, float lineSpacing = 1.5f); // Returns the expected size of a string after wrapping is applied. Vector2f getWrappedTextCursorOffset(std::string text, float xLen, size_t cursor, float lineSpacing = 1.5f); // Returns the position of of the cursor after moving "cursor" characters. @@ -112,7 +112,7 @@ class Font : public IReloadable struct Glyph { FontTexture* texture; - + Vector2f texPos; Vector2f texSize; // in texels! @@ -125,7 +125,7 @@ class Font : public IReloadable Glyph* getGlyph(unsigned int id); int mMaxGlyphHeight; - + const int mSize; const std::string mPath; diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index bd2c84ba6d..a30d0ca2d7 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -25,8 +25,8 @@ namespace Utils { namespace FileSystem { - static std::string homePath; - static std::string exePath; + static std::string homePath = ""; + static std::string exePath = ""; #if defined(_WIN32) static std::string convertFromWideString(const std::wstring wstring) @@ -142,18 +142,20 @@ namespace Utils void setHomePath(const std::string& _path) { homePath = getGenericPath(_path); - } + + } // setHomePath std::string getHomePath() { + // only construct the homepath once if(homePath.length()) return homePath; - // Is it a portable installation ? Check if ".emulationstation/es_systems.cfg" exists in the exe's path - if(Utils::FileSystem::exists(getExePath() + "/.emulationstation/es_systems.cfg")) + // check if "getExePath()/.emulationstation/es_systems.cfg" exists + if(Utils::FileSystem::exists(getExePath() + "/.emulationstation/es_systems.cfg")) homePath = getExePath(); - // Check for HOME environment variable + // check for HOME environment variable if(!homePath.length()) { char* envHome = getenv("HOME"); @@ -162,8 +164,7 @@ namespace Utils } #if defined(_WIN32) - // On Windows, HOME is not the system's user path but a user environment variable. - // Instead we get the home user's path using %HOMEDRIVE%/%HOMEPATH% which are system variables. + // on Windows we need to check HOMEDRIVE and HOMEPATH if(!homePath.length()) { char* envHomeDrive = getenv("HOMEDRIVE"); @@ -175,7 +176,7 @@ namespace Utils // no homepath found, fall back to current working directory if(!homePath.length()) - homePath = getCWDPath(); + homePath = getCWDPath(); // return constructed homepath return homePath; @@ -193,15 +194,16 @@ namespace Utils void setExePath(const std::string& _path) { - std::string path = getCanonicalPath(_path); - if(isRegularFile(path)) - path = getParent(path); + exePath = getCanonicalPath(_path); + + if(isRegularFile(exePath)) + exePath = getParent(exePath); - exePath = path; } // setExePath std::string getExePath() - { + { + // return constructed exepath return exePath; } // getExePath @@ -451,21 +453,17 @@ namespace Utils bool contains = false; std::string path = removeCommonPath(_path, _relativeTo, contains); + // success if(contains) - { - // success return ("./" + path); - } if(_allowHome) { path = removeCommonPath(_path, getHomePath(), contains); + // success if(contains) - { - // success return ("~/" + path); - } } // nothing to resolve diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index bb6ea67648..db45a1c538 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -39,6 +39,7 @@ namespace Utils bool isDirectory (const std::string& _path); bool isSymlink (const std::string& _path); bool isHidden (const std::string& _path); + } // FileSystem:: } // Utils:: diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index 8d35f9701a..b9ba8cbe6c 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -205,7 +205,7 @@ namespace Utils { done = true; - for(int i = 0; i < sizeof(remove); i += 2) + for(size_t i = 0; i < sizeof(remove); i += 2) { end = string.find_first_of(remove[i + 1]); start = string.find_last_of( remove[i + 0], end); @@ -280,14 +280,13 @@ namespace Utils } // format - // Simple XOR scrambling of a string, with an accompanying key - std::string scramble(const std::string& _input, const std::string& key) + std::string scramble(const std::string& _input, const std::string& _key) { std::string buffer = _input; - - for (size_t i = 0; i < _input.size(); ++i) - { - buffer[i] = _input[i] ^ key[i]; + + for(size_t i = 0; i < _input.size(); ++i) + { + buffer[i] = _input[i] ^ _key[i]; } return buffer; diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h index 5fffa1d761..39fd9559dc 100644 --- a/es-core/src/utils/StringUtil.h +++ b/es-core/src/utils/StringUtil.h @@ -25,7 +25,7 @@ namespace Utils std::string removeParenthesis (const std::string& _string); stringVector commaStringToVector(const std::string& _string); std::string vectorToCommaString(stringVector _vector); - std::string format (const char* _string, ...); + std::string format (const char* _string, ...); std::string scramble (const std::string& _input, const std::string& key); } // String:: diff --git a/es-core/src/utils/TimeUtil.cpp b/es-core/src/utils/TimeUtil.cpp index 2b10eeb4a0..3bad4eb37a 100644 --- a/es-core/src/utils/TimeUtil.cpp +++ b/es-core/src/utils/TimeUtil.cpp @@ -95,7 +95,7 @@ namespace Utils if(*f == '%') { ++f; - + switch(*f++) { case 'Y': // The year [1970,xxxx] @@ -200,7 +200,7 @@ namespace Utils if(*f == '%') { ++f; - + switch(*f++) { case 'Y': // The year, including the century (1900) From ee78a50252a07068b1335fe0cfcbbf0e45ba770e Mon Sep 17 00:00:00 2001 From: verybadsoldier Date: Sat, 24 Aug 2019 16:22:02 +0200 Subject: [PATCH 377/603] save also metadata that have default values. they might not had default values on start so they have to be saved --- es-app/src/Gamelist.cpp | 5 ----- es-app/src/MetaData.cpp | 11 ----------- es-app/src/MetaData.h | 2 -- 3 files changed, 18 deletions(-) diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 14af11757d..a6975de2f8 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -217,11 +217,6 @@ void updateGamelist(SystemData* system) { const char* tag = ((*fit)->getType() == GAME) ? "game" : "folder"; - // check if current file has metadata, if no, skip it as it wont be in the gamelist anyway. - if ((*fit)->metadata.isDefault()) { - continue; - } - // do not touch if it wasn't changed anyway if (!(*fit)->metadata.wasChanged()) continue; diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 8a977e9509..0851fbdf4f 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -140,17 +140,6 @@ float MetaDataList::getFloat(const std::string& key) const return (float)atof(get(key).c_str()); } -bool MetaDataList::isDefault() -{ - const std::vector& mdd = getMDD(); - - for (unsigned int i = 1; i < mMap.size(); i++) { - if (mMap.at(mdd[i].key) != mdd[i].defaultValue) return false; - } - - return true; -} - bool MetaDataList::wasChanged() const { return mWasChanged; diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 6ed8f6d44c..52e1eddc11 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -55,8 +55,6 @@ class MetaDataList int getInt(const std::string& key) const; float getFloat(const std::string& key) const; - bool isDefault(); - bool wasChanged() const; void resetChangedFlag(); From bbd21c005c2fb0bcb6d189a74f5268fb9b411222 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Tue, 27 Aug 2019 20:06:31 -0400 Subject: [PATCH 378/603] update nanosvg to latest version --- external/nanosvg/nanosvg.h | 282 ++++++++++++++++++++++++--------- external/nanosvg/nanosvgrast.h | 57 ++++--- 2 files changed, 238 insertions(+), 101 deletions(-) diff --git a/external/nanosvg/nanosvg.h b/external/nanosvg/nanosvg.h index a6c60155ea..0cb1e902db 100644 --- a/external/nanosvg/nanosvg.h +++ b/external/nanosvg/nanosvg.h @@ -29,9 +29,11 @@ #ifndef NANOSVG_H #define NANOSVG_H +#ifndef NANOSVG_CPLUSPLUS #ifdef __cplusplus extern "C" { #endif +#endif // NanoSVG is a simple stupid single-header-file SVG parse. The output of the parser is a list of cubic bezier shapes. // @@ -45,15 +47,15 @@ extern "C" { // NanoSVG can return the paths in few different units. For example if you want to render an image, you may choose // to get the paths in pixels, or if you are feeding the data into a CNC-cutter, you may want to use millimeters. // -// The units passed to NanoVG should be one of: 'px', 'pt', 'pc' 'mm', 'cm', or 'in'. +// The units passed to NanoSVG should be one of: 'px', 'pt', 'pc' 'mm', 'cm', or 'in'. // DPI (dots-per-inch) controls how the unit conversion is done. // // If you don't know or care about the units stuff, "px" and 96 should get you going. /* Example Usage: - // Load - NSVGImage* image; + // Load SVG + NSVGimage* image; image = nsvgParseFromFile("test.svg", "px", 96); printf("size: %f x %f\n", image->width, image->height); // Use... @@ -73,30 +75,30 @@ enum NSVGpaintType { NSVG_PAINT_NONE = 0, NSVG_PAINT_COLOR = 1, NSVG_PAINT_LINEAR_GRADIENT = 2, - NSVG_PAINT_RADIAL_GRADIENT = 3, + NSVG_PAINT_RADIAL_GRADIENT = 3 }; enum NSVGspreadType { NSVG_SPREAD_PAD = 0, NSVG_SPREAD_REFLECT = 1, - NSVG_SPREAD_REPEAT = 2, + NSVG_SPREAD_REPEAT = 2 }; enum NSVGlineJoin { NSVG_JOIN_MITER = 0, NSVG_JOIN_ROUND = 1, - NSVG_JOIN_BEVEL = 2, + NSVG_JOIN_BEVEL = 2 }; enum NSVGlineCap { NSVG_CAP_BUTT = 0, NSVG_CAP_ROUND = 1, - NSVG_CAP_SQUARE = 2, + NSVG_CAP_SQUARE = 2 }; enum NSVGfillRule { NSVG_FILLRULE_NONZERO = 0, - NSVG_FILLRULE_EVENODD = 1, + NSVG_FILLRULE_EVENODD = 1 }; enum NSVGflags { @@ -145,6 +147,7 @@ typedef struct NSVGshape char strokeDashCount; // Number of dash values in dash array. char strokeLineJoin; // Stroke join type. char strokeLineCap; // Stroke cap type. + float miterLimit; // Miter limit char fillRule; // Fill rule, see NSVGfillRule. unsigned char flags; // Logical or of NSVG_FLAGS_* flags float bounds[4]; // Tight bounding box of the shape [minx,miny,maxx,maxy]. @@ -166,11 +169,16 @@ NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi) // Important note: changes the string. NSVGimage* nsvgParse(char* input, const char* units, float dpi); -// Deletes list of paths. +// Duplicates a path. +NSVGpath* nsvgDuplicatePath(NSVGpath* p); + +// Deletes an image. void nsvgDelete(NSVGimage* image); +#ifndef NANOSVG_CPLUSPLUS #ifdef __cplusplus -}; +} +#endif #endif #endif // NANOSVG_H @@ -182,7 +190,7 @@ void nsvgDelete(NSVGimage* image); #include #define NSVG_PI (3.14159265358979323846264338327f) -#define NSVG_KAPPA90 (0.5522847493f) // Lenght proportional to radius of a cubic bezier handle for 90deg arcs. +#define NSVG_KAPPA90 (0.5522847493f) // Length proportional to radius of a cubic bezier handle for 90deg arcs. #define NSVG_ALIGN_MIN 0 #define NSVG_ALIGN_MID 1 @@ -195,7 +203,7 @@ void nsvgDelete(NSVGimage* image); #define NSVG_RGB(r, g, b) (((unsigned int)r) | ((unsigned int)g << 8) | ((unsigned int)b << 16)) #ifdef _MSC_VER - #pragma warning (disable: 4996) // Switch off security warnings +#pragma warning (disable: 4996) // Switch off security warnings #pragma warning (disable: 4100) // Switch off unreferenced formal parameter warnings #ifdef __cplusplus #define NSVG_INLINE inline @@ -203,7 +211,7 @@ void nsvgDelete(NSVGimage* image); #define NSVG_INLINE #endif #else - #define NSVG_INLINE inline +#define NSVG_INLINE inline #endif @@ -214,7 +222,7 @@ static int nsvg__isspace(char c) static int nsvg__isdigit(char c) { - return strchr("0123456789", c) != 0; + return c >= '0' && c <= '9'; } static int nsvg__isnum(char c) @@ -278,6 +286,9 @@ static void nsvg__parseElement(char* s, // Get attribs while (!end && *s && nattr < NSVG_XML_MAX_ATTRIBS-3) { + char* name = NULL; + char* value = NULL; + // Skip white space before the attrib name while (*s && nsvg__isspace(*s)) s++; if (!*s) break; @@ -285,7 +296,7 @@ static void nsvg__parseElement(char* s, end = 1; break; } - attr[nattr++] = s; + name = s; // Find end of the attrib name. while (*s && !nsvg__isspace(*s) && *s != '=') s++; if (*s) { *s++ = '\0'; } @@ -295,9 +306,15 @@ static void nsvg__parseElement(char* s, quote = *s; s++; // Store value and find the end of it. - attr[nattr++] = s; + value = s; while (*s && *s != quote) s++; if (*s) { *s++ = '\0'; } + + // Store only well formed attributes + if (name && value) { + attr[nattr++] = name; + attr[nattr++] = value; + } } // List terminator @@ -348,7 +365,7 @@ int nsvg__parseXML(char* input, enum NSVGgradientUnits { NSVG_USER_SPACE = 0, - NSVG_OBJECT_SPACE = 1, + NSVG_OBJECT_SPACE = 1 }; #define NSVG_MAX_DASHES 8 @@ -363,7 +380,7 @@ enum NSVGunits { NSVG_UNITS_IN, NSVG_UNITS_PERCENT, NSVG_UNITS_EM, - NSVG_UNITS_EX, + NSVG_UNITS_EX }; typedef struct NSVGcoordinate { @@ -413,6 +430,7 @@ typedef struct NSVGattrib int strokeDashCount; char strokeLineJoin; char strokeLineCap; + float miterLimit; char fillRule; float fontSize; unsigned int stopColor; @@ -433,6 +451,7 @@ typedef struct NSVGparser NSVGpath* plist; NSVGimage* image; NSVGgradientData* gradients; + NSVGshape* shapesTail; float viewMinx, viewMiny, viewWidth, viewHeight; int alignX, alignY, alignType; float dpi; @@ -620,13 +639,14 @@ static NSVGparser* nsvg__createParser() p->attr[0].strokeWidth = 1; p->attr[0].strokeLineJoin = NSVG_JOIN_MITER; p->attr[0].strokeLineCap = NSVG_CAP_BUTT; + p->attr[0].miterLimit = 4; p->attr[0].fillRule = NSVG_FILLRULE_NONZERO; p->attr[0].hasFill = 1; p->attr[0].visible = 1; return p; -error: + error: if (p) { if (p->image) free(p->image); free(p); @@ -918,7 +938,7 @@ static void nsvg__addShape(NSVGparser* p) { NSVGattrib* attr = nsvg__getAttr(p); float scale = 1.0f; - NSVGshape *shape, *cur, *prev; + NSVGshape* shape; NSVGpath* path; int i; @@ -933,11 +953,12 @@ static void nsvg__addShape(NSVGparser* p) scale = nsvg__getAverageScale(attr->xform); shape->strokeWidth = attr->strokeWidth * scale; shape->strokeDashOffset = attr->strokeDashOffset * scale; - shape->strokeDashCount = attr->strokeDashCount; + shape->strokeDashCount = (char)attr->strokeDashCount; for (i = 0; i < attr->strokeDashCount; i++) shape->strokeDashArray[i] = attr->strokeDashArray[i] * scale; shape->strokeLineJoin = attr->strokeLineJoin; shape->strokeLineCap = attr->strokeLineCap; + shape->miterLimit = attr->miterLimit; shape->fillRule = attr->fillRule; shape->opacity = attr->opacity; @@ -993,20 +1014,15 @@ static void nsvg__addShape(NSVGparser* p) shape->flags = (attr->visible ? NSVG_FLAGS_VISIBLE : 0x00); // Add to tail - prev = NULL; - cur = p->image->shapes; - while (cur != NULL) { - prev = cur; - cur = cur->next; - } - if (prev == NULL) + if (p->image->shapes == NULL) p->image->shapes = shape; else - prev->next = shape; + p->shapesTail->next = shape; + p->shapesTail = shape; return; -error: + error: if (shape) free(shape); } @@ -1059,13 +1075,73 @@ static void nsvg__addPath(NSVGparser* p, char closed) return; -error: + error: if (path != NULL) { if (path->pts != NULL) free(path->pts); free(path); } } +// We roll our own string to float because the std library one uses locale and messes things up. +static double nsvg__atof(const char* s) +{ + char* cur = (char*)s; + char* end = NULL; + double res = 0.0, sign = 1.0; + long long intPart = 0, fracPart = 0; + char hasIntPart = 0, hasFracPart = 0; + + // Parse optional sign + if (*cur == '+') { + cur++; + } else if (*cur == '-') { + sign = -1; + cur++; + } + + // Parse integer part + if (nsvg__isdigit(*cur)) { + // Parse digit sequence + intPart = strtoll(cur, &end, 10); + if (cur != end) { + res = (double)intPart; + hasIntPart = 1; + cur = end; + } + } + + // Parse fractional part. + if (*cur == '.') { + cur++; // Skip '.' + if (nsvg__isdigit(*cur)) { + // Parse digit sequence + fracPart = strtoll(cur, &end, 10); + if (cur != end) { + res += (double)fracPart / pow(10.0, (double)(end - cur)); + hasFracPart = 1; + cur = end; + } + } + } + + // A valid number should have integer or fractional part. + if (!hasIntPart && !hasFracPart) + return 0.0; + + // Parse optional exponent + if (*cur == 'e' || *cur == 'E') { + long expPart = 0; + cur++; // skip 'E' + expPart = strtol(cur, &end, 10); // Parse digit sequence with sign + if (cur != end) { + res *= pow(10.0, (double)expPart); + } + } + + return res * sign; +} + + static const char* nsvg__parseNumber(const char* s, char* it, const int size) { const int last = size-1; @@ -1092,7 +1168,7 @@ static const char* nsvg__parseNumber(const char* s, char* it, const int size) } } // exponent - if (*s == 'e' || *s == 'E') { + if ((*s == 'e' || *s == 'E') && (s[1] != 'm' && s[1] != 'x')) { if (i < last) it[i++] = *s; s++; if (*s == '-' || *s == '+') { @@ -1167,19 +1243,19 @@ typedef struct NSVGNamedColor { NSVGNamedColor nsvg__colors[] = { - { "red", NSVG_RGB(255, 0, 0) }, - { "green", NSVG_RGB( 0, 128, 0) }, - { "blue", NSVG_RGB( 0, 0, 255) }, - { "yellow", NSVG_RGB(255, 255, 0) }, - { "cyan", NSVG_RGB( 0, 255, 255) }, - { "magenta", NSVG_RGB(255, 0, 255) }, - { "black", NSVG_RGB( 0, 0, 0) }, - { "grey", NSVG_RGB(128, 128, 128) }, - { "gray", NSVG_RGB(128, 128, 128) }, - { "white", NSVG_RGB(255, 255, 255) }, + { "red", NSVG_RGB(255, 0, 0) }, + { "green", NSVG_RGB( 0, 128, 0) }, + { "blue", NSVG_RGB( 0, 0, 255) }, + { "yellow", NSVG_RGB(255, 255, 0) }, + { "cyan", NSVG_RGB( 0, 255, 255) }, + { "magenta", NSVG_RGB(255, 0, 255) }, + { "black", NSVG_RGB( 0, 0, 0) }, + { "grey", NSVG_RGB(128, 128, 128) }, + { "gray", NSVG_RGB(128, 128, 128) }, + { "white", NSVG_RGB(255, 255, 255) }, #ifdef NANOSVG_ALL_COLOR_KEYWORDS - { "aliceblue", NSVG_RGB(240, 248, 255) }, +{ "aliceblue", NSVG_RGB(240, 248, 255) }, { "antiquewhite", NSVG_RGB(250, 235, 215) }, { "aqua", NSVG_RGB( 0, 255, 255) }, { "aquamarine", NSVG_RGB(127, 255, 212) }, @@ -1346,13 +1422,19 @@ static unsigned int nsvg__parseColor(const char* str) static float nsvg__parseOpacity(const char* str) { - float val = 0; - sscanf(str, "%f", &val); + float val = nsvg__atof(str); if (val < 0.0f) val = 0.0f; if (val > 1.0f) val = 1.0f; return val; } +static float nsvg__parseMiterLimit(const char* str) +{ + float val = nsvg__atof(str); + if (val < 0.0f) val = 0.0f; + return val; +} + static int nsvg__parseUnits(const char* units) { if (units[0] == 'p' && units[1] == 'x') @@ -1379,9 +1461,9 @@ static int nsvg__parseUnits(const char* units) static NSVGcoordinate nsvg__parseCoordinateRaw(const char* str) { NSVGcoordinate coord = {0, NSVG_UNITS_USER}; - char units[32]=""; - sscanf(str, "%f%s", &coord.value, units); - coord.units = nsvg__parseUnits(units); + char buf[64]; + coord.units = nsvg__parseUnits(nsvg__parseNumber(str, buf, 64)); + coord.value = nsvg__atof(buf); return coord; } @@ -1417,7 +1499,7 @@ static int nsvg__parseTransformArgs(const char* str, float* args, int maxNa, int if (*ptr == '-' || *ptr == '+' || *ptr == '.' || nsvg__isdigit(*ptr)) { if (*na >= maxNa) return 0; ptr = nsvg__parseNumber(ptr, it, 64); - args[(*na)++] = (float)atof(it); + args[(*na)++] = (float)nsvg__atof(it); } else { ++ptr; } @@ -1573,7 +1655,7 @@ static char nsvg__parseLineJoin(const char* str) else if (strcmp(str, "bevel") == 0) return NSVG_JOIN_BEVEL; // TODO: handle inherit. - return NSVG_CAP_BUTT; + return NSVG_JOIN_MITER; } static char nsvg__parseFillRule(const char* str) @@ -1679,6 +1761,8 @@ static int nsvg__parseAttr(NSVGparser* p, const char* name, const char* value) attr->strokeLineCap = nsvg__parseLineCap(value); } else if (strcmp(name, "stroke-linejoin") == 0) { attr->strokeLineJoin = nsvg__parseLineJoin(value); + } else if (strcmp(name, "stroke-miterlimit") == 0) { + attr->miterLimit = nsvg__parseMiterLimit(value); } else if (strcmp(name, "fill-rule") == 0) { attr->fillRule = nsvg__parseFillRule(value); } else if (strcmp(name, "font-size") == 0) { @@ -1995,7 +2079,7 @@ static void nsvg__pathArcTo(NSVGparser* p, float* cpx, float* cpy, float* args, rx = fabsf(args[0]); // y radius ry = fabsf(args[1]); // x radius - rotx = args[2] / 180.0f * NSVG_PI; // x rotation engle + rotx = args[2] / 180.0f * NSVG_PI; // x rotation angle fa = fabsf(args[3]) > 1e-6 ? 1 : 0; // Large arc fs = fabsf(args[4]) > 1e-6 ? 1 : 0; // Sweep direction x1 = *cpx; // start point @@ -2060,13 +2144,10 @@ static void nsvg__pathArcTo(NSVGparser* p, float* cpx, float* cpy, float* args, // if (vecrat(ux,uy,vx,vy) <= -1.0f) da = NSVG_PI; // if (vecrat(ux,uy,vx,vy) >= 1.0f) da = 0; - if (fa) { - // Choose large arc - if (da > 0.0f) - da = da - 2*NSVG_PI; - else - da = 2*NSVG_PI + da; - } + if (fs == 0 && da > 0) + da -= 2 * NSVG_PI; + else if (fs == 1 && da < 0) + da += 2 * NSVG_PI; // Approximate the arc using cubic spline segments. t[0] = cosrx; t[1] = sinrx; @@ -2082,7 +2163,7 @@ static void nsvg__pathArcTo(NSVGparser* p, float* cpx, float* cpy, float* args, kappa = -kappa; for (i = 0; i <= ndivs; i++) { - a = a1 + da * (i/(float)ndivs); + a = a1 + da * ((float)i/(float)ndivs); dx = cosf(a); dy = sinf(a); nsvg__xformPoint(&x, &y, dx*rx, dy*ry, t); // position @@ -2136,7 +2217,7 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr) if (!*item) break; if (nsvg__isnum(item[0])) { if (nargs < 10) - args[nargs++] = (float)atof(item); + args[nargs++] = (float)nsvg__atof(item); if (nargs >= rargs) { switch (cmd) { case 'm': @@ -2145,23 +2226,23 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr) // Moveto can be followed by multiple coordinate pairs, // which should be treated as linetos. cmd = (cmd == 'm') ? 'l' : 'L'; - rargs = nsvg__getArgsPerElement(cmd); - cpx2 = cpx; cpy2 = cpy; + rargs = nsvg__getArgsPerElement(cmd); + cpx2 = cpx; cpy2 = cpy; break; case 'l': case 'L': nsvg__pathLineTo(p, &cpx, &cpy, args, cmd == 'l' ? 1 : 0); - cpx2 = cpx; cpy2 = cpy; + cpx2 = cpx; cpy2 = cpy; break; case 'H': case 'h': nsvg__pathHLineTo(p, &cpx, &cpy, args, cmd == 'h' ? 1 : 0); - cpx2 = cpx; cpy2 = cpy; + cpx2 = cpx; cpy2 = cpy; break; case 'V': case 'v': nsvg__pathVLineTo(p, &cpx, &cpy, args, cmd == 'v' ? 1 : 0); - cpx2 = cpx; cpy2 = cpy; + cpx2 = cpx; cpy2 = cpy; break; case 'C': case 'c': @@ -2182,13 +2263,13 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr) case 'A': case 'a': nsvg__pathArcTo(p, &cpx, &cpy, args, cmd == 'a' ? 1 : 0); - cpx2 = cpx; cpy2 = cpy; + cpx2 = cpx; cpy2 = cpy; break; default: if (nargs >= 2) { cpx = args[nargs-2]; cpy = args[nargs-1]; - cpx2 = cpx; cpy2 = cpy; + cpx2 = cpx; cpy2 = cpy; } break; } @@ -2393,7 +2474,7 @@ static void nsvg__parsePoly(NSVGparser* p, const char** attr, int closeFlag) nargs = 0; while (*s) { s = nsvg__getNextPathItem(s, item); - args[nargs++] = (float)atof(item); + args[nargs++] = (float)nsvg__atof(item); if (nargs >= 2) { if (npts == 0) nsvg__moveTo(p, args[0], args[1]); @@ -2418,11 +2499,26 @@ static void nsvg__parseSVG(NSVGparser* p, const char** attr) for (i = 0; attr[i]; i += 2) { if (!nsvg__parseAttr(p, attr[i], attr[i + 1])) { if (strcmp(attr[i], "width") == 0) { - p->image->width = nsvg__parseCoordinate(p, attr[i + 1], 0.0f, 1.0f); + p->image->width = nsvg__parseCoordinate(p, attr[i + 1], 0.0f, 0.0f); } else if (strcmp(attr[i], "height") == 0) { - p->image->height = nsvg__parseCoordinate(p, attr[i + 1], 0.0f, 1.0f); + p->image->height = nsvg__parseCoordinate(p, attr[i + 1], 0.0f, 0.0f); } else if (strcmp(attr[i], "viewBox") == 0) { - sscanf(attr[i + 1], "%f%*[%%, \t]%f%*[%%, \t]%f%*[%%, \t]%f", &p->viewMinx, &p->viewMiny, &p->viewWidth, &p->viewHeight); + const char *s = attr[i + 1]; + char buf[64]; + s = nsvg__parseNumber(s, buf, 64); + p->viewMinx = nsvg__atof(buf); + while (*s && (nsvg__isspace(*s) || *s == '%' || *s == ',')) s++; + if (!*s) return; + s = nsvg__parseNumber(s, buf, 64); + p->viewMiny = nsvg__atof(buf); + while (*s && (nsvg__isspace(*s) || *s == '%' || *s == ',')) s++; + if (!*s) return; + s = nsvg__parseNumber(s, buf, 64); + p->viewWidth = nsvg__atof(buf); + while (*s && (nsvg__isspace(*s) || *s == '%' || *s == ',')) s++; + if (!*s) return; + s = nsvg__parseNumber(s, buf, 64); + p->viewHeight = nsvg__atof(buf); } else if (strcmp(attr[i], "preserveAspectRatio") == 0) { if (strstr(attr[i + 1], "none") != 0) { // No uniform scaling @@ -2678,12 +2774,12 @@ static float nsvg__viewAlign(float content, float container, int type) static void nsvg__scaleGradient(NSVGgradient* grad, float tx, float ty, float sx, float sy) { - grad->xform[0] *= sx; - grad->xform[1] *= sx; - grad->xform[2] *= sy; - grad->xform[3] *= sy; - grad->xform[4] += tx*sx; - grad->xform[5] += ty*sx; + float t[6]; + nsvg__xformSetTranslation(t, tx, ty); + nsvg__xformMultiply (grad->xform, t); + + nsvg__xformSetScale(t, sx, sy); + nsvg__xformMultiply (grad->xform, t); } static void nsvg__scaleToViewbox(NSVGparser* p, const char* units) @@ -2823,13 +2919,43 @@ NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi) return image; -error: + error: if (fp) fclose(fp); if (data) free(data); if (image) nsvgDelete(image); return NULL; } +NSVGpath* nsvgDuplicatePath(NSVGpath* p) +{ + NSVGpath* res = NULL; + + if (p == NULL) + return NULL; + + res = (NSVGpath*)malloc(sizeof(NSVGpath)); + if (res == NULL) goto error; + memset(res, 0, sizeof(NSVGpath)); + + res->pts = (float*)malloc(p->npts*2*sizeof(float)); + if (res->pts == NULL) goto error; + memcpy(res->pts, p->pts, p->npts * sizeof(float) * 2); + res->npts = p->npts; + + memcpy(res->bounds, p->bounds, sizeof(p->bounds)); + + res->closed = p->closed; + + return res; + + error: + if (res != NULL) { + free(res->pts); + free(res); + } + return NULL; +} + void nsvgDelete(NSVGimage* image) { NSVGshape *snext, *shape; diff --git a/external/nanosvg/nanosvgrast.h b/external/nanosvg/nanosvgrast.h index 2ec6502888..a729a47be3 100644 --- a/external/nanosvg/nanosvgrast.h +++ b/external/nanosvg/nanosvgrast.h @@ -25,15 +25,19 @@ #ifndef NANOSVGRAST_H #define NANOSVGRAST_H +#ifndef NANOSVGRAST_CPLUSPLUS #ifdef __cplusplus extern "C" { #endif +#endif typedef struct NSVGrasterizer NSVGrasterizer; /* Example Usage: // Load SVG - struct SNVGImage* image = nsvgParseFromFile("test.svg."); + NSVGimage* image; + image = nsvgParseFromFile("test.svg", "px", 96); + // Create rasterizer (can be used to render multiple images). struct NSVGrasterizer* rast = nsvgCreateRasterizer(); // Allocate memory for image @@ -62,8 +66,10 @@ void nsvgRasterize(NSVGrasterizer* r, void nsvgDeleteRasterizer(NSVGrasterizer*); +#ifndef NANOSVGRAST_CPLUSPLUS #ifdef __cplusplus -}; +} +#endif #endif #endif // NANOSVGRAST_H @@ -153,7 +159,7 @@ NSVGrasterizer* nsvgCreateRasterizer() return r; -error: + error: nsvgDeleteRasterizer(r); return NULL; } @@ -238,7 +244,7 @@ static void nsvg__addPathPoint(NSVGrasterizer* r, float x, float y, int flags) if (r->npoints > 0) { pt = &r->points[r->npoints-1]; if (nsvg__ptEquals(pt->x,pt->y, x,y, r->distTol)) { - pt->flags |= flags; + pt->flags = (unsigned char)(pt->flags | flags); return; } } @@ -387,7 +393,7 @@ enum NSVGpointFlags { NSVG_PT_CORNER = 0x01, NSVG_PT_BEVEL = 0x02, - NSVG_PT_LEFT = 0x04, + NSVG_PT_LEFT = 0x04 }; static void nsvg__initClosed(NSVGpoint* left, NSVGpoint* right, NSVGpoint* p0, NSVGpoint* p1, float lineWidth) @@ -453,7 +459,7 @@ static void nsvg__roundCap(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right, float lx = 0, ly = 0, rx = 0, ry = 0, prevx = 0, prevy = 0; for (i = 0; i < ncap; i++) { - float a = i/(float)(ncap-1)*NSVG_PI; + float a = (float)i/(float)(ncap-1)*NSVG_PI; float ax = cosf(a) * w, ay = sinf(a) * w; float x = px - dlx*ax - dx*ay; float y = py - dly*ax - dy*ay; @@ -550,7 +556,7 @@ static void nsvg__roundJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right if (da < NSVG_PI) da += NSVG_PI*2; if (da > NSVG_PI) da -= NSVG_PI*2; - n = (int)ceilf((nsvg__absf(da) / NSVG_PI) * ncap); + n = (int)ceilf((nsvg__absf(da) / NSVG_PI) * (float)ncap); if (n < 2) n = 2; if (n > ncap) n = ncap; @@ -560,7 +566,7 @@ static void nsvg__roundJoin(NSVGrasterizer* r, NSVGpoint* left, NSVGpoint* right ry = right->y; for (i = 0; i < n; i++) { - float u = i/(float)(n-1); + float u = (float)i/(float)(n-1); float a = a0 + u*da; float ax = cosf(a) * w, ay = sinf(a) * w; float lx1 = p1->x - ax, ly1 = p1->y - ay; @@ -731,7 +737,7 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float int i, j, closed; NSVGpath* path; NSVGpoint* p0, *p1; - float miterLimit = 4; + float miterLimit = shape->miterLimit; int lineJoin = shape->strokeLineJoin; int lineCap = shape->strokeLineCap; float lineWidth = shape->strokeWidth * scale; @@ -770,7 +776,7 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float nsvg__duplicatePoints(r); r->npoints = 0; - cur = r->points2[0]; + cur = r->points2[0]; nsvg__appendPathPoint(r, cur); // Figure out dash offset. @@ -837,8 +843,8 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float static int nsvg__cmpEdge(const void *p, const void *q) { - NSVGedge* a = (NSVGedge*)p; - NSVGedge* b = (NSVGedge*)q; + const NSVGedge* a = (const NSVGedge*)p; + const NSVGedge* b = (const NSVGedge*)q; if (a->y0 < b->y0) return -1; if (a->y0 > b->y0) return 1; @@ -848,7 +854,7 @@ static int nsvg__cmpEdge(const void *p, const void *q) static NSVGactiveEdge* nsvg__addActive(NSVGrasterizer* r, NSVGedge* e, float startPoint) { - NSVGactiveEdge* z; + NSVGactiveEdge* z; if (r->freelist != NULL) { // Restore from freelist. @@ -891,20 +897,20 @@ static void nsvg__fillScanline(unsigned char* scanline, int len, int x0, int x1, if (i < len && j >= 0) { if (i == j) { // x0,x1 are the same pixel, so compute combined coverage - scanline[i] += (unsigned char)((x1 - x0) * maxWeight >> NSVG__FIXSHIFT); + scanline[i] = (unsigned char)(scanline[i] + ((x1 - x0) * maxWeight >> NSVG__FIXSHIFT)); } else { if (i >= 0) // add antialiasing for x0 - scanline[i] += (unsigned char)(((NSVG__FIX - (x0 & NSVG__FIXMASK)) * maxWeight) >> NSVG__FIXSHIFT); + scanline[i] = (unsigned char)(scanline[i] + (((NSVG__FIX - (x0 & NSVG__FIXMASK)) * maxWeight) >> NSVG__FIXSHIFT)); else i = -1; // clip if (j < len) // add antialiasing for x1 - scanline[j] += (unsigned char)(((x1 & NSVG__FIXMASK) * maxWeight) >> NSVG__FIXSHIFT); + scanline[j] = (unsigned char)(scanline[j] + (((x1 & NSVG__FIXMASK) * maxWeight) >> NSVG__FIXSHIFT)); else j = len; // clip for (++i; i < j; ++i) // fill pixels between x0 and x1 - scanline[i] += (unsigned char)maxWeight; + scanline[i] = (unsigned char)(scanline[i] + maxWeight); } } } @@ -975,7 +981,7 @@ static unsigned int nsvg__applyOpacity(unsigned int c, float u) static inline int nsvg__div255(int x) { - return ((x+1) * 257) >> 16; + return ((x+1) * 257) >> 16; } static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* cover, int x, int y, @@ -1020,8 +1026,8 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co int i, cr, cg, cb, ca; unsigned int c; - fx = (x - tx) / scale; - fy = (y - ty) / scale; + fx = ((float)x - tx) / scale; + fy = ((float)y - ty) / scale; dx = 1.0f / scale; for (i = 0; i < count; i++) { @@ -1065,8 +1071,8 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co int i, cr, cg, cb, ca; unsigned int c; - fx = (x - tx) / scale; - fy = (y - ty) / scale; + fx = ((float)x - tx) / scale; + fy = ((float)y - ty) / scale; dx = 1.0f / scale; for (i = 0; i < count; i++) { @@ -1120,7 +1126,7 @@ static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, fl xmax = 0; for (s = 0; s < NSVG__SUBSAMPLES; ++s) { // find center of pixel for this scanline - float scany = y*NSVG__SUBSAMPLES + s + 0.5f; + float scany = (float)(y*NSVG__SUBSAMPLES + s) + 0.5f; NSVGactiveEdge **step = &active; // update all active edges; @@ -1323,6 +1329,7 @@ static void dumpEdges(NSVGrasterizer* r, const char* name) if (r->nedges == 0) return; FILE* fp = fopen(name, "w"); if (fp == NULL) return; + xmin = xmax = r->edges[0].x0; ymin = ymax = r->edges[0].y0; for (i = 0; i < r->nedges; i++) { @@ -1336,16 +1343,20 @@ static void dumpEdges(NSVGrasterizer* r, const char* name) ymax = nsvg__maxf(ymax, e->y0); ymax = nsvg__maxf(ymax, e->y1); } + fprintf(fp, "", xmin, ymin, (xmax - xmin), (ymax - ymin)); + for (i = 0; i < r->nedges; i++) { e = &r->edges[i]; fprintf(fp ,"", e->x0,e->y0, e->x1,e->y1); } + for (i = 0; i < r->npoints; i++) { if (i+1 < r->npoints) fprintf(fp ,"", r->points[i].x, r->points[i].y, r->points[i+1].x, r->points[i+1].y); fprintf(fp ,"", r->points[i].x, r->points[i].y, r->points[i].flags == 0 ? "#f00" : "#0f0"); } + fprintf(fp, ""); fclose(fp); } From 2e6b632f502cba46452291a3e34a7d2298952a39 Mon Sep 17 00:00:00 2001 From: 5schatten Date: Thu, 29 Aug 2019 14:11:09 +0200 Subject: [PATCH 379/603] CMakeList.txt: added option to conditionally enable libCEC --- CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9542da48cf..a167a808fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 2.8) option(GLES "Set to ON if targeting Embedded OpenGL" ${GLES}) option(GL "Set to ON if targeting Desktop OpenGL" ${GL}) option(RPI "Set to ON to enable the Raspberry PI video player (omxplayer)" ${RPI}) +option(CEC "Set to ON to enable CEC" ${CEC}) project(emulationstation-all) @@ -59,7 +60,11 @@ find_package(SDL2 REQUIRED) find_package(CURL REQUIRED) find_package(VLC REQUIRED) find_package(RapidJSON REQUIRED) -find_package(libCEC) + +#add libCEC support +if(CEC) + find_package(libCEC REQUIRED) +endif() #add ALSA for Linux if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") From fc58af98fde698fbaef1949e0467e67636368713 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Wed, 3 Jul 2019 21:10:17 -0400 Subject: [PATCH 380/603] support for color gradients in drawRect and ImageComponent --- es-app/src/SystemScreenSaver.cpp | 8 +-- es-app/src/components/AsyncReqComponent.cpp | 2 +- .../src/components/ScraperSearchComponent.cpp | 4 +- es-app/src/components/TextListComponent.h | 17 +++++- es-app/src/views/SystemView.cpp | 14 ++++- es-app/src/views/SystemView.h | 2 + es-app/src/views/ViewController.cpp | 3 +- es-core/src/ThemeData.cpp | 6 +++ es-core/src/Window.cpp | 2 +- es-core/src/components/ComponentList.cpp | 12 ++--- .../src/components/DateTimeEditComponent.cpp | 2 +- es-core/src/components/ImageComponent.cpp | 53 +++++++++++++++---- es-core/src/components/ImageComponent.h | 4 ++ es-core/src/components/SliderComponent.cpp | 2 +- es-core/src/components/TextComponent.cpp | 10 ++-- es-core/src/components/TextEditComponent.cpp | 2 +- es-core/src/renderers/Renderer.cpp | 15 +++--- es-core/src/renderers/Renderer.h | 4 +- 18 files changed, 116 insertions(+), 46 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index c5bcdf300b..0543cfed1a 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -209,7 +209,7 @@ void SystemScreenSaver::renderScreenSaver() { // Render black background Renderer::setMatrix(Transform4x4f::Identity()); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), (unsigned char)(255)); + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF, 0x000000FF); // Only render the video if the state requires it if ((int)mState >= STATE_FADE_IN_VIDEO) @@ -222,7 +222,7 @@ void SystemScreenSaver::renderScreenSaver() { // Render black background Renderer::setMatrix(Transform4x4f::Identity()); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), (unsigned char)(255)); + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF, 0x000000FF); // Only render the video if the state requires it if ((int)mState >= STATE_FADE_IN_VIDEO) @@ -248,8 +248,8 @@ void SystemScreenSaver::renderScreenSaver() else if (mState != STATE_INACTIVE) { Renderer::setMatrix(Transform4x4f::Identity()); - unsigned char opacity = screensaver_behavior == "dim" ? 0xA0 : 0xFF; - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | opacity); + unsigned char color = screensaver_behavior == "dim" ? 0x000000A0 : 0x000000FF; + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), color, color); } } diff --git a/es-app/src/components/AsyncReqComponent.cpp b/es-app/src/components/AsyncReqComponent.cpp index 6c811dcf85..e08b27f3cf 100644 --- a/es-app/src/components/AsyncReqComponent.cpp +++ b/es-app/src/components/AsyncReqComponent.cpp @@ -42,7 +42,7 @@ void AsyncReqComponent::render(const Transform4x4f& /*parentTrans*/) Renderer::setMatrix(trans); Vector3f point(Math::cosf(mTime * 0.01f) * 12, Math::sinf(mTime * 0.01f) * 12, 0); - Renderer::drawRect((int)point.x(), (int)point.y(), 8, 8, 0x0000FFFF); + Renderer::drawRect((int)point.x(), (int)point.y(), 8, 8, 0x0000FFFF, 0x0000FFFF); } std::vector AsyncReqComponent::getHelpPrompts() diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index bc28d3b264..33f942dee8 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -359,9 +359,9 @@ void ScraperSearchComponent::render(const Transform4x4f& parentTrans) if(mBlockAccept) { Renderer::setMatrix(trans); - Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), 0x00000011); + Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), 0x00000011, 0x00000011); //Renderer::drawRect((int)mResultList->getPosition().x(), (int)mResultList->getPosition().y(), - // (int)mResultList->getSize().x(), (int)mResultList->getSize().y(), 0x00000011); + // (int)mResultList->getSize().x(), (int)mResultList->getSize().y(), 0x0000011, 0x00000011); mBusyAnim.render(trans); } diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 5e4c26b8e0..44fcb3924f 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -73,6 +73,8 @@ class TextListComponent : public IList inline void setSelectorHeight(float selectorScale) { mSelectorHeight = selectorScale; } inline void setSelectorOffsetY(float selectorOffsetY) { mSelectorOffsetY = selectorOffsetY; } inline void setSelectorColor(unsigned int color) { mSelectorColor = color; } + inline void setSelectorColorEnd(unsigned int color) { mSelectorColorEnd = color; } + inline void setSelectorColorGradientHorizontal(bool horizontal) { mSelectorColorGradientHorizontal = horizontal; } inline void setSelectedColor(unsigned int color) { mSelectedColor = color; } inline void setColor(unsigned int id, unsigned int color) { mColors[id] = color; } inline void setLineSpacing(float lineSpacing) { mLineSpacing = lineSpacing; } @@ -97,6 +99,8 @@ class TextListComponent : public IList float mSelectorHeight; float mSelectorOffsetY; unsigned int mSelectorColor; + unsigned int mSelectorColorEnd; + bool mSelectorColorGradientHorizontal = true; unsigned int mSelectedColor; std::string mScrollSound; static const unsigned int COLOR_ID_COUNT = 2; @@ -122,6 +126,8 @@ TextListComponent::TextListComponent(Window* window) : mSelectorHeight = mFont->getSize() * 1.5f; mSelectorOffsetY = 0; mSelectorColor = 0x000000FF; + mSelectorColorEnd = 0x000000FF; + mSelectorColorGradientHorizontal = true; mSelectedColor = 0; mColors[0] = 0x0000FFFF; mColors[1] = 0x00FF00FF; @@ -167,7 +173,8 @@ void TextListComponent::render(const Transform4x4f& parentTrans) mSelectorImage.render(trans); } else { Renderer::setMatrix(trans); - Renderer::drawRect(0.f, (mCursor - startEntry)*entrySize + mSelectorOffsetY, mSize.x(), mSelectorHeight, mSelectorColor); + Renderer::drawRect(0.f, (mCursor - startEntry)*entrySize + mSelectorOffsetY, mSize.x(), + mSelectorHeight, mSelectorColor, mSelectorColorEnd, mSelectorColorGradientHorizontal); } } @@ -363,7 +370,14 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c if(properties & COLOR) { if(elem->has("selectorColor")) + { setSelectorColor(elem->get("selectorColor")); + setSelectorColorEnd(elem->get("selectorColor")); + } + if (elem->has("selectorColorEnd")) + setSelectorColorEnd(elem->get("selectorColorEnd")); + if (elem->has("selectorGradientType")) + setSelectorColorGradientHorizontal(!(elem->get("selectorGradientType").compare("horizontal"))); if(elem->has("selectedColor")) setSelectedColor(elem->get("selectedColor")); if(elem->has("primaryColor")) @@ -426,6 +440,7 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, c mSelectorImage.setImage(path, tile); mSelectorImage.setSize(mSize.x(), mSelectorHeight); mSelectorImage.setColorShift(mSelectorColor); + mSelectorImage.setColorShiftEnd(mSelectorColorEnd); } else { mSelectorImage.setImage(""); } diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index b3e48911a5..e0a096ee91 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -434,7 +434,7 @@ void SystemView::renderCarousel(const Transform4x4f& trans) Renderer::pushClipRect(Vector2i((int)clipPos.x(), (int)clipPos.y()), Vector2i((int)mCarousel.size.x(), (int)mCarousel.size.y())); Renderer::setMatrix(carouselTrans); - Renderer::drawRect(0.0, 0.0, mCarousel.size.x(), mCarousel.size.y(), mCarousel.color); + Renderer::drawRect(0.0, 0.0, mCarousel.size.x(), mCarousel.size.y(), mCarousel.color, mCarousel.colorEnd, mCarousel.colorGradientHorizontal); // draw logos Vector2f logoSpacing(0.0, 0.0); // NB: logoSpacing will include the size of the logo itself as well! @@ -584,8 +584,9 @@ void SystemView::renderFade(const Transform4x4f& trans) // fade extras if necessary if (mExtrasFadeOpacity) { + unsigned int fadeColor = 0x00000000 | (unsigned char)(mExtrasFadeOpacity * 255); Renderer::setMatrix(trans); - Renderer::drawRect(0.0f, 0.0f, mSize.x(), mSize.y(), 0x00000000 | (unsigned char)(mExtrasFadeOpacity * 255)); + Renderer::drawRect(0.0f, 0.0f, mSize.x(), mSize.y(), fadeColor, fadeColor); } } @@ -602,6 +603,8 @@ void SystemView::getDefaultElements(void) mCarousel.origin.x() = 0.0f; mCarousel.origin.y() = 0.0f; mCarousel.color = 0xFFFFFFD8; + mCarousel.colorEnd = 0xFFFFFFD8; + mCarousel.colorGradientHorizontal = true; mCarousel.logoScale = 1.2f; mCarousel.logoRotation = 7.5; mCarousel.logoRotationOrigin.x() = -5; @@ -642,7 +645,14 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) if (elem->has("origin")) mCarousel.origin = elem->get("origin"); if (elem->has("color")) + { mCarousel.color = elem->get("color"); + mCarousel.colorEnd = mCarousel.color; + } + if (elem->has("colorEnd")) + mCarousel.colorEnd = elem->get("colorEnd"); + if (elem->has("gradientType")) + mCarousel.colorGradientHorizontal = !(elem->get("gradientType").compare("horizontal")); if (elem->has("logoScale")) mCarousel.logoScale = elem->get("logoScale"); if (elem->has("logoSize")) diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index db1205424a..85b0aca44f 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -36,6 +36,8 @@ struct SystemViewCarousel Vector2f logoRotationOrigin; Alignment logoAlignment; unsigned int color; + unsigned int colorEnd; + bool colorGradientHorizontal; int maxLogoCount; // number of logos shown on the carousel Vector2f logoSize; float zIndex; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index ada681e260..95ecbd8618 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -422,8 +422,9 @@ void ViewController::render(const Transform4x4f& parentTrans) // fade out if(mFadeOpacity) { + unsigned int fadeColor = 0x00000000 | (unsigned char)(mFadeOpacity * 255); Renderer::setMatrix(parentTrans); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x00000000 | (unsigned char)(mFadeOpacity * 255)); + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), fadeColor, fadeColor); } } diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 1d4f7628cd..32faf12bb5 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -24,6 +24,8 @@ std::map> The { "default", PATH }, { "tile", BOOLEAN }, { "color", COLOR }, + { "colorEnd", COLOR }, + { "gradientType", STRING }, { "visible", BOOLEAN }, { "zIndex", FLOAT } } }, { "imagegrid", { @@ -66,6 +68,8 @@ std::map> The { "selectorHeight", FLOAT }, { "selectorOffsetY", FLOAT }, { "selectorColor", COLOR }, + { "selectorColorEnd", COLOR }, + { "selectorGradientType", STRING }, { "selectorImagePath", PATH }, { "selectorImageTile", BOOLEAN }, { "selectedColor", COLOR }, @@ -148,6 +152,8 @@ std::map> The { "pos", NORMALIZED_PAIR }, { "origin", NORMALIZED_PAIR }, { "color", COLOR }, + { "colorEnd", COLOR }, + { "gradientType", STRING }, { "logoScale", FLOAT }, { "logoRotation", FLOAT }, { "logoRotationOrigin", NORMALIZED_PAIR }, diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 0a510a5c1a..35975c4456 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -301,7 +301,7 @@ void Window::renderLoadingScreen(std::string text) { Transform4x4f trans = Transform4x4f::Identity(); Renderer::setMatrix(trans); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF); + Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF, 0x000000FF); ImageComponent splash(this, true); splash.setResize(Renderer::getScreenWidth() * 0.6f, 0.0f); diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 74b6dfde62..c21c8308ac 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -202,12 +202,12 @@ void ComponentList::render(const Transform4x4f& parentTrans) // (1 - dst) + 0x77 const float selectedRowHeight = getRowHeight(mEntries.at(mCursor).data); - Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0xFFFFFFFF, Renderer::Blend::ONE_MINUS_DST_COLOR, Renderer::Blend::ZERO); - Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0x777777FF, Renderer::Blend::ONE, Renderer::Blend::ONE); + Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0xFFFFFFFF, 0xFFFFFFFF, false, Renderer::Blend::ONE_MINUS_DST_COLOR, Renderer::Blend::ZERO); + Renderer::drawRect(0.0f, mSelectorBarOffset, mSize.x(), selectedRowHeight, 0x777777FF, 0x777777FF, false, Renderer::Blend::ONE, Renderer::Blend::ONE); // hack to draw 2px dark on left/right of the bar - Renderer::drawRect(0.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF); - Renderer::drawRect(mSize.x() - 2.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF); + Renderer::drawRect(0.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF, 0x878787FF); + Renderer::drawRect(mSize.x() - 2.0f, mSelectorBarOffset, 2.0f, selectedRowHeight, 0x878787FF, 0x878787FF); for(auto it = drawAfterCursor.cbegin(); it != drawAfterCursor.cend(); it++) (*it)->render(trans); @@ -221,10 +221,10 @@ void ComponentList::render(const Transform4x4f& parentTrans) float y = 0; for(unsigned int i = 0; i < mEntries.size(); i++) { - Renderer::drawRect(0.0f, y, mSize.x(), 1.0f, 0xC6C7C6FF); + Renderer::drawRect(0.0f, y, mSize.x(), 1.0f, 0xC6C7C6FF, 0xC6C7C6FF); y += getRowHeight(mEntries.at(i).data); } - Renderer::drawRect(0.0f, y, mSize.x(), 1.0f, 0xC6C7C6FF); + Renderer::drawRect(0.0f, y, mSize.x(), 1.0f, 0xC6C7C6FF, 0xC6C7C6FF); Renderer::popClipRect(); } diff --git a/es-core/src/components/DateTimeEditComponent.cpp b/es-core/src/components/DateTimeEditComponent.cpp index fef38aa478..20440edc95 100644 --- a/es-core/src/components/DateTimeEditComponent.cpp +++ b/es-core/src/components/DateTimeEditComponent.cpp @@ -160,7 +160,7 @@ void DateTimeEditComponent::render(const Transform4x4f& parentTrans) if(mEditIndex >= 0 && (unsigned int)mEditIndex < mCursorBoxes.size()) { Renderer::drawRect((int)mCursorBoxes[mEditIndex][0], (int)mCursorBoxes[mEditIndex][1], - (int)mCursorBoxes[mEditIndex][2], (int)mCursorBoxes[mEditIndex][3], 0x00000022); + (int)mCursorBoxes[mEditIndex][2], (int)mCursorBoxes[mEditIndex][3], 0x00000022, 0x00000022); } } } diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index ced05a0cb8..8f78aaac54 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -20,8 +20,8 @@ Vector2f ImageComponent::getSize() const ImageComponent::ImageComponent(Window* window, bool forceLoad, bool dynamic) : GuiComponent(window), mTargetIsMax(false), mTargetIsMin(false), mFlipX(false), mFlipY(false), mTargetSize(0, 0), mColorShift(0xFFFFFFFF), - mForceLoad(forceLoad), mDynamic(dynamic), mFadeOpacity(0), mFading(false), mRotateByTargetSize(false), - mTopLeftCrop(0.0f, 0.0f), mBottomRightCrop(1.0f, 1.0f) + mColorShiftEnd(0xFFFFFFFF), mColorGradientHorizontal(true), mForceLoad(forceLoad), mDynamic(dynamic), + mFadeOpacity(0), mFading(false), mRotateByTargetSize(false), mTopLeftCrop(0.0f, 0.0f), mBottomRightCrop(1.0f, 1.0f) { updateColors(); } @@ -253,6 +253,21 @@ void ImageComponent::setColorShift(unsigned int color) updateColors(); } +void ImageComponent::setColorShiftEnd(unsigned int color) +{ + mColorShiftEnd = color; + // Grab the opacity from the color shift because we may need to apply it if + // fading textures in + mOpacity = color & 0xff; + updateColors(); +} + +void ImageComponent::setColorGradientHorizontal(bool horizontal) +{ + mColorGradientHorizontal = horizontal; + updateColors(); +} + void ImageComponent::setOpacity(unsigned char opacity) { mOpacity = opacity; @@ -273,10 +288,11 @@ void ImageComponent::updateVertices() const float px = mTexture->isTiled() ? mSize.x() / getTextureSize().x() : 1.0f; const float py = mTexture->isTiled() ? mSize.y() / getTextureSize().y() : 1.0f; const unsigned int color = Renderer::convertColor(mColorShift); + const unsigned int colorEnd = Renderer::convertColor(mColorShiftEnd); mVertices[0] = { { topLeft.x(), topLeft.y() }, { mTopLeftCrop.x(), py - mTopLeftCrop.y() }, color }; - mVertices[1] = { { topLeft.x(), bottomRight.y() }, { mTopLeftCrop.x(), 1.0f - mBottomRightCrop.y() }, color }; - mVertices[2] = { { bottomRight.x(), topLeft.y() }, { mBottomRightCrop.x() * px, py - mTopLeftCrop.y() }, color }; + mVertices[1] = { { topLeft.x(), bottomRight.y() }, { mTopLeftCrop.x(), 1.0f - mBottomRightCrop.y() }, mColorGradientHorizontal ? colorEnd : color }; + mVertices[2] = { { bottomRight.x(), topLeft.y() }, { mBottomRightCrop.x() * px, py - mTopLeftCrop.y() }, mColorGradientHorizontal ? color : colorEnd }; mVertices[3] = { { bottomRight.x(), bottomRight.y() }, { mBottomRightCrop.x() * px, 1.0f - mBottomRightCrop.y() }, color }; if(mFlipX) @@ -293,10 +309,13 @@ void ImageComponent::updateVertices() void ImageComponent::updateColors() { - const unsigned int color = Renderer::convertColor(mColorShift); + const unsigned int color = Renderer::convertColor(mColorShift); + const unsigned int colorEnd = Renderer::convertColor(mColorShiftEnd); - for(int i = 0; i < 4; ++i) - mVertices[i].col = color; + mVertices[0].col = color; + mVertices[1].col = mColorGradientHorizontal ? colorEnd : color; + mVertices[2].col = mColorGradientHorizontal ? color : colorEnd; + mVertices[3].col = colorEnd; } void ImageComponent::render(const Transform4x4f& parentTrans) @@ -311,8 +330,8 @@ void ImageComponent::render(const Transform4x4f& parentTrans) { if(Settings::getInstance()->getBool("DebugImage")) { Vector2f targetSizePos = (mTargetSize - mSize) * mOrigin * -1; - Renderer::drawRect(targetSizePos.x(), targetSizePos.y(), mTargetSize.x(), mTargetSize.y(), 0xFF000033); - Renderer::drawRect(0.0f, 0.0f, mSize.x(), mSize.y(), 0x00000033); + Renderer::drawRect(targetSizePos.x(), targetSizePos.y(), mTargetSize.x(), mTargetSize.y(), 0xFF000033, 0xFF000033); + Renderer::drawRect(0.0f, 0.0f, mSize.x(), mSize.y(), 0x00000033, 0x00000033); } if(mTexture->isInitialized()) { @@ -420,8 +439,20 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s setImage(elem->get("path"), tile); } - if(properties & COLOR && elem->has("color")) - setColorShift(elem->get("color")); + if(properties & COLOR) + { + if(elem->has("color")) + { + setColorShift(elem->get("color")); + setColorShiftEnd(elem->get("color")); + } + + if (elem->has("colorEnd")) + setColorShiftEnd(elem->get("colorEnd")); + + if (elem->has("gradientType")) + setColorGradientHorizontal(!(elem->get("gradientType").compare("horizontal"))); + } if(properties & ThemeFlags::ROTATION) { if(elem->has("rotation")) diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 9d3121c514..6d19454568 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -55,6 +55,8 @@ class ImageComponent : public GuiComponent // Multiply all pixels in the image by this color when rendering. void setColorShift(unsigned int color); + void setColorShiftEnd(unsigned int color); + void setColorGradientHorizontal(bool horizontal); void setFlipX(bool flip); // Mirror on the X axis. void setFlipY(bool flip); // Mirror on the Y axis. @@ -89,6 +91,8 @@ class ImageComponent : public GuiComponent void fadeIn(bool textureLoaded); unsigned int mColorShift; + unsigned int mColorShiftEnd; + bool mColorGradientHorizontal; std::string mDefaultPath; diff --git a/es-core/src/components/SliderComponent.cpp b/es-core/src/components/SliderComponent.cpp index bc4fa8d91c..d027ee40c7 100644 --- a/es-core/src/components/SliderComponent.cpp +++ b/es-core/src/components/SliderComponent.cpp @@ -72,7 +72,7 @@ void SliderComponent::render(const Transform4x4f& parentTrans) //render line const float lineWidth = 2; - Renderer::drawRect(mKnob.getSize().x() / 2, mSize.y() / 2 - lineWidth / 2, width, lineWidth, 0x777777FF); + Renderer::drawRect(mKnob.getSize().x() / 2, mSize.y() / 2 - lineWidth / 2, width, lineWidth, 0x777777FF, 0x777777FF); //render knob mKnob.render(trans); diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index 057e9c1e1d..ba5c03f68b 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -102,7 +102,7 @@ void TextComponent::render(const Transform4x4f& parentTrans) if (mRenderBackground) { Renderer::setMatrix(trans); - Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), mBgColor); + Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), mBgColor, mBgColor); } if(mTextCache) @@ -127,7 +127,7 @@ void TextComponent::render(const Transform4x4f& parentTrans) { // draw the "textbox" area, what we are aligned within Renderer::setMatrix(trans); - Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), 0xFF000033); + Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), 0xFF000033, 0xFF000033); } trans.translate(off); @@ -140,13 +140,13 @@ void TextComponent::render(const Transform4x4f& parentTrans) switch(mHorizontalAlignment) { case ALIGN_LEFT: - Renderer::drawRect(0.0f, 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033); + Renderer::drawRect(0.0f, 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033, 0x00000033); break; case ALIGN_CENTER: - Renderer::drawRect((mSize.x() - mTextCache->metrics.size.x()) / 2.0f, 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033); + Renderer::drawRect((mSize.x() - mTextCache->metrics.size.x()) / 2.0f, 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033, 0x00000033); break; case ALIGN_RIGHT: - Renderer::drawRect(mSize.x() - mTextCache->metrics.size.x(), 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033); + Renderer::drawRect(mSize.x() - mTextCache->metrics.size.x(), 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033, 0x00000033); break; } } diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index d30c293c81..dcd9b4647b 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -279,7 +279,7 @@ void TextEditComponent::render(const Transform4x4f& parentTrans) } float cursorHeight = mFont->getHeight() * 0.8f; - Renderer::drawRect(cursorPos.x(), cursorPos.y() + (mFont->getHeight() - cursorHeight) / 2, 2.0f, cursorHeight, 0x000000FF); + Renderer::drawRect(cursorPos.x(), cursorPos.y() + (mFont->getHeight() - cursorHeight) / 2, 2.0f, cursorHeight, 0x000000FF, 0x000000FF); } } diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index 65b5fedf9d..42c0fe698c 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -236,21 +236,22 @@ namespace Renderer } // popClipRect - void drawRect(const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + void drawRect(const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const unsigned int _colorEnd, bool horizontalGradient, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { - drawRect((int)Math::round(_x), (int)Math::round(_y), (int)Math::round(_w), (int)Math::round(_h), _color, _srcBlendFactor, _dstBlendFactor); + drawRect((int)Math::round(_x), (int)Math::round(_y), (int)Math::round(_w), (int)Math::round(_h), _color, _colorEnd, horizontalGradient, _srcBlendFactor, _dstBlendFactor); } // drawRect - void drawRect(const int _x, const int _y, const int _w, const int _h, const unsigned int _color, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + void drawRect(const int _x, const int _y, const int _w, const int _h, const unsigned int _color, const unsigned int _colorEnd, bool horizontalGradient, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { - const unsigned int color = convertColor(_color); + const unsigned int color = convertColor(_color); + const unsigned int colorEnd = convertColor(_colorEnd); Vertex vertices[4]; vertices[0] = { { (float)(_x ), (float)(_y ) }, { 0.0f, 0.0f }, color }; - vertices[1] = { { (float)(_x ), (float)(_y + _h) }, { 0.0f, 0.0f }, color }; - vertices[2] = { { (float)(_x + _w), (float)(_y ) }, { 0.0f, 0.0f }, color }; - vertices[3] = { { (float)(_x + _w), (float)(_y + _h) }, { 0.0f, 0.0f }, color }; + vertices[1] = { { (float)(_x ), (float)(_y + _h) }, { 0.0f, 0.0f }, horizontalGradient ? colorEnd : color }; + vertices[2] = { { (float)(_x + _w), (float)(_y ) }, { 0.0f, 0.0f }, horizontalGradient ? color : colorEnd }; + vertices[3] = { { (float)(_x + _w), (float)(_y + _h) }, { 0.0f, 0.0f }, colorEnd }; bindTexture(0); drawTriangleStrips(vertices, 4, _srcBlendFactor, _dstBlendFactor); diff --git a/es-core/src/renderers/Renderer.h b/es-core/src/renderers/Renderer.h index f542385757..4fcaa1a9bb 100644 --- a/es-core/src/renderers/Renderer.h +++ b/es-core/src/renderers/Renderer.h @@ -66,8 +66,8 @@ namespace Renderer void deinit (); void pushClipRect (const Vector2i& _pos, const Vector2i& _size); void popClipRect (); - void drawRect (const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); - void drawRect (const int _x, const int _y, const int _w, const int _h, const unsigned int _color, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); + void drawRect (const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const unsigned int _colorEnd, bool horizontalGradient = false, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); + void drawRect (const int _x, const int _y, const int _w, const int _h, const unsigned int _color, const unsigned int _colorEnd, bool horizontalGradient = false, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); SDL_Window* getSDLWindow (); int getWindowWidth (); From 7ac6ffcdbef8d69d4098caec80acc15413c37665 Mon Sep 17 00:00:00 2001 From: Conn O'Griofa Date: Fri, 26 Jul 2019 20:30:44 +0100 Subject: [PATCH 381/603] filterTrigger: filter negative trigger axis event after positive axis detection If filterTrigger detects a positive axis event on a common trigger axis while also configuring a trigger, the next input event will be a negative axis press (as the trigger needs to transition from >0 to rest at -32767). Filter this negative event or else the next item in the configuration dialog (typically "left thumb") will erroneously detect this as a separate event. --- es-core/src/guis/GuiInputConfig.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index ff86224289..c3d72f9c3c 100755 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -352,16 +352,28 @@ bool GuiInputConfig::filterTrigger(Input input, InputConfig* config, int inputId ) && InputManager::getInstance()->getAxisCountByDevice(config->getDeviceId()) == 6) { // digital triggers are unwanted - if (input.type == TYPE_BUTTON && (input.id == 6 || input.id == 7)) + if(input.type == TYPE_BUTTON && (input.id == 6 || input.id == 7)) + { + mHoldingInput = false; return true; + } } // ignore negative pole for axes 2/5 only when triggers are being configured - if((mSkipAxis || strstr(GUI_INPUT_CONFIG_LIST[inputId].name, "Trigger") != NULL) \ - && input.type == TYPE_AXIS && (input.id == 2 || input.id == 5) && input.value < 0) + if(input.type == TYPE_AXIS && (input.id == 2 || input.id == 5)) { - mSkipAxis = true; - return true; + if(strstr(GUI_INPUT_CONFIG_LIST[inputId].name, "Trigger") != NULL) + { + if(input.value == 1) + mSkipAxis = true; + else if(input.value == -1) + return true; + } + else if(mSkipAxis) + { + mSkipAxis = false; + return true; + } } #else (void)input; From 3b07bfeb932bfeaa6020e44db6a05f71a9afe3d3 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Fri, 30 Aug 2019 21:57:32 -0400 Subject: [PATCH 382/603] cleanup duplicate theme code in Image/Video components --- es-core/src/components/ImageComponent.cpp | 34 ++------------------- es-core/src/components/VideoComponent.cpp | 37 +++++------------------ es-core/src/components/VideoComponent.h | 1 + 3 files changed, 11 insertions(+), 61 deletions(-) diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 8f78aaac54..6ffeb07474 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -401,20 +401,14 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s { using namespace ThemeFlags; + GuiComponent::applyTheme(theme, view, element, (properties ^ SIZE) | ((properties & (SIZE | POSITION)) ? ORIGIN : 0)); + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "image"); if(!elem) - { return; - } Vector2f scale = getParent() ? getParent()->getSize() : Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - if(properties & POSITION && elem->has("pos")) - { - Vector2f denormalized = elem->get("pos") * scale; - setPosition(Vector3f(denormalized.x(), denormalized.y(), 0)); - } - if(properties & ThemeFlags::SIZE) { if(elem->has("size")) @@ -425,13 +419,8 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s setMinSize(elem->get("minSize") * scale); } - // position + size also implies origin - if((properties & ORIGIN || (properties & POSITION && properties & ThemeFlags::SIZE)) && elem->has("origin")) - setOrigin(elem->get("origin")); - - if(elem->has("default")) { + if(elem->has("default")) setDefaultImage(elem->get("default")); - } if(properties & PATH && elem->has("path")) { @@ -453,23 +442,6 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s if (elem->has("gradientType")) setColorGradientHorizontal(!(elem->get("gradientType").compare("horizontal"))); } - - if(properties & ThemeFlags::ROTATION) { - if(elem->has("rotation")) - setRotationDegrees(elem->get("rotation")); - if(elem->has("rotationOrigin")) - setRotationOrigin(elem->get("rotationOrigin")); - } - - if(properties & ThemeFlags::Z_INDEX && elem->has("zIndex")) - setZIndex(elem->get("zIndex")); - else - setZIndex(getDefaultZIndex()); - - if(properties & ThemeFlags::VISIBLE && elem->has("visible")) - setVisible(elem->get("visible")); - else - setVisible(true); } std::vector ImageComponent::getHelpPrompts() diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 0bd73c9c00..af3f4d168d 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -90,6 +90,11 @@ void VideoComponent::onOriginChanged() // Update the embeded static image mStaticImage.setOrigin(mOrigin); } +void VideoComponent::onPositionChanged() +{ + // Update the embeded static image + mStaticImage.setPosition(mPosition); +} void VideoComponent::onSizeChanged() { @@ -175,21 +180,14 @@ void VideoComponent::applyTheme(const std::shared_ptr& theme, const s { using namespace ThemeFlags; + GuiComponent::applyTheme(theme, view, element, (properties ^ SIZE) | ((properties & (SIZE | POSITION)) ? ORIGIN : 0)); + const ThemeData::ThemeElement* elem = theme->getElement(view, element, "video"); if(!elem) - { return; - } Vector2f scale = getParent() ? getParent()->getSize() : Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - if ((properties & POSITION) && elem->has("pos")) - { - Vector2f denormalized = elem->get("pos") * scale; - setPosition(Vector3f(denormalized.x(), denormalized.y(), 0)); - mStaticImage.setPosition(Vector3f(denormalized.x(), denormalized.y(), 0)); - } - if(properties & ThemeFlags::SIZE) { if(elem->has("size")) @@ -198,10 +196,6 @@ void VideoComponent::applyTheme(const std::shared_ptr& theme, const s setMaxSize(elem->get("maxSize") * scale); } - // position + size also implies origin - if (((properties & ORIGIN) || ((properties & POSITION) && (properties & ThemeFlags::SIZE))) && elem->has("origin")) - setOrigin(elem->get("origin")); - if(elem->has("default")) mConfig.defaultVideoPath = elem->get("default"); @@ -213,23 +207,6 @@ void VideoComponent::applyTheme(const std::shared_ptr& theme, const s if (elem->has("showSnapshotDelay")) mConfig.showSnapshotDelay = elem->get("showSnapshotDelay"); - - if(properties & ThemeFlags::ROTATION) { - if(elem->has("rotation")) - setRotationDegrees(elem->get("rotation")); - if(elem->has("rotationOrigin")) - setRotationOrigin(elem->get("rotationOrigin")); - } - - if(properties & ThemeFlags::Z_INDEX && elem->has("zIndex")) - setZIndex(elem->get("zIndex")); - else - setZIndex(getDefaultZIndex()); - - if(properties & ThemeFlags::VISIBLE && elem->has("visible")) - setVisible(elem->get("visible")); - else - setVisible(true); } std::vector VideoComponent::getHelpPrompts() diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index 8d8207b1c7..8513129f95 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -45,6 +45,7 @@ class VideoComponent : public GuiComponent virtual void topWindow(bool isTop) override; void onOriginChanged() override; + void onPositionChanged() override; void onSizeChanged() override; void setOpacity(unsigned char opacity) override; From 489d7de096be4406ea19726c877de804e80a42c6 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 31 Aug 2019 17:58:36 +0200 Subject: [PATCH 383/603] Eliminate drawRect that takes int's and make sure everything uses the float version properly, this way everything is rounded the same way Only round the transforms when setting them on the GPU, to make sure everything is rounded the same, but only at the final moment --- es-app/src/SystemScreenSaver.cpp | 6 +++--- es-app/src/components/AsyncReqComponent.cpp | 2 +- es-app/src/components/RatingComponent.cpp | 1 - .../src/components/ScraperSearchComponent.cpp | 4 +--- es-app/src/components/TextListComponent.h | 2 +- es-app/src/views/SystemView.cpp | 2 +- es-app/src/views/ViewController.cpp | 2 +- es-core/src/Window.cpp | 2 +- es-core/src/components/ButtonComponent.cpp | 2 -- es-core/src/components/ComponentList.cpp | 1 - .../src/components/DateTimeEditComponent.cpp | 5 ++--- es-core/src/components/NinePatchComponent.cpp | 1 - es-core/src/components/SliderComponent.cpp | 1 - es-core/src/components/TextComponent.cpp | 5 ++--- es-core/src/components/TextEditComponent.cpp | 2 -- es-core/src/renderers/Renderer.cpp | 18 ++++++++---------- es-core/src/renderers/Renderer.h | 1 - es-core/src/renderers/Renderer_GL21.cpp | 5 ++++- es-core/src/renderers/Renderer_GLES10.cpp | 4 +++- 19 files changed, 28 insertions(+), 38 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 0543cfed1a..942a8a7426 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -209,7 +209,7 @@ void SystemScreenSaver::renderScreenSaver() { // Render black background Renderer::setMatrix(Transform4x4f::Identity()); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF, 0x000000FF); + Renderer::drawRect(0.0f, 0.0f, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF, 0x000000FF); // Only render the video if the state requires it if ((int)mState >= STATE_FADE_IN_VIDEO) @@ -222,7 +222,7 @@ void SystemScreenSaver::renderScreenSaver() { // Render black background Renderer::setMatrix(Transform4x4f::Identity()); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF, 0x000000FF); + Renderer::drawRect(0.0f, 0.0f, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF, 0x000000FF); // Only render the video if the state requires it if ((int)mState >= STATE_FADE_IN_VIDEO) @@ -249,7 +249,7 @@ void SystemScreenSaver::renderScreenSaver() { Renderer::setMatrix(Transform4x4f::Identity()); unsigned char color = screensaver_behavior == "dim" ? 0x000000A0 : 0x000000FF; - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), color, color); + Renderer::drawRect(0.0f, 0.0f, Renderer::getScreenWidth(), Renderer::getScreenHeight(), color, color); } } diff --git a/es-app/src/components/AsyncReqComponent.cpp b/es-app/src/components/AsyncReqComponent.cpp index e08b27f3cf..7693ae6b4f 100644 --- a/es-app/src/components/AsyncReqComponent.cpp +++ b/es-app/src/components/AsyncReqComponent.cpp @@ -42,7 +42,7 @@ void AsyncReqComponent::render(const Transform4x4f& /*parentTrans*/) Renderer::setMatrix(trans); Vector3f point(Math::cosf(mTime * 0.01f) * 12, Math::sinf(mTime * 0.01f) * 12, 0); - Renderer::drawRect((int)point.x(), (int)point.y(), 8, 8, 0x0000FFFF, 0x0000FFFF); + Renderer::drawRect(point.x(), point.y(), 8.0f, 8.0f, 0x0000FFFF, 0x0000FFFF); } std::vector AsyncReqComponent::getHelpPrompts() diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index bf8341b153..73e18edb06 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -106,7 +106,6 @@ void RatingComponent::render(const Transform4x4f& parentTrans) return; Transform4x4f trans = parentTrans * getTransform(); - trans.round(); Renderer::setMatrix(trans); mFilledTexture->bind(); diff --git a/es-app/src/components/ScraperSearchComponent.cpp b/es-app/src/components/ScraperSearchComponent.cpp index 33f942dee8..752c4a8e69 100644 --- a/es-app/src/components/ScraperSearchComponent.cpp +++ b/es-app/src/components/ScraperSearchComponent.cpp @@ -359,9 +359,7 @@ void ScraperSearchComponent::render(const Transform4x4f& parentTrans) if(mBlockAccept) { Renderer::setMatrix(trans); - Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), 0x00000011, 0x00000011); - //Renderer::drawRect((int)mResultList->getPosition().x(), (int)mResultList->getPosition().y(), - // (int)mResultList->getSize().x(), (int)mResultList->getSize().y(), 0x0000011, 0x00000011); + Renderer::drawRect(0.0f, 0.0f, mSize.x(), mSize.y(), 0x00000011, 0x00000011); mBusyAnim.render(trans); } diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 44fcb3924f..b9c0f3670f 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -173,7 +173,7 @@ void TextListComponent::render(const Transform4x4f& parentTrans) mSelectorImage.render(trans); } else { Renderer::setMatrix(trans); - Renderer::drawRect(0.f, (mCursor - startEntry)*entrySize + mSelectorOffsetY, mSize.x(), + Renderer::drawRect(0.0f, (mCursor - startEntry)*entrySize + mSelectorOffsetY, mSize.x(), mSelectorHeight, mSelectorColor, mSelectorColorEnd, mSelectorColorGradientHorizontal); } } diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index e0a096ee91..44e299c499 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -434,7 +434,7 @@ void SystemView::renderCarousel(const Transform4x4f& trans) Renderer::pushClipRect(Vector2i((int)clipPos.x(), (int)clipPos.y()), Vector2i((int)mCarousel.size.x(), (int)mCarousel.size.y())); Renderer::setMatrix(carouselTrans); - Renderer::drawRect(0.0, 0.0, mCarousel.size.x(), mCarousel.size.y(), mCarousel.color, mCarousel.colorEnd, mCarousel.colorGradientHorizontal); + Renderer::drawRect(0.0f, 0.0f, mCarousel.size.x(), mCarousel.size.y(), mCarousel.color, mCarousel.colorEnd, mCarousel.colorGradientHorizontal); // draw logos Vector2f logoSpacing(0.0, 0.0); // NB: logoSpacing will include the size of the logo itself as well! diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 95ecbd8618..3489628f6c 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -424,7 +424,7 @@ void ViewController::render(const Transform4x4f& parentTrans) { unsigned int fadeColor = 0x00000000 | (unsigned char)(mFadeOpacity * 255); Renderer::setMatrix(parentTrans); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), fadeColor, fadeColor); + Renderer::drawRect(0.0f, 0.0f, Renderer::getScreenWidth(), Renderer::getScreenHeight(), fadeColor, fadeColor); } } diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 35975c4456..c51bf9ff58 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -301,7 +301,7 @@ void Window::renderLoadingScreen(std::string text) { Transform4x4f trans = Transform4x4f::Identity(); Renderer::setMatrix(trans); - Renderer::drawRect(0, 0, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF, 0x000000FF); + Renderer::drawRect(0.0f, 0.0f, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF, 0x000000FF); ImageComponent splash(this, true); splash.setResize(Renderer::getScreenWidth() * 0.6f, 0.0f); diff --git a/es-core/src/components/ButtonComponent.cpp b/es-core/src/components/ButtonComponent.cpp index 0ada6ece66..d0f47ce3a7 100644 --- a/es-core/src/components/ButtonComponent.cpp +++ b/es-core/src/components/ButtonComponent.cpp @@ -86,14 +86,12 @@ void ButtonComponent::updateImage() void ButtonComponent::render(const Transform4x4f& parentTrans) { Transform4x4f trans = parentTrans * getTransform(); - trans.round(); mBox.render(trans); if(mTextCache) { Vector3f centerOffset((mSize.x() - mTextCache->metrics.size.x()) / 2, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); - centerOffset.round(); trans = trans.translate(centerOffset); Renderer::setMatrix(trans); diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index c21c8308ac..1a3524f78c 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -161,7 +161,6 @@ void ComponentList::render(const Transform4x4f& parentTrans) return; Transform4x4f trans = parentTrans * getTransform(); - trans.round(); // clip everything to be inside our bounds Vector3f dim(mSize.x(), mSize.y(), 0); diff --git a/es-core/src/components/DateTimeEditComponent.cpp b/es-core/src/components/DateTimeEditComponent.cpp index 20440edc95..79bcb8e9c0 100644 --- a/es-core/src/components/DateTimeEditComponent.cpp +++ b/es-core/src/components/DateTimeEditComponent.cpp @@ -146,7 +146,6 @@ void DateTimeEditComponent::render(const Transform4x4f& parentTrans) // vertically center Vector3f off(0, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0); trans.translate(off); - trans.round(); Renderer::setMatrix(trans); @@ -159,8 +158,8 @@ void DateTimeEditComponent::render(const Transform4x4f& parentTrans) { if(mEditIndex >= 0 && (unsigned int)mEditIndex < mCursorBoxes.size()) { - Renderer::drawRect((int)mCursorBoxes[mEditIndex][0], (int)mCursorBoxes[mEditIndex][1], - (int)mCursorBoxes[mEditIndex][2], (int)mCursorBoxes[mEditIndex][3], 0x00000022, 0x00000022); + Renderer::drawRect(mCursorBoxes[mEditIndex][0], mCursorBoxes[mEditIndex][1], + mCursorBoxes[mEditIndex][2], mCursorBoxes[mEditIndex][3], 0x00000022, 0x00000022); } } } diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index daac1fe195..96301de107 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -98,7 +98,6 @@ void NinePatchComponent::render(const Transform4x4f& parentTrans) return; Transform4x4f trans = parentTrans * getTransform(); - trans.round(); if(mTexture && mVertices != NULL) { diff --git a/es-core/src/components/SliderComponent.cpp b/es-core/src/components/SliderComponent.cpp index d027ee40c7..aba8174c45 100644 --- a/es-core/src/components/SliderComponent.cpp +++ b/es-core/src/components/SliderComponent.cpp @@ -61,7 +61,6 @@ void SliderComponent::update(int deltaTime) void SliderComponent::render(const Transform4x4f& parentTrans) { Transform4x4f trans = parentTrans * getTransform(); - trans.round(); Renderer::setMatrix(trans); // render suffix diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index ba5c03f68b..bd8b7cdc0d 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -102,7 +102,7 @@ void TextComponent::render(const Transform4x4f& parentTrans) if (mRenderBackground) { Renderer::setMatrix(trans); - Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), mBgColor, mBgColor); + Renderer::drawRect(0.0f, 0.0f, mSize.x(), mSize.y(), mBgColor, mBgColor); } if(mTextCache) @@ -127,11 +127,10 @@ void TextComponent::render(const Transform4x4f& parentTrans) { // draw the "textbox" area, what we are aligned within Renderer::setMatrix(trans); - Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), 0xFF000033, 0xFF000033); + Renderer::drawRect(0.0f, 0.0f, mSize.x(), mSize.y(), 0xFF000033, 0xFF000033); } trans.translate(off); - trans.round(); Renderer::setMatrix(trans); // draw the text area, where the text actually is going diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index dcd9b4647b..6d98139bb2 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -254,8 +254,6 @@ void TextEditComponent::render(const Transform4x4f& parentTrans) Renderer::pushClipRect(clipPos, clipDim); trans.translate(Vector3f(-mScrollOffset.x(), -mScrollOffset.y(), 0)); - trans.round(); - Renderer::setMatrix(trans); if(mTextCache) diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index 42c0fe698c..e0c841891d 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -238,20 +238,18 @@ namespace Renderer void drawRect(const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const unsigned int _colorEnd, bool horizontalGradient, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { - drawRect((int)Math::round(_x), (int)Math::round(_y), (int)Math::round(_w), (int)Math::round(_h), _color, _colorEnd, horizontalGradient, _srcBlendFactor, _dstBlendFactor); - - } // drawRect - - void drawRect(const int _x, const int _y, const int _w, const int _h, const unsigned int _color, const unsigned int _colorEnd, bool horizontalGradient, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) - { + const float x = Math::round(_x); + const float y = Math::round(_y); + const float w = Math::round(_w); + const float h = Math::round(_h); const unsigned int color = convertColor(_color); const unsigned int colorEnd = convertColor(_colorEnd); Vertex vertices[4]; - vertices[0] = { { (float)(_x ), (float)(_y ) }, { 0.0f, 0.0f }, color }; - vertices[1] = { { (float)(_x ), (float)(_y + _h) }, { 0.0f, 0.0f }, horizontalGradient ? colorEnd : color }; - vertices[2] = { { (float)(_x + _w), (float)(_y ) }, { 0.0f, 0.0f }, horizontalGradient ? color : colorEnd }; - vertices[3] = { { (float)(_x + _w), (float)(_y + _h) }, { 0.0f, 0.0f }, colorEnd }; + vertices[0] = { { _x ,_y }, { 0.0f, 0.0f }, color }; + vertices[1] = { { _x ,_y + _h }, { 0.0f, 0.0f }, horizontalGradient ? colorEnd : color }; + vertices[2] = { { _x + _w,_y }, { 0.0f, 0.0f }, horizontalGradient ? color : colorEnd }; + vertices[3] = { { _x + _w,_y + _h }, { 0.0f, 0.0f }, colorEnd }; bindTexture(0); drawTriangleStrips(vertices, 4, _srcBlendFactor, _dstBlendFactor); diff --git a/es-core/src/renderers/Renderer.h b/es-core/src/renderers/Renderer.h index 4fcaa1a9bb..3b41e338d4 100644 --- a/es-core/src/renderers/Renderer.h +++ b/es-core/src/renderers/Renderer.h @@ -67,7 +67,6 @@ namespace Renderer void pushClipRect (const Vector2i& _pos, const Vector2i& _size); void popClipRect (); void drawRect (const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const unsigned int _colorEnd, bool horizontalGradient = false, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); - void drawRect (const int _x, const int _y, const int _w, const int _h, const unsigned int _color, const unsigned int _colorEnd, bool horizontalGradient = false, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); SDL_Window* getSDLWindow (); int getWindowWidth (); diff --git a/es-core/src/renderers/Renderer_GL21.cpp b/es-core/src/renderers/Renderer_GL21.cpp index f3b4247ec5..a792bfab24 100644 --- a/es-core/src/renderers/Renderer_GL21.cpp +++ b/es-core/src/renderers/Renderer_GL21.cpp @@ -1,6 +1,7 @@ #if defined(USE_OPENGL_21) #include "renderers/Renderer.h" +#include "math/Transform4x4f.h" #include "Log.h" #include "Settings.h" @@ -193,8 +194,10 @@ namespace Renderer void setMatrix(const Transform4x4f& _matrix) { + Transform4x4f matrix = _matrix; + matrix.round(); glMatrixMode(GL_MODELVIEW); - glLoadMatrixf((GLfloat*)&_matrix); + glLoadMatrixf((GLfloat*)&matrix); } // setMatrix diff --git a/es-core/src/renderers/Renderer_GLES10.cpp b/es-core/src/renderers/Renderer_GLES10.cpp index 3a99b45d1f..adb417ea1f 100644 --- a/es-core/src/renderers/Renderer_GLES10.cpp +++ b/es-core/src/renderers/Renderer_GLES10.cpp @@ -193,8 +193,10 @@ namespace Renderer void setMatrix(const Transform4x4f& _matrix) { + Transform4x4f matrix = _matrix; + matrix.round(); glMatrixMode(GL_MODELVIEW); - glLoadMatrixf((GLfloat*)&_matrix); + glLoadMatrixf((GLfloat*)&matrix); } // setMatrix From 71ac016c3d390af7e9d61db7a4b49585e40a13cb Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 31 Aug 2019 18:19:43 +0200 Subject: [PATCH 384/603] Make sure all vertices are properly rounded --- es-app/src/components/RatingComponent.cpp | 10 +++++++--- es-core/src/components/ImageComponent.cpp | 14 +++++++++----- es-core/src/components/NinePatchComponent.cpp | 18 ++++++++---------- es-core/src/components/VideoVlcComponent.cpp | 5 ++++- es-core/src/renderers/Renderer.cpp | 8 ++++---- es-core/src/resources/Font.cpp | 12 ++++++++---- 6 files changed, 40 insertions(+), 27 deletions(-) diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index 73e18edb06..4a06cf142f 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -76,9 +76,9 @@ void RatingComponent::onSizeChanged() void RatingComponent::updateVertices() { const float numStars = NUM_RATING_STARS; - const float h = Math::round(getSize().y()); // is the same as a single star's width - const float w = Math::round(h * mValue * numStars); - const float fw = Math::round(h * numStars); + const float h = getSize().y(); // is the same as a single star's width + const float w = getSize().y() * mValue * numStars; + const float fw = getSize().y() * numStars; const unsigned int color = Renderer::convertColor(mColorShift); mVertices[0] = { { 0.0f, 0.0f }, { 0.0f, 1.0f }, color }; @@ -90,6 +90,10 @@ void RatingComponent::updateVertices() mVertices[5] = { { 0.0f, h }, { 0.0f, 0.0f }, color }; mVertices[6] = { { fw, 0.0f }, { numStars, 1.0f }, color }; mVertices[7] = { { fw, h }, { numStars, 0.0f }, color }; + + // round vertices + for(int i = 0; i < 8; ++i) + mVertices[i].pos.round(); } void RatingComponent::updateColors() diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 8f78aaac54..6ad41d18e8 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -282,9 +282,8 @@ void ImageComponent::updateVertices() // we go through this mess to make sure everything is properly rounded // if we just round vertices at the end, edge cases occur near sizes of 0.5 - const Vector2f size = { Math::round(mSize.x()), Math::round(mSize.y()) }; - const Vector2f topLeft = { size * mTopLeftCrop }; - const Vector2f bottomRight = { size * mBottomRightCrop }; + const Vector2f topLeft = { mSize * mTopLeftCrop }; + const Vector2f bottomRight = { mSize * mBottomRightCrop }; const float px = mTexture->isTiled() ? mSize.x() / getTextureSize().x() : 1.0f; const float py = mTexture->isTiled() ? mSize.y() / getTextureSize().y() : 1.0f; const unsigned int color = Renderer::convertColor(mColorShift); @@ -295,14 +294,19 @@ void ImageComponent::updateVertices() mVertices[2] = { { bottomRight.x(), topLeft.y() }, { mBottomRightCrop.x() * px, py - mTopLeftCrop.y() }, mColorGradientHorizontal ? color : colorEnd }; mVertices[3] = { { bottomRight.x(), bottomRight.y() }, { mBottomRightCrop.x() * px, 1.0f - mBottomRightCrop.y() }, color }; + // round vertices + for(int i = 0; i < 4; ++i) + mVertices[i].pos.round(); + if(mFlipX) { - for(int i = 0; i < 4; i++) + for(int i = 0; i < 4; ++i) mVertices[i].tex[0] = px - mVertices[i].tex[0]; } + if(mFlipY) { - for(int i = 0; i < 4; i++) + for(int i = 0; i < 4; ++i) mVertices[i].tex[1] = py - mVertices[i].tex[1]; } } diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index 96301de107..6ab1c89a04 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -56,10 +56,10 @@ void NinePatchComponent::buildVertices() const float imgPosY[3] = { 0, imgSizeY[0], imgSizeY[0] + imgSizeY[1]}; //the "1 +" in posY and "-" in sizeY is to deal with texture coordinates having a bottom left corner origin vs. verticies having a top left origin - const float texSizeX[3] = { mCornerSize.x() / texSize.x(), (texSize.x() - mCornerSize.x() * 2) / texSize.x(), mCornerSize.x() / texSize.x() }; - const float texSizeY[3] = { -mCornerSize.y() / texSize.y(), -(texSize.y() - mCornerSize.y() * 2) / texSize.y(), -mCornerSize.y() / texSize.y() }; - const float texPosX[3] = { 0, texSizeX[0], texSizeX[0] + texSizeX[1] }; - const float texPosY[3] = { 1, 1 + texSizeY[0], 1 + texSizeY[0] + texSizeY[1] }; + const float texSizeX[3] = { mCornerSize.x() / texSize.x(), (texSize.x() - mCornerSize.x() * 2) / texSize.x(), mCornerSize.x() / texSize.x() }; + const float texSizeY[3] = { -mCornerSize.y() / texSize.y(), -(texSize.y() - mCornerSize.y() * 2) / texSize.y(), -mCornerSize.y() / texSize.y() }; + const float texPosX[3] = { 0, texSizeX[0], texSizeX[0] + texSizeX[1] }; + const float texPosY[3] = { 1, 1 + texSizeY[0], 1 + texSizeY[0] + texSizeY[1] }; int v = 0; for(int slice = 0; slice < 9; slice++) @@ -76,6 +76,10 @@ void NinePatchComponent::buildVertices() mVertices[v + 3] = { { imgPos.x() + imgSize.x(), imgPos.y() }, { texPos.x() + texSize.x(), texPos.y() }, 0 }; mVertices[v + 4] = { { imgPos.x() + imgSize.x(), imgPos.y() + imgSize.y() }, { texPos.x() + texSize.x(), texPos.y() + texSize.y() }, 0 }; + // round vertices + for(int i = 1; i < 5; ++i) + mVertices[v + i].pos.round(); + // make duplicates of first and last vertex so this can be rendered as a triangle strip mVertices[v + 0] = mVertices[v + 1]; mVertices[v + 5] = mVertices[v + 4]; @@ -83,12 +87,6 @@ void NinePatchComponent::buildVertices() v += 6; } - // round vertices - for(int i = 0; i < 6*9; i++) - { - mVertices[i].pos.round(); - } - updateColors(); } diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index ac163d28c7..a4aeaf111a 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -137,7 +137,6 @@ void VideoVlcComponent::render(const Transform4x4f& parentTrans) VideoComponent::render(parentTrans); Transform4x4f trans = parentTrans * getTransform(); GuiComponent::renderChildren(trans); - Renderer::setMatrix(trans); if (mIsPlaying && mContext.valid) @@ -151,6 +150,10 @@ void VideoVlcComponent::render(const Transform4x4f& parentTrans) vertices[2] = { { mSize.x(), 0.0f }, { 1.0f, 0.0f }, color }; vertices[3] = { { mSize.x(), mSize.y() }, { 1.0f, 1.0f }, color }; + // round vertices + for(int i = 0; i < 4; ++i) + vertices[i].pos.round(); + // Build a texture for the video frame mTexture->initFromPixels((unsigned char*)mContext.surface->pixels, mContext.surface->w, mContext.surface->h); mTexture->bind(); diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index e0c841891d..003e4ac489 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -238,10 +238,6 @@ namespace Renderer void drawRect(const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const unsigned int _colorEnd, bool horizontalGradient, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { - const float x = Math::round(_x); - const float y = Math::round(_y); - const float w = Math::round(_w); - const float h = Math::round(_h); const unsigned int color = convertColor(_color); const unsigned int colorEnd = convertColor(_colorEnd); Vertex vertices[4]; @@ -251,6 +247,10 @@ namespace Renderer vertices[2] = { { _x + _w,_y }, { 0.0f, 0.0f }, horizontalGradient ? color : colorEnd }; vertices[3] = { { _x + _w,_y + _h }, { 0.0f, 0.0f }, colorEnd }; + // round vertices + for(int i = 0; i < 4; ++i) + vertices[i].pos.round(); + bindTexture(0); drawTriangleStrips(vertices, 4, _srcBlendFactor, _dstBlendFactor); diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index ad8e671d4f..440540cf28 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -604,10 +604,14 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign const Vector2i& textureSize = glyph->texture->textureSize; const unsigned int convertedColor = Renderer::convertColor(color); - vertices[1] = { { Math::round(glyphStartX ), Math::round(y - glyph->bearing.y() ) }, { glyph->texPos.x(), glyph->texPos.y() }, convertedColor }; - vertices[2] = { { Math::round(glyphStartX ), Math::round(y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y())) }, { glyph->texPos.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; - vertices[3] = { { Math::round(glyphStartX + glyph->texSize.x() * textureSize.x()), Math::round(y - glyph->bearing.y() ) }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() }, convertedColor }; - vertices[4] = { { Math::round(glyphStartX + glyph->texSize.x() * textureSize.x()), Math::round(y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y())) }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; + vertices[1] = { { glyphStartX , y - glyph->bearing.y() }, { glyph->texPos.x(), glyph->texPos.y() }, convertedColor }; + vertices[2] = { { glyphStartX , y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y()) }, { glyph->texPos.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; + vertices[3] = { { glyphStartX + glyph->texSize.x() * textureSize.x(), y - glyph->bearing.y() }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() }, convertedColor }; + vertices[4] = { { glyphStartX + glyph->texSize.x() * textureSize.x(), y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y()) }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; + + // round vertices + for(int i = 1; i < 5; ++i) + vertices[i].pos.round(); // make duplicates of first and last vertex so this can be rendered as a triangle strip vertices[0] = vertices[1]; From 20b367009ceda0b82fb08b8ec3bcca1c1ad411ca Mon Sep 17 00:00:00 2001 From: Shanti Gilbert Date: Mon, 2 Sep 2019 14:50:14 -0500 Subject: [PATCH 385/603] Fixes compiling when Renderer_GLES10 is used --- es-core/src/renderers/Renderer_GLES10.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/es-core/src/renderers/Renderer_GLES10.cpp b/es-core/src/renderers/Renderer_GLES10.cpp index adb417ea1f..bc37dd7fe9 100644 --- a/es-core/src/renderers/Renderer_GLES10.cpp +++ b/es-core/src/renderers/Renderer_GLES10.cpp @@ -1,6 +1,7 @@ #if defined(USE_OPENGLES_10) #include "renderers/Renderer.h" +#include "math/Transform4x4f.h" #include "Log.h" #include "Settings.h" From 9e39c3a67daa8ec8fd15bb2b85a24bcda84e43ad Mon Sep 17 00:00:00 2001 From: Fabrice CARUSO Date: Fri, 16 Aug 2019 10:05:40 +0200 Subject: [PATCH 386/603] Fix Reloadables : Don't reload useless textures that were not loaded at unload time. --- es-core/src/resources/Font.cpp | 22 +++++++++--- es-core/src/resources/Font.h | 6 ++-- es-core/src/resources/ResourceManager.cpp | 36 +++++++++++++------- es-core/src/resources/ResourceManager.h | 13 +++++-- es-core/src/resources/TextureDataManager.cpp | 5 +-- es-core/src/resources/TextureDataManager.h | 2 +- es-core/src/resources/TextureResource.cpp | 27 +++++++++++---- es-core/src/resources/TextureResource.h | 4 +-- 8 files changed, 81 insertions(+), 34 deletions(-) diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index ad8e671d4f..6878b2bf8d 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -75,7 +75,8 @@ size_t Font::getTotalMemUsage() Font::Font(int size, const std::string& path) : mSize(size), mPath(path) { assert(mSize > 0); - + + mLoaded = true; mMaxGlyphHeight = 0; if(!sLibrary) @@ -90,17 +91,28 @@ Font::Font(int size, const std::string& path) : mSize(size), mPath(path) Font::~Font() { - unload(ResourceManager::getInstance()); + unload(); } -void Font::reload(std::shared_ptr& /*rm*/) +void Font::reload() { + if (mLoaded) + return; + rebuildTextures(); + mLoaded = true; } -void Font::unload(std::shared_ptr& /*rm*/) +bool Font::unload() { - unloadTextures(); + if (mLoaded) + { + unloadTextures(); + mLoaded = false; + return true; + } + + return false; } std::shared_ptr Font::get(int size, const std::string& path) diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index 448ab5f9ba..d720adab5f 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -53,8 +53,8 @@ class Font : public IReloadable float getHeight(float lineSpacing = 1.5f) const; float getLetterHeight(); - void unload(std::shared_ptr& rm) override; - void reload(std::shared_ptr& rm) override; + bool unload() override; + void reload() override; int getSize() const; inline const std::string& getPath() const { return mPath; } @@ -131,6 +131,8 @@ class Font : public IReloadable float getNewlineStartOffset(const std::string& text, const unsigned int& charStart, const float& xLen, const Alignment& alignment); + bool mLoaded; + friend TextCache; }; diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index 9f5014e432..b0c8f89de5 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -93,14 +93,16 @@ void ResourceManager::unloadAll() { auto iter = mReloadables.cbegin(); while(iter != mReloadables.cend()) - { - if(!iter->expired()) - { - iter->lock()->unload(sInstance); + { + std::shared_ptr info = *iter; + + if (!info->data.expired()) + { + info->reload = info->data.lock()->unload(); iter++; - }else{ - iter = mReloadables.erase(iter); } + else + iter = mReloadables.erase(iter); } } @@ -109,17 +111,27 @@ void ResourceManager::reloadAll() auto iter = mReloadables.cbegin(); while(iter != mReloadables.cend()) { - if(!iter->expired()) + std::shared_ptr info = *iter; + + if (!info->data.expired()) { - iter->lock()->reload(sInstance); + if (info->reload) + { + info->data.lock()->reload(); + info->reload = false; + } + iter++; - }else{ - iter = mReloadables.erase(iter); } + else + iter = mReloadables.erase(iter); } } void ResourceManager::addReloadable(std::weak_ptr reloadable) { - mReloadables.push_back(reloadable); -} + std::shared_ptr info = std::make_shared(); + info->data = reloadable; + info->reload = false; + mReloadables.push_back(info); +} \ No newline at end of file diff --git a/es-core/src/resources/ResourceManager.h b/es-core/src/resources/ResourceManager.h index 96eab6455e..5eaf622391 100644 --- a/es-core/src/resources/ResourceManager.h +++ b/es-core/src/resources/ResourceManager.h @@ -20,8 +20,8 @@ class ResourceManager; class IReloadable { public: - virtual void unload(std::shared_ptr& rm) = 0; - virtual void reload(std::shared_ptr& rm) = 0; + virtual bool unload() = 0; + virtual void reload() = 0; }; class ResourceManager @@ -45,7 +45,14 @@ class ResourceManager ResourceData loadFile(const std::string& path) const; - std::list< std::weak_ptr > mReloadables; + class ReloadableInfo + { + public: + std::weak_ptr data; + bool reload; + }; + + std::list> mReloadables; // std::weak_ptr }; #endif // ES_CORE_RESOURCES_RESOURCE_MANAGER_H diff --git a/es-core/src/resources/TextureDataManager.cpp b/es-core/src/resources/TextureDataManager.cpp index f64719003d..ddc297a777 100644 --- a/es-core/src/resources/TextureDataManager.cpp +++ b/es-core/src/resources/TextureDataManager.cpp @@ -46,7 +46,7 @@ void TextureDataManager::remove(const TextureResource* key) } } -std::shared_ptr TextureDataManager::get(const TextureResource* key) +std::shared_ptr TextureDataManager::get(const TextureResource* key, bool enableLoading) { // If it's in the cache then we want to remove it from it's current location and // move it to the top @@ -63,7 +63,8 @@ std::shared_ptr TextureDataManager::get(const TextureResource* key) mTextureLookup[key] = mTextures.cbegin(); // Make sure it's loaded or queued for loading - load(tex); + if (enableLoading && !tex->isLoaded()) + load(tex); } return tex; } diff --git a/es-core/src/resources/TextureDataManager.h b/es-core/src/resources/TextureDataManager.h index c7b3a029d8..9c7b60b588 100644 --- a/es-core/src/resources/TextureDataManager.h +++ b/es-core/src/resources/TextureDataManager.h @@ -63,7 +63,7 @@ class TextureDataManager // will be deleted when the other thread has finished with it void remove(const TextureResource* key); - std::shared_ptr get(const TextureResource* key); + std::shared_ptr get(const TextureResource* key, bool enableLoading = true); bool bind(const TextureResource* key); // Get the total size of all textures managed by this object, loaded and unloaded in bytes diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index c3d9eff0b0..0a7abac79b 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -83,7 +83,7 @@ bool TextureResource::isTiled() const { if (mTextureData != nullptr) return mTextureData->tiled(); - std::shared_ptr data = sTextureDataManager.get(this); + std::shared_ptr data = sTextureDataManager.get(this, false); return data->tiled(); } @@ -199,23 +199,36 @@ size_t TextureResource::getTotalTextureSize() return total; } -void TextureResource::unload(std::shared_ptr& /*rm*/) +bool TextureResource::unload() { // Release the texture's resources std::shared_ptr data; if (mTextureData == nullptr) - data = sTextureDataManager.get(this); + data = sTextureDataManager.get(this, false); else data = mTextureData; - data->releaseVRAM(); - data->releaseRAM(); + if (data != nullptr && data->isLoaded()) + { + data->releaseVRAM(); + data->releaseRAM(); + + return true; + } + + return false; } -void TextureResource::reload(std::shared_ptr& /*rm*/) +void TextureResource::reload() { // For dynamically loaded textures the texture manager will load them on demand. // For manually loaded textures we have to reload them here - if (mTextureData) + if (mTextureData && !mTextureData->isLoaded()) mTextureData->load(); + + // Uncomment this 2 lines in future release in order to reload texture VRAM exactly as it was before + // This is commented because it needs true images async loading, or it will be very long + + // else if (mTextureData == nullptr) + // sTextureDataManager.get(this); } diff --git a/es-core/src/resources/TextureResource.h b/es-core/src/resources/TextureResource.h index c2be59f1d7..c3c7e9dd29 100644 --- a/es-core/src/resources/TextureResource.h +++ b/es-core/src/resources/TextureResource.h @@ -37,8 +37,8 @@ class TextureResource : public IReloadable protected: TextureResource(const std::string& path, bool tile, bool dynamic); - virtual void unload(std::shared_ptr& rm); - virtual void reload(std::shared_ptr& rm); + virtual bool unload(); + virtual void reload(); private: // mTextureData is used for textures that are not loaded from a file - these ones From 28ed6ed04ea4ba61f45216d3bbcb5fd91d3bda55 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Tue, 3 Sep 2019 22:39:19 -0400 Subject: [PATCH 387/603] ensure change flag cleared for new FileData --- es-app/src/FileData.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index f4781d13d4..5251b33736 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -23,6 +23,7 @@ FileData::FileData(FileType type, const std::string& path, SystemEnvironmentData if(metadata.get("name").empty()) metadata.set("name", getDisplayName()); mSystemName = system->getName(); + metadata.resetChangedFlag(); } FileData::~FileData() From b43f1b43d3c6e596aabd741e50b3bb038bc31e27 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Sat, 31 Aug 2019 09:06:23 -0400 Subject: [PATCH 388/603] clean up opacity handling for ImageComponent, RatingComponent --- es-app/src/components/RatingComponent.cpp | 38 ++++++++-------- es-core/src/components/ImageComponent.cpp | 45 +++++++------------ es-core/src/components/NinePatchComponent.cpp | 2 +- 3 files changed, 35 insertions(+), 50 deletions(-) diff --git a/es-app/src/components/RatingComponent.cpp b/es-app/src/components/RatingComponent.cpp index 4a06cf142f..915eba392b 100644 --- a/es-app/src/components/RatingComponent.cpp +++ b/es-app/src/components/RatingComponent.cpp @@ -41,16 +41,12 @@ std::string RatingComponent::getValue() const void RatingComponent::setOpacity(unsigned char opacity) { mOpacity = opacity; - mColorShift = (mColorShift >> 8 << 8) | mOpacity; updateColors(); } void RatingComponent::setColorShift(unsigned int color) { mColorShift = color; - // Grab the opacity from the color shift because we may need to apply it if - // fading textures in - mOpacity = color & 0xff; updateColors(); } @@ -75,21 +71,22 @@ void RatingComponent::onSizeChanged() void RatingComponent::updateVertices() { - const float numStars = NUM_RATING_STARS; - const float h = getSize().y(); // is the same as a single star's width - const float w = getSize().y() * mValue * numStars; - const float fw = getSize().y() * numStars; - const unsigned int color = Renderer::convertColor(mColorShift); - - mVertices[0] = { { 0.0f, 0.0f }, { 0.0f, 1.0f }, color }; - mVertices[1] = { { 0.0f, h }, { 0.0f, 0.0f }, color }; - mVertices[2] = { { w, 0.0f }, { mValue * numStars, 1.0f }, color }; - mVertices[3] = { { w, h }, { mValue * numStars, 0.0f }, color }; - - mVertices[4] = { { 0.0f, 0.0f }, { 0.0f, 1.0f }, color }; - mVertices[5] = { { 0.0f, h }, { 0.0f, 0.0f }, color }; - mVertices[6] = { { fw, 0.0f }, { numStars, 1.0f }, color }; - mVertices[7] = { { fw, h }, { numStars, 0.0f }, color }; + const float numStars = NUM_RATING_STARS; + const float h = getSize().y(); // is the same as a single star's width + const float w = getSize().y() * mValue * numStars; + const float fw = getSize().y() * numStars; + + mVertices[0] = { { 0.0f, 0.0f }, { 0.0f, 1.0f }, 0 }; + mVertices[1] = { { 0.0f, h }, { 0.0f, 0.0f }, 0 }; + mVertices[2] = { { w, 0.0f }, { mValue * numStars, 1.0f }, 0 }; + mVertices[3] = { { w, h }, { mValue * numStars, 0.0f }, 0 }; + + mVertices[4] = { { 0.0f, 0.0f }, { 0.0f, 1.0f }, 0 }; + mVertices[5] = { { 0.0f, h }, { 0.0f, 0.0f }, 0 }; + mVertices[6] = { { fw, 0.0f }, { numStars, 1.0f }, 0 }; + mVertices[7] = { { fw, h }, { numStars, 0.0f }, 0 }; + + updateColors(); // round vertices for(int i = 0; i < 8; ++i) @@ -98,7 +95,8 @@ void RatingComponent::updateVertices() void RatingComponent::updateColors() { - const unsigned int color = Renderer::convertColor(mColorShift); + const float opacity = mOpacity / 255.0; + const unsigned int color = Renderer::convertColor(mColorShift & 0xFFFFFF00 | (unsigned char)((mColorShift & 0xFF) * opacity)); for(int i = 0; i < 8; ++i) mVertices[i].col = color; diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 4f1a6f0be9..823ceb570d 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -247,18 +247,13 @@ void ImageComponent::setFlipY(bool flip) void ImageComponent::setColorShift(unsigned int color) { mColorShift = color; - // Grab the opacity from the color shift because we may need to apply it if - // fading textures in - mOpacity = color & 0xff; + mColorShiftEnd = color; updateColors(); } void ImageComponent::setColorShiftEnd(unsigned int color) { mColorShiftEnd = color; - // Grab the opacity from the color shift because we may need to apply it if - // fading textures in - mOpacity = color & 0xff; updateColors(); } @@ -271,7 +266,6 @@ void ImageComponent::setColorGradientHorizontal(bool horizontal) void ImageComponent::setOpacity(unsigned char opacity) { mOpacity = opacity; - mColorShift = (mColorShift >> 8 << 8) | mOpacity; updateColors(); } @@ -282,17 +276,17 @@ void ImageComponent::updateVertices() // we go through this mess to make sure everything is properly rounded // if we just round vertices at the end, edge cases occur near sizes of 0.5 - const Vector2f topLeft = { mSize * mTopLeftCrop }; - const Vector2f bottomRight = { mSize * mBottomRightCrop }; - const float px = mTexture->isTiled() ? mSize.x() / getTextureSize().x() : 1.0f; - const float py = mTexture->isTiled() ? mSize.y() / getTextureSize().y() : 1.0f; - const unsigned int color = Renderer::convertColor(mColorShift); - const unsigned int colorEnd = Renderer::convertColor(mColorShiftEnd); - - mVertices[0] = { { topLeft.x(), topLeft.y() }, { mTopLeftCrop.x(), py - mTopLeftCrop.y() }, color }; - mVertices[1] = { { topLeft.x(), bottomRight.y() }, { mTopLeftCrop.x(), 1.0f - mBottomRightCrop.y() }, mColorGradientHorizontal ? colorEnd : color }; - mVertices[2] = { { bottomRight.x(), topLeft.y() }, { mBottomRightCrop.x() * px, py - mTopLeftCrop.y() }, mColorGradientHorizontal ? color : colorEnd }; - mVertices[3] = { { bottomRight.x(), bottomRight.y() }, { mBottomRightCrop.x() * px, 1.0f - mBottomRightCrop.y() }, color }; + const Vector2f topLeft = { mSize * mTopLeftCrop }; + const Vector2f bottomRight = { mSize * mBottomRightCrop }; + const float px = mTexture->isTiled() ? mSize.x() / getTextureSize().x() : 1.0f; + const float py = mTexture->isTiled() ? mSize.y() / getTextureSize().y() : 1.0f; + + mVertices[0] = { { topLeft.x(), topLeft.y() }, { mTopLeftCrop.x(), py - mTopLeftCrop.y() }, 0 }; + mVertices[1] = { { topLeft.x(), bottomRight.y() }, { mTopLeftCrop.x(), 1.0f - mBottomRightCrop.y() }, 0 }; + mVertices[2] = { { bottomRight.x(), topLeft.y() }, { mBottomRightCrop.x() * px, py - mTopLeftCrop.y() }, 0 }; + mVertices[3] = { { bottomRight.x(), bottomRight.y() }, { mBottomRightCrop.x() * px, 1.0f - mBottomRightCrop.y() }, 0 }; + + updateColors(); // round vertices for(int i = 0; i < 4; ++i) @@ -313,12 +307,13 @@ void ImageComponent::updateVertices() void ImageComponent::updateColors() { - const unsigned int color = Renderer::convertColor(mColorShift); - const unsigned int colorEnd = Renderer::convertColor(mColorShiftEnd); + const float opacity = (mOpacity * (mFading ? mFadeOpacity / 255.0 : 1.0)) / 255.0; + const unsigned int color = Renderer::convertColor(mColorShift & 0xFFFFFF00 | (unsigned char)((mColorShift & 0xFF) * opacity)); + const unsigned int colorEnd = Renderer::convertColor(mColorShiftEnd & 0xFFFFFF00 | (unsigned char)((mColorShiftEnd & 0xFF) * opacity)); mVertices[0].col = color; mVertices[1].col = mColorGradientHorizontal ? colorEnd : color; - mVertices[2].col = mColorGradientHorizontal ? color : colorEnd; + mVertices[2].col = mColorGradientHorizontal ? color : colorEnd; mVertices[3].col = colorEnd; } @@ -367,8 +362,6 @@ void ImageComponent::fadeIn(bool textureLoaded) // Start with a zero opacity and flag it as fading mFadeOpacity = 0; mFading = true; - // Set the colours to be translucent - mColorShift = (mColorShift >> 8 << 8) | 0; updateColors(); } } @@ -388,9 +381,6 @@ void ImageComponent::fadeIn(bool textureLoaded) { mFadeOpacity = (unsigned char)opacity; } - // Apply the combination of the target opacity and current fade - float newOpacity = (float)mOpacity * ((float)mFadeOpacity / 255.0f); - mColorShift = (mColorShift >> 8 << 8) | (unsigned char)newOpacity; updateColors(); } } @@ -435,10 +425,7 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, const s if(properties & COLOR) { if(elem->has("color")) - { setColorShift(elem->get("color")); - setColorShiftEnd(elem->get("color")); - } if (elem->has("colorEnd")) setColorShiftEnd(elem->get("colorEnd")); diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index 6ab1c89a04..50cec76423 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -29,7 +29,7 @@ void NinePatchComponent::updateColors() mVertices[i].col = edgeColor; for(int i = 6*4; i < 6; ++i) - mVertices[(6*4)+i].col = mCenterColor; + mVertices[(6*4)+i].col = centerColor; } void NinePatchComponent::buildVertices() From 961571655b71f709539ba57834c1a7df5532b105 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Sat, 6 Jul 2019 10:50:50 -0400 Subject: [PATCH 389/603] Grid updates. Animate scrolling option, autoLayout option, center selection option, scroll loop option, image source option --- THEMES.md | 19 +- es-app/src/CollectionSystemManager.cpp | 4 +- .../src/views/gamelist/GridGameListView.cpp | 14 +- es-app/src/views/gamelist/GridGameListView.h | 1 + es-core/src/ThemeData.cpp | 31 +- es-core/src/ThemeData.h | 5 + es-core/src/components/GridTileComponent.cpp | 271 ++++++++--- es-core/src/components/GridTileComponent.h | 20 +- es-core/src/components/ImageComponent.h | 2 + es-core/src/components/ImageGridComponent.h | 420 ++++++++++++++---- es-core/src/utils/StringUtil.cpp | 14 +- es-core/src/utils/StringUtil.h | 33 +- 12 files changed, 646 insertions(+), 188 deletions(-) diff --git a/THEMES.md b/THEMES.md index c10b2e57d0..07e570a060 100644 --- a/THEMES.md +++ b/THEMES.md @@ -538,6 +538,7 @@ Reference ## Types of properties: * NORMALIZED_PAIR - two decimals, in the range [0..1], delimited by a space. For example, `0.25 0.5`. Most commonly used for position (x and y coordinates) and size (width and height). +* NORMALIZED_RECT - four decimals, in the range [0..1], delimited by a space. For example, `0.25 0.5 0.10 0.30`. Most commonly used for padding to store top, left, bottom and right coordinates. * PATH - a path. If the first character is a `~`, it will be expanded into the environment variable for the home path (`$HOME` for Linux or `%HOMEPATH%` for Windows). If the first character is a `.`, it will be expanded to the theme file's directory, allowing you to specify resources relative to the theme file, like so: `./../general_art/myfont.ttf`. * BOOLEAN - `true`/`1` or `false`/`0`. * COLOR - a hexidecimal RGB or RGBA color (6 or 8 digits). If 6 digits, will assume the alpha channel is `FF` (not transparent). @@ -586,13 +587,29 @@ Can be created as an extra. * `pos` - type: NORMALIZED_PAIR. * `size` - type: NORMALIZED_PAIR. - The size of the grid. Take care the selected tile can go out of the grid size, so don't position the grid too close to another element or the screen border. -* `margin` - type: NORMALIZED_PAIR. +* `margin` - type: NORMALIZED_PAIR. Margin between tiles. +* `padding` - type: NORMALIZED_RECT. + - NEW : Padding for displaying tiles. +* `autoLayout` - type: NORMALIZED_PAIR. + - NEW : Number of column and rows in the grid (integer values). +* `autoLayoutSelectedZoom` - type: FLOAT. + - NEW : Zoom factor to apply when a tile is selected. * `gameImage` - type: PATH. - The default image used for games which doesn't have an image. * `folderImage` - type: PATH. - The default image used for folders which doesn't have an image. +* `imageSource` - type: STRING. + - Selects the image to display. `thumbnail` by default, can also be set to `image` or `marquee`. * `scrollDirection` - type: STRING. - `vertical` by default, can also be set to `horizontal`. Not that in `horizontal` mod, the tiles are ordered from top to bottom, then from left to right. +* `centerSelection` - type: BOOLEAN. + - `false` by default, when `true` the selected tile will be locked to the center of the grid. +* `scrollLoop` - type: BOOLEAN. + - `false` by default, when `true` the grid will seamlessly loop around when scrolling reaches the end of the list. Only works when `centerSelection` is `true`. +* `animate` - type : BOOLEAN. + - `true` by default, when `false` the grid scrolling will not be animated. +* `zIndex` - type: FLOAT. + - z-index value for component. Components will be rendered in order of z-index value from low to high. #### gridtile diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 6b665df78c..bdc9916b9c 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -144,7 +144,7 @@ void CollectionSystemManager::loadCollectionSystems() void CollectionSystemManager::loadEnabledListFromSettings() { // we parse the auto collection settings list - std::vector autoSelected = Utils::String::commaStringToVector(Settings::getInstance()->getString("CollectionSystemsAuto")); + std::vector autoSelected = Utils::String::commaStringToVector(Settings::getInstance()->getString("CollectionSystemsAuto"), true); // iterate the map for(std::map::iterator it = mAutoCollectionSystemsData.begin() ; it != mAutoCollectionSystemsData.end() ; it++ ) @@ -153,7 +153,7 @@ void CollectionSystemManager::loadEnabledListFromSettings() } // we parse the custom collection settings list - std::vector customSelected = Utils::String::commaStringToVector(Settings::getInstance()->getString("CollectionSystemsCustom")); + std::vector customSelected = Utils::String::commaStringToVector(Settings::getInstance()->getString("CollectionSystemsCustom"), true); // iterate the map for(std::map::iterator it = mCustomCollectionSystemsData.begin() ; it != mCustomCollectionSystemsData.end() ; it++ ) diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 8a0fbe7c8e..5a3b8bf436 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -110,6 +110,18 @@ bool GridGameListView::input(InputConfig* config, Input input) return ISimpleGameListView::input(config, input); } +const std::string GridGameListView::getImagePath(FileData* file) +{ + ImageSource src = mGrid.getImageSource(); + + if (src == ImageSource::IMAGE) + return file->getImagePath(); + else if (src == ImageSource::MARQUEE) + return file->getMarqueePath(); + + return file->getThumbnailPath(); +} + void GridGameListView::populateList(const std::vector& files) { mGrid.clear(); @@ -118,7 +130,7 @@ void GridGameListView::populateList(const std::vector& files) { for (auto it = files.cbegin(); it != files.cend(); it++) { - mGrid.add((*it)->getName(), (*it)->getThumbnailPath(), *it); + mGrid.add((*it)->getName(), getImagePath(*it), *it); } } else diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index da09c87903..ac109890a4 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -36,6 +36,7 @@ class GridGameListView : public ISimpleGameListView private: void updateInfoPanel(); + const std::string getImagePath(FileData* file); void initMDLabels(); void initMDValues(); diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 32faf12bb5..18114235e4 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -3,6 +3,7 @@ #include "components/ImageComponent.h" #include "components/TextComponent.h" #include "utils/FileSystemUtil.h" +#include "utils/StringUtil.h" #include "Log.h" #include "platform.h" #include "Settings.h" @@ -18,7 +19,7 @@ std::map> The { "size", NORMALIZED_PAIR }, { "maxSize", NORMALIZED_PAIR }, { "origin", NORMALIZED_PAIR }, - { "rotation", FLOAT }, + { "rotation", FLOAT }, { "rotationOrigin", NORMALIZED_PAIR }, { "path", PATH }, { "default", PATH }, @@ -32,9 +33,16 @@ std::map> The { "pos", NORMALIZED_PAIR }, { "size", NORMALIZED_PAIR }, { "margin", NORMALIZED_PAIR }, + { "padding", NORMALIZED_RECT }, + { "autoLayout", NORMALIZED_PAIR }, + { "autoLayoutSelectedZoom", FLOAT }, { "gameImage", PATH }, { "folderImage", PATH }, - { "scrollDirection", STRING } } }, + { "imageSource", STRING }, + { "scrollDirection", STRING }, + { "centerSelection", BOOLEAN }, + { "scrollLoop", BOOLEAN }, + { "zIndex", FLOAT } } }, { "gridtile", { { "size", NORMALIZED_PAIR }, { "padding", NORMALIZED_PAIR }, @@ -410,6 +418,25 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::mapsecond) { + case NORMALIZED_RECT: + { + Vector4f val; + + auto splits = Utils::String::delimitedStringToVector(str, " "); + if (splits.size() == 2) + { + val = Vector4f((float)atof(splits.at(0).c_str()), (float)atof(splits.at(1).c_str()), + (float)atof(splits.at(0).c_str()), (float)atof(splits.at(1).c_str())); + } + else if (splits.size() == 4) + { + val = Vector4f((float)atof(splits.at(0).c_str()), (float)atof(splits.at(1).c_str()), + (float)atof(splits.at(2).c_str()), (float)atof(splits.at(3).c_str())); + } + + element.properties[node.name()] = val; + break; + } case NORMALIZED_PAIR: { size_t divider = str.find(' '); diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 45c12d5e1d..5bb2b98081 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -3,6 +3,7 @@ #define ES_CORE_THEME_DATA_H #include "math/Vector2f.h" +#include "math/Vector4f.h" #include "utils/FileSystemUtil.h" #include #include @@ -94,12 +95,14 @@ class ThemeData struct Property { + void operator= (const Vector4f& value) { r = value; v = Vector2f(value.x(), value.y()); } void operator= (const Vector2f& value) { v = value; } void operator= (const std::string& value) { s = value; } void operator= (const unsigned int& value) { i = value; } void operator= (const float& value) { f = value; } void operator= (const bool& value) { b = value; } + Vector4f r; Vector2f v; std::string s; unsigned int i; @@ -117,6 +120,7 @@ class ThemeData else if(std::is_same::value) return *(const T*)&properties.at(prop).i; else if(std::is_same::value) return *(const T*)&properties.at(prop).f; else if(std::is_same::value) return *(const T*)&properties.at(prop).b; + else if(std::is_same::value) return *(const T*)&properties.at(prop).r; return T(); } @@ -140,6 +144,7 @@ class ThemeData enum ElementPropertyType { + NORMALIZED_RECT, NORMALIZED_PAIR, PATH, STRING, diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp index 842c268b2b..889076ed4e 100644 --- a/es-core/src/components/GridTileComponent.cpp +++ b/es-core/src/components/GridTileComponent.cpp @@ -1,5 +1,6 @@ #include "GridTileComponent.h" +#include "animations/LambdaAnimation.h" #include "resources/TextureResource.h" #include "ThemeData.h" @@ -29,7 +30,9 @@ GridTileComponent::GridTileComponent(Window* window) : GuiComponent(window), mBa addChild(&mBackground); addChild(&(*mImage)); - setSelected(false); + mSelectedZoomPercent = 0; + + setSelected(false, false); setVisible(true); } @@ -42,90 +45,74 @@ void GridTileComponent::render(const Transform4x4f& parentTrans) } // Update all the tile properties to the new status (selected or default) -void GridTileComponent::update() +void GridTileComponent::update(int deltaTime) { - const GridTileProperties& currentProperties = getCurrentProperties(); + GuiComponent::update(deltaTime); + + calcCurrentProperties(); - mBackground.setImagePath(currentProperties.mBackgroundImage); + mBackground.setImagePath(mCurrentProperties.mBackgroundImage); - mImage->setColorShift(currentProperties.mImageColor); - mBackground.setCenterColor(currentProperties.mBackgroundCenterColor); - mBackground.setEdgeColor(currentProperties.mBackgroundEdgeColor); + mImage->setColorShift(mCurrentProperties.mImageColor); + mBackground.setCenterColor(mCurrentProperties.mBackgroundCenterColor); + mBackground.setEdgeColor(mCurrentProperties.mBackgroundEdgeColor); resize(); } -void GridTileComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& /*element*/, unsigned int /*properties*/) +void applyThemeToProperties(const ThemeData::ThemeElement* elem, GridTileProperties properties) { Vector2f screen = Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - // Apply theme to the default gridtile - const ThemeData::ThemeElement* elem = theme->getElement(view, "default", "gridtile"); - if (elem) - { - if (elem->has("size")) - mDefaultProperties.mSize = elem->get("size") * screen; + if (elem->has("size")) + properties.mSize = elem->get("size") * screen; - if (elem->has("padding")) - mDefaultProperties.mPadding = elem->get("padding"); + if (elem->has("padding")) + properties.mPadding = elem->get("padding"); - if (elem->has("imageColor")) - mDefaultProperties.mImageColor = elem->get("imageColor"); + if (elem->has("imageColor")) + properties.mImageColor = elem->get("imageColor"); - if (elem->has("backgroundImage")) - mDefaultProperties.mBackgroundImage = elem->get("backgroundImage"); + if (elem->has("backgroundImage")) + properties.mBackgroundImage = elem->get("backgroundImage"); - if (elem->has("backgroundCornerSize")) - mDefaultProperties.mBackgroundCornerSize = elem->get("backgroundCornerSize"); + if (elem->has("backgroundCornerSize")) + properties.mBackgroundCornerSize = elem->get("backgroundCornerSize"); - if (elem->has("backgroundColor")) - { - mDefaultProperties.mBackgroundCenterColor = elem->get("backgroundColor"); - mDefaultProperties.mBackgroundEdgeColor = elem->get("backgroundColor"); - } + if (elem->has("backgroundColor")) + { + properties.mBackgroundCenterColor = elem->get("backgroundColor"); + properties.mBackgroundEdgeColor = elem->get("backgroundColor"); + } - if (elem->has("backgroundCenterColor")) - mDefaultProperties.mBackgroundCenterColor = elem->get("backgroundCenterColor"); + if (elem->has("backgroundCenterColor")) + properties.mBackgroundCenterColor = elem->get("backgroundCenterColor"); - if (elem->has("backgroundEdgeColor")) - mDefaultProperties.mBackgroundEdgeColor = elem->get("backgroundEdgeColor"); - } + if (elem->has("backgroundEdgeColor")) + properties.mBackgroundEdgeColor = elem->get("backgroundEdgeColor"); +} + +void GridTileComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& /*element*/, unsigned int /*properties*/) +{ + Vector2f screen = Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + + // Apply theme to the default gridtile + const ThemeData::ThemeElement* elem = theme->getElement(view, "default", "gridtile"); + if (elem) + applyThemeToProperties(elem, mDefaultProperties); // Apply theme to the selected gridtile // NOTE that some of the default gridtile properties influence on the selected gridtile properties // See THEMES.md for more informations elem = theme->getElement(view, "selected", "gridtile"); - mSelectedProperties.mSize = elem && elem->has("size") ? - elem->get("size") * screen : - getSelectedTileSize(); - - mSelectedProperties.mPadding = elem && elem->has("padding") ? - elem->get("padding") : - mDefaultProperties.mPadding; - - if (elem && elem->has("imageColor")) - mSelectedProperties.mImageColor = elem->get("imageColor"); - - mSelectedProperties.mBackgroundImage = elem && elem->has("backgroundImage") ? - elem->get("backgroundImage") : - mDefaultProperties.mBackgroundImage; - - mSelectedProperties.mBackgroundCornerSize = elem && elem->has("backgroundCornerSize") ? - elem->get("backgroundCornerSize") : - mDefaultProperties.mBackgroundCornerSize; - - if (elem && elem->has("backgroundColor")) - { - mSelectedProperties.mBackgroundCenterColor = elem->get("backgroundColor"); - mSelectedProperties.mBackgroundEdgeColor = elem->get("backgroundColor"); - } - - if (elem && elem->has("backgroundCenterColor")) - mSelectedProperties.mBackgroundCenterColor = elem->get("backgroundCenterColor"); + mSelectedProperties.mSize = getSelectedTileSize(); + mSelectedProperties.mPadding = mDefaultProperties.mPadding; + mSelectedProperties.mBackgroundImage = mDefaultProperties.mBackgroundImage; + mSelectedProperties.mBackgroundCornerSize = mDefaultProperties.mBackgroundCornerSize; - if (elem && elem->has("backgroundEdgeColor")) - mSelectedProperties.mBackgroundEdgeColor = elem->get("backgroundEdgeColor"); + if (elem) + applyThemeToProperties(elem, mSelectedProperties); } // Made this a static function because the ImageGridComponent need to know the default tile size @@ -147,6 +134,11 @@ bool GridTileComponent::isSelected() const return mSelected; } +void GridTileComponent::reset() +{ + setImage(""); +} + void GridTileComponent::setImage(const std::string& path) { mImage->setImage(path); @@ -163,9 +155,80 @@ void GridTileComponent::setImage(const std::shared_ptr& texture resize(); } -void GridTileComponent::setSelected(bool selected) +void GridTileComponent::setSelected(bool selected, bool allowAnimation, Vector3f* pPosition, bool force) { + if (mSelected == selected && !force) + { + return; + } + mSelected = selected; + + if (selected) + { + if (pPosition == NULL || !allowAnimation) + { + cancelAnimation(3); + + this->setSelectedZoom(1); + mAnimPosition = Vector3f(0, 0, 0); + + resize(); + } + else + { + mAnimPosition = Vector3f(pPosition->x(), pPosition->y(), pPosition->z()); + + auto func = [this](float t) + { + t -= 1; // cubic ease out + float pct = Math::lerp(0, 1, t*t*t + 1); + + this->setSelectedZoom(pct); + }; + + cancelAnimation(3); + setAnimation(new LambdaAnimation(func, 250), 0, [this] { + this->setSelectedZoom(1); + mAnimPosition = Vector3f(0, 0, 0); + }, false, 3); + } + } + else // if (!selected) + { + if (!allowAnimation) + { + cancelAnimation(3); + this->setSelectedZoom(0); + + resize(); + } + else + { + this->setSelectedZoom(1); + + auto func = [this](float t) + { + t -= 1; // cubic ease out + float pct = Math::lerp(0, 1, t*t*t + 1); + this->setSelectedZoom(1.0 - pct); + }; + + cancelAnimation(3); + setAnimation(new LambdaAnimation(func, 250), 0, [this] { + this->setSelectedZoom(0); + }, false, 3); + } + } +} + +void GridTileComponent::setSelectedZoom(float percent) +{ + if (mSelectedZoomPercent == percent) + return; + + mSelectedZoomPercent = percent; + resize(); } void GridTileComponent::setVisible(bool visible) @@ -175,14 +238,86 @@ void GridTileComponent::setVisible(bool visible) void GridTileComponent::resize() { - const GridTileProperties& currentProperties = getCurrentProperties(); + calcCurrentProperties(); + + mImage->setMaxSize(mCurrentProperties.mSize - mCurrentProperties.mPadding * 2); + mBackground.setCornerSize(mCurrentProperties.mBackgroundCornerSize); + mBackground.fitTo(mCurrentProperties.mSize - mBackground.getCornerSize() * 2); +} - mImage->setMaxSize(currentProperties.mSize - currentProperties.mPadding * 2); - mBackground.setCornerSize(currentProperties.mBackgroundCornerSize); - mBackground.fitTo(currentProperties.mSize - mBackground.getCornerSize() * 2); +unsigned int mixColors(unsigned int first, unsigned int second, float percent) +{ + unsigned char alpha0 = (first >> 24) & 0xFF; + unsigned char blue0 = (first >> 16) & 0xFF; + unsigned char green0 = (first >> 8) & 0xFF; + unsigned char red0 = first & 0xFF; + + unsigned char alpha1 = (second >> 24) & 0xFF; + unsigned char blue1 = (second >> 16) & 0xFF; + unsigned char green1 = (second >> 8) & 0xFF; + unsigned char red1 = second & 0xFF; + + unsigned char alpha = (unsigned char)(alpha0 * (1.0 - percent) + alpha1 * percent); + unsigned char blue = (unsigned char)(blue0 * (1.0 - percent) + blue1 * percent); + unsigned char green = (unsigned char)(green0 * (1.0 - percent) + green1 * percent); + unsigned char red = (unsigned char)(red0 * (1.0 - percent) + red1 * percent); + + return (alpha << 24) | (blue << 16) | (green << 8) | red; } -const GridTileProperties& GridTileComponent::getCurrentProperties() const +void GridTileComponent::calcCurrentProperties() +{ + mCurrentProperties = mSelected ? mSelectedProperties : mDefaultProperties; + + float zoomPercentInverse = 1.0 - mSelectedZoomPercent; + + if (mSelectedZoomPercent != 0.0f && mSelectedZoomPercent != 1.0f) { + if (mDefaultProperties.mSize != mSelectedProperties.mSize) { + mCurrentProperties.mSize = mDefaultProperties.mSize * zoomPercentInverse + mSelectedProperties.mSize * mSelectedZoomPercent; + } + + if (mDefaultProperties.mPadding != mSelectedProperties.mPadding) + { + mCurrentProperties.mPadding = mDefaultProperties.mPadding * zoomPercentInverse + mSelectedProperties.mPadding * mSelectedZoomPercent; + } + + if (mDefaultProperties.mImageColor != mSelectedProperties.mImageColor) + { + mCurrentProperties.mImageColor = mixColors(mDefaultProperties.mImageColor, mSelectedProperties.mImageColor, mSelectedZoomPercent); + } + + if (mDefaultProperties.mBackgroundCornerSize != mSelectedProperties.mBackgroundCornerSize) + { + mCurrentProperties.mBackgroundCornerSize = mDefaultProperties.mBackgroundCornerSize * zoomPercentInverse + mSelectedProperties.mBackgroundCornerSize * mSelectedZoomPercent; + } + + if (mDefaultProperties.mBackgroundCenterColor != mSelectedProperties.mBackgroundCenterColor) + { + mCurrentProperties.mBackgroundCenterColor = mixColors(mDefaultProperties.mBackgroundCenterColor, mSelectedProperties.mBackgroundCenterColor, mSelectedZoomPercent); + } + + if (mDefaultProperties.mBackgroundEdgeColor != mSelectedProperties.mBackgroundEdgeColor) + { + mCurrentProperties.mBackgroundEdgeColor = mixColors(mDefaultProperties.mBackgroundEdgeColor, mSelectedProperties.mBackgroundEdgeColor, mSelectedZoomPercent); + } + } +} + +Vector3f GridTileComponent::getBackgroundPosition() +{ + return mBackground.getPosition() + mPosition; +} + +std::shared_ptr GridTileComponent::getTexture() +{ + if (mImage != nullptr) + return mImage->getTexture(); + + return nullptr; +}; + +void GridTileComponent::forceSize(Vector2f size, float selectedZoom) { - return mSelected ? mSelectedProperties : mDefaultProperties; + mDefaultProperties.mSize = size; + mSelectedProperties.mSize = size * selectedZoom; } \ No newline at end of file diff --git a/es-core/src/components/GridTileComponent.h b/es-core/src/components/GridTileComponent.h index c191ce94ab..69ea962f85 100644 --- a/es-core/src/components/GridTileComponent.h +++ b/es-core/src/components/GridTileComponent.h @@ -22,7 +22,6 @@ class GridTileComponent : public GuiComponent GridTileComponent(Window* window); void render(const Transform4x4f& parentTrans) override; - void update(); virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties); // Made this a static function because the ImageGridComponent need to know the default tile max size @@ -31,23 +30,38 @@ class GridTileComponent : public GuiComponent Vector2f getSelectedTileSize() const; bool isSelected() const; + void reset(); + void setImage(const std::string& path); void setImage(const std::shared_ptr& texture); - void setSelected(bool selected); + void setSelected(bool selected, bool allowAnimation = true, Vector3f* pPosition = NULL, bool force=false); void setVisible(bool visible); + void forceSize(Vector2f size, float selectedZoom); + + Vector3f getBackgroundPosition(); + + virtual void update(int deltaTime); + + std::shared_ptr getTexture(); + private: void resize(); - const GridTileProperties& getCurrentProperties() const; + void calcCurrentProperties(); + void setSelectedZoom(float percent); std::shared_ptr mImage; NinePatchComponent mBackground; GridTileProperties mDefaultProperties; GridTileProperties mSelectedProperties; + GridTileProperties mCurrentProperties; + float mSelectedZoomPercent; bool mSelected; bool mVisible; + + Vector3f mAnimPosition; }; #endif // ES_CORE_COMPONENTS_GRID_TILE_COMPONENT_H diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 6d19454568..ef6ab47c42 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -75,6 +75,8 @@ class ImageComponent : public GuiComponent virtual void applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) override; virtual std::vector getHelpPrompts() override; + + std::shared_ptr getTexture() { return mTexture; }; private: Vector2f mTargetSize; diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index 65b329adcb..bc863c3789 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -3,16 +3,26 @@ #define ES_CORE_COMPONENTS_IMAGE_GRID_COMPONENT_H #include "Log.h" +#include "animations/LambdaAnimation.h" #include "components/IList.h" #include "resources/TextureResource.h" #include "GridTileComponent.h" +#define EXTRAITEMS 2 + enum ScrollDirection { SCROLL_VERTICALLY, SCROLL_HORIZONTALLY }; +enum ImageSource +{ + THUMBNAIL, + IMAGE, + MARQUEE +}; + struct ImageGridData { std::string texturePath; @@ -50,20 +60,23 @@ class ImageGridComponent : public IList void onSizeChanged() override; inline void setCursorChangedCallback(const std::function& func) { mCursorChangedCallback = func; } + ImageSource getImageSource() { return mImageSource; }; + protected: virtual void onCursorChanged(const CursorState& state) override; private: // TILES void buildTiles(); - void updateTiles(); - void updateTileAtPos(int tilePos, int imgPos, int bufferTop, int bufferBot); - int getStartPosition() const; + void updateTiles(bool ascending = true, bool allowAnimation = true, bool updateSelectedState = true); + void updateTileAtPos(int tilePos, int imgPos, bool allowAnimation, bool updateSelectedState); void calcGridDimension(); + bool isScrollLoop(); + + bool isVertical() { return mScrollDirection == SCROLL_VERTICALLY; }; + // IMAGES & ENTRIES - const int texBuffersBehind[4] = { 1, 1, 1, 1 }; - const int texBuffersForward[4] = { 1, 2, 3, 3 }; bool mEntriesDirty; int mLastCursor; std::string mDefaultGameTexture; @@ -71,14 +84,27 @@ class ImageGridComponent : public IList // TILES bool mLastRowPartial; + Vector2f mAutoLayout; + float mAutoLayoutZoom; + + Vector4f mPadding; Vector2f mMargin; Vector2f mTileSize; Vector2i mGridDimension; std::shared_ptr mTheme; std::vector< std::shared_ptr > mTiles; + int mStartPosition; + + float mCamera; + float mCameraDirection; + // MISCELLANEOUS + bool mAnimate; + bool mCenterSelection; + bool mScrollLoop; ScrollDirection mScrollDirection; + ImageSource mImageSource; std::function mCursorChangedCallback; }; @@ -87,6 +113,14 @@ ImageGridComponent::ImageGridComponent(Window* window) : IList::ImageGridComponent(Window* window) : IList @@ -116,19 +155,24 @@ bool ImageGridComponent::input(InputConfig* config, Input input) { if(input.value != 0) { + int idx = isVertical() ? 0 : 1; + Vector2i dir = Vector2i::Zero(); if(config->isMappedLike("up", input)) - dir[1 ^ mScrollDirection] = -1; + dir[1 ^ idx] = -1; else if(config->isMappedLike("down", input)) - dir[1 ^ mScrollDirection] = 1; + dir[1 ^ idx] = 1; else if(config->isMappedLike("left", input)) - dir[0 ^ mScrollDirection] = -1; + dir[0 ^ idx] = -1; else if(config->isMappedLike("right", input)) - dir[0 ^ mScrollDirection] = 1; + dir[0 ^ idx] = 1; if(dir != Vector2i::Zero()) { - listInput(dir.x() + dir.y() * mGridDimension.x()); + if (isVertical()) + listInput(dir.x() + dir.y() * mGridDimension.x()); + else + listInput(dir.x() + dir.y() * mGridDimension.y()); return true; } }else{ @@ -144,16 +188,23 @@ bool ImageGridComponent::input(InputConfig* config, Input input) template void ImageGridComponent::update(int deltaTime) { + GuiComponent::update(deltaTime); listUpdate(deltaTime); for(auto it = mTiles.begin(); it != mTiles.end(); it++) - (*it)->update(); + (*it)->update(deltaTime); } template void ImageGridComponent::render(const Transform4x4f& parentTrans) { Transform4x4f trans = getTransform() * parentTrans; + Transform4x4f tileTrans = trans; + + float offsetX = isVertical() ? 0.0f : mCamera * mCameraDirection * (mTileSize.x() + mMargin.x()); + float offsetY = isVertical() ? mCamera * mCameraDirection * (mTileSize.y() + mMargin.y()) : 0.0f; + + tileTrans.translate(Vector3f(offsetX, offsetY, 0.0)); if(mEntriesDirty) { @@ -180,14 +231,14 @@ void ImageGridComponent::render(const Transform4x4f& parentTrans) if(tile->isSelected()) selectedTile = tile; else - tile->render(trans); + tile->render(tileTrans); } Renderer::popClipRect(); // Render the selected image on top of the others if (selectedTile != NULL) - selectedTile->render(trans); + selectedTile->render(tileTrans); listRenderTitleOverlay(trans); @@ -211,9 +262,44 @@ void ImageGridComponent::applyTheme(const std::shared_ptr& theme, if (elem->has("margin")) mMargin = elem->get("margin") * screen; + if (elem->has("padding")) + mPadding = elem->get("padding") * Vector4f(screen.x(), screen.y(), screen.x(), screen.y()); + + if (elem->has("autoLayout")) + mAutoLayout = elem->get("autoLayout"); + + if (elem->has("autoLayoutSelectedZoom")) + mAutoLayoutZoom = elem->get("autoLayoutSelectedZoom"); + + if (elem->has("imageSource")) + { + auto direction = elem->get("imageSource"); + if (direction == "image") + mImageSource = IMAGE; + else if (direction == "marquee") + mImageSource = MARQUEE; + else + mImageSource = THUMBNAIL; + } + else + mImageSource = THUMBNAIL; + if (elem->has("scrollDirection")) mScrollDirection = (ScrollDirection)(elem->get("scrollDirection") == "horizontal"); + if (elem->has("centerSelection")) + { + mCenterSelection = (elem->get("centerSelection")); + + if (elem->has("scrollLoop")) + mScrollLoop = (elem->get("scrollLoop")); + } + + if (elem->has("animate")) + mAnimate = (elem->get("animate")); + else + mAnimate = true; + if (elem->has("gameImage")) { std::string path = elem->get("gameImage"); @@ -283,39 +369,191 @@ void ImageGridComponent::onSizeChanged() template void ImageGridComponent::onCursorChanged(const CursorState& state) { - updateTiles(); + if (mLastCursor == mCursor) + { + if (state == CURSOR_STOPPED && mCursorChangedCallback) + mCursorChangedCallback(state); - if(mCursorChangedCallback) + return; + } + + bool direction = mCursor >= mLastCursor; + int diff = direction ? mCursor - mLastCursor : mLastCursor - mCursor; + if (isScrollLoop() && diff == mEntries.size() - 1) + { + direction = !direction; + } + + int oldStart = mStartPosition; + + int dimScrollable = (isVertical() ? mGridDimension.y() : mGridDimension.x()) - 2 * EXTRAITEMS; + int dimOpposite = isVertical() ? mGridDimension.x() : mGridDimension.y(); + + int centralCol = (int)(dimScrollable - 0.5) / 2; + int maxCentralCol = dimScrollable / 2; + + int oldCol = (mLastCursor / dimOpposite); + int col = (mCursor / dimOpposite); + + int lastCol = ((mEntries.size() - 1) / dimOpposite); + + int lastScroll = std::max(0, (lastCol + 1 - dimScrollable)); + + float startPos = 0; + float endPos = 1; + + if (((GuiComponent*)this)->isAnimationPlaying(2)) + { + startPos = 0; + ((GuiComponent*)this)->cancelAnimation(2); + updateTiles(direction, false, false); + } + + if (mAnimate) { + + std::shared_ptr oldTile = nullptr; + std::shared_ptr newTile = nullptr; + + int oldIdx = mLastCursor - mStartPosition + (dimOpposite * EXTRAITEMS); + if (oldIdx >= 0 && oldIdx < mTiles.size()) + oldTile = mTiles[oldIdx]; + + int newIdx = mCursor - mStartPosition + (dimOpposite * EXTRAITEMS); + if (isScrollLoop()) { + if (newIdx < 0) + newIdx += mEntries.size(); + else if (newIdx >= mTiles.size()) + newIdx -= mEntries.size(); + } + + if (newIdx >= 0 && newIdx < mTiles.size()) + newTile = mTiles[newIdx]; + + for (auto it = mTiles.begin(); it != mTiles.end(); it++) { + if ((*it)->isSelected() && *it != oldTile && *it != newTile) { + startPos = 0; + (*it)->setSelected(false, false, nullptr); + } + } + + Vector3f oldPos = Vector3f::Zero(); + + if (oldTile != nullptr && oldTile != newTile) { + oldPos = oldTile->getBackgroundPosition(); + oldTile->setSelected(false, true, nullptr, true); + } + + if (newTile != nullptr) + newTile->setSelected(true, true, oldPos == Vector3f::Zero() ? nullptr : &oldPos, true); + } + + int firstVisibleCol = mStartPosition / dimOpposite; + + if ((col < centralCol || (col == 0 && col == centralCol)) && !mCenterSelection) + mStartPosition = 0; + else if ((col - centralCol) > lastScroll && !mCenterSelection && !isScrollLoop()) + mStartPosition = lastScroll * dimOpposite; + else if ((maxCentralCol != centralCol && col == firstVisibleCol + maxCentralCol) || col == firstVisibleCol + centralCol) + { + if (col == firstVisibleCol + maxCentralCol) + mStartPosition = (col - maxCentralCol) * dimOpposite; + else + mStartPosition = (col - centralCol) * dimOpposite; + } + else + { + if (oldCol == firstVisibleCol + maxCentralCol) + mStartPosition = (col - maxCentralCol) * dimOpposite; + else + mStartPosition = (col - centralCol) * dimOpposite; + } + + auto lastCursor = mLastCursor; + mLastCursor = mCursor; + + mCameraDirection = direction ? -1.0f : 1.0f; + mCamera = 0; + + if (lastCursor < 0 || !mAnimate) + { + updateTiles(direction, mAnimate && (lastCursor >= 0 || isScrollLoop())); + + if (mCursorChangedCallback) + mCursorChangedCallback(state); + + return; + } + + if (mCursorChangedCallback) mCursorChangedCallback(state); + + bool moveCamera = (oldStart != mStartPosition); + + auto func = [this, startPos, endPos, moveCamera](float t) + { + if (!moveCamera) + return; + + t -= 1; // cubic ease out + float pct = Math::lerp(0, 1, t*t*t + 1); + t = startPos * (1.0f - pct) + endPos * pct; + + mCamera = t; + }; + + ((GuiComponent*)this)->setAnimation(new LambdaAnimation(func, 250), 0, [this, direction] { + mCamera = 0; + updateTiles(direction, false); + }, false, 2); } + // Create and position tiles (mTiles) template void ImageGridComponent::buildTiles() { + mStartPosition = 0; mTiles.clear(); calcGridDimension(); + if (mCenterSelection) + { + int dimScrollable = (isVertical() ? mGridDimension.y() : mGridDimension.x()) - 2 * EXTRAITEMS; + mStartPosition -= (int) Math::floorf(dimScrollable / 2.0f); + } + Vector2f tileDistance = mTileSize + mMargin; - Vector2f bufferSize = Vector2f(mScrollDirection == SCROLL_HORIZONTALLY ? tileDistance.x() * texBuffersForward[3] : 0, - mScrollDirection == SCROLL_VERTICALLY ? tileDistance.y() * texBuffersForward[3] : 0); - Vector2f startPosition = mTileSize / 2 - bufferSize; + + if (mAutoLayout.x() != 0 && mAutoLayout.y() != 0) + { + auto x = (mSize.x() - (mMargin.x() * (mAutoLayout.x() - 1)) - mPadding.x() - mPadding.z()) / (int) mAutoLayout.x(); + auto y = (mSize.y() - (mMargin.y() * (mAutoLayout.y() - 1)) - mPadding.y() - mPadding.w()) / (int) mAutoLayout.y(); + + mTileSize = Vector2f(x, y); + tileDistance = mTileSize + mMargin; + } + + bool vert = isVertical(); + + Vector2f startPosition = mTileSize / 2; + + startPosition += mPadding.v2(); int X, Y; // Layout tile size and position - for(int y = 0; y < mGridDimension.y(); y++) + for (int y = 0; y < (vert ? mGridDimension.y() : mGridDimension.x()); y++) { - for(int x = 0; x < mGridDimension.x(); x++) + for (int x = 0; x < (vert ? mGridDimension.x() : mGridDimension.y()); x++) { // Create tiles auto tile = std::make_shared(mWindow); // In Vertical mod, tiles are ordered from left to right, then from top to bottom // In Horizontal mod, tiles are ordered from top to bottom, then from left to right - X = mScrollDirection == SCROLL_VERTICALLY ? x : y; - Y = mScrollDirection == SCROLL_VERTICALLY ? y : x; + X = vert ? x : y - EXTRAITEMS; + Y = vert ? y - EXTRAITEMS : x; tile->setPosition(X * tileDistance.x() + startPosition.x(), Y * tileDistance.y() + startPosition.y()); tile->setOrigin(0.5f, 0.5f); @@ -324,13 +562,16 @@ void ImageGridComponent::buildTiles() if (mTheme) tile->applyTheme(mTheme, "grid", "gridtile", ThemeFlags::ALL); + if (mAutoLayout.x() != 0 && mAutoLayout.y() != 0) + tile->forceSize(mTileSize, mAutoLayoutZoom); + mTiles.push_back(tile); } } } template -void ImageGridComponent::updateTiles() +void ImageGridComponent::updateTiles(bool ascending, bool allowAnimation, bool updateSelectedState) { if (!mTiles.size()) return; @@ -349,104 +590,91 @@ void ImageGridComponent::updateTiles() return; } - // 1 if scrolling down, -1 if scrolling up - int scrollDirection = mCursor >= mLastCursor ? 1 : -1; + // Temporary store previous texture so they can't be unloaded + std::vector> previousTextures; + for (int ti = 0; ti < (int)mTiles.size(); ti++) + { + std::shared_ptr tile = mTiles.at(ti); + previousTextures.push_back(tile->getTexture()); + } // If going down, update from top to bottom // If going up, update from bottom to top - int ti = scrollDirection == 1 ? 0 : (int)mTiles.size() - 1; - int end = scrollDirection == 1 ? (int)mTiles.size() : -1; - - int img = getStartPosition(); - if (scrollDirection == -1) - img += (int)mTiles.size() - 1; - - // Calculate buffer size depending on scroll speed and direction - int bufferBehind = (texBuffersForward[3] - texBuffersBehind[mScrollTier]) * mGridDimension.x(); - int bufferForward = (texBuffersForward[3] - texBuffersForward[mScrollTier]) * mGridDimension.x(); + int scrollDirection = ascending ? 1 : -1; + int ti = ascending ? 0 : (int)mTiles.size() - 1; + int end = ascending ? (int)mTiles.size() : -1; + int img = mStartPosition + ti; - int bufferTop = scrollDirection == 1 ? bufferBehind : bufferForward; - int bufferBot = scrollDirection == 1 ? bufferForward : bufferBehind; + img -= EXTRAITEMS * (isVertical() ? mGridDimension.x() : mGridDimension.y()); // Update the tiles while (ti != end) { - updateTileAtPos(ti, img, bufferTop, bufferBot); + updateTileAtPos(ti, img, allowAnimation, updateSelectedState); ti += scrollDirection; img += scrollDirection; } + if (updateSelectedState) + mLastCursor = mCursor; + mLastCursor = mCursor; } template -void ImageGridComponent::updateTileAtPos(int tilePos, int imgPos, int bufferTop, int bufferBot) +void ImageGridComponent::updateTileAtPos(int tilePos, int imgPos, bool allowAnimation, bool updateSelectedState) { std::shared_ptr tile = mTiles.at(tilePos); + if(isScrollLoop()) + { + if (imgPos < 0) + imgPos += mEntries.size(); + else if (imgPos >= size()) + imgPos -= mEntries.size(); + } + // If we have more tiles than we have to display images on screen, hide them - if(imgPos < 0 || imgPos >= size() - || tilePos < bufferTop || tilePos >= (int)mTiles.size() - bufferBot) // Same for tiles out of the buffer + if(imgPos < 0 || imgPos >= size() || tilePos < 0 || tilePos >= (int) mTiles.size()) // Same for tiles out of the buffer { - tile->setSelected(false); - tile->setImage(""); + if (updateSelectedState) + tile->setSelected(false, allowAnimation); + + tile->reset(); tile->setVisible(false); } else { - tile->setSelected(imgPos == mCursor); tile->setVisible(true); std::string imagePath = mEntries.at(imgPos).data.texturePath; + if (ResourceManager::getInstance()->fileExists(imagePath)) - { tile->setImage(imagePath); - } + else if (mEntries.at(imgPos).object->getType() == 2) + tile->setImage(mDefaultFolderTexture); else - { - // FileType::FOLDER = 2, but FileData is our template parameter T, - // so we don't want to bring that dependence to FileData here - if (mEntries.at(imgPos).object->getType() == 2) - tile->setImage(mDefaultFolderTexture); - else - tile->setImage(mDefaultGameTexture); - } - } -} - -// Return the starting position (the number of the game which will be displayed on top left of the screen) -template -int ImageGridComponent::getStartPosition() const -{ - // The "partialRow" variable exist because we want to keep the same positioning behavior in both - // case, whenever we have an integer number of rows or not (the last partial row is ignored when - // calculating position and the cursor shouldn't end up in this row when close to the end) - int partialRow = (int)mLastRowPartial; - - int cursorRow = mCursor / mGridDimension.x(); + tile->setImage(mDefaultGameTexture); - int start = (cursorRow - ((mGridDimension.y() - partialRow) / 2)) * mGridDimension.x(); + if (updateSelectedState) + { + if (imgPos == mCursor && mCursor != mLastCursor) + { + int dif = mCursor - tilePos; + int idx = mLastCursor - dif; - // Number of tiles which are just used as a buffer for texture loading - int bufferSize = texBuffersForward[3] * mGridDimension.x(); + if (idx < 0 || idx >= mTiles.size()) + idx = 0; - if(start + (mGridDimension.x() * (mGridDimension.y() - partialRow)) >= (int)mEntries.size() + bufferSize) - { - // If we are at the end put the row as close as we can and no higher, using the following formula - // Where E is the nb of entries, X the grid x dim (nb of column), Y the grid y dim (nb of line) - // start = first tile of last row - nb column * (nb line - 1) - // = (E - 1) / X * X - X * (Y - 1) - // = X * ((E - 1) / X - Y + 1) - start = mGridDimension.x() * (((int)mEntries.size() - 1) / mGridDimension.x() - mGridDimension.y() + 1 + partialRow) + bufferSize; - } + Vector3f pos = mTiles.at(idx)->getBackgroundPosition(); + tile->setSelected(true, allowAnimation, &pos); + } + else + tile->setSelected(imgPos == mCursor, allowAnimation); + } - if(start < -bufferSize) - { - start = -bufferSize; } - - return start; } // Calculate how much tiles of size mTileSize we can fit in a grid of size mSize using a margin of size mMargin @@ -457,24 +685,34 @@ void ImageGridComponent::calcGridDimension() // <=> COLUMNS = (GRID_SIZE + MARGIN) / (TILE_SIZE + MARGIN) Vector2f gridDimension = (mSize + mMargin) / (mTileSize + mMargin); + if (mAutoLayout.x() != 0 && mAutoLayout.y() != 0) + gridDimension = mAutoLayout; + mLastRowPartial = Math::floorf(gridDimension.y()) != gridDimension.y(); // Ceil y dim so we can display partial last row mGridDimension = Vector2i(gridDimension.x(), Math::ceilf(gridDimension.y())); - // Invert dimensions for horizontally scrolling grid - if (mScrollDirection == SCROLL_HORIZONTALLY) - mGridDimension = Vector2i(mGridDimension.y(), mGridDimension.x()); - // Grid dimension validation if (mGridDimension.x() < 1) LOG(LogError) << "Theme defined grid X dimension below 1"; if (mGridDimension.y() < 1) LOG(LogError) << "Theme defined grid Y dimension below 1"; - // Add extra tiles to both side depending on max texture buffer - mGridDimension.y() += texBuffersForward[3] * 2; -}; + // Add extra tiles to both sides : Add EXTRAITEMS before, EXTRAITEMS after + if (isVertical()) + mGridDimension.y() += 2 * EXTRAITEMS; + else + mGridDimension.x() += 2 * EXTRAITEMS; +} +template +bool ImageGridComponent::isScrollLoop() { + if (!mScrollLoop) + return false; + if (isVertical()) + return (mGridDimension.x() * (mGridDimension.y() - 2 * EXTRAITEMS)) <= mEntries.size(); + return (mGridDimension.y() * (mGridDimension.x() - 2 * EXTRAITEMS)) <= mEntries.size(); +}; #endif // ES_CORE_COMPONENTS_IMAGE_GRID_COMPONENT_H diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index b9ba8cbe6c..97b4616d4b 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -222,24 +222,30 @@ namespace Utils } // removeParenthesis - stringVector commaStringToVector(const std::string& _string) + stringVector delimitedStringToVector(const std::string& _string, const std::string& _delimiter, bool sort) { stringVector vector; size_t start = 0; - size_t comma = _string.find(","); + size_t comma = _string.find(_delimiter); while(comma != std::string::npos) { vector.push_back(_string.substr(start, comma - start)); start = comma + 1; - comma = _string.find(",", start); + comma = _string.find(_delimiter, start); } vector.push_back(_string.substr(start)); - std::sort(vector.begin(), vector.end()); + if (sort) + std::sort(vector.begin(), vector.end()); return vector; + } // delimitedStringToVector + + stringVector commaStringToVector(const std::string& _string, bool sort) + { + return delimitedStringToVector(_string, ",", sort); } // commaStringToVector std::string vectorToCommaString(stringVector _vector) diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h index 39fd9559dc..7639d9cab8 100644 --- a/es-core/src/utils/StringUtil.h +++ b/es-core/src/utils/StringUtil.h @@ -11,22 +11,23 @@ namespace Utils { typedef std::vector stringVector; - unsigned int chars2Unicode (const std::string& _string, size_t& _cursor); - std::string unicode2Chars (const unsigned int _unicode); - size_t nextCursor (const std::string& _string, const size_t _cursor); - size_t prevCursor (const std::string& _string, const size_t _cursor); - size_t moveCursor (const std::string& _string, const size_t _cursor, const int _amount); - std::string toLower (const std::string& _string); - std::string toUpper (const std::string& _string); - std::string trim (const std::string& _string); - std::string replace (const std::string& _string, const std::string& _replace, const std::string& _with); - bool startsWith (const std::string& _string, const std::string& _start); - bool endsWith (const std::string& _string, const std::string& _end); - std::string removeParenthesis (const std::string& _string); - stringVector commaStringToVector(const std::string& _string); - std::string vectorToCommaString(stringVector _vector); - std::string format (const char* _string, ...); - std::string scramble (const std::string& _input, const std::string& key); + unsigned int chars2Unicode (const std::string& _string, size_t& _cursor); + std::string unicode2Chars (const unsigned int _unicode); + size_t nextCursor (const std::string& _string, const size_t _cursor); + size_t prevCursor (const std::string& _string, const size_t _cursor); + size_t moveCursor (const std::string& _string, const size_t _cursor, const int _amount); + std::string toLower (const std::string& _string); + std::string toUpper (const std::string& _string); + std::string trim (const std::string& _string); + std::string replace (const std::string& _string, const std::string& _replace, const std::string& _with); + bool startsWith (const std::string& _string, const std::string& _start); + bool endsWith (const std::string& _string, const std::string& _end); + std::string removeParenthesis (const std::string& _string); + stringVector delimitedStringToVector(const std::string& _string, const std::string& _delimiter, bool sort = false); + stringVector commaStringToVector (const std::string& _string, bool sort = false); + std::string vectorToCommaString (stringVector _vector); + std::string format (const char* _string, ...); + std::string scramble (const std::string& _input, const std::string& key); } // String:: From 1de8d5caaa732d04cff1f290272e4a6f5ed2854d Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 24 Sep 2019 04:02:54 +0100 Subject: [PATCH 390/603] added ISSUE_TEMPLATE.md from RetroPie-Setup to direct users to the forum first --- .github/ISSUE_TEMPLATE.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..8d8bb3a836 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,7 @@ +Please start a topic on the RetroPie forum before opening an issue - https://retropie.org.uk/forum/ + +This includes edit suggestions for the wiki. There are more people to help on the forum. + +Once a problem has been verified on the forum, an issue can be opened here. + +Please remove this text before posting. From 8ea936b7d7a5e9c0f7a8f6600b892cc3394e3095 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Sat, 28 Sep 2019 23:06:58 -0400 Subject: [PATCH 391/603] initial github actions config. runs basic build under ubuntu --- .github/workflows/ccpp.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/ccpp.yml diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml new file mode 100644 index 0000000000..a020bef060 --- /dev/null +++ b/.github/workflows/ccpp.yml @@ -0,0 +1,22 @@ +name: C/C++ CI + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + with: + submodules: true + - name: configure + run: | + sudo apt-get update + sudo apt-get install libsdl2-dev libfreeimage-dev libfreetype6-dev libcurl4-openssl-dev rapidjson-dev libasound2-dev libgl1-mesa-dev build-essential cmake fonts-droid-fallback libvlc-dev libvlccore-dev vlc-bin + shell: bash + - name: make + run: | + cmake . + make + shell: bash From 9dfbaa556667d47c9d035dfcb420323b0434fc45 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Mon, 7 Oct 2019 22:25:39 -0400 Subject: [PATCH 392/603] fix assignment of gridtile theme properties --- es-core/src/components/GridTileComponent.cpp | 26 ++++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp index 889076ed4e..ec7e329eac 100644 --- a/es-core/src/components/GridTileComponent.cpp +++ b/es-core/src/components/GridTileComponent.cpp @@ -60,36 +60,36 @@ void GridTileComponent::update(int deltaTime) resize(); } -void applyThemeToProperties(const ThemeData::ThemeElement* elem, GridTileProperties properties) +void applyThemeToProperties(const ThemeData::ThemeElement* elem, GridTileProperties* properties) { Vector2f screen = Vector2f((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); if (elem->has("size")) - properties.mSize = elem->get("size") * screen; + properties->mSize = elem->get("size") * screen; if (elem->has("padding")) - properties.mPadding = elem->get("padding"); + properties->mPadding = elem->get("padding"); if (elem->has("imageColor")) - properties.mImageColor = elem->get("imageColor"); + properties->mImageColor = elem->get("imageColor"); if (elem->has("backgroundImage")) - properties.mBackgroundImage = elem->get("backgroundImage"); + properties->mBackgroundImage = elem->get("backgroundImage"); if (elem->has("backgroundCornerSize")) - properties.mBackgroundCornerSize = elem->get("backgroundCornerSize"); + properties->mBackgroundCornerSize = elem->get("backgroundCornerSize"); if (elem->has("backgroundColor")) { - properties.mBackgroundCenterColor = elem->get("backgroundColor"); - properties.mBackgroundEdgeColor = elem->get("backgroundColor"); + properties->mBackgroundCenterColor = elem->get("backgroundColor"); + properties->mBackgroundEdgeColor = elem->get("backgroundColor"); } if (elem->has("backgroundCenterColor")) - properties.mBackgroundCenterColor = elem->get("backgroundCenterColor"); + properties->mBackgroundCenterColor = elem->get("backgroundCenterColor"); if (elem->has("backgroundEdgeColor")) - properties.mBackgroundEdgeColor = elem->get("backgroundEdgeColor"); + properties->mBackgroundEdgeColor = elem->get("backgroundEdgeColor"); } void GridTileComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& /*element*/, unsigned int /*properties*/) @@ -99,7 +99,7 @@ void GridTileComponent::applyTheme(const std::shared_ptr& theme, cons // Apply theme to the default gridtile const ThemeData::ThemeElement* elem = theme->getElement(view, "default", "gridtile"); if (elem) - applyThemeToProperties(elem, mDefaultProperties); + applyThemeToProperties(elem, &mDefaultProperties); // Apply theme to the selected gridtile // NOTE that some of the default gridtile properties influence on the selected gridtile properties @@ -112,7 +112,7 @@ void GridTileComponent::applyTheme(const std::shared_ptr& theme, cons mSelectedProperties.mBackgroundCornerSize = mDefaultProperties.mBackgroundCornerSize; if (elem) - applyThemeToProperties(elem, mSelectedProperties); + applyThemeToProperties(elem, &mSelectedProperties); } // Made this a static function because the ImageGridComponent need to know the default tile size @@ -320,4 +320,4 @@ void GridTileComponent::forceSize(Vector2f size, float selectedZoom) { mDefaultProperties.mSize = size; mSelectedProperties.mSize = size * selectedZoom; -} \ No newline at end of file +} From 8d759c7c5dd32ddb6f811b28abbe352e98a6923c Mon Sep 17 00:00:00 2001 From: John Rassa Date: Wed, 9 Oct 2019 18:51:33 -0400 Subject: [PATCH 393/603] add 'animate' to theme properties for imagegrid; fix blurriness on image upscaling --- es-core/src/ThemeData.cpp | 1 + es-core/src/renderers/Renderer_GL21.cpp | 2 +- es-core/src/renderers/Renderer_GLES10.cpp | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 18114235e4..2d1be3d048 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -42,6 +42,7 @@ std::map> The { "scrollDirection", STRING }, { "centerSelection", BOOLEAN }, { "scrollLoop", BOOLEAN }, + { "animate", BOOLEAN }, { "zIndex", FLOAT } } }, { "gridtile", { { "size", NORMALIZED_PAIR }, diff --git a/es-core/src/renderers/Renderer_GL21.cpp b/es-core/src/renderers/Renderer_GL21.cpp index a792bfab24..986fa94beb 100644 --- a/es-core/src/renderers/Renderer_GL21.cpp +++ b/es-core/src/renderers/Renderer_GL21.cpp @@ -105,7 +105,7 @@ namespace Renderer glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _linear ? GL_LINEAR : GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, _linear ? GL_LINEAR : GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); diff --git a/es-core/src/renderers/Renderer_GLES10.cpp b/es-core/src/renderers/Renderer_GLES10.cpp index bc37dd7fe9..9019e79e95 100644 --- a/es-core/src/renderers/Renderer_GLES10.cpp +++ b/es-core/src/renderers/Renderer_GLES10.cpp @@ -105,7 +105,7 @@ namespace Renderer glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _linear ? GL_LINEAR : GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, _linear ? GL_LINEAR : GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); From 94b2821eb7eeefbf61e5ae0066b3b60475cd8a92 Mon Sep 17 00:00:00 2001 From: John Rassa Date: Wed, 6 Nov 2019 20:22:30 -0500 Subject: [PATCH 394/603] repopulate list after applying theme to ensure image source is updated --- es-app/src/views/gamelist/GridGameListView.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 5a3b8bf436..636c885d6b 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -179,6 +179,8 @@ void GridGameListView::onThemeChanged(const std::shared_ptr& theme) mDescription.setSize(mDescContainer.getSize().x(), 0); mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | ThemeFlags::ORIGIN | TEXT | ROTATION)); + populateList(mRoot->getChildrenListToDisplay()); + sortChildren(); } From b46c0828216233bc98fc7856fd9b168aa39c0c69 Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Wed, 27 Nov 2019 09:52:35 +0200 Subject: [PATCH 395/603] Add scraping support for ChannelF, OpenBOR, Solarus and ZX81 Sinclair --- es-app/src/PlatformId.cpp | 4 ++++ es-app/src/PlatformId.h | 4 ++++ es-app/src/scrapers/ScreenScraper.cpp | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 54a1a977e0..a4fa7d4ab2 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -36,6 +36,7 @@ namespace PlatformIds "nds", // nintendo DS "fds", // Famicom Disk System "nes", // nintendo entertainment system + "channelf", // Fairchild ChannelF "gb", // game boy "gba", // game boy advance "gbc", // game boy color @@ -44,6 +45,7 @@ namespace PlatformIds "wiiu", "virtualboy", "gameandwatch", + "openbor", "pc", "sega32x", "segacd", @@ -63,11 +65,13 @@ namespace PlatformIds "snes", // super nintendo entertainment system "scummvm", "x6800", + "solarus", "pcengine", // (aka turbografx-16) HuCards only "pcenginecd", // (aka turbografx-16) CD-ROMs only "wonderswan", "wonderswancolor", "zxspectrum", + "zx81", "videopac", "vectrex", "trs-80", diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index a4a53f861b..8771fc10fc 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -37,6 +37,7 @@ namespace PlatformIds NINTENDO_DS, FAMICOM_DISK_SYSTEM, NINTENDO_ENTERTAINMENT_SYSTEM, + FAIRCHILD_CHANNELF, GAME_BOY, GAME_BOY_ADVANCE, GAME_BOY_COLOR, @@ -45,6 +46,7 @@ namespace PlatformIds NINTENDO_WII_U, NINTENDO_VIRTUAL_BOY, NINTENDO_GAME_AND_WATCH, + OPENBOR, PC, SEGA_32X, SEGA_CD, @@ -64,11 +66,13 @@ namespace PlatformIds SUPER_NINTENDO, SCUMMVM, SHARP_X6800, + SOLARUS, TURBOGRAFX_16, // (aka PC Engine) HuCards only TURBOGRAFX_CD, // (aka PC Engine) CD-ROMs only WONDERSWAN, WONDERSWAN_COLOR, ZX_SPECTRUM, + ZX81_SINCLAR, VIDEOPAC_ODYSSEY2, VECTREX, TRS80_COLOR_COMPUTER, diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index 7be4ebbe47..13ee04a6d4 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -46,6 +46,7 @@ const std::map screenscraper_platformid_map{ { NINTENDO_DS, 15 }, { FAMICOM_DISK_SYSTEM, 106 }, { NINTENDO_ENTERTAINMENT_SYSTEM, 3 }, + { FAIRCHILD_CHANNELF, 80 }, { GAME_BOY, 9 }, { GAME_BOY_ADVANCE, 12 }, { GAME_BOY_COLOR, 10 }, @@ -55,6 +56,7 @@ const std::map screenscraper_platformid_map{ { NINTENDO_VIRTUAL_BOY, 11 }, { NINTENDO_GAME_AND_WATCH, 52 }, { PC, 135 }, + { OPENBOR, 214 }, { SCUMMVM, 123}, { SEGA_32X, 19 }, { SEGA_CD, 20 }, @@ -66,6 +68,7 @@ const std::map screenscraper_platformid_map{ { SEGA_SATURN, 22 }, { SEGA_SG1000, 109 }, { SHARP_X6800, 79}, + { SOLARUS, 223 }, { PLAYSTATION, 57 }, { PLAYSTATION_2, 58 }, { PLAYSTATION_3, 59 }, @@ -78,6 +81,7 @@ const std::map screenscraper_platformid_map{ { WONDERSWAN, 45 }, { WONDERSWAN_COLOR, 46 }, { ZX_SPECTRUM, 76 }, + { ZX81_SINCLAR, 77 }, { VIDEOPAC_ODYSSEY2, 104 }, { VECTREX, 102 }, { TRS80_COLOR_COMPUTER, 144 }, From c48c2ce56f0b2872b16df8af94989ad9ab85ee6c Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Tue, 3 Dec 2019 15:11:35 +0200 Subject: [PATCH 396/603] fix 'DateTimeEditComponent' output formatting. If the display mode is `DISP_DATE`, ignore the `mTime` field when calculating the output. This fixes the size calculation of the component. Fixes https://github.com/RetroPie/EmulationStation/issues/385. --- es-core/src/components/DateTimeEditComponent.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/es-core/src/components/DateTimeEditComponent.cpp b/es-core/src/components/DateTimeEditComponent.cpp index fef38aa478..54b1b10114 100644 --- a/es-core/src/components/DateTimeEditComponent.cpp +++ b/es-core/src/components/DateTimeEditComponent.cpp @@ -200,6 +200,8 @@ std::string DateTimeEditComponent::getDisplayString(DisplayMode mode) const fmt = "%m/%d/%Y"; break; case DISP_DATE_TIME: + if(mTime.getTime() == 0) + return "unknown"; fmt = "%m/%d/%Y %H:%M:%S"; break; case DISP_RELATIVE_TO_NOW: @@ -227,9 +229,6 @@ std::string DateTimeEditComponent::getDisplayString(DisplayMode mode) const break; } - if(mTime.getTime() == 0) - return "unknown"; - return Utils::Time::timeToString(mTime, fmt); } From dc94060e7ed73ceb4903f28ef40752405e81fe41 Mon Sep 17 00:00:00 2001 From: Cristi Mitrana Date: Mon, 9 Dec 2019 20:06:49 +0200 Subject: [PATCH 397/603] getGenericPath: don't remove trailing '/' when path is '/'. This prevents 'getAbsolutePath' to get into a loop with an empty path and EmulationStation to crash when the `$CWD` is `/`. --- es-core/src/utils/FileSystemUtil.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index a30d0ca2d7..1987053616 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -237,8 +237,8 @@ namespace Utils while((offset = path.find("//")) != std::string::npos) path.erase(offset, 1); - // remove trailing '/' - while(path.length() && ((offset = path.find_last_of('/')) == (path.length() - 1))) + // remove trailing '/' when the path is more than a simple '/' + while(path.length() > 1 && ((offset = path.find_last_of('/')) == (path.length() - 1))) path.erase(offset, 1); // return generic path From a136179fc976e8a19e9fee365e9b61388e934ea1 Mon Sep 17 00:00:00 2001 From: verybadsoldier Date: Sat, 24 Aug 2019 16:22:02 +0200 Subject: [PATCH 398/603] save also metadata that have default values. they might not had default values on start so they have to be saved --- es-app/src/CollectionSystemManager.cpp | 5 +++++ es-app/src/FileData.cpp | 2 ++ es-app/src/Gamelist.cpp | 12 +++++++----- es-app/src/MetaData.cpp | 11 ----------- es-app/src/MetaData.h | 2 -- es-app/src/SystemData.cpp | 22 +++++++++++++++++----- es-app/src/SystemData.h | 2 ++ es-app/src/guis/GuiMenu.cpp | 16 ++++++++++++---- es-app/src/guis/GuiMetaDataEd.cpp | 2 ++ es-core/src/Settings.cpp | 15 ++++++++++++++- es-core/src/Settings.h | 1 + 11 files changed, 62 insertions(+), 28 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index ea3f629da7..0315b5cc2f 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -448,6 +448,8 @@ void CollectionSystemManager::exitEditMode() mWindow->setInfoPopup(s); mIsEditingCustom = false; mEditingCollection = "Favorites"; + + mEditingCollectionSystemData->system->onMetaDataSavePoint(); } // adds or removes a game from a specific collection @@ -521,6 +523,9 @@ bool CollectionSystemManager::toggleGameInCollection(FileData* file) md->set("favorite", "false"); } file->getSourceFileData()->getSystem()->getIndex()->addToIndex(file); + + file->getSourceFileData()->getSystem()->onMetaDataSavePoint(); + refreshCollectionSystems(file->getSourceFileData()); } if (adding) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 2238c60f92..1b98a35cba 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -309,6 +309,8 @@ void FileData::launchGame(Window* window) //update last played time gameToUpdate->metadata.set("lastplayed", Utils::Time::DateTime(Utils::Time::now())); CollectionSystemManager::get()->refreshCollectionSystems(gameToUpdate); + + gameToUpdate->mSystem->onMetaDataSavePoint(); } CollectionFileData::CollectionFileData(FileData* file, SystemData* system) diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 14af11757d..3136704200 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -1,5 +1,7 @@ #include "Gamelist.h" +#include + #include "utils/FileSystemUtil.h" #include "FileData.h" #include "FileFilterIndex.h" @@ -217,11 +219,6 @@ void updateGamelist(SystemData* system) { const char* tag = ((*fit)->getType() == GAME) ? "game" : "folder"; - // check if current file has metadata, if no, skip it as it wont be in the gamelist anyway. - if ((*fit)->metadata.isDefault()) { - continue; - } - // do not touch if it wasn't changed anyway if (!(*fit)->metadata.wasChanged()) continue; @@ -255,6 +252,8 @@ void updateGamelist(SystemData* system) //now write the file if (numUpdated > 0) { + const auto startTs = std::chrono::system_clock::now(); + //make sure the folders leading up to this path exist (or the write will fail) std::string xmlWritePath(system->getGamelistPath(true)); Utils::FileSystem::createDirectory(Utils::FileSystem::getParent(xmlWritePath)); @@ -264,6 +263,9 @@ void updateGamelist(SystemData* system) if (!doc.save_file(xmlWritePath.c_str())) { LOG(LogError) << "Error saving gamelist.xml to \"" << xmlWritePath << "\" (for system " << system->getName() << ")!"; } + + const auto endTs = std::chrono::system_clock::now(); + LOG(LogInfo) << "Saved gamelist.xml for system \"" << system->getName() << "\" in " << std::chrono::duration_cast(endTs - startTs).count() << " ms"; } }else{ LOG(LogError) << "Found no root folder for system \"" << system->getName() << "\"!"; diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 8a977e9509..0851fbdf4f 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -140,17 +140,6 @@ float MetaDataList::getFloat(const std::string& key) const return (float)atof(get(key).c_str()); } -bool MetaDataList::isDefault() -{ - const std::vector& mdd = getMDD(); - - for (unsigned int i = 1; i < mMap.size(); i++) { - if (mMap.at(mdd[i].key) != mdd[i].defaultValue) return false; - } - - return true; -} - bool MetaDataList::wasChanged() const { return mWasChanged; diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 6ed8f6d44c..52e1eddc11 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -55,8 +55,6 @@ class MetaDataList int getInt(const std::string& key) const; float getFloat(const std::string& key) const; - bool isDefault(); - bool wasChanged() const; void resetChangedFlag(); diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index d6e72cfd32..3769d2a41a 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -50,11 +50,8 @@ SystemData::SystemData(const std::string& name, const std::string& fullName, Sys SystemData::~SystemData() { - //save changed game data back to xml - if(!Settings::getInstance()->getBool("IgnoreGamelist") && Settings::getInstance()->getBool("SaveGamelistsOnExit") && !mIsCollectionSystem) - { - updateGamelist(this); - } + if(Settings::getInstance()->getString("SaveGamelistsMode") == "on exit") + writeMetaData(); delete mRootFolder; delete mFilterIndex; @@ -502,3 +499,18 @@ void SystemData::loadTheme() mTheme = std::make_shared(); // reset to empty } } + +void SystemData::writeMetaData() { + if(Settings::getInstance()->getBool("IgnoreGamelist") || mIsCollectionSystem) + return; + + //save changed game data back to xml + updateGamelist(this); +} + +void SystemData::onMetaDataSavePoint() { + if(Settings::getInstance()->getString("SaveGamelistsMode") != "always") + return; + + writeMetaData(); +} diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index ad0456b3c4..bc8005c380 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -68,6 +68,7 @@ class SystemData void loadTheme(); FileFilterIndex* getIndex() { return mFilterIndex; }; + void onMetaDataSavePoint(); private: bool mIsCollectionSystem; @@ -81,6 +82,7 @@ class SystemData void populateFolder(FileData* folder); void indexAllGameFilters(const FileData* folder); void setIsGameSystemStatus(); + void writeMetaData(); FileFilterIndex* mFilterIndex; diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 59d8ae4150..c8b4e73d81 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -400,10 +400,18 @@ void GuiMenu::openOtherSettings() }); // gamelists - auto save_gamelists = std::make_shared(mWindow); - save_gamelists->setState(Settings::getInstance()->getBool("SaveGamelistsOnExit")); - s->addWithLabel("SAVE METADATA ON EXIT", save_gamelists); - s->addSaveFunc([save_gamelists] { Settings::getInstance()->setBool("SaveGamelistsOnExit", save_gamelists->getState()); }); + auto gamelistsSaveMode = std::make_shared< OptionListComponent >(mWindow, "SAVE METADATA", false); + std::vector saveModes; + saveModes.push_back("on exit"); + saveModes.push_back("always"); + saveModes.push_back("never"); + + for(auto it = saveModes.cbegin(); it != saveModes.cend(); it++) + gamelistsSaveMode->add(*it, *it, Settings::getInstance()->getString("SaveGamelistsMode") == *it); + s->addWithLabel("SAVE METADATA", gamelistsSaveMode); + s->addSaveFunc([gamelistsSaveMode] { + Settings::getInstance()->setString("SaveGamelistsMode", gamelistsSaveMode->getSelected()); + }); auto parse_gamelists = std::make_shared(mWindow); parse_gamelists->setState(Settings::getInstance()->getBool("ParseGamelistOnly")); diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index f07a5061e6..606dd203ac 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -199,6 +199,8 @@ void GuiMetaDataEd::save() // update respective Collection Entries CollectionSystemManager::get()->refreshCollectionSystems(mScraperParams.game); + + mScraperParams.system->onMetaDataSavePoint(); } void GuiMetaDataEd::fetch() diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 455bea453a..4b0f63c082 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -76,7 +76,6 @@ void Settings::setDefaults() mBoolMap["HideConsole"] = true; mBoolMap["QuickSystemSelect"] = true; mBoolMap["MoveCarousel"] = true; - mBoolMap["SaveGamelistsOnExit"] = true; mBoolMap["Debug"] = false; mBoolMap["DebugGrid"] = false; @@ -97,6 +96,7 @@ void Settings::setDefaults() mStringMap["ScreenSaverBehavior"] = "dim"; mStringMap["Scraper"] = "TheGamesDB"; mStringMap["GamelistViewStyle"] = "automatic"; + mStringMap["SaveGamelistsMode"] = "on exit"; mBoolMap["ScreenSaverControls"] = true; mStringMap["ScreenSaverGameInfo"] = "never"; @@ -228,6 +228,19 @@ void Settings::loadFile() setFloat(node.attribute("name").as_string(), node.attribute("value").as_float()); for(pugi::xml_node node = doc.child("string"); node; node = node.next_sibling("string")) setString(node.attribute("name").as_string(), node.attribute("value").as_string()); + + processBackwardCompatibility(); +} + +void Settings::processBackwardCompatibility() +{ + { // SaveGamelistsOnExit -> SaveGamelistsMode + std::map::const_iterator it = mBoolMap.find("SaveGamelistsOnExit"); + if (it != mBoolMap.end()) { + mStringMap["SaveGamelistsMode"] = it->second ? "on exit" : "never"; + mBoolMap.erase(it); + } + } } //Print a warning message if the setting we're trying to get doesn't already exist in the map, then return the value in the map. diff --git a/es-core/src/Settings.h b/es-core/src/Settings.h index 413694b719..e9b9f7f038 100644 --- a/es-core/src/Settings.h +++ b/es-core/src/Settings.h @@ -31,6 +31,7 @@ class Settings //Clear everything and load default values. void setDefaults(); + void processBackwardCompatibility(); std::map mBoolMap; std::map mIntMap; From 08335841bee19460f40e1c6b2104d5dd56540dd2 Mon Sep 17 00:00:00 2001 From: Justin Kinnaird Date: Tue, 10 Dec 2019 03:22:53 -0600 Subject: [PATCH 399/603] Use platform-specific methods for exePath --- es-core/src/utils/FileSystemUtil.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index a30d0ca2d7..0ca06b59be 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -194,8 +194,21 @@ namespace Utils void setExePath(const std::string& _path) { - exePath = getCanonicalPath(_path); - + constexpr int path_max = 32767; +#if defined(_WIN32) + std::wstring result(path_max, 0); + if(GetModuleFileNameW(nullptr, &result[0], path_max) != 0) + exePath = convertFromWideString(result); +#else + std::string result(path_max, 0); + if(readlink("/proc/self/exe", &result[0], path_max) != -1) + exePath = result; +#endif + exePath = getCanonicalPath(exePath); + + // Fallback to argv[0] if everything else fails + if (exePath.empty()) + exePath = getCanonicalPath(_path); if(isRegularFile(exePath)) exePath = getParent(exePath); From 3b85735a2d42d149403881c25c9a6302734e9a13 Mon Sep 17 00:00:00 2001 From: Cristi Mitrana <31816814+cmitu@users.noreply.github.com> Date: Mon, 23 Dec 2019 16:12:35 +0200 Subject: [PATCH 400/603] InputManager: replace pageUp/Down with left/rightShoulder and create an alias (via `isMappedLike`) to accomodate existing configs that use the PageUp/Down buttons. --- es-app/src/components/TextListComponent.h | 6 +++--- es-app/src/views/gamelist/GridGameListView.cpp | 4 ++-- es-core/src/InputConfig.cpp | 4 ++++ es-core/src/InputManager.cpp | 4 ++-- es-core/src/components/ComponentList.cpp | 4 ++-- es-core/src/components/DateTimeEditComponent.cpp | 4 ++-- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index b9c0f3670f..002fe55357 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -269,20 +269,20 @@ bool TextListComponent::input(InputConfig* config, Input input) listInput(-1); return true; } - if(config->isMappedTo("pagedown", input)) + if(config->isMappedLike("rightshoulder", input)) { listInput(10); return true; } - if(config->isMappedTo("pageup", input)) + if(config->isMappedLike("leftshoulder", input)) { listInput(-10); return true; } }else{ if(config->isMappedLike("down", input) || config->isMappedLike("up", input) || - config->isMappedTo("pagedown", input) || config->isMappedTo("pageup", input)) + config->isMappedLike("rightshoulder", input) || config->isMappedTo("leftshoulder", input)) { stopScrolling(); } diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 636c885d6b..d2ab178bd6 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -94,12 +94,12 @@ void GridGameListView::setCursor(FileData* file) std::string GridGameListView::getQuickSystemSelectRightButton() { - return "pagedown"; //rightshoulder + return "rightshoulder"; } std::string GridGameListView::getQuickSystemSelectLeftButton() { - return "pageup"; //leftshoulder + return "leftshoulder"; } bool GridGameListView::input(InputConfig* config, Input input) diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index 7cb6697460..eb5e59cecd 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -122,6 +122,10 @@ bool InputConfig::isMappedLike(const std::string& name, Input input) return isMappedTo("up", input) || isMappedTo("leftanalogup", input) || isMappedTo("rightanalogup", input); }else if(name == "down"){ return isMappedTo("down", input) || isMappedTo("leftanalogdown", input) || isMappedTo("rightanalogdown", input); + }else if(name == "leftshoulder"){ + return isMappedTo("leftshoulder", input) || isMappedTo("pageup", input); + }else if(name == "rightshoulder"){ + return isMappedTo("rightshoulder", input) || isMappedTo("pagedown", input); } return isMappedTo(name, input); } diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 441812ca9d..57c64b404f 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -328,8 +328,8 @@ void InputManager::loadDefaultKBConfig() cfg->mapInput("start", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_F1, 1, true)); cfg->mapInput("select", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_F2, 1, true)); - cfg->mapInput("pageup", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_RIGHTBRACKET, 1, true)); - cfg->mapInput("pagedown", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_LEFTBRACKET, 1, true)); + cfg->mapInput("leftshoulder", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_LEFTBRACKET, 1, true)); + cfg->mapInput("rightshoulder", Input(DEVICE_KEYBOARD, TYPE_KEY, SDLK_RIGHTBRACKET, 1, true)); } void InputManager::writeDeviceConfig(InputConfig* config) diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 1a3524f78c..1ae1c67562 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -80,10 +80,10 @@ bool ComponentList::input(InputConfig* config, Input input) { return listInput(input.value != 0 ? 1 : 0); - }else if(config->isMappedTo("pageup", input)) + }else if(config->isMappedLike("leftshoulder", input)) { return listInput(input.value != 0 ? -6 : 0); - }else if(config->isMappedTo("pagedown", input)){ + }else if(config->isMappedLike("rightshoulder", input)){ return listInput(input.value != 0 ? 6 : 0); } diff --git a/es-core/src/components/DateTimeEditComponent.cpp b/es-core/src/components/DateTimeEditComponent.cpp index bc6cf482d4..91787c18d0 100644 --- a/es-core/src/components/DateTimeEditComponent.cpp +++ b/es-core/src/components/DateTimeEditComponent.cpp @@ -53,9 +53,9 @@ bool DateTimeEditComponent::input(InputConfig* config, Input input) } int incDir = 0; - if(config->isMappedLike("up", input) || config->isMappedTo("pageup", input)) + if(config->isMappedLike("up", input) || config->isMappedLike("leftshoulder", input)) incDir = 1; - else if(config->isMappedLike("down", input) || config->isMappedTo("pagedown", input)) + else if(config->isMappedLike("down", input) || config->isMappedLike("rightshoulder", input)) incDir = -1; if(incDir != 0) From 714797e77883c46015eb1b6f4222d33ea8ecb2d8 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sun, 29 Dec 2019 21:21:57 +0000 Subject: [PATCH 401/603] bump version to v2.10.0-dev --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 2bd27925bc..3af2071aa5 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -5,13 +5,13 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 9 +#define PROGRAM_VERSION_MINOR 10 #define PROGRAM_VERSION_MAINTENANCE 0 -#define PROGRAM_VERSION_STRING "2.9.0rp-dev" +#define PROGRAM_VERSION_STRING "2.10.0rp-dev" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,9,0\0" +#define RESOURCE_VERSION_STRING "2,10,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE #endif // ES_APP_EMULATION_STATION_H From 7de52b9279b447419dfe81ae4dbab3e38a80657c Mon Sep 17 00:00:00 2001 From: "James D. Smith" Date: Mon, 30 Dec 2019 22:06:13 -0700 Subject: [PATCH 402/603] Timestamp'ed log entries --- es-core/src/Log.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/es-core/src/Log.cpp b/es-core/src/Log.cpp index 951286519e..bcae38488d 100644 --- a/es-core/src/Log.cpp +++ b/es-core/src/Log.cpp @@ -3,6 +3,7 @@ #include "utils/FileSystemUtil.h" #include "platform.h" #include +#include LogLevel Log::reportingLevel = LogInfo; FILE* Log::file = NULL; //fopen(getLogPath().c_str(), "w"); @@ -38,7 +39,8 @@ void Log::open() std::ostringstream& Log::get(LogLevel level) { - os << "lvl" << level << ": \t"; + time_t t = time(nullptr); + os << std::put_time(localtime(&t), "%b %d %T ") << "lvl" << level << ": \t"; messageLevel = level; return os; From 92db741c5363142d437a36b88b6aa50c57224ad8 Mon Sep 17 00:00:00 2001 From: Cristi Mitrana Date: Fri, 3 Jan 2020 12:17:43 +0200 Subject: [PATCH 403/603] Define _DEBUG for Debug builds --- CMakeLists.txt | 4 ++++ README.md | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9542da48cf..54908acc82 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,6 +114,10 @@ else() add_definitions(-DUSE_OPENGLES_10) endif() +# Enable additional defines for the Debug build configuration +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") + #------------------------------------------------------------------------------- #add include directories set(COMMON_INCLUDE_DIRS diff --git a/README.md b/README.md index 7543220f61..e97c552085 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,11 @@ cmake . make ``` +NOTE: to generate a `Debug` build on Unix/Linux, run the Makefile generation step as: +```bash +cmake -DCMAKE_BUILD_TYPE=Debug . +``` + **On the Raspberry Pi:** Complete Raspberry Pi build instructions at [emulationstation.org](http://emulationstation.org/gettingstarted.html#install_rpi_standalone). From 72786c83a0ee7baad59e1ff4b618e4973b98a6d1 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 30 Dec 2019 21:21:27 +0100 Subject: [PATCH 404/603] Prepare for GLES 2.0 --- es-core/src/renderers/Renderer_GL21.cpp | 152 +++++++++++---------- es-core/src/renderers/Renderer_GLES10.cpp | 154 ++++++++++++---------- 2 files changed, 165 insertions(+), 141 deletions(-) diff --git a/es-core/src/renderers/Renderer_GL21.cpp b/es-core/src/renderers/Renderer_GL21.cpp index 986fa94beb..0c1089b83d 100644 --- a/es-core/src/renderers/Renderer_GL21.cpp +++ b/es-core/src/renderers/Renderer_GL21.cpp @@ -10,7 +10,23 @@ namespace Renderer { - static SDL_GLContext sdlContext = nullptr; + +#if defined(_DEBUG) +#define GL_CHECK_ERROR(Function) (Function, _GLCheckError(#Function)) + + static void _GLCheckError(const char* _funcName) + { + const GLenum errorCode = glGetError(); + + if(errorCode != GL_NO_ERROR) + LOG(LogError) << "OpenGLES error: " << _funcName << " failed with error code: " << errorCode; + } +#else +#define GL_CHECK_ERROR(Function) (Function) +#endif + + static SDL_GLContext sdlContext = nullptr; + static GLuint whiteTexture = 0; static GLenum convertBlendFactor(const Blend::Factor _blendFactor) { @@ -62,14 +78,16 @@ namespace Renderer void setupWindow() { - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); + + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); } // setupWindow @@ -78,11 +96,29 @@ namespace Renderer sdlContext = SDL_GL_CreateContext(getSDLWindow()); SDL_GL_MakeCurrent(getSDLWindow(), sdlContext); - glClearColor(0.5f, 0.5f, 0.5f, 0.0f); + std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; + std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; + std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; + std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; - std::string glExts = (const char*)glGetString(GL_EXTENSIONS); + LOG(LogInfo) << "GL vendor: " << vendor; + LOG(LogInfo) << "GL renderer: " << renderer; + LOG(LogInfo) << "GL version: " << version; LOG(LogInfo) << "Checking available OpenGL extensions..."; - LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (glExts.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); + std::string glExts = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; + LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); + + uint8_t data[4] = {255, 255, 255, 255}; + whiteTexture = createTexture(Texture::RGBA, false, true, 1, 1, data); + + GL_CHECK_ERROR(glClearColor(1.0f, 1.0f, 1.0f, 1.0f)); + GL_CHECK_ERROR(glEnable(GL_TEXTURE_2D)); + GL_CHECK_ERROR(glEnable(GL_BLEND)); + GL_CHECK_ERROR(glPixelStorei(GL_PACK_ALIGNMENT, 1)); + GL_CHECK_ERROR(glPixelStorei(GL_UNPACK_ALIGNMENT, 1)); + GL_CHECK_ERROR(glEnableClientState(GL_VERTEX_ARRAY)); + GL_CHECK_ERROR(glEnableClientState(GL_TEXTURE_COORD_ARRAY)); + GL_CHECK_ERROR(glEnableClientState(GL_COLOR_ARRAY)); } // createContext @@ -98,19 +134,16 @@ namespace Renderer const GLenum type = convertTextureType(_type); unsigned int texture; - glGenTextures(1, &texture); - bindTexture(texture); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE); + GL_CHECK_ERROR(glGenTextures(1, &texture)); + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, texture)); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _linear ? GL_LINEAR : GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE)); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE)); - glPixelStorei(GL_PACK_ALIGNMENT, 1); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _linear ? GL_LINEAR : GL_NEAREST)); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); - glTexImage2D(GL_TEXTURE_2D, 0, type, _width, _height, 0, type, GL_UNSIGNED_BYTE, _data); + GL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, type, _width, _height, 0, type, GL_UNSIGNED_BYTE, _data)); return texture; @@ -118,77 +151,55 @@ namespace Renderer void destroyTexture(const unsigned int _texture) { - glDeleteTextures(1, &_texture); + GL_CHECK_ERROR(glDeleteTextures(1, &_texture)); } // destroyTexture void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) { - bindTexture(_texture); - glTexSubImage2D(GL_TEXTURE_2D, 0, _x, _y, _width, _height, convertTextureType(_type), GL_UNSIGNED_BYTE, _data); - bindTexture(0); + const GLenum type = convertTextureType(_type); + + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, _texture)); + GL_CHECK_ERROR(glTexSubImage2D(GL_TEXTURE_2D, 0, _x, _y, _width, _height, type, GL_UNSIGNED_BYTE, _data)); + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); } // updateTexture void bindTexture(const unsigned int _texture) { - glBindTexture(GL_TEXTURE_2D, _texture); - - if(_texture == 0) glDisable(GL_TEXTURE_2D); - else glEnable(GL_TEXTURE_2D); + if(_texture == 0) GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); + else GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, _texture)); } // bindTexture void drawLines(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { - glEnable(GL_BLEND); - glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor)); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - - glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos); - glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex); - glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col); + GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); + GL_CHECK_ERROR(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex)); + GL_CHECK_ERROR(glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col)); - glDrawArrays(GL_LINES, 0, _numVertices); + GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor))); - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_VERTEX_ARRAY); - - glDisable(GL_BLEND); + GL_CHECK_ERROR(glDrawArrays(GL_LINES, 0, _numVertices)); } // drawLines void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { - glEnable(GL_BLEND); - glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor)); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - - glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos); - glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex); - glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col); + GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); + GL_CHECK_ERROR(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex)); + GL_CHECK_ERROR(glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col)); - glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVertices); + GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor))); - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_VERTEX_ARRAY); - - glDisable(GL_BLEND); + GL_CHECK_ERROR(glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVertices)); } // drawTriangleStrips void setProjection(const Transform4x4f& _projection) { - glMatrixMode(GL_PROJECTION); - glLoadMatrixf((GLfloat*)&_projection); + GL_CHECK_ERROR(glMatrixMode(GL_PROJECTION)); + GL_CHECK_ERROR(glLoadMatrixf((GLfloat*)&_projection)); } // setProjection @@ -196,15 +207,16 @@ namespace Renderer { Transform4x4f matrix = _matrix; matrix.round(); - glMatrixMode(GL_MODELVIEW); - glLoadMatrixf((GLfloat*)&matrix); + + GL_CHECK_ERROR(glMatrixMode(GL_MODELVIEW)); + GL_CHECK_ERROR(glLoadMatrixf((GLfloat*)&matrix)); } // setMatrix void setViewport(const Rect& _viewport) { // glViewport starts at the bottom left of the window - glViewport( _viewport.x, getWindowHeight() - _viewport.y - _viewport.h, _viewport.w, _viewport.h); + GL_CHECK_ERROR(glViewport( _viewport.x, getWindowHeight() - _viewport.y - _viewport.h, _viewport.w, _viewport.h)); } // setViewport @@ -212,13 +224,13 @@ namespace Renderer { if((_scissor.x == 0) && (_scissor.y == 0) && (_scissor.w == 0) && (_scissor.h == 0)) { - glDisable(GL_SCISSOR_TEST); + GL_CHECK_ERROR(glDisable(GL_SCISSOR_TEST)); } else { // glScissor starts at the bottom left of the window - glScissor(_scissor.x, getWindowHeight() - _scissor.y - _scissor.h, _scissor.w, _scissor.h); - glEnable(GL_SCISSOR_TEST); + GL_CHECK_ERROR(glScissor(_scissor.x, getWindowHeight() - _scissor.y - _scissor.h, _scissor.w, _scissor.h)); + GL_CHECK_ERROR(glEnable(GL_SCISSOR_TEST)); } } // setScissor @@ -245,7 +257,7 @@ namespace Renderer void swapBuffers() { SDL_GL_SwapWindow(getSDLWindow()); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + GL_CHECK_ERROR(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); } // swapBuffers diff --git a/es-core/src/renderers/Renderer_GLES10.cpp b/es-core/src/renderers/Renderer_GLES10.cpp index 9019e79e95..b86a16a059 100644 --- a/es-core/src/renderers/Renderer_GLES10.cpp +++ b/es-core/src/renderers/Renderer_GLES10.cpp @@ -5,12 +5,28 @@ #include "Log.h" #include "Settings.h" -#include +#include #include namespace Renderer { - static SDL_GLContext sdlContext = nullptr; + +#if defined(_DEBUG) +#define GL_CHECK_ERROR(Function) (Function, _GLCheckError(#Function)) + + static void _GLCheckError(const char* _funcName) + { + const GLenum errorCode = glGetError(); + + if(errorCode != GL_NO_ERROR) + LOG(LogError) << "OpenGLES error: " << _funcName << " failed with error code: " << errorCode; + } +#else +#define GL_CHECK_ERROR(Function) (Function) +#endif + + static SDL_GLContext sdlContext = nullptr; + static GLuint whiteTexture = 0; static GLenum convertBlendFactor(const Blend::Factor _blendFactor) { @@ -62,14 +78,16 @@ namespace Renderer void setupWindow() { - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 0); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); + + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); } // setupWindow @@ -78,11 +96,29 @@ namespace Renderer sdlContext = SDL_GL_CreateContext(getSDLWindow()); SDL_GL_MakeCurrent(getSDLWindow(), sdlContext); - glClearColor(0.5f, 0.5f, 0.5f, 0.0f); + std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; + std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; + std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; + std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; - std::string glExts = (const char*)glGetString(GL_EXTENSIONS); + LOG(LogInfo) << "GL vendor: " << vendor; + LOG(LogInfo) << "GL renderer: " << renderer; + LOG(LogInfo) << "GL version: " << version; LOG(LogInfo) << "Checking available OpenGL extensions..."; - LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (glExts.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); + std::string glExts = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; + LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); + + uint8_t data[4] = {255, 255, 255, 255}; + whiteTexture = createTexture(Texture::RGBA, false, true, 1, 1, data); + + GL_CHECK_ERROR(glClearColor(1.0f, 1.0f, 1.0f, 1.0f)); + GL_CHECK_ERROR(glEnable(GL_TEXTURE_2D)); + GL_CHECK_ERROR(glEnable(GL_BLEND)); + GL_CHECK_ERROR(glPixelStorei(GL_PACK_ALIGNMENT, 1)); + GL_CHECK_ERROR(glPixelStorei(GL_UNPACK_ALIGNMENT, 1)); + GL_CHECK_ERROR(glEnableClientState(GL_VERTEX_ARRAY)); + GL_CHECK_ERROR(glEnableClientState(GL_TEXTURE_COORD_ARRAY)); + GL_CHECK_ERROR(glEnableClientState(GL_COLOR_ARRAY)); } // createContext @@ -98,19 +134,16 @@ namespace Renderer const GLenum type = convertTextureType(_type); unsigned int texture; - glGenTextures(1, &texture); - bindTexture(texture); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE); + GL_CHECK_ERROR(glGenTextures(1, &texture)); + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, texture)); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _linear ? GL_LINEAR : GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE)); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE)); - glPixelStorei(GL_PACK_ALIGNMENT, 1); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _linear ? GL_LINEAR : GL_NEAREST)); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); - glTexImage2D(GL_TEXTURE_2D, 0, type, _width, _height, 0, type, GL_UNSIGNED_BYTE, _data); + GL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, type, _width, _height, 0, type, GL_UNSIGNED_BYTE, _data)); return texture; @@ -118,77 +151,55 @@ namespace Renderer void destroyTexture(const unsigned int _texture) { - glDeleteTextures(1, &_texture); + GL_CHECK_ERROR(glDeleteTextures(1, &_texture)); } // destroyTexture void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) { - bindTexture(_texture); - glTexSubImage2D(GL_TEXTURE_2D, 0, _x, _y, _width, _height, convertTextureType(_type), GL_UNSIGNED_BYTE, _data); - bindTexture(0); + const GLenum type = convertTextureType(_type); + + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, _texture)); + GL_CHECK_ERROR(glTexSubImage2D(GL_TEXTURE_2D, 0, _x, _y, _width, _height, type, GL_UNSIGNED_BYTE, _data)); + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); } // updateTexture void bindTexture(const unsigned int _texture) { - glBindTexture(GL_TEXTURE_2D, _texture); - - if(_texture == 0) glDisable(GL_TEXTURE_2D); - else glEnable(GL_TEXTURE_2D); + if(_texture == 0) GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); + else GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, _texture)); } // bindTexture void drawLines(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { - glEnable(GL_BLEND); - glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor)); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - - glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos); - glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex); - glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col); + GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); + GL_CHECK_ERROR(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex)); + GL_CHECK_ERROR(glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col)); - glDrawArrays(GL_LINES, 0, _numVertices); + GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor))); - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_VERTEX_ARRAY); - - glDisable(GL_BLEND); + GL_CHECK_ERROR(glDrawArrays(GL_LINES, 0, _numVertices)); } // drawLines void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { - glEnable(GL_BLEND); - glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor)); - - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - - glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos); - glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex); - glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col); + GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); + GL_CHECK_ERROR(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex)); + GL_CHECK_ERROR(glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col)); - glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVertices); + GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor))); - glDisableClientState(GL_COLOR_ARRAY); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_VERTEX_ARRAY); - - glDisable(GL_BLEND); + GL_CHECK_ERROR(glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVertices)); } // drawTriangleStrips void setProjection(const Transform4x4f& _projection) { - glMatrixMode(GL_PROJECTION); - glLoadMatrixf((GLfloat*)&_projection); + GL_CHECK_ERROR(glMatrixMode(GL_PROJECTION)); + GL_CHECK_ERROR(glLoadMatrixf((GLfloat*)&_projection)); } // setProjection @@ -196,15 +207,16 @@ namespace Renderer { Transform4x4f matrix = _matrix; matrix.round(); - glMatrixMode(GL_MODELVIEW); - glLoadMatrixf((GLfloat*)&matrix); + + GL_CHECK_ERROR(glMatrixMode(GL_MODELVIEW)); + GL_CHECK_ERROR(glLoadMatrixf((GLfloat*)&matrix)); } // setMatrix void setViewport(const Rect& _viewport) { // glViewport starts at the bottom left of the window - glViewport( _viewport.x, getWindowHeight() - _viewport.y - _viewport.h, _viewport.w, _viewport.h); + GL_CHECK_ERROR(glViewport( _viewport.x, getWindowHeight() - _viewport.y - _viewport.h, _viewport.w, _viewport.h)); } // setViewport @@ -212,13 +224,13 @@ namespace Renderer { if((_scissor.x == 0) && (_scissor.y == 0) && (_scissor.w == 0) && (_scissor.h == 0)) { - glDisable(GL_SCISSOR_TEST); + GL_CHECK_ERROR(glDisable(GL_SCISSOR_TEST)); } else { // glScissor starts at the bottom left of the window - glScissor(_scissor.x, getWindowHeight() - _scissor.y - _scissor.h, _scissor.w, _scissor.h); - glEnable(GL_SCISSOR_TEST); + GL_CHECK_ERROR(glScissor(_scissor.x, getWindowHeight() - _scissor.y - _scissor.h, _scissor.w, _scissor.h)); + GL_CHECK_ERROR(glEnable(GL_SCISSOR_TEST)); } } // setScissor @@ -245,7 +257,7 @@ namespace Renderer void swapBuffers() { SDL_GL_SwapWindow(getSDLWindow()); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + GL_CHECK_ERROR(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); } // swapBuffers From 85dc2b59a2320c4a3767e36fbddec8a025205b13 Mon Sep 17 00:00:00 2001 From: PhilaPhan80 <53459459+PhilaPhan80@users.noreply.github.com> Date: Sun, 5 Jan 2020 01:52:03 -0500 Subject: [PATCH 405/603] Update TheGamesDB API URL to include "v1" within the path per note by Zer0xFF at https://forums.thegamesdb.net/viewtopic.php?f=5&t=1223 --- es-app/src/scrapers/GamesDBJSONScraper.cpp | 2 +- es-app/src/scrapers/GamesDBJSONScraperResources.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index ad4ddbf606..bf591a9ab1 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -103,7 +103,7 @@ void thegamesdb_generate_json_scraper_requests(const ScraperSearchParams& params std::queue>& requests, std::vector& results) { resources.prepare(); - std::string path = "https://api.thegamesdb.net"; + std::string path = "https://api.thegamesdb.net/v1"; bool usingGameID = false; const std::string apiKey = std::string("apikey=") + resources.getApiKey(); std::string cleanName = params.nameOverride; diff --git a/es-app/src/scrapers/GamesDBJSONScraperResources.cpp b/es-app/src/scrapers/GamesDBJSONScraperResources.cpp index 7d59bef46b..517fd3369e 100644 --- a/es-app/src/scrapers/GamesDBJSONScraperResources.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraperResources.cpp @@ -153,7 +153,7 @@ bool TheGamesDBJSONRequestResources::saveResource(HttpReq* req, std::unordered_m std::unique_ptr TheGamesDBJSONRequestResources::fetchResource(const std::string& endpoint) { - std::string path = "https://api.thegamesdb.net"; + std::string path = "https://api.thegamesdb.net/v1"; path += endpoint; path += "?apikey=" + getApiKey(); From 6cd813ae672f258b8d6de123ec7acb53bf34594c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Rodr=C3=ADguez?= Date: Mon, 30 Dec 2019 20:35:34 +0100 Subject: [PATCH 406/603] feature: Added marquee, image and video to gridView. Ignore .vscode files --- .gitignore | 3 + .../src/views/gamelist/GridGameListView.cpp | 89 ++++++++++++++++++- es-app/src/views/gamelist/GridGameListView.h | 5 ++ 3 files changed, 93 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 4055d624e6..bcb72bcfb2 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,6 @@ Makefile CPackConfig.cmake CPackSourceConfig.cmake *.cbp + +# VSCode +.vscode/ diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 636c885d6b..0768d530fe 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -6,10 +6,17 @@ #include "CollectionSystemManager.h" #include "Settings.h" #include "SystemData.h" +#ifdef _RPI_ +#include "components/VideoPlayerComponent.h" +#endif +#include "components/VideoVlcComponent.h" GridGameListView::GridGameListView(Window* window, FileData* root) : ISimpleGameListView(window, root), - mGrid(window), + mGrid(window), mMarquee(window), + mImage(window), + mVideo(nullptr), + mVideoPlaying(false), mDescContainer(window), mDescription(window), mLblRating(window), mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), @@ -21,6 +28,16 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : { const float padding = 0.01f; +// Create the correct type of video window +#ifdef _RPI_ + if (Settings::getInstance()->getBool("VideoOmxPlayer")) + mVideo = new VideoPlayerComponent(window, ""); + else + mVideo = new VideoVlcComponent(window, getTitlePath()); +#else + mVideo = new VideoVlcComponent(window, getTitlePath()); +#endif + mGrid.setPosition(mSize.x() * 0.1f, mSize.y() * 0.1f); mGrid.setDefaultZIndex(20); mGrid.setCursorChangedCallback([&](const CursorState& /*state*/) { updateInfoPanel(); }); @@ -71,7 +88,27 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : mDescription.setFont(Font::get(FONT_SIZE_SMALL)); mDescription.setSize(mDescContainer.getSize().x(), 0); mDescContainer.addChild(&mDescription); - + + mMarquee.setOrigin(0.5f, 0.5f); + mMarquee.setPosition(mSize.x() * 0.25f, mSize.y() * 0.10f); + mMarquee.setMaxSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.18f); + mMarquee.setDefaultZIndex(35); + mMarquee.setVisible(false); + addChild(&mMarquee); + + mImage.setOrigin(0.5f, 0.5f); + mImage.setPosition(2.0f, 2.0f); + mImage.setMaxSize(1.0f, 1.0f); + mImage.setDefaultZIndex(10); + mImage.setVisible(false); + addChild(&mImage); + + mVideo->setOrigin(0.5f, 0.5f); + mVideo->setPosition(mSize.x() * 0.25f, mSize.y() * 0.4f); + mVideo->setSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.4f); + mVideo->setDefaultZIndex(15); + mVideo->setVisible(false); + addChild(mVideo); initMDLabels(); initMDValues(); @@ -147,6 +184,9 @@ void GridGameListView::onThemeChanged(const std::shared_ptr& theme) mGrid.applyTheme(theme, getName(), "gamegrid", ALL); mName.applyTheme(theme, getName(), "md_name", ALL); + mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION | VISIBLE); + mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION | VISIBLE); + mVideo->applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY | Z_INDEX | ROTATION | VISIBLE); initMDLabels(); std::vector labels = getMDLabels(); @@ -256,9 +296,23 @@ void GridGameListView::updateInfoPanel() bool fadingOut; if(file == NULL) { + mVideo->setVideo(""); + mVideo->setImage(""); + mVideoPlaying = false; + //mDescription.setText(""); fadingOut = true; }else{ + if (!mVideo->setVideo(file->getVideoPath())) + { + mVideo->setDefaultVideo(); + } + mVideoPlaying = true; + + mVideo->setImage(file->getThumbnailPath()); + mMarquee.setImage(file->getMarqueePath()); + mImage.setImage(file->getImagePath()); + mDescription.setText(file->metadata.get("desc")); mDescContainer.reset(); @@ -282,6 +336,9 @@ void GridGameListView::updateInfoPanel() std::vector comps = getMDValues(); comps.push_back(&mDescription); comps.push_back(&mName); + comps.push_back(&mMarquee); + comps.push_back(mVideo); + comps.push_back(&mImage); std::vector labels = getMDLabels(); comps.insert(comps.cend(), labels.cbegin(), labels.cend()); @@ -312,8 +369,32 @@ void GridGameListView::addPlaceholder() } void GridGameListView::launch(FileData* game) -{ - ViewController::get()->launch(game); +{ + float screenWidth = (float) Renderer::getScreenWidth(); + float screenHeight = (float) Renderer::getScreenHeight(); + + Vector3f target(screenWidth / 2.0f, screenHeight / 2.0f, 0); + + if(mMarquee.hasImage() && + (mMarquee.getPosition().x() < screenWidth && mMarquee.getPosition().x() > 0.0f && + mMarquee.getPosition().y() < screenHeight && mMarquee.getPosition().y() > 0.0f)) + { + target = Vector3f(mMarquee.getCenter().x(), mMarquee.getCenter().y(), 0); + } + else if(mImage.hasImage() && + (mImage.getPosition().x() < screenWidth && mImage.getPosition().x() > 2.0f && + mImage.getPosition().y() < screenHeight && mImage.getPosition().y() > 2.0f)) + { + target = Vector3f(mImage.getCenter().x(), mImage.getCenter().y(), 0); + } + else if(mVideo->getPosition().x() < screenWidth && mVideo->getPosition().x() > 0.0f && + mVideo->getPosition().y() < screenHeight && mVideo->getPosition().y() > 0.0f) + { + target = Vector3f(mVideo->getCenter().x(), mVideo->getCenter().y(), 0); + } + + ViewController::get()->launch(game, target); + } void GridGameListView::remove(FileData *game, bool deleteFile) diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index ac109890a4..f6367a11db 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -6,6 +6,7 @@ #include "components/RatingComponent.h" #include "components/ScrollableContainer.h" #include "components/ImageGridComponent.h" +#include "components/VideoComponent.h" #include "views/gamelist/ISimpleGameListView.h" class GridGameListView : public ISimpleGameListView @@ -43,6 +44,10 @@ class GridGameListView : public ISimpleGameListView TextComponent mLblRating, mLblReleaseDate, mLblDeveloper, mLblPublisher, mLblGenre, mLblPlayers, mLblLastPlayed, mLblPlayCount; + ImageComponent mMarquee; + VideoComponent* mVideo; + bool mVideoPlaying; + ImageComponent mImage; RatingComponent mRating; DateTimeComponent mReleaseDate; TextComponent mDeveloper; From c2a86179329d47215f4f296b042951b8a73f765a Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Mon, 3 Feb 2020 05:53:11 +0000 Subject: [PATCH 407/603] input: fix the infinite scrolling with the left shoulder button after #631 --- es-app/src/components/TextListComponent.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 002fe55357..b0124f22b2 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -282,7 +282,7 @@ bool TextListComponent::input(InputConfig* config, Input input) } }else{ if(config->isMappedLike("down", input) || config->isMappedLike("up", input) || - config->isMappedLike("rightshoulder", input) || config->isMappedTo("leftshoulder", input)) + config->isMappedLike("rightshoulder", input) || config->isMappedLike("leftshoulder", input)) { stopScrolling(); } From c114ef05ac2a992d1b6071789df7efbdf9a1747d Mon Sep 17 00:00:00 2001 From: John Rassa Date: Fri, 28 Feb 2020 21:19:52 -0500 Subject: [PATCH 408/603] Grid View Fixes Fix for metadata disappearing when selecting system for the first time. Fix for video not resuming after launching game. --- es-app/src/views/ViewController.cpp | 6 ++++++ .../src/views/gamelist/GridGameListView.cpp | 20 +++++++++++++++++++ es-app/src/views/gamelist/GridGameListView.h | 4 ++++ 3 files changed, 30 insertions(+) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 3489628f6c..fd195adac3 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -235,6 +235,8 @@ void ViewController::launch(FileData* game, Vector3f center) game->launchGame(mWindow); setAnimation(new LambdaAnimation(fadeFunc, 800), 0, [this] { mLockInput = false; }, true); this->onFileChanged(game, FILE_METADATA_CHANGED); + if (mCurrentView) + mCurrentView->onShow(); }); } else if (transition_style == "slide"){ // move camera to zoom in on center + fade out, launch game, come back in @@ -244,6 +246,8 @@ void ViewController::launch(FileData* game, Vector3f center) mCamera = origCamera; setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), 0, [this] { mLockInput = false; }, true); this->onFileChanged(game, FILE_METADATA_CHANGED); + if (mCurrentView) + mCurrentView->onShow(); }); } else { // instant setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 10), 0, [this, origCamera, center, game] @@ -252,6 +256,8 @@ void ViewController::launch(FileData* game, Vector3f center) mCamera = origCamera; setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 10), 0, [this] { mLockInput = false; }, true); this->onFileChanged(game, FILE_METADATA_CHANGED); + if (mCurrentView) + mCurrentView->onShow(); }); } } diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index fa9d63228d..a95033d89e 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -115,6 +115,11 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : updateInfoPanel(); } +GridGameListView::~GridGameListView() +{ + delete mVideo; +} + FileData* GridGameListView::getCursor() { return mGrid.getSelected(); @@ -219,7 +224,10 @@ void GridGameListView::onThemeChanged(const std::shared_ptr& theme) mDescription.setSize(mDescContainer.getSize().x(), 0); mDescription.applyTheme(theme, getName(), "md_description", ALL ^ (POSITION | ThemeFlags::SIZE | ThemeFlags::ORIGIN | TEXT | ROTATION)); + // Repopulate list in case new theme is displaying a different image. Preserve selection. + FileData* file = mGrid.getSelected(); populateList(mRoot->getChildrenListToDisplay()); + mGrid.setCursor(file); sortChildren(); } @@ -474,3 +482,15 @@ std::vector GridGameListView::getHelpPrompts() } return prompts; } + +void GridGameListView::update(int deltaTime) +{ + ISimpleGameListView::update(deltaTime); + mVideo->update(deltaTime); +} + +void GridGameListView::onShow() +{ + GuiComponent::onShow(); + updateInfoPanel(); +} diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index f6367a11db..6f5798feff 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -13,6 +13,9 @@ class GridGameListView : public ISimpleGameListView { public: GridGameListView(Window* window, FileData* root); + virtual ~GridGameListView(); + + virtual void onShow() override; virtual void onThemeChanged(const std::shared_ptr& theme) override; @@ -27,6 +30,7 @@ class GridGameListView : public ISimpleGameListView virtual void launch(FileData* game) override; protected: + virtual void update(int deltaTime) override; virtual std::string getQuickSystemSelectRightButton() override; virtual std::string getQuickSystemSelectLeftButton() override; virtual void populateList(const std::vector& files) override; From 2ae8f08b5576228efd8b58a6fbdd8cb7de41ce15 Mon Sep 17 00:00:00 2001 From: Supersquared Date: Thu, 30 Jan 2020 19:10:18 +0100 Subject: [PATCH 409/603] Add support for md_thumbnail & md_marquee - Added support for md_thumbnail in VideoGameListView - Added support for md_thumbnail & md_marquee in DetailedGameListView --- .../views/gamelist/DetailedGameListView.cpp | 25 +++++++++++++++++++ .../src/views/gamelist/DetailedGameListView.h | 2 ++ .../src/views/gamelist/VideoGameListView.cpp | 19 ++++++++++++++ es-app/src/views/gamelist/VideoGameListView.h | 1 + 4 files changed, 47 insertions(+) diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 37827bcb86..6646e72449 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -6,6 +6,8 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : BasicGameListView(window, root), mDescContainer(window), mDescription(window), + mThumbnail(window), + mMarquee(window), mImage(window), mLblRating(window), mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), @@ -24,6 +26,23 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mList.setAlignment(TextListComponent::ALIGN_LEFT); mList.setCursorChangedCallback([&](const CursorState& /*state*/) { updateInfoPanel(); }); + // Thumbnail + mThumbnail.setOrigin(0.5f, 0.5f); + mThumbnail.setPosition(2.0f, 2.0f); + mThumbnail.setVisible(false); + mThumbnail.setMaxSize(mSize.x() * (0.25f - 2*padding), mSize.y() * 0.10f); + mThumbnail.setDefaultZIndex(25); + addChild(&mThumbnail); + + // Marquee + mMarquee.setOrigin(0.5f, 0.5f); + // Default to off the screen + mMarquee.setPosition(2.0f, 2.0f); + mMarquee.setVisible(false); + mMarquee.setMaxSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.18f); + mMarquee.setDefaultZIndex(35); + addChild(&mMarquee); + // image mImage.setOrigin(0.5f, 0.5f); mImage.setPosition(mSize.x() * 0.25f, mList.getPosition().y() + mSize.y() * 0.2125f); @@ -86,6 +105,8 @@ void DetailedGameListView::onThemeChanged(const std::shared_ptr& them BasicGameListView::onThemeChanged(theme); using namespace ThemeFlags; + mThumbnail.applyTheme(theme, getName(), "md_thumbnail", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION | VISIBLE); + mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION | VISIBLE); mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION | VISIBLE); mName.applyTheme(theme, getName(), "md_name", ALL); @@ -199,6 +220,8 @@ void DetailedGameListView::updateInfoPanel() //mDescription.setText(""); fadingOut = true; }else{ + mThumbnail.setImage(file->getThumbnailPath()); + mMarquee.setImage(file->getMarqueePath()); mImage.setImage(file->getImagePath()); mDescription.setText(file->metadata.get("desc")); mDescContainer.reset(); @@ -221,6 +244,8 @@ void DetailedGameListView::updateInfoPanel() } std::vector comps = getMDValues(); + comps.push_back(&mThumbnail); + comps.push_back(&mMarquee); comps.push_back(&mImage); comps.push_back(&mDescription); comps.push_back(&mName); diff --git a/es-app/src/views/gamelist/DetailedGameListView.h b/es-app/src/views/gamelist/DetailedGameListView.h index 76c8a93537..681ffce5fc 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.h +++ b/es-app/src/views/gamelist/DetailedGameListView.h @@ -24,6 +24,8 @@ class DetailedGameListView : public BasicGameListView void initMDLabels(); void initMDValues(); + ImageComponent mThumbnail; + ImageComponent mMarquee; ImageComponent mImage; TextComponent mLblRating, mLblReleaseDate, mLblDeveloper, mLblPublisher, mLblGenre, mLblPlayers, mLblLastPlayed, mLblPlayCount; diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 1daa91b1a1..de2446869b 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -14,6 +14,7 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : BasicGameListView(window, root), mDescContainer(window), mDescription(window), + mThumbnail(window), mMarquee(window), mImage(window), mVideo(nullptr), @@ -43,6 +44,14 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : mList.setAlignment(TextListComponent::ALIGN_LEFT); mList.setCursorChangedCallback([&](const CursorState& /*state*/) { updateInfoPanel(); }); + // Thumbnail + mThumbnail.setOrigin(0.5f, 0.5f); + mThumbnail.setPosition(2.0f, 2.0f); + mThumbnail.setVisible(false); + mThumbnail.setMaxSize(mSize.x() * (0.25f - 2*padding), mSize.y() * 0.10f); + mThumbnail.setDefaultZIndex(35); + addChild(&mThumbnail); + // Marquee mMarquee.setOrigin(0.5f, 0.5f); mMarquee.setPosition(mSize.x() * 0.25f, mSize.y() * 0.10f); @@ -54,6 +63,7 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : mImage.setOrigin(0.5f, 0.5f); // Default to off the screen mImage.setPosition(2.0f, 2.0f); + mImage.setVisible(false); mImage.setMaxSize(1.0f, 1.0f); mImage.setDefaultZIndex(30); addChild(&mImage); @@ -123,6 +133,7 @@ void VideoGameListView::onThemeChanged(const std::shared_ptr& theme) BasicGameListView::onThemeChanged(theme); using namespace ThemeFlags; + mThumbnail.applyTheme(theme, getName(), "md_thumbnail", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION | VISIBLE); mMarquee.applyTheme(theme, getName(), "md_marquee", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION | VISIBLE); mImage.applyTheme(theme, getName(), "md_image", POSITION | ThemeFlags::SIZE | Z_INDEX | ROTATION | VISIBLE); mVideo->applyTheme(theme, getName(), "md_video", POSITION | ThemeFlags::SIZE | ThemeFlags::DELAY | Z_INDEX | ROTATION | VISIBLE); @@ -253,6 +264,7 @@ void VideoGameListView::updateInfoPanel() mVideoPlaying = true; mVideo->setImage(file->getThumbnailPath()); + mThumbnail.setImage(file->getThumbnailPath()); mMarquee.setImage(file->getMarqueePath()); mImage.setImage(file->getImagePath()); @@ -277,6 +289,7 @@ void VideoGameListView::updateInfoPanel() } std::vector comps = getMDValues(); + comps.push_back(&mThumbnail); comps.push_back(&mMarquee); comps.push_back(mVideo); comps.push_back(&mDescription); @@ -317,6 +330,12 @@ void VideoGameListView::launch(FileData* game) { target = Vector3f(mMarquee.getCenter().x(), mMarquee.getCenter().y(), 0); } + else if(mThumbnail.hasImage() && + (mThumbnail.getPosition().x() < screenWidth && mThumbnail.getPosition().x() > 2.0f && + mThumbnail.getPosition().y() < screenHeight && mThumbnail.getPosition().y() > 2.0f)) + { + target = Vector3f(mThumbnail.getCenter().x(), mThumbnail.getCenter().y(), 0); + } else if(mImage.hasImage() && (mImage.getPosition().x() < screenWidth && mImage.getPosition().x() > 2.0f && mImage.getPosition().y() < screenHeight && mImage.getPosition().y() > 2.0f)) diff --git a/es-app/src/views/gamelist/VideoGameListView.h b/es-app/src/views/gamelist/VideoGameListView.h index 8a8335866b..edbc2c21fd 100644 --- a/es-app/src/views/gamelist/VideoGameListView.h +++ b/es-app/src/views/gamelist/VideoGameListView.h @@ -31,6 +31,7 @@ class VideoGameListView : public BasicGameListView void initMDLabels(); void initMDValues(); + ImageComponent mThumbnail; ImageComponent mMarquee; VideoComponent* mVideo; ImageComponent mImage; From 258df4848160ea0392d0736580c5a9dad669806d Mon Sep 17 00:00:00 2001 From: pjft Date: Mon, 24 Feb 2020 10:16:59 +0000 Subject: [PATCH 410/603] Option to show start menu in Kids mode --- es-app/src/guis/GuiMenu.cpp | 6 ++++++ es-app/src/views/ViewController.cpp | 4 ++-- es-core/src/Settings.cpp | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 42a781c317..0f34628f92 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -366,6 +366,12 @@ void GuiMenu::openUISettings() if (enable_filter->getState() != filter_is_enabled) ViewController::get()->ReloadAndGoToStart(); }); + // hide start menu in Kid Mode + auto disable_start = std::make_shared(mWindow); + disable_start->setState(Settings::getInstance()->getBool("DisableKidStartMenu")); + s->addWithLabel("DISABLE START MENU IN KID MODE", disable_start); + s->addSaveFunc([disable_start] { Settings::getInstance()->setBool("DisableKidStartMenu", disable_start->getState()); }); + mWindow->pushGui(s); } diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 3489628f6c..454e73c46a 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -360,7 +360,7 @@ bool ViewController::input(InputConfig* config, Input input) return true; // open menu - if(!UIModeController::getInstance()->isUIModeKid() && config->isMappedTo("start", input) && input.value != 0) + if(!(UIModeController::getInstance()->isUIModeKid() && Settings::getInstance()->getBool("DisableKidStartMenu")) && config->isMappedTo("start", input) && input.value != 0) { // open menu mWindow->pushGui(new GuiMenu(mWindow)); @@ -527,7 +527,7 @@ std::vector ViewController::getHelpPrompts() return prompts; prompts = mCurrentView->getHelpPrompts(); - if(!UIModeController::getInstance()->isUIModeKid()) + if(!(UIModeController::getInstance()->isUIModeKid() && Settings::getInstance()->getBool("DisableKidStartMenu"))) prompts.push_back(HelpPrompt("start", "menu")); return prompts; diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index d110efac2e..f54aac91b2 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -65,6 +65,7 @@ void Settings::setDefaults() mBoolMap["SplashScreen"] = true; mBoolMap["SplashScreenProgress"] = true; mStringMap["StartupSystem"] = ""; + mBoolMap["DisableKidStartMenu"] = true; mBoolMap["VSync"] = true; From b2e71015a139f7ac8e9ca51de613042ed5641888 Mon Sep 17 00:00:00 2001 From: pjft Date: Sat, 28 Mar 2020 17:21:21 +0000 Subject: [PATCH 411/603] Added option to disable video screensaver audio on VLC and OMXPlayer --- es-app/src/guis/GuiVideoScreensaverOptions.cpp | 5 +++++ es-core/src/Settings.cpp | 1 + es-core/src/components/VideoPlayerComponent.cpp | 3 ++- es-core/src/components/VideoVlcComponent.cpp | 6 ++++-- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.cpp b/es-app/src/guis/GuiVideoScreensaverOptions.cpp index b491c2ff1f..b757a87614 100644 --- a/es-app/src/guis/GuiVideoScreensaverOptions.cpp +++ b/es-app/src/guis/GuiVideoScreensaverOptions.cpp @@ -63,6 +63,11 @@ GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const cha Settings::getInstance()->setInt("SubtitleSize", subSize); }); + auto ss_video_mute = std::make_shared(mWindow); + ss_video_mute->setState(Settings::getInstance()->getBool("ScreenSaverVideoMute")); + addWithLabel("MUTE SCREENSAVER AUDIO", ss_video_mute); + addSaveFunc([ss_video_mute] { Settings::getInstance()->setBool("ScreenSaverVideoMute", ss_video_mute->getState()); }); + // Define subtitle font auto ss_omx_font_file = std::make_shared(mWindow, "", Font::get(FONT_SIZE_SMALL), 0x777777FF); addEditableTextComponent(row, "PATH TO FONT FILE", ss_omx_font_file, Settings::getInstance()->getString("SubtitleFont")); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index d110efac2e..d9e511b0ff 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -128,6 +128,7 @@ void Settings::setDefaults() mIntMap["ScreenSaverSwapVideoTimeout"] = 30000; mBoolMap["VideoAudio"] = true; + mBoolMap["ScreenSaverVideoMute"] = false; mBoolMap["CaptionsCompatibility"] = true; // Audio out device for Video playback using OMX player. mStringMap["OMXAudioDev"] = "both"; diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 1527f671f1..498a95a181 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -162,7 +162,8 @@ void VideoPlayerComponent::startVideo() const char* argv[] = { "", "--layer", "10010", "--loop", "--no-osd", "--aspect-mode", "letterbox", "--vol", "0", "-o", "both","--win", buf1, "--orientation", buf2, "", "", "", "", "", "", "", "", "", "", "", NULL }; // check if we want to mute the audio - if (!Settings::getInstance()->getBool("VideoAudio") || (float)VolumeControl::getInstance()->getVolume() == 0) + if ((!Settings::getInstance()->getBool("VideoAudio") || (float)VolumeControl::getInstance()->getVolume() == 0) || + (Settings::getInstance()->getBool("ScreenSaverVideoMute") && mScreensaverMode)) { argv[8] = "-1000000"; } diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index a4aeaf111a..704c08acae 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -220,7 +220,8 @@ void VideoVlcComponent::handleLooping() libvlc_state_t state = libvlc_media_player_get_state(mMediaPlayer); if (state == libvlc_Ended) { - if (!Settings::getInstance()->getBool("VideoAudio")) + if (!Settings::getInstance()->getBool("VideoAudio") || + (Settings::getInstance()->getBool("ScreenSaverVideoMute") && mScreensaverMode)) { libvlc_audio_set_mute(mMediaPlayer, 1); } @@ -295,7 +296,8 @@ void VideoVlcComponent::startVideo() // Setup the media player mMediaPlayer = libvlc_media_player_new_from_media(mMedia); - if (!Settings::getInstance()->getBool("VideoAudio")) + if (!Settings::getInstance()->getBool("VideoAudio") || + (Settings::getInstance()->getBool("ScreenSaverVideoMute") && mScreensaverMode)) { libvlc_audio_set_mute(mMediaPlayer, 1); } From a8528f718a9bf02ba93e1a235162af5dcd8d596e Mon Sep 17 00:00:00 2001 From: Tyson Nottingham Date: Sun, 29 Mar 2020 22:10:22 -0700 Subject: [PATCH 412/603] Input config: initialize hold any button to skip message visibility This message is usually only visible when configuring a button whose configuration can be skipped. Set it correctly for the first button. --- es-core/src/guis/GuiInputConfig.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index c3d72f9c3c..833ac3180e 100755 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -15,9 +15,8 @@ struct InputConfigStructure const char* icon; }; -static const int inputCount = 25; -static const InputConfigStructure GUI_INPUT_CONFIG_LIST[inputCount] = -{ +static const std::array GUI_INPUT_CONFIG_LIST = +{{ { "Up", false, "D-PAD UP", ":/help/dpad_up.svg" }, { "Down", false, "D-PAD DOWN", ":/help/dpad_down.svg" }, { "Left", false, "D-PAD LEFT", ":/help/dpad_left.svg" }, @@ -43,7 +42,7 @@ static const InputConfigStructure GUI_INPUT_CONFIG_LIST[inputCount] = { "RightAnalogLeft", true, "RIGHT ANALOG LEFT", ":/help/analog_left.svg" }, { "RightAnalogRight", true, "RIGHT ANALOG RIGHT", ":/help/analog_right.svg" }, { "HotKeyEnable", true, "HOTKEY ENABLE", ":/help/button_hotkey.svg" } -}; +}}; //MasterVolUp and MasterVolDown are also hooked up, but do not appear on this screen. //If you want, you can manually add them to es_input.cfg. @@ -82,13 +81,15 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mGrid.setEntry(mSubtitle1, Vector2i(0, 2), false, true); mSubtitle2 = std::make_shared(mWindow, "HOLD ANY BUTTON TO SKIP", Font::get(FONT_SIZE_SMALL), 0x999999FF, ALIGN_CENTER); + static_assert(GUI_INPUT_CONFIG_LIST.size() > 0); + mSubtitle2->setOpacity(GUI_INPUT_CONFIG_LIST[0].skippable * 255); mGrid.setEntry(mSubtitle2, Vector2i(0, 3), false, true); // 4 is a spacer row mList = std::make_shared(mWindow); mGrid.setEntry(mList, Vector2i(0, 5), true, true); - for(int i = 0; i < inputCount; i++) + for(int i = 0; i < GUI_INPUT_CONFIG_LIST.size(); i++) { ComponentListRow row; From b6f0f5c2c7af79dd421db83b3b952764603be897 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Wed, 1 Apr 2020 16:13:59 +0200 Subject: [PATCH 413/603] Fix clearcolors --- es-core/src/renderers/Renderer_GL21.cpp | 2 +- es-core/src/renderers/Renderer_GLES10.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/es-core/src/renderers/Renderer_GL21.cpp b/es-core/src/renderers/Renderer_GL21.cpp index 0c1089b83d..d5c7025e74 100644 --- a/es-core/src/renderers/Renderer_GL21.cpp +++ b/es-core/src/renderers/Renderer_GL21.cpp @@ -111,7 +111,7 @@ namespace Renderer uint8_t data[4] = {255, 255, 255, 255}; whiteTexture = createTexture(Texture::RGBA, false, true, 1, 1, data); - GL_CHECK_ERROR(glClearColor(1.0f, 1.0f, 1.0f, 1.0f)); + GL_CHECK_ERROR(glClearColor(0.0f, 0.0f, 0.0f, 1.0f)); GL_CHECK_ERROR(glEnable(GL_TEXTURE_2D)); GL_CHECK_ERROR(glEnable(GL_BLEND)); GL_CHECK_ERROR(glPixelStorei(GL_PACK_ALIGNMENT, 1)); diff --git a/es-core/src/renderers/Renderer_GLES10.cpp b/es-core/src/renderers/Renderer_GLES10.cpp index b86a16a059..5c7ad692db 100644 --- a/es-core/src/renderers/Renderer_GLES10.cpp +++ b/es-core/src/renderers/Renderer_GLES10.cpp @@ -111,7 +111,7 @@ namespace Renderer uint8_t data[4] = {255, 255, 255, 255}; whiteTexture = createTexture(Texture::RGBA, false, true, 1, 1, data); - GL_CHECK_ERROR(glClearColor(1.0f, 1.0f, 1.0f, 1.0f)); + GL_CHECK_ERROR(glClearColor(0.0f, 0.0f, 0.0f, 1.0f)); GL_CHECK_ERROR(glEnable(GL_TEXTURE_2D)); GL_CHECK_ERROR(glEnable(GL_BLEND)); GL_CHECK_ERROR(glPixelStorei(GL_PACK_ALIGNMENT, 1)); From f3de559cc3f9f49434a5e69bafa6b4ac66119ef3 Mon Sep 17 00:00:00 2001 From: pjft Date: Wed, 8 Apr 2020 11:36:34 +0100 Subject: [PATCH 414/603] Fix rotation for OMX Player --- es-core/src/components/VideoPlayerComponent.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index 1527f671f1..9133a84c5e 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -118,7 +118,7 @@ void VideoPlayerComponent::startVideo() case 1: { - const int x1 = (int)(Renderer::getScreenWidth() - Renderer::getScreenOffsetY() - y - mSize.y()); + const int x1 = (int)(Renderer::getWindowWidth() - Renderer::getScreenOffsetY() - y - mSize.y()); const int y1 = (int)(Renderer::getScreenOffsetX() + x); const int x2 = (int)(x1 + mSize.y()); const int y2 = (int)(y1 + mSize.x()); @@ -128,8 +128,8 @@ void VideoPlayerComponent::startVideo() case 2: { - const int x1 = (int)(Renderer::getScreenWidth() - Renderer::getScreenOffsetX() - x - mSize.x()); - const int y1 = (int)(Renderer::getScreenHeight() - Renderer::getScreenOffsetY() - y - mSize.y()); + const int x1 = (int)(Renderer::getWindowWidth() - Renderer::getScreenOffsetX() - x - mSize.x()); + const int y1 = (int)(Renderer::getWindowHeight() - Renderer::getScreenOffsetY() - y - mSize.y()); const int x2 = (int)(x1 + mSize.x()); const int y2 = (int)(y1 + mSize.y()); sprintf(buf1, "%d,%d,%d,%d", x1, y1, x2, y2); @@ -139,7 +139,7 @@ void VideoPlayerComponent::startVideo() case 3: { const int x1 = (int)(Renderer::getScreenOffsetY() + y); - const int y1 = (int)(Renderer::getScreenHeight() - Renderer::getScreenOffsetX() - x - mSize.x()); + const int y1 = (int)(Renderer::getWindowHeight() - Renderer::getScreenOffsetX() - x - mSize.x()); const int x2 = (int)(x1 + mSize.y()); const int y2 = (int)(y1 + mSize.x()); sprintf(buf1, "%d,%d,%d,%d", x1, y1, x2, y2); From a07f27e02a7189f3735412612d305ddad65987af Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Sat, 11 Apr 2020 19:36:25 +0100 Subject: [PATCH 415/603] cmake: minor correction to support Ubuntu 20.04 --- CMake/Packages/FindRapidJSON.cmake | 2 +- CMake/Packages/FindSDL2.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMake/Packages/FindRapidJSON.cmake b/CMake/Packages/FindRapidJSON.cmake index b5b69e7278..731461a344 100644 --- a/CMake/Packages/FindRapidJSON.cmake +++ b/CMake/Packages/FindRapidJSON.cmake @@ -1,4 +1,4 @@ -#.rst: +#.rst: # FindRapidjson # -------- # diff --git a/CMake/Packages/FindSDL2.cmake b/CMake/Packages/FindSDL2.cmake index 236d6b4b9c..68253ba0b7 100644 --- a/CMake/Packages/FindSDL2.cmake +++ b/CMake/Packages/FindSDL2.cmake @@ -79,7 +79,7 @@ SET(SDL2_SEARCH_PATHS FIND_PATH(SDL2_INCLUDE_DIR SDL.h HINTS $ENV{SDL2DIR} - PATH_SUFFIXES include/SDL2 include + PATH_SUFFIXES SDL2 include/SDL2 include PATHS ${SDL2_SEARCH_PATHS} ) From 4226cccf7a05e91e900ba0eab5363ddfb44ae086 Mon Sep 17 00:00:00 2001 From: Hugo Hromic Date: Sun, 12 Apr 2020 09:48:46 +0100 Subject: [PATCH 416/603] Modernise SDL2 CMake find module * imported from: https://gitlab.com/aminosbh/sdl2-cmake-modules * has support for imported targets * also use correct includes/libraries variable names for SDL2 --- CMake/Packages/FindSDL2.cmake | 532 ++++++++++++++++++++++++---------- CMakeLists.txt | 4 +- 2 files changed, 381 insertions(+), 155 deletions(-) diff --git a/CMake/Packages/FindSDL2.cmake b/CMake/Packages/FindSDL2.cmake index 68253ba0b7..69d46c6d99 100644 --- a/CMake/Packages/FindSDL2.cmake +++ b/CMake/Packages/FindSDL2.cmake @@ -1,163 +1,389 @@ -# Locate SDL2 library -# This module defines -# SDL2_LIBRARY, the name of the library to link against -# SDL2_FOUND, if false, do not try to link to SDL2 -# SDL2_INCLUDE_DIR, where to find SDL.h -# -# This module responds to the the flag: -# SDL2_BUILDING_LIBRARY -# If this is defined, then no SDL2main 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 SDL2_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 -lSDL2main 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 SDL2_LIBRARY_TEMP in your configuration -# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library -# (SDL2.dll, libsdl2.so, SDL2.framework, etc). -# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again. -# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value -# as appropriate. These values are used to generate the final SDL2_LIBRARY -# variable, but when these values are unset, SDL2_LIBRARY does not get created. -# -# -# $SDL2DIR is an environment variable that would -# correspond to the ./configure --prefix=$SDL2DIR -# used in building SDL2. -# 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 SDL2main 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 -# SDL2_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 SDL2/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 SDL2/ (see FreeBSD). - -#============================================================================= -# Copyright 2003-2009 Kitware, Inc. -# -# 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.) - -SET(SDL2_SEARCH_PATHS - ~/Library/Frameworks - /Library/Frameworks - /usr/local - /usr - /sw # Fink - /opt/local # DarwinPorts - /opt/csw # Blastwave - /opt -) +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +# Copyright 2019 Amine Ben Hassouna +# Copyright 2000-2019 Kitware, Inc. and Contributors +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. + +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. + +# * Neither the name of Kitware, Inc. nor the names of Contributors +# may be used to endorse or promote products derived from this +# software without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "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 COPYRIGHT +# HOLDER OR CONTRIBUTORS 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. + +#[=======================================================================[.rst: +FindSDL2 +-------- + +Locate SDL2 library + +This module defines the following 'IMPORTED' targets: + +:: + + SDL2::Core + The SDL2 library, if found. + Libraries should link to SDL2::Core + + SDL2::Main + The SDL2main library, if found. + Applications should link to SDL2::Main instead of SDL2::Core + + + +This module will set the following variables in your project: + +:: + + SDL2_LIBRARIES, the name of the library to link against + SDL2_INCLUDE_DIRS, where to find SDL.h + SDL2_FOUND, if false, do not try to link to SDL2 + SDL2MAIN_FOUND, if false, do not try to link to SDL2main + SDL2_VERSION_STRING, human-readable string containing the version of SDL2 + + + +This module responds to the following cache variables: + +:: + + SDL2_PATH + Set a custom SDL2 Library path (default: empty) + + SDL2_NO_DEFAULT_PATH + Disable search SDL2 Library in default path. + If SDL2_PATH (default: ON) + Else (default: OFF) + + SDL2_INCLUDE_DIR + SDL2 headers path. + + SDL2_LIBRARY + SDL2 Library (.dll, .so, .a, etc) path. + + SDL2MAIN_LIBRAY + SDL2main Library (.a) path. + + SDL2_BUILDING_LIBRARY + This flag is useful only when linking to SDL2_LIBRARIES insead of + SDL2::Main. It is required only when building a library that links to + SDL2_LIBRARIES, because only applications need main() (No need to also + link to SDL2main). + If this flag is defined, then no SDL2main will be added to SDL2_LIBRARIES + and no SDL2::Main target will be created. + + +Don't forget to include SDLmain.h and SDLmain.m in your project for the +OS X framework based version. (Other versions link to -lSDL2main 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 SDL2_LIBRARY in your project +configuration, it means CMake did not find your SDL2 library +(SDL2.dll, libsdl2.so, SDL2.framework, etc). Set SDL2_LIBRARY to point +to your SDL2 library, and configure again. Similarly, if you see an +empty SDL2MAIN_LIBRARY, you should set this value as appropriate. These +values are used to generate the final SDL2_LIBRARIES variable and the +SDL2::Core and SDL2::Main targets, but when these values are unset, +SDL2_LIBRARIES, SDL2::Core and SDL2::Main does not get created. + + +$SDL2DIR is an environment variable that would correspond to the +./configure --prefix=$SDL2DIR used in building SDL2. l.e.galup 9-20-02 + + + +Created by Amine Ben Hassouna: + Adapt FindSDL.cmake to SDL2 (FindSDL2.cmake). + Add cache variables for more flexibility: + SDL2_PATH, SDL2_NO_DEFAULT_PATH (for details, see doc above). + Mark 'Threads' as a required dependency for non-OSX systems. + Modernize the FindSDL2.cmake module by creating specific targets: + SDL2::Core and SDL2::Main (for details, see doc above). -FIND_PATH(SDL2_INCLUDE_DIR SDL.h - HINTS - $ENV{SDL2DIR} - PATH_SUFFIXES SDL2 include/SDL2 include - PATHS ${SDL2_SEARCH_PATHS} + +Original FindSDL.cmake module: + 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 value of SDL2_LIBRARY to +override this selection or set the SDL2_PATH variable or 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). +#]=======================================================================] + +# Define options for searching SDL2 Library in a custom path + +set(SDL2_PATH "" CACHE STRING "Custom SDL2 Library path") + +set(_SDL2_NO_DEFAULT_PATH OFF) +if(SDL2_PATH) + set(_SDL2_NO_DEFAULT_PATH ON) +endif() + +set(SDL2_NO_DEFAULT_PATH ${_SDL2_NO_DEFAULT_PATH} + CACHE BOOL "Disable search SDL2 Library in default path") +unset(_SDL2_NO_DEFAULT_PATH) + +set(SDL2_NO_DEFAULT_PATH_CMD) +if(SDL2_NO_DEFAULT_PATH) + set(SDL2_NO_DEFAULT_PATH_CMD NO_DEFAULT_PATH) +endif() + +# Search for the SDL2 include directory +find_path(SDL2_INCLUDE_DIR SDL.h + HINTS + ENV SDL2DIR + ${SDL2_NO_DEFAULT_PATH_CMD} + PATH_SUFFIXES SDL2 + # path suffixes to search inside ENV{SDL2DIR} + include/SDL2 include + PATHS ${SDL2_PATH} + DOC "Where the SDL2 headers can be found" ) -FIND_LIBRARY(SDL2_LIBRARY_TEMP - NAMES SDL2 - HINTS - $ENV{SDL2DIR} - PATH_SUFFIXES lib64 lib - PATHS ${SDL2_SEARCH_PATHS} +set(SDL2_INCLUDE_DIRS "${SDL2_INCLUDE_DIR}") + +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(VC_LIB_PATH_SUFFIX lib/x64) +else() + set(VC_LIB_PATH_SUFFIX lib/x86) +endif() + +# SDL-2.0 is the name used by FreeBSD ports... +# don't confuse it for the version number. +find_library(SDL2_LIBRARY + NAMES SDL2 SDL-2.0 + HINTS + ENV SDL2DIR + ${SDL2_NO_DEFAULT_PATH_CMD} + PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX} + PATHS ${SDL2_PATH} + DOC "Where the SDL2 Library can be found" ) -IF(NOT SDL2_BUILDING_LIBRARY) - IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") - # Non-OS X framework versions expect you to also dynamically link to - # SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms - # seem to provide SDL2main for compatibility even though they don't - # necessarily need it. - FIND_LIBRARY(SDL2MAIN_LIBRARY - NAMES SDL2main - HINTS - $ENV{SDL2DIR} - PATH_SUFFIXES lib64 lib - PATHS ${SDL2_SEARCH_PATHS} - ) - ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") -ENDIF(NOT SDL2_BUILDING_LIBRARY) +set(SDL2_LIBRARIES "${SDL2_LIBRARY}") + +if(NOT SDL2_BUILDING_LIBRARY) + if(NOT SDL2_INCLUDE_DIR MATCHES ".framework") + # Non-OS X framework versions expect you to also dynamically link to + # SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms + # seem to provide SDL2main for compatibility even though they don't + # necessarily need it. + + if(SDL2_PATH) + set(SDL2MAIN_LIBRARY_PATHS "${SDL2_PATH}") + endif() + + if(NOT SDL2_NO_DEFAULT_PATH) + set(SDL2MAIN_LIBRARY_PATHS + /sw + /opt/local + /opt/csw + /opt + "${SDL2MAIN_LIBRARY_PATHS}" + ) + endif() + + find_library(SDL2MAIN_LIBRARY + NAMES SDL2main + HINTS + ENV SDL2DIR + ${SDL2_NO_DEFAULT_PATH_CMD} + PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX} + PATHS ${SDL2MAIN_LIBRARY_PATHS} + DOC "Where the SDL2main library can be found" + ) + unset(SDL2MAIN_LIBRARY_PATHS) + endif() +endif() # SDL2 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 -lSDL2main -lSDL2 -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) - -IF(SDL2_LIBRARY_TEMP) - # For SDL2main - IF(NOT SDL2_BUILDING_LIBRARY) - IF(SDL2MAIN_LIBRARY) - SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP}) - ENDIF(SDL2MAIN_LIBRARY) - ENDIF(NOT SDL2_BUILDING_LIBRARY) - - # For OS X, SDL2 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(SDL2_LIBRARY_TEMP ${SDL2_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(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) - ENDIF(NOT APPLE) - - # For MinGW library - IF(MINGW) - SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP}) - ENDIF(MINGW) - - # Set the final string here so the GUI reflects the final state. - SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found") - # Set the temp variable to INTERNAL so it is not seen in the CMake GUI - SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "") -ENDIF(SDL2_LIBRARY_TEMP) - -INCLUDE(FindPackageHandleStandardArgs) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR) +if(NOT APPLE) + find_package(Threads QUIET) + if(NOT Threads_FOUND) + set(SDL2_THREADS_NOT_FOUND "Could NOT find Threads (Threads is required by SDL2).") + if(SDL2_FIND_REQUIRED) + message(FATAL_ERROR ${SDL2_THREADS_NOT_FOUND}) + else() + if(NOT SDL2_FIND_QUIETLY) + message(STATUS ${SDL2_THREADS_NOT_FOUND}) + endif() + return() + endif() + unset(SDL2_THREADS_NOT_FOUND) + endif() +endif() + +# MinGW needs an additional link flag, -mwindows +# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -mwindows +if(MINGW) + set(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "link flags for MinGW") +endif() + +if(SDL2_LIBRARY) + # For SDL2main + if(SDL2MAIN_LIBRARY AND NOT SDL2_BUILDING_LIBRARY) + list(FIND SDL2_LIBRARIES "${SDL2MAIN_LIBRARY}" _SDL2_MAIN_INDEX) + if(_SDL2_MAIN_INDEX EQUAL -1) + set(SDL2_LIBRARIES "${SDL2MAIN_LIBRARY}" ${SDL2_LIBRARIES}) + endif() + unset(_SDL2_MAIN_INDEX) + endif() + + # For OS X, SDL2 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(SDL2_LIBRARIES ${SDL2_LIBRARIES} -framework Cocoa) + endif() + + # 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(SDL2_LIBRARIES ${SDL2_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) + endif() + + # For MinGW library + if(MINGW) + set(SDL2_LIBRARIES ${MINGW32_LIBRARY} ${SDL2_LIBRARIES}) + endif() + +endif() + +# Read SDL2 version +if(SDL2_INCLUDE_DIR AND EXISTS "${SDL2_INCLUDE_DIR}/SDL_version.h") + file(STRINGS "${SDL2_INCLUDE_DIR}/SDL_version.h" SDL2_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_INCLUDE_DIR}/SDL_version.h" SDL2_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL_MINOR_VERSION[ \t]+[0-9]+$") + file(STRINGS "${SDL2_INCLUDE_DIR}/SDL_version.h" SDL2_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL_PATCHLEVEL[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+SDL_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MAJOR "${SDL2_VERSION_MAJOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MINOR "${SDL2_VERSION_MINOR_LINE}") + string(REGEX REPLACE "^#define[ \t]+SDL_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_PATCH "${SDL2_VERSION_PATCH_LINE}") + set(SDL2_VERSION_STRING ${SDL2_VERSION_MAJOR}.${SDL2_VERSION_MINOR}.${SDL2_VERSION_PATCH}) + unset(SDL2_VERSION_MAJOR_LINE) + unset(SDL2_VERSION_MINOR_LINE) + unset(SDL2_VERSION_PATCH_LINE) + unset(SDL2_VERSION_MAJOR) + unset(SDL2_VERSION_MINOR) + unset(SDL2_VERSION_PATCH) +endif() + +include(FindPackageHandleStandardArgs) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 + REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR + VERSION_VAR SDL2_VERSION_STRING) + +if(SDL2MAIN_LIBRARY) + set(FPHSA_NAME_MISMATCHED 1) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2main + REQUIRED_VARS SDL2MAIN_LIBRARY SDL2_INCLUDE_DIR + VERSION_VAR SDL2_VERSION_STRING) +endif() + + +mark_as_advanced(SDL2_PATH + SDL2_NO_DEFAULT_PATH + SDL2_LIBRARY + SDL2MAIN_LIBRARY + SDL2_INCLUDE_DIR + SDL2_BUILDING_LIBRARY) + + +# SDL2:: targets (SDL2::Core and SDL2::Main) +if(SDL2_FOUND) + + # SDL2::Core target + if(SDL2_LIBRARY AND NOT TARGET SDL2::Core) + add_library(SDL2::Core UNKNOWN IMPORTED) + set_target_properties(SDL2::Core PROPERTIES + IMPORTED_LOCATION "${SDL2_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}") + + if(APPLE) + # For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa. + # For more details, please see above. + set_property(TARGET SDL2::Core APPEND PROPERTY + INTERFACE_LINK_OPTIONS -framework Cocoa) + else() + # For threads, as mentioned Apple doesn't need this. + # For more details, please see above. + set_property(TARGET SDL2::Core APPEND PROPERTY + INTERFACE_LINK_LIBRARIES Threads::Threads) + endif() + endif() + + # SDL2::Main target + # Applications should link to SDL2::Main instead of SDL2::Core + # For more details, please see above. + if(NOT SDL2_BUILDING_LIBRARY AND NOT TARGET SDL2::Main) + + if(SDL2_INCLUDE_DIR MATCHES ".framework" OR NOT SDL2MAIN_LIBRARY) + add_library(SDL2::Main INTERFACE IMPORTED) + set_property(TARGET SDL2::Main PROPERTY + INTERFACE_LINK_LIBRARIES SDL2::Core) + elseif(SDL2MAIN_LIBRARY) + # MinGW requires that the mingw32 library is specified before the + # libSDL2main.a static library when linking. + # The SDL2::MainInternal target is used internally to make sure that + # CMake respects this condition. + add_library(SDL2::MainInternal UNKNOWN IMPORTED) + set_property(TARGET SDL2::MainInternal PROPERTY + IMPORTED_LOCATION "${SDL2MAIN_LIBRARY}") + set_property(TARGET SDL2::MainInternal PROPERTY + INTERFACE_LINK_LIBRARIES SDL2::Core) + + add_library(SDL2::Main INTERFACE IMPORTED) + + if(MINGW) + # MinGW needs an additional link flag '-mwindows' and link to mingw32 + set_property(TARGET SDL2::Main PROPERTY + INTERFACE_LINK_LIBRARIES "mingw32" "-mwindows") + endif() + + set_property(TARGET SDL2::Main APPEND PROPERTY + INTERFACE_LINK_LIBRARIES SDL2::MainInternal) + endif() + + endif() +endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index e34a342abc..c97d62c4b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -128,7 +128,7 @@ set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") set(COMMON_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIRS} ${FreeImage_INCLUDE_DIRS} - ${SDL2_INCLUDE_DIR} + ${SDL2_INCLUDE_DIRS} ${CURL_INCLUDE_DIR} ${VLC_INCLUDE_DIR} ${RAPIDJSON_INCLUDE_DIRS} @@ -189,7 +189,7 @@ endif() set(COMMON_LIBRARIES ${FREETYPE_LIBRARIES} ${FreeImage_LIBRARIES} - ${SDL2_LIBRARY} + ${SDL2_LIBRARIES} ${CURL_LIBRARIES} ${VLC_LIBRARIES} pugixml From d35096ba813b6dd43d26abc58743809004582212 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sun, 5 Jan 2020 17:12:33 +0100 Subject: [PATCH 417/603] Copy of GLES10 --- es-core/src/renderers/Renderer_GLES20.cpp | 266 ++++++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 es-core/src/renderers/Renderer_GLES20.cpp diff --git a/es-core/src/renderers/Renderer_GLES20.cpp b/es-core/src/renderers/Renderer_GLES20.cpp new file mode 100644 index 0000000000..5c7ad692db --- /dev/null +++ b/es-core/src/renderers/Renderer_GLES20.cpp @@ -0,0 +1,266 @@ +#if defined(USE_OPENGLES_10) + +#include "renderers/Renderer.h" +#include "math/Transform4x4f.h" +#include "Log.h" +#include "Settings.h" + +#include +#include + +namespace Renderer +{ + +#if defined(_DEBUG) +#define GL_CHECK_ERROR(Function) (Function, _GLCheckError(#Function)) + + static void _GLCheckError(const char* _funcName) + { + const GLenum errorCode = glGetError(); + + if(errorCode != GL_NO_ERROR) + LOG(LogError) << "OpenGLES error: " << _funcName << " failed with error code: " << errorCode; + } +#else +#define GL_CHECK_ERROR(Function) (Function) +#endif + + static SDL_GLContext sdlContext = nullptr; + static GLuint whiteTexture = 0; + + static GLenum convertBlendFactor(const Blend::Factor _blendFactor) + { + switch(_blendFactor) + { + case Blend::ZERO: { return GL_ZERO; } break; + case Blend::ONE: { return GL_ONE; } break; + case Blend::SRC_COLOR: { return GL_SRC_COLOR; } break; + case Blend::ONE_MINUS_SRC_COLOR: { return GL_ONE_MINUS_SRC_COLOR; } break; + case Blend::SRC_ALPHA: { return GL_SRC_ALPHA; } break; + case Blend::ONE_MINUS_SRC_ALPHA: { return GL_ONE_MINUS_SRC_ALPHA; } break; + case Blend::DST_COLOR: { return GL_DST_COLOR; } break; + case Blend::ONE_MINUS_DST_COLOR: { return GL_ONE_MINUS_DST_COLOR; } break; + case Blend::DST_ALPHA: { return GL_DST_ALPHA; } break; + case Blend::ONE_MINUS_DST_ALPHA: { return GL_ONE_MINUS_DST_ALPHA; } break; + default: { return GL_ZERO; } + } + + } // convertBlendFactor + + static GLenum convertTextureType(const Texture::Type _type) + { + switch(_type) + { + case Texture::RGBA: { return GL_RGBA; } break; + case Texture::ALPHA: { return GL_ALPHA; } break; + default: { return GL_ZERO; } + } + + } // convertTextureType + + unsigned int convertColor(const unsigned int _color) + { + // convert from rgba to abgr + unsigned char r = ((_color & 0xff000000) >> 24) & 255; + unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; + unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; + unsigned char a = ((_color & 0x000000ff) ) & 255; + + return ((a << 24) | (b << 16) | (g << 8) | (r)); + + } // convertColor + + unsigned int getWindowFlags() + { + return SDL_WINDOW_OPENGL; + + } // getWindowFlags + + void setupWindow() + { + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); + + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); + + } // setupWindow + + void createContext() + { + sdlContext = SDL_GL_CreateContext(getSDLWindow()); + SDL_GL_MakeCurrent(getSDLWindow(), sdlContext); + + std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; + std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; + std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; + std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; + + LOG(LogInfo) << "GL vendor: " << vendor; + LOG(LogInfo) << "GL renderer: " << renderer; + LOG(LogInfo) << "GL version: " << version; + LOG(LogInfo) << "Checking available OpenGL extensions..."; + std::string glExts = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; + LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); + + uint8_t data[4] = {255, 255, 255, 255}; + whiteTexture = createTexture(Texture::RGBA, false, true, 1, 1, data); + + GL_CHECK_ERROR(glClearColor(0.0f, 0.0f, 0.0f, 1.0f)); + GL_CHECK_ERROR(glEnable(GL_TEXTURE_2D)); + GL_CHECK_ERROR(glEnable(GL_BLEND)); + GL_CHECK_ERROR(glPixelStorei(GL_PACK_ALIGNMENT, 1)); + GL_CHECK_ERROR(glPixelStorei(GL_UNPACK_ALIGNMENT, 1)); + GL_CHECK_ERROR(glEnableClientState(GL_VERTEX_ARRAY)); + GL_CHECK_ERROR(glEnableClientState(GL_TEXTURE_COORD_ARRAY)); + GL_CHECK_ERROR(glEnableClientState(GL_COLOR_ARRAY)); + + } // createContext + + void destroyContext() + { + SDL_GL_DeleteContext(sdlContext); + sdlContext = nullptr; + + } // destroyContext + + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) + { + const GLenum type = convertTextureType(_type); + unsigned int texture; + + GL_CHECK_ERROR(glGenTextures(1, &texture)); + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, texture)); + + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE)); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE)); + + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _linear ? GL_LINEAR : GL_NEAREST)); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); + + GL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, type, _width, _height, 0, type, GL_UNSIGNED_BYTE, _data)); + + return texture; + + } // createTexture + + void destroyTexture(const unsigned int _texture) + { + GL_CHECK_ERROR(glDeleteTextures(1, &_texture)); + + } // destroyTexture + + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) + { + const GLenum type = convertTextureType(_type); + + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, _texture)); + GL_CHECK_ERROR(glTexSubImage2D(GL_TEXTURE_2D, 0, _x, _y, _width, _height, type, GL_UNSIGNED_BYTE, _data)); + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); + + } // updateTexture + + void bindTexture(const unsigned int _texture) + { + if(_texture == 0) GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); + else GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, _texture)); + + } // bindTexture + + void drawLines(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + { + GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); + GL_CHECK_ERROR(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex)); + GL_CHECK_ERROR(glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col)); + + GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor))); + + GL_CHECK_ERROR(glDrawArrays(GL_LINES, 0, _numVertices)); + + } // drawLines + + void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + { + GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); + GL_CHECK_ERROR(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex)); + GL_CHECK_ERROR(glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col)); + + GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor))); + + GL_CHECK_ERROR(glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVertices)); + + } // drawTriangleStrips + + void setProjection(const Transform4x4f& _projection) + { + GL_CHECK_ERROR(glMatrixMode(GL_PROJECTION)); + GL_CHECK_ERROR(glLoadMatrixf((GLfloat*)&_projection)); + + } // setProjection + + void setMatrix(const Transform4x4f& _matrix) + { + Transform4x4f matrix = _matrix; + matrix.round(); + + GL_CHECK_ERROR(glMatrixMode(GL_MODELVIEW)); + GL_CHECK_ERROR(glLoadMatrixf((GLfloat*)&matrix)); + + } // setMatrix + + void setViewport(const Rect& _viewport) + { + // glViewport starts at the bottom left of the window + GL_CHECK_ERROR(glViewport( _viewport.x, getWindowHeight() - _viewport.y - _viewport.h, _viewport.w, _viewport.h)); + + } // setViewport + + void setScissor(const Rect& _scissor) + { + if((_scissor.x == 0) && (_scissor.y == 0) && (_scissor.w == 0) && (_scissor.h == 0)) + { + GL_CHECK_ERROR(glDisable(GL_SCISSOR_TEST)); + } + else + { + // glScissor starts at the bottom left of the window + GL_CHECK_ERROR(glScissor(_scissor.x, getWindowHeight() - _scissor.y - _scissor.h, _scissor.w, _scissor.h)); + GL_CHECK_ERROR(glEnable(GL_SCISSOR_TEST)); + } + + } // setScissor + + void setSwapInterval() + { + // vsync + if(Settings::getInstance()->getBool("VSync")) + { + // SDL_GL_SetSwapInterval(0) for immediate updates (no vsync, default), + // 1 for updates synchronized with the vertical retrace, + // or -1 for late swap tearing. + // SDL_GL_SetSwapInterval returns 0 on success, -1 on error. + // if vsync is requested, try normal vsync; if that doesn't work, try late swap tearing + // if that doesn't work, report an error + if(SDL_GL_SetSwapInterval(1) != 0 && SDL_GL_SetSwapInterval(-1) != 0) + LOG(LogWarning) << "Tried to enable vsync, but failed! (" << SDL_GetError() << ")"; + } + else + SDL_GL_SetSwapInterval(0); + + } // setSwapInterval + + void swapBuffers() + { + SDL_GL_SwapWindow(getSDLWindow()); + GL_CHECK_ERROR(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); + + } // swapBuffers + +} // Renderer:: + +#endif // USE_OPENGLES_10 From 8542cc3a095942365385b0d4869d4a77f9dec73b Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sun, 12 Apr 2020 13:55:43 +0200 Subject: [PATCH 418/603] Add GLES20 renderer --- es-core/CMakeLists.txt | 1 + es-core/src/renderers/Renderer_GLES20.cpp | 257 +++++++++++++++++++--- 2 files changed, 231 insertions(+), 27 deletions(-) diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 0503055575..fa2e3e6c0b 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -141,6 +141,7 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GL21.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GLES10.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GLES20.cpp # Resources ${CMAKE_CURRENT_SOURCE_DIR}/src/resources/Font.cpp diff --git a/es-core/src/renderers/Renderer_GLES20.cpp b/es-core/src/renderers/Renderer_GLES20.cpp index 5c7ad692db..b9583ac19f 100644 --- a/es-core/src/renderers/Renderer_GLES20.cpp +++ b/es-core/src/renderers/Renderer_GLES20.cpp @@ -1,11 +1,11 @@ -#if defined(USE_OPENGLES_10) +#if defined(USE_OPENGLES_20) #include "renderers/Renderer.h" #include "math/Transform4x4f.h" #include "Log.h" #include "Settings.h" -#include +#include #include namespace Renderer @@ -25,8 +25,167 @@ namespace Renderer #define GL_CHECK_ERROR(Function) (Function) #endif - static SDL_GLContext sdlContext = nullptr; - static GLuint whiteTexture = 0; + static SDL_GLContext sdlContext = nullptr; + static Transform4x4f projectionMatrix = Transform4x4f::Identity(); + static Transform4x4f worldViewMatrix = Transform4x4f::Identity(); + static GLuint shaderProgram = 0; + static GLint mvpUniform = 0; + static GLint texAttrib = 0; + static GLint colAttrib = 0; + static GLint posAttrib = 0; + static GLuint vertexBuffer = 0; + static GLuint whiteTexture = 0; + + static void setupShaders() + { + // vertex shader + const GLchar* vertexSource = + "uniform mat4 u_mvp; \n" + "attribute vec2 a_pos; \n" + "attribute vec2 a_tex; \n" + "attribute vec4 a_col; \n" + "varying vec2 v_tex; \n" + "varying vec4 v_col; \n" + "void main(void) \n" + "{ \n" + " gl_Position = u_mvp * vec4(a_pos.xy, 0.0, 1.0); \n" + " v_tex = a_tex; \n" + " v_col = a_col; \n" + "} \n"; + + GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); + GL_CHECK_ERROR(glShaderSource(vertexShader, 1, &vertexSource, nullptr)); + GL_CHECK_ERROR(glCompileShader(vertexShader)); + + { + GLint isCompiled = GL_FALSE; + GLint maxLength = 0; + + GL_CHECK_ERROR(glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &isCompiled)); + GL_CHECK_ERROR(glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH, &maxLength)); + + if(maxLength > 1) + { + char* infoLog = new char[maxLength + 1]; + + GL_CHECK_ERROR(glGetShaderInfoLog(vertexShader, maxLength, &maxLength, infoLog)); + + if(isCompiled == GL_FALSE) + { + LOG(LogError) << "GLSL Vertex Compile Error\n" << infoLog; + } + else + { + if(strstr(infoLog, "WARNING") || strstr(infoLog, "warning") || strstr(infoLog, "Warning")) + LOG(LogWarning) << "GLSL Vertex Compile Warning\n" << infoLog; + else + LOG(LogInfo) << "GLSL Vertex Compile Message\n" << infoLog; + } + + delete[] infoLog; + } + } + + // fragment shader + const GLchar* fragmentSource = + "precision highp float; \n" + "uniform sampler2D u_tex; \n" + "varying vec2 v_tex; \n" + "varying vec4 v_col; \n" + "void main(void) \n" + "{ \n" + " gl_FragColor = texture2D(u_tex, v_tex) * v_col; \n" + "} \n"; + + GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + GL_CHECK_ERROR(glShaderSource(fragmentShader, 1, &fragmentSource, nullptr)); + GL_CHECK_ERROR(glCompileShader(fragmentShader)); + + { + GLint isCompiled = GL_FALSE; + GLint maxLength = 0; + + GL_CHECK_ERROR(glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &isCompiled)); + GL_CHECK_ERROR(glGetShaderiv(fragmentShader, GL_INFO_LOG_LENGTH, &maxLength)); + + if(maxLength > 1) + { + char* infoLog = new char[maxLength + 1]; + + GL_CHECK_ERROR(glGetShaderInfoLog(fragmentShader, maxLength, &maxLength, infoLog)); + + if(isCompiled == GL_FALSE) + { + LOG(LogError) << "GLSL Fragment Compile Error\n" << infoLog; + } + else + { + if(strstr(infoLog, "WARNING") || strstr(infoLog, "warning") || strstr(infoLog, "Warning")) + LOG(LogWarning) << "GLSL Fragment Compile Warning\n" << infoLog; + else + LOG(LogInfo) << "GLSL Fragment Compile Message\n" << infoLog; + } + + delete[] infoLog; + } + } + + // shader program + shaderProgram = glCreateProgram(); + GL_CHECK_ERROR(glAttachShader(shaderProgram, vertexShader)); + GL_CHECK_ERROR(glAttachShader(shaderProgram, fragmentShader)); + + GL_CHECK_ERROR(glLinkProgram(shaderProgram)); + + { + GLint isCompiled = GL_FALSE; + GLint maxLength = 0; + + GL_CHECK_ERROR(glGetProgramiv(shaderProgram, GL_LINK_STATUS, &isCompiled)); + GL_CHECK_ERROR(glGetProgramiv(shaderProgram, GL_INFO_LOG_LENGTH, &maxLength)); + + if(maxLength > 1) + { + char* infoLog = new char[maxLength + 1]; + + GL_CHECK_ERROR(glGetProgramInfoLog(shaderProgram, maxLength, &maxLength, infoLog)); + + if(isCompiled == GL_FALSE) + { + LOG(LogError) << "GLSL Link Error\n" << infoLog; + } + else + { + if(strstr(infoLog, "WARNING") || strstr(infoLog, "warning") || strstr(infoLog, "Warning")) + LOG(LogWarning) << "GLSL Link Warning\n" << infoLog; + else + LOG(LogInfo) << "GLSL Link Message\n" << infoLog; + } + + delete[] infoLog; + } + } + + GL_CHECK_ERROR(glUseProgram(shaderProgram)); + + mvpUniform = glGetUniformLocation(shaderProgram, "u_mvp"); + posAttrib = glGetAttribLocation(shaderProgram, "a_pos"); + texAttrib = glGetAttribLocation(shaderProgram, "a_tex"); + colAttrib = glGetAttribLocation(shaderProgram, "a_col"); + GLint texUniform = glGetUniformLocation(shaderProgram, "u_tex"); + GL_CHECK_ERROR(glEnableVertexAttribArray(posAttrib)); + GL_CHECK_ERROR(glEnableVertexAttribArray(texAttrib)); + GL_CHECK_ERROR(glEnableVertexAttribArray(colAttrib)); + GL_CHECK_ERROR(glUniform1i(texUniform, 0)); + + } // setupShaders + + static void setupVertexBuffer() + { + GL_CHECK_ERROR(glGenBuffers(1, &vertexBuffer)); + GL_CHECK_ERROR(glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer)); + + } // setupVertexBuffer static GLenum convertBlendFactor(const Blend::Factor _blendFactor) { @@ -51,9 +210,9 @@ namespace Renderer { switch(_type) { - case Texture::RGBA: { return GL_RGBA; } break; - case Texture::ALPHA: { return GL_ALPHA; } break; - default: { return GL_ZERO; } + case Texture::RGBA: { return GL_RGBA; } break; + case Texture::ALPHA: { return GL_LUMINANCE_ALPHA; } break; + default: { return GL_ZERO; } } } // convertTextureType @@ -79,7 +238,7 @@ namespace Renderer void setupWindow() { SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); @@ -108,17 +267,17 @@ namespace Renderer std::string glExts = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); + setupShaders(); + setupVertexBuffer(); + uint8_t data[4] = {255, 255, 255, 255}; whiteTexture = createTexture(Texture::RGBA, false, true, 1, 1, data); GL_CHECK_ERROR(glClearColor(0.0f, 0.0f, 0.0f, 1.0f)); - GL_CHECK_ERROR(glEnable(GL_TEXTURE_2D)); + GL_CHECK_ERROR(glActiveTexture(GL_TEXTURE0)); GL_CHECK_ERROR(glEnable(GL_BLEND)); GL_CHECK_ERROR(glPixelStorei(GL_PACK_ALIGNMENT, 1)); GL_CHECK_ERROR(glPixelStorei(GL_UNPACK_ALIGNMENT, 1)); - GL_CHECK_ERROR(glEnableClientState(GL_VERTEX_ARRAY)); - GL_CHECK_ERROR(glEnableClientState(GL_TEXTURE_COORD_ARRAY)); - GL_CHECK_ERROR(glEnableClientState(GL_COLOR_ARRAY)); } // createContext @@ -143,7 +302,26 @@ namespace Renderer GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _linear ? GL_LINEAR : GL_NEAREST)); GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); - GL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, type, _width, _height, 0, type, GL_UNSIGNED_BYTE, _data)); + // Regular GL_ALPHA textures are black + alpha in shaders + // Create a GL_LUMINANCE_ALPHA texture instead so its white + alpha + if(type == GL_LUMINANCE_ALPHA) + { + uint8_t* a_data = (uint8_t*)_data; + uint8_t* la_data = new uint8_t[_width * _height * 2]; + for(uint32_t i=0; i<(_width * _height); ++i) + { + la_data[(i * 2) + 0] = 255; + la_data[(i * 2) + 1] = a_data ? a_data[i] : 255; + } + + GL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, type, _width, _height, 0, type, GL_UNSIGNED_BYTE, la_data)); + + delete[] la_data; + } + else + { + GL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, type, _width, _height, 0, type, GL_UNSIGNED_BYTE, _data)); + } return texture; @@ -160,7 +338,28 @@ namespace Renderer const GLenum type = convertTextureType(_type); GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, _texture)); - GL_CHECK_ERROR(glTexSubImage2D(GL_TEXTURE_2D, 0, _x, _y, _width, _height, type, GL_UNSIGNED_BYTE, _data)); + + // Regular GL_ALPHA textures are black + alpha in shaders + // Create a GL_LUMINANCE_ALPHA texture instead so its white + alpha + if(type == GL_LUMINANCE_ALPHA) + { + uint8_t* a_data = (uint8_t*)_data; + uint8_t* la_data = new uint8_t[_width * _height * 2]; + for(uint32_t i=0; i<(_width * _height); ++i) + { + la_data[(i * 2) + 0] = 255; + la_data[(i * 2) + 1] = a_data ? a_data[i] : 255; + } + + GL_CHECK_ERROR(glTexSubImage2D(GL_TEXTURE_2D, 0, _x, _y, _width, _height, type, GL_UNSIGNED_BYTE, la_data)); + + delete[] la_data; + } + else + { + GL_CHECK_ERROR(glTexSubImage2D(GL_TEXTURE_2D, 0, _x, _y, _width, _height, type, GL_UNSIGNED_BYTE, _data)); + } + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); } // updateTexture @@ -174,10 +373,11 @@ namespace Renderer void drawLines(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { - GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); - GL_CHECK_ERROR(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex)); - GL_CHECK_ERROR(glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col)); + GL_CHECK_ERROR(glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const void*)offsetof(Vertex, pos))); + GL_CHECK_ERROR(glVertexAttribPointer(texAttrib, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const void*)offsetof(Vertex, tex))); + GL_CHECK_ERROR(glVertexAttribPointer(colAttrib, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Vertex), (const void*)offsetof(Vertex, col))); + GL_CHECK_ERROR(glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) * _numVertices, _vertices, GL_DYNAMIC_DRAW)); GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor))); GL_CHECK_ERROR(glDrawArrays(GL_LINES, 0, _numVertices)); @@ -186,10 +386,11 @@ namespace Renderer void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { - GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); - GL_CHECK_ERROR(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex)); - GL_CHECK_ERROR(glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col)); + GL_CHECK_ERROR(glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const void*)offsetof(Vertex, pos))); + GL_CHECK_ERROR(glVertexAttribPointer(texAttrib, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const void*)offsetof(Vertex, tex))); + GL_CHECK_ERROR(glVertexAttribPointer(colAttrib, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Vertex), (const void*)offsetof(Vertex, col))); + GL_CHECK_ERROR(glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) * _numVertices, _vertices, GL_DYNAMIC_DRAW)); GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor))); GL_CHECK_ERROR(glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVertices)); @@ -198,18 +399,20 @@ namespace Renderer void setProjection(const Transform4x4f& _projection) { - GL_CHECK_ERROR(glMatrixMode(GL_PROJECTION)); - GL_CHECK_ERROR(glLoadMatrixf((GLfloat*)&_projection)); + projectionMatrix = _projection; + + Transform4x4f mvpMatrix = projectionMatrix * worldViewMatrix; + GL_CHECK_ERROR(glUniformMatrix4fv(mvpUniform, 1, GL_FALSE, (float*)&mvpMatrix)); } // setProjection void setMatrix(const Transform4x4f& _matrix) { - Transform4x4f matrix = _matrix; - matrix.round(); + worldViewMatrix = _matrix; + worldViewMatrix.round(); - GL_CHECK_ERROR(glMatrixMode(GL_MODELVIEW)); - GL_CHECK_ERROR(glLoadMatrixf((GLfloat*)&matrix)); + Transform4x4f mvpMatrix = projectionMatrix * worldViewMatrix; + GL_CHECK_ERROR(glUniformMatrix4fv(mvpUniform, 1, GL_FALSE, (float*)&mvpMatrix)); } // setMatrix @@ -263,4 +466,4 @@ namespace Renderer } // Renderer:: -#endif // USE_OPENGLES_10 +#endif // USE_OPENGLES_20 From 875276a5906c36f9601299f1bc4c0fb1173082f2 Mon Sep 17 00:00:00 2001 From: Marian Flor Date: Sat, 9 May 2020 16:06:21 +0200 Subject: [PATCH 419/603] Add return to inform callers. Some callers needs information about the result of the system command to act accordingly. --- es-core/src/Scripting.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/Scripting.cpp b/es-core/src/Scripting.cpp index 08725a6708..301c927312 100644 --- a/es-core/src/Scripting.cpp +++ b/es-core/src/Scripting.cpp @@ -39,7 +39,7 @@ namespace Scripting } } LOG(LogDebug) << " executing: " << script; - runSystemCommand(script); + return runSystemCommand(script); } } } From d4a45021f65443da79f1e26360c1419ebb90d954 Mon Sep 17 00:00:00 2001 From: Marian Flor Date: Tue, 19 May 2020 22:20:19 +0200 Subject: [PATCH 420/603] Fix to terminate execution of scripts if current script fails. Execute all scripts for specific event until either all are run with return code 0 or one terminates with return code != 0. --- es-core/src/Scripting.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/es-core/src/Scripting.cpp b/es-core/src/Scripting.cpp index 301c927312..63cd3cc848 100644 --- a/es-core/src/Scripting.cpp +++ b/es-core/src/Scripting.cpp @@ -21,6 +21,7 @@ namespace Scripting test = Utils::FileSystem::getHomePath() + "/.emulationstation/scripts/" + eventName; if(Utils::FileSystem::exists(test)) scriptDirList.push_back(test); + int ret = 0; // loop over found script paths per event and over scripts found in eventName folder. for(std::list::const_iterator dirIt = scriptDirList.cbegin(); dirIt != scriptDirList.cend(); ++dirIt) { std::list scripts = Utils::FileSystem::getDirContent(*dirIt); @@ -38,10 +39,15 @@ namespace Scripting script += " \"" + arg2 + "\""; } } - LOG(LogDebug) << " executing: " << script; - return runSystemCommand(script); + LOG(LogDebug) << "executing: " << script; + ret = runSystemCommand(script); + if (ret != 0) { + LOG(LogWarning) << script << " failed with rc != 0. Skipping further processing of scripts."; + return ret; + } } } + return ret; } } // Scripting:: From 72b7db7cc68fc65dde23e53e0b1eb122ed6ebe0e Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Tue, 26 May 2020 11:10:06 +0300 Subject: [PATCH 421/603] Additional platform support - BBC Micro, PC88, PC98, Sharp X1 and Thomson MO/TO --- es-app/src/PlatformId.cpp | 5 +++++ es-app/src/PlatformId.h | 5 +++++ es-app/src/scrapers/GamesDBJSONScraper.cpp | 4 ++++ es-app/src/scrapers/ScreenScraper.cpp | 7 ++++++- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index a4fa7d4ab2..a6f22302b7 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -21,6 +21,7 @@ namespace PlatformIds "atarijaguar", "atarijaguarcd", "atarixe", + "bbcmicro", "colecovision", "c64", // commodore 64 "intellivision", @@ -64,8 +65,12 @@ namespace PlatformIds "psp", // playstation portable "snes", // super nintendo entertainment system "scummvm", + "x1", "x6800", "solarus", + "moto", // Thomson MO/TO + "pc88", // NEC PC-8801 + "pc98", // NEC PC-9801 "pcengine", // (aka turbografx-16) HuCards only "pcenginecd", // (aka turbografx-16) CD-ROMs only "wonderswan", diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index 8771fc10fc..b8886155c9 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -22,6 +22,7 @@ namespace PlatformIds ATARI_JAGUAR, ATARI_JAGUAR_CD, ATARI_XE, + BBC_MICRO, COLECOVISION, COMMODORE_64, INTELLIVISION, @@ -65,8 +66,12 @@ namespace PlatformIds PLAYSTATION_PORTABLE, SUPER_NINTENDO, SCUMMVM, + SHARP_X1, SHARP_X6800, SOLARUS, + THOMSON_MOTO, + NEC_PC_8801, + NEC_PC_9801, TURBOGRAFX_16, // (aka PC Engine) HuCards only TURBOGRAFX_CD, // (aka PC Engine) CD-ROMs only WONDERSWAN, diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index ad4ddbf606..a870c9df5a 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -88,6 +88,10 @@ const std::map gamesdb_new_platformid_map{ { PLAYSTATION_VITA, "39" }, { PLAYSTATION_PORTABLE, "13" }, { SUPER_NINTENDO, "6" }, + { SHARP_X1, "4977" }, + { SHARP_X6800, "4931"}, + { NEC_PC_8801, "4933"}, + { NEC_PC_9801, "4934"}, { TURBOGRAFX_16, "34" }, // HuCards only { TURBOGRAFX_CD, "4955" }, // CD-ROMs only { WONDERSWAN, "4925" }, diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index 13ee04a6d4..7ddabc6527 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -14,7 +14,7 @@ using namespace PlatformIds; /** List of systems and their IDs from - https://www.screenscraper.fr/api/systemesListe.php?devid=xxx&devpassword=yyy&softname=zzz&output=XML + https://www.screenscraper.fr/api2/systemesListe.php?devid=xxx&devpassword=yyy&softname=zzz&output=XML **/ const std::map screenscraper_platformid_map{ { THREEDO, 29 }, @@ -30,6 +30,7 @@ const std::map screenscraper_platformid_map{ { ATARI_JAGUAR_CD, 171 }, { ATARI_LYNX, 28 }, { ATARI_ST, 42}, + { BBC_MICRO, 37}, // missing Atari XE ? { COLECOVISION, 48 }, { COMMODORE_64, 66 }, @@ -67,8 +68,12 @@ const std::map screenscraper_platformid_map{ { SEGA_MEGA_DRIVE, 1 }, { SEGA_SATURN, 22 }, { SEGA_SG1000, 109 }, + { SHARP_X1, 220}, { SHARP_X6800, 79}, { SOLARUS, 223 }, + { THOMSON_MOTO, 141}, + { NEC_PC_8801, 221}, + { NEC_PC_9801, 208}, { PLAYSTATION, 57 }, { PLAYSTATION_2, 58 }, { PLAYSTATION_3, 59 }, From 1d01d7e8b97837886e34368cfa620ab289e025fb Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Thu, 28 May 2020 18:29:28 +0100 Subject: [PATCH 422/603] Audio menu: adjust mixer and OMX output options * Added 2 new mixer options - HDMI/Headphone - which should be used when the 'snd_bcm2835' module is configured with separate ALSA devices * Added the 'alsa' output option for 'omxplayer', which enables usage of the default ALSA output device. * Removed the 'HDMI/Local/Both' sound cards options, they only make sense for OMXPlayer, the default ALSA card names for the Pi are not named like that. --- es-app/src/guis/GuiMenu.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 0f34628f92..cd60ff09f4 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -103,12 +103,6 @@ void GuiMenu::openSoundSettings() // audio card auto audio_card = std::make_shared< OptionListComponent >(mWindow, "AUDIO CARD", false); std::vector audio_cards; - #ifdef _RPI_ - // RPi Specific Audio Cards - audio_cards.push_back("local"); - audio_cards.push_back("hdmi"); - audio_cards.push_back("both"); - #endif audio_cards.push_back("default"); audio_cards.push_back("sysdefault"); audio_cards.push_back("dmix"); @@ -133,6 +127,8 @@ void GuiMenu::openSoundSettings() auto vol_dev = std::make_shared< OptionListComponent >(mWindow, "AUDIO DEVICE", false); std::vector transitions; transitions.push_back("PCM"); + transitions.push_back("HDMI"); + transitions.push_back("Headphone"); transitions.push_back("Speaker"); transitions.push_back("Master"); transitions.push_back("Digital"); @@ -180,6 +176,7 @@ void GuiMenu::openSoundSettings() omx_cards.push_back("local"); omx_cards.push_back("hdmi"); omx_cards.push_back("both"); + omx_cards.push_back("alsa"); omx_cards.push_back("alsa:hw:0,0"); omx_cards.push_back("alsa:hw:1,0"); if (Settings::getInstance()->getString("OMXAudioDev") != "") { From 4fe0c451e191e861a9f20dd01860d4de279e80ac Mon Sep 17 00:00:00 2001 From: Matteo Beniamino Date: Mon, 1 Jun 2020 11:13:04 +0200 Subject: [PATCH 423/603] Fixed missing string includes needed by GCC 10 --- es-app/src/FileFilterIndex.h | 1 + es-app/src/MetaData.h | 1 + es-core/src/InputManager.h | 1 + es-core/src/Settings.h | 1 + es-core/src/Sound.h | 1 + 5 files changed, 5 insertions(+) diff --git a/es-app/src/FileFilterIndex.h b/es-app/src/FileFilterIndex.h index 93b9c8d9ff..e3b4b4a665 100644 --- a/es-app/src/FileFilterIndex.h +++ b/es-app/src/FileFilterIndex.h @@ -4,6 +4,7 @@ #include #include +#include class FileData; diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 29154b4ee7..dabe8fd44c 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -4,6 +4,7 @@ #include #include +#include namespace pugi { class xml_node; } diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index 77ff0a16cb..388358d217 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -4,6 +4,7 @@ #include #include +#include class InputConfig; class Window; diff --git a/es-core/src/Settings.h b/es-core/src/Settings.h index 5127c82b0b..34b54957d6 100644 --- a/es-core/src/Settings.h +++ b/es-core/src/Settings.h @@ -3,6 +3,7 @@ #define ES_CORE_SETTINGS_H #include +#include //This is a singleton for storing settings. class Settings diff --git a/es-core/src/Sound.h b/es-core/src/Sound.h index d54688d8d8..43e68453cc 100644 --- a/es-core/src/Sound.h +++ b/es-core/src/Sound.h @@ -5,6 +5,7 @@ #include "SDL_audio.h" #include #include +#include class ThemeData; From 0d3bbdec296e94870df8341e60af33b53b4da829 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 5 Jun 2020 22:50:48 +0200 Subject: [PATCH 424/603] Undo change to use std::array introduced by https://github.com/RetroPie/EmulationStation/pull/646 --- es-core/src/guis/GuiInputConfig.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index 833ac3180e..18c2601583 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -15,8 +15,9 @@ struct InputConfigStructure const char* icon; }; -static const std::array GUI_INPUT_CONFIG_LIST = -{{ +static const int inputCount = 25; +static const InputConfigStructure GUI_INPUT_CONFIG_LIST[inputCount] = +{ { "Up", false, "D-PAD UP", ":/help/dpad_up.svg" }, { "Down", false, "D-PAD DOWN", ":/help/dpad_down.svg" }, { "Left", false, "D-PAD LEFT", ":/help/dpad_left.svg" }, @@ -42,7 +43,7 @@ static const std::array GUI_INPUT_CONFIG_LIST = { "RightAnalogLeft", true, "RIGHT ANALOG LEFT", ":/help/analog_left.svg" }, { "RightAnalogRight", true, "RIGHT ANALOG RIGHT", ":/help/analog_right.svg" }, { "HotKeyEnable", true, "HOTKEY ENABLE", ":/help/button_hotkey.svg" } -}}; +}; //MasterVolUp and MasterVolDown are also hooked up, but do not appear on this screen. //If you want, you can manually add them to es_input.cfg. @@ -81,7 +82,6 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mGrid.setEntry(mSubtitle1, Vector2i(0, 2), false, true); mSubtitle2 = std::make_shared(mWindow, "HOLD ANY BUTTON TO SKIP", Font::get(FONT_SIZE_SMALL), 0x999999FF, ALIGN_CENTER); - static_assert(GUI_INPUT_CONFIG_LIST.size() > 0); mSubtitle2->setOpacity(GUI_INPUT_CONFIG_LIST[0].skippable * 255); mGrid.setEntry(mSubtitle2, Vector2i(0, 3), false, true); @@ -89,7 +89,7 @@ GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target, bool reconfi mList = std::make_shared(mWindow); mGrid.setEntry(mList, Vector2i(0, 5), true, true); - for(int i = 0; i < GUI_INPUT_CONFIG_LIST.size(); i++) + for(int i = 0; i < inputCount; i++) { ComponentListRow row; From 1a1618debda98c379c3bb47f64fa22a1051a98f5 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Fri, 5 Jun 2020 22:56:59 +0200 Subject: [PATCH 425/603] Add an OpenGl 1.4 renderer ( should fix the issues some had with ancient stoneage GPU's ) --- CMakeLists.txt | 2 +- es-core/CMakeLists.txt | 1 + es-core/src/renderers/Renderer_GL14.cpp | 266 ++++++++++++++++++++++++ 3 files changed, 268 insertions(+), 1 deletion(-) create mode 100644 es-core/src/renderers/Renderer_GL14.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index e34a342abc..54b1829e8b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,7 +114,7 @@ endif() endif() if(${GLSystem} MATCHES "Desktop OpenGL") - add_definitions(-DUSE_OPENGL_21) + add_definitions(-DUSE_OPENGL_14) else() add_definitions(-DUSE_OPENGLES_10) endif() diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index fa2e3e6c0b..99d084d0ab 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -139,6 +139,7 @@ set(CORE_SOURCES # Renderer ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GL14.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GL21.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GLES10.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/renderers/Renderer_GLES20.cpp diff --git a/es-core/src/renderers/Renderer_GL14.cpp b/es-core/src/renderers/Renderer_GL14.cpp new file mode 100644 index 0000000000..23662914c2 --- /dev/null +++ b/es-core/src/renderers/Renderer_GL14.cpp @@ -0,0 +1,266 @@ +#if defined(USE_OPENGL_14) + +#include "renderers/Renderer.h" +#include "math/Transform4x4f.h" +#include "Log.h" +#include "Settings.h" + +#include +#include + +namespace Renderer +{ + +#if defined(_DEBUG) +#define GL_CHECK_ERROR(Function) (Function, _GLCheckError(#Function)) + + static void _GLCheckError(const char* _funcName) + { + const GLenum errorCode = glGetError(); + + if(errorCode != GL_NO_ERROR) + LOG(LogError) << "OpenGLES error: " << _funcName << " failed with error code: " << errorCode; + } +#else +#define GL_CHECK_ERROR(Function) (Function) +#endif + + static SDL_GLContext sdlContext = nullptr; + static GLuint whiteTexture = 0; + + static GLenum convertBlendFactor(const Blend::Factor _blendFactor) + { + switch(_blendFactor) + { + case Blend::ZERO: { return GL_ZERO; } break; + case Blend::ONE: { return GL_ONE; } break; + case Blend::SRC_COLOR: { return GL_SRC_COLOR; } break; + case Blend::ONE_MINUS_SRC_COLOR: { return GL_ONE_MINUS_SRC_COLOR; } break; + case Blend::SRC_ALPHA: { return GL_SRC_ALPHA; } break; + case Blend::ONE_MINUS_SRC_ALPHA: { return GL_ONE_MINUS_SRC_ALPHA; } break; + case Blend::DST_COLOR: { return GL_DST_COLOR; } break; + case Blend::ONE_MINUS_DST_COLOR: { return GL_ONE_MINUS_DST_COLOR; } break; + case Blend::DST_ALPHA: { return GL_DST_ALPHA; } break; + case Blend::ONE_MINUS_DST_ALPHA: { return GL_ONE_MINUS_DST_ALPHA; } break; + default: { return GL_ZERO; } + } + + } // convertBlendFactor + + static GLenum convertTextureType(const Texture::Type _type) + { + switch(_type) + { + case Texture::RGBA: { return GL_RGBA; } break; + case Texture::ALPHA: { return GL_ALPHA; } break; + default: { return GL_ZERO; } + } + + } // convertTextureType + + unsigned int convertColor(const unsigned int _color) + { + // convert from rgba to abgr + unsigned char r = ((_color & 0xff000000) >> 24) & 255; + unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; + unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; + unsigned char a = ((_color & 0x000000ff) ) & 255; + + return ((a << 24) | (b << 16) | (g << 8) | (r)); + + } // convertColor + + unsigned int getWindowFlags() + { + return SDL_WINDOW_OPENGL; + + } // getWindowFlags + + void setupWindow() + { + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 4); + + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); + + } // setupWindow + + void createContext() + { + sdlContext = SDL_GL_CreateContext(getSDLWindow()); + SDL_GL_MakeCurrent(getSDLWindow(), sdlContext); + + std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; + std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; + std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; + std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; + + LOG(LogInfo) << "GL vendor: " << vendor; + LOG(LogInfo) << "GL renderer: " << renderer; + LOG(LogInfo) << "GL version: " << version; + LOG(LogInfo) << "Checking available OpenGL extensions..."; + std::string glExts = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; + LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); + + uint8_t data[4] = {255, 255, 255, 255}; + whiteTexture = createTexture(Texture::RGBA, false, true, 1, 1, data); + + GL_CHECK_ERROR(glClearColor(0.0f, 0.0f, 0.0f, 1.0f)); + GL_CHECK_ERROR(glEnable(GL_TEXTURE_2D)); + GL_CHECK_ERROR(glEnable(GL_BLEND)); + GL_CHECK_ERROR(glPixelStorei(GL_PACK_ALIGNMENT, 1)); + GL_CHECK_ERROR(glPixelStorei(GL_UNPACK_ALIGNMENT, 1)); + GL_CHECK_ERROR(glEnableClientState(GL_VERTEX_ARRAY)); + GL_CHECK_ERROR(glEnableClientState(GL_TEXTURE_COORD_ARRAY)); + GL_CHECK_ERROR(glEnableClientState(GL_COLOR_ARRAY)); + + } // createContext + + void destroyContext() + { + SDL_GL_DeleteContext(sdlContext); + sdlContext = nullptr; + + } // destroyContext + + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) + { + const GLenum type = convertTextureType(_type); + unsigned int texture; + + GL_CHECK_ERROR(glGenTextures(1, &texture)); + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, texture)); + + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE)); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _repeat ? GL_REPEAT : GL_CLAMP_TO_EDGE)); + + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _linear ? GL_LINEAR : GL_NEAREST)); + GL_CHECK_ERROR(glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); + + GL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, type, _width, _height, 0, type, GL_UNSIGNED_BYTE, _data)); + + return texture; + + } // createTexture + + void destroyTexture(const unsigned int _texture) + { + GL_CHECK_ERROR(glDeleteTextures(1, &_texture)); + + } // destroyTexture + + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) + { + const GLenum type = convertTextureType(_type); + + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, _texture)); + GL_CHECK_ERROR(glTexSubImage2D(GL_TEXTURE_2D, 0, _x, _y, _width, _height, type, GL_UNSIGNED_BYTE, _data)); + GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); + + } // updateTexture + + void bindTexture(const unsigned int _texture) + { + if(_texture == 0) GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); + else GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, _texture)); + + } // bindTexture + + void drawLines(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + { + GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); + GL_CHECK_ERROR(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex)); + GL_CHECK_ERROR(glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col)); + + GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor))); + + GL_CHECK_ERROR(glDrawArrays(GL_LINES, 0, _numVertices)); + + } // drawLines + + void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) + { + GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); + GL_CHECK_ERROR(glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &_vertices[0].tex)); + GL_CHECK_ERROR(glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof(Vertex), &_vertices[0].col)); + + GL_CHECK_ERROR(glBlendFunc(convertBlendFactor(_srcBlendFactor), convertBlendFactor(_dstBlendFactor))); + + GL_CHECK_ERROR(glDrawArrays(GL_TRIANGLE_STRIP, 0, _numVertices)); + + } // drawTriangleStrips + + void setProjection(const Transform4x4f& _projection) + { + GL_CHECK_ERROR(glMatrixMode(GL_PROJECTION)); + GL_CHECK_ERROR(glLoadMatrixf((GLfloat*)&_projection)); + + } // setProjection + + void setMatrix(const Transform4x4f& _matrix) + { + Transform4x4f matrix = _matrix; + matrix.round(); + + GL_CHECK_ERROR(glMatrixMode(GL_MODELVIEW)); + GL_CHECK_ERROR(glLoadMatrixf((GLfloat*)&matrix)); + + } // setMatrix + + void setViewport(const Rect& _viewport) + { + // glViewport starts at the bottom left of the window + GL_CHECK_ERROR(glViewport( _viewport.x, getWindowHeight() - _viewport.y - _viewport.h, _viewport.w, _viewport.h)); + + } // setViewport + + void setScissor(const Rect& _scissor) + { + if((_scissor.x == 0) && (_scissor.y == 0) && (_scissor.w == 0) && (_scissor.h == 0)) + { + GL_CHECK_ERROR(glDisable(GL_SCISSOR_TEST)); + } + else + { + // glScissor starts at the bottom left of the window + GL_CHECK_ERROR(glScissor(_scissor.x, getWindowHeight() - _scissor.y - _scissor.h, _scissor.w, _scissor.h)); + GL_CHECK_ERROR(glEnable(GL_SCISSOR_TEST)); + } + + } // setScissor + + void setSwapInterval() + { + // vsync + if(Settings::getInstance()->getBool("VSync")) + { + // SDL_GL_SetSwapInterval(0) for immediate updates (no vsync, default), + // 1 for updates synchronized with the vertical retrace, + // or -1 for late swap tearing. + // SDL_GL_SetSwapInterval returns 0 on success, -1 on error. + // if vsync is requested, try normal vsync; if that doesn't work, try late swap tearing + // if that doesn't work, report an error + if(SDL_GL_SetSwapInterval(1) != 0 && SDL_GL_SetSwapInterval(-1) != 0) + LOG(LogWarning) << "Tried to enable vsync, but failed! (" << SDL_GetError() << ")"; + } + else + SDL_GL_SetSwapInterval(0); + + } // setSwapInterval + + void swapBuffers() + { + SDL_GL_SwapWindow(getSDLWindow()); + GL_CHECK_ERROR(glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); + + } // swapBuffers + +} // Renderer:: + +#endif // USE_OPENGL_14 From 77f271586e2bec8da1fa921d2b20d81a7d9cecf7 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 9 Jun 2020 01:03:59 +0100 Subject: [PATCH 426/603] cosmetic - fix trailing whitespace errors introduced by 9e39c3a6 --- es-core/src/resources/Font.cpp | 2 +- es-core/src/resources/ResourceManager.cpp | 12 ++++++------ es-core/src/resources/ResourceManager.h | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index de226ba1d8..293077b75f 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -75,7 +75,7 @@ size_t Font::getTotalMemUsage() Font::Font(int size, const std::string& path) : mSize(size), mPath(path) { assert(mSize > 0); - + mLoaded = true; mMaxGlyphHeight = 0; diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index b0c8f89de5..5814b781bf 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -93,16 +93,16 @@ void ResourceManager::unloadAll() { auto iter = mReloadables.cbegin(); while(iter != mReloadables.cend()) - { + { std::shared_ptr info = *iter; if (!info->data.expired()) - { + { info->reload = info->data.lock()->unload(); iter++; } else - iter = mReloadables.erase(iter); + iter = mReloadables.erase(iter); } } @@ -124,7 +124,7 @@ void ResourceManager::reloadAll() iter++; } else - iter = mReloadables.erase(iter); + iter = mReloadables.erase(iter); } } @@ -132,6 +132,6 @@ void ResourceManager::addReloadable(std::weak_ptr reloadable) { std::shared_ptr info = std::make_shared(); info->data = reloadable; - info->reload = false; + info->reload = false; mReloadables.push_back(info); -} \ No newline at end of file +} diff --git a/es-core/src/resources/ResourceManager.h b/es-core/src/resources/ResourceManager.h index 5eaf622391..a0fa3cef0c 100644 --- a/es-core/src/resources/ResourceManager.h +++ b/es-core/src/resources/ResourceManager.h @@ -49,10 +49,10 @@ class ResourceManager { public: std::weak_ptr data; - bool reload; + bool reload; }; - std::list> mReloadables; // std::weak_ptr + std::list> mReloadables; // std::weak_ptr }; #endif // ES_CORE_RESOURCES_RESOURCE_MANAGER_H From d5d3cbfc4b085b47bde05d1adc74dba123349a05 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Tue, 19 May 2020 10:59:04 +0100 Subject: [PATCH 427/603] cmake: add GLES20 renderer build support Added support for the GLESv2 renderer to the CMake build. * Refactored the OpenGLES detection for both versions. Platform detection is done only in the main project file, settings hints for the GLES headers/libraries detection in the corresponding 'Find' cmake modules. * Simplified the additions of directories for includes/libraries, based on the same hints added during detection. Notes: * GLESv2 is the default for GLES-enabled systems. * For the Raspberry Pi systems, both the legacy (BRCM) and the new (MESA) GLES libraries can be present. The selection can be done via the `USE_MESA_GLES` CMake option (default: Off) By default, the legacy (BRCM) libraries/headers are used, without any special configuration. For the Pi4, the GL renderer/system must be explicitely selected ** select the OpenGL 2 renderer with `-DGL=On` ** select the GLESv2 renderer with `-DUSE_MESA_GLES=On` * the GLESv1 renderer can still be forcibly enabled using the `FORCE_GLESv1` build option, for platforms where GLESv1 is the only option. Minor - set the start-up project in MS Visual Studio to 'emulationstation'. --- CMake/Packages/FindOpenGLES.cmake | 131 +++++++--------------- CMake/Packages/FindOpenGLES2.cmake | 35 ++++++ CMakeLists.txt | 171 ++++++++++++++--------------- README.md | 21 +++- 4 files changed, 172 insertions(+), 186 deletions(-) create mode 100644 CMake/Packages/FindOpenGLES2.cmake diff --git a/CMake/Packages/FindOpenGLES.cmake b/CMake/Packages/FindOpenGLES.cmake index ac3e943e2f..3572075065 100644 --- a/CMake/Packages/FindOpenGLES.cmake +++ b/CMake/Packages/FindOpenGLES.cmake @@ -1,101 +1,48 @@ -#snapped from: https://bitbucket.org/sinbad/ogre/src/0bba4f7cdb95/CMake/Packages/FindOpenGLES.cmake?at=default -#------------------------------------------------------------------- -# This file is part of the CMake build system for OGRE -# (Object-oriented Graphics Rendering Engine) -# For the latest info, see http://www.ogre3d.org/ -# -# The contents of this file are placed in the public domain. Feel -# free to make use of it in any way you like. -#------------------------------------------------------------------- - # - Try to find OpenGLES # Once done this will define # # OPENGLES_FOUND - system has OpenGLES -# OPENGLES_INCLUDE_DIR - the GL include directory +# OPENGLES_INCLUDE_DIRS - the GL include directory # OPENGLES_LIBRARIES - Link these to use OpenGLES -IF (WIN32) - IF (CYGWIN) - - FIND_PATH(OPENGLES_INCLUDE_DIR GLES/gl.h ) - - FIND_LIBRARY(OPENGLES_gl_LIBRARY libgles_cm ) - - ELSE (CYGWIN) - - IF(MSVC) - #The user hast to provide this atm. GLES can be emulated via Desktop OpenGL +if(NOT HINT_GLES_LIBNAME) + set(HINT_GLES_LIBNAME GLESv1_CM) +endif() + +if (WIN32) + if(CYGWIN) + find_path(OPENGLES_INCLUDE_DIR GLES/gl.h ) + find_library(OPENGLES_gl_LIBRARY libgles_cm ) + else(CYGWIN) + if(MSVC) + #The user has to provide this atm. GLES can be emulated via Desktop OpenGL #using the ANGLE project found at: http://code.google.com/p/angleproject/ SET (OPENGLES_gl_LIBRARY import32 CACHE STRING "OpenGL ES 1.x library for win32") - ENDIF(MSVC) - - ENDIF (CYGWIN) - -ELSE (WIN32) - - IF (APPLE) - - create_search_paths(/Developer/Platforms) - findpkg_framework(OpenGLES) + endif(MSVC) +endif(CYGWIN) +elseif(APPLE) + create_search_paths(/Developer/Platforms) + findpkg_framework(OpenGLES) set(OPENGLES_gl_LIBRARY "-framework OpenGLES") - - ELSE(APPLE) - - IF (DEFINED BCMHOST) - FIND_PATH(OPENGLES_INCLUDE_DIR GLES/gl.h - /opt/vc/include - NO_DEFAULT_PATH - ) - - FIND_LIBRARY(OPENGLES_gl_LIBRARY - NAMES brcmGLESv2 - PATHS /opt/vc/lib - ) - - ELSE (DEFINED BCMHOST) - - FIND_PATH(OPENGLES_INCLUDE_DIR GLES/gl.h - /usr/openwin/share/include - /opt/graphics/OpenGL/include /usr/X11R6/include - /usr/include - ) - - FIND_LIBRARY(OPENGLES_gl_LIBRARY - NAMES GLES_CM GLESv1_CM - PATHS /opt/graphics/OpenGL/lib - /usr/openwin/lib - /usr/shlib /usr/X11R6/lib - /usr/lib - ) - ENDIF (DEFINED BCMHOST) - - # On Unix OpenGL most certainly always requires X11. - # Feel free to tighten up these conditions if you don't - # think this is always true. - - IF (OPENGLES_gl_LIBRARY) - IF(NOT X11_FOUND) - INCLUDE(FindX11) - ENDIF(NOT X11_FOUND) - IF (X11_FOUND) - SET (OPENGLES_LIBRARIES ${X11_LIBRARIES}) - ENDIF (X11_FOUND) - ENDIF (OPENGLES_gl_LIBRARY) - - ENDIF(APPLE) -ENDIF (WIN32) - -SET( OPENGLES_FOUND "NO" ) -IF(OPENGLES_gl_LIBRARY) - - SET( OPENGLES_LIBRARIES ${OPENGLES_gl_LIBRARY} ${OPENGLES_LIBRARIES}) - - SET( OPENGLES_FOUND "YES" ) - -ENDIF(OPENGLES_gl_LIBRARY) - -MARK_AS_ADVANCED( - OPENGLES_INCLUDE_DIR - OPENGLES_gl_LIBRARY -) +else() + find_path(OPENGLES_INCLUDE_DIR GLES/gl.h + PATHS "${CMAKE_FIND_ROOT_PATH}/usr/include" + HINTS "${HINT_GLES_INCDIR}" + ) + + find_library(OPENGLES_gl_LIBRARY + NAMES ${HINT_GLES_LIBNAME} + HINTS "${HINT_GLES_LIBDIR}" + ) +endif(WIN32) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(OpenGLES + REQUIRED_VARS OPENGLES_gl_LIBRARY OPENGLES_INCLUDE_DIR) + + +if(OPENGLES_FOUND) + set(OPENGLES_LIBRARIES ${OPENGLES_gl_LIBRARY}) + set(OPENGLES_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR}) + mark_as_advanced(OPENGLES_INCLUDE_DIR OPENGLES_gl_LIBRARY) +endif() diff --git a/CMake/Packages/FindOpenGLES2.cmake b/CMake/Packages/FindOpenGLES2.cmake new file mode 100644 index 0000000000..903d9d96b5 --- /dev/null +++ b/CMake/Packages/FindOpenGLES2.cmake @@ -0,0 +1,35 @@ +# FindOpenGLES +# ------------ +# Finds the OpenGLES2 library +# +# This will define the following variables:: +# +# OPENGLES2_FOUND - system has OpenGLES +# OPENGLES2_INCLUDE_DIRS - the OpenGLES include directory +# OPENGLES2_LIBRARIES - the OpenGLES libraries + +if(NOT HINT_GLES_LIBNAME) + set(HINT_GLES_LIBNAME GLESv2) +endif() + +find_path(OPENGLES2_INCLUDE_DIR GLES2/gl2.h + PATHS "${CMAKE_FIND_ROOT_PATH}/usr/include" + HINTS ${HINT_GLES_INCDIR} +) + +find_library(OPENGLES2_gl_LIBRARY + NAMES ${HINT_GLES_LIBNAME} + HINTS ${HINT_GLES_LIBDIR} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(OpenGLES2 + REQUIRED_VARS OPENGLES2_gl_LIBRARY OPENGLES2_INCLUDE_DIR) + + +if(OPENGLES2_FOUND) + set(OPENGLES2_LIBRARIES ${OPENGLES2_gl_LIBRARY}) + set(OPENGLES2_INCLUDE_DIRS ${OPENGLES2_INCLUDE_DIR}) + mark_as_advanced(OPENGLES2_INCLUDE_DIR OPENGLES2_gl_LIBRARY) +endif() + diff --git a/CMakeLists.txt b/CMakeLists.txt index 54b1829e8b..096ac24bab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,9 +2,18 @@ cmake_minimum_required(VERSION 2.8) option(GLES "Set to ON if targeting Embedded OpenGL" ${GLES}) option(GL "Set to ON if targeting Desktop OpenGL" ${GL}) -option(RPI "Set to ON to enable the Raspberry PI video player (omxplayer)" ${RPI}) +option(RPI "Set to ON to enable the Raspberry PI video player (omxplayer) and audio options" ${RPI}) option(CEC "Set to ON to enable CEC" ${CEC}) +# GLES implementation overrides +option(USE_MESA_GLES "Set to ON to select the MESA OpenGL ES driver" ${USE_MESA_GLES}) +option(USE_GLES1 "Set to ON to force usage of the OpenGLES v1 renderer" ${USE_GLES1}) + +# OpenGL library preference (https://cmake.org/cmake/help/git-stage/policy/CMP0072.html) +if(POLICY CMP0072) + cmake_policy(SET CMP0072 NEW) +endif() + project(emulationstation-all) #------------------------------------------------------------------------------- @@ -14,46 +23,67 @@ LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake/Packages ) -#------------------------------------------------------------------------------- +# default GLES2/GLES library, can be overriden depending on platform +set(HINT_GLES_LIBNAME GLESv2) + #set up OpenGL system variable if(GLES) set(GLSystem "Embedded OpenGL" CACHE STRING "The OpenGL system to be used") elseif(GL) set(GLSystem "Desktop OpenGL" CACHE STRING "The OpenGL system to be used") -#------------------------------------------------------------------------------- -#check if we're running on Raspberry Pi + +# check if the MESA GLES library is requested +elseif(USE_MESA_GLES) + set(GLSystem "Embedded OpenGL" CACHE STRING "The OpenGL system to be used") + +#check if we're running on Raspberry Pi (legacy drivers) elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/bcm_host.h") - MESSAGE("bcm_host.h found") set(BCMHOST found) set(GLSystem "Embedded OpenGL" CACHE STRING "The OpenGL system to be used") -#------------------------------------------------------------------------------- -#check if we're running on OSMC Vero4K + set(HINT_GLES_INCDIR "/opt/vc/include") + set(HINT_GLES_LIBDIR "/opt/vc/lib") + set(HINT_GLES_LIBNAME brcmGLESv2) + set(GLES_EXTRA_LIBRARIES bcm_host) + +#check if we're running on OSMC Vero4K[+] elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/opt/vero3/lib/libMali.so") - MESSAGE("libMali.so found") set(VERO4K found) + add_definitions(-D_VERO4K_) set(GLSystem "Embedded OpenGL" CACHE STRING "The OpenGL system to be used") -#------------------------------------------------------------------------------- + set(HINT_GLES_INCDIR "/opt/vero3/include") + set(HINT_GLES_LIBDIR "/opt/vero3/lib") + set(HINT_GLES_LIBNAME Mali) + set(GLES_EXTRA_LIBRARIES EGL) + #check if we're running on olinuxino / odroid / etc -elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/libMali.so" OR - EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libMali.so" OR - EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/aarch64-linux-gnu/libMali.so" OR - EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/mali-egl/libmali.so" OR - EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/arm-linux-gnueabihf/libmali.so") - MESSAGE("libMali.so found") +elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libMali.so") set(GLSystem "Embedded OpenGL" CACHE STRING "The OpenGL system to be used") + set(HINT_GLES_LIBNAME Mali) + else() set(GLSystem "Desktop OpenGL" CACHE STRING "The OpenGL system to be used") endif(GLES) set_property(CACHE GLSystem PROPERTY STRINGS "Desktop OpenGL" "Embedded OpenGL") -#finding necessary packages -#------------------------------------------------------------------------------- if(${GLSystem} MATCHES "Desktop OpenGL") find_package(OpenGL REQUIRED) + add_definitions(-DUSE_OPENGL_14) else() - find_package(OpenGLES REQUIRED) + if(NOT USE_GLES1) + find_package(OpenGLES2 QUIET REQUIRED) + message(STATUS "Found GLESv2: ${OPENGLES2_LIBRARIES}") + set(OPENGLES_LIBRARIES ${OPENGLES2_LIBRARIES}) + set(OPENGLES_INCLUDE_DIRS ${OPENGLES2_INCLUDE_DIRS}) + add_definitions(-DUSE_OPENGLES_20) + else() + set(HINT_GLES_LIBNAME GLESv1_CM) + find_package(OpenGLES QUIET REQUIRED) + message(STATUS "Found GLES: ${OPENGLES_LIBRARIES}") + add_definitions(-DUSE_OPENGLES_10) + endif() endif() + find_package(Freetype REQUIRED) find_package(FreeImage REQUIRED) find_package(SDL2 REQUIRED) @@ -77,10 +107,6 @@ if(DEFINED BCMHOST OR RPI) add_definitions(-D_RPI_) endif() -if(DEFINED VERO4K) - add_definitions(-D_VERO4K_) -endif() - if(DEFINED libCEC_FOUND) add_definitions(-DHAVE_LIBCEC) endif() @@ -94,6 +120,9 @@ if(MSVC) add_definitions(-DNOMINMAX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") #multi-processor compilation set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") #multi-processor compilation + + # Set the start-up project to in VS to 'emulationstation' + set(VS_STARTUP_PROJECT "emulationstation") endif() if(CMAKE_COMPILER_IS_GNUCXX) @@ -104,25 +133,20 @@ if(CMAKE_COMPILER_IS_GNUCXX) endif() #set up compiler flags for GCC -if (CMAKE_BUILD_TYPE MATCHES Debug) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O0") #support C++11 for std::, optimize - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O0") -else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O2") #support C++11 for std::, optimize - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2") #-s = strip binary -endif() + if (CMAKE_BUILD_TYPE MATCHES Debug) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O0") #support C++11 for std::, optimize + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O0") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes -O2") #support C++11 for std::, optimize + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2") #-s = strip binary endif() - -if(${GLSystem} MATCHES "Desktop OpenGL") - add_definitions(-DUSE_OPENGL_14) -else() - add_definitions(-DUSE_OPENGLES_10) endif() # Enable additional defines for the Debug build configuration set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") + #------------------------------------------------------------------------------- #add include directories set(COMMON_INCLUDE_DIRS @@ -136,6 +160,16 @@ set(COMMON_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/es-core/src ) +if(${GLSystem} MATCHES "Desktop OpenGL") + LIST(APPEND COMMON_INCLUDE_DIRS + ${OPENGL_INCLUDE_DIRS} + ) +else() + LIST(APPEND COMMON_INCLUDE_DIRS + ${OPENGLES_INCLUDE_DIRS} + ) +endif() + #add libCEC_INCLUDE_DIR if(DEFINED libCEC_FOUND) LIST(APPEND COMMON_INCLUDE_DIRS @@ -150,41 +184,8 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") ) endif() -if(DEFINED BCMHOST) - LIST(APPEND COMMON_INCLUDE_DIRS - "${CMAKE_FIND_ROOT_PATH}/opt/vc/include" - "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos" - "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vmcs_host/linux" - "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos/pthreads" - ) -#add include directory for Vero4K -elseif(DEFINED VERO4K) - LIST(APPEND COMMON_INCLUDE_DIRS - "${CMAKE_FIND_ROOT_PATH}/opt/vero3/include" - ) -else() - if(${GLSystem} MATCHES "Desktop OpenGL") - LIST(APPEND COMMON_INCLUDE_DIRS - ${OPENGL_INCLUDE_DIR} - ) - else() - LIST(APPEND COMMON_INCLUDE_DIRS - ${OPENGLES_INCLUDE_DIR} - ) - endif() -endif() - #------------------------------------------------------------------------------- #define libraries and directories -if(DEFINED BCMHOST) - link_directories( - "${CMAKE_FIND_ROOT_PATH}/opt/vc/lib" - ) -elseif(DEFINED VERO4K) - link_directories( - "${CMAKE_FIND_ROOT_PATH}/opt/vero3/lib" - ) -endif() set(COMMON_LIBRARIES ${FREETYPE_LIBRARIES} @@ -216,35 +217,27 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") ) endif() -if(DEFINED BCMHOST) +if(MSVC) LIST(APPEND COMMON_LIBRARIES - bcm_host - brcmEGL - ${OPENGLES_LIBRARIES} + winmm ) -elseif(DEFINED VERO4K) +endif() + +if(DEFINED HINT_GLES_LIBDIR) + link_directories("${HINT_GLES_LIBDIR}") +endif() + +if(${GLSystem} MATCHES "Desktop OpenGL") LIST(APPEND COMMON_LIBRARIES - EGL - ${OPENGLES_LIBRARIES} + ${OPENGL_LIBRARIES} ) else() - if(MSVC) - LIST(APPEND COMMON_LIBRARIES - winmm - ) - endif() - if(${GLSystem} MATCHES "Desktop OpenGL") - LIST(APPEND COMMON_LIBRARIES - ${OPENGL_LIBRARIES} - ) - else() - LIST(APPEND COMMON_LIBRARIES - EGL - ${OPENGLES_LIBRARIES} - ) - endif() + LIST(APPEND COMMON_LIBRARIES + ${OPENGLES_LIBRARIES} ${GLES_EXTRA_LIBRARIES} + ) endif() + #------------------------------------------------------------------------------- # set up build directories set(dir ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/README.md b/README.md index e97c552085..37bf54f6e8 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ EmulationStation is a cross-platform graphical front-end for emulators with cont Building ======== +**Building on Linux** + EmulationStation uses some C++11 code, which means you'll need to use at least g++-4.7 on Linux, or VS2010 on Windows, to compile. EmulationStation has a few dependencies. For building, you'll need CMake, SDL2, FreeImage, FreeType, cURL and RapidJSON. You also should probably install the `fonts-droid` package which contains fallback fonts for Chinese/Japanese/Korean characters, but ES will still work fine without it (this package is only used at run-time). @@ -15,7 +17,7 @@ EmulationStation has a few dependencies. For building, you'll need CMake, SDL2, All of this be easily installed with `apt-get`: ```bash sudo apt-get install libsdl2-dev libfreeimage-dev libfreetype6-dev libcurl4-openssl-dev rapidjson-dev \ - libasound2-dev libgl1-mesa-dev build-essential cmake fonts-droid-fallback libvlc-dev \ + libasound2-dev libgles2-mesa-dev build-essential cmake fonts-droid-fallback libvlc-dev \ libvlccore-dev vlc-bin ``` **On Fedora:** @@ -26,7 +28,7 @@ sudo dnf install SDL2-devel freeimage-devel freetype-devel curl-devel \ vlc-devel rapidjson-devel ``` -Note this Repository uses a git submodule - to checkout the source and all submodules, use +**Note**: this repository uses a git submodule - to checkout the source and all submodules, use ```bash git clone --recursive https://github.com/RetroPie/EmulationStation.git @@ -52,11 +54,20 @@ NOTE: to generate a `Debug` build on Unix/Linux, run the Makefile generation ste cmake -DCMAKE_BUILD_TYPE=Debug . ``` -**On the Raspberry Pi:** +**On the Raspberry Pi** + +* Choosing a GLES implementation. + + * if the Pi system uses the legacy/Broadcom driver, install the `libraspberry-dev` package before running `cmake` to configure the build + * if the Pi system uses the Mesa VC3/V3D GL driver, build using `-DUSE_MESA_GLES=On` to choose the MESA GLES implementation. This option is _mandatory_ when compiling for a Pi4 system, since the legacy GL drivers are not supported anymore on this system. + +* Support for using `omxplayer` to play video previews in the gamelist is enabled by adding `-DRPI=On` to the build options + +**GLES build notes** -Complete Raspberry Pi build instructions at [emulationstation.org](http://emulationstation.org/gettingstarted.html#install_rpi_standalone). + If your system doesn't have a working GLESv2 implementation, the GLESv1 legacy renderer can be compiled in by adding `-DUSE_GLES1=On` to the build options. -**On Windows:** +**Building on Windows** [FreeImage](http://downloads.sourceforge.net/freeimage/FreeImage3154Win32.zip) From 11b757a6128ae7e0e2f8508612d0f5430da012e1 Mon Sep 17 00:00:00 2001 From: Benjamin Deroche Date: Tue, 30 Jun 2020 22:35:08 +0200 Subject: [PATCH 428/603] Simplify grid tiles update code Now that we temporary save the textures, there is no need to update the grid from bottom to top when going up --- es-core/src/components/ImageGridComponent.h | 33 +++++++-------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index bc863c3789..d9a114f9eb 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -68,7 +68,7 @@ class ImageGridComponent : public IList private: // TILES void buildTiles(); - void updateTiles(bool ascending = true, bool allowAnimation = true, bool updateSelectedState = true); + void updateTiles(bool allowAnimation = true, bool updateSelectedState = true); void updateTileAtPos(int tilePos, int imgPos, bool allowAnimation, bool updateSelectedState); void calcGridDimension(); bool isScrollLoop(); @@ -406,7 +406,7 @@ void ImageGridComponent::onCursorChanged(const CursorState& state) { startPos = 0; ((GuiComponent*)this)->cancelAnimation(2); - updateTiles(direction, false, false); + updateTiles(false, false); } if (mAnimate) { @@ -476,7 +476,7 @@ void ImageGridComponent::onCursorChanged(const CursorState& state) if (lastCursor < 0 || !mAnimate) { - updateTiles(direction, mAnimate && (lastCursor >= 0 || isScrollLoop())); + updateTiles(mAnimate && (lastCursor >= 0 || isScrollLoop())); if (mCursorChangedCallback) mCursorChangedCallback(state); @@ -501,9 +501,9 @@ void ImageGridComponent::onCursorChanged(const CursorState& state) mCamera = t; }; - ((GuiComponent*)this)->setAnimation(new LambdaAnimation(func, 250), 0, [this, direction] { + ((GuiComponent*)this)->setAnimation(new LambdaAnimation(func, 250), 0, [this] { mCamera = 0; - updateTiles(direction, false); + updateTiles(false); }, false, 2); } @@ -571,7 +571,7 @@ void ImageGridComponent::buildTiles() } template -void ImageGridComponent::updateTiles(bool ascending, bool allowAnimation, bool updateSelectedState) +void ImageGridComponent::updateTiles(bool allowAnimation, bool updateSelectedState) { if (!mTiles.size()) return; @@ -590,7 +590,7 @@ void ImageGridComponent::updateTiles(bool ascending, bool allowAnimation, boo return; } - // Temporary store previous texture so they can't be unloaded + // Temporary store previous textures so they can't be unloaded std::vector> previousTextures; for (int ti = 0; ti < (int)mTiles.size(); ti++) { @@ -598,23 +598,10 @@ void ImageGridComponent::updateTiles(bool ascending, bool allowAnimation, boo previousTextures.push_back(tile->getTexture()); } - // If going down, update from top to bottom - // If going up, update from bottom to top - int scrollDirection = ascending ? 1 : -1; - int ti = ascending ? 0 : (int)mTiles.size() - 1; - int end = ascending ? (int)mTiles.size() : -1; - int img = mStartPosition + ti; - - img -= EXTRAITEMS * (isVertical() ? mGridDimension.x() : mGridDimension.y()); - // Update the tiles - while (ti != end) - { - updateTileAtPos(ti, img, allowAnimation, updateSelectedState); - - ti += scrollDirection; - img += scrollDirection; - } + int firstImg = mStartPosition - EXTRAITEMS * (isVertical() ? mGridDimension.x() : mGridDimension.y()); + for (int ti = 0; ti < (int)mTiles.size(); ti++) + updateTileAtPos(ti, firstImg + ti, allowAnimation, updateSelectedState); if (updateSelectedState) mLastCursor = mCursor; From d15a066e2ff2e21c618f685d24f130400b547a93 Mon Sep 17 00:00:00 2001 From: Gemba Date: Sun, 12 Jul 2020 22:34:39 +0200 Subject: [PATCH 429/603] Some pluralization fixes. See proposed change no. 5 in https://retropie.org.uk/forum/topic/26725/es-screensaver-ux-puzzles-and-suggestions --- es-app/src/CollectionSystemManager.cpp | 3 ++- es-app/src/views/SystemView.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 364160fffe..aa7f75d0e6 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -626,7 +626,8 @@ void CollectionSystemManager::updateCollectionFolderMetadata(SystemData* sys) } } - desc = "This collection contains " + std::to_string(games_counter) + " games, including " + games_list; + desc = "This collection contains " + std::to_string(games_counter) + " game" + + (games_counter == 1 ? "" : "s") + ", including " + games_list; FileData* randomGame = sys->getRandomGame(); diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 44e299c499..6ca4511c63 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -258,7 +258,7 @@ void SystemView::onCursorChanged(const CursorState& /*state*/) if (!getSelected()->isGameSystem()) ss << "CONFIGURATION"; else - ss << gameCount << " GAMES AVAILABLE"; + ss << gameCount << " GAME" << (gameCount == 1 ? "" : "S") << " AVAILABLE"; mSystemInfo.setText(ss.str()); }, false, 1); From 809a621fd58f34667470cf832ec40ed8a095853d Mon Sep 17 00:00:00 2001 From: Gemba Date: Sun, 12 Jul 2020 22:43:51 +0200 Subject: [PATCH 430/603] Input during screensaver (Joy Right -> next video) delays resets sleep timer. See proposed change no. 2 - https://retropie.org.uk/forum/topic/26725/es-screensaver-ux-puzzles-and-suggestions --- es-core/src/Window.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index c5f97dbc2f..b59c1eb833 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -127,6 +127,8 @@ void Window::input(InputConfig* config, Input input) if (input.value != 0) { // handle screensaver control mScreenSaver->nextVideo(); + // user input resets sleep time counter + mTimeSinceLastInput = 0; } return; } From 094879b31d0386e9a2996655897b1ea632d8e64a Mon Sep 17 00:00:00 2001 From: Gemba Date: Sat, 18 Jul 2020 00:11:19 +0200 Subject: [PATCH 431/603] Enable screensaver control also for image slideshow squashed after master rrebased --- es-app/src/SystemScreenSaver.cpp | 23 +++++----- es-app/src/SystemScreenSaver.h | 6 +-- es-core/src/Window.cpp | 77 +++++++++++++++++--------------- es-core/src/Window.h | 9 ++-- 4 files changed, 59 insertions(+), 56 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 097e83160a..cffe103a17 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -38,7 +38,7 @@ SystemScreenSaver::SystemScreenSaver(Window* window) : if(!Utils::FileSystem::exists(path)) Utils::FileSystem::createDirectory(path); srand((unsigned int)time(NULL)); - mVideoChangeTime = 30000; + mSwapTimeout = 30000; } SystemScreenSaver::~SystemScreenSaver() @@ -70,7 +70,7 @@ void SystemScreenSaver::startScreenSaver() mState = PowerSaver::getMode() == PowerSaver::INSTANT ? STATE_SCREENSAVER_ACTIVE : STATE_FADE_OUT_WINDOW; - mVideoChangeTime = Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout"); + mSwapTimeout = Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout"); mOpacity = 0.0f; // Load a random video @@ -122,7 +122,7 @@ void SystemScreenSaver::startScreenSaver() mState = PowerSaver::getMode() == PowerSaver::INSTANT ? STATE_SCREENSAVER_ACTIVE : STATE_FADE_OUT_WINDOW; - mVideoChangeTime = Settings::getInstance()->getInt("ScreenSaverSwapImageTimeout"); + mSwapTimeout = Settings::getInstance()->getInt("ScreenSaverSwapImageTimeout"); mOpacity = 0.0f; // Load a random image @@ -431,22 +431,22 @@ void SystemScreenSaver::update(int deltaTime) } else if (mState == STATE_SCREENSAVER_ACTIVE) { - // Update the timer that swaps the videos + // Update the timer that swaps the videos/images mTimer += deltaTime; - if (mTimer > mVideoChangeTime) + if (mTimer > mSwapTimeout) { - nextVideo(); + nextMediaItem(); } } - // If we have a loaded video then update it + // If we have a loaded video/image then update it if (mVideoScreensaver) mVideoScreensaver->update(deltaTime); - if (mImageScreensaver) + else if (mImageScreensaver) mImageScreensaver->update(deltaTime); } -void SystemScreenSaver::nextVideo() { +void SystemScreenSaver::nextMediaItem() { mStopBackgroundAudio = false; stopScreenSaver(); startScreenSaver(); @@ -466,9 +466,6 @@ void SystemScreenSaver::launchGame() ViewController::get()->goToGameList(mCurrentGame->getSystem()); IGameListView* view = ViewController::get()->getGameListView(mCurrentGame->getSystem()).get(); view->setCursor(mCurrentGame); - if (Settings::getInstance()->getBool("ScreenSaverControls")) - { - view->launch(mCurrentGame); - } + view->launch(mCurrentGame); } } diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index a26f4407e9..4e42405086 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -17,7 +17,7 @@ class SystemScreenSaver : public Window::ScreenSaver virtual void startScreenSaver(); virtual void stopScreenSaver(); - virtual void nextVideo(); + virtual void nextMediaItem(); virtual void renderScreenSaver(); virtual bool allowSleep(); virtual void update(int deltaTime); @@ -55,11 +55,11 @@ class SystemScreenSaver : public Window::ScreenSaver Window* mWindow; STATE mState; float mOpacity; - int mTimer; + int mTimer; FileData* mCurrentGame; std::string mGameName; std::string mSystemName; - int mVideoChangeTime; + int mSwapTimeout; std::shared_ptr mBackgroundAudio; bool mStopBackgroundAudio; }; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index b59c1eb833..3ea9a86fff 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -116,40 +116,16 @@ void Window::textInput(const char* text) void Window::input(InputConfig* config, Input input) { - if (mScreenSaver) { - if(mScreenSaver->isScreenSaverActive() && Settings::getInstance()->getBool("ScreenSaverControls") && - (Settings::getInstance()->getString("ScreenSaverBehavior") == "random video")) - { - if(mScreenSaver->getCurrentGame() != NULL && (config->isMappedLike("right", input) || config->isMappedTo("start", input) || config->isMappedTo("select", input))) - { - if(config->isMappedLike("right", input) || config->isMappedTo("select", input)) - { - if (input.value != 0) { - // handle screensaver control - mScreenSaver->nextVideo(); - // user input resets sleep time counter - mTimeSinceLastInput = 0; - } - return; - } - else if(config->isMappedTo("start", input) && input.value != 0) - { - // launch game! - cancelScreenSaver(); - mScreenSaver->launchGame(); - // to force handling the wake up process - mSleeping = true; - } - } - } + if (mScreenSaver && mScreenSaver->isScreenSaverActive() && Settings::getInstance()->getBool("ScreenSaverControls") + && inputDuringScreensaver(config, input)) + { + return; } - if(mSleeping) + if (mSleeping) { - // wake up - mTimeSinceLastInput = 0; - cancelScreenSaver(); mSleeping = false; + mTimeSinceLastInput = 0; onWake(); return; } @@ -158,28 +134,57 @@ void Window::input(InputConfig* config, Input input) if (cancelScreenSaver()) return; - if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_g && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) + bool dbg_keyboard_key_press = Settings::getInstance()->getBool("Debug") && config->getDeviceId() == DEVICE_KEYBOARD && input.value; + if (dbg_keyboard_key_press && input.id == SDLK_g && SDL_GetModState() & KMOD_LCTRL) { // toggle debug grid with Ctrl-G Settings::getInstance()->setBool("DebugGrid", !Settings::getInstance()->getBool("DebugGrid")); } - else if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_t && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) + else if (dbg_keyboard_key_press && input.id == SDLK_t && SDL_GetModState() & KMOD_LCTRL) { // toggle TextComponent debug view with Ctrl-T Settings::getInstance()->setBool("DebugText", !Settings::getInstance()->getBool("DebugText")); } - else if(config->getDeviceId() == DEVICE_KEYBOARD && input.value && input.id == SDLK_i && SDL_GetModState() & KMOD_LCTRL && Settings::getInstance()->getBool("Debug")) + else if (dbg_keyboard_key_press && input.id == SDLK_i && SDL_GetModState() & KMOD_LCTRL) { // toggle TextComponent debug view with Ctrl-I Settings::getInstance()->setBool("DebugImage", !Settings::getInstance()->getBool("DebugImage")); } - else + else if (peekGui()) { - if (peekGui()) + this->peekGui()->input(config, input); // this is where the majority of inputs will be consumed: the GuiComponent Stack + } +} + +bool Window::inputDuringScreensaver(InputConfig* config, Input input) +{ + bool input_consumed = false; + std::string screensaver_type = Settings::getInstance()->getString("ScreenSaverBehavior"); + + if (screensaver_type == "random video" || screensaver_type == "slideshow") + { + bool is_select_input = config->isMappedLike("right", input) || config->isMappedTo("select", input); + bool is_start_input = config->isMappedTo("start", input); + + if (is_select_input) + { + if (input.value) { + mScreenSaver->nextMediaItem(); + // user input resets sleep time counter + mTimeSinceLastInput = 0; + } + input_consumed = true; + } + else if (is_start_input) { - this->peekGui()->input(config, input); // this is where the majority of inputs will be consumed: the GuiComponent Stack + bool slideshow_custom_images = Settings::getInstance()->getBool("SlideshowScreenSaverCustomImageSource"); + if (!slideshow_custom_images) + { + mScreenSaver->launchGame(); + } } } + return input_consumed; } void Window::update(int deltaTime) diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 3f104c648e..efe48d2df8 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -25,7 +25,7 @@ class Window public: virtual void startScreenSaver() = 0; virtual void stopScreenSaver() = 0; - virtual void nextVideo() = 0; + virtual void nextMediaItem() = 0; virtual void renderScreenSaver() = 0; virtual bool allowSleep() = 0; virtual void update(int deltaTime) = 0; @@ -80,15 +80,16 @@ class Window private: void onSleep(); void onWake(); + bool inputDuringScreensaver(InputConfig* config, Input input); // Returns true if at least one component on the stack is processing bool isProcessing(); - HelpComponent* mHelp; + HelpComponent* mHelp; ImageComponent* mBackgroundOverlay; ScreenSaver* mScreenSaver; - InfoPopup* mInfoPopup; - bool mRenderScreenSaver; + InfoPopup* mInfoPopup; + bool mRenderScreenSaver; std::vector mGuiStack; From a5f2739c44e73bb62afd97ea8d19280d6f223548 Mon Sep 17 00:00:00 2001 From: PhilaPhan80 <53459459+PhilaPhan80@users.noreply.github.com> Date: Mon, 27 Jul 2020 16:07:18 -0400 Subject: [PATCH 432/603] Added Daphne emulator to PlatformId enum and GamesDBJSONScraper list to mimic Arcade for TheGamesDB API calls (#674) * Added Daphne to mimic Arcade for TheGamesDB scraper * Added Daphne entry to PlatformId enum --- es-app/src/PlatformId.h | 1 + es-app/src/scrapers/GamesDBJSONScraper.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index b8886155c9..bc6c330d93 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -25,6 +25,7 @@ namespace PlatformIds BBC_MICRO, COLECOVISION, COMMODORE_64, + DAPHNE, INTELLIVISION, MAC_OS, XBOX, diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index 733403aace..2f2f8ef63d 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -50,6 +50,7 @@ const std::map gamesdb_new_platformid_map{ { ATARI_XE, "30" }, { COLECOVISION, "31" }, { COMMODORE_64, "40" }, + { DAPHNE, "23" }, { INTELLIVISION, "32" }, { MAC_OS, "37" }, { XBOX, "14" }, From 9160c217b055098205ec3ed8d1cf4355e5b1dcc2 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Tue, 4 Aug 2020 04:56:23 +0100 Subject: [PATCH 433/603] fix wrong Sharp X68000 platform id --- es-app/src/PlatformId.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index a6f22302b7..19d2e54f1f 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -66,7 +66,7 @@ namespace PlatformIds "snes", // super nintendo entertainment system "scummvm", "x1", - "x6800", + "x68000", "solarus", "moto", // Thomson MO/TO "pc88", // NEC PC-8801 From e9e47981f7bd07dba65a46f8ee172ea1e4e7479f Mon Sep 17 00:00:00 2001 From: opa Date: Thu, 24 Sep 2020 22:59:36 +0900 Subject: [PATCH 434/603] Allow 0 in --- es-app/src/components/TextListComponent.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index b0124f22b2..fb3954ab44 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -63,9 +63,9 @@ class TextListComponent : public IList it->data.textCache.reset(); } - inline void setUppercase(bool /*uppercase*/) + inline void setUppercase(bool uppercase) { - mUppercase = true; + mUppercase = uppercase; for(auto it = mEntries.begin(); it != mEntries.end(); it++) it->data.textCache.reset(); } From 3001fdd086f1ddd4aa60158dfcb0e13ccc4c9fb2 Mon Sep 17 00:00:00 2001 From: opa Date: Thu, 24 Sep 2020 23:36:58 +0900 Subject: [PATCH 435/603] Eliminate unused variable glExts --- es-core/src/renderers/Renderer_GL14.cpp | 1 - es-core/src/renderers/Renderer_GL21.cpp | 1 - es-core/src/renderers/Renderer_GLES10.cpp | 1 - es-core/src/renderers/Renderer_GLES20.cpp | 1 - 4 files changed, 4 deletions(-) diff --git a/es-core/src/renderers/Renderer_GL14.cpp b/es-core/src/renderers/Renderer_GL14.cpp index 23662914c2..39d69491f2 100644 --- a/es-core/src/renderers/Renderer_GL14.cpp +++ b/es-core/src/renderers/Renderer_GL14.cpp @@ -105,7 +105,6 @@ namespace Renderer LOG(LogInfo) << "GL renderer: " << renderer; LOG(LogInfo) << "GL version: " << version; LOG(LogInfo) << "Checking available OpenGL extensions..."; - std::string glExts = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); uint8_t data[4] = {255, 255, 255, 255}; diff --git a/es-core/src/renderers/Renderer_GL21.cpp b/es-core/src/renderers/Renderer_GL21.cpp index d5c7025e74..e676eae0f9 100644 --- a/es-core/src/renderers/Renderer_GL21.cpp +++ b/es-core/src/renderers/Renderer_GL21.cpp @@ -105,7 +105,6 @@ namespace Renderer LOG(LogInfo) << "GL renderer: " << renderer; LOG(LogInfo) << "GL version: " << version; LOG(LogInfo) << "Checking available OpenGL extensions..."; - std::string glExts = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); uint8_t data[4] = {255, 255, 255, 255}; diff --git a/es-core/src/renderers/Renderer_GLES10.cpp b/es-core/src/renderers/Renderer_GLES10.cpp index 5c7ad692db..bb3121f026 100644 --- a/es-core/src/renderers/Renderer_GLES10.cpp +++ b/es-core/src/renderers/Renderer_GLES10.cpp @@ -105,7 +105,6 @@ namespace Renderer LOG(LogInfo) << "GL renderer: " << renderer; LOG(LogInfo) << "GL version: " << version; LOG(LogInfo) << "Checking available OpenGL extensions..."; - std::string glExts = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); uint8_t data[4] = {255, 255, 255, 255}; diff --git a/es-core/src/renderers/Renderer_GLES20.cpp b/es-core/src/renderers/Renderer_GLES20.cpp index b9583ac19f..5f6837b05c 100644 --- a/es-core/src/renderers/Renderer_GLES20.cpp +++ b/es-core/src/renderers/Renderer_GLES20.cpp @@ -264,7 +264,6 @@ namespace Renderer LOG(LogInfo) << "GL renderer: " << renderer; LOG(LogInfo) << "GL version: " << version; LOG(LogInfo) << "Checking available OpenGL extensions..."; - std::string glExts = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); setupShaders(); From e63f244d699b8d49b53ebf1c79c9cff77103cd1c Mon Sep 17 00:00:00 2001 From: pjft Date: Thu, 1 Oct 2020 20:18:30 +0100 Subject: [PATCH 436/603] Improve Update Gamelist logic --- es-app/src/Gamelist.cpp | 85 +++++++++++++++++++++++++++++++---------- 1 file changed, 64 insertions(+), 21 deletions(-) diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 3136704200..c4c712b553 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -183,6 +183,8 @@ void updateGamelist(SystemData* system) pugi::xml_node root; std::string xmlReadPath = system->getGamelistPath(false); + std::string relativeTo = system->getStartPath(); + if(Utils::FileSystem::exists(xmlReadPath)) { //parse an existing file first @@ -205,6 +207,8 @@ void updateGamelist(SystemData* system) root = doc.append_child("gameList"); } + std::vector changedGames; + std::vector changedFolders; //now we have all the information from the XML. now iterate through all our games and add information from there FileData* rootFolder = system->getRootFolder(); @@ -214,42 +218,81 @@ void updateGamelist(SystemData* system) //get only files, no folders std::vector files = rootFolder->getFilesRecursive(GAME | FOLDER); - //iterate through all files, checking if they're already in the XML + + // Stage 1: iterate through all files in memory, checking for changes for(std::vector::const_iterator fit = files.cbegin(); fit != files.cend(); ++fit) { - const char* tag = ((*fit)->getType() == GAME) ? "game" : "folder"; // do not touch if it wasn't changed anyway if (!(*fit)->metadata.wasChanged()) continue; - - // check if the file already exists in the XML - // if it does, remove it before adding - for(pugi::xml_node fileNode = root.child(tag); fileNode; fileNode = fileNode.next_sibling(tag)) + + // adding item to changed list + if ((*fit)->getType() == GAME) { - pugi::xml_node pathNode = fileNode.child("path"); - if(!pathNode) + changedGames.push_back((*fit)); + } + else + { + changedFolders.push_back((*fit)); + } + } + + + // Stage 2: iterate XML if needed, to remove and add changed items + const char* tagList[2] = { "game", "folder" }; + FileType typeList[2] = { GAME, FOLDER }; + std::vector changedList[2] = { changedGames, changedFolders }; + + for(int i = 0; i < 2; i++) + { + const char* tag = tagList[i]; + std::vector changes = changedList[i]; + + // if changed items of this type + if (changes.size() > 0) { + // check if the item already exists in the XML + // if it does, remove all corresponding items before adding + for(pugi::xml_node fileNode = root.child(tag); fileNode; ) { - LOG(LogError) << "<" << tag << "> node contains no child!"; - continue; + pugi::xml_node pathNode = fileNode.child("path"); + + // we need this as we were deleting the iterator and things would become inconsistent + pugi::xml_node nextNode = fileNode.next_sibling(tag); + + if(!pathNode) + { + LOG(LogError) << "<" << tag << "> node contains no child!"; + continue; + } + + // apply the same transformation as in Gamelist::parseGamelist + std::string xmlpath = Utils::FileSystem::resolveRelativePath(pathNode.text().get(), relativeTo, false); + + for(std::vector::const_iterator cfit = changes.cbegin(); cfit != changes.cend(); ++cfit) + { + if(xmlpath == (*cfit)->getPath()) + { + // found it + root.remove_child(fileNode); + break; + } + } + fileNode = nextNode; + } - std::string nodePath = Utils::FileSystem::getCanonicalPath(Utils::FileSystem::resolveRelativePath(pathNode.text().get(), system->getStartPath(), true)); - std::string gamePath = Utils::FileSystem::getCanonicalPath((*fit)->getPath()); - if(nodePath == gamePath) + // add items to XML + for(std::vector::const_iterator cfit = changes.cbegin(); cfit != changes.cend(); ++cfit) { - // found it - root.remove_child(fileNode); - break; + // it was either removed or never existed to begin with; either way, we can add it now + addFileDataNode(root, *cfit, tag, system); + ++numUpdated; } } - - // it was either removed or never existed to begin with; either way, we can add it now - addFileDataNode(root, *fit, tag, system); - ++numUpdated; } - //now write the file + // now write the file if (numUpdated > 0) { const auto startTs = std::chrono::system_clock::now(); From a325ded246f73833ac3eaf5cb4065db5d1e4e4b8 Mon Sep 17 00:00:00 2001 From: pjft Date: Sat, 3 Oct 2020 14:01:56 +0100 Subject: [PATCH 437/603] Update video screensaver settings --- .../src/guis/GuiVideoScreensaverOptions.cpp | 38 +++++++++++-------- es-core/src/Settings.cpp | 2 +- es-core/src/components/VideoVlcComponent.cpp | 19 +++++++--- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.cpp b/es-app/src/guis/GuiVideoScreensaverOptions.cpp index b757a87614..1370b47ebd 100644 --- a/es-app/src/guis/GuiVideoScreensaverOptions.cpp +++ b/es-app/src/guis/GuiVideoScreensaverOptions.cpp @@ -41,6 +41,24 @@ GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const cha addWithLabel("SHOW GAME INFO ON SCREENSAVER", ss_info); addSaveFunc([ss_info, this] { Settings::getInstance()->setString("ScreenSaverGameInfo", ss_info->getSelected()); }); + auto ss_video_mute = std::make_shared(mWindow); + ss_video_mute->setState(Settings::getInstance()->getBool("ScreenSaverVideoMute")); + addWithLabel("MUTE SCREENSAVER AUDIO", ss_video_mute); + addSaveFunc([ss_video_mute] { Settings::getInstance()->setBool("ScreenSaverVideoMute", ss_video_mute->getState()); }); + + + auto ss_vlc_resolution = std::make_shared< OptionListComponent >(mWindow, "GAME INFO ALIGNMENT", false); + std::vector vlc_res; + vlc_res.push_back("original"); // renders at original video resolution, stretched to fit screen + vlc_res.push_back("low"); // 25% of screen resolution + vlc_res.push_back("medium"); // 50% of screen resolution + vlc_res.push_back("high"); // 75% of screen resolution + vlc_res.push_back("max"); // full screen resolution + for(auto it = vlc_res.cbegin(); it != vlc_res.cend(); it++) + ss_vlc_resolution->add(*it, *it, Settings::getInstance()->getString("VlcScreenSaverResolution") == *it); + addWithLabel("VLC: SCREENSAVER VIDEO RESOLUTION", ss_vlc_resolution); + addSaveFunc([ss_vlc_resolution, this] { Settings::getInstance()->setString("VlcScreenSaverResolution", ss_vlc_resolution->getSelected()); }); + #ifdef _RPI_ ComponentListRow row; @@ -51,44 +69,32 @@ GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const cha align_mode.push_back("center"); for(auto it = align_mode.cbegin(); it != align_mode.cend(); it++) ss_omx_subs_align->add(*it, *it, Settings::getInstance()->getString("SubtitleAlignment") == *it); - addWithLabel("GAME INFO ALIGNMENT", ss_omx_subs_align); + addWithLabel("OMX: GAME INFO ALIGNMENT", ss_omx_subs_align); addSaveFunc([ss_omx_subs_align, this] { Settings::getInstance()->setString("SubtitleAlignment", ss_omx_subs_align->getSelected()); }); // Set font size auto ss_omx_font_size = std::make_shared(mWindow, 1.f, 64.f, 1.f, "h"); ss_omx_font_size->setValue((float)(Settings::getInstance()->getInt("SubtitleSize"))); - addWithLabel("GAME INFO FONT SIZE", ss_omx_font_size); + addWithLabel("OMX: GAME INFO FONT SIZE", ss_omx_font_size); addSaveFunc([ss_omx_font_size] { int subSize = (int)Math::round(ss_omx_font_size->getValue()); Settings::getInstance()->setInt("SubtitleSize", subSize); }); - auto ss_video_mute = std::make_shared(mWindow); - ss_video_mute->setState(Settings::getInstance()->getBool("ScreenSaverVideoMute")); - addWithLabel("MUTE SCREENSAVER AUDIO", ss_video_mute); - addSaveFunc([ss_video_mute] { Settings::getInstance()->setBool("ScreenSaverVideoMute", ss_video_mute->getState()); }); - // Define subtitle font auto ss_omx_font_file = std::make_shared(mWindow, "", Font::get(FONT_SIZE_SMALL), 0x777777FF); - addEditableTextComponent(row, "PATH TO FONT FILE", ss_omx_font_file, Settings::getInstance()->getString("SubtitleFont")); + addEditableTextComponent(row, "OMX: PATH TO FONT FILE", ss_omx_font_file, Settings::getInstance()->getString("SubtitleFont")); addSaveFunc([ss_omx_font_file] { Settings::getInstance()->setString("SubtitleFont", ss_omx_font_file->getValue()); }); // Define subtitle italic font auto ss_omx_italic_font_file = std::make_shared(mWindow, "", Font::get(FONT_SIZE_SMALL), 0x777777FF); - addEditableTextComponent(row, "PATH TO ITALIC FONT FILE", ss_omx_italic_font_file, Settings::getInstance()->getString("SubtitleItalicFont")); + addEditableTextComponent(row, "OMX: PATH TO ITALIC FONT FILE", ss_omx_italic_font_file, Settings::getInstance()->getString("SubtitleItalicFont")); addSaveFunc([ss_omx_italic_font_file] { Settings::getInstance()->setString("SubtitleItalicFont", ss_omx_italic_font_file->getValue()); }); #endif - -#ifndef _RPI_ - auto captions_compatibility = std::make_shared(mWindow); - captions_compatibility->setState(Settings::getInstance()->getBool("CaptionsCompatibility")); - addWithLabel("USE COMPATIBLE LOW RESOLUTION FOR CAPTIONS", captions_compatibility); - addSaveFunc([captions_compatibility] { Settings::getInstance()->setBool("CaptionsCompatibility", captions_compatibility->getState()); }); -#endif } GuiVideoScreensaverOptions::~GuiVideoScreensaverOptions() diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 56c027b576..f6ece0156f 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -132,7 +132,7 @@ void Settings::setDefaults() mBoolMap["VideoAudio"] = true; mBoolMap["ScreenSaverVideoMute"] = false; - mBoolMap["CaptionsCompatibility"] = true; + mStringMap["VlcScreenSaverResolution"] = "original"; // Audio out device for Video playback using OMX player. mStringMap["OMXAudioDev"] = "both"; mStringMap["CollectionSystemsAuto"] = ""; diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index 704c08acae..ce90d0456b 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -272,12 +272,22 @@ void VideoVlcComponent::startVideo() // Make sure we found a valid video track if ((mVideoWidth > 0) && (mVideoHeight > 0)) { -#ifndef _RPI_ if (mScreensaverMode) { - if(!Settings::getInstance()->getBool("CaptionsCompatibility")) { - - Vector2f resizeScale((Renderer::getScreenWidth() / (float)mVideoWidth), (Renderer::getScreenHeight() / (float)mVideoHeight)); + std::string resolution = Settings::getInstance()->getString("VlcScreenSaverResolution"); + if(resolution != "original") { + float scale = 1; + if (resolution == "low") + // 25% of screen resolution + scale = 0.25; + if (resolution == "medium") + // 50% of screen resolution + scale = 0.5; + if (resolution == "high") + // 75% of screen resolution + scale = 0.75; + + Vector2f resizeScale((Renderer::getScreenWidth() / (float)mVideoWidth) * scale, (Renderer::getScreenHeight() / (float)mVideoHeight) * scale); if(resizeScale.x() < resizeScale.y()) { @@ -289,7 +299,6 @@ void VideoVlcComponent::startVideo() } } } -#endif PowerSaver::pause(); setupContext(); From f5be4e693f71510a4f3fb07cbfe36cc6852dbf19 Mon Sep 17 00:00:00 2001 From: Kactius <43798316+Kactius@users.noreply.github.com> Date: Mon, 5 Oct 2020 09:33:19 +0200 Subject: [PATCH 438/603] es-app/src/FileSorts.cpp maybe a mistake Sorry, maybe it's not a bug, if someone with more knowledge can or wants to review it, I'm working on putting my personal emulatiostation in Spanish and I found this line by chance. --- es-app/src/FileSorts.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/FileSorts.h b/es-app/src/FileSorts.h index d821ba0f9d..be705522ce 100644 --- a/es-app/src/FileSorts.h +++ b/es-app/src/FileSorts.h @@ -9,7 +9,7 @@ namespace FileSorts { bool compareName(const FileData* file1, const FileData* file2); bool compareRating(const FileData* file1, const FileData* file2); - bool compareTimesPlayed(const FileData* file1, const FileData* fil2); + bool compareTimesPlayed(const FileData* file1, const FileData* file2); bool compareLastPlayed(const FileData* file1, const FileData* file2); bool compareNumPlayers(const FileData* file1, const FileData* file2); bool compareReleaseDate(const FileData* file1, const FileData* file2); From b264b50b9fc664c308a3f4b5ff267f7dd3f0edd1 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Tue, 13 Oct 2020 15:05:35 +0300 Subject: [PATCH 439/603] scraper: fix scraping for Atari 800 and Atari XE Platform on ScreenScraper site is 'Atari 8bit' (https://www.screenscraper.fr/systemeinfos.php?plateforme=43). --- es-app/src/scrapers/ScreenScraper.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index 7ddabc6527..dd93a7a8ca 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -22,16 +22,16 @@ const std::map screenscraper_platformid_map{ { AMSTRAD_CPC, 65 }, { APPLE_II, 86 }, { ARCADE, 75 }, - { ATARI_800, 26 }, // Use ATARI_2600 as an alias for atari 800 + { ATARI_800, 43 }, { ATARI_2600, 26 }, { ATARI_5200, 40 }, { ATARI_7800, 41 }, { ATARI_JAGUAR, 27 }, { ATARI_JAGUAR_CD, 171 }, { ATARI_LYNX, 28 }, - { ATARI_ST, 42}, - { BBC_MICRO, 37}, - // missing Atari XE ? + { ATARI_ST, 42 }, + { ATARI_XE, 43 }, + { BBC_MICRO, 37 }, { COLECOVISION, 48 }, { COMMODORE_64, 66 }, { INTELLIVISION, 115 }, From 0a9345a9e5bfcfbd4c73ae6e17ab4b10331417e1 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sun, 1 Nov 2020 20:55:09 +0000 Subject: [PATCH 440/603] changed RPI default AudioDevice to HDMI New kernels now use HDMI / Headphone - see https://retropie.org.uk/forum/topic/26628/audio-issues-after-latest-raspbian-updates --- es-core/src/Settings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 56c027b576..e1562d80de 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -145,7 +145,7 @@ void Settings::setDefaults() // Audio out device for volume control #ifdef _RPI_ - mStringMap["AudioDevice"] = "PCM"; + mStringMap["AudioDevice"] = "HDMI"; #else mStringMap["AudioDevice"] = "Master"; #endif From 0384685f059ca621b7bd6f1c5c9a443f30e7414b Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 3 Nov 2020 19:54:52 +0000 Subject: [PATCH 441/603] cosmetic - indent to 4 spaces --- CMakeLists.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 096ac24bab..2f21f19f5f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,16 +71,16 @@ if(${GLSystem} MATCHES "Desktop OpenGL") add_definitions(-DUSE_OPENGL_14) else() if(NOT USE_GLES1) - find_package(OpenGLES2 QUIET REQUIRED) - message(STATUS "Found GLESv2: ${OPENGLES2_LIBRARIES}") - set(OPENGLES_LIBRARIES ${OPENGLES2_LIBRARIES}) - set(OPENGLES_INCLUDE_DIRS ${OPENGLES2_INCLUDE_DIRS}) - add_definitions(-DUSE_OPENGLES_20) + find_package(OpenGLES2 QUIET REQUIRED) + message(STATUS "Found GLESv2: ${OPENGLES2_LIBRARIES}") + set(OPENGLES_LIBRARIES ${OPENGLES2_LIBRARIES}) + set(OPENGLES_INCLUDE_DIRS ${OPENGLES2_INCLUDE_DIRS}) + add_definitions(-DUSE_OPENGLES_20) else() - set(HINT_GLES_LIBNAME GLESv1_CM) - find_package(OpenGLES QUIET REQUIRED) - message(STATUS "Found GLES: ${OPENGLES_LIBRARIES}") - add_definitions(-DUSE_OPENGLES_10) + set(HINT_GLES_LIBNAME GLESv1_CM) + find_package(OpenGLES QUIET REQUIRED) + message(STATUS "Found GLES: ${OPENGLES_LIBRARIES}") + add_definitions(-DUSE_OPENGLES_10) endif() endif() From 9c4949a168a52cabdf334fce09d5793e2f3a030c Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 3 Nov 2020 19:56:32 +0000 Subject: [PATCH 442/603] link with brcmGLESv2 for GLESv1 on the RPI - fixes black screen / no output --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2f21f19f5f..8f885713f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,7 +77,11 @@ else() set(OPENGLES_INCLUDE_DIRS ${OPENGLES2_INCLUDE_DIRS}) add_definitions(-DUSE_OPENGLES_20) else() - set(HINT_GLES_LIBNAME GLESv1_CM) + if(RPI) + set(HINT_GLES_LIBNAME brcmGLESv2) + else() + set(HINT_GLES_LIBNAME GLESv1_CM) + endif() find_package(OpenGLES QUIET REQUIRED) message(STATUS "Found GLES: ${OPENGLES_LIBRARIES}") add_definitions(-DUSE_OPENGLES_10) From d309c848c5b8ff02ce3469761dedf1abf65c9c7b Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Wed, 4 Nov 2020 14:30:37 +0000 Subject: [PATCH 443/603] scraper: add missing 'daphne' platform index Fixes scraping errors due to erroneous system chosen. --- es-app/src/PlatformId.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 19d2e54f1f..7b0625404f 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -24,6 +24,7 @@ namespace PlatformIds "bbcmicro", "colecovision", "c64", // commodore 64 + "daphne", "intellivision", "macintosh", "xbox", From c9dadf004b92f07f275cbef02a8343d76859cae8 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 12 Nov 2020 21:33:12 +0000 Subject: [PATCH 444/603] CMakeLists.txt - Remove RPI hack overriding HINT_GLES_LIBNAME as it isn't required - we shouldn't override any HINT_GLES_LIBNAME here. --- CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f885713f4..a2a70049b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,11 +77,6 @@ else() set(OPENGLES_INCLUDE_DIRS ${OPENGLES2_INCLUDE_DIRS}) add_definitions(-DUSE_OPENGLES_20) else() - if(RPI) - set(HINT_GLES_LIBNAME brcmGLESv2) - else() - set(HINT_GLES_LIBNAME GLESv1_CM) - endif() find_package(OpenGLES QUIET REQUIRED) message(STATUS "Found GLES: ${OPENGLES_LIBRARIES}") add_definitions(-DUSE_OPENGLES_10) From dd22c0d65e145c40ffeb538e832aed24a0efb431 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Thu, 12 Nov 2020 21:33:54 +0000 Subject: [PATCH 445/603] CMakeLists.txt - fix detection for mali boards by re-adding paths to check for libMali.so No need to use HINT_GLES_LIBNAME as GLESv1_CM and GLESv2 libs symlink to the mali lib --- CMakeLists.txt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a2a70049b6..235fdc2e25 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,10 +56,12 @@ elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/opt/vero3/lib/libMali.so") set(GLES_EXTRA_LIBRARIES EGL) #check if we're running on olinuxino / odroid / etc -elseif(EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libMali.so") - set(GLSystem "Embedded OpenGL" CACHE STRING "The OpenGL system to be used") - set(HINT_GLES_LIBNAME Mali) - +elseif( + EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/libMali.so" OR + EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libmali.so" OR + EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libMali.so" OR + EXISTS "${CMAKE_FIND_ROOT_PATH}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/mali-egl/libmali.so") + set(GLSystem "Embedded OpenGL" CACHE STRING "The OpenGL system to be used") else() set(GLSystem "Desktop OpenGL" CACHE STRING "The OpenGL system to be used") endif(GLES) From 617feb035c91b3dca146ad266f611ab6f516e187 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 14 Nov 2020 20:34:21 +0100 Subject: [PATCH 446/603] Allow nested variables in themes 8b0000 ${colorRed} ./art ${themeArtFolder}/Cabin-Bold.ttf --- es-core/src/ThemeData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 2d1be3d048..7abfd8847e 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -329,7 +329,7 @@ void ThemeData::parseVariables(const pugi::xml_node& root) for(pugi::xml_node_iterator it = variables.begin(); it != variables.end(); ++it) { std::string key = it->name(); - std::string val = it->text().as_string(); + std::string val = resolvePlaceholders(it->text().as_string()); if (!val.empty()) mVariables.insert(std::pair(key, val)); From 7c37ee0e9c23069e1967eba617d7e2f0c0964fdf Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sun, 15 Nov 2020 20:32:01 +0100 Subject: [PATCH 447/603] Silence warnings --- es-core/src/components/ComponentGrid.cpp | 2 +- es-core/src/components/ImageGridComponent.h | 10 +++++----- es-core/src/resources/Font.cpp | 2 +- es-core/src/resources/TextureData.cpp | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/es-core/src/components/ComponentGrid.cpp b/es-core/src/components/ComponentGrid.cpp index 90b6162d92..b330e4ad5d 100644 --- a/es-core/src/components/ComponentGrid.cpp +++ b/es-core/src/components/ComponentGrid.cpp @@ -363,7 +363,7 @@ void ComponentGrid::render(const Transform4x4f& parentTrans) { Renderer::setMatrix(trans); Renderer::bindTexture(0); - Renderer::drawLines(&mLines[0], mLines.size()); + Renderer::drawLines(&mLines[0], (int)mLines.size()); } } diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index bc863c3789..7a297edcc2 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -395,7 +395,7 @@ void ImageGridComponent::onCursorChanged(const CursorState& state) int oldCol = (mLastCursor / dimOpposite); int col = (mCursor / dimOpposite); - int lastCol = ((mEntries.size() - 1) / dimOpposite); + int lastCol = (((int)mEntries.size() - 1) / dimOpposite); int lastScroll = std::max(0, (lastCol + 1 - dimScrollable)); @@ -421,9 +421,9 @@ void ImageGridComponent::onCursorChanged(const CursorState& state) int newIdx = mCursor - mStartPosition + (dimOpposite * EXTRAITEMS); if (isScrollLoop()) { if (newIdx < 0) - newIdx += mEntries.size(); + newIdx += (int)mEntries.size(); else if (newIdx >= mTiles.size()) - newIdx -= mEntries.size(); + newIdx -= (int)mEntries.size(); } if (newIdx >= 0 && newIdx < mTiles.size()) @@ -630,9 +630,9 @@ void ImageGridComponent::updateTileAtPos(int tilePos, int imgPos, bool allowA if(isScrollLoop()) { if (imgPos < 0) - imgPos += mEntries.size(); + imgPos += (int)mEntries.size(); else if (imgPos >= size()) - imgPos -= mEntries.size(); + imgPos -= (int)mEntries.size(); } // If we have more tiles than we have to display images on screen, hide them diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index 293077b75f..f222e619f7 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -412,7 +412,7 @@ void Font::renderTextCache(TextCache* cache) auto vertexList = *it; Renderer::bindTexture(*it->textureIdPtr); - Renderer::drawTriangleStrips(&it->verts[0], it->verts.size()); + Renderer::drawTriangleStrips(&it->verts[0], (int)it->verts.size()); } } diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index 11cc756379..efe4bfb585 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -175,7 +175,7 @@ bool TextureData::uploadAndBind() return false; // Upload texture - mTextureID = Renderer::createTexture(Renderer::Texture::RGBA, true, mTile, mWidth, mHeight, mDataRGBA); + mTextureID = Renderer::createTexture(Renderer::Texture::RGBA, true, mTile, (int)mWidth, (int)mHeight, mDataRGBA); } return true; } From a5f222fd16b4bda14f2c342fb463cd1f14cc17e7 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sun, 15 Nov 2020 21:44:05 +0100 Subject: [PATCH 448/603] More sane defaults for several components (md_image, md_video, md_marquue and md_thumbnail) and move the hidden ones offscreen and set their maxSize to entire screen This fixes bugs in grid and video view where the image would get the wrong aspect ratio because the default maxSize was set to 1 --- THEMES.md | 1 + .../views/gamelist/DetailedGameListView.cpp | 25 +++++------ .../src/views/gamelist/GridGameListView.cpp | 30 ++++++++------ .../src/views/gamelist/VideoGameListView.cpp | 41 ++++++++++--------- 4 files changed, 54 insertions(+), 43 deletions(-) diff --git a/THEMES.md b/THEMES.md index 07e570a060..5ea7149c53 100644 --- a/THEMES.md +++ b/THEMES.md @@ -285,6 +285,7 @@ You can now change the order in which elements are rendered by setting `zIndex` * Media * `image name="md_image"` - 30 * `video name="md_video"` - 30 + * `image name="md_thumbnail"` - 35 * `image name="md_marquee"` - 35 * Metadata - 40 * Labels diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 6646e72449..7f09d70fa6 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -26,30 +26,31 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : mList.setAlignment(TextListComponent::ALIGN_LEFT); mList.setCursorChangedCallback([&](const CursorState& /*state*/) { updateInfoPanel(); }); + // Image + mImage.setOrigin(0.5f, 0.5f); + mImage.setPosition(mSize.x() * 0.25f, mList.getPosition().y() + mSize.y() * 0.2125f); + mImage.setMaxSize(mSize.x() * (0.50f - 2*padding), mSize.y() * 0.4f); + mImage.setDefaultZIndex(30); + addChild(&mImage); + // Thumbnail + // Default to off the screen mThumbnail.setOrigin(0.5f, 0.5f); mThumbnail.setPosition(2.0f, 2.0f); + mThumbnail.setMaxSize(mSize.x(), mSize.y()); + mThumbnail.setDefaultZIndex(35); mThumbnail.setVisible(false); - mThumbnail.setMaxSize(mSize.x() * (0.25f - 2*padding), mSize.y() * 0.10f); - mThumbnail.setDefaultZIndex(25); addChild(&mThumbnail); // Marquee - mMarquee.setOrigin(0.5f, 0.5f); // Default to off the screen + mMarquee.setOrigin(0.5f, 0.5f); mMarquee.setPosition(2.0f, 2.0f); - mMarquee.setVisible(false); - mMarquee.setMaxSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.18f); + mMarquee.setMaxSize(mSize.x(), mSize.y()); mMarquee.setDefaultZIndex(35); + mMarquee.setVisible(false); addChild(&mMarquee); - // image - mImage.setOrigin(0.5f, 0.5f); - mImage.setPosition(mSize.x() * 0.25f, mList.getPosition().y() + mSize.y() * 0.2125f); - mImage.setMaxSize(mSize.x() * (0.50f - 2*padding), mSize.y() * 0.4f); - mImage.setDefaultZIndex(30); - addChild(&mImage); - // metadata labels + values mLblRating.setText("Rating: "); addChild(&mLblRating); diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index a95033d89e..90ad293a20 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -89,27 +89,33 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : mDescription.setSize(mDescContainer.getSize().x(), 0); mDescContainer.addChild(&mDescription); - mMarquee.setOrigin(0.5f, 0.5f); - mMarquee.setPosition(mSize.x() * 0.25f, mSize.y() * 0.10f); - mMarquee.setMaxSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.18f); - mMarquee.setDefaultZIndex(35); - mMarquee.setVisible(false); - addChild(&mMarquee); - + // Image + // Default to off the screen mImage.setOrigin(0.5f, 0.5f); mImage.setPosition(2.0f, 2.0f); - mImage.setMaxSize(1.0f, 1.0f); - mImage.setDefaultZIndex(10); + mImage.setMaxSize(mSize.x(), mSize.y()); + mImage.setDefaultZIndex(30); mImage.setVisible(false); addChild(&mImage); + // Video + // Default to off the screen mVideo->setOrigin(0.5f, 0.5f); - mVideo->setPosition(mSize.x() * 0.25f, mSize.y() * 0.4f); - mVideo->setSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.4f); - mVideo->setDefaultZIndex(15); + mVideo->setPosition(2.0f, 2.0f); + mVideo->setSize(mSize.x(), mSize.y()); + mVideo->setDefaultZIndex(30); mVideo->setVisible(false); addChild(mVideo); + // Marquee + // Default to off the screen + mMarquee.setOrigin(0.5f, 0.5f); + mMarquee.setPosition(2.0f, 2.0f); + mMarquee.setMaxSize(mSize.x(), mSize.y()); + mMarquee.setDefaultZIndex(35); + mMarquee.setVisible(false); + addChild(&mMarquee); + initMDLabels(); initMDValues(); updateInfoPanel(); diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index de2446869b..a693fe831c 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -44,37 +44,40 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : mList.setAlignment(TextListComponent::ALIGN_LEFT); mList.setCursorChangedCallback([&](const CursorState& /*state*/) { updateInfoPanel(); }); - // Thumbnail - mThumbnail.setOrigin(0.5f, 0.5f); - mThumbnail.setPosition(2.0f, 2.0f); - mThumbnail.setVisible(false); - mThumbnail.setMaxSize(mSize.x() * (0.25f - 2*padding), mSize.y() * 0.10f); - mThumbnail.setDefaultZIndex(35); - addChild(&mThumbnail); - - // Marquee - mMarquee.setOrigin(0.5f, 0.5f); - mMarquee.setPosition(mSize.x() * 0.25f, mSize.y() * 0.10f); - mMarquee.setMaxSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.18f); - mMarquee.setDefaultZIndex(35); - addChild(&mMarquee); - // Image - mImage.setOrigin(0.5f, 0.5f); // Default to off the screen + mImage.setOrigin(0.5f, 0.5f); mImage.setPosition(2.0f, 2.0f); - mImage.setVisible(false); - mImage.setMaxSize(1.0f, 1.0f); + mImage.setMaxSize(mSize.x(), mSize.y()); mImage.setDefaultZIndex(30); + mImage.setVisible(false); addChild(&mImage); - // video + // Video mVideo->setOrigin(0.5f, 0.5f); mVideo->setPosition(mSize.x() * 0.25f, mSize.y() * 0.4f); mVideo->setSize(mSize.x() * (0.5f - 2*padding), mSize.y() * 0.4f); mVideo->setDefaultZIndex(30); addChild(mVideo); + // Thumbnail + // Default to off the screen + mThumbnail.setOrigin(0.5f, 0.5f); + mThumbnail.setPosition(2.0f, 2.0f); + mThumbnail.setMaxSize(mSize.x(), mSize.y()); + mThumbnail.setDefaultZIndex(35); + mThumbnail.setVisible(false); + addChild(&mThumbnail); + + // Marquee + // Default to off the screen + mMarquee.setOrigin(0.5f, 0.5f); + mMarquee.setPosition(2.0f, 2.0f); + mMarquee.setMaxSize(mSize.x(), mSize.y()); + mMarquee.setDefaultZIndex(35); + mImage.setVisible(false); + addChild(&mMarquee); + // metadata labels + values mLblRating.setText("Rating: "); addChild(&mLblRating); From 67cee8d9bc863fa1682435a52a78438664045607 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sun, 15 Nov 2020 21:57:17 +0100 Subject: [PATCH 449/603] Fix the textlist having one row to many --- es-app/src/components/TextListComponent.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index b0124f22b2..bd1520dbb2 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -148,7 +148,7 @@ void TextListComponent::render(const Transform4x4f& parentTrans) int startEntry = 0; //number of entries that can fit on the screen simultaniously - int screenCount = (int)(mSize.y() / entrySize + 0.5f); + int screenCount = (int)(mSize.y() / entrySize); if(size() >= screenCount) { From 398f6096cbbc985214df1f897a7c4d8328ff72e7 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sun, 15 Nov 2020 21:59:30 +0100 Subject: [PATCH 450/603] Disable video playback if video component is hidden --- es-core/src/components/VideoComponent.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index af3f4d168d..af09fbf21e 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -295,8 +295,8 @@ void VideoComponent::update(int deltaTime) void VideoComponent::manageState() { // We will only show if the component is on display and the screensaver - // is not active - bool show = mShowing && !mScreensaverActive && !mDisable; + // is not active and the component is visible + bool show = mShowing && !mScreensaverActive && !mDisable && mVisible; // See if we're already playing if (mIsPlaying) From 4f25af6644b93987a1033a0a6659209831e8f05d Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 16 Nov 2020 19:49:06 +0100 Subject: [PATCH 451/603] Code style cleanups --- es-app/src/PlatformId.h | 2 +- .../src/views/gamelist/GridGameListView.cpp | 8 +- es-core/src/math/Misc.cpp | 62 +++++++++++---- es-core/src/math/Transform4x4f.cpp | 22 ++++++ es-core/src/math/Vector2f.cpp | 4 + es-core/src/math/Vector3f.cpp | 4 + es-core/src/math/Vector4f.cpp | 4 + es-core/src/renderers/Renderer.cpp | 20 +++++ es-core/src/renderers/Renderer_GL14.cpp | 42 ++++++++++ es-core/src/renderers/Renderer_GL21.cpp | 42 ++++++++++ es-core/src/renderers/Renderer_GLES10.cpp | 42 ++++++++++ es-core/src/renderers/Renderer_GLES20.cpp | 46 +++++++++++ es-core/src/utils/FileSystemUtil.cpp | 79 +++++++++++++++++-- es-core/src/utils/FileSystemUtil.h | 4 +- es-core/src/utils/StringUtil.cpp | 35 ++++++++ es-core/src/utils/TimeUtil.cpp | 58 ++++++++++---- 16 files changed, 429 insertions(+), 45 deletions(-) diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index bc6c330d93..9eb627b4f2 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -72,7 +72,7 @@ namespace PlatformIds SOLARUS, THOMSON_MOTO, NEC_PC_8801, - NEC_PC_9801, + NEC_PC_9801, TURBOGRAFX_16, // (aka PC Engine) HuCards only TURBOGRAFX_CD, // (aka PC Engine) CD-ROMs only WONDERSWAN, diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 90ad293a20..1254cc48c2 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -88,7 +88,7 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : mDescription.setFont(Font::get(FONT_SIZE_SMALL)); mDescription.setSize(mDescContainer.getSize().x(), 0); mDescContainer.addChild(&mDescription); - + // Image // Default to off the screen mImage.setOrigin(0.5f, 0.5f); @@ -326,7 +326,7 @@ void GridGameListView::updateInfoPanel() mVideo->setImage(file->getThumbnailPath()); mMarquee.setImage(file->getMarqueePath()); mImage.setImage(file->getImagePath()); - + mDescription.setText(file->metadata.get("desc")); mDescContainer.reset(); @@ -383,7 +383,7 @@ void GridGameListView::addPlaceholder() } void GridGameListView::launch(FileData* game) -{ +{ float screenWidth = (float) Renderer::getScreenWidth(); float screenHeight = (float) Renderer::getScreenHeight(); @@ -400,7 +400,7 @@ void GridGameListView::launch(FileData* game) mImage.getPosition().y() < screenHeight && mImage.getPosition().y() > 2.0f)) { target = Vector3f(mImage.getCenter().x(), mImage.getCenter().y(), 0); - } + } else if(mVideo->getPosition().x() < screenWidth && mVideo->getPosition().x() > 0.0f && mVideo->getPosition().y() < screenHeight && mVideo->getPosition().y() > 0.0f) { diff --git a/es-core/src/math/Misc.cpp b/es-core/src/math/Misc.cpp index 384380d136..23e3d2faac 100644 --- a/es-core/src/math/Misc.cpp +++ b/es-core/src/math/Misc.cpp @@ -2,6 +2,8 @@ #include +////////////////////////////////////////////////////////////////////////// + namespace Math { // added here to avoid including math.h whenever these are used @@ -9,81 +11,107 @@ namespace Math { return ::cosf(_num); - } // Math::cos + } // cosf + +////////////////////////////////////////////////////////////////////////// float sinf(const float _num) { return ::sinf(_num); - } // Math::sin + } // sinf + +////////////////////////////////////////////////////////////////////////// float floorf(const float _num) { return ::floorf(_num); - } // Math::floor + } // floorf + +////////////////////////////////////////////////////////////////////////// float ceilf(const float _num) { return ::ceilf(_num); - } // Math::ceil + } // ceilf + +////////////////////////////////////////////////////////////////////////// int min(const int _num1, const int _num2) { return (_num1 < _num2) ? _num1 : _num2; - } // Math::min + } // min + +////////////////////////////////////////////////////////////////////////// int max(const int _num1, const int _num2) { return (_num1 > _num2) ? _num1 : _num2; - } // Math::max + } // max + +////////////////////////////////////////////////////////////////////////// float min(const float _num1, const float _num2) { return (_num1 < _num2) ? _num1 : _num2; - } // Math::min + } // min + +////////////////////////////////////////////////////////////////////////// float max(const float _num1, const float _num2) { return (_num1 > _num2) ? _num1 : _num2; - } // Math::max + } // max + +////////////////////////////////////////////////////////////////////////// float clamp(const float _min, const float _max, const float _num) { return max(min(_num, _max), _min); - } // Math::clamp + } // clamp + +////////////////////////////////////////////////////////////////////////// float round(const float _num) { return (float)(int)(_num + 0.5); - } // Math::round + } // round + +////////////////////////////////////////////////////////////////////////// float lerp(const float _start, const float _end, const float _fraction) { return (_start + ((_end - _start) * clamp(0, 1, _fraction))); - } // Math::lerp + } // lerp + +////////////////////////////////////////////////////////////////////////// float smoothStep(const float _left, const float _right, const float _x) { const float x = clamp(0, 1, (_x - _left)/(_right - _left)); return x * x * (3 - (2 * x)); - } // Math::smoothStep + } // smoothStep + +////////////////////////////////////////////////////////////////////////// float smootherStep(const float _left, const float _right, const float _x) { const float x = clamp(0, 1, (_x - _left)/(_right - _left)); return x * x * x * (x * ((x * 6) - 15) + 10); - } // Math::smootherStep + } // smootherStep + +////////////////////////////////////////////////////////////////////////// namespace Scroll { @@ -115,7 +143,9 @@ namespace Math // and back to waiting return 0; - } // Math::Scroll::bounce + } // bounce + +////////////////////////////////////////////////////////////////////////// float loop(const float _delayTime, const float _scrollTime, const float _currentTime, const float _scrollLength) { @@ -134,8 +164,8 @@ namespace Math // and back to waiting return 0; - } // Math::Scroll::loop + } // loop - } // Math::Scroll:: + } // Scroll:: } // Math:: diff --git a/es-core/src/math/Transform4x4f.cpp b/es-core/src/math/Transform4x4f.cpp index f8ed5621b1..00421a7695 100644 --- a/es-core/src/math/Transform4x4f.cpp +++ b/es-core/src/math/Transform4x4f.cpp @@ -1,5 +1,7 @@ #include "math/Transform4x4f.h" +////////////////////////////////////////////////////////////////////////// + const Transform4x4f Transform4x4f::operator*(const Transform4x4f& _other) const { const float* tm = (float*)this; @@ -35,6 +37,8 @@ const Transform4x4f Transform4x4f::operator*(const Transform4x4f& _other) const } // operator* +////////////////////////////////////////////////////////////////////////// + const Vector3f Transform4x4f::operator*(const Vector3f& _other) const { const float* tm = (float*)this; @@ -49,6 +53,8 @@ const Vector3f Transform4x4f::operator*(const Vector3f& _other) const } // operator* +////////////////////////////////////////////////////////////////////////// + Transform4x4f& Transform4x4f::orthoProjection(float _left, float _right, float _bottom, float _top, float _near, float _far) { float* tm = (float*)this; @@ -88,6 +94,8 @@ Transform4x4f& Transform4x4f::orthoProjection(float _left, float _right, float _ } // orthoProjection +////////////////////////////////////////////////////////////////////////// + Transform4x4f& Transform4x4f::invert(const Transform4x4f& _other) { float* tm = (float*)this; @@ -154,6 +162,8 @@ Transform4x4f& Transform4x4f::invert(const Transform4x4f& _other) } // invert +////////////////////////////////////////////////////////////////////////// + Transform4x4f& Transform4x4f::scale(const Vector3f& _scale) { float* tm = (float*)this; @@ -173,6 +183,8 @@ Transform4x4f& Transform4x4f::scale(const Vector3f& _scale) } // scale +////////////////////////////////////////////////////////////////////////// + Transform4x4f& Transform4x4f::rotate(const float _angle, const Vector3f& _axis) { float* tm = (float*)this; @@ -222,6 +234,8 @@ Transform4x4f& Transform4x4f::rotate(const float _angle, const Vector3f& _axis) }; // rotate +////////////////////////////////////////////////////////////////////////// + Transform4x4f& Transform4x4f::rotateX(const float _angle) { float* tm = (float*)this; @@ -245,6 +259,8 @@ Transform4x4f& Transform4x4f::rotateX(const float _angle) }; // rotateX +////////////////////////////////////////////////////////////////////////// + Transform4x4f& Transform4x4f::rotateY(const float _angle) { float* tm = (float*)this; @@ -268,6 +284,8 @@ Transform4x4f& Transform4x4f::rotateY(const float _angle) }; // rotateY +////////////////////////////////////////////////////////////////////////// + Transform4x4f& Transform4x4f::rotateZ(const float _angle) { float* tm = (float*)this; @@ -291,6 +309,8 @@ Transform4x4f& Transform4x4f::rotateZ(const float _angle) }; // rotateZ +////////////////////////////////////////////////////////////////////////// + Transform4x4f& Transform4x4f::translate(const Vector3f& _translation) { float* tm = (float*)this; @@ -304,6 +324,8 @@ Transform4x4f& Transform4x4f::translate(const Vector3f& _translation) } // translate +////////////////////////////////////////////////////////////////////////// + Transform4x4f& Transform4x4f::round() { float* tm = (float*)this; diff --git a/es-core/src/math/Vector2f.cpp b/es-core/src/math/Vector2f.cpp index f98f17194c..90493acefb 100644 --- a/es-core/src/math/Vector2f.cpp +++ b/es-core/src/math/Vector2f.cpp @@ -1,5 +1,7 @@ #include "math/Vector2f.h" +////////////////////////////////////////////////////////////////////////// + Vector2f& Vector2f::round() { mX = (float)(int)(mX + 0.5f); @@ -9,6 +11,8 @@ Vector2f& Vector2f::round() } // round +////////////////////////////////////////////////////////////////////////// + Vector2f& Vector2f::lerp(const Vector2f& _start, const Vector2f& _end, const float _fraction) { mX = Math::lerp(_start.x(), _end.x(), _fraction); diff --git a/es-core/src/math/Vector3f.cpp b/es-core/src/math/Vector3f.cpp index 15fc22e7b5..d003718240 100644 --- a/es-core/src/math/Vector3f.cpp +++ b/es-core/src/math/Vector3f.cpp @@ -1,5 +1,7 @@ #include "math/Vector3f.h" +////////////////////////////////////////////////////////////////////////// + Vector3f& Vector3f::round() { mX = (float)(int)(mX + 0.5f); @@ -10,6 +12,8 @@ Vector3f& Vector3f::round() } // round +////////////////////////////////////////////////////////////////////////// + Vector3f& Vector3f::lerp(const Vector3f& _start, const Vector3f& _end, const float _fraction) { mX = Math::lerp(_start.x(), _end.x(), _fraction); diff --git a/es-core/src/math/Vector4f.cpp b/es-core/src/math/Vector4f.cpp index 0885521722..f369007387 100644 --- a/es-core/src/math/Vector4f.cpp +++ b/es-core/src/math/Vector4f.cpp @@ -1,5 +1,7 @@ #include "math/Vector4f.h" +////////////////////////////////////////////////////////////////////////// + Vector4f& Vector4f::round() { mX = (float)(int)(mX + 0.5f); @@ -11,6 +13,8 @@ Vector4f& Vector4f::round() } // round +////////////////////////////////////////////////////////////////////////// + Vector4f& Vector4f::lerp(const Vector4f& _start, const Vector4f& _end, const float _fraction) { mX = Math::lerp(_start.x(), _end.x(), _fraction); diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index 003e4ac489..3baafefb4b 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -10,6 +10,8 @@ #include #include +////////////////////////////////////////////////////////////////////////// + namespace Renderer { static std::stack clipStack; @@ -23,6 +25,8 @@ namespace Renderer static int screenRotate = 0; static bool initialCursorState = 1; +////////////////////////////////////////////////////////////////////////// + static void setIcon() { size_t width = 0; @@ -57,6 +61,8 @@ namespace Renderer } // setIcon +////////////////////////////////////////////////////////////////////////// + static bool createWindow() { LOG(LogInfo) << "Creating window..."; @@ -99,6 +105,8 @@ namespace Renderer } // createWindow +////////////////////////////////////////////////////////////////////////// + static void destroyWindow() { destroyContext(); @@ -112,6 +120,8 @@ namespace Renderer } // destroyWindow +////////////////////////////////////////////////////////////////////////// + bool init() { if(!createWindow()) @@ -181,12 +191,16 @@ namespace Renderer } // init +////////////////////////////////////////////////////////////////////////// + void deinit() { destroyWindow(); } // deinit +////////////////////////////////////////////////////////////////////////// + void pushClipRect(const Vector2i& _pos, const Vector2i& _size) { Rect box(_pos.x(), _pos.y(), _size.x(), _size.y()); @@ -221,6 +235,8 @@ namespace Renderer } // pushClipRect +////////////////////////////////////////////////////////////////////////// + void popClipRect() { if(clipStack.empty()) @@ -236,6 +252,8 @@ namespace Renderer } // popClipRect +////////////////////////////////////////////////////////////////////////// + void drawRect(const float _x, const float _y, const float _w, const float _h, const unsigned int _color, const unsigned int _colorEnd, bool horizontalGradient, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { const unsigned int color = convertColor(_color); @@ -256,6 +274,8 @@ namespace Renderer } // drawRect +////////////////////////////////////////////////////////////////////////// + SDL_Window* getSDLWindow() { return sdlWindow; } int getWindowWidth() { return windowWidth; } int getWindowHeight() { return windowHeight; } diff --git a/es-core/src/renderers/Renderer_GL14.cpp b/es-core/src/renderers/Renderer_GL14.cpp index 39d69491f2..f629596a48 100644 --- a/es-core/src/renderers/Renderer_GL14.cpp +++ b/es-core/src/renderers/Renderer_GL14.cpp @@ -8,6 +8,8 @@ #include #include +////////////////////////////////////////////////////////////////////////// + namespace Renderer { @@ -25,9 +27,13 @@ namespace Renderer #define GL_CHECK_ERROR(Function) (Function) #endif +////////////////////////////////////////////////////////////////////////// + static SDL_GLContext sdlContext = nullptr; static GLuint whiteTexture = 0; +////////////////////////////////////////////////////////////////////////// + static GLenum convertBlendFactor(const Blend::Factor _blendFactor) { switch(_blendFactor) @@ -47,6 +53,8 @@ namespace Renderer } // convertBlendFactor +////////////////////////////////////////////////////////////////////////// + static GLenum convertTextureType(const Texture::Type _type) { switch(_type) @@ -58,6 +66,8 @@ namespace Renderer } // convertTextureType +////////////////////////////////////////////////////////////////////////// + unsigned int convertColor(const unsigned int _color) { // convert from rgba to abgr @@ -70,12 +80,16 @@ namespace Renderer } // convertColor +////////////////////////////////////////////////////////////////////////// + unsigned int getWindowFlags() { return SDL_WINDOW_OPENGL; } // getWindowFlags +////////////////////////////////////////////////////////////////////////// + void setupWindow() { SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); @@ -91,6 +105,8 @@ namespace Renderer } // setupWindow +////////////////////////////////////////////////////////////////////////// + void createContext() { sdlContext = SDL_GL_CreateContext(getSDLWindow()); @@ -121,6 +137,8 @@ namespace Renderer } // createContext +////////////////////////////////////////////////////////////////////////// + void destroyContext() { SDL_GL_DeleteContext(sdlContext); @@ -128,6 +146,8 @@ namespace Renderer } // destroyContext +////////////////////////////////////////////////////////////////////////// + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) { const GLenum type = convertTextureType(_type); @@ -148,12 +168,16 @@ namespace Renderer } // createTexture +////////////////////////////////////////////////////////////////////////// + void destroyTexture(const unsigned int _texture) { GL_CHECK_ERROR(glDeleteTextures(1, &_texture)); } // destroyTexture +////////////////////////////////////////////////////////////////////////// + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) { const GLenum type = convertTextureType(_type); @@ -164,6 +188,8 @@ namespace Renderer } // updateTexture +////////////////////////////////////////////////////////////////////////// + void bindTexture(const unsigned int _texture) { if(_texture == 0) GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); @@ -171,6 +197,8 @@ namespace Renderer } // bindTexture +////////////////////////////////////////////////////////////////////////// + void drawLines(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); @@ -183,6 +211,8 @@ namespace Renderer } // drawLines +////////////////////////////////////////////////////////////////////////// + void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); @@ -195,6 +225,8 @@ namespace Renderer } // drawTriangleStrips +////////////////////////////////////////////////////////////////////////// + void setProjection(const Transform4x4f& _projection) { GL_CHECK_ERROR(glMatrixMode(GL_PROJECTION)); @@ -202,6 +234,8 @@ namespace Renderer } // setProjection +////////////////////////////////////////////////////////////////////////// + void setMatrix(const Transform4x4f& _matrix) { Transform4x4f matrix = _matrix; @@ -212,6 +246,8 @@ namespace Renderer } // setMatrix +////////////////////////////////////////////////////////////////////////// + void setViewport(const Rect& _viewport) { // glViewport starts at the bottom left of the window @@ -219,6 +255,8 @@ namespace Renderer } // setViewport +////////////////////////////////////////////////////////////////////////// + void setScissor(const Rect& _scissor) { if((_scissor.x == 0) && (_scissor.y == 0) && (_scissor.w == 0) && (_scissor.h == 0)) @@ -234,6 +272,8 @@ namespace Renderer } // setScissor +////////////////////////////////////////////////////////////////////////// + void setSwapInterval() { // vsync @@ -253,6 +293,8 @@ namespace Renderer } // setSwapInterval +////////////////////////////////////////////////////////////////////////// + void swapBuffers() { SDL_GL_SwapWindow(getSDLWindow()); diff --git a/es-core/src/renderers/Renderer_GL21.cpp b/es-core/src/renderers/Renderer_GL21.cpp index e676eae0f9..2e53dbcade 100644 --- a/es-core/src/renderers/Renderer_GL21.cpp +++ b/es-core/src/renderers/Renderer_GL21.cpp @@ -8,6 +8,8 @@ #include #include +////////////////////////////////////////////////////////////////////////// + namespace Renderer { @@ -25,9 +27,13 @@ namespace Renderer #define GL_CHECK_ERROR(Function) (Function) #endif +////////////////////////////////////////////////////////////////////////// + static SDL_GLContext sdlContext = nullptr; static GLuint whiteTexture = 0; +////////////////////////////////////////////////////////////////////////// + static GLenum convertBlendFactor(const Blend::Factor _blendFactor) { switch(_blendFactor) @@ -47,6 +53,8 @@ namespace Renderer } // convertBlendFactor +////////////////////////////////////////////////////////////////////////// + static GLenum convertTextureType(const Texture::Type _type) { switch(_type) @@ -58,6 +66,8 @@ namespace Renderer } // convertTextureType +////////////////////////////////////////////////////////////////////////// + unsigned int convertColor(const unsigned int _color) { // convert from rgba to abgr @@ -70,12 +80,16 @@ namespace Renderer } // convertColor +////////////////////////////////////////////////////////////////////////// + unsigned int getWindowFlags() { return SDL_WINDOW_OPENGL; } // getWindowFlags +////////////////////////////////////////////////////////////////////////// + void setupWindow() { SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); @@ -91,6 +105,8 @@ namespace Renderer } // setupWindow +////////////////////////////////////////////////////////////////////////// + void createContext() { sdlContext = SDL_GL_CreateContext(getSDLWindow()); @@ -121,6 +137,8 @@ namespace Renderer } // createContext +////////////////////////////////////////////////////////////////////////// + void destroyContext() { SDL_GL_DeleteContext(sdlContext); @@ -128,6 +146,8 @@ namespace Renderer } // destroyContext +////////////////////////////////////////////////////////////////////////// + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) { const GLenum type = convertTextureType(_type); @@ -148,12 +168,16 @@ namespace Renderer } // createTexture +////////////////////////////////////////////////////////////////////////// + void destroyTexture(const unsigned int _texture) { GL_CHECK_ERROR(glDeleteTextures(1, &_texture)); } // destroyTexture +////////////////////////////////////////////////////////////////////////// + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) { const GLenum type = convertTextureType(_type); @@ -164,6 +188,8 @@ namespace Renderer } // updateTexture +////////////////////////////////////////////////////////////////////////// + void bindTexture(const unsigned int _texture) { if(_texture == 0) GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); @@ -171,6 +197,8 @@ namespace Renderer } // bindTexture +////////////////////////////////////////////////////////////////////////// + void drawLines(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); @@ -183,6 +211,8 @@ namespace Renderer } // drawLines +////////////////////////////////////////////////////////////////////////// + void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); @@ -195,6 +225,8 @@ namespace Renderer } // drawTriangleStrips +////////////////////////////////////////////////////////////////////////// + void setProjection(const Transform4x4f& _projection) { GL_CHECK_ERROR(glMatrixMode(GL_PROJECTION)); @@ -202,6 +234,8 @@ namespace Renderer } // setProjection +////////////////////////////////////////////////////////////////////////// + void setMatrix(const Transform4x4f& _matrix) { Transform4x4f matrix = _matrix; @@ -212,6 +246,8 @@ namespace Renderer } // setMatrix +////////////////////////////////////////////////////////////////////////// + void setViewport(const Rect& _viewport) { // glViewport starts at the bottom left of the window @@ -219,6 +255,8 @@ namespace Renderer } // setViewport +////////////////////////////////////////////////////////////////////////// + void setScissor(const Rect& _scissor) { if((_scissor.x == 0) && (_scissor.y == 0) && (_scissor.w == 0) && (_scissor.h == 0)) @@ -234,6 +272,8 @@ namespace Renderer } // setScissor +////////////////////////////////////////////////////////////////////////// + void setSwapInterval() { // vsync @@ -253,6 +293,8 @@ namespace Renderer } // setSwapInterval +////////////////////////////////////////////////////////////////////////// + void swapBuffers() { SDL_GL_SwapWindow(getSDLWindow()); diff --git a/es-core/src/renderers/Renderer_GLES10.cpp b/es-core/src/renderers/Renderer_GLES10.cpp index bb3121f026..13e18175af 100644 --- a/es-core/src/renderers/Renderer_GLES10.cpp +++ b/es-core/src/renderers/Renderer_GLES10.cpp @@ -8,6 +8,8 @@ #include #include +////////////////////////////////////////////////////////////////////////// + namespace Renderer { @@ -25,9 +27,13 @@ namespace Renderer #define GL_CHECK_ERROR(Function) (Function) #endif +////////////////////////////////////////////////////////////////////////// + static SDL_GLContext sdlContext = nullptr; static GLuint whiteTexture = 0; +////////////////////////////////////////////////////////////////////////// + static GLenum convertBlendFactor(const Blend::Factor _blendFactor) { switch(_blendFactor) @@ -47,6 +53,8 @@ namespace Renderer } // convertBlendFactor +////////////////////////////////////////////////////////////////////////// + static GLenum convertTextureType(const Texture::Type _type) { switch(_type) @@ -58,6 +66,8 @@ namespace Renderer } // convertTextureType +////////////////////////////////////////////////////////////////////////// + unsigned int convertColor(const unsigned int _color) { // convert from rgba to abgr @@ -70,12 +80,16 @@ namespace Renderer } // convertColor +////////////////////////////////////////////////////////////////////////// + unsigned int getWindowFlags() { return SDL_WINDOW_OPENGL; } // getWindowFlags +////////////////////////////////////////////////////////////////////////// + void setupWindow() { SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); @@ -91,6 +105,8 @@ namespace Renderer } // setupWindow +////////////////////////////////////////////////////////////////////////// + void createContext() { sdlContext = SDL_GL_CreateContext(getSDLWindow()); @@ -121,6 +137,8 @@ namespace Renderer } // createContext +////////////////////////////////////////////////////////////////////////// + void destroyContext() { SDL_GL_DeleteContext(sdlContext); @@ -128,6 +146,8 @@ namespace Renderer } // destroyContext +////////////////////////////////////////////////////////////////////////// + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) { const GLenum type = convertTextureType(_type); @@ -148,12 +168,16 @@ namespace Renderer } // createTexture +////////////////////////////////////////////////////////////////////////// + void destroyTexture(const unsigned int _texture) { GL_CHECK_ERROR(glDeleteTextures(1, &_texture)); } // destroyTexture +////////////////////////////////////////////////////////////////////////// + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) { const GLenum type = convertTextureType(_type); @@ -164,6 +188,8 @@ namespace Renderer } // updateTexture +////////////////////////////////////////////////////////////////////////// + void bindTexture(const unsigned int _texture) { if(_texture == 0) GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); @@ -171,6 +197,8 @@ namespace Renderer } // bindTexture +////////////////////////////////////////////////////////////////////////// + void drawLines(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); @@ -183,6 +211,8 @@ namespace Renderer } // drawLines +////////////////////////////////////////////////////////////////////////// + void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { GL_CHECK_ERROR(glVertexPointer( 2, GL_FLOAT, sizeof(Vertex), &_vertices[0].pos)); @@ -195,6 +225,8 @@ namespace Renderer } // drawTriangleStrips +////////////////////////////////////////////////////////////////////////// + void setProjection(const Transform4x4f& _projection) { GL_CHECK_ERROR(glMatrixMode(GL_PROJECTION)); @@ -202,6 +234,8 @@ namespace Renderer } // setProjection +////////////////////////////////////////////////////////////////////////// + void setMatrix(const Transform4x4f& _matrix) { Transform4x4f matrix = _matrix; @@ -212,6 +246,8 @@ namespace Renderer } // setMatrix +////////////////////////////////////////////////////////////////////////// + void setViewport(const Rect& _viewport) { // glViewport starts at the bottom left of the window @@ -219,6 +255,8 @@ namespace Renderer } // setViewport +////////////////////////////////////////////////////////////////////////// + void setScissor(const Rect& _scissor) { if((_scissor.x == 0) && (_scissor.y == 0) && (_scissor.w == 0) && (_scissor.h == 0)) @@ -234,6 +272,8 @@ namespace Renderer } // setScissor +////////////////////////////////////////////////////////////////////////// + void setSwapInterval() { // vsync @@ -253,6 +293,8 @@ namespace Renderer } // setSwapInterval +////////////////////////////////////////////////////////////////////////// + void swapBuffers() { SDL_GL_SwapWindow(getSDLWindow()); diff --git a/es-core/src/renderers/Renderer_GLES20.cpp b/es-core/src/renderers/Renderer_GLES20.cpp index 5f6837b05c..ee78159825 100644 --- a/es-core/src/renderers/Renderer_GLES20.cpp +++ b/es-core/src/renderers/Renderer_GLES20.cpp @@ -8,6 +8,8 @@ #include #include +////////////////////////////////////////////////////////////////////////// + namespace Renderer { @@ -25,6 +27,8 @@ namespace Renderer #define GL_CHECK_ERROR(Function) (Function) #endif +////////////////////////////////////////////////////////////////////////// + static SDL_GLContext sdlContext = nullptr; static Transform4x4f projectionMatrix = Transform4x4f::Identity(); static Transform4x4f worldViewMatrix = Transform4x4f::Identity(); @@ -36,6 +40,8 @@ namespace Renderer static GLuint vertexBuffer = 0; static GLuint whiteTexture = 0; +////////////////////////////////////////////////////////////////////////// + static void setupShaders() { // vertex shader @@ -180,6 +186,8 @@ namespace Renderer } // setupShaders +////////////////////////////////////////////////////////////////////////// + static void setupVertexBuffer() { GL_CHECK_ERROR(glGenBuffers(1, &vertexBuffer)); @@ -187,6 +195,8 @@ namespace Renderer } // setupVertexBuffer +////////////////////////////////////////////////////////////////////////// + static GLenum convertBlendFactor(const Blend::Factor _blendFactor) { switch(_blendFactor) @@ -206,6 +216,8 @@ namespace Renderer } // convertBlendFactor +////////////////////////////////////////////////////////////////////////// + static GLenum convertTextureType(const Texture::Type _type) { switch(_type) @@ -217,6 +229,8 @@ namespace Renderer } // convertTextureType +////////////////////////////////////////////////////////////////////////// + unsigned int convertColor(const unsigned int _color) { // convert from rgba to abgr @@ -229,12 +243,16 @@ namespace Renderer } // convertColor +////////////////////////////////////////////////////////////////////////// + unsigned int getWindowFlags() { return SDL_WINDOW_OPENGL; } // getWindowFlags +////////////////////////////////////////////////////////////////////////// + void setupWindow() { SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); @@ -250,6 +268,8 @@ namespace Renderer } // setupWindow +////////////////////////////////////////////////////////////////////////// + void createContext() { sdlContext = SDL_GL_CreateContext(getSDLWindow()); @@ -280,6 +300,8 @@ namespace Renderer } // createContext +////////////////////////////////////////////////////////////////////////// + void destroyContext() { SDL_GL_DeleteContext(sdlContext); @@ -287,6 +309,8 @@ namespace Renderer } // destroyContext +////////////////////////////////////////////////////////////////////////// + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) { const GLenum type = convertTextureType(_type); @@ -326,12 +350,16 @@ namespace Renderer } // createTexture +////////////////////////////////////////////////////////////////////////// + void destroyTexture(const unsigned int _texture) { GL_CHECK_ERROR(glDeleteTextures(1, &_texture)); } // destroyTexture +////////////////////////////////////////////////////////////////////////// + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) { const GLenum type = convertTextureType(_type); @@ -363,6 +391,8 @@ namespace Renderer } // updateTexture +////////////////////////////////////////////////////////////////////////// + void bindTexture(const unsigned int _texture) { if(_texture == 0) GL_CHECK_ERROR(glBindTexture(GL_TEXTURE_2D, whiteTexture)); @@ -370,6 +400,8 @@ namespace Renderer } // bindTexture +////////////////////////////////////////////////////////////////////////// + void drawLines(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { GL_CHECK_ERROR(glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const void*)offsetof(Vertex, pos))); @@ -383,6 +415,8 @@ namespace Renderer } // drawLines +////////////////////////////////////////////////////////////////////////// + void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor, const Blend::Factor _dstBlendFactor) { GL_CHECK_ERROR(glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const void*)offsetof(Vertex, pos))); @@ -396,6 +430,8 @@ namespace Renderer } // drawTriangleStrips +////////////////////////////////////////////////////////////////////////// + void setProjection(const Transform4x4f& _projection) { projectionMatrix = _projection; @@ -405,6 +441,8 @@ namespace Renderer } // setProjection +////////////////////////////////////////////////////////////////////////// + void setMatrix(const Transform4x4f& _matrix) { worldViewMatrix = _matrix; @@ -415,6 +453,8 @@ namespace Renderer } // setMatrix +////////////////////////////////////////////////////////////////////////// + void setViewport(const Rect& _viewport) { // glViewport starts at the bottom left of the window @@ -422,6 +462,8 @@ namespace Renderer } // setViewport +////////////////////////////////////////////////////////////////////////// + void setScissor(const Rect& _scissor) { if((_scissor.x == 0) && (_scissor.y == 0) && (_scissor.w == 0) && (_scissor.h == 0)) @@ -437,6 +479,8 @@ namespace Renderer } // setScissor +////////////////////////////////////////////////////////////////////////// + void setSwapInterval() { // vsync @@ -456,6 +500,8 @@ namespace Renderer } // setSwapInterval +////////////////////////////////////////////////////////////////////////// + void swapBuffers() { SDL_GL_SwapWindow(getSDLWindow()); diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index e3eec0038a..018cce933a 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -21,6 +21,8 @@ #include #endif // _WIN32 +////////////////////////////////////////////////////////////////////////// + namespace Utils { namespace FileSystem @@ -28,6 +30,8 @@ namespace Utils static std::string homePath = ""; static std::string exePath = ""; +////////////////////////////////////////////////////////////////////////// + #if defined(_WIN32) static std::string convertFromWideString(const std::wstring wstring) { @@ -42,6 +46,8 @@ namespace Utils } // convertFromWideString #endif // _WIN32 +////////////////////////////////////////////////////////////////////////// + stringList getDirContent(const std::string& _path, const bool _recursive) { std::string path = getGenericPath(_path); @@ -102,7 +108,7 @@ namespace Utils closedir(dir); } -#endif // _WIN32 +#endif // !_WIN32 } @@ -114,6 +120,8 @@ namespace Utils } // getDirContent +////////////////////////////////////////////////////////////////////////// + stringList getPathList(const std::string& _path) { stringList pathList; @@ -139,12 +147,16 @@ namespace Utils } // getPathList +////////////////////////////////////////////////////////////////////////// + void setHomePath(const std::string& _path) { homePath = getGenericPath(_path); } // setHomePath +////////////////////////////////////////////////////////////////////////// + std::string getHomePath() { // only construct the homepath once @@ -183,6 +195,8 @@ namespace Utils } // getHomePath +////////////////////////////////////////////////////////////////////////// + std::string getCWDPath() { char temp[512]; @@ -192,6 +206,8 @@ namespace Utils } // getCWDPath +////////////////////////////////////////////////////////////////////////// + void setExePath(const std::string& _path) { constexpr int path_max = 32767; @@ -199,11 +215,12 @@ namespace Utils std::wstring result(path_max, 0); if(GetModuleFileNameW(nullptr, &result[0], path_max) != 0) exePath = convertFromWideString(result); -#else +#else // _WIN32 std::string result(path_max, 0); if(readlink("/proc/self/exe", &result[0], path_max) != -1) exePath = result; -#endif +#endif // !_WIN32 + exePath = getCanonicalPath(exePath); // Fallback to argv[0] if everything else fails @@ -214,6 +231,8 @@ namespace Utils } // setExePath +////////////////////////////////////////////////////////////////////////// + std::string getExePath() { // return constructed exepath @@ -221,18 +240,24 @@ namespace Utils } // getExePath +////////////////////////////////////////////////////////////////////////// + std::string getPreferredPath(const std::string& _path) { std::string path = _path; size_t offset = std::string::npos; + #if defined(_WIN32) // convert '/' to '\\' while((offset = path.find('/')) != std::string::npos) path.replace(offset, 1, "\\"); #endif // _WIN32 + return path; } +////////////////////////////////////////////////////////////////////////// + std::string getGenericPath(const std::string& _path) { std::string path = _path; @@ -259,6 +284,8 @@ namespace Utils } // getGenericPath +////////////////////////////////////////////////////////////////////////// + std::string getEscapedPath(const std::string& _path) { std::string path = getGenericPath(_path); @@ -292,10 +319,12 @@ namespace Utils // return escaped path return path; -#endif // _WIN32 +#endif // !_WIN32 } // getEscapedPath +////////////////////////////////////////////////////////////////////////// + std::string getCanonicalPath(const std::string& _path) { // temporary hack for builtin resources @@ -336,7 +365,7 @@ namespace Utils #else // _WIN32 // append folder to path path += ("/" + (*it)); -#endif // _WIN32 +#endif // !_WIN32 // resolve symlink if(isSymlink(path)) @@ -365,6 +394,8 @@ namespace Utils } // getCanonicalPath +////////////////////////////////////////////////////////////////////////// + std::string getAbsolutePath(const std::string& _path, const std::string& _base) { std::string path = getGenericPath(_path); @@ -375,6 +406,8 @@ namespace Utils } // getAbsolutePath +////////////////////////////////////////////////////////////////////////// + std::string getParent(const std::string& _path) { std::string path = getGenericPath(_path); @@ -389,6 +422,8 @@ namespace Utils } // getParent +////////////////////////////////////////////////////////////////////////// + std::string getFileName(const std::string& _path) { std::string path = getGenericPath(_path); @@ -403,6 +438,8 @@ namespace Utils } // getFileName +////////////////////////////////////////////////////////////////////////// + std::string getStem(const std::string& _path) { std::string fileName = getFileName(_path); @@ -421,6 +458,8 @@ namespace Utils } // getStem +////////////////////////////////////////////////////////////////////////// + std::string getExtension(const std::string& _path) { std::string fileName = getFileName(_path); @@ -439,6 +478,8 @@ namespace Utils } // getExtension +////////////////////////////////////////////////////////////////////////// + std::string resolveRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome) { std::string path = getGenericPath(_path); @@ -461,6 +502,8 @@ namespace Utils } // resolveRelativePath +////////////////////////////////////////////////////////////////////////// + std::string createRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome) { bool contains = false; @@ -484,6 +527,8 @@ namespace Utils } // createRelativePath +////////////////////////////////////////////////////////////////////////// + std::string removeCommonPath(const std::string& _path, const std::string& _common, bool& _contains) { std::string path = getGenericPath(_path); @@ -502,6 +547,8 @@ namespace Utils } // removeCommonPath +////////////////////////////////////////////////////////////////////////// + std::string resolveSymlink(const std::string& _path) { std::string path = getGenericPath(_path); @@ -530,13 +577,15 @@ namespace Utils if(readlink(path.c_str(), (char*)resolved.data(), resolved.size()) > 0) resolved = getGenericPath(resolved); } -#endif // _WIN32 +#endif // !_WIN32 // return resolved path return resolved; } // resolveSymlink +////////////////////////////////////////////////////////////////////////// + bool removeFile(const std::string& _path) { std::string path = getGenericPath(_path); @@ -550,6 +599,8 @@ namespace Utils } // removeFile +////////////////////////////////////////////////////////////////////////// + bool createDirectory(const std::string& _path) { std::string path = getGenericPath(_path); @@ -574,6 +625,8 @@ namespace Utils } // createDirectory +////////////////////////////////////////////////////////////////////////// + bool exists(const std::string& _path) { std::string path = getGenericPath(_path); @@ -584,6 +637,8 @@ namespace Utils } // exists +////////////////////////////////////////////////////////////////////////// + bool isAbsolute(const std::string& _path) { std::string path = getGenericPath(_path); @@ -592,10 +647,12 @@ namespace Utils return ((path.size() > 1) && (path[1] == ':')); #else // _WIN32 return ((path.size() > 0) && (path[0] == '/')); -#endif // _WIN32 +#endif // !_WIN32 } // isAbsolute +////////////////////////////////////////////////////////////////////////// + bool isRegularFile(const std::string& _path) { std::string path = getGenericPath(_path); @@ -610,6 +667,8 @@ namespace Utils } // isRegularFile +////////////////////////////////////////////////////////////////////////// + bool isDirectory(const std::string& _path) { std::string path = getGenericPath(_path); @@ -624,6 +683,8 @@ namespace Utils } // isDirectory +////////////////////////////////////////////////////////////////////////// + bool isSymlink(const std::string& _path) { std::string path = getGenericPath(_path); @@ -642,13 +703,15 @@ namespace Utils // check for S_IFLNK attribute return (S_ISLNK(info.st_mode)); -#endif // _WIN32 +#endif // !_WIN32 // not a symlink return false; } // isSymlink +////////////////////////////////////////////////////////////////////////// + bool isHidden(const std::string& _path) { std::string path = getGenericPath(_path); diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index 0ad3116b28..20a00a26f3 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -39,9 +39,9 @@ namespace Utils bool isDirectory (const std::string& _path); bool isSymlink (const std::string& _path); bool isHidden (const std::string& _path); -#ifndef WIN32 // osx / linux +#if !defined(_WIN32) bool isExecutable (const std::string& _path); -#endif +#endif // !_WIN32 } // FileSystem:: diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index 97b4616d4b..25b3edbae8 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -3,6 +3,8 @@ #include #include +////////////////////////////////////////////////////////////////////////// + namespace Utils { namespace String @@ -48,6 +50,8 @@ namespace Utils } // chars2Unicode +////////////////////////////////////////////////////////////////////////// + std::string unicode2Chars(const unsigned int _unicode) { std::string result; @@ -84,6 +88,8 @@ namespace Utils } // unicode2Chars +////////////////////////////////////////////////////////////////////////// + size_t nextCursor(const std::string& _string, const size_t _cursor) { size_t result = _cursor; @@ -100,6 +106,8 @@ namespace Utils } // nextCursor +////////////////////////////////////////////////////////////////////////// + size_t prevCursor(const std::string& _string, const size_t _cursor) { size_t result = _cursor; @@ -116,6 +124,8 @@ namespace Utils } // prevCursor +////////////////////////////////////////////////////////////////////////// + size_t moveCursor(const std::string& _string, const size_t _cursor, const int _amount) { size_t result = _cursor; @@ -135,6 +145,8 @@ namespace Utils } // moveCursor +////////////////////////////////////////////////////////////////////////// + std::string toLower(const std::string& _string) { std::string string; @@ -146,6 +158,8 @@ namespace Utils } // toLower +////////////////////////////////////////////////////////////////////////// + std::string toUpper(const std::string& _string) { std::string string; @@ -157,6 +171,8 @@ namespace Utils } // toUpper +////////////////////////////////////////////////////////////////////////// + std::string trim(const std::string& _string) { const size_t strBegin = _string.find_first_not_of(" \t"); @@ -169,6 +185,8 @@ namespace Utils } // trim +////////////////////////////////////////////////////////////////////////// + std::string replace(const std::string& _string, const std::string& _replace, const std::string& _with) { std::string string = _string; @@ -181,18 +199,24 @@ namespace Utils } // replace +////////////////////////////////////////////////////////////////////////// + bool startsWith(const std::string& _string, const std::string& _start) { return (_string.find(_start) == 0); } // startsWith +////////////////////////////////////////////////////////////////////////// + bool endsWith(const std::string& _string, const std::string& _end) { return (_string.find(_end) == (_string.size() - _end.size())); } // endsWith +////////////////////////////////////////////////////////////////////////// + std::string removeParenthesis(const std::string& _string) { static const char remove[4] = { '(', ')', '[', ']' }; @@ -222,6 +246,8 @@ namespace Utils } // removeParenthesis +////////////////////////////////////////////////////////////////////////// + stringVector delimitedStringToVector(const std::string& _string, const std::string& _delimiter, bool sort) { stringVector vector; @@ -243,11 +269,16 @@ namespace Utils } // delimitedStringToVector +////////////////////////////////////////////////////////////////////////// + stringVector commaStringToVector(const std::string& _string, bool sort) { return delimitedStringToVector(_string, ",", sort); + } // commaStringToVector +////////////////////////////////////////////////////////////////////////// + std::string vectorToCommaString(stringVector _vector) { std::string string; @@ -261,6 +292,8 @@ namespace Utils } // vectorToCommaString +////////////////////////////////////////////////////////////////////////// + std::string format(const char* _format, ...) { va_list args; @@ -286,6 +319,8 @@ namespace Utils } // format +////////////////////////////////////////////////////////////////////////// + std::string scramble(const std::string& _input, const std::string& _key) { std::string buffer = _input; diff --git a/es-core/src/utils/TimeUtil.cpp b/es-core/src/utils/TimeUtil.cpp index 3bad4eb37a..85fe21c71e 100644 --- a/es-core/src/utils/TimeUtil.cpp +++ b/es-core/src/utils/TimeUtil.cpp @@ -2,6 +2,8 @@ #include +////////////////////////////////////////////////////////////////////////// + namespace Utils { namespace Time @@ -12,30 +14,40 @@ namespace Utils mTimeStruct = { 0, 0, 0, 1, 0, 0, 0, 0, -1 }; mIsoString = "00000000T000000"; - } // DateTime::DateTime + } // DateTime + +////////////////////////////////////////////////////////////////////////// DateTime::DateTime(const time_t& _time) { setTime(_time); - } // DateTime::DateTime + } // DateTime + +////////////////////////////////////////////////////////////////////////// DateTime::DateTime(const tm& _timeStruct) { setTimeStruct(_timeStruct); - } // DateTime::DateTime + } // DateTime + +////////////////////////////////////////////////////////////////////////// DateTime::DateTime(const std::string& _isoString) { setIsoString(_isoString); - } // DateTime::DateTime + } // DateTime + +////////////////////////////////////////////////////////////////////////// DateTime::~DateTime() { - } // DateTime::~DateTime + } // ~DateTime + +////////////////////////////////////////////////////////////////////////// void DateTime::setTime(const time_t& _time) { @@ -43,19 +55,25 @@ namespace Utils mTimeStruct = *localtime(&mTime); mIsoString = timeToString(mTime); - } // DateTime::setTime + } // setTime + +////////////////////////////////////////////////////////////////////////// void DateTime::setTimeStruct(const tm& _timeStruct) { setTime(mktime((tm*)&_timeStruct)); - } // DateTime::setTimeStruct + } // setTimeStruct + +////////////////////////////////////////////////////////////////////////// void DateTime::setIsoString(const std::string& _isoString) { setTime(stringToTime(_isoString)); - } // DateTime::setIsoString + } // setIsoString + +////////////////////////////////////////////////////////////////////////// Duration::Duration(const time_t& _time) { @@ -65,12 +83,16 @@ namespace Utils mMinutes = ((mTotalSeconds % (60*60)) - (mTotalSeconds % (60))) / 60; mSeconds = mTotalSeconds % 60; - } // Duration::Duration + } // Duration + +////////////////////////////////////////////////////////////////////////// Duration::~Duration() { - } // Duration::~Duration + } // ~Duration + +////////////////////////////////////////////////////////////////////////// time_t now() { @@ -80,6 +102,8 @@ namespace Utils } // now +////////////////////////////////////////////////////////////////////////// + time_t stringToTime(const std::string& _string, const std::string& _format) { const char* s = _string.c_str(); @@ -188,12 +212,14 @@ namespace Utils } // stringToTime +////////////////////////////////////////////////////////////////////////// + std::string timeToString(const time_t& _time, const std::string& _format) { - const char* f = _format.c_str(); - const tm timeStruct = *localtime(&_time); - char buf[256] = { '\0' }; - char* s = buf; + const char* f = _format.c_str(); + const tm timeStruct = *localtime(&_time); + char buf[256] = { '\0' }; + char* s = buf; while(*f) { @@ -262,6 +288,8 @@ namespace Utils } // timeToString +////////////////////////////////////////////////////////////////////////// + int daysInMonth(const int _year, const int _month) { tm timeStruct = { 0, 0, 0, 0, _month, _year - 1900, 0, 0, -1 }; @@ -271,6 +299,8 @@ namespace Utils } // daysInMonth +////////////////////////////////////////////////////////////////////////// + int daysInYear(const int _year) { tm timeStruct = { 0, 0, 0, 0, 0, _year - 1900 + 1, 0, 0, -1 }; From 4146170dbb28e05944f9b19de45a76bb9f8bbaf0 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 16 Nov 2020 21:46:40 +0100 Subject: [PATCH 452/603] Add Math::clamp Cleanup some code to properly use Math::round Added const to a bunch of variables Cleaned up a lot of functions in FileSystemUtil removed StringUtil::commaStringToVector and vectorToCommaString, both can be done using delimitedStringToVector and vectorToDelimitedString --- es-app/src/CollectionSystemManager.cpp | 4 +- .../src/guis/GuiCollectionSystemsOptions.cpp | 8 +- es-core/src/math/Misc.cpp | 16 +- es-core/src/math/Misc.h | 1 + es-core/src/math/Transform4x4f.cpp | 6 +- es-core/src/math/Vector2f.cpp | 4 +- es-core/src/math/Vector3f.cpp | 6 +- es-core/src/math/Vector4f.cpp | 8 +- es-core/src/renderers/Renderer.cpp | 20 +-- es-core/src/renderers/Renderer.h | 4 +- es-core/src/renderers/Renderer_GL14.cpp | 24 +-- es-core/src/renderers/Renderer_GL21.cpp | 24 +-- es-core/src/renderers/Renderer_GLES10.cpp | 24 +-- es-core/src/renderers/Renderer_GLES20.cpp | 28 ++-- es-core/src/utils/FileSystemUtil.cpp | 148 +++++++++--------- es-core/src/utils/StringUtil.cpp | 16 +- es-core/src/utils/StringUtil.h | 3 +- 17 files changed, 175 insertions(+), 169 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index aa7f75d0e6..4d9bc84930 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -144,7 +144,7 @@ void CollectionSystemManager::loadCollectionSystems() void CollectionSystemManager::loadEnabledListFromSettings() { // we parse the auto collection settings list - std::vector autoSelected = Utils::String::commaStringToVector(Settings::getInstance()->getString("CollectionSystemsAuto"), true); + std::vector autoSelected = Utils::String::delimitedStringToVector(Settings::getInstance()->getString("CollectionSystemsAuto"), ",", true); // iterate the map for(std::map::iterator it = mAutoCollectionSystemsData.begin() ; it != mAutoCollectionSystemsData.end() ; it++ ) @@ -153,7 +153,7 @@ void CollectionSystemManager::loadEnabledListFromSettings() } // we parse the custom collection settings list - std::vector customSelected = Utils::String::commaStringToVector(Settings::getInstance()->getString("CollectionSystemsCustom"), true); + std::vector customSelected = Utils::String::delimitedStringToVector(Settings::getInstance()->getString("CollectionSystemsCustom"), ",", true); // iterate the map for(std::map::iterator it = mCustomCollectionSystemsData.begin() ; it != mCustomCollectionSystemsData.end() ; it++ ) diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.cpp b/es-app/src/guis/GuiCollectionSystemsOptions.cpp index ede6f3eb6b..aaee708a30 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.cpp +++ b/es-app/src/guis/GuiCollectionSystemsOptions.cpp @@ -115,8 +115,8 @@ void GuiCollectionSystemsOptions::createCollection(std::string inName) { std::string name = CollectionSystemManager::get()->getValidNewCollectionName(inName); SystemData* newSys = CollectionSystemManager::get()->addNewCustomCollection(name); customOptionList->add(name, name, true); - std::string outAuto = Utils::String::vectorToCommaString(autoOptionList->getSelectedObjects()); - std::string outCustom = Utils::String::vectorToCommaString(customOptionList->getSelectedObjects()); + std::string outAuto = Utils::String::vectorToDelimitedString(autoOptionList->getSelectedObjects(), ","); + std::string outCustom = Utils::String::vectorToDelimitedString(customOptionList->getSelectedObjects(), ","); updateSettings(outAuto, outCustom); ViewController::get()->goToSystemView(newSys); @@ -166,9 +166,9 @@ void GuiCollectionSystemsOptions::addSystemsToMenu() void GuiCollectionSystemsOptions::applySettings() { - std::string outAuto = Utils::String::vectorToCommaString(autoOptionList->getSelectedObjects()); + std::string outAuto = Utils::String::vectorToDelimitedString(autoOptionList->getSelectedObjects(), ","); std::string prevAuto = Settings::getInstance()->getString("CollectionSystemsAuto"); - std::string outCustom = Utils::String::vectorToCommaString(customOptionList->getSelectedObjects()); + std::string outCustom = Utils::String::vectorToDelimitedString(customOptionList->getSelectedObjects(), ","); std::string prevCustom = Settings::getInstance()->getString("CollectionSystemsCustom"); bool outSort = sortAllSystemsSwitch->getState(); bool prevSort = Settings::getInstance()->getBool("SortAllSystems"); diff --git a/es-core/src/math/Misc.cpp b/es-core/src/math/Misc.cpp index 23e3d2faac..ab0d23c789 100644 --- a/es-core/src/math/Misc.cpp +++ b/es-core/src/math/Misc.cpp @@ -53,6 +53,14 @@ namespace Math } // max +////////////////////////////////////////////////////////////////////////// + + int clamp(const int _min, const int _max, const int _num) + { + return max(min(_num, _max), _min); + + } // clamp + ////////////////////////////////////////////////////////////////////////// float min(const float _num1, const float _num2) @@ -81,7 +89,7 @@ namespace Math float round(const float _num) { - return (float)(int)(_num + 0.5); + return floorf(_num + 0.5); } // round @@ -89,7 +97,7 @@ namespace Math float lerp(const float _start, const float _end, const float _fraction) { - return (_start + ((_end - _start) * clamp(0, 1, _fraction))); + return (_start + ((_end - _start) * clamp(0.0f, 1.0f, _fraction))); } // lerp @@ -97,7 +105,7 @@ namespace Math float smoothStep(const float _left, const float _right, const float _x) { - const float x = clamp(0, 1, (_x - _left)/(_right - _left)); + const float x = clamp(0.0f, 1.0f, (_x - _left)/(_right - _left)); return x * x * (3 - (2 * x)); } // smoothStep @@ -106,7 +114,7 @@ namespace Math float smootherStep(const float _left, const float _right, const float _x) { - const float x = clamp(0, 1, (_x - _left)/(_right - _left)); + const float x = clamp(0.0f, 1.0f, (_x - _left)/(_right - _left)); return x * x * x * (x * ((x * 6) - 15) + 10); } // smootherStep diff --git a/es-core/src/math/Misc.h b/es-core/src/math/Misc.h index ea07e2e7ee..c37c55cc09 100644 --- a/es-core/src/math/Misc.h +++ b/es-core/src/math/Misc.h @@ -16,6 +16,7 @@ namespace Math int min (const int _num1, const int _num2); int max (const int _num1, const int _num2); + int clamp (const int _num, const int _min, const int _max); float min (const float _num1, const float _num2); float max (const float _num1, const float _num2); float clamp (const float _num, const float _min, const float _max); diff --git a/es-core/src/math/Transform4x4f.cpp b/es-core/src/math/Transform4x4f.cpp index 00421a7695..fc0336461c 100644 --- a/es-core/src/math/Transform4x4f.cpp +++ b/es-core/src/math/Transform4x4f.cpp @@ -330,9 +330,9 @@ Transform4x4f& Transform4x4f::round() { float* tm = (float*)this; - tm[12] = (float)(int)(tm[12] + 0.5f); - tm[13] = (float)(int)(tm[13] + 0.5f); - tm[14] = (float)(int)(tm[14] + 0.5f); + tm[12] = Math::round(tm[12]); + tm[13] = Math::round(tm[13]); + tm[14] = Math::round(tm[14]); return *this; diff --git a/es-core/src/math/Vector2f.cpp b/es-core/src/math/Vector2f.cpp index 90493acefb..af097d4d3e 100644 --- a/es-core/src/math/Vector2f.cpp +++ b/es-core/src/math/Vector2f.cpp @@ -4,8 +4,8 @@ Vector2f& Vector2f::round() { - mX = (float)(int)(mX + 0.5f); - mY = (float)(int)(mY + 0.5f); + mX = Math::round(mX); + mY = Math::round(mY); return *this; diff --git a/es-core/src/math/Vector3f.cpp b/es-core/src/math/Vector3f.cpp index d003718240..a3335dab21 100644 --- a/es-core/src/math/Vector3f.cpp +++ b/es-core/src/math/Vector3f.cpp @@ -4,9 +4,9 @@ Vector3f& Vector3f::round() { - mX = (float)(int)(mX + 0.5f); - mY = (float)(int)(mY + 0.5f); - mZ = (float)(int)(mZ + 0.5f); + mX = Math::round(mX); + mY = Math::round(mY); + mZ = Math::round(mZ); return *this; diff --git a/es-core/src/math/Vector4f.cpp b/es-core/src/math/Vector4f.cpp index f369007387..ce5d51017e 100644 --- a/es-core/src/math/Vector4f.cpp +++ b/es-core/src/math/Vector4f.cpp @@ -4,10 +4,10 @@ Vector4f& Vector4f::round() { - mX = (float)(int)(mX + 0.5f); - mY = (float)(int)(mY + 0.5f); - mZ = (float)(int)(mZ + 0.5f); - mW = (float)(int)(mW + 0.5f); + mX = Math::round(mX); + mY = Math::round(mY); + mZ = Math::round(mZ); + mW = Math::round(mW); return *this; diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index 3baafefb4b..9dde53361a 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -31,7 +31,7 @@ namespace Renderer { size_t width = 0; size_t height = 0; - ResourceData resData = ResourceManager::getInstance()->getFileData(":/window_icon_256.png"); + const ResourceData resData = ResourceManager::getInstance()->getFileData(":/window_icon_256.png"); std::vector rawData = ImageIO::loadFromMemoryRGBA32(resData.ptr.get(), resData.length, width, height); if(!rawData.empty()) @@ -39,15 +39,15 @@ namespace Renderer ImageIO::flipPixelsVert(rawData.data(), width, height); #if SDL_BYTEORDER == SDL_BIG_ENDIAN - unsigned int rmask = 0xFF000000; - unsigned int gmask = 0x00FF0000; - unsigned int bmask = 0x0000FF00; - unsigned int amask = 0x000000FF; + const unsigned int rmask = 0xFF000000; + const unsigned int gmask = 0x00FF0000; + const unsigned int bmask = 0x0000FF00; + const unsigned int amask = 0x000000FF; #else - unsigned int rmask = 0x000000FF; - unsigned int gmask = 0x0000FF00; - unsigned int bmask = 0x00FF0000; - unsigned int amask = 0xFF000000; + const unsigned int rmask = 0x000000FF; + const unsigned int gmask = 0x0000FF00; + const unsigned int bmask = 0x00FF0000; + const unsigned int amask = 0xFF000000; #endif // try creating SDL surface from logo data SDL_Surface* logoSurface = SDL_CreateRGBSurfaceFrom((void*)rawData.data(), (int)width, (int)height, 32, (int)(width * 4), rmask, gmask, bmask, amask); @@ -87,7 +87,7 @@ namespace Renderer setupWindow(); - unsigned int windowFlags = (Settings::getInstance()->getBool("Windowed") ? 0 : (Settings::getInstance()->getBool("FullscreenBorderless") ? SDL_WINDOW_BORDERLESS : SDL_WINDOW_FULLSCREEN)) | getWindowFlags(); + const unsigned int windowFlags = (Settings::getInstance()->getBool("Windowed") ? 0 : (Settings::getInstance()->getBool("FullscreenBorderless") ? SDL_WINDOW_BORDERLESS : SDL_WINDOW_FULLSCREEN)) | getWindowFlags(); if((sdlWindow = SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, windowWidth, windowHeight, windowFlags)) == nullptr) { diff --git a/es-core/src/renderers/Renderer.h b/es-core/src/renderers/Renderer.h index 3b41e338d4..b3e24184c2 100644 --- a/es-core/src/renderers/Renderer.h +++ b/es-core/src/renderers/Renderer.h @@ -83,9 +83,9 @@ namespace Renderer void setupWindow (); void createContext (); void destroyContext (); - unsigned int createTexture (const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data); + unsigned int createTexture (const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, const void* _data); void destroyTexture (const unsigned int _texture); - void updateTexture (const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data); + void updateTexture (const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, const void* _data); void bindTexture (const unsigned int _texture); void drawLines (const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); void drawTriangleStrips(const Vertex* _vertices, const unsigned int _numVertices, const Blend::Factor _srcBlendFactor = Blend::SRC_ALPHA, const Blend::Factor _dstBlendFactor = Blend::ONE_MINUS_SRC_ALPHA); diff --git a/es-core/src/renderers/Renderer_GL14.cpp b/es-core/src/renderers/Renderer_GL14.cpp index f629596a48..6550b4d272 100644 --- a/es-core/src/renderers/Renderer_GL14.cpp +++ b/es-core/src/renderers/Renderer_GL14.cpp @@ -21,7 +21,7 @@ namespace Renderer const GLenum errorCode = glGetError(); if(errorCode != GL_NO_ERROR) - LOG(LogError) << "OpenGLES error: " << _funcName << " failed with error code: " << errorCode; + LOG(LogError) << "GL error: " << _funcName << " failed with error code: " << errorCode; } #else #define GL_CHECK_ERROR(Function) (Function) @@ -71,10 +71,10 @@ namespace Renderer unsigned int convertColor(const unsigned int _color) { // convert from rgba to abgr - unsigned char r = ((_color & 0xff000000) >> 24) & 255; - unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; - unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; - unsigned char a = ((_color & 0x000000ff) ) & 255; + const unsigned char r = ((_color & 0xff000000) >> 24) & 255; + const unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; + const unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; + const unsigned char a = ((_color & 0x000000ff) ) & 255; return ((a << 24) | (b << 16) | (g << 8) | (r)); @@ -112,10 +112,10 @@ namespace Renderer sdlContext = SDL_GL_CreateContext(getSDLWindow()); SDL_GL_MakeCurrent(getSDLWindow(), sdlContext); - std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; - std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; - std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; - std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; + const std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; + const std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; + const std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; + const std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; LOG(LogInfo) << "GL vendor: " << vendor; LOG(LogInfo) << "GL renderer: " << renderer; @@ -123,7 +123,7 @@ namespace Renderer LOG(LogInfo) << "Checking available OpenGL extensions..."; LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); - uint8_t data[4] = {255, 255, 255, 255}; + const uint8_t data[4] = {255, 255, 255, 255}; whiteTexture = createTexture(Texture::RGBA, false, true, 1, 1, data); GL_CHECK_ERROR(glClearColor(0.0f, 0.0f, 0.0f, 1.0f)); @@ -148,7 +148,7 @@ namespace Renderer ////////////////////////////////////////////////////////////////////////// - unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, const void* _data) { const GLenum type = convertTextureType(_type); unsigned int texture; @@ -178,7 +178,7 @@ namespace Renderer ////////////////////////////////////////////////////////////////////////// - void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, const void* _data) { const GLenum type = convertTextureType(_type); diff --git a/es-core/src/renderers/Renderer_GL21.cpp b/es-core/src/renderers/Renderer_GL21.cpp index 2e53dbcade..009501df12 100644 --- a/es-core/src/renderers/Renderer_GL21.cpp +++ b/es-core/src/renderers/Renderer_GL21.cpp @@ -21,7 +21,7 @@ namespace Renderer const GLenum errorCode = glGetError(); if(errorCode != GL_NO_ERROR) - LOG(LogError) << "OpenGLES error: " << _funcName << " failed with error code: " << errorCode; + LOG(LogError) << "GL error: " << _funcName << " failed with error code: " << errorCode; } #else #define GL_CHECK_ERROR(Function) (Function) @@ -71,10 +71,10 @@ namespace Renderer unsigned int convertColor(const unsigned int _color) { // convert from rgba to abgr - unsigned char r = ((_color & 0xff000000) >> 24) & 255; - unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; - unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; - unsigned char a = ((_color & 0x000000ff) ) & 255; + const unsigned char r = ((_color & 0xff000000) >> 24) & 255; + const unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; + const unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; + const unsigned char a = ((_color & 0x000000ff) ) & 255; return ((a << 24) | (b << 16) | (g << 8) | (r)); @@ -112,10 +112,10 @@ namespace Renderer sdlContext = SDL_GL_CreateContext(getSDLWindow()); SDL_GL_MakeCurrent(getSDLWindow(), sdlContext); - std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; - std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; - std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; - std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; + const std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; + const std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; + const std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; + const std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; LOG(LogInfo) << "GL vendor: " << vendor; LOG(LogInfo) << "GL renderer: " << renderer; @@ -123,7 +123,7 @@ namespace Renderer LOG(LogInfo) << "Checking available OpenGL extensions..."; LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); - uint8_t data[4] = {255, 255, 255, 255}; + const uint8_t data[4] = {255, 255, 255, 255}; whiteTexture = createTexture(Texture::RGBA, false, true, 1, 1, data); GL_CHECK_ERROR(glClearColor(0.0f, 0.0f, 0.0f, 1.0f)); @@ -148,7 +148,7 @@ namespace Renderer ////////////////////////////////////////////////////////////////////////// - unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, const void* _data) { const GLenum type = convertTextureType(_type); unsigned int texture; @@ -178,7 +178,7 @@ namespace Renderer ////////////////////////////////////////////////////////////////////////// - void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, const void* _data) { const GLenum type = convertTextureType(_type); diff --git a/es-core/src/renderers/Renderer_GLES10.cpp b/es-core/src/renderers/Renderer_GLES10.cpp index 13e18175af..33c6e0547e 100644 --- a/es-core/src/renderers/Renderer_GLES10.cpp +++ b/es-core/src/renderers/Renderer_GLES10.cpp @@ -21,7 +21,7 @@ namespace Renderer const GLenum errorCode = glGetError(); if(errorCode != GL_NO_ERROR) - LOG(LogError) << "OpenGLES error: " << _funcName << " failed with error code: " << errorCode; + LOG(LogError) << "GL error: " << _funcName << " failed with error code: " << errorCode; } #else #define GL_CHECK_ERROR(Function) (Function) @@ -71,10 +71,10 @@ namespace Renderer unsigned int convertColor(const unsigned int _color) { // convert from rgba to abgr - unsigned char r = ((_color & 0xff000000) >> 24) & 255; - unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; - unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; - unsigned char a = ((_color & 0x000000ff) ) & 255; + const unsigned char r = ((_color & 0xff000000) >> 24) & 255; + const unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; + const unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; + const unsigned char a = ((_color & 0x000000ff) ) & 255; return ((a << 24) | (b << 16) | (g << 8) | (r)); @@ -112,10 +112,10 @@ namespace Renderer sdlContext = SDL_GL_CreateContext(getSDLWindow()); SDL_GL_MakeCurrent(getSDLWindow(), sdlContext); - std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; - std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; - std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; - std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; + const std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; + const std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; + const std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; + const std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; LOG(LogInfo) << "GL vendor: " << vendor; LOG(LogInfo) << "GL renderer: " << renderer; @@ -123,7 +123,7 @@ namespace Renderer LOG(LogInfo) << "Checking available OpenGL extensions..."; LOG(LogInfo) << " ARB_texture_non_power_of_two: " << (extensions.find("ARB_texture_non_power_of_two") != std::string::npos ? "ok" : "MISSING"); - uint8_t data[4] = {255, 255, 255, 255}; + const uint8_t data[4] = {255, 255, 255, 255}; whiteTexture = createTexture(Texture::RGBA, false, true, 1, 1, data); GL_CHECK_ERROR(glClearColor(0.0f, 0.0f, 0.0f, 1.0f)); @@ -148,7 +148,7 @@ namespace Renderer ////////////////////////////////////////////////////////////////////////// - unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, const void* _data) { const GLenum type = convertTextureType(_type); unsigned int texture; @@ -178,7 +178,7 @@ namespace Renderer ////////////////////////////////////////////////////////////////////////// - void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, const void* _data) { const GLenum type = convertTextureType(_type); diff --git a/es-core/src/renderers/Renderer_GLES20.cpp b/es-core/src/renderers/Renderer_GLES20.cpp index ee78159825..45abb22b9e 100644 --- a/es-core/src/renderers/Renderer_GLES20.cpp +++ b/es-core/src/renderers/Renderer_GLES20.cpp @@ -21,7 +21,7 @@ namespace Renderer const GLenum errorCode = glGetError(); if(errorCode != GL_NO_ERROR) - LOG(LogError) << "OpenGLES error: " << _funcName << " failed with error code: " << errorCode; + LOG(LogError) << "GL error: " << _funcName << " failed with error code: " << errorCode; } #else #define GL_CHECK_ERROR(Function) (Function) @@ -59,7 +59,7 @@ namespace Renderer " v_col = a_col; \n" "} \n"; - GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); + const GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); GL_CHECK_ERROR(glShaderSource(vertexShader, 1, &vertexSource, nullptr)); GL_CHECK_ERROR(glCompileShader(vertexShader)); @@ -103,7 +103,7 @@ namespace Renderer " gl_FragColor = texture2D(u_tex, v_tex) * v_col; \n" "} \n"; - GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + const GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); GL_CHECK_ERROR(glShaderSource(fragmentShader, 1, &fragmentSource, nullptr)); GL_CHECK_ERROR(glCompileShader(fragmentShader)); @@ -234,10 +234,10 @@ namespace Renderer unsigned int convertColor(const unsigned int _color) { // convert from rgba to abgr - unsigned char r = ((_color & 0xff000000) >> 24) & 255; - unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; - unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; - unsigned char a = ((_color & 0x000000ff) ) & 255; + const unsigned char r = ((_color & 0xff000000) >> 24) & 255; + const unsigned char g = ((_color & 0x00ff0000) >> 16) & 255; + const unsigned char b = ((_color & 0x0000ff00) >> 8) & 255; + const unsigned char a = ((_color & 0x000000ff) ) & 255; return ((a << 24) | (b << 16) | (g << 8) | (r)); @@ -275,10 +275,10 @@ namespace Renderer sdlContext = SDL_GL_CreateContext(getSDLWindow()); SDL_GL_MakeCurrent(getSDLWindow(), sdlContext); - std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; - std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; - std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; - std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; + const std::string vendor = glGetString(GL_VENDOR) ? (const char*)glGetString(GL_VENDOR) : ""; + const std::string renderer = glGetString(GL_RENDERER) ? (const char*)glGetString(GL_RENDERER) : ""; + const std::string version = glGetString(GL_VERSION) ? (const char*)glGetString(GL_VERSION) : ""; + const std::string extensions = glGetString(GL_EXTENSIONS) ? (const char*)glGetString(GL_EXTENSIONS) : ""; LOG(LogInfo) << "GL vendor: " << vendor; LOG(LogInfo) << "GL renderer: " << renderer; @@ -289,7 +289,7 @@ namespace Renderer setupShaders(); setupVertexBuffer(); - uint8_t data[4] = {255, 255, 255, 255}; + const uint8_t data[4] = {255, 255, 255, 255}; whiteTexture = createTexture(Texture::RGBA, false, true, 1, 1, data); GL_CHECK_ERROR(glClearColor(0.0f, 0.0f, 0.0f, 1.0f)); @@ -311,7 +311,7 @@ namespace Renderer ////////////////////////////////////////////////////////////////////////// - unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, void* _data) + unsigned int createTexture(const Texture::Type _type, const bool _linear, const bool _repeat, const unsigned int _width, const unsigned int _height, const void* _data) { const GLenum type = convertTextureType(_type); unsigned int texture; @@ -360,7 +360,7 @@ namespace Renderer ////////////////////////////////////////////////////////////////////////// - void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, void* _data) + void updateTexture(const unsigned int _texture, const Texture::Type _type, const unsigned int _x, const unsigned _y, const unsigned int _width, const unsigned int _height, const void* _data) { const GLenum type = convertTextureType(_type); diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 018cce933a..f5b1a75db2 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -33,13 +33,12 @@ namespace Utils ////////////////////////////////////////////////////////////////////////// #if defined(_WIN32) - static std::string convertFromWideString(const std::wstring wstring) + static std::string convertFromWideString(const std::wstring _wstring) { - int numBytes = WideCharToMultiByte(CP_UTF8, 0, wstring.c_str(), (int)wstring.length(), nullptr, 0, nullptr, nullptr); - std::string string; + const int numBytes = WideCharToMultiByte(CP_UTF8, 0, _wstring.c_str(), (int)_wstring.length(), nullptr, 0, nullptr, nullptr); + std::string string(numBytes, 0); - string.resize(numBytes); - WideCharToMultiByte(CP_UTF8, 0, wstring.c_str(), (int)wstring.length(), (char*)string.c_str(), numBytes, nullptr, nullptr); + WideCharToMultiByte(CP_UTF8, 0, _wstring.c_str(), (int)_wstring.length(), (char*)string.c_str(), numBytes, nullptr, nullptr); return std::string(string); @@ -50,29 +49,30 @@ namespace Utils stringList getDirContent(const std::string& _path, const bool _recursive) { - std::string path = getGenericPath(_path); - stringList contentList; + const std::string path = getGenericPath(_path); + stringList contentList; // only parse the directory, if it's a directory if(isDirectory(path)) { #if defined(_WIN32) - WIN32_FIND_DATAW findData; - std::string wildcard = path + "/*"; - HANDLE hFind = FindFirstFileW(std::wstring(wildcard.begin(), wildcard.end()).c_str(), &findData); + WIN32_FIND_DATAW findData; + const std::string wildcard = path + "/*"; + const HANDLE hFind = FindFirstFileW(std::wstring(wildcard.begin(), wildcard.end()).c_str(), &findData); if(hFind != INVALID_HANDLE_VALUE) { // loop over all files in the directory do { - std::string name = convertFromWideString(findData.cFileName); + const std::string name = convertFromWideString(findData.cFileName); // ignore "." and ".." if((name != ".") && (name != "..")) { - std::string fullName(getGenericPath(path + "/" + name)); + const std::string fullName(getGenericPath(path + "/" + name)); + contentList.push_back(fullName); if(_recursive && isDirectory(fullName)) @@ -93,7 +93,7 @@ namespace Utils // loop over all files in the directory while((entry = readdir(dir)) != NULL) { - std::string name(entry->d_name); + const std::string name(entry->d_name); // ignore "." and ".." if((name != ".") && (name != "..")) @@ -124,10 +124,10 @@ namespace Utils stringList getPathList(const std::string& _path) { - stringList pathList; - std::string path = getGenericPath(_path); - size_t start = 0; - size_t end = 0; + const std::string path = getGenericPath(_path); + stringList pathList; + size_t start = 0; + size_t end = 0; // split at '/' while((end = path.find("/", start)) != std::string::npos) @@ -170,7 +170,7 @@ namespace Utils // check for HOME environment variable if(!homePath.length()) { - char* envHome = getenv("HOME"); + const char* envHome = getenv("HOME"); if(envHome) homePath = getGenericPath(envHome); } @@ -179,8 +179,8 @@ namespace Utils // on Windows we need to check HOMEDRIVE and HOMEPATH if(!homePath.length()) { - char* envHomeDrive = getenv("HOMEDRIVE"); - char* envHomePath = getenv("HOMEPATH"); + const char* envHomeDrive = getenv("HOMEDRIVE"); + const char* envHomePath = getenv("HOMEPATH"); if(envHomeDrive && envHomePath) homePath = getGenericPath(std::string(envHomeDrive) + "/" + envHomePath); } @@ -210,7 +210,8 @@ namespace Utils void setExePath(const std::string& _path) { - constexpr int path_max = 32767; + const size_t path_max = 32767; + #if defined(_WIN32) std::wstring result(path_max, 0); if(GetModuleFileNameW(nullptr, &result[0], path_max) != 0) @@ -224,7 +225,7 @@ namespace Utils exePath = getCanonicalPath(exePath); // Fallback to argv[0] if everything else fails - if (exePath.empty()) + if(exePath.empty()) exePath = getCanonicalPath(_path); if(isRegularFile(exePath)) exePath = getParent(exePath); @@ -337,7 +338,7 @@ namespace Utils bool scan = true; while(scan) { - stringList pathList = getPathList(path); + const stringList pathList = getPathList(path); path.clear(); scan = false; @@ -370,7 +371,7 @@ namespace Utils // resolve symlink if(isSymlink(path)) { - std::string resolved = resolveSymlink(path); + const std::string resolved = resolveSymlink(path); if(resolved.empty()) return ""; @@ -398,8 +399,8 @@ namespace Utils std::string getAbsolutePath(const std::string& _path, const std::string& _base) { - std::string path = getGenericPath(_path); - std::string base = isAbsolute(_base) ? getGenericPath(_base) : getAbsolutePath(_base); + const std::string path = getGenericPath(_path); + const std::string base = isAbsolute(_base) ? getGenericPath(_base) : getAbsolutePath(_base); // return absolute path return isAbsolute(path) ? path : getGenericPath(base + "/" + path); @@ -426,8 +427,8 @@ namespace Utils std::string getFileName(const std::string& _path) { - std::string path = getGenericPath(_path); - size_t offset = std::string::npos; + const std::string path = getGenericPath(_path); + size_t offset = std::string::npos; // find last '/' and return the filename if((offset = path.find_last_of('/')) != std::string::npos) @@ -462,8 +463,8 @@ namespace Utils std::string getExtension(const std::string& _path) { - std::string fileName = getFileName(_path); - size_t offset = std::string::npos; + const std::string fileName = getFileName(_path); + size_t offset = std::string::npos; // empty fileName if(fileName == ".") @@ -482,8 +483,8 @@ namespace Utils std::string resolveRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome) { - std::string path = getGenericPath(_path); - std::string relativeTo = isDirectory(_relativeTo) ? getGenericPath(_relativeTo) : getParent(_relativeTo); + const std::string path = getGenericPath(_path); + const std::string relativeTo = isDirectory(_relativeTo) ? getGenericPath(_relativeTo) : getParent(_relativeTo); // nothing to resolve if(!path.length()) @@ -531,8 +532,8 @@ namespace Utils std::string removeCommonPath(const std::string& _path, const std::string& _common, bool& _contains) { - std::string path = getGenericPath(_path); - std::string common = isDirectory(_common) ? getGenericPath(_common) : getParent(_common); + const std::string path = getGenericPath(_path); + const std::string common = isDirectory(_common) ? getGenericPath(_common) : getParent(_common); // check if path contains common if(path.find(common) == 0) @@ -551,11 +552,11 @@ namespace Utils std::string resolveSymlink(const std::string& _path) { - std::string path = getGenericPath(_path); - std::string resolved; + const std::string path = getGenericPath(_path); + std::string resolved; #if defined(_WIN32) - HANDLE hFile = CreateFile(path.c_str(), FILE_READ_ATTRIBUTES, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); + const HANDLE hFile = CreateFile(path.c_str(), FILE_READ_ATTRIBUTES, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); if(hFile != INVALID_HANDLE_VALUE) { @@ -568,10 +569,10 @@ namespace Utils CloseHandle(hFile); } #else // _WIN32 - struct stat info; + struct stat64 info; - // check if lstat succeeded - if(lstat(path.c_str(), &info) == 0) + // check if lstat64 succeeded + if(lstat64(path.c_str(), &info) == 0) { resolved.resize(info.st_size); if(readlink(path.c_str(), (char*)resolved.data(), resolved.size()) > 0) @@ -588,7 +589,7 @@ namespace Utils bool removeFile(const std::string& _path) { - std::string path = getGenericPath(_path); + const std::string path = getGenericPath(_path); // don't remove if it doesn't exists if(!exists(path)) @@ -603,7 +604,7 @@ namespace Utils bool createDirectory(const std::string& _path) { - std::string path = getGenericPath(_path); + const std::string path = getGenericPath(_path); // don't create if it already exists if(exists(path)) @@ -614,7 +615,7 @@ namespace Utils return true; // failed to create directory, try to create the parent - std::string parent = getParent(path); + const std::string parent = getParent(path); // only try to create parent if it's not identical to path if(parent != path) @@ -629,8 +630,8 @@ namespace Utils bool exists(const std::string& _path) { - std::string path = getGenericPath(_path); - struct stat64 info; + const std::string path = getGenericPath(_path); + struct stat64 info; // check if stat64 succeeded return (stat64(path.c_str(), &info) == 0); @@ -641,7 +642,7 @@ namespace Utils bool isAbsolute(const std::string& _path) { - std::string path = getGenericPath(_path); + const std::string path = getGenericPath(_path); #if defined(_WIN32) return ((path.size() > 1) && (path[1] == ':')); @@ -655,8 +656,8 @@ namespace Utils bool isRegularFile(const std::string& _path) { - std::string path = getGenericPath(_path); - struct stat64 info; + const std::string path = getGenericPath(_path); + struct stat64 info; // check if stat64 succeeded if(stat64(path.c_str(), &info) != 0) @@ -671,11 +672,11 @@ namespace Utils bool isDirectory(const std::string& _path) { - std::string path = getGenericPath(_path); - struct stat info; + const std::string path = getGenericPath(_path); + struct stat64 info; - // check if stat succeeded - if(stat(path.c_str(), &info) != 0) + // check if stat64 succeeded + if(stat64(path.c_str(), &info) != 0) return false; // check for S_IFDIR attribute @@ -687,7 +688,7 @@ namespace Utils bool isSymlink(const std::string& _path) { - std::string path = getGenericPath(_path); + const std::string path = getGenericPath(_path); #if defined(_WIN32) // check for symlink attribute @@ -695,10 +696,10 @@ namespace Utils if((Attributes != INVALID_FILE_ATTRIBUTES) && (Attributes & FILE_ATTRIBUTE_REPARSE_POINT)) return true; #else // _WIN32 - struct stat info; + struct stat64 info; - // check if lstat succeeded - if(lstat(path.c_str(), &info) != 0) + // check if lstat64 succeeded + if(lstat64(path.c_str(), &info) != 0) return false; // check for S_IFLNK attribute @@ -714,7 +715,7 @@ namespace Utils bool isHidden(const std::string& _path) { - std::string path = getGenericPath(_path); + const std::string path = getGenericPath(_path); #if defined(_WIN32) // check for hidden attribute @@ -731,20 +732,27 @@ namespace Utils return false; } // isHidden -#ifndef WIN32 // osx / linux - bool isExecutable(const std::string& _path) { - struct stat64 st; - if(stat64(_path.c_str(), &st) == 0){ - mode_t perm = st.st_mode; - // regular files and executables but not setuid, setgid, shared text (mode 0755) - mode_t mask = S_IFREG | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; - if(perm & mask == perm){ - return true; - } - } - return false; + +////////////////////////////////////////////////////////////////////////// + +#if !defined(_WIN32) + bool isExecutable(const std::string& _path) + { + const std::string path = getGenericPath(_path); + + // regular files and executables but not setuid, setgid, shared text (mode 0755) + const mode_t mask = S_IFREG | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; + struct stat64 info; + + // check if stat64 succeeded + if(stat64(path.c_str(), &info) != 0) + return false; + + // check for mask attributes only + return ((info.st_mode & mask) == info.st_mode); + } // isExecutable -#endif +#endif // !_WIN32 } // FileSystem:: diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index 25b3edbae8..80f8c0f642 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -271,26 +271,18 @@ namespace Utils ////////////////////////////////////////////////////////////////////////// - stringVector commaStringToVector(const std::string& _string, bool sort) - { - return delimitedStringToVector(_string, ",", sort); - - } // commaStringToVector - -////////////////////////////////////////////////////////////////////////// - - std::string vectorToCommaString(stringVector _vector) + std::string vectorToDelimitedString(stringVector _vector, const std::string& _delimiter) { std::string string; std::sort(_vector.begin(), _vector.end()); for(stringVector::const_iterator it = _vector.cbegin(); it != _vector.cend(); ++it) - string += (string.length() ? "," : "") + (*it); + string += (string.length() ? _delimiter : "") + (*it); return string; - } // vectorToCommaString + } // vectorToDelimitedString ////////////////////////////////////////////////////////////////////////// @@ -326,9 +318,7 @@ namespace Utils std::string buffer = _input; for(size_t i = 0; i < _input.size(); ++i) - { buffer[i] = _input[i] ^ _key[i]; - } return buffer; diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h index 7639d9cab8..f9600abc6c 100644 --- a/es-core/src/utils/StringUtil.h +++ b/es-core/src/utils/StringUtil.h @@ -24,8 +24,7 @@ namespace Utils bool endsWith (const std::string& _string, const std::string& _end); std::string removeParenthesis (const std::string& _string); stringVector delimitedStringToVector(const std::string& _string, const std::string& _delimiter, bool sort = false); - stringVector commaStringToVector (const std::string& _string, bool sort = false); - std::string vectorToCommaString (stringVector _vector); + std::string vectorToDelimitedString(stringVector _vector, const std::string& _delimiter); std::string format (const char* _string, ...); std::string scramble (const std::string& _input, const std::string& key); From 668015eb19b3c9129ee17aa4ead3bd97f7760abc Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 16 Nov 2020 23:20:14 +0100 Subject: [PATCH 453/603] This will break grid themes... padding and mBackgroundCornerSize was set in pixels rather than percentages, this is fixed now --- es-core/src/components/GridTileComponent.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp index ec7e329eac..c66215de0e 100644 --- a/es-core/src/components/GridTileComponent.cpp +++ b/es-core/src/components/GridTileComponent.cpp @@ -68,7 +68,7 @@ void applyThemeToProperties(const ThemeData::ThemeElement* elem, GridTilePropert properties->mSize = elem->get("size") * screen; if (elem->has("padding")) - properties->mPadding = elem->get("padding"); + properties->mPadding = elem->get("padding") * screen; if (elem->has("imageColor")) properties->mImageColor = elem->get("imageColor"); @@ -77,7 +77,7 @@ void applyThemeToProperties(const ThemeData::ThemeElement* elem, GridTilePropert properties->mBackgroundImage = elem->get("backgroundImage"); if (elem->has("backgroundCornerSize")) - properties->mBackgroundCornerSize = elem->get("backgroundCornerSize"); + properties->mBackgroundCornerSize = elem->get("backgroundCornerSize") * screen; if (elem->has("backgroundColor")) { From ba269cdf482e9bd7aadbcae578187b72ac946773 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Tue, 17 Nov 2020 15:35:07 +0000 Subject: [PATCH 454/603] Fix rendering when Max VRAM is set to 0 According to 6872f472 if MaxVRAM/--max-vram is 0, then texture memory should be considered unlimited (command line help states - Max VRAM to use in Mb before swapping. 0 for unlimited) --- es-core/src/resources/TextureDataManager.cpp | 26 +++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/es-core/src/resources/TextureDataManager.cpp b/es-core/src/resources/TextureDataManager.cpp index ddc297a777..8eccdbdd3d 100644 --- a/es-core/src/resources/TextureDataManager.cpp +++ b/es-core/src/resources/TextureDataManager.cpp @@ -107,20 +107,24 @@ void TextureDataManager::load(std::shared_ptr tex, bool block) if (tex->isLoaded()) return; // Not loaded. Make sure there is room - size_t size = TextureResource::getTotalMemUsage(); size_t max_texture = (size_t)Settings::getInstance()->getInt("MaxVRAM") * 1024 * 1024; - for (auto it = mTextures.crbegin(); it != mTextures.crend(); ++it) + // if max_texture is 0, then texture memory should be considered unlimited + if (max_texture > 0) { - if (size < max_texture) - break; - //size -= (*it)->getVRAMUsage(); - (*it)->releaseVRAM(); - (*it)->releaseRAM(); - // It may be already in the loader queue. In this case it wouldn't have been using - // any VRAM yet but it will be. Remove it from the loader queue - mLoader->remove(*it); - size = TextureResource::getTotalMemUsage(); + size_t size = TextureResource::getTotalMemUsage(); + for (auto it = mTextures.crbegin(); it != mTextures.crend(); ++it) + { + if (size < max_texture) + break; + //size -= (*it)->getVRAMUsage(); + (*it)->releaseVRAM(); + (*it)->releaseRAM(); + // It may be already in the loader queue. In this case it wouldn't have been using + // any VRAM yet but it will be. Remove it from the loader queue + mLoader->remove(*it); + size = TextureResource::getTotalMemUsage(); + } } if (!block) mLoader->load(tex); From 818e07c9762ca06417679cfd79b7e5558ae502b7 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Sun, 22 Nov 2020 05:04:51 +0000 Subject: [PATCH 455/603] gridview: ignore placeholders on metadata updates --- es-app/src/views/gamelist/GridGameListView.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 1254cc48c2..1d970a4831 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -133,7 +133,7 @@ FileData* GridGameListView::getCursor() void GridGameListView::setCursor(FileData* file) { - if(!mGrid.setCursor(file)) + if(!mGrid.setCursor(file) && (!file->isPlaceHolder())) { populateList(file->getParent()->getChildrenListToDisplay()); mGrid.setCursor(file); From de70673ef4fd6cb92f052453de329af398139df7 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 23 Nov 2020 21:54:43 +0100 Subject: [PATCH 456/603] Fix warning about ninepatch missing a texture. --- es-core/src/components/GridTileComponent.cpp | 2 +- es-core/src/resources/TextureResource.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp index c66215de0e..4e836f59db 100644 --- a/es-core/src/components/GridTileComponent.cpp +++ b/es-core/src/components/GridTileComponent.cpp @@ -4,7 +4,7 @@ #include "resources/TextureResource.h" #include "ThemeData.h" -GridTileComponent::GridTileComponent(Window* window) : GuiComponent(window), mBackground(window) +GridTileComponent::GridTileComponent(Window* window) : GuiComponent(window), mBackground(window, ":/frame.png") { mDefaultProperties.mSize = getDefaultTileSize(); mDefaultProperties.mPadding = Vector2f(16.0f, 16.0f); diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index 0a7abac79b..975e6f70d4 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -7,7 +7,7 @@ TextureDataManager TextureResource::sTextureDataManager; std::map< TextureResource::TextureKeyType, std::weak_ptr > TextureResource::sTextureMap; std::set TextureResource::sAllTextures; -TextureResource::TextureResource(const std::string& path, bool tile, bool dynamic) : mTextureData(nullptr), mForceLoad(false) +TextureResource::TextureResource(const std::string& path, bool tile, bool dynamic) : mTextureData(nullptr), mSize(0.0f, 0.0f), mSourceSize(0.0f, 0.0f), mForceLoad(false) { // Create a texture data object for this texture if (!path.empty()) From 83eb1f2a6aa44b0bf299f506bbb6ad7a80a58951 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Tue, 17 Nov 2020 14:27:10 +0100 Subject: [PATCH 457/603] Adds a root tag to themes --- es-core/src/ThemeData.cpp | 128 +++++++++++++++++++++++++++----------- es-core/src/ThemeData.h | 4 ++ 2 files changed, 97 insertions(+), 35 deletions(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 7abfd8847e..8fb32f116a 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -15,9 +15,9 @@ std::vector ThemeData::sSupportedFeatures { { "video" }, { "carouse std::map> ThemeData::sElementMap { { "image", { - { "pos", NORMALIZED_PAIR }, - { "size", NORMALIZED_PAIR }, - { "maxSize", NORMALIZED_PAIR }, + { "pos", RESOLUTION_PAIR }, + { "size", RESOLUTION_PAIR }, + { "maxSize", RESOLUTION_PAIR }, { "origin", NORMALIZED_PAIR }, { "rotation", FLOAT }, { "rotationOrigin", NORMALIZED_PAIR }, @@ -30,10 +30,10 @@ std::map> The { "visible", BOOLEAN }, { "zIndex", FLOAT } } }, { "imagegrid", { - { "pos", NORMALIZED_PAIR }, - { "size", NORMALIZED_PAIR }, - { "margin", NORMALIZED_PAIR }, - { "padding", NORMALIZED_RECT }, + { "pos", RESOLUTION_PAIR }, + { "size", RESOLUTION_PAIR }, + { "margin", RESOLUTION_PAIR }, + { "padding", RESOLUTION_RECT }, { "autoLayout", NORMALIZED_PAIR }, { "autoLayoutSelectedZoom", FLOAT }, { "gameImage", PATH }, @@ -45,24 +45,24 @@ std::map> The { "animate", BOOLEAN }, { "zIndex", FLOAT } } }, { "gridtile", { - { "size", NORMALIZED_PAIR }, - { "padding", NORMALIZED_PAIR }, + { "size", RESOLUTION_PAIR }, + { "padding", RESOLUTION_PAIR }, { "imageColor", COLOR }, { "backgroundImage", PATH }, - { "backgroundCornerSize", NORMALIZED_PAIR }, + { "backgroundCornerSize", RESOLUTION_PAIR }, { "backgroundColor", COLOR }, { "backgroundCenterColor", COLOR }, { "backgroundEdgeColor", COLOR } } }, { "text", { - { "pos", NORMALIZED_PAIR }, - { "size", NORMALIZED_PAIR }, + { "pos", RESOLUTION_PAIR }, + { "size", RESOLUTION_PAIR }, { "origin", NORMALIZED_PAIR }, { "rotation", FLOAT }, { "rotationOrigin", NORMALIZED_PAIR }, { "text", STRING }, { "backgroundColor", COLOR }, { "fontPath", PATH }, - { "fontSize", FLOAT }, + { "fontSize", RESOLUTION_FLOAT }, { "color", COLOR }, { "alignment", STRING }, { "forceUppercase", BOOLEAN }, @@ -71,11 +71,11 @@ std::map> The { "visible", BOOLEAN }, { "zIndex", FLOAT } } }, { "textlist", { - { "pos", NORMALIZED_PAIR }, - { "size", NORMALIZED_PAIR }, + { "pos", RESOLUTION_PAIR }, + { "size", RESOLUTION_PAIR }, { "origin", NORMALIZED_PAIR }, - { "selectorHeight", FLOAT }, - { "selectorOffsetY", FLOAT }, + { "selectorHeight", RESOLUTION_FLOAT }, + { "selectorOffsetY", RESOLUTION_FLOAT }, { "selectorColor", COLOR }, { "selectorColorEnd", COLOR }, { "selectorGradientType", STRING }, @@ -85,34 +85,34 @@ std::map> The { "primaryColor", COLOR }, { "secondaryColor", COLOR }, { "fontPath", PATH }, - { "fontSize", FLOAT }, + { "fontSize", RESOLUTION_FLOAT }, { "scrollSound", PATH }, { "alignment", STRING }, - { "horizontalMargin", FLOAT }, + { "horizontalMargin", RESOLUTION_FLOAT }, { "forceUppercase", BOOLEAN }, { "lineSpacing", FLOAT }, { "zIndex", FLOAT } } }, { "container", { - { "pos", NORMALIZED_PAIR }, - { "size", NORMALIZED_PAIR }, + { "pos", RESOLUTION_PAIR }, + { "size", RESOLUTION_PAIR }, { "origin", NORMALIZED_PAIR }, { "visible", BOOLEAN }, { "zIndex", FLOAT } } }, { "ninepatch", { - { "pos", NORMALIZED_PAIR }, - { "size", NORMALIZED_PAIR }, + { "pos", RESOLUTION_PAIR }, + { "size", RESOLUTION_PAIR }, { "path", PATH }, { "visible", BOOLEAN }, { "zIndex", FLOAT } } }, { "datetime", { - { "pos", NORMALIZED_PAIR }, - { "size", NORMALIZED_PAIR }, + { "pos", RESOLUTION_PAIR }, + { "size", RESOLUTION_PAIR }, { "origin", NORMALIZED_PAIR }, { "rotation", FLOAT }, { "rotationOrigin", NORMALIZED_PAIR }, { "backgroundColor", COLOR }, { "fontPath", PATH }, - { "fontSize", FLOAT }, + { "fontSize", RESOLUTION_FLOAT }, { "color", COLOR }, { "alignment", STRING }, { "forceUppercase", BOOLEAN }, @@ -123,8 +123,8 @@ std::map> The { "visible", BOOLEAN }, { "zIndex", FLOAT } } }, { "rating", { - { "pos", NORMALIZED_PAIR }, - { "size", NORMALIZED_PAIR }, + { "pos", RESOLUTION_PAIR }, + { "size", RESOLUTION_PAIR }, { "origin", NORMALIZED_PAIR }, { "rotation", FLOAT }, { "rotationOrigin", NORMALIZED_PAIR }, @@ -136,16 +136,16 @@ std::map> The { "sound", { { "path", PATH } } }, { "helpsystem", { - { "pos", NORMALIZED_PAIR }, + { "pos", RESOLUTION_PAIR }, { "origin", NORMALIZED_PAIR }, { "textColor", COLOR }, { "iconColor", COLOR }, { "fontPath", PATH }, - { "fontSize", FLOAT } } }, + { "fontSize", RESOLUTION_FLOAT } } }, { "video", { - { "pos", NORMALIZED_PAIR }, - { "size", NORMALIZED_PAIR }, - { "maxSize", NORMALIZED_PAIR }, + { "pos", RESOLUTION_PAIR }, + { "size", RESOLUTION_PAIR }, + { "maxSize", RESOLUTION_PAIR }, { "origin", NORMALIZED_PAIR }, { "rotation", FLOAT }, { "rotationOrigin", NORMALIZED_PAIR }, @@ -157,8 +157,8 @@ std::map> The { "showSnapshotDelay", BOOLEAN } } }, { "carousel", { { "type", STRING }, - { "size", NORMALIZED_PAIR }, - { "pos", NORMALIZED_PAIR }, + { "size", RESOLUTION_PAIR }, + { "pos", RESOLUTION_PAIR }, { "origin", NORMALIZED_PAIR }, { "color", COLOR }, { "colorEnd", COLOR }, @@ -222,6 +222,7 @@ std::string resolvePlaceholders(const char* in) ThemeData::ThemeData() { mVersion = 0; + mResolution = { 1, 1 }; } void ThemeData::loadFile(std::map sysDataMap, const std::string& path) @@ -235,6 +236,7 @@ void ThemeData::loadFile(std::map sysDataMap, const st throw error << "File does not exist!"; mVersion = 0; + mResolution = { 1, 1 }; mViews.clear(); mVariables.clear(); @@ -257,6 +259,23 @@ void ThemeData::loadFile(std::map sysDataMap, const st if(mVersion < MINIMUM_THEME_FORMAT_VERSION) throw error << "Theme uses format version " << mVersion << ". Minimum supported version is " << MINIMUM_THEME_FORMAT_VERSION << "."; + // parse resolution + std::string resolution = root.child("resolution").text().as_string(""); + + if(resolution.size()) + { + size_t divider = resolution.find(' '); + + if(divider != std::string::npos) + { + std::string w = resolution.substr(0, divider); + std::string h = resolution.substr(divider, std::string::npos); + + mResolution.x() = (float)atof(w.c_str()); + mResolution.y() = (float)atof(h.c_str()); + } + } + parseVariables(root); parseIncludes(root); parseViews(root); @@ -419,6 +438,45 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::mapsecond) { + case RESOLUTION_RECT: + { + Vector4f val; + + auto splits = Utils::String::delimitedStringToVector(str, " "); + if (splits.size() == 2) + { + val = Vector4f((float)atof(splits.at(0).c_str()), (float)atof(splits.at(1).c_str()), + (float)atof(splits.at(0).c_str()), (float)atof(splits.at(1).c_str())); + } + else if (splits.size() == 4) + { + val = Vector4f((float)atof(splits.at(0).c_str()), (float)atof(splits.at(1).c_str()), + (float)atof(splits.at(2).c_str()), (float)atof(splits.at(3).c_str())); + } + + element.properties[node.name()] = val / Vector4f(mResolution.x(), mResolution.y(), mResolution.x(), mResolution.y()); + break; + } + case RESOLUTION_PAIR: + { + size_t divider = str.find(' '); + if(divider == std::string::npos) + throw error << "invalid normalized pair (property \"" << node.name() << "\", value \"" << str.c_str() << "\")"; + + std::string first = str.substr(0, divider); + std::string second = str.substr(divider, std::string::npos); + + Vector2f val((float)atof(first.c_str()), (float)atof(second.c_str())); + + element.properties[node.name()] = val / mResolution; + break; + } + case RESOLUTION_FLOAT: + { + float val = static_cast(strtod(str.c_str(), 0)); + element.properties[node.name()] = val / mResolution.y(); + break; + } case NORMALIZED_RECT: { Vector4f val; diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 5bb2b98081..6a833fdb06 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -144,6 +144,9 @@ class ThemeData enum ElementPropertyType { + RESOLUTION_RECT, + RESOLUTION_PAIR, + RESOLUTION_FLOAT, NORMALIZED_RECT, NORMALIZED_PAIR, PATH, @@ -172,6 +175,7 @@ class ThemeData std::deque mPaths; float mVersion; + Vector2f mResolution; void parseFeatures(const pugi::xml_node& themeRoot); void parseIncludes(const pugi::xml_node& themeRoot); From 38cd70a055f0ccb2b16c8830cfb6b04068462fcb Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 16 Nov 2020 23:58:13 +0100 Subject: [PATCH 458/603] Fix broken grid themes --- es-core/src/components/GridTileComponent.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/es-core/src/components/GridTileComponent.cpp b/es-core/src/components/GridTileComponent.cpp index 4e836f59db..50c51d2d82 100644 --- a/es-core/src/components/GridTileComponent.cpp +++ b/es-core/src/components/GridTileComponent.cpp @@ -68,8 +68,14 @@ void applyThemeToProperties(const ThemeData::ThemeElement* elem, GridTilePropert properties->mSize = elem->get("size") * screen; if (elem->has("padding")) + { properties->mPadding = elem->get("padding") * screen; + // hack to fix broken themes now that this uses percentage rather than pixels + if(properties->mPadding.x() > screen.x()) + properties->mPadding /= screen; + } + if (elem->has("imageColor")) properties->mImageColor = elem->get("imageColor"); @@ -77,8 +83,14 @@ void applyThemeToProperties(const ThemeData::ThemeElement* elem, GridTilePropert properties->mBackgroundImage = elem->get("backgroundImage"); if (elem->has("backgroundCornerSize")) + { properties->mBackgroundCornerSize = elem->get("backgroundCornerSize") * screen; + // hack to fix broken themes now that this uses percentage rather than pixels + if(properties->mBackgroundCornerSize.x() > screen.x()) + properties->mBackgroundCornerSize /= screen; + } + if (elem->has("backgroundColor")) { properties->mBackgroundCenterColor = elem->get("backgroundColor"); From f0848dd29244cee1df8b6899a09cf0e4ca55daf6 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 26 Nov 2020 11:49:00 +0100 Subject: [PATCH 459/603] Update THEMES.md --- THEMES.md | 122 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 84 insertions(+), 38 deletions(-) diff --git a/THEMES.md b/THEMES.md index 5ea7149c53..638f0a5213 100644 --- a/THEMES.md +++ b/THEMES.md @@ -117,6 +117,51 @@ Advanced Features It is recommended that if you are writing a theme you launch EmulationStation with the `--debug` and `--windowed` switches. This way you can read error messages without having to check the log file. You can also reload the current gamelist view and system view with `Ctrl-R` if `--debug` is specified. +### The `` tag + +You can specifiy the resolution the theme was made for using this. This defaults to 1 1. +When parsing any elements of type RESOLUTION_RECT, RESOLUTION_PAIR or RESOLUTION_FLOAT, they will have their values divided by the resolution specified so they become percentages. +The following 2 examples produce the same result + +```xml + + 6 + + + 00FF00 + + + 0.5 0.5 + 0.5 0.5 + 0.8 0.8 + ./my_art/my_awesome_image.jpg + + + +``` + +```xml + + 6 + 1920 1080 + + + 00FF00 + + + 960 540 + 0.5 0.5 + 1536 864 + ./my_art/my_awesome_image.jpg + + + +``` + +The difference is how we specify the position and size of the image element. +This does not limit a theme to be used at a certain resolution, but merely helps the theme makers build their themes using pixel values rather than percentages. +Parenting of elements can not be used when using a resolution other than 1 1. + ### The `` tag You can include theme files within theme files, similar to `#include` in C (though the internal mechanism is different, the effect is the same). Example: @@ -538,14 +583,15 @@ Reference ## Types of properties: -* NORMALIZED_PAIR - two decimals, in the range [0..1], delimited by a space. For example, `0.25 0.5`. Most commonly used for position (x and y coordinates) and size (width and height). -* NORMALIZED_RECT - four decimals, in the range [0..1], delimited by a space. For example, `0.25 0.5 0.10 0.30`. Most commonly used for padding to store top, left, bottom and right coordinates. +* RESOLUTION_RECT - four decimals, using pixels in the range [0..resolution], delimited by a space. For example, `320 640 80 160`. Most commonly used for padding to store top, left, bottom and right coordinates. +* RESOLUTION_PAIR - two decimals, using pixels in the range [0..resolution], delimited by a space. For example, `320 640`. Most commonly used for position (x and y coordinates) and size (width and height). +* RESOLUTION_FLOAT - a decimal, using pixels in the range [0..resolution]. Most commonly used for font size. +* NORMALIZED_PAIR - two decimals, using percentage in the range [0..1], delimited by a space. For example, `0.25 0.5`. Most commonly used for origin (x and y coordinates). * PATH - a path. If the first character is a `~`, it will be expanded into the environment variable for the home path (`$HOME` for Linux or `%HOMEPATH%` for Windows). If the first character is a `.`, it will be expanded to the theme file's directory, allowing you to specify resources relative to the theme file, like so: `./../general_art/myfont.ttf`. -* BOOLEAN - `true`/`1` or `false`/`0`. +* STRING - a string of text. * COLOR - a hexidecimal RGB or RGBA color (6 or 8 digits). If 6 digits, will assume the alpha channel is `FF` (not transparent). * FLOAT - a decimal. -* STRING - a string of text. - +* BOOLEAN - `true`/`1` or `false`/`0`. ## Types of elements and their properties: @@ -559,10 +605,10 @@ Remember, you do *not* need to specify every property! Can be created as an extra. -* `pos` - type: NORMALIZED_PAIR. -* `size` - type: NORMALIZED_PAIR. +* `pos` - type: RESOLUTION_PAIR. +* `size` - type: RESOLUTION_PAIR. - If only one axis is specified (and the other is zero), the other will be automatically calculated in accordance with the image's aspect ratio. -* `maxSize` - type: NORMALIZED_PAIR. +* `maxSize` - type: RESOLUTION_PAIR. - The image will be resized as large as possible so that it fits within this size and maintains its aspect ratio. Use this instead of `size` when you don't know what kind of image you're using so it doesn't get grossly oversized on one axis (e.g. with a game's image metadata). * `origin` - type: NORMALIZED_PAIR. - Where on the image `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the image exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. @@ -585,11 +631,11 @@ Can be created as an extra. #### imagegrid -* `pos` - type: NORMALIZED_PAIR. -* `size` - type: NORMALIZED_PAIR. +* `pos` - type: RESOLUTION_PAIR. +* `size` - type: RESOLUTION_PAIR. - The size of the grid. Take care the selected tile can go out of the grid size, so don't position the grid too close to another element or the screen border. -* `margin` - type: NORMALIZED_PAIR. Margin between tiles. -* `padding` - type: NORMALIZED_RECT. +* `margin` - type: RESOLUTION_PAIR. Margin between tiles. +* `padding` - type: RESOLUTION_RECT. - NEW : Padding for displaying tiles. * `autoLayout` - type: NORMALIZED_PAIR. - NEW : Number of column and rows in the grid (integer values). @@ -614,15 +660,15 @@ Can be created as an extra. #### gridtile -* `size` - type: NORMALIZED_PAIR. +* `size` - type: RESOLUTION_PAIR. - The size of the default gridtile is used to calculate how many tiles can fit in the imagegrid. If not explicitly set, the size of the selected gridtile is equal the size of the default gridtile * 1.2 -* `padding` - type: NORMALIZED_PAIR. +* `padding` - type: RESOLUTION_PAIR. - The padding around the gridtile content. Default `16 16`. If not explicitly set, the selected tile padding will be equal to the default tile padding. * `imageColor` - type: COLOR. - The default tile image color and selected tile image color have no influence on each others. * `backgroundImage` - type: PATH. - If not explicitly set, the selected tile background image will be the same as the default tile background image. -* `backgroundCornerSize` - type: NORMALIZED_PAIR. +* `backgroundCornerSize` - type: RESOLUTION_PAIR. - The corner size of the ninepatch used for the tile background. Default is `16 16`. * `backgroundColor` - type: COLOR. - A shortcut to define both the center color and edge color at the same time. The default tile background color and selected tile background color have no influence on each others. @@ -633,10 +679,10 @@ Can be created as an extra. #### video -* `pos` - type: NORMALIZED_PAIR. -* `size` - type: NORMALIZED_PAIR. +* `pos` - type: RESOLUTION_PAIR. +* `size` - type: RESOLUTION_PAIR. - If only one axis is specified (and the other is zero), the other will be automatically calculated in accordance with the video's aspect ratio. -* `maxSize` - type: NORMALIZED_PAIR. +* `maxSize` - type: RESOLUTION_PAIR. - The video will be resized as large as possible so that it fits within this size and maintains its aspect ratio. Use this instead of `size` when you don't know what kind of video you're using so it doesn't get grossly oversized on one axis (e.g. with a game's video metadata). * `origin` - type: NORMALIZED_PAIR. - Where on the image `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the image exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. @@ -661,8 +707,8 @@ Can be created as an extra. Can be created as an extra. -* `pos` - type: NORMALIZED_PAIR. -* `size` - type: NORMALIZED_PAIR. +* `pos` - type: RESOLUTION_PAIR. +* `size` - type: RESOLUTION_PAIR. - Possible combinations: - `0 0` - automatically size so text fits on one line (expanding horizontally). - `w 0` - automatically wrap text so it doesn't go beyond `w` (expanding vertically). @@ -678,7 +724,7 @@ Can be created as an extra. * `backgroundColor` - type: COLOR; * `fontPath` - type: PATH. - Path to a truetype font (.ttf). -* `fontSize` - type: FLOAT. +* `fontSize` - type: RESOLUTION_FLOAT. - Size of the font as a percentage of screen height (e.g. for a value of `0.1`, the text's height would be 10% of the screen height). * `alignment` - type: STRING. - Valid values are "left", "center", or "right". Controls alignment on the X axis. "center" will also align vertically. @@ -691,8 +737,8 @@ Can be created as an extra. #### textlist -* `pos` - type: NORMALIZED_PAIR. -* `size` - type: NORMALIZED_PAIR. +* `pos` - type: RESOLUTION_PAIR. +* `size` - type: RESOLUTION_PAIR. * `origin` - type: NORMALIZED_PAIR. - Where on the component `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the component exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. * `selectorColor` - type: COLOR. @@ -701,9 +747,9 @@ Can be created as an extra. - Path to image to render in place of "selector bar." * `selectorImageTile` - type: BOOLEAN. - If true, the selector image will be tiled instead of stretched to fit its size. -* `selectorHeight` - type: FLOAT. +* `selectorHeight` - type: RESOLUTION_FLOAT. - Height of the "selector bar". -* `selectorOffsetY` - type: FLOAT. +* `selectorOffsetY` - type: RESOLUTION_FLOAT. - Allows moving of the "selector bar" up or down from its computed position. Useful for fine tuning the position of the "selector bar" relative to the text. * `selectedColor` - type: COLOR. - Color of the highlighted entry text. @@ -712,12 +758,12 @@ Can be created as an extra. * `secondaryColor` - type: COLOR. - Secondary color; what this means depends on the text list. For example, for game lists, it is the color of a folder. * `fontPath` - type: PATH. -* `fontSize` - type: FLOAT. +* `fontSize` - type: RESOLUTION_FLOAT. * `scrollSound` - type: PATH. - Sound that is played when the list is scrolled. * `alignment` - type: STRING. - Valid values are "left", "center", or "right". Controls alignment on the X axis. -* `horizontalMargin` - type: FLOAT. +* `horizontalMargin` - type: RESOLUTION_FLOAT. - Horizontal offset for text from the alignment point. If `alignment` is "left", offsets the text to the right. If `alignment` is "right", offsets text to the left. No effect if `alignment` is "center". Given as a percentage of the element's parent's width (same unit as `size`'s X value). * `forceUppercase` - type: BOOLEAN. Draw text in uppercase. * `lineSpacing` - type: FLOAT. Controls the space between lines (as a multiple of font height). Default is 1.5. @@ -726,8 +772,8 @@ Can be created as an extra. #### ninepatch -* `pos` - type: NORMALIZED_PAIR. -* `size` - type: NORMALIZED_PAIR. +* `pos` - type: RESOLUTION_PAIR. +* `size` - type: RESOLUTION_PAIR. * `path` - type: PATH. * `visible` - type: BOOLEAN. - If true, component will be rendered, otherwise rendering will be skipped. Can be used to hide elements from a particular view. @@ -738,8 +784,8 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice #### rating -* `pos` - type: NORMALIZED_PAIR. -* `size` - type: NORMALIZED_PAIR. +* `pos` - type: RESOLUTION_PAIR. +* `size` - type: RESOLUTION_PAIR. - Only one value is actually used. The other value should be zero. (e.g. specify width OR height, but not both. This is done to maintain the aspect ratio.) * `origin` - type: NORMALIZED_PAIR. - Where on the component `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the component exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. @@ -759,8 +805,8 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice - z-index value for component. Components will be rendered in order of z-index value from low to high. #### datetime -* `pos` - type: NORMALIZED_PAIR. -* `size` - type: NORMALIZED_PAIR. +* `pos` - type: RESOLUTION_PAIR. +* `size` - type: RESOLUTION_PAIR. - Possible combinations: - `0 0` - automatically size so text fits on one line (expanding horizontally). - `w 0` - automatically wrap text so it doesn't go beyond `w` (expanding vertically). @@ -775,7 +821,7 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice * `backgroundColor` - type: COLOR; * `fontPath` - type: PATH. - Path to a truetype font (.ttf). -* `fontSize` - type: FLOAT. +* `fontSize` - type: RESOLUTION_FLOAT. - Size of the font as a percentage of screen height (e.g. for a value of `0.1`, the text's height would be 10% of the screen height). * `alignment` - type: STRING. - Valid values are "left", "center", or "right". Controls alignment on the X axis. "center" will also align vertically. @@ -801,13 +847,13 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice #### helpsystem -* `pos` - type: NORMALIZED_PAIR. Default is "0.012 0.9515" +* `pos` - type: RESOLUTION_PAIR. Default is "0.012 0.9515" * `origin` - type: NORMALIZED_PAIR. - Where on the component `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the component exactly in the middle of the screen. * `textColor` - type: COLOR. Default is 777777FF. * `iconColor` - type: COLOR. Default is 777777FF. * `fontPath` - type: PATH. -* `fontSize` - type: FLOAT. +* `fontSize` - type: RESOLUTION_FLOAT. #### carousel @@ -815,8 +861,8 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice - Sets the scoll direction of the carousel. - Accepted values are "horizontal", "vertical", "horizontal_wheel" or "vertical_wheel". - Default is "horizontal". -* `size` - type: NORMALIZED_PAIR. Default is "1 0.2325" -* `pos` - type: NORMALIZED_PAIR. Default is "0 0.38375". +* `size` - type: RESOLUTION_PAIR. Default is "1 0.2325" +* `pos` - type: RESOLUTION_PAIR. Default is "0 0.38375". * `origin` - type: NORMALIZED_PAIR. - Where on the carousel `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the carousel exactly in the middle of the screen. If the "POSITION" and "SIZE" attributes are themable, "ORIGIN" is implied. * `color` - type: COLOR. From 3890e19f1990e9b0864d03fbf91635227ff8e027 Mon Sep 17 00:00:00 2001 From: opa Date: Thu, 3 Dec 2020 01:14:01 +0900 Subject: [PATCH 460/603] Fix insignificant message typo in VolumeControl.cpp. --- es-app/src/VolumeControl.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index 9153523ed8..80d18dfdc0 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -173,7 +173,7 @@ void VolumeControl::init() mixerLineControls.cbmxctrl = sizeof(MIXERCONTROL); if (mixerGetLineControls((HMIXEROBJ)mixerHandle, &mixerLineControls, MIXER_GETLINECONTROLSF_ONEBYTYPE) != MMSYSERR_NOERROR) { - LOG(LogError) << "VolumeControl::getVolume() - Failed to get mixer volume control!"; + LOG(LogError) << "VolumeControl::init() - Failed to get mixer volume control!"; mixerClose(mixerHandle); mixerHandle = nullptr; } @@ -364,12 +364,12 @@ void VolumeControl::setVolume(int volume) if (snd_mixer_selem_set_playback_volume(mixerElem, SND_MIXER_SCHN_FRONT_LEFT, rawVolume) < 0 || snd_mixer_selem_set_playback_volume(mixerElem, SND_MIXER_SCHN_FRONT_RIGHT, rawVolume) < 0) { - LOG(LogError) << "VolumeControl::getVolume() - Failed to set mixer volume!"; + LOG(LogError) << "VolumeControl::setVolume() - Failed to set mixer volume!"; } } else { - LOG(LogError) << "VolumeControl::getVolume() - Failed to get volume range!"; + LOG(LogError) << "VolumeControl::setVolume() - Failed to get volume range!"; } } #elif defined(WIN32) || defined(_WIN32) From 7fa22a65c3af403ceef2037d8f142f1a9d193fcf Mon Sep 17 00:00:00 2001 From: Neil Rickards Date: Sun, 13 Dec 2020 14:16:40 +0000 Subject: [PATCH 461/603] Update main.cpp Add to help screen the extra parameters from https://github.com/RetroPie/EmulationStation/pull/324 and https://github.com/RetroPie/EmulationStation/pull/348. Also replace tabs with spaces for more consistent display, normalize capitalization of first letters, and MB is the correct abbreviation for MegaBytes. --- es-app/src/main.cpp | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index dd6538b8fa..84ad3db5c0 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -170,22 +170,25 @@ bool parseArgs(int argc, char* argv[]) "Written by Alec \"Aloshi\" Lofquist.\n" "Version " << PROGRAM_VERSION_STRING << ", built " << PROGRAM_BUILT_STRING << "\n\n" "Command line arguments:\n" - "--resolution [width] [height] try and force a particular resolution\n" - "--gamelist-only skip automatic game search, only read from gamelist.xml\n" - "--ignore-gamelist ignore the gamelist (useful for troubleshooting)\n" - "--draw-framerate display the framerate\n" - "--no-exit don't show the exit option in the menu\n" - "--no-splash don't show the splash screen\n" - "--debug more logging, show console on Windows\n" - "--scrape scrape using command line interface\n" - "--windowed not fullscreen, should be used with --resolution\n" - "--vsync [1/on or 0/off] turn vsync on or off (default is on)\n" - "--max-vram [size] Max VRAM to use in Mb before swapping. 0 for unlimited\n" - "--force-kid Force the UI mode to be Kid\n" - "--force-kiosk Force the UI mode to be Kiosk\n" - "--force-disable-filters Force the UI to ignore applied filters in gamelist\n" - "--home [path] Directory to use as home path\n" - "--help, -h summon a sentient, angry tuba\n\n" + "--resolution [width] [height] try and force a particular resolution\n" + "--screensize [width] [height] if larger than the resolution\n" + "--screenrotate [n] rotate a quarter turn clockwise for each n\n" + "--screenoffset [x] [y] move display by x,y pixels\n" + "--gamelist-only skip automatic game search, only read from gamelist.xml\n" + "--ignore-gamelist ignore the gamelist (useful for troubleshooting)\n" + "--draw-framerate display the framerate\n" + "--no-exit don't show the exit option in the menu\n" + "--no-splash don't show the splash screen\n" + "--debug more logging, show console on Windows\n" + "--scrape scrape using command line interface\n" + "--windowed not fullscreen, should be used with --resolution\n" + "--vsync [1/on or 0/off] turn vsync on or off (default is on)\n" + "--max-vram [size] max VRAM to use in MB before swapping. 0 for unlimited\n" + "--force-kid force the UI mode to be Kid\n" + "--force-kiosk force the UI mode to be Kiosk\n" + "--force-disable-filters force the UI to ignore applied filters in gamelist\n" + "--home [path] directory to use as home path\n" + "--help, -h summon a sentient, angry tuba\n\n" "More information available in README.md.\n"; return false; //exit after printing help } From 5a73108c0f723b19411fac8f49fad26c308d690f Mon Sep 17 00:00:00 2001 From: Neil Rickards Date: Sun, 13 Dec 2020 20:46:36 +0000 Subject: [PATCH 462/603] Update main.cpp Fix description for screensize --- es-app/src/main.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 84ad3db5c0..2977e0771a 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -171,9 +171,10 @@ bool parseArgs(int argc, char* argv[]) "Version " << PROGRAM_VERSION_STRING << ", built " << PROGRAM_BUILT_STRING << "\n\n" "Command line arguments:\n" "--resolution [width] [height] try and force a particular resolution\n" - "--screensize [width] [height] if larger than the resolution\n" "--screenrotate [n] rotate a quarter turn clockwise for each n\n" - "--screenoffset [x] [y] move display by x,y pixels\n" + "--screensize [width] [height] for a canvas smaller than the full resolution,\n" + " or if rotating into portrait mode\n" + "--screenoffset [x] [y] move the canvas by x,y pixels\n" "--gamelist-only skip automatic game search, only read from gamelist.xml\n" "--ignore-gamelist ignore the gamelist (useful for troubleshooting)\n" "--draw-framerate display the framerate\n" From 06d2052a7adb315dc90aa1388a6d3e008aaaf3b0 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Fri, 22 Jan 2021 04:02:30 +0000 Subject: [PATCH 463/603] cmake: use the non-glvnd version of GL libraries Changed the CMP0072[1] `cmake` policy to use `libGL` for OPENGL_LIBRARIES, instead of `libOpenGL`, provided by `libglvnd` (default from `cmake` 3.11). This should fix situations where there the OpenGL implementation doesn't have `glvnd` support and `emulationstation` gets linked to the `glvnd` library.`libSDL2` dl-loads a different `libGL` and this results in a non-working GL context. [1] https://cmake.org/cmake/help/git-stage/policy/CMP0072.html --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 235fdc2e25..934f8520f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,8 +10,9 @@ option(USE_MESA_GLES "Set to ON to select the MESA OpenGL ES driver" ${USE_MESA_ option(USE_GLES1 "Set to ON to force usage of the OpenGLES v1 renderer" ${USE_GLES1}) # OpenGL library preference (https://cmake.org/cmake/help/git-stage/policy/CMP0072.html) +# Set it to OLD to appease older proprietary drivers without libglvnd support if(POLICY CMP0072) - cmake_policy(SET CMP0072 NEW) + cmake_policy(SET CMP0072 OLD) endif() project(emulationstation-all) From f07eff5fd010f3fc8d570b76f7784f5336c98dc5 Mon Sep 17 00:00:00 2001 From: Gemba Date: Tue, 16 Feb 2021 07:04:57 +0100 Subject: [PATCH 464/603] Less strict file permission checking (Linux): mode at least one exec bit (ugo), no sticky bit. Indicative log message if execution fails probably due to insufficient file permissions. Refers to: https://retropie.org.uk/forum/topic/29651/emulation-station-game-start-script-not-executable --- es-core/src/Scripting.cpp | 14 ++++++++++++-- es-core/src/utils/FileSystemUtil.cpp | 9 +++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/es-core/src/Scripting.cpp b/es-core/src/Scripting.cpp index 63cd3cc848..0d2ef90454 100644 --- a/es-core/src/Scripting.cpp +++ b/es-core/src/Scripting.cpp @@ -2,6 +2,10 @@ #include "Log.h" #include "platform.h" #include "utils/FileSystemUtil.h" +#ifndef WIN32 +#include +#include +#endif namespace Scripting { @@ -28,7 +32,7 @@ namespace Scripting for (std::list::const_iterator it = scripts.cbegin(); it != scripts.cend(); ++it) { #ifndef WIN32 // osx / linux if (!Utils::FileSystem::isExecutable(*it)) { - LOG(LogWarning) << *it << " is not executable. Did you 'chmod u+x'?. Skipping this script."; + LOG(LogWarning) << *it << " is not executable. Review file permissions."; continue; } #endif @@ -42,7 +46,13 @@ namespace Scripting LOG(LogDebug) << "executing: " << script; ret = runSystemCommand(script); if (ret != 0) { - LOG(LogWarning) << script << " failed with rc != 0. Skipping further processing of scripts."; + LOG(LogWarning) << script << " failed with exit code != 0. Terminating processing for this event."; +#ifndef WIN32 + if (ENOENT == errno) { + LOG(LogWarning) << "Exit code: " << errno << " (" << strerror(errno) << ")"; + LOG(LogWarning) << "It is not executable by the current user (usually 'pi'). Review file permissions."; + } +#endif return ret; } } diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index f5b1a75db2..54038df24d 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -740,16 +740,17 @@ namespace Utils { const std::string path = getGenericPath(_path); - // regular files and executables but not setuid, setgid, shared text (mode 0755) - const mode_t mask = S_IFREG | S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; + // regular files and executables, but not setuid, setgid, shared text + const mode_t mask = S_IFREG; + const mode_t mask_exec = S_IXUSR | S_IXGRP | S_IXOTH; struct stat64 info; // check if stat64 succeeded if(stat64(path.c_str(), &info) != 0) return false; - // check for mask attributes only - return ((info.st_mode & mask) == info.st_mode); + // check for mask attributes + return (info.st_mode & mask) == mask && (info.st_mode & mask_exec) != 0; } // isExecutable #endif // !_WIN32 From 8a6f782c7973bab1281f0b9aea23291f7aa3f66f Mon Sep 17 00:00:00 2001 From: pjft Date: Thu, 1 Oct 2020 20:18:30 +0100 Subject: [PATCH 465/603] Improve file-system accesses Added a cache for stat checks --- .../src/views/gamelist/VideoGameListView.cpp | 3 +-- es-core/src/components/VideoComponent.cpp | 2 +- es-core/src/utils/FileSystemUtil.cpp | 22 ++++++++++++++----- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index a693fe831c..7380cbc391 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -31,6 +31,7 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : // Create the correct type of video window #ifdef _RPI_ + Utils::FileSystem::removeFile(getTitlePath()); if (Settings::getInstance()->getBool("VideoOmxPlayer")) mVideo = new VideoPlayerComponent(window, ""); else @@ -247,8 +248,6 @@ void VideoGameListView::updateInfoPanel() { FileData* file = (mList.size() == 0 || mList.isScrolling()) ? NULL : mList.getSelected(); - Utils::FileSystem::removeFile(getTitlePath()); - bool fadingOut; if(file == NULL) { diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index af09fbf21e..d0c1e5f1dd 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -105,7 +105,7 @@ void VideoComponent::onSizeChanged() bool VideoComponent::setVideo(std::string path) { // Convert the path into a generic format - std::string fullPath = Utils::FileSystem::getCanonicalPath(path); + std::string fullPath = Utils::FileSystem::getAbsolutePath(path); // Check that it's changed if (fullPath == mVideoPath) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index f5b1a75db2..d1df665929 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -4,6 +4,7 @@ #include #include +#include #if defined(_WIN32) // because windows... @@ -29,6 +30,7 @@ namespace Utils { static std::string homePath = ""; static std::string exePath = ""; + static std::map mPathExistsIndex = std::map(); ////////////////////////////////////////////////////////////////////////// @@ -595,8 +597,14 @@ namespace Utils if(!exists(path)) return true; + bool removed = (unlink(path.c_str()) == 0); + + // if removed, let's remove it from the index + if (removed) + mPathExistsIndex[_path] = false; + // try to remove file - return (unlink(path.c_str()) == 0); + return removed; } // removeFile @@ -630,11 +638,15 @@ namespace Utils bool exists(const std::string& _path) { - const std::string path = getGenericPath(_path); - struct stat64 info; + if (mPathExistsIndex.find(_path) == mPathExistsIndex.cend()) + { + const std::string path = getGenericPath(_path); + struct stat64 info; + // check if stat64 succeeded + mPathExistsIndex[_path] = (stat64(path.c_str(), &info) == 0); + } - // check if stat64 succeeded - return (stat64(path.c_str(), &info) == 0); + return mPathExistsIndex.at(_path); } // exists From 3f1a109fefa78d6b428eae273dc00a592e1a01d0 Mon Sep 17 00:00:00 2001 From: pjft Date: Sat, 3 Oct 2020 19:34:41 +0100 Subject: [PATCH 466/603] Adding background indexing during screensaver --- es-app/src/CollectionSystemManager.h | 3 +- es-app/src/SystemScreenSaver.cpp | 41 ++++++++++++++++++++++++++++ es-app/src/SystemScreenSaver.h | 6 ++++ es-app/src/guis/GuiMenu.cpp | 6 ++++ es-core/src/Settings.cpp | 1 + 5 files changed, 56 insertions(+), 1 deletion(-) diff --git a/es-app/src/CollectionSystemManager.h b/es-app/src/CollectionSystemManager.h index 23afe19320..82aec230f5 100644 --- a/es-app/src/CollectionSystemManager.h +++ b/es-app/src/CollectionSystemManager.h @@ -76,6 +76,8 @@ class CollectionSystemManager SystemData* getSystemToView(SystemData* sys); void updateCollectionFolderMetadata(SystemData* sys); + SystemData* getAllGamesCollection(); + private: static CollectionSystemManager* sInstance; SystemEnvironmentData* mCollectionEnvData; @@ -89,7 +91,6 @@ class CollectionSystemManager void initAutoCollectionSystems(); void initCustomCollectionSystems(); - SystemData* getAllGamesCollection(); SystemData* createNewCollectionEntry(std::string name, CollectionSystemDecl sysDecl, bool index = true); void populateAutoCollection(CollectionSystemData* sysData); void populateCustomCollection(CollectionSystemData* sysData); diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index cffe103a17..4236f5ca08 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -4,6 +4,7 @@ #include "components/VideoPlayerComponent.h" #endif #include "components/VideoVlcComponent.h" +#include "CollectionSystemManager.h" #include "utils/FileSystemUtil.h" #include "views/gamelist/IGameListView.h" #include "views/ViewController.h" @@ -15,8 +16,11 @@ #include "SystemData.h" #include #include +#include #define FADE_TIME 300 +static int lastIndex = 0; + SystemScreenSaver::SystemScreenSaver(Window* window) : mVideoScreensaver(NULL), mImageScreensaver(NULL), @@ -63,6 +67,13 @@ bool SystemScreenSaver::isScreenSaverActive() void SystemScreenSaver::startScreenSaver() { + // if set to index files in background, start thread + if (Settings::getInstance()->getBool("BackgroundIndexing")) + { + mExit = false; + mThread = new std::thread(&SystemScreenSaver::backgroundIndexing, this); + } + std::string screensaver_behavior = Settings::getInstance()->getString("ScreenSaverBehavior"); if (!mVideoScreensaver && (screensaver_behavior == "random video")) { @@ -197,6 +208,14 @@ void SystemScreenSaver::stopScreenSaver() delete mImageScreensaver; mImageScreensaver = NULL; + // Exit the indexing thread + if (Settings::getInstance()->getBool("BackgroundIndexing")) + { + mExit = true; + mThread->join(); + delete mThread; + } + // we need this to loop through different videos mState = STATE_INACTIVE; PowerSaver::runningScreenSaver(false); @@ -253,6 +272,28 @@ void SystemScreenSaver::renderScreenSaver() } } +void SystemScreenSaver::backgroundIndexing() +{ + LOG(LogDebug) << "Background indexing starting."; + + // get the list of all games + SystemData* all = CollectionSystemManager::get()->getAllGamesCollection(); + std::vector files = all->getRootFolder()->getFilesRecursive(GAME); + + const auto startTs = std::chrono::system_clock::now(); + for (lastIndex; lastIndex < files.size(); lastIndex++) + { + if(mExit) + break; + Utils::FileSystem::exists(files.at(lastIndex)->getVideoPath()); + Utils::FileSystem::exists(files.at(lastIndex)->getMarqueePath()); + Utils::FileSystem::exists(files.at(lastIndex)->getThumbnailPath()); + Utils::FileSystem::exists(files.at(lastIndex)->getImagePath()); + } + auto endTs = std::chrono::system_clock::now(); + LOG(LogDebug) << "Indexed a total of " << lastIndex << " entries in " << std::chrono::duration_cast(endTs - startTs).count() << " ms. Stopping."; +} + unsigned long SystemScreenSaver::countGameListNodes(const char *nodeName) { unsigned long nodeCount = 0; diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index 4e42405086..000c995d32 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -3,6 +3,7 @@ #define ES_APP_SYSTEM_SCREEN_SAVER_H #include "Window.h" +#include class ImageComponent; class Sound; @@ -36,6 +37,8 @@ class SystemScreenSaver : public Window::ScreenSaver void pickRandomGameListImage(std::string& path); void pickRandomCustomImage(std::string& path); + void backgroundIndexing(); + void input(InputConfig* config, Input input); enum STATE { @@ -62,6 +65,9 @@ class SystemScreenSaver : public Window::ScreenSaver int mSwapTimeout; std::shared_ptr mBackgroundAudio; bool mStopBackgroundAudio; + + std::thread* mThread; + bool mExit; }; #endif // ES_APP_SYSTEM_SCREEN_SAVER_H diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index cd60ff09f4..319906e137 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -453,6 +453,12 @@ void GuiMenu::openOtherSettings() #endif + // hidden files + auto background_indexing = std::make_shared(mWindow); + background_indexing->setState(Settings::getInstance()->getBool("BackgroundIndexing")); + s->addWithLabel("INDEX FILES DURING SCREENSAVER", background_indexing); + s->addSaveFunc([background_indexing] { Settings::getInstance()->setBool("BackgroundIndexing", background_indexing->getState()); }); + // framerate auto framerate = std::make_shared(mWindow); framerate->setState(Settings::getInstance()->getBool("DrawFramerate")); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index cc7f8de976..2d353f78ad 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -140,6 +140,7 @@ void Settings::setDefaults() mBoolMap["CollectionShowSystemInfo"] = true; mBoolMap["SortAllSystems"] = false; mBoolMap["UseCustomCollectionsSystem"] = true; + mBoolMap["BackgroundIndexing"] = false; mBoolMap["LocalArt"] = false; From cfa50d0c89f6d4ad3d8d74bd28bb63a3b2f8b5fe Mon Sep 17 00:00:00 2001 From: PhilaPhan80 <53459459+PhilaPhan80@users.noreply.github.com> Date: Sun, 28 Feb 2021 19:38:13 -0500 Subject: [PATCH 467/603] Add option to ignore common leading articles in Filename sort --- es-app/src/FileSorts.cpp | 33 ++++++++++++++++++++++++++ es-app/src/FileSorts.h | 2 ++ es-app/src/guis/GuiGamelistOptions.cpp | 1 + es-app/src/guis/GuiMenu.cpp | 29 ++++++++++++++++++++++ es-app/src/guis/GuiMenu.h | 5 ++++ es-core/src/Settings.cpp | 5 ++++ 6 files changed, 75 insertions(+) diff --git a/es-app/src/FileSorts.cpp b/es-app/src/FileSorts.cpp index 58b4ba90a1..f0f301a045 100644 --- a/es-app/src/FileSorts.cpp +++ b/es-app/src/FileSorts.cpp @@ -1,9 +1,12 @@ #include "FileSorts.h" #include "utils/StringUtil.h" +#include "Settings.h" +#include "Log.h" namespace FileSorts { + const FileData::SortType typesArr[] = { FileData::SortType(&compareName, true, "filename, ascending"), FileData::SortType(&compareName, false, "filename, descending"), @@ -50,6 +53,9 @@ namespace FileSorts if(name2.empty()){ name2 = Utils::String::toUpper(file2->metadata.get("name")); } + + ignoreLeadingArticles(name1, name2); + return name1.compare(name2) < 0; } @@ -115,4 +121,31 @@ namespace FileSorts std::string system2 = Utils::String::toUpper(file2->getSystemName()); return system1.compare(system2) < 0; } + + //If option is enabled, ignore leading articles by temporarily modifying the name prior to sorting + //(Artciles are defined within the settings config file) + void ignoreLeadingArticles(std::string &name1, std::string &name2) { + + if (Settings::getInstance()->getBool("IgnoreLeadingArticles")) + { + + std::vector articles = Utils::String::delimitedStringToVector(Settings::getInstance()->getString("LeadingArticles"), ","); + + for(Utils::String::stringVector::iterator it = articles.begin(); it != articles.end(); it++) + { + + if (Utils::String::startsWith(Utils::String::toUpper(name1), Utils::String::toUpper(it[0]) + " ")) { + name1 = Utils::String::replace(Utils::String::toUpper(name1), Utils::String::toUpper(it[0]) + " ", ""); + } + + if (Utils::String::startsWith(Utils::String::toUpper(name2), Utils::String::toUpper(it[0]) + " ")) { + name2 = Utils::String::replace(Utils::String::toUpper(name2), Utils::String::toUpper(it[0]) + " ", ""); + } + + } + + } + + } + }; diff --git a/es-app/src/FileSorts.h b/es-app/src/FileSorts.h index be705522ce..c3503b1664 100644 --- a/es-app/src/FileSorts.h +++ b/es-app/src/FileSorts.h @@ -18,6 +18,8 @@ namespace FileSorts bool comparePublisher(const FileData* file1, const FileData* file2); bool compareSystem(const FileData* file1, const FileData* file2); + void ignoreLeadingArticles(std::string &name1, std::string &name2); + extern const std::vector SortTypes; }; diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 764ef0b3fe..60cddcf6ed 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -76,6 +76,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui mMenu.addWithLabel("SORT GAMES BY", mListSort); } + // show filtered menu if(!Settings::getInstance()->getBool("ForceDisableFilters")) { diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index cd60ff09f4..ffbac5d3d4 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -19,6 +19,9 @@ #include #include #include "platform.h" +#include "FileSorts.h" +#include "views/gamelist/IGameListView.h" +#include "guis/GuiInfoPopup.h" GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MENU"), mVersion(window) { @@ -332,6 +335,32 @@ void GuiMenu::openUISettings() ViewController::get()->reloadAll(); }); + // Optionally ignore leading articles when sorting game titles + auto ignore_articles = std::make_shared(mWindow); + ignore_articles->setState(Settings::getInstance()->getBool("IgnoreLeadingArticles")); + s->addWithLabel("IGNORE ARTICLES (NAME SORT ONLY)", ignore_articles); + s->addSaveFunc([ignore_articles, window] { + bool articles_are_ignored = Settings::getInstance()->getBool("IgnoreLeadingArticles"); + Settings::getInstance()->setBool("IgnoreLeadingArticles", ignore_articles->getState()); + if (ignore_articles->getState() != articles_are_ignored) + { + //For each system... + for (auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++) + { + //Apply sort recursively + FileData* root = (*it)->getRootFolder(); + root->sort(getSortTypeFromString(root->getSortName())); + + //Notify that the root folder was sorted + ViewController::get()->getGameListView((*it))->onFileChanged(root, FILE_SORTED); + } + + //Display popup to inform user + GuiInfoPopup* popup = new GuiInfoPopup(window, "Files sorted", 4000); + window->setInfoPopup(popup); + } + }); + // Optionally start in selected system auto systemfocus_list = std::make_shared< OptionListComponent >(mWindow, "START ON SYSTEM", false); systemfocus_list->add("NONE", "", Settings::getInstance()->getString("StartupSystem") == ""); diff --git a/es-app/src/guis/GuiMenu.h b/es-app/src/guis/GuiMenu.h index da8406bb79..f251a97123 100644 --- a/es-app/src/guis/GuiMenu.h +++ b/es-app/src/guis/GuiMenu.h @@ -4,6 +4,8 @@ #include "components/MenuComponent.h" #include "GuiComponent.h" +#include "components/OptionListComponent.h" +#include "FileData.h" class GuiMenu : public GuiComponent { @@ -29,6 +31,9 @@ class GuiMenu : public GuiComponent MenuComponent mMenu; TextComponent mVersion; + + typedef OptionListComponent SortList; + std::shared_ptr mListSort; }; #endif // ES_APP_GUIS_GUI_MENU_H diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index e1562d80de..14d553258a 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -164,6 +164,11 @@ void Settings::setDefaults() mIntMap["ScreenOffsetX"] = 0; mIntMap["ScreenOffsetY"] = 0; mIntMap["ScreenRotate"] = 0; + + mBoolMap["IgnoreLeadingArticles"] = false; + //No spaces! Order is important! + //"The A Squad" given [a,an,the] will sort as "A Squad", but given [the,a,an] will sort as "Squad" + mStringMap["LeadingArticles"] = "a,an,the"; } template From b5107138e1140d3b0c370bf42d5a5f312b9628bb Mon Sep 17 00:00:00 2001 From: Gemba Date: Mon, 15 Feb 2021 21:12:04 +0100 Subject: [PATCH 468/603] Adds longer delay for start of description text autoscroll. --- es-app/src/views/gamelist/DetailedGameListView.cpp | 6 +++++- es-app/src/views/gamelist/DetailedGameListView.h | 2 ++ es-app/src/views/gamelist/GridGameListView.cpp | 6 +++++- es-app/src/views/gamelist/GridGameListView.h | 2 ++ es-app/src/views/gamelist/ISimpleGameListView.h | 2 ++ es-app/src/views/gamelist/VideoGameListView.cpp | 6 +++++- es-app/src/views/gamelist/VideoGameListView.h | 2 ++ es-core/src/components/ScrollableContainer.cpp | 9 ++++++--- es-core/src/components/ScrollableContainer.h | 2 +- 9 files changed, 30 insertions(+), 7 deletions(-) diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 7f09d70fa6..0dbbbafbb5 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -5,7 +5,7 @@ DetailedGameListView::DetailedGameListView(Window* window, FileData* root) : BasicGameListView(window, root), - mDescContainer(window), mDescription(window), + mDescContainer(window, DESCRIPTION_SCROLL_DELAY), mDescription(window), mThumbnail(window), mMarquee(window), mImage(window), @@ -308,3 +308,7 @@ std::vector DetailedGameListView::getMDValues() ret.push_back(&mPlayCount); return ret; } + +void DetailedGameListView::onFocusLost() { + mDescContainer.reset(); +} diff --git a/es-app/src/views/gamelist/DetailedGameListView.h b/es-app/src/views/gamelist/DetailedGameListView.h index 681ffce5fc..6add975f4d 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.h +++ b/es-app/src/views/gamelist/DetailedGameListView.h @@ -18,6 +18,8 @@ class DetailedGameListView : public BasicGameListView virtual void launch(FileData* game) override; + void onFocusLost() override; + private: void updateInfoPanel(); diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 1d970a4831..59a450fb5d 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -17,7 +17,7 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : mImage(window), mVideo(nullptr), mVideoPlaying(false), - mDescContainer(window), mDescription(window), + mDescContainer(window, DESCRIPTION_SCROLL_DELAY), mDescription(window), mLblRating(window), mLblReleaseDate(window), mLblDeveloper(window), mLblPublisher(window), mLblGenre(window), mLblPlayers(window), mLblLastPlayed(window), mLblPlayCount(window), @@ -500,3 +500,7 @@ void GridGameListView::onShow() GuiComponent::onShow(); updateInfoPanel(); } + +void GridGameListView::onFocusLost() { + mDescContainer.reset(); +} diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index 6f5798feff..4012ab4a64 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -29,6 +29,8 @@ class GridGameListView : public ISimpleGameListView virtual std::vector getHelpPrompts() override; virtual void launch(FileData* game) override; + void onFocusLost(void) override; + protected: virtual void update(int deltaTime) override; virtual std::string getQuickSystemSelectRightButton() override; diff --git a/es-app/src/views/gamelist/ISimpleGameListView.h b/es-app/src/views/gamelist/ISimpleGameListView.h index 785f3992ca..fd91097b31 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.h +++ b/es-app/src/views/gamelist/ISimpleGameListView.h @@ -28,6 +28,8 @@ class ISimpleGameListView : public IGameListView virtual void launch(FileData* game) = 0; protected: + static const int DESCRIPTION_SCROLL_DELAY = 5 * 1000; // five secs + virtual std::string getQuickSystemSelectRightButton() = 0; virtual std::string getQuickSystemSelectLeftButton() = 0; virtual void populateList(const std::vector& files) = 0; diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 7380cbc391..9b2e50a10c 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -13,7 +13,7 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : BasicGameListView(window, root), - mDescContainer(window), mDescription(window), + mDescContainer(window, DESCRIPTION_SCROLL_DELAY), mDescription(window), mThumbnail(window), mMarquee(window), mImage(window), @@ -398,3 +398,7 @@ void VideoGameListView::onShow() GuiComponent::onShow(); updateInfoPanel(); } + +void VideoGameListView::onFocusLost() { + mDescContainer.reset(); +} diff --git a/es-app/src/views/gamelist/VideoGameListView.h b/es-app/src/views/gamelist/VideoGameListView.h index edbc2c21fd..b5f36c6277 100644 --- a/es-app/src/views/gamelist/VideoGameListView.h +++ b/es-app/src/views/gamelist/VideoGameListView.h @@ -22,6 +22,8 @@ class VideoGameListView : public BasicGameListView virtual const char* getName() const override { return "video"; } virtual void launch(FileData* game) override; + void onFocusLost(void) override; + protected: virtual void update(int deltaTime) override; diff --git a/es-core/src/components/ScrollableContainer.cpp b/es-core/src/components/ScrollableContainer.cpp index 5157b977bf..cacbf3867d 100644 --- a/es-core/src/components/ScrollableContainer.cpp +++ b/es-core/src/components/ScrollableContainer.cpp @@ -7,8 +7,8 @@ #define AUTO_SCROLL_DELAY 1000 // ms to wait before we start to scroll #define AUTO_SCROLL_SPEED 50 // ms between scrolls -ScrollableContainer::ScrollableContainer(Window* window) : GuiComponent(window), - mAutoScrollDelay(0), mAutoScrollSpeed(0), mAutoScrollAccumulator(0), mScrollPos(0, 0), mScrollDir(0, 0), mAutoScrollResetAccumulator(0) +ScrollableContainer::ScrollableContainer(Window* window, int scrollDelay) : GuiComponent(window), + mAutoScrollDelay(scrollDelay), mAutoScrollSpeed(0), mAutoScrollAccumulator(0), mScrollPos(0, 0), mScrollDir(0, 0), mAutoScrollResetAccumulator(0) { } @@ -39,7 +39,10 @@ void ScrollableContainer::setAutoScroll(bool autoScroll) if(autoScroll) { mScrollDir = Vector2f(0, 1); - mAutoScrollDelay = AUTO_SCROLL_DELAY; + if (mAutoScrollDelay == 0) + { + mAutoScrollDelay = AUTO_SCROLL_DELAY; + } mAutoScrollSpeed = AUTO_SCROLL_SPEED; reset(); }else{ diff --git a/es-core/src/components/ScrollableContainer.h b/es-core/src/components/ScrollableContainer.h index 6700a78cb8..4563e9103f 100644 --- a/es-core/src/components/ScrollableContainer.h +++ b/es-core/src/components/ScrollableContainer.h @@ -7,7 +7,7 @@ class ScrollableContainer : public GuiComponent { public: - ScrollableContainer(Window* window); + ScrollableContainer(Window* window, int scrollDelay = 0); Vector2f getScrollPos() const; void setScrollPos(const Vector2f& pos); From 88ad02bcfc2b1c99f8b126d8953166a2df003052 Mon Sep 17 00:00:00 2001 From: "Rodrigo L.C" Date: Tue, 2 Mar 2021 21:48:32 -0300 Subject: [PATCH 469/603] Rev2 - Added two systems in the scrape All changes in just one commit, as discussed earlier Add NEOGEO_CD NINTENDO_POKEMON_MINI Id Fix NINTENDO_GAME_AND_WATCH --- es-app/src/PlatformId.cpp | 2 ++ es-app/src/PlatformId.h | 2 ++ es-app/src/scrapers/GamesDBJSONScraper.cpp | 4 +++- es-app/src/scrapers/ScreenScraper.cpp | 2 ++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 7b0625404f..5081fff53d 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -31,6 +31,7 @@ namespace PlatformIds "xbox360", "msx", "neogeo", + "neogeocd", "ngp", // neo geo pocket "ngpc", // neo geo pocket color "n3ds", // nintendo 3DS @@ -38,6 +39,7 @@ namespace PlatformIds "nds", // nintendo DS "fds", // Famicom Disk System "nes", // nintendo entertainment system + "pokemonmini", "channelf", // Fairchild ChannelF "gb", // game boy "gba", // game boy advance diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index 9eb627b4f2..0c10671b09 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -32,6 +32,7 @@ namespace PlatformIds XBOX_360, MSX, NEOGEO, + NEOGEO_CD, NEOGEO_POCKET, NEOGEO_POCKET_COLOR, NINTENDO_3DS, @@ -39,6 +40,7 @@ namespace PlatformIds NINTENDO_DS, FAMICOM_DISK_SYSTEM, NINTENDO_ENTERTAINMENT_SYSTEM, + NINTENDO_POKEMON_MINI, FAIRCHILD_CHANNELF, GAME_BOY, GAME_BOY_ADVANCE, diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index 2f2f8ef63d..3bf0d6ed0b 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -57,6 +57,7 @@ const std::map gamesdb_new_platformid_map{ { XBOX_360, "15" }, { MSX, "4929" }, { NEOGEO, "24" }, + { NEOGEO_CD, "4956" }, { NEOGEO_POCKET, "4922" }, { NEOGEO_POCKET_COLOR, "4923" }, { NINTENDO_3DS, "4912" }, @@ -64,6 +65,7 @@ const std::map gamesdb_new_platformid_map{ { NINTENDO_DS, "8" }, { FAMICOM_DISK_SYSTEM, "4936" }, { NINTENDO_ENTERTAINMENT_SYSTEM, "7" }, + { NINTENDO_POKEMON_MINI, "4957" }, { GAME_BOY, "4" }, { GAME_BOY_ADVANCE, "5" }, { GAME_BOY_COLOR, "41" }, @@ -71,7 +73,7 @@ const std::map gamesdb_new_platformid_map{ { NINTENDO_WII, "9" }, { NINTENDO_WII_U, "38" }, { NINTENDO_VIRTUAL_BOY, "4918" }, - { NINTENDO_GAME_AND_WATCH, "-1" }, + { NINTENDO_GAME_AND_WATCH, "4950" }, { PC, "1" }, { SEGA_32X, "33" }, { SEGA_CD, "21" }, diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index dd93a7a8ca..e7f9625031 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -40,6 +40,7 @@ const std::map screenscraper_platformid_map{ { XBOX_360, 33 }, { MSX, 113 }, { NEOGEO, 142 }, + { NEOGEO_CD, 70 }, { NEOGEO_POCKET, 25}, { NEOGEO_POCKET_COLOR, 82 }, { NINTENDO_3DS, 17 }, @@ -47,6 +48,7 @@ const std::map screenscraper_platformid_map{ { NINTENDO_DS, 15 }, { FAMICOM_DISK_SYSTEM, 106 }, { NINTENDO_ENTERTAINMENT_SYSTEM, 3 }, + { NINTENDO_POKEMON_MINI, 211 }, { FAIRCHILD_CHANNELF, 80 }, { GAME_BOY, 9 }, { GAME_BOY_ADVANCE, 12 }, From 5349be1dcebd35c0f9d5698b0508caeba61ed1a5 Mon Sep 17 00:00:00 2001 From: Fabrice CARUSO Date: Mon, 1 Mar 2021 19:29:50 +0100 Subject: [PATCH 470/603] Added a progressbar during loading + threaded loading when processor threads > 2 --- es-app/src/CollectionSystemManager.cpp | 6 +- es-app/src/CollectionSystemManager.h | 2 +- es-app/src/SystemData.cpp | 228 ++++++++++++++++++------- es-app/src/SystemData.h | 7 +- es-app/src/main.cpp | 8 +- es-app/src/views/ViewController.cpp | 16 +- es-core/CMakeLists.txt | 2 + es-core/src/Settings.cpp | 2 + es-core/src/ThemeData.cpp | 4 +- es-core/src/ThemeData.h | 3 + es-core/src/Window.cpp | 28 ++- es-core/src/Window.h | 2 +- es-core/src/utils/FileSystemUtil.cpp | 5 + es-core/src/utils/ThreadPool.cpp | 93 ++++++++++ es-core/src/utils/ThreadPool.h | 32 ++++ 15 files changed, 355 insertions(+), 83 deletions(-) create mode 100644 es-core/src/utils/ThreadPool.cpp create mode 100644 es-core/src/utils/ThreadPool.h diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 4d9bc84930..cfa1eaf8e8 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -124,7 +124,7 @@ void CollectionSystemManager::saveCustomCollection(SystemData* sys) /* Methods to load all Collections into memory, and handle enabling the active ones */ // loads all Collection Systems -void CollectionSystemManager::loadCollectionSystems() +void CollectionSystemManager::loadCollectionSystems(bool async) { initAutoCollectionSystems(); CollectionSystemDecl decl = mCollectionSystemDeclsIndex[myCollectionsName]; @@ -135,8 +135,10 @@ void CollectionSystemManager::loadCollectionSystems() { // Now see which ones are enabled loadEnabledListFromSettings(); + // add to the main System Vector, and create Views as needed - updateSystemsList(); + if (!async) + updateSystemsList(); } } diff --git a/es-app/src/CollectionSystemManager.h b/es-app/src/CollectionSystemManager.h index 82aec230f5..00310fc53d 100644 --- a/es-app/src/CollectionSystemManager.h +++ b/es-app/src/CollectionSystemManager.h @@ -49,7 +49,7 @@ class CollectionSystemManager static void deinit(); void saveCustomCollection(SystemData* sys); - void loadCollectionSystems(); + void loadCollectionSystems(bool async=false); void loadEnabledListFromSettings(); void updateSystemsList(); diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 11ff0b8304..5e3b8c8a13 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -10,11 +10,12 @@ #include "Settings.h" #include "ThemeData.h" #include "views/UIModeController.h" -#include #include -#ifdef WIN32 -#include -#endif +#include "utils/StringUtil.h" +#include "utils/ThreadPool.h" +#include "Window.h" + +using namespace Utils; std::vector SystemData::sSystemVector; @@ -100,7 +101,7 @@ void SystemData::populateFolder(FileData* folder) //this is a little complicated because we allow a list of extensions to be defined (delimited with a space) //we first get the extension of the file itself: - extension = Utils::FileSystem::getExtension(filePath); + extension = Utils::String::toLower(Utils::FileSystem::getExtension(filePath)); //fyi, folders *can* also match the extension and be added as games - this is mostly just to support higan //see issue #75: https://github.com/Aloshi/EmulationStation/issues/75 @@ -164,8 +165,93 @@ std::vector readList(const std::string& str, const char* delims = " return ret; } + +SystemData* SystemData::loadSystem(pugi::xml_node system) +{ + std::string name, fullname, path, cmd, themeFolder, defaultCore; + + name = system.child("name").text().get(); + fullname = system.child("fullname").text().get(); + path = system.child("path").text().get(); + defaultCore = system.child("defaultCore").text().get(); + + std::vector list = readList(system.child("extension").text().get()); + std::vector extensions; + + for (auto extension = list.cbegin(); extension != list.cend(); extension++) + { + std::string xt = Utils::String::toLower(*extension); + if (std::find(extensions.begin(), extensions.end(), xt) == extensions.end()) + extensions.push_back(xt); + } + + cmd = system.child("command").text().get(); + + // platform id list + const char* platformList = system.child("platform").text().get(); + std::vector platformStrs = readList(platformList); + std::vector platformIds; + for (auto it = platformStrs.cbegin(); it != platformStrs.cend(); it++) + { + const char* str = it->c_str(); + PlatformIds::PlatformId platformId = PlatformIds::getPlatformId(str); + + if (platformId == PlatformIds::PLATFORM_IGNORE) + { + // when platform is ignore, do not allow other platforms + platformIds.clear(); + platformIds.push_back(platformId); + break; + } + + // if there appears to be an actual platform ID supplied but it didn't match the list, warn + if (str != NULL && str[0] != '\0' && platformId == PlatformIds::PLATFORM_UNKNOWN) + LOG(LogWarning) << " Unknown platform for system \"" << name << "\" (platform \"" << str << "\" from list \"" << platformList << "\")"; + else if (platformId != PlatformIds::PLATFORM_UNKNOWN) + platformIds.push_back(platformId); + } + + // theme folder + themeFolder = system.child("theme").text().as_string(name.c_str()); + + //validate + if (name.empty() || path.empty() || extensions.empty() || cmd.empty()) + { + LOG(LogError) << "System \"" << name << "\" is missing name, path, extension, or command!"; + return nullptr; + } + + //convert path to generic directory seperators + path = Utils::FileSystem::getGenericPath(path); + + //expand home symbol if the startpath contains ~ + if (path[0] == '~') + { + path.erase(0, 1); + path.insert(0, Utils::FileSystem::getHomePath()); + } + + //create the system runtime environment data + SystemEnvironmentData* envData = new SystemEnvironmentData; + envData->mStartPath = path; + envData->mSearchExtensions = extensions; + envData->mLaunchCommand = cmd; + envData->mPlatformIds = platformIds; + + SystemData* newSys = new SystemData(name, fullname, envData, themeFolder); + if (newSys->getRootFolder()->getChildren().size() == 0) + { + LOG(LogWarning) << "System \"" << name << "\" has no games! Ignoring it."; + delete newSys; + + return nullptr; + } + + return newSys; +} + //creates systems from information located in a config file -bool SystemData::loadConfig() +bool SystemData::loadConfig(Window* window) { deleteSystems(); @@ -173,7 +259,7 @@ bool SystemData::loadConfig() LOG(LogInfo) << "Loading system config file " << path << "..."; - if(!Utils::FileSystem::exists(path)) + if (!Utils::FileSystem::exists(path)) { LOG(LogError) << "es_systems.cfg file does not exist!"; writeExampleConfig(getConfigPath(true)); @@ -199,80 +285,98 @@ bool SystemData::loadConfig() return false; } - for(pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) + std::vector systemsNames; + + int systemCount = 0; + for (pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) { - std::string name, fullname, path, cmd, themeFolder; + systemsNames.push_back(system.child("fullname").text().get()); + systemCount++; + } - name = system.child("name").text().get(); - fullname = system.child("fullname").text().get(); - path = system.child("path").text().get(); + int currentSystem = 0; - // convert extensions list from a string into a vector of strings - std::vector extensions = readList(system.child("extension").text().get()); + typedef SystemData* SystemDataPtr; - cmd = system.child("command").text().get(); + ThreadPool* pThreadPool = NULL; + SystemDataPtr* systems = NULL; - // platform id list - const char* platformList = system.child("platform").text().get(); - std::vector platformStrs = readList(platformList); - std::vector platformIds; - for(auto it = platformStrs.cbegin(); it != platformStrs.cend(); it++) - { - const char* str = it->c_str(); - PlatformIds::PlatformId platformId = PlatformIds::getPlatformId(str); + if (std::thread::hardware_concurrency() > 2 && Settings::getInstance()->getBool("ThreadedLoading")) + { + pThreadPool = new ThreadPool(); - if(platformId == PlatformIds::PLATFORM_IGNORE) - { - // when platform is ignore, do not allow other platforms - platformIds.clear(); - platformIds.push_back(platformId); - break; - } + systems = new SystemDataPtr[systemCount]; + for (int i = 0; i < systemCount; i++) + systems[i] = nullptr; - // if there appears to be an actual platform ID supplied but it didn't match the list, warn - if(str != NULL && str[0] != '\0' && platformId == PlatformIds::PLATFORM_UNKNOWN) - LOG(LogWarning) << " Unknown platform for system \"" << name << "\" (platform \"" << str << "\" from list \"" << platformList << "\")"; - else if(platformId != PlatformIds::PLATFORM_UNKNOWN) - platformIds.push_back(platformId); - } + pThreadPool->queueWorkItem([] { CollectionSystemManager::get()->loadCollectionSystems(true); }); + } - // theme folder - themeFolder = system.child("theme").text().as_string(name.c_str()); + int processedSystem = 0; - //validate - if(name.empty() || path.empty() || extensions.empty() || cmd.empty()) + for (pugi::xml_node system = systemList.child("system"); system; system = system.next_sibling("system")) + { + if (pThreadPool != NULL) { - LOG(LogError) << "System \"" << name << "\" is missing name, path, extension, or command!"; - continue; + pThreadPool->queueWorkItem([system, currentSystem, systems, &processedSystem] + { + systems[currentSystem] = loadSystem(system); + processedSystem++; + }); } + else + { + std::string fullname = system.child("fullname").text().get(); - //convert path to generic directory seperators - path = Utils::FileSystem::getGenericPath(path); + if (window != NULL) + window->renderLoadingScreen(fullname, systemCount == 0 ? 0 : (float)currentSystem / (float)(systemCount + 1)); - //expand home symbol if the startpath contains ~ - if(path[0] == '~') - { - path.erase(0, 1); - path.insert(0, Utils::FileSystem::getHomePath()); + std::string nm = system.child("name").text().get(); + + SystemData* pSystem = loadSystem(system); + if (pSystem != nullptr) + sSystemVector.push_back(pSystem); } - //create the system runtime environment data - SystemEnvironmentData* envData = new SystemEnvironmentData; - envData->mStartPath = path; - envData->mSearchExtensions = extensions; - envData->mLaunchCommand = cmd; - envData->mPlatformIds = platformIds; + currentSystem++; + } + + if (pThreadPool != NULL) + { + if (window != NULL) + { + pThreadPool->wait([window, &processedSystem, systemCount, &systemsNames] + { + int px = processedSystem - 1; + if (px >= 0 && px < systemsNames.size()) + window->renderLoadingScreen(systemsNames.at(px), (float)px / (float)(systemCount + 1)); + }, 10); + } + else + pThreadPool->wait(); - SystemData* newSys = new SystemData(name, fullname, envData, themeFolder); - if(newSys->getRootFolder()->getChildrenByFilename().size() == 0) + for (int i = 0; i < systemCount; i++) { - LOG(LogWarning) << "System \"" << name << "\" has no games! Ignoring it."; - delete newSys; - }else{ - sSystemVector.push_back(newSys); + SystemData* pSystem = systems[i]; + if (pSystem != nullptr) + sSystemVector.push_back(pSystem); } + + delete[] systems; + delete pThreadPool; + + if (window != NULL) + window->renderLoadingScreen("Favorites", systemCount == 0 ? 0 : currentSystem / systemCount); + + CollectionSystemManager::get()->updateSystemsList(); + } + else + { + if (window != NULL) + window->renderLoadingScreen("Favorites", systemCount == 0 ? 0 : currentSystem / systemCount); + + CollectionSystemManager::get()->loadCollectionSystems(); } - CollectionSystemManager::get()->loadCollectionSystems(); return true; } diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index b72e48e38b..6eb1d2306f 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -8,9 +8,12 @@ #include #include +#include + class FileData; class FileFilterIndex; class ThemeData; +class Window; struct SystemEnvironmentData { @@ -46,7 +49,7 @@ class SystemData unsigned int getDisplayedGameCount() const; static void deleteSystems(); - static bool loadConfig(); //Load the system config file at getConfigPath(). Returns true if no errors were encountered. An example will be written if the file doesn't exist. + static bool loadConfig(Window* window); //Load the system config file at getConfigPath(). Returns true if no errors were encountered. An example will be written if the file doesn't exist. static void writeExampleConfig(const std::string& path); static std::string getConfigPath(bool forWrite); // if forWrite, will only return ~/.emulationstation/es_systems.cfg, never /etc/emulationstation/es_systems.cfg @@ -71,6 +74,8 @@ class SystemData void onMetaDataSavePoint(); private: + static SystemData* loadSystem(pugi::xml_node system); + bool mIsCollectionSystem; bool mIsGameSystem; std::string mName; diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index dd6538b8fa..f6a938bfaf 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -214,11 +214,11 @@ bool verifyHomeFolderExists() } // Returns true if everything is OK, -bool loadSystemConfigFile(const char** errorString) +bool loadSystemConfigFile(Window* window, const char** errorString) { *errorString = NULL; - if(!SystemData::loadConfig()) + if(!SystemData::loadConfig(window)) { LOG(LogError) << "Error while parsing systems configuration file!"; *errorString = "IT LOOKS LIKE YOUR SYSTEMS CONFIGURATION FILE HAS NOT BEEN SET UP OR IS INVALID. YOU'LL NEED TO DO THIS BY HAND, UNFORTUNATELY.\n\n" @@ -323,7 +323,7 @@ int main(int argc, char* argv[]) return 1; } - if(splashScreen) + if (splashScreen) { std::string progressText = "Loading..."; if (splashScreenProgress) @@ -333,7 +333,7 @@ int main(int argc, char* argv[]) } const char* errorMsg = NULL; - if(!loadSystemConfigFile(&errorMsg)) + if(!loadSystemConfigFile(splashScreen && splashScreenProgress ? &window : nullptr, &errorMsg)) { // something went terribly wrong if(errorMsg == NULL) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 73c5c05ebf..173e533666 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -436,17 +436,19 @@ void ViewController::render(const Transform4x4f& parentTrans) void ViewController::preload() { - uint32_t i = 0; + int i = 1; + int max = SystemData::sSystemVector.size() + 1; + + bool splash = Settings::getInstance()->getBool("SplashScreen") && Settings::getInstance()->getBool("SplashScreenProgress"); + if (splash) + mWindow->renderLoadingScreen("Preloading UI", (float)i / (float)max); + for(auto it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); it++) { - if(Settings::getInstance()->getBool("SplashScreen") && - Settings::getInstance()->getBool("SplashScreenProgress")) + if (splash) { i++; - char buffer[100]; - sprintf (buffer, "Loading '%s' (%d/%d)", - (*it)->getFullName().c_str(), i, (int)SystemData::sSystemVector.size()); - mWindow->renderLoadingScreen(std::string(buffer)); + mWindow->renderLoadingScreen("Preloading UI", (float)i / (float)max); } (*it)->getIndex()->resetFilters(); diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 99d084d0ab..ebd97ab13c 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -76,6 +76,7 @@ set(CORE_HEADERS # Utils ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.h ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/ThreadPool.h ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.h ) @@ -154,6 +155,7 @@ set(CORE_SOURCES # Utils ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/ThreadPool.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.cpp ) diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 2d353f78ad..481310b52c 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -77,6 +77,8 @@ void Settings::setDefaults() mBoolMap["QuickSystemSelect"] = true; mBoolMap["MoveCarousel"] = true; + mBoolMap["ThreadedLoading"] = true; + mBoolMap["Debug"] = false; mBoolMap["DebugGrid"] = false; mBoolMap["DebugText"] = false; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 8fb32f116a..cb1b2656c2 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -197,9 +197,7 @@ unsigned int getHexColor(const char* str) return val; } -std::map mVariables; - -std::string resolvePlaceholders(const char* in) +std::string ThemeData::resolvePlaceholders(const char* in) { std::string inStr(in); diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 6a833fdb06..ae91d7c8de 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -185,6 +185,9 @@ class ThemeData void parseElement(const pugi::xml_node& elementNode, const std::map& typeMap, ThemeElement& element); std::map mViews; + + std::string resolvePlaceholders(const char* in); + std::map mVariables; }; #endif // ES_CORE_THEME_DATA_H diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 3ea9a86fff..2cd699d5b3 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -10,6 +10,10 @@ #include #include +#ifdef WIN32 +#include +#endif + Window::Window() : mNormalizeNextUpdate(false), mFrameTimeElapsed(0), mFrameCountElapsed(0), mAverageDeltaTime(10), mAllowSleep(true), mSleeping(false), mTimeSinceLastInput(0), mScreenSaver(NULL), mRenderScreenSaver(false), mInfoPopup(NULL) { @@ -301,12 +305,26 @@ void Window::setAllowSleep(bool sleep) mAllowSleep = sleep; } -void Window::renderLoadingScreen(std::string text) +void Window::renderLoadingScreen(std::string text, float percent, unsigned char opacity) { Transform4x4f trans = Transform4x4f::Identity(); Renderer::setMatrix(trans); Renderer::drawRect(0.0f, 0.0f, Renderer::getScreenWidth(), Renderer::getScreenHeight(), 0x000000FF, 0x000000FF); + if (percent >= 0) + { + float baseHeight = 0.04f; + + float w = Renderer::getScreenWidth() / 2; + float h = Renderer::getScreenHeight() * baseHeight; + + float x = Renderer::getScreenWidth() / 2 - w / 2; + float y = Renderer::getScreenHeight() - (Renderer::getScreenHeight() * 3 * baseHeight); + + Renderer::drawRect(x, y, w, h, 0x25252500 | opacity, 0x25252500 | opacity); + Renderer::drawRect(x, y, (w*percent), h, 0x006C9E00 | opacity, 0x006C9E00 | opacity); // 0xFFFFFFFF + } + ImageComponent splash(this, true); splash.setResize(Renderer::getScreenWidth() * 0.6f, 0.0f); splash.setImage(":/splash.svg"); @@ -317,13 +335,19 @@ void Window::renderLoadingScreen(std::string text) TextCache* cache = font->buildTextCache(text, 0, 0, 0x656565FF); float x = Math::round((Renderer::getScreenWidth() - cache->metrics.size.x()) / 2.0f); - float y = Math::round(Renderer::getScreenHeight() * 0.835f); + float y = Math::round(Renderer::getScreenHeight() * 0.78f); trans = trans.translate(Vector3f(x, y, 0.0f)); Renderer::setMatrix(trans); font->renderTextCache(cache); delete cache; Renderer::swapBuffers(); + +#ifdef WIN32 + // Avoid Window Freezing on Windows + SDL_Event event; + while (SDL_PollEvent(&event)); +#endif } void Window::renderHelpPromptsEarly() diff --git a/es-core/src/Window.h b/es-core/src/Window.h index efe48d2df8..d92bd09b5b 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -64,7 +64,7 @@ class Window bool getAllowSleep(); void setAllowSleep(bool sleep); - void renderLoadingScreen(std::string text); + void renderLoadingScreen(std::string text, float percent = -1, unsigned char opacity = 255); void renderHelpPromptsEarly(); // used to render HelpPrompts before a fade void setHelpPrompts(const std::vector& prompts, const HelpStyle& style); diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index d1df665929..4a028547b3 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -10,6 +10,7 @@ // because windows... #include #include +#include #define getcwd _getcwd #define mkdir(x,y) _mkdir(x) #define snprintf _snprintf @@ -35,6 +36,8 @@ namespace Utils ////////////////////////////////////////////////////////////////////////// #if defined(_WIN32) + std::mutex mFileMutex; // Avoids enumerating N folders at the same time in threaded loadings + static std::string convertFromWideString(const std::wstring _wstring) { const int numBytes = WideCharToMultiByte(CP_UTF8, 0, _wstring.c_str(), (int)_wstring.length(), nullptr, 0, nullptr, nullptr); @@ -59,6 +62,8 @@ namespace Utils { #if defined(_WIN32) + std::unique_lock lock(mFileMutex); + WIN32_FIND_DATAW findData; const std::string wildcard = path + "/*"; const HANDLE hFind = FindFirstFileW(std::wstring(wildcard.begin(), wildcard.end()).c_str(), &findData); diff --git a/es-core/src/utils/ThreadPool.cpp b/es-core/src/utils/ThreadPool.cpp new file mode 100644 index 0000000000..3108cb62ab --- /dev/null +++ b/es-core/src/utils/ThreadPool.cpp @@ -0,0 +1,93 @@ +#include "ThreadPool.h" + +#if WIN32 +#include +#endif + +namespace Utils +{ + ThreadPool::ThreadPool() : mRunning(true), mWaiting(false), mNumWork(0) + { + size_t num_threads = std::thread::hardware_concurrency() - 1; + + auto doWork = [&](size_t id) + { +#if WIN32 + auto mask = (static_cast(1) << id); + SetThreadAffinityMask(GetCurrentThread(), mask); +#endif + + while (mRunning) + { + _mutex.lock(); + if (!mWorkQueue.empty()) + { + auto work = mWorkQueue.front(); + mWorkQueue.pop(); + _mutex.unlock(); + + try + { + work(); + } + catch (...) {} + + mNumWork--; + } + else + { + _mutex.unlock(); + + // Extra code : Exit finished threads + if (mWaiting) + return; + + std::this_thread::yield(); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + } + }; + + mThreads.reserve(num_threads); + + for (size_t i = 0; i < num_threads; i++) + mThreads.push_back(std::thread(doWork, i)); + } + + ThreadPool::~ThreadPool() + { + mRunning = false; + + for (std::thread& t : mThreads) + if (t.joinable()) + t.join(); + } + + void ThreadPool::queueWorkItem(work_function work) + { + _mutex.lock(); + mWorkQueue.push(work); + mNumWork++; + _mutex.unlock(); + } + + void ThreadPool::wait() + { + mWaiting = true; + while (mNumWork.load() > 0) + std::this_thread::yield(); + } + + void ThreadPool::wait(work_function work, int delay) + { + mWaiting = true; + + while (mNumWork.load() > 0) + { + work(); + + std::this_thread::yield(); + std::this_thread::sleep_for(std::chrono::milliseconds(delay)); + } + } +} \ No newline at end of file diff --git a/es-core/src/utils/ThreadPool.h b/es-core/src/utils/ThreadPool.h new file mode 100644 index 0000000000..34eb844696 --- /dev/null +++ b/es-core/src/utils/ThreadPool.h @@ -0,0 +1,32 @@ +#pragma once + +#include +#include +#include +#include +#include + +namespace Utils +{ + class ThreadPool + { + public: + typedef std::function work_function; + + ThreadPool(); + ~ThreadPool(); + + void queueWorkItem(work_function work); + void wait(); + void wait(work_function work, int delay = 50); + + private: + bool mRunning; + bool mWaiting; + std::queue mWorkQueue; + std::atomic mNumWork; + std::mutex _mutex; + std::vector mThreads; + + }; +} \ No newline at end of file From a8ccd0a75ba81b3e4af88ed3ebcfe08e57520ab6 Mon Sep 17 00:00:00 2001 From: pjft Date: Wed, 24 Mar 2021 21:02:12 +0000 Subject: [PATCH 471/603] Fix video screensaver launch game controls Video screensaver wasn't launching games when the Image screensaver had been set to use custom images, even if not in use. Introduced in #673 . Reported in https://retropie.org.uk/forum/topic/29291/video-screensaver-black-screen-with-omx-on-and-controls-not-working/ --- es-core/src/Window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 2cd699d5b3..4d3820ad93 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -182,7 +182,7 @@ bool Window::inputDuringScreensaver(InputConfig* config, Input input) else if (is_start_input) { bool slideshow_custom_images = Settings::getInstance()->getBool("SlideshowScreenSaverCustomImageSource"); - if (!slideshow_custom_images) + if (screensaver_type == "random video" || !slideshow_custom_images) { mScreenSaver->launchGame(); } From ab8200e4c62dd111bcf322368f215d914a088d8b Mon Sep 17 00:00:00 2001 From: "Rodrigo L.C" Date: Fri, 26 Mar 2021 01:04:58 -0300 Subject: [PATCH 472/603] IF reduce and Fix delete buffer --- es-app/src/guis/GuiMenu.cpp | 17 +++++------------ es-core/src/utils/StringUtil.cpp | 2 +- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index e593428717..2828072343 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -27,23 +27,16 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN { bool isFullUI = UIModeController::getInstance()->isUIModeFull(); - if (isFullUI) + if (isFullUI) { addEntry("SCRAPER", 0x777777FF, true, [this] { openScraperSettings(); }); - - addEntry("SOUND SETTINGS", 0x777777FF, true, [this] { openSoundSettings(); }); - - - if (isFullUI) + addEntry("SOUND SETTINGS", 0x777777FF, true, [this] { openSoundSettings(); }); addEntry("UI SETTINGS", 0x777777FF, true, [this] { openUISettings(); }); - - if (isFullUI) addEntry("GAME COLLECTION SETTINGS", 0x777777FF, true, [this] { openCollectionSystemSettings(); }); - - if (isFullUI) addEntry("OTHER SETTINGS", 0x777777FF, true, [this] { openOtherSettings(); }); - - if (isFullUI) addEntry("CONFIGURE INPUT", 0x777777FF, true, [this] { openConfigInput(); }); + } else { + addEntry("SOUND SETTINGS", 0x777777FF, true, [this] { openSoundSettings(); }); + } addEntry("QUIT", 0x777777FF, true, [this] {openQuitMenu(); }); diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index 80f8c0f642..9308edd6ba 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -305,7 +305,7 @@ namespace Utils va_end(args); std::string out(buffer); - delete buffer; + delete[] buffer; return out; From eadcc3ef98e6027173a46619afe3d87718bc10c8 Mon Sep 17 00:00:00 2001 From: pjft Date: Wed, 31 Mar 2021 15:15:48 +0100 Subject: [PATCH 473/603] Address wrong path when empty In #688 the change from getCanonicalPath to getAbsolutePath improved performance, but the case of an empty path was not resolving appropriately for the VLC video player. --- es-core/src/components/VideoComponent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index d0c1e5f1dd..98ea4d882a 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -105,7 +105,7 @@ void VideoComponent::onSizeChanged() bool VideoComponent::setVideo(std::string path) { // Convert the path into a generic format - std::string fullPath = Utils::FileSystem::getAbsolutePath(path); + std::string fullPath = path.empty() ? path : Utils::FileSystem::getAbsolutePath(path); // Check that it's changed if (fullPath == mVideoPath) From 6dbf8d6573bbce308c9599e89d2c73f4a3dcdeee Mon Sep 17 00:00:00 2001 From: Gemba Date: Sat, 3 Apr 2021 13:38:44 +0200 Subject: [PATCH 474/603] Fixes scroll detection for themes with forceuppercase gamelist display --- es-app/src/components/TextListComponent.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 3110b2d30e..7dd976e666 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -304,7 +304,8 @@ void TextListComponent::update(int deltaTime) mMarqueeOffset2 = 0; // if we're not scrolling and this object's text goes outside our size, marquee it! - const float textLength = mFont->sizeText(mEntries.at((unsigned int)mCursor).name).x(); + auto name = mEntries.at((unsigned int)mCursor).name; + const float textLength = mFont->sizeText(mUppercase ? Utils::String::toUpper(name) : name).x(); const float limit = mSize.x() - mHorizontalMargin * 2; if(textLength > limit) From 014af4afa2ece50f272e9c54044891df698694a4 Mon Sep 17 00:00:00 2001 From: Gemba Date: Sun, 4 Apr 2021 12:56:10 +0200 Subject: [PATCH 475/603] full screen paging in gamelist view with lb/rb --- es-app/src/components/TextListComponent.h | 64 ++++++++++++++++------- es-app/src/guis/GuiMenu.cpp | 8 +++ es-core/src/Settings.cpp | 2 + 3 files changed, 55 insertions(+), 19 deletions(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 3110b2d30e..a61a394c9c 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -6,6 +6,7 @@ #include "math/Misc.h" #include "utils/StringUtil.h" #include "Log.h" +#include "Settings.h" #include "Sound.h" #include @@ -105,6 +106,10 @@ class TextListComponent : public IList std::string mScrollSound; static const unsigned int COLOR_ID_COUNT = 2; unsigned int mColors[COLOR_ID_COUNT]; + unsigned int mScreenCount; + int mStartEntry = 0; + unsigned int mCursorPrev = 1; + bool mOneEntryUpDn = true; ImageComponent mSelectorImage; }; @@ -123,7 +128,7 @@ TextListComponent::TextListComponent(Window* window) : mFont = Font::get(FONT_SIZE_MEDIUM); mUppercase = false; mLineSpacing = 1.5f; - mSelectorHeight = mFont->getSize() * 1.5f; + mSelectorHeight = mFont->getSize() * mLineSpacing; mSelectorOffsetY = 0; mSelectorColor = 0x000000FF; mSelectorColorEnd = 0x000000FF; @@ -145,35 +150,49 @@ void TextListComponent::render(const Transform4x4f& parentTrans) const float entrySize = Math::max(font->getHeight(1.0), (float)font->getSize()) * mLineSpacing; - int startEntry = 0; - //number of entries that can fit on the screen simultaniously - int screenCount = (int)(mSize.y() / entrySize); + // number of entries that can fit on the screen simultaniously + mScreenCount = (int)(mSize.y() / entrySize); - if(size() >= screenCount) + if (mCursor != mCursorPrev) { - startEntry = mCursor - screenCount/2; - if(startEntry < 0) - startEntry = 0; - if(startEntry >= size() - screenCount) - startEntry = size() - screenCount; - } + int fromTop = mCursorPrev - mStartEntry; + bool cursorCentered = fromTop == mScreenCount/2; + mStartEntry = 0; - float y = 0; + if(size() >= mScreenCount) + { + if (Settings::getInstance()->getBool("UseFullscreenPaging") + && (mCursor > mScreenCount/2 || mCursor < size() - (mScreenCount - mScreenCount/2)) + && !cursorCentered && !mOneEntryUpDn) + { + mStartEntry = mCursor - fromTop; + } else { + mStartEntry = mCursor - mScreenCount/2; + } - int listCutoff = startEntry + screenCount; + // bounds check + if(mStartEntry < 0) + mStartEntry = 0; + else if(mStartEntry >= size() - mScreenCount) + mStartEntry = size() - mScreenCount; + } + mCursorPrev = mCursor; + } + + unsigned int listCutoff = mStartEntry + mScreenCount; if(listCutoff > size()) listCutoff = size(); // draw selector bar - if(startEntry < listCutoff) + if(mStartEntry < listCutoff) { if (mSelectorImage.hasImage()) { - mSelectorImage.setPosition(0.f, (mCursor - startEntry)*entrySize + mSelectorOffsetY, 0.f); + mSelectorImage.setPosition(0.f, (mCursor - mStartEntry)*entrySize + mSelectorOffsetY, 0.f); mSelectorImage.render(trans); } else { Renderer::setMatrix(trans); - Renderer::drawRect(0.0f, (mCursor - startEntry)*entrySize + mSelectorOffsetY, mSize.x(), + Renderer::drawRect(0.0f, (mCursor - mStartEntry)*entrySize + mSelectorOffsetY, mSize.x(), mSelectorHeight, mSelectorColor, mSelectorColorEnd, mSelectorColorGradientHorizontal); } } @@ -184,7 +203,8 @@ void TextListComponent::render(const Transform4x4f& parentTrans) Renderer::pushClipRect(Vector2i((int)(trans.translation().x() + mHorizontalMargin), (int)trans.translation().y()), Vector2i((int)(dim.x() - mHorizontalMargin*2), (int)dim.y())); - for(int i = startEntry; i < listCutoff; i++) + float y = 0; + for(int i = mStartEntry; i < listCutoff; i++) { typename IList::Entry& entry = mEntries.at((unsigned int)i); @@ -261,23 +281,29 @@ bool TextListComponent::input(InputConfig* config, Input input) if(config->isMappedLike("down", input)) { listInput(1); + mOneEntryUpDn = true; return true; } if(config->isMappedLike("up", input)) { listInput(-1); + mOneEntryUpDn = true; return true; } if(config->isMappedLike("rightshoulder", input)) { - listInput(10); + int delta = Settings::getInstance()->getBool("UseFullscreenPaging") ? mScreenCount : 10; + listInput(delta); + mOneEntryUpDn = false; return true; } if(config->isMappedLike("leftshoulder", input)) { - listInput(-10); + int delta = Settings::getInstance()->getBool("UseFullscreenPaging") ? mScreenCount : 10; + listInput(-delta); + mOneEntryUpDn = false; return true; } }else{ diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 2828072343..0d62f03f4d 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -354,6 +354,14 @@ void GuiMenu::openUISettings() } }); + // lb/rb uses full screen size paging instead of -10/+10 steps + auto use_fullscreen_paging = std::make_shared(mWindow); + use_fullscreen_paging->setState(Settings::getInstance()->getBool("UseFullscreenPaging")); + s->addWithLabel("USE FULL SCREEN PAGING FOR LB/RB", use_fullscreen_paging); + s->addSaveFunc([use_fullscreen_paging] { + Settings::getInstance()->setBool("UseFullscreenPaging", use_fullscreen_paging->getState()); + }); + // Optionally start in selected system auto systemfocus_list = std::make_shared< OptionListComponent >(mWindow, "START ON SYSTEM", false); systemfocus_list->add("NONE", "", Settings::getInstance()->getString("StartupSystem") == ""); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 4006cdd50c..aa57a12024 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -168,6 +168,8 @@ void Settings::setDefaults() mIntMap["ScreenOffsetY"] = 0; mIntMap["ScreenRotate"] = 0; + mBoolMap["UseFullscreenPaging"] = false; + mBoolMap["IgnoreLeadingArticles"] = false; //No spaces! Order is important! //"The A Squad" given [a,an,the] will sort as "A Squad", but given [the,a,an] will sort as "Squad" From 3b8058da7ca688231b88ec82e45450e04bf747d2 Mon Sep 17 00:00:00 2001 From: Gemba Date: Sat, 3 Apr 2021 14:15:42 +0200 Subject: [PATCH 476/603] Feature: Remove from favorites/collections with double press of Y button --- es-app/src/CollectionSystemManager.cpp | 21 ++++++++++++++++++- es-app/src/CollectionSystemManager.h | 4 +++- .../src/guis/GuiCollectionSystemsOptions.cpp | 11 +++++++++- es-app/src/guis/GuiCollectionSystemsOptions.h | 1 + es-app/src/guis/GuiInfoPopup.cpp | 14 ++++++------- es-app/src/guis/GuiInfoPopup.h | 4 +++- .../views/gamelist/ISimpleGameListView.cpp | 21 +++++++++++-------- .../src/views/gamelist/ISimpleGameListView.h | 7 +++++++ es-core/src/Settings.cpp | 1 + 9 files changed, 64 insertions(+), 20 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index cfa1eaf8e8..372c64bf41 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -4,6 +4,7 @@ #include "utils/FileSystemUtil.h" #include "utils/StringUtil.h" #include "views/gamelist/IGameListView.h" +#include "views/gamelist/ISimpleGameListView.h" #include "views/ViewController.h" #include "FileData.h" #include "FileFilterIndex.h" @@ -455,7 +456,7 @@ void CollectionSystemManager::exitEditMode() } // adds or removes a game from a specific collection -bool CollectionSystemManager::toggleGameInCollection(FileData* file) +bool CollectionSystemManager::toggleGameInCollection(FileData* file, int presscount) { if (file->getType() == GAME) { @@ -481,6 +482,9 @@ bool CollectionSystemManager::toggleGameInCollection(FileData* file) SystemData* systemViewToUpdate = getSystemToView(sysData); if (found) { + if (needDoublePress(presscount)) { + return true; + } adding = false; // if we found it, we need to remove it FileData* collectionEntry = children.at(key); @@ -521,6 +525,9 @@ bool CollectionSystemManager::toggleGameInCollection(FileData* file) } else { + if (needDoublePress(presscount)) { + return true; + } adding = false; md->set("favorite", "false"); } @@ -544,6 +551,7 @@ bool CollectionSystemManager::toggleGameInCollection(FileData* file) return false; } + SystemData* CollectionSystemManager::getSystemToView(SystemData* sys) { SystemData* systemToView = sys; @@ -1040,6 +1048,17 @@ bool CollectionSystemManager::includeFileInAutoCollections(FileData* file) return file->getName() != "kodi" && file->getSystem()->isGameSystem(); } + +bool CollectionSystemManager::needDoublePress(int presscount) { + if (Settings::getInstance()->getBool("DoublePressRemovesFromFavs") && presscount < 2) { + GuiInfoPopup* toast = new GuiInfoPopup(mWindow, "Press again to remove from '" + Utils::String::toUpper(mEditingCollection) + + "'", ISimpleGameListView::DOUBLE_PRESS_DETECTION_DURATION, 100, 200); + mWindow->setInfoPopup(toast); + return true; + } + return false; +} + std::string getCustomCollectionConfigPath(std::string collectionName) { return getCollectionsFolder() + "/custom-" + collectionName + ".cfg"; diff --git a/es-app/src/CollectionSystemManager.h b/es-app/src/CollectionSystemManager.h index 00310fc53d..29c97a2a63 100644 --- a/es-app/src/CollectionSystemManager.h +++ b/es-app/src/CollectionSystemManager.h @@ -71,7 +71,7 @@ class CollectionSystemManager void exitEditMode(); inline bool isEditing() { return mIsEditingCustom; }; inline std::string getEditingCollection() { return mEditingCollection; }; - bool toggleGameInCollection(FileData* file); + bool toggleGameInCollection(FileData* file, int presscount); SystemData* getSystemToView(SystemData* sys); void updateCollectionFolderMetadata(SystemData* sys); @@ -110,6 +110,8 @@ class CollectionSystemManager bool includeFileInAutoCollections(FileData* file); + bool needDoublePress(int presscount); + SystemData* mCustomCollectionsBundle; }; diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.cpp b/es-app/src/guis/GuiCollectionSystemsOptions.cpp index aaee708a30..d56bcab26a 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.cpp +++ b/es-app/src/guis/GuiCollectionSystemsOptions.cpp @@ -79,6 +79,11 @@ void GuiCollectionSystemsOptions::initializeMenu() toggleSystemNameInCollections->setState(Settings::getInstance()->getBool("CollectionShowSystemInfo")); mMenu.addWithLabel("SHOW SYSTEM NAME IN COLLECTIONS", toggleSystemNameInCollections); + // double press to remove from favorites + doublePressToRemoveFavs = std::make_shared(mWindow); + doublePressToRemoveFavs->setState(Settings::getInstance()->getBool("DoublePressRemovesFromFavs")); + mMenu.addWithLabel("PRESS (Y) TWICE TO REMOVE FROM FAVS./COLL.", doublePressToRemoveFavs); + if(CollectionSystemManager::get()->isEditing()) { row.elements.clear(); @@ -176,7 +181,10 @@ void GuiCollectionSystemsOptions::applySettings() bool prevBundle = Settings::getInstance()->getBool("UseCustomCollectionsSystem"); bool prevShow = Settings::getInstance()->getBool("CollectionShowSystemInfo"); bool outShow = toggleSystemNameInCollections->getState(); - bool needUpdateSettings = prevAuto != outAuto || prevCustom != outCustom || outSort != prevSort || outBundle != prevBundle || prevShow != outShow ; + bool prevDblPressRmFavs = Settings::getInstance()->getBool("DoublePressRemovesFromFavs"); + bool outDblPressRmFavs = doublePressToRemoveFavs->getState(); + bool needUpdateSettings = prevAuto != outAuto || prevCustom != outCustom || outSort != prevSort || outBundle != prevBundle + || prevShow != outShow || prevDblPressRmFavs != outDblPressRmFavs; if (needUpdateSettings) { updateSettings(outAuto, outCustom); @@ -192,6 +200,7 @@ void GuiCollectionSystemsOptions::updateSettings(std::string newAutoSettings, st Settings::getInstance()->setBool("SortAllSystems", sortAllSystemsSwitch->getState()); Settings::getInstance()->setBool("UseCustomCollectionsSystem", bundleCustomCollections->getState()); Settings::getInstance()->setBool("CollectionShowSystemInfo", toggleSystemNameInCollections->getState()); + Settings::getInstance()->setBool("DoublePressRemovesFromFavs", doublePressToRemoveFavs->getState()); Settings::getInstance()->saveFile(); CollectionSystemManager::get()->loadEnabledListFromSettings(); CollectionSystemManager::get()->updateSystemsList(); diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.h b/es-app/src/guis/GuiCollectionSystemsOptions.h index dd19bf9626..bc2a9bae83 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.h +++ b/es-app/src/guis/GuiCollectionSystemsOptions.h @@ -31,6 +31,7 @@ class GuiCollectionSystemsOptions : public GuiComponent std::shared_ptr sortAllSystemsSwitch; std::shared_ptr bundleCustomCollections; std::shared_ptr toggleSystemNameInCollections; + std::shared_ptr doublePressToRemoveFavs; MenuComponent mMenu; SystemData* mSystem; }; diff --git a/es-app/src/guis/GuiInfoPopup.cpp b/es-app/src/guis/GuiInfoPopup.cpp index e759e27f72..d145b6a92b 100644 --- a/es-app/src/guis/GuiInfoPopup.cpp +++ b/es-app/src/guis/GuiInfoPopup.cpp @@ -5,8 +5,8 @@ #include "components/TextComponent.h" #include -GuiInfoPopup::GuiInfoPopup(Window* window, std::string message, int duration) : - GuiComponent(window), mMessage(message), mDuration(duration), running(true) +GuiInfoPopup::GuiInfoPopup(Window* window, std::string message, int duration, int fadein, int fadeout) : + GuiComponent(window), mMessage(message), mDuration(duration), mFadein(fadein), mFadeout(fadeout), running(true) { mFrame = new NinePatchComponent(window); float maxWidth = Renderer::getScreenWidth() * 0.9f; @@ -96,16 +96,16 @@ bool GuiInfoPopup::updateState() running = false; return false; } - else if (curTime - mStartTime <= 500) { - alpha = ((curTime - mStartTime)*255/500); + else if (curTime - mStartTime <= mFadein) { + alpha = (curTime - mStartTime) * 255 / mFadein; } - else if (curTime - mStartTime < mDuration - 500) + else if (curTime - mStartTime < mDuration - mFadeout) { alpha = 255; } else { - alpha = ((-(curTime - mStartTime - mDuration)*255)/500); + alpha = -(curTime - mStartTime - mDuration) * 255 / mFadeout; } mGrid->setOpacity((unsigned char)alpha); @@ -113,4 +113,4 @@ bool GuiInfoPopup::updateState() mFrame->setEdgeColor(0xFFFFFF00 | (unsigned char)(alpha)); mFrame->setCenterColor(0xFFFFFF00 | (unsigned char)(alpha)); return true; -} \ No newline at end of file +} diff --git a/es-app/src/guis/GuiInfoPopup.h b/es-app/src/guis/GuiInfoPopup.h index 8d4d3cfd17..1bbe005e21 100644 --- a/es-app/src/guis/GuiInfoPopup.h +++ b/es-app/src/guis/GuiInfoPopup.h @@ -11,13 +11,15 @@ class NinePatchComponent; class GuiInfoPopup : public GuiComponent, public Window::InfoPopup { public: - GuiInfoPopup(Window* window, std::string message, int duration); + GuiInfoPopup(Window* window, std::string message, int duration, int fadein = 500, int fadeout = 500); ~GuiInfoPopup(); void render(const Transform4x4f& parentTrans) override; inline void stop() { running = false; }; private: std::string mMessage; int mDuration; + int mFadein; + int mFadeout; int alpha; bool updateState(); int mStartTime; diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 7d361fc940..5fa612b342 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -6,6 +6,7 @@ #include "Settings.h" #include "Sound.h" #include "SystemData.h" +#include ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGameListView(window, root), mHeaderText(window), mHeaderImage(window), mBackground(window) @@ -150,7 +151,8 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) { if(mRoot->getSystem()->isGameSystem()) { - if(CollectionSystemManager::get()->toggleGameInCollection(getCursor())) + int presscount = getPressCountInDuration(); + if (CollectionSystemManager::get()->toggleGameInCollection(getCursor(), presscount)) { return true; } @@ -162,11 +164,12 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) } - - - - - - - - +int ISimpleGameListView::getPressCountInDuration() { + Uint32 now = SDL_GetTicks(); + if (now - firstPressMs < DOUBLE_PRESS_DETECTION_DURATION) { + return 2; + } else { + firstPressMs = now; + return 1; + } +} diff --git a/es-app/src/views/gamelist/ISimpleGameListView.h b/es-app/src/views/gamelist/ISimpleGameListView.h index fd91097b31..776ac7e27c 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.h +++ b/es-app/src/views/gamelist/ISimpleGameListView.h @@ -1,3 +1,4 @@ + #pragma once #ifndef ES_APP_VIEWS_GAME_LIST_ISIMPLE_GAME_LIST_VIEW_H #define ES_APP_VIEWS_GAME_LIST_ISIMPLE_GAME_LIST_VIEW_H @@ -27,6 +28,8 @@ class ISimpleGameListView : public IGameListView virtual bool input(InputConfig* config, Input input) override; virtual void launch(FileData* game) = 0; + static const int DOUBLE_PRESS_DETECTION_DURATION = 1500; // millis + protected: static const int DESCRIPTION_SCROLL_DELAY = 5 * 1000; // five secs @@ -41,6 +44,10 @@ class ISimpleGameListView : public IGameListView std::vector mThemeExtras; std::stack mCursorStack; + +private: + int getPressCountInDuration(); + Uint32 firstPressMs = 0; }; #endif // ES_APP_VIEWS_GAME_LIST_ISIMPLE_GAME_LIST_VIEW_H diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 4006cdd50c..c0e403abfe 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -71,6 +71,7 @@ void Settings::setDefaults() mBoolMap["EnableSounds"] = true; mBoolMap["ShowHelpPrompts"] = true; + mBoolMap["DoublePressRemovesFromFavs"] = false; mBoolMap["ScrapeRatings"] = true; mBoolMap["IgnoreGamelist"] = false; mBoolMap["HideConsole"] = true; From f85ac442579bfc3d061f0a63fcacfcc2faab6ace Mon Sep 17 00:00:00 2001 From: Gemba Date: Mon, 12 Apr 2021 21:47:30 +0200 Subject: [PATCH 477/603] CLI option --no-confirm-quit for skipping the confirm dialog on quit actions --- es-app/src/guis/GuiMenu.cpp | 96 +++++++++++++++++++++++-------------- es-app/src/main.cpp | 4 ++ es-core/src/Settings.cpp | 2 + 3 files changed, 66 insertions(+), 36 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 2828072343..7aeebafe79 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -509,62 +509,86 @@ void GuiMenu::openQuitMenu() Window* window = mWindow; + // command line switch + bool confirm_quit = Settings::getInstance()->getBool("ConfirmQuit"); + ComponentListRow row; if (UIModeController::getInstance()->isUIModeFull()) { - row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", - [] { - Scripting::fireEvent("quit"); - if(quitES(QuitMode::RESTART) != 0) - LOG(LogWarning) << "Restart terminated with non-zero result!"; - }, "NO", nullptr)); - }); + auto static restart_es_fx = []() { + Scripting::fireEvent("quit"); + if (quitES(QuitMode::RESTART)) { + LOG(LogWarning) << "Restart terminated with non-zero result!"; + } + }; + + if (confirm_quit) { + row.makeAcceptInputHandler([window] { + window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", restart_es_fx, "NO", nullptr)); + }); + } else { + row.makeAcceptInputHandler(restart_es_fx); + } row.addElement(std::make_shared(window, "RESTART EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); s->addRow(row); - - if(Settings::getInstance()->getBool("ShowExit")) { + auto static quit_es_fx = [] { + Scripting::fireEvent("quit"); + quitES(); + }; + row.elements.clear(); - row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBox(window, "REALLY QUIT?", "YES", - [] { - Scripting::fireEvent("quit"); - quitES(); - }, "NO", nullptr)); - }); + if (confirm_quit) { + row.makeAcceptInputHandler([window] { + window->pushGui(new GuiMsgBox(window, "REALLY QUIT?", "YES", quit_es_fx, "NO", nullptr)); + }); + } else { + row.makeAcceptInputHandler(quit_es_fx); + } row.addElement(std::make_shared(window, "QUIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); s->addRow(row); } } + + auto static reboot_sys_fx = [] { + Scripting::fireEvent("quit", "reboot"); + Scripting::fireEvent("reboot"); + if (quitES(QuitMode::REBOOT)) { + LOG(LogWarning) << "Restart terminated with non-zero result!"; + } + }; + row.elements.clear(); - row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", - [] { - Scripting::fireEvent("quit", "reboot"); - Scripting::fireEvent("reboot"); - if (quitES(QuitMode::REBOOT) != 0) - LOG(LogWarning) << "Restart terminated with non-zero result!"; - }, "NO", nullptr)); - }); + if (confirm_quit) { + row.makeAcceptInputHandler([window] { + window->pushGui(new GuiMsgBox(window, "REALLY RESTART?", "YES", {reboot_sys_fx}, "NO", nullptr)); + }); + } else { + row.makeAcceptInputHandler(reboot_sys_fx); + } row.addElement(std::make_shared(window, "RESTART SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); s->addRow(row); + auto static shutdown_sys_fx = [] { + Scripting::fireEvent("quit", "shutdown"); + Scripting::fireEvent("shutdown"); + if (quitES(QuitMode::SHUTDOWN)) { + LOG(LogWarning) << "Shutdown terminated with non-zero result!"; + } + }; + row.elements.clear(); - row.makeAcceptInputHandler([window] { - window->pushGui(new GuiMsgBox(window, "REALLY SHUTDOWN?", "YES", - [] { - Scripting::fireEvent("quit", "shutdown"); - Scripting::fireEvent("shutdown"); - if (quitES(QuitMode::SHUTDOWN) != 0) - LOG(LogWarning) << "Shutdown terminated with non-zero result!"; - }, "NO", nullptr)); - }); + if (confirm_quit) { + row.makeAcceptInputHandler([window] { + window->pushGui(new GuiMsgBox(window, "REALLY SHUTDOWN?", "YES", shutdown_sys_fx, "NO", nullptr)); + }); + } else { + row.makeAcceptInputHandler(shutdown_sys_fx); + } row.addElement(std::make_shared(window, "SHUTDOWN SYSTEM", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); s->addRow(row); - mWindow->pushGui(s); } diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 9cec9b0c64..c6b64ed7d5 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -116,6 +116,9 @@ bool parseArgs(int argc, char* argv[]) }else if(strcmp(argv[i], "--no-exit") == 0) { Settings::getInstance()->setBool("ShowExit", false); + }else if(strcmp(argv[i], "--no-confirm-quit") == 0) + { + Settings::getInstance()->setBool("ConfirmQuit", false); }else if(strcmp(argv[i], "--no-splash") == 0) { Settings::getInstance()->setBool("SplashScreen", false); @@ -179,6 +182,7 @@ bool parseArgs(int argc, char* argv[]) "--ignore-gamelist ignore the gamelist (useful for troubleshooting)\n" "--draw-framerate display the framerate\n" "--no-exit don't show the exit option in the menu\n" + "--no-confirm-quit omit confirm dialog on actions of quit menu\n" "--no-splash don't show the splash screen\n" "--debug more logging, show console on Windows\n" "--scrape scrape using command line interface\n" diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index c0e403abfe..ebd9abb2c5 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -22,6 +22,7 @@ std::vector settings_dont_save { { "IgnoreGamelist" }, { "HideConsole" }, { "ShowExit" }, + { "ConfirmQuit" }, { "SplashScreen" }, { "SplashScreenProgress" }, { "VSync" }, @@ -60,6 +61,7 @@ void Settings::setDefaults() mBoolMap["ShowHiddenFiles"] = false; mBoolMap["DrawFramerate"] = false; mBoolMap["ShowExit"] = true; + mBoolMap["ConfirmQuit"] = true; mBoolMap["FullscreenBorderless"] = false; mBoolMap["Windowed"] = false; mBoolMap["SplashScreen"] = true; From 29223d9a2e9b6cee0b8487c04f0a7943540fbccc Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 23 Nov 2020 21:38:43 +0100 Subject: [PATCH 478/603] ProfilingUtil --- CMakeLists.txt | 5 + es-app/src/main.cpp | 3 + es-core/CMakeLists.txt | 2 + es-core/src/utils/ProfilingUtil.cpp | 225 ++++++++++++++++++++++++++++ es-core/src/utils/ProfilingUtil.h | 87 +++++++++++ 5 files changed, 322 insertions(+) create mode 100644 es-core/src/utils/ProfilingUtil.cpp create mode 100644 es-core/src/utils/ProfilingUtil.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 934f8520f6..eb9f403ccf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,7 @@ option(GLES "Set to ON if targeting Embedded OpenGL" ${GLES}) option(GL "Set to ON if targeting Desktop OpenGL" ${GL}) option(RPI "Set to ON to enable the Raspberry PI video player (omxplayer) and audio options" ${RPI}) option(CEC "Set to ON to enable CEC" ${CEC}) +option(PROFILING "Set to ON to enable profiling" ${PROFILING}) # GLES implementation overrides option(USE_MESA_GLES "Set to ON to select the MESA OpenGL ES driver" ${USE_MESA_GLES}) @@ -113,6 +114,10 @@ if(DEFINED libCEC_FOUND) add_definitions(-DHAVE_LIBCEC) endif() +if(PROFILING) + add_definitions(-DUSE_PROFILING) +endif() + #------------------------------------------------------------------------------- if(MSVC) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 9cec9b0c64..26faeb2191 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -4,6 +4,7 @@ #include "guis/GuiDetectDevice.h" #include "guis/GuiMsgBox.h" #include "utils/FileSystemUtil.h" +#include "utils/ProfilingUtil.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" #include "EmulationStation.h" @@ -460,6 +461,8 @@ int main(int argc, char* argv[]) processQuitMode(); + ProfileDump(); + LOG(LogInfo) << "EmulationStation cleanly shutting down."; return 0; diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index ebd97ab13c..c22459fd7c 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -75,6 +75,7 @@ set(CORE_HEADERS # Utils ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/ProfilingUtil.h ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.h ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/ThreadPool.h ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.h @@ -154,6 +155,7 @@ set(CORE_SOURCES # Utils ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/FileSystemUtil.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/ProfilingUtil.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/StringUtil.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/ThreadPool.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.cpp diff --git a/es-core/src/utils/ProfilingUtil.cpp b/es-core/src/utils/ProfilingUtil.cpp new file mode 100644 index 0000000000..0e4a290980 --- /dev/null +++ b/es-core/src/utils/ProfilingUtil.cpp @@ -0,0 +1,225 @@ + +#if defined(USE_PROFILING) + +#include "utils/ProfilingUtil.h" + +#include "math/Misc.h" +#include "Log.h" + +#include + +#if defined(_WIN32) +// because windows... +#include +#define snprintf _snprintf +#else // _WIN32 +#include +#endif // !_WIN32 + +////////////////////////////////////////////////////////////////////////// + +namespace Utils +{ + namespace Profiling + { + std::vector profiles; + std::vector threadStacks; + std::recursive_mutex mutex; + unsigned int counter = 0; + +////////////////////////////////////////////////////////////////////////// + + static double getFrequency( void ) + { +#if defined(_WIN32) + uint64_t qpFrequency; + QueryPerformanceFrequency((LARGE_INTEGER*)&qpFrequency); + return 1.0 / qpFrequency; +#else // _WIN32 + return 1.0 / 1000000.0; +#endif // _WIN32 + } // getFrequency + +////////////////////////////////////////////////////////////////////////// + + static uint64_t getCounter( void ) + { +#if defined(_WIN32) + uint64_t qpCounter; + QueryPerformanceCounter((LARGE_INTEGER*)&qpCounter); + return qpCounter; +#else // _WIN32 + timeval tv; + gettimeofday(&tv, nullptr); + return static_cast(tv.tv_sec) * 1000000u + static_cast(tv.tv_usec); +#endif // !_WIN32 + } // getCounter + +////////////////////////////////////////////////////////////////////////// + + static double getTime(void) + { + return getCounter() * getFrequency(); + + } // getTime + +////////////////////////////////////////////////////////////////////////// + + static bool _sortProfiles(const Profile* _a, const Profile* _b) + { + return _a->message < _b->message; + + } // _sortProfiles + +////////////////////////////////////////////////////////////////////////// + + unsigned int _generateIndex(void) + { + mutex.lock(); + unsigned int index = counter++; + mutex.unlock(); + + return index; + + } // _generateIndex + +////////////////////////////////////////////////////////////////////////// + + void _begin(const unsigned int _index, const std::string& _message) + { + const std::thread::id threadId = std::this_thread::get_id(); + ThreadStack* threadStack = nullptr; + Profile* profile = nullptr; + + mutex.lock(); + + for( ThreadStack* threadStackIt : threadStacks ) + if(threadStackIt->id == threadId) + threadStack = threadStackIt; + + if(!threadStack) + { + threadStack = new ThreadStack; + threadStack->id = threadId; + + threadStacks.push_back(threadStack); + } + + while(profiles.size() < counter) + { + profile = new Profile; + profile->message = ""; + profile->timeBegin = 0.0; + profile->timeTotal = 0.0; + profile->timeExternal = 0.0; + profile->timeMin = 999999999.0; + profile->timeMax = 0.0; + profile->callCount = 0; + + profiles.push_back(profile); + } + + profile = profiles[_index]; + + threadStack->stack.push(profile); + + profile->message = _message; + profile->timeBegin = getTime(); + + mutex.unlock(); + + } // _begin + +////////////////////////////////////////////////////////////////////////// + + int _end(void) + { + const double timeEnd = getTime(); + const std::thread::id threadId = std::this_thread::get_id(); + ThreadStack* threadStack = nullptr; + Profile* profile = nullptr; + + mutex.lock(); + + for( ThreadStack* threadStackIt : threadStacks ) + if(threadStackIt->id == threadId) + threadStack = threadStackIt; + + profile = threadStack->stack.top(); + threadStack->stack.pop(); + + // timer wrapped (~24 days) + if(timeEnd < profile->timeBegin) + { + mutex.unlock(); + return 0; + } + + const double timeElapsed = timeEnd - profile->timeBegin; + + profile->timeTotal += timeElapsed; + profile->timeMin = (profile->timeMin < timeElapsed) ? profile->timeMin : timeElapsed; + profile->timeMax = (profile->timeMax > timeElapsed) ? profile->timeMax : timeElapsed; + profile->callCount++; + + if(!threadStack->stack.empty()) + threadStack->stack.top()->timeExternal += timeElapsed; + + mutex.unlock(); + + return timeElapsed; + + } // _end + +////////////////////////////////////////////////////////////////////////// + + void _dump(void) + { + std::sort(profiles.begin(), profiles.end(), _sortProfiles); + + if(!profiles.empty()) + { + char buffer[1024]; + int longestMessage = 0; + + for(Profile* profile : profiles) + longestMessage = Math::max(longestMessage, (int)profile->message.length()); + + char format1[1024]; + snprintf(format1, 1024, "%%-%ds\t%%12s\t%%12s\t%%12s\t%%12s\t%%12s\t%%20s\t%%20s", longestMessage); + + snprintf(buffer, 1024, format1, "Message", "Calls", "Total Time", "Avg Time", "Min Time", "Max Time", "Internal Total Time", "Internal Avg Time"); + LOG(LogDebug) << buffer; + + char format2[1024]; + snprintf(format2, 1024, "%%-%ds\t%%12d\t%%12.6f\t%%12.6f\t%%12.6f\t%%12.6f\t%%20.6f\t%%20.6f", longestMessage); + + for(Profile* profile : profiles) + { + if(profile->message.length()) + { + snprintf(buffer, 1024, format2, profile->message.c_str(), profile->callCount, profile->timeTotal, profile->timeTotal / profile->callCount, profile->timeMin, profile->timeMax, profile->timeTotal - profile->timeExternal, (profile->timeTotal - profile->timeExternal) / profile->callCount); + LOG(LogDebug) << buffer; + } + + delete profile; + } + + profiles.clear(); + } + + if(!threadStacks.empty()) + { + for(ThreadStack* threadStack : threadStacks) + delete threadStack; + + threadStacks.clear(); + } + + } // _dump + + } // Profiling:: + +} // Utils:: + +#endif // USE_PROFILING diff --git a/es-core/src/utils/ProfilingUtil.h b/es-core/src/utils/ProfilingUtil.h new file mode 100644 index 0000000000..0cdbae0750 --- /dev/null +++ b/es-core/src/utils/ProfilingUtil.h @@ -0,0 +1,87 @@ +#pragma once +#ifndef ES_CORE_UTILS_PROFILING_UTIL_H +#define ES_CORE_UTILS_PROFILING_UTIL_H + +#if defined(USE_PROFILING) + +#include +#include +#include +#include +#include + +namespace Utils +{ + namespace Profiling + { + struct Profile + { + std::string message; + double timeBegin; + double timeTotal; + double timeExternal; + double timeMin; + double timeMax; + unsigned int callCount; + + }; // Profile + + struct ThreadStack + { + std::stack stack; + std::thread::id id; + + }; // ThreadStack + + extern std::vector profiles; + extern std::vector threadStacks; + extern std::recursive_mutex mutex; + extern unsigned int counter; + +////////////////////////////////////////////////////////////////////////// + + unsigned int _generateIndex(void); + void _begin (const unsigned int _index, const std::string& _message); + int _end (void); + void _dump (void); + +////////////////////////////////////////////////////////////////////////// + + class Scope + { + public: + + Scope(const unsigned int _index, const std::string& _message) { _begin(_index, _message); } + ~Scope(void) { _end(); } + + }; // Scope + + }; // Profiling:: + +} // Utils:: + +#define _profilingUnique(_name, _line) _name ## _line +#define _profilingUniqueIndex(_line) _profilingUnique(uniqueIndex, _line) +#define _profilingUniqueScope(_line) _profilingUnique(uniqueScope, _line) +#define __profilingUniqueIndex _profilingUniqueIndex(__LINE__) +#define __profilingUniqueScope _profilingUniqueScope(__LINE__) + +#define ProfileBegin(_message) static const unsigned int __profilingUniqueIndex = Utils::Profiling::_generateIndex(); Utils::Profiling::_begin(__profilingUniqueIndex, _message) +#define ProfileEnd() Utils::Profiling::_end() +#define ProfileScope(_message) static const unsigned int __profilingUniqueIndex = Utils::Profiling::_generateIndex(); const Utils::Profiling::Scope __profilingUniqueScope(__profilingUniqueIndex, _message) +#define ProfileDump() Utils::Profiling::_dump() + +#else // USE_PROFILING + +#define ProfileBegin(_message) +#define ProfileEnd() +#define ProfileScope(_message) +#define ProfileDump() + +#endif // !USE_PROFILING + +#if !defined(__PRETTY_FUNCTION__) +#define __PRETTY_FUNCTION__ __FUNCTION__ +#endif // !__PRETTY_FUNCTION__ + +#endif // ES_CORE_UTILS_TIME_UTIL_H From e7ae8e5a79bd6150e5b10e7ecd31321e2883de40 Mon Sep 17 00:00:00 2001 From: Ryan McClelland Date: Thu, 6 May 2021 00:32:16 -0700 Subject: [PATCH 479/603] fix pokemon mini default platform name --- es-app/src/PlatformId.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 5081fff53d..7686f3dbef 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -39,7 +39,7 @@ namespace PlatformIds "nds", // nintendo DS "fds", // Famicom Disk System "nes", // nintendo entertainment system - "pokemonmini", + "pokemini", "channelf", // Fairchild ChannelF "gb", // game boy "gba", // game boy advance From 3c4117bc5e379c54d05a7c7be3aad3453b1dc01f Mon Sep 17 00:00:00 2001 From: Ryan McClelland Date: Sun, 9 May 2021 20:30:11 -0700 Subject: [PATCH 480/603] fix issue with svg cropping the width --- es-core/src/resources/TextureData.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index efe4bfb585..fbe0010a19 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -76,7 +76,8 @@ bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length unsigned char* dataRGBA = new unsigned char[mWidth * mHeight * 4]; NSVGrasterizer* rast = nsvgCreateRasterizer(); - nsvgRasterize(rast, svgImage, 0, 0, mHeight / svgImage->height, dataRGBA, (int)mWidth, (int)mHeight, (int)mWidth * 4); + float scale = Math::min(mHeight / svgImage->height, mWidth / svgImage->width); + nsvgRasterize(rast, svgImage, 0, 0, scale, dataRGBA, (int)mWidth, (int)mHeight, (int)mWidth * 4); nsvgDeleteRasterizer(rast); ImageIO::flipPixelsVert(dataRGBA, mWidth, mHeight); From fe650965a0544cc6aae97efb6a608e8b97ee7322 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Sun, 16 May 2021 07:24:41 +0100 Subject: [PATCH 481/603] input: change how startup events are discarded Use a different approach for discarding any queued input events during startup. We want to make sure that when the UI is shown, there are no pending events that could start a game/open the menu/switch system/etc. The new code allows also to: * ignore input events during splashscreen * handle the case when a keyboard/keyboard type controller is used * allow the handling of SDL_JOYDEVICEADDED events (which were discarded with `SDL_JoystickEventState(SDL_DISABLE) --- es-app/src/main.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 26faeb2191..999c69740c 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -365,9 +365,6 @@ int main(int argc, char* argv[]) return run_scraper_cmdline(); } - //dont generate joystick events while we're loading (hopefully fixes "automatically started emulator" bug) - SDL_JoystickEventState(SDL_DISABLE); - // preload what we can right away instead of waiting for the user to select it // this makes for no delays when accessing content, but a longer startup time ViewController::get()->preload(); @@ -386,8 +383,15 @@ int main(int argc, char* argv[]) } } - //generate joystick events since we're done loading - SDL_JoystickEventState(SDL_ENABLE); + // flush any queued events before showing the UI and starting the input handling loop + const Uint32 event_list[] = { + SDL_JOYAXISMOTION, SDL_JOYBALLMOTION, SDL_JOYHATMOTION, SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP, + SDL_KEYDOWN, SDL_KEYUP + }; + SDL_PumpEvents(); + for(Uint32 ev_type: event_list) { + SDL_FlushEvent(ev_type); + } int lastTime = SDL_GetTicks(); int ps_time = SDL_GetTicks(); From f6ae6e09c1482e6d6c1ed221a75ef099fd8f1e6a Mon Sep 17 00:00:00 2001 From: EnsignRutherford Date: Mon, 17 May 2021 11:29:14 -0400 Subject: [PATCH 482/603] Changes necessary to implement Scripting events for "game-select", "system-select" and "screeensaver-game-select". --- es-app/src/SystemScreenSaver.cpp | 12 ++++++++++++ es-app/src/views/SystemView.cpp | 2 ++ es-app/src/views/ViewController.cpp | 3 +++ es-app/src/views/gamelist/ISimpleGameListView.cpp | 7 +++++++ es-core/src/Scripting.cpp | 5 ++++- es-core/src/Scripting.h | 2 +- 6 files changed, 29 insertions(+), 2 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 4236f5ca08..b18dedcfc2 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -12,6 +12,7 @@ #include "FileFilterIndex.h" #include "Log.h" #include "PowerSaver.h" +#include "Scripting.h" #include "Sound.h" #include "SystemData.h" #include @@ -106,6 +107,9 @@ void SystemScreenSaver::startScreenSaver() #else mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); #endif + if (mCurrentGame != NULL) { + Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName()); + } mVideoScreensaver->topWindow(true); mVideoScreensaver->setOrigin(0.5f, 0.5f); @@ -183,9 +187,17 @@ void SystemScreenSaver::startScreenSaver() PowerSaver::runningScreenSaver(true); mTimer = 0; + if (mCurrentGame != NULL) { + Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName()); + } return; } // No videos. Just use a standard screensaver + if (mCurrentGame != NULL) { + Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName()); + } else { + Scripting::fireEvent("screensaver-game-select"); + } mState = STATE_SCREENSAVER_ACTIVE; mCurrentGame = NULL; } diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 6ca4511c63..d01c432b27 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -5,6 +5,7 @@ #include "views/UIModeController.h" #include "views/ViewController.h" #include "Log.h" +#include "Scripting.h" #include "Settings.h" #include "SystemData.h" #include "Window.h" @@ -195,6 +196,7 @@ bool SystemView::input(InputConfig* config, Input input) config->isMappedLike("up", input) || config->isMappedLike("down", input)) listInput(0); + Scripting::fireEvent("system-select", this->IList::getSelected()->getName(), "input"); if(!UIModeController::getInstance()->isUIModeKid() && config->isMappedTo("select", input) && Settings::getInstance()->getBool("ScreenSaverControls")) { mWindow->startScreenSaver(); diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 173e533666..53a071a580 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -13,6 +13,7 @@ #include "views/UIModeController.h" #include "FileFilterIndex.h" #include "Log.h" +#include "Scripting.h" #include "Settings.h" #include "SystemData.h" #include "Window.h" @@ -53,6 +54,7 @@ void ViewController::goToStart() if ((*it)->getName() == requestedSystem) { goToGameList(*it); + Scripting::fireEvent("system-select", requestedSystem, "requestedsystem"); return; } } @@ -61,6 +63,7 @@ void ViewController::goToStart() Settings::getInstance()->setString("StartupSystem", ""); } goToSystemView(SystemData::sSystemVector.at(0)); + Scripting::fireEvent("system-select", SystemData::sSystemVector.at(0)->getName(), "gotostart"); } void ViewController::ReloadAndGoToStart() diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 5fa612b342..ffd31f3c36 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -3,6 +3,7 @@ #include "views/UIModeController.h" #include "views/ViewController.h" #include "CollectionSystemManager.h" +#include "Scripting.h" #include "Settings.h" #include "Sound.h" #include "SystemData.h" @@ -160,6 +161,12 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) } } + FileData* cursor = getCursor(); + SystemData* system = this->mRoot->getSystem(); + if (system != NULL) { + Scripting::fireEvent("game-select", system->getName(), cursor->getFileName(), cursor->getName()); + } + return IGameListView::input(config, input); } diff --git a/es-core/src/Scripting.cpp b/es-core/src/Scripting.cpp index 63cd3cc848..2fb8bd8f53 100644 --- a/es-core/src/Scripting.cpp +++ b/es-core/src/Scripting.cpp @@ -5,7 +5,7 @@ namespace Scripting { - int fireEvent(const std::string& eventName, const std::string& arg1, const std::string& arg2) + int fireEvent(const std::string& eventName, const std::string& arg1, const std::string& arg2, const std::string& arg3) { LOG(LogDebug) << "fireEvent: " << eventName << " " << arg1 << " " << arg2; @@ -37,6 +37,9 @@ namespace Scripting script += " \"" + arg1 + "\""; if (arg2.length() > 0) { script += " \"" + arg2 + "\""; + if (arg3.length() > 0) { + script += " \"" + arg3 + "\""; + } } } LOG(LogDebug) << "executing: " << script; diff --git a/es-core/src/Scripting.h b/es-core/src/Scripting.h index ad0d85294a..e8bd151236 100644 --- a/es-core/src/Scripting.h +++ b/es-core/src/Scripting.h @@ -6,7 +6,7 @@ namespace Scripting { - int fireEvent(const std::string& eventName, const std::string& arg1="", const std::string& arg2=""); + int fireEvent(const std::string& eventName, const std::string& arg1="", const std::string& arg2="", const std::string& arg3=""); } // Scripting:: #endif //ES_CORE_SCRIPTING_H From 077db00d598e52c1fe981adabc247de3e5b2eb29 Mon Sep 17 00:00:00 2001 From: EnsignRutherford Date: Tue, 18 May 2021 12:58:22 -0400 Subject: [PATCH 483/603] Added an additional optional parameter to "Scripting" module and added code to fire an event when ES is configured to bring up a startup system. --- es-app/src/views/ViewController.cpp | 7 ++++++- es-core/src/Scripting.cpp | 7 +++++-- es-core/src/Scripting.h | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 53a071a580..3a518d4454 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -54,7 +54,12 @@ void ViewController::goToStart() if ((*it)->getName() == requestedSystem) { goToGameList(*it); - Scripting::fireEvent("system-select", requestedSystem, "requestedsystem"); + Scripting::fireEvent("system-select", requestedSystem, "requestedsystem"); + FileData* cursor = getGameListView(*it)->getCursor(); + if (cursor != NULL) + { + Scripting::fireEvent("game-select", requestedSystem, cursor->getFileName(), cursor->getName(), "requestedgame"); + } return; } } diff --git a/es-core/src/Scripting.cpp b/es-core/src/Scripting.cpp index 2fb8bd8f53..2a44ab8394 100644 --- a/es-core/src/Scripting.cpp +++ b/es-core/src/Scripting.cpp @@ -5,7 +5,7 @@ namespace Scripting { - int fireEvent(const std::string& eventName, const std::string& arg1, const std::string& arg2, const std::string& arg3) + int fireEvent(const std::string& eventName, const std::string& arg1, const std::string& arg2, const std::string& arg3, const std::string& arg4) { LOG(LogDebug) << "fireEvent: " << eventName << " " << arg1 << " " << arg2; @@ -39,7 +39,10 @@ namespace Scripting script += " \"" + arg2 + "\""; if (arg3.length() > 0) { script += " \"" + arg3 + "\""; - } + if (arg4.length() > 0) { + script += " \"" + arg4 + "\""; + } + } } } LOG(LogDebug) << "executing: " << script; diff --git a/es-core/src/Scripting.h b/es-core/src/Scripting.h index e8bd151236..3ad80512b0 100644 --- a/es-core/src/Scripting.h +++ b/es-core/src/Scripting.h @@ -6,7 +6,7 @@ namespace Scripting { - int fireEvent(const std::string& eventName, const std::string& arg1="", const std::string& arg2="", const std::string& arg3=""); + int fireEvent(const std::string& eventName, const std::string& arg1="", const std::string& arg2="", const std::string& arg3="", const std::string& arg4=""); } // Scripting:: #endif //ES_CORE_SCRIPTING_H From 72320b1cbe04c79b85530db4a0e81d3a395a9406 Mon Sep 17 00:00:00 2001 From: EnsignRutherford Date: Thu, 20 May 2021 08:35:22 -0400 Subject: [PATCH 484/603] Added "NULL" string to the parameters to the scripting if there are no games available. This allows the bash scripts to pick up this event and perform an action as opposed to not triggering the event. --- es-app/src/SystemScreenSaver.cpp | 12 ++++++++---- es-app/src/views/ViewController.cpp | 4 ++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index b18dedcfc2..eac799fe72 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -108,7 +108,9 @@ void SystemScreenSaver::startScreenSaver() mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); #endif if (mCurrentGame != NULL) { - Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName()); + Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName(), "randomvideo"); + } else { + Scripting::fireEvent("screensaver-game-select", "NULL", "NULL", "NULL", "randomvideo"); } mVideoScreensaver->topWindow(true); @@ -188,15 +190,17 @@ void SystemScreenSaver::startScreenSaver() PowerSaver::runningScreenSaver(true); mTimer = 0; if (mCurrentGame != NULL) { - Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName()); + Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName(), "slideshow"); + } else { + Scripting::fireEvent("screensaver-game-select", "NULL", "NULL", "NULL", "slideshow"); } return; } // No videos. Just use a standard screensaver if (mCurrentGame != NULL) { - Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName()); + Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName(), "novideo"); } else { - Scripting::fireEvent("screensaver-game-select"); + Scripting::fireEvent("screensaver-game-select", "NULL", "NULL", "NULL", "novideo"); } mState = STATE_SCREENSAVER_ACTIVE; mCurrentGame = NULL; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 3a518d4454..b109ab3d04 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -60,6 +60,10 @@ void ViewController::goToStart() { Scripting::fireEvent("game-select", requestedSystem, cursor->getFileName(), cursor->getName(), "requestedgame"); } + else + { + Scripting::fireEvent("game-select", "NULL", "NULL", "NULL", "requestedgame"); + } return; } } From 1bc75ed9b646b624acd7fde45ea015c51693bacf Mon Sep 17 00:00:00 2001 From: Ryan McClelland Date: Thu, 20 May 2021 23:28:36 -0700 Subject: [PATCH 485/603] handle error while reading file tellg can report -1 if there was an error while reading the file, because it was casted to a size_t type which is unsigned, this will become 18446744073709551615. It will then attempt to allocate that many bytes and of course crash. This will just return an empty resource if there was an error. --- es-core/src/resources/ResourceManager.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index 5814b781bf..9353dda703 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -68,15 +68,21 @@ ResourceData ResourceManager::loadFile(const std::string& path) const std::ifstream stream(path, std::ios::binary); stream.seekg(0, stream.end); - size_t size = (size_t)stream.tellg(); + std::ifstream::pos_type size = stream.tellg(); stream.seekg(0, stream.beg); + if(size>0) + { + //supply custom deleter to properly free array + std::shared_ptr data(new unsigned char[size], array_deleter); + stream.read((char*)data.get(), size); + stream.close(); - //supply custom deleter to properly free array - std::shared_ptr data(new unsigned char[size], array_deleter); - stream.read((char*)data.get(), size); - stream.close(); + ResourceData ret = {data, (size_t)size}; + return ret; + } - ResourceData ret = {data, size}; + //error reading file, return an "empty" ResourceData + ResourceData ret = {NULL, 0}; return ret; } From 7cdde12f3f52f142eff754d240fde4fe0b2d9536 Mon Sep 17 00:00:00 2001 From: EnsignRutherford Date: Fri, 21 May 2021 10:43:13 -0400 Subject: [PATCH 486/603] Added "NULL" string to the parameters to the scripting if there are no games available. This allows the bash scripts to pick up this event and perform an action as opposed to not triggering the event. --- es-app/src/views/gamelist/ISimpleGameListView.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index ffd31f3c36..e7f0d7332c 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -164,9 +164,12 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) FileData* cursor = getCursor(); SystemData* system = this->mRoot->getSystem(); if (system != NULL) { - Scripting::fireEvent("game-select", system->getName(), cursor->getFileName(), cursor->getName()); + Scripting::fireEvent("game-select", system->getName(), cursor->getFileName(), cursor->getName(), "input"); } - + else + { + Scripting::fireEvent("game-select", "NULL", "NULL", "NULL", "input"); + } return IGameListView::input(config, input); } From c623100a40e4909bc8523cf35e214a86e9dafff9 Mon Sep 17 00:00:00 2001 From: EnsignRutherford Date: Thu, 17 Jun 2021 16:07:42 -0400 Subject: [PATCH 487/603] Removed superfluous calls to the scripting engine for 'dim' and 'black' screensaver mode. --- es-app/src/SystemScreenSaver.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index eac799fe72..db1c722c9f 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -11,6 +11,7 @@ #include "FileData.h" #include "FileFilterIndex.h" #include "Log.h" +#include "utils/ProfilingUtil.h" #include "PowerSaver.h" #include "Scripting.h" #include "Sound.h" @@ -107,12 +108,10 @@ void SystemScreenSaver::startScreenSaver() #else mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); #endif - if (mCurrentGame != NULL) { + if (mCurrentGame != NULL) + { Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName(), "randomvideo"); - } else { - Scripting::fireEvent("screensaver-game-select", "NULL", "NULL", "NULL", "randomvideo"); } - mVideoScreensaver->topWindow(true); mVideoScreensaver->setOrigin(0.5f, 0.5f); mVideoScreensaver->setPosition(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f); @@ -189,19 +188,13 @@ void SystemScreenSaver::startScreenSaver() PowerSaver::runningScreenSaver(true); mTimer = 0; - if (mCurrentGame != NULL) { + if (mCurrentGame != NULL) + { Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName(), "slideshow"); - } else { - Scripting::fireEvent("screensaver-game-select", "NULL", "NULL", "NULL", "slideshow"); } return; } // No videos. Just use a standard screensaver - if (mCurrentGame != NULL) { - Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName(), "novideo"); - } else { - Scripting::fireEvent("screensaver-game-select", "NULL", "NULL", "NULL", "novideo"); - } mState = STATE_SCREENSAVER_ACTIVE; mCurrentGame = NULL; } From 40898ffc22b77ea505243896a18da41b17769316 Mon Sep 17 00:00:00 2001 From: EnsignRutherford Date: Sat, 19 Jun 2021 12:04:44 -0400 Subject: [PATCH 488/603] Changed the placement of the screensaver-start event to occur before the screensaver is started as that will fire off an event depending on the setting. --- es-core/src/Window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 4d3820ad93..90175efc74 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -457,13 +457,13 @@ void Window::startScreenSaver() { if (mScreenSaver && !mRenderScreenSaver) { + Scripting::fireEvent("screensaver-start"); // Tell the GUI components the screensaver is starting for(auto i = mGuiStack.cbegin(); i != mGuiStack.cend(); i++) (*i)->onScreenSaverActivate(); mScreenSaver->startScreenSaver(); mRenderScreenSaver = true; - Scripting::fireEvent("screensaver-start"); } } From ee8979499348f92cae9a99b48e2a3a5625f64135 Mon Sep 17 00:00:00 2001 From: Gemba Date: Wed, 16 Jun 2021 19:43:18 +0200 Subject: [PATCH 489/603] Improved randomisation: card deck approach, use ranlux48 and random_device for seed - Use C++11 built-in ranlux48 and random_device for seeding - Shuffles systems (aso.) like a card deck and picks top system until empty, then shuffles again - Fixes the flaws of the current random implementation: Real 1/N chance for an element in a set of N - Minor refactorings --- es-app/src/SystemData.cpp | 51 +++----- es-app/src/SystemData.h | 6 + es-app/src/SystemScreenSaver.cpp | 202 +++++++++++++------------------ es-app/src/SystemScreenSaver.h | 19 +-- es-app/src/main.cpp | 2 - es-core/src/Window.cpp | 2 - es-core/src/Window.h | 1 - external/CMakeLists.txt | 2 +- 8 files changed, 116 insertions(+), 169 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 5e3b8c8a13..66b1cf83e7 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -11,6 +11,7 @@ #include "ThemeData.h" #include "views/UIModeController.h" #include +#include #include "utils/StringUtil.h" #include "utils/ThreadPool.h" #include "Window.h" @@ -18,6 +19,9 @@ using namespace Utils; std::vector SystemData::sSystemVector; +std::vector SystemData::sSystemVectorShuffled; +std::ranlux48 SystemData::sURNG = std::ranlux48(std::random_device()()); + SystemData::SystemData(const std::string& name, const std::string& fullName, SystemEnvironmentData* envData, const std::string& themeFolder, bool CollectionSystem) : mName(name), mFullName(fullName), mEnvData(envData), mThemeFolder(themeFolder), mIsCollectionSystem(CollectionSystem), mIsGameSystem(true) @@ -533,45 +537,30 @@ unsigned int SystemData::getGameCount() const SystemData* SystemData::getRandomSystem() { - // this is a bit brute force. It might be more efficient to just to a while (!gameSystem) do random again... - unsigned int total = 0; - for(auto it = sSystemVector.cbegin(); it != sSystemVector.cend(); it++) - { - if ((*it)->isGameSystem()) - total ++; - } + if (sSystemVector.empty()) return NULL; - // get random number in range - int target = (int)Math::round((std::rand() / (float)RAND_MAX) * (total - 1)); - for (auto it = sSystemVector.cbegin(); it != sSystemVector.cend(); it++) + if (sSystemVectorShuffled.empty()) { - if ((*it)->isGameSystem()) - { - if (target > 0) - { - target--; - } - else - { - return (*it); - } - } + std::copy_if(sSystemVector.begin(), sSystemVector.end(), std::back_inserter(sSystemVectorShuffled), [](SystemData *sd){ return sd->isGameSystem(); }); + std::shuffle(sSystemVectorShuffled.begin(), sSystemVectorShuffled.end(), sURNG); } - // if we end up here, there is no valid system - return NULL; + SystemData* random_system = sSystemVectorShuffled.back(); + sSystemVectorShuffled.pop_back(); + return random_system; } FileData* SystemData::getRandomGame() { - std::vector list = mRootFolder->getFilesRecursive(GAME, true); - unsigned int total = (int)list.size(); - int target = 0; - // get random number in range - if (total == 0) - return NULL; - target = (int)Math::round((std::rand() / (float)RAND_MAX) * (total - 1)); - return list.at(target); + if (mGamesShuffled.empty()) + { + mGamesShuffled = mRootFolder->getFilesRecursive(GAME, true); + if (mGamesShuffled.empty()) return NULL; + std::shuffle(mGamesShuffled.begin(), mGamesShuffled.end(), sURNG); + } + FileData* random_game = mGamesShuffled.back(); + mGamesShuffled.pop_back(); + return random_game; } unsigned int SystemData::getDisplayedGameCount() const diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index 6eb1d2306f..688bc80dc9 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -5,6 +5,7 @@ #include "PlatformId.h" #include #include +#include #include #include @@ -54,6 +55,8 @@ class SystemData static std::string getConfigPath(bool forWrite); // if forWrite, will only return ~/.emulationstation/es_systems.cfg, never /etc/emulationstation/es_systems.cfg static std::vector sSystemVector; + static std::vector sSystemVectorShuffled; + static std::ranlux48 sURNG; inline std::vector::const_iterator getIterator() const { return std::find(sSystemVector.cbegin(), sSystemVector.cend(), this); }; inline std::vector::const_reverse_iterator getRevIterator() const { return std::find(sSystemVector.crbegin(), sSystemVector.crend(), this); }; @@ -64,6 +67,7 @@ class SystemData SystemData* getNext() const; SystemData* getPrev() const; + static SystemData* getRandomSystem(); FileData* getRandomGame(); @@ -92,6 +96,8 @@ class SystemData FileFilterIndex* mFilterIndex; FileData* mRootFolder; + // for getRandomGame() + std::vector mGamesShuffled; }; #endif // ES_APP_SYSTEM_DATA_H diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 4236f5ca08..6a24409430 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -14,9 +14,12 @@ #include "PowerSaver.h" #include "Sound.h" #include "SystemData.h" -#include -#include +#include #include +#include +#include +#include + #define FADE_TIME 300 static int lastIndex = 0; @@ -25,15 +28,9 @@ SystemScreenSaver::SystemScreenSaver(Window* window) : mVideoScreensaver(NULL), mImageScreensaver(NULL), mWindow(window), - mVideosCounted(false), - mVideoCount(0), - mImagesCounted(false), - mImageCount(0), mState(STATE_INACTIVE), mOpacity(0.0f), mTimer(0), - mSystemName(""), - mGameName(""), mCurrentGame(NULL), mStopBackgroundAudio(true) { @@ -41,7 +38,6 @@ SystemScreenSaver::SystemScreenSaver(Window* window) : std::string path = getTitleFolder(); if(!Utils::FileSystem::exists(path)) Utils::FileSystem::createDirectory(path); - srand((unsigned int)time(NULL)); mSwapTimeout = 30000; } @@ -279,7 +275,7 @@ void SystemScreenSaver::backgroundIndexing() // get the list of all games SystemData* all = CollectionSystemManager::get()->getAllGamesCollection(); std::vector files = all->getRootFolder()->getFilesRecursive(GAME); - + const auto startTs = std::chrono::system_clock::now(); for (lastIndex; lastIndex < files.size(); lastIndex++) { @@ -291,161 +287,129 @@ void SystemScreenSaver::backgroundIndexing() Utils::FileSystem::exists(files.at(lastIndex)->getImagePath()); } auto endTs = std::chrono::system_clock::now(); - LOG(LogDebug) << "Indexed a total of " << lastIndex << " entries in " << std::chrono::duration_cast(endTs - startTs).count() << " ms. Stopping."; + LOG(LogDebug) << "Indexed a total of " << lastIndex << " entries in " << std::chrono::duration_cast(endTs - startTs).count() << " ms. Stopping."; } -unsigned long SystemScreenSaver::countGameListNodes(const char *nodeName) + +std::vector SystemScreenSaver::getAllGamelistNodes() { - unsigned long nodeCount = 0; - std::vector::const_iterator it; - for (it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); ++it) + std::vector allFiles {}; + std::vector subsysFiles {}; + for (std::vector::const_iterator it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); ++it) { // We only want nodes from game systems that are not collections if (!(*it)->isGameSystem() || (*it)->isCollection()) continue; FileData* rootFileData = (*it)->getRootFolder(); - - FileType type = GAME; - std::vector allFiles = rootFileData->getFilesRecursive(type, true); - std::vector::const_iterator itf; // declare an iterator to a vector of strings - - for(itf=allFiles.cbegin() ; itf < allFiles.cend(); itf++) { - if ((strcmp(nodeName, "video") == 0 && (*itf)->getVideoPath() != "") || - (strcmp(nodeName, "image") == 0 && (*itf)->getImagePath() != "")) - { - nodeCount++; - } - } + subsysFiles = rootFileData->getFilesRecursive(FileType::GAME, true); + allFiles.insert(allFiles.end(), subsysFiles.begin(), subsysFiles.end()); } - return nodeCount; -} -void SystemScreenSaver::countVideos() -{ - if (!mVideosCounted) - { - mVideoCount = countGameListNodes("video"); - mVideosCounted = true; - } + return allFiles; } -void SystemScreenSaver::countImages() -{ - if (!mImagesCounted) - { - mImageCount = countGameListNodes("image"); - mImagesCounted = true; - } -} -void SystemScreenSaver::pickGameListNode(unsigned long index, const char *nodeName, std::string& path) +void SystemScreenSaver::pickGameListNode(const char *nodeName, std::string& path) { - std::vector::const_iterator it; - for (it = SystemData::sSystemVector.cbegin(); it != SystemData::sSystemVector.cend(); ++it) - { - // We only want nodes from game systems that are not collections - if (!(*it)->isGameSystem() || (*it)->isCollection()) - continue; + FileData *itf; + bool found = false; + int missCtr = 0; + while (!found) { + if (mAllFiles.empty()) { + mAllFiles = getAllGamelistNodes(); + if (mAllFiles.empty()) { return; } // no games at all + mAllFilesSize = mAllFiles.size(); + std::shuffle(std::begin(mAllFiles), std::end(mAllFiles), SystemData::sURNG); + } + itf = mAllFiles.back(); + mAllFiles.pop_back(); + if ((strcmp(nodeName, "video") == 0 && itf->getVideoPath() != "") || + (strcmp(nodeName, "image") == 0 && itf->getImagePath() != "")) + { + found = true; + } else { + missCtr++; + if (missCtr == mAllFilesSize) { + // avoid looping forever when no candidate exist + // with image/video path set + return; + } - FileData* rootFileData = (*it)->getRootFolder(); + } + } - FileType type = GAME; - std::vector allFiles = rootFileData->getFilesRecursive(type, true); - std::vector::const_iterator itf; // declare an iterator to a vector of strings + path = (strcmp(nodeName, "video") == 0) ? itf->getVideoPath() : itf->getImagePath(); + mCurrentGame = itf; - for(itf=allFiles.cbegin() ; itf < allFiles.cend(); itf++) { - if ((strcmp(nodeName, "video") == 0 && (*itf)->getVideoPath() != "") || - (strcmp(nodeName, "image") == 0 && (*itf)->getImagePath() != "")) - { - if (index-- == 0) - { - // We have it - path = ""; - if (strcmp(nodeName, "video") == 0) - path = (*itf)->getVideoPath(); - else if (strcmp(nodeName, "image") == 0) - path = (*itf)->getImagePath(); - mSystemName = (*it)->getFullName(); - mGameName = (*itf)->getName(); - mCurrentGame = (*itf); - - // end of getting FileData - if (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never") - writeSubtitle(mGameName.c_str(), mSystemName.c_str(), - (Settings::getInstance()->getString("ScreenSaverGameInfo") == "always")); - return; - } - } - } + if (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never") + { + auto systemName = mCurrentGame->getSystem()->getFullName(); + writeSubtitle(mCurrentGame->getName().c_str(), systemName.c_str(), + (Settings::getInstance()->getString("ScreenSaverGameInfo") == "always")); } } void SystemScreenSaver::pickRandomVideo(std::string& path) { - countVideos(); mCurrentGame = NULL; - if (mVideoCount > 0) - { - int video = (int)(((float)rand() / float(RAND_MAX)) * (float)mVideoCount); - - pickGameListNode(video, "video", path); - } + pickGameListNode("video", path); } void SystemScreenSaver::pickRandomGameListImage(std::string& path) { - countImages(); mCurrentGame = NULL; - if (mImageCount > 0) - { - int image = (int)(((float)rand() / float(RAND_MAX)) * (float)mImageCount); - - pickGameListNode(image, "image", path); - } + pickGameListNode("image", path); } void SystemScreenSaver::pickRandomCustomImage(std::string& path) { - std::string imageDir = Settings::getInstance()->getString("SlideshowScreenSaverImageDir"); - if ((imageDir != "") && (Utils::FileSystem::exists(imageDir))) + if (mCustomImageFiles.empty()) { - std::string imageFilter = Settings::getInstance()->getString("SlideshowScreenSaverImageFilter"); - std::vector matchingFiles; - Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(imageDir, Settings::getInstance()->getBool("SlideshowScreenSaverRecurse")); - - for(Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) + std::string imageDir = Settings::getInstance()->getString("SlideshowScreenSaverImageDir"); + if ((imageDir != "") && (Utils::FileSystem::exists(imageDir))) { - if (Utils::FileSystem::isRegularFile(*it)) + mCustomImageFiles = getCustomImageFiles(imageDir); + if (mCustomImageFiles.empty()) { - // If the image filter is empty, or the file extension is in the filter string, - // add it to the matching files list - if ((imageFilter.length() <= 0) || - (imageFilter.find(Utils::FileSystem::getExtension(*it)) != std::string::npos)) - { - matchingFiles.push_back(*it); - } + LOG(LogError) << "Slideshow Screensaver - No image files found\n"; + return; } } - - int fileCount = (int)matchingFiles.size(); - if (fileCount > 0) - { - // get a random index in the range 0 to fileCount (exclusive) - int randomIndex = rand() % fileCount; - path = matchingFiles[randomIndex]; - } else { - LOG(LogError) << "Slideshow Screensaver - No image files found\n"; + LOG(LogError) << "Slideshow Screensaver - Image directory does not exist: " << imageDir << "\n"; + return; } + std::shuffle(std::begin(mCustomImageFiles), std::end(mCustomImageFiles), SystemData::sURNG); } - else + path = mCustomImageFiles.back(); + mCustomImageFiles.pop_back(); +} + + +std::vector SystemScreenSaver::getCustomImageFiles(const std::string &imageDir) { + std::string imageFilter = Settings::getInstance()->getString("SlideshowScreenSaverImageFilter"); + std::vector matchingFiles; + Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(imageDir, Settings::getInstance()->getBool("SlideshowScreenSaverRecurse")); + + for(Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { - LOG(LogError) << "Slideshow Screensaver - Image directory does not exist: " << imageDir << "\n"; + if (Utils::FileSystem::isRegularFile(*it)) + { + // If the image filter is empty, or the file extension is in the filter string, + // add it to the matching files list + if ((imageFilter.length() <= 0) || + (imageFilter.find(Utils::FileSystem::getExtension(*it)) != std::string::npos)) + { + matchingFiles.push_back(*it); + } + } } + return matchingFiles; } + void SystemScreenSaver::update(int deltaTime) { // Use this to update the fade value for the current fade stage diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index 000c995d32..197f75f29f 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -26,17 +26,14 @@ class SystemScreenSaver : public Window::ScreenSaver virtual FileData* getCurrentGame(); virtual void launchGame(); - inline virtual void resetCounts() { mVideosCounted = false; mImagesCounted = false; }; private: - unsigned long countGameListNodes(const char *nodeName); - void countVideos(); - void countImages(); - void pickGameListNode(unsigned long index, const char *nodeName, std::string& path); + void pickGameListNode(const char *nodeName, std::string& path); void pickRandomVideo(std::string& path); void pickRandomGameListImage(std::string& path); void pickRandomCustomImage(std::string& path); - + std::vector getCustomImageFiles(const std::string &imageDir); + std::vector getAllGamelistNodes(); void backgroundIndexing(); void input(InputConfig* config, Input input); @@ -49,23 +46,19 @@ class SystemScreenSaver : public Window::ScreenSaver }; private: - bool mVideosCounted; - unsigned long mVideoCount; VideoComponent* mVideoScreensaver; - bool mImagesCounted; - unsigned long mImageCount; ImageComponent* mImageScreensaver; Window* mWindow; STATE mState; float mOpacity; int mTimer; FileData* mCurrentGame; - std::string mGameName; - std::string mSystemName; int mSwapTimeout; std::shared_ptr mBackgroundAudio; bool mStopBackgroundAudio; - + std::vector mAllFiles; + std::vector mCustomImageFiles; + int mAllFilesSize; std::thread* mThread; bool mExit; }; diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 053d73c1c8..956d4aed01 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -256,8 +256,6 @@ void onExit() int main(int argc, char* argv[]) { - srand((unsigned int)time(NULL)); - std::locale::global(std::locale("C")); if(!parseArgs(argc, argv)) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 4d3820ad93..8786942ddd 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -439,7 +439,6 @@ void Window::onSleep() { mScreenSaver->stopScreenSaver(); mRenderScreenSaver = false; - mScreenSaver->resetCounts(); } } @@ -473,7 +472,6 @@ bool Window::cancelScreenSaver() { mScreenSaver->stopScreenSaver(); mRenderScreenSaver = false; - mScreenSaver->resetCounts(); Scripting::fireEvent("screensaver-stop"); // Tell the GUI components the screensaver has stopped diff --git a/es-core/src/Window.h b/es-core/src/Window.h index d92bd09b5b..958652b4ae 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -32,7 +32,6 @@ class Window virtual bool isScreenSaverActive() = 0; virtual FileData* getCurrentGame() = 0; virtual void launchGame() = 0; - virtual void resetCounts() = 0; }; class InfoPopup { diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 9b09143ada..03b743b7e7 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -1,4 +1,4 @@ -# set up the external libraries that aren't popular enough to be found on most +# set up the external libraries that aren't popular enough to be found on most # package managers are included with the project (in the 'external' folder) add_subdirectory("nanosvg") From b19b1b0ffb196053b5a15592edc8a7d0f811a217 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Fri, 20 Aug 2021 12:20:24 +0100 Subject: [PATCH 490/603] input: disable the SDL2 HIDAPI drivers by default This ensures that configurations created before HIDAPI drivers were enabled by default (2.0.12) will work when EmulationStation uses a newer SDL2 version. Using the HIDAPI drivers may produce a different name for joysticks and pottentially changes the mapping. Example using a PS4 (Dualshock 4) controller: - without HIDAPI, the controller is named "Wireless Controller", with HIDAPI enabled is named "PS4 Controller" - without HIDAPI, the D-Pad is detected as a HAT, but with the drivers enabled it's detected as a series of buttons - the device GUID is different between the 2 configurations The different name would probably break also the input configuration script for RetroArch, which doesn't use SDL2 as default input driver and would receive a wrong name and wrong mappings. Note that the HIDAPI drivers are available just for a few controller models (PS4/PS4/Amazon Luna/Stadia/Xbox360(w)/Xbox One/Steam), but these controllers are widely used and breaking their configuration would cause much confusion. --- es-core/src/InputManager.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 57c64b404f..4e43f88b1f 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -55,6 +55,11 @@ void InputManager::init() SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, Settings::getInstance()->getBool("BackgroundJoystickInput") ? "1" : "0"); + // Don't enable the HIDAPI drivers by default, it will break the existing configurations + // for a few controller types, since the names and the input mappings are different. +#if SDL_VERSION_ATLEAST(2,0,9) and not(_WIN32) + SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI, "0"); +#endif SDL_InitSubSystem(SDL_INIT_JOYSTICK); SDL_JoystickEventState(SDL_ENABLE); From 0b5e9a7cb387debc3abca98b118ca42b1518e524 Mon Sep 17 00:00:00 2001 From: TheMasterWho Date: Mon, 6 Sep 2021 22:58:53 -0400 Subject: [PATCH 491/603] refactored ScreenSaver startScreenSaver method to allow video files in slideshow mode --- es-app/src/SystemScreenSaver.cpp | 102 ++++++++++++++++++------------- es-app/src/SystemScreenSaver.h | 2 + es-core/src/Settings.cpp | 2 +- 3 files changed, 64 insertions(+), 42 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 6a24409430..5a81797776 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -61,6 +61,61 @@ bool SystemScreenSaver::isScreenSaverActive() return (mState != STATE_INACTIVE); } +void SystemScreenSaver::setVideoScreensaver(std::string& path) +{ + #ifdef _RPI_ + // Create the correct type of video component + if (Settings::getInstance()->getBool("ScreenSaverOmxPlayer")) + mVideoScreensaver = new VideoPlayerComponent(mWindow, getTitlePath()); + else + mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); + #else + mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); + #endif + + mVideoScreensaver->topWindow(true); + mVideoScreensaver->setOrigin(0.5f, 0.5f); + mVideoScreensaver->setPosition(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f); + + if (Settings::getInstance()->getBool("StretchVideoOnScreenSaver")) + { + mVideoScreensaver->setResize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + } + else + { + mVideoScreensaver->setMaxSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + } + mVideoScreensaver->setVideo(path); + mVideoScreensaver->setScreensaverMode(true); + mVideoScreensaver->onShow(); + PowerSaver::runningScreenSaver(true); + mTimer = 0; + return; +} + +void SystemScreenSaver::setImageScreensaver(std::string& path) +{ + if (!mImageScreensaver) + { + mImageScreensaver = new ImageComponent(mWindow, false, false); + } + + mTimer = 0; + + mImageScreensaver->setImage(path); + mImageScreensaver->setOrigin(0.5f, 0.5f); + mImageScreensaver->setPosition(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f); + + if (Settings::getInstance()->getBool("SlideshowScreenSaverStretch")) + { + mImageScreensaver->setResize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + } + else + { + mImageScreensaver->setMaxSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + } +} + void SystemScreenSaver::startScreenSaver() { // if set to index files in background, start thread @@ -93,33 +148,7 @@ void SystemScreenSaver::startScreenSaver() if (!path.empty() && Utils::FileSystem::exists(path)) { -#ifdef _RPI_ - // Create the correct type of video component - if (Settings::getInstance()->getBool("ScreenSaverOmxPlayer")) - mVideoScreensaver = new VideoPlayerComponent(mWindow, getTitlePath()); - else - mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); -#else - mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); -#endif - - mVideoScreensaver->topWindow(true); - mVideoScreensaver->setOrigin(0.5f, 0.5f); - mVideoScreensaver->setPosition(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f); - - if (Settings::getInstance()->getBool("StretchVideoOnScreenSaver")) - { - mVideoScreensaver->setResize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - } - else - { - mVideoScreensaver->setMaxSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); - } - mVideoScreensaver->setVideo(path); - mVideoScreensaver->setScreensaverMode(true); - mVideoScreensaver->onShow(); - PowerSaver::runningScreenSaver(true); - mTimer = 0; + setVideoScreensaver(path); return; } } @@ -145,24 +174,15 @@ void SystemScreenSaver::startScreenSaver() pickRandomGameListImage(path); } - if (!mImageScreensaver) - { - mImageScreensaver = new ImageComponent(mWindow, false, false); - } - - mTimer = 0; - - mImageScreensaver->setImage(path); - mImageScreensaver->setOrigin(0.5f, 0.5f); - mImageScreensaver->setPosition(Renderer::getScreenWidth() / 2.0f, Renderer::getScreenHeight() / 2.0f); - - if (Settings::getInstance()->getBool("SlideshowScreenSaverStretch")) + // Check if file has a known video extension + std::string pathExtension = path.substr(path.find_last_of(".") + 1); + if (pathExtension == "mp4" || pathExtension == "avi") { - mImageScreensaver->setResize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + setVideoScreensaver(path); } else { - mImageScreensaver->setMaxSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight()); + setImageScreensaver(path); } std::string bg_audio_file = Settings::getInstance()->getString("SlideshowScreenSaverBackgroundAudioFile"); diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index 197f75f29f..0af5f8b3b2 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -32,6 +32,8 @@ class SystemScreenSaver : public Window::ScreenSaver void pickRandomVideo(std::string& path); void pickRandomGameListImage(std::string& path); void pickRandomCustomImage(std::string& path); + void setVideoScreensaver(std::string& path); + void setImageScreensaver(std::string& path); std::vector getCustomImageFiles(const std::string &imageDir); std::vector getAllGamelistNodes(); void backgroundIndexing(); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 71317c979d..cc3854cc29 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -115,7 +115,7 @@ void Settings::setDefaults() mStringMap["SlideshowScreenSaverBackgroundAudioFile"] = Utils::FileSystem::getHomePath() + "/.emulationstation/slideshow/audio/slideshow_bg.wav"; mBoolMap["SlideshowScreenSaverCustomImageSource"] = false; mStringMap["SlideshowScreenSaverImageDir"] = Utils::FileSystem::getHomePath() + "/.emulationstation/slideshow/image"; - mStringMap["SlideshowScreenSaverImageFilter"] = ".png,.jpg"; + mStringMap["SlideshowScreenSaverImageFilter"] = ".png,.jpg,.mp4,.avi"; mBoolMap["SlideshowScreenSaverRecurse"] = false; // This setting only applies to raspberry pi but set it for all platforms so From daaefa39bbe3b57407685e61c0d7383591d6ed32 Mon Sep 17 00:00:00 2001 From: TheMasterWho Date: Tue, 7 Sep 2021 17:48:40 -0400 Subject: [PATCH 492/603] changed file extension comparison to use a vector to allow easy additions --- es-app/src/SystemScreenSaver.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 5a81797776..b83f949816 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -176,7 +176,8 @@ void SystemScreenSaver::startScreenSaver() // Check if file has a known video extension std::string pathExtension = path.substr(path.find_last_of(".") + 1); - if (pathExtension == "mp4" || pathExtension == "avi") + std::vector videoExtensions {"mp4", "avi"}; + if (std::find(videoExtensions.begin(), videoExtensions.end(), pathExtension) != videoExtensions.end()) { setVideoScreensaver(path); } From 8ac3bdd7da5b4fbe047105513d94c7e0c4824a59 Mon Sep 17 00:00:00 2001 From: TheMasterWho Date: Tue, 7 Sep 2021 20:07:56 -0400 Subject: [PATCH 493/603] Fixed preprocessor directive formatting --- es-app/src/SystemScreenSaver.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index b83f949816..228158a64a 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -63,15 +63,15 @@ bool SystemScreenSaver::isScreenSaverActive() void SystemScreenSaver::setVideoScreensaver(std::string& path) { - #ifdef _RPI_ +#ifdef _RPI_ // Create the correct type of video component if (Settings::getInstance()->getBool("ScreenSaverOmxPlayer")) mVideoScreensaver = new VideoPlayerComponent(mWindow, getTitlePath()); else mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); - #else +#else mVideoScreensaver = new VideoVlcComponent(mWindow, getTitlePath()); - #endif +#endif mVideoScreensaver->topWindow(true); mVideoScreensaver->setOrigin(0.5f, 0.5f); From db2ce15f7a24ff96aa6c03e4a2e289a391968b30 Mon Sep 17 00:00:00 2001 From: TheMasterWho Date: Thu, 9 Sep 2021 18:33:51 -0400 Subject: [PATCH 494/603] refactored video file test into dedicated method --- es-app/src/SystemScreenSaver.cpp | 12 ++++++++---- es-app/src/SystemScreenSaver.h | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 228158a64a..07209f9688 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -116,6 +116,13 @@ void SystemScreenSaver::setImageScreensaver(std::string& path) } } +bool SystemScreenSaver::isFileVideo(std::string& path) +{ + std::vector videoExtensions {"mp4", "avi"}; + std::string pathExtension = path.substr(path.find_last_of(".") + 1); + return std::find(videoExtensions.begin(), videoExtensions.end(), pathExtension) != videoExtensions.end(); +} + void SystemScreenSaver::startScreenSaver() { // if set to index files in background, start thread @@ -174,10 +181,7 @@ void SystemScreenSaver::startScreenSaver() pickRandomGameListImage(path); } - // Check if file has a known video extension - std::string pathExtension = path.substr(path.find_last_of(".") + 1); - std::vector videoExtensions {"mp4", "avi"}; - if (std::find(videoExtensions.begin(), videoExtensions.end(), pathExtension) != videoExtensions.end()) + if (isFileVideo(path)) { setVideoScreensaver(path); } diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index 0af5f8b3b2..6914beb6b0 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -34,6 +34,7 @@ class SystemScreenSaver : public Window::ScreenSaver void pickRandomCustomImage(std::string& path); void setVideoScreensaver(std::string& path); void setImageScreensaver(std::string& path); + bool isFileVideo(std::string& path); std::vector getCustomImageFiles(const std::string &imageDir); std::vector getAllGamelistNodes(); void backgroundIndexing(); From a2ff3f035abc2e95d307e859ea675bdd85cfdf4a Mon Sep 17 00:00:00 2001 From: johnodon Date: Mon, 13 Sep 2021 12:13:53 -0400 Subject: [PATCH 495/603] Update FileSystemUtil.cpp --- es-core/src/utils/FileSystemUtil.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 4a028547b3..0279f054f1 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -505,8 +505,12 @@ namespace Utils if(_allowHome && (path[0] == '~') && (path[1] == '/')) return (getHomePath() + &(path[1])); - // nothing to resolve - return path; + // absolute path + if(path[0] == '/') + return path; + + // concatenate paths + return (relativeTo + '/' + path); } // resolveRelativePath From 7639e28c4d70548231bde7d146b8e0350f0d6007 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Mon, 27 Sep 2021 18:07:26 +0200 Subject: [PATCH 496/603] Center the gamelist in the available textlist height --- es-app/src/components/TextListComponent.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index a428d1deed..eb3896f7b8 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -184,15 +184,17 @@ void TextListComponent::render(const Transform4x4f& parentTrans) if(listCutoff > size()) listCutoff = size(); + float y = (mSize.y() - (mScreenCount * entrySize)) * 0.5f; + // draw selector bar if(mStartEntry < listCutoff) { if (mSelectorImage.hasImage()) { - mSelectorImage.setPosition(0.f, (mCursor - mStartEntry)*entrySize + mSelectorOffsetY, 0.f); + mSelectorImage.setPosition(0.f, y + (mCursor - mStartEntry)*entrySize + mSelectorOffsetY, 0.f); mSelectorImage.render(trans); } else { Renderer::setMatrix(trans); - Renderer::drawRect(0.0f, (mCursor - mStartEntry)*entrySize + mSelectorOffsetY, mSize.x(), + Renderer::drawRect(0.0f, y + (mCursor - mStartEntry)*entrySize + mSelectorOffsetY, mSize.x(), mSelectorHeight, mSelectorColor, mSelectorColorEnd, mSelectorColorGradientHorizontal); } } @@ -203,7 +205,6 @@ void TextListComponent::render(const Transform4x4f& parentTrans) Renderer::pushClipRect(Vector2i((int)(trans.translation().x() + mHorizontalMargin), (int)trans.translation().y()), Vector2i((int)(dim.x() - mHorizontalMargin*2), (int)dim.y())); - float y = 0; for(int i = mStartEntry; i < listCutoff; i++) { typename IList::Entry& entry = mEntries.at((unsigned int)i); From 300828e4452e141332fa5d4b478697e5a0c4a208 Mon Sep 17 00:00:00 2001 From: TheMasterWho Date: Sun, 10 Oct 2021 16:00:20 -0400 Subject: [PATCH 497/603] Rename instances of image to media in SlideShow Screensaver mode * renamed image to media and added setting rename function * replaced references to 'image' with 'media' and removed hardcoded video extensions * fixed a bug when checking a null path --- es-app/src/SystemScreenSaver.cpp | 54 +++++++++++-------- es-app/src/SystemScreenSaver.h | 6 +-- .../guis/GuiSlideshowScreensaverOptions.cpp | 45 +++++++++------- es-core/src/PowerSaver.cpp | 2 +- es-core/src/Settings.cpp | 26 +++++++-- es-core/src/Settings.h | 5 +- es-core/src/Window.cpp | 2 +- 7 files changed, 88 insertions(+), 52 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 07209f9688..93a3030401 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -118,9 +118,12 @@ void SystemScreenSaver::setImageScreensaver(std::string& path) bool SystemScreenSaver::isFileVideo(std::string& path) { - std::vector videoExtensions {"mp4", "avi"}; - std::string pathExtension = path.substr(path.find_last_of(".") + 1); - return std::find(videoExtensions.begin(), videoExtensions.end(), pathExtension) != videoExtensions.end(); + if (path.empty()) { + return false; + } + std::string pathFilter = Settings::getInstance()->getString("SlideshowScreenSaverVideoFilter"); + std::string pathExtension = path.substr(path.find_last_of(".")); + return pathFilter.find(pathExtension) != std::string::npos; } void SystemScreenSaver::startScreenSaver() @@ -165,15 +168,15 @@ void SystemScreenSaver::startScreenSaver() mState = PowerSaver::getMode() == PowerSaver::INSTANT ? STATE_SCREENSAVER_ACTIVE : STATE_FADE_OUT_WINDOW; - mSwapTimeout = Settings::getInstance()->getInt("ScreenSaverSwapImageTimeout"); + mSwapTimeout = Settings::getInstance()->getInt("ScreenSaverSwapMediaTimeout"); mOpacity = 0.0f; - // Load a random image + // Load a random media std::string path = ""; - if (Settings::getInstance()->getBool("SlideshowScreenSaverCustomImageSource")) + if (Settings::getInstance()->getBool("SlideshowScreenSaverCustomMediaSource")) { - pickRandomCustomImage(path); - // Custom images are not tied to the game list + pickRandomCustomMedia(path); + // Custom media are not tied to the game list mCurrentGame = NULL; } else @@ -181,7 +184,7 @@ void SystemScreenSaver::startScreenSaver() pickRandomGameListImage(path); } - if (isFileVideo(path)) + if (isFileVideo(path)) { setVideoScreensaver(path); } @@ -387,36 +390,37 @@ void SystemScreenSaver::pickRandomGameListImage(std::string& path) pickGameListNode("image", path); } -void SystemScreenSaver::pickRandomCustomImage(std::string& path) +void SystemScreenSaver::pickRandomCustomMedia(std::string& path) { - if (mCustomImageFiles.empty()) + if (mCustomMediaFiles.empty()) { - std::string imageDir = Settings::getInstance()->getString("SlideshowScreenSaverImageDir"); - if ((imageDir != "") && (Utils::FileSystem::exists(imageDir))) + std::string mediaDir = Settings::getInstance()->getString("SlideshowScreenSaverMediaDir"); + if ((mediaDir != "") && (Utils::FileSystem::exists(mediaDir))) { - mCustomImageFiles = getCustomImageFiles(imageDir); - if (mCustomImageFiles.empty()) + mCustomMediaFiles = getCustomMediaFiles(mediaDir); + if (mCustomMediaFiles.empty()) { - LOG(LogError) << "Slideshow Screensaver - No image files found\n"; + LOG(LogError) << "Slideshow Screensaver - No media files found\n"; return; } } else { - LOG(LogError) << "Slideshow Screensaver - Image directory does not exist: " << imageDir << "\n"; + LOG(LogError) << "Slideshow Screensaver - Media directory does not exist: " << mediaDir << "\n"; return; } - std::shuffle(std::begin(mCustomImageFiles), std::end(mCustomImageFiles), SystemData::sURNG); + std::shuffle(std::begin(mCustomMediaFiles), std::end(mCustomMediaFiles), SystemData::sURNG); } - path = mCustomImageFiles.back(); - mCustomImageFiles.pop_back(); + path = mCustomMediaFiles.back(); + mCustomMediaFiles.pop_back(); } -std::vector SystemScreenSaver::getCustomImageFiles(const std::string &imageDir) { +std::vector SystemScreenSaver::getCustomMediaFiles(const std::string &mediaDir) { std::string imageFilter = Settings::getInstance()->getString("SlideshowScreenSaverImageFilter"); + std::string videoFilter = Settings::getInstance()->getString("SlideshowScreenSaverVideoFilter"); std::vector matchingFiles; - Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(imageDir, Settings::getInstance()->getBool("SlideshowScreenSaverRecurse")); + Utils::FileSystem::stringList dirContent = Utils::FileSystem::getDirContent(mediaDir, Settings::getInstance()->getBool("SlideshowScreenSaverRecurse")); for(Utils::FileSystem::stringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { @@ -429,6 +433,12 @@ std::vector SystemScreenSaver::getCustomImageFiles(const std::strin { matchingFiles.push_back(*it); } + // Also add video files + if ((videoFilter.length() <= 0) || + (videoFilter.find(Utils::FileSystem::getExtension(*it)) != std::string::npos)) + { + matchingFiles.push_back(*it); + } } } return matchingFiles; diff --git a/es-app/src/SystemScreenSaver.h b/es-app/src/SystemScreenSaver.h index 6914beb6b0..cfcbb2b137 100644 --- a/es-app/src/SystemScreenSaver.h +++ b/es-app/src/SystemScreenSaver.h @@ -31,11 +31,11 @@ class SystemScreenSaver : public Window::ScreenSaver void pickGameListNode(const char *nodeName, std::string& path); void pickRandomVideo(std::string& path); void pickRandomGameListImage(std::string& path); - void pickRandomCustomImage(std::string& path); + void pickRandomCustomMedia(std::string& path); void setVideoScreensaver(std::string& path); void setImageScreensaver(std::string& path); bool isFileVideo(std::string& path); - std::vector getCustomImageFiles(const std::string &imageDir); + std::vector getCustomMediaFiles(const std::string &mediaDir); std::vector getAllGamelistNodes(); void backgroundIndexing(); @@ -60,7 +60,7 @@ class SystemScreenSaver : public Window::ScreenSaver std::shared_ptr mBackgroundAudio; bool mStopBackgroundAudio; std::vector mAllFiles; - std::vector mCustomImageFiles; + std::vector mCustomMediaFiles; int mAllFilesSize; std::thread* mThread; bool mExit; diff --git a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp index 9f3c5b9db9..4b4ea9548f 100644 --- a/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp +++ b/es-app/src/guis/GuiSlideshowScreensaverOptions.cpp @@ -11,20 +11,20 @@ GuiSlideshowScreensaverOptions::GuiSlideshowScreensaverOptions(Window* window, c { ComponentListRow row; - // image duration (seconds) - auto sss_image_sec = std::make_shared(mWindow, 1.f, 60.f, 1.f, "s"); - sss_image_sec->setValue((float)(Settings::getInstance()->getInt("ScreenSaverSwapImageTimeout") / (1000))); - addWithLabel(row, "SWAP IMAGE AFTER (SECS)", sss_image_sec); - addSaveFunc([sss_image_sec] { - int playNextTimeout = (int)Math::round(sss_image_sec->getValue()) * (1000); - Settings::getInstance()->setInt("ScreenSaverSwapImageTimeout", playNextTimeout); + // media duration (seconds) + auto sss_media_sec = std::make_shared(mWindow, 1.f, 60.f, 1.f, "s"); + sss_media_sec->setValue((float)(Settings::getInstance()->getInt("ScreenSaverSwapMediaTimeout") / (1000))); + addWithLabel(row, "SWAP MEDIA AFTER (SECS)", sss_media_sec); + addSaveFunc([sss_media_sec] { + int playNextTimeout = (int)Math::round(sss_media_sec->getValue()) * (1000); + Settings::getInstance()->setInt("ScreenSaverSwapMediaTimeout", playNextTimeout); PowerSaver::updateTimeouts(); }); // stretch auto sss_stretch = std::make_shared(mWindow); sss_stretch->setState(Settings::getInstance()->getBool("SlideshowScreenSaverStretch")); - addWithLabel(row, "STRETCH IMAGES", sss_stretch); + addWithLabel(row, "STRETCH MEDIA", sss_stretch); addSaveFunc([sss_stretch] { Settings::getInstance()->setBool("SlideshowScreenSaverStretch", sss_stretch->getState()); }); @@ -36,23 +36,23 @@ GuiSlideshowScreensaverOptions::GuiSlideshowScreensaverOptions(Window* window, c Settings::getInstance()->setString("SlideshowScreenSaverBackgroundAudioFile", sss_bg_audio_file->getValue()); }); - // image source + // media source auto sss_custom_source = std::make_shared(mWindow); - sss_custom_source->setState(Settings::getInstance()->getBool("SlideshowScreenSaverCustomImageSource")); - addWithLabel(row, "USE CUSTOM IMAGES", sss_custom_source); - addSaveFunc([sss_custom_source] { Settings::getInstance()->setBool("SlideshowScreenSaverCustomImageSource", sss_custom_source->getState()); }); + sss_custom_source->setState(Settings::getInstance()->getBool("SlideshowScreenSaverCustomMediaSource")); + addWithLabel(row, "USE CUSTOM MEDIA", sss_custom_source); + addSaveFunc([sss_custom_source] { Settings::getInstance()->setBool("SlideshowScreenSaverCustomMediaSource", sss_custom_source->getState()); }); - // custom image directory - auto sss_image_dir = std::make_shared(mWindow, "", Font::get(FONT_SIZE_SMALL), 0x777777FF); - addEditableTextComponent(row, "CUSTOM IMAGE DIR", sss_image_dir, Settings::getInstance()->getString("SlideshowScreenSaverImageDir")); - addSaveFunc([sss_image_dir] { - Settings::getInstance()->setString("SlideshowScreenSaverImageDir", sss_image_dir->getValue()); + // custom media directory + auto sss_media_dir = std::make_shared(mWindow, "", Font::get(FONT_SIZE_SMALL), 0x777777FF); + addEditableTextComponent(row, "CUSTOM MEDIA DIR", sss_media_dir, Settings::getInstance()->getString("SlideshowScreenSaverMediaDir")); + addSaveFunc([sss_media_dir] { + Settings::getInstance()->setString("SlideshowScreenSaverMediaDir", sss_media_dir->getValue()); }); - // recurse custom image directory + // recurse custom media directory auto sss_recurse = std::make_shared(mWindow); sss_recurse->setState(Settings::getInstance()->getBool("SlideshowScreenSaverRecurse")); - addWithLabel(row, "CUSTOM IMAGE DIR RECURSIVE", sss_recurse); + addWithLabel(row, "CUSTOM MEDIA DIR RECURSIVE", sss_recurse); addSaveFunc([sss_recurse] { Settings::getInstance()->setBool("SlideshowScreenSaverRecurse", sss_recurse->getState()); }); @@ -63,6 +63,13 @@ GuiSlideshowScreensaverOptions::GuiSlideshowScreensaverOptions(Window* window, c addSaveFunc([sss_image_filter] { Settings::getInstance()->setString("SlideshowScreenSaverImageFilter", sss_image_filter->getValue()); }); + + // custom video filter + auto sss_video_filter = std::make_shared(mWindow, "", Font::get(FONT_SIZE_SMALL), 0x777777FF); + addEditableTextComponent(row, "CUSTOM VIDEO FILTER", sss_video_filter, Settings::getInstance()->getString("SlideshowScreenSaverVideoFilter")); + addSaveFunc([sss_video_filter] { + Settings::getInstance()->setString("SlideshowScreenSaverVideoFilter", sss_video_filter->getValue()); + }); } GuiSlideshowScreensaverOptions::~GuiSlideshowScreensaverOptions() diff --git a/es-core/src/PowerSaver.cpp b/es-core/src/PowerSaver.cpp index 8c68955f90..8ec641d1c8 100644 --- a/es-core/src/PowerSaver.cpp +++ b/es-core/src/PowerSaver.cpp @@ -32,7 +32,7 @@ void PowerSaver::loadWakeupTime() if (behaviour == "random video") mWakeupTimeout = Settings::getInstance()->getInt("ScreenSaverSwapVideoTimeout") - getMode(); else if (behaviour == "slideshow") - mWakeupTimeout = Settings::getInstance()->getInt("ScreenSaverSwapImageTimeout") - getMode(); + mWakeupTimeout = Settings::getInstance()->getInt("ScreenSaverSwapMediaTimeout") - getMode(); else // Dim and Blank mWakeupTimeout = -1; } diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index cc3854cc29..2512d0e624 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -110,12 +110,13 @@ void Settings::setDefaults() mBoolMap["StretchVideoOnScreenSaver"] = false; mStringMap["PowerSaverMode"] = "disabled"; - mIntMap["ScreenSaverSwapImageTimeout"] = 10000; + mIntMap["ScreenSaverSwapMediaTimeout"] = 10000; mBoolMap["SlideshowScreenSaverStretch"] = false; mStringMap["SlideshowScreenSaverBackgroundAudioFile"] = Utils::FileSystem::getHomePath() + "/.emulationstation/slideshow/audio/slideshow_bg.wav"; - mBoolMap["SlideshowScreenSaverCustomImageSource"] = false; - mStringMap["SlideshowScreenSaverImageDir"] = Utils::FileSystem::getHomePath() + "/.emulationstation/slideshow/image"; - mStringMap["SlideshowScreenSaverImageFilter"] = ".png,.jpg,.mp4,.avi"; + mBoolMap["SlideshowScreenSaverCustomMediaSource"] = false; + mStringMap["SlideshowScreenSaverMediaDir"] = Utils::FileSystem::getHomePath() + "/.emulationstation/slideshow/media"; + mStringMap["SlideshowScreenSaverImageFilter"] = ".png,.jpg"; + mStringMap["SlideshowScreenSaverVideoFilter"] = ".mp4,.avi"; mBoolMap["SlideshowScreenSaverRecurse"] = false; // This setting only applies to raspberry pi but set it for all platforms so @@ -246,6 +247,16 @@ void Settings::loadFile() processBackwardCompatibility(); } +template +void Settings::renameSetting(Map& map, std::string&& oldName, std::string&& newName) +{ + typename Map::const_iterator it = map.find(oldName); + if (it != map.end()) { + map[newName] = it->second; + map.erase(it); + } +} + void Settings::processBackwardCompatibility() { { // SaveGamelistsOnExit -> SaveGamelistsMode @@ -255,8 +266,15 @@ void Settings::processBackwardCompatibility() mBoolMap.erase(it); } } + + { // ScreenSaverSlideShow Image -> Media + renameSetting>(mIntMap, std::string("ScreenSaverSwapImageTimeout"), std::string("ScreenSaverSwapMediaTimeout")); + renameSetting>(mBoolMap, std::string("SlideshowScreenSaverCustomImageSource"), std::string("SlideshowScreenSaverCustomMediaSource")); + renameSetting>(mStringMap, std::string("SlideshowScreenSaverImageDir"), std::string("SlideshowScreenSaverMediaDir")); + } } + //Print a warning message if the setting we're trying to get doesn't already exist in the map, then return the value in the map. #define SETTINGS_GETSET(type, mapName, getMethodName, setMethodName) type Settings::getMethodName(const std::string& name) \ { \ diff --git a/es-core/src/Settings.h b/es-core/src/Settings.h index 34b54957d6..51d19a798c 100644 --- a/es-core/src/Settings.h +++ b/es-core/src/Settings.h @@ -31,9 +31,10 @@ class Settings Settings(); - //Clear everything and load default values. - void setDefaults(); + void setDefaults(); //Clear everything and load default values. void processBackwardCompatibility(); + template + void renameSetting(Map& map, std::string&& oldName, std::string&& newName); std::map mBoolMap; std::map mIntMap; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 8786942ddd..93202fec4e 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -181,7 +181,7 @@ bool Window::inputDuringScreensaver(InputConfig* config, Input input) } else if (is_start_input) { - bool slideshow_custom_images = Settings::getInstance()->getBool("SlideshowScreenSaverCustomImageSource"); + bool slideshow_custom_images = Settings::getInstance()->getBool("SlideshowScreenSaverCustomMediaSource"); if (screensaver_type == "random video" || !slideshow_custom_images) { mScreenSaver->launchGame(); From b513c19c5bcaf24c7a292fba9ffa8811937ea0fe Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sun, 31 Oct 2021 19:28:55 +0000 Subject: [PATCH 498/603] bump version to v2.11.0-dev --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 3af2071aa5..24e83971ca 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -5,13 +5,13 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 10 +#define PROGRAM_VERSION_MINOR 11 #define PROGRAM_VERSION_MAINTENANCE 0 -#define PROGRAM_VERSION_STRING "2.10.0rp-dev" +#define PROGRAM_VERSION_STRING "2.11.0rp-dev" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,10,0\0" +#define RESOURCE_VERSION_STRING "2,11,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE #endif // ES_APP_EMULATION_STATION_H From 1df4bbfc8ef5c983eac09a21568c82ebd27e9ad1 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Mon, 20 Dec 2021 12:25:20 +0200 Subject: [PATCH 499/603] TimeUtil: use `strftime` for date/time formatting. The change extends the DateTime formatting options and simplifies a bit the code. --- THEMES.md | 7 +++- es-core/src/utils/TimeUtil.cpp | 71 ++++------------------------------ 2 files changed, 13 insertions(+), 65 deletions(-) diff --git a/THEMES.md b/THEMES.md index 638f0a5213..5399b03143 100644 --- a/THEMES.md +++ b/THEMES.md @@ -832,13 +832,18 @@ EmulationStation borrows the concept of "nine patches" from Android (or "9-Slice * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. * `displayRelative` - type: BOOLEAN. Renders the datetime as a a relative string (ex: 'x days ago') -* `format` - type: STRING. Specifies format for rendering datetime. +* `format` - type: STRING. Specifies format for rendering datetime, according to the `strftime` conversion format (see https://man7.org/linux/man-pages/man3/strftime.3.html). + Common formating placeholders(see the link above for all available sequences): - %Y: The year, including the century (1900) + - %y: The year as a decimal number without a century - %m: The month number [01,12] - %d: The day of the month [01,31] - %H: The hour (24-hour clock) [00,23] - %M: The minute [00,59] - %S: The second [00,59] + - %R: The time in 24-hour notation + - %B: The full month name + - %b: Abbreviated month name #### sound diff --git a/es-core/src/utils/TimeUtil.cpp b/es-core/src/utils/TimeUtil.cpp index 85fe21c71e..684ad6e9f3 100644 --- a/es-core/src/utils/TimeUtil.cpp +++ b/es-core/src/utils/TimeUtil.cpp @@ -219,73 +219,16 @@ namespace Utils const char* f = _format.c_str(); const tm timeStruct = *localtime(&_time); char buf[256] = { '\0' }; - char* s = buf; + const int MAX_LENGTH = 256; - while(*f) + // Use strftime to format the string + if (!strftime(buf, MAX_LENGTH, _format.c_str(), &timeStruct)) { + return ""; + } + else { - if(*f == '%') - { - ++f; - - switch(*f++) - { - case 'Y': // The year, including the century (1900) - { - const int year = timeStruct.tm_year + 1900; - *s++ = (char)((year - (year % 1000)) / 1000) + '0'; - *s++ = (char)(((year % 1000) - (year % 100)) / 100) + '0'; - *s++ = (char)(((year % 100) - (year % 10)) / 10) + '0'; - *s++ = (char)(year % 10) + '0'; - } - break; - - case 'm': // The month number [00,11] - { - const int mon = timeStruct.tm_mon + 1; - *s++ = (char)(mon / 10) + '0'; - *s++ = (char)(mon % 10) + '0'; - } - break; - - case 'd': // The day of the month [01,31] - { - *s++ = (char)(timeStruct.tm_mday / 10) + '0'; - *s++ = (char)(timeStruct.tm_mday % 10) + '0'; - } - break; - - case 'H': // The hour (24-hour clock) [00,23] - { - *s++ = (char)(timeStruct.tm_hour / 10) + '0'; - *s++ = (char)(timeStruct.tm_hour % 10) + '0'; - } - break; - - case 'M': // The minute [00,59] - { - *s++ = (char)(timeStruct.tm_min / 10) + '0'; - *s++ = (char)(timeStruct.tm_min % 10) + '0'; - } - break; - - case 'S': // The second [00,59] - { - *s++ = (char)(timeStruct.tm_sec / 10) + '0'; - *s++ = (char)(timeStruct.tm_sec % 10) + '0'; - } - break; - } - } - else - { - *s++ = *f++; - } - - *s = '\0'; + return std::string(buf); } - - return std::string(buf); - } // timeToString ////////////////////////////////////////////////////////////////////////// From d37d36b558f90b816d1442a97d920f500617058e Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Mon, 20 Dec 2021 13:42:17 +0200 Subject: [PATCH 500/603] New scraping platforms. Added: * Nintendo Switch (TGDB, ScreenScraper) * TIC 80 (ScreenScraper) * PICO-8 (ScreenScraper) * Sam Coupe (TGDB, ScreenScraper) * PC-FX (TGDB, ScreenScraper) * ZMachine (ScreenScraper) Updated: * ZX81 Sinclair - added for TGDB --- es-app/src/PlatformId.cpp | 6 ++++++ es-app/src/PlatformId.h | 6 ++++++ es-app/src/scrapers/GamesDBJSONScraper.cpp | 4 ++++ es-app/src/scrapers/ScreenScraper.cpp | 8 +++++++- 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 7686f3dbef..3ed119eb91 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -49,6 +49,7 @@ namespace PlatformIds "wiiu", "virtualboy", "gameandwatch", + "switch", // Nintendo Switch "openbor", "pc", "sega32x", @@ -60,6 +61,7 @@ namespace PlatformIds "megadrive", // sega megadrive "saturn", // sega saturn "sg-1000", + "samcoupe", "psx", "ps2", "ps3", @@ -71,11 +73,14 @@ namespace PlatformIds "x1", "x68000", "solarus", + "pico8", + "tic80", "moto", // Thomson MO/TO "pc88", // NEC PC-8801 "pc98", // NEC PC-9801 "pcengine", // (aka turbografx-16) HuCards only "pcenginecd", // (aka turbografx-16) CD-ROMs only + "pcfx", "wonderswan", "wonderswancolor", "zxspectrum", @@ -84,6 +89,7 @@ namespace PlatformIds "vectrex", "trs-80", "coco", + "zmachine", "ignore", // do not allow scraping for this system "invalid" diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index 0c10671b09..8e1d6481fc 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -50,6 +50,7 @@ namespace PlatformIds NINTENDO_WII_U, NINTENDO_VIRTUAL_BOY, NINTENDO_GAME_AND_WATCH, + NINTENDO_SWITCH, OPENBOR, PC, SEGA_32X, @@ -61,6 +62,7 @@ namespace PlatformIds SEGA_MEGA_DRIVE, SEGA_SATURN, SEGA_SG1000, + SAM_COUPE, PLAYSTATION, PLAYSTATION_2, PLAYSTATION_3, @@ -72,11 +74,14 @@ namespace PlatformIds SHARP_X1, SHARP_X6800, SOLARUS, + PICO_8, + TIC_80, THOMSON_MOTO, NEC_PC_8801, NEC_PC_9801, TURBOGRAFX_16, // (aka PC Engine) HuCards only TURBOGRAFX_CD, // (aka PC Engine) CD-ROMs only + NEC_PCFX, WONDERSWAN, WONDERSWAN_COLOR, ZX_SPECTRUM, @@ -85,6 +90,7 @@ namespace PlatformIds VECTREX, TRS80_COLOR_COMPUTER, TANDY, + ZMACHINE, PLATFORM_IGNORE, // do not allow scraping for this system PLATFORM_COUNT diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index 3bf0d6ed0b..ac86d052b1 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -74,6 +74,7 @@ const std::map gamesdb_new_platformid_map{ { NINTENDO_WII_U, "38" }, { NINTENDO_VIRTUAL_BOY, "4918" }, { NINTENDO_GAME_AND_WATCH, "4950" }, + { NINTENDO_SWITCH, "4971" }, { PC, "1" }, { SEGA_32X, "33" }, { SEGA_CD, "21" }, @@ -84,6 +85,7 @@ const std::map gamesdb_new_platformid_map{ { SEGA_MEGA_DRIVE, "36" }, { SEGA_SATURN, "17" }, { SEGA_SG1000, "4949" }, + { SAM_COUPE, "4979" }, { PLAYSTATION, "10" }, { PLAYSTATION_2, "11" }, { PLAYSTATION_3, "12" }, @@ -97,9 +99,11 @@ const std::map gamesdb_new_platformid_map{ { NEC_PC_9801, "4934"}, { TURBOGRAFX_16, "34" }, // HuCards only { TURBOGRAFX_CD, "4955" }, // CD-ROMs only + { NEC_PCFX, "4930" }, { WONDERSWAN, "4925" }, { WONDERSWAN_COLOR, "4926" }, { ZX_SPECTRUM, "4913" }, + { ZX81_SINCLAR, "5010" }, { VIDEOPAC_ODYSSEY2, "4927" }, { VECTREX, "4939" }, { TRS80_COLOR_COMPUTER, "4941" }, diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index e7f9625031..1a69506889 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -58,6 +58,7 @@ const std::map screenscraper_platformid_map{ { NINTENDO_WII_U, 18 }, { NINTENDO_VIRTUAL_BOY, 11 }, { NINTENDO_GAME_AND_WATCH, 52 }, + { NINTENDO_SWITCH, 225 }, { PC, 135 }, { OPENBOR, 214 }, { SCUMMVM, 123}, @@ -70,9 +71,12 @@ const std::map screenscraper_platformid_map{ { SEGA_MEGA_DRIVE, 1 }, { SEGA_SATURN, 22 }, { SEGA_SG1000, 109 }, + { SAM_COUPE, 213 }, { SHARP_X1, 220}, { SHARP_X6800, 79}, { SOLARUS, 223 }, + { PICO_8, 234 }, + { TIC_80, 222 }, { THOMSON_MOTO, 141}, { NEC_PC_8801, 221}, { NEC_PC_9801, 208}, @@ -85,6 +89,7 @@ const std::map screenscraper_platformid_map{ { SUPER_NINTENDO, 4 }, { TURBOGRAFX_16, 31 }, { TURBOGRAFX_CD, 114 }, + { NEC_PCFX, 72 }, { WONDERSWAN, 45 }, { WONDERSWAN_COLOR, 46 }, { ZX_SPECTRUM, 76 }, @@ -92,7 +97,8 @@ const std::map screenscraper_platformid_map{ { VIDEOPAC_ODYSSEY2, 104 }, { VECTREX, 102 }, { TRS80_COLOR_COMPUTER, 144 }, - { TANDY, 144 } + { TANDY, 144 }, + { ZMACHINE, 21 } }; From 13c33002798d8548853cc34ed66fe06e8bbbaf2f Mon Sep 17 00:00:00 2001 From: pjft Date: Sun, 26 Dec 2021 09:13:43 +0000 Subject: [PATCH 501/603] Revert default ThreadedLoading option --- es-core/src/Settings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 71317c979d..5ffefbcfc5 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -80,7 +80,7 @@ void Settings::setDefaults() mBoolMap["QuickSystemSelect"] = true; mBoolMap["MoveCarousel"] = true; - mBoolMap["ThreadedLoading"] = true; + mBoolMap["ThreadedLoading"] = false; mBoolMap["Debug"] = false; mBoolMap["DebugGrid"] = false; From f9213c7bd7613b46e539dea38eccb797f01aab3c Mon Sep 17 00:00:00 2001 From: EnsignRutherford <31388235+EnsignRutherford@users.noreply.github.com> Date: Mon, 17 Jan 2022 11:36:18 -0500 Subject: [PATCH 502/603] Update SystemScreenSaver.cpp Removed reference to the profiling utility. --- es-app/src/SystemScreenSaver.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index db1c722c9f..4bf433be2b 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -11,7 +11,6 @@ #include "FileData.h" #include "FileFilterIndex.h" #include "Log.h" -#include "utils/ProfilingUtil.h" #include "PowerSaver.h" #include "Scripting.h" #include "Sound.h" From 3cb84b0afdfe0d97fc7a6e7ac42503485822a467 Mon Sep 17 00:00:00 2001 From: EnsignRutherford Date: Wed, 19 Jan 2022 11:12:57 -0500 Subject: [PATCH 503/603] Added fully qualified path to game-select events and added game name to game-start event. --- es-app/src/FileData.cpp | 3 ++- es-app/src/SystemScreenSaver.cpp | 2 +- es-app/src/views/ViewController.cpp | 2 +- es-app/src/views/gamelist/ISimpleGameListView.cpp | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 31b9848b8d..5d8d5fa0e0 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -279,12 +279,13 @@ void FileData::launchGame(Window* window) const std::string rom = Utils::FileSystem::getEscapedPath(getPath()); const std::string basename = Utils::FileSystem::getStem(getPath()); const std::string rom_raw = Utils::FileSystem::getPreferredPath(getPath()); + const std::string name = getName(); command = Utils::String::replace(command, "%ROM%", rom); command = Utils::String::replace(command, "%BASENAME%", basename); command = Utils::String::replace(command, "%ROM_RAW%", rom_raw); - Scripting::fireEvent("game-start", rom, basename); + Scripting::fireEvent("game-start", rom, basename, name); LOG(LogInfo) << " " << command; int exitCode = runSystemCommand(command); diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 4bf433be2b..64b980fe16 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -109,7 +109,7 @@ void SystemScreenSaver::startScreenSaver() #endif if (mCurrentGame != NULL) { - Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getFileName(), mCurrentGame->getName(), "randomvideo"); + Scripting::fireEvent("screensaver-game-select", mCurrentGame->getSystem()->getName(), mCurrentGame->getPath(), mCurrentGame->getName(), "randomvideo"); } mVideoScreensaver->topWindow(true); mVideoScreensaver->setOrigin(0.5f, 0.5f); diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index b109ab3d04..d96181dc0c 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -58,7 +58,7 @@ void ViewController::goToStart() FileData* cursor = getGameListView(*it)->getCursor(); if (cursor != NULL) { - Scripting::fireEvent("game-select", requestedSystem, cursor->getFileName(), cursor->getName(), "requestedgame"); + Scripting::fireEvent("game-select", requestedSystem, cursor->getPath(), cursor->getName(), "requestedgame"); } else { diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index e7f0d7332c..e783c21629 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -164,7 +164,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) FileData* cursor = getCursor(); SystemData* system = this->mRoot->getSystem(); if (system != NULL) { - Scripting::fireEvent("game-select", system->getName(), cursor->getFileName(), cursor->getName(), "input"); + Scripting::fireEvent("game-select", system->getName(), cursor->getPath(), cursor->getName(), "input"); } else { From 495753abe6a6a4c1ea65dae976ef4b45a95a2ff8 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 20 Jan 2022 11:33:00 +0100 Subject: [PATCH 504/603] Silence compiler warnings --- es-app/src/SystemScreenSaver.cpp | 2 +- es-core/src/InputManager.cpp | 4 +++- es-core/src/resources/ResourceManager.h | 1 + es-core/src/utils/TimeUtil.cpp | 11 ++++++----- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 93a3030401..b95e4cee51 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -340,7 +340,7 @@ std::vector SystemScreenSaver::getAllGamelistNodes() void SystemScreenSaver::pickGameListNode(const char *nodeName, std::string& path) { - FileData *itf; + FileData *itf = nullptr; bool found = false; int missCtr = 0; while (!found) { diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 4e43f88b1f..4ef5c4ac04 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -57,8 +57,10 @@ void InputManager::init() Settings::getInstance()->getBool("BackgroundJoystickInput") ? "1" : "0"); // Don't enable the HIDAPI drivers by default, it will break the existing configurations // for a few controller types, since the names and the input mappings are different. -#if SDL_VERSION_ATLEAST(2,0,9) and not(_WIN32) +#if !defined(_WIN32) +#if SDL_VERSION_ATLEAST(2,0,9) SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI, "0"); +#endif #endif SDL_InitSubSystem(SDL_INIT_JOYSTICK); SDL_JoystickEventState(SDL_ENABLE); diff --git a/es-core/src/resources/ResourceManager.h b/es-core/src/resources/ResourceManager.h index a0fa3cef0c..7f86251ccd 100644 --- a/es-core/src/resources/ResourceManager.h +++ b/es-core/src/resources/ResourceManager.h @@ -4,6 +4,7 @@ #include #include +#include //The ResourceManager exists to... //Allow loading resources embedded into the executable like an actual file. diff --git a/es-core/src/utils/TimeUtil.cpp b/es-core/src/utils/TimeUtil.cpp index 684ad6e9f3..1a9f76103c 100644 --- a/es-core/src/utils/TimeUtil.cpp +++ b/es-core/src/utils/TimeUtil.cpp @@ -216,19 +216,20 @@ namespace Utils std::string timeToString(const time_t& _time, const std::string& _format) { - const char* f = _format.c_str(); - const tm timeStruct = *localtime(&_time); - char buf[256] = { '\0' }; - const int MAX_LENGTH = 256; + const tm timeStruct = *localtime(&_time); + char buf[256] = { '\0' }; + const int MAX_LENGTH = 256; // Use strftime to format the string - if (!strftime(buf, MAX_LENGTH, _format.c_str(), &timeStruct)) { + if(!strftime(buf, MAX_LENGTH, _format.c_str(), &timeStruct)) + { return ""; } else { return std::string(buf); } + } // timeToString ////////////////////////////////////////////////////////////////////////// From ab38884a15b9e7ca99bdaa1edfc6ccfdb24bd368 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 20 Jan 2022 11:33:11 +0100 Subject: [PATCH 505/603] Potentially fix multithread issue --- es-core/src/utils/FileSystemUtil.cpp | 33 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 0279f054f1..c7412cda2c 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -5,12 +5,12 @@ #include #include #include +#include #if defined(_WIN32) // because windows... #include #include -#include #define getcwd _getcwd #define mkdir(x,y) _mkdir(x) #define snprintf _snprintf @@ -29,15 +29,14 @@ namespace Utils { namespace FileSystem { - static std::string homePath = ""; - static std::string exePath = ""; - static std::map mPathExistsIndex = std::map(); + static std::recursive_mutex mutex = {}; + static std::string homePath = ""; + static std::string exePath = ""; + static std::map pathExistsIndex = std::map(); ////////////////////////////////////////////////////////////////////////// #if defined(_WIN32) - std::mutex mFileMutex; // Avoids enumerating N folders at the same time in threaded loadings - static std::string convertFromWideString(const std::wstring _wstring) { const int numBytes = WideCharToMultiByte(CP_UTF8, 0, _wstring.c_str(), (int)_wstring.length(), nullptr, 0, nullptr, nullptr); @@ -62,11 +61,10 @@ namespace Utils { #if defined(_WIN32) - std::unique_lock lock(mFileMutex); - - WIN32_FIND_DATAW findData; - const std::string wildcard = path + "/*"; - const HANDLE hFind = FindFirstFileW(std::wstring(wildcard.begin(), wildcard.end()).c_str(), &findData); + const std::unique_lock lock(mutex); + WIN32_FIND_DATAW findData; + const std::string wildcard = path + "/*"; + const HANDLE hFind = FindFirstFileW(std::wstring(wildcard.begin(), wildcard.end()).c_str(), &findData); if(hFind != INVALID_HANDLE_VALUE) { @@ -600,7 +598,8 @@ namespace Utils bool removeFile(const std::string& _path) { - const std::string path = getGenericPath(_path); + const std::unique_lock lock(mutex); + const std::string path = getGenericPath(_path); // don't remove if it doesn't exists if(!exists(path)) @@ -610,7 +609,7 @@ namespace Utils // if removed, let's remove it from the index if (removed) - mPathExistsIndex[_path] = false; + pathExistsIndex[_path] = false; // try to remove file return removed; @@ -647,15 +646,17 @@ namespace Utils bool exists(const std::string& _path) { - if (mPathExistsIndex.find(_path) == mPathExistsIndex.cend()) + const std::unique_lock lock(mutex); + + if (pathExistsIndex.find(_path) == pathExistsIndex.cend()) { const std::string path = getGenericPath(_path); struct stat64 info; // check if stat64 succeeded - mPathExistsIndex[_path] = (stat64(path.c_str(), &info) == 0); + pathExistsIndex[_path] = (stat64(path.c_str(), &info) == 0); } - return mPathExistsIndex.at(_path); + return pathExistsIndex.at(_path); } // exists From 1aa46958ab6e571ba7618a91e494d1fde0941424 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 20 Jan 2022 11:33:18 +0100 Subject: [PATCH 506/603] Base SVG size on height --- es-core/src/resources/TextureData.cpp | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index fbe0010a19..31b948ed67 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -46,7 +46,7 @@ bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length NSVGimage* svgImage = nsvgParse(copy, "px", DPI); free(copy); - if (!svgImage) + if (!svgImage || (svgImage->width == 0) || (svgImage->height == 0)) { LOG(LogError) << "Error parsing SVG image."; return false; @@ -54,25 +54,14 @@ bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length // We want to rasterise this texture at a specific resolution. If the source size // variables are set then use them otherwise set them from the parsed file - if ((mSourceWidth == 0.0f) && (mSourceHeight == 0.0f)) - { - mSourceWidth = svgImage->width; + if (mSourceHeight == 0.0f) mSourceHeight = svgImage->height; - } + + mSourceWidth = (mSourceHeight * svgImage->width) / svgImage->height; + mWidth = (size_t)Math::round(mSourceWidth); mHeight = (size_t)Math::round(mSourceHeight); - if (mWidth == 0) - { - // auto scale width to keep aspect - mWidth = (size_t)Math::round(((float)mHeight / svgImage->height) * svgImage->width); - } - else if (mHeight == 0) - { - // auto scale height to keep aspect - mHeight = (size_t)Math::round(((float)mWidth / svgImage->width) * svgImage->height); - } - unsigned char* dataRGBA = new unsigned char[mWidth * mHeight * 4]; NSVGrasterizer* rast = nsvgCreateRasterizer(); From bc4f81b547dc06c4367bc6d3036b98a71f1d7e89 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Fri, 15 Oct 2021 18:31:09 +0300 Subject: [PATCH 507/603] Improve text wrapping (rebased #269) This is a re-work of PR#269 and PR#314: * originally proposed by @eagle0wl and discussed/tested with @zigurana during #269, with the motivation being to accomodate texts in languages that don't use spaces between successive characters and words (e.g. Japanese/Chinese). * @zigurana created a smaller PR in #314 (now closed), but hasn't been updated after @tomaz82's work that changed the Unicode (UTF8) string handling functions (see #297). I've taken the changes from @zigurana's PR (#269) and updated the code to use `Utils::String::chars2Unicode`. I added a smaller change for parsing the text. Since we analyze each Unicode code point now (instead of a string), I replaced the `sizeText` call with a simpler function, which gets the size for just the codepoint being scanned. `lineWidth` is consequently incremended for each Unicode code point or reset on a new line. The performance of `textWrap` looks similar or better than the previous implementation (based in whitespace tokenization) and the results are similar to what was tested during the initial PR (#269). **NOTE**: the line breaking for non-whitespace texts is a simple split around Unicode code points. Each language may have additional rules for line breaking in texts (i.e. some characters are not allowed at the end/beginning of a line, etc.). These rules are not implemented in this update, it would require additional text analysis. Some details on line breaking rules for Japanese/Chinese/Korean languages can be consulted at https://en.wikipedia.org/wiki/Line_breaking_rules_in_East_Asian_languages Original descriptions for the changes on which this modification is based: * from @eagl0wl's #269, _refine text wordwrap_: > refined single-multibyte text wordwrap. > You can now properly wrap Japanese character strings. > You can see some screenshot. If necessary, I can present more screenshots. > http://eagle0wl.hatenadiary.jp/entry/2017/10/24/003606 * from @zigurana's #314, _Line-breaking (wrapping) for non ascii strings_ > New PR (replacing #269). Closes: #269 Supercedes: #269 --- es-core/src/resources/Font.cpp | 126 +++++++++++++++++++++------------ es-core/src/resources/Font.h | 3 + 2 files changed, 83 insertions(+), 46 deletions(-) diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index f222e619f7..c314082fe7 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -416,6 +416,29 @@ void Font::renderTextCache(TextCache* cache) } } +Vector2f Font::sizeCodePoint(unsigned int character, float lineSpacing) +{ + float lineWidth = 0.0f; + + const float lineHeight = getHeight(lineSpacing); + + float y = lineHeight; + + if(character == '\n') + { + lineWidth = 0.0f; + y += lineHeight; + } + else + { + Glyph* glyph = getGlyph(character); + if (glyph) + lineWidth = glyph->advance.x(); + } + + return Vector2f(lineWidth, y); +} + Vector2f Font::sizeText(std::string text, float lineSpacing) { float lineWidth = 0.0f; @@ -462,45 +485,56 @@ float Font::getLetterHeight() return glyph->texSize.y() * glyph->texture->textureSize.y(); } -//the worst algorithm ever written -//breaks up a normal string with newlines to make it fit xLen -std::string Font::wrapText(std::string text, float xLen) -{ - std::string out; - - std::string line, word, temp; - size_t space; - - Vector2f textSize; + +// Naive way to find whitespace characters, only includes the common ones in the ASCII range! +bool Font::isWhiteSpace(unsigned int c) +{ + return (c == (unsigned int) ' ' || + c == (unsigned int) '\n' || + c == (unsigned int) '\t' || + c == (unsigned int) '\v' || + c == (unsigned int) '\f' || + c == (unsigned int) '\r'); +} - while(text.length() > 0) //while there's text or we still have text to render +// Breaks up a normal string with newlines to make it fit width (in pixels) +std::string Font::wrapText(std::string text, float maxWidth) +{ + std::string out = ""; + while(text.length() > 0) // find next cut-point { - space = text.find_first_of(" \t\n"); - if(space == std::string::npos) - space = text.length() - 1; - - word = text.substr(0, space + 1); - text.erase(0, space + 1); - - temp = line + word; + size_t cursor = 0; + float lineWidth = 0.0f; + size_t lastWhiteSpace = 0; - textSize = sizeText(temp); + while((lineWidth < maxWidth) && (cursor < text.length())) + { + unsigned int c = Utils::String::chars2Unicode(text, cursor); // also advances cursor! + lineWidth += sizeCodePoint(c).x(); + if(isWhiteSpace(c)) + { + lastWhiteSpace = cursor; + } + + if(c == '\n') + { + lineWidth = 0.0f; + } + } - // if the word will fit on the line, add it to our line, and continue - if(textSize.x() <= xLen) + if(cursor == text.length()) // arrived at end of text. { - line = temp; - continue; - }else{ - // the next word won't fit, so break here - out += line + '\n'; - line = word; + out += text; + text.erase(); + } + else // need to cut at last whitespace or lacking that, the previous cursor. + { + size_t cut = (lastWhiteSpace != 0) ? lastWhiteSpace : Utils::String::prevCursor(text, cursor); + out += text.substr(0, cut) + "\n"; + text.erase(0, cut); + lineWidth = 0.0f; } } - - // whatever's left should fit - out += line; - return out; } @@ -558,20 +592,20 @@ float Font::getNewlineStartOffset(const std::string& text, const unsigned int& c { switch(alignment) { - case ALIGN_LEFT: - return 0; - case ALIGN_CENTER: - { - unsigned int endChar = (unsigned int)text.find('\n', charStart); - return (xLen - sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()) / 2.0f; - } - case ALIGN_RIGHT: - { - unsigned int endChar = (unsigned int)text.find('\n', charStart); - return xLen - (sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()); - } - default: - return 0; + case ALIGN_LEFT: + return 0; + case ALIGN_CENTER: + { + unsigned int endChar = (unsigned int)text.find('\n', charStart); + return (xLen - sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()) / 2.0f; + } + case ALIGN_RIGHT: + { + unsigned int endChar = (unsigned int)text.find('\n', charStart); + return xLen - (sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()); + } + default: + return 0; } } diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index d720adab5f..88b46820b7 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -42,6 +42,7 @@ class Font : public IReloadable virtual ~Font(); Vector2f sizeText(std::string text, float lineSpacing = 1.5f); // Returns the expected size of a string when rendered. Extra spacing is applied to the Y axis. + Vector2f sizeCodePoint(unsigned int, float lineSpacing = 1.5f); // Returns the expected size of a Unicode code point. TextCache* buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color); TextCache* buildTextCache(const std::string& text, Vector2f offset, unsigned int color, float xLen, Alignment alignment = ALIGN_LEFT, float lineSpacing = 1.5f); void renderTextCache(TextCache* cache); @@ -124,6 +125,8 @@ class Font : public IReloadable Glyph* getGlyph(unsigned int id); + bool isWhiteSpace(unsigned int c); + int mMaxGlyphHeight; const int mSize; From f126353600ea1c563153b8fb9f7140d5dfe06b4c Mon Sep 17 00:00:00 2001 From: pjft Date: Tue, 25 Jan 2022 21:18:39 +0000 Subject: [PATCH 508/603] Fix navigating to parent when list is filtered --- es-app/src/guis/GuiFastSelect.cpp | 2 +- es-app/src/views/gamelist/ISimpleGameListView.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/guis/GuiFastSelect.cpp b/es-app/src/guis/GuiFastSelect.cpp index b6d16d456e..4912c70438 100644 --- a/es-app/src/guis/GuiFastSelect.cpp +++ b/es-app/src/guis/GuiFastSelect.cpp @@ -142,7 +142,7 @@ void GuiFastSelect::updateGameListSort() void GuiFastSelect::updateGameListCursor() { - const std::vector& list = mGameList->getCursor()->getParent()->getChildren(); + const std::vector& list = mGameList->getCursor()->getParent()->getChildrenListToDisplay(); // only skip by letter when the sort mode is alphabetical const FileData::SortType& sort = FileSorts::SortTypes.at(mSortId); diff --git a/es-app/src/views/gamelist/ISimpleGameListView.cpp b/es-app/src/views/gamelist/ISimpleGameListView.cpp index 5fa612b342..5747ca5573 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.cpp +++ b/es-app/src/views/gamelist/ISimpleGameListView.cpp @@ -104,7 +104,7 @@ bool ISimpleGameListView::input(InputConfig* config, Input input) { if(mCursorStack.size()) { - populateList(mCursorStack.top()->getParent()->getChildren()); + populateList(mCursorStack.top()->getParent()->getChildrenListToDisplay()); setCursor(mCursorStack.top()); mCursorStack.pop(); Sound::getFromTheme(getTheme(), getName(), "back")->play(); From 367e0b00ea2685ea64597bf7dca23e395b1cf304 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Thu, 27 Jan 2022 15:55:02 +0100 Subject: [PATCH 509/603] Fix broken lineendings --- es-core/src/resources/Font.cpp | 1420 ++++++++++++++++---------------- 1 file changed, 710 insertions(+), 710 deletions(-) diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index c314082fe7..b6bc31dc52 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -1,490 +1,490 @@ -#include "resources/Font.h" - -#include "renderers/Renderer.h" -#include "utils/FileSystemUtil.h" -#include "utils/StringUtil.h" -#include "Log.h" - -#ifdef WIN32 -#include -#endif - -FT_Library Font::sLibrary = NULL; - -int Font::getSize() const { return mSize; } - -std::map< std::pair, std::weak_ptr > Font::sFontMap; - -Font::FontFace::FontFace(ResourceData&& d, int size) : data(d) -{ - int err = FT_New_Memory_Face(sLibrary, data.ptr.get(), (FT_Long)data.length, 0, &face); - assert(!err); - - if(!err) - FT_Set_Pixel_Sizes(face, 0, size); -} - -Font::FontFace::~FontFace() -{ - if(face) - FT_Done_Face(face); -} - -void Font::initLibrary() -{ - assert(sLibrary == NULL); - if(FT_Init_FreeType(&sLibrary)) - { - sLibrary = NULL; - LOG(LogError) << "Error initializing FreeType!"; - } -} - -size_t Font::getMemUsage() const -{ - size_t memUsage = 0; - for(auto it = mTextures.cbegin(); it != mTextures.cend(); it++) - memUsage += it->textureSize.x() * it->textureSize.y() * 4; - - for(auto it = mFaceCache.cbegin(); it != mFaceCache.cend(); it++) - memUsage += it->second->data.length; - - return memUsage; -} - -size_t Font::getTotalMemUsage() -{ - size_t total = 0; - - auto it = sFontMap.cbegin(); - while(it != sFontMap.cend()) - { - if(it->second.expired()) - { - it = sFontMap.erase(it); - continue; - } - - total += it->second.lock()->getMemUsage(); - it++; - } - - return total; -} - -Font::Font(int size, const std::string& path) : mSize(size), mPath(path) -{ - assert(mSize > 0); - - mLoaded = true; - mMaxGlyphHeight = 0; - - if(!sLibrary) - initLibrary(); - - // always initialize ASCII characters - for(unsigned int i = 32; i < 128; i++) - getGlyph(i); - - clearFaceCache(); -} - -Font::~Font() -{ - unload(); -} - -void Font::reload() -{ - if (mLoaded) - return; - - rebuildTextures(); - mLoaded = true; -} - -bool Font::unload() -{ - if (mLoaded) - { - unloadTextures(); - mLoaded = false; - return true; - } - - return false; -} - -std::shared_ptr Font::get(int size, const std::string& path) -{ - const std::string canonicalPath = Utils::FileSystem::getCanonicalPath(path); - - std::pair def(canonicalPath.empty() ? getDefaultPath() : canonicalPath, size); - auto foundFont = sFontMap.find(def); - if(foundFont != sFontMap.cend()) - { - if(!foundFont->second.expired()) - return foundFont->second.lock(); - } - - std::shared_ptr font = std::shared_ptr(new Font(def.second, def.first)); - sFontMap[def] = std::weak_ptr(font); - ResourceManager::getInstance()->addReloadable(font); - return font; -} - -void Font::unloadTextures() -{ - for(auto it = mTextures.begin(); it != mTextures.end(); it++) - { - it->deinitTexture(); - } -} - -Font::FontTexture::FontTexture() -{ - textureId = 0; - textureSize = Vector2i(2048, 512); - writePos = Vector2i::Zero(); - rowHeight = 0; -} - -Font::FontTexture::~FontTexture() -{ - deinitTexture(); -} - -bool Font::FontTexture::findEmpty(const Vector2i& size, Vector2i& cursor_out) -{ - if(size.x() >= textureSize.x() || size.y() >= textureSize.y()) - return false; - - if(writePos.x() + size.x() >= textureSize.x() && - writePos.y() + rowHeight + size.y() + 1 < textureSize.y()) - { - // row full, but it should fit on the next row - // move cursor to next row - writePos = Vector2i(0, writePos.y() + rowHeight + 1); // leave 1px of space between glyphs - rowHeight = 0; - } - - if(writePos.x() + size.x() >= textureSize.x() || - writePos.y() + size.y() >= textureSize.y()) - { - // nope, still won't fit - return false; - } - - cursor_out = writePos; - writePos[0] += size.x() + 1; // leave 1px of space between glyphs - - if(size.y() > rowHeight) - rowHeight = size.y(); - - return true; -} - -void Font::FontTexture::initTexture() -{ - assert(textureId == 0); - textureId = Renderer::createTexture(Renderer::Texture::ALPHA, false, false, textureSize.x(), textureSize.y(), nullptr); -} - -void Font::FontTexture::deinitTexture() -{ - if(textureId != 0) - { - Renderer::destroyTexture(textureId); - textureId = 0; - } -} - -void Font::getTextureForNewGlyph(const Vector2i& glyphSize, FontTexture*& tex_out, Vector2i& cursor_out) -{ - if(mTextures.size()) - { - // check if the most recent texture has space - tex_out = &mTextures.back(); - - // will this one work? - if(tex_out->findEmpty(glyphSize, cursor_out)) - return; // yes - } - - // current textures are full, - // make a new one - mTextures.push_back(FontTexture()); - tex_out = &mTextures.back(); - tex_out->initTexture(); - - bool ok = tex_out->findEmpty(glyphSize, cursor_out); - if(!ok) - { - LOG(LogError) << "Glyph too big to fit on a new texture (glyph size > " << tex_out->textureSize.x() << ", " << tex_out->textureSize.y() << ")!"; - tex_out = NULL; - } -} - -std::vector getFallbackFontPaths() -{ -#ifdef WIN32 - // Windows - - // get this system's equivalent of "C:\Windows" (might be on a different drive or in a different folder) - // so we can check the Fonts subdirectory for fallback fonts - TCHAR winDir[MAX_PATH]; - GetWindowsDirectory(winDir, MAX_PATH); - std::string fontDir = winDir; - fontDir += "\\Fonts\\"; - - const char* fontNames[] = { - "meiryo.ttc", // japanese - "simhei.ttf", // chinese - "arial.ttf" // latin - }; - - //prepend to font file names - std::vector fontPaths; - fontPaths.reserve(sizeof(fontNames) / sizeof(fontNames[0])); - - for(unsigned int i = 0; i < sizeof(fontNames) / sizeof(fontNames[0]); i++) - { - std::string path = fontDir + fontNames[i]; - if(ResourceManager::getInstance()->fileExists(path)) - fontPaths.push_back(path); - } - - fontPaths.shrink_to_fit(); - return fontPaths; - -#else - // Linux - - const char* paths[] = { - "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", - "/usr/share/fonts/truetype/freefont/FreeMono.ttf", - "/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf" // japanese, chinese, present on Debian - }; - - std::vector fontPaths; - for(unsigned int i = 0; i < sizeof(paths) / sizeof(paths[0]); i++) - { - if(ResourceManager::getInstance()->fileExists(paths[i])) - fontPaths.push_back(paths[i]); - } - - fontPaths.shrink_to_fit(); - return fontPaths; - -#endif -} - -FT_Face Font::getFaceForChar(unsigned int id) -{ - static const std::vector fallbackFonts = getFallbackFontPaths(); - - // look through our current font + fallback fonts to see if any have the glyph we're looking for - for(unsigned int i = 0; i < fallbackFonts.size() + 1; i++) - { - auto fit = mFaceCache.find(i); - - if(fit == mFaceCache.cend()) // doesn't exist yet - { - // i == 0 -> mPath - // otherwise, take from fallbackFonts - const std::string& path = (i == 0 ? mPath : fallbackFonts.at(i - 1)); - ResourceData data = ResourceManager::getInstance()->getFileData(path); - mFaceCache[i] = std::unique_ptr(new FontFace(std::move(data), mSize)); - fit = mFaceCache.find(i); - } - - if(FT_Get_Char_Index(fit->second->face, id) != 0) - return fit->second->face; - } - - // nothing has a valid glyph - return the "real" face so we get a "missing" character - return mFaceCache.cbegin()->second->face; -} - -void Font::clearFaceCache() -{ - mFaceCache.clear(); -} - -Font::Glyph* Font::getGlyph(unsigned int id) -{ - // is it already loaded? - auto it = mGlyphMap.find(id); - if(it != mGlyphMap.cend()) - return &it->second; - - // nope, need to make a glyph - FT_Face face = getFaceForChar(id); - if(!face) - { - LOG(LogError) << "Could not find appropriate font face for character " << id << " for font " << mPath; - return NULL; - } - - FT_GlyphSlot g = face->glyph; - - if(FT_Load_Char(face, id, FT_LOAD_RENDER)) - { - LOG(LogError) << "Could not find glyph for character " << id << " for font " << mPath << ", size " << mSize << "!"; - return NULL; - } - - Vector2i glyphSize(g->bitmap.width, g->bitmap.rows); - - FontTexture* tex = NULL; - Vector2i cursor; - getTextureForNewGlyph(glyphSize, tex, cursor); - - // getTextureForNewGlyph can fail if the glyph is bigger than the max texture size (absurdly large font size) - if(tex == NULL) - { - LOG(LogError) << "Could not create glyph for character " << id << " for font " << mPath << ", size " << mSize << " (no suitable texture found)!"; - return NULL; - } - - // create glyph - Glyph& glyph = mGlyphMap[id]; - - glyph.texture = tex; - glyph.texPos = Vector2f(cursor.x() / (float)tex->textureSize.x(), cursor.y() / (float)tex->textureSize.y()); - glyph.texSize = Vector2f(glyphSize.x() / (float)tex->textureSize.x(), glyphSize.y() / (float)tex->textureSize.y()); - - glyph.advance = Vector2f((float)g->metrics.horiAdvance / 64.0f, (float)g->metrics.vertAdvance / 64.0f); - glyph.bearing = Vector2f((float)g->metrics.horiBearingX / 64.0f, (float)g->metrics.horiBearingY / 64.0f); - - // upload glyph bitmap to texture - Renderer::updateTexture(tex->textureId, Renderer::Texture::ALPHA, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), g->bitmap.buffer); - - // update max glyph height - if(glyphSize.y() > mMaxGlyphHeight) - mMaxGlyphHeight = glyphSize.y(); - - // done - return &glyph; -} - -// completely recreate the texture data for all textures based on mGlyphs information -void Font::rebuildTextures() -{ - // recreate OpenGL textures - for(auto it = mTextures.begin(); it != mTextures.end(); it++) - { - it->initTexture(); - } - - // reupload the texture data - for(auto it = mGlyphMap.cbegin(); it != mGlyphMap.cend(); it++) - { - FT_Face face = getFaceForChar(it->first); - FT_GlyphSlot glyphSlot = face->glyph; - - // load the glyph bitmap through FT - FT_Load_Char(face, it->first, FT_LOAD_RENDER); - - FontTexture* tex = it->second.texture; - - // find the position/size - Vector2i cursor((int)(it->second.texPos.x() * tex->textureSize.x()), (int)(it->second.texPos.y() * tex->textureSize.y())); - Vector2i glyphSize((int)(it->second.texSize.x() * tex->textureSize.x()), (int)(it->second.texSize.y() * tex->textureSize.y())); - - // upload to texture - Renderer::updateTexture(tex->textureId, Renderer::Texture::ALPHA, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), glyphSlot->bitmap.buffer); - } -} - -void Font::renderTextCache(TextCache* cache) -{ - if(cache == NULL) - { - LOG(LogError) << "Attempted to draw NULL TextCache!"; - return; - } - - for(auto it = cache->vertexLists.cbegin(); it != cache->vertexLists.cend(); it++) - { - assert(*it->textureIdPtr != 0); - - auto vertexList = *it; - - Renderer::bindTexture(*it->textureIdPtr); - Renderer::drawTriangleStrips(&it->verts[0], (int)it->verts.size()); - } -} - -Vector2f Font::sizeCodePoint(unsigned int character, float lineSpacing) -{ - float lineWidth = 0.0f; - - const float lineHeight = getHeight(lineSpacing); - - float y = lineHeight; - - if(character == '\n') - { - lineWidth = 0.0f; - y += lineHeight; - } - else - { - Glyph* glyph = getGlyph(character); - if (glyph) - lineWidth = glyph->advance.x(); - } - - return Vector2f(lineWidth, y); -} - -Vector2f Font::sizeText(std::string text, float lineSpacing) -{ - float lineWidth = 0.0f; - float highestWidth = 0.0f; - - const float lineHeight = getHeight(lineSpacing); - - float y = lineHeight; - - size_t i = 0; - while(i < text.length()) - { - unsigned int character = Utils::String::chars2Unicode(text, i); // advances i - - if(character == '\n') - { - if(lineWidth > highestWidth) - highestWidth = lineWidth; - - lineWidth = 0.0f; - y += lineHeight; - } - - Glyph* glyph = getGlyph(character); - if(glyph) - lineWidth += glyph->advance.x(); - } - - if(lineWidth > highestWidth) - highestWidth = lineWidth; - - return Vector2f(highestWidth, y); -} - -float Font::getHeight(float lineSpacing) const -{ - return mMaxGlyphHeight * lineSpacing; -} - -float Font::getLetterHeight() -{ - Glyph* glyph = getGlyph('S'); - assert(glyph); - return glyph->texSize.y() * glyph->texture->textureSize.y(); -} - +#include "resources/Font.h" + +#include "renderers/Renderer.h" +#include "utils/FileSystemUtil.h" +#include "utils/StringUtil.h" +#include "Log.h" + +#ifdef WIN32 +#include +#endif + +FT_Library Font::sLibrary = NULL; + +int Font::getSize() const { return mSize; } + +std::map< std::pair, std::weak_ptr > Font::sFontMap; + +Font::FontFace::FontFace(ResourceData&& d, int size) : data(d) +{ + int err = FT_New_Memory_Face(sLibrary, data.ptr.get(), (FT_Long)data.length, 0, &face); + assert(!err); + + if(!err) + FT_Set_Pixel_Sizes(face, 0, size); +} + +Font::FontFace::~FontFace() +{ + if(face) + FT_Done_Face(face); +} + +void Font::initLibrary() +{ + assert(sLibrary == NULL); + if(FT_Init_FreeType(&sLibrary)) + { + sLibrary = NULL; + LOG(LogError) << "Error initializing FreeType!"; + } +} + +size_t Font::getMemUsage() const +{ + size_t memUsage = 0; + for(auto it = mTextures.cbegin(); it != mTextures.cend(); it++) + memUsage += it->textureSize.x() * it->textureSize.y() * 4; + + for(auto it = mFaceCache.cbegin(); it != mFaceCache.cend(); it++) + memUsage += it->second->data.length; + + return memUsage; +} + +size_t Font::getTotalMemUsage() +{ + size_t total = 0; + + auto it = sFontMap.cbegin(); + while(it != sFontMap.cend()) + { + if(it->second.expired()) + { + it = sFontMap.erase(it); + continue; + } + + total += it->second.lock()->getMemUsage(); + it++; + } + + return total; +} + +Font::Font(int size, const std::string& path) : mSize(size), mPath(path) +{ + assert(mSize > 0); + + mLoaded = true; + mMaxGlyphHeight = 0; + + if(!sLibrary) + initLibrary(); + + // always initialize ASCII characters + for(unsigned int i = 32; i < 128; i++) + getGlyph(i); + + clearFaceCache(); +} + +Font::~Font() +{ + unload(); +} + +void Font::reload() +{ + if (mLoaded) + return; + + rebuildTextures(); + mLoaded = true; +} + +bool Font::unload() +{ + if (mLoaded) + { + unloadTextures(); + mLoaded = false; + return true; + } + + return false; +} + +std::shared_ptr Font::get(int size, const std::string& path) +{ + const std::string canonicalPath = Utils::FileSystem::getCanonicalPath(path); + + std::pair def(canonicalPath.empty() ? getDefaultPath() : canonicalPath, size); + auto foundFont = sFontMap.find(def); + if(foundFont != sFontMap.cend()) + { + if(!foundFont->second.expired()) + return foundFont->second.lock(); + } + + std::shared_ptr font = std::shared_ptr(new Font(def.second, def.first)); + sFontMap[def] = std::weak_ptr(font); + ResourceManager::getInstance()->addReloadable(font); + return font; +} + +void Font::unloadTextures() +{ + for(auto it = mTextures.begin(); it != mTextures.end(); it++) + { + it->deinitTexture(); + } +} + +Font::FontTexture::FontTexture() +{ + textureId = 0; + textureSize = Vector2i(2048, 512); + writePos = Vector2i::Zero(); + rowHeight = 0; +} + +Font::FontTexture::~FontTexture() +{ + deinitTexture(); +} + +bool Font::FontTexture::findEmpty(const Vector2i& size, Vector2i& cursor_out) +{ + if(size.x() >= textureSize.x() || size.y() >= textureSize.y()) + return false; + + if(writePos.x() + size.x() >= textureSize.x() && + writePos.y() + rowHeight + size.y() + 1 < textureSize.y()) + { + // row full, but it should fit on the next row + // move cursor to next row + writePos = Vector2i(0, writePos.y() + rowHeight + 1); // leave 1px of space between glyphs + rowHeight = 0; + } + + if(writePos.x() + size.x() >= textureSize.x() || + writePos.y() + size.y() >= textureSize.y()) + { + // nope, still won't fit + return false; + } + + cursor_out = writePos; + writePos[0] += size.x() + 1; // leave 1px of space between glyphs + + if(size.y() > rowHeight) + rowHeight = size.y(); + + return true; +} + +void Font::FontTexture::initTexture() +{ + assert(textureId == 0); + textureId = Renderer::createTexture(Renderer::Texture::ALPHA, false, false, textureSize.x(), textureSize.y(), nullptr); +} + +void Font::FontTexture::deinitTexture() +{ + if(textureId != 0) + { + Renderer::destroyTexture(textureId); + textureId = 0; + } +} + +void Font::getTextureForNewGlyph(const Vector2i& glyphSize, FontTexture*& tex_out, Vector2i& cursor_out) +{ + if(mTextures.size()) + { + // check if the most recent texture has space + tex_out = &mTextures.back(); + + // will this one work? + if(tex_out->findEmpty(glyphSize, cursor_out)) + return; // yes + } + + // current textures are full, + // make a new one + mTextures.push_back(FontTexture()); + tex_out = &mTextures.back(); + tex_out->initTexture(); + + bool ok = tex_out->findEmpty(glyphSize, cursor_out); + if(!ok) + { + LOG(LogError) << "Glyph too big to fit on a new texture (glyph size > " << tex_out->textureSize.x() << ", " << tex_out->textureSize.y() << ")!"; + tex_out = NULL; + } +} + +std::vector getFallbackFontPaths() +{ +#ifdef WIN32 + // Windows + + // get this system's equivalent of "C:\Windows" (might be on a different drive or in a different folder) + // so we can check the Fonts subdirectory for fallback fonts + TCHAR winDir[MAX_PATH]; + GetWindowsDirectory(winDir, MAX_PATH); + std::string fontDir = winDir; + fontDir += "\\Fonts\\"; + + const char* fontNames[] = { + "meiryo.ttc", // japanese + "simhei.ttf", // chinese + "arial.ttf" // latin + }; + + //prepend to font file names + std::vector fontPaths; + fontPaths.reserve(sizeof(fontNames) / sizeof(fontNames[0])); + + for(unsigned int i = 0; i < sizeof(fontNames) / sizeof(fontNames[0]); i++) + { + std::string path = fontDir + fontNames[i]; + if(ResourceManager::getInstance()->fileExists(path)) + fontPaths.push_back(path); + } + + fontPaths.shrink_to_fit(); + return fontPaths; + +#else + // Linux + + const char* paths[] = { + "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", + "/usr/share/fonts/truetype/freefont/FreeMono.ttf", + "/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf" // japanese, chinese, present on Debian + }; + + std::vector fontPaths; + for(unsigned int i = 0; i < sizeof(paths) / sizeof(paths[0]); i++) + { + if(ResourceManager::getInstance()->fileExists(paths[i])) + fontPaths.push_back(paths[i]); + } + + fontPaths.shrink_to_fit(); + return fontPaths; + +#endif +} + +FT_Face Font::getFaceForChar(unsigned int id) +{ + static const std::vector fallbackFonts = getFallbackFontPaths(); + + // look through our current font + fallback fonts to see if any have the glyph we're looking for + for(unsigned int i = 0; i < fallbackFonts.size() + 1; i++) + { + auto fit = mFaceCache.find(i); + + if(fit == mFaceCache.cend()) // doesn't exist yet + { + // i == 0 -> mPath + // otherwise, take from fallbackFonts + const std::string& path = (i == 0 ? mPath : fallbackFonts.at(i - 1)); + ResourceData data = ResourceManager::getInstance()->getFileData(path); + mFaceCache[i] = std::unique_ptr(new FontFace(std::move(data), mSize)); + fit = mFaceCache.find(i); + } + + if(FT_Get_Char_Index(fit->second->face, id) != 0) + return fit->second->face; + } + + // nothing has a valid glyph - return the "real" face so we get a "missing" character + return mFaceCache.cbegin()->second->face; +} + +void Font::clearFaceCache() +{ + mFaceCache.clear(); +} + +Font::Glyph* Font::getGlyph(unsigned int id) +{ + // is it already loaded? + auto it = mGlyphMap.find(id); + if(it != mGlyphMap.cend()) + return &it->second; + + // nope, need to make a glyph + FT_Face face = getFaceForChar(id); + if(!face) + { + LOG(LogError) << "Could not find appropriate font face for character " << id << " for font " << mPath; + return NULL; + } + + FT_GlyphSlot g = face->glyph; + + if(FT_Load_Char(face, id, FT_LOAD_RENDER)) + { + LOG(LogError) << "Could not find glyph for character " << id << " for font " << mPath << ", size " << mSize << "!"; + return NULL; + } + + Vector2i glyphSize(g->bitmap.width, g->bitmap.rows); + + FontTexture* tex = NULL; + Vector2i cursor; + getTextureForNewGlyph(glyphSize, tex, cursor); + + // getTextureForNewGlyph can fail if the glyph is bigger than the max texture size (absurdly large font size) + if(tex == NULL) + { + LOG(LogError) << "Could not create glyph for character " << id << " for font " << mPath << ", size " << mSize << " (no suitable texture found)!"; + return NULL; + } + + // create glyph + Glyph& glyph = mGlyphMap[id]; + + glyph.texture = tex; + glyph.texPos = Vector2f(cursor.x() / (float)tex->textureSize.x(), cursor.y() / (float)tex->textureSize.y()); + glyph.texSize = Vector2f(glyphSize.x() / (float)tex->textureSize.x(), glyphSize.y() / (float)tex->textureSize.y()); + + glyph.advance = Vector2f((float)g->metrics.horiAdvance / 64.0f, (float)g->metrics.vertAdvance / 64.0f); + glyph.bearing = Vector2f((float)g->metrics.horiBearingX / 64.0f, (float)g->metrics.horiBearingY / 64.0f); + + // upload glyph bitmap to texture + Renderer::updateTexture(tex->textureId, Renderer::Texture::ALPHA, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), g->bitmap.buffer); + + // update max glyph height + if(glyphSize.y() > mMaxGlyphHeight) + mMaxGlyphHeight = glyphSize.y(); + + // done + return &glyph; +} + +// completely recreate the texture data for all textures based on mGlyphs information +void Font::rebuildTextures() +{ + // recreate OpenGL textures + for(auto it = mTextures.begin(); it != mTextures.end(); it++) + { + it->initTexture(); + } + + // reupload the texture data + for(auto it = mGlyphMap.cbegin(); it != mGlyphMap.cend(); it++) + { + FT_Face face = getFaceForChar(it->first); + FT_GlyphSlot glyphSlot = face->glyph; + + // load the glyph bitmap through FT + FT_Load_Char(face, it->first, FT_LOAD_RENDER); + + FontTexture* tex = it->second.texture; + + // find the position/size + Vector2i cursor((int)(it->second.texPos.x() * tex->textureSize.x()), (int)(it->second.texPos.y() * tex->textureSize.y())); + Vector2i glyphSize((int)(it->second.texSize.x() * tex->textureSize.x()), (int)(it->second.texSize.y() * tex->textureSize.y())); + + // upload to texture + Renderer::updateTexture(tex->textureId, Renderer::Texture::ALPHA, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), glyphSlot->bitmap.buffer); + } +} + +void Font::renderTextCache(TextCache* cache) +{ + if(cache == NULL) + { + LOG(LogError) << "Attempted to draw NULL TextCache!"; + return; + } + + for(auto it = cache->vertexLists.cbegin(); it != cache->vertexLists.cend(); it++) + { + assert(*it->textureIdPtr != 0); + + auto vertexList = *it; + + Renderer::bindTexture(*it->textureIdPtr); + Renderer::drawTriangleStrips(&it->verts[0], (int)it->verts.size()); + } +} + +Vector2f Font::sizeCodePoint(unsigned int character, float lineSpacing) +{ + float lineWidth = 0.0f; + + const float lineHeight = getHeight(lineSpacing); + + float y = lineHeight; + + if(character == '\n') + { + lineWidth = 0.0f; + y += lineHeight; + } + else + { + Glyph* glyph = getGlyph(character); + if (glyph) + lineWidth = glyph->advance.x(); + } + + return Vector2f(lineWidth, y); +} + +Vector2f Font::sizeText(std::string text, float lineSpacing) +{ + float lineWidth = 0.0f; + float highestWidth = 0.0f; + + const float lineHeight = getHeight(lineSpacing); + + float y = lineHeight; + + size_t i = 0; + while(i < text.length()) + { + unsigned int character = Utils::String::chars2Unicode(text, i); // advances i + + if(character == '\n') + { + if(lineWidth > highestWidth) + highestWidth = lineWidth; + + lineWidth = 0.0f; + y += lineHeight; + } + + Glyph* glyph = getGlyph(character); + if(glyph) + lineWidth += glyph->advance.x(); + } + + if(lineWidth > highestWidth) + highestWidth = lineWidth; + + return Vector2f(highestWidth, y); +} + +float Font::getHeight(float lineSpacing) const +{ + return mMaxGlyphHeight * lineSpacing; +} + +float Font::getLetterHeight() +{ + Glyph* glyph = getGlyph('S'); + assert(glyph); + return glyph->texSize.y() * glyph->texture->textureSize.y(); +} + // Naive way to find whitespace characters, only includes the common ones in the ASCII range! bool Font::isWhiteSpace(unsigned int c) @@ -496,226 +496,226 @@ bool Font::isWhiteSpace(unsigned int c) c == (unsigned int) '\f' || c == (unsigned int) '\r'); } - -// Breaks up a normal string with newlines to make it fit width (in pixels) -std::string Font::wrapText(std::string text, float maxWidth) -{ - std::string out = ""; - while(text.length() > 0) // find next cut-point - { - size_t cursor = 0; - float lineWidth = 0.0f; - size_t lastWhiteSpace = 0; - - while((lineWidth < maxWidth) && (cursor < text.length())) - { - unsigned int c = Utils::String::chars2Unicode(text, cursor); // also advances cursor! - lineWidth += sizeCodePoint(c).x(); - if(isWhiteSpace(c)) - { - lastWhiteSpace = cursor; - } - - if(c == '\n') - { - lineWidth = 0.0f; - } - } - - if(cursor == text.length()) // arrived at end of text. - { - out += text; - text.erase(); - } - else // need to cut at last whitespace or lacking that, the previous cursor. - { - size_t cut = (lastWhiteSpace != 0) ? lastWhiteSpace : Utils::String::prevCursor(text, cursor); - out += text.substr(0, cut) + "\n"; - text.erase(0, cut); - lineWidth = 0.0f; - } - } - return out; -} - -Vector2f Font::sizeWrappedText(std::string text, float xLen, float lineSpacing) -{ - text = wrapText(text, xLen); - return sizeText(text, lineSpacing); -} - -Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, size_t stop, float lineSpacing) -{ - std::string wrappedText = wrapText(text, xLen); - - float lineWidth = 0.0f; - float y = 0.0f; - - size_t wrapCursor = 0; - size_t cursor = 0; - while(cursor < stop) - { - unsigned int wrappedCharacter = Utils::String::chars2Unicode(wrappedText, wrapCursor); - unsigned int character = Utils::String::chars2Unicode(text, cursor); - - if(wrappedCharacter == '\n' && character != '\n') - { - //this is where the wordwrap inserted a newline - //reset lineWidth and increment y, but don't consume a cursor character - lineWidth = 0.0f; - y += getHeight(lineSpacing); - - cursor = Utils::String::prevCursor(text, cursor); // unconsume - continue; - } - - if(character == '\n') - { - lineWidth = 0.0f; - y += getHeight(lineSpacing); - continue; - } - - Glyph* glyph = getGlyph(character); - if(glyph) - lineWidth += glyph->advance.x(); - } - - return Vector2f(lineWidth, y); -} - -//============================================================================================================= -//TextCache -//============================================================================================================= - -float Font::getNewlineStartOffset(const std::string& text, const unsigned int& charStart, const float& xLen, const Alignment& alignment) -{ - switch(alignment) - { - case ALIGN_LEFT: - return 0; - case ALIGN_CENTER: - { - unsigned int endChar = (unsigned int)text.find('\n', charStart); - return (xLen - sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()) / 2.0f; - } - case ALIGN_RIGHT: - { - unsigned int endChar = (unsigned int)text.find('\n', charStart); - return xLen - (sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()); - } - default: - return 0; - } -} - -TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsigned int color, float xLen, Alignment alignment, float lineSpacing) -{ - float x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, 0, xLen, alignment) : 0); - - float yTop = getGlyph('S')->bearing.y(); - float yBot = getHeight(lineSpacing); - float y = offset[1] + (yBot + yTop)/2.0f; - - // vertices by texture - std::map< FontTexture*, std::vector > vertMap; - - size_t cursor = 0; - while(cursor < text.length()) - { - unsigned int character = Utils::String::chars2Unicode(text, cursor); // also advances cursor - Glyph* glyph; - - // invalid character - if(character == 0) - continue; - - if(character == '\n') - { - y += getHeight(lineSpacing); - x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, (const unsigned int)cursor /* cursor is already advanced */, xLen, alignment) : 0); - continue; - } - - glyph = getGlyph(character); - if(glyph == NULL) - continue; - - std::vector& verts = vertMap[glyph->texture]; - size_t oldVertSize = verts.size(); - verts.resize(oldVertSize + 6); - Renderer::Vertex* vertices = verts.data() + oldVertSize; - - const float glyphStartX = x + glyph->bearing.x(); - const Vector2i& textureSize = glyph->texture->textureSize; - const unsigned int convertedColor = Renderer::convertColor(color); - - vertices[1] = { { glyphStartX , y - glyph->bearing.y() }, { glyph->texPos.x(), glyph->texPos.y() }, convertedColor }; - vertices[2] = { { glyphStartX , y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y()) }, { glyph->texPos.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; - vertices[3] = { { glyphStartX + glyph->texSize.x() * textureSize.x(), y - glyph->bearing.y() }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() }, convertedColor }; - vertices[4] = { { glyphStartX + glyph->texSize.x() * textureSize.x(), y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y()) }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; - - // round vertices - for(int i = 1; i < 5; ++i) - vertices[i].pos.round(); - - // make duplicates of first and last vertex so this can be rendered as a triangle strip - vertices[0] = vertices[1]; - vertices[5] = vertices[4]; - - // advance - x += glyph->advance.x(); - } - - //TextCache::CacheMetrics metrics = { sizeText(text, lineSpacing) }; - - TextCache* cache = new TextCache(); - cache->vertexLists.resize(vertMap.size()); - cache->metrics = { sizeText(text, lineSpacing) }; - - unsigned int i = 0; - for(auto it = vertMap.cbegin(); it != vertMap.cend(); it++) - { - TextCache::VertexList& vertList = cache->vertexLists.at(i); - - vertList.textureIdPtr = &it->first->textureId; - vertList.verts = it->second; - } - - clearFaceCache(); - - return cache; -} - -TextCache* Font::buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color) -{ - return buildTextCache(text, Vector2f(offsetX, offsetY), color, 0.0f); -} - -void TextCache::setColor(unsigned int color) -{ - const unsigned int convertedColor = Renderer::convertColor(color); - - for(auto it = vertexLists.begin(); it != vertexLists.end(); it++) - for(auto it2 = it->verts.begin(); it2 != it->verts.end(); it2++) - it2->col = convertedColor; -} - -std::shared_ptr Font::getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig) -{ - using namespace ThemeFlags; - if(!(properties & FONT_PATH) && !(properties & FONT_SIZE)) - return orig; - - std::shared_ptr font; - int size = (orig ? orig->mSize : FONT_SIZE_MEDIUM); - std::string path = (orig ? orig->mPath : getDefaultPath()); - - float sh = (float)Renderer::getScreenHeight(); - if(properties & FONT_SIZE && elem->has("fontSize")) - size = (int)(sh * elem->get("fontSize")); - if(properties & FONT_PATH && elem->has("fontPath")) - path = elem->get("fontPath"); - - return get(size, path); -} + +// Breaks up a normal string with newlines to make it fit width (in pixels) +std::string Font::wrapText(std::string text, float maxWidth) +{ + std::string out = ""; + while(text.length() > 0) // find next cut-point + { + size_t cursor = 0; + float lineWidth = 0.0f; + size_t lastWhiteSpace = 0; + + while((lineWidth < maxWidth) && (cursor < text.length())) + { + unsigned int c = Utils::String::chars2Unicode(text, cursor); // also advances cursor! + lineWidth += sizeCodePoint(c).x(); + if(isWhiteSpace(c)) + { + lastWhiteSpace = cursor; + } + + if(c == '\n') + { + lineWidth = 0.0f; + } + } + + if(cursor == text.length()) // arrived at end of text. + { + out += text; + text.erase(); + } + else // need to cut at last whitespace or lacking that, the previous cursor. + { + size_t cut = (lastWhiteSpace != 0) ? lastWhiteSpace : Utils::String::prevCursor(text, cursor); + out += text.substr(0, cut) + "\n"; + text.erase(0, cut); + lineWidth = 0.0f; + } + } + return out; +} + +Vector2f Font::sizeWrappedText(std::string text, float xLen, float lineSpacing) +{ + text = wrapText(text, xLen); + return sizeText(text, lineSpacing); +} + +Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, size_t stop, float lineSpacing) +{ + std::string wrappedText = wrapText(text, xLen); + + float lineWidth = 0.0f; + float y = 0.0f; + + size_t wrapCursor = 0; + size_t cursor = 0; + while(cursor < stop) + { + unsigned int wrappedCharacter = Utils::String::chars2Unicode(wrappedText, wrapCursor); + unsigned int character = Utils::String::chars2Unicode(text, cursor); + + if(wrappedCharacter == '\n' && character != '\n') + { + //this is where the wordwrap inserted a newline + //reset lineWidth and increment y, but don't consume a cursor character + lineWidth = 0.0f; + y += getHeight(lineSpacing); + + cursor = Utils::String::prevCursor(text, cursor); // unconsume + continue; + } + + if(character == '\n') + { + lineWidth = 0.0f; + y += getHeight(lineSpacing); + continue; + } + + Glyph* glyph = getGlyph(character); + if(glyph) + lineWidth += glyph->advance.x(); + } + + return Vector2f(lineWidth, y); +} + +//============================================================================================================= +//TextCache +//============================================================================================================= + +float Font::getNewlineStartOffset(const std::string& text, const unsigned int& charStart, const float& xLen, const Alignment& alignment) +{ + switch(alignment) + { + case ALIGN_LEFT: + return 0; + case ALIGN_CENTER: + { + unsigned int endChar = (unsigned int)text.find('\n', charStart); + return (xLen - sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()) / 2.0f; + } + case ALIGN_RIGHT: + { + unsigned int endChar = (unsigned int)text.find('\n', charStart); + return xLen - (sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()); + } + default: + return 0; + } +} + +TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsigned int color, float xLen, Alignment alignment, float lineSpacing) +{ + float x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, 0, xLen, alignment) : 0); + + float yTop = getGlyph('S')->bearing.y(); + float yBot = getHeight(lineSpacing); + float y = offset[1] + (yBot + yTop)/2.0f; + + // vertices by texture + std::map< FontTexture*, std::vector > vertMap; + + size_t cursor = 0; + while(cursor < text.length()) + { + unsigned int character = Utils::String::chars2Unicode(text, cursor); // also advances cursor + Glyph* glyph; + + // invalid character + if(character == 0) + continue; + + if(character == '\n') + { + y += getHeight(lineSpacing); + x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, (const unsigned int)cursor /* cursor is already advanced */, xLen, alignment) : 0); + continue; + } + + glyph = getGlyph(character); + if(glyph == NULL) + continue; + + std::vector& verts = vertMap[glyph->texture]; + size_t oldVertSize = verts.size(); + verts.resize(oldVertSize + 6); + Renderer::Vertex* vertices = verts.data() + oldVertSize; + + const float glyphStartX = x + glyph->bearing.x(); + const Vector2i& textureSize = glyph->texture->textureSize; + const unsigned int convertedColor = Renderer::convertColor(color); + + vertices[1] = { { glyphStartX , y - glyph->bearing.y() }, { glyph->texPos.x(), glyph->texPos.y() }, convertedColor }; + vertices[2] = { { glyphStartX , y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y()) }, { glyph->texPos.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; + vertices[3] = { { glyphStartX + glyph->texSize.x() * textureSize.x(), y - glyph->bearing.y() }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() }, convertedColor }; + vertices[4] = { { glyphStartX + glyph->texSize.x() * textureSize.x(), y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y()) }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; + + // round vertices + for(int i = 1; i < 5; ++i) + vertices[i].pos.round(); + + // make duplicates of first and last vertex so this can be rendered as a triangle strip + vertices[0] = vertices[1]; + vertices[5] = vertices[4]; + + // advance + x += glyph->advance.x(); + } + + //TextCache::CacheMetrics metrics = { sizeText(text, lineSpacing) }; + + TextCache* cache = new TextCache(); + cache->vertexLists.resize(vertMap.size()); + cache->metrics = { sizeText(text, lineSpacing) }; + + unsigned int i = 0; + for(auto it = vertMap.cbegin(); it != vertMap.cend(); it++) + { + TextCache::VertexList& vertList = cache->vertexLists.at(i); + + vertList.textureIdPtr = &it->first->textureId; + vertList.verts = it->second; + } + + clearFaceCache(); + + return cache; +} + +TextCache* Font::buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color) +{ + return buildTextCache(text, Vector2f(offsetX, offsetY), color, 0.0f); +} + +void TextCache::setColor(unsigned int color) +{ + const unsigned int convertedColor = Renderer::convertColor(color); + + for(auto it = vertexLists.begin(); it != vertexLists.end(); it++) + for(auto it2 = it->verts.begin(); it2 != it->verts.end(); it2++) + it2->col = convertedColor; +} + +std::shared_ptr Font::getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig) +{ + using namespace ThemeFlags; + if(!(properties & FONT_PATH) && !(properties & FONT_SIZE)) + return orig; + + std::shared_ptr font; + int size = (orig ? orig->mSize : FONT_SIZE_MEDIUM); + std::string path = (orig ? orig->mPath : getDefaultPath()); + + float sh = (float)Renderer::getScreenHeight(); + if(properties & FONT_SIZE && elem->has("fontSize")) + size = (int)(sh * elem->get("fontSize")); + if(properties & FONT_PATH && elem->has("fontPath")) + path = elem->get("fontPath"); + + return get(size, path); +} From 3eb9f65872bad17c766e9b5e51b02fcd4a366151 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sun, 30 Jan 2022 19:02:49 +0000 Subject: [PATCH 510/603] cosmetic - convert CRLF file to LF --- es-core/src/resources/Font.cpp | 1442 ++++++++++++++++---------------- 1 file changed, 721 insertions(+), 721 deletions(-) diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index b6bc31dc52..c10e7baa00 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -1,721 +1,721 @@ -#include "resources/Font.h" - -#include "renderers/Renderer.h" -#include "utils/FileSystemUtil.h" -#include "utils/StringUtil.h" -#include "Log.h" - -#ifdef WIN32 -#include -#endif - -FT_Library Font::sLibrary = NULL; - -int Font::getSize() const { return mSize; } - -std::map< std::pair, std::weak_ptr > Font::sFontMap; - -Font::FontFace::FontFace(ResourceData&& d, int size) : data(d) -{ - int err = FT_New_Memory_Face(sLibrary, data.ptr.get(), (FT_Long)data.length, 0, &face); - assert(!err); - - if(!err) - FT_Set_Pixel_Sizes(face, 0, size); -} - -Font::FontFace::~FontFace() -{ - if(face) - FT_Done_Face(face); -} - -void Font::initLibrary() -{ - assert(sLibrary == NULL); - if(FT_Init_FreeType(&sLibrary)) - { - sLibrary = NULL; - LOG(LogError) << "Error initializing FreeType!"; - } -} - -size_t Font::getMemUsage() const -{ - size_t memUsage = 0; - for(auto it = mTextures.cbegin(); it != mTextures.cend(); it++) - memUsage += it->textureSize.x() * it->textureSize.y() * 4; - - for(auto it = mFaceCache.cbegin(); it != mFaceCache.cend(); it++) - memUsage += it->second->data.length; - - return memUsage; -} - -size_t Font::getTotalMemUsage() -{ - size_t total = 0; - - auto it = sFontMap.cbegin(); - while(it != sFontMap.cend()) - { - if(it->second.expired()) - { - it = sFontMap.erase(it); - continue; - } - - total += it->second.lock()->getMemUsage(); - it++; - } - - return total; -} - -Font::Font(int size, const std::string& path) : mSize(size), mPath(path) -{ - assert(mSize > 0); - - mLoaded = true; - mMaxGlyphHeight = 0; - - if(!sLibrary) - initLibrary(); - - // always initialize ASCII characters - for(unsigned int i = 32; i < 128; i++) - getGlyph(i); - - clearFaceCache(); -} - -Font::~Font() -{ - unload(); -} - -void Font::reload() -{ - if (mLoaded) - return; - - rebuildTextures(); - mLoaded = true; -} - -bool Font::unload() -{ - if (mLoaded) - { - unloadTextures(); - mLoaded = false; - return true; - } - - return false; -} - -std::shared_ptr Font::get(int size, const std::string& path) -{ - const std::string canonicalPath = Utils::FileSystem::getCanonicalPath(path); - - std::pair def(canonicalPath.empty() ? getDefaultPath() : canonicalPath, size); - auto foundFont = sFontMap.find(def); - if(foundFont != sFontMap.cend()) - { - if(!foundFont->second.expired()) - return foundFont->second.lock(); - } - - std::shared_ptr font = std::shared_ptr(new Font(def.second, def.first)); - sFontMap[def] = std::weak_ptr(font); - ResourceManager::getInstance()->addReloadable(font); - return font; -} - -void Font::unloadTextures() -{ - for(auto it = mTextures.begin(); it != mTextures.end(); it++) - { - it->deinitTexture(); - } -} - -Font::FontTexture::FontTexture() -{ - textureId = 0; - textureSize = Vector2i(2048, 512); - writePos = Vector2i::Zero(); - rowHeight = 0; -} - -Font::FontTexture::~FontTexture() -{ - deinitTexture(); -} - -bool Font::FontTexture::findEmpty(const Vector2i& size, Vector2i& cursor_out) -{ - if(size.x() >= textureSize.x() || size.y() >= textureSize.y()) - return false; - - if(writePos.x() + size.x() >= textureSize.x() && - writePos.y() + rowHeight + size.y() + 1 < textureSize.y()) - { - // row full, but it should fit on the next row - // move cursor to next row - writePos = Vector2i(0, writePos.y() + rowHeight + 1); // leave 1px of space between glyphs - rowHeight = 0; - } - - if(writePos.x() + size.x() >= textureSize.x() || - writePos.y() + size.y() >= textureSize.y()) - { - // nope, still won't fit - return false; - } - - cursor_out = writePos; - writePos[0] += size.x() + 1; // leave 1px of space between glyphs - - if(size.y() > rowHeight) - rowHeight = size.y(); - - return true; -} - -void Font::FontTexture::initTexture() -{ - assert(textureId == 0); - textureId = Renderer::createTexture(Renderer::Texture::ALPHA, false, false, textureSize.x(), textureSize.y(), nullptr); -} - -void Font::FontTexture::deinitTexture() -{ - if(textureId != 0) - { - Renderer::destroyTexture(textureId); - textureId = 0; - } -} - -void Font::getTextureForNewGlyph(const Vector2i& glyphSize, FontTexture*& tex_out, Vector2i& cursor_out) -{ - if(mTextures.size()) - { - // check if the most recent texture has space - tex_out = &mTextures.back(); - - // will this one work? - if(tex_out->findEmpty(glyphSize, cursor_out)) - return; // yes - } - - // current textures are full, - // make a new one - mTextures.push_back(FontTexture()); - tex_out = &mTextures.back(); - tex_out->initTexture(); - - bool ok = tex_out->findEmpty(glyphSize, cursor_out); - if(!ok) - { - LOG(LogError) << "Glyph too big to fit on a new texture (glyph size > " << tex_out->textureSize.x() << ", " << tex_out->textureSize.y() << ")!"; - tex_out = NULL; - } -} - -std::vector getFallbackFontPaths() -{ -#ifdef WIN32 - // Windows - - // get this system's equivalent of "C:\Windows" (might be on a different drive or in a different folder) - // so we can check the Fonts subdirectory for fallback fonts - TCHAR winDir[MAX_PATH]; - GetWindowsDirectory(winDir, MAX_PATH); - std::string fontDir = winDir; - fontDir += "\\Fonts\\"; - - const char* fontNames[] = { - "meiryo.ttc", // japanese - "simhei.ttf", // chinese - "arial.ttf" // latin - }; - - //prepend to font file names - std::vector fontPaths; - fontPaths.reserve(sizeof(fontNames) / sizeof(fontNames[0])); - - for(unsigned int i = 0; i < sizeof(fontNames) / sizeof(fontNames[0]); i++) - { - std::string path = fontDir + fontNames[i]; - if(ResourceManager::getInstance()->fileExists(path)) - fontPaths.push_back(path); - } - - fontPaths.shrink_to_fit(); - return fontPaths; - -#else - // Linux - - const char* paths[] = { - "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", - "/usr/share/fonts/truetype/freefont/FreeMono.ttf", - "/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf" // japanese, chinese, present on Debian - }; - - std::vector fontPaths; - for(unsigned int i = 0; i < sizeof(paths) / sizeof(paths[0]); i++) - { - if(ResourceManager::getInstance()->fileExists(paths[i])) - fontPaths.push_back(paths[i]); - } - - fontPaths.shrink_to_fit(); - return fontPaths; - -#endif -} - -FT_Face Font::getFaceForChar(unsigned int id) -{ - static const std::vector fallbackFonts = getFallbackFontPaths(); - - // look through our current font + fallback fonts to see if any have the glyph we're looking for - for(unsigned int i = 0; i < fallbackFonts.size() + 1; i++) - { - auto fit = mFaceCache.find(i); - - if(fit == mFaceCache.cend()) // doesn't exist yet - { - // i == 0 -> mPath - // otherwise, take from fallbackFonts - const std::string& path = (i == 0 ? mPath : fallbackFonts.at(i - 1)); - ResourceData data = ResourceManager::getInstance()->getFileData(path); - mFaceCache[i] = std::unique_ptr(new FontFace(std::move(data), mSize)); - fit = mFaceCache.find(i); - } - - if(FT_Get_Char_Index(fit->second->face, id) != 0) - return fit->second->face; - } - - // nothing has a valid glyph - return the "real" face so we get a "missing" character - return mFaceCache.cbegin()->second->face; -} - -void Font::clearFaceCache() -{ - mFaceCache.clear(); -} - -Font::Glyph* Font::getGlyph(unsigned int id) -{ - // is it already loaded? - auto it = mGlyphMap.find(id); - if(it != mGlyphMap.cend()) - return &it->second; - - // nope, need to make a glyph - FT_Face face = getFaceForChar(id); - if(!face) - { - LOG(LogError) << "Could not find appropriate font face for character " << id << " for font " << mPath; - return NULL; - } - - FT_GlyphSlot g = face->glyph; - - if(FT_Load_Char(face, id, FT_LOAD_RENDER)) - { - LOG(LogError) << "Could not find glyph for character " << id << " for font " << mPath << ", size " << mSize << "!"; - return NULL; - } - - Vector2i glyphSize(g->bitmap.width, g->bitmap.rows); - - FontTexture* tex = NULL; - Vector2i cursor; - getTextureForNewGlyph(glyphSize, tex, cursor); - - // getTextureForNewGlyph can fail if the glyph is bigger than the max texture size (absurdly large font size) - if(tex == NULL) - { - LOG(LogError) << "Could not create glyph for character " << id << " for font " << mPath << ", size " << mSize << " (no suitable texture found)!"; - return NULL; - } - - // create glyph - Glyph& glyph = mGlyphMap[id]; - - glyph.texture = tex; - glyph.texPos = Vector2f(cursor.x() / (float)tex->textureSize.x(), cursor.y() / (float)tex->textureSize.y()); - glyph.texSize = Vector2f(glyphSize.x() / (float)tex->textureSize.x(), glyphSize.y() / (float)tex->textureSize.y()); - - glyph.advance = Vector2f((float)g->metrics.horiAdvance / 64.0f, (float)g->metrics.vertAdvance / 64.0f); - glyph.bearing = Vector2f((float)g->metrics.horiBearingX / 64.0f, (float)g->metrics.horiBearingY / 64.0f); - - // upload glyph bitmap to texture - Renderer::updateTexture(tex->textureId, Renderer::Texture::ALPHA, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), g->bitmap.buffer); - - // update max glyph height - if(glyphSize.y() > mMaxGlyphHeight) - mMaxGlyphHeight = glyphSize.y(); - - // done - return &glyph; -} - -// completely recreate the texture data for all textures based on mGlyphs information -void Font::rebuildTextures() -{ - // recreate OpenGL textures - for(auto it = mTextures.begin(); it != mTextures.end(); it++) - { - it->initTexture(); - } - - // reupload the texture data - for(auto it = mGlyphMap.cbegin(); it != mGlyphMap.cend(); it++) - { - FT_Face face = getFaceForChar(it->first); - FT_GlyphSlot glyphSlot = face->glyph; - - // load the glyph bitmap through FT - FT_Load_Char(face, it->first, FT_LOAD_RENDER); - - FontTexture* tex = it->second.texture; - - // find the position/size - Vector2i cursor((int)(it->second.texPos.x() * tex->textureSize.x()), (int)(it->second.texPos.y() * tex->textureSize.y())); - Vector2i glyphSize((int)(it->second.texSize.x() * tex->textureSize.x()), (int)(it->second.texSize.y() * tex->textureSize.y())); - - // upload to texture - Renderer::updateTexture(tex->textureId, Renderer::Texture::ALPHA, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), glyphSlot->bitmap.buffer); - } -} - -void Font::renderTextCache(TextCache* cache) -{ - if(cache == NULL) - { - LOG(LogError) << "Attempted to draw NULL TextCache!"; - return; - } - - for(auto it = cache->vertexLists.cbegin(); it != cache->vertexLists.cend(); it++) - { - assert(*it->textureIdPtr != 0); - - auto vertexList = *it; - - Renderer::bindTexture(*it->textureIdPtr); - Renderer::drawTriangleStrips(&it->verts[0], (int)it->verts.size()); - } -} - -Vector2f Font::sizeCodePoint(unsigned int character, float lineSpacing) -{ - float lineWidth = 0.0f; - - const float lineHeight = getHeight(lineSpacing); - - float y = lineHeight; - - if(character == '\n') - { - lineWidth = 0.0f; - y += lineHeight; - } - else - { - Glyph* glyph = getGlyph(character); - if (glyph) - lineWidth = glyph->advance.x(); - } - - return Vector2f(lineWidth, y); -} - -Vector2f Font::sizeText(std::string text, float lineSpacing) -{ - float lineWidth = 0.0f; - float highestWidth = 0.0f; - - const float lineHeight = getHeight(lineSpacing); - - float y = lineHeight; - - size_t i = 0; - while(i < text.length()) - { - unsigned int character = Utils::String::chars2Unicode(text, i); // advances i - - if(character == '\n') - { - if(lineWidth > highestWidth) - highestWidth = lineWidth; - - lineWidth = 0.0f; - y += lineHeight; - } - - Glyph* glyph = getGlyph(character); - if(glyph) - lineWidth += glyph->advance.x(); - } - - if(lineWidth > highestWidth) - highestWidth = lineWidth; - - return Vector2f(highestWidth, y); -} - -float Font::getHeight(float lineSpacing) const -{ - return mMaxGlyphHeight * lineSpacing; -} - -float Font::getLetterHeight() -{ - Glyph* glyph = getGlyph('S'); - assert(glyph); - return glyph->texSize.y() * glyph->texture->textureSize.y(); -} - - -// Naive way to find whitespace characters, only includes the common ones in the ASCII range! -bool Font::isWhiteSpace(unsigned int c) -{ - return (c == (unsigned int) ' ' || - c == (unsigned int) '\n' || - c == (unsigned int) '\t' || - c == (unsigned int) '\v' || - c == (unsigned int) '\f' || - c == (unsigned int) '\r'); -} - -// Breaks up a normal string with newlines to make it fit width (in pixels) -std::string Font::wrapText(std::string text, float maxWidth) -{ - std::string out = ""; - while(text.length() > 0) // find next cut-point - { - size_t cursor = 0; - float lineWidth = 0.0f; - size_t lastWhiteSpace = 0; - - while((lineWidth < maxWidth) && (cursor < text.length())) - { - unsigned int c = Utils::String::chars2Unicode(text, cursor); // also advances cursor! - lineWidth += sizeCodePoint(c).x(); - if(isWhiteSpace(c)) - { - lastWhiteSpace = cursor; - } - - if(c == '\n') - { - lineWidth = 0.0f; - } - } - - if(cursor == text.length()) // arrived at end of text. - { - out += text; - text.erase(); - } - else // need to cut at last whitespace or lacking that, the previous cursor. - { - size_t cut = (lastWhiteSpace != 0) ? lastWhiteSpace : Utils::String::prevCursor(text, cursor); - out += text.substr(0, cut) + "\n"; - text.erase(0, cut); - lineWidth = 0.0f; - } - } - return out; -} - -Vector2f Font::sizeWrappedText(std::string text, float xLen, float lineSpacing) -{ - text = wrapText(text, xLen); - return sizeText(text, lineSpacing); -} - -Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, size_t stop, float lineSpacing) -{ - std::string wrappedText = wrapText(text, xLen); - - float lineWidth = 0.0f; - float y = 0.0f; - - size_t wrapCursor = 0; - size_t cursor = 0; - while(cursor < stop) - { - unsigned int wrappedCharacter = Utils::String::chars2Unicode(wrappedText, wrapCursor); - unsigned int character = Utils::String::chars2Unicode(text, cursor); - - if(wrappedCharacter == '\n' && character != '\n') - { - //this is where the wordwrap inserted a newline - //reset lineWidth and increment y, but don't consume a cursor character - lineWidth = 0.0f; - y += getHeight(lineSpacing); - - cursor = Utils::String::prevCursor(text, cursor); // unconsume - continue; - } - - if(character == '\n') - { - lineWidth = 0.0f; - y += getHeight(lineSpacing); - continue; - } - - Glyph* glyph = getGlyph(character); - if(glyph) - lineWidth += glyph->advance.x(); - } - - return Vector2f(lineWidth, y); -} - -//============================================================================================================= -//TextCache -//============================================================================================================= - -float Font::getNewlineStartOffset(const std::string& text, const unsigned int& charStart, const float& xLen, const Alignment& alignment) -{ - switch(alignment) - { - case ALIGN_LEFT: - return 0; - case ALIGN_CENTER: - { - unsigned int endChar = (unsigned int)text.find('\n', charStart); - return (xLen - sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()) / 2.0f; - } - case ALIGN_RIGHT: - { - unsigned int endChar = (unsigned int)text.find('\n', charStart); - return xLen - (sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()); - } - default: - return 0; - } -} - -TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsigned int color, float xLen, Alignment alignment, float lineSpacing) -{ - float x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, 0, xLen, alignment) : 0); - - float yTop = getGlyph('S')->bearing.y(); - float yBot = getHeight(lineSpacing); - float y = offset[1] + (yBot + yTop)/2.0f; - - // vertices by texture - std::map< FontTexture*, std::vector > vertMap; - - size_t cursor = 0; - while(cursor < text.length()) - { - unsigned int character = Utils::String::chars2Unicode(text, cursor); // also advances cursor - Glyph* glyph; - - // invalid character - if(character == 0) - continue; - - if(character == '\n') - { - y += getHeight(lineSpacing); - x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, (const unsigned int)cursor /* cursor is already advanced */, xLen, alignment) : 0); - continue; - } - - glyph = getGlyph(character); - if(glyph == NULL) - continue; - - std::vector& verts = vertMap[glyph->texture]; - size_t oldVertSize = verts.size(); - verts.resize(oldVertSize + 6); - Renderer::Vertex* vertices = verts.data() + oldVertSize; - - const float glyphStartX = x + glyph->bearing.x(); - const Vector2i& textureSize = glyph->texture->textureSize; - const unsigned int convertedColor = Renderer::convertColor(color); - - vertices[1] = { { glyphStartX , y - glyph->bearing.y() }, { glyph->texPos.x(), glyph->texPos.y() }, convertedColor }; - vertices[2] = { { glyphStartX , y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y()) }, { glyph->texPos.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; - vertices[3] = { { glyphStartX + glyph->texSize.x() * textureSize.x(), y - glyph->bearing.y() }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() }, convertedColor }; - vertices[4] = { { glyphStartX + glyph->texSize.x() * textureSize.x(), y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y()) }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; - - // round vertices - for(int i = 1; i < 5; ++i) - vertices[i].pos.round(); - - // make duplicates of first and last vertex so this can be rendered as a triangle strip - vertices[0] = vertices[1]; - vertices[5] = vertices[4]; - - // advance - x += glyph->advance.x(); - } - - //TextCache::CacheMetrics metrics = { sizeText(text, lineSpacing) }; - - TextCache* cache = new TextCache(); - cache->vertexLists.resize(vertMap.size()); - cache->metrics = { sizeText(text, lineSpacing) }; - - unsigned int i = 0; - for(auto it = vertMap.cbegin(); it != vertMap.cend(); it++) - { - TextCache::VertexList& vertList = cache->vertexLists.at(i); - - vertList.textureIdPtr = &it->first->textureId; - vertList.verts = it->second; - } - - clearFaceCache(); - - return cache; -} - -TextCache* Font::buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color) -{ - return buildTextCache(text, Vector2f(offsetX, offsetY), color, 0.0f); -} - -void TextCache::setColor(unsigned int color) -{ - const unsigned int convertedColor = Renderer::convertColor(color); - - for(auto it = vertexLists.begin(); it != vertexLists.end(); it++) - for(auto it2 = it->verts.begin(); it2 != it->verts.end(); it2++) - it2->col = convertedColor; -} - -std::shared_ptr Font::getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig) -{ - using namespace ThemeFlags; - if(!(properties & FONT_PATH) && !(properties & FONT_SIZE)) - return orig; - - std::shared_ptr font; - int size = (orig ? orig->mSize : FONT_SIZE_MEDIUM); - std::string path = (orig ? orig->mPath : getDefaultPath()); - - float sh = (float)Renderer::getScreenHeight(); - if(properties & FONT_SIZE && elem->has("fontSize")) - size = (int)(sh * elem->get("fontSize")); - if(properties & FONT_PATH && elem->has("fontPath")) - path = elem->get("fontPath"); - - return get(size, path); -} +#include "resources/Font.h" + +#include "renderers/Renderer.h" +#include "utils/FileSystemUtil.h" +#include "utils/StringUtil.h" +#include "Log.h" + +#ifdef WIN32 +#include +#endif + +FT_Library Font::sLibrary = NULL; + +int Font::getSize() const { return mSize; } + +std::map< std::pair, std::weak_ptr > Font::sFontMap; + +Font::FontFace::FontFace(ResourceData&& d, int size) : data(d) +{ + int err = FT_New_Memory_Face(sLibrary, data.ptr.get(), (FT_Long)data.length, 0, &face); + assert(!err); + + if(!err) + FT_Set_Pixel_Sizes(face, 0, size); +} + +Font::FontFace::~FontFace() +{ + if(face) + FT_Done_Face(face); +} + +void Font::initLibrary() +{ + assert(sLibrary == NULL); + if(FT_Init_FreeType(&sLibrary)) + { + sLibrary = NULL; + LOG(LogError) << "Error initializing FreeType!"; + } +} + +size_t Font::getMemUsage() const +{ + size_t memUsage = 0; + for(auto it = mTextures.cbegin(); it != mTextures.cend(); it++) + memUsage += it->textureSize.x() * it->textureSize.y() * 4; + + for(auto it = mFaceCache.cbegin(); it != mFaceCache.cend(); it++) + memUsage += it->second->data.length; + + return memUsage; +} + +size_t Font::getTotalMemUsage() +{ + size_t total = 0; + + auto it = sFontMap.cbegin(); + while(it != sFontMap.cend()) + { + if(it->second.expired()) + { + it = sFontMap.erase(it); + continue; + } + + total += it->second.lock()->getMemUsage(); + it++; + } + + return total; +} + +Font::Font(int size, const std::string& path) : mSize(size), mPath(path) +{ + assert(mSize > 0); + + mLoaded = true; + mMaxGlyphHeight = 0; + + if(!sLibrary) + initLibrary(); + + // always initialize ASCII characters + for(unsigned int i = 32; i < 128; i++) + getGlyph(i); + + clearFaceCache(); +} + +Font::~Font() +{ + unload(); +} + +void Font::reload() +{ + if (mLoaded) + return; + + rebuildTextures(); + mLoaded = true; +} + +bool Font::unload() +{ + if (mLoaded) + { + unloadTextures(); + mLoaded = false; + return true; + } + + return false; +} + +std::shared_ptr Font::get(int size, const std::string& path) +{ + const std::string canonicalPath = Utils::FileSystem::getCanonicalPath(path); + + std::pair def(canonicalPath.empty() ? getDefaultPath() : canonicalPath, size); + auto foundFont = sFontMap.find(def); + if(foundFont != sFontMap.cend()) + { + if(!foundFont->second.expired()) + return foundFont->second.lock(); + } + + std::shared_ptr font = std::shared_ptr(new Font(def.second, def.first)); + sFontMap[def] = std::weak_ptr(font); + ResourceManager::getInstance()->addReloadable(font); + return font; +} + +void Font::unloadTextures() +{ + for(auto it = mTextures.begin(); it != mTextures.end(); it++) + { + it->deinitTexture(); + } +} + +Font::FontTexture::FontTexture() +{ + textureId = 0; + textureSize = Vector2i(2048, 512); + writePos = Vector2i::Zero(); + rowHeight = 0; +} + +Font::FontTexture::~FontTexture() +{ + deinitTexture(); +} + +bool Font::FontTexture::findEmpty(const Vector2i& size, Vector2i& cursor_out) +{ + if(size.x() >= textureSize.x() || size.y() >= textureSize.y()) + return false; + + if(writePos.x() + size.x() >= textureSize.x() && + writePos.y() + rowHeight + size.y() + 1 < textureSize.y()) + { + // row full, but it should fit on the next row + // move cursor to next row + writePos = Vector2i(0, writePos.y() + rowHeight + 1); // leave 1px of space between glyphs + rowHeight = 0; + } + + if(writePos.x() + size.x() >= textureSize.x() || + writePos.y() + size.y() >= textureSize.y()) + { + // nope, still won't fit + return false; + } + + cursor_out = writePos; + writePos[0] += size.x() + 1; // leave 1px of space between glyphs + + if(size.y() > rowHeight) + rowHeight = size.y(); + + return true; +} + +void Font::FontTexture::initTexture() +{ + assert(textureId == 0); + textureId = Renderer::createTexture(Renderer::Texture::ALPHA, false, false, textureSize.x(), textureSize.y(), nullptr); +} + +void Font::FontTexture::deinitTexture() +{ + if(textureId != 0) + { + Renderer::destroyTexture(textureId); + textureId = 0; + } +} + +void Font::getTextureForNewGlyph(const Vector2i& glyphSize, FontTexture*& tex_out, Vector2i& cursor_out) +{ + if(mTextures.size()) + { + // check if the most recent texture has space + tex_out = &mTextures.back(); + + // will this one work? + if(tex_out->findEmpty(glyphSize, cursor_out)) + return; // yes + } + + // current textures are full, + // make a new one + mTextures.push_back(FontTexture()); + tex_out = &mTextures.back(); + tex_out->initTexture(); + + bool ok = tex_out->findEmpty(glyphSize, cursor_out); + if(!ok) + { + LOG(LogError) << "Glyph too big to fit on a new texture (glyph size > " << tex_out->textureSize.x() << ", " << tex_out->textureSize.y() << ")!"; + tex_out = NULL; + } +} + +std::vector getFallbackFontPaths() +{ +#ifdef WIN32 + // Windows + + // get this system's equivalent of "C:\Windows" (might be on a different drive or in a different folder) + // so we can check the Fonts subdirectory for fallback fonts + TCHAR winDir[MAX_PATH]; + GetWindowsDirectory(winDir, MAX_PATH); + std::string fontDir = winDir; + fontDir += "\\Fonts\\"; + + const char* fontNames[] = { + "meiryo.ttc", // japanese + "simhei.ttf", // chinese + "arial.ttf" // latin + }; + + //prepend to font file names + std::vector fontPaths; + fontPaths.reserve(sizeof(fontNames) / sizeof(fontNames[0])); + + for(unsigned int i = 0; i < sizeof(fontNames) / sizeof(fontNames[0]); i++) + { + std::string path = fontDir + fontNames[i]; + if(ResourceManager::getInstance()->fileExists(path)) + fontPaths.push_back(path); + } + + fontPaths.shrink_to_fit(); + return fontPaths; + +#else + // Linux + + const char* paths[] = { + "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", + "/usr/share/fonts/truetype/freefont/FreeMono.ttf", + "/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf" // japanese, chinese, present on Debian + }; + + std::vector fontPaths; + for(unsigned int i = 0; i < sizeof(paths) / sizeof(paths[0]); i++) + { + if(ResourceManager::getInstance()->fileExists(paths[i])) + fontPaths.push_back(paths[i]); + } + + fontPaths.shrink_to_fit(); + return fontPaths; + +#endif +} + +FT_Face Font::getFaceForChar(unsigned int id) +{ + static const std::vector fallbackFonts = getFallbackFontPaths(); + + // look through our current font + fallback fonts to see if any have the glyph we're looking for + for(unsigned int i = 0; i < fallbackFonts.size() + 1; i++) + { + auto fit = mFaceCache.find(i); + + if(fit == mFaceCache.cend()) // doesn't exist yet + { + // i == 0 -> mPath + // otherwise, take from fallbackFonts + const std::string& path = (i == 0 ? mPath : fallbackFonts.at(i - 1)); + ResourceData data = ResourceManager::getInstance()->getFileData(path); + mFaceCache[i] = std::unique_ptr(new FontFace(std::move(data), mSize)); + fit = mFaceCache.find(i); + } + + if(FT_Get_Char_Index(fit->second->face, id) != 0) + return fit->second->face; + } + + // nothing has a valid glyph - return the "real" face so we get a "missing" character + return mFaceCache.cbegin()->second->face; +} + +void Font::clearFaceCache() +{ + mFaceCache.clear(); +} + +Font::Glyph* Font::getGlyph(unsigned int id) +{ + // is it already loaded? + auto it = mGlyphMap.find(id); + if(it != mGlyphMap.cend()) + return &it->second; + + // nope, need to make a glyph + FT_Face face = getFaceForChar(id); + if(!face) + { + LOG(LogError) << "Could not find appropriate font face for character " << id << " for font " << mPath; + return NULL; + } + + FT_GlyphSlot g = face->glyph; + + if(FT_Load_Char(face, id, FT_LOAD_RENDER)) + { + LOG(LogError) << "Could not find glyph for character " << id << " for font " << mPath << ", size " << mSize << "!"; + return NULL; + } + + Vector2i glyphSize(g->bitmap.width, g->bitmap.rows); + + FontTexture* tex = NULL; + Vector2i cursor; + getTextureForNewGlyph(glyphSize, tex, cursor); + + // getTextureForNewGlyph can fail if the glyph is bigger than the max texture size (absurdly large font size) + if(tex == NULL) + { + LOG(LogError) << "Could not create glyph for character " << id << " for font " << mPath << ", size " << mSize << " (no suitable texture found)!"; + return NULL; + } + + // create glyph + Glyph& glyph = mGlyphMap[id]; + + glyph.texture = tex; + glyph.texPos = Vector2f(cursor.x() / (float)tex->textureSize.x(), cursor.y() / (float)tex->textureSize.y()); + glyph.texSize = Vector2f(glyphSize.x() / (float)tex->textureSize.x(), glyphSize.y() / (float)tex->textureSize.y()); + + glyph.advance = Vector2f((float)g->metrics.horiAdvance / 64.0f, (float)g->metrics.vertAdvance / 64.0f); + glyph.bearing = Vector2f((float)g->metrics.horiBearingX / 64.0f, (float)g->metrics.horiBearingY / 64.0f); + + // upload glyph bitmap to texture + Renderer::updateTexture(tex->textureId, Renderer::Texture::ALPHA, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), g->bitmap.buffer); + + // update max glyph height + if(glyphSize.y() > mMaxGlyphHeight) + mMaxGlyphHeight = glyphSize.y(); + + // done + return &glyph; +} + +// completely recreate the texture data for all textures based on mGlyphs information +void Font::rebuildTextures() +{ + // recreate OpenGL textures + for(auto it = mTextures.begin(); it != mTextures.end(); it++) + { + it->initTexture(); + } + + // reupload the texture data + for(auto it = mGlyphMap.cbegin(); it != mGlyphMap.cend(); it++) + { + FT_Face face = getFaceForChar(it->first); + FT_GlyphSlot glyphSlot = face->glyph; + + // load the glyph bitmap through FT + FT_Load_Char(face, it->first, FT_LOAD_RENDER); + + FontTexture* tex = it->second.texture; + + // find the position/size + Vector2i cursor((int)(it->second.texPos.x() * tex->textureSize.x()), (int)(it->second.texPos.y() * tex->textureSize.y())); + Vector2i glyphSize((int)(it->second.texSize.x() * tex->textureSize.x()), (int)(it->second.texSize.y() * tex->textureSize.y())); + + // upload to texture + Renderer::updateTexture(tex->textureId, Renderer::Texture::ALPHA, cursor.x(), cursor.y(), glyphSize.x(), glyphSize.y(), glyphSlot->bitmap.buffer); + } +} + +void Font::renderTextCache(TextCache* cache) +{ + if(cache == NULL) + { + LOG(LogError) << "Attempted to draw NULL TextCache!"; + return; + } + + for(auto it = cache->vertexLists.cbegin(); it != cache->vertexLists.cend(); it++) + { + assert(*it->textureIdPtr != 0); + + auto vertexList = *it; + + Renderer::bindTexture(*it->textureIdPtr); + Renderer::drawTriangleStrips(&it->verts[0], (int)it->verts.size()); + } +} + +Vector2f Font::sizeCodePoint(unsigned int character, float lineSpacing) +{ + float lineWidth = 0.0f; + + const float lineHeight = getHeight(lineSpacing); + + float y = lineHeight; + + if(character == '\n') + { + lineWidth = 0.0f; + y += lineHeight; + } + else + { + Glyph* glyph = getGlyph(character); + if (glyph) + lineWidth = glyph->advance.x(); + } + + return Vector2f(lineWidth, y); +} + +Vector2f Font::sizeText(std::string text, float lineSpacing) +{ + float lineWidth = 0.0f; + float highestWidth = 0.0f; + + const float lineHeight = getHeight(lineSpacing); + + float y = lineHeight; + + size_t i = 0; + while(i < text.length()) + { + unsigned int character = Utils::String::chars2Unicode(text, i); // advances i + + if(character == '\n') + { + if(lineWidth > highestWidth) + highestWidth = lineWidth; + + lineWidth = 0.0f; + y += lineHeight; + } + + Glyph* glyph = getGlyph(character); + if(glyph) + lineWidth += glyph->advance.x(); + } + + if(lineWidth > highestWidth) + highestWidth = lineWidth; + + return Vector2f(highestWidth, y); +} + +float Font::getHeight(float lineSpacing) const +{ + return mMaxGlyphHeight * lineSpacing; +} + +float Font::getLetterHeight() +{ + Glyph* glyph = getGlyph('S'); + assert(glyph); + return glyph->texSize.y() * glyph->texture->textureSize.y(); +} + + +// Naive way to find whitespace characters, only includes the common ones in the ASCII range! +bool Font::isWhiteSpace(unsigned int c) +{ + return (c == (unsigned int) ' ' || + c == (unsigned int) '\n' || + c == (unsigned int) '\t' || + c == (unsigned int) '\v' || + c == (unsigned int) '\f' || + c == (unsigned int) '\r'); +} + +// Breaks up a normal string with newlines to make it fit width (in pixels) +std::string Font::wrapText(std::string text, float maxWidth) +{ + std::string out = ""; + while(text.length() > 0) // find next cut-point + { + size_t cursor = 0; + float lineWidth = 0.0f; + size_t lastWhiteSpace = 0; + + while((lineWidth < maxWidth) && (cursor < text.length())) + { + unsigned int c = Utils::String::chars2Unicode(text, cursor); // also advances cursor! + lineWidth += sizeCodePoint(c).x(); + if(isWhiteSpace(c)) + { + lastWhiteSpace = cursor; + } + + if(c == '\n') + { + lineWidth = 0.0f; + } + } + + if(cursor == text.length()) // arrived at end of text. + { + out += text; + text.erase(); + } + else // need to cut at last whitespace or lacking that, the previous cursor. + { + size_t cut = (lastWhiteSpace != 0) ? lastWhiteSpace : Utils::String::prevCursor(text, cursor); + out += text.substr(0, cut) + "\n"; + text.erase(0, cut); + lineWidth = 0.0f; + } + } + return out; +} + +Vector2f Font::sizeWrappedText(std::string text, float xLen, float lineSpacing) +{ + text = wrapText(text, xLen); + return sizeText(text, lineSpacing); +} + +Vector2f Font::getWrappedTextCursorOffset(std::string text, float xLen, size_t stop, float lineSpacing) +{ + std::string wrappedText = wrapText(text, xLen); + + float lineWidth = 0.0f; + float y = 0.0f; + + size_t wrapCursor = 0; + size_t cursor = 0; + while(cursor < stop) + { + unsigned int wrappedCharacter = Utils::String::chars2Unicode(wrappedText, wrapCursor); + unsigned int character = Utils::String::chars2Unicode(text, cursor); + + if(wrappedCharacter == '\n' && character != '\n') + { + //this is where the wordwrap inserted a newline + //reset lineWidth and increment y, but don't consume a cursor character + lineWidth = 0.0f; + y += getHeight(lineSpacing); + + cursor = Utils::String::prevCursor(text, cursor); // unconsume + continue; + } + + if(character == '\n') + { + lineWidth = 0.0f; + y += getHeight(lineSpacing); + continue; + } + + Glyph* glyph = getGlyph(character); + if(glyph) + lineWidth += glyph->advance.x(); + } + + return Vector2f(lineWidth, y); +} + +//============================================================================================================= +//TextCache +//============================================================================================================= + +float Font::getNewlineStartOffset(const std::string& text, const unsigned int& charStart, const float& xLen, const Alignment& alignment) +{ + switch(alignment) + { + case ALIGN_LEFT: + return 0; + case ALIGN_CENTER: + { + unsigned int endChar = (unsigned int)text.find('\n', charStart); + return (xLen - sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()) / 2.0f; + } + case ALIGN_RIGHT: + { + unsigned int endChar = (unsigned int)text.find('\n', charStart); + return xLen - (sizeText(text.substr(charStart, endChar != std::string::npos ? endChar - charStart : endChar)).x()); + } + default: + return 0; + } +} + +TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsigned int color, float xLen, Alignment alignment, float lineSpacing) +{ + float x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, 0, xLen, alignment) : 0); + + float yTop = getGlyph('S')->bearing.y(); + float yBot = getHeight(lineSpacing); + float y = offset[1] + (yBot + yTop)/2.0f; + + // vertices by texture + std::map< FontTexture*, std::vector > vertMap; + + size_t cursor = 0; + while(cursor < text.length()) + { + unsigned int character = Utils::String::chars2Unicode(text, cursor); // also advances cursor + Glyph* glyph; + + // invalid character + if(character == 0) + continue; + + if(character == '\n') + { + y += getHeight(lineSpacing); + x = offset[0] + (xLen != 0 ? getNewlineStartOffset(text, (const unsigned int)cursor /* cursor is already advanced */, xLen, alignment) : 0); + continue; + } + + glyph = getGlyph(character); + if(glyph == NULL) + continue; + + std::vector& verts = vertMap[glyph->texture]; + size_t oldVertSize = verts.size(); + verts.resize(oldVertSize + 6); + Renderer::Vertex* vertices = verts.data() + oldVertSize; + + const float glyphStartX = x + glyph->bearing.x(); + const Vector2i& textureSize = glyph->texture->textureSize; + const unsigned int convertedColor = Renderer::convertColor(color); + + vertices[1] = { { glyphStartX , y - glyph->bearing.y() }, { glyph->texPos.x(), glyph->texPos.y() }, convertedColor }; + vertices[2] = { { glyphStartX , y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y()) }, { glyph->texPos.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; + vertices[3] = { { glyphStartX + glyph->texSize.x() * textureSize.x(), y - glyph->bearing.y() }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() }, convertedColor }; + vertices[4] = { { glyphStartX + glyph->texSize.x() * textureSize.x(), y - glyph->bearing.y() + (glyph->texSize.y() * textureSize.y()) }, { glyph->texPos.x() + glyph->texSize.x(), glyph->texPos.y() + glyph->texSize.y() }, convertedColor }; + + // round vertices + for(int i = 1; i < 5; ++i) + vertices[i].pos.round(); + + // make duplicates of first and last vertex so this can be rendered as a triangle strip + vertices[0] = vertices[1]; + vertices[5] = vertices[4]; + + // advance + x += glyph->advance.x(); + } + + //TextCache::CacheMetrics metrics = { sizeText(text, lineSpacing) }; + + TextCache* cache = new TextCache(); + cache->vertexLists.resize(vertMap.size()); + cache->metrics = { sizeText(text, lineSpacing) }; + + unsigned int i = 0; + for(auto it = vertMap.cbegin(); it != vertMap.cend(); it++) + { + TextCache::VertexList& vertList = cache->vertexLists.at(i); + + vertList.textureIdPtr = &it->first->textureId; + vertList.verts = it->second; + } + + clearFaceCache(); + + return cache; +} + +TextCache* Font::buildTextCache(const std::string& text, float offsetX, float offsetY, unsigned int color) +{ + return buildTextCache(text, Vector2f(offsetX, offsetY), color, 0.0f); +} + +void TextCache::setColor(unsigned int color) +{ + const unsigned int convertedColor = Renderer::convertColor(color); + + for(auto it = vertexLists.begin(); it != vertexLists.end(); it++) + for(auto it2 = it->verts.begin(); it2 != it->verts.end(); it2++) + it2->col = convertedColor; +} + +std::shared_ptr Font::getFromTheme(const ThemeData::ThemeElement* elem, unsigned int properties, const std::shared_ptr& orig) +{ + using namespace ThemeFlags; + if(!(properties & FONT_PATH) && !(properties & FONT_SIZE)) + return orig; + + std::shared_ptr font; + int size = (orig ? orig->mSize : FONT_SIZE_MEDIUM); + std::string path = (orig ? orig->mPath : getDefaultPath()); + + float sh = (float)Renderer::getScreenHeight(); + if(properties & FONT_SIZE && elem->has("fontSize")) + size = (int)(sh * elem->get("fontSize")); + if(properties & FONT_PATH && elem->has("fontPath")) + path = elem->get("fontPath"); + + return get(size, path); +} From f4cae18e322cc8466f4ef7051098be57ff0ccff1 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sun, 30 Jan 2022 20:21:17 +0100 Subject: [PATCH 511/603] Don't wrap if maxWidth is 0 or negative --- es-core/src/resources/Font.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index c10e7baa00..f3d074404a 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -501,6 +501,10 @@ bool Font::isWhiteSpace(unsigned int c) std::string Font::wrapText(std::string text, float maxWidth) { std::string out = ""; + + if(maxWidth <= 0) + return out; + while(text.length() > 0) // find next cut-point { size_t cursor = 0; From d3917391aa449d5d7df1a8dc8d85d29b31800d08 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Wed, 26 Jan 2022 16:15:36 +0200 Subject: [PATCH 512/603] scraper: teach ScreenScraper to use the user input Fixed the ScreenScraper search by user input, since it only by searched by filename and ignored the user input for the game name. --- es-app/src/scrapers/ScreenScraper.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index 1a69506889..2600304e2c 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -142,7 +142,9 @@ void screenscraper_generate_scraper_requests(const ScraperSearchParams& params, ScreenScraperRequest::ScreenScraperConfig ssConfig; - path = ssConfig.getGameSearchUrl(params.game->getFileName()); + // Check if the user has overridden the file name + path = ssConfig.getGameSearchUrl(params.nameOverride.empty() ? params.game->getFileName() : params.nameOverride); + auto& platforms = params.system->getPlatformIds(); std::vector p_ids; From c7b3b42efc3176480695091c72c52dd4333b84a7 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sat, 5 Feb 2022 17:03:07 +0100 Subject: [PATCH 513/603] Skip isDirectory check on known directory paths --- es-app/src/Gamelist.cpp | 8 ++++---- es-app/src/MetaData.cpp | 4 ++-- es-core/src/ThemeData.cpp | 4 ++-- es-core/src/utils/FileSystemUtil.cpp | 28 ++++++++++++++-------------- es-core/src/utils/FileSystemUtil.h | 6 +++--- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index c4c712b553..0dd89ca273 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -15,7 +15,7 @@ FileData* findOrCreateFile(SystemData* system, const std::string& path, FileType // first, verify that path is within the system's root folder FileData* root = system->getRootFolder(); bool contains = false; - std::string relative = Utils::FileSystem::removeCommonPath(path, root->getPath(), contains); + std::string relative = Utils::FileSystem::removeCommonPath(path, root->getPath(), contains, true); if(!contains) { @@ -117,7 +117,7 @@ void parseGamelist(SystemData* system) FileType type = typeList[i]; for(pugi::xml_node fileNode = root.child(tag); fileNode; fileNode = fileNode.next_sibling(tag)) { - const std::string path = Utils::FileSystem::resolveRelativePath(fileNode.child("path").text().get(), relativeTo, false); + const std::string path = Utils::FileSystem::resolveRelativePath(fileNode.child("path").text().get(), relativeTo, false, true); if(!trustGamelist && !Utils::FileSystem::exists(path)) { @@ -165,7 +165,7 @@ void addFileDataNode(pugi::xml_node& parent, const FileData* file, const char* t //there's something useful in there so we'll keep the node, add the path // try and make the path relative if we can so things still work if we change the rom folder location in the future - newNode.prepend_child("path").text().set(Utils::FileSystem::createRelativePath(file->getPath(), system->getStartPath(), false).c_str()); + newNode.prepend_child("path").text().set(Utils::FileSystem::createRelativePath(file->getPath(), system->getStartPath(), false, true).c_str()); } } @@ -267,7 +267,7 @@ void updateGamelist(SystemData* system) } // apply the same transformation as in Gamelist::parseGamelist - std::string xmlpath = Utils::FileSystem::resolveRelativePath(pathNode.text().get(), relativeTo, false); + std::string xmlpath = Utils::FileSystem::resolveRelativePath(pathNode.text().get(), relativeTo, false, true); for(std::vector::const_iterator cfit = changes.cbegin(); cfit != changes.cend(); ++cfit) { diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index f5d466b09e..4841030eaf 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -84,7 +84,7 @@ MetaDataList MetaDataList::createFromXML(MetaDataListType type, pugi::xml_node& std::string value = md.text().get(); if (iter->type == MD_PATH) { - value = Utils::FileSystem::resolveRelativePath(value, relativeTo, true); + value = Utils::FileSystem::resolveRelativePath(value, relativeTo, true, true); } mdl.set(iter->key, value); }else{ @@ -112,7 +112,7 @@ void MetaDataList::appendToXML(pugi::xml_node& parent, bool ignoreDefaults, cons // try and make paths relative if we can std::string value = mapIter->second; if (mddIter->type == MD_PATH) - value = Utils::FileSystem::createRelativePath(value, relativeTo, true); + value = Utils::FileSystem::createRelativePath(value, relativeTo, true, true); parent.append_child(mapIter->first.c_str()).text().set(value.c_str()); } diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index cb1b2656c2..52a35c6af4 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -288,7 +288,7 @@ void ThemeData::parseIncludes(const pugi::xml_node& root) for(pugi::xml_node node = root.child("include"); node; node = node.next_sibling("include")) { std::string relPath = resolvePlaceholders(node.text().as_string()); - std::string path = Utils::FileSystem::resolveRelativePath(relPath, mPaths.back(), true); + std::string path = Utils::FileSystem::resolveRelativePath(relPath, mPaths.back(), true, false); if(!ResourceManager::getInstance()->fileExists(path)) throw error << "Included file \"" << relPath << "\" not found! (resolved to \"" << path << "\")"; @@ -513,7 +513,7 @@ void ThemeData::parseElement(const pugi::xml_node& root, const std::mapfileExists(path)) { std::stringstream ss; diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 415fedf09f..1ab9f43fa3 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -486,10 +486,10 @@ namespace Utils ////////////////////////////////////////////////////////////////////////// - std::string resolveRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome) + std::string resolveRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome, const bool _skipDirectoryCheck) { const std::string path = getGenericPath(_path); - const std::string relativeTo = isDirectory(_relativeTo) ? getGenericPath(_relativeTo) : getParent(_relativeTo); + const std::string relativeTo = (_skipDirectoryCheck || isDirectory(_relativeTo)) ? getGenericPath(_relativeTo) : getParent(_relativeTo); // nothing to resolve if(!path.length()) @@ -503,21 +503,21 @@ namespace Utils if(_allowHome && (path[0] == '~') && (path[1] == '/')) return (getHomePath() + &(path[1])); - // absolute path - if(path[0] == '/') - return path; - - // concatenate paths - return (relativeTo + '/' + path); + // absolute path + if(path[0] == '/') + return path; + + // concatenate paths + return (relativeTo + '/' + path); } // resolveRelativePath ////////////////////////////////////////////////////////////////////////// - std::string createRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome) + std::string createRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome, const bool _skipDirectoryCheck) { bool contains = false; - std::string path = removeCommonPath(_path, _relativeTo, contains); + std::string path = removeCommonPath(_path, _relativeTo, contains, _skipDirectoryCheck); // success if(contains) @@ -525,7 +525,7 @@ namespace Utils if(_allowHome) { - path = removeCommonPath(_path, getHomePath(), contains); + path = removeCommonPath(_path, getHomePath(), contains, true); // success if(contains) @@ -539,10 +539,10 @@ namespace Utils ////////////////////////////////////////////////////////////////////////// - std::string removeCommonPath(const std::string& _path, const std::string& _common, bool& _contains) + std::string removeCommonPath(const std::string& _path, const std::string& _common, bool& _contains, const bool _skipDirectoryCheck) { const std::string path = getGenericPath(_path); - const std::string common = isDirectory(_common) ? getGenericPath(_common) : getParent(_common); + const std::string common = (_skipDirectoryCheck || isDirectory(_common)) ? getGenericPath(_common) : getParent(_common); // check if path contains common if(path.find(common) == 0) @@ -648,7 +648,7 @@ namespace Utils { const std::unique_lock lock(mutex); - if (pathExistsIndex.find(_path) == pathExistsIndex.cend()) + if(pathExistsIndex.find(_path) == pathExistsIndex.cend()) { const std::string path = getGenericPath(_path); struct stat64 info; diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index 20a00a26f3..ac7a423843 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -27,9 +27,9 @@ namespace Utils std::string getFileName (const std::string& _path); std::string getStem (const std::string& _path); std::string getExtension (const std::string& _path); - std::string resolveRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome); - std::string createRelativePath (const std::string& _path, const std::string& _relativeTo, const bool _allowHome); - std::string removeCommonPath (const std::string& _path, const std::string& _common, bool& _contains); + std::string resolveRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome, const bool _skipDirectoryCheck); + std::string createRelativePath (const std::string& _path, const std::string& _relativeTo, const bool _allowHome, const bool _skipDirectoryCheck); + std::string removeCommonPath (const std::string& _path, const std::string& _common, bool& _contains, const bool _skipDirectoryCheck); std::string resolveSymlink (const std::string& _path); bool removeFile (const std::string& _path); bool createDirectory (const std::string& _path); From 2b08fb8c54816d101757aeac485af1c409955d9c Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Fri, 11 Feb 2022 17:14:42 +0000 Subject: [PATCH 514/603] resources: update MAME files and add a generator Added a script to generate the MAME related resources (devices/bioses/names) from a series of DAT files. `mameres.py` ingests several XML based DAT files and produces the 3 MAME resource files. The operation merges the info from all given files. For `mamenames.xml`, the `realname` precendence is based on the 1st occurence of the romset in the DAT files, so the order of the files is important. The resources added in this commit are based on (in this order): * MAME 240 (Jan-2022) (games, bioses and devices) * FinalBurn Neo (11 Feb 2022) (games and bioses) * Mame2003 Libretro (11 Feb 2022) (games and bioses) Note: the devices file was generated from the 'MAME 0.240.dat' file, since it contains both MESS and Arcade systems. --- resources/mamebioses.xml | 27 +- resources/mamedevices.xml | 657 +- resources/mamenames.xml | 47479 +++++++++++++++++++++++++----------- resources/mameres.py | 104 + 4 files changed, 34307 insertions(+), 13960 deletions(-) create mode 100755 resources/mameres.py diff --git a/resources/mamebioses.xml b/resources/mamebioses.xml index 788df49b13..972621142a 100644 --- a/resources/mamebioses.xml +++ b/resources/mamebioses.xml @@ -1,18 +1,18 @@ + 3dobios +acpsx airlbios aleck64 +alg3do alg_bios allied ar_bios aristmk5 aristmk6 atarisy1 -atluspsx -atpsx awbios -bctvidbs bubsys -cd32 +cchip cdibios cedmag chihiro @@ -30,6 +30,7 @@ cpzn2 crysbios cubo +cvs decocass f355bios f355dlx @@ -37,7 +38,6 @@ gp_110 gq863 gts1 -gts1s hikaru hng64 hod2bios @@ -45,23 +45,29 @@ iteagle konamigv konamigx +konendev +kpython kviper lindbios -list.txt mac2bios macsbios maxaflex megaplay megatech -naomi2 +midssio +namcoc69 +namcoc70 +namcoc75 naomi +naomi2 naomigd neogeo +nichidvd +nmk004 nss pgm playch10 -psarc95 -pyson +recel sammymdl segasp sfcbox @@ -73,10 +79,9 @@ sys256 sys573 taitofx1 -taitogn taitotz tourvis tps triforce v4bios -vspsx +ym2608 diff --git a/resources/mamedevices.xml b/resources/mamedevices.xml index c959462cc9..3b715163db 100644 --- a/resources/mamedevices.xml +++ b/resources/mamedevices.xml @@ -1,82 +1,273 @@ + 22vp931 3c505 +3xtwin +a1000kbd_de +a1000kbd_dk +a1000kbd_fr +a1000kbd_gb +a1000kbd_it +a1000kbd_se +a1000kbd_us +a1200kbd_rb a1cass -a2091 +a2000kbd_ch +a2000kbd_de +a2000kbd_dk +a2000kbd_es +a2000kbd_fr +a2000kbd_g80_de +a2000kbd_g80_dk +a2000kbd_g80_gb +a2000kbd_g80_se +a2000kbd_g80_us +a2000kbd_gb +a2000kbd_it +a2000kbd_no +a2000kbd_se +a2000kbd_us +a2aevm80 a2ap16 a2ap16a a2aplcrd +a2booti +a2bufgrapplerplus +a2bufgrapplerplusa a2cffa02 a2cffa2 a2corvus a2diskii a2diskiing +a2focdrv +a2grappler +a2grapplerplus a2hsscsi -a2iwm_flop +a2iwm +a2lancegs a2memexp a2mouse +a2parprn +a2pdromdr a2pic +a2q68 +a2q68plus a2ramfac a2scsi +a2sd +a2sider1 +a2sider2 a2ssc +a2suprterm +a2surance a2swyft a2thunpl a2tmstho +a2twarp a2ultrme a2ulttrm +a2uniprint a2vidtrm a2vtc1 -a2vtc2 a2vulcan a2vulgld +a2vuliie a2zipdrv a3fdc -a590 +a500kbd_ch +a500kbd_de +a500kbd_dk +a500kbd_es +a500kbd_fr +a500kbd_gb +a500kbd_it +a500kbd_no +a500kbd_se +a500kbd_us +a600kbd_ch +a600kbd_de +a600kbd_dk +a600kbd_es +a600kbd_fr +a600kbd_gb +a600kbd_it +a600kbd_no +a600kbd_se +a600kbd_us abc1600mac abc1600mover abc55 abc77 abc800kb +abc80kb abc830 abc832 abc834 abc838 +abc850flop abc99 +abc_db4106 +abc_db4107 +abc_db4112 abc_fd2 -abc_hdc -abc_mem +abc_memcard +abc_slutprov +abc_ssa +abc_uni800 +abc_unidisk abcsio +acb2072 +ace_sp_reelctrl +ace_sp_reelctrl_pcp +acorn_vdu80 +acs8600_ics adam_ddp adam_fdc +adam_ide adam_kb adam_prn adam_spi -aga -aga_pc200 -aha1542 +agat7_flop +agat840k_hle +agat9_flop +agat_fdc +aha1542a +aha1542b +aha1542c +aha1542cf +aha1542cp +aha1740 +aha1742a +alice_mcx128 alto2_cpu -amiga_ar1 -amiga_ar2 -amiga_ar3 -amigakbd +ampex230_kbd ap2000 +aplcd150 +aprikb +aprissi +arc_a448 +arc_a448b +arc_acejoy +arc_armadeus +arc_bbcio_aga30 +arc_bbcio_aka10 +arc_bbcio_we +arc_eaglem2 +arc_ether1_aka25 +arc_etherd +arc_etherr +arc_faxpack +arc_greyhawk +arc_ide_be +arc_ide_rdev +arc_iomidi_aka15 +arc_lark +arc_lbp4 +arc_midi_aka16 +arc_midimax +arc_midimax2 +arc_nexus_a500 +arc_rom_aka05 +arc_rs423 +arc_scan256 +arc_scanjunior +arc_scanjunior3 +arc_scanlight +arc_scanvideo +arc_scsi_vti +arc_serial +arc_spectra +arc_ua_morley +arc_uma_morley +arc_upa_hccs +arc_upmidi_aka12 +archimedes_keyboard +asc88 +ascsasi at_keybc +atari1050 +atari810 +atom_discpack +ax208 +basf7100_kbd bbc_acorn1770 bbc_acorn8271 +bbc_ams3 +bbc_ariesb20 +bbc_ariesb32 +bbc_autoprom +bbc_beebspch +bbc_bitstik1 +bbc_bitstik2 +bbc_cc500 +bbc_chameleon bbc_cumana1 bbc_cumana2 +bbc_cumana68k +bbc_cv1797 +bbc_datacentre +bbc_ieee488 +bbc_integrab +bbc_kenda +bbc_mertec +bbc_morleyaa +bbc_multiform bbc_opus1770 bbc_opus2791 bbc_opus2793 bbc_opus3 +bbc_opus8272 +bbc_opusa +bbc_pdram +bbc_ramdisc +bbc_raven20 +bbc_stl1770_1 +bbc_stl1770_2 +bbc_stl2m128 +bbc_stl4m32 +bbc_stldfdc_1 +bbc_stlswr128 +bbc_stlswr16 +bbc_stlswr32 +bbc_stlswr64 +bbc_tube_16032 +bbc_tube_32016 +bbc_tube_32016l +bbc_tube_6502 +bbc_tube_65c102 +bbc_tube_80186 +bbc_tube_80286 +bbc_tube_a500 +bbc_tube_arm +bbc_tube_arm7 +bbc_tube_casper +bbc_tube_cms6809 +bbc_tube_pcplus +bbc_tube_rc6502 +bbc_tube_rc65816 +bbc_tube_x25 +bbc_tube_z80 +bbc_tube_z80w +bbc_tube_zep100 +bbc_tube_zep100l +bbc_tube_zep100m +bbc_tube_zep100w +bbc_udm +bbc_voicebox +bbc_we32kram bbc_weddb2 bbc_weddb3 betadisk +bingoct +bluechip bml3kanji bml3mp1802 bml3mp1805 bsmt2000 -buddha +bt542b +bt542bh +bt545s bw2_ramcard +bwtwo c1526 c1540 c1541 @@ -89,15 +280,17 @@ c1563 c1570 c1571 +c1571cr c1581 c2031 c2040 -c2040fdc +c2040_fdc c3040 c4023 c4040 -c64_cs -c64_fcc +c64_buscard +c64_buscard2 +c64_cspeech c64_mscr c64_nl10 c64_supercpu @@ -107,23 +300,60 @@ c8250 c8250lp c8280 +cadabc cbm2_hrga cbm2_hrgb cbm8000_hsg_a cbm8000_hsg_b +cbm_interpod +cbm_serbox +cchip +ccs7710 +cd6809_fdc +cd90_015 +cd90_351 +cd90_640 +cdd2000 +cdr4210 +cdrn820s +cdu415 +cdu561_25 +cdu75s cffa1 +cfp1080s cga cga_iskr1030m cga_iskr1031 cga_m24 cga_mc1502 cga_poisk2 +cga_superimpose cgenie_fdc +cgthree +chessmachine +cit101_kbd +cit101e_kbd +cit220p_kbd clgd542x cmdhd +cmdrc2 +cmi_ankbd +cmi_mkbd +cms_4080term +cmsscsi +coco2_hdb1 coco3_hdb1 +coco_dcmodem coco_fdc coco_fdc_v11 +coco_orch90 +coco_psg +coco_rs232 +coco_ssc +coco_t4426 +coco_wpk +coco_wpk2 +coco_wpkrs compiskb comx_clm comx_eb @@ -132,27 +362,41 @@ comx_pl80 comx_prn comx_thm -cp400_fdc +cp31 +cp450_fdc cpc_brunword4 cpc_ddi1 cpc_dkspeech cpc_hd20 -cpc_mf2 +cpc_mface2 cpc_ser cpc_serams cpc_smartwatch cpc_ssa1 cpc_transtape +cq90_028 +crd254sh +crt9028_000 crvfdc01 crvfdc02 csd1 cuda +cw7501 d2fdc d9060 d9090 +dc320b +dc320e +dc820 +dc820b dectalk_isa -dj2db -djdma +dg640 +dio98543 +dio98544 +dio98550 +dio98603a +dio98603b +diskii13 dm_clgd5430 dms3d2kp dmv_k220 @@ -160,86 +404,145 @@ dmv_k231 dmv_k235 dmv_k806 -dmv_keyb +dmv_keyboard dragon_fdc -dsp1bleg -dsp1leg -dsp1leg_hi -dsp2leg -dsp3leg -dsp4leg -e01 -e01s +dragon_jcbsnd +dragon_jcbspch +dragon_serial +dragon_sprites +ds1001 +dsd4432 +dw_kbd ec1840_0002 ec1841_0002 +ecb_grip21 +econet_e01 +econet_e01s +ef9340_1 ef9365 ega egret +einstein_sd +einstein_speech +eispc_kb +electron_ap1 +electron_ap6 electron_m2105 +electron_mc68k +electron_mode7 +electron_plus1 electron_plus3 +electron_pwrjoy +electron_romboxp +electron_sidewndr +enh2000 ep64_exdos epson_pf10 epson_tf20 +ergoline_kbd et4000 +ev346 +ex1280 ex800 +exorterm155_device fc_disksys +fccpu20 +fccpu21 +fccpu21a +fccpu21b +fccpu21s +fccpu21ya +fccpu21yb +fcisio1 +fcscsi1 +fd148 fd2000 fd4000 fdc344 fdcmag filetto_cga -finalchs fsd1 fsd2 gfxultra -gfxultrp +gfxultrap gic -grip +gunsense hardbox +hcpu30 hd44780_a00 hd61830 -hdc -hdc_ec1841 +hd63484 +he191_3425 +hp82900 +hp82937 +hp82939 +hp9122c hp98034 hp98035 +hp98046 +hp9845_prt +hp9895 +human_interface +i8244 +i8245 ibm_mfc ibm_vga -ie15_keyboard +ie15_device +ie15kbd +imds2ioc imi5000h indusgt -interpod intv_ecs intv_voice iq151_disc2 iq151_minigraf -iq151_ms151a +iq151_ms15a iq151_video32 iq151_video64 +isa_aga +isa_aga_pc200 +isa_epc_mda +isa_finalchs +isa_hdc +isa_hdc_ec1841 isa_hercules isa_ibm_mda isa_ibm_pgc +isa_pcmidi +isbc202 isbc_215g -jasmin +jc1310 jvs13551 -k573dio +k573_dio +k573kara k573mcr k573msu k573npu -k7659kb +k7659_keyboard +kaypro10kbd kb_3270pc kb_ec1841 kb_iskr1030 +kb_ms_natural +kb_pc83 +kb_pcat101 kb_pcat84 kb_pcxt83 +kbd_lle_en_us kc_d004 -kc_d004gide +kc_d004_gide keytronic_pc3270 +keytronic_pc3270_at km035 ks0066_f05 -laserfdc +lba_enhancer +lc7985 +ldp1000 +ldp1450 ldv1000 -list.txt lk201 +lm24014h +lrk331 lux10828 lux21046 lux21056 @@ -250,42 +553,101 @@ m24_kbd m24_z8000 m50458 -mach64 -mackbd +m68705p3 +m68705p5 +m68705r3 +m68705u3 +m68hc705c4a +m68hc705c8a +mach64isa +mackbd_m0110 +mackbd_m0110a +mackbd_m0110a_f +mackbd_m0110a_j +mackbd_m0110b +mackbd_m0110f +mackbd_m0110t +mackbd_m0120 +mackbd_m0120p +mb90082 +mbc55x_kbd +mc10_mcx128 mc1502_rom -microdisc +md_kbd +md_rom_svp +microtouch +midcsd midssio mie +mindset_sound_module minichif mm1kb +mm5740 +mockingboardd +model1io +model1io2 +mpcb030 +mpcb828 +mpcb849 +mpcb896 +mpcb963 +mpcba63 +mpcba79 +mpcbb68 +mpcbb92 mpu401 ms7004 -ms_natural +msdsd1 +msdsd2 mshark -msm6222b +msm6222b01 +msmt070 +msmt071 +msmt081 +msmt094 msx_cart_bm_012 +msx_cart_easispeech msx_cart_sfg01 msx_cart_sfg05 msx_moonsound +mtx_sdxbas +mtx_sdxcpm +mulcd +mvme120 +mvme121 +mvme122 +mvme123 +mvme350 namco50 namco51 namco52 namco53 namco54 +namco56 +namco58 +namco59 namco62 +namcoc65 +namcoc67 +namcoc68 namcoc69 namcoc70 namcoc74 namcoc75 namcoc76 +nanoreseau_mo +nanoreseau_to nb_48gc nb_824gc nb_aenet nb_amc3b -nb_cb264 +nb_btbug +nb_c264 nb_image +nb_laserview nb_m2hr nb_m2vc +nb_qdlink nb_rtpd nb_sp8s3 nb_spdq @@ -294,15 +656,31 @@ newbrain_eim newbrain_fdc nmk004 -nsmdsa -nsmdsad -o2_voice +novell_dcb +np600a3 +omti8621isa +oric_jasmin +oric_microdisc +osa_analyst +osa_maestro +osa_maestroa +osa_sparc p1_fdc p1_hdc p1_rom p72 +pa7246 pc1512kb pc1640_iga +pc80s31 +pc80s31k +pc9801_118 +pc9801_26 +pc9801_55l +pc9801_55u +pc9801_86 +pc9801_spb +pc98_otomichan_kai pcd_kbd pcd_video pcx_video @@ -311,12 +689,19 @@ pd3_lviw pd3_mclr pd3_pc16 -pdc +pds_hyper pds_sefp pet_softbox pet_superpet +pg200 +plus4_sid +polyvti pr8210 +premier_fdc +ps2_keybc psx_cd +psxgboost +px320a ql_cumanafdi ql_gold ql_kdi @@ -324,47 +709,140 @@ ql_mpfdi ql_opdbm ql_pcmlqdi -ql_qdisc +ql_qldisc ql_qplus4 ql_qubide ql_sdisk ql_sqboard256 ql_sqboard512 -ql_sqmouse512 ql_sqmouse +ql_sqmouse512 +ql_trump ql_trump256 ql_trump512 ql_trump768 -ql_trump +qs1000 qsound +qsound_hle +qts1 +qx10_keyboard +rolm_pdc +rolm_smioc +rtpc_kbd +rx01 +s100_am310 +s100_djdma +s100_mm65k16s +s100_nsmdsa +s100_nsmdsad +s100_sj2db s1410 s3_764 s3virge s3virgedx +s97269pb +s_smp +sa1403d saa5050 +saa5051 saa5052 +saa5053 +saa5054 +saa5055 +saa5056 +saa5057 +saa5240a +saa5240b +saa5243e +sad8852 +satcdb sb16 +sb300p +sbus_hme +sbus_sunpc sdtandy_fdc -sed1200 +sed1200da +sed1200db +sed1200fa +sed1200fb +sed1278_0b +sed1330 +sega837_14438 +segabill segadimm -serbox -seta10leg -seta11leg -sfd1001 +seganetw +sente6vb +sfd10001 side116 simutrek -slutprov -sns_rom_sgb2 +smoc501 +sns_dsp1bleg +sns_dsp1leg +sns_dsp1leg_hi +sns_dsp2leg +sns_dsp3leg +sns_dsp4leg sns_rom_sgb +sns_rom_sgb2 +sns_seta10leg +sns_seta11leg +softcard3 spc1000_fdd_exp +spectrum_beta128 +spectrum_betacbi +spectrum_betaclone +spectrum_betaplus +spectrum_betav2 +spectrum_betav3 +spectrum_d40 +spectrum_d80 +spectrum_d80v2 +spectrum_disciple +spectrum_flpone +spectrum_gamma +spectrum_intf1 +spectrum_kempcentref +spectrum_kempcentreu +spectrum_kempdisc +spectrum_lprint +spectrum_lprint3 +spectrum_mface1 +spectrum_mface128 +spectrum_mface3 +spectrum_mikroplus +spectrum_mprint +spectrum_opus +spectrum_plus2test +spectrum_plusd +spectrum_proceed +spectrum_sdi +spectrum_spdos +spectrum_speccydos +spectrum_swiftdisc +spectrum_swiftdisc2 +spectrum_usource +spectrum_uspeech +spectrum_wafa stereo_fx stic sv603 +sv806 +swtpc8212_device sx1541 t5182 +tanbus_ra32k +tanbus_tandos +tanbus_tanex +tanbus_vid8082 +tandy2kb +technica +tek410x_kbd tetriskr_cga tgui9680 ti99_bwg +ti99_ccdcc +ti99_ccfdc +ti99_ddcc1 ti99_evpc ti99_fdc ti99_gkracker @@ -373,32 +851,69 @@ ti99_pcode ti99_rs232 ti99_speech +ti99_whtscsi +ti_hx5102 tiki100_8088 +tk02 +tms32030 tms32031 tms32032 +tms32033 +trs80m2kb +turbogx +turbogxp +tv950kb +tv955kb tvc_hbf -uni800 -unidisk +ultra12f +ultra12f32 +ultra14f +ultra24f upd7220 +uts_400kbd +uts_extw +v102_kbd +v1050kb +v550_kbd vic1515 vic1520 vic20_fe3 +vic20_videopak victor9k_fdc -victor9kb +victor9k_kb +virge_pci +virgedx_pci +voicebox votrax vp700 -vz_rs232 -vz_rtty +vtech_fdc +vtech_rs232 +vtech_rtty +vtech_sdloader +vtech_wordpro wangpc_lic wangpc_rtc +wangpc_tig wangpc_wdc wangpckb wd1002a_wx1 +wd1007a wdxt_gen -wordpro wyse700 x68k_cz6bs1 x820kb +xt446 xtide +ym2413 +ym2423 ym2608 - +ymf281 +z8671 +z8682 +zorba_kbd +zorro_a2091 +zorro_a590 +zorro_ar1 +zorro_ar2 +zorro_ar3 +zorro_buddha diff --git a/resources/mamenames.xml b/resources/mamenames.xml index 2f35d654e6..305bd928cd 100644 --- a/resources/mamenames.xml +++ b/resources/mamenames.xml @@ -1,7 +1,12 @@ + 005 005 + + 100lions + 100 Lions (10219211, NSW/ACT) + 10yard 10-Yard Fight (World, set 1) @@ -18,6 +23,10 @@ 11beat Eleven Beat + + 15lions + 15 Lions (10166211, Queensland) + 18w 18 Wheeler (set 1) @@ -28,15 +37,23 @@ 18wheelr - 18 Wheeler (Deluxe) (Rev A) + 18 Wheeler: American Pro Trucker (deluxe, Rev A) + + + 18wheelro + 18 Wheeler: American Pro Trucker (deluxe) + + + 18wheelrt + 18 Wheeler: American Pro Trucker (deluxe, Rev T) 18wheels - 18 Wheeler (Standard) + 18 Wheeler: American Pro Trucker (standard) 18wheelu - 18 Wheeler (Upright) + 18 Wheeler: American Pro Trucker (upright) 1941 @@ -70,9 +87,17 @@ 1942b 1942 (First Version) + + 1942c64 + 1942 (C64 Music) + + + 1942h + Supercharger 1942 + 1942p - 1942 (prototype) + 1942 (Tecfri PCB, bootleg?) 1942w @@ -86,6 +111,14 @@ 1943b 1943: Battle of Midway (bootleg, hack of Japan set) + + 1943b2 + 1943: The Battle of Midway (bootleg set 2, hack of Japan set) + + + 1943bj + 1943: Midway Kaisen (bootleg) + 1943j 1943: Midway Kaisen (Japan, Rev B) @@ -94,17 +127,37 @@ 1943ja 1943: Midway Kaisen (Japan) + + 1943jah + 1943: Midway Kaisen (Japan, no protection hack) + + + 1943jaha + 1943: Midway Kaisen (Japan, no protection hack, alt) + 1943kai 1943 Kai: Midway Kaisen (Japan) + + 1943mii + 1943: The Battle of Midway Mark II (US) + 1943u 1943: The Battle of Midway (US, Rev C) + + 1943ua + 1943: The Battle of Midway (US) + 1944 - 1944: The Loop Master (USA 000620) + 1944: The Loop Master (Euro 000620) + + + 1944ad + 1944 - the loop master (000620 USA Phoenix Edition, alt) 1944d @@ -114,20 +167,36 @@ 1944j 1944: The Loop Master (Japan 000620) + + 1944u + 1944: The Loop Master (USA 000620) + 1945kiii - 1945k III + 1945k III (newer, OPCX2 PCB) + + + 1945kiiin + 1945k III (newer, OPCX1 PCB) + + + 1945kiiio + 1945k III (older, OPCX1 PCB) 19in1 - 19 in 1 MAME bootleg + 19 in 1 MAME bootleg (BAR-V000) 19xx - 19XX: The War Against Destiny (USA 951207) + 19XX: The War Against Destiny (Euro 960104) 19xxa + 19XX: The War Against Destiny (Asia 960104) + + + 19xxar1 19XX: The War Against Destiny (Asia 951207) @@ -154,6 +223,10 @@ 19xxjr2 19XX: The War Against Destiny (Japan 951207) + + 19xxu + 19XX: The War Against Destiny (USA 951207) + 1on1gov 1 on 1 Government (Japan) @@ -194,6 +267,22 @@ 20pacgalr4 Ms. Pac-Man/Galaga - 20th Anniversary Class of 1981 Reunion (V1.04) + + 24_130 + 24 v1.30 + + + 24_140 + 24 v1.40 + + + 24_144 + 24 v1.44 + + + 24_150 + 24 v1.50 + 24cdjuke Midcoin Juke Box 24CD @@ -212,15 +301,19 @@ 2mindril - Two Minute Drill + Two Minute Drill (Ver 2.93A 1994/02/16) + + + 2spicy + 2 Spicy 30test - 30 Test (Remake) + 30 Test (remake) 39in1 - 39 in 1 MAME bootleg + 39 in 1 MAME bootleg (GNO-V000) 3bagflnz @@ -231,25 +324,37 @@ 3 Bags Full (5VXFC790, Victoria) - 3countb - 3 Count Bout / Fire Suplex (NGM-043)(NGH-043) + 3cdpoker + 3 Cards Poker 96 (V1.6) + + + 3cdpokera + 3 Cards Poker 96 (V1.0) - 3dobios - 3DO Bios + 3countb + 3 Count Bout / Fire Suplex (NGM-043 ~ NGH-043) - 3ds - Three Ds - Three Dealers Casino House + 3countba + 3 Count Bout / Fire Suplex (NGM-043) 3in1semi - XESS - The New Revolution (SemiCom 3-in-1) + New HyperMan (3-in-1 with Cookie & Bibi & HyperMan) (set 1) + + + 3in1semia + New HyperMan (3-in-1 with Cookie & Bibi & HyperMan) (set 2) 3kokushi Sankokushi (Japan) + + 3lilpigs + 3 Lil' Pigs + 3on3dunk 3 On 3 Dunk Madness (US, prototype? 1997/02/04) @@ -282,6 +387,10 @@ 3wondersh Three Wonders (hack) + + 3wondersha + Three Wonders (bootleg set 3, wonder 3 910520 etc) + 3wondersr1 Three Wonders (World 910513) @@ -290,6 +399,10 @@ 3wondersu Three Wonders (USA 910520) + + 3wonderu + Three Wonders (US 910520) + 3x3puzzl 3X3 Puzzle (Enterprise) @@ -300,7 +413,11 @@ 40love - Forty-Love + Forty-Love (World) + + + 40lovej + Forty-Love (Japan) 47pie2 @@ -312,15 +429,19 @@ 48in1 - 48 in 1 MAME bootleg (set 1, ver 3.09) + 48 in 1 MAME bootleg (ver 3.09, HPH-V000) 48in1a - 48 in 1 MAME bootleg (set 3, ver 3.02) + 48 in 1 MAME bootleg (ver 3.02, HPH-V000) 48in1b - 48 in 1 MAME bootleg (set 2, ver 3.09, alt flash) + 48 in 1 MAME bootleg (ver 3.09, HPH-V000, alt flash) + + + 48in1c + 48 in 1 MAME bootleg (ver 3.08, HPH-V000) 4dwarrio @@ -328,7 +449,11 @@ 4enlinea - Cuatro en Linea + Cuatro en Linea (rev. A-07) + + + 4enlineb + Cuatro en Linea (rev. A-06) 4enraya @@ -344,19 +469,23 @@ 4in1a - 4 in 1 MAME bootleg (set 1, ver 3.00) + 4 in 1 MAME bootleg (ver 3.00, PLZ-V014) 4in1b - 4 in 1 MAME bootleg (set 2) + 4 in 1 MAME bootleg (PLZ-V001) 4in1boot - Puzzle King (includes bootleg of Snow Bros.) + Puzzle King (PacMan 2, Tetris, HyperMan 2, Snow Bros.) + + + 4play + 4 player input test 4psimasy - Mahjong 4P Simasyo (Japan) + Mahjong 4P Shimasho (Japan) 4roses @@ -368,14 +497,18 @@ 500gp - 500 GP (5GP3 Ver. C) + 500 GP (US, 5GP3 Ver. C) + + + 50lionrr + 50 Lions - Roaring Riches (20301311, NSW/ACT) 50lions 50 Lions (10120511, NSW/ACT) - 50lionsa + 50lionsm 50 Lions (10156111, Malaysia) @@ -394,13 +527,33 @@ 5clownsp Five Clown (Spanish hack) + + 5drag + 5 Dragons (20161011, NSW/ACT) + + + 5dragce + 5 Dragons - Cash Express (0152309, US) + + + 5dragsp + 5 Dragons (20161011, NSW/ACT, Show Program) + + + 5koipp + 5 Koi - Power Pay (10250711, NSW/ACT) + 600 600 60in1 - 60 in 1 MAME bootleg (ver 3.00) + 60 in 1 MAME bootleg (ver 3.00, ICD-V000) + + + 64streej + 64th. Street - A Detective Story (Japan) 64street @@ -408,7 +561,11 @@ 64streetj - 64th. Street - A Detective Story (Japan) + 64th. Street - A Detective Story (Japan, set 1) + + + 64streetja + 64th. Street - A Detective Story (Japan, set 2) 720 @@ -458,6 +615,10 @@ 800fath 800 Fathoms + + 800fatha + 800 Fathoms (older) + 86lions 86 Lions @@ -482,13 +643,17 @@ 8ballact2 Eight Ball Action (DKJr conversion) + + 8ballat2 + Eight Ball Action (DKJr conversion) + 8bpm Eight Ball Action (Pac-Man conversion) 98best44 - Neo Print - '98 NeoPri Best 44 (Japan) + Neo Print - '98 NeoPri Best 44 (Japan) (T4i 3.07) 99bottles @@ -502,10 +667,26 @@ 99lstwara '99: The Last War (set 2) + + 99lstwarb + '99: The Last War (bootleg) + 99lstwark '99: The Last War (Kyugo) + + 99lstwra + '99: The Last War (alternate) + + + 9ballsh2 + 9-Ball Shootout (set 2) + + + 9ballsh3 + 9-Ball Shootout (set 3) + 9ballsht 9-Ball Shootout (set 1) @@ -524,7 +705,11 @@ a51mxr3k - Area 51 / Maximum Force Duo (R3000) + Area 51 / Maximum Force Duo (R3000, 2/10/98) + + + a51mxr3ka + Area 51 / Maximum Force Duo (R3000, 2/02/98) a51site4 @@ -534,9 +719,13 @@ a51site4a Area 51: Site 4 (HD Rev 2.0, September 11, 1998) + + aa + Alien Armada + aadvent - African Adventure (Konami Endeavour) + African Adventure (Konami Endeavour, Russia) aafb @@ -582,18 +771,42 @@ abattle2 Astro Battle (set 2) + + abcheck + Abnormal Check + + + abclimax + After Burner Climax (Export) + abcop - A.B. Cop (World, FD1094 317-0169b) + A.B. Cop (World) (FD1094 317-0169b) + + + abcopd + A.B. Cop (World) (bootleg of FD1094 317-0169b set) abcopj - A.B. Cop (Japan, FD1094 317-0169b) + A.B. Cop (Japan) (FD1094 317-0169b) + + + abcopjd + A.B. Cop (Japan) (bootleg of FD1094 317-0169b set) abigchs Big Cheese (Russia) (Atronic) + + ablast + Hong Tian Lei (A-Blast) (Japan) + + + ablastb + Hong Tian Lei (A-Blast) (bootleg) + abnudge Animal Bonus Nudge (Version 2.1 Dual) @@ -682,6 +895,10 @@ ac1clbxta Club Xtra (Ace) (ACESYS1) (set 2) + + ac1cshtw + Cash Towers (Ace) (ACESYS1) + ac1dbldx Double Deluxe (Pcp) (ACESYS1) @@ -818,10 +1035,18 @@ ac1totb Top Of The Bill (Ace) (ACESYS1) + + ac1unk + unknown Ace System 1 game + ac1xpres Xpress (Pcp) (ACESYS1) + + acchi + Janken Game Acchi Muite Hoi! (Japan 1.3) + ace Ace @@ -836,7 +1061,7 @@ acedrvrw - Ace Driver: Racing Evolution (Rev. AD2) + Ace Driver: Racing Evolution (Rev. AD2, World) acefruit @@ -866,6 +1091,10 @@ acombat3 Astro Combat (unencrypted) + + acombat4 + Astro Combat (encrypted) + acombato Astro Combat (older, PZ) @@ -874,10 +1103,6 @@ acommand Alien Command - - acpsx - Acclaim PSX - acrobatm Acrobat Mission @@ -922,14 +1147,26 @@ act2000vx Action 2000 (Version 3.30XT Dual) + + actfanc1 + Act-Fancer Cybernetick Hyper Weapon (World revision 1) + + + actfancj + Act-Fancer Cybernetick Hyper Weapon (Japan revision 1) + actfancr - Act-Fancer Cybernetick Hyper Weapon (World revision 2) + Act-Fancer Cybernetick Hyper Weapon (World revision 3) actfancr1 Act-Fancer Cybernetick Hyper Weapon (World revision 1) + + actfancr2 + Act-Fancer Cybernetick Hyper Weapon (World revision 2) + actfancrj Act-Fancer Cybernetick Hyper Weapon (Japan revision 1) @@ -1342,6 +1579,10 @@ ad5dndv Deal Or No Deal (Bellfruit) (Adder 5) (set 23) + + ad5etdls + El Trebol de la Suerte (Bellfruit) (Adder 5) + ad5eyes Eyes Down (PR2242, MAZNEYDW) (Mazooma) (Adder 5) (set 1) @@ -1482,6 +1723,10 @@ ad5jckmoe Jackpot Monopoly (PR2226, MAZPJACM) (Mazooma) (Adder 5) (set 2) + + ad5lluck + Lady Luck (Bellfruit) (Adder 5) + ad5mcob Monte Carlo Or Bust (Qps) (Adder 5) (set 1) @@ -1952,23 +2197,55 @@ adillor - Armadillo Racing (Rev. AM1 Ver.A) + Armadillo Racing (Rev. AM2 Ver.A, World) + + + adillorj + Armadillo Racing (Rev. AM1 Ver.A, Japan) adonis Adonis (0200751V, NSW/ACT) + + adonisa + Adonis (0100751V, NSW/ACT) + + + adonisa6 + Adonis (0151178, US) + + + adonisce + Adonis - Cash Express (0201005V, NSW/ACT) + + + adonisu + Adonis (BHG1508, US) + + + adpoker + Amstar Draw Poker + adults - Adults Only (Russia) (Extrema) + Adults Only (Ukraine, V. 43.23) + + + adultsa + Adults Only (Ukraine, V. 43.17) + + + aduskcm + African Dusk - Mr. Cashman (20006711, NSW/ACT) aerfboo2 - Aero Fighters (bootleg set 2) + Aero Fighters (bootleg, set 2) aerfboot - Aero Fighters (bootleg set 1) + Aero Fighters (bootleg, set 1) aeroboto @@ -1988,6 +2265,10 @@ aerofgts + Aero Fighters Special (USA) + + + aerofgtst Aero Fighters Special (Taiwan) @@ -1998,6 +2279,38 @@ afighter Action Fighter (FD1089A 317-0018) + + afightera + Action Fighter (unprotected) + + + afighterb + Action Fighter (unprotected, analog controls) + + + afighterc + Action Fighter (FD1089B 317-unknown) + + + afighterd + Action Fighter (FD1089B 317-unknown, analog controls) + + + afightere + Action Fighter (System 16B, unprotected, analog controls) + + + afighterf + Action Fighter (System 16B, FD1089B 317-unknown, analog controls) + + + afighterg + Action Fighter (System 16B, FD1089B 317-unknown) + + + afighterh + Action Fighter (System 16B, FD1089A 317-0018) + afire Astro Fire @@ -2012,7 +2325,7 @@ afm_113 - Attack From Mars (1.13) + Attack From Mars (1.13, Free play) afm_113b @@ -2022,10 +2335,22 @@ afm_11u Attack From Mars (1.1 Ultrapin) + + afterhrs + After Hours (0251071, US) + aftor Af-Tor + + aftrshok + Aftershock (Lazer-Tron, set 1) + + + aftrshoka + Aftershock (Lazer-Tron, set 2) + afv_l4 Addams Family Values (Coin Dropper L-4) @@ -2034,6 +2359,30 @@ agallet Air Gallet (Europe) + + agalleta + Air Gallet (older, Europe) + + + agalletah + Air Gallet (older, Hong Kong) + + + agalletaj + Akuu Gallet (older, Japan) + + + agalletak + Air Gallet (older, Korea) + + + agalletat + Air Gallet (older, Taiwan) + + + agalletau + Air Gallet (older, USA) + agalleth Air Gallet (Hong Kong) @@ -2054,6 +2403,10 @@ agalletu Air Gallet (USA) + + age_cand + Candy Crane (AGE) + agent777 Agents 777 @@ -2084,16 +2437,32 @@ agsoccer - A.G. Soccer Ball + A.G. Soccer Ball (R18u, 2.5L sound) + + + agsoccer07 + A.G. Soccer Ball (R07u) + + + agsoccera + A.G. Soccer Ball (R18u, 2.1 sound) + + + aimode + Ai-mode - Pet Shiiku (Japan) ainferno - Air Inferno (US) + Air Inferno (World) ainfernoj Air Inferno (Japan) + + ainfernou + Air Inferno (US) + airass Air Assault (World) @@ -2106,6 +2475,10 @@ airattcka Air Attack (set 2) + + airbustj + Air Buster (Japan) + airbustr Air Buster: Trouble Specialty Raid Unit (World) @@ -2124,19 +2497,31 @@ aircomb - Air Combat (US) + Air Combat (AC2, US) aircombj - Air Combat (Japan) + Air Combat (AC1, Japan) + + + aircombu + Air Combat (US) airduel - Air Duel (Japan) + Air Duel (World, M82 hardware) + + + airdueljm72 + Air Duel (Japan, M72 hardware) + + + airduelm72 + Air Duel (World, M72 hardware) - airlbios - Naomi Airline Pilots Deluxe Bios + airduelu + Air Duel (US location test, M82 hardware) airrace @@ -2144,11 +2529,19 @@ airraid - Air Raid (encrypted) + Air Raid (Single PCB) airtrix - Air Trix + Air Trix (Rev A) + + + airtrixo + Air Trix (original) + + + airwlkrs + Air Walkers airwolf @@ -2166,17 +2559,29 @@ ajaxj Ajax (Japan) + + ajofrin + Ajofrin City + akamaru - Panel & Variety Akamaru Q Jousyou Dont-R + Panel & Variety Akamaru Q Joushou Dont-R + + + akatana + Akai Katana (2010/ 8/13 MASTER VER.) aking - Angler King (AG1 Ver. A) + Angler King (Japan, AG1 Ver. A) akiss - Mahjong Angel Kiss + Mahjong Angel Kiss (ver 1.0) + + + akkaarrh + Akka Arrh (prototype) akkanvdr @@ -2192,7 +2597,7 @@ aladmdb - Aladdin (bootleg of Japanese Megadrive version) + Aladdin (bootleg of Japanese Mega Drive version) albatross @@ -2206,13 +2611,21 @@ alcat_l7 Alley Cats (Shuffle) (L-7) + + alchemst + Alchemist (01J02046, Venezuela) + + + alchemy + Alchemy (1J009611, NSW/ACT) + alcon Alcon (US) - aleck64 - Aleck64 PIF BIOS + alexkida + Alex Kidd: The Lost Stars (set 2) alexkidd @@ -2222,10 +2635,6 @@ alexkidd1 Alex Kidd: The Lost Stars (set 1, FD1089A 317-0021) - - alg_bios - American Laser Games BIOS - algar_l1 Algar (L-1) @@ -2250,9 +2659,13 @@ alien3 Alien3: The Gun (World) + + alien3j + Alien3: The Gun (Japan) + alien3u - Alien3: The Gun (US) + Alien3: The Gun (US, Rev A) alienar @@ -2272,7 +2685,7 @@ aliencr - Alien Crush + Alien Crush (United Amusements PC Engine) alienfnt @@ -2290,6 +2703,10 @@ alieninvp2 Alien Invasion Part II + + alienres + Alien Rescue (Homebrew, Test Build July 2019) + aliens Aliens (World set 1) @@ -2302,6 +2719,10 @@ aliens3 Aliens (World set 3) + + aliens4 + Aliens (World set 4) + aliensa Aliens (Asia) @@ -2326,6 +2747,22 @@ aliensu Aliens (US) + + aliensu2 + Aliens (US set 2) + + + aliensya + Alien Syndrome (set 2) + + + aliensyb + Alien Syndrome (set 3) + + + aliensyj + Alien Syndrome (Japan) + aliensyn Alien Syndrome (set 4, System 16B, unprotected) @@ -2356,19 +2793,35 @@ aligator - Alligator Hunt + Alligator Hunt (World, protected) + + + aligatorp + Alligator Hunt (protected, prototype?) + + + aligators + Alligator Hunt (Spain, protected) aligatorun + Alligator Hunt (unprotected, set 1) + + + aligatoruna + Alligator Hunt (unprotected, set 2) + + + aligatun Alligator Hunt (unprotected) - alleymas - Alley Master + alinvade + Alien Invaders - allied - Allied System + alleymas + Alley Master alpha1v @@ -2378,9 +2831,13 @@ alphaho Alpha Fighter / Head On + + alphahob + Missile / Circuit (bootleg of Alpha Fighter / Head On) + alpham2 - Alpha Mission II / ASO II - Last Guardian (NGM-007)(NGH-007) + Alpha Mission II / ASO II - Last Guardian (NGM-007 ~ NGH-007) alpham2p @@ -2390,6 +2847,10 @@ alphamis Alpha Mission + + alphaona + Alpha One (prototype, 5 lives) + alphaone Alpha One (prototype, 3 lives) @@ -2403,12 +2864,12 @@ The Alphax Z (Japan) - alpilota - Airline Pilots (Rev A) + alpilot + Airline Pilots (World, Rev B) - alpiltdx - Airline Pilots Deluxe (Rev B) + alpilotj + Airline Pilots (Japan, Rev A) alpine @@ -2420,23 +2881,27 @@ alpinerc - Alpine Racer (Rev. AR2 Ver.C) + Alpine Racer (Rev. AR2 Ver.C, World) alpinerd - Alpine Racer (Rev. AR2 Ver.D) + Alpine Racer (Rev. AR2 Ver.D, World) + + + alpinerjc + Alpine Racer (Rev. AR1 Ver.C, Japan) alpinesa - Alpine Surfer (Rev. AF2 Ver.A) + Alpine Surfer (Rev. AF2 Ver.A, World) alpinr2a - Alpine Racer 2 (Rev. ARS2 Ver.A) + Alpine Racer 2 (Rev. ARS2 Ver.A, World) alpinr2b - Alpine Racer 2 (Rev. ARS2 Ver.B) + Alpine Racer 2 (Rev. ARS2 Ver.B, World) alpok_f6 @@ -2454,46 +2919,70 @@ altair Altair + + altaten + Alta Tensione (ver. 2.01a) + + + altbeas2 + Altered Beast (Version 2) + altbeast - Altered Beast (set 8, 8751 317-0078) + Altered Beast (set 8) (8751 317-0078) altbeast2 - Altered Beast (set 2, MC-8123B 317-0066) + Altered Beast (set 2) (MC-8123B 317-0066) altbeast4 - Altered Beast (set 4, MC-8123B 317-0066) + Altered Beast (set 4) (MC-8123B 317-0066) altbeast5 - Altered Beast (set 5, FD1094 317-0069) + Altered Beast (set 5) (FD1094 317-0069) + + + altbeast5d + Altered Beast (set 5) (bootleg of FD1094 317-0069 set) altbeast6 - Altered Beast (set 6, 8751 317-0076) + Altered Beast (set 6) (8751 317-0076) altbeastbl Altered Beast (Datsu bootleg) + + altbeastbl2 + Altered Beast (bootleg) + altbeastj - Juuouki (set 7, Japan, 8751 317-0077) + Juuouki (set 7, Japan) (8751 317-0077) altbeastj1 - Juuouki (set 1, Japan, FD1094 317-0065) + Juuouki (set 1, Japan) (FD1094 317-0065) altbeastj3 - Juuouki (set 3, Japan, FD1094 317-0068) + Juuouki (set 3, Japan) (FD1094 317-0068) + + + altbeastj3d + Juuouki (set 3, Japan) (bootleg of FD1094 317-0068 set) am_mg24 Multi Game I (V.Ger 2.4) + + am_mg24a + Multi Game I (unknown V2.4) + am_mg3 Multi Game III (V.Ger 3.5) @@ -2518,6 +3007,14 @@ am_mg3a Multi Game III (V.Ger 3.64) + + am_mg4v + Multi Game IV (V.Ger 3.44) + + + am_mg5hu + Multi Game V (AMGHU_V83.65) + amatelas Sei Senshi Amatelass @@ -2530,6 +3027,38 @@ amazonh Amazon Hunt + + amazonh2 + Amazon Hunt II (French) + + + amazonh3 + Amazon Hunt III (French) + + + amazonh3a + Amazon Hunt III (rev. 1, French) + + + amazonha + Amazon Hunt (alternate set) + + + amazoni2 + Amazonia King II (V202BR) + + + amazonia + Amazonia King (V104BR) + + + amazonkp + Amazonia King Plus (V204BR) + + + amazont + Soldier Girl Amazon (Tecfri license) + ambush Ambush @@ -2542,6 +3071,10 @@ ambushj Ambush (Japan) + + ambusht + Ambush (Tecfri) + ambushv Ambush (Volt Electronics) @@ -2566,6 +3099,18 @@ america America 1492 + + americna + Americana (9131-01) + + + americnaa + Americana (9131-00) + + + amerihok + Ameri-Hockey + amidar Amidar @@ -2578,6 +3123,10 @@ amidarb Amidar (bootleg) + + amidarc + Amidar (Cirsa bootleg) + amidaro Amidar (Olympia) @@ -2592,7 +3141,15 @@ amigo - Amigo + Amigo (bootleg of Amidar, set 1) + + + amigo2 + Amigo (bootleg of Amidar, set 2) + + + aminosan + Aminosan (satellite) ampkr228 @@ -2614,6 +3171,18 @@ ampkr2b4 American Poker II (bootleg, set 4) + + ampkr2jsp + American Poker II - Jackpot (Spanish, set 1) + + + ampkr2jspa + American Poker II - Jackpot (Spanish, set 2) + + + ampkr2jspb + American Poker II - Jackpot (Spanish, set 3) + ampkr95 American Poker 95 @@ -2642,6 +3211,18 @@ amuse1 Amuse (Version 30.08 IBA) + + amuse1a + Amuse (Version 30.08A) + + + amzqueen + Amazon Queen (10005511, NSW/ACT) + + + amztempl + Amazon Temple (10299811, NSW/ACT) + ancienta Ancient Atlantis (set 1) @@ -2672,11 +3253,19 @@ androdun - Andro Dunos (NGM-049)(NGH-049) + Andro Dunos (NGM-049 ~ NGH-049) + + + androidp + Android (prototype, later build) + + + androidpo + Android (prototype, early build) andromed - Andromeda (Japan?) + Andromeda SS (Japan?) andromep @@ -2748,7 +3337,7 @@ animaljr - Exciting Animal Land Jr. (USA) + Exciting Animal Land Jr. (USA, Canada, Mexico) animaljrj @@ -2758,6 +3347,14 @@ animaljrs Animalandia Jr. (Spanish) + + animechmp + Anime Champ (GCA07 VER. JAA) + + + animpkr + unknown rocket/animal-themed poker + anithunt Animal Treasure Hunt (Version 1.9R, set 1) @@ -2780,7 +3377,19 @@ anmlbskt - Animal Basket + Animal Basket / Hustle Tamaire Kyousou (24 Jan 2005) + + + anmlbskta + Animal Basket / Hustle Tamaire Kyousou (19 Jan 2005) + + + anpanman + Soreike! Anpanman Popcorn Koujou (Rev B) + + + anpanman2 + Soreike! Anpanman Popcorn Koujou 2 (Rev C) antar @@ -2792,6 +3401,10 @@ antcleo + Antony and Cleopatra (10163211, NSW/ACT) + + + antcleom Antony and Cleopatra (10177211, Malaysia) @@ -2802,6 +3415,10 @@ anteaterg Ameisenbaer (German) + + anteatergg + Ameisenbaer (German bootleg on Galaxian hardware) + anteateruk The Anteater (UK) @@ -2812,11 +3429,11 @@ aodk - Aggressors of Dark Kombat / Tsuukai GANGAN Koushinkyoku (ADM-008)(ADH-008) + Aggressors of Dark Kombat / Tsuukai GANGAN Koushinkyoku (ADM-008 ~ ADH-008) aof - Art of Fighting / Ryuuko no Ken (NGM-044)(NGH-044) + Art of Fighting / Ryuuko no Ken (NGM-044 ~ NGH-044) aof2 @@ -2826,10 +3443,18 @@ aof2a Art of Fighting 2 / Ryuuko no Ken 2 (NGH-056) + + aof2bh + Art of Fighting 2 / Ryuuko no Ken 2 (Enable hidden characters V2) + aof3 Art of Fighting 3 - The Path of the Warrior / Art of Fighting - Ryuuko no Ken Gaiden + + aof3bh + Art of Fighting 3 - The Path of the Warrior / Art of Fighting - Ryuuko no Ken Gaiden (Enable Hidden Characters V2) + aof3k Art of Fighting 3 - The Path of the Warrior (Korean release) @@ -2840,11 +3465,15 @@ apache3 - Apache 3 + Apache 3 (rev F) apache3a - Apache 3 (Kana Corporation license) + Apache 3 (rev E) + + + apache3b + Apache 3 (Kana Corporation license, rev G) apb @@ -2882,13 +3511,37 @@ apbg APB - All Points Bulletin (German) + + aplan + A-Plan + + + aplarail + Attack Pla Rail (Japan, AP1/VER.A) + aplatoon - Platoon V.?.? US + Platoon (V.3.1 US) + + + apocof + Apollo Coffee (0151105, US) apollo13 - Apollo 13 + Apollo 13 (5.01) + + + apollo13_10 + Apollo 13 (1.00) + + + apollo13_20 + Apollo 13 (2.03) + + + apollo13_d4 + Apollo 13 (5.01, Display 4.01) aponow @@ -2918,9 +3571,13 @@ aquajacku Aqua Jack (US) + + aquajckj + Aqua Jack (Japan) + aquajet - Aqua Jet (Rev. AJ2 Ver.B) + Aqua Jet (Rev. AJ2 Ver.B, World) aqualand @@ -2928,12 +3585,20 @@ aquarium + Aquarium (US) + + + aquariumj Aquarium (Japan) aquarush Aqua Rush (Japan, AQ1/VER.A1) + + aquastge + Aqua Stage + ar_airh SportTime Table Hockey (Arcadia, set 1, V 2.1) @@ -2946,10 +3611,6 @@ ar_argh Aaargh (Arcadia) - - ar_bios - Arcadia System BIOS - ar_blast Blastaball (Arcadia, V 2.1) @@ -3042,6 +3703,14 @@ arabfgtu Arabian Fight (US) + + arabiamj + Arabian Magic (Japan) + + + arabiamu + Arabian Magic (US) + arabian Arabian @@ -3062,10 +3731,22 @@ arabianmu Arabian Magic (Ver 1.0A 1992/07/06) + + arabnga6 + Arabian Nights (2J008211, NSW/ACT) + + + arabnga6u + Arabian Nights (0151356, US) + arac6000 Super Six Plus II English Mark Darts + + arac6spa + Super Six Plus II English Mark Darts (Spanish) + aracnis Aracnis (bootleg of Scorpion on Moon Cresta hardware) @@ -3078,10 +3759,18 @@ arcadecl Arcade Classics (prototype) + + arcadia + Waga Seishun no Arcadia + arcadian Arcadia (NMK) + + archriv2 + Arch Rivals (rev 2.0) + archrivl Arch Rivals (rev 4.0 6/29/89) @@ -3092,16 +3781,12 @@ archrivlb - Arch Rivals (rev 2.0 5/03/89, 8-way Joystick bootleg) + Arch Rivals (rev 2.0 5/03/89, 8-way joystick bootleg) arctthnd Arctic Thunder (v1.002) - - arctthndult - Ultimate Arctic Thunder - arcwins Arctic Wins (4XF5227H03, USA) @@ -3112,7 +3797,7 @@ area51a - Area 51 (Atari Games license) + Area 51 (Atari Games license, Oct 25, 1995) area51mx @@ -3120,7 +3805,11 @@ area51t - Area 51 (Time Warner license) + Area 51 (Time Warner license, Oct 17, 1996) + + + area51ta + Area 51 (Time Warner license, Nov 27, 1995) area88 @@ -3134,9 +3823,29 @@ arena Arena + + arenaa + Arena (alternate set) + + + arenaf + Arena (French) + + + arenag + Arena (German) + arescue - Air Rescue + Air Rescue (World) + + + arescuej + Air Rescue (Japan) + + + arescueu + Air Rescue (US) argus @@ -3150,22 +3859,30 @@ arian Arian Mission + + arish + Arishinko (0151087, US) + arist_l1 Aristocrat (Shuffle) (L-1) - aristmk5 - MKV Set/Clear Chips (USA) + arizna10 + Arizona 10 (v1.1) - aristmk6 - Aristocrat MK6 Base (15011025, Malaysia) + arizona + Arizona ark1ball Arkanoid (bootleg with MCU, harder) + + ark1balla + Arkanoid (bootleg with MCU, harder, alt) + arkangc Arkanoid (Game Corporation bootleg, set 1) @@ -3176,27 +3893,35 @@ arkanoid - Arkanoid (World) + Arkanoid (World, older) arkanoidj - Arkanoid (Japan) + Arkanoid (Japan, newer) + + + arkanoidja + Arkanoid (Japan, newer w/level select) arkanoidjb + Arkanoid (Japan, older) + + + arkanoidjbl Arkanoid (bootleg with MCU, set 1) - arkanoidjb2 + arkanoidjbl2 Arkanoid (bootleg with MCU, set 2) - arkanoidjo - Arkanoid (Japan, older) + arkanoidjbla + Arkanoid (bootleg with MCU, alt) arkanoidu - Arkanoid (US) + Arkanoid (US, newer) arkanoiduo @@ -3214,6 +3939,14 @@ arkatour Tournament Arkanoid (US) + + arkbl2 + Arkanoid (Japanese bootleg Set 2) + + + arkbl3 + Arkanoid (Japanese bootleg Set 3) + arkbloc2 Block (Game Corporation bootleg, set 2) @@ -3234,6 +3967,14 @@ arkgcbla Arkanoid (bootleg on Block hardware, set 2) + + arknid2j + Arkanoid - Revenge of DOH (Japan) + + + arknid2u + Arkanoid - Revenge of DOH (US) + arknoid2 Arkanoid - Revenge of DOH (World) @@ -3250,6 +3991,18 @@ arknoid2u Arkanoid - Revenge of DOH (US) + + arknoidj + Arkanoid (Japan, newer w/level select) + + + arknoidu + Arkanoid (US) + + + arknoiuo + Arkanoid (US, older) + arkretrn Arkanoid Returns (Ver 2.02O 1997/02/10) @@ -3258,29 +4011,41 @@ arkretrnj Arkanoid Returns (Ver 2.02J 1997/02/10) + + arkretrnu + Arkanoid Returns (Ver 2.02A 1997/02/10) + arktayt2 Arkanoid (Tayto bootleg, harder) arlingtn + Arlington Horse Racing (v1.40-D) + + + arlingtna Arlington Horse Racing (v1.21-D) armchmp2 - Arm Champs II v2.6 + Arm Champs II (ver 2.7) armchmp2o - Arm Champs II v1.7 + Arm Champs II (ver 1.7) + + + armchmp2o2 + Arm Champs II (ver 2.6) armedf - Armed Formation + Armed F (Japan) armedff - Armed Formation (Fillmore license) + Armed F (Fillmore license) armora @@ -3294,6 +4059,10 @@ armorar Armor Attack (Rock-Ola) + + armorca2 + Armored Car (set 2) + armorcar Armored Car (set 1) @@ -3312,8 +4081,16 @@ armwara + Armored Warriors (Asia 941024) + + + armwarar1 Armored Warriors (Asia 940920) + + armwarb + Armored Warriors (Brazil 941024) + armwarr1 Armored Warriors (Euro 941011) @@ -3330,6 +4107,14 @@ armwrest Arm Wrestling + + arwincm + Arctic Wins - Mr. Cashman (0151065, US) + + + as1 + AS-1 Controller + as_acp unknown Astra 'ACP' (Astra, V403) @@ -4044,7 +4829,15 @@ asndynmt - Asian Dynamite + Asian Dynamite / Dynamite Deka EX + + + asndynmto + Asian Dynamite / Dynamite Deka EX (older) + + + asnprinc + Asian Princess (0352502, US) aso @@ -4070,6 +4863,10 @@ astannie Asteroid Annie and the Aliens + + astdelu1 + Asteroids Deluxe (rev 1) + astdelux Asteroids Deluxe (rev 3) @@ -4082,6 +4879,10 @@ astdelux2 Asteroids Deluxe (rev 2) + + asterion + Asterion + asterix Asterix (ver EAD) @@ -4110,6 +4911,14 @@ asterockv Asterock (Videotron bootleg of Asteroids) + + asteroi1 + Asteroids (rev 1) + + + asteroib + Asteroids (bootleg on Lunar Lander hardware) + asteroid Asteroids (rev 4) @@ -4123,8 +4932,12 @@ Asteroids (rev 2) - asteroidb - Asteroids (bootleg on Lunar Lander hardware) + asteroidb1 + Asteroids (bootleg on Lunar Lander hardware, set 1) + + + asteroidb2 + Asteroids (bootleg on Lunar Lander hardware, set 2) astinvad @@ -4136,11 +4949,19 @@ astorm - Alien Storm (World, 2 Players, FD1094 317-0154) + Alien Storm (World, 2 Players) (FD1094 317-0154) + + + astorm2p + Alien Storm (2 Player) astorm3 - Alien Storm (World, 3 Players, FD1094 317-0148) + Alien Storm (World, 3 Players) (FD1094 317-0148) + + + astorm3d + Alien Storm (World, 3 Players) (bootleg of FD1094 317-0148 set) astormb2 @@ -4152,11 +4973,19 @@ astormj - Alien Storm (Japan, 2 Players, FD1094 317-0146) + Alien Storm (Japan, 2 Players) (FD1094 317-0146) + + + astormjd + Alien Storm (Japan, 2 Players) (bootleg of FD1094 317-0146 set) astormu - Alien Storm (US, 3 Players, FD1094 317-0147) + Alien Storm (US, 3 Players) (FD1094 317-0147) + + + astormud + Alien Storm (US, 3 Players) (bootleg of FD1094 317-0147 set) astrass @@ -4166,6 +4995,10 @@ astrians Astrians (clone of Swarm) + + astroamb + Astro Ambush (Scramble bootleg on Galaxian hardware) + astrob Astro Blaster (version 3) @@ -4182,6 +5015,10 @@ astrob2a Astro Blaster (version 2a) + + astrob2b + Astro Blaster (version 2b) + astrobg Astro Blaster (German) @@ -4198,6 +5035,14 @@ astrof3 Astro Fighter (set 3) + + astroff + Astro Fighter (Famaresa bootleg, set 1) + + + astroff2 + Astro Fighter (Famaresa bootleg, set 2) + astrofl Astro Flash (Japan) @@ -4218,9 +5063,21 @@ astrowar Astro Wars + + astrxeaa + Asterix (World ver. EAA) + + + astrxeac + Asterix (World ver. EAC) + astyanax - The Astyanax + The Astyanax (EPROM version) + + + astyanaxa + The Astyanax (mask ROM version) asuka @@ -4228,6 +5085,10 @@ asukaj + Asuka & Asuka (Japan, version 1) + + + asukaja Asuka & Asuka (Japan) @@ -4236,7 +5097,19 @@ asurabus - Asura Buster - Eternal Warriors (Japan) + Asura Buster - Eternal Warriors (USA) + + + asurabusj + Asura Buster - Eternal Warriors (Japan, set 1) + + + asurabusja + Asura Buster - Eternal Warriors (Japan, set 2) + + + asurabusjr + Asura Buster - Eternal Warriors (Japan) (ARCADIA review build) asylum @@ -4246,6 +5119,10 @@ atamanot Computer Quiz Atama no Taisou (Japan) + + ataqandr + Ataque Androide - Moon Cresta (FAR S.A. Spanish bootleg) + atarians The Atarians @@ -4259,20 +5136,20 @@ Atari Football (revision 1) - atarifb4 - Atari Football (4 players) + atarifb2 + Atari Football II - atarisy1 - Atari System 1 BIOS + atarifb4 + Atari 4 Player Football ataxx - Ataxx (set 1) + Ataxx (rev 5) ataxxa - Ataxx (set 2) + Ataxx (rev 4) ataxxe @@ -4284,7 +5161,19 @@ atehate - Athena no Hatena ? + Athena no Hatena? + + + atetb3482 + Tetris (bootleg set 6, with UM3482) + + + atetckt2 + Tetris (Cocktail set 2) + + + atetcktl + Tetris (Cocktail set 1) atetris @@ -4302,6 +5191,22 @@ atetrisb2 Tetris (bootleg set 2) + + atetrisb3 + Tetris (bootleg set 3) + + + atetrisb4 + Tetris (bootleg set 4) + + + atetrisb5 + Tetris (bootleg set 5) + + + atetrisbp + Tetris (bartop, prototype) + atetrisc Tetris (cocktail set 1) @@ -4314,6 +5219,14 @@ athena Athena + + athenab + Athena (bootleg) + + + atkgld + All the King's Gold (0152152, US) + atla_ltd Atlantis (LTD) @@ -4344,15 +5257,15 @@ atlantol - Atlant Olimpic + Atlant Olimpic (Italian bootleg) - atleta - Atleta + atlants2 + Battle of Atlantis (set 2) - atluspsx - Atlus PSX + atleta + Atleta atombjt @@ -4375,8 +5288,20 @@ Atomic Punk (US) - atpsx - Atari PSX + ator + Ator (set 1, 2 bumpers) + + + ator3bmp + Ator (set 2, 3 bumpers) + + + atrbonpk + Bonus Poker (Atronic) + + + atricmon + I C Money (Atronic) atronic @@ -4386,21 +5311,33 @@ atronica Atronic SetUp/Clear Chips (Russia, set 2) + + atrwild + Wild Thing (Atronic) + attack Attack + + attackf + Attack (Defender bootleg) + attackfc Attack Force attckexd - Attack [TTL] + Attack (set 1) [TTL] + + + attckexd2 + Attack (set 2) [TTL] attckufo - Attack Ufo + Attack UFO attila @@ -4428,19 +5365,31 @@ aurail - Aurail (set 3, US, unprotected) + Aurail (set 3, US) (unprotected) aurail1 - Aurail (set 2, World, FD1089B 317-0168) + Aurail (set 2, World) (FD1089B 317-0168) + + + aurail1d + Aurail (set 2, World) (bootleg of FD1089B 317-0168 set) + + + auraila + Aurail (set 2) aurailj - Aurail (set 1, Japan, FD1089A 317-0167) + Aurail (set 1, Japan) (FD1089A 317-0167) + + + aurailjd + Aurail (set 1, Japan) (bootleg of FD1089A 317-0167 set) ausfache - Akatsuki Blitzkampf Ausf Achse + Akatsuki Blitzkampf Ausf. Achse (Japan) aust201 @@ -4482,6 +5431,10 @@ automat Automat (bootleg of Robocop) + + autopapa + El auto feo + av2mj1bb AV2Mahjong No.1 Bay Bridge no Seijo (Japan) @@ -4490,30 +5443,106 @@ av2mj2rg AV2Mahjong No.2 Rouge no Kaori (Japan) + + avalnc12 + The Key Of Avalon 1.2 - Summon The New Monsters (client, Rev A) (GDT-0010A) + + + avalnc13 + The Key Of Avalon 1.3 - Chaotic Sabbat (client, Rev C) (GDT-0010C) + + + avalnc25 + The Key Of Avalon 2.5 - War of the Key (client, Rev B) (GDT-0019B) + + + avalnc25a + The Key Of Avalon 2.5 - War of the Key (client, Rev A) (GDT-0019A) + avalnche Avalanche - avalon13 - The Key Of Avalon 1.3 - Chaotic Sabbat (client) (Rev C) (GDT-0010C) + avalns12 + The Key Of Avalon 1.2 - Summon The New Monsters (server, Rev A) (GDT-0009A) + + + avalns13 + The Key Of Avalon 1.3 - Chaotic Sabbat (server, Rev C) (GDT-0009C) + + + avalns25 + The Key Of Avalon 2.5 - War of the Key (server, Rev B) (GDT-0018B) + + + avalns25a + The Key Of Avalon 2.5 - War of the Key (server, Rev A) (GDT-0018A) avalon20 - The Key Of Avalon 2.0 - Eutaxy and Commandment (client) (Rev B) (GDT-0017B) + The Key Of Avalon 2.0 - Eutaxy and Commandment (client, Rev B) (GDT-0017B) + + + avalonc + The Key Of Avalon - The Wizard Master (client, Rev G) (GDT-0006G) + + + avalonca + The Key Of Avalon - The Wizard Master (client, Rev A) (GDT-0006A) + + + avaloncc + The Key Of Avalon - The Wizard Master (client, Rev C) (GDT-0006C) + + + avalonce + The Key Of Avalon - The Wizard Master (client, Rev E) (GDT-0006E) + + + avaloncf + The Key Of Avalon - The Wizard Master (client, Rev F) (GDT-0006F) avalons - The Key Of Avalon - The Wizard Master (server) (Rev C) (GDT-0005C) + The Key Of Avalon - The Wizard Master (server, Rev G) (GDT-0005G) + + + avalonsa + The Key Of Avalon - The Wizard Master (server, Rev A) (GDT-0005A) + + + avalonsc + The Key Of Avalon - The Wizard Master (server, Rev C) (GDT-0005C) + + + avalonse + The Key Of Avalon - The Wizard Master (server, Rev E) (GDT-0005E) + + + avalonsf + The Key Of Avalon - The Wizard Master (server, Rev F) (GDT-0005F) avefenix - Ave Fenix (Spanish bootleg of Phoenix) + Ave Fenix (Electrogame, Spanish bootleg of Phoenix) + + + avefenixl + Ave Fenix (Laguna, Spanish bootleg of Phoenix) + + + avefenixrf + Ave Fenix (Recreativos Franco, Spanish bootleg of Phoenix) avenger Avenger [TTL] + + avenger2 + Avengers (US set 2) + avengers Avengers (US set 1) @@ -4524,11 +5553,11 @@ avengrgs - Avengers In Galactic Storm (US) + Avengers In Galactic Storm (US/Europe 1.0) avengrgsj - Avengers In Galactic Storm (Japan) + Avengers In Galactic Storm (Japan 1.2) avsp @@ -4575,8 +5604,8 @@ Symbols (ver 2.5) - awbios - Atomiswave Bios + awetoss + Awesome Toss 'Em (Lazer-Tron) aztarac @@ -4590,6 +5619,14 @@ azurian Azurian Attack + + b2b + Bang Bang Busters (2010 NCI release) + + + b3rinsya + Burning Sanrinsya - Burning Tricycle + b83catms Cat & Mouse (Bellfruit) (System 83) @@ -4742,6 +5779,14 @@ babydad Baby Dado + + babyfrts + Baby Fruits (100 pts version) + + + babyfrts25 + Baby Fruits (25 pts version) + babypac Baby Pac-Man (set 1) @@ -4754,13 +5799,17 @@ babypkr Baby Poker + + bace + Balloon Ace + backfire - Backfire! (set 1) + Backfire! (Japan, set 1) backfirea - Backfire! (set 2) + Backfire! (Japan, set 2) backfirt @@ -4770,14 +5819,30 @@ backgamn Backgammon + + badapple + Bad Apple (Tech-Demo) + + + baddog + Bad Dog Poker (0200428V, NSW/ACT) + baddudes - Bad Dudes vs. Dragonninja (US) + Bad Dudes vs. Dragonninja (US revision 1) badgirls Bad Girls + + badgirlsf + Bad Girls (French) + + + badgirlsg + Bad Girls (German) + badlands Bad Lands @@ -4796,7 +5861,11 @@ bagmanf - Bagman (bootleg on Crazy Kong hardware) + Le Bagnard (bootleg on Crazy Kong hardware) + + + bagmanj + Bagman (Taito) bagmanm2 @@ -4808,11 +5877,19 @@ bagmans - Bagman (Stern Electronics, set 1) + Bagman (Stern Electronics, revision A5) bagmans2 - Bagman (Stern Electronics, set 2) + Bagman (Stern set 2) + + + bagmans3 + Bagman (Stern Electronics, revision A3) + + + bagmans4 + Bagman (Stern Electronics, revision A4) bagnard @@ -4826,9 +5903,13 @@ bagnardi Le Bagnard (Itisa, Spain) + + bagnardio + Le Bagnard (Itisa, Spain, older) + bakatono - Bakatonosama Mahjong Manyuuki (MOM-002)(MOH-002) + Bakatonosama Mahjong Manyuuki (MOM-002 ~ MOH-002) bakubaku @@ -4836,7 +5917,7 @@ bakubrkr - Bakuretsu Breaker + Bakuretsu Breaker (Japan) bakuhatu @@ -4856,7 +5937,11 @@ ballboy - Ball Boy + Ball Boy (2 players) + + + ballboy3p + Ball Boy (3 players) ballbros @@ -4872,7 +5957,7 @@ bam2 - Bust a Move 2 (Japanese ROM ver. 1999/07/17 10:00:00) + Bust a Move 2 - Dance Tengoku Mix (Japanese ROM ver. 1999/07/17 10:00:00) bananadr @@ -4894,6 +5979,10 @@ bandido Bandido + + bandit + Bandit (US) + bang Bang! @@ -4906,6 +5995,10 @@ bangbead Bang Bead + + bangbedp + Bang Bead (Prototype?) + bangj Gun Gabacho (Japan) @@ -4922,10 +6015,26 @@ bankroba Bank Robbery (Ver. 2.00) + + bankrobb + Bank Robbery (Ver. 1.23) + + + baracuda + Barracuda + + + baraduka + Baraduke (set 2) + baraduke Baraduke + + barata + Dona Barata (early prototype) + barbball Barroom Baseball (prototype) @@ -4934,6 +6043,22 @@ barbwire Barb Wire + + barek2ch + Bare Knuckle II (Chinese bootleg of Mega Drive version) + + + barek2mb + Bare Knuckle II (bootleg of Mega Drive version) + + + barek3mb + Bare Knuckle III (bootleg of Mega Drive version) + + + barekch + Bare Knuckle (Chinese bootleg of Mega Drive version) + barline Barline (Japan?) @@ -4952,15 +6077,23 @@ baryon - Baryon - Future Assault + Baryon - Future Assault (set 1) + + + baryona + Baryon - Future Assault (set 2) basebal2 Baseball: The Season II - bass - Sega Bass Fishing (Japan) + basket + Basket + + + basketbal + Basket Ball (8-way joystick bootleg of Arch Rivals) bassang2 @@ -4972,11 +6105,15 @@ basschal + Sega Bass Fishing Challenge Version A + + + basschalo Sega Bass Fishing Challenge bassdx - Sega Bass Fishing Deluxe (Japan) + Sega Bass Fishing Deluxe (USA) batcir @@ -4996,7 +6133,7 @@ batlball - Battle Balls (Germany) + Battle Balls (Germany, newer) batlballa @@ -5006,6 +6143,14 @@ batlballe Battle Balls (Hong Kong, earlier) + + batlballo + Battle Balls (Germany, earlier) + + + batlballpt + Battle Balls (Portugal) + batlballu Battle Balls (US) @@ -5016,7 +6161,7 @@ batlgear - Battle Gear + Battle Gear (Ver 2.40 A) batlgr2 @@ -5042,6 +6187,14 @@ batmanf Batman Forever (4.0) + + batmanf1 + Batman Forever (1.02) + + + batmanf2 + Batman Forever (2.02) + batmanf3 Batman Forever (3.0) @@ -5058,6 +6211,10 @@ batriderc Armed Police Batrider (China) (Fri Feb 13 1998) + + batriderhk + Armed Police Batrider (Hong Kong) (Mon Dec 22 1997) + batriderj Armed Police Batrider (Japan, B version) (Fri Feb 13 1998) @@ -5078,6 +6235,14 @@ batrideru Armed Police Batrider (USA) (Fri Feb 13 1998) + + batridra + Armed Police Batrider (Japan, version A) + + + batridrk + Armed Police Batrider (Korea, version B) + batsugun Batsugun @@ -5086,10 +6251,22 @@ batsuguna Batsugun (older set) + + batsugunb + Batsugun (Korean PCB) + batsugunsp Batsugun - Special Version + + battlan2 + Battle Lane! Vol. 5 (set 2) + + + battlan3 + Battle Lane! Vol. 5 (set 3) + battlane Battle Lane! Vol. 5 (set 1) @@ -5104,7 +6281,27 @@ battlcry - Battlecry + Battlecry (Version E) + + + battlcryc + Battlecry (Version C) + + + battlcryp + Battlecry (Prototype) + + + battleg + Battle Garegga - Type 2 (Denmark - China) (Tue Apr 2 1996) + + + battlega + Battle Garegga (Europe - USA - Japan - Asia) (Sat Feb 3 1996) + + + battlegb + Battle Garegga (Austria - Hong Kong) (Sat Mar 2 1996) battlera @@ -5112,12 +6309,20 @@ battles - Battles + Battles (set 1) + + + battles2 + Battles (set 2) battlex Battle Cross + + battlntj + Battlantis (Japan) + battlnts Battlantis (program code G) @@ -5134,13 +6339,41 @@ battroad The Battle-Road + + batugnsp + Batsugun (Special Ver.) + + + batwings + Battle Wings (alt) + + + bay_d300 + Baywatch (3.00 Dutch) + + + bay_d400 + Baywatch (4.00 English) + + + bay_e400 + Baywatch (4.00 Dutch) + + + bay_f201 + Baywatch (2.01 French) + + + bayrouta + Bay Route (set 2) + bayroute - Bay Route (set 3, World, FD1094 317-0116) + Bay Route (set 3, World) (FD1094 317-0116) bayroute1 - Bay Route (set 1, US, unprotected) + Bay Route (set 1, US) (unprotected) bayrouteb1 @@ -5150,18 +6383,50 @@ bayrouteb2 Bay Route (Datsu bootleg) + + bayrouted + Bay Route (set 3, World) (bootleg of FD1094 317-0116 set) + bayroutej - Bay Route (set 2, Japan, FD1094 317-0115) + Bay Route (set 2, Japan) (FD1094 317-0115) + + + bayroutejd + Bay Route (set 2, Japan) (bootleg of FD1094 317-0115 set) + + + bayrtbl1 + Bay Route (bootleg set 1) + + + bayrtbl2 + Bay Route (bootleg set 2) baywatch Baywatch + + bazooka + Bazooka [TTL] + + + bazookabr + Bazooka (Brazil) [TTL] + + + bbakradu + Battle Bakraid - Unlimited version (Japan) (Tue Jun 8 1999) + bbakraid Battle Bakraid - Unlimited Version (USA) (Tue Jun 8 1999) + + bbakraidc + Battle Bakraid - Unlimited Version (China) (Tue Jun 8 1999) + bbakraidj Battle Bakraid - Unlimited Version (Japan) (Tue Jun 8 1999) @@ -5182,6 +6447,10 @@ bballs Bouncing Balls + + bballsa + Bouncing Balls (Adult) + bbb108 Big Bang Bar (Beta 1.8 US) @@ -5196,12 +6465,68 @@ bbbxing - Best Bout Boxing + Best Bout Boxing (ver 1.3) + + + bbchall + Baby Boom Challenge bbeltzac Black Belt (Zaccaria) + + bbeltzacf + Black Belt (Zaccaria, French speech) + + + bbeltzacg + Black Belt (Zaccaria, German speech) + + + bbeltzaci + Black Belt (Zaccaria, Italian speech) + + + bbh + Big Buck Hunter (v1.00.14) + + + bbh2sp + Big Buck Hunter II - Sportsman's Paradise (v2.02.11) + + + bbh2spa + Big Buck Hunter II - Sportsman's Paradise (v2.02.09) + + + bbh2spb + Big Buck Hunter II - Sportsman's Paradise (v2.02.08) + + + bbh_140 + Big Buck Hunter Pro v1.40 + + + bbh_150 + Big Buck Hunter Pro v1.50 + + + bbh_160 + Big Buck Hunter Pro v1.60 + + + bbhcotw + Big Buck Hunter Call of the Wild (v3.02.5) + + + bbhsc + Big Buck Hunter - Shooter's Challenge (v1.60.01) + + + bbhsca + Big Buck Hunter - Shooter's Challenge (v1.50.07) + bbmanw Bomber Man World / New Dyna Blaster - Global Quest @@ -5230,6 +6555,10 @@ bbprot unknown fighting game 'BB' (prototype) + + bbredux + Bubble Bobble ('bootleg redux' hack for Bobble Bobble PCB) + bbros Buster Bros. (USA) @@ -5242,10 +6571,26 @@ bbusters Beast Busters (World) + + bbustersj + Beast Busters (Japan, Version 2, 3 Player) + + + bbustersja + Beast Busters (Japan, Version 2, 2 Player) + bbustersu + Beast Busters (US, Version 3) + + + bbustersua Beast Busters (US, Version 2) + + bcats_g4 + Bad Cats (LG-4) + bcats_l2 Bad Cats (LA-2) @@ -5260,11 +6605,15 @@ bchancep - Bonne Chance! (Golden Poker prequel HW) + Bonne Chance! (Golden Poker prequel HW, set 1) + + + bchanceq + Bonne Chance! (Golden Poker prequel HW, set 2) bchopper - Battle Chopper + Battle Chopper (World) bcrusher @@ -5282,10 +6631,46 @@ bcstrya B.C. Story (set 2) + + bdk_130 + Batman - The Dark Knight v1.30 + + + bdk_150 + Batman - The Dark Knight v1.50 + + + bdk_160 + Batman - The Dark Knight v1.60 + + + bdk_200 + Batman - The Dark Knight v2.00 + + + bdk_210 + Batman - The Dark Knight v2.10 + + + bdk_220 + Batman - The Dark Knight v2.20 + + + bdk_290 + Batman - The Dark Knight v2.90 + + + bdk_294 + Batman - The Dark Knight v2.94 + bdrdown Border Down (Rev A) (GDL-0023A) + + bdream97 + Hudie Meng 97 + beachpt Beach Patrol (Russia) (Atronic) @@ -5302,13 +6687,29 @@ bearnec Bear Necessities (Russia) (Atronic) + + beast + Shadow of the Beast (Neo Geo demo) + beastf Beastie Feastie + + beastfp + Beastie Feastie (Pac-Man conversion) + + + beastrzb + Beastorizer (bootleg) + beastrzr - Beastorizer (USA) + Beastorizer (USA, Sep 22 1997) + + + beastrzra + Beastorizer (USA, Jun 21 1997) beastrzrb @@ -5318,6 +6719,10 @@ beatclck Beat the Clock + + beatclck2 + Beat the Clock (with flasher support) + beathead BeatHead (prototype) @@ -5326,6 +6731,10 @@ beautyb Beauty Block + + beavbuk + Beaver Bucks (20255111, NSW/ACT) + beebop Bee Bop (set 1) @@ -5380,11 +6789,15 @@ beezer - Beezer (set 1) + Beezer (version 9.0) beezer1 - Beezer (set 2) + Beezer (unknown earlier version) + + + beezerk + Bee-Zerk begas @@ -5394,6 +6807,10 @@ begas1 Bega's Battle (Revision 1) + + bejpoker + Bonanza Enterprises' Joker Poker + bel Behind Enemy Lines @@ -5402,17 +6819,25 @@ bellring Bell Ringer + + belslots + Bel Slots Export (5.01) + benberob Ben Bero Beh (Japan) berabohm - Beraboh Man (Japan, Rev C) + Chou Zetsurinjin Berabowman (Japan, Rev C) berabohmb - Beraboh Man (Japan, Rev B) + Chou Zetsurinjin Berabowman (Japan, Rev B) + + + beraboho + Beraboh Man (Japan version B) berenstn @@ -5422,9 +6847,25 @@ berlwall The Berlin Wall + + berlwallk + The Berlin Wall (Korea) + berlwallt - The Berlin Wall (bootleg ?) + The Berlin Wall (bootleg?) + + + berlwalt + The Berlin Wall (set 2) + + + bermudaa + Bermuda Triangle (US older version) + + + bermudao + Bermuda Triangle (Japan old version) bermudat @@ -5440,15 +6881,31 @@ berzerk - Berzerk (set 1) + Berzerk (revision RC31A) berzerk1 Berzerk (set 2) + + berzerka + Berzerk (revision RC31) + + + berzerkb + Berzerk (revision RC28) + + + berzerkf + Berzerk (French Speech, revision RC31) + berzerkg - Berzerk (German Speech) + Berzerk (German Speech, revision RC32) + + + berzerks + Berzerk (Spanish Speech, revision RC32) bestbest @@ -5464,7 +6921,15 @@ bestri - Bestri (Korea) + Bestri (Korea, set 1) + + + bestria + Bestri (Korea, set 2) + + + betzoo + Betting Zoo - Mr. Cashman (0251064, US) bg_barmy @@ -5490,6 +6955,10 @@ bgareggabl 1945 Part-2 (Chinese hack of Battle Garegga) + + bgareggabla + Lei Shen Zhuan Thunder Deity Biography (Chinese hack of Battle Garegga) + bgareggacn Battle Garegga - Type 2 (Denmark / China) (Tue Apr 2 1996) @@ -5502,6 +6971,10 @@ bgaregganv Battle Garegga - New Version (Austria / Hong Kong) (Sat Mar 2 1996) + + bgareggat + Battle Garegga (location test) (Wed Jan 17 1996) + bgareggat2 Battle Garegga - Type 2 (Europe / USA / Japan / Asia) (Sat Mar 2 1996) @@ -5510,6 +6983,10 @@ bgareggatw Battle Garegga (Taiwan / Germany) (Thu Feb 1 1996) + + bgareggaz + Battle Garegga Zakk version (Europe / USA / Japan / Asia) (Sat Feb 3 1996) + bguns_l7 Big Guns (L-7) @@ -5558,6 +7035,22 @@ bigbang Big Bang (9th Nov. 1993) + + bigbat + Big Bat (Bat game) + + + bigben + Big Ben (30126911, NSW/ACT) + + + bigbena + Big Ben (20126911, NSW/ACT) + + + bigbenq + Big Ben (20201111, Queensland) + bigblue Big Blue (Russia) (Atronic) @@ -5567,13 +7060,17 @@ Big Bucks - bigd2 - Big D2 + bigcsino + Big Casino bigdeal Big Deal (Hungarian, set 1) + + bigdeal0 + Big Deal Belgien (5.04) + bigdealb Big Deal (Hungarian, set 2) @@ -5594,21 +7091,45 @@ bigfight Big Fight - Big Trouble In The Atlantic Ocean + + bigfightj + Big Fight - Big Trouble In The Atlantic Ocean (Japan, rev F) + biggame Big Game + + bigheart + Big Hearted (10000511, NSW/ACT) + bighouse Big House + + bighousef + Big House (French) + + + bighouseg + Big House (German) + bighurt Frank Thomas' Big Hurt (rev.3) + + bigjoke + The Big Joke (Version 0.00) + bigkarnk - Big Karnak + Big Karnak (ver. 1.0, checksum 1e38c94) + + + bigkarnkm + Big Karnak (Modular System) bigkong @@ -5618,9 +7139,25 @@ bigprowr The Big Pro Wrestling! + + bigred + Big Red (2J009211, NSW/ACT) + + + bigred2 + Big Red 2 (5J011311, NSW/ACT) + + + bigreda + Big Red (1J009211, NSW/ACT) + bigrun - Big Run (11th Rallye version) + Big Run (11th Rallye version, Europe?) + + + bigrunu + Big Run (11th Rallye version, US?) bigstrik @@ -5654,14 +7191,30 @@ bijokkoy Bijokko Yume Monogatari (Japan 870925) + + bikerace + Bike Race + + + bikerace2 + Bike Race (2-ball play) + bikiniko BiKiNikko - Okinawa de Ippai Shichaimashita (Japan) + + bikkuri + Bikkuri Pro Wrestling (Japan 881221, Ver 1.05) + bikkuric Bikkuri Card (Japan) + + biliard + New Biliard 98 (Pool 10 hack) + billiard The Billiards (Video Hustler bootleg) @@ -5678,10 +7231,22 @@ bingo Bingo + + bingo75 + Bingo 75 + bingoc Bingo Circus (Rev. A 891001) + + bingogal + Bingo Galaxy (main) + + + bingogals + Bingo Galaxy (satellite) + bingoman Bingo Mania (P03-P07-P14) @@ -5710,6 +7275,14 @@ bingor5 Bingo Roll / Bell Star V3? (set 5) + + bingor6 + Bingo Roll / Turbo Bingo? + + + bingowav + Bingo Wave + bingowng Bingo (set 1) @@ -5718,21 +7291,33 @@ bingownga Bingo (set 2) + + bingpty + Bingo Party Multicart (Rev B) (M1 Satellite board) + bioatack Bio Attack biofreak - BioFreaks (prototype) + Bio F.R.E.A.K.S (prototype, boot ROM 0.1i) biomtoy - Biomechanical Toy (Ver. 1.0.1885) + Biomechanical Toy (ver. 1.0.1885, checksum 69f5e032) biomtoya - Biomechanical Toy (Ver. 1.0.1884) + Biomechanical Toy (ver. 1.0.1884, checksum 3f316c70) + + + biomtoyb + Biomechanical Toy (ver. 1.0.1878, checksum d84b28ff) + + + biomtoyc + Biomechanical Toy (ver. 1.0.1870, checksum ba682195) bionicc @@ -5746,10 +7331,26 @@ bionicc2 Bionic Commando (US set 2) + + bioniccbl + Bionic Commandos (bootleg, set 1) + + + bioniccbl2 + Bionic Commandos (bootleg, set 2) + + + bioplayc + Bioplaything Cop (ver. 1.0.1823, checksum cd960fc9, prototype) + bioship Bio-ship Paladin + + biplane + Biplane [TTL] + biplane4 Biplane 4 [TTL] @@ -5760,7 +7361,11 @@ birdtry - Birdie Try (Japan) + Birdie Try (Japan revision 2, revision 1 MCU) + + + birdtrya + Birdie Try (Japan revision 2) bishi @@ -5768,11 +7373,15 @@ bishjan - Bishou Jan (Japan, Ver. 2.03) + Bishou Jan (Japan, Ver. 203) bjourney - Blue's Journey / Raguy (ALM-001)(ALH-001) + Blue's Journey / Raguy (ALM-001 ~ ALH-001) + + + bjourneyh + Blue's Journey / Raguy (ALH-001) bjpoker @@ -5788,12 +7397,20 @@ bjtwinp - Bombjack Twin (prototype? with adult pictures) + Bombjack Twin (prototype? with adult pictures, set 1) + + + bjtwinpa + Bombjack Twin (prototype? with adult pictures, set 2) bk2k_l4 Black Knight 2000 (L-4) + + bk2k_la2 + Black Knight 2000 (LA-2) + bk2k_lg1 Black Knight 2000 (LG-1) @@ -5802,10 +7419,26 @@ bk2k_lg3 Black Knight 2000 (LG-3) + + bk2k_pa5 + Black Knight 2000 (PA-5) + + + bk2k_pa7 + Black Knight 2000 (PA-7) + + + bk2k_pf1 + Black Knight 2000 (PF-1) + bk2k_pu1 Black Knight 2000 (PU-1) + + bk3ssrmb + Bare Knuckle III / Sunset Riders (bootleg of Mega Drive versions) + bk_f4 Black Knight (L-4, French speech) @@ -5834,6 +7467,10 @@ bkrtmaq Bakuretsu Quiz Ma-Q Dai Bouken (Japan) + + bktigerb + Black Tiger (bootleg) + black Czernyj Korabl (Arcade bootleg of ZX Spectrum 'Blackbeard') @@ -5862,25 +7499,41 @@ blackblt Black Belt + + blackblt2 + Black Belt (Squawk and Talk) + + + blackhol + Black Hole (EFG Sanremo) + blackjck Black Jack (Pinball) + + blackpnt + Black Panther (0200818V, Victoria) + blackt96 Black Touch '96 bladestl - Blades of Steel (version T) + Blades of Steel (version T, Joystick) bladestle - Blades of Steel (version E) + Blades of Steel (version E, Trackball) bladestll - Blades of Steel (version L) + Blades of Steel (version L, Trackball) + + + bladstle + Blades of Steel (version E) blakpyra @@ -5910,6 +7563,10 @@ blastero Blaster (location test) + + blastkit + Blaster (kit) + blasto Blasto @@ -5920,6 +7577,10 @@ blazeon + Blaze On (World) + + + blazeonj Blaze On (Japan) @@ -5928,16 +7589,24 @@ blazlaz - Blazing Lazers + Blazing Lazers (United Amusements PC Engine) blazstar Blazing Star + + blazstarcm + Blazing Star (Stage Select Hack) + blbeauty Black Beauty (Shuffle) + + blckgalb + Block Gal (bootleg) + blckhole Black Hole (Rev. 4) @@ -5954,6 +7623,14 @@ blckjack Black Jack + + blckout2 + Block Out (set 2) + + + blckoutj + Block Out (Japan) + bldwolf Bloody Wolf (US) @@ -5968,7 +7645,11 @@ bldyroar - Bloody Roar (Japan) + Bloody Roar (Japan, Jun 21 1997) + + + bldyrolr + Bloody Roller bldyror2 @@ -5988,24 +7669,32 @@ blitz - NFL Blitz (boot ROM 1.2) - - - blitz11 - NFL Blitz (boot ROM 1.1) + NFL Blitz (ver 1.21, Dec 5 1987) blitz2k - NFL Blitz 2000 Gold Edition + NFL Blitz 2000 Gold Edition (ver 1.2, Sep 22 1999) blitz99 - NFL Blitz '99 + NFL Blitz '99 (ver 1.30, Sep 22 1998) + + + blitz99a + NFL Blitz '99 (ver 1.2, Aug 28 1998) + + + blkbrum + Black Brumby (1J009111, NSW/ACT) blkbustr BlockBuster + + blkdrgnb + Black Dragon (bootleg) + blkdrgon Black Dragon (Japan) @@ -6018,6 +7707,10 @@ blkfever Black Fever + + blkhearj + Black Heart (Japan) + blkheart Black Heart @@ -6030,6 +7723,10 @@ blkhole Black Hole + + blkmust + Black Mustang (0152584, US) + blkou_f1 Blackout (L-1, French Speech) @@ -6050,10 +7747,18 @@ blkrhino Black Rhino (3VXFC5344, New Zealand) + + blkrose + Black Rose Rapid Fire Grand Prix (Konami Endeavour, Queensland) + blkshpsq Black Sheep Squadron + + blktch2 + Black Touch II (Korea) + blktiger Black Tiger @@ -6070,26 +7775,42 @@ blktigerb2 Black Tiger (bootleg set 2) + + blktigerb3 + Black Tiger / Black Dragon (mixed bootleg?) + + + blktigerm + Black Tiger (Modular System) + blktouch Black Touch (Korea) blmbycar - Blomby Car + Blomby Car (Version 1P0) blmbycaru + Blomby Car (Version 1P0, not encrypted) + + + blmbycau Blomby Car (not encrypted) block - Block Block (World 910910) + Block Block (World 911219 Joystick) block2 Block 2 (S.P.A. Co. bootleg) + + blocka + Block Block (World 910910) + blockade Blockade @@ -6106,6 +7827,10 @@ blockcarb Block Carnival / Thunder & Lightning 2 (bootleg) + + blockch + G.T. Block Challenger + blocken Blocken (Japan) @@ -6126,10 +7851,6 @@ blockj Block Block (Japan 910910) - - blockjoy - Block Block (World 911106 Joystick) - blockout Block Out (set 1) @@ -6138,21 +7859,65 @@ blockout2 Block Out (set 2) + + blockout3 + Block Out (Europe and Oceania) + blockoutj Block Out (Japan) + + blockr1 + Block Block (World 911106 Joystick) + + + blockr2 + Block Block (World 910910) + + + blocktax + Blockout (TAX) + + + blokpong + Block Pong-Pong + bloodbro - Blood Bros. (set 1) + Blood Bros. (World?) + + + bloodbroj + Blood Bros. (Japan, rev A) + + + bloodbroja + Blood Bros. (Japan) + + + bloodbrok + Blood Bros. (Korea) + + + bloodbrom + Blood Bros. (Modular System) + + + bloodbrou + Blood Bros. (US) + + + bloods11 + Blood Storm (v1.10) - bloodbroa - Blood Bros. (set 2) + bloods21 + Blood Storm (v2.10) - bloodbrob - Blood Bros. (set 3) + bloods22 + Blood Storm (v2.20) bloodstm @@ -6180,23 +7945,63 @@ bloto - Blits Loto (Russia) (Extrema) + Blits Loto (Ukraine, V. 30.16) + + + blotoa + Blits Loto (Ukraine, V. 30.08) + + + blox16b + Bloxeed (System 16B, PS2 data file) bloxeed - Bloxeed (Japan, FD1094 317-0139) + Bloxeed (Japan) (FD1094 317-0139) bloxeedc Bloxeed (World, C System) + + bloxeedd + Bloxeed (Japan) (bootleg of FD1094 317-0139 set) + bloxeedu - Bloxeed (US, C System) + Bloxeed (US, C System, Rev A) blpearl - Black Pearl (Russia) (Extrema) + Black Pearl (Ukraine, V. 45.02) + + + blpearla + Black Pearl (Ukraine, V. 43.07) + + + blpearlb + Black Pearl (Ukraine, V. 43.04) + + + blpearlc + Black Pearl (Ukraine, V. 42.03) + + + blpearld + Black Pearl (Ukraine, V. 42.01) + + + blsthead + Blasteroids (with heads) + + + blstroi2 + Blasteroids (rev 2) + + + blstroi3 + Blasteroids (rev 3) blstroid @@ -6218,9 +8023,17 @@ blstroidh Blasteroids (with heads) + + blstroig + Blasteroids (German, rev 2) + blswhstl - Bells & Whistles (Version L) + Bells & Whistles (World, version L) + + + blswhstla + Bells & Whistles (Asia, version M) bluehawk @@ -6228,8 +8041,16 @@ bluehawkn + Blue Hawk (Japan, NTC license) + + + bluehawn Blue Hawk (NTC) + + blueprnj + Blue Print (Jaleco) + blueprnt Blue Print (Midway) @@ -6242,6 +8063,18 @@ blueshrk Blue Shark + + blueshrkmr + Blue Shark (Model Racing bootleg, set 1) + + + blueshrkmr2 + Blue Shark (Model Racing bootleg, set 2) + + + bluetigr + Blue Tiger (20259511, NSW/ACT) + blvelvet Black Velvet @@ -6262,10 +8095,22 @@ bm2ndmxa beatmania 2nd MIX (ver JA-A) + + bm3 + Beatmania III + + + bm36th + Beatmania III Append 6th Mix + bm37th Beatmania III Append 7th Mix + + bm3core + Beatmania III Append Core Remix + bm3final Beatmania III The Final @@ -6294,6 +8139,10 @@ bmaster Blade Master (World) + + bmbugs + Bumble Bugs (0351180, US) + bmcbowl Konkyuu no Hoshi @@ -6302,6 +8151,10 @@ bmclubmx beatmania Club MIX (ver JA-A) + + bmcmxaac + beatmania complete MIX (ver AA-C) + bmcompm2 beatmania complete MIX 2 (ver JA-A) @@ -6316,7 +8169,7 @@ bmcpokr - unknown BMC poker game + Dongfang Shenlong bmdct @@ -6398,6 +8251,10 @@ bmiidx3a beatmania IIDX 3rd style (GC992 JAA) + + bmiidx3b + beatmania IIDX 3rd style (GC992 JAB) + bmiidx4 beatmania IIDX 4th style (GCA03 JAA) @@ -6416,6 +8273,10 @@ bmiidx7 + beatmania IIDX 7th style (GCB44 JAB) + + + bmiidx7a beatmania IIDX 7th style (GCB44 JAA) @@ -6432,7 +8293,7 @@ bmiidxc2 - Beatmania IIDX Substream with DDR 2nd Club Version 2 (984 A01 BM) + beatmania IIDX Substream with DDR 2nd Club Version 2 (984 A01 BM) bmiidxca @@ -6442,6 +8303,10 @@ bmiidxs beatmania IIDX Substream (983 JAA) + + bmiidxsa + beatmania IIDX Substream (983-AA JAA) + bmx BMX @@ -6450,6 +8315,10 @@ bnglngby Vs. Raid on Bungeling Bay (RD4-2 B) + + bngotime + Bingo Time + bnj Bump 'n' Jump @@ -6460,7 +8329,7 @@ bnstars - Vs. Janshi Brandnew Stars (MegaSystem32 Version) + Vs. Janshi Brandnew Stars (Ver 1.1, MegaSystem32 Version) bnstars1 @@ -6494,13 +8363,21 @@ bnzai_pa Banzai Run (P-A) + + boatrace + Exciting Boat Race + + + bobdolly + Bob and Dolly (0352298, US) + boblbobl - Bobble Bobble (set 1) + Bobble Bobble (bootleg of Bubble Bobble) - boblbobl2 - Bobble Bobble (set 2) + boblcave + Bubble Bobble: Lost Cave V1.2 (for Bobble Bobble PCB) bodyslam @@ -6516,7 +8393,15 @@ boggy84b - Boggy '84 (bootleg) + Boggy '84 (bootleg, set 1) + + + boggy84b2 + Boggy '84 (bootleg, set 2) + + + bombaway + Bombs Away [TTL] bombbee @@ -6526,6 +8411,10 @@ bomber Bomber (bootleg of Scramble) + + bombjac2 + Bomb Jack (set 2) + bombjack Bomb Jack (set 1) @@ -6556,7 +8445,7 @@ bombsa - Bombs Away + Bombs Away (prototype) bonanza @@ -6570,6 +8459,14 @@ bonebstr Bone Busters Inc. + + bonebstrf + Bone Busters Inc. (French) + + + bonebstrg + Bone Busters Inc. (German) + bongo Bongo @@ -6578,13 +8475,25 @@ bonkadv B.C. Kid / Bonk's Adventure / Kyukyoku!! PC Genjin + + bonusch + Bonus Chance (W-8) + bonuscrd - Bonus Card (Austrian) + Bonus Card (German) bonuscrda - Bonus Card (Austrian, ATG Electronic hack) + Bonus Card (German, ATG Electronic hack) + + + bonuspkr + Bonus Poker + + + bonzeadu + Bonze Adventure (US) bonzeadv @@ -6594,6 +8503,10 @@ bonzeadvo Bonze Adventure (World, Older) + + bonzeadvp + Bonze Adventure (World, prototype) + bonzeadvu Bonze Adventure (US) @@ -6610,6 +8523,10 @@ boogwinga Boogie Wings (Asia v1.5, 92.12.07) + + boogwingu + Boogie Wings (USA v1.7, 92.12.14) + bookra Book Of Ra (set 1) @@ -6632,12 +8549,32 @@ bootcamp - Boot Camp + Boot Camp (set 1) + + + bootcampa + Boot Camp (set 2) boothill Boot Hill + + bootsctn + Boot Scootin' (0100812V, NSW/ACT) + + + bootsctnu + Boot Scootin' (GHG1012-02, US) + + + bootsctnua + Boot Scootin' (GHG1008-03, US) + + + bootsctnub + Boot Scootin' (AHG1547, US) + bop_l2 The Machine: Bride of Pinbot (L-2) @@ -6664,34 +8601,54 @@ borench - Borench + Borench (set 1) + + + borencha + Borench (set 2) + + + borenchj + Borench (Japan) borntofi Born To Fight + + borntofiv + Born To Fight (Vifico license) + bosco - Bosconian (new version) + Bosconian - Star Destroyer (new version) boscomd - Bosconian (Midway, new version) + Bosconian - Star Destroyer (Midway, new version) boscomdo - Bosconian (Midway, old version) + Bosconian - Star Destroyer (Midway, old version) boscoo - Bosconian (old version) + Bosconian - Star Destroyer (old version) boscoo2 - Bosconian (older version) + Bosconian - Star Destroyer (older version) botanic + Botanic (English / Spanish) + + + botanic2 + Botanic (English / Spanish, Bagman conversion) + + + botanicf Botanic (French) @@ -6726,17 +8683,33 @@ bouldashj Boulder Dash / Boulder Dash Part 2 (Japan) + + bouldshj + Boulder Dash - Boulder Dash Part 2 (Japan) + bounty - The Bounty + The Bounty (set 1) + + + bounty2 + The Bounty (set 2) bountyh Bounty Hunter + + bountyhg + Bounty Hunter (German) + bowarrow - Bow & Arrow (Prototype) + Bow & Arrow (Prototype, rev. 23) + + + bowarrowa + Bow & Arrow (Prototype, rev. 22) bowl3d @@ -6748,11 +8721,23 @@ bowlrama - Bowl-O-Rama + Bowl-O-Rama Rev 1.0 + + + bowlroad + Bowling Road (Ver 1.5) + + + bowlroad14 + Bowling Road (Ver 1.4) + + + bowlroad14n + Bowling Road (Ver 1.4, ND2001 hardware) bowltry - Bowling Try + Bowling Try! boxer @@ -6764,12 +8749,24 @@ boxingm - Boxing Mania (ver JAA) + Boxing Mania: Ashita no Joe (ver JAA) boxyboy + Boxy Boy (World, SB2) + + + boxyboya Boxy Boy (SB?) + + bparty + Bachelorette Party (BHG1248, US) + + + bpartya + Bachelorette Party (BHG1579, US) + bpoker Video Poker (v1403) @@ -6807,7 +8804,15 @@ B.Rap Boys Special (Japan) - brapboysu + brapboysp + B.Rap Boys Special (World) + + + brapboyspj + B.Rap Boys Special (Japan) + + + brapboyspu B.Rap Boys Special (US) @@ -6836,7 +8841,11 @@ braveff - Brave Fire Fighters + Brave Firefighters + + + brazil + Brazil (20180311, NSW/ACT) brdrlinb @@ -6848,7 +8857,7 @@ brdrlinet - Borderline (Tranquilizer Gun conversion) + Borderline (Tranquillizer Gun conversion) brdrlins @@ -6862,30 +8871,50 @@ breakers Breakers + + breakout + Breakout [TTL] + breakrev Breakers Revenge + + breakrevbh + Breakers Revenge (Boss Hack) + breywood Breywood (Japan revision 2) + + brickppl + Brick People / Block PeePoo (Ver 1.002) + brickyrd Brickyard brickzn - Brick Zone (v5.0, Joystick) + Brick Zone (v6.0, Joystick) brickzn11 - Brick Zone (v1.1) + Brick Zone (v1.1, Spinner) + + + brickzn3 + Brick Zone (v3.0) brickznv4 Brick Zone (v4.0, Spinner) + + brickznv5 + Brick Zone (v5.0, Joystick) + brival Burning Rival (World) @@ -6902,6 +8931,18 @@ brixian Brixian + + brkball + Break Ball + + + brkblast + Brick Blast (bootleg of Wall Crash) + + + brkrevext + Breakers Revenge - Extra Mode (Hack) + brkthru Break Thru (US) @@ -6910,6 +8951,10 @@ brkthruj Kyohkoh-Toppa (Japan) + + brkthrut + Break Thru (Tecfri license) + brod Brodjaga (Arcade bootleg of ZX Spectrum 'Inspector Gadget and the Circus of Fear') @@ -6958,6 +9003,10 @@ brvteam Brave Team + + bs4thmix + beatstage 4th MIX (ver KA-A) + bs94 Buena Suerte '94 @@ -6966,6 +9015,10 @@ bsb105 Breakshot (Beta) + + bsebman + Bomberman (Version 6.6) + bshark Battle Shark (World) @@ -6984,7 +9037,11 @@ bsktball - Basketball + Atari Basketball + + + bsktbllp + Basket Ball bsplash @@ -7072,7 +9129,7 @@ bsuerten - Buena Suerte (Spanish, set 15) + Buena Suerte (Spanish, set 15, Prodel PCB) bsuerteo @@ -7102,17 +9159,25 @@ bsuerteu Buena Suerte (Spanish, set 22) + + bsuertev + Buena Suerte (Spanish/Portuguese, set 23) + bsv100r Breakshot (Redemption 1.0) + + bsv102 + Breakshot (1.2) + bsv102r Breakshot (Redemption 1.2) bsv103 - Breakshot + Breakshot (1.3) btchamp @@ -7136,7 +9201,7 @@ btippers - Big Tippers (Russia) + Big Tippers (Russian) btlecity @@ -7154,50 +9219,74 @@ btlkroad Battle K-Road + + btlkroadk + Battle K-Road (Korea) + btltryst Battle Tryst (ver JAC) btmn_101 - Batman (1.01) + Batman (USA 1.01, display A1.02) btmn_103 - Batman (1.03) + Batman (USA 1.03, display A1.02) - btmn_106 - Batman (1.06) + btmn_103f + Batman (France 1.03, display F1.03) - btmn_g13 - Batman (1.03 Germany) + btmn_103g + Batman (Germany 1.03, display G1.04) + + + btmn_106 + Batman (USA 1.06, display A1.02) btoads Battletoads + + btorneo + Bubble Torneo + bttf_a20 - Back To the Future (2.0) + Back to the Future - The Pinball (2.0) bttf_a21 - Back To The Future (2.1) + Back to the Future - The Pinball (2.1) bttf_a27 - Back To the Future (2.7) + Back to the Future - The Pinball (2.7) + + + bttf_a28 + Back to the Future - The Pinball (2.8) bttf_g27 - Back To the Future (2.7 Germany) + Back to the Future - The Pinball (2.7, Germany) bub68705 Bubble Bobble (bootleg with 68705) + + bub68705a + Bubble Bobble (boolteg with 68705, set 2) + + + bub8749 + Bubble Bobble (bootleg of Japan Ver 0.0 with 8749) + bubblem Bubble Memories: The Story Of Bubble Bobble III (Ver 2.4O 1996/02/15) @@ -7206,6 +9295,10 @@ bubblemj Bubble Memories: The Story Of Bubble Bobble III (Ver 2.3J 1996/02/07) + + bubblemu + Bubble Memories: The Story Of Bubble Bobble III (Ver 2.5A 1996/02/21) + bubbles Bubbles @@ -7220,14 +9313,34 @@ bubbletr - Bubble Trouble (Japan, Rev C) + Bubble Trouble - Golly Ghost 2 (World, Rev B) + + + bubbletrj + Bubble Trouble - Golly Ghost 2 (Japan, Rev C) + + + bubbobr1 + Bubble Bobble (US) bubl2000 Bubble 2000 + + bubl2000a + Bubble 2000 V1.2 + + + bublbob1 + Bubble Bobble (older) + bublbob2 + Bubble Bobble II (Ver 2.6O 1994/12/16) + + + bublbob2o Bubble Bobble II (Ver 2.5O 1994/10/05) @@ -7242,6 +9355,14 @@ bublbobl1 Bubble Bobble (Japan, Ver 0.0) + + bublboblb + Bubble Bobble (for Bobble Bobble PCB) + + + bublboblp + Bubble Bobble (prototype on Tokio hardware) + bublboblr Bubble Bobble (US, Ver 5.1) @@ -7250,14 +9371,50 @@ bublboblr1 Bubble Bobble (US, Ver 1.0) + + bublboblu + Bubble Bobble (Ultra Version, Hack) + + + bublbobr + Bubble Bobble (US with mode select) + + + bublbust + Bubble Buster (USA, B-System) + + + bublcave + Bubble Bobble: Lost Cave V1.2 + + + bublcave10 + Bubble Bobble: Lost Cave V1.0 + + + bublcave11 + Bubble Bobble: Lost Cave V1.1 + bublpong Bubble Pong Pong + + bubsympe + Bubble Symphony (Europe) + + + bubsymph + Bubble Symphony (Japan) + bubsymphb Bubble Symphony (bootleg with OKI6295) + + bubsymphba + Seoul Symphony (Bubble Symphony bootleg with OKI6295) + bubsymphe Bubble Symphony (Ver 2.5O 1994/10/05) @@ -7271,12 +9428,24 @@ Bubble Symphony (Ver 2.5A 1994/10/05) - bubsys - Bubble System BIOS + bubsympu + Bubble Symphony (US) + + + bucaneer + Buccaneer (Aristocrat, 10173011, NSW/ACT) + + + bucaneeru + Buccaneer (Aristocrat, 0252523, US) bucaner - Buccaneer + Buccaneer (set 1) + + + bucanera + Buccaneer (set 2) buccanrs @@ -7286,6 +9455,10 @@ buccanrsa Buccaneers (set 2) + + buccanrsb + Buccaneers (set 3, harder) + buckrgrs Buck Rogers @@ -7302,10 +9475,18 @@ buckrogn2 Buck Rogers: Planet of Zoom (not encrypted, set 2) + + buckstop + The Buck Stops Here (10294311, NSW/ACT) + bucky Bucky O'Hare (ver EAB) + + buckyaa + Bucky O'Hare (ver AA) + buckyaab Bucky O'Hare (ver AAB) @@ -7314,10 +9495,26 @@ buckyea Bucky O'Hare (ver EA) + + buckyjaa + Bucky O'Hare (ver JAA) + + + buckyua + Bucky O'Hare (US version UA) + buckyuab Bucky O'Hare (ver UAB) + + buffalo + Buffalo (10217811, NSW/ACT) + + + buffalou + Buffalo (0252636, US) + bugfever Bugs Fever (Version 1.7R CGA) @@ -7340,7 +9537,11 @@ buggyboy - Buggy Boy/Speed Buggy (cockpit) + Buggy Boy/Speed Buggy (cockpit, rev. D) + + + buggyboyb + Buggy Boy/Speed Buggy (cockpit, rev. B) buggyboyjr @@ -7354,14 +9555,22 @@ buggychlt Buggy Challenge (Tecfri) + + buggycht + Buggy Challenge (Tecfri) + bujutsu - Fighting Bujutsu + Fighting Wu-Shu 2nd! (ver JAA) bullet Bullet (FD1094 317-0041) + + bulletd + Bullet (bootleg of FD1094 317-0041 set) + bullfgt Bullfight (315-5065) @@ -7384,7 +9593,27 @@ bullseye - 301/Bullseye + 301/Bullseye (301 Darts Scoring) + + + bullseyn + 301/Bullseye (Traditional Scoring) + + + bumblbug + Bumble Bugs (0200510V, NSW/ACT) + + + bumblbugql + Bumble Bugs (0200456V, Queensland) + + + bumblbugu + Bumble Bugs (CHG0479-03, US) + + + bumblbugua + Bumble Bugs (CHG0479-99, US) bungeem @@ -7398,6 +9627,10 @@ buraiken Hissatsu Buraiken (Japan) + + buraikenb + Hissatsu Buraiken (Japan, bootleg?) + burglarx Burglar X @@ -7416,15 +9649,27 @@ burningf - Burning Fight (NGM-018)(NGH-018) + Burning Fight (NGM-018 ~ NGH-018) burningfh - Burning Fight (NGH-018)(US) + Burning Fight (NGH-018, US) burningfp - Burning Fight (prototype) + Burning Fight (prototype, older) + + + burningfpa + Burning Fight (prototype, near final, ver 23.3, 910326) + + + burningfpb + Burning Fight (prototype, newer, V07) + + + burningh + Burning Fight (set 2) bushido @@ -7434,6 +9679,14 @@ bushidoa Bushido (set 2) + + bushidob + Bushido (set 3) + + + bushrngr + Bushranger (10006111, NSW/ACT) + buster Buster @@ -7450,6 +9703,14 @@ butrfly Butterfly Video Game (version U350C) + + buttdeli + Butterfly Delight (0200143V, NSW/ACT) + + + buttobi + Buttobi Striker + buzzard Buzzard @@ -7466,6 +9727,14 @@ bwidow Black Widow + + bwidowp + Black Widow (prototype) + + + bwing + B-Wings (Japan) + bwings B-Wings (Japan new Ver.) @@ -7480,12 +9749,16 @@ bygone - Bygone + Bygone (prototype) bzone Battle Zone (rev 2) + + bzone2 + Battle Zone (set 2) + bzonea Battle Zone (rev 1) @@ -7512,11 +9785,11 @@ cabal - Cabal (World, Joystick version) + Cabal (World, Joystick) cabala - Cabal (Alpha Trading) + Cabal (Korea?, Joystick) cabalbl @@ -7526,17 +9799,29 @@ cabalbl2 Cabal (bootleg of Joystick version, set 2) + + cabalng + Cabal (Neo-Geo Conversion) + + + cabaluk + Cabal (UK, Trackball) + + + cabalukj + Cabal (UK, Joystick) + cabalus - Cabal (US set 1, Trackball version) + Cabal (US set 1, Trackball) cabalus2 - Cabal (US set 2, Trackball version) + Cabal (US set 2, Trackball) cabaret - Cabaret + Cabaret Show cachat @@ -7550,9 +9835,13 @@ cactus Cactus (bootleg of Saboten Bombers) + + cactusco + Cactus Corral (10237711, NSW/ACT) + cadanglr - Angler Dangler (DECO Cassette) + Angler Dangler (DECO Cassette) (US) cadash @@ -7564,6 +9853,10 @@ cadashg + Cadash (Germany, version 1) + + + cadashgo Cadash (Germany) @@ -7572,15 +9865,31 @@ cadashj - Cadash (Japan) + Cadash (Japan, version 2) + + + cadashj1 + Cadash (Japan, version 1) + + + cadashjo + Cadash (Japan, oldest version) cadashp Cadash (World, prototype) + + cadashs + Cadash (Spain, version 1) + cadashu - Cadash (US) + Cadash (US, version 2) + + + cadashu1 + Cadash (US, version 1?) cafebrk @@ -7590,6 +9899,10 @@ cafedoll Mahjong Cafe Doll (Japan) + + cafepara + Mahjong Cafe Paradise + cafetime Mahjong Cafe Time @@ -7602,14 +9915,22 @@ calchase California Chase + + calcune + Calcune (Japan, prototype) + calibr50 - Caliber 50 + Caliber 50 (Ver. 1.01) calipso Calipso + + callwld + Call of the Wild (10256611, NSW/ACT) + calorie Calorie Kun vs Moguranian @@ -7620,11 +9941,23 @@ calspeed - California Speed (Version 2.1a, 4/17/98) + California Speed (Version 2.1a Apr 17 1998, GUTS 1.25 Apr 17 1998 / MAIN Apr 17 1998) calspeeda - California Speed (Version 1.0r7a 3/4/98) + California Speed (Version 1.0r8 Mar 10 1998, GUTS Mar 10 1998 / MAIN Mar 10 1998) + + + calspeedb + California Speed (Version 1.0r7a Mar 4 1998, GUTS Mar 3 1998 / MAIN Jan 19 1998) + + + calyking + Calypso King (20197111, NSW/ACT) + + + cameltrj + Cameltry (Japan) cameltry @@ -7646,6 +9979,14 @@ camlight Camel Lights + + camltrua + Cameltry (US, alt sound) + + + canaryrc + Canary Riches (10218211, NSW/ACT) + canasta Canasta '86' @@ -7654,10 +9995,18 @@ candance Cannon Dancer (Japan) + + candory + Candory (Ponpoko bootleg with Mario) + candy Candy Candy + + cane + Cane (prototype) + cannball Cannon Ball (Yun Sung, horizontal) @@ -7682,6 +10031,10 @@ cannonbp Cannon Ball (Pac-Man Hardware) + + canrose + Canyon Rose (AHG1463, US) + canvas Canvas Croquis @@ -7718,17 +10071,21 @@ capitol Capitol + + caprcyc + Capriccio Cyclone + capsnk - Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev C) + Capcom Vs. SNK: Millennium Fight 2000 (Rev C) capsnka - Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) (Rev A) + Capcom Vs. SNK: Millennium Fight 2000 (Rev A) capsnkb - Capcom Vs. SNK Millennium Fight 2000 (JPN, USA, EXP, KOR, AUS) + Capcom Vs. SNK: Millennium Fight 2000 captaven @@ -7758,6 +10115,30 @@ captavenuu Captain America and The Avengers (US Rev 1.6) + + captavna + Captain America and The Avengers (Asia Rev 1.0) + + + captavne + Captain America and The Avengers (UK Rev 1.4) + + + captavnj + Captain America and The Avengers (Japan Rev 0.2) + + + captavnu + Captain America and The Avengers (US Rev 1.9) + + + captavuu + Captain America and The Avengers (US Rev 1.6) + + + captcomj + Captain Commando (Japan 911202) + captcomm Captain Commando (World 911202) @@ -7766,6 +10147,14 @@ captcommb Captain Commando (bootleg) + + captcommb2 + Captain Commando (bootleg with 2xMSM5205) + + + captcommb3 + Captain Commando (bootleg set 3 (with YM2151 + 2xMSM5205), 911014 other country) + captcommj Captain Commando (Japan 911202) @@ -7774,17 +10163,33 @@ captcommjr1 Captain Commando (Japan 910928) + + captcommp4 + Captain Commando (Enhanced edition 1 V 4, Hack) + captcommr1 Captain Commando (World 911014) + + captcommr1pwx + Captain Commando (Unlimited Bullet) + captcommu Captain Commando (USA 910928) + + captcomu + Captain Commando (US 910928) + + + captflag + Captain Flag (Japan) + capunc - Capitan Uncino (Ver 1.2) + Capitan Uncino (Nazionale Elettronica, Ver 1.2) car2 @@ -7810,6 +10215,10 @@ cardline Card Line + + carhntds + Car Hunt / Deep Scan (France) + carhop Car Hop @@ -7832,12 +10241,20 @@ carnival - Carnival (upright) + Carnival (upright, AY8912 music) + + + carnivalb + Carnival (upright, PIT8253 music) carnivalc Carnival (cocktail) + + carnivalca + Carnival (cocktail, earlier) + carnivalh Carnival (Head On hardware, set 1) @@ -7850,6 +10267,10 @@ carnking Carnival King (v1.00.11) + + carnvckt + Carnival (cocktail) + carpolo Car Polo @@ -7860,7 +10281,11 @@ cartfury - Cart Fury + CART Fury Championship Racing (ver 1.00) + + + cas21iwc + Casino 21 UCMC/IWC (ver 30.08) casanova @@ -7878,9 +10303,45 @@ cashcade Cashcade (JPM) (SYSTEM5 VIDEO) + + cashcat + Cash Cat (0100676V, NSW/ACT) + + + cashcata + Cash Cat (0100557V, NSW/ACT) + + + cashcatnz + Cash Cat (0300863V, New Zealand) + + + cashcham + Cash Chameleon (0100438V, NSW/ACT) + + + cashchama + Cash Chameleon (0200437V, NSW/ACT) + + + cashchamnz + Cash Chameleon (0300781V, New Zealand) + + + cashchamu + Cash Chameleon (DHG4078-99, US) + + + cashcra5 + Cash Crop (0300467V, NSW/ACT) + + + cashcra5a + Cash Crop (0300447V, NSW/ACT) + cashcrop - Cash Crop (Russia) + Cash Crop (Russian) cashquiz @@ -7892,12 +10353,28 @@ casino5 + Casino Five (3315-02, U5-2B) + + + casino5a Casino Five (3315-02, U5-0) + + casino5b + Casino Five (3315-12, U5-0) + caspoker + Casino Poker (Ver PM88-01-21, German) + + + caspokera Casino Poker (Ver PM86LO-35-5, German) + + caspokerb + Casino Poker (Ver PM86-35-1, German) + castaway Castaway (Russia) (Atronic) (set 1) @@ -7908,7 +10385,7 @@ castfant - Astro Fantasia (DECO Cassette) + Astro Fantasia (DECO Cassette) (US) castfpt @@ -7948,11 +10425,11 @@ catnmous - Cat and Mouse (set 1) + Cat and Mouse (type 02 program) catnmousa - Cat and Mouse (set 2) + Cat and Mouse (type 01 program) catt @@ -7976,15 +10453,15 @@ cavnegro - Cavaleiro Negro + Cavaleiro Negro (set 1) cavnegro1 - Cavaleiro Negro (alternate set 1) + Cavaleiro Negro (set 2) cavnegro2 - Cavaleiro Negro (alternate set 2) + Cavaleiro Negro (set 3) cawing @@ -7992,11 +10469,11 @@ cawingb2 - Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM205 set 2) + Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM5205, set 2) cawingbl - Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM205 set 1) + Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM5205, set 1) cawingj @@ -8008,6 +10485,10 @@ cawingu + Carrier Air Wing (USA 901130) + + + cawingur1 Carrier Air Wing (USA 901012) @@ -8038,9 +10519,13 @@ cb3e Cherry Bonus III (set 4, encrypted bootleg) + + cb3f + Cherry Bonus III (set 5, encrypted bootleg) + cbaj - Cool Boarders Arcade Jam + Cool Boarders Arcade Jam (Export) cball @@ -8052,11 +10537,11 @@ cbdash - Boulder Dash (DECO Cassette) + Boulder Dash (DECO Cassette) (US) cbnj - Bump 'n' Jump (DECO Cassette) + Bump 'n' Jump (DECO Cassette) (US) cbombers @@ -8072,15 +10557,27 @@ cbtime - Burger Time (DECO Cassette) + Burger Time (DECO Cassette) (US) + + + cbully + Coche Bully + + + cburnrb2 + Cassette: Burnin' Rubber (set 2) cburnrub - Burnin' Rubber (DECO Cassette, set 1) + Burnin' Rubber (DECO Cassette) (US) (set 1) cburnrub2 - Burnin' Rubber (DECO Cassette, set 2) + Burnin' Rubber (DECO Cassette) (US) (set 2) + + + cburnrubj + Burnin' Rubber (DECO Cassette) (Japan) cbuster @@ -8088,12 +10585,20 @@ cbusterj - Crude Buster (Japan) + Crude Buster (Japan FR revision 1) cbusterw Crude Buster (World FU version) + + cc_10 + Cactus Canyon (1.0) + + + cc_104 + Cactus Canyon (1.04 Test 0.2) + cc_12 Cactus Canyon (1.2) @@ -8106,6 +10611,18 @@ ccasino Chinese Casino [BET] (Japan) + + ccastle2 + Crystal Castles (version 2) + + + ccastle3 + Crystal Castles (version 3) + + + ccastlej + Crystal Castles (joystick version) + ccastles Crystal Castles (version 4) @@ -8154,6 +10671,10 @@ ccclass Country Club Classic (v1.10 03-apr-1997) + + ccfboxa + Chihiro Firmware Update For Compact Flash Box (4.01) (GDX-0024A) + cchance Cherry Chance @@ -8168,7 +10689,11 @@ cclimber - Crazy Climber (US) + Crazy Climber (US set 1) + + + cclimbera + Crazy Climber (US set 2) cclimberj @@ -8182,45 +10707,81 @@ cclimbr2a Crazy Climber 2 (Japan, Harder) + + cclimbrj + Crazy Climber (Japan) + cclimbroper Crazy Climber (Spanish, Operamatic bootleg) + + cclimbrrod + Crazy Climber (Spanish, Rodmar bootleg) + cclownz Crazzy Clownz (Version 1.0) + + ccorsario + Corsarios (Cirsa slot machine) + ccruise Caribbean Cruise - cd32bios - CD32 Bios + cdiscon1 + Disco No.1 (DECO Cassette) (US) - cdibios - CD-i Bios + cdracula + Castle Of Dracula - cdiscon1 - Disco No.1 (DECO Cassette) + cdrawpkr + Draw Poker (Joker Poker V.01) cdsteljn - DS Telejan (DECO Cassette, Japan) + DS Telejan (DECO Cassette) (Japan) cecmatch ChuckECheese's Match Game + + cencourt + Center Court (World, 4 Players, prototype) (MC-8123B) + centaur Centaur + + centauri + Centaur (Inder) + + + centauri2 + Centaur (Inder, alternate set) + + + centipb2 + Centipede (bootleg, set 1) + + + centipd2 + Centipede (revision 2) + centipdb - Centipede (bootleg) + Centipede (bootleg, set 1) + + + centipdb2 + Centipede (bootleg, set 2) centipdd @@ -8228,15 +10789,27 @@ centiped - Centipede (revision 3) + Centipede (revision 4) + + + centiped1 + Centipede (revision 1) centiped2 Centipede (revision 2) + + centiped3 + Centipede (revision 3) + + + centipedj + Centipede (Japan, revision 3) + centtime - Centipede (1 player, timed) + Centipede (revision 4) cerberup @@ -8248,12 +10821,16 @@ cexplore - Explorer (DECO Cassette) + Explorer (DECO Cassette) (US) cfarm Chicken Farm (Version 2.0) + + cfarwest + Far West (Compumatic) + cfblue Crazy Fruits Blue (Russia) (Atronic) (set 1) @@ -8262,6 +10839,10 @@ cfbluea Crazy Fruits Blue (Russia) (Atronic) (set 2) + + cfboy0a1 + Flash Boy (vertical) (DECO Cassette MD) (No.12/Ver.0/Set.1,Japan) + cfever1k Casino Fever 1k @@ -8284,7 +10865,7 @@ cfghtice - Fighting Ice Hockey (DECO Cassette) + Fighting Ice Hockey (DECO Cassette) (US) cfgreen @@ -8292,15 +10873,19 @@ cfield - Chaos Field (GDL-0025) + Chaos Field (Japan) (GDL-0025) cfishing - Fishing (DECO Cassette) + Fishing (DECO Cassette) (Japan) cflyball - Flying Ball (DECO Cassette) + Flying Ball (DECO Cassette) (US) + + + cftbl_l2 + Creature from the Black Lagoon (L-2) cftbl_l3 @@ -8310,6 +10895,14 @@ cftbl_l4 Creature from the Black Lagoon (L-4) + + cgang + Cosmo Gang (US) + + + cgangpzj + Cosmo Gang the Puzzle (Japan) + cgangpzl Cosmo Gang the Puzzle (US) @@ -8318,6 +10911,10 @@ cgangpzlj Cosmo Gang the Puzzle (Japan) + + cgidjp + Double Joker Poker (CGI) + cgip30cs Credit Poker (ver.30c, standard) @@ -8332,11 +10929,23 @@ cgraplop - Cluster Buster (DECO Cassette) + Cluster Buster (DECO Cassette) (US) cgraplop2 - Graplop (no title screen) (DECO Cassette) + Graplop (DECO Cassette) (US) (Prototype?) + + + cgraplopj + Graplop (DECO Cassette) (Japan) + + + cgraplp2 + Cassette: Graplop (aka Cluster Buster) (set 2) + + + cgunship + Cobra Gunship [TTL] ch2000 @@ -8394,6 +11003,10 @@ chaknpop Chack'n Pop + + chalgirl + Challenge Girl (Falcon bootleg) + challeng Challenger @@ -8404,7 +11017,7 @@ chamburger - Hamburger (DECO Cassette, Japan) + Hamburger (DECO Cassette) (Japan) chameleo @@ -8423,21 +11036,33 @@ Champion Base Ball (Japan set 2) - champbb2 - Champion Base Ball Part-2: Pair Play (set 1) + champbasjb + Champion Base Ball (Japan set 3) - champbb2a - Champion Baseball II (set 2) + champbb2 + Champion Base Ball Part-2 (set 1) champbb2j - Champion Baseball II (Japan) + Champion Base Ball Part-2 (Japan) + + + champbbj + Champion Baseball (Japan set 1) + + + champbja + Champion Baseball (Japan set 2) champbwl Championship Bowling + + champion + Champion 85 + champwr Champion Wrestler (World) @@ -8450,6 +11075,10 @@ champwru Champion Wrestler (US) + + chamrx1 + Chameleon RX-1 + chanbara Chanbara @@ -8474,17 +11103,33 @@ changesa Changes (EME license) + + changyu + unknown Chang Yu Electronic gambling game 1 + + + changyu2 + unknown Chang Yu Electronic gambling game 2 + chaosbrk Chaos Breaker (v2.02J) chaoshea - Chaos Heat (V2.09O) + Chaos Heat (V2.09O 1998/10/02 17:00) chaosheaj - Chaos Heat (V2.08J) + Chaos Heat (V2.08J 1998/09/25 17:00) + + + chariotc + Chariot Challenge (0100787V, NSW/ACT) + + + chariotcv + Chariot Challenge (04J00714, Peru?) charlien @@ -8518,6 +11163,14 @@ chboxing Champion Boxing + + checkma5 + Checkmate (01J00681, NSW/ACT) + + + checkmaj + Check Man (Japan) + checkman Check Man @@ -8540,7 +11193,11 @@ cheetah - Cheetah + Cheetah (Black Cabinet) + + + cheetahb + Cheetah (Blue Cabinet) chelnov @@ -8550,13 +11207,25 @@ chelnovj Chelnov - Atomic Runner (Japan) + + chelnovjbl + Chelnov - Atomic Runner (Japan, bootleg with I8031, set 1) + + + chelnovjbla + Chelnov - Atomic Runner (Japan, bootleg with I8031, set 2) + chelnovu Chelnov - Atomic Runner (US) + + cherry96 + New Cherry '96 (bootleg of New Fruit Bonus?) + chessc2 - Chess Challenge 2 + Chess Challenge II chewheel @@ -8566,6 +11235,10 @@ chewing Chewing Gum + + chexx83 + Chexx (EM Bubble Hockey, 1983 1.1) + cheyenne Cheyenne (version 1.0) @@ -8575,8 +11248,24 @@ Chicken (Russia) (Atronic) - chihiro - Chihiro Bios + chickna5 + Chicken (0100351V, NSW/ACT) + + + chickna5ql + Chicken (0200530V, Queensland) + + + chickna5u + Chicken (RHG0730-03, US) + + + chickna5ua + Chicken (RHG0730-99, US) + + + chickna5v + Chicken (01J01886, Venezuela) chikij @@ -8592,7 +11281,7 @@ chimerab - Chimera Beast (prototype) + Chimera Beast (Japan, prototype) chinagat @@ -8606,6 +11295,10 @@ chinatwn China Town (Japan) + + chinher2 + Chinese Hero (older) + chinhero Chinese Hero @@ -8630,22 +11323,46 @@ chinsan Ganbare Chinsan Ooshoubu (MC-8123A, 317-5012) + + chkndraw + Chicken Draw (2131-04, U5-1) + + + chkndrawa + Chicken Draw (2131-04, U5-0) + chkun Chance Kun (Japan) chleague - Champion League (Poker) + Champion League (v220I, Poker) chleagul - Champion League (Lattine) + Champion League (v220I, Lattine) + + + chleagxa + Champion League (v220I, dual program, set 1) + + + chleagxb + Champion League (v220I, dual program, set 2) chmpnum Champion Number (V0.74) + + chmpnuma + Champion Number (V0.67) + + + chmppool + Champion Pool (v1.0) + chocomk Musapey's Choco Marker (Rev A) (GDL-0014A) @@ -8676,19 +11393,31 @@ chopper - Chopper I (US set 1) + Chopper I (US Ver 2) choppera - Chopper I (US set 2) + Chopper I (US Ver 1?) chopperb - Chopper I (US set 3) + Chopper I (US) - choysun - Choy Sun Doa (20131511, Malaysia) + choroqhr + Choro Q Hyper Racing 5 (J 981230 V1.000) + + + chplft + Choplifter + + + chplftb + Choplifter (alternate) + + + chplftbl + Choplifter (bootleg) chqflag @@ -8704,11 +11433,23 @@ chryangl - Cherry Angel + Cherry Angel (set 1) + + + chryangla + Cherry Angel (encrypted, W-4 hardware) + + + chryanglb + Cherry Angel (set 2) chrygld - Cherry Gold I + Cherry Gold I (set 1) + + + chryglda + Cherry Gold I (set 2, encrypted bootleg) chsuper2 @@ -8718,20 +11459,36 @@ chsuper3 Champion Super 3 (V0.35) + + chthree + Channel Three + chucklck Chuck-A-Luck chukatai - Chuka Taisen (World) + Chuka Taisen (World) (P0-028-A PCB) chukataij - Chuka Taisen (Japan) + Chuka Taisen (Japan) (P0-028-A PCB) + + + chukataija + Chuka Taisen (Japan) (P0-025-A PCB) chukataiu + Chuka Taisen (US) (P0-028-A PCB) + + + chukataj + Chuka Taisen (Japan) + + + chukatau Chuka Taisen (US) @@ -8740,12 +11497,16 @@ chwy - Highway Chase (DECO Cassette) + Highway Chase (DECO Cassette) (US) ciclone Ciclone + + cinhell + Chance in Hell - Lil' Lucy (0251125, US) + circa33 Circa 1933 @@ -8764,6 +11525,10 @@ circusc3 + Circus Charlie (level select, set 3) + + + circusc4 Circus Charlie (no level select) @@ -8774,6 +11539,10 @@ circusce Circus Charlie (Centuri, earlier) + + circuso + Circus / Acrobat TV (older) + circusp Circus @@ -8786,6 +11555,14 @@ citalcup Champion Italian Cup (bootleg V220IT) + + cityatta + City Attack (Petaco S.A., bootleg of Pleiads) + + + citybmrj + City Bomber (Japan) + citybomb City Bomber (World) @@ -8838,10 +11615,22 @@ cjffruit Funny Fruit (Ver. 1.13) + + cjplus + New! Cherry Plus (Ver. 3.10) + + + ckidzo + Ckidzo [TTL] + ckong Crazy Kong + + ckonga + Crazy Kong (set 2) + ckongalc Crazy Kong (Alca bootleg) @@ -8850,6 +11639,10 @@ ckongcv Crazy Kong (bootleg on Galaxian hardware, encrypted, set 2) + + ckongdks + Donkey Kong (Spanish Crazy Kong bootleg) + ckongg Crazy Kong (bootleg on Galaxian hardware) @@ -8862,9 +11655,17 @@ ckongis Crazy Kong (bootleg on Galaxian hardware, encrypted, set 3) + + ckongjeu + Crazy Kong (Jeutel bootleg) + ckongmc - Crazy Kong (bootleg on Moon Cresta hardware) + Crazy Kong (bootleg on Moon Cresta hardware, set 1) + + + ckongmc2 + Crazy Kong (bootleg on Moon Cresta hardware, set 2) ckongo @@ -8882,6 +11683,10 @@ ckongpt2b Crazy Kong Part II (alternative levels) + + ckongpt2b2 + Crazy Kong Part II (bootleg) + ckongpt2j Crazy Kong Part II (Japan) @@ -8890,9 +11695,13 @@ ckongpt2jeu Crazy Kong Part II (Jeutel bootleg) + + ckongpt2ss + Crazy Kong (SegaSA / Sonic bootleg) + ckongs - Crazy Kong (Scramble hardware) + Crazy Kong (bootleg on Scramble hardware) ckpt_a17 @@ -8900,11 +11709,11 @@ clapapa - Rootin' Tootin' / La-Pa-Pa (DECO Cassette) + Rootin' Tootin' / La-Pa-Pa (DECO Cassette) (US) clapapa2 - Rootin' Tootin' (DECO Cassette) + Rootin' Tootin' (DECO Cassette) (US) clas1812 @@ -8974,6 +11783,10 @@ cleopatr Cleopatra Fortune (Ver 2.1J 1996/09/05) + + cleopatro + Cleopatra Fortune (Ver 2.1O 1996/09/05, bootleg) + cleoptra Cleopatra @@ -8986,6 +11799,10 @@ cliffhgra Cliff Hanger (set 2) + + cliffhgra2 + Cliff Hanger (set 3) + clkwise Clockwise (1VXEC534, New Zealand) @@ -9008,7 +11825,11 @@ clocknch - Lock'n'Chase (DECO Cassette) + Lock'n'Chase (DECO Cassette) (US) + + + clocknchj + Lock'n'Chase (DECO Cassette) (Japan) closeenc @@ -9022,6 +11843,10 @@ clown Clown + + clowndwn + Clown Roll Down (Elwood) + clowns Clowns (rev. 2) @@ -9030,6 +11855,10 @@ clowns1 Clowns (rev. 1) + + clpoker + Poker Genius + clshroad Clash-Road @@ -9044,11 +11873,19 @@ cltchitr - Clutch Hitter (US, FD1094 317-0176) + Clutch Hitter (US) (FD1094 317-0176) + + + cltchitrd + Clutch Hitter (US) (bootleg of FD1094 317-0176 set) cltchitrj - Clutch Hitter (Japan, FD1094 317-0175) + Clutch Hitter (Japan) (FD1094 317-0175) + + + cltchitrjd + Clutch Hitter (Japan) (bootleg of FD1094 317-0175 set) club90s @@ -9058,33 +11895,65 @@ club90sa Mahjong CLUB 90's (set 2) (Japan 900919) + + clubcard + Club Card (ver. 1.1 English) + clubk2k3 - Club Kart: European Session (2003) + Club Kart: European Session (2003, Rev A) - clubk2kf - Club Kart: European Session (2003, not protected) + clubk2kp + Club Kart: European Session (2003, prototype, set 1) + + + clubk2kpa + Club Kart: European Session (2003, prototype, set 2) + + + clubkcyc + Club Kart for Cycraft (Rev A) (GDS-0029A) + + + clubkcyco + Club Kart for Cycraft (GDS-0029) clubkprz - Club Kart Prize + Club Kart Prize (Export, Japan, Rev A) clubkpzb - Club Kart Prize Ver. B + Club Kart Prize Version B (Export, Japan) - clubkrtd + clubkrt Club Kart: European Session (Rev D) - clubkrte + clubkrta + Club Kart: European Session (Rev A) + + + clubkrtc + Club Kart: European Session (Rev C) + + + clubkrto Club Kart: European Session + + clubpacm + Pacman Club / Club Lambada (Argentina) + + + clubpacma + Pacman Club (Argentina) + cluckypo - Lucky Poker (DECO Cassette) + Lucky Poker (DECO Cassette) (US) cluclu @@ -9112,7 +11981,7 @@ cmanhat - Manhattan (DECO Cassette) + Manhattan (DECO Cassette) (Japan) cmast91 @@ -9126,6 +11995,14 @@ cmast97 Cherry Master '97 + + cmast99 + Cherry Master '99 (V9B.00) + + + cmast99b + Cherry Master '99 (V9B.00 bootleg / hack) + cmaster Cherry Master I (ver.1.01, set 1) @@ -9154,6 +12031,26 @@ cmasterf Cherry Master I (ver.1.01, set 7) + + cmasterg + Cherry Master I (ver.1.01, set 8, V4-B-) + + + cmasterh + Cherry Master I (ver.1.10) + + + cmasteri + Cherry Master I (ver.1.01, set 9) + + + cmasterj + Cherry Master I (ver.1.01, set 10, BET stops all) + + + cmasterk + Cherry Master I (ver.1.01, set 11, TAKE stops all) + cmehyou Mahjong Circuit no Mehyou (Japan) @@ -9168,7 +12065,7 @@ cmissnx - Mission-X (DECO Cassette) + Mission-X (DECO Cassette) (US) cmkenosp @@ -9178,13 +12075,41 @@ cmkenospa Coinmaster Keno (Y2K, Spanish, 2000-12-02) + + cmmb103 + Centipede / Millipede / Missile Command (rev 1.03) + cmmb162 Centipede / Millipede / Missile Command / Let's Go Bowling (rev 1.62) + + cmpacman + Super Pacman (v1.2) + Cherry Master (Corsica, v8.31, set 1) + + + cmpacmana + Super Pacman (v1.2) + Cherry Master (Corsica, v8.31, set 2) + cmrltv75 - Coinmaster Roulette V75 (Y2K, Spanish) + Coinmaster Roulette P497 V75 (Y2K, Spanish) + + + cmtetris + Tetris + Cherry Master (Corsica, v8.01, set 1) + + + cmtetrsa + Tetris + Cherry Master (Corsica, v8.01, set 2) + + + cmtetrsb + Tetris + Cherry Master (+K, Canada Version, encrypted) + + + cmtonig + Cashman Tonight (30194711, NSW/ACT) cmv4 @@ -9202,22 +12127,42 @@ cmwm Cherry Master (Watermelon bootleg / hack) + + cnbe + Codename - Blut Engel (2006-01-19) + + + cnbe2018 + Codename - Blut Engel (2018-09-05) + + + cndi + Chip n Dale (FMV Demo) + cndypuzl Candy Puzzle (v1.0) + + cnights2 + Cassette: Night Star (set 2) + cnightst - Night Star (DECO Cassette, set 1) + Night Star (DECO Cassette) (US) (set 1) cnightst2 - Night Star (DECO Cassette, set 2) + Night Star (DECO Cassette) (US) (set 2) cninja Caveman Ninja (World ver 4) + + cninja0 + Caveman Ninja (World revision 0) + cninja1 Caveman Ninja (World ver 1) @@ -9228,7 +12173,7 @@ cninjabl2 - Caveman Ninja (bootleg, alt) + Tatakae Genshizin Joe & Mac (Japan, bootleg) cninjau @@ -9250,6 +12195,10 @@ cntinntl Continental (Bingo) + + cntinntl2 + Continental (Bingo, alternate version) + cntrygrl Country Girl (Japan set 1) @@ -9270,33 +12219,89 @@ cobraa Cobra Command (Data East LD, set 2) + + cobracmj + Cobra-Command (Japan) + cobracom - Cobra-Command (World revision 5) + Cobra-Command (World/US revision 5) + + + cobracoma + Cobra-Command (World/US revision 4) + + + cobracomb + Cobra-Command (World/US) + + + cobracomib + Cobra-Command (Italian bootleg) cobracomj Cobra-Command (Japan) + + cobracomja + Cobra-Command (Japan?, set 2) + + + cobracomjb + Cobra-Command (Japan, bootleg) + cobram3 - Cobra Command (M.A.C.H. 3 hardware) + Cobra Command (M.A.C.H. 3 hardware, set 1) + + + cobram3a + Cobra Command (M.A.C.H. 3 hardware, set 2) cobrap Cobra + + cobrapb + Cobra (Playbar) + cobraseg Cobra Command (Sega LaserDisc Hardware) + + cobrata + Cobra: The Arcade (CBR1 Ver. B) + + + cocean1a + Ocean to Ocean (Medal) (DECO Cassette MD) (No.10/Ver.1,Japan) + + + cocean6b + Ocean to Ocean (Medal) (DECO Cassette MD) (No.10/Ver.6,US) + + + cocoloco + Coco Loco (set 1) + + + cocolocoa + Coco Loco (set 2) + + + cocolocob + Coco Loco (set 3) + code1d - Code One Dispatch (ver D) + Code One Dispatch Ver 1.21 (ver UAD) code1db - Code One Dispatch (ver B) + Code One Dispatch Ver 1.16 (ver UAB) colmns97 @@ -9312,7 +12317,11 @@ colorama - Colorama (English) + Colorama (P521, English) + + + coloramas + Colorama (P521 V13, Spanish) colt @@ -9366,9 +12375,29 @@ columnsj Columns (Japan) + + columnsn + Columns (Neo Geo) + columnsu - Columns (US, cocktail) + Columns (US, cocktail, Rev A) + + + combasc + Combat School (joystick) + + + combascb + Combat School (bootleg) + + + combascj + Combat School (Japan trackball) + + + combasct + Combat School (trackball) combat @@ -9398,6 +12427,10 @@ comebaby Come On Baby + + comeback + Come Back + comet_l4 Comet (L-4) @@ -9448,7 +12481,7 @@ comg134 - Cal Omega - Game 13.4 (Nudge Bingo) + Cal Omega - Game 13.4 (Nudge) comg145 @@ -9480,16 +12513,20 @@ comg176 - Cal Omega - Game 17.6 (Nudge Bingo) + Cal Omega - Game 17.6 (Nudge) comg181 - Cal Omega - Game 18.1 (Nudge Bingo) + Cal Omega - Game 18.1 (Nudge) comg183 Cal Omega - Game 18.3 (Pixels) + + comg184 + Cal Omega - Game 18.4 (Pixels) + comg185 Cal Omega - Game 18.5 (Pixels) @@ -9542,9 +12579,13 @@ comg272b Cal Omega - Game 27.2 (Keno, gaming) + + comg5107 + CEI 51.07 (CEI 906-III Poker) + comg5108 - Cal Omega - Game 51.08 (CEI Video Poker, Jacks or Better) + CEI 51.08 (CEI 906-III Poker) comg903d @@ -9554,6 +12595,10 @@ comg905d Cal Omega - System 905 Diag.PROM + + commandj + Senjou no Ookami + commando Commando (World) @@ -9566,6 +12611,10 @@ commandob2 Commando (bootleg set 2) + + commandob3 + Commando (bootleg set 3) + commandoj Senjou no Ookami @@ -9578,9 +12627,13 @@ commandou2 Commando (US set 2) + + commandu + Commando (US) + commandw - Command War - Super Special Battle & War Game (Ver 0.0J) (Prototype) + Command War - Super Special Battle & War Game (Ver 0.0J, prototype) commsega @@ -9588,7 +12641,11 @@ comotion - Comotion + CoMOTION + + + compglfo + Competition Golf Final Round (old version) compgolf @@ -9596,7 +12653,7 @@ compgolfo - Competition Golf Final Round (old version) + Competition Golf Final Round (Japan, old version) complexx @@ -9604,7 +12661,11 @@ condor - Condor (bootleg of Phoenix) + Condor (Sidam bootleg of Phoenix) + + + condorn + Condor (S C Novar bootleg of Phoenix) coneyis @@ -9618,6 +12679,14 @@ congo Congo Bongo (Rev C, 2 board stack) + + congo_11 + Congo (1.1) + + + congo_11s10 + Congo (1.1, DCS sound 1.0) + congo_13 Congo (1.3) @@ -9654,13 +12723,17 @@ contcircua Continental Circus (US set 2) + + contcrcu + Continental Circus (US) + contra - Contra (US, set 1) + Contra (US / Asia, set 1) contra1 - Contra (US, set 2) + Contra (US / Asia, set 2) contrab @@ -9674,6 +12747,10 @@ contrabj1 Contra (Japan bootleg, set 2) + + contrae + Contra (US / Asia, set 3) + contraj Contra (Japan, set 1) @@ -9682,13 +12759,25 @@ contraj1 Contra (Japan, set 2) + + contrajb + Contra (Japan bootleg) + cookbib Cookie & Bibi (set 1) cookbib2 - Cookie & Bibi 2 + Cookie & Bibi 2 (set 1) + + + cookbib2a + Cookie & Bibi 2 (set 2) + + + cookbib2b + Cookie & Bibi 2 (set 3) cookbib3 @@ -9706,6 +12795,10 @@ coolmini Cool Minigame Collection + + coolminii + Cool Minigame Collection (Italy) + coolpool Cool Pool @@ -9716,7 +12809,7 @@ coozumou - Oozumou - The Grand Sumo (DECO Cassette, Japan) + Oozumou - The Grand Sumo (DECO Cassette) (Japan) cop01 @@ -9728,16 +12821,24 @@ cops - Cops + Cops (USA) copsnrob Cops'n Robbers + + copsuk + Cops (UK) + coralr2 Coral Riches II (1VXFC5472, New Zealand) + + coralrc2 + Coral Riches II (0100919V, NSW/ACT) + coronatn Coronation Street Quiz Game @@ -9746,6 +12847,10 @@ coronatnd Coronation Street Quiz Game (Protocol) + + corrida + Corrida de Toros (30178311, NSW/ACT) + corsario Corsario @@ -9754,18 +12859,34 @@ corv_21 Corvette (2.1) + + corv_la1 + Corvette (LA1) + corv_lx1 Corvette (LX1) + + corv_lx2 + Corvette (LX2) + + + corv_px3 + Corvette (PX3 Prototype) + corv_px4 - Corvette (PX4) + Corvette (PX4 Prototype) cosflash Cosmic Flash + + cosflnsm + Cosmic Flash (NSM) + cosmccop Cosmic Cop (World) @@ -9776,7 +12897,7 @@ cosmica - Cosmic Alien (version II) + Cosmic Alien (version II, set 1) cosmica1 @@ -9784,6 +12905,18 @@ cosmica2 + Cosmic Alien (older) + + + cosmica22 + Cosmic Alien (version II, set 2) + + + cosmica23 + Cosmic Alien (version II, set 3) + + + cosmica2a Cosmic Alien (early version II?) @@ -9794,6 +12927,10 @@ cosmicgi Cosmic Guerilla (Spanish bootleg) + + cosmicin + Cosmic Invaders (bootleg of Space Invaders) + cosmicm2 Cosmic Monsters 2 @@ -9814,42 +12951,74 @@ cosmogngj Cosmo Gang the Video (Japan) + + cosmognj + Cosmo Gang the Video (Japan) + cosmos Cosmos cotton - Cotton (set 4, World, FD1094 317-0181a) + Cotton (set 4, World) (FD1094 317-0181a) cotton2 Cotton 2 (JUET 970902 V1.000) + + cottona + Cotton + cottonbm Cotton Boomerang (JUET 980709 V1.000) + + cottond + Cotton (set 4, World) (bootleg of FD1094 317-0181a set) + cottong Cotocoto Cottong cottonj - Cotton (set 2, Japan, Rev B, FD1094 317-0179b) + Cotton (set 2, Japan, Rev B) (FD1094 317-0179b) cottonja - Cotton (set 1, Japan, Rev A, FD1094 317-0179a) + Cotton (set 1, Japan, Rev A) (FD1094 317-0179a) + + + cottonjad + Cotton (set 1, Japan, Rev A) (bootleg of FD1094 317-0179a set) + + + cottonjd + Cotton (set 2, Japan, Rev B) (bootleg of FD1094 317-0179b set) cottonu - Cotton (set 3, US, FD1094 317-0180) + Cotton (set 3, US) (FD1094 317-0180) + + + cottonud + Cotton (set 3, US) (bootleg of FD1094 317-0180 set) countdwn Count-Down + + countrb2 + Counter Run (bootleg set 2) + + + countrnb + Counter Run (bootleg set 1) + countrun Counter Run (NS6201-A 1988.3) @@ -9880,12 +13049,28 @@ cowboy - Cowboy Eight Ball + Cowboy Eight Ball (set 1) + + + cowboy2 + Cowboy Eight Ball 2 + + + cowboya + Cowboy Eight Ball (set 2) cowrace Cow Race (King Derby hack) + + cowtipp + Cow Tipping - Shake Cattle & Roll (set 1) + + + cowtippa + Cow Tipping - Shake Cattle & Roll (set 2) + cp_15 The Champion Pub (1.5) @@ -9894,10 +13079,30 @@ cp_16 The Champion Pub (1.6) + + cphd + Crouching Poney Hidden Dragon (DEMO) + cpoker Champion Poker (v220I) + + cpoker101 + Champion Poker (v101) + + + cpoker201f + Champion Poker (v201F) + + + cpoker210ks + Champion Poker (v210KS) + + + cpoker300us + Champion Poker (v300US) + cpokerpk Champion Italian PK (bootleg, blue board) @@ -9916,35 +13121,63 @@ cppicf - Peter Pepper's Ice Cream Factory (DECO Cassette, set 1) + Peter Pepper's Ice Cream Factory (DECO Cassette) (US) (set 1) cppicf2 - Peter Pepper's Ice Cream Factory (DECO Cassette, set 2) + Peter Pepper's Ice Cream Factory (DECO Cassette) (US) (set 2) cprobowl - Pro Bowling (DECO Cassette) + Pro Bowling (DECO Cassette) (US) cprogolf - Tournament Pro Golf (DECO Cassette) + Tournament Pro Golf (DECO Cassette) (US) cprogolf18 - 18 Challenge Pro Golf (DECO Cassette, Japan) + 18 Challenge Pro Golf (DECO Cassette) (Japan) cprogolfj - Tournament Pro Golf (DECO Cassette, Japan) + Tournament Pro Golf (DECO Cassette) (Japan) + + + cprosocc + Cassette: Pro Soccer + + + cps1demo + Chaos Demo (CPS-1) + + + cps1frog + Frog Feast (CPS-1) cps3boot - CPS3 Multi-game bootleg for HD6417095 type SH2 (New Generation, 3rd Strike, JoJo's Venture, JoJo's Bizarre Adventure, Red Earth) + CPS3 Multi-game bootleg for HD6417095 type SH2 (V4) cps3boota - CPS3 Multi-game bootleg for dead security cart (New Generation, 2nd Impact, 3rd Strike) + CPS3 Multi-game bootleg for dead security cart (V5) + + + cps3bootao + CPS3 Multi-game bootleg for dead security cart (older) + + + cps3bootao2 + CPS3 Multi-game bootleg for dead security cart (oldest) (New Generation, 2nd Impact and 3rd Strike only) + + + cps3booto + CPS3 Multi-game bootleg for HD6417095 type SH2 (older) + + + cps3booto2 + CPS3 Multi-game bootleg for HD6417095 type SH2 (oldest) (New Generation, 3rd Strike, JoJo's Venture, JoJo's Bizarre Adventure and Red Earth only) cps3bs32 @@ -9956,27 +13189,35 @@ cpsoccer - Pro Soccer (DECO Cassette) + Pro Soccer (DECO Cassette) (US) cpsoccerj - Pro Soccer (DECO Cassette, Japan) + Pro Soccer (DECO Cassette) (Japan) cptennis - Pro Tennis (DECO Cassette) + Pro Tennis (DECO Cassette) (US) + + + cptennisj + Pro Tennis (DECO Cassette) (Japan) cpthook Captain Hook - cpzn1 - ZN1 + cptlucky + Captain Lucky - cpzn2 - ZN2 + cpzodiac + Captain Zodiac (World) + + + cpzodiacj + Captain Zodiac (Japan) cr589fw @@ -9996,20 +13237,52 @@ crakndj2 - Crackin' DJ Part 2 + Crackin' DJ Part 2 (Japan) crash Crash + + crasha + Crash (alt) + + + crashh + Crash (Pac-Man) + + + crashnsc + Crash 'n Score/Stock Car [TTL] + + + crashrd + Crash Road (bootleg of Space Chaser) + crater Crater Raider + + crazybal + Crazy Balls [TTL] + crazyblk Crazy Blocks + + crazybon + Crazy Bonus 2002 (Ver. 1, set 1) + + + crazybona + Crazy Bonus 2002 (Ver. 1, set 2) + + + crazybonb + Crazy Bonus 2002 (Ver. 1, set 3) + crazycop Crazy Cop (Japan) @@ -10022,6 +13295,10 @@ crazywar Crazy War + + crbalon2 + Crazy Balloon (set 2) + crbaloon Crazy Balloon (set 1) @@ -10030,6 +13307,10 @@ crbaloon2 Crazy Balloon (set 2) + + cregchg + Chihiro Change Region GD USA (611-0028A) + crgolf Crowns Golf (834-5419-04) @@ -10054,6 +13335,10 @@ crgolfhi Crowns Golf in Hawaii + + cricket + Cricket + crimec Crime City (World) @@ -10068,26 +13353,46 @@ crimep2 - Crime Patrol 2: Drug Wars v1.3 + Crime Patrol 2: Drug Wars (v1.3) - crimep211 - Crime Patrol 2: Drug Wars v1.1 + crimep2_11 + Crime Patrol 2: Drug Wars (v1.1) crimepat - Crime Patrol v1.4 + Crime Patrol (v1.51) + + + crimepat_10 + Crime Patrol (v1.0) + + + crimepat_12 + Crime Patrol (v1.2) + + + crimepat_14 + Crime Patrol (v1.4) crimfght - Crime Fighters (US 4 players) + Crime Fighters (World 2 players) - crimfght2 + crimfghtj + Crime Fighters (Japan 2 Players) + + + crimfghtu + Crime Fighters (US 4 Players) + + + crimfgt2 Crime Fighters (World 2 Players) - crimfghtj + crimfgtj Crime Fighters (Japan 2 Players) @@ -10114,14 +13419,26 @@ crockman Crock-Man + + crockmnf + Crock-Man (Marti Colls bootleg of Rene Pierre Crock-Man) + croquis + Croquis (Korea) + + + croquisg Croquis (Germany) crospang Cross Pang + + crospuzl + Cross Puzzle + crossbld Cross Blades! (Japan) @@ -10130,6 +13447,10 @@ crossbow Crossbow (version 2.0) + + crossmg2 + Cross Magic Mark 2 + croupier Croupier (Playmark Roulette v.20.05) @@ -10143,44 +13464,52 @@ Poker Carnival - crshnscr - Crash 'n Score [TTL] + crshrac2 + Lethal Crash Race (set 2) crshrace - Lethal Crash Race (set 1) + Lethal Crash Race / Bakuretsu Crash Race (set 1) crshrace2 - Lethal Crash Race (set 2) + Lethal Crash Race / Bakuretsu Crash Race (set 2) + + + crshrace2a + Lethal Crash Race / Bakuretsu Crash Race (set 2, alternate sound ROM) + + + crswd2bl + Crossed Swords 2 (bootleg of CD version) crsword - Crossed Swords (ALM-002)(ALH-002) + Crossed Swords (ALM-002 ~ ALH-002) crszone - Crisis Zone (CSZO4 Ver. B) + Crisis Zone (World, CSZO4 Ver. B) crszonev2a - Crisis Zone (CSZO2 Ver. A) + Crisis Zone (World, CSZO2 Ver. A) crszonev3a - Crisis Zone (CSZO3 Ver. A) + Crisis Zone (US, CSZO3 Ver. A) crszonev3b - Crisis Zone (CSZO3 Ver. B, set 1) + Crisis Zone (US, CSZO3 Ver. B, set 1) crszonev3b2 - Crisis Zone (CSZO3 Ver. B, set 2) + Crisis Zone (US, CSZO3 Ver. B, set 2) crszonev4a - Crisis Zone (CSZO4 Ver. A) + Crisis Zone (World, CSZO4 Ver. A) crtaxihr @@ -10206,6 +13535,10 @@ crush4 Crush Roller (set 4) + + crush5 + Crush Roller (set 5) + crushbl Crush Roller (bootleg set 1) @@ -10222,6 +13555,10 @@ crusherm Crusher Makochan (Japan) + + crushrlf + Crush Roller (Famare SA PCB) + crushs Crush Roller (bootleg set 4) @@ -10246,58 +13583,90 @@ crusnexod Cruis'n Exotica (version 1.0) + + crusnu21 + Cruis'n USA (rev L2.1) + + + crusnu40 + Cruis'n USA (rev L4.0) + crusnusa - Cruis'n USA (rev L4.1) + Cruis'n USA (v4.5) crusnusa21 - Cruis'n USA (rev L2.1) + Cruis'n USA (v2.1) crusnusa40 - Cruis'n USA (rev L4.0) + Cruis'n USA (v4.0) + + + crusnusa41 + Cruis'n USA (v4.1) + + + crusnusa44 + Cruis'n USA (v4.4) + + + crusnw13 + Cruis'n World (rev L1.3) + + + crusnw20 + Cruis'n World (rev L2.0) crusnwld - Cruis'n World (rev L2.5) + Cruis'n World (v2.5) crusnwld13 - Cruis'n World (rev L1.3) + Cruis'n World (v1.3) crusnwld17 - Cruis'n World (rev L1.7) + Cruis'n World (v1.7) crusnwld19 - Cruis'n World (rev L1.9) + Cruis'n World (v1.9) crusnwld20 - Cruis'n World (rev L2.0) + Cruis'n World (v2.0) crusnwld23 - Cruis'n World (rev L2.3) + Cruis'n World (v2.3) crusnwld24 - Cruis'n World (rev L2.4) + Cruis'n World (v2.4) cryptklr Crypt Killer (GQ420 UAA) - - crysbios - Crystal System BIOS - crysking The Crystal of Kings + + cryspri + Crystal Springs (10144411, NSW/ACT) + + + crysprim + Crystal Springs (10155811, Malaysia) + + + cryspriu + Crystal Springs (0352557, US) + crystal Crystal Colours (CMC hardware) @@ -10308,6 +13677,10 @@ crystalc + Crystals Colours (Ver 1.02) + + + crystalca Crystals Colours (Ver 1.01) @@ -10315,12 +13688,36 @@ Crystal Gal (Japan 860512) - crystals - Crystal Springs (10155811, Malaysia) + crzclass + Zhaoji Fengdou + + + crzcross + Crazy Cross (ver EAA) crzmon2 - Crazy Monkey 2 (100310) + Crazy Monkey 2 (100310 World) + + + crzmon2_10 + Crazy Monkey 2 (110124 Entertainment A) + + + crzmon2_11 + Crazy Monkey 2 (110204 Entertainment A) + + + crzmon2_12 + Crazy Monkey 2 (110311 Entertainment B) + + + crzmon2_13 + Crazy Monkey 2 (140526 Entertainment B) + + + crzmon2_14 + Crazy Monkey 2 (110411 Entertainment C) crzmon2_2 @@ -10330,6 +13727,30 @@ crzmon2_3 Crazy Monkey 2 (100315 Entertainment) + + crzmon2_4 + Crazy Monkey 2 (100618 Russia) + + + crzmon2_5 + Crazy Monkey 2 (100413 Entertainment X) + + + crzmon2_6 + Crazy Monkey 2 (101220 Entertainment X) + + + crzmon2_7 + Crazy Monkey 2 (101208 Entertainment N) + + + crzmon2_8 + Crazy Monkey 2 (101220 Entertainment N) + + + crzmon2_9 + Crazy Monkey 2 (110111 Entertainment A) + crzrally Crazy Rally (set 1) @@ -10342,9 +13763,93 @@ crzrallyg Crazy Rally (Gecas license) + + crzrallyrf + Crazy Rally (Recreativos Franco license) + + + crzyddz + Crazy Dou Di Zhu + + + crzyddz2 + Crazy Dou Di Zhu II + crzytaxi - Crazy Taxi (JPN, USA, EXP, KOR, AUS) + Crazy Taxi + + + cs10_sps + Casino Strip X (Poker version, for Sony LD) + + + cs11_sps + Casino Strip XI (Poker version, for Sony LD, set 1) + + + cs11_sps2 + Casino Strip XI (Poker version, for Sony LD, set 2) + + + cs11_ssp + Casino Strip XI (Shooting Game version, for Pioneer LD) + + + cs12_sps + Casino Strip XII (Poker version, for Sony LD) + + + cs1_spp + Casino Strip I (Poker version, for Pioneer LD, set 1) + + + cs1_spp2 + Casino Strip I (Poker version, for Pioneer LD, set 2) + + + cs2_sps + Casino Strip II (Poker version, for Sony LD) + + + cs3_qps + Casino Strip III (Poker version, for Sony LD) + + + cs5_spp + Casino Strip V (Poker version, for Pioneer LD) + + + cs5_ssp + Casino Strip V (Shooting Game version, for Pioneer LD) + + + cs6_sps + Casino Strip VI (Poker version, for Sony LD) + + + cs6_ssp + Casino Strip VI (Shooting Game version, for Pioneer LD) + + + cs8_spp + Casino Strip VIII (Poker version, for Pioneer LD) + + + cs8_sps + Casino Strip VIII (Poker version, for Sony LD) + + + cs8_ssp + Casino Strip VIII (Shooting Game version, for Pioneer LD) + + + cs9_qps + Casino Strip IX (Poker version, for Sony LD) + + + cs9_spp + Casino Strip IX (Poker version, for Pioneer LD) csclub @@ -10376,15 +13881,39 @@ cscrtry - Scrum Try (DECO Cassette, set 1) + Scrum Try (DECO Cassette) (US) (set 1) cscrtry2 - Scrum Try (DECO Cassette, set 2) + Scrum Try (DECO Cassette) (US) (set 2) + + + csd + Choy Sun Doa (10104011, NSW/ACT) + + + csdce + Choy Sun Doa - Cash Express (30149511, NSW/ACT) + + + csdjc + Choy Sun Doa - Jackpot Carnival (20156611, Queensland) + + + csdm + Choy Sun Doa (20131511, Malaysia) + + + csdq + Choy Sun Doa (10121111, Queensland) + + + csdsp + Choy Sun Doa (20104011, NSW/ACT, Show Program) csdtenis - Super Doubles Tennis (DECO Cassette, Japan) + Super Doubles Tennis (DECO Cassette) (Japan) cshift @@ -10392,19 +13921,55 @@ cshooter - Cross Shooter (not encrypted) + Cross Shooter (Single PCB) - cshootere + cshootert + Cross Shooter (2 PCB Stack) + + + cshootre Cross Shooter (encrypted) + + csi_102 + C.S.I. v1.02 + + + csi_103 + C.S.I. v1.03 + + + csi_104 + C.S.I. v1.04 + + + csi_200 + C.S.I. v2.00 + + + csi_210 + C.S.I. v2.10 + + + csi_230 + C.S.I. v2.30 + + + csi_240 + C.S.I. v2.40 + csilver Captain Silver (World) csilverj - Captain Silver (Japan) + Captain Silver (Japan, revision 3) + + + csilverja + Captain Silver (Japan, revision 1) csk227it @@ -10416,23 +13981,31 @@ cskater - Skater (DECO Cassette, Japan) + Skater (DECO Cassette) (Japan) csmash - Cosmic Smash (JPN, USA, EXP, KOR, AUS) (Rev A) + Cosmic Smash (Rev A) csmasho - Cosmic Smash (JPN, USA, EXP, KOR, AUS) + Cosmic Smash csmic_l1 Cosmic Gunfight (L-1) + + cspe_qps + Casino Strip Private Eyes / All Start (Poker version, for Sony LD) + cspike - Gun Spike (JPN) / Cannon Spike (USA, EXP, KOR, AUS) + Cannon Spike / Gun Spike + + + cspin2 + Capriccio Spin 2 csplayh1 @@ -10442,9 +14015,21 @@ csplayh5 Mahjong Hanafuda Cosplay Tengoku 5 (Japan) + + csplayh6 + Mahjong Hanafuda Cosplay Tengoku 6 - Junai-hen (Japan) + csplayh7 - Cosplay Tengoku 7 - Super Kogal Grandprix (Japan) + Cosplay Tengoku 7 - Super Kogal Ranking (Japan) + + + cspring1 + Championship Sprint (German, rev 1) + + + csprins1 + Championship Sprint (Spanish, rev 1) csprint @@ -10478,17 +14063,21 @@ csprints1 Championship Sprint (Spanish, rev 1) + + csret + Choy Sun Returns (20212211, NSW/ACT) + cstlevna Vs. Castlevania - cstripxi - Casino Strip XI + csuperas + Super Astro Fighter (DECO Cassette) (US) - csuperas - Super Astro Fighter (DECO Cassette) + csv1_qps + Casino Strip Vivid 1 (Poker version, for Sony LD) cswat @@ -10496,7 +14085,7 @@ csweetht - Sweet Heart (DECO Cassette) + Sweet Heart (DECO Cassette) (US) ct2k3sa @@ -10506,6 +14095,10 @@ ct2k3sp Crouching Tiger Hidden Dragon 2003 Super Plus (The King of Fighters 2001 bootleg) + + ctainv + CTA Invader + ctcheese Cut The Cheese (Redemption) @@ -10516,23 +14109,35 @@ cterrani - Terranean (DECO Cassette) + Terranean (DECO Cassette) (US) cthd2003 Crouching Tiger Hidden Dragon 2003 (The King of Fighters 2001 bootleg) + + cthd2k3a + Crouching Tiger Hidden Dragon 2003 (set 2) + ctisland - Treasure Island (DECO Cassette, set 1) + Treasure Island (DECO Cassette) (US) (set 1) ctisland2 - Treasure Island (DECO Cassette, set 2) + Treasure Island (DECO Cassette) (US) (set 2) ctisland3 - Treasure Island (DECO Cassette, set 3) + Treasure Island (DECO Cassette) (Region D) + + + ctislnd2 + Cassette: Treasure Island (set 2) + + + ctislnd3 + Cassette: Treasure Island (set 3) ctomaday @@ -10540,15 +14145,11 @@ ctornado - Tornado (DECO Cassette) + Tornado (DECO Cassette) (US) ctribe - The Combatribes (US) - - - ctribe1 - The Combatribes (US set 1?) + The Combatribes (US, rev 2, set 1) ctribeb @@ -10560,7 +14161,15 @@ ctribej - The Combatribes (Japan) + The Combatribes (Japan, rev 2) + + + ctribeu1 + The Combatribes (US, rev 1) + + + ctribeua + The Combatribes (US, rev 2, set 2) ctrpllrp @@ -10568,7 +14177,7 @@ ctsttape - Test Tape (DECO Cassette) + Test Tape (DECO Cassette) (US) cubeqst @@ -10582,14 +14191,38 @@ cubybop Cuby Bop (location test) + + cuckoo + Cuckoo (0200753V, NSW/ACT) + + + cuckoou + Cuckoo (CHG1195, US) + + + cue + Cue (Prototype) + cueball Cue Ball Wizard - cuebrick + cueball2 + Cue Ball Wizard (rev.2) + + + cueball3 + Cue Ball Wizard (rev.3) + + + cuebrckj Cue Brick (World version D) + + cuebrick + Cue Brick (World, version D) + cuebrickj Cue Brick (Japan) @@ -10602,9 +14235,37 @@ cultures Jibun wo Migaku Culture School Mahjong Hen + + cuncino + Capitan Uncino (High Video, version 2) + cuoreuno - Cuore 1 (Italian) + Cuore 1 (Italian, set 1) + + + cuoreunoa + Cuore 1 (Italian, set 2) + + + cuoreunob + Cuore 1 (Italian, set 3) + + + cuoreunoc + Cuore 1 (Italian, set 4) + + + cuoreunod + Cuore 1 (Italian, set 5) + + + cuoreunoe + Cuore 1 (Italian, set 6) + + + cuoreunof + Cuore 1 (Italian, set 7) cupfinal @@ -10614,6 +14275,10 @@ cupsoc Seibu Cup Soccer (set 1) + + cupsoc2 + Seibu Cup Soccer (set 2) + cupsoca Seibu Cup Soccer (set 2) @@ -10622,6 +14287,10 @@ cupsocb Seibu Cup Soccer (set 3) + + cupsocbl + Seibu Cup Soccer (bootleg) + cupsocs Seibu Cup Soccer :Selection: (set 1) @@ -10642,10 +14311,18 @@ cupsocsb3 Seibu Cup Soccer :Selection: (bootleg, set 3) + + cupsocsb4 + Seibu Cup Soccer :Selection: (bootleg, set 4) + curvebal Curve Ball + + cutefght + Cute Fighter + cutieq Cutie Q @@ -10671,12 +14348,24 @@ Cirqus Voltaire (2.0H) - cvs2gd - Capcom Vs. SNK 2 Millionaire Fighting 2001 (Rev A) (GDL-0007A) + cv_d52 + Cirqus Voltaire (D.52 prototype) + + + cvs2 + Capcom Vs. SNK 2: Mark Of The Millennium 2001 (USA) (GDL-0008) + + + cvs2mf + Capcom Vs. SNK 2: Millionaire Fighting 2001 (Japan, Rev A) (GDL-0007A) cvsgd - Capcom Vs. SNK Millennium Fight 2000 Pro (GDL-0004) + Capcom Vs. SNK: Millennium Fight 2000 Pro (Japan) (GDL-0004) + + + cwheel + Catherine Wheel cworld @@ -10686,14 +14375,46 @@ cworld2j Adventure Quiz Capcom World 2 (Japan 920611) + + cworld2ja + Adventure Quiz Capcom World 2 (Japan 920611, B-Board 90629B-3, no battery) + + + cworld2jb + Adventure Quiz Capcom World 2 (Japan 920611, B-Board 91634B-2) + cybattlr Cybattler + + cyberb21 + Cyberball 2072 (2 player, rev 1) + + + cyberb22 + Cyberball 2072 (2 player, rev 2) + + + cyberb23 + Cyberball 2072 (2 player, rev 3) + + + cyberb2p + Cyberball 2072 (2 player, rev 4) + + + cyberba2 + Cyberball (rev 2) + cyberbal Cyberball (rev 4) + + cyberbal1 + Cyberball (rev 1) + cyberbal2 Cyberball (rev 2) @@ -10726,6 +14447,18 @@ cyberbalt1 Tournament Cyberball 2072 (rev 1) + + cyberbap + Cyberball (prototype) + + + cyberbt + Tournament Cyberball 2072 (rev 2) + + + cyberbt1 + Tournament Cyberball 2072 (rev 1) + cyberlip Cyber-Lip (NGM-010) @@ -10760,7 +14493,7 @@ cybrcycc - Cyber Cycles (Rev. CB2 Ver.C) + Cyber Cycles (Rev. CB2 Ver.C, World) cybrnaut @@ -10768,16 +14501,24 @@ cybsled - Cyber Sled (World) + Cyber Sled (CY2, World) - cybsledj - Cyber Sled (Japan) + cybsleda + Cyber Sled (CY1, World?) + + + cybstorm + Cyberstorm (prototype) cyclemb Cycle Maabou (Japan) + + cycln_l1 + Cyclone (L-1) + cycln_l4 Cyclone (L-4) @@ -10788,7 +14529,11 @@ cyclopes - Cyclopes + Cyclopes (12/85) + + + cyclopes1 + Cyclopes (11/85) cyclshtg @@ -10796,23 +14541,35 @@ cyclwarr - Cycle Warriors (set 1) + Cycle Warriors (rev C) cyclwarra - Cycle Warriors (set 2) + Cycle Warriors (rev B) + + + cyclwarrb + Cycle Warriors cyvern - Cyvern (US) + Cyvern - The Dragon Weapons (US) cyvernj - Cyvern (Japan) + Cyvern - The Dragon Weapons (Japan) czeroize - Zeroize (DECO Cassette) + Zeroize (DECO Cassette) (US) + + + czmon + Crazy Monkey (030217 World) + + + czmon_12 + Crazy Monkey (090711 Entertainment) czmon_13 @@ -10826,10 +14583,62 @@ czmon_16 Crazy Monkey (100312 Russia) + + czmon_17 + Crazy Monkey (100324 Entertainment X) + + + czmon_18 + Crazy Monkey (100331 Entertainment X) + + + czmon_19 + Crazy Monkey (101208 Entertainment N) + + + czmon_2 + Crazy Monkey (030225 World) + + + czmon_20 + Crazy Monkey (110111 Entertainment A) + + + czmon_21 + Crazy Monkey (110124 Entertainment A) + + + czmon_22 + Crazy Monkey (110204 Entertainment A) + + + czmon_23 + Crazy Monkey (110311 Entertainment B) + + + czmon_24 + Crazy Monkey (140526 Entertainment B) + + + czmon_25 + Crazy Monkey (110411 Entertainment C) + + + czmon_3 + Crazy Monkey (030227 World) + + + czmon_4 + Crazy Monkey (030404 World) + czmon_5 Crazy Monkey (030421 World) + + czmon_6 + Crazy Monkey (031016 World) + czmon_7 Crazy Monkey (031110 World) @@ -10904,7 +14713,7 @@ dai3wksi - Dai San Wakusei Meteor (Japan) + Dai 3 Wakusei (Japan) daikaiju @@ -10914,21 +14723,37 @@ daimakai Daimakaimura (Japan) + + daimakaib + Dai Makai-Mura (bootleg, Japan) + daimakair Daimakaimura (Japan Resale Ver.) daimyojn - Mahjong Daimyojin (Japan, T017-PB-00) + Mahjong Daimyojin [BET] (Japan, T017-PB-00) daioh - Daioh (set 1) + Daioh daioha - Daioh (set 2) + Daioh (earlier) + + + daiohc + Daioh (93111A PCB conversion) + + + daiohp + Daioh (prototype) + + + daiohp2 + Daioh (prototype, earlier) daireika @@ -10936,7 +14761,7 @@ dairesya - Dai Ressya Goutou (Japan) + Dai Ressya Goutou (Japan, version K) daisenpu @@ -10970,6 +14795,10 @@ dakkochn DakkoChan House (MC-8123B, 317-5014) + + dalejr + Dale Jr. (5.00) + dambustr Dambusters (US, set 1) @@ -10996,27 +14825,51 @@ danchiq - Danchi de Quiz Okusan Yontaku Desuyo! (J 001128 V1.200) + Danchi de Quiz: Okusan Yontaku Desuyo! (J 001128 V1.200) dangar - Ufo Robo Dangar (12/1/1986) + Ufo Robo Dangar (4/07/1987) dangar2 - Ufo Robo Dangar (9/26/1986) + Dangar - Ufo Robo (9-26-1986) + + + dangara + Ufo Robo Dangar (12/1/1986) dangarb - Ufo Robo Dangar (bootleg) + Ufo Robo Dangar (9/26/1986, bootleg set 1) + + + dangarbt + Ufo Robo Dangar (9/26/1986, bootleg set 2) + + + dangarj + Ufo Robo Dangar (9/26/1986, Japan) + + + dangbar + Dangerous Bar dangcurv + Dangerous Curves (Ver 2.9 O) + + + dangcurvj Dangerous Curves (Ver 2.2 J) + + dangerex + Danger Express (prototype) + dangerz - Danger Zone + Danger Zone (rev 2) dangseed @@ -11024,15 +14877,15 @@ dankuga - Dan-Ku-Ga (Ver 0.0J 1994/12/13) (Prototype) + Dan-Ku-Ga (Ver 0.0J 1994/12/13, prototype) daraku - Daraku Tenshi - The Fallen Angels + The Fallen Angels (World) / Daraku Tenshi - The Fallen Angels (Japan) darius - Darius (World) + Darius (World, rev 2) darius2 @@ -11048,7 +14901,7 @@ dariuse - Darius (Extra) (Japan) + Darius Extra Version (Japan) dariusg @@ -11068,11 +14921,15 @@ dariusj - Darius (Japan) + Darius (Japan, rev 1) dariuso - Darius (Japan old version) + Darius (Japan) + + + dariusu + Darius (US, rev 2) darkadv @@ -11092,7 +14949,7 @@ darkhors - Dark Horse (bootleg of Jockey Club II) + Dark Horse (USA v4.00, bootleg of Jockey Club II) darkmist @@ -11102,6 +14959,14 @@ darkplnt Dark Planet + + darksea1 + Dark Seal (World revision 1) + + + darkseaj + Dark Seal (Japan) + darkseal Dark Seal (World revision 3) @@ -11118,6 +14983,10 @@ darksealj Dark Seal (Japan revision 4) + + darksel2 + Dark Seal 2 (Japan v2.1) + darkshad Dark Shadow @@ -11138,6 +15007,14 @@ darwin Darwin 4078 (Japan) + + dashhero + Minna Ganbare! Dash Hero + + + dassaul4 + Desert Assault (US 4 Players) + dassault Desert Assault (US) @@ -11148,23 +15025,27 @@ dayto2pe - Daytona USA 2 Power Edition + Daytona USA 2 Power Edition (Japan) daytona - Daytona USA (Japan, Revision A) + Daytona USA (Revision A) daytona2 - Daytona USA 2 (Revision A) + Daytona USA 2 (Japan, Revision A) daytona93 - Daytona USA Deluxe '93 + Daytona USA + + + daytonagtx + Daytona USA (GTX 2004 Edition) daytonam - Daytona USA (Japan, To The MAXX) + Daytona USA (To The MAXX) daytonas @@ -11172,15 +15053,15 @@ daytonase - Daytona USA Special Edition (Japan, Revision A) + Daytona USA Special Edition (Revision A) daytonat - Daytona USA (Japan, Turbo hack, set 1) + Daytona USA (Turbo hack, set 1) daytonata - Daytona USA (Japan, Turbo hack, set 2) + Daytona USA (Turbo hack, set 2) dazzler @@ -11190,13 +15071,21 @@ dbc Da Ban Cheng (Hong Kong, V027H) + + dblagent + Double Agent (0152082, US) + dblaxle - Double Axle (US) + Double Axle (US, Rev 1) dblaxleu - Double Axle (US, earlier) + Double Axle (US) + + + dblaxleul + Double Axle (US, Rev 1, Linkable) dblchal @@ -11222,17 +15111,37 @@ dblcrown Double Crown (v1.0.3) + + dbldolph + Double Dolphins (20000211, NSW/ACT) + + + dbldolphq + Double Dolphins (40003211, Queensland) + + + dbldyn + The Double Dynamites + dbldynj - The Double Dynamites (Japan) + The Double Dynamites (Japan, 13NOV89) dbldynu - The Double Dynamites (US) + The Double Dynamites (US, 13NOV89) dblewing - Double Wings + Double Wings (set 1) + + + dblewinga + Double Wings (set 2) + + + dblewingb + Double Wings (Asia) dblplay @@ -11248,27 +15157,35 @@ dbreed - Dragon Breed (M81 PCB version) + Dragon Breed (World, M81 hardware) + + + dbreedjm72 + Dragon Breed (Japan, M72 hardware) dbreedm72 - Dragon Breed (M72 PCB version) + Dragon Breed (World, M72 hardware) dbz - Dragonball Z (rev B) + Dragon Ball Z (rev B) dbz2 - Dragonball Z 2 - Super Battle + Dragon Ball Z 2 - Super Battle + + + dbz2bl + Dragon Ball Z 2 - Super Battle (bootleg) dbza - Dragonball Z (rev A) + Dragon Ball Z (rev A) dbzvrvs - Dragon Ball Z V.R.V.S. (Japan) + Dragon Ball Z V.R.V.S. (Japan, Rev A) dcclub @@ -11292,16 +15209,20 @@ dcrown - Dream Crown (Set 1) + Dream Crown (set 1) dcrowna - Dream Crown (Set 2) + Dream Crown (set 2) dd_l2 Dr. Dude (LA-2) + + dd_lu1 + Dr. Dude (LU-1) Europe + dd_p06 Dr. Dude (PA-6 WPC) @@ -11322,6 +15243,10 @@ ddayc D-Day (Centuri) + + ddaydoo + Chulgyeok D-Day (Korea) + ddayjlc D-Day (Jaleco set 1) @@ -11330,29 +15255,65 @@ ddayjlca D-Day (Jaleco set 2) + + ddboy + Dam Dam Boy (on dedicated PCB) + + + ddboya + Dam Dam Boy (on Tsukande Toru Chicchi PCB) + ddcrew - D. D. Crew (World, 3 Players, FD1094 317-0190) + D. D. Crew (World, 3 Players) (FD1094 317-0190) ddcrew1 - D. D. Crew (World, 4 Players, FD1094 317-0187) + D. D. Crew (World, 4 Players) (FD1094 317-0187) + + + ddcrew1d + D. D. Crew (World, 4 Players) (bootleg of FD1094 317-0187 set) ddcrew2 - D. D. Crew (World, 2 Players, FD1094 317-0184) + D. D. Crew (World, 2 Players) (FD1094 317-0184) + + + ddcrew2d + D. D. Crew (World, 2 Players) (bootleg of FD1094 317-0184 set) + + + ddcrewbl + D. D. Crew (bootleg) + + + ddcrewd + D. D. Crew (World, 3 Players) (bootleg of FD1094 317-0190 set) ddcrewj - D. D. Crew (Japan, 4 Players, FD1094 317-0185) + D. D. Crew (Japan, 4 Players) (FD1094 317-0185) ddcrewj2 - D. D. Crew (Japan, 2 Players, FD1094 317-0182) + D. D. Crew (Japan, 2 Players) (FD1094 317-0182) + + + ddcrewj2d + D. D. Crew (Japan, 2 Players) (bootleg of FD1094 317-0182 set) + + + ddcrewjd + D. D. Crew (Japan, 4 Players) (bootleg of FD1094 317-0185 set) ddcrewu - D. D. Crew (US, 4 Players, FD1094 317-0186) + D. D. Crew (US, 4 Players) (FD1094 317-0186) + + + ddcrewud + D. D. Crew (US, 4 Players) (bootleg of FD1094 317-0186 set) ddealer @@ -11374,14 +15335,26 @@ ddenlovrk Don Den Lover Vol. 1 - Heukbaeg-euro Jeonghaja (Korea) + + dderby + Death Derby + ddonpach DoDonPachi (International, Master Ver. 97/02/05) + + ddonpacha + DoDonPachi (2012/02/12 Arrange Ver. 1.1) (hack) + ddonpachj DoDonPachi (Japan, Master Ver. 97/02/05) + + ddonpchj + DoDonPachi (Japan) + ddp2 DoDonPachi II - Bee Storm (World, ver. 102) @@ -11392,15 +15365,15 @@ ddp2100c - DoDonPachi II - Bee Storm (China, ver. 100) + DoDonPachi - Feng Bao (China, ver. 100) ddp2100hk - DoDonPachi II - Bee Storm (Hong Kong, ver. 100) + DoDonPachi II - Fung Bou (Hong Kong, ver. 100) ddp2100j - DoDonPachi II - Bee Storm (Japan, ver. 100) + DoDonPachi II (Japan, ver. 100) ddp2100k @@ -11408,7 +15381,7 @@ ddp2100t - DoDonPachi II - Bee Storm (Taiwan, ver. 100) + DoDonPachi - Feng Bao (Taiwan, ver. 100) ddp2101 @@ -11416,15 +15389,15 @@ ddp2101c - DoDonPachi II - Bee Storm (China, ver. 101) + DoDonPachi - Feng Bao (China, ver. 101) ddp2101hk - DoDonPachi II - Bee Storm (Hong Kong, ver. 101) + DoDonPachi II - Fung Bou (Hong Kong, ver. 101) ddp2101j - DoDonPachi II - Bee Storm (Japan, ver. 101) + DoDonPachi II (Japan, ver. 101) ddp2101k @@ -11432,19 +15405,19 @@ ddp2101t - DoDonPachi II - Bee Storm (Taiwan, ver. 101) + DoDonPachi - Feng Bao (Taiwan, ver. 101) ddp2c - DoDonPachi II - Bee Storm (China, ver. 102) + DoDonPachi - Feng Bao (China, ver. 102) ddp2hk - DoDonPachi II - Bee Storm (Hong Kong, ver. 102) + DoDonPachi II - Fung Bou (Hong Kong, ver. 102) ddp2j - DoDonPachi II - Bee Storm (Japan, ver. 102) + DoDonPachi II (Japan, ver. 102) ddp2k @@ -11452,39 +15425,75 @@ ddp2t - DoDonPachi II - Bee Storm (Taiwan, ver. 102) + DoDonPachi - Feng Bao (Taiwan, ver. 102) + + + ddp3 + DoDonPachi III (World, 2002.05.15 Master Ver) + + + ddp3a + DoDonPachi Dai-Ou-Jou (V100, second revision) + + + ddp3b + DoDonPachi Dai-Ou-Jou (V100, first revision) + + + ddp3blk + DoDonPachi Dai-Ou-Jou (Black Label) ddpdfk - DoDonPachi Dai-Fukkatsu Ver 1.5 (2008/06/23 MASTER VER 1.5) + DoDonPachi Dai-Fukkatsu Ver 1.5 (2008/06/23 MASTER VER 1.5) ddpdfk10 - DoDonPachi Dai-Fukkatsu Ver 1.0 (2008/05/16 MASTER VER) + DoDonPachi Dai-Fukkatsu Ver 1.0 (2008/05/16 MASTER VER) ddpdoj - DoDonPachi Dai-Ou-Jou V101 (2002.04.05.Master Ver) + DoDonPachi Dai-Ou-Jou (Japan, 2002.04.05.Master Ver, 68k Label V101) ddpdoja - DoDonPachi Dai-Ou-Jou V100 (2002.04.05.Master Ver) + DoDonPachi Dai-Ou-Jou (Japan, 2002.04.05.Master Ver, 68k Label V100) ddpdojb - DoDonPachi Dai-Ou-Jou (2002.04.05 Master Ver) + DoDonPachi Dai-Ou-Jou (Japan, 2002.04.05 Master Ver) ddpdojblk - DoDonPachi Dai-Ou-Jou (2002.10.07.Black Ver) + DoDonPachi Dai-Ou-Jou Black Label (Japan, 2002.10.07.Black Ver, newer) ddpdojblka - DoDonPachi Dai-Ou-Jou (2002.10.07 Black Ver) + DoDonPachi Dai-Ou-Jou Black Label (Japan, 2002.10.07.Black Ver, older) + + + ddpdojblkb + DoDonPachi Dai-Ou-Jou Black Label (Japan, 2002.10.07 Black Ver) + + + ddpdojblkbl + DoDonPachi Dai-Ou-Jou Black Label (Japan, 2002.10.07 Black Ver., bootleg Knights of Valour Super Heroes conversion) + + + ddpdojp + DoDonPachi Dai-Ou-Jou (Japan, 2002.04.05 Master Ver, location test) + + + ddpdojt + DoDonPachi Dai-Ou-Jou Tamashii (V201, China) - ddpdojh - Dodonpachi Daioujou Tamashii (V201, China) + ddpsdoj + DoDonPachi SaiDaiOuJou (2012/ 4/20) + + + ddpsdojk + DoDonPachi SaiDaiOujou & Knuckles (2021/12/01 Japan, hack) ddr2m @@ -11558,6 +15567,14 @@ ddra Dance Dance Revolution (GN845 VER. AAA) + + ddragn2u + Double Dragon II - The Revenge (US) + + + ddrago3b + Double Dragon 3 - The Rosetta Stone (bootleg) + ddragon Double Dragon (Japan) @@ -11566,6 +15583,18 @@ ddragon2 Double Dragon II - The Revenge (World) + + ddragon2b + Double Dragon II - The Revenge (US, bootleg) + + + ddragon2b2 + Double Dragon II - The Revenge (US bootleg, set 2) + + + ddragon2j + Double Dragon II - The Revenge (Japan) + ddragon2u Double Dragon II - The Revenge (US) @@ -11604,7 +15633,7 @@ ddragonba - Double Dragon (bootleg with M6803) + Double Dragon (bootleg with MC6803) ddragonu @@ -11658,6 +15687,14 @@ ddrjb Dance Dance Revolution (GC845 VER. JAB) + + ddrkara + Dance Dance Revolution Karaoke Mix (GQ921 VER. JBB) + + + ddrkids + Dance Dance Revolution Kids (GQAN4 JAA) + ddrmax DDR Max - Dance Dance Revolution 6th Mix (G*B19 VER. JAA) @@ -11694,6 +15731,10 @@ ddsoma Dungeons & Dragons: Shadow over Mystara (Asia 960619) + + ddsomar1 + Dungeons & Dragons: Shadow over Mystara (Asia 960208) + ddsomb Dungeons & Dragons: Shadow over Mystara (Brazil 960223) @@ -11710,6 +15751,10 @@ ddsomjr1 Dungeons & Dragons: Shadow over Mystara (Japan 960206) + + ddsomjr2 + Dungeons & Dragons: Shadow over Mystara (Japan 960223) + ddsomr1 Dungeons & Dragons: Shadow over Mystara (Euro 960223) @@ -11796,19 +15841,27 @@ ddux - Dynamite Dux (set 3, World, FD1094 317-0096) + Dynamite Dux (set 3, World) (FD1094 317-0096) ddux1 - Dynamite Dux (set 1, 8751 317-0095) + Dynamite Dux (set 1, World) (8751 317-0095) dduxbl Dynamite Dux (Datsu bootleg) + + dduxd + Dynamite Dux (set 3, World) (bootleg of FD1094 317-0096 set) + dduxj - Dynamite Dux (set 2, Japan, FD1094 317-0094) + Dynamite Dux (set 2, Japan) (FD1094 317-0094) + + + dduxjd + Dynamite Dux (set 2, Japan) (bootleg of FD1094 317-0094 set) ddz @@ -11818,6 +15871,10 @@ deadang Dead Angle + + deadconj + Dead Connection (Japan) + deadconx Dead Connection (World) @@ -11838,13 +15895,25 @@ dealer The Dealer + + dealracl + The Dealer (ACL) + deathbrd Death Brade (Japan ver JM-3) deathcox - Death Crimson OX (JPN, USA, EXP, KOR, AUS) + Death Crimson OX (USA) + + + deathcoxj + Death Crimson OX (Japan, Rev A) + + + deathcoxo + Death Crimson OX (Japan) deathrac @@ -11867,8 +15936,16 @@ Decathlete (JUET 960424 V1.000) - decocass - DECO Cassette System + decomult + Deco Cassette System Multigame (ROM based) + + + deepfrz + Deep Freeze (10282311, NSW/ACT) + + + deepfrzu + Deep Freeze (0154081, US) deerhunt @@ -11894,6 +15971,10 @@ deerhunte Deer Hunting USA V1 + + deerhuntj + Deer Hunting USA V4.4.1 (Japan) + defcmnd Defense Command (Defender bootleg) @@ -11914,22 +15995,50 @@ defenderg Defender (Green label) + + defenderj + T.T Defender + defenderw Defender (White label) + + defendg + Defender (Green label) + + + defendw + Defender (White label) + defense Defense (System 16B, FD1089A 317-0028) + + defenseb + Defense (Defender bootleg) + defndjeu Defender (bootleg) + + deltabel + Delta Belle (0252532, US) + + + deltaqn + Delta Queen (20185211, NSW/ACT) + deltrace Delta Race + + deluxe4u + Deluxe 4 U (ver. 0107, 07/01/2000) + deluxe5 Deluxe 5 (ver. 0107, 07/01/2000, set 1) @@ -11970,6 +16079,10 @@ demoneye Demoneye-X + + demonwl1 + Demon's World - Horror Story (Taito license) + demonwld Demon's World / Horror Story (set 1) @@ -11986,6 +16099,10 @@ demonwld3 Demon's World / Horror Story (set 4) + + demonwld4 + Demon's World / Horror Story (set 5) + dendego Densha de GO! (Ver 2.2 J) @@ -11998,17 +16115,29 @@ dendego23k Densha de GO! 2 Kousoku-hen 3000-bandai (Ver 2.20 J) + + dendego3 + Densha de GO 3! Tsukin-hen (V2.03J) + dendegox Densha de GO! EX (Ver 2.4 J) denjinmk - Denjin Makai + Denjin Makai (set 1) + + + denjinmka + Denjin Makai (set 2) denseib - Ghost Chaser Densei (SNES bootleg) + Ghost Chaser Densei (SNES bootleg, set 1) + + + denseib2 + Ghost Chaser Densei (SNES bootleg, set 2) depthch @@ -12018,25 +16147,37 @@ depthcho Depthcharge (older) + + depthv1 + Depthcharge (older) + derbyo2k - Derby Owners Club 2000 (Rev A) + Derby Owners Club 2000 Ver.2 (Japan, Rev A) derbyoc - Derby Owners Club (JPN, USA, EXP, KOR, AUS) (Rev B) + Derby Owners Club (Japan, Rev B) derbyoc2 - Derby Owners Club II (JPN, USA, EXP, KOR, AUS) (Rev B) + Derby Owners Club II Ver.2.1 (Japan, Rev B) derbyocw - Derby Owners Club World Edition (JPN, USA, EXP, KOR, AUS) (Rev D) + Derby Owners Club World Edition EX (Rev D) deroon - Deroon DeroDero + Deroon DeroDero (earlier) + + + deroon2 + Deroon DeroDero / Tecmo Stackers + + + deroona + Deroon DeroDero (alt set) desert @@ -12044,11 +16185,19 @@ desertbr - Desert Breaker (World, FD1094 317-0196) + Desert Breaker (World) (FD1094 317-0196) + + + desertbrd + Desert Breaker (World) (bootleg of FD1094 317-0196 set) desertbrj - Desert Breaker (Japan, FD1094 317-0194) + Desert Breaker (Japan) (FD1094 317-0194) + + + desertbrjd + Desert Breaker (Japan) (bootleg of FD1094 317-0194 set) desertdn @@ -12060,7 +16209,7 @@ desertwr - Desert War / Wangan Sensou + Desert War / Wangan Sensou (ver 1.0) destdrby @@ -12092,7 +16241,7 @@ detatwin - Detana!! Twin Bee (Japan ver. J) + Detana!! Twin Bee (Japan, version J) detest @@ -12110,22 +16259,38 @@ devilfsh Devil Fish + + devilfshgb + Devil Fish (Galaxian hardware, bootleg) + devilw Devil World + + devstor2 + Devastators (ver. X) + + + devstor3 + Devastators (ver. V) + devstors Devastators (ver. Z) devstors2 - Devastators (ver. X) + Devastators (ver. 2) - devstors3 + devstorsv Devastators (ver. V) + + devstorsx + Devastators (ver. X) + devzone Devil Zone @@ -12138,10 +16303,22 @@ df_djpkr Double Joker Poker (45%-75% payout) + + dfeverg + Dancing Fever Gold (J 000821 V2.001) + dfeveron Dangun Feveron (Japan, Ver. 98/09/17) + + dfjail + The Destroyer From Jail (Korea) + + + dfkbl + DoDonPachi Dai-Fukkatsu Black Label (2010/1/18 BLACK LABEL) + dfndr_l4 Defender (L-4) @@ -12150,6 +16327,10 @@ dfruit Fruit Dream (Japan) + + dh_lf2 + Dirty Harry (LF-2) + dh_lx2 Dirty Harry (LX-2) @@ -12158,28 +16339,96 @@ dharma Dharma Doujou + + dharmag + Dharma Doujou (Germany) + + + dharmaj + Dharma Doujou (Japan) + dharmak Dharma Doujou (Korea) + + dhunting + Dream Hunting (US) + + + di4ever + Diamonds Forever (10105011, NSW/ACT) + + + diaelite + Diana Elite + + + diamdest + Diamond Destiny (AHG1533, US) + + + diamdove + Diamond Dove (0101018V, NSW/ACT) + + + diamhrts + Diamonds & Hearts - Power Pay (10229311, NSW/ACT) + diamond Diamond Run + + diamondking + Diamond King (with Euro support) + + + diamondkinp + Diamond King (without Euro support) + diamondp Diamond Lady + + diamondpf + Diamond Lady (French) + + + diamondpg + Diamond Lady (German) + + + dibif727 + Diana Bifuca (v7.27) + + + dibif743 + Diana Bifuca (v7.43) + + + dibifuca + Diana Bifuca (v9.25) + + + dicegame + Dice - The Dice Game! + diehard Die Hard Arcade (UET 960515 V1.000) dietgo - Diet Go Go (Euro v1.1 1992.09.26) + Diet Go Go (Euro v1.1 1992.09.26 v3) dietgoe + Diet Go Go (Euro v1.1 1992.09.26 v2) + + + dietgoea Diet Go Go (Euro v1.1 1992.08.04) @@ -12206,6 +16455,10 @@ digdug2o Dig Dug II (Old Ver.) + + digduga1 + Dig Dug (Atari, rev 1) + digdugat Dig Dug (Atari, rev 2) @@ -12214,6 +16467,10 @@ digdugat1 Dig Dug (Atari, rev 1) + + digdugb + Dig Dug (rev 1) + digger Digger @@ -12242,17 +16499,45 @@ dimahoud Dimahoo (USA 000121 Phoenix Edition) (bootleg) + + dimeye + Diamond Eyes (0251312, US) + + + dimeyece + Diamond Eyes - Cash Express (0152039, US) + + + dimtouch + Diamond Touch (0400433V, NSW/ACT) + + + dindice + Dice game + + + diner_f2 + Diner (LF-2) French + diner_l1 - Diner (L-1) Europe + Diner (LU-1) Europe + + + diner_l2 + Diner (LU-2) Europe diner_l3 - Diner (L-3) + Diner (LA-3) diner_l4 - Diner (L-4) + Diner (LA-4) + + + diner_p0 + Diner (PA-0 prototype) dingo @@ -12266,10 +16551,38 @@ dino Cadillacs and Dinosaurs (World 930201) + + dinoa + Cadillacs and Dinosaurs (Asia TW 930223) + + + dinodino + Dino Dino (Ver. A1.1) + + + dinods + Cadillacs and Dinosaurs (God of War Edition, Hack) + dinoeggs Dinosaur Eggs + + dinoeh + Cadillacs and Dinosaurs (hack, 930201 etc) + + + dinogae + Cadillacs and Dinosaurs (GOTVG 10th Anniversary Edition, Hack) + + + dinoh + Cadillacs and Dinosaurs (bootleg set 3, 930223 Asia TW) + + + dinohc + Cadillacs and Dinosaurs (Chinese bootleg, 930223 Asia TW) + dinohunt Dinosaur Hunter (Chinese bootleg of Cadillacs and Dinosaurs) @@ -12278,13 +16591,45 @@ dinoj Cadillacs: Kyouryuu Shin Seiki (Japan 930201) + + dinoki25 + Dinosaur King - D-Team VS. the Alpha Fortress (Export, Ver 2.500) (MDA-C0047) + + + dinoki4 + Kodai Ouja Kyouryuu King - Mezame yo! Arata-naru Chikara!! (Japan, Ver 4.000) (MDA-C0061) + + + dinokich + Konglongwang - D-Kids VS Alpha Yaosai (China, Ver 2.501) (MDA-C0081) + + + dinoking + Dinosaur King (USA) + + + dinokior + Dinosaur King - Operation: Dinosaur Rescue (USA, Export) (MDA-C0021) + dinopic - Cadillacs and Dinosaurs (bootleg with PIC16c57, set 1) + Cadillacs and Dinosaurs (bootleg with PIC16C57, set 1) dinopic2 - Cadillacs and Dinosaurs (bootleg with PIC16c57, set 2) + Cadillacs and Dinosaurs (bootleg with PIC16C57, set 2) + + + dinopic3 + Cadillacs and Dinosaurs (bootleg with PIC16C57, set 3) + + + dinopic4 + Cadillacs and Dinosaurs (bootleg set 4 (with PIC16c57), 930201 etc) + + + dinopic5 + Cadillacs and Dinosaurs (bootleg set 5 (with PIC16c57), 930223 Asia TW) dinorex @@ -12298,21 +16643,65 @@ dinorexu Dino Rex (US) + + dinosa6 + Dinosaur (10118811, NSW/ACT) + + + dinosyn + Cadillacs and Dinosaurs (28th-Anniversary, Hack) + + + dinot + Cadillacs and Dinosaurs Turbo (bootleg set 1, 930223 Asia TW) + + + dinotpic + Cadillacs and Dinosaurs Turbo (bootleg set 2 (with PIC16c57), 930201 etc) + dinou Cadillacs and Dinosaurs (USA 930201) + + diola827 + Diana Olakoa (v8.27) + + + diolakoa + Diana Olakoa (v8.38) + dirtdash - Dirt Dash (Rev. DT2) + Dirt Dash (Rev. DT2 Ver.B, World) + + + dirtdasha + Dirt Dash (Rev. DT2 Ver.A, World) + + + dirtdashj + Dirt Dash (Rev. DT1 Ver.A, Japan) dirtdvls - Dirt Devils (set 1) (Revision A) + Dirt Devils (Export, Revision A) + + + dirtdvlsau + Dirt Devils (Australia, Revision A) + + + dirtdvlsg + Dirt Devils (Export, Ver. G?) + + + dirtdvlsj + Dirt Devils (Japan, Revision A) - dirtdvlsa - Dirt Devils (set 2) (Revision A) + dirtdvlsu + Dirt Devils (USA, Revision A) dirtfoxj @@ -12342,6 +16731,10 @@ discoboyp Disco Boy (Promat license?) + + discodan + Disco Dancing + discof Disco No.1 (Rev.F) @@ -12350,29 +16743,73 @@ ditrio Diamond Trio (set 1) + + divebomb + Kyuukoukabakugekitai - Dive Bomber Squad (Japan, prototype) + diverboy Diver Boy djboy - DJ Boy (set 1) + DJ Boy (World) - djboya - DJ Boy (set 2) + djboyj + DJ Boy (Japan, set 1) - djboyj - DJ Boy (Japan) + djboyja + DJ Boy (Japan, set 2) + + + djboyu + DJ Boy (US, set 1) + + + djboyua + DJ Boy (US, set 2) + + + dkbanana + Donkey Kong Banana Kingdom (host) + + + dkbanans + Donkey Kong Banana Kingdom (satellite) + + + dkbattle + Dinoking Battle + + + dkcbarrel + Donkey Kong Crazy Barrels Edition + + + dkchrmx + Donkey Kong Christmas Remix (Hack) + + + dkfreerun + Donkey Kong Freerun Edition + + + dkgenm72 + Daiku no Gensan (Japan, M72) dkgensan - Daiku no Gensan (Japan, M82) + Daiku no Gensan (Japan, M84 hardware) dkgensanm72 - Daiku no Gensan (Japan, M72) + Daiku no Gensan (Japan, M72 hardware) + + + dkgensanm82 + Daiku no Gensan (Japan, M82 hardware) dking @@ -12382,6 +16819,22 @@ dkingjr Donkey King Jr. (bootleg of Donkey Kong Jr.) + + dkkids + Dinoking Kids + + + dkmb + Donkey Kong / Donkey Kong Jr / Mario Bros + + + dkngjnrb + Donkey Kong Junior (bootleg[Q]) + + + dkngjnrj + Donkey Kong Junior (Japan[Q]) + dkong Donkey Kong (US set 1) @@ -12390,14 +16843,42 @@ dkong3 Donkey Kong 3 (US) + + dkong3abl + Donkey Kong 3 (bootleg on Ambush hardware) + dkong3b Donkey Kong 3 (bootleg on Donkey Kong Jr. hardware) + + dkong3hs + Donkey Kong High Score Kit (hack,V1.0a) + dkong3j Donkey Kong 3 (Japan) + + dkongbp + Donkey Kong Barrelpalooza v1.06 + + + dkongbp1 + Donkey Kong Barrelpalooza v1.07 + + + dkongchm + Donkey Kong League Championship v1.00 + + + dkongchm1 + Donkey Kong Championship Edition v1.01 + + + dkongddk + Double Donkey Kong (hack,V1.2) + dkongf Donkey Kong Foundry (hack) @@ -12406,13 +16887,25 @@ dkonghrd Donkey Kong (hard kit) + + dkonghs + Donkey Kong High Score Kit (hack,V1.2) + + + dkongike + Donkey Kong/DK (Japan) (hack,V1.1 IKE) + + + dkongitd + Donkey Kong In the Dark v1.02 + dkongj Donkey Kong (Japan set 1) dkongjnrj - Donkey Kong Junior (Japan?) + Donkey Kong Junior (Japan set F-1) dkongjo @@ -12422,25 +16915,45 @@ dkongjo1 Donkey Kong (Japan set 3) + + dkongjp + Donkey Kong (Japan set 1) + dkongjr Donkey Kong Junior (US set F-2) + + dkongjr2 + Donkey Kong Junior (US, bootleg?) + dkongjrb Donkey Kong Jr. (bootleg) + + dkongjrc + Donkey Kong/JR (combo) (hack,V1.2) + dkongjre Donkey Kong Junior (E kit) + + dkongjrhs + Donkey Junior High Score Kit (hack,V1.2) + dkongjrj Donkey Kong Jr. (Japan) dkongjrm - Donkey Kong Jr. (bootleg on Moon Cresta hardware) + Donkey Kong Jr. (bootleg on Moon Cresta hardware, set 1) + + + dkongjrmc + Donkey Kong Jr. (bootleg on Moon Cresta hardware, set 2) dkongjrpb @@ -12450,13 +16963,73 @@ dkongo Donkey Kong (US set 2) + + dkongotr + Donkey Kong On the Run v1.02 + + + dkongp + Donkey Kong (Patched) + + + dkongpac + Donkey Kong (Pacman Graphics) + + + dkongpe + Donkey Kong: Pauline Edition Rev 5 (2013-04-22) + + + dkongran1 + Donkey Kong Randomized Edition v1.01 + + + dkongrev + Donkey Kong Reverse (Hack) + + + dkongss + Donkey Kong Skip Start v1.00 + + + dkongst + Donkey Kong Springs Trainer + + + dkongst2 + Donkey Kong Springs Trainer 2 + + + dkongtj + Donkey Kong Twisted Jungle v1.05 + dkongx - Donkey Kong II - Jumpman Returns (V1.2) (hack) + Donkey Kong II: Jumpman Returns (hack, V1.2) dkongx11 - Donkey Kong II - Jumpman Returns (V1.1) (hack) + Donkey Kong II: Jumpman Returns (hack, V1.1) + + + dkpace + Donkey Kong Pace + + + dkrainbow + Donkey Kong - Arcade Rainbow (hack) + + + dkrdemo + Donkey Kong Remix (Demo) + + + dkspkyrmx + Donkey Kong Spooky Remix (Hack) + + + dktrainer + Donkey Kong Trainer 1.01 dlair @@ -12466,6 +17039,10 @@ dlair2 Dragon's Lair 2: Time Warp (US v3.19) + + dlair2_200 + Dragon's Lair 2: Time Warp (US v2.00, AMOA prototype) + dlair2_211 Dragon's Lair 2: Time Warp (US v2.11) @@ -12476,7 +17053,7 @@ dlair2_312 - Dragon's Lair 2: Time Warp (US v3.12) + Dragon's Lair 2: Time Warp (Euro v3.12) dlair2_314 @@ -12510,6 +17087,14 @@ dlair2_319s Dragon's Lair 2: Time Warp (Spanish v3.19) + + dlair_1 + Dragon's Lair (US Beta 1, Pioneer PR-7820) + + + dlair_2 + Dragon's Lair (US Beta 2?, Pioneer PR-7820) + dlaira Dragon's Lair (US Rev. A, Pioneer PR-7820) @@ -12550,6 +17135,10 @@ dleuro Dragon's Lair (European) + + dleuroalt + Dragon's Lair (European, alternate) + dlital Dragon's Lair (Italian) @@ -12583,8 +17172,12 @@ Demolition Man (PX-5) - dmdtouch - Diamond Touch (0400433V, Local) + dmainevent + Main Event (Destron) + + + dmdfever + Diamond Fever (0200302V, NSW/ACT) dmndrby @@ -12596,19 +17189,27 @@ dmnfrnt - Demon Front (68k label V105, ROM M105XX 08/05/02) (ARM label V105, ROM 08/05/02 S105XX) + Demon Front / Moyu Zhanxian (68k label V105, ROM M105XX 08/05/02) (ARM label V105, ROM 08/05/02 S105XX) - dmnfrnta - Demon Front (68k label V102, ROM M102XX 06/19/02) (ARM label V102, ROM 05/24/02 S101XX) + dmnfrnt102 + Demon Front / Moyu Zhanxian (68k label V102, ROM M102XX 06/19/02) (ARM label V102, ROM 05/24/02 S101XX) - dmnfrntb - Demon Front (68k label V103, ROM M103XX 07/05/02) (ARM label V103, ROM 07/05/02 S103XX) + dmnfrnt103 + Demon Front / Moyu Zhanxian (68k label V103, ROM M103XX 07/05/02) (ARM label V103, ROM 07/05/02 S103XX) dmnfrntpcb - Demon Front (68k label V107KR, ROM M107KR 11/03/03) (ARM label V106KR, ROM 10/16/03 S106KR) (JAMMA PCB) + Demon Front V1.1 / Moyu Zhanxian V1.1 (68k label V107KR, ROM M107KR 11/03/03) (ARM label V106KR, ROM 10/16/03 S106KR) (JAMMA PCB) + + + dmnfrntpcba + Demon Front (VM105XX, S105XX, China, Single PCB Version) + + + dmodrbcc + Demolition Derby [TTL] dmx @@ -12630,29 +17231,53 @@ dncsprt Dancing Spirit (Russia) (Atronic) + + dngrtrck + Danger Track (Rally X bootleg) + dnmtdeka Dynamite Deka (J 960515 V1.000) doa - Dead or Alive (Model 2B, Revision B) + Dead or Alive (Model 2B, Revision C) doa2 - Dead or Alive 2 (JPN, USA, EXP, KOR, AUS) + Dead or Alive 2 + + + doa2a + Dead or Alive 2 (Rev A) doa2m - Dead or Alive 2 Millennium (JPN, USA, EXP, KOR, AUS) + Dead or Alive 2 Millennium doaa Dead or Alive (Model 2A, Revision A) + + doab + Dead or Alive (Model 2B, Revision B) + doapp - Dead Or Alive ++ (Japan) + Dead Or Alive ++ (Japan/USA/Export) + + + doappk + Dead Or Alive ++ (Korea) + + + dobouchn + Dobou-Chan (ver JAA) + + + docastl2 + Mr. Do's Castle (set 2) docastle @@ -12666,9 +17291,21 @@ docastleo Mr. Do's Castle (older) + + docastlo + Mr. Do's Castle (older) + dockman - Dock Man + Dock Man (set 1) + + + dockmanb + Dock Man (set 2) + + + dockmanc + Dock Man (set 3) dodgecty @@ -12690,13 +17327,21 @@ dodgem Dodgem + + dodgeman + Dodge Man + + + dodghero + Minna Atsumare! Dodge Hero + dogfgt Acrobatic Dog-Fight dogfgtj - Dog-Fight (Japan) + But-ten Ohara's Suit-Cha Luck-a Dog-Fight (Japan) dogfgtu @@ -12706,6 +17351,10 @@ dogfight Dog Fight (Thunderbolt) + + dogfightp + Dog Fight (Orca, prototype) + dogosokb Dogou Souken (Joystick hack bootleg) @@ -12714,10 +17363,18 @@ dogosoke Dogou Souken + + dogosokj + Dogou Souken (joystick hack bootleg) + dogpatch Dog Patch + + dogstdx + dogstation Deluxe + dogyuun Dogyuun @@ -12734,10 +17391,18 @@ dokaben Dokaben (Japan) + + dokaben2 + Dokaben 2 (Japan) + dokidoki Doki Doki Penguin Land + + dokodemo + Doko Demo Issho: Toro's Fishing + dokyusei Mahjong Doukyuusei @@ -12767,9 +17432,33 @@ Dolphin Treasure (0200424V, NSW/ACT) - dolphtra + dolphntra Dolphin Treasure (0100424V, NSW/ACT) + + dolphntrb + Dolphin Treasure (0100388V, NSW/ACT) + + + dolphntrce + Dolphin Treasure - Cash Express (AHG1607, US) + + + dolphntrcea + Dolphin Treasure - Cash Express (AHG1606, US) + + + dolphntrceb + Dolphin Treasure - Cash Express (AHG1519, US) + + + dolphntrql + Dolphin Treasure (0101250V, Queensland) + + + dolphntru + Dolphin Treasure (FHG4077-02, US) + domino Domino Man @@ -12790,6 +17479,10 @@ dominos Dominos + + dominos4 + Dominos 4 (Cocktail) + dommy Dommy @@ -12802,6 +17495,14 @@ dondenmj Don Den Mahjong [BET] (Japan) + + dondokdj + Don Doko Don (Japan) + + + dondokdu + Don Doko Don (US) + dondokod Don Doko Don (World) @@ -12818,6 +17519,10 @@ donghaer Donggul Donggul Haerong + + donight + Mr.Do's Nightmare (hack by Krazy Ivan) + donpachi DonPachi (US) @@ -12830,13 +17535,29 @@ donpachij DonPachi (Japan) + + donpachijs + DonPachi (Japan, Satsuei version) + donpachikr DonPachi (Korea) + + donpachj + DonPachi (Japan) + + + donpachk + DonPachi (Korea) + + + donpepito + Hola Don Pepito + dorachan - Dorachan + Dora-chan (Japan) doraemon @@ -12850,6 +17571,14 @@ dorodon2 Dorodon (set 2) + + dorunru2 + Do! Run Run (set 2) + + + dorunruc + Do! Run Run (Do's Castle hardware) + dorunrun Do! Run Run (set 1) @@ -12866,6 +17595,10 @@ dorunrunca Do! Run Run (Do's Castle hardware, set 2) + + dotriku2 + Dottori Kun (old version) + dotrikun Dottori Kun (new version) @@ -12874,13 +17607,17 @@ dotrikun2 Dottori Kun (old version) + + dotriman + Dottori-Man Jr. + dotron - Discs of Tron (Upright) + Discs of Tron (Upright, 10/4/83) dotrona - Discs of Tron (Upright alternate) + Discs of Tron (Upright, 9/22/83) dotrone @@ -12890,6 +17627,14 @@ doubledr Double Dragon (Neo-Geo) + + doubledrbh + Double Dragon (Boss hack) + + + doubledrsp + Double Dragon (Special 2017, hack) + douni Mr. Do vs. Unicorns @@ -12900,7 +17645,15 @@ downhill - Downhill Bikers (DH3 Ver. A) + Downhill Bikers (World, DH2 Ver. A) + + + downhillu + Downhill Bikers (US, DH3 Ver. A) + + + downtowj + DownTown (joystick hack) downtown @@ -12918,6 +17671,14 @@ downtownp DownTown / Mokugeki (prototype) + + dpatrol + Desert Patrol [TTL] + + + dpatrola + Desert Patrol (set 2) [TTL] + dphl Draw Poker HI-LO (M.Kramer) @@ -12968,7 +17729,7 @@ dracula - Dracula + Dracula (Pinball) dragchrn @@ -12984,7 +17745,7 @@ dragnfly - Dragonfly (Konami Endeavour) + Dragonfly (Konami Endeavour, Russia) dragngun @@ -12994,10 +17755,30 @@ dragngunj Dragon Gun (Japan) + + dragntr + Dragon Treasure (Rev B) (GDS-0030B) + + + dragntr2 + Dragon Treasure 2 (Rev A) (GDS-0037A) + + + dragntr3 + Dragon Treasure 3 (Rev A) (GDS-0041A) + + + dragntra + Dragon Treasure (Rev A) (GDS-0030A) + dragon Dragon + + dragonsh + Dragon's Heaven (development board) + dragoona Dragoon Might (ver AAB) @@ -13014,6 +17795,10 @@ dragsphr Dragon Sphere + + dragwld2 + Zhong Guo Long II (ver. 100C, China) + drakor Drakor @@ -13022,9 +17807,25 @@ drakton Drakton (DK conversion) + + draw88pkr + Draw 88 Poker (V2.0) + + + drbyocwa + Derby Owners Club World Edition (Rev A) + + + drbyocwb + Derby Owners Club World Edition (Rev B) + drbyocwc - Derby Owners Club World Edition (JPN, USA, EXP, KOR, AUS) (Rev C) + Derby Owners Club World Edition (Rev C) + + + drdmania + Dardomania (v2.1) dreambal @@ -13034,29 +17835,61 @@ dreamwld Dream World + + dreamwv + Dream Weaver (0200586V, NSW/ACT) + dremshpr Dream Shopper + + drgdance + Dragon Dance (V1.02J) + drgnbowl - Dragon Bowl + Dragon Bowl (set 1, encrypted program) + + + drgnbowla + Dragon Bowl (set 2, unencrypted program) drgnbstr Dragon Buster + + drgneye + Dragon's Eye (0100521V, NSW/ACT) + drgninja - Dragonninja (Japan) + Dragonninja (Japan revision 1) drgninjab Dragonninja (bootleg) + + drgninjab2 + Dragonninja (bootleg with 68705) + + + drgnlord + Dragon Lord (10173511, NSW/ACT) + + + drgnmgic + Dragon Magic (2J015711, NSW/ACT) + drgnmst - Dragon Master + Dragon Master (set 1) + + + drgnmst2 + Dragon Master (set 2) drgnunit @@ -13068,15 +17901,15 @@ drgnwrldv10c - Zhong Guo Long (China, V010C) + Zhongguo Long (China, V010C) drgnwrldv11h - Dong Fang Zhi Zhu (Hong Kong, V011H) + Dongfang Zhi Zhu (Hong Kong, V011H) drgnwrldv20j - Zhong Guo Long (Japan, V020J) + Zhongguo Long (Japan, V020J) drgnwrldv21 @@ -13084,12 +17917,16 @@ drgnwrldv21j - Zhong Guo Long (Japan, V021J) + Zhongguo Long (Japan, V021J) drgnwrldv30 Dragon World (World, V030O) + + drgnwrldv40k + Dragon World (Korea, V040K) + drgpunch Dragon Punch (Japan) @@ -13099,24 +17936,44 @@ Dragon World II (ver. 110X, Export) - drgw2c - Zhong Guo Long II (ver. 100C, China) + drgw2100c + Zhongguo Long II (ver. 100C, China) + + + drgw2100hk + Dungfong Zi Zyu II (ver. 100H, Hong Kong) - drgw2j + drgw2100j Chuugokuryuu II (ver. 100J, Japan) + + drgw2100x + Dragon World II (ver. 100X, Export) + + + drgw2101c + Zhongguo Long II (ver. 101C, China) + + + drgw2101j + Chuugokuryuu II (V101, Japan) + drgw3 - Dragon World 3 (ver. 106) + Dragon World 3 / Zhongguo Long 3 / Dungfong Zi Zyu 3 / Chuugokuryuu 3 Special (ver. 106) drgw3100 - Dragon World 3 (Japan, ver. 100) + Chuugokuryuu 3 Special (Japan, ver. 100) + + + drgw3103 + Chuugokuryuu 3 Special (Japan, ver. 103) drgw3105 - Dragon World 3 (ver. 105) + Dragon World 3 / Zhongguo Long 3 / Dungfong Zi Zyu 3 / Chuugokuryuu 3 Special (ver. 105) drhl @@ -13128,7 +17985,11 @@ dribling - Dribbling + Dribbling (set 1) + + + driblinga + Dribbling (set 2) driblingbr @@ -13138,6 +17999,10 @@ driblingo Dribbling (Olympia) + + driblino + Dribbling (Olympia) + drifto94 Drift Out '94 - The Hard Order (Japan) @@ -13146,13 +18011,21 @@ driftout Drift Out (Europe) + + driftoutct + Drift Out (Europe, Cameltry conversion) + driftoutj Drift Out (Japan) + + drius2do + Darius II (dual screen) (Japan old version) + drivedge - Driver's Edge + Driver's Edge (v1.6) driveout @@ -13160,7 +18033,7 @@ driveyes - Driver's Eyes (Japan) + Driver's Eyes (Japan) (1992/01/10, Main Ver 2.1, Sub Ver 1.1) drivfrcb @@ -13174,6 +18047,14 @@ drivfrcp Driving Force (Pac-Man conversion) + + drivfrcsg + Driving Force (Galaxian conversion, Seatongrove UK, E-0010) + + + drivfrcsga + Driving Force (Galaxian conversion, Seatongrove UK, E-0237) + drivfrct Top Racer (bootleg of Driving Force) @@ -13186,6 +18067,10 @@ drmario Vs. Dr. Mario + + drmcatch + Dream Catcher (10126721, NSW/ACT) + drmicro Dr. Micro @@ -13236,12 +18121,24 @@ drmn8m - DrumMania 8th Mix (G*C07 VER. JAA) + DrumMania 8th Mix (G*C38 VER. JAA) drmn9m DrumMania 9th Mix (G*D09 VER. JAA) + + drmna + DrumMania (GQ881 VER. JAD ALT CD) + + + drmnu + DrumMania (GQ881 VER. UAB) + + + drmred + Dream of the Red Chamber (10273811, NSW/ACT) + drtomy Dr. Tomy @@ -13250,6 +18147,10 @@ drtoppel Dr. Toppel's Adventure (World) + + drtoppela + Dr. Toppel's Adventure (World, alt?) + drtoppelj Dr. Toppel's Tankentai (Japan) @@ -13258,6 +18159,14 @@ drtoppelu Dr. Toppel's Adventure (US) + + drtopplj + Dr. Toppel's Tankentai (Japan) + + + drtopplu + Dr. Toppel's Adventure (US) + drw80pk2 Draw 80 Poker - Minn @@ -13268,12 +18177,20 @@ dsaber - Dragon Saber + Dragon Saber (World, DO2) + + + dsabera + Dragon Saber (World, older?) dsaberj Dragon Saber (Japan, Rev B) + + dsccr94j + Dream Soccer '94 (Japan) + dsem Dancing Stage Euro Mix (G*936 VER. EAA) @@ -13318,6 +18235,10 @@ dsoccr94j Dream Soccer '94 (Japan, M92 hardware) + + dsoccr94k + Dream Soccer '94 (Korea, M107 hardware) + dspirit Dragon Spirit (new version (DS3)) @@ -13330,6 +18251,10 @@ dspirit2 Dragon Spirit (DS2) + + dspirito + Dragon Spirit (old version) + dstage Dancing Stage - Internet Ranking Ver (GC845 VER. EBA) @@ -13338,6 +18263,14 @@ dstagea Dancing Stage (GN845 VER. EAA) + + dstbloom + Desert Bloom (0300111V, NSW/ACT) + + + dstblooma + Desert Bloom (0200111V, NSW/ACT) + dstlk Darkstalkers: The Night Warriors (Euro 940705) @@ -13368,7 +18301,7 @@ dtoyoken - Mahjong Dai Touyouken (Japan) + Mahjong Dai Touyouken [BET] (Japan) dtrvwz5 @@ -13386,14 +18319,26 @@ duckhunt Vs. Duck Hunt (set DH3 E) + + ducki + Duck Tales (FMV Demo) + dumpmtmt Dump Matsumoto (Japan, 8751 317-0011a) + + dumpump + Dump The Ump + dungdrag Dungeons & Dragons + + dungenmu + Dungeon Magic (US) + dungeonm Dungeon Magic (Ver 2.1O 1994/02/18) @@ -13408,7 +18353,7 @@ dunkmnia - Dunk Mania (Asia, DM2/VER.C) + Dunk Mania (World, DM2/VER.C) dunkmniajc @@ -13416,6 +18361,14 @@ dunkshot + Dunk Shot (Rev C, FD1089A 317-0022) + + + dunkshota + Dunk Shot (Rev A, FD1089A 317-0022) + + + dunkshoto Dunk Shot (FD1089A 317-0022) @@ -13430,6 +18383,10 @@ dvlrider Devil Riders + + dvlriderf + Devil Riders (French speech) + dvlriderg Devil Riders (German speech) @@ -13447,12 +18404,12 @@ Devil's Dare (Sound Only) - dw2001 - Dragon World 2001 (V100?, Japan) + dw + Dynasty Wars (World) - dw2v100x - Dragon World II (ver. 100X, Export) + dw2001 + Chuugokuryuu 2001 [Dragon World 2001] (V100 02/21/01 16:05:16, Japan) dw_l1 @@ -13476,19 +18433,39 @@ dwex - Dragon World 3 EX (ver. 100) + Dragon World 3 EX / Zhongguo Long 3 EX / Dungfong Zi Zyu 3 EX / Chuugokuryuu 3 EX (ver. 100) + + + dwex101cn + Dragon World 3 EX / Zhongguo Long 3 EX / Dungfong Zi Zyu 3 EX / Chuugokuryuu 3 EX (ver. 101CN) + + + dwi + DarkWing Duck (FMV Demo) + + + dwia + DarkWing Duck (FMV Demo, alt) + + + dwj + Tenchi wo Kurau (Japan) dwpc - Dragon World Pretty Chance (V101, Japan) + Zhongguo Long Pretty Chance [Dragon World Pretty Chance] (V110 03/19/02 11:13:16, China) + + + dwpc101j + Chuugokuryuu Pretty Chance [Dragon World Pretty Chance] (V101 09/26/01 10:23:26, Japan) dybb99 - Dynamite Baseball '99 (JPN) / World Series '99 (USA, EXP, KOR, AUS) (Rev B) + Dynamite Baseball '99 (Japan, Rev B) dybbnao - Dynamite Baseball NAOMI (JPN) + Dynamite Baseball NAOMI (Japan) dyger @@ -13500,7 +18477,7 @@ dygolf - Dynamic Golf / Virtua Golf (Rev A) (GDS-0009A) + Virtua Golf / Dynamic Golf (Rev A) (GDS-0009A) dynabb @@ -13510,17 +18487,25 @@ dynabb97 Dynamite Baseball 97 (Revision A) + + dynablsb + Dynablaster (bootleg) + dynablst Dynablaster / Bomber Man dynablstb - Dynablaster / Bomber Man (bootleg) + Dynablaster / Bomber Man (bootleg, set 1) dynablstb2 - Dynablaster / Bomber Man (bootleg, alt) + Dynablaster / Bomber Man (bootleg, set 2) + + + dynablstb3 + Dynablaster / Bomber Man (bootleg, set 3) dynabomb @@ -13534,6 +18519,14 @@ dynagear Dyna Gear + + dynajack + Dynamite Jack (01J00081, NSW/ACT) + + + dynajacku + Dynamite Jack (CHG1562, US) + dynamcop Dynamite Cop (Export, Model 2A) @@ -13546,6 +18539,14 @@ dynamcopc Dynamite Cop (USA, Model 2C) + + dynamoah + Air Hockey (6.12?, encrypted) + + + dynamoaha + Air Hockey (6.03, encrypted) + dynamski Dynamic Ski @@ -13564,23 +18565,27 @@ dynduke - Dynamite Duke (Europe set 1) + Dynamite Duke (Europe, 03SEP89) dyndukea - Dynamite Duke (Europe set 2) + Dynamite Duke (Europe, 25JUL89) dyndukej - Dynamite Duke (Japan) + Dynamite Duke (Japan, 03SEP89) + + + dyndukeja + Dynamite Duke (Japan, 25JUL89) dyndukeu - Dynamite Duke (US) + Dynamite Duke (US, 25JUL89) dynobop - Dyno Bop + Dyno Bop (V1.1) dynwar @@ -13614,18 +18619,46 @@ eagle3 Eagle (set 3) + + eaglrock + Eagle Rock - Cash Express (0151126, US) + eaglshot - Eagle Shot Golf + Eagle Shot Golf (US) + + + eaglshotj + Eagle Shot Golf (Japan, bootleg?) + + + eaglshta + Eagle Shot Golf (alt) + + + earthinv + Super Earth Invasion earthjkr - U.N. Defense Force: Earth Joker (Japan) + U.N. Defense Force: Earth Joker (US / Japan, set 1) + + + earthjkra + U.N. Defense Force: Earth Joker (US / Japan, set 2) + + + earthjkrb + U.N. Defense Force: Earth Joker (US / Japan, set 3) earthjkrp U.N. Defense Force: Earth Joker (Japan, prototype?) + + eastland + Easter Island - Cash Express (0151117, US) + eatpm_4g Elvira and the Party Monsters (LG-4) @@ -13634,6 +18667,10 @@ eatpm_4u Elvira and the Party Monsters (LU-4) + + eatpm_f1 + Elvira and the Party Monsters (LF-1) French + eatpm_l1 Elvira and the Party Monsters (LA-1) @@ -13654,6 +18691,10 @@ eballchp Eight Ball Champ + + eballchps + Eight Ball Champ (Spain, Z-Pinball hardware) + eballd14 Eight Ball Deluxe (rev. 14) @@ -14716,7 +19757,7 @@ ec_oxocl - Oxo Club (Electrocoin) (?) + Oxo Club (Electrocoin) (?) ec_oxogb @@ -15560,20 +20601,28 @@ eca - Emergency Call Ambulance + Emergency Call Ambulance (Export) + + + ecaj + Emergency Call Ambulance (Japan) ecap Emergency Call Ambulance (US location test?) - ecax - Emergency Call Ambulance (Export) + ecau + Emergency Call Ambulance (USA) eclipse Eclipse + + ecofghta + Eco Fighters (Asia 931203) + ecofghtr Eco Fighters (World 931203) @@ -15600,12 +20649,20 @@ edf - E.D.F. : Earth Defense Force + E.D.F. : Earth Defense Force (set 1) + + + edfa + E.D.F. : Earth Defense Force (set 2) edfbl E.D.F. : Earth Defense Force (bootleg) + + edfp + E.D.F. : Earth Defense Force (Japan, prototype) + edfu E.D.F. : Earth Defense Force (North America) @@ -15626,6 +20683,22 @@ edrandyj The Cliffhanger - Edward Randy (Japan ver 3) + + eeekk + Eeekk! + + + eeekkp + Eeekk! (Pac-Man conversion) + + + efce + Enchanted Forest - Cash Express (0151084, US) + + + efdt + El Fin Del Tiempo + eforest Enchanted Forest (12XF528902, US) @@ -15638,6 +20711,26 @@ eforestb Enchanted Forest (3VXFC5343, New Zealand) + + eforsta5 + Enchanted Forest (0400122V, NSW/ACT) + + + eforsta5ce + Enchanted Forest - Cash Express (CHG1536, US) + + + eforsta5cea + Enchanted Forest - Cash Express (AHG1615, US) + + + eforsta5u + Enchanted Forest (JHG0415-03, US) + + + eforsta5ua + Enchanted Forest (JHG0415-99, US) + egghunt Egg Hunt @@ -15650,6 +20743,14 @@ eggs Eggs (USA) + + eggsplc + Eggs Playing Chicken + + + eggsrccm + Eggstreme Riches - Mr. Cashman (0351149, US) + eggventr Egg Venture (Release 10) @@ -15675,20 +20776,28 @@ Egg Venture Deluxe - ehrgeiz - Ehrgeiz (US, EG3/VER.A) + eggvntdx + Egg Venture Deluxe - ehrgeizaa - Ehrgeiz (Asia, EG2/VER.A) + ehrgeiz + Ehrgeiz (World, EG2/VER.A) ehrgeizja Ehrgeiz (Japan, EG1/VER.A) + + ehrgeizua + Ehrgeiz (US, EG3/VER.A) + eightbll - Eight Ball + Eight Ball (rev. 20) + + + eightblo + Eight Ball (rev. 17) eightfrc @@ -15696,19 +20805,23 @@ eightman - Eight Man (NGM-025)(NGH-025) + Eight Man (NGM-025 ~ NGH-025) einning Extra Inning / Ball Park II + + einnings + Extra Inning + ejanhs - E-Jan High School (Japan) + E Jong High School (Japan) ejihon - Ejihon Tantei Jimusyo (J 950613 V1.000) + Ejihon Tantei Jimusho (J 950613 V1.000) ejollyx5 @@ -15730,10 +20843,26 @@ elandore Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006) + + eldoradd + El Dorado + eldorado El Dorado City of Gold + + eldoralg + Eldorado (4.2) + + + eldorda5 + El Dorado (0100652V, NSW/ACT) + + + elecyoy2 + The Electric Yo-Yo (set 2) + elecyoyo The Electric Yo-Yo (set 1) @@ -15754,14 +20883,26 @@ elephfmb Elephant Family (Italian, old) + + elevatob + Elevator Action (bootleg) + elevator - Elevator Action + Elevator Action (BA3, 4 PCB version, 1.1) + + + elevatora + Elevator Action (EA, 5 PCB version, 1.1) elevatorb Elevator Action (bootleg) + + elfin + Elfin + elgrande El Grande - 5 Card Draw (New) @@ -15786,6 +20927,14 @@ elim4p Eliminator (4 Players, prototype) + + elsygame + unknown Elsy game + + + elsypokr + unknown Elsy poker + elvact2u Elevator Action II (Ver 2.2A 1995/02/20) @@ -15902,10 +21051,30 @@ emeraldaja Emeraldia (Japan) + + emerldaa + Emeraldia (Japan) + + + emjjoshi + E-Touch Mahjong Series #2: Joshiryou de NE! (Japan) + + + emjscanb + E-Touch Mahjong Series #6: Scandal Blue - Midara na Daishou (Japan) + + + emjtrapz + E-Touch Mahjong Series #7: Trap Zone - Yokubou no Kaisoku Densha (Japan) + empcity Empire City: 1931 (bootleg?) + + empcityfr + Empire City: 1931 (France) + empcityi Empire City: 1931 (Italy) @@ -15923,16 +21092,32 @@ The Empire Strike Back - enchfrst - Enchanted Forest (0400122V, Local) + enchantr + Enchantress (20000711, NSW/ACT) enchlamp - Enchanted Lamp (Konami Endeavour) + Enchanted Lamp (Konami Endeavour, Russia) + + + encspell + Enchanted Spell (10257011, NSW/ACT) endless - Gundam Wing: Endless Duel (SNES bootleg) + Gundam Wing: Endless Duel (SNES bootleg, set 1) + + + endlessa + Gundam Wing: Endless Duel (SNES bootleg, set 2) + + + endrichs + Endless Riches (Ver 1.21) + + + endrichsa + Endless Riches (Ver 1.20) endurob2 @@ -15944,12 +21129,28 @@ enduror - Enduro Racer (YM2151, FD1089B 317-0013A) + Enduro Racer (Rev A, YM2151, FD1089B 317-0013A) enduror1 Enduro Racer (YM2203, FD1089B 317-0013A) + + enduror1d + Enduro Racer (bootleg of YM2203, FD1089B 317-0013A set) + + + endurora + Enduro Racer (Rev A, YM2151, mask ROM sprites, FD1089B 317-0013A) + + + endurorb + Enduro Racer (YM2151, FD1089B 317-0013A) + + + endurord + Enduro Racer (bootleg of Rev A, YM2151, FD1089B 317-0013A set) + enforce Enforce (World) @@ -15974,6 +21175,14 @@ enigma2b Phantoms II (Space Invaders hardware) + + enmadaio + Enma Daio (Japan) + + + eott + Eyes of the Tiger (10002011, NSW/ACT) + ep_21clb Twenty One Club (Maygay) (EPOCH) (3.2, set 1) @@ -16220,7 +21429,7 @@ ep_bjclb - Blackjack Club, The (Global) (EPOCH) + The Blackjack Club (Global) (EPOCH) ep_braid @@ -17532,19 +22741,19 @@ ep_ijcl - Italian Job Club (Maygay) (EPOCH) (2.6, set 1) + The Italian Job Club (Maygay) (EPOCH) (2.6, set 1) ep_ijcla - Italian Job Club (Maygay) (EPOCH) (2.5, set 2) + The Italian Job Club (Maygay) (EPOCH) (2.5, set 2) ep_ijob - Italian Job (Maygay) (EPOCH, v2.1) + The Italian Job (Maygay) (EPOCH, v2.1) ep_ijoba - Italian Job (Maygay) (EPOCH, v1.1) + The Italian Job (Maygay) (EPOCH, v1.1) ep_imj @@ -17564,19 +22773,19 @@ ep_itjb2 - Italian Job 2 (Maygay) (EPOCH) (1.5, set 1) + The Italian Job 2 (Maygay) (EPOCH) (1.5, set 1) ep_itjb2a - Italian Job 2 (Maygay) (EPOCH) (1.5, set 2) + The Italian Job 2 (Maygay) (EPOCH) (1.5, set 2) ep_itjb2b - Italian Job 2 (Maygay) (EPOCH) (2.3, set 3) + The Italian Job 2 (Maygay) (EPOCH) (2.3, set 3) ep_itjb2c - Italian Job 2 (Maygay) (EPOCH) (2.3, set 4) + The Italian Job 2 (Maygay) (EPOCH) (2.3, set 4) ep_itjb3 @@ -17880,31 +23089,31 @@ ep_monrt - Money Returns Club, The (Global) (EPOCH) (set 1) + The Money Returns Club (Global) (EPOCH) (set 1) ep_monrta - Money Returns Club, The (Global) (EPOCH) (set 2) + The Money Returns Club (Global) (EPOCH) (set 2) ep_monrtb - Money Returns Club, The (Global) (EPOCH) (set 3) + The Money Returns Club (Global) (EPOCH) (set 3) ep_monrtc - Money Returns Club, The (Global) (EPOCH) (set 4) + The Money Returns Club (Global) (EPOCH) (set 4) ep_monrtd - Money Returns Club, The (Global) (EPOCH) (set 5) + The Money Returns Club (Global) (EPOCH) (set 5) ep_monrte - Money Returns Club, The (Global) (EPOCH) (set 6) + The Money Returns Club (Global) (EPOCH) (set 6) ep_monrtf - Money Returns Club, The (Global) (EPOCH) (set 7) + The Money Returns Club (Global) (EPOCH) (set 7) ep_monsh @@ -19182,6 +24391,10 @@ esclwrldg Escape from the Lost World (German) + + escmars + Escape from Mars (bootleg of Lunar Rescue) + escounts Every Second Counts (39-360-053) @@ -19218,6 +24431,10 @@ esha_pa1 Earthshaker (Prototype) (PA-1) + + esha_pa4 + Earthshaker (Prototype) (PA-4) + esha_pr4 Earthshaker (Family version) (PR-4) @@ -19232,12 +24449,24 @@ espgal2 - Espgaluda II (2005/11/14 MASTER VER) + Espgaluda II (2005/11/14 MASTER VER, newer CV1000-B PCB) + + + espgal2a + Espgaluda II (2005/11/14 MASTER VER, original CV1000-B PCB) + + + espgalbl + Espgaluda (2003/10/15 Master Ver, bootleg cartridge conversion) espial Espial (Europe) + + espiale + Espial (Europe) + espialu Espial (US?) @@ -19254,25 +24483,53 @@ espradejo ESP Ra.De. (Japan, Ver. 98/04/14) + + espradeo + ESP Ra.De. (Japan Ver 1998 4-14) + + + estrike + Eagle Strike (40289711, NSW/ACT) + eswat - E-Swat - Cyber Police (set 4, World, FD1094 317-0130) + E-Swat - Cyber Police (set 4, World) (FD1094 317-0130) eswatbl - E-Swat - Cyber Police (bootleg) + E-Swat - Cyber Police (bootleg, set 1) + + + eswatbl2 + E-Swat - Cyber Police (bootleg, set 2) + + + eswatd + E-Swat - Cyber Police (set 4, World) (bootleg of FD1094 317-0130 set) eswatj - E-Swat - Cyber Police (set 2, Japan, FD1094 317-0128) + E-Swat - Cyber Police (set 2, Japan) (FD1094 317-0128) eswatj1 - E-Swat - Cyber Police (set 1, Japan, FD1094 317-0131) + E-Swat - Cyber Police (set 1, Japan) (FD1094 317-0131) + + + eswatj1d + E-Swat - Cyber Police (set 1, Japan) (bootleg of FD1094 317-0131 set) + + + eswatjd + E-Swat - Cyber Police (set 2, Japan) (bootleg of FD1094 317-0128 set) eswatu - E-Swat - Cyber Police (set 3, US, FD1094 317-0129) + E-Swat - Cyber Police (set 3, US) (FD1094 317-0129) + + + eswatud + E-Swat - Cyber Police (set 3, US) (bootleg of FD1094 317-0129 set) eto @@ -19294,6 +24551,14 @@ euroch92 Euro Champ '92 (World) + + eurodsr + Euro Double Star Record (ver.1.2) + + + eurogael + Euro League (Gaelco bootleg, Modular System) + eurogame The Euro Game (set 1) @@ -19306,6 +24571,10 @@ europass Euro Pass (Ver 1.1) + + europl01 + EuroPlay 2001 + evelknie Evel Knievel @@ -19338,6 +24607,14 @@ excalibr Excalibur + + excalibrf + Excalibur (French) + + + excalibrg + Excalibur (German) + excelsr Excelsior (set 1) @@ -19350,12 +24627,20 @@ excitbj Exciting Black Jack + + excitbkj + Vs. Excitebike (Japan) + excitebk + Vs. Excitebike (set EB4-3 E) + + + excitebkj Vs. Excitebike (set EB4-4 A) - excitebka + excitebko Vs. Excitebike (set EB4-3 ?) @@ -19366,10 +24651,22 @@ exctleag Excite League (FD1094 317-0079) + + exctleagd + Excite League (bootleg of FD1094 317-0079 set) + exctscc2 Exciting Soccer II + + exctscca + Exciting Soccer (alternate music) + + + exctsccb + Exciting Soccer (bootleg) + exctsccr Exciting Soccer @@ -19404,7 +24701,15 @@ exerionb - Exerion (bootleg) + Exerion (bootleg, set 1) + + + exerionb2 + Exerion (bootleg, set 2) + + + exerionba + Exerion (Assa, bootleg) exeriont @@ -19416,6 +24721,10 @@ exerizerb + Exerizer (bootleg) + + + exerizrb Exerizer (Japan) (bootleg) @@ -19428,7 +24737,11 @@ explbrkr - Explosive Breaker + Explosive Breaker (World) + + + explbrkrk + Explosive Breaker (Korea) explorer @@ -19448,7 +24761,19 @@ exsafar - Safari (Russia) (Extrema) + Safari (Extrema, Ukraine, V. 43.14) + + + exsafara + Safari (Extrema, Ukraine, V. 43.08) + + + exsafarb + Safari (Extrema, Ukraine, V. 42.07) + + + exsafarc + Safari (Extrema, Ukraine, V. 42.04) extdwnhl @@ -19468,15 +24793,23 @@ extrmatnu - Extermination (US) + Extermination (US, World Games) + + + extrmatnur + Extermination (US, Romstar) extrmth - Treasure Hunt (Russia) (Extrema) + Treasure Hunt (Extrema, Ukraine, V. 34.03) + + + extrmtha + Treasure Hunt (Extrema, Ukraine, V. 34.02) extrmti - Treasure Island (Russia) (Extrema) + Treasure Island (Extrema, Ukraine, V. 32.49) exvania @@ -19518,21 +24851,29 @@ eyeszacb Eyes (bootleg set 2, decrypted) + + ez2d2m + Ez2dancer 2nd Move + eztouch EZ Touch (v116 China) f14_l1 - F14 Tomcat (L-1) + F-14 Tomcat (L-1) f14_p3 - F14 Tomcat (P-3) + F-14 Tomcat (P-3) f14_p4 - F14 Tomcat (P-4) + F-14 Tomcat (P-4) + + + f14_p5 + F-14 Tomcat (P-5) f15se @@ -19548,31 +24889,55 @@ f1dreamb - F-1 Dream (bootleg) + F-1 Dream (bootleg, set 1) + + + f1dreamba + F-1 Dream (bootleg, set 2) f1en - F1 Exhaust Note + F1 Exhaust Note (World, Rev A) + + + f1enj + F1 Exhaust Note (Japan, Rev A) + + + f1enu + F1 Exhaust Note (US, Rev A) f1gp - F-1 Grand Prix + F-1 Grand Prix (set 1) f1gp2 F-1 Grand Prix Part II + + f1gpa + F-1 Grand Prix (set 2) + f1gpb F-1 Grand Prix (Playmark bootleg) f1gpp - F1 Grand Prix + F1 Grand Prix (Nuova Bell Games) f1gpstar - Grand Prix Star + Grand Prix Star (ver 4.0) + + + f1gpstar2 + Grand Prix Star (ver 2.0) + + + f1gpstar3 + Grand Prix Star (ver 3.0) f1gpstr2 @@ -19586,25 +24951,33 @@ f1lapj F1 Super Lap (Japan) + + f1lapt + F1 Super Lap (World, Unprotected) + f1superb - F1 Super Battle + F-1 Super Battle f355 - Ferrari F355 Challenge + Ferrari F355 Challenge (deluxe, no link) - f355bios - Naomi Ferrari F355 Challenge Bios + f355p + Ferrari F355 Challenge (private show version) f355twin - Ferrari F355 Challenge (Twin) + Ferrari F355 Challenge (twin/deluxe) + + + f355twinp + Ferrari F355 Challenge (twin/deluxe, preview) f355twn2 - Ferrari F355 Challenge 2 (Twin) + Ferrari F355 Challenge 2 - International Course Edition (twin/deluxe) fa @@ -19612,11 +24985,19 @@ faceoff - Face Off (Japan) + Face Off (Japan 2 Players) + + + faceoffh + Face-Off (EM Bubble Hockey) faeton - Faeton + Faeton (7 digits) + + + faeton6d + Faeton (6 digits) fairyl2 @@ -19678,13 +25059,25 @@ fantasiab Fantasia (940429 PCB, set 2) + + fantasian + Fantasia (940803 PCB) + fantastc Fantastic (Galaga conversion on Galaxian hardware) fantasy - Fantasy (World) + fantasy + + + fantasyg + Fantasy (Germany, set 1) + + + fantasyg2 + Fantasy (Germany, set 2) fantasyj @@ -19722,6 +25115,18 @@ fantsia2a Fantasia II (Less Explicit) + + fantsia2n + Fantasia II (1998) + + + fantstry + Fantasy Story (set 1) + + + fantstrya + Fantasy Story (set 2) + fantsy95 Fantasy '95 @@ -19738,6 +25143,14 @@ fantzn2xp Fantasy Zone II - The Tears of Opa-Opa (System 16C version, prototype) + + fantzn2xps2 + Fantasy Zone II - The Tears of Opa-Opa (System 16C, PS2 data file) + + + fantznta + Fantasy Zone Time Attack (System 16B, PS2 data file) + fantzone Fantasy Zone (Rev A, unprotected) @@ -19746,6 +25159,10 @@ fantzone1 Fantasy Zone (unprotected) + + fantzonee + Fantasy Zone (FD1089B 317-0016) + fantzonep Fantasy Zone (317-5000) @@ -19754,6 +25171,18 @@ fantzonepr Fantasy Zone (prototype) + + fantzoneta + Fantasy Zone (Time Attack, bootleg) + + + fantzono + Fantasy Zone (Old Ver.) + + + fanzonem + Fantasy Zone (medal game, REV.A) (J 990202 V1.000) + farfalla Farfalla @@ -19788,12 +25217,20 @@ fastdraw - Fast Draw Showdown v1.3 + Fast Draw Showdown (v1.31) + + + fastdraw_130 + Fast Draw Showdown (v1.30) fastdrwp Fast Draw (poker conversion kit)? + + fastfort + Fast Fortune (0100651V, NSW/ACT) + fastfred Fast Freddie @@ -19802,6 +25239,10 @@ fastlane Fast Lane + + fasttrack + Fast Track + fateulc Fate: Unlimited Codes (FUD1 ver. A) @@ -19810,13 +25251,25 @@ fateulcb Fate: Unlimited Codes (bootleg) + + fatfursa + Fatal Fury Special / Garou Densetsu Special (set 2) + fatfursp - Fatal Fury Special / Garou Densetsu Special (set 1)(NGM-058)(NGH-058) + Fatal Fury Special / Garou Densetsu Special (NGM-058 ~ NGH-058, set 1) fatfurspa - Fatal Fury Special / Garou Densetsu Special (set 2)(NGM-058)(NGH-058) + Fatal Fury Special / Garou Densetsu Special (NGM-058 ~ NGH-058, set 2) + + + fatfurspb + Fatal Fury Special (SNES bootleg) + + + fatfurspbs + Fatal Fury Special / Garou Densetsu Special (Optional Hidden Character Third Edition) fatfurwa @@ -19824,15 +25277,31 @@ fatfury1 - Fatal Fury - King of Fighters / Garou Densetsu - shukumei no tatakai (NGM-033)(NGH-033) + Fatal Fury - King of Fighters / Garou Densetsu - Shukumei no Tatakai (NGM-033 ~ NGH-033) + + + fatfury1bh + Fatal Fury - King of Fighters / Garou Densetsu - shukumei no tatakai (Boss Hack by Yumeji) fatfury2 - Fatal Fury 2 / Garou Densetsu 2 - arata-naru tatakai (NGM-047)(NGH-047) + Fatal Fury 2 / Garou Densetsu 2 - Arata-naru Tatakai (NGM-047 ~ NGH-047) + + + fatfury2a + Fatal Fury 2 / Garou Densetsu 2 - arata-naru tatakai (NGM-047) fatfury3 - Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - haruka-naru tatakai (NGM-069)(NGH-069) + Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - Haruka-naru Tatakai (NGM-069 ~ NGH-069) + + + fatfury3a + Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - haruka-naru tatakai (NGM-069)(NGH-069) (alternate set) + + + fatfury3bh + Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - haruka-naru tatakai (Ancient Battles Resurgence 2015-03-13) fathom @@ -20062,6 +25531,10 @@ fbaitmcu Fisherman's Bait - Marlin Challenge (GX889 VER. UA) + + fball + Fire Ball (FM Work) + fball_ii Fireball II @@ -20084,7 +25557,7 @@ fbfrenzy - Football Frenzy (NGM-034)(NGH-034) + Football Frenzy (NGM-034 ~ NGH-034) fcnudge @@ -20102,10 +25575,42 @@ fcnudgeo3 Fruit Carnival Nudge (Version 1.7) + + fcockt + Fruit Cocktail (030505 World) + fcockt2 Fruit Cocktail 2 (080707 Russia) + + fcockt2_10 + Fruit Cocktail 2 (110111 Entertainment A) + + + fcockt2_11 + Fruit Cocktail 2 (110124 Entertainment A) + + + fcockt2_12 + Fruit Cocktail 2 (110204 Entertainment A) + + + fcockt2_13 + Fruit Cocktail 2 (110311 Entertainment B) + + + fcockt2_14 + Fruit Cocktail 2 (140526 Entertainment B) + + + fcockt2_15 + Fruit Cocktail 2 (110411 Entertainment C) + + + fcockt2_2 + Fruit Cocktail 2 (080904 Russia) + fcockt2_3 Fruit Cocktail 2 (080909 World) @@ -20122,10 +25627,18 @@ fcockt2_4b Fruit Cocktail 2 (bootleg, 081105, banking address hack, no credit limit) + + fcockt2_4c + Fruit Cocktail 2 (bootleg, 081105, VIDEO GAME-1 FR02) + fcockt2_4d Fruit Cocktail 2 (bootleg, 081105, banking address hack, payout percentage 70) + + fcockt2_4e + Fruit Cocktail 2 (bootleg, 081105, LOTTOGAME (I)) + fcockt2_4f Fruit Cocktail 2 (bootleg, 081105, LOTOS FR02) @@ -20136,12 +25649,20 @@ fcockt2_6 - Fruit Cocktail 2 (090528 Lottery) + Fruit Cocktail 2 (090525 Lottery) fcockt2_7 Fruit Cocktail 2 (090813 Entertainment) + + fcockt2_8 + Fruit Cocktail 2 (100412 Entertainment X) + + + fcockt2_9 + Fruit Cocktail 2 (101208 Entertainment N) + fcockt2a Fruit Cocktail 2 (bootleg, 080707, banking address hack) @@ -20162,10 +25683,50 @@ fcockt_14 Fruit Cocktail (090708 Entertainment) + + fcockt_15 + Fruit Cocktail (100324 Entertainment X) + + + fcockt_16 + Fruit Cocktail (100331 Entertainment X) + + + fcockt_17 + Fruit Cocktail (101208 Entertainment N) + + + fcockt_18 + Fruit Cocktail (110111 Entertainment A) + + + fcockt_19 + Fruit Cocktail (110124 Entertainment A) + + + fcockt_2 + Fruit Cocktail (030512 World) + + + fcockt_20 + Fruit Cocktail (110204 Entertainment A) + + + fcockt_21 + Fruit Cocktail (110311 Entertainment B) + + + fcockt_22 + Fruit Cocktail (140526 Entertainment B) + fcockt_3 Fruit Cocktail (030623 World) + + fcockt_4 + Fruit Cocktail (031028 World) + fcockt_5 Fruit Cocktail (031111 World) @@ -20256,7 +25817,15 @@ fenix - Fenix (bootleg of Phoenix) + Fenix (Orio bootleg of Phoenix) + + + fenixn + Fenix (Niemer bootleg of Phoenix) + + + feverch + Fever Chance (W-6) feversoc @@ -20266,18 +25835,34 @@ feversos Fever SOS (International, Ver. 98/09/25) + + ffantasa + Fighting Fantasy (Japan) + ffantasy - Fighting Fantasy (Japan revision 2) + Fighting Fantasy (Japan revision 3) ffantasya Fighting Fantasy (Japan) + + ffantasyb + Fighting Fantasy (Japan revision ?) + ffantasybl Fighting Fantasy (bootleg with 68705) + + ffantasyj + Fighting Fantasy (Japan revision 2) + + + ffantasym + Fighting Fantasy (Modular System) + ffight Final Fight (World, set 1) @@ -20286,14 +25871,30 @@ ffight2b Final Fight 2 (SNES bootleg) + + ffight3b + Final Fight 3 (SNES bootleg) + ffighta Final Fight (World, set 2) + + ffightae + Final Fight 30th Anniversary Edition + ffightbl Final Fight (bootleg) + + ffightbla + Final Fight (bootleg on Final Crash PCB) + + + ffightblb + Final Fight (bootleg with single OKI) + ffightj Final Fight (Japan) @@ -20308,6 +25909,10 @@ ffightj3 + Final Fight (Japan 900405) + + + ffightj4 Final Fight (Japan 900613) @@ -20322,12 +25927,20 @@ ffightu1 Final Fight (USA, set 2) + + ffightu2 + Final Fight (USA, set 3) + ffightua Final Fight (USA 900112) ffightub + Final Fight (USA 900424) + + + ffightuc Final Fight (USA 900613) @@ -20336,7 +25949,15 @@ ffreveng - Final Fight Revenge (JUET 990714 V1.000) + Final Fight Revenge / Final Revenge (JUET 990930 V1.100) + + + ffrevng10 + Final Fight Revenge / Final Revenge (JUET 990714 V1.000) + + + ffruits + Frantic Fruits ffv101 @@ -20346,6 +25967,78 @@ ffv104 Flipper Football (v1.04) + + fg_1000af + Family Guy v10.0 (English,French) + + + fg_1000ag + Family Guy v10.0 (English,German) + + + fg_1000ai + Family Guy v10.0 (English,Italian) + + + fg_1000al + Family Guy v10.0 (English,Spanish) + + + fg_110af + Family Guy v11.0 (English,French) + + + fg_110ag + Family Guy v11.0 (English,German) + + + fg_110ai + Family Guy v11.0 (English,Italian) + + + fg_110al + Family Guy v11.0 (English,Spanish) + + + fg_120af + Family Guy v12.0 (English,French) + + + fg_120ag + Family Guy v12.0 (English,German) + + + fg_120ai + Family Guy v12.0 (English,Italian) + + + fg_120al + Family Guy v12.0 (English,Spanish) + + + fg_300ai + Family Guy v3.0 (English,Italian) + + + fg_400a + Family Guy v4.0 (English) + + + fg_400ag + Family Guy v4.0 (English,German) + + + fg_700af + Family Guy v7.0 (English,French) + + + fg_700al + Family Guy v7.0 (English,Spanish) + + + fg_800al + Family Guy v8.0 (English,Spanish) + fghtatck Fighter & Attacker (US) @@ -20356,8 +26049,16 @@ fghthist + Fighter's History (World ver 43-09, DE-0395-1 PCB) + + + fghthista Fighter's History (World ver 43-07, DE-0380-2 PCB) + + fghthistb + Fighter's History (World ver 43-05, DE-0380-2 PCB) + fghthistj Fighter's History (Japan ver 41-07, DE-0395-1 PCB) @@ -20372,10 +26073,18 @@ fghthistu - Fighter's History (US ver 42-05, DE-0395-1 PCB) + Fighter's History (US ver 42-09, DE-0396-0 PCB) fghthistua + Fighter's History (US ver 42-06, DE-0395-1 PCB) + + + fghthistub + Fighter's History (US ver 42-05, DE-0395-1 PCB) + + + fghthistuc Fighter's History (US ver 42-03, DE-0380-2 PCB) @@ -20408,31 +26117,43 @@ fgtlayer - Fighting Layer (Japan, FTL1/VER.A) + Fighting Layer (FTL3/VER.A) + + + fgtlayerj + Fighting Layer (Japan, FTL0/VER.A) fh_905h - Funhouse 9.05H + Funhouse (9.05H) + + + fh_l2 + Funhouse (L-2) fh_l3 - Funhouse L-3 + Funhouse (L-3) fh_l4 - Funhouse L-4 + Funhouse (L-4) fh_l5 - Funhouse L-5 + Funhouse (L-5) fh_l9 - Funhouse L-9 (SL-2m) + Funhouse (L-9, SL-2m) fh_l9b - Funhouse L-9 (SL-2m) Bootleg Improved German translation + Funhouse (L-9, SL-2m, bootleg improved German translation) + + + fh_pa1 + Funhouse (L-2, prototype PA-1 System 11 sound) fhawk @@ -20454,16 +26175,40 @@ fhuntera Fortune Hunter (2XF5196I02, USA) + + fi6845 + Fast Invaders (6845 version) + + + fi8275 + Fast Invaders (8275 version) + + + fiches + Les Fiches (ver 1.3) + + + fiches12 + Les Fiches (ver 1.2) + + + fidlstix + Fiddle Stix (1st Rev) + fieldday Field Day fightfev - Fight Fever (set 1) + Fight Fever / Wang Jung Wang (set 1) fightfeva + Fight Fever / Wang Jung Wang (set 2) + + + fightfva Fight Fever (set 2) @@ -20476,7 +26221,11 @@ filthyr - Filthy Rich (Russia) + Filthy Rich (English) + + + filthyrr + Filthy Rich (Russian) finalap2 @@ -20488,7 +26237,7 @@ finalap3 - Final Lap 3 (World, set 1) + Final Lap 3 (World, Rev C) finalap3a @@ -20504,19 +26253,31 @@ finalap3jc - Final Lap 3 (Japan - Rev C) + Final Lap 3 (Japan, Rev C) + + + finalapc + Final Lap (Rev C) + + + finalapd + Final Lap (Rev D) finalapr Final Lap R (Rev. B) + + finalapr1 + Final Lap R + finalaprj Final Lap R (Japan Rev. C) - finalapro - Final Lap R + finalaprj1 + Final Lap R (Japan Rev. B) finalb @@ -20538,9 +26299,17 @@ finalgdr Final Godori (Korea, version 2.20.5915) + + finalizb + Finalizer - Super Transformation (bootleg) + finalizr - Finalizer - Super Transformation + Finalizer - Super Transformation (set 1) + + + finalizra + Finalizer - Super Transformation (set 2) finalizrb @@ -20566,6 +26335,14 @@ finallapjc Final Lap (Japan, Rev C) + + finalp2j + Final Lap 2 (Japan) + + + finalp3a + Final Lap 3 (World) + finalttr Final Tetris @@ -20584,7 +26361,7 @@ finfurl - Final Furlong (FF2 Ver. A) + Final Furlong (World, FF2 Ver. A) finfurl2 @@ -20594,10 +26371,22 @@ finfurl2j Final Furlong 2 (Japan) + + finlapjb + Final Lap (Japan - Rev B) + + + finlapjc + Final Lap (Japan - Rev C) + finlarch Final Arch (J 950714 V1.001) + + fire_l2 + Fire! (L-2) + fire_l3 Fire! (L-3) @@ -20610,6 +26399,10 @@ fireactd Fire Action Deluxe + + fireball + Fireball + firebarr Fire Barrel (Japan) @@ -20626,6 +26419,10 @@ firebird Hot Fire Birds + + firednc + Fire Dancer (20184911, NSW/ACT) + firefox Fire Fox (set 1) @@ -20636,7 +26433,11 @@ firehawk - Fire Hawk + Fire Hawk (World) / Huohu Chuanshuo (China) (horizontal) + + + firehawkv + Fire Hawk (World) / Huohu Chuanshuo (China) (switchable orientation) firemntn @@ -20662,8 +26463,16 @@ fireshrkdh Fire Shark (Korea, set 2, harder) + + firetpbl + Fire Trap (Japan bootleg) + firetrap + Fire Trap (US, rev A) + + + firetrapa Fire Trap (US) @@ -20682,17 +26491,33 @@ firstcl First Class Traveller (set 1) + + fisco400 + Cisco/Fisco 400 [TTL] + fishfren Fishin' Frenzy (prototype) + + fishingm + Fishing Master (971107 JPN) + + + fitegol2 + Fighting Golf (US) + fitegolf - Fighting Golf (World?) + Lee Trevino's Fighting Golf (World?) fitegolfu - Fighting Golf (US) + Lee Trevino's Fighting Golf (US, Ver 2, set 1) + + + fitegolfua + Lee Trevino's Fighting Golf (US, Ver 2, set 2) fitfight @@ -20710,6 +26535,10 @@ fiveside Five a Side Soccer (ver UAA) + + fixeighb + FixEight (Bootleg) + fixeight FixEight (Europe) @@ -20778,21 +26607,61 @@ fjholden FJ Holden + + fl7_2000 + Flaming 7 (Custom Hardware, Main, 2000 Bonus) + + + fl7_2k16 + Flaming 7 (Custom Hardware, Egyptian Gold, 2000 Bonus) + + + fl7_3121 + Flaming 7 (W4 Hardware, Red, White & Blue 7's + Hollywood Nights) + + + fl7_50 + Flaming 7 (Custom Hardware, Main, 50 Bonus) + + + fl7_500 + Flaming 7 (Custom Hardware, Main, 500 Bonus) + + + fl7_tw + Flaming 7 (Taiwanese Hardware, unknown version) + + + flagrall + '96 Flag Rally + flamegun - Flame Gunner + Flame Gunner (Export) flamegunj Flame Gunner (Japan) + + flamolce + Flame of Olympus - Cash Express (0351025, US) + + + flamoljc + Flame of Olympus - Jackpot Carnival (0251048, US) + flash_l1 - Flash (L-1) + Flash (Williams, L-1) + + + flash_l2 + Flash (Williams, L-2) flash_t1 - Flash (T-1) Ted Estes + Flash (Williams, T-1) Ted Estes flashgal @@ -20802,6 +26671,10 @@ flashgala Flashgal (set 2) + + flashgalk + Flashgal (set 1, Kyugo logo) + flashgdn Flash Gordon @@ -20810,6 +26683,10 @@ flashgdnf Flash Gordon (French) + + flashgdnfv + Flash Gordon (French Vocalizer sound) + flashgdnp1 Flash Gordon (prototype rev. 1) @@ -20822,25 +26699,53 @@ flashgdnv Flash Gordon (Vocalizer sound) + + flashman + Flashman + + + fldragon + Flash Dragon + + + fldragona + Flash Dragon (alternate set) + flicker Flicker (prototype) flicky - Flicky (128k Version, System 2, 315-5051) + Flicky (128k Version, 315-5051) + + + flickya + Flicky (128k Version, 315-5051, larger roms) + + + flickyg + Flicky (128k Version, System 2, 315-5051, alt graphics) flickyo - Flicky (64k Version, System 1, 315-5051, set 1) + Flicky (64k Version, 315-5051, set 1) flickys1 - Flicky (64k Version, System 1, 315-5051, set 2) + Flicky (64k Version, 315-5051, set 2) flickys2 - Flicky (128k Version, System 2, not encrypted) + Flicky (128k Version, not encrypted) + + + flickys2g + Flicky (128k Version, System 2, not encrypted, alt graphics) + + + flickyup + Flicky (64k Version, on Up'n Down boardset) flight2k @@ -20852,7 +26757,7 @@ flipmaze - Flip Maze (V2.04J) + Flip Maze (V2.04J 1999/09/02 20:00) flipshot @@ -20870,14 +26775,30 @@ flkatcka Flak Attack (Japan, PWB 450593 sub-board) + + floritas + Floritas (Moon Cresta bootleg) + + + floritasm + Floritas (Multivideo Spanish Moon Cresta bootleg) + flower Flower (US) + + flowerbl + Flower (bootleg) + flowerj Flower (Japan) + + flsbeats + Flash Beats + flstory The FairyLand Story @@ -20918,6 +26839,10 @@ fncywld Fancy World - Earth of Crisis + + fnf + The Fast And The Furious (v3.06) + fnkyfish Funky Fish @@ -20930,10 +26855,22 @@ foathens Flame of Athens + + followst + Follow the Stars (20001411, NSW/ACT) + + + fonz + Fonz [TTL] + foodf Food Fight (rev 3) + + foodf1 + Food Fight (rev 1) + foodf2 Food Fight (rev 2) @@ -20942,13 +26879,29 @@ foodfc Food Fight (cocktail) + + foolrace + Fool Race + + + football + Football + + + footbpow + Football Power (Version 1.2) + footchmp - Football Champ (World) + Football Champ / Euro Football Champ (World) footchmpbl - Football Champ (World) (bootleg) + Football Champ / Euro Football Champ (World) (bootleg) + + + force + Force forcebrk @@ -20960,15 +26913,19 @@ forgottn + Forgotten Worlds (World, newer) + + + forgottna Forgotten Worlds (World) - forgottnu - Forgotten Worlds (USA, B-Board 88621B-2, Rev. C) + forgottnj + Forgotten Worlds (Japan) (English prototype) - forgottnu1 - Forgotten Worlds (USA, B-Board 88618B-2, Rev. C) + forgottnu + Forgotten Worlds (USA, B-Board 88621B-2, Rev. C) forgottnua @@ -20978,37 +26935,77 @@ forgottnuaa Forgotten Worlds (USA, B-Board 88618B-2, Rev. AA) + + forgottnuc + Forgotten Worlds (USA, B-Board 88618B-2, Rev. C) + + + forgottnue + Forgotten Worlds (USA, B-Board 88618B-2, Rev. E) + formatz Formation Z + + formula1 + Formula 1 + fort2b - Fortress 2 Blue Arcade (ver 1.01 / pcb ver 3.05) + Fortress 2 Blue Arcade (World) (ver 1.01 / pcb ver 3.05) fort2ba - Fortress 2 Blue Arcade (ver 1.00 / pcb ver 3.05) + Fortress 2 Blue Arcade (Korea) (ver 1.00 / pcb ver 3.05) - fortecar - Forte Card (Ver 103, English) + fortath + Fortune of Athena (10248611, NSW/ACT) fortecrd Forte Card (Ver 110, Spanish) + + fortecrde + Forte Card (Ver 103, English) + + + fortellr + Fortune Teller (01J00131, NSW/ACT) + + + fortfvr + Fortune Fever (BHG1566, US) + fortune1 Fortune I (PK485-S) Draw Poker fotns - Fist Of The North Star + Fist Of The North Star / Hokuto no Ken + + + fourplay + Four Play fourtrax - Four Trax + Four Trax (World) + + + fourtraxa + Four Trax (US?, censored banners) + + + fourtraxj + Four Trax (Japan) + + + fourx4 + 4x4 foxylady @@ -21016,20 +27013,32 @@ fpoint - Flash Point (set 2, Japan, FD1094 317-0127A) + Flash Point (set 2, Japan) (FD1094 317-0127A) fpoint1 - Flash Point (set 1, Japan, FD1094 317-0127A) + Flash Point (set 1, Japan) (FD1094 317-0127A) + + + fpoint1d + Flash Point (set 1, Japan) (bootleg of FD1094 317-0127A set) fpointbj - Flash Point (Japan, bootleg) + Flash Point (Japan, bootleg set 1) fpointbl Flash Point (World, bootleg) + + fpointbla + Flash Point (Japan, bootleg set 2) + + + fpointd + Flash Point (set 2, Japan) (bootleg of FD1094 317-0127A set) + fpwr2_l2 Firepower II (L-2) @@ -21044,6 +27053,10 @@ franticf + Frantic Fred (Release 2) + + + franticfa Frantic Fred @@ -21056,27 +27069,27 @@ fredmem - Fred Flintstones' Memory Match (World?, Ticket version, 3/17/95) + Fred Flintstone's Memory Match (World?, Ticket version, 3/17/95) fredmemc - Fred Flintstones' Memory Match (Mandarin Chinese, 3/17/95) + Fred Flintstone's Memory Match (Mandarin Chinese, 3/17/95) fredmemj - Fred Flintstones' Memory Match (Japan, High Score version, 3/20/95) + Fred Flintstone's Memory Match (Japan, High Score version, 3/20/95) fredmemuk - Fred Flintstones' Memory Match (UK, 3/17/95) + Fred Flintstone's Memory Match (UK, 3/17/95) fredmemus - Fred Flintstones' Memory Match (US, High Score version, 3/10/95) + Fred Flintstone's Memory Match (US, High Score version, 3/10/95) fredmesp - Fred Flintstones' Memory Match (Spanish, 3/17/95) + Fred Flintstone's Memory Match (Spanish, 3/17/95) freedom @@ -21086,6 +27099,10 @@ freefall Freefall + + freekckb + Free Kick (bootleg) + freekick Free Kick (NS6201-A 1987.10) @@ -21106,6 +27123,14 @@ freekickb3 Free Kick (bootleg set 3) + + freeway + FreeWay (V5.12) + + + freewaya + FreeWay (V4.31) + freeze Freeze @@ -21140,7 +27165,7 @@ frenzy - Frenzy + Frenzy (revision RA1) fresh @@ -21154,18 +27179,26 @@ friskyta Frisky Tom (set 2) + + friskytb + Frisky Tom (set 3) + frogf Frog (Falcon bootleg) frogg - Frog (Galaxian hardware) + Frog (bootleg on Galaxian hardware) frogger Frogger + + froggeram + Frogger (bootleg on Amigo? hardware) + froggermc Frogger (Moon Cresta hardware) @@ -21182,17 +27215,53 @@ froggers2 Frogger (Sega set 2) + + froggers3 + Frogger (Sega set 3) + + + froggerv + Frogger (Videotron bootleg) + + + froggervd + Frogger (Hermatic, bootleg on Scramble hardware from Video Dens) + + + froggrmc + Frogger (Moon Cresta hardware) + froggrs - Frogger (Scramble hardware) + Frogger (Coin Music, bootleg on Scramble hardware) frogs Frogs + + frogseg1 + Frogger (Sega set 1) + + + frogseg2 + Frogger (Sega set 2) + + + frogwld + Frog Wild 2 (0251114, US) + + + froman2b + Idol Mahjong Final Romance 2 (Neo-Geo, bootleg of CD version) + fromanc2 - Taisen Idol-Mahjong Final Romance 2 (Japan) + Taisen Idol-Mahjong Final Romance 2 (Japan, newer) + + + fromanc2o + Taisen Idol-Mahjong Final Romance 2 (Japan, older) fromanc4 @@ -21212,7 +27281,11 @@ frontlin - Front Line + Front Line (AA1, 4 PCB version) + + + frontlina + Front Line (FL, 5 PCB version) fround @@ -21238,22 +27311,42 @@ fruitbun Fruits & Bunny (World?) + + fruitpar + Fruit Paradise (V214) + fruitpc Fruit Land + + fruitsmg + Fruits Magic - The Magic Party + fruitstb + Fruit Star Bonus (Ver 8.27PVIE) + + + fruitstba Fruit Star Bonus (Ver 8.20PIR) fruitstr Fruit Star (encrypted) + + fs_la5 + The Flintstones (LA-5) + fs_lx2 The Flintstones (LX-2) + + fs_lx3 + The Flintstones (LX-3) + fs_lx4 The Flintstones (LX-4) @@ -21270,6 +27363,10 @@ fshark Flying Shark (World) + + fsharkb + Flying Shark (World, bootleg) + fsharkbt Flying Shark (bootleg with 8741) @@ -21302,6 +27399,10 @@ fstarfrcj Final Star Force (Japan) + + fstarfrcw + Final Star Force (World?) + fstation Fun Station Spielekoffer 9 Spiele @@ -21322,6 +27423,10 @@ ft_l5 Fish Tales (L-5) + + ft_p2 + Fish Tales (P-2) + ft_p4 Fish Tales (P-4) @@ -21342,6 +27447,14 @@ ftimpcta Fighters' Impact A (Ver 2.00J) + + fts2in1 + Super Two In One + + + ftsoccer + Fighting Soccer + ftspeed Faster Than Speed @@ -21352,11 +27465,11 @@ fun4 - Fun Four (Set 1) [TTL] + Fun Four (set 1) [TTL] fun4a - Fun Four (Set 2) [TTL] + Fun Four (set 2) [TTL] funcsino @@ -21382,6 +27495,10 @@ funcube5 Funcube 5 (v1.0) + + funeball + Fun-E-Ball + funkball Funky Ball @@ -21396,11 +27513,11 @@ funkyfig - The First Funky Fighter (set 1) + The First Funky Fighter (USA, Canada, Mexico / Japan, set 1) funkyfiga - The First Funky Fighter (set 2) + The First Funky Fighter (USA, Canada, Mexico / Japan, set 2) funkyjet @@ -21410,6 +27527,14 @@ funkyjeta Funky Jet (World) + + funkyjeta2 + Funky Jet (Korea, prototype?) + + + funkyjetb + Funky Jet (bootleg) + funkyjetj Funky Jet (Japan, rev 2) @@ -21436,7 +27561,15 @@ funquiz - Fun World Quiz (Austrian) + Fun World Quiz (German) + + + funquiza + Fun World Quiz (German, 12-11-1990) + + + funquizb + Fun World Quiz (German, 27-04-1990) funriver @@ -21476,6 +27609,10 @@ futaribl + Mushihime-Sama Futari Black Label - Another Ver (2009/11/27 INTERNATIONAL BL) + + + futariblj Mushihime-Sama Futari Black Label (2007/12/11 BLACK LABEL VER) @@ -21502,18 +27639,70 @@ fuudol Fuudol (Japan) + + fuusenpn + Fuusen Pentai + fvipers Fighting Vipers (Revision D) fvipers2 - Fighting Vipers 2 (Revision A) + Fighting Vipers 2 (Japan, Revision A) + + + fvipers2o + Fighting Vipers 2 (Japan) + + + fvipersb + Fighting Vipers (Revision B) + + + fvrpitch + Fever Pitch (2VXEC534, NSW) + + + fw_a0_1 + unknown Fun World A0-1 game + + + fw_a7_11 + unknown Fun World A7-11 game 1 + + + fw_a7_11a + unknown Fun World A7-11 game 2 + + + fwheel + Fortune Wheel fx F-X (bootleg of S.R.D. Mission) + + fzeroax + F-Zero AX (Rev E) (GDT-0004E) + + + fzeroaxc + F-Zero AX (Rev C) (GDT-0004C) + + + fzeroaxd + F-Zero AX (Rev D) (GDT-0004D) + + + fzeroaxm + F-Zero AX Monster Ride + + + g13jnc + Golgo 13: Juusei no Chinkonka (Japan, GLT1 VER.A) + g13knd Golgo 13 Kiseki no Dandou (Japan, GLS1/VER.A) @@ -21548,7 +27737,7 @@ ga2 - Golden Axe: The Revenge of Death Adder (World) + Golden Axe: The Revenge of Death Adder (World, Rev B) ga2j @@ -21556,12 +27745,16 @@ ga2u - Golden Axe: The Revenge of Death Adder (US) + Golden Axe: The Revenge of Death Adder (US, Rev A) gaia Gaia Crusaders + + gaialast + Gaia - The Last Choice of Earth + gaiapols Gaiapolis (ver EAF) @@ -21602,6 +27795,14 @@ galactic Galactica - Batalha Espacial + + galag88b + Galaga '88 (set 2) + + + galag88j + Galaga '88 (Japan) + galaga Galaga (Namco rev. B) @@ -21630,6 +27831,10 @@ galaga88 Galaga '88 + + galaga88a + Galaga '88 (02-03-88) + galaga88j Galaga '88 (Japan) @@ -21650,9 +27855,13 @@ galagao Galaga (Namco) + + galaktron + Galaktron (Petaco S.A.) + galap1 - Space Invaders Galactica (galaxiana hack) + Space Invaders Galactica ('Galaxian (Namco set 2)' hack) galap4 @@ -21660,7 +27869,7 @@ galapx - Galaxian Part X (moonaln hack) + Galaxian Part X ('Moon Alien' hack) galastrm @@ -21674,6 +27883,10 @@ galaxbsf2 Galaxian (bootleg, set 3) + + galaxcirsa + Galaxian (Cirsa Spanish bootleg) + galaxi Galaxi (v2.0) @@ -21694,6 +27907,10 @@ galaxiac Galaxia (set 4) + + galaxiaj + Galaxian (Namco set 2) + galaxian Galaxian (Namco set 1) @@ -21706,6 +27923,18 @@ galaxianbl Galaxian (bootleg, set 2) + + galaxianbl2 + Galaxian (bootleg, set 4) + + + galaxianbl3 + Galaxian (Spanish bootleg) + + + galaxianem + Galaxian (Electromar Spanish bootleg) + galaxiani Galaxian (Irem) @@ -21718,10 +27947,18 @@ galaxianmo Galaxian (Midway set 2) + + galaxianrp + Galaxian (Rene Pierre bootleg) + galaxiant Galaxian (Taito) + + galaxrcgg + Galaxian Growing Galaxip / Galaxian Nave Creciente (Recreativos Covadonga Spanish bootleg) + galaxrf Galaxian (Recreativos Franco S.A. Spanish bootleg) @@ -21738,6 +27975,10 @@ galaxygn Galaxy Gunners + + galaxygnh + Galaxy Gunners (1990 year hack) + galaxypi Galaxy @@ -21750,6 +27991,10 @@ galaxyrp Galaxy Ranger (Pioneer LDV1000) + + galaxyx + Galaxy X (bootleg of Galaxian) + galds Gals Ds - Three Dealers Casino House (bootleg?) @@ -21758,6 +28003,10 @@ galemp Galaxy Empire (bootleg?) + + galeone + Il Galeone + galgame Galaxy Game @@ -21767,8 +28016,12 @@ Galaxy Games StarPak 2 - galgbios - Galaxy Games (BIOS v1.90) + galgame3 + Galaxy Games StarPak 3 + + + galgame4 + Galaxy Games StarPak 4 (prototype) galhustl @@ -21790,6 +28043,10 @@ galkaika Mahjong Gal no Kaika (Japan) + + galkamika + Kamikaze (Electrogame, Spanish bootleg of Galaxian) + galkoku Mahjong Gal no Kokuhaku (Japan) @@ -21798,18 +28055,42 @@ gallag Gallag + + gallag50 + Gallag Video Game / Petalouda (Butterfly, x50) + gallgall - Gallagher's Gallery v2.2 + Gallagher's Gallery (v2.2) + + + gallgall_21 + Gallagher's Gallery (v2.1) gallop - Gallop - Armed Police Unit (Japan) + Gallop - Armed Police Unit (Japan, M72 hardware) galmedes Galmedes (Japan) + + galmidw + Galaxian (Midway) + + + galmidwo + Galaxian (Midway, old rev) + + + galmonst + Galaxy Monsters (Laguna S.A. Spanish bootleg of Space Invaders) + + + galpandx + Gals Panic DX (Asia) + galpani2 Gals Panic II (Asia) @@ -21834,13 +28115,21 @@ galpani2i Gals Panic II (Italy, single PCB) + + galpani2i2 + Gals Panic II (Italy, 2 PCB ver.) + galpani2j Gals Panic II (Japan) + + galpani2k + Gals Panic II (Korea, single PCB) + galpani2t - Gals Panic II (Taiwan) + Gals Panic II (Taiwan, 2 PCB ver.) galpani3 @@ -21860,40 +28149,80 @@ galpani4 + Gals Panic 4 (Europe) + + + galpani4j Gals Panic 4 (Japan) galpani4k Gals Panic 4 (Korea) + + galpanib + Gals Panic (set 2) + galpanic Gals Panic (Unprotected) galpanica - Gals Panic (MCU Protected) + Gals Panic (MCU Protected, set 1) + + + galpanicb + Gals Panic (MCU Protected, set 2) + + + galpanicms + New Quiz (Modular System bootleg of Gals Panic) + + + galpanidx + Gals Panic DX (Asia) + + + galpaniex + Gals Panic EX (Korea) galpanis - Gals Panic S - Extra Edition (Europe) + Gals Panic S - Extra Edition (Europe, revision 1) + + + galpanisa + Gals Panic S - Extra Edition (Asia) + + + galpanise + Gals Panic S - Extra Edition (Europe, set 2) galpanisj - Gals Panic S - Extra Edition (Japan) + Gals Panic S - Extra Edition (Japan, revision 1) galpanisk + Gals Panic S - Extra Edition (Korea, revision 1) + + + galpaniska Gals Panic S - Extra Edition (Korea) galpans2 - Gals Panic S2 (Japan) + Gals Panic S2 (Europe) galpans2a Gals Panic S2 (Asia) + + galpans2j + Gals Panic S2 (Japan) + galpans3 Gals Panic S3 (Japan) @@ -21904,10 +28233,6 @@ galsnew - Gals Panic (US, EXPRO-02 PCB) - - - galsnewa Gals Panic (Export, EXPRO-02 PCB) @@ -21918,13 +28243,29 @@ galsnewk Gals Panic (Korea, EXPRO-02 PCB) + + galsnewt + Gals Panic (Taiwan, EXPRO-02 PCB) + + + galsnewu + Gals Panic (US, EXPRO-02 PCB) + galspnbl Gals Pinball galturbo - Galaxian Turbo (superg hack) + Galaxian Turbo ('Super Galaxians' hack) + + + galwars2 + Galaxy Wars II (Defender bootleg) + + + galxwar2 + Galaxy Wars (Universal set 2) galxwars @@ -21938,6 +28279,14 @@ galxwarst Galaxy Wars (Taito?) + + galxwarst2 + Galaxy Wars (Taito) + + + galxwart + Galaxy Wars (Taito[Q]) + gamatron Gamatron @@ -21946,13 +28295,25 @@ gamatros Gamatron (Sonic) + + gambjack + Gamblin' Jack (20197211, NSW/ACT) + gambl186 - unknown 186 based gambling game (V398) + Multi Game (Versione 4.0.3 - 1.5.7, 05-FEV-99(397)) (V398?) gambl186a - unknown 186 based gambling game (V399) + Multi Game (Versione 4.0.3 - 1.5.7, 05-FEV-99(397)) (V399?) + + + gambl186b + Multi Game (Versione 3.8.6T - 1.5.6, 25-AUG-97) (V378?) + + + gambler + The Gambler (EHG0916-02, US) gamecst2 @@ -21962,9 +28323,17 @@ gamecstl GameCristal + + gamesnsm + The Games (NSM) + gametngk - The Game Paradise - Master of Shooting! / Game Tengoku - The Game Paradise + The Game Paradise - Master of Shooting! / Game Tengoku - The Game Paradise (ver 1.0) + + + gametree + Game Tree [TTL] gammagic @@ -21972,7 +28341,11 @@ gamshara - Gamshara (10021 Ver.A) + Gamshara (World, 10021 Ver.A) + + + gamsharaj + Gamshara (Japan, 10021 Ver.A) gamt1 @@ -22518,10 +28891,22 @@ gangrose Gangster's Roses (v4.70) + + gangwarb + Gang Wars (bootleg) + gangwars Gang Wars + + gangwarsb + Gang Wars (bootleg) + + + gangwarsj + Gang Wars (Japan) + gangwarsu Gang Wars (US) @@ -22546,6 +28931,58 @@ gaplusd Gaplus (GP2 rev D, alternate hardware) + + gapluso + Gaplus (rev. B) + + + gaplust + Gaplus (Tecfri PCB) + + + garage + Garage (040122 World) + + + garage_10 + Garage (100331 Entertainment X) + + + garage_11 + Garage (101208 Entertainment N) + + + garage_12 + Garage (110111 Entertainment A) + + + garage_13 + Garage (110124 Entertainment A) + + + garage_14 + Garage (110204 Entertainment A) + + + garage_15 + Garage (110311 Entertainment B) + + + garage_16 + Garage (140526 Entertainment B) + + + garage_17 + Garage (110411 Entertainment C) + + + garage_2 + Garage (040123 World) + + + garage_3 + Garage (040216 World) + garage_4 Garage (040219 World) @@ -22606,6 +29043,10 @@ gardiab Gardia (317-0007?, bootleg) + + gardiaj + Gardia (Japan, 317-0006) + garogun Garogun Seroyang (Korea) @@ -22614,13 +29055,25 @@ garou Garou - Mark of the Wolves (NGM-2530) + + garoub + Garou - Mark of the Wolves (Enable hidden characters) + garoubl Garou - Mark of the Wolves (bootleg) garouh - Garou - Mark of the Wolves (NGM-2530)(NGH-2530) + Garou - Mark of the Wolves (NGM-2530 ~ NGH-2530) + + + garouha + Garou - Mark of the Wolves (NGH-2530) + + + garouo + Garou - Mark of the Wolves (set 2) garoup @@ -22634,6 +29087,10 @@ garyoret Garyo Retsuden (Japan) + + gatedom1 + Gate of Doom (US revision 1) + gatedoom Gate of Doom (US revision 4) @@ -22646,6 +29103,26 @@ gatsbee Gatsbee + + gaun22p1 + Gauntlet II (2 Players, rev 1) + + + gaun22pg + Gauntlet II (2 Players, German) + + + gaun2pg1 + Gauntlet (2 Players, German, rev 1) + + + gaun2pj2 + Gauntlet (2 Players, Japanese, rev 2) + + + gaun2pr3 + Gauntlet (2 Players, rev 3) + gaunt2 Gauntlet II @@ -22666,6 +29143,18 @@ gaunt2g Gauntlet II (German) + + gaunt2p + Gauntlet (2 Players, rev 6) + + + gaunt2pg + Gauntlet (2 Players, German, rev 4) + + + gaunt2pj + Gauntlet (2 Players, Japanese, rev 5) + gauntdl Gauntlet Dark Legacy (version DL 2.52) @@ -22674,6 +29163,30 @@ gauntdl24 Gauntlet Dark Legacy (version DL 2.4) + + gauntg + Gauntlet (German, rev 10) + + + gauntgr3 + Gauntlet (German, rev 3) + + + gauntgr6 + Gauntlet (German, rev 6) + + + gauntgr8 + Gauntlet (German, rev 8) + + + gauntj + Gauntlet (Japanese, rev 13) + + + gauntj12 + Gauntlet (Japanese, rev 12) + gauntleg Gauntlet Legends (version 1.6) @@ -22762,10 +29275,42 @@ gauntlets Gauntlet (Spanish, rev 15) + + gauntr1 + Gauntlet (rev 1) + + + gauntr2 + Gauntlet (rev 2) + + + gauntr4 + Gauntlet (rev 4) + + + gauntr5 + Gauntlet (rev 5) + + + gauntr7 + Gauntlet (rev 7) + + + gauntr9 + Gauntlet (rev 9) + + + gaunts + Gauntlet (Spanish, rev 15) + gaxeduel Golden Axe - The Duel (JUETL 950117 V1.000) + + gbbchmp + Great Bishi Bashi Champ (GBA48 VER. JAB) + gberet Green Beret @@ -22778,6 +29323,10 @@ gblchmp Global Champion (Ver 2.1A 1994/07/29) + + gbmoney + The Good, The Bad & The Money (0351016, US) + gbusters Gang Busters (set 1) @@ -22796,32 +29345,44 @@ gcpinbal - Grand Cross + Grand Cross v1.02F gdarius - G-Darius (Ver 2.01J) + G-Darius (Ver 2.02O) gdarius2 G-Darius Ver.2 (Ver 2.03J) - gdariusb + gdariusj + G-Darius (Ver 2.01J) + + + gdariusu G-Darius (Ver 2.02A) gdfs - Mobil Suit Gundam Final Shooting (Japan) + Mobile Suit Gundam Final Shooting (Japan) gdvsgd - Gundam vs. Gundam + Gundam vs. Gundam (GVS1 Ver. A) + + + gdvsgdnx + Gundam vs. Gundam Next geebee Gee Bee (Japan) + + geebeea + Gee Bee (UK) + geebeeb Gee Bee (Europe) @@ -22834,14 +29395,26 @@ gegege GeGeGe no Kitarou Youkai Slot + + gegemdb + Gegege no Kitaro Yokai Yokocho Matsuri De Batoru Ja (GYM1 Ver.A) + geimulti GEI Multi Game - geishanz + geisha Geisha (0101408V, New Zealand) + + geishaa6 + Geisha (10000811, NSW/ACT) + + + geishajc + Geisha - Jackpot Carnival (0351033, US) + gekiretu Quiz Gekiretsu Scramble (Japan) @@ -22854,6 +29427,10 @@ gekiridnj Gekirindan (Ver 2.3J 1995/09/21) + + gekirido + Gekirindan (Japan) + gekisha Mahjong Gekisha @@ -22870,41 +29447,89 @@ gekpurya Gekitou Pro Yakyuu Mizushima Shinji All Stars vs. Pro Yakyuu (Rev C) (GDT-0008C) + + gekpuryb + Gekitou Pro Yakyuu Mizushima Shinji All Stars vs. Pro Yakyuu (Rev B) (GDT-0008B) + + + gemcrush + Gemcrush (Japan, prototype) + gemini - Gemini Wing (Japan) + Gemini Wing (World) gemini2k - Gemini 2000 + Gemini 2000 (set 1) gemini2k1 - Gemini 2000 (alternate set) + Gemini 2000 (set 2) + + + geminib + Gemini Wing (bootleg) + + + geminij + Gemini Wing (Japan) genesisp Genesis + + genesispf + Genesis (French) + + + genesispg + Genesis (German) + genie - Genie + Genie (ICP-1, set 1) + + + geniea + Genie (ICP-1, set 2) geniep Genie (Pinball) + + genius6 + Genius 6 (V110F) + + + genius6a + Genius 6 (V133F) + + + genius6b + Genius 6 (V132F) + genix Genix Family + + genmagi + Genie Magic (0200894V, NSW/ACT) + genpeitd Genpei ToumaDen + + genpin + genpin + gensitou - Genshi-Tou 1930's + Genshitou 1930's geostorm @@ -22922,14 +29547,38 @@ gepoker2 Poker (Version 50.02 ICB, set 3) + + gepoker3 + Poker (Version 50.02 ICB, set 4) + + + getaway + Get A Way + getbass - Get Bass + Get Bass: Sega Bass Fishing (Japan) + + + getbassdx + Get Bass: Sega Bass Fishing Deluxe (Japan) + + + getbassur + Get Bass: Sega Bass Fishing Upright (Japan) getrich Get Rich (Version 1.0.1) + + getstar + Guardian (US) + + + getstarb + Get Star (bootleg) + getstarb1 Get Star (bootleg set 1) @@ -22946,6 +29595,10 @@ gfire2 Golden Fire II + + gfootbal + Gaelco Football + gforce2 Galaxy Force 2 @@ -22958,6 +29611,10 @@ gforce2ja Galaxy Force 2 (Japan, Rev A) + + gforce2sd + Galaxy Force 2 (Super Deluxe unit) + ggate Golden Gate (set 1) (Bingo) @@ -22980,7 +29637,7 @@ ggram2 - Giant Gram: All Japan Pro Wrestling 2 (JPN, USA, EXP, KOR, AUS) + Giant Gram: All Japan Pro Wrestling 2 (Japan) ggreats2 @@ -22996,7 +29653,7 @@ ggx - Guilty Gear X (JPN) + Guilty Gear X ggx15 @@ -23008,19 +29665,23 @@ ggxxac - Guilty Gear XX Accent Core (GDL-0041) + Guilty Gear XX Accent Core (Japan) (GDL-0041) ggxxrl - Guilty Gear XX #Reload (Rev A) (GDL-0019A) + Guilty Gear XX #Reload (Japan, Rev A) (GDL-0019A) + + + ggxxrlo + Guilty Gear XX #Reload (Japan) (GDL-0019) ggxxsla - Guilty Gear XX Slash (Rev A) (GDL-0033A) + Guilty Gear XX Slash (Japan, Rev A) (GDL-0033A) ghlpanic - Ghoul Panic (Asia, OB2/VER.A) + Ghoul Panic (World, OB2/VER.A) ghoshunt @@ -23036,7 +29697,15 @@ ghostb3 - The Real Ghostbusters (US 3 Players) + The Real Ghostbusters (US 3 Players, revision 3B?) + + + ghostb3a + The Real Ghostbusters (US 3 Players, revision 2) + + + ghostbi + Ghost Busters (FMV Demo) ghostlop @@ -23046,6 +29715,14 @@ ghostmun Ghost Muncher + + ghostsev + Ghost Squad Evolution + + + ghostsqo + Ghost Squad (GDX-0012) + ghostsqu Ghost Squad (Rev A) (GDX-0012A) @@ -23066,9 +29743,17 @@ ghoxj Ghox (joystick) + + ghoxjo + Ghox (joystick, older) + ghunter - Gang Hunter (Spain) + Gang Hunter / Dead Angle + + + ghunters + Gang Hunter / Dead Angle (Spain) ghv101 @@ -23086,10 +29771,22 @@ gi_l6 Gilligan's Island (L-6) + + gi_l8 + Gilligan's Island (L-8) + gi_l9 Gilligan's Island (L-9) + + giclasex + GI-Classic EX (satellite terminal) + + + giclassvr + GI-Classic EX (server) + gigaman2 Giga Man 2: The Power Fighters (bootleg of Mega Man 2: The Power Fighters) @@ -23110,6 +29807,10 @@ gigasb Gigas (bootleg) + + gigasm2 + Gigas Mark II (MC-8123, 317-5002) + gigasm2b Gigas Mark II (bootleg) @@ -23148,6 +29849,10 @@ gijoea + G.I. Joe (Asia, AA) + + + gijoeea G.I. Joe (World, EB8, prototype?) @@ -23158,6 +29863,10 @@ gijoeu G.I. Joe (US, UAB) + + gijoeua + G.I. Joe (US, UAA) + gimeabrk Gimme A Break (7/7/85) @@ -23186,6 +29895,38 @@ gjspace Gekitoride-Jong Space (10011 Ver.A) + + gkigt4 + Game King (v4.x) + + + gkigt43 + Game King (v4.3) + + + gkigt43n + Game King (v4.3, NJ) + + + gkigt4ms + Game King (v4.x, MS) + + + gkigt5p + Game King (Triple-Five Play) + + + gkigtez + Game King (EZ Pay, v4.0) + + + gkigtezms + Game King (EZ Pay, v4.0, MS) + + + gkkey + Game King (Set Chips) + gl_coc Carry On Clubbin' (Global) (v3.0) (Stealth) @@ -23236,7 +29977,7 @@ gl_hbhcla - Heartbreak Hotel Club (Global) (Set 2) (Stealth) + Heartbreak Hotel Club (Global) (set 2) (Stealth) gl_hbhclp @@ -23284,27 +30025,51 @@ glass - Glass (Ver 1.1) + Glass (Ver 1.1, Break Edition, Checksum 49D5E66B, Version 1994) glass10 - Glass (Ver 1.0) + Glass (Ver 1.0, Break Edition, Checksum C5513F3C) - glassbrk - Glass (Ver 1.0, Break Edition) + glass10a + Glass (Ver 1.0, Break Edition, Checksum D3864FDB) + + + glasskr + Glass (Ver 1.1, Break Edition, Checksum D419AB69, Version 1994) (censored, unprotected) gldarrow Golden Arrow (Standard G8-03) + + gldgong + The Golden Gong (0152558, US) + + + gldgongq + The Golden Gong (10217411, Queensland) + gldncrwn Golden Crown (Dutch, Game Card 95-752-011) + + gldncrwnhop + Golden Crown Hopper (Dutch, Game Card) + gldneye - Goldeneye + Goldeneye (4.04) + + + gldneye_402 + Goldeneye (4.02) + + + gldnflc + The Golden Fleece (10158311, NSW/ACT) gldnpkr @@ -23312,19 +30077,47 @@ glfgreat - Golfing Greats + Golfing Greats (World, version L) glfgreatj + Golfing Greats (Japan, version J) + + + glfgreatu + Golfing Greats (US, version K) + + + glfgretj Golfing Greats (Japan) + + glizrdce + Green Lizard - Cash Express (AHG1623, US) + gloc - G-LOC Air Battle (US) + G-LOC Air Battle (World) glocr360 - G-LOC R360 + G-LOC R360 (World) + + + glocr360j + G-LOC R360 (Japan) + + + glocu + G-LOC Air Battle (US) + + + glprac2j + Gallop Racer 2 (JAPAN) + + + glprac2l + Gallop Racer 2 Link HW (JAPAN) glpracr @@ -23332,7 +30125,7 @@ glpracr2 - Gallop Racer 2 (USA) + Gallop Racer 2 (Export) glpracr2j @@ -23344,6 +30137,10 @@ glpracr3 + Gallop Racer 3 (Export) + + + glpracr3j Gallop Racer 3 (Japan) @@ -23354,10 +30151,22 @@ gluck2 Good Luck II + + glxplay + Galaxy Play + + + glxplay2 + Galaxy Play 2 + gmahou Great Mahou Daisakusen (Japan 000121) + + gmfamily + Games Family + gmgalax Ghostmuncher Galaxian (bootleg) @@ -23370,6 +30179,10 @@ gmissile Guided Missile + + gmsshoot + Sharpshooter (coin pusher) + gnbarich Gunbarich @@ -23386,6 +30199,10 @@ gngbl Ghosts'n Goblins (bootleg with Cross) + + gngbla + Ghosts'n Goblins (bootleg, harder) + gngblita Ghosts'n Goblins (Italian bootleg, harder) @@ -23418,6 +30235,34 @@ gnome_12 Gnome (100326 Russia) + + gnome_13 + Gnome (100407 Entertainment X) + + + gnome_14 + Gnome (101208 Entertainment N) + + + gnome_15 + Gnome (110124 Entertainment A) + + + gnome_16 + Gnome (110204 Entertainment A) + + + gnome_17 + Gnome (110311 Entertainment B) + + + gnome_18 + Gnome (140526 Entertainment B) + + + gnome_19 + Gnome (110411 Entertainment C) + gnome_2 Gnome (071115 Russia) @@ -23462,6 +30307,10 @@ gnome_7 Gnome (090708 Lottery) + + gnome_8 + Gnome (090810 Entertainment) + gnome_9 Gnome (100326 World) @@ -23470,6 +30319,10 @@ gnomea Gnome (bootleg, 070906, banking address hack set 1) + + gnomeatw + Gnome Around The World (0100767V, NSW/ACT) + gnomeb Gnome (bootleg, 070906, banking address hack set 2) @@ -23486,9 +30339,21 @@ gnomee Gnome (bootleg, 070906, LOTOS GN01) + + gnr_200 + Guns N Roses (USA 2.00, display A3.00) + gnr_300 - Guns N Roses (3.00) + Guns N Roses (USA 3.00, display A3.00) + + + gnr_300d + Guns N Roses (Dutch 3.00, display A3.00) + + + gnr_300f + Guns N Roses (French 3.00, display F3.00) go2000 @@ -23506,9 +30371,17 @@ goalx3 Goal! Goal! Goal! + + goape + Go Ape (10006211, NSW/ACT) + gobyrc - Go By RC (V2.03O) + Go By RC (V2.03O 1999/05/25 13:31) + + + gocowboy + Go Go Cowboy (English, prize) godzilla @@ -23516,7 +30389,15 @@ godzillp - Godzilla (Pinball) + Godzilla (Pinball, 2.05) + + + godzillp_090 + Godzilla (Pinball, 0.90) + + + godzillp_100 + Godzilla (Pinball, 1.00) gogold @@ -23524,19 +30405,31 @@ gogomile - Go Go! Mile Smile + Susume! Mile Smile / Go Go! Mile Smile (newer) + + + gogomileo + Susume! Mile Smile / Go Go! Mile Smile (older) - gogomilej + gogomilj Susume! Mile Smile (Japan) + + gogostrk + Go Go Strike + + + gogreen + Go For Green (10003411, NSW/ACT) + goindol Goindol (World) - goindolk - Goindol (Korea) + goindolj + Goindol (Japan) goindolu @@ -23548,19 +30441,39 @@ goketsuj - Goketsuji Ichizoku: Matsuri Senzo Kuyou (v200906230) + Gouketsuji Ichizoku: Senzo Kuyou (v200906230) + + + gokidetor + Gokidetor (set 1) + + + gokidetor2 + Gokidetor (set 2) gokuparo Gokujyou Parodius (ver JAD) + + goldarch + Golden Archer (10197411, NSW/ACT) + + + goldart + Goldart (Spain) + + + goldartp + Goldart (Portugal) + goldball Gold Ball (set 1) goldballn - Gold Ball (set 2) + Gold Ball (Field Service Upgrade) goldbug @@ -23578,10 +30491,18 @@ goldenc Golden Canaries (1VXFC5462, New Zealand) + + goldenra + Golden Ra (0101164V, NSW/ACT) + goldfish Gold Fish (020903, prototype) + + goldfrts + Golden Fruits + goldfrui Gold Fruit @@ -23610,33 +30531,69 @@ goldgstake Golden Game Bingo Stake 6/10 (Bingo) + + goldinc + Golden Incas (10174011, NSW/ACT, Show Program) + + + goldincu + Golden Incas (0252533, US) + + + goldmedb + Gold Medalist (bootleg) + goldmedl - Gold Medalist (set 1) + Gold Medalist (set 1, Alpha68k II PCB) goldmedla - Gold Medalist (set 2) + Gold Medalist (set 2, Alpha68k III PCB) goldmedlb - Gold Medalist (bootleg) + Gold Medalist (bootleg, Alpha68k III PCB) + + + goldnabl + Golden Axe (bootleg) + + + goldnaxa + Golden Axe (set 6, US) (8751 317-123A) + + + goldnaxb + Golden Axe (Version 2 317-0110) + + + goldnaxc + Golden Axe (Version 2 317-0122) goldnaxe - Golden Axe (set 6, US, 8751 317-123A) + Golden Axe (set 6, US) (8751 317-123A) goldnaxe1 - Golden Axe (set 1, World, FD1094 317-0110) + Golden Axe (set 1, World) (FD1094 317-0110) + + + goldnaxe1d + Golden Axe (set 1, World) (bootleg of FD1094 317-0110 set) goldnaxe2 - Golden Axe (set 2, US, 8751 317-0112) + Golden Axe (set 2, US) (8751 317-0112) goldnaxe3 - Golden Axe (set 3, World, FD1094 317-0120) + Golden Axe (set 3, World) (FD1094 317-0120) + + + goldnaxe3d + Golden Axe (set 3, World) (bootleg of FD1094 317-0120 set) goldnaxeb1 @@ -23648,23 +30605,55 @@ goldnaxej - Golden Axe (set 4, Japan, FD1094 317-0121) + Golden Axe (set 4, Japan) (FD1094 317-0121) + + + goldnaxejd + Golden Axe (set 4, Japan) (bootleg of FD1094 317-0121 set) goldnaxeu - Golden Axe (set 5, US, FD1094 317-0122) + Golden Axe (set 5, US) (FD1094 317-0122) + + + goldnaxeud + Golden Axe (set 5, US) (bootleg of FD1094 317-0122 set) + + + goldnaxj + Golden Axe (Version 1, Japan) goldnpkb Golden Poker Double Up (Mini Boy) + + goldnpkc + Golden Poker Double Up (bootleg) + goldnpkr Golden Poker Double Up (Big Boy) - goldprmd - Golden Pyramids (MV4091, USA) + goldpym + Golden Pyramids Special Edition - Maximillions (10130811, NSW/ACT) + + + goldpyr + Golden Pyramids (AHG1205-03, US) + + + goldpyra + Golden Pyramids (AHG1206-99, US) + + + goldpyrb + Golden Pyramids (0100878V, Victoria) + + + goldsam + Golden Samurai (10247811, NSW/ACT) goldstar @@ -23678,6 +30667,14 @@ goldwing Gold Wings + + goldwingf + Gold Wings (French) + + + goldwingg + Gold Wings (German) + golgo13 Golgo 13 (Japan, GLG1/VER.A) @@ -23692,6 +30689,10 @@ gondo + Gondomania (World) + + + gondou Gondomania (US) @@ -23718,6 +30719,10 @@ goonies Vs. The Goonies (set E) + + goori + Goori Goori + gorf Gorf @@ -23738,13 +30743,21 @@ gorkans Gorkans + + gorodki + Gorodki + + + gostop + Kankoku Hanafuda Go-Stop + gotcha Got-cha Mini Game Festival gotya - Got-Ya (12/24/1981, prototype?) + Got-Ya (12/24/1981) gowcaizr @@ -23762,32 +30775,48 @@ gp98 Grand Prix '98 (V100K) - - gp_110 - Model 110 - gpgolf Golden Par Golf (Joystick, V1.1) + + gpgolfa + Golden Par Golf (Joystick, V1.0) + gpilots - Ghost Pilots (NGM-020)(NGH-020) + Ghost Pilots (NGM-020 ~ NGH-020) gpilotsh - Ghost Pilots (NGH-020)(US) + Ghost Pilots (NGH-020, US) + + + gpilotsp + Ghost Pilots (prototype) gprider - GP Rider (World, FD1094 317-0163) + GP Rider (World, FD1094 317-0163) (Twin setup) gpriderj + GP Rider (Japan, FD1094 317-0161) (Twin setup) + + + gpriderjs GP Rider (Japan, FD1094 317-0161) + + gpriders + GP Rider (World, FD1094 317-0163) + gprideru + GP Rider (US, FD1094 317-0162) (Twin setup) + + + gpriderus GP Rider (US, FD1094 317-0162) @@ -23914,10 +30943,6 @@ gpworld GP World - - gq863 - Twinkle System - gradius Gradius (Japan, ROM version) @@ -23946,26 +30971,62 @@ gradius3j Gradius III (Japan, program code S) + + gradius3js + Gradius III (Japan, program code S, split) + gradius4 - Gradius 4: Fukkatsu + Gradius IV: Fukkatsu (ver JAC) + + + gradiusb + Gradius (Bubble System) grainbow - SD Gundam Sangokushi Rainbow Tairiku Senki + SD Gundam Sangokushi Rainbow Tairiku Senki (Japan) + + + grainbowk + SD Gundam Sangokushi Rainbow Tairiku Senki (Korea) + + + grally + Gran Rally (Spanish bootleg of Pole Position II) gram2000 - Giant Gram 2000 (JPN, USA, EXP, KOR, AUS) + Giant Gram 2000 grancan - Grand Canyon (Russia) (Extrema) + Grand Canyon (Ukraine, V. 43.09) + + + grancana + Grand Canyon (Ukraine, V. 43.05) + + + grancanb + Grand Canyon (Ukraine, V. 42.13) + + + grancanc + Grand Canyon (Ukraine, V. 42.06) grancapi Gran Capitan (Version 3) + + grand8 + Le Grand 8 + + + grand_l3 + Grand Lizard (L-3) + grand_l4 Grand Lizard (L-4) @@ -23974,6 +31035,10 @@ grandprx Grand Prix + + granfrat + Grande Fratello (Ver. 1.7) + granny Granny and the Gators @@ -23992,27 +31057,51 @@ gratia - Gratia - Second Earth (92047-01 version) + Gratia - Second Earth (ver 1.0, 92047-01 version) gratiaa - Gratia - Second Earth (91022-10 version) + Gratia - Second Earth (ver 1.0, 91022-10 version) + + + gratispk + Gratis Poker (V.204, set 1) + + + gratispka + Gratis Poker (V.204, set 2) gravitar Gravitar (version 3) + + gravitar1 + Gravitar (version 1) + gravitar2 Gravitar (version 2) + + gravitr2 + Gravitar (version 2) + gravp Gravitar (prototype) grchamp - Grand Champion + Grand Champion (set 1) + + + grchampa + Grand Champion (set 2) + + + grchampb + Grand Champion (set 3) grdforce @@ -24024,16 +31113,60 @@ grdians - Guardians / Denjin Makai II + Guardians / Denjin Makai II (P-FG01-1 PCB) + + + grdiansa + Guardians / Denjin Makai II (P0-113A PCB) + + + grdianske + Guardians (Kerron Edition, Hack) + + + grdianslbs + Guardians (LBS Edition, Hack) + + + grdianslbss + Guardians (Field Edition, Hack) + + + grdianssy + Guardians (Shen Yue Edition, Hack) + + + grdius2a + Gradius II - GOFER no Yabou (Japan Old Ver.) + + + grdius2b + Gradius II - GOFER no Yabou (Japan Older Ver.) + + + grdius3a + Gradius III (Asia) + + + grdius3e + Gradius III (World [Q]) grdnstrm Guardian Storm (horizontal, not encrypted) + + grdnstrmau + Guardian Storm (horizontal, Australia) + grdnstrmg Guardian Storm (Germany) + + grdnstrmj + Sen Jing - Guardian Storm (Japan) + grdnstrmk Jeon Sin - Guardian Storm (Korea) @@ -24076,7 +31209,15 @@ griffon - Griffon (bootleg of Phoenix) + Griffon (Videotron bootleg of Phoenix) + + + griffono + Griffon (Olympia bootleg of Phoenix) + + + grindsta + Grind Stormer (older set) grindstm @@ -24086,13 +31227,17 @@ grindstma Grind Stormer (older set) + + grizzly + Grizzly (10214711, NSW/ACT) + grmatch Grudge Match (Yankee Game Technology) grndtour - Grand Tour + Grand Tour (V100U) grobda @@ -24116,6 +31261,10 @@ growl + Growl (World, Rev 1) + + + growla Growl (World) @@ -24127,16 +31276,20 @@ Growl (US) - grtesoro - Gran Tesoro? / Play 2000 (v5.01) (Italy) + grtwall + The Great Wall - grtesoro4 - Gran Tesoro? / Play 2000 (v4.0) (Italy) + grudge + Grudge Match (v00.90, prototype) - grudge - Grudge Match (prototype) + grudgei + Grudge Match (v00.90, Italy, location test?) + + + grudgep + Grudge Match (v00.80, prototype) gryzor @@ -24155,12 +31308,24 @@ Selection (Version 40.02TMB, set 2) - gs_l3 - The Bally Game Show (L-3) + gs471 + unknown medal game GS471 + + + gs_la3 + The Bally Game Show (LA-3) + + + gs_lg6 + The Bally Game Show (LG-6) Germany - gs_l4 - The Bally Game Show (L-4) + gs_lu3 + The Bally Game Show (LU-3) Europe + + + gs_lu4 + The Bally Game Show (LU-4) Europe gseeker @@ -24186,6 +31351,10 @@ gslugrsj Great Sluggers (Japan) + + gsspade + Spade + gstream G-Stream G2020 @@ -24200,7 +31369,7 @@ gstriker - Grand Striker + Grand Striker (Europe, Oceania) gstrikera @@ -24234,6 +31403,10 @@ gt103asx Trivia (Version 1.03a Sex questions) + + gt103asxa + Trivia (Version 1.03a Sex questions, Alt revision questions) + gt2k Golden Tee 2K (v1.00) @@ -24334,10 +31507,18 @@ gt98 Golden Tee '98 (v1.10) + + gt98c100 + Golden Tee '98 (v1.00C) + gt98s100 Golden Tee '98 (v1.00S) + + gt98t302 + Golden Tee '98 Tournament (v3.02) + gt98t303 Golden Tee '98 Tournament (v3.03) @@ -24384,23 +31565,63 @@ gteikoku - Gingateikoku No Gyakushu + Gingateikoku no Gyakushu + + + gteikokub + Gingateikoku no Gyakushu (bootleg set 1) + + + gteikokub2 + Gingateikoku no Gyakushu (bootleg set 2) + + + gteikokub3 + Gingateikoku no Gyakushu (bootleg set 3) + + + gtfore01 + Golden Tee Fore! (v1.00.25) gtfore02 - Golden Tee Fore! 2002 (v2.01.04 UMV) + Golden Tee Fore! 2002 (v2.01.06) + + + gtfore03 + Golden Tee Fore! 2003 (v3.00.10) - gtfore02o - Golden Tee Fore! 2002 (v2.00.00) + gtfore03a + Golden Tee Fore! 2003 (v3.00.09) gtfore04 - Golden Tee Fore! 2004 + Golden Tee Fore! 2004 Extra (v4.00.08) + + + gtfore04a + Golden Tee Fore! 2004 (v4.00.00) gtfore05 - Golden Tee Fore! 2005 + Golden Tee Fore! 2005 Extra (v5.01.06) + + + gtfore05a + Golden Tee Fore! 2005 Extra (v5.01.02) + + + gtfore05b + Golden Tee Fore! 2005 Extra (v5.01.00) + + + gtfore05c + Golden Tee Fore! 2005 Extra (v5.00.00) + + + gtfore06 + Golden Tee Fore! 2006 Complete (v6.00.01) gtfrk10m @@ -24428,7 +31649,7 @@ gtg - Golden Tee Golf (Joystick, v3.1) + Golden Tee Golf (Joystick, v3.3) gtg2 @@ -24442,6 +31663,10 @@ gtg2t Golden Tee Golf II (Trackball, V1.1) + + gtgj31 + Golden Tee Golf (Joystick, v3.1) + gtgt Golden Tee Golf (Trackball, v2.0) @@ -24456,11 +31681,11 @@ gticlub2 - GTI Club 2 (ver JAB) + GTI Club: Corso Italiano (ver JAB) gticlub2ea - GTI Club 2 (ver EAA) + GTI Club: Corso Italiano (ver EAA) gticluba @@ -24484,7 +31709,7 @@ gtmr - 1000 Miglia: Great 1000 Miles Rally (94/07/18) + 1000 Miglia: Great 1000 Miles Rally (Taiwan 94/07/18) gtmr2 @@ -24502,18 +31727,66 @@ gtmra 1000 Miglia: Great 1000 Miles Rally (94/06/13) + + gtmrb + 1000 Miglia: Great 1000 Miles Rally (94/05/26) + gtmre Great 1000 Miles Rally: Evolution Model!!! (94/09/06) + + gtmro + 1000 Miglia: Great 1000 Miles Rally (94/05/10) + gtmrusa Great 1000 Miles Rally: U.S.A Version! (94/09/06) + + gtrak10 + Gran Trak 10/Trak 10/Formula K [TTL] + + + gtrak10a + Gran Trak 10/Trak 10/Formula K (older) [TTL] + + + gtrak20 + Gran Trak 20/Trak 20/Twin Racer [TTL] + gtrfrk2m Guitar Freaks 2nd Mix Ver 1.01 (GQ883 VER. JAD) + + gtrfrk2ma + Guitar Freaks 2nd Mix (GQ883 VER. EAA) + + + gtrfrk2maa + Guitar Freaks 2nd Mix (GQ883 VER. AAA) + + + gtrfrk2mja + Guitar Freaks 2nd Mix (GQ883 VER. JAA) + + + gtrfrk2mka + Guitar Freaks 2nd Mix (GQ883 VER. KAA) + + + gtrfrk2ml1 + Guitar Freaks 2nd Mix Link Kit 1 (GE929 VER. JAA) + + + gtrfrk2ml2 + Guitar Freaks 2nd Mix Link Kit 2 (GC929 VER. JBB) + + + gtrfrk2mua + Guitar Freaks 2nd Mix (GQ883 VER. UAA) + gtrfrk3m Guitar Freaks 3rd Mix (GE949 VER. JAC) @@ -24548,18 +31821,34 @@ gtrfrks - Guitar Freaks (GQ886 VER. EAC) + Guitar Freaks Ver 1.01 (GQ886 VER. EAD) gtrfrksa + Guitar Freaks Ver 1.01 (GQ886 VER. AAD) + + + gtrfrksac Guitar Freaks (GQ886 VER. AAC) + + gtrfrksc + Guitar Freaks (GQ886 VER. EAC) + gtrfrksj + Guitar Freaks Ver 1.01 (GQ886 VER. JAD) + + + gtrfrksjc Guitar Freaks (GQ886 VER. JAC) gtrfrksu + Guitar Freaks Ver 1.01 (GQ886 VER. UAD) + + + gtrfrksuc Guitar Freaks (GQ886 VER. UAC) @@ -24570,14 +31859,6 @@ gtroyal Golden Tee Royal Edition Tournament (v4.02T EDM) - - gts1 - System 1 - - - gts1s - System 1 with sound board - gtsers1 Trivia (Questions Series 1) @@ -24586,10 +31867,6 @@ gtsers10 Trivia (Questions Series 10) - - gtsers10a - Trivia (Questions Series 10 Alt Question Rom) - gtsers11 Trivia (Questions Series 11) @@ -24602,10 +31879,18 @@ gtsers12 Trivia (Questions Series 12) + + gtsers12a + Trivia (Questions Series 12 Alt Question Rom) + gtsers14 Trivia (Questions Series 14) + + gtsers14a + Trivia (Questions Series 14 Alt Question Rom) + gtsers15 Trivia (Questions Series 15) @@ -24634,6 +31919,10 @@ gtsers8 Trivia (Questions Series 8) + + gtsers8a + Trivia (Questions Series 8 Alt Question Rom) + gtsers9 Trivia (Questions Series 9) @@ -24652,35 +31941,7 @@ guab - Give us a Break (3rd edition) - - - guab21 - Give us a Break (21st edition) - - - guab3a - Give us a Break (3rd edition alt?) - - - guab4 - Give us a Break (4th edition) - - - guab43 - Give us a Break (43rd edition) - - - guab6 - Give us a Break (6th edition) - - - guab6a - Give us a Break (6th edition alt?) - - - guab7 - Give us a Break (7th edition) + Give us a Break guardian @@ -24690,6 +31951,14 @@ guiness The Guiness (Japan) + + guitarheroac + Guitar Hero Arcade (v1.0.5) + + + gulfstr2 + Gulf Storm (Media Shoji) + gulfstrm Gulf Storm (set 1) @@ -24702,9 +31971,13 @@ gulfstrmb Gulf Storm (set 3) + + gulfstrmk + Gulf Storm (Korea) + gulfstrmm - Gulf Storm (Media Shoji) + Gulf Storm (Japan, Media Shoji license) gulfwar2 @@ -24714,10 +31987,18 @@ gulfwar2a Gulf War II (set 2) + + gulunpa + Gulun.Pa! (Japan 931220 L) (prototype) + gumbo Gumbo + + gumrally + Gumball Rally + gunbalina Gunbalina (Japan, GNN1 Ver.A) @@ -24730,13 +32011,21 @@ gunbarl Gunbarl (Japan, GNB4/VER.A) + + gunbarla + Gunbarl (Japan, GNB1/VER.A) + gunbird Gunbird (World) gunbird2 - Gunbird 2 + Gunbird 2 (set 1) + + + gunbird2a + Gunbird 2 (set 2) gunbirdj @@ -24750,6 +32039,10 @@ gunblade Gunblade NY (Revision A) + + gunbulet + Gun Bullet (Japan) + gunbuletj Gun Bullet (Japan, GN1) @@ -24786,6 +32079,30 @@ gundamos Gundam Battle Operating Simulator (GDX-0013) + + gundcb79 + Mobile Suit Gundam 0079 Card Builder (CDV-10010) + + + gundcb79a + Mobile Suit Gundam 0079 Card Builder Ver.2.02 (CDV-10024B) + + + gundcb83 + Mobile Suit Gundam 0083 Card Builder (CDV-10030) + + + gundcb83a + Mobile Suit Gundam 0083 Card Builder Check Disk (CDV-10031) + + + gundcb83b + Mobile Suit Gundam 0083 Card Builder Ver.2.10 (CDV-10037B) + + + gundeala + Gun Dealer (set 2) + gundealr Gun Dealer @@ -24794,21 +32111,33 @@ gundealra Gun Dealer (alt card set) + + gundealrbl + Gun Dealer (Yam! Yam!? hardware) + gundealrt Gun Dealer (Japan) + + gundealt + Gun Dealer (Tecmo) + gundhara Gundhara + + gundharac + Gundhara (Chinese, bootleg?) + gundl94 Gun Dealer '94 gundmct - Mobile Suit Gundam: Federation Vs. Zeon (2001-02-08) + Mobile Suit Gundam: Federation Vs. Zeon gundmgd @@ -24816,7 +32145,7 @@ gundmxgd - Mobile Suit Gundam: Federation Vs. Zeon DX (GDL-0006) + Mobile Suit Gundam: Federation Vs. Zeon DX (USA, Japan) (GDL-0006) gundzaft @@ -24846,6 +32175,18 @@ gunforceu Gunforce - Battle Fire Engulfed Terror Island (US) + + gunforcj + Gunforce - Battle Fire Engulfed Terror Island (Japan) + + + gunforcu + Gunforce - Battle Fire Engulfed Terror Island (US) + + + gunfronj + Gun Frontier (Japan) + gunfront Gun & Frontier (World) @@ -24866,6 +32207,10 @@ gunlock Gunlock (Ver 2.3O 1994/01/20) + + gunlocko + Gunlock (Ver 2.0O 1993/12/15) + gunman Gunman [TTL] @@ -24882,45 +32227,77 @@ gunnail GunNail (28th May. 1992) + + gunnailb + GunNail (bootleg) + + + gunnailp + GunNail (location test) + gunnrose - Guns and Roses (C606191SMP, Australia) + Guns and Roses (C606191SMP, NSW) gunpey Gunpey (Japan) + + gunsmoka + Gun.Smoke (US set 2) + gunsmoke - Gun.Smoke (World) + Gun.Smoke (World, 851115) + + + gunsmokeb + Gun.Smoke (World, 851115) (bootleg) + + + gunsmokeg + Gun.Smoke (Germany, censored) gunsmokej - Gun.Smoke (Japan) + Gun.Smoke (Japan, 851115) gunsmokeu - Gun.Smoke (US set 1) + Gun.Smoke (US, 860408) gunsmokeua - Gun.Smoke (US set 2) + Gun.Smoke (US, 851115, set 1) + + + gunsmokeub + Gun.Smoke (US, 851115, set 2) + + + gunsmokj + Gun.Smoke (Japan) + + + gunsmoku + Gun.Smoke (US set 1) gunsur2 - Gun Survivor 2 Biohazard Code: Veronica (BHF1 Ver. E) + Gun Survivor 2 Biohazard Code: Veronica (World, BHF2 Ver.E) - gunsur2e - Gun Survivor 2 Biohazard Code: Veronica (BHF2 Ver. E) + gunsur2j + Gun Survivor 2 Biohazard Code: Veronica (Japan, BHF1 Ver.E) gunwars - Gunmen Wars (GM1 Ver. B) + Gunmen Wars (Japan, GM1 Ver. B) gunwarsa - Gunmen Wars (GM1 Ver. A) + Gunmen Wars (Japan, GM1 Ver. A) gururin @@ -24944,7 +32321,11 @@ guttangt - Guttang Gottong (bootleg on Galaxian type hardware) + Guttang Gottong (bootleg on Galaxian hardware) + + + guttangts3 + Guttang Gottong (Sede 3 bootleg on Galaxian hardware) guwange @@ -24990,6 +32371,10 @@ gw_p7 The Getaway: High Speed II (P-7) + + gw_pb + The Getaway: High Speed II (P-B) + gw_pc The Getaway: High Speed II (P-C) @@ -25000,7 +32385,11 @@ gwara - Guerrilla War (Version 1) + Guerrilla War (Version 1, set 1) + + + gwarab + Guerrilla War (Version 1, set 2) gwarb @@ -25020,15 +32409,31 @@ gwing2 - Giga Wing 2 (JPN, USA, EXP, KOR, AUS) + Giga Wing 2 gwinggen Giga Wing Generations (v2.02J) + + gwingj + Giga Wing (Japan 990223) + + + gwinner + Golden Winner + + + gwnn + The Game With No Name! (0452501, US) + + + gynotai + Gynotai (Japan) + gypmagic - Gypsy Magic (Konami Endeavour) + Gypsy Magic (Konami Endeavour, Russia) gypsyjug @@ -25056,7 +32461,19 @@ hachamf - Hacha Mecha Fighter (19th Sep. 1991) + Hacha Mecha Fighter (19th Sep. 1991, protected, set 1) + + + hachamfa + Hacha Mecha Fighter (19th Sep. 1991, protected, set 2) + + + hachamfb + Hacha Mecha Fighter (19th Sep. 1991, unprotected, bootleg Thunder Dragon conversion) + + + hachamfp + Hacha Mecha Fighter (Location Test Prototype, 19th Sep. 1991) hacher @@ -25078,17 +32495,21 @@ hal21j HAL21 (Japan) + + halfway + Halfway To Hell: Progear Red Label (2016-1-17 Red label ver) + halley Halley Comet - halley87 - Halley's Comet '87 + halleya + Halley Comet (alternate version) halleycj - Halley's Comet (Japan, Older) + Halley's Comet (Japan set 2) halleys @@ -25096,7 +32517,31 @@ halleysc - Halley's Comet (Japan, Newer) + Halley's Comet (US) + + + halleysc87 + Halley's Comet '87 + + + halleyscj + Halley's Comet (Japan, rev 1) + + + halleyscja + Halley's Comet (Japan) + + + halleyscjp + Halley's Comet (Japan, prototype) + + + hamaway + Hammer Away (Japan, prototype) + + + hamboy + Hammer Boy hammer @@ -25128,7 +32573,11 @@ hanaoji - Hana to Ojisan [BET] (Japan 911209) + Hana to Ojisan [BET] (ver 1.01, 1991/12/09) + + + hanaojia + Hana to Ojisan [BET] (ver 1.00, 1991/08/23) hanaroku @@ -25164,11 +32613,19 @@ hangon2 - Hang-On (ride-on) + Hang-On (Rev A, ride-on) hangonjr - Hang-On Jr. + Hang-On Jr. (Rev. B) + + + hangonp + Hang-On (Sonic) + + + hangonvf + VF (bootleg of Hang-On) hangplt @@ -25178,13 +32635,33 @@ hangpltu Hang Pilot (ver UAA) + + hangzo + Hangzo (Japan, prototype) + happy6 - Happy 6-in-1 (ver. 102CN) + Huanle Liuhe Yi (Happy 6-in-1) (M68K ver. V101, ARM ver. V102CN) + + + happy6100cn + Huanle Liuhe Yi (Happy 6-in-1) (M68K ver. V100, ARM ver. V100CN) + + + happy6100hk + Huanle Liuhe Yi (Happy 6-in-1) (M68K ver. V100HK, ARM ver. V100HK) happy6101 - Happy 6-in-1 (ver. 101CN) + Huanle Liuhe Yi (Happy 6-in-1) (M68K ver. V100, ARM ver. V101CN) + + + happyskl + Happy Skill (Italy, V611IT) + + + hapyfsh2 + Happy Fish (V2 PCB, 302-in-1) hapytour @@ -25192,11 +32669,39 @@ hardbody - Hardbody + Hardbody (rev. D) + + + hardbodyc + Hardbody (rev. C) hardbodyg - Hardbody (German) + Hardbody (German rev. B) + + + harddrb5 + Hard Drivin' (cockpit, British, rev 5) + + + harddrb6 + Hard Drivin' (cockpit, British, rev 6) + + + harddrc1 + Hard Drivin' (compact, rev 1) + + + harddrcb + Hard Drivin' (compact, British, rev 2) + + + harddrcg + Hard Drivin' (compact, German, rev 2) + + + harddrg4 + Hard Drivin' (cockpit, German, rev 4) harddriv @@ -25258,6 +32763,42 @@ harddrivj6 Hard Drivin' (cockpit, Japan, rev 6) + + harddrj6 + Hard Drivin' (cockpit, Japan, rev 6) + + + harddrv1 + Hard Drivin' (cockpit, rev 1) + + + harddrv2 + Hard Drivin' (cockpit, rev 2) + + + harddrv3 + Hard Drivin' (cockpit, rev 3) + + + harddrvb + Hard Drivin' (cockpit, British, rev 7) + + + harddrvc + Hard Drivin' (compact, rev 2) + + + harddrvg + Hard Drivin' (cockpit, German, rev 7) + + + harddrvj + Hard Drivin' (cockpit, Japan, rev 7) + + + harddunj + Hard Dunk (Japan) + harddunk Hard Dunk (World) @@ -25272,7 +32813,15 @@ hardhea2 - Hard Head 2 (v2.0) + Hard Head 2 (v2.0, Music Program v2.4) + + + hardhea2a + Hard Head 2 (v2.0, Music Program v2.0) + + + hardhea2b + Hard Head 2 (v2.0, bootleg) hardhead @@ -25280,6 +32829,18 @@ hardheadb + Hard Head (bootleg, set 1) + + + hardheadb2 + Hard Head (bootleg, set 2) + + + hardheadb3 + Hard Head (bootleg, set 3) + + + hardhedb Hard Head (bootleg) @@ -25290,6 +32851,14 @@ hardyard10 Hard Yardage (v1.00) + + hardyard11 + Hard Yardage (v1.10) + + + hardyd10 + Hard Yardage (v1.00) + harem Harem @@ -25382,6 +32951,10 @@ harl_l40 Harley Davidson (4.00 Spain) + + harl_u13 + Harley Davidson (1.03 UK) + harley Harley-Davidson and L.A. Riders (Revision B) @@ -25420,11 +32993,11 @@ hawkman - Hawkman + Hawkman (set 1) hawkman1 - Hawkman (alternate set) + Hawkman (set 2) hayaosi1 @@ -25436,7 +33009,11 @@ hayaosi3 - Hayaoshi Quiz Nettou Namahousou + Hayaoshi Quiz Nettou Namahousou (ver 1.5) + + + hayaosi3a + Hayaoshi Quiz Nettou Namahousou (ver 1.2) hb_bar7 @@ -25816,6 +33393,10 @@ hbarrel + Heavy Barrel (World) + + + hbarrelu Heavy Barrel (US) @@ -25830,10 +33411,22 @@ hcastlee Haunted Castle (version E) + + hcastlej + Akuma-Jou Dracula (Japan version P) + hcastlek Haunted Castle (version K) + + hcastleo + Haunted Castle (version K) + + + hcastljo + Akuma-Jou Dracula (Japan version N) + hcrash Hyper Crash (version D) @@ -25846,10 +33439,18 @@ hd_l1 Harley Davidson (L-1) + + hd_l2 + Harley Davidson (L-2) + hd_l3 Harley Davidson (L-3) + + hdrivaip + Hard Drivin's Airborne (prototype, early rev) + hdrivair Hard Drivin's Airborne (prototype) @@ -25878,6 +33479,10 @@ headonb Head On (bootleg on dedicated hardware) + + headonch + Monita to Rimoko no Head On Channel (prototype, hack) + headoni Head On (Irem, M-15 Hardware) @@ -25886,6 +33491,10 @@ headonmz Head On (bootleg, alt maze) + + headonn + Head On N + headons Head On (Sidam bootleg, set 1) @@ -25898,10 +33507,18 @@ heartatk Heart Attack + + heartgld + Heart of Gold (20169511, NSW/ACT) + heartspd Hearts & Spades + + heartveg + Heart of Vegas (10232911, NSW/ACT) + heatbrl Heated Barrel (World version 3) @@ -25910,6 +33527,10 @@ heatbrl2 Heated Barrel (World version 2) + + heatbrl3 + Heated Barrel (World version ?) + heatbrle Heated Barrel (Electronic Devices license) @@ -25938,6 +33559,10 @@ hedpanic Head Panic (ver. 0117, 17/01/2000) + + hedpanica + Head Panic (ver. 0702, 02/07/1999) + hedpanicf Head Panic (ver. 0315, 15/03/2000) @@ -25950,6 +33575,10 @@ heiankyo Heiankyo Alien + + helifira + HeliFire (set 2) + helifire HeliFire (set 1) @@ -25958,6 +33587,10 @@ helifirea HeliFire (set 2) + + hellfir1 + Hellfire (1P Ver.) + hellfire Hellfire (2P set) @@ -26002,6 +33635,10 @@ herodku Hero in the Castle of Doom (DK conversion not encrypted) + + heromem + Heroine's Memory + heuksun Heuk Sun Baek Sa (Korea) @@ -26010,14 +33647,30 @@ hexa Hexa + + hexaa + Hexa (with 2xZ80, protected) + hexagone - L'Hexagone + L'Hexagone (France) + + + hexaprs + Hexa President (YM2610 set) + + + hexaprsz + Hexa President (YMZ280B set) hexion Hexion (Japan ver JAB) + + hexionb + Hexion (Asia ver AAA, bootleg) + hexpool Hex Pool (Shinkai) @@ -26032,7 +33685,7 @@ hginga - Hanafuda Hana Ginga + Hanafuda Hana Ginga [BET] (Japan) hgkairak @@ -26044,11 +33697,11 @@ hgokbang - Hanafuda Hana Gokou Bangaihen (Japan) + Hanafuda Hana Gokou Bangaihen [BET] (Japan) hgokou - Hanafuda Hana Gokou (Japan) + Hanafuda Hana Gokou [BET] (Japan) hh @@ -26060,11 +33713,23 @@ hharry - Hammerin' Harry (World) + Hammerin' Harry (World, M81 hardware) + + + hharryb + Hammerin' Harry (World, M84 hardware bootleg) hharryu - Hammerin' Harry (US) + Hammerin' Harry (US, M84 hardware) + + + hhhippos + Hungry Hungry Hippos (redemption game) + + + hhotel + Haunted Hotel hidctch2 @@ -26090,21 +33755,37 @@ hidnctch Hidden Catch (World) / Tul Lin Gu Lim Chat Ki '98 (Korea) (pcb ver 3.03) + + hidnctcha + Hidden Catch (World) / Tul Lin Gu Lim Chat Ki '98 (Korea) (pcb ver 3.02) + higemaru Pirate Ship Higemaru + + highnoon + High Noon (20004111, NSW/ACT) + + + highroll + High Roller + + + highspla + Space Fever High Splitter (set 2) + highsplt - Space Fever High Splitter (set 1) + SF-HiSplitter (set 1) highsplta - Space Fever High Splitter (set 2) + SF-HiSplitter (set 2) highspltb - Space Fever High Splitter (alt Sound) + SF-HiSplitter (alt sound) hiimpact @@ -26128,11 +33809,11 @@ hiimpactp - High Impact Football (prototype, rev 8.6 12/09/90) + High Impact Football (prototype, revision0 proto 8.6 12/09/90) - hikaru - Hikaru Bios + hikcheck + Hikaru Check ROM Board himesiki @@ -26142,6 +33823,14 @@ hipai Hi Pai Paradise + + hipai2 + Hi Pai Paradise 2 + + + hipoly + Hipoly (bootleg of Hyper Olympic) + hippodrm Hippodrome (US) @@ -26186,9 +33875,17 @@ hishouza Hishou Zame (Japan) + + hishouzab + Hishou Zame (Japan, bootleg) + histryma - The History of Martial Arts + The History of Martial Arts (set 1) + + + histryma2 + The History of Martial Arts (set 2) hitice @@ -26198,6 +33895,10 @@ hiticej Hit the Ice (Japan) + + hiticerb + Hit the Ice (US, with riser board) + hitme Hit Me (set 1) @@ -26206,6 +33907,10 @@ hitme1 Hit Me (set 2) + + hitnmis2 + Hit 'n Miss (version 2.0) + hitnmiss Hit 'n Miss (version 3.0) @@ -26222,6 +33927,10 @@ hjingi Hana Jingi (Japan, Bet) + + hjingia + Hana Jingi (Japan, Bet, alt.) + hkagerou Hana Kagerou [BET] (Japan) @@ -26258,10 +33967,26 @@ hldspin2v1 Hold & Spin II (Version 2.8R Dual) + + hlntroy + Helen of Troy (1J008311, NSW/ACT) + + + hlntroyu + Helen of Troy (0151336, US) + hlywoodh Hollywood Heat + + hlywoodhf + Hollywood Heat (French) + + + hlywoodhg + Hollywood Heat (German) + hmcompm2 hiphopmania complete MIX 2 (ver UA-A) @@ -26272,7 +33997,7 @@ hmgeo - Heavy Metal Geomatrix (JPN, USA, EUR, ASI, AUS) (Rev A) + Heavy Metal: Geomatrix (Rev B) hnageman @@ -26288,15 +34013,15 @@ hndlchmp - Handle Champ (GQ710 VER. JAB) + Handle Champ (GQ710 97/12/18 VER. SAA) - hnfubuki - Hana Fubuki [BET] (Japan) + hndlchmpj + Handle Champ (GQ710 1997/12/08 VER. JAB) - hng64 - Hyper NeoGeo 64 Bios + hnfubuki + Hana Fubuki [BET] (Japan) hngmnjpm @@ -26310,6 +34035,10 @@ hnkochou Hana Kochou (Japan, Bet) + + hnktonku + Honky Tonk (BHG1455, US) + hnoridur Hana Oriduru (Japan) @@ -26326,6 +34055,10 @@ hoccer2 Hoccer (set 2) + + hockyrmt + Hockey (Ramtek) [TTL] + hocrash Crash (bootleg of Head On) @@ -26334,10 +34067,6 @@ hod House of Diamonds - - hod2bios - Naomi House of the Dead 2 Bios - hoedown Hoe Down @@ -26346,13 +34075,25 @@ hogalley Vs. Hogan's Alley (set HA4-1 E-1) + + hogwild + Hog Wild (US) + + + holdrma + Hollywood Dreams (10100511, NSW/ACT) + holeland - Hole Land + Hole Land (Japan) + + + holeland2 + Hole Land (Spain) holo - Holosseum (US) + Holosseum (US, Rev A) homerun @@ -26370,21 +34111,33 @@ honeydol Honey Dolls + + honeypot + Honey Pot (03J00241, NSW/ACT) + hook Hook (World) hook_401 - Hook (4.01) + Hook (USA 4.01, display A4.01) + + + hook_401_p + Hook (USA 4.01 with prototype sound, display A4.01) hook_404 - Hook (4.04) + Hook (USA 4.04, display A4.01) hook_408 - Hook (4.08) + Hook (USA 4.08, display A4.01) + + + hook_e406 + Hook (UK 4.06, display A4.01) hookj @@ -26394,6 +34147,10 @@ hooku Hook (US) + + hoopitup + Hoop it Up World Tour - 3 on 3 (Rev 23) + hoops Hoops @@ -26406,6 +34163,10 @@ hoops96 Hoops '96 (Europe/Asia 2.0) + + hoopshot + Hoop Shot (version 05.22) + hopmappy Hopping Mappy @@ -26434,49 +34195,89 @@ horshoes American Horseshoes (US) + + hostinv + Host Invaders + hotblock - Hot Blocks - Tetrix II + Hot Blocks - Tetrix II (set 1) + + + hotblocka + Hot Blocks - Tetrix II (set 2) + + + hotblockb + Hot Blocks - Tetrix II (set 3) hotbubl - Hot Bubble + Hot Bubble (Korea, with adult pictures) + + + hotbubla + Hot Bubble (Korea) hotchase - Hot Chase + Hot Chase (set 1) + + + hotchasea + Hot Chase (set 2) hotd - House of the Dead + The House of the Dead hotd2 - House of the Dead 2 + The House of the Dead 2 (USA) + + + hotd2e + The House of the Dead 2 (Export) hotd2o - House of the Dead 2 (original) + The House of the Dead 2 hotd2p - House of the Dead 2 (prototype) + The House of the Dead 2 (prototype) hotd3 The House of the Dead III (GDX-0001) + + hotd4 + The House of the Dead 4 (Export) (Rev B) + + + hotd4a + The House of the Dead 4 (Export) (Rev A) + hotdebut Quiz de Idol! Hot Debut (Japan) + + hotdex + The House of the Dead EX (Japan) + hotdoggn Hotdoggin' hotdogst - Hotdog Storm (International) + Hotdog Storm (Korea) + + + hotdp + The House of the Dead (prototype) hotgm4ev @@ -26522,6 +34323,10 @@ hotmindff Hot Mind (Fit of Fighting hardware) + + hotnight + Hot Night + hotpinbl Hot Pinball @@ -26536,7 +34341,11 @@ hotrodj - Hot Rod (Japan, 4 Players, Floppy Based) + Hot Rod (Japan, 4 Players, Floppy Based, Rev C) + + + hotrodja + Hot Rod (Japan, 4 Players, Floppy Based, Rev B) hotshock @@ -26550,6 +34359,14 @@ hotshots Hot Shots + + hotshotsf + Hot Shots (French) + + + hotshotsg + Hot Shots (German) + hotslot Hot Slot (ver. 05.01) @@ -26568,7 +34385,11 @@ hottop - Hot Toppings (Russia) + Hot Toppings (English) + + + hottopa + Hot Toppings (Russian?) hotwheel @@ -26578,6 +34399,14 @@ hourouki Mahjong Hourouki Part 1 - Seisyun Hen (Japan) + + houseball + House Ball + + + househrt + House of Hearts (10200311, NSW/ACT) + housemn2 House Mannequin Roppongi Live hen (Japan 870418) @@ -26594,6 +34423,10 @@ hparadis Super Hana Paradise (Japan) + + hpierrot + Happy Pierrot + hpolym84 Hyper Olympic '84 @@ -26624,19 +34457,27 @@ hsf2 - Hyper Street Fighter 2: The Anniversary Edition (USA 040202) + Hyper Street Fighter II: The Anniversary Edition (USA 040202) hsf2a - Hyper Street Fighter 2: The Anniversary Edition (Asia 040202) + Hyper Street Fighter II: The Anniversary Edition (Asia 040202) hsf2d Hyper Street Fighter II: The Anniversary Edition (Asia 040202 Phoenix Edition) (bootleg) + + hsf2da + Hyper Street Fighter II: The Anniversary Edition (040202 Asia Phoenix Edition, alt) + hsf2j - Hyper Street Fighter 2: The Anniversary Edition (Japan 031222) + Hyper Street Fighter II: The Anniversary Edition (Japan 040202) + + + hsf2j1 + Hyper Street Fighter II: The Anniversary Edition (Japan 031222) hshavoc @@ -26654,6 +34495,10 @@ hspot3 Hot Spot 3 + + hstenn10 + Hot Shots Tennis (V1.0) + hstennis Hot Shots Tennis (V1.1) @@ -26668,7 +34513,7 @@ htengoku - Hanafuda Hana Tengoku (Japan) + Hanafuda Hana Tengoku [BET] (Japan) hthero @@ -26678,6 +34523,10 @@ hthero93 Hat Trick Hero '93 (Ver 1.0J 1993/02/28) + + hthero93u + Hat Trick Hero '93 (Ver 1.0A 1993/02/28) + hthero94 Hat Trick Hero '94 (Ver 2.2A 1994/05/26) @@ -26686,17 +34535,33 @@ hthero95 Hat Trick Hero '95 (Ver 2.5J 1994/11/03) + + hthero95a + Hat Trick Hero '95 (Ver 2.6Asia 1994/11/17) + hthero95u Hat Trick Hero '95 (Ver 2.5A 1994/11/03) + + hthro95u + Hat Trick Hero '95 (US) + httip_l1 Hot Tip (L-1) hulk - Incredible Hulk,The + The Incredible Hulk + + + humlan + Humlan's Lyckohjul (Sweden, Ver. 402) + + + hummerxt + Hummer Extreme hunchbak @@ -26706,6 +34571,10 @@ hunchbaka Hunchback (set 2) + + hunchbgb + Hunchback (FAR S.A. bootleg on Galaxian hardware) + hunchbkd Hunchback (DK conversion) @@ -26754,10 +34623,22 @@ hustlerb4 Video Hustler (bootleg, set 2) + + hustlerb5 + Video Hustler (bootleg, set 3) + + + hustlerb6 + Video Hustler (bootleg, set 4) + hustlerd Video Hustler (Dynamo Games) + + hustlerp + Hustler + hvnsgate Heaven's Gate @@ -26774,6 +34655,10 @@ hvymetap Heavy Metal Meltdown + + hvymetapg + Heavy Metal Meltdown (German) + hvysmsh Heavy Smash (Europe version -2) @@ -26792,11 +34677,15 @@ hvyunitj - Heavy Unit (Japan, Newer) + Heavy Unit (Japan, newer) + + + hvyunitja + Heavy Unit (Japan, alternate ROM format) hvyunitjo - Heavy Unit (Japan, Older) + Heavy Unit (Japan, older) hvyunitu @@ -26804,11 +34693,19 @@ hwchamp - Heavyweight Champ + Heavyweight Champ (set 1) + + + hwchampa + Heavyweight Champ (set 2) hwchampj - Heavyweight Champ (Japan, FD1094 317-0046) + Heavyweight Champ (Japan) (FD1094 317-0046) + + + hwchampjd + Heavyweight Champ (Japan) (bootleg of FD1094 317-0046 set) hwrace @@ -26850,6 +34747,14 @@ hypbbc2pk Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. KAA) + + hypbl_l2 + HyperBall (L-2) + + + hypbl_l3 + HyperBall (L-3) + hypbl_l4 HyperBall (L-4) @@ -26866,6 +34771,14 @@ hyperbbca Hyper Bishi Bashi Champ (GQ876 VER. AAA) + + hyperbbck + Hyper Bishi Bashi Champ (GE876 VER. KAA) + + + hypernoid + Hypernoid (Ver. 20211128) + hyperpac Hyper Pacman @@ -26874,6 +34787,10 @@ hyperpacb Hyper Pacman (bootleg) + + hyperpcb + Hyper Pacman (bootleg) + hyperspc Hyperspace (bootleg of Asteroids) @@ -26894,9 +34811,13 @@ hyperv2a Hyper V2 (Global VR) Install - 09/30/01 + + hyprdelj + Hyper Duel (Japan) + hyprdriv - Hyperdrive + Hyperdrive (ver 1.40, Oct 23 1998) hyprduel @@ -26914,18 +34835,30 @@ hypreact Mahjong Hyper Reaction (Japan) + + hyprolyb + Hyper Olympic (bootleg) + hyprolym Hyper Olympic hyprolymb - Hyper Olympic (bootleg) + Hyper Olympic (bootleg, set 1) + + + hyprolymba + Hyper Olympic (bootleg, set 2) hypsptsp Hyper Sports Special (Japan) + + i500_10r + Indianapolis 500 (1.0R) + i500_11b Indianapolis 500 (1.1 Belgium) @@ -26950,6 +34883,14 @@ iccash I C Cash (Russia) (Atronic) + + ice_bozo + Bozo's Pail Toss (v2.07) + + + ice_tbd + Turbo Drive (ICE) + iceclimb Vs. Ice Climber (set IC4-4 B-1) @@ -26958,18 +34899,34 @@ iceclimba Vs. Ice Climber (set IC4-4 ?) + + iceclmbj + Vs. Ice Climber (Japan) + iceclmrd Vs. Ice Climber Dual (set IC4-4 A-1) + + iceclmrj + Vs. Ice Climber Dual (Japan) + icecold - Ice Cold Beer + Ice Cold Beer (set 1) + + + icecoldf + Ice Cold Beer (set 2) icefever Ice Fever + + icemania + Ice Mania + ichiban Ichi Ban Jyan @@ -26978,6 +34935,10 @@ ichir Puzzle & Action: Ichidant-R (World) + + ichirbl + Puzzle & Action: Ichidant-R (World) (bootleg) + ichirj Puzzle & Action: Ichidant-R (Japan) @@ -26992,7 +34953,19 @@ id4 - Independence Day + Independence Day (v2.02) + + + id4_201 + Independence Day (v2.01) + + + id4f + Independence Day (v2.02 France) + + + id4f_201 + Independence Day (v2.01 France) idhimitu @@ -27022,6 +34995,10 @@ iganinju Iga Ninjyutsuden (Japan) + + iganinjub + Iga Ninjyutsuden (Japan, bootleg) + igmo IGMO @@ -27046,6 +35023,18 @@ igsm312 unknown 'IGS 6POKER2' game (V312CN) + + igstet341 + Tetris (v341R) + + + igstet342 + Tetris (v342R) + + + igtsc + Super Cherry + ij_l3 Indiana Jones (L-3) @@ -27076,7 +35065,7 @@ ikari3 - Ikari III - The Rescue (World, 8-Way Joystick) + Ikari III - The Rescue (World version 1, 8-Way Joystick) ikari3j @@ -27086,13 +35075,25 @@ ikari3k Ikari Three (Korea, 8-Way Joystick) + + ikari3nr + Ikari III - The Rescue (World, 8-Way Joystick) + ikari3u Ikari III - The Rescue (US, Rotary Joystick) + + ikari3w + Ikari III - The Rescue (World, Rotary Joystick) + ikaria - Ikari Warriors (US) + Ikari Warriors (US, set 1) + + + ikaria2 + Ikari Warriors (US, set 2) ikarijp @@ -27106,6 +35107,10 @@ ikarinc Ikari Warriors (US No Continues) + + ikariram + Rambo 3 (bootleg of Ikari, Joystick hack) + ikaruga Ikaruga (GDL-0010) @@ -27116,12 +35121,44 @@ illvelo - Illvelo (Illmatic Envelope) + Illvelo (Illmatic Envelope) (Japan) ilpag Il Pagliaccio (Italy, Ver. 2.7C) + + im1p1952 + Imperial (1P1952IZ) Blue Moon + + + im1p19s1 + Imperial (1P19S1IZ) Sheer Magic + + + im2_100 + Iron Man 2 v1.00 + + + im2_110 + Iron Man 2 v1.10 + + + im2_120 + Iron Man 2 v1.20 + + + im2_140 + Iron Man 2 v1.40 + + + im2p1929 + Imperial (2P1929IZ) Castaway Stampede + + + im3p1940 + Imperial (3P1940IZ) Cashline D Bucks + imago Imago (cocktail set) @@ -27136,7 +35173,11 @@ imgfight - Image Fight (World, revision A) + Image Fight (World) + + + imgfightb + Image Fight (Japan, bootleg) imgfightj @@ -27162,14 +35203,46 @@ inca Inca + + incachf + Inca Chief (20190711, NSW/ACT) + incanp - Incan Pyramids (Konami Endeavour) + Incan Pyramid (Konami Endeavour, Russia) + + + incasun + Inca Sun (0100872V, NSW/ACT) + + + incasunnz + Inca Sun (0101108V, New Zealand) + + + incasunsp + Inca Sun (0100872V, NSW/ACT, Show Program) + + + incasunu + Inca Sun (CHG1458, US) + + + incasunua + Inca Sun (DHG1577, US) + + + incasunv + Inca Sun (01J01946, Venezuela) ind250cc 250 CC + + indgldcm + Indian Gold - Mr. Cashman (10102511, NSW/ACT) + indianbt Indian Battle @@ -27179,12 +35252,36 @@ Indian Battle (Brazil) - indiandr - Indian Dreaming (0100845V, Local) + indprncs + Indian Princess (10174111, NSW/ACT) + + + indream + Indian Dreaming (10004211, NSW/ACT) + + + indrem2c + Indian Dreaming 2nd Chance (10150611, NSW/ACT) + + + indrema5 + Indian Dreaming (0100845V, NSW/ACT) + + + indrema5ql + Indian Dreaming (0101340V, Queensland) + + + indremce + Indian Dreaming - Cash Express (20109411, NSW/ACT) + + + indremll + Indian Dreaming - Lady Luck (20151911, NSW/ACT) - indianmm - Indian Dreaming - Maximillion$ (10130711, NSW/ACT) + indremmm + Indian Dreaming - Maximillions (10130711, NSW/ACT) indy4 @@ -27206,9 +35303,93 @@ indy800 Indy 800 [TTL] + + indy_113a + Indiana Jones v1.13 + + + indy_113f + Indiana Jones v1.13 (French) + + + indy_113g + Indiana Jones v1.13 (German) + + + indy_113i + Indiana Jones v1.13 (Italian) + + + indy_113l + Indiana Jones v1.13 (Spanish) + + + indy_114a + Indiana Jones v1.14 + + + indy_114f + Indiana Jones v1.14 (French) + + + indy_114g + Indiana Jones v1.14 (German) + + + indy_114i + Indiana Jones v1.14 (Italian) + + + indy_114l + Indiana Jones v1.14 (Spanish) + + + indy_116a + Indiana Jones v1.16 + + + indy_116f + Indiana Jones v1.16 (French) + + + indy_116g + Indiana Jones v1.16 (German) + + + indy_116i + Indiana Jones v1.16 (Italian) + + + indy_116l + Indiana Jones v1.16 (Spanish) + + + indy_210 + Indiana Jones v2.10 + + + indy_210f + Indiana Jones v2.10 (French) + indyheat - Danny Sullivan's Indy Heat + Danny Sullivan's Indy Heat (rev 1) + + + indytem2 + Indiana Jones and the Temple of Doom (set 2) + + + indytem3 + Indiana Jones and the Temple of Doom (set 3) + + + indytem4 + Indiana Jones and the Temple of Doom (set 4) + + + indytemd + Indiana Jones and the Temple of Doom (German) indytemp @@ -27228,7 +35409,7 @@ indytempc - Indiana Jones and the Temple of Doom (Cocktail) + Indiana Jones and the Temple of Doom (cocktail) indytempd @@ -27238,25 +35419,41 @@ inferno Inferno (Williams) + + inidv3ca + Initial D Arcade Stage Ver. 3 Cycraft Edition (Export, Rev A) (GDS-0039A) + inidv3cy - Initial D Arcade Stage Ver. 3 Cycraft Edition (Rev. B) (GDS-0039B) + Initial D Arcade Stage Ver. 3 Cycraft Edition (Export, Rev B) (GDS-0039B) initd - Initial D Arcade Stage (Rev B) (Japan) (GDS-0020B) + Initial D Arcade Stage (Japan, Rev B) (GDS-0020B) initdexp + Initial D Arcade Stage (Export, Rev A) (GDS-0025A) + + + initdexpo Initial D Arcade Stage (Export) (GDS-0025) + + initdo + Initial D Arcade Stage (Japan) (GDS-0020) + initdv2e Initial D Arcade Stage Ver. 2 (Export) (GDS-0027) initdv2j - Initial D Arcade Stage Ver. 2 (Japan) (Rev. B) (GDS-0026B) + Initial D Arcade Stage Ver. 2 (Japan, Rev B) (GDS-0026B) + + + initdv2ja + Initial D Arcade Stage Ver. 2 (Japan, Rev A) (GDS-0026A) initdv2jo @@ -27268,11 +35465,19 @@ initdv3j - Initial D Arcade Stage Ver. 3 (Japan) (Rev. C) (GDS-0032C) + Initial D Arcade Stage Ver. 3 (Japan, Rev C) (GDS-0032C) initdv3jb - Initial D Arcade Stage Ver. 3 (Japan) (Rev. B) (GDS-0032B) + Initial D Arcade Stage Ver. 3 (Japan, Rev B) (GDS-0032B) + + + initiad4 + Initial D4 (Rev D) + + + initiad4c + Initial D4 (Rev C) inquiztr @@ -27286,10 +35491,18 @@ insectx Insector X (World) + + insectxbl + Insector X (bootleg) + insectxj Insector X (Japan) + + instantm + Polaroid Instant Memories + intcup94 International Cup '94 (Ver 2.2O 1994/05/26) @@ -27306,6 +35519,10 @@ intlaser International Team Laser (prototype) + + intrepi2 + Intrepid (set 2) + intrepid Intrepid (set 1) @@ -27326,6 +35543,14 @@ intrepidb3 Intrepid (Elsys bootleg, set 2) + + intrgirl + Intergirl + + + intrgmes + Joker Card (Inter Games) + introdon Karaoke Quiz Intro Don Don! (J 960213 V1.000) @@ -27340,11 +35565,11 @@ inttoote - International Toote (Germany) + International Toote (Germany, P523.V01) - inttootea - International Toote II (World?) + inttoote2 + International Toote II (v1.24, P387.V01) inufuku @@ -27352,7 +35577,7 @@ inunoos - Inu No Osanpo / Dog Walking (Rev A) + Inu no Osanpo / Dog Walking (Japan, Export, Rev A) invad2ct @@ -27370,13 +35595,25 @@ invaderl Space Invaders (Logitec) + + invadernc + Space Invaders (Nas Corp bootleg) + invaders Space Invaders / Space Invaders M + + invadersem + Space Invaders (Electromar, Spanish) + invadpt2 - Space Invaders Part II (Taito) + Space Invaders Part II (Taito, bigger ROMs) + + + invadpt2a + Space Invaders Part II (Taito, smaller ROMs) invadpt2br @@ -27386,25 +35623,37 @@ invadrmr Space Invaders (Model Racing) + + invasioa + Invasion (bootleg, set 1, normal graphics) + + + invasiob + Invasion (bootleg, set 2, no copyright) + invasion Invasion (Sidam) invasiona - Invasion (bootleg set 1, normal graphics) + UFO Robot Attack (bootleg of Invasion, newer set) + + + invasiona2 + UFO Robot Attack (bootleg of Invasion, older set) invasionb - Invasion (bootleg set 2, no copyright) + Invasion (Italian bootleg) invasionrz - Invasion (bootleg set 3, R Z SRL Bologna) + Invasion (bootleg set 1, R Z SRL Bologna) invasionrza - Invasion (bootleg set 4, R Z SRL Bologna) + Invasion (bootleg set 2, R Z SRL Bologna) invasnab @@ -27418,13 +35667,21 @@ invasnab4 Invasion - The Abductors (version 4.0) + + invcarht + Invinco / Car Hunt (Germany) + invds Invinco / Deep Scan invho2 - Invinco / Head On 2 + Invinco / Head On 2 (set 1) + + + invho2a + Invinco / Head On 2 (set 2) invinco @@ -27474,6 +35731,10 @@ invqix Space Invaders / Qix Silver Anniversary Edition (Ver. 2.03) + + invrvnga + Invader's Revenge (Dutchford) + invrvnge Invader's Revenge (set 1) @@ -27496,15 +35757,27 @@ inwinner - Instant Winner (Russia) + Instant Winner (Russian) + + + inyourfa + In Your Face (North America, prototype) + + + iomoon + Io Moon + + + iowapp + Iowa Premium Player (2131-21, U5-1) ipminvad - IPM Invader + IPM Invader (set 1) ipminvad1 - IPM Invader (Incomplete Dump) + IPM Invader (set 2) ippatsu @@ -27512,20 +35785,24 @@ iqblock - IQ-Block + IQ-Block (V100U) iqblocka - Shu Zi Le Yuan (V127M) + Shuzi Leyuan (V127M, gambling) iqblockf - Shu Zi Le Yuan (V113FR) + IQ Block (V113FR, gambling) iqpipe IQ Pipe + + irion + Irion + irobot I, Robot @@ -27534,25 +35811,33 @@ iron Iron (SNES bootleg) + + ironball + Iron Balls + ironclad - Choutetsu Brikin'ger - Iron clad (Prototype) + Choutetsu Brikin'ger / Iron Clad (prototype) ironclado - Choutetsu Brikin'ger - Iron clad (Prototype, bootleg) + Choutetsu Brikin'ger / Iron Clad (prototype, bootleg) ironfort Iron Fortress - ironfortj - Iron Fortress (Japan) + ironfortc + Gongtit Jiucoi Iron Fortress (Hong Kong) ironhors - Iron Horse + Iron Horse (version K) + + + ironhorsh + Iron Horse (version H) ironmaid @@ -27562,10 +35847,6 @@ irrmaze The Irritating Maze / Ultra Denryu Iraira Bou - - isgsm - ISG Selection Master Type 2006 BIOS - island Island (050713 World) @@ -27574,6 +35855,30 @@ island2 Island 2 (060529 World) + + island2_10 + Island 2 (110124 Entertainment A) + + + island2_11 + Island 2 (110204 Entertainment A) + + + island2_12 + Island 2 (110311 Entertainment B) + + + island2_13 + Island 2 (140526 Entertainment B) + + + island2_14 + Island 2 (110411 Entertainment C) + + + island2_2 + Island 2 (061214 World) + island2_3 Island 2 (061218 World) @@ -27598,6 +35903,18 @@ island2_6 Island 2 (090724 Entertainment) + + island2_7 + Island 2 (100401 Entertainment X) + + + island2_8 + Island 2 (101208 Entertainment N) + + + island2_9 + Island 2 (110111 Entertainment A) + island2a Island 2 (bootleg, 060529, banking address hack) @@ -27614,6 +35931,10 @@ island_2 Island (070409 Russia) + + island_3 + Island (090806 Entertainment) + islanda Island (bootleg, 050713, backdoor) @@ -27626,10 +35947,18 @@ islandc Island (bootleg, 050713, LOTOS OS01) + + isld_vortex + Vortex (Island Design) + istellar Interstellar Laser Fantasy + + istreb + Istrebiteli + itaten Itazura Tenshi (Japan) @@ -27638,10 +35967,6 @@ itazuram Itazura Monkey - - iteagle - Eagle BIOS - ivorytsk Ivory Tusk @@ -27912,11 +36237,11 @@ j2fws - Five Way Shuffle (Set 1) (JPM) (MPS) + Five Way Shuffle (set 1) (JPM) (MPS) j2fwsa - Five Way Shuffle (Set 2) (JPM) (MPS) + Five Way Shuffle (set 2) (JPM) (MPS) j2ghostb @@ -28092,15 +36417,15 @@ j2notexc - Note Exchange (Set 1) (JPM) (MPS) + Note Exchange (set 1) (JPM) (MPS) j2notexca - Note Exchange (Set 2) (JPM) (MPS) + Note Exchange (set 2) (JPM) (MPS) j2notexcb - Note Exchange (Set 3) (JPM) (MPS) + Note Exchange (set 3) (JPM) (MPS) j2notspn @@ -28124,11 +36449,11 @@ j2nudbnz - Nudge Bonanza Deluxe (Set 1) (JPM) (MPS) + Nudge Bonanza Deluxe (set 1) (JPM) (MPS) j2nudbnza - Nudge Bonanza Deluxe (Set 2) (JPM) (MPS) + Nudge Bonanza Deluxe (set 2) (JPM) (MPS) j2nuddud @@ -28208,11 +36533,11 @@ j2reelbn - Reel Bingo Club (Set 1) (JPM) (MPS) + Reel Bingo Club (set 1) (JPM) (MPS) j2reelbna - Reel Bingo Club (Set 2) (JPM) (MPS) + Reel Bingo Club (set 2) (JPM) (MPS) j2reelbo @@ -28388,11 +36713,11 @@ j2tstplt - Test Pilot (Set 1) (Pcp) (MPS) + Test Pilot (set 1) (Pcp) (MPS) j2tstplta - Test Pilot (Set 2) (Pcp) (MPS) + Test Pilot (set 2) (Pcp) (MPS) j2tupnd @@ -29068,11 +37393,11 @@ j6aceclb - Ace Of Clubs (Crystal) (IMPACT, set 1) + Ace Of Clubs (Crystal) (IMPACT, GND D 4) j6aceclba - Ace Of Clubs (Crystal) (IMPACT, set 2) + Ace Of Clubs (Crystal) (IMPACT, GND D 4 P, Protocol) j6acehi @@ -29084,51 +37409,47 @@ j6arcade - Arcadia (JPM) (IMPACT) (V9, set 1) + Arcadia (JPM) (IMPACT) (AR9 C10, V9, set 1) j6arcadea - Arcadia (JPM) (IMPACT) (V9, set 2) + Arcadia (JPM) (IMPACT) (AR9 A C10, V9, set 2) j6arcadeb - Arcadia (JPM) (IMPACT) (V9, set 3) + Arcadia (JPM) (IMPACT) (AR9 C10, V9, set 3) j6arcadec - Arcadia (JPM) (IMPACT) (V9, set 4) + Arcadia (JPM) (IMPACT) (AR9 P, V9, set 4, Protocol) j6arcaded - Arcadia (JPM) (IMPACT) (V9, set 5) + Arcadia (JPM) (IMPACT) (AR9 P C10, V9, set 5, Protocol) j6arcadee - Arcadia (JPM) (IMPACT) (V10, set 1) + Arcadia (JPM) (IMPACT) (AR10 C11, V10, set 1, Protocol) j6arcadef - Arcadia (JPM) (IMPACT) (V10, set 2) + Arcadia (JPM) (IMPACT) (AR10 A C11, V10, set 2, Protocol) j6arcadeg - Arcadia (JPM) (IMPACT) (V10, set 3) + Arcadia (JPM) (IMPACT) (AR10 C11, V10, set 3, Protocol) j6arcadeh - Arcadia (JPM) (IMPACT) (V10, set 4) + Arcadia (JPM) (IMPACT) (AR10 P, V10, set 4, Protocol) j6arcadei - Arcadia (JPM) (IMPACT) (V10, set 5) + Arcadia (JPM) (IMPACT) (AR10 P C11, V10, set 5, Protocol) j6arcadej - Arcadia (JPM) (IMPACT) (V10, set 6) - - - j6arcadek - Arcadia (JPM) (IMPACT) (V10, set 7) + Arcadia (JPM) (IMPACT) (AR10 C11, V10, set 6, Protocol?) j6bags @@ -29136,27 +37457,27 @@ j6bbankr - Big Banker (Crystal) (IMPACT) (BB 2 T 2) + Big Banker (JPM) (IMPACT) (BB 2 T 2) j6big50 - Big 50 (JPM) (IMPACT) (set 1) + Big 50 (JPM) (IMPACT) (BF12 L12) j6big50a - Big 50 (JPM) (IMPACT) (set 2) + Big 50 (JPM) (IMPACT) (BF12P F12, Protocol) j6big50b - Big 50 (JPM) (IMPACT) (set 3) + Big 50 (JPM) (IMPACT) (BF12 AH12) j6big50c - Big 50 (JPM) (IMPACT) (set 4) + Big 50 (JPM) (IMPACT) (BF12 L12, Whitbread) j6big50d - Big 50 (JPM) (IMPACT) (set 5) + Big 50 (JPM) (IMPACT) (BF L8) j6bigbnk @@ -29164,7 +37485,7 @@ j6bigbnka - Big Banker (JPM) (IMPACT) (BB10C 20) (set 2) + Big Banker (JPM) (IMPACT) (BB10C 20) (set 2, Protocol) j6bigbnkb @@ -29180,7 +37501,7 @@ j6bigbnke - Big Banker (JPM) (IMPACT) (BB8 P H18) + Big Banker (JPM) (IMPACT) (BB8 P H18) (Protocol) j6bigbnkf @@ -29188,7 +37509,7 @@ j6bigbnkg - Big Banker (JPM) (IMPACT) (BB6 C 16) (set 1) + Big Banker (JPM) (IMPACT) (BB6 C 16) (set 1, Protocol) j6bigbnkh @@ -29200,7 +37521,7 @@ j6bigbnkj - Big Banker (JPM) (IMPACT) (BB2BP H11) + Big Banker (JPM) (IMPACT) (BB2BP H11) (Protocol) j6bigbnkk @@ -29280,7 +37601,7 @@ j6bigpcta - Big Picture (Ace) (IMPACT) (set 2) + Big Picture (Ace) (IMPACT) (set 2, Protocol) j6bigpctb @@ -29288,19 +37609,19 @@ j6bigtop - Big Top Club (JPM) (IMPACT) (set 1) + Big Top Club (JPM) (IMPACT) (BT3 BT6) set 1) j6bigtopa - Big Top Club (JPM) (IMPACT) (set 2) + Big Top Club (JPM) (IMPACT) (BT4 BT8) (set 2) j6bigtopb - Big Top Club (JPM) (IMPACT) (set 3) + Big Top Club (JPM) (IMPACT) (BT4 BT8P) (set 3, Protocol) j6bigtopc - Big Top Club (JPM) (IMPACT) (set 4) + Big Top Club (JPM) (IMPACT) (BT4 BT8F) (set 4) j6bigwhl @@ -29308,7 +37629,7 @@ j6bigwhla - Big Wheel (JPM) (IMPACT) (set 2) + Big Wheel (JPM) (IMPACT) (set 2, Protocol) j6bigwhlb @@ -29372,7 +37693,7 @@ j6bnzaa - Bonanza (JPM) (IMPACT) (BO1 P H06) + Bonanza (JPM) (IMPACT) (BO1 P H06) (Protocol) j6bnzab @@ -29388,7 +37709,7 @@ j6bnzae - Bonanza (JPM) (IMPACT) (BO 9P 14) + Bonanza (JPM) (IMPACT) (BO 9P 14) (Protocol) j6bnzaf @@ -29448,23 +37769,23 @@ j6camelt - Camelot (JPM) (IMPACT) (set 1) + Camelot (JPM) (IMPACT) (CA8 C10) j6camelta - Camelot (JPM) (IMPACT) (set 2) + Camelot (JPM) (IMPACT) (CA8P C10, Protocol) j6cameltb - Camelot (JPM) (IMPACT) (set 3) + Camelot (JPM) (IMPACT) (CA8 AC10) j6cameltc - Camelot (JPM) (IMPACT) (set 4) + Camelot (JPM) (IMPACT) (CA8 C10, Whitbread) j6cameltd - Camelot (JPM) (IMPACT) (set 5) + Camelot (JPM) (IMPACT) (CA6 C8) j6cas5 @@ -29496,7 +37817,7 @@ j6cas5g - Casino 5ive Liner (JPM) (IMPACT) (set 8) + Casino 5ive Liner (JPM) (IMPACT) (set 8, Whitbread) j6cas5h @@ -29512,7 +37833,7 @@ j6cas5k - Casino 5ive Liner (JPM) (IMPACT) (set 12) + Casino 5ive Liner (JPM) (IMPACT) (set 12, Whitbread) j6cas5l @@ -29612,11 +37933,11 @@ j6cascz - Casino Crazy (JPM) (IMPACT) (set 1) + Casino Crazy (JPM) (IMPACT) (CC07C L12) (set 1) j6cascza - Casino Crazy (JPM) (IMPACT) (set 2) + Casino Crazy (JPM) (IMPACT) (CC07C L12) (set 2) j6casczb @@ -29624,7 +37945,7 @@ j6casczc - Casino Crazy (JPM) (IMPACT) (set 4) + Casino Crazy (JPM) (IMPACT) (CC11C L16) (set 4) j6casczd @@ -29632,23 +37953,23 @@ j6cascze - Casino Crazy (JPM) (IMPACT) (set 6) + Casino Crazy (JPM) (IMPACT) (CC16C L23) (set 6) j6casczf - Casino Crazy (JPM) (IMPACT) (set 7) + Casino Crazy (JPM) (IMPACT) (CC16C L23) (set 7) j6casczg - Casino Crazy (JPM) (IMPACT) (set 8) + Casino Crazy (JPM) (IMPACT) (CC16C AL23) (set 8) j6casczh - Casino Crazy (JPM) (IMPACT) (set 9) + Casino Crazy (JPM) (IMPACT) (CC16C L23) (set 9) j6casczi - Casino Crazy (JPM) (IMPACT) (set 10) + Casino Crazy (JPM) (IMPACT) (CC15C L22) (set 10) j6casczj @@ -29656,7 +37977,7 @@ j6casczk - Casino Crazy (JPM) (IMPACT) (set 12) + Casino Crazy (JPM) (IMPACT) (CC12C L17) (set 12) j6casczl @@ -29664,7 +37985,7 @@ j6casczm - Casino Crazy (JPM) (IMPACT) (set 14) + Casino Crazy (JPM) (IMPACT) (CC02C L08) (set 14) j6caslas @@ -29680,7 +38001,7 @@ j6caslasc - Casino Las Vegas (JPM) (IMPACT) (set 4) + Casino Las Vegas (JPM) (IMPACT) (set 4, Whitbread) j6ccc @@ -29816,11 +38137,11 @@ j6colb - Coliseum (Mdm) (IMPACT) (set 3) + Coliseum Cash (JPM) (IMPACT) (set 6) j6colc - Coliseum (Mdm) (IMPACT) (set 4) + Coliseum Cash (JPM) (IMPACT) (set 7) j6colcsh @@ -29844,15 +38165,15 @@ j6cold - Coliseum (Mdm) (IMPACT) (set 5) + Coliseum Cash (JPM) (IMPACT) (set 8) j6cole - Coliseum (Mdm) (IMPACT) (set 6) + Coliseum Cash (JPM) (IMPACT) (set 9) j6colf - Coliseum (Mdm) (IMPACT) (set 7) + Coliseum Cash (JPM) (IMPACT) (set 10) j6colic @@ -29876,7 +38197,7 @@ j6colmon - Colour Of Money (JPM) (IMPACT) (set 1) + Colour Of Money (JPM) (IMPACT) (set 1, Whitbread) j6colmona @@ -29896,7 +38217,7 @@ j6colmone - Colour Of Money (JPM) (IMPACT) (set 6) + Colour Of Money (JPM) (IMPACT) (set 6, Whitbread) j6colmonf @@ -29944,35 +38265,35 @@ j6cpal - Caesars Palace (Whitbread / Crystal) (IMPACT) (set 1) + Caesars Palace (Ace) (IMPACT) (set 1) j6cpala - Caesars Palace (Whitbread / Crystal) (IMPACT) (set 2) + Caesars Palace (Ace) (IMPACT) (set 2) j6cpalb - Caesars Palace (Whitbread / Crystal) (IMPACT) (set 3) + Caesars Palace (Ace) (IMPACT) (set 3) j6cpalc - Caesars Palace (Whitbread / Crystal) (IMPACT) (set 4) + Caesars Palace (Ace) (IMPACT) (set 4, Whitbread) j6cpald - Caesars Palace (Whitbread / Crystal) (IMPACT) (set 5) + Caesars Palace (Crystal) (IMPACT) (set 1) j6cpale - Caesars Palace (Whitbread / Crystal) (IMPACT) (set 6) + Caesars Palace (Crystal) (IMPACT) (set 2) j6cpalf - Caesars Palace (Whitbread / Crystal) (IMPACT) (set 7) + Caesars Palace (Crystal) (IMPACT) (set 3) j6cpalg - Caesars Palace (Whitbread / Crystal) (IMPACT) (set 8) + Caesars Palace (Ace) (IMPACT) (set 5) j6cpclb @@ -29984,7 +38305,7 @@ j6cpclbb - Caesar's Palace Club (JPM) (IMPACT) (set 3) + Caesar's Palace Club (JPM) (IMPACT) (set 3, Protocol) j6crack @@ -30008,7 +38329,7 @@ j6cracke - Cracker (JPM) (IMPACT) (set 6) + Cracker (JPM) (IMPACT) (set 6, Whitbread) j6crackf @@ -30096,7 +38417,7 @@ j6cshbstc - Cash Buster (JPM) (IMPACT) (set 4) + Cash Buster (JPM) (IMPACT) (set 4, Whitbread) j6cshbstd @@ -30124,7 +38445,7 @@ j6cshrdc - Cash Raider (Ace) (IMPACT) (set 4) + Cash Raider (Ace) (IMPACT) (set 4, Whitbread) j6cshrdd @@ -30292,7 +38613,7 @@ j6dyfle - Do You Feel Lucky (JPM) (IMPACT) (set 6) + Do You Feel Lucky (JPM) (IMPACT) (set 6, Whitbread) j6dyflf @@ -30360,19 +38681,19 @@ j6ewn - Each Way Nudger (JPM) (IMPACT) + Each Way Nudger Mark 3 (Crystal) (IMPACT) (set 1) j6ewndg - Each Way Nudger (Crystal) (IMPACT) (set 1) + Each Way Nudger Mark 3 (Crystal) (IMPACT) (set 2) j6ewndga - Each Way Nudger (Crystal) (IMPACT) (set 2) + Each Way Nudger Mark 3 (Crystal) (IMPACT) (set 3) j6ewndgb - Each Way Nudger (Crystal) (IMPACT) (set 3) + Each Way Nudger Mark 3 (Crystal) (IMPACT) (set 4) j6fastfr @@ -30384,19 +38705,19 @@ j6fasttk - Fast Trak (JPM) (IMPACT) (set 1) + Fast?Trak (JPM) (IMPACT) (set 1) j6fasttka - Fast Trak (JPM) (IMPACT) (set 2) + Fast?Trak (JPM) (IMPACT) (set 2) j6fasttkb - Fast Trak (JPM) (IMPACT) (set 3) + Fast?Trak (JPM) (IMPACT) (set 3) j6fasttkc - Fast Trak (JPM) (IMPACT) (set 4) + Fast?Trak (JPM) (IMPACT) (set 4, Whitbread) j6fbcrz @@ -30448,23 +38769,23 @@ j6firbl - Fireball (JPM) (IMPACT) (set 1) + Fireball (Ace) (IMPACT) (set 1, Whitbread) j6firbla - Fireball (JPM) (IMPACT) (set 2) + Fireball (Ace) (IMPACT) (set 2) j6firblb - Fireball (JPM) (IMPACT) (set 3) + Fireball (Ace) (IMPACT) (set 3) j6firblc - Fireball (JPM) (IMPACT) (set 4) + Fireball (Ace) (IMPACT) (set 4) j6firbld - Fireball (JPM) (IMPACT) (set 5) + Fireball (Ace) (IMPACT) (set 5, Whitbread) j6firclb @@ -30532,7 +38853,7 @@ j6fivelnc - Five Liner (JPM) (IMPACT) (set 4) + Five Liner (JPM) (IMPACT) (set 4, Whitbread) j6footy @@ -30564,7 +38885,7 @@ j6frc10c - Force 10 (JPM) (IMPACT) (set 4) + Force 10 (JPM) (IMPACT) (set 4, Whitbread) j6frc10d @@ -30592,23 +38913,23 @@ j6gforce - G Force (JPM) (IMPACT) (set 1) + G Force Roller Coaster (JPM) (IMPACT) (set 1) j6gforcea - G Force (JPM) (IMPACT) (set 2) + G Force Roller Coaster (JPM) (IMPACT) (set 2) j6gforceb - G Force (JPM) (IMPACT) (set 3) + G Force Roller Coaster (JPM) (IMPACT) (set 3) j6gforcec - G Force (JPM) (IMPACT) (set 4) + G Force Roller Coaster (JPM) (IMPACT) (set 4, Whitbread) j6gforced - G Force (JPM) (IMPACT) (15GBP Jackpot) + G Force Roller Coaster (JPM) (IMPACT) (set 5) j6gidogh @@ -30624,7 +38945,11 @@ j6gldclbb - Gladiator Club (JPM) (IMPACT) (set 3) + Gladiator Club (JPM) (IMPACT) (set 3, Protocol) + + + j6gldday + Golden Day (JPM) (IMPACT) j6gldmin @@ -30640,7 +38965,7 @@ j6gogolda - Go For Gold (JPM) (IMPACT) (set 2) + Go For Gold (JPM) (IMPACT) (set 2, Protocol) j6gogoldb @@ -30648,7 +38973,7 @@ j6gogoldc - Go For Gold (JPM) (IMPACT) (set 4) + Go For Gold (JPM) (IMPACT) (set 4, Whitbread) j6golddm @@ -30720,39 +39045,39 @@ j6guab - Give Us A Break (JPM) (IMPACT) (set 1) + Give Us A Break (JPM) (IMPACT) (GB 5 C 8) (set 1) j6guaba - Give Us A Break (JPM) (IMPACT) (set 2) + Give Us A Break (JPM) (IMPACT) (GB 5P C 8) (set 2, Protocol) j6guabb - Give Us A Break (JPM) (IMPACT) (set 3) + Give Us A Break (JPM) (IMPACT) (GB 5 C 8) (set 3, Whitbread) j6guabc - Give Us A Break (JPM) (IMPACT) (set 4) + Give Us A Break (JPM) (IMPACT) (GB 6 C 9) (set 4) j6guabcl - Give Us A Break Club (JPM) (IMPACT) (set 1) + Give Us A Break Club (JPM) (IMPACT) (GB 8 GB12) (set 1) j6guabcla - Give Us A Break Club (JPM) (IMPACT) (set 2) + Give Us A Break Club (JPM) (IMPACT) (GB 8 GB12P) (set 2, Protocol) j6guabd - Give Us A Break (JPM) (IMPACT) (set 5) + Give Us A Break (JPM) (IMPACT) (GB 6P C 9) (set 5, Protocol) j6guabe - Give Us A Break (JPM) (IMPACT) (set 6) + Give Us A Break (JPM) (IMPACT) (GB 6 C 9) (set 6) j6guabf - Give Us A Break (JPM) (IMPACT) (set 7) + Give Us A Break (JPM) (IMPACT) (GB 6 C 9) (set 7, Whitbread) j6h5clb @@ -30764,15 +39089,15 @@ j6hapyhr - Happy Hour (JPM) (IMPACT) (set 1) + Happy Hour (JPM) (IMPACT) (HH2 C5) (set 1) j6hapyhra - Happy Hour (JPM) (IMPACT) (set 2) + Happy Hour (JPM) (IMPACT) (HH2 C5) (set 2) j6hapyhrb - Happy Hour (JPM) (IMPACT) (set 3) + Happy Hour (JPM) (IMPACT) (HH2 C5) (set 3) j6hdc @@ -30808,7 +39133,7 @@ j6hifly - Hi Flyer (Crystal) (IMPACT) + Hi Flyer (Ace) (IMPACT) j6hikar @@ -30836,7 +39161,7 @@ j6hilosvc - Hi Lo Silver (JPM) (IMPACT) (set 4) + Hi Lo Silver (JPM) (IMPACT) (set 4, Whitbread) j6hilosvd @@ -30880,7 +39205,7 @@ j6hirlclc - Hi Roller Club (JPM) (IMPACT) (set 4) + Hi Roller Club (JPM) (IMPACT) (set 4, Protocol) j6hirol @@ -30896,11 +39221,11 @@ j6hirolc - Hi Roller (JPM) (IMPACT) (set 4) + Hi Roller (JPM) (IMPACT) (set 4, Whitbread) j6hirold - Hi Roller (JPM) (IMPACT) (set 5) + Hi Roller (JPM) (IMPACT) (set 5, Whitbread) j6hisprt @@ -30928,7 +39253,7 @@ j6hotshtc - Hot Shot (Ace) (IMPACT) (set 4) + Hot Shot (Ace) (IMPACT) (set 4, Whitbread) j6hotshtd @@ -30988,63 +39313,63 @@ j6impuls - Impulse (JPM) (IMPACT) (set 1) + Impulse (JPM) (IMPACT) (IP 5 C13) (set 1) j6impulsa - Impulse (JPM) (IMPACT) (set 2) + Impulse (JPM) (IMPACT) (IP 6 C14) (set 2) j6impulsb - Impulse (JPM) (IMPACT) (set 3) + Impulse (JPM) (IMPACT) (IP 6 AC14) (set 3) j6impulsc - Impulse (JPM) (IMPACT) (set 4) + Impulse (JPM) (IMPACT) (IP 7 C15) (set 4) j6impulsd - Impulse (JPM) (IMPACT) (set 5) + Impulse (JPM) (IMPACT) (IP 7 AC13) (set 5) j6impulse - Impulse (JPM) (IMPACT) (set 6) + Impulse (JPM) (IMPACT) (IP 7P C15) (set 6) j6impulsf - Impulse (JPM) (IMPACT) (set 7) + Impulse (JPM) (IMPACT) (IP 7P C15) (set 7, Whitbread) j6indy - Indiana Jones (JPM) (IMPACT) (set 1) + Indiana Jones (JPM) (IMPACT) (IJ6 L11) (set 1) j6indya - Indiana Jones (JPM) (IMPACT) (set 2) + Indiana Jones (JPM) (IMPACT) (IJ6P L11) (set 2, Protocol) j6indyb - Indiana Jones (JPM) (IMPACT) (set 3) + Indiana Jones (JPM) (IMPACT) (IJ6 I L11) (set 3) j6indyc - Indiana Jones (JPM) (IMPACT) (set 4) + Indiana Jones (JPM) (IMPACT) (IJ6A AL13) (set 4) j6indyd - Indiana Jones (JPM) (IMPACT) (set 5) + Indiana Jones (JPM) (IMPACT) (IJ6AP AL13) (set 5, Protocol) j6indye - Indiana Jones (JPM) (IMPACT) (set 6) + Indiana Jones (JPM) (IMPACT) (IJ8 L18) (set 6) j6indyf - Indiana Jones (JPM) (IMPACT) (set 7) + Indiana Jones (JPM) (IMPACT) (IJ8P L18) (set 7, Protocol) j6indyg - Indiana Jones (JPM) (IMPACT) (set 8) + Indiana Jones (JPM) (IMPACT) (IJ8 AL18) (set 8) j6indyge @@ -31056,19 +39381,19 @@ j6indyh - Indiana Jones (JPM) (IMPACT) (set 9) + Indiana Jones (JPM) (IMPACT) (IJ8 I L18) (set 9) j6indyi - Indiana Jones (JPM) (IMPACT) (set 10) + Indiana Jones (JPM) (IMPACT) (IJ11 L22) (set 10) j6indyj - Indiana Jones (JPM) (IMPACT) (set 11) + Indiana Jones (JPM) (IMPACT) (IJ11P L22) (set 11, Protocol) j6indyk - Indiana Jones (JPM) (IMPACT) (set 12) + Indiana Jones (JPM) (IMPACT) (IJ11 AL22) (set 12) j6jackjs @@ -31196,19 +39521,19 @@ j6kungfud - Kung Fu (Ace) (IMPACT) (set 5) + Kung Fu (Ace) (IMPACT) (set 5, Whitbread) j6luckla - Lucky Las Vegas (JPM) (IMPACT) (set 1) + Lucky Las Vegas (Crystal) (IMPACT) (set 1) j6lucklaa - Lucky Las Vegas (JPM) (IMPACT) (set 2) + Lucky Las Vegas (Crystal) (IMPACT) (set 2) j6lucklab - Lucky Las Vegas (JPM) (IMPACT) (set 3) + Lucky Las Vegas (Crystal) (IMPACT) (set 3) j6lucklo @@ -31252,7 +39577,7 @@ j6mavrkc - Maverick (JPM) (IMPACT) (set 4) + Maverick (JPM) (IMPACT) (set 4, Whitbread) j6mavrkd @@ -31276,7 +39601,7 @@ j6maxodc - Maximum Overdrive (JPM) (IMPACT) (set 4) + Maximum Overdrive (JPM) (IMPACT) (set 4, Whitbread) j6medal @@ -31316,7 +39641,7 @@ j6megbckd - Mega Bucks (JPM) (IMPACT) (set 5) + Mega Bucks (JPM) (IMPACT) (set 5, Whitbread) j6milln @@ -31332,47 +39657,47 @@ j6mono60 - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 1) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO13 C24) (set 1) j6mono60a - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 2) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO13 C24) (set 2) j6mono60b - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 3) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO13 C24) (set 3) j6mono60c - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 4) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO13 C24) (set 4, Whitbread) j6mono60d - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 5) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO11 L22) (set 5) j6mono60e - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 6) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO11P L22)(set 6, Protocol) j6mono60f - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 7) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO11 AL22 (set 7) j6mono60g - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 8) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO11 L22) (set 8, Whitbread) j6mono60h - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 9) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO11 IL22) (set 9) j6mono60i - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 10) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO11 IL22) (set 10) j6mono60j - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 11) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO8 L16) (set 11) j6mono60k @@ -31380,7 +39705,7 @@ j6mono60l - Monopoly 60th Anniversary Edition (JPM) (IMPACT) (set 13) + Monopoly 60th Anniversary Edition (JPM) (IMPACT) (MO3 L11) (set 13) j6monobn @@ -31416,39 +39741,39 @@ j6montlk - Money Talks (JPM) (IMPACT) (set 1) + Money Talks (JPM) (IMPACT) (MT5 L17) (set 1) j6montlka - Money Talks (JPM) (IMPACT) (set 2) + Money Talks (JPM) (IMPACT) (MT5 I L17) (set 2) j6montlkb - Money Talks (JPM) (IMPACT) (set 3) + Money Talks (JPM) (IMPACT) (MT3 L12) (set 3) j6montlkc - Money Talks (JPM) (IMPACT) (set 4) + Money Talks (JPM) (IMPACT) (MT3 P L12) (set 4, Protocol) j6montlkd - Money Talks (JPM) (IMPACT) (set 5) + Money Talks (JPM) (IMPACT) (MT3 A L12) (set 5) j6montlke - Money Talks (JPM) (IMPACT) (set 6) + Money Talks (JPM) (IMPACT) (MT3 P GL12) (set 6, Protocol) j6montlkf - Money Talks (JPM) (IMPACT) (set 7) + Money Talks (JPM) (IMPACT) (MT7 L19) (set 7) j6montlkg - Money Talks (JPM) (IMPACT) (set 8) + Money Talks (JPM) (IMPACT) (MT7 P L19) (set 8, Protocol) j6montlkh - Money Talks (JPM) (IMPACT) (set 9) + Money Talks (JPM) (IMPACT) (MT7 A L19) (set 9) j6outlaw @@ -31476,23 +39801,23 @@ j6oxobin - Oxo Bingo (JPM) (IMPACT) (set 1) + Oxo Bingo (JPM) (IMPACT) (OX6 L12) (set 1) j6oxobina - Oxo Bingo (JPM) (IMPACT) (set 2) + Oxo Bingo (JPM) (IMPACT) (OX6 L12) (set 2) j6oxobinb - Oxo Bingo (JPM) (IMPACT) (set 3) + Oxo Bingo (JPM) (IMPACT) (OX8 AC14) (set 3) j6oxobinc - Oxo Bingo (JPM) (IMPACT) (set 4) + Oxo Bingo (JPM) (IMPACT) (OX8 AC14) (set 4) j6oxobind - Oxo Bingo (JPM) (IMPACT) (set 5) + Oxo Bingo (JPM) (IMPACT) (OX11 AC17) (set 5) j6oxobine @@ -31500,7 +39825,7 @@ j6oxobinf - Oxo Bingo (JPM) (IMPACT) (set 7) + Oxo Bingo (JPM) (IMPACT) (OX11 AC17) (set 7) j6oxoc @@ -31608,7 +39933,7 @@ j6pinwzdc - Pinball Wizard (JPM) (IMPACT) (set 4) + Pinball Wizard (JPM) (IMPACT) (set 4, Whitbread) j6pinwzdd @@ -31664,15 +39989,15 @@ j6pogcls - Pot Of Gold Classic (JPM) (IMPACT) (set 1) + Pot Of Gold Classic (Ace) (IMPACT) (set 1) j6pogclsa - Pot Of Gold Classic (JPM) (IMPACT) (set 2) + Pot Of Gold Classic (Ace) (IMPACT) (set 2) j6pogclsb - Pot Of Gold Classic (JPM) (IMPACT) (set 3) + Pot Of Gold Classic (Ace) (IMPACT) (set 3) j6pogd @@ -31692,7 +40017,7 @@ j6pompayc - Up Pompay (Ace) (IMPACT) (set 4) + Up Pompay (Ace) (IMPACT) (set 4, Whitbread) j6popoli @@ -31736,7 +40061,7 @@ j6pwrspnc - Powerspin (JPM) (IMPACT) (set 4) + Powerspin (JPM) (IMPACT) (set 4, Whitbread) j6pwrspnd @@ -31760,11 +40085,11 @@ j6quantmc - Quantum Leap (JPM) (IMPACT) (set 4) + Quantum Leap (JPM) (IMPACT) (set 4, Whitbread) j6quick - Quicksilver (RAL) (IMPACT) + Quicksilver (RAL) (HLB AC2) (IMPACT) j6r2rum @@ -31804,7 +40129,7 @@ j6rac - Red Alert (JPM) (IMPACT) (set 4) + Red Alert (JPM) (IMPACT) (set 4, Whitbread) j6raclb @@ -31916,7 +40241,7 @@ j6redarwe - Red Arrow (JPM) (IMPACT) (set 6) + Red Arrow (JPM) (IMPACT) (set 6, Whitbread) j6redarwf @@ -31940,7 +40265,7 @@ j6redarww - Red Arrow (Whitbread / JPM) (IMPACT) + Red Arrow (JPM) (IMPACT) (set 12, Whitbread) j6reddmn @@ -31956,23 +40281,23 @@ j6reelmn - Reel Money (JPM) (IMPACT) (set 1) + Reel Money (JPM) (IMPACT) (RE 9) (set 1) j6reelmna - Reel Money (JPM) (IMPACT) (set 2) + Reel Money (JPM) (IMPACT) (RE 9) (set 2) j6reelmnb - Reel Money (JPM) (IMPACT) (set 3) + Reel Money (JPM) (IMPACT) (RE 9) (set 3) j6reelmnc - Reel Money (JPM) (IMPACT) (set 4) + Reel Money (JPM) (IMPACT) (RE 9) (set 4) j6reelmnd - Reel Money (JPM) (IMPACT) (set 5) + Reel Money (JPM) (IMPACT) (RE 7) (set 5) j6reelth @@ -31980,11 +40305,11 @@ j6reeltha - Reel Thing (Ace) (IMPACT) set 2) + Reel Thing (Crystal) (IMPACT) (set 1) j6reelthb - Reel Thing (Ace) (IMPACT) set 3) + Reel Thing (Crystal) (IMPACT) (set 2) j6rh6 @@ -32056,27 +40381,27 @@ j6rico - Ricochet (JPM) (IMPACT) (set 1) + Ricochet (JPM) (IMPACT) (R I) (set 1) j6ricoa - Ricochet (JPM) (IMPACT) (set 2) + Ricochet (JPM) (IMPACT) (R IP) (set 2) j6ricob - Ricochet (JPM) (IMPACT) (set 3) + Ricochet (JPM) (IMPACT) (R IA) (set 3) j6ricoc - Ricochet (JPM) (IMPACT) (set 4) + Ricochet (JPM) (IMPACT) (R I) (set 4) j6ricod - Ricochet (JPM) (IMPACT) (set 5) + Ricochet (JPM) (IMPACT) (R IS) (set 5) j6ricoe - Ricochet (JPM) (IMPACT) (set 6) + Ricochet (JPM) (IMPACT) (R IS) (set 6) j6robin @@ -32096,71 +40421,71 @@ j6roller - Roller Coaster (JPM) (IMPACT) (set 1) + Roller Coaster (JPM) (IMPACT) (RC11 C30, 30p Stake, £15 Jackpot) j6rollera - Roller Coaster (JPM) (IMPACT) (set 2) + Roller Coaster (JPM) (IMPACT) (RC11P C30, 30p Stake, £15 Jackpot, Protocol) j6rollerb - Roller Coaster (JPM) (IMPACT) (set 3) + Roller Coaster (JPM) (IMPACT) (RC11 AC30, 30p Stake, £15 Jackpot) j6rollerc - Roller Coaster (JPM) (IMPACT) (set 4) + Roller Coaster (JPM) (IMPACT) (RC11 C30, 30p Stake, £15 Jackpot, Whitbread) j6rollerd - Roller Coaster (JPM) (IMPACT) (set 5) + Roller Coaster (JPM) (IMPACT) (RC11 C29, 30p Stake, £15 Jackpot) j6rollere - Roller Coaster (JPM) (IMPACT) (set 6) + Roller Coaster (JPM) (IMPACT) (RC10 C20, 20p Stake, £10 Jackpot) j6rollerf - Roller Coaster (JPM) (IMPACT) (set 7) + Roller Coaster (JPM) (IMPACT) (RC9 L26, 20p Stake, £8 Jackpot) j6rollerg - Roller Coaster (JPM) (IMPACT) (set 8) + Roller Coaster (JPM) (IMPACT) (RC9P L26, 20p Stake, £8 Jackpot, Protocol) j6rollerh - Roller Coaster (JPM) (IMPACT) (set 9) + Roller Coaster (JPM) (IMPACT) (RC9 AL26, 20p Stake, £8 Jackpot) j6rolleri - Roller Coaster (JPM) (IMPACT) (set 10) + Roller Coaster (JPM) (IMPACT) (RC9 L26, 20p Stake, £10 Jackpot, Whitbread) j6rollerj - Roller Coaster (JPM) (IMPACT) (set 11) + Roller Coaster (JPM) (IMPACT) (RC5 L14, 20p Stake, £8 Jackpot) j6rollerk - Roller Coaster (JPM) (IMPACT) (set 12) + Roller Coaster (JPM) (IMPACT) (RC4 L15, 20p Stake, £8 Jackpot) j6rollerl - Roller Coaster (JPM) (IMPACT) (set 13) + Roller Coaster (JPM) (IMPACT) (RC4P L15, 20p Stake, £8 Jackpot, Protocol) j6rollerm - Roller Coaster (JPM) (IMPACT) (set 14) + Roller Coaster (JPM) (IMPACT) (RC4 AL15, 20p Stake, £8 Jackpot) j6rollern - Roller Coaster (JPM) (IMPACT) (set 15) + Roller Coaster (JPM) (IMPACT) (RC4 I L15, 20p Stake, £8 Jackpot) j6rollero - Roller Coaster (JPM) (IMPACT) (set 16) + Roller Coaster (JPM) (IMPACT) (RC2 L07, 20p Stake, £8 Jackpot) j6rollerp - Roller Coaster (JPM) (IMPACT) (set 17) + Roller Coaster (JPM) (IMPACT) (RC2 I L07, 20p Stake, £8 Jackpot) j6roof @@ -32220,7 +40545,7 @@ j6shoot - ShootOut (JPM / Whitbread) (IMPACT) + ShootOut (JPM) (IMPACT) (Whitbread) j6showtm @@ -32288,7 +40613,7 @@ j6sidewdc - Sidewinder (JPM) (IMPACT) (set 4) + Sidewinder (JPM) (IMPACT) (set 4, Whitbread) j6sidewdd @@ -32314,26 +40639,6 @@ j6slagnc Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 4) - - j6slagnd - Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 5) - - - j6slagne - Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 6) - - - j6slagnf - Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 7) - - - j6slagng - Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 8) - - - j6slagnh - Snakes & Ladders Slides Again (Crystal) (IMPACT) (set 9) - j6slvgst Silver Ghost (JPM) (IMPACT) (set 1) @@ -32368,67 +40673,87 @@ j6snakes - Snakes & Ladders (JPM) (IMPACT) (set 1) + Snakes & Ladders (JPM) (IMPACT) (SL18 C22) (set 1) j6snakesa - Snakes & Ladders (JPM) (IMPACT) (set 2) + Snakes & Ladders (JPM) (IMPACT) (SL18P C22) (set 2, Protocol) j6snakesb - Snakes & Ladders (JPM) (IMPACT) (set 3) + Snakes & Ladders (JPM) (IMPACT) (SL18 AC22) (set 3) j6snakesc - Snakes & Ladders (JPM) (IMPACT) (set 4) + Snakes & Ladders (JPM) (IMPACT) (SL18 C22) (set 4, Whitbread) j6snakesd - Snakes & Ladders (JPM) (IMPACT) (set 5) + Snakes & Ladders (JPM) (IMPACT) (SL16 C20) (set 5) j6snakese - Snakes & Ladders (JPM) (IMPACT) (set 6) + Snakes & Ladders (JPM) (IMPACT) (SL17 C21) (set 6) j6snakesf - Snakes & Ladders (JPM) (IMPACT) (set 7) + Snakes & Ladders (JPM) (IMPACT) (SL10 C13) (set 7) j6snakesg - Snakes & Ladders (JPM) (IMPACT) (set 8) + Snakes & Ladders (JPM) (IMPACT) (SL8P C11) (set 8) + + + j6snakesh + Snakes & Ladders (JPM) (SL11 C14) (IMPACT) (set 9) + + + j6snakesi + Snakes & Ladders (JPM) (SL11 AC14) (IMPACT) (set 10) + + + j6snakesj + Snakes & Ladders (JPM) (SL11P CA4) (IMPACT) (set 11, Protocol) + + + j6snakesk + Snakes & Ladders (JPM) (SL15 C18) (IMPACT) (set 12) + + + j6snakesl + Snakes & Ladders (JPM) (SLB C2) (IMPACT) (set 13) j6sonic - Sonic The Hedgehog (JPM) (IMPACT) (set 1) + Sonic The Hedgehog (JPM) (IMPACT) (SO10 C13) j6sonica - Sonic The Hedgehog (JPM) (IMPACT) (set 2) + Sonic The Hedgehog (JPM) (IMPACT) (SO10P C13, Protocol) j6sonicb - Sonic The Hedgehog (JPM) (IMPACT) (set 3) + Sonic The Hedgehog (JPM) (IMPACT) (SO10 AC13) j6sonicc - Sonic The Hedgehog (JPM) (IMPACT) (set 4) + Sonic The Hedgehog (JPM) (IMPACT) (SO10 C13, Whitbread) j6sonicd - Sonic The Hedgehog (JPM) (IMPACT) (set 5) + Sonic The Hedgehog (JPM) (IMPACT) (SO9 C12) j6sonice - Sonic The Hedgehog (JPM) (IMPACT) (set 6) + Sonic The Hedgehog (JPM) (IMPACT) (SO7 C10) j6sonicf - Sonic The Hedgehog (JPM) (IMPACT) (set 7) + Sonic The Hedgehog (JPM) (IMPACT) (SO7 AC10) j6sonicg - Sonic The Hedgehog (JPM) (IMPACT) (set 8) + Sonic The Hedgehog (JPM) (IMPACT) (SO1 AC2) j6sonich @@ -32440,27 +40765,27 @@ j6stards - Stardust (JPM) (IMPACT) (set 1) + Stardust (JPM) (IMPACT) (SD 2 C 7) (set 1) j6stardsa - Stardust (JPM) (IMPACT) (set 2) + Stardust (JPM) (IMPACT) (SD 2P C 7) (set 2, Protocol) j6stardsb - Stardust (JPM) (IMPACT) (set 3) + Stardust (JPM) (IMPACT) (SD 2 AC 7) (set 3) j6stardsc - Stardust (JPM) (IMPACT) (set 4) + Stardust (JPM) (IMPACT) (SD 2 C 7) (set 4, Whitbread) j6start - Starturn (JPM) (IMPACT) (set 1) + Starturn (JPM / Showcase) (IMPACT) (set 1) j6starta - Starturn (JPM) (IMPACT) (set 2) + Starturn (JPM / Showcase) (IMPACT) (set 2) j6strk10 @@ -32532,7 +40857,7 @@ j6supbrke - Super Breakout (JPM) (IMPACT) (set 6) + Super Breakout (JPM) (IMPACT) (set 6, Whitbread) j6supbrkf @@ -32584,7 +40909,7 @@ j6tbirdse - Thunderbirds (JPM) (IMPACT) (set 6) + Thunderbirds (JPM) (IMPACT) (set 6, Whitbread) j6tbirdsf @@ -32608,35 +40933,35 @@ j6tbirdsk - Thunderbirds (JPM) (IMPACT) (set 12) + Thunderbirds (Crystal) (IMPACT) (set 1) j6tbirdsl - Thunderbirds (JPM) (IMPACT) (set 13) + Thunderbirds (Crystal) (IMPACT) (set 2) j6tbirdsm - Thunderbirds (JPM) (IMPACT) (set 14) + Thunderbirds (Crystal) (IMPACT) (set 3) j6tbirdsn - Thunderbirds (JPM) (IMPACT) (set 15) + Thunderbirds (Crystal) (IMPACT) (set 4) j6tbirdso - Thunderbirds (JPM) (IMPACT) (set 16) + Thunderbirds (Crystal) (IMPACT) (set 5) j6tbirdsp - Thunderbirds (JPM) (IMPACT) (set 17) + Thunderbirds (Crystal) (IMPACT) (set 6) j6tbirdsq - Thunderbirds (JPM) (IMPACT) (set 18) + Thunderbirds (Crystal) (IMPACT) (set 7) j6tbirdsr - Thunderbirds (JPM) (IMPACT) (set 19) + Thunderbirds (JPM / Predator) (IMPACT) j6tbrdcl @@ -32804,11 +41129,11 @@ j6untch - Untouchables (JPM) (IMPACT) (set 1) + Untouchable (JPM) (IMPACT) (UN3B LO6) j6untcha - Untouchables (JPM) (IMPACT) (set 2) + Untouchable (JPM) (IMPACT) (UN3BI LO6) j6vindal @@ -32816,63 +41141,63 @@ j6vivark - Viva Rock Vegas (JPM) (IMPACT) (set 1) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 1) j6vivarka - Viva Rock Vegas (JPM) (IMPACT) (set 2) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 2) j6vivarkb - Viva Rock Vegas (JPM) (IMPACT) (set 3) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 3) j6vivarkc - Viva Rock Vegas (JPM) (IMPACT) (set 4) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 4) j6vivarkd - Viva Rock Vegas (JPM) (IMPACT) (set 5) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 5, Whitbread) j6vivarke - Viva Rock Vegas (JPM) (IMPACT) (set 6) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 6) j6vivarkf - Viva Rock Vegas (JPM) (IMPACT) (set 7) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 7) j6vivarkg - Viva Rock Vegas (JPM) (IMPACT) (set 8) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 8) j6vivarkh - Viva Rock Vegas (JPM) (IMPACT) (set 9) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 9) j6vivarki - Viva Rock Vegas (JPM) (IMPACT) (set 10) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 10) j6vivarkj - Viva Rock Vegas (JPM) (IMPACT) (set 11) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 11) j6vivarkk - Viva Rock Vegas (JPM) (IMPACT) (set 12) + The Flintstones in Viva Rock Vegas (JPM) (IMPACT) (set 12) j6vivrkc - Viva Rock Vegas Club (JPM) (IMPACT) (set 1) + The Flintstones in Viva Rock Vegas (Club) (JPM) (IMPACT) (set 1) j6vivrkca - Viva Rock Vegas Club (JPM) (IMPACT) (set 2) + The Flintstones in Viva Rock Vegas (Club) (JPM) (IMPACT) (set 2) j6vivrkcb - Viva Rock Vegas Club (JPM) (IMPACT) (set 3) + The Flintstones in Viva Rock Vegas (Club) (JPM) (IMPACT) (set 3) j6wildw @@ -32884,7 +41209,7 @@ j6wildwb - Wild West (Ace) (IMPACT) (set 3) + Wild West (Ace) (IMPACT) (set 3, Whitbread) j6wildwc @@ -32904,39 +41229,39 @@ j6wildwg - Wild West (Ace) (IMPACT) (set 8) + Wild West (Ace) (IMPACT) (set 8, Whitbread) j6wizard - Wizard Of Odds (JPM) (IMPACT) (set 1) + Wizard Of Odds (JPM) (IMPACT) (WZ 7 C 8) (set 1) j6wizarda - Wizard Of Odds (JPM) (IMPACT) (set 2) + Wizard Of Odds (JPM) (IMPACT) (WZ 7P C 8) (set 2, Protocol) j6wizardb - Wizard Of Odds (JPM) (IMPACT) (set 3) + Wizard Of Odds (JPM) (IMPACT) (WZ 7 AC 8) (set 3) j6wizardc - Wizard Of Odds (JPM) (IMPACT) (set 4) + Wizard Of Odds (JPM) (IMPACT) (WZ 7 C 8) (set 4, Whitbread) j6wizardd - Wizard Of Odds (JPM) (IMPACT) (set 5) + Wizard Of Odds (JPM) (IMPACT) (WZ 4 C 5) (set 5) j6wizarde - Wizard Of Odds (JPM) (IMPACT) (set 6) + Wizard Of Odds (JPM) (IMPACT) (WZ 5 C 6) (set 6) j6wldkng - Wild King Club (JPM) (IMPACT) (set 1) + Wild King Club (JPM) (IMPACT) (WK 5) (set 1) j6wldknga - Wild King Club (JPM) (IMPACT) (set 2) + Wild King Club (JPM) (IMPACT) (WK 5P) (set 2, Protocol) j6wthing @@ -33158,6 +41483,10 @@ jackal Jackal (World, 8-way Joystick) + + jackalbl + Jackal (bootleg, Rotary Joystick) + jackalj Tokushu Butai Jackal (Japan, 8-way Joystick) @@ -33166,6 +41495,10 @@ jackalr Jackal (World, Rotary Joystick) + + jackbean + Jack & The Beanstalk (Doyle & Assoc.?) + jackie Happy Jackie (v110U) @@ -33178,6 +41511,22 @@ jackpool Jackpot Cards / Jackpot Pool (Italy) + + jackpot + Jackpot (Ver 16.16L) + + + jackpota + Jackpot (Ver 1.16L) + + + jackrab2 + Jack Rabbit (set 2) + + + jackrabs + Jack Rabbit (special) + jackrabt Jack Rabbit (set 1) @@ -33198,13 +41547,17 @@ jailbrekb Jail Break (bootleg) + + jailbrk + Jailbreak (10125611, NSW/ACT) + jajamaru Vs. Ninja Jajamaru Kun (Japan) jambo - Jambo! Safari (JPN, USA, EXP, KOR, AUS) (Rev A) + Jambo! Safari (Rev A) jamesb @@ -33222,6 +41575,10 @@ jangou Jangou [BET] (Japan) + + jangtaku + Jang Taku (V 1.3) + janjans1 Lovely Pop Mahjong JangJang Shimasho (Japan) @@ -33252,7 +41609,7 @@ janputer - New Double Bet Mahjong (bootleg of Janputer) + New Double Bet Mahjong (bootleg of Royal Mahjong) [BET] janshi @@ -33260,11 +41617,11 @@ janshin - Jyanshin Densetsu - Quest of Jongmaster + Janshin Densetsu - Quest of Jongmaster janshinp - Mahjong Janshin Plus (Japan) + Mahjong Janshin Plus [BET] (Japan) jansou @@ -33272,7 +41629,7 @@ jansoua - Jansou (set 2) + Jansou (V 1.1) jantotsu @@ -33290,6 +41647,10 @@ janyuki Jong Yu Ki (Japan) + + jb_04a + Jack*Bot (0.4A prototype) + jb_10b Jack*Bot (1.0B) (Belgium/Canada) @@ -33300,32 +41661,76 @@ jchan - Jackie Chan - The Kung-Fu Master + Jackie Chan - The Kung-Fu Master (rev 4?) jchan2 Jackie Chan in Fists of Fire - jclub2 - Jockey Club II (newer hardware) + jchana + Jackie Chan - The Kung-Fu Master (rev 3?) + + + jclub2v100 + Jockey Club II (v1.00, older hardware) + + + jclub2v101 + Jockey Club II (v1.01, older hardware) + + + jclub2v110 + Jockey Club II (v1.10X, older hardware) - jclub2o - Jockey Club II (older hardware) + jclub2v112 + Jockey Club II (v1.12X, older hardware) - jclub2ob - Jockey Club II (older hardware, set 2) + jclub2v200 + Jockey Club II (v2.00, newer hardware) + + + jclub2v201 + Jockey Club II (v2.01X, newer hardware) + + + jclub2v203 + Jockey Club II (v2.03X RC, older hardware, prototype) + + + jclub2v204 + Jockey Club II (v2.04, newer hardware) + + + jclub2v205 + Jockey Club II (v2.05, newer hardware) + + + jclub2v220 + Jockey Club II (v2.20X, newer hardware) jcross - Jumping Cross + Jumping Cross (set 1) + + + jcrossa + Jumping Cross (set 2) jd_l1 Judge Dredd (L-1) + + jd_l4 + Judge Dredd (L-4) + + + jd_l5 + Judge Dredd (L-5) + jd_l6 Judge Dredd (L-6) @@ -33344,23 +41749,27 @@ jdreddp - Judge Dredd (rev LA1, prototype) + Judge Dredd (rev TA1 7/12/92, location test) jedi Return of the Jedi + + jefffox + You Might Be A Redneck If... - Jeff Foxworthy (0351068, US) + jestmagi - Jester Magic (Konami Endeavour) + Jester Magic (Konami Endeavour, Russia) jetfight - Jet Fighter (Set1) [TTL] + Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 1) [TTL] jetfighta - Jet Fighter (Set2) [TTL] + Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 2) [TTL] jetwave @@ -33370,25 +41779,53 @@ jetwavej Jet Wave (JAB, Japan v1.04) + + jewelcm + Jewel of the Enchantress - Mr. Cashman (0151051, US) + jgakuen + Shiritsu Justice Gakuen: Legion of Heroes (Japan 971216) + + + jgakuen1 Shiritsu Justice Gakuen: Legion of Heroes (Japan 971117) jigkmgri Jigoku Meguri (Japan) + + jigkmgria + Jigoku Meguri (Japan, hack?) + jin Jin jingbell + Jingle Bell (US, V157US) + + + jingbella + Jingle Bell (EU, V155UE) + + + jingbellb + Jingle Bell (EU, V153UE) + + + jingbellc + Jingle Bell (EU, V141UE) + + + jingbelli Jingle Bell (Italy, V133I) jingystm - Jingi Storm - The Arcade (GDL-0037) + Jingi Storm - The Arcade (Japan) (GDL-0037) jitsupro @@ -33430,14 +41867,38 @@ jjsquawkb2 J. J. Squawkers (bootleg, Blandia Conversion) + + jjsquawko + J. J. Squawkers (older) + jkrmast - Joker Master + Joker Master (V515) + + + jkrmasta + Joker Master (V512) + + + jlasvegas + Las Vegas (Jeutel, set 1) + + + jlasvegasa + Las Vegas (Jeutel, set 2) jleague + The J.League 1994 (Japan, Rev A) + + + jleagueo The J.League 1994 (Japan) + + jm_05r + Johnny Mnemonic (0.5R) + jm_12b Johnny Mnemonic (1.2B) Belgium @@ -33448,11 +41909,19 @@ jmpbreak - Jumping Break + Jumping Break (set 1) + + + jmpbreaka + Jumping Break (set 2) jnero - Johnny Nero Action Hero + Johnny Nero Action Hero (v01.01.08) + + + jngld_l1 + Jungle Lord (L-1) jngld_l2 @@ -33464,7 +41933,7 @@ jockeyc - Jockey Club + Jockey Club (v1.18) jockeygp @@ -33486,6 +41955,10 @@ joemacra Joe & Mac Returns (World, Version 1.0, 1994.05.19) + + joemacrj + Joe & Mac Returns (Japan, Version 1.2, 1994.06.06) + jogakuen Mahjong Jogakuen (Japan) @@ -33496,12 +41969,32 @@ jojo - JoJo's Venture (USA 990128) + JoJo's Venture (Euro 990128) + + + jojoa + JoJo's Venture (Asia 990128) + + + jojoar1 + JoJo's Venture (Asia 990108) + + + jojoar2 + JoJo's Venture (Asia 981202) jojoba + JoJo's Bizarre Adventure (Euro 990927) + + + jojobaj JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927) + + jojobajr1 + JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913) + jojoban JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927, NO CD) @@ -33518,9 +42011,13 @@ jojobanr1 JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913, NO CD) + + jojobanrb + JoJo's Bizarre Adventure: Heritage for the Future / JoJo no Kimyou na Bouken: Mirai e no Isan (Rainbow Edition v1.0.1 2021) + jojobar1 - JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913) + JoJo's Bizarre Adventure (Euro 990913) jojoj @@ -33548,15 +42045,35 @@ jojor1 - JoJo's Venture (USA 990108) + JoJo's Venture (Euro 990108) jojor2 + JoJo's Venture (Euro 981202) + + + jojou + JoJo's Venture (USA 990128) + + + jojour1 + JoJo's Venture (USA 990108) + + + jojour2 JoJo's Venture (USA 981202) + + jokcrdep + Joker Card / Multi Card (Epoxy brick CPU) + + + jokercar + Joker Card (witch game) + jokercrd - Joker Card (Ver.A267BC, encrypted) + Joker Card 300 (Ver.A267BC, encrypted) jokpoker @@ -33574,6 +42091,10 @@ jokpokerc Joker Poker (Version 16.03BI 5-10-85, Poker No Raise ICB 9-30-86) + + jokrlady + Joker Lady + jokrpokr Joker Poker @@ -33582,6 +42103,10 @@ jokrwild Joker's Wild (encrypted) + + jokrz_g4 + Jokerz! (G-4) + jokrz_l3 Jokerz! (L-3) @@ -33592,7 +42117,11 @@ jollycrd - Jolly Card (Austrian) + Jolly Card (German, set 1) + + + jollycrda + Jolly Card (German, set 2) jollyjgr @@ -33616,7 +42145,11 @@ jolycdab - Jolly Card (Austrian, Fun World, bootleg) + Jolly Card (German, Fun World, bootleg) + + + jolycdcy + Zabavni Karti (Bulgarian, encrypted) jolycdev @@ -33638,6 +42171,22 @@ jolycdie Jolly Card (Italian, different colors, set 2) + + jolycdif + Jolly Card (Italian, bootleg, set 1) + + + jolycdig + Jolly Card (Italian, bootleg, set 2) + + + jolycdih + Jolly Card (Italian, bootleg, set 3) + + + jolycdii + Jolly Card (Italian, encrypted bootleg, set 3) + jolycdit Jolly Card (Italian, blue TAB board, encrypted) @@ -33659,8 +42208,28 @@ Jolly Joker (98bet, set 2) - jolyjokrb - Jolly Joker (40bet, Croatian hack) + jolyjokrb1 + Jolly Joker (40bet, higher paytable) + + + jolyjokrb2 + Jolly Joker (40bet, lower paytable) + + + jolyjokrc + Jolly Joker (Apple Time) + + + jolyjokrm + Jolly Joker (Solid State module in suicide board) + + + jolyjokro + Jolly Joker (original program, interleaved GFX, Impera logo) + + + jolyjokrp + Jolly Joker (original program, interleaved GFX, no logo) jolypark @@ -33670,13 +42239,25 @@ jongbou Mahjong Block Jongbou (Japan) + + jongbou2 + Mahjong Block Jongbou 2 (Japan) + jongkyo Jongkyo + + jongpute + Jongputer + + + jongshin + Jong Shin (Japan) + jongtei - Mahjong Jong-Tei (Japan, ver. NM532-01) + Mahjong Jong-Tei [BET] (Japan, NM532-01) josvolly @@ -33688,19 +42269,27 @@ joust - Joust (White/Green label) + Joust (Green label) joust2 - Joust 2 - Survival of the Fittest + Joust 2 - Survival of the Fittest (revision 2) + + + joust2r1 + Joust 2 - Survival of the Fittest (revision 1) joustr - Joust (Solid Red label) + Joust (Red label) joustwr - Joust (White/Red label) + Joust (White-Red label) + + + jousty + Joust (Yellow label) joyfulr @@ -33708,20 +42297,28 @@ joyjoy - Puzzled / Joy Joy Kid (NGM-021)(NGH-021) + Puzzled / Joy Joy Kid (NGM-021 ~ NGH-021) joyman Joyman + + joystand + Joy Stand Private + jpark - Jurassic Park (World) + Jurassic Park (World, Rev A) jpark3 Jurassic Park 3 (ver EBC) + + jpark3u + Jurassic Park 3 (ver UBC) + jparkj Jurassic Park (Japan, Rev A, Deluxe) @@ -33734,6 +42331,10 @@ jparkjc Jurassic Park (Japan, Rev A, Conversion) + + jparkmb + Jurassic Park (bootleg of Mega Drive version) + jpcoin Joker Poker (Coinmaster set 1) @@ -33742,21 +42343,29 @@ jpcoin2 Joker Poker (Coinmaster, Amusement Only) + + jpinball + Pin Ball + jplstw20 - Lost World: Jurassic Park, The (2.00) + The Lost World: Jurassic Park (2.00) jplstw22 - Lost World: Jurassic Park, The (2.02) + The Lost World: Jurassic Park (2.02) jpopnics - Jumping Pop (Nics, Korean bootleg of Plump Pop) + Jumping Pop (Nics, Korean hack of Plump Pop) + + + jppyex98 + Jikkyou Powerful Pro Yakyuu EX '98 (GC811 VER. JAA) jptparty - Jackpot Party (Russia) + Jackpot Party (Russian) jrking @@ -33774,6 +42383,10 @@ jrpacmbl Jr. Pac-Man (Pengo hardware) + + jrpacmnf + Jr. Pac-Man (speedup hack) + jsk Joryuu Syougi Kyoushitsu (Japan) @@ -33786,10 +42399,22 @@ jspecter2 Jatre Specter (set 2) + + jspectr2 + Jatre Specter (set 2) + + + jst_l1 + Joust (L-1) + jst_l2 Joust (L-2) + + jt104 + JT 104 / NinjaKun Ashura no Shou + jubileep Double-Up Poker (Jubilee) @@ -33806,6 +42431,10 @@ jujuba JuJu Densetsu (Japan, bootleg) + + jumpbean + Jumping Beans (0100161V, NSW/ACT) + jumpbug Jump Bug @@ -33816,6 +42445,10 @@ jumpcoas + Jump Coaster (World) + + + jumpcoasa Jump Coaster @@ -33824,16 +42457,36 @@ jumping - Jumping + Jumping (set 1) + + + jumpinga + Jumping (set 2) + + + jumpingi + Jumping (set 3, Imnoe PCB) jumpjkpt Jumping Jackpots (Russia) (Atronic) + + jumpjoey + Jumpin' Joeys (0100383V, NSW/ACT) + + + jumpjump + Jump Jump + jumpkids Jump Kids + + jumpkun + Jump Kun (prototype) + jumppop Jumping Pop (set 1) @@ -33858,6 +42511,10 @@ junai2 Junai 2 - White Love Story (Japan) + + jungjuic + Jungle Juice (0200240V, New Zealand) + jungleby Jungle Boy (bootleg) @@ -33886,10 +42543,30 @@ jungler Jungler + + junglero + Jungler (Olympia) + junglers Jungler (Stern Electronics) + + jungleyo + Jungle (Italy VI3.02) + + + junglhbr + Jungle Hunt (Brazil) + + + junglkj2 + Jungle King (Japan, earlier) + + + jungsub + Jungler (Subelectro, bootleg on Scramble hardware) + junofrst Juno First @@ -33898,29 +42575,45 @@ junofrstg Juno First (Gottlieb) + + junofstg + Juno First (Gottlieb) + + + jupk_305 + Jurassic Park (USA 3.05, display A4.00) + + + jupk_307 + Jurassic Park (USA 3.07, display A4.00) + jupk_501 - Jurassic Park (5.01) + Jurassic Park (USA 5.01, display A5.01) + + + jupk_501g + Jurassic Park (USA 5.01 Germany, display G5.01) jupk_513 - Jurassic Park (5.13) + Jurassic Park (USA 5.13, display A5.10) - jupk_g51 - Jurassic Park (5.01 Germany) + jurassic99 + Jurassic 99 (Cadillacs and Dinosaurs bootleg with EM78P447AP) jwildb52 - Joker's Wild (B52 system, set 1) + Joker's Wild (B52 system, BP55114-V1104, Ver.054NMV) jwildb52a - Joker's Wild (B52 system, set 2) + Joker's Wild (B52 system, WP02001-054, Ver.031WM) jwildb52h - Joker's Wild (B52 system, Harrah's GFX) + Joker's Wild (B52 system, BP55114-V1104, Ver.054NMV, Harrah's GFX) jy_03 @@ -33938,14 +42631,30 @@ jyangoku Jyangokushi: Haoh no Saihai (Japan 990527) + + jyuohki + Jyuohki (Japan) + jzth - Jue Zhan Tian Huang + Juezhan Tianhuang + + + k7_olym + Olympic Darts K7 (v3.11) + + + k7_olym30 + Olympic Darts K7 (v3.00) kabukikl Far East of Eden - Kabuki Klash / Tengai Makyou - Shin Den + + kabukiklb + Far East of Eden - Kabuki Klash / Tengai Makyou - Shin Den (Add hidden characters) + kabukiz Kabuki-Z (World) @@ -33956,7 +42665,7 @@ kageki - Kageki (US) + Kageki (World) kagekih @@ -33966,6 +42675,10 @@ kagekij Kageki (Japan) + + kagekiu + Kageki (US) + kaguya Mahjong Kaguyahime [BET] (Japan 880521) @@ -33978,6 +42691,10 @@ kaguya2f Mahjong Kaguyahime Sono2 Fukkokuban [BET] (Japan 010808) + + kaiserkj + Kaiser Knuckle (Japan) + kaiserkn Kaiser Knuckle (Ver 2.1O 1994/07/29) @@ -34012,7 +42729,7 @@ kamakazi3 - Kamakazi III (superg hack) + Kamakazi III ('Super Galaxians' hack) kamenrid @@ -34022,6 +42739,14 @@ kamikaze Kamikaze + + kamikazesp + Kamikaze (Euromatic S.A., Spanish bootleg of Scramble) + + + kamikazp + Kamikaze (Potomac Games, bootleg of Galaxian) + kamikcab Kamikaze Cabbie @@ -34030,6 +42755,14 @@ kanatuen Kanatsuen no Onna [BET] (Japan 880905) + + kangaroa + Kangaroo (Atari) + + + kangarob + Kangaroo (bootleg) + kangaroo Kangaroo @@ -34042,22 +42775,46 @@ kangaroob Kangaroo (bootleg) + + kangarool + Kangaroo (Loewen-Automaten) + kaos Kaos + + karatblu + Karate Blazers (US) + karatblz - Karate Blazers (World) + Karate Blazers (World, set 1) + + + karatblza + Karate Blazers (World, set 2) + + + karatblzbl + Karate Blazers (bootleg with Street Smart sound hardware) karatblzj - Karate Blazers (Japan) + Toushin Blazers (Japan, Tecmo license) + + + karatblzt + Karate Blazers (World, Tecmo license) karatblzu Karate Blazers (US) + + karateda + Karate Dou (Arfyc bootleg) + karatedo Karate Dou (Japan) @@ -34070,6 +42827,10 @@ karatour The Karate Tournament + + karatourj + Chatan Yara Kuushanku - The Karate Tournament (Japan) + karianx Karian Cross (Rev. 1.0) @@ -34086,13 +42847,17 @@ karnovj Karnov (Japan) + + karnovjbl + Karnov (Japan, bootleg with NEC D8748HD) + karnovr Karnov's Revenge / Fighter's History Dynamite karous - Karous (GDL-0040) + Karous (Japan) (GDL-0040) kartduel @@ -34102,10 +42867,22 @@ kas89 Kasino '89 + + kattobas + Kattobase Power Pro Kun + kazan Ninja Kazan (World) + + kbadlands + Badlands (Konami, set 1) + + + kbadlandsh + Badlands (Konami, set 2) + kbash Knuckle Bash @@ -34114,6 +42891,14 @@ kbash2 Knuckle Bash 2 (bootleg) + + kbashk + Knuckle Bash (Korean PCB) + + + kbh + Keyboardheaven (Korea) + kbm Keyboardmania @@ -34130,6 +42915,10 @@ kchamp Karate Champ (US) + + kchamptec + Karate Champ (Tecfri bootleg) + kchampvs Karate Champ (US VS version, set 1) @@ -34138,6 +42927,18 @@ kchampvs2 Karate Champ (US VS version, set 2) + + kchampvs3 + Karate Champ (US VS version, set 3) + + + kchampvs4 + Karate Champ (US VS version, set 4) + + + kd2001 + Knock Down 2001 (Japan, KD11 Ver. B) + kdeadeye Dead Eye (GV054 UAA01) @@ -34146,9 +42947,13 @@ kdynastg King of Dynast Gear (version 1.8) + + keirinou + Keirin Ou + keith - Keith Courage In Alpha Zones + Keith Courage In Alpha Zones (United Amusements PC Engine) keithlcy @@ -34158,6 +42963,46 @@ keks Keks (060328 World) + + keks_10 + Keks (110816 Entertainment X) + + + keks_11 + Keks (101209 Entertainment N) + + + keks_12 + Keks (110816 Entertainment N) + + + keks_13 + Keks (110204 Entertainment A) + + + keks_14 + Keks (110208 Entertainment A) + + + keks_15 + Keks (110816 Entertainment A) + + + keks_16 + Keks (110311 Entertainment B) + + + keks_17 + Keks (110816 Entertainment B) + + + keks_18 + Keks (140526 Entertainment B) + + + keks_19 + Keks (110411 Entertainment C) + keks_2 Keks (060403 World) @@ -34210,6 +43055,22 @@ keks_5 Keks (090727 Entertainment) + + keks_6 + Keks (110816 World) + + + keks_7 + Keks (110816 Russia) + + + keks_8 + Keks (100330 Entertainment X) + + + keks_9 + Keks (100331 Entertainment X) + keksa Keks (bootleg, 060328, banking address hack) @@ -34224,7 +43085,15 @@ kengo - Ken-Go + Ken-Go (set 1) + + + kengoa + Ken-Go (set 2) + + + kenseim + Ken Sei Mogura: Street Fighter II (Japan 940418, Ver 1.00) keroppi @@ -34232,20 +43101,60 @@ keroppij - Kero Kero Keroppi no Issyoni Asobou (Japan) + Kero Kero Keroppi no Isshoni Asobou (Japan) + + + keroro + Keroro Gunso Chikyu Shinryaku Shirei Dearimasu! (KRG1 Ver.A) ket Ketsui: Kizuna Jigoku Tachi (2003/01/01. Master Ver.) + + ket1 + Ketsui: Kizuna Jigoku Tachi (2003/01/01. Master Ver.) (alt rom fill) + keta Ketsui: Kizuna Jigoku Tachi (2003/01/01 Master Ver.) + + ketarr + Ketsui: Kizuna Jigoku Tachi (2014/07/16 ARRANGE 1.7 VER) (hack) + + + ketarr10 + Ketsui: Kizuna Jigoku Tachi (2012/04/17 ARRANGE VER) (hack) + + + ketarr15 + Ketsui: Kizuna Jigoku Tachi (2012/06/26 ARRANGE 1.5 VER) (hack) + + + ketarr151 + Ketsui: Kizuna Jigoku Tachi (2012/06/26 ARRANGE 1.51 VER) (hack) + + + ketarrf + Ketsui: Kizuna Jigoku Tachi (2012/04/17 FAST. VER) (hack) + + + ketarrs15 + Ketsui: Kizuna Jigoku Tachi (2012/06/27 MR.STOIC 1.5 VER) (hack) + + + ketarrs151 + Ketsui: Kizuna Jigoku Tachi (2012/06/27 MR.STOIC 1.51 VER) (hack) + ketb Ketsui: Kizuna Jigoku Tachi (2003/01/01 Master Ver) + + ketbl + Ketsui: Kizuna Jigoku Tachi (2003/01/01. Master Ver., bootleg cartridge conversion) + keyboard La Keyboard (GDS-0017) @@ -34254,6 +43163,22 @@ kf10thep The King of Fighters 10th Anniversary Extra Plus (The King of Fighters 2002 bootleg) + + kf2k1pa + The King of Fighters 2001 Plus (set 2, bootleg / hack) + + + kf2k1pkz + The King of Fighters 2001 (PS2 Krizalid Edition) + + + kf2k1pls + The King of Fighters 2001 Plus (set 1, bootleg / hack) + + + kf2k23rd + The King of Fighters 2002 - 3rd Strike of Orochi (Hack by EGCG/EGHT) + kf2k2mp The King of Fighters 2002 Magic Plus (bootleg) @@ -34266,10 +43191,34 @@ kf2k2pla The King of Fighters 2002 Plus (bootleg set 2) + + kf2k2plb + The King of Fighters 2002 Plus (bootleg set 3) + + + kf2k2plc + The King of Fighters 2002 Super (bootleg) + kf2k2pls The King of Fighters 2002 Plus (bootleg set 1) + + kf2k2ps2 + The King of Fighters 2002 (PlayStation 2 ver 0.4, EGHT hack) + + + kf2k2ps2b + The King of Fighters 2002 (PlayStation 2, Hack) + + + kf2k2ps2re1 + The King of Fighters 2002 (PlayStation 2 v1.0 Public Beta) + + + kf2k2ru35 + The King of Fighters 2002 Remix Ultra 3.5 (Hack By FCHT) + kf2k3bl The King of Fighters 2003 (bootleg set 1) @@ -34286,10 +43235,18 @@ kf2k3pl The King of Fighters 2004 Plus / Hero (The King of Fighters 2003 bootleg) + + kf2k3ps2 + The King of Fighters 2003 PlayStation 2 (Hack By EGCG) + kf2k3upl The King of Fighters 2004 Ultra Plus (The King of Fighters 2003 bootleg) + + kf2k4pls + The King of Fighters Special Edition 2004 Plus (bootleg) + kf2k5uni The King of Fighters 10th Anniversary 2005 Unique (The King of Fighters 2002 bootleg) @@ -34298,6 +43255,18 @@ kftgoal Kick for the Goal + + kgalah + King Galah (0200536V, NSW/ACT) + + + kgalaha + King Galah (0100536V, NSW/ACT) + + + kgalahce + King Galah - Cash Express (AHG1625, US) + kgbird K.G. Bird (4VXFC5341, New Zealand, 5c) @@ -34306,13 +43275,25 @@ kgbirda K.G. Bird (4VXFC5341, New Zealand, 10c) + + kgbirda5 + K.G. Bird (0200024V, NSW/ACT) + kick Kick (upright) kick4csh - Kick '4' Cash + Kick '4' Cash (Export) + + + kicka + Kick (cocktail) + + + kickball + Kick Ball kickboy @@ -34328,7 +43309,11 @@ kickgoal - Kick Goal + Kick Goal (set 1) + + + kickgoala + Kick Goal (set 2) kickman @@ -34344,16 +43329,28 @@ kickoff - Kick Off (Japan) + Kick Off - Jaleco Cup (Japan) + + + kickoffb + Kick Off - World Cup (bootleg) kickridr Kick Rider + + kidnap + Kidnap + kidniki Kid Niki - Radical Ninja (World) + + kidnikib + Kid Niki (bootleg) + kidnikiu Kid Niki - Radical Ninja (US) @@ -34374,21 +43371,37 @@ kikikai KiKi KaiKai + + kiko_a10 + King Kong (1.0) + kikstart Kick Start - Wheelie King killbld - The Killing Blade (ver. 109, Chinese Board) + The Killing Blade / Ao Jian Kuang Dao (ver. 109, Chinese Board) + + + killbld100 + The Killing Blade / Ao Jian Kuang Dao (ver. 100) killbld104 - The Killing Blade (ver. 104) + The Killing Blade / Ao Jian Kuang Dao (ver. 104) + + + killbld106 + The Killing Blade / Ao Jian Kuang Dao (ver. 106) + + + killbld109 + The Killing Blade (V109 alt, China) killbldp - The Killing Blade Plus (China, ver. 300) + The Killing Blade Plus / Ao Jian Kuang Dao Jiaqiang Ban (China, ver. 300) killcom @@ -34402,6 +43415,10 @@ kimblz80 Kimble Double HI-LO (z80 version) + + kingbalj + King and Balloon (Japan) + kingball King & Balloon (US) @@ -34426,9 +43443,33 @@ kingdrby King Derby (1981) + + kingnep + King Neptune (20189111, NSW/ACT) + + + kingnile + King of the Nile (30106331, NSW/ACT) + + + kingnilea + King of the Nile (20106321, NSW/ACT) + kingofb - King of Boxer (English) + King of Boxer (World) + + + kingofbj + King of Boxer (Japan) + + + kingpeng + King Penguin (20109021, NSW/ACT) + + + kingpengsp + King Penguin (40109021, NSW/ACT, Show Program) kingpin @@ -34436,7 +43477,11 @@ kingrt66 - King of Route 66 (Rev A) + The King of Route 66 (Rev A) + + + kingrt66p + The King of Route 66 (prototype) kingt_l1 @@ -34447,53 +43492,37 @@ King Tut (NSW, Australia) - kinniku - Kinnikuman Muscle Grand Prix (KN1 Ver. A) - - - kinst - Killer Instinct (v1.5d) - - - kinst13 - Killer Instinct (v1.3) + kingyo + Yataimura Kingyosukui (1-player, Japan, Ver 1.005) - kinst14 - Killer Instinct (v1.4) - - - kinst2 - Killer Instinct 2 (v1.4) + kingyoch + Yataimura Kingyosukui (4-player, China, Ver 1.000) - kinst210 - Killer Instinct 2 (v1.0) + kinniku + Kinnikuman Muscle Grand Prix (KN1 Ver. A) - kinst211 - Killer Instinct 2 (v1.1) + kinniku2 + Kinnikuman Muscle Grand Prix 2 (KN2 Ver. A) - kinst213 - Killer Instinct 2 (v1.3) + kinst + Killer Instinct - kinst2k3 - Killer Instinct 2 (v1.3k, upgrade kit) + kinst2 + Killer Instinct 2 - kinst2k4 - Killer Instinct 2 (v1.4k, upgrade kit) + kinst2uk + Killer Instinct 2 (upgrade kit) kinstb Killer Instinct (SNES bootleg) - - kinstp - Killer Instinct (proto v4.7) - kirameki Kirameki Star Road (Ver 2.10J 1997/08/29) @@ -34518,6 +43547,10 @@ kissp Kiss (prototype) + + kissp2 + Kiss (prototype v.2) + kittenk Kitten Kaboodle @@ -34538,13 +43571,17 @@ kizuna4p Kizuna Encounter - Super Tag Battle 4 Way Battle Version / Fu'un Super Tag Battle Special Version + + kkongltd + King Kong + kkotnoli Kkot No Li (Kill the Bees) klax - Klax (set 1) + Klax (version 6) klax2 @@ -34554,14 +43591,46 @@ klax3 Klax (set 3) + + klax4 + Klax (version 4) + + + klax5 + Klax (version 5) + + + klax5bl + Klax (version 5, bootleg set 1) + + + klax5bl2 + Klax (version 5, bootleg set 2) + + + klax5bl3 + Klax (version 5, bootleg set 3) + klaxd Klax (Germany) + + klaxd2 + Klax (Germany, version 2) + klaxj Klax (Japan) + + klaxj3 + Klax (Japan, version 3) + + + klaxj4 + Klax (Japan, version 4) + klaxp1 Klax (prototype set 1) @@ -34590,6 +43659,10 @@ knckheadjp Knuckle Heads (Japan, Prototype?) + + knckhedj + Knuckle Heads (Japan) + kncljoe Knuckle Joe (set 1) @@ -34612,7 +43685,31 @@ knightsb - Knights of the Round (bootleg) + Knights of the Round (bootleg with 2xMSM5205, set 1) + + + knightsb2 + Knights of the Round (bootleg, World 911127) + + + knightsb3 + Knights of the Round (bootleg with 2xMSM5205, set 2) + + + knightsb4 + Knights of the Round (bootleg set 4 (with YM2151 + 2xMSM5205), 911127 etc) + + + knightsb5 + Knights of the Round (bootleg set 5, 911127 Japan) + + + knightsh + Knights of the Round (hack set 1) + + + knightsh2 + Knights of the Round (hack set 2, 911127 etc) knightsj @@ -34628,12 +43725,28 @@ knockout - Knock Out!! (bootleg?) + Knock Out!! (bootleg, set 1) + + + knockoutb + Knock Out!! (bootleg, set 2) + + + knockoutc + Knock Out!! (bootleg, set 3) knpuzzle Kotoba no Puzzle Mojipittan (Japan, KPM1 Ver.A) + + koalama6 + Koala Mint (30001011, NSW/ACT) + + + koalamnt + Koala Mint (CHG1573, US) + kod The King of Dragons (World 910805) @@ -34642,6 +43755,14 @@ kodb The King of Dragons (bootleg) + + kodda + The King of Dragons (Phoenix bootleg, 910731 etc) + + + kodh + The King of Dragons (hack) + kodj The King of Dragons (Japan 910805, B-Board 90629B-3) @@ -34654,22 +43775,50 @@ kodr1 The King of Dragons (World 910711) + + kodr2 + The King of Dragons (World 910731) + kodu The King of Dragons (USA 910910) + + kodure + Kodure Ookami (Japan) + kof10th The King of Fighters 10th Anniversary (The King of Fighters 2002 bootleg) + + kof10thd + The King of Fighters 10th Anniversary (The King of Fighters 2002 bootleg / Fully Decrypted) + + + kof10thuo + The King of Fighters 10th Anniversary 2019 (Optimized version 2019, hack) + kof2000 - The King of Fighters 2000 (NGM-2570) (NGH-2570) + The King of Fighters 2000 (NGM-2570 ~ NGH-2570) kof2000n The King of Fighters 2000 (not encrypted) + + kof2000otc + The King of Fighters 2000 (OTC, hack) + + + kof2000ps2 + The King of Fighters 2000 (Playstation 2 ver. , EGHT hack) + + + kof2000sp + The King of Fighters 2000 - Special Edition (Final Version, Hack) + kof2001 The King of Fighters 2001 (NGM-262?) @@ -34680,27 +43829,63 @@ kof2002 - The King of Fighters 2002 (NGM-2650)(NGH-2650) + The King of Fighters 2002 (NGM-2650 ~ NGH-2650) kof2002b The King of Fighters 2002 (bootleg) + + kof2002um + The King of Fighters - Fuchou Zhi Lu/Road to Revenge / The King of Fighters 2002 Unlimited Match (China) + + + kof2002umj + The King of Fighters 2002 Unlimited Match (Japan) + kof2003 - The King of Fighters 2003 (NGM-2710) + The King of Fighters 2003 (NGM-2710, Export) + + + kof2003d + The King of Fighters 2003 (Decrypted) kof2003h The King of Fighters 2003 (NGH-2710) + + kof2k2omg + The King of Fighters 2002 (Omega v.0?) + + + kof2k2omg8 + The King of Fighters 2002 (Omega v0.8) + + + kof2k2omg9 + The King of Fighters 2002 (Omega v0.9) + + + kof2k2omg9b + The King of Fighters 2002 (Omega v0.9 beta) + + + kof2k2plus + The King of Fighters 2002 (Plus 2017, Hack) + kof2k4se The King of Fighters Special Edition 2004 (The King of Fighters 2002 bootleg) kof94 - The King of Fighters '94 (NGM-055)(NGH-055) + The King of Fighters '94 (NGM-055 ~ NGH-055) + + + kof94rz + The King of Fighters '94 (Hack Boss Remixed) kof95 @@ -34708,16 +43893,44 @@ kof95a - The King of Fighters '95 (NGM-084), alternate board + The King of Fighters '95 (NGM-084, alt board) + + + kof95b + The King of Fighters '95 (Enable Hidden Characters V.[?]) kof95h The King of Fighters '95 (NGH-084) + + kof95sp + The King of Fighters '95 (Special 2017, hack) + kof96 The King of Fighters '96 (NGM-214) + + kof96a + The King of Fighters '96 (NGM-214, alternate board) + + + kof96ae + The King of Fighters '96 (Anniversary Edition, EGHT hack) + + + kof96ae20 + The King of Fighters '96 (The Anniversary Edition 2.0, Build 2.3.0320) + + + kof96cn + The King of Fighters '96 (Chinese Edition ver 1.0, hack) + + + kof96ep + The King of Fighters '96 (bootleg / hack) + kof96h The King of Fighters '96 (NGH-214) @@ -34726,54 +43939,166 @@ kof97 The King of Fighters '97 (NGM-2320) + + kof97a + The King of Fighters '97 (set 2) + + + kof97ae + The King of Fighters '97 - Anniversary Edition (Build 2.1.0212) + + + kof97aef + The King of Fighters '97 - Anniversary Edition (Fork Build 2.1.1811) + + + kof97cbt + The King of Fighters '97 - Combo Training (Hack, Ver. 2018) + + + kof97cn + The King of Fighters '97 (10th Anniversary Chinese Edition, EGHT hack) + kof97h The King of Fighters '97 (NGH-2320) + + kof97inv + The King of Fighters '97 (Invincible Plus) + kof97k The King of Fighters '97 (Korean release) kof97oro - The King of Fighters '97 Oroshi Plus 2003 (bootleg) + The King of Fighters '97 Chongchu Jianghu Plus 2003 (bootleg) + + + kof97pla + The King of Fighters '97 Plus 2003 (bootleg / hack) kof97pls The King of Fighters '97 Plus (bootleg) + + kof97pm + The King of Fighters '97 (Practice Mode) + + + kof97ps + The King of Fighters '97 (Imitation Playstation final improved version 2016-10-29) + + + kof97rc + The King of Fighters '97 - Random Combo (Hack, Ver. 2010) + + + kof97t + The King of Fighters '97 (Optimized Edition) + + + kof97t2020 + The King of Fighters '97 (Optimised Edition 2020) + + + kof97xt + The King of Fighters '97 - Final Battle (hack) + kof98 - The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGM-2420) + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (NGM-2420) kof98a - The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGM-2420, alternate board) + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (NGM-2420, alt board) + + + kof98ae + The King of Fighters '98 (Anniversary Edition, EGHT hack) + + + kof98ae2016 + The King of Fighters '98 (Anniversary Edition build 1.2.0827) + + + kof98cb + The King of Fighters '98 (Combo, hack) + + + kof98cps + The King of Fighters '98 (Combo Plus) + + + kof98eck20 + The King of Fighters '98 Easy Combo King (YZKOF Version, Hack) + + + kof98eckvs + The King of Fighters '98 Easy Combo King 2014 (Versus Version, Hack) kof98h - The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (NGH-2420) + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (NGH-2420) kof98k - The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board) + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Korean board, set 1) kof98ka - The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends (Korean board 2) + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Korean board, set 2) + + + kof98mix + The King of Fighters '98 Mix (2015-12-29) + + + kof98n + The King of Fighters '98 - The Slugfest - King of Fighters '98 / Dream Match Never Ends (Decrypted) + + + kof98pfe + The King of Fighters '98 (Plus Final Edition 2017-07-23) + + + kof98ratio + The King of Fighters '98 (Ratio hack) + + + kof98ult + The King of Fighters '98 (Ultimate Match) kof98um The King of Fighters '98: Ultimate Match (v1.00) + + kof98umh + The King of Fighters '98: Ultimate Match HERO (China, V100, 09-08-23) + kof99 The King of Fighters '99 - Millennium Battle (NGM-2510) + + kof99a + The King of Fighters '99 - Millennium Battle (set 2) + + + kof99ae + The King of Fighters '99 Anniversary Edition (hack) + kof99e The King of Fighters '99 - Millennium Battle (earlier) + + kof99eur + The King of Fighters '99 Evolution Ultra Remix (Hack By Yashional) + kof99h The King of Fighters '99 - Millennium Battle (NGH-2510) @@ -34782,10 +44107,26 @@ kof99k The King of Fighters '99 - Millennium Battle (Korean release) + + kof99ka + The King of Fighters '99 - Millennium Battle (Korean release, non-encrypted program) + + + kof99n + The King of Fighters '99 - Millennium Battle (not encrypted) + kof99p The King of Fighters '99 - Millennium Battle (prototype) + + kof99rp2f + The King of Fighters '99 Remix Pro V2.0 Final (Hack By FCHT) + + + kof99sr + The King of Fighters '99 Summer Revolution (Hack By FCHT) + kofnw The King of Fighters Neowave @@ -34794,6 +44135,10 @@ kofnwj The King of Fighters Neowave (Japan) + + kofskyst + KOF Sky Stage (v1.00J) + koftball King of Football @@ -34802,10 +44147,22 @@ kofxi The King of Fighters XI + + kofxii + The King of Fighters XII (v1.00) + kog King of Gladiator (The King of Fighters '97 bootleg) + + kogplus + King of Gladiator Plus (The King of Fighters '97 bootleg) + + + kohinoor + Kohinoor (10136711, NSW/ACT) + koikoi Koi Koi Part 2 @@ -34826,17 +44183,29 @@ kok Povar / Sobrat' Buran / Agroprom (Arcade multi-game bootleg of ZX Spectrum 'Cookie', 'Jetpac' & 'Pssst') + + kokoroj + Soreike Kokology (Rev A) + kokoroj2 - Kokoroji 2 + Soreike Kokology Vol. 2 - Kokoro no Tanteikyoku kollon - Kollon (V2.04J) + Kollon (V2.04JA 2003/11/01 12:00) kollonc - Kollon (V2.04JC) + Kollon (V2.04JC 2003/11/01 12:00) + + + komemokos + Komemokos ('Pac-Man (Cirsa, Spanish bootleg)' hack) + + + komocomo + Komo Como (Topmar, bootleg?) konam80a @@ -34866,14 +44235,6 @@ konamigt Konami GT - - konamigv - Baby Phoenix/GV System - - - konamigx - System GX - konek Konek-Gorbunok @@ -34882,6 +44243,14 @@ kong Kong (Donkey Kong conversion on Galaxian hardware) + + kong2600 + Donkey Kong (2600 graphics, hack) + + + konhaji + Konnano Hajimete! (Japan) + konotako Kono Tako (10021 Ver.A) @@ -34894,6 +44263,10 @@ konzero Zero (Konami Endeavour) + + kookabuk + Kooka Bucks (0100677V, NSW/ACT) + kopunch KO Punch @@ -34914,6 +44287,10 @@ koroleva Snezhnaja Koroleva + + koropens + Korokoro Pensuke + korosuke Korosuke Roller (Japan) @@ -34930,6 +44307,10 @@ kosteel Kings of Steel + + kot + Kot-Rybolov (Terminal) + kotbinsp Kkot Bi Nyo Special (Korea) @@ -34948,7 +44329,11 @@ kotm2 - King of the Monsters 2 - The Next Thing (NGM-039)(NGH-039) + King of the Monsters 2 - The Next Thing (NGM-039 ~ NGH-039) + + + kotm2a + King of the Monsters 2 - The Next Thing (older) kotm2p @@ -34960,148 +44345,304 @@ kouyakyu - The Koukouyakyuh + The Koukou Yakyuu kov - Knights of Valour / Sangoku Senki (ver. 117) + Knights of Valour / Sanguo Zhan Ji / Sangoku Senki (ver. 117, Hong Kong) - kov100 - Knights of Valour / Sangoku Senki (ver. 100, Japanese Board) + kov111 + Knights of Valour / Sanguo Zhan Ji / Sangoku Senki (ver. 111, Japanese Board) + + + kov114 + Knights of Valour / Sanguo Zhan Ji / Sangoku Senki (ver. 114, Hong Kong) kov115 - Knights of Valour / Sangoku Senki (ver. 115) + Knights of Valour / Sanguo Zhan Ji / Sangoku Senki (ver. 115) kov2 - Knights of Valour 2 / Sangoku Senki 2 (ver. 107, 102, 100HK) + Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 107, 102, 100HK) kov2100 - Knights of Valour 2 / Sangoku Senki 2 (ver. 100, 100, 100HK) + Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 100, 100, 100HK) kov2101 - Knights of Valour 2 / Sangoku Senki 2 (ver. 101, 101, 100HK) + Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 101, 101, 100HK) kov2102 - Knights of Valour 2 / Sangoku Senki 2 (ver. 102, 101, 100HK) + Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 102, 101, 100HK) kov2103 - Knights of Valour 2 / Sangoku Senki 2 (ver. 103, 101, 100HK) + Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 103, 101, 100HK) + + + kov2104 + Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 104, 102, 100HK) kov2106 - Knights of Valour 2 / Sangoku Senki 2 (ver. 106, 102, 100KH) + Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 106, 102, 100HK) kov2nl - Knights of Valour 2 New Legend (V302, China) + Knights of Valour 2 New Legend / Sanguo Zhan Ji 2 Guang Sao Yu Jun (V302, Oversea) - kov2nlo - Knights of Valour 2 New Legend (V301, China) + kov2nl_300 + Knights of Valour 2 New Legend / Sanguo Zhan Ji 2 Guang Sao Yu Jun (V300, Oversea) + + + kov2nl_300cn + Sanguo Zhan Ji 2 Gaishi Yingxiong (V300, China) + + + kov2nl_301 + Knights of Valour 2 New Legend / Sanguo Zhan Ji 2 Guang Sao Yu Jun (V301, Oversea) + + + kov2nl_301cn + Sanguo Zhan Ji 2 Gaishi Yingxiong (V301, China) + + + kov2nl_302cn + Sanguo Zhan Ji 2 Gaishi Yingxiong (V302, China) kov2p - Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M205XX, 200, 100CN) + Knights of Valour 2 Plus - Nine Dragons / Sanguo Zhan Ji 2 Qunxiong Zhengba / Sanguo Zhan Ji 2 Feilong Zai Tian / Sangoku Senki Busyou Souha (ver. M205XX, 200, 100CN) + + + kov2p200 + Knights of Valour 2 Plus - Nine Dragons / Sanguo Zhan Ji 2 Qunxiong Zhengba / Sanguo Zhan Ji 2 Feilong Zai Tian / Sangoku Senki Busyou Souha (ver. M200XX, 200, 100CN) kov2p202 - Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M202XX, 200, 100CN) + Knights of Valour 2 Plus - Nine Dragons / Sanguo Zhan Ji 2 Qunxiong Zhengba / Sanguo Zhan Ji 2 Feilong Zai Tian / Sangoku Senki Busyou Souha (ver. M202XX, 200, 100CN) + + + kov2p203 + Knights of Valour 2 Plus - Nine Dragons / Sanguo Zhan Ji 2 Qunxiong Zhengba / Sanguo Zhan Ji 2 Feilong Zai Tian / Sangoku Senki Busyou Souha (ver. M203XX, 200, 100CN) kov2p204 - Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M204XX, 200, 100CN) + Knights of Valour 2 Plus - Nine Dragons / Sanguo Zhan Ji 2 Qunxiong Zhengba / Sanguo Zhan Ji 2 Feilong Zai Tian / Sangoku Senki Busyou Souha (ver. M204XX, 200, 100CN) + + + kov2pemp + Knights of Valour 2 Plus - Extend Magic Plus (Hack) + + + kov2pfwll + Knights of Valour 2 Plus - Feng Wu Long Yin (Ver. 205S, Hack) + + + kov2pshpd + Knights of Valour 2 Plus - Xie Feng Tian Chi (Hack) kov3 - Knights of Valour 3 (V102, China) + Knights of Valour 3 / Sanguo Zhan Ji 3 (V104, China, Hong Kong, Taiwan) + + + kov3_100 + Knights of Valour 3 / Sanguo Zhan Ji 3 (V100, China, Hong Kong, Taiwan) + + + kov3_101 + Knights of Valour 3 / Sanguo Zhan Ji 3 (V101, China, Hong Kong, Taiwan) + + + kov3_102 + Knights of Valour 3 / Sanguo Zhan Ji 3 (V102, China, Hong Kong, Taiwan) + + + kov3hd + Knights of Valour 3 HD (M-105CN 13-07-04 18:54:01) + + + kov3hd101 + Knights of Valour 3 HD (V101) + + + kov3hd102 + Knights of Valour 3 HD (V102) + + + kov3hd103 + Knights of Valour 3 HD (V103) + + + kov3hd104 + Knights of Valour 3 HD (V104) kov7sprt Knights of Valour - The Seven Spirits + + kovassga + Knights of Valour: Ao Shi San Guo / Sangoku Senki: Ao shi San Guo (V202CN, China) + kovlsjb - Knights of Valour: Luan Shi Jie Ba / Sangoku Senki: Luan Shi Jie Ba (ver. 200CN, set 1) + Luanshi Jie Ba (bootleg of Knights of Valour Super Heroes Plus, ver. 200CN, set 1) kovlsjba - Knights of Valour: Luan Shi Jie Ba / Sangoku Senki: Luan Shi Jie Ba (ver. 200CN, set 2) + Luanshi Jie Ba (bootleg of Knights of Valour Super Heroes Plus, ver. 200CN, set 2) kovlsqh - Knights of Valour: Luan Shi Quan Huang / Sangoku Senki: Luan Shi Quan Huang (ver. 200CN) + Luanshi Quanhuang (bootleg of Knights of Valour Super Heroes Plus, ver. 200CN) kovlsqh2 - Knights of Valour: Luan Shi Quan Huang 2 / Sangoku Senki: Luan Shi Quan Huang 2 (ver. 200CN) + Luanshi Quanhuang 2 (bootleg of Knights of Valour Super Heroes Plus, ver. 200CN) + + + kovlsyx + Luan Shi Ying Xiong (hack of Knights of Valour Super Heroes Plus, ver. 500) + + + kovlsyxqszl + Luan Shi Ying Xiong - Qiu Sheng Zhi Lu (hack of Knights of Valour Super Heroes Plus, ver. 500) + + + kovlsyxqxzl + Luan Shi Ying Xiong - Qun Xiong Zhu Lu (hack of Knights of Valour Super Heroes Plus, ver. 500) + + + kovlsyxqxzlp + Luan Shi Ying Xiong - Qun Xiong Zhu Lu Plus (hack of Knights of Valour Super Heroes Plus, ver. 500) kovplus - Knights of Valour Plus / Sangoku Senki Plus (ver. 119, set 1) + Knights of Valour Plus / Sanguo Zhan Ji Zhengzong Plus / Sangoku Senki Masamune Plus (ver. 119, set 1) + + + kovplus2020tx + Knights of Valour Plus - Qun Xiong Luan Wu 2020 (Hack) kovplusa - Knights of Valour Plus / Sangoku Senki Plus (ver. 119, set 2) + Knights of Valour Plus / Sanguo Zhan Ji Zhengzong Plus / Sangoku Senki Masamune Plus (ver. 119, set 2) kovqhsgs - Knights of Valour: Quan Huang San Guo Special / Sangoku Senki: Quan Huang San Guo Special (ver. 303CN) + Quanhuang Sanguo Tebie Ban (bootleg of Knights of Valour Super Heroes, V303CN, Nov 21 2008 19:03:49) + + + kovqhsgsa + Knights of Valour: Quan Huang San Guo Special / Sangoku Senki: Quan Huang San Guo Special (V303CN alt, China) + + + kovqhsgsd + Knights of Valour: Quan Huang San Guo Special / Sangoku Senki: Quan Huang San Guo Special (V303CN, China, decrypted version) kovsgqyz - Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 1) + Sanguo Qunying Chuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 1) kovsgqyza - Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 2) + Sanguo Qunying Chuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 2) kovsgqyzb - Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (bootleg, set 3) + Sanguo Qunying Chuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 3) + + + kovsgqyzc + Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (V119, set 4) + + + kovsgqyzd + Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (V119, set 5) kovsh - Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 104, CN) + Knights of Valour Super Heroes / Sanguo Zhan Ji Fengyun Zaiqi / Sangoku Senki Super Heroes (ver. 104, CN) + + + kovsh100 + Knights of Valour Super Heroes / Sanguo Zhan Ji Fengyun Zaiqi / Sangoku Senki Super Heroes (ver. 100, CN) kovsh101 - Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 101, CN) + Knights of Valour Super Heroes / Sanguo Zhan Ji Fengyun Zaiqi / Sangoku Senki Super Heroes (ver. 101, CN) kovsh102 - Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 102, CN) + Knights of Valour Super Heroes / Sanguo Zhan Ji Fengyun Zaiqi / Sangoku Senki Super Heroes (ver. 102, CN) kovsh103 - Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 103, CN) + Knights of Valour Super Heroes / Sanguo Zhan Ji Fengyun Zaiqi / Sangoku Senki Super Heroes (ver. 103, CN) + + + kovshb + Knights of Valour Superheroes / Sangoku Senki Superheroes (bootleg, V104, China) kovshp - Knights of Valour Super Heroes Plus / Sangoku Senki Super Heroes Plus (ver. 101) + Knights of Valour Super Heroes Plus / Sanguo Zhan Ji Luanshi Xiaoxiong (ver. 101) + + + kovshp100 + Knights of Valour Super Heroes Plus / Sanguo Zhan Ji Luanshi Xiaoxiong (ver. 100) + + + kovshp101 + Knights of Valour Super Heroes Plus / Sangoku Senki Super Heroes Plus (V101, China) + + + kovshpd3dw + Luan Shi Ying Xiong - Qun Xiong Zhu Lu Wu Shuang Edition (Hack, ver. 500) + + + kovshpqszl + Knights of Valour Super Heroes Plus (The Road to Survival True King, ver. 500) + + + kovshpqszltw + Knights of Valour Super Heroes Plus (The Road to Survival True King Tian Wang, ver. 500) - kovshpa - Knights of Valour Super Heroes Plus / Sangoku Senki Super Heroes Plus (ver. 100) + kovshpzqhl + Knights of Valour Super Heroes Plus (The Best Firepower In 2020, 2020-02-06) kovshxas - Knights of Valour: Aoshi Sanguo / Sangoku Senki: Aoshi Sanguo (ver. 202CN) + Aoshi Sanguo (bootleg of Knights of Valour Super Heroes Plus, V202CN, Oct 6 2008 09:59:26) kovytzy - Knights of Valour: Yi Tong Zhong Yuan / Sangoku Senki: Yi Tong Zhong Yuan (ver. 201, China) + Knights of Valour Super Heroes / Sanguo Zhan Ji Fengyun Zaiqi / Sangoku Senki Super Heroes (SANGO EX+) (ver. 201 'Yitong Zhongyuan', China) + + + kovytzyce + Knights of Valour Super Heroes / Yi Tong Zhong Yuan Qing Ban (2020-A, hack) + + + kovytzyws + Knights of Valour Super Heroes / Yi Tong Zhong Yuan Wu Shuang Ban (2019-0, hack) kozure Kozure Ookami (Japan) + + kpontoon + Pontoon (Konami) + kpv106 Kingpin (Pinball) @@ -35146,10 +44687,18 @@ ktiger2 Kyukyoku Tiger II (Ver 2.1J 1995/11/30) + + ktiger2p + Kyukyoku Tiger (Japan, 2 Players) + kuhga Kuhga - Operation Code 'Vapor Trail' (Japan revision 3) + + kungfu + Kung Fu (IGS, v100) + kungfub Kung-Fu Master (bootleg set 1) @@ -35158,10 +44707,22 @@ kungfub2 Kung-Fu Master (bootleg set 2) + + kungfub3 + Kung-Fu Master (bootleg set 3) + + + kungfud + Kung-Fu Master (Data East) + kungfum Kung-Fu Master (World) + + kungfum2 + Beyond Kung-Fu (location test) + kungfumd Kung-Fu Master (US) @@ -35178,6 +44739,10 @@ kungfuta Kung-Fu Taikun (set 2) + + kuniokub + Nekketsu Kouha Kunio-kun (Japan bootleg) + kuniokun Nekketsu Kouha Kunio-kun (Japan) @@ -35186,6 +44751,18 @@ kuniokunb Nekketsu Kouha Kunio-kun (Japan bootleg) + + kurdart + Kursaal Darts + + + kurikina + Kuri Kinton (World, prototype[Q]) + + + kurikinj + Kuri Kinton (Japan) + kurikint Kuri Kinton (World) @@ -35202,9 +44779,17 @@ kurikintu Kuri Kinton (US) + + kurikintw + Kuri Kinton (US, World Games license) + + + kurikinu + Kuri Kinton (US) + kurucham - Kurukuru Chameleon (GDL-0034) + Kurukuru Chameleon (Japan) (GDL-0034) kurufev @@ -35215,8 +44800,12 @@ Kuru Kuru Pyon Pyon (Japan) - kviper - Konami Viper BIOS + kuzmich + Kuzmich-Egorych + + + kyhatonu + Keep Your Hat On (BHG1204, US) kyros @@ -35224,7 +44813,7 @@ kyrosj - Kyros No Yakata (Japan) + Kyros no Yakata (Japan) kyuhito @@ -35238,6 +44827,10 @@ kyukaidko Kyuukai Douchuuki (Japan, old version) + + kyukaido + Kyuukai Douchuuki (Japan old version) + kyustrkr Last Striker / Kyuukyoku no Striker @@ -35246,6 +44839,22 @@ kz26 KZ-26 + + kzaurus + Pittanko Zaurus + + + l9nibble + Lucky 9 + + + labrinth + Labyrinth (Ver 1.5) + + + labyrunk + Labyrinth Runner (World Ver. K) + labyrunr Labyrinth Runner (Japan) @@ -35258,10 +44867,6 @@ lacrazyc Let's Attack Crazy Cross (GV027 Asia 1.10) - - ladybgb2 - Lady Bug (bootleg set 2) - ladybug Lady Bug @@ -35270,6 +44875,10 @@ ladybugb Lady Bug (bootleg set 1) + + ladybugb2 + Coccinelle (bootleg of Lady Bug, set 2) + ladybugg Lady Bug (bootleg on Galaxian hardware) @@ -35286,13 +44895,37 @@ ladygolfe Vs. Stroke & Match Golf (Ladies Version, set LG4 E) + + ladygum + Lady Gum + ladykill Lady Killer ladylinr - Lady Liner + Lady Liner (set 1) + + + ladylinra + Lady Liner (set 2) + + + ladylinrb + Lady Liner (encrypted, set 1) + + + ladylinrc + Lady Liner (encrypted, set 2) + + + ladylinrd + Lady Liner (encrypted, set 3) + + + ladylinre + Lady Liner (encrypted, set 4) ladyluck @@ -35302,17 +44935,25 @@ ladylukt Lady Luck (Taito) + + ladymakr + Lady Maker [BET] (Japan) + ladymstr - Lady Master of Kung Fu + Lady Master of Kung Fu (set 1, newer) + + + ladymstr2 + Lady Master of Kung Fu (set 2, older) ladyshot - Lady Sharpshooter + Lady Sharpshooter (set 1) ladyshota - Lady Sharpshooter (alternate set) + Lady Sharpshooter (set 2) lagirl @@ -35322,25 +44963,45 @@ lagunar Laguna Racer + + lah_104f + Last Action Hero (USA 1.04, display F1.01) + + + lah_104s + Last Action Hero (USA 1.04, display L1.02) + + + lah_106c + Last Action Hero (Canada 1.06, display A1.04) + + + lah_107 + Last Action Hero (USA 1.07, display A1.06) + + + lah_108s + Last Action Hero (USA 1.08, display L1.04) + lah_110 - Last Action Hero (1.10) + Last Action Hero (USA 1.10, display A1.06) lah_112 - Last Action Hero (1.12) + Last Action Hero (USA 1.12, display A1.06) - lah_l104 - Last Action Hero (1.04 Spain) + lah_xxx_s105 + Last Action Hero (unknown CPU, display L1.05) - lah_l108 - Last Action Hero (1.08 Spain) + lamachin + L.A. Machineguns (Japan) - lamachin - L.A. Machineguns + lancelot + Sir Lancelot landbrk @@ -35350,6 +45011,10 @@ landbrka Land Breaker (World) / Miss Tang Ja Ru Gi (Korea) (pcb ver 3.03) (AT89c52 protected) + + landbrkb + Land Breaker (World) / Miss Tang Ja Ru Gi (Korea) (pcb ver 1.0) (AT89c52 protected) + landgear Landing Gear (Ver 4.2 O) @@ -35368,15 +45033,27 @@ landhigh - Landing High Japan + Landing High Japan (Ver 2.01 OK) + + + landhigha + Landing High Japan (Ver 2.02 O) landmakr + Land Maker (Ver 2.02O 1998/06/02) + + + landmakrj Land Maker (Ver 2.01J 1998/06/01) landmakrp - Land Maker (Ver 2.02O 1998/06/02) (Prototype) + Land Maker (Ver 2.02O 1998/06/02, prototype) + + + landmkrp + Land Maker (World Prototype) lans2004 @@ -35394,6 +45071,10 @@ laperlag La Perla Nera Gold (Ver 2.0) + + larana + La Rana + laser Astro Laser (bootleg of Space Laser) @@ -35422,25 +45103,53 @@ lasstixx Laser Strixx 2 + + lastapos + The Last Apostle Puppetshow + lastbank Last Bank (v1.16) lastbh - The Last Bounty Hunter v0.06 + The Last Bounty Hunter (v1.01) + + + lastbh_006 + The Last Bounty Hunter (v0.06) lastblad The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGM-2340) + + lastblada + The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGM-2340, alternate board) + lastbladh The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGH-2340) + + lastbladsp + The Last Blade / Bakumatsu Roman - Gekka no Kenshi (Special 2017, hack) + lastbld2 - The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (NGM-2430)(NGH-2430) + The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (NGM-2430 ~ NGH-2430) + + + lastbld2eh + The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (Enhanced Hack) + + + lastbld2te + The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (Team Edition Hack) + + + lastblda + Last Blade / Bakumatsu Roman - Gekka no Kenshi, The (set 2) lastbrnx @@ -35478,44 +45187,76 @@ lastduelo Last Duel (US Old Ver.) + + lastfero + Last Fortress - Toride (Erotic) + lastfght Last Fighting lastfort - Last Fortress - Toride + Last Fortress - Toride (Japan, VG420 PCB) lastforte - Last Fortress - Toride (Erotic, Rev C) + Last Fortress - Toride (China, Rev C) lastfortea - Last Fortress - Toride (Erotic, Rev A) + Last Fortress - Toride (China, Rev A) lastfortg - Last Fortress - Toride (German) + Last Fortress - Toride (Germany) + + + lastfortj + Last Fortress - Toride (Japan, VG460 PCB) lastfortk Last Fortress - Toride (Korea) + + lastfour + Last Four (09:12 16/01/2001) + + + lasthope + Last Hope (bootleg AES to MVS conversion, no coin support) + + + lastkm + Last KM (ver 1.0.0275, checksum 13bff751, prototype) + lastlap Last Lap lastmisn - Last Mission (US revision 6) + Last Mission (World revision 8) lastmisnj Last Mission (Japan) - lastmisno + lastmisnu5 + Last Mission (US revision 5) + + + lastmisnu6 + Last Mission (US revision 6) + + + lastmsnj + Last Mission (Japan) + + + lastmsno Last Mission (US revision 5) @@ -35528,7 +45269,11 @@ lastsurv - Last Survivor (Japan, FD1094 317-0083) + Last Survivor (Japan) (FD1094 317-0083) + + + lastsurvd + Last Survivor (Japan) (bootleg of FD1094 317-0083 set) lasvegas @@ -35546,21 +45291,29 @@ lazrlord Lazer Lord + + lazybug + Lazy Bug + + + lb2b + The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (Enable Hidden Characters V4) + lbeach Long Beach lbgrande - Libero Grande (Asia, LG2/VER.A) + Libero Grande (World, LG2/VER.A) - lbgrandeja - Libero Grande (Japan, LG1/VER.A) + lbowling + League Bowling (NGM-019 ~ NGH-019) - lbowling - League Bowling (NGM-019)(NGH-019) + lbvbiosu + VBios updater lc_11 @@ -35574,6 +45327,18 @@ lca2 Lights...Camera...Action! (rev.2) + + lckydraw + Lucky Draw (pinball, set 1) + + + lckydrawa + Lucky Draw (pinball, set 2) + + + ldquiz4 + LD Quiz dai 4-dan - Kotaetamon Gachi! (Japan) + ldrink Lucky Drink (set 1) @@ -35596,11 +45361,15 @@ ldrun3j + Lode Runner III - Majin no Fukkatsu (Japan) + + + ldrun3jp Lode Runner III - Majin No Fukkatsu ldrun4 - Lode Runner IV - Teikoku Karano Dasshutsu + Lode Runner IV - Teikoku Karano Dasshutsu (Japan) ldruna @@ -35624,7 +45393,11 @@ leader - Leader + Leader (version Z 2E, Greece) + + + leadera + Leader (version Z 2F, Greece) leaguemn @@ -35635,13 +45408,21 @@ Lectronamo - ledstorm - Led Storm (US) + leds2011 + Led Storm Rally 2011 (World) - ledstorm2 + leds2011p + Led Storm Rally 2011 (US, prototype 12) + + + leds2011u Led Storm Rally 2011 (US) + + ledstorm + Led Storm (US) + legend Legend @@ -35658,18 +45439,46 @@ legendos Legend of Success Joe / Ashita no Joe Densetsu + + legendsb + Legend (SNES bootleg) + legion Legion - Spinner-87 (World ver 2.03) + + legionj + Chouji Meikyuu Legion (Japan ver 1.05, set 1) + + + legionj2 + Chouji Meikyuu Legion (Japan ver 1.05, set 2) + + + legionjb + Chouji Meikyuu Legion (Japan ver 1.05, bootleg set 1) + + + legionjb2 + Chouji Meikyuu Legion (Japan ver 1.05, bootleg set 2) + legionna Legionnaire (World) + + legionnaj + Legionnaire (Japan) + legionnau Legionnaire (US) + + legionnu + Legionnaire (US) + legiono Chouji Meikyuu Legion (Japan bootleg ver 1.05) @@ -35678,13 +45487,21 @@ legofair Koukuu Kihei Monogatari - The Legend of Air Cavalry (Japan) + + legrandc + Le Grandchamps + leking Le King + + lemans + Le Mans [TTL] + lemans24 - Le Mans 24 (Revision B) + Le Mans 24 (Japan, Revision B) lemmings @@ -35694,6 +45511,10 @@ lemnangl Mahjong Lemon Angel (Japan) + + lemrol + Let 'em Roll (0151115, US) + leprechn Leprechaun @@ -35704,16 +45525,28 @@ leprgld - Leprechaun's Gold (Russia) + Leprechaun's Gold (Russian) + + + leprglds + Leprechaun's Gold (Spanish) lethalen Lethal Enforcers (ver UAE, 11/19/92 15:04) + + lethaleneaa + Lethal Enforcers (ver EAA, 09/09/92 09:44) + lethaleneab Lethal Enforcers (ver EAB, 10/14/92 19:53) + + lethalenead + Lethal Enforcers (ver EAD, 11/11/92 10:52) + lethaleneae Lethal Enforcers (ver EAE, 11/19/92 16:24) @@ -35736,28 +45569,52 @@ lethalj - Lethal Justice + Lethal Justice (Version 2.3) lethalth Lethal Thunder (World) + + letsgoju + Let's Go Jungle (Export) + levers Levers + + lgfish + Let's Go Fish'n (10220111, NSW/ACT) + lghost - Laser Ghost (World, FD1094 317-0166) + Laser Ghost (World) (FD1094 317-0166) + + + lghostd + Laser Ghost (World) (bootleg of FD1094 317-0166 set) + + + lghostj + Laser Ghost (Japan) (FD1094 317-0164) lghostu - Laser Ghost (US, FD1094 317-0165) + Laser Ghost (US) (FD1094 317-0165) + + + lghostud + Laser Ghost (US) (bootleg of FD1094 317-0165 set) lgp Laser Grand Prix + + lgpalt + Laser Grand Prix (alternate) + lgtnfght Lightning Fighters (World) @@ -35770,18 +45627,46 @@ lgtnfghtu Lightning Fighters (US) + + lhaunt + Lucky Haunter (030707 World) + lhaunt_10 Lucky Haunter (090712 Entertainment) lhaunt_11 - Lucky Haunter (100331 Entertainment) + Lucky Haunter (100331 Entertainment X) + + + lhaunt_12 + Lucky Haunter (101209 Entertainment N) + + + lhaunt_13 + Lucky Haunter (110111 Entertainment A) + + + lhaunt_14 + Lucky Haunter (110204 Entertainment A) + + + lhaunt_15 + Lucky Haunter (110311 Entertainment B) + + + lhaunt_16 + Lucky Haunter (140526 Entertainment B) lhaunt_2 Lucky Haunter (030804 World) + + lhaunt_3 + Lucky Haunter (031027 World) + lhaunt_4 Lucky Haunter (031111 World) @@ -35846,21 +45731,37 @@ lhbv33c Long Hu Bang (China, V033C) + + lhcdb + Last Hope CD Beta (Neo CD conversion) + lhzb2 - Mahjong Long Hu Zheng Ba 2 (set 1) + Mahjong Long Hu Zhengba 2 (set 1) lhzb2a - Mahjong Long Hu Zheng Ba 2 (VS221M) + Mahjong Long Hu Zhengba 2 (VS221M) lhzb3 - Long Hu Zheng Ba 3 + Long Hu Zhengba III + + + lhzb3in1 + Long Hu Zhengba San He Yi (V100CN) lhzb4 - Long Hu Zheng Ba 4 + Long Hu Zhengba 4 + + + liberat2 + Liberator (set 2) + + + liberatb + Liberation (bootleg) liberate @@ -35890,6 +45791,10 @@ lifefrcej Lifeforce (Japan) + + lifefrcj + Lifeforce (Japan) + lightbr Light Bringer (Ver 2.2O 1994/04/08) @@ -35903,8 +45808,8 @@ Lightning - lindbios - Sega Lindbergh Bios + lineking + Line King (0252534, US) linkypip @@ -35928,7 +45833,7 @@ livegal - Live Gal (Japan 870530) + Live Gal [BET] (Japan 870530) livequiz @@ -35958,6 +45863,10 @@ lkageb3 The Legend of Kage (bootleg set 3) + + lkageb4 + The Legend of Kage (bootleg set 4) + lkageo The Legend of Kage (older) @@ -35974,6 +45883,10 @@ llander1 Lunar Lander (rev 1) + + llandert + Lunar Lander (screen test) + llcharm Lucky Lady's Charm (set 1) @@ -36010,10 +45923,30 @@ lockonc Lock-On (rev. C) + + lockonph + Lock On (Philko) + locoboot Loco-Motion (bootleg) + + locoloot + Loco Loot (0100473V, NSW/ACT) + + + locoloota + Loco Loot (0100472V, NSW/ACT) + + + locolootnz + Loco Loot (0600725V, New Zealand) + + + locolootu + Loco Loot (AHG1513, US) + locomotn Loco-Motion @@ -36022,6 +45955,10 @@ locomotp Locomotion + + loderdfa + Lode Runner - The Dig Fight (ver. A) (Japan) + loderndf Lode Runner - The Dig Fight (ver. B) @@ -36032,19 +45969,35 @@ loffire - Line of Fire / Bakudan Yarou (World, FD1094 317-0136) + Line of Fire / Bakudan Yarou (World) (FD1094 317-0136) + + + loffired + Line of Fire / Bakudan Yarou (World) (bootleg of FD1094 317-0136 set) loffirej - Line of Fire / Bakudan Yarou (Japan, FD1094 317-0134) + Line of Fire / Bakudan Yarou (Japan) (FD1094 317-0134) + + + loffirejd + Line of Fire / Bakudan Yarou (Japan) (bootleg of FD1094 317-0134 set) loffireu - Line of Fire / Bakudan Yarou (US, FD1094 317-0135) + Line of Fire / Bakudan Yarou (US) (FD1094 317-0135) + + + loffireud + Line of Fire / Bakudan Yarou (US) (bootleg of FD1094 317-0135 set) logger - Logger + Logger (Rev.3) + + + loggerr2 + Logger (Rev.2) logicpr2 @@ -36056,7 +46009,11 @@ loht - Legend of Hero Tonma + Legend of Hero Tonma (World) + + + loht_ms + Legend of Hero Tonma (Gaelco bootleg, Modular System) lohtb @@ -36066,18 +46023,26 @@ lohtb2 Legend of Hero Tonma (Japan, bootleg with i8751) + + lohtb3 + Legend of Hero Tonma (World, bootleg with i8751) + lohtj Legend of Hero Tonma (Japan) lol - Life of Luxury (Russia) + Life of Luxury (Russian) lomakai Legend of Makai (World) + + lonewolf + Lone Wolf (0100587V, NSW/ACT) + looper Looper @@ -36086,6 +46051,10 @@ looping Looping + + loopinga + Looping (set 2) + loopingv Looping (Venture Line license, set 1) @@ -36094,21 +46063,53 @@ loopingva Looping (Venture Line license, set 2) + + looptris + Looptris (v.2021-12-26) + lordgun Lord of Gun (USA) + + lordleo + Lord Leopard (30111211, NSW/ACT) + lordofk The Lord of King (Japan) + + lordofkb + The Lord of King (bootleg, not protected) + + + lordofkbp + The Lord of King (bootleg, protected) + lortium Lortium lostspc - Lost in Space + Lost in Space (1.01) + + + lostspc_d1 + Lost in Space (1.01, Display 1.01) + + + lostspcf + Lost in Space (1.01 France) + + + lostspcg + Lost in Space (1.01 Germany) + + + losttmbh + Lost Tomb (hard) losttomb @@ -36132,7 +46133,11 @@ lostwsga - The Lost World (Revision A) + The Lost World (Japan, Revision A) + + + lostwsgp + The Lost World (location test) lotlot @@ -36140,183 +46145,187 @@ lotr - Lord Of The Rings, The (10.00) + The Lord Of The Rings (10.00) + + + lotr3 + The Lord Of The Rings (3.00) lotr401 - Lord Of The Rings, The (4.01) + The Lord Of The Rings (4.01) lotr410 - Lord Of The Rings, The (4.10) + The Lord Of The Rings (4.10) lotr5 - Lord Of The Rings, The (5.00) + The Lord Of The Rings (5.00) lotr501 - Lord Of The Rings, The (5.01) + The Lord Of The Rings (5.01) lotr6 - Lord Of The Rings, The (6.00) + The Lord Of The Rings (6.00) lotr7 - Lord Of The Rings, The (7.00) + The Lord Of The Rings (7.00) lotr8 - Lord Of The Rings, The (8.00) + The Lord Of The Rings (8.00) lotr9 - Lord Of The Rings, The (9.00) + The Lord Of The Rings (9.00) lotr_fr - Lord Of The Rings, The (10.00 France) + The Lord Of The Rings (10.00 France) lotr_fr401 - Lord Of The Rings, The (4.01 France) + The Lord Of The Rings (4.01 France) lotr_fr410 - Lord Of The Rings, The (4.10 France) + The Lord Of The Rings (4.10 France) lotr_fr5 - Lord Of The Rings, The (5.0 France) + The Lord Of The Rings (5.0 France) lotr_fr501 - Lord Of The Rings, The (5.01 France) + The Lord Of The Rings (5.01 France) lotr_fr6 - Lord Of The Rings, The (6.0 France) + The Lord Of The Rings (6.0 France) lotr_fr7 - Lord Of The Rings, The (7.0 France) + The Lord Of The Rings (7.0 France) lotr_fr8 - Lord Of The Rings, The (8.0 France) + The Lord Of The Rings (8.0 France) lotr_fr9 - Lord Of The Rings, The (9.0 France) + The Lord Of The Rings (9.0 France) lotr_gr - Lord Of The Rings, The (10.00 Germany) + The Lord Of The Rings (10.00 Germany) lotr_gr401 - Lord Of The Rings, The (4.01 Germany) + The Lord Of The Rings (4.01 Germany) lotr_gr410 - Lord Of The Rings, The (4.10 Germany) + The Lord Of The Rings (4.10 Germany) lotr_gr5 - Lord Of The Rings, The (5.0 Germany) + The Lord Of The Rings (5.0 Germany) lotr_gr501 - Lord Of The Rings, The (5.01 Germany) + The Lord Of The Rings (5.01 Germany) lotr_gr6 - Lord Of The Rings, The (6.0 Germany) + The Lord Of The Rings (6.0 Germany) lotr_gr7 - Lord Of The Rings, The (7.0 Germany) + The Lord Of The Rings (7.0 Germany) lotr_gr8 - Lord Of The Rings, The (8.0 Germany) + The Lord Of The Rings (8.0 Germany) lotr_gr9 - Lord Of The Rings, The (9.0 Germany) + The Lord Of The Rings (9.0 Germany) lotr_it - Lord Of The Rings, The (10.00 Italy) + The Lord Of The Rings (10.00 Italy) lotr_it401 - Lord Of The Rings, The (4.01 Italy) + The Lord Of The Rings (4.01 Italy) lotr_it410 - Lord Of The Rings, The (4.10 Italy) + The Lord Of The Rings (4.10 Italy) lotr_it5 - Lord Of The Rings, The (5.0 Italy) + The Lord Of The Rings (5.0 Italy) lotr_it501 - Lord Of The Rings, The (5.01 Italy) + The Lord Of The Rings (5.01 Italy) lotr_it6 - Lord Of The Rings, The (6.0 Italy) + The Lord Of The Rings (6.0 Italy) lotr_it7 - Lord Of The Rings, The (7.0 Italy) + The Lord Of The Rings (7.0 Italy) lotr_it8 - Lord Of The Rings, The (8.0 Italy) + The Lord Of The Rings (8.0 Italy) lotr_it9 - Lord Of The Rings, The (9.0 Italy) + The Lord Of The Rings (9.0 Italy) lotr_le - Lord Of The Rings, The (10.02 Limited Edition) + The Lord Of The Rings (10.02 Limited Edition) lotr_sp - Lord Of The Rings, The (10.00 Spain) + The Lord Of The Rings (10.00 Spain) lotr_sp401 - Lord Of The Rings, The (4.01 Spain) + The Lord Of The Rings (4.01 Spain) lotr_sp5 - Lord Of The Rings, The (5.0 Spain) + The Lord Of The Rings (5.0 Spain) lotr_sp501 - Lord Of The Rings, The (5.01 Spain) + The Lord Of The Rings (5.01 Spain) lotr_sp6 - Lord Of The Rings, The (6.0 Spain) + The Lord Of The Rings (6.0 Spain) lotr_sp7 - Lord Of The Rings, The (7.0 Spain) + The Lord Of The Rings (7.0 Spain) lotr_sp8 - Lord Of The Rings, The (8.0 Spain) + The Lord Of The Rings (8.0 Spain) lotr_sp9 - Lord Of The Rings, The (9.0 Spain) + The Lord Of The Rings (9.0 Spain) lottof2 @@ -36326,6 +46335,26 @@ lottofun Lotto Fun + + lougcm + Louie's Gold - Mr. Cashman (20006911, NSW/ACT) + + + loveber3 + Love And Berry - 3rd-5th Collection (USA, Export, Ver 1.002) (MDA-C0042) + + + loveber3cn + Love And Berry - 3rd-5th Collection (China, Ver 1.001) (MDA-C0071) + + + lovebero + Love And Berry - 1st-2nd Collection (Export, Ver 1.003) + + + lovebery + Love And Berry - 1st-2nd Collection (Export, Ver 2.000) + lovehous Mahjong Love House [BET] (Japan 901024) @@ -36334,9 +46363,13 @@ loverboy Lover Boy + + lovestuk + Love Stuck (0152583, US) + lovewin - Love To Win (Russia) + Love To Win (Russian) lpadv @@ -36358,6 +46391,10 @@ lresort Last Resort + + lresortp + Last Resort (prototype) + lsasquad Land Sea Air Squad / Riku Kai Kuu Saizensen @@ -36371,16 +46408,40 @@ Laser Quiz Italy - lsrquiz2 + lsrquiz2i Laser Quiz 2 Italy (v1.0) - ltcasinn - Little Casino (newer) + lsrquizg + Laser Quiz Greece + + + lstduela + Last Duel (US set 2) + + + lstduelb + Last Duel (bootleg) + + + ltcasin2 + Little Casino II v18.1 + + + ltcasin2a + Little Casino II v17.0 ltcasino - Little Casino (older) + Little Casino + + + ltorb + Jonas Indiana and the Lost Temple of RA (20050717) + + + ltswords + Lightning Swords luckboom @@ -36392,7 +46453,7 @@ luckfoun - Lucky Fountain (Konami Endeavour) + Lucky Fountain (Konami Endeavour, Russia) luckgrln @@ -36400,7 +46461,27 @@ luckshel - Lucky Shell (Russia) (Extrema) + Lucky Shell (Ukraine, V. 42.25) + + + luckshela + Lucky Shell (Ukraine, V. 42.10) + + + lucky21 + Lucky 21 + + + lucky21d + Lucky 21-D + + + lucky25 + Lucky 25 + + + lucky37 + Lucky 37 lucky74 @@ -36414,10 +46495,18 @@ lucky74b Lucky 74 (bootleg, set 2) + + lucky7i + Lucky 7 (Impera) + lucky8 New Lucky 8 Lines (set 1, W-4) + + lucky88 + Lucky 88 (10241411, NSW/ACT) + lucky8a New Lucky 8 Lines (set 2, W-4) @@ -36438,18 +46527,86 @@ lucky8e New Lucky 8 Lines (set 6, W-4, main 40%, d-up 60%) + + lucky8f + New Lucky 8 Lines (set 7, W-4, encrypted) + + + lucky8g + New Lucky 8 Lines (set 8, W-4) + + + lucky8h + New Lucky 8 Lines Super Turbo (Hack) + + + lucky8i + New Lucky 8 Lines (set 9, W-4, Eagle, licensed by Wing) + + + lucky8j + New Lucky 8 Lines Crown Turbo (Hack) + + + lucky8k + New Lucky 8 Lines (set 10, W-4, encrypted NEC D315-5136) + + + lucky8l + New Lucky 8 Lines (set 11, W-4) + lucky_l1 Lucky Seven (L-1) + + luckybal + Lucky Ball 96 (Ver 4.01) + + + luckybala + Lucky Ball 96 (Ver 3.50 - 627) + + + luckybalb + Lucky Ball 96 (Ver 3.50 - 626) + + + luckybalc + Lucky Ball 96 (Ver 3.50 - 623) + + + luckybald + Lucky Ball 96 (Ver 3.50 - 616) + + + luckybale + Lucky Ball 96 (Ver 3.01) + + + luckybar + Lucky Bar (W-4 with mc68705 MCU) + + + luckyclo + Lucky Clover (0300109V, NSW/ACT) + luckygrl - Lucky Girl? (Wing) + Lucky Girl (Wing) luckylad Lucky Lady (Wing, encrypted) + + luckypkr + Lucky Poker (bootleg/hack of Major Poker) + + + luckyplr + Lucky Player + luckyrlt Lucky Roulette Plus (6-players, Spanish) @@ -36466,6 +46623,14 @@ luctoday Lucky Today + + lufykzku + Otakara Itadaki Luffy Kaizoku-Dan! (Japan, v1.02) + + + luigibal + Luigi's Ball (10235411, NSW/ACT) + lunapark Luna Park (set 1, dual program) @@ -36478,6 +46643,10 @@ lunaparkc Luna Park (set 3) + + lunaprk + Luna Park (ver. 1.2) + lunarba1 Lunar Battle (prototype, earlier) @@ -36500,12 +46669,20 @@ lupinsho + Lupin The Third - The Shooting (Rev A) (GDS-0018A) + + + lupinshoo Lupin The Third - The Shooting (GDS-0018) luplup Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 3.0 / 990128) + + luplup10 + Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 1.05 / 981214) + luplup29 Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 2.9 / 990108) @@ -36518,6 +46695,10 @@ lvcards Lovely Cards + + lvcardsa + Lovely Cards (encrypted) + lvgirl94 Las Vegas Girl (Girl '94) @@ -36528,19 +46709,35 @@ lw3_200 - Lethal Weapon 3 (2.00) + Lethal Weapon 3 (USA 2.00, display A2.04) + + + lw3_203 + Lethal Weapon 3 (USA 2.03, display A2.04) + + + lw3_204e + Lethal Weapon 3 (England 2.04, display A2.02) lw3_205 - Lethal Weapon 3 (2.05) + Lethal Weapon 3 (USA 2.05, display A2.05) lw3_207 - Lethal Weapon 3 (2.07 Canada) + Lethal Weapon 3 (USA 2.07, display A2.06) + + + lw3_207c + Lethal Weapon 3 (Canada 2.07, display A2.06) lw3_208 - Lethal Weapon 3 (2.08) + Lethal Weapon 3 (USA 2.08, display A2.06) + + + lwar_a81 + Laser War (8.1) lwar_a83 @@ -36566,10 +46763,22 @@ lwingsj Ares no Tsubasa (Japan) + + lwingsja + Ares no Tsubasa (Japan, rev. A) + + + lwingsjp + Ares no Tsubasa (Japan) + lzbal_l2 Laser Ball (L-2) + + lzbal_l2sp + Laser Ball (L-2, PROM sound) + lzbal_t2 Laser Ball (T-2) @@ -37082,6 +47291,14 @@ m1cluedob2p Cluedo (Maygay/BwB) v2.1 (Protocol) (M1A/B) + + m1cluedobi2 + Cluedo (Maygay/BwB) v2.1 (Isle of Man) (M1A/B) + + + m1cluedobi2p + Cluedo (Maygay/BwB) v2.1 (Isle of Man) (Protocol) (M1A/B) + m1cluedoi Cluedo (Maygay) v7.2 (Isle of Man) (M1A/B) @@ -37622,6 +47839,10 @@ m1dkonga Donkey Kong (Maygay) v9.2 (Alternate) (M1A/B) + + m1dkonga2 + Donkey Kong (Maygay) v?.? (M1A/B) + m1dkongp Donkey Kong (Maygay) v9.2 (Protocol) (M1A/B) @@ -38412,75 +48633,75 @@ m1gresc - Great Escape, The (Maygay) (M1A/B) (set 1) + The Great Escape (Maygay) (M1A/B) (set 1) m1gresca - Great Escape, The (Maygay) (M1A/B) (set 2) + The Great Escape (Maygay) (M1A/B) (set 2) m1grescb - Great Escape, The (Maygay) (M1A/B) (set 3) + The Great Escape (Maygay) (M1A/B) (set 3) m1grescc - Great Escape, The (Maygay) (M1A/B) (set 4) + The Great Escape (Maygay) (M1A/B) (set 4) m1grescd - Great Escape, The (Maygay) (M1A/B) (set 5) + The Great Escape (Maygay) (M1A/B) (set 5) m1gresce - Great Escape, The (Maygay) (M1A/B) (set 6) + The Great Escape (Maygay) (M1A/B) (set 6) m1grescf - Great Escape, The (Maygay) (M1A/B) (set 7) + The Great Escape (Maygay) (M1A/B) (set 7) m1grescg - Great Escape, The (Maygay) (M1A/B) (set 8) + The Great Escape (Maygay) (M1A/B) (set 8) m1gresch - Great Escape, The (Maygay) (M1A/B) (set 9) + The Great Escape (Maygay) (M1A/B) (set 9) m1gresci - Great Escape, The (Maygay) (M1A/B) (set 10) + The Great Escape (Maygay) (M1A/B) (set 10) m1grescj - Great Escape, The (Maygay) (M1A/B) (set 11) + The Great Escape (Maygay) (M1A/B) (set 11) m1gresck - Great Escape, The (Maygay) (M1A/B) (set 12) + The Great Escape (Maygay) (M1A/B) (set 12) m1grescl - Great Escape, The (Maygay) (M1A/B) (set 13) + The Great Escape (Maygay) (M1A/B) (set 13) m1grescm - Great Escape, The (Maygay) (M1A/B) (set 14) + The Great Escape (Maygay) (M1A/B) (set 14) m1grescn - Great Escape, The (Maygay) (M1A/B) (set 15) + The Great Escape (Maygay) (M1A/B) (set 15) m1gresco - Great Escape, The (Maygay) (M1A/B) (set 16) + The Great Escape (Maygay) (M1A/B) (set 16) m1grescp - Great Escape, The (Maygay) (M1A/B) (set 17) + The Great Escape (Maygay) (M1A/B) (set 17) m1grescq - Great Escape, The (Maygay) (M1A/B) (set 18) + The Great Escape (Maygay) (M1A/B) (set 18) m1gskill @@ -38832,71 +49053,71 @@ m1itjob - Italian Job (Maygay) (M1A/B) (set 1) + The Italian Job (Maygay) (M1A/B) (set 1) m1itjobc - Italian Job (Maygay) (M1A/B) (set 4) + The Italian Job (Maygay) (M1A/B) (set 4) m1itjobd - Italian Job (Maygay) (M1A/B) (set 5) + The Italian Job (Maygay) (M1A/B) (set 5) m1itjobe - Italian Job (Maygay) (M1A/B) (set 6) + The Italian Job (Maygay) (M1A/B) (set 6) m1itjobf - Italian Job (Maygay) (M1A/B) (set 7) + The Italian Job (Maygay) (M1A/B) (set 7) m1itjobg - Italian Job (Maygay) (M1A/B) (set 8) + The Italian Job (Maygay) (M1A/B) (set 8) m1itjobh - Italian Job (Maygay) (M1A/B) (set 9) + The Italian Job (Maygay) (M1A/B) (set 9) m1itjobi - Italian Job (Maygay) (M1A/B) (set 10) + The Italian Job (Maygay) (M1A/B) (set 10) m1itjobj - Italian Job (Maygay) (M1A/B) (set 11) + The Italian Job (Maygay) (M1A/B) (set 11) m1itjobk - Italian Job (Maygay) (M1A/B) (set 12) + The Italian Job (Maygay) (M1A/B) (set 12) m1itjobl - Italian Job (Maygay) (M1A/B) (set 13) + The Italian Job (Maygay) (M1A/B) (set 13) m1itjobm - Italian Job (Maygay) (M1A/B) (set 14) + The Italian Job (Maygay) (M1A/B) (set 14) m1itjobn - Italian Job (Maygay) (M1A/B) (set 15) + The Italian Job (Maygay) (M1A/B) (set 15) m1itjobo - Italian Job (Maygay) (M1A/B) (set 16) + The Italian Job (Maygay) (M1A/B) (set 16) m1itjobp - Italian Job (Maygay) (M1A/B) (set 17) + The Italian Job (Maygay) (M1A/B) (set 17) m1itjobq - Italian Job (Maygay) (M1A/B) (set 18) + The Italian Job (Maygay) (M1A/B) (set 18) m1itjobr - Italian Job (Maygay) (M1A/B) (set 19) + The Italian Job (Maygay) (M1A/B) (set 19) m1itsko @@ -40286,6 +50507,10 @@ m1simpsg The Simpsons (Maygay) (M1A/B) (set 8) + + m1simpsh + The Simpsons (Maygay) (M1A/B) (set 9) + m1sirich Strike It Rich (Maygay) (M1A/B) (set 1) @@ -40318,6 +50543,10 @@ m1spidb Spiderman (Maygay) (M1A/B) (set 3) + + m1sprint + SPRINT (Maygay) (M1A/B) + m1sprnov Super Nova (Dutch) (Maygay) (M1A/B) @@ -40914,10 +51143,6 @@ m1wotwb War Of The Worlds (Maygay) (M1A/B) (set 3) - - m21 - 21 (Mirco) - m2hilite Hi-Lights (Barcrest) (MPU2) @@ -41102,6 +51327,10 @@ m3rockpl Rock Pile (Pcp) (MPU3) + + m3rolla + Rollamatic 5-Line Special (Barcrest) (MPU3) + m3rollem Roll 'Em (Pcp) (MPU3) @@ -42060,43 +52289,43 @@ m4actbnk - Action Bank (Barcrest) (MPU4) (set 1) + Action Bank (Barcrest) (MPU4) (ACT 0.7) m4actbnk__a - Action Bank (Barcrest) (MPU4) (set 2) + Action Bank (Barcrest) (MPU4) (ACT 0.7 B) m4actbnk__b - Action Bank (Barcrest) (MPU4) (set 3) + Action Bank (Barcrest) (MPU4) (ACT 0.7 BD) m4actbnk__c - Action Bank (Barcrest) (MPU4) (set 4) + Action Bank (Barcrest) (MPU4) (ACT 0.7 C) m4actbnk__d - Action Bank (Barcrest) (MPU4) (set 5) + Action Bank (Barcrest) (MPU4) (ACT 0.7 D) m4actbnk__e - Action Bank (Barcrest) (MPU4) (set 6) + Action Bank (Barcrest) (MPU4) (ACT 0.7 KD) m4actbnk__f - Action Bank (Barcrest) (MPU4) (set 7) + Action Bank (Barcrest) (MPU4) (ACT 0.7 YD) m4actbnk__g - Action Bank (Barcrest) (MPU4) (set 8) + Action Bank (Barcrest) (MPU4) (ACT 0.7 K) m4actbnk__h - Action Bank (Barcrest) (MPU4) (set 9) + Action Bank (Barcrest) (MPU4) (ACT 0.7 Y) m4actbnk__i - Action Bank (Barcrest) (MPU4) (set 10) + Action Bank (Barcrest) (MPU4) (ACT 0.7 AD) m4actbnka @@ -42128,7 +52357,7 @@ m4addr - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1) + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, set 1) m4addr10 @@ -42140,27 +52369,27 @@ m4addr10c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, set 1) m4addr10c_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, set 2) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, set 2) m4addr10d - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0D, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 D, set 1) m4addr10d_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0D, set 2) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 D, set 2) m4addr10yd - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0YD, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 YD, set 1) m4addr10yd_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0YD, set 2) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 YD, set 2) m4addr3 @@ -42184,35 +52413,35 @@ m4addr3d - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 D, set 1) m4addr3d_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 2) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 D, set 2) m4addr3d_b - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 3) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 D, set 3) m4addr3d_c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0D, set 4) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 D, set 4) m4addr3yd - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 YD, set 1) m4addr3yd_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 2) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 YD, set 2) m4addr3yd_b - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 3) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 YD, set 3) m4addr3yd_c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0YD, set 4) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 YD, set 4) m4addr4 @@ -42224,23 +52453,23 @@ m4addr4c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0 C, set 1) m4addr4c_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 2) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0 C, set 2) m4addr4c_b - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0C, set 3) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0 C, set 3) m4addr4d - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0D, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0 D, set 1) m4addr4yd - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0YD, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0 YD, set 1) m4addr5 @@ -42252,135 +52481,135 @@ m4addr5c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0C, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 C, set 1) m4addr5c_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0C, set 2) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 C, set 2) m4addr5d - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0D, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 D, set 1) m4addr5d_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0D, set 2) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 D, set 2) m4addr5yd - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0YD, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 YD, set 1) m4addr5yd_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0YD, set 2) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 YD, set 2) m4addr6lc - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1C) + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 C) m4addr6ld - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1D) + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 D) m4addr6lk - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1K) + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 K) m4addr6ly - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1Y) + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 Y) m4addr6lybd - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1YBD) + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 YBD) m4addr6lyd - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1YD) + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 YD) m4addr_h1 - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, hack?, set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 1) m4addr_h2 - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0C, hack?, set 2) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 2) m4addrc - Adders & Ladders Classic (Barcrest) (MPU4) (set 1) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 3) m4addrc__a - Adders & Ladders Classic (Barcrest) (MPU4) (set 2) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 6) m4addrc__b - Adders & Ladders Classic (Barcrest) (MPU4) (set 3) + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, hack, set 1) m4addrc__c - Adders & Ladders Classic (Barcrest) (MPU4) (set 4) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 4) m4addrc__d - Adders & Ladders Classic (Barcrest) (MPU4) (set 5) + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, set 2) m4addrc__e - Adders & Ladders Classic (Barcrest) (MPU4) (set 6) + Adders & Ladders (Bwb / Barcrest) (MPU4) (NNU 5.0, hack, set 1) m4addrc__f - Adders & Ladders Classic (Barcrest) (MPU4) (set 7) + Adders & Ladders (Bwb / Barcrest) (MPU4) (NNU 5.0, hack, set 2) m4addrc__h - Adders & Ladders Classic (Barcrest) (MPU4) (set 8) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, hack) m4addrc__i - Adders & Ladders Classic (Barcrest) (MPU4) (set 9) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 7) m4addrc__j - Adders & Ladders Classic (Barcrest) (MPU4) (set 10) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 8) m4addrc__k - Adders & Ladders Classic (Barcrest) (MPU4) (set 11) + Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, hack, set 2) m4addrc__l - Adders & Ladders Classic (Barcrest) (MPU4) (set 12) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, 1993) m4addrc__m - Adders & Ladders Classic (Barcrest) (MPU4) (set 13) + Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 5) m4addrc__n - Adders & Ladders Classic (Barcrest) (MPU4) (set 14) + Adders & Ladders (Bwb / Barcrest) (MPU4) (NNU 5.0, hack, set 3) m4addrcc - Adders & Ladders Classic Club (Barcrest) (MPU4) (set 1) + Adders & Ladders Classic Club (Barcrest) (MPU4) (ADC 1.1) m4addrcc__a - Adders & Ladders Classic Club (Barcrest) (MPU4) (set 2) + Adders & Ladders Classic Club (Barcrest) (MPU4) (ADC 1.1 F) m4addrcc__b - Adders & Ladders Classic Club (Barcrest) (MPU4) (set 3) + Adders & Ladders Classic Club (Barcrest) (MPU4) (ADC 1.1 L) m4addrcc__c - Adders & Ladders Classic Club (Barcrest) (MPU4) (set 4) + Adders & Ladders Classic Club (Barcrest) (MPU4) (ADC 1.1 D) m4addrcc__d - Adders & Ladders Classic Club (Barcrest) (MPU4) (set 5) + Adders & Ladders Classic Club (Barcrest) (MPU4) (ADC 0.5) m4addrd @@ -42508,19 +52737,19 @@ m4andybt - Andy's Big Time Club (Barcrest) (MPU4) (set 1) + Andy's Big Time Club (Barcrest) (MPU4) (ABT 1.8) m4andybt__a - Andy's Big Time Club (Barcrest) (MPU4) (set 2) + Andy's Big Time Club (Barcrest) (MPU4) (ABT 1.8 F) m4andybt__b - Andy's Big Time Club (Barcrest) (MPU4) (set 3) + Andy's Big Time Club (Barcrest) (MPU4) (ABT 1.8 D) m4andybt__c - Andy's Big Time Club (Barcrest) (MPU4) (set 4) + Andy's Big Time Club (Barcrest) (MPU4) (ABT 1.5) m4andycp @@ -42776,279 +53005,279 @@ m4andyfh - Andy's Full House (Barcrest) (MPU4) (set 1) + Andy's Full House (Barcrest) (MPU4) (AFH 0.1) m4andyfh__0 - Andy's Full House (Barcrest) (MPU4) (set 28) + Andy's Full House (Barcrest) (MPU4) (AFT 0.3 R) m4andyfh__1 - Andy's Full House (Barcrest) (MPU4) (set 29) + Andy's Full House (Barcrest) (MPU4) (AFT 0.3) m4andyfh__2 - Andy's Full House (Barcrest) (MPU4) (set 30) + Andy's Full House (Barcrest) (MPU4) (AFT 0.3 Y) m4andyfh__3 - Andy's Full House (Barcrest) (MPU4) (set 31) + Andy's Full House (Barcrest) (MPU4) (AFU 0.2 AD) m4andyfh__4 - Andy's Full House (Barcrest) (MPU4) (set 32) + Andy's Full House (Barcrest) (MPU4) (AFU 0.2 B) m4andyfh__5 - Andy's Full House (Barcrest) (MPU4) (set 33) + Andy's Full House (Barcrest) (MPU4) (AFU 0.2 BD) m4andyfh__6 - Andy's Full House (Barcrest) (MPU4) (set 34) + Andy's Full House (Barcrest) (MPU4) (AFU 0.2 D) m4andyfh__7 - Andy's Full House (Barcrest) (MPU4) (set 35) + Andy's Full House (Barcrest) (MPU4) (AFU 0.2 KD) m4andyfh__8 - Andy's Full House (Barcrest) (MPU4) (set 36) + Andy's Full House (Barcrest) (MPU4) (AFU 0.2 RD) m4andyfh__9 - Andy's Full House (Barcrest) (MPU4) (set 37) + Andy's Full House (Barcrest) (MPU4) (AFU 0.2 YD) m4andyfh__a - Andy's Full House (Barcrest) (MPU4) (set 2) + Andy's Full House (Barcrest) (MPU4) (AF3 0.1 AD) m4andyfh__a0 - Andy's Full House (Barcrest) (MPU4) (set 64) + Andy's Full House (Barcrest) (MPU4) (CAU 0.1 KD / CA4 0.1) m4andyfh__a1 - Andy's Full House (Barcrest) (MPU4) (set 65) + Andy's Full House (Barcrest) (MPU4) (CAU 0.1 YD / CA4 0.1) m4andyfh__a2 - Andy's Full House (Barcrest) (MPU4) (set 66) + Andy's Full House (Barcrest) (MPU4) (CAU 0.1 K / CA4 0.1) m4andyfh__a3 - Andy's Full House (Barcrest) (MPU4) (set 67) + Andy's Full House (Barcrest) (MPU4) (CAU 0.1 / CA4 0.1) m4andyfh__a4 - Andy's Full House (Barcrest) (MPU4) (set 68) + Andy's Full House (Barcrest) (MPU4) (CAU 0.1 Y / CA4 0.1) m4andyfh__aa - Andy's Full House (Barcrest) (MPU4) (set 38) + Andy's Full House (Barcrest) (MPU4) (AFU 0.2 K) m4andyfh__ab - Andy's Full House (Barcrest) (MPU4) (set 39) + Andy's Full House (Barcrest) (MPU4) (AFU 0.2 R) m4andyfh__ac - Andy's Full House (Barcrest) (MPU4) (set 40) + Andy's Full House (Barcrest) (MPU4) (AFU 0.2) m4andyfh__ad - Andy's Full House (Barcrest) (MPU4) (set 41) + Andy's Full House (Barcrest) (MPU4) (AFU 0.2 Y) m4andyfh__ae - Andy's Full House (Barcrest) (MPU4) (set 42) + Andy's Full House (Barcrest) (MPU4) (CA4 0.8 AD) m4andyfh__af - Andy's Full House (Barcrest) (MPU4) (set 43) + Andy's Full House (Barcrest) (MPU4) (CA4 0.8 B) m4andyfh__ag - Andy's Full House (Barcrest) (MPU4) (set 44) + Andy's Full House (Barcrest) (MPU4) (CA4 0.8 BD) m4andyfh__ah - Andy's Full House (Barcrest) (MPU4) (set 45) + Andy's Full House (Barcrest) (MPU4) (CA4 0.8 D) m4andyfh__ai - Andy's Full House (Barcrest) (MPU4) (set 46) + Andy's Full House (Barcrest) (MPU4) (CA4 0.8 KD) m4andyfh__aj - Andy's Full House (Barcrest) (MPU4) (set 47) + Andy's Full House (Barcrest) (MPU4) (CA4 0.8 YD) m4andyfh__ak - Andy's Full House (Barcrest) (MPU4) (set 48) + Andy's Full House (Barcrest) (MPU4) (CA4 0.8 K) m4andyfh__al - Andy's Full House (Barcrest) (MPU4) (set 49) + Andy's Full House (Barcrest) (MPU4) (CA4 0.8) m4andyfh__am - Andy's Full House (Barcrest) (MPU4) (set 50) + Andy's Full House (Barcrest) (MPU4) (CA4 0.8 Y) m4andyfh__an - Andy's Full House (Barcrest) (MPU4) (set 51) + Andy's Full House (Barcrest) (MPU4) (CAT 0.2 AD) m4andyfh__ao - Andy's Full House (Barcrest) (MPU4) (set 52) + Andy's Full House (Barcrest) (MPU4) (CAT 0.2 B) m4andyfh__ap - Andy's Full House (Barcrest) (MPU4) (set 53) + Andy's Full House (Barcrest) (MPU4) (CAT 0.2 BD) m4andyfh__aq - Andy's Full House (Barcrest) (MPU4) (set 54) + Andy's Full House (Barcrest) (MPU4) (CAT 0.2 D) m4andyfh__ar - Andy's Full House (Barcrest) (MPU4) (set 55) + Andy's Full House (Barcrest) (MPU4) (CAT 0.2 KD) m4andyfh__as - Andy's Full House (Barcrest) (MPU4) (set 56) + Andy's Full House (Barcrest) (MPU4) (CAT 0.2 YD) m4andyfh__at - Andy's Full House (Barcrest) (MPU4) (set 57) + Andy's Full House (Barcrest) (MPU4) (CAT 0.2 K) m4andyfh__au - Andy's Full House (Barcrest) (MPU4) (set 58) + Andy's Full House (Barcrest) (MPU4) (CAT 0.2) m4andyfh__av - Andy's Full House (Barcrest) (MPU4) (set 59) + Andy's Full House (Barcrest) (MPU4) (CAT 0.2 Y) m4andyfh__aw - Andy's Full House (Barcrest) (MPU4) (set 60) + Andy's Full House (Barcrest) (MPU4) (CAU 0.1 AD / CA4 0.1) m4andyfh__ax - Andy's Full House (Barcrest) (MPU4) (set 61) + Andy's Full House (Barcrest) (MPU4) (CAU 0.1 B / CA4 0.1) m4andyfh__ay - Andy's Full House (Barcrest) (MPU4) (set 62) + Andy's Full House (Barcrest) (MPU4) (CAU 0.1 BD / CA4 0.1) m4andyfh__az - Andy's Full House (Barcrest) (MPU4) (set 63) + Andy's Full House (Barcrest) (MPU4) (CAU 0.1 D / CA4 0.1) m4andyfh__b - Andy's Full House (Barcrest) (MPU4) (set 3) + Andy's Full House (Barcrest) (MPU4) (AF3 0.1 B) m4andyfh__c - Andy's Full House (Barcrest) (MPU4) (set 4) + Andy's Full House (Barcrest) (MPU4) (AF3 0.1 BD) m4andyfh__d - Andy's Full House (Barcrest) (MPU4) (set 5) + Andy's Full House (Barcrest) (MPU4) (AF3 0.1 D) m4andyfh__e - Andy's Full House (Barcrest) (MPU4) (set 6) + Andy's Full House (Barcrest) (MPU4) (AF3 0.1 KD) m4andyfh__f - Andy's Full House (Barcrest) (MPU4) (set 7) + Andy's Full House (Barcrest) (MPU4) (AF3 0.1 YD) m4andyfh__g - Andy's Full House (Barcrest) (MPU4) (set 8) + Andy's Full House (Barcrest) (MPU4) (AF3 0.1 K) m4andyfh__h - Andy's Full House (Barcrest) (MPU4) (set 9) + Andy's Full House (Barcrest) (MPU4) (AF3 0.1) m4andyfh__i - Andy's Full House (Barcrest) (MPU4) (set 10) + Andy's Full House (Barcrest) (MPU4) (AF3 0.1 Y) m4andyfh__j - Andy's Full House (Barcrest) (MPU4) (set 11) + Andy's Full House (Barcrest) (MPU4) (AF8 0.1 B) m4andyfh__k - Andy's Full House (Barcrest) (MPU4) (set 12) + Andy's Full House (Barcrest) (MPU4) (AF8 0.1 BD) m4andyfh__l - Andy's Full House (Barcrest) (MPU4) (set 13) + Andy's Full House (Barcrest) (MPU4) (AF8 0.1 C) m4andyfh__m - Andy's Full House (Barcrest) (MPU4) (set 14) + Andy's Full House (Barcrest) (MPU4) (AF8 0.1 K) m4andyfh__n - Andy's Full House (Barcrest) (MPU4) (set 15) + Andy's Full House (Barcrest) (MPU4) (AF8 0.1) m4andyfh__o - Andy's Full House (Barcrest) (MPU4) (set 16) + Andy's Full House (Barcrest) (MPU4) (AFH 0.1 B) m4andyfh__p - Andy's Full House (Barcrest) (MPU4) (set 17) + Andy's Full House (Barcrest) (MPU4) (AFH 0.1 C) m4andyfh__q - Andy's Full House (Barcrest) (MPU4) (set 18) + Andy's Full House (Barcrest) (MPU4) (AFH 0.1 D) m4andyfh__r - Andy's Full House (Barcrest) (MPU4) (set 19) + Andy's Full House (Barcrest) (MPU4) (AFH 0.1 R) m4andyfh__s - Andy's Full House (Barcrest) (MPU4) (set 20) + Andy's Full House (Barcrest) (MPU4) (AFT 0.3 AD) m4andyfh__t - Andy's Full House (Barcrest) (MPU4) (set 21) + Andy's Full House (Barcrest) (MPU4) (AFT 0.3 B) m4andyfh__u - Andy's Full House (Barcrest) (MPU4) (set 22) + Andy's Full House (Barcrest) (MPU4) (AFT 0.3 BD) m4andyfh__v - Andy's Full House (Barcrest) (MPU4) (set 23) + Andy's Full House (Barcrest) (MPU4) (AFT 0.3 D) m4andyfh__w - Andy's Full House (Barcrest) (MPU4) (set 24) + Andy's Full House (Barcrest) (MPU4) (AFT 0.3 KD) m4andyfh__x - Andy's Full House (Barcrest) (MPU4) (set 25) + Andy's Full House (Barcrest) (MPU4) (AFT 0.3 RD) m4andyfh__y - Andy's Full House (Barcrest) (MPU4) (set 26) + Andy's Full House (Barcrest) (MPU4) (AFT 0.3 YD) m4andyfh__z - Andy's Full House (Barcrest) (MPU4) (set 27) + Andy's Full House (Barcrest) (MPU4) (AFT 0.3 K) m4andyfl - Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL4 2.1KS) + Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL4 2.1 KS) m4andyfl3 @@ -43056,35 +53285,35 @@ m4andyfl3ad - Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1AD) + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1 AD) m4andyfl3b - Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1B) + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1 B) m4andyfl3bd - Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1BD) + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1 BD) m4andyfl3d - Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1D) + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1 D) m4andyfl3k - Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1K) + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1 K) m4andyfl3kd - Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1KD) + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1 KD) m4andyfl3y - Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1Y) + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1 Y) m4andyfl3yd - Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1YD) + Andy Loves Flo (Barcrest) (MPU4) (AL3 0.1 YD) m4andyfl8 @@ -43092,39 +53321,39 @@ m4andyfl8ad - Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1AD) + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1 AD) m4andyfl8b - Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1B) + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1 B) m4andyfl8bd - Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1BD) + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1 BD) m4andyfl8bs - Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL_ 2.4KS) + Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL_ 2.4 KS) m4andyfl8c - Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1C) + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1 C) m4andyfl8d - Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1D) + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1 D) m4andyfl8k - Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1K) + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1 K) m4andyfl8kd - Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1KD) + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1 KD) m4andyfl8y - Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1Y) + Andy Loves Flo (Barcrest) (MPU4) (AL8 0.1 Y) m4andyflf @@ -43132,19 +53361,19 @@ m4andyflfb - Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0B) + Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0 B) m4andyflfc - Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0C) + Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0 C) m4andyflfk - Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0K) + Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0 K) m4andyflfr - Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0R) + Andy Loves Flo (Barcrest) (MPU4) (ALF 2.0 R) m4andyflt @@ -43152,43 +53381,43 @@ m4andyfltad - Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4AD) + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4 AD) m4andyfltb - Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4B) + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4 B) m4andyfltbd - Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4BD) + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4 BD) m4andyfltd - Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4D) + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4 D) m4andyfltk - Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4K) + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4 K) m4andyfltkd - Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4KD) + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4 KD) m4andyfltr - Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4R) + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4 R) m4andyfltrd - Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4RD) + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4 RD) m4andyflty - Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4Y) + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4 Y) m4andyfltyd - Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4YD) + Andy Loves Flo (Barcrest) (MPU4) (ALT 0.4 YD) m4andyflu @@ -43196,43 +53425,43 @@ m4andyfluad - Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3AD) + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3 AD) m4andyflub - Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3B) + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3 B) m4andyflubd - Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3BD) + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3 BD) m4andyflud - Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3D) + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3 D) m4andyfluk - Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3K) + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3 K) m4andyflukd - Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3KD) + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3 KD) m4andyflur - Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3R) + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3 R) m4andyflurd - Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3RD) + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3 RD) m4andyfluy - Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3Y) + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3 Y) m4andyfluyd - Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3YD) + Andy Loves Flo (Barcrest) (MPU4) (ALU 0.3 YD) m4andyge @@ -43244,39 +53473,39 @@ m4andyge28ad - Andy's Great Escape (Barcrest) (MPU4) (A28 0.1AD) + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1 AD) m4andyge28b - Andy's Great Escape (Barcrest) (MPU4) (A28 0.1B) + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1 B) m4andyge28bd - Andy's Great Escape (Barcrest) (MPU4) (A28 0.1BD) + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1 BD) m4andyge28c - Andy's Great Escape (Barcrest) (MPU4) (A28 0.1C) + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1 C) m4andyge28d - Andy's Great Escape (Barcrest) (MPU4) (A28 0.1D) + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1 D) m4andyge28k - Andy's Great Escape (Barcrest) (MPU4) (A28 0.1K) + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1 K) m4andyge28kd - Andy's Great Escape (Barcrest) (MPU4) (A28 0.1KD) + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1 KD) m4andyge28y - Andy's Great Escape (Barcrest) (MPU4) (A28 0.1Y) + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1 Y) m4andyge28yd - Andy's Great Escape (Barcrest) (MPU4) (A28 0.1YD) + Andy's Great Escape (Barcrest) (MPU4) (A28 0.1 YD) m4andyge2t @@ -43284,35 +53513,35 @@ m4andyge2tad - Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1AD) + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1 AD) m4andyge2tb - Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1B) + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1 B) m4andyge2tbd - Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1BD) + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1 BD) m4andyge2td - Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1D) + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1 D) m4andyge2tk - Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1K) + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1 K) m4andyge2tkd - Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1KD) + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1 KD) m4andyge2ty - Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1Y) + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1 Y) m4andyge2tyd - Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1YD) + Andy's Great Escape (Barcrest) (MPU4) (A2T 0.1 YD) m4andyge5t @@ -43320,35 +53549,35 @@ m4andyge5tad - Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1AD) + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1 AD) m4andyge5tb - Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1B) + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1 B) m4andyge5tbd - Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1BD) + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1 BD) m4andyge5td - Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1D) + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1 D) m4andyge5tk - Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1K) + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1 K) m4andyge5tkd - Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1KD) + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1 KD) m4andyge5ty - Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1Y) + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1 Y) m4andyge5tyd - Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1YD) + Andy's Great Escape (Barcrest) (MPU4) (A5T 0.1 YD) m4andyge_h1 @@ -43368,23 +53597,23 @@ m4andyge_hx1 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 1) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 1) m4andyge_hx2 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 2) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 2) m4andyge_hx3 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 3) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 3) m4andyge_hx4 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0CX, hack?, set 4) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 4) m4andyge_hx5 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0CX, hack?) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0 CX, hack?) m4andygeg5 @@ -43392,23 +53621,23 @@ m4andygeg5a - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0A) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 A) m4andygeg5c - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0C) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 C) m4andygeg5d - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0D) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 D) m4andygeg5k - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0K) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 K) m4andygeg5yd - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0YD) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 YD) m4andygeg_2 @@ -43416,19 +53645,19 @@ m4andygeg_2c - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0C) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0 C) m4andygeg_2d - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0D) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0 D) m4andygeg_2k - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0K) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0 K) m4andygeg_2yd - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0YD) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0 YD) m4andygegc2 @@ -43436,7 +53665,7 @@ m4andygegc2d - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AGC 2.0D) + Andy's Great Escape (Bwb / Barcrest) (MPU4) (AGC 2.0 D) m4andygen2_a @@ -43444,19 +53673,19 @@ m4andygen2c - Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3C) + Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3 C) m4andygen2d - Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3D) + Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3 D) m4andygen2k - Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3K) + Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3 K) m4andygen2y - Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3Y) + Andy's Great Escape (Barcrest) (MPU4) (AN2 0.3 Y) m4apach @@ -43504,179 +53733,179 @@ m4bagtel - Bagatelle (Barcrest) (MPU4) (set 1) + Bagatelle (Barcrest) (MPU4) (BGT 0.5) m4bagtel__0 - Bagatelle (Barcrest) (MPU4) (set 28) + Bagatelle (Barcrest) (MPU4) (EL2 0.1 YD) m4bagtel__1 - Bagatelle (Barcrest) (MPU4) (set 29) + Bagatelle (Barcrest) (MPU4) (EL2 0.1 K) m4bagtel__2 - Bagatelle (Barcrest) (MPU4) (set 30) + Bagatelle (Barcrest) (MPU4) (EL2 0.1 R) m4bagtel__3 - Bagatelle (Barcrest) (MPU4) (set 31) + Bagatelle (Barcrest) (MPU4) (EL2 0.1) m4bagtel__4 - Bagatelle (Barcrest) (MPU4) (set 32) + Bagatelle (Barcrest) (MPU4) (EL2 0.1 Y) m4bagtel__5 - Bagatelle (Barcrest) (MPU4) (set 33) + Bagatelle (Barcrest) (MPU4) (EL3 1.0 AD) m4bagtel__6 - Bagatelle (Barcrest) (MPU4) (set 34) + Bagatelle (Barcrest) (MPU4) (EL3 1.0 B) m4bagtel__7 - Bagatelle (Barcrest) (MPU4) (set 35) + Bagatelle (Barcrest) (MPU4) (EL3 1.0 BD) m4bagtel__8 - Bagatelle (Barcrest) (MPU4) (set 36) + Bagatelle (Barcrest) (MPU4) (EL3 1.0 C) m4bagtel__9 - Bagatelle (Barcrest) (MPU4) (set 37) + Bagatelle (Barcrest) (MPU4) (EL3 1.0 D) m4bagtel__a - Bagatelle (Barcrest) (MPU4) (set 2) + Bagatelle (Barcrest) (MPU4) (BG2 0.1 C) m4bagtel__aa - Bagatelle (Barcrest) (MPU4) (set 38) + Bagatelle (Barcrest) (MPU4) (EL3 1.0 KD) m4bagtel__ab - Bagatelle (Barcrest) (MPU4) (set 39) + Bagatelle (Barcrest) (MPU4) (EL3 1.0 RD) m4bagtel__ac - Bagatelle (Barcrest) (MPU4) (set 40) + Bagatelle (Barcrest) (MPU4) (EL3 1.0 YD) m4bagtel__ad - Bagatelle (Barcrest) (MPU4) (set 41) + Bagatelle (Barcrest) (MPU4) (EL3 1.0 K) m4bagtel__ae - Bagatelle (Barcrest) (MPU4) (set 42) + Bagatelle (Barcrest) (MPU4) (EL3 1.0 R) m4bagtel__af - Bagatelle (Barcrest) (MPU4) (set 43) + Bagatelle (Barcrest) (MPU4) (EL3 1.0) m4bagtel__ag - Bagatelle (Barcrest) (MPU4) (set 45) + Bagatelle (Barcrest) (MPU4) (EL3 1.0 Y) m4bagtel__b - Bagatelle (Barcrest) (MPU4) (set 3) + Bagatelle (Barcrest) (MPU4) (BG2 0.1 YD) m4bagtel__c - Bagatelle (Barcrest) (MPU4) (set 4) + Bagatelle (Barcrest) (MPU4) (BG2 0.1) m4bagtel__d - Bagatelle (Barcrest) (MPU4) (set 5) + Bagatelle (Barcrest) (MPU4) (BGT 0.5 KD) m4bagtel__e - Bagatelle (Barcrest) (MPU4) (set 6) + Bagatelle (Barcrest) (MPU4) (BGT 0.5 K) m4bagtel__f - Bagatelle (Barcrest) (MPU4) (set 7) + Bagatelle (Barcrest) (MPU4) (BGT 0.5 R) m4bagtel__g - Bagatelle (Barcrest) (MPU4) (set 8) + Bagatelle (Barcrest) (MPU4) (BGT 0.5 Y) m4bagtel__h - Bagatelle (Barcrest) (MPU4) (set 9) + Bagatelle (Barcrest) (MPU4) (EL1 0.1 AD) m4bagtel__i - Bagatelle (Barcrest) (MPU4) (set 10) + Bagatelle (Barcrest) (MPU4) (EL1 0.1 B) m4bagtel__j - Bagatelle (Barcrest) (MPU4) (set 11) + Bagatelle (Barcrest) (MPU4) (EL1 0.1 BD) m4bagtel__k - Bagatelle (Barcrest) (MPU4) (set 12) + Bagatelle (Barcrest) (MPU4) (EL1 0.1 C) m4bagtel__l - Bagatelle (Barcrest) (MPU4) (set 13) + Bagatelle (Barcrest) (MPU4) (EL1 0.1 D) m4bagtel__m - Bagatelle (Barcrest) (MPU4) (set 14) + Bagatelle (Barcrest) (MPU4) (EL1 0.1 KD) m4bagtel__n - Bagatelle (Barcrest) (MPU4) (set 15) + Bagatelle (Barcrest) (MPU4) (EL1 0.1 RD) m4bagtel__o - Bagatelle (Barcrest) (MPU4) (set 16) + Bagatelle (Barcrest) (MPU4) (EL1 0.1 YD) m4bagtel__p - Bagatelle (Barcrest) (MPU4) (set 17) + Bagatelle (Barcrest) (MPU4) (EL1 0.1 K) m4bagtel__q - Bagatelle (Barcrest) (MPU4) (set 18) + Bagatelle (Barcrest) (MPU4) (EL1 0.1 R) m4bagtel__r - Bagatelle (Barcrest) (MPU4) (set 19) + Bagatelle (Barcrest) (MPU4) (EL1 0.1) m4bagtel__s - Bagatelle (Barcrest) (MPU4) (set 20) + Bagatelle (Barcrest) (MPU4) (EL1 0.1 Y) m4bagtel__t - Bagatelle (Barcrest) (MPU4) (set 21) + Bagatelle (Barcrest) (MPU4) (EL2 0.1 AD) m4bagtel__u - Bagatelle (Barcrest) (MPU4) (set 22) + Bagatelle (Barcrest) (MPU4) (EL2 0.1 B) m4bagtel__v - Bagatelle (Barcrest) (MPU4) (set 23) + Bagatelle (Barcrest) (MPU4) (EL2 0.1 BD) m4bagtel__w - Bagatelle (Barcrest) (MPU4) (set 24) + Bagatelle (Barcrest) (MPU4) (EL2 0.1 C) m4bagtel__x - Bagatelle (Barcrest) (MPU4) (set 25) + Bagatelle (Barcrest) (MPU4) (EL2 0.1 D) m4bagtel__y - Bagatelle (Barcrest) (MPU4) (set 26) + Bagatelle (Barcrest) (MPU4) (EL2 0.1 KD) m4bagtel__z - Bagatelle (Barcrest) (MPU4) (set 27) + Bagatelle (Barcrest) (MPU4) (EL2 0.1 RD) m4bandgd @@ -43816,391 +54045,391 @@ m4bdash - Boulder Dash (Barcrest) (MPU4) (set 1) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1) m4bdash__0 - Boulder Dash (Barcrest) (MPU4) (set 28) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 K) m4bdash__1 - Boulder Dash (Barcrest) (MPU4) (set 29) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 R) m4bdash__2 - Boulder Dash (Barcrest) (MPU4) (set 30) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0) m4bdash__3 - Boulder Dash (Barcrest) (MPU4) (set 31) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 Y) m4bdash__4 - Boulder Dash (Barcrest) (MPU4) (set 32) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 AD) m4bdash__5 - Boulder Dash (Barcrest) (MPU4) (set 33) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 B) m4bdash__6 - Boulder Dash (Barcrest) (MPU4) (set 34) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 BD) m4bdash__7 - Boulder Dash (Barcrest) (MPU4) (set 35) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 C) m4bdash__8 - Boulder Dash (Barcrest) (MPU4) (set 36) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 D) m4bdash__9 - Boulder Dash (Barcrest) (MPU4) (set 37) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 DH) m4bdash__a - Boulder Dash (Barcrest) (MPU4) (set 2) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0, hack) m4bdash__a0 - Boulder Dash (Barcrest) (MPU4) (set 64) + Boulder Dash (Barcrest) (MPU4) (BO_ 2.1 D) m4bdash__a1 - Boulder Dash (Barcrest) (MPU4) (set 65) + Boulder Dash (Barcrest) (MPU4) (BO_ 2.0 K) m4bdash__a2 - Boulder Dash (Barcrest) (MPU4) (set 66) + Boulder Dash (Barcrest) (MPU4) (BO_ 2.1 K) m4bdash__a3 - Boulder Dash (Barcrest) (MPU4) (set 67) + Boulder Dash (Barcrest) (MPU4) (BO_ 2.0 B) m4bdash__a4 - Boulder Dash (Barcrest) (MPU4) (set 68) + Boulder Dash (Barcrest) (MPU4) (BO_ 2.1 B) m4bdash__aa - Boulder Dash (Barcrest) (MPU4) (set 38) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 KD) m4bdash__ab - Boulder Dash (Barcrest) (MPU4) (set 39) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 RD) m4bdash__ac - Boulder Dash (Barcrest) (MPU4) (set 40) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 YD) m4bdash__ad - Boulder Dash (Barcrest) (MPU4) (set 41) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 H) m4bdash__ae - Boulder Dash (Barcrest) (MPU4) (set 42) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 K) m4bdash__af - Boulder Dash (Barcrest) (MPU4) (set 43) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 R) m4bdash__ag - Boulder Dash (Barcrest) (MPU4) (set 44) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 Y) m4bdash__ah - Boulder Dash (Barcrest) (MPU4) (set 45) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 AD) m4bdash__ai - Boulder Dash (Barcrest) (MPU4) (set 46) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 B) m4bdash__aj - Boulder Dash (Barcrest) (MPU4) (set 47) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 BD) m4bdash__ak - Boulder Dash (Barcrest) (MPU4) (set 48) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 C) m4bdash__al - Boulder Dash (Barcrest) (MPU4) (set 49) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 D) m4bdash__am - Boulder Dash (Barcrest) (MPU4) (set 50) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 DH) m4bdash__an - Boulder Dash (Barcrest) (MPU4) (set 51) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 KD) m4bdash__ao - Boulder Dash (Barcrest) (MPU4) (set 52) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 RD) m4bdash__ap - Boulder Dash (Barcrest) (MPU4) (set 53) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 YD) m4bdash__aq - Boulder Dash (Barcrest) (MPU4) (set 54) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 H) m4bdash__ar - Boulder Dash (Barcrest) (MPU4) (set 55) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 K) m4bdash__as - Boulder Dash (Barcrest) (MPU4) (set 56) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 R) m4bdash__at - Boulder Dash (Barcrest) (MPU4) (set 57) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2) m4bdash__au - Boulder Dash (Barcrest) (MPU4) (set 58) + Boulder Dash (Barcrest) (MPU4) (BLS 0.2 Y) m4bdash__av - Boulder Dash (Barcrest) (MPU4) (set 59) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 C, hack) m4bdash__aw - Boulder Dash (Barcrest) (MPU4) (set 60) + Boulder Dash (Barcrest) (MPU4) (BLS 0.1 C, hack) m4bdash__ax - Boulder Dash (Barcrest) (MPU4) (set 61) + Boulder Dash (Barcrest) (MPU4) (BO_ 2.0) m4bdash__ay - Boulder Dash (Barcrest) (MPU4) (set 62) + Boulder Dash (Barcrest) (MPU4) (BO_ 2.1) m4bdash__az - Boulder Dash (Barcrest) (MPU4) (set 63) + Boulder Dash (Barcrest) (MPU4) (BO_ 2.0 D) m4bdash__b - Boulder Dash (Barcrest) (MPU4) (set 3) + Boulder Dash (Barcrest) (MPU4) (BLD 0.6) m4bdash__c - Boulder Dash (Barcrest) (MPU4) (set 4) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 AD) m4bdash__d - Boulder Dash (Barcrest) (MPU4) (set 5) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 B) m4bdash__e - Boulder Dash (Barcrest) (MPU4) (set 6) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 BD) m4bdash__f - Boulder Dash (Barcrest) (MPU4) (set 7) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 C) m4bdash__g - Boulder Dash (Barcrest) (MPU4) (set 8) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 D) m4bdash__h - Boulder Dash (Barcrest) (MPU4) (set 9) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 DH) m4bdash__i - Boulder Dash (Barcrest) (MPU4) (set 10) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 KD) m4bdash__j - Boulder Dash (Barcrest) (MPU4) (set 11) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 RD) m4bdash__k - Boulder Dash (Barcrest) (MPU4) (set 12) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 YD) m4bdash__l - Boulder Dash (Barcrest) (MPU4) (set 13) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 H) m4bdash__m - Boulder Dash (Barcrest) (MPU4) (set 14) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 K) m4bdash__n - Boulder Dash (Barcrest) (MPU4) (set 15) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 R) m4bdash__o - Boulder Dash (Barcrest) (MPU4) (set 16) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7) m4bdash__p - Boulder Dash (Barcrest) (MPU4) (set 17) + Boulder Dash (Barcrest) (MPU4) (BLD 0.7 Y) m4bdash__q - Boulder Dash (Barcrest) (MPU4) (set 18) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 AD) m4bdash__r - Boulder Dash (Barcrest) (MPU4) (set 19) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 B) m4bdash__s - Boulder Dash (Barcrest) (MPU4) (set 20) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 BD) m4bdash__t - Boulder Dash (Barcrest) (MPU4) (set 21) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 C) m4bdash__u - Boulder Dash (Barcrest) (MPU4) (set 22) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 D) m4bdash__v - Boulder Dash (Barcrest) (MPU4) (set 23) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 DH) m4bdash__w - Boulder Dash (Barcrest) (MPU4) (set 24) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 KD) m4bdash__x - Boulder Dash (Barcrest) (MPU4) (set 25) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 RD) m4bdash__y - Boulder Dash (Barcrest) (MPU4) (set 26) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 YD) m4bdash__z - Boulder Dash (Barcrest) (MPU4) (set 27) + Boulder Dash (Barcrest) (MPU4) (BLD 1.0 H) m4berser - Berserk (Barcrest) (MPU4) (set 1) + Berserk (Barcrest) (MPU4) (BES 0.6) m4berser__0 - Berserk (Barcrest) (MPU4) (set 28) + Berserk (Barcrest) (MPU4) (BES 0.6 Y) m4berser__1 - Berserk (Barcrest) (MPU4) (set 29) + Berserk (Barcrest) (MPU4) (BE4 1.1 KS) m4berser__a - Berserk (Barcrest) (MPU4) (set 2) + Berserk (Barcrest) (MPU4) (BE3 0.1 AD) m4berser__b - Berserk (Barcrest) (MPU4) (set 3) + Berserk (Barcrest) (MPU4) (BE3 0.1 B) m4berser__c - Berserk (Barcrest) (MPU4) (set 4) + Berserk (Barcrest) (MPU4) (BE3 0.1 BD) m4berser__d - Berserk (Barcrest) (MPU4) (set 5) + Berserk (Barcrest) (MPU4) (BE3 0.1 D) m4berser__e - Berserk (Barcrest) (MPU4) (set 6) + Berserk (Barcrest) (MPU4) (BE3 0.1 KD) m4berser__f - Berserk (Barcrest) (MPU4) (set 7) + Berserk (Barcrest) (MPU4) (BE3 0.1 YD) m4berser__g - Berserk (Barcrest) (MPU4) (set 8) + Berserk (Barcrest) (MPU4) (BE3 0.1 K) m4berser__h - Berserk (Barcrest) (MPU4) (set 9) + Berserk (Barcrest) (MPU4) (BE3 0.1) m4berser__i - Berserk (Barcrest) (MPU4) (set 10) + Berserk (Barcrest) (MPU4) (BE3 0.1 Y) m4berser__j - Berserk (Barcrest) (MPU4) (set 11) + Berserk (Barcrest) (MPU4) (BE8 0.1 AD) m4berser__k - Berserk (Barcrest) (MPU4) (set 12) + Berserk (Barcrest) (MPU4) (BE8 0.1 B) m4berser__l - Berserk (Barcrest) (MPU4) (set 13) + Berserk (Barcrest) (MPU4) (BE8 0.1 CBD) m4berser__m - Berserk (Barcrest) (MPU4) (set 14) + Berserk (Barcrest) (MPU4) (BE8 0.1 BD) m4berser__n - Berserk (Barcrest) (MPU4) (set 15) + Berserk (Barcrest) (MPU4) (BE8 0.1 C) m4berser__o - Berserk (Barcrest) (MPU4) (set 16) + Berserk (Barcrest) (MPU4) (BE8 0.1 D) m4berser__p - Berserk (Barcrest) (MPU4) (set 17) + Berserk (Barcrest) (MPU4) (BE8 0.1 KD) m4berser__q - Berserk (Barcrest) (MPU4) (set 18) + Berserk (Barcrest) (MPU4) (BE8 0.1 YD) m4berser__r - Berserk (Barcrest) (MPU4) (set 19) + Berserk (Barcrest) (MPU4) (BE8 0.1 K) m4berser__s - Berserk (Barcrest) (MPU4) (set 20) + Berserk (Barcrest) (MPU4) (BE8 0.1) m4berser__t - Berserk (Barcrest) (MPU4) (set 21) + Berserk (Barcrest) (MPU4) (BE8 0.1 Y) m4berser__u - Berserk (Barcrest) (MPU4) (set 22) + Berserk (Barcrest) (MPU4) (BES 0.6 B) m4berser__v - Berserk (Barcrest) (MPU4) (set 23) + Berserk (Barcrest) (MPU4) (BES 0.6 C) m4berser__w - Berserk (Barcrest) (MPU4) (set 24) + Berserk (Barcrest) (MPU4) (BES 0.6 D) m4berser__x - Berserk (Barcrest) (MPU4) (set 25) + Berserk (Barcrest) (MPU4) (BES 0.6 KD) m4berser__y - Berserk (Barcrest) (MPU4) (set 26) + Berserk (Barcrest) (MPU4) (BES 0.6 YD) m4berser__z - Berserk (Barcrest) (MPU4) (set 27) + Berserk (Barcrest) (MPU4) (BES 0.6 K) m4bigapl @@ -44700,27 +54929,27 @@ m4bnkrol - Bank Roller Club (Barcrest) (MPU4) (set 1) + Bank Roller Club (Barcrest) (MPU4) (CBR 0.5) m4bnkrol__a - Bank Roller Club (Barcrest) (MPU4) (set 2) + Bank Roller Club (Barcrest) (MPU4) (BR3 0.1 D) m4bnkrol__b - Bank Roller Club (Barcrest) (MPU4) (set 3) + Bank Roller Club (Barcrest) (MPU4) (BR3 0.1 F) m4bnkrol__c - Bank Roller Club (Barcrest) (MPU4) (set 4) + Bank Roller Club (Barcrest) (MPU4) (BR3 0.1) m4bnkrol__d - Bank Roller Club (Barcrest) (MPU4) (set 5) + Bank Roller Club (Barcrest) (MPU4) (CBR 0.5 D) m4bnkrol__e - Bank Roller Club (Barcrest) (MPU4) (set 6) + Bank Roller Club (Barcrest) (MPU4) (CBR 0.5 F) m4bodymt @@ -44780,255 +55009,255 @@ m4buc - Buccaneer (Barcrest) (MPU4) (set 1) + Buccaneer (Barcrest) (MPU4) (BUG 0.4) m4buc__0 - Buccaneer (Barcrest) (MPU4) (set 28) + Buccaneer (Barcrest) (MPU4) (BUG 0.5) m4buc__1 - Buccaneer (Barcrest) (MPU4) (set 29) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 Y) m4buc__2 - Buccaneer (Barcrest) (MPU4) (set 30) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 DA) m4buc__3 - Buccaneer (Barcrest) (MPU4) (set 31) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 B) m4buc__4 - Buccaneer (Barcrest) (MPU4) (set 32) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 DB) m4buc__5 - Buccaneer (Barcrest) (MPU4) (set 33) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 D) m4buc__6 - Buccaneer (Barcrest) (MPU4) (set 34) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 DH) m4buc__7 - Buccaneer (Barcrest) (MPU4) (set 35) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 DK) m4buc__8 - Buccaneer (Barcrest) (MPU4) (set 36) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 DR) m4buc__9 - Buccaneer (Barcrest) (MPU4) (set 37) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 DY) m4buc__a - Buccaneer (Barcrest) (MPU4) (set 2) + Buccaneer (Barcrest) (MPU4) (BUG 0.4, hack) m4buc__aa - Buccaneer (Barcrest) (MPU4) (set 38) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 H) m4buc__ab - Buccaneer (Barcrest) (MPU4) (set 39) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 K) m4buc__ac - Buccaneer (Barcrest) (MPU4) (set 40) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 R) m4buc__ad - Buccaneer (Barcrest) (MPU4) (set 41) + Buccaneer (Barcrest) (MPU4) (BUS 0.1) m4buc__ae - Buccaneer (Barcrest) (MPU4) (set 42) + Buccaneer (Barcrest) (MPU4) (BUS 0.1 Y) m4buc__af - Buccaneer (Barcrest) (MPU4) (set 43) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 DA) m4buc__ag - Buccaneer (Barcrest) (MPU4) (set 44) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 B) m4buc__ah - Buccaneer (Barcrest) (MPU4) (set 45) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 DB) m4buc__ai - Buccaneer (Barcrest) (MPU4) (set 46) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 D) m4buc__aj - Buccaneer (Barcrest) (MPU4) (set 47) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 DH) m4buc__ak - Buccaneer (Barcrest) (MPU4) (set 48) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 DK) m4buc__al - Buccaneer (Barcrest) (MPU4) (set 49) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 DR) m4buc__am - Buccaneer (Barcrest) (MPU4) (set 50) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 DY) m4buc__an - Buccaneer (Barcrest) (MPU4) (set 51) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 H) m4buc__ao - Buccaneer (Barcrest) (MPU4) (set 52) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 K) m4buc__ap - Buccaneer (Barcrest) (MPU4) (set 53) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 R) m4buc__aq - Buccaneer (Barcrest) (MPU4) (set 54) + Buccaneer (Barcrest) (MPU4) (BUS 0.2) m4buc__ar - Buccaneer (Barcrest) (MPU4) (set 55) + Buccaneer (Barcrest) (MPU4) (BUS 0.2 Y) m4buc__as - Buccaneer (Barcrest) (MPU4) (set 56) + Buccaneer (Barcrest) (MPU4) (BR_ 1.0) m4buc__at - Buccaneer (Barcrest) (MPU4) (set 57) + Buccaneer (Barcrest) (MPU4) (BR_ 1.0 YD) m4buc__au - Buccaneer (Barcrest) (MPU4) (set 58) + Buccaneer (Barcrest) (MPU4) (BR_ 1.0 D) m4buc__av - Buccaneer (Barcrest) (MPU4) (set 59) + Buccaneer (Barcrest) (MPU4) (BR_ 1.0 Y) m4buc__aw - Buccaneer (Barcrest) (MPU4) (set 60) + Buccaneer (Barcrest) (MPU4) (BR_ 1.0 B) m4buc__ax - Buccaneer (Barcrest) (MPU4) (set 61) + Buccaneer (Barcrest) (MPU4) (BR_ 1.0 BAD) m4buc__ay - Buccaneer (Barcrest) (MPU4) (set 62) + Buccaneer (Barcrest) (MPU4) (BR_ 1.0 BR) m4buc__az - Buccaneer (Barcrest) (MPU4) (set 63) + Buccaneer (Barcrest) (MPU4) (BR_ 1.0 YDH) m4buc__b - Buccaneer (Barcrest) (MPU4) (set 3) + Buccaneer (Barcrest) (MPU4) (BUS 0.1, hack) m4buc__c - Buccaneer (Barcrest) (MPU4) (set 4) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 DA) m4buc__d - Buccaneer (Barcrest) (MPU4) (set 5) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 B) m4buc__e - Buccaneer (Barcrest) (MPU4) (set 6) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 DB) m4buc__f - Buccaneer (Barcrest) (MPU4) (set 7) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 D) m4buc__g - Buccaneer (Barcrest) (MPU4) (set 8) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 DH) m4buc__h - Buccaneer (Barcrest) (MPU4) (set 9) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 DK) m4buc__i - Buccaneer (Barcrest) (MPU4) (set 10) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 DR) m4buc__j - Buccaneer (Barcrest) (MPU4) (set 11) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 DY) m4buc__k - Buccaneer (Barcrest) (MPU4) (set 12) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 H) m4buc__l - Buccaneer (Barcrest) (MPU4) (set 13) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 K) m4buc__m - Buccaneer (Barcrest) (MPU4) (set 14) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 R) m4buc__n - Buccaneer (Barcrest) (MPU4) (set 15) + Buccaneer (Barcrest) (MPU4) (BR_ 1.0 K) m4buc__o - Buccaneer (Barcrest) (MPU4) (set 16) + Buccaneer (Barcrest) (MPU4) (BUG 0.4 Y) m4buc__p - Buccaneer (Barcrest) (MPU4) (set 17) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 DA) m4buc__q - Buccaneer (Barcrest) (MPU4) (set 18) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 B) m4buc__r - Buccaneer (Barcrest) (MPU4) (set 19) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 DB) m4buc__s - Buccaneer (Barcrest) (MPU4) (set 20) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 D) m4buc__t - Buccaneer (Barcrest) (MPU4) (set 21) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 DH) m4buc__u - Buccaneer (Barcrest) (MPU4) (set 22) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 DK) m4buc__v - Buccaneer (Barcrest) (MPU4) (set 23) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 DR) m4buc__w - Buccaneer (Barcrest) (MPU4) (set 24) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 DY) m4buc__x - Buccaneer (Barcrest) (MPU4) (set 25) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 H) m4buc__y - Buccaneer (Barcrest) (MPU4) (set 26) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 K) m4buc__z - Buccaneer (Barcrest) (MPU4) (set 27) + Buccaneer (Barcrest) (MPU4) (BUG 0.5 R) m4bucclb @@ -45068,7 +55297,7 @@ m4c9 - Cloud Nine (Barcrest) (MPU4) (set 1) + Cloud Nine (Barcrest) (MPU4) (C92 1.1) m4c999 @@ -45088,267 +55317,267 @@ m4c9__0 - Cloud Nine (Barcrest) (MPU4) (set 28) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2 B) m4c9__1 - Cloud Nine (Barcrest) (MPU4) (set 29) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2 BD) m4c9__2 - Cloud Nine (Barcrest) (MPU4) (set 30) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2 C) m4c9__3 - Cloud Nine (Barcrest) (MPU4) (set 31) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2 D) m4c9__4 - Cloud Nine (Barcrest) (MPU4) (set 32) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2 KD) m4c9__5 - Cloud Nine (Barcrest) (MPU4) (set 33) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2 RD) m4c9__6 - Cloud Nine (Barcrest) (MPU4) (set 34) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2 YD) m4c9__7 - Cloud Nine (Barcrest) (MPU4) (set 35) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2 K) m4c9__8 - Cloud Nine (Barcrest) (MPU4) (set 36) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2 R) m4c9__9 - Cloud Nine (Barcrest) (MPU4) (set 37) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2) m4c9__a - Cloud Nine (Barcrest) (MPU4) (set 2) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2) m4c9__a0 - Cloud Nine (Barcrest) (MPU4) (set 64) + Cloud Nine (Barcrest) (MPU4) (SC9 1.0, hack?, set 3) m4c9__a1 - Cloud Nine (Barcrest) (MPU4) (set 65) + Cloud Nine (Barcrest) (MPU4) (SC9 1.0, hack?, set 4) m4c9__a2 - Cloud Nine (Barcrest) (MPU4) (set 66) + Cloud Nine (Barcrest) (MPU4) (SC9 5.0) m4c9__a3 - Cloud Nine (Barcrest) (MPU4) (set 67) + Cloud Nine (Barcrest) (MPU4) (SC9 5.0 D) m4c9__aa - Cloud Nine (Barcrest) (MPU4) (set 38) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2 Y) m4c9__ab - Cloud Nine (Barcrest) (MPU4) (set 39) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2 AD) m4c9__ac - Cloud Nine (Barcrest) (MPU4) (set 40) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2 B) m4c9__ad - Cloud Nine (Barcrest) (MPU4) (set 41) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2 BD) m4c9__ae - Cloud Nine (Barcrest) (MPU4) (set 42) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2 C) m4c9__af - Cloud Nine (Barcrest) (MPU4) (set 43) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2 D) m4c9__ag - Cloud Nine (Barcrest) (MPU4) (set 44) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2 KD) m4c9__ah - Cloud Nine (Barcrest) (MPU4) (set 45) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2 RD m4c9__ai - Cloud Nine (Barcrest) (MPU4) (set 46) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2 YD) m4c9__aj - Cloud Nine (Barcrest) (MPU4) (set 47) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2 K) m4c9__ak - Cloud Nine (Barcrest) (MPU4) (set 48) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2 R) m4c9__al - Cloud Nine (Barcrest) (MPU4) (set 49) + Cloud Nine (Barcrest) (MPU4) (CT3 0.2 Y) m4c9__am - Cloud Nine (Barcrest) (MPU4) (set 50) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2 AD) m4c9__an - Cloud Nine (Barcrest) (MPU4) (set 51) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2 B) m4c9__ao - Cloud Nine (Barcrest) (MPU4) (set 52) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2 BD) m4c9__ap - Cloud Nine (Barcrest) (MPU4) (set 53) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2 C) m4c9__aq - Cloud Nine (Barcrest) (MPU4) (set 54) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2 D) m4c9__ar - Cloud Nine (Barcrest) (MPU4) (set 55) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2 KD) m4c9__as - Cloud Nine (Barcrest) (MPU4) (set 56) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2 RD) m4c9__at - Cloud Nine (Barcrest) (MPU4) (set 57) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2 YD) m4c9__au - Cloud Nine (Barcrest) (MPU4) (set 58) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2 K) m4c9__av - Cloud Nine (Barcrest) (MPU4) (set 59) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2 R) m4c9__aw - Cloud Nine (Barcrest) (MPU4) (set 60) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2) m4c9__ax - Cloud Nine (Barcrest) (MPU4) (set 61) + Cloud Nine (Barcrest) (MPU4) (CT5 0.2 Y) m4c9__ay - Cloud Nine (Barcrest) (MPU4) (set 62) + Cloud Nine (Barcrest) (MPU4) (SC9 1.0, hack?, set 1) m4c9__az - Cloud Nine (Barcrest) (MPU4) (set 63) + Cloud Nine (Barcrest) (MPU4) (SC9 1.0, hack?, set 2) m4c9__b - Cloud Nine (Barcrest) (MPU4) (set 3) + Cloud Nine (Barcrest) (MPU4) (C92 1.0 KD) m4c9__c - Cloud Nine (Barcrest) (MPU4) (set 4) + Cloud Nine (Barcrest) (MPU4) (C95 1.0 AD) m4c9__d - Cloud Nine (Barcrest) (MPU4) (set 5) + Cloud Nine (Barcrest) (MPU4) (C95 1.0 B) m4c9__e - Cloud Nine (Barcrest) (MPU4) (set 6) + Cloud Nine (Barcrest) (MPU4) (C95 1.0 BD) m4c9__f - Cloud Nine (Barcrest) (MPU4) (set 7) + Cloud Nine (Barcrest) (MPU4) (C95 1.0 D) m4c9__g - Cloud Nine (Barcrest) (MPU4) (set 8) + Cloud Nine (Barcrest) (MPU4) (C95 1.0 KD) m4c9__h - Cloud Nine (Barcrest) (MPU4) (set 9) + Cloud Nine (Barcrest) (MPU4) (C95 1.0 RD) m4c9__i - Cloud Nine (Barcrest) (MPU4) (set 10) + Cloud Nine (Barcrest) (MPU4) (C95 1.0 YD) m4c9__j - Cloud Nine (Barcrest) (MPU4) (set 11) + Cloud Nine (Barcrest) (MPU4) (C95 1.0 K) m4c9__k - Cloud Nine (Barcrest) (MPU4) (set 12) + Cloud Nine (Barcrest) (MPU4) (C95 1.0 R) m4c9__l - Cloud Nine (Barcrest) (MPU4) (set 13) + Cloud Nine (Barcrest) (MPU4) (C95 1.0) m4c9__m - Cloud Nine (Barcrest) (MPU4) (set 14) + Cloud Nine (Barcrest) (MPU4) (C95 1.0 Y) m4c9__n - Cloud Nine (Barcrest) (MPU4) (set 15) + Cloud Nine (Barcrest) (MPU4) (CLN 4.0 V) m4c9__o - Cloud Nine (Barcrest) (MPU4) (set 16) + Cloud Nine (Barcrest) (MPU4) (C92 1.1 AD) m4c9__p - Cloud Nine (Barcrest) (MPU4) (set 17) + Cloud Nine (Barcrest) (MPU4) (C92 1.1 B) m4c9__q - Cloud Nine (Barcrest) (MPU4) (set 18) + Cloud Nine (Barcrest) (MPU4) (C92 1.1 BD) m4c9__r - Cloud Nine (Barcrest) (MPU4) (set 19) + Cloud Nine (Barcrest) (MPU4) (C92 1.1 C) m4c9__s - Cloud Nine (Barcrest) (MPU4) (set 20) + Cloud Nine (Barcrest) (MPU4) (C92 1.1 D) m4c9__t - Cloud Nine (Barcrest) (MPU4) (set 21) + Cloud Nine (Barcrest) (MPU4) (C92 1.1 KD) m4c9__u - Cloud Nine (Barcrest) (MPU4) (set 22) + Cloud Nine (Barcrest) (MPU4) (C92 1.1 RD) m4c9__v - Cloud Nine (Barcrest) (MPU4) (set 23) + Cloud Nine (Barcrest) (MPU4) (C92 1.1 YD) m4c9__w - Cloud Nine (Barcrest) (MPU4) (set 24) + Cloud Nine (Barcrest) (MPU4) (C92 1.1 K) m4c9__x - Cloud Nine (Barcrest) (MPU4) (set 25) + Cloud Nine (Barcrest) (MPU4) (C92 1.1 R) m4c9__y - Cloud Nine (Barcrest) (MPU4) (set 26) + Cloud Nine (Barcrest) (MPU4) (C92 1.1 Y) m4c9__z - Cloud Nine (Barcrest) (MPU4) (set 27) + Cloud Nine (Barcrest) (MPU4) (CT2 0.2 AD) m4c9c @@ -45356,47 +55585,47 @@ m4calama - Calamari Club (Barcrest) (MPU4) (set 1) + Calamari Club (Barcrest) (MPU4) (CAC 0.3) m4calama__a - Calamari Club (Barcrest) (MPU4) (set 2) + Calamari Club (Barcrest) (MPU4) (CA3 0.1 D) m4calama__b - Calamari Club (Barcrest) (MPU4) (set 3) + Calamari Club (Barcrest) (MPU4) (CA3 0.1 F) m4calama__c - Calamari Club (Barcrest) (MPU4) (set 4) + Calamari Club (Barcrest) (MPU4) (CA3 0.1) m4calama__d - Calamari Club (Barcrest) (MPU4) (set 5) + Calamari Club (Barcrest) (MPU4) (CAC 0.3 D) m4calama__e - Calamari Club (Barcrest) (MPU4) (set 6) + Calamari Club (Barcrest) (MPU4) (CAC 0.3 F) m4calama__f - Calamari Club (Barcrest) (MPU4) (set 7) + Calamari Club (Barcrest) (MPU4) (BC3 0.2 F) m4calama__g - Calamari Club (Barcrest) (MPU4) (set 8) + Calamari Club (Barcrest) (MPU4) (BC3 0.2) m4calama__h - Calamari Club (Barcrest) (MPU4) (set 9) + Calamari Club (Barcrest) (MPU4) (BCA 0.2) m4calama__i - Calamari Club (Barcrest) (MPU4) (set 10) + Calamari Club (Barcrest) (MPU4) (BC3 0.2 D) m4calama__j - Calamari Club (Barcrest) (MPU4) (set 11) + Calamari Club (Barcrest) (MPU4) (BCA 0.4) m4calicl @@ -45444,223 +55673,223 @@ m4cashat - Cash Attack (Barcrest) (MPU4) (set 1) + Cash Attack (Barcrest) (MPU4) (CSA 1.2) m4cashat__0 - Cash Attack (Barcrest) (MPU4) (set 28) + Cash Attack (Barcrest) (MPU4) (CAA 2.3, hack, set 1) m4cashat__1 - Cash Attack (Barcrest) (MPU4) (set 29) + Cash Attack (Barcrest) (MPU4) (CAA 2.3, hack, set 2) m4cashat__2 - Cash Attack (Barcrest) (MPU4) (set 30) + Cash Attack (Barcrest) (MPU4) (CSA 1.2, hack) m4cashat__3 - Cash Attack (Barcrest) (MPU4) (set 31) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 DA) m4cashat__4 - Cash Attack (Barcrest) (MPU4) (set 32) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 B) m4cashat__5 - Cash Attack (Barcrest) (MPU4) (set 33) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 DB) m4cashat__6 - Cash Attack (Barcrest) (MPU4) (set 34) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 D) m4cashat__7 - Cash Attack (Barcrest) (MPU4) (set 35) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 DH) m4cashat__8 - Cash Attack (Barcrest) (MPU4) (set 36) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 DK) m4cashat__9 - Cash Attack (Barcrest) (MPU4) (set 37) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 DR) m4cashat__a - Cash Attack (Barcrest) (MPU4) (set 2) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 DA) m4cashat__aa - Cash Attack (Barcrest) (MPU4) (set 38) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 DY) m4cashat__ab - Cash Attack (Barcrest) (MPU4) (set 39) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 H) m4cashat__ac - Cash Attack (Barcrest) (MPU4) (set 40) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 K) m4cashat__ad - Cash Attack (Barcrest) (MPU4) (set 41) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 R) m4cashat__ae - Cash Attack (Barcrest) (MPU4) (set 42) + Cash Attack (Barcrest) (MPU4) (CSA 1.1) m4cashat__af - Cash Attack (Barcrest) (MPU4) (set 43) + Cash Attack (Barcrest) (MPU4) (CSA 1.1 Y) m4cashat__ag - Cash Attack (Barcrest) (MPU4) (set 44) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 DA) m4cashat__ah - Cash Attack (Barcrest) (MPU4) (set 45) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 B) m4cashat__ai - Cash Attack (Barcrest) (MPU4) (set 46) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 DB) m4cashat__aj - Cash Attack (Barcrest) (MPU4) (set 47) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 D) m4cashat__ak - Cash Attack (Barcrest) (MPU4) (set 48) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 DH) m4cashat__al - Cash Attack (Barcrest) (MPU4) (set 49) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 DK) m4cashat__am - Cash Attack (Barcrest) (MPU4) (set 50) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 DR) m4cashat__an - Cash Attack (Barcrest) (MPU4) (set 51) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 DY) m4cashat__ao - Cash Attack (Barcrest) (MPU4) (set 52) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 H) m4cashat__ap - Cash Attack (Barcrest) (MPU4) (set 53) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 K) m4cashat__aq - Cash Attack (Barcrest) (MPU4) (set 54) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 R) m4cashat__ar - Cash Attack (Barcrest) (MPU4) (set 55) + Cash Attack (Barcrest) (MPU4) (CSA 1.2 Y) m4cashat__b - Cash Attack (Barcrest) (MPU4) (set 3) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 B) m4cashat__c - Cash Attack (Barcrest) (MPU4) (set 4) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 DB) m4cashat__d - Cash Attack (Barcrest) (MPU4) (set 5) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 D) m4cashat__e - Cash Attack (Barcrest) (MPU4) (set 6) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 DH) m4cashat__f - Cash Attack (Barcrest) (MPU4) (set 7) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 DK) m4cashat__g - Cash Attack (Barcrest) (MPU4) (set 8) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 DR) m4cashat__h - Cash Attack (Barcrest) (MPU4) (set 9) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 DY) m4cashat__i - Cash Attack (Barcrest) (MPU4) (set 10) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 H) m4cashat__j - Cash Attack (Barcrest) (MPU4) (set 11) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 K) m4cashat__k - Cash Attack (Barcrest) (MPU4) (set 12) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 R) m4cashat__l - Cash Attack (Barcrest) (MPU4) (set 13) + Cash Attack (Barcrest) (MPU4) (CAA 2.2) m4cashat__m - Cash Attack (Barcrest) (MPU4) (set 14) + Cash Attack (Barcrest) (MPU4) (CAA 2.2 Y) m4cashat__n - Cash Attack (Barcrest) (MPU4) (set 15) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 DA) m4cashat__o - Cash Attack (Barcrest) (MPU4) (set 16) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 B) m4cashat__p - Cash Attack (Barcrest) (MPU4) (set 17) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 DB) m4cashat__q - Cash Attack (Barcrest) (MPU4) (set 18) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 D) m4cashat__r - Cash Attack (Barcrest) (MPU4) (set 19) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 DH) m4cashat__s - Cash Attack (Barcrest) (MPU4) (set 20) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 DK) m4cashat__t - Cash Attack (Barcrest) (MPU4) (set 21) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 DR) m4cashat__u - Cash Attack (Barcrest) (MPU4) (set 22) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 DY) m4cashat__v - Cash Attack (Barcrest) (MPU4) (set 23) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 H) m4cashat__w - Cash Attack (Barcrest) (MPU4) (set 24) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 K) m4cashat__x - Cash Attack (Barcrest) (MPU4) (set 25) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 R) m4cashat__y - Cash Attack (Barcrest) (MPU4) (set 26) + Cash Attack (Barcrest) (MPU4) (CAA 2.3) m4cashat__z - Cash Attack (Barcrest) (MPU4) (set 27) + Cash Attack (Barcrest) (MPU4) (CAA 2.3 Y) m4cashcn @@ -45688,539 +55917,539 @@ m4cashln - Cash Lines (Barcrest) (MPU4) (set 1) + Cash Lines (Barcrest) (MPU4) (CLS 0.4) m4cashln__0 - Cash Lines (Barcrest) (MPU4) (set 28) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 R) m4cashln__1 - Cash Lines (Barcrest) (MPU4) (set 29) + Cash Lines (Barcrest) (MPU4) (CLI 1.2) m4cashln__2 - Cash Lines (Barcrest) (MPU4) (set 30) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 Y) m4cashln__3 - Cash Lines (Barcrest) (MPU4) (set 31) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 AD) m4cashln__4 - Cash Lines (Barcrest) (MPU4) (set 32) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 B) m4cashln__5 - Cash Lines (Barcrest) (MPU4) (set 33) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 BD) m4cashln__6 - Cash Lines (Barcrest) (MPU4) (set 34) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 C) m4cashln__7 - Cash Lines (Barcrest) (MPU4) (set 35) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 D) m4cashln__8 - Cash Lines (Barcrest) (MPU4) (set 36) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 DH) m4cashln__9 - Cash Lines (Barcrest) (MPU4) (set 37) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 KD) m4cashln__a - Cash Lines (Barcrest) (MPU4) (set 2) + Cash Lines (Barcrest) (MPU4) (CLI 1.1, hack) m4cashln__a0 - Cash Lines (Barcrest) (MPU4) (set 64) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 RD) m4cashln__a1 - Cash Lines (Barcrest) (MPU4) (set 65) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 YD) m4cashln__a2 - Cash Lines (Barcrest) (MPU4) (set 66) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 H) m4cashln__a3 - Cash Lines (Barcrest) (MPU4) (set 67) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 K) m4cashln__a4 - Cash Lines (Barcrest) (MPU4) (set 68) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 R) m4cashln__a5 - Cash Lines (Barcrest) (MPU4) (set 69) + Cash Lines (Barcrest) (MPU4) (NCC 1.0) m4cashln__a6 - Cash Lines (Barcrest) (MPU4) (set 70) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 Y) m4cashln__a7 - Cash Lines (Barcrest) (MPU4) (set 71) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 AD) m4cashln__a8 - Cash Lines (Barcrest) (MPU4) (set 72) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 B) m4cashln__a9 - Cash Lines (Barcrest) (MPU4) (set 73) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 BD) m4cashln__aa - Cash Lines (Barcrest) (MPU4) (set 38) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 RD) m4cashln__ab - Cash Lines (Barcrest) (MPU4) (set 39) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 YD) m4cashln__ac - Cash Lines (Barcrest) (MPU4) (set 40) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 H) m4cashln__ad - Cash Lines (Barcrest) (MPU4) (set 41) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 K) m4cashln__ae - Cash Lines (Barcrest) (MPU4) (set 42) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 R) m4cashln__af - Cash Lines (Barcrest) (MPU4) (set 43) + Cash Lines (Barcrest) (MPU4) (CLS 0.3) m4cashln__ag - Cash Lines (Barcrest) (MPU4) (set 44) + Cash Lines (Barcrest) (MPU4) (CLS 0.3 Y) m4cashln__ah - Cash Lines (Barcrest) (MPU4) (set 45) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 AD) m4cashln__ai - Cash Lines (Barcrest) (MPU4) (set 46) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 B) m4cashln__aj - Cash Lines (Barcrest) (MPU4) (set 47) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 BD) m4cashln__ak - Cash Lines (Barcrest) (MPU4) (set 48) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 C) m4cashln__al - Cash Lines (Barcrest) (MPU4) (set 49) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 D) m4cashln__am - Cash Lines (Barcrest) (MPU4) (set 50) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 DH) m4cashln__an - Cash Lines (Barcrest) (MPU4) (set 51) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 KD) m4cashln__ao - Cash Lines (Barcrest) (MPU4) (set 52) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 RD) m4cashln__ap - Cash Lines (Barcrest) (MPU4) (set 53) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 YD) m4cashln__aq - Cash Lines (Barcrest) (MPU4) (set 54) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 H) m4cashln__ar - Cash Lines (Barcrest) (MPU4) (set 55) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 K) m4cashln__as - Cash Lines (Barcrest) (MPU4) (set 56) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 R) m4cashln__at - Cash Lines (Barcrest) (MPU4) (set 57) + Cash Lines (Barcrest) (MPU4) (CLS 0.4 Y) m4cashln__au - Cash Lines (Barcrest) (MPU4) (set 58) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 AD) m4cashln__av - Cash Lines (Barcrest) (MPU4) (set 59) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 B) m4cashln__aw - Cash Lines (Barcrest) (MPU4) (set 60) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 BD) m4cashln__ax - Cash Lines (Barcrest) (MPU4) (set 61) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 D) m4cashln__ay - Cash Lines (Barcrest) (MPU4) (set 62) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 DH) m4cashln__az - Cash Lines (Barcrest) (MPU4) (set 63) + Cash Lines (Barcrest) (MPU4) (NCC 1.0 KD) m4cashln__b - Cash Lines (Barcrest) (MPU4) (set 3) + Cash Lines (Barcrest) (MPU4) (CLS 0.3, hack) m4cashln__ba - Cash Lines (Barcrest) (MPU4) (set 74) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 D) m4cashln__bb - Cash Lines (Barcrest) (MPU4) (set 75) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 DH) m4cashln__bc - Cash Lines (Barcrest) (MPU4) (set 76) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 KD) m4cashln__bd - Cash Lines (Barcrest) (MPU4) (set 77) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 RD) m4cashln__be - Cash Lines (Barcrest) (MPU4) (set 78) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 YD) m4cashln__bf - Cash Lines (Barcrest) (MPU4) (set 79) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 H) m4cashln__bg - Cash Lines (Barcrest) (MPU4) (set 80) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 K) m4cashln__bh - Cash Lines (Barcrest) (MPU4) (set 81) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 R) m4cashln__bi - Cash Lines (Barcrest) (MPU4) (set 82) + Cash Lines (Barcrest) (MPU4) (NCL 1.1) m4cashln__bj - Cash Lines (Barcrest) (MPU4) (set 83) + Cash Lines (Barcrest) (MPU4) (NCL 1.1 Y) m4cashln__c - Cash Lines (Barcrest) (MPU4) (set 4) + Cash Lines (Barcrest) (MPU4) (CLI 1.0) m4cashln__d - Cash Lines (Barcrest) (MPU4) (set 5) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 AD) m4cashln__e - Cash Lines (Barcrest) (MPU4) (set 6) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 B) m4cashln__f - Cash Lines (Barcrest) (MPU4) (set 7) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 BD) m4cashln__g - Cash Lines (Barcrest) (MPU4) (set 8) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 D) m4cashln__h - Cash Lines (Barcrest) (MPU4) (set 9) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 DH) m4cashln__i - Cash Lines (Barcrest) (MPU4) (set 10) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 KD) m4cashln__j - Cash Lines (Barcrest) (MPU4) (set 11) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 RD) m4cashln__k - Cash Lines (Barcrest) (MPU4) (set 12) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 YD) m4cashln__l - Cash Lines (Barcrest) (MPU4) (set 13) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 H) m4cashln__m - Cash Lines (Barcrest) (MPU4) (set 14) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 K) m4cashln__n - Cash Lines (Barcrest) (MPU4) (set 15) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 R) m4cashln__o - Cash Lines (Barcrest) (MPU4) (set 16) + Cash Lines (Barcrest) (MPU4) (CLI 1.1) m4cashln__p - Cash Lines (Barcrest) (MPU4) (set 17) + Cash Lines (Barcrest) (MPU4) (CLI 1.1 Y) m4cashln__q - Cash Lines (Barcrest) (MPU4) (set 18) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 AD) m4cashln__r - Cash Lines (Barcrest) (MPU4) (set 19) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 B) m4cashln__s - Cash Lines (Barcrest) (MPU4) (set 20) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 BD) m4cashln__t - Cash Lines (Barcrest) (MPU4) (set 21) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 D) m4cashln__u - Cash Lines (Barcrest) (MPU4) (set 22) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 DH) m4cashln__v - Cash Lines (Barcrest) (MPU4) (set 23) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 KD) m4cashln__w - Cash Lines (Barcrest) (MPU4) (set 24) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 RD) m4cashln__x - Cash Lines (Barcrest) (MPU4) (set 25) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 YD) m4cashln__y - Cash Lines (Barcrest) (MPU4) (set 26) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 H) m4cashln__z - Cash Lines (Barcrest) (MPU4) (set 27) + Cash Lines (Barcrest) (MPU4) (CLI 1.2 K) m4cashmn - Cash Machine (Barcrest) (MPU4) (set 1) + Cash Machine (Barcrest) (MPU4) (CMA 0.7) m4cashmn__0 - Cash Machine (Barcrest) (MPU4) (set 28) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 BD) m4cashmn__1 - Cash Machine (Barcrest) (MPU4) (set 29) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 C) m4cashmn__2 - Cash Machine (Barcrest) (MPU4) (set 30) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 D) m4cashmn__3 - Cash Machine (Barcrest) (MPU4) (set 31) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 KD) m4cashmn__4 - Cash Machine (Barcrest) (MPU4) (set 32) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 RD) m4cashmn__5 - Cash Machine (Barcrest) (MPU4) (set 33) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 YD) m4cashmn__6 - Cash Machine (Barcrest) (MPU4) (set 34) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 K) m4cashmn__7 - Cash Machine (Barcrest) (MPU4) (set 35) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 R) m4cashmn__8 - Cash Machine (Barcrest) (MPU4) (set 36) + Cash Machine (Barcrest) (MPU4) (CMH 0.6) m4cashmn__9 - Cash Machine (Barcrest) (MPU4) (set 37) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 Y) m4cashmn__a - Cash Machine (Barcrest) (MPU4) (set 2) + Cash Machine (Barcrest) (MPU4) (CMH 0.2) m4cashmn__aa - Cash Machine (Barcrest) (MPU4) (set 38) + Cash Machine (Barcrest) (MPU4) (CMH 0.7 AD) m4cashmn__ab - Cash Machine (Barcrest) (MPU4) (set 39) + Cash Machine (Barcrest) (MPU4) (CMH 0.7 B) m4cashmn__ac - Cash Machine (Barcrest) (MPU4) (set 40) + Cash Machine (Barcrest) (MPU4) (CMH 0.7 BD) m4cashmn__ad - Cash Machine (Barcrest) (MPU4) (set 41) + Cash Machine (Barcrest) (MPU4) (CMH 0.7 C) m4cashmn__ae - Cash Machine (Barcrest) (MPU4) (set 42) + Cash Machine (Barcrest) (MPU4) (CMH 0.7 D) m4cashmn__af - Cash Machine (Barcrest) (MPU4) (set 43) + Cash Machine (Barcrest) (MPU4) (CMH 0.7 KD) m4cashmn__ag - Cash Machine (Barcrest) (MPU4) (set 44) + Cash Machine (Barcrest) (MPU4) (CMH 0.7 RD) m4cashmn__ah - Cash Machine (Barcrest) (MPU4) (set 45) + Cash Machine (Barcrest) (MPU4) (CMH 0.7 YD) m4cashmn__ai - Cash Machine (Barcrest) (MPU4) (set 46) + Cash Machine (Barcrest) (MPU4) (CMH 0.7 K) m4cashmn__aj - Cash Machine (Barcrest) (MPU4) (set 47) + Cash Machine (Barcrest) (MPU4) (CMH 0.7 R) m4cashmn__ak - Cash Machine (Barcrest) (MPU4) (set 48) + Cash Machine (Barcrest) (MPU4) (CMH 0.7) m4cashmn__al - Cash Machine (Barcrest) (MPU4) (set 49) + Cash Machine (Barcrest) (MPU4) (CMH 0.7 Y) m4cashmn__b - Cash Machine (Barcrest) (MPU4) (set 3) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 AD) m4cashmn__c - Cash Machine (Barcrest) (MPU4) (set 4) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 B) m4cashmn__d - Cash Machine (Barcrest) (MPU4) (set 5) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 BD) m4cashmn__e - Cash Machine (Barcrest) (MPU4) (set 6) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 C) m4cashmn__f - Cash Machine (Barcrest) (MPU4) (set 7) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 D) m4cashmn__g - Cash Machine (Barcrest) (MPU4) (set 8) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 KD) m4cashmn__h - Cash Machine (Barcrest) (MPU4) (set 9) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 RD) m4cashmn__i - Cash Machine (Barcrest) (MPU4) (set 10) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 YD) m4cashmn__j - Cash Machine (Barcrest) (MPU4) (set 11) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 K) m4cashmn__k - Cash Machine (Barcrest) (MPU4) (set 12) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 R) m4cashmn__l - Cash Machine (Barcrest) (MPU4) (set 13) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 Y) m4cashmn__m - Cash Machine (Barcrest) (MPU4) (set 14) + Cash Machine (Barcrest) (MPU4) (CMA 0.8 AD) m4cashmn__n - Cash Machine (Barcrest) (MPU4) (set 15) + Cash Machine (Barcrest) (MPU4) (CMA 0.8 B) m4cashmn__o - Cash Machine (Barcrest) (MPU4) (set 16) + Cash Machine (Barcrest) (MPU4) (CMA 0.8 BD) m4cashmn__p - Cash Machine (Barcrest) (MPU4) (set 17) + Cash Machine (Barcrest) (MPU4) (CMA 0.8 C) m4cashmn__q - Cash Machine (Barcrest) (MPU4) (set 18) + Cash Machine (Barcrest) (MPU4) (CMA 0.8 D) m4cashmn__r - Cash Machine (Barcrest) (MPU4) (set 19) + Cash Machine (Barcrest) (MPU4) (CMA 0.8 KD) m4cashmn__s - Cash Machine (Barcrest) (MPU4) (set 20) + Cash Machine (Barcrest) (MPU4) (CMA 0.8 RD) m4cashmn__t - Cash Machine (Barcrest) (MPU4) (set 21) + Cash Machine (Barcrest) (MPU4) (CMA 0.8 YD) m4cashmn__u - Cash Machine (Barcrest) (MPU4) (set 22) + Cash Machine (Barcrest) (MPU4) (CMA 0.8 K) m4cashmn__v - Cash Machine (Barcrest) (MPU4) (set 23) + Cash Machine (Barcrest) (MPU4) (CMA 0.8 R) m4cashmn__w - Cash Machine (Barcrest) (MPU4) (set 24) + Cash Machine (Barcrest) (MPU4) (CMA 0.8) m4cashmn__x - Cash Machine (Barcrest) (MPU4) (set 25) + Cash Machine (Barcrest) (MPU4) (CMA 0.8 Y) m4cashmn__y - Cash Machine (Barcrest) (MPU4) (set 26) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 AD) m4cashmn__z - Cash Machine (Barcrest) (MPU4) (set 27) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 B) m4cashmn__za - Cash Machine (Barcrest) (MPU4) (CMH 0.6Y, hack?) + Cash Machine (Barcrest) (MPU4) (CMH 0.6 Y, hack?) m4cashmn__zb - Cash Machine (Barcrest) (MPU4) (CMA 0.7C, hack?) + Cash Machine (Barcrest) (MPU4) (CMA 0.7 C, hack?) m4cashmx @@ -46354,6 +56583,10 @@ m4chaseif Chase Invaders (Barcrest) (MPU4) (set 7) + + m4chaseig + Chase Invaders (Barcrest) (MPU4) (set 8) + m4cheryo Cherryo (Barcrest) (DCH, Dutch) (MPU4) @@ -46840,95 +57073,95 @@ m4coscas - Cosmic Casino (Barcrest) (MPU4) (set 1) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0) m4coscas__a - Cosmic Casino (Barcrest) (MPU4) (set 2) + Cosmic Casino (Barcrest) (MPU4) (CC__6.0, hack) m4coscas__b - Cosmic Casino (Barcrest) (MPU4) (set 3) + Cosmic Casino (Barcrest) (MPU4) (CC__7.0 Y) m4coscas__c - Cosmic Casino (Barcrest) (MPU4) (set 4) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0, hack) m4coscas__d - Cosmic Casino (Barcrest) (MPU4) (set 5) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 C) m4coscas__e - Cosmic Casino (Barcrest) (MPU4) (set 6) + Cosmic Casino (Barcrest) (MPU4) (CC__7.0) m4coscas__f - Cosmic Casino (Barcrest) (MPU4) (set 7) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 YD) m4coscas__g - Cosmic Casino (Barcrest) (MPU4) (set 8) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 YCD) m4coscas__h - Cosmic Casino (Barcrest) (MPU4) (set 9) + Cosmic Casino (Barcrest) (MPU4) (CC__7.0 YD) m4coscas__i - Cosmic Casino (Barcrest) (MPU4) (set 10) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 D) m4coscas__j - Cosmic Casino (Barcrest) (MPU4) (set 11) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 CD) m4coscas__k - Cosmic Casino (Barcrest) (MPU4) (set 12) + Cosmic Casino (Barcrest) (MPU4) (CC__7.0 D) m4coscas__l - Cosmic Casino (Barcrest) (MPU4) (set 13) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 Y) m4coscas__m - Cosmic Casino (Barcrest) (MPU4) (set 14) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 YC) m4coscas__n - Cosmic Casino (Barcrest) (MPU4) (set 15) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 K) m4coscas__o - Cosmic Casino (Barcrest) (MPU4) (set 16) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 CK) m4coscas__p - Cosmic Casino (Barcrest) (MPU4) (set 17) + Cosmic Casino (Barcrest) (MPU4) (CC__7.0 K) m4coscas__q - Cosmic Casino (Barcrest) (MPU4) (set 18) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 B) m4coscas__r - Cosmic Casino (Barcrest) (MPU4) (set 19) + Cosmic Casino (Barcrest) (MPU4) (CC__7.0 B) m4coscas__s - Cosmic Casino (Barcrest) (MPU4) (set 20) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 BCAD) m4coscas__t - Cosmic Casino (Barcrest) (MPU4) (set 21) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 BCR) m4coscas__u - Cosmic Casino (Barcrest) (MPU4) (set 22) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 YDH) m4coscas__v - Cosmic Casino (Barcrest) (MPU4) (set 23) + Cosmic Casino (Barcrest) (MPU4) (CC__3.0 YCDH) m4cpfinl @@ -46980,207 +57213,207 @@ m4cpycat - Copy Cat (Barcrest) (MPU4) (set 1) + Copy Cat (Barcrest) (MPU4) (CO 1.1 YD) m4cpycat__0 - Copy Cat (Barcrest) (MPU4) (set 28) + Copy Cat (Barcrest) (MPU4) (CO 4.0 YD) m4cpycat__1 - Copy Cat (Barcrest) (MPU4) (set 29) + Copy Cat (Barcrest) (MPU4) (CO 2.4 D) m4cpycat__2 - Copy Cat (Barcrest) (MPU4) (set 30) + Copy Cat (Barcrest) (MPU4) (CO 4.0 D) m4cpycat__3 - Copy Cat (Barcrest) (MPU4) (set 31) + Copy Cat (Barcrest) (MPU4) (CO 4.0 Y) m4cpycat__4 - Copy Cat (Barcrest) (MPU4) (set 32) + Copy Cat (Barcrest) (MPU4) (CO 2.4 K) m4cpycat__5 - Copy Cat (Barcrest) (MPU4) (set 33) + Copy Cat (Barcrest) (MPU4) (CO 2.4 B) m4cpycat__6 - Copy Cat (Barcrest) (MPU4) (set 34) + Copy Cat (Barcrest) (MPU4) (CO 2.4 BD) m4cpycat__7 - Copy Cat (Barcrest) (MPU4) (set 35) + Copy Cat (Barcrest) (MPU4) (CO 2.4 BAD) m4cpycat__8 - Copy Cat (Barcrest) (MPU4) (set 36) + Copy Cat (Barcrest) (MPU4) (CO 2.4 BR) m4cpycat__a - Copy Cat (Barcrest) (MPU4) (set 2) + Copy Cat (Barcrest) (MPU4) (CO 1.1 D) m4cpycat__b - Copy Cat (Barcrest) (MPU4) (set 3) + Copy Cat (Barcrest) (MPU4) (CO 1.1 Y) m4cpycat__c - Copy Cat (Barcrest) (MPU4) (set 4) + Copy Cat (Barcrest) (MPU4) (CO 1.1 K) m4cpycat__d - Copy Cat (Barcrest) (MPU4) (set 5) + Copy Cat (Barcrest) (MPU4) (CO 1.1 B) m4cpycat__e - Copy Cat (Barcrest) (MPU4) (set 6) + Copy Cat (Barcrest) (MPU4) (CO 1.1 BAD) m4cpycat__f - Copy Cat (Barcrest) (MPU4) (set 7) + Copy Cat (Barcrest) (MPU4) (CO 4.1 BAD) m4cpycat__g - Copy Cat (Barcrest) (MPU4) (set 8) + Copy Cat (Barcrest) (MPU4) (CO 1.1 BR) m4cpycat__h - Copy Cat (Barcrest) (MPU4) (set 9) + Copy Cat (Barcrest) (MPU4) (CO 1.3 YD) m4cpycat__i - Copy Cat (Barcrest) (MPU4) (set 10) + Copy Cat (Barcrest) (MPU4) (CO 2.0 YD) m4cpycat__j - Copy Cat (Barcrest) (MPU4) (set 11) + Copy Cat (Barcrest) (MPU4) (CO 3.0 YD) m4cpycat__k - Copy Cat (Barcrest) (MPU4) (set 12) + Copy Cat (Barcrest) (MPU4) (CO 1.3 D) m4cpycat__l - Copy Cat (Barcrest) (MPU4) (set 13) + Copy Cat (Barcrest) (MPU4) (CO 2.0 D) m4cpycat__m - Copy Cat (Barcrest) (MPU4) (set 14) + Copy Cat (Barcrest) (MPU4) (CO 1.3 Y) m4cpycat__n - Copy Cat (Barcrest) (MPU4) (set 15) + Copy Cat (Barcrest) (MPU4) (CO 2.0 Y) m4cpycat__o - Copy Cat (Barcrest) (MPU4) (set 16) + Copy Cat (Barcrest) (MPU4) (CO 3.0 Y) m4cpycat__p - Copy Cat (Barcrest) (MPU4) (set 17) + Copy Cat (Barcrest) (MPU4) (CO 1.3 K) m4cpycat__q - Copy Cat (Barcrest) (MPU4) (set 18) + Copy Cat (Barcrest) (MPU4) (CO 2.0 K) m4cpycat__r - Copy Cat (Barcrest) (MPU4) (set 19) + Copy Cat (Barcrest) (MPU4) (CO 3.0 K) m4cpycat__s - Copy Cat (Barcrest) (MPU4) (set 20) + Copy Cat (Barcrest) (MPU4) (CO 1.3 B) m4cpycat__t - Copy Cat (Barcrest) (MPU4) (set 21) + Copy Cat (Barcrest) (MPU4) (CO 2.0 B) m4cpycat__u - Copy Cat (Barcrest) (MPU4) (set 22) + Copy Cat (Barcrest) (MPU4) (CO 1.3 BAD) m4cpycat__v - Copy Cat (Barcrest) (MPU4) (set 23) + Copy Cat (Barcrest) (MPU4) (CO 2.0 BAD) m4cpycat__w - Copy Cat (Barcrest) (MPU4) (set 24) + Copy Cat (Barcrest) (MPU4) (CO 3.0 BAD) m4cpycat__x - Copy Cat (Barcrest) (MPU4) (set 25) + Copy Cat (Barcrest) (MPU4) (CO 1.3 BR) m4cpycat__y - Copy Cat (Barcrest) (MPU4) (set 26) + Copy Cat (Barcrest) (MPU4) (CO 2.0 BR) m4cpycat__z - Copy Cat (Barcrest) (MPU4) (set 27) + Copy Cat (Barcrest) (MPU4) (CO 2.4 YD) m4crdome - Crystal Dome (Barcrest) (MPU4) (set 1) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2) m4crdome__a - Crystal Dome (Barcrest) (MPU4) (set 2) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2 C) m4crdome__b - Crystal Dome (Barcrest) (MPU4) (set 3) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2 AD) m4crdome__c - Crystal Dome (Barcrest) (MPU4) (set 4) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2 B) m4crdome__d - Crystal Dome (Barcrest) (MPU4) (set 5) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2 BD) m4crdome__e - Crystal Dome (Barcrest) (MPU4) (set 6) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2 D) m4crdome__f - Crystal Dome (Barcrest) (MPU4) (set 7) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2 KD) m4crdome__g - Crystal Dome (Barcrest) (MPU4) (set 8) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2 RD) m4crdome__h - Crystal Dome (Barcrest) (MPU4) (set 9) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2 YD) m4crdome__i - Crystal Dome (Barcrest) (MPU4) (set 10) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2 R) m4crdome__j - Crystal Dome (Barcrest) (MPU4) (set 11) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2 K) m4crdome__k - Crystal Dome (Barcrest) (MPU4) (set 12) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2 Y) m4crdome__l - Crystal Dome (Barcrest) (MPU4) (set 13) + Crystal Dome (Barcrest) (MPU4) (CD2 1.2, hack) m4crdome__m - Crystal Dome (Barcrest) (MPU4) (set 14) + Crystal Dome (Barcrest) (MPU4) (CD2 1.0 C) m4crdome__n - Crystal Dome (Barcrest) (MPU4) (set 15) + Crystal Dome (Barcrest) (MPU4) (CD2 0.2 C) m4crfire @@ -47240,39 +57473,39 @@ m4crmaze__d - Crystal Maze (Barcrest) (MPU4) (CRM 3.0AD) + Crystal Maze (Barcrest) (MPU4) (CRM 3.0 AD) m4crmaze__e - Crystal Maze (Barcrest) (MPU4) (CRM 3.0B) + Crystal Maze (Barcrest) (MPU4) (CRM 3.0 B) m4crmaze__f - Crystal Maze (Barcrest) (MPU4) (CRM 3.0BD) + Crystal Maze (Barcrest) (MPU4) (CRM 3.0 BD) m4crmaze__g - Crystal Maze (Barcrest) (MPU4) (CRM 3.0C) + Crystal Maze (Barcrest) (MPU4) (CRM 3.0 C) m4crmaze__h - Crystal Maze (Barcrest) (MPU4) (CRM 3.0D) + Crystal Maze (Barcrest) (MPU4) (CRM 3.0 D) m4crmaze__i - Crystal Maze (Barcrest) (MPU4) (CRM 3.0KD) + Crystal Maze (Barcrest) (MPU4) (CRM 3.0 KD) m4crmaze__j - Crystal Maze (Barcrest) (MPU4) (CRM 3.0YD) + Crystal Maze (Barcrest) (MPU4) (CRM 3.0 YD) m4crmaze__k - Crystal Maze (Barcrest) (MPU4) (CRM 3.0K) + Crystal Maze (Barcrest) (MPU4) (CRM 3.0 K) m4crmaze__l - Crystal Maze (Barcrest) (MPU4) (CRM 3.0Y) + Crystal Maze (Barcrest) (MPU4) (CRM 3.0 Y) m4crmaze__m @@ -47392,23 +57625,23 @@ m4cshenc - Cash Encounters (Barcrest) (MPU4) (set 1) + Cash Encounters (Barcrest) (MPU4) (CA_ 5.0 C) m4cshenc__a - Cash Encounters (Barcrest) (MPU4) (set 2) + Cash Encounters (Barcrest) (MPU4) (CA_ 5.0 YCD) m4cshenc__b - Cash Encounters (Barcrest) (MPU4) (set 3) + Cash Encounters (Barcrest) (MPU4) (CA_ 5.0 CD) m4cshenc__c - Cash Encounters (Barcrest) (MPU4) (set 4) + Cash Encounters (Barcrest) (MPU4) (CA_ 5.0 CK) m4cshenc__d - Cash Encounters (Barcrest) (MPU4) (set 5) + Cash Encounters (Barcrest) (MPU4) (CA_ 5.0 BC) m4cshino @@ -47656,19 +57889,19 @@ m4dbldm - Double Diamond Club (Barcrest) (MPU4) (set 1) + Double Diamond Club (Barcrest) (MPU4) (CDD 0.5) m4dbldm__a - Double Diamond Club (Barcrest) (MPU4) (set 2) + Double Diamond Club (Barcrest) (MPU4) (CDD 0.5 D) m4dbldm__b - Double Diamond Club (Barcrest) (MPU4) (set 3) + Double Diamond Club (Barcrest) (MPU4) (CDD 0.5 F) m4dbldm__c - Double Diamond Club (Barcrest) (MPU4) (set 4) + Double Diamond Club (Barcrest) (MPU4) (CDD 0.1 TD) m4dblup @@ -47776,39 +58009,39 @@ m4denmend5 - Dennis The Menace (Barcrest) (MPU4) (DM5 0.1)) + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1) m4denmend5ad - Dennis The Menace (Barcrest) (MPU4) (DM5 0.1AD) + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1 AD) m4denmend5b - Dennis The Menace (Barcrest) (MPU4) (DM5 0.1B) + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1 B) m4denmend5bd - Dennis The Menace (Barcrest) (MPU4) (DM5 0.1BD) + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1 BD) m4denmend5d - Dennis The Menace (Barcrest) (MPU4) (DM5 0.1D) + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1 D) m4denmend5k - Dennis The Menace (Barcrest) (MPU4) (DM5 0.1K) + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1 K) m4denmend5kd - Dennis The Menace (Barcrest) (MPU4) (DM5 0.1KD) + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1 KD) m4denmend5y - Dennis The Menace (Barcrest) (MPU4) (DM5 0.1Y) + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1 Y) m4denmend5yd - Dennis The Menace (Barcrest) (MPU4) (DM5 0.1YD) + Dennis The Menace (Barcrest) (MPU4) (DM5 0.1 YD) m4denmend8 @@ -47816,43 +58049,43 @@ m4denmend8c - Dennis The Menace (Barcrest) (MPU4) (DM8 0.1C) + Dennis The Menace (Barcrest) (MPU4) (DM8 0.1 C) m4denmend8d - Dennis The Menace (Barcrest) (MPU4) (DM8 0.1D) + Dennis The Menace (Barcrest) (MPU4) (DM8 0.1 D) m4denmend8k - Dennis The Menace (Barcrest) (MPU4) (DM8 0.1K) + Dennis The Menace (Barcrest) (MPU4) (DM8 0.1 K) m4denmend8y - Dennis The Menace (Barcrest) (MPU4) (DM8 0.1Y) + Dennis The Menace (Barcrest) (MPU4) (DM8 0.1 Y) m4denmend8yd - Dennis The Menace (Barcrest) (MPU4) (DM8 0.1YD) + Dennis The Menace (Barcrest) (MPU4) (DM8 0.1 YD) m4denmendnb - Dennis The Menace (Barcrest) (MPU4) (DEN 1.2B) + Dennis The Menace (Barcrest) (MPU4) (DEN 1.2 B) m4denmendnc - Dennis The Menace (Barcrest) (MPU4) (DEN 1.2C) + Dennis The Menace (Barcrest) (MPU4) (DEN 1.2 C) m4denmendnd - Dennis The Menace (Barcrest) (MPU4) (DEN 1.2D) + Dennis The Menace (Barcrest) (MPU4) (DEN 1.2 D) m4denmendnk - Dennis The Menace (Barcrest) (MPU4) (DEN 1.2K) + Dennis The Menace (Barcrest) (MPU4) (DEN 1.2 K) m4denmendny - Dennis The Menace (Barcrest) (MPU4) (DEN 1.2Y) + Dennis The Menace (Barcrest) (MPU4) (DEN 1.2 Y) m4denmendt @@ -47860,35 +58093,35 @@ m4denmendtad - Dennis The Menace (Barcrest) (MPU4) (DMT 0.1AD) + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1 AD) m4denmendtb - Dennis The Menace (Barcrest) (MPU4) (DMT 0.1B) + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1 B) m4denmendtbd - Dennis The Menace (Barcrest) (MPU4) (DMT 0.1BD) + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1 BD) m4denmendtd - Dennis The Menace (Barcrest) (MPU4) (DMT 0.1D) + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1 D) m4denmendtk - Dennis The Menace (Barcrest) (MPU4) (DMT 0.1K) + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1 K) m4denmendtkd - Dennis The Menace (Barcrest) (MPU4) (DMT 0.1KD) + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1 KD) m4denmendty - Dennis The Menace (Barcrest) (MPU4) (DMT 0.1Y) + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1 Y) m4denmendtyd - Dennis The Menace (Barcrest) (MPU4) (DMT 0.1YD) + Dennis The Menace (Barcrest) (MPU4) (DMT 0.1 YD) m4dnj @@ -47972,43 +58205,43 @@ m4dtyfref5ad - Duty Free (Barcrest) (MPU4) (DF5 0.3AD) + Duty Free (Barcrest) (MPU4) (DF5 0.3 AD) m4dtyfref5b - Duty Free (Barcrest) (MPU4) (DF5 0.3B) + Duty Free (Barcrest) (MPU4) (DF5 0.3 B) m4dtyfref5bd - Duty Free (Barcrest) (MPU4) (DF5 0.3BD) + Duty Free (Barcrest) (MPU4) (DF5 0.3 BD) m4dtyfref5d - Duty Free (Barcrest) (MPU4) (DF5 0.3D) + Duty Free (Barcrest) (MPU4) (DF5 0.3 D) m4dtyfref5k - Duty Free (Barcrest) (MPU4) (DF5 0.3K) + Duty Free (Barcrest) (MPU4) (DF5 0.3 K) m4dtyfref5kd - Duty Free (Barcrest) (MPU4) (DF5 0.3KD) + Duty Free (Barcrest) (MPU4) (DF5 0.3 KD) m4dtyfref5r - Duty Free (Barcrest) (MPU4) (DF5 0.3R) + Duty Free (Barcrest) (MPU4) (DF5 0.3 R) m4dtyfref5rd - Duty Free (Barcrest) (MPU4) (DF5 0.3RD) + Duty Free (Barcrest) (MPU4) (DF5 0.3 RD) m4dtyfref5y - Duty Free (Barcrest) (MPU4) (DF5 0.3Y) + Duty Free (Barcrest) (MPU4) (DF5 0.3 Y) m4dtyfref5yd - Duty Free (Barcrest) (MPU4) (DF5 0.3YD) + Duty Free (Barcrest) (MPU4) (DF5 0.3 YD) m4dtyfref8 @@ -48016,23 +58249,23 @@ m4dtyfref8c - Duty Free (Barcrest) (MPU4) (DF8 0.1C) + Duty Free (Barcrest) (MPU4) (DF8 0.1 C) m4dtyfref8d - Duty Free (Barcrest) (MPU4) (DF8 0.1D) + Duty Free (Barcrest) (MPU4) (DF8 0.1 D) m4dtyfref8k - Duty Free (Barcrest) (MPU4) (DF8 0.1K) + Duty Free (Barcrest) (MPU4) (DF8 0.1 K) m4dtyfref8y - Duty Free (Barcrest) (MPU4) (DF8 0.1Y) + Duty Free (Barcrest) (MPU4) (DF8 0.1 Y) m4dtyfref8yd - Duty Free (Barcrest) (MPU4) (DF8 0.1YD) + Duty Free (Barcrest) (MPU4) (DF8 0.1 YD) m4dtyfreft @@ -48040,43 +58273,43 @@ m4dtyfreftad - Duty Free (Barcrest) (MPU4) (DFT 0.1AD) + Duty Free (Barcrest) (MPU4) (DFT 0.1 AD) m4dtyfreftb - Duty Free (Barcrest) (MPU4) (DFT 0.1B) + Duty Free (Barcrest) (MPU4) (DFT 0.1 B) m4dtyfreftbd - Duty Free (Barcrest) (MPU4) (DFT 0.1BD) + Duty Free (Barcrest) (MPU4) (DFT 0.1 BD) m4dtyfreftd - Duty Free (Barcrest) (MPU4) (DFT 0.1D) + Duty Free (Barcrest) (MPU4) (DFT 0.1 D) m4dtyfreftk - Duty Free (Barcrest) (MPU4) (DFT 0.1K) + Duty Free (Barcrest) (MPU4) (DFT 0.1 K) m4dtyfreftkd - Duty Free (Barcrest) (MPU4) (DFT 0.1KD) + Duty Free (Barcrest) (MPU4) (DFT 0.1 KD) m4dtyfrefty - Duty Free (Barcrest) (MPU4) (DFT 0.1Y) + Duty Free (Barcrest) (MPU4) (DFT 0.1 Y) m4dtyfreftyd - Duty Free (Barcrest) (MPU4) (DFT 0.1YD) + Duty Free (Barcrest) (MPU4) (DFT 0.1 YD) m4dtyfreutb - Duty Free (Barcrest) (MPU4) (DUT 0.4B) + Duty Free (Barcrest) (MPU4) (DUT 0.4 B) m4dtyfreutc - Duty Free (Barcrest) (MPU4) (DUT 0.4C) + Duty Free (Barcrest) (MPU4) (DUT 0.4 C) m4dtyfrexd @@ -48088,47 +58321,47 @@ m4dtyfrexdad - Duty Free (Barcrest) (MPU4) (XD5 0.2AD) + Duty Free (Barcrest) (MPU4) (XD5 0.2 AD) m4dtyfrexdb - Duty Free (Barcrest) (MPU4) (XD5 0.2B) + Duty Free (Barcrest) (MPU4) (XD5 0.2 B) m4dtyfrexdbd - Duty Free (Barcrest) (MPU4) (XD5 0.2BD) + Duty Free (Barcrest) (MPU4) (XD5 0.2 BD) m4dtyfrexdc - Duty Free (Barcrest) (MPU4) (XD5 0.2C) + Duty Free (Barcrest) (MPU4) (XD5 0.2 C) m4dtyfrexdd - Duty Free (Barcrest) (MPU4) (XD5 0.2D) + Duty Free (Barcrest) (MPU4) (XD5 0.2 D) m4dtyfrexdk - Duty Free (Barcrest) (MPU4) (XD5 0.2K) + Duty Free (Barcrest) (MPU4) (XD5 0.2 K) m4dtyfrexdkd - Duty Free (Barcrest) (MPU4) (XD5 0.2KD) + Duty Free (Barcrest) (MPU4) (XD5 0.2 KD) m4dtyfrexdr - Duty Free (Barcrest) (MPU4) (XD5 0.2R) + Duty Free (Barcrest) (MPU4) (XD5 0.2 R) m4dtyfrexdrd - Duty Free (Barcrest) (MPU4) (XD5 0.2RD) + Duty Free (Barcrest) (MPU4) (XD5 0.2 RD) m4dtyfrexdy - Duty Free (Barcrest) (MPU4) (XD5 0.2Y) + Duty Free (Barcrest) (MPU4) (XD5 0.2 Y) m4dtyfrexdyd - Duty Free (Barcrest) (MPU4) (XD5 0.2YD) + Duty Free (Barcrest) (MPU4) (XD5 0.2 YD) m4dtyfrexf @@ -48136,47 +58369,47 @@ m4dtyfrexfad - Duty Free (Barcrest) (MPU4) (XFT 0.1AD) + Duty Free (Barcrest) (MPU4) (XFT 0.1 AD) m4dtyfrexfb - Duty Free (Barcrest) (MPU4) (XFT 0.1B) + Duty Free (Barcrest) (MPU4) (XFT 0.1 B) m4dtyfrexfbd - Duty Free (Barcrest) (MPU4) (XFT 0.1BD) + Duty Free (Barcrest) (MPU4) (XFT 0.1 BD) m4dtyfrexfc - Duty Free (Barcrest) (MPU4) (XFT 0.1C) + Duty Free (Barcrest) (MPU4) (XFT 0.1 C) m4dtyfrexfd - Duty Free (Barcrest) (MPU4) (XFT 0.1D) + Duty Free (Barcrest) (MPU4) (XFT 0.1 D) m4dtyfrexfk - Duty Free (Barcrest) (MPU4) (XFT 0.1K) + Duty Free (Barcrest) (MPU4) (XFT 0.1 K) m4dtyfrexfkd - Duty Free (Barcrest) (MPU4) (XFT 0.1KD) + Duty Free (Barcrest) (MPU4) (XFT 0.1 KD) m4dtyfrexfr - Duty Free (Barcrest) (MPU4) (XFT 0.1R) + Duty Free (Barcrest) (MPU4) (XFT 0.1 R) m4dtyfrexfrd - Duty Free (Barcrest) (MPU4) (XFT 0.1RD) + Duty Free (Barcrest) (MPU4) (XFT 0.1 RD) m4dtyfrexfy - Duty Free (Barcrest) (MPU4) (XFT 0.1Y) + Duty Free (Barcrest) (MPU4) (XFT 0.1 Y) m4dtyfrexfyd - Duty Free (Barcrest) (MPU4) (XFT 0.1YD) + Duty Free (Barcrest) (MPU4) (XFT 0.1 YD) m4dz @@ -48184,395 +58417,395 @@ m4eaw - Everyone's A Winner (Barcrest) (MPU4) (set 1) + Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2) m4eaw__0 - Everyone's A Winner (Barcrest) (MPU4) (set 28) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 D / ER4 0.1) m4eaw__1 - Everyone's A Winner (Barcrest) (MPU4) (set 29) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 KD / ER4 0.1) m4eaw__2 - Everyone's A Winner (Barcrest) (MPU4) (set 30) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 RD / ER4 0.1) m4eaw__3 - Everyone's A Winner (Barcrest) (MPU4) (set 31) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 YD / ER4 0.1) m4eaw__4 - Everyone's A Winner (Barcrest) (MPU4) (set 32) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 K / ER4 0.1) m4eaw__5 - Everyone's A Winner (Barcrest) (MPU4) (set 33) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 R / ER4 0.1) m4eaw__6 - Everyone's A Winner (Barcrest) (MPU4) (set 34) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 / ER4 0.1) m4eaw__7 - Everyone's A Winner (Barcrest) (MPU4) (set 35) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 Y / ER4 0.1) m4eaw__8 - Everyone's A Winner (Barcrest) (MPU4) (set 36) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 AD / ER4 0.1) m4eaw__9 - Everyone's A Winner (Barcrest) (MPU4) (set 37) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 B / ER4 0.1) m4eaw__a - Everyone's A Winner (Barcrest) (MPU4) (set 2) + Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 AD / ER4 0.3) m4eaw__a0 - Everyone's A Winner (Barcrest) (MPU4) (set 64) + Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 YD) m4eaw__a1 - Everyone's A Winner (Barcrest) (MPU4) (set 65) + Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 K) m4eaw__a2 - Everyone's A Winner (Barcrest) (MPU4) (set 66) + Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 Y) m4eaw__a3 - Everyone's A Winner (Barcrest) (MPU4) (set 67) + Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 AD) m4eaw__a4 - Everyone's A Winner (Barcrest) (MPU4) (set 68) + Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 B) m4eaw__a5 - Everyone's A Winner (Barcrest) (MPU4) (set 69) + Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 C) m4eaw__a6 - Everyone's A Winner (Barcrest) (MPU4) (set 70) + Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 KD) m4eaw__a7 - Everyone's A Winner (Barcrest) (MPU4) (set 71) + Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 YD) m4eaw__a8 - Everyone's A Winner (Barcrest) (MPU4) (set 72) + Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 K) m4eaw__a9 - Everyone's A Winner (Barcrest) (MPU4) (set 73) + Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1) m4eaw__aa - Everyone's A Winner (Barcrest) (MPU4) (set 38) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 BD / ER4 0.1) m4eaw__ab - Everyone's A Winner (Barcrest) (MPU4) (set 39) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 C / ER4 0.1) m4eaw__ac - Everyone's A Winner (Barcrest) (MPU4) (set 40) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 D / ER4 0.1) m4eaw__ad - Everyone's A Winner (Barcrest) (MPU4) (set 41) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 KD / ER4 0.1) m4eaw__ae - Everyone's A Winner (Barcrest) (MPU4) (set 42) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 RD / ER4 0.1) m4eaw__af - Everyone's A Winner (Barcrest) (MPU4) (set 43) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 YD / ER4 0.1) m4eaw__ag - Everyone's A Winner (Barcrest) (MPU4) (set 44) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 K / ER4 0.1) m4eaw__ah - Everyone's A Winner (Barcrest) (MPU4) (set 45) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 R / ER4 0.1) m4eaw__ai - Everyone's A Winner (Barcrest) (MPU4) (set 46) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 / ER4 0.1) m4eaw__aj - Everyone's A Winner (Barcrest) (MPU4) (set 47) + Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 Y / ER4 0.1) m4eaw__ak - Everyone's A Winner (Barcrest) (MPU4) (set 48) + Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 AD) m4eaw__al - Everyone's A Winner (Barcrest) (MPU4) (set 49) + Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 B) m4eaw__am - Everyone's A Winner (Barcrest) (MPU4) (set 50) + Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 BD) m4eaw__an - Everyone's A Winner (Barcrest) (MPU4) (set 51) + Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 D) m4eaw__ao - Everyone's A Winner (Barcrest) (MPU4) (set 52) + Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 KD) m4eaw__ap - Everyone's A Winner (Barcrest) (MPU4) (set 53) + Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 RD) m4eaw__aq - Everyone's A Winner (Barcrest) (MPU4) (set 54) + Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 YD) m4eaw__ar - Everyone's A Winner (Barcrest) (MPU4) (set 55) + Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 K) m4eaw__as - Everyone's A Winner (Barcrest) (MPU4) (set 56) + Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 R) m4eaw__at - Everyone's A Winner (Barcrest) (MPU4) (set 57) + Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1) m4eaw__au - Everyone's A Winner (Barcrest) (MPU4) (set 58) + Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 Y) m4eaw__av - Everyone's A Winner (Barcrest) (MPU4) (set 59) + Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 AD) m4eaw__aw - Everyone's A Winner (Barcrest) (MPU4) (set 60) + Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 B) m4eaw__ax - Everyone's A Winner (Barcrest) (MPU4) (set 61) + Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 BD) m4eaw__ay - Everyone's A Winner (Barcrest) (MPU4) (set 62) + Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 D) m4eaw__az - Everyone's A Winner (Barcrest) (MPU4) (set 63) + Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 KD) m4eaw__b - Everyone's A Winner (Barcrest) (MPU4) (set 3) + Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 B / ER4 0.3) m4eaw__ba - Everyone's A Winner (Barcrest) (MPU4) (set 74) + Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 Y) m4eaw__bb - Everyone's A Winner (Barcrest) (MPU4) (set 75) + Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 AD) m4eaw__bc - Everyone's A Winner (Barcrest) (MPU4) (set 76) + Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 B) m4eaw__bd - Everyone's A Winner (Barcrest) (MPU4) (set 77) + Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 BD) m4eaw__be - Everyone's A Winner (Barcrest) (MPU4) (set 78) + Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 D) m4eaw__bf - Everyone's A Winner (Barcrest) (MPU4) (set 79) + Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 KD) m4eaw__bg - Everyone's A Winner (Barcrest) (MPU4) (set 80) + Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 RD) m4eaw__bh - Everyone's A Winner (Barcrest) (MPU4) (set 81) + Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 YD) m4eaw__bi - Everyone's A Winner (Barcrest) (MPU4) (set 82) + Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 K) m4eaw__bj - Everyone's A Winner (Barcrest) (MPU4) (set 83) + Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 R) m4eaw__bk - Everyone's A Winner (Barcrest) (MPU4) (set 84) + Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2) m4eaw__bl - Everyone's A Winner (Barcrest) (MPU4) (set 85) + Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 Y) m4eaw__bm - Everyone's A Winner (Barcrest) (MPU4) (set 86) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 AD / ER4 0.1) m4eaw__bn - Everyone's A Winner (Barcrest) (MPU4) (set 87) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 B / ER4 0.1) m4eaw__bo - Everyone's A Winner (Barcrest) (MPU4) (set 88) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 BD / ER4 0.1) m4eaw__bp - Everyone's A Winner (Barcrest) (MPU4) (set 89) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 C / ER4 0.1) m4eaw__bq - Everyone's A Winner (Barcrest) (MPU4) (set 90) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 D / ER4 0.1) m4eaw__br - Everyone's A Winner (Barcrest) (MPU4) (set 91) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 KD / ER4 0.1) m4eaw__bs - Everyone's A Winner (Barcrest) (MPU4) (set 92) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 RD / ER4 0.1) m4eaw__bt - Everyone's A Winner (Barcrest) (MPU4) (set 93) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 YD / ER4 0.1) m4eaw__bu - Everyone's A Winner (Barcrest) (MPU4) (set 94) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 K / ER4 0.1) m4eaw__bv - Everyone's A Winner (Barcrest) (MPU4) (set 95) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 R / ER4 0.1) m4eaw__bw - Everyone's A Winner (Barcrest) (MPU4) (set 96) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 / ER4 0.1) m4eaw__bx - Everyone's A Winner (Barcrest) (MPU4) (set 97) + Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 Y / ER4 0.1) m4eaw__bz - Everyone's A Winner (Barcrest) (MPU4) (set 99) + Everyone's A Winner (Barcrest) (MPU4) (unknown rev, bad) m4eaw__c - Everyone's A Winner (Barcrest) (MPU4) (set 4) + Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 BD / ER4 0.3) m4eaw__d - Everyone's A Winner (Barcrest) (MPU4) (set 5) + Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 D / ER4 0.3) m4eaw__e - Everyone's A Winner (Barcrest) (MPU4) (set 6) + Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 KD / ER4 0.3) m4eaw__f - Everyone's A Winner (Barcrest) (MPU4) (set 7) + Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 RD / ER4 0.3) m4eaw__g - Everyone's A Winner (Barcrest) (MPU4) (set 8) + Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 YD / ER4 0.3) m4eaw__h - Everyone's A Winner (Barcrest) (MPU4) (set 9) + Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 K / ER4 0.3) m4eaw__i - Everyone's A Winner (Barcrest) (MPU4) (set 10) + Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 R / ER4 0.3) m4eaw__j - Everyone's A Winner (Barcrest) (MPU4) (set 11) + Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 / ER4 0.3) m4eaw__k - Everyone's A Winner (Barcrest) (MPU4) (set 12) + Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 Y / ER4 0.3) m4eaw__l - Everyone's A Winner (Barcrest) (MPU4) (set 13) + Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 AD / ER4 0.2) m4eaw__m - Everyone's A Winner (Barcrest) (MPU4) (set 14) + Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 B / ER4 0.2) m4eaw__n - Everyone's A Winner (Barcrest) (MPU4) (set 15) + Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 BD / ER4 0.2) m4eaw__o - Everyone's A Winner (Barcrest) (MPU4) (set 16) + Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 D / ER4 0.2) m4eaw__p - Everyone's A Winner (Barcrest) (MPU4) (set 17) + Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 KD / ER4 0.2) m4eaw__q - Everyone's A Winner (Barcrest) (MPU4) (set 18) + Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 RD / ER4 0.2) m4eaw__r - Everyone's A Winner (Barcrest) (MPU4) (set 19) + Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 YD / ER4 0.2) m4eaw__s - Everyone's A Winner (Barcrest) (MPU4) (set 20) + Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 K / ER4 0.2) m4eaw__t - Everyone's A Winner (Barcrest) (MPU4) (set 21) + Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 R/ ER4 0.2) m4eaw__u - Everyone's A Winner (Barcrest) (MPU4) (set 22) + Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 / ER4 0.2) m4eaw__v - Everyone's A Winner (Barcrest) (MPU4) (set 23) + Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 Y / ER4 0.2) m4eaw__w - Everyone's A Winner (Barcrest) (MPU4) (set 24) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 AD / ER4 0.1) m4eaw__x - Everyone's A Winner (Barcrest) (MPU4) (set 25) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 B / ER4 0.1) m4eaw__y - Everyone's A Winner (Barcrest) (MPU4) (set 26) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 BD / ER4 0.1) m4eaw__z - Everyone's A Winner (Barcrest) (MPU4) (set 27) + Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 C / ER4 0.1) m4eezee @@ -48622,6 +58855,18 @@ m4elite Elite (Barcrest) (MPU4 w/ Plasma DMD?) + + m4esctbg + Escalera Tobogan (MPU4, set 1) + + + m4esctbga + Escalera Tobogan (MPU4, set 2) + + + m4esctbgb + Escalera Tobogan (MPU4, set 3) + m4eureka Eureka (Empire) (MPU4, set 1) @@ -48692,7 +58937,11 @@ m4excam - Excalibur (Mdm) (MPU4) + Excalibur (Mdm) (MPU4, V1.4) + + + m4excamd + Excalibur (Mdm) (MPU4, V1.0D) m4exgam @@ -49100,211 +59349,211 @@ m4gb006 - Games Bond 006 (Barcrest) (MPU4) (set 1) + Games Bond 006 (Barcrest) (MPU4) (006 0.6) m4gb006__a - Games Bond 006 (Barcrest) (MPU4) (set 2) + Games Bond 006 (Barcrest) (MPU4) (006 0.6 D) m4gb006__b - Games Bond 006 (Barcrest) (MPU4) (set 3) + Games Bond 006 (Barcrest) (MPU4) (006 0.6 Y) m4gb006__c - Games Bond 006 (Barcrest) (MPU4) (set 4) + Games Bond 006 (Barcrest) (MPU4) (006 0.6 C) m4gbust - Ghost Buster (Barcrest) (MPU4) (set 1) + Ghost Buster (Barcrest) (MPU4) (GB 5.0) m4gbust__a - Ghost Buster (Barcrest) (MPU4) (set 2) + Ghost Buster (Barcrest) (MPU4) (GB 3.0, 1994, set 2) m4gbust__b - Ghost Buster (Barcrest) (MPU4) (set 3) + Ghost Buster (Barcrest) (MPU4) (GB 3.0, 1994, set 1) m4gbust__c - Ghost Buster (Barcrest) (MPU4) (set 4) + Ghost Buster (Barcrest) (MPU4) (GB 2.0, 1994) m4gbust__d - Ghost Buster (Barcrest) (MPU4) (set 5) + Ghost Buster (Barcrest) (MPU4) (GB 4.0, set 1) m4gbust__e - Ghost Buster (Barcrest) (MPU4) (set 6) + Ghost Buster (Barcrest) (MPU4) (GB 4.0, set 2) m4gbust__f - Ghost Buster (Barcrest) (MPU4) (set 7) + Ghost Buster (Barcrest) (MPU4) (GB 2.0, set 1) m4gbust__g - Ghost Buster (Barcrest) (MPU4) (set 8) + Ghost Buster (Barcrest) (MPU4) (GB 4.0 D) m4gbust__h - Ghost Buster (Barcrest) (MPU4) (set 9) + Ghost Buster (Barcrest) (MPU4) (GB 2.0, set 4) m4gbust__i - Ghost Buster (Barcrest) (MPU4) (set 10) + Ghost Buster (Barcrest) (MPU4) (GB 2.0, set 2) m4gbust__j - Ghost Buster (Barcrest) (MPU4) (set 11) + Ghost Buster (Barcrest) (MPU4) (GB 3.0, set 1) m4gbust__k - Ghost Buster (Barcrest) (MPU4) (set 12) + Ghost Buster (Barcrest) (MPU4) (GB 3.0 YD, set 1) m4gbust__l - Ghost Buster (Barcrest) (MPU4) (set 13) + Ghost Buster (Barcrest) (MPU4) (GB 2.0 D, set 3) m4gbust__m - Ghost Buster (Barcrest) (MPU4) (set 14) + Ghost Buster (Barcrest) (MPU4) (GB 2.0 D, set 1) m4gbust__n - Ghost Buster (Barcrest) (MPU4) (set 15) + Ghost Buster (Barcrest) (MPU4) (GB 3.0 D, set 1) m4gbust__o - Ghost Buster (Barcrest) (MPU4) (set 16) + Ghost Buster (Barcrest) (MPU4) (GB 2.0, set 3) m4gbust__p - Ghost Buster (Barcrest) (MPU4) (set 17) + Ghost Buster (Barcrest) (MPU4) (GB 3.0, set 2) m4gbust__q - Ghost Buster (Barcrest) (MPU4) (set 18) + Ghost Buster (Barcrest) (MPU4) (GB 2.0 YD, set 2) m4gbust__r - Ghost Buster (Barcrest) (MPU4) (set 19) + Ghost Buster (Barcrest) (MPU4) (GB 2.0 YD, set 1) m4gbust__s - Ghost Buster (Barcrest) (MPU4) (set 20) + Ghost Buster (Barcrest) (MPU4) (GB 3.0 YD, set 2) m4gbust__t - Ghost Buster (Barcrest) (MPU4) (set 21) + Ghost Buster (Barcrest) (MPU4) (GB 2.0 D, set 4) m4gbust__u - Ghost Buster (Barcrest) (MPU4) (set 22) + Ghost Buster (Barcrest) (MPU4) (GB 2.0 D, set 2) m4gbust__v - Ghost Buster (Barcrest) (MPU4) (set 23) + Ghost Buster (Barcrest) (MPU4) (GB 3.0 D, set 2) m4gbust__w - Ghost Buster (Barcrest) (MPU4) (set 24) + Ghost Buster (Barcrest) (MPU4) (GB 2.0, set 5) m4gclue - Give Us A Clue (Barcrest) (MPU4) (set 1) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2) m4gclue__a - Give Us A Clue (Barcrest) (MPU4) (set 2) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2 B) m4gclue__b - Give Us A Clue (Barcrest) (MPU4) (set 3) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2 BD) m4gclue__c - Give Us A Clue (Barcrest) (MPU4) (set 4) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2 C) m4gclue__d - Give Us A Clue (Barcrest) (MPU4) (set 5) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2 D) m4gclue__e - Give Us A Clue (Barcrest) (MPU4) (set 6) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2 KD) m4gclue__f - Give Us A Clue (Barcrest) (MPU4) (set 7) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2 RD) m4gclue__g - Give Us A Clue (Barcrest) (MPU4) (set 8) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2 YD) m4gclue__h - Give Us A Clue (Barcrest) (MPU4) (set 9) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2 K) m4gclue__i - Give Us A Clue (Barcrest) (MPU4) (set 10) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2 R) m4gclue__j - Give Us A Clue (Barcrest) (MPU4) (set 11) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2 AD) m4gclue__k - Give Us A Clue (Barcrest) (MPU4) (set 12) + Give Us A Clue (Barcrest) (MPU4) (C20 0.2 Y) m4gclue__l - Give Us A Clue (Barcrest) (MPU4) (set 13) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4 AD) m4gclue__m - Give Us A Clue (Barcrest) (MPU4) (set 14) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4 B) m4gclue__n - Give Us A Clue (Barcrest) (MPU4) (set 15) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4 BD) m4gclue__o - Give Us A Clue (Barcrest) (MPU4) (set 16) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4 C) m4gclue__p - Give Us A Clue (Barcrest) (MPU4) (set 17) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4 D) m4gclue__q - Give Us A Clue (Barcrest) (MPU4) (set 18) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4 KD) m4gclue__r - Give Us A Clue (Barcrest) (MPU4) (set 19) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4 RD) m4gclue__s - Give Us A Clue (Barcrest) (MPU4) (set 20) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4 YD) m4gclue__t - Give Us A Clue (Barcrest) (MPU4) (set 21) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4 K) m4gclue__u - Give Us A Clue (Barcrest) (MPU4) (set 22) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4 R) m4gclue__v - Give Us A Clue (Barcrest) (MPU4) (set 23) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4) m4gclue__w - Give Us A Clue (Barcrest) (MPU4) (set 24) + Give Us A Clue (Barcrest) (MPU4) (C25 0.4 Y) m4giant @@ -49392,283 +59641,283 @@ m4goodtm - Let The Good Times Roll (Barcrest) (MPU4) (set 1) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0) m4goodtm__0 - Let The Good Times Roll (Barcrest) (MPU4) (set 28) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 Y) m4goodtm__1 - Let The Good Times Roll (Barcrest) (MPU4) (set 29) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.1) m4goodtm__2 - Let The Good Times Roll (Barcrest) (MPU4) (set 30) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0, hack) m4goodtm__3 - Let The Good Times Roll (Barcrest) (MPU4) (set 31) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1, hack) m4goodtm__4 - Let The Good Times Roll (Barcrest) (MPU4) (set 32) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 AD) m4goodtm__5 - Let The Good Times Roll (Barcrest) (MPU4) (set 33) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 B) m4goodtm__6 - Let The Good Times Roll (Barcrest) (MPU4) (set 34) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 BD) m4goodtm__7 - Let The Good Times Roll (Barcrest) (MPU4) (set 35) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 DH) m4goodtm__8 - Let The Good Times Roll (Barcrest) (MPU4) (set 36) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 KD) m4goodtm__9 - Let The Good Times Roll (Barcrest) (MPU4) (set 37) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 RD) m4goodtm__a - Let The Good Times Roll (Barcrest) (MPU4) (set 2) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 AD) m4goodtm__a0 - Let The Good Times Roll (Barcrest) (MPU4) (set 64) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 RD) m4goodtm__a1 - Let The Good Times Roll (Barcrest) (MPU4) (set 65) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 YD) m4goodtm__a2 - Let The Good Times Roll (Barcrest) (MPU4) (set 66) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 H) m4goodtm__a3 - Let The Good Times Roll (Barcrest) (MPU4) (set 67) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 K) m4goodtm__a4 - Let The Good Times Roll (Barcrest) (MPU4) (set 68) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 R) m4goodtm__a5 - Let The Good Times Roll (Barcrest) (MPU4) (set 69) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0) m4goodtm__a6 - Let The Good Times Roll (Barcrest) (MPU4) (set 70) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 Y) m4goodtm__aa - Let The Good Times Roll (Barcrest) (MPU4) (set 38) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 YD) m4goodtm__ab - Let The Good Times Roll (Barcrest) (MPU4) (set 39) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 H) m4goodtm__ac - Let The Good Times Roll (Barcrest) (MPU4) (set 40) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 K) m4goodtm__ad - Let The Good Times Roll (Barcrest) (MPU4) (set 41) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 R) m4goodtm__ae - Let The Good Times Roll (Barcrest) (MPU4) (set 42) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 D) m4goodtm__af - Let The Good Times Roll (Barcrest) (MPU4) (set 43) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 Y) m4goodtm__ag - Let The Good Times Roll (Barcrest) (MPU4) (set 44) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 AD) m4goodtm__ah - Let The Good Times Roll (Barcrest) (MPU4) (set 45) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 B) m4goodtm__ai - Let The Good Times Roll (Barcrest) (MPU4) (set 46) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 BD) m4goodtm__aj - Let The Good Times Roll (Barcrest) (MPU4) (set 47) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 D) m4goodtm__ak - Let The Good Times Roll (Barcrest) (MPU4) (set 48) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 DH) m4goodtm__al - Let The Good Times Roll (Barcrest) (MPU4) (set 49) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 KD) m4goodtm__am - Let The Good Times Roll (Barcrest) (MPU4) (set 50) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 RD) m4goodtm__an - Let The Good Times Roll (Barcrest) (MPU4) (set 51) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 YD) m4goodtm__ao - Let The Good Times Roll (Barcrest) (MPU4) (set 52) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 H) m4goodtm__ap - Let The Good Times Roll (Barcrest) (MPU4) (set 53) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 K) m4goodtm__aq - Let The Good Times Roll (Barcrest) (MPU4) (set 54) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 R) m4goodtm__ar - Let The Good Times Roll (Barcrest) (MPU4) (set 55) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1) m4goodtm__as - Let The Good Times Roll (Barcrest) (MPU4) (set 56) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 Y) m4goodtm__at - Let The Good Times Roll (Barcrest) (MPU4) (set 57) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.2) m4goodtm__au - Let The Good Times Roll (Barcrest) (MPU4) (set 58) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 AD) m4goodtm__av - Let The Good Times Roll (Barcrest) (MPU4) (set 59) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 B) m4goodtm__aw - Let The Good Times Roll (Barcrest) (MPU4) (set 60) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 BD) m4goodtm__ax - Let The Good Times Roll (Barcrest) (MPU4) (set 61) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 D) m4goodtm__ay - Let The Good Times Roll (Barcrest) (MPU4) (set 62) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 DH) m4goodtm__az - Let The Good Times Roll (Barcrest) (MPU4) (set 63) + Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 KD) m4goodtm__b - Let The Good Times Roll (Barcrest) (MPU4) (set 3) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 B) m4goodtm__c - Let The Good Times Roll (Barcrest) (MPU4) (set 4) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 BD) m4goodtm__d - Let The Good Times Roll (Barcrest) (MPU4) (set 5) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 D) m4goodtm__e - Let The Good Times Roll (Barcrest) (MPU4) (set 6) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 DH) m4goodtm__f - Let The Good Times Roll (Barcrest) (MPU4) (set 7) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 KD) m4goodtm__g - Let The Good Times Roll (Barcrest) (MPU4) (set 8) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 RD) m4goodtm__h - Let The Good Times Roll (Barcrest) (MPU4) (set 9) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 YD) m4goodtm__i - Let The Good Times Roll (Barcrest) (MPU4) (set 10) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 H) m4goodtm__j - Let The Good Times Roll (Barcrest) (MPU4) (set 11) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 K) m4goodtm__k - Let The Good Times Roll (Barcrest) (MPU4) (set 12) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 R) m4goodtm__l - Let The Good Times Roll (Barcrest) (MPU4) (set 13) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1) m4goodtm__m - Let The Good Times Roll (Barcrest) (MPU4) (set 14) + Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 Y) m4goodtm__n - Let The Good Times Roll (Barcrest) (MPU4) (set 15) + Let The Good Times Roll (Barcrest) (MPU4) (GTK 0.2 K) m4goodtm__o - Let The Good Times Roll (Barcrest) (MPU4) (set 16) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 AD) m4goodtm__p - Let The Good Times Roll (Barcrest) (MPU4) (set 17) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 B) m4goodtm__q - Let The Good Times Roll (Barcrest) (MPU4) (set 18) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 BD) m4goodtm__r - Let The Good Times Roll (Barcrest) (MPU4) (set 19) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 D) m4goodtm__s - Let The Good Times Roll (Barcrest) (MPU4) (set 20) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 DH) m4goodtm__t - Let The Good Times Roll (Barcrest) (MPU4) (set 21) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 KD) m4goodtm__u - Let The Good Times Roll (Barcrest) (MPU4) (set 22) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 RD) m4goodtm__v - Let The Good Times Roll (Barcrest) (MPU4) (set 23) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 YD) m4goodtm__w - Let The Good Times Roll (Barcrest) (MPU4) (set 24) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 H) m4goodtm__x - Let The Good Times Roll (Barcrest) (MPU4) (set 25) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 K) m4goodtm__y - Let The Good Times Roll (Barcrest) (MPU4) (set 26) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 R) m4goodtm__z - Let The Good Times Roll (Barcrest) (MPU4) (set 27) + Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0) m4graff @@ -49864,159 +60113,159 @@ m4hijinx - Hi Jinx (Barcrest) (MPU4) (set 1) + Hi Jinx (Barcrest) (MPU4) (JNX 1.0) m4hijinx__0 - Hi Jinx (Barcrest) (MPU4) (set 28) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3) m4hijinx__1 - Hi Jinx (Barcrest) (MPU4) (set 29) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 Y) m4hijinx__2 - Hi Jinx (Barcrest) (MPU4) (set 30) + Hi Jinx (Barcrest) (MPU4) (JNX 0.5 D) m4hijinx__3 - Hi Jinx (Barcrest) (MPU4) (set 31) + Hi Jinx (Barcrest) (MPU4) (JNX 0.5 DH) m4hijinx__4 - Hi Jinx (Barcrest) (MPU4) (set 32) + Hi Jinx (Barcrest) (MPU4) (JNX 0.5 DY) m4hijinx__5 - Hi Jinx (Barcrest) (MPU4) (set 33) + Hi Jinx (Barcrest) (MPU4) (JNX 0.5 H) m4hijinx__6 - Hi Jinx (Barcrest) (MPU4) (set 34) + Hi Jinx (Barcrest) (MPU4) (JNX 0.5 Y) m4hijinx__7 - Hi Jinx (Barcrest) (MPU4) (set 35) + Hi Jinx (Barcrest) (MPU4) (JNX 1.0 D) m4hijinx__8 - Hi Jinx (Barcrest) (MPU4) (set 36) + Hi Jinx (Barcrest) (MPU4) (JNX 1.0 DH) m4hijinx__9 - Hi Jinx (Barcrest) (MPU4) (set 37) + Hi Jinx (Barcrest) (MPU4) (JNX 1.0 DY) m4hijinx__a - Hi Jinx (Barcrest) (MPU4) (set 2) + Hi Jinx (Barcrest) (MPU4) (JNX 0.5, hack) m4hijinx__aa - Hi Jinx (Barcrest) (MPU4) (set 38) + Hi Jinx (Barcrest) (MPU4) (JNX 1.0 H) m4hijinx__ab - Hi Jinx (Barcrest) (MPU4) (set 39) + Hi Jinx (Barcrest) (MPU4) (JNX 1.0 Y) m4hijinx__b - Hi Jinx (Barcrest) (MPU4) (set 3) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2, hack) m4hijinx__c - Hi Jinx (Barcrest) (MPU4) (set 4) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 DA) m4hijinx__d - Hi Jinx (Barcrest) (MPU4) (set 5) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 B) m4hijinx__e - Hi Jinx (Barcrest) (MPU4) (set 6) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 DB) m4hijinx__f - Hi Jinx (Barcrest) (MPU4) (set 7) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 D) m4hijinx__g - Hi Jinx (Barcrest) (MPU4) (set 8) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 DH) m4hijinx__h - Hi Jinx (Barcrest) (MPU4) (set 9) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 DK) m4hijinx__i - Hi Jinx (Barcrest) (MPU4) (set 10) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 DR) m4hijinx__j - Hi Jinx (Barcrest) (MPU4) (set 11) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 DY) m4hijinx__k - Hi Jinx (Barcrest) (MPU4) (set 12) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 H) m4hijinx__l - Hi Jinx (Barcrest) (MPU4) (set 13) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 K) m4hijinx__m - Hi Jinx (Barcrest) (MPU4) (set 14) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 R) m4hijinx__n - Hi Jinx (Barcrest) (MPU4) (set 15) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2) m4hijinx__o - Hi Jinx (Barcrest) (MPU4) (set 16) + Hi Jinx (Barcrest) (MPU4) (JNS 0.2 Y) m4hijinx__p - Hi Jinx (Barcrest) (MPU4) (set 17) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 DA) m4hijinx__q - Hi Jinx (Barcrest) (MPU4) (set 18) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 B) m4hijinx__r - Hi Jinx (Barcrest) (MPU4) (set 19) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 DB) m4hijinx__s - Hi Jinx (Barcrest) (MPU4) (set 20) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 D) m4hijinx__t - Hi Jinx (Barcrest) (MPU4) (set 21) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 DH) m4hijinx__u - Hi Jinx (Barcrest) (MPU4) (set 22) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 DK) m4hijinx__v - Hi Jinx (Barcrest) (MPU4) (set 23) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 DR) m4hijinx__w - Hi Jinx (Barcrest) (MPU4) (set 24) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 DY) m4hijinx__x - Hi Jinx (Barcrest) (MPU4) (set 25) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 H) m4hijinx__y - Hi Jinx (Barcrest) (MPU4) (set 26) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 K) m4hijinx__z - Hi Jinx (Barcrest) (MPU4) (set 27) + Hi Jinx (Barcrest) (MPU4) (JNS 0.3 R) m4hilonv @@ -50084,247 +60333,247 @@ m4hittop - Hit The Top (Barcrest) (MPU4) (set 1) + Hit The Top (Barcrest) (MPU4) (HI4 0.3) m4hittop__0 - Hit The Top (Barcrest) (MPU4) (set 28) + Hit The Top (Barcrest) (MPU4) (HIT 0.4 R) m4hittop__1 - Hit The Top (Barcrest) (MPU4) (set 29) + Hit The Top (Barcrest) (MPU4) (HIT 0.4) m4hittop__2 - Hit The Top (Barcrest) (MPU4) (set 30) + Hit The Top (Barcrest) (MPU4) (HIT 0.4 Y) m4hittop__3 - Hit The Top (Barcrest) (MPU4) (set 31) + Hit The Top (Barcrest) (MPU4) (HT2 0.1 AD) m4hittop__4 - Hit The Top (Barcrest) (MPU4) (set 32) + Hit The Top (Barcrest) (MPU4) (HT2 0.1 B) m4hittop__5 - Hit The Top (Barcrest) (MPU4) (set 33) + Hit The Top (Barcrest) (MPU4) (HT2 0.1 BD) m4hittop__6 - Hit The Top (Barcrest) (MPU4) (set 34) + Hit The Top (Barcrest) (MPU4) (HT2 0.1 D) m4hittop__7 - Hit The Top (Barcrest) (MPU4) (set 35) + Hit The Top (Barcrest) (MPU4) (HT2 0.1 KD) m4hittop__8 - Hit The Top (Barcrest) (MPU4) (set 36) + Hit The Top (Barcrest) (MPU4) (HT2 0.1 RD) m4hittop__9 - Hit The Top (Barcrest) (MPU4) (set 37) + Hit The Top (Barcrest) (MPU4) (HT2 0.1 YD) m4hittop__a - Hit The Top (Barcrest) (MPU4) (set 2) + Hit The Top (Barcrest) (MPU4) (CHU 0.1 AD) m4hittop__aa - Hit The Top (Barcrest) (MPU4) (set 38) + Hit The Top (Barcrest) (MPU4) (HT2 0.1 K) m4hittop__ab - Hit The Top (Barcrest) (MPU4) (set 39) + Hit The Top (Barcrest) (MPU4) (HT2 0.1 R) m4hittop__ac - Hit The Top (Barcrest) (MPU4) (set 40) + Hit The Top (Barcrest) (MPU4) (HT2 0.1) m4hittop__ad - Hit The Top (Barcrest) (MPU4) (set 41) + Hit The Top (Barcrest) (MPU4) (HT2 0.1 Y) m4hittop__ae - Hit The Top (Barcrest) (MPU4) (set 42) + Hit The Top (Barcrest) (MPU4) (HT5 0.1 AD) m4hittop__af - Hit The Top (Barcrest) (MPU4) (set 43) + Hit The Top (Barcrest) (MPU4) (HT5 0.1 B) m4hittop__ag - Hit The Top (Barcrest) (MPU4) (set 44) + Hit The Top (Barcrest) (MPU4) (HT5 0.1 BD) m4hittop__ah - Hit The Top (Barcrest) (MPU4) (set 45) + Hit The Top (Barcrest) (MPU4) (HT5 0.1 D) m4hittop__ai - Hit The Top (Barcrest) (MPU4) (set 46) + Hit The Top (Barcrest) (MPU4) (HT5 0.1 KD) m4hittop__aj - Hit The Top (Barcrest) (MPU4) (set 47) + Hit The Top (Barcrest) (MPU4) (HT5 0.1 RD) m4hittop__ak - Hit The Top (Barcrest) (MPU4) (set 48) + Hit The Top (Barcrest) (MPU4) (HT5 0.1 YD) m4hittop__al - Hit The Top (Barcrest) (MPU4) (set 49) + Hit The Top (Barcrest) (MPU4) (HT5 0.1 K) m4hittop__am - Hit The Top (Barcrest) (MPU4) (set 50) + Hit The Top (Barcrest) (MPU4) (HT5 0.1 R) m4hittop__an - Hit The Top (Barcrest) (MPU4) (set 51) + Hit The Top (Barcrest) (MPU4) (HT5 0.1) m4hittop__ao - Hit The Top (Barcrest) (MPU4) (set 52) + Hit The Top (Barcrest) (MPU4) (HT5 0.1 Y) m4hittop__ap - Hit The Top (Barcrest) (MPU4) (set 53) + Hit The Top (Barcrest) (MPU4) (HTT 0.5 AD) m4hittop__aq - Hit The Top (Barcrest) (MPU4) (set 54) + Hit The Top (Barcrest) (MPU4) (HTT 0.5 B) m4hittop__ar - Hit The Top (Barcrest) (MPU4) (set 55) + Hit The Top (Barcrest) (MPU4) (HTT 0.5 BD) m4hittop__as - Hit The Top (Barcrest) (MPU4) (set 56) + Hit The Top (Barcrest) (MPU4) (HTT 0.5 D) m4hittop__at - Hit The Top (Barcrest) (MPU4) (set 57) + Hit The Top (Barcrest) (MPU4) (HTT 0.5 KD) m4hittop__au - Hit The Top (Barcrest) (MPU4) (set 58) + Hit The Top (Barcrest) (MPU4) (HTT 0.5 YD) m4hittop__av - Hit The Top (Barcrest) (MPU4) (set 59) + Hit The Top (Barcrest) (MPU4) (HTT 0.5 K) m4hittop__aw - Hit The Top (Barcrest) (MPU4) (set 60) + Hit The Top (Barcrest) (MPU4) (HTT 0.5) m4hittop__ax - Hit The Top (Barcrest) (MPU4) (set 61) + Hit The Top (Barcrest) (MPU4) (HTT 0.5 Y) m4hittop__b - Hit The Top (Barcrest) (MPU4) (set 3) + Hit The Top (Barcrest) (MPU4) (CHU 0.1 B) m4hittop__c - Hit The Top (Barcrest) (MPU4) (set 4) + Hit The Top (Barcrest) (MPU4) (CHU 0.1 BD) m4hittop__d - Hit The Top (Barcrest) (MPU4) (set 5) + Hit The Top (Barcrest) (MPU4) (CHU 0.1 D) m4hittop__e - Hit The Top (Barcrest) (MPU4) (set 6) + Hit The Top (Barcrest) (MPU4) (CHU 0.1 KD) m4hittop__f - Hit The Top (Barcrest) (MPU4) (set 7) + Hit The Top (Barcrest) (MPU4) (CHU 0.1 YD) m4hittop__g - Hit The Top (Barcrest) (MPU4) (set 8) + Hit The Top (Barcrest) (MPU4) (CHU 0.1 K) m4hittop__h - Hit The Top (Barcrest) (MPU4) (set 9) + Hit The Top (Barcrest) (MPU4) (CHU 0.1 R) m4hittop__i - Hit The Top (Barcrest) (MPU4) (set 10) + Hit The Top (Barcrest) (MPU4) (CHU 0.1) m4hittop__j - Hit The Top (Barcrest) (MPU4) (set 11) + Hit The Top (Barcrest) (MPU4) (CHU 0.1 Y) m4hittop__k - Hit The Top (Barcrest) (MPU4) (set 12) + Hit The Top (Barcrest) (MPU4) (HI4 0.3 AD) m4hittop__l - Hit The Top (Barcrest) (MPU4) (set 13) + Hit The Top (Barcrest) (MPU4) (HI4 0.3 AB m4hittop__m - Hit The Top (Barcrest) (MPU4) (set 14) + Hit The Top (Barcrest) (MPU4) (HI4 0.3 BD) m4hittop__n - Hit The Top (Barcrest) (MPU4) (set 15) + Hit The Top (Barcrest) (MPU4) (HI4 0.3 D) m4hittop__o - Hit The Top (Barcrest) (MPU4) (set 16) + Hit The Top (Barcrest) (MPU4) (HI4 0.3 KD) m4hittop__p - Hit The Top (Barcrest) (MPU4) (set 17) + Hit The Top (Barcrest) (MPU4) (HI4 0.3 YD) m4hittop__q - Hit The Top (Barcrest) (MPU4) (set 18) + Hit The Top (Barcrest) (MPU4) (HI4 0.3 K) m4hittop__r - Hit The Top (Barcrest) (MPU4) (set 19) + Hit The Top (Barcrest) (MPU4) (HI4 0.3 Y) m4hittop__s - Hit The Top (Barcrest) (MPU4) (set 20) + Hit The Top (Barcrest) (MPU4) (HIT 0.4 AD) m4hittop__t - Hit The Top (Barcrest) (MPU4) (set 21) + Hit The Top (Barcrest) (MPU4) (HIT 0.4 B) m4hittop__u - Hit The Top (Barcrest) (MPU4) (set 22) + Hit The Top (Barcrest) (MPU4) (HIT 0.4 BD) m4hittop__v - Hit The Top (Barcrest) (MPU4) (set 23) + Hit The Top (Barcrest) (MPU4) (HIT 0.4 D) m4hittop__w - Hit The Top (Barcrest) (MPU4) (set 24) + Hit The Top (Barcrest) (MPU4) (HIT 0.4 KD) m4hittop__x - Hit The Top (Barcrest) (MPU4) (set 25) + Hit The Top (Barcrest) (MPU4) (HIT 0.4 RD) m4hittop__y - Hit The Top (Barcrest) (MPU4) (set 26) + Hit The Top (Barcrest) (MPU4) (HIT 0.4 YD) m4hittop__z - Hit The Top (Barcrest) (MPU4) (set 27) + Hit The Top (Barcrest) (MPU4) (HIT 0.4 K) m4hittp2 @@ -50364,95 +60613,95 @@ m4hotrod - Hot Rod (Barcrest) (MPU4) (set 1) + Hot Rod (Barcrest) (MPU4) (ROD 0.4K) m4hotrod__a - Hot Rod (Barcrest) (MPU4) (set 2) + Hot Rod (Barcrest) (MPU4) (HRC_1.0C) m4hotrod__b - Hot Rod (Barcrest) (MPU4) (set 3) + Hot Rod (Barcrest) (MPU4) (HR__1.0, hack, set 1) m4hotrod__c - Hot Rod (Barcrest) (MPU4) (set 4) + Hot Rod (Barcrest) (MPU4) (HR__1.0, hack, set 2) m4hotrod__d - Hot Rod (Barcrest) (MPU4) (set 5) + Hot Rod (Barcrest) (MPU4) (HR__1.0, hack, set 3) m4hotrod__e - Hot Rod (Barcrest) (MPU4) (set 6) + Hot Rod (Barcrest) (MPU4) (ROD 0.4, hack?, set 1) m4hotrod__f - Hot Rod (Barcrest) (MPU4) (set 7) + Hot Rod (Barcrest) (MPU4) (HR__1.0, hack, set 4) m4hotrod__g - Hot Rod (Barcrest) (MPU4) (set 8) + Hot Rod (Barcrest) (MPU4) (HR__1.0, hack, set 5) m4hotrod__h - Hot Rod (Barcrest) (MPU4) (set 9) + Hot Rod (Barcrest) (MPU4) (ROD 0.4C) m4hotrod__i - Hot Rod (Barcrest) (MPU4) (set 10) + Hot Rod (Barcrest) (MPU4) (ROD 0.4YD) m4hotrod__j - Hot Rod (Barcrest) (MPU4) (set 11) + Hot Rod (Barcrest) (MPU4) (ROD 0.4) m4hotrod__k - Hot Rod (Barcrest) (MPU4) (set 12) + Hot Rod (Barcrest) (MPU4) (HR__1.0, set 1) m4hotrod__l - Hot Rod (Barcrest) (MPU4) (set 13) + Hot Rod (Barcrest) (MPU4) (HR__1.0D, set 1) m4hotrod__m - Hot Rod (Barcrest) (MPU4) (set 14) + Hot Rod (Barcrest) (MPU4) (HR__1.0, set 2) m4hotrod__n - Hot Rod (Barcrest) (MPU4) (set 15) + Hot Rod (Barcrest) (MPU4) (HR__1.0D, set 2) m4hotrod__o - Hot Rod (Barcrest) (MPU4) (set 16) + Hot Rod (Barcrest) (MPU4) (HR__1.0C, set 1) m4hotrod__p - Hot Rod (Barcrest) (MPU4) (set 17) + Hot Rod (Barcrest) (MPU4) (HR__1.0C, set 2) m4hotrod__q - Hot Rod (Barcrest) (MPU4) (set 18) + Hot Rod (Barcrest) (MPU4) (HR__1.0, hack, set 6) m4hotrod__r - Hot Rod (Barcrest) (MPU4) (set 19) + Hot Rod (Barcrest) (MPU4) (HR__1.0, hack, set 7) m4hotrod__s - Hot Rod (Barcrest) (MPU4) (set 20) + Hot Rod (Barcrest) (MPU4) (HR__1.0, hack, set 8) m4hotrod__t - Hot Rod (Barcrest) (MPU4) (set 21) + Hot Rod (Barcrest) (MPU4) (HR__1.0, hack, set 9) m4hotrod__u - Hot Rod (Barcrest) (MPU4) (set 22) + Hot Rod (Barcrest) (MPU4) (ROD 0.4, hack?, set 2) m4hotrod__v - Hot Rod (Barcrest) (MPU4) (set 23) + Hot Rod (Barcrest) (MPU4) (ROD 0.4, hack?, set 3) m4hpyjok @@ -50532,111 +60781,111 @@ m4hypclb - Hyper Viper Club (Barcrest) (MPU4) (set 1) + Hyper Viper Club (Barcrest) (MPU4) (HPC 0.5) m4hypclb__a - Hyper Viper Club (Barcrest) (MPU4) (set 2) + Hyper Viper Club (Barcrest) (MPU4) (HPC 0.5 F) m4hypclb__b - Hyper Viper Club (Barcrest) (MPU4) (set 3) + Hyper Viper Club (Barcrest) (MPU4) (HPC 0.5 FD) m4hypclb__c - Hyper Viper Club (Barcrest) (MPU4) (set 4) + Hyper Viper Club (Barcrest) (MPU4) (HPC 0.5 D) m4hypvip - Hyper Viper (Barcrest) (MPU4) (set 1) + Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, set 1) m4hypvip__a - Hyper Viper (Barcrest) (MPU4) (set 2) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, C) m4hypvip__b - Hyper Viper (Barcrest) (MPU4) (set 3) + Hyper Viper (Barcrest) (MPU4) (HVC 1.0 C) m4hypvip__c - Hyper Viper (Barcrest) (MPU4) (set 4) + Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 D) m4hypvip__d - Hyper Viper (Barcrest) (MPU4) (set 5) + Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 K) m4hypvip__e - Hyper Viper (Barcrest) (MPU4) (set 6) + Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 C) m4hypvip__f - Hyper Viper (Barcrest) (MPU4) (set 7) + Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 Y) m4hypvip__g - Hyper Viper (Barcrest) (MPU4) (set 8) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 1) m4hypvip__h - Hyper Viper (Barcrest) (MPU4) (set 9) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 2) m4hypvip__i - Hyper Viper (Barcrest) (MPU4) (set 10) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 6) m4hypvip__j - Hyper Viper (Barcrest) (MPU4) (set 11) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 7) m4hypvip__k - Hyper Viper (Barcrest) (MPU4) (set 12) + Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, hack, set 1) m4hypvip__l - Hyper Viper (Barcrest) (MPU4) (set 13) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 1) m4hypvip__m - Hyper Viper (Barcrest) (MPU4) (set 14) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, C, bad?) m4hypvip__n - Hyper Viper (Barcrest) (MPU4) (set 15) + Hyper Viper (Barcrest) (MPU4) (H6Y 0.2 Y) m4hypvip__o - Hyper Viper (Barcrest) (MPU4) (set 16) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 3) m4hypvip__p - Hyper Viper (Barcrest) (MPU4) (set 17) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 4) m4hypvip__q - Hyper Viper (Barcrest) (MPU4) (set 18) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, hack, set 1) m4hypvip__r - Hyper Viper (Barcrest) (MPU4) (set 19) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, hack, set 2) m4hypvip__s - Hyper Viper (Barcrest) (MPU4) (set 20) + Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, hack, set 2) m4hypvip__t - Hyper Viper (Barcrest) (MPU4) (set 21) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 5) m4hypvip__u - Hyper Viper (Barcrest) (MPU4) (set 22) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 8) m4hypvip__v - Hyper Viper (Barcrest) (MPU4) (set 23) + Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, hack, set 3) m4indycr @@ -50780,215 +61029,215 @@ m4jolgem - Jolly Gems (Barcrest) (MPU4) (set 1) + Jolly Gems (Barcrest) (MPU4) (GEM 0.7) m4jolgem__0 - Jolly Gems (Barcrest) (MPU4) (set 28) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DH) m4jolgem__1 - Jolly Gems (Barcrest) (MPU4) (set 29) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DK) m4jolgem__2 - Jolly Gems (Barcrest) (MPU4) (set 30) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DR) m4jolgem__3 - Jolly Gems (Barcrest) (MPU4) (set 31) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DY) m4jolgem__4 - Jolly Gems (Barcrest) (MPU4) (set 32) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 H) m4jolgem__5 - Jolly Gems (Barcrest) (MPU4) (set 33) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 K) m4jolgem__6 - Jolly Gems (Barcrest) (MPU4) (set 34) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 R) m4jolgem__7 - Jolly Gems (Barcrest) (MPU4) (set 35) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4) m4jolgem__8 - Jolly Gems (Barcrest) (MPU4) (set 36) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 Y) m4jolgem__9 - Jolly Gems (Barcrest) (MPU4) (set 37) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DA) m4jolgem__a - Jolly Gems (Barcrest) (MPU4) (set 2) + Jolly Gems (Barcrest) (MPU4) (GEM 0.5) m4jolgem__aa - Jolly Gems (Barcrest) (MPU4) (set 38) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 B) m4jolgem__ab - Jolly Gems (Barcrest) (MPU4) (set 39) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DB) m4jolgem__ac - Jolly Gems (Barcrest) (MPU4) (set 40) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 D) m4jolgem__ad - Jolly Gems (Barcrest) (MPU4) (set 41) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DH) m4jolgem__ae - Jolly Gems (Barcrest) (MPU4) (set 42) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DK) m4jolgem__af - Jolly Gems (Barcrest) (MPU4) (set 43) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DR) m4jolgem__ag - Jolly Gems (Barcrest) (MPU4) (set 44) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DY) m4jolgem__ah - Jolly Gems (Barcrest) (MPU4) (set 45) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 H) m4jolgem__ai - Jolly Gems (Barcrest) (MPU4) (set 46) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 K) m4jolgem__aj - Jolly Gems (Barcrest) (MPU4) (set 47) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 R) m4jolgem__ak - Jolly Gems (Barcrest) (MPU4) (set 48) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5) m4jolgem__al - Jolly Gems (Barcrest) (MPU4) (set 49) + Jolly Gems (Barcrest) (MPU4) (GMS 0.5 Y) m4jolgem__am - Jolly Gems (Barcrest) (MPU4) (set 50) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6, hack) m4jolgem__an - Jolly Gems (Barcrest) (MPU4) (set 51) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4, hack) m4jolgem__ao - Jolly Gems (Barcrest) (MPU4) (set 52) + Jolly Gems (Barcrest) (MPU4) (GMS 0.3 K) m4jolgem__ap - Jolly Gems (Barcrest) (MPU4) (set 53) + Jolly Gems (Barcrest) (MPU4) (JGS 1.0 CK) m4jolgem__b - Jolly Gems (Barcrest) (MPU4) (set 3) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DA) m4jolgem__c - Jolly Gems (Barcrest) (MPU4) (set 4) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6 B) m4jolgem__d - Jolly Gems (Barcrest) (MPU4) (set 5) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DB) m4jolgem__e - Jolly Gems (Barcrest) (MPU4) (set 6) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6 D) m4jolgem__f - Jolly Gems (Barcrest) (MPU4) (set 7) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DH) m4jolgem__g - Jolly Gems (Barcrest) (MPU4) (set 8) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DR) m4jolgem__h - Jolly Gems (Barcrest) (MPU4) (set 9) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DY) m4jolgem__i - Jolly Gems (Barcrest) (MPU4) (set 10) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6 H) m4jolgem__j - Jolly Gems (Barcrest) (MPU4) (set 11) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6 R) m4jolgem__k - Jolly Gems (Barcrest) (MPU4) (set 12) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6) m4jolgem__l - Jolly Gems (Barcrest) (MPU4) (set 13) + Jolly Gems (Barcrest) (MPU4) (GEM 0.6 Y) m4jolgem__m - Jolly Gems (Barcrest) (MPU4) (set 14) + Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DA) m4jolgem__n - Jolly Gems (Barcrest) (MPU4) (set 15) + Jolly Gems (Barcrest) (MPU4) (GEM 0.7 B) m4jolgem__o - Jolly Gems (Barcrest) (MPU4) (set 16) + Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DB) m4jolgem__p - Jolly Gems (Barcrest) (MPU4) (set 17) + Jolly Gems (Barcrest) (MPU4) (GEM 0.7 D) m4jolgem__q - Jolly Gems (Barcrest) (MPU4) (set 18) + Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DH) m4jolgem__r - Jolly Gems (Barcrest) (MPU4) (set 19) + Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DR) m4jolgem__s - Jolly Gems (Barcrest) (MPU4) (set 20) + Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DY) m4jolgem__t - Jolly Gems (Barcrest) (MPU4) (set 21) + Jolly Gems (Barcrest) (MPU4) (GEM 0.7 H) m4jolgem__u - Jolly Gems (Barcrest) (MPU4) (set 22) + Jolly Gems (Barcrest) (MPU4) (GEM 0.7 R) m4jolgem__v - Jolly Gems (Barcrest) (MPU4) (set 23) + Jolly Gems (Barcrest) (MPU4) (GEM 0.7 Y) m4jolgem__w - Jolly Gems (Barcrest) (MPU4) (set 24) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DA) m4jolgem__x - Jolly Gems (Barcrest) (MPU4) (set 25) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 B) m4jolgem__y - Jolly Gems (Barcrest) (MPU4) (set 26) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DB) m4jolgem__z - Jolly Gems (Barcrest) (MPU4) (set 27) + Jolly Gems (Barcrest) (MPU4) (GMS 0.4 D) m4joljok @@ -51020,455 +61269,455 @@ m4jpgem - Jackpot Gems (Barcrest) (MPU4) (set 1) + Jackpot Gems (Barcrest) (MPU4) (CG4 0.7) m4jpgem__0 - Jackpot Gems (Barcrest) (MPU4) (set 28) + Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 YD / CG4 0.2) m4jpgem__1 - Jackpot Gems (Barcrest) (MPU4) (set 29) + Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 K / CG4 0.2) m4jpgem__2 - Jackpot Gems (Barcrest) (MPU4) (set 30) + Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 R / CG4 0.2) m4jpgem__3 - Jackpot Gems (Barcrest) (MPU4) (set 31) + Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 / CG4 0.2) m4jpgem__4 - Jackpot Gems (Barcrest) (MPU4) (set 32) + Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 Y / CG4 0.2) m4jpgem__5 - Jackpot Gems (Barcrest) (MPU4) (set 33) + Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 B) m4jpgem__6 - Jackpot Gems (Barcrest) (MPU4) (set 34) + Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 D) m4jpgem__7 - Jackpot Gems (Barcrest) (MPU4) (set 35) + Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 KD) m4jpgem__8 - Jackpot Gems (Barcrest) (MPU4) (set 36) + Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 YD) m4jpgem__9 - Jackpot Gems (Barcrest) (MPU4) (set 37) + Jackpot Gems (Barcrest) (MPU4) (JAG 0.4) m4jpgem__a - Jackpot Gems (Barcrest) (MPU4) (set 2) + Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 B) m4jpgem__a0 - Jackpot Gems (Barcrest) (MPU4) (set 64) + Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 R) m4jpgem__a1 - Jackpot Gems (Barcrest) (MPU4) (set 65) + Jackpot Gems (Barcrest) (MPU4) (JGT 0.3) m4jpgem__a2 - Jackpot Gems (Barcrest) (MPU4) (set 66) + Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 Y) m4jpgem__a3 - Jackpot Gems (Barcrest) (MPU4) (set 67) + Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 AD) m4jpgem__a4 - Jackpot Gems (Barcrest) (MPU4) (set 68) + Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 B) m4jpgem__a5 - Jackpot Gems (Barcrest) (MPU4) (set 69) + Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 BD) m4jpgem__a6 - Jackpot Gems (Barcrest) (MPU4) (set 70) + Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 D) m4jpgem__a7 - Jackpot Gems (Barcrest) (MPU4) (set 71) + Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 KD) m4jpgem__a8 - Jackpot Gems (Barcrest) (MPU4) (set 72) + Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 RD) m4jpgem__a9 - Jackpot Gems (Barcrest) (MPU4) (set 73) + Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 YD) m4jpgem__aa - Jackpot Gems (Barcrest) (MPU4) (set 38) + Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 Y) m4jpgem__ab - Jackpot Gems (Barcrest) (MPU4) (set 39) + Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 AD) m4jpgem__ac - Jackpot Gems (Barcrest) (MPU4) (set 40) + Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 B) m4jpgem__ad - Jackpot Gems (Barcrest) (MPU4) (set 41) + Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 BD) m4jpgem__ae - Jackpot Gems (Barcrest) (MPU4) (set 42) + Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 D) m4jpgem__af - Jackpot Gems (Barcrest) (MPU4) (set 43) + Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 KD) m4jpgem__ag - Jackpot Gems (Barcrest) (MPU4) (set 44) + Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 YD) m4jpgem__ah - Jackpot Gems (Barcrest) (MPU4) (set 45) + Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 K) m4jpgem__ai - Jackpot Gems (Barcrest) (MPU4) (set 46) + Jackpot Gems (Barcrest) (MPU4) (JG3 0.1) m4jpgem__aj - Jackpot Gems (Barcrest) (MPU4) (set 47) + Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 Y) m4jpgem__ak - Jackpot Gems (Barcrest) (MPU4) (set 48) + Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 B) m4jpgem__al - Jackpot Gems (Barcrest) (MPU4) (set 49) + Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 C) m4jpgem__am - Jackpot Gems (Barcrest) (MPU4) (set 50) + Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 D) m4jpgem__an - Jackpot Gems (Barcrest) (MPU4) (set 51) + Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 BD) m4jpgem__ao - Jackpot Gems (Barcrest) (MPU4) (set 52) + Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 KD) m4jpgem__ap - Jackpot Gems (Barcrest) (MPU4) (set 53) + Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 YD) m4jpgem__aq - Jackpot Gems (Barcrest) (MPU4) (set 54) + Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 K) m4jpgem__ar - Jackpot Gems (Barcrest) (MPU4) (set 55) + Jackpot Gems (Barcrest) (MPU4) (JG8 0.1) m4jpgem__as - Jackpot Gems (Barcrest) (MPU4) (set 56) + Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 AD) m4jpgem__at - Jackpot Gems (Barcrest) (MPU4) (set 57) + Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 B) m4jpgem__au - Jackpot Gems (Barcrest) (MPU4) (set 58) + Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 BD) m4jpgem__av - Jackpot Gems (Barcrest) (MPU4) (set 59) + Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 D) m4jpgem__aw - Jackpot Gems (Barcrest) (MPU4) (set 60) + Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 KD) m4jpgem__ax - Jackpot Gems (Barcrest) (MPU4) (set 61) + Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 RD) m4jpgem__ay - Jackpot Gems (Barcrest) (MPU4) (set 62) + Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 YD) m4jpgem__az - Jackpot Gems (Barcrest) (MPU4) (set 63) + Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 K) m4jpgem__b - Jackpot Gems (Barcrest) (MPU4) (set 3) + Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 BD) m4jpgem__ba - Jackpot Gems (Barcrest) (MPU4) (set 74) + Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 K) m4jpgem__bb - Jackpot Gems (Barcrest) (MPU4) (set 75) + Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 R) m4jpgem__bc - Jackpot Gems (Barcrest) (MPU4) (set 76) + Jackpot Gems (Barcrest) (MPU4) (JGU 0.2) m4jpgem__bd - Jackpot Gems (Barcrest) (MPU4) (set 77) + Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 Y) m4jpgem__be - Jackpot Gems (Barcrest) (MPU4) (set 78) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 AD / CG4 0.1) m4jpgem__bf - Jackpot Gems (Barcrest) (MPU4) (set 79) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 B / CG4 0.1) m4jpgem__bg - Jackpot Gems (Barcrest) (MPU4) (set 80) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 BD / CG4 0.1) m4jpgem__bh - Jackpot Gems (Barcrest) (MPU4) (set 81) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 C / CG4 0.1) m4jpgem__bi - Jackpot Gems (Barcrest) (MPU4) (set 82) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 D / CG4 0.1) m4jpgem__bj - Jackpot Gems (Barcrest) (MPU4) (set 83) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 KD / CG4 0.1) m4jpgem__bk - Jackpot Gems (Barcrest) (MPU4) (set 84) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 RD / CG4 0.1) m4jpgem__bl - Jackpot Gems (Barcrest) (MPU4) (set 85) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 YD / CG4 0.1) m4jpgem__bm - Jackpot Gems (Barcrest) (MPU4) (set 86) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 K / CG4 0.1) m4jpgem__bn - Jackpot Gems (Barcrest) (MPU4) (set 87) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 R / CG4 0.1) m4jpgem__bo - Jackpot Gems (Barcrest) (MPU4) (set 88) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 / CG4 0.1) m4jpgem__bp - Jackpot Gems (Barcrest) (MPU4) (set 89) + Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 Y / CG4 0.1) m4jpgem__c - Jackpot Gems (Barcrest) (MPU4) (set 4) + Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 D) m4jpgem__d - Jackpot Gems (Barcrest) (MPU4) (set 5) + Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 KD) m4jpgem__e - Jackpot Gems (Barcrest) (MPU4) (set 6) + Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 YD) m4jpgem__f - Jackpot Gems (Barcrest) (MPU4) (set 7) + Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 K) m4jpgem__g - Jackpot Gems (Barcrest) (MPU4) (set 8) + Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 AD) m4jpgem__h - Jackpot Gems (Barcrest) (MPU4) (set 9) + Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 Y) m4jpgem__i - Jackpot Gems (Barcrest) (MPU4) (set 10) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 AD / CG4 0.3) m4jpgem__j - Jackpot Gems (Barcrest) (MPU4) (set 11) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 B / CG4 0.3) m4jpgem__k - Jackpot Gems (Barcrest) (MPU4) (set 12) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 BD / CG4 0.3) m4jpgem__l - Jackpot Gems (Barcrest) (MPU4) (set 13) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 D / CG4 0.3) m4jpgem__m - Jackpot Gems (Barcrest) (MPU4) (set 14) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 KD / CG4 0.3) m4jpgem__n - Jackpot Gems (Barcrest) (MPU4) (set 15) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 RD / CG4 0.3) m4jpgem__o - Jackpot Gems (Barcrest) (MPU4) (set 16) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 YD / CG4 0.3) m4jpgem__p - Jackpot Gems (Barcrest) (MPU4) (set 17) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 K / CG4 0.3) m4jpgem__q - Jackpot Gems (Barcrest) (MPU4) (set 18) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 R / CG4 0.3) m4jpgem__r - Jackpot Gems (Barcrest) (MPU4) (set 19) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 / CG4 0.3) m4jpgem__s - Jackpot Gems (Barcrest) (MPU4) (set 20) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 Y / CG4 0.3) m4jpgem__t - Jackpot Gems (Barcrest) (MPU4) (set 21) + Jackpot Gems (Barcrest) (MPU4) (CGT 0.1 / CG4 0.1) m4jpgem__u - Jackpot Gems (Barcrest) (MPU4) (set 22) + Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 AD / CG4 0.2) m4jpgem__v - Jackpot Gems (Barcrest) (MPU4) (set 23) + Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 B / CG4 0.2) m4jpgem__w - Jackpot Gems (Barcrest) (MPU4) (set 24) + Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 BD / CG4 0.2) m4jpgem__x - Jackpot Gems (Barcrest) (MPU4) (set 25) + Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 D / CG4 0.2) m4jpgem__y - Jackpot Gems (Barcrest) (MPU4) (set 26) + Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 KD / CG4 0.2) m4jpgem__z - Jackpot Gems (Barcrest) (MPU4) (set 27) + Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 RD / CG4 0.2) m4jpgemc - Jackpot Gems Classic (Barcrest) (MPU4) (set 1) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 / CG4 0.1) m4jpgemc__a - Jackpot Gems Classic (Barcrest) (MPU4) (set 2) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 B / CG4 0.1) m4jpgemc__b - Jackpot Gems Classic (Barcrest) (MPU4) (set 3) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 BD / CG4 0.1) m4jpgemc__c - Jackpot Gems Classic (Barcrest) (MPU4) (set 4) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 C / CG4 0.1) m4jpgemc__d - Jackpot Gems Classic (Barcrest) (MPU4) (set 5) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 D / CG4 0.1) m4jpgemc__e - Jackpot Gems Classic (Barcrest) (MPU4) (set 6) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 KD / CG4 0.1) m4jpgemc__f - Jackpot Gems Classic (Barcrest) (MPU4) (set 7) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 RD / CG4 0.1) m4jpgemc__g - Jackpot Gems Classic (Barcrest) (MPU4) (set 8) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 YD / CG4 0.1) m4jpgemc__h - Jackpot Gems Classic (Barcrest) (MPU4) (set 9) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 K / CG4 0.1) m4jpgemc__i - Jackpot Gems Classic (Barcrest) (MPU4) (set 10) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 R / CG4 0.1) m4jpgemc__j - Jackpot Gems Classic (Barcrest) (MPU4) (set 11) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 AD / CG4 0.1) m4jpgemc__k - Jackpot Gems Classic (Barcrest) (MPU4) (set 12) + Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 Y / CG4 0.1) m4jpgemc__l - Jackpot Gems Classic (Barcrest) (MPU4) (set 13) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 AD / CG4 0.1) m4jpgemc__m - Jackpot Gems Classic (Barcrest) (MPU4) (set 14) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 B / CG4 0.1) m4jpgemc__n - Jackpot Gems Classic (Barcrest) (MPU4) (set 15) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 BD / CG4 0.1) m4jpgemc__o - Jackpot Gems Classic (Barcrest) (MPU4) (set 16) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 C / CG4 0.1) m4jpgemc__p - Jackpot Gems Classic (Barcrest) (MPU4) (set 17) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 D / CG4 0.1) m4jpgemc__q - Jackpot Gems Classic (Barcrest) (MPU4) (set 18) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 KD / CG4 0.1) m4jpgemc__r - Jackpot Gems Classic (Barcrest) (MPU4) (set 19) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 RD / CG4 0.1) m4jpgemc__s - Jackpot Gems Classic (Barcrest) (MPU4) (set 20) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 YD / CG4 0.1) m4jpgemc__t - Jackpot Gems Classic (Barcrest) (MPU4) (set 21) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 K / CG4 0.1) m4jpgemc__u - Jackpot Gems Classic (Barcrest) (MPU4) (set 22) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 R / CG4 0.1) m4jpgemc__v - Jackpot Gems Classic (Barcrest) (MPU4) (set 23) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 / CG4 0.1) m4jpgemc__w - Jackpot Gems Classic (Barcrest) (MPU4) (set 24) + Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 Y / CG4 0.1) m4jpjmp @@ -51524,139 +61773,139 @@ m4jwlcwn - Jewel In the Crown (Barcrest) (MPU4) (set 1) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0) m4jwlcwn__0 - Jewel In the Crown (Barcrest) (MPU4) (set 28) + Jewel In the Crown (Barcrest) (MPU4) (CJH 0.8) m4jwlcwn__1 - Jewel In the Crown (Barcrest) (MPU4) (set 29) + Jewel In the Crown (Barcrest) (MPU4) (JC8 4.4) m4jwlcwn__2 - Jewel In the Crown (Barcrest) (MPU4) (set 30) + Jewel In the Crown (Barcrest) (MPU4) (JCC 3.3) m4jwlcwn__3 - Jewel In the Crown (Barcrest) (MPU4) (set 31) + Jewel In the Crown (Barcrest) (MPU4) (JC4 3.1 K) m4jwlcwn__4 - Jewel In the Crown (Barcrest) (MPU4) (set 32) + Jewel In the Crown (Barcrest) (MPU4) (JC5 1.9 K) m4jwlcwn__5 - Jewel In the Crown (Barcrest) (MPU4) (set 33) + Jewel In the Crown (Barcrest) (MPU4) (JC8 4.2 K) m4jwlcwn__6 - Jewel In the Crown (Barcrest) (MPU4) (set 34) + Jewel In the Crown (Barcrest) (MPU4) (JCC 3.7) m4jwlcwn__a - Jewel In the Crown (Barcrest) (MPU4) (set 2) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 AD) m4jwlcwn__b - Jewel In the Crown (Barcrest) (MPU4) (set 3) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 B) m4jwlcwn__c - Jewel In the Crown (Barcrest) (MPU4) (set 4) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 BD) m4jwlcwn__d - Jewel In the Crown (Barcrest) (MPU4) (set 5) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 C) m4jwlcwn__e - Jewel In the Crown (Barcrest) (MPU4) (set 6) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 D) m4jwlcwn__f - Jewel In the Crown (Barcrest) (MPU4) (set 7) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 KD) m4jwlcwn__g - Jewel In the Crown (Barcrest) (MPU4) (set 8) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 RD) m4jwlcwn__h - Jewel In the Crown (Barcrest) (MPU4) (set 9) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 YD) m4jwlcwn__i - Jewel In the Crown (Barcrest) (MPU4) (set 10) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 K) m4jwlcwn__j - Jewel In the Crown (Barcrest) (MPU4) (set 11) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 R) m4jwlcwn__k - Jewel In the Crown (Barcrest) (MPU4) (set 12) + Jewel In the Crown (Barcrest) (MPU4) (CJE 0.8 Y) m4jwlcwn__l - Jewel In the Crown (Barcrest) (MPU4) (set 13) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 Y) m4jwlcwn__m - Jewel In the Crown (Barcrest) (MPU4) (set 14) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 AD) m4jwlcwn__n - Jewel In the Crown (Barcrest) (MPU4) (set 15) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 B) m4jwlcwn__o - Jewel In the Crown (Barcrest) (MPU4) (set 16) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 BD) m4jwlcwn__p - Jewel In the Crown (Barcrest) (MPU4) (set 17) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 C) m4jwlcwn__q - Jewel In the Crown (Barcrest) (MPU4) (set 18) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 D) m4jwlcwn__r - Jewel In the Crown (Barcrest) (MPU4) (set 19) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 KD) m4jwlcwn__s - Jewel In the Crown (Barcrest) (MPU4) (set 20) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 RD) m4jwlcwn__t - Jewel In the Crown (Barcrest) (MPU4) (set 21) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 YD) m4jwlcwn__u - Jewel In the Crown (Barcrest) (MPU4) (set 22) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 K) m4jwlcwn__v - Jewel In the Crown (Barcrest) (MPU4) (set 23) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 R) m4jwlcwn__w - Jewel In the Crown (Barcrest) (MPU4) (set 24) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0) m4jwlcwn__x - Jewel In the Crown (Barcrest) (MPU4) (set 25) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 Y) m4jwlcwn__y - Jewel In the Crown (Barcrest) (MPU4) (set 26) + Jewel In the Crown (Barcrest) (MPU4) (CJH 1.0 C, hack) m4jwlcwn__z - Jewel In the Crown (Barcrest) (MPU4) (set 27) + Jewel In the Crown (Barcrest) (MPU4) (CJE 1.0 C, hack) m4kingg @@ -51668,207 +61917,207 @@ m4kingq - Kings & Queens (Barcrest) (MPU4) (set 1) + Kings & Queens (Barcrest) (MPU4) (EE4 2.1 K/ EE 2.1) m4kingq__a - Kings & Queens (Barcrest) (MPU4) (set 2) + Kings & Queens (Barcrest) (MPU4) (EE8 2.2 K / EE 2.2) m4kingq__b - Kings & Queens (Barcrest) (MPU4) (set 3) + Kings & Queens (Barcrest) (MPU4) (EE 2.0 K / EE_ 2.0) m4kingq__c - Kings & Queens (Barcrest) (MPU4) (set 4) + Kings & Queens (Barcrest) (MPU4) (EE 1.0 K / EE 1.0) m4kingq__d - Kings & Queens (Barcrest) (MPU4) (set 5) + Kings & Queens (Barcrest) (MPU4) (EE 2.0 B / EE_ 2.0) m4kingq__e - Kings & Queens (Barcrest) (MPU4) (set 6) + Kings & Queens (Barcrest) (MPU4) (EE 1.0 B / EE 1.0) m4kingq__f - Kings & Queens (Barcrest) (MPU4) (set 7) + Kings & Queens (Barcrest) (MPU4) (EE 2.0 BD / EE_ 2.0) m4kingq__g - Kings & Queens (Barcrest) (MPU4) (set 8) + Kings & Queens (Barcrest) (MPU4) (EE 1.0 BD / EE 1.0) m4kingq__h - Kings & Queens (Barcrest) (MPU4) (set 9) + Kings & Queens (Barcrest) (MPU4) (EE 2.0 BA / EE_ 2.0) m4kingq__i - Kings & Queens (Barcrest) (MPU4) (set 10) + Kings & Queens (Barcrest) (MPU4) (EE 2.0 R / EE_ 2.0) m4kingq__j - Kings & Queens (Barcrest) (MPU4) (set 11) + Kings & Queens (Barcrest) (MPU4) (EE 1.0 CB / EE 1.0) m4kingq__k - Kings & Queens (Barcrest) (MPU4) (set 12) + Kings & Queens (Barcrest) (MPU4) (EE 2.0 YD / EE_ 2.0) m4kingq__l - Kings & Queens (Barcrest) (MPU4) (set 13) + Kings & Queens (Barcrest) (MPU4) (EE' 2.0 K / EE_ 2.0) m4kingq__m - Kings & Queens (Barcrest) (MPU4) (set 14) + Kings & Queens (Barcrest) (MPU4) (EE' 2.0 B / EE_ 2.0) m4kingq__n - Kings & Queens (Barcrest) (MPU4) (set 15) + Kings & Queens (Barcrest) (MPU4) (EE' 2.0 BD / EE_ 2.0) m4kingq__o - Kings & Queens (Barcrest) (MPU4) (set 16) + Kings & Queens (Barcrest) (MPU4) (EE' 2.0 AD / EE_ 2.0) m4kingq__p - Kings & Queens (Barcrest) (MPU4) (set 17) + Kings & Queens (Barcrest) (MPU4) (EE' 2.0 BR / EE_ 2.0) m4kingq__r - Kings & Queens (Barcrest) (MPU4) (set 18) + Kings & Queens (Barcrest) (MPU4) (EE' 2.0 YD / EE_ 2.0) m4kingq__s - Kings & Queens (Barcrest) (MPU4) (set 19) + Kings & Queens (Barcrest) (MPU4) (EE 2.0 C / EE_ 2.0) m4kingq__t - Kings & Queens (Barcrest) (MPU4) (set 20) + Kings & Queens (Barcrest) (MPU4) (EE2 1.0 / EE2 1.0) m4kingqc - Kings & Queens Classic (Barcrest) (MPU4) (set 1) + Kings & Queens Classic (Barcrest) (MPU4) (CN4 / CN4 6.0 YD) m4kingqc__0 - Kings & Queens Classic (Barcrest) (MPU4) (set 26) + Kings & Queens Classic (Barcrest) (MPU4) (CNT, CN4 1.0 YD) m4kingqc__1 - Kings & Queens Classic (Barcrest) (MPU4) (set 27) + Kings & Queens Classic (Barcrest) (MPU4) (CN 1.4 D) m4kingqc__2 - Kings & Queens Classic (Barcrest) (MPU4) (set 28) + Kings & Queens Classic (Barcrest) (MPU4) (CN 1.4 K) m4kingqc__3 - Kings & Queens Classic (Barcrest) (MPU4) (set 29) + Kings & Queens Classic (Barcrest) (MPU4) (CN 1.4 B) m4kingqc__4 - Kings & Queens Classic (Barcrest) (MPU4) (set 30) + Kings & Queens Classic (Barcrest) (MPU4) (CN 1.4 AD) m4kingqc__5 - Kings & Queens Classic (Barcrest) (MPU4) (set 31) + Kings & Queens Classic (Barcrest) (MPU4) (CN 1.4 BR) m4kingqc__a - Kings & Queens Classic (Barcrest) (MPU4) (set 2) + Kings & Queens Classic (Barcrest) (MPU4) (CN / CN 3.0 YD) m4kingqc__b - Kings & Queens Classic (Barcrest) (MPU4) (set 3) + Kings & Queens Classic (Barcrest) (MPU4) (CN / CN 3.0 D) m4kingqc__c - Kings & Queens Classic (Barcrest) (MPU4) (set 4) + Kings & Queens Classic (Barcrest) (MPU4) (CN / CN 2.0 K) m4kingqc__d - Kings & Queens Classic (Barcrest) (MPU4) (set 5) + Kings & Queens Classic (Barcrest) (MPU4) (CN / CN 3.0 K) m4kingqc__e - Kings & Queens Classic (Barcrest) (MPU4) (set 6) + Kings & Queens Classic (Barcrest) (MPU4) (CN4 5.0 K) m4kingqc__f - Kings & Queens Classic (Barcrest) (MPU4) (set 7) + Kings & Queens Classic (Barcrest) (MPU4) (CN / CN 2.0 B) m4kingqc__g - Kings & Queens Classic (Barcrest) (MPU4) (set 8) + Kings & Queens Classic (Barcrest) (MPU4) (CN / CN 3.0 B) m4kingqc__h - Kings & Queens Classic (Barcrest) (MPU4) (set 9) + Kings & Queens Classic (Barcrest) (MPU4) (CN4 5.0 B) m4kingqc__i - Kings & Queens Classic (Barcrest) (MPU4) (set 10) + Kings & Queens Classic (Barcrest) (MPU4) (CN4 / CN4 6.0 BA) m4kingqc__j - Kings & Queens Classic (Barcrest) (MPU4) (set 11) + Kings & Queens Classic (Barcrest) (MPU4) (CN / CN 3.0 BA) m4kingqc__k - Kings & Queens Classic (Barcrest) (MPU4) (set 12) + Kings & Queens Classic (Barcrest) (MPU4) (CN4 5.0 BA) m4kingqc__l - Kings & Queens Classic (Barcrest) (MPU4) (set 13) + Kings & Queens Classic (Barcrest) (MPU4) (CN / CN 2.0 R) m4kingqc__m - Kings & Queens Classic (Barcrest) (MPU4) (set 14) + Kings & Queens Classic (Barcrest) (MPU4) (CN / CN 3.0 BR) m4kingqc__n - Kings & Queens Classic (Barcrest) (MPU4) (set 15) + Kings & Queens Classic (Barcrest) (MPU4) (CN4 5.0 BR) m4kingqc__q - Kings & Queens Classic (Barcrest) (MPU4) (set 16) + Kings & Queens Classic (Barcrest) (MPU4) (CN4 5.0 YD) m4kingqc__r - Kings & Queens Classic (Barcrest) (MPU4) (set 17) + Kings & Queens Classic (Barcrest) (MPU4) (CNT, CN4 2.0 YD) m4kingqc__s - Kings & Queens Classic (Barcrest) (MPU4) (set 18) + Kings & Queens Classic (Barcrest) (MPU4) (CNT, CN4 2.0 D) m4kingqc__t - Kings & Queens Classic (Barcrest) (MPU4) (set 19) + Kings & Queens Classic (Barcrest) (MPU4) (CNT, CN4 2.0 Y) m4kingqc__u - Kings & Queens Classic (Barcrest) (MPU4) (set 20) + Kings & Queens Classic (Barcrest) (MPU4) (CNT, CN4 2.0 K) m4kingqc__v - Kings & Queens Classic (Barcrest) (MPU4) (set 21) + Kings & Queens Classic (Barcrest) (MPU4) (CNT, CN4 2.0 B) m4kingqc__w - Kings & Queens Classic (Barcrest) (MPU4) (set 22) + Kings & Queens Classic (Barcrest) (MPU4) (CNT, CN4 2.0 BD) m4kingqc__x - Kings & Queens Classic (Barcrest) (MPU4) (set 23) + Kings & Queens Classic (Barcrest) (MPU4) (CNT, CN4 2.0 AD) m4kingqc__y - Kings & Queens Classic (Barcrest) (MPU4) (set 24) + Kings & Queens Classic (Barcrest) (MPU4) (CNT, CN4 2.0 BR) m4kingqc__z - Kings & Queens Classic (Barcrest) (MPU4) (set 25) + Kings & Queens Classic (Barcrest) (MPU4) (CNT, CN4 1.0) m4kingqn @@ -52020,475 +62269,475 @@ m4lucklv - Lucky Las Vegas (Barcrest) (MPU4) (set 1) + Lucky Las Vegas (Barcrest) (MPU4) (LLV 0.2) m4lucklv__0 - Lucky Las Vegas (Barcrest) (MPU4) (set 28) + Lucky Las Vegas (Barcrest) (MPU4) (LLT 0.3 K) m4lucklv__1 - Lucky Las Vegas (Barcrest) (MPU4) (set 29) + Lucky Las Vegas (Barcrest) (MPU4) (LLT 0.3 R) m4lucklv__2 - Lucky Las Vegas (Barcrest) (MPU4) (set 30) + Lucky Las Vegas (Barcrest) (MPU4) (LLT 0.3) m4lucklv__3 - Lucky Las Vegas (Barcrest) (MPU4) (set 31) + Lucky Las Vegas (Barcrest) (MPU4) (LLT 0.3 Y) m4lucklv__4 - Lucky Las Vegas (Barcrest) (MPU4) (set 32) + Lucky Las Vegas (Barcrest) (MPU4) (LLU 0.1 AD) m4lucklv__5 - Lucky Las Vegas (Barcrest) (MPU4) (set 33) + Lucky Las Vegas (Barcrest) (MPU4) (LLU 0.1 B) m4lucklv__6 - Lucky Las Vegas (Barcrest) (MPU4) (set 34) + Lucky Las Vegas (Barcrest) (MPU4) (LLU 0.1 BD) m4lucklv__7 - Lucky Las Vegas (Barcrest) (MPU4) (set 35) + Lucky Las Vegas (Barcrest) (MPU4) (LLU 0.1 D) m4lucklv__8 - Lucky Las Vegas (Barcrest) (MPU4) (set 36) + Lucky Las Vegas (Barcrest) (MPU4) (LLU 0.1 KD) m4lucklv__9 - Lucky Las Vegas (Barcrest) (MPU4) (set 37) + Lucky Las Vegas (Barcrest) (MPU4) (LLU 0.1 RD) m4lucklv__a - Lucky Las Vegas (Barcrest) (MPU4) (set 2) + Lucky Las Vegas (Barcrest) (MPU4) (LL3 0.1 AD) m4lucklv__aa - Lucky Las Vegas (Barcrest) (MPU4) (set 38) + Lucky Las Vegas (Barcrest) (MPU4) (LLU 0.1 YD) m4lucklv__ab - Lucky Las Vegas (Barcrest) (MPU4) (set 39) + Lucky Las Vegas (Barcrest) (MPU4) (LLU 0.1 K) m4lucklv__ac - Lucky Las Vegas (Barcrest) (MPU4) (set 40) + Lucky Las Vegas (Barcrest) (MPU4) (LLU 0.1 R) m4lucklv__ad - Lucky Las Vegas (Barcrest) (MPU4) (set 41) + Lucky Las Vegas (Barcrest) (MPU4) (LLU 0.1) m4lucklv__ae - Lucky Las Vegas (Barcrest) (MPU4) (set 42) + Lucky Las Vegas (Barcrest) (MPU4) (LLU 0.1 Y) m4lucklv__af - Lucky Las Vegas (Barcrest) (MPU4) (set 43) + Lucky Las Vegas (Barcrest) (MPU4) (LLV 0.2 B) m4lucklv__ag - Lucky Las Vegas (Barcrest) (MPU4) (set 44) + Lucky Las Vegas (Barcrest) (MPU4) (LLV 0.2 C) m4lucklv__ah - Lucky Las Vegas (Barcrest) (MPU4) (set 45) + Lucky Las Vegas (Barcrest) (MPU4) (LLV 0.2 D) m4lucklv__ai - Lucky Las Vegas (Barcrest) (MPU4) (set 46) + Lucky Las Vegas (Barcrest) (MPU4) (LLV 0.2 R) m4lucklv__b - Lucky Las Vegas (Barcrest) (MPU4) (set 3) + Lucky Las Vegas (Barcrest) (MPU4) (LL3 0.1 B) m4lucklv__c - Lucky Las Vegas (Barcrest) (MPU4) (set 4) + Lucky Las Vegas (Barcrest) (MPU4) (LL3 0.1 BD) m4lucklv__d - Lucky Las Vegas (Barcrest) (MPU4) (set 5) + Lucky Las Vegas (Barcrest) (MPU4) (LL3 0.1 D) m4lucklv__e - Lucky Las Vegas (Barcrest) (MPU4) (set 6) + Lucky Las Vegas (Barcrest) (MPU4) (LL3 0.1 KD) m4lucklv__f - Lucky Las Vegas (Barcrest) (MPU4) (set 7) + Lucky Las Vegas (Barcrest) (MPU4) (LL3 0.1 YD) m4lucklv__g - Lucky Las Vegas (Barcrest) (MPU4) (set 8) + Lucky Las Vegas (Barcrest) (MPU4) (LL3 0.1 K) m4lucklv__h - Lucky Las Vegas (Barcrest) (MPU4) (set 9) + Lucky Las Vegas (Barcrest) (MPU4) (LL3 0.1) m4lucklv__i - Lucky Las Vegas (Barcrest) (MPU4) (set 10) + Lucky Las Vegas (Barcrest) (MPU4) (LL3 0.1 Y) m4lucklv__j - Lucky Las Vegas (Barcrest) (MPU4) (set 11) + Lucky Las Vegas (Barcrest) (MPU4) (LL8 0.1 AD) m4lucklv__k - Lucky Las Vegas (Barcrest) (MPU4) (set 12) + Lucky Las Vegas (Barcrest) (MPU4) (LL8 0.1 B) m4lucklv__l - Lucky Las Vegas (Barcrest) (MPU4) (set 13) + Lucky Las Vegas (Barcrest) (MPU4) (LL8 0.1 BD) m4lucklv__m - Lucky Las Vegas (Barcrest) (MPU4) (set 14) + Lucky Las Vegas (Barcrest) (MPU4) (LL8 0.1 C) m4lucklv__n - Lucky Las Vegas (Barcrest) (MPU4) (set 15) + Lucky Las Vegas (Barcrest) (MPU4) (LL8 0.1 D) m4lucklv__o - Lucky Las Vegas (Barcrest) (MPU4) (set 16) + Lucky Las Vegas (Barcrest) (MPU4) (LL8 0.1 KD) m4lucklv__p - Lucky Las Vegas (Barcrest) (MPU4) (set 17) + Lucky Las Vegas (Barcrest) (MPU4) (LL8 0.1 YD) m4lucklv__q - Lucky Las Vegas (Barcrest) (MPU4) (set 18) + Lucky Las Vegas (Barcrest) (MPU4) (LL8 0.1 K) m4lucklv__r - Lucky Las Vegas (Barcrest) (MPU4) (set 19) + Lucky Las Vegas (Barcrest) (MPU4) (LL8 0.1) m4lucklv__s - Lucky Las Vegas (Barcrest) (MPU4) (set 20) + Lucky Las Vegas (Barcrest) (MPU4) (LL8 0.1 Y) m4lucklv__t - Lucky Las Vegas (Barcrest) (MPU4) (set 21) + Lucky Las Vegas (Barcrest) (MPU4) (LLT 0.3 AD) m4lucklv__u - Lucky Las Vegas (Barcrest) (MPU4) (set 22) + Lucky Las Vegas (Barcrest) (MPU4) (LLT 0.3 B) m4lucklv__v - Lucky Las Vegas (Barcrest) (MPU4) (set 23) + Lucky Las Vegas (Barcrest) (MPU4) (LLT 0.3 BD) m4lucklv__w - Lucky Las Vegas (Barcrest) (MPU4) (set 24) + Lucky Las Vegas (Barcrest) (MPU4) (LLT 0.3 D) m4lucklv__x - Lucky Las Vegas (Barcrest) (MPU4) (set 25) + Lucky Las Vegas (Barcrest) (MPU4) (LLT 0.3 KD) m4lucklv__y - Lucky Las Vegas (Barcrest) (MPU4) (set 26) + Lucky Las Vegas (Barcrest) (MPU4) (LLT 0.3 RD) m4lucklv__z - Lucky Las Vegas (Barcrest) (MPU4) (set 27) + Lucky Las Vegas (Barcrest) (MPU4) (LLT 0.3 YD) m4lucksc - Lucky Strike Club (Barcrest) (MPU4) (set 1) + Lucky Strike Club (Barcrest) (MPU4) (CLU 1.4) m4lucksc__a - Lucky Strike Club (Barcrest) (MPU4) (set 2) + Lucky Strike Club (Barcrest) (MPU4) (CLU 1.4 F) m4lucksc__b - Lucky Strike Club (Barcrest) (MPU4) (set 3) + Lucky Strike Club (Barcrest) (MPU4) (CLU 1.4 D) m4lucksc__c - Lucky Strike Club (Barcrest) (MPU4) (set 4) + Lucky Strike Club (Barcrest) (MPU4) (GLS 0.6 D) m4lucksc__d - Lucky Strike Club (Barcrest) (MPU4) (set 5) + Lucky Strike Club (Barcrest) (MPU4) (GLS 0.6 F) m4lucksc__e - Lucky Strike Club (Barcrest) (MPU4) (set 6) + Lucky Strike Club (Barcrest) (MPU4) (GLS 0.6) m4lucksc__f - Lucky Strike Club (Barcrest) (MPU4) (set 7) + Lucky Strike Club (Barcrest) (MPU4) (GS3 0.1 D) m4lucksc__g - Lucky Strike Club (Barcrest) (MPU4) (set 8) + Lucky Strike Club (Barcrest) (MPU4) (GS3 0.1 F) m4lucksc__h - Lucky Strike Club (Barcrest) (MPU4) (set 9) + Lucky Strike Club (Barcrest) (MPU4) (GS3 0.1) m4lucksc__i - Lucky Strike Club (Barcrest) (MPU4) (set 10) + Lucky Strike Club (Barcrest) (MPU4) (LS3 0.1 D) m4lucksc__j - Lucky Strike Club (Barcrest) (MPU4) (set 11) + Lucky Strike Club (Barcrest) (MPU4) (LS3 0.1 F) m4lucksc__k - Lucky Strike Club (Barcrest) (MPU4) (set 12) + Lucky Strike Club (Barcrest) (MPU4) (LS3 0.1) m4lucksc__l - Lucky Strike Club (Barcrest) (MPU4) (set 13) + Lucky Strike Club (Barcrest) (MPU4) (LSC 1.0) m4luckst - Lucky Strike (Barcrest) (MPU4) (set 1) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6) m4luckst__0 - Lucky Strike (Barcrest) (MPU4) (set 28) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 K) m4luckst__1 - Lucky Strike (Barcrest) (MPU4) (set 29) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 R) m4luckst__2 - Lucky Strike (Barcrest) (MPU4) (set 30) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7) m4luckst__3 - Lucky Strike (Barcrest) (MPU4) (set 31) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 Y) m4luckst__4 - Lucky Strike (Barcrest) (MPU4) (set 32) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 AD) m4luckst__5 - Lucky Strike (Barcrest) (MPU4) (set 33) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 B) m4luckst__6 - Lucky Strike (Barcrest) (MPU4) (set 34) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 BD) m4luckst__7 - Lucky Strike (Barcrest) (MPU4) (set 35) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 D) m4luckst__8 - Lucky Strike (Barcrest) (MPU4) (set 36) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 DH) m4luckst__9 - Lucky Strike (Barcrest) (MPU4) (set 37) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 KD) m4luckst__a - Lucky Strike (Barcrest) (MPU4) (set 2) + Lucky Strike (Barcrest) (MPU4) (LST 0.9, hack) m4luckst__aa - Lucky Strike (Barcrest) (MPU4) (set 38) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 RD) m4luckst__ab - Lucky Strike (Barcrest) (MPU4) (set 39) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 YD) m4luckst__ac - Lucky Strike (Barcrest) (MPU4) (set 40) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 H) m4luckst__ad - Lucky Strike (Barcrest) (MPU4) (set 41) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 K) m4luckst__ae - Lucky Strike (Barcrest) (MPU4) (set 42) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 R) m4luckst__af - Lucky Strike (Barcrest) (MPU4) (set 43) + Lucky Strike (Barcrest) (MPU4) (LST 0.9) m4luckst__ag - Lucky Strike (Barcrest) (MPU4) (set 44) + Lucky Strike (Barcrest) (MPU4) (LST 0.9 Y) m4luckst__ah - Lucky Strike (Barcrest) (MPU4) (set 45) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 AD) m4luckst__ai - Lucky Strike (Barcrest) (MPU4) (set 46) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 B) m4luckst__aj - Lucky Strike (Barcrest) (MPU4) (set 47) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 BD) m4luckst__ak - Lucky Strike (Barcrest) (MPU4) (set 48) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 D) m4luckst__al - Lucky Strike (Barcrest) (MPU4) (set 49) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 DH) m4luckst__am - Lucky Strike (Barcrest) (MPU4) (set 50) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 KD) m4luckst__an - Lucky Strike (Barcrest) (MPU4) (set 51) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 RD) m4luckst__ao - Lucky Strike (Barcrest) (MPU4) (set 52) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 YD) m4luckst__ap - Lucky Strike (Barcrest) (MPU4) (set 53) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 H) m4luckst__aq - Lucky Strike (Barcrest) (MPU4) (set 54) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 K) m4luckst__ar - Lucky Strike (Barcrest) (MPU4) (set 55) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 R) m4luckst__as - Lucky Strike (Barcrest) (MPU4) (set 56) + Lucky Strike (Barcrest) (MPU4) (LST 1.0) m4luckst__at - Lucky Strike (Barcrest) (MPU4) (set 57) + Lucky Strike (Barcrest) (MPU4) (LST 1.0 Y) m4luckst__au - Lucky Strike (Barcrest) (MPU4) (set 58) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 C, hack, set 1) m4luckst__av - Lucky Strike (Barcrest) (MPU4) (set 59) + Lucky Strike (Barcrest) (MPU4) (LSS 1.0 K, set 1) m4luckst__aw - Lucky Strike (Barcrest) (MPU4) (set 60) + Lucky Strike (Barcrest) (MPU4) (LSS 1.0 K, set 2) m4luckst__b - Lucky Strike (Barcrest) (MPU4) (set 3) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 C, hack, set 2) m4luckst__c - Lucky Strike (Barcrest) (MPU4) (set 4) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 AD) m4luckst__d - Lucky Strike (Barcrest) (MPU4) (set 5) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 B) m4luckst__e - Lucky Strike (Barcrest) (MPU4) (set 6) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 BD) m4luckst__f - Lucky Strike (Barcrest) (MPU4) (set 7) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 C) m4luckst__g - Lucky Strike (Barcrest) (MPU4) (set 8) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 D) m4luckst__h - Lucky Strike (Barcrest) (MPU4) (set 9) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 DH) m4luckst__i - Lucky Strike (Barcrest) (MPU4) (set 10) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 KD) m4luckst__j - Lucky Strike (Barcrest) (MPU4) (set 11) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 RD) m4luckst__k - Lucky Strike (Barcrest) (MPU4) (set 12) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 YD) m4luckst__l - Lucky Strike (Barcrest) (MPU4) (set 13) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 H) m4luckst__m - Lucky Strike (Barcrest) (MPU4) (set 14) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 K) m4luckst__n - Lucky Strike (Barcrest) (MPU4) (set 15) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 R) m4luckst__p - Lucky Strike (Barcrest) (MPU4) (set 17) + Lucky Strike (Barcrest) (MPU4) (LSS 0.6 Y) m4luckst__q - Lucky Strike (Barcrest) (MPU4) (set 18) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 AD) m4luckst__r - Lucky Strike (Barcrest) (MPU4) (set 19) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 B) m4luckst__s - Lucky Strike (Barcrest) (MPU4) (set 20) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 BD) m4luckst__t - Lucky Strike (Barcrest) (MPU4) (set 21) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 C) m4luckst__u - Lucky Strike (Barcrest) (MPU4) (set 22) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 D) m4luckst__v - Lucky Strike (Barcrest) (MPU4) (set 23) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 DH) m4luckst__w - Lucky Strike (Barcrest) (MPU4) (set 24) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 KD) m4luckst__x - Lucky Strike (Barcrest) (MPU4) (set 25) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 RD) m4luckst__y - Lucky Strike (Barcrest) (MPU4) (set 26) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 YD) m4luckst__z - Lucky Strike (Barcrest) (MPU4) (set 27) + Lucky Strike (Barcrest) (MPU4) (LSS 0.7 H) m4luckwb @@ -52520,251 +62769,251 @@ m4luxor - Luxor (Barcrest) (MPU4) (set 1) + Luxor (Barcrest) (MPU4) (LUX 0.6) m4luxor__a - Luxor (Barcrest) (MPU4) (set 2) + Luxor (Barcrest) (MPU4) (LX5 1.0, hack, set 1) m4luxor__b - Luxor (Barcrest) (MPU4) (set 3) + Luxor (Barcrest) (MPU4) (LX101.0, hack?, set 1) m4luxor__c - Luxor (Barcrest) (MPU4) (set 4) + Luxor (Barcrest) (MPU4) (V1 0.6, hack, set 2) m4luxor__d - Luxor (Barcrest) (MPU4) (set 5) + Luxor (Barcrest) (MPU4) (LX5 1.0, hack, set 2) m4luxor__e - Luxor (Barcrest) (MPU4) (set 6) + Luxor (Barcrest) (MPU4) (LX5 1.0, hack, set 3) m4luxor__f - Luxor (Barcrest) (MPU4) (set 7) + Luxor (Barcrest) (MPU4) (LUX 0.6 C) m4luxor__g - Luxor (Barcrest) (MPU4) (set 8) + Luxor (Barcrest) (MPU4) (LUX 0.6 D) m4luxor__h - Luxor (Barcrest) (MPU4) (set 9) + Luxor (Barcrest) (MPU4) (LUX 0.6 K) m4luxor__i - Luxor (Barcrest) (MPU4) (set 10) + Luxor (Barcrest) (MPU4) (LUX 0.6 Y) m4luxor__j - Luxor (Barcrest) (MPU4) (set 11) + Luxor (Barcrest) (MPU4) (V1 0.6, hack, set 1) m4luxor__k - Luxor (Barcrest) (MPU4) (set 12) + Luxor (Barcrest) (MPU4) (LX5 1.0, hack, set 4) m4luxor__l - Luxor (Barcrest) (MPU4) (set 13) + Luxor (Barcrest) (MPU4) (LX5 1.0, hack, set 5) m4luxor__m - Luxor (Barcrest) (MPU4) (set 14) + Luxor (Barcrest) (MPU4) (LX101.0, hack?, set 2) m4luxor__n - Luxor (Barcrest) (MPU4) (set 15) + Luxor (Barcrest) (MPU4) (LX101.0, hack?, set 3) m4luxor__o - Luxor (Barcrest) (MPU4) (set 16) + Luxor (Barcrest) (MPU4) (V1 0.6, hack, set 3) m4luxor__p - Luxor (Barcrest) (MPU4) (set 17) + Luxor (Barcrest) (MPU4) (V1 0.6, hack, set 4) m4luxor__q - Luxor (Barcrest) (MPU4) (set 18) + Luxor (Barcrest) (MPU4) (LX5 1.0 K) m4luxor__r - Luxor (Barcrest) (MPU4) (set 19) + Luxor (Barcrest) (MPU4) (LX5 1.0) m4luxor__s - Luxor (Barcrest) (MPU4) (set 20) + Luxor (Barcrest) (MPU4) (LX5 1.0 YD) m4luxor__t - Luxor (Barcrest) (MPU4) (set 21) + Luxor (Barcrest) (MPU4) (LX5 1.0 D) m4luxor__u - Luxor (Barcrest) (MPU4) (set 22) + Luxor (Barcrest) (MPU4) (LX101.0 K) m4luxor__v - Luxor (Barcrest) (MPU4) (set 23) + Luxor (Barcrest) (MPU4) (LX101.0) m4luxor__w - Luxor (Barcrest) (MPU4) (set 24) + Luxor (Barcrest) (MPU4) (LX101.0 YD) m4luxor__x - Luxor (Barcrest) (MPU4) (set 25) + Luxor (Barcrest) (MPU4) (LX101.0 D) m4luxor__y - Luxor (Barcrest) (MPU4) (set 26) + Luxor (Barcrest) (MPU4) (LX5 1.0 CK) m4luxor__z - Luxor (Barcrest) (MPU4) (set 27) + Luxor (Barcrest) (MPU4) (LX101.0 CK) m4lvlcl - Lucky Las Vegas Classic (Barcrest) (MPU4) (set 1) + Lucky Las Vegas Classic (Barcrest) (MPU4) (LLU 0.1) m4lvlcl__a - Lucky Las Vegas Classic (Barcrest) (MPU4) (set 2) + Lucky Las Vegas Classic (Barcrest) (MPU4) (LLU 3.0) m4lvlcl__b - Lucky Las Vegas Classic (Barcrest) (MPU4) (set 3) + Lucky Las Vegas Classic (Barcrest) (MPU4) (LLU 3.0 D) m4lvlcl__c - Lucky Las Vegas Classic (Barcrest) (MPU4) (set 4) + Lucky Las Vegas Classic (Barcrest) (MPU4) (LLU 3.0 K) m4lvlcl__d - Lucky Las Vegas Classic (Barcrest) (MPU4) (set 5) + Lucky Las Vegas Classic (Barcrest) (MPU4) (LLU 3.0 B) m4lvlcl__e - Lucky Las Vegas Classic (Barcrest) (MPU4) (set 6) + Lucky Las Vegas Classic (Barcrest) (MPU4) (LLU 0.1 AD) m4lvlcl__f - Lucky Las Vegas Classic (Barcrest) (MPU4) (set 7) + Lucky Las Vegas Classic (Barcrest) (MPU4) (LLU 3.0 AD) m4madhse - Mad House (Barcrest) (MPU4) (set 1) + Mad House (Barcrest) (MPU4) (MH5 0.2) m4madhse__0 - Mad House (Barcrest) (MPU4) (set 28) + Mad House (Barcrest) (MPU4) (MHT 0.2) m4madhse__a - Mad House (Barcrest) (MPU4) (set 2) + Mad House (Barcrest) (MPU4) (MAD 0.5 C) m4madhse__b - Mad House (Barcrest) (MPU4) (set 3) + Mad House (Barcrest) (MPU4) (MHT 0.2 Y) m4madhse__c - Mad House (Barcrest) (MPU4) (set 4) + Mad House (Barcrest) (MPU4) (MAD 0.5) m4madhse__d - Mad House (Barcrest) (MPU4) (set 5) + Mad House (Barcrest) (MPU4) (MD8 0.1 C) m4madhse__e - Mad House (Barcrest) (MPU4) (set 6) + Mad House (Barcrest) (MPU4) (MD8 0.1 D) m4madhse__f - Mad House (Barcrest) (MPU4) (set 7) + Mad House (Barcrest) (MPU4) (MD8 0.1 YD) m4madhse__g - Mad House (Barcrest) (MPU4) (set 8) + Mad House (Barcrest) (MPU4) (MD8 0.1 K) m4madhse__h - Mad House (Barcrest) (MPU4) (set 9) + Mad House (Barcrest) (MPU4) (MD8 0.1) m4madhse__i - Mad House (Barcrest) (MPU4) (set 10) + Mad House (Barcrest) (MPU4) (MD8 0.1 Y) m4madhse__j - Mad House (Barcrest) (MPU4) (set 11) + Mad House (Barcrest) (MPU4) (MH5 0.2 AD) m4madhse__k - Mad House (Barcrest) (MPU4) (set 12) + Mad House (Barcrest) (MPU4) (MH5 0.2 B) m4madhse__l - Mad House (Barcrest) (MPU4) (set 13) + Mad House (Barcrest) (MPU4) (MH5 0.2 BD) m4madhse__m - Mad House (Barcrest) (MPU4) (set 14) + Mad House (Barcrest) (MPU4) (MH5 0.2 D) m4madhse__n - Mad House (Barcrest) (MPU4) (set 15) + Mad House (Barcrest) (MPU4) (MH5 0.2 KD) m4madhse__o - Mad House (Barcrest) (MPU4) (set 16) + Mad House (Barcrest) (MPU4) (MH5 0.2 RD) m4madhse__p - Mad House (Barcrest) (MPU4) (set 17) + Mad House (Barcrest) (MPU4) (MH5 0.2 YD) m4madhse__q - Mad House (Barcrest) (MPU4) (set 18) + Mad House (Barcrest) (MPU4) (MH5 0.2 K) m4madhse__r - Mad House (Barcrest) (MPU4) (set 19) + Mad House (Barcrest) (MPU4) (MH5 0.2 R) m4madhse__s - Mad House (Barcrest) (MPU4) (set 20) + Mad House (Barcrest) (MPU4) (MH5 0.2 Y) m4madhse__t - Mad House (Barcrest) (MPU4) (set 21) + Mad House (Barcrest) (MPU4) (MHT 0.2 AD) m4madhse__u - Mad House (Barcrest) (MPU4) (set 22) + Mad House (Barcrest) (MPU4) (MHT 0.2 B) m4madhse__v - Mad House (Barcrest) (MPU4) (set 23) + Mad House (Barcrest) (MPU4) (MHT 0.2 BD) m4madhse__w - Mad House (Barcrest) (MPU4) (set 24) + Mad House (Barcrest) (MPU4) (MHT 0.2 D) m4madhse__x - Mad House (Barcrest) (MPU4) (set 25) + Mad House (Barcrest) (MPU4) (MHT 0.2 KD) m4madhse__y - Mad House (Barcrest) (MPU4) (set 26) + Mad House (Barcrest) (MPU4) (MHT 0.2 YD) m4madhse__z - Mad House (Barcrest) (MPU4) (set 27) + Mad House (Barcrest) (MPU4) (MHT 0.2 K) m4madmnc @@ -52912,247 +63161,247 @@ m4mag7s - Magnificent 7s (Barcrest) (MPU4) (set 1) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2) m4mag7s__0 - Magnificent 7s (Barcrest) (MPU4) (set 28) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 Y) m4mag7s__1 - Magnificent 7s (Barcrest) (MPU4) (set 29) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5, hack) m4mag7s__2 - Magnificent 7s (Barcrest) (MPU4) (set 30) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2, hack) m4mag7s__3 - Magnificent 7s (Barcrest) (MPU4) (set 31) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6, hack) m4mag7s__4 - Magnificent 7s (Barcrest) (MPU4) (set 32) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 AD) m4mag7s__5 - Magnificent 7s (Barcrest) (MPU4) (set 33) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 B) m4mag7s__6 - Magnificent 7s (Barcrest) (MPU4) (set 34) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 BD) m4mag7s__7 - Magnificent 7s (Barcrest) (MPU4) (set 35) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 C) m4mag7s__8 - Magnificent 7s (Barcrest) (MPU4) (set 36) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 D) m4mag7s__9 - Magnificent 7s (Barcrest) (MPU4) (set 37) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 DH) m4mag7s__a - Magnificent 7s (Barcrest) (MPU4) (set 2) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.4) m4mag7s__aa - Magnificent 7s (Barcrest) (MPU4) (set 38) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 KD) m4mag7s__ab - Magnificent 7s (Barcrest) (MPU4) (set 39) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 RD) m4mag7s__ac - Magnificent 7s (Barcrest) (MPU4) (set 40) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 YD) m4mag7s__ad - Magnificent 7s (Barcrest) (MPU4) (set 41) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 H) m4mag7s__ae - Magnificent 7s (Barcrest) (MPU4) (set 42) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 K) m4mag7s__af - Magnificent 7s (Barcrest) (MPU4) (set 43) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 R) m4mag7s__ag - Magnificent 7s (Barcrest) (MPU4) (set 44) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 Y) m4mag7s__ah - Magnificent 7s (Barcrest) (MPU4) (set 45) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 AD) m4mag7s__ai - Magnificent 7s (Barcrest) (MPU4) (set 46) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 B) m4mag7s__aj - Magnificent 7s (Barcrest) (MPU4) (set 47) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 BD) m4mag7s__ak - Magnificent 7s (Barcrest) (MPU4) (set 48) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 C) m4mag7s__al - Magnificent 7s (Barcrest) (MPU4) (set 49) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 D) m4mag7s__am - Magnificent 7s (Barcrest) (MPU4) (set 50) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 DH) m4mag7s__an - Magnificent 7s (Barcrest) (MPU4) (set 51) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 KD) m4mag7s__ao - Magnificent 7s (Barcrest) (MPU4) (set 52) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 RD) m4mag7s__ap - Magnificent 7s (Barcrest) (MPU4) (set 53) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 YD) m4mag7s__aq - Magnificent 7s (Barcrest) (MPU4) (set 54) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 H) m4mag7s__ar - Magnificent 7s (Barcrest) (MPU4) (set 55) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 K) m4mag7s__as - Magnificent 7s (Barcrest) (MPU4) (set 56) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 R) m4mag7s__at - Magnificent 7s (Barcrest) (MPU4) (set 57) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3) m4mag7s__au - Magnificent 7s (Barcrest) (MPU4) (set 58) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.3 Y) m4mag7s__av - Magnificent 7s (Barcrest) (MPU4) (set 59) + Magnificent 7s (Barcrest) (MPU4) (MAS 1.0, bad?) m4mag7s__aw - Magnificent 7s (Barcrest) (MPU4) (set 60) + Magnificent 7s (Barcrest) (MPU4) (M7 2.0 CD) m4mag7s__ax - Magnificent 7s (Barcrest) (MPU4) (set 61) + Magnificent 7s (Barcrest) (MPU4) (M7 2.0 CK) m4mag7s__b - Magnificent 7s (Barcrest) (MPU4) (set 3) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 AD) m4mag7s__c - Magnificent 7s (Barcrest) (MPU4) (set 4) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 B) m4mag7s__d - Magnificent 7s (Barcrest) (MPU4) (set 5) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 BD) m4mag7s__e - Magnificent 7s (Barcrest) (MPU4) (set 6) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 D) m4mag7s__f - Magnificent 7s (Barcrest) (MPU4) (set 7) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 DH) m4mag7s__g - Magnificent 7s (Barcrest) (MPU4) (set 8) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 KD) m4mag7s__h - Magnificent 7s (Barcrest) (MPU4) (set 9) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 RD) m4mag7s__i - Magnificent 7s (Barcrest) (MPU4) (set 10) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 YD) m4mag7s__j - Magnificent 7s (Barcrest) (MPU4) (set 11) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 H) m4mag7s__k - Magnificent 7s (Barcrest) (MPU4) (set 12) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 K) m4mag7s__l - Magnificent 7s (Barcrest) (MPU4) (set 13) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 R) m4mag7s__m - Magnificent 7s (Barcrest) (MPU4) (set 14) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5) m4mag7s__n - Magnificent 7s (Barcrest) (MPU4) (set 15) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 Y) m4mag7s__o - Magnificent 7s (Barcrest) (MPU4) (set 16) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 AD) m4mag7s__p - Magnificent 7s (Barcrest) (MPU4) (set 17) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 B) m4mag7s__q - Magnificent 7s (Barcrest) (MPU4) (set 18) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 BD) m4mag7s__r - Magnificent 7s (Barcrest) (MPU4) (set 19) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 D) m4mag7s__s - Magnificent 7s (Barcrest) (MPU4) (set 20) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 DH) m4mag7s__t - Magnificent 7s (Barcrest) (MPU4) (set 21) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 KD) m4mag7s__u - Magnificent 7s (Barcrest) (MPU4) (set 22) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 RD) m4mag7s__v - Magnificent 7s (Barcrest) (MPU4) (set 23) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 YD) m4mag7s__w - Magnificent 7s (Barcrest) (MPU4) (set 24) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 H) m4mag7s__x - Magnificent 7s (Barcrest) (MPU4) (set 25) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 K) m4mag7s__y - Magnificent 7s (Barcrest) (MPU4) (set 26) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6 R) m4mag7s__z - Magnificent 7s (Barcrest) (MPU4) (set 27) + Magnificent 7s (Barcrest) (MPU4) (MA7 1.6) m4magdrg @@ -53176,231 +63425,231 @@ m4magtbo - Magic Turbo (Barcrest) (MPU4) + Magic Turbo (Barcrest) (MPU4) m4makmnt - Make A Mint (Barcrest) (MPU4) (set 1) + Make A Mint (Barcrest) (MPU4) (MAM 0.3) m4makmnt__0 - Make A Mint (Barcrest) (MPU4) (set 28) + Make A Mint (Barcrest) (MPU4) (MMG 0.4 B) m4makmnt__1 - Make A Mint (Barcrest) (MPU4) (set 29) + Make A Mint (Barcrest) (MPU4) (MMG 0.4 BD) m4makmnt__2 - Make A Mint (Barcrest) (MPU4) (set 30) + Make A Mint (Barcrest) (MPU4) (MMG 0.4 C) m4makmnt__3 - Make A Mint (Barcrest) (MPU4) (set 31) + Make A Mint (Barcrest) (MPU4) (MMG 0.4 D) m4makmnt__4 - Make A Mint (Barcrest) (MPU4) (set 32) + Make A Mint (Barcrest) (MPU4) (MMG 0.4 KD) m4makmnt__5 - Make A Mint (Barcrest) (MPU4) (set 33) + Make A Mint (Barcrest) (MPU4) (MMG 0.4 RD) m4makmnt__6 - Make A Mint (Barcrest) (MPU4) (set 34) + Make A Mint (Barcrest) (MPU4) (MMG 0.4 YD) m4makmnt__7 - Make A Mint (Barcrest) (MPU4) (set 35) + Make A Mint (Barcrest) (MPU4) (MMG 0.4 K) m4makmnt__8 - Make A Mint (Barcrest) (MPU4) (set 36) + Make A Mint (Barcrest) (MPU4) (MMG 0.4 R) m4makmnt__9 - Make A Mint (Barcrest) (MPU4) (set 37) + Make A Mint (Barcrest) (MPU4) (MMG 0.4) m4makmnt__a - Make A Mint (Barcrest) (MPU4) (set 2) + Make A Mint (Barcrest) (MPU4) (MAM 0.4 AD) m4makmnt__aa - Make A Mint (Barcrest) (MPU4) (set 38) + Make A Mint (Barcrest) (MPU4) (MMG 0.4 Y) m4makmnt__ab - Make A Mint (Barcrest) (MPU4) (set 39) + Make A Mint (Barcrest) (MPU4) (MMG 0.5 AD) m4makmnt__ac - Make A Mint (Barcrest) (MPU4) (set 40) + Make A Mint (Barcrest) (MPU4) (MMG 0.5 B) m4makmnt__ad - Make A Mint (Barcrest) (MPU4) (set 41) + Make A Mint (Barcrest) (MPU4) (MMG 0.5 BD) m4makmnt__ae - Make A Mint (Barcrest) (MPU4) (set 42) + Make A Mint (Barcrest) (MPU4) (MMG 0.5 C) m4makmnt__af - Make A Mint (Barcrest) (MPU4) (set 43) + Make A Mint (Barcrest) (MPU4) (MMG 0.5 D) m4makmnt__ag - Make A Mint (Barcrest) (MPU4) (set 44) + Make A Mint (Barcrest) (MPU4) (MMG 0.5 KD) m4makmnt__ah - Make A Mint (Barcrest) (MPU4) (set 45) + Make A Mint (Barcrest) (MPU4) (MMG 0.5 RD) m4makmnt__ai - Make A Mint (Barcrest) (MPU4) (set 46) + Make A Mint (Barcrest) (MPU4) (MMG 0.5 YD) m4makmnt__aj - Make A Mint (Barcrest) (MPU4) (set 47) + Make A Mint (Barcrest) (MPU4) (MMG 0.5 K) m4makmnt__ak - Make A Mint (Barcrest) (MPU4) (set 48) + Make A Mint (Barcrest) (MPU4) (MMG 0.5 R) m4makmnt__al - Make A Mint (Barcrest) (MPU4) (set 49) + Make A Mint (Barcrest) (MPU4) (MMG 0.5) m4makmnt__am - Make A Mint (Barcrest) (MPU4) (set 50) + Make A Mint (Barcrest) (MPU4) (MMG 0.5 Y) m4makmnt__an - Make A Mint (Barcrest) (MPU4) (set 51) + Make A Mint (Barcrest) (MPU4) (MA_ 3.1) m4makmnt__ao - Make A Mint (Barcrest) (MPU4) (set 52) + Make A Mint (Barcrest) (MPU4) (MA_ 3.0) m4makmnt__ap - Make A Mint (Barcrest) (MPU4) (set 53) + Make A Mint (Barcrest) (MPU4) (MA_ 3.1 D) m4makmnt__aq - Make A Mint (Barcrest) (MPU4) (set 54) + Make A Mint (Barcrest) (MPU4) (MA_ 3.0 D) m4makmnt__ar - Make A Mint (Barcrest) (MPU4) (set 55) + Make A Mint (Barcrest) (MPU4) (MA_ 3.1 K) m4makmnt__as - Make A Mint (Barcrest) (MPU4) (set 56) + Make A Mint (Barcrest) (MPU4) (MA_ 3.0 K) m4makmnt__b - Make A Mint (Barcrest) (MPU4) (set 3) + Make A Mint (Barcrest) (MPU4) (MAM 0.4 B) m4makmnt__c - Make A Mint (Barcrest) (MPU4) (set 4) + Make A Mint (Barcrest) (MPU4) (MAM 0.4 BD) m4makmnt__d - Make A Mint (Barcrest) (MPU4) (set 5) + Make A Mint (Barcrest) (MPU4) (MAM 0.4 C) m4makmnt__e - Make A Mint (Barcrest) (MPU4) (set 6) + Make A Mint (Barcrest) (MPU4) (MAM 0.4 D) m4makmnt__f - Make A Mint (Barcrest) (MPU4) (set 7) + Make A Mint (Barcrest) (MPU4) (MAM 0.4 KD) m4makmnt__g - Make A Mint (Barcrest) (MPU4) (set 8) + Make A Mint (Barcrest) (MPU4) (MAM 0.4 RD) m4makmnt__h - Make A Mint (Barcrest) (MPU4) (set 9) + Make A Mint (Barcrest) (MPU4) (MAM 0.4 YD) m4makmnt__i - Make A Mint (Barcrest) (MPU4) (set 10) + Make A Mint (Barcrest) (MPU4) (MAM 0.4 K) m4makmnt__j - Make A Mint (Barcrest) (MPU4) (set 11) + Make A Mint (Barcrest) (MPU4) (MAM 0.4 R) m4makmnt__k - Make A Mint (Barcrest) (MPU4) (set 12) + Make A Mint (Barcrest) (MPU4) (MAM 0.4) m4makmnt__l - Make A Mint (Barcrest) (MPU4) (set 13) + Make A Mint (Barcrest) (MPU4) (MAM 0.4 Y) m4makmnt__m - Make A Mint (Barcrest) (MPU4) (set 14) + Make A Mint (Barcrest) (MPU4) (MMG 0.4, hack) m4makmnt__n - Make A Mint (Barcrest) (MPU4) (set 15) + Make A Mint (Barcrest) (MPU4) (MAM 0.3 C, hack) m4makmnt__o - Make A Mint (Barcrest) (MPU4) (set 16) + Make A Mint (Barcrest) (MPU4) (MAM 0.3 AD) m4makmnt__p - Make A Mint (Barcrest) (MPU4) (set 17) + Make A Mint (Barcrest) (MPU4) (MAM 0.3 B) m4makmnt__q - Make A Mint (Barcrest) (MPU4) (set 18) + Make A Mint (Barcrest) (MPU4) (MAM 0.3 BD) m4makmnt__r - Make A Mint (Barcrest) (MPU4) (set 19) + Make A Mint (Barcrest) (MPU4) (MAM 0.3 C) m4makmnt__s - Make A Mint (Barcrest) (MPU4) (set 20) + Make A Mint (Barcrest) (MPU4) (MAM 0.3 D) m4makmnt__t - Make A Mint (Barcrest) (MPU4) (set 21) + Make A Mint (Barcrest) (MPU4) (MAM 0.3 KD) m4makmnt__u - Make A Mint (Barcrest) (MPU4) (set 22) + Make A Mint (Barcrest) (MPU4) (MAM 0.3 YD) m4makmnt__v - Make A Mint (Barcrest) (MPU4) (set 23) + Make A Mint (Barcrest) (MPU4) (MAM 0.3 K) m4makmnt__w - Make A Mint (Barcrest) (MPU4) (set 24) + Make A Mint (Barcrest) (MPU4) (MAM 0.3 R) m4makmnt__x - Make A Mint (Barcrest) (MPU4) (set 25) + Make A Mint (Barcrest) (MPU4) (MAM 0.3 Y) m4makmnt__y - Make A Mint (Barcrest) (MPU4) (set 26) + Make A Mint (Barcrest) (MPU4) (MMG 0.2) m4makmnt__z - Make A Mint (Barcrest) (MPU4) (set 27) + Make A Mint (Barcrest) (MPU4) (MMG 0.4 AD) m4matdr @@ -53824,59 +64073,103 @@ m4monte - Monte Carlo (Barcrest) (MPU4) (set 1) + Monte Carlo (NM8 0.1 B) (Barcrest) (MPU4) m4monte__a - Monte Carlo (Barcrest) (MPU4) (set 2) + Monte Carlo (NM8 0.1 AD) (Barcrest) (MPU4) m4monte__b - Monte Carlo (Barcrest) (MPU4) (set 3) + Monte Carlo (NM8 0.1 BD) (Barcrest) (MPU4) m4monte__c - Monte Carlo (Barcrest) (MPU4) (set 4) + Monte Carlo (NM8 0.1 C) (Barcrest) (MPU4) m4monte__d - Monte Carlo (Barcrest) (MPU4) (set 5) + Monte Carlo (NM8 0.1 D) (Barcrest) (MPU4) m4monte__e - Monte Carlo (Barcrest) (MPU4) (set 6) + Monte Carlo (NM8 0.1 KD) (Barcrest) (MPU4) m4monte__f - Monte Carlo (Barcrest) (MPU4) (set 7) + Monte Carlo (NM8 0.1 YD) (Barcrest) (MPU4) m4monte__g - Monte Carlo (Barcrest) (MPU4) (set 8) + Monte Carlo (NM8 0.1 K) (Barcrest) (MPU4) m4monte__h - Monte Carlo (Barcrest) (MPU4) (set 9) + Monte Carlo (NM8 0.1) (Barcrest) (MPU4) m4monte__i - Monte Carlo (Barcrest) (MPU4) (set 10) + Monte Carlo (NM8 0.1 Y) (Barcrest) (MPU4) m4monte__j - Monte Carlo (Barcrest) (MPU4) (set 11) + Monte Carlo (NMN 0.1 C) (Barcrest) (MPU4) m4monte__k - Monte Carlo (Barcrest) (MPU4) (set 12) + Monte Carlo (NMN 0.1 D) (Barcrest) (MPU4) m4monte__l - Monte Carlo (Barcrest) (MPU4) (set 13) + Monte Carlo (NMN 0.1 K) (Barcrest) (MPU4) m4monte__m - Monte Carlo (Barcrest) (MPU4) (set 14) + Monte Carlo (NMN 0.1) (Barcrest) (MPU4) + + + m4montez + Monte Carlo (MSS 1.6 C) (Barcrest) (MPU4) + + + m4monteza + Monte Carlo (MX052.0 K) (Barcrest) (MPU4) + + + m4montezb + Monte Carlo (MX102.0 K) (Barcrest) (MPU4) + + + m4montezc + Monte Carlo (MC 2.0 C) (Barcrest) (MPU4) + + + m4montezd + Monte Carlo (MC 2.0 K) (Barcrest) (MPU4) + + + m4monteze + Monte Carlo (MC 2.0 YD) (Barcrest) (MPU4) + + + m4montezf + Monte Carlo (MC_ 3.0 C) (Barcrest) (MPU4) + + + m4montezg + Monte Carlo (MC_ 3.0 YD) (Barcrest) (MPU4) + + + m4montezh + Monte Carlo (MC_ 3.0 K) (Barcrest) (MPU4) + + + m4montezi + Monte Carlo (MX052.0 C) (Barcrest) (MPU4) + + + m4montezj + Monte Carlo (MX102.0 C) (Barcrest) (MPU4) m4montrl @@ -53940,47 +64233,47 @@ m4nhtt - New Hit the Top (Barcrest) (MPU4) (set 1) + New Hit the Top (Barcrest) (MPU4) (NHT 0.1) m4nhtt__a - New Hit the Top (Barcrest) (MPU4) (set 2) + New Hit the Top (Barcrest) (MPU4) (NHT 0.1 AD) m4nhtt__b - New Hit the Top (Barcrest) (MPU4) (set 3) + New Hit the Top (Barcrest) (MPU4) (NHT 0.1 BD) m4nhtt__c - New Hit the Top (Barcrest) (MPU4) (set 4) + New Hit the Top (Barcrest) (MPU4) (NHT 0.1 D) m4nhtt__d - New Hit the Top (Barcrest) (MPU4) (set 5) + New Hit the Top (Barcrest) (MPU4) (NHT 0.1 KD) m4nhtt__e - New Hit the Top (Barcrest) (MPU4) (set 6) + New Hit the Top (Barcrest) (MPU4) (NHT 0.1 RD) m4nhtt__f - New Hit the Top (Barcrest) (MPU4) (set 7) + New Hit the Top (Barcrest) (MPU4) (NHT 0.1 YD) m4nhtt__g - New Hit the Top (Barcrest) (MPU4) (set 8) + New Hit the Top (Barcrest) (MPU4) (NHT 0.1 K) m4nhtt__h - New Hit the Top (Barcrest) (MPU4) (set 9) + New Hit the Top (Barcrest) (MPU4) (NHT 0.1 R) m4nhtt__i - New Hit the Top (Barcrest) (MPU4) (set 10) + New Hit the Top (Barcrest) (MPU4) (NHT 0.1 B) m4nhtt__j - New Hit the Top (Barcrest) (MPU4) (set 11) + New Hit the Top (Barcrest) (MPU4) (NHT 0.1 Y) m4nick @@ -54024,419 +64317,419 @@ m4nnww - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 1) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 / NN4 0.2) m4nnww__0 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 28) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 BXD) m4nnww__1 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 29) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 XD) m4nnww__2 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 30) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 KXD) m4nnww__3 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 31) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 YXD) m4nnww__4 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 32) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 KX) m4nnww__5 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 33) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 RX) m4nnww__6 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 34) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 RD) m4nnww__7 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 35) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 X) m4nnww__8 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 36) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 YX) m4nnww__9 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 37) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 AD) m4nnww__a - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 2) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CF3 0.1 / NN4 0.1) m4nnww__aa - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 38) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 B) m4nnww__ab - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 39) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 BD) m4nnww__ac - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 40) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 D) m4nnww__ad - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 41) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 KD) m4nnww__ae - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 42) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 YD) m4nnww__af - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 43) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 K) m4nnww__ag - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 44) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2) m4nnww__ah - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 45) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 Y) m4nnww__ai - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 46) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 AD / NN4 0.2) m4nnww__aj - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 47) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 B / NN4 0.2) m4nnww__ak - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 48) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 D / NN4 0.2) m4nnww__al - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 49) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 KD / NN4 0.2) m4nnww__am - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 50) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 RD / NN4 0.2) m4nnww__an - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 51) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 YD / NN4 0.2) m4nnww__ao - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 52) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 K / NN4 0.2) m4nnww__ap - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 53) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 R / NN4 0.2) m4nnww__aq - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 54) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 BD / NN4 0.2) m4nnww__ar - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 55) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 Y / NN4 0.2) m4nnww__as - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 56) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 4.0 X) m4nnww__at - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 57) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2) m4nnww__au - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 58) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 X) m4nnww__av - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 59) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 BX) m4nnww__aw - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 60) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 CX) m4nnww__ax - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 61) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CH3 0.1 B / NN4 0.1) m4nnww__ay - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 62) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 3.4, hack, set 1) m4nnww__az - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 63) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 3.4, hack, set 2) m4nnww__b - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 3) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 AD / NN4 0.1) m4nnww__c - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 4) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 B / NN4 0.1) m4nnww__d - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 5) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 BD / NN4 0.1) m4nnww__e - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 6) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 C / NN4 0.1) m4nnww__f - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 7) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 D / NN4 0.1) m4nnww__g - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 8) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 KD / NN4 0.1) m4nnww__h - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 9) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 RD / NN4 0.1) m4nnww__i - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 10) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 YD / NN4 0.1) m4nnww__j - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 11) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 AK / NN4 0.1) m4nnww__k - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 12) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 R / NN4 0.1) m4nnww__l - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 13) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 / NN4 0.1) m4nnww__m - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 14) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 Y / NN4 0.1) m4nnww__n - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 15) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 AD / NN4 0.2) m4nnww__o - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 16) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 B / NN4 0.2) m4nnww__p - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 17) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 BD / NN4 0.2) m4nnww__q - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 18) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 D / NN4 0.2) m4nnww__r - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 19) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 KD / NN4 0.2) m4nnww__s - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 20) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 RD / NN4 0.2) m4nnww__t - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 21) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 YD / NN4 0.2) m4nnww__u - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 22) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 K / NN4 0.2) m4nnww__v - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 23) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 R / NN4 0.2) m4nnww__w - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 24) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 / NN4 0.2) m4nnww__x - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 25) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 Y / NN4 0.2) m4nnww__y - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 26) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 XAD) m4nnww__z - Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 27) + Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 BX) m4nnwwc - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 / NN4 0.2) m4nnwwc__0 - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 28) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 BD / NN4 0.2) m4nnwwc__1 - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 29) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 D / NN4 0.2) m4nnwwc__2 - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 30) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 KD / NN4 0.2) m4nnwwc__3 - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 31) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 RD / NN4 0.2) m4nnwwc__4 - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 32) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 YD / NN4 0.2) m4nnwwc__5 - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 33) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 K / NN4 0.2) m4nnwwc__6 - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 34) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 R / NN4 0.2) m4nnwwc__7 - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 35) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 C / NN4 0.2) m4nnwwc__8 - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 36) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 Y / NN4 0.2) m4nnwwc__9 - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 37) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.1 / NN4 0.1) m4nnwwc__a - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 AD / NN4 0.2) m4nnwwc__aa - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 38) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNN 2.0) m4nnwwc__ab - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 39) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNN 2.0 D) m4nnwwc__ac - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 40) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNN 2.0 K) m4nnwwc__ad - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 41) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNN 2.0 B) m4nnwwc__b - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 3) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 B / NN4 0.2) m4nnwwc__c - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 4) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 BD / NN4 0.2) m4nnwwc__d - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 5) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 C / NN4 0.2) m4nnwwc__e - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 6) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 D / NN4 0.2) m4nnwwc__f - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 7) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 KD / NN4 0.2) m4nnwwc__g - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 8) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 RD / NN4 0.2) m4nnwwc__h - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 9) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 YD / NN4 0.2) m4nnwwc__i - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 10) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 K / NN4 0.2) m4nnwwc__j - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 11) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 R / NN4 0.2) m4nnwwc__k - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 12) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 / NN4 0.2) m4nnwwc__l - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 13) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.2 Y / NN4 0.2) m4nnwwc__m - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 14) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 AD / NN4 0.2) m4nnwwc__n - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 15) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 B / NN4 0.2) m4nnwwc__o - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 16) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 BD / NN4 0.2) m4nnwwc__p - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 17) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 C / NN4 0.2) m4nnwwc__q - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 18) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 D / NN4 0.2) m4nnwwc__r - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 19) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 KD / NN4 0.2) m4nnwwc__s - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 20) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 RD / NN4 0.2) m4nnwwc__t - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 21) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 YD / NN4 0.2) m4nnwwc__u - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 22) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 K / NN4 0.2) m4nnwwc__v - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 23) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 R / NN4 0.2) m4nnwwc__w - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 24) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 / NN4 0.2) m4nnwwc__x - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 25) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.2 / NN4 0.2) m4nnwwc__y - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 26) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 AD / NN4 0.2) m4nnwwc__z - Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (set 27) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN3 0.2 B / NN4 0.2) m4nod @@ -54564,39 +64857,39 @@ m4oadrac - Ooh Aah Dracula (Barcrest) (MPU4) (set 1) + Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.0, set 1) m4oadrac__a - Ooh Aah Dracula (Barcrest) (MPU4) (set 2) + Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1) m4oadrac__b - Ooh Aah Dracula (Barcrest) (MPU4) (set 3) + Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.0 D) m4oadrac__c - Ooh Aah Dracula (Barcrest) (MPU4) (set 4) + Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1 D) m4oadrac__d - Ooh Aah Dracula (Barcrest) (MPU4) (set 5) + Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.0 K) m4oadrac__e - Ooh Aah Dracula (Barcrest) (MPU4) (set 6) + Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1 K) m4oadrac__f - Ooh Aah Dracula (Barcrest) (MPU4) (set 7) + Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.0 B) m4oadrac__g - Ooh Aah Dracula (Barcrest) (MPU4) (set 8) + Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1 B) m4oadrac__h - Ooh Aah Dracula (Barcrest) (MPU4) (set 9) + Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.0, set 2) m4octo @@ -54660,147 +64953,147 @@ m4overmn - Over The Moon (Barcrest) (MPU4) (set 1) + Over The Moon (Barcrest) (MPU4) (OTT 0.2) m4overmn__0 - Over The Moon (Barcrest) (MPU4) (set 28) + Over The Moon (Barcrest) (MPU4) (OTU 0.1 BD) m4overmn__1 - Over The Moon (Barcrest) (MPU4) (set 29) + Over The Moon (Barcrest) (MPU4) (OTU 0.1 D) m4overmn__2 - Over The Moon (Barcrest) (MPU4) (set 30) + Over The Moon (Barcrest) (MPU4) (OTU 0.1 KD) m4overmn__3 - Over The Moon (Barcrest) (MPU4) (set 31) + Over The Moon (Barcrest) (MPU4) (OTU 0.1 RD) m4overmn__4 - Over The Moon (Barcrest) (MPU4) (set 32) + Over The Moon (Barcrest) (MPU4) (OTU 0.1 YD) m4overmn__5 - Over The Moon (Barcrest) (MPU4) (set 33) + Over The Moon (Barcrest) (MPU4) (OTU 0.1 K) m4overmn__6 - Over The Moon (Barcrest) (MPU4) (set 34) + Over The Moon (Barcrest) (MPU4) (OTU 0.1 R) m4overmn__7 - Over The Moon (Barcrest) (MPU4) (set 35) + Over The Moon (Barcrest) (MPU4) (OTU 0.1) m4overmn__8 - Over The Moon (Barcrest) (MPU4) (set 36) + Over The Moon (Barcrest) (MPU4) (OTU 0.1 Y) m4overmn__a - Over The Moon (Barcrest) (MPU4) (set 2) + Over The Moon (Barcrest) (MPU4) (OT8 0.1 B) m4overmn__b - Over The Moon (Barcrest) (MPU4) (set 3) + Over The Moon (Barcrest) (MPU4) (OT8 0.1 C) m4overmn__c - Over The Moon (Barcrest) (MPU4) (set 4) + Over The Moon (Barcrest) (MPU4) (OT8 0.1 KD) m4overmn__d - Over The Moon (Barcrest) (MPU4) (set 5) + Over The Moon (Barcrest) (MPU4) (OT8 0.1 YD) m4overmn__e - Over The Moon (Barcrest) (MPU4) (set 6) + Over The Moon (Barcrest) (MPU4) (OT8 0.1 K) m4overmn__f - Over The Moon (Barcrest) (MPU4) (set 7) + Over The Moon (Barcrest) (MPU4) (OT8 0.1) m4overmn__g - Over The Moon (Barcrest) (MPU4) (set 8) + Over The Moon (Barcrest) (MPU4) (OT8 0.1 Y) m4overmn__h - Over The Moon (Barcrest) (MPU4) (set 9) + Over The Moon (Barcrest) (MPU4) (OTN 0.5 B) m4overmn__i - Over The Moon (Barcrest) (MPU4) (set 10) + Over The Moon (Barcrest) (MPU4) (OTN 0.5 C) m4overmn__j - Over The Moon (Barcrest) (MPU4) (set 11) + Over The Moon (Barcrest) (MPU4) (OTN 0.5 D) m4overmn__k - Over The Moon (Barcrest) (MPU4) (set 12) + Over The Moon (Barcrest) (MPU4) (OTN 0.5 YD) m4overmn__l - Over The Moon (Barcrest) (MPU4) (set 13) + Over The Moon (Barcrest) (MPU4) (OTN 0.5 K) m4overmn__m - Over The Moon (Barcrest) (MPU4) (set 14) + Over The Moon (Barcrest) (MPU4) (OTN 0.5) m4overmn__n - Over The Moon (Barcrest) (MPU4) (set 15) + Over The Moon (Barcrest) (MPU4) (OTN 0.5 Y) m4overmn__o - Over The Moon (Barcrest) (MPU4) (set 16) + Over The Moon (Barcrest) (MPU4) (OTT 0.2 AD) m4overmn__p - Over The Moon (Barcrest) (MPU4) (set 17) + Over The Moon (Barcrest) (MPU4) (OTT 0.2 B) m4overmn__q - Over The Moon (Barcrest) (MPU4) (set 18) + Over The Moon (Barcrest) (MPU4) (OTT 0.2 BD) m4overmn__r - Over The Moon (Barcrest) (MPU4) (set 19) + Over The Moon (Barcrest) (MPU4) (OTT 0.2 D) m4overmn__s - Over The Moon (Barcrest) (MPU4) (set 20) + Over The Moon (Barcrest) (MPU4) (OTT 0.2 KD) m4overmn__t - Over The Moon (Barcrest) (MPU4) (set 21) + Over The Moon (Barcrest) (MPU4) (OTT 0.2 RD) m4overmn__u - Over The Moon (Barcrest) (MPU4) (set 22) + Over The Moon (Barcrest) (MPU4) (OTT 0.2 YD) m4overmn__v - Over The Moon (Barcrest) (MPU4) (set 23) + Over The Moon (Barcrest) (MPU4) (OTT 0.2 K) m4overmn__w - Over The Moon (Barcrest) (MPU4) (set 24) + Over The Moon (Barcrest) (MPU4) (OTT 0.2 R) m4overmn__x - Over The Moon (Barcrest) (MPU4) (set 25) + Over The Moon (Barcrest) (MPU4) (OTT 0.2 Y) m4overmn__y - Over The Moon (Barcrest) (MPU4) (set 26) + Over The Moon (Barcrest) (MPU4) (OTU 0.1 AD) m4overmn__z - Over The Moon (Barcrest) (MPU4) (set 27) + Over The Moon (Barcrest) (MPU4) (OTU 0.1 B) m4paracl @@ -54844,211 +65137,211 @@ m4placbt - Place Your Bets (Barcrest) (MPU4) (set 1) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7) m4placbt__0 - Place Your Bets (Barcrest) (MPU4) (set 28) + Place Your Bets (Barcrest) (MPU4) (PYH 0.4) m4placbt__1 - Place Your Bets (Barcrest) (MPU4) (set 29) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 AD) m4placbt__2 - Place Your Bets (Barcrest) (MPU4) (set 30) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 B) m4placbt__3 - Place Your Bets (Barcrest) (MPU4) (set 31) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 BD) m4placbt__4 - Place Your Bets (Barcrest) (MPU4) (set 32) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 C) m4placbt__5 - Place Your Bets (Barcrest) (MPU4) (set 33) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 D) m4placbt__6 - Place Your Bets (Barcrest) (MPU4) (set 34) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 KD) m4placbt__7 - Place Your Bets (Barcrest) (MPU4) (set 35) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 RD) m4placbt__8 - Place Your Bets (Barcrest) (MPU4) (set 36) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 YD) m4placbt__9 - Place Your Bets (Barcrest) (MPU4) (set 37) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 K) m4placbt__a - Place Your Bets (Barcrest) (MPU4) (set 2) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 AD) m4placbt__aa - Place Your Bets (Barcrest) (MPU4) (set 38) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 R) m4placbt__ab - Place Your Bets (Barcrest) (MPU4) (set 39) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5) m4placbt__ac - Place Your Bets (Barcrest) (MPU4) (set 40) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 Y) m4placbt__ad - Place Your Bets (Barcrest) (MPU4) (set 41) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6 AD) m4placbt__ae - Place Your Bets (Barcrest) (MPU4) (set 42) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6 B) m4placbt__af - Place Your Bets (Barcrest) (MPU4) (set 43) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6 BD) m4placbt__ag - Place Your Bets (Barcrest) (MPU4) (set 44) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6 C) m4placbt__ah - Place Your Bets (Barcrest) (MPU4) (set 45) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6 D) m4placbt__ai - Place Your Bets (Barcrest) (MPU4) (set 46) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6 KD) m4placbt__aj - Place Your Bets (Barcrest) (MPU4) (set 47) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6 RD) m4placbt__ak - Place Your Bets (Barcrest) (MPU4) (set 48) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6 YD) m4placbt__al - Place Your Bets (Barcrest) (MPU4) (set 49) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6 K) m4placbt__am - Place Your Bets (Barcrest) (MPU4) (set 50) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6 R) m4placbt__an - Place Your Bets (Barcrest) (MPU4) (set 51) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6) m4placbt__ao - Place Your Bets (Barcrest) (MPU4) (set 52) + Place Your Bets (Barcrest) (MPU4) (PYH 0.6 Y) m4placbt__b - Place Your Bets (Barcrest) (MPU4) (set 3) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 B) m4placbt__c - Place Your Bets (Barcrest) (MPU4) (set 4) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 BD) m4placbt__d - Place Your Bets (Barcrest) (MPU4) (set 5) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 C) m4placbt__e - Place Your Bets (Barcrest) (MPU4) (set 6) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 D) m4placbt__f - Place Your Bets (Barcrest) (MPU4) (set 7) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 KD) m4placbt__g - Place Your Bets (Barcrest) (MPU4) (set 8) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 RD) m4placbt__h - Place Your Bets (Barcrest) (MPU4) (set 9) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 YD) m4placbt__i - Place Your Bets (Barcrest) (MPU4) (set 10) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 K) m4placbt__j - Place Your Bets (Barcrest) (MPU4) (set 11) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 R) m4placbt__k - Place Your Bets (Barcrest) (MPU4) (set 12) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6) m4placbt__l - Place Your Bets (Barcrest) (MPU4) (set 13) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 Y) m4placbt__m - Place Your Bets (Barcrest) (MPU4) (set 14) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7 AD) m4placbt__n - Place Your Bets (Barcrest) (MPU4) (set 15) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7 B) m4placbt__o - Place Your Bets (Barcrest) (MPU4) (set 16) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7 BD) m4placbt__p - Place Your Bets (Barcrest) (MPU4) (set 17) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7 C) m4placbt__q - Place Your Bets (Barcrest) (MPU4) (set 18) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7 D) m4placbt__r - Place Your Bets (Barcrest) (MPU4) (set 19) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7 KD) m4placbt__s - Place Your Bets (Barcrest) (MPU4) (set 20) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7 RD) m4placbt__t - Place Your Bets (Barcrest) (MPU4) (set 21) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7 YD) m4placbt__u - Place Your Bets (Barcrest) (MPU4) (set 22) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7 K) m4placbt__v - Place Your Bets (Barcrest) (MPU4) (set 23) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7 R) m4placbt__w - Place Your Bets (Barcrest) (MPU4) (set 24) + Place Your Bets (Barcrest) (MPU4) (PYB 0.7 Y) m4placbt__x - Place Your Bets (Barcrest) (MPU4) (set 25) + Place Your Bets (Barcrest) (MPU4) (PYH 0.1) m4placbt__y - Place Your Bets (Barcrest) (MPU4) (set 26) + Place Your Bets (Barcrest) (MPU4) (PYH 0.5 Y, hack) m4placbt__z - Place Your Bets (Barcrest) (MPU4) (set 27) + Place Your Bets (Barcrest) (MPU4) (PYB 0.6 C, hack) m4pont @@ -55060,247 +65353,247 @@ m4potblk - Pot Black (Barcrest) (MPU4) (set 1) + Pot Black (Barcrest) (MPU4) (PBG 1.6) m4potblk__0 - Pot Black (Barcrest) (MPU4) (set 28) + Pot Black (Barcrest) (MPU4) (PBG 1.6 R) m4potblk__1 - Pot Black (Barcrest) (MPU4) (set 29) + Pot Black (Barcrest) (MPU4) (PBG 1.6 Y) m4potblk__2 - Pot Black (Barcrest) (MPU4) (set 30) + Pot Black (Barcrest) (MPU4) (PBS 0.4 AD) m4potblk__3 - Pot Black (Barcrest) (MPU4) (set 31) + Pot Black (Barcrest) (MPU4) (PBS 0.4 B) m4potblk__4 - Pot Black (Barcrest) (MPU4) (set 32) + Pot Black (Barcrest) (MPU4) (PBS 0.4 BD) m4potblk__5 - Pot Black (Barcrest) (MPU4) (set 33) + Pot Black (Barcrest) (MPU4) (PBS 0.4 C) m4potblk__6 - Pot Black (Barcrest) (MPU4) (set 34) + Pot Black (Barcrest) (MPU4) (PBS 0.4 DH) m4potblk__7 - Pot Black (Barcrest) (MPU4) (set 35) + Pot Black (Barcrest) (MPU4) (PBS 0.4 KD) m4potblk__8 - Pot Black (Barcrest) (MPU4) (set 36) + Pot Black (Barcrest) (MPU4) (PBS 0.4 RD) m4potblk__9 - Pot Black (Barcrest) (MPU4) (set 37) + Pot Black (Barcrest) (MPU4) (PBS 0.4 YD) m4potblk__a - Pot Black (Barcrest) (MPU4) (set 2) + Pot Black (Barcrest) (MPU4) (PBG 1.5 Y, hack) m4potblk__aa - Pot Black (Barcrest) (MPU4) (set 38) + Pot Black (Barcrest) (MPU4) (PBS 0.4 H) m4potblk__ab - Pot Black (Barcrest) (MPU4) (set 39) + Pot Black (Barcrest) (MPU4) (PBS 0.4 K) m4potblk__ac - Pot Black (Barcrest) (MPU4) (set 40) + Pot Black (Barcrest) (MPU4) (PBS 0.4 R) m4potblk__ad - Pot Black (Barcrest) (MPU4) (set 41) + Pot Black (Barcrest) (MPU4) (PBS 0.4) m4potblk__ae - Pot Black (Barcrest) (MPU4) (set 42) + Pot Black (Barcrest) (MPU4) (PBS 0.4 Y) m4potblk__af - Pot Black (Barcrest) (MPU4) (set 43) + Pot Black (Barcrest) (MPU4) (PBS 0.6 AD) m4potblk__ag - Pot Black (Barcrest) (MPU4) (set 44) + Pot Black (Barcrest) (MPU4) (PBS 0.6 B) m4potblk__ah - Pot Black (Barcrest) (MPU4) (set 45) + Pot Black (Barcrest) (MPU4) (PBS 0.6 BD) m4potblk__ai - Pot Black (Barcrest) (MPU4) (set 46) + Pot Black (Barcrest) (MPU4) (PBS 0.6 C) m4potblk__aj - Pot Black (Barcrest) (MPU4) (set 47) + Pot Black (Barcrest) (MPU4) (PBS 0.6 D) m4potblk__ak - Pot Black (Barcrest) (MPU4) (set 48) + Pot Black (Barcrest) (MPU4) (PBS 0.6 DH) m4potblk__al - Pot Black (Barcrest) (MPU4) (set 49) + Pot Black (Barcrest) (MPU4) (PBS 0.6 KD) m4potblk__am - Pot Black (Barcrest) (MPU4) (set 50) + Pot Black (Barcrest) (MPU4) (PBS 0.6 RD) m4potblk__an - Pot Black (Barcrest) (MPU4) (set 51) + Pot Black (Barcrest) (MPU4) (PBS 0.6 YD) m4potblk__ao - Pot Black (Barcrest) (MPU4) (set 52) + Pot Black (Barcrest) (MPU4) (PBS 0.6 H) m4potblk__ap - Pot Black (Barcrest) (MPU4) (set 53) + Pot Black (Barcrest) (MPU4) (PBS 0.6 K) m4potblk__aq - Pot Black (Barcrest) (MPU4) (set 54) + Pot Black (Barcrest) (MPU4) (PBS 0.6 R) m4potblk__ar - Pot Black (Barcrest) (MPU4) (set 55) + Pot Black (Barcrest) (MPU4) (PBS 0.6) m4potblk__as - Pot Black (Barcrest) (MPU4) (set 56) + Pot Black (Barcrest) (MPU4) (PBS 0.6 Y) m4potblk__at - Pot Black (Barcrest) (MPU4) (set 57) + Pot Black (Barcrest) (MPU4) (PO 1.2) m4potblk__au - Pot Black (Barcrest) (MPU4) (set 58) + Pot Black (Barcrest) (MPU4) (PO 1.1) m4potblk__av - Pot Black (Barcrest) (MPU4) (set 59) + Pot Black (Barcrest) (MPU4) (PO 1.2 D) m4potblk__aw - Pot Black (Barcrest) (MPU4) (set 60) + Pot Black (Barcrest) (MPU4) (PO 1.1 D) m4potblk__ax - Pot Black (Barcrest) (MPU4) (set 61) + Pot Black (Barcrest) (MPU4) (PO 1.1 K) m4potblk__b - Pot Black (Barcrest) (MPU4) (set 3) + Pot Black (Barcrest) (MPU4) (PBS 0.4 C, hack) m4potblk__c - Pot Black (Barcrest) (MPU4) (set 4) + Pot Black (Barcrest) (MPU4) (PBG 1.4) m4potblk__d - Pot Black (Barcrest) (MPU4) (set 5) + Pot Black (Barcrest) (MPU4) (PBG 1.5 AD) m4potblk__e - Pot Black (Barcrest) (MPU4) (set 6) + Pot Black (Barcrest) (MPU4) (PBG 1.5 B) m4potblk__f - Pot Black (Barcrest) (MPU4) (set 7) + Pot Black (Barcrest) (MPU4) (PBG 1.5 BD) m4potblk__g - Pot Black (Barcrest) (MPU4) (set 8) + Pot Black (Barcrest) (MPU4) (PBG 1.5 D) m4potblk__h - Pot Black (Barcrest) (MPU4) (set 9) + Pot Black (Barcrest) (MPU4) (PBG 1.5 DH) m4potblk__i - Pot Black (Barcrest) (MPU4) (set 10) + Pot Black (Barcrest) (MPU4) (PBG 1.5 KD) m4potblk__j - Pot Black (Barcrest) (MPU4) (set 11) + Pot Black (Barcrest) (MPU4) (PBG 1.5 RD) m4potblk__k - Pot Black (Barcrest) (MPU4) (set 12) + Pot Black (Barcrest) (MPU4) (PBG 1.5 YD) m4potblk__l - Pot Black (Barcrest) (MPU4) (set 13) + Pot Black (Barcrest) (MPU4) (PBG 1.5 H) m4potblk__m - Pot Black (Barcrest) (MPU4) (set 14) + Pot Black (Barcrest) (MPU4) (PBG 1.5 K) m4potblk__n - Pot Black (Barcrest) (MPU4) (set 15) + Pot Black (Barcrest) (MPU4) (PBG 1.5 R) m4potblk__o - Pot Black (Barcrest) (MPU4) (set 16) + Pot Black (Barcrest) (MPU4) (PBG 1.5) m4potblk__p - Pot Black (Barcrest) (MPU4) (set 17) + Pot Black (Barcrest) (MPU4) (PBG 1.5 Y) m4potblk__q - Pot Black (Barcrest) (MPU4) (set 18) + Pot Black (Barcrest) (MPU4) (PBG 1.6 AD) m4potblk__r - Pot Black (Barcrest) (MPU4) (set 19) + Pot Black (Barcrest) (MPU4) (PBG 1.6 B) m4potblk__s - Pot Black (Barcrest) (MPU4) (set 20) + Pot Black (Barcrest) (MPU4) (PBG 1.6 BD) m4potblk__t - Pot Black (Barcrest) (MPU4) (set 21) + Pot Black (Barcrest) (MPU4) (PBG 1.6 D) m4potblk__u - Pot Black (Barcrest) (MPU4) (set 22) + Pot Black (Barcrest) (MPU4) (PBG 1.6 DH) m4potblk__v - Pot Black (Barcrest) (MPU4) (set 23) + Pot Black (Barcrest) (MPU4) (PBG 1.6 KD) m4potblk__w - Pot Black (Barcrest) (MPU4) (set 24) + Pot Black (Barcrest) (MPU4) (PBG 1.6 RD) m4potblk__x - Pot Black (Barcrest) (MPU4) (set 25) + Pot Black (Barcrest) (MPU4) (PBG 1.6 YD) m4potblk__y - Pot Black (Barcrest) (MPU4) (set 26) + Pot Black (Barcrest) (MPU4) (PBG 1.6 H) m4potblk__z - Pot Black (Barcrest) (MPU4) (set 27) + Pot Black (Barcrest) (MPU4) (PBG 1.6 K) m4potlck @@ -55316,219 +65609,219 @@ m4przdty - Prize Duty Free (Barcrest) (MPU4) (set 1) + Prize Duty Free (Barcrest) (MPU4) (PDU 0.2) m4przdty__a - Prize Duty Free (Barcrest) (MPU4) (set 2) + Prize Duty Free (Barcrest) (MPU4) (PD8 0.2 AD) m4przdty__b - Prize Duty Free (Barcrest) (MPU4) (set 3) + Prize Duty Free (Barcrest) (MPU4) (PD8 0.2 B) m4przdty__c - Prize Duty Free (Barcrest) (MPU4) (set 4) + Prize Duty Free (Barcrest) (MPU4) (PD8 0.2 BD) m4przdty__d - Prize Duty Free (Barcrest) (MPU4) (set 5) + Prize Duty Free (Barcrest) (MPU4) (PD8 0.2 D) m4przdty__e - Prize Duty Free (Barcrest) (MPU4) (set 6) + Prize Duty Free (Barcrest) (MPU4) (PD8 0.2 DJ) m4przdty__f - Prize Duty Free (Barcrest) (MPU4) (set 7) + Prize Duty Free (Barcrest) (MPU4) (PD8 0.2 KD) m4przdty__g - Prize Duty Free (Barcrest) (MPU4) (set 8) + Prize Duty Free (Barcrest) (MPU4) (PD8 0.2 YD) m4przdty__h - Prize Duty Free (Barcrest) (MPU4) (set 9) + Prize Duty Free (Barcrest) (MPU4) (PD8 0.2 J) m4przdty__i - Prize Duty Free (Barcrest) (MPU4) (set 10) + Prize Duty Free (Barcrest) (MPU4) (PD8 0.2 K) m4przdty__j - Prize Duty Free (Barcrest) (MPU4) (set 11) + Prize Duty Free (Barcrest) (MPU4) (PD8 0.2) m4przdty__k - Prize Duty Free (Barcrest) (MPU4) (set 12) + Prize Duty Free (Barcrest) (MPU4) (PD8 0.2 Y) m4przdty__l - Prize Duty Free (Barcrest) (MPU4) (set 13) + Prize Duty Free (Barcrest) (MPU4) (PDU 0.2 B) m4przdty__m - Prize Duty Free (Barcrest) (MPU4) (set 14) + Prize Duty Free (Barcrest) (MPU4) (PDU 0.2 D) m4przdty__n - Prize Duty Free (Barcrest) (MPU4) (set 15) + Prize Duty Free (Barcrest) (MPU4) (PDU 0.2 YD) m4przdty__o - Prize Duty Free (Barcrest) (MPU4) (set 16) + Prize Duty Free (Barcrest) (MPU4) (PDU 0.2 K) m4przdty__p - Prize Duty Free (Barcrest) (MPU4) (set 17) + Prize Duty Free (Barcrest) (MPU4) (PDU 0.2 Y) m4przfrt - Prize Fruit & Loot (Barcrest) (MPU4) (set 1) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3) m4przfrt__a - Prize Fruit & Loot (Barcrest) (MPU4) (set 2) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 AD) m4przfrt__b - Prize Fruit & Loot (Barcrest) (MPU4) (set 3) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 B) m4przfrt__c - Prize Fruit & Loot (Barcrest) (MPU4) (set 4) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 BD) m4przfrt__d - Prize Fruit & Loot (Barcrest) (MPU4) (set 5) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 D) m4przfrt__e - Prize Fruit & Loot (Barcrest) (MPU4) (set 6) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 KD) m4przfrt__f - Prize Fruit & Loot (Barcrest) (MPU4) (set 7) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 RD) m4przfrt__g - Prize Fruit & Loot (Barcrest) (MPU4) (set 8) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 YD) m4przfrt__h - Prize Fruit & Loot (Barcrest) (MPU4) (set 9) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 K) m4przfrt__i - Prize Fruit & Loot (Barcrest) (MPU4) (set 10) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 R) m4przfrt__j - Prize Fruit & Loot (Barcrest) (MPU4) (set 11) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 Y) m4przfrt__k - Prize Fruit & Loot (Barcrest) (MPU4) (set 12) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 I) m4przfrt__l - Prize Fruit & Loot (Barcrest) (MPU4) (set 13) + Prize Fruit & Loot (Barcrest) (MPU4) (PFR 0.3 O) m4przhr - Prize High Roller (Barcrest) (MPU4) (set 1) + Prize High Roller (Barcrest) (MPU4) (PRL 0.3) m4przhr__a - Prize High Roller (Barcrest) (MPU4) (set 2) + Prize High Roller (Barcrest) (MPU4) (PR3 0.1 AD) m4przhr__b - Prize High Roller (Barcrest) (MPU4) (set 3) + Prize High Roller (Barcrest) (MPU4) (PR3 0.1 B) m4przhr__c - Prize High Roller (Barcrest) (MPU4) (set 4) + Prize High Roller (Barcrest) (MPU4) (PR3 0.1 BD) m4przhr__d - Prize High Roller (Barcrest) (MPU4) (set 5) + Prize High Roller (Barcrest) (MPU4) (PR3 0.1 D) m4przhr__e - Prize High Roller (Barcrest) (MPU4) (set 6) + Prize High Roller (Barcrest) (MPU4) (PR3 0.1 KD) m4przhr__f - Prize High Roller (Barcrest) (MPU4) (set 7) + Prize High Roller (Barcrest) (MPU4) (PR3 0.1 YD) m4przhr__g - Prize High Roller (Barcrest) (MPU4) (set 8) + Prize High Roller (Barcrest) (MPU4) (PR3 0.1 K) m4przhr__h - Prize High Roller (Barcrest) (MPU4) (set 9) + Prize High Roller (Barcrest) (MPU4) (PR3 0.1) m4przhr__i - Prize High Roller (Barcrest) (MPU4) (set 10) + Prize High Roller (Barcrest) (MPU4) (PR3 0.1 Y) m4przhr__j - Prize High Roller (Barcrest) (MPU4) (set 11) + Prize High Roller (Barcrest) (MPU4) (PRL 0.3 B) m4przhr__k - Prize High Roller (Barcrest) (MPU4) (set 12) + Prize High Roller (Barcrest) (MPU4) (PRL 0.3 BD) m4przhr__l - Prize High Roller (Barcrest) (MPU4) (set 13) + Prize High Roller (Barcrest) (MPU4) (PRL 0.3 D) m4przhr__m - Prize High Roller (Barcrest) (MPU4) (set 14) + Prize High Roller (Barcrest) (MPU4) (PRL 0.3 KD) m4przhr__n - Prize High Roller (Barcrest) (MPU4) (set 15) + Prize High Roller (Barcrest) (MPU4) (PRL 0.3 YD) m4przhr__o - Prize High Roller (Barcrest) (MPU4) (set 16) + Prize High Roller (Barcrest) (MPU4) (PRL 0.3 K) m4przhr__p - Prize High Roller (Barcrest) (MPU4) (set 17) + Prize High Roller (Barcrest) (MPU4) (PRL 0.3 Y) m4przlux - Prize Luxor (Barcrest) (MPU4) (set 1) + Prize Luxor (Barcrest) (MPU4) (PLX 0.2) m4przlux__a - Prize Luxor (Barcrest) (MPU4) (set 2) + Prize Luxor (Barcrest) (MPU4) (PLX 0.2 AD) m4przlux__b - Prize Luxor (Barcrest) (MPU4) (set 3) + Prize Luxor (Barcrest) (MPU4) (PLX 0.2 B) m4przlux__c - Prize Luxor (Barcrest) (MPU4) (set 4) + Prize Luxor (Barcrest) (MPU4) (PLX 0.2 D) m4przlux__d - Prize Luxor (Barcrest) (MPU4) (set 5) + Prize Luxor (Barcrest) (MPU4) (PLX 0.2 YD) m4przlux__e - Prize Luxor (Barcrest) (MPU4) (set 6) + Prize Luxor (Barcrest) (MPU4) (PLX 0.2 K) m4przlux__f - Prize Luxor (Barcrest) (MPU4) (set 7) + Prize Luxor (Barcrest) (MPU4) (PLX 0.2 Y) m4przmc @@ -55560,287 +65853,287 @@ m4przmns - Prize Money Showcase (Barcrest) (MPU4) (set 1) + Prize Money Showcase (Barcrest) (MPU4) (SPM 0.2) m4przmns__a - Prize Money Showcase (Barcrest) (MPU4) (set 2) + Prize Money Showcase (Barcrest) (MPU4) (SM8 0.1 AD) m4przmns__b - Prize Money Showcase (Barcrest) (MPU4) (set 3) + Prize Money Showcase (Barcrest) (MPU4) (SM8 0.1 B) m4przmns__c - Prize Money Showcase (Barcrest) (MPU4) (set 4) + Prize Money Showcase (Barcrest) (MPU4) (SM8 0.1 BD) m4przmns__d - Prize Money Showcase (Barcrest) (MPU4) (set 5) + Prize Money Showcase (Barcrest) (MPU4) (SM8 0.1 D) m4przmns__e - Prize Money Showcase (Barcrest) (MPU4) (set 6) + Prize Money Showcase (Barcrest) (MPU4) (SM8 0.1 KD) m4przmns__f - Prize Money Showcase (Barcrest) (MPU4) (set 7) + Prize Money Showcase (Barcrest) (MPU4) (SM8 0.1 YD) m4przmns__g - Prize Money Showcase (Barcrest) (MPU4) (set 8) + Prize Money Showcase (Barcrest) (MPU4) (SM8 0.1 K) m4przmns__h - Prize Money Showcase (Barcrest) (MPU4) (set 9) + Prize Money Showcase (Barcrest) (MPU4) (SM8 0.1) m4przmns__i - Prize Money Showcase (Barcrest) (MPU4) (set 10) + Prize Money Showcase (Barcrest) (MPU4) (SM8 0.1 Y) m4przmns__j - Prize Money Showcase (Barcrest) (MPU4) (set 11) + Prize Money Showcase (Barcrest) (MPU4) (SPM 0.2 B) m4przmns__k - Prize Money Showcase (Barcrest) (MPU4) (set 12) + Prize Money Showcase (Barcrest) (MPU4) (SPM 0.2 D) m4przmns__l - Prize Money Showcase (Barcrest) (MPU4) (set 13) + Prize Money Showcase (Barcrest) (MPU4) (SPM 0.2 YD) m4przmns__m - Prize Money Showcase (Barcrest) (MPU4) (set 14) + Prize Money Showcase (Barcrest) (MPU4) (SPM 0.2 K) m4przmns__n - Prize Money Showcase (Barcrest) (MPU4) (set 15) + Prize Money Showcase (Barcrest) (MPU4) (SPM 0.2 Y) m4przmon - Prize Money (Barcrest) (MPU4) (set 1) + Prize Money (Barcrest) (MPU4) (FP8 0.1) m4przmon__0 - Prize Money (Barcrest) (MPU4) (set 28) + Prize Money (Barcrest) (MPU4) (MT054.0 C) m4przmon__1 - Prize Money (Barcrest) (MPU4) (set 29) + Prize Money (Barcrest) (MPU4) (MT104.0 C) m4przmon__a - Prize Money (Barcrest) (MPU4) (set 2) + Prize Money (Barcrest) (MPU4) (FP8 0.1 B) m4przmon__b - Prize Money (Barcrest) (MPU4) (set 3) + Prize Money (Barcrest) (MPU4) (FP8 0.1 BD) m4przmon__c - Prize Money (Barcrest) (MPU4) (set 4) + Prize Money (Barcrest) (MPU4) (FP8 0.1 D) m4przmon__d - Prize Money (Barcrest) (MPU4) (set 5) + Prize Money (Barcrest) (MPU4) (FP8 0.1 DJ) m4przmon__e - Prize Money (Barcrest) (MPU4) (set 6) + Prize Money (Barcrest) (MPU4) (FP8 0.1 KD) m4przmon__f - Prize Money (Barcrest) (MPU4) (set 7) + Prize Money (Barcrest) (MPU4) (FP8 0.1 YD) m4przmon__g - Prize Money (Barcrest) (MPU4) (set 8) + Prize Money (Barcrest) (MPU4) (FP8 0.1 J) m4przmon__h - Prize Money (Barcrest) (MPU4) (set 9) + Prize Money (Barcrest) (MPU4) (FP8 0.1 K) m4przmon__i - Prize Money (Barcrest) (MPU4) (set 10) + Prize Money (Barcrest) (MPU4) (FP8 0.1 AD) m4przmon__j - Prize Money (Barcrest) (MPU4) (set 11) + Prize Money (Barcrest) (MPU4) (FP8 0.1 Y) m4przmon__k - Prize Money (Barcrest) (MPU4) (set 12) + Prize Money (Barcrest) (MPU4) (FPM 0.3 B) m4przmon__l - Prize Money (Barcrest) (MPU4) (set 13) + Prize Money (Barcrest) (MPU4) (FPM 0.3 D) m4przmon__m - Prize Money (Barcrest) (MPU4) (set 14) + Prize Money (Barcrest) (MPU4) (FPM 0.3 YD) m4przmon__n - Prize Money (Barcrest) (MPU4) (set 15) + Prize Money (Barcrest) (MPU4) (FPM 0.3 K) m4przmon__o - Prize Money (Barcrest) (MPU4) (set 16) + Prize Money (Barcrest) (MPU4) (FPM 0.3) m4przmon__p - Prize Money (Barcrest) (MPU4) (set 17) + Prize Money (Barcrest) (MPU4) (FPM 0.3 Y) m4przmon__q - Prize Money (Barcrest) (MPU4) (set 18) + Prize Money (Barcrest) (MPU4) (MC 53.0 K) m4przmon__r - Prize Money (Barcrest) (MPU4) (set 19) + Prize Money (Barcrest) (MPU4) (MT054.0 K) m4przmon__s - Prize Money (Barcrest) (MPU4) (set 20) + Prize Money (Barcrest) (MPU4) (MC 53.0) m4przmon__t - Prize Money (Barcrest) (MPU4) (set 21) + Prize Money (Barcrest) (MPU4) (MC 53.0 YD) m4przmon__u - Prize Money (Barcrest) (MPU4) (set 22) + Prize Money (Barcrest) (MPU4) (MC 53.0 D) m4przmon__v - Prize Money (Barcrest) (MPU4) (set 23) + Prize Money (Barcrest) (MPU4) (MC103.0 K) m4przmon__w - Prize Money (Barcrest) (MPU4) (set 24) + Prize Money (Barcrest) (MPU4) (MT104.0 K) m4przmon__x - Prize Money (Barcrest) (MPU4) (set 25) + Prize Money (Barcrest) (MPU4) (MC103.0) m4przmon__y - Prize Money (Barcrest) (MPU4) (set 26) + Prize Money (Barcrest) (MPU4) (MC103.0 YD) m4przmon__z - Prize Money (Barcrest) (MPU4) (set 27) + Prize Money (Barcrest) (MPU4) (MC103.0 D) m4przrf - Prize Rich And Famous (Barcrest) (MPU4) (set 1) + Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1) m4przrf__a - Prize Rich And Famous (Barcrest) (MPU4) (set 2) + Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 B) m4przrf__b - Prize Rich And Famous (Barcrest) (MPU4) (set 3) + Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 BD) m4przrf__c - Prize Rich And Famous (Barcrest) (MPU4) (set 4) + Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 D) m4przrf__d - Prize Rich And Famous (Barcrest) (MPU4) (set 5) + Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 DJ) m4przrf__e - Prize Rich And Famous (Barcrest) (MPU4) (set 6) + Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 KD) m4przrf__f - Prize Rich And Famous (Barcrest) (MPU4) (set 7) + Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 YD) m4przrf__g - Prize Rich And Famous (Barcrest) (MPU4) (set 8) + Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 J) m4przrf__h - Prize Rich And Famous (Barcrest) (MPU4) (set 9) + Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 K) m4przrf__i - Prize Rich And Famous (Barcrest) (MPU4) (set 10) + Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 AD) m4przrf__j - Prize Rich And Famous (Barcrest) (MPU4) (set 11) + Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 Y) m4przrfm - Prize Run For Your Money (Barcrest) (MPU4) (set 1) + Prize Run For Your Money (Barcrest) (MPU4) (PRU 0.2) m4przrfm__a - Prize Run For Your Money (Barcrest) (MPU4) (set 2) + Prize Run For Your Money (Barcrest) (MPU4) (PRU 0.2 D) m4przrfm__b - Prize Run For Your Money (Barcrest) (MPU4) (set 3) + Prize Run For Your Money (Barcrest) (MPU4) (PRU 0.2 YD) m4przrfm__c - Prize Run For Your Money (Barcrest) (MPU4) (set 4) + Prize Run For Your Money (Barcrest) (MPU4) (PRU 0.2 K) m4przrfm__d - Prize Run For Your Money (Barcrest) (MPU4) (set 5) + Prize Run For Your Money (Barcrest) (MPU4) (PRU 0.2 B) m4przrfm__e - Prize Run For Your Money (Barcrest) (MPU4) (set 6) + Prize Run For Your Money (Barcrest) (MPU4) (PRU 0.2 Y) m4przrfm__f - Prize Run For Your Money (Barcrest) (MPU4) (set 7) + Prize Run For Your Money (Barcrest) (MPU4) (RM8 0.1 B) m4przrfm__g - Prize Run For Your Money (Barcrest) (MPU4) (set 8) + Prize Run For Your Money (Barcrest) (MPU4) (RM8 0.1 BD) m4przrfm__h - Prize Run For Your Money (Barcrest) (MPU4) (set 9) + Prize Run For Your Money (Barcrest) (MPU4) (RM8 0.1 D) m4przrfm__i - Prize Run For Your Money (Barcrest) (MPU4) (set 10) + Prize Run For Your Money (Barcrest) (MPU4) (RM8 0.1 DJ) m4przrfm__j - Prize Run For Your Money (Barcrest) (MPU4) (set 11) + Prize Run For Your Money (Barcrest) (MPU4) (RM8 0.1 KD) m4przrfm__k - Prize Run For Your Money (Barcrest) (MPU4) (set 12) + Prize Run For Your Money (Barcrest) (MPU4) (RM8 0.1 YD) m4przrfm__l - Prize Run For Your Money (Barcrest) (MPU4) (set 13) + Prize Run For Your Money (Barcrest) (MPU4) (RM8 0.1 J) m4przrfm__m - Prize Run For Your Money (Barcrest) (MPU4) (set 14) + Prize Run For Your Money (Barcrest) (MPU4) (RM8 0.1 K) m4przrfm__n - Prize Run For Your Money (Barcrest) (MPU4) (set 15) + Prize Run For Your Money (Barcrest) (MPU4) (RM8 0.1) m4przrfm__o - Prize Run For Your Money (Barcrest) (MPU4) (set 16) + Prize Run For Your Money (Barcrest) (MPU4) (RM8 0.1 Y) m4przsss @@ -55956,167 +66249,167 @@ m4przve - Prize Viva Esapana (Barcrest) (MPU4) (set 1) + Prize Viva Espana (Barcrest) (MPU4) (PES 0.4) m4przve__a - Prize Viva Esapana (Barcrest) (MPU4) (set 2) + Prize Viva Espana (Barcrest) (MPU4) (PE8 0.1 AD) m4przve__b - Prize Viva Esapana (Barcrest) (MPU4) (set 3) + Prize Viva Espana (Barcrest) (MPU4) (PE8 0.1 B) m4przve__c - Prize Viva Esapana (Barcrest) (MPU4) (set 4) + Prize Viva Espana (Barcrest) (MPU4) (PE8 0.1 BD) m4przve__d - Prize Viva Esapana (Barcrest) (MPU4) (set 5) + Prize Viva Espana (Barcrest) (MPU4) (PE8 0.1 D) m4przve__e - Prize Viva Esapana (Barcrest) (MPU4) (set 6) + Prize Viva Espana (Barcrest) (MPU4) (PE8 0.1 DJ) m4przve__f - Prize Viva Esapana (Barcrest) (MPU4) (set 7) + Prize Viva Espana (Barcrest) (MPU4) (PE8 0.1 KD) m4przve__g - Prize Viva Esapana (Barcrest) (MPU4) (set 8) + Prize Viva Espana (Barcrest) (MPU4) (PE8 0.1 YD) m4przve__h - Prize Viva Esapana (Barcrest) (MPU4) (set 9) + Prize Viva Espana (Barcrest) (MPU4) (PE8 0.1 J) m4przve__i - Prize Viva Esapana (Barcrest) (MPU4) (set 10) + Prize Viva Espana (Barcrest) (MPU4) (PE8 0.1 K) m4przve__j - Prize Viva Esapana (Barcrest) (MPU4) (set 11) + Prize Viva Espana (Barcrest) (MPU4) (PE8 0.1) m4przve__k - Prize Viva Esapana (Barcrest) (MPU4) (set 12) + Prize Viva Espana (Barcrest) (MPU4) (PE8 0.1 Y) m4przve__l - Prize Viva Esapana (Barcrest) (MPU4) (set 13) + Prize Viva Espana (Barcrest) (MPU4) (PES 0.4 B) m4przve__m - Prize Viva Esapana (Barcrest) (MPU4) (set 14) + Prize Viva Espana (Barcrest) (MPU4) (PES 0.4 D) m4przve__n - Prize Viva Esapana (Barcrest) (MPU4) (set 15) + Prize Viva Espana (Barcrest) (MPU4) (PES 0.4 YD) m4przve__o - Prize Viva Esapana (Barcrest) (MPU4) (set 16) + Prize Viva Espana (Barcrest) (MPU4) (PES 0.4 K) m4przve__p - Prize Viva Esapana (Barcrest) (MPU4) (set 17) + Prize Viva Espana (Barcrest) (MPU4) (PES 0.4 Y) m4przwo - Prize What's On (Barcrest) (MPU4) (set 1) + Prize What's On (Barcrest) (MPU4) (PWO 0.5) m4przwo__a - Prize What's On (Barcrest) (MPU4) (set 2) + Prize What's On (Barcrest) (MPU4) (PWO 0.5 B) m4przwo__b - Prize What's On (Barcrest) (MPU4) (set 3) + Prize What's On (Barcrest) (MPU4) (PWO 0.5 D) m4przwo__c - Prize What's On (Barcrest) (MPU4) (set 4) + Prize What's On (Barcrest) (MPU4) (PWO 0.5 YD) m4przwo__d - Prize What's On (Barcrest) (MPU4) (set 5) + Prize What's On (Barcrest) (MPU4) (PWO 0.5 K) m4przwo__e - Prize What's On (Barcrest) (MPU4) (set 6) + Prize What's On (Barcrest) (MPU4) (PWO 0.5 C) m4przwo__f - Prize What's On (Barcrest) (MPU4) (set 7) + Prize What's On (Barcrest) (MPU4) (PWO 0.5 Y) m4przwta - Prize Winner Takes All (Barcrest) (MPU4) (set 1) + Prize Winner Takes All (Barcrest) (MPU4) (PWN 0.4) m4przwta__a - Prize Winner Takes All (Barcrest) (MPU4) (set 2) + Prize Winner Takes All (Barcrest) (MPU4) (PW8 0.2 AD) m4przwta__b - Prize Winner Takes All (Barcrest) (MPU4) (set 3) + Prize Winner Takes All (Barcrest) (MPU4) (PW8 0.2 B) m4przwta__c - Prize Winner Takes All (Barcrest) (MPU4) (set 4) + Prize Winner Takes All (Barcrest) (MPU4) (PW8 0.2 BD) m4przwta__d - Prize Winner Takes All (Barcrest) (MPU4) (set 5) + Prize Winner Takes All (Barcrest) (MPU4) (PW8 0.2 D) m4przwta__e - Prize Winner Takes All (Barcrest) (MPU4) (set 6) + Prize Winner Takes All (Barcrest) (MPU4) (PW8 0.2 DJ) m4przwta__f - Prize Winner Takes All (Barcrest) (MPU4) (set 7) + Prize Winner Takes All (Barcrest) (MPU4) (PW8 0.2 KD) m4przwta__g - Prize Winner Takes All (Barcrest) (MPU4) (set 8) + Prize Winner Takes All (Barcrest) (MPU4) (PW8 0.2 YD) m4przwta__h - Prize Winner Takes All (Barcrest) (MPU4) (set 9) + Prize Winner Takes All (Barcrest) (MPU4) (PW8 0.2 J) m4przwta__i - Prize Winner Takes All (Barcrest) (MPU4) (set 10) + Prize Winner Takes All (Barcrest) (MPU4) (PW8 0.2 K) m4przwta__j - Prize Winner Takes All (Barcrest) (MPU4) (set 11) + Prize Winner Takes All (Barcrest) (MPU4) (PW8 0.2) m4przwta__k - Prize Winner Takes All (Barcrest) (MPU4) (set 12) + Prize Winner Takes All (Barcrest) (MPU4) (PW8 0.2 Y) m4przwta__l - Prize Winner Takes All (Barcrest) (MPU4) (set 13) + Prize Winner Takes All (Barcrest) (MPU4) (PWN 0.4 A) m4przwta__m - Prize Winner Takes All (Barcrest) (MPU4) (set 14) + Prize Winner Takes All (Barcrest) (MPU4) (PWN 0.4 B) m4przwta__n - Prize Winner Takes All (Barcrest) (MPU4) (set 15) + Prize Winner Takes All (Barcrest) (MPU4) (PWN 0.4 YD) m4przwta__o - Prize Winner Takes All (Barcrest) (MPU4) (set 16) + Prize Winner Takes All (Barcrest) (MPU4) (PWN 0.4 K) m4przwta__p - Prize Winner Takes All (Barcrest) (MPU4) (set 17) + Prize Winner Takes All (Barcrest) (MPU4) (PWN 0.4 R) m4ptblkc @@ -56560,279 +66853,279 @@ m4ready - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 1) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8) m4ready__0 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 28) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 B) m4ready__1 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 29) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 BD) m4ready__2 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 30) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 C) m4ready__3 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 31) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 D) m4ready__4 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 32) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 KD) m4ready__5 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 33) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 RD) m4ready__6 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 34) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 YD) m4ready__7 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 35) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 K) m4ready__8 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 36) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 R) m4ready__9 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 37) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2) m4ready__a - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 2) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 AD) m4ready__a0 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 64) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 RD) m4ready__a1 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 65) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 YD) m4ready__a2 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 66) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 K) m4ready__a3 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 67) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 R) m4ready__a4 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 68) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0) m4ready__a5 - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 69) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 Y) m4ready__aa - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 38) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 Y) m4ready__ab - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 39) + Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 AD) m4ready__ac - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 40) + Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 B) m4ready__ad - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 41) + Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 BD) m4ready__ae - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 42) + Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 C) m4ready__af - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 43) + Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 D) m4ready__ag - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 44) + Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 KD) m4ready__ah - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 45) + Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 YD) m4ready__ai - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 46) + Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 K) m4ready__aj - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 47) + Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 R) m4ready__ak - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 48) + Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2) m4ready__al - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 49) + Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 Y) m4ready__am - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 50) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 AD) m4ready__an - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 51) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 BD) m4ready__ao - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 52) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 D) m4ready__ap - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 53) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 KD) m4ready__aq - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 54) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 YD) m4ready__ar - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 55) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 K) m4ready__as - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 56) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 B) m4ready__at - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 57) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 Y) m4ready__au - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 58) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 AD) m4ready__av - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 59) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 B) m4ready__aw - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 60) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 BD) m4ready__ax - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 61) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 C) m4ready__ay - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 62) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 D) m4ready__az - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 63) + Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 KD) m4ready__b - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 3) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 B) m4ready__c - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 4) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 BD) m4ready__d - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 5) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 C) m4ready__e - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 6) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 D) m4ready__f - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 7) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 KD) m4ready__g - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 8) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 RD) m4ready__h - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 9) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 YD) m4ready__i - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 10) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 K) m4ready__j - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 11) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 R) m4ready__k - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 12) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1) m4ready__l - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 13) + Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 Y) m4ready__m - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 14) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 AD) m4ready__n - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 15) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 B) m4ready__o - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 16) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 BD) m4ready__p - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 17) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 C) m4ready__q - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 18) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 D) m4ready__r - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 19) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 KD) m4ready__s - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 20) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 RD) m4ready__t - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 21) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 YD) m4ready__u - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 22) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 K) m4ready__v - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 23) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 R) m4ready__w - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 24) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2) m4ready__x - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 25) + Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 Y) m4ready__y - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 26) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.1) m4ready__z - Ready Steady Go (Barcrest) (type 2) (MPU4) (set 27) + Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 AD) m4reelpk @@ -56852,279 +67145,279 @@ m4rfym - Run For Your Money (Barcrest) (MPU4) (set 1) + Run For Your Money (Barcrest) (MPU4) (RUN 0.5) m4rfym__0 - Run For Your Money (Barcrest) (MPU4) (set 28) + Run For Your Money (Barcrest) (MPU4) (APR 0.1 YD) m4rfym__1 - Run For Your Money (Barcrest) (MPU4) (set 29) + Run For Your Money (Barcrest) (MPU4) (APR 0.1 K) m4rfym__2 - Run For Your Money (Barcrest) (MPU4) (set 30) + Run For Your Money (Barcrest) (MPU4) (APR 0.1) m4rfym__3 - Run For Your Money (Barcrest) (MPU4) (set 31) + Run For Your Money (Barcrest) (MPU4) (APR 0.1 Y) m4rfym__4 - Run For Your Money (Barcrest) (MPU4) (set 32) + Run For Your Money (Barcrest) (MPU4) (V1 8 0.1 C, hack, set 1) m4rfym__5 - Run For Your Money (Barcrest) (MPU4) (set 33) + Run For Your Money (Barcrest) (MPU4) (V1 8 0.1 C, hack, set 2) m4rfym__6 - Run For Your Money (Barcrest) (MPU4) (set 34) + Run For Your Money (Barcrest) (MPU4) (RUC 1.3 K5, hack, set 1) m4rfym__7 - Run For Your Money (Barcrest) (MPU4) (set 35) + Run For Your Money (Barcrest) (MPU4) (RU4 1.1 K5, hack, set 2) m4rfym__8 - Run For Your Money (Barcrest) (MPU4) (set 36) + Run For Your Money (Barcrest) (MPU4) (RU5 0.1 AD) m4rfym__9 - Run For Your Money (Barcrest) (MPU4) (set 37) + Run For Your Money (Barcrest) (MPU4) (RU5 0.1 B) m4rfym__a - Run For Your Money (Barcrest) (MPU4) (set 2) + Run For Your Money (Barcrest) (MPU4) (AP1 0.1 AD) m4rfym__a0 - Run For Your Money (Barcrest) (MPU4) (set 64) + Run For Your Money (Barcrest) (MPU4) (RUT 0.1) m4rfym__a1 - Run For Your Money (Barcrest) (MPU4) (set 65) + Run For Your Money (Barcrest) (MPU4) (RUT 0.1 Y) m4rfym__a2 - Run For Your Money (Barcrest) (MPU4) (set 66) + Run For Your Money (Barcrest) (MPU4) (V1 8 0.1 C, hack, set 3) m4rfym__a3 - Run For Your Money (Barcrest) (MPU4) (set 67) + Run For Your Money (Barcrest) (MPU4) (RUC 1.3 K5, hack, set 2) m4rfym__a4 - Run For Your Money (Barcrest) (MPU4) (set 68) + Run For Your Money (Barcrest) (MPU4) (RU4 1.1 K5, hack, set 1) m4rfym__a5 - Run For Your Money (Barcrest) (MPU4) (set 69) + Run For Your Money (Barcrest) (MPU4) (RU8 1.2 K5, hack) m4rfym__aa - Run For Your Money (Barcrest) (MPU4) (set 38) + Run For Your Money (Barcrest) (MPU4) (RU5 0.1 BD) m4rfym__ab - Run For Your Money (Barcrest) (MPU4) (set 39) + Run For Your Money (Barcrest) (MPU4) (RU5 0.1 D) m4rfym__ac - Run For Your Money (Barcrest) (MPU4) (set 40) + Run For Your Money (Barcrest) (MPU4) (RU5 0.1 KD) m4rfym__ad - Run For Your Money (Barcrest) (MPU4) (set 41) + Run For Your Money (Barcrest) (MPU4) (RU5 0.1 YD) m4rfym__ae - Run For Your Money (Barcrest) (MPU4) (set 42) + Run For Your Money (Barcrest) (MPU4) (RU5 0.1 K) m4rfym__af - Run For Your Money (Barcrest) (MPU4) (set 43) + Run For Your Money (Barcrest) (MPU4) (RU5 0.1) m4rfym__ag - Run For Your Money (Barcrest) (MPU4) (set 44) + Run For Your Money (Barcrest) (MPU4) (RU5 0.1 Y) m4rfym__ah - Run For Your Money (Barcrest) (MPU4) (set 45) + Run For Your Money (Barcrest) (MPU4) (RU8 0.1 C) m4rfym__ai - Run For Your Money (Barcrest) (MPU4) (set 46) + Run For Your Money (Barcrest) (MPU4) (RU8 0.1 D) m4rfym__aj - Run For Your Money (Barcrest) (MPU4) (set 47) + Run For Your Money (Barcrest) (MPU4) (RU8 0.1 KD) m4rfym__ak - Run For Your Money (Barcrest) (MPU4) (set 48) + Run For Your Money (Barcrest) (MPU4) (RU8 0.1 YD) m4rfym__al - Run For Your Money (Barcrest) (MPU4) (set 49) + Run For Your Money (Barcrest) (MPU4) (RU8 0.1 K) m4rfym__am - Run For Your Money (Barcrest) (MPU4) (set 50) + Run For Your Money (Barcrest) (MPU4) (RU8 0.1) m4rfym__an - Run For Your Money (Barcrest) (MPU4) (set 51) + Run For Your Money (Barcrest) (MPU4) (RU8 0.1 Y) m4rfym__ao - Run For Your Money (Barcrest) (MPU4) (set 52) + Run For Your Money (Barcrest) (MPU4) (RUN 0.5 C) m4rfym__ap - Run For Your Money (Barcrest) (MPU4) (set 53) + Run For Your Money (Barcrest) (MPU4) (RUN 0.5 YD) m4rfym__aq - Run For Your Money (Barcrest) (MPU4) (set 54) + Run For Your Money (Barcrest) (MPU4) (RUN 0.5 K) m4rfym__ar - Run For Your Money (Barcrest) (MPU4) (set 55) + Run For Your Money (Barcrest) (MPU4) (RUN 0.5 D) m4rfym__as - Run For Your Money (Barcrest) (MPU4) (set 56) + Run For Your Money (Barcrest) (MPU4) (RUN 0.5 Y) m4rfym__at - Run For Your Money (Barcrest) (MPU4) (set 57) + Run For Your Money (Barcrest) (MPU4) (RUT 0.1 AD) m4rfym__au - Run For Your Money (Barcrest) (MPU4) (set 58) + Run For Your Money (Barcrest) (MPU4) (RUT 0.1 B) m4rfym__av - Run For Your Money (Barcrest) (MPU4) (set 59) + Run For Your Money (Barcrest) (MPU4) (RUT 0.1 BD) m4rfym__aw - Run For Your Money (Barcrest) (MPU4) (set 60) + Run For Your Money (Barcrest) (MPU4) (RUT 0.1 D) m4rfym__ax - Run For Your Money (Barcrest) (MPU4) (set 61) + Run For Your Money (Barcrest) (MPU4) (RUT 0.1 KD) m4rfym__ay - Run For Your Money (Barcrest) (MPU4) (set 62) + Run For Your Money (Barcrest) (MPU4) (RUT 0.1 YD) m4rfym__az - Run For Your Money (Barcrest) (MPU4) (set 63) + Run For Your Money (Barcrest) (MPU4) (RUT 0.1 K) m4rfym__b - Run For Your Money (Barcrest) (MPU4) (set 3) + Run For Your Money (Barcrest) (MPU4) (AP1 0.1 B) m4rfym__c - Run For Your Money (Barcrest) (MPU4) (set 4) + Run For Your Money (Barcrest) (MPU4) (AP1 0.1 BD) m4rfym__d - Run For Your Money (Barcrest) (MPU4) (set 5) + Run For Your Money (Barcrest) (MPU4) (AP1 0.1 D) m4rfym__e - Run For Your Money (Barcrest) (MPU4) (set 6) + Run For Your Money (Barcrest) (MPU4) (AP1 0.1 KD) m4rfym__f - Run For Your Money (Barcrest) (MPU4) (set 7) + Run For Your Money (Barcrest) (MPU4) (AP1 0.1 YD) m4rfym__g - Run For Your Money (Barcrest) (MPU4) (set 8) + Run For Your Money (Barcrest) (MPU4) (AP1 0.1 K) m4rfym__h - Run For Your Money (Barcrest) (MPU4) (set 9) + Run For Your Money (Barcrest) (MPU4) (AP1 0.1) m4rfym__i - Run For Your Money (Barcrest) (MPU4) (set 10) + Run For Your Money (Barcrest) (MPU4) (AP1 0.1 Y) m4rfym__j - Run For Your Money (Barcrest) (MPU4) (set 11) + Run For Your Money (Barcrest) (MPU4) (AP5 0.2 AD) m4rfym__k - Run For Your Money (Barcrest) (MPU4) (set 12) + Run For Your Money (Barcrest) (MPU4) (AP5 0.2 B) m4rfym__l - Run For Your Money (Barcrest) (MPU4) (set 13) + Run For Your Money (Barcrest) (MPU4) (AP5 0.2 BD) m4rfym__m - Run For Your Money (Barcrest) (MPU4) (set 14) + Run For Your Money (Barcrest) (MPU4) (AP5 0.2 D) m4rfym__n - Run For Your Money (Barcrest) (MPU4) (set 15) + Run For Your Money (Barcrest) (MPU4) (AP5 0.2 KD) m4rfym__o - Run For Your Money (Barcrest) (MPU4) (set 16) + Run For Your Money (Barcrest) (MPU4) (AP5 0.2 RD) m4rfym__p - Run For Your Money (Barcrest) (MPU4) (set 17) + Run For Your Money (Barcrest) (MPU4) (AP5 0.2 YD) m4rfym__q - Run For Your Money (Barcrest) (MPU4) (set 18) + Run For Your Money (Barcrest) (MPU4) (AP5 0.2 K) m4rfym__r - Run For Your Money (Barcrest) (MPU4) (set 19) + Run For Your Money (Barcrest) (MPU4) (AP5 0.2 R) m4rfym__s - Run For Your Money (Barcrest) (MPU4) (set 20) + Run For Your Money (Barcrest) (MPU4) (AP5 0.2) m4rfym__t - Run For Your Money (Barcrest) (MPU4) (set 21) + Run For Your Money (Barcrest) (MPU4) (AP5 0.2 Y) m4rfym__u - Run For Your Money (Barcrest) (MPU4) (set 22) + Run For Your Money (Barcrest) (MPU4) (APR 0.1 AD) m4rfym__v - Run For Your Money (Barcrest) (MPU4) (set 23) + Run For Your Money (Barcrest) (MPU4) (APR 0.1 B) m4rfym__w - Run For Your Money (Barcrest) (MPU4) (set 24) + Run For Your Money (Barcrest) (MPU4) (APR 0.1 BD) m4rfym__x - Run For Your Money (Barcrest) (MPU4) (set 25) + Run For Your Money (Barcrest) (MPU4) (APR 0.1 C) m4rfym__y - Run For Your Money (Barcrest) (MPU4) (set 26) + Run For Your Money (Barcrest) (MPU4) (APR 0.1 D) m4rfym__z - Run For Your Money (Barcrest) (MPU4) (set 27) + Run For Your Money (Barcrest) (MPU4) (APR 0.1 KD) m4rhfev @@ -57360,59 +67653,59 @@ m4rhog2 - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 1) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6) m4rhog2__a - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 2) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 AD) m4rhog2__b - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 3) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 B) m4rhog2__c - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 4) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 BD) m4rhog2__d - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 5) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 D) m4rhog2__e - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 6) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 DH) m4rhog2__f - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 7) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 KD) m4rhog2__g - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 8) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 RD) m4rhog2__h - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 9) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 YD) m4rhog2__i - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 10) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 H) m4rhog2__j - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 11) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 K) m4rhog2__k - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 12) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 R) m4rhog2__l - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 13) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 C) m4rhog2__m - Road Hog 2 - I'm Back (Barcrest) (MPU4) (set 14) + Road Hog 2 - I'm Back (Barcrest) (MPU4) (2RH 0.6 Y) m4rhog_h1 @@ -57480,15 +67773,15 @@ m4rhogc - Road Hog Club (Barcrest) (MPU4) (set 1) + Road Hog Club (Barcrest) (MPU4) (RHC 0.5) m4rhogc__a - Road Hog Club (Barcrest) (MPU4) (set 2) + Road Hog Club (Barcrest) (MPU4) (RHC 0.5 F) m4rhogc__b - Road Hog Club (Barcrest) (MPU4) (set 3) + Road Hog Club (Barcrest) (MPU4) (RHC 0.5 D) m4rhogr1 @@ -57496,27 +67789,27 @@ m4rhogr1c - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0C) + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 C) m4rhogr1d - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0D) + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 D) m4rhogr1k - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0K, set 1) + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 K, set 1) m4rhogr1k_a - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0K, set 2, wrong version number?) + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 K, set 2, wrong version number?) m4rhogr1y - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0Y) + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 Y) m4rhogr1yd - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0YD) + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 YD) m4rhogr2 @@ -57524,23 +67817,23 @@ m4rhogr2c - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0C) + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0 C) m4rhogr2d - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0D) + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0 D) m4rhogr2k - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0K) + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0 K) m4rhogr2y - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0Y) + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0 Y) m4rhogr2yd - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0YD) + Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0 YD) m4rhogr3 @@ -57548,471 +67841,471 @@ m4rhogr6ad - Road Hog (Barcrest) (MPU4) (RR6 1.2AD) + Road Hog (Barcrest) (MPU4) (RR6 1.2 AD) m4rhogr6b - Road Hog (Barcrest) (MPU4) (RR6 1.2B) + Road Hog (Barcrest) (MPU4) (RR6 1.2 B) m4rhogr6c - Road Hog (Barcrest) (MPU4) (RR6 1.2C) + Road Hog (Barcrest) (MPU4) (RR6 1.2 C) m4rhogr6d - Road Hog (Barcrest) (MPU4) (RR6 1.2D) + Road Hog (Barcrest) (MPU4) (RR6 1.2 D) m4rhogr6k - Road Hog (Barcrest) (MPU4) (RR6 1.2K) + Road Hog (Barcrest) (MPU4) (RR6 1.2 K) m4rhogr6y - Road Hog (Barcrest) (MPU4) (RR6 1.2Y) + Road Hog (Barcrest) (MPU4) (RR6 1.2 Y) m4rhogr6y_a - Road Hog (Barcrest) (MPU4) (RR6 1.1Y) + Road Hog (Barcrest) (MPU4) (RR6 1.1 Y) m4rhogr6yd - Road Hog (Barcrest) (MPU4) (RR6 1.2YD) + Road Hog (Barcrest) (MPU4) (RR6 1.2 YD) m4rhr - Red Hot Roll (Barcrest) (MPU4) (set 1) + Red Hot Roll (Barcrest) (MPU4) (CR4 0.9) m4rhr__0 - Red Hot Roll (Barcrest) (MPU4) (set 28) + Red Hot Roll (Barcrest) (MPU4) (CRU 0.1 DY) m4rhr__1 - Red Hot Roll (Barcrest) (MPU4) (set 29) + Red Hot Roll (Barcrest) (MPU4) (CRU 0.1 K) m4rhr__2 - Red Hot Roll (Barcrest) (MPU4) (set 30) + Red Hot Roll (Barcrest) (MPU4) (CRU 0.1) m4rhr__3 - Red Hot Roll (Barcrest) (MPU4) (set 31) + Red Hot Roll (Barcrest) (MPU4) (CRU 0.1 Y) m4rhr__4 - Red Hot Roll (Barcrest) (MPU4) (set 32) + Red Hot Roll (Barcrest) (MPU4) (RH8 0.1 K) m4rhr__5 - Red Hot Roll (Barcrest) (MPU4) (set 33) + Red Hot Roll (Barcrest) (MPU4) (RHR 0.3 R) m4rhr__6 - Red Hot Roll (Barcrest) (MPU4) (set 34) + Red Hot Roll (Barcrest) (MPU4) (RH8 0.1 C, hack, set 1) m4rhr__7 - Red Hot Roll (Barcrest) (MPU4) (set 35) + Red Hot Roll (Barcrest) (MPU4) (RH8 0.1 C, hack, set 2) m4rhr__8 - Red Hot Roll (Barcrest) (MPU4) (set 36) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 C, hack) m4rhr__9 - Red Hot Roll (Barcrest) (MPU4) (set 37) + Red Hot Roll (Barcrest) (MPU4) (SS2 1.0, hack?) m4rhr__a - Red Hot Roll (Barcrest) (MPU4) (set 2) + Red Hot Roll (Barcrest) (MPU4) (CR4 0.9 AD) m4rhr__a0 - Red Hot Roll (Barcrest) (MPU4) (set 64) + Red Hot Roll (Barcrest) (MPU4) (RHU 0.2) m4rhr__a1 - Red Hot Roll (Barcrest) (MPU4) (set 65) + Red Hot Roll (Barcrest) (MPU4) (RHU 0.2 Y) m4rhr__a2 - Red Hot Roll (Barcrest) (MPU4) (set 66) + Red Hot Roll (Barcrest) (MPU4) (RHR 5.0) m4rhr__a3 - Red Hot Roll (Barcrest) (MPU4) (set 67) + Red Hot Roll (Barcrest) (MPU4) (RHR 2.0 D) m4rhr__a4 - Red Hot Roll (Barcrest) (MPU4) (RH8 0.1C) + Red Hot Roll (Barcrest) (MPU4) (RH8 0.1 C) m4rhr__aa - Red Hot Roll (Barcrest) (MPU4) (set 38) + Red Hot Roll (Barcrest) (MPU4) (RHR 0.3 B) m4rhr__ab - Red Hot Roll (Barcrest) (MPU4) (set 39) + Red Hot Roll (Barcrest) (MPU4) (RHR 0.3 BD) m4rhr__ac - Red Hot Roll (Barcrest) (MPU4) (set 40) + Red Hot Roll (Barcrest) (MPU4) (RHR 0.3 C) m4rhr__ad - Red Hot Roll (Barcrest) (MPU4) (set 41) + Red Hot Roll (Barcrest) (MPU4) (RHR 0.3 D) m4rhr__ae - Red Hot Roll (Barcrest) (MPU4) (set 42) + Red Hot Roll (Barcrest) (MPU4) (RHR 0.3 K) m4rhr__af - Red Hot Roll (Barcrest) (MPU4) (set 43) + Red Hot Roll (Barcrest) (MPU4) (RHR 0.3) m4rhr__ag - Red Hot Roll (Barcrest) (MPU4) (set 44) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 AD) m4rhr__ah - Red Hot Roll (Barcrest) (MPU4) (set 45) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 B) m4rhr__ai - Red Hot Roll (Barcrest) (MPU4) (set 46) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 BD) m4rhr__aj - Red Hot Roll (Barcrest) (MPU4) (set 47) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 D) m4rhr__ak - Red Hot Roll (Barcrest) (MPU4) (set 48) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 KD) m4rhr__al - Red Hot Roll (Barcrest) (MPU4) (set 49) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 RD) m4rhr__am - Red Hot Roll (Barcrest) (MPU4) (set 50) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 YD) m4rhr__an - Red Hot Roll (Barcrest) (MPU4) (set 51) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 K) m4rhr__ao - Red Hot Roll (Barcrest) (MPU4) (set 52) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 R) m4rhr__ap - Red Hot Roll (Barcrest) (MPU4) (set 53) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3) m4rhr__aq - Red Hot Roll (Barcrest) (MPU4) (set 54) + Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 Y) m4rhr__ar - Red Hot Roll (Barcrest) (MPU4) (set 55) + Red Hot Roll (Barcrest) (MPU4) (RHU 0.2 AD) m4rhr__as - Red Hot Roll (Barcrest) (MPU4) (set 56) + Red Hot Roll (Barcrest) (MPU4) (RHU 0.2 B) m4rhr__at - Red Hot Roll (Barcrest) (MPU4) (set 57) + Red Hot Roll (Barcrest) (MPU4) (RHU 0.2 BD) m4rhr__au - Red Hot Roll (Barcrest) (MPU4) (set 58) + Red Hot Roll (Barcrest) (MPU4) (RHU 0.2 D) m4rhr__av - Red Hot Roll (Barcrest) (MPU4) (set 59) + Red Hot Roll (Barcrest) (MPU4) (RHU 0.2 KD) m4rhr__aw - Red Hot Roll (Barcrest) (MPU4) (set 60) + Red Hot Roll (Barcrest) (MPU4) (RHU 0.2 RD) m4rhr__ax - Red Hot Roll (Barcrest) (MPU4) (set 61) + Red Hot Roll (Barcrest) (MPU4) (RHU 0.2 YD) m4rhr__ay - Red Hot Roll (Barcrest) (MPU4) (set 62) + Red Hot Roll (Barcrest) (MPU4) (RHU 0.2 K) m4rhr__az - Red Hot Roll (Barcrest) (MPU4) (set 63) + Red Hot Roll (Barcrest) (MPU4) (RHU 0.2 R) m4rhr__b - Red Hot Roll (Barcrest) (MPU4) (set 3) + Red Hot Roll (Barcrest) (MPU4) (CR4 0.9 B) m4rhr__c - Red Hot Roll (Barcrest) (MPU4) (set 4) + Red Hot Roll (Barcrest) (MPU4) (CR4 0.9 BD) m4rhr__d - Red Hot Roll (Barcrest) (MPU4) (set 5) + Red Hot Roll (Barcrest) (MPU4) (CR4 0.9 D) m4rhr__e - Red Hot Roll (Barcrest) (MPU4) (set 6) + Red Hot Roll (Barcrest) (MPU4) (CR4 0.9 KD) m4rhr__f - Red Hot Roll (Barcrest) (MPU4) (set 7) + Red Hot Roll (Barcrest) (MPU4) (CR4 0.9 YD) m4rhr__g - Red Hot Roll (Barcrest) (MPU4) (set 8) + Red Hot Roll (Barcrest) (MPU4) (CR4 0.9 K) m4rhr__h - Red Hot Roll (Barcrest) (MPU4) (set 9) + Red Hot Roll (Barcrest) (MPU4) (CR4 0.9 Y) m4rhr__i - Red Hot Roll (Barcrest) (MPU4) (set 10) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.2 KD / CR4 0.2) m4rhr__j - Red Hot Roll (Barcrest) (MPU4) (set 11) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 AD / CR4 0.3) m4rhr__k - Red Hot Roll (Barcrest) (MPU4) (set 12) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 B / CR4 0.3) m4rhr__l - Red Hot Roll (Barcrest) (MPU4) (set 13) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 BD / CR4 0.3) m4rhr__m - Red Hot Roll (Barcrest) (MPU4) (set 14) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 C / CR4 0.3) m4rhr__n - Red Hot Roll (Barcrest) (MPU4) (set 15) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 D / CR4 0.3) m4rhr__o - Red Hot Roll (Barcrest) (MPU4) (set 16) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 KD / CR4 0.3) m4rhr__p - Red Hot Roll (Barcrest) (MPU4) (set 17) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 RD / CR4 0.3) m4rhr__q - Red Hot Roll (Barcrest) (MPU4) (set 18) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 YD / CR4 0.3) m4rhr__r - Red Hot Roll (Barcrest) (MPU4) (set 19) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 K / CR4 0.3) m4rhr__s - Red Hot Roll (Barcrest) (MPU4) (set 20) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 R / CR4 0.3) m4rhr__t - Red Hot Roll (Barcrest) (MPU4) (set 21) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 / CR4 0.3) m4rhr__u - Red Hot Roll (Barcrest) (MPU4) (set 22) + Red Hot Roll (Barcrest) (MPU4) (CRT 0.3 Y / CR4 0.3) m4rhr__v - Red Hot Roll (Barcrest) (MPU4) (set 23) + Red Hot Roll (Barcrest) (MPU4) (CRU 0.1 AD) m4rhr__w - Red Hot Roll (Barcrest) (MPU4) (set 24) + Red Hot Roll (Barcrest) (MPU4) (CRU 0.1 B) m4rhr__x - Red Hot Roll (Barcrest) (MPU4) (set 25) + Red Hot Roll (Barcrest) (MPU4) (CRU 0.1 BD) m4rhr__y - Red Hot Roll (Barcrest) (MPU4) (set 26) + Red Hot Roll (Barcrest) (MPU4) (CRU 0.1 D) m4rhr__z - Red Hot Roll (Barcrest) (MPU4) (set 27) + Red Hot Roll (Barcrest) (MPU4) (CRU 0.1 DK) m4rhrc - Red Hot Roll Classic (Barcrest) (MPU4) (set 1) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 / CRU 0.3) m4rhrc__0 - Red Hot Roll Classic (Barcrest) (MPU4) (set 28) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 AC/ CR4 0.3) m4rhrc__1 - Red Hot Roll Classic (Barcrest) (MPU4) (set 29) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 D / CR4 0.3) m4rhrc__2 - Red Hot Roll Classic (Barcrest) (MPU4) (set 30) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 KD / CR4 0.3) m4rhrc__3 - Red Hot Roll Classic (Barcrest) (MPU4) (set 31) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 RD / CR4 0.3) m4rhrc__4 - Red Hot Roll Classic (Barcrest) (MPU4) (set 32) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 YD / CR4 0.3) m4rhrc__5 - Red Hot Roll Classic (Barcrest) (MPU4) (set 33) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 K / CR4 0.3) m4rhrc__6 - Red Hot Roll Classic (Barcrest) (MPU4) (set 34) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 R / CR4 0.3) m4rhrc__7 - Red Hot Roll Classic (Barcrest) (MPU4) (set 35) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 / CR4 0.3) m4rhrc__8 - Red Hot Roll Classic (Barcrest) (MPU4) (set 36) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 Y / CR4 0.3) m4rhrc__a - Red Hot Roll Classic (Barcrest) (MPU4) (set 2) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 B / CRU 0.3) m4rhrc__aa - Red Hot Roll Classic (Barcrest) (MPU4) (set 38) + Red Hot Roll Classic (Barcrest) (MPU4) (RHR 5.0) m4rhrc__b - Red Hot Roll Classic (Barcrest) (MPU4) (set 3) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 BD / CRU 0.3) m4rhrc__c - Red Hot Roll Classic (Barcrest) (MPU4) (set 4) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 C / CRU 0.3) m4rhrc__d - Red Hot Roll Classic (Barcrest) (MPU4) (set 5) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 D / CRU 0.3) m4rhrc__e - Red Hot Roll Classic (Barcrest) (MPU4) (set 6) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 KD / CRU 0.3) m4rhrc__f - Red Hot Roll Classic (Barcrest) (MPU4) (set 7) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 RD / CRU 0.3) m4rhrc__g - Red Hot Roll Classic (Barcrest) (MPU4) (set 8) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 YD / CRU 0.3) m4rhrc__h - Red Hot Roll Classic (Barcrest) (MPU4) (set 9) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 K / CRU 0.3) m4rhrc__i - Red Hot Roll Classic (Barcrest) (MPU4) (set 10) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 R / CRU 0.3) m4rhrc__j - Red Hot Roll Classic (Barcrest) (MPU4) (set 11) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 AD / CRU 0.3) m4rhrc__k - Red Hot Roll Classic (Barcrest) (MPU4) (set 12) + Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 Y / CRU 0.3) m4rhrc__l - Red Hot Roll Classic (Barcrest) (MPU4) (set 13) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 AD / CR4 0.3) m4rhrc__m - Red Hot Roll Classic (Barcrest) (MPU4) (set 14) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 B / CR4 0.3) m4rhrc__n - Red Hot Roll Classic (Barcrest) (MPU4) (set 15) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 BD / CR4 0.3) m4rhrc__o - Red Hot Roll Classic (Barcrest) (MPU4) (set 16) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 C / CR4 0.3) m4rhrc__p - Red Hot Roll Classic (Barcrest) (MPU4) (set 17) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 D / CR4 0.3) m4rhrc__q - Red Hot Roll Classic (Barcrest) (MPU4) (set 18) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 KD / CR4 0.3) m4rhrc__r - Red Hot Roll Classic (Barcrest) (MPU4) (set 19) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 RD / CR4 0.3) m4rhrc__s - Red Hot Roll Classic (Barcrest) (MPU4) (set 20) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 YD / CR4 0.3) m4rhrc__t - Red Hot Roll Classic (Barcrest) (MPU4) (set 21) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 K / CR4 0.3) m4rhrc__u - Red Hot Roll Classic (Barcrest) (MPU4) (set 22) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 R / CR4 0.3) m4rhrc__v - Red Hot Roll Classic (Barcrest) (MPU4) (set 23) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 / CR4 0.3) m4rhrc__w - Red Hot Roll Classic (Barcrest) (MPU4) (set 24) + Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 Y / CR4 0.3) m4rhrc__x - Red Hot Roll Classic (Barcrest) (MPU4) (set 25) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 AD / CR4 0.3) m4rhrc__y - Red Hot Roll Classic (Barcrest) (MPU4) (set 26) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 B / CR4 0.3) m4rhrc__z - Red Hot Roll Classic (Barcrest) (MPU4) (set 27) + Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 BD / CR4 0.3) m4rhrcl - Red Hot Roll Club (Barcrest) (MPU4) (set 1) + Red Hot Roll Club (Barcrest) (MPU4) (RH2 1.1) m4rhrcl__a - Red Hot Roll Club (Barcrest) (MPU4) (set 2) + Red Hot Roll Club (Barcrest) (MPU4) (RH2 1.1 D) m4rhrcl__b - Red Hot Roll Club (Barcrest) (MPU4) (set 3) + Red Hot Roll Club (Barcrest) (MPU4) (RH2 1.1 F) m4rhrcl__c - Red Hot Roll Club (Barcrest) (MPU4) (set 4) + Red Hot Roll Club (Barcrest) (MPU4) (RH2 1.0) m4rhrock @@ -58024,55 +68317,55 @@ m4rhs - Rocky Horror Show (Barcrest) (MPU4) (set 1) + Rocky Horror Show (Barcrest) (MPU4) (RH__4.0) m4rhs__a - Rocky Horror Show (Barcrest) (MPU4) (set 2) + Rocky Horror Show (Barcrest) (MPU4) (RH__6.0) m4rhs__b - Rocky Horror Show (Barcrest) (MPU4) (set 3) + Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 YD) m4rhs__c - Rocky Horror Show (Barcrest) (MPU4) (set 4) + Rocky Horror Show (Barcrest) (MPU4) (RH__6.0 YD) m4rhs__d - Rocky Horror Show (Barcrest) (MPU4) (set 5) + Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 D) m4rhs__e - Rocky Horror Show (Barcrest) (MPU4) (set 6) + Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 Y) m4rhs__f - Rocky Horror Show (Barcrest) (MPU4) (set 7) + Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 K) m4rhs__g - Rocky Horror Show (Barcrest) (MPU4) (set 8) + Rocky Horror Show (Barcrest) (MPU4) (RH__6.0 K) m4rhs__h - Rocky Horror Show (Barcrest) (MPU4) (set 9) + Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 YKD) m4rhs__i - Rocky Horror Show (Barcrest) (MPU4) (set 10) + Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 KD) m4rhs__j - Rocky Horror Show (Barcrest) (MPU4) (set 11) + Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 YK) m4rhs__k - Rocky Horror Show (Barcrest) (MPU4) (set 12) + Rocky Horror Show (Barcrest) (MPU4) (RH__2.0, hack) m4rhs__l - Rocky Horror Show (Barcrest) (MPU4) (set 13) + Rocky Horror Show (Barcrest) (MPU4) (RH__3.0 YC, hack) m4rhwhl @@ -58092,127 +68385,127 @@ m4richfm - Rich & Famous (Barcrest) (MPU4) (set 1) + Rich & Famous (Barcrest) (MPU4) (RFT 0.2) m4richfm__0 - Rich & Famous (Barcrest) (MPU4) (set 28) + Rich & Famous (Barcrest) (MPU4) (RFC 1.3 K5) m4richfm__1 - Rich & Famous (Barcrest) (MPU4) (set 29) + Rich & Famous (Barcrest) (MPU4) (RF4 1.1 K5) m4richfm__2 - Rich & Famous (Barcrest) (MPU4) (set 30) + Rich & Famous (Barcrest) (MPU4) (RF8 1.2 K5) m4richfm__3 - Rich & Famous (Barcrest) (MPU4) (set 31) + Rich & Famous (Barcrest) (MPU4) (RF4 1.1 K5, hack) m4richfm__a - Rich & Famous (Barcrest) (MPU4) (set 2) + Rich & Famous (Barcrest) (MPU4) (RAF 0.3 C) m4richfm__b - Rich & Famous (Barcrest) (MPU4) (set 3) + Rich & Famous (Barcrest) (MPU4) (RAF 0.3 D) m4richfm__c - Rich & Famous (Barcrest) (MPU4) (set 4) + Rich & Famous (Barcrest) (MPU4) (RAF 0.3) m4richfm__d - Rich & Famous (Barcrest) (MPU4) (set 5) + Rich & Famous (Barcrest) (MPU4) (RAF 0.3 Y) m4richfm__e - Rich & Famous (Barcrest) (MPU4) (set 6) + Rich & Famous (Barcrest) (MPU4) (bad) m4richfm__f - Rich & Famous (Barcrest) (MPU4) (set 7) + Rich & Famous (Barcrest) (MPU4) (RF5 0.2 AD) m4richfm__g - Rich & Famous (Barcrest) (MPU4) (set 8) + Rich & Famous (Barcrest) (MPU4) (RF5 0.2 B) m4richfm__h - Rich & Famous (Barcrest) (MPU4) (set 9) + Rich & Famous (Barcrest) (MPU4) (RF5 0.2 BD) m4richfm__i - Rich & Famous (Barcrest) (MPU4) (set 10) + Rich & Famous (Barcrest) (MPU4) (RF5 0.2 D) m4richfm__j - Rich & Famous (Barcrest) (MPU4) (set 11) + Rich & Famous (Barcrest) (MPU4) (RF5 0.2 KD) m4richfm__k - Rich & Famous (Barcrest) (MPU4) (set 12) + Rich & Famous (Barcrest) (MPU4) (RF5 0.2 YD) m4richfm__l - Rich & Famous (Barcrest) (MPU4) (set 13) + Rich & Famous (Barcrest) (MPU4) (RF5 0.2 K) m4richfm__m - Rich & Famous (Barcrest) (MPU4) (set 14) + Rich & Famous (Barcrest) (MPU4) (RF5 0.2) m4richfm__n - Rich & Famous (Barcrest) (MPU4) (set 15) + Rich & Famous (Barcrest) (MPU4) (RF5 0.2 Y) m4richfm__o - Rich & Famous (Barcrest) (MPU4) (set 16) + Rich & Famous (Barcrest) (MPU4) (RF8 0.1 B) m4richfm__p - Rich & Famous (Barcrest) (MPU4) (set 17) + Rich & Famous (Barcrest) (MPU4) (RF8 0.1 C) m4richfm__q - Rich & Famous (Barcrest) (MPU4) (set 18) + Rich & Famous (Barcrest) (MPU4) (RFT 0.2 P, hack, set 1) m4richfm__r - Rich & Famous (Barcrest) (MPU4) (set 19) + Rich & Famous (Barcrest) (MPU4) (RFT 0.2 AD) m4richfm__s - Rich & Famous (Barcrest) (MPU4) (set 20) + Rich & Famous (Barcrest) (MPU4) (RFT 0.2 B) m4richfm__t - Rich & Famous (Barcrest) (MPU4) (set 21) + Rich & Famous (Barcrest) (MPU4) (RFT 0.2 BD) m4richfm__u - Rich & Famous (Barcrest) (MPU4) (set 22) + Rich & Famous (Barcrest) (MPU4) (RFT 0.2 D) m4richfm__v - Rich & Famous (Barcrest) (MPU4) (set 23) + Rich & Famous (Barcrest) (MPU4) (RFT 0.2 KD) m4richfm__w - Rich & Famous (Barcrest) (MPU4) (set 24) + Rich & Famous (Barcrest) (MPU4) (RFT 0.2 YD) m4richfm__x - Rich & Famous (Barcrest) (MPU4) (set 25) + Rich & Famous (Barcrest) (MPU4) (RFT 0.2 K) m4richfm__y - Rich & Famous (Barcrest) (MPU4) (set 26) + Rich & Famous (Barcrest) (MPU4) (RFT 0.2 Y) m4richfm__z - Rich & Famous (Barcrest) (MPU4) (set 27) + Rich & Famous (Barcrest) (MPU4) (RFT 0.2 P, hack, set 2) m4ringfr @@ -58648,51 +68941,51 @@ m4rockmn - Rocket Money (Barcrest) (MPU4) (set 1) + Rocket Money (Barcrest) (MPU4) (ROK 0.6) m4rockmn__a - Rocket Money (Barcrest) (MPU4) (set 2) + Rocket Money (Barcrest) (MPU4) (ROK 0.6 AD) m4rockmn__b - Rocket Money (Barcrest) (MPU4) (set 3) + Rocket Money (Barcrest) (MPU4) (ROK 0.6 B) m4rockmn__c - Rocket Money (Barcrest) (MPU4) (set 4) + Rocket Money (Barcrest) (MPU4) (ROK 0.6 BD) m4rockmn__d - Rocket Money (Barcrest) (MPU4) (set 5) + Rocket Money (Barcrest) (MPU4) (ROK 0.6 D) m4rockmn__e - Rocket Money (Barcrest) (MPU4) (set 6) + Rocket Money (Barcrest) (MPU4) (ROK 0.6 KD) m4rockmn__f - Rocket Money (Barcrest) (MPU4) (set 7) + Rocket Money (Barcrest) (MPU4) (ROK 0.6 RD) m4rockmn__g - Rocket Money (Barcrest) (MPU4) (set 8) + Rocket Money (Barcrest) (MPU4) (ROK 0.6 YD) m4rockmn__h - Rocket Money (Barcrest) (MPU4) (set 9) + Rocket Money (Barcrest) (MPU4) (ROK 0.6 K) m4rockmn__i - Rocket Money (Barcrest) (MPU4) (set 10) + Rocket Money (Barcrest) (MPU4) (ROK 0.6 R) m4rockmn__j - Rocket Money (Barcrest) (MPU4) (set 11) + Rocket Money (Barcrest) (MPU4) (ROK 0.6 C) m4rockmn__k - Rocket Money (Barcrest) (MPU4) (set 12) + Rocket Money (Barcrest) (MPU4) (ROK 0.6 Y) m4rotex @@ -58900,99 +69193,99 @@ m4shocm - Showcase Crystal Maze (Barcrest) (MPU4) (set 1) + Showcase Crystal Maze (Barcrest) (MPU4) (SCM 0.1) m4shocm__a - Showcase Crystal Maze (Barcrest) (MPU4) (set 2) + Showcase Crystal Maze (Barcrest) (MPU4) (SCM 0.1 AD) m4shocm__b - Showcase Crystal Maze (Barcrest) (MPU4) (set 3) + Showcase Crystal Maze (Barcrest) (MPU4) (SCM 0.1 B) m4shocm__c - Showcase Crystal Maze (Barcrest) (MPU4) (set 4) + Showcase Crystal Maze (Barcrest) (MPU4) (SCM 0.1 BD) m4shocm__d - Showcase Crystal Maze (Barcrest) (MPU4) (set 5) + Showcase Crystal Maze (Barcrest) (MPU4) (SCM 0.1 D) m4shocm__e - Showcase Crystal Maze (Barcrest) (MPU4) (set 6) + Showcase Crystal Maze (Barcrest) (MPU4) (SCM 0.1 DJ) m4shocm__f - Showcase Crystal Maze (Barcrest) (MPU4) (set 7) + Showcase Crystal Maze (Barcrest) (MPU4) (SCM 0.1 KD) m4shocm__g - Showcase Crystal Maze (Barcrest) (MPU4) (set 8) + Showcase Crystal Maze (Barcrest) (MPU4) (SCM 0.1 YD) m4shocm__h - Showcase Crystal Maze (Barcrest) (MPU4) (set 9) + Showcase Crystal Maze (Barcrest) (MPU4) (SCM 0.1 J) m4shocm__i - Showcase Crystal Maze (Barcrest) (MPU4) (set 10) + Showcase Crystal Maze (Barcrest) (MPU4) (SCM 0.1 Y) m4shocm__j - Showcase Crystal Maze (Barcrest) (MPU4) (set 11) + Showcase Crystal Maze (Barcrest) (MPU4) (SCM 0.1 K) m4shodf - Showcase Duty Free (Barcrest) (MPU4) (set 1) + Showcase Duty Free (Barcrest) (MPU4) (SDF 0.2) m4shodf__a - Showcase Duty Free (Barcrest) (MPU4) (set 2) + Showcase Duty Free (Barcrest) (MPU4) (SD8 0.1 B) m4shodf__b - Showcase Duty Free (Barcrest) (MPU4) (set 3) + Showcase Duty Free (Barcrest) (MPU4) (SD8 0.1 D) m4shodf__c - Showcase Duty Free (Barcrest) (MPU4) (set 4) + Showcase Duty Free (Barcrest) (MPU4) (SD8 0.1 KD) m4shodf__d - Showcase Duty Free (Barcrest) (MPU4) (set 5) + Showcase Duty Free (Barcrest) (MPU4) (SD8 0.1 YD) m4shodf__e - Showcase Duty Free (Barcrest) (MPU4) (set 6) + Showcase Duty Free (Barcrest) (MPU4) (SD8 0.1 K) m4shodf__f - Showcase Duty Free (Barcrest) (MPU4) (set 7) + Showcase Duty Free (Barcrest) (MPU4) (SD8 0.1) m4shodf__g - Showcase Duty Free (Barcrest) (MPU4) (set 8) + Showcase Duty Free (Barcrest) (MPU4) (SD8 0.1 Y) m4shodf__h - Showcase Duty Free (Barcrest) (MPU4) (set 9) + Showcase Duty Free (Barcrest) (MPU4) (SDF 0.2 B) m4shodf__i - Showcase Duty Free (Barcrest) (MPU4) (set 10) + Showcase Duty Free (Barcrest) (MPU4) (SDF 0.2 D) m4shodf__j - Showcase Duty Free (Barcrest) (MPU4) (set 11) + Showcase Duty Free (Barcrest) (MPU4) (SDF 0.2 YD) m4shodf__k - Showcase Duty Free (Barcrest) (MPU4) (set 12) + Showcase Duty Free (Barcrest) (MPU4) (SDF 0.2 K) m4shodf__l - Showcase Duty Free (Barcrest) (MPU4) (set 13) + Showcase Duty Free (Barcrest) (MPU4) (SDF 0.2 Y) m4shoknr @@ -59308,47 +69601,47 @@ m4squid - Squids In (Barcrest) (MPU4) (set 1) + Squids In (Barcrest) (MPU4) (SQ_ 2.0 C) m4squid__a - Squids In (Barcrest) (MPU4) (set 2) + Squids In (Barcrest) (MPU4) (SQ_ 2.0 CD) m4squid__b - Squids In (Barcrest) (MPU4) (set 3) + Squids In (Barcrest) (MPU4) (SQ_ 2.0 CK) m4squid__c - Squids In (Barcrest) (MPU4) (set 4) + Squids In (Barcrest) (MPU4) (SQ_ 2.0 BC) m4ssclas - Super Streak Classic (Barcrest) (MPU4) (set 1) + Super Streak Classic (Barcrest) (MPU4) (CSS 6.0) m4ssclas__a - Super Streak Classic (Barcrest) (MPU4) (set 2) + Super Streak Classic (Barcrest) (MPU4) (CSS 2.0 D) m4ssclas__b - Super Streak Classic (Barcrest) (MPU4) (set 3) + Super Streak Classic (Barcrest) (MPU4) (CSS 6.0 D) m4ssclas__c - Super Streak Classic (Barcrest) (MPU4) (set 4) + Super Streak Classic (Barcrest) (MPU4) (CSS 6.0 K) m4ssclas__d - Super Streak Classic (Barcrest) (MPU4) (set 5) + Super Streak Classic (Barcrest) (MPU4) (CSS 5.0 B) m4ssclas__e - Super Streak Classic (Barcrest) (MPU4) (set 6) + Super Streak Classic (Barcrest) (MPU4) (CSS 6.0 B) m4ssclas__f - Super Streak Classic (Barcrest) (MPU4) (hack) + Super Streak Classic (Barcrest) (MPU4) (hack C) m4sss @@ -59636,71 +69929,71 @@ m4suphv - Super Hyper Viper (Barcrest) (MPU4) (set 1) + Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, set 2) m4suphv__a - Super Hyper Viper (Barcrest) (MPU4) (set 2) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 2) m4suphv__b - Super Hyper Viper (Barcrest) (MPU4) (set 3) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 1) m4suphv__c - Super Hyper Viper (Barcrest) (MPU4) (set 4) + Hyper Viper (Barcrest) (MPU4) (HVP 4.0, set 1) m4suphv__d - Super Hyper Viper (Barcrest) (MPU4) (set 5) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 3) m4suphv__e - Super Hyper Viper (Barcrest) (MPU4) (set 6) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 2) m4suphv__f - Super Hyper Viper (Barcrest) (MPU4) (set 7) + Hyper Viper (Barcrest) (MPU4) (HVP 4.0, set 2) m4suphv__g - Super Hyper Viper (Barcrest) (MPU4) (set 8) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 4) m4suphv__h - Super Hyper Viper (Barcrest) (MPU4) (set 9) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 3) m4suphv__i - Super Hyper Viper (Barcrest) (MPU4) (set 10) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 5) m4suphv__j - Super Hyper Viper (Barcrest) (MPU4) (set 11) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 6) m4suphv__k - Super Hyper Viper (Barcrest) (MPU4) (set 12) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 4) m4suphv__l - Super Hyper Viper (Barcrest) (MPU4) (set 13) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 7) m4suphv__m - Super Hyper Viper (Barcrest) (MPU4) (set 14) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 5) m4suphv__n - Super Hyper Viper (Barcrest) (MPU4) (set 15) + Hyper Viper (Barcrest) (MPU4) (HVP 4.0, set 3) m4suphv__o - Super Hyper Viper (Barcrest) (MPU4) (set 16) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 8) m4suphv__p - Super Hyper Viper (Barcrest) (MPU4) (set 17) + Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 9) m4supjst @@ -60312,119 +70605,119 @@ m4takepk - Take Your Pick (Barcrest) (MPU4) (set 1) + Take Your Pick (Barcrest) (MPU4) (TAP 0.6) m4takepk__0 - Take Your Pick (Barcrest) (MPU4) (set 28) + Take Your Pick (Barcrest) (MPU4) (TA8 2.2, hack, set 2) m4takepk__1 - Take Your Pick (Barcrest) (MPU4) (set 29) + Take Your Pick (Barcrest) (MPU4) (TAC 2.3 K) m4takepk__a - Take Your Pick (Barcrest) (MPU4) (set 2) + Take Your Pick (Barcrest) (MPU4) (TAP 0.6 AD) m4takepk__b - Take Your Pick (Barcrest) (MPU4) (set 3) + Take Your Pick (Barcrest) (MPU4) (TAP 0.6 B) m4takepk__c - Take Your Pick (Barcrest) (MPU4) (set 4) + Take Your Pick (Barcrest) (MPU4) (TAP 0.6 BD) m4takepk__d - Take Your Pick (Barcrest) (MPU4) (set 5) + Take Your Pick (Barcrest) (MPU4) (TAP 0.6 BC) m4takepk__e - Take Your Pick (Barcrest) (MPU4) (set 6) + Take Your Pick (Barcrest) (MPU4) (TAP 0.6 D) m4takepk__f - Take Your Pick (Barcrest) (MPU4) (set 7) + Take Your Pick (Barcrest) (MPU4) (TAP 0.6 KD) m4takepk__g - Take Your Pick (Barcrest) (MPU4) (set 8) + Take Your Pick (Barcrest) (MPU4) (TAP 0.6 YD) m4takepk__h - Take Your Pick (Barcrest) (MPU4) (set 9) + Take Your Pick (Barcrest) (MPU4) (TAP 0.6 K) m4takepk__i - Take Your Pick (Barcrest) (MPU4) (set 10) + Take Your Pick (Barcrest) (MPU4) (TAP 0.6 R) m4takepk__j - Take Your Pick (Barcrest) (MPU4) (set 11) + Take Your Pick (Barcrest) (MPU4) (TAP 0.6 Y) m4takepk__k - Take Your Pick (Barcrest) (MPU4) (set 12) + Take Your Pick (Barcrest) (MPU4) (TPH 0.7 AD) m4takepk__l - Take Your Pick (Barcrest) (MPU4) (set 13) + Take Your Pick (Barcrest) (MPU4) (TPH 0.7 B) m4takepk__m - Take Your Pick (Barcrest) (MPU4) (set 14) + Take Your Pick (Barcrest) (MPU4) (TPH 0.7 BD) m4takepk__n - Take Your Pick (Barcrest) (MPU4) (set 15) + Take Your Pick (Barcrest) (MPU4) (TPH 0.7 D) m4takepk__o - Take Your Pick (Barcrest) (MPU4) (set 16) + Take Your Pick (Barcrest) (MPU4) (TPH 0.7 KD) m4takepk__p - Take Your Pick (Barcrest) (MPU4) (set 17) + Take Your Pick (Barcrest) (MPU4) (TPH 0.7 YD) m4takepk__q - Take Your Pick (Barcrest) (MPU4) (set 18) + Take Your Pick (Barcrest) (MPU4) (TPH 0.7 K) m4takepk__r - Take Your Pick (Barcrest) (MPU4) (set 19) + Take Your Pick (Barcrest) (MPU4) (TPH 0.7) m4takepk__s - Take Your Pick (Barcrest) (MPU4) (set 20) + Take Your Pick (Barcrest) (MPU4) (TPH 0.7 Y) m4takepk__t - Take Your Pick (Barcrest) (MPU4) (set 21) + Take Your Pick (Barcrest) (MPU4) (TPH 0.7, hack) m4takepk__u - Take Your Pick (Barcrest) (MPU4) (set 22) + Take Your Pick (Barcrest) (MPU4) (MAM 0.3 C, hack) m4takepk__v - Take Your Pick (Barcrest) (MPU4) (set 23) + Take Your Pick (Barcrest) (MPU4) (TAC 2.3, hack, set 1) m4takepk__w - Take Your Pick (Barcrest) (MPU4) (set 24) + Take Your Pick (Barcrest) (MPU4) (TAC 2.3, hack, set 2) m4takepk__x - Take Your Pick (Barcrest) (MPU4) (set 25) + Take Your Pick (Barcrest) (MPU4) (TA4 2.1, hack, set 1) m4takepk__y - Take Your Pick (Barcrest) (MPU4) (set 26) + Take Your Pick (Barcrest) (MPU4) (TA4 2.1, hack, set 2) m4takepk__z - Take Your Pick (Barcrest) (MPU4) (set 27) + Take Your Pick (Barcrest) (MPU4) (TA8 2.2, hack, set 1) m4tbplay @@ -60456,267 +70749,267 @@ m4tenten - 10 X 10 (Barcrest) (MPU4) (set 1) + 10 X 10 (Barcrest) (MPU4) (T20 0.2) m4tenten__0 - 10 X 10 (Barcrest) (MPU4) (set 28) + 10 X 10 (Barcrest) (MPU4) (T25 0.4 RD) m4tenten__1 - 10 X 10 (Barcrest) (MPU4) (set 29) + 10 X 10 (Barcrest) (MPU4) (T25 0.4 DY) m4tenten__2 - 10 X 10 (Barcrest) (MPU4) (set 30) + 10 X 10 (Barcrest) (MPU4) (T25 0.4 K) m4tenten__3 - 10 X 10 (Barcrest) (MPU4) (set 31) + 10 X 10 (Barcrest) (MPU4) (T25 0.4 R) m4tenten__4 - 10 X 10 (Barcrest) (MPU4) (set 32) + 10 X 10 (Barcrest) (MPU4) (T25 0.4) m4tenten__5 - 10 X 10 (Barcrest) (MPU4) (set 33) + 10 X 10 (Barcrest) (MPU4) (T25 0.4 Y) m4tenten__6 - 10 X 10 (Barcrest) (MPU4) (set 34) + 10 X 10 (Barcrest) (MPU4) (T2T 0.1 AD) m4tenten__7 - 10 X 10 (Barcrest) (MPU4) (set 35) + 10 X 10 (Barcrest) (MPU4) (T2T 0.1 B) m4tenten__8 - 10 X 10 (Barcrest) (MPU4) (set 36) + 10 X 10 (Barcrest) (MPU4) (T2T 0.1 BD) m4tenten__9 - 10 X 10 (Barcrest) (MPU4) (set 37) + 10 X 10 (Barcrest) (MPU4) (T2T 0.1 D) m4tenten__a - 10 X 10 (Barcrest) (MPU4) (set 2) + 10 X 10 (Barcrest) (MPU4) (N25 0.3 AD) m4tenten__a0 - 10 X 10 (Barcrest) (MPU4) (set 64) + 10 X 10 (Barcrest) (MPU4) (TST 0.1 R) m4tenten__a1 - 10 X 10 (Barcrest) (MPU4) (set 65) + 10 X 10 (Barcrest) (MPU4) (TST 0.1) m4tenten__a2 - 10 X 10 (Barcrest) (MPU4) (set 66) + 10 X 10 (Barcrest) (MPU4) (TST 0.1 Y) m4tenten__aa - 10 X 10 (Barcrest) (MPU4) (set 38) + 10 X 10 (Barcrest) (MPU4) (T2T 0.1 KD) m4tenten__ab - 10 X 10 (Barcrest) (MPU4) (set 39) + 10 X 10 (Barcrest) (MPU4) (T2T 0.1 RD) m4tenten__ac - 10 X 10 (Barcrest) (MPU4) (set 40) + 10 X 10 (Barcrest) (MPU4) (T2T 0.1 DY) m4tenten__ad - 10 X 10 (Barcrest) (MPU4) (set 41) + 10 X 10 (Barcrest) (MPU4) (T2T 0.1 K) m4tenten__ae - 10 X 10 (Barcrest) (MPU4) (set 42) + 10 X 10 (Barcrest) (MPU4) (T2T 0.1 R) m4tenten__af - 10 X 10 (Barcrest) (MPU4) (set 43) + 10 X 10 (Barcrest) (MPU4) (T2T 0.1) m4tenten__ag - 10 X 10 (Barcrest) (MPU4) (set 44) + 10 X 10 (Barcrest) (MPU4) (T2T 0.1 Y) m4tenten__ah - 10 X 10 (Barcrest) (MPU4) (set 45) + 10 X 10 (Barcrest) (MPU4) (T3T 0.1 AD) m4tenten__ai - 10 X 10 (Barcrest) (MPU4) (set 46) + 10 X 10 (Barcrest) (MPU4) (T3T 0.1 B) m4tenten__aj - 10 X 10 (Barcrest) (MPU4) (set 47) + 10 X 10 (Barcrest) (MPU4) (T3T 0.1 BD) m4tenten__ak - 10 X 10 (Barcrest) (MPU4) (set 48) + 10 X 10 (Barcrest) (MPU4) (T3T 0.1 D) m4tenten__al - 10 X 10 (Barcrest) (MPU4) (set 49) + 10 X 10 (Barcrest) (MPU4) (T3T 0.1 KD) m4tenten__am - 10 X 10 (Barcrest) (MPU4) (set 50) + 10 X 10 (Barcrest) (MPU4) (T3T 0.1 RD) m4tenten__an - 10 X 10 (Barcrest) (MPU4) (set 51) + 10 X 10 (Barcrest) (MPU4) (T3T 0.1 DY) m4tenten__ao - 10 X 10 (Barcrest) (MPU4) (set 52) + 10 X 10 (Barcrest) (MPU4) (T3T 0.1 K) m4tenten__ap - 10 X 10 (Barcrest) (MPU4) (set 53) + 10 X 10 (Barcrest) (MPU4) (T3T 0.1 R) m4tenten__aq - 10 X 10 (Barcrest) (MPU4) (set 54) + 10 X 10 (Barcrest) (MPU4) (T3T 0.1) m4tenten__ar - 10 X 10 (Barcrest) (MPU4) (set 55) + 10 X 10 (Barcrest) (MPU4) (T3T 0.1 Y) m4tenten__as - 10 X 10 (Barcrest) (MPU4) (set 56) + 10 X 10 (Barcrest) (MPU4) (TST 0.1 AD) m4tenten__at - 10 X 10 (Barcrest) (MPU4) (set 57) + 10 X 10 (Barcrest) (MPU4) (TST 0.1 B) m4tenten__au - 10 X 10 (Barcrest) (MPU4) (set 58) + 10 X 10 (Barcrest) (MPU4) (TST 0.1 BD) m4tenten__av - 10 X 10 (Barcrest) (MPU4) (set 59) + 10 X 10 (Barcrest) (MPU4) (TST 0.1 D) m4tenten__aw - 10 X 10 (Barcrest) (MPU4) (set 60) + 10 X 10 (Barcrest) (MPU4) (TST 0.1 KD) m4tenten__ax - 10 X 10 (Barcrest) (MPU4) (set 61) + 10 X 10 (Barcrest) (MPU4) (TST 0.1 RD) m4tenten__ay - 10 X 10 (Barcrest) (MPU4) (set 62) + 10 X 10 (Barcrest) (MPU4) (TST 0.1 DY) m4tenten__az - 10 X 10 (Barcrest) (MPU4) (set 63) + 10 X 10 (Barcrest) (MPU4) (TST 0.1 K) m4tenten__b - 10 X 10 (Barcrest) (MPU4) (set 3) + 10 X 10 (Barcrest) (MPU4) (N25 0.3 B) m4tenten__c - 10 X 10 (Barcrest) (MPU4) (set 4) + 10 X 10 (Barcrest) (MPU4) (N25 0.3 BD) m4tenten__d - 10 X 10 (Barcrest) (MPU4) (set 5) + 10 X 10 (Barcrest) (MPU4) (N25 0.3 D) m4tenten__e - 10 X 10 (Barcrest) (MPU4) (set 6) + 10 X 10 (Barcrest) (MPU4) (N25 0.3 KD) m4tenten__f - 10 X 10 (Barcrest) (MPU4) (set 7) + 10 X 10 (Barcrest) (MPU4) (N25 0.3 RD) m4tenten__g - 10 X 10 (Barcrest) (MPU4) (set 8) + 10 X 10 (Barcrest) (MPU4) (N25 0.3 DY) m4tenten__h - 10 X 10 (Barcrest) (MPU4) (set 9) + 10 X 10 (Barcrest) (MPU4) (N25 0.3 K) m4tenten__i - 10 X 10 (Barcrest) (MPU4) (set 10) + 10 X 10 (Barcrest) (MPU4) (N25 0.3 R) m4tenten__j - 10 X 10 (Barcrest) (MPU4) (set 11) + 10 X 10 (Barcrest) (MPU4) (N25 0.3) m4tenten__k - 10 X 10 (Barcrest) (MPU4) (set 12) + 10 X 10 (Barcrest) (MPU4) (N25 0.3 Y) m4tenten__l - 10 X 10 (Barcrest) (MPU4) (set 13) + 10 X 10 (Barcrest) (MPU4) (T20 0.2 AD) m4tenten__m - 10 X 10 (Barcrest) (MPU4) (set 14) + 10 X 10 (Barcrest) (MPU4) (T20 0.2 B) m4tenten__n - 10 X 10 (Barcrest) (MPU4) (set 15) + 10 X 10 (Barcrest) (MPU4) (T20 0.2 BD) m4tenten__o - 10 X 10 (Barcrest) (MPU4) (set 16) + 10 X 10 (Barcrest) (MPU4) (T20 0.2 D) m4tenten__p - 10 X 10 (Barcrest) (MPU4) (set 17) + 10 X 10 (Barcrest) (MPU4) (T20 0.2 KD) m4tenten__q - 10 X 10 (Barcrest) (MPU4) (set 18) + 10 X 10 (Barcrest) (MPU4) (T20 0.2 RD) m4tenten__r - 10 X 10 (Barcrest) (MPU4) (set 19) + 10 X 10 (Barcrest) (MPU4) (T20 0.2 DY) m4tenten__s - 10 X 10 (Barcrest) (MPU4) (set 20) + 10 X 10 (Barcrest) (MPU4) (T20 0.2 K) m4tenten__t - 10 X 10 (Barcrest) (MPU4) (set 21) + 10 X 10 (Barcrest) (MPU4) (T20 0.2 R) m4tenten__u - 10 X 10 (Barcrest) (MPU4) (set 22) + 10 X 10 (Barcrest) (MPU4) (T20 0.2 Y) m4tenten__v - 10 X 10 (Barcrest) (MPU4) (set 23) + 10 X 10 (Barcrest) (MPU4) (T25 0.4 AD) m4tenten__w - 10 X 10 (Barcrest) (MPU4) (set 24) + 10 X 10 (Barcrest) (MPU4) (T25 0.4 B) m4tenten__x - 10 X 10 (Barcrest) (MPU4) (set 25) + 10 X 10 (Barcrest) (MPU4) (T25 0.4 BD) m4tenten__y - 10 X 10 (Barcrest) (MPU4) (set 26) + 10 X 10 (Barcrest) (MPU4) (T25 0.4 D) m4tenten__z - 10 X 10 (Barcrest) (MPU4) (set 27) + 10 X 10 (Barcrest) (MPU4) (T25 0.4 KD) m4thehit @@ -60736,315 +71029,315 @@ m4thestr - The Streak (Barcrest) (MPU4) (set 1) + The Streak (Barcrest) (MPU4) (TS 3.0 K) m4thestr__a - The Streak (Barcrest) (MPU4) (set 2) + The Streak (Barcrest) (MPU4) (TS 3.0 YD) m4thestr__b - The Streak (Barcrest) (MPU4) (set 3) + The Streak (Barcrest) (MPU4) (TST 3.0 YD / TS 3.0, set 1) m4thestr__c - The Streak (Barcrest) (MPU4) (set 4) + The Streak (Barcrest) (MPU4) (TS 3.0 D) m4thestr__d - The Streak (Barcrest) (MPU4) (set 5) + The Streak (Barcrest) (MPU4) (TST 3.0 D / TS 3.0, set 1) m4thestr__e - The Streak (Barcrest) (MPU4) (set 6) + The Streak (Barcrest) (MPU4) (TST 2.0 BAD / TS 2.0) m4thestr__f - The Streak (Barcrest) (MPU4) (set 7) + The Streak (Barcrest) (MPU4) (TST 3.0 K / TS 3.0, set 1) m4thestr__g - The Streak (Barcrest) (MPU4) (set 8) + The Streak (Barcrest) (MPU4) (TS 3.0 B) m4thestr__h - The Streak (Barcrest) (MPU4) (set 9) + The Streak (Barcrest) (MPU4) (TST 3.0 B / TS 3.0, set 1) m4thestr__i - The Streak (Barcrest) (MPU4) (set 10) + The Streak (Barcrest) (MPU4) (TS 3.0 AD) m4thestr__j - The Streak (Barcrest) (MPU4) (set 11) + The Streak (Barcrest) (MPU4) (TST 3.0 AD / TS 3.0, set 1) m4thestr__k - The Streak (Barcrest) (MPU4) (set 12) + The Streak (Barcrest) (MPU4) (TS 3.0 BR) m4thestr__l - The Streak (Barcrest) (MPU4) (set 13) + The Streak (Barcrest) (MPU4) (TST 3.0 BR / TS 3.0, set 1) m4thestr__m - The Streak (Barcrest) (MPU4) (set 14) + The Streak (Barcrest) (MPU4) (TST 3.0 YD / TS 3.0, set 2) m4thestr__n - The Streak (Barcrest) (MPU4) (set 15) + The Streak (Barcrest) (MPU4) (TST 3.0 D / TS 3.0, set 2) m4thestr__o - The Streak (Barcrest) (MPU4) (set 16) + The Streak (Barcrest) (MPU4) (TST 3.0 Y / TS 3.0) m4thestr__p - The Streak (Barcrest) (MPU4) (set 17) + The Streak (Barcrest) (MPU4) (TST 3.0 K / TS 3.0, set 2) m4thestr__q - The Streak (Barcrest) (MPU4) (set 18) + The Streak (Barcrest) (MPU4) (TST 3.0 B / TS 3.0, set 2) m4thestr__r - The Streak (Barcrest) (MPU4) (set 19) + The Streak (Barcrest) (MPU4) (TST 3.0 AD / TS 3.0, set 2) m4thestr__s - The Streak (Barcrest) (MPU4) (set 20) + The Streak (Barcrest) (MPU4) (TST 3.0 BR / TS 3.0, set 2) m4thestr__t - The Streak (Barcrest) (MPU4) (set 21) + The Streak (Barcrest) (MPU4) (TS 1.4 K) m4thestr__u - The Streak (Barcrest) (MPU4) (set 22) + The Streak (Barcrest) (MPU4) (TS 1.4 B) m4thestr__v - The Streak (Barcrest) (MPU4) (set 23) + The Streak (Barcrest) (MPU4) (TS 1.4 BAD) m4thestr__w - The Streak (Barcrest) (MPU4) (set 24) + The Streak (Barcrest) (MPU4) (TS 1.3 D) m4thestr__x - The Streak (Barcrest) (MPU4) (set 25) + The Streak (Barcrest) (MPU4) (TS 1.3 K) m4thestr__y - The Streak (Barcrest) (MPU4) (set 26) + The Streak (Barcrest) (MPU4) (TS 1.3 B) m4tic - Tic Tac Toe (Barcrest) (MPU4) (set 1) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 2.0) m4tic__a - Tic Tac Toe (Barcrest) (MPU4) (set 2) + Tic Tac Toe (Barcrest) (MPU4) (TT 1.0 K) m4tic__b - Tic Tac Toe (Barcrest) (MPU4) (set 3) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 2.0 B) m4tic__c - Tic Tac Toe (Barcrest) (MPU4) (set 4) + Tic Tac Toe (Barcrest) (MPU4) (TT 1.0 B) m4tic__d - Tic Tac Toe (Barcrest) (MPU4) (set 5) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 2.0 BD) m4tic__e - Tic Tac Toe (Barcrest) (MPU4) (set 6) + Tic Tac Toe (Barcrest) (MPU4) (TT 1.0 BD) m4tic__f - Tic Tac Toe (Barcrest) (MPU4) (set 7) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 2.0 BA) m4tic__g - Tic Tac Toe (Barcrest) (MPU4) (set 8) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 2.0 BR) m4tic__h - Tic Tac Toe (Barcrest) (MPU4) (set 9) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 2.0 K) m4tic__i - Tic Tac Toe (Barcrest) (MPU4) (set 10) + Tic Tac Toe (Barcrest) (MPU4) (TT 1.0 CB) m4tic__j - Tic Tac Toe (Barcrest) (MPU4) (set 11) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 2.0 YD) m4tic__k - Tic Tac Toe (Barcrest) (MPU4) (set 12) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 2.0 Y) m4tic__l - Tic Tac Toe (Barcrest) (MPU4) (set 13) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 3.0 K) m4tic__m - Tic Tac Toe (Barcrest) (MPU4) (set 14) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 3.0 B) m4tic__n - Tic Tac Toe (Barcrest) (MPU4) (set 15) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 3.0 BD) m4tic__o - Tic Tac Toe (Barcrest) (MPU4) (set 16) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 3.0 AD) m4tic__p - Tic Tac Toe (Barcrest) (MPU4) (set 17) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 3.0 BR) m4tic__r - Tic Tac Toe (Barcrest) (MPU4) (set 18) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 3.0 YD) m4tic__s - Tic Tac Toe (Barcrest) (MPU4) (set 19) + Tic Tac Toe (Barcrest) (MPU4) (TT_ 2.0 C) m4ticcla - Tic Tac Toe Classic (Barcrest) (MPU4) (set 1) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT4 7.0 YD) m4ticcla__0 - Tic Tac Toe Classic (Barcrest) (MPU4) (set 28) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 BR) m4ticcla__a - Tic Tac Toe Classic (Barcrest) (MPU4) (set 2) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 YD) m4ticcla__b - Tic Tac Toe Classic (Barcrest) (MPU4) (set 3) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT4 7.0 D) m4ticcla__c - Tic Tac Toe Classic (Barcrest) (MPU4) (set 4) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 D) m4ticcla__d - Tic Tac Toe Classic (Barcrest) (MPU4) (set 5) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT4 7.0 K) m4ticcla__e - Tic Tac Toe Classic (Barcrest) (MPU4) (set 6) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 K) m4ticcla__f - Tic Tac Toe Classic (Barcrest) (MPU4) (set 7) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 B) m4ticcla__g - Tic Tac Toe Classic (Barcrest) (MPU4) (set 8) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT4 7.0 BAD) m4ticcla__h - Tic Tac Toe Classic (Barcrest) (MPU4) (set 9) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 BAD) m4ticcla__i - Tic Tac Toe Classic (Barcrest) (MPU4) (set 10) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT4 7.0 BR) m4ticcla__j - Tic Tac Toe Classic (Barcrest) (MPU4) (set 11) + Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 YD / CT4 3.0) m4ticcla__k - Tic Tac Toe Classic (Barcrest) (MPU4) (set 12) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 D) m4ticcla__l - Tic Tac Toe Classic (Barcrest) (MPU4) (set 13) + Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 D / CT4 3.0) m4ticcla__m - Tic Tac Toe Classic (Barcrest) (MPU4) (set 14) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 Y) m4ticcla__n - Tic Tac Toe Classic (Barcrest) (MPU4) (set 15) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 K) m4ticcla__o - Tic Tac Toe Classic (Barcrest) (MPU4) (set 16) + Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 K / CT4 3.0) m4ticcla__p - Tic Tac Toe Classic (Barcrest) (MPU4) (set 17) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 B) m4ticcla__q - Tic Tac Toe Classic (Barcrest) (MPU4) (set 18) + Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 B / CT4 3.0) m4ticcla__r - Tic Tac Toe Classic (Barcrest) (MPU4) (set 19) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 BAD) m4ticcla__s - Tic Tac Toe Classic (Barcrest) (MPU4) (set 20) + Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 BAD / CT4 3.0) m4ticcla__t - Tic Tac Toe Classic (Barcrest) (MPU4) (set 21) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 BR) m4ticcla__u - Tic Tac Toe Classic (Barcrest) (MPU4) (set 22) + Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 BR / CT4 3.0) m4ticcla__v - Tic Tac Toe Classic (Barcrest) (MPU4) (set 23) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 D) m4ticcla__w - Tic Tac Toe Classic (Barcrest) (MPU4) (set 24) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 K) m4ticcla__x - Tic Tac Toe Classic (Barcrest) (MPU4) (set 25) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 B) m4ticcla__y - Tic Tac Toe Classic (Barcrest) (MPU4) (set 26) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 BD) m4ticcla__z - Tic Tac Toe Classic (Barcrest) (MPU4) (set 27) + Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 BAD) m4ticglc - Tic Tac Toe Gold (Barcrest) (MPU4) (set 1) + Tic Tac Toe Gold (Barcrest) (MPU4) (TG 3.3 K) m4ticglc__a - Tic Tac Toe Gold (Barcrest) (MPU4) (set 2) + Tic Tac Toe Gold (Barcrest) (MPU4) (TG 4.4 D) m4ticglc__b - Tic Tac Toe Gold (Barcrest) (MPU4) (set 3) + Tic Tac Toe Gold (Barcrest) (MPU4) (TG 4.4 K) m4ticglc__c - Tic Tac Toe Gold (Barcrest) (MPU4) (set 4) + Tic Tac Toe Gold (Barcrest) (MPU4) (TG 4.4 B) m4ticglc__d - Tic Tac Toe Gold (Barcrest) (MPU4) (set 5) + Tic Tac Toe Gold (Barcrest) (MPU4) (TG 4.4 BAD) m4tiktak @@ -61056,207 +71349,207 @@ m4toot - Ten Out Of Ten (Barcrest) (MPU4) (set 1) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3) m4toot__0 - Ten Out Of Ten (Barcrest) (MPU4) (set 28) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 C) m4toot__1 - Ten Out Of Ten (Barcrest) (MPU4) (set 29) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 D) m4toot__2 - Ten Out Of Ten (Barcrest) (MPU4) (set 30) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 KD) m4toot__3 - Ten Out Of Ten (Barcrest) (MPU4) (set 31) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 RD) m4toot__4 - Ten Out Of Ten (Barcrest) (MPU4) (set 32) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 YD) m4toot__5 - Ten Out Of Ten (Barcrest) (MPU4) (set 33) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 K) m4toot__6 - Ten Out Of Ten (Barcrest) (MPU4) (set 34) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 R) m4toot__7 - Ten Out Of Ten (Barcrest) (MPU4) (set 35) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5) m4toot__8 - Ten Out Of Ten (Barcrest) (MPU4) (set 36) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 Y) m4toot__9 - Ten Out Of Ten (Barcrest) (MPU4) (set 37) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 AD) m4toot__a - Ten Out Of Ten (Barcrest) (MPU4) (set 2) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 AD) m4toot__aa - Ten Out Of Ten (Barcrest) (MPU4) (set 38) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 B) m4toot__ab - Ten Out Of Ten (Barcrest) (MPU4) (set 39) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 BD) m4toot__ac - Ten Out Of Ten (Barcrest) (MPU4) (set 40) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 C) m4toot__ad - Ten Out Of Ten (Barcrest) (MPU4) (set 41) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 D) m4toot__ae - Ten Out Of Ten (Barcrest) (MPU4) (set 42) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 KD) m4toot__af - Ten Out Of Ten (Barcrest) (MPU4) (set 43) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 RD) m4toot__ag - Ten Out Of Ten (Barcrest) (MPU4) (set 44) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 YD) m4toot__ah - Ten Out Of Ten (Barcrest) (MPU4) (set 45) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 K) m4toot__ai - Ten Out Of Ten (Barcrest) (MPU4) (set 46) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 R) m4toot__aj - Ten Out Of Ten (Barcrest) (MPU4) (set 47) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6) m4toot__ak - Ten Out Of Ten (Barcrest) (MPU4) (set 48) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 Y) m4toot__al - Ten Out Of Ten (Barcrest) (MPU4) (set 49) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.1) m4toot__b - Ten Out Of Ten (Barcrest) (MPU4) (set 3) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 B) m4toot__c - Ten Out Of Ten (Barcrest) (MPU4) (set 4) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 BD) m4toot__d - Ten Out Of Ten (Barcrest) (MPU4) (set 5) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 D) m4toot__e - Ten Out Of Ten (Barcrest) (MPU4) (set 6) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 KD) m4toot__f - Ten Out Of Ten (Barcrest) (MPU4) (set 7) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 RD) m4toot__g - Ten Out Of Ten (Barcrest) (MPU4) (set 8) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 YD) m4toot__h - Ten Out Of Ten (Barcrest) (MPU4) (set 9) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 K) m4toot__i - Ten Out Of Ten (Barcrest) (MPU4) (set 10) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 R) m4toot__j - Ten Out Of Ten (Barcrest) (MPU4) (set 11) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 C) m4toot__k - Ten Out Of Ten (Barcrest) (MPU4) (set 12) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 Y) m4toot__l - Ten Out Of Ten (Barcrest) (MPU4) (set 13) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 AD) m4toot__m - Ten Out Of Ten (Barcrest) (MPU4) (set 14) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 B) m4toot__n - Ten Out Of Ten (Barcrest) (MPU4) (set 15) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 BD) m4toot__o - Ten Out Of Ten (Barcrest) (MPU4) (set 16) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 C) m4toot__p - Ten Out Of Ten (Barcrest) (MPU4) (set 17) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 D) m4toot__q - Ten Out Of Ten (Barcrest) (MPU4) (set 18) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 KD) m4toot__r - Ten Out Of Ten (Barcrest) (MPU4) (set 19) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 RD) m4toot__s - Ten Out Of Ten (Barcrest) (MPU4) (set 20) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 YD) m4toot__t - Ten Out Of Ten (Barcrest) (MPU4) (set 21) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 K) m4toot__u - Ten Out Of Ten (Barcrest) (MPU4) (set 22) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 R) m4toot__v - Ten Out Of Ten (Barcrest) (MPU4) (set 23) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4) m4toot__w - Ten Out Of Ten (Barcrest) (MPU4) (set 24) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 Y) m4toot__x - Ten Out Of Ten (Barcrest) (MPU4) (set 25) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 AD) m4toot__y - Ten Out Of Ten (Barcrest) (MPU4) (set 26) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 B) m4toot__z - Ten Out Of Ten (Barcrest) (MPU4) (set 27) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 BD) m4toot__za - Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3, hack?) + Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 Y, hack?) m4toot__zb - Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.4, hack?) + Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.4 Y, hack?) m4topact @@ -61272,111 +71565,111 @@ m4topdog - Top Dog (Barcrest) (MPU4) (set 1) + Top Dog (Barcrest) (MPU4) (TD4 7.1 YD / TD 7.1) m4topdog__a - Top Dog (Barcrest) (MPU4) (set 2) + Top Dog (Barcrest) (MPU4) (TDT 7.1 YD / TD 7.1) m4topdog__b - Top Dog (Barcrest) (MPU4) (set 3) + Top Dog (Barcrest) (MPU4) (TD4 7.1 D / TD 7.1) m4topdog__c - Top Dog (Barcrest) (MPU4) (set 4) + Top Dog (Barcrest) (MPU4) (TDT 7.1 D / TD 7.1) m4topdog__d - Top Dog (Barcrest) (MPU4) (set 5) + Top Dog (Barcrest) (MPU4) (TD4 7.1 Y / TD 7.1) m4topdog__e - Top Dog (Barcrest) (MPU4) (set 6) + Top Dog (Barcrest) (MPU4) (TDT 7.1 Y / TD 7.1) m4topdog__f - Top Dog (Barcrest) (MPU4) (set 7) + Top Dog (Barcrest) (MPU4) (TD4 7.1 K / TD 7.1) m4topdog__g - Top Dog (Barcrest) (MPU4) (set 8) + Top Dog (Barcrest) (MPU4) (TDT 7.1 K / TD 7.1) m4topdog__h - Top Dog (Barcrest) (MPU4) (set 9) + Top Dog (Barcrest) (MPU4) (TD4 7.1 B / TD 7.1) m4topdog__i - Top Dog (Barcrest) (MPU4) (set 10) + Top Dog (Barcrest) (MPU4) (TDT 7.1 B / TD 7.1) m4topdog__j - Top Dog (Barcrest) (MPU4) (set 11) + Top Dog (Barcrest) (MPU4) (TD4 7.1 BAD / TD 7.1) m4topdog__k - Top Dog (Barcrest) (MPU4) (set 12) + Top Dog (Barcrest) (MPU4) (TDT 7.1 BAD / TD 7.1) m4topdog__l - Top Dog (Barcrest) (MPU4) (set 13) + Top Dog (Barcrest) (MPU4) (TD4 7.1 BR / TD 7.1) m4topdog__m - Top Dog (Barcrest) (MPU4) (set 14) + Top Dog (Barcrest) (MPU4) (TDT 7.1 BR / TD 7.1) m4topdog__n - Top Dog (Barcrest) (MPU4) (set 15) + Top Dog (Barcrest) (MPU4) (TDT 8.3 YD / TD 8.3) m4topdog__o - Top Dog (Barcrest) (MPU4) (set 16) + Top Dog (Barcrest) (MPU4) (TDT 8.3 D / TD 8.3) m4topdog__p - Top Dog (Barcrest) (MPU4) (set 17) + Top Dog (Barcrest) (MPU4) (TDT 8.3 Y / TD 8.3) m4topdog__q - Top Dog (Barcrest) (MPU4) (set 18) + Top Dog (Barcrest) (MPU4) (TDT 8.3 K / TD 8.3) m4topdog__r - Top Dog (Barcrest) (MPU4) (set 19) + Top Dog (Barcrest) (MPU4) (TDT 8.3 B / TD 8.3) m4topdog__s - Top Dog (Barcrest) (MPU4) (set 20) + Top Dog (Barcrest) (MPU4) (TDT 8.3 BAD / TD 8.3) m4topdog__t - Top Dog (Barcrest) (MPU4) (set 21) + Top Dog (Barcrest) (MPU4) (TDP 2.0 BAD / TD 2.0) m4topdog__u - Top Dog (Barcrest) (MPU4) (set 22) + Top Dog (Barcrest) (MPU4) (TDT 8.3 BR / TD 8.3) m4topdog__v - Top Dog (Barcrest) (MPU4) (set 23) + Top Dog (Barcrest) (MPU4) (TD 1.4 K) m4topdog__w - Top Dog (Barcrest) (MPU4) (set 24) + Top Dog (Barcrest) (MPU4) (TD 1.4 B) m4topdog__x - Top Dog (Barcrest) (MPU4) (set 25) + Top Dog (Barcrest) (MPU4) (TD 1.4 BD) m4topdog__y - Top Dog (Barcrest) (MPU4) (set 26) + Top Dog (Barcrest) (MPU4) (TD 1.4 BAD) m4topdog__z - Top Dog (Barcrest) (MPU4) (set 27) + Top Dog (Barcrest) (MPU4) (TD 1.4 BR) m4topgr @@ -61404,19 +71697,19 @@ m4topten__0 - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2YD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 YD) m4topten__1 - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2H) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 H) m4topten__2 - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2K) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 K) m4topten__3 - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2R) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 R) m4topten__4 @@ -61424,23 +71717,23 @@ m4topten__5 - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2Y) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 Y) m4topten__6 - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2AD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 AD) m4topten__7 - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2B) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 B) m4topten__8 - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2BD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 BD) m4topten__9 - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2C) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 C) m4topten__a @@ -61448,35 +71741,35 @@ m4topten__aa - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2D) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 D) m4topten__ab - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2DH) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 DH) m4topten__ac - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2KD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 KD) m4topten__ad - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2RD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 RD) m4topten__ae - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2YD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 YD) m4topten__af - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2H) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 H) m4topten__ag - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2K) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 K) m4topten__ah - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2R) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 R) m4topten__ai @@ -61484,59 +71777,59 @@ m4topten__aj - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2Y) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.2 Y) m4topten__ak - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4AD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 AD) m4topten__al - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4B) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 B) m4topten__am - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4BD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 BD) m4topten__an - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4C) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 C) m4topten__ao - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4D) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 D) m4topten__ap - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4DH) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 DH) m4topten__aq - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4KD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 KD) m4topten__ar - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4RD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 RD) m4topten__as - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4YD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 YD) m4topten__at - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4H) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 H) m4topten__au - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4K) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 K) m4topten__av - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4R) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 R) m4topten__aw - Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4Y) + Top Tenner (Barcrest) (type 1) (MPU4) (TTS 0.4 Y) m4topten__ax @@ -61548,51 +71841,51 @@ m4topten__e - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0AD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 AD) m4topten__f - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0B) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 B) m4topten__g - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0BD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 BD) m4topten__h - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0C) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 C) m4topten__i - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0D) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 D) m4topten__j - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0DH) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 DH) m4topten__k - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0KD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 KD) m4topten__l - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0RD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 RD) m4topten__m - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0YD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 YD) m4topten__n - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0H) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 H) m4topten__o - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0K) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 K) m4topten__p - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0R) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 R) m4topten__q @@ -61600,39 +71893,39 @@ m4topten__r - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0Y) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.0 Y) m4topten__s - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2AD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 AD) m4topten__t - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2B) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 B) m4topten__u - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2BD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 BD) m4topten__v - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2C) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 C) m4topten__w - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2D) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 D) m4topten__x - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2DH) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 DH) m4topten__y - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2KD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 KD) m4topten__z - Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2RD) + Top Tenner (Barcrest) (type 1) (MPU4) (TTH 1.2 RD) m4toptena @@ -61916,59 +72209,59 @@ m4ttdia - Ten Ten Do It Again (Barcrest) (MPU4) (set 1) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4) m4ttdia__a - Ten Ten Do It Again (Barcrest) (MPU4) (set 2) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 AD) m4ttdia__b - Ten Ten Do It Again (Barcrest) (MPU4) (set 3) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 B) m4ttdia__c - Ten Ten Do It Again (Barcrest) (MPU4) (set 4) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 BD) m4ttdia__d - Ten Ten Do It Again (Barcrest) (MPU4) (set 5) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 C) m4ttdia__e - Ten Ten Do It Again (Barcrest) (MPU4) (set 6) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 D) m4ttdia__f - Ten Ten Do It Again (Barcrest) (MPU4) (set 7) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 DH) m4ttdia__g - Ten Ten Do It Again (Barcrest) (MPU4) (set 8) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 KD) m4ttdia__h - Ten Ten Do It Again (Barcrest) (MPU4) (set 9) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 RD) m4ttdia__i - Ten Ten Do It Again (Barcrest) (MPU4) (set 10) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 YD) m4ttdia__j - Ten Ten Do It Again (Barcrest) (MPU4) (set 11) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 H) m4ttdia__k - Ten Ten Do It Again (Barcrest) (MPU4) (set 12) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 K) m4ttdia__l - Ten Ten Do It Again (Barcrest) (MPU4) (set 13) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 R) m4ttdia__m - Ten Ten Do It Again (Barcrest) (MPU4) (set 14) + Ten Ten Do It Again (Barcrest) (MPU4) (TDA 0.4 Y) m4ttrail @@ -61988,323 +72281,323 @@ m4tutcl - Tutti Fruity Classic (Barcrest) (MPU4) (set 1) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1) m4tutcl__a - Tutti Fruity Classic (Barcrest) (MPU4) (set 2) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 B) m4tutcl__b - Tutti Fruity Classic (Barcrest) (MPU4) (set 3) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 BD) m4tutcl__c - Tutti Fruity Classic (Barcrest) (MPU4) (set 4) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 C) m4tutcl__d - Tutti Fruity Classic (Barcrest) (MPU4) (set 5) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 D) m4tutcl__e - Tutti Fruity Classic (Barcrest) (MPU4) (set 6) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 KD) m4tutcl__f - Tutti Fruity Classic (Barcrest) (MPU4) (set 7) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 RD) m4tutcl__g - Tutti Fruity Classic (Barcrest) (MPU4) (set 8) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 YD) m4tutcl__h - Tutti Fruity Classic (Barcrest) (MPU4) (set 9) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 K) m4tutcl__i - Tutti Fruity Classic (Barcrest) (MPU4) (set 10) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 R) m4tutcl__j - Tutti Fruity Classic (Barcrest) (MPU4) (set 11) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 AD) m4tutcl__k - Tutti Fruity Classic (Barcrest) (MPU4) (set 12) + Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 Y) m4tutfrt - Tutti Fruity (Barcrest) (MPU4) (set 1) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 / TF4 0.4) m4tutfrt__0 - Tutti Fruity (Barcrest) (MPU4) (set 28) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1 D) m4tutfrt__1 - Tutti Fruity (Barcrest) (MPU4) (set 29) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1 KD) m4tutfrt__2 - Tutti Fruity (Barcrest) (MPU4) (set 30) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1 RD) m4tutfrt__3 - Tutti Fruity (Barcrest) (MPU4) (set 31) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1 YD) m4tutfrt__4 - Tutti Fruity (Barcrest) (MPU4) (set 32) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1 K) m4tutfrt__5 - Tutti Fruity (Barcrest) (MPU4) (set 33) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1 R) m4tutfrt__6 - Tutti Fruity (Barcrest) (MPU4) (set 34) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1) m4tutfrt__7 - Tutti Fruity (Barcrest) (MPU4) (set 35) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1 Y) m4tutfrt__8 - Tutti Fruity (Barcrest) (MPU4) (set 36) + Tutti Fruity (Barcrest) (MPU4) (TF4 0.2 AD) m4tutfrt__9 - Tutti Fruity (Barcrest) (MPU4) (set 37) + Tutti Fruity (Barcrest) (MPU4) (TF4 0.2 B) m4tutfrt__a - Tutti Fruity (Barcrest) (MPU4) (set 2) + Tutti Fruity (Barcrest) (MPU4) (CTU 0.1 AD) m4tutfrt__a0 - Tutti Fruity (Barcrest) (MPU4) (set 64) + Tutti Fruity (Bwb) (MPU4) (set 6) m4tutfrt__a1 - Tutti Fruity (Barcrest) (MPU4) (set 65) + Tutti Fruity (Bwb) (MPU4) (set 7) m4tutfrt__a2 - Tutti Fruity (Barcrest) (MPU4) (set 66) + Tutti Fruity (Bwb) (MPU4) (set 8) m4tutfrt__a3 - Tutti Fruity (Barcrest) (MPU4) (set 67) + Tutti Fruity (Bwb) (MPU4) (set 9) m4tutfrt__a4 - Tutti Fruity (Barcrest) (MPU4) (set 68) + Tutti Fruity (Bwb) (MPU4) (set 10) m4tutfrt__a5 - Tutti Fruity (Barcrest) (MPU4) (set 69) + Tutti Fruity (Bwb) (MPU4) (set 11) m4tutfrt__aa - Tutti Fruity (Barcrest) (MPU4) (set 38) + Tutti Fruity (Barcrest) (MPU4) (TF4 0.2 BD) m4tutfrt__ab - Tutti Fruity (Barcrest) (MPU4) (set 39) + Tutti Fruity (Barcrest) (MPU4) (TF4 0.2 D) m4tutfrt__ac - Tutti Fruity (Barcrest) (MPU4) (set 40) + Tutti Fruity (Barcrest) (MPU4) (TF4 0.2 KD) m4tutfrt__ad - Tutti Fruity (Barcrest) (MPU4) (set 41) + Tutti Fruity (Barcrest) (MPU4) (TF4 0.2 YD) m4tutfrt__ae - Tutti Fruity (Barcrest) (MPU4) (set 42) + Tutti Fruity (Barcrest) (MPU4) (TF4 0.2 K) m4tutfrt__af - Tutti Fruity (Barcrest) (MPU4) (set 43) + Tutti Fruity (Barcrest) (MPU4) (TF4 0.2) m4tutfrt__ag - Tutti Fruity (Barcrest) (MPU4) (set 44) + Tutti Fruity (Barcrest) (MPU4) (TF4 0.2 Y) m4tutfrt__ai - Tutti Fruity (Barcrest) (MPU4) (set 46) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 AD / TF4 0.4) m4tutfrt__aj - Tutti Fruity (Barcrest) (MPU4) (set 47) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 B / TF4 0.4) m4tutfrt__ak - Tutti Fruity (Barcrest) (MPU4) (set 48) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 BD / TF4 0.4) m4tutfrt__al - Tutti Fruity (Barcrest) (MPU4) (set 49) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 C / TF4 0.4) m4tutfrt__am - Tutti Fruity (Barcrest) (MPU4) (set 50) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 D / TF4 0.4) m4tutfrt__an - Tutti Fruity (Barcrest) (MPU4) (set 51) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 KD / TF4 0.4) m4tutfrt__ao - Tutti Fruity (Barcrest) (MPU4) (set 52) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 RD / TF4 0.4) m4tutfrt__ap - Tutti Fruity (Barcrest) (MPU4) (set 53) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 YD / TF4 0.4) m4tutfrt__aq - Tutti Fruity (Barcrest) (MPU4) (set 54) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 K / TF4 0.4) m4tutfrt__ar - Tutti Fruity (Barcrest) (MPU4) (set 55) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 R / TF4 0.4) m4tutfrt__as - Tutti Fruity (Barcrest) (MPU4) (set 56) + Tutti Fruity (Barcrest) (MPU4) (TFT 0.4 Y / TF4 0.4) m4tutfrt__at - Tutti Fruity (Barcrest) (MPU4) (set 57) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 B, hack, set 1) m4tutfrt__au - Tutti Fruity (Barcrest) (MPU4) (set 58) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 B, hack, set 2) m4tutfrt__av - Tutti Fruity (Barcrest) (MPU4) (set 59) + Tutti Fruity (Bwb) (MPU4) (set 1) m4tutfrt__aw - Tutti Fruity (Barcrest) (MPU4) (set 60) + Tutti Fruity (Bwb) (MPU4) (set 2) m4tutfrt__ax - Tutti Fruity (Barcrest) (MPU4) (set 61) + Tutti Fruity (Bwb) (MPU4) (set 3) m4tutfrt__ay - Tutti Fruity (Barcrest) (MPU4) (set 62) + Tutti Fruity (Bwb) (MPU4) (set 4) m4tutfrt__az - Tutti Fruity (Barcrest) (MPU4) (set 63) + Tutti Fruity (Bwb) (MPU4) (set 5) m4tutfrt__b - Tutti Fruity (Barcrest) (MPU4) (set 3) + Tutti Fruity (Barcrest) (MPU4) (CTU 0.1 B) m4tutfrt__c - Tutti Fruity (Barcrest) (MPU4) (set 4) + Tutti Fruity (Barcrest) (MPU4) (CTU 0.1 BD) m4tutfrt__d - Tutti Fruity (Barcrest) (MPU4) (set 5) + Tutti Fruity (Barcrest) (MPU4) (CTU 0.1 D) m4tutfrt__e - Tutti Fruity (Barcrest) (MPU4) (set 6) + Tutti Fruity (Barcrest) (MPU4) (CTU 0.1 KD) m4tutfrt__f - Tutti Fruity (Barcrest) (MPU4) (set 7) + Tutti Fruity (Barcrest) (MPU4) (CTU 0.1 YD) m4tutfrt__g - Tutti Fruity (Barcrest) (MPU4) (set 8) + Tutti Fruity (Barcrest) (MPU4) (CTU 0.1 K) m4tutfrt__h - Tutti Fruity (Barcrest) (MPU4) (set 9) + Tutti Fruity (Barcrest) (MPU4) (CTU 0.1 R) m4tutfrt__i - Tutti Fruity (Barcrest) (MPU4) (set 10) + Tutti Fruity (Barcrest) (MPU4) (CTU 0.1) m4tutfrt__j - Tutti Fruity (Barcrest) (MPU4) (set 11) + Tutti Fruity (Barcrest) (MPU4) (CTU 0.1 Y) m4tutfrt__k - Tutti Fruity (Barcrest) (MPU4) (set 12) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1 AD) m4tutfrt__l - Tutti Fruity (Barcrest) (MPU4) (set 13) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1 B) m4tutfrt__m - Tutti Fruity (Barcrest) (MPU4) (set 14) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1 BD) m4tutfrt__n - Tutti Fruity (Barcrest) (MPU4) (set 15) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1 C) m4tutfrt__o - Tutti Fruity (Barcrest) (MPU4) (set 16) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1 D) m4tutfrt__p - Tutti Fruity (Barcrest) (MPU4) (set 17) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1 KD) m4tutfrt__q - Tutti Fruity (Barcrest) (MPU4) (set 18) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1 RD) m4tutfrt__r - Tutti Fruity (Barcrest) (MPU4) (set 19) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1 YD) m4tutfrt__s - Tutti Fruity (Barcrest) (MPU4) (set 20) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1 K) m4tutfrt__t - Tutti Fruity (Barcrest) (MPU4) (set 21) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1 R) m4tutfrt__u - Tutti Fruity (Barcrest) (MPU4) (set 22) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1) m4tutfrt__v - Tutti Fruity (Barcrest) (MPU4) (set 23) + Tutti Fruity (Barcrest) (MPU4) (F1U 0.1 Y) m4tutfrt__w - Tutti Fruity (Barcrest) (MPU4) (set 24) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1 AD) m4tutfrt__x - Tutti Fruity (Barcrest) (MPU4) (set 25) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1 B) m4tutfrt__y - Tutti Fruity (Barcrest) (MPU4) (set 26) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1 BD) m4tutfrt__z - Tutti Fruity (Barcrest) (MPU4) (set 27) + Tutti Fruity (Barcrest) (MPU4) (F3U 0.1 C) m4twilgt @@ -62368,23 +72661,23 @@ m4typcl - Take Your Pick Club (Barcrest) (MPU4) (set 1) + Take Your Pick Club (Barcrest) (MPU4) (CTP 1.2) m4typcl__a - Take Your Pick Club (Barcrest) (MPU4) (set 2) + Take Your Pick Club (Barcrest) (MPU4) (CTP 1.3 D) m4typcl__b - Take Your Pick Club (Barcrest) (MPU4) (set 3) + Take Your Pick Club (Barcrest) (MPU4) (CTP 1.3 F) m4typcl__c - Take Your Pick Club (Barcrest) (MPU4) (set 4) + Take Your Pick Club (Barcrest) (MPU4) (CTP 1.3) m4typcl__d - Take Your Pick Club (Barcrest) (MPU4) (set 5) + Take Your Pick Club (Barcrest) (MPU4) (NTP 0.2) m4unibox @@ -62424,219 +72717,219 @@ m4uuaw - Up Up and Away (Barcrest) (MPU4) (set 1) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1) m4uuaw__0 - Up Up and Away (Barcrest) (MPU4) (set 28) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2) m4uuaw__1 - Up Up and Away (Barcrest) (MPU4) (set 29) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 Y) m4uuaw__2 - Up Up and Away (Barcrest) (MPU4) (set 30) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 DA) m4uuaw__3 - Up Up and Away (Barcrest) (MPU4) (set 31) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 B) m4uuaw__4 - Up Up and Away (Barcrest) (MPU4) (set 32) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 DB) m4uuaw__5 - Up Up and Away (Barcrest) (MPU4) (set 33) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 D) m4uuaw__6 - Up Up and Away (Barcrest) (MPU4) (set 34) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 DH) m4uuaw__7 - Up Up and Away (Barcrest) (MPU4) (set 35) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 DK) m4uuaw__8 - Up Up and Away (Barcrest) (MPU4) (set 36) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 DR) m4uuaw__9 - Up Up and Away (Barcrest) (MPU4) (set 37) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 DY) m4uuaw__a - Up Up and Away (Barcrest) (MPU4) (set 2) + Up Up and Away (Barcrest) (MPU4) (UUA 2.0, hack) m4uuaw__aa - Up Up and Away (Barcrest) (MPU4) (set 38) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 K) m4uuaw__ab - Up Up and Away (Barcrest) (MPU4) (set 39) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 R) m4uuaw__ac - Up Up and Away (Barcrest) (MPU4) (set 40) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1) m4uuaw__ad - Up Up and Away (Barcrest) (MPU4) (set 41) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 Y) m4uuaw__ae - Up Up and Away (Barcrest) (MPU4) (set 42) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 DA) m4uuaw__af - Up Up and Away (Barcrest) (MPU4) (set 43) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 B) m4uuaw__ag - Up Up and Away (Barcrest) (MPU4) (set 44) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 DB) m4uuaw__ah - Up Up and Away (Barcrest) (MPU4) (set 45) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 D) m4uuaw__ai - Up Up and Away (Barcrest) (MPU4) (set 46) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 DH) m4uuaw__aj - Up Up and Away (Barcrest) (MPU4) (set 47) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 DK) m4uuaw__ak - Up Up and Away (Barcrest) (MPU4) (set 48) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 DR) m4uuaw__al - Up Up and Away (Barcrest) (MPU4) (set 49) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 DY) m4uuaw__am - Up Up and Away (Barcrest) (MPU4) (set 50) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 H) m4uuaw__an - Up Up and Away (Barcrest) (MPU4) (set 51) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 K) m4uuaw__ao - Up Up and Away (Barcrest) (MPU4) (set 52) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 R) m4uuaw__ap - Up Up and Away (Barcrest) (MPU4) (set 53) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2) m4uuaw__aq - Up Up and Away (Barcrest) (MPU4) (set 54) + Up Up and Away (Barcrest) (MPU4) (UUA 2.2 Y) m4uuaw__b - Up Up and Away (Barcrest) (MPU4) (set 3) + Up Up and Away (Barcrest) (MPU4) (UPS 2.0, hack) m4uuaw__c - Up Up and Away (Barcrest) (MPU4) (set 4) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 DA) m4uuaw__d - Up Up and Away (Barcrest) (MPU4) (set 5) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 B) m4uuaw__e - Up Up and Away (Barcrest) (MPU4) (set 6) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 DB) m4uuaw__f - Up Up and Away (Barcrest) (MPU4) (set 7) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 D) m4uuaw__g - Up Up and Away (Barcrest) (MPU4) (set 8) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 DH) m4uuaw__h - Up Up and Away (Barcrest) (MPU4) (set 9) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 DK) m4uuaw__i - Up Up and Away (Barcrest) (MPU4) (set 10) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 DR) m4uuaw__j - Up Up and Away (Barcrest) (MPU4) (set 11) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 DY) m4uuaw__k - Up Up and Away (Barcrest) (MPU4) (set 12) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 H) m4uuaw__l - Up Up and Away (Barcrest) (MPU4) (set 13) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 K) m4uuaw__m - Up Up and Away (Barcrest) (MPU4) (set 14) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 R) m4uuaw__n - Up Up and Away (Barcrest) (MPU4) (set 15) + Up Up and Away (Barcrest) (MPU4) (UUA 2.1 H) m4uuaw__o - Up Up and Away (Barcrest) (MPU4) (set 16) + Up Up and Away (Barcrest) (MPU4) (UPS 2.1 Y) m4uuaw__p - Up Up and Away (Barcrest) (MPU4) (set 17) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 DA) m4uuaw__q - Up Up and Away (Barcrest) (MPU4) (set 18) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 B) m4uuaw__r - Up Up and Away (Barcrest) (MPU4) (set 19) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 DB) m4uuaw__s - Up Up and Away (Barcrest) (MPU4) (set 20) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 D) m4uuaw__t - Up Up and Away (Barcrest) (MPU4) (set 21) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 DH) m4uuaw__u - Up Up and Away (Barcrest) (MPU4) (set 22) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 DK) m4uuaw__v - Up Up and Away (Barcrest) (MPU4) (set 23) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 DR) m4uuaw__w - Up Up and Away (Barcrest) (MPU4) (set 24) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 DY) m4uuaw__x - Up Up and Away (Barcrest) (MPU4) (set 25) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 H) m4uuaw__y - Up Up and Away (Barcrest) (MPU4) (set 26) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 K) m4uuaw__z - Up Up and Away (Barcrest) (MPU4) (set 27) + Up Up and Away (Barcrest) (MPU4) (UPS 2.2 R) m4vdexpr @@ -62660,103 +72953,99 @@ m4vegast - Vegas Strip (Barcrest) (MPU4) (set 1) + Vegas Strip (Barcrest) (MPU4) (UVS 0.3) m4vegast__a - Vegas Strip (Barcrest) (MPU4) (set 2) + Vegas Strip (Barcrest) (MPU4) (UVS 0.3 B) m4vegast__b - Vegas Strip (Barcrest) (MPU4) (set 3) + Vegas Strip (Barcrest) (MPU4) (UVS 0.3 BD) m4vegast__c - Vegas Strip (Barcrest) (MPU4) (set 4) + Vegas Strip (Barcrest) (MPU4) (UVS 0.3 C) m4vegast__d - Vegas Strip (Barcrest) (MPU4) (set 5) + Vegas Strip (Barcrest) (MPU4) (UVS 0.3 D) m4vegast__e - Vegas Strip (Barcrest) (MPU4) (set 6) + Vegas Strip (Barcrest) (MPU4) (UVS 0.3 KD) m4vegast__f - Vegas Strip (Barcrest) (MPU4) (set 7) + Vegas Strip (Barcrest) (MPU4) (UVS 0.3 YD) m4vegast__g - Vegas Strip (Barcrest) (MPU4) (set 8) + Vegas Strip (Barcrest) (MPU4) (UVS 0.3 K) m4vegast__h - Vegas Strip (Barcrest) (MPU4) (set 9) + Vegas Strip (Barcrest) (MPU4) (UVS 0.3 AD) m4vegast__i - Vegas Strip (Barcrest) (MPU4) (set 10) + Vegas Strip (Barcrest) (MPU4) (UVS 0.3 Y) m4vegast__j - Vegas Strip (Barcrest) (MPU4) (set 11) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4 AD) m4vegast__k - Vegas Strip (Barcrest) (MPU4) (set 12) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4 B) m4vegast__l - Vegas Strip (Barcrest) (MPU4) (set 13) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4 BD) m4vegast__m - Vegas Strip (Barcrest) (MPU4) (set 14) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4 C) m4vegast__n - Vegas Strip (Barcrest) (MPU4) (set 15) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4 D) m4vegast__o - Vegas Strip (Barcrest) (MPU4) (set 16) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4 KD) m4vegast__p - Vegas Strip (Barcrest) (MPU4) (set 17) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4 RD) m4vegast__q - Vegas Strip (Barcrest) (MPU4) (set 18) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4 YD) m4vegast__r - Vegas Strip (Barcrest) (MPU4) (set 19) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4 K) m4vegast__s - Vegas Strip (Barcrest) (MPU4) (set 20) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4 R) m4vegast__t - Vegas Strip (Barcrest) (MPU4) (set 21) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4) m4vegast__u - Vegas Strip (Barcrest) (MPU4) (set 22) + Vegas Strip (Barcrest) (MPU4) (VSG 0.4 Y) m4vegast__v - Vegas Strip (Barcrest) (MPU4) (set 23) - - - m4vegast__w - Vegas Strip (Barcrest) (MPU4) (set 24) + Vegas Strip (Barcrest) (MPU4) (VSG 0.3 YE, hack?) m4vegast__x - Vegas Strip (Barcrest) (MPU4) (set 25) + Vegas Strip (Barcrest) (MPU4) (VSG 0.3) m4vegastg @@ -62768,215 +73057,215 @@ m4vivaes - Viva Espana (Barcrest) (MPU4) (set 1) + Viva Espana (Barcrest) (MPU4) (EP8 0.1) m4vivaes__0 - Viva Espana (Barcrest) (MPU4) (set 28) + Viva Espana (Barcrest) (MPU4) (VE105.0, set 3) m4vivaes__1 - Viva Espana (Barcrest) (MPU4) (set 29) + Viva Espana (Barcrest) (MPU4) (8V1 0.3, hack, set 1) m4vivaes__2 - Viva Espana (Barcrest) (MPU4) (set 30) + Viva Espana (Barcrest) (MPU4) (VET 0.2AD) m4vivaes__3 - Viva Espana (Barcrest) (MPU4) (set 31) + Viva Espana (Barcrest) (MPU4) (VET 0.2B) m4vivaes__4 - Viva Espana (Barcrest) (MPU4) (set 32) + Viva Espana (Barcrest) (MPU4) (VET 0.2BD) m4vivaes__5 - Viva Espana (Barcrest) (MPU4) (set 33) + Viva Espana (Barcrest) (MPU4) (VET 0.2D) m4vivaes__6 - Viva Espana (Barcrest) (MPU4) (set 34) + Viva Espana (Barcrest) (MPU4) (VET 0.2KD) m4vivaes__7 - Viva Espana (Barcrest) (MPU4) (set 35) + Viva Espana (Barcrest) (MPU4) (VET 0.2YD) m4vivaes__8 - Viva Espana (Barcrest) (MPU4) (set 36) + Viva Espana (Barcrest) (MPU4) (VET 0.2K) m4vivaes__9 - Viva Espana (Barcrest) (MPU4) (set 37) + Viva Espana (Barcrest) (MPU4) (VET 0.2) m4vivaes__a - Viva Espana (Barcrest) (MPU4) (set 2) + Viva Espana (Barcrest) (MPU4) (EP8 0.1AD) m4vivaes__aa - Viva Espana (Barcrest) (MPU4) (set 38) - - - m4vivaes__ab - Viva Espana (Barcrest) (MPU4) (set 39) + Viva Espana (Barcrest) (MPU4) (VET 0.2Y) m4vivaes__ac - Viva Espana (Barcrest) (MPU4) (set 40) + Viva Espana (Barcrest) (MPU4) (VE5 3.0) m4vivaes__ad - Viva Espana (Barcrest) (MPU4) (set 41) + Viva Espana (Barcrest) (MPU4) (VE105.0, set 4) m4vivaes__ae - Viva Espana (Barcrest) (MPU4) (set 42) + Viva Espana (Barcrest) (MPU4) (VE5 4.0C, set 1) m4vivaes__af - Viva Espana (Barcrest) (MPU4) (set 43) + Viva Espana (Barcrest) (MPU4) (VE104.0) m4vivaes__ag - Viva Espana (Barcrest) (MPU4) (set 44) + Viva Espana (Barcrest) (MPU4) (VE5 6.0C, set 3) m4vivaes__ah - Viva Espana (Barcrest) (MPU4) (set 45) + Viva Espana (Barcrest) (MPU4) (VE5 6.0) m4vivaes__ai - Viva Espana (Barcrest) (MPU4) (set 46) + Viva Espana (Barcrest) (MPU4) (VE5 6.0C, set 1) m4vivaes__aj - Viva Espana (Barcrest) (MPU4) (set 47) + Viva Espana (Barcrest) (MPU4) (VE5 6.0C, set 2) m4vivaes__ak - Viva Espana (Barcrest) (MPU4) (set 48) + Viva Espana (Barcrest) (MPU4) (VE5 4.0C, set 2) m4vivaes__al - Viva Espana (Barcrest) (MPU4) (set 49) + Viva Espana (Barcrest) (MPU4) (VE105.0, set 2) m4vivaes__am - Viva Espana (Barcrest) (MPU4) (set 50) + Viva Espana (Barcrest) (MPU4) (VE105.0, set 1) m4vivaes__an - Viva Espana (Barcrest) (MPU4) (set 51) + Viva Espana (Barcrest) (MPU4) (8V1 0.3, hack, set 2) m4vivaes__ao - Viva Espana (Barcrest) (MPU4) (set 52) + Viva Espana (Barcrest) (MPU4) (VE5 5.0, set 2) m4vivaes__ap - Viva Espana (Barcrest) (MPU4) (set 53) + Viva Espana (Barcrest) (MPU4) (VE5 5.0, set 3) + + + m4vivaes__aq + Viva Espana (Barcrest) (MPU4) (ESP 0.2) m4vivaes__b - Viva Espana (Barcrest) (MPU4) (set 3) + Viva Espana (Barcrest) (MPU4) (EP8 0.1B) m4vivaes__c - Viva Espana (Barcrest) (MPU4) (set 4) + Viva Espana (Barcrest) (MPU4) (EP8 0.1BD) m4vivaes__d - Viva Espana (Barcrest) (MPU4) (set 5) + Viva Espana (Barcrest) (MPU4) (EP8 0.1C) m4vivaes__e - Viva Espana (Barcrest) (MPU4) (set 6) + Viva Espana (Barcrest) (MPU4) (EP8 0.1D) m4vivaes__f - Viva Espana (Barcrest) (MPU4) (set 7) + Viva Espana (Barcrest) (MPU4) (EP8 0.1KD) m4vivaes__g - Viva Espana (Barcrest) (MPU4) (set 8) + Viva Espana (Barcrest) (MPU4) (EP8 0.1YD) m4vivaes__h - Viva Espana (Barcrest) (MPU4) (set 9) + Viva Espana (Barcrest) (MPU4) (EP8 0.1K) m4vivaes__i - Viva Espana (Barcrest) (MPU4) (set 10) + Viva Espana (Barcrest) (MPU4) (EP8 0.1Y) m4vivaes__j - Viva Espana (Barcrest) (MPU4) (set 11) + Viva Espana (Barcrest) (MPU4) (VE5 6.0, hack) m4vivaes__k - Viva Espana (Barcrest) (MPU4) (set 12) + Viva Espana (Barcrest) (MPU4) (ESP 0.3C) m4vivaes__l - Viva Espana (Barcrest) (MPU4) (set 13) + Viva Espana (Barcrest) (MPU4) (ESP 0.3D) m4vivaes__m - Viva Espana (Barcrest) (MPU4) (set 14) + Viva Espana (Barcrest) (MPU4) (ESP 0.3YD) m4vivaes__n - Viva Espana (Barcrest) (MPU4) (set 15) + Viva Espana (Barcrest) (MPU4) (ESP 0.3K) m4vivaes__o - Viva Espana (Barcrest) (MPU4) (set 16) + Viva Espana (Barcrest) (MPU4) (ESP 0.3) m4vivaes__p - Viva Espana (Barcrest) (MPU4) (set 17) + Viva Espana (Barcrest) (MPU4) (ESP 0.3Y) m4vivaes__q - Viva Espana (Barcrest) (MPU4) (set 18) + Viva Espana (Barcrest) (MPU4) (VE5 0.2AD) m4vivaes__r - Viva Espana (Barcrest) (MPU4) (set 19) + Viva Espana (Barcrest) (MPU4) (VE5 0.2B) m4vivaes__s - Viva Espana (Barcrest) (MPU4) (set 20) + Viva Espana (Barcrest) (MPU4) (VE5 0.2BD) m4vivaes__t - Viva Espana (Barcrest) (MPU4) (set 21) + Viva Espana (Barcrest) (MPU4) (VE5 0.2D) m4vivaes__u - Viva Espana (Barcrest) (MPU4) (set 22) + Viva Espana (Barcrest) (MPU4) (VE5 0.2KD) m4vivaes__v - Viva Espana (Barcrest) (MPU4) (set 23) + Viva Espana (Barcrest) (MPU4) (VE5 0.2YD) m4vivaes__w - Viva Espana (Barcrest) (MPU4) (set 24) + Viva Espana (Barcrest) (MPU4) (VE5 0.2K) m4vivaes__x - Viva Espana (Barcrest) (MPU4) (set 25) + Viva Espana (Barcrest) (MPU4) (VE5 0.2) m4vivaes__y - Viva Espana (Barcrest) (MPU4) (set 26) + Viva Espana (Barcrest) (MPU4) (VE5 0.2Y) m4vivaes__z - Viva Espana (Barcrest) (MPU4) (set 27) + Viva Espana (Barcrest) (MPU4) (VE5 5.0, set 1) m4vivalv @@ -63018,6 +73307,10 @@ m4vivalv__8 Viva Las Vegas (Barcrest) (MPU4) (set 36) + + m4vivalv__9 + Viva Las Vegas (Barcrest) (MPU4) (set 37) + m4vivalv__a Viva Las Vegas (Barcrest) (MPU4) (set 2) @@ -63128,159 +73421,159 @@ m4vivess - Viva Espana Showcase (Barcrest) (MPU4) (set 1) + Viva Espana Showcase (Barcrest) (MPU4) (SE8 0.1) m4vivess__a - Viva Espana Showcase (Barcrest) (MPU4) (set 2) + Viva Espana Showcase (Barcrest) (MPU4) (SE8 0.1 AD) m4vivess__b - Viva Espana Showcase (Barcrest) (MPU4) (set 3) + Viva Espana Showcase (Barcrest) (MPU4) (SE8 0.1 B) m4vivess__c - Viva Espana Showcase (Barcrest) (MPU4) (set 4) + Viva Espana Showcase (Barcrest) (MPU4) (SE8 0.1 BD) m4vivess__d - Viva Espana Showcase (Barcrest) (MPU4) (set 5) + Viva Espana Showcase (Barcrest) (MPU4) (SE8 0.1 D) m4vivess__f - Viva Espana Showcase (Barcrest) (MPU4) (set 6) + Viva Espana Showcase (Barcrest) (MPU4) (SE8 0.1 KD) m4vivess__g - Viva Espana Showcase (Barcrest) (MPU4) (set 7) + Viva Espana Showcase (Barcrest) (MPU4) (SE8 0.1 YD) m4vivess__i - Viva Espana Showcase (Barcrest) (MPU4) (set 8) + Viva Espana Showcase (Barcrest) (MPU4) (SE8 0.1 K) m4vivess__j - Viva Espana Showcase (Barcrest) (MPU4) (set 9) + Viva Espana Showcase (Barcrest) (MPU4) (SE8 0.1 Y) m4vivess__k - Viva Espana Showcase (Barcrest) (MPU4) (set 10) + Viva Espana Showcase (Barcrest) (MPU4) (SES 0.2 B) m4vivess__l - Viva Espana Showcase (Barcrest) (MPU4) (set 11) + Viva Espana Showcase (Barcrest) (MPU4) (SES 0.2 D) m4vivess__m - Viva Espana Showcase (Barcrest) (MPU4) (set 12) + Viva Espana Showcase (Barcrest) (MPU4) (SES 0.2 YD) m4vivess__n - Viva Espana Showcase (Barcrest) (MPU4) (set 13) + Viva Espana Showcase (Barcrest) (MPU4) (SES 0.2 K) m4vivess__o - Viva Espana Showcase (Barcrest) (MPU4) (set 14) + Viva Espana Showcase (Barcrest) (MPU4) (SES 0.2) m4vivess__p - Viva Espana Showcase (Barcrest) (MPU4) (set 15) + Viva Espana Showcase (Barcrest) (MPU4) (SES 0.2 Y) m4viz - Viz (Barcrest) (MPU4) (set 1) + Viz (Barcrest) (MPU4) (VIZ 0.6) m4viz__a - Viz (Barcrest) (MPU4) (set 2) + Viz (Barcrest) (MPU4) (8V1 0.6 C, hack, set 2) m4viz__b - Viz (Barcrest) (MPU4) (set 3) + Viz (Barcrest) (MPU4) (VIZ 0.2 T) m4viz__c - Viz (Barcrest) (MPU4) (set 4) + Viz (Barcrest) (MPU4) (8V1 1.0 C, hack, set 3) m4viz__d - Viz (Barcrest) (MPU4) (set 5) + Viz (Barcrest) (MPU4) (VIZ 0.6 B) m4viz__e - Viz (Barcrest) (MPU4) (set 6) + Viz (Barcrest) (MPU4) (VIZ 0.6 C) m4viz__f - Viz (Barcrest) (MPU4) (set 7) + Viz (Barcrest) (MPU4) (VIZ 0.6 D) m4viz__g - Viz (Barcrest) (MPU4) (set 8) + Viz (Barcrest) (MPU4) (VIZ 0.6 DK) m4viz__h - Viz (Barcrest) (MPU4) (set 9) + Viz (Barcrest) (MPU4) (VIZ 0.6 DY) m4viz__i - Viz (Barcrest) (MPU4) (set 10) + Viz (Barcrest) (MPU4) (VIZ 0.6 K) m4viz__j - Viz (Barcrest) (MPU4) (set 11) + Viz (Barcrest) (MPU4) (8V1 0.6 C, hack, set 1) m4viz__k - Viz (Barcrest) (MPU4) (set 12) + Viz (Barcrest) (MPU4) (VIZ 0.6 Y) m4viz__l - Viz (Barcrest) (MPU4) (set 13) + Viz (Barcrest) (MPU4) (VIZ 0.3 Y) m4viz__m - Viz (Barcrest) (MPU4) (set 14) + Viz (Barcrest) (MPU4) (VZ__1.0 K, set 1) m4viz__n - Viz (Barcrest) (MPU4) (set 15) + Viz (Barcrest) (MPU4) (VZ__1.0, set 1) m4viz__o - Viz (Barcrest) (MPU4) (set 16) + Viz (Barcrest) (MPU4) (VZ__1.0 DY, set 1) m4viz__p - Viz (Barcrest) (MPU4) (set 17) + Viz (Barcrest) (MPU4) (VZ__1.0 D, set 1) m4viz__q - Viz (Barcrest) (MPU4) (set 18) + Viz (Barcrest) (MPU4) (VZ__1.0 K, set 2) m4viz__r - Viz (Barcrest) (MPU4) (set 19) + Viz (Barcrest) (MPU4) (VZ__1.0, set 2) m4viz__s - Viz (Barcrest) (MPU4) (set 20) + Viz (Barcrest) (MPU4) (VZ__1.0 DY, set 2) m4viz__t - Viz (Barcrest) (MPU4) (set 21) + Viz (Barcrest) (MPU4) (VZ__1.0 D, set 2) m4viz__u - Viz (Barcrest) (MPU4) (set 22) + Viz (Barcrest) (MPU4) (VZ__1.0 C, set 1) m4viz__v - Viz (Barcrest) (MPU4) (set 23) + Viz (Barcrest) (MPU4) (VZ__1.0 C, set 2) m4viz__w - Viz (Barcrest) (MPU4) (set 24) + Viz (Barcrest) (MPU4) (8V1 0.6, hack) m4volcan @@ -63348,171 +73641,171 @@ m4wta - Winner Takes All (Barcrest) (MPU4) (set 1) + Winner Takes All (Barcrest) (MPU4) (WIN 0.6) m4wta__0 - Winner Takes All (Barcrest) (MPU4) (set 28) + Winner Takes All (Barcrest) (MPU4) (WNT 0.1 D) m4wta__1 - Winner Takes All (Barcrest) (MPU4) (set 29) + Winner Takes All (Barcrest) (MPU4) (WNT 0.1 KD) m4wta__2 - Winner Takes All (Barcrest) (MPU4) (set 30) + Winner Takes All (Barcrest) (MPU4) (WNT 0.1 YD) m4wta__3 - Winner Takes All (Barcrest) (MPU4) (set 31) + Winner Takes All (Barcrest) (MPU4) (WNT 0.1 K) m4wta__4 - Winner Takes All (Barcrest) (MPU4) (set 32) + Winner Takes All (Barcrest) (MPU4) (WNT 0.1) m4wta__5 - Winner Takes All (Barcrest) (MPU4) (set 33) + Winner Takes All (Barcrest) (MPU4) (WNT 0.1 Y) m4wta__6 - Winner Takes All (Barcrest) (MPU4) (set 34) + Winner Takes All (Barcrest) (MPU4) (V1 0.1, hack) m4wta__7 - Winner Takes All (Barcrest) (MPU4) (set 35) + Winner Takes All (Barcrest) (MPU4) (WNC 1.3 5, hack, set 1) m4wta__8 - Winner Takes All (Barcrest) (MPU4) (set 36) + Winner Takes All (Barcrest) (MPU4) (WN8 2.2 5, hack, set 1) m4wta__9 - Winner Takes All (Barcrest) (MPU4) (set 37) + Winner Takes All (Barcrest) (MPU4) (WN4 1.1 K5) m4wta__aa - Winner Takes All (Barcrest) (MPU4) (set 38) + Winner Takes All (Barcrest) (MPU4) (WIN 0.6 K) m4wta__ab - Winner Takes All (Barcrest) (MPU4) (set 39) + Winner Takes All (Barcrest) (MPU4) (WN4 1.1 5) m4wta__ac - Winner Takes All (Barcrest) (MPU4) (set 40) + Winner Takes All (Barcrest) (MPU4) (WN5 3.0 5) m4wta__ad - Winner Takes All (Barcrest) (MPU4) (set 41) + Winner Takes All (Barcrest) (MPU4) (WNC 1.3 5, hack, set 2) m4wta__ae - Winner Takes All (Barcrest) (MPU4) (set 42) + Winner Takes All (Barcrest) (MPU4) (WN4 1.1 K5, hack?) m4wta__af - Winner Takes All (Barcrest) (MPU4) (set 43) + Winner Takes All (Barcrest) (MPU4) (WN4 1.1, hack, set 2) m4wta__ag - Winner Takes All (Barcrest) (MPU4) (set 44) + Winner Takes All (Barcrest) (MPU4) (WN8 2.2 5, hack, set 2) m4wta__b - Winner Takes All (Barcrest) (MPU4) (set 3) + Winner Takes All (Barcrest) (MPU4) (WIN 0.6 YD) m4wta__d - Winner Takes All (Barcrest) (MPU4) (set 5) + Winner Takes All (Barcrest) (MPU4) (WN4 1.1, hack, set 1) m4wta__e - Winner Takes All (Barcrest) (MPU4) (set 6) + Winner Takes All (Barcrest) (MPU4) (WIN 0.6 Y) m4wta__f - Winner Takes All (Barcrest) (MPU4) (set 7) + Winner Takes All (Barcrest) (MPU4) (WN5 0.1 AD) m4wta__g - Winner Takes All (Barcrest) (MPU4) (set 8) + Winner Takes All (Barcrest) (MPU4) (WN5 0.1 B) m4wta__h - Winner Takes All (Barcrest) (MPU4) (set 9) + Winner Takes All (Barcrest) (MPU4) (WN5 0.1 BD) m4wta__i - Winner Takes All (Barcrest) (MPU4) (set 10) + Winner Takes All (Barcrest) (MPU4) (WN5 0.1 D) m4wta__j - Winner Takes All (Barcrest) (MPU4) (set 11) + Winner Takes All (Barcrest) (MPU4) (WN5 0.1 KD) m4wta__k - Winner Takes All (Barcrest) (MPU4) (set 12) + Winner Takes All (Barcrest) (MPU4) (WN5 0.1 YD) m4wta__l - Winner Takes All (Barcrest) (MPU4) (set 13) + Winner Takes All (Barcrest) (MPU4) (WN5 0.1 K) m4wta__m - Winner Takes All (Barcrest) (MPU4) (set 14) + Winner Takes All (Barcrest) (MPU4) (WN5 0.1) m4wta__n - Winner Takes All (Barcrest) (MPU4) (set 15) + Winner Takes All (Barcrest) (MPU4) (WN5 0.1 Y) m4wta__o - Winner Takes All (Barcrest) (MPU4) (set 16) + Winner Takes All (Barcrest) (MPU4) (WN8 0.1 B) m4wta__p - Winner Takes All (Barcrest) (MPU4) (set 17) + Winner Takes All (Barcrest) (MPU4) (WN8 0.1 C) m4wta__q - Winner Takes All (Barcrest) (MPU4) (set 18) + Winner Takes All (Barcrest) (MPU4) (WN8 0.1 D) m4wta__r - Winner Takes All (Barcrest) (MPU4) (set 19) + Winner Takes All (Barcrest) (MPU4) (WN8 0.1 KD) m4wta__s - Winner Takes All (Barcrest) (MPU4) (set 20) + Winner Takes All (Barcrest) (MPU4) (WN8 0.1 YD) m4wta__t - Winner Takes All (Barcrest) (MPU4) (set 21) + Winner Takes All (Barcrest) (MPU4) (WN8 0.1 K) m4wta__u - Winner Takes All (Barcrest) (MPU4) (set 22) + Winner Takes All (Barcrest) (MPU4) (WN8 0.1) m4wta__v - Winner Takes All (Barcrest) (MPU4) (set 23) + Winner Takes All (Barcrest) (MPU4) (WN8 0.1 Y) m4wta__w - Winner Takes All (Barcrest) (MPU4) (set 24) + Winner Takes All (Barcrest) (MPU4) (WNT 0.1, hack) m4wta__x - Winner Takes All (Barcrest) (MPU4) (set 25) + Winner Takes All (Barcrest) (MPU4) (WNT 0.1 AD) m4wta__y - Winner Takes All (Barcrest) (MPU4) (set 26) + Winner Takes All (Barcrest) (MPU4) (WNT 0.1 B) m4wta__z - Winner Takes All (Barcrest) (MPU4) (set 27) + Winner Takes All (Barcrest) (MPU4) (WNT 0.1 BD) m4wwc @@ -64750,6 +75043,10 @@ m5gstrika Gold Strike (Barcrest) (MPU5) (set 6) + + m5gstriks + Gold Strike (Barcrest) (MPU5) (V1.00, Spanish, Bilso S.A.) + m5hellrz Hellraiser (Barcrest) (MPU5) @@ -65500,7 +75797,7 @@ m5rfymc06 - Run For Your Money Club (Barcrest) (MPU5) (Set 2) + Run For Your Money Club (Barcrest) (MPU5) (set 2) m5rgclb @@ -66167,8 +76464,24 @@ Top Poker (Dutch, Game Card 95-750-899) - mac2bios - Multi Amenity Cassette System 2 BIOS + ma6710 + Multi-Action 6710-13 + + + ma7551 + Multi-Action 7551 + + + ma7556 + Multi-Action 7556 + + + ma7558 + Multi-Action 7558 + + + mac_1808 + unknown game (MAC #1808) macattck @@ -66182,13 +76495,33 @@ macea Mace: The Dark Age (HDD 1.0a) + + macgalxy + MAC's Galaxy + mach2 - Mach 2 + Mach 2 (set 1) + + + mach2a + Mach 2 (set 2) mach3 - M.A.C.H. 3 + M.A.C.H. 3 (set 1) + + + mach3a + M.A.C.H. 3 (set 2) + + + mach3b + M.A.C.H. 3 (set 3) + + + mach9 + Mach-9 (bootleg of Vulgus) macha @@ -66196,19 +76529,31 @@ machbrkr - Mach Breakers - Numan Athletics 2 (Japan) + Mach Breakers (World, MB2) + + + machbrkrj + Mach Breakers - Numan Athletics 2 (Japan, MB1) machomou Macho Mouse + + machridj + Vs. Mach Rider (Japan, Fighting Course Version) + machridr Vs. Mach Rider (Endurance Course Version) - machridra - Vs. Mach Rider (Fighting Course Version, set MR4-1 A) + macjungl + MAC Jungle + + + macjungn + MAC Jungle (New version) macross @@ -66219,20 +76564,28 @@ Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II - macrossp - Macross Plus + macross2g + Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II (Gamest review build) - macsbios - Multi Amenity Cassette System BIOS + macross2k + Macross II (Korea) + + + macrossp + Macross Plus madalien - Mad Alien + Mad Alien (set 1) madaliena - Mad Alien (Highway Chase) + Mad Alien (set 2) + + + madalienb + Mad Alien (set 2, alt gfx) madball @@ -66252,27 +76605,39 @@ maddog - Mad Dog McCree v2.03 board rev.B + Mad Dog McCree (v2.03 board rev.B) maddog2 - Mad Dog II: The Lost Gold v2.04 + Mad Dog II: The Lost Gold (v2.04) - maddog21 - Mad Dog II: The Lost Gold v1.0 + maddog2_100 + Mad Dog II: The Lost Gold (v1.00) - maddog22 - Mad Dog II: The Lost Gold v2.02 + maddog2_110 + Mad Dog II: The Lost Gold (v1.10) + + + maddog2_202 + Mad Dog II: The Lost Gold (v2.02) + + + maddog_202 + Mad Dog McCree (v2.02 board rev.B) maddoga - Mad Dog McCree v1C board rev.A + Mad Dog McCree (v1C board rev.A) maddonna - Mad Donna (set 1) + Mad Donna (Tuning, set 1) + + + maddonnab + Mad Donna (Tuning, set 2) maddonnb @@ -66288,7 +76653,7 @@ madmotor - Mad Motor + Mad Motor (prototype) madrace @@ -66302,6 +76667,46 @@ madzoo Mad Zoo (version U450C) + + mag10 + Magic 10 Nevada (bootleg of Pool 10) + + + mag_burn + The Burning Cavern (31/03/87) + + + mag_day + A Day In Space (31/03/87) + + + mag_drac + Dracula's Castle (Magnet System) + + + mag_exzi + Exzisus (EX 1.0, Magnet System) + + + mag_pdak + Paris Dakar (31/03/87, Spanish) + + + mag_time + Time Scanner (TS 2.0, Magnet System) + + + mag_war + War Mission (WM 04/06/87) + + + mag_wara + War Mission (WM 09/04/87) + + + mag_xain + Xain'd Sleena (SC 3.0, Magnet System) + magdrop Magical Drop (Japan, Version 1.1, 1995.06.21) @@ -66314,6 +76719,10 @@ magdrop3 Magical Drop III + + magdrop3bh + Magical Drop III (Secret Character Hack) + magdropp Magical Drop Plus 1 (Japan, Version 2.1, 1995.09.12) @@ -66322,6 +76731,34 @@ magerror Magical Error wo Sagase + + magforst + Magic Forest (0151139, US) + + + magibomb + Magic Bomb (Ver. L3.5S) + + + magibomba + Magic Bomb (Ver. BR4.4, 04/19/02) + + + magibombb + Magic Bomb (Ver. AB4.5A, 07/10/02) + + + magibombc + Magic Bomb (Ver. AB4.2, 11/10/01) + + + magibombd + Magic Bomb (Ver. AA.72D, 14/11/05) + + + magibombe + Magic Bomb (Ver. A3.1A) + magic Magic @@ -66332,7 +76769,11 @@ magic102 - Magic's 10 2 (ver 1.1) + Magic's 10 2 (ver. 1.1) + + + magic102a + Magic's 10 2 (ver. BETA3) magic10a @@ -66362,9 +76803,17 @@ magicarde Magic Card Export 94 + + magicardf + Magic Export (V.211A) + magicardj - Magic Card Jackpot (4.01) + Magic Card III Jackpot (4.01) + + + magicardw + Magic Card - Wien (Sicherheitsversion 1.2) magicbal @@ -66380,19 +76829,27 @@ magicbuba - Magic Bubble (Adult version) + Magic Bubble (Adult version, YS1302 PCB, set 1) + + + magicbubb + Magic Bubble (Adult version, YS1302 PCB, set 2) + + + magicbubc + Magic Bubble (Adult version, YS-0211 PCB) magicfly Magic Fly - magicle - Magic Lotto Export (5.03) + magician + The Magician (20210111, NSW/ACT) - magicmsk - Magic Mask (MV4115, Export) + magicle + Magic Lotto Export (5.03) magicrd2 @@ -66422,6 +76879,22 @@ magictga Magic the Gathering: Armageddon (set 2) + + magimask + Magic Mask (AHG1549, US) + + + magimaska + Magic Mask (AHG1548, US) + + + magimaskb + Magic Mask (DHG1309, US) + + + magipur + Magic Purple + magix Magix / Rock @@ -66444,7 +76917,15 @@ magmax - Mag Max + Mag Max (set 1) + + + magmaxa + Mag Max (set 2) + + + magmerm + Magic Mermaid (0251331, US) magodds @@ -66466,6 +76947,10 @@ magoddsd Magical Odds (set 5, custom encrypted CPU block) + + magreel + Magic Reels + magspeed Magical Speed @@ -66478,13 +76963,25 @@ magspot2 Magical Spot II + + magtcha5 + Magic Touch (0300455V, NSW/ACT) + + + magtcha5a + Magic Touch (0200455V, NSW/ACT) + magtouch Magical Touch magtruck - Magical Truck Adventure + Magical Truck Adventure (Japan) + + + maguila + Up Maguila (bootleg of Donkey Kong Jr.) magworm @@ -66500,7 +76997,7 @@ mahjngoh - Mahjong Oh (V2.06J) + Mahjong Oh (V2.06J 1999/11/23 08:52:22) mahmajn @@ -66516,12 +77013,16 @@ mahretsu - Mahjong Kyo Retsuden (NGM-004)(NGH-004) + Mahjong Kyo Retsuden (NGM-004 ~ NGH-004) maiko Maikobana (Japan 900802) + + mainev2p + The Main Event (2 Players ver. X) + mainevt The Main Event (4 Players ver. Y) @@ -66546,9 +77047,37 @@ majest12 Majestic Twelve - The Space Invaders Part IV (Japan) + + majest12j + Majestic Twelve - The Space Invaders Part IV (Japan) + + + majest12u + Majestic Twelve - The Space Invaders Part IV (US) + + + majest12ua + Majestic Twelve - The Space Invaders Part IV (US, earlier?) + + + majest12ub + Majestic Twelve - The Space Invaders Part IV (US, earlier code base) + majorpkr - Major Poker (v2.0) + Major Poker (set 1, v2.0) + + + majorpkra + Major Poker (set 2, Micro Manufacturing intro) + + + majorpkrb + Major Poker (set 3, Micro Manufacturing intro) + + + majorpkrc + Major Poker (set 4, Micro Manufacturing intro) majrjhdx @@ -66560,7 +77089,15 @@ majtitl2 - Major Title 2 (World) + Major Title 2 (World, set 1) + + + majtitl2a + Major Title 2 (World, set 1, alt sound CPU) + + + majtitl2b + Major Title 2 (World, set 2) majtitl2j @@ -66590,17 +77127,25 @@ makaijan Makaijan [BET] (Japan) + + makaimuc + Makai-Mura (Japan Revision C) + + + makaimug + Makai-Mura (Japan Revision G) + makaimur - Makai-Mura (Japan) + Makaimura (Japan) makaimurc - Makai-Mura (Japan Revision C) + Makaimura (Japan Revision C) makaimurg - Makai-Mura (Japan Revision G) + Makaimura (Japan Revision G) maketrax @@ -66614,6 +77159,10 @@ makyosen Makyou Senshi (Japan) + + maldaiza + Maldaliza + maletmad Mallet Madness v2.1 @@ -66634,9 +77183,29 @@ mamboagga Mambo A Go-Go e-Amusement (GQA40 VER. JRB) + + mammothm + Mammoth Money (0100425V, NSW/ACT) + mamonoro - Mamoru-kun wa Norowarete Shimatta! + Mamoru-kun wa Norowarete Shimatta! (Japan) + + + mandinga + Mandinga (Artemi bootleg of Amidar) + + + mandingac + Mandanga (bootleg of Mandinga on Galaxian hardware, set 2) + + + mandingaeg + Mandinga (Electrogame S.A. bootleg of Amidar) + + + mandingarf + Mandanga (bootleg of Mandinga on Galaxian hardware, set 1) mangchi @@ -66656,20 +77225,36 @@ maniacsp - Maniac Square (prototype) + Maniac Square (ver 1.0, checksum b602, prototype) maniacsq - Maniac Square (unprotected) + Maniac Square (protected, Version 1.0, Checksum DEEE) + + + maniacsqa + Maniac Square (protected, Version 1.0, Checksum CF2D) + + + maniacsqs + Maniac Square (unprotected, Version 1.0, Checksum 66B1, 960419/1 PCB) + + + maniacsqu + Maniac Square (unprotected, Version 1.0, Checksum BB73) manicpnc - Manic Panic Ghosts! + Manic Panic Ghosts! (USA, Export) manohman Mann, oh-Mann + + manpuku + Manpuku Suizokukan + manxtt Manx TT Superbike - DX (Revision D) @@ -66710,10 +77295,6 @@ marble5 Marble Madness (set 5 - LSI Cartridge) - - margmgc - Margarita Magic (01J00101, NSW/ACT) - marineb Marine Boy @@ -66728,47 +77309,115 @@ mario - Mario Bros. (US, Revision F) + Mario Bros. (US, Revision G) + + + mariobl + Mario Bros. (bootleg on Ambush Hardware, set 1) + + + mariobla + Mario Bros. (bootleg on Ambush Hardware, set 2) marioe Mario Bros. (US, Revision E) + + mariof + Mario Bros. (US, Revision F) + marioj + Mario Bros. (Japan, Revision C) + + + mariojjl + Super Mario Fushigi no JanJanLand + + + mariojp Mario Bros. (Japan) - marioo - Mario Bros. (US, Unknown Rev) + mariorou + Mario Roulette + + + marioun + Super Mario World - Mario Undoukai markham Markham + + marmagic + Margarita Magic (01J00101, NSW/ACT) + + + marmagicu + Margarita Magic (EHG1558, US) + + + marmagicua + Margarita Magic (EHG1559, US) + + + marmatcp + Martial Masters - Community Patch (Hack) + + + marmatsc + Martial Masters - Secret Characters (Hack) + + + marqueen + Martian Queen + mars Mars + + marsarf + Mars (bootleg) + marsp Mars - God of War + + marspf + Mars - God of War (French speech) + + + marspp + Mars - God of War (Prototype) + marstv - Mars TV (JPN) + Mars TV (Japan) martmast - Martial Masters (ver. 104, 102, 102US) + Martial Masters / Xing Yi Quan (ver. 104, 102, 102US) + + + martmast102c + Martial Masters / Xing Yi Quan (ver. 102, 101, 101CN) + + + martmast103c + Martial Masters / Xing Yi Quan (ver. 103, 102, 101CN) - martmastc - Martial Masters (ver. 104, 102, 101CN) + martmast104c + Martial Masters / Xing Yi Quan (ver. 104, 102, 101CN) - martmastc102 - Martial Masters (ver. 102, 101, 101CN) + martmasttw + Martial Masters / Xing Yi Quan (ver. 102, 101, 101TW) maruchan @@ -66780,7 +77429,15 @@ marukodq - Chibi Marukochan Deluxe Quiz + Chibi Maruko-chan: Maruko Deluxe Quiz + + + marvice + Marbella Vice + + + marvice100hz + Marbella Vice (100Hz display) marvins @@ -66788,27 +77445,99 @@ marvland - Marvel Land (US) + Marvel Land (Japan) marvlandj Marvel Land (Japan) + + marvlandup + Marvel Land (US, prototype) + + + marvlanj + Marvel Land (Japan) + + + marywu + unknown Labeled 'WU- MARY-1A' Music by: SunKiss Chen + masao Masao maski - Maski Show (Russia) (Extrema) + Maski Show (Ukraine V. 43.10) + + + maskia + Maski Show (Ukraine V. 43.07) + + + maskib + Maski Show (Ukraine V. 42.11) + + + maskic + Maski Show (Ukraine V. 42.05) + + + masmario + Super Mario Fushigi no Korokoro Party (center) + + + masmario2 + Super Mario Fushigi no Korokoro Party 2 + + + masmarios + Super Mario Fushigi no Korokoro Party (satellite) + + + mastbond + Master Bond (bootleg of Secret Agent) mastboy Master Boy (Spanish, PCB Rev A) + + mastboya + Master Boy (Spanish, PCB Rev A, hack?) + mastboyi - Master Boy (Italian, PCB Rev A) + Master Boy (Italian, PCB Rev A, set 1) + + + mastboyia + Master Boy (Italian, PCB Rev A, set 2) + + + mastboyo + Master Boy (1987, Z80 hardware, Covielsa, set 1) + + + mastboyoa + Master Boy (1987, Z80 hardware, Covielsa, set 2) + + + mastboyob + Master Boy (1987, Z80 hardware, Ichi-Funtel, set 1) + + + mastboyoc + Master Boy (1987, Z80 hardware, Ichi-Funtel, set 2) + + + mastcrane + Master Crane (set 1) + + + mastcranea + Master Crane (set 2) masterw @@ -66822,6 +77551,10 @@ masterwu Master of Weapon (US) + + mastfury + Master's Fury + mastkin The Masters of Kin @@ -66830,6 +77563,10 @@ mastninj Master Ninja (bootleg of Shadow Warriors / Ninja Gaiden) + + mastrglf + Master's Golf + matahari Mata Hari @@ -66838,6 +77575,10 @@ match98 Match '98 (ver. 1.33) + + matchemg + Match'em Up (German) + matchit Match It @@ -66852,12 +77593,20 @@ matrim - Matrimelee / Shin Gouketsuji Ichizoku Toukon (NGM-2660) (NGH-2660) + Matrimelee / Shin Gouketsuji Ichizoku Toukon (NGM-2660 ~ NGH-2660) + + + matrimbh + Matrimelee / Shin Gouketsuji Ichizoku Toukon (Enable Hidden Characters V2) matrimbl Matrimelee / Shin Gouketsuji Ichizoku Toukon (bootleg) + + matrix + Matrix + mausuke Mausuke no Ojama the World (J 960314 V1.000) @@ -66882,10 +77631,6 @@ maverik Maverik - - maxaflex - Max-A-Flex - maxf_102 Maximum Force v1.02 @@ -66922,6 +77667,14 @@ mayaa Maya (set 2) + + mayab + Maya (set 3) + + + mayac + Maya (set 4, clean) + mayday Mayday (set 1) @@ -66952,20 +77705,28 @@ mayumi - Kikiippatsu Mayumi-chan (Japan) + Kiki-Ippatsu Mayumi-chan mazan - Mazan: Flash of the Blade (MAZ2 Ver. A) + Mazan: Flash of the Blade (World, MAZ2 Ver.A) + + + mazanj + Mazan: Flash of the Blade (Japan, MAZ1 Ver.A) - mazana - Mazan: Flash of the Blade (MAZ3 Ver. A) + mazanu + Mazan: Flash of the Blade (US, MAZ3 Ver.A) maze Amazing Maze + + mazebl + Maze (Trog rev LA4 3/11/91 bootleg) + mazeinv Maze Invaders (prototype) @@ -67000,11 +77761,15 @@ mbaa - Melty Blood Actress Again + Melty Blood Actress Again Version A (Japan, Rev A) + + + mbaao + Melty Blood Actress Again (Japan) - mbaaa - Melty Blood Actress Again (Ver. A) + mblkjack + Black Jack (Mirco) mbomberj @@ -67026,6 +77791,18 @@ mbrush Magic Brush (bootleg of Crush Roller) + + mbs2euro + Mega Bonus Star II (Euro, Millennium Edition) + + + mbutrfly + Magical Butterfly (version U350C, protected) + + + mcard_h8 + Magic Card (H8, English) + mcastle Magic Castle @@ -67062,6 +77839,22 @@ mchampdxb Multi Champ Deluxe (ver. 1114, 14/11/1999) + + mcheonru + Ma Cheon Ru + + + mchilli + More Chilli (20248711, NSW/ACT) + + + mchilliq + More Chilli (20289311, Queensland) + + + mcircus + Merry Circus (Version 1.0.2) + mcitylov City Love [BET] (Japan 860904) @@ -67078,6 +77871,10 @@ mcolors Magic Colors (ver. 1.7a) + + mcolorsa + Magic Colors (ver. 1.6) + mcombat Missile Combat (Videotron bootleg, set 1) @@ -67094,6 +77891,14 @@ mcontest Miss Mahjong Contest (Japan) + + md23do + Mad Dog II: The Lost Gold (3DO hardware) + + + mdchoice + Dealer's Choice (E4A1) + mdhorse Derby Quiz My Dream Horse (Japan, MDH1/VER.A2) @@ -67114,6 +77919,10 @@ mdrink Magic Drink (Ver 1.2) + + mead4in1 + Meadows 4 in 1 [TTL] + mechatt Mechanized Attack (World) @@ -67140,7 +77949,19 @@ megaaton - Meg Aaton + Meg-Aaton + + + megaatona + Meg-Aaton (alternate set) + + + megab + Mega Blast (World) + + + megabj + Mega Blast (Japan) megablst @@ -67154,6 +77975,10 @@ megablstu Mega Blast (US) + + megacard + Mega Card (Ver.0210, encrypted) + megadble Mega Double Poker (Ver. 1.63 Espagnol) @@ -67168,15 +77993,19 @@ megadpkr - Mega Double Poker (conversion kit, set 1) + Mega Double Poker (conversion kit, version 2.3 MD) megadpkrb - Mega Double Poker (conversion kit, set 2) + Mega Double Poker (conversion kit, version 2.1 MD) megaforc - Mega Force + Mega Force (World) + + + megaforcu + Mega Force (US) megakat @@ -67206,6 +78035,10 @@ megamana Mega Man: The Power Battle (CPS1, Asia 951006) + + megamn2a + Mega Man 2: The Power Fighters (Asia 960708) + megamn2d Mega Man 2: The Power Fighters (USA 960708 Phoenix Edition) (bootleg) @@ -67215,180 +78048,208 @@ Mega Phoenix - megaplay - Mega Play BIOS + megastrp + Mega Double Strip (Ver. 1.10b) + + + megat + Pit Boss Megatouch (9234-20-01) megat2 - Pit Boss Megatouch II (9255-10-01 ROG, Standard version) + Pit Boss Megatouch II (9255-10-01 R0G, Standard version) megat2a - Pit Boss Megatouch II (9255-10-01 ROE, Standard version) + Pit Boss Megatouch II (9255-10-01 R0E, Standard version) megat2b - Pit Boss Megatouch II (9255-10-01 ROD, Standard version) + Pit Boss Megatouch II (9255-10-01 R0D, Standard version) megat2ca - Pit Boss Megatouch II (9255-10-06 ROG, California version) + Pit Boss Megatouch II (9255-10-06 R0G, California version) megat2caa - Pit Boss Megatouch II (9255-10-06 ROE, California version) + Pit Boss Megatouch II (9255-10-06 R0E, California version) megat2mn - Pit Boss Megatouch II (9255-10-02 ROG, Minnesota version) + Pit Boss Megatouch II (9255-10-02 R0G, Minnesota version) megat3 - Megatouch III (9255-20-01 RON, Standard version) + Megatouch III (9255-20-01 R0N, Standard version) megat3a - Megatouch III (9255-20-01 ROK, Standard version) + Megatouch III (9255-20-01 R0K, Standard version) megat3b - Megatouch III (9255-20-01 ROF, Standard version) + Megatouch III (9255-20-01 R0F, Standard version) megat3c - Megatouch III (9255-20-01 ROB, Standard version) + Megatouch III (9255-20-01 R0B, Standard version) megat3ca - Megatouch III (9255-20-06 RON, California version) + Megatouch III (9255-20-06 R0N, California version) megat3caa - Megatouch III (9255-20-06 ROD, California version) + Megatouch III (9255-20-06 R0D, California version) megat3d - Megatouch III (9255-20-01 ROA, Standard version) + Megatouch III (9255-20-01 R0A, Standard version) megat3nj - Megatouch III (9255-20-07 ROG, New Jersey version) + Megatouch III (9255-20-07 R0G, New Jersey version) megat3te - Megatouch III Tournament Edition (9255-30-01 ROE, Standard version) + Megatouch III Tournament Edition (9255-30-01 R0E, Standard version) + + + megat3tg + Megatouch III Turnier Edition (9255-30-50 R0F, Bi-Lingual GER/ENG version) megat4 - Megatouch IV (9255-40-01 ROE, Standard version) + Megatouch IV (9255-40-01 R0E, Standard version) megat4a - Megatouch IV (9255-40-01 ROD, Standard version) + Megatouch IV (9255-40-01 R0D, Standard version) megat4b - Megatouch IV (9255-40-01 ROB, Standard version) + Megatouch IV (9255-40-01 R0B, Standard version) megat4c - Megatouch IV (9255-40-01 ROA, Standard version) + Megatouch IV (9255-40-01 R0A, Standard version) megat4d - Megatouch IV (9255-40-01 RO, Standard version) + Megatouch IV (9255-40-01 R0, Standard version) megat4s - Super Megatouch IV (9255-41-01 ROG, Standard version) + Super Megatouch IV (9255-41-01 R0G, Standard version) megat4sa - Super Megatouch IV (9255-41-01 ROE, Standard version) + Super Megatouch IV (9255-41-01 R0E, Standard version) megat4sb - Super Megatouch IV (9255-41-01 ROC, Standard version) + Super Megatouch IV (9255-41-01 R0C, Standard version) megat4smn - Super Megatouch IV (9255-41-02 ROC, Minnesota version) + Super Megatouch IV (9255-41-02 R0C, Minnesota version) megat4snj - Super Megatouch IV (9255-41-07 ROG, New Jersey version) + Super Megatouch IV (9255-41-07 R0G, New Jersey version) megat4st - Super Megatouch IV Tournament Edition (9255-51-01 ROB, Standard version) + Super Megatouch IV Tournament Edition (9255-51-01 R0B, Standard version) megat4stg - Super Megatouch IV Turnier Version (9255-51-50 ROA, Bi-Lingual GER/ENG version) + Super Megatouch IV Turnier Version (9255-51-50 R0A, Bi-Lingual GER/ENG version) megat4te - Megatouch IV Tournament Edition (9255-50-01 ROD, Standard version) + Megatouch IV Tournament Edition (9255-50-01 R0D, Standard version) megat4tea - Megatouch IV Tournament Edition (9255-50-01 ROA, Standard version) + Megatouch IV Tournament Edition (9255-50-01 R0A, Standard version) megat5 - Megatouch 5 (9255-60-01 ROI, Standard version) + Megatouch 5 (9255-60-01 R0I, Standard version) megat5a - Megatouch 5 (9255-60-01 ROC, Standard version) + Megatouch 5 (9255-60-01 R0C, Standard version) + + + megat5g + Megatouch 5 (9255-60-50 R0G, Bi-Lingual GER/ENG version) megat5nj - Megatouch 5 (9255-60-07 RON, New Jersey version) + Megatouch 5 (9255-60-07 R0N, New Jersey version) megat5t - Megatouch 5 Tournament Edition (9255-70-01 ROC, Standard version) + Megatouch 5 Tournament Edition (9255-70-01 R0C, Standard version) megat5tg - Megatouch 5 Turnier Version (9255-70-50 ROD, Bi-Lingual GER/ENG version) + Megatouch 5 Turnier Version (9255-70-50 R0D, Bi-Lingual GER/ENG version) megat6 - Megatouch 6 (9255-80-01 ROA, Standard version) + Megatouch 6 (9255-80-01 R0A, Standard version) + + + megat7e + Megatouch 7 Encore Edition (9255-90-01 R00, Standard version) megatack - Megatack + Megatack (set 1) - megatech - Mega-Tech + megatacka + Megatack (set 2) + + + megaznik + Mega Zone (Kosuka) megazone - Mega Zone (Konami set 1) + Mega Zone (program code L) megazonea - Mega Zone (Konami set 2) + Mega Zone (unknown program code 1) megazoneb - Mega Zone (Kosuka set 1) + Mega Zone (unknown program code 2) - megazonec - Mega Zone (Kosuka set 2) + megazoneh + Mega Zone (program code H) megazonei - Mega Zone (Interlogic) + Mega Zone (program code I) + + + megazonej + Mega Zone (program code J) meijinsn - Meijinsen + Meijinsen (set 1) + + + meijinsna + Meijinsen (set 2) meikyuh @@ -67400,31 +78261,47 @@ meltyb - Melty Blood Act Cadenza Ver B (GDL-0039) + Melty Blood Act Cadenza Version B2 (Japan) (GDL-0039A) - meltyba - Melty Blood Act Cadenza Ver B (Rev A) (GDL-0039A) + meltybld + Melty Blood Act Cadenza Ver. A (Japan) (GDL-0028C) - meltybld - Melty Blood Act Cadenza (Rev C) (GDL-0028C) + meltyblo + Melty Blood Act Cadenza (Japan) (GDL-0028) + + + meltybo + Melty Blood Act Cadenza Version B (Japan) (GDL-0039) memlane Memory Lane + + menghong + Meng Hong Lou + meosism Meosis Magic (Japan) mephistp - Mephisto (rev. 1.2) + Mephisto (Stargame) (rev. 1.2) mephistp1 - Mephisto (rev. 1.1) + Mephisto (Stargame) (rev. 1.1) + + + mephistpn + Mephisto (Stargame) (newer?) + + + mercenario + Mercenario (Commando bootleg) mercs @@ -67438,10 +78315,18 @@ mercsu Mercs (USA 900608) + + mercsua + Mercs (US 900608) + mercsur1 Mercs (USA 900302) + + meritjp + Merit Joker Poker (9131-09) + merlinmm Merlins Money Maze @@ -67454,6 +78339,10 @@ merryjn Merry Joiner + + metabee + Metabee Shot + metafox Meta Fox @@ -67478,6 +78367,14 @@ metamrph Metamorphic Force (ver EAA) + + metamrpha + Metamorphic Force (ver AAA) + + + metamrphe + Metamorphic Force (ver EAA - alternate) + metamrphj Metamorphic Force (ver JAA) @@ -67486,17 +78383,41 @@ metamrphu Metamorphic Force (ver UAA) + + metamrpj + Metamorphic Force (Japan ver JAA) + meteor Meteoroids - meteorho + meteora + Meteor (Alca bootleg of Moon Cresta) + + + meteorbl Meteor (bootleg of Asteroids) + + meteorho + Meteor (Hoei bootleg of Asteroids) + + + meteorite + Meteorite (Proel bootleg of Asteroids) + meteorp - Meteor (Stern) + Meteor (Bug fix release) + + + meteorpo + Meteor (First release) + + + meteors + Meteors meteort @@ -67504,12 +78425,20 @@ meteorts - Meteorites (bootleg of Asteroids) + Meteorites (VGG bootleg of Asteroids) + + + metestrm + Meteor Storm (0152162, US) metlclsh Metal Clash (Japan) + + metlfrzr + Metal Freezer (Japan) + metlhawk Metal Hawk (Rev C) @@ -67526,6 +78455,10 @@ metmqstr Metamoqester (International) + + metrocra + Metro-Cross (set 2) + metrocrs Metro-Cross (set 1) @@ -67540,7 +78473,11 @@ mexico86 - Mexico 86 (bootleg of Kick and Run) + Mexico 86 (bootleg of Kick and Run) (set 1) + + + mexico86a + Mexico 86 (bootleg of Kick and Run) (set 2) mf_achas @@ -67566,6 +78503,14 @@ mfightcc Mahjong Fight Club (ver JAC) + + mfish + Multi Fish (021120) + + + mfish_10 + Multi Fish (031117) + mfish_11 Multi Fish (031124) @@ -67582,6 +78527,10 @@ mfish_13 Multi Fish (040316) + + mfish_2 + Multi Fish (021121) + mfish_3 Multi Fish (021124) @@ -67590,14 +78539,30 @@ mfish_3a Multi Fish (bootleg, 021124, banking address hack) + + mfish_4 + Multi Fish (021219) + + + mfish_5 + Multi Fish (021227) + mfish_6 Multi Fish (030124) + + mfish_7 + Multi Fish (030511) + mfish_8 Multi Fish (030522) + + mfish_9 + Multi Fish (031026) + mfjump Monster Farm Jump (Japan) @@ -67654,13 +78619,41 @@ mgakuen2 Mahjong Gakuen 2 Gakuen-chou no Fukushuu + + mgames + Match Games + + + mgarden + Magic Garden (AHG1211-99, US) + + + mgavegas + Vegas 1 (Ver 2.3 dual coin pulse, shorter) + + + mgavegas133 + Vegas 1 (Ver 1.33 single coin pulse) + + + mgavegas21 + Vegas 1 (Ver 2.1 dual coin pulse, longer) + mgcldate - Magical Date / Magical Date - dokidoki kokuhaku daisakusen (Ver 2.02J) + Magical Date / Magical Date - Dokidoki Kokuhaku Daisakusen (Ver 2.02J) + + + mgcldtea + Magical Date (JAPAN) set 2 mgcldtex - Magical Date EX / Magical Date - sotsugyou kokuhaku daisakusen (Ver 2.01J) + Magical Date EX / Magical Date - Sotsugyou Kokuhaku Daisakusen (Ver 2.01J) + + + mgcrystj + Magical Crystals (Japan) mgcrystl @@ -67676,15 +78669,15 @@ mgcs - Mahjong Man Guan Cai Shen (V103CS) + Mahjong Man Guan Caishen (V103CS) mgdh - Mahjong Man Guan Da Heng (Taiwan, V125T1) + Mahjong Man Guan Daheng (Taiwan, V125T1) mgdha - Mahjong Man Guan Da Heng (Taiwan, V123T1) + Mahjong Man Guan Daheng (Taiwan, V123T1) mgfx @@ -67704,7 +78697,7 @@ mgolf - Atari Mini Golf (prototype) + Mini Golf (Atari, prototype) mgprem11 @@ -67724,7 +78717,7 @@ mhavocrv - Major Havoc (Return to Vax) + Major Havoc - Return to Vax mhgaiden @@ -67742,9 +78735,13 @@ mia2 M.I.A. - Missing in Action (version S) + + miaction + Missing In Action + miaj - M.I.A. - Missing in Action (Japan) + M.I.A. - Missing in Action (version R) (Japan) michigan @@ -67774,9 +78771,25 @@ midearth Middle Earth + + mideartha + Middle Earth (alternate) + midnrun - Midnight Run (Euro v1.11) + Midnight Run: Road Fighter 2 (EAA, Euro v1.11) + + + midnruna + Midnight Run: Road Fighter 2 (AAA, Asia v1.10, older sound program) + + + midnruna2 + Midnight Run: Road Fighter 2 (AAA, Asia v1.10, newer sound program) + + + midnrunj + Midnight Run: Road Fighter 2 (JAD, Japan v1.10) midres @@ -67786,6 +78799,10 @@ midresb Midnight Resistance (bootleg with 68705) + + midresbj + Midnight Resistance (Joystick bootleg) + midresj Midnight Resistance (Japan) @@ -67818,6 +78835,10 @@ mikiej Shinnyuushain Tooru-kun + + mikiek + Shin-ip Sawon - Seok Dol-i + mil4000 Millennium Nuovo 4000 (Version 2.0) @@ -67834,6 +78855,10 @@ mil4000c Millennium Nuovo 4000 (Version 1.6) + + milkin + Milkin' It (10251911, NSW/ACT) + millipdd Millipede Dux (hack) @@ -67858,6 +78883,10 @@ mimonkey Mighty Monkey + + mimonkeyug + Mighty Monkey (U.Games bootleg) + mimonsco Mighty Monkey (bootleg on Super Cobra hardware) @@ -67866,14 +78895,34 @@ mimonscr Mighty Monkey (bootleg on Scramble hardware) + + mimonscra + Mighty Monkey (Kaina Games, bootleg on Scramble hardware) + minasan - Minasanno Okagesamadesu! Daisugorokutaikai (MOM-001)(MOH-001) + Minasan no Okagesamadesu! Dai Sugoroku Taikai (MOM-001 ~ MOH-001) minefld Minefield + + minefldfe + Minefield (The Logicshop, bootleg) + + + minemine + Mine, Mine, Mine (0400115V, NSW/ACT) + + + minemineu + Mine, Mine, Mine (VHG0416-99, US) + + + minemineua + Mine, Mine, Mine (NHG0416-99, US) + mineswpr Minesweeper @@ -67888,15 +78937,15 @@ miniboy7 - Mini Boy 7 (set 1) + Mini-Boy 7 (set 1) miniboy7a - Mini Boy 7 (set 2) + Mini-Boy 7 (set 2) - miniboy7b - Mini Boy 7 (set 3) + minigol2 + Mini Golf (set 2) minigolf @@ -67906,6 +78955,26 @@ minigolf2 Mini Golf (10/8/85) + + miniguay + Mini Guay VD + + + minimony + Mini Money + + + minimonya + Mini Money (set 2, v1.5?) + + + minimonyb + Mini Money (set 3, v1.4?) + + + minisupf + Mini Super Fruits + minivadr Mini Vaders @@ -67922,13 +78991,29 @@ miraxa Mirax (set 2) + + mirco21 + 21 (Mirco) + mirderby Miracle Derby - Ascot mirninja - Mirai Ninja (Japan) + Mirai Ninja (Japan, set 1) + + + mirninjaa + Mirai Ninja (Japan, set 2) + + + mirworld + Mirage World (satellite) + + + misdraw + Michigan Super Draw (2131-16, U5-2) misncrft @@ -67938,6 +79023,10 @@ misncrfta Mission Craft (version 2.4) + + missamer + Miss Americana + missb2 Miss Bubble II @@ -67954,46 +79043,94 @@ missile2 Missile Command (rev 2) + + missilea + Missile Attack (U.Games bootleg of Missile Command) + missilem Missile Command Multigame + + missilex + Missile-X [TTL] + missmw96 Miss Mister World '96 (Nude) + + missw02 + Miss World 2002 + missw96 - Miss World '96 (Nude) (set 1) + Miss World '96 (Nude) (C-3000A PCB, set 1) missw96a - Miss World '96 (Nude) (set 2) + Miss World '96 (Nude) (C-3000A PCB, set 2) missw96b - Miss World '96 (Nude) (set 3) + Miss World '96 (Nude) (C-3000A PCB, set 3) + + + missw96c + Miss World '96 (Nude) (C-3000B PCB) mizubaku Mizubaku Daibouken (Japan) + + mj1 + Sega Yonin Uchi Mahjong MJ (Update Disc Ver.1.008, Japan) (CDP-10002B) + mj2 + Sega Network Taisen Mahjong MJ 2 (Rev G) (GDX-0006G) + + + mj2c Sega Network Taisen Mahjong MJ 2 (Rev C) (GDX-0006C) + + mj2f + Sega Network Taisen Mahjong MJ 2 (Rev F) (GDX-0006F) + mj3 + Sega Network Taisen Mahjong MJ 3 (Rev F) (GDX-0017F) + + + mj3c + Sega Network Taisen Mahjong MJ 3 (Rev C) (GDX-0017C) + + + mj3d Sega Network Taisen Mahjong MJ 3 (Rev D) (GDX-0017D) - mj3f - Sega Network Taisen Mahjong MJ 3 (Rev F) (GDX-0017F) + mj3evo + Sega Network Taisen Mahjong MJ 3 Evolution (Rev B) (GDX-0021B) + + + mj3evoa + Sega Network Taisen Mahjong MJ 3 Evolution (Rev A) (GDX-0021A) + + + mj3evoup + Sega Network Taisen Mahjong MJ 3 Evolution Firmware Update (GDX-0023) mj4simai Wakakusamonogatari Mahjong Yonshimai (Japan) + + mj_130 + Michael Jordan (1.30, display A1.03) + mjanbari Medal Mahjong Janjan Baribari [BET] (Japan) @@ -68016,11 +79153,15 @@ mjchuuka - Mahjong Chuukanejyo (China) + Maque Zhonghua Ernu [BET] (Taiwan) mjclinic - Mahjong Clinic (Japan) + Mahjong Clinic (Japan, set 1) + + + mjclinica + Mahjong Clinic (Japan, set 2) mjclub @@ -68032,7 +79173,7 @@ mjdchuka - Mahjong The Dai Chuuka Ken (China, v. D111) + Maque Da Zhonghua Quan [BET] (Taiwan, D111) mjdejav2 @@ -68050,6 +79191,10 @@ mjdialq2 Mahjong Dial Q2 (Japan) + + mjdialq2a + Mahjong Dial Q2 (Japan, alt.) + mjdiplob Mahjong Diplomat [BET] (Japan) @@ -68074,6 +79219,10 @@ mjelctrn Mahjong Electron Base (parts 2 & 4, Japan) + + mjembase + Mahjong Electromagnetic Base + mjflove Mahjong Fantasic Love (Japan) @@ -68094,6 +79243,14 @@ mjgaiden Mahjong Gaiden [BET] (Japan 870803) + + mjgalpri + Mahjong Gal-pri - World Gal-con Grandprix (Japan) + + + mjgnight + Mahjong Gorgeous Night [BET] (Japan, TSM003-01) + mjgottsu Mahjong Gottsu ee-kanji (Japan) @@ -68126,6 +79283,10 @@ mjikaga Mahjong Ikaga Desu ka (Japan) + + mjjoship + Mahjong Joshi Pro-wres -Give up 5 byou mae- (Japan) + mjkinjas Mahjong Kinjirareta Asobi (Japan) @@ -68154,25 +79315,33 @@ mjlstory Mahjong Jikken Love Story (Japan) + + mjmaglmp + Mahjong Magic Lamp (v. JAA02) + mjmania Mahjong Mania - Kairakukan e Youkoso (Japan) + + mjmyorn2 + Mahjong The Mysterious Orient Part 2 ~ Exotic Dream ~ [BET] (Japan, v1.00) + mjmyornt - Mahjong The Mysterious Orient + Mahjong The Mysterious Orient [BET] (Japan, v1.00) mjmyster - Mahjong The Mysterious World (set 1) + Mahjong The Mysterious World [BET] (Japan, set 1) mjmyuniv - Mahjong The Mysterious Universe + Mahjong The Mysterious Universe [BET] (Japan, D85) mjmywrld - Mahjong The Mysterious World (set 2) + Mahjong The Mysterious World [BET] (Japan, set 2) mjnanpaa @@ -68190,6 +79359,10 @@ mjnatsu Mahjong Natsu Monogatari (Japan) + + mjnquesb + Mahjong Quest (No Nudity) + mjnquest Mahjong Quest (Japan) @@ -68208,12 +79381,20 @@ mjreach1 - Mahjong Reach Ippatsu (Japan) + Mahjong Reach Ippatsu [BET] (Japan) + + + mjschuka + Mahjong Super Dai Chuuka Ken [BET] (Japan, D115) mjsenka Mahjong Senka (Japan) + + mjsenpu + Mahjong Senpu + mjsikakb Mahjong Shikaku (Japan 880722) @@ -68256,7 +79437,11 @@ mjyarou - Mahjong Yarou [BET] (Japan) + Mahjong Yarou [BET] (Japan, set 1) + + + mjyarou2 + Mahjong Yarou [BET] (Japan, set 2) mjyougo @@ -68286,6 +79471,10 @@ mk2chal Mortal Kombat II Challenger (hack) + + mk2p + Mortal Kombat II Plus (Beta 2, Hack) + mk2r11 Mortal Kombat II (rev L1.1) @@ -68308,12 +79497,16 @@ mk2r31e - Mortal Kombat II (rev L3.1 (European)) + Mortal Kombat II (rev L3.1, European) - mk2r32e + mk2r32 Mortal Kombat II (rev L3.2 (European)) + + mk2r32e + Mortal Kombat II (rev L3.2, European) + mk2r42 Mortal Kombat II (rev L4.2, hack) @@ -68322,13 +79515,17 @@ mk2r91 Mortal Kombat II (rev L9.1, hack) + + mk2ute + Mortal Kombat II Ultimate Tournament Edition (hack, V5.0.053) + mk3 Mortal Kombat 3 (rev 2.1) mk3mdb - Mortal Kombat 3 (bootleg of Megadrive version) + Mortal Kombat 3 (bootleg of Mega Drive version) mk3p40 @@ -68342,6 +79539,10 @@ mk3r20 Mortal Kombat 3 (rev 2.0) + + mk3snes + Mortal Kombat 3 (SNES bootleg) + mk4 Mortal Kombat 4 (version 3.0) @@ -68355,12 +79556,20 @@ Mortal Kombat 4 (version 1.0) - mk6nsw11 - Aristocrat MK6 Base (11011901, NSW/ACT) + mkartag2 + Mario Kart Arcade GP 2 (Japan, MK21 Ver.A) + + + mkartag2a + Mario Kart Arcade GP 2 (Japan, MK21 Ver.A, alt dump) mkartagp - Mario Kart Arcade GP (MKA2 Ver.B) + Mario Kart Arcade GP (Japan, MKA1 Ver.A1) + + + mkartagpc + Mario Kart Arcade GP (Japan, MKA1 Ver.C, update) mkeibaou @@ -68410,6 +79619,10 @@ mkr4 Mortal Kombat (rev 4.0 T-Unit 02/11/93) + + mkrep + Mortal Kombat (Reptile Man hack) + mktturbo Mortal Kombat (Turbo Ninja T-Unit 03/19/93, hack) @@ -68422,6 +79635,14 @@ mkyawdim2 Mortal Kombat (Yawdim bootleg, set 2) + + mkyawdim3 + Mortal Kombat (Yawdim bootleg, set 3) + + + mkyawdim4 + Mortal Kombat (Yawdim bootleg, set 4) + mkyturbo Mortal Kombat (Turbo 3.1 09/09/93, hack) @@ -68442,6 +79663,14 @@ mlanding Midnight Landing (Germany) + + mlandingj + Midnight Landing (Japan) + + + mltiwars + Multi Wars (bootleg of UniWar S) + mm_05 Medieval Madness (0.50) @@ -68466,6 +79695,10 @@ mm_10u Medieval Madness (1.0 Ultrapin) + + mmagic + Monkey Magic + mmaiko Maikobana [BET] (Japan 900911) @@ -68474,10 +79707,26 @@ mmancp2u Mega Man: The Power Battle (CPS2, USA 951006, SAMPLE Version) + + mmancp2ur1 + Mega Man: The Power Battle (CPS2, USA 950926, SAMPLE Version) + + + mmancp2ur2 + Mega Man: The Power Battle (CPS2, USA 950925, SAMPLE Version) + + + mmaruchan + Chibi Maruko-chan ~Minna de Sugoroku Asobi~ no Maki + mmatrix Mars Matrix: Hyper Solid Shooting (USA 000412) + + mmatrixa + Mars Matrix: Hyper Solid Shooting (Asia 000412) + mmatrixd Mars Matrix: Hyper Solid Shooting (USA 000412 Phoenix Edition) (bootleg) @@ -68494,6 +79743,10 @@ mmaze Marchen Maze (Japan) + + mmaze2 + Marchen Maze (Japan, hack?) + mmcamera Mahjong Camera Kozou [BET] (Japan 890509) @@ -68506,6 +79759,10 @@ mmm_ldip Lucky Dip (Maygay) + + mmmaster + Master + mmmbanc Medal Mahjong Moukari Bancho (2007/06/05 MASTER VER.) @@ -68514,6 +79771,10 @@ mmonkey Minky Monkey + + mmonkeyj + Minky Monkey (Japan) + mmpanic Monkey Mole Panic (USA) @@ -68534,25 +79795,53 @@ mnfb_c27 Monday Night Football (2.7, 50cts) + + mnfb_c29 + Monday Night Football (2.9, 50cts) + mnight Mutant Night + + mnightj + Mutant Night (Japan) + mntecrlo Monte Carlo (Pinball) + + mntecrlo2 + Monte Carlo (Pinball, rev. 2) + + + mntecrloa + Monte Carlo (Pinball, alternate set) + + + mntecrlof + Monte Carlo (Pinball, French) + + + mntecrlog + Monte Carlo (Pinball, German) + mnumber Mystery Number mnumitg - Magic Number (Italian Gambling Game, Ver 1.5) + Magic Number (Italian gambling game, Ver 1.5) + + + mnytree + Money Tree (10001211, NSW/ACT) mocapb - Mocap Boxing (ver AAA) + Mocap Boxing (ver AAB) mocapbj @@ -68568,12 +79857,16 @@ moeru - Moeru Casinyo (GDL-0013) + Moeru Casinyo (Japan) (GDL-0013) mofflott Maze of Flott (Japan) + + mogitate + Mahjong Mogitate (Japan) + moguchan Mogu Chan (bootleg?) @@ -68584,7 +79877,7 @@ mohicans - Mohican Sun (Konami Endeavour) + Mohican Sun (Konami Endeavour, Russia) mok @@ -68596,19 +79889,27 @@ momoko - Momoko 120% + Momoko 120% (Japanese text) + + + momokob + Momoko 120% (bootleg) + + + momokoe + Momoko 120% (English text) momotaro - Mahjong Momotarou (Japan) + Mahjong Momotarou [BET] (Japan, T027-RB-01) monacogp - Monaco GP (Set 1) [TTL] + Monaco GP (set 1) [TTL] monacogpa - Monaco GP (Set 2) [TTL] + Monaco GP (set 2) [TTL] moneybnk @@ -68650,6 +79951,14 @@ monkeyd Monkey Donkey + + monmouse + Money Mouse (0400469V, NSW/ACT) + + + monmousea + Money Mouse (0300469V, NSW/ACT) + mononew Monopoly (ARM7 Sound Board) @@ -68672,11 +79981,23 @@ monoplcl - Monopoly Classic (JPM) (SYSTEM5 VIDEO) + Monopoly Classic (JPM) (Version 5) (SYSTEM5 VIDEO) + + + monoplcld + Monopoly Classic (JPM) (Version 5, Protocol) (SYSTEM5 VIDEO) monopldx - Monopoly Deluxe (JPM) (SYSTEM5 VIDEO) + Monopoly Deluxe (JPM) (Version 6) (SYSTEM5 VIDEO) + + + monopldx1 + Monopoly Deluxe (JPM) (Version 1) (SYSTEM5 VIDEO) + + + monopldxd + Monopoly Deluxe (JPM) (Version 6, Protocol) (SYSTEM5 VIDEO) monopolf @@ -68700,11 +80021,19 @@ monopoly - Monopoly (JPM) (SYSTEM5 VIDEO, set 1) + Monopoly (JPM) (Version 4H) (SYSTEM5 VIDEO) - monopolya - Monopoly (JPM) (SYSTEM5 VIDEO, set 2) + monopoly3 + Monopoly (JPM) (Version 3) (SYSTEM5 VIDEO) + + + monopoly4 + Monopoly (JPM) (Version 4) (SYSTEM5 VIDEO) + + + monopolyd + Monopoly (JPM) (Version 4H, Protocol) (SYSTEM5 VIDEO) monopred @@ -68716,7 +80045,7 @@ monshow - The Monster Show (Konami Endeavour) + The Monster Show (Konami Endeavour, Russia) monspdr @@ -68732,7 +80061,11 @@ monsterz - Monster Zero + Monster Zero (set 1) + + + monsterza + Monster Zero (set 2) montana @@ -68742,9 +80075,17 @@ montecar Monte Carlo + + montree + Money Tree (0201397V, New Zealand) + monymony - Money Money + Money Money (set 1) + + + monymony2 + Money Money (set 2) monzagp @@ -68754,6 +80095,14 @@ monzagpb Monza GP (bootleg) + + moo + Wild West C.O.W.-Boys of Moo Mesa (World version EA) + + + moobl + Wild West C.O.W.-Boys of Moo Mesa (bootleg version AA) + moomesa Wild West C.O.W.-Boys of Moo Mesa (ver EAB) @@ -68788,11 +80137,11 @@ moonbase - Moon Base (set 1) + Moon Base Zeta (set 1) moonbasea - Moon Base (set 2) + Moon Base Zeta (set 2) mooncmw @@ -68808,7 +80157,7 @@ mooncrgx - Moon Cresta (Galaxian hardware) + Moon Cresta (bootleg on Galaxian hardware) mooncrs2 @@ -68822,10 +80171,22 @@ mooncrs4 Moon Crest (Moon Cresta bootleg) + + mooncrs5 + Moon Cresta (bootleg set 4) + + + mooncrsa + Moon Cresta (Nichibutsu, old rev) + mooncrsb Moon Cresta (bootleg set 1) + + mooncrsg + Moon Cresta (Gremlin) + mooncrsl Cresta Mundo (Laguna S.A. Spanish Moon Cresta bootleg) @@ -68842,9 +80203,13 @@ mooncrsto Moon Cresta (Nichibutsu, old rev) + + mooncrstso + Moon Cresta (SegaSA / Sonic) + mooncrstu - Moon Cresta (Nichibutsu USA, unencrypted) + Moon Cresta (Nichibutsu USA, encrypted) mooncrstuk @@ -68854,14 +80219,46 @@ mooncrstuku Moon Cresta (Nichibutsu UK, unencrypted) + + mooncrstuu + Moon Cresta (Nichibutsu USA, unencrypted) + + + mooncrsu + Moon Cresta (Nichibutsu, unencrypted) + + + moonfire + Moon Fire - Jackpot Carnival (30164211, Queensland) + moonlght - Moon Light (bootleg of Golden Star) + Moon Light (v.0629, low program) + + + moonlghta + Moon Light (v.0629, high program) + + + moonlghtb + Moon Light (v.02L0A, low program) + + + moonlghtc + Moon Light (v.02L0A, high program, alt gfx) moonqsr Moon Quasar + + moonwalk + Michael Jackson's Moonwalker (Set 1) + + + moonwalt + Moonlight Waltz (10227611, NSW/ACT) + moonwar Moonwar @@ -68874,6 +80271,18 @@ moonwarp Moon War (prototype on Frenzy hardware) + + moonwlka + Michael Jackson's Moonwalker (Set 2) + + + moonwlkb + Michael Jackson's Moonwalker (bootleg) + + + mooua + Wild West C.O.W.-Boys of Moo Mesa (US version UA) + moremore More More @@ -68894,6 +80303,14 @@ mosaicf2 Mosaic (F2 System) + + mosdraw + Montana Super Draw (4436-05, U5-0) + + + moshougi + Shougi no Tatsujin - Master of Shougi + mosyougi Syougi No Tatsujin - Master of Syougi @@ -68914,6 +80331,14 @@ motofrenmf Moto Frenzy (Mini Deluxe Field Test Version) + + motogonki + Motogonki + + + motogp + Moto GP (MGP1004-NA-B) + motorace MotoRace USA @@ -68922,6 +80347,10 @@ motoraid Motor Raid - Twin + + motoraiddx + Motor Raid - Twin/DX + motos Motos @@ -68930,25 +80359,41 @@ mototour MotoTour / Zippy Race (Tecfri license) + + mototoura + MotoTour / Zippy Race (Assa version of Tecfri license) + motoxgo - Motocross Go! (MG3 Ver. A) + Motocross Go! (US, MG3 Ver. A) motoxgov1a - Motocross Go! (MG1 Ver. A, set 1) + Motocross Go! (Japan, MG1 Ver. A, set 1) motoxgov1a2 - Motocross Go! (MG1 Ver. A, set 2) + Motocross Go! (Japan, MG1 Ver. A, set 2) motoxgov2a - Motocross Go! (MG2 Ver. A) + Motocross Go! (World, MG2 Ver. A, set 1) + + + motoxgov2a2 + Motocross Go! (World, MG2 Ver. A, set 2) motrdome - MotorDome + MotorDome (rev. D) + + + motrdomeb + MotorDome (rev. B) + + + motrdomeg + MotorDome (German rev. B) motrshow @@ -68958,10 +80403,38 @@ motrshowa Motor Show (set 2) + + motrshowb + Motor Show (set 3) + mouja Mouja (Japan) + + mouncrst + Moune Creste (Jeutel French Moon Cresta bootleg) + + + mountmon + Mountain Money (0100294V, NSW/ACT) + + + mountmona + Mountain Money (0100289V, NSW/ACT) + + + mountmonce + Mountain Money - Cash Express (AHG1629, US) + + + mountmonu + Mountain Money (BHG1465, US) + + + mountmonua + Mountain Money (BHG1464, US) + mouseatk Mouse Attack @@ -69008,12 +80481,20 @@ mp_gaxe2 + Golden Axe II (Mega Play) (Rev B) + + + mp_gaxe2a Golden Axe II (Mega Play) mp_gslam Grand Slam (Mega Play) + + mp_gunhe + Gunstar Heroes (Mega Play) + mp_mazin Mazin Wars / Mazin Saga (Mega Play) @@ -69036,16 +80517,28 @@ mp_twc + Tecmo World Cup + + + mp_twcup Tecmo World Cup (Mega Play) mpang Mighty! Pang (Euro 001010) + + mpanga + Mighty! Pang (Asia 001010) + mpangj Mighty! Pang (Japan 001011) + + mpangjd + Mighty! Pang (001011 Japan Phoenix Edition) + mpangr1 Mighty! Pang (Euro 000925) @@ -69062,6 +80555,14 @@ mpatrolw Moon Patrol (Williams) + + mpchoice + Player's Choice (M4C1) + + + mpchoicea + Player's Choice (M3C1) + mplanets Mad Planets @@ -69071,8 +80572,8 @@ Mad Planets (UK) - mpoker - Multi-Poker + mplanuk + Mad Planets (UK) mquake @@ -69084,11 +80585,11 @@ mrblack - Mr. Black + Mr. Black (set 1) mrblack1 - Mr. Black (alternate set) + Mr. Black (set 2) mrblkz80 @@ -69102,6 +80603,14 @@ mrdo Mr. Do! + + mrdobl + Mr. Do! (bootleg) + + + mrdofabr + Mr. Do! (Fabremar bootleg) + mrdofix Mr. Do! (bugfixed) @@ -69136,7 +80645,7 @@ mrdrlr2a - Mr. Driller 2 (Asia, DR22 Ver.A) + Mr. Driller 2 (World, DR22 Ver.A) mrdu @@ -69152,7 +80661,7 @@ mrheli - Mr. HELI no Daibouken + Mr. HELI no Daibouken (Japan) mrjong @@ -69160,7 +80669,11 @@ mrkicker - Mr. Kicker + Mr. Kicker (F-E1-16-010 PCB) + + + mrkickera + Mr. Kicker (SEMICOM-003b PCB) mrkougar @@ -69172,11 +80685,15 @@ mrkougb - Mr. Kougar (bootleg set 1) + Mr. Kougar (German bootleg) mrkougb2 - Mr. Kougar (bootleg set 2) + Mr. Kougar (bootleg) + + + mrkougr2 + Mr. Kougar (earlier) mrlo @@ -69186,6 +80703,14 @@ mrokumei Mahjong Rokumeikan (Japan) + + mroundup + The Round Up + + + mrsdyna + Mrs. Dynamite + mrtlbeat Martial Beat (G*B47 VER. JBA) @@ -69202,6 +80727,18 @@ mrvikingj Mister Viking (315-5041, Japan) + + mrvikngj + Mister Viking (Japan) + + + mrwoo + Mr Woo (0252599, US) + + + ms3 + Multistar 3 + ms4plus Metal Slug 4 Plus (bootleg) @@ -69214,6 +80751,14 @@ ms5plus Metal Slug 5 Plus (bootleg) + + ms72c + Multistar 7 2c + + + msbamby + Miss Bamby + msbingo Miss Bingo @@ -69230,10 +80775,18 @@ mscoutm Mahjong Scout Man (Japan) + + msdisco + Miss Disco (Bingo) + msgogo Mouse Shooter GoGo + + msgunda1 + Mobile Suit Gundam (Japan) + msgundam Mobile Suit Gundam @@ -69242,6 +80795,10 @@ msgundam1 Mobile Suit Gundam (Japan) + + msgundamb + Mobile Suit Gundam (bootleg) + msh Marvel Super Heroes (Euro 951024) @@ -69254,6 +80811,10 @@ mshb Marvel Super Heroes (Brazil 951117) + + mshbr1 + Marvel Super Heroes (Brazil 951024) + msheartb Ms. Pac-Man Heart Burn @@ -69286,6 +80847,10 @@ mshuttle2 Moon Shuttle (US? set 2) + + mshuttlea + Moon Shuttle (US, version A) + mshuttlej Moon Shuttle (Japan set 1) @@ -69294,6 +80859,10 @@ mshuttlej2 Moon Shuttle (Japan set 2) + + mshuttlj + Moon Shuttle (Japan) + mshvsf Marvel Super Heroes Vs. Street Fighter (Euro 970625) @@ -69350,6 +80919,10 @@ msjiken Mahjong Satsujin Jiken (Japan 881017) + + mskitty + Miss Kitty (10216611, NSW/ACT) + mslider Monster Slider (Japan) @@ -69360,43 +80933,111 @@ mslug2 - Metal Slug 2 - Super Vehicle-001/II (NGM-2410)(NGH-2410) + Metal Slug 2 - Super Vehicle-001/II (NGM-2410 ~ NGH-2410) + + + mslug2dg + Metal Slug 2 - Super Vehicle-001/II (Multifunction Hack, 20170509) + + + mslug2fm + Metal Slug 2 - Super Vehicle-001/II (CZXINc FC2 Ver.2 20210415, hack) + + + mslug2t + Metal Slug 2 Turbo (NGM-9410) (hack) mslug3 Metal Slug 3 (NGM-2560) + + mslug3a + Metal Slug 3 (NGM-2560, earlier) + mslug3b6 Metal Slug 6 (Metal Slug 3 bootleg) + + mslug3g + Metal Slug 3 (Multifunction Hack, 20190119) + mslug3h Metal Slug 3 (NGH-2560) + + mslug3n + Metal Slug 3 (not encrypted) + + + mslug3v + Metal Slug 3 (NGH-2560) (Enhanced Violence Version, hack by EEZEZY) + mslug4 Metal Slug 4 (NGM-2630) + + mslug4a + Metal Slug 4 (20th Anniversary) + + + mslug4dg + Metal Slug 4 (Multifunction Hack, 20171225) + mslug4h Metal Slug 4 (NGH-2630) + + mslug4lw + Metal Slug 4 (Last Bullet Remix Hack) + mslug5 Metal Slug 5 (NGM-2680) + + mslug5b + Metal Slug 5 (bootleg) + + + mslug5b2 + Metal Slug 5 (bootleg, set 2) + + + mslug5g + Metal Slug 5 (Multifunction Hack, 20170523) + mslug5h Metal Slug 5 (NGH-2680) + + mslug5w + Metal Slug 5 (New Campaign, 2016-03-10) + + + mslug5wd + Metal Slug 5 (New Campaign) + mslug6 Metal Slug 6 + + mslugdg + Metal Slug (Multifunction Hack, 20180430) + mslugx - Metal Slug X - Super Vehicle-001 (NGM-2500)(NGH-2500) + Metal Slug X - Super Vehicle-001 (NGM-2500 ~ NGH-2500) + + + mslugxsrf + Metal Slug X - Super Vehicle-001 (AzStar Soda Remix FC2 Version, hack) mspacii @@ -69408,15 +81049,59 @@ mspacmab - Ms. Pac-Man (bootleg) + Ms. Pac-Man (bootleg, set 1) + + + mspacmab2 + Ms. Pac-Man (bootleg, set 2) + + + mspacmab3 + Ms. Pac-Man (bootleg, set 3) + + + mspacmab4 + Ms. Pac-Man (bootleg, set 4) mspacman Ms. Pac-Man + + mspacmanbcc + Come-Cocos (Ms. Pac-Man) ('Made in Greece' Tecnausa bootleg) + + + mspacmanbco + Come-Cocos (Ms. Pac-Man) (Cocamatic bootleg) + mspacmanbg - Ms. Pac-Man ('Made in Greece' bootleg) + Ms. Pac-Man ('Made in Greece' bootleg, set 1) + + + mspacmanbg2 + Ms. Pac-Man ('Made in Greece' bootleg, set 2) + + + mspacmanbgd + Miss Pukman ('Made in Greece' Datamat bootleg) + + + mspacmanbhe + Come-Cocos (Ms. Pac-Man) ('Made in Greece' Herle SA bootleg) + + + mspacmanbi + Ms. Pac-Man (Impeuropex bootleg) + + + mspacmanblt + Come-Cocos (Ms. Pac-Man) ('Made in Greece' Triunvi bootleg, set 1) + + + mspacmanblt2 + Come-Cocos (Ms. Pac-Man) ('Made in Greece' Triunvi bootleg, set 2) mspacmancr @@ -69430,6 +81115,14 @@ mspacmbe Ms. Pac-Man (bootleg, encrypted) + + mspacmbmc + Ms. Pac-Man (Marti Colls bootleg) + + + mspacmbn + Ms. Pac-Man (Novatronic bootleg) + mspacmnf Ms. Pac-Man (speedup hack) @@ -69438,17 +81131,25 @@ mspacpls Ms. Pac-Man Plus + + mspactwin + Ms Pac Man Twin (Argentina) + mspuzzle Miss Puzzle - mspuzzleg - Miss Puzzle (Clone of Gumbo) + mspuzzlea + Miss Puzzle (Nudes, less explicit) - mspuzzlen - Miss Puzzle (Nudes) + mspuzzleb + Miss Puzzle (Nudes, more explicit) + + + mspuzzleg + Miss Puzzle (Clone of Gumbo) mstadium @@ -69668,15 +81369,55 @@ mtburn - Money To Burn (Russia) + Money To Burn (English) + + + mtburnr + Money To Burn (Russian) + + + mtchxl5k + MegaTouch XL Super 5000 (Version R5I) + + + mtchxl5ko + MegaTouch XL Super 5000 (Version R5B) + + + mtchxl5ko2 + MegaTouch XL Super 5000 (Version R5E) + + + mtchxl6k + MegaTouch XL 6000 (Version r07) + + + mtchxl6ko + MegaTouch XL 6000 (Version r02) + + + mtchxl6ko4 + MegaTouch XL 6000 (Version r04) + + + mtchxlgld + MegaTouch XL Gold (Version r01) + + + mtchxlgldo + MegaTouch XL Gold (Version r00) + + + mtchxlti + MegaTouch XL Titanium (Version r0?, cracked) mtetrisc Magical Tetris Challenge (981009 Japan) - mtkob2 - Mushiking The King Of Beetle 2K3 2nd + mtjpoker + Merit Touch Joker Poker (9132-00) mtlchamp @@ -69702,6 +81443,14 @@ mtlchampu1 Martial Champion (ver UAD) + + mtlchmpj + Martial Champion (Japan ver JAA) + + + mtouchxl + MegaTouch XL (Version R1, prototype?) + mtrain Magic Train (Ver. 1.31) @@ -69714,6 +81463,10 @@ mtrap Mouse Trap (version 5) + + mtrap2 + Mouse Trap (version 2) + mtrap3 Mouse Trap (version 3) @@ -69722,14 +81475,30 @@ mtrap4 Mouse Trap (version 4) + + mtrap4g + Mouse Trap (German, version 4) + mtrapb Mouse Trap (bootleg) + + mtrapb2 + Mouse Trap (version 4, bootleg) + + + mtwinbee + Magical Twin Bee (ver EAA) + mtwins Mega Twins (World 900619) + + mtwinsb + Twins (Mega Twins bootleg) + mugsmash Mug Smashers @@ -69738,9 +81507,25 @@ multchmp Multi Champ (World, ver. 2.5) + + multchmpa + Multi Champ (World, older) + multchmpk - Multi Champ (Korea) + Multi Champ (Korea, older) + + + multi96 + Multi Game '96 (Italy) + + + multibaby + Multi Baby + + + multidrw + Multidraw - Free Games (0200956V, NSW/ACT) multigam @@ -69770,6 +81555,10 @@ multiwin Multi Win (Ver.0167, encrypted) + + multy + Multy + mundial Mundial 90 @@ -69791,12 +81580,60 @@ Muroge Monaco (bootleg?) - mushi2ea - MushiKing II - The King Of Beetle II ENG (Ver. 2.001) + musclhit + Muscle Ranking Kinniku Banzuke Spray Hitter + + + mushi2eo + Mushiking The King Of Beetles - Mushiking II / III / III+ (Ver. 1.001) (World) + + + mushi2k4 + Mushiking The King Of Beetles 2004 Second (Japan) + + + mushi2k5 + Mushiking The King Of Beetles 2005 First (Japan) + + + mushi2k61 + Mushiking The King Of Beetles 2006 First (Japan) + + + mushi2k62 + Mushiking The King Of Beetles 2006 Second (Japan) mushik2e - MushiKing II - The King Of Beetle II ENG (Ver. 1.001) + Mushiking The King Of Beetles - Mushiking II / III / III+ (Ver. 2.001) (World) + + + mushik2k + Mushiking The King Of Beetles - Mushiking II / III / III+ (Ver. 1.000-) (Korea) + + + mushik4e + Mushiking The King Of Beetles - Mushiking IV / V / VI (World) + + + mushikc + Mushiking The King Of Beetle (2K3 2ND Ver. 1.000-, China) + + + mushike + Mushiking The King Of Beetle (2K3 2ND Ver. 1.003-, World) + + + mushikeo + Mushiking The King Of Beetle (2K3 2ND Ver. 1.002-, World) + + + mushikep + Mushiking The King Of Beetle (MUSHIUSA '04 1ST, Prototype) + + + mushikk + Mushiking The King Of Beetle (2K3 2ND Ver. 1.000-, Korea) mushisam @@ -69828,7 +81665,7 @@ musicsrt - Music Sort (ver 2.02, English) + Music Sort (ver. 2.02) musobana @@ -69836,7 +81673,11 @@ mustache - Mustache Boy + Mustache Boy (Japan) + + + mustachei + Mustache Boy (Italy) mustang @@ -69844,12 +81685,16 @@ mustangb - US AAF Mustang (bootleg) + US AAF Mustang (bootleg, set 1) mustangb2 US AAF Mustang (TAB Austria bootleg) + + mustangb3 + US AAF Mustang (Lettering bootleg) + mustangs US AAF Mustang (25th May. 1990 / Seoul Trading) @@ -69858,6 +81703,10 @@ mutantf Mutant Fighter (World ver EM-5) + + mutantf2 + Mutant Fighter (World ver EM-2) + mutantf3 Mutant Fighter (World ver EM-3) @@ -69866,9 +81715,17 @@ mutantf4 Mutant Fighter (World ver EM-4) + + mutantfa + Mutant Fighter (World Rev 3, EM-4) + + + mutantwarr + Mutant Warrior (Altered Beast - Datsu bootleg) + mutnat - Mutation Nation (NGM-014)(NGH-014) + Mutation Nation (NGM-014 ~ NGH-014) mv1bon @@ -69924,11 +81781,19 @@ mvp - MVP (set 2, US, FD1094 317-0143) + MVP (set 2, US) (FD1094 317-0143) + + + mvpd + MVP (set 2, US) (bootleg of FD1094 317-0143 set) mvpj - MVP (set 1, Japan, FD1094 317-0142) + MVP (set 1, Japan) (FD1094 317-0142) + + + mvpjd + MVP (set 1, Japan) (bootleg of FD1094 317-0142 set) mvsc @@ -69936,7 +81801,11 @@ mvsc2 - Marvel Vs. Capcom 2 New Age of Heroes (JPN, USA, EUR, ASI, AUS) (Rev A) + Marvel Vs. Capcom 2: New Age of Heroes (Export, Korea, Rev A) + + + mvsc2u + Marvel Vs. Capcom 2: New Age of Heroes (USA, Rev A) mvsca @@ -69982,25 +81851,45 @@ mvscur1 Marvel Vs. Capcom: Clash of Super Heroes (USA 971222) + + mvstemp + MVS-TEMP 'SubSystem Ver1.4' (Nazca development board) + mwalk - Michael Jackson's Moonwalker (World, FD1094/8751 317-0159) + Michael Jackson's Moonwalker (World) (FD1094/8751 317-0159) mwalkbl Michael Jackson's Moonwalker (bootleg) + + mwalkbl2 + Michael Jackson's Moonwalker (bootleg) + + + mwalkd + Michael Jackson's Moonwalker (World) (bootleg of FD1094/8751 317-0159 set) + mwalkj - Michael Jackson's Moonwalker (Japan, FD1094/8751 317-0157) + Michael Jackson's Moonwalker (Japan) (FD1094/8751 317-0157) + + + mwalkjd + Michael Jackson's Moonwalker (Japan) (bootleg of FD1094/8751 317-0157 set) mwalku - Michael Jackson's Moonwalker (US, FD1094/8751 317-0158) + Michael Jackson's Moonwalker (US) (FD1094/8751 317-0158) + + + mwalkud + Michael Jackson's Moonwalker (US) (bootleg of FD1094/8751 317-0158 set) mwarr - Mighty Warriors + Mighty Warriors (24/1) mwskins @@ -70014,6 +81903,10 @@ mwskinso Skins Game (1.04) + + mwskinst + Skins Game Tournament Edition + mx5000 MX5000 @@ -70038,17 +81931,41 @@ myhero My Hero (US, not encrypted) + + myherobl + My Hero (bootleg, 315-5132 encryption) + myherok - My Hero (Korea) + Cheongchun Ilbeonji (Korea) myqbert Mello Yello Q*bert + + mystarr + Mystic Arrow (0151009, US) + mystcast - Mystery Castle + Mystery Castle (R02) + + + mystcasta + Mystery Castle (R03) + + + mysteycm + Mystic Eyes - Mr. Cashman (10008111, NSW/ACT) + + + mysteycmu + Mystic Eyes - Mr. Cashman (0251024, US) + + + mystgard + Mystic Garden (0100275V, NSW/ACT) mystic @@ -70070,10 +81987,18 @@ mysticrib Mystic Riders (bootleg?) + + mystmerm + Mystic Mermaid (1J008711, NSW/ACT) + myststar Mystic Star + + myststno + Mysterious Stones - Dr. Kick in Adventure + mystston Mysterious Stones - Dr. John's Adventure @@ -70092,6 +82017,10 @@ mystwarra + Mystic Warriors (ver AAB) + + + mystwarraa Mystic Warriors (ver AAA) @@ -70102,6 +82031,10 @@ mystwarru Mystic Warriors (ver UAA) + + mystwaru + Mystic Warriors (US ver UAA) + nagano98 Nagano Winter Olympics '98 (GX720 EAA) @@ -70112,40 +82045,40 @@ nam1975 - NAM-1975 (NGM-001)(NGH-001) + NAM-1975 (NGM-001 ~ NGH-001) namcostr Namco Stars - nametune - Name That Tune (set 1) - - - nametune2 - Name That Tune (3/23/86) + nameclub + Name Club (J 960315 V1.000) - naname - Naname de Magic! (Japan) + namenayo + Namennayo (Japan) - naomi - Naomi Bios + nametune + Name That Tune (Bally, set 1) - naomi2 - Naomi 2 Bios + nametune2 + Name That Tune (Bally, 3/23/86) - naomigd - Naomi GD-ROM Bios + naname + Naname de Magic! (Japan) narc Narc (rev 7.00) + + narc1 + Narc (rev 1.80) + narc2 Narc (rev 2.00) @@ -70154,6 +82087,14 @@ narc3 Narc (rev 3.20) + + narc4 + Narc (rev 4.00) + + + narc6 + Narc (rev 6.00) + nascar Nascar (4.50) @@ -70222,22 +82163,62 @@ natsuiro Natsuiro Mahjong (Japan) + + naughtya + Naughty Boy (bootleg) + naughtyb Naughty Boy naughtyba - Naughty Boy (bootleg) + Naughty Boy (bootleg, set 1) + + + naughtybb + Naughty Boy (bootleg, set 2) naughtybc Naughty Boy (Cinematronics) + + naughtyc + Naughty Boy (Cinematronics) + + + nautilus + Nautilus + + + navalone + Navarone + navarone Navarone + + nba_500 + NBA v5.00 + + + nba_600 + NBA v6.00 + + + nba_700 + NBA v7.00 + + + nba_801 + NBA v8.01 + + + nba_802 + NBA v8.02 + nbaf_11 NBA Fastbreak (1.1) @@ -70274,61 +82255,137 @@ nbaf_31a NBA Fastbreak (3.1 - S1.0) + + nbagold + SportStation: NBA Showtime NBA on NBC Gold Edition (ver 3.0, Feb 18 2000) / NFL Blitz 2000 Gold Edition + nbahangt - NBA Hangtime (rev L1.1 04/16/96) + NBA Hangtime (ver L1.3 10/10/96) + + + nbahangtl11 + NBA Hangtime (ver L1.1 4/16/96) + + + nbahangtl12 + NBA Hangtime (ver L1.2 8/29/96) + + + nbahangtm11 + NBA Hangtime (ver M1.1 4/16/96) + + + nbahangtm12 + NBA Hangtime (ver M1.2 8/29/96) + + + nbahangtm13 + NBA Hangtime (ver M1.3 10/10/96) nbajam - NBA Jam (rev 3.01 04/07/93) + NBA Jam (rev 3.01 4/07/93) nbajamex - NBA Jam Extreme + NBA Jam Extreme (ver. 1.10I) + + + nbajamexa + NBA Jam Extreme (ver. 1.04) + + + nbajamr1 + NBA Jam (rev 1.00 2/1/93) nbajamr2 - NBA Jam (rev 2.00 02/10/93) + NBA Jam (rev 2.00 2/10/93) + + + nbajamt1 + NBA Jam TE (rev 1.0 01-17-94) + + + nbajamt2 + NBA Jam TE (rev 2.0 01-28-94) + + + nbajamt3 + NBA Jam TE (rev 3.0 03-04-94) nbajamte - NBA Jam TE (rev 4.0 03/23/94) + NBA Jam TE (rev 4.0 3/23/94) nbajamte1 - NBA Jam TE (rev 1.0 01/17/94) + NBA Jam TE (rev 1.00 1/17/94) nbajamte2 - NBA Jam TE (rev 2.0 01/28/94) + NBA Jam TE (rev 2.1 2/06/94) + + + nbajamte2a + NBA Jam TE (rev 2.0 1/28/94) nbajamte3 - NBA Jam TE (rev 3.0 03/04/94) + NBA Jam TE (rev 3.0 3/04/94) + + + nbajamte3a + NBA Jam TE (rev 3.0 2/26/94) + + + nbajamte4 + NBA Jam TE (rev 4.0 3/03/94) nbajamten NBA Jam T.E. Nani Edition (rev 5.2 8/11/95, prototype) + + nbamac + NBA MAC + nbamht - NBA Maximum Hangtime (rev 1.03 06/09/97) + NBA Maximum Hangtime (ver L1.03 06/09/97) nbamht1 NBA Maximum Hangtime (rev 1.0 11/08/96) + + nbamhtl10 + NBA Maximum Hangtime (ver L1.0 11/08/96) + + + nbamhtm10 + NBA Maximum Hangtime (ver M1.0 11/08/96) + + + nbamhtp + NBA Maximum Hangtime (ver L0.9 10/30/96) + nbanfl - NBA Showtime / NFL Blitz 2000 + SportStation: NBA Showtime NBA on NBC (ver 2.1, Sep 22 1999) / NFL Blitz 2000 Gold Edition (ver 1.5, Sep 22 1999) nbapbp - NBA Play By Play + NBA Play By Play (ver JAA) + + + nbapbpa + NBA Play By Play (ver AAB) nbashowt - NBA Showtime: NBA on NBC + NBA Showtime NBA on NBC (ver 2.0, Apr 25 1999) nbbatman @@ -70338,10 +82395,18 @@ nbbatman2bl Ninja Baseball Bat Man II (bootleg) + + nbbatmano + Ninja Baseball Batman (One Key Edition, Hack) + nbbatmanu Ninja Baseball Bat Man (US) + + nblktiger + Neo Black Tiger (Demo) + nc96 New Cherry '96 Special Edition (v3.63, C1 PCB) @@ -70352,12 +82417,48 @@ nc96b - New Cherry '96 Special Edition (v3.54, D PCB) + New Cherry '96 Special Edition (v3.61, C1 PCB) nc96c + New Cherry '96 Special Edition (v3.54, D PCB) + + + nc96d + New Cherry '96 Special Edition (v3.53, D PCB) + + + nc96e + New Cherry '96 Special Edition (v3.40, D PCB) + + + nc96f New Cherry '96 Special Edition (v3.62, DK PCB) + + nc96g + New Cherry '96 (v3.1, B PCB) + + + nc96h + New Cherry '96 (v3.1C, G PCB) + + + nc96i + New Cherry '96 Special Edition (v3.55, C1 PCB) + + + nc96j + New Cherry '96 Special Edition (v3.61, DK PCB) + + + nc96k + New Cherry '96 Special Edition (v3.51, D PCB) + + + nc96l + New Cherry '96 (v3.0, A PCB) + nc96txt New Cherry '96 Special Edition (v1.32 Texas XT, C2 PCB) @@ -70366,6 +82467,14 @@ ncb3 Cherry Bonus III (ver.1.40, set 1) + + ncentury + New Century (Spanish bootleg of Scramble) + + + nclubv2 + Name Club Ver.2 (J 960315 V1.000) + nclubv3 Name Club Ver.3 (J 970723 V1.000) @@ -70402,14 +82511,22 @@ ncv2j Namco Classic Collection Vol.2 (Japan) + + nd8lines + New Draw 8 Lines (Version 2.1) + ndcfboxa - Naomi DIMM Firmware Update for CF-BOX (Rev A) (GDS-0042A) + Naomi DIMM Firmware Update for CF-BOX (4.01) (GDS-0042A) ndxron10 Royal on Ten (Noraut Deluxe hack) + + nebulbee + Nebulous Bee + nebulray Nebulas Ray (World, NR2) @@ -70418,6 +82535,14 @@ nebulrayj Nebulas Ray (Japan, NR1) + + nebulrayp + Nebulas Ray (prototype) + + + nebulryj + Nebulas Ray (Japan) + neckneck Neck-n-Neck (v1.2) @@ -70438,6 +82563,10 @@ nemesisuk Nemesis (World?, ROM version) + + nemesuk + Nemesis (World[Q]) + nemo Nemo (World 901130) @@ -70446,6 +82575,18 @@ nemoj Nemo (Japan 901120) + + nemor1 + Nemo (World 901109) + + + neo2500 + Neo 2500 Demo + + + neo3ddmo + NeoGeo 3D! Demo + neobattl SD Gundam Neo Battling (Japan) @@ -70454,26 +82595,90 @@ neobombe Neo Bomberman + + neocdz + Neo Geo CDZ system + + + neocstlv + Neo CastleVania Demo + neocup98 Neo-Geo Cup '98 - The Road to the Victory + + neodemo + Chaos Demo (Neo Geo) + neodrift Neo Drift Out - New Technology - neogeo - Neo-Geo + neogalag + Galaga Demo (set 1) + + + neogalaga + Galaga Demo (set 2) + + + neomania + Neo Mania neomrdo Neo Mr. Do! + + neonopon + Neo No Panepon (beta) + + + neopong + Neo Pong (ver 1.1) + + + neoponga + Neo Pong (ver 1.0) + + + neoprimo + Primo Demo + + + neoprint + Neo Print (Japan) (T2d) + + + neotet + NeoGeo 2-Player Tetris + + + neothndr + Neo Thunder + + + neotris + NeoTRIS (Free Beta 2, Ver. 202009) + + + neoww2 + WW2 (Demo) - Arcade Development Project + neptunp2 Neptune's Pearls 2 + + neraidou + Neraidoula + + + nerdwild + Nerds Gone Wild (10197311, NSW/ACT) + neruton Mahjong Neruton Haikujiradan (Japan, Rev. B?) @@ -70488,7 +82693,7 @@ netmerc - NetMerc? + Sega NetMerc nettoqc @@ -70502,6 +82707,14 @@ nevada VLC Nevada + + nevadafw + Nevada (French, encrypted) + + + new2001 + New 2001 (Italy, Ver. 200N) + newapunk New Atomic Punk - Global Quest (US) @@ -70548,20 +82761,52 @@ newsin7 - New Sinbad 7 + New Sinbad 7 (set 1) + + + newsin7a + New Sinbad 7 (set 2) newtangl New Tropical Angel + + newufo + New UFO Catcher (standard) + + + newufo_nfl + New UFO Catcher (Team NFL) + + + newufo_sonic + New UFO Catcher (Sonic The Hedgehog) + + + newufo_xmas + New UFO Catcher (Christmas season ROM kit) + newwave New Wave + + newxpang + New Cross Pang + nextfase Next Fase (bootleg of Phoenix) + + nf_08x + No Fear: Dangerous Sports (0.8X) + + + nf_10 + No Fear: Dangerous Sports (1.0) + nf_20 No Fear: Dangerous Sports (2.0) @@ -70598,17 +82843,61 @@ nfb96c New Fruit Bonus '96 Special Edition (v3.62, DK PCB) + + nfb96d + New Fruit Bonus '96 (v3.1, A PCB, set 1) + + + nfb96e + New Fruit Bonus '96 Special Edition (v3.61a, C1 PCB) + + + nfb96f + New Fruit Bonus '96 Special Edition (v3.61a, DK PCB) + + + nfb96g + New Fruit Bonus '96 Special Edition (v3.61, DK PCB) + + + nfb96h + New Fruit Bonus '96 Special Edition (v3.60, DK PCB) + + + nfb96i + New Fruit Bonus '96 Special Edition (v3.53, D PCB) + + + nfb96j + New Fruit Bonus '96 Special Edition (v3.40, D PCB) + + + nfb96k + New Fruit Bonus '96 Special Edition (v97-3.3c, D PCB) + + + nfb96l + New Fruit Bonus '96 (v97-3.1c, B PCB) + + + nfb96m + New Fruit Bonus '96 (v3.1, A PCB, set 2) + nfb96se - New Fruit Bonus '96 Special Edition (bootleg, set 1) + New Fruit Bonus '96 Special Edition (bootleg set 1, v97-3.3c Portuguese) nfb96sea - New Fruit Bonus '96 Special Edition (bootleg, set 2) + New Fruit Bonus '96 Special Edition (bootleg set 2, v97-3.3c English) nfb96seb - New Fruit Bonus '96 Special Edition (bootleg, set 3) + New Fruit Bonus '96 Special Edition (bootleg set 3, v97-3.3c Portuguese) + + + nfb96sec + New Fruit Bonus '96 Special Edition (bootleg set 4, v97-3.3c English) nfb96txt @@ -70628,7 +82917,19 @@ nfm - New Fruit Machine (Ming-Yang Electronic) + New Fruit Machine (Ming-Yang Electronic, vFB02-07A) + + + nfma + New Fruit Machine (Ming-Yang Electronic, vFB02-01A) + + + nfs + Need for Speed - 4 Cab Link (2 Discs) (v1.0.1 Rev B) + + + nfsgt + Need for Speed GT (Hard Drive+2 Discs) (v1.1.0 Rev C) nfsug @@ -70636,23 +82937,39 @@ ngalsumr - Night Gal Summer + Night Gal Summer [BET] (Japan 850702 NGS 0-01) ngbc - Neo-Geo Battle Coliseum + NeoGeo Battle Coliseum + + + ngbcj + NeoGeo Battle Coliseum (Japan) ngdup23a - Naomi DIMM Firmware Updater (Rev A) (GDS-0023A) + Naomi DIMM Firmware Updater (2.13) (GDS-0023A) ngdup23c - Naomi DIMM Firmware Updater (Rev C) (GDS-0023C) + Naomi DIMM Firmware Updater (2.17) (GDS-0023C) ngdup23e - Naomi DIMM Firmware Updater (Rev E) (GDS-0023E) + Naomi DIMM Firmware Updater (3.17) (GDS-0023E) + + + ngem2k + NGEM2K (beta 2006-01-18) + + + ngfrog + Frog Feast (Neo Geo) + + + ngftdemo + NGF Transparency Demo ngg_10 @@ -70690,29 +83007,49 @@ ngtbunny Night Bunny (Japan 840601 MRN 2-10) + + ngtfever + Night Fever + nhidctch New Hidden Catch (World) / New Tul Lin Gu Lim Chat Ki '98 (Korea) (pcb ver 3.02) + + nhomerun + NEW Moero!! Pro Yakyuu Homerun Kyousou + nibbler - Nibbler (rev 9) + Nibbler (rev 9, set 1) nibbler6 Nibbler (rev 6) + + nibbler7 + Nibbler (rev 7) + nibbler8 Nibbler (rev 8) + + nibblera + Nibbler (rev 9, set 2) + nibblero - Nibbler (Olympia - rev 8) + Nibbler (rev 8, Olympia) nibblerp - Nibbler (Pioneer Balloon conversion) + Nibbler (rev 6, Pioneer Balloon conversion) + + + nichisel + DVD Select (Japan) nightgal @@ -70722,13 +83059,17 @@ nightlov Night Love (Japan 860705) + + nightmare + Night Mare (Spain) + nightr20 Night Rider (rev. 20) nightrai - Night Raid (V2.03J) + Night Raid (V2.03J 2001/02/26 17:00) nightrdr @@ -70748,7 +83089,7 @@ ninclown - Ninja Clowns (08/27/91) + Ninja Clowns (27 oct 91) nineball @@ -70762,6 +83103,14 @@ ninjak The Ninja Kids (World) + + ninjak2a + Ninja-Kid II (set 2) + + + ninjak2b + Ninja-Kid II (set 3) + ninjakd2 Ninja-Kid II / NinjaKun Ashura no Shou (set 1) @@ -70774,6 +83123,10 @@ ninjakd2b Ninja-Kid II / NinjaKun Ashura no Shou (set 3, bootleg?) + + ninjakd2c + Ninja-Kid II / NinjaKun Ashura no Shou (set 4) + ninjakj The Ninja Kids (Japan) @@ -70788,27 +83141,35 @@ ninjamas - Ninja Master's - haoh-ninpo-cho + Ninja Master's - Haoh-ninpo-cho + + + ninjamasha + Ninja Master's - haoh-ninpo-cho (Plus) ninjaslt - Ninja Assault (NJA3 Ver. A) + Ninja Assault (World, NJA2 Ver.A) - ninjaslt1 - Ninja Assault (NJA1 Ver. A) + ninjaslta + Ninja Assault (Asia, NJA4 Ver.A) - ninjaslt2 - Ninja Assault (NJA2 Ver. A) + ninjasltj + Ninja Assault (Japan, NJA1 Ver.A) - ninjaslt4 - Ninja Assault (NJA4 Ver. A) + ninjasltu + Ninja Assault (US, NJA3 Ver.A) ninjaw - The Ninja Warriors (World) + The Ninja Warriors (World, later version) + + + ninjaw1 + The Ninja Warriors (World, earlier version) ninjawj @@ -70816,7 +83177,7 @@ ninjawu - The Ninja Warriors (US) + The Ninja Warriors (US, Romstar license) ninjemak @@ -70836,7 +83197,15 @@ nitrobal - Nitro Ball (US) + Nitro Ball (World, set 1) + + + nitrobala + Nitro Ball (World, set 2) + + + nitrobalb + Nitro Ball (World, set 3) niyanpai @@ -70854,6 +83223,10 @@ nkishusp Mahjong Nenrikishu SP (Japan, V250J) + + nkoulit + Gkoulit (encrypted GFX) + nmaster Oni - The Ninja Master (Japan) @@ -70864,7 +83237,7 @@ nmg5a - Multi 5 / New Multi Game 5 (set 2) + Multi 5 / New Multi Game 5 (set 2, censored) nmg5e @@ -70892,7 +83265,15 @@ nndmseala - Nandemo Seal Iinkai (Astro Boy ver.) + Nandemo Seal Iinkai (Astro Boy ver. 1.0?) + + + nndmsealb + Nandemo Seal Iinkai (Astro Boy ver. 1.1) + + + nndmsealc + Nandemo Seal Iinkai (alternate ver 1.0) noahsark @@ -70906,9 +83287,13 @@ nobb Noboranka (Japan, bootleg) + + noboranb + Noboranka (Japan) + nomnlnd - No Man's Land + Sengoku no Jieitai nomnlndg @@ -70978,6 +83363,10 @@ nostk Nostradamus (Korea) + + notechan + Note Chance + nouryoku Nouryoku Koujou Iinkai @@ -70986,21 +83375,49 @@ nouryokup Nouryoku Koujou Iinkai (prototype) + + nov2001u + Nova 2001 (US) + nova2001 Nova 2001 (Japan) + + nova2001h + Nova 2001 (Japan, hack?) + nova2001u Nova 2001 (US) + + noved + Nove Diamante (bootleg) + novoplay Novo Play Multi Card / Club Card npcartv1 - Neo Print V1 (World) + Neo Print V1 (World) (E1a) + + + npcramen + Neo Print - Chicken Ramen (Japan) + + + npfpit + Neo Print - Fuyu Pri Iitoko-dori (Japan) (T4i 3.07) + + + npmillen + Neo Print - Millennium Multi Shot Edition (World) (T4i 3.07) + + + npotogib + Neo Print - Otogibanashi (Japan) (T4i 3.00) nprinces @@ -71018,10 +83435,50 @@ nprincesu Ninja Princess (64k Ver. not encrypted) + + nprincsb + Ninja Princess (128k Ver. bootleg[Q]) + + + nprincso + Ninja Princess (128k Ver.) + + + nprincsu + Ninja Princess (64k Ver. not encrypted) + + + nprobowl + New Pro Bowl + nprsp NeopriSP Retro Collection (Japan) + + npscv1 + Neo Print - Senyou Cassette Ver. 1 (Japan) + + + npskv + Neo Print - Suizokukan Version (Japan) (T4i 2.00) + + + npsprg98 + Neo Print - Spring '98 (T4i 3.07) + + + npsprgv4 + Neo Print - Spring Ver. 4 (Japan) (T4f 1.00) + + + npssr2 + Neo Print Special: Sekai Ryokou 2 (Japan) + + + npusagif + Neo Print - Usagi Frame (Japan) (T4i 3.07) + nrallyx New Rally X @@ -71038,25 +83495,37 @@ ns8lines New Lucky 8 Lines / New Super 8 Lines (W-4) + + ns8linesa + New Lucky 8 Lines / New Super 8 Lines (W-4, Lucky97 HW) + ns8linew New Lucky 8 Lines / New Super 8 Lines (F-5, Witch Bonus) + + ns8linewa + New Lucky 8 Lines / New Super 8 Lines (W-4, Witch Bonus) + nslasher - Night Slashers (Korea Rev 1.3) + Night Slashers (Korea Rev 1.3, DE-0397-0 PCB) nslasherj - Night Slashers (Japan Rev 1.2) + Night Slashers (Japan Rev 1.2, DE-0397-0 PCB) nslashers - Night Slashers (Over Sea Rev 1.2) + Night Slashers (Over Sea Rev 1.2, DE-0397-0 PCB) nslasheru - Night Slashers (US Rev 1.2, HuC6280 Sound CPU) + Night Slashers (US Rev 1.2, DE-0395-1 PCB) + + + nsmb + Neo Super Mario Bros (Demo, v0.01) nsmpoker @@ -71064,16 +83533,12 @@ nspirit - Ninja Spirit + Ninja Spirit (World) nspiritj Saigo no Nindou (Japan) - - nss - Nintendo Super System BIOS - nss_actr Act Raiser (Nintendo Super System) @@ -71110,6 +83575,10 @@ nss_skin Skins Game (Nintendo Super System) + + nss_smas + Super Mario All-Stars (Nintendo Super System) + nss_smw Super Mario World (Nintendo Super System) @@ -71134,10 +83603,18 @@ nstrphnx New Star's Phoenix (Italian speech) + + nstrphnxf + New Star's Phoenix (French speech) + nsub N-Sub (upright) + + nsupertr3 + New Super Triv III + ntcash NtCash @@ -71162,6 +83639,10 @@ numanathj Numan Athletics (Japan) + + numanatj + Numan Athletics (Japan) + number1 Number One @@ -71174,10 +83655,34 @@ numbr10l Number Dieci (Lattine) + + numcrash + Number Crash + nunchaku Nunchackun + + nuretemi + Nurete Mitaino... - Net Idol Hen (Japan) + + + nvs_machrider + Vs. Mach Rider (Endurance Course Version) + + + nvs_machridera + Vs. Mach Rider (Fighting Course Version, set MR4-1 A) + + + nvs_mightybj + Vs. Mighty Bomb Jack (Japan) + + + nvs_platoon + Vs. Platoon + nwarr Night Warriors: Darkstalkers' Revenge (Euro 950316) @@ -71224,19 +83729,35 @@ nzeroteam - New Zero Team + New Zero Team (V33 SYSTEM TYPE_B hardware) + + + nzeroteama + New Zero Team (V33 SYSTEM TYPE_B hardware, China?) obaoba - Oba-Oba + Oba-Oba (set 1) obaoba1 - Oba-Oba (alternate set) + Oba-Oba (set 2) + + + obaobao + Oba-Oba (old hardware) oceanhun - The Ocean Hunter + The Ocean Hunter (Japan) + + + ochaken + Ocha-Ken Hot Medal + + + odeontw + Odeon Twister (v1.4) odeontw2 @@ -71254,9 +83775,21 @@ odisea Odisea Paris-Dakar + + odyssey + Odyssey + oedfight - Oedo Fight (Japan Bloodshed Ver.) + Oedo Fight (Japan, Bloodshed version) + + + oedfighta + Oedo Fight (Japan, Bloodless version) + + + offensiv + Offensive (Spanish bootleg of Scramble) officeye @@ -71264,12 +83797,20 @@ offroad - Ironman Ivan Stewart's Super Off-Road + Ironman Ivan Stewart's Super Off-Road (rev 4) + + + offroad3 + Ironman Ivan Stewart's Super Off-Road (rev 3) offroadc Off Road Challenge (v1.63) + + offroadc0 + Off Road Challenge (v1.00) + offroadc1 Off Road Challenge (v1.10) @@ -71292,12 +83833,16 @@ offroadt2p - Ironman Ivan Stewart's Super Off-Road Track-Pak (2 Players) + Ironman Ivan Stewart's Super Off-Road Track-Pak (rev 4, 2 Players) offrthnd Offroad Thunder + + offtwalc + Off the Wall (2-player cocktail) + offtwall Off the Wall (2/3-player upright) @@ -71340,7 +83885,15 @@ ojankoc - Ojanko Club (Japan) + Ojanko Club (Japan, Program Ver. 1.3, set 1) + + + ojankoca + Ojanko Club (Japan, Program Ver. 1.2) + + + ojankocb + Ojanko Club (Japan, Program Ver. 1.3, set 2) ojankohs @@ -71360,43 +83913,87 @@ olds - Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 101, Korean Board) + Oriental Legend Super / Xiyou Shi E Chuan Super (ver. 101, Korean Board) olds100 - Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 100, set 1) + Oriental Legend Special / Xiyou Shi E Chuan Super (ver. 100, set 1) olds100a - Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 100, set 2) + Oriental Legend Special / Xiyou Shi E Chuan Super (ver. 100, set 2) olds103t - Oriental Legend Special / Xi You Shi E Zhuan Super (ver. 103, China, Tencent) (unprotected) + Xiyou Shi E Chuan Super (ver. 103, China, Tencent) (unprotected) + + + oldsdsgl + Oriental Legend Special - Da Sheng Gui Lai (Hack) + + + oldsmx + Oriental Legend Special - Meng Xun Ling Shan (Hack) oldsplus - Oriental Legend Special Plus / Xi You Shi E Zhuan Super Plus + Oriental Legend 2 (Korea) / Xiyou Shi E Chuan Qunmoluanwu (World, China, Japan, Hong Kong, Taiwan) (ver. 205) [Oriental Ex] + + + oldsplus203 + Oriental Legend 2 (Korea) / Xiyou Shi E Chuan Qunmoluanwu (World, China, Japan, Hong Kong, Taiwan) (ver. 203) [Oriental Ex] + + + oldsplusnr + Xi You Shi E Zhuan Super Plus (Qun Mo Luan Wu New 208 Revision) + + + oldspluso + Oriental Legend 2 (One Key Edition, Hack) olibochu Oli-Boo-Chu + + olibug + Oli Bug (Jump Bug bootleg) + oligam Olympian Games (Russia) + + olihockey + Olimpic Hockey (EM Bubble Hockey, set 1) + + + olihockeya + Olimpic Hockey (EM Bubble Hockey, set 2) + ollie Ollie King (GDX-0007) + + olmandingc + Olivmandingo (Spanish bootleg of Mandinga on Galaxian hardware, set 2) + + + olmandingo + Olivmandingo (Spanish bootleg of Mandinga on Galaxian hardware, set 1) + + + olymp + Olympus (Z Games, version 10) + olympic Olympic Games olympus - Olympus + Olympus (Juegos Populares) olysoc92 @@ -71406,10 +84003,22 @@ olysoc92a Olympic Soccer '92 (set 2) + + olysoc92b + Olympic Soccer '92 (set 3) + omega Omega + + omegaa + Omega (earlier) + + + omegab + Omega (bootleg?) + omegaf Omega Fighter @@ -71438,6 +84047,10 @@ omotesnd Omotesandou (Japan 890215) + + one4all + One For All (0101503V, New Zealand) + oneshot One Shot One Kill @@ -71450,18 +84063,30 @@ onetwoe One + Two (earlier) + + onna34ra + Onna Sansirou - Typhoon Gal (bootleg) + onna34ro - Onna Sansirou - Typhoon Gal (set 1) + Onna Sanshirou - Typhoon Gal onna34roa - Onna Sansirou - Typhoon Gal (set 2) + Onna Sanshirou - Typhoon Gal (bootleg) + + + ooparts + OOPArts (prototype, joystick hack) opaopa Opa Opa (MC-8123, 317-0042) + + opaopan + Opa Opa (Rev A, unprotected) + opengolf Konami's Open Golf Championship (ver EAE) @@ -71474,17 +84099,25 @@ openice 2 On 2 Open Ice Challenge (rev 1.21) + + openicea + 2 On 2 Open Ice Challenge (rev 1.2A) + openmj Open Mahjong [BET] (Japan) + + opsesam + Open Sesame (0351309, US) + opthund Operation: Thunder optiger - Operation Tiger + Operation Tiger (Ver 2.14 O) opwolf @@ -71494,6 +84127,10 @@ opwolf3 Operation Wolf 3 (World) + + opwolf3j + Operation Wolf 3 (Japan) + opwolf3u Operation Wolf 3 (US) @@ -71510,6 +84147,14 @@ opwolfj Operation Wolf (Japan) + + opwolfjsc + Operation Wolf (Japan, SC) + + + opwolfp + Operation Wolf (Japan, prototype) + opwolfu Operation Wolf (US) @@ -71526,6 +84171,10 @@ orbatak Orbatak (prototype) + + orbeaut + Oriental Beauty (10213511, NSW/ACT) + orbit Orbit @@ -71534,6 +84183,10 @@ orbit1 Orbit 1 + + orbite + Orbite (prototype) + orbitor1 Orbitor 1 @@ -71546,45 +84199,113 @@ orbs Orbs (10/7/94 prototype?) + + orchidms + Orchid Mist (0200849V, NSW/ACT) + + + orchidmsa + Orchid Mist (0100849V, NSW/ACT) + + + orchidmsnz + Orchid Mist (0101241V, New Zealand) + ordyne - Ordyne (Japan, English Version) + Ordyne (World) ordynej Ordyne (Japan) + + ordyneje + Ordyne (Japan, English Version) + + + orius + Orius (ver UAA) + orleg2 - Oriental Legend 2 (V104, China) + Oriental Legend 2 (V104, Oversea) + + + orleg2_101 + Oriental Legend 2 (V101, Oversea) + + + orleg2_101cn + Xiyou Shi E Chuan 2 (V101, China) + + + orleg2_101jp + Saiyuu Shakuyakuden 2 (V101, Japan) + + + orleg2_103 + Oriental Legend 2 (V103, Oversea) + + + orleg2_103cn + Xiyou Shi E Chuan 2 (V103, China) + + + orleg2_103jp + Saiyuu Shakuyakuden 2 (V103, Japan) - orleg2o - Oriental Legend 2 (V103, China) + orleg2_104cn + Xiyou Shi E Chuan 2 (V104, China) + + + orleg2_104jp + Saiyuu Shakuyakuden 2 (V104, Japan) orlegend - Oriental Legend / Xi You Shi E Zhuan (ver. 126) + Oriental Legend / Xiyou Shi E Chuan (ver. 126) orlegend105k - Oriental Legend / Xi You Shi E Zhuan (ver. 105, Korean Board) + Oriental Legend / Xiyou Shi E Chuan (ver. 105, Korean Board) + + + orlegend105t + Oriental Legend / Xiyou Shi E Chuan (ver. 105, Taiwanese Board) orlegend111c - Oriental Legend / Xi You Shi E Zhuan (ver. 111, Chinese Board) + Oriental Legend / Xiyou Shi E Chuan (ver. 111, Chinese Board) + + + orlegend111k + Oriental Legend / Xiyou Shi E Chuan (ver. 111, Korean Board) + + + orlegend111t + Oriental Legend / Xiyou Shi E Chuan (ver. 111, Taiwanese Board) orlegendc - Oriental Legend / Xi You Shi E Zhuan (ver. 112, Chinese Board) + Oriental Legend / Xiyou Shi E Chuan (ver. 112, Chinese Board) orlegendca - Oriental Legend / Xi You Shi E Zhuan (ver. ???, Chinese Board) + Oriental Legend / Xiyou Shi E Chuan (ver. ???, Chinese Board) orlegende - Oriental Legend / Xi You Shi E Zhuan (ver. 112) + Oriental Legend / Xiyou Shi E Chuan (ver. 112) + + + orlegndc + Oriental Legend - Xi Yo Gi Shi Re Zuang (ver. 112, Chinese Board) + + + orlegnde + Oriental Legend - Xi Yo Gi Shi Re Zuang (ver. 112) orunners @@ -71602,6 +84323,22 @@ oscar Psycho-Nics Oscar (World revision 0) + + oscara5 + Oscar (0200348V, NSW/ACT) + + + oscara5a + Oscar (0100348V, NSW/ACT) + + + oscarj + Psycho-Nics Oscar (Japan revision 2) + + + oscarj0 + Psycho-Nics Oscar (Japan revision 0) + oscarj1 Psycho-Nics Oscar (Japan revision 1) @@ -71624,19 +84361,19 @@ otchart - Off The Charts (Russia) + Off The Charts (Russian) otenamhf - Otenami Haiken Final (V2.07JC) + Otenami Haiken Final (V2.07JC 2005/04/20 15:36) otenamih - Otenami Haiken (V2.04J) + Otenami Haiken (V2.04J 1999/02/01 18:00:00) otenki - Otenki Kororin (V2.01J) + Otenki Kororin (V2.01J 2001/07/02 10:00) othello @@ -71652,19 +84389,35 @@ othunder - Operation Thunderbolt (World) + Operation Thunderbolt (World, rev 1) othunderj Operation Thunderbolt (Japan) + + othunderjsc + Operation Thunderbolt (Japan, SC) + + + othundero + Operation Thunderbolt (World) + othunderu - Operation Thunderbolt (US) + Operation Thunderbolt (US, rev 1) othunderuo - Operation Thunderbolt (US, older) + Operation Thunderbolt (US) + + + othundu + Operation Thunderbolt (US) + + + otomedius + Otomedius (ver GGG:J:A:A:2008041801) otonano @@ -71672,20 +84425,56 @@ otrigger - OutTrigger (JPN, USA, EXP, KOR, AUS) + OutTrigger + + + ottopz + Otto Project PZ (hack) otwalls Off the Wall (Sente) + + ougonhai + Mahjong Ougon no Hai + + + ougonhaib1 + Mahjong Ougon no Hai (bootleg set 1) + + + ougonhaib2 + Mahjong Ougon no Hai (bootleg set 2) + + + ougonhaib3 + Mahjong Ougon no Hai (bootleg set 3) + + + outbackj + Outback Jack (20195211, NSW/ACT) + + + outfxesj + Outfoxies (Japan) + outfxies The Outfoxies (World, OU2) + + outfxiesa + The Outfoxies (Korea?) + outfxiesj The Outfoxies (Japan, OU1) + + outfxiesja + The Outfoxies (Japan, OU1, alternate GFX ROMs) + outlaw Outlaw [TTL] @@ -71696,16 +84485,36 @@ outr2 - Out Run 2 (Rev A) (GDX-0004A) + OutRun 2 (Rev A) (GDX-0004A) + + + outr2sdx + OutRun 2 SP SDX outr2st - Out Run 2 Special Tours (Rev A) (GDX-0014A) + OutRun 2 Special Tours (Rev A) (GDX-0014A) + + + outr2stj + OutRun 2 Special Tours (Japan, Rev A) (GDX-0011A) + + + outr2stjo + OutRun 2 Special Tours (Japan) (GDX-0011) + + + outr2sto + OutRun 2 Special Tours (GDX-0014) outrun Out Run (sitdown/upright, Rev B) + + outruna + Out Run (set 2) + outrunb Out Run (bootleg) @@ -71718,9 +84527,29 @@ outrundxa Out Run (deluxe sitdown earlier version) + + outrundxeh + Out Run (deluxe sitdown) (Enhanced Edition v2.0.3) + + + outrundxeha + Out Run (deluxe sitdown) (Enhanced Edition v1.0.3) + outrundxj - Out Run (Japan, deluxe sitdown, FD1089A 317-0019) + Out Run (Japan, deluxe sitdown) (FD1089A 317-0019) + + + outruneh + Out Run (sitdown/upright, Rev B) (Enhanced Edition v2.0.3) + + + outruneha + Out Run (sitdown/upright, Rev B) (Enhanced Edition v1.1.0) + + + outrunehb + Out Run (sitdown/upright, Rev B) (Enhanced Edition v2.0.2) outrunra @@ -71742,13 +84571,25 @@ outzonec Out Zone (oldest set) + + outzonecv + Out Zone (Zero Wing TP-015 PCB conversion) + outzoneh Out Zone (harder) overdriv - Over Drive + Over Drive (set 1) + + + overdriva + Over Drive (set 2) + + + overdrivb + Over Drive (set 3) overrev @@ -71758,10 +84599,22 @@ overrevb Over Rev (Model 2B, Revision B) + + overrevba + Over Rev (Model 2B, Revision A) + overtop Over Top + + owlcap + Owl Capone (10008711, NSW/ACT, Show Program) + + + ozmawar2 + Ozma Wars (set 2) + ozmawars Ozma Wars (set 1) @@ -71770,6 +84623,10 @@ ozmawars2 Ozma Wars (set 2) + + ozmawarsmr + Ozma Wars (Model Racing bootleg) + ozon1 Ozon I @@ -71780,7 +84637,15 @@ p47aces - P-47 Aces + P-47 Aces (ver 1.1) + + + p47acesa + P-47 Aces (ver 1.0) + + + p47b + P-47 - The Freedom Fighter (World, bootleg) p47j @@ -71792,27 +84657,43 @@ p911 - Police 911 (ver UAD) + Police 911 (ver AAE) p9112 - Police 911 2 (ver A) + Police 911 2 (VER. UAA:B) + + + p911ac + Police 911 (ver AAC) + + + p911ea + Police 24/7 (ver EAD, alt) - p911e - Police 24/7 (ver EAA) + p911ed + Police 24/7 (ver EAD) p911j - Keisatsukan Shinjuku 24ji (ver JAC) + Keisatsukan Shinjuku 24ji (ver JAE) + + + p911k + Police 911 (ver KAE) p911kc Police 911 (ver KAC) - p911uc - Police 911 (ver UAC) + p911ud + Police 24/7 (ver UAD) + + + pac90 + Pac-Man (bootleg on World Cup '90 hardware) pacapp @@ -71826,9 +84707,21 @@ pacappsp Paca Paca Passion Special (Japan, PSP1/VER.A) + + paccarn + Pac-Carnival + + + paceight + Pac-Eight + pacgal - Pac-Gal + Pac-Gal (set 1) + + + pacgal2 + Pac-Gal (set 2) pacheart @@ -71842,10 +84735,26 @@ pachiten Medal Mahjong Pachi-Slot Tengoku [BET] (Japan) + + packbang + Pack'n Bang Bang (prototype) + + + packetman + Packetman (bootleg) + pacland Pac-Land (World) + + pacland2 + Pac-Land (set 2) + + + pacland3 + Pac-Land (set 3) + paclandj Pac-Land (Japan new) @@ -71862,6 +84771,10 @@ paclandm Pac-Land (Midway) + + paclandm2 + Pac-Land (Bally-Midway) + paclandp Pac-Land (United Amusements PC Engine) @@ -71872,16 +84785,36 @@ pacmanbl - Pac-Man (Galaxian hardware, set 1) + Pac-Man (bootleg on Galaxian hardware, set 1) pacmanbla - Pac-Man (Galaxian hardware, set 2) + Pac-Man (bootleg on Galaxian hardware, set 2) + + + pacmanblb + Pac-Man (bootleg on Moon Alien 'AL-10A1' hardware) + + + pacmanblc + Pac-Man (Calfesa, Spanish bootleg on Galaxian hardware) + + + pacmanblci + Pac-Man (Cirsa, Spanish bootleg on Galaxian hardware) + + + pacmanblv + Pac-Man (Video Dens, Spanish bootleg on Galaxian hardware) pacmanf Pac-Man (Midway, speedup hack) + + pacmanfm + Pac Man (FAMARE S.A. bootleg of Puck Man) + pacmania Pac-Mania @@ -71890,10 +84823,46 @@ pacmaniaj Pac-Mania (Japan) + + pacmaniao + Pac-Mania (111187 sound program) + + + pacmanij + Pac-Mania (Japan) + + + pacmanjpm + Pac-Man (JPM bootleg) + + + pacmanpe + Come Come (Petaco SA bootleg of Puck Man) + + + pacmanso + Pac-Man (SegaSA / Sonic) + pacmansp Puck Man (Spanish, 'Made in Greece' bootleg) + + pacmanug + Pac Man (U.Games bootleg of Puck Man) + + + pacmanvg + Pac-Man (bootleg, Video Game SA) + + + pacmball + Pacman BALL (PMB2 Ver.A.) + + + pacminer + Pac Manic Miner Man + pacmod Pac-Man (Midway, harder) @@ -71912,7 +84881,11 @@ pacominv - Pacom Invader + Pacom Invader (set 1) + + + pacominva + Pacom Invader (set 2) pacplus @@ -71934,6 +84907,10 @@ paddlema Paddle Mania + + painter + Painter (hack of Crush Roller) + paintlad Painted Lady (Splash) (Ver. 1.3 US) @@ -71952,7 +84929,7 @@ pairsa - Pairs (09/07/94) + Pairs (V1, 09/07/94) pairsnb @@ -71972,12 +84949,24 @@ palamed + Palamedes (US) + + + palamedj Palamedes (Japan) + + pandart + Panther Darts + pandoras Pandora's Palace + + pandpays + Panda Pays - Mr. Cashman (0151109, US) + pang Pang (World) @@ -71988,7 +84977,23 @@ pang3b - Pang! 3 (bootleg) + Pang! 3 (bootleg, set 1) + + + pang3b2 + Pang! 3 (bootleg, set 2) + + + pang3b3 + Pang! 3 (bootleg, set 3) + + + pang3b4 + Pang! 3 (bootleg set 4, 950511 Euro) + + + pang3b5 + Pang! 3 (bootleg set 5, 950601 Euro) pang3j @@ -71998,6 +85003,10 @@ pang3r1 Pang! 3 (Euro 950511) + + pang3r1a + Pang! 3 (950511 Euro, alt) + pangb Pang (bootleg, set 1) @@ -72010,10 +85019,30 @@ pangba Pang (bootleg, set 3) + + pangbb + Pang (bootleg, set 5) + + + pangbc + Pang (bootleg, set 7) + pangbold Pang (bootleg, set 2) + + pangbold2 + Pang (bootleg, set 5) + + + pangbold3 + Pang (bootleg, set 6) + + + pangbp + Pang (bootleg, set 6) + pangofun Pango Fun (Italy) @@ -72022,6 +85051,10 @@ pangpang Pang Pang + + pangpomm + Pang Poms (Mitchell) + pangpoms Pang Pom's @@ -72030,6 +85063,10 @@ pangpomsm Pang Pom's (Mitchell) + + pangpomsn + Pang Pom's (Nova) + panic Space Panic (version E) @@ -72056,11 +85093,15 @@ panicprk - Panic Park (PNP2 Ver. A) + Panic Park (World, PNP2 Ver. A) panicprkj - Panic Park (PNP1 Ver. B) + Panic Park (Japan, PNP1 Ver. B, set 1) + + + panicprkj2 + Panic Park (Japan, PNP1 Ver. B, set 2) panicr @@ -72080,12 +85121,20 @@ panther - Panther + Panther (bootleg?) panthera Panthera + + pantmag + Panther Magic (0101046V, NSW/ACT) + + + pantmaga + Panther Magic (0100716V, NSW/ACT) + panzer Panzer (bootleg of Spectar) @@ -72094,6 +85143,10 @@ paperboy Paperboy (rev 3) + + paperboyp + Paperboy (prototype) + paperboyr1 Paperboy (rev 1) @@ -72102,6 +85155,14 @@ paperboyr2 Paperboy (rev 2) + + paperbr1 + Paperboy (rev 1) + + + paperbr2 + Paperboy (rev 2) + papillon Papillon @@ -72114,13 +85175,25 @@ para2dx Paradise 2 Deluxe + + paradar + Paradar + paradice Paradice (Dutch, Game Card 95-750-615) paradise - Paradise + Paradise (set 1) + + + paradisea + Paradise (set 2) + + + paradisee + Paradise (Escape) paradlx @@ -72136,7 +85209,19 @@ parentj - Parent Jack + Parent Jack (Japan) + + + parislgt + Paris Lights (30002611, NSW/ACT) + + + parislgtu + Paris Lights - Jackpot Carnival (0251031, US) + + + parodisj + Parodius DA! (Japan) parodius @@ -72178,6 +85263,18 @@ party Party + + partygrs + Party Gras (AHG1567, US) + + + partygrsa + Party Gras (BHG1284, US) + + + partygrsb + Party Gras (AHG1568, US) + pasha2 Pasha Pasha 2 @@ -72192,32 +85289,64 @@ passsht - Passing Shot (World, 2 Players, FD1094 317-0080) + Passing Shot (World, 2 Players) (FD1094 317-0080) passsht16a - Passing Shot (Japan, 4 Players, System 16A, FD1094 317-0071) + Passing Shot (Japan, 4 Players, System 16A) (FD1094 317-0071) passshta - Passing Shot (World, 4 Players, FD1094 317-0074) + Passing Shot (World, 4 Players) (FD1094 317-0074) + + + passshtad + Passing Shot (World, 4 Players) (bootleg of FD1094 317-0074 set) passshtb Passing Shot (2 Players) (bootleg) + + passshtd + Passing Shot (World, 2 Players) (bootleg of FD1094 317-0080 set) + passshtj - Passing Shot (Japan, 4 Players, FD1094 317-0070) + Passing Shot (Japan, 4 Players) (FD1094 317-0070) + + + passshtjd + Passing Shot (Japan, 4 Players) (bootleg of FD1094 317-0070 set) pastelg Pastel Gal (Japan 851224) + + pastelgl + Pastel Gal (Japan 851224) + + + pastelis + Pastel Island (Japan, prototype) + + + patapata + Pata Pata Panic + patimono Mahjong Pachinko Monogatari (Japan) + + patocar + Hashire Patrol Car (J 990326 V1.000) + + + pb_l1 + Pin-Bot (L-1) + pb_l2 Pin-Bot (L-2) @@ -72230,13 +85359,21 @@ pb_l5 Pin-Bot (L-5) + + pb_p4 + Pin-Bot (P-4) + + + pbactio2 + Pinball Action (set 2) + pbaction Pinball Action (set 1) pbaction2 - Pinball Action (set 2) + Pinball Action (set 2, encrypted) pbaction3 @@ -72247,8 +85384,8 @@ Pinball Action (set 4, encrypted) - pbaction5 - Pinball Action (set 5, encrypted) + pbactiont + Pinball Action (Tecfri license) pballoon @@ -72270,22 +85407,62 @@ pbillian Prebillian + + pbillianb + Prebillian (bootleg) + pbillrd Perfect Billiard + + pbillrdbl + Perfect Billiard (bootleg) + pbillrds Perfect Billiard (MC-8123, 317-0030) + + pbillrdsa + Perfect Billiard (MC-8123, 317-5008) + pblbeach Pebble Beach - The Great Shot (JUE 950913 V0.990) + + pbobbl2j + Puzzle Bobble 2 (Japan) + pbobbl2n Puzzle Bobble 2 / Bust-A-Move Again (Neo-Geo) + + pbobbl2u + Bust-A-Move Again (US) + + + pbobbl2x + Puzzle Bobble 2X (Japan) + + + pbobbl3j + Puzzle Bobble 3 (Japan) + + + pbobbl3u + Puzzle Bobble 3 (US) + + + pbobbl4j + Puzzle Bobble 4 (Japan) + + + pbobbl4u + Puzzle Bobble 4 (US) + pbobble Puzzle Bobble (Japan, B-System) @@ -72336,22 +85513,30 @@ pbobblen - Puzzle Bobble / Bust-A-Move (Neo-Geo) (NGM-083) + Puzzle Bobble / Bust-A-Move (Neo-Geo, NGM-083) pbobblenb - Puzzle Bobble / Bust-A-Move (Neo-Geo) (bootleg) + Puzzle Bobble / Bust-A-Move (Neo-Geo, bootleg) + + + pbobblna + Puzzle Bobble / Bust-A-Move (Neo-Geo) (set 2) pbss330 - Pit Boss Superstar III 30 (9233-00-01) + Pit Boss Superstar III 30 (9233-00-01, Standard version) + + + pbss330ca + Pit Boss Superstar III 30 (9233-00-06, California version) pbst30 Pit Boss Supertouch 30 (9234-10-01) - pbst30b + pbst30a Pit Boss Supertouch 30 (9234-00-01) @@ -72554,6 +85739,10 @@ pc_trjan Trojan (PlayChoice-10) + + pc_ttoon + Tiny Toon Adventures (prototype) (PlayChoice-10) + pc_vball Volley Ball (PlayChoice-10) @@ -72574,6 +85763,22 @@ pc_ynoid Yo! Noid (PlayChoice-10) + + pcbydem + Player's Choice - By Demand (10223111, NSW/ACT) + + + pcfavor + Player's Choice - Favourites (20177311, NSW/ACT) + + + pcgold + Player's Choice - Gold Edition (30291411, New Zealand) + + + pckobe99 + Print Club 2 Kobe Luminaire '99 (Print Club Custom 3) (J 991203 V1.000) + pcktgal Pocket Gal (Japan) @@ -72588,27 +85793,39 @@ pcktgalb - Pocket Gal (bootleg) + Pocket Gal (Yada East bootleg) - pclb297w - Print Club 2 '97 Winter Ver (J 971017 V1.100) + pclb2elk + Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000) - pclb298a - Print Club 2 '98 Autumn Ver (J 980827 V1.000) + pclove + Print Club LoveLove (J 970421 V1.000) - pclb2elk - Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000) + pclove2 + Print Club LoveLove Ver 2 (J 970825 V1.000) + + + pclub + Print Club (World) pclub2 Print Club 2 (U 970921 V1.000) - pclub298 - Print Club 2 '98 Spring Ver (J 971017 V1.100) + pclub26w + Print Club 2 Vol. 6 Winter (J 961210 V1.000) + + + pclub26wa + Print Club 2 Vol. 6 Winter (J 970121 V1.200) + + + pclub27s + Print Club 2 Vol. 7 Spring (J 970313 V1.100) pclub2fc @@ -72618,10 +85835,22 @@ pclub2kc Print Club Kome Kome Club (J 970203 V1.000) + + pclub2pe + Print Club 2 Pepsiman (J 970618 V1.100) + + + pclub2pf + Print Club 2 Puffy (J V1.100) + pclub2v3 Print Club 2 Vol. 3 (U 990310 V1.000) + + pclub2wb + Print Club 2 Warner Bros (J 970228 V1.000) + pclubj Print Club (Japan Vol.1) @@ -72650,6 +85879,10 @@ pclubpok Print Club Pokemon B (U 991126 V1.000) + + pclubyo2 + Print Club Yoshimoto V2 (J 970422 V1.100) + pclubys Puzzle Club (Yun Sung, set 1) @@ -72659,2927 +85892,5183 @@ Puzzle Club (Yun Sung, set 2) - pcnfrk3m - Percussion Freaks 3rd Mix (G*A23 VER. KAA) + pcmostw + Player's Choice - Most Wanted (20234911, NSW/ACT) - pdrift - Power Drift (World, Rev A) + pcnfrk + Percussion Freaks (GQ881 VER. EAB) - pdrifta - Power Drift (World) + pcnfrk10m + Percussion Freaks 10th Mix eAmusement (G*D40 VER. ACA) - pdrifte - Power Drift (World, Earlier) + pcnfrk2m + Percussion Freaks 2nd Mix (GE912 VER. AAA) - pdriftj - Power Drift (Japan) + pcnfrk2mk + Percussion Freaks 2nd Mix (GE912 VER. KAA) - pebe0014 - Player's Edge Plus (BE0014) Blackjack + pcnfrk3m + Percussion Freaks 3rd Mix (G*A23 VER. AAA) - pecmen - Mr. & Mrs. Pec-Men + pcnfrk3mk + Percussion Freaks 3rd Mix (G*A23 VER. KAA) - peekaboo - Peek-a-Boo! + pcnfrk4m + Percussion Freaks 4th Mix (G*A25 VER. AAA) - peepshow - Nozokimeguri Mahjong Peep Show (Japan 890404) + pcnfrk4mk + Percussion Freaks 4th Mix (G*A25 VER. KAA) - peggle - Peggle (Joystick, v1.0) + pcnfrk5m + Percussion Freaks 5th Mix (G*B05 VER. AAA) - pegglet - Peggle (Trackball, v1.0) + pcnfrk5mk + Percussion Freaks 5th Mix (G*B05 VER. KAA) - peip0041 - Player's Edge Plus (IP0041) Double Deuces Wild Poker - French + pcnfrk6m + Percussion Freaks 6th Mix (G*B16 VER. AAA) - peip0074 - Player's Edge Plus (IP0074) Joker Poker - French + pcnfrk7m + Percussion Freaks 7th Mix (G*C07 VER. AAA) - peip0079 - Player's Edge Plus (IP0079) Standard Draw Poker - French + pcnfrk8m + Percussion Freaks 8th Mix (G*C38 VER. AAA) - peke1012 - Player's Edge Plus (KE1012) Keno + pcnfrk9m + Percussion Freaks 9th Mix eAmusement (G*D09 VER. ABA) - peke1013 - Player's Edge Plus (KE1013) Keno + pcnfrka + Percussion Freaks (GQ881 VER. AAB) - penalty - Penalty (Bingo) + pcnfrkk + Percussion Freaks (GQ881 VER. KAB) - penbros - Penguin Brothers (Japan) + pcockmag + Peacock Magic (1J008811, NSW/ACT) - penfan - Penfan Girls - Step1. Mild Mind (set 1) + pcockmagu + Peacock Magic (0151352, US) - penfana - Penfan Girls - Step1. Mild Mind (set 2) + pcorig + Player's Choice - Original (30143011, NSW/ACT) - pengadvb - Penguin Adventure (bootleg of MSX version) + pcplat + Player's Choice - Platinum (20282111, New Zealand) - pengo - Pengo (set 1 rev c) + pcpooh2 + Print Club Winnie-the-Pooh Vol. 2 (J 971218 V1.000) - pengo2 - Pengo (set 2) + pcpooh3 + Print Club Winnie-the-Pooh Vol. 3 (J 980406 V1.000) - pengo2u - Pengo (set 2 not encrypted) + pdrift + Power Drift (World, Rev A) - pengo3u - Pengo (set 3 not encrypted) + pdrifta + Power Drift (World) - pengo4 - Pengo (set 4) + pdrifte + Power Drift (World, Earlier) - pengob - Pengo (bootleg) + pdriftj + Power Drift (Japan) - penky - Penky + pdriftl + Power Drift - Link Version (Japan, Rev A) - penta - Penta + peaflut + Peacock Flutter (02J00011, NSW/ACT) - pentacup - Pentacup (rev. 1) + peafluta + Peacock Flutter (01J00011, NSW/ACT) - pentacup2 - Pentacup (rev. 2) + pebe0014 + Player's Edge Plus (BE0014) Blackjack - pepp0002 - Player's Edge Plus (PP0002) Standard Draw Poker + pebe0014a + Player's Edge Plus (BE0014) Blackjack (International English/Spanish) - pepp0002a - Player's Edge Plus (PP0002) Standard Draw Poker (International) + pecmen + Mr. & Mrs. Pec-Men - pepp0008 - Player's Edge Plus (PP0008) Standard Draw Poker + peekaboo + Peek-a-Boo! (Japan, ver. 1.1) - pepp0010 - Player's Edge Plus (PP0010) Standard Draw Poker + peekaboou + Peek-a-Boo! (North America, ver 1.0) - pepp0014 - Player's Edge Plus (PP0014) Standard Draw Poker (International) + peepshow + Nozokimeguri Mahjong Peep Show (Japan 890404) - pepp0014a - Player's Edge Plus (PP0014) Standard Draw Poker + peggle + Peggle (Joystick, v1.0) - pepp0023 - Player's Edge Plus (PP0023) 10's or Better + pegglet + Peggle (Trackball, v1.0) - pepp0040 - Player's Edge Plus (PP0040) Standard Draw Poker + peip0028 + Player's Edge Plus (IP0028) Joker Poker - French - pepp0041 - Player's Edge Plus (PP0041) Standard Draw Poker + peip0029 + Player's Edge Plus (IP0029) Joker Poker - French - pepp0043 - Player's Edge Plus (PP0043) 10's or Better + peip0031 + Player's Edge Plus (IP0031) Standard Draw Poker - French - pepp0045 - Player's Edge Plus (PP0045) 10's or Better + peip0041 + Player's Edge Plus (IP0041) Double Deuces Wild Poker - French - pepp0046 - Player's Edge Plus (PP0046) 10's or Better + peip0051 + Player's Edge Plus (IP0051) Joker Poker - French - pepp0051 - Player's Edge Plus (PP0051) Joker Poker + peip0058 + Player's Edge Plus (IP0058) Standard Draw Poker - French - pepp0053 - Player's Edge Plus (PP0053) Joker Poker (Aces or Better) + peip0062 + Player's Edge Plus (IP0062) Joker Poker - French - pepp0055 - Player's Edge Plus (PP0055) Deuces Wild Poker (set 1) + peip0074 + Player's Edge Plus (IP0074) Joker Poker - French - pepp0055a - Player's Edge Plus (PP0055) Deuces Wild Poker (set 2) + peip0079 + Player's Edge Plus (IP0079) Standard Draw Poker - French - pepp0055b - Player's Edge Plus (PP0055) Deuces Wild Poker (set 3) + peip0101 + Player's Edge Plus (IP0101) Joker Poker - French - pepp0057 - Player's Edge Plus (PP0057) Deuces Wild Poker (set 1) + peip0103 + Player's Edge Plus (IP0103) Joker Poker - French - pepp0057a - Player's Edge Plus (PP0057) Deuces Wild Poker (set 2) + peip0105 + Player's Edge Plus (IP0105) Joker Poker - French - pepp0059 - Player's Edge Plus (PP0059) Two Pair or Better (set 1) + peip0108 + Player's Edge Plus (IP0108) Standard Draw Poker - French - pepp0059a - Player's Edge Plus (PP0059) Two Pair or Better (set 2) + peip0111 + Player's Edge Plus (IP0111) Joker Poker - French - pepp0060 - Player's Edge Plus (PP0060) Standard Draw Poker (set 1) + peip0112 + Player's Edge Plus (IP0112) Standard Draw Poker - French - pepp0060a - Player's Edge Plus (PP0060) Standard Draw Poker (set 2) + peip0114 + Player's Edge Plus (IP0114) Standard Draw Poker - French - pepp0064 - Player's Edge Plus (PP0064) Joker Poker + peip0115 + Player's Edge Plus (IP0115) Joker Poker - French - pepp0065 - Player's Edge Plus (PP0065) Joker Poker (Aces or Better) + peip0116 + Player's Edge Plus (IP0116) Standard Draw Poker - French - pepp0083 - Player's Edge Plus (PP0083) 10's or Better + peip0118 + Player's Edge Plus (IP0118) Standard Draw Poker - French - pepp0103 - Player's Edge Plus (PP0103) Deuces Wild Poker + peip0120 + Player's Edge Plus (IP0120) Standard Draw Poker - French - pepp0116 - Player's Edge Plus (PP0116) Standard Draw Poker + peivc006 + Player's Edge Plus (IVC006) Clear EEPROM Chip - pepp0118 - Player's Edge Plus (PP0118) Standard Draw Poker + peke0004 + Player's Edge Plus (KE0004) Keno (set 1) - pepp0120 - Player's Edge Plus (PP0120) Wild Sevens Poker + peke0004a + Player's Edge Plus (KE0004) Keno (set 2) - pepp0125 - Player's Edge Plus (PP0125) Deuces Wild Poker + peke0004b + Player's Edge Plus (KE0004) Keno (set 3) - pepp0126 - Player's Edge Plus (PP0126) Deuces Wild Poker + peke0017 + Player's Edge Plus (KE0017) Keno (set 1) - pepp0127 - Player's Edge Plus (PP0127) Deuces Joker Wild Poker + peke0017a + Player's Edge Plus (KE0017) Keno (set 2) - pepp0158 - Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 1) + peke1001 + Player's Edge Plus (KE1001) Keno - pepp0158a - Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 2) + peke1006 + Player's Edge Plus (KE1006) Keno - pepp0158b - Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 3) + peke1012 + Player's Edge Plus (KE1012) Keno (set 1) - pepp0159 - Player's Edge Plus (PP0159) Standard Draw Poker (International) + peke1012a + Player's Edge Plus (KE1012) Keno (set 2) - pepp0171 - Player's Edge Plus (PP0171) Joker Poker + peke1012b + Player's Edge Plus (KE1012) Keno (set 3) - pepp0178 - Player's Edge Plus (PP0178) 4 of a Kind Bonus Poker (Operator selectable special 4 of a Kind) + peke1013 + Player's Edge Plus (KE1013) Keno (set 1) - pepp0188 - Player's Edge Plus (PP0188) Standard Draw Poker (set 1) + peke1013a + Player's Edge Plus (KE1013) Keno (set 2) - pepp0188a - Player's Edge Plus (PP0188) Standard Draw Poker (set 2) + pekoc766 + Player's Edge Plus (PP0766 A5W-A6F) Standard Draw Poker - pepp0190 - Player's Edge Plus (PP0190) Deuces Wild Poker + pekoc801 + Player's Edge Plus (PP0801 A5W-A6F) 10's or Better - pepp0197 - Player's Edge Plus (PP0197) Standard Draw Poker (set 1) + pekoc802 + Player's Edge Plus (PP0802 A5W-A6F) Standard Draw Poker - pepp0197a - Player's Edge Plus (PP0197) Standard Draw Poker (set 2) + pekoc803 + Player's Edge Plus (PP0803 A5W-A6F) Joker Poker - pepp0203 - Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 1) + pekoc803a + Player's Edge Plus (PP0803 A50-A6N) Joker Poker - pepp0203a - Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 2) + pekoc804 + Player's Edge Plus (PP0804 A5W-A6F) Bonus Poker Deluxe - pepp0203b - Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 3) + pekoc806 + Player's Edge Plus (PP0806 A5W-A6F) Standard Draw Poker - pepp0219 - Player's Edge Plus (PP0219) Standard Draw Poker + pekoc818 + Player's Edge Plus (PP0818 A5W-A6F) Joker Poker (Aces or Better) - pepp0221 - Player's Edge Plus (PP0221) Standard Draw Poker (set 1) + pekoc819 + Player's Edge Plus (PP0819 A5W-A6F) Bonus Poker Deluxe - pepp0221a - Player's Edge Plus (PP0221) Standard Draw Poker (set 2) + pekoc822 + Player's Edge Plus (PP0822 A5W-A6F) Standard Draw Poker - pepp0224 - Player's Edge Plus (PP0224) Deuces Wild Poker (set 1) + pekoc825 + Player's Edge Plus (PP0825 A59-A7C) White Hot Aces - pepp0224a - Player's Edge Plus (PP0224) Deuces Wild Poker (set 2) + pelipete + Pelican Pete (10177511, NSW/ACT) - pepp0230 - Player's Edge Plus (PP0230) Standard Draw Poker + pelipetejc + Pelican Pete - Jackpot Carnival (10226711, Queensland) - pepp0249 - Player's Edge Plus (PP0249) Deuces Wild Poker + pelipeteu + Pelican Pete (0252555, US) - pepp0250 - Player's Edge Plus (PP0250) Double Down Stud Poker + pemg0025 + Montana Choice (MG0025) Multi-Game - pepp0265 - Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 1) + pemg0026 + Montana Choice (MG0026) Multi-Game - pepp0265a - Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 2) + pemg0182 + Montana Choice (MG0182) Multi-Game - pepp0274 - Player's Edge Plus (PP0274) Standard Draw Poker + pemg0183 + Montana Choice (MG0183) Multi-Game - pepp0290 - Player's Edge Plus (PP0290) Deuces Wild Poker + pemg0213 + Player's Choice (MG0213) Multi-Game - pepp0291 - Player's Edge Plus (PP0291) Deuces Wild Poker + pemg0252 + Player's Choice (MG0252) Multi-Game - pepp0409 - Player's Edge Plus (PP0409) 4 of a Kind Bonus Poker + penalty + Penalty (Bingo) - pepp0410 - Player's Edge Plus (PP0410) 4 of a Kind Bonus Poker + penbros + Penguin Brothers (Japan) - pepp0417 - Player's Edge Plus (PP0417) Deuces Wild Poker (set 1) + penfan + Penfan Girls - Step1. Mild Mind (set 1) - pepp0417a - Player's Edge Plus (PP0417) Deuces Wild Poker (set 2) + penfana + Penfan Girls - Step1. Mild Mind (set 2) - pepp0419 - Player's Edge Plus (PP0419) Standard Draw Poker + pengadvb + Penguin Adventure (bootleg of MSX version, encrypted) - pepp0420 - Player's Edge Plus (PP0420) Standard Draw Poker + pengadvb2 + Penguin Adventure (bootleg of MSX version, not encrypted) - pepp0423 - Player's Edge Plus (PP0423) Standard Draw Poker + pengo + Pengo (set 1 rev C, encrypted) - pepp0426 - Player's Edge Plus (PP0426) Joker Poker + pengo2 + Pengo (set 2, encrypted) - pepp0428 - Player's Edge Plus (PP0428) Joker Poker + pengo2u + Pengo (set 2, rev A, not encrypted) - pepp0429 - Player's Edge Plus (PP0429) Joker Poker (Aces or Better) + pengo3u + Pengo (set 3, not encrypted) - pepp0434 - Player's Edge Plus (PP0434) Bonus Poker Deluxe + pengo4 + Pengo (set 4, encrypted) - pepp0447 - Player's Edge Plus (PP0447) Standard Draw Poker (set 1) + pengo5 + Pengo (set 5, encrypted) - pepp0447a - Player's Edge Plus (PP0447) Standard Draw Poker (set 2) + pengo6 + Pengo (set 6, encrypted) - pepp0449 - Player's Edge Plus (PP0449) Standard Draw Poker + pengob + Pengo (bootleg) - pepp0452 - Player's Edge Plus (PP0452) Double Deuces Wild Poker + pengojpm + Pengo (bootleg on Pac-Man hardware, set 1) - pepp0454 - Player's Edge Plus (PP0454) Bonus Poker Deluxe + pengomc1 + Pengo (Marti Colls bootleg on Pac-Man hardware, set 1) - pepp0455 - Player's Edge Plus (PP0455) Joker Poker + pengomc2 + Pengo (Marti Colls bootleg on Pac-Man hardware, set 2) - pepp0458 - Player's Edge Plus (PP0458) Joker Poker (Aces or Better) + pengopac + Pengo (bootleg on Pac-Man hardware, set 2) - pepp0488 - Player's Edge Plus (PP0488) Standard Draw Poker (Arizona Charlie's) + pengpay + Penguin Pays (0200460V, NSW/ACT) - pepp0508 - Player's Edge Plus (PP0508) Loose Deuce Deuces Wild! Poker + pengpaya + Penguin Pays (0200357V, NSW/ACT) - pepp0509 - Player's Edge Plus (PP0509) Standard Draw Poker + pengpayb + Penguin Pays (0200359V, NSW/ACT) - pepp0510 - Player's Edge Plus (PP0510) Standard Draw Poker + pengpayc + Penguin Pays (0200113V, NSW/ACT) - pepp0514 - Player's Edge Plus (PP0514) Double Bonus Poker (set 1) + pengpayce + Penguin Pays - Cash Express (AHG1544, US) - pepp0514a - Player's Edge Plus (PP0514) Double Bonus Poker (set 2) + pengpayd + Penguin Pays (0300113V, NSW/ACT) - pepp0514b - Player's Edge Plus (PP0514) Double Bonus Poker (set 3) + pengpayu + Penguin Pays (BHI0417-03, US) - pepp0515 - Player's Edge Plus (PP0515) Double Bonus Poker (set 1) + pengpayua + Penguin Pays (OHG0417-03, US) - pepp0515a - Player's Edge Plus (PP0515) Double Bonus Poker (set 2) + pengpayub + Penguin Pays (OHG0417-02, US) - pepp0516 - Player's Edge Plus (PP0516) Double Bonus Poker (set 1) + pengpuck + Penguin Pays - Penguin Pucks (EHG1257, US) - pepp0516a - Player's Edge Plus (PP0516) Double Bonus Poker (set 2) + pengpyce + Penguin Pays - Cash Express (0151120, US) - pepp0531 - Player's Edge Plus (PP0531) Joker Poker + penky + Penky - pepp0536 - Player's Edge Plus (PP0536) Joker Poker + penkyi + Penky (Italian) - pepp0538 - Player's Edge Plus (PP0538) Double Bonus Poker + pennyar + Penny Arcade (0251169, US) - pepp0540 - Player's Edge Plus (PP0540) Double Bonus Poker + penpir + Penguin Pirate (0100674V, NSW/ACT) - pepp0542 - Player's Edge Plus (PP0542) One Eyed Jacks Wild Poker + penpir2 + Penguin Pirate II (0100869V, Victoria) - pepp0568 - Player's Edge Plus (PP0568) Joker Poker + penpira + Penguin Pirate (0200578V, NSW/ACT) - pepp0585 - Player's Edge Plus (PP0585) Standard Draw Poker + penta + Penta - pepp0713 - Player's Edge Plus (PP0713) Bonus Poker Deluxe + pentacup + Pentacup (rev. 1) - pepp0725 - Player's Edge Plus (PP0725) Double Bonus Poker (set 1) + pentacup2 + Pentacup (rev. 2) - pepp0725a - Player's Edge Plus (PP0725) Double Bonus Poker (set 2) + pepk0719 + Player's Edge (PK0719-PC092) Standard Draw Poker (El Cortez) - pepp0726 - Player's Edge Plus (PP0726) Double Bonus Poker + pepk0719a + Player's Edge (PK0719-PC041) Standard Draw Poker - pepp0728 - Player's Edge Plus (PP0728) Double Bonus Poker + pepk0719b + Player's Edge (PK0719-PC011) Standard Draw Poker - pepp0760 - Player's Edge Plus (PP0760) Double Down Stud Poker + pepk0756 + Player's Edge (PK0756-PC092) Standard Draw Poker - pepp0763 - Player's Edge Plus (PP0763) 4 of a Kind Bonus Poker + pepk0756a + Player's Edge (PK0756-PC084) Standard Draw Poker (El Cortez) - pepp0775 - Player's Edge Plus (PP0775) Royal Deuces Poker?? + pepk0756b + Player's Edge (PK0756-PC041) Standard Draw Poker - pepper2 - Pepper II (version 8) + pepk0756c + Player's Edge (PK0756-PC011) Standard Draw Poker - pepper27 - Pepper II (version 7) + pepk0756d + Player's Edge (PK0756-PC001) Standard Draw Poker - peps0014 - Player's Edge Plus (PS0014) Super Joker Slots + pepk0757 + Player's Edge (PK0757-PC074) Two Pair or Better - peps0021 - Player's Edge Plus (PS0021) Red White & Blue Slots + pepk0758 + Player's Edge (PK0758-PC041) Jacks or Better - peps0022 - Player's Edge Plus (PS0022) Red White & Blue Slots + pepk0769 + Player's Edge (PK0769-PC092) Standard Draw Poker - peps0042 - Player's Edge Plus (PS0042) Double Diamond Slots + pepk0773 + Player's Edge (PK0773-PC041) Jacks or Better - peps0043 - Player's Edge Plus (PS0043) Double Diamond Slots + pepk0810 + Player's Edge (PK0810-PC041) Joker Poker - peps0045 - Player's Edge Plus (PS0045) Red White & Blue Slots + pepk0810a + Player's Edge (PK0810-PC011) Joker Poker - peps0047 - Player's Edge Plus (PS0047) Wild Cherry Slots + pepk0811 + Player's Edge (PK0811-PC041) Joker Poker - peps0092 - Player's Edge Plus (PS0092) Wild Cherry Slots + pepk0823 + Player's Edge (PK0823-PC009) Standard Draw Poker - peps0206 - Player's Edge Plus (PS0206) Red White & Blue Slots + pepk0832 + Player's Edge (PK0832-PC041) Joker Poker - peps0207 - Player's Edge Plus (PS0207) Red White & Blue Slots + pepk0849 + Player's Edge (PK0849-PC041) Joker Poker (Two Pair or Better) - peps0296 - Player's Edge Plus (PS0296) Haywire Slots + pepk0856 + Player's Edge (PK0856-PC092) Joker Poker - peps0298 - Player's Edge Plus (PS0298) Double Diamond Slots + pepk0856a + Player's Edge (PK0856-PC011) Joker Poker - peps0308 - Player's Edge Plus (PS0308) Double Jackpot Slots + pepk0858 + Player's Edge (PK0858-PC075) Deuces Wild Poker - peps0364 - Player's Edge Plus (PS0364) Red White & Blue Slots + pepk0873 + Player's Edge (PK0873-PC093) Deuces Wild Poker - peps0426 - Player's Edge Plus (PS0426) Sizzling Sevens Slots + pepk0873a + Player's Edge (PK0873-PC046) Deuces Wild Poker - peps0581 - Player's Edge Plus (PS0581) Red White & Blue Slots + pepk0885 + Player's Edge (PK0885-PC056) Deuces Wild Poker (El Cortez) - peps0615 - Player's Edge Plus (PS0615) Chaos Slots + pepk0930 + Player's Edge (PK0930-PC093) Deuces Wild Poker - peps0631 - Player's Edge Plus (PS0631) Red White & Blue Slots + pepk0930a + Player's Edge (PK0930-PC075) Deuces Wild Poker - peps0716 - Player's Edge Plus (PS0716) River Gambler Slots + pepk1002 + Player's Edge (PK1002-PC082) Jake's Jacks Bonus Poker - pepsiman - PEPSI Man + pepk1004 + Player's Edge (PK1004-PC075) Deuces Wild Poker - percuss - The Percussor + pepk1013 + Player's Edge (PK1013-PC087) Tens or Better - perestro - Perestroika Girls + pepk1020 + Player's Edge (PK1020-PC078) 4 of a Kind Bonus Poker - perestrof - Perestroika Girls (Fuuki license) + pepk1024 + Player's Edge (PK1024-PC095) Aces and Faces Bonus Poker - perfect - Perfect Game (Russia) + pepk1030 + Player's Edge (PK1030-PC088) 4 of a Kind Bonus Poker - perfrman - Performan (Japan) + pepk1069 + Player's Edge (PK1069-PC088) Double Bonus Poker - perfrmanu - Performan (US) + pepp0001 + Player's Edge Plus (PP0001) Standard Draw Poker - pesadelo - Pesadelo (bootleg of Knightmare on MSX) + pepp0002 + Player's Edge Plus (PP0002) Standard Draw Poker - peset001 - Player's Edge Plus (Set001) Set Chip + pepp0002a + Player's Edge Plus (PP0002) Standard Draw Poker (International) - peset038 - Player's Edge Plus (Set038) Set Chip + pepp0006 + Player's Edge Plus (PP0006) Standard Draw Poker - pestplce - Pest Place + pepp0008 + Player's Edge Plus (PP0008) Standard Draw Poker (set 1) - petaco - Petaco + pepp0008a + Player's Edge Plus (PP0008) Standard Draw Poker (set 2, El Cortez) - petaco2 - Petaco 2 + pepp0008b + Player's Edge Plus (PP0008) Standard Draw Poker (set 3) - peterpak - Peter Pack-Rat + pepp0009 + Player's Edge Plus (PP0009) Standard Draw Poker - pettanp - Pettan Pyuu (Japan) + pepp0010 + Player's Edge Plus (PP0010) Standard Draw Poker - pex0002p - Player's Edge Plus (X000002P+XP000038) Standard Draw Poker + pepp0014 + Player's Edge Plus (PP0014) Standard Draw Poker (International) - pex0002pa - Player's Edge Plus (X000002P+XP000109) Standard Draw Poker + pepp0014a + Player's Edge Plus (PP0014) Standard Draw Poker - pex0040p - Player's Edge Plus (X000040P+XP000038) Standard Draw Poker + pepp0021 + Player's Edge Plus (PP0021) Standard Draw Poker - pex0045p - Player's Edge Plus (X000045P+XP000038) 10's or Better + pepp0023 + Player's Edge Plus (PP0023) 10's or Better - pex0046p - Player's Edge Plus (X000046P+XP000038) 10's or Better + pepp0038 + Player's Edge Plus (PP0038) Standard Draw Poker - pex0053p - Player's Edge Plus (X000053P+XP000038) Joker Poker (Aces or Better) + pepp0040 + Player's Edge Plus (PP0040) Standard Draw Poker (set 1) - pex0054p - Player's Edge Plus (X000054P+XP000038) Deuces Wild Poker + pepp0040a + Player's Edge Plus (PP0040) Standard Draw Poker (set 2) - pex0055p - Player's Edge Plus (X000055P+XP000019) Deuces Wild Poker + pepp0040b + Player's Edge Plus (PP0040) Standard Draw Poker (International) - pex0055pa - Player's Edge Plus (X000055P+XP000022) Deuces Wild Poker (The Orleans) + pepp0041 + Player's Edge Plus (PP0041) Standard Draw Poker - pex0055pb - Player's Edge Plus (X000055P+XP000023) Deuces Wild Poker + pepp0042 + Player's Edge Plus (PP0042) 10's or Better (set 1) - pex0055pc - Player's Edge Plus (X000055P+XP000028) Deuces Wild Poker + pepp0042a + Player's Edge Plus (PP0042) 10's or Better (set 2) - pex0055pd - Player's Edge Plus (X000055P+XP000035) Deuces Wild Poker + pepp0043 + Player's Edge Plus (PP0043) 10's or Better - pex0055pe - Player's Edge Plus (X000055P+XP000038) Deuces Wild Poker + pepp0043a + Player's Edge Plus (PP0043) 10's or Better (International, set 1) - pex0055pf - Player's Edge Plus (X000055P+XP000040) Deuces Wild Poker + pepp0043b + Player's Edge Plus (PP0043) 10's or Better (International, set 2) - pex0055pg - Player's Edge Plus (X000055P+XP000053) Deuces Wild Poker + pepp0045 + Player's Edge Plus (PP0045) 10's or Better - pex0055ph - Player's Edge Plus (X000055P+XP000055) Deuces Wild Poker + pepp0045a + Player's Edge Plus (PP0045) 10's or Better (Gambler Downtown Reno) - pex0055pi - Player's Edge Plus (X000055P+XP000063) Deuces Wild Poker + pepp0045b + Player's Edge Plus (PP0045) 10's or Better (Par-A-Dice Riverboat Casino) - pex0055pj - Player's Edge Plus (X000055P+XP000075) Deuces Wild Poker + pepp0045c + Player's Edge Plus (PP0045) 10's or Better (Annie Oakley's Central City) - pex0055pk - Player's Edge Plus (X000055P+XP000079) Deuces Wild Poker + pepp0045d + Player's Edge Plus (PP0045) 10's or Better (Las Vegas Rio) - pex0055pl - Player's Edge Plus (X000055P+XP000094) Deuces Wild Poker + pepp0046 + Player's Edge Plus (PP0046) 10's or Better (set 1) - pex0055pm - Player's Edge Plus (X000055P+XP000095) Deuces Wild Poker + pepp0046a + Player's Edge Plus (PP0046) 10's or Better (International, set 1) - pex0055pn - Player's Edge Plus (X000055P+XP000098) Deuces Wild Poker + pepp0046b + Player's Edge Plus (PP0046) 10's or Better (International, set 2) - pex0055po - Player's Edge Plus (X000055P+XP000102) Deuces Wild Poker + pepp0046c + Player's Edge Plus (PP0046) 10's or Better (set 2) - pex0055pp - Player's Edge Plus (X000055P+XP000104) Deuces Wild Poker + pepp0048 + Player's Edge Plus (PP0048) Joker Poker (set 1) - pex0055pq - Player's Edge Plus (X000055P+XP000112) Deuces Wild Poker + pepp0048a + Player's Edge Plus (PP0048) Joker Poker (set 2) - pex0055pr - Player's Edge Plus (X000055P+XP000126) Deuces Wild Poker + pepp0048b + Player's Edge Plus (PP0048) Joker Poker (set 3) - pex0060p - Player's Edge Plus (X000060P+XP000038) Standard Draw Poker + pepp0048c + Player's Edge Plus (PP0048) Joker Poker (set 4) - pex0158p - Player's Edge Plus (X000158P+XP000038) 4 of a Kind Bonus Poker + pepp0050 + Player's Edge Plus (PP0050) Joker Poker (set 1) - pex0171p - Player's Edge Plus (X000171P+XP000038) Joker Poker + pepp0050a + Player's Edge Plus (PP0050) Joker Poker (set 2) - pex0188p - Player's Edge Plus (X000188P+XP000038) Standard Draw Poker + pepp0050b + Player's Edge Plus (PP0050) Joker Poker (set 3) - pex0190p - Player's Edge Plus (X000190P+XP000053) Deuces Wild Poker + pepp0050c + Player's Edge Plus (PP0050) Joker Poker (set 4, El Cortez) - pex0197p - Player's Edge Plus (X000197P+XP000038) Standard Draw Poker + pepp0051 + Player's Edge Plus (PP0051) Joker Poker - pex0203p - Player's Edge Plus (X000203P+XP000038) 4 of a Kind Bonus Poker + pepp0053 + Player's Edge Plus (PP0053) Joker Poker (Aces or Better) - pex0224p - Player's Edge Plus (X000224P+XP000053) Deuces Wild Poker + pepp0054 + Player's Edge Plus (PP0054) Deuces Wild Poker (El Cortez) - pex0225p - Player's Edge Plus (X000225P+XP000079) Dueces Joker Wild Poker + pepp0055 + Player's Edge Plus (PP0055) Deuces Wild Poker (set 1) - pex0265p - Player's Edge Plus (X000265P+XP000038) 4 of a Kind Bonus Poker + pepp0055a + Player's Edge Plus (PP0055) Deuces Wild Poker (set 2, Skyline Casino) - pex0291p - Player's Edge Plus (X000291P+XP000053) Deuces Wild Poker + pepp0055b + Player's Edge Plus (PP0055) Deuces Wild Poker (set 3) - pex0417p - Player's Edge Plus (X000417P+XP000053) Deuces Wild Poker + pepp0055c + Player's Edge Plus (PP0055) Deuces Wild Poker (set 4) - pex0430p - Player's Edge Plus (X000430P+XP000079) Dueces Joker Wild Poker + pepp0057 + Player's Edge Plus (PP0057) Deuces Wild Poker (set 1) - pex0434p - Player's Edge Plus (X000434P+XP000038) Bonus Poker Deluxe + pepp0057a + Player's Edge Plus (PP0057) Deuces Wild Poker (set 2) - pex0447p - Player's Edge Plus (X000447P+XP000038) Standard Draw Poker + pepp0057b + Player's Edge Plus (PP0057) Deuces Wild Poker (set 3, El Cortez) - pex0449p - Player's Edge Plus (X000449P+XP000038) Standard Draw Poker + pepp0057c + Player's Edge Plus (PP0057) Deuces Wild Poker (set 4) - pex0451p - Player's Edge Plus (X000451P+XP000038) Bonus Poker Deluxe + pepp0057d + Player's Edge Plus (PP0057) Deuces Wild Poker (set 5) - pex0452p - Player's Edge Plus (X000452P+XP000038) Double Deuces Wild Poker + pepp0059 + Player's Edge Plus (PP0059) Two Pair or Better (set 1) - pex0454p - Player's Edge Plus (X000454P+XP000038) Bonus Poker Deluxe + pepp0059a + Player's Edge Plus (PP0059) Two Pair or Better (set 2) - pex0458p - Player's Edge Plus (X000458P+XP000038) Joker Poker (Aces or Better) + pepp0060 + Player's Edge Plus (PP0060) Standard Draw Poker (set 1) - pex0459p - Player's Edge Plus (X000459P+XP000038) Joker Poker + pepp0060a + Player's Edge Plus (PP0060) Standard Draw Poker (set 2) - pex0459pa - Player's Edge Plus (X000459P+XP000155) Joker Poker + pepp0060b + Player's Edge Plus (PP0060) Standard Draw Poker (set 3) - pex0508p - Player's Edge Plus (X000508P+XP000038) Loose Deuce Deuces Wild! Poker + pepp0060c + Player's Edge Plus (PP0060) Standard Draw Poker (set 4) - pex0514p - Player's Edge Plus (X000514P+XP000038) Double Bonus Poker + pepp0063 + Player's Edge Plus (PP0063) 10's or Better - pex0515p - Player's Edge Plus (X000515P+XP000038) Double Bonus Poker + pepp0064 + Player's Edge Plus (PP0064) Joker Poker - pex0536p - Player's Edge Plus (X000536P+XP000038) Joker Poker + pepp0065 + Player's Edge Plus (PP0065) Joker Poker (Aces or Better) - pex0537p - Player's Edge Plus (X000537P+XP000038) Standard Draw Poker + pepp0078 + Player's Edge Plus (PP0078) Standard Draw Poker - pex0568p - Player's Edge Plus (X000568P+XP000038) Joker Poker + pepp0083 + Player's Edge Plus (PP0083) 10's or Better - pex0581p - Player's Edge Plus (X000581P+XP000038) 4 of a Kind Bonus Poker + pepp0085 + Player's Edge Plus (PP0085) Joker Poker (Two Pair or Better) - pex0588p - Player's Edge Plus (X000588P+XP000038) Joker Poker + pepp0089 + Player's Edge Plus (PP0089) Standard Draw Poker - pex0725p - Player's Edge Plus (X000725P+XP000038) Double Bonus Poker + pepp0094 + Player's Edge Plus (PP0094) Standard Draw Poker - pex0726p - Player's Edge Plus (X000726P+XP000038) Double Bonus Poker + pepp0103 + Player's Edge Plus (PP0103) Deuces Wild Poker (set 1) - pex0727p - Player's Edge Plus (X000727P+XP000038) Double Bonus Poker + pepp0103a + Player's Edge Plus (PP0103) Deuces Wild Poker (set 2) - pex0763p - Player's Edge Plus (X000763P+XP000038) 4 of a Kind Bonus Poker + pepp0103b + Player's Edge Plus (PP0103) Deuces Wild Poker (set 3) - pex0838s - Player's Edge Plus (X000838S+XS000002) Five Times Pay Slots + pepp0103c + Player's Edge Plus (PP0103) Deuces Wild Poker (set 4) - pex0841s - Player's Edge Plus (X000841S+XS000002) Five Times Pay Slots + pepp0104 + Player's Edge Plus (PP0104) Standard Draw Poker (set 1) - pex0998s - Player's Edge Plus (X000998S+XS000006) Triple Triple Diamond Slots + pepp0104a + Player's Edge Plus (PP0104) Standard Draw Poker (set 2, Fitzgeralds) - pex1087s - Player's Edge Plus (X001087S+XS000006) Double Double Diamond Slots + pepp0116 + Player's Edge Plus (PP0116) Standard Draw Poker - pex2018p - Player's Edge Plus (X002018P+XP000038) Full House Bonus Poker + pepp0116a + Player's Edge Plus (PP0116) Standard Draw Poker (Mirage) - pex2025p - Player's Edge Plus (X002025P+XP000019) Deuces Wild Bonus Poker + pepp0118 + Player's Edge Plus (PP0118) Standard Draw Poker - pex2026p - Player's Edge Plus (X002026P+XP000019) Deuces Wild Bonus Poker + pepp0120 + Player's Edge Plus (PP0120) Wild Sevens Poker - pex2027p - Player's Edge Plus (X002027P+XP000019) Deuces Wild Bonus Poker + pepp0125 + Player's Edge Plus (PP0125) Deuces Wild Poker - pex2031p - Player's Edge Plus (X002031P+XP000112) Lucky Deal Poker + pepp0126 + Player's Edge Plus (PP0126) Deuces Wild Poker (set 1) - pex2035p - Player's Edge Plus (X002035P+XP000112) White Hot Aces Poker + pepp0126a + Player's Edge Plus (PP0126) Deuces Wild Poker (set 2) - pex2036p - Player's Edge Plus (X002036P+XP000112) White Hot Aces Poker + pepp0126b + Player's Edge Plus (PP0126) Deuces Wild Poker (set 3) - pex2040p - Player's Edge Plus (X002040P+XP000038) Nevada Bonus Poker + pepp0127 + Player's Edge Plus (PP0127) Deuces Joker Wild Poker (set 1) - pex2042p - Player's Edge Plus (X002042P+XP000038) Triple Bonus Poker + pepp0127a + Player's Edge Plus (PP0127) Deuces Joker Wild Poker (set 2) - pex2043p - Player's Edge Plus (X002043P+XP000038) Triple Bonus Poker + pepp0127b + Player's Edge Plus (PP0127) Deuces Joker Wild Poker (International) - pex2045p - Player's Edge Plus (X002045P+XP000038) Triple Bonus Poker + pepp0129 + Player's Edge Plus (PP0129) Joker Poker (Two Pair or Better) - pex2066p - Player's Edge Plus (X002066P+XP000038) Double Double Bonus Poker + pepp0130 + Player's Edge Plus (PP0130) Aces and Faces Bonus Poker - pex2067p - Player's Edge Plus (X002067P+XP000038) Double Double Bonus Poker + pepp0132 + Player's Edge Plus (PP0132) Standard Draw Poker - pex2068p - Player's Edge Plus (X002068P+XP000038) Double Double Bonus Poker + pepp0150 + Player's Edge Plus (PP0150) Standard Draw Poker - pex2069p - Player's Edge Plus (X002069P+XP000038) Double Double Bonus Poker + pepp0158 + Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 1) - pex2070p - Player's Edge Plus (X002070P+XP000038) Double Double Bonus Poker + pepp0158a + Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 2, Skyline Casino) - pex2121p - Player's Edge Plus (X002121P+XP000038) Standard Draw Poker + pepp0158b + Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 3) - pex2121pa - Player's Edge Plus (X002121P+XP000037) Standard Draw Poker + pepp0158c + Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 4) - pex2150p - Player's Edge Plus (X002150P+XP000038) 4 of a Kind Bonus Poker + pepp0158d + Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 5) - pex2172p - Player's Edge Plus (X002172P+XP000112) Ace$ Bonus Poker + pepp0159 + Player's Edge Plus (PP0159) Standard Draw Poker (International) - pex2180p - Player's Edge Plus (X002180P+XP000038) Double Bonus Poker + pepp0171 + Player's Edge Plus (PP0171) Joker Poker - pex2241p - Player's Edge Plus (X002241P+XP000079) 4 of a Kind Bonus Poker + pepp0171a + Player's Edge Plus (PP0171) Joker Poker (International) - pex2244p - Player's Edge Plus (X002244P+XP000079) Double Bonus Poker + pepp0178 + Player's Edge Plus (PP0178) 4 of a Kind Bonus Poker (Operator selectable special 4 of a Kind) - pex2245p - Player's Edge Plus (X002245P+XP000055) Standard Draw Poker + pepp0181 + Player's Edge Plus (PP0181) Standard Draw Poker - pex2245pa - Player's Edge Plus (X002245P+XP000079) Standard Draw Poker + pepp0188 + Player's Edge Plus (PP0188) Standard Draw Poker (set 1) - pex2250p - Player's Edge Plus (X002250P+XP000050) Shockwave Poker + pepp0188a + Player's Edge Plus (PP0188) Standard Draw Poker (set 2) - pex2251p - Player's Edge Plus (X002251P+XP000050) Shockwave Poker + pepp0188b + Player's Edge Plus (PP0188) Standard Draw Poker (set 3) - pex2283p - Player's Edge Plus (X002283P+XP000057) Dealt Deuces Wild Bonus Poker + pepp0189 + Player's Edge Plus (PP0189) Standard Draw Poker - pex2284p - Player's Edge Plus (X002284P+XP000057) Barbaric Decues Wild Bonus Poker + pepp0190 + Player's Edge Plus (PP0190) Deuces Wild Poker (set 1) - pex2302p - Player's Edge Plus (X002302P+XP000038) Bonus Poker Deluxe + pepp0190a + Player's Edge Plus (PP0190) Deuces Wild Poker (set 2) - pex2303p - Player's Edge Plus (X002303P+XP000112) White Hot Aces Poker + pepp0190b + Player's Edge Plus (PP0190) Deuces Wild Poker (set 3) - pex2307p - Player's Edge Plus (X002307P+XP000112) Triple Double Bonus Poker + pepp0190c + Player's Edge Plus (PP0190) Deuces Wild Poker (International) - pex2314p - Player's Edge Plus (X002314P+XP000112) Triple Bonus Poker Plus + pepp0195 + Player's Edge Plus (PP0195) 4 of a Kind Bonus Poker - pex2374p - Player's Edge Plus (X002374P+XP000112) Super Aces Poker (Horseshoe) + pepp0197 + Player's Edge Plus (PP0197) Standard Draw Poker (set 1) - pex2377p - Player's Edge Plus (X002377P+XP000112) Super Double Bonus Poker + pepp0197a + Player's Edge Plus (PP0197) Standard Draw Poker (set 2) - pex2420p - Player's Edge Plus (X002420P+XP000064) Deuces Wild Bonus Poker - French + pepp0197b + Player's Edge Plus (PP0197) Standard Draw Poker (set 3) - pex2440p - Player's Edge Plus (X002440P+XP000053) Deuces Wild Poker + pepp0197c + Player's Edge Plus (PP0197) Standard Draw Poker (set 4) - pex2461p - Player's Edge Plus (X002461P+XP000055) Joker Poker (Two Pair or Better) + pepp0197d + Player's Edge Plus (PP0197) Standard Draw Poker (set 5) - pexm001p - Player's Edge Plus (XM00001P+XMP00003) Multi-Poker + pepp0197e + Player's Edge Plus (PP0197) Standard Draw Poker (Cruise) - pexm002p - Player's Edge Plus (XM00002P+XMP00006) Multi-Poker + pepp0203 + Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 1) - pexm003p - Player's Edge Plus (XM00003P+XMP00024) Multi-Poker + pepp0203a + Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 2) - pexm004p - Player's Edge Plus (XM00004P+XMP00002) Multi-Poker + pepp0203b + Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 3) - pexm005p - Player's Edge Plus (XM00005P+XMP00004) Multi-Poker + pepp0203c + Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 4) - pexm006p - Player's Edge Plus (XM00006P+XMP00006) Multi-Poker + pepp0203d + Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (International) - pexm007p - Player's Edge Plus (XM00007P+XMP00006) Multi-Poker + pepp0203e + Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 5) - pexm008p - Player's Edge Plus (XM00008P+XMP00006) Multi-Poker + pepp0218 + Player's Edge Plus (PP0218) 4 of a Kind Bonus Poker - pexmp017 - Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2298) + pepp0219 + Player's Edge Plus (PP0219) Standard Draw Poker - pexmp017a - Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2352) + pepp0221 + Player's Edge Plus (PP0221) Standard Draw Poker (set 1) - pexmp017b - Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2426) + pepp0221a + Player's Edge Plus (PP0221) Standard Draw Poker (set 2) - pexmp030 - Player's Edge Plus (XMP00030) 5-in-1 Wingboard (CG2426) + pepp0221b + Player's Edge Plus (PP0221) Standard Draw Poker (set 3) - pf2012 - Psychic Force 2012 + pepp0223 + Player's Edge Plus (PP0223) Deuces Joker Wild Poker - pfevr_l2 - Pennant Fever (L-2) + pepp0224 + Player's Edge Plus (PP0224) Deuces Wild Poker (set 1) - pfevr_p3 - Pennant Fever (P-3) + pepp0224a + Player's Edge Plus (PP0224) Deuces Wild Poker (set 2) - pfghtj - Pocket Fighter (Japan 970904) + pepp0230 + Player's Edge Plus (PP0230) Standard Draw Poker - pgalvip - Pocket Gals V.I.P (set 1) + pepp0232 + Player's Edge Plus (PP0232) Patriot Poker - pgalvipa - Pocket Gals V.I.P (set 2) + pepp0242 + Player's Edge Plus (PP0242) Deuces Wild Poker (International English/Spanish) - pgear - Powered Gear: Strategic Variant Armor Equipment (Japan 941024) + pepp0249 + Player's Edge Plus (PP0249) Deuces Wild Poker - pgearr1 - Powered Gear: Strategic Variant Armor Equipment (Japan 940916) + pepp0250 + Player's Edge Plus (PP0250) Double Down Stud Poker (set 1) - pgm - PGM (Polygame Master) System BIOS + pepp0250a + Player's Edge Plus (PP0250) Double Down Stud Poker (set 2) - pgm3in1 - Photo Y2K 2 (Flash 3-in-1) + pepp0265 + Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 1) - pgoal - Pleasure Goal / Futsal - 5 on 5 Mini Soccer (NGM-219) + pepp0265a + Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 2) - phantasm - Phantasm (Japan) + pepp0265b + Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 3) - phantom - Phantom (bootleg of Spectar) + pepp0265c + Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (International) - phantom2 - Phantom II + pepp0274 + Player's Edge Plus (PP0274) Standard Draw Poker - phantoma - Phantomas (bootleg of Spectar) + pepp0288 + Player's Edge Plus (PP0288) Standard Draw Poker (Spanish) - phantomp - Phantom Pays (4VXFC5431, New Zealand) + pepp0290 + Player's Edge Plus (PP0290) Deuces Wild Poker (set 1) - pharo_l2 - Pharaoh (L-2) + pepp0290a + Player's Edge Plus (PP0290) Deuces Wild Poker (set 2) - pharrier - Planet Harriers + pepp0291 + Player's Edge Plus (PP0291) Deuces Wild Poker (set 1) - phelios - Phelios (Japan) + pepp0291a + Player's Edge Plus (PP0291) Deuces Wild Poker (set 2) - phklad - Klad / Labyrinth (Photon System) + pepp0294 + Player's Edge Plus (PP0294) Aces and Faces Bonus Joker Poker - phnix_l1 - Phoenix (L-1) + pepp0295 + Player's Edge Plus (PP0295) Super Deuces Wild Poker - phoenix - Phoenix (Amstar) + pepp0401 + Player's Edge Plus (PP0401) 4 of a Kind Bonus Poker - phoenix3 - Phoenix (T.P.N.) + pepp0409 + Player's Edge Plus (PP0409) 4 of a Kind Bonus Poker - phoenixa - Phoenix (Centuri, set 1) + pepp0410 + Player's Edge Plus (PP0410) 4 of a Kind Bonus Poker (set 1) - phoenixb - Phoenix (Centuri, set 2) + pepp0410a + Player's Edge Plus (PP0410) 4 of a Kind Bonus Poker (set 2) - phoenixc - Phoenix (Irecsa / G.G.I Corp, set 1) + pepp0417 + Player's Edge Plus (PP0417) Deuces Wild Poker (set 1) - phoenixc2 - Phoenix (Irecsa / G.G.I Corp, set 2) + pepp0417a + Player's Edge Plus (PP0417) Deuces Wild Poker (set 2) - phoenixc3 - Phoenix (Irecsa / G.G.I Corp, set 3) + pepp0418 + Player's Edge Plus (PP0418) Deuces Wild Poker - phoenixc4 - Phoenix (Irecsa / G.G.I Corp, set 4) + pepp0419 + Player's Edge Plus (PP0419) Standard Draw Poker (set 1) - phoenixj - Phoenix (Taito Japan) + pepp0419a + Player's Edge Plus (PP0419) Standard Draw Poker (Old Chicago Casino) - phoenixs - Phoenix (Spanish bootleg) + pepp0419b + Player's Edge Plus (PP0419) Standard Draw Poker (set 2) - phoenixt - Phoenix (Taito) + pepp0420 + Player's Edge Plus (PP0420) Standard Draw Poker - phoenxp2 - Phoenix Part 2 + pepp0423 + Player's Edge Plus (PP0423) Standard Draw Poker (set 1) - photof - Photo Finish (bootleg?) + pepp0423a + Player's Edge Plus (PP0423) Standard Draw Poker (set 2) - photoply - Photo Play 2000 (v2.01) + pepp0423b + Player's Edge Plus (PP0423) Standard Draw Poker (set 3) - photoy2k - Photo Y2K (ver. 105) + pepp0423c + Player's Edge Plus (PP0423) Standard Draw Poker (set 4) - photoy2k102 - Photo Y2K (ver. 102, Japanese Board) + pepp0426 + Player's Edge Plus (PP0426) Joker Poker - photoy2k104 - Photo Y2K (ver. 104) + pepp0428 + Player's Edge Plus (PP0428) Joker Poker - phozon - Phozon (Japan) + pepp0429 + Player's Edge Plus (PP0429) Joker Poker (Aces or Better, set 1) - phozons - Phozon (Sidam) + pepp0429a + Player's Edge Plus (PP0429) Joker Poker (Aces or Better, set 2) - phpython - Python (Photon System) + pepp0430 + Player's Edge Plus (PP0430) Deuces Joker Wild Poker - phrcraze - Phraze Craze (6221-40, U5-0A) + pepp0431 + Player's Edge Plus (PP0431) Deuces Joker Wild Poker (International) - phrcrazea - Phraze Craze (6221-40, U5-0) + pepp0434 + Player's Edge Plus (PP0434) Bonus Poker Deluxe (set 1) - phrcrazeb - Phraze Craze (6221-40, U5-3A Expanded Questions) + pepp0434a + Player's Edge Plus (PP0434) Bonus Poker Deluxe (set 2) - phrcrazec - Phraze Craze (6221-40, U5-3 Expanded Questions) + pepp0445 + Player's Edge Plus (PP0445) Aces and Faces Bonus Joker Poker - phrcrazev - Phraze Craze (6221-45, U5-2 Vertical) + pepp0447 + Player's Edge Plus (PP0447) Standard Draw Poker (set 1) - phtetris - Tetris (Photon System) + pepp0447a + Player's Edge Plus (PP0447) Standard Draw Poker (set 2) - piccolop - Piccolo Poker 100 + pepp0447b + Player's Edge Plus (PP0447) Standard Draw Poker (set 3) - pickin - Pickin' + pepp0449 + Player's Edge Plus (PP0449) Standard Draw Poker - pickwin - Pick 'n Win (Version 2.9E Dual) + pepp0449a + Player's Edge Plus (PP0449) Standard Draw Poker (International English/Spanish) - pickwinb1 - Pick 'n Win (Version 2.9R, set 1) + pepp0450 + Player's Edge Plus (PP0450) Loose Deuce Deuces Wild! Poker - pickwinbt - Pick 'n Win (Version 2.8T, set 1) + pepp0452 + Player's Edge Plus (PP0452) Double Deuces Wild Poker (set 1) - pickwind1 - Pick 'n Win (Version 2.9R, set 2) + pepp0452a + Player's Edge Plus (PP0452) Double Deuces Wild Poker (set 2) - pickwindt - Pick 'n Win (Version 2.8T, set 2) + pepp0453 + Player's Edge Plus (PP0453) Joker Poker - pickwino - Pick 'n Win (Version 2.6) + pepp0454 + Player's Edge Plus (PP0454) Bonus Poker Deluxe (set 1) - pickwino2 - Pick 'n Win (Version 2.5T) + pepp0454a + Player's Edge Plus (PP0454) Bonus Poker Deluxe (set 2) - pickwinv1 - Pick 'n Win (Version 2.9R Dual) + pepp0455 + Player's Edge Plus (PP0455) Joker Poker - pickwinvt - Pick 'n Win (Version 2.8T, Dual) + pepp0458 + Player's Edge Plus (PP0458) Joker Poker (Aces or Better) - pignewt - Pig Newton (version C) + pepp0459 + Player's Edge Plus (PP0459) Joker Poker - pignewta - Pig Newton (version A) + pepp0467 + Player's Edge Plus (PP0467) 4 of a Kind Bonus Poker - pigout - Pig Out: Dine Like a Swine! (set 1) + pepp0472 + Player's Edge Plus (PP0472) Deuces Wild Poker - pigouta - Pig Out: Dine Like a Swine! (set 2) + pepp0488 + Player's Edge Plus (PP0488) Standard Draw Poker (Arizona Charlie's) - pigskin - Pigskin 621AD (rev 1.1K 8/01/90) + pepp0508 + Player's Edge Plus (PP0508) Loose Deuce Deuces Wild! Poker - pigskina - Pigskin 621AD (rev 2.0 7/06/90) + pepp0509 + Player's Edge Plus (PP0509) Standard Draw Poker - pigskinb - Pigskin 621AD (rev 1.1 6/05/90) + pepp0510 + Player's Edge Plus (PP0510) Standard Draw Poker - pimbal - Pimbal (Pinball 3000) + pepp0514 + Player's Edge Plus (PP0514) Double Bonus Poker (set 1) - pinball - Pinball + pepp0514a + Player's Edge Plus (PP0514) Double Bonus Poker (set 2) - pinbo - Pinbo (set 1) + pepp0514b + Player's Edge Plus (PP0514) Double Bonus Poker (set 3) - pinboa - Pinbo (set 2) + pepp0515 + Player's Edge Plus (PP0515) Double Bonus Poker (set 1) - pinbos - Pinbo (bootleg) + pepp0515a + Player's Edge Plus (PP0515) Double Bonus Poker (set 2) - pinchamp - Pinball Champ + pepp0515b + Player's Edge Plus (PP0515) Double Bonus Poker (set 3) - pinchamp7 - Pinball Champ (7 digits) + pepp0515c + Player's Edge Plus (PP0515) Double Bonus Poker (set 4) - pinchamp7g - Pinball Champ (7 digits German speech) + pepp0516 + Player's Edge Plus (PP0516) Double Bonus Poker (set 1) - pinchamp7i - Pinball Champ (7 digits Italian speech) + pepp0516a + Player's Edge Plus (PP0516) Double Bonus Poker (set 2) - pinchampg - Pinball Champ (German speech) + pepp0516b + Player's Edge Plus (PP0516) Double Bonus Poker (set 3) - pinchampi - Pinball Champ (Italian speech) + pepp0516c + Player's Edge Plus (PP0516) Double Bonus Poker (International) - pinclown - Clown (Inder) + pepp0526 + Player's Edge Plus (PP0526) Deuces Wild Poker - pingpong - Konami's Ping-Pong + pepp0531 + Player's Edge Plus (PP0531) Joker Poker - pinkiri8 - Pinkiri 8 + pepp0536 + Player's Edge Plus (PP0536) Joker Poker - pinkswts - Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER....) + pepp0538 + Player's Edge Plus (PP0538) Double Bonus Poker - pinkswtsa - Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER...) + pepp0540 + Player's Edge Plus (PP0540) Double Bonus Poker - pinkswtsb - Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER.) + pepp0542 + Player's Edge Plus (PP0542) One Eyed Jacks Wild Poker (CG2243) - pinkswtsx - Pink Sweets: Ibara Sorekara (2006/xx/xx MASTER VER.) + pepp0542a + Player's Edge Plus (PP0542) One Eyed Jacks Wild Poker (CG2020) - pinpool - Pinball Pool + pepp0542b + Player's Edge Plus (PP0542) One Eyed Jacks Wild Poker (CG1199) - pipedrm - Pipe Dream (World) + pepp0550 + Player's Edge Plus (PP0550) Joker Poker (Two Pair or Better, set 1) - pipedrmj - Pipe Dream (Japan) + pepp0550a + Player's Edge Plus (PP0550) Joker Poker (Two Pair or Better, set 2) - pipedrmt - Pipe Dream (Taiwan) + pepp0550b + Player's Edge Plus (PP0550) Joker Poker (Two Pair or Better, set 3) - pipedrmu - Pipe Dream (US) + pepp0555 + Player's Edge Plus (PP0555) Standard Draw Poker - pipeline - Pipeline + pepp0559 + Player's Edge Plus (PP0559) Joker Poker (Aces or Better) - pipibibs - Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 1) + pepp0562 + Player's Edge Plus (PP0562) 10's or Better - pipibibsa - Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 2) + pepp0568 + Player's Edge Plus (PP0568) Joker Poker - pipibibsbl - Pipi & Bibis / Whoopee!! (bootleg) + pepp0585 + Player's Edge Plus (PP0585) Standard Draw Poker - pipibibsp - Pipi & Bibis / Whoopee!! (prototype) + pepp0587 + Player's Edge Plus (PP0587) Standard Draw Poker - pir2001 - Pirate 2001 (Version 2.5E Dual) + pepp0596 + Player's Edge Plus (PP0596) Spades Sequential Royal Double Bonus Poker - pir2001b1 - Pirate 2001 (Version 2.5R, set 1) + pepp0598 + Player's Edge Plus (PP0598) Hearts Sequential Royal Double Bonus Poker - pir2001bx - Pirate 2001 (Version 2.40XT, set 1) + pepp0711 + Player's Edge Plus (PP0711) Bonus Poker Deluxe - pir2001d1 - Pirate 2001 (Version 2.5R, set 2) + pepp0713 + Player's Edge Plus (PP0713) Bonus Poker Deluxe - pir2001dx - Pirate 2001 (Version 2.40XT, set 2) + pepp0725 + Player's Edge Plus (PP0725) Double Bonus Poker (set 1) - pir2001o - Pirate 2001 (Version 2.3N) + pepp0725a + Player's Edge Plus (PP0725) Double Bonus Poker (set 2) - pir2001o2 - Pirate 2001 (Version 2.3) + pepp0726 + Player's Edge Plus (PP0726) Double Bonus Poker - pir2001o3 - Pirate 2001 (Version 2.20XT) + pepp0728 + Player's Edge Plus (PP0728) Double Bonus Poker - pir2001v1 - Pirate 2001 (Version 2.5R Dual) + pepp0733 + Player's Edge Plus (PP0733) Double Aces and Faces Bonus Poker - pir2001vx - Pirate 2001 (Version 2.40XT Dual) + pepp0750 + Player's Edge Plus (PP0750) Standard Draw Poker - pir2002 - Pirate 2002 (Version 2.0E Dual) + pepp0757 + Player's Edge Plus (PP0757) Double Down Stud Joker Poker - pir2002b1 - Pirate 2002 (Version 2.0R, set 1) + pepp0760 + Player's Edge Plus (PP0760) Double Down Stud Poker - pir2002bx - Pirate 2002 (Version 1.90XT, set 1) + pepp0763 + Player's Edge Plus (PP0763) 4 of a Kind Bonus Poker - pir2002d1 - Pirate 2002 (Version 2.0R, set 2) + pepp0764 + Player's Edge Plus (PP0764) 4 of a Kind Bonus Poker - pir2002dx - Pirate 2002 (Version 1.90XT, set 2) + pepp0775 + Player's Edge Plus (PP0775) Royal Deuces Poker?? - pir2002o - Pirate 2002 (Version 1.8N) + pepp0797 + Player's Edge Plus (PP0797) One Eyed Jacks Wild Poker - pir2002o2 - Pirate 2002 (Version 1.8) + pepp0812 + Player's Edge Plus (PP0812) Deuces Joker Wild Poker - pir2002o3 - Pirate 2002 (Version 1.70XT) + pepp0816 + Player's Edge Plus (PP0816) Treasure Chest Poker - pir2002v1 - Pirate 2002 (Version 2.0R Dual) + pepper2 + Pepper II (version 8) - pir2002vx - Pirate 2002 (Version 1.90XT Dual) + pepper27 + Pepper II (version 7) - piranha - Piranha + peps0014 + Player's Edge Plus (PS0014) Super Joker Slots - piranhah - Piranha (hack) + peps0015 + Player's Edge Plus (PS0015) Super Joker Slots - piranhao - Piranha (older) + peps0021 + Player's Edge Plus (PS0021) Red White & Blue Slots - pirate2 - Pirate 2 (061005 World) + peps0022 + Player's Edge Plus (PS0022) Red White & Blue Slots - pirate2_2 - Pirate 2 (070126 Russia) + peps0040 + Player's Edge Plus (PS0040) Jackpot Jungle Slots - pirate2_2a - Pirate 2 (bootleg, 070126, banking address hack) + peps0041 + Player's Edge Plus (PS0041) Jackpot Jungle Slots - pirate2_3 - Pirate 2 (090528 Lottery) + peps0042 + Player's Edge Plus (PS0042) Double Diamond Slots - pirate2_4 - Pirate 2 (090730 Entertainment) + peps0043 + Player's Edge Plus (PS0043) Double Diamond Slots - pirate2a - Pirate 2 (bootleg, 061005, banking address hack set 1) + peps0044 + Player's Edge Plus (PS0044) Red White & Blue Slots - pirate2b - Pirate 2 (bootleg, 061005, banking address hack set 2) + peps0045 + Player's Edge Plus (PS0045) Red White & Blue Slots - pirate2c - Pirate 2 (bootleg, 061005, banking address hack, changed version text set 1) + peps0047 + Player's Edge Plus (PS0047) Wild Cherry Slots - pirate2d - Pirate 2 (bootleg, 061005, banking address hack, changed version text set 2) + peps0048 + Player's Edge Plus (PS0048) Double Jackpot Slots - pirate2e - Pirate 2 (bootleg, 061005, banking address hack, changed version text set 3) + peps0070 + Player's Edge Plus (PS0070) Hurricane Slots - pirate2f - Pirate 2 (bootleg, 061005, VIDEO GAME-1 PR01) + peps0086 + Player's Edge Plus (PS0086) Earth Quake Slots - pirate2g - Pirate 2 (bootleg, 061005, LOTTOGAME (I)) + peps0090 + Player's Edge Plus (PS0090) Gold, Silver & Bronze Slots - pirate2h - Pirate 2 (bootleg, 061005, LOTOS PR01) + peps0092 + Player's Edge Plus (PS0092) Wild Cherry Slots - pirate_2 - Pirate (060210 World) + peps0205 + Player's Edge Plus (PS0205) Red White & Blue Slots - pirate_3 - Pirate (060803 World) + peps0206 + Player's Edge Plus (PS0206) Red White & Blue Slots - pirate_4 - Pirate (070412 Russia) + peps0207 + Player's Edge Plus (PS0207) Red White & Blue Slots - pirates - Pirates + peps0239 + Player's Edge Plus (PS0239) Jackpot Jewels Slots - piratetr - Pirate Treasure + peps0267 + Player's Edge Plus (PS0267) Spin Til You Win Slots - pirati - Pirati + peps0271 + Player's Edge Plus (PS0271) Spin Til You Win Slots - piratpet - Pirate Pete + peps0275 + Player's Edge Plus (PS0275) 4th of July Slots (set 1) - pirpok2 - Pirate Poker II (Version 2.4E Dual) + peps0275a + Player's Edge Plus (PS0275) 4th of July Slots (set 2) - pirpok2b1 - Pirate Poker II (Version 2.2R, set 1) + peps0280 + Player's Edge Plus (PS0280) 4th of July Slots (set 1) - pirpok2d1 - Pirate Poker II (Version 2.2R, set 2) + peps0280a + Player's Edge Plus (PS0280) 4th of July Slots (set 2) - pirpok2o - Pirate Poker II (Version 2.0) + peps0291 + Player's Edge Plus (PS0291) Haywire Slots - pirpok2v1 - Pirate Poker II (Version 2.2R Dual) + peps0296 + Player's Edge Plus (PS0296) Haywire Slots - pisces - Pisces + peps0298 + Player's Edge Plus (PS0298) Double Diamond Slots - piscesb - Pisces (bootleg) + peps0308 + Player's Edge Plus (PS0308) Double Jackpot Slots - pistoldm - Pistol Daimyo no Bouken (Japan) + peps0358 + Player's Edge Plus (PS0358) Wild Star Red White & Blue Slots - pitboss - The Pit Boss (2214-04) + peps0364 + Player's Edge Plus (PS0364) Wild Star Red White & Blue Slots - pitboss2 - Pit Boss II (9221-01C) + peps0366 + Player's Edge Plus (PS0366) Double Diamond Deluxe Slots - pitbossa - The Pit Boss (2214-03, U5-0C) + peps0372 + Player's Edge Plus (PS0372) Double Diamond Deluxe Slots - pitbossa1 - The Pit Boss (2214-03, U5-1C) + peps0373 + Player's Edge Plus (PS0373) Double Diamond Deluxe Slots - pitbossb - The Pit Boss (2214-02?) + peps0425 + Player's Edge Plus (PS0425) Sizzling Sevens Slots - pitbossc - The Pit Boss (2214-?) + peps0426 + Player's Edge Plus (PS0426) Sizzling Sevens Slots - pitbossm - Pit Boss Megastar (9244-00-01) + peps0470 + Player's Edge Plus (PS0470) Triple Diamond Slots - pitbossma - Pit Boss Megastar (9243-00-01) + peps0581 + Player's Edge Plus (PS0581) Red White & Blue Slots - pitbosss - Pit Boss Superstar (9221-10-00B) + peps0615 + Player's Edge Plus (PS0615) Chaos Slots - pitbosssa - Pit Boss Superstar (9221-10-00A) + peps0623 + Player's Edge Plus (PS0623) Black Cherry Slots - pitbosssc - Pit Boss Superstar (9221-12-01) + peps0628 + Player's Edge Plus (PS0628) Double Black Jack Slots - pitfall2 - Pitfall II (315-5093) + peps0629 + Player's Edge Plus (PS0629) Double Hot Peppers Slots - pitfall2a - Pitfall II (315-5093, Flicky Conversion) + peps0631 + Player's Edge Plus (PS0631) Wild Star Red White & Blue Slots - pitfall2u - Pitfall II (not encrypted) + peps0708 + Player's Edge Plus (PS0708) Double Cherry Bar Slots - pitfight - Pit Fighter (rev 9) + peps0716 + Player's Edge Plus (PS0716) River Gambler Slots - pitfight3 - Pit Fighter (rev 3) + peps0722 + Player's Edge Plus (PS0722) River Gambler Slots - pitfight4 - Pit Fighter (rev 4) + pepsiman + PEPSI Man - pitfight5 - Pit Fighter (rev 5) + percuss + The Percussor - pitfight6 - Pit Fighter (rev 6) + perestro + Perestroika Girls - pitfight7 - Pit Fighter (rev 7) + perestrof + Perestroika Girls (Fuuki license) - pitfightb - Pit Fighter (bootleg) + perfect + Perfect Game (Russian) - pitfightj - Pit Fighter (Japan, 2 players) + perfrman + Performan (Japan) - pitnrun - Pit & Run - F-1 Race (set 1) + perfrmanu + Performan (US) - pitnruna - Pit & Run - F-1 Race (set 2) + perfrmau + Performan (US) - pjustic - Moero Justice Gakuen (JPN) / Project Justice (USA, EXP, KOR, AUS) (Rev A) + pesadelo + Pesadelo (bootleg of Konami Knightmare) - pkgnsh - Pachinko Gindama Shoubu (Japan) + peset001 + Player's Edge Plus (SET001) Set Chip - pkgnshdx - Pachinko Gindama Shoubu DX (Japan) + peset004 + Player's Edge Plus (SET004) Set Chip - pkladies - Poker Ladies + peset012 + Player's Edge Plus (SET012) Set Chip - pkladiesbl - Poker Ladies (Censored bootleg) + peset022 + Player's Edge Plus (SET022) Set Chip - pkladiesl - Poker Ladies (Leprechaun ver. 510) + peset033 + Player's Edge Plus (SET033) Set Chip - pkladiesla - Poker Ladies (Leprechaun ver. 401) + peset038 + Player's Edge Plus (SET038) Set Chip - pkrdewin - Poker De Win + peset100 + Player's Edge Plus (SET100) Set Chip - pkrmast - Poker Master (set 1) + peset117 + Player's Edge Plus (SET117) Set Chip - pkrmasta - Poker Master (set 2) + pesta + Pro Evolution Soccer The Arcade (ver EAA) - pkrno_l1 - Pokerino (L-1) + pestplce + Pest Place - pkscram - PK Scramble + petaco + Petaco - pktet346 - PK Tetris (v346I) + petaco2 + Petaco 2 - pktgaldx - Pocket Gal Deluxe (Euro v3.00) + petacon + Petaco (new hardware) - pktgaldxb - Pocket Gal Deluxe (Euro v3.00, bootleg) + petacona + Petaco (new hardware, alternate set) - pktgaldxj - Pocket Gal Deluxe (Japan v3.00) + peterpak + Peter Pack Rat - pkunwar - Penguin-Kun Wars (US) + petshop + Pet Shop (0100731V, NSW/ACT) - pkunwarj - Penguin-Kun Wars (Japan) + petshopa + Pet Shop (0100679V, NSW/ACT) - platoon - Vs. Platoon + pettanp + Pettan Pyuu (Japan) - play_a24 - Playboy 35th Anniversary (2.4) + pex0002p + Player's Edge Plus (X000002P+XP000038) Standard Draw Poker - playball - PlayBall! (prototype) + pex0002pa + Player's Edge Plus (X000002P+XP000006) Standard Draw Poker - playboy - Playboy + pex0006k + Player's Edge Plus (X000006K+XK000001) Keno - playboyf - Playboy (5.00 France) + pex0006p + Player's Edge Plus (X000006P+XP000038) Standard Draw Poker - playboyf_203 - Playboy (2.03 France) + pex0013k + Player's Edge Plus (X000013K+XK000011) Keno - playboyf_300 - Playboy (3.00 France) + pex0013ka + Player's Edge Plus (X000013K+XK000012) Keno - playboyf_303 - Playboy (3.03 France) + pex0040p + Player's Edge Plus (X000040P+XP000038) Standard Draw Poker - playboyf_401 - Playboy (4.01 France) + pex0042p + Player's Edge Plus (X000042P+XP000038) 10's or Better - playboyg - Playboy (5.00 Germany) + pex0045p + Player's Edge Plus (X000045P+XP000038) 10's or Better - playboyg_203 - Playboy (2.03 Germany) + pex0046p + Player's Edge Plus (X000046P+XP000038) 10's or Better - playboyg_300 - Playboy (3.00 Germany) + pex0053p + Player's Edge Plus (X000053P+XP000038) Joker Poker (Aces or Better) - playboyg_303 - Playboy (3.03 Germany) + pex0054p + Player's Edge Plus (X000054P+XP000038) Deuces Wild Poker - playboyg_401 - Playboy (4.01 Germany) + pex0055p + Player's Edge Plus (X000055P+XP000019) Deuces Wild Poker - playboyi - Playboy (5.00 Italy) + pex0055pa + Player's Edge Plus (X000055P+XP000022) Deuces Wild Poker - playboyi_203 - Playboy (2.03 Italy) + pex0055pb + Player's Edge Plus (X000055P+XP000023) Deuces Wild Poker - playboyi_300 - Playboy (3.00 Italy) + pex0055pc + Player's Edge Plus (X000055P+XP000028) Deuces Wild Poker - playboyi_303 - Playboy (3.03 Italy) + pex0055pd + Player's Edge Plus (X000055P+XP000035) Deuces Wild Poker - playboyi_401 - Playboy (4.01 Italy) + pex0055pe + Player's Edge Plus (X000055P+XP000038) Deuces Wild Poker - playboyl - Playboy (5.00 Spain) + pex0055pf + Player's Edge Plus (X000055P+XP000040) Deuces Wild Poker - playboyl_203 - Playboy (2.03 Spain) + pex0055pg + Player's Edge Plus (X000055P+XP000048) Deuces Wild Poker - playboyl_300 - Playboy (3.00 Spain) + pex0055ph + Player's Edge Plus (X000055P+XP000055) Deuces Wild Poker - playboyl_303 - Playboy (3.03 Spain) + pex0055pi + Player's Edge Plus (X000055P+XP000063) Deuces Wild Poker - playboyl_401 - Playboy (4.01 Spain) + pex0055pj + Player's Edge Plus (X000055P+XP000075) Deuces Wild Poker - playboys - Playboy (5.00) + pex0055pk + Player's Edge Plus (X000055P+XP000079) Deuces Wild Poker - playboys_203 - Playboy (2.03) + pex0055pl + Player's Edge Plus (X000055P+XP000094) Deuces Wild Poker - playboys_300 - Playboy (3.00) + pex0055pm + Player's Edge Plus (X000055P+XP000095) Deuces Wild Poker - playboys_303 - Playboy (3.03) + pex0055pn + Player's Edge Plus (X000055P+XP000098) Deuces Wild Poker - playboys_401 - Playboy (4.01) + pex0055po + Player's Edge Plus (X000055P+XP000102) Deuces Wild Poker - playch10 - PlayChoice-10 BIOS + pex0055pp + Player's Edge Plus (X000055P+XP000104) Deuces Wild Poker - playnew - Playboy (ARM7 Sound Board) + pex0055pq + Player's Edge Plus (X000055P+XP000109) Deuces Wild Poker - plegends - Gogetsuji Legends (US, Ver. 95/06/20) + pex0055pr + Player's Edge Plus (X000055P+XP000126) Deuces Wild Poker - plegendsj - Gouketsuji Gaiden - Saikyou Densetsu (Japan, Ver. 95/06/20) + pex0055ps + Player's Edge Plus (X000055P+XP000132) Deuces Wild Poker - pleiadbl - Pleiads (bootleg set 1) + pex0055pt + Player's Edge Plus (X000055P+XP000137) Deuces Wild Poker - pleiadce - Pleiads (Centuri) + pex0057p + Player's Edge Plus (X000057P+XP000038) Deuces Wild Poker - pleiads - Pleiads (Tehkan) + pex0057pa + Player's Edge Plus (X000057P+XP000038) Deuces Wild Poker (The Orleans) - pleiadsb2 - Pleiads (bootleg set 2) + pex0057pb + Player's Edge Plus (X000057P+XP000038) Deuces Wild Poker (The Fun Ships) - plgirls - Play Girls + pex0057pc + Player's Edge Plus (X000057P+XP000038) Deuces Wild Poker (Horseshoe) - plgirls2 - Play Girls 2 + pex0057pd + Player's Edge Plus (X000057P+XP000038) Deuces Wild Poker (The Wild Wild West Casino) - plotting - Plotting (World set 1) + pex0057pe + Player's Edge Plus (X000057P+XP000038) Deuces Wild Poker (Sunset Station Hotel-Casino) - plottinga - Plotting (World set 2, protected) + pex0057pf + Player's Edge Plus (X000057P+XP000038) Deuces Wild Poker (Stratosphere Players Club) - plottingb - Plotting (World set 3, earliest version) + pex0057pg + Player's Edge Plus (X000057P+XP000038) Deuces Wild Poker (MGM Grand Casino) - plottingu - Plotting (US) + pex0060p + Player's Edge Plus (X000060P+XP000038) Standard Draw Poker - plsmaswd - Plasma Sword: Nightmare of Bilstein (USA 980316) + pex0124p + Player's Edge Plus (X000124P+XP000038) Deuces Wild Poker - plsmaswda - Plasma Sword: Nightmare of Bilstein (Asia 980316) + pex0150p + Player's Edge Plus (X000150P+XP000038) Standard Draw Poker - pltkids - Pilot Kids (Model 2B, Revision A) + pex0158p + Player's Edge Plus (X000158P+XP000038) 4 of a Kind Bonus Poker - pltkidsa - Pilot Kids (Model 2A) + pex0171p + Player's Edge Plus (X000171P+XP000038) Joker Poker - plumppop - Plump Pop (Japan) + pex0188p + Player's Edge Plus (X000188P+XP000038) Standard Draw Poker - plusalph - Plus Alpha + pex0190p + Player's Edge Plus (X000190P+XP000038) Deuces Wild Poker - plygonet - Polygonet Commanders (ver UAA) + pex0197p + Player's Edge Plus (X000197P+XP000038) Standard Draw Poker - pma - PMA Poker + pex0203p + Player's Edge Plus (X000203P+XP000038) 4 of a Kind Bonus Poker - pmpoker - PlayMan Poker (German) + pex0224p + Player's Edge Plus (X000224P+XP000038) Deuces Wild Poker - pmv112 - Pinball Magic + pex0225p + Player's Edge Plus (X000225P+XP000079) Dueces Joker Wild Poker - pmv112r - Pinball Magic (Redemption) + pex0242p + Player's Edge Plus (X000242P+XP000038) Deuces Wild Poker - pnchmn - Punch Mania: Hokuto No Ken (GQ918 VER. JAB) + pex0265p + Player's Edge Plus (X000265P+XP000038) 4 of a Kind Bonus Poker - pnchmn2 - Punch Mania 2: Hokuto No Ken (GQA09 JAA) + pex0291p + Player's Edge Plus (X000291P+XP000038) Deuces Wild Poker - pnchmna - Punch Mania: Hokuto No Ken (GQ918 VER. JAB ALT CD) + pex0403p + Player's Edge Plus (X000403P+XP000013) 4 of a Kind Bonus Poker - pnickj - Pnickies (Japan 940608) + pex0417p + Player's Edge Plus (X000417P+XP000038) Deuces Wild Poker - pnkpnthr - Pink Panther + pex0426p + Player's Edge Plus (X000426P+XP000038) Joker Poker - pntnpuzl - Paint & Puzzle + pex0430p + Player's Edge Plus (X000430P+XP000079) Dueces Joker Wild Poker - pnyaa - Pochi and Nyaa + pex0434p + Player's Edge Plus (X000434P+XP000038) Bonus Poker Deluxe - pocketrc - Pocket Racer (Japan, PKR1/VER.B) + pex0447p + Player's Edge Plus (X000447P+XP000038) Standard Draw Poker - podrace - Star Wars Pod Racer + pex0449p + Player's Edge Plus (X000449P+XP000038) Standard Draw Poker - poitto - Poitto! + pex0451p + Player's Edge Plus (X000451P+XP000038) Bonus Poker Deluxe - poizone - Poizone + pex0452p + Player's Edge Plus (X000452P+XP000038) Double Deuces Wild Poker - pokasuka - Pokasuka Ghost + pex0454p + Player's Edge Plus (X000454P+XP000038) Bonus Poker Deluxe - pokechmp - Poke Champ + pex0455p + Player's Edge Plus (X000455P+XP000038) Joker Poker - poker41 - Four in One Poker + pex0458p + Player's Edge Plus (X000458P+XP000038) Joker Poker (Aces or Better) - poker52 - Poker 52 (Ver. 1.2) + pex0459p + Player's Edge Plus (X000459P+XP000038) Joker Poker - poker72 - Poker Monarch (v2.50) + pex0459pa + Player's Edge Plus (X000459P+XP000155) Joker Poker - poker91 - Poker 91 + pex0489p + Player's Edge Plus (X000489P+XP000038) Double Down Stud Deuces Wild Poker - pokerdub - unknown French poker game + pex0508p + Player's Edge Plus (X000508P+XP000038) Loose Deuce Deuces Wild! Poker - pokerduc - unknown encrypted poker game + pex0514p + Player's Edge Plus (X000514P+XP000038) Double Bonus Poker - pokermon - Mundial/Mondial (Italian/French) + pex0515p + Player's Edge Plus (X000515P+XP000038) Double Bonus Poker - pokeroul - Poker Roulette (Version 8.22) + pex0516p + Player's Edge Plus (X000516P+XP000038) Double Bonus Poker - pokersis - unknown Sisteme France Poker + pex0536p + Player's Edge Plus (X000536P+XP000038) Joker Poker - pokio - Pokio (Dutch, Game Card 95-750-278) + pex0537p + Player's Edge Plus (X000537P+XP000038) Standard Draw Poker - pokonl97 - Poker Only '97 (ver. 3.3) + pex0550p + Player's Edge Plus (X000550P+XP000119) Joker Poker (Two Pair or Better) - pokrdice - Poker Dice + pex0556p + Player's Edge Plus (X000556P+XP000038) Dueces Joker Wild Poker - polar - Polar Explorer + pex0557p + Player's Edge Plus (X000557P+XP000119) Standard Draw Poker - polaris - Polaris (Latest version) + pex0568p + Player's Edge Plus (X000568P+XP000038) Joker Poker - polarisa - Polaris (First revision) + pex0578p + Player's Edge Plus (X000578P+XP000038) Standard Draw Poker - polarisbr - Polaris (Brazil) + pex0581p + Player's Edge Plus (X000581P+XP000038) 4 of a Kind Bonus Poker - polariso - Polaris (Original version) + pex0588p + Player's Edge Plus (X000588P+XP000038) Joker Poker - polepos - Pole Position (World) + pex0725p + Player's Edge Plus (X000725P+XP000038) Double Bonus Poker - polepos2 - Pole Position II (Japan) + pex0726p + Player's Edge Plus (X000726P+XP000038) Double Bonus Poker - polepos2a - Pole Position II (Atari) + pex0727p + Player's Edge Plus (X000727P+XP000038) Double Bonus Poker - polepos2b - Pole Position II (bootleg) + pex0763p + Player's Edge Plus (X000763P+XP000038) 4 of a Kind Bonus Poker - polepos2bi - Gran Premio F1 (Italian bootleg of Pole Position II) + pex0764p + Player's Edge Plus (X000764P+XP000038) 4 of a Kind Bonus Poker - poleposa1 - Pole Position (Atari version 1) + pex0827s + Player's Edge Plus (X000827S+XS000002) Red, White & Blue Slots - poleposa2 - Pole Position (Atari version 2) + pex0838s + Player's Edge Plus (X000838S+XS000002) Five Times Pay Slots - poleposj - Pole Position (Japan) + pex0841s + Player's Edge Plus (X000841S+XS000002) Five Times Pay Slots - poleposn - Pole Position (Sonic) + pex0846s + Player's Edge Plus (X000846S+XS000006) Wild Star Red White & Blue Slots - polic_l2 - Police Force (LA-2) + pex0998s + Player's Edge Plus (X000998S+XS000006) Triple Triple Diamond Slots - polic_l3 - Police Force (LA-3) + pex1087s + Player's Edge Plus (X001087S+XS000006) Double Double Diamond Slots - polic_l4 - Police Force (LA-4) + pex2002p + Player's Edge Plus (X002002P+XP000038) Double Double Bonus Poker - policetr - Police Trainer (Rev 1.3) + pex2010p + Player's Edge Plus (X002010P+XP000038) Nevada Bonus Poker - policetr10 - Police Trainer (Rev 1.0) + pex2016p + Player's Edge Plus (X002016P+XP000038) Full House Bonus Poker - policetr11 - Police Trainer (Rev 1.1) + pex2017p + Player's Edge Plus (X002017P+XP000038) Full House Bonus Poker - policetr13a - Police Trainer (Rev 1.3B Newer) + pex2018p + Player's Edge Plus (X002018P+XP000038) Full House Bonus Poker - policetr13b - Police Trainer (Rev 1.3B) + pex2021p + Player's Edge Plus (X002021P+XP000038) Lucky Deal Poker - pollux - Pollux (set 1) + pex2024p + Player's Edge Plus (X002024P+XP000119) Double Bonus Poker - polluxa - Pollux (set 2) + pex2025p + Player's Edge Plus (X002025P+XP000019) Deuces Wild Bonus Poker - polluxa2 - Pollux (set 3) + pex2026p + Player's Edge Plus (X002026P+XP000019) Deuces Wild Bonus Poker - polynetw - Poly-Net Warriors (ver JAA) + pex2027p + Player's Edge Plus (X002027P+XP000019) Deuces Wild Bonus Poker - polyplay - Poly-Play + pex2028p + Player's Edge Plus (X002028P+XP000019) Deuces Wild Bonus Poker - polystar - Tobe! Polystars (ver JAA) + pex2029p + Player's Edge Plus (X002029P+XP000019) Deuces Wild Bonus Poker - pomp_l1 - Pompeii (Shuffle) (L-1) + pex2031p + Player's Edge Plus (X002031P+XP000038) Lucky Deal Poker - pompingw - Pomping World (Japan) + pex2033p + Player's Edge Plus (X002033P+XP000038) White Hot Aces Poker - ponchin - Mahjong Pon Chin Kan (Japan set 1) + pex2034p + Player's Edge Plus (X002034P+XP000038) White Hot Aces Poker - ponchina - Mahjong Pon Chin Kan (Japan set 2) + pex2035p + Player's Edge Plus (X002035P+XP000038) White Hot Aces Poker - pong - Pong (Rev E) external + pex2036p + Player's Edge Plus (X002036P+XP000038) White Hot Aces Poker - pongf - Pong (Rev E) + pex2037p + Player's Edge Plus (X002037P+XP000038) Nevada Bonus Poker - ponpoko - Ponpoko + pex2038p + Player's Edge Plus (X002038P+XP000038) Nevada Bonus Poker - ponpokov - Ponpoko (Venture Line) + pex2039p + Player's Edge Plus (X002039P+XP000038) Nevada Bonus Poker - pontoon - Pontoon (FD1094 317-0153) + pex2040p + Player's Edge Plus (X002040P+XP000038) Nevada Bonus Poker - ponttehk - Pontoon (Tehkan) + pex2042p + Player's Edge Plus (X002042P+XP000038) Triple Bonus Poker - pool10 - Pool 10 (Italian, set 1) + pex2043p + Player's Edge Plus (X002043P+XP000038) Triple Bonus Poker - pool10b - Pool 10 (Italian, set 2) + pex2044p + Player's Edge Plus (X002044P+XP000038) Triple Bonus Poker - pool10c - Pool 10 (Italian, set 3) + pex2045p + Player's Edge Plus (X002045P+XP000038) Triple Bonus Poker - pool10d - Pool 10 (Italian, set 4) + pex2066p + Player's Edge Plus (X002066P+XP000038) Double Double Bonus Poker - pool10e - Pool 10 (Italian, Dino 4 hardware, encrypted) + pex2067p + Player's Edge Plus (X002067P+XP000038) Double Double Bonus Poker - pool10f - Pool 10 (Italian, set 5) + pex2068p + Player's Edge Plus (X002068P+XP000038) Double Double Bonus Poker - pool10g - Pool 10 (Italian, set 6) + pex2069p + Player's Edge Plus (X002069P+XP000038) Double Double Bonus Poker - pool10h - Pool 10 (Italian, set 7) + pex2070p + Player's Edge Plus (X002070P+XP000038) Double Double Bonus Poker - pool10i - Pool 10 (Italian, set 8) + pex2111p + Player's Edge Plus (X002111P+XP000038) 4 of a Kind Bonus Poker (with Seq Royal Flush) - pool_l6 - Pool Sharks (LA-6) + pex2121p + Player's Edge Plus (X002121P+XP000038) Standard Draw Poker - pool_l7 - Pool Sharks (LA-7) + pex2121pa + Player's Edge Plus (X002121P+XP000037) Standard Draw Poker - pool_le2 - Pool Sharks (LE-2) + pex2127p + Player's Edge Plus (X002127P+XP000043) Double Bonus Poker featuring 'Your Property' Royals - pool_p7 - Pool Sharks (PA-7) + pex2134p + Player's Edge Plus (X002134P+XP000043) Faces 'n' Deuces Double Bonus Poker - poolcham - Pool Champion + pex2143p + Player's Edge Plus (X002143P+XP000043) Joker's Revenge Poker - poolchama - Pool Champion (alternate sound) + pex2149p + Player's Edge Plus (X002149P+XP000038) Triple Bonus Poker - poolchami - Pool Champion (Italian speech) + pex2150p + Player's Edge Plus (X002150P+XP000038) Triple Bonus Poker - poolshrk - Poolshark + pex2152p + Player's Edge Plus (X002152P+XP000043) Blackjack Poker - pootan - Pootan + pex2172p + Player's Edge Plus (X002172P+XP000038) Ace$ Bonus Poker - pooyan - Pooyan + pex2172pa + Player's Edge Plus (X002172P+XP000038) Ace$ Bonus Poker (The Fun Ships) - pooyans - Pooyan (Stern Electronics) + pex2173p + Player's Edge Plus (X002173P+XP000038) Ace$ Bonus Poker - pop_hh - Popper (Hard Head bootleg) + pex2178p + Player's Edge Plus (X002178P+XP000119) Double Bonus Poker - pop_lx5 - Popeye Saves The Earth (LX-5) + pex2179p + Player's Edge Plus (X002179P+XP000119) Double Bonus Poker - pop_pa3 - Popeye Saves The Earth (PA-3) + pex2180p + Player's Edge Plus (X002180P+XP000119) Double Bonus Poker - popbingo - Pop Bingo + pex2211p + Player's Edge Plus (X002211P+XP000043) Double Double Bonus with 3 Jacks Poker - popbounc - Pop 'n Bounce / Gapporin + pex2236p + Player's Edge Plus (X002236P+XP000043) Double Double Bonus with 3 Aces Poker - popeye - Popeye (revision D) + pex2240p + Player's Edge Plus (X002240P+XP000038) Joker Poker (Two Pair or Better) - popeyebl - Popeye (bootleg) + pex2241p + Player's Edge Plus (X002241P+XP000079) 4 of a Kind Bonus Poker - popeyef - Popeye (revision F) + pex2244p + Player's Edge Plus (X002244P+XP000079) Double Bonus Poker - popeyeman - Popeye-Man + pex2245p + Player's Edge Plus (X002245P+XP000055) Standard Draw Poker - popeyeu - Popeye (revision D not protected) + pex2245pa + Player's Edge Plus (X002245P+XP000079) Standard Draw Poker - popflame - Pop Flamer (protected) + pex2247p + Player's Edge Plus (X002247P+XP000038) Standard Draw Poker - popflamea - Pop Flamer (not protected) + pex2250p + Player's Edge Plus (X002250P+XP000050) Shockwave Poker - popflameb - Pop Flamer (hack?) + pex2251p + Player's Edge Plus (X002251P+XP000050) Shockwave Poker - popflamen - Pop Flamer (bootleg on Naughty Boy PCB) + pex2252p + Player's Edge Plus (X002252P+XP000050) Shockwave Poker - popn2 - Pop'n Music 2 (ver JA-A) + pex2270p + Player's Edge Plus (X002270P+XP000053) Jackpot Poker - popn4 - Pop'n Music 4 + pex2272p + Player's Edge Plus (X002272P+XP000055) Black Jack Bonus Poker - popn5 - Pop'n Music 5 + pex2275p + Player's Edge Plus (X002275P+XP000055) Black Jack Bonus Poker - popn6 - Pop'n Music 6 + pex2276p + Player's Edge Plus (X002276P+XP000055) Black Jack Bonus Poker - popn7 - Pop'n Music 7 + pex2279p + Player's Edge Plus (X002279P+XP000057) Ace$ Bonus - popn8 - Pop'n Music 8 + pex2283p + Player's Edge Plus (X002283P+XP000057) Barbaric Decues Wild Poker - popn9 - Pop'n Music 9 (ver JAB) + pex2284p + Player's Edge Plus (X002284P+XP000057) Barbaric Decues Wild Poker - popnanm2 - Pop'n Music Animelo 2 + pex2287p + Player's Edge Plus (X002287P+XP000057) No Faces Pay the Aces Poker - popnpop - Pop'n Pop (Ver 2.07O 1998/02/09) + pex2297p + Player's Edge Plus (X002297P+XP000053) Jackpot Poker - popnpopj - Pop'n Pop (Ver 2.07J 1998/02/09) + pex2297pa + Player's Edge Plus (X002297P+XP000112) Jackpot Poker - popnpopu - Pop'n Pop (Ver 2.07A 1998/02/09) + pex2302p + Player's Edge Plus (X002302P+XP000038) Bonus Poker Deluxe - popobear - PoPo Bear + pex2303p + Player's Edge Plus (X002303P+XP000038) White Hot Aces Poker - popper - Popper + pex2306p + Player's Edge Plus (X002306P+XP000038) Triple Double Bonus Poker - popshot - Pop Shot (prototype) + pex2307p + Player's Edge Plus (X002307P+XP000038) Triple Double Bonus Poker - popspops - Pop's Pop's + pex2308p + Player's Edge Plus (X002308P+XP000038) Triple Double Bonus Poker - porky - Porky + pex2309p + Player's Edge Plus (X002309P+XP000038) Triple Double Bonus Poker - porter - Port Man (bootleg on Moon Cresta hardware) + pex2310p + Player's Edge Plus (X002310P+XP000038) Triple Double Bonus Poker - portman - Port Man + pex2312p + Player's Edge Plus (X002312P+XP000038) Triple Bonus Poker Plus - portrait - Portraits (set 1) + pex2314p + Player's Edge Plus (X002314P+XP000038) Triple Bonus Poker Plus - portraita - Portraits (set 2) + pex2315p + Player's Edge Plus (X002315P+XP000038) Triple Bonus Poker Plus - potgame - Pot Game (Italian) + pex2374p + Player's Edge Plus (X002374P+XP000038) Super Aces Poker - potgoldu - Pot O' Gold (U.S. Games, v400x?) + pex2376p + Player's Edge Plus (X002376P+XP000038) Super Double Bonus Poker - potnpkra - Jack Potten's Poker (set 2) + pex2377p + Player's Edge Plus (X002377P+XP000038) Super Double Bonus Poker - potnpkrb - Jack Potten's Poker (set 3) + pex2386p + Player's Edge Plus (X002386P+XP000038) 4 of a Kind Bonus Poker - potnpkrc - Jack Potten's Poker (set 4) + pex2412p + Player's Edge Plus (X002412P+XP000096) Standard Draw with 5 decks (Two Pair or Better) - potnpkrd - Jack Potten's Poker (set 5) + pex2419p + Player's Edge Plus (X002419P+XP000064) Deuces Wild Bonus Poker - French - potnpkre - Jack Potten's Poker (set 6) + pex2420p + Player's Edge Plus (X002420P+XP000064) Deuces Wild Bonus Poker - French - potnpkrf - Jack Potten's Poker (set 7, Royale GFX) + pex2421p + Player's Edge Plus (X002421P+XP000064) Deuces Wild Bonus Poker - French - poto_a32 - The Phantom of the Opera (3.2) + pex2440p + Player's Edge Plus (X002440P+XP000053) Deuces Wild Poker - potogold - Pot of Gold + pex2461p + Player's Edge Plus (X002461P+XP000055) Joker Poker (Two Pair or Better) - potopoto - Poto Poto (Japan) + pex2474p + Player's Edge Plus (X002474P+XP000038) Double Double Bonus Plus - pottnpkr - Jack Potten's Poker (set 1) + pex2478p + Player's Edge Plus (X002478P+XP000154) Joker Poker - French - poundfor - Pound for Pound (World) + pex2479p + Player's Edge Plus (X002479P+XP000154) Joker Poker - French - poundforj - Pound for Pound (Japan) + pex2480p + Player's Edge Plus (X002480P+XP000154) Joker Poker (Aces or Better) - French - poundforu - Pound for Pound (US) + pex2485p + Player's Edge Plus (X002485P+XP000154) Standard Draw Poker - French - pow - P.O.W. - Prisoners of War (US version 1) + pexm001p + Player's Edge Plus (XM00001P+XMP00003) Multi-Poker - powerbal - Power Balls + pexm002p + Player's Edge Plus (XM00002P+XMP00006) Multi-Poker - powerbals - Power Balls (Super Slam conversion) + pexm002pa + Player's Edge Plus (XM00002P+XMP00006) Multi-Poker (MGM Grand Detroit Casino) - powercrd - Power Card (Ver 0263, encrypted) + pexm003p + Player's Edge Plus (XM00003P+XMP00024) Multi-Poker - powerdrv - Power Drive + pexm004p + Player's Edge Plus (XM00004P+XMP00002) Multi-Poker - powerins - Power Instinct (USA) + pexm005p + Player's Edge Plus (XM00005P+XMP00004) Multi-Poker - powerinsa - Power Instinct (USA, bootleg set 1) + pexm006p + Player's Edge Plus (XM00006P+XMP00020) Multi-Poker - powerinsb - Power Instinct (USA, bootleg set 2) + pexm006pa + Player's Edge Plus (XM00006P+XMP00002) Multi-Poker (The Orleans) - powerinsj - Gouketsuji Ichizoku (Japan) + pexm007p + Player's Edge Plus (XM00007P+XMP00006) Multi-Poker - powj - Datsugoku - Prisoners of War (Japan) + pexm008p + Player's Edge Plus (XM00008P+XMP00006) Multi-Poker - powrplay - Power Play + pexm009p + Player's Edge Plus (XM00009P+XMP00002) Multi-Poker - powyak96 - Jikkyou Powerful Pro Yakyuu '96 (GV017 Japan 1.03) + pexm013p + Player's Edge Plus (XM00013P+XMP00025) Multi-Poker - powyakex - Jikkyou Powerful Pro Yakyuu EX (GX802 VER. JAB) + pexmp011 + Player's Edge Plus (XMP00011) 5-in-1 Wingboard (CG2298) - ppan - Peter Pan (bootleg of Hook) + pexmp013 + Player's Edge Plus (XMP00013) 5-in-1 Wingboard (CG2346) - Spanish - ppcar - Pang Pang Car + pexmp014 + Player's Edge Plus (XMP00014) 5-in-1 Wingboard (CG2352) - International - ppchamp - Pasha Pasha Champ Mini Game Festival (Korea) + pexmp017 + Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2298) - ppd - ParaParaDancing + pexmp017a + Player's Edge Plus (XMP00017) 5-in-1 Wingboard (CG2426) - ppking - Ping-Pong King + pexmp022 + Player's Edge Plus (XMP00022) 5-in-1 Wingboard (CG2346) - Spanish - ppmast93 - Ping Pong Masters '93 + pexmp026 + Player's Edge Plus (XMP00026) 5-in-1 Wingboard (CG2346) - Spanish - ppp - ParaParaParadise + pexmp030 + Player's Edge Plus (XMP00030) 5-in-1 Wingboard (CG2451) - ppp11 - ParaParaParadise v1.1 + pf2012 + Psychic Force 2012 - ppp1mp - ParaParaParadise 1st Mix Plus + pfevr_l2 + Pennant Fever (L-2) - ppp2nd - ParaParaParadise 2nd Mix + pfevr_p3 + Pennant Fever (P-3) - pprobe - Planet Probe (prototype?) + pfghtj + Pocket Fighter (Japan 970904) - ppsatan - Poka Poka Satan (Japan) + pgalvip + Pocket Gals V.I.P (set 1) - ppspeed - Speed Up (Spanish bootleg of Pole Position) + pgalvipa + Pocket Gals V.I.P (set 2) - pr_5xcsh - 5x Cash (Project) (PROCONN) + pgear + Powered Gear: Strategic Variant Armor Equipment (Japan 941024) - pr_7hvn - 777 Heaven (Project) (PROCONN) + pgearr1 + Powered Gear: Strategic Variant Armor Equipment (Japan 940916) - pr_7hvna - 777 Heaven (Project) (10GBP Jackpot) (PROCONN) + pgemeni + P-GeMeni (060123) - pr_7hvnb - 777 Heaven (Project) (20p 6GBP Jackpot Version 114) (PROCONN) + pgm3in1 + Shan Liang San He Yi (Flash 3-in-1) (V102 08/23/04 13:03:26) - pr_7hvnc - 777 Heaven (Project) (10p 3GBP Jackpot Version 380) (PROCONN) + pgm3in1c100 + Shan Liang San He Yi (Flash 3-in-1) (V100 07/13/04 12:09:20) - pr_7hvnd - 777 Heaven (Project) (5p 3GBP Jackpot Version 105) (PROCONN) + pgmdemo + Chaos (PGM Demo) - pr_7hvne - 777 Heaven (Project) (set 6) (PROCONN) + pgmfrog + Frog Feast (PGM) - pr_7hvnf - 777 Heaven (Project) (set 7) (PROCONN) + pgoal + Pleasure Goal / Futsal - 5 on 5 Mini Soccer (NGM-219) - pr_7hvng - 777 Heaven (Project) (set 8) (PROCONN) + phantasm + Phantasm (Japan) - pr_7hvnh - 777 Heaven (Project) (set 9) (PROCONN) + phantom + Phantom (bootleg of Spectar) - pr_7hvni - 777 Heaven (Project) (set 10) (PROCONN) + phantom2 + Phantom II - pr_7hvnj - 777 Heaven (Project) (set 11) (PROCONN) + phantoma + Phantomas (bootleg of Spectar) - pr_7hvnk - 777 Heaven (Project) (set 12) (PROCONN) + phantomp + Phantom Pays (4VXFC5431, New Zealand) - pr_7hvnl - 777 Heaven (Project) (set 13) (PROCONN) + phantpay + Phantom Pays (0500005V, NSW/ACT) - pr_7hvnm - 777 Heaven (Project) (set 14) (PROCONN) + phantpyc + Phantom Pays Classic (0101003V, NSW/ACT) - pr_7hvnn - 777 Heaven (Project) (set 15) (PROCONN) + pharfor + Pharaoh's Fortune (40000921, NSW/ACT) - pr_7hvno - 777 Heaven (Project) (set 16) (PROCONN) + pharo_l2 + Pharaoh (L-2) - pr_7hvnp - 777 Heaven (Project) (set 17) (PROCONN) + pharrier + Planet Harriers (Rev A) - pr_7hvnq - 777 Heaven (Project) (set 18) (PROCONN) + phelios + Phelios - pr_7hvnr - 777 Heaven (Project) (set 19) (PROCONN) + pheliosj + Phelios (Japan) - pr_7hvns - 777 Heaven (Project) (set 20) (PROCONN) + phklad + Klad / Labyrinth (Photon System) - pr_7hvnt - 777 Heaven (Project) (set 21) (PROCONN) + phnix_l1 + Phoenix (L-1) - pr_7hvnu - 777 Heaven (Project) (set 22) (PROCONN) + phntmshp + Phantom Ship - pr_alwy9 - Always Nine (Pcp) (set 1) (PROCONN) + phoenix + Phoenix (Amstar, set 1) - pr_alwy9a - Always Nine (Pcp) (set 2) (PROCONN) + phoenix2 + Phoenix (Amstar, set 2) - pr_barbl - Bars & Bells (Project) (PROCONN) + phoenix3 + Phoenix (T.P.N. bootleg) - pr_batls - Battleships (Project) (set 1) (PROCONN) + phoenixa + Phoenix (Centuri, set 1) - pr_batlsa - Battleships (Project) (set 2) (PROCONN) + phoenixass + Phoenix (Assa, Spanish bootleg) - pr_batlsb - Battleships (Project) (set 3) (PROCONN) + phoenixb + Phoenix (Centuri, set 2) - pr_bears - Bear Streak (set 1) (Coinworld) + phoenixc + Phoenix (Irecsa / G.G.I. Corporation) - pr_bearsa - Bear Streak (set 2) (Coinworld) + phoenixc2 + Phoenix (G.G.I. Corporation, set 1) - pr_bearsb - Bear Streak (set 3) (Coinworld) + phoenixc3 + Phoenix (G.G.I. Corporation, set 2) - pr_bearx - Bear X (Version 2.3) (Coinworld) + phoenixc4 + Phoenix (G.G.I. Corporation, set 3) - pr_bearxa - Bear X (Version 2.2) (Coinworld) + phoenixdal + Phoenix (D&L bootleg) - pr_bearxb - Bear X (Version 1.3) (Coinworld) + phoenixgu + Phoenix (G. Universal Video bootleg) - pr_bearxc - Bear X (20p set 1) (Coinworld) + phoenixha + Phoenix (Hellomat Automaten bootleg) - pr_bearxd - Bear X (20p set 2) (Coinworld) + phoenixi + Phoenix (IDI bootleg) - pr_bearxe - Bear X (10p set 1) (Coinworld) + phoenixj + Phoenix (Taito Japan) - pr_bearxf - Bear X (10p set 2) (Coinworld) + phoenixs + Phoenix (Sonic, Spanish bootleg) - pr_bearxg - Bear X (10p set 3) (Coinworld) + phoenixt + Phoenix (Taito) - pr_bearxh - Bear X (10p set 4?) (Coinworld) + phoenxp2 + Phoenix Part 2 - pr_bearxi - Bear X (10p set 5) (Coinworld) + photof + Photo Finish (bootleg?) - pr_bearxj - Bear X (code 813) (Coinworld) + photoply2k + Photo Play 2000 (v2.01) - pr_bearxk - Bear X (8GBP Token?) (Coinworld) + photoply2k1it + Photo Play 2001 (Italian) - pr_bearxl - Bear X (Version 41) (Coinworld) + photoply2k1sp + Photo Play 2001 (Spanish) - pr_bearxlp - Bear X (Version 41, Protocol) (Coinworld) + photoply2k4 + Photo Play 2004 - pr_bearxm - Bear X (Version 31) (Coinworld) + photoply2ksp + Photo Play 2000 (Spanish) - pr_bigdp + photoply98sp + Photo Play 1998 (Spanish) + + + photoply99sp + Photo Play 1999 (Spanish) + + + photopsxsp + Photo Play Spirit Xtreme (Spanish) + + + photopsxusp + Photo Play Spirit Xtreme (update, Spanish) + + + photoy2k + Photo Y2K / Chaoji Bi Yi Bi / Dajia Lai Zhao Cha / Real and Fake (ver. 105) + + + photoy2k102j + Photo Y2K / Chaoji Bi Yi Bi / Dajia Lai Zhao Cha / Real and Fake (ver. 102, Japanese Board) + + + photoy2k103j + Photo Y2K / Chaoji Bi Yi Bi / Dajia Lai Zhao Cha / Real and Fake (ver. 103, Japanese Board) + + + photoy2k104 + Photo Y2K / Chaoji Bi Yi Bi / Dajia Lai Zhao Cha / Real and Fake (ver. 104) + + + phozon + Phozon (Japan) + + + phozons + Phozon (Sidam) + + + phpython + Python (Photon System) + + + phrcraze + Phraze Craze (6221-40, U5-0A) + + + phrcrazea + Phraze Craze (6221-40, U5-0) + + + phrcrazeb + Phraze Craze (6221-40, U5-3A Expanded Questions) + + + phrcrazec + Phraze Craze (6221-40, U5-3 Expanded Questions) + + + phrcrazev + Phraze Craze (6221-45, U5-2 Vertical) + + + phtetris + Tetris (Photon System) + + + phxfant + Phoenix Fantasy (20197511, NSW/ACT) + + + piccolop + Piccolo Poker 100 + + + pickin + Pickin' + + + pickwin + Pick 'n Win (Version 2.9E Dual) + + + pickwinb1 + Pick 'n Win (Version 2.9R, set 1) + + + pickwinbt + Pick 'n Win (Version 2.8T, set 1) + + + pickwind1 + Pick 'n Win (Version 2.9R, set 2) + + + pickwindt + Pick 'n Win (Version 2.8T, set 2) + + + pickwino + Pick 'n Win (Version 2.6) + + + pickwino2 + Pick 'n Win (Version 2.5T) + + + pickwinv1 + Pick 'n Win (Version 2.9R Dual) + + + pickwinvt + Pick 'n Win (Version 2.8T, Dual) + + + piggypas + Piggy Pass (version 04.40) + + + pignewt + Pig Newton (version C) + + + pignewta + Pig Newton (version A) + + + pigout + Pig Out: Dine Like a Swine! (rev 2?) + + + pigouta + Pig Out: Dine Like a Swine! (rev 1) + + + pigskin + Pigskin 621AD (rev 1.1K 8/01/90) + + + pigskina + Pigskin 621AD (rev 2.0 7/06/90) + + + pigskinb + Pigskin 621AD (rev 1.1 6/05/90) + + + pimbal + Pimbal (Pinball 3000) + + + pinball + Pinball + + + pinbo + Pinbo (set 1) + + + pinboa + Pinbo (set 2) + + + pinbos + Pinbo (bootleg) + + + pinchamp + Pinball Champ + + + pinchamp7 + Pinball Champ (7 digits) + + + pinchamp7g + Pinball Champ (7 digits German speech) + + + pinchamp7i + Pinball Champ (7 digits Italian speech) + + + pinchampg + Pinball Champ (German speech) + + + pinchampi + Pinball Champ (Italian speech) + + + pinclown + Clown (Inder) + + + pingpong + Konami's Ping-Pong + + + pingu + Pingu's Ice Block + + + pinguinos + Pinguinos (Spanish bootleg on Pac-Man hardware) + + + pinkiri8 + Pinkiri 8 + + + pinkswts + Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER....) + + + pinkswtsa + Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER...) + + + pinkswtsb + Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER.) + + + pinkswtssc + Pink Sweets: Suicide Club (2017/10/31 SUICIDECLUB VER., bootleg) + + + pinkswtsx + Pink Sweets: Ibara Sorekara (2006/xx/xx MASTER VER.) + + + pinmoonl + Moon Light (Inder) + + + pinpool + Pinball Pool + + + pinups + Pin Ups (Ver 1.0 Rev A) + + + pipedrm + Pipe Dream (World) + + + pipedrmj + Pipe Dream (Japan) + + + pipedrmt + Pipe Dream (Taiwan) + + + pipedrmu + Pipe Dream (US) + + + pipeline + Pipeline + + + pipibibi + Pipi and Bibis - Whoopee!! (bootleg [Q]) + + + pipibibs + Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 1) + + + pipibibsa + Pipi & Bibis / Whoopee!! (Z80 sound cpu, set 2) + + + pipibibsbl + Pipi & Bibis / Whoopee!! (Ryouta Kikaku bootleg, encrypted) + + + pipibibsbl2 + Pipi & Bibis / Whoopee!! (bootleg, decrypted) + + + pipibibsbl3 + Pipi & Bibis / Whoopee!! (Ryouta Kikaku bootleg, decrypted) + + + pipibibsp + Pipi & Bibis / Whoopee!! (prototype) + + + pir2001 + Pirate 2001 (Version 2.5E Dual) + + + pir2001b1 + Pirate 2001 (Version 2.5R, set 1) + + + pir2001bx + Pirate 2001 (Version 2.40XT, set 1) + + + pir2001d1 + Pirate 2001 (Version 2.5R, set 2) + + + pir2001dx + Pirate 2001 (Version 2.40XT, set 2) + + + pir2001o + Pirate 2001 (Version 2.3N) + + + pir2001o2 + Pirate 2001 (Version 2.3) + + + pir2001o3 + Pirate 2001 (Version 2.20XT) + + + pir2001v1 + Pirate 2001 (Version 2.5R Dual) + + + pir2001vx + Pirate 2001 (Version 2.40XT Dual) + + + pir2002 + Pirate 2002 (Version 2.0E Dual) + + + pir2002b1 + Pirate 2002 (Version 2.0R, set 1) + + + pir2002bx + Pirate 2002 (Version 1.90XT, set 1) + + + pir2002d1 + Pirate 2002 (Version 2.0R, set 2) + + + pir2002dx + Pirate 2002 (Version 1.90XT, set 2) + + + pir2002o + Pirate 2002 (Version 1.8N) + + + pir2002o2 + Pirate 2002 (Version 1.8) + + + pir2002o3 + Pirate 2002 (Version 1.70XT) + + + pir2002v1 + Pirate 2002 (Version 2.0R Dual) + + + pir2002vx + Pirate 2002 (Version 1.90XT Dual) + + + piranha + Piranha + + + piranhah + Piranha (hack) + + + piranhao + Piranha (older) + + + pirata6 + Pirates (10001511, NSW/ACT) + + + pirate + Pirate (051229 World) + + + pirate2 + Pirate 2 (061005 World) + + + pirate2_10 + Pirate 2 (110311 Entertainment B) + + + pirate2_11 + Pirate 2 (140526 Entertainment B) + + + pirate2_12 + Pirate 2 (110411 Entertainment C) + + + pirate2_2 + Pirate 2 (070126 Russia) + + + pirate2_2a + Pirate 2 (bootleg, 070126, banking address hack) + + + pirate2_3 + Pirate 2 (090528 Lottery) + + + pirate2_4 + Pirate 2 (090730 Entertainment) + + + pirate2_5 + Pirate 2 (100406 Entertainment X) + + + pirate2_6 + Pirate 2 (101209 Entertainment N) + + + pirate2_7 + Pirate 2 (110111 Entertainment A) + + + pirate2_8 + Pirate 2 (110124 Entertainment A) + + + pirate2_9 + Pirate 2 (110204 Entertainment A) + + + pirate2a + Pirate 2 (bootleg, 061005, banking address hack set 1) + + + pirate2b + Pirate 2 (bootleg, 061005, banking address hack set 2) + + + pirate2c + Pirate 2 (bootleg, 061005, banking address hack, changed version text set 1) + + + pirate2d + Pirate 2 (bootleg, 061005, banking address hack, changed version text set 2) + + + pirate2e + Pirate 2 (bootleg, 061005, banking address hack, changed version text set 3) + + + pirate2f + Pirate 2 (bootleg, 061005, VIDEO GAME-1 PR01) + + + pirate2g + Pirate 2 (bootleg, 061005, LOTTOGAME (I)) + + + pirate2h + Pirate 2 (bootleg, 061005, LOTOS PR01) + + + pirate_2 + Pirate (060210 World) + + + pirate_3 + Pirate (060803 World) + + + pirate_4 + Pirate (070412 Russia) + + + pirate_5 + Pirate (090803 Entertainment) + + + pirates + Pirates (set 1) + + + piratesb + Pirates (set 2) + + + piratesh + Pirate Ship (ver UAA) + + + piratetr + Pirate Treasure + + + pirati + Pirati + + + piratpet + Pirate Pete + + + pirpok2 + Pirate Poker II (Version 2.4E Dual) + + + pirpok2b1 + Pirate Poker II (Version 2.2R, set 1) + + + pirpok2d1 + Pirate Poker II (Version 2.2R, set 2) + + + pirpok2o + Pirate Poker II (Version 2.0) + + + pirpok2v1 + Pirate Poker II (Version 2.2R Dual) + + + pisces + Pisces + + + piscesb + Pisces (bootleg) + + + pistoldm + Pistol Daimyo no Bouken (Japan) + + + pitapat + Pitapat Puzzle + + + pitboss + The Pit Boss (2214-07, U5-0A) + + + pitboss03 + The Pit Boss (2214-03, U5-0C) + + + pitboss03a + The Pit Boss (2214-03, U5-1C) + + + pitboss03b + The Pit Boss (M4A4) + + + pitboss04 + The Pit Boss (2214-04) + + + pitboss2 + Pit Boss II (9221-01C) + + + pitbossm + Pit Boss Megastar (9244-00-01) + + + pitbossm4 + The Pit Boss (M4A1) + + + pitbossma + Pit Boss Megastar (9243-00-01) + + + pitbossps + The Pit Boss (PSB1) + + + pitbosss + Pit Boss Superstar (9221-10-00B) + + + pitbosssa + Pit Boss Superstar (9221-10-00A) + + + pitbosssc + Pit Boss Superstar (9221-12-01, California version) + + + pitbosssm + Pit Boss Superstar (9221-12-02, Minnesota version) + + + pitchhit + Pitch Hitter - Baseball Challenge + + + pitfall2 + Pitfall II (315-5093) + + + pitfall2a + Pitfall II (315-5093, Flicky Conversion) + + + pitfall2u + Pitfall II (not encrypted) + + + pitfallu + Pitfall II (not encrypted) + + + pitfigh3 + Pit Fighter (rev 3) + + + pitfighb + Pit Fighter (bootleg) + + + pitfighj + Pit Fighter (Japan, 2 players) + + + pitfight + Pit Fighter (rev 9) + + + pitfight1p2 + Pit Fighter (rev 1, 2 players) + + + pitfight2 + Pit Fighter (rev 2) + + + pitfight3 + Pit Fighter (rev 3) + + + pitfight4 + Pit Fighter (rev 4) + + + pitfight5 + Pit Fighter (rev 5) + + + pitfight6 + Pit Fighter (rev 6) + + + pitfight7 + Pit Fighter (rev 7) + + + pitfightb + Pit Fighter (bootleg) + + + pitfightj + Pit Fighter (Japan rev 3, 2 players) + + + pitnrun + Pit & Run - F-1 Race (set 1) + + + pitnruna + Pit & Run - F-1 Race (set 2) + + + pjustic + Project Justice / Moero! Justice Gakuen (Rev A) + + + pkgnsh + Pachinko Gindama Shoubu (Japan) + + + pkgnshdx + Pachinko Gindama Shoubu DX (Japan) + + + pkii_dm + unknown poker game PKII/DM + + + pkladiel + Poker Ladies (Leprechaun) + + + pkladies + Poker Ladies + + + pkladiesbl + Poker Ladies (Censored bootleg, encrypted) + + + pkladiesbl2 + Poker Ladies (Censored bootleg, not encrypted) + + + pkladiesl + Poker Ladies (Leprechaun ver. 510) + + + pkladiesla + Poker Ladies (Leprechaun ver. 401) + + + pkrdewin + Poker De Win + + + pkrmast + Poker Master (ED-1993 set 1) + + + pkrmasta + Poker Master (ED-1993 set 2) + + + pkrno_l1 + Pokerino (L-1) + + + pkscram + PK Scramble + + + pktet346 + PK Tetris (v346I) + + + pktgaldj + Pocket Gal Deluxe (Japan v3.00) + + + pktgaldx + Pocket Gal Deluxe (Euro v3.00) + + + pktgaldxa + Pocket Gal Deluxe (Asia v3.00) + + + pktgaldxb + Pocket Gal Deluxe (Euro v3.00, bootleg) + + + pktgaldxj + Pocket Gal Deluxe (Japan v3.00) + + + pkunwar + Penguin-Kun Wars (US) + + + pkunwarj + Penguin-Kun Wars (Japan) + + + platoon + Vs. Platoon + + + play2000 + Play 2000 (Super Slot & Gran Tesoro) (v7.0i) (Italy) + + + play2000_40i + Play 2000 (Super Slot & Gran Tesoro) (v4.0i) (Italy) + + + play2000_50i + Play 2000 (Super Slot & Gran Tesoro) (v5.0i) (Italy) + + + play_a24 + Playboy 35th Anniversary (2.4) + + + playball + PlayBall! (prototype) + + + playboy + Playboy + + + playboyf + Playboy (5.00 France) + + + playboyf_203 + Playboy (2.03 France) + + + playboyf_300 + Playboy (3.00 France) + + + playboyf_302 + Playboy (3.02 France) + + + playboyf_303 + Playboy (3.03 France) + + + playboyf_401 + Playboy (4.01 France) + + + playboyg + Playboy (5.00 Germany) + + + playboyg_203 + Playboy (2.03 Germany) + + + playboyg_300 + Playboy (3.00 Germany) + + + playboyg_302 + Playboy (3.02 Germany) + + + playboyg_303 + Playboy (3.03 Germany) + + + playboyg_401 + Playboy (4.01 Germany) + + + playboyi + Playboy (5.00 Italy) + + + playboyi_203 + Playboy (2.03 Italy) + + + playboyi_300 + Playboy (3.00 Italy) + + + playboyi_302 + Playboy (3.02 Italy) + + + playboyi_303 + Playboy (3.03 Italy) + + + playboyi_401 + Playboy (4.01 Italy) + + + playboyl + Playboy (5.00 Spain) + + + playboyl_203 + Playboy (2.03 Spain) + + + playboyl_300 + Playboy (3.00 Spain) + + + playboyl_302 + Playboy (3.02 Spain) + + + playboyl_303 + Playboy (3.03 Spain) + + + playboyl_401 + Playboy (4.01 Spain) + + + playboys + Playboy (5.00) + + + playboys_203 + Playboy (2.03) + + + playboys_300 + Playboy (3.00) + + + playboys_302 + Playboy (3.02) + + + playboys_303 + Playboy (3.03) + + + playboys_401 + Playboy (4.01) + + + playnew + Playboy (ARM7 Sound Board) + + + plctr13b + Police Trainer (Rev 1.3B) + + + plegends + Gogetsuji Legends (US, Ver. 95/06/20) + + + plegendsj + Gouketsuji Gaiden - Saikyou Densetsu (Japan, Ver. 95/06/20) + + + pleiadbl + Pleiads (bootleg set 1) + + + pleiadce + Pleiads (Centuri) + + + pleiads + Pleiads (Tehkan) + + + pleiadsb2 + Pleiads (bootleg set 2) + + + pleiadsi + Pleiads (Irecsa) + + + pleiadsn + Pleiads (Niemer S.A.) + + + pleiadss + Pleiads (Famaresa, Spanish bootleg) + + + plgirls + Play Girls + + + plgirls2 + Play Girls 2 + + + plgirls2b + Play Girls 2 (bootleg) + + + plotting + Plotting (World set 1) + + + plottinga + Plotting (World set 2, protected) + + + plottingb + Plotting (World set 3, earliest version) + + + plottingu + Plotting (US) + + + plsmaswd + Plasma Sword: Nightmare of Bilstein (USA 980316) + + + plsmaswda + Plasma Sword: Nightmare of Bilstein (Asia 980316) + + + plsonic4 + Play Sonic 4 + + + pltkids + Pilot Kids (Model 2B, Revision A) + + + pltkidsa + Pilot Kids (Model 2A) + + + plumppop + Plump Pop (Japan) + + + plusalph + Plus Alpha + + + plycntrchtr + PlayCenter Champions Tournament (v9.3) + + + plygonet + Polygonet Commanders (ver UAA) + + + pma + PMA Poker + + + pmpoker + PlayMan Poker (German) + + + pmv112 + Pinball Magic + + + pmv112r + Pinball Magic (Redemption) + + + pnchmn + Punch Mania: Hokuto no Ken (GQ918 VER. JAB) + + + pnchmn2 + Punch Mania 2: Hokuto no Ken (GQA09 JAA) + + + pnchmna + Punch Mania: Hokuto no Ken (GQ918 VER. JAB ALT CD) + + + pnickj + Pnickies (Japan 940608) + + + pnkpnthr + Pink Panther + + + pntnpuzl + Paint 'N Puzzle + + + pnyaa + Pochi and Nyaa (Ver 2.02) + + + pnyaaa + Pochi and Nyaa (Ver 2.00) + + + pocketrc + Pocket Racer (Japan, PKR1/VER.B) + + + poitto + Poitto! (revision D) + + + poittoc + Poitto! (revision C) + + + poizone + Poizone + + + pokasuka + Pokasuka Ghost! (Japan) + + + pokechmp + Poke Champ (set 1) + + + pokechmpa + Poke Champ (set 2) + + + poker41 + Four In One Poker + + + poker52 + Poker 52 (Ver. 1.2) + + + poker72 + Poker Monarch (v2.50) + + + poker91 + Poker 91 + + + pokerdub + unknown French poker game + + + pokeresp + Poker (Electro-Sport) + + + pokeriwc + Poker UCMC/IWC (ver 162.03) + + + pokermon + Mundial/Mondial (Italian/French) + + + pokeroul + Poker Roulette (Version 8.22) + + + pokerout + Potten's Poker stealth with Breakout front game + + + pokersis + unknown Sisteme France Poker + + + pokio + Pokio (Dutch, Game Card 95-750-278) + + + pokiwc162 + Poker UCMC/IWC (ver 162.03 20-6-91) + + + poknight + Poker Night + + + pokoachu + PokoaPoka Onsen de CHU - Bijin 3 Shimai ni Kiotsukete! (Japan) + + + pokonl97 + Poker Only '97 (Talking ver. 3.3) + + + pokonyan + Pokonyan! Balloon (Japan 940322) + + + pokrdice + Poker Dice (V1.7) + + + polar + Polar Explorer + + + polaris + Polaris (latest version) + + + polarisa + Polaris (second revision) + + + polarisb + Polaris (first revision) + + + polarisbr + Polaris (Brazil) + + + polariso + Polaris (original version) + + + polepos + Pole Position (World) + + + polepos1 + Pole Position (Atari version 1) + + + polepos2 + Pole Position II (Japan) + + + polepos2a + Pole Position II (Atari) + + + polepos2b + Pole Position II (bootleg) + + + polepos2bi + Gran Premio F1 (Italian bootleg of Pole Position II) + + + polepos2bs + Gran Premio F1 (Spanish bootleg of Pole Position II) + + + poleposa + Pole Position (Atari version 2) + + + poleposa1 + Pole Position (Atari version 1) + + + poleposa2 + Pole Position (Atari version 2) + + + poleposj + Pole Position (Japan) + + + poleposn + Pole Position (Sonic) + + + poleps2a + Pole Position II (Atari) + + + poleps2b + Pole Position II (bootleg) + + + polic_g4 + Police Force (LG-4) Germany + + + polic_l2 + Police Force (LA-2) + + + polic_l3 + Police Force (LA-3) + + + polic_l4 + Police Force (LA-4) + + + policet2 + Police Trainer 2 + + + policeto + Police Trainer (Rev 1.1) + + + policetr + Police Trainer (Rev 1.3B, Rev 0.3 PCB) + + + policetr10 + Police Trainer (Rev 1.0) + + + policetr11 + Police Trainer (Rev 1.1) + + + policetr13 + Police Trainer (Rev 1.3) + + + policetr13a + Police Trainer (Rev 1.3B Newer, Rev 0.5B PCB) + + + policetr13b + Police Trainer (Rev 1.3B, Rev 0.5B PCB) + + + pollux + Pollux (set 1) + + + polluxa + Pollux (set 2) + + + polluxa2 + Pollux (set 3) + + + polluxn + Pollux (Japan, NTC license, distributed by Atlus) + + + polynetw + Poly-Net Warriors (ver JAA) + + + polyplay + Poly-Play (ZRE) + + + polyplay2 + Poly-Play (ZRE-PP) + + + polyplay2c + Poly-Play (ZRE-PP - Czech) + + + polystar + Tobe! Polystars (ver JAA) + + + pomp_l1 + Pompeii (Shuffle) (L-1) + + + pompeia6 + Pompeii (10002211, NSW/ACT) + + + pompeia6u + Pompeii (0151158, US) + + + pompeia6ua + Pompeii (0251010, US) + + + pompingw + Pomping World (Japan) + + + ponchin + Mahjong Pon Chin Kan (Japan set 1) + + + ponchina + Mahjong Pon Chin Kan (Japan set 2) + + + pong + Pong (Rev E) external [TTL] + + + pongd + Pong Doubles [TTL] + + + pongf + Pong (Rev E) [TTL] + + + ponpoko + Ponpoko + + + ponpokov + Ponpoko (Venture Line) + + + pontoon + Pontoon (FD1094 317-0153) + + + ponttehk + Pontoon (Tehkan) + + + pool10 + Pool 10 (Italian, set 1) + + + pool10b + Pool 10 (Italian, set 2) + + + pool10c + Pool 10 (Italian, set 3) + + + pool10d + Pool 10 (Italian, set 4) + + + pool10e + Pool 10 (Italian, Dino 4 hardware, encrypted) + + + pool10f + Pool 10 (Italian, set 5) + + + pool10g + Pool 10 (Italian, set 6) + + + pool10h + Pool 10 (Italian, set 7) + + + pool10i + Pool 10 (Italian, set 8) + + + pool10j + Pool 10 (Italian, set 9) + + + pool10k + Pool 10 (Italian, set 10) + + + pool_l5 + Pool Sharks (LA-5) + + + pool_l6 + Pool Sharks (LA-6) + + + pool_l7 + Pool Sharks (LA-7) + + + pool_le2 + Pool Sharks (LE-2) + + + pool_p7 + Pool Sharks (PA-7) + + + poolcham + Pool Champion + + + poolchami + Pool Champion (Italian speech) + + + poolshrk + Poolshark + + + poosho + Poosho Poosho + + + pootan + Pootan + + + pooyan + Pooyan + + + pooyans + Pooyan (Stern Electronics) + + + pop_hh + Popper (Hard Head bootleg) + + + pop_la4 + Popeye Saves The Earth (LA-4) + + + pop_lx5 + Popeye Saves The Earth (LX-5) + + + pop_pa3 + Popeye Saves The Earth (PA-3) + + + popbingo + Pop Bingo + + + popbounc + Pop 'n Bounce / Gapporin + + + popeye + Popeye (revision D) + + + popeyeb2 + Popeye (bootleg set 2) + + + popeyeb3 + Popeye (bootleg set 3) + + + popeyebl + Popeye (bootleg set 1) + + + popeyef + Popeye (revision F) + + + popeyehs + Popeye (Braze High Score Kit P1.00D) + + + popeyej + Popeye (Japan) + + + popeyejo + Popeye (Japan, Older) + + + popeyeman + Popeye-Man + + + popeyeu + Popeye (revision D not protected) + + + popflama + Pop Flamer (not protected) + + + popflamb + Pop Flamer (hack[Q]) + + + popflame + Pop Flamer (protected) + + + popflamea + Pop Flamer (not protected) + + + popflameb + Pop Flamer (hack?) + + + popflamen + Pop Flamer (bootleg on Naughty Boy PCB) + + + popn1 + Pop'n Music 1 (ver TA-A, HDD 1.01) + + + popn1a + Pop'n Music 1 (ver AA-A, HDD 1.00) + + + popn1j + Pop'n Music 1 (ver JA-A, HDD 1.00) + + + popn1k + Pop'n Music 1 (ver KA-A, HDD 1.01) + + + popn2 + Pop'n Music 2 (ver JA-A) + + + popn3 + Pop'n Music 3 (ver JA-A) + + + popn4 + Pop'n Music 4 + + + popn5 + Pop'n Music 5 + + + popn6 + Pop'n Music 6 + + + popn7 + Pop'n Music 7 + + + popn8 + Pop'n Music 8 + + + popn9 + Pop'n Music 9 (ver JAB) + + + popnanm + Pop'n Music Animelo + + + popnanm2 + Pop'n Music Animelo 2 + + + popnmt + Pop'n Music Mickey Tunes + + + popnmt2 + Pop'n Music Mickey Tunes! + + + popnpop + Pop'n Pop (Ver 2.07O 1998/02/09) + + + popnpopj + Pop'n Pop (Ver 2.07J 1998/02/09) + + + popnpopu + Pop'n Pop (Ver 2.07A 1998/02/09) + + + popnrun + Pop'n Run - The Videogame (set 1) + + + popnruna + Pop'n Run - The Videogame (set 2) + + + popnstex + Pop'n Stage EX (ver JB-A) + + + popobear + PoPo Bear + + + popper + Popper + + + popshot + Pop Shot (prototype) + + + popspops + Pop's Pop's + + + porky + Porky + + + porter + Port Man (bootleg on Moon Cresta hardware) + + + portera + El Estivador (Spanish bootleg of Port Man on Galaxian hardware) + + + portman + Port Man + + + portmanj + Port Man (Japan) + + + portrait + Portraits (set 1) + + + portraita + Portraits (set 2) + + + potc_110af + Pirates of the Caribbean v1.10 (English,French) + + + potc_110ai + Pirates of the Caribbean v1.10 (English,Italian) + + + potc_110gf + Pirates of the Caribbean v1.10 (German,French) + + + potc_111as + Pirates of the Caribbean v1.11 (English,Spanish) + + + potc_113af + Pirates of the Caribbean v1.13 (English,French) + + + potc_113ai + Pirates of the Caribbean v1.13 (English,Italian) + + + potc_113as + Pirates of the Caribbean v1.13 (English,Spanish) + + + potc_113gf + Pirates of the Caribbean v1.13 (German,French) + + + potc_115af + Pirates of the Caribbean v1.15 (English,French) + + + potc_115ai + Pirates of the Caribbean v1.15 (English,Italian) + + + potc_115as + Pirates of the Caribbean v1.15 (English,Spanish) + + + potc_115gf + Pirates of the Caribbean v1.15 (German,French) + + + potc_300af + Pirates of the Caribbean v3.00 (English,French) + + + potc_300ai + Pirates of the Caribbean v3.00 (English,Italian) + + + potc_300as + Pirates of the Caribbean v3.00 (English,Spanish) + + + potc_300gf + Pirates of the Caribbean v3.00 (German,French) + + + potc_400af + Pirates of the Caribbean v4.00 (English,French) + + + potc_400ai + Pirates of the Caribbean v4.00 (English,Italian) + + + potc_400as + Pirates of the Caribbean v4.00 (English,Spanish) + + + potc_400gf + Pirates of the Caribbean v4.00 (German,French) + + + potc_600 + Pirates of the Caribbean v6.00 (English,French) + + + potc_600ai + Pirates of the Caribbean v6.00 (English,Italian) + + + potc_600as + Pirates of the Caribbean v6.00 (English,Spanish) + + + potc_600gf + Pirates of the Caribbean v6.00 (German,French) + + + potgame + Pot Game (Italian) + + + potgoldu + Pot O' Gold (U.S. Games, v400x?) + + + potgoldu580 + Pot O' Gold (U.S. Games, v580F) + + + potnpkra + Jack Potten's Poker (set 2) + + + potnpkrb + Jack Potten's Poker (set 3) + + + potnpkrc + Jack Potten's Poker (set 4) + + + potnpkrd + Jack Potten's Poker (set 5) + + + potnpkre + Jack Potten's Poker (set 6) + + + potnpkrf + Jack Potten's Poker (set 7, Royale GFX) + + + potnpkrg + Jack Potten's Poker (set 8, Australian) + + + potnpkrh + Jack Potten's Poker (set 9, 'just 4 fun') + + + potnpkri + Jack Potten's Poker (set 10, ICP-1 PCB) + + + potnpkrj + Jack Potten's Poker (set 11, German, W.W.) + + + potnpkrk + Jack Potten's Poker (set 12, no Double-Up) + + + potnpkrl + Jack Potten's Poker (set 13, ICP-1 PCB) + + + poto_a29 + The Phantom of the Opera (2.9) + + + poto_a31 + The Phantom of the Opera (3.1) + + + poto_a32 + The Phantom of the Opera (3.2) + + + potogold + Pot of Gold + + + potopoto + Poto Poto (Japan, Rev A) + + + pottnpkr + Jack Potten's Poker (set 1) + + + poundfor + Pound for Pound (World) + + + poundforj + Pound for Pound (Japan) + + + poundforu + Pound for Pound (US) + + + poundfou + Pound for Pound (US) + + + pow + P.O.W. - Prisoners of War (US version 1) + + + powa + P.O.W. - Prisoners of War (US version 1, mask ROM sprites) + + + powb + P.O.W. - Prisoners of War (bootleg of US version 1) + + + powerbal + Power Balls + + + powerbals + Power Balls (Super Slam conversion) + + + powercrd + Power Card (Ver 0263, encrypted) + + + powerdrv + Power Drive + + + powerina + Power Instinct (USA bootleg) (set 2) + + + powerins + Power Instinct (USA) + + + powerinsa + Power Instinct (USA, bootleg set 1) + + + powerinsb + Power Instinct (USA, bootleg set 2) + + + powerinsc + Power Instinct (USA, bootleg set 3) + + + powerinsj + Gouketsuji Ichizoku (Japan) + + + powerinspj + Gouketsuji Ichizoku (Japan, prototype) + + + powerinspu + Power Instinct (USA, prototype) + + + powj + Datsugoku - Prisoners of War (Japan) + + + powrplay + Power Play + + + powsled + Power Sled (Slave, Revision A) + + + powsledm + Power Sled (Main, hack of Relay) + + + powsledr + Power Sled (Relay, Revision A) + + + powyak96 + Jikkyou Powerful Pro Yakyuu '96 (GV017 Japan 1.03) + + + powyakex + Jikkyou Powerful Pro Yakyuu EX (GX802 VER. JAB) + + + pp100 + Pool Player (1.0) + + + ppan + Peter Pan (bootleg of Hook) + + + ppcar + Pang Pang Car + + + ppchamp + Pasha Pasha Champ Mini Game Festival (Korea, set 1) + + + ppchampa + Pasha Pasha Champ Mini Game Festival (Korea, set 2) + + + ppd + ParaParaDancing + + + ppj + Pyon Pyon Jump (V1.40, Japan) + + + ppking + Ping-Pong King + + + ppmast93 + Ping Pong Masters '93 + + + ppp + ParaParaParadise + + + ppp11 + ParaParaParadise v1.1 + + + ppp1mp + ParaParaParadise 1st Mix Plus + + + ppp2nd + ParaParaParadise 2nd Mix (JAA) + + + ppp2nda + ParaParaParadise 2nd Mix (AAA) + + + pprobe + Planet Probe (prototype?) + + + ppsatan + Poka Poka Satan (Japan) + + + ppspeed + Speed Up (Spanish bootleg of Pole Position) + + + pr_5xcsh + 5x Cash (Project) (PROCONN) + + + pr_7hvn + 777 Heaven (Project) (PROCONN) + + + pr_7hvna + 777 Heaven (Project) (10GBP Jackpot) (PROCONN) + + + pr_7hvnb + 777 Heaven (Project) (20p 6GBP Jackpot Version 114) (PROCONN) + + + pr_7hvnc + 777 Heaven (Project) (10p 3GBP Jackpot Version 380) (PROCONN) + + + pr_7hvnd + 777 Heaven (Project) (5p 3GBP Jackpot Version 105) (PROCONN) + + + pr_7hvne + 777 Heaven (Project) (set 6) (PROCONN) + + + pr_7hvnf + 777 Heaven (Project) (set 7) (PROCONN) + + + pr_7hvng + 777 Heaven (Project) (set 8) (PROCONN) + + + pr_7hvnh + 777 Heaven (Project) (set 9) (PROCONN) + + + pr_7hvni + 777 Heaven (Project) (set 10) (PROCONN) + + + pr_7hvnj + 777 Heaven (Project) (set 11) (PROCONN) + + + pr_7hvnk + 777 Heaven (Project) (set 12) (PROCONN) + + + pr_7hvnl + 777 Heaven (Project) (set 13) (PROCONN) + + + pr_7hvnm + 777 Heaven (Project) (set 14) (PROCONN) + + + pr_7hvnn + 777 Heaven (Project) (set 15) (PROCONN) + + + pr_7hvno + 777 Heaven (Project) (set 16) (PROCONN) + + + pr_7hvnp + 777 Heaven (Project) (set 17) (PROCONN) + + + pr_7hvnq + 777 Heaven (Project) (set 18) (PROCONN) + + + pr_7hvnr + 777 Heaven (Project) (set 19) (PROCONN) + + + pr_7hvns + 777 Heaven (Project) (set 20) (PROCONN) + + + pr_7hvnt + 777 Heaven (Project) (set 21) (PROCONN) + + + pr_7hvnu + 777 Heaven (Project) (set 22) (PROCONN) + + + pr_alwy9 + Always Nine (Pcp) (set 1) (PROCONN) + + + pr_alwy9a + Always Nine (Pcp) (set 2) (PROCONN) + + + pr_barbl + Bars & Bells (Project) (PROCONN) + + + pr_batls + Battleships (Project) (set 1) (PROCONN) + + + pr_batlsa + Battleships (Project) (set 2) (PROCONN) + + + pr_batlsb + Battleships (Project) (set 3) (PROCONN) + + + pr_bears + Bear Streak (set 1) (Coinworld) + + + pr_bearsa + Bear Streak (set 2) (Coinworld) + + + pr_bearsb + Bear Streak (set 3) (Coinworld) + + + pr_bearx + Bear X (Version 2.3) (Coinworld) + + + pr_bearxa + Bear X (Version 2.2) (Coinworld) + + + pr_bearxb + Bear X (Version 1.3) (Coinworld) + + + pr_bearxc + Bear X (20p set 1) (Coinworld) + + + pr_bearxd + Bear X (20p set 2) (Coinworld) + + + pr_bearxe + Bear X (10p set 1) (Coinworld) + + + pr_bearxf + Bear X (10p set 2) (Coinworld) + + + pr_bearxg + Bear X (10p set 3) (Coinworld) + + + pr_bearxh + Bear X (10p set 4?) (Coinworld) + + + pr_bearxi + Bear X (10p set 5) (Coinworld) + + + pr_bearxj + Bear X (code 813) (Coinworld) + + + pr_bearxk + Bear X (8GBP Token?) (Coinworld) + + + pr_bearxl + Bear X (Version 41) (Coinworld) + + + pr_bearxlp + Bear X (Version 41, Protocol) (Coinworld) + + + pr_bearxm + Bear X (Version 31) (Coinworld) + + + pr_bigdp Big Dipper (Project) (set 1) (PROCONN) @@ -75918,29 +91407,85 @@ pr_wnstk Winning Streak (Version 1.1) (Coinworld) + + prc28su + Print Club 2 Vol. 8 Summer (J 970616 V1.100) + + + prc297wi + Print Club 2 '97 Winter Ver (J 971017 V1.100, set 1) + + + prc297wia + Print Club 2 '97 Winter Ver (J 971017 V1.100, set 2) + + + prc298au + Print Club 2 '98 Autumn Ver (J 980827 V1.000) + + + prc298sp + Print Club 2 '98 Spring Ver (J 971017 V1.100) + + + prc298su + Print Club 2 '98 Summer Ver (J 980603 V1.100) + + + prc29au + Print Club 2 Vol. 9 Autumn (J V1.100) + + + prc2ksu + Print Club 2 2000 Summer (J 000509 V1.000) + + + prdgp03 + Pride GP 2003 (PR21 Ver. A) + prehisle Prehistoric Isle in 1930 (World) + + prehislea + Prehistoric Isle in 1930 (World, set 2) + + + prehisleb + Prehistoric Isle in 1930 (World, bootleg) + prehislek - Prehistoric Isle in 1930 (Korea) + Wonsido 1930's (Korea) prehisleu Prehistoric Isle in 1930 (US) + + prehislu + Prehistoric Isle in 1930 (US) + preisle2 Prehistoric Isle 2 + + prideaf + Pride of Africa (10208511, NSW/ACT) + prikura Princess Clara Daisakusen (J 960910 V1.000) primella - Primella + Primella (Japan, NTC license) + + + primevah + Primeval Hunt primglex @@ -75950,6 +91495,10 @@ primrag2 Primal Rage 2 (Ver 0.36a) + + primraga + Primal Rage (version 2.0) + primrage Primal Rage (version 2.3) @@ -75962,6 +91511,10 @@ princess Cosmic Princess + + prmrsocj + Premier Soccer (Japan ver. JAB) + prmrsocr Premier Soccer (ver EAB) @@ -75970,6 +91523,10 @@ prmrsocrj Premier Soccer (ver JAB) + + prmtmfgo + Prime Time Fighter (US old version) + prmtmfgt Prime Time Fighter (Ver 2.1A 1993/05/21) (New Version) @@ -76034,21 +91591,41 @@ promutrvc Progressive Music Trivia (Question set 4) + + proneon + Project Neon (Caravan Edition, prealpha v0.4.19) + propcycl - Prop Cycle (Rev. PR2 Ver.A) + Prop Cycle (Rev. PR2 Ver.A, World) + + + propcyclj + Prop Cycle (Rev. PR1 Ver.A, Japan) + + + prophecy + Prophecy (20173411, NSW/ACT) prosoccr Pro Soccer + + prospdp + Unknown Compumatic ProSPDP based darts machine + prosport - Pro Sports - Bowling, Tennis, and Golf (set 1) + Pro Sports - Bowling, Tennis, and Golf prosporta - Pro Sports - Bowling, Tennis, and Golf (set 2) + Pro Sports - Bowling, Tennis, and Golf (USA) + + + protenn + Pro Tennis (Japan) protennb @@ -76058,10 +91635,18 @@ prtyanim Party Animal + + prtyanimg + Party Animal (German) + prtytime Party Time: Gonta the Diver II / Ganbare! Gonta!! 2 (World Release) + + przfight + Prize Fight (0100299V, NSW/ACT) + psailor1 Bishoujo Janshi Pretty Sailor 18-kin (Japan) @@ -76070,14 +91655,14 @@ psailor2 Bishoujo Janshi Pretty Sailor 2 (Japan) - - psarc95 - PS Arcade 95 - psattack P's Attack + + psmash3 + Power Smash 3 / Virtua Tennis 3 (Export) + psoldier Perfect Soldiers (Japan) @@ -76094,6 +91679,10 @@ pspikesb Power Spikes (bootleg) + + pspikesba + Power Spikes (Italian bootleg) + pspikesc Power Spikes (China) @@ -76106,13 +91695,17 @@ pspikesu Power Spikes (US) + + psrockmn + Panic Shot Rockman + pss61 Super Mario Kart / Super Mario Collection / Star Fox (Super Famicom Box) pss62 - New Super 3D Golf Simulation - Waialae No Kiseki / Super Mahjong 2 (Super Famicom Box) + New Super 3D Golf Simulation - Waialae no Kiseki / Super Mahjong 2 (Super Famicom Box) pss63 @@ -76128,15 +91721,23 @@ pstlpkr - Pistol Poker + Pistol Poker (R02) + + + pstlpkr1 + Pistol Poker (R01) pstone - Power Stone (JPN, USA, EUR, ASI, AUS) + Power Stone pstone2 - Power Stone 2 (JPN, USA, EUR, ASI, AUS) + Power Stone 2 + + + pstone2b + Power Stone 2 (bootleg) psurge @@ -76144,11 +91745,11 @@ psychic5 - Psychic 5 (set 1) + Psychic 5 (World) - psychic5a - Psychic 5 (set 2) + psychic5j + Psychic 5 (Japan) psychos @@ -76172,31 +91773,55 @@ psyvar2 - Psyvariar 2 - The Will To Fabricate (GDL-0024) + Psyvariar 2 - The Will To Fabricate (Japan) (GDL-0024) psyvaria - Psyvariar -Medium Unit- (V2.04J) + Psyvariar -Medium Unit- (V2.02O 2000/02/22 13:00) + + + psyvarij + Psyvariar -Medium Unit- (V2.04J 2000/02/15 11:00) psyvarrv - Psyvariar -Revision- (V2.04J) + Psyvariar -Revision- (V2.04J 2000/08/11 22:00) ptblank - Point Blank (World, GN2 Rev B) + Point Blank (World, GN2 Rev B, set 1) ptblank2 Point Blank 2 (GNB5/VER.A) + + ptblank2a + Point Blank 2 (World, GNB2/VER.A) + + + ptblank2b + Point Blank 2 (World, GNB2/VER.A alt) + + + ptblank2c + Point Blank 2 (unknown region) + ptblank2ua Point Blank 2 (US, GNB3/VER.A) ptblank3 - Point Blank 3 (Asia, GNN2 Ver.A) + Point Blank 3 (World, GNN2 Ver.A) + + + ptblanka + Point Blank (World, GN2 Rev B, set 2) + + + ptrain + Panda Train (Novamatic 1.7) ptrmj @@ -76206,6 +91831,18 @@ pturn Parallel Turn + + pubball + Power Up Baseball (prototype) + + + pubtimed + Pub Time Darts + + + pubtimed2ch + Pub Time Darts II Plus 2 with Solo Challenger (Mar 24, 1992) + puchicar Puchi Carat (Ver 2.02O 1997/10/29) @@ -76214,10 +91851,18 @@ puchicarj Puchi Carat (Ver 2.02J 1997/10/29) + + puchicaru + Puchi Carat (Ver 2.04A 1997/11/08) + puckman Puck Man (Japan set 1) + + puckmana + PuckMan (Japan set 2) + puckmanb Puck Man (bootleg set 1) @@ -76254,10 +91899,18 @@ pulirula PuLiRuLa (World) + + pulirulaa + PuLiRuLa (World, earlier?) + pulirulaj PuLiRuLa (Japan) + + pulirulj + PuLiRuLa (Japan) + pulltabs Pull Tabs @@ -76276,7 +91929,11 @@ punchout - Punch-Out!! + Punch-Out!! (Rev B) + + + punchouta + Punch-Out!! (Rev A) punchoutj @@ -76284,24 +91941,32 @@ punchy - Punchy The Clown + Punchy The Clown (R02) + + + punchy3 + Punchy The Clown (R03) punipic - The Punisher (bootleg with PIC16c57, set 1) + The Punisher (bootleg with PIC16C57, set 1) punipic2 - The Punisher (bootleg with PIC16c57, set 2) + The Punisher (bootleg with PIC16C57, set 2) punipic3 - The Punisher (bootleg with PIC16c57, set 3) + The Punisher (bootleg with PIC16C57, set 3) punisher The Punisher (World 930422) + + punisherb + The Punisher (bootleg, 930422 etc) + punisherbz Biaofeng Zhanjing (Chinese bootleg of The Punisher) @@ -76318,6 +91983,14 @@ punisheru The Punisher (USA 930422) + + punishrj + The Punisher (Japan 930422) + + + punishru + The Punisher (US 930422) + punk Punk! @@ -76330,10 +92003,26 @@ punkshot2 Punk Shot (US 2 Players) + + punkshot2e + Punk Shot (World 2 Players) + punkshotj Punk Shot (Japan 2 Players) + + punksht2 + Punk Shot (US 2 Players) + + + punkshtj + Punk Shot (Japan 2 Players) + + + punkywil + Punky Willy + pururun Pururun @@ -76356,7 +92045,7 @@ pushover - Push Over (Summit Coin) + Push-Over (Summit Coin) puyo @@ -76368,11 +92057,15 @@ puyoda - Puyo Puyo Da! + Puyo Puyo Da! (Japan) puyofev - Puyo Puyo Fever (GDS-0031) + Puyo Pop Fever (World) (GDS-0034) + + + puyofevj + Puyo Puyo Fever (Japan) (GDS-0031) puyofevp @@ -76386,10 +92079,26 @@ puyoja Puyo Puyo (Japan, Rev A) + + puyomedal + Puyo Puyo! The Medal Edition + puyopuy2 Puyo Puyo 2 (Japan) + + puyopuya + Puyo Puyo (Japan) (Rev A) + + + puyopuyb + Puyo Puyo (English) (bootleg) + + + puyopuyo + Puyo Puyo (Japan) + puyosun Puyo Puyo Sun (J 961115 V0.001) @@ -76410,9 +92119,21 @@ puzldama Taisen Puzzle-dama (ver JAA) + + puzloopj + Puzz Loop (Japan) + + + puzloopu + Puzz Loop (USA) + puzlstar - Puzzle Star (ver. 100MG) + Puzzle Star / Mohuan Xingzuo (ver. 100MG, 09/30/99 build) + + + puzlstara + Puzzle Star / Mohuan Xingzuo (ver. 100MG, 09/20/99 build) puzzldpr @@ -76426,21 +92147,29 @@ puzzlekg Puzzle King (Dance & Puzzle) + + puzzleme + Puzzle Me! + puzzlet Puzzlet (Japan) puzzli - Puzzli + Puzzli (revision B) puzzli2 - Puzzli 2 (ver. 100) + Puzzli 2 / Pao Pao Yu (ver. 100) puzzli2s - Puzzli 2 Super (ver. 200) + Puzzli 2 Super / Pao Pao Yu Super (ver. 200) + + + puzzlia + Puzzli (revision A) puzzloop @@ -76466,10 +92195,26 @@ puzzloopu Puzz Loop (USA) + + puzzlove + PuzzLove + + + puzzlovek + PuzzLove (Korea) + puzznic Puzznic (World) + + puzznicb + Puzznic (bootleg, set 1) + + + puzznicba + Puzznic (bootleg, set 2) + puzznici Puzznic (Italian bootleg) @@ -76478,13 +92223,25 @@ puzznicj Puzznic (Japan) + + puzznicu + Puzznic (US) + pwerplay Power Play (Pinball) pwheelsj - Power Wheels (Japan) + Power Wheels (Japan, Rev 2, Linkable) + + + pwrchanc + Powerful Chance + + + pwrflip + Power Flipper Pinball Shooting v1.33 pwrgoal @@ -76498,17 +92255,33 @@ pwrinst2j Gouketsuji Ichizoku 2 (Japan, Ver. 94/04/08) + + pwrinst2k + Power instinct 2 (Korea, ver. 94/04/08) + pwrkick Power Kick (Japan) pwrshovl - Power Shovel ni Norou!! - Power Shovel Simulator + Power Shovel ni Norou!! - Power Shovel Simulator (v2.07J) + + + pwrshovla + Power Shovel ni Norou!! - Power Shovel Simulator (v2.07J, alt) + + + pwsuper + Player's World - Super (0154019, US) py2k2 - Photo Y2K 2 + Photo Y2K 2 / Chaoji Bi Yi Bi 2 / Dajia Lai Zhao Cha 2 / Real and Fake 2 Photo Y2K (M101XX 05/25/01 11:02:54) + + + py2k2100 + Photo Y2K 2 / Chaoji Bi Yi Bi 2 / Dajia Lai Zhao Cha 2 / Real and Fake 2 Photo Y2K (ver. 100, Japanese Board) pyenaget @@ -76522,10 +92295,6 @@ pyros Pyros (US) - - pyson - Konami Pyson BIOS - pz_f4 The Party Zone (F-4) @@ -76548,7 +92317,11 @@ pzlbreak - Puzzle Break + Puzzle Break (set 1) + + + pzlbreaka + Puzzle Break (set 2) pzlestar @@ -76566,6 +92339,10 @@ pzloop2j Puzz Loop 2 (Japan 010226) + + pzloop2jd + Puzz Loop 2 (Japan 010226 Phoenix Edition) (bootleg) + pzloop2jr1 Puzz Loop 2 (Japan 010205) @@ -76574,6 +92351,10 @@ qad Quiz & Dragons: Capcom Quiz Game (USA 920701) + + qadj + Quiz and Dragons (Japan 940921) + qadjr Quiz & Dragons: Capcom Quiz Game (Japan Resale Ver. 940921) @@ -76582,6 +92363,10 @@ qb3 QB-3 (prototype) + + qbeebing + Queen Bee Bingo + qbert Q*bert (US set 1) @@ -76594,6 +92379,10 @@ qbertj Q*bert (Japan) + + qbertjp + Q*bert (Japan) + qbertqub Q*bert's Qubes @@ -76614,6 +92403,10 @@ qc Quarter Horse Classic + + qcash + Queens of Cash (0100706V, NSW/ACT) + qcrayon Quiz Crayon Shinchan (Japan) @@ -76632,12 +92425,16 @@ qgakumon - Quiz Gakumon no Susume (Japan ver. JA2 Type L) + Quiz Gakumon no Susume (Japan ver. JA1 Type H) qgh Quiz Ghost Hunter (Japan, ROM Based) + + qgundam + Quiz Mobile Suit Gundam: Monsenshi (QG1 Ver. A) + qix Qix (Rev 2) @@ -76662,9 +92459,13 @@ qjinsei Quiz Jinsei Gekijoh (Japan) + + qlgs + Que Long Gao Shou + qmegamis - Quiz Ah Megamisama (JPN, USA, EXP, KOR, AUS) + Quiz Aa! Megami-sama ~Tatakau Tsubasa to Tomoni~ (Japan) qmhayaku @@ -76672,7 +92473,99 @@ qndream - Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 960826) + Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 96086) + + + qnile + Queen of the Nile (0300439V, NSW/ACT) + + + qnilea + Queen of the Nile (0200439V, NSW/ACT) + + + qnilea6 + Queen of the Nile (3J011111, NSW/ACT) + + + qnileb + Queen of the Nile (0100439V, NSW/ACT) + + + qnilebr + Queen of the Nile (0101707V, Brazil) + + + qnilec + Queen of the Nile (0300440V, NSW/ACT) + + + qnilece + Queen of the Nile - Cash Express (AHG1609, US) + + + qnilecea + Queen of the Nile - Cash Express (AHG1525, US) + + + qnileceb + Queen of the Nile - Cash Express (AHG1608, US) + + + qniled + Queen of the Nile (0101139V, NSW/ACT) + + + qnilefl + Queen of the Nile - Fast Lane (0101670V, Queensland) + + + qnilejc + Queen of the Nile Special Edition - Jackpot Carnival (20123911, NSW/ACT) + + + qnilejcsp + Queen of the Nile Special Edition - Jackpot Carnival (20123911, NSW/ACT, Show Program) + + + qnilemax + Queen of the Nile - Maximillions (0401072V, NSW/ACT) + + + qnilemt2 + Queen of the Nile - Money Train II (10203811, Queensland) + + + qnilenl + Queen of the Nile (0301059V, Holland) + + + qnilenz + Queen of the Nile (0300785V, New Zealand) + + + qnileql + Queen of the Nile (0201200V, Queensland) + + + qnilese + Queen of the Nile Special Edition (20102811, NSW/ACT) + + + qnilesea + Queen of the Nile Special Edition (10102811, NSW/ACT) + + + qnileu + Queen of the Nile (GHG4091-02, US) + + + qnileua + Queen of the Nile (GHG4091-03, US) + + + qnilev + Queen of the Nile (04J00784, Peru?) qntoond @@ -76682,6 +92575,14 @@ qntoondo Quintoon (Dutch, Game Card 95-750-136) + + qofd3 + Quest of D Oukoku no Syugosya Ver. 3.02 (CDV-10026D) + + + qofdtbk + Quest of D The Battle Kingdom (CDV-10035B) + qos A Question of Sport (set 1, 39-960-107) @@ -76694,10 +92595,6 @@ qosb A Question of Sport (set 3, 39-960-089) - - qotn - Queen of the Nile (0200439V, NSW/ACT) - qrouka Quiz Rouka Ni Tattenasai (Japan, ROM Based) @@ -76706,10 +92603,18 @@ qsangoku Quiz Sangokushi (Japan) + + qsheba + Queen of Sheba (10133721, NSW/ACT) + qsww Quiz Syukudai wo Wasuremashita (Japan, Floppy Based, FD1094 317-0058-08b) + + qtbird + Q.T. Bird (0500009V, NSW/ACT) + qtheater Quiz Theater - 3tsu no Monogatari (Ver 2.3J 1994/11/10) @@ -76718,6 +92623,10 @@ qtono1 Quiz Tonosama no Yabou (Japan) + + qtono2 + Quiz Tonosama no Yabou 2 Zenkoku-ban (Japan 950123) + qtono2j Quiz Tonosama no Yabou 2: Zenkoku-ban (Japan 950123) @@ -76726,6 +92635,10 @@ qtorimon Quiz Torimonochou (Japan) + + quaak + Quaak (bootleg of Frogger) + quake Quake Arcade Tournament (Release Beta 2) @@ -76748,11 +92661,15 @@ quarterb - Quarterback (set 1) + Quarterback (rev 5) quarterba - Quarterback (set 2) + Quarterback (rev 2) + + + quarterbc + Quarterback (rev 1, cocktail) quarterh @@ -76782,10 +92699,22 @@ quarteta Quartet (8751 315-5194) + + quartetj + Quartet (8751 315-5194) + quarth Quarth (Japan) + + quartrba + Quarterback (set 2) + + + quartt2j + Quartet 2 (unprotected) + quasar Quasar (set 1) @@ -76798,6 +92727,22 @@ queen Queen? + + queenbee + Queen Bee (Ver. 114) + + + queenbeeb + Queen Bee (Brazil, Ver. 202) + + + queenbeei + Queen Bee (Israel, Ver. 100) + + + queenbeesa + Queen Bee (SA-101-HARD) + queenotg Queen of the Games @@ -76810,14 +92755,26 @@ questers Quester Special Edition (Japan) + + questofd + Quest of D (CDV-10005C) + quickjac Quick Jack + + quickp5 + Quick Pick 5 + quicksil Quicksilver + + quingo + Quingo Export (5.00) + quintond Quintoon (UK, Game Card 95-751-206, Datapak) @@ -76852,27 +92809,75 @@ quizard - Quizard 3.2 + Quizard (v1.8, German, i8751 DE 11 D3) + + + quizard2 + Quizard 2 (v2.3, German, i8751 DN 122 D3) + + + quizard2_22 + Quizard 2 (v2.2, German, i8751 DN 122 D3) + + + quizard3 + Quizard 3 (v3.4, German, i8751 DE 132 D3) + + + quizard3_32 + Quizard 3 (v3.2, German, i8751 DE 132 D3) + + + quizard3a + Quizard 3 (v3.4, German, i8751 DE 132 A1) + + + quizard4 + Quizard 4 Rainbow (v4.2, German, i8751 DE 142 D3) + + + quizard4_40 + Quizard 4 Rainbow (v4.0, German, i8751 DE 142 D3) + + + quizard4_41 + Quizard 4 Rainbow (v4.1, German, i8751 DE 142 D3) + + + quizard4cz + Quizard 4 Rainbow (v4.2, Czech, i8751 TS142 CZ1) + + + quizard_10 + Quizard (v1.0, German, i8751 DE 11 D3) + + + quizard_12 + Quizard (v1.2, German, i8751 DE 11 D3) + + + quizard_17 + Quizard (v1.7, German, i8751 DE 11 D3) quizchq - Quiz Channel Question (Ver 1.00) (Japan) + Quiz Channel Question (Japan, Ver 1.00) quizchql - Quiz Channel Question (Ver 1.23) (Taiwan?) + Quiz Channel Question (Taiwan?, Ver 1.23) quizdai2 - Quiz Meitantei Neo & Geo - Quiz Daisousa Sen part 2 (NGM-042)(NGH-042) + Quiz Meitantei Neo & Geo - Quiz Daisousa Sen part 2 (NGM-042 ~ NGH-042) quizdais - Quiz Daisousa Sen - The Last Count Down (NGM-023)(NGH-023) + Quiz Daisousa Sen - The Last Count Down (NGM-023 ~ NGH-023) quizdaisk - Quiz Daisousa Sen - The Last Count Down (Korean release) + Quiz Salibtamjeong - The Last Count Down (Korean localized Quiz Daisousa Sen) quizdna @@ -76892,11 +92897,11 @@ quizkof - Quiz King of Fighters (SAM-080)(SAH-080) + Quiz King of Fighters (SAM-080 ~ SAH-080) quizkofk - Quiz King of Fighters (Korean release) + Quiz King of Fighters (Korea) quizmeku @@ -76904,7 +92909,7 @@ quizmoon - Quiz Bisyoujo Senshi Sailor Moon - Chiryoku Tairyoku Toki no Un + Quiz Bishoujo Senshi Sailor Moon - Chiryoku Tairyoku Toki no Un quizmstr @@ -76928,48 +92933,12 @@ quizpun2 - Quiz Punch 2 + Quiz Punch II quizqgd Quiz Keitai Q mode (GDL-0017) - - quizrd12 - Quizard 1.2 - - - quizrd17 - Quizard 1.7 - - - quizrd18 - Quizard 1.8 - - - quizrd22 - Quizard 2.2 - - - quizrd23 - Quizard 2.3 - - - quizrd34 - Quizard 3.4 - - - quizrr40 - Quizard Rainbow 4.0 - - - quizrr41 - Quizard Rainbow 4.1 - - - quizrr42 - Quizard Rainbow 4.2 - quizshow Quiz Show @@ -76994,6 +92963,10 @@ qwak Qwak (prototype) + + qwakttl + Qwak!/Quack [TTL] + qzchikyu Quiz Chikyu Bouei Gun (Japan) @@ -77020,27 +92993,99 @@ r2dx_v33 - Raiden II / DX (newer V33 PCB) + Raiden II New / Raiden DX (newer V33 PCB) (Raiden DX EEPROM) + + + r2dx_v33_r2 + Raiden II New / Raiden DX (newer V33 PCB) (Raiden II EEPROM) + + + r_alaska + Alaska + + + r_blackm4 + Black Magic 4 + + + r_cavalier + Cavalier + + + r_crzyrace + Crazy Race + + + r_fairfght + Fair Fight + + + r_flipper + The Flipper Game + + + r_hotcold + Hot & Cold + + + r_mrdoom + Mr Doom + + + r_mrevil + Mr Evil + + + r_pokrplus + Poker Plus + + + r_quijote + Don Quijote + + + r_screech + Screech + + + r_swash + Swashbuckler + + + r_torneo + Torneo raaspec Spectrum I+ - rab_103 - Adventures of Rocky and Bullwinkle and Friends (1.03 Spain) + rab_103s + Adventures of Rocky and Bullwinkle and Friends (USA 1.03, display S1.03) rab_130 - Adventures of Rocky and Bullwinkle and Friends (1.30) + Adventures of Rocky and Bullwinkle and Friends (USA 1.30, display A1.30) rab_320 - Adventures of Rocky and Bullwinkle and Friends (3.20) + Adventures of Rocky and Bullwinkle and Friends (USA 3.20, display A3.00) rabbit - Rabbit (Japan) + Rabbit (Asia 3/6) + + + rabbita + Rabbit (Asia 1/28?) + + + rabbitj + Rabbit (Japan 3/6?) + + + rabbitjt + Rabbit (Japan 1/28, location test) rabbitpk @@ -77054,6 +93099,50 @@ raccoon Raccoon World + + racedcb4 + Race Drivin' (compact, British, rev 4) + + + racedcg4 + Race Drivin' (compact, German, rev 4) + + + racedrb1 + Race Drivin' (cockpit, British, rev 1) + + + racedrb4 + Race Drivin' (cockpit, British, rev 4) + + + racedrc1 + Race Drivin' (compact, rev 1) + + + racedrc2 + Race Drivin' (compact, rev 2) + + + racedrc4 + Race Drivin' (compact, rev 4) + + + racedrcb + Race Drivin' (compact, British, rev 5) + + + racedrcg + Race Drivin' (compact, German, rev 5) + + + racedrg1 + Race Drivin' (cockpit, German, rev 2) + + + racedrg4 + Race Drivin' (cockpit, German, rev 4) + racedriv Race Drivin' (cockpit, rev 5) @@ -77118,6 +93207,10 @@ racedrivcg4 Race Drivin' (compact, German, rev 4) + + racedrivcp + Race Drivin' (compact, prototype) + racedrivg Race Drivin' (cockpit, German, rev 5) @@ -77134,14 +93227,46 @@ racedrivpan Race Drivin' Panorama (prototype, rev 2.1) + + racedrv1 + Race Drivin' (cockpit, rev 1) + + + racedrv2 + Race Drivin' (cockpit, rev 2) + + + racedrv3 + Race Drivin' (cockpit, rev 3) + + + racedrv4 + Race Drivin' (cockpit, rev 4) + + + racedrvb + Race Drivin' (cockpit, British, rev 5) + + + racedrvc + Race Drivin' (compact, rev 5) + + + racedrvg + Race Drivin' (cockpit, German, rev 5) + raceon - Race On! (RO2 Ver. A) + Race On! (World, RO2 Ver. A) rachero Racing Hero (FD1094 317-0144) + + racherod + Racing Hero (bootleg of FD1094 317-0144 set) + racinfrc Racin' Force (ver EAC) @@ -77186,14 +93311,30 @@ racknrol Rack + Roll + + racoon + Racoon World + radarscp - Radar Scope + Radar Scope (TRS02, rev. D) radarscp1 Radar Scope (TRS01) + + radarscpc + Radar Scope (TRS02?, rev. C) + + + radarzn1 + Radar Zone (Rev.1) + + + radarznt + Radar Zone (Tuni) + radarzon Radar Zone @@ -77223,16 +93364,24 @@ Radikal Bikers (Version 2.02) - radirgy - Radirgy (GDL-0032) + radikalba + Radikal Bikers (Version 2.02, Atari license) - radirgya - Radirgy (Rev A) (GDL-0032A) + radikaldrt + Radikal Darts (Diana Version 7.29.25) + + + radirgy + Radirgy (Japan, Rev A) (GDL-0032A) radirgyn - Radirgy Noa + Radirgy Noa (Japan) + + + radirgyo + Radirgy (Japan) (GDL-0032) radm @@ -77248,7 +93397,11 @@ radrad - Radical Radial + Radical Radial (US) + + + radradj + Radical Radial (Japan) radrj @@ -77262,6 +93415,10 @@ raflesia Rafflesia (315-5162) + + raflesiau + Rafflesia (not encrypted) + ragnagrd Ragnagard / Shin-Oh-Ken @@ -77280,39 +93437,79 @@ raiden2 - Raiden II (set 1, US Fabtek) + Raiden II (US, set 1) - raiden2a - Raiden II (set 2, Hong Kong, Metrotainment) + raiden2dx + Raiden II (harder, Raiden DX hardware, Korea) - raiden2b - Raiden II (set 3, Japan) + raiden2e + Raiden II (easier, Korea) - raiden2c - Raiden II (set 4, Italy) + raiden2ea + Raiden II (easier, Japan) - raiden2d - Raiden II (set 5, Easy Version) + raiden2eg + Raiden II (easier, Germany) - raiden2e - Raiden II (set 6, Easy Version) + raiden2es + Raiden II (Spain) + + + raiden2eu + Raiden II (easier, US set 2) + + + raiden2eua + Raiden II (easier, US set 1) + + + raiden2eub + Raiden II (easier, US set 3) + + + raiden2eup + Raiden II (easier, US, prototype? 11-16) raiden2f - Raiden II (set 7, US Fabtek, Easy Version) + Raiden II (France) raiden2g - Raiden II (set 8, US Fabtek, Easy Version) + Raiden II (Germany) + + + raiden2hk + Raiden II (Hong Kong) + + + raiden2i + Raiden II (Italy) + + + raiden2j + Raiden II (Japan) + + + raiden2k + Raiden II (harder, Korea) raiden2nl - Raiden II (set 9, The Netherlands) + Raiden II (Holland) + + + raiden2sw + Raiden II (Switzerland) + + + raiden2u + Raiden II (US, set 2) raiden3 @@ -77328,7 +93525,7 @@ raidenb - Raiden (set 3) + Raiden (set 3, newer hardware) raidendx @@ -77342,17 +93539,33 @@ raidendxa2 Raiden DX (Hong Kong, set 2) + + raidendxch + Raiden DX (China) + raidendxg Raiden DX (Germany) raidendxj - Raiden DX (Japan) + Raiden DX (Japan, set 1) + + + raidendxja + Raiden DX (Japan, set 2) + + + raidendxk + Raiden DX (Korea) raidendxnl - Raiden DX (The Netherlands) + Raiden DX (Holland) + + + raidendxpt + Raiden DX (Portugal) raidendxu @@ -77362,6 +93575,14 @@ raidenk Raiden (Korea) + + raidenkb + Raiden (Korea, bootleg) + + + raidenm + Raiden (Modular System) + raident Raiden (Taiwan) @@ -77372,7 +93593,11 @@ raidenua - Raiden (US set 2) + Raiden (US set 2, SEI8904 hardware) + + + raidenub + Raiden (US set 3, newer hardware) raiders @@ -77384,12 +93609,20 @@ raiders5t - Raiders5 (Japan) + Raiders5 (Japan, set 1) + + + raiders5ta + Raiders5 (Japan, set 2, bootleg?) raidersr3 Raiders (Rev.3) + + raidrs5t + Raiders5 (Japan) + raiga Raiga - Strato Fighter (Japan) @@ -77410,9 +93643,33 @@ raimfire Ready...Aim...Fire! + + rainbow + Rainbow Islands (new version) + + + rainbowe + Rainbow Islands (Extra) + + + rainbowo + Rainbow Islands (old version) + + + rainwarr + Rainbow Warriors (0101132V, NSW/ACT) + + + rainwarrce + Rainbow Warriors - Cash Express (0101332V, NSW/ACT) + raizpin - Raizin Ping Pong + Raizin Ping Pong (V2.01O) + + + raizpinj + Raizin Ping Pong (V2.01J) rally @@ -77446,10 +93703,22 @@ rallyxmr Rally X (Model Racing bootleg) + + rambo + Rambo (Export) + rambo3 Rambo III (Europe) + + rambo3a + Rambo III (US) + + + rambo3ae + Rambo III (Europe set 2) + rambo3p Rambo III (Europe, Proto?) @@ -77472,23 +93741,35 @@ rampart2p - Rampart (Joystick) + Rampart (Joystick, bigger ROMs) + + + rampart2pa + Rampart (Joystick, smaller ROMs) rampartj Rampart (Japan, Joystick) - ramtek3 - unknown Ramtek Game (Maybe Hockey?) [TTL] + ramprt2p + Rampart (Joystick) rangrmsn Ranger Mission + + rapfire5 + Rapid Fire 5 (Konami Endeavour, NSW) + raphero - Rapid Hero + Rapid Hero (NMK) + + + rapheroa + Rapid Hero (Media Trading) rapidfip @@ -77508,7 +93789,7 @@ rapidrvr - Rapid River (RD3 Ver. C) + Rapid River (US, RD3 Ver. C) rapidrvrp @@ -77516,7 +93797,11 @@ rapidrvrv2c - Rapid River (RD2 Ver. C) + Rapid River (World, RD2 Ver. C) + + + raprichs + Rapid Riches (10194211, NSW/ACT) rasce @@ -77526,6 +93811,10 @@ rascot Royal Ascot (Japan, terminal?) + + rascot2 + Royal Ascot II + rastan Rastan (World Rev 1) @@ -77534,17 +93823,25 @@ rastana Rastan (World) + + rastanb + Rastan (World, earlier code base) + rastanu Rastan (US Rev 1) + + rastanu2 + Rastan (US set 2) + rastanua Rastan (US) rastanub - Rastan (US, Earlier code base) + Rastan (US, earlier code base) rastsag2 @@ -77556,7 +93853,15 @@ rastsagaa - Rastan Saga (Japan) + Rastan Saga (Japan Rev 1, earlier code base) + + + rastsagaabl + Rastan Saga (bootleg, Japan Rev 1, earlier code base) + + + rastsagab + Rastan Saga (Japan, earlier code base) ratrc_l1 @@ -77566,6 +93871,14 @@ raven Raven + + ravena + Raven (alternate set) + + + raveng + Raven (German) + raveracj Rave Racer (Rev. RV1 Ver.B, Japan) @@ -77576,11 +93889,15 @@ raveracw - Rave Racer (Rev. RV2, World) + Rave Racer (Rev. RV2 Ver.B, World) raycris - Ray Crisis (V2.03J) + Ray Crisis (V2.03O 1998/11/15 15:43) + + + raycrisj + Ray Crisis (V2.03J 1998/11/15 15:43) rayforce @@ -77590,6 +93907,10 @@ rayforcej Ray Force (Ver 2.3J 1994/01/20) + + rayforcj + Rayforce (Japan) + raystorm Ray Storm (Ver 2.06A) @@ -77612,24 +93933,44 @@ rbff1 - Real Bout Fatal Fury / Real Bout Garou Densetsu (NGM-095)(NGH-095) + Real Bout Fatal Fury / Real Bout Garou Densetsu (NGM-095 ~ NGH-095) rbff1a Real Bout Fatal Fury / Real Bout Garou Densetsu (bug fix revision) + + rbff1k + Real Bout Fatal Fury / Real Bout Garou Densetsu (Korean release) + + + rbff1ka + Real Bout Fatal Fury / Real Bout Garou Densetsu (Korean release, bug fix revision) + rbff2 - Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGM-2400) + Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - The Newcomers (NGM-2400) + + + rbff2a + Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - The Newcomers (set 2) + + + rbff2bh + Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (Secret Character Hack) rbff2h - Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (NGH-2400) + Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - The Newcomers (NGH-2400) rbff2k Real Bout Fatal Fury 2 - The Newcomers (Korean release) + + rbffspbh + Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special (Boss Hack) + rbffspec Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special @@ -77652,7 +93993,7 @@ rbislande - Rainbow Islands (Extra) + Rainbow Islands - Extra Version rbislando @@ -77664,7 +94005,15 @@ rbmk - Real Battle Mahjong King + Shizhan Majiang Wang (Version 8.8) + + + rbowlorama + Rockin' Bowl-O-Rama (v2.1.1) + + + rbspm + Shizhan Ding Huang Maque (Version 4.1) rbtapper @@ -77678,17 +94027,21 @@ rcasino1 Royal Casino (D-2608208A1-1, Larger Board) + + rcasino2 + Royal Casino (D-2608208A1-1, Smaller Board, set 2) + rcasinoo - Royal Casino (D-2608208A1-1, Smaller Board) + Royal Casino (D-2608208A1-1, Smaller Board, set 1) rcdego - RC De Go (V2.03J) + RC De Go (V2.03J 1999/05/22 19:29) rcdino4 - unknown encrypted Royal Card (Dino4 HW) + Royal Card (Italian, Dino 4 hardware, encrypted) rchase @@ -77706,10 +94059,38 @@ rcirulet Ruleta RCI (6-players, Spanish) + + rckman2j + Rockman 2: The Power Fighters (Japan 960708) + rclimb Rock Climber (040815 World) + + rclimb_10 + Rock Climber (110111 Entertainment A) + + + rclimb_11 + Rock Climber (110124 Entertainment A) + + + rclimb_12 + Rock Climber (110204 Entertainment A) + + + rclimb_13 + Rock Climber (110311 Entertainment B) + + + rclimb_14 + Rock Climber (110411 Entertainment C) + + + rclimb_2 + Rock Climber (040823 World) + rclimb_3 Rock Climber (040827 World) @@ -77746,89 +94127,97 @@ rclimb_7 Rock Climber (090716 Entertainment) + + rclimb_8 + Rock Climber (100331 Entertainment X) + + + rclimb_9 + Rock Climber (101209 Entertainment N) + rcorsair Red Corsair rctnew - Roller Coaster Tycoon (ARM7 Sound Board) + RollerCoaster Tycoon (ARM7 Sound Board) rctycn - Roller Coaster Tycoon (7.02) + RollerCoaster Tycoon (7.02) rctycn_400 - Roller Coaster Tycoon (4.00) + RollerCoaster Tycoon (4.00) rctycn_600 - Roller Coaster Tycoon (6.00) + RollerCoaster Tycoon (6.00) rctycn_701 - Roller Coaster Tycoon (7.01) + RollerCoaster Tycoon (7.01) rctycnf - Roller Coaster Tycoon (7.02 France) + RollerCoaster Tycoon (7.02 France) rctycnf_400 - Roller Coaster Tycoon (4.00 France) + RollerCoaster Tycoon (4.00 France) rctycnf_600 - Roller Coaster Tycoon (6.00 France) + RollerCoaster Tycoon (6.00 France) rctycnf_701 - Roller Coaster Tycoon (7.01 France) + RollerCoaster Tycoon (7.01 France) rctycng - Roller Coaster Tycoon (7.02 Germany) + RollerCoaster Tycoon (7.02 Germany) rctycng_400 - Roller Coaster Tycoon (4.00 Germany) + RollerCoaster Tycoon (4.00 Germany) rctycng_701 - Roller Coaster Tycoon (7.01 Germany) + RollerCoaster Tycoon (7.01 Germany) rctycni - Roller Coaster Tycoon (7.02 Italy) + RollerCoaster Tycoon (7.02 Italy) rctycni_400 - Roller Coaster Tycoon (4.00 Italy) + RollerCoaster Tycoon (4.00 Italy) rctycni_600 - Roller Coaster Tycoon (6.00 Italy) + RollerCoaster Tycoon (6.00 Italy) rctycni_701 - Roller Coaster Tycoon (7.01 Italy) + RollerCoaster Tycoon (7.01 Italy) rctycnl - Roller Coaster Tycoon (7.02 Spain) + RollerCoaster Tycoon (7.02 Spain) rctycnl_400 - Roller Coaster Tycoon (4.00 Spain) + RollerCoaster Tycoon (4.00 Spain) rctycnl_600 - Roller Coaster Tycoon (6.00 Spain) + RollerCoaster Tycoon (6.00 Spain) rctycnl_701 - Roller Coaster Tycoon (7.01 Spain) + RollerCoaster Tycoon (7.01 Spain) rdaction @@ -77836,7 +94225,7 @@ rdft - Raiden Fighters (Japan set 1) + Raiden Fighters (Germany) rdft2 @@ -77851,17 +94240,33 @@ Raiden Fighters 2 - Operation Hell Dive (Hong Kong) - rdft2a2 + rdft2aa Raiden Fighters 2 - Operation Hell Dive (Korea) + + rdft2it + Raiden Fighters 2 - Operation Hell Dive (Italy) + rdft2j Raiden Fighters 2 - Operation Hell Dive (Japan set 1) - rdft2j2 + rdft2ja Raiden Fighters 2 - Operation Hell Dive (Japan set 2) + + rdft2jb + Raiden Fighters 2 - Operation Hell Dive (Japan set 3) + + + rdft2jc + Raiden Fighters 2 - Operation Hell Dive (Japan set 4) + + + rdft2s + Raiden Fighters 2 - Operation Hell Dive (Switzerland) + rdft2t Raiden Fighters 2 - Operation Hell Dive (Taiwan) @@ -77890,13 +94295,33 @@ rdftau Raiden Fighters (Australia) + + rdftauge + Raiden Fighters (Evaluation Software For Show, Germany) + + + rdftgb + Raiden Fighters (Great Britain) + + + rdftgr + Raiden Fighters (Greece) + rdftit Raiden Fighters (Italy) rdftj - Raiden Fighters (Japan set 2) + Raiden Fighters (Japan, earlier) + + + rdftja + Raiden Fighters (Japan, earliest) + + + rdftjb + Raiden Fighters (Japan, newer) rdfts @@ -77904,7 +94329,11 @@ rdftu - Raiden Fighters (US) + Raiden Fighters (US, earlier) + + + rdftua + Raiden Fighters (US, newer) rdkng_l1 @@ -77962,13 +94391,29 @@ realbrkk Billiard Academy Real Break (Korea) + + realbrko + Billiard Academy Real Break (Europe, older) + realbrod + The Real Broadway (9131-20-00 R0C) + + + realbroda The Real Broadway (9131-20-00 R0A) realpunc - Real Puncher + Real Puncher (World, v2.12O) + + + realpuncj + Real Puncher (Japan, v2.12J) + + + rebound + Rebound (Rev B) [TTL] rebus @@ -77976,7 +94421,7 @@ recalh - Recalhorn (Ver 1.42J 1994/5/11) (Prototype) + Recalhorn (Ver 1.42J 1994/5/11, prototype) record @@ -77990,6 +94435,22 @@ redalert Red Alert + + redbara6 + Red Baron (10119911, NSW/ACT) + + + redbarfl + Red Baron - Fast Lane (10160711, Queensland) + + + redbarjc + Red Baron - Jackpot Carnival (10160911, Queensland) + + + redbarnp + Red Baron (Pinball) + redbaron Red Baron (Revised Hardware) @@ -78000,14 +94461,22 @@ redclash - Red Clash (set 1) + Red Clash - redclasha - Red Clash (set 2) + redclashs + Red Clash (Suntronics) - redclashk + redclasht + Red Clash (Tehkan, set 1) + + + redclashta + Red Clash (Tehkan, set 2) + + + redclask Red Clash (Kaneko) @@ -78020,27 +94489,39 @@ redfoxwp2 - Red Fox War Planes II (China, set 1) + Hong Hu Zhanji II (China, set 1) redfoxwp2a - Red Fox War Planes II (China, set 2) + Hong Hu Zhanji II (China, set 2) redhawk - Red Hawk (US) + Red Hawk (USA, Canada & South America) redhawkb - Red Hawk (bootleg) + Red Hawk (horizontal, bootleg) redhawke Red Hawk (Excellent Co., Ltd) + + redhawkg + Red Hawk (horizontal, Greece) + redhawki - Red Hawk (Italy) + Red Hawk (horizontal, Italy) + + + redhawkk + Red Hawk (Korea) + + + redhawks + Red Hawk (horizontal, Spain) redlin2p @@ -78056,11 +94537,19 @@ redufob - Defend the Terra Attack on the Red UFO (bootleg) + Defend the Terra Attack on the Red UFO (bootleg, set 1) + + + redufob2 + Defend the Terra Attack on the Red UFO (bootleg, set 2) reelemin - Reel 'Em In (Russia) + Reel 'Em In (English) + + + reeleminr + Reel 'Em In (Russian) reelfun @@ -78070,13 +94559,29 @@ reelfun1 Reel Fun (Version 7.01) + + reelpwr + Reel Power (0100400V, NSW/ACT) + reelquak - Reel'N Quake! (Ver. 1.05) + Reel'N Quake! (Version 1.05) + + + reelrkfl + Reelin-n-Rockin - Fast Lane (10298611, Queensland) reelrock - Reelin-n-Rockin (0100779V, Local) + Reelin-n-Rockin (0100779V, NSW/ACT) + + + reelrockql + Reelin-n-Rockin (0101460V, Queensland) + + + reflexcrd + Reflex Cards (English, serial protected) regulus @@ -78096,24 +94601,32 @@ relief - Relief Pitcher (set 1, 07 Jun 1992 / 28 May 1992) + Relief Pitcher (Rev D, 07 Jun 1992 / 28 May 1992) relief2 - Relief Pitcher (set 2, 26 Apr 1992 / 08 Apr 1992) + Relief Pitcher (Rev C, 26 Apr 1992 / 08 Apr 1992) relief3 - Relief Pitcher (set 3, 10 Apr 1992 / 08 Apr 1992) + Relief Pitcher (Rev B, 10 Apr 1992 / 08 Apr 1992) renaiclb Mahjong Ren-ai Club (Japan) + + renaimj + Renai Mahjong Idol Gakuen (Japan) + renegade Renegade (US) + + renegadeb + Renegade (US bootleg) + renju Renju Kizoku @@ -78122,6 +94635,10 @@ repulse Repulse + + resclunar + Rescate Lunar (Spanish bootleg of Lunar Rescue) + rescraid Rescue Raider (5/11/87) (non-cartridge) @@ -78130,6 +94647,10 @@ rescraida Rescue Raider (stand-alone) + + rescrdsa + Rescue Raider (Stand-Alone) + rescu911 Rescue 911 (rev.1) @@ -78140,12 +94661,48 @@ rescueb - Rescue (bootleg) + Tuono Blu (bootleg of Rescue) + + + rescuefe + Rescue (Free Enterprise Games, bootleg) resdnt Resident (040415 World) + + resdnt_10 + Resident (100331 Entertainment X) + + + resdnt_11 + Resident (101209 Entertainment N) + + + resdnt_12 + Resident (110111 Entertainment A) + + + resdnt_13 + Resident (110124 Entertainment A) + + + resdnt_14 + Resident (110204 Entertainment A) + + + resdnt_15 + Resident (110311 Entertainment A) + + + resdnt_16 + Resident (140526 Entertainment A) + + + resdnt_17 + Resident (110411 Entertainment A) + resdnt_2 Resident (040513 World) @@ -78182,6 +94739,10 @@ resdnt_3 Resident (070222 Russia) + + resdnt_5 + Resident (090722 Entertainment) + resdnt_6 Resident (100311 World) @@ -78194,25 +94755,69 @@ resdnt_9 Resident (100316 Russia) + + retofin1 + Return of the Invaders (bootleg set 1) + + + retofin2 + Return of the Invaders (bootleg set 2) + retofinv Return of the Invaders - retofinv1 - Return of the Invaders (bootleg set 1) + retofinvb + Return of the Invaders (bootleg w/MCU) - retofinv2 - Return of the Invaders (bootleg set 2) + retofinvb1 + Return of the Invaders (bootleg no MCU set 1) + + + retofinvb2 + Return of the Invaders (bootleg no MCU set 2) + + + retofinvb3 + Return of the Invaders (bootleg no MCU set 3) + + + retrsam + Return of the Samurai (0400549V, NSW/ACT) + + + retrsama + Return of the Samurai (0200549V, NSW/ACT) + + + retrsamb + Return of the Samurai (0200506V, NSW/ACT) + + + retsama6 + Return of the Samurai (10117211, NSW/ACT) revenger - Revenger + Revenger '84 (older) + + + revlatns + Revelations + + + revngr84 + Revenger '84 (newer) revx - Revolution X (Rev. 1.0 6/16/94) + Revolution X (rev 1.0 6/16/94) + + + revxp5 + Revolution X (prototype, rev 5.0 5/23/94) rezon @@ -78226,6 +94831,10 @@ rf2 Konami RF2 - Red Fighter + + rf51w14cg + unknown Recreativos Franco slot machine (model RF51W14-CG) + rfjet Raiden Fighters Jet (Germany) @@ -78270,17 +94879,57 @@ rfmpbr2 Pinball 2000: Revenge From Mars (rev. 2) + + rfsantafeg + Santa Fe Golden + rgum Royal Gum (Italy) + + rhnation + Rhythm Nation (v01.00.04, boot v3.1.5) + + + rhunting + Robot Hunting (bootleg of Death Race) [TTL] + + + rhytngk + Rhythm Tengoku (Japan) + ribbit Ribbit! + + ribbitj + Ribbit! (Japan) + + + ribrac + Ribbit Racin (Lazer-Tron) + + + ridefgtj + Riding Fight (Japan) + + + ridefgtu + Riding Fight (US) + + + ridersrf + Rider's Surf + + + ridger2j + Ridge Racer 2 (Rev. RRS1, Japan) + ridgera2 - Ridge Racer 2 (Rev. RRS2, World) + Ridge Racer 2 (Rev. RRS2 Ver.B, World) ridgera2j @@ -78310,9 +94959,13 @@ ridgeracj Ridge Racer (Rev. RR1, Japan) + + ridgeraj + Ridge Racer (Rev. RR1, Japan) + ridhero - Riding Hero (NGM-006)(NGH-006) + Riding Hero (NGM-006 ~ NGH-006) ridheroh @@ -78334,6 +94987,18 @@ ridleofp Riddle of Pythagoras (Japan) + + rimrck12 + Rim Rockin' Basketball (V1.2) + + + rimrck16 + Rim Rockin' Basketball (V1.6) + + + rimrck20 + Rim Rockin' Basketball (V2.0) + rimrockn Rim Rockin' Basketball (V2.2) @@ -78342,6 +95007,10 @@ rimrockn12 Rim Rockin' Basketball (V1.2) + + rimrockn12b + Rim Rockin' Basketball (V1.2, bootleg) + rimrockn16 Rim Rockin' Basketball (V1.6) @@ -78350,6 +95019,10 @@ rimrockn20 Rim Rockin' Basketball (V2.0) + + ringball + Ring Ball (Ver. 2.6) + ringdest Ring of Destruction: Slammasters II (Euro 940902) @@ -78358,6 +95031,14 @@ ringdesta Ring of Destruction: Slammasters II (Asia 940831) + + ringdestb + Ring of Destruction: Slammasters II (Brazil 940902) + + + ringdesth + Ring of Destruction: Slammasters II (Hispanic 940902) + ringdstd Ring of Destruction: Slammasters II (Euro 940902 Phoenix Edition) (bootleg) @@ -78370,6 +95051,14 @@ ringfgt2 Ring Fighter (set 2) + + ringkin2 + Ring King (US set 2) + + + ringkin3 + Ring King (US set 3) + ringking Ring King (US set 1) @@ -78384,7 +95073,7 @@ ringkingw - Ring King (US, Wood Place Inc.) + Ring King (US, Woodplace Inc.) ringohja @@ -78392,6 +95081,10 @@ ringout + Ring Out 4x4 (Rev A) + + + ringouto Ring Out 4x4 @@ -78406,6 +95099,14 @@ ringrageu Ring Rage (Ver 2.3A 1992/08/09) + + ringragj + Ring Rage (Japan) + + + ringragu + Ring Rage (US) + rio Rio @@ -78418,6 +95119,10 @@ riotcity Riot City (Japan) + + riotw + Riot (Woong Bi license) + rip300 Ripley's Believe It or Not! (3.00) @@ -78528,12 +95233,20 @@ ripribit + Ripper Ribbit (Version 3.5) + + + ripribita Ripper Ribbit (Version 2.8.4) riskchal Risky Challenge + + rittam + R&T (Rod-Land prototype) + riviera Riviera Hi-Score (2131-08, U5-4A) @@ -78550,9 +95263,17 @@ rjammer Roller Jammer + + rkjanoh2 + Royal King Jang Oh 2 (v4.00 1984 Jun 10th) + rltennis - Reality Tennis + Reality Tennis (set 1) + + + rltennisa + Reality Tennis (set 2) rmancp2j @@ -78564,7 +95285,11 @@ rmhaihai - Real Mahjong Haihai (Japan) + Real Mahjong Haihai (Japan, newer) + + + rmhaihai2 + Real Mahjong Haihai (Japan, older) rmhaihib @@ -78586,6 +95311,46 @@ rmpgwt11 Rampage: World Tour (rev 1.1) + + rndrndqs + Round and Round (Rev 6) (Quick $ilver) + + + roadblc1 + Road Blasters (cockpit, rev 1) + + + roadblcg + Road Blasters (cockpit, German, rev 1) + + + roadblg1 + Road Blasters (upright, German, rev 1) + + + roadblg2 + Road Blasters (upright, German, rev 2) + + + roadbls1 + Road Blasters (upright, rev 1) + + + roadbls2 + Road Blasters (upright, rev 2) + + + roadbls3 + Road Blasters (upright, rev 3) + + + roadblsc + Road Blasters (cockpit, rev 2) + + + roadblsg + Road Blasters (upright, German, rev 3) + roadblst Road Blasters (upright, rev 4) @@ -78626,9 +95391,17 @@ roadblstg2 Road Blasters (upright, German, rev 2) + + roadblstgu + Road Blasters (upright, German, rev ?) + roadburn - Road Burners + Road Burners (ver 1.04) + + + roadburn1 + Road Burners (ver 1.0) roadedge @@ -78642,13 +95415,37 @@ roadf2 Road Fighter (set 2) + + roadf3 + Road Fighter (set 3, conversion hack on Hyper Sports PCB) + + + roadfh + Road Fighter (bootleg GX330 conversion) + + + roadfu + Road Fighter (set 3, unencrypted) + roadriot - Road Riot 4WD (set 1, 13 Nov 1991) + Road Riot 4WD (set 1, 04 Dec 1991) + + + roadriota + Road Riot 4WD (set 2, 13 Nov 1991) + + + roadriotb + Road Riot 4WD (set 3, 04 Jun 1991) - roadrioto - Road Riot 4WD (set 2, 04 Jun 1991) + roadrun1 + Road Runner (rev 1) + + + roadrun2 + Road Runner (rev 1+) roadrunm @@ -78670,6 +95467,10 @@ roadrunr Road Runner + + roadtrip + Road Trip (0152539, US) + robadv Robin's Adventure (Version 1.7E Dual) @@ -78742,14 +95543,30 @@ robby The Adventures of Robby Roto! + + robo_a29 + Robocop (2.9) + + + robo_a30 + Robocop (3.0) + robo_a34 Robocop (3.4) + + roboarma + Robo Army (set 2) + roboarmy Robo Army + + roboarmya + Robo Army (NGM-032 ~ NGH-032) + robocop Robocop (World revision 4) @@ -78764,12 +95581,24 @@ robocop2u + Robocop 2 (US v0.10) + + + robocop2ua Robocop 2 (US v0.05) robocopb Robocop (World bootleg) + + robocopb2 + Robocop (Red Corporation World bootleg) + + + robocopi + Robocop (FMV Demo) + robocopj Robocop (Japan) @@ -78786,17 +95615,33 @@ robocopw Robocop (World revision 3) + + robocp2j + Robocop 2 (Japan) + + + robocp2u + Robocop 2 (US) + + + robocpu0 + Robocop (US revision 0) + robokid - Atomic Robo-kid + Atomic Robo-kid (World, Type-2) robokidj - Atomic Robo-kid (Japan, set 1) + Atomic Robo-kid (Japan, Type-2, set 1) robokidj2 - Atomic Robo-kid (Japan, set 2) + Atomic Robo-kid (Japan, Type-2, set 2) + + + robokidj3 + Atomic Robo-kid (Japan) robot @@ -78822,14 +95667,38 @@ robotron Robotron: 2084 (Solid Blue label) + + robotron12 + Robotron: 2084 (2012 'wave 201 start' hack) + + + robotron87 + Robotron: 2084 (1987 'shot-in-the-corner' bugfix) + + + robotrontd + Robotron: 2084 (2015 'tie-die V2' hack) + + + robotronun + Robotron: 2084 (Unidesa license) + robotronyo Robotron: 2084 (Yellow/Orange label) + + robotryo + Robotron (Yellow-Orange label) + robowars Robo-War + + robowarsf + Robo-War (French) + robowres Robo Wres 2001 @@ -78850,6 +95719,10 @@ rock_enc Rock Encore + + rock_encg + Rock Encore (German) + rockclim Rock Climber @@ -78858,6 +95731,10 @@ rockduck Rock Duck (prototype?) + + rockg + Rock (German) + rockman2j Rockman 2: The Power Fighters (Japan 960708) @@ -78902,6 +95779,14 @@ rockragej Koi no Hotrock (Japan) + + rockragj + Koi no Hotrock (Japan) + + + rockroll + Rock 'n' Roll + rocktris Rock Tris @@ -78914,6 +95799,10 @@ rocky Rocky + + rockyf + Rocky (French speech) + rocnrope Roc'n Rope @@ -78922,9 +95811,21 @@ rocnropek Roc'n Rope (Kosuka) + + rocnropk + Roc'n Rope (Kosuka) + + + rodent + Rodent Exterminator + rodland - Rod-Land (World) + Rod-Land (World, set 1) + + + rodlanda + Rod-Land (World, set 2) rodlandj @@ -78932,6 +95833,14 @@ rodlandjb + Rod-Land (Japan bootleg with unencrypted program) + + + rodlandjb2 + Rod-Land (Japan bootleg with unencrypted program and GFX) + + + rodlndjb Rod-Land (Japan bootleg) @@ -78958,6 +95867,18 @@ roishtar The Return of Ishtar + + rolcrush + Rolling Crush (version 1.07.E - 1999/02/11, Trust license) + + + rolcrusha + Rolling Crush (version 1.03.E - 1999/01/29) + + + roldfrga + The Return of Lady Frog (set 2) + roldfrog The Return of Lady Frog (set 1) @@ -78970,6 +95891,10 @@ roldisco Roller Disco + + rolla + unknown 'Rolla' slot machine + rollace Roller Aces (set 1) @@ -78986,6 +95911,14 @@ rollergj Rollergames (Japan) + + rollext + ROLLing eX.tre.me (US) + + + rollfr + Roll Fruit (030821) + rollfr_2 Roll Fruit (040318) @@ -78998,10 +95931,18 @@ rollfr_4 Roll Fruit (080331) + + rollfr_5 + Roll Fruit (100924) + rollingc Rolling Crash / Moon Base + + rollr_d2 + Rollergames (AD-2) Prototype + rollr_e1 Rollergames (PU-1) @@ -79010,6 +95951,14 @@ rollr_ex Rollergames (EXPERIMENTAL) + + rollr_f2 + Rollergames (LF-2) French + + + rollr_f3 + Rollergames (LF-3) French + rollr_g3 Rollergames (LG-3) Germany @@ -79032,7 +95981,7 @@ romanl - Roman Legions (Konami Endeavour) + Roman Legions (Konami Endeavour, Russia) rompers @@ -79042,6 +95991,10 @@ romperso Rompers (Japan, old version) + + ron2 + Futari Mahjong Ron II + rongrong Puzzle Game Rong Rong (Europe) @@ -79056,28 +96009,48 @@ ronjan - Ron Jan (Super) + Ron Jan + + + ronjans + Ron Jan Super ropeman Ropeman (bootleg of Roc'n Rope) + + rota_101 + Rotation VIII (v. 1.01) + + + rota_115 + Rotation VIII (v. 1.15) + rotaryf Rotary Fighter rotation - Rotation VIII + Rotation VIII (v. 1.17) rotd - Rage of the Dragons (NGM-264?) + Rage of the Dragons (NGM-2640?) + + + rotdh + Rage of the Dragons (NGH-2640?) rotr Rise of the Robots (prototype) + + rotra + Rise of the Robots (prototype, older) + roughrac Rough Racer (Japan, Floppy Based, FD1094 317-0058-06b) @@ -79100,19 +96073,35 @@ route16 - Route 16 (set 1) + Route 16 (Sun Electronics, set 1) route16a - Route 16 (set 2) + Route 16 (Centuri license, set 1) route16b + Route 16 (Centuri license, set 2) + + + route16bl Route 16 (bootleg) + + route16c + Route 16 (Centuri license, set 3, bootleg?) + + + route16d + Route 16 (Sun Electronics, set 2) + routex - Route X (bootleg) + Route X (bootleg, set 1) + + + routexa + Route X (bootleg, set 2) royal @@ -79124,35 +96113,47 @@ royalcrd - Royal Card (Austrian, set 1) + Royal Card (German, set 1) + + + royalcrd_msx + Royal Card (stealth with MSX multigame) + + + royalcrd_nes + Royal Card (stealth with NES multigame) royalcrda - Royal Card (Austrian, set 2) + Royal Card (German, set 2) royalcrdb - Royal Card (Austrian/Polish, set 3) + Royal Card (German/Polish, set 3) royalcrdc - Royal Card (Austrian, set 4) + Royal Card (German, set 4) royalcrdd - Royal Card (Austrian, set 5) + Royal Card (German, set 5) royalcrde - Royal Card (Austrian, set 6) + Royal Card (German, set 6) royalcrdf - Royal Card (Slovak, encrypted) + Royal Card (Evona, Polish, encrypted) royalcrdg - Royal Card (Austrian, set 7, CMC C1030 HW) + Royal Card (German, set 7, CMC C1030 HW) + + + royalcrdh + Royal Card (German, set 8) royalcrdp @@ -79170,6 +96171,10 @@ royalea Royale (set 2) + + royaljp + Royal Card / Royal Jackpot (with a third draw)(encrypted) + royalmah Royal Mahjong (Falcon bootleg, v1.01) @@ -79182,6 +96187,10 @@ royalngt Royal Night [BET] (Japan 840220 RN 2-00) + + royalpk2 + Royal Poker 2 (Network version 3.12) + royalqn Royal Queen [BET] (Japan 841010 RQ 0-07) @@ -79192,28 +96201,40 @@ roylcrdn - Royal Card (Nichibutsu) + Royal Card (Nichibutsu HW) + + + roylcrdna + Royal Card Part-Two (Nichibutsu HW, Ver. 1.02) roypok96 - Royal Poker '96 (set 1) + Royal Poker '96 (set 1, v97-3.5) roypok96a - Royal Poker '96 (set 2) + Royal Poker '96 (set 2, v98-3.6) roypok96b - Royal Poker '96 (set 3) + Royal Poker '96 (set 3, v98-3.6?) + + + roypok96c + Royal Poker '96 (set 4, C3 board) rpatrol - River Patrol (Orca) + River Patrol (Japan) rpatrolb River Patrol (bootleg) + + rpatroln + River Patrol (Japan, unprotected) + rpunch Rabbit Punch (US) @@ -79226,6 +96247,10 @@ rrangerb Rough Ranger (v2.0, bootleg) + + rriders + Ring Riders (Software version v2.2) + rrreveng Road Riot's Revenge (prototype, Sep 06, 1994) @@ -79238,10 +96263,22 @@ rrrevengb Road Riot's Revenge (prototype, Jan 27, 1994, set 2) + + rrrevenp + Road Riot's Revenge (prototype alt) + rrvac Ridge Racer V Arcade Battle (RRV3 Ver. A) + + rrvac1 + Ridge Racer V Arcade Battle (RRV1 Ver. A) + + + rrvac2 + Ridge Racer V Arcade Battle (RRV2 Ver. A) + rs_l6 Red and Ted's Road Show (L-6) @@ -79290,6 +96327,10 @@ rthunder Rolling Thunder (rev 3) + + rthunder0 + Rolling Thunder (oldest) + rthunder1 Rolling Thunder (rev 1) @@ -79298,6 +96339,14 @@ rthunder2 Rolling Thunder (rev 2) + + rthundera + Rolling Thunder (rev 3, hack) + + + rthundro + Rolling Thunder (old version) + rtriv Romar Triv @@ -79308,7 +96357,7 @@ rtype2 - R-Type II + R-Type II (World) rtype2j @@ -79318,6 +96367,10 @@ rtype2jc R-Type II (Japan, revision C) + + rtype2m82b + R-Type II (Japan, bootleg M82 conversion) + rtypeb R-Type (World bootleg) @@ -79330,6 +96383,10 @@ rtypejp R-Type (Japan prototype) + + rtypelej + R-Type Leo (Japan rev. D) + rtypeleo R-Type Leo (World) @@ -79338,10 +96395,22 @@ rtypeleoj R-Type Leo (Japan) + + rtypem82b + R-Type (Japan, bootleg M82 conversion) + + + rtypepj + R-Type (Japan prototype) + rtypeu R-Type (US) + + rubymag + Ruby Magic (10125711, NSW/ACT) + rugby Rugby? (four roses hardware) @@ -79350,6 +96419,14 @@ rugrats Rug Rats + + rulechab + Super Ball (Version EC-3.50 N165) + + + rulechan + Super Ball (Version EC-3.50 N322) + rumba Rumba Lumber @@ -79362,13 +96439,29 @@ rumblef2 The Rumble Fish 2 + + rumblefp + The Rumble Fish (prototype) + + + rumblf2p + The Rumble Fish 2 (prototype) + + + rumbreel + Rumble Reels (20288611, NSW/ACT) + runark Runark (Japan) runaway - Runaway (prototype) + Runaway (Atari, prototype) + + + runaways + Runaway (Sun Electronics, Japan) rundeep @@ -79386,18 +96479,54 @@ runguna Run and Gun (ver EAA 1993 10.4) + + rungunad + Run and Gun (ver EAA 1993 10.4) (dual screen with demux adapter) + + + rungunb + Run and Gun (ver EAA 1993 9.10, prototype?) + + + rungunbd + Run and Gun (ver EAA 1993 9.10, prototype?) (dual screen with demux adapter) + + + rungund + Run and Gun (ver EAA 1993 10.8) (dual screen with demux adapter) + rungunu - Run and Gun (ver UAB 1993 10.12) + Run and Gun (US ver. UAB) rungunua Run and Gun (ver UBA 1993 10.8) + + rungunuad + Run and Gun (ver UBA 1993 10.8) (dual screen with demux adapter) + + + rungunud + Run and Gun (ver UAB 1993 10.12, dedicated twin cabinet) + + + runpuppy + Run Run Puppy + + + ruprup + Roll Up! Roll Up!! (10115911, NSW/ACT) + rushatck Rush'n Attack (US) + + rushbets + Rushing Beat Shura (SNES bootleg) + rushcrsh Rush & Crash (Japan) @@ -79406,10 +96535,18 @@ rushhero Rushing Heroes (ver UAB) + + rushrst + Rushin Rooster (0100534V, NSW/ACT) + rvrbt_l3 Riverboat Gambler (L-3) + + rvrbt_p7 + Riverboat Gambler (PA-7) + rvschool Rival Schools: United By Fate (Euro 971117) @@ -79434,6 +96571,10 @@ rygar3 Rygar (US set 3 Old Version) + + rygarb + Rygar (US, bootleg) + rygarj Argus no Senshi (Japan) @@ -79444,11 +96585,19 @@ ryouran - VS Mahjong Otome Ryouran + VS Mahjong Otome Ryouran (revision 2) + + + ryourano + VS Mahjong Otome Ryouran (revision 1) ryujin - Ryu Jin (Japan) + Ryu Jin (Japan, ET910000B PCB) + + + ryujina + Ryu Jin (Japan, ET910000A PCB) ryukendn @@ -79464,7 +96613,15 @@ ryukyu - RyuKyu (Japan, FD1094 317-5023) + RyuKyu (Rev A, Japan) (FD1094 317-5023A) + + + ryukyua + RyuKyu (Japan) (FD1094 317-5023) + + + ryukyud + RyuKyu (Japan) (bootleg of FD1094 317-5023 set) ryuuha @@ -79502,14 +96659,30 @@ s1945k Strikers 1945 (Korea) + + s1945n + Strikers 1945 (World, unprotected) + + + s1945nj + Strikers 1945 (Japan, unprotected) + s1945p Strikers 1945 Plus + + s80btest + System 80B Test + s80tst System 80 Test + + s8waysfc + Super 8 Ways FC (DB98103-011, Fruit combination) + sabotenb Saboten Bombers (set 1) @@ -79518,9 +96691,17 @@ sabotenba Saboten Bombers (set 2) + + sabotnba + Saboten Bombers (set 2) + + + sackids + Soreyuke Anpanman Crayon Kids (J 001026 V1.000) + sadari - Sadari + Sadari (Japan, NTC license) safari @@ -79540,60 +96721,96 @@ safemon - Safe Money (Konami Endeavour) + Safe Money (Konami Endeavour, Russia) sagaia Sagaia (dual screen) (World) + + sahalove + Sahara Love (France) + sailormn Pretty Soldier Sailor Moon (Ver. 95/03/22B, Europe) sailormnh - Pretty Soldier Sailor Moon (Ver. 95/03/22B, Hong Kong) + Bishoujo Senshi Sailor Moon (Ver. 95/03/22B, Hong Kong) sailormnj - Pretty Soldier Sailor Moon (Ver. 95/03/22B, Japan) + Bishoujo Senshi Sailor Moon (Ver. 95/03/22B, Japan) + + + sailormnjee + Pretty Soldier Sailor Moon (Enhanced Edition v5 Final, Hack) sailormnk Pretty Soldier Sailor Moon (Ver. 95/03/22B, Korea) - sailormno + sailormnn Pretty Soldier Sailor Moon (Ver. 95/03/22, Europe) + + sailormnnh + Bishoujo Senshi Sailor Moon (Ver. 95/03/22, Hong Kong) + + + sailormnnj + Bishoujo Senshi Sailor Moon (Ver. 95/03/22, Japan) + + + sailormnnk + Pretty Soldier Sailor Moon (Ver. 95/03/22, Korea) + + + sailormnnt + Bishoujo Senshi Sailor Moon (Ver. 95/03/22, Taiwan) + + + sailormnnu + Pretty Soldier Sailor Moon (Ver. 95/03/22, USA) + + + sailormno + Pretty Soldier Sailor Moon (Ver. 95/03/21, Europe) + sailormnoh - Pretty Soldier Sailor Moon (Ver. 95/03/22, Hong Kong) + Bishoujo Senshi Sailor Moon (Ver. 95/03/21, Hong Kong) sailormnoj - Pretty Soldier Sailor Moon (Ver. 95/03/22, Japan) + Bishoujo Senshi Sailor Moon (Ver. 95/03/21, Japan) sailormnok - Pretty Soldier Sailor Moon (Ver. 95/03/22, Korea) + Pretty Soldier Sailor Moon (Ver. 95/03/21, Korea) sailormnot - Pretty Soldier Sailor Moon (Ver. 95/03/22, Taiwan) + Bishoujo Senshi Sailor Moon (Ver. 95/03/21, Taiwan) sailormnou - Pretty Soldier Sailor Moon (Ver. 95/03/22, USA) + Pretty Soldier Sailor Moon (Ver. 95/03/21, USA) sailormnt - Pretty Soldier Sailor Moon (Ver. 95/03/22B, Taiwan) + Bishoujo Senshi Sailor Moon (Ver. 95/03/22B, Taiwan) sailormnu Pretty Soldier Sailor Moon (Ver. 95/03/22B, USA) + + sailormo + Pretty Soldier Sailor Moon (95-03-22) + sailorwa Mahjong Sailor Wars (Japan set 2) @@ -79606,6 +96823,14 @@ sailorws Mahjong Sailor Wars (Japan set 1) + + saiyugb1 + Sai Yu Gou Ma Roku (Japan bootleg 1) + + + saiyugb2 + Sai Yu Gou Ma Roku (Japan bootleg 2) + saiyugou Sai Yu Gou Ma Roku (Japan) @@ -79634,13 +96859,17 @@ salamandj Salamander (version J) + + salamanj + Salamander (version J) + salarymc Salary Man Champ (GCA18 VER. JAA) salmankt - Salary Man Kintarou + Net@Select: Salaryman Kintaro salmndr2 @@ -79656,15 +96885,23 @@ samba - Samba De Amigo (JPN) (Rev B) + Samba De Amigo (Rev B) samba2k - Samba de Amigo ver. 2000 + Samba de Amigo ver. 2000 (Japan) + + + sambaa + Samba De Amigo (Rev A) sambap - Samba De Amigo (prototype) + Samba De Amigo (USA, prototype) + + + samesam2 + Same! Same! Same! (2P Ver.) samesame @@ -79675,8 +96912,12 @@ Same! Same! Same! (2P set) - sammymdl - Sammy Medal Game System Bios + samesamecn + Jiao! Jiao! Jiao! (China, 2P set) + + + samesamenh + Same! Same! Same! (1P set, NEW VER! hack) sams64 @@ -79686,17 +96927,25 @@ sams64_2 Samurai Shodown: Warrior's Rage / Samurai Spirits 2: Asura Zanmaden + + samsh5fe + Samurai Shodown V Special / Samurai Spirits Zero Special (NGM-272) (NGH-272) (Final Edition, location test version) + + + samsh5pf + Samurai Shodown V Perfect / Samurai Spirits Zero Perfect (bootleg, hack) + samsh5sp Samurai Shodown V Special / Samurai Spirits Zero Special (NGM-2720) samsh5sph - Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720) (2nd release, less censored) + Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720, 2nd release, less censored) samsh5spho - Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720) (1st release, censored) + Samurai Shodown V Special / Samurai Spirits Zero Special (NGH-2720, 1st release, censored) samsho @@ -79704,11 +96953,19 @@ samsho2 - Samurai Shodown II / Shin Samurai Spirits - Haohmaru jigokuhen (NGM-063)(NGH-063) + Samurai Shodown II / Shin Samurai Spirits - Haohmaru Jigokuhen (NGM-063 ~ NGH-063) samsho2k - Saulabi Spirits / Jin Saulabi Tu Hon (Korean release of Samurai Shodown II) + Saulabi Spirits / Jin Saulabi Tu Hon (Korean release of Samurai Shodown II, set 1) + + + samsho2ka + Saulabi Spirits / Jin Saulabi Tu Hon (Korean release of Samurai Shodown II, set 2) + + + samsho2sp + Samurai Shodown II / Shin Samurai Spirits - Haohmaru jigokuhen (Special 2017, hack) samsho3 @@ -79720,15 +96977,23 @@ samsho4 - Samurai Shodown IV - Amakusa's Revenge / Samurai Spirits - Amakusa Kourin (NGM-222)(NGH-222) + Samurai Shodown IV - Amakusa's Revenge / Samurai Spirits - Amakusa Kourin (NGM-222 ~ NGH-222) samsho4k Pae Wang Jeon Seol / Legend of a Warrior (Korean censored Samurai Shodown IV) + + samsho4sp + Samurai Shodown IV - Amakusa's Revenge / Samurai Spirits - Amakusa Kourin (Special 2017, hack) + samsho5 - Samurai Shodown V / Samurai Spirits Zero (NGM-2700) + Samurai Shodown V / Samurai Spirits Zero (NGM-2700, set 1) + + + samsho5a + Samurai Shodown V / Samurai Spirits Zero (NGM-2700, set 2) samsho5b @@ -79738,6 +97003,14 @@ samsho5h Samurai Shodown V / Samurai Spirits Zero (NGH-2700) + + samsho5x + Samurai Shodown V / Samurai Spirits Zero (hack of XBOX version) + + + samshoa + Samurai Shodown / Samurai Spirits (NGM-045, alternate board) + samshoh Samurai Shodown / Samurai Spirits (NGH-045) @@ -79772,12 +97045,16 @@ sandscrpb - Sand Scorpion (Chinese Title Screen, Revised Hardware) + Kuai Da Shizi Huangdi (China?, Revised Hardware) sanjeon DaeJeon! SanJeon SuJeon (AJTUE 990412 V1.000) + + sanremmg + unknown San Remo / Elsy Multigame + santam Santa Maria (Russia) (Atronic) @@ -79794,6 +97071,10 @@ sasissu Taisen Tanto-R Sashissu!! (J 980216 V1.000) + + sassisu + Taisen Tanto-R Sashissu!! + sasuke Sasuke vs. Commander @@ -79810,6 +97091,14 @@ satansatind Satan of Saturn (Inder S.A., bootleg) + + sathena + Super Athena (bootleg) + + + saturn + Saturn + saturn2 Saturn 2 @@ -79820,15 +97109,31 @@ sauro - Sauro + Sauro (set 1) + + + sauroa + Sauro (set 2) + + + saurob + Sauro (bootleg) saurop Sauro (Philko license) + + saurorr + Sauro (Recreativos Real S.A. license) + savagere - Savage Reign / Fu'un Mokushiroku - kakutou sousei + Savage Reign / Fu'un Mokushiroku - Kakutou Sousei + + + savagereb + Savage Reign / Fu'un Mokushiroku - kakutou sousei (Boss Hack) savanna @@ -79852,7 +97157,15 @@ sbagman - Super Bagman + Super Bagman (version 5) + + + sbagman2 + Super Bagman (version 3?) + + + sbagmani + Super Bagman (Itisa, Spain) sbagmans @@ -79862,6 +97175,10 @@ sbasebal Super Champion Baseball (US) + + sbasebalj + Super Champion Baseball (Japan) + sbasketb Super Basketball (version I, encrypted) @@ -79878,6 +97195,14 @@ sbasketh Super Basketball (version H, unprotected) + + sbasketo + Super Basketball (version E) + + + sbasketu + Super Basketball (not encrypted) + sbbros Super Buster Bros. (USA 901001) @@ -79892,11 +97217,19 @@ sbishik + Super Bishi Bashi Championship (ver KAB, 3 Players) + + + sbishika Super Bishi Bashi Championship (ver KAA, 3 Players) sblast2b - Sonic Blast Man 2 Special Turbo (SNES bootleg) + Sonic Blast Man II Special Turbo (SNES bootleg, set 1) + + + sblast2ba + Sonic Blast Man II Special Turbo (SNES bootleg, set 2) sblazerp @@ -79904,15 +97237,47 @@ sbm + Sonic Blast Man (US) + + + sbmj Sonic Blast Man (Japan) - sboblboa - Super Bobble Bobble (set 1) + sbmjb + Sonic Blast Man's Janken Battle (main ver. 1.1, video ver. 1.0) sboblbob - Super Bobble Bobble (set 2) + Super Bobble Bobble + + + sboblbobl + Super Bobble Bobble (bootleg, set 1) + + + sboblbobla + Super Bobble Bobble (bootleg, set 2) + + + sboblboblb + Super Bobble Bobble (bootleg, set 3) + + + sboblboblc + Super Bubble Bobble (bootleg) + + + sboblbobld + Super Bobble Bobble (bootleg, set 4) + + + sboblboble + Super Bobble Bobble (bootleg, set 5) + + + sboblboblf + Super Bobble Bobble (bootleg, set 6) sbomber @@ -79922,6 +97287,10 @@ sbombera Space Bomber + + sbomberb + Space Bomber (ver. B) + sbowling Strike Bowling @@ -79938,10 +97307,22 @@ sbrkout3 Super Breakout (rev 03) + + sbrkoutc + Super Breakout (Canyon and Vertical Breakout, prototype) + + + sbrkoutct + Super Breakout (Cocktail, prototype) + sbsgomo Space Battle Ship Gomorrah + + sbubsm + Super Bubble Bobble (Sun Mixing, Mega Drive clone hardware) + sbugger Space Bugger (set 1) @@ -79950,17 +97331,41 @@ sbuggera Space Bugger (set 2) + + sbuk2 + Super Bucks II (0400501V, NSW/ACT) + + + sbuk2a + Super Bucks II (0300006V, NSW/ACT) + + + sbuk3 + Super Bucks III (0200711V, NSW/ACT) + + + sbuk3a + Super Bucks III (0100711V, NSW/ACT) + + + sbuk5 + Super Bucks V (20203611, NSW/ACT) + sburners Street Burners [TTL] + + sbxc + Sengoku Basara X Cross + sc1actv8 Active 8 (Dutch) (Bellfruit) (Scorpion 1) sc1armad - Armada (Dutch) (Bellfruit) (Scorpion 1) + Armada (Dutch) (Bellfruit) (Scorpion 1) sc1barcd @@ -80428,7 +97833,7 @@ sc1flash - Flash (Dutch) (Bellfruit) (Scorpion 1) + Flash (Dutch) (Bellfruit) (Scorpion 1) sc1frpus @@ -81280,7 +98685,7 @@ sc2cops1p - Cops 'n' Robbers (Bellfruit) (set 6, Protocol) (Scorpion 2/3) + Cops 'n' Robbers (Bellfruit) (set 6, Protocol) (Scorpion 2/3) sc2cops2 @@ -81288,11 +98693,11 @@ sc2cops3 - Cops 'n' Robbers (Bellfruit) (set 3) (Scorpion 2/3) + Cops 'n' Robbers (Bellfruit) (set 3) (Scorpion 2/3) sc2cops3p - Cops 'n' Robbers (Bellfruit) (set 3, Protocol) (Scorpion 2/3) + Cops 'n' Robbers (Bellfruit) (set 3, Protocol) (Scorpion 2/3) sc2cops4 @@ -81300,7 +98705,7 @@ sc2cops5 - Cops 'n' Robbers (Bellfruit) (set 1) (Scorpion 2/3) + Cops 'n' Robbers (Bellfruit) (set 1) (Scorpion 2/3) sc2copsc @@ -81320,11 +98725,11 @@ sc2copscp - Casino Cops 'n' Robbers (Bellfruit) (set 1, Protocol) (Scorpion 2/3) + Casino Cops 'n' Robbers (Bellfruit) (set 1, Protocol) (Scorpion 2/3) sc2copsp - Cops 'n' Robbers (Bellfruit) (set 4, Protocol) (Scorpion 2/3) + Cops 'n' Robbers (Bellfruit) (set 4, Protocol) (Scorpion 2/3) sc2cpe @@ -81498,6 +98903,14 @@ sc2dels1 Del's Millions (Bellfruit) (set 10, UK, 10GBP Jackpot) (Scorpion 2/3) + + sc2dels10 + Del's Millions (Bellfruit) (set 11, UK, ??GBP Jackpot) (Scorpion 2/3) + + + sc2dels11 + Del's Millions (Bellfruit) (set 12, UK, ??GBP Jackpot) (Scorpion 2/3) + sc2dels1p Del's Millions (Bellfruit) (set 10, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) @@ -82784,39 +100197,39 @@ sc4adjba - Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 2) + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 2) sc4adjbb - Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 3) + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 3) sc4adjbc - Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 4) + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 4) sc4adjbd - Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 5) + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 5) sc4adjbe - Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 6) + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 6) sc4adjbf - Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 7) + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 7) sc4adjbg - Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 8) + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 8) sc4adjbh - Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 9) + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 9) sc4adjbi - Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (Set 10) + Ant & Dec's Jiggy Bank (Bellfruit) (Scorpion 4) (set 10) sc4adren @@ -89098,6 +106511,10 @@ sc4hotwde Hot Wad (Bellfruit) (Scorpion 4) (set 6) + + sc4hrolr + High Roller (Bellfruit) (Scorpion 4) + sc4hyde Hyde & Streak (Mazooma) (Scorpion 4) (set 1) @@ -89620,11 +107037,11 @@ sc4knokb - Knockout (PR2057, PKOT) (Mazooma) (Scorpion 4) (set 1) + Knock Out (PR2057, PKOT) (Mazooma) (Scorpion 4) (set 1) sc4knokc - Knockout (PR2057, PKOT) (Mazooma) (Scorpion 4) (set 2) + Knock Out (PR2057, PKOT) (Mazooma) (Scorpion 4) (set 2) sc4lasv @@ -89734,6 +107151,10 @@ sc4legg Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 8) + + sc4legh + Who Wants To Be A Legionnaire (Bellfruit) (Scorpion 4) (set 9) + sc4lined Line Dancer (Mazooma) (Scorpion 4) (set 1) @@ -93090,6 +110511,10 @@ sc4s6ce Super 6 Club (Bellfruit) (Scorpion 4) (set 4) + + sc4s6cf + Super 6 Club (Bellfruit) (Scorpion 4) (set 5) + sc4sace Space Ace (Qps) (Scorpion 4) (set 1) @@ -93624,35 +111049,35 @@ sc4stl - Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 1) + The Sky's The Limit (Bellfruit) (Scorpion 4) (set 1) sc4stla - Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 2) + The Sky's The Limit (Bellfruit) (Scorpion 4) (set 2) sc4stlb - Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 3) + The Sky's The Limit (Bellfruit) (Scorpion 4) (set 3) sc4stlc - Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 4) + The Sky's The Limit (Bellfruit) (Scorpion 4) (set 4) sc4stld - Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 5) + The Sky's The Limit (Bellfruit) (Scorpion 4) (set 5) sc4stle - Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 6) + The Sky's The Limit (Bellfruit) (Scorpion 4) (set 6) sc4stlf - Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 7) + The Sky's The Limit (Bellfruit) (Scorpion 4) (set 7) sc4stlg - Sky's The Limit, The (Bellfruit) (Scorpion 4) (set 8) + The Sky's The Limit (Bellfruit) (Scorpion 4) (set 8) sc4strbr @@ -94056,35 +111481,35 @@ sc4tgear - Top Gear (Mazooma) (Scorpion 4) (set 1) + Top Gears (Mazooma) (Scorpion 4) (set 1) sc4tgeara - Top Gear (Mazooma) (Scorpion 4) (set 2) + Top Gears (Mazooma) (Scorpion 4) (set 2) sc4tgearb - Top Gear (Mazooma) (Scorpion 4) (set 3) + Top Gears (Mazooma) (Scorpion 4) (set 3) sc4tgearc - Top Gear (Mazooma) (Scorpion 4) (set 4) + Top Gears (Mazooma) (Scorpion 4) (set 4) sc4tgeard - Top Gear (Mazooma) (Scorpion 4) (set 5) + Top Gears (Mazooma) (Scorpion 4) (set 5) sc4tgeare - Top Gear (Mazooma) (Scorpion 4) (set 6) + Top Gears (Mazooma) (Scorpion 4) (set 6) sc4tgearf - Top Gear (Mazooma) (Scorpion 4) (set 7) + Top Gears (Mazooma) (Scorpion 4) (set 7) sc4tgearg - Top Gear (Mazooma) (Scorpion 4) (set 8) + Top Gears (Mazooma) (Scorpion 4) (set 8) sc4tic2 @@ -94166,6 +111591,10 @@ sc4ticlbc Treasure Island Club (Bellfruit) (Scorpion 4) (set 2) + + sc4ticlbd + Treasure Island Club (Bellfruit) (Scorpion 4) (set 3) + sc4tload Top Loader (Mazooma) (Scorpion 4) @@ -94316,11 +111745,11 @@ sc4tridn - Trident, The (Mazooma) (Scorpion 4) (set 1) + The Trident (Mazooma) (Scorpion 4) (set 1) sc4tridna - Trident, The (Mazooma) (Scorpion 4) (set 2) + The Trident (Mazooma) (Scorpion 4) (set 2) sc4trist @@ -94700,7 +112129,7 @@ sc4wag - Win-A-Gain (German) (Nova) (Scorpion 4) + WIN-10-Gain (German) (Nova) (Scorpion 4) sc4waw @@ -95150,6 +112579,130 @@ sc4ziggyg Gettin Ziggy With It (Mazooma) (Scorpion 4) (set 8) + + sc5_3414 + Bullseye Hot Arrows (Scorpion 5) + + + sc5_3434 + Monopoly Takeover (Scorpion 5) + + + sc5_3435 + Monopoly Street Party (Scorpion 5) + + + sc5_3437 + Red Hot Silly Peppers Community Party (Scorpion 5) + + + sc5_3438 + Juicy Gems Community Party (Scorpion 5) + + + sc5_3450 + Deal or no Deal Let's Play (Scorpion 5) + + + sc5_3451 + Deal or no Deal Gold (Scorpion 5) + + + sc5_3508 + Club DOND Red Mist (Scorpion 5) + + + sc5_3510 + Deal or no Deal Red Hot (Scorpion 5) + + + sc5_3511 + Deal or no Deal Spank the Banker (Scorpion 5) + + + sc5_3512 + Monopoly Gold (Bellfruit) (Scorpion 5) + + + sc5_3513 + Deal or no Deal Right Deal Right Time (Scorpion 5) + + + sc5_3514 + Deal or no Deal Rapid Round (Scorpion 5) + + + sc5_3515 + 777 Heaven (Scorpion 5) + + + sc5_3516 + Cash Ahoy (Scorpion 5) + + + sc5_3517 + Deal or no Deal East and West Wing (Scorpion 5) + + + sc5_3518 + Deal or no Deal Bank On It (Scorpion 5) + + + sc5_3519 + Deal or no Deal Eliminator (Scorpion 5) + + + sc5_3520 + Cops 'n' Robbers Street Wise (Scorpion 5) + + + sc5_3524 + Cluedo Prime Suspect (Scorpion 5) + + + sc5_3525 + Happy Hour (Scorpion 5) + + + sc5_3530 + Club Cash Ahoy (Scorpion 5) + + + sc5_3551 + Deal or no Deal Seal the Deal (Scorpion 5) + + + sc5_3552 + Snakes and Ladders (Scorpion 5) + + + sc5_3553 + Deal or no Deal Go All the Way (Scorpion 5) + + + sc5_3555 + Family Guy The Drunken Clam (Scorpion 5) + + + sc5_3557 + Deal or no Deal Live (Scorpion 5) + + + sc5_z057 + Quidsia (Scorpion 5) + + + sc5_z058 + Wok 'n' Roll (Scorpion 5) + + + sc5_z059 + Aladdin (Scorpion 5) + + + sc5_z060 + Hard Dk (Scorpion 5) + sc5a40 Around The Board In 40 Days (Mazooma) (Scorpion 5) (set 1) @@ -95672,11 +113225,11 @@ sc5casxt - Casino Xtravaganza (Mazooma) (Scorpion 5) (set 1) + Casino Xtravaganza (Mazooma) (Scorpion 5) (set 1) sc5casxta - Casino Xtravaganza (Mazooma) (Scorpion 5) (set 2) + Casino Xtravaganza (Mazooma) (Scorpion 5) (set 2) sc5cbar7 @@ -97126,6 +114679,14 @@ sc5dndbok Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 12) + + sc5dndbol + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 13) + + + sc5dndbom + Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 14) + sc5dndbq Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 1) @@ -99676,43 +117237,43 @@ sc5hulk - Hulk, The (Bellfruit) (Scorpion 5) (set 1) + The Hulk (Bellfruit) (Scorpion 5) (set 1) sc5hulka - Hulk, The (Bellfruit) (Scorpion 5) (set 2) + The Hulk (Bellfruit) (Scorpion 5) (set 2) sc5hulkb - Hulk, The (Bellfruit) (Scorpion 5) (set 3) + The Hulk (Bellfruit) (Scorpion 5) (set 3) sc5hulkc - Hulk, The (Bellfruit) (Scorpion 5) (set 4) + The Hulk (Bellfruit) (Scorpion 5) (set 4) sc5hulkd - Hulk, The (Bellfruit) (Scorpion 5) (set 5) + The Hulk (Bellfruit) (Scorpion 5) (set 5) sc5hulke - Hulk, The (Bellfruit) (Scorpion 5) (set 6) + The Hulk (Bellfruit) (Scorpion 5) (set 6) sc5hulkf - Hulk, The (Bellfruit) (Scorpion 5) (set 7) + The Hulk (Bellfruit) (Scorpion 5) (set 7) sc5hulkg - Hulk, The (Bellfruit) (Scorpion 5) (set 8) + The Hulk (Bellfruit) (Scorpion 5) (set 8) sc5hulkh - Hulk, The (Bellfruit) (Scorpion 5) (set 9) + The Hulk (Bellfruit) (Scorpion 5) (set 9) sc5hulki - Hulk, The (Bellfruit) (Scorpion 5) (set 10) + The Hulk (Bellfruit) (Scorpion 5) (set 10) sc5iab @@ -100408,27 +117969,27 @@ sc5newcm - Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 1) + The Colour Of Money New (Bellfruit) (Scorpion 5) (set 1) sc5newcma - Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 2) + The Colour Of Money New (Bellfruit) (Scorpion 5) (set 2) sc5newcmb - Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 3) + The Colour Of Money New (Bellfruit) (Scorpion 5) (set 3) sc5newcmc - Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 4) + The Colour Of Money New (Bellfruit) (Scorpion 5) (set 4) sc5newcmd - Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 5) + The Colour Of Money New (Bellfruit) (Scorpion 5) (set 5) sc5newcme - Colour Of Money New, The (Bellfruit) (Scorpion 5) (set 6) + The Colour Of Money New (Bellfruit) (Scorpion 5) (set 6) sc5nmare @@ -101714,6 +119275,14 @@ sc5wotwa War Of The Wads (Mazooma) (Scorpion 5) (set 2) + + sc_091 + Safe Cracker (0.91) + + + sc_10 + Safe Cracker (1.0) + sc_14 Safe Cracker (1.4) @@ -101736,7 +119305,7 @@ sc_18s2 - Safe Cracker (1.8 alternate sound) + Safe Cracker (1.8 German sound) scandal @@ -101746,17 +119315,41 @@ scandalm Scandal Mahjong [BET] (Japan 890217) + + scatmag2 + Scatter Magic II (10001311, NSW/ACT) + + + scatmag2sa + Scatter Magic II (10102711, South Australia) + + + scatmag3 + Scatter Magic III (0452569, US) + scessjoe Success Joe (World) scfinals - Super Cup Finals (Ver 2.2O 1994/01/13) + Super Cup Finals (Ver 2.2O 1994/01/13, single PCB) scfinalso - Super Cup Finals (Ver 2.1O 1993/11/19) + Super Cup Finals (Ver 2.1O 1993/11/19, single PCB) + + + scfinalsoc + Super Cup Finals (Ver 2.1O 1993/11/19, F3 Cartridge) + + + scg05nt + Sega Golf Club Network Pro Tour 2005 (Rev C) (GDX-0010C) + + + scg05ntb + Sega Golf Club Network Pro Tour 2005 (Rev B) (GDX-0010B) scg06nt @@ -101786,17 +119379,33 @@ schasercv Space Chaser (CV version - set 1) + + schaserm + Space Chaser (Model Racing bootleg) + + + schasrcv + Space Chaser (CV version) + scherrym Super Cherry Master schery97 - Skill Cherry '97 (ver. sc3.52) + Skill Cherry '97 (Talking ver. sc3.52) schery97a - Skill Cherry '97 (ver. sc3.52c4) + Skill Cherry '97 (Talking ver. sc3.52c4) + + + schexx + Super Chexx (EM Bubble Hockey) + + + schick + Super Chick schmeisr @@ -101830,13 +119439,37 @@ sciu Special Criminal Investigation (US) + + scm_500 + Standard Change-Makers System 500 / 500E + + + scmaster + Super Cherry Master (v1.0) + scobra Super Cobra scobrab - Super Cobra (bootleg) + Super Cobra (bootleg, set 1) + + + scobrae + Super Cobra (Stern Electronics) (encrypted, KONATEC XC-103SS CPU) + + + scobrae2 + Super Cobra (encrypted) + + + scobrag + Super Cobra (bootleg, set 2) + + + scobraggi + Super Cobra (bootleg, set 3) scobras @@ -101848,11 +119481,19 @@ scontra - Super Contra + Super Contra (set 1) + + + scontraa + Super Contra (set 2) scontraj - Super Contra (Japan) + Super Contra - Alien no Gyakushuu (Japan) + + + score5 + Score 5 scorpion @@ -101870,6 +119511,10 @@ scorpionmc Scorpion (Moon Cresta hardware) + + scorpnmc + Scorpion (Moon Cresta hardware) + scotrsht Scooter Shooter @@ -101892,7 +119537,11 @@ scramb2 - Scramble (bootleg) + Scramble (bootleg, set 1) + + + scramb3 + Scramble (bootleg, set 2) scramblb @@ -101908,7 +119557,15 @@ scramblebf - Scramble (Karateko, French bootleg) + Scramble (Karateco, French bootleg) + + + scramblebun + Scramble (unknown bootleg) + + + scrambleo + Scramble (Okapi bootleg) scrambler @@ -101922,10 +119579,22 @@ scrambles2 Scramble (Stern Electronics set 2) + + scrambls + Scramble (Stern) + scrambp Impacto (Billport S.A., Spanish bootleg of Scramble) + + scramce + Scramble (Centromatic S.A., Spanish bootleg) + + + scrammr + Scramble (Model Racing, Italian bootleg) + scrampt Scramble (Petaco S.A., Spanish bootleg) @@ -101978,10 +119647,26 @@ scross Stadium Cross (World) + + scrossa + Stadium Cross (World, alt) + scrossu Stadium Cross (US) + + scrpiond + Scorpion (Jun 15, 1999) + + + scrpionda + Scorpion (Oct 01, 1997) + + + scrpiondb + Scorpion (Dec 24, 1993) + scrpn_l1 Scorpion (L-1) @@ -101990,29 +119675,45 @@ scrpn_t1 Scorpion (T-1) + + scrpndx + Scorpion DX + + + scrzy_l1 + Still Crazy + + + sctionza + Section Z (set 2) + scud - Scud Race Twin (Australia) + Scud Race Twin/DX (Export) - scuda - Scud Race Twin (Export) + scudau + Scud Race Twin/DX (Australia) - scudhamm - Scud Hammer + scuddx + Scud Race Deluxe (Revision A) - scudj - Scud Race Deluxe (Japan) + scudhamm + Scud Hammer scudplus - Scud Race Plus (Revision A) + Scud Race Plus Twin/DX (Revision A) scudplusa - Scud Race Plus + Scud Race Plus Twin/DX + + + scyclone + Space Cyclone sddz @@ -102020,11 +119721,23 @@ sderby - Super Derby (v.07.03) + Super Derby (Playmark, v.07.03) + + + sderby2 + Super Derby II + + + sderby2s + Super Derby II (satellite board) sderbya - Super Derby (v.10.04) + Super Derby (Playmark, v.10.04) + + + sderbys + Super Derby (satellite board) sdfight @@ -102034,8 +119747,16 @@ sdgndmps SD Gundam Psycho Salamander no Kyoui + + sdgndmrb + SD Gundam Sangokushi Rainbow Tairiku Senki + sdi + SDI - Strategic Defense Initiative (Japan, newer, System 16A, FD1089B 317-0027) + + + sdia SDI - Strategic Defense Initiative (Japan, old, System 16A, FD1089B 317-0027) @@ -102044,7 +119765,31 @@ sdibl - SDI - Strategic Defense Initiative (bootleg) + SDI - Strategic Defense Initiative (bootleg, original hardware) + + + sdibl2 + SDI - Strategic Defense Initiative (bootleg, set 1) + + + sdibl3 + SDI - Strategic Defense Initiative (bootleg, set 2) + + + sdibl4 + SDI - Strategic Defense Initiative (bootleg, set 3) + + + sdibl5 + SDI - Strategic Defense Initiative (bootleg, set 4) + + + sdibl6 + SDI - Strategic Defense Initiative (bootleg, set 5) + + + sdioj + SDI - Strategic Defense Initiative (Japan) sdmg2 @@ -102054,6 +119799,10 @@ sdodgeb Super Dodge Ball / Kunio no Nekketsu Toukyuu Densetsu + + sdodgebh + Super Dodge Ball / Kunio no Nekketsu Toukyuu Densetsu (Secret Character Hack) + sdtennis Super Doubles Tennis @@ -102062,6 +119811,10 @@ sdungeon Space Dungeon + + sdungeona + Space Dungeon (larger roms) + sdwx Sheng Dan Wu Xian @@ -102078,13 +119831,17 @@ seabattla Sea Battle (set 2) + + sealdeal + Seal The Deal - Jackpot Carnival (0251029, US) + searchar SAR - Search And Rescue (World) searcharj - SAR - Search And Rescue (Japan) + SAR - Search And Rescue (Japan version 3) searcharu @@ -102092,7 +119849,11 @@ searchey - Search Eye + Search Eye (English / Korean / Japanese / Italian) + + + searcheya + Search Eye (English / Korean) searchp2 @@ -102134,6 +119895,10 @@ seawolfo Sea Wolf (set 2) + + seawolft + Sea Wolf (Tecfri) + secolove Second Love (Japan 861201) @@ -102148,7 +119913,11 @@ secretag - Secret Agent (World) + Secret Agent (World revision 3) + + + secretagj + Secret Agent (Japan revision 2) sectionz @@ -102160,27 +119929,51 @@ sectrzon - Sector Zone + Sector Zone (set 1) + + + sectrzona + Sector Zone (set 3) + + + sectrzont + Sector Zone (set 2, Tecfri hardware) segajw - Golden Poker Series "Joker's Wild" (Rev. B) + Joker's Wild (Rev. B) seganinj Sega Ninja (315-5102) + + seganinja + Sega Ninja (315-5113) + seganinju Sega Ninja (not encrypted) + + seganinu + Sega Ninja (not encrypted) + + + segartv + Sega Race-TV (Export) + segawski Sega Water Ski (Japan, Revision A) seicross - Seicross + Seicross (set 1) + + + seicrossa + Seicross (set 2) seiha @@ -102190,18 +119983,30 @@ seiham Seiha [BET] (Japan 870723) + + sekaikh + Sekai Kaseki Hakken (Japan, SKH1 Ver.A) + selfeena Sel Feena + + seljan + Sel-Jan [BET] (Japan) + seljan2 - Return Of Sel Jan II (Japan, NM557) + Return Of Sel Jan II [BET] (Japan, NM557) semibase MuHanSeungBu (SemiCom Baseball) (Korea) + + sengekij + Sengeki Striker (Japan) + sengekis Sengeki Striker (Asia) @@ -102210,13 +120015,17 @@ sengekisj Sengeki Striker (Japan) + + sengokh + Sengoku / Sengoku Denshou (set 2) + sengokmj Sengoku Mahjong [BET] (Japan) sengoku - Sengoku / Sengoku Denshou (NGM-017)(NGH-017) + Sengoku / Sengoku Denshou (NGM-017 ~ NGH-017) sengoku2 @@ -102224,11 +120033,27 @@ sengoku3 - Sengoku 3 / Sengoku Densho 2001 + Sengoku 3 / Sengoku Densho 2001 (set 1) + + + sengoku3a + Sengoku 3 / Sengoku Densho 2001 (set 2) + + + sengoku3fs + Sengoku 3 / Sengoku Densho 2001 (Feng Shen Edition, Hack) + + + sengoku3s + Sengoku 3 / Sengoku Densho 2001 (Evolution 1.0, FCHT hack) sengokuh - Sengoku / Sengoku Denshou (NGH-017)(US) + Sengoku / Sengoku Denshou (NGH-017, US) + + + sengomjk + Sengoku Mahjong Kurenai Otome-tai (Japan) senjyo @@ -102240,31 +120065,35 @@ senko - Senko No Ronde (Rev A) (GDL-0030A) + Senko no Ronde (Japan, Rev A) (GDL-0030A) senkoo - Senko No Ronde (GDL-0030) + Senko no Ronde (Japan) (GDL-0030) senkosp - Senko No Ronde Special (GDL-0038) + Senko no Ronde Special (Export, Japan) (GDL-0038) senkyu - Senkyu (Japan set 1) + Senkyu (Japan, newer) senkyua - Senkyu (Japan set 2) + Senkyu (Japan, earlier) sentetst Sente Diagnostic Cartridge + + sercharu + SAR - Search And Rescue (US) + setaroul - Visco Roulette + The Roulette (Visco) sexappl @@ -102300,7 +120129,23 @@ sf - Street Fighter (World, Analog buttons) + Street Fighter (US, set 1) + + + sf1 + Street Fighter (World) + + + sf1jp + Street Fighter (Japan) + + + sf1p + Street Fighter (prototype) + + + sf1us + Street Fighter (US) sf2 @@ -102318,6 +120163,10 @@ sf2049te San Francisco Rush 2049: Tournament Edition + + sf2049tea + San Francisco Rush 2049: Tournament Edition Unlocked + sf2acc Street Fighter II': Champion Edition (Accelerator!, bootleg, set 1) @@ -102336,7 +120185,51 @@ sf2amf2 - Street Fighter II': Champion Edition (L735 Test Rom, bootleg) + Street Fighter II': Champion Edition (L735 Test Rom, bootleg, set 1) + + + sf2amf3 + Street Fighter II': Champion Edition (L735 Test Rom, bootleg, set 2) + + + sf2amf4 + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 2, 920313 etc) + + + sf2amf5 + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 3, 920313 etc) + + + sf2amf6 + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 4, 920313 etc) + + + sf2amf7 + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 5, 920313 etc) + + + sf2amf8 + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 6, 920313 etc) + + + sf2amf9 + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 7, 920313 etc) + + + sf2b + Street Fighter II: The World Warrior (bootleg, set 1) + + + sf2b2 + Street Fighter II: The World Warrior (bootleg, set 2) + + + sf2b3 + Street Fighter II - The World Warrior (bootleg, 910214 etc, set 3) + + + sf2b4 + Street Fighter II - The World Warrior (bootleg, 910214 etc, set 4) sf2bhh @@ -102346,18 +120239,66 @@ sf2ce Street Fighter II': Champion Edition (World 920513) + + sf2ceb + Street Fighter II': Champion Edition (Playmark bootleg, set 1) + + + sf2ceb2 + Street Fighter II': Champion Edition (bootleg, set 1) + + + sf2ceb3 + Street Fighter II': Champion Edition (bootleg, set 2) + + + sf2ceb4 + Street Fighter II': Champion Edition (Playmark bootleg, set 2) + + + sf2ceb5 + Street Fighter II': Champion Edition (Playmark bootleg, set 3) + sf2ceblp Street Fighter II': Champion Edition (protected bootleg on non-dash board) + + sf2cebltw + Street Fighter II': Champion Edition ('Taiwan' bootleg with PAL) + + + sf2ceds6 + Street Fighter II': Champion Edition (Dstreet-6, bootleg) + sf2ceea Street Fighter II': Champion Edition (World 920313) + + sf2ceeab2 + Street Fighter II' - Champion Edition (920313 etc bootleg set 2) + + + sf2ceeabl + Street Fighter II' - Champion Edition (920313 etc bootleg set 1) + + + sf2cej + Street Fighter II' - Champion Edition (Japan 920513) + sf2ceja Street Fighter II': Champion Edition (Japan 920322) + + sf2cejab2 + Street Fighter II' - Champion Edition (920322 Japan bootleg set 2) + + + sf2cejabl + Street Fighter II' - Champion Edition (920322 Japan bootleg set 1) + sf2cejb Street Fighter II': Champion Edition (Japan 920513) @@ -102366,10 +120307,70 @@ sf2cejc Street Fighter II': Champion Edition (Japan 920803) + + sf2cems6a + Street Fighter II': Champion Edition (Mstreet-6, bootleg, set 1) + + + sf2cems6b + Street Fighter II': Champion Edition (Mstreet-6, bootleg, set 2) + + + sf2cems6c + Street Fighter II': Champion Edition (Mstreet-6, bootleg, set 3) + + + sf2cet + Street Fighter II': Champion Edition (Taiwan 920313) + sf2ceua Street Fighter II': Champion Edition (USA 920313) + + sf2ceuab10 + Street Fighter II' - Champion Edition (920313 USA bootleg set 10) + + + sf2ceuab11 + Street Fighter II' - Champion Edition (920313 USA bootleg set 11) + + + sf2ceuab2 + Street Fighter II' - Champion Edition (920313 USA bootleg set 2) + + + sf2ceuab3 + Street Fighter II' - Champion Edition (920313 USA bootleg set 3) + + + sf2ceuab4 + Street Fighter II' - Champion Edition (920313 USA bootleg set 4) + + + sf2ceuab5 + Street Fighter II' - Champion Edition (920313 USA bootleg set 5) + + + sf2ceuab6 + Street Fighter II' - Champion Edition (920313 USA bootleg set 6) + + + sf2ceuab7 + Street Fighter II' - Champion Edition (920313 USA bootleg set 7) + + + sf2ceuab8 + Street Fighter II' - Champion Edition (920313 USA bootleg set 8) + + + sf2ceuab9 + Street Fighter II' - Champion Edition (920313 USA bootleg set 9) + + + sf2ceuabl + Street Fighter II' - Champion Edition (920313 USA bootleg set 1) + sf2ceub Street Fighter II': Champion Edition (USA 920513) @@ -102378,6 +120379,14 @@ sf2ceuc Street Fighter II': Champion Edition (USA 920803) + + sf2ceucbl + Street Fighter II' - Champion Edition (920803 USA bootleg) + + + sf2ceupl + Street Fighter II': Champion Edition (UPL bootleg) + sf2dkot2 Street Fighter II': Champion Edition (Double K.O. Turbo II, bootleg) @@ -102386,6 +120395,10 @@ sf2dongb Street Fighter II': Champion Edition (Dongfang Bubai protection, bootleg) + + sf2ea + Street Fighter II: The World Warrior (World 910204) + sf2eb Street Fighter II: The World Warrior (World 910214) @@ -102394,6 +120407,14 @@ sf2ebbl Street Fighter II: The World Warrior (TAB Austria, bootleg, set 1) + + sf2ebbl2 + Street Fighter II: The World Warrior (TAB Austria, bootleg, set 3) + + + sf2ebbl3 + Street Fighter II: The World Warrior (TAB Austria, bootleg, set 4) + sf2ed Street Fighter II: The World Warrior (World 910318) @@ -102402,6 +120423,18 @@ sf2ee Street Fighter II: The World Warrior (World 910228) + + sf2ef + Street Fighter II: The World Warrior (World 910411) + + + sf2em + Street Fighter II: The World Warrior (World 910129) + + + sf2en + Street Fighter II: The World Warrior (World 910204, conversion) + sf2hf Street Fighter II': Hyper Fighting (World 921209) @@ -102410,13 +120443,25 @@ sf2hfj Street Fighter II' Turbo: Hyper Fighting (Japan 921209) + + sf2hfjb + Street Fighter II' Turbo - Hyper Fighting (bootleg set 1, 921209 Japan) + + + sf2hfjb2 + Street Fighter II' Turbo - Hyper Fighting (bootleg set 2, 921209 Japan) + sf2hfu Street Fighter II': Hyper Fighting (USA 921209) sf2j - Street Fighter II: The World Warrior (Japan 911210) + Street Fighter II: The World Warrior (Japan 911210, CPS-B-13) + + + sf2j17 + Street Fighter II: The World Warrior (Japan 911210, CPS-B-17) sf2ja @@ -102438,14 +120483,38 @@ sf2jl Street Fighter II: The World Warrior (Japan 920312) + + sf2jla + Street Fighter II - The World Warrior (911210 Japan, rev L) + sf2koryu Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg) + + sf2koryu2 + Street Fighter II' - Xiang Long (bootleg set 2, 811102 001) + + + sf2koryu3 + Street Fighter II' - Xiang Long (bootleg set 3, 811102 001) + + + sf2level + Street Fighter II': Champion Edition (bootleg with level selection) + + + sf2ly + Street Fighter II - The World Warrior (with bosses like Champion Edition, 910522 Japan, CPS-B-11) + sf2m1 Street Fighter II': Champion Edition (M1, bootleg) + + sf2m10 + Street Fighter II': Champion Edition (M10, bootleg) + sf2m2 Street Fighter II': Champion Edition (M2, bootleg) @@ -102474,6 +120543,14 @@ sf2m8 Street Fighter II': Champion Edition (M8, bootleg) + + sf2m9 + Street Fighter II': Champion Edition (M9, bootleg) + + + sf2md + Street Fighter II' - Champion Edition (Magic Delta, bootleg, 920313 etc) + sf2mdt Street Fighter II': Magic Delta Turbo (bootleg, set 1) @@ -102486,10 +120563,34 @@ sf2mdtb Street Fighter II': Magic Delta Turbo (bootleg, set 3) + + sf2mdtc + Street Fighter II' - Magic Delta Turbo (bootleg set 4 (with YM2151 + 2xMSM5205), 920313 etc) + + + sf2mega + Street Fighter II' - Champion Edition (Mega Co bootleg set 1, 920313 etc) + + + sf2mega2 + Street Fighter II' - Champion Edition (Mega Co bootleg set 2, 920313 etc) + + + sf2mix + Street Fighter II Mix (v1.2) + + + sf2mkot + Street Fighter II': Magic KO Turbo!! - Nightmare Crack + sf2qp1 Street Fighter II: The World Warrior (Quicken Pt-I, bootleg) + + sf2qp2 + Street Fighter II: The World Warrior (Quicken, bootleg) + sf2rb Street Fighter II': Champion Edition (Rainbow, bootleg, set 1) @@ -102502,21 +120603,81 @@ sf2rb3 Street Fighter II': Champion Edition (Rainbow, bootleg, set 3) + + sf2rb4 + Street Fighter II' - Champion Edition (Rainbow bootleg set 4, 920322 Japan) + + + sf2rb5 + Street Fighter II' - Champion Edition (Rainbow bootleg set 5, 920322 Japan) + + + sf2rb6 + Street Fighter II' - Champion Edition (Rainbow bootleg set 6, 920313 etc) + + + sf2re + Street Fighter II': Champion Edition (RE, bootleg) + sf2red Street Fighter II': Champion Edition (Red Wave, bootleg) + + sf2red2 + Street Fighter II' - Champion Edition (Red Wave bootleg set 2, 920313 etc) + + + sf2redp2 + Street Fighter II': Champion Edition (Red Wave PtII, bootleg) + sf2rk Street Fighter II: The World Warrior (RK, bootleg) + + sf2rk2 + Street Fighter II - The World Warrior (RK bootleg set 2, 910214 etc) + + + sf2rules + Street Fighter II: The World Warrior (bootleg with rules screen) + + + sf2sl73a + Street Fighter II' - Champion Edition (Sheng Long v 7.3a) + sf2stt Street Fighter II: The World Warrior (TAB Austria, bootleg, set 2) + + sf2t + Street Fighter II' - Hyper Fighting (US 921209) + sf2thndr - Street Fighter II: The World Warrior (Thunder Edition, bootleg) + Street Fighter II: The World Warrior (Thunder Edition, bootleg, set 1) + + + sf2thndr2 + Street Fighter II: The World Warrior (Thunder Edition, bootleg, set 2) + + + sf2tj + Street Fighter II' Turbo - Hyper Fighting (Japan 921209) + + + sf2tlona + Street Fighter II' - Champion Edition (Tu Long bootleg set 1, 811102 001) + + + sf2tlonb + Street Fighter II' - Champion Edition (Tu Long bootleg set 2, 811102 001) + + + sf2tlonc + Street Fighter II' - Champion Edition (Tu Long bootleg set 3, 811102 001) sf2ua @@ -102546,6 +120707,10 @@ sf2ug Street Fighter II: The World Warrior (USA 910522, Rev. G) + + sf2uh + Street Fighter II: The World Warrior (USA 910522, Rev. H) + sf2ui Street Fighter II: The World Warrior (USA 910522, Rev. I) @@ -102554,14 +120719,30 @@ sf2uk Street Fighter II: The World Warrior (USA 911101) + + sf2um + Street Fighter II: The World Warrior (USA 920312) + sf2v004 Street Fighter II': Champion Edition (V004, bootleg) + + sf2v0042 + Street Fighter II' - Champion Edition (V004 bootleg set 2, 920313 etc) + + + sf2v0043 + Street Fighter II' - Champion Edition (V004 bootleg set 3, 920313 etc) + sf2yyc Street Fighter II': Champion Edition (YYC, bootleg) + + sf2yyc2 + Street Fighter II' - Champion Edition (YYC bootleg set 2, 920313 etc) + sf_l1 Slugfest (L-1) @@ -102578,6 +120759,10 @@ sfa2u Street Fighter Alpha 2 (USA 960430) + + sfa2uhc + Street Fighter Alpha 2 - Unlock Hidden Characters (Hack By Yumeji) + sfa2ur1 Street Fighter Alpha 2 (USA 960306) @@ -102598,6 +120783,10 @@ sfa3hr1 Street Fighter Alpha 3 (Hispanic 980629) + + sfa3r1 + Street Fighter Alpha 3 (USA 980629) + sfa3u Street Fighter Alpha 3 (USA 980904) @@ -102610,10 +120799,22 @@ sfa3ur1 Street Fighter Alpha 3 (USA 980629) + + sfa3us + Street Fighter Alpha 3 (USA 980616, SAMPLE Version) + + + sfa3xl + Street Fighter Alpha 3 - Xiang Long Edition (Hack by pipi899, Ver.2009-05-10) + sfad Street Fighter Alpha: Warriors' Dreams (Euro 950727 Phoenix Edition) (bootleg) + + sfan + Street Fighter (World, pneumatic buttons) + sfar1 Street Fighter Alpha: Warriors' Dreams (Euro 950718) @@ -102630,6 +120831,10 @@ sfau Street Fighter Alpha: Warriors' Dreams (USA 950627) + + sfaud + Street Fighter Alpha - warriors' dreams (950727 USA Phoenix Edition) + sfbonus Skill Fruit Bonus (Version 1.9R, set 1) @@ -102650,10 +120855,6 @@ sfbonusv1 Skill Fruit Bonus (Version 1.9R Dual) - - sfcbox - Super Famicom Box BIOS - sfchamp Super Football Champ (Ver 2.5O) @@ -102676,7 +120877,7 @@ sfex2 - Street Fighter EX2 (USA 980526) + Street Fighter EX2 (Euro 980312) sfex2a @@ -102692,7 +120893,7 @@ sfex2p - Street Fighter EX2 Plus (USA 990611) + Street Fighter EX2 Plus (Euro 990611) sfex2pa @@ -102706,6 +120907,18 @@ sfex2pj Street Fighter EX2 Plus (Japan 990611) + + sfex2pu + Street Fighter EX2 Plus (USA 990611) + + + sfex2u + Street Fighter EX2 (USA 980526) + + + sfex2u1 + Street Fighter EX2 (USA 980312) + sfexa Street Fighter EX (Asia 961219) @@ -102770,6 +120983,14 @@ sfiii3 Street Fighter III 3rd Strike: Fight for the Future (Euro 990608) + + sfiii3j + Street Fighter III 3rd Strike: Fight for the Future (Japan 990608) + + + sfiii3jr1 + Street Fighter III 3rd Strike: Fight for the Future (Japan 990512) + sfiii3n Street Fighter III 3rd Strike: Fight for the Future (Japan 990608, NO CD) @@ -102782,6 +121003,10 @@ sfiii3r1 Street Fighter III 3rd Strike: Fight for the Future (Euro 990512) + + sfiii3th + Street Fighter III 3rd Strike: Fight for the Future | re:THIRD update + sfiii3u Street Fighter III 3rd Strike: Fight for the Future (USA 990608) @@ -102790,6 +121015,10 @@ sfiii3ur1 Street Fighter III 3rd Strike: Fight for the Future (USA 990512) + + sfiii4n + Street Fighter III 3rd Strike: Fight for the Future (4rd Arrange Edition 2013) + sfiiia Street Fighter III: New Generation (Asia 970204) @@ -102826,6 +121055,14 @@ sfj Street Fighter (Japan) (protected) + + sfjan + Street Fighter (Japan, pneumatic buttons) + + + sfjbl + Street Fighter (Japan, bootleg) + sfkick Super Free Kick (set 1) @@ -102844,7 +121081,11 @@ sformula - Super Formula (Japan) + Super Formula (Japan, set 1) + + + sformulaa + Super Formula (Japan, set 2) sfp @@ -102912,11 +121153,23 @@ sfrush - San Francisco Rush + San Francisco Rush (boot rom L 1.0) + + + sfrusha + San Francisco Rush (boot rom L 1.06A) sfrushrk - San Francisco Rush: The Rock + San Francisco Rush: The Rock (boot rom L 1.0, GUTS Oct 6 1997 / MAIN Oct 16 1997) + + + sfrushrkw + San Francisco Rush: The Rock (Wavenet, boot rom L 1.38, GUTS Aug 19 1997 / MAIN Aug 19 1997) + + + sfrushrkwo + San Francisco Rush: The Rock (Wavenet, boot rom L 1.38, GUTS Aug 6 1997 / MAIN Aug 5 1997) sftm @@ -102932,16 +121185,24 @@ sftmj + Street Fighter - The Movie (v1.12N, Japan) + + + sftmj112 Street Fighter: The Movie (v1.12N, Japan) - sfu - Street Fighter (US, set 1) + sftmj114 + Street Fighter: The Movie (v1.14N, Japan) sfua Street Fighter (US, set 2) (protected) + + sfw + Street Fighter (World) (protected) + sfx SF-X @@ -102950,10 +121211,30 @@ sfz2a Street Fighter Zero 2 (Asia 960227) + + sfz2aa + Street Fighter Zero 2 Alpha (Asia 960826) + + + sfz2ab + Street Fighter Zero 2 Alpha (Brazil 960813) + sfz2ad Street Fighter Zero 2 (Asia 960227 Phoenix Edition) (bootleg) + + sfz2adl + Street Fighter Zero 2 Alpha - Dragon Level (Hack by pipi899, Ver.2009-04-24) + + + sfz2ah + Street Fighter Zero 2 Alpha (Hispanic 960813) + + + sfz2aj + Street Fighter Zero 2 Alpha (Japan 960805) + sfz2al Street Fighter Zero 2 Alpha (Asia 960826) @@ -102974,6 +121255,10 @@ sfz2alj Street Fighter Zero 2 Alpha (Japan 960805) + + sfz2alr1 + Street Fighter Zero 2 Alpha (Asia 960805) + sfz2b Street Fighter Zero 2 (Brazil 960531) @@ -103026,9 +121311,13 @@ sfz3jr2d Street Fighter Zero 3 (Japan 980629 Phoenix Edition) (bootleg) + + sfz3te + Street Fighter Zero 3 Training Edition v1.1 (980629 Japan) + sfz3ugd - Street Fighter Zero 3 Upper (GDL-0002) + Street Fighter Zero 3 Upper (Japan) (GDL-0002) sfza @@ -103046,6 +121335,14 @@ sfzbr1 Street Fighter Zero (Brazil 950727) + + sfzch + Street Fighter Zero (CPS Changer, 951020 Japan) + + + sfzcha + Street Fighter Zero (CPS Changer, 040820 Japan) + sfzh Street Fighter Zero (Hispanic 950718) @@ -103066,6 +121363,18 @@ sfzjr2 Street Fighter Zero (Japan 950605) + + sg2j + Star Gladiator 2 (JAPAN 980316) + + + sgaltrop + Sexy Gal Tropical [BET] (Japan 850805 SXG T-02) + + + sgdrvsim + Driving Simulator + sgemf Super Gem Fighter Mini Mix (USA 970904) @@ -103104,11 +121413,15 @@ sgnascar - NASCAR Racing + NASCAR Arcade (Rev A) + + + sgnascaro + NASCAR Arcade (original) sgsafari - Super Gran Safari (ver 3.11) + Super Gran Safari (ver. 3.11) sgt24h @@ -103134,13 +121447,21 @@ sgunnerj Steel Gunner (Japan) + + sgunnr2j + Steel Gunner 2 (Japan) + sgyxz Warriors of Fate ('sgyxz' bootleg) + + sh_141 + Shrek v1.41 + shabdama - LD Mahjong #4 Shabon-Dama + LD Mahjong #4 Shabon-Dama (Japan) shackled @@ -103152,15 +121473,15 @@ shadfrce - Shadow Force (US Version 2) + Shadow Force (World, Version 3) shadfrcej - Shadow Force (Japan Version 3) + Shadow Force (Japan, Version 2) - shadfrcejv2 - Shadow Force (Japan Version 2) + shadfrceu + Shadow Force (US, Version 2) shadowld @@ -103174,13 +121495,25 @@ shadowwa Shadow Warriors (World, set 2) + + shaktam + Shakatto Tambourine (Rev B) (GDS-0002B) + shaktamb - Shakatto Tambourine Cho Powerup Chu 2K1 AUT (GDS-0016) + Shakatto Tambourine Cho Powerup Chu (2K1 AUT) (GDS-0016) shaktmsp - Shakatto Tambourine 2K1 SPR (GDS-0013) + Shakatto Tambourine Motto Norinori Shinkyoku Tsuika (2K1 SPR) (GDS-0013) + + + shamnmg + Shaman's Magic (10225911, NSW/ACT) + + + shamnmgu + Shaman's Magic (0152647, US) shangha2 @@ -103202,6 +121535,10 @@ shangha3u Shanghai III (US) + + shangha3up + Shanghai III (US, prototype) + shanghai Shanghai (World) @@ -103212,7 +121549,7 @@ shanghss - Shanghai Shoryu Sairin (V2.03J) + Shanghai Shoryu Sairin (V2.03J 2000/05/26 12:45:28) shangkid @@ -103220,39 +121557,63 @@ shangon - Super Hang-On (sitdown/upright, unprotected) + Super Hang-On (sitdown/upright) (unprotected) shangon1 - Super Hang-On (mini ride-on?, FD1089B 317-0034) + Super Hang-On (mini ride-on) (FD1089B 317-0034) shangon2 - Super Hang-On (mini ride-on, Rev A, FD1089B 317-0034) + Super Hang-On (mini ride-on, Rev A) (FD1089B 317-0034) shangon3 - Super Hang-On (sitdown/upright, FD1089B 317-0034) + Super Hang-On (sitdown/upright) (FD1089B 317-0034) + + + shangon3d + Super Hang-On (sitdown/upright) (bootleg of FD1089B 317-0034 set) + + + shangonb + Super Hang-On (bootleg) + + + shangoneh + Super Hang-On (sitdown/upright, unprotected) (Enhanced Edition v2.0.2) + + + shangonho + Super Hang-On (Hang-On conversion, Japan, FD1094 317-0039) shangonle Limited Edition Hang-On + + shangonleeh + Limited Edition Hang-On (Enhanced Edition v2.0.2) + shangonrb - Super Hang-On (bootleg) + Super Hang-On (Hang-On conversion, bootleg) + + + shangonrb2 + Super Hang-On (Hang-On conversion, Beta bootleg) shangonro - Super Hang-On (ride-on, Japan, FD1094 317-0038) + Super Hang-On (Hang-On conversion, ride-on, Japan, FD1094 317-0038) shangril - Dengen Tenshi Taisen Janshi Shangri-la (JPN, USA, EXP, KOR, AUS) + Dengen Tenshi Taisen Janshi Shangri-la shangtou - Shanghai Sangokuhai Tougi (Ver 2.01J) + Shanghai Sangokuhai Tougi (Ver 2.01J 2002/01/18 18:26:58) shanhigw @@ -103302,6 +121663,10 @@ sharkt Shark (Taito) + + sharkusb + Shark [TTL] + sharrier Space Harrier (Rev A, 8751 315-5163A) @@ -103312,7 +121677,11 @@ shdancbl - Shadow Dancer (bootleg) + Shadow Dancer (bootleg, set 1) + + + shdancbla + Shadow Dancer (bootleg, set 2) shdancer @@ -103326,6 +121695,14 @@ shdancerj Shadow Dancer (Japan) + + shdancrb + Shadow Dancer (Rev.B) + + + shdancrj + Shadow Dancer (Japan) + sheriff Sheriff @@ -103340,7 +121717,7 @@ shikgam2 - Shikigami No Shiro II / The Castle of Shikigami II (GDL-0021) + Shikigami no Shiro II / The Castle of Shikigami II (GDL-0021) shikiga3 @@ -103348,7 +121725,15 @@ shikigam - Shikigami no Shiro (V2.03J) + Shikigami no Shiro (V2.03J 2001/08/07 18:11) + + + shikigama + Shikigami no Shiro - internal build (V1.02J 2001/09/27 18:45) + + + shimpacp + Super High Impact (prototype, rev 5.0 09-15-91) shimpact @@ -103356,15 +121741,15 @@ shimpactp4 - Super High Impact (prototype, rev 4.0 09/10/91) + Super High Impact (prototype, proto 4.0 09/10/91) shimpactp5 - Super High Impact (prototype, rev 5.0 09/15/91) + Super High Impact (prototype, proto 5.0 09/15/91) shimpactp6 - Super High Impact (prototype, rev 6.0 09/23/91) + Super High Impact (prototype, proto 6.0 09/23/91) shinfz @@ -103372,27 +121757,51 @@ shinobi - Shinobi (set 6, System 16A, unprotected) + Shinobi (set 6, System 16A) (unprotected) shinobi1 - Shinobi (set 1, System 16A, FD1094 317-0050) + Shinobi (set 1, System 16A) (FD1094 317-0050) + + + shinobi1d + Shinobi (set 1, System 16A) (bootleg of FD1094 317-0050 set) shinobi2 - Shinobi (set 2, System 16B, FD1094 317-0049) + Shinobi (set 2, System 16B) (FD1094 317-0049) + + + shinobi2d + Shinobi (set 2, System 16B) (bootleg of FD1094 317-0049 set) shinobi3 - Shinobi (set 3, System 16B, MC-8123B 317-0054) + Shinobi (set 3, System 16B) (MC-8123B 317-0054) shinobi4 - Shinobi (set 4, System 16B, MC-8123B 317-0054) + Shinobi (set 4, System 16B) (MC-8123B 317-0054) shinobi5 - Shinobi (set 5, System 16B, unprotected) + Shinobi (set 5, System 16B) (unprotected) + + + shinobi6 + Shinobi (set 6, System 16B) (unprotected) + + + shinobia + Shinobi (set 2) + + + shinobib + Shinobi (set 3) + + + shinobl + Shinobi (bootleg) shinoblb @@ -103400,12 +121809,24 @@ shinobld - Shinobi (Datsu bootleg) + Shinobi (Datsu bootleg, set 1) + + + shinoblda + Shinobi (Datsu bootleg, set 2) + + + shinobldb + Shinobi (Datsu bootleg, set 3) shinobls Shinobi (Star bootleg, System 16A) + + shinygld + Shiny Golds + shippumd Shippu Mahou Daisakusen (Japan) @@ -103424,7 +121845,7 @@ shngmtkb - Shanghai Matekibuyuu + Shanghai Matekibuyuu (Japan) shock @@ -103436,12 +121857,20 @@ shockingk - Shocking (Korea) + Shocking (Korea, set 1) + + + shockingko + Shocking (Korea, set 2) shocktr2 Shock Troopers - 2nd Squad + + shocktra + Shock Troopers (set 2) + shocktro Shock Troopers (set 1) @@ -103454,6 +121883,10 @@ shogwarr Shogun Warriors (World) + + shogwarrk + Shogun Warriors (Korea?) + shogwarru Shogun Warriors (US) @@ -103466,6 +121899,10 @@ shollow2 Satan's Hollow (set 2) + + shootaw2 + Shoot Away II + shootbul Shoot the Bull @@ -103478,6 +121915,14 @@ shootopl Shootout Pool + + shootoub + Shoot Out (Korean Bootleg) + + + shootouj + Shoot Out (Japan) + shootout Shoot Out (US) @@ -103492,11 +121937,95 @@ shootpl - Shootout Pool (JPN, USA, KOR, AUS) / Shootout Pool Prize (EXP) + Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan, Rev A) shootplm - Shootout Pool Medal + Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) Version B + + + shootplmp + Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) Version B (prototype) + + + shoottv + Must Shoot TV (prototype) + + + shors2k1 + Star Horse 2001 (satellite, Rev B) + + + shors2k2 + Star Horse 2002 (sound, Export/Taiwan) + + + shors2k2l + Star Horse 2002 (live) + + + shors2k2m + Star Horse 2002 (main screens) + + + shors2k2s + Star Horse 2002 (sound and backup, Rev A) + + + shorse + Star Horse (satellite) + + + shorsel + Star Horse (live and backup) + + + shorsem + Star Horse (main screens) + + + shorsep + Star Horse Progress (satellite, Rev A) + + + shorsepb + Star Horse Progress (backup data) + + + shorsepl + Star Horse Progress (live, Rev A) + + + shorsepm + Star Horse Progress (main screens, Rev B) + + + shorsepr + Star Horse Progress Returns (satellite) + + + shorseprl + Star Horse Progress Returns (live and voice) + + + shorseprs + Star Horse Progress Returns (sound) + + + shorseprvl + Star Horse Progress Returns (main screen left) + + + shorseprvr + Star Horse Progress Returns (main screen right) + + + shorseps + Star Horse Progress (sound & backup, Rev A) + + + shorthng + Shore Thing (0251088, US) shougi @@ -103504,12 +122033,16 @@ shougi2 - Shougi 2 + Shougi Part II showdown Showdown (version 5.0) + + showdown4 + Showdown (version 4.0) + showhanc Wang Pai Dui Jue (China) @@ -103520,7 +122053,7 @@ showqn - Show Queen (Konami Endeavour) + Show Queen (Konami Endeavour, Russia) shpeng @@ -103571,12 +122104,12 @@ Sharkey's Shootout (2.11) - shtngmst - Shooting Master (8751 315-5159) + sht3do + Shootout at Old Tucson (3DO hardware) - shtngmste - Shooting Master (EVG, 8751 315-5159a) + shtngmst + Shooting Master (8751 315-5159a) shtrider @@ -103587,12 +122120,12 @@ Shot Rider (Sigma license) - shtstar - Shooting Star + shtriderb + Shot Rider (bootleg) - shtzone - Shooting Zone System BIOS + shtstar + Shooting Star shuffle @@ -103602,14 +122135,26 @@ shufshot Shuffleshot (v1.40) + + shufshot135 + Shuffleshot (v1.35) + shufshot137 Shuffleshot (v1.37) + + shufshot138 + Shuffleshot (v1.38) + shufshot139 Shuffleshot (v1.39) + + shuriboy + Shuriken Boy + shuttlei Shuttle Invader @@ -103638,25 +122183,45 @@ sichuan2a Sichuan II (hack, set 2) + + sichuana + Sichuan II (hack[Q]) (set 2) + sicv - Space Invaders (CV Version) + Space Invaders (CV Version, larger roms) + + + sicv1 + Space Invaders (CV Version, smaller roms) sidampkr - unknown Sidam Poker + unknown Sidam poker + + + sidearjp + Side Arms - Hyper Dyne (Japan) + + + sidearmr + Side Arms - Hyper Dyne (US) sidearms - Side Arms - Hyper Dyne (World) + Side Arms - Hyper Dyne (World, 861129) sidearmsj - Side Arms - Hyper Dyne (Japan) + Side Arms - Hyper Dyne (Japan, 861128) - sidearmsr - Side Arms - Hyper Dyne (US) + sidearmsu + Side Arms - Hyper Dyne (US, 861202) + + + sidearmsur1 + Side Arms - Hyper Dyne (US, 861128) sidebs @@ -103664,14 +122229,26 @@ sidebs2 - Side by Side 2 (Ver 2.6 A) + Side by Side 2 (Ver 2.6 OK) sidebs2j + Side by Side 2 Evoluzione RR (Ver 3.1 J) + + + sidebs2ja Side by Side 2 Evoluzione (Ver 2.4 J) + + sidebs2u + Side by Side 2 (Ver 2.6 A) + sidebsja + Side by Side (Ver 2.6 J) + + + sidebsjb Side by Side (Ver 2.5 J) @@ -103682,8 +122259,20 @@ sidepcktb Side Pocket (bootleg) + + sidepcktb2 + Side Pocket (bootleg, set 2) + sidepcktj + Side Pocket (Japan, Cocktail) + + + sidepctb + Side Pocket (bootleg) + + + sidepctj Side Pocket (Japan) @@ -103694,6 +122283,10 @@ sidewndr Sidewinder + + sigma21 + 21 (Sigma) + sigma2k Sigma Poker 2000 @@ -103714,6 +122307,14 @@ silentdu Silent Dragon (US) + + silgola6 + Silver & Gold (20100721, NSW/ACT) + + + silkrda6 + Silk Road (0152537, US) + silkroad The Legend of Silkroad @@ -103726,10 +122327,26 @@ silkworm Silk Worm (World) + + silkwormb + Silk Worm (bootleg, set 1) + + + silkwormb2 + Silk Worm (bootleg, set 2) + silkwormj Silk Worm (Japan) + + silkwormp + Silk Worm (prototype) + + + silkwrm2 + Silk Worm (set 2) + silverga Silver Game @@ -103756,67 +122373,99 @@ simpbowl - Simpsons Bowling (GQ829 UAA) + The Simpsons Bowling (GQ829 UAA) simpnew - Simpsons Pinball Party, The (ARM7 Sound Board) + The Simpsons Pinball Party (ARM7 Sound Board) simpprtf - Simpsons Pinball Party, The (5.00 France) + The Simpsons Pinball Party (5.00 France) simpprtf_204 - Simpsons Pinball Party, The (2.04 France) + The Simpsons Pinball Party (2.04 France) + + + simpprtf_300 + The Simpsons Pinball Party (3.00 France) simpprtf_400 - Simpsons Pinball Party, The (4.00 France) + The Simpsons Pinball Party (4.00 France) simpprtg - Simpsons Pinball Party, The (5.00 Germany) + The Simpsons Pinball Party (5.00 Germany) simpprtg_400 - Simpsons Pinball Party, The (4.00 Germany) + The Simpsons Pinball Party (4.00 Germany) simpprti - Simpsons Pinball Party, The (5.00 Italy) + The Simpsons Pinball Party (5.00 Italy) simpprti_204 - Simpsons Pinball Party, The (2.04 Italy) + The Simpsons Pinball Party (2.04 Italy) + + + simpprti_300 + The Simpsons Pinball Party (3.00 Italy) simpprti_400 - Simpsons Pinball Party, The (4.00 Italy) + The Simpsons Pinball Party (4.00 Italy) simpprtl - Simpsons Pinball Party, The (5.00 Spain) + The Simpsons Pinball Party (5.00 Spain) simpprtl_204 - Simpsons Pinball Party, The (2.04 Spain) + The Simpsons Pinball Party (2.04 Spain) + + + simpprtl_300 + The Simpsons Pinball Party (3.00 Spain) simpprtl_400 - Simpsons Pinball Party, The (4.00 Spain) + The Simpsons Pinball Party (4.00 Spain) simpprty - Simpsons Pinball Party, The (5.00) + The Simpsons Pinball Party (5.00) simpprty_204 - Simpsons Pinball Party, The (2.04) + The Simpsons Pinball Party (2.04) + + + simpprty_300 + The Simpsons Pinball Party (3.00) simpprty_400 - Simpsons Pinball Party, The (4.00) + The Simpsons Pinball Party (4.00) + + + simps2pa + The Simpsons (2 Players alt) + + + simps2pj + The Simpsons (2 Players Japan) + + + simpsn2p + The Simpsons (2 Players) + + + simpsonjr + Simpson Junior (bootleg of J. J. Squawkers) simpsons @@ -103830,6 +122479,10 @@ simpsons2p2 The Simpsons (2 Players World, set 2) + + simpsons2p3 + The Simpsons (2 Players World, set 3) + simpsons2pa The Simpsons (2 Players Asia) @@ -103840,6 +122493,10 @@ simpsons4pa + The Simpsons (4 Players Asia) + + + simpsons4pe The Simpsons (4 Players World, set 2) @@ -103855,17 +122512,25 @@ Sindbad Mystery - sinistar - Sinistar (revision 3) + sinista1 + Sinistar (prototype version) - sinistar1 - Sinistar (prototype version) + sinista2 + Sinistar (revision 2) + + + sinistar + Sinistar (revision 3) sinistar2 Sinistar (revision 2) + + sinistarp + Sinistar (AMOA-82 prototype) + sinvasn Space Invasion (Europe) @@ -103882,6 +122547,10 @@ sinvzen Super Invaders (Zenitone-Microsec) + + sirio2 + Sirio II (Calfesa S.L. Spanish Moon Cresta bootleg) + sisv Space Invaders (SV Version rev 4) @@ -103922,6 +122591,10 @@ skatebll Skateball + + skatebrd + Skate Board (Inder) + skatekds Vs. Skate Kids. (Graphic hack of Super Mario Bros.) @@ -103934,6 +122607,18 @@ skattva Skat TV (version TS3) + + skc_090 + Simpsons Kooky Carnival (Redemption) v0.90 New Jersey + + + skc_103 + Simpsons Kooky Carnival (Redemption) v1.03 + + + skc_105 + Simpsons Kooky Carnival (Redemption) v1.05 + skeetsht Skeet Shot @@ -103948,7 +122633,7 @@ skichamp - Ski Champ + Ski Champ (Japan) skijump @@ -103956,7 +122641,7 @@ skill98 - Skill '98 (ver. s98-1.33) + Skill '98 (Talking ver. s98-1.33) skilldrp @@ -103966,6 +122651,10 @@ skimaxx Skimaxx + + skingam2 + The Irem Skins Game (US set 2) + skingame The Irem Skins Game (US set 1) @@ -103979,16 +122668,36 @@ Sega Ski Super G - skns - Super Kaneko Nova System BIOS + sklflite + Skill Flight (Playmatic) skullfng - Skull Fang (World) + Skull Fang (Europe 1.13) + + + skullfnga + Skull Fang (Asia 1.13) skullfngj - Skull Fang (Japan) + Skull Fang (Japan 1.09) + + + skullxb1 + Skull and Crossbones (rev 1) + + + skullxb2 + Skull and Crossbones (rev 2) + + + skullxb3 + Skull and Crossbones (rev 3) + + + skullxb4 + Skull and Crossbones (rev 4) skullxbo @@ -104010,6 +122719,10 @@ skullxbo4 Skull & Crossbones (rev 4) + + skyadvnj + Sky Adventure (Japan) + skyadvnt Sky Adventure (World) @@ -104022,6 +122735,10 @@ skyadvntu Sky Adventure (US) + + skyadvnu + Sky Adventure (US) + skyalert Sky Alert @@ -104038,6 +122755,10 @@ skybump Sky Bumper + + skychal + Sky Challenger (J 000406 V1.000) + skychut Sky Chuter @@ -104050,6 +122771,10 @@ skydiver Sky Diver + + skydnca6 + Sky Dancer (10272711, NSW/ACT) + skyfox Sky Fox @@ -104062,6 +122787,10 @@ skykidd Sky Kid (CUS60 version) + + skykiddo + Sky Kid Deluxe (set 2) + skykiddx Sky Kid Deluxe (set 1) @@ -104108,7 +122837,15 @@ skyshark - Sky Shark (US) + Sky Shark (US, set 1) + + + skysharka + Sky Shark (US, set 2) + + + skysharkb + Sky Shark (bootleg) skyskipr @@ -104144,7 +122881,11 @@ sl2007 - Shooting Love 2007 + Shooting Love 2007 (Japan) + + + slalom03 + Slalom Code 0.3 slamdnk2 @@ -104158,17 +122899,33 @@ slammastu Saturday Night Slam Masters (USA 930713) + + slammasu + Saturday Night Slam Masters (US 930713) + slampic - Saturday Night Slam Masters (bootleg with PIC16c57) + Saturday Night Slam Masters (bootleg with PIC16C57, set 1) + + + slampic2 + Saturday Night Slam Masters (bootleg with PIC16C57, set 2) + + + slapbtjp + Slap Fight (Japan bootleg) + + + slapbtuk + Slap Fight (English bootleg) slapfigh - Slap Fight (Japan set 1) + Slap Fight (A77 set, 8606M PCB) slapfigha - Slap Fight (Japan set 2) + Slap Fight (A76 set, GX-006-A PCB) slapfighb1 @@ -104184,11 +122941,19 @@ slapshot - Slap Shot (Japan) + Slap Shot (Ver 3.0 O) + + + slapshotj + Slap Shot (Ver 2.2 J) + + + slapshtr + Slap Shooter slasho - Slashout (JPN, USA, EXP, KOR, AUS) + Slashout slashout @@ -104198,10 +122963,22 @@ slbmania Silverball Mania + + sldeluxe + Sweet Liberty Deluxe (AHG1575, US) + + + sleague + Super Major League (US) + sleicpin Sleic Pin Ball + + sliksh17 + Slick Shot (V1.7) + slikshot Slick Shot (V2.2) @@ -104214,6 +122991,10 @@ slikshot17 Slick Shot (V1.7) + + slimekun + Slime Kun + slipstrm Slip Stream (Brazil 950515) @@ -104232,12 +123013,20 @@ sliver - Sliver + Sliver (set 1) + + + slivera + Sliver (set 2) slmdunkj Slam Dunk (ver JAA 1993 10.8) + + slmdunkjd + Slam Dunk (ver JAA 1993 10.8) (dual screen with demux adapter) + sloco93 Super Loco 93 (Spanish, set 1) @@ -104254,14 +123043,34 @@ slotsnl Slots (Dutch, Game Card 95-750-368) + + slotunbl + Slot (unknown bootleg?) + slqz2 Mahjong Shuang Long Qiang Zhu 2 (VS203J) + + slqz3 + Mahjong Shuang Long Qiang Zhu 3 (China, VS107C) + slrasslt Solar Assault (ver UAA) + + slrassltj + Solar Assault Revised (ver JAA) + + + slrassltj1 + Solar Assault (ver JAA) + + + slspirit + Solite Spirits + sltblgp1 Slots (Belgian Cash, Game Card 95-752-008) @@ -104274,14 +123083,50 @@ sltblgtk Slots (Belgian Token, Game Card 95-750-943) + + sltpcycl + Pro Cycle Tele Cardioline (Salter Fitness Bike V.1.0, Checksum 02AB) + + + sltpstep + Pro Stepper Tele Cardioline (Salter Fitness Stepper V.1.0, Checksum F208) + + + slvrball632 + Silverball (6.32) + + + slvrball720 + Silverball (7.20) + + + slvrball806 + Silverball (8.01) + + + slvrballbu409 + Silverball Bulova (4.09, set 1) + + + slvrballbu409b + Silverball Bulova (4.09, set 2) + + + slvrwolf + Silver Wolf (0100673V, NSW/ACT) + slyspy - Sly Spy (US revision 3) + Sly Spy (US revision 4) slyspy2 Sly Spy (US revision 2) + + slyspy3 + Sly Spy (US revision 3) + sm_ngacc Nudge Accumulator (Summit Coin) @@ -104290,14 +123135,190 @@ sm_ultng Ultimate Nudge (Summit Coin) + + sman_102ef + Spider-Man v1.02 (English,French) + + + sman_130ef + Spider-Man v1.30 (English,French) + + + sman_130ei + Spider-Man v1.30 (English,Italian) + + + sman_130es + Spider-Man v1.30 (English,Spanish) + + + sman_130gf + Spider-Man v1.30 (German,French) + + + sman_140e + Spider-Man v1.40 + + + sman_140ef + Spider-Man v1.40 (English,French) + + + sman_140ei + Spider-Man v1.40 (English,Italian) + + + sman_140es + Spider-Man v1.40 (English,Spanish) + + + sman_140gf + Spider-Man v1.40 (German,French) + + + sman_142e + Spider-Man v1.42 + + + sman_160e + Spider-Man v1.60 + + + sman_160ef + Spider-Man v1.60 (English,French) + + + sman_160ei + Spider-Man v1.60 (English,Italian) + + + sman_160es + Spider-Man v1.60 (English,Spanish) + + + sman_160gf + Spider-Man v1.60 (German,French) + + + sman_170e + Spider-Man v1.70 + + + sman_170ef + Spider-Man v1.70 (English,French) + + + sman_170ei + Spider-Man v1.70 (English,Italian) + + + sman_170es + Spider-Man v1.70 (English,Spanish) + + + sman_170gf + Spider-Man v1.70 (German,French) + + + sman_190e + Spider-Man v1.90 + + + sman_190ef + Spider-Man v1.90 (English,French) + + + sman_190ei + Spider-Man v1.90 (English,Italian) + + + sman_190es + Spider-Man v1.90 (English,Spanish) + + + sman_190gf + Spider-Man v1.90 (German,French) + + + sman_192e + Spider-Man v1.92 + + + sman_192ef + Spider-Man v1.92 (English,French) + + + sman_192ei + Spider-Man v1.92 (English,Italian) + + + sman_192es + Spider-Man v1.92 (English,Spanish) + + + sman_192gf + Spider-Man v1.92 (German,French) + + + sman_200e + Spider-Man v2.00 + + + sman_210e + Spider-Man v2.10 + + + sman_210ei + Spider-Man v2.10 (English,Italian) + + + sman_210es + Spider-Man v2.10 (English,Spanish) + + + sman_210f + Spider-Man v2.10 (French) + + + sman_210gf + Spider-Man v2.10 (German,French) + + + sman_220e + Spider-Man v2.20 + + + sman_230e + Spider-Man v2.30 + + + sman_240 + Spider-Man v2.40 + smarinef Sega Marine Fishing + + smartoss + Smart Toss 'em / Smartball (Ver 2.0) + smash Smash (Crash bootleg) + + smashdrv + Smashing Drive (World) + + + smashdrvb + Smashing Drive (UK) + + + smashdrvs + Smashing Drive (Spain, Portugal) + smashtv Smash T.V. (rev 8.00) @@ -104346,6 +123367,10 @@ smbombr1 Super Muscle Bomber: The International Blowout (Japan 940808) + + smf + Super Medal Fighters (Japan 970228) + smgolf Vs. Stroke & Match Golf (Men Version, set GF4-2 F) @@ -104360,35 +123385,71 @@ smgp - Super Monaco GP (World, Rev B, FD1094 317-0126a) + Super Monaco GP (World, Rev B) (FD1094 317-0126a) smgp5 - Super Monaco GP (World, FD1094 317-0126) + Super Monaco GP (World) (FD1094 317-0126) + + + smgp5d + Super Monaco GP (World) (bootleg of FD1094 317-0126 set) smgp6 - Super Monaco GP (World, Rev A, FD1094 317-0126a) + Super Monaco GP (World, Rev A) (FD1094 317-0126a) + + + smgp6d + Super Monaco GP (World, Rev A) (bootleg of FD1094 317-0126a set) + + + smgpd + Super Monaco GP (World, Rev B) (bootleg of FD1094 317-0126a set) smgpj - Super Monaco GP (Japan, Rev B, FD1094 317-0124a) + Super Monaco GP (Japan, Rev B) (FD1094 317-0124a) smgpja - Super Monaco GP (Japan, Rev A, FD1094 317-0124a) + Super Monaco GP (Japan, Rev A) (FD1094 317-0124a) + + + smgpjd + Super Monaco GP (Japan, Rev B) (bootleg of FD1094 317-0124a set) smgpu - Super Monaco GP (US, Rev C, FD1094 317-0125a) + Super Monaco GP (US, Rev C) (FD1094 317-0125a) smgpu1 - Super Monaco GP (US, Rev B, FD1094 317-0125a) + Super Monaco GP (US, Rev B) (FD1094 317-0125a) + + + smgpu1d + Super Monaco GP (US, Rev B) (bootleg of FD1094 317-0125a set) smgpu2 - Super Monaco GP (US, Rev A, FD1094 317-0125a) + Super Monaco GP (US, Rev A) (FD1094 317-0125a) + + + smgpu2d + Super Monaco GP (US, Rev A) (bootleg of FD1094 317-0125a set) + + + smgpud + Super Monaco GP (US, Rev C) (bootleg of FD1094 317-0125a set) + + + sminiboy + Super Mini-Boy + + + smissw + Super Miss World smleague @@ -104396,7 +123457,7 @@ smlg99 - Super Major League '99 + World Series 99 / Super Major League 99 smman @@ -104404,7 +123465,11 @@ smooncrs - Super Moon Cresta + Super Moon Cresta (Gremlin, bootleg) + + + smoto13 + Super Rider (v1.3) smoto16 @@ -104414,10 +123479,42 @@ smoto20 Super Rider (Italy, v2.0) + + smotor + Super Motor (prototype) + + + sms4in1 + 4-in-1 (version SWS1-052587) + + + sms4in1a + 4-in-1 (version SWS1-110984) + smshilo HI-LO Double Up Joker Poker + + smsjoker + Joker Poker With Hi-Lo Double-Up + + + smssgame + Super Game (Sega Master System Multi-game bootleg) + + + smssgamea + Super Game (Sega Master System Multi-game bootleg) (alt games) + + + smtma6 + Show Me The Money (10001911, NSW/ACT) + + + smtma6q + Show Me The Money (10015711, Queensland) + snake Snake Machine @@ -104426,6 +123523,10 @@ snakepit Snake Pit + + snakepit2 + Snake Pit (9/14/84) + snakjack Snacks'n Jaxson @@ -104442,9 +123543,21 @@ sncwgltd Sonic Wings Limited (Japan) + + snes4sl + SNES 4 Slot arcade switcher + + + snes4sln + SNES 4 Slot arcade switcher (NBA Jam) + sngkace - Sengoku Ace (Japan) + Sengoku Ace (Japan, set 1) + + + sngkacea + Sengoku Ace (Japan, set 2) snlad @@ -104454,6 +123567,10 @@ snookr10 Snooker 10 (Ver 1.11) + + snowbalt + Snow Board Championship (set 2) + snowboar Snow Board Championship (Version 2.1) @@ -104464,16 +123581,36 @@ snowbro2 - Snow Bros. 2 - With New Elves / Otenki Paradise + Snow Bros. 2 - With New Elves / Otenki Paradise (Hanafram) snowbro2b - Snow Bros. 2 - With New Elves / Otenki Paradise (bootleg) + Snow Bros. 2 - With New Elves / Otenki Paradise (bootleg, set 1) + + + snowbro2b2 + Snow Bros. 2 - With New Elves / Otenki Paradise (bootleg, set 2) + + + snowbro2ny + Snow Bros. 2 - With New Elves / Otenki Paradise (Nyanko) snowbro3 Snow Brothers 3 - Magical Adventure + + snowbroa + Snow Bros. - Nick & Tom (set 2) + + + snowbrob + Snow Bros. - Nick & Tom (set 3) + + + snowbroj + Snow Bros. - Nick & Tom (Japan) + snowbros Snow Bros. - Nick & Tom (set 1) @@ -104502,6 +123639,14 @@ snowbroswb Snow Bros. - Nick & Tom (The Winter Bobble hardware bootleg) + + snowbwar + Snowball War - WakuWaku Yukigassen + + + snowcat + Snow Cat (0100405V, NSW/ACT) + snspares Strikes n' Spares (rev.6) @@ -104510,6 +123655,10 @@ snspares1 Strikes n' Spares (rev.1) + + snspares2 + Strikes n' Spares (rev.2) + socbrawl Soccer Brawl (NGM-031) @@ -104528,7 +123677,7 @@ soccerss - Soccer Superstars (ver EAA) + Soccer Superstars (ver EAC) soccerssa @@ -104542,10 +123691,22 @@ soccerssja Soccer Superstars (ver JAA) + + soccerssu + Soccer Superstars (ver UAC) + + + soccrrmt + Soccer (Ramtek) [TTL] + socrking Soccer Kings + + socrkinga + Soccer Kings (alternate set) + socrkingg Soccer Kings (German speech) @@ -104558,6 +123719,10 @@ sogeki Sogeki (ver JAA) + + sokoban + Sokoban LE + sokonuke Sokonuke Taisen Game (Japan) @@ -104580,7 +123745,7 @@ solarq - Solar Quest + Solar Quest (rev 10 8 81) solarwap @@ -104588,7 +123753,7 @@ solarwar - Solar-Warrior (US) + Solar War soldam @@ -104602,6 +123767,10 @@ soldivid Sol Divide - The Sword Of Darkness + + soldividk + Sol Divide - The Sword Of Darkness (Korea) + solfight Solar Fight (bootleg of Ozma Wars) @@ -104618,22 +123787,50 @@ solomonj Solomon no Kagi (Japan) + + solrwarr + Solar-Warrior (US) + solvalou - Solvalou (Japan) + Solvalou (SV1, Japan) sonic SegaSonic The Hedgehog (Japan, rev. C) + + sonic2mb + Sonic The Hedgehog 2 (bootleg of Mega Drive version) + + + sonic3mb + Sonic The Hedgehog 3 (bootleg of Mega Drive version) + sonicbom Sonic Boom (FD1094 317-0053) + + sonicbomd + Sonic Boom (bootleg of FD1094 317-0053 set) + + + soniccar + Waku Waku Sonic Patrol Car + + + sonicfgt + SegaSonic Cosmo Fighter + sonicp SegaSonic The Hedgehog (Japan, prototype) + + sonicpop + SegaSonic Popcorn Shop (Rev B) + sonicwi Sonic Wings (Japan) @@ -104646,13 +123843,17 @@ sonicwi3 Aero Fighters 3 / Sonic Wings 3 + + sonikfig + Sonik Fighter (version 02, encrypted) + sonofphx Son of Phoenix (bootleg of Repulse) sonoth - Something For Nothing (Russia) + Something For Nothing (Russian) sonson @@ -104664,91 +123865,91 @@ sonstwar - Star Wars (Sonic) + Star Wars (Sonic, set 1) sonstwr2 - Star Wars (Sonic, alternate set) + Star Wars (Sonic, set 2) sopranof - Sopranos, The (5.00 France) + The Sopranos (5.00 France) sopranof_107 - Sopranos, The (1.07 France) + The Sopranos (1.07 France) sopranof_300 - Sopranos, The (3.00 France) + The Sopranos (3.00 France) sopranof_400 - Sopranos, The (4.00 France) + The Sopranos (4.00 France) sopranog - Sopranos, The (5.00 Germany) + The Sopranos (5.00 Germany) sopranog_107 - Sopranos, The (1.07 Germany) + The Sopranos (1.07 Germany) sopranog_300 - Sopranos, The (3.00 Germany) + The Sopranos (3.00 Germany) sopranog_400 - Sopranos, The (4.00 Germany) + The Sopranos (4.00 Germany) sopranoi - Sopranos, The (5.00 Italy) + The Sopranos (5.00 Italy) sopranoi_107 - Sopranos, The (1.07 Italy) + The Sopranos (1.07 Italy) sopranoi_300 - Sopranos, The (3.00 Italy) + The Sopranos (3.00 Italy) sopranoi_400 - Sopranos, The (4.00 Italy) + The Sopranos (4.00 Italy) sopranol - Sopranos, The (5.00 Spain) + The Sopranos (5.00 Spain) sopranol_107 - Sopranos, The (1.07 Spain) + The Sopranos (1.07 Spain) sopranol_300 - Sopranos, The (3.00 Spain) + The Sopranos (3.00 Spain) sopranol_400 - Sopranos, The (4.00 Spain) + The Sopranos (4.00 Spain) sopranos - Sopranos, The (5.00) + The Sopranos (5.00) sopranos_204 - Sopranos, The (2.04) + The Sopranos (2.04) sopranos_300 - Sopranos, The (3.00) + The Sopranos (3.00) sopranos_400 - Sopranos, The (4.00) + The Sopranos (4.00) sorbit @@ -104764,7 +123965,7 @@ sos - SOS + SOS Game sosterm @@ -104776,7 +123977,11 @@ sotsugyo - Sotsugyo Shousho + Sotsugyo Shousho (Japan) + + + sotsugyok + Jor-eop Jeungmyeongseo (Korea) soukobdx @@ -104792,7 +123997,7 @@ soulcl2w - Soul Calibur II (SC2? world version) + Soul Calibur II (SC23 world version) soulclb2 @@ -104800,11 +124005,15 @@ soulclb3 - Soul Calibur III (SC31001-NA-A) + Soul Calibur III (SC31001-NA-A key, NA-B disc) soulclb3a - Soul Calibur III (SC31002-NA-A) + Soul Calibur III (SC31002-NA-A key, NA-B disc) + + + soulclb3b + Soul Calibur III (SC31002-NA-A key, NA-A disc) soulclbr @@ -104834,13 +124043,21 @@ soulclbrwb Soul Calibur (World, SOC14/VER.B) + + souledga + Soul Edge (SO3-VER.A) + + + souledgb + Soul Edge (SO1-VER.A) + souledge - Soul Edge Ver. II (World, SO4/VER.C) + Soul Edge Ver. II (Asia, SO4/VER.C) - souledgeaa - Soul Edge (Asia, SO2/VER.A) + souledgea + Soul Edge (World, SO2/VER.A) souledgeja @@ -104860,7 +124077,7 @@ soutenry - Soutenryu (V2.07J) + Soutenryu (V2.07J 2000/12/14 11:13:02) sp_atw @@ -105024,11 +124241,11 @@ sp_carry - Carry On (Pcp) (sp.ACE?) (set 1) + Carry On (Pcp) (sp.ACE) (set 1) sp_carrya - Carry On (Pcp) (sp.ACE?) (set 2) + Carry On (Pcp) (sp.ACE) (set 2) sp_cbowl @@ -105364,7 +124581,7 @@ sp_front - Final Frontier (Bwb) (sp.ACE?) + Final Frontier (Bwb) (sp.ACE) sp_ghost @@ -106440,11 +125657,11 @@ sp_skylm - Sky's The Limit Club, The (Ace) (sp.ACE) (set 1) + The Sky's The Limit Club (Ace) (sp.ACE) (set 1) sp_skylma - Sky's The Limit Club, The (Ace) (sp.ACE) (set 2) + The Sky's The Limit Club (Ace) (sp.ACE) (set 2) sp_spell @@ -106856,7 +126073,15 @@ spacduel - Space Duel + Space Duel (version 2) + + + spacduel0 + Space Duel (prototype) + + + spacduel1 + Space Duel (version 1) spacea91 @@ -106890,6 +126115,14 @@ spaceatt Space Attack (bootleg of Space Invaders) + + spaceatt2k + Space Attack (2k roms)(bootleg of Space Invaders) + + + spaceattbp + Space Attack (bproms)(bootleg of Space Invaders) + spacebrd Space Bird (bootleg) @@ -106956,15 +126189,15 @@ spacefev - Space Fever (New Ver.) + Space Fever (new version) spacefevo - Space Fever (Old Ver.) + Space Fever (old version) spacefevo2 - Space Fever (Older Ver.) + Space Fever (older version) spacefrt @@ -107008,19 +126241,23 @@ spacejam - Space Jam + Space Jam (3.00) + + + spacejam_200 + Space Jam (2.00) spacejmf - Space Jam (France) + Space Jam (3.00 France) spacejmg - Space Jam (Germany) + Space Jam (3.00 Germany) spacejmi - Space Jam (Italy) + Space Jam (3.00 Italy) spacelnc @@ -107044,15 +126281,23 @@ spacepir - Space Pirates v2.2 + Space Pirates (v2.2) + + + spacepir_14 + Space Pirates (v1.4) spaceplt - Space Pilot + Space Pilot (set 1) + + + spaceplta + Space Pilot (set 2) spacerng - Space Ranger (bootleg of Space Invaders) + Space Ranger spaceshp @@ -107086,6 +126331,10 @@ spacezap Space Zap + + spacfura + Space Fury (revision A) + spacfury Space Fury (revision C) @@ -107098,10 +126347,18 @@ spacfuryb Space Fury (revision B) + + spacfurybl + Advisor (Italian bootleg of Space Fury) + spacmiss Space Missile - Space Fighting Game + + spactrai + Space Train + spacwalk Space Walk @@ -107116,7 +126373,11 @@ spangbl - Super Pang (World 900914, bootleg) + Super Pang (World 900914, bootleg, set 1) + + + spangbl2 + Super Pang (World 900914, bootleg, set 2) spangj @@ -107138,13 +126399,21 @@ spartanx Spartan X (Japan) + + spartanxtec + Spartan X (Tecfri hardware bootleg) + spatter - Spatter + Spatter (315-5xxx) + + + spattera + Spatter (315-5099) spawn - Spawn In the Demon's Hand (JPN, USA, EUR, ASI, AUS) (Rev B) + Spawn: In the Demon's Hand (Rev B) spbactn @@ -107160,11 +126429,7 @@ spcdrag - Space Dragon (Moon Cresta bootleg, set 1) - - - spcdraga - Space Dragon (Moon Cresta bootleg, set 2) + Space Dragon (Moon Cresta bootleg) spceking @@ -107178,6 +126443,10 @@ spcewarl Space War (Leijac Corporation) + + spcewarla + Space War (Leisure and Allied) + spcewars Space War (Sanritsu) @@ -107222,6 +126491,10 @@ spclforc Special Forces + + spclorda + Space Lords (alternate) + spclords Space Lords (rev C) @@ -107238,6 +126511,26 @@ spclordsg Space Lords (rev A, German) + + spcmission + Space Mission (SegaSA / Sonic, Spanish bootleg of Scramble) + + + spcnv95u + Space Invaders '95 - Attack Of The Lunar Loonies (US) + + + spcpnthr + Space Panther + + + spcpokan + Space Pokan + + + spcpoker + Space Poker + spcpostn Space Position (Japan) @@ -107246,18 +126539,58 @@ spcrider Space Riders + + spcrocks + Space Rocks (Spanish clone of Asteroids) + + + spcship + Space Ship (Pinball) + spctbird Space Thunderbird + + spcteam + Space Team + + + spctrain + Space Train (Pinball) + + + spctraino + Space Train (Pinball, old hardware) + + + spctrek + Space Trek (Video Game S.A., Spanish bootleg of Scramble) + + + spcwarp + Space Warp? (Cosmos conversion on Galaxian hardware) + spdball Speed Ball - Contest at Neonworld (prototype) + + spdbuggy + Speed Buggy + spdcoin Speed Coin (prototype) + + spdheat + Super Dead Heat (World) + + + spdheatj + Super Dead Heat (Japan) + spdodgeb Super Dodge Ball (US) @@ -107270,6 +126603,10 @@ speakesy4p Speakeasy 4 Player + + speakhlp + Speak & Help + speakres Speak & Rescue @@ -107280,11 +126617,15 @@ spec2k - Spectrum 2000 (Euro) + Spectrum 2000 (vertical, Korea) + + + spec2kh + Spectrum 2000 (horizontal, buggy) (Europe) - spec2kv - Spectrum 2000 (vertical) + speccies + Speccies 2 specforc @@ -107292,7 +126633,11 @@ specfrce - Special Forces Elite Training + Special Forces Elite Training (v01.02.00) + + + specfrceo + Special Forces Elite Training (v01.01.01) spectar @@ -107302,6 +126647,10 @@ spectar1 Spectar (revision 1?) + + spectarrf + Spectar (revision 2, bootleg) + spectra Spectra IV @@ -107320,7 +126669,15 @@ speedbal - Speed Ball + Speed Ball (set 1) + + + speedbala + Speed Ball (set 2) + + + speedbsk + Speed Basketball speeddrp @@ -107338,14 +126695,30 @@ speedrcr Speed Racer + + speedrs + Speed Race (Seletron / Olympia) + speedspn Speed Spin speedup + Speed Up (Version 2.20) + + + speedup10 + Speed Up (Version 1.00) + + + speedup12 Speed Up (Version 1.20) + + speedway + Speedway + speglsht Super Eagle Shot @@ -107354,9 +126727,13 @@ spellbnd Spellbound + + spelnkrj + Spelunker (Japan) + spelunk2 - Spelunker II + Spelunker II - 23 no Kagi (Japan) spelunkr @@ -107368,12 +126745,20 @@ spf2t - Super Puzzle Fighter II Turbo (USA 960620) + Super Puzzle Fighter II Turbo (Euro 960529) spf2ta Super Puzzle Fighter II Turbo (Asia 960529) + + spf2tb + Super Puzzle Fighter II Turbo (Boss Hack)(USA 960620) + + + spf2tcb + Super Puzzle Fighter II Turbo (Color Blind Hack) + spf2td Super Puzzle Fighter II Turbo (USA 960620 Phoenix Edition) (bootleg) @@ -107382,6 +126767,10 @@ spf2th Super Puzzle Fighter II Turbo (Hispanic 960531) + + spf2tu + Super Puzzle Fighter II Turbo (USA 960620) + spf2xj Super Puzzle Fighter II X (Japan 960531) @@ -107390,6 +126779,10 @@ spf2xjd Super Puzzle Fighter II X (Japan 960531 Phoenix Edition) (bootleg) + + spf2xpri + Super Puzzle Fighter 2 X' Balance Patch (Hack) + spfghmk2 Space Fighter Mark II (set 1) @@ -107398,13 +126791,33 @@ spfghmk22 Space Fighter Mark II (set 2) + + spgcarn + Spring Carnival (10000311, NSW/ACT) + + + spgcarnq + Spring Carnival (10008011, Queensland) + + + spgfest + Spring Festival (20262311, Queensland) + spicaadv Spica Adventure (v2.03J) spiceup - Spice It Up (Konami Endeavour) + Spice It Up (Konami Endeavour, Russia) + + + spider + Spider (Buena Vision) + + + spidermi + Spiderman (FMV Demo) spidermn @@ -107422,6 +126835,14 @@ spiders3 Spiders (set 3) + + spidey + Spider-Man: The Videogame (US) + + + spideyj + Spider-Man: The Videogame (World) + spidman Spider-Man: The Videogame (World) @@ -107432,7 +126853,7 @@ spidmanu - Spider-Man: The Videogame (US) + Spider-Man: The Videogame (US, Rev A) spielbud @@ -107444,11 +126865,11 @@ spikeofe - Spikeout Final Edition + Spikeout Final Edition (Export) spikeout - Spikeout (Revision C) + Spikeout (Export, Revision C) spiker @@ -107474,6 +126895,10 @@ spinkick Hec's Spinkick + + spinlbrj + Spinal Breakers (Japan) + spinlbrk Spinal Breakers (World) @@ -107486,6 +126911,14 @@ spinlbrku Spinal Breakers (US) + + spinlbrkup + Spinal Breakers (US, prototype) + + + spinlbru + Spinal Breakers (US) + spinmast Spin Master / Miracle Adventure @@ -107498,10 +126931,22 @@ spirit Spirit + + spirit76 + Spirit of 76 + spitboss Super Pit Boss (9221-02A) + + spk102ua + Super Poker (v102UA) + + + spk114it + Super Poker (v114IT) + spk115it Super Poker (v115IT) @@ -107510,6 +126955,26 @@ spk116it Super Poker (v116IT) + + spk116itmx + Super Poker (v116IT-MX) + + + spk200ua + Super Poker (v200UA) + + + spk203us + Super Poker (v203US) + + + spk205us + Super Poker (v205US) + + + spk306us + Super Poker (v306US) + spkrbtl Spikers Battle (GDS-0005) @@ -107526,6 +126991,10 @@ splash10 Splash! (Ver. 1.0 World) + + splashms + Splash (Modular System) + splat Splat! @@ -107542,26 +127011,50 @@ splatterj Splatter House (Japan, SH1) - - splitsec - Split Second - splmastr Spell Master (Russia) (Atronic) splndrbt - Splendor Blast + Splendor Blast (set 1) + + + splndrbt2 + Splendor Blast II + + + splndrbta + Splendor Blast (set 2) + + + splndrbtb + Splendor Blast (set 3) + + + spltsecp + Split Second (Pinball) + + + spnchotj + Super Punch-Out!! (Japan) spnchout - Super Punch-Out!! + Super Punch-Out!! (Rev B) + + + spnchouta + Super Punch-Out!! (Rev A) spnchoutj Super Punch-Out!! (Japan) + + spongbob + SpongeBob SquarePants Ticket Boom + spooky Spooky Night 2nd Edition (Version 2.0.4) @@ -107602,6 +127095,10 @@ spool99c Super Pool 99 (Version 0.26) + + sport2k + Sport 2000 + spotty Spotty (Ver. 2.0.2) @@ -107610,6 +127107,18 @@ sprbreak Spring Break + + sprbreaka + Spring Break (alternate set) + + + sprbreakf + Spring Break (French) + + + sprbreakg + Spring Break (German) + sprbreaks Spring Break (single ball game) @@ -107682,10 +127191,18 @@ sprk_103 South Park (1.03) + + sprpuzzle + Super Puzzle (Sang Ho Soft) + sprtauth Sports Authority + + sprtdart + Sport Dart TV + sprtjam Sports Jam (GDS-0003) @@ -107698,6 +127215,18 @@ sprtshot Sports Shooting USA + + spset005 + S-Plus SET005 Set chip + + + spset015 + S-Plus SET015 Set chip + + + spset026 + S-Plus SET026 Set chip + spss4240 S-Plus (SS4240) Coral Reef @@ -107706,18 +127235,26 @@ spstn_l5 Space Station (L-5) + + sptrekct + Space Trek (cocktail) + spuzbobl - Super Puzzle Bobble (V2.05O) + Super Puzzle Bobble (V2.05O 1999/2/24 18:00) spuzboblj - Super Puzzle Bobble (V2.04J) + Super Puzzle Bobble (V2.04J 1999/2/27 02:10) spy S.P.Y. - Special Project Y (World ver. N) + + spyhnt2a + Spy Hunter 2 (rev 1) + spyhunt Spy Hunter @@ -107736,12 +127273,16 @@ spyhuntpr - Spy Hunter (Spain, Recreativos Franco S.A. PCB) + Spy Hunter (Spain, Recreativos Franco S.A., Tecfri PCB) spyhuntr Spy Hunter (Pinball) + + spyhuntsp + Spy Hunter (Spain, Recreativos Franco S.A., Bally Midway license) + spyu S.P.Y. - Special Project Y (US ver. M) @@ -107750,21 +127291,33 @@ sqbert Faster, Harder, More Challenging Q*bert (prototype) + + sqij + SQIJ! + sqix - Super Qix (World, Rev 2) + Super Qix (World/Japan, V1.2) sqixb1 - Super Qix (bootleg set 1) + Super Qix (bootleg of V1.0, 8031 MCU) sqixb2 - Super Qix (bootleg set 2) + Super Qix (bootleg, No MCU) + + + sqixbl + Super Qix (bootleg) + + + sqixr0 + Super Qix (World/Japan, V1.0) sqixr1 - Super Qix (World, Rev 1) + Super Qix (World/Japan, V1.1) sqixu @@ -107776,7 +127329,11 @@ squash - Squash (Ver. 1.0) + Squash (ver. 1.0, checksum 015aef61) + + + squeenb + Super Queen Bee (Ver. 101) sraider @@ -107784,23 +127341,39 @@ srally2 - Sega Rally 2 + Sega Rally 2 (Export) + + + srally2dx + Sega Rally 2 Deluxe (Export) + + + srally2p + Sega Rally 2 (prototype, 29 Dec 1997) - srally2x - Sega Rally 2 DX + srally2pa + Sega Rally 2 (prototype, 8 Dec 1997) srallyc - Sega Rally Championship - TWIN (Revision C) + Sega Rally Championship - Twin/DX (Revision C) - srallyca + srallycb + Sega Rally Championship - Twin/DX (Revision B) + + + srallycc + Sega Rally Championship - Twin/DX (Revision A) + + + srallycdx Sega Rally Championship - DX (Revision A) - srallycb - Sega Rally Championship - TWIN (Revision B) + srallycdxa + Sega Rally Championship - DX sranger @@ -107830,13 +127403,17 @@ srdarwinj Super Real Darwin (Japan) + + srdarwnj + Super Real Darwin (Japan) + srdmissn S.R.D. Mission srmdb - Sunset Riders (bootleg of Megadrive version) + Sunset Riders (bootleg of Mega Drive version) srmp1 @@ -107872,8 +127449,20 @@ srmvs + Super Real Mahjong VS (Rev A) + + + srmvsa Super Real Mahjong VS + + srockbwl + Super Rock and Bowl (V1.1) + + + srollnd + Super Roller (v7.0) + srumbler The Speed Rumbler (set 1) @@ -107886,17 +127475,25 @@ srumbler3 The Speed Rumbler (set 3) + + srumblr2 + The Speed Rumbler (set 2) + sryudens - Mahjong Seiryu Densetsu (Japan, NM502) + Mahjong Seiryu Densetsu [BET] (Japan, NM502) + + + ss2001 + Super Shanghai 2001 ss2005 - Super Shanghai 2005 (GDL-0031) + Super Shanghai 2005 (Japan, Rev A) (GDL-0031A) - ss2005a - Super Shanghai 2005 (Rev A) (GDL-0031A) + ss2005o + Super Shanghai 2005 (Japan) (GDL-0031) ss_01 @@ -107920,7 +127517,7 @@ ssanchan - Sanrin San Chan (Japan) + Sanrin San Chan (Japan, 315-5xxx) sscandal @@ -107932,7 +127529,15 @@ sscope2 - Silent Scope 2 + Silent Scope 2 : Dark Silhouette (ver UAD) + + + sscope2b + Silent Scope 2 : Fatal Judgement (ver UAB, Ver 1.01, GN715 video board) + + + sscope2c + Silent Scope 2 : Fatal Judgement (ver UAC, Ver 1.02, GN715 video board) sscopea @@ -107946,13 +127551,21 @@ sscopec Silent Scope (ver xxC, Ver 1.30) + + sscoped + Silent Scope (ver UAD, Ver 1.33, GQ871 video board) + + + sscopefh + Silent Scope Fortune Hunter (ver EAA) + sscopex Silent Scope EX (ver UAA) ssf2 - Super Street Fighter II: The New Challengers (World 930911) + Super Street Fighter II: The New Challengers (World 931005) ssf2a @@ -107962,6 +127575,10 @@ ssf2ar1 Super Street Fighter II: The New Challengers (Asia 930914) + + ssf2d + Super Street Fighter II - the new challengers (super street fighter 2 930911 etc Phoenix Edition) + ssf2h Super Street Fighter II: The New Challengers (Hispanic 930911) @@ -107980,7 +127597,11 @@ ssf2mdb - Super Street Fighter II - The New Challengers (bootleg of Japanese MegaDrive version) + Super Street Fighter II - The New Challengers (bootleg of Japanese Mega Drive version) + + + ssf2r1 + Super Street Fighter II: The New Challengers (World 930911) ssf2t @@ -107990,10 +127611,18 @@ ssf2ta Super Street Fighter II Turbo (Asia 940223) + + ssf2tad + Super Street Fighter II Turbo (Asia 940223 Phoenix Edition) (bootleg) + ssf2tb Super Street Fighter II: The Tournament Battle (World 931119) + + ssf2tba + Super Street Fighter II: The Tournament Battle (Asia 931005) + ssf2tbd Super Street Fighter II: The Tournament Battle (World 931119 Phoenix Edition) (bootleg) @@ -108004,12 +127633,32 @@ ssf2tbj + Super Street Fighter II: The Tournament Battle (Japan 931005) + + + ssf2tbj1 Super Street Fighter II: The Tournament Battle (Japan 930911) ssf2tbr1 Super Street Fighter II: The Tournament Battle (World 930911) + + ssf2tbu + Super Street Fighter II: The Tournament Battle (USA 930911) + + + ssf2td + Super Street Fighter II Turbo (super street fighter 2 X 940223 etc Phoenix Edition) + + + ssf2th + Super Street Fighter II Turbo (Hispanic 940223) + + + ssf2tnl + Super Street Fighter II Turbo New Legacy v0.6 (Beta) (Hack by Born2SPD) + ssf2tu Super Street Fighter II Turbo (USA 940323) @@ -108026,33 +127675,57 @@ ssf2ud Super Street Fighter II: The New Challengers (USA 930911 Phoenix Edition) (bootleg) + + ssf2us2 + Super Street Fighter II: The New Challengers Super 2 (USA 930911) + ssf2xj + Super Street Fighter II X: Grand Master Challenge (Japan 940311) + + + ssf2xjr1 Super Street Fighter II X: Grand Master Challenge (Japan 940223) - ssf2xjd + ssf2xjr1d Super Street Fighter II X: Grand Master Challenge (Japan 940223 Phoenix Edition) (bootleg) - ssf2xjr + ssf2xjr1r Super Street Fighter II X: Grand Master Challenge (Japan 940223 rent version) + + ssf2xjr1trn + Super Street Fighter II X - GMC Trainer (super street fighter 2 X 940223 Japan) + ssfindo See See Find Out sshangha - Super Shanghai Dragon's Eye (Japan) + Super Shanghai Dragon's Eye (World) sshanghab Super Shanghai Dragon's Eye (World, bootleg) + + sshanghaj + Super Shanghai Dragon's Eye (Japan) + + + sshanghak + Super Shanghai Dragon's Eye (Korea) + + + sshanghb + Super Shanghai Dragon's Eye (World, bootleg) + sshootep - Sharpshooter + Sharpshooter (Game Plan) sshooter @@ -108078,6 +127751,14 @@ sshot Super Shot + + sshot137 + Shuffleshot (v1.37) + + + sshtl_l3 + Space Shuttle (L-3) + sshtl_l7 Space Shuttle (L-7) @@ -108088,11 +127769,11 @@ sshuttle - Space Shuttle (Taito) + Space Shuttle (Taito) (set 1) sshuttle1 - Space Shuttle (Taito) (alternate set) + Space Shuttle (Taito) (set 2) ssi @@ -108102,17 +127783,21 @@ ssia Super Space Invaders '91 (World) + + ssib + Super Space Invaders '91 (World, earlier?) + ssideki Super Sidekicks / Tokuten Ou ssideki2 - Super Sidekicks 2 - The World Championship / Tokuten Ou 2 - real fight football (NGM-061)(NGH-061) + Super Sidekicks 2 - The World Championship / Tokuten Ou 2 - Real Fight Football (NGM-061 ~ NGH-061) ssideki3 - Super Sidekicks 3 - The Next Glory / Tokuten Ou 3 - eikou e no michi + Super Sidekicks 3 - The Next Glory / Tokuten Ou 3 - Eikou e no Michi ssideki4 @@ -108120,7 +127805,7 @@ ssingles - Swinging Singles + Swinging Singles (US) ssipkr24 @@ -108146,6 +127831,10 @@ sslama Super Slam (set 2) + + sslamb + Super Slam (set 3) + ssmissin S.S. Mission @@ -108154,6 +127843,10 @@ ssoldier Superior Soldiers (US) + + ssonicbr + SegaSonic Bros. (prototype, hack) + ssozumo Syusse Oozumou (Japan) @@ -108166,6 +127859,14 @@ sspacaho Space Attack / Head On + + sspacat2 + Space Attack (upright, older) + + + sspacatc + Space Attack (cocktail) + sspaceat Space Attack (upright set 1) @@ -108182,6 +127883,10 @@ sspaceatc Space Attack (cocktail) + + sspanic + Same Same Panic + sspeedr Super Speed Race @@ -108198,6 +127903,10 @@ sspirtfc Scramble Spirits (World, Floppy Based, FD1094 317-0058-02c) + + sspring1 + Super Sprint (German, rev 1) + ssprint Super Sprint (rev 4) @@ -108226,6 +127935,34 @@ ssprints Super Sprint (Spanish) + + ssrdrabd + Sunset Riders (Asia 2 Players ver. ABD) + + + ssrdrebc + Sunset Riders (World 2 Players ver. EBC) + + + ssrdrebd + Sunset Riders (World 2 Players ver. EBD) + + + ssrdrjbd + Sunset Riders (Japan 2 Players ver. JBD) + + + ssrdruac + Sunset Riders (US 4 Players ver. UAC) + + + ssrdrubc + Sunset Riders (US 2 Players ver. UBC) + + + ssrdruda + Sunset Riders (US 4 Players ver. UDA) + ssriders Sunset Riders (4 Players ver EAC) @@ -108262,6 +127999,10 @@ ssridersjac Sunset Riders (4 Players ver JAC) + + ssridersjad + Sunset Riders (4 Players ver JAD) + ssridersjbd Sunset Riders (2 Players ver JBD) @@ -108300,7 +128041,7 @@ sstar97 - Super Star '97 (version V153B) + Super Star 97 / Ming Xing 97 (version V153B) sstarbtl @@ -108324,36 +128065,52 @@ sstrike - Super Strike Bowling + Super Strike Bowling (V1) sstriker - Sorcer Striker (set 1) + Sorcer Striker - sstrikera - Sorcer Striker (set 2) + sstrikerk + Sorcer Striker (Korea) sstrkfgt Sega Strike Fighter (Rev A) + + sstrkfgta + Sega Strike Fighter (Rev A, no training mode) + + + sstrngr2 + Space Stranger 2 + ssvc_a26 Secret Service (2.6) - ssvc_b26 - Secret Service (2.6 alternate sound) + ssvc_a42 + Secret Service (4.2 alternate sound) - st_game - unknown pinball game + ssvc_b26 + Secret Service (2.6 alternate sound) st_ohla Oh La La (Stella) + + st_sam + SAM III Test Fixture + + + st_sam4 + SAM IV Test Fixture + st_vulkn Vulkan (Stella) @@ -108368,31 +128125,51 @@ stadhr96 - Stadium Hero '96 (World, EAJ) + Stadium Hero '96 (Europe, EAJ) stadhr96j Stadium Hero '96 (Japan, EAD) + + stadhr96j2 + Stadium Hero '96 (Japan?, EAE) + + + stadhr96u + Stadium Hero '96 (USA, EAH) + stagger1 Stagger I (Japan) stakwin - Stakes Winner / Stakes Winner - GI kinzen seiha e no michi + Stakes Winner / Stakes Winner - GI Kinzen Seiha e no Michi stakwin2 Stakes Winner 2 + + stakwindev + Stakes Winner / Stakes Winner - GI Kinzen Seiha e no Michi (early development board) + + + star100 + Ming Xing 100 (Star 100) + + + staraudi + Star Audition + starblad - Starblade (World) + Starblade (ST2, World) starbladj - Starblade (Japan) + Starblade (ST1, Japan) starcas @@ -108402,6 +128179,10 @@ starcas1 Star Castle (older) + + starcasc + Star Castle (cocktail) + starcase Star Castle (Mottoeis) @@ -108414,6 +128195,14 @@ starcrus Star Cruiser + + stardrft + Star Drifter (20150811, NSW/ACT) + + + stardrftu + Star Drifter (0451341, US) + starfght Star Fighter @@ -108430,6 +128219,10 @@ starfir2 Star Fire 2 + + starfira + Star Fire (set 2) + starfire Star Fire (set 1) @@ -108442,6 +128235,10 @@ starfirp Star Fire + + starfirpa + Star Fire (alternate set) + starforc Star Force @@ -108458,6 +128255,10 @@ starforce Star Force (encrypted, set 1) + + starfore + Star Force (encrypted) + stargate Stargate @@ -108482,6 +128283,10 @@ stargatp4 Stargate (rev.4) + + stargatp5 + Stargate (rev.5) + starglad Star Gladiator Episode I: Final Crusade (USA 960627) @@ -108502,6 +128307,10 @@ stargoda Star God (alternate sound) + + stargodb + Star God (variable replay score) + stargrds Star Guards @@ -108514,22 +128323,6 @@ starhawk Star Hawk - - starhrcl - Star Horse (client) - - - starhrct - Star Horse (server) - - - starhrse - Star Horse (big screens) - - - starhrsp - Star Horse Progress (Rev A) - starjack Star Jacker (Sega) @@ -108538,14 +128331,26 @@ starjacks Star Jacker (Stern Electronics) + + starjacs + Star Jacker (Stern) + starlstr Vs. Star Luster + + starqst + Star Quest (10009511, NSW/ACT) + starrace Star Race + + starridr + Star Rider + starrkr Star Raker @@ -108580,6 +128385,10 @@ starswep + Star Sweep (World, STP2/VER.A) + + + starswepj Star Sweep (Japan, STP1/VER.A) @@ -108602,9 +128411,17 @@ startrkd Star Trek (Defender bootleg) + + startrks + Star Trek (Head On hardware) + startrp - Starship Troopers + Starship Troopers (2.01) + + + startrp2 + Starship Troopers (2.00) starw @@ -108614,17 +128431,25 @@ starw1 Star Wars (bootleg of Galaxy Wars, set 2) + + starwar1 + Star Wars (rev 1) + starwarr Star Warrior starwars - Star Wars (rev 2) + Star Wars (set 1) starwars1 - Star Wars (rev 1) + Star Wars (set 2) + + + starwarso + Star Wars (set 3) starzan @@ -108642,10 +128467,22 @@ statriv4 Triv Four + + statriv5se + Triv Five Special Edition + + + statsymb + Status Symbols (0251147, US) + statusbj Status Black Jack (V1.0c) + + stbsub + Treasure Bonus (Subsino, v1.6) + stcc Sega Touring Car Championship @@ -108666,6 +128503,10 @@ stdragona Saint Dragon (set 2) + + stdragonb + Saint Dragon (bootleg) + stealsee Steal See @@ -108674,6 +128515,14 @@ steaser Strip Teaser (Italy, Ver. 1.22) + + steelta1 + Steel Talons (rev 1) + + + steeltag + Steel Talons (German, rev 2) + steeltal Steel Talons (rev 2) @@ -108690,6 +128539,10 @@ steeltalp Steel Talons (prototype) + + steeltap + Steel Talons (prototype) + steelwkr Steel Worker @@ -108710,6 +128563,10 @@ step3 Stepping 3 Superior + + stepchmp + Step Champ (GQ930 VER. JA) + stepstag Stepping Stage Special @@ -108731,12 +128588,12 @@ Street Fight (bootleg?) - stg - Strike Gunner S.T.G + stfightgb + Street Fight (Germany - Benelux) - stillcra - Still Crazy + stg + Strike Gunner S.T.G stinger @@ -108752,7 +128609,7 @@ stisub - Treasure Bonus (Subsino, v1.6) + Super Treasure Island (Italy, v1.6) stk_sprs @@ -108779,8 +128636,8 @@ Storm Blade (US) - stntcycl - Stunt Cycle [TTL] + stmbladej + Storm Blade (Japan) stocker @@ -108802,26 +128659,62 @@ stoneage Stoneage (bootleg of Caveman Ninja) + + stoneba2 + Stone Ball (2 Players) + stonebal - Stone Ball (4 Players) + Stone Ball (4 Players, v1-20 13/12/1994) stonebal2 - Stone Ball (2 Players) + Stone Ball (2 Players, v1-20 7/11/1994) + + + stonebal2o + Stone Ball (2 Players, v1-20 21/10/1994) + + + stop + Stop + + + storm + Storm storming - Storming Party / Riku Kai Kuu Saizensen + Storming Party / Riku Kai Kuu Saizensen (set 1) + + + storminga + Storming Party / Riku Kai Kuu Saizensen (set 2) strahl - Koutetsu Yousai Strahl (Japan set 1) + Koutetsu Yousai Strahl (World) strahla Koutetsu Yousai Strahl (Japan set 2) + + strahlj + Koutetsu Yousai Strahl (Japan set 1) + + + strahlja + Koutetsu Yousai Strahl (Japan set 2) + + + strahljbl + Koutetsu Yousai Strahl (Japan, bootleg) + + + strain + Super Train (Ver. 1.9) + strapids Shooting the Rapids @@ -108834,6 +128727,10 @@ stratab1 Strata Bowling (V1) + + stratabs + Strata Bowling (V1 4T, Super Strike Bowling type PCB) + stratgys Strategy X (Stern Electronics) @@ -108848,7 +128745,11 @@ stratvox - Stratovox + Stratovox (set 1) + + + stratvoxa + Stratovox (set 2) stratvoxb @@ -108882,6 +128783,14 @@ streetgr3 Street Games (Revision 3) + + streets1 + Street Smart (US version 1) + + + streetsj + Street Smart (Japan version 1) + streetsm Street Smart (US version 2) @@ -108898,6 +128807,10 @@ streetsmw Street Smart (World version 1) + + streetsw + Street Smart (World version 1) + stress Stress Busters (J 981020 V1.000) @@ -108906,9 +128819,17 @@ strfbomb Strafe Bomb (bootleg of Scramble) + + strfight + Star Fighter (bootleg of Astro Fighter) + + + strgchmp + Steering Champ (GQ710 97/12/18 VER. UAA) + strhoop - Street Hoop / Street Slam / Dunk Dream (DEM-004)(DEH-004) + Street Hoop / Street Slam / Dunk Dream (DEM-004 ~ DEH-004) strider @@ -108916,12 +128837,16 @@ strider2 - Strider 2 (USA 991213) + Strider 2 (Euro 991213) strider2a Strider 2 (Asia 991213) + + strider2u + Strider 2 (USA 991213) + striderj Strider Hiryu (Japan) @@ -108934,6 +128859,22 @@ striderua Strider (USA, B-Board 89624B-3) + + strideruc + Strider (USA, B-Board 90629B-3, buggy Street Fighter II conversion) + + + stridr2a + Strider 2 (ASIA 991213) + + + stridrja + Strider Hiryu (Japan set 2) + + + stridrua + Strider (US set 2) + strik_l4 Strike Master (L-4) @@ -108950,9 +128891,17 @@ strikext Striker Xtreme (1.02) + + strikext_100 + Striker Xtreme (1.00) + striv - Super Triv + Super Triv (English questions) + + + strivf + Super Triv (French questions) strkfgtr @@ -108970,13 +128919,21 @@ strknew Striker Xtreme (ARM7 Sound Board) + + strkzn + Strike Zone (Purple Star) + strkzone Strike Zone Baseball strlink - Strong Link (Russia) (Extrema) + Strong Link (Ukraine, V. 43.48) + + + strlinka + Strong Link (Ukraine, V. 43.45) strlt_l1 @@ -108984,7 +128941,15 @@ strngsci - Strange Science + Strange Science (Rev C) + + + strngscia + Strange Science (Rev A) + + + strngscig + Strange Science (German, Rev A) strnskil @@ -108998,13 +128963,21 @@ strsphnx Star's Phoenix (Italian speech) + + strsphnxf + Star's Phoenix (French speech) + strtdriv Street Drivin' (prototype) strtheat - Street Heat + Street Heat (set 1, newer?) + + + strtheata + Street Heat (set 2, older?) strvmstr @@ -109012,23 +128985,27 @@ strxt_fr - Striker Xtreme (France) + Striker Xtreme (1.02 France) strxt_gr - Striker Xtreme (Germany) + Striker Xtreme (1.03 Germany) strxt_it - Striker Xtreme (Italy) + Striker Xtreme (1.02 Italy) + + + strxt_it_101 + Striker Xtreme (1.01 Italy) strxt_sp - Striker Xtreme (Spain) + Striker Xtreme (1.02 Spain) strxt_uk - Striker Xtreme (UK) + Striker Xtreme (1.01 UK) sttng_g7 @@ -109042,14 +129019,30 @@ sttng_l2 Star Trek: The Next Generation (LX-2) + + sttng_l3 + Star Trek: The Next Generation (LX-3) + + + sttng_l5 + Star Trek: The Next Generation (LX-5) + sttng_l7 Star Trek: The Next Generation (LX-7) + + sttng_p4 + Star Trek: The Next Generation (P-4) + sttng_p5 Star Trek: The Next Generation (P-5) + + sttng_p8 + Star Trek: The Next Generation (P-8) + sttng_s7 Star Trek: The Next Generation (LX-7) SP1 @@ -109058,6 +129051,14 @@ sttng_x7 Star Trek: The Next Generation (LX-7 Special) + + stunrn2e + S.T.U.N. Runner (rev 2, Europe) + + + stunrn3e + S.T.U.N. Runner (rev 3, Europe) + stunrun S.T.U.N. Runner (rev 6) @@ -109107,36 +129108,52 @@ Stunt Air - stvbios - ST-V Bios + stuntcyc + Stunt Cycle [TTL] + + + stwr_101 + Star Wars (USA 1.01, display A1.02) + + + stwr_101g + Star Wars (German 1.01, display G1.02) stwr_102 - Star Wars (1.02) + Star Wars (USA 1.02, display A1.05) + + + stwr_102e + Star Wars (England 1.02, display A1.05) stwr_103 - Star Wars (1.03) + Star Wars (USA 1.03, display A1.05) - stwr_a14 - Star Wars (Display Rev.1.04) + stwr_103_a104 + Star Wars (USA 1.03, display A1.04) - stwr_e12 - Star Wars (1.02 England) + stwr_104 + Star Wars (USA 1.04, display A1.05) - stwr_g11 - Star Wars (1.01 Germany) + stwr_106 + Star Wars (Unofficial 1.06, display A1.05) - styphp - Stunt Typhoon Plus + stwr_106_a046 + Star Wars (Unofficial 1.06, display A0.46) + + + stwr_106_s105 + Star Wars (Unofficial 1.06, display S1.05) - su2000 - SU2000 + styphp + Stunt Typhoon Plus (Ver 2.04 J) sub @@ -109144,7 +129161,11 @@ subhunt - Sub Hunter + Sub Hunter (Gremlin / Taito) + + + subhuntr + Sub Hunter (Model Racing) submar @@ -109162,14 +129183,26 @@ sucasino Super Casino + + suchie2 + Idol Janshi Suchie-Pai II (ver 1.1) + + + suchie2o + Idol Janshi Suchie-Pai II (ver 1.0) + suchie3 - Idol Janshi Suchie-Pai 3 (JPN) + Idol Janshi Suchie-Pai 3 (Japan) - suchipi + suchiesp Idol Janshi Suchie-Pai Special (Japan) + + suhosong + Su Ho Seong + suikoenb Suiko Enbu / Outlaws of the Lost Dynasty (JUETL 950314 V2.001) @@ -109180,7 +129213,11 @@ sultanw - Sultan's Wish (Konami Endeavour) + Sultan's Wish (Konami Endeavour, Russia) + + + sumospin + Sumo Spins (0200606V, NSW/ACT) sunaq @@ -109190,6 +129227,26 @@ sundance Sundance + + sunmonbb + Sun & Moon - Bank Buster (0153028, US) + + + sunmoon + Sun & Moon (0251303, US) + + + sunmoona + Sun & Moon (0151303, US) + + + sunqndol + Sun Queen - Dollar Storm (0451327, US) + + + sunsetbl + Sunset Riders (bootleg 4 Players ver. ADD) + supbtime Super Burger Time (World, set 1) @@ -109202,6 +129259,10 @@ supbtimej Super Burger Time (Japan) + + supbtimj + Super Burger Time (Japan) + supcrash Super Crash (bootleg of Head On) @@ -109218,14 +129279,34 @@ supdrapob Super Draw Poker (bootleg) + + supduck + Super Duck + super21 Super Twenty One + + super21p + Super 21 + + + super7 + Super Seven + super9 Super Nove (Playmark) + + super972 + Super 97-2 (Witch Bonus) + + + super98 + Super 98 (3-hands, ICP-1) + superabc Super ABC (Pac-Man multigame kit, Sep. 03 1999) @@ -109234,6 +129315,10 @@ superabco Super ABC (Pac-Man multigame kit, Mar. 08 1999) + + superb2k + Super Butterfly 2000 + superbar Super Bar @@ -109266,6 +129351,10 @@ superchsp Super Chase - Criminal Termination (1992/10/26 20:24:29 CHASE 3 VER 1.1, prototype) + + superchsp2 + Super Chase - Criminal Termination (1992/01/18 18:29:18 CHASE 3 VER 1.3O, prototype) + superchsu Super Chase - Criminal Termination (US) @@ -109300,12 +129389,16 @@ superg - Super Galaxians (galaxiana hack) + Super Galaxians ('Galaxian (Namco set 2)' hack) supergm3 Super Game III + + supergs + Super Galaxians (Silver Systems) + supergx Super GX @@ -109338,9 +129431,17 @@ superpacm Super Pac-Man (Midway) + + superpcm + Super Pac-Man (Midway) + + + superqix + Super Qix + superspy - The Super Spy (NGM-011)(NGH-011) + The Super Spy (NGM-011 ~ NGH-011) superten @@ -109350,6 +129451,10 @@ supertnk Super Tank + + supertr + Super Triv Quiz I + supertr2 Super Triv II @@ -109363,12416 +129468,12034 @@ Super Wing - superx - Super-X (NTC) - - - superxm - Super-X (Mitchell) - - - supjolly - Super Jolly - - - suplup - Super Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 4.0 / 990518) - - - supmodel - Super Model - - - supnudg2 - Super Nudger II - P173 (Version 5.21) - - - suprball - Super Ball (Version 1.3) - - - suprbowl - Super Bowl - - - suprglob - Super Glob - - - suprgolf - Super Crowns Golf (Japan) - - - suprheli - Super Heli (Super Cobra bootleg) - - - suprleag - Super League (FD1094 317-0045) - - - suprloco - Super Locomotive (Rev.A) - - - suprlocoo - Super Locomotive - - - suprmatk - Super Missile Attack (for rev 1) - - - suprmatkd - Super Missile Attack (not encrypted) - - - suprmous - Super Mouse - - - suprmrio - Vs. Super Mario Bros. (set SM4-4 E) - - - suprmrioa - Vs. Super Mario Bros. (set ?, harder) - - - suprmriobl - Vs. Super Mario Bros. (bootleg with Z80, set 1) - - - suprmriobl2 - Vs. Super Mario Bros. (bootleg with Z80, set 2) - - - suprnova - Super Nova - - - suprpick - Super Picker - - - suprpokr - Super Poker (Version 10.19S) - - - suprpokra - Super Poker (Version 10.15S) - - - suprpokrb - Super Poker (Version 10.10) - - - suprpool - Super Pool (9743 rev.01) - - - suprridr - Super Rider - - - suprslam - From TV Animation Slam Dunk - Super Slams - - - suprstar - Super Stars - - - suprtrio - Super Trio - - - supxevs - Vs. Super Xevious - - - suratk - Surprise Attack (World ver. K) - - - suratka - Surprise Attack (Asia ver. L) - - - suratkj - Surprise Attack (Japan ver. M) - - - sureshop - Sure Shot (Pinball) - - - sureshot - Sure Shot - - - surfnsaf - Surf'n Safari - - - surfplnt - Surf Planet (Version 4.1) - - - surfplnt40 - Surf Planet (Version 4.0) - - - survarts - Survival Arts (World) - - - survartsj - Survival Arts (Japan) - - - survartsu - Survival Arts (USA) - - - survival - Survival - - - susume - Susume! Taisen Puzzle-Dama (GV027 Japan 1.20) - - - sutapper - Tapper (Suntory) - - - suzuk8h2 - Suzuka 8 Hours 2 (World, Rev B) - - - suzuk8h2j - Suzuka 8 Hours 2 (Japan, Rev B) - - - suzuka8h - Suzuka 8 Hours (World, Rev C) - - - suzuka8hj - Suzuka 8 Hours (Japan, Rev B) - - - suzume - Watashiha Suzumechan (Japan) - - - svc - SNK vs. Capcom - SVC Chaos (NGM-2690)(NGH-2690) - - - svcboot - SNK vs. Capcom - SVC Chaos (bootleg) - - - svcpcb - SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 1) - - - svcpcba - SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 2) - - - svcplus - SNK vs. Capcom - SVC Chaos Plus (bootleg set 1) - - - svcplusa - SNK vs. Capcom - SVC Chaos Plus (bootleg set 2) - - - svcsplus - SNK vs. Capcom - SVC Chaos Super Plus (bootleg) - - - svf - Super Visual Football: European Sega Cup - - - svg - S.V.G. - Spectral vs Generation (M68k label V200) (ARM label V200, ROM 10/11/05 S.V.G V201) - - - svgpcb - S.V.G. - Spectral vs Generation (M68k label V100JP) (ARM label V100JP ROM 05/12/05 S.V.G V100) (Japan, JAMMA PCB) - - - svolley - Super Volleyball (Japan) - - - svolleybl - Super Volleyball (bootleg) - - - svolleyk - Super Volleyball (Korea) - - - svolleyu - Super Volleyball (US) - - - svolly91 - Super Volley '91 (Japan) - - - svs - Super Visual Soccer: Sega Cup (US) - - - swa - Star Wars Arcade - - - swarm - Swarm (bootleg?) - - - swat - SWAT (315-5048) - - - swatpolc - SWAT Police - - - swcourt - Super World Court (World) - - - swcourtj - Super World Court (Japan) - - - swe1pb - Pinball 2000: Star Wars Episode 1 - - - sweetgal - Sweet Gal (Japan 850510 SWG 1-02) - - - sweetl - Sweet Life (041220 World) - - - sweetl2 - Sweet Life 2 (071217 Russia) - - - sweetl2_2 - Sweet Life 2 (080320 World) - - - sweetl2_2a - Sweet Life 2 (bootleg, 080320, banking address hack set 1) - - - sweetl2_2b - Sweet Life 2 (bootleg, 080320, banking address hack set 2) - - - sweetl2_2c - Sweet Life 2 (bootleg, 080320, VIDEO GAME-1 MD01) - - - sweetl2_2d - Sweet Life 2 (bootleg, 080320, LOTTOGAME (I)) - - - sweetl2_3 - Sweet Life 2 (090525 Lottery) - - - sweetl2_4 - Sweet Life 2 (090812 Entertainment) - - - sweetl_2 - Sweet Life (070412 Russia) - - - sweetla - Sweet Life (bootleg, 041220, backdoor) - - - sweetlb - Sweet Life (bootleg, 041220, banking address hack, changed version text) - - - swimmer - Swimmer (set 1) - - - swimmera - Swimmer (set 2) - - - swimmerb - Swimmer (set 3) - - - swingin - Swingin In The Green (Russia) - - - swisspkr - Swiss Poker ('50 SG-.10', V2.5) - - - swrds_l2 - Swords of Fury (L-2) - - - sws - Super World Stadium (Japan) - - - sws2000 - Super World Stadium 2000 (Japan, SS01/VER.A) - - - sws2001 - Super World Stadium 2001 (Japan, SS11/VER.A) - - - sws92 - Super World Stadium '92 (Japan) - - - sws92g - Super World Stadium '92 Gekitouban (Japan) - - - sws93 - Super World Stadium '93 (Japan) - - - sws95 - Super World Stadium '95 (Japan) + superx + Super-X (NTC) - sws96 - Super World Stadium '96 (Japan) + superxm + Super-X (Mitchell) - sws97 - Super World Stadium '97 (Japan) + supgoal + Nerae! Super Goal (J 981218 V1.000) - sws98 - Super World Stadium '98 (Japan, SS81/VER.A) + supinvsion + Super Invasion (Electromar, Spanish) - sws99 - Super World Stadium '99 (Japan, SS91/VER.A3) + supjolly + Super Jolly - swthrt2v - Sweet Hearts II (01J01986, Venezuela) + suplup + Super Lup Lup Puzzle / Zhuan Zhuan Puzzle (version 4.0 / 990518) - swtht2nz - Sweet Hearts II (1VXFC5461, New Zealand) + supmodel + Super Model - swtril41 - Star Wars Trilogy (4.01) + supmodl2 + Super Model II - swtril43 - Star Wars Trilogy (4.03) + supnudg2 + Super Nudger II - P173 (Version 5.21) - swtrilgy - Star Wars Trilogy (Revision A) + suprball + Super Ball (Version 1.3) - swtrilgya - Star Wars Trilogy + suprbowl + Super Bowl - sxevious - Super Xevious + suprglob + Super Glob - sxeviousj - Super Xevious (Japan) + suprgolf + Super Crowns Golf (World) - sxyreac2 - Pachinko Sexy Reaction 2 (Japan) + suprgolfj + Super Crowns Golf (Japan) - sxyreact - Pachinko Sexy Reaction (Japan) + suprheli + Super Heli (Super Cobra bootleg) - sys1test - System 1 Test prom + suprleag + Super League (FD1094 317-0045) - sys246 - System 246 BIOS + suprloco + Super Locomotive (Rev.A) - sys256 - System 256 BIOS + suprlocoo + Super Locomotive - sys573 - System 573 BIOS + suprmatk + Super Missile Attack (for rev 1) - syvalion - Syvalion (Japan) + suprmatkd + Super Missile Attack (not encrypted) - syvalionp - Syvalion (World, prototype) + suprmous + Super Mouse - szaxxon - Super Zaxxon (315-5013) + suprmrio + Vs. Super Mario Bros. (set SM4-4 E) - szone_l2 - Strike Zone (Shuffle) (L-2) + suprmrioa + Vs. Super Mario Bros. (set ?, harder) - szone_l5 - Strike Zone (Shuffle) (L-5) + suprmriobl + Vs. Super Mario Bros. (bootleg with Z80, set 1) - t2_l2 - Terminator 2: Judgment Day (L-2) + suprmriobl2 + Vs. Super Mario Bros. (bootleg with Z80, set 2) - t2_l3 - Terminator 2: Judgment Day (L-3) + suprnova + Super Nova (Game Plan) - t2_l4 - Terminator 2: Judgment Day (L-4) + suprpick + Super Picker - t2_l6 - Terminator 2: Judgment Day (L-6) + suprpokr + Super Poker (Version 10.19S) - t2_l8 - Terminator 2: Judgment Day (L-8) + suprpokra + Super Poker (Version 10.15S) - t2_p2f - Terminator 2: Judgment Day (P-2F) Profanity + suprpokrb + Super Poker (Version 10.10) - t3new - Terminator 3: Rise of the Machines (ARM7 Sound Board) + suprpool + Super Pool (ver. 1.2) - tacscan - Tac/Scan + suprridr + Super Rider - tactcian - Tactician (set 1) + suprslam + From TV Animation Slam Dunk - Super Slams - tactcian2 - Tactician (set 2) + suprstar + Super Stars - taf_h4 - The Addams Family (H-4) + suprtrio + Super Trio - taf_l1 - The Addams Family (L-1) + supstarf + Super Star (Recreativos Franco) - taf_l2 - The Addams Family (L-2) + supxevs + Vs. Super Xevious - taf_l3 - The Addams Family (L-3) + suratk + Surprise Attack (World ver. K) - taf_l4 - The Addams Family (L-4) + suratka + Surprise Attack (Asia ver. L) - taf_l5 - The Addams Family (L-5) + suratkj + Surprise Attack (Japan ver. M) - taf_l6 - The Addams Family (L-6) + sureshop + Sure Shot (Pinball) - taf_l7 - The Addams Family (Prototype L-5) (L-7) + sureshot + Sure Shot - taf_p2 - The Addams Family (Prototype) (P-2) + surfnsaf + Surf'n Safari - tafg_h3 - The Addams Family Special Collectors Edition (H-3) + surfplnt + Surf Planet (Version 4.1) - tafg_la2 - The Addams Family Special Collectors Edition (LA-2) + surfplnt30 + Surf Planet (Version 3.0) - tafg_la3 - The Addams Family Special Collectors Edition (LA-3) + surfplnt40 + Surf Planet (Version 4.0) - tafg_lx3 - The Addams Family Special Collectors Edition Gold (LX-3) + surpr5 + Surprise 5 (Ver. 1.19) - tagteam - Tag Team Wrestling + surpratk + Surprise Attack (Japan ver. M) - tagteamp - Tag-Team Wrestling + survarts + Survival Arts (World) - tagteamp2 - Tag-Team Wrestling (rev.2) + survartsj + Survival Arts (Japan) - taiko10 - Taiko No Tatsujin 10 (T101001-NA-A) + survartsu + Survival Arts (USA) - taiko9 - Taiko No Tatsujin 9 (TK91001-NA-A) + survival + Survival - tail2nos - Tail to Nose - Great Championship + susanita + Susanita - tailg - Tailgunner + sushibar + Sushi Bar / Toretore! Sushi - taitest - Taito Test Fixture + sushimar + Itazura Daisuki! Sushimaru Kun - taitofx1 - Taito FX1 + susume + Susume! Taisen Puzzle-Dama (GV027 Japan 1.20) - taitogn - Taito GNET + sutapper + Tapper (Suntory) - taitotz - Type Zero BIOS + suzuk8h2 + Suzuka 8 Hours 2 (World, Rev B) - taiwanmb - Taiwan Mahjong [BET] (Japan 881208) + suzuk8h2j + Suzuka 8 Hours 2 (Japan, Rev B) - tajmah - Tajmahal (Russia) (Atronic) + suzuk8hj + Suzuka 8 Hours (Japan) - take5 - Take 5 [TTL] + suzuka8h + Suzuka 8 Hours (World, Rev C) - takefive - Take Five + suzuka8hj + Suzuka 8 Hours (Japan, Rev B) - takoron - Noukone Puzzle Takoron (GDL-0042) + suzume + Watashiha Suzumechan (Japan) - talbot - Talbot + svc + SNK vs. Capcom - SVC Chaos (NGM-2690 ~ NGH-2690) - tangtang - Tang Tang (ver. 0526, 26/05/2000) + svcboot + SNK vs. Capcom - SVC Chaos (bootleg) - tank - Tank/Tank II [TTL] + svcpcb + SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 1) - tank8 - Tank 8 (set 1) + svcpcba + SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 2) - tank8a - Tank 8 (set 2) + svcplus + SNK vs. Capcom - SVC Chaos Plus (bootleg set 1) - tank8b - Tank 8 (set 3) + svcplusa + SNK vs. Capcom - SVC Chaos Plus (bootleg set 2) - tank8c - Tank 8 (set 4) + svcsplus + SNK vs. Capcom - SVC Chaos Super Plus (bootleg) - tank8d - Tank 8 (set 5) + svf + Super Visual Football: European Sega Cup (Rev A) - tankbatl - Tank Battle (prototype rev. 4/21/92) + svfo + Super Visual Football: European Sega Cup - tankbatt - Tank Battalion + svg + S.V.G. - Spectral vs Generation / Sheng Mo Shiji (M68k label V200) (ARM label V200, ROM 10/11/05 S.V.G V201) - tankbattb - Tank Battalion (bootleg) + svghk + S.V.G. - Spectral vs Generation / Sheng Mo Shiji (M68k label V101HK) (ARM label V101HK, ROM 06/20/05 S.V.G V100) - tankbust - Tank Busters + svgpcb + S.V.G. - Spectral vs Generation / Sheng Mo Shiji (M68k label V100JP) (ARM label V100JP, ROM 05/12/05 S.V.G V100) (Japan, JAMMA PCB) - tankfrce - Tank Force (US, 2 Player) + svgtw + S.V.G. - Spectral vs Generation / Sheng Mo Shiji (M68k label V101TW) (ARM label V101TW, ROM 06/20/05 S.V.G V100) - tankfrce4 - Tank Force (US, 4 Player) + svolley + Super Volleyball (Japan) - tankfrcej - Tank Force (Japan) + svolleybl + Super Volleyball (bootleg) - tantr - Puzzle & Action: Tant-R (Japan) + svolleyk + Super Volleyball (Korea) - tantrbl - Puzzle & Action: Tant-R (Japan) (bootleg set 1) + svolleyu + Super Volleyball (US) - tantrbl2 - Puzzle & Action: Tant-R (Japan) (bootleg set 2) + svolly91 + Super Volley '91 (Japan) - tantrbl3 - Puzzle & Action: Tant-R (Japan) (bootleg set 3) + svs + Super Visual Soccer: Sega Cup (US, Rev A) - tantrkor - Puzzle & Action: Tant-R (Korea) + swa + Star Wars Arcade (US) - taotaido - Tao Taido (set 1) + swaj + Star Wars Arcade (Japan) - taotaidoa - Tao Taido (set 2) + swarm + Swarm (bootleg?) - tapatune - Tap a Tune + swat + SWAT (315-5048) - tapper - Tapper (Budweiser, set 1) + swatpolc + SWAT Police - tappera - Tapper (Budweiser, set 2) + swcourt + Super World Court (World) - targ - Targ + swcourtb + Super World Court (World, bootleg) - targc - Targ (cocktail?) + swcourtj + Super World Court (Japan) - targeth - Target Hits (ver 1.1) + swe1pb + Pinball 2000: Star Wars Episode 1 - targetha - Target Hits (ver 1.0) + sweetgal + Sweet Gal (Japan 850510 SWG 1-02) - tarzan - Tarzan (V109C) + sweetl + Sweet Life (041220 World) - tarzana - Tarzan (V107) + sweetl2 + Sweet Life 2 (071217 Russia) - tattack - Time Attacker + sweetl2_10 + Sweet Life 2 (110311 Entertainment B) - tattass - Tattoo Assassins (US prototype) + sweetl2_11 + Sweet Life 2 (140526 Entertainment B) - tattassa - Tattoo Assassins (Asia prototype) + sweetl2_12 + Sweet Life 2 (110411 Entertainment C) - taurs_l1 - Taurus (Shuffle) (L-1) + sweetl2_2 + Sweet Life 2 (080320 World) - taxi_l3 - Taxi (Marilyn) (L-3) + sweetl2_2a + Sweet Life 2 (bootleg, 080320, banking address hack set 1) - taxi_l4 - Taxi (Lola) (L-4) + sweetl2_2b + Sweet Life 2 (bootleg, 080320, banking address hack set 2) - taxi_lg1 - Taxi (Marilyn) (L-1) Germany + sweetl2_2c + Sweet Life 2 (bootleg, 080320, VIDEO GAME-1 MD01) - taxidriv - Taxi Driver + sweetl2_2d + Sweet Life 2 (bootleg, 080320, LOTTOGAME (I)) - tazmani2 - Tazz-Mania (set 2, alt hardware) + sweetl2_3 + Sweet Life 2 (090525 Lottery) - tazmania - Tazz-Mania (set 1) + sweetl2_4 + Sweet Life 2 (090812 Entertainment) - tazzmang - Tazz-Mania (bootleg on Galaxian hardware) + sweetl2_5 + Sweet Life 2 (100408 Entertainment X) - tblkkuzu - The Block Kuzushi (Japan) + sweetl2_6 + Sweet Life 2 (101209 Entertainment N) - tbowl - Tecmo Bowl (World) + sweetl2_7 + Sweet Life 2 (110111 Entertainment A) - tbowlj - Tecmo Bowl (Japan) + sweetl2_8 + Sweet Life 2 (110124 Entertainment A) - tbowlp - Tecmo Bowl (World, prototype?) + sweetl2_9 + Sweet Life 2 (110204 Entertainment A) - tbyahhoo - Twin Bee Yahhoo! (ver JAA) + sweetl_2 + Sweet Life (070412 Russia) - tceptor - Thunder Ceptor + sweetl_3 + Sweet Life (090720 Entertainment) - tceptor2 - Thunder Ceptor II + sweetla + Sweet Life (bootleg, 041220, backdoor) - tcl - Taiwan Chess Legend + sweetlb + Sweet Life (bootleg, 041220, banking address hack, changed version text) - tcobra2 - Twin Cobra II (Ver 2.1O 1995/11/30) + sweetlnd + Sweet Land - tcobra2u - Twin Cobra II (Ver 2.1A 1995/11/30) + swh2ld + Sweethearts II - Lucky Devil (10119811, NSW/ACT) - tdawg_l1 - Top Dawg (Shuffle) (L-1) + swhr2 + Sweethearts II (0200465V, NSW/ACT) - tdfever - TouchDown Fever (US) + swhr2a + Sweethearts II (0200004V, NSW/ACT) - tdfever2 - TouchDown Fever 2 + swhr2a6 + Sweethearts II (0151183, US) - tdfeverj - TouchDown Fever (Japan) + swhr2u + Sweethearts II (PHG0742-02, US) - tdoboon - Taihou de Doboon + swhr2v + Sweethearts II (01J01986, Venezuela) - tdpgal - Triple Draw Poker + swimmer + Swimmer (set 1) - tdragon - Thunder Dragon (9th Jan. 1992) + swimmera + Swimmer (set 2) - tdragon1 - Thunder Dragon (4th Jun. 1991) + swimmerb + Swimmer (set 3) - tdragon2 - Thunder Dragon 2 (9th Nov. 1993) + swinggal + Swing Gal [BET] (Japan 871221) - tdragon2a - Thunder Dragon 2 (1st Oct. 1993) + swingin + Swingin In The Green (Russian) - tdragonb - Thunder Dragon (bootleg) + swipeout + Space Wipeout - tduno - Touch de Uno! / Unou Nouryoku Check Machine + swisspkr + Swiss Poker ('50 SG-.10', V2.5) - tduno2 - Touch de Uno! 2 + swracer + Star Wars: Racer Arcade - te0144 - Puzzle Bobble (Italian Gambling Game) + swrds_l1 + Swords of Fury (L-1) - teamqb - John Elway's Team Quarterback (set 1) + swrds_l2 + Swords of Fury (L-2) - teamqb2 - John Elway's Team Quarterback (set 2) + sws + Super World Stadium (Japan) - techbowl - Technical Bowling (J 971212 V1.000) + sws2000 + Super World Stadium 2000 (Japan, SS01/VER.A) - techromn - Tech Romancer (Euro 980914) + sws2001 + Super World Stadium 2001 (Japan, SS11/VER.A) - techromnu - Tech Romancer (USA 980914) + sws92 + Super World Stadium '92 (Japan) - tecmowcm - Tecmo World Cup Millennium (Japan) + sws92g + Super World Stadium '92 Gekitouban (Japan) - teddybb - TeddyBoy Blues (315-5115, New Ver.) + sws93 + Super World Stadium '93 (Japan) - teddybbo - TeddyBoy Blues (315-5115, Old Ver.) + sws95 + Super World Stadium '95 (Japan) - teddybbobl - TeddyBoy Blues (Old Ver. bootleg) + sws96 + Super World Stadium '96 (Japan) - teedoff - Tee'd Off (Japan) + sws97 + Super World Stadium '97 (Japan) - teedoffp - Tee'd Off + sws98 + Super World Stadium '98 (Japan, SS81/VER.A) - teedoffp1 - Tee'd Off (rev.1) + sws99 + Super World Stadium '99 (Japan, SS91/VER.A3) - teedoffp3 - Tee'd Off (rev.3) + swtht2nz + Sweethearts II (1VXFC5461, New Zealand) - teetert - Teeter Torture (prototype) + swtril41 + Star Wars Trilogy (4.01) - tehkanwc - Tehkan World Cup (set 1) + swtril43 + Star Wars Trilogy (4.03) - tehkanwcb - Tehkan World Cup (set 2, bootleg?) + swtrilgy + Star Wars Trilogy Arcade (Export, Revision A) - tehkanwcc - Tehkan World Cup (set 3, bootleg) + swtrilgya + Star Wars Trilogy Arcade (Export) - tekipaki - Teki Paki + swtrilgyp + Star Wars Trilogy Arcade (location test, 16.09.98) - tekken - Tekken (World, TE4/VER.C) + sxevious + Super Xevious - tekken2 - Tekken 2 Ver.B (US, TES3/VER.D) + sxeviousj + Super Xevious (Japan) - tekken2aa - Tekken 2 (Asia, TES2/VER.A) + sxyreac2 + Pachinko Sexy Reaction 2 (Japan) - tekken2ab - Tekken 2 Ver.B (Asia, TES2/VER.B) + sxyreact + Pachinko Sexy Reaction (Japan) - tekken2jb - Tekken 2 Ver.B (Japan, TES1/VER.B) + sys1test + System 1 Test prom - tekken2jc - Tekken 2 Ver.B (Japan, TES1/VER.C) + syscheck + Neo System Check (ver 1.0b) - tekken2ub - Tekken 2 Ver.B (US, TES3/VER.B) + syvalion + Syvalion (Japan) - tekken3 - Tekken 3 (Japan, TET1/VER.E1) + syvalionp + Syvalion (World, prototype) - tekken3aa - Tekken 3 (Asia, TET2/VER.A) + syvalionu + Syvalion (US, PS2 Taito Legends 2) - tekken3ab - Tekken 3 (Asia, TET2/VER.B) + syvalionw + Syvalion (World, PS2 Taito Legends 2) - tekken3ae - Tekken 3 (Asia, TET2/VER.E1) + szaxxon + Super Zaxxon (315-5013) - tekken3ja - Tekken 3 (Japan, TET1/VER.A) + szone_l2 + Strike Zone (Shuffle) (L-2) - tekken3ua - Tekken 3 (US, TET3/VER.A) + szone_l5 + Strike Zone (Shuffle) (L-5) - tekken3ud - Tekken 3 (US, TET3/VER.D) + t2_l2 + Terminator 2: Judgment Day (L-2) - tekken4 - Tekken 4 (TEF3 Ver. C) + t2_l3 + Terminator 2: Judgment Day (L-3) - tekken4a - Tekken 4 (TEF2 Ver. A) + t2_l4 + Terminator 2: Judgment Day (L-4) - tekken4b - Tekken 4 (TEF1 Ver. A) + t2_l6 + Terminator 2: Judgment Day (L-6) - tekken4c - Tekken 4 (TEF1 Ver. C) + t2_l8 + Terminator 2: Judgment Day (L-8) - tekken51 - Tekken 5.1 (TE51 Ver. B) + t2_p2f + Terminator 2: Judgment Day (P-2F) Profanity - tekkenab - Tekken (Asia, TE2/VER.B) + t3new + Terminator 3: Rise of the Machines (ARM7 Sound Board) - tekkenac - Tekken (Asia, TE2/VER.C) + tabpkr + Royal Poker V 1.85 - tekkenjb - Tekken (Japan, TE1/VER.B) + tacscan + Tac/Scan - tektagt - Tekken Tag Tournament (US, TEG3/VER.C1) + tactcan2 + Tactician (set 2) - tektagtac - Tekken Tag Tournament (Asia, TEG2/VER.C1, set 1) + tactcian + Tactician (set 1) - tektagtac1 - Tekken Tag Tournament (Asia, TEG2/VER.C1, set 2) + tactcian2 + Tactician (set 2) - tektagtja - Tekken Tag Tournament (Japan, TEG1/VER.A3) + taf_h4 + The Addams Family (H-4) - tektagtjb - Tekken Tag Tournament (Japan, TEG1/VER.B) + taf_l1 + The Addams Family (L-1) - tektagtjc1 - Tekken Tag Tournament (Japan, TEG1/VER.C1) + taf_l2 + The Addams Family (L-2) - tektagtub - Tekken Tag Tournament (US, TEG3/VER.B) + taf_l3 + The Addams Family (L-3) - teljan - Tel Jan + taf_l4 + The Addams Family (L-4) - telmahjn - Telephone Mahjong (Japan 890111) + taf_l5 + The Addams Family (L-5) - tempest - Tempest (rev 3, Revised Hardware) + taf_l6 + The Addams Family (L-6) - tempest1 - Tempest (rev 1) + taf_l7 + The Addams Family (Prototype L-5) (L-7) - tempest1r - Tempest (rev 1, Revised Hardware) + taf_p2 + The Addams Family (Prototype) (P-2) - tempest2 - Tempest (rev 2) + tafg_h3 + The Addams Family Special Collectors Edition (H-3) - tempest3 - Tempest (rev 3) + tafg_la2 + The Addams Family Special Collectors Edition (LA-2) - temptube - Tempest Tubes + tafg_la3 + The Addams Family Special Collectors Edition (LA-3) - tenballs - Ten Balls (Ver 1.05) + tafg_lx3 + The Addams Family Special Collectors Edition Gold (LX-3) - tengai - Tengai (World) + tagteam + Tag Team Wrestling - tengaij - Sengoku Blade: Sengoku Ace Episode II / Tengai + tagteamp + Tag-Team Wrestling - tenkai - Mahjong Tenkaigen + tagteamp2 + Tag-Team Wrestling (rev.2) - tenkai2b - Mahjong Tenkaigen Part 2 (bootleg) + tagteampg + Tag-Team Wrestling (German) - tenkaibb - Mahjong Tenkaigen (bootleg b) + tahitim + Tahiti Magic (10238911, NSW/ACT) - tenkaicb - Mahjong Tenkaigen (bootleg c) + tahjong + Tahjong Yakitori (ver. 2-1) - tenkaid - Mahjong Tenkaigen (set 1) + taiko10 + Taiko no Tatsujin 10 (T101001-NA-A) - tenkaie - Mahjong Tenkaigen (set 2) + taiko6 + Taiko no Tatsujin 6 (Japan, TK61 Ver.A) - tenkomor - Tenkomori Shooting (Asia, TKM2/VER.A1) + taiko7 + Taiko no Tatsujin 7 (TK71-NA-A) - tenkomorja - Tenkomori Shooting (Japan, TKM1/VER.A1) + taiko8 + Taiko no Tatsujin 8 (TK8100-1-NA-A) - tenpindx - Ten Pin Deluxe + taiko9 + Taiko no Tatsujin 9 (TK91001-NA-A) - tenspot - Ten Spot + tail2nos + Tail to Nose - Great Championship / Super Formula - tenthdeg - Tenth Degree (prototype) + tail2nosa + Tail to Nose - Great Championship - tenup - Ten Up (compendium 17) + tailg + Tailgunner - tenup3 - Ten Up (compendium 3) + taitest + Taito Test Fixture - terabrst - Teraburst (1998/07/17 ver UEL) + taiwanmb + Taiwan Mahjong [BET] (Japan 881208) - terabrsta - Teraburst (1998/02/25 ver AAA) + tajmah + Tajmahal (Russia) (Atronic) - term2 - Terminator 2 - Judgment Day (rev LA4 08/03/92) + take5 + Take 5 [TTL] - term2la1 - Terminator 2 - Judgment Day (rev LA1 11/01/91) + takefive + Take Five - term2la2 - Terminator 2 - Judgment Day (rev LA2 12/09/91) + takeoff + Take Off (bootleg of The End) - term2la3 - Terminator 2 - Judgment Day (rev LA3 03/27/92) + takoron + Noukone Puzzle Takoron (Japan) (GDL-0042) - term3 - Terminator 3: Rise of the Machines (4.00) + talbot + Talbot - term3_205 - Terminator 3: Rise of the Machines (2.05) + tangtang + Tang Tang (ver. 0526, 26/05/2000) - term3f - Terminator 3: Rise of the Machines (4.00 France) + tank + Tank/Tank Cocktail [TTL] - term3f_205 - Terminator 3: Rise of the Machines (2.05 France) + tank8 + Tank 8 (set 1) - term3g - Terminator 3: Rise of the Machines (4.00 Germany) + tank8a + Tank 8 (set 2) - term3i - Terminator 3: Rise of the Machines (4.00 Italy) + tank8b + Tank 8 (set 3) - term3i_205 - Terminator 3: Rise of the Machines (2.05 Italy) + tank8c + Tank 8 (set 4) - term3l - Terminator 3: Rise of the Machines (4.00 Spain) + tank8d + Tank 8 (set 5) - term3l_205 - Terminator 3: Rise of the Machines (2.05 Spain) + tankbatl + Tank Battle (prototype rev. 4/21/92) - terracre - Terra Cresta (YM3526 set 1) + tankbatt + Tank Battalion - terracrea - Terra Cresta (YM3526 set 3) + tankbattb + Tank Battalion (bootleg) - terracren - Terra Cresta (YM2203) + tankbust + Tank Busters - terracreo - Terra Cresta (YM3526 set 2) + tankfrce + Tank Force (US, 2 Players) - terraf - Terra Force + tankfrce4 + Tank Force (US, 4 Players) - terrafb - Terra Force (Japan bootleg set 2) + tankfrceb + Tank Force (bootleg) - terrafj - Terra Force (Japan) + tankfrcej + Tank Force (Japan) - terrafjb - Terra Force (Japan bootleg with additional Z80) + tankfrcj + Tank Force (Japan) - terrafu - Terra Force (US) + tankii + Tank II [TTL] - tesorone - Tesorone Dell'Isola (Italy, v2.41) + tantr + Puzzle & Action: Tant-R (Japan) - tesorone230 - Tesorone Dell'Isola (Italy, v2.30) + tantrbl + Puzzle & Action: Tant-R (Japan) (bootleg set 1) - tesorone240 - Tesorone Dell'Isola (Italy, v2.40) + tantrbl2 + Puzzle & Action: Tant-R (Japan) (bootleg set 2) - tetfight - Tetris Fighters + tantrbl3 + Puzzle & Action: Tant-R (Japan) (bootleg set 3) - tetkiwam - Tetris Kiwamemichi (GDL-0020) + tantrbl4 + Puzzle & Action: Tant-R (Japan) (bootleg set 4) - tetrbx - Tetris / Bloxeed (Korean System 16 bootleg) (ISG Selection Master Type 2006) + tantrkor + Puzzle & Action: Tant-R (Korea) - tetris - Tetris (set 4, Japan, System 16A, FD1094 317-0093) + taotaida + Tao Taido (set 2) - tetris1 - Tetris (set 1, Japan, System 16B, FD1094 317-0091) + taotaido + Tao Taido (2 button version) - tetris2 - Tetris (set 2, Japan, System 16B, FD1094 317-0092) + taotaido3 + Tao Taido (2/3 button version) - tetris3 - Tetris (set 3, Japan, System 16A, FD1094 317-0093a) + taotaidoa + Tao Taido (6 button version) - tetrisbl - Tetris (bootleg) + tapatune + Tap a Tune - tetriskr - Tetris (bootleg of Mirrorsoft PC-XT Tetris version) + tapper + Tapper (Budweiser, 1/27/84) - tetrisp - Tetris Plus + tappera + Tapper (Budweiser, 12/9/83) - tetrisp2 - Tetris Plus 2 (World) + tapperb + Tapper (Budweiser, 1/12/84) - tetrisp2j - Tetris Plus 2 (Japan, V2.2) + tapperg + Tapper (Budweiser, 1/27/84 - Alternate graphics) - tetrisp2ja - Tetris Plus 2 (Japan, V2.1) + targ + Targ - tetrisse - Tetris (Japan, System E) + targc + Targ (cocktail?) - tetrist - Tetris (Japan, Taito B-System, Nastar Conversion Kit) + targeth + Target Hits (ver 1.1, Checksum 5152) - tetrista - Tetris (Japan, Taito B-System, Master of Weapon Conversion Kit) + targeth10 + Target Hits (ver 1.0, Checksum FBCB) - tetristh - Tetris (Japan, Taito H-System) + targetha + Target Hits (ver 1.1, Checksum 86E1) - tetrsark - Tetris (D.R. Korea) + tarzan + Tarzan Chuang Tian Guan (V109C, set 2) - tf95_12 - WPC 95 Test Fixture (1.2) + tarzana + Tarzan (V107) - tfa_13 - WPC Test Fixture: Alphanumeric (1.3) + tarzanc + Tarzan Chuang Tian Guan (V109C, set 1) - tfdmd_l3 - WPC Test Fixture: DMD (L-3) + tatacot + Tatacot (JA 951128 V1.000) - tfight - Title Fight + tattack + Time Attacker - tfrceac - Thunder Force AC + tattass + Tattoo Assassins (US prototype, Mar 14 1995) - tfrceacb - Thunder Force AC (bootleg) + tattassa + Tattoo Assassins (Asia prototype, Mar 14 1995) - tfrceacj - Thunder Force AC (Japan) + taurs_l1 + Taurus (Shuffle) (L-1) - tfs_12 - WPC Test Fixture: Security (1.2) + taxi_l3 + Taxi (Marilyn) (L-3) - tftc_104 - Tales From the Crypt (1.04 Spain) + taxi_l4 + Taxi (Lola) (L-4) - tftc_200 - Tales From the Crypt (2.00) + taxi_lg1 + Taxi (Marilyn) (L-1) Germany - tftc_300 - Tales From the Crypt (3.00) + taxi_lu1 + Taxi (Marilyn) (LU-1) - tftc_302 - Tales From the Crypt (3.02 Dutch) + taxi_p5 + Taxi (P-5) - tftc_303 - Tales From the Crypt (3.03) + taxidriv + Taxi Driver - tfupdate - Triforce DIMM Updater (GDT-0011) + taxidrvr + Taxi Driver - tgm2 - Tetris the Absolute The Grand Master 2 + tazmani2 + Tazz-Mania (set 2, alt hardware) - tgm2p - Tetris the Absolute The Grand Master 2 Plus + tazmani3 + Tazz-Mania (Arfyc / Rodmar bootleg) - tgmj - Tetris The Grand Master (Japan 980710) + tazmania + Tazz-Mania (set 1) - tgtball - Target Ball (Nude) + tazmaniet + Tazz-Mania - El Trompa (U.R.V. BBCPE bootleg) - tgtballa - Target Ball + tazzmang + Tazz-Mania (bootleg on Galaxian hardware) - tgtpanic - Target Panic + tazzmang2 + Tazz-Mania (bootleg on Galaxian hardware with Starfield) - thaiprin - Thai Princess (30127721, Malaysia) + tbasebal + Taikyoku Base Ball - tharrier - Task Force Harrier + tbeastw2 + Transformers Beast Wars II - tharrieru - Task Force Harrier (US?) + tblkkuzu + The Block Kuzushi (Japan) - thayers - Thayer's Quest (set 1) + tbonusal + Treasure Bonus (American Alpha, Ver. 1.6) - thayersa - Thayer's Quest (set 2) + tbowl + Tecmo Bowl (World, set 1) - thedeep - The Deep (Japan) + tbowla + Tecmo Bowl (World, set 2) - thedrink - The Drink + tbowlj + Tecmo Bowl (Japan) - theend - The End + tbowlp + Tecmo Bowl (World, prototype?) - theendb - The End (bootleg?) + tbyahhoo + Twin Bee Yahhoo! (ver JAA) - theends - The End (Stern Electronics) + tceptor + Thunder Ceptor - thegames - The Games + tceptor2 + 3-D Thunder Ceptor II - theglad - The Gladiator / Road of the Sword / Shen Jian (M68k label V101) (ARM label V107, ROM 06/06/03 SHEN JIAN V107) + tcfboxa + Triforce Firmware Update For Compact Flash Box (4.01) (GDT-0022A) - theglad100 - The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 01/16/03 SHEN JIAN) + tcl + Taiwan Chess Legend - theglad101 - The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V101, ROM 03/13/03 SHEN JIAN) + tcobra2 + Twin Cobra II (Ver 2.1O 1995/11/30) - thegladpcb - The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 02/25/03 SHEN JIAN) (Japan, JAMMA PCB) + tcobra2u + Twin Cobra II (Ver 2.1A 1995/11/30) - theglob - The Glob + tdawg_l1 + Top Dawg (Shuffle) (L-1) - theglob2 - The Glob (earlier) + tdbingo + Trio de Bingo - theglob3 - The Glob (set 3) + tdfever + TouchDown Fever (US) - theglobp - The Glob (Pac-Man hardware) + tdfever2 + TouchDown Fever 2 - thegrid - The Grid (version 1.2) + tdfever2b + TouchDown Fever 2 (bootleg) - thegrida - The Grid (version 1.1) + tdfeverj + TouchDown Fever (Japan) - thehand - The Hand + tdoboon + Taihou de Doboon - thehustl - The Hustler (Japan, program code M) + tdpgal + Triple Draw Poker - thehustlj - The Hustler (Japan, program code J) + tdragon + Thunder Dragon (8th Jan. 1992, unprotected) - themj - The Mah-jong (Japan) + tdragon1 + Thunder Dragon (4th Jun. 1991, protected) - thenanpa - The Nanpa (Japan) + tdragon2 + Thunder Dragon 2 (9th Nov. 1993) - thepit - The Pit + tdragon2a + Thunder Dragon 2 (1st Oct. 1993) - thepitj - The Pit (Japan) + tdragon3h + Thunder Dragon 3 (bootleg of Thunder Dragon 2) - thepitm - The Pit (bootleg on Moon Quasar hardware) + tdragonb + Thunder Dragon (bootleg, set 1) - thepitu1 - The Pit (US set 1) + tdragonb2 + Thunder Dragon (bootleg, set 2) - thepitu2 - The Pit (US set 2) + tduno + Touch de Uno! / Unou Nouryoku Check Machine (Japan) - theroes - Thunder Heroes + tduno2 + Touch de Uno! 2 (Japan) - thetogyu - The Togyu (315-5065, Japan) + te0144 + Puzzle Bobble (Italian gambling game) - thief - Thief + teamht + Team Hat Trick - thndblst - Thunder Blaster (Japan) + teamqb + John Elway's Team Quarterback (rev 3) - thndbolt - Thunderbolt + teamqb2 + John Elway's Team Quarterback (rev 2) - thndrbld - Thunder Blade (upright, FD1094 317-0056) + techbowl + Technical Bowling (J 971212 V1.000) - thndrbld1 - Thunder Blade (deluxe/standing, unprotected) + technodr + Techno Drive (Japan, TH1/VER.B) - thndrx2 - Thunder Cross II (World) + techromn + Tech Romancer (Euro 980914) - thndrx2a - Thunder Cross II (Asia) + techromna + Tech Romancer (Asia 980914) - thndrx2j - Thunder Cross II (Japan) + techromnu + Tech Romancer (USA 980914) - thndzone - Thunder Zone (World, Rev 1) + tecnodar + Tecnodarts - thndzone4 - Thunder Zone (World 4 Players) + tecnodargr + Tecnodarts (Recreativos G.R. license) - thndzonea - Thunder Zone (World) + teddybb + TeddyBoy Blues (315-5115, New Ver.) - thndzonej - Thunder Zone (Japan) + teddybbo + TeddyBoy Blues (315-5115, Old Ver.) - thoop - Thunder Hoop (Ver. 1) + teddybbobl + TeddyBoy Blues (Old Ver. bootleg) - thoop2 - TH Strikes Back + teedoff + Tee'd Off (Japan) - thrild2 - Thrill Drive 2 (ver EBB) + teedoffp + Tee'd Off - thrild2a - Thrill Drive 2 (ver AAA) + teedoffp1 + Tee'd Off (rev.1) - thrild2c - Thrill Drive 2 (ver EAA) + teedoffp3 + Tee'd Off (rev.3) - thrilld - Thrill Drive (JAE) + teetert + Teeter Torture (prototype) - thrilldae - Thrill Drive (EAA) + tehkanwc + Tehkan World Cup (set 1) - thrilldb - Thrill Drive (JAB) + tehkanwcb + Tehkan World Cup (set 2, bootleg?) - thund_p1 - Thunderball (P-1) + tehkanwcc + Tehkan World Cup (set 3, bootleg) - thunderh - Operation Thunder Hurricane (ver EAA) + tehkanwcd + Tehkan World Cup (set 4, earlier) - thunderhu - Operation Thunder Hurricane (ver UAA) + tehkanwch + Tehkan World Cup (1986 year hack) - thunderj - ThunderJaws (rev 3) + tekipaki + Teki Paki - thunderja - ThunderJaws (rev 2) + tekipakit + Teki Paki (location test) - thunderl - Thunder & Lightning + tekken + Tekken (World, TE2/VER.C) - thunderlbl - Thunder & Lightning (bootleg with Tetris sound) + tekken2 + Tekken 2 Ver.B (US, TES3/VER.D) - thunderx - Thunder Cross (set 1) + tekken2a + Tekken 2 (World, TES2/VER.A) - thunderxa - Thunder Cross (set 2) + tekken2b + Tekken 2 Ver.B (World, TES2/VER.B) - thunderxb - Thunder Cross (set 3) + tekken2jb + Tekken 2 Ver.B (Japan, TES1/VER.B) - thunderxj - Thunder Cross (Japan) + tekken2jc + Tekken 2 Ver.B (Japan, TES1/VER.C) - thundfox - Thunder Fox (World) + tekken2ub + Tekken 2 Ver.B (US, TES3/VER.B) - thundfoxj - Thunder Fox (Japan) + tekken3 + Tekken 3 (World, TET2/VER.E1) - thundfoxu - Thunder Fox (US) + tekken3a + Tekken 3 (World, TET2/VER.A) - thunt - Puzzle & Action: Treasure Hunt (JUET 970901 V2.00E) + tekken3b + Tekken 3 (World, TET2/VER.B) - thuntk - Puzzle & Action: BoMulEul Chajara (JUET 970125 V2.00K) + tekken3d + Tekken 3 (World, TET2/VER.D) - tickee - Tickee Tickats + tekken3ja + Tekken 3 (Japan, TET1/VER.A) - tictac - Tic Tac Trivia (6221-23, U5-0C Horizontal) + tekken3je1 + Tekken 3 (Japan, TET1/VER.E1) - tictacv - Tic Tac Trivia (6221-22, U5-0 Vertical) + tekken3ua + Tekken 3 (US, TET3/VER.A) - tigerh - Tiger Heli (US) + tekken3ud + Tekken 3 (US, TET3/VER.D) - tigerhb1 - Tiger Heli (bootleg set 1) + tekken4 + Tekken 4 (TEF3 Ver. C) - tigerhb2 - Tiger Heli (bootleg set 2) + tekken4a + Tekken 4 (TEF2 Ver. A) - tigerhb3 - Tiger Heli (bootleg set 3) + tekken4b + Tekken 4 (TEF1 Ver. A) - tigerhj - Tiger Heli (Japan) + tekken4c + Tekken 4 (TEF1 Ver. C) - tigeroad - Tiger Road (US) + tekken51 + Tekken 5.1 (TE51 Ver. B) - tigeroadb - Tiger Road (US bootleg) + tekken51b + Tekken 5.1 (TE53 Ver. B) - tigerrag - Tiger Rag + tekken5d + Tekken 5 Dark Resurrection (TED1 Ver. A) - tighook - Tiger Hook (Version 2.1E Dual) + tekkena + Tekken (TE2-VER.B) - tighookc1 - Tiger Hook (Version 2.1R, set 1) + tekkenac + Tekken (Asia, TE4/VER.C) - tighookc2 - Tiger Hook (Version 2.0LT, set 1) + tekkenb + Tekken (World, TE2/VER.B) - tighookd1 - Tiger Hook (Version 2.1R, set 2) + tekkenbs + Tekken Battle Scratch - tighookd2 - Tiger Hook (Version 2.0LT, set 2) + tekkencw + Tekken Card World - tighooko - Tiger Hook (Version 1.7XT) + tekkenjb + Tekken (Japan, TE1/VER.B) - tighooko2 - Tiger Hook (Version 1.7) + tekkentt + Tekken Tag Tournament (TEG3-VER.B) - tighookv1 - Tiger Hook (Version 2.1R Dual) + tektagt + Tekken Tag Tournament (World, TEG2/VER.C1, set 1) - tighookv2 - Tiger Hook (Version 2.0LT Dual) + tektagtc1 + Tekken Tag Tournament (World, TEG2/VER.C1, set 2) - timber - Timber + tektagtja + Tekken Tag Tournament (Japan, TEG1/VER.A3) - time2000 - Time 2000 + tektagtjb + Tekken Tag Tournament (Japan, TEG1/VER.B) - timecris - Time Crisis (Rev. TS2 Ver.B) + tektagtjc1 + Tekken Tag Tournament (Japan, TEG1/VER.C1) - timecrisa - Time Crisis (Rev. TS2 Ver.A) + tektagtub + Tekken Tag Tournament (US, TEG3/VER.B) - timecrs2 - Time Crisis II (TSS3 Ver. B) + tektagtuc1 + Tekken Tag Tournament (US, TEG3/VER.C1) - timecrs2v2b - Time Crisis II (TSS2 Ver. B) + teljan + Tel Jan - timecrs2v4a - Time Crisis II (TSS4 Ver. A) + telmahjn + Telephone Mahjong (Japan 890111) - timecrs3 - Time Crisis 3 (TST1) + telpacfl + TelePachi Fever Lion (V1.0) - timecrs3e - Time Crisis 3 (TST2 Ver. A) + tempall + Tempest All Levels - timefgtr - Time Fighter (Time Pilot conversion on Galaxian hardware) + temped + TempEd - timekill - Time Killers (v1.32) + tempest + Tempest (rev 3, Revised Hardware) - timekill121 - Time Killers (v1.21) + tempest1 + Tempest (rev 1) - timekill131 - Time Killers (v1.31) + tempest1r + Tempest (rev 1, Revised Hardware) - timelimt - Time Limit + tempest2 + Tempest (rev 2) - timeline - Time Line + tempest3 + Tempest (rev 3) - timeplt - Time Pilot + temptube + Tempest Tubes - timeplta - Time Pilot (Atari) + temptwst + Tempest Twisted - timepltc - Time Pilot (Centuri) + tenballs + Ten Balls (Ver 1.05) - timescan - Time Scanner (set 2, System 16B) + tengai + Tengai (World) - timescan1 - Time Scanner (set 1, System 16A, FD1089B 317-0024) + tengaij + Sengoku Blade: Sengoku Ace Episode II (Japan) / Tengai (World) - timesold - Time Soldiers (US Rev 3) + tenkai + Mahjong Tenkaigen - timesold1 - Time Soldiers (US Rev 1) + tenkai2b + Mahjong Tenkaigen Part 2 (bootleg) - timetrv - Time Traveler + tenkaibb + Mahjong Tenkaigen (bootleg b) - timetunl - Time Tunnel + tenkaicb + Mahjong Tenkaigen (bootleg c) - tinklpit - Tinkle Pit (Japan) + tenkaie + Mahjong Tenkaigen (set 2) - tinstar - The Tin Star (set 1) + tenkomor + Tenkomori Shooting (World, TKM2/VER.A1) - tinstar2 - The Tin Star (set 2) + tenkomorja + Tenkomori Shooting (Japan, TKM1/VER.A1) - tinv2650 - The Invaders + tenpindx + Ten Pin Deluxe - tiptop - Tip Top (3 board stack) + tenspot + Ten Spot - tisland - Treasure Island + tenthdeg + Tenth Degree (prototype) - tisub - Treasure Island (Subsino, set 1) + tenup + Ten Up - tisuba - Treasure Island (Subsino, set 2) + teot + The Eye of Typhoon (Beta 3 Version) - titan - Titan + teplus2j + Tetris Plus 2 (Japan) - titan1 - Titan (alternate set) + terabrst + Teraburst (1998/07/17 ver UEL) - titanic - Titanic (Coin dropper) + terabrsta + Teraburst (1998/02/25 ver AAA) - titlef - Title Fight (World) + term2 + Terminator 2 - Judgment Day (rev LA4 08/03/92) - titlefj - Title Fight (Japan) + term2la1 + Terminator 2 - Judgment Day (rev LA1 11/01/91) - titlefu - Title Fight (US) + term2la2 + Terminator 2 - Judgment Day (rev LA2 12/09/91) - tjsb - Mahjong Tian Jiang Shen Bing (V137C) + term2la3 + Terminator 2 - Judgment Day (rev LA3 03/27/92) - tjumpman - Tobikose! Jumpman + term2lg1 + Terminator 2 - Judgment Day (German, rev LG1 11/04/91) - tkdensho - Toukidenshou - Angel Eyes (VER. 960614) + term2pa2 + Terminator 2 - Judgment Day (prototype, rev PA2 10/18/91) - tkdenshoa - Toukidenshou - Angel Eyes (VER. 960427) + term3 + Terminator 3: Rise of the Machines (4.00) - tkmmpzdm - Tokimeki Memorial Taisen Puzzle-dama (ver JAB) + term3_205 + Terminator 3: Rise of the Machines (2.05) - tknight - Tecmo Knight + term3_301 + Terminator 3: Rise of the Machines (3.01) - tkoboxng - Vs. T.K.O. Boxing + term3f + Terminator 3: Rise of the Machines (4.00 France) - tm - Touchmaster (v3.00 Euro) + term3f_205 + Terminator 3: Rise of the Machines (2.05 France) - tm2k - Touchmaster 2000 Plus (v4.63 Standard) + term3f_301 + Terminator 3: Rise of the Machines (3.01 France) - tm2ka - Touchmaster 2000 (v4.02 Standard) + term3g + Terminator 3: Rise of the Machines (4.00 Germany) - tm2kb - Touchmaster 2000 (v4.00 Standard) + term3g_301 + Terminator 3: Rise of the Machines (3.01 Germany) - tm3k - Touchmaster 3000 (v5.02 Standard) + term3i + Terminator 3: Rise of the Machines (4.00 Italy) - tm3ka - Touchmaster 3000 (v5.01 Standard) + term3i_205 + Terminator 3: Rise of the Machines (2.05 Italy) - tm4k - Touchmaster 4000 (v6.03 Standard) + term3i_301 + Terminator 3: Rise of the Machines (3.01 Italy) - tm4ka - Touchmaster 4000 (v6.02 Standard) + term3l + Terminator 3: Rise of the Machines (4.00 Spain) - tm4kb - Touchmaster 4000 (v6.01 Standard) + term3l_205 + Terminator 3: Rise of the Machines (2.05 Spain) - tm4kca - Touchmaster 4000 (v6.02 California) + term3l_301 + Terminator 3: Rise of the Machines (3.01 Spain) - tm4kmn - Touchmaster 4000 (v6.01 Minnesota) + terracra + Terra Cresta (YM2203) - tm4knj - Touchmaster 4000 (v6.03 New Jersey) + terracrb + Terra Cresta (YM3526 set 2) - tm5k - Touchmaster 5000 (v7.10 Standard) + terracre + Terra Cresta (YM3526 set 1) - tm5ka - Touchmaster 5000 (v7.01 Standard) + terracrea + Terra Cresta (YM3526 set 3) - tm5kca - Touchmaster 5000 (v7.10 California) + terracren + Terra Cresta (YM2203) - tm5kmn - Touchmaster 5000 (v7.10 Minnesota) + terracreo + Terra Cresta (YM3526 set 2) - tm7k - Touchmaster 7000 (v8.04 Standard) + terraf + Terra Force - tm7ka - Touchmaster 7000 (v8.00 Standard) + terrafb + Terra Force (Japan, bootleg set 2) - tm7keval - Touchmaster 7000 (v8.1X Evaluation) + terrafj + Terra Force (Japan) - tm7kmn - Touchmaster 7000 (v8.04 Minnesota) + terrafjb + Terra Force (Japan, bootleg with additional Z80) - tm7kmna - Touchmaster 7000 (v8.00 Minnesota) + terrafu + Terra Force (US) - tm7knj - Touchmaster 7000 (v8.05 New Jersey) + terrlake + Terrific Lake - tm8k - Touchmaster 8000 (v9.04 Standard) + tesorone + Tesorone Dell'Isola (Italy, v2.41) - tm8k902 - Touchmaster 8000 (v9.02 Standard) + tesorone230 + Tesorone Dell'Isola (Italy, v2.30) - tmac_a18 - Time Machine (1.8) + tesorone240 + Tesorone Dell'Isola (Italy, v2.40) - tmac_a24 - Time Machine (2.4) + tetfight + Tetris Fighters - tmachzac - Time Machine (Zaccaria) + tetgiano + Tetris Giant / Tetris Dekaris (MDA-C0076) - tmachzacf - Time Machine (Zaccaria, French speech) + tetgiant + Tetris Giant / Tetris Dekaris (Ver.2.000) - tmachzacg - Time Machine (Zaccaria, German speech) + tetkiwam + Tetris Kiwamemichi (Japan) (GDL-0020) - tmdo - Touchmaster (v2.2-01 Standard) + tetrbx + Tetris / Bloxeed (Korean System 16 bootleg) (ISG Selection Master Type 2006) - tmek - T-MEK (v5.1, The Warlords) + tetris + Tetris (set 4, Japan, System 16A) (FD1094 317-0093) - tmek20 - T-MEK (v2.0, prototype) + tetris1 + Tetris (set 1, Japan, System 16B) (FD1094 317-0091) - tmek44 - T-MEK (v4.4) + tetris1d + Tetris (set 1, Japan, System 16B) (bootleg of FD1094 317-0091 set) - tmek45 - T-MEK (v4.5) + tetris2 + Tetris (set 2, Japan, System 16B) (FD1094 317-0092) - tmek51p - T-MEK (v5.1, prototype) + tetris2d + Tetris (set 2, Japan, System 16B) (bootleg of FD1094 317-0092 set) - tmfnt_l5 - Time Fantasy (L-5) + tetris3 + Tetris (set 3, Japan, System 16A) (FD1094 317-0093a) - tmht - Teenage Mutant Hero Turtles (UK 4 Players, set 1) + tetris3d + Tetris (set 3, Japan, System 16A) (bootleg of FD1094 317-0093a set) - tmht22pe - Teenage Mutant Hero Turtles - Turtles in Time (2 Players ver EBA) + tetrisa + Tetris (Sega Set 2) - tmht2p - Teenage Mutant Hero Turtles (UK 2 Players, set 1) + tetrisbl + Tetris (bootleg) - tmht2pa - Teenage Mutant Hero Turtles (UK 2 Players, set 2) + tetrisd + Tetris (set 4, Japan, System 16A) (bootleg of FD1094 317-0093 set) - tmhta - Teenage Mutant Hero Turtles (UK 4 Players, set 2) + tetriskr + Tetris (Korean bootleg of Mirrorsoft PC-XT Tetris) - tmmjprd - Tokimeki Mahjong Paradise - Dear My Love + tetrisp + Tetris Plus (ver 1.0) - tmnt - Teenage Mutant Ninja Turtles (World 4 Players) + tetrisp2 + Tetris Plus 2 (World, V2.8) - tmnt2 - Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver UAA) + tetrisp2a + Tetris Plus 2 (World, V2.7) - tmnt22pu - Teenage Mutant Ninja Turtles - Turtles in Time (2 Players ver UDA) + tetrisp2j + Tetris Plus 2 (Japan, V2.2) - tmnt2a - Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver ADA) + tetrisp2ja + Tetris Plus 2 (Japan, V2.1) - tmnt2pj - Teenage Mutant Ninja Turtles (Japan 2 Players) + tetrisse + Tetris (Japan, System E) - tmnt2po - Teenage Mutant Ninja Turtles (Oceania 2 Players) + tetrist + Tetris (Japan, Taito B-System, Nastar Conversion Kit) - tmnt_103 - Teenage Mutant Ninja Turtles (1.03) + tetrista + Tetris (Japan, Taito B-System, Master of Weapon Conversion Kit) - tmnt_104 - Teenage Mutant Ninja Turtles (1.04) + tetristh + Tetris (Japan, Taito H-System) - tmntj - Teenage Mutant Ninja Turtles (Japan 4 Players) + tetrsark + Tetris (D.R. Korea, set 1, encrypted) - tmntu - Teenage Mutant Ninja Turtles (US 4 Players, set 1) + tetrsark2 + Tetris (D.R. Korea, set 2) - tmntua - Teenage Mutant Ninja Turtles (US 4 Players, set 2) + texasrls + Texas Reels (Ver. 2.00) - tmosh - Tokimeki Memorial Oshiete Your Heart (GQ673 JAA) + tf95_12 + WPC 95 Test Fixture (1.2) - tmoshs - Tokimeki Memorial Oshiete Your Heart Seal Version (GE755 JAA) + tfa_13 + WPC Test Fixture: Alphanumeric (1.3) - tmoshsp - Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAB) + tfdmd_l3 + WPC Test Fixture: DMD (L-3) - tmoshspa - Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAA) + tfight + Title Fight - tmpdoki - Tokimeki Mahjong Paradise - Doki Doki Hen + tfrceac + Thunder Force AC - tmspoker - unknown TMS9980 Poker Game + tfrceacb + Thunder Force AC (bootleg) - tmwrp_l2 - Time Warp (L-2) + tfrceacj + Thunder Force AC (Japan) - tmwrp_t2 - Time Warp (T-2) + tfrceacjpb + Thunder Force AC (Japan, prototype, bootleg) - tndrcade - Thundercade / Twin Formation + tfs_12 + WPC Test Fixture: Security (1.2) - tndrcadej - Tokusyu Butai U.A.G. (Japan) + tftc_104s + Tales From the Crypt (USA 1.04, display L1.03) - tnextspc - The Next Space (set 1) + tftc_200 + Tales From the Crypt (USA 2.00, display A2.00) - tnextspc2 - The Next Space (set 2) + tftc_300 + Tales From the Crypt (USA 3.00, display A3.00) - tnextspcj - The Next Space (Japan) + tftc_302 + Tales From the Crypt (Dutch 3.02, display A3.01) - tnk3 - T.N.K III (US) + tftc_303 + Tales From the Crypt (USA 3.03, display A3.01) - tnk3j - T.A.N.K (Japan) + tfupdate + Triforce DIMM Updater (3.17) (GDT-0011) - tnzs - The NewZealand Story (World, new version) (newer PCB) + tgm2 + Tetris: The Absolute - The Grand Master 2 - tnzsj - The NewZealand Story (Japan, new version) (newer PCB) + tgm2p + Tetris: The Absolute - The Grand Master 2 Plus - tnzsjo - The NewZealand Story (Japan, old version) (older PCB) + tgmj + Tetris: The Grand Master (Japan 980710) - tnzso - The NewZealand Story (World, old version) (older PCB) + tgtbal96 + Target Ball '96 - tnzsop - The NewZealand Story (World, prototype?) (older PCB) + tgtball + Target Ball - todruaga - The Tower of Druaga (New Ver.) + tgtballa + Target Ball - todruagao - The Tower of Druaga (Old Ver.) + tgtballn + Target Ball (With Nudity) - todruagas - The Tower of Druaga (Sidam) + tgtpanic + Target Panic - toffy - Toffy + thaiprnc + Thai Princess (10119321, NSW/ACT) - togenkyo - Tougenkyou (Japan 890418) + thaiprncm + Thai Princess (30127721, Malaysia) - toggle - Toggle (prototype) + tharierj + Task Force Harrier (Japan) - toki - Toki (World, set 1) + tharrier + Task Force Harrier - tokia - Toki (World, set 2) + tharrierb + Task Force Harrier (Lettering bootleg) - tokib - Toki (Datsu bootleg) + tharrieru + Task Force Harrier (US) - tokimbsj - Tokimeki Bishoujo [BET] (Japan) + thayers + Thayer's Quest (set 1) - tokio - Tokio / Scramble Formation (newer) + thayersa + Thayer's Quest (set 2) - tokiob - Tokio / Scramble Formation (bootleg) + the26thz + The 26th Z (Japan, location test) - tokioo - Tokio / Scramble Formation (older) + theboat + The Boat - tokiou - Tokio / Scramble Formation (US) + thedealr + The Dealer (Visco) - tokisens - Toki no Senshi - Chrono Soldier + thedeep + The Deep (Japan) - tokiu - Toki (US, set 1) + thedrink + The Drink - tokiua - Toki (US, set 2) + theend + The End - tokkae - Taisen Tokkae-dama (ver JAA) + theends + The End (Stern Electronics) - tokyocop - Tokyo Cop (Italy) + theendss + The End (SegaSA / Sonic) - tokyogal - Tokyo Gal Zukan (Japan) + thegames + The Games - tokyowar - Tokyo Wars (Rev. TW2 Ver.A) + theglad + The Gladiator / Shen Jian Fu Mo Lu / Shen Jian Fengyun (M68k label V101) (ARM label V107, ROM 06/06/03 SHEN JIAN V107) - tom_06 - Theatre Of Magic (0.6a) + theglad100 + The Gladiator / Shen Jian Fu Mo Lu / Shen Jian Fengyun (M68k label V100) (ARM label V100, ROM 01/16/03 SHEN JIAN) - tom_10f - Theatre Of Magic (1.0 French) + theglad101 + The Gladiator / Shen Jian Fu Mo Lu / Shen Jian Fengyun (M68k label V100) (ARM label V101, ROM 03/13/03 SHEN JIAN) - tom_12 - Theatre Of Magic (1.2X) + thegladpcb + Tougenkyou - Road of the Sword (M68k label V100) (ARM label V101, ROM 03/13/03 SHEN JIAN) (Japan, JAMMA PCB) - tom_13 - Theatre Of Magic (1.3X) + thegladpcba + Tougenkyou - Road of the Sword (M68k label V100) (ARM label V100, ROM 02/25/03 SHEN JIAN) (Japan, JAMMA PCB) - tom_14h - Theatre Of Magic (1.4H) + theglob + The Glob - tomahawk - Tomahawk 777 (rev 5) + theglob2 + The Glob (earlier) - tomahawk1 - Tomahawk 777 (rev 1) + theglob3 + The Glob (set 3) - tomcat - TomCat (prototype) + theglobme + The Glob (Pacman hardware, Magic Electronics Inc. license) - tomcatsw - TomCat (Star Wars hardware, prototype) + theglobp + The Glob (Pac-Man hardware) + + + theglobpb + The Glob (Pac-Man hardware, bootleg) - tomy_400 - The Who's Tommy Pinball Wizard (4.00) + thegrid + The Grid (version 1.2) - tomy_h30 - The Who's Tommy Pinball Wizard (3.00, The Netherlands) + thegrida + The Grid (version 1.1) - tondemo - Tondemo Crisis (Japan) + thehand + The Hand - tonton - Waku Waku Doubutsu Land TonTon (Japan) + thehole + The Hole (bootleg of The Pit) - tontonb - Tonton [BET] (Japan set 1) + thehustj + The Hustler (Japan version J) - tonypok - Poker Master (Tony-Poker V3.A, hack?) + thehustl + The Hustler (Japan, program code M) - toobin - Toobin' (rev 3) + thehustlj + The Hustler (Japan, program code J) - toobin1 - Toobin' (rev 1) + themj + The Mah-jong (Japan, set 1) - toobin2 - Toobin' (rev 2) + themj2 + The Mah-jong (Japan, set 2) - toobin2e - Toobin' (Europe, rev 2) + thenanpa + The Nanpa (Japan) - toobine - Toobin' (Europe, rev 3) + thepit + The Pit - toobing - Toobin' (German, rev 3) + thepitj + The Pit (Japan) - top21 - Top XXI (Version 1.2) + thepitm + The Pit (bootleg on Moon Quasar hardware) - topaz_l1 - Topaz (Shuffle) (L-1) + thepitu1 + The Pit (US set 1) - topbladv - Top Blade V + thepitu2 + The Pit (US set 2) - topgame - Top Game Laser L10 (Bingo) + theportr + The Porter (bootleg of Port Man) - topgamet - Top Game Turbo (Bingo) + theraid + The Raid - topgear - Top Gear (4VXFC969, New Zealand) + theraida + The Raid (alternate set) - topgun - Vs. Top Gun + theroes + Thunder Heroes - topgunbl - Top Gunner (bootleg, Rotary Joystick) + thetogyu + The Togyu (315-5065, Japan) - topgunnr - Top Gunner (Exidy) + thief + Thief - topgunr - Top Gunner (US, 8-way Joystick) + thndblst + Thunder Blaster (Japan) - tophuntr - Top Hunter - Roddy & Cathy (NGM-046) + thndbolt + Thunderbolt - tophuntrh - Top Hunter - Roddy & Cathy (NGH-046) + thnderxj + Thunder Cross (Japan) - topland - Top Landing (World) + thndfoxj + Thunder Fox (Japan) - toppin - Top Pin + thndfoxu + Thunder Fox (US) - toppyrap - Toppy & Rappy + thndh + Thunder Heart (0200333V, NSW/ACT) - topracer - Top Racer (with MB8841 + MB8842, 1984) + thndha + Thunder Heart (0200334V, NSW/ACT) - topracera - Top Racer (with MB8841 + MB8842, 1983) + thndrbdj + Thunder Blade (Japan) - topracern - Top Racer (no MB8841 + MB8842) + thndrbld + Thunder Blade (upright) (FD1094 317-0056) - toprollr - Top Roller + thndrbld1 + Thunder Blade (deluxe/standing) (unprotected) - topsecex - Top Secret (Exidy) (version 1.0) + thndrbldd + Thunder Blade (upright) (bootleg of FD1094 317-0056 set) - topsecrt - Top Secret (Japan, old revision) + thndrhrt + Thunder Heart (10173811, NSW/ACT) - topshoot - Top Shooter + thndrman + Thunder Man - topskatr - Top Skater (Export, Revision A) + thndrx2 + Thunder Cross II (World) - topskatrj - Top Skater (Japan) + thndrx2a + Thunder Cross II (Asia) - topskatru - Top Skater (USA, Revision A) + thndrx2j + Thunder Cross II (Japan) - topspeed - Top Speed (World) + thndzone + Thunder Zone (World, Rev 1) - topspeedu - Top Speed (US) + thndzone4 + Thunder Zone (World 4 Players) - toramich - Tora e no Michi (Japan) + thndzonea + Thunder Zone (World) - toratora - Tora Tora (prototype?) + thndzonej + Thunder Zone (Japan) - torch - Torch + thoop + Thunder Hoop (ver. 1, checksum 02a09f7d) - toride2g - Toride II Adauchi Gaiden + thoop2 + TH Strikes Back (Non North America, Version 1.0, Checksum 020E0867) - toride2gg - Toride II Adauchi Gaiden (German) + thoop2a + TH Strikes Back (Non North America, Version 1.0, Checksum 020EB356) - toride2gk - Toride II Bok Su Oi Jeon Adauchi Gaiden (Korea) + thor + Thor (0200319V, NSW/ACT) - toride2j - Toride II (Japan) + thrdwrld + Third World - tornado1 - Tornado (set 1, Defender bootleg) + threeds + Three Ds - Three Dealers Casino House (set 1) - tornado2 - Tornado (set 2, Defender bootleg) + threedsa + Three Ds - Three Dealers Casino House (set 2) - tornbase - Tornado Baseball / Ball Park + thrild2 + Thrill Drive 2 (ver EBB) - torp_e21 - Torpedo Alley (2.1, Europe) + thrild2a + Thrill Drive 2 (ver AAA) - tortufam - Tortuga Family (Italian) + thrild2ab + Thrill Drive 2 (ver AAA, alt) - torus - Torus + thrild2ac + Thrill Drive 2 (ver AAA, alt 2) - toryumon - Toryumon + thrild2c + Thrill Drive 2 (ver EAA) - totan_04 - Tales Of The Arabian Nights (0.4) + thrild2j + Thrill Drive 2 (ver JAA) - totan_12 - Tales Of The Arabian Nights (1.2) + thrilld + Thrill Drive (JAE) - totan_13 - Tales Of The Arabian Nights (1.3) + thrilldb + Thrill Drive (JAB) - totan_14 - Tales Of The Arabian Nights (1.4) + thrilldbe + Thrill Drive (EAB) - totcarn - Total Carnage (rev LA1 03/10/92) + thrilldbu + Thrill Drive (ver UFB) - totcarnp - Total Carnage (prototype, rev 1.0 01/25/92) + thund_p1 + Thunderball (P-1) - totd - The Typing of the Dead (JPN, USA, EXP, KOR, AUS) (Rev A) + thund_p2 + Thunderball (P-2) - totem - Totem + thund_p3 + Thunderball (P-3) - totlvica - Total Vice (ver AAB) + thunderh + Operation Thunder Hurricane (ver EAA) - totlvice - Total Vice (ver UAC) + thunderhu + Operation Thunder Hurricane (ver UAA) - totlvicj - Total Vice (ver JAD) + thunderj + ThunderJaws (rev 3) - totmejan - Tottemo E Jong + thunderja + ThunderJaws (rev 2) - touchdn - Touchdown + thunderl + Thunder & Lightning - toucheme - Touche Me + thunderlbl + Thunder & Lightning (bootleg with Tetris sound, set 1) - touchgo - Touch & Go (World) + thunderlbl2 + Thunder & Lightning (bootleg with Tetris sound, set 2) - touchgoe - Touch & Go (earlier revision) + thunderx + Thunder Cross (set 1) - touchgon - Touch & Go (Non North America) + thunderxa + Thunder Cross (set 2) - toukon3 - Shin Nihon Pro Wrestling Toukon Retsuden 3 Arcade Edition (Japan, TR1/VER.A) + thunderxb + Thunder Cross (set 3) - toukon4 - Shin Nihon Pro Wrestling Toukon Retsuden 4 Arcade Edition (TRF1 Ver. A) + thunderxj + Thunder Cross (Japan) - tour4000 - Tour 4000 + thundfox + Thunder Fox (World) - tour4010 - Tour 4010 + thundfoxj + Thunder Fox (Japan) - toursol - Tournament Solitaire (V1.06, 08/03/95) + thundfoxu + Thunder Fox (US) - toursol1 - Tournament Solitaire (V1.04, 06/22/95) + thunt + Puzzle & Action: Treasure Hunt (JUET 970901 V2.00E) - tourtab2 - Tournament Table (set 2) + thuntk + Puzzle & Action: BoMulEul Chajara (JUET 970125 V2.00K) - tourtabl - Tournament Table (set 1) + tickee + Tickee Tickats - tourvis - Tourvision PCE bootleg + tictac + Tic Tac Trivia (6221-23, U5-0C Horizontal) - touryuu - Touryuumon (V1.1)? + tictacv + Tic Tac Trivia (6221-22, U5-0 Vertical) - toutrun - Turbo Out Run (Out Run upgrade, FD1094 317-0118) + tierras100hz + Tierras Salvajes (100Hz display) - toutrun1 - Turbo Out Run (deluxe cockpit, FD1094 317-0109) + tigerh + Tiger-Heli (US) - toutrun2 - Turbo Out Run (cockpit, FD1094 317-0106) + tigerh2 + Tiger Heli (Japan set 1) - toutrun3 - Turbo Out Run (cockpit, FD1094 317-0107) + tigerhb1 + Tiger-Heli (bootleg set 1) - toutrunj - Turbo Out Run (Japan, Out Run upgrade, FD1094 317-0117) + tigerhb2 + Tiger-Heli (bootleg set 2) - toyfight - Toy Fighter + tigerhb3 + Tiger-Heli (bootleg set 3) - toyland - Toy Land Adventure + tigerhb4 + Tiger-Heli (bootleg set 4) - toypop - Toypop + tigerhj + Tiger-Heli (Japan) - tp2m32 - Tetris Plus 2 (MegaSystem 32 Version) + tigeroad + Tiger Road (US) - tp84 - Time Pilot '84 (set 1) + tigeroadb + Tiger Road (US bootleg) - tp84a - Time Pilot '84 (set 2) + tigeroadb2 + Tiger Road (US bootleg, set 2) - tp84b - Time Pilot '84 (set 3) + tigeroadu + Tiger Road (US, Romstar license) - tpgolf - Top Player's Golf (NGM-003)(NGH-003) + tigerrag + Tiger Rag - tpoker2 - Turbo Poker 2 + tigerslt + Tiger (slot) - tps - TPS + tighook + Tiger Hook (Version 2.1E Dual) - tqst - Treasure Quest + tighookc1 + Tiger Hook (Version 2.1R, set 1) - trackfld - Track & Field + tighookc2 + Tiger Hook (Version 2.0LT, set 1) - trackfldc - Track & Field (Centuri) + tighookd1 + Tiger Hook (Version 2.1R, set 2) - trackfldnz - Track & Field (NZ bootleg?) + tighookd2 + Tiger Hook (Version 2.0LT, set 2) - trailblz - Trail Blazer + tighooko + Tiger Hook (Version 1.7XT) - trailer - Trailer + tighooko2 + Tiger Hook (Version 1.7) - trally - Thrash Rally (ALM-003)(ALH-003) + tighookv1 + Tiger Hook (Version 2.1R Dual) - tranqgun - Tranquilizer Gun + tighookv2 + Tiger Hook (Version 2.0LT Dual) - transfrm - Transformer + tigress + Tigress (20230111, NSW/ACT) - travrusa - Traverse USA / Zippy Race + tikitalk + Tiki Talk (10239111, NSW/ACT) - travrusab - Traverse USA (bootleg) + tiktorch + Tiki Torch (0151003, US) - trbwtchs - Trouble Witches AC (v1.00J) + timber + Timber - trckydoc - Tricky Doc (set 1) + timbwolf + Timber Wolf (0154013, US) - trckydoca - Tricky Doc (set 2) + time2000 + Time 2000 - treahunt - Treasure Hunt + timecris + Time Crisis (Rev. TS2 Ver.B, World) - trebltop - Treble Top (39-360-070) + timecrisa + Time Crisis (Rev. TS2 Ver.A, World) - trek_110 - Star Trek 25th Anniversary (1.10) + timecrs2 + Time Crisis II (US, TSS3 Ver. B) - trek_11a - Star Trek 25th Anniversary (1.10 Alpha Display) + timecrs2v1b + Time Crisis II (Japan, TSS1 Ver. B) - trek_120 - Star Trek 25th Anniversary (1.20) + timecrs2v2b + Time Crisis II (World, TSS2 Ver. B) - trek_200 - Star Trek 25th Anniversary (2.00) + timecrs2v4a + Time Crisis II (World, TSS4 Ver. A) - trek_201 - Star Trek 25th Anniversary (2.01) + timecrs2v5a + Time Crisis II (US, TSS5 Ver. A) - trgheart - Trigger Heart Exelica (Rev A) (GDL-0036A) + timecrs3 + Time Crisis 3 (TST1) - tricktrp - Trick Trap (World?) + timecrs3e + Time Crisis 3 (TST2 Ver. A) - trident - Trident + timecrs3u + Time Crisis 3 (TST3 Ver. A) - triforce - Triforce Bios + timecrs4 + Time Crisis 4 (World, TSF1002-NA-A) - trigon - Trigon (Japan) + timecrs4j + Time Crisis 4 (Japan, TSF1001-NA-A) - triothep - Trio The Punch - Never Forget Me... (World) + timecrsa + Time Crisis (Rev. TS2 Ver.A) - triothepj - Trio The Punch - Never Forget Me... (Japan) + timefgtr + Time Fighter (Time Pilot conversion on Galaxian hardware) - tripdraw - Tripple Draw (V3.1 s) + timek131 + Time Killers (v1.31) - tripjok - Triple Joker (Bingo) + timekill + Time Killers (v1.32) - triplay - Triple Play + timekill100 + Time Killers (v1.00) - triplep - Triple Punch (set 1) + timekill120 + Time Killers (v1.20, alternate ROM board) - triplepa - Triple Punch (set 2) + timekill121 + Time Killers (v1.21) - triplew1 - Mahjong Triple Wars (Japan) + timekill121a + Time Killers (v1.21, alternate ROM board) - triplew2 - Mahjong Triple Wars 2 (Japan) + timekill131 + Time Killers (v1.31) - triplfun - Triple Fun + timekill132i + Time Killers (v1.32I) - triplhnt - Triple Hunt + timelimt + Time Limit - tripool - Tri-Pool (Casino Tech) + timeline + Time Line - tripoola - Tri-Pool (Costal Games) + timeplt + Time Pilot - trisport - Tri-Sports + timeplta + Time Pilot (Atari) - trivia12 - Trivial Pursuit (Think Tank - Genus Edition) (12/14/84) + timepltc + Time Pilot (Centuri) - triviabb - Trivial Pursuit (Baby Boomer Edition) (3/20/85) + timescan + Time Scanner (set 2, System 16B) - triviaes - Trivial Pursuit (Spanish) + timescan1 + Time Scanner (set 1, System 16A, FD1089B 317-0024) - triviag1 - Trivial Pursuit (Think Tank - Genus Edition) (set 1) + timesol1 + Time Soldiers (US Rev 1) - triviag2 - Trivial Pursuit (Genus II Edition) + timesold + Time Soldiers (US Rev 3) - trivialp - Trivial Pursuit (New Edition) (prod. 1D) + timesold1 + Time Soldiers (US Rev 1) - trivialpd - Trivial Pursuit (New Edition) (prod. 1D) (Protocol) + timesupd + Time's Up (Demo) - trivialpo - Trivial Pursuit + timetrv + Time Traveler (set 1) - triviasp - Trivial Pursuit (All Star Sports Edition) + timetrv2 + Time Traveler (set 2) - triviayp - Trivial Pursuit (Young Players Edition) + timetunl + Time Tunnel - trivquiz - Triv Quiz + timscanr + Time Scanner - trizeal - Trizeal (GDL-0026) + tinklpit + Tinkle Pit (Japan) - trizn_l1 - Tri Zone (L-1) + tinstar + The Tin Star (A10, 4 PCB version) - trizn_t1 - Tri Zone (T-1) + tinstara + The Tin Star (TS, 5 PCB version) - troangel - Tropical Angel + tinv2650 + The Invaders - trog - Trog (rev LA5 03/29/91) + tiptop + Tip Top (3 board stack) - trog3 - Trog (rev LA3 02/14/91) + tisland + Treasure Island - trog4 - Trog (rev LA4 03/11/91) + tisub + Treasure Island (Subsino, set 1) - trogpa4 - Trog (prototype, rev 4.00 07/27/90) + tisuba + Treasure Island (Subsino, set 2) - trogpa6 - Trog (prototype, rev PA6-PAC 09/09/90) + titan + Titan (set 1) - trojan - Trojan (US set 1) + titan1 + Titan (set 2) - trojana - Trojan (US set 2) + titanic + Titanic (Coin dropper) - trojanb - Trojan (bootleg) + titanpac + Titan (Pac-Man hack) - trojanj - Tatakai no Banka (Japan) + titlef + Title Fight (World) - trojanr - Trojan (Romstar) + titlefj + Title Fight (Japan) - tron - Tron (8/9) + titlefu + Title Fight (US) - tron2 - Tron (6/25) + tjsb + Mahjong Tian Jiang Shen Bing (V137C) - tron3 - Tron (6/17) + tjumpman + Tobikose! Jumpman - tron4 - Tron (6/15) + tkdensho + Toukidenshou - Angel Eyes (VER. 960614) - trophyh - Trophy Hunting - Bear & Moose V1.0 + tkdenshoa + Toukidenshou - Angel Eyes (VER. 960427) - trstar - Top Ranking Stars (Ver 2.1O 1993/05/21) (New Version) + tkmmpzdm + Tokimeki Memorial Taisen Puzzle-dama (ver JAB) - trstar2k - Triple Star 2000 + tknight + Tecmo Knight + + + tkoboxng + Vs. T.K.O. Boxing - trstarj - Top Ranking Stars (Ver 2.1J 1993/05/21) (New Version) + tm + Touchmaster (v3.00 Euro) - trstaro - Top Ranking Stars (Ver 2.1O 1993/05/21) (Old Version) + tm2k + Touchmaster 2000 Plus (v4.63 Standard) - trstaroj - Top Ranking Stars (Ver 2.1J 1993/05/21) (Old Version) + tm2ka + Touchmaster 2000 (v4.02 Standard) - truckk - Truck Kyosokyoku (Japan, TKK2/VER.A) + tm2kb + Touchmaster 2000 (v4.00 Standard) - trucksp2 - Truck Stop (P-2) + tm2kspeval + Touchmaster 2000 (v4.XX3 Spanish Evaluation) - trucksp3 - Truck Stop (P-3) + tm3k + Touchmaster 3000 (v5.02 Standard) - truco - Truco-Tron + tm3ka + Touchmaster 3000 (v5.01 Standard) - trucocl - Truco Clemente + tm3keval + Touchmaster 3000 (v5.XX Standard AMOA Evaluation) - truxton - Truxton / Tatsujin + tm3ksp + Touchmaster 3000 (v5.02 Spanish) - truxton2 - Truxton II / Tatsujin Oh + tm4k + Touchmaster 4000 (v6.03 Standard) - trvchlng - Trivia Challenge + tm4ka + Touchmaster 4000 (v6.02 Standard) - trvgns - Trivia Genius + tm4kb + Touchmaster 4000 (v6.01 Standard) - trvhang - Trivia Hangup (question set 1) + tm4kca + Touchmaster 4000 (v6.02 California) - trvhanga - Trivia Hangup (question set 2) + tm4kmn + Touchmaster 4000 (v6.01 Minnesota) - trvmadns - Trivia Madness - Series A Question set + tm4knj + Touchmaster 4000 (v6.03 New Jersey) - trvmadnsa - Trivia Madness - Series B Question set + tm4kuk + Touchmaster 4000 (v6.02 England) - trvmstr - Trivia Master (set 1) + tm5k + Touchmaster 5000 (v7.10 Standard) - trvmstra - Trivia Master (set 2) + tm5ka + Touchmaster 5000 (v7.01 Standard) - trvmstrb - Trivia Master (set 3) + tm5kca + Touchmaster 5000 (v7.10 California) - trvmstrc - Trivia Master (set 4) + tm5kmn + Touchmaster 5000 (v7.10 Minnesota) - trvquest - Trivia Quest + tm5kuk + Touchmaster 5000 (v7.11 U.K.) - trvwz2 - Trivia ? Whiz (6221-05, Edition 2) + tm7k + Touchmaster 7000 (v8.04 Standard) - trvwz2a - Trivia ? Whiz (6221-05, Edition 2 Alt Sex trivia) + tm7ka + Touchmaster 7000 (v8.00 Standard) - trvwz3h - Trivia ? Whiz (6221-05, Edition 3) + tm7kde + Touchmaster 7000 (v8.04 Germany) - trvwz3ha - Trivia ? Whiz (6221-05, Edition 3 Sex trivia III) + tm7keval + Touchmaster 7000 (v8.1X ASI Standard Evaluation) - trvwz3v - Trivia ? Whiz (6221-04, Edition 3 Vertical) + tm7kmn + Touchmaster 7000 (v8.04 Minnesota) - trvwz4 - Trivia ? Whiz (6221-13, U5-0B Edition 4) + tm7kmna + Touchmaster 7000 (v8.00 Minnesota) - trvwz4a - Trivia ? Whiz (6221-13, U5-0B Edition 4 Alt Sex trivia) + tm7knj + Touchmaster 7000 (v8.05 New Jersey) - trvwzh - Trivia ? Whiz (6221-00) + tm8k + Touchmaster 8000 (v9.04 Standard) - trvwzha - Trivia ? Whiz (6221-00, with Sex trivia) + tm8k902 + Touchmaster 8000 (v9.02 Standard) - trvwzhb - Trivia ? Whiz (6221-00, Alt Gen trivia) + tmac_a18 + Time Machine (1.8) - trvwzv - Trivia ? Whiz (6221-02, Vertical) + tmac_a24 + Time Machine (2.4) - tryout - Pro Baseball Skill Tryout (Japan) + tmac_g18 + Time Machine (1.8, Germany) - ts2 - Battle Arena Toshinden 2 (USA 951124) + tmachzac + Time Machine (Zaccaria) - ts2a - Battle Arena Toshinden 2 (USA 951124) Older + tmachzacf + Time Machine (Zaccaria, French speech) - ts2j - Battle Arena Toshinden 2 (Japan 951124) + tmachzacg + Time Machine (Zaccaria, German speech) - ts_la2 - The Shadow (LA-2) + tmacltd2 + Time Machine (LTD, 2 players) - ts_la4 - The Shadow (LA-4) + tmacltd4 + Time Machine (LTD, 4 players) - ts_lf6 - The Shadow (LF-6) French + tmdo + Touchmaster (v2.2-01 Standard) - ts_lh6 - The Shadow (LH-6) + tmek + T-MEK (v5.1, The Warlords) - ts_lm6 - The Shadow (LM-6) Mild + tmek20 + T-MEK (v2.0, prototype) - ts_lx4 - The Shadow (LX-4) + tmek44 + T-MEK (v4.4) - ts_lx5 - The Shadow (LX-5) + tmek45 + T-MEK (v4.5) - ts_pa1 - The Shadow (PA-1) + tmek51p + T-MEK (v5.1, prototype) - tsamurai - Samurai Nihon-Ichi (set 1) + tmekprot + T-MEK (prototype) - tsamurai2 - Samurai Nihon-Ichi (set 2) + tmfnt_l5 + Time Fantasy (L-5) - tsamuraih - Samurai Nihon-Ichi (bootleg, harder) + tmht + Teenage Mutant Hero Turtles (UK 4 Players, version F) - tsarevna - Tsarevna (v1.29) + tmht22pe + Teenage Mutant Hero Turtles - Turtles in Time (2 Players ver EBA) - tsarevnaa - Tsarevna (v1.31) + tmht24pe + Teenage Mutant Hero Turtles - Turtles in Time (4 Players ver EAA) - tsclass - Trap Shoot Classic (v1.0 21-mar-1997) + tmht2p + Teenage Mutant Hero Turtles (UK 2 Players, version U) - tshingen - Shingen Samurai-Fighter (Japan, English) + tmht2pa + Teenage Mutant Hero Turtles (UK 2 Players, version ?) - tshingena - Takeda Shingen (Japan, Japanese) + tmhta + Teenage Mutant Hero Turtles (UK 4 Players, version S) - tshoot - Turkey Shoot + tmhtb + Teenage Mutant Hero Turtles (UK 4 Players, version ?) - tsptr_l3 - Transporter the Rescue (L-3) + tmmjprd + Tokimeki Mahjong Paradise - Dear My Love - tst_galx - Galaxian Test ROM + tmnt + Teenage Mutant Ninja Turtles (World 4 Players, version X) - tst_invd - Space Invaders Test ROM + tmnt2 + Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver UAA) - tstrike - Thunder Strike (set 1) + tmnt22p + Teenage Mutant Ninja Turtles - Turtles in Time (US 2 Players ver. UDA) - tstrikea - Thunder Strike (set 2, older) + tmnt22pu + Teenage Mutant Ninja Turtles - Turtles in Time (2 Players ver UDA) - tstrk_l1 - Triple Strike (Shuffle) (L-1) + tmnt24pu + Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver UEA) - tsurugi - Tsurugi (ver EAB) + tmnt2a + Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver ADA) - tsurugij - Tsurugi (ver JAC) + tmnt2pj + Teenage Mutant Ninja Turtles (Japan 2 Players, version 1) - tt_game - unknown Toptronic pinball game + tmnt2po + Teenage Mutant Ninja Turtles (Oceania 2 Players, version ?) - ttblock - T. T. Block [TTL] + tmnt_101 + Teenage Mutant Ninja Turtles (1.01) - ttchamp - Table Tennis Champions (set 1) + tmnt_103 + Teenage Mutant Ninja Turtles (1.03) - ttchampa - Table Tennis Champions (set 2) + tmnt_104 + Teenage Mutant Ninja Turtles (USA 1.04, display A1.04) - ttfitter - T.T. Fitter (Japan) + tmnt_104g + Teenage Mutant Ninja Turtles (Germany 1.04, display A1.04) - ttmahjng - T.T Mahjong + tmnta + Teenage Mutant Ninja Turtles (Asia 4 Players, version ?) - tts_l1 - Tic-Tac-Strike (Shuffle) (L-1) + tmnti + Teenage Mutant Ninja Turtles (FMV Demo) - tts_l2 - Tic-Tac-Strike (Shuffle) (L-2) + tmntia + Teenage Mutant Ninja Turtles (FMV Demo, alt) - ttt_10 - Ticket Tac Toe (1.0) + tmntj + Teenage Mutant Ninja Turtles (Japan 4 Players, version 2) - tturf - Tough Turf (set 2, Japan, 8751 317-0104) + tmntu + Teenage Mutant Ninja Turtles (US 4 Players, version R) - tturfbl - Tough Turf (Datsu bootleg) + tmntua + Teenage Mutant Ninja Turtles (US 4 Players, version N) - tturfu - Tough Turf (set 1, US, 8751 317-0099) + tmntub + Teenage Mutant Ninja Turtles (US 4 Players, version J) - tubeit - Tube-It + tmntuc + Teenage Mutant Ninja Turtles (US 4 Players, version H) - tubep - Tube Panic + tmosh + Tokimeki Memorial Oshiete Your Heart (GQ673 JAA) - tubepb - Tube Panic (bootleg) + tmoshs + Tokimeki Memorial Oshiete Your Heart Seal Version (GE755 JAA) - tugboat - Tugboat + tmoshsp + Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAB) - tumbleb - Tumble Pop (bootleg) + tmoshspa + Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAA) - tumbleb2 - Tumble Pop (bootleg with PIC) + tmpdoki + Tokimeki Mahjong Paradise - Doki Doki Hen - tumblep - Tumble Pop (World) + tmspoker + unknown TMS9980 poker game - tumblepba - Tumble Pop (Playmark bootleg) + tmwrp_l2 + Time Warp (Williams, L-2) - tumblepj - Tumble Pop (Japan) + tmwrp_l3 + Time Warp (Williams, L-3) - tunhunt - Tunnel Hunt + tmwrp_t2 + Time Warp (Williams, T-2) - tunhuntc - Tunnel Hunt (Centuri) + tndrcade + Thundercade / Twin Formation - turbo - Turbo + tndrcadej + Tokusyu Butai U.A.G. (Japan) - turboa - Turbo (encrypted set 1) + tndrcadj + Tokusyu Butai U.A.G. (Japan) - turbob - Turbo (encrypted set 2) + tnexspce + The Next Space - turbofrc - Turbo Force (old revision) + tnextspc + The Next Space (set 1) - turbosub - Turbo Sub (prototype rev. TSCA) + tnextspc2 + The Next Space (set 2) - turbosub6 - Turbo Sub (prototype rev. TSC6) + tnextspcj + The Next Space (Japan) - turbosub7 - Turbo Sub (prototype rev. TSC7) + tnk3 + T.N.K III (US) - turbotag - Turbo Tag (prototype) + tnk3b + T.A.N.K (bootleg, 8-way joystick) - turfmast - Neo Turf Masters / Big Tournament Golf + tnk3j + T.A.N.K (Japan) - turkhunt - Turkey Hunting USA V1.0 + tnzs + The NewZealand Story (World, new version) (P0-043A PCB) - turpin - Turpin + tnzs2 + The NewZealand Story (World, old version) (P0-041A PCB) - turpins - Turpin (bootleg on Scramble hardware) + tnzsb + The NewZealand Story (World, new version) (P0-043A PCB) - turrett - Turret Tower + tnzsj + The NewZealand Story (Japan, new version) (P0-043A PCB) - turtles - Turtles + tnzsjo + The NewZealand Story (Japan, old version) (P0-041A PCB) - turtship - Turtle Ship (North America) + tnzso + The NewZealand Story (World, old version) (P0-041A PCB) - turtshipj - Turtle Ship (Japan) + tnzsoa + The NewZealand Story (World, unknown version) (P0-041A PCB) - turtshipk - Turtle Ship (Korea) + tnzsop + The NewZealand Story (World, prototype) (P0-041-1 PCB) - tutankhm - Tutankham + tnzsuo + The NewZealand Story (US, old version) (P0-041A PCB) - tutankhms - Tutankham (Stern Electronics) + todruaga + The Tower of Druaga (New Ver.) - tutstomb - Tut's Tomb + todruagao + The Tower of Druaga (Old Ver.) - tv21 - T.V. 21 + todruagas + The Tower of Druaga (Sidam) - tv21_3 - T.V. 21 III + todruago + Tower of Druaga (Old Ver.) - tvablast - Aero Blasters (Tourvision PCE bootleg) + toffy + Toffy - tvcolumn - Columns (Tourvision PCE bootleg) + togenkyo + Tougenkyou (Japan 890418) - tvdunexp - Dungeon Explorer (Tourvision PCE bootleg) + toggle + Toggle (prototype) - tvflaptw - Final Lap Twin (Tourvision PCE bootleg) + toki + Toki (World, set 1) - tvfsoc90 - Formation Soccer - Human Cup '90 (Tourvision PCE bootleg) + tokia + Toki (World, set 2) - tvgomola - Gomola Speed (Tourvision PCE bootleg) + tokib + Toki (Datsu bootleg) - tvjchan - Jackie Chan (Tourvision PCE bootleg) + tokij + JuJu Densetsu (Japan) - tvlegaxe - Makyo Densetsu - The Legenary Axe (Tourvision PCE bootleg) + tokimbsj + Tokimeki Bishoujo [BET] (Japan) - tvpcgen2 - PC Genjin 2 - Pithecanthropus Computerurus (Tourvision PCE bootleg) + tokims + Toki (Modular System) - tvpoker - T.V. Poker + tokio + Tokio / Scramble Formation (newer) - tvpow11 - Power Eleven (Tourvision PCE bootleg) + tokiob + Tokio / Scramble Formation (bootleg) - tvpwlg4 - Power League IV (Tourvision PCE bootleg) + tokioo + Tokio / Scramble Formation (older) - tvrs2 - Rastan Saga II (Tourvision PCE bootleg) + tokiou + Tokio / Scramble Formation (US) - tvsci - Special Criminal Investigation (Tourvision PCE bootleg) + tokip + Toki (US, prototype?) - tvsssold - Super Star Soldier (Tourvision PCE bootleg) + tokisens + Toki no Senshi - Chrono Soldier (MC-8123, 317-0040) - tvsvball - Super Volley ball (Tourvision PCE bootleg) + tokisensa + Toki no Senshi - Chrono Soldier (prototype?) - tvthbld - Thunder Blade (Tourvision PCE bootleg) + tokiu + Toki (US, set 1) - tvusapb - USA Pro Basketball (Tourvision PCE bootleg) + tokiua + Toki (US, set 2) - tvvolfd - Volfied (Tourvision PCE bootleg) + tokkae + Taisen Tokkae-dama (ver JAA) - twcup98 - Tecmo World Cup '98 (JUET 980410 V1.000) + tokyobus + Tokyo Bus Guide (Japan, Rev A) - twinactn - Twin Action + tokyocop + Tokyo Cop (US, dedicated version) - twinadv - Twin Adventure (World) + tokyocopi + Tokyo Cop (Italy) - twinadvk - Twin Adventure (Korea) + tokyocopk + Tokyo Cop (US, kit version) - twinbee - TwinBee (ROM version) + tokyogal + Tokyo Gal Zukan (Japan) - twinbrat - Twin Brats (set 1) + tokyowar + Tokyo Wars (Rev. TW2 Ver.A, World) - twinbrata - Twin Brats (set 2) + tom_06 + Theatre Of Magic (0.6a) - twincobr - Twin Cobra (World) + tom_10f + Theatre Of Magic (1.0 French) - twincobru - Twin Cobra (US) + tom_12 + Theatre Of Magic (1.2X) - twineag2 - Twin Eagle II - The Rescue Mission + tom_12a + Theatre Of Magic (1.2A) - twineagl - Twin Eagle - Revenge Joe's Brother + tom_13 + Theatre Of Magic (1.3X) - twinfalc - Twin Falcons + tom_14h + Theatre Of Magic (1.4H) - twinhawk - Twin Hawk (World) + tomagic + Tom Tom Magic - twinhawku - Twin Hawk (US) + tomahaw5 + Tomahawk 777 (Revision 5) - twinkle - Twinkle + tomahawk + Tomahawk 777 (rev 5) - twinqix - Twin Qix (Ver 1.0A 1995/01/17) (Prototype) + tomahawk1 + Tomahawk 777 (rev 1) - twins - Twins (set 1) + tomcat + TomCat (prototype) - twinsa - Twins (set 2) + tomcatsw + TomCat (Star Wars hardware, prototype) - twinspri - Twinkle Star Sprites + tomy_102 + The Who's Tommy Pinball Wizard (USA 1.02, display A3.00) - twinsqua - Twin Squash + tomy_300h + The Who's Tommy Pinball Wizard (Dutch 3.00, display A3.00) - twocrude - Two Crude (US) + tomy_400 + The Who's Tommy Pinball Wizard (USA 4.00, display A4.00) - twotiger - Two Tigers (dedicated) + tondemo + Tondemo Crisis (Japan) - twotigerc - Two Tigers (Tron conversion) + tonpuu + Ton Puu Mahjong [BET] (Japan) - twrldc94 - Tecmo World Cup '94 (set 1) + tonton + Waku Waku Doubutsu Land TonTon (Japan) - twrldc94a - Tecmo World Cup '94 (set 2) + tontonb + Tonton [BET] (Japan, set 1) - twrshaft - Tower & Shaft + tonypok + Poker Master (Tony-Poker V3.A, hack?) - tws96 - Tecmo World Soccer '96 + toobin + Toobin' (rev 3) - twst_300 - Twister (3.00) + toobin1 + Toobin' (rev 1) - twst_404 - Twister (4.04) + toobin2 + Toobin' (rev 2) - twst_405 - Twister (4.05) + toobin2e + Toobin' (Europe, rev 2) - tx1 - TX-1 (World) + toobine + Toobin' (Europe, rev 3) - tx1jb - TX-1 (Japan rev. B) + toobing + Toobin' (German, rev 3) - tx1jc - TX-1 (Japan rev. C) + top21 + Top XXI (Version 1.2) - txsector - TX-Sector + topaz + Topaz (Inder) - tylz - Tylz (prototype) + topaz_l1 + Topaz (Shuffle) (L-1) - typhoon - Typhoon + topbana + Top Banana (0100550V, NSW/ACT) - tz_92 - Twilight Zone (9.2) + topbladv + Top Blade V - tz_94ch - Twilight Zone (9.4CH) + topgame + Top Game Laser L10 (Bingo) - tz_94h - Twilight Zone (9.4H) + topgamet + Top Game Turbo (Bingo) - tz_h7 - Twilight Zone (H-7) + topgear + Top Gear (4VXFC969, New Zealand) - tz_h8 - Twilight Zone (H-8) + topgun + Vs. Top Gun - tz_ifpa - Twilight Zone (IFPA rules) + topgunbl + Top Gunner (bootleg, Rotary Joystick) - tz_l1 - Twilight Zone (L-1) + topgunnr + Top Gunner (Exidy) - tz_l2 - Twilight Zone (L-2) + topgunr + Top Gunner (US, 8-way Joystick) - tz_l3 - Twilight Zone (L-3) + tophuntr + Top Hunter - Roddy & Cathy (NGM-046) - tz_l4 - Twilight Zone (L-4) + tophuntrh + Top Hunter - Roddy & Cathy (NGH-046) - tz_p3 - Twilight Zone (P-3) + topland + Top Landing (World) - tz_p4 - Twilight Zone (P-4) + toplandj + Top Landing (Japan) - tz_pa1 - Twilight Zone (PA-1) + toppin + Top Pin - uballoon - Ultra Balloon + toppyrap + Toppy & Rappy - uboat65 - U-boat 65 + topracer + Top Racer (with MB8841 + MB8842, 1984) - uccops - Undercover Cops (World) + topracera + Top Racer (with MB8841 + MB8842, 1983) - uccopsar - Undercover Cops - Alpha Renewal Version + topracern + Top Racer (no MB8841 + MB8842) - uccopsj - Undercover Cops (Japan) + toprdice + Touch of Paradice (20007511, NSW/ACT) - uccopsu - Undercover Cops (US) + toprollr + Top Roller - uchuuai - Mahjong Uchuu yori Ai wo komete (Japan) + topsecex + Top Secret (Exidy) (version 1.0) - ucytokyu - Uchuu Tokkyuu Medalian + topsecrt + Top Secret (Japan, old revision) - uecology - Ultimate Ecology (Japan 931203) + topsecrt2 + Top Secret (Japan, revision B) - ufo_x - UFO-X + topshoot + Top Shooter - ufosensi - Ufo Senshi Yohko Chan (MC-8123, 317-0064) + topshta6 + Top Shot (30123211, NSW/ACT) - ufosensib - Ufo Senshi Yohko Chan (bootleg, not encrypted) + topskatr + Top Skater (Export, Revision A) - ultennis - Ultimate Tennis + topskatrj + Top Skater (Japan) - ultennisj - Ultimate Tennis (v 1.4, Japan) + topskatru + Top Skater (USA, Revision A) - ultrainv - Ultra Invaders + topskatruo + Top Skater (USA) - ultraman - Ultraman (Japan) + topsound + Top Sound (French) - ultramhm - Ultra Maru-hi Mahjong (Japan) + topspedu + Top Speed (US) - ultratnk - Ultra Tank + topspeed + Top Speed (World) - ultrax - Ultra X Weapons / Ultra Keibitai + topspeedu + Top Speed (US) - ultrchmp - Se Gye Hweng Dan Ultra Champion (Korea) + toptcash + Top T. Cash - ultrchmph - Cheng Ba Shi Jie - Chao Shi Kong Guan Jun (Taiwan) + toramich + Tora e no Michi (Japan) - umanclub - Ultraman Club - Tatakae! Ultraman Kyoudai!! + torarech + Torarechattano - AV Kantoku Hen (Japan) - umipoker - Umi de Poker / Marine Paradise (Japan) + toratora + Tora Tora (prototype?) - umk3 - Ultimate Mortal Kombat 3 (rev 1.2) + toratorab + Tora Tora (set 2) - umk3r10 - Ultimate Mortal Kombat 3 (rev 1.0) + torch + Torch - umk3r11 - Ultimate Mortal Kombat 3 (rev 1.1) + torgods + Torch of the Gods (10000411, NSW/ACT) - unclepoo - Uncle Poo + toride2g + Toride II Adauchi Gaiden - undefeat - Under Defeat (GDL-0035) + toride2gg + Toride II Adauchi Gaiden (German) - undoukai - The Undoukai (Japan) + toride2gk + Toride II Bok Su Oi Jeon Adauchi Gaiden (Korea) - undrfire - Under Fire (World) + toride2j + Toride II (Japan) - undrfirej - Under Fire (Japan) + tornado1 + Tornado (set 1, Defender bootleg) - undrfireu - Under Fire (US) + tornado2 + Tornado (set 2, Defender bootleg) - uniwars - UniWar S + tornbase + Tornado Baseball / Ball Park - unkch1 - New Cherry Gold '99 (bootleg of Super Cherry Master) (set 1) + torp_a16 + Torpedo Alley (1.6) - unkch2 - Super Cherry Gold (bootleg of Super Cherry Master) + torp_e21 + Torpedo Alley (2.1, Europe) - unkch3 - New Cherry Gold '99 (bootleg of Super Cherry Master) (set 2) + tortufam + Tortuga Family (Italian) - unkch4 - Grand Cherry Master (bootleg of Super Cherry Master) + torus + Torus - unkh8gam - unknown H8 Italian Gambling game + toryumon + Toryumon - unkhorse - unknown Japanese horse gambling game + totan_04 + Tales Of The Arabian Nights (0.4) - unkpacg - unknown Pac-Man gambling game + totan_12 + Tales Of The Arabian Nights (1.2) - unsquad - U.N. Squadron (USA) + totan_13 + Tales Of The Arabian Nights (1.3) - untoucha - Untouchable (Japan) + totan_14 + Tales Of The Arabian Nights (1.4) - uopoko - Puzzle Uo Poko (International) + totc + Treasure of the Caribbean - uopokoj - Puzzle Uo Poko (Japan) + totcarn + Total Carnage (rev LA1 03/10/92) - upndown - Up'n Down (315-5030) + totcarnp + Total Carnage (prototype, proto v 1.0 01/25/92) - upndownu - Up'n Down (not encrypted) + totd + The Typing of the Dead (Rev A) - upscope - Up Scope + totdo + The Typing of the Dead - upyoural - Up Your Alley + totem + Totem - urashima - Otogizoushi Urashima Mahjong (Japan) + totlvica + Total Vice (ver AAB) - usafootb - U.S.A. Football + totlvice + Total Vice (ver EBA) - usagi - Usagi (V2.02J) + totlvicj + Total Vice (ver JAD) - usagiol - Usagi Online (v2.04J) + totlvicu + Total Vice (ver UAC) - usagiym - Usagi - Yamashiro Mahjong Hen (GDL-0022) + totmejan + Tottemo E Jong - usclssic - U.S. Classic + toto + Come Back Toto - usg182 - Games V18.2 + touchdn + Touchdown - usg185 - Games V18.5 + toucheme + Touche Me (set 1) - usg187c - Games V18.7C + touchemea + Touche Me (set 2, harder) - usg32 - Super Duper Casino (California V3.2) + touchgo + Touch & Go (World) - usg82 - Super Ten V8.2 + touchgoe + Touch & Go (earlier revision) - usg83x - Super Ten V8.3X + touchgok + Touch & Go (Korea, unprotected) - usgames - Games V25.4X + touchgon + Touch & Go (Non North America) - usvsthem - Us vs. Them + toukon3 + Shin Nihon Pro Wrestling Toukon Retsuden 3 Arcade Edition (Japan, TR1/VER.A) - utoukond - Ultra Toukon Densetsu (Japan) + toukon4 + Shin Nihon Pro Wrestling Toukon Retsuden 4 Arcade Edition (Japan, TRF1 Ver.A) - v4addlad - Adders and Ladders (v2.1) (MPU4 Video) + tour4000 + Tour 4000 - v4addlad20 - Adders and Ladders (v2.0) (MPU4 Video) + tour4010 + Tour 4010 - v4barqs2 - Barquest 2 (v0.3) (MPU4 Video) + tourpgum + unknown Paradise Automatique / TourVisión bowling themed poker game with gum prizes (France) - v4barqst - Barquest (v2.6d) (MPU4 Video) + toursol + Tournament Solitaire (V1.06, 08/03/95) - v4big40 - Big 40 Poker (Bwb) (MPU4 Video) + toursol1 + Tournament Solitaire (V1.04, 06/22/95) - v4bigfrt - Big Fruits (v2.0?) (MPU4 Video) + tourtab2 + Tournament Table (set 2) - v4bios - MPU4 Video Firmware + tourtabl + Tournament Table (set 1) - v4blox - Blox (v2.0) (MPU4 Video) + touryuu + Touryuumon (V1.1)? - v4bloxd - Blox (v2.0, Datapak) (MPU4 Video) + toutango + Toucan Tango (0100782V, NSW/ACT) - v4bubbnk - Bubbly Bonk (v4.0?) (MPU4 Video) + toutangonl + Toucan Tango (0301388V, Holland) - v4bulblx - Bullion Blox (Bwb) (MPU4 Video) + toutrun + Turbo Out Run (Out Run upgrade) (FD1094 317-0118) - v4cmaze - The Crystal Maze (v1.3) (MPU4 Video) + toutrun1 + Turbo Out Run (deluxe cockpit) (FD1094 317-0109) - v4cmaze2 - The New Crystal Maze Featuring Ocean Zone (v2.2) (MPU4 Video) + toutrun2 + Turbo Out Run (cockpit) (FD1094 317-0106) - v4cmaze2a - The New Crystal Maze Featuring Ocean Zone (v0.1, AMLD) (MPU4 Video) + toutrun2d + Turbo Out Run (cockpit) (bootleg of FD1094 317-0106 set) - v4cmaze2b - The New Crystal Maze Featuring Ocean Zone (v2.0) (MPU4 Video) + toutrun3 + Turbo Out Run (cockpit) (FD1094 317-0107) - v4cmaze2c - The New Crystal Maze Featuring Ocean Zone (v?.?) (MPU4 Video) + toutrun3d + Turbo Out Run (cockpit) (bootleg of FD1094 317-0107 set) - v4cmaze2d - The New Crystal Maze Featuring Ocean Zone (v2.2, Datapak) (MPU4 Video) + toutrund + Turbo Out Run (Out Run upgrade) (bootleg of FD1094 317-0118 set) - v4cmaze3 - The Crystal Maze Team Challenge (v0.9) (MPU4 Video) + toutrunj + Turbo Out Run (Japan, Out Run upgrade) (FD1094 317-0117) - v4cmaze3a - The Crystal Maze Team Challenge (v1.2, AMLD) (MPU4 Video) + toutrunj1 + Turbo Out Run (Japan, cockpit) (FD1094 317-0101) - v4cmaze3b - The Crystal Maze Team Challenge (v0.8) (MPU4 Video) + toutrunj1d + Turbo Out Run (Japan, cockpit) (bootleg of FD1094 317-0101 set) - v4cmaze3c - The Crystal Maze Team Challenge (v?.?) (MPU4 Video) + toutrunjd + Turbo Out Run (Japan, Out Run upgrade) (bootleg of FD1094 317-0117 set) - v4cmaze3d - The Crystal Maze Team Challenge (v0.9, Datapak) (MPU4 Video) + toyfight + Toy Fighter - v4cmazea - The Crystal Maze (v0.1, AMLD) (MPU4 Video) + toyland + Toy Land Adventure - v4cmazeb - The Crystal Maze (v1.2) (MPU4 Video) + toypop + Toypop - v4cmazec - The Crystal Maze (v1.3 alt) (MPU4 Video) + tp2m32 + Tetris Plus 2 (ver 1.0, MegaSystem 32 Version) - v4cmazed - The Crystal Maze (v1.1) (MPU4 Video) + tp84 + Time Pilot '84 (set 1) - v4cmazedat - The Crystal Maze (v1.3, Datapak) (MPU4 Video) + tp84a + Time Pilot '84 (set 2) - v4cshinf - Cash Inferno (Bwb) (MPU4 Video) + tp84b + Time Pilot '84 (set 3) - v4cybcas - Cyber Casino (Nova) (MPU4 Video) + tpgolf + Top Player's Golf (NGM-003 ~ NGH-003) - v4dbltak - Double Take (Bwb) (MPU4 Video) + tpoker2 + Turbo Poker 2 - v4dealem - Deal 'Em (MPU4 Conversion Kit, v7.0) + tqst + Treasure Quest - v4eyedwn - Eyes Down (v1.3) (MPU4 Video) + tqstp + Treasure Quest (Protocol) - v4eyedwnd - Eyes Down (v1.3, Datapak) (MPU4 Video) + trackflc + Track and Field (Centuri) - v4frfact - Fruit Factory (Bwb) (MPU4 Video) + trackfld + Track & Field - v4gldrsh - Gold Rush (Bwb) (MPU4 Video) + trackfldc + Track & Field (Centuri) - v4mate - The Mating Game (v0.4) (MPU4 Video) + trackfldnz + Track & Field (NZ bootleg?) - v4mated - The Mating Game (v0.4, Datapak) (MPU4 Video) + trackfldu + Track & Field (Centuri, unencrypted) - v4mazbel - Mazooma Belle (v2.5) (MPU4 Video) + trailblz + Trail Blazer - v4mazbla - Mazooma Belle (v1.5) (MPU4 Video) + trailer + Trailer - v4mdice - Miami Dice (Bwb) (MPU4 Video) + trally + Thrash Rally (ALM-003 ~ ALH-003) - v4megbuk - Megabucks Poker (Bwb) (MPU4 Video) + tranqgun + Tranquillizer Gun - v4miami - Miami Dice (Nova) (MPU4 Video) + transfrm + Transformer - v4missis - Mississippi Lady (Nova) (MPU4 Video) + travrusa + Traverse USA / Zippy Race - v4monte - Monte Carlo Or Bust (Bwb) (MPU4 Video) + travrusab + Traverse USA (bootleg, set 1) - v4opt3 - Option 3 (v1.0) (MPU4 Video) + travrusab2 + Traverse USA (bootleg, set 2) - v4opt3d - Option 3 (v1.0) (Datapak) (MPU4 Video) + trbwtchs + Trouble Witches AC (v1.00J) - v4ovrmn3 - Over Moon Pt3 (Bwb) (MPU4 Video) + trckydoc + Tricky Doc (set 1) - v4picdil - Piccadilly Nights (Nova) (MPU4 Video) + trckydoca + Tricky Doc (set 2) - v4psi - Prize Space Invaders (v1.1) (MPU4 Video) + treacity + Treasure City (Ver. 208) - v4psia - Prize Space Invaders (v1.2) (MPU4 Video) + treacity202 + Treasure City (Ver. 202) - v4psib - Prize Space Invaders (v2.0?) (MPU4 Video) + treahunt + Treasure Hunt - v4pztet - Prize Tetris (Bwb) (MPU4 Video, set 1) + treamary + Treasure Mary - v4pzteta - Prize Tetris (Bwb) (MPU4 Video, set 2) + trebltop + Treble Top (39-360-070) - v4quidgr - Ten Quid Grid (v1.2) (MPU4 Video) + trebol + Trebol - v4quidgr2 - Ten Quid Grid (v2.4) (MPU4 Video) + trek_110 + Star Trek 25th Anniversary (USA 1.10, display A1.06) - v4quidgr2d - Ten Quid Grid (v2.4, Datapak) (MPU4 Video) + trek_110_a027 + Star Trek 25th Anniversary (USA 1.10, display A0.27) - v4quidgrd - Ten Quid Grid (v1.2, Datapak) (MPU4 Video) + trek_117 + Star Trek 25th Anniversary (USA 1.17, display A1.09) - v4redhtp - Red Hot Poker (20p/10GBP Cash, release 3) (MPU4 Video) + trek_120 + Star Trek 25th Anniversary (USA 1.20, display A1.06) - v4rencas - Reno Casino (Bwb) (MPU4 Video) + trek_200 + Star Trek 25th Anniversary (USA 2.00, display A1.09) - v4reno - Reno Reels (20p/10GBP Cash, release A) (MPU4 Video) + trek_201 + Star Trek 25th Anniversary (USA 2.01, display A1.09) - v4rhmaz - Red Hot Mazooma Belle (Bwb) (MPU4 Video) + trgheart + Trigger Heart Exelica Ver.A (Japan) (GDL-0036A) - v4shpwnd - Shop Window (v2.0) (MPU4 Video) + trghearto + Trigger Heart Exelica (Japan) (GDL-0036) - v4sixx - 6-X (Bwb) (MPU4 Video) + tricksht + Trick Shooter - v4sklcsh - Skill Cash (v1.1) (MPU4 Video) + tricktrp + Trick Trap (World?) - v4skltrk - Skill Trek (v1.1) (MPU4 Video, set 1) + trident + Trident - v4skltrka - Skill Trek (v1.1) (MPU4 Video, set 2) + tridento + Trident (Older set) - v4strike - Strike it Lucky (v0.5) (MPU4 Video) + trigon + Trigon (Japan) - v4strike2 - Strike it Lucky (v0.53) (MPU4 Video) + trikitri + Triki Triki (Lover Boy bootleg) - v4strike2d - Strike it Lucky (v0.53, Datapak) (MPU4 Video) + triothep + Trio The Punch - Never Forget Me... (World) - v4striked - Strike it Lucky (v0.5, Datapak) (MPU4 Video) + triothepj + Trio The Punch - Never Forget Me... (Japan) - v4sunbst - Sunburst (Bwb) (MPU4 Video) + tripdraw + Tripple Draw (V3.1 s) - v4tetrs - BwB Tetris v 2.2 (MPU4 Video) + tripjok + Triple Joker (Bingo) - v4time - Time Machine (v2.0) (MPU4 Video) + triplay + Chicago Cubs' Triple Play - v4timebn - Time Bandit (Bwb) (MPU4 Video) + triplaya + Chicago Cubs' Triple Play (alternate set) - v4turnov - Turnover (v2.3) (MPU4 Video) + triplayg + Chicago Cubs' Triple Play (German) - v4vgpok - Vegas Poker (prototype, release 2) (MPU4 Video) + triplep + Triple Punch (set 1) - v4wize - Wize Move (v1.3d) (MPU4 Video) + triplepa + Triple Punch (set 2) - v4wizea - Wize Move (v1.2) (MPU4 Video) + triplew1 + Mahjong Triple Wars (Japan) - valkyrie - Valkyrie No Densetsu (Japan) + triplew2 + Mahjong Triple Wars 2 (Japan) - valtric - Valtric + triplfun + Triple Fun - vamphalf - Vamf x1/2 (Europe) + triplhnt + Triple Hunt - vamphalfk - Vamp x1/2 (Korea) + tripool + Tri-Pool (Casino Tech) - vampj - Vampire: The Night Warriors (Japan 940705) + tripoola + Tri-Pool (Costal Games) - vampja - Vampire: The Night Warriors (Japan 940705 alt) + trisport + Tri-Sports - vampjr1 - Vampire: The Night Warriors (Japan 940630) + tritreat + Triple Treat (0201692V, NSW/ACT) - vandyke - Vandyke (Japan) + trivia + Trivia (Rev B) [TTL] - vandykeb - Vandyke (bootleg with PIC16c57) + trivia12 + Trivial Pursuit (Think Tank - Genus Edition) (12/14/84) - vandykejal - Vandyke (Jaleco, set 1) + triviabb + Trivial Pursuit (Baby Boomer Edition) (3/20/85) - vandykejal2 - Vandyke (Jaleco, set 2) + triviaes + Trivial Pursuit (Volumen III, Spanish, Maibesa license) - vangrd2 - Vanguard II + triviaes2 + Trivial Pursuit (Volumen II, Spanish, Maibesa license) - vanguard - Vanguard (SNK) + triviaes4 + Trivial Pursuit (Volumen IV, Spanish, Maibesa hardware) - vanguardc - Vanguard (Centuri) + triviaes5 + Trivial Pursuit (Volumen V, Spanish, Maibesa hardware) - vanguardj - Vanguard (Japan) + triviag1 + Trivial Pursuit (Think Tank - Genus Edition) (set 1) - vanilla - Mahjong Vanilla Syndrome (Japan) + triviag2 + Trivial Pursuit (Genus II Edition) - vanvan - Van-Van Car + trivialp + Trivial Pursuit (New Edition) (prod. 1D) - vanvanb - Van-Van Car (Karateco set 2) + trivialpd + Trivial Pursuit (New Edition) (prod. 1D) (Protocol) - vanvank - Van-Van Car (Karateco set 1) + trivialpo + Trivial Pursuit - vaportra - Vapor Trail - Hyper Offence Formation (World revision 1) + triviaqz + Professor Trivia (set 1) - vaportra3 - Vapor Trail - Hyper Offence Formation (World revision 3?) + triviaqz2 + Professor Trivia (set 2) - vaportrau - Vapor Trail - Hyper Offence Formation (US) + triviasp + Trivial Pursuit (All Star Sports Edition) - vaportrx - Vapor TRX + triviayp + Trivial Pursuit (Young Players Edition) - vaportrxp - Vapor TRX (prototype) + trivquiz + Triv Quiz - varth - Varth: Operation Thunderstorm (World 920714) + trivrus + Trivia R Us (v1.07) - varthj - Varth: Operation Thunderstorm (Japan 920714) + trizeal + Trizeal (Japan) (GDL-0026) - varthr1 - Varth: Operation Thunderstorm (World 920612) + trizn_l1 + Tri Zone (L-1) - varthu - Varth: Operation Thunderstorm (USA 920612) + trizn_t1 + Tri Zone (T-1) - vasara - Vasara + troangel + Tropical Angel - vasara2 - Vasara 2 (set 1) + trocana + Trocana - vasara2a - Vasara 2 (set 2) + trog + Trog (rev LA5 3/29/91) - vastar - Vastar (set 1) + trog3 + Trog (rev LA3 2/14/91) - vastar2 - Vastar (set 2) + trog3a + Trog (rev LA3 2/10/91) - vastar3 - Vastar (set 3) + trog4 + Trog (rev LA4 3/11/91) - vastar4 - Vastar (set 4) + trogp + Trog (prototype, rev 4.00 07-27-90) - vathlete - Virtua Athletics / Virtua Athlete (GDS-0019) + trogpa4 + Trog (prototype, rev 4.00 7/27/90) - vautour - Vautour (bootleg of Phoenix) (8085A CPU) + trogpa5 + Trog (prototype, rev PA5-PAC 8/28/90) - vautourz - Vautour (bootleg of Phoenix) (Z80 CPU) + trogpa6 + Trog (prototype, rev PA6-PAC 9/09/90) - vball - U.S. Championship V'ball (US) + trojan + Trojan (US set 1) - vball2pj - U.S. Championship V'ball (Japan) + trojana + Trojan (US set 2) - vball2pjb - U.S. Championship V'ball (bootleg of Japan set) + trojanb + Trojan (bootleg) - vballb - U.S. Championship V'ball (bootleg of US set) + trojanj + Tatakai no Banka (Japan) - vblokbrk - VS Block Breaker (Asia) + trojanr + Trojan (Romstar) - vbowl - Virtua Bowling (World, V101XCM) + trojhors + Trojan Horse (01J00851, NSW/ACT) - vbowlj - Virtua Bowling (Japan, V100JCM) + tron + Tron (8/9) - vcarn - Video Carnival 1999 / Super Royal Card (Version 0.11) + tron2 + Tron (6/25) - vcircle - Vicious Circle (prototype) + tron3 + Tron (6/17) - vcombat - Virtual Combat + tron4 + Tron (6/15) - vcop - Virtua Cop (Revision B) + tron5 + Tron (5/12) - vcop2 - Virtua Cop 2 + tronfp + Tron (freeplay) - vcop3 - Virtua Cop 3 (Rev A) (GDX-0003A) + tronger + Tron (Germany) - vcopa - Virtua Cop (Revision A) + troopy + Troopy (bootleg of Mr. Kougar) - vector - Vector + trophyh + Trophy Hunting - Bear & Moose V1.00 - vega - Vega + trophyht + Trophy Hunting - Bear & Moose V1.00 (location test) - vegas - Vegas + trpdlght + Tropical Delight (0100269V, NSW/ACT) - vegasfst - Royal Vegas Joker Card (fast deal) + trpdlghtu + Tropical Delight (PHG0625-02, US) - vegasfte - Royal Vegas Joker Card (fast deal, English gfx) + trsking + Treasure King (0152570, US) - vegasgp - Vegas (Game Plan) + trstar + Top Ranking Stars (Ver 2.1O 1993/05/21) (New Version) - vegasmil - Royal Vegas Joker Card (fast deal, Mile) + trstar2k + Triple Star 2000 - vegasslw - Royal Vegas Joker Card (slow deal) + trstarj + Top Ranking Stars (Ver 2.1J 1993/05/21) (New Version) - vegast - Vegas (Taito) + trstaro + Top Ranking Stars (Ver 2.1O 1993/05/21) (Old Version) - vendetta - Vendetta (World 4 Players ver. T) + trstaroj + Top Ranking Stars (Ver 2.1J 1993/05/21) (Old Version) - vendetta2p - Vendetta (World 2 Players ver. W) + trstrove + Treasure Trove (01J00161, NSW/ACT) - vendetta2pd - Vendetta (Asia 2 Players ver. D) + truckk + Truck Kyosokyoku (Japan, TKK2/VER.A) - vendetta2pu - Vendetta (Asia 2 Players ver. U) + trucksp2 + Truck Stop (P-2) - vendettaj - Crime Fighters 2 (Japan 2 Players ver. P) + trucksp3 + Truck Stop (P-3) - vendettar - Vendetta (World 4 Players ver. R) + truco + Truco-Tron - venture - Venture (version 5 set 1) + trucocl + Truco Clemente - venture2 - Venture (version 5 set 2) + truxton + Truxton / Tatsujin - venture4 - Venture (version 4) + truxton2 + Truxton II / Tatsujin Oh - venus - Venus (bootleg of Gyruss) + trvchlng + Trivia Challenge - version4 - Version 4 (Version 4.3R CGA) + trvgns + Trivia Genius - version4d2 - Version 4 (Version 4.3E CGA) + trvhang + Trivia Hangup (question set 1) - version4d3 - Version 4 (Version 4.3LT CGA) + trvhanga + Trivia Hangup (question set 2) - version4o - Version 4 (Version 4.2R CGA) + trvmadns + Trivia Madness - Series A Question set - version4v - Version 4 (Version 4.3R Dual) + trvmadnsa + Trivia Madness - Series B Question set - version4v2 - Version 4 (Version 4.3E Dual) + trvmstr + Trivia Master (set 1) - version4v3 - Version 4 (Version 4.3LT Dual) + trvmstra + Trivia Master (set 2) - vf - Virtua Fighter + trvmstrb + Trivia Master (set 3) - vf2 - Virtua Fighter 2 (Version 2.1) + trvmstrc + Trivia Master (set 4) - vf2a - Virtua Fighter 2 (Revision A) + trvquest + Trivia Quest - vf2b - Virtua Fighter 2 (Revision B) + trvwz2 + Trivia ? Whiz (6221-05, Edition 2) - vf2o - Virtua Fighter 2 + trvwz2a + Trivia ? Whiz (6221-05, Edition 2 Alt Sex trivia) - vf3 - Virtua Fighter 3 (Revision C) + trvwz3h + Trivia ? Whiz (6221-05, Edition 3) - vf3a - Virtua Fighter 3 (Revision A) + trvwz3ha + Trivia ? Whiz (6221-05, Edition 3 Sex trivia III) - vf3tb - Virtua Fighter 3 Team Battle + trvwz3v + Trivia ? Whiz (6221-04, Edition 3 Vertical) - vf4 - Virtua Fighter 4 (GDS-0012) + trvwz4 + Trivia ? Whiz (6221-13, U5-0B Edition 4) - vf4b - Virtua Fighter 4 (Rev B) (GDS-0012B) + trvwz4a + Trivia ? Whiz (6221-13, U5-0B Edition 4 Alt Sex trivia) - vf4c - Virtua Fighter 4 (Rev C) (GDS-0012C) + trvwzh + Trivia ? Whiz (6221-00) - vf4cart - Virtua Fighter 4 (Cartridge) + trvwzha + Trivia ? Whiz (6221-00, with Sex trivia) - vf4evo - Virtua Fighter 4 Evolution (Rev B) (GDS-0024B) + trvwzhb + Trivia ? Whiz (6221-00, Alt Gen trivia) - vf4evoa - Virtua Fighter 4 Evolution (Rev A) (GDS-0024A) + trvwzv + Trivia ? Whiz (6221-02, Vertical) - vf4evoct - Virtua Fighter 4 Evolution (Cartridge) + tryout + Pro Baseball Skill Tryout (Japan) - vf4tuned - Virtua Fighter 4 Final Tuned (Rev F) (GDS-0036F) + ts2 + Battle Arena Toshinden 2 (Euro 951124) - vf4tuneda - Virtua Fighter 4 Final Tuned (Rev A) (GDS-0036A) + ts2j + Battle Arena Toshinden 2 (Japan 951124) - vf4tunedd - Virtua Fighter 4 Final Tuned (Rev D) (GDS-0036D) + ts2ja + Battle Arena Toshinden 2 (Japan 951124, 32Mb mask ROMs) - vfive - V-Five (Japan) + ts2u + Battle Arena Toshinden 2 (USA 951124) - vfkids - Virtua Fighter Kids (JUET 960319 V0.000) + ts2ua + Battle Arena Toshinden 2 (USA 951124, 32Mb mask ROMs) - vformula - Virtua Formula + ts_la2 + The Shadow (LA-2) - vfremix - Virtua Fighter Remix (JUETBKAL 950428 V1.000) + ts_la4 + The Shadow (LA-4) - vfurlong - Net Select Keiba Victory Furlong + ts_lf6 + The Shadow (LF-6) French - vgoalsca - V Goal Soccer (set 2) + ts_lh6 + The Shadow (LH-6) - vgoalsoc - V Goal Soccer (set 1) + ts_lm6 + The Shadow (LM-6) Mild - vhunt2 - Vampire Hunter 2: Darkstalkers Revenge (Japan 970929) + ts_lx4 + The Shadow (LX-4) - vhunt2d - Vampire Hunter 2: Darkstalkers Revenge (Japan 970913 Phoenix Edition) (bootleg) + ts_lx5 + The Shadow (LX-5) - vhunt2r1 - Vampire Hunter 2: Darkstalkers Revenge (Japan 970913) + ts_pa1 + The Shadow (PA-1) - vhuntj - Vampire Hunter: Darkstalkers' Revenge (Japan 950316) + tsamura2 + Samurai Nihon-ichi (set 2) - vhuntjr1 - Vampire Hunter: Darkstalkers' Revenge (Japan 950307) + tsamurai + Samurai Nihon-Ichi (set 1) - vhuntjr1s - Vampire Hunter: Darkstalkers' Revenge (Japan 950307 stop version) + tsamurai2 + Samurai Nihon-Ichi (set 2) - vhuntjr2 - Vampire Hunter: Darkstalkers' Revenge (Japan 950302) + tsamuraih + Samurai Nihon-Ichi (bootleg, harder) - victlapw - Ace Driver: Victory Lap (Rev. ADV2) + tsarevna + Tsarevna (v1.29) - victnine - Victorious Nine + tsarevnaa + Tsarevna (v1.31) - victor21 - Victor 21 + tsclass + Trap Shoot Classic (v1.0 21-mar-1997) - victor5 - G.E.A. + tshingen + Shingen Samurai-Fighter (Japan, English) - victor6 - Victor 6 (v2.3N) + tshingena + Takeda Shingen (Japan, Japanese) - victor6a - Victor 6 (v2.3) + tshingna + Shingen Samurai-Fighter (Japan, English) - victor6b - Victor 6 (v1.2) + tshoot + Turkey Shoot (prototype) - victorba - Victor Banana + tsptr_l3 + Transporter the Rescue (L-3) - victory - Victory + tst_galx + Galaxian Test ROM - victoryp - Victory (Pinball) + tst_invd + Space Invaders Test ROM - victroad - Victory Road + tstrike + Thunder Strike (set 1) - videocba - Video Cordoba + tstrikea + Thunder Strike (set 2, older) - videodad - Video Dado + tstrk_l1 + Triple Strike (Shuffle) (L-1) - videomat - Videomat (Polish bootleg) + tsukande + Tsukande Toru Chicchi - videopin - Video Pinball + tsupenta + Tsurikko Penta - videopkr - Video Poker + tsurugi + Tsurugi (ver EAB) - videtrna - Videotron Poker (normal controls) + tsurugie + Tsurugi (ver EAB, alt) - videtron - Videotron Poker (cards selector, set 1) + tsurugij + Tsurugi (ver JAC) - videtron2 - Videotron Poker (cards selector, set 2) + tsururin + Tsururin Kun - vidvince - Video Vince and the Game Factory (prototype) + tsuwaku + Tsuugakuro no Yuuwaku (Japan) - viewpoin - Viewpoint + tt_game + unknown Toptronic pinball game - vigilant - Vigilante (World, set 1) + ttblock + T.T Block [TTL] - vigilant1 - Vigilante (World, set 2) + ttchamp + Table Tennis Champions - vigilantj - Vigilante (Japan) + ttchampa + Table Tennis Champions (Palencia Elektronik license) - vigilantu - Vigilante (US) + ttfitter + T.T Fitter (Japan) - vigilantu2 - Vigilante (US) - Rev. G + ttmahjng + T.T Mahjong - viking - Viking + tts_l1 + Tic-Tac-Strike (Shuffle) (L-1) - vikingt - Viking Treasure + tts_l2 + Tic-Tac-Strike (Shuffle) (L-2) - vimana - Vimana (World, set 1) + ttsracec + T.T. Speed Race CL [TTL] - vimanaj - Vimana (Japan) + ttt_10 + Ticket Tac Toe (1.0) - vimanan - Vimana (World, set 2) + tturf + Tough Turf (set 2, Japan) (8751 317-0104) - vindctr2 - Vindicators Part II (rev 3) + tturfbl + Tough Turf (Datsu bootleg) - vindctr2r1 - Vindicators Part II (rev 1) + tturfu + Tough Turf (set 1, US) (8751 317-0099) - vindctr2r2 - Vindicators Part II (rev 2) + tubeit + Tube-It - vindictr - Vindicators (rev 5) + tubep + Tube Panic - vindictr1 - Vindicators (rev 1) + tubepb + Tube Panic (bootleg) - vindictr2 - Vindicators (rev 2) + tugboat + Tugboat - vindictr4 - Vindicators (rev 4) + tumbleb + Tumble Pop (bootleg) - vindictre - Vindicators (Europe, rev 5) + tumbleb2 + Tumble Pop (bootleg with PIC) - vindictre3 - Vindicators (Europe, rev 3) + tumblep + Tumble Pop (World) - vindictre4 - Vindicators (Europe, rev 4) + tumblep2 + Tumble Pop (bootleg set 2) - vindictrg - Vindicators (German, rev 1) + tumblepb + Tumble Pop (bootleg set 1) - viofight - Violence Fight (World) + tumblepba + Tumble Pop (Playmark bootleg) - viofightj - Violence Fight (Japan) + tumblepj + Tumble Pop (Japan) - viofightu - Violence Fight (US) + tunhunt + Tunnel Hunt - viostorm - Violent Storm (ver EAC) + tunhuntc + Tunnel Hunt (Centuri) - viostorma - Violent Storm (ver AAC) + tuningrc + Gaelco Championship Tuning Race - viostormab - Violent Storm (ver AAB) + turbo + Turbo (program 1513-1515) - viostormeb - Violent Storm (ver EAB) + turboa + Turbo (encrypted, program 1262-1264) - viostormj - Violent Storm (ver JAC) + turbob + Turbo (encrypted, program 1363-1365 rev C) - viostormu - Violent Storm (ver UAC) + turbobl + Indianapolis (bootleg of Turbo) - viostormub - Violent Storm (ver UAB) + turboc + Turbo (encrypted, program 1363-1365 rev B) - vipclub - Vip Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880310) + turbod + Turbo (encrypted, program 1363-1365 rev A) - viper - Viper + turboe + Turbo (encrypted, program 1363-1365) - viperp - Viper (Pinball) + turbofrc + Turbo Force (World, set 1) - viprp1 - Viper Phase 1 (New Version, World) + turbofrco + Turbo Force (World, set 2) - viprp1hk - Viper Phase 1 (Hong Kong) + turbofrcu + Turbo Force (US) - viprp1j - Viper Phase 1 (New Version, Japan) + turbosub + Turbo Sub (prototype rev. TSCA) - viprp1k - Viper Phase 1 (New Version, Korea) + turbosub6 + Turbo Sub (prototype rev. TSC6) - viprp1oj - Viper Phase 1 (Japan) + turbosub7 + Turbo Sub (prototype rev. TSC7) - viprp1ot - Viper Phase 1 (Germany) + turbotag + Turbo Tag (prototype) - viprp1s - Viper Phase 1 (New Version, Switzerland) + turfmast + Neo Turf Masters / Big Tournament Golf - viprp1u - Viper Phase 1 (New Version, US set 1) + turkhunt + Turkey Hunting USA V1.00 - viprp1ua - Viper Phase 1 (New Version, US set 2) + turpin + Turpin - viprsega - Viper Night Drivin' + turpins + Turpin (bootleg on Super Cobra hardware) - virnba - Virtua NBA (JPN, USA, EXP, KOR, AUS) + turrett + Turret Tower - virnbao - Virtua NBA (JPN, USA, EXP, KOR, AUS) (original) + turtles + Turtles - virnbap - Virtua NBA (prototype) + turtreas + Turtle Treasure (10234711, NSW/ACT) - vitaminc - Mahjong Vitamin C (Japan) + turtship + Turtle Ship (North America) - vivdolls - Vivid Dolls + turtshipj + Turtle Ship (Japan) - vlcno_1a - Volcano (Sound Only, alternate version) + turtshipk + Turtle Ship (Korea) - vlcno_1b - Volcano (Sound Only) + turtshipkn + Turtle Ship (Korea, 88/9) - vlcno_ax - Volcano + turtshipko + Turtle Ship (Korea, older) - vliner - V-Liner (set 1) + tutankhm + Tutankham - vlinero - V-Liner (set 2) + tutankhms + Tutankham (Stern Electronics) - vmahjong - Virtual Mahjong (J 961214 V1.000) + tutankst + Tutankham (Stern) - vmetal - Varia Metal + tutstomb + Tut's Tomb - vmetaln - Varia Metal (New Ways Trading Co.) + tv21 + T.V. 21 - voleybal - Voley Ball + tv21_3 + T.V. 21 III - volfied - Volfied (World, revision 1) + tvcapcom + Tatsunoko Vs Capcom : Cross Generation of Heroes - volfiedj - Volfied (Japan, revision 1) + tvdenwad + Terebi Denwa Doraemon - volfiedjo - Volfied (Japan) + tvpoker + T.V. Poker - volfiedo - Volfied (World) + twcup90 + Tecmo World Cup '90 (World set 1) - volfiedu - Volfied (US, revision 1) + twcup90a + Tecmo World Cup '90 (Euro set 1) - volfieduo - Volfied (US) + twcup90b + Tecmo World Cup '90 (Euro set 2) - vollyrmt - Volly (Ramtek) [TTL] + twcup90b1 + Euro League (Italian hack of Tecmo World Cup '90, set 1) - voltan - Voltan Escapes Cosmic Doom + twcup90b2 + Worldcup '90 (hack) - von - Cyber Troopers Virtual-On (USA, Revision B) + twcup90b3 + World Cup '90 (bootleg, set 2) - von2 - Virtual On 2: Oratorio Tangram (Revision B) + twcup90b4 + World Cup '90 (bootleg, set 3) - von254g - Virtual On 2: Oratorio Tangram (ver 5.4g) + twcup90ba + Euro League (Italian hack of Tecmo World Cup '90, set 2) - vonj - Cyber Troopers Virtual-On (Japan, Revision B) + twcup90bb + World Cup '90 (European hack, different title) - vonot - Virtual On Oratorio Tangram M.S.B.S. ver5.66 2000 Edition + twcup90c + Tecmo World Cup '90 (Euro set 3) - vortex - Vortex + twcup90t + Tecmo World Cup '90 (trackball set 1) - vortexp - Vortex (Pinball) + twcup94 + Tecmo World Cup '94 (set 1) - voyager - Star Trek: Voyager + twcup94a + Tecmo World Cup '94 (set 2) - vpoker - Videotronics Poker + twcup94b + Tecmo World Cup '94 (set 3) - vpool - Video Pool (bootleg on Moon Cresta hardware) + twcup98 + Tecmo World Cup '98 (JUET 980410 V1.000) - vr - Virtua Racing + twcupmil + Tecmo World Cup Millennium (Japan) - vrkon_l1 - Varkon (L-1) + twinactn + Twin Action - vrnwrld - Verne's World + twinadv + Twin Adventure (World) - vroulet - Vegas Roulette + twinadvk + Twin Adventure (Korea) - vs10yard - Vs 10-Yard Fight (World, 11/05/84) + twinbee + TwinBee (ROM version) - vs10yardj - Vs 10-Yard Fight (Japan) + twinbeeb + TwinBee (Bubble System) - vs10yardu - Vs 10-Yard Fight (US, Taito license) + twinbrat + Twin Brats (set 1) - vs2 - Virtua Striker 2 (Step 2.0) + twinbrata + Twin Brats (set 2) - vs2002ex - Virtua Striker 2002 (GDT-0002) + twinbratb + Twin Brats (set 3) - vs2002j - Virtua Striker 2002 (GDT-0001) + twinbskt + Twin Basket - vs215 - Virtua Striker 2 (Step 1.5) + twincobr + Twin Cobra (World) - vs215o - Virtua Striker 2 (Step 1.5, older) + twincobru + Twin Cobra (US) - vs298 - Virtua Striker 2 '98 (Step 2.0) + twincobu + Twin Cobra (US) - vs29815 - Virtua Striker 2 '98 (Step 1.5) + twineag2 + Twin Eagle II - The Rescue Mission - vs299 - Virtua Striker 2 '99 + twineagl + Twin Eagle - Revenge Joe's Brother - vs299a - Virtua Striker 2 '99 (Revision A) + twinfalc + Twin Falcons - vs299b - Virtua Striker 2 '99 (Revision B) + twinhawk + Twin Hawk (World) - vs2_2k - Virtua Striker 2 Ver. 2000 (JPN, USA, EXP, KOR, AUS) (Rev C) + twinhawku + Twin Hawk (US) - vs2v991 - Virtua Striker 2 '99.1 (Revision B) + twinhwku + Twin Hawk (US) - vs4 - Virtua Striker 4 (Export) (GDT-0015) + twinkle + Twinkle (set 1) - vs42006 - Virtua Striker 4 Ver.2006 (Japan) (Rev D) (GDT-0020D) + twinklea + Twinkle (set 2) - vs4j - Virtua Striker 4 (Japan) (Rev E) (GDT-0013E) + twinktmb + Twinkle Tale (bootleg of Mega Drive version) - vsav - Vampire Savior: The Lord of Vampire (Euro 970519) + twinqix + Twin Qix (Ver 1.0A 1995/01/17, prototype) - vsav2 - Vampire Savior 2: The Lord of Vampire (Japan 970913) + twins + Twins - vsav2d - Vampire Savior 2: The Lord of Vampire (Japan 970913 Phoenix Edition) (bootleg) + twinsed1 + Twins (Electronic Devices license, set 1) - vsava - Vampire Savior: The Lord of Vampire (Asia 970519) + twinsed2 + Twins (Electronic Devices license, set 2) - vsavd - Vampire Savior: The Lord of Vampire (Euro 970519 Phoenix Edition) (bootleg) + twinspri + Twinkle Star Sprites - vsavh - Vampire Savior: The Lord of Vampire (Hispanic 970519) + twinsqua + Twin Squash - vsavj - Vampire Savior: The Lord of Vampire (Japan 970519) + twocrude + Two Crude (US FT revision 1) - vsavu - Vampire Savior: The Lord of Vampire (USA 970519) + twocrudea + Two Crude (US FT version) - vsbball - Vs. BaseBall (US, set BA E-1) + twotiger + Two Tigers (dedicated) - vsbballj - Vs. BaseBall (Japan, set BA A-3) + twotigerc + Two Tigers (Tron conversion) - vsbballja - Vs. BaseBall (Japan, set BA A-2) + twotigra + Two Tigers (dedicated) - vsbballjb - Vs. BaseBall (Japan, set BA A-1) + twrshaft + Tower & Shaft - vsfdf - Vs. Freedom Force + tws96 + Tecmo World Soccer '96 - vsgongf - VS Gong Fight + twsoc96 + Tecmo World Soccer '96 - vsgradus - Vs. Gradius (US, set GR E) + twsoc98 + Tecmo World Soccer '98 (JUET 980410 V1.000) - vsgshoe - Vs. Gumshoe (set GM5) + twst_300 + Twister (3.00) - vshoot - J-League Soccer V-Shoot (Japan) + twst_404 + Twister (4.04) - vsmahjng - Vs. Mahjong (Japan) + twst_405 + Twister (4.05) - vsnetscr - Versus Net Soccer (ver EAD) + tx1 + TX-1 (World) - vsnetscra - Versus Net Soccer (ver AAA) + tx1jb + TX-1 (Japan rev. B) - vsnetscreb - Versus Net Soccer (ver EAB) + tx1jc + TX-1 (Japan rev. C) - vsnetscrj - Versus Net Soccer (ver JAB) + txsector + TX-Sector - vsnetscru - Versus Net Soccer (ver UAB) + txsectorf + TX-Sector (French) - vspinbal - Vs. Pinball (US, set PN4 E-1) + txsectorg + TX-Sector (German) - vspinbalj - Vs. Pinball (Japan, set PN3 B) + tylz + Tylz (prototype) - vspsx - Video System PSX + typhoon + Typhoon - vsskykid - Vs. Super SkyKid + tz_92 + Twilight Zone (9.2) - vsslalom - Vs. Slalom + tz_94ch + Twilight Zone (9.4CH) - vssoccer - Vs. Soccer (set SC4-2 A) + tz_94h + Twilight Zone (9.4H) - vssoccera - Vs. Soccer (set SC4-3 ?) + tz_h7 + Twilight Zone (H-7) - vstennis - Vs. Tennis (Japan/USA, set TE A-3) + tz_h8 + Twilight Zone (H-8) - vstennisa - Vs. Tennis (Japan/USA, set 2) + tz_ifpa + Twilight Zone (IFPA rules) - vstennisb - Vs. Tennis (Japan/USA, set 3) + tz_l1 + Twilight Zone (L-1) - vstetris - Vs. Tetris + tz_l2 + Twilight Zone (L-2) - vstrik3 - Virtua Striker 3 Ver. 2002 (GDS-0006) + tz_l3 + Twilight Zone (L-3) - vstrik3c - Virtua Striker 3 (USA, EXP, KOR, AUS) (Cart, Rev C) + tz_l4 + Twilight Zone (L-4) - vstrik3cb - Virtua Striker 3 (USA, EXP, KOR, AUS) (Cart, Rev B) + tz_l5 + Twilight Zone (L-5) - vstriker - Virtua Striker (Revision A) + tz_p3 + Twilight Zone (P-3) - vstrikero - Virtua Striker + tz_p4 + Twilight Zone (P-4) - vtenis2c - Virtua Tennis 2 / Power Smash 2 (JPN) (USA, EXP, KOR, AUS) (Cart, Rev A) + tz_pa1 + Twilight Zone (PA-1) - vtennis - Virtua Tennis (USA, EXP, KOR, AUS) / Power Smash (JPN) + uballoon + Ultra Balloon - vtennis2 - Virtua Tennis 2 / Power Smash 2 (Rev A) (GDS-0015A) + uboat65 + U-boat 65 - vtennisg - Virtua Tennis / Power Smash (GDS-0011) + uccops + Undercover Cops (World) - vulcan - Vulcan Venture (New) + uccopsar + Undercover Cops - Alpha Renewal Version (World) - vulcana - Vulcan Venture (Old) + uccopsaru + Undercover Cops - Alpha Renewal Version (US) - vulcanb - Vulcan Venture (Oldest) + uccopsj + Undercover Cops (Japan) - vulgus - Vulgus (set 1) + uccopsu + Undercover Cops (US) - vulgusa - Vulgus (set 2) + uchuuai + Mahjong Uchuu yori Ai wo komete (Japan) - vulgusj - Vulgus (Japan?) + ucytokyu + Uchuu Tokkyuu Medalian - wackadoo - Wack-A-Doodle-Doo (Redemption) + uecology + Ultimate Ecology (Japan 931203) - wacko - Wacko + ufo21 + UFO Catcher 21 - wakuwak7 - Waku Waku 7 + ufo800 + UFO Catcher 800 - wallc - Wall Crash (set 1) + ufo_x + UFO-X - wallca - Wall Crash (set 2) + ufomini + UFO Catcher Mini - wallst - Wall Street + uforobot + UFO Robot (Ver 1.0 Rev A) - wanganmd - Wangan Midnight (WMN1 Ver. A) + ufosensb + Ufo Senshi Yohko Chan (not encrypted) - wangmd2b - Wangan Midnight Maximum Tune 2 (Japan) (Rev A) (GDX-0016A) + ufosensi + Ufo Senshi Yohko Chan (MC-8123, 317-0064) - wangmid - Wangan Midnight Maximum Tune (Export) (Rev B) (GDX-0009B) + ufosensib + Ufo Senshi Yohko Chan (bootleg, not encrypted) - wangmid2 - Wangan Midnight Maximum Tune 2 (Export) (GDX-0015) + ultarctc + Ultimate Arctic Thunder - wanted - Wanted + ultarctcup + Ultimate Arctic Thunder Update CD ver 1.950 (5/3/04) - warcadia - Waga Seishun no Arcadia + ultennis + Ultimate Tennis - wardner - Wardner (World) + ultennisj + Ultimate Tennis (v 1.4, Japan) - wardnerj - Wardner no Mori (Japan) + ultracin + Waku Waku Ultraman Racing - warfa - War: The Final Assault + ultrainv + Ultra Invaders - wargods - War Gods (HD 10/09/1996 - Dual Resolution) + ultraman + Ultraman (Japan) - wargodsa - War Gods (HD 08/15/1996) + ultramhm + Ultra Maru-hi Mahjong (Japan) - wargodsb - War Gods (HD 12/11/1995) + ultratnk + Ultra Tank - warlords - Warlords + ultrax + Ultra X Weapons / Ultra Keibitai - warofbug - War of the Bugs or Monsterous Manouvers in a Mushroom Maze + ultraxg + Ultra X Weapons / Ultra Keibitai (Gamest review build) - warofbugg - War of the Bugs or Monsterous Manouvers in a Mushroom Maze (German) + ultrchmp + Se Gye Hweng Dan Ultra Champion (Korea) - warofbugu - War of the Bugs or Monsterous Manouvers in a Mushroom Maze (US) + ultrchmph + Cheng Ba Shi Jie - Chao Shi Kong Guan Jun (Taiwan) - warpsped - Warp Speed (prototype) + umanclub + Ultraman Club - Tatakae! Ultraman Kyoudai!! - warpwarp - Warp & Warp + umipoker + Umi de Poker / Marine Paradise (Japan) - warpwarpr - Warp Warp (Rock-Ola set 1) + umk3 + Ultimate Mortal Kombat 3 (rev 1.2) - warpwarpr2 - Warp Warp (Rock-Ola set 2) + umk3p + Ultimate Mortal Kombat 3 Plus (Beta 1) - warrior - Warrior + umk3pb1 + Ultimate Mortal Kombat 3 Plus (Hack, Beta 1) - warriorb - Warrior Blade - Rastan Saga Episode III (Japan) + umk3r10 + Ultimate Mortal Kombat 3 (rev 1.0) - warzard - Warzard (Japan 961121) + umk3r11 + Ultimate Mortal Kombat 3 (rev 1.1) - warzardr1 - Warzard (Japan 961023) + umk3te + Ultimate Mortal Kombat 3 Tournament Edition (hack, V2.0.042/August 2018) - waterski - Water Ski + umk3uk + Ultimate Mortal Kombat 3 Uk (Hack, Ver. 2022-01-19) - waterwld - Waterworld (rev.3) + unclepoo + Uncle Poo - waterwld2 - Waterworld (rev.2) + undefeat + Under Defeat (Japan) (GDL-0035) - watrball - Water Balls + undoukai + The Undoukai (Japan) - waverunr - Wave Runner (Japan, Revision A) + undrfire + Under Fire (World) - waveshrk - Wave Shark (UAB, USA v1.04) + undrfirej + Under Fire (Japan) - wb3 - Wonder Boy III - Monster Lair (set 6, World, System 16B, 8751 317-0098) + undrfireu + Under Fire (US) - wb31 - Wonder Boy III - Monster Lair (set 1, Japan, System 16A, FD1094 317-0084) + undrfirj + Under Fire (Japan) - wb32 - Wonder Boy III - Monster Lair (set 2, Japan, System 16B, FD1094 317-0085) + undrfiru + Under Fire (US) - wb33 - Wonder Boy III - Monster Lair (set 3, World, System 16B, FD1094 317-0089) + unicornd + Unicorn Dreaming (0100791V, NSW/ACT) - wb34 - Wonder Boy III - Monster Lair (set 4, Japan, System 16B, FD1094 317-0087) + unicornda + Unicorn Dreaming (0100813V, NSW/ACT) - wb35 - Wonder Boy III - Monster Lair (set 5, Japan, System 16A, FD1089A 317-0086) + unicorndnz + Unicorn Dreaming (0101228V, New Zealand) - wb3bbl - Wonder Boy III - Monster Lair (bootleg) + unicorndu + Unicorn Dreaming (BHG1584, US) - wbbc97 - Beach Festival World Championship 1997 + uniwars + UniWar S - wbdeluxe - Wonder Boy Deluxe + uniwarsa + UniWar S (bootleg) - wbeachvl - World Beach Volley (set 1) + unk820501 + unknown Cirsa slot machine on 820501 A PCB - wbeachvl2 - World Beach Volley (set 2) + unk960606 + unknown 960606-5 based machine - wbeachvl3 - World Beach Volley (set 3) + unkch1 + New Cherry Gold '99 (bootleg of Super Cherry Master) (set 1) - wbml - Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043) + unkch2 + Super Cherry Gold (bootleg of Super Cherry Master) - wbmlb - Wonder Boy in Monster Land (English bootleg set 1) + unkch3 + New Cherry Gold '99 (bootleg of Super Cherry Master) (set 2) - wbmlbg - Wonder Boy in Monster Land (English bootleg set 2) + unkch4 + Grand Cherry Master (bootleg of Super Cherry Master) - wbmlbge - Wonder Boy in Monster Land (English bootleg set 3) + unkct + unknown Cointek game - wbmljb - Wonder Boy in Monster Land (Japan bootleg) + unkh8gam + unknown H8 Italian gambling game - wbmljo - Wonder Boy in Monster Land (Japan Old Ver., MC-8123, 317-0043) + unkhorse + unknown Japanese horse gambling game - wbmlvc - Wonder Boy in Monster Land (English, Virtual Console) + unkhpslt + unknown Hobby Play slot machine - wboy - Wonder Boy (set 1, 315-5177) + unkigs + unknown IGS game (V100A) - wboy2 - Wonder Boy (set 2, 315-5178) + unkitpkr + unknown Italian poker game - wboy2u - Wonder Boy (set 2, not encrypted) + unkkonmd + unknown Konami medal game (game code GS662) - wboy3 - Wonder Boy (set 3, 315-5135) + unkm1 + unknown Sega gambling game (M1 Satellite board) - wboy4 - Wonder Boy (315-5162, 4-D Warriors Conversion) + unkpacg + unknown 'Pac-Man' gambling game (set 1) - wboy5 - Wonder Boy (set 5, bootleg) + unkpacga + Pucman - wboyo - Wonder Boy (set 1, 315-5135) + unkpacgb + unknown 'Pac-Man' gambling game (set 2) - wboysys2 - Wonder Boy (system 2) + unkpoker + unknown 1980 poker game - wboyu - Wonder Boy (prototype?) + unkrfslt + unknown Recreativos Franco slot machine - wboyub - Wonder Boy (US bootleg) + unks10md + unknown Namco System 10 medal game (MTL1 SPR0B) - wc90 - Tecmo World Cup '90 (World) + unksig + unknown 'Space Invaders' gambling game (set 1) - wc90a - Tecmo World Cup '90 (Euro set 1) + unksiga + unknown 'Space Invaders' gambling game (set 2) - wc90b - Tecmo World Cup '90 (Euro set 2) + unkte06 + unknown Poker 'TE06' - wc90b1 - Euro League (Italian hack of Tecmo World Cup '90) + unomedal + UNO the Medal - wc90b2 - Worldcup '90 + unsquad + U.N. Squadron (USA) - wc90t - Tecmo World Cup '90 (trackball set 1) + untoucha + Untouchable (Ver. 2.10) - wcat3 - Wild Cat 3 + uopoko + Puzzle Uo Poko (International) - wcatcher - Mahjong Wakuwaku Catcher (Japan) + uopokoj + Puzzle Uo Poko (Japan) - wcbowl - World Class Bowling (v1.66) + upndown + Up'n Down (315-5030) - wcbowl11 - World Class Bowling (v1.1) + upndownu + Up'n Down (not encrypted) - wcbowl12 - World Class Bowling (v1.2) + upscope + Up Scope - wcbowl13 - World Class Bowling (v1.3) + upyoural + Up Your Alley - wcbowl13j - World Class Bowling (v1.3J, Japan) + urachamu + Urachacha Mudaeri (Korea) - wcbowl14 - World Class Bowling (v1.4) + urashima + Otogizoushi Urashima Mahjong (Japan) - wcbowl140 - World Class Bowling Tournament (v1.40) + usafootb + U.S.A. Football + + + usafootba + U.S.A. Football (R01u) - wcbowl15 - World Class Bowling (v1.5) + usagi + Usagi (V2.02J 2001/10/02 12:41:19) - wcbowl16 - World Class Bowling (v1.6) + usagiol + Usagi Online (v2.04J) - wcbowl161 - World Class Bowling (v1.61) + usagiym + Usagi - Yamashiro Mahjong Hen (Japan) (GDL-0022) - wcbowl165 - World Class Bowling (v1.65) + usclssic + U.S. Classic - wcbowldx - World Class Bowling Deluxe (v2.00) + usg182 + Games V18.2 - wcherry - Win Cherry (ver 0.16 - 19990219) + usg185 + Games V18.5 - wcombat - World Combat (ver UAA?) + usg187c + Games V18.7C - wcombatj - World Combat (ver JAA) + usg252 + Games V25.4X - wcombatk - World Combat (ver KBC) + usg32 + Super Duper Casino (California V3.2) - wcs_l2 - World Cup Soccer (Lx-2) + usg82 + Super Ten V8.2 - wcs_p2 - World Cup Soccer (Pa-2) + usg83 + Super Ten V8.3 - wcs_p3 - World Cup Soccer (Px-3) + usg83x + Super Ten V8.3X - wcsoccer - World Challenge Soccer (rev.1) + usgames + Games V25.4X - wcsoccerd2 - World Challenge Soccer (disp.rev.2) + usvsthem + Us vs. Them - wcup90 - World Cup 90 + utoukond + Ultra Toukon Densetsu (Japan) - wcvol95 - World Cup Volley '95 (Japan v1.0) + v0bowl + unknown VRender0+ bowling game - wd_03r - Who Dunnit (0.3 R) + v1 + V.1 - wd_048r - Who Dunnit (0.48 R) + v4addlad + Adders and Ladders (v2.1) (MPU4 Video) - wd_10f - Who Dunnit (1.0 French) + v4addlad20 + Adders and Ladders (v2.0) (MPU4 Video) - wd_10g - Who Dunnit (1.0 Germany) + v4addladd + Adders and Ladders (v2.1d) (MPU4 Video) - wd_10r - Who Dunnit (1.0 R) + v4barqs2 + Barquest 2 (v0.3) (MPU4 Video) - wd_11 - Who Dunnit (1.1) + v4barqst + Barquest (v2.6) (MPU4 Video) - wd_12 - Who Dunnit (1.2) + v4barqstd + Barquest (v2.6d) (MPU4 Video) - wd_12g - Who Dunnit (1.2 Germany) + v4big40 + Big 40 Poker (BWB) (Arcade Standard) (set 1) (MPU4 Video) - wdun - Who Dunnit (Russia) + v4big40a + Big 40 Poker (BWB) (Arcade Standard) (set 2) (MPU4 Video) - wecleman - WEC Le Mans 24 (set 1) + v4big40b + Big 40 Poker (BWB) (Arcade Standard) (set 3) (MPU4 Video) - wecleman2 - WEC Le Mans 24 (set 2) + v4big40c + Big 40 Poker (BWB) (Arcade Standard) (set 4) (MPU4 Video) - weddingr - Wedding Rhapsody (GX624 JAA) + v4big40d + Big 40 Poker (BWB) (Arcade Data) (set 1) (MPU4 Video) - welltris - Welltris (World?, 2 players) + v4big40e + Big 40 Poker (BWB) (Arcade Data) (set 2) (MPU4 Video) - welltrisj - Welltris (Japan, 2 players) + v4big40f + Big 40 Poker (BWB) (S_Site Data + %-Key + OCDM) (MPU4 Video) - westgun2 - Western Gun Part II + v4big40g + Big 40 Poker (BWB) (S_Site Standard) (set 1) (MPU4 Video) - weststry - West Story (bootleg of Blood Bros.) + v4big40h + Big 40 Poker (BWB) (S_Site Standard) (set 2) (MPU4 Video) - westvent - Western Venture (Ver. AA.02.D) + v4big40i + Big 40 Poker (BWB) (S_Site Data + %-Key) (set 1) (MPU4 Video) - wexpress - Western Express (Japan, rev 4) + v4big40j + Big 40 Poker (BWB) (S_Site Data + %-Key) (set 2) (MPU4 Video) - wexpressb1 - Western Express (bootleg set 1) + v4big40k + Big 40 Poker (BWB) (S_Site Data) (MPU4 Video) - wexpressb2 - Western Express (bootleg set 2) + v4bigfrt + Big Fruits (v2.0?) (set 1) (MPU4 Video) - wexpressb3 - Western Express (bootleg set 3) + v4bigfrta + Big Fruits (v2.0?) (set 2) (MPU4 Video) - wfortune - Wheel Of Fortune (set 1) + v4bigfrtb + Big Fruits (v2.0?) (set 3) (MPU4 Video) - wfortunea - Wheel Of Fortune (set 2) + v4bigfrtc + Big Fruits (v2.0?) (% Key) (MPU4 Video) - wg3dh - Wayne Gretzky's 3D Hockey + v4blox + Blox (SJM BLOX, 50p/20p Play, Version 2.0) (MPU4 Video) - wgp - World Grand Prix (US) + v4bloxd + Blox (SJM BLOX, 50p/20p Play, Version 2.0) (Datapak) (MPU4 Video) - wgp2 - World Grand Prix 2 (Japan) + v4bubbnk + Bubbly Bonk (v4.0?) (20p Fixed, Cash+Token) (MPU4 Video) - wgpj - World Grand Prix (Japan) + v4bubbnka + Bubbly Bonk (v4.0?) (20p Fixed, All - Cash) (MPU4 Video) - wgpjoy - World Grand Prix (joystick version) (Japan, set 1) + v4bubbnkb + Bubbly Bonk (v4.0?) (20p Fixed, Cash+Token, Datapak, % Key) (MPU4 Video) - wgpjoya - World Grand Prix (joystick version) (Japan, set 2) + v4bubbnkc + Bubbly Bonk (v4.0?) (20p Fixed, Cash+Token, Datapak) (MPU4 Video) - wh1 - World Heroes (ALM-005) + v4bubbnkd + Bubbly Bonk (v4.0?) (20p Fixed, Cash+Token, % Key) (MPU4 Video) - wh1h - World Heroes (ALH-005) + v4bulblx + Bullion Blox (BWB) (set 1) (MPU4 Video) - wh1ha - World Heroes (set 3) + v4bulblxa + Bullion Blox (BWB) (Datapak) (set 1) (MPU4 Video) - wh2 - World Heroes 2 (ALM-006)(ALH-006) + v4bulblxb + Bullion Blox (BWB) (set 2) (MPU4 Video) - wh2j - World Heroes 2 Jet (ADM-007)(ADH-007) + v4bulblxc + Bullion Blox (BWB) (Datapak) (set 2) (MPU4 Video) - whalecsh - Whales of Cash (20155711, Malaysia) + v4cmaze + The Crystal Maze (v1.3) (MPU4 Video) - wheelfir - Wheels & Fire + v4cmaze2 + The New Crystal Maze Featuring Ocean Zone (v2.2) (MPU4 Video) - wheelrun - Wheels Runner + v4cmaze2_amld + The New Crystal Maze Featuring Ocean Zone (v0.1, AMLD) (MPU4 Video) - wheregld - Where's the Gold (20177111, Malaysia) + v4cmaze2b + The New Crystal Maze Featuring Ocean Zone (v2.0) (MPU4 Video) - whirl_l2 - Whirlwind (L-2) + v4cmaze2c + The New Crystal Maze Featuring Ocean Zone (v?.?) (MPU4 Video) - whirl_l3 - Whirlwind (L-3) + v4cmaze2d + The New Crystal Maze Featuring Ocean Zone (v2.2, Datapak) (MPU4 Video) - whirl_lg3 - Whirlwind (LG-3) + v4cmaze3 + The Crystal Maze Team Challenge (v0.9) (MPU4 Video) - whiterus - White Russia (Konami Endeavour) + v4cmaze3_amld + The Crystal Maze Team Challenge (v1.2, AMLD) (MPU4 Video) - whizz - Whizz + v4cmaze3b + The Crystal Maze Team Challenge (v0.8) (MPU4 Video) - whodunit - Who Dunit (version 9.0) + v4cmaze3c + The Crystal Maze Team Challenge (v0.6) (MPU4 Video) - whodunit8 - Who Dunit (version 8.0) + v4cmaze3d + The Crystal Maze Team Challenge (v0.9, Datapak) (MPU4 Video) - whoopee - Pipi & Bibis / Whoopee!! (Teki Paki hardware) + v4cmaze_amld + The Crystal Maze (v0.1, AMLD) (MPU4 Video) - whp - World Heroes Perfect + v4cmazeb + The Crystal Maze (v1.2) (MPU4 Video) - wiggie - Wiggie Waggie + v4cmazec + The Crystal Maze (v1.3 alt) (MPU4 Video) - wildfang - Wild Fang / Tecmo Knight + v4cmazed + The Crystal Maze (v1.1) (MPU4 Video) - wildfangs - Wild Fang + v4cmazedat + The Crystal Maze (v1.3, Datapak) (MPU4 Video) - wildfyre - Wildfyre + v4cshinf + Cash Inferno (BWB) (Release 4, 20p Fixed, Cash+Token) (set 1) (MPU4 Video) - wildone - Wild One (4VXEC5357, New Zealand) + v4cshinf3 + Cash Inferno (BWB) (Release 3) (set 1) (MPU4 Video) - wildpkr - Wild Poker (ver. D 1.01) + v4cshinf3a + Cash Inferno (BWB) (Release 3) (set 2) (MPU4 Video) - wildplt - Wild Pilot + v4cshinfa + Cash Inferno (BWB) (Release 4, 5p Fixed, All - Cash) (MPU4 Video) - wildways - Wild Ways (10130111, Malaysia) + v4cshinfb + Cash Inferno (BWB) (Release 4, 10p Fixed, Cash+Token) (MPU4 Video) - willow - Willow (USA) + v4cshinfd + Cash Inferno (BWB) (Release 4, 20p Fixed, Cash+Token) (set 2) (MPU4 Video) - willowj - Willow (Japan) + v4cshinfe + Cash Inferno (BWB) (Release 4, 20p Fixed, Cash+Token, Datapak) (set 1) (MPU4 Video) - willowo - Willow (USA Old Ver.) + v4cshinff + Cash Inferno (BWB) (Release 4, 20p Fixed, Cash+Token, Showcase, Datapak) (MPU4 Video) - wilytowr - Wily Tower + v4cshinfg + Cash Inferno (BWB) (Release 4, 20p Fixed, Cash+Token) (set 3) (MPU4 Video) - winbid - Winning Bid (Russia) + v4cshinfh + Cash Inferno (BWB) (Release 4, 20p Fixed, Cash+Token, Showcase) (MPU4 Video) - winbingo - Win Win Bingo (set 1) + v4cshinfi + Cash Inferno (BWB) (Release 4, 20p Fixed, Cash+Token, Datapak, % Key) (MPU4 Video) - winbingoa - Win Win Bingo (set 2) + v4cshinfj + Cash Inferno (BWB) (Release 4, 20p Fixed, Cash+Token, Showcase, Datapak, % Key) (MPU4 Video) - windheat - Winding Heat (EAA, Euro v2.11) + v4cshinfk + Cash Inferno (BWB) (Release 4, 20p Fixed, Cash+Token, Datapak) (set 2) (MPU4 Video) - windheata - Winding Heat (AAA, Asia v2.11) + v4cshinfl + Cash Inferno (BWB) (Release 4, 20p Fixed, Cash+Token, % Key) (MPU4 Video) - windheatj - Winding Heat (JAA, Japan v2.11) + v4cshinfm + Cash Inferno (BWB) (Release 4, 20p Switchable 20p/10p/5p, Cash+Token) (set 1) (MPU4 Video) - windheatu - Winding Heat (UBC, USA v2.22) + v4cshinfn + Cash Inferno (BWB) (Release 4, 20p Switchable 20p/10p/5p, Cash+Token, Showcase) (MPU4 Video) - wingwar - Wing War (World) + v4cshinfo + Cash Inferno (BWB) (Release 4, 20p Switchable 20p/10p/5p, Cash+Token, Datapak, % Key) (MPU4 Video) - wingwarj - Wing War (Japan) + v4cshinfp + Cash Inferno (BWB) (Release 4, 20p Switchable 20p/10p/5p, Cash+Token, Datapak) (set 1) (MPU4 Video) - wingwaru - Wing War (US) + v4cshinfq + Cash Inferno (BWB) (Release 4, 20p Switchable 20p/10p/5p, Cash+Token, % Key) (MPU4 Video) - wink - Wink (set 1) + v4cshinfr + Cash Inferno (BWB) (Release 4, 20p Switchable 20p/10p/5p, Cash+Token) (set 2) (MPU4 Video) - winka - Wink (set 2) + v4cshinfs + Cash Inferno (BWB) (Release 4, 20p Switchable 20p/10p/5p, Cash+Token, Datapak) (set 2) (MPU4 Video) - winner81 - Winners Circle (81, 28*28 PCB) + v4cshinfu + Cash Inferno (BWB) (Release 4, 20p Switchable 20p/10p/5p, All - Cash) (MPU4 Video) - winner81b - Winners Circle (81, 18*22 PCB) + v4cshinfw + Cash Inferno (BWB) (Release 4, 20p Switchable 20p/10p/5p, All - Cash, Datapak) (MPU4 Video) - winner82 - Winners Circle (82) + v4cybcas + Cyber Casino (Nova, German) (MPU4 Video) - winrun - Winning Run + v4dbltak + Double Take (BWB) (Release 4, Arcade Standard, 20p/25p Stake Key, £5/£10/£15 Prize Key) (MPU4 Video) - winrun91 - Winning Run '91 (Japan) + v4dbltaka + Double Take (BWB) (Release 4, Arcade Data, 20p/25p Stake Key, £5/£10/£15 Prize Key) (MPU4 Video) - winrungp - Winning Run Suzuka Grand Prix (Japan) + v4dbltakb + Double Take (BWB) (Release 4, S_Site Data, 20p/25p Stake Key, £5/£10/£15 Prize Key, % Key) (MPU4 Video) - winspike - Winning Spike (ver EAA) + v4dealem + Deal 'Em (MPU4 Conversion Kit, v7.0) - winspikej - Winning Spike (ver JAA) + v4eyedwn + Eyes Down (v1.3) (MPU4 Video) - wintbob - The Winter Bobble (bootleg of Snow Bros.) + v4eyedwnd + Eyes Down (v1.3, Datapak) (MPU4 Video) - winterht - Winter Heat (JUET 971012 V1.000) + v4frfact + Fruit Factory (BWB) (set 1) (MPU4 Video) - wipeormt - Wipeout (Ramtek) [TTL] + v4frfacta + Fruit Factory (BWB) (set 2) (MPU4 Video) - wipeout - Wipeout (rev.2) + v4frfactb + Fruit Factory (BWB) (set 3) (MPU4 Video) - wiping - Wiping + v4frfactc + Fruit Factory (BWB) (set 4) (MPU4 Video) - wiseguy - Wise Guy + v4frfactd + Fruit Factory (BWB) (set 5) (MPU4 Video) - witch - Witch + v4frfacte + Fruit Factory (BWB) (set 6) (MPU4 Video) - witchb - Witch (With ranking) + v4frfactf + Fruit Factory (BWB) (set 7) (MPU4 Video) - witchcda - Witch Card (Spanish, witch game, set 1) + v4gldrsh + Gold Rush (BWB) (Release 8, 20p Fixed, All - Cash) (set 1) (MPU4 Video) - witchcdb - Witch Card (Spanish, witch game, set 2) + v4gldrsh3 + Gold Rush (BWB) (Release 3, 20p Fixed, Cash+Token) (MPU4 Video) - witchcdc - Witch Card (English, no witch game) + v4gldrsha + Gold Rush (BWB) (Release 8, 20p Fixed, Cash+Token) (set 1) (MPU4 Video) - witchcdd - Witch Card (German, WC3050, set 1 ) + v4gldrshb + Gold Rush (BWB) (Release 8, 20p Fixed, Cash+Token) (Showcase) (set 1) (MPU4 Video) - witchcde - Witch Card (Video Klein CPU box, set 2) + v4gldrshc + Gold Rush (BWB) (Release 8, 20p Fixed, Cash+Token) (Datapak) (set 1) (MPU4 Video) - witchcdf - Witch Card (English, witch game, lamps) + v4gldrshd + Gold Rush (BWB) (Release 8, 20p Fixed, Cash+Token) (Datapak) (set 2) (MPU4 Video) - witchcdg - Witch Card (Falcon, enhanced sound) + v4gldrshe + Gold Rush (BWB) (Release 8, 20p Fixed, Cash+Token) (Showcase) (Datapak) (set 1) (MPU4 Video) - witchcdh - Witch Card (German, WC3050, set 2 ) + v4gldrshf + Gold Rush (BWB) (Release 8, 20p Fixed, Cash+Token) (set 2) (MPU4 Video) - witchcdi - Witch Card (German, WC3050, 27-4-94) + v4gldrshg + Gold Rush (BWB) (Release 8, 20p Fixed, Cash+Token) (Showcase) (set 2) (MPU4 Video) - witchcdk - Witch Game (Video Klein, set 2) + v4gldrshh + Gold Rush (BWB) (Release 8, 20p Fixed, Cash+Token) (MPU4 Video) - witchcrd - Witch Card (Video Klein CPU box, set 1) + v4gldrshi + Gold Rush (BWB) (Release 8, 20p Fixed, Cash+Token) (Datapak) (MPU4 Video) - witchgme - Witch Game (Video Klein, set 1) + v4gldrshj + Gold Rush (BWB) (Release 8, 20p Fixed, Cash+Token) (Showcase) (Datapak) (set 2) (MPU4 Video) - witchjol - Jolli Witch (Export, 6T/12T ver 1.57D) + v4gldrshk + Gold Rush (BWB) (Release 8, 20p Fixed, All - Cash) (Datapak) (MPU4 Video) - witchryl - Witch Royal (Export version 2.1) + v4gldrshl + Gold Rush (BWB) (Release 8, 25p Fixed, All - Cash) (MPU4 Video) - witchs - Witch (Sega License) + v4gldrshm + Gold Rush (BWB) (Release 8, 25p Fixed, All - Cash) (Datapak) (MPU4 Video) - wits - Wit's (Japan) + v4gldrshn + Gold Rush (BWB) (Release 8, Switchable 20p/25p, All - Cash) (MPU4 Video) - wivernwg - Wivern Wings + v4gldrsho + Gold Rush (BWB) (Release 8, Switchable 20p/25p, All - Cash) (Datapak) (MPU4 Video) - wiz - Wiz + v4gldrshp + Gold Rush (BWB) (Release 8, Switchable 20p/10p/5p, Cash+Token) (MPU4 Video) - wizard - Wizard (Ver 1.0) + v4gldrshq + Gold Rush (BWB) (Release 8, Switchable 20p/10p/5p, Cash+Token) (Showcase) (MPU4 Video) - wizdfire - Wizard Fire (Over Sea v2.1) + v4gldrshr + Gold Rush (BWB) (Release 8, Switchable 20p/10p/5p, Cash+Token) (Datapak) (MPU4 Video) - wizdfireu - Wizard Fire (US v1.1) + v4gldrshs + Gold Rush (BWB) (Release 8, Switchable 20p/10p/5p, Cash+Token) (Showcase) (Datapak) (MPU4 Video) - wizt - Wiz (Taito, set 1) + v4gldrsht + Gold Rush (BWB) (Release 8, 20p Fixed, All - Cash) (set 2) (MPU4 Video) - wizta - Wiz (Taito, set 2) + v4gldrshu + Gold Rush (BWB) (Release 8, Switchable 20p/10p/5p, All - Cash) (MPU4 Video) - wizwarz - Wiz Warz (prototype) + v4mate + The Mating Game (v0.4) (MPU4 Video) - wizzquiz - Wizz Quiz (Konami version) + v4mated + The Mating Game (v0.4, Datapak) (MPU4 Video) - wizzquiza - Wizz Quiz (version 4) + v4mazbel + Mazooma Belle (v2.5 DY, S/Site, Cash+Token, Datapak, % Key) (MPU4 Video) - wjammers - Windjammers / Flying Power Disc + v4mazbel15 + Mazooma Belle (v1.5, Arcade, Cash+Token) (set 1) (MPU4 Video) - wlcc - Wan Li Chang Cheng (China, V638C) + v4mazbel15a + Mazooma Belle (v1.5 DY, Arcade, Cash+Token, % Key) (MPU4 Video) - wldarrow - Wild Arrow (color, Standard V4.8) + v4mdice + Miami Dice (BWB) (Release 8, S/Site Standard, 25p-£10 Cash - Fixed) (set 1) (MPU4 Video) - wldcourt - World Court (Japan) + v4mdice5 + Miami Dice (BWB) (Release 5, Arcade Showcase, 20p-£8 Token - Fixed) (MPU4 Video) - wldcp_l1 - World Cup Soccer (L-1) + v4mdice6 + Miami Dice (BWB) (Release 6, Arcade Standard, 20p-£8 Token - Fixed) (MPU4 Video) - wldkicks - World Kicks (WK2 Ver. A) + v4mdicea + Miami Dice (BWB) (Release 8, Arcade Standard, 5p-£4 Cash - Fixed) (MPU4 Video) - wldkicksa - World Kicks (WK3 Ver. A) + v4mdiceb + Miami Dice (BWB) (Release 8, Arcade Standard, 10p-£4 Cash - Fixed) (MPU4 Video) - wldkicksb - World Kicks PCB (WKC1 Ver. A) + v4mdicec + Miami Dice (BWB) (Release 8, Arcade Standard, 10p-£8 Token - Fixed) (MPU4 Video) - wldrider - Wild Riders (JPN, USA, EXP, KOR, AUS) + v4mdiced + Miami Dice (BWB) (Release 8, Arcade Standard, 20p-£4 Cash - Fixed) (MPU4 Video) - wldstrek - Wild Streak (Russia) + v4mdicee + Miami Dice (BWB) (Release 8, S/Site Standard, 20p-£4 Cash - Fixed) (MPU4 Video) - wldwitch - Wild Witch (Export, 6T/12T ver 1.84A) + v4mdicef + Miami Dice (BWB) (Release 8, Arcade Standard, 20p-£8 Token - Fixed) (set 1) (MPU4 Video) - wldwitcha - Wild Witch (Export, 6T/12T ver 1.57-SP) + v4mdiceg + Miami Dice (BWB) (Release 8, Arcade Showcase, 20p-£8 Token - Fixed) (set 3) (MPU4 Video) - wldwitchb - Wild Witch (Export, 6T/12T ver 1.57-TE) + v4mdiceger + Miami Dice (Nova, German) (MPU4 Video) - wldwitchc - Wild Witch (Export, 6T/12T ver 1.62A) + v4mdiceh + Miami Dice (BWB) (Release 8, Arcade Standard, 20p-£8 Token - Fixed) (set 2) (MPU4 Video) - wldwitchd - Wild Witch (Export, 6T/12T ver 1.62B) + v4mdicei + Miami Dice (BWB) (Release 8, S/Site Standard, 20p-£8 Token - Fixed) (set 1) (MPU4 Video) - wldwitche - Wild Witch (Export, 6T/12T ver 1.62A-F) + v4mdicej + Miami Dice (BWB) (Release 8, S/Site Standard, 20p-£8 Token - Fixed) (set 2) (MPU4 Video) - wldwitchf - Wild Witch (Export, 6T/12T ver 1.62A alt) + v4mdicek + Miami Dice (BWB) (Release 8, S/Site Showcase, 20p-£8 Token - Fixed) (set 5) (MPU4 Video) - wldwitchg - Wild Witch (Export, 6T/12T ver 1.62B alt) + v4mdicel + Miami Dice (BWB) (Release 8, S/Site Standard, 20p-£8 Token - Fixed) (set 3) (MPU4 Video) - wldwitchh - Wild Witch (Export, 6T/12T ver 1.65A) + v4mdicem + Miami Dice (BWB) (Release 8, S/Site Standard, 20p-£8 Token - Fixed) (set 4) (MPU4 Video) - wldwitchi - Wild Witch (Export, 6T/12T ver 1.65A-S) + v4mdicen + Miami Dice (BWB) (Release 8, Arcade Standard, 20p-£10 Cash - Fixed) (set 1) (MPU4 Video) - wldwitchj - Wild Witch (Export, 6T/12T ver 1.65A-S alt) + v4mdiceo + Miami Dice (BWB) (Release 8, Arcade Standard, 20p-£10 Cash - Fixed) (set 2) (MPU4 Video) - wldwitchk - Wild Witch (Export, 6T/12T ver 1.65A-N) + v4mdicep + Miami Dice (BWB) (Release 8, S/Site Standard, 20p-£10 Cash - Fixed) (set 1) (MPU4 Video) - wldwitchl - Wild Witch (Export, 6T/12T ver 1.70A beta) + v4mdiceq + Miami Dice (BWB) (Release 8, S/Site Standard, 20p-£10 Cash - Fixed) (set 2) (MPU4 Video) - wldwitchm - Wild Witch (Export, 6T/12T ver 1.70A) + v4mdicer + Miami Dice (BWB) (Release 8, S/Site Standard, 20p-£10 Cash - Fixed) (set 3) (MPU4 Video) - wldwitchn - Wild Witch (Export, 6T/12T ver 1.70A alt) + v4mdices + Miami Dice (BWB) (Release 8, Arcade Standard, 25p-£10 Cash - Fixed) (set 1) (MPU4 Video) - wldwitcho - Wild Witch (Export, 6T/12T ver 1.74A-SP-BELG) + v4mdicet + Miami Dice (BWB) (Release 8, Arcade Standard, 25p-£10 Cash - Fixed) (set 2) (MPU4 Video) - wldwitchp - Wild Witch (Export, 6T/12T ver 1.74A) + v4mdiceu + Miami Dice (BWB) (Release 8, S/Site Standard, 25p-£10 Cash - Fixed) (set 2) (MPU4 Video) - wldwitchq - Wild Witch (Export, 6T/12T ver 1.74A alt) + v4mdicev + Miami Dice (BWB) (Release 8, S/Site Standard, 25p-£10 Cash - Fixed) (set 3) (MPU4 Video) - wldwitchr - Wild Witch (Export, 6B/12B ver 1.75A-E English) + v4mdicew + Miami Dice (BWB) (Release 8, Arcade Standard, 20p-£8 Cash - Fixed) (MPU4 Video) - wldwitchs - Wild Witch (Export, 6T/12T ver 1.76A) + v4megbuk + Megabucks Poker (BWB) (set 1) (MPU4 Video) - wldwitcht - Wild Witch (Export, 6T/12T ver 1.77A) + v4megbuka + Megabucks Poker (BWB) (set 2) (MPU4 Video) - wldwitchu - Wild Witch (Export, 6T/12T ver 1.79A) + v4megbukb + Megabucks Poker (BWB) (set 3) (MPU4 Video) - wldwitchv - Wild Witch (Export, 6T/12T ver 1.83A) + v4megbukc + Megabucks Poker (BWB) (set 4) (MPU4 Video) - wlstar - Wonder League Star - Sok-Magicball Fighting (Korea) + v4missis + Mississippi Lady (Nova, German) (MPU4 Video) - wmatch - Water Match (315-5064) + v4monte + Monte Carlo Or Bust (BWB) (Release D, S/Site Standard, 20p Switchable, £8 All Cash) (MPU4 Video) - wmg - Williams Multigame + v4monte5 + Monte Carlo Or Bust (BWB) (Release 5, S/Site Standard, 20p Fixed, £8 All Cash) (MPU4 Video) - wms - WMS SetUp/Clear Chips (set 1) + v4monte5a + Monte Carlo Or Bust (BWB) (Release 5, Arcade Special, 20p Fixed, Cash and Tokens) (MPU4 Video) - wmsa - WMS SetUp/Clear Chips (set 2) + v4monte5b + Monte Carlo Or Bust (BWB) (Release 5, Arcade Special, 20p Switchable, Cash and Tokens) (MPU4 Video) - wmsb - WMS SetUp/Clear Chips (set 3) + v4monte9 + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 20p Fixed, £8 All Cash) (MPU4 Video) - wmsboom - Boom (Russia) + v4monte9a + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 20p Switchable, £8 All Cash) (MPU4 Video) - wmstopb - Top Banana (Russia) + v4monte9b + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 20p Switchable, Cash and Tokens) (set 2) (MPU4 Video) - wndrmomo - Wonder Momo + v4monte9c + Monte Carlo Or Bust (BWB) (Release 9, Arcade Special, Options 4 Cabinet, 20p Switchable, Cash and Tokens) (set 1) (MPU4 Video) - wndrplnt - Wonder Planet (Japan) + v4monte9d + Monte Carlo Or Bust (BWB) (Release 9, Arcade Special, Options 4 Cabinet, 20p Switchable, Cash and Tokens) (set 2) (MPU4 Video) - wof - Warriors of Fate (World 921031) + v4monte9e + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 20p Switchable, Cash and Tokens) (set 1) (MPU4 Video) - wofa - Sangokushi II (Asia 921005) + v4monte9f + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 20p Switchable, £10 All Cash) (set 1) (MPU4 Video) - wofhfh - Huo Feng Huang (Chinese bootleg of Sangokushi II) + v4monte9g + Monte Carlo Or Bust (BWB) (Release 9, Arcade Special, Options 4 Cabinet, 20p Fixed, Cash and Tokens) (set 2) (MPU4 Video) - wofj - Tenchi wo Kurau II: Sekiheki no Tatakai (Japan 921031) + v4monte9h + Monte Carlo Or Bust (BWB) (Release 9, Arcade Special, Options 4 Cabinet, 20p Fixed, Cash and Tokens) (set 1) (MPU4 Video) - wofr1 - Warriors of Fate (World 921002) + v4monte9i + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 20p Fixed, Cash and Tokens) (set 2) (MPU4 Video) - wofu - Warriors of Fate (USA 921031) + v4monte9j + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 20p Fixed, £10 All Cash) (set 1) (MPU4 Video) - wolffang - Wolf Fang -Kuhga 2001- (Japan) + v4monte9k + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 20p Fixed, £10 All Cash) (set 2) (MPU4 Video) - wolfman - Wolf Man + v4monte9l + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 25p Fixed, £10 All Cash) (set 1) (MPU4 Video) - wolfpack - Wolf Pack (prototype) + v4monte9m + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 25p Fixed, £10 All Cash) (set 2) (MPU4 Video) - wonder3 - Wonder 3 (Japan 910520) + v4monte9n + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 20p Switchable, £10 All Cash) (set 2) (MPU4 Video) - wondl96 - Wonder League '96 (Korea) + v4monte9o + Monte Carlo Or Bust (BWB) (Release 9, S/Site Standard, Options 4 Cabinet, 20p Fixed, Cash and Tokens) (set 1) (MPU4 Video) - wondstck - Wonder Stick + v4montea + Monte Carlo Or Bust (BWB) (Release D, S/Site Standard, 20p Switchable, £10 All Cash) (MPU4 Video) - woodpeca - Woodpecker (set 2) + v4monteaa + Monte Carlo Or Bust (BWB) (Release ?, set 17) (MPU4 Video) - woodpeck - Woodpecker (set 1) + v4monteab + Monte Carlo Or Bust (BWB) (Release ?, set 18) (MPU4 Video) - worlddef - World Defender + v4monteac + Monte Carlo Or Bust (BWB) (Release ?, set 19) (MPU4 Video) - worldwar - World Wars (World?) + v4montead + Monte Carlo Or Bust (BWB) (Release ?, set 20) (MPU4 Video) - wotw - War of the Worlds + v4monteae + Monte Carlo Or Bust (BWB) (Release ?, set 21) (MPU4 Video) - wotwc - War of the Worlds (color) + v4monteaf + Monte Carlo Or Bust (BWB) (Release ?, set 22) (MPU4 Video) - wow - Wizard of Wor + v4monteag + Monte Carlo Or Bust (BWB) (Release ?, set 23) (MPU4 Video) - wowg - Wizard of Wor (with German Language ROM) + v4monteah + Monte Carlo Or Bust (BWB) (Release ?, set 24) (MPU4 Video) - wownfant - WOW New Fantasia + v4monteai + Monte Carlo Or Bust (BWB) (Release ?, set 25) (MPU4 Video) - wpksoc - World PK Soccer + v4monteaj + Monte Carlo Or Bust (BWB) (Release ?, set 26) (MPU4 Video) - wpksocv2 - World PK Soccer V2 (ver 1.1) + v4monteak + Monte Carlo Or Bust (BWB) (Release ?, set 27) (MPU4 Video) - wrally - World Rally (set 1) + v4monteal + Monte Carlo Or Bust (BWB) (Release ?, set 28) (MPU4 Video) - wrally2 - World Rally 2: Twin Racing + v4monteam + Monte Carlo Or Bust (BWB) (Release ?, set 29) (MPU4 Video) - wrallya - World Rally (set 2) + v4montean + Monte Carlo Or Bust (BWB) (Release ?, set 30) (MPU4 Video) - wrallyb - World Rally (US, 930217) + v4monteao + Monte Carlo Or Bust (BWB) (Release ?, set 31) (MPU4 Video) - wrecking - Vs. Wrecking Crew + v4monteb + Monte Carlo Or Bust (BWB) (Release B, S/Site Standard, 20p Fixed, £8 All Cash) (MPU4 Video) - wrestwar - Wrestle War (set 3, World, 8751 317-0103) + v4monteba + Monte Carlo Or Bust (BWB) (Release B, Arcade Special, 20p Fixed, Cash and Tokens) (MPU4 Video) - wrestwar1 - Wrestle War (set 1, Japan, FD1094 317-0090) + v4montebb + Monte Carlo Or Bust (BWB) (Release B, Arcade Special, 20p Switchable, Cash and Tokens) (MPU4 Video) - wrestwar2 - Wrestle War (set 2, World, FD1094 317-0102) + v4montec + Monte Carlo Or Bust (BWB) (Release D, Arcade Special, 20p Fixed, Cash and Tokens) (MPU4 Video) - wrldtour - Al's Garage Band Goes On A World Tour + v4monted + Monte Carlo Or Bust (BWB) (Release D, S/Site Standard, 20p Fixed, £10 All Cash) (MPU4 Video) - wrldtour2 - Al's Garage Band Goes On A World Tour R02b + v4montee + Monte Carlo Or Bust (BWB) (Release D, S/Site Standard, 20p Switchable, Cash and Tokens) (MPU4 Video) - wrlok_l3 - Warlok (L-3) + v4monteg + Monte Carlo Or Bust (BWB) (Release D, S/Site Standard, 25p Fixed, £10 All Cash) (MPU4 Video) - wrofaero - War of Aero - Project MEIOU + v4monteger + Monte Carlo Or Bust (BWB) (German) (MPU4 Video) - wrungp - Wave Runner GP + v4montek + Monte Carlo Or Bust (BWB) (Release ?, set 1) (MPU4 Video) - ws - World Stadium (Japan) + v4montel + Monte Carlo Or Bust (BWB) (Release ?, set 2) (MPU4 Video) - ws89 - World Stadium '89 (Japan) + v4montem + Monte Carlo Or Bust (BWB) (Release ?, set 3) (MPU4 Video) - ws90 - World Stadium '90 (Japan) + v4monten + Monte Carlo Or Bust (BWB) (Release ?, set 4) (MPU4 Video) - wsbbgd - Super Major League / World Series Baseball (GDS-0010) + v4monteo + Monte Carlo Or Bust (BWB) (Release ?, set 5) (MPU4 Video) - wschamp - Wing Shooting Championship V2.00 + v4montep + Monte Carlo Or Bust (BWB) (Release ?, set 6) (MPU4 Video) - wschampa - Wing Shooting Championship V1.01 + v4monteq + Monte Carlo Or Bust (BWB) (Release ?, set 7) (MPU4 Video) - wschampb - Wing Shooting Championship V1.00 + v4monter + Monte Carlo Or Bust (BWB) (Release ?, set 8) (MPU4 Video) - wseries - World Series: The Season + v4montes + Monte Carlo Or Bust (BWB) (Release ?, set 9) (MPU4 Video) - wsf - World Soccer Finals + v4montet + Monte Carlo Or Bust (BWB) (Release ?, set 10) (MPU4 Video) - wsjr - Who Shot Johnny Rock? v1.6 + v4monteu + Monte Carlo Or Bust (BWB) (Release ?, set 11) (MPU4 Video) - wsjr15 - Who Shot Johnny Rock? v1.5 + v4montev + Monte Carlo Or Bust (BWB) (Release ?, set 12) (MPU4 Video) - wsports - Winter Sports + v4montew + Monte Carlo Or Bust (BWB) (Release ?, set 13) (MPU4 Video) - wstrike - Witch Strike (Export, 6T/12T ver 1.01A) + v4montex + Monte Carlo Or Bust (BWB) (Release ?, set 14) (MPU4 Video) - wstrikea - Witch Strike (Export, 6T/12T ver 1.01B) + v4montey + Monte Carlo Or Bust (BWB) (Release ?, set 15) (MPU4 Video) - wswe - World Soccer Winning Eleven Arcade Game Style + v4montez + Monte Carlo Or Bust (BWB) (Release ?, set 16) (MPU4 Video) - wswe2k3 - World Soccer Winning Eleven Arcade Game 2003 + v4montezz + Monte Carlo Or Bust (BWB) (Release ?, set 32) (MPU4 Video) - wtchjack - Witch Jack (Export, 6T/12T ver 0.87-89) + v4opt3 + Option 3 (v1.0) (MPU4 Video) - wtchjacka - Witch Jackpot (Export, 6T/12T ver 0.25) + v4opt3d + Option 3 (v1.0) (Datapak) (MPU4 Video) - wtchjackb - Witch Jack (Export, 6T/12T ver 0.40) + v4ovrmn3 + Over Moon Pt3 (BWB) (20p Fixed, Cash+Token) (MPU4 Video) - wtchjackc - Witch Jack (Export, 6T/12T ver 0.40T) + v4ovrmn3a + Over Moon Pt3 (BWB) (20p Fixed, Cash+Token, Datapak, % Key) (MPU4 Video) - wtchjackd - Witch Jack (Export, 6T/12T ver 0.62) + v4ovrmn3b + Over Moon Pt3 (BWB) (20p Fixed, Cash+Token, Datapak) (MPU4 Video) - wtchjacke - Witch Jack (Export, 6T/12T ver 0.64) + v4ovrmn3c + Over Moon Pt3 (BWB) (20p Fixed, Cash+Token, % Key) (MPU4 Video) - wtchjackf - Witch Jack (Export, 6T/12T ver 0.65) + v4ovrmn3d + Over Moon Pt3 (BWB) (20p Fixed, All - Cash) (MPU4 Video) - wtchjackg - Witch Jack (Export, 6T/12T ver 0.70S) + v4picdil + Piccadilly Night (Nova, German) (set 1) (MPU4 Video) - wtchjackh - Witch Jack (Export, 6T/12T ver 0.70P) + v4picdila + Piccadilly Night (Nova, German) (set 2) (MPU4 Video) - wtchjacki - Witch Jack (Export, 6T/12T ver 0.87) + v4picdilz + Piccadilly Night (Nova, German) (set 3) (MPU4 Video) - wtchjackj - Witch Jack (Export, 6T/12T ver 0.87-88) + v4psi + Prize Space Invaders (BWB IN2, £20, 50p/30p Play, 20" Version 1.1) (MPU4 Video) - wtennis - World Tennis + v4psi14 + Prize Space Invaders (BWB IN2, £20, 50p/30p Play, 14" Version 1.1, set 1) (MPU4 Video) - wtiger - White Tiger Classic (0200954V, NSW/ACT) + v4psi14a + Prize Space Invaders (BWB IN2, £20, 50p/30p Play, 14" Version 1.1, set 2) (MPU4 Video) + + + v4psibc + Prize Space Invaders (BWB INV1, 50p/30p Play, Version 1.2) (MPU4 Video) - wtigernz - White Tiger (3VXFC5342, New Zealand) + v4psibcd + Prize Space Invaders (BWB INV1, 50p/30p Play, Version 1.2) (Datapak) (MPU4 Video) - wtrnymph - Water-Nymph (Ver. 1.4) + v4psid + Prize Space Invaders (BWB IN2, £20, 50p/30p Play, 20" Version 1.1) (Datapak) (MPU4 Video) - wupndown - Witch Up & Down (Export, 6T/12T ver 1.02) + v4pztet + Prize Tetris (BWB) (MPU4 Video) - wupndowna - Witch Up & Down (Export, 6T/12T ver 0.99, set 1) + v4pzteta + Prize Tetris (BWB) (Datapak) (MPU4 Video) - wupndownb - Witch Up & Down (Export, 6T/12T ver 0.99, set 2) + v4pztetb + Prize Tetris (BWB) (Showcase) (MPU4 Video) - wupndownc - Witch Up & Down (Export, 6T/12T ver 0.99, set 3) + v4pztetc + Prize Tetris (BWB) (Showcase) (Datapak) (MPU4 Video) - wupndownd - Witch Up & Down (Export, 6T/12T ver 0.99T) + v4quidgr + Ten Quid Grid (v1.2) (MPU4 Video) - ww3 - WW III + v4quidgr2 + Ten Quid Grid (v2.4) (MPU4 Video) - ww_l2 - White Water (L-2) + v4quidgr2d + Ten Quid Grid (v2.4, Datapak) (MPU4 Video) - ww_l3 - White Water (L-3) + v4quidgrd + Ten Quid Grid (v1.2, Datapak) (MPU4 Video) - ww_l4 - White Water (L-4) + v4redhtp + Red Hot Poker (Release 3, 20p Fixed, Cash+Token) (set 1) (MPU4 Video) - ww_l5 - White Water (L-5) + v4redhtp2 + Red Hot Poker (Release 2, 1993 copyright, 5p Fixed, Cash+Token) (set 1) (MPU4 Video) - ww_lh5 - White Water (LH-5) + v4redhtp2a + Red Hot Poker (Release 2, 1993 copryight, 5p Fixed, Cash+Token) (set 2) (MPU4 Video) - ww_lh6 - White Water (LH-6) + v4redhtp2b + Red Hot Poker (Release 2, 1993 copryight, 5p Fixed, Cash+Token, Datapak, % Key) (set 1) (MPU4 Video) - ww_p1 - White Water (P-8 P-1 sound) + v4redhtp2c + Red Hot Poker (Release 2, 1993 copryight, 5p Fixed, Cash+Token, Datapak) (set 1) (MPU4 Video) - ww_p8 - White Water (P-8 P-2 sound) + v4redhtp2d + Red Hot Poker (Release 2, 1993 copryight, 5p Fixed, Cash+Token, % Key) (set 1) (MPU4 Video) - wwallyj - Wally wo Sagase! (rev B, Japan, FD1094 317-0197B) + v4redhtp2e + Red Hot Poker (Release 2, 1993 copryight, 5p Fixed, Cash+Token, Datapak, % Key) (set 2) (MPU4 Video) - wwallyja - Wally wo Sagase! (rev A, Japan, FD1094 317-0197A) + v4redhtp2f + Red Hot Poker (Release 2, 1993 copryight, 5p Fixed, Cash+Token, Datapak) (set 2) (MPU4 Video) - wwestern - Wild Western (set 1) + v4redhtp2g + Red Hot Poker (Release 2, 1993 copryight, 5p Fixed, Cash+Token, % Key) (set 2) (MPU4 Video) - wwestern1 - Wild Western (set 2) + v4redhtp2z + Red Hot Poker (Release 2, 1992 copyright, 20p Fixed, Cash+Token) (MPU4 Video) - wwfmania - WWF: Wrestlemania (rev 1.30 08/10/95) + v4redhtpa + Red Hot Poker (Release 3, 20p Switchable to 10p, All - Cash) (MPU4 Video) - wwfmaniab - WWF: Wrestlemania (rev 1.20 08/02/95) + v4redhtpaa + Red Hot Poker (Release 3, 20p Switchable to 10p, Cash+Token, % Key) (set 2) (MPU4 Video) - wwfmaniac - WWF: Wrestlemania (rev 1.1 07/11/95) + v4redhtpab + Red Hot Poker (Release 3, 10p Fxed, All-Cash) (MPU4 Video) - wwfr_103 - WWF Royal Rumble (1.03) + v4redhtparc + Red Hot Poker (Arcade, Cash+Tokens, 1993 Awards, 20p Fixed, Version 1.9) (MPU4 Video) - wwfr_106 - WWF Royal Rumble (1.06) + v4redhtpb + Red Hot Poker (Release 3, 10p Fixed, Cash+Token) (set 1) (MPU4 Video) - wwfroyal - WWF Royal Rumble (JPN, USA, EXP, KOR, AUS) + v4redhtpc + Red Hot Poker (Release 3, 10p Fixed, Cash+Token, Datapak) (set 1, % Key) (MPU4 Video) - wwfsstar - WWF Superstars (Europe) + v4redhtpd + Red Hot Poker (Release 3, 10p Fixed, Cash+Token, Datapak) (set 1) (MPU4 Video) - wwfsstarb - WWF Superstars (bootleg) + v4redhtpe + Red Hot Poker (Release 3, 10p Fixed, Cash+Token, % Key) (set 1) (MPU4 Video) - wwfsstarj - WWF Superstars (Japan) + v4redhtpf + Red Hot Poker (Release 3, 10p Fixed, Cash+Token, Datapak) (set 2) (MPU4 Video) - wwfsstaru - WWF Superstars (US, Newer) + v4redhtpg + Red Hot Poker (Release 3, 10p Fixed, Cash+Token) (set 2) (MPU4 Video) - wwfsstarua - WWF Superstars (US) + v4redhtph + Red Hot Poker (Release 3, 10p Fixed, Cash+Token, Datapak) (set 2, % Key) (MPU4 Video) - wwfwfest - WWF WrestleFest (US set 1) + v4redhtpi + Red Hot Poker (Release 3, 10p Fixed, Cash+Token, Datapak) (set 3) (MPU4 Video) - wwfwfesta - WWF WrestleFest (US Tecmo) + v4redhtpj + Red Hot Poker (Release 3, 10p Fixed, Cash+Token, % Key) (set 2) (MPU4 Video) - wwfwfestb - WWF WrestleFest (US bootleg) + v4redhtpk + Red Hot Poker (Release 3, 20p Fixed, Cash+Token) (set 2) (MPU4 Video) - wwfwfestj - WWF WrestleFest (Japan) + v4redhtpl + Red Hot Poker (Release 3, 20p Fixed, Cash+Token, Datapak, % Key) (set 1) (MPU4 Video) - wwfwfestk - WWF WrestleFest (Korea) + v4redhtpm + Red Hot Poker (Release 3, 20p Fixed, Cash+Token, Datapak) (set 1) (MPU4 Video) - wwjgtin - Wai Wai Jockey Gate-In! + v4redhtpn + Red Hot Poker (Release 3, 20p Fixed, Cash+Token, % Key) (set 1) (MPU4 Video) - wyvernwg - Wyvern Wings (set 1) + v4redhtpo + Red Hot Poker (Release 3, 20p Fixed, Cash+Token, Datapak) (set 2) (MPU4 Video) - wyvernwga - Wyvern Wings (set 2) + v4redhtpp + Red Hot Poker (Release 3, 20p Fixed, Cash+Token, Datapak, % Key) (set 2) (MPU4 Video) - x2222 - X2222 (final debug?) + v4redhtpq + Red Hot Poker (Release 3, 20p Fixed, Cash+Token, Datapak) (set 3) (MPU4 Video) - x2222o - X2222 (5-level prototype) + v4redhtpr + Red Hot Poker (Release 3, 20p Fixed, Cash+Token, % Key) (set 2) (MPU4 Video) - x5jokers - X Five Jokers (Version 1.12) + v4redhtps + Red Hot Poker (Release 3, 20p Switchable to 10p, Cash+Token) (set 1) (MPU4 Video) - xday2 - X-Day 2 (Japan) + v4redhtpt + Red Hot Poker (Release 3, 20p Switchable to 10p, Cash+Token, Datapak, % Key) (set 1) (MPU4 Video) - xenon - Xenon + v4redhtpu + Red Hot Poker (Release 3, 20p Switchable to 10p, Cash+Token, Datapak) (set 1) (MPU4 Video) - xenonf - Xenon (French) + v4redhtpunk + Red Hot Poker (unknown release) (MPU4 Video) - xenophob - Xenophobe + v4redhtpv + Red Hot Poker (Release 3, 20p Switchable to 10p, Cash+Token, % Key) (set 1) (MPU4 Video) - xevi3dg - Xevious 3D/G (Japan, XV31/VER.A) + v4redhtpw + Red Hot Poker (Release 3, 20p Switchable to 10p, Cash+Token, Datapak) (set 2) (MPU4 Video) - xevios - Xevios + v4redhtpx + Red Hot Poker (Release 3, 20p Switchable to 10p, Cash+Token) (set 2) (MPU4 Video) - xevious - Xevious (Namco) + v4redhtpy + Red Hot Poker (Release 3, 20p Switchable to 10p, Cash+Token, Datapak, % Key) (set 2) (MPU4 Video) - xeviousa - Xevious (Atari, harder) + v4redhtpz + Red Hot Poker (Release 3, 20p Switchable to 10p, Cash+Token, Datapak) (set 3) (MPU4 Video) - xeviousb - Xevious (Atari) + v4rencas + Reno Casino (BWB) (set 1) (MPU4 Video) - xeviousc - Xevious (Atari, Namco PCB) + v4rencasa + Reno Casino (BWB) (set 2) (MPU4 Video) - xexex - Xexex (ver EAA) + v4rencasb + Reno Casino (BWB) (set 3) (MPU4 Video) - xexexa - Xexex (ver AAA) + v4rencasc + Reno Casino (BWB) (set 4) (MPU4 Video) - xexexj - Xexex (ver JAA) + v4rencasd + Reno Casino (BWB) (set 5) (MPU4 Video) - xfiles - X-Files + v4rencase + Reno Casino (BWB) (set 6) (MPU4 Video) - xfiles2 - X-Files (2.04) + v4rencasf + Reno Casino (BWB) (set 7) (MPU4 Video) - xfilesp - X-Files (3.03) + v4rencasg + Reno Casino (BWB) (set 8) (MPU4 Video) - xforce - X Force + v4rencash + Reno Casino (BWB) (set 9) (MPU4 Video) - xiistag - XII Stag (V2.01J) + v4rencasi + Reno Casino (BWB) (set 10) (MPU4 Video) - xmcota - X-Men: Children of the Atom (Euro 950331) + v4reno + Reno Reels (Release A, 20p Fixed, All - Cash) (set 1) (MPU4 Video) - xmcotaa - X-Men: Children of the Atom (Asia 950105) + v4reno5 + Reno Reels (Release 5) (MPU4 Video) - xmcotaar1 - X-Men: Children of the Atom (Asia 941217) + v4reno7 + Reno Reels (Release 7) (MPU4 Video) - xmcotah - X-Men: Children of the Atom (Hispanic 950331) + v4reno8 + Reno Reels (Release 8, 20p Fixed, Cash+Token) (MPU4 Video) - xmcotahr1 - X-Men: Children of the Atom (Hispanic 950105) + v4renoa + Reno Reels (Release A, 20p Fixed, All - Cash) (set 2) (MPU4 Video) - xmcotaj - X-Men: Children of the Atom (Japan 950105) + v4renob + Reno Reels (Release A, 20p Switchable 20p/10p/5p, All - Cash) (MPU4 Video) - xmcotaj1 - X-Men: Children of the Atom (Japan 941222) + v4renoc + Reno Reels (Release A, 20p Fixed, Cash+Token) (Datapak) (set 1) (MPU4 Video) - xmcotaj2 - X-Men: Children of the Atom (Japan 941219) + v4renod + Reno Reels (Release A, 20p Fixed, Cash+Token) (Showcase) (set 1) (MPU4 Video) - xmcotaj3 - X-Men: Children of the Atom (Japan 941217) + v4renoe + Reno Reels (Release A, 20p Fixed, Cash+Token) (set 1) (MPU4 Video) - xmcotajr - X-Men: Children of the Atom (Japan 941208 rent version) + v4renof + Reno Reels (Release A, 20p Fixed, Cash+Token) (Showcase) (set 1) (Datapak) (MPU4 Video) - xmcotar1 - X-Men: Children of the Atom (Euro 950105) + v4renog + Reno Reels (Release A, 20p Fixed, Cash+Token) (Datapak) (set 2) (MPU4 Video) - xmcotar1d - X-Men: Children of the Atom (Euro 950105 Phoenix Edition) (bootleg) + v4renoh + Reno Reels (Release A, 20p Fixed, Cash+Token) (Showcase) (set 2) (MPU4 Video) - xmcotau - X-Men: Children of the Atom (USA 950105) + v4renoi + Reno Reels (Release A, 20p Fixed, Cash+Token) (set 2) (MPU4 Video) - xmen - X-Men (4 Players ver UBB) + v4renoj + Reno Reels (Release A, 20p Fixed, Cash+Token) (Showcase) (set 2) (Datapak) (MPU4 Video) - xmen2pa - X-Men (2 Players ver AAA) + v4renok + Reno Reels (Release A, 20p Fixed, Cash+Token) (Datapak) (set 3) (MPU4 Video) - xmen2pe - X-Men (2 Players ver EAA) + v4renol + Reno Reels (Release A, 20p Fixed, Cash+Token) (set 3) (MPU4 Video) - xmen2pj - X-Men (2 Players ver JAA) + v4renom + Reno Reels (Release A, 20p Fixed, All - Cash) (Datapak) (MPU4 Video) - xmen6p - X-Men (6 Players ver ECB) + v4renon + Reno Reels (Release A, 25p Fixed, All - Cash) (Datapak) (MPU4 Video) - xmen6pu - X-Men (6 Players ver UCB) + v4renoo + Reno Reels (Release A, 25p Fixed, All - Cash) (MPU4 Video) - xmena - X-Men (4 Players ver AEA) + v4renop + Reno Reels (Release A, 20p Switchable 20p/25p, All - Cash) (Datapak) (MPU4 Video) - xmenaa - X-Men (4 Players ver ADA) + v4renoq + Reno Reels (Release A, 20p Switchable 20p/25p, All - Cash) (MPU4 Video) - xmene - X-Men (4 Players ver EBA) + v4renor + Reno Reels (Release A, 20p Switchable 20p/10p/5p, Cash+Token) (Showcase) (set 1) (MPU4 Video) - xmenj - X-Men (4 Players ver JBA) + v4renos + Reno Reels (Release A, 20p Switchable 20p/10p/5p, Cash+Token) (set 1) (MPU4 Video) - xmultipl - X Multiply (World, M81) + v4renot + Reno Reels (Release A, 20p Switchable 20p/10p/5p, Cash+Token) (Showcase) (set 2) (MPU4 Video) - xmultiplm72 - X Multiply (Japan, M72) + v4renou + Reno Reels (Release A, 20p Switchable 20p/10p/5p, Cash+Token) (set 2) (MPU4 Video) - xmvsf - X-Men Vs. Street Fighter (Euro 961004) + v4rhmaz + Red Hot Mazooma Belle (BWB) (Version 1.4, Cash+Token, 1993 Awards, 10p Fixed) (MPU4 Video) - xmvsfa - X-Men Vs. Street Fighter (Asia 961023) + v4rhmaza + Red Hot Mazooma Belle (BWB) (Version 1.4 DY, Cash+Token, 1993 Awards, 10p Fixed, Datapak, % Key) (MPU4 Video) - xmvsfar1 - X-Men Vs. Street Fighter (Asia 961004) + v4rhmazb + Red Hot Mazooma Belle (BWB) (Version 1.4 D, Cash+Token, 1993 Awards, 10p Fixed, Datapak) (MPU4 Video) - xmvsfar2 - X-Men Vs. Street Fighter (Asia 960919) + v4rhmazc + Red Hot Mazooma Belle (BWB) (Version 1.4, Cash+Token, 1993 Awards, 20p Fixed) (MPU4 Video) - xmvsfar3 - X-Men Vs. Street Fighter (Asia 960910) + v4rhmazd + Red Hot Mazooma Belle (BWB) (Version 1.4 DY, Cash+Token, 1993 Awards, 20p Fixed, Datapak, % Key) (set 1) (MPU4 Video) - xmvsfb - X-Men Vs. Street Fighter (Brazil 961023) + v4rhmaze + Red Hot Mazooma Belle (BWB) (Version 1.4 DY, Cash+Token, 1993 Awards, 20p Fixed, Datapak, % Key) (set 2) (MPU4 Video) - xmvsfh - X-Men Vs. Street Fighter (Hispanic 961004) + v4rhmazf + Red Hot Mazooma Belle (BWB) (Version 1.4 D, Cash+Token, 1993 Awards, 20p Fixed, Datapak) (MPU4 Video) - xmvsfj - X-Men Vs. Street Fighter (Japan 961004) + v4rhmazg + Red Hot Mazooma Belle (BWB) (Version 1.4, Cash+Token, 1993 Awards, 20p Switchable to 10p) (MPU4 Video) - xmvsfjr1 - X-Men Vs. Street Fighter (Japan 960910) + v4rhmazh + Red Hot Mazooma Belle (BWB) (Version 1.4 DY, Cash+Token, 1993 Awards, 20p Switchable to 10p, Datapak, % Key) (MPU4 Video) - xmvsfjr2 - X-Men Vs. Street Fighter (Japan 960909) + v4rhmazi + Red Hot Mazooma Belle (BWB) (Version 1.4 D, Cash+Token, 1993 Awards, 20p Switchable to 10p, Datapak) (MPU4 Video) - xmvsfr1 - X-Men Vs. Street Fighter (Euro 960910) + v4rhmazj + Red Hot Mazooma Belle (BWB) (Version 1.4 Y, Cash+Token, 1993 Awards, 20p Switchable to 10p, % Key) (MPU4 Video) - xmvsfu - X-Men Vs. Street Fighter (USA 961023) + v4rhmazk + Red Hot Mazooma Belle (BWB) (Version 1.4 C, Cash+Token, 1993 Awards, 20p Switchable to 10p) (MPU4 Video) - xmvsfu1d - X-Men Vs. Street Fighter (USA 961004 Phoenix Edition) (bootleg) + v4shpwnd + Shop Window (v2.0) (Release 2, 20p Fixed, Cash + Special BWB Token) (set 1) (MPU4 Video) - xmvsfur1 - X-Men Vs. Street Fighter (USA 961004) + v4shpwnda + Shop Window (v2.0) (Release 2, 10p Fixed, Cash + Special BWB Token) (MPU4 Video) - xorworld - Xor World (prototype) + v4shpwndb + Shop Window (v2.0) (Release 2, 10p Fixed, Cash + Special BWB Token, Datapak, % Key) (MPU4 Video) - xplan - X-Plan (Ver. 1.01) + v4shpwndc + Shop Window (v2.0) (Release 2, 10p Fixed, Cash + Special BWB Token, Datapak) (MPU4 Video) - xrally - Xtreme Rally / Off Beat Racer! + v4shpwndd + Shop Window (v2.0) (Release 2, 10p Fixed, Cash + Special BWB Token, % Key) (MPU4 Video) - xsandos - X's & O's + v4shpwnde + Shop Window (v2.0) (Release 2, 20p Fixed, Cash + Special BWB Token, Datapak, % Key) (MPU4 Video) - xsedae - X Se Dae Quiz (Korea) + v4shpwndf + Shop Window (v2.0) (Release 2, 20p Fixed, Cash + Special BWB Token, Datapak) (set 1) (MPU4 Video) - xsleena - Xain'd Sleena (World) + v4shpwndg + Shop Window (v2.0) (Release 2, 20p Fixed, Cash + Special BWB Token, % Key) (MPU4 Video) - xsleenab - Xain'd Sleena (bootleg) + v4shpwndh + Shop Window (v2.0) (Release 2, 20p Fixed, Cash + Special BWB Token, Datapak) (set 2) (MPU4 Video) - xsleenaj - Xain'd Sleena (Japan) + v4shpwndi + Shop Window (v2.0) (Release 2, 20p Fixed, Cash + Special BWB Token) (set 2) (MPU4 Video) - xtheball - X the Ball + v4shpwndj + Shop Window (v2.0) (Release 2, 20p Switchable to 10p, Cash + Special BWB Token) (MPU4 Video) - xtom3d - X Tom 3D + v4shpwndk + Shop Window (v2.0) (Release 2, 20p Switchable to 10p, Cash + Special BWB Token, Datapak, % Key) (MPU4 Video) - xtrain - X-Train (Ver. 1.3) + v4shpwndl + Shop Window (v2.0) (Release 2, 20p Switchable to 10p, Cash + Special BWB Token, Datapak) (MPU4 Video) - xtrial - Xtrial Racing (ver JAB) + v4shpwndm + Shop Window (v2.0) (Release 2, 20p Switchable to 10p, Cash + Special BWB Token, % Key) (MPU4 Video) - xtrmhnt2 - Extreme Hunting 2 + v4sixx + £6-X (BWB) (Release 3, 20p Fixed, Cash+Token) (set 1) (MPU4 Video) - xtrmhunt - Extreme Hunting + v4sixxa + £6-X (BWB) (Release 3, 20p Fixed, Cash+Token) (set 2) (MPU4 Video) - xxmissio - XX Mission + v4sixxb + £6-X (BWB) (Release 3, 20p Fixed, Cash+Token, Datapak) (set 1) (MPU4 Video) - xybots - Xybots (rev 2) + v4sixxc + £6-X (BWB) (Release 3, 20p Fixed, Cash+Token, % Key) (MPU4 Video) - xybots0 - Xybots (rev 0) + v4sixxd + £6-X (BWB) (Release 3, 20p Fixed, Cash+Token, Datapak) (set 2) (MPU4 Video) - xybots1 - Xybots (rev 1) + v4sixxe + £6-X (BWB) (Release 3, 20p Fixed, Cash+Token) (set 3) (MPU4 Video) - xybotsf - Xybots (French, rev 3) + v4sixxf + £6-X (BWB) (Release 3, 20p Fixed, Cash+Token, Datapak, % Key) (MPU4 Video) - xybotsg - Xybots (German, rev 3) + v4sixxg + £6-X (BWB) (Release 3, 20p Switchable to 10p, Cash+Token) (MPU4 Video) - xymg - Xing Yun Man Guan (China, V651C) + v4sixxh + £6-X (BWB) (Release 3, 20p Switchable to 10p, Cash+Token, Datapak, % Key) (MPU4 Video) - xyonix - Xyonix + v4sixxi + £6-X (BWB) (Release 3, 20p Switchable to 10p, Cash+Token, Datapak) (MPU4 Video) - yachtmn - Yachtsman + v4sixxj + £6-X (BWB) (Release 3, 20p Switchable to 10p, Cash+Token, % Key) (MPU4 Video) - yamagchi - Go Go Mr. Yamaguchi / Yuke Yuke Yamaguchi-kun + v4sixxk + £6-X (BWB) (Release 3, 20p Fixed, All - Cash) (MPU4 Video) - yamato - Yamato (US) + v4sixxl + £6-X (BWB) (Release 3, 20p Switchable to 10p, All - Cash) (MPU4 Video) - yamato2 - Yamato (World?) + v4sixxm + £6-X (BWB) (Release 3, 20p Switchable to 10p, All - Cash, Datapak) (MPU4 Video) - yamyam - Yam! Yam!? + v4sklcsh + Skill Cash (v1.1) (MPU4 Video) - yanchamr - Kaiketsu Yanchamaru (Japan) + v4skltrk + Skill Trek (v1.1) (MPU4 Video, set 1) - yankeedo - Yankee DO! + v4skltrka + Skill Trek (v1.1) (MPU4 Video, set 2) - yarunara - Mahjong Yarunara (Japan) + v4strike + Strike it Lucky (v0.5) (MPU4 Video) - yellowcbb - Yellow Cab (bootleg) + v4strike2 + Strike it Lucky (v0.53) (MPU4 Video) - yellowcbj - Yellow Cab (Japan) + v4strike2d + Strike it Lucky (v0.53, Datapak) (MPU4 Video) - yesnoj - Yes/No Sinri Tokimeki Chart + v4striked + Strike it Lucky (v0.5, Datapak) (MPU4 Video) - yiear - Yie Ar Kung-Fu (program code I) + v4sunbst + Sunburst (BWB) (Version 1.4, Cash+Token, 1993 Awards, 10p Fixed) (MPU4 Video) - yiear2 - Yie Ar Kung-Fu (program code G) + v4sunbsta + Sunburst (BWB) (Version 1.4 DY, Cash+Token, 1993 Awards, 10p Fixed, % Key) (MPU4 Video) - yieartf - Yie Ar Kung-Fu (GX361 conversion) + v4sunbstb + Sunburst (BWB) (Version 1.4 D, Cash + Token, 1993 Awards, 10p Fixed) (MPU4 Video) - yosakdon - Yosaku To Donbei (set 1) + v4sunbstc + Sunburst (BWB) (Version 1.4 Y, Cash+Token, 1993 Awards, 10p Fixed) (MPU4 Video) - yosakdona - Yosaku To Donbei (set 2) + v4sunbstd + Sunburst (BWB) (Version 1.4, Cash+Token, 1993 Awards, 20p Fixed) (set 1) (MPU4 Video) - yosimotm - Mahjong Yoshimoto Gekijou [BET] (Japan) + v4sunbste + Sunburst (BWB) (Version 1.4 DY, Cash+Token, 1993 Awards, 20p Fixed, % Key) (set 1) (MPU4 Video) - yosimoto - Mahjong Yoshimoto Gekijou (Japan) + v4sunbstf + Sunburst (BWB) (Version 1.4 DY, Cash+Token, 1993 Awards, 20p Fixed, % Key) (set 2) (MPU4 Video) - youjyudn - Youjyuden (Japan) + v4sunbstg + Sunburst (BWB) (Version 1.4 D, Cash+Token, 1993 Awards, 20p Fixed) (set 1) (MPU4 Video) - youkaidk1 - Yokai Douchuuki (Japan, old version (YD1)) + v4sunbsth + Sunburst (BWB) (Version 1.4 D, Cash+Token, 1993 Awards, 20p Fixed) (set 2) (MPU4 Video) - youkaidk2 - Yokai Douchuuki (Japan, new version (YD2, Rev B)) + v4sunbsti + Sunburst (BWB) (Version 1.4 Y, Cash+Token, 1993 Awards, 20p Fixed, % Key) (MPU4 Video) - youma - Youma Ninpou Chou (Japan) + v4sunbstj + Sunburst (BWB) (Version 1.4 D, Cash+Token, 1993 Awards, 20p Fixed) (MPU4 Video) - youma2 - Youma Ninpou Chou (Japan, alt) + v4sunbstk + Sunburst (BWB) (Version 1.4, Cash+Token, 1993 Awards, 20p Fixed) (set 2) (MPU4 Video) - youmab - Youma Ninpou Chou (Game Electronics bootleg, set 1) + v4sunbstl + Sunburst (BWB) (Version 1.4, Cash+Token, 1993 Awards, 20p Switchable to 10p) (set 1) (MPU4 Video) - youmab2 - Youma Ninpou Chou (Game Electronics bootleg, set 2) + v4sunbstm + Sunburst (BWB) (Version 1.4, Cash+Token, 1993 Awards, 20p Switchable to 10p) (set 2) (MPU4 Video) - yujan - Yu-Jan + v4sunbstn + Sunburst (BWB) (Version 1.4 DY, Cash+Token, 1993 Awards, 20p Switchable to 10p, % Key) (MPU4 Video) - yuka - Yu-Ka + v4sunbsto + Sunburst (BWB) (Version 1.4 D, Cash+Token, 1993 Awards, 20p Switchable to 10p (MPU4 Video) - yukiwo - Yukiwo (World, prototype) + v4sunbstp + Sunburst (BWB) (Version 1.4 D, Cash+Token, 1993 Awards, 20p Switchable to 10p) (MPU4 Video) - yukon - Yukon (version 2.0) + v4sunbstq + Sunburst (BWB) (Version 1.4 Y, Cash+Token, 1993 Awards, 20p Switchable to 10p, % Key) (MPU4 Video) - yukon1 - Yukon (version 1.0) + v4sunbstr + Sunburst (BWB) (Version 1.4 C, 1993 Awards, 10p Fixed) (MPU4 Video) - yukongld - Yukon Gold (Russia) + v4sunbsts + Sunburst (BWB) (Version 1.4 C, 1993 Awards, 20p Fixed) (MPU4 Video) - yumefuda - Yumefuda [BET] + v4sunbstt + Sunburst (BWB) (Version 1.4 C, 1993 Awards, 20p Switchable to 10p) (MPU4 Video) - yuyugogo - Yuuyu no Quiz de GO!GO! (Japan) + v4sunbstu + Sunburst (BWB) (Version 1.4 IC, 1993 Awards, 20p Switchable to 10p) (MPU4 Video) - yuyuhaku - The Battle of Yu Yu Hakusho: Shitou! Ankoku Bujutsukai! + v4tetrs + Tetris Payout (BWB TET1 Version 2.2, set 1) (MPU4 Video) - zankor - Zankor (Italian speech) + v4tetrs1 + Tetris Payout (BWB TET1 Version 2.2, set 2) (MPU4 Video) - zaryavos - Zarya Vostoka + v4timebn + Time Bandit (BWB) (Release 1, 20p Fixed, Cash + Tokens) (set 1) (MPU4 Video) - zarza - Zarza + v4timebna + Time Bandit (BWB) (Release 1, 20p Fixed, Cash + Tokens) (set 2) (MPU4 Video) - zarza1 - Zarza (alternate set) + v4timebnb + Time Bandit (BWB) (Release 1, 20p Fixed, Cash + Tokens) (Datapak) (set 1) (MPU4 Video) - zarzon - Zarzon + v4timebnc + Time Bandit (BWB) (Release 1, 20p Fixed, Cash + Tokens) (set 3) (MPU4 Video) - zaviga - Zaviga + v4timebnd + Time Bandit (BWB) (Release 1, 20p Fixed, Cash + Tokens) (Datapak) (set 2) (MPU4 Video) - zavigaj - Zaviga (Japan) + v4timebne + Time Bandit (BWB) (Release 1, 20p Fixed, Cash + Tokens) (Datapak) (set 3) (MPU4 Video) - zaxxon - Zaxxon (set 1) + v4tmach + Time Machine (v2.0) (Issue 3 Questions) (MPU4 Video) - zaxxon2 - Zaxxon (set 2) + v4tmach1 + Time Machine (v2.0) (Issue 1 Questions) (MPU4 Video) - zaxxon3 - Zaxxon (set 3) + v4tmach1d + Time Machine (v2.0) (Issue 1 Questions) (Datapak) (MPU4 Video) - zaxxonb - Jackson + v4tmach2 + Time Machine (v2.0) (Issue 2 Questions) (MPU4 Video) - zaxxonj - Zaxxon (Japan) + v4tmach2d + Time Machine (v2.0) (Issue 2 Questions) (Datapak) (MPU4 Video) - zedblade - Zed Blade / Operation Ragnarok + v4tmachd + Time Machine (v2.0) (Issue 3 Questions) (Datapak) (MPU4 Video) - zekepeak - Zeke's Peak + v4turnov + Turnover (v2.3) (MPU4 Video) - zektor - Zektor (revision B) + v4turnova + Turnover (v2.33) (MPU4 Video) - zephy - Zephy + v4turnovc + Turnover (v2.3O) (MPU4 Video) - zero - Zero (set 1, Defender bootleg) + v4turnovd + Turnover (v?.?) (MPU4 Video) - zero2 - Zero (set 2, Defender bootleg) + v4vgpok + Vegas Poker (prototype, release 2) (MPU4 Video) - zerogu2 - Zero Gunner 2 + v4wize + Wize Move (v1.3) (MPU4 Video) - zerogun - Zero Gunner (Export, Model 2B) + v4wizeb + Wize Move (v1.33) (MPU4 Video) - zeroguna - Zero Gunner (Export, Model 2A) + v4wizec + Wize Move (v1.3d3) (Datapak) (MPU4 Video) - zerogunaj - Zero Gunner (Japan, Model 2A) + v4wized + Wize Move (v1.3d) (Datapak) (MPU4 Video) - zerogunj - Zero Gunner (Japan, Model 2B) + v4wizen + Wize Move (v?.?) (MPU4 Video) - zerohour - Zero Hour (set 1) + v4wizeo + Wize Move (v1.2) (MPU4 Video) - zerohoura - Zero Hour (set 2) + valkyrie + Valkyrie no Densetsu (Japan) - zeropnt - Zero Point (set 1) + valtric + Valtric - zeropnt2 - Zero Point 2 + vamphalf + Vamf x1/2 (Europe, version 1.1.0908) - zeropnta - Zero Point (set 2) + vamphalfk + Vamp x1/2 (Korea, version 1.1.0908) - zeropntj - Zero Point (Japan) + vamphalfr1 + Vamf x1/2 (Europe, version 1.0.0903) - zeroteam - Zero Team USA (set 1, US, Fabtek license) + vampj + Vampire: The Night Warriors (Japan 940705) - zeroteama - Zero Team (set 2, Japan? (earlier?)) + vampja + Vampire: The Night Warriors (Japan 940705 alt) - zeroteamb - Zero Team (set 3, Japan? (later batteryless)) + vampjr1 + Vampire: The Night Warriors (Japan 940630) - zeroteamc - Zero Team (set 4, Taiwan, Liang Hwa license) + vandyjal + Vandyke (Jaleco, Set 1) - zeroteamd - Zero Team (set 5, Korea, Dream Soft license) + vandyke + Vandyke (Japan) - zeroteams - Zero Team Selection + vandykeb + Vandyke (bootleg with PIC16c57) - zeroteamsr - Zero Team Suicide Revival Kit + vandykejal + Vandyke (Jaleco, set 1) - zerotime - Zero Time + vandykejal2 + Vandyke (Jaleco, set 2) - zerotm2k - Zero Team 2000 + vangrd2 + Vanguard II - zerotrgt - Zero Target (World, CW) + vangrdce + Vanguard (Centuri) - zerotrgta - Zero Target (World, CT) + vanguard + Vanguard (SNK) - zerowing - Zero Wing (2P set) + vanguardc + Vanguard (Centuri) - zerowing1 - Zero Wing (1P set) + vanguardg + Vanguard (Germany) - zerowingw - Zero Wing (2P set, Williams license) + vanguardj + Vanguard (Japan) - zerozone - Zero Zone + vanilla + Mahjong Vanilla Syndrome (Japan) - zgundm - Mobile Suit Z-Gundam: A.E.U.G. vs Titans (ZGA1 Ver. A) + vanvan + Van-Van Car - zgundmdx - Mobile Suit Z-Gundam: A.E.U.G. vs Titans DX (ZDX1 Ver. A) + vanvanb + Van-Van Car (Karateco set 2) - zigzag - Zig Zag (Galaxian hardware, set 1) + vanvank + Van-Van Car (Karateco set 1) - zigzag2 - Zig Zag (Galaxian hardware, set 2) + vaportra + Vapor Trail - Hyper Offence Formation (World revision 1) - zingzip - Zing Zing Zip + vaportra3 + Vapor Trail - Hyper Offence Formation (World revision 3?) - zingzipbl - Zing Zing Zip (bootleg) + vaportrau + Vapor Trail - Hyper Offence Formation (US) - zintrckb - Zintrick / Oshidashi Zentrix (hack) + vaportru + Vapor Trail - Hyper Offence Formation (US) - zipzap - Zip & Zap + vaportrx + Vapor TRX (GUTS Jul 2 1998 / MAIN Jul 18 1998) - znpwfv - Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000) + vaportrxp + Vapor TRX (GUTS Apr 10 1998 / MAIN Apr 10 1998) - zoar - Zoar + varth + Varth: Operation Thunderstorm (World 920714) - zodiack - Zodiack + varthb + Varth: Operation Thunderstorm (bootleg, set 1) - zokumahj - Zoku Mahjong Housoukyoku (Japan) + varthb2 + Varth: Operation Thunderstorm (bootleg, set 2) - zokuoten - Zoku Otenamihaiken (V2.03J) + varthj + Varth: Operation Thunderstorm (Japan 920714) - zombraid - Zombie Raid (9/28/95, US) + varthjr + Varth: Operation Thunderstorm (Japan Resale Ver. 920714) - zombraidp - Zombie Raid (9/28/95, US, prototype PCB) + varthr1 + Varth: Operation Thunderstorm (World 920612) - zombraidpj - Zombie Raid (9/28/95, Japan, prototype PCB) + varthu + Varth: Operation Thunderstorm (USA 920612) - zombrvn - Zombie Revenge (JPN, USA, EXP, KOR, AUS) + vasara + Vasara - zoo - Zoo (Ver. ZO.02.D) + vasara2 + Vasara 2 (set 1) - zookeep - Zoo Keeper (set 1) + vasara2a + Vasara 2 (set 2) - zookeep2 - Zoo Keeper (set 2) + vastar + Vastar (set 1) - zookeep3 - Zoo Keeper (set 3) + vastar2 + Vastar (set 2) - zoom909 - Zoom 909 + vastar3 + Vastar (set 3) - zooo - Zooo (V2.01J) + vastar4 + Vastar (set 4) - zortonbr - Zorton Brothers (Los Justicieros) + vathlete + Virtua Athletics / Virtua Athlete (GDS-0019) - zunkyou - Zunzunkyou No Yabou (Japan) + vathletep + Virtua Athletics / Virtua Athlete (prototype) - zunou - Touch De Zunou (Rev A) + vautour + Vautour (bootleg of Phoenix) (8085A CPU) - zupapa - Zupapa! + vautourz + Vautour (bootleg of Phoenix) (Z80 CPU) - zwackery - Zwackery + vautourza + Vautour (bootleg of Phoenix) (Z80 CPU, single PROM) - zzblock - Zun Zun Block [TTL] + vball + U.S. Championship V'ball (US) - zzyzzyxx - Zzyzzyxx (set 1) + vball2pj + U.S. Championship V'ball (Japan) - zzyzzyxx2 - Zzyzzyxx (set 2) + vball2pjb + U.S. Championship V'ball (bootleg of Japan set) - z80 - Z80 + vballb + U.S. Championship V'ball (bootleg of US set) - gfxdecode - gfxdecode + vblokbrk + VS Block Breaker (Europe) - palette - palette + vblokbrka + VS Block Breaker (Asia) - screen - Video Screen + vbowl + Virtua Bowling (World, V101XCM) - speaker - Speaker + vbowlhk + Virtua Bowling (Hong Kong, V101HJS) - i8255 - 8255 PPI + vbowlj + Virtua Bowling (Japan, V100JCM) - samples - Samples + vbrakout + Vector Breakout [h] - sega005_sound - 005 Custom + vcarn + Video Carnival 1999 / Super Royal Card (Version 0.11) - m6803 - M6803 + vcircle + Vicious Circle (prototype) - irem_audio - Irem Audio + vcombat + Virtual Combat - ay8910 - AY-3-8910A + vcop + Virtua Cop (Revision B) - msm5205 - MSM5205 + vcop2 + Virtua Cop 2 - vr4300be_drc - VR4300 (big) DRC + vcop3 + Virtua Cop 3 (Rev B) (GDX-0003B) - rsp_drc - RSP DRC + vcop3a + Virtua Cop 3 (Rev A) (GDX-0003A) - dmadac - DMA-driven DAC + vcopa + Virtua Cop (Revision A) - n64_periphs - N64 Periphal Chips + vector + Vector - sh4 - SH-4 (little) + vega + Vega - timer - Timer + vegas + Vegas - arm7 - ARM7 + vegasfst + Royal Vegas Joker Card (fast deal) - maple_dc - MAPLE_DC + vegasfte + Royal Vegas Joker Card (fast deal, English gfx) - 93c46_16 - Serial EEPROM 93C46 (64x16) + vegasgp + Vegas (Game Plan) - powervr2 - PowerVR 2 + vegasmil + Royal Vegas Joker Card (fast deal, Mile) - aica - AICA + vegasslw + Royal Vegas Joker Card (slow deal) - aicartc - AICA RTC + vegast + Vegas (Taito) - mie - MIE + vendet2p + Vendetta (World 2 Players ver. W) - mie_jvs - MIE-JVS + vendetao + Vendetta (World 4 Players ver. R) - sega_837_13551 - SEGA-837-13551 + vendetas + Vendetta (Asia 2 Players ver. U) - 93c46_8 - Serial EEPROM 93C46 (128x8) + vendetta + Vendetta (World, 4 Players, ver. T) - x76f100 - X76F100 Flash + vendetta2pd + Vendetta (Asia, 2 Players, ver. D) - naomi_m2_board - NAOMI-M2-BOARD + vendetta2peba + Vendetta (World, 2 Players, ver. EB-A?) - m68000 - M68000 + vendetta2pp + Crime Fighters 2 (Japan, 2 Players, ver. P) - ym2151 - YM2151 + vendetta2pu + Vendetta (Asia, 2 Players, ver. U) - okim6295 - OKI6295 + vendetta2pun + Vendetta (World, 2 Players, ver. ?) - netlist_sound - Netlist sound device + vendetta2pw + Vendetta (World, 2 Players, ver. W) - netlist_analog_input - netlist analog input + vendettan + Crime Fighters 2 (Japan, 4 Players, ver. N) - ym2203 - YM2203 + vendettar + Vendetta (US, 4 Players, ver. R) - qsound - Q-Sound + vendettaun + Vendetta (World, 4 Players, ver. ?) - dsp16 - DSP16 + vendettaz + Vendetta (Asia, 4 Players, ver. Z) - pxa255 - PXA255 + vendettj + Crime Fighters 2 (Japan 2 Players ver. P) - 93c66_16 - Serial EEPROM 93C66 (256x16) + vendtaso + Vendetta (Asia 2 Players ver. D) - cxd8530cq - CXD8530CQ + venetian + Venetian Nights (1J008911, NSW/ACT) - psxirq - PSX IRQ + venice + Venice (0151355, US) - psxdma - PSX DMA + venicea5 + Venice (02J02056, Venezuela) - psxmdec - PSX MDEC + venom + Venom & Spider-Man - Separation Anxiety (SNES bootleg) - psxrcnt - PSX RCNT + venture + Venture (version 5 set 1) - psxsio0 - PSX SIO-0 + venture2 + Venture (version 5 set 2) - znsec - ZNSEC + venture4 + Venture (version 4) - zndip - ZNDIP + venture5a + Venture (version 5 set 2) - psxsio1 - PSX SIO-1 + venture5b + Venture (version 5 set 2, bootleg) - ram - RAM + venus + Venus (bootleg of Gyruss) - cxd8561q - CXD8561Q + verbena + Verbena (bootleg of Carnival) - spu - SPU + version4 + Version 4 (Version 4.3R CGA) - at28c16 - AT28C16 + version4d2 + Version 4 (Version 4.3E CGA) - ym2610 - YM2610 + version4d3 + Version 4 (Version 4.3LT CGA) - upd4990a - uPD4990A + version4o + Version 4 (Version 4.2R CGA) - nvram - NVRAM + version4v + Version 4 (Version 4.3R Dual) - z180 - Z180 + version4v2 + Version 4 (Version 4.3E Dual) - namco - Namco + version4v3 + Version 4 (Version 4.3LT Dual) - dac - DAC + vf + Virtua Fighter - amd_29lv200t - AMD 29LV200T Flash + vf2 + Virtua Fighter 2 (Version 2.1) - i8080 - 8080 + vf2a + Virtua Fighter 2 (Revision A) - mb14241 - MB14241 + vf2b + Virtua Fighter 2 (Revision B) - ym2610b - YM2610B + vf2o + Virtua Fighter 2 - mc68hc11 - MC68HC11 + vf3 + Virtua Fighter 3 (Revision D) - m6809 - M6809 + vf3a + Virtua Fighter 3 (Revision A) - via6522 - 6522 VIA + vf3c + Virtua Fighter 3 (Revision C) - pia6821 - 6821 PIA + vf3tb + Virtua Fighter 3 Team Battle - c6545_1 - C6545-1 CRTC + vf4 + Virtua Fighter 4 Version C (GDS-0012C) - mc146818 - MC146818 + vf4b + Virtua Fighter 4 (Rev B) (GDS-0012B) - arm7_be - ARM7 (big endian) + vf4cart + Virtua Fighter 4 (World) - cdrom_image - CD-ROM Image + vf4evo + Virtua Fighter 4: Evolution (Version B) (Japan) (GDS-0024C) - nb1413m3 - Nichibutsu NB1413M3 + vf4evoa + Virtua Fighter 4: Evolution (Japan) (GDS-0024A) - kaneko_pandora - Kaneko Pandora - PX79C480FP-3 + vf4evob + Virtua Fighter 4: Evolution (Version B) (Japan) (GDS-0024B) - upd7810 - uPD7810 + vf4evoct + Virtua Fighter 4: Evolution (World) - ym2413 - YM2413 + vf4o + Virtua Fighter 4 (GDS-0012) - vsystem_spr - vsystem_spr_device + vf4tuned + Virtua Fighter 4: Final Tuned (Ver. B) (GDS-0036F) - i8088 - I8088 + vf4tuneda + Virtua Fighter 4: Final Tuned (Rev A) (GDS-0036A) - gotsndr2 - Gottlieb Sound rev. 2 + vf4tunedd + Virtua Fighter 4: Final Tuned (Ver. A) (GDS-0036D) - m6502 - M6502 + vf5 + Virtua Fighter 5 (Export) - ay8913 - AY-3-8913A + vfive + V-Five (Japan) - sp0250 - SP0250 + vfkids + Virtua Fighter Kids (JUET 960319 V0.000) - m68705 - M68705 + vformula + Virtua Formula - buggychl_mcu - BuggyChl MCU + vfremix + Virtua Fighter Remix (JUETBKAL 950428 V1.000) - msm5232 - MSM5232 + vfurlong + Net@Select: Horse Racing - Victory Furlong - v70 - V70 + vgoalsca + V Goal Soccer (US/Japan/Korea) - ymf271 - YMF271 + vgoalsoc + V Goal Soccer (Europe) - sn76489a - SN76489A + vhunt2 + Vampire Hunter 2: Darkstalkers Revenge (Japan 970929) - z80pio - Z8420 PIO + vhunt2d + Vampire Hunter 2: Darkstalkers Revenge (Japan 970913 Phoenix Edition) (bootleg) - isa8 - ISA8 + vhunt2r1 + Vampire Hunter 2: Darkstalkers Revenge (Japan 970913) - isa8_slot - ISA8_SLOT + vhuntj + Vampire Hunter: Darkstalkers' Revenge (Japan 950316) - 4enlinea_cga - ISA8_CGA_4ENLINEA + vhuntjr1 + Vampire Hunter: Darkstalkers' Revenge (Japan 950307) - mc6845 - MC6845 CRTC + vhuntjr1s + Vampire Hunter: Darkstalkers' Revenge (Japan 950307 stop version) - 7474 - 7474 TTL + vhuntjr2 + Vampire Hunter: Darkstalkers' Revenge (Japan 950302) - galaxian_sound - Galaxian Custom + victlapj + Ace Driver: Victory Lap (Rev. ADV1 Ver.C, Japan) - discrete - DISCRETE + victlapw + Ace Driver: Victory Lap (Rev. ADV2, World) - tmp68301 - TMP68301 + victnine + Victorious Nine - z80ctc - Z80 CTC + victor21 + Victor 21 - ym3812 - YM3812 + victor5 + Victor 5 - mc65c02 - M65C02 + victor5a + G.E.A. - r4650be_drc - IDT R4650 (big) DRC + victor6 + Victor 6 (v2.3N) - h83002 - H8/3002 + victor6a + Victor 6 (v2.3) - h8h_intc - H8H INTC + victor6b + Victor 6 (v1.2) - h8_adc_3337 - H8 ADC 3337 + victorba + Victor Banana - h8_digital_port - H8 digital port + victory + Victory - h8_timer16 - H8 16-bits timer + victoryc + Victory (Comsoft) - h8h_16bits_timer_channel - H8H 16-bits timer channel + victorycb + Victory (Comsoft) (bootleg) - h8_sci - H8 Serial Communications Interface + victoryp + Victory (Pinball) - namco_settings - Namco settings device + victorypf + Victory (Pinball, French) - rtc4543 - Epson R4543 + victorypg + Victory (Pinball, German) - devcb2_line_dispatch - Line dispatcher (2 slots) + victroad + Victory Road - c352 - C352 + videight + Video Eight - ptm6840 - 6840 PTM + video21 + Video 21 - t11 - T11 + videocba + Video Cordoba - 2804 - Parallel EEPROM 2804 (512x8) + videodad + Video Dado - tilemap - Tilemap + videomat + Videomat (Polish bootleg) - atarimo - Atari Motion Objects + videopin + Video Pinball (16 PROMs version) - atarscom - Atari Sound Communications + videopina + Video Pinball (4 ROMs version) - pokey - POKEY + videopkr + Video Poker - tms5220c - TMS5220C + videtrna + Videotron Poker (normal controls) - decospr - decospr_device + videtron + Videotron Poker (cards selector, set 1) - h46505 - H46505 CRTC + videtron2 + Videotron Poker (cards selector, set 2) - konami_cpu - KONAMI + vidvince + Video Vince and the Game Factory (prototype) - k052109 - Konami 052109 + viewpoin + Viewpoint - k051960 - Konami 051960 + viewpoinp + Viewpoint (prototype) - k051316 - Konami 051316 + vigilant + Vigilante (World, Rev E) - upd7759 - uPD7759 + vigilanta + Vigilante (World, Rev A) - s2650 - S2650 + vigilantb + Vigilante (US, Rev B) - s2636 - Signetics 2636 + vigilantbl + Vigilante (bootleg) - tms5100 - TMS5100 + vigilantc + Vigilante (World, Rev C) - i8257 - DMA8257 + vigilantd + Vigilante (Japan, Rev D) - latch8 - 8 bit latch + vigilantg + Vigilante (US, Rev G) - mb8884 - MB8884 + vigilanto + Vigilante (US) - sn76496 - SN76496 + vigilntj + Vigilante (Japan) - pentium - PENTIUM + vigilntu + Vigilante (US) - pit8259 - 8259 PIC + viking + Viking - am9517a - AM9517A + vikingt + Viking Treasure - pit8254 - 8254 PIT + vikngkng + Viking King - kbdc8042 - Keyboard Controller 8042 + vimana + Vimana (World, set 1) - at_keyb - AT Keyboard + vimana1 + Vimana (old set) - pci_bus_legacy - PCI Bus Legacy + vimanaj + Vimana (Japan) - vga - VGA + vimanan + Vimana (World, set 2) - tms34010 - TMS34010 + vindc2r1 + Vindicators Part II (rev 1) - tms32026 - TMS32026 + vindc2r2 + Vindicators Part II (rev 2) - tlc34076 - TLC34076 + vindctr2 + Vindicators Part II (rev 3) - r3041 - R3041 + vindctr2r1 + Vindicators Part II (rev 1) - jaguargpu - Jaguar GPU + vindctr2r2 + Vindicators Part II (rev 2) - jaguardsp - Jaguar DSP + vindice3 + Vindicators (Europe, rev 3) - vt83c461 - VIA VT83C461 + vindice4 + Vindicators (Europe, rev 4) - ata_slot - ATA Connector + vindict1 + Vindicators (rev 1) - cojag_hdd - cojag HDD + vindict2 + Vindicators (rev 2) - harddisk_image - Harddisk + vindict4 + Vindicators (rev 4) - mediagx - MEDIAGX + vindicte + Vindicators (Europe, rev 5) - ide_controller - IDE Controller (32 bit) + vindictg + Vindicators (German, rev 1) - hdd - IDE Hard Disk + vindictr + Vindicators (rev 5) - ramdac - ramdac + vindictr1 + Vindicators (rev 1) - cdrom - ATAPI CDROM + vindictr2 + Vindicators (rev 2) - ppc403gcx - PowerPC 403GCX + vindictr4 + Vindicators (rev 4) - ymz280b - YMZ280B + vindictre + Vindicators (Europe, rev 5) - i80186 - I80186 + vindictre3 + Vindicators (Europe, rev 3) - leland_80186_sound - Leland 80186 DAC + vindictre4 + Vindicators (Europe, rev 4) - decocpu3 - Data East Pinball CPU Board Type 3 + vindictrg + Vindicators (German, rev 1) - m6808 - M6808 + viofight + Violence Fight (World) - decobsmt - Data East/Sega/Stern BSMT2000 Sound Board + viofightj + Violence Fight (Japan) - bsmt2000 - BSMT2000 + viofightu + Violence Fight (US) - tms32015 - TMS32015 + viostorm + Violent Storm (ver EAC) - decodmd2 - Data East Pinball Dot Matrix Display Type 2 + viostorma + Violent Storm (ver AAC) - m6809e - M6809E + viostormab + Violent Storm (ver AAB) - m6800 - M6800 + viostormeb + Violent Storm (ver EAB) - h83048 - H8/3048 + viostormj + Violent Storm (ver JAC) - fd1094 - FD1094 + viostormu + Violent Storm (ver UAC) - sega_315_5248 - Sega 315-5248 Multiplier + viostormub + Violent Storm (ver UAB) - sega_315_5249 - Sega 315-5249 Divider + viostrma + Violent Storm (Asia ver AAC) - sega_315_5250 - Sega 315-5250 Compare/Timer + viostrmj + Violent Storm (Japan ver JAC) - sega_xboard_sprite - Sega X-Board Sprites + viostrmu + Violent Storm (US ver UAB) - segaic16_video - Sega 16-bit Video + vip2000 + unknown 'VIP 2000' game - segaic16_road - Sega 16-bit Road Generator + vipclub + Vip Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880310) - segapcm - Sega PCM + viper + Viper (rev 3) - sega_315_5195 - Sega 315-5195 Memory Mapper + viperp + Viper (Pinball) - sega_16bit_sprite - Sega System 16B Sprites + viprp1 + Viper Phase 1 (New Version, World) - n7751 - N7751 + viprp1h + Viper Phase 1 (New Version, Holland) - i8243 - I8243 + viprp1hk + Viper Phase 1 (Hong Kong) - sega_sys16a_sprite - Sega System 16A Sprites + viprp1j + Viper Phase 1 (New Version, Japan) - m68020 - M68020 + viprp1k + Viper Phase 1 (New Version, Korea) - tms32025 - TMS32025 + viprp1oj + Viper Phase 1 (Japan) - m37702 - M37702 + viprp1ot + Viper Phase 1 (Germany) - 2864 - Parallel EEPROM 2864 (8192x8) + viprp1pt + Viper Phase 1 (New Version, Portugal) - arm920t - ARM920T + viprp1s + Viper Phase 1 (New Version, Switzerland) - serflash - SERFLASH + viprp1t + Viper Phase 1 (New Version, Germany) - nmk004 - NMK004 + viprp1u + Viper Phase 1 (New Version, US set 1) - h6280 - H6280 + viprp1ua + Viper Phase 1 (New Version, US set 2) - deco_bac06 - decbac06_device + viprsega + Viper Night Drivin' (2.01) - deco_mxc06 - decmxc06_device + viprsega_102 + Viper Night Drivin' (1.02) - pic16c57 - PIC16C57 + virnba + Virtua NBA (USA) - tmsprom - TMSPROM + virnbao + Virtua NBA - tms5110a - TMS5110A + virnbap + Virtua NBA (prototype) - mc68307 - MC68307 + virnbapa + Virtua NBA (prototype, 15.11) - mc68681 - MC68681 + virtpool + Virtual Pool - mc68681_channel - DUART 68681 channel + vitaminc + Mahjong Vitamin C (Japan) - bfm_bda - BFM BDA VFD controller + vivdolls + Vivid Dolls - mc68340 - MC68340 + vjdash + VJ Visual & Music Slap - mcf5206e - MCF5206E + vlcno_1a + Volcano (Sound Only set 3) - mcf5206e_peripheral - MCF5206E Peripheral + vlcno_1b + Volcano (Sound Only set 2) - m68ec020 - M68EC020 + vlcno_1c + Volcano (Sound Only set 1) - m37710 - M37710 + vlcno_ax + Volcano - arm - ARM + vlcunk + unknown VLC multigame - aakart - AAKART + vliner + V-Liner (v0.7a) - vsystem_spr2 - vsystem_spr2_device + vliner53 + V-Liner (v0.53) - vector_device - VECTOR + vliner54 + V-Liner (v0.54) - dvg - DVG + vliner6e + V-Liner (v0.6e) - fd1089a - FD1089A + vliner7e + V-Liner (v0.7e) - sn76494 - SN76494 + vmahjong + Virtual Mahjong (J 961214 V1.000) - wpc - Williams WPC ASIC + vmetal + Varia Metal - adsp2105 - ADSP-2105 + vmetaln + Varia Metal (New Ways Trading Co.) - tc0220ioc - Taito TC0220IOC + vnight + Vampire Night (VPN3 Ver. B) - tc0080vco - Taito TC0080VCO + voleybal + Volley - tc0140syt - Taito TC0140SYT + volfied + Volfied (World, revision 1) - v33 - V33 + volfiedj + Volfied (Japan, revision 1) - v35 - V35 + volfiedjo + Volfied (Japan) - iremga20 - Irem GA20 + volfiedo + Volfied (World) - hd63705 - HD63705 + volfiedu + Volfied (US, revision 1) - c140 - C140 + volfieduo + Volfied (US) - v30 - V30 + vollyrmt + Volly (Ramtek) [TTL] - m72_audio - M72 Custom + voltan + Voltan Escapes Cosmic Doom - naomi_rom_board - NAOMI-ROM-BOARD + von + Cyber Troopers Virtual-On - Twin (Export) - tms32010 - TMS32010 + von2 + Virtual On 2: Oratorio Tangram (Revision B) - seibu_sound - Seibu Sound System + von254g + Virtual On 2: Oratorio Tangram (ver 5.4g) - k007232 - K007232 + von2a + Virtual On 2: Oratorio Tangram (Revision A) - msm6242 - msm6242 + von2o + Virtual On 2: Oratorio Tangram - taito_en - Taito Ensoniq Sound System + vonj + Cyber Troopers Virtual-On - Twin (Japan, Revision B) - mb87078 - Fujitsu MB87078 + vonot + Virtual On Oratorio Tangram M.S.B.S. ver5.66 2000 Edition - es5505 - ES5505 + vonr + Cyber Troopers Virtual-On - Relay (Japan) - buffered_spriteram - Buffered Sprite RAM + vonu + Cyber Troopers Virtual-On - Twin (USA, Revision B) - k007121 - Konami 007121 + vortex + Vortex - k051649 - K051649 + vortexp + Vortex (Pinball) - sega315_5313 - Sega 315-5313 (Genesis VDP) + voyager + Star Trek: Voyager - ym2612 - YM2612 + voyagers + Star Trek: Voyager (stand-up version 1.002) - segapsg - SEGA VDP PSG + vpoker + Videotronics Draw Poker - hc55516 - HC-55516 + vpool + Video Pool (bootleg on Moon Cresta hardware) - ldp1450 - Sony LDP-1450 + vr + Virtua Racing - amiga_paula - Amiga Paula + vrkon_l1 + Varkon (L-1) - legacy_mos8520 - LEGACY_MOS8520 + vrnwrld + Verne's World - amiga_fdc - Amiga FDC + vroulet + Vegas Roulette - m6802 - M6802 + vs10yard + Vs 10-Yard Fight (World, 11/05/84) - v60 - V60 + vs10yardj + Vs 10-Yard Fight (Japan) - ym3438 - YM3438 + vs10yardu + Vs 10-Yard Fight (US, Taito license) - rf5c68 - RF5C68 + vs2 + Virtua Striker 2 (Step 2.0, Export, USA) - ymf278b - YMF278B + vs2002ex + Virtua Striker 2002 (Export) (GDT-0002) - huc6260 - HuC6260 VCE + vs2002j + Virtua Striker 2002 (Japan) (GDT-0001) - huc6270 - HuC6270 VDC + vs2002t3 + Virtua Striker 2002 (Type 3) (GDT-0012) - c6280 - HuC6280 + vs215 + Virtua Striker 2 (Step 1.5, Export, USA) - sn76477 - SN76477 + vs215o + Virtua Striker 2 (Step 1.5, Japan) - address_map_bank - Address Map Bank + vs298 + Virtua Striker 2 '98 (Step 2.0) - hd63701 - HD63701 + vs29815 + Virtua Striker 2 '98 (Step 1.5) - fd1089b - FD1089B + vs299 + Virtua Striker 2 '99 (Export, USA) - gaelco_gae1 - Gaelco GAE1 + vs29915 + Virtua Striker 2 '99.1 (Step 1.5, Export, USA, Revision B) - m6504 - M6504 + vs29915a + Virtua Striker 2 '99 (Step 1.5, Export, USA) - ym3526 - YM3526 + vs29915j + Virtua Striker 2 '99.1 (Step 1.5, Japan, Revision B) - avg_mhavoc - AVG_MHAVOC + vs299a + Virtua Striker 2 '99 (Export, USA, Revision A) - cdp1802 - CDP1802 + vs299j + Virtua Striker 2 '99.1 (Japan, Revision B) - cdp1852 - CDP1852 + vs2_2k + Virtua Striker 2 Ver. 2000 (Rev C) - cdp1869 - RCA CDP1869 + vs2_2ko + Virtua Striker 2 Ver. 2000 - i8751 - I8751 + vs2v991 + Virtua Striker 2 '99.1 (Export, USA, Revision B) - ay8912 - AY-3-8912A + vs4 + Virtua Striker 4 (Export, Rev A) (GDT-0015A) - i8086 - I8086 + vs42006 + Virtua Striker 4 Ver.2006 (Japan, Rev D) (GDT-0020D) - r6545_1 - R6545-1 CRTC + vs42006b + Virtua Striker 4 Ver.2006 (Japan, Rev B) (GDT-0020B) - sn76489 - SN76489 + vs42k6ex + Virtua Striker 4 Ver.2006 (Export) (GDT-0021) - ticket_dispenser - Ticket Dispenser + vs4e + Virtua Striker 4 (Asia, Rev B) (GDT-0014B) - gamtor_vga - GAMTOR_VGA + vs4eo + Virtua Striker 4 (Asia) (GDT-0014) - ttl74123 - TTL 74123 + vs4j + Virtua Striker 4 (Japan, Rev E) (GDT-0013E) - okim9810 - OKI9810 + vs4jc + Virtua Striker 4 (Japan, Rev C) (GDT-0013C) - macronix_29l001mc - Macronix 29L001MC Flash + vs4o + Virtua Striker 4 (Export) (GDT-0015) - aw_rom_board - AW-ROM-BOARD + vsav + Vampire Savior: The Lord of Vampire (Euro 970519) - dcctrl - DC_CONTROLLER + vsav2 + Vampire Savior 2: The Lord of Vampire (Japan 970913) - netlist_cpu - Netlist cpu device + vsav2d + Vampire Savior 2: The Lord of Vampire (Japan 970913 Phoenix Edition) (bootleg) - fixfreq - FIXFREQ + vsava + Vampire Savior: The Lord of Vampire (Asia 970519) - e132xn - E1-32XN + vsavb + Vampire Savior: The Lord of Vampire (Brazil 970519) - v20 - V20 + vsavd + Vampire Savior: The Lord of Vampire (Euro 970519 Phoenix Edition) (bootleg) - m65sc02 - M65SC02 + vsavh + Vampire Savior: The Lord of Vampire (Hispanic 970519) - tc0100scn - Taito TC0100SCN + vsavj + Vampire Savior: The Lord of Vampire (Japan 970519) - tc0150rod - Taito TC0150ROD + vsavu + Vampire Savior: The Lord of Vampire (USA 970519) - tc0110pcr - Taito TC0110PCR + vsbattlecity + VS. Battle City - filter_volume - Volume Filter + vsbbalja + Vs. BaseBall (Japan set 2) - cxd8661r - CXD8661R + vsbbaljb + Vs. BaseBall (Japan set 3) - cxd8654q - CXD8654Q + vsbball + Vs. BaseBall (US, set BA E-1) - mb8841 - MB8841 + vsbballj + Vs. BaseBall (Japan, set BA A-3) - tms9118 - TMS9118 VDP + vsbballja + Vs. BaseBall (Japan, set BA A-2) - speaker_sound - Filtered 1-bit DAC + vsbballjb + Vs. BaseBall (Japan, set BA A-1) - seta001 - seta001_device + vscastlevania + VS. Castlevania - x1_010 - X1-010 + vsclucluland + VS. Clu Clu Land - atari2804 - Atari EEPROM Interface (2804) + vscompmj + VS Computer Mahjong - tmp90841 - TMP90841 + vsdrmario + VS. Dr. Mario - nmk112 - NMK 112 + vsduckhunt + VS. Duck Hunt - wmscvsd - Williams CVSD Sound Board + vsexcitebike + VS. Excitebike - gotsndr1 - Gottlieb Sound rev. 1 + vsfdf + Vs. Freedom Force - riot6532 - 6532 RIOT + vsfreedomforce + VS. Freedom Force - ym2149 - YM2149 + vsfrombelow + VS. From Below (HB, v0.10) - tms34061 - TMS34061 VSC + vsgongf + VS Gong Fight - ccpu - Cinematronics CPU + vsgoonies + VS. Goonies, The - n2a03 - N2A03 + vsgradius + VS. Gradius - nesapu - N2A03 APU + vsgradus + Vs. Gradius (US, set GR E) - vlm5030 - VLM5030 + vsgshoe + Vs. Gumshoe (set GM5) - tc0180vcu - Taito TC0180VCU + vsgumshoe + VS. Gumshoe - naomi_m4_board - NAOMI-M4-BOARD + vshogansalley + VS. Hogan's Alley - pps4 - PPS4 + vshoot + J-League Soccer V-Shoot (Japan) - atari_vg_earom - ATARI VG EAROM + vsiceclimber + VS. Ice Climber - er5911_8 - Serial EEPROM ER5911 (128x8) + vsmachrider + VS. Mach Rider - k056832 - Konami 056832 + vsmahjng + Vs. Mahjong (Japan) - k05324x - Konami 053244 & 053245 + vsmightybomjack + VS. Mighty Bomb Jack - k053251 - Konami 053251 + vsmjtria + VS Mahjong Triangle - k053260 - K053260 + vsnetscr + Versus Net Soccer (ver EAD) - sh2_drc - SH-2 DRC + vsnetscra + Versus Net Soccer (ver AAA) - scudsp - SCUDSP + vsnetscreb + Versus Net Soccer (ver EAB) - scsp - SCSP + vsnetscrj + Versus Net Soccer (ver JAB) - cdda - CD/DA + vsnetscru + Versus Net Soccer (ver UAB) - i8035 - I8035 + vsninjajkun + VS. Ninja Jajamaru-kun - sega_speech_sound - Sega Speech Sound Board + vspinbal + Vs. Pinball (US, set PN4 E-1) - sega315_5124 - Sega 315-5124 + vspinbalj + Vs. Pinball (Japan, set PN3 B) - ldv1000 - Pioneer LD-V1000 + vspinball + VS. Pinball - pc090oj - Taito PC090OJ + vspinblj + Vs. Pinball (Japan) - ymf262 - YMF262 + vsplatoon + VS. Platoon - 93c56_16 - Serial EEPROM 93C56 (128x16) + vsraidbbay + VS. Raid on Bungling Bay - wsf_80186_sound - WSF 80186 DAC + vsrbibbal + VS. Atari RBI Baseball - m68010 - M68010 + vsskykid + Vs. Super SkyKid - ataxx_80186_sound - Ataxx 80186 DAC + vsslalom + Vs. Slalom - trackfld_audio - Track And Field Audio + vssmb + VS. Super Mario Bros - hyprolyb_adpcm - Hyper Olympics Audio + vssmgolf + VS. Stroke & Match Golf - i8039 - I8039 + vssmgolfla + VS. Stroke & Match Golf Ladies - mos656x_attack_ufo - MOS656X + vssoccer + Vs. Soccer (set SC4-2 A) - ppc603 - PowerPC 603 + vssoccera + Vs. Soccer (set SC4-3 ?) - naomi_gdrom_board - NAOMI-GDROM-BOARD + vsstarluster + VS. Star Luster - i8085a - 8085A + vssuperskykid + VS. Super Sky Kid - tms36xx - TMS36XX + vssuperxevious + VS. Super Xevious - Gump no Nazo - phoenix_sound - Phoenix Custom + vstennis + Vs. Tennis (Japan/USA, set TE A-3) - roc10937 - Rockwell 10937 VFD controller and compatible + vstennisa + Vs. Tennis (Japan/USA, set 2) - acia6850 - 6850 ACIA + vstennisb + Vs. Tennis (Japan/USA, set 3) - clock - Clock + vstetris + Vs. Tetris - i8031 - I8031 + vstkoboxing + VS. TKO Boxing - tms9928a - TMS9928A VDP + vstopgun + VS. Top Gun - deco16ic - Data East IC 55 / 56 / 74 / 141 + vstrik3 + Virtua Striker 3 (GDS-0006) - microtouch_serial - Microtouch Serial Touchscreen + vstrik3c + Virtua Striker 3 (World, Rev B) - h63484 - H63484 + vstrik3co + Virtua Striker 3 (World) - atari2816 - Atari EEPROM Interface (2816) + vstriker + Virtua Striker (Revision A) - 2816 - Parallel EEPROM 2816 (2048x8) + vstrikero + Virtua Striker - cclimber_audio - cclimber Sound Board + vsyard + 10 Yard Fight (Vs. version World, 11-05-84) - kaneko_view2_tilemap - kaneko_view2_tilemap_device + vsyard2 + 10 Yard Fight (Vs. version Japan, set 2) - kaneko16_sprite - kaneko16_sprite_device + vtenis2c + Virtua Tennis 2 / Power Smash 2 (Rev A) - ppu2c04 - 2C04 PPU + vtennis + Virtua Tennis / Power Smash - gaelco_cg1v - Gaelco CG1V + vtennis2 + Virtua Tennis 2 / Power Smash 2 (Rev A) (GDS-0015A) - ppc603e - PowerPC 603e + vtennis3 + Virtua Tennis 3 (Japan) - scsibus - SCSI bus + vtennisg + Virtua Tennis / Power Smash (GDS-0011) - lsi53c810 - 53C810 SCSI + vulcan + Vulcan Venture (New) - k573cassslotserial - KONAMI 573 CASSETTE SLOT (SERIAL) + vulcana + Vulcan Venture (Old) - mb89371 - MB89371 + vulcanb + Vulcan Venture (Oldest) - ata_interface - ATA Interface + vulgus + Vulgus (set 1) - cr589 - Matsushita CR589 + vulgus2 + Vulgus (set 2) - k573cassslot - KONAMI 573 CASSETTE SLOT + vulgusa + Vulgus (set 2) - k573cassx - KONAMI 573 CASSETTE X + vulgusj + Vulgus (Japan?) - x76f041 - X76F041 Flash + wackadoo + Wack-A-Doodle-Doo (Redemption) - fujitsu_29f016a - Fujitsu 29F016A Flash + wacko + Wacko - pccard - PCCARD SLOT + wackygtr + Wacky Gator (US) - m48t58 - M48T58 + wafricau + Wild Africa (AHG1535, US) - adc0834 - ADC0834 + waidrive + WaiWai Drive - upd4701 - NEC uPD4701 Encoder + waijockey + Wai Wai Jockey - i386 - I386 + wakuwak7 + Waku Waku 7 - ds2404 - DS2404 + wakuwak7bh + Waku Waku 7 (Boss Hack) - intel_e28f008sa - Intel E28F008SA Flash + walkyria + Walkyria - fifo7200 - IDT7200 FIFO + wallc + Wall Crash (set 1) - tmp95c063 - TMP95C063 + wallca + Wall Crash (set 2) - atarivad - Atari VAD + wallst + Wall Street - atjsa3 - Atari JSA III Sound Board + wamazon + Wild Amazon (0200507V, NSW/ACT) - decocpu3b - Data East Pinball CPU Board Type 3B + wamazona + Wild Amazon (0200285V, NSW/ACT) - decodmd3 - Data East Pinball Dot Matrix Display Type 3 + wamazonv + Wild Amazon (01J01996, Venezuela) - adsp2181 - ADSP-2181 + wanganmd + Wangan Midnight (WMN1 Ver. A) - gp9001vdp - GP9001_VDP + wanganmr + Wangan Midnight R (WMR1 Ver. A) - v25 - V25 + wangmid + Wangan Midnight Maximum Tune (Export, Rev B) (GDX-0009B) - upd7807 - uPD7807 + wangmid2 + Wangan Midnight Maximum Tune 2 (Export, Rev A) (GDX-0016A) - namco51 - Namco 51xx + wangmid2j + Wangan Midnight Maximum Tune 2 (Japan) (GDX-0015) - mb8843 - MB8843 + wangmid2ja + Wangan Midnight Maximum Tune 2 (Japan, Rev A) (GDX-0015A) - namco06xx - Namco 06xx + wangmid2o + Wangan Midnight Maximum Tune 2 (Export) (GDX-0016) - hd6309 - HD6309 + wangmidj + Wangan Midnight Maximum Tune (Japan, Rev B) (GDX-0008B) - k007342 - Konami 007342 + wanted + Wanted - k007420 - Konami 007420 + wantsega + Wanted (Sega) - 93c66_8 - Serial EEPROM 93C66 (512x8) + war3cb + War III Cherry Best - arm9 - ARM9 + warahana + Warai no Hana Tenshi (Japan) - s3c2410 - Samsung S3C2410 + warcadia + Waga Seishun no Arcadia - qs1000 - QS1000 + wardner + Wardner (World) - i8052 - I8052 + wardnerb + Wardner (World, bootleg) - i2cmem - I2CMEM + wardnerj + Wardner no Mori (Japan) - s11c_bg - Williams System 11C background music + wardnerjb + Wardner no Mori (Japan, bootleg) - asap - ASAP + warfa + War: The Final Assault (EPROM 1.9 Mar 25 1999, GUTS 1.3 Apr 20 1999, GAME Apr 20 1999) - beezer_sound - beezer SFX + warfaa + War: The Final Assault (EPROM 1.6 Jan 14 1999, GUTS 1.1 Mar 16 1999, GAME Mar 16 1999) - i960kb - i960kb + warfab + War: The Final Assault (EPROM 1.3 Apr 7 1999, GUTS 1.3 Apr 7 1999, GAME Apr 7 1999) - segas24_tile - S24TILE + warfac + War: The Final Assault (EPROM 1.91 Apr 13 1999, GUTS 1.3 Apr 7 1999, GAME Apr 7 1999) - y8950 - Y8950 + wargods + War Gods (HD 10/09/1996 - Dual Resolution) - ttl74181 - TTL 74181 + wargodsa + War Gods (HD 08/15/1996) - s14001a - S14001A + wargodsb + War Gods (HD 12/11/1995) - exidy_sfx - Exidy SFX + warlords + Warlords - v9938 - V9938 + warofbug + War of the Bugs or Monsterous Manouvers in a Mushroom Maze - r65c02 - R65C02 + warofbugg + War of the Bugs or Monsterous Manouvers in a Mushroom Maze (German) - hd61830 - HD61830 LCDC + warofbugu + War of the Bugs or Monsterous Manouvers in a Mushroom Maze (US) - timeplt_audio - Time Pilot Audio + warp1 + Warp-1 (Japan) - filter_rc - RC Filter + warp1bl + Warp-1 (Japan, bootleg) - tiamc1_sound - TIA-MC1 Custom + warp1t + Warp-1 (Japan, Taito license) - saa1099 - SAA1099 + warpsped + Warp Speed (prototype) - r5000le_drc - R5000 (little) DRC + warpwar2 + Warp Warp (Rock-ola set 2) - bus_master_ide_controller - Bus Master IDE Controller + warpwarp + Warp & Warp - voodoo_1 - 3dfx Voodoo Graphics + warpwarpr + Warp Warp (Rock-Ola set 1) - adsp2115 - ADSP-2115 + warpwarpr2 + Warp Warp (Rock-Ola set 2) - k054338 - Konami 054338 + warpwarr + Warp Warp (Rock-ola set 1) - k055555 - Konami 055555 + warrior + Warrior - h83044 - H8/3044 + warriorb + Warrior Blade - Rastan Saga Episode III (Japan) - i486 - I486 + warzard + Warzard (Japan 961121) - k051733 - Konami 051733 + warzardr1 + Warzard (Japan 961023) - midsg - Midway Sounds Good Sound Board + waterski + Water Ski - seibu_crtc - Seibu CRT Controller + waterwld + Waterworld (rev.3) - es5506 - ES5506 + waterwld2 + Waterworld (rev.2) - kaneko_toybox - kaneko_toybox_device + watrball + Water Balls - kaneko_hit - kaneko_hit_device + waverunr + Wave Runner (Japan, Revision A) - atjsa1 - Atari JSA I Sound Board + waveshrk + Wave Shark (UAB, USA v1.04) - k054000 - Konami 054000 + wavybug + Wavy Bug - k053936 - Konami 053936 + wb3 + Wonder Boy III - Monster Lair (set 6, World, System 16B) (8751 317-0098) - k054539 - K054539 + wb31 + Wonder Boy III - Monster Lair (set 1, Japan, System 16A) (FD1094 317-0084) - rtc65271 - RTC65271 + wb31d + Wonder Boy III - Monster Lair (set 1, Japan, System 16A) (bootleg of FD1094 317-0084 set) - pc16552d - National Semiconductor PC16552D + wb32 + Wonder Boy III - Monster Lair (set 2, Japan, System 16B) (FD1094 317-0085) - ns16550 - National Semiconductor NS16550 + wb32d + Wonder Boy III - Monster Lair (set 2, Japan, System 16B) (bootleg of FD1094 317-0085 set) - scsicd - SCSICD + wb33 + Wonder Boy III - Monster Lair (set 3, World, System 16B) (FD1094 317-0089) - am53cf96 - 53CF96 SCSI + wb33d + Wonder Boy III - Monster Lair (set 3, World, System 16B) (bootleg of FD1094 317-0089 set) - rf5c400 - RF5C400 + wb34 + Wonder Boy III - Monster Lair (set 4, Japan, System 16B) (FD1094 317-0087) - decoc10707 - DECO C10707 + wb34d + Wonder Boy III - Monster Lair (set 4, Japan, System 16B) (bootleg of FD1094 317-0087 set) - segas24_sprite - S24SPRITE + wb35 + Wonder Boy III - Monster Lair (set 5, Japan, System 16A) (FD1089A 317-0086) - segas24_mixer - S24MIXER + wb35d + Wonder Boy III - Monster Lair (set 5, Japan, System 16A) (bootleg of FD1089A 317-0086 set) - warpwarp_sound - Warp Warp Custom + wb3a + Wonder Boy III - Monster Lair (set 2) - cirrus_vga - Cirrus Logic VGA + wb3bbl + Wonder Boy III - Monster Lair (bootleg) - ns16450 - National Semiconductor NS16450 + wb3bble + Wonder Boy III - Monster Lair (encrypted bootleg) - decocomn - Data East Common Video Functions + wb3bl + Wonder Boy III - Monster Lair (bootleg) - deco104 - DECO104PROT + wbbc97 + Beach Festival World Championship 1997 - deco16 - DECO16 + wbdeluxe + Wonder Boy Deluxe - deco222 - DECO 222 + wbeachvl + World Beach Volley (set 1, PIC16C57 audio CPU) - e116t - E1-16T + wbeachvl2 + World Beach Volley (set 2) - wpcsnd - Williams WPC Sound + wbeachvl3 + World Beach Volley (set 3) - namco50 - Namco 50xx + wbeachvla + World Beach Volley (set 1, S87C751 audio CPU) - mb8842 - MB8842 + wbingo06 + Win Bingo 2006 - namco52 - Namco 52xx + wbml + Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043) - namco54 - Namco 54xx + wbmlb + Wonder Boy in Monster Land (English bootleg set 1) - mb8844 - MB8844 + wbmlbg + Wonder Boy in Monster Land (English bootleg set 2) - am29000 - AMD Am29000 + wbmlbge + Wonder Boy in Monster Land (English bootleg set 3) - i8051 - I8051 + wbmld + Wonder Boy in Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043) - mc68901 - Motorola MC68901 + wbmljb + Wonder Boy in Monster Land (Japan bootleg) - micro3d_sound - Microprose Custom + wbmljo + Wonder Boy in Monster Land (Japan Old Ver., MC-8123, 317-0043) - h83008 - H8/3008 + wbmljod + Wonder Boy in Monster Land (decrypted bootleg of Japan Old Ver., MC-8123, 317-0043) - h8_adc_3006 - H8 ADC 3006 + wbmlvc + Wonder Boy in Monster Land (English, Virtual Console) - mpc8240 - PowerPC MPC8240 + wbmlvcd + Wonder Boy in Monster Land (decrypted bootleg of English, Virtual Console release) - voodoo_3 - 3dfx Voodoo 3 + wboy + Wonder Boy (set 1, 315-5177) - avg_bzone - AVG_BZONE + wboy2 + Wonder Boy (set 2, 315-5178) - mathbox - MATHBOX + wboy2u + Wonder Boy (set 2, not encrypted) - kaneko_calc3 - kaneko_calc3_device + wboy3 + Wonder Boy (set 3, 315-5135) - okim6376 - OKI6376 + wboy4 + Wonder Boy (315-5162, 4-D Warriors Conversion) - deco_karnovsprites - karnovsprites_device + wboy5 + Wonder Boy (set 5, bootleg) - tms9128 - TMS9128 VDP + wboy6 + Wonder Boy (set 6, 315-5179) - cxd8530bq - CXD8530BQ + wboyo + Wonder Boy (set 2, 315-5135) - cxd8514q - CXD8514Q + wboysys2 + Wonder Boy (system 2, set 1, 315-5177) - sharp_lh28f400 - Sharp LH28F400 Flash + wboysys2a + Wonder Boy (system 2, set 2, 315-5176) - decocpu7 - DECO CPU-7 + wboyu + Wonder Boy (prototype?) - ppc602 - PowerPC 602 + wboyub + Wonder Boy (US bootleg) - decodmd1 - Data East Pinball Dot Matrix Display Type 1 + wc90 + Tecmo World Cup '90 (set 1) - tms34020 - TMS34020 + wc90a + Tecmo World Cup '90 (set 2) - m6801 - M6801 + wc90b + Euro League - k005289 - K005289 + wc90t + Tecmo World Cup '90 (trackball) - i8279 - 8279 KDC + wcat3 + Wild Cat 3 - k053252 - Konami 053252 + wcat3a + Wild Cat 3 (CMV4 hardware) - k053247 - Konami 053246 & 053247 + wcatcher + Mahjong Wakuwaku Catcher (Japan) - buggyboy_sound - Buggy Boy Custom + wcbowl + World Class Bowling (v1.66) - ppc403ga - PowerPC 403GA + wcbowl10 + World Class Bowling (v1.0) - ppc604 - PowerPC 604 + wcbowl11 + World Class Bowling (v1.1) - k001604 - Konami 001604 + wcbowl12 + World Class Bowling (v1.2) - cobra_jvs_host - COBRA_JVS_HOST + wcbowl13 + World Class Bowling (v1.3) - cobra_jvs - COBRA_JVS + wcbowl130 + World Class Bowling Tournament (v1.30) - alpha8301 - ALPHA-8301 + wcbowl13j + World Class Bowling (v1.3J, Japan) - avg - AVG + wcbowl14 + World Class Bowling (v1.4) - seibu_adpcm - Seibu ADPCM + wcbowl140 + World Class Bowling Tournament (v1.40) - i8041 - I8041 + wcbowl15 + World Class Bowling (v1.5) - decocass_tape - DECO Cassette Tape + wcbowl16 + World Class Bowling (v1.6) - trident_vga - Trident VGA + wcbowl161 + World Class Bowling (v1.61) - smc91c94 - SMC91C94 + wcbowl165 + World Class Bowling (v1.65) - tc0280grd - Taito TC0280GRD & TC0430GRW + wcbowldx + World Class Bowling Deluxe (v2.00) - tc0360pri - Taito TC0360PRI + wcbwl12 + World Class Bowling (v1.2) - e132n - E1-32N + wcbwl161 + World Class Bowling (v1.61) - i8032 - I8032 + wcbwl165 + World Class Bowling (v1.65) - deco146 - DECO146PROT + wccf116 + World Club Champion Football Serie A 2001-2002 Ver.2 (Japan) (CDP-10001C) - i80c32 - I80C32 + wccf1dup + World Club Champion Football Serie A 2001-2002 DIMM FIRM Ver.3.03 (CDP-10003) - vr4310le_drc - VR4310 (little) DRC + wccf212e + World Club Champion Football Serie A 2002-2003 Ver.2.12 (Italy) (CDV-10002) - voodoo_banshee - 3dfx Voodoo Banshee + wccf234j + World Club Champion Football Serie A 2002-2003 Ver.2.34 (Japan) (CDV-10008) - 74148 - TTL 74148 + wccf2chk + World Club Champion Football Serie A 2002-2003 Drive Checker (CDV-10007) - 74153 - TTL 74153 + wccf310j + World Club Champion Football European Clubs 2004-2005 (Asia) (CDV-10013) - rm7000le_drc - RM7000 (little) DRC + wccf322e + World Club Champion Football European Clubs 2004-2005 Ver.3.22 (Export) (CDV-10015P) - m48t37 - M48T37 + wccf331e + World Club Champion Football European Clubs 2004-2005 Ver.1.1 (Export) (CDV-10015) - hd6303y - HD6303Y + wccf420e + World Club Champion Football European Clubs 2005-2006 (Export) (CDV-10027) - exidy440_sound - Exidy 440 CVSD + wcherry + Win Cherry (ver 0.16 - 19990219) - tc0480scp - Taito TC0480SCP + wcombat + World Combat (ver AAD:B) - x2212 - X2212 NVRAM + wcombatb + World Combat (ver AAD:B, alt) - akiko - CBM AKIKO + wcombatj + World Combat (ver JAA) - microtouch - Microtouch Touchscreen + wcombatk + World Combat (ver KBC:B) - scc68070 - SCC68070 + wcombatu + World Combat / Warzaid (ver UCD:B) - mcd212 - MCD212 + wcougar + Wild Cougar (0100167V, NSW/ACT) - cdi68070 - CDI68070 + wcougaru + Wild Cougar (NHG0296-04, US) - cdicdic - CDICDIC + wcougarua + Wild Cougar (NHG0296-07, US) - cdislave - CDISLAVE + wcougarub + Wild Cougar (NHG0296-99, US) - m48t08 - MK48T08 + wcougaruc + Wild Cougar (AHG1531, US) - alpha8201 - ALPHA-8201 + wcoyote + Wild Coyote (AHG1515, US) - pentium3 - Pentium III + wcs_l2 + World Cup Soccer (Lx-2) - ataflash - ATA Flash PCCARD + wcs_la2 + World Cup Soccer (La-2) - mb3773 - MB3773 + wcs_p2 + World Cup Soccer (Pa-2) - intel_te28f160 - Intel TE28F160 Flash + wcs_p3 + World Cup Soccer (Px-3) - intel_e28f400b - Intel E28F400B Flash + wcsoccer + World Challenge Soccer (rev.1) - taito_zoom - Taito Zoom Sound System + wcsoccerd2 + World Challenge Soccer (disp.rev.2) - mn1020012a - MN1020012A + wcup + World Cup (Ver 1.5) - zsg2 - ZSG-2 + wcup14 + World Cup (Ver 1.4) - ide_baseboard - IDE Baseboard + wcup90 + World Cup 90 - tc8830f - TC8830F + wcvol95 + World Cup Volley '95 (Asia v1.0) - cxd8606bq - CXD8606BQ + wcvol95j + World Cup Volley '95 (Japan v1.0) - cxd8561cq - CXD8561CQ + wcvol95x + World Cup Volley '95 Extra Version (Asia v2.0B) - i8742 - I8742 + wd_03r + Who Dunnit (0.3 R) - pr8210 - Pioneer PR-8210 + wd_048r + Who Dunnit (0.48 R) - i8049 - I8049 + wd_10f + Who Dunnit (1.0 French) - wiping_sound - Wiping Custom + wd_10g + Who Dunnit (1.0 Germany) - naomi_m1_board - NAOMI-M1-BOARD + wd_10r + Who Dunnit (1.0 R) - h83337 - H8/3337 + wd_11 + Who Dunnit (1.1) - h8_intc - H8 INTC + wd_12 + Who Dunnit (1.2) - h8_8bits_timer_channel - H8 8-bits timer channel + wd_12g + Who Dunnit (1.2 Germany) - h8_16bits_timer_channel - H8 16-bits timer channel + wdun + Who Dunnit (Russian) - h83007 - H8/3007 + wecleman + WEC Le Mans 24 (v2.01) - sh1_drc - SH-1 DRC + weclemana + WEC Le Mans 24 (v2.00) - tms9980a - TMS9980A + weclemanb + WEC Le Mans 24 (v2.00, hack) - wd33c93 - 33C93 SCSI + weclemanc + WEC Le Mans 24 (v1.26) - cps3_custom - CPS3 Custom + weddingr + Wedding Rhapsody (GX624 JAA) - midssio - Midway SSIO Sound Board + welltris + Welltris (World?, 2 players) - gms30c2132 - GMS30C2132 + welltrisj + Welltris (Japan, 2 players) - h83334 - H8/3334 + werewild + Werewolf Wild (10288711, NSW/ACT) - tms32032 - TMS32032 + werewildq + Werewolf Wild (20290711, Queensland) - adsp2104 - ADSP-2104 + westdrm + Western Dream - m48t35 - M48T35 + westgun2 + Western Gun Part II - tms32031 - TMS32031 + weststry + West Story (bootleg of Blood Bros., set 1) - tms57002 - TMS57002 + weststrya + West Story (bootleg of Blood Bros., set 2) - scsihd - SCSIHD + westvent + Western Venture (Ver. AA.02.D) - cxd8538q - CXD8538Q + wexpresb + Western Express (bootleg set 1) - k056800 - Konami 056800 MIRAC + wexpresc + Western Express (bootleg set 2) - se3208 - SE3208 + wexpress + Western Express (Japan, rev 4) - vr0video - VRender0 Video + wexpressb1 + Western Express (bootleg set 1) - ds1302 - DS1302 + wexpressb2 + Western Express (bootleg set 2) - vrender0 - VRender0 + wexpressb3 + Western Express (bootleg set 3) - cem3394 - CEM3394 + wfortuna + Wheel Of Fortune (alternate) - tms9927 - TMS9927 VTC + wfortune + Wheel Of Fortune (set 1) - cquestrot - Cube Quest Rotate CPU + wfortunea + Wheel Of Fortune (set 2) - cquestlin - Cube Quest Line CPU + wg3dh + Wayne Gretzky's 3D Hockey (ver 1.3) - cquestsnd - Cube Quest Sound CPU + wg3dhfe + Wayne Gretzky's 3D Hockey Fatality Edition (prototype) - simutrek - Simutrek Modified PR-8210 + wgorilla + Wild Gorilla - Power Pay (20279811, NSW/ACT) - i8748 - I8748 + wgp + World Grand Prix (World) - st0016 - ST0016 + wgp2 + World Grand Prix 2 (Japan) - seibu_cop_legacy - Seibu COP Legacy + wgpj + World Grand Prix (Japan) - atjsa2 - Atari JSA II Sound Board + wgpjoy + World Grand Prix (joystick version) (Japan, set 1) - sknsspr - sknsspr_device + wgpjoya + World Grand Prix (joystick version) (Japan, set 2) - k055673 - Konami 055673 + wgpu + World Grand Prix (US) - keycus_c431 - KEYCUS C431 + wh1 + World Heroes (ALM-005) - m68040 - M68040 + wh1h + World Heroes (ALH-005) - tms32051 - TMS32051 + wh1ha + World Heroes (set 3) - tc0640fio - Taito TC0640FIO + wh2 + World Heroes 2 (ALM-006 ~ ALH-006) - 93c56_8 - Serial EEPROM 93C56 (256x8) + wh2h + World Heroes 2 (ALH-006) - pc080sn - Taito PC080SN + wh2j + World Heroes 2 Jet (ADM-007 ~ ADH-007) - toshiba_t5182 - T5182 + wh2ja + World Heroes 2 Jet (ADM-007) - ppc603r - PowerPC 603R + whalecsh + Whales of Cash (20155711, Malaysia) - mb86233 - MB86233 + whalecshu + Whales of Cash (0451311, US) - segam1audio - Sega Model 1 Sound Board + whalecshua + Whales of Cash (0451346, US) - multipcm - Sega/Yamaha 315-5560 + wheelfir + Wheels & Fire - tc0510nio - Taito TC0510NIO + wheelrun + Wheels Runner - v3021 - v3021 + wheregld + Where's The Gold (10124811, NSW/ACT) - ics2115 - ICS2115 + wheregldm + Where's The Gold (20177111, Malaysia) - rtc9701 - rtc9701 + wheregldq + Where's The Gold (20184811, Queensland) - ymz770 - Yamaha YMZ770 + wheregldsp + Where's The Gold (10124811, NSW/ACT, Show Program) - epic12 - epic12_device + whirl_l2 + Whirlwind (L-2) - sh3be - SH-3 (big) + whirl_l3 + Whirlwind (L-3) - linearflash16mb - Linear Flash PCCARD (16MB) + whirl_lg3 + Whirlwind (LG-3) - k573mcr - Konami Memory Card Reader + whiterus + White Russia (Konami Endeavour, Russia) - k573cassyi - KONAMI 573 CASSETTE YI + whizquiz + Whiz Quiz - ds2401 - DS2401 + whizz + Whizz - linearflash32mb - Linear Flash PCCARD (32MB) + whodunit + Who Dunit (version 9.0) - k573dio - Konami 573 digital I/O board + whodunit8 + Who Dunit (version 8.0) - mas3507d - MAS3507D + whoopee + Pipi & Bibis / Whoopee!! (Teki Paki hardware) - k573casszi - KONAMI 573 CASSETTE ZI + whp + World Heroes Perfect - zs01 - ZS01 + whtforce + White Force - k573cassxi - KONAMI 573 CASSETTE XI + whtwater + White Water (0151075, US) - m68301 - M68301 + wiggie + Wiggie Waggie - midtcs - Midway Turbo Chip Squeak Sound Board + wikwin + Wicked Winnings (0100553V, NSW/ACT) - 5a22 - 5A22 + wikwin2 + Wicked Winnings II - Power Pay (10214011, NSW/ACT) - spc700 - SPC700 + wildbill + Wild Bill (0100297V, NSW/ACT) - snes_sound - SNES Custom DSP (SPC700) + wildfang + Wild Fang / Tecmo Knight - beep - Beep + wildfangs + Wild Fang - tc0091lvc - TC0091LVC + wildfyre + Wildfyre - namco53 - Namco 53xx + wildone + Wild One (4VXEC5357, New Zealand) - 58xx - Namco 58xx + wildpkr + Wild Poker (ver. D 1.01) - 56xx - Namco 56xx + wildplt + Wild Pilot - i80c51 - I80C51 + willow + Willow (World) - z80dma - Z8410 DMA + willowj + Willow (Japan) - pr7820 - Pioneer PR-7820 + willowje + Willow (Japan, English) - z80sio - Z80 SIO + willowu + Willow (USA) - 22vp932 - Phillips 22VP932 + willowuo + Willow (USA Old Ver.) - adsp21062 - ADSP21062 + wilytowr + Wily Tower - ds1204 - DS1204 + winbid + Winning Bid (English) - midsnt - Midway Squawk 'n' Talk Sound Board + winbidr + Winning Bid (Russian) - tms5200 - TMS5200 + winbingo + Win Win Bingo (set 1) - cop402 - COP402 + winbingoa + Win Win Bingo (set 2) - pic16c55 - PIC16C55 + windheat + Winding Heat (EAA, Euro v2.11) - igs_025_022 - IGS025 + windheata + Winding Heat (AAA, Asia v2.11) - igs022 - IGS022 + windheatj + Winding Heat (JAA, Japan v2.11) - upd96050 - uPD96050 + windheatu + Winding Heat (UBC, USA v2.22) - k573msu - Konami Multi Session Unit + windjamr + Windjammer (021216) - adc0838 - ADC0838 + wingforc + Wing Force (Japan, prototype) - keycus_c410 - KEYCUS C410 + wingoly + Wings Over Olympus (0252529, US) - astrocade - Astrocade + wingwar + Wing War (World) - i8251 - I8251 + wingwar360 + Wing War R360 (US) - sega_sharrier_sprite - Sega Space Harrier Sprites + wingwarj + Wing War (Japan) - avg_starwars - AVG_STARWARS + wingwaru + Wing War (US) - tms5220 - TMS5220 + wink + Wink (set 1) - i80188 - I80188 + winka + Wink (set 2) - snk6502_sound - snk6502 Custom + winner + Winner - venture_sound - Exidy SFX+PSG + winner81 + Winners Circle (81, 28*28 PCB) - nscsi_bus - NSCSI Bus + winner81b + Winners Circle (81, 18*22 PCB) - nscsi_connector - NSCSI device connector abstraction + winner82 + Winners Circle (82) - scsi_harddisk - SCSI HARDDISK + winrun + Winning Run (World) (89/06/06, Ver.09) - ncr537xx - 53C7xx SCSI + winrun91 + Winning Run '91 (Japan) (1991/03/05, Main Ver 1.0, Sub Ver 1.0) - pit8253 - 8253 PIT + winrungp + Winning Run Suzuka Grand Prix (Japan) (89/12/03, Ver.02) - filetto_cga - ISA8_CGA_FILETTO + winspike + Winning Spike (ver EAA) - tetriskr_cga - ISA8_CGA_TETRISKR + winspikea + Winning Spike (ver AAA) - namco_c45_road - Namco C45 Road + winspikej + Winning Spike (ver JAA) - e132t - E1-32T + wintbob + The Winter Bobble (bootleg of Snow Bros.) - tms9995 - TMS9995 + winterht + Winter Heat (JUET 971012 V1.000) - 22vp931 - Phillips 22VP931 + wipeormt + Wipeout (Ramtek) [TTL] - i4004 - Intel I4004 + wipeout + Wipeout (rev.2) - hd6845 - HD6845 CRTC + wiping + Wiping - flower_sound - Flower Custom Sound + wiseguy + Wise Guy - e132xt - E1-32XT + witch + Witch - toaplan_scu - toaplan_scu_device + witchb + Witch (with ranking) - nsc8105 - NSC8105 + witchcrd + Witch Card (Video Klein CPU box, set 1) - i8741 - I8741 + witchcrda + Witch Card (Spanish, witch game, set 1) - funcube_touchscrene - Funcube Touchscreen + witchcrdb + Witch Card (Spanish, witch game, set 2) - namco62 - Namco 62xx + witchcrdc + Witch Card (English, no witch game) - 93c76_8 - Serial EEPROM 93C76 (1024x8) + witchcrdd + Witch Card (German, WC3050, set 1 ) - kaneko_grap2 - kaneko_grap2_device + witchcrde + Witch Card (Video Klein CPU box, set 2) - upd7756 - uPD7756 + witchcrdf + Witch Card (English, witch game, lamps) - voodoo_2 - 3dfx Voodoo 2 + witchcrdg + Witch Card (Falcon, enhanced sound) - taito8741_4pack - Taito 8741 MCU 4 pack + witchcrdh + Witch Card (German, WC3050, set 2 ) - msm6585 - MSM6585 + witchcrdi + Witch Card (German, WC3050, 27-4-94) - st0020 - st0020_device + witchcrdj + Witch Card (ICP-1, encrypted) - geebee_sound - Gee Bee Custom + witchgme + Witch Game (Video Klein, set 1) - namco_63701x - Namco 63701X + witchgmea + Witch Game (Video Klein, set 2) - sega_yboard_sprite - Sega Y-Board Sprites + witchjol + Jolli Witch (Export, 6T/12T ver 1.57D) - huc6202 - HuC6202 VPC + witchryl + Witch Royal (Export version 2.1) - i8155 - 8155 RIOT + witchs + Witch (Sega license) - bfm_bd1 - BFM BD1 VFD controller + witchstar + Witch Star - bfm_adder2 - BFM ADDER2 + wits + Wit's (Japan) - gomoku_sound - Gomoku Custom + wivernwg + Wivern Wings - k033906 - Konami 033906 + wiz + Wiz - k037122 - Konami 0371222 + wizard + Wizard (Ver 1.0) - adc12138 - ADC12138 + wizdfire + Wizard Fire (Over Sea v2.1) - mb_vcu - Mazer Blazer custom VCU + wizdfireu + Wizard Fire (US v1.1) - gridlee_sound - Gridlee Custom + wizt + Wiz (Taito, set 1) - ym2608 - YM2608 + wizta + Wiz (Taito, set 2) - m48t02 - M48T02 + wizwarz + Wiz Warz (prototype) - k573npu - Konami Network PCB Unit + wizways + Wizard Ways (0200396V, NSW/ACT) - adc1038 - ADC1038 + wizzquiz + Wizz Quiz (Konami version) - k056230 - Konami 056230 + wizzquiza + Wizz Quiz (version 4) - atari_rle - Atari RLE Motion Objects + wjammers + Windjammers / Flying Power Disc - asic65 - ASIC65 + wlcc + Wanli Changcheng (China, V638C) - ins8050 - INS 8050 SC/MP + wldafr + Wild Africa - Millioniser (0351083, US) - sega_hangon_sprite - Sega Hang On Sprites + wldangel + Wild Angels (0100337V, NSW/ACT) - adsp2100 - ADSP-2100 + wldarrow + Wild Arrow (color, Standard V4.8) - adsp2101 - ADSP-2101 + wldcata6 + Wild Cats (10237511, NSW/ACT) - dsp32c - DSP32C + wldcourt + Pro Tennis World Court (Japan) - i8080a - 8080A + wldcp_l1 + World Cup (L-1) - k573cassy - KONAMI 573 CASSETTE Y + wldgoos + Wild Goose (20131911, NSW/ACT) - h8s2394 - H8S/2394 + wldgunsb + Wild Guns (SNES bootleg) - h8s_intc - H8S INTC + wldkicks + World Kicks (World, WK2 Ver.A) - h8_adc_2357 - H8 ADC 2357 + wldkicksj + World Kicks (Japan, WK1 Ver.A) - h8s_16bits_timer_channel - H8S 16-bits timer channel + wldkickspj + World Kicks PCB (Japan, WKC1 Ver.A) - segausbrom - Sega Universal Sound Board with ROM + wldkickspw + World Kicks PCB (World, WKC2 Ver.A) - tms9902 - TMS9902 ACC + wldkicksu + World Kicks (US, WK3 Ver.A) - ppu2c05_01 - 2C05_01 PPU + wldpanda + Wild Panda (20218411, NSW/ACT) - janshi_vdp - JANSHIVDP + wldpanth + Wild Panthers - Lil' Lucy (0651310, US) - wmsadpcm - Williams ADPCM Sound Board + wldrider + Wild Riders - josvolly8741_4pack - joshi Vollyball 8741 MCU 4 pack + wldstall + Wild Stallion (10230811, NSW/ACT) - v810 - V810 + wldstrek + Wild Streak (Russian) - midi_kbd - Generic MIDI Keyboard + wldtexas + Wild Texas - r4600le_drc - R4600 (little) DRC + wldwitch + Wild Witch (Export, 6T/12T ver 1.84A) - hd63484 - HD63484 CRTC + wldwitcha + Wild Witch (Export, 6T/12T ver 1.57-SP) - renegade_adpcm - Renegade Custom ADPCM + wldwitchb + Wild Witch (Export, 6T/12T ver 1.57-TE) - tms3615 - TMS3615 + wldwitchc + Wild Witch (Export, 6T/12T ver 1.62A) - er2055 - ER2055 + wldwitchd + Wild Witch (Export, 6T/12T ver 1.62B) - pentium4 - Pentium 4 + wldwitche + Wild Witch (Export, 6T/12T ver 1.62A-F) - indervd - Inder / Dinamic TMS Video + wldwitchf + Wild Witch (Export, 6T/12T ver 1.62A alt) - cop420 - COP420 + wldwitchg + Wild Witch (Export, 6T/12T ver 1.62B alt) - decocpu1 - Data East Pinball CPU Board Type 1 + wldwitchh + Wild Witch (Export, 6T/12T ver 1.65A) - snkwave - SNK Wave + wldwitchi + Wild Witch (Export, 6T/12T ver 1.65A-S) - r5000be_drc - R5000 (big) DRC + wldwitchj + Wild Witch (Export, 6T/12T ver 1.65A-S alt) - tmp91640 - TMP91640 + wldwitchk + Wild Witch (Export, 6T/12T ver 1.65A-N) - saa5050 - SAA5050 + wldwitchl + Wild Witch (Export, 6T/12T ver 1.70A beta) - m58715 - M58715 + wldwitchm + Wild Witch (Export, 6T/12T ver 1.70A) - indersb - Inder 4xDAC Sound Board + wldwitchn + Wild Witch (Export, 6T/12T ver 1.70A alt) - sega315_5246 - Sega 315-5246 + wldwitcho + Wild Witch (Export, 6T/12T ver 1.74A-SP-BELG) - cartslot_image - Cartslot + wldwitchp + Wild Witch (Export, 6T/12T ver 1.74A) - software_list - Software list + wldwitchq + Wild Witch (Export, 6T/12T ver 1.74A alt) - k053250 - K053250 + wldwitchr + Wild Witch (Export, 6B/12B ver 1.75A-E English) - ppu2c05_02 - 2C05_02 PPU + wldwitchs + Wild Witch (Export, 6T/12T ver 1.76A) - gms30c2116 - GMS30C2116 + wldwitcht + Wild Witch (Export, 6T/12T ver 1.77A) - mjkjidai_adpcm - Custom ADPCM + wldwitchu + Wild Witch (Export, 6T/12T ver 1.79A) - decocpu2 - Data East Pinball CPU Board Type 2 + wldwitchv + Wild Witch (Export, 6T/12T ver 1.83A) - atjsa3s - Atari JSA IIIs Sound Board + wlstar + Wonder League Star - Sok-Magicball Fighting (Korea) - es5503 - Ensoniq ES5503 + wmatch + Water Match (315-5064) - u8106 - U8106 + wmg + Williams Multigame - mc3417 - MC3417 + wms + WMS SetUp/Clear Chips (set 1) - keycus_c443 - KEYCUS C443 + wmsa + WMS SetUp/Clear Chips (set 2) - wmsnarc - Williams NARC Sound Board + wmsb + WMS SetUp/Clear Chips (set 3) - naughtyb_sound - Naughty Boy Custom + wmsboom + Boom (Russian) - ygv608 - YGV608 + wmstopb + Top Banana (Russian) - m50458 - m50458 + wndrmomo + Wonder Momo - s3520cf - s3520cf + wndrplnt + Wonder Planet (Japan) - rp5h01 - RP5H01 + wnpost + Winning Post (RHG0418-04, US) - m6m80011ap - M6M80011AP EEPROM + wof + Warriors of Fate (World 921031) - igs028 - IGS028 + wof3js + Sangokushi II: San Jian Sheng (Chinese bootleg set 1, 921005 Asia) - upd4992 - uPD4992 + wof3jsa + Sangokushi II: San Jian Sheng (Chinese bootleg set 2, 921005 Asia) - sega_outrun_sprite - Sega Out Run Sprites + wof3sj + Sangokushi II: San Sheng Jian (Chinese bootleg set 1, 921005 Asia) - er5911_16 - Serial EEPROM ER5911 (64x16) + wof3sja + Sangokushi II: San Sheng Jian (Chinese bootleg set 2, 921005 Asia) - y2404 - Y2404 + wof_100a + Wheel of Fortune v1.0 - 59xx - Namco 59xx + wof_200a + Wheel of Fortune v2.0 - e116xt - E1-16XT + wof_200f + Wheel of Fortune v2.0 (French) - bootleg_sys16a_sprite - Bootleg System 16A Sprites + wof_200g + Wheel of Fortune v2.0 (German) - es8712 - ES8712 + wof_200i + Wheel of Fortune v2.0 (Italian) - ppu2c03b - 2C03B PPU + wof_300a + Wheel of Fortune v3.0 - segausb - Sega Universal Sound Board + wof_300f + Wheel of Fortune v3.0 (French) - pleiads_sound - Pleiads Custom + wof_300g + Wheel of Fortune v3.0 (German) - dsp56156 - DSP56156 + wof_300i + Wheel of Fortune v3.0 (Italian) - linearflash64mb - Linear Flash PCCARD (64MB) + wof_300l + Wheel of Fortune v3.0 (Spanish) - keycus_c432 - KEYCUS C432 + wof_400a + Wheel of Fortune v4.0 - z8002 - Z8002 + wof_400f + Wheel of Fortune v4.0 (French) - polepos_sound - Pole Position Custom + wof_400g + Wheel of Fortune v4.0 (German) - netlist_analog_output - netlist analog output + wof_400i + Wheel of Fortune v4.0 (Italian) - popflame_sound - Pop Flamer Custom + wof_400l + Wheel of Fortune v4.0 (Spanish) - keycus_c411 - KEYCUS C411 + wof_500a + Wheel of Fortune v5.0 - decocpu6 - DECO CPU-6 + wof_500f + Wheel of Fortune v5.0 (French) - mb90082 - mb90082 + wof_500g + Wheel of Fortune v5.0 (German) - puzzlet_io - Puzzlet Coin/Start I/O + wof_500i + Wheel of Fortune v5.0 (Italian) - pentium2 - Pentium II + wof_500l + Wheel of Fortune v5.0 (Spanish) - avg_quantum - AVG_QUANTUM + wofa + Sangokushi II (Asia 921005) - i5000snd - I5000 + wofabl + Sangokushi II (bootleg) - m58819 - M58819 + wofah + Sangokushi II (hack set 1, 921005 Asia) - m58817 - M58817 + wofaha + Sangokushi II (hack set 2, 921005 Asia) - gaelco_serial - gaelco_serial + wofahb + Sangokushi II (hack set 3, 921005 Asia) - at89c4051 - AT89C4051 + wofch + Tenchi wo Kurau II - Sekiheki no Tatakai (CPS Changer, 921031 Japan) - redbaron_custom - Red Baron Custom + wofchdx + Sangokushi III Gaiden: Kakou-On's Revenge DX (hack) - redline_80186_sound - Redline Racer 80186 DAC + wofchp + Tenchi wo Kurau II - Sekiheki no Tatakai (PS/SS Version) - sp0256 - SP0256 + wofh + Sangokushi II: Sanguo Yingxiong Zhuan (Chinese bootleg set 1, 921005 Asia) - s3_vga - S3 Graphics VGA + wofha + Sangokushi II: Sanguo Yingxiong Zhuan (Chinese bootleg set 2, 921005 Asia) - ibm8514a - IBM8514A + wofhfh + Huo Feng Huang (Chinese bootleg of Sangokushi II) - bfm_dm01 - Bellfruit Dotmatrix 01 + wofj + Tenchi wo Kurau II: Sekiheki no Tatakai (Japan 921031) - digitalker - Digitalker + wofjdr + Tenchi wo Kurau II - Sekiheki no Tatakai (Master Edition, Hack) - dsbz80 - Sega Z80-based Digital Sound Board + wofjh + Tenchi wo Kurau II - Sekiheki no Tatakai (hack, 921031 Japan) - dm9368 - DM9368 + wofpic + Warriors of Fate (bootleg with PIC16C57) - m3745x - Mitsubishi M37450 + wofr1 + Warriors of Fate (World 921002) - i860xr - i860XR + wofr1bl + Warriors of Fate (bootleg) - i80c31 - I80C31 + wofsj + Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 1, 921005 Asia) - m68ec030 - M68EC030 + wofsja + Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 2, 921005 Asia) - keycus_c409 - KEYCUS C409 + wofsjb + Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 3, 921005 Asia) - r3051 - R3051 + wofsjc + Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 4, 921005 Asia) - gms30c2232 - GMS30C2232 + wofu + Warriors of Fate (USA 921031) - midcsd - Midway Chip Squeak Deluxe Sound Board + wolffang + Wolf Fang -Kuhga 2001- (Japan) - nile - NiLe + wolfman + Wolf Man - keycus_c442 - KEYCUS C442 + wolfpack + Wolf Pack (prototype) - cxd8530aq - CXD8530AQ + wonder3 + Wonder 3 (Japan 910520) - keycus_c406 - KEYCUS C406 + wondl96 + Wonder League '96 (Korea) - avg_tempest - AVG_TEMPEST + wondstck + Wonder Stick (set 1) - cop421 - COP421 + wondstcka + Wonder Stick (set 2, censored) - avg_tomcat - AVG_TOMCAT + wontame + Won! Tertainment Happy Channel (Ver E) - ppu2c05_04 - 2C05_04 PPU + wontmuch + Won!Tertainment Music Channel (v1.00) - tia_ntsc_video - TIA Video (NTSC) + woodpeca + Woodpecker (set 2) - tia_sound - TIA + woodpeck + Woodpecker (set 1) - esrip - ESRIP + worldadv + World Adventure - turrett_hdd - Turrett Tower HDD + worldc94 + World Cup '94 - ttsnd - Turret Tower Sound + worlddef + World Defender - tx1_sound - TX-1 Custom + worldwar + World Wars (World?) - scn2674_device - scn2674_device + wotw + War of the Worlds - ins8154 - INS8154 + wotwc + War of the Worlds (color) - victory_sound - Exidy SFX+PSG+Speech + wow + Wizard of Wor - ppu2c05_03 - 2C05_03 PPU + wowg + Wizard of Wor (with German Language ROM) - r4700le_drc - R4700 (little) DRC + wownfant + WOW New Fantasia - ds5002fp - DS5002FP + wpksoc + World PK Soccer - keycus_c430 - KEYCUS C430 + wpksocv2 + World PK Soccer V2 (ver 1.1) - - - 64streej - 64th. Street - A Detective Story (Japan) + wpt_103a + World Poker Tour v1.03 - 720b - 720 Degrees (set 2) + wpt_105a + World Poker Tour v1.05 - 99lstwra - '99 The Last War (alternate) + wpt_106a + World Poker Tour v1.06 - actfanc1 - Act-Fancer Cybernetick Hyper Weapon (World revision 1) + wpt_106f + World Poker Tour v1.06 (French) - actfancj - Act-Fancer Cybernetick Hyper Weapon (Japan revision 1) + wpt_106g + World Poker Tour v1.06 (German) - alexkida - Alex Kidd (set 2) + wpt_106i + World Poker Tour v1.06 (Italian) - aliensya - Alien Syndrome (set 2) + wpt_106l + World Poker Tour v1.06 (Spanish) - aliensyb - Alien Syndrome (set 3) + wpt_108a + World Poker Tour v1.08 - aliensyj - Alien Syndrome (Japan) + wpt_108f + World Poker Tour v1.08 (French) - altbeas2 - Altered Beast (Version 2) + wpt_108g + World Poker Tour v1.08 (German) - archriv2 - Arch Rivals (rev 2.0) + wpt_108i + World Poker Tour v1.08 (Italian) - ark2jp - Arkanoid - Revenge of DOH (Japan) + wpt_108l + World Poker Tour v1.08 (Spanish) - ark2us - Arkanoid - Revenge of DOH (US) + wpt_109a + World Poker Tour v1.09 - arkanoi2 - Arkanoid - Revenge of DOH (World) + wpt_109f + World Poker Tour v1.09 (French) - arkbl2 - Arkanoid (Japanese bootleg Set 2) + wpt_109f2 + World Poker Tour v1.09 (French)(alt) - arknoidj - Arkanoid (Japan) + wpt_109g + World Poker Tour v1.09 (German) - arknoidu - Arkanoid (US) + wpt_109i + World Poker Tour v1.09 (Italian) - armorca2 - Armored Car (set 2) + wpt_109l + World Poker Tour v1.09 (Spanish) - astdelu1 - Asteroids Deluxe (rev 1) + wpt_111a + World Poker Tour v1.11 - asteroi1 - Asteroids (rev 1) + wpt_111af + World Poker Tour v1.11 (English,French) - asteroib - Asteroids (bootleg on Lunar Lander hardware) + wpt_111ai + World Poker Tour v1.11 (English,Italian) - astorm2p - Alien Storm (2 Player) + wpt_111al + World Poker Tour v1.11 (English,Spanish) - atetckt2 - Tetris (Cocktail set 2) + wpt_111f + World Poker Tour v1.11 (French) - atetcktl - Tetris (Cocktail set 1) + wpt_111g + World Poker Tour v1.11 (German) - atlants2 - Battle of Atlantis (set 2) + wpt_111gf + World Poker Tour v1.11 (German,French) - auraila - Aurail (set 2) + wpt_111i + World Poker Tour v1.11 (Italian) - avenger2 - Avengers (set 2) + wpt_111l + World Poker Tour v1.11 (Spanish) - battlan2 - Battle Lane Vol. 5 (set 2) + wpt_112a + World Poker Tour v1.12 - battlan3 - Battle Lane Vol. 5 (set 3) + wpt_112af + World Poker Tour v1.12 (English,French) - battlntj - Battlantis (Japan) + wpt_112ai + World Poker Tour v1.12 (English,Italian) - batugnsp - Batsugun Special Ver. + wpt_112al + World Poker Tour v1.12 (English,Spanish) - bayrouta - Bay Route (set 2) + wpt_112f + World Poker Tour v1.12 (French) - bayrtbl1 - Bay Route (bootleg set 1) + wpt_112g + World Poker Tour v1.12 (German) - bayrtbl2 - Bay Route (bootleg set 2) + wpt_112gf + World Poker Tour v1.12 (German,French) - berlwalt - Berlin Wall, The (set 2) + wpt_112i + World Poker Tour v1.12 (Italian) - bermudaa - Bermuda Triangle (US early version) + wpt_112l + World Poker Tour v1.12 (Spanish) - bermudaj - Bermuda Triangle (Japan) + wpt_1400 + World Poker Tour v14.00 - bktigerb - Black Tiger (bootleg) + wpt_1400af + World Poker Tour v14.00 (English,French) - bladstle - Blades of Steel (version E) + wpt_1400ai + World Poker Tour v14.00 (English,Italian) - - blckgalb - Block Gal (bootleg) + + wpt_1400al + World Poker Tour v14.00 (English,Spanish) - blckout2 - Block Out (set 2) + wpt_1400f + World Poker Tour v14.00 (French) - blkdrgnb - Black Dragon (bootleg) + wpt_1400g + World Poker Tour v14.00 (German) - blsthead - Blasteroids (with heads) + wpt_1400gf + World Poker Tour v14.00 (German,French) - blstroi2 - Blasteroids (version 2) + wpt_1400i + World Poker Tour v14.00 (Italian) - blueprnj - Blue Print (Jaleco) + wpt_1400l + World Poker Tour v14.00 (Spanish) - bombjac2 - Bomb Jack (set 2) + wrally + World Rally (Version 1.0, Checksum 0E56) - bubbobr1 - Bubble Bobble (US) + wrally2 + World Rally 2: Twin Racing (mask ROM version) - bublbobr - Bubble Bobble (US with mode select) + wrally2a + World Rally 2: Twin Racing (EPROM version) - bullfgtj - Tougyuu, The (Japan) + wrallya + World Rally (Version 1.0, Checksum 3873) - burningh - Burning Fight (set 2) + wrallyat + World Rally (US, 930217) - bzone2 - Battle Zone (set 2) + wrallyb + World Rally (Version 1.0, Checksum 8AA2) - cabal2 - Cabal (US set 2) + wrallyc + World Rally (Version 1.0, Checksum E586) - cameltru - Camel Try (US) + wrecking + Vs. Wrecking Crew - canbprot - Canyon Bomber (prototype) + wrestwar + Wrestle War (set 3, World) (8751 317-0103) - captcomj - Captain Commando (Japan) + wrestwar1 + Wrestle War (set 1, Japan) (FD1094 317-0090) - captcomu - Captain Commando (US) + wrestwar1d + Wrestle War (set 1, Japan) (bootleg of FD1094 317-0090 set) - carnvckt - Carnival (cocktail) + wrestwar2 + Wrestle War (set 2, World) (FD1094 317-0102) - ccastle2 - Crystal Castles (set 2) + wrestwar2d + Wrestle War (set 2, World) (bootleg of FD1094 317-0102 set) - cclimbrj - Crazy Climber (Japan) + wrldtour + Al's Garage Band Goes On A World Tour - centipb2 - Centipede (bootleg set 2) + wrldtour2 + Al's Garage Band Goes On A World Tour (R02b) - centipd2 - Centipede (revision 2) + wrldtour3 + Al's Garage Band Goes On A World Tour (R06a) - champbbj - Champion Baseball (Japan) + wrlok_l3 + Warlok (L-3) - checkmaj - Checkman (Japan) + wrofaero + War of Aero - Project MEIOU - chplft - Choplifter + wrungp + Wave Runner GP - chplftb - Choplifter (alternate) + wrungpo + Wave Runner GP (USA, Rev A) - chplftbl - Choplifter (bootleg) + ws + Pro Yakyuu World Stadium (Japan) - ckonga - Crazy Kong (set 2) + ws89 + Pro Yakyuu World Stadium '89 (Japan) - ckongjeu - Crazy Kong (Jeutel bootleg) + ws90 + Pro Yakyuu World Stadium '90 (Japan) - cninja0 - Caveman Ninja (World revision 0) + wsbbgd + World Series Baseball / Super Major League (GDS-0010) - cobracmj - Cobra-Command (Japan) + wschamp + Wing Shooting Championship V2.00 - combasc - Combat School (joystick) + wschampa + Wing Shooting Championship V1.01 - combascb - Combat School (bootleg) + wschampb + Wing Shooting Championship V1.00 - combascj - Combat School (Japan trackball) + wseries + World Series: The Season (rev 1) - combasct - Combat School (trackball) + wseries0 + World Series: The Season (rev 0) - commandj - Senjo no Ookami + wsf + World Soccer Finals (rev 4) - commandu - Commando (US) + wsf3 + World Soccer Finals (rev 3) - contrajb - Contra (Japan bootleg) + wsjr + Who Shot Johnny Rock? (v1.6) - cosmognj - Cosmo Gang the Video (Japan) + wsjr_15 + Who Shot Johnny Rock? (v1.5) - crbalon2 - Crazy Balloon (set 2) + wsports + Winter Sports - crimfgt2 - Crime Fighters (World 2 Players) + wstrike + Witch Strike (Export, 6T/12T ver 1.01A) - crimfgtj - Crime Fighters (Japan 2 Players) + wstrikea + Witch Strike (Export, 6T/12T ver 1.01B) - cyberb2p - Cyberball 2072 (2 player) + wswe + World Soccer Winning Eleven Arcade Game Style - cyberba2 - Cyberball (Version 2) + wswe2k3 + World Soccer Winning Eleven Arcade Game 2003 - cyberbt - Tournament Cyberball 2072 + wtchjack + Witch Jack (Export, 6T/12T ver 0.87-89) - darksea1 - Dark Seal (World revision 1) + wtchjacka + Witch Jack (Export, 6T/12T ver 0.87-88) - darkseaj - Dark Seal (Japan) + wtchjackb + Witch Jack (Export, 6T/12T ver 0.87) - dbldyn - Double Dynamites, The + wtchjackc + Witch Jack (Export, 6T/12T ver 0.70S) - ddrago3b - Double Dragon 3 - The Rosetta Stone (bootleg) + wtchjackd + Witch Jack (Export, 6T/12T ver 0.70P) - deadconj - Dead Connection (Japan) + wtchjacke + Witch Jack (Export, 6T/12T ver 0.65) - defendg - Defender (Green label) + wtchjackf + Witch Jack (Export, 6T/12T ver 0.64) - defendw - Defender (White label) + wtchjackg + Witch Jack (Export, 6T/12T ver 0.62) - destderb - Demolition Derby + wtchjackh + Witch Jack (Export, 6T/12T ver 0.40T) - destderm - Demolition Derby (2-Player Mono Board Version) + wtchjacki + Witch Jack (Export, 6T/12T ver 0.40) - devstor2 - Devastators (version X) + wtchjackj + Witch Jackpot (Export, 6T/12T ver 0.25) - devstor3 - Devastators (version V) + wtennis + World Tennis - digdug2a - Dig Dug II (set 2) + wtepee + Wild Tepee - Power Pay (20230211, NSW/ACT) - digdugb - Dig Dug (set 2) + wthing + Wild Thing (0101158V, NSW/ACT) - dkjrbl - Donkey Kong Junior (bootleg?) + wthinga + Wild Thing (0201176V, NSW/ACT) - dkjrjp - Donkey Kong Junior (Japan) + wtiger + White Tiger Classic (0200954V, NSW/ACT) - dkngjrjp - Donkey Kong Jr. (Original Japanese) + wtigernz + White Tiger (3VXFC5342, New Zealand) - dkongjp - Donkey Kong (Japan set 1) + wtrnymph + Water-Nymph (Ver. 1.4) - dkongjpo - Donkey Kong (Japan set 2) + wulybuly + Wully Bully - docastl2 - Mr. Do's Castle (set 2) + wupndown + Witch Up & Down (Export, 6T/12T ver 1.02) - dorunru2 - Do! Run Run (set 2) + wupndowna + Witch Up & Down (Export, 6T/12T ver 0.99, set 1) - dorunruc - Do! Run Run (Do's Castle hardware) + wupndownb + Witch Up & Down (Export, 6T/12T ver 0.99, set 2) - dotriku2 - Dottori Kun (old version) + wupndownc + Witch Up & Down (Export, 6T/12T ver 0.99, set 3) - dspirito - Dragon Spirit (old version) + wupndownd + Witch Up & Down (Export, 6T/12T ver 0.99T) - dwj - Tenchi wo Kurau (Japan) + ww3 + WW III - earthinv - Super Earth Invasion + ww_l2 + White Water (L-2) - einnings - Extra Innings + ww_l3 + White Water (L-3) - elecyoy2 - Electric Yo-Yo, The (set 2) + ww_l4 + White Water (L-4) - elevatob - Elevator Action (bootleg) + ww_l5 + White Water (L-5) - espiale - Espial (Europe) + ww_lh5 + White Water (LH-5) - exctscca - Exciting Soccer (alternate music) + ww_lh6 + White Water (LH-6) - exctsccb - Exciting Soccer (bootleg) + ww_p1 + White Water (P-8 P-1 sound) - exerizrb - Exerizer (Japan) (bootleg) + ww_p8 + White Water (P-8 P-2 sound) - fantzono - Fantasy Zone (Old Ver.) + wwallyj + Wally wo Sagase! (rev B, Japan) (FD1094 317-0197B) - finalizb - Finalizer - Super Transformation (bootleg) + wwallyja + Wally wo Sagase! (rev A, Japan) (FD1094 317-0197A) - firetpbl - Fire Trap (Japan bootleg) + wwallyja3p + Wally wo Sagase! (rev A, Japan, 3 players, FD1094 317-0198A) - flicky2 - Flicky (set 2) + wwallyjad + Wally wo Sagase! (rev A, Japan) (bootleg of FD1094 317-0197A set) - froggrmc - Frogger (modified Moon Cresta hardware) + wwallyjd + Wally wo Sagase! (rev B, Japan) (bootleg of FD1094 317-0197B set) - frogseg1 - Frogger (Sega set 1) + wwaratah + Wild Waratah (10215911, NSW/ACT) - frogseg2 - Frogger (Sega set 2) + wwaratahsp + Wild Waratah (10215911, NSW/ACT, Show Program) - ftsoccer - Fighting Soccer + wways + Wild Ways (10106911, NSW/ACT) - galag88b - Galaga '88 (set 2) + wwaysm + Wild Ways (10130111, Malaysia) - galag88j - Galaga '88 (Japan) + wwester1 + Wild Western (set 2) - galaga84 - Galaga '84 + wwestern + Wild Western (set 1) - galagab2 - Galaga (bootleg) + wwestern1 + Wild Western (set 2) - galagads - Galaga (fast shoot) + wwfmanac + WWF: Wrestlemania (Acid Clown Edition 2020.12.02 SP2) - galaxb - Galaxian (bootleg) + wwfmania + WWF: Wrestlemania (rev 1.30 08/10/95) - galmidw - Galaxian (Midway) + wwfmaniab + WWF: Wrestlemania (rev 1.20 08/02/95) - gangwarb - Gang Wars (bootleg) + wwfmaniac + WWF: Wrestlemania (rev 1.1 07/11/95) - gatedom1 - Gate of Doom (US revision 1) + wwfmaniap + WWF: Wrestlemania (proto 2.01 06/07/95) - gaunt2p - Gauntlet (2 Players) + wwfr_103 + WWF Royal Rumble (USA 1.03, display A1.01) - gauntir1 - Gauntlet (Intermediate Release 1) + wwfr_103f + WWF Royal Rumble (French 1.03, display F1.01) - gauntir2 - Gauntlet (Intermediate Release 2) + wwfr_106 + WWF Royal Rumble (USA 1.06, display A1.02) - getstar - Guardian + wwfroyal + WWF Royal Rumble - getstarb - Get Star (bootleg) + wwfsstar + WWF Superstars (Europe) - ghoulsj - Dai Makai-Mura (Japan) + wwfsstarb + WWF Superstars (bootleg) - goldnabl - Golden Axe (bootleg) + wwfsstarj + WWF Superstars (Japan) - goldnaxa - Golden Axe (Version 2) + wwfsstaru4 + WWF Superstars (US revision 4) - goldnaxb - Golden Axe (Version 2 317-0110) + wwfsstaru6 + WWF Superstars (US revision 6) - goldnaxc - Golden Axe (Version 2 317-0122) + wwfsstaru7 + WWF Superstars (US revision 7) - goldnaxj - Golden Axe (Version 1, Japan) + wwfwfest + WWF WrestleFest (World) - gravitr2 - Gravitar (version 2) + wwfwfestj + WWF WrestleFest (Japan) - grdius2a - Gradius II - Gofer no Yabou (Japan set 2) + wwfwfestk + WWF WrestleFest (Korea) - grdius2b - Gradius II - Gofer no Yabou (Japan set 3) + wwfwfestu + WWF WrestleFest (US, rev 2) - grdius3a - Gradius III (Asia) + wwfwfestu1 + WWF WrestleFest (US) - gundeala - Gun Dealer (set 2) + wwfwfestub + WWF WrestleFest (US bootleg) - gunforcu - Gunforce - Battle Fire Engulfed Terror Island (US) + wwfwfsta + WWF WrestleFest (US Tecmo) - gunfronj - Gun Frontier (Japan) + wwfwfstj + WWF WrestleFest (Japan) - gunsmoka - Gun.Smoke (US set 2) + wwjgtin + Wai Wai Jockey Gate-In! - gunsmokj - Gun.Smoke (Japan) + wwmarine + Waku Waku Marine - gunsmrom - Gun.Smoke (US set 1) + wyvernf0 + Wyvern F-0 (Rev 1) - hardhedb - Hard Head (Bootleg) + wyvernf0a + Wyvern F-0 - hcastlea - Haunted Castle (set 2) + wyvernwg + Wyvern Wings (set 1) - hcastlej - Akuma-Jou Dracula (Japan) + wyvernwga + Wyvern Wings (set 2) - helifira - HeliFire (revision A) + wzwaysll + Wizard Ways - Lady Luck (20139121, NSW/ACT) - hitnmis2 - Hit 'n Miss (version 2.0) + x2222 + X2222 (final debug?) - hyprolyb - Hyper Olympic (bootleg) + x2222o + X2222 (5-level prototype) - indytem2 - Indiana Jones and the Temple of Doom (set 2) + x5jokers + X Five Jokers (Version 1.12) - indytem3 - Indiana Jones and the Temple of Doom (set 3) + xday2 + X-Day 2 (Japan) - indytem4 - Indiana Jones and the Temple of Doom (set 4) + xeno + Xeno Crisis (Neo Geo MVS) - intrepi2 - Intrepid (set 2) + xenocrisis + Xeno Crisis (NGM-BB01) (NGH-BB01) - invrvnga - Invader's Revenge (Dutchford) + xenon + Xenon - jackrab2 - Jack Rabbit (set 2) + xenonf + Xenon (French) - jackrabs - Jack Rabbit (special) + xenophob + Xenophobe - junglkj2 - Jungle King (Japan, earlier) + xevi3dg + Xevious 3D/G (World, XV32/VER.B) - junofstg - Juno First (Gottlieb) + xevi3dga + Xevious 3D/G (World, XV32/VER.A) - jyuohki - Jyuohki (Japan) + xevi3dgj + Xevious 3D/G (Japan, XV31/VER.A) - kangaroa - Kangaroo (Atari) + xevios + Xevios - kangarob - Kangaroo (bootleg) + xevious + Xevious (Namco) - karatblu - Karate Blazers (US) + xeviousa + Xevious (Atari, harder) - kicka - Kick (cocktail) + xeviousb + Xevious (Atari) - kingbalj - King & Balloon (Japan) + xeviousc + Xevious (Atari, Namco PCB) - kodure - Kodure Ookami (Japan) + xexex + Xexex (ver EAA) - kungfud - Kung Fu Master (Data East) + xexexa + Xexex (ver AAA) - kuniokub - Nekketsu Kouha Kunio-kun (Japan bootleg) + xexexj + Xexex (ver JAA) - kurikina - Kuri Kinton (prototype?) + xfiles + The X-Files - kyukaido - Kyuukai Douchuuki (Japan old version) + xfiles2 + X-Files (2.04) - lastmiss - Last Mission (US revision 6) + xfiles20 + X-Files (2.00) - lastmss2 - Last Mission (US revision 5) + xfilesk + The X-Files (Censored, Korea) - lifefrcj - Lifeforce (Japan) + xfilesp + X-Files (3.03) - losttmbh - Lost Tomb (hard) + xfilespf + X-Files (3.03 France) - lstduela - Last Duel (US set 2) + xforce + X Force - lstduelb - Last Duel (bootleg) + xiistag + XII Stag (V2.01J 2002/6/26 22:27) - lwingsjp - Ales no Tsubasa (Japan) + xmcota + X-Men: Children of the Atom (Euro 950331) - mainevt2 - Main Event, The (version F) + xmcotaa + X-Men: Children of the Atom (Asia 950105) - makaimuc - Makai-Mura (Revision C) + xmcotaar1 + X-Men: Children of the Atom (Asia 941219) - makaimug - Makai-Mura (Revision G) + xmcotaar2 + X-Men: Children of the Atom (Asia 941217) - mappyjp - Mappy (Japan) + xmcotab + X-Men: Children of the Atom (Brazil 950331) - marblea - Marble Madness (set 3) + xmcotah + X-Men: Children of the Atom (Hispanic 950331) - mariojp - Mario Bros. (Japan) + xmcotahr1 + X-Men: Children of the Atom (Hispanic 950105) - marvlanj - Marvel Land (Japan) + xmcotaj + X-Men: Children of the Atom (Japan 950105) - megaznik - Mega Zone (Kosuka) + xmcotaj1 + X-Men: Children of the Atom (Japan 941222) - minigol2 - Mini Golf (set 2) + xmcotaj2 + X-Men: Children of the Atom (Japan 941219) - mjnquesb - Mahjong Quest (No Nudity) + xmcotaj3 + X-Men: Children of the Atom (Japan 941217) - mk2r32 - Mortal Kombat II (rev L3.2 (European)) + xmcotajr + X-Men: Children of the Atom (Japan 941208 rent version) - monwar2a - Moon War II (set 2) + xmcotar1 + X-Men: Children of the Atom (Euro 950105) - mooncrsg - Moon Cresta (Gremlin) + xmcotar1d + X-Men: Children of the Atom (Euro 950105 Phoenix Edition) (bootleg) - moonwalk - Moon Walker (Set 1) + xmcotau + X-Men: Children of the Atom (USA 950105) - moonwar2 - Moon War II (set 1) + xmen + X-Men (4 Players ver EBA) - moonwlka - Moon Walker (Set 2) + xmen2p + X-Men (World 2 Players) - moonwlkb - Moon Walker (bootleg) + xmen2pa + X-Men (2 Players ver AAA) - mrvikinj - Mister Viking (Japan) + xmen2pe + X-Men (2 Players ver EAA) - mspacatk - Ms. Pac-Man Plus + xmen2pj + X-Men (2 Players ver JAA) - myheroj - Seishun Scandal (Japan) + xmen2pu + X-Men (2 Players ver UAB) - naughtya - Naughty Boy (bootleg) + xmen6p + X-Men (6 Players ver ECB) - naughtyc - Naughty Boy (Cinematronics) + xmen6pu + X-Men (6 Players ver UCB) - navalone - Navalone + xmena + X-Men (4 Players ver AEA) - nbajamt1 - NBA Jam TE (rev 1.0 01/17/94) + xmenaa + X-Men (4 Players ver ADA) - nbajamt2 - NBA Jam TE (rev 2.0 01/28/94) + xmenj + X-Men (4 Players ver JBA) - nbajamt3 - NBA Jam TE (rev 3.0 03/04/94) + xmenja + X-Men (4 Players ver JEA) - nbamaxht - NBA Maximum Hangtime (rev 1.0) + xmenu + X-Men (4 Players ver UBB) - nebulbee - Nebulous Bee + xmenua + X-Men (4 Players ver UEB) - nemesuk - Nemesis (World?) + xmultipl + X Multiply (World, M81 hardware) - nibblera - Nibbler (set 2) + xmultiplm72 + X Multiply (Japan, M72 hardware) - ninjak2a - Ninja Kid II (set 2) + xmvsf + X-Men Vs. Street Fighter (Euro 961004) - ninjak2b - Ninja Kid II (set 3) + xmvsfa + X-Men Vs. Street Fighter (Asia 961023) - nov2001u - Nova 2001 (US) + xmvsfar1 + X-Men Vs. Street Fighter (Asia 961004) - npacmod - PuckMan (harder?) + xmvsfar2 + X-Men Vs. Street Fighter (Asia 960919) - nprincsb - Ninja Princess (bootleg?) + xmvsfar3 + X-Men Vs. Street Fighter (Asia 960910) - nprincsu - Ninja Princess (not encrypted) + xmvsfb + X-Men Vs. Street Fighter (Brazil 961023) - offtwalc - Off the Wall (2-player cocktail) + xmvsfh + X-Men Vs. Street Fighter (Hispanic 961004) - oscarj0 - Psycho-Nics Oscar (Japan revision 0) + xmvsfj + X-Men Vs. Street Fighter (Japan 961023) - oscarj - Psycho-Nics Oscar (Japan revision 2) + xmvsfjr1 + X-Men Vs. Street Fighter (Japan 961004) - outruna - Out Run (set 2) + xmvsfjr2 + X-Men Vs. Street Fighter (Japan 960910) - outzonep - Out Zone (bootleg) + xmvsfjr3 + X-Men Vs. Street Fighter (Japan 960909) - pacland2 - Pac-Land (set 2) + xmvsfr1 + X-Men Vs. Street Fighter (Euro 960910) - pacland3 - Pac-Land (set 3) + xmvsfu + X-Men Vs. Street Fighter (USA 961023) - pacmanij - Pac-Mania (Japan) + xmvsfu1d + X-Men Vs. Street Fighter (USA 961004 Phoenix Edition) (bootleg) - pacmanjp - PuckMan (Japan set 2) + xmvsfur1 + X-Men Vs. Street Fighter (USA 961004) - pacmanm - Pac-Man (Midway) + xmvsfur2 + X-Men Vs. Street Fighter (USA 960910) - panica - Space Panic (set 2) + xorworld + Xor World (prototype) - pbactio2 - Pinball Action (set 2) + xplan + X-Plan (Ver. 101) - pipibibi - Pipi & Bibis / Whoopee (Japan) [bootleg ?] + xrally + Xtreme Rally / Off Beat Racer! - pitfallu - Pitfall II (not encrypted) + xsandos + X's & O's - pitfigh3 - Pit Fighter (version 3) + xsedae + X Se Dae Quiz (Korea) - polepos1 - Pole Position (Atari version 1) + xsleena + Xain'd Sleena (World) - poleposa - Pole Position (Atari version 2) + xsleenab + Xain'd Sleena (bootleg) - poleps2a - Pole Position II (Atari) + xsleenaba + Xain'd Sleena (bootleg, bugfixed) - poleps2b - Pole Position II (Atari bootleg 1) + xsleenaj + Xain'd Sleena (Japan) - poleps2c - Pole Position II (Atari bootleg 2) + xtheball + X the Ball - popeye2 - Popeye (set 2) + xtom3d + X Tom 3D - popflama - Pop Flamer (set 2) + xtrain + X-Train (Ver. 1.3) - poundfou - Pound for Pound (US) + xtrial + Xtrial Racing (ver JAB) - prehislu - Prehistoric Isle in 1930 (US) + xtrmhnt2 + Extreme Hunting 2 - pulirulj - PuLiRuLa (Japan) + xtrmhunt + Extreme Hunting - punishrj - Punisher, The (Japan) + xxmissio + XX Mission - punishru - Punisher, The (US) + xybots + Xybots (rev 2) - punksht2 - Punk Shot (2 Players) + xybots0 + Xybots (rev 0) - puzbobb - Puzzle Bobble (Japan, B-System) + xybots1 + Xybots (rev 1) - qadj - Quiz & Dragons (Japan) + xybotsf + Xybots (French, rev 3) - qbertjp - Q*bert (Japan) + xybotsg + Xybots (German, rev 3) - qtono2 - Quiz Tonosama no Yabou 2 Zenkoku-ban (Japan) + xymg + Xingyun Man Guan (China, V651C) - quartetj - Quartet (Japan) + xyonix + Xyonix - quartrba - Quarterback (set 2) + yachtmn + Yachtsman - qwakprot - Qwak (prototype) + yamagchi + Go Go Mr. Yamaguchi / Yuke Yuke Yamaguchi-kun - rainbow - Rainbow Islands + yamato + Yamato (US) - rainbowe - Rainbow Islands (Extra) + yamato2 + Yamato (World?) - rambo3a - Rambo III (set 2, US) + yamyam + Yam! Yam!? - ramprt2p - Rampart (2-player Joystick) + yamyamk + Yam! Yam! (Korea) - rastanu2 - Rastan (US set 2) + yanchamr + Kaiketsu Yanchamaru (Japan) - rescrdsa - Rescue Raider (Stand-Alone) + yankeedo + Yankee DO! - retofin1 - Return of the Invaders (bootleg set 1) + yard + 10 Yard Fight (Japan) - retofin2 - Return of the Invaders (bootleg set 2) + yarunara + Mahjong Yarunara (Japan) - ringkin2 - Ring King (set 2) + yellowcbb + Yellow Cab (bootleg) - ringkin3 - Ring King (set 3) + yellowcbj + Yellow Cab (Japan) - robocpu0 - Robocop (US revision 0) + yesnoj + Yes/No Sinri Tokimeki Chart - robotryo - Robotron (Yellow/Orange label) + yiear + Yie Ar Kung-Fu (program code I) - rockragj - Koi no Hotrock (Japan) + yiear2 + Yie Ar Kung-Fu (program code G) - rocnropk - Roc'n Rope (Kosuka) + yieartf + Yie Ar Kung-Fu (bootleg GX361 conversion) - rthundro - Rolling Thunder (old version) + ymcapsul + Yu-Gi-Oh Monster Capsule - rtypepj - R-Type (Japan prototype) + yokaidko + Yokai Douchuuki (Japan old version) - saturn - Saturn + yorijori + Yori Jori Kuk Kuk - schasrcv - Space Chaser (CV version) + yosakdoa + Yosaku To Donbei (set 2) - scrambls - Scramble (Stern) + yosakdon + Yosaku To Donbei (set 1) - sctionza - Section Z (set 2) + yosakdona + Yosaku To Donbei (set 2) - sdioj - SDI - Strategic Defense Initiative (Japan) + yosimotm + Mahjong Yoshimoto Gekijou [BET] (Japan) - seganinu - Sega Ninja (not encrypted) + yosimoto + Mahjong Yoshimoto Gekijou (Japan) - sengokh - Sengoku / Sengoku Denshou (set 2) + youjyudn + Youjyuden (Japan) - sercharu - SAR - Search And Rescue (US) + youkaidk + Yokai Douchuuki (Japan new version) - sf1 - Street Fighter (World) + youkaidk1 + Yokai Douchuuki (Japan, old version (YD1)) - sf1jp - Street Fighter (Japan) + youkaidk2 + Yokai Douchuuki (Japan, new version (YD2, Rev B)) - sf1us - Street Fighter (US) + youma + Youma Ninpou Chou (Japan) - sf2a - Street Fighter II - The World Warrior (US 910206) + youma2 + Youma Ninpou Chou (Japan, alt) - sf2b - Street Fighter II - The World Warrior (US 910214) + youmab + Youma Ninpou Chou (Game Electronics bootleg, set 1) - sf2cea - Street Fighter II' - Champion Edition (US rev A) + youmab2 + Youma Ninpou Chou (Game Electronics bootleg, set 2) - sf2ceb - Street Fighter II' - Champion Edition (US rev B) + yujan + Yu-Jan - sf2cej - Street Fighter II' - Champion Edition (Japan) + yuka + Yu-Ka - sf2e - Street Fighter II - The World Warrior (US 910228) + yukiwo + Yukiwo (World, prototype) - sf2jb - Street Fighter II - The World Warrior (Japan 910214) + yukon + Yukon (version 2.0) - sf2t - Street Fighter II' - Hyper Fighting (US) + yukon1 + Yukon (version 1.0) - sf2tj - Street Fighter II' Turbo - Hyper Fighting (Japan) + yukongl5 + Yukon Gold (03J00191, NSW/ACT) - sfeverbw - Space Fever (black and white) + yukongld + Yukon Gold (Russian) - shangonb - Super Hang-On (bootleg) + yumefuda + Yumefuda [BET] - shdancrj - Shadow Dancer (Japan) + yutnori + Puzzle Yutnori (Korea) - shinobia - Shinobi (set 2) + yuyugogo + Yuuyu no Quiz de GO!GO! (Japan) - shinobib - Shinobi (set 3) + yuyuhaku + The Battle of Yu Yu Hakusho: Shitou! Ankoku Bujutsukai! - shinobl - Shinobi (bootleg) + zankor + Zankor (Italian speech) - shootoub - Shoot Out (Korean Bootleg) + zaryavos + Zarya Vostoka - shootouj - Shoot Out (Japan) + zarza + Zarza (set 1) - sichuana - Sichuan II (hack ?) (set 2) + zarza1 + Zarza (set 2) - sidearjp - Side Arms - Hyper Dyne (Japan) + zarzon + Zarzon - sidearmr - Side Arms - Hyper Dyne (US) + zaviga + Zaviga - sidepctb - Side Pocket (bootleg) + zavigaj + Zaviga (Japan) - sidepctj - Side Pocket (Japan) + zaxxon + Zaxxon (set 1, rev D) - silkwrm2 - Silkworm (set 2) + zaxxon2 + Zaxxon (set 2, unknown rev) - simps2pj - Simpsons, The (2 Players Japan) + zaxxon3 + Zaxxon (set 3, unknown rev) - simpsn2p - Simpsons, The (2 Players) + zaxxonb + Jackson - sinista1 - Sinistar (prototype version) + zaxxonj + Zaxxon (Japan) - sinista2 - Sinistar (revision 2) + zdrum + Zooty Drum - skingam2 - Irem Skins Game, The (US set 2) + zedblade + Zed Blade / Operation Ragnarok - skullxb2 - Skull & Crossbones (set 2) + zekepeak + Zeke's Peak - skykiddo - Sky Kid Deluxe (set 2) + zektor + Zektor (revision B) - slapbtjp - Slap Fight (Japan bootleg) + zelos + Zelos (Japan, main unit) - slapbtuk - Slap Fight (English bootleg) + zelost + Zelos (Japan, terminal) - snowbroa - Snow Bros. - Nick & Tom (set 2) + zephy + Zephy (set 1) - snowbrob - Snow Bros. - Nick & Tom (set 3) + zephya + Zephy (set 2) - snowbroj - Snow Bros. - Nick & Tom (Japan) + zero + Zero (set 1, Defender bootleg) - spacfura - Space Fury (revision A) + zero2 + Zero (set 2, Defender bootleg) - spinlbrj - Spinal Breakers (Japan) + zerofxz + Oriental Legend ZERO (Hack) - spinlbru - Spinal Breakers (US) + zerogu2 + Zero Gunner 2 - spnchotj - Super Punch-Out!! (Japan) + zerogun + Zero Gunner (Export, Model 2B) - sptrekct - Space Trek (cocktail) + zeroguna + Zero Gunner (Export, Model 2A) - spyhnt2a - Spy Hunter 2 (rev 1) + zerogunaj + Zero Gunner (Japan, Model 2A) - sqixbl - Super Qix (bootleg) + zerogunj + Zero Gunner (Japan, Model 2B) - srumblr2 - Speed Rumbler, The (set 2) + zerohour + Zero Hour (set 1) - sspacat2 - Space Attack (upright, older) + zerohoura + Zero Hour (set 2) - sspacatc - Space Attack (cocktail) + zerohouri + Zero Hour (Inder) - ssrdrabd - Sunset Riders (Asia 2 Players ver. ABD) + zeropnt + Zero Point (set 1) - ssrdrebc - Sunset Riders (World 2 Players ver. EBC) + zeropnt2 + Zero Point 2 - ssrdrebd - Sunset Riders (World 2 Players ver. EBD) + zeropnta + Zero Point (set 2) - ssrdrjbd - Sunset Riders (Japan 2 Players ver. JBD) + zeropntj + Zero Point (Japan) - ssrdruac - Sunset Riders (US 4 Players ver. UAC) + zeroteam + Zero Team USA (US) - ssrdrubc - Sunset Riders (US 2 Players ver. UBC) + zeroteama + Zero Team (Japan?, earlier?) - ssrdruda - Sunset Riders (US 4 Players ver. UDA) + zeroteamb + Zero Team (Japan?, later batteryless) - starfore - Star Force (encrypted) + zeroteamc + Zero Team (Taiwan) - starjacs - Star Jacker (Stern) + zeroteamd + Zero Team (Korea) - starwar1 - Star Wars (rev 1) + zeroteams + Zero Team Selection - stratvxb - Stratovox (bootleg) + zeroteamsr + Zero Team Suicide Revival Kit - streets1 - Street Smart (US version 1) + zerotime + Zero Time (Petaco S.A.) - streetsj - Street Smart (Japan version 1) + zerotimed + Zero Time (Datamat) - stridrja - Strider Hiryu (Japan set 2) + zerotimemc + Zero Time (Marti Colls) - supbtimj - Super Burger Time (Japan) + zerotimeu + Zero Time (Spanish bootleg) - superpcm - Super Pac-Man (Midway) + zerotm2k + Zero Team 2000 - superqix - Super Qix + zerotrgt + Zero Target (World, CW) - suprmou2 - Funny Mouse (bootleg?) + zerotrgta + Zero Target (World, CT) - surpratk - Surprise Attack (Japan) + zerowing + Zero Wing (2P set) - tankfrcj - Tank Force (Japan) + zerowing1 + Zero Wing (1P set) - tatsujn2 - Truxton II / Tatsujin II / Tatsujin Oh (Japan) + zerowingw + Zero Wing (2P set, Williams license) - terracra - Terra Cresta (YM2203) + zerozone + Zero Zone - terracrb - Terra Cresta (YM3526 set 2) + zgundm + Mobile Suit Z-Gundam: A.E.U.G. vs Titans (ZGA1 Ver. A) - tetrisa - Tetris (Sega Set 2) + zgundmdx + Mobile Suit Z-Gundam: A.E.U.G. vs Titans DX (ZDX1 Ver. A) - thehustj - Hustler, The (Japan version J) + zhongguo + Zhong Guo Chu Da D - thnderxj - Thunder Cross (Japan) + zigzag + Zig Zag (Galaxian hardware, set 1) - tigerh2 - Tiger Heli (set 2) + zigzag2 + Zig Zag (Galaxian hardware, set 2) - timesol1 - Time Soldiers (US Rev 1) + zigzagb + Zig Zag (bootleg Dig Dug conversion on Galaxian hardware, set 1) - timscanr - Time Scanner + zigzagb2 + Zig Zag (bootleg Dig Dug conversion on Galaxian hardware, set 2) - tmnt22p - Teenage Mutant Ninja Turtles - Turtles in Time (2 Players US) + zingzip + Zing Zing Zip - tndrcadj - Tokusyu Butai UAG (Japan) + zingzipbl + Zing Zing Zip (bootleg) - tnzs2 - NewZealand Story 2, The (World) + zintrckb + Zintrick / Oshidashi Zentrix (bootleg of CD version) - tnzsb - NewZealand Story, The (World, bootleg) + zintrkcd + Zintrick / Oshidashi Zentrix (Neo CD conversion) - todruagb - Tower of Druaga (set 2) + zipzap + Zip & Zap (Explicit) - toki2 - Toki (set 2) + zipzapa + Zip & Zap (Less Explicit) - toki3 - Toki (set 3) + zira + Zira - tomahaw5 - Tomahawk 777 (Revision 5) + znpwfv + Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000) - toobinp - Toobin' (Prototype) + znpwfvt + Zen Nippon Pro-Wrestling Featuring Virtua (T 971123 V1.000) - trackflc - Track & Field (Centuri) + zoar + Zoar - trogp - Trog (prototype, rev 4.00 07/27/90) + zodiack + Zodiack - tsamura2 - Samurai Nihon-ichi (set 2) + zoidiexp + Zoids Infinity EX Plus (ver. 2.10) - tumblep2 - Tumble Pop (bootleg set 2) + zoidsinf + Zoids Infinity - tumblepb - Tumble Pop (bootleg set 1) + zokumahj + Zoku Mahjong Housoukyoku (Japan) - tutankst - Tutankham (Stern) + zokuoten + Zoku Otenamihaiken (V2.03J 2001/02/16 16:00) - twincobu - Twin Cobra (US) + zolapac + Super Zola Pac Gal - vangrdce - Vanguard (Centuri) + zombraid + Zombie Raid (9/28/95, US) - vanvans - Van Van Car (Sanritsu) + zombraidp + Zombie Raid (9/28/95, US, prototype PCB) - vaportru - Vapor Trail - Hyper Offence Formation (US) + zombraidpj + Zombie Raid (9/28/95, Japan, prototype PCB) - vendett2 - Vendetta (Asia set 2) + zombrvn + Zombie Revenge (Rev A) - vendettj - Crime Fighters 2 (Japan) + zombrvne + Zombie Revenge (Export) - vigilntj - Vigilante (Japan) + zombrvno + Zombie Revenge - vigilntu - Vigilante (US) + zoofari + Zoofari - vimana2 - Vimana (set 2) + zookeep + Zoo Keeper (set 1) - vsyard - 10 Yard Fight (Vs. version 11/05/84) + zookeep2 + Zoo Keeper (set 2) - vsyard2 - 10 Yard Fight (Vs. version, set 2) + zookeep3 + Zoo Keeper (set 3) - vulgus2 - Vulgus (set 2) + zookeepbl + Zoo Keeper (bootleg) - warlord - Warlords + zoom909 + Zoom 909 - warpwar2 - Warp Warp (Rock-ola set 2) + zooo + Zooo (V2.01JA 2004/04/13 12:00) - warpwarr - Warp Warp (Rock-ola set 1) + zorroa6 + Zorro (30130611, NSW/ACT) - wb3a - Wonder Boy III - Monster Lair (set 2) + zorroa6u + Zorro (0151372, US) - wb3bl - Wonder Boy III - Monster Lair (bootleg) + zortonbr + Zorton Brothers / Los Justicieros (v1.01) - wbmlj - Wonder Boy in Monster Land (Japan set 1) + zortonbr_100 + Zorton Brothers / Los Justicieros (v1.00) - wbmlj2 - Wonder Boy in Monster Land (Japan set 2) + zulu + Zulu (Ver. ZO.02.D) - wbmlju - Wonder Boy in Monster Land (Japan not encrypted) + zunkyou + Zunzunkyou no Yabou (Japan) - wboy4u - Wonder Boy (set 4 not encrypted) + zunou + Touch De Zunou (Japan, Rev A) - wexpresb - Western Express (bootleg) + zupapa + Zupapa! - wwester1 - Wild Western (set 2) + zwackery + Zwackery - yard - 10 Yard Fight + zzblock + Zun Zun Block [TTL] - yokaidko - Yokai Douchuuki (Japan old version) + zzyzzyx2 + Zzyzzyxx (set 2) - youkaidk - Yokai Douchuuki (Japan new version) + zzyzzyxx + Zzyzzyxx (set 1) - zzyzzyx2 + zzyzzyxx2 Zzyzzyxx (set 2) - \ No newline at end of file + diff --git a/resources/mameres.py b/resources/mameres.py new file mode 100755 index 0000000000..87f00ca44f --- /dev/null +++ b/resources/mameres.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +""" +Utility to parse a MAME compatible DAT file and produce the EmulationStation's resource files: +* mamebioses.xml - list of BIOS romsets +* mamedevices.xml - list of MAME device-type romsets +* mamenames.xml - list of MAME compatible romsets, with their description + +Any parameter given is considered a DAT file and parsed. +The order of the DAT file is significant for the 'mamenames.xml' output, since the first description of a romset takes precendence. + +Format notes: + - The files must be in XML format, older DAT format files are not supported + - (upstream) MAME uses 'machine' as main element for a romset, with 'isbios' and 'isdevice' attributes used to mark it as a BIOS/device + - MAME2003 and FBNeo don't have the concept of 'devices', they use 'isbios' or 'runnable=no' attributes to mark a BIOS romset + +""" +from xml.sax.saxutils import escape +from datetime import datetime +import xml.etree.ElementTree as et +import sys +import os + +games = {} +bioses = [] +devices = [] + +files = [] + +if len(sys.argv) < 2: + print(f"Dat files missing, please add some.\nUsage: {sys.argv[0]} .. ", file=sys.stderr) + sys.exit(1) + +for dat in sys.argv[1:]: + print(f"Reading file '{dat}'") + if not os.path.isfile(dat): + print(f"File {dat} not found, skipping", file=sys.stderr) + continue + + try: + xml = et.parse(dat) + files.append(os.path.basename(dat)) + except Exception: + print(f"File {dat} cannot be parsed as XML!", file=sys.stderr) + continue + + """ + FBNeo and older MAME dat files use 'game' as main element + """ + for game in xml.findall('.//game'): + if ('runnable' in game.attrib and game.attrib['runnable'] == "no") or \ + ('isbios' in game.attrib and game.attrib['isbios'] == "yes"): + bioses.append(game.attrib['name']) + continue + + name = game.attrib['name'] + desc = escape(game.find('description').text) + if name not in games: + games[name] = desc + + """ + Mame DAT file use 'machine' as main element + """ + for game in xml.findall('.//machine'): + if ('isbios' in game.attrib and game.attrib['isbios'] == "yes"): + bioses.append(game.attrib['name']) + continue + + if ('isdevice' in game.attrib and game.attrib['isdevice'] == "yes"): + # Don't add the device unless it has at least one ROM file + if len(game.findall('./rom')) > 0: + devices.append(game.attrib['name']) + continue + + name = game.attrib['name'] + desc = escape(game.find('description').text) + if name not in games: + games[name] = desc + +print(f"Found {len(games)} games, {len(sorted(set(bioses)))} BIOSes and {len(sorted(set(devices)))} devices") +ident_info = f"" + +if len(games) > 0: + with open('mamenames.xml', 'w') as f: + print(ident_info,file=f) + for game in sorted(games): + print(f"\n\t{game}\n\t{games[game]}\n", file=f) +else: + print("No games found, skipped writing 'mamenames.xml'", file=sys.stderr) + +if len(bioses) > 0: + with open('mamebioses.xml', 'w') as f: + print(ident_info,file=f) + for dev in sorted(set(bioses)): + print(f"{dev}", file=f) +else: + print("No BIOSes found, skipped writing 'mamebioses.xml'", file=sys.stderr) + +if len(devices) > 0: + with open('mamedevices.xml', 'w') as f: + print(ident_info,file=f) + for bios in sorted(set(devices)): + print(f"{bios}", file=f) +else: + print("No devices found, skipped writing 'mamedevices.xml'", file=sys.stderr) From 69ee73c764174f005723bdd86c7286543ca8ac9d Mon Sep 17 00:00:00 2001 From: Gemba Date: Tue, 1 Mar 2022 08:45:17 +0100 Subject: [PATCH 515/603] fixes continued scrolling on system leave and reenter navigation --- es-app/src/views/gamelist/BasicGameListView.cpp | 4 ++++ es-app/src/views/gamelist/BasicGameListView.h | 2 ++ es-app/src/views/gamelist/DetailedGameListView.cpp | 1 + es-app/src/views/gamelist/VideoGameListView.cpp | 1 + es-core/src/components/IList.h | 8 +++++++- 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 899f12578c..271538dd7d 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -161,3 +161,7 @@ std::vector BasicGameListView::getHelpPrompts() } return prompts; } + +void BasicGameListView::onFocusLost() { + mList.stopScrolling(true); +} diff --git a/es-app/src/views/gamelist/BasicGameListView.h b/es-app/src/views/gamelist/BasicGameListView.h index f1a216b0f5..305e6feeb3 100644 --- a/es-app/src/views/gamelist/BasicGameListView.h +++ b/es-app/src/views/gamelist/BasicGameListView.h @@ -23,6 +23,8 @@ class BasicGameListView : public ISimpleGameListView virtual std::vector getHelpPrompts() override; virtual void launch(FileData* game) override; + void onFocusLost() override; + protected: virtual std::string getQuickSystemSelectRightButton() override; virtual std::string getQuickSystemSelectLeftButton() override; diff --git a/es-app/src/views/gamelist/DetailedGameListView.cpp b/es-app/src/views/gamelist/DetailedGameListView.cpp index 0dbbbafbb5..ecac95c3bd 100644 --- a/es-app/src/views/gamelist/DetailedGameListView.cpp +++ b/es-app/src/views/gamelist/DetailedGameListView.cpp @@ -311,4 +311,5 @@ std::vector DetailedGameListView::getMDValues() void DetailedGameListView::onFocusLost() { mDescContainer.reset(); + mList.stopScrolling(true); } diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 9b2e50a10c..78d94ec512 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -401,4 +401,5 @@ void VideoGameListView::onShow() void VideoGameListView::onFocusLost() { mDescContainer.reset(); + mList.stopScrolling(true); } diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index 93f61ce9a8..2a8669534c 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -103,10 +103,16 @@ class IList : public GuiComponent return mScrollVelocity; } - void stopScrolling() + void stopScrolling(bool focusLost = false) { + if (focusLost) { + // force remove overlay (large two letter display in center) when user scrolls + // at max speed through list and then abruptly leaves the system + mTitleOverlayOpacity = 0; + } listInput(0); onCursorChanged(CURSOR_STOPPED); + } void clear() From 7589ced632fbb7b17784518e4eefdf72e6d9a043 Mon Sep 17 00:00:00 2001 From: Gemba Date: Thu, 3 Mar 2022 21:18:00 +0100 Subject: [PATCH 516/603] Cursor movement more user friendly when using paging with full page. --- es-app/src/components/TextListComponent.h | 74 +++++++++++++++-------- 1 file changed, 50 insertions(+), 24 deletions(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index eb3896f7b8..aac751624d 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -92,6 +92,7 @@ class TextListComponent : public IList Alignment mAlignment; float mHorizontalMargin; + int getFirstVisibleEntry(); std::function mCursorChangedCallback; std::shared_ptr mFont; @@ -108,7 +109,7 @@ class TextListComponent : public IList unsigned int mColors[COLOR_ID_COUNT]; unsigned int mScreenCount; int mStartEntry = 0; - unsigned int mCursorPrev = 1; + unsigned int mCursorPrev = -1; bool mOneEntryUpDn = true; ImageComponent mSelectorImage; @@ -150,33 +151,12 @@ void TextListComponent::render(const Transform4x4f& parentTrans) const float entrySize = Math::max(font->getHeight(1.0), (float)font->getSize()) * mLineSpacing; - // number of entries that can fit on the screen simultaniously mScreenCount = (int)(mSize.y() / entrySize); - if (mCursor != mCursorPrev) + if(mCursor != mCursorPrev) { - int fromTop = mCursorPrev - mStartEntry; - bool cursorCentered = fromTop == mScreenCount/2; - mStartEntry = 0; - - if(size() >= mScreenCount) - { - if (Settings::getInstance()->getBool("UseFullscreenPaging") - && (mCursor > mScreenCount/2 || mCursor < size() - (mScreenCount - mScreenCount/2)) - && !cursorCentered && !mOneEntryUpDn) - { - mStartEntry = mCursor - fromTop; - } else { - mStartEntry = mCursor - mScreenCount/2; - } - - // bounds check - if(mStartEntry < 0) - mStartEntry = 0; - else if(mStartEntry >= size() - mScreenCount) - mStartEntry = size() - mScreenCount; - } + mStartEntry = (size() > mScreenCount) ? getFirstVisibleEntry() : 0; mCursorPrev = mCursor; } @@ -272,6 +252,52 @@ void TextListComponent::render(const Transform4x4f& parentTrans) GuiComponent::renderChildren(trans); } + +template +int TextListComponent::getFirstVisibleEntry() +{ + if (mCursorPrev == -1) + { + // init or returned from emulator + mCursorPrev = mCursor; + int quot = div(mCursor, mScreenCount).quot; + mStartEntry = quot * mScreenCount; + } + int screenRelCursor = mCursorPrev - mStartEntry; + bool cursorCentered = screenRelCursor == mScreenCount/2; + int visibleEntryMax = size() - mScreenCount; + int firstVisibleEntry = 0; + + if(Settings::getInstance()->getBool("UseFullscreenPaging") && !cursorCentered) + { + // keep visible cursor constant but move visible list (default) + firstVisibleEntry = mCursor - screenRelCursor; + if(mOneEntryUpDn) + { + int delta = mCursor - mCursorPrev; + // detect rollover (== delta is more than one item) + if(delta < -3) + firstVisibleEntry = 0; + else if(delta > 3) + firstVisibleEntry = visibleEntryMax; + else if(screenRelCursor < mScreenCount/2 && delta > 0 /*down pressed*/ + || screenRelCursor > mScreenCount/2 && delta < 0 /*up pressed*/) + // cases for list begin / list end + // move visible cursor and keep visible list section constant + firstVisibleEntry = firstVisibleEntry - delta; + } + } else { + // cursor always in middle of visible list + firstVisibleEntry = mCursor - mScreenCount/2; + } + // bounds check + if(firstVisibleEntry < 0) + firstVisibleEntry = 0; + else if(firstVisibleEntry > visibleEntryMax) + firstVisibleEntry = visibleEntryMax; + return firstVisibleEntry; +} + template bool TextListComponent::input(InputConfig* config, Input input) { From feaf44afacf7faea1547f2fb72b152867a72c2a9 Mon Sep 17 00:00:00 2001 From: Gemba Date: Sun, 20 Feb 2022 13:38:19 +0100 Subject: [PATCH 517/603] restructured --help output, removed legacy --help output from README.md and removed surplus SplashScreenProgress switch (always true). --- README.md | 20 +-------- es-app/src/main.cpp | 67 ++++++++++++++++++----------- es-app/src/views/ViewController.cpp | 2 +- es-core/src/Settings.cpp | 2 - 4 files changed, 45 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 37bf54f6e8..1dd34bbc07 100644 --- a/README.md +++ b/README.md @@ -111,25 +111,7 @@ The new configuration will be added to the `~/.emulationstation/es_input.cfg` fi **If your controller stops working, you can delete the `~/.emulationstation/es_input.cfg` file to make the input configuration screen re-appear on next run.** - -You can use `--help` or `-h` to view a list of command-line options. Briefly outlined here: -``` ---resolution [width] [height] try and force a particular resolution ---gamelist-only skip automatic game search, only read from gamelist.xml ---ignore-gamelist ignore the gamelist (useful for troubleshooting) ---draw-framerate display the framerate ---no-exit don't show the exit option in the menu ---no-splash don't show the splash screen ---debug more logging, show console on Windows ---scrape scrape using command line interface ---windowed not fullscreen, should be used with --resolution ---vsync [1/on or 0/off] turn vsync on or off (default is on) ---max-vram [size] Max VRAM to use in Mb before swapping. 0 for unlimited ---force-kid Force the UI mode to be Kid ---force-kiosk Force the UI mode to be Kiosk ---force-disable-filters Force the UI to ignore applied filters in gamelist ---help, -h summon a sentient, angry tuba -``` +You can use `--help` or `-h` to view a list of command-line options. As long as ES hasn't frozen, you can always press F4 to close the application. diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 956d4aed01..cf1c47463d 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -172,30 +172,52 @@ bool parseArgs(int argc, char* argv[]) std::cout << "EmulationStation, a graphical front-end for ROM browsing.\n" "Written by Alec \"Aloshi\" Lofquist.\n" - "Version " << PROGRAM_VERSION_STRING << ", built " << PROGRAM_BUILT_STRING << "\n\n" + "Version " << PROGRAM_VERSION_STRING << ", built " << PROGRAM_BUILT_STRING << "\n" "Command line arguments:\n" - "--resolution [width] [height] try and force a particular resolution\n" - "--screenrotate [n] rotate a quarter turn clockwise for each n\n" - "--screensize [width] [height] for a canvas smaller than the full resolution,\n" + "\nGeometry settings:\n" + "--resolution WIDTH HEIGHT try and force a particular resolution\n" + "--screenrotate N rotate a quarter turn clockwise for each N\n" + "--screensize WIDTH HEIGHT for a canvas smaller than the full resolution,\n" " or if rotating into portrait mode\n" - "--screenoffset [x] [y] move the canvas by x,y pixels\n" - "--gamelist-only skip automatic game search, only read from gamelist.xml\n" - "--ignore-gamelist ignore the gamelist (useful for troubleshooting)\n" - "--draw-framerate display the framerate\n" - "--no-exit don't show the exit option in the menu\n" - "--no-confirm-quit omit confirm dialog on actions of quit menu\n" - "--no-splash don't show the splash screen\n" - "--debug more logging, show console on Windows\n" - "--scrape scrape using command line interface\n" + "--screenoffset X Y move the canvas by x,y pixels\n" "--windowed not fullscreen, should be used with --resolution\n" - "--vsync [1/on or 0/off] turn vsync on or off (default is on)\n" - "--max-vram [size] max VRAM to use in MB before swapping. 0 for unlimited\n" + "\nGame and settings visibility in ES and behaviour of ES:\n" + "--force-disable-filters force the UI to ignore applied filters on\n" + " gamelist (p)\n" "--force-kid force the UI mode to be Kid\n" "--force-kiosk force the UI mode to be Kiosk\n" - "--force-disable-filters force the UI to ignore applied filters in gamelist\n" - "--home [path] directory to use as home path\n" + "--no-confirm-quit omit confirm dialog on actions of quit menu\n" + "--no-exit don't show the exit option in the menu\n" + "--no-splash don't show the splash screen\n" + "\nGamelist related:\n" + "--gamelist-only use gamelist.xml as trusted source and do not\n" + " check any path entries of gamelist.xml (p)\n" + "--ignore-gamelist do not read gamelist.xml files (useful for\n" + " troubleshooting)\n" + "\nAdvanced settings:\n" + "--debug more logging, show console on Windows. Enables\n" + " these keyboard shortcuts with left CTRL-key:\n" + " +G: Toggle Gridlayout boundary boxes\n" + " +I: Toggle image boundary box\n" + " +R: Reload all UI views (theme, gamelist, system)\n" + " +T: Toggle textcomponent boundary box\n" + "--draw-framerate display the framerate (p)\n" + "--max-vram SIZE maximum VRAM to use in MB before swapping,\n" + " use 0 for unlimited (p)\n" + "--show-hidden-files show also hidden files of filesystem, no effect\n" + " if --gamelist-only is also set (p)\n" + "--vsync 1|0 turn vsync on (1) or off (0) (default is on)\n" + "\nGeneric switches:\n" "--help, -h summon a sentient, angry tuba\n\n" - "More information available in README.md.\n"; + "--home PATH directory to use as home folder for\n" + " .emulationstation/es_settings.cfg, aso.\n" + " Subfolder .emulationstation/ will be created.\n" + "\nScrape mode:\n" + "--scrape scrape using command line interface\n\n" + "Note: Switches marked (p) will be persisted in es_settings.cfg when any\n" + "setting is changed via EmulationStation UI.\n\n" + "Please refer to the online documentation for additional information:\n" + "https://retropie.org.uk/docs/EmulationStation/\n"; return false; //exit after printing help } } @@ -320,7 +342,6 @@ int main(int argc, char* argv[]) window.pushGui(ViewController::get()); bool splashScreen = Settings::getInstance()->getBool("SplashScreen"); - bool splashScreenProgress = Settings::getInstance()->getBool("SplashScreenProgress"); if(!scrape_cmdline) { @@ -332,15 +353,13 @@ int main(int argc, char* argv[]) if (splashScreen) { - std::string progressText = "Loading..."; - if (splashScreenProgress) - progressText = "Loading system config..."; + std::string progressText = "Loading system config..."; window.renderLoadingScreen(progressText); } } const char* errorMsg = NULL; - if(!loadSystemConfigFile(splashScreen && splashScreenProgress ? &window : nullptr, &errorMsg)) + if(!loadSystemConfigFile(splashScreen ? &window : nullptr, &errorMsg)) { // something went terribly wrong if(errorMsg == NULL) @@ -371,7 +390,7 @@ int main(int argc, char* argv[]) // this makes for no delays when accessing content, but a longer startup time ViewController::get()->preload(); - if(splashScreen && splashScreenProgress) + if(splashScreen) window.renderLoadingScreen("Done."); //choose which GUI to open depending on if an input configuration already exists diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index d96181dc0c..465490b1f7 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -451,7 +451,7 @@ void ViewController::preload() int i = 1; int max = SystemData::sSystemVector.size() + 1; - bool splash = Settings::getInstance()->getBool("SplashScreen") && Settings::getInstance()->getBool("SplashScreenProgress"); + bool splash = Settings::getInstance()->getBool("SplashScreen"); if (splash) mWindow->renderLoadingScreen("Preloading UI", (float)i / (float)max); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 2eab663bc4..56b46a4fc8 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -24,7 +24,6 @@ std::vector settings_dont_save { { "ShowExit" }, { "ConfirmQuit" }, { "SplashScreen" }, - { "SplashScreenProgress" }, { "VSync" }, { "FullscreenBorderless" }, { "Windowed" }, @@ -65,7 +64,6 @@ void Settings::setDefaults() mBoolMap["FullscreenBorderless"] = false; mBoolMap["Windowed"] = false; mBoolMap["SplashScreen"] = true; - mBoolMap["SplashScreenProgress"] = true; mStringMap["StartupSystem"] = ""; mBoolMap["DisableKidStartMenu"] = true; From 199b9556e48d0016b5454fe98bc734889008b739 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Wed, 20 Apr 2022 16:19:19 +0100 Subject: [PATCH 518/603] SystemView: fix random system warp crash When no Game system is visible, choosing a random system in the carousel will lead to a crash. Added an extra check before the random shuffle is performed. --- es-app/src/SystemData.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 66b1cf83e7..d222f08bde 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -542,6 +542,8 @@ SystemData* SystemData::getRandomSystem() if (sSystemVectorShuffled.empty()) { std::copy_if(sSystemVector.begin(), sSystemVector.end(), std::back_inserter(sSystemVectorShuffled), [](SystemData *sd){ return sd->isGameSystem(); }); + if (sSystemVectorShuffled.empty()) return NULL; + std::shuffle(sSystemVectorShuffled.begin(), sSystemVectorShuffled.end(), sURNG); } From 4e70a249283bc57caa203fde973c3bf1750de490 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Sun, 1 May 2022 07:08:08 +0100 Subject: [PATCH 519/603] fix wrong dialog title --- es-app/src/guis/GuiVideoScreensaverOptions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.cpp b/es-app/src/guis/GuiVideoScreensaverOptions.cpp index 1370b47ebd..b743e18eb4 100644 --- a/es-app/src/guis/GuiVideoScreensaverOptions.cpp +++ b/es-app/src/guis/GuiVideoScreensaverOptions.cpp @@ -47,7 +47,7 @@ GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const cha addSaveFunc([ss_video_mute] { Settings::getInstance()->setBool("ScreenSaverVideoMute", ss_video_mute->getState()); }); - auto ss_vlc_resolution = std::make_shared< OptionListComponent >(mWindow, "GAME INFO ALIGNMENT", false); + auto ss_vlc_resolution = std::make_shared< OptionListComponent >(mWindow, "VIDEO RESOLUTION", false); std::vector vlc_res; vlc_res.push_back("original"); // renders at original video resolution, stretched to fit screen vlc_res.push_back("low"); // 25% of screen resolution From b99e8c21bab4d7bba564f6c7894566dfc60d000f Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Sat, 7 May 2022 17:32:29 +0100 Subject: [PATCH 520/603] RPI support: add a separate omxplayer build option Modified the build options and source files to enable `omxplayer` for video previews only when the `OMX` option is used. Updated the build instructions on RPI accordingly and added some notes about the deprecation of the BRCM GPU drivers in RasPI OS 'Bullseye'. Previously, the `RPI` build option would be used to add both RPI specific audio settings/VRAM limits AND add `omxplayer` support. However, `omxplayer` does not work with the RPI KMS video driver (`vc4-kms-v3d`) or with a 64bit RPI system, due to the lack of OpenMAX (OMX) API support. The new RasPi OS ('bullseye') has made the KMS driver the default [1] and doesn't offer `omxplayer` anymore (considered deprecated [2]). Splitting the OMX support from the RPI option allows to set some default values for RPI systems without automatically adding the `omxplayer` bits. [1] https://www.raspberrypi.com/news/raspberry-pi-os-debian-bullseye/ [2] https://github.com/popcornmix/omxplayer/commit/1f1d0ccd65 --- CMakeLists.txt | 7 ++++++- README.md | 10 +++++++--- es-app/src/SystemScreenSaver.cpp | 4 ++-- es-app/src/guis/GuiMenu.cpp | 4 ++-- es-app/src/guis/GuiVideoScreensaverOptions.cpp | 8 ++++---- es-app/src/views/gamelist/GridGameListView.cpp | 4 ++-- es-app/src/views/gamelist/VideoGameListView.cpp | 6 +++--- es-core/src/Settings.cpp | 2 +- es-core/src/components/VideoPlayerComponent.cpp | 2 +- es-core/src/components/VideoPlayerComponent.h | 4 ++-- 10 files changed, 30 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index eb9f403ccf..a943c60416 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,8 @@ cmake_minimum_required(VERSION 2.8) option(GLES "Set to ON if targeting Embedded OpenGL" ${GLES}) option(GL "Set to ON if targeting Desktop OpenGL" ${GL}) -option(RPI "Set to ON to enable the Raspberry PI video player (omxplayer) and audio options" ${RPI}) +option(RPI "Set to ON to enable the Raspberry PI memory and audio options" ${RPI}) +option(OMX "Set to On to enable OMXPlayer for video snapshots" ${OMX}) option(CEC "Set to ON to enable CEC" ${CEC}) option(PROFILING "Set to ON to enable profiling" ${PROFILING}) @@ -110,6 +111,10 @@ if(DEFINED BCMHOST OR RPI) add_definitions(-D_RPI_) endif() +if(OMX) + add_definitions(-D_OMX_) +endif() + if(DEFINED libCEC_FOUND) add_definitions(-DHAVE_LIBCEC) endif() diff --git a/README.md b/README.md index 1dd34bbc07..58539c21b0 100644 --- a/README.md +++ b/README.md @@ -54,14 +54,18 @@ NOTE: to generate a `Debug` build on Unix/Linux, run the Makefile generation ste cmake -DCMAKE_BUILD_TYPE=Debug . ``` -**On the Raspberry Pi** +**On the Raspberry Pi** * Choosing a GLES implementation. * if the Pi system uses the legacy/Broadcom driver, install the `libraspberry-dev` package before running `cmake` to configure the build - * if the Pi system uses the Mesa VC3/V3D GL driver, build using `-DUSE_MESA_GLES=On` to choose the MESA GLES implementation. This option is _mandatory_ when compiling for a Pi4 system, since the legacy GL drivers are not supported anymore on this system. + * if the Pi system uses the Mesa VC4/V3D GL driver, build using `-DUSE_MESA_GLES=On` to choose the MESA GLES implementation. This option is _mandatory_ when compiling for a Pi4 system, since the legacy GL drivers are not supported anymore on this system. -* Support for using `omxplayer` to play video previews in the gamelist is enabled by adding `-DRPI=On` to the build options + NOTE: Starting with RasPI OS 'Bullseye', the legacy/Broadcom drivers are not supported anymore, so `-DUSE_MESA_GLES=On` should be used. + +* Enable the audio/memory defaults by adding `-DRPI=On` to the build options +* Support for using `omxplayer` to play video previews in the gamelist is enabled by adding `-DOMX=On` to the build options. + NOTE: `omxplayer` support is not available on 64bit RasPI OS or in the default RasPI OS 'Bullseye' configuration. **GLES build notes** diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index d9fa718c27..9c422c1fd1 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -1,6 +1,6 @@ #include "SystemScreenSaver.h" -#ifdef _RPI_ +#ifdef _OMX_ #include "components/VideoPlayerComponent.h" #endif #include "components/VideoVlcComponent.h" @@ -64,7 +64,7 @@ bool SystemScreenSaver::isScreenSaverActive() void SystemScreenSaver::setVideoScreensaver(std::string& path) { -#ifdef _RPI_ +#ifdef _OMX_ // Create the correct type of video component if (Settings::getInstance()->getBool("ScreenSaverOmxPlayer")) mVideoScreensaver = new VideoPlayerComponent(mWindow, getTitlePath()); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 224e6511b5..09f377e0d9 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -164,7 +164,7 @@ void GuiMenu::openSoundSettings() s->addWithLabel("ENABLE VIDEO AUDIO", video_audio); s->addSaveFunc([video_audio] { Settings::getInstance()->setBool("VideoAudio", video_audio->getState()); }); -#ifdef _RPI_ +#ifdef _OMX_ // OMX player Audio Device auto omx_audio_dev = std::make_shared< OptionListComponent >(mWindow, "OMX PLAYER AUDIO DEVICE", false); std::vector omx_cards; @@ -463,7 +463,7 @@ void GuiMenu::openOtherSettings() s->addWithLabel("SHOW HIDDEN FILES", hidden_files); s->addSaveFunc([hidden_files] { Settings::getInstance()->setBool("ShowHiddenFiles", hidden_files->getState()); }); -#ifdef _RPI_ +#ifdef _OMX_ // Video Player - VideoOmxPlayer auto omx_player = std::make_shared(mWindow); omx_player->setState(Settings::getInstance()->getBool("VideoOmxPlayer")); diff --git a/es-app/src/guis/GuiVideoScreensaverOptions.cpp b/es-app/src/guis/GuiVideoScreensaverOptions.cpp index b743e18eb4..5850a0b0ff 100644 --- a/es-app/src/guis/GuiVideoScreensaverOptions.cpp +++ b/es-app/src/guis/GuiVideoScreensaverOptions.cpp @@ -23,7 +23,7 @@ GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const cha addWithLabel("STRETCH VIDEO ON SCREENSAVER", stretch_screensaver); addSaveFunc([stretch_screensaver] { Settings::getInstance()->setBool("StretchVideoOnScreenSaver", stretch_screensaver->getState()); }); -#ifdef _RPI_ +#ifdef _OMX_ auto ss_omx = std::make_shared(mWindow); ss_omx->setState(Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); addWithLabel("USE OMX PLAYER FOR SCREENSAVER", ss_omx); @@ -59,7 +59,7 @@ GuiVideoScreensaverOptions::GuiVideoScreensaverOptions(Window* window, const cha addWithLabel("VLC: SCREENSAVER VIDEO RESOLUTION", ss_vlc_resolution); addSaveFunc([ss_vlc_resolution, this] { Settings::getInstance()->setString("VlcScreenSaverResolution", ss_vlc_resolution->getSelected()); }); -#ifdef _RPI_ +#ifdef _OMX_ ComponentListRow row; // Set subtitle position @@ -103,12 +103,12 @@ GuiVideoScreensaverOptions::~GuiVideoScreensaverOptions() void GuiVideoScreensaverOptions::save() { -#ifdef _RPI_ +#ifdef _OMX_ bool startingStatusNotRisky = (Settings::getInstance()->getString("ScreenSaverGameInfo") == "never" || !Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); #endif GuiScreensaverOptions::save(); -#ifdef _RPI_ +#ifdef _OMX_ bool endStatusRisky = (Settings::getInstance()->getString("ScreenSaverGameInfo") != "never" && Settings::getInstance()->getBool("ScreenSaverOmxPlayer")); if (startingStatusNotRisky && endStatusRisky) { // if before it wasn't risky but now there's a risk of problems, show warning diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 59a450fb5d..30078d51e4 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -6,7 +6,7 @@ #include "CollectionSystemManager.h" #include "Settings.h" #include "SystemData.h" -#ifdef _RPI_ +#ifdef _OMX_ #include "components/VideoPlayerComponent.h" #endif #include "components/VideoVlcComponent.h" @@ -29,7 +29,7 @@ GridGameListView::GridGameListView(Window* window, FileData* root) : const float padding = 0.01f; // Create the correct type of video window -#ifdef _RPI_ +#ifdef _OMX_ if (Settings::getInstance()->getBool("VideoOmxPlayer")) mVideo = new VideoPlayerComponent(window, ""); else diff --git a/es-app/src/views/gamelist/VideoGameListView.cpp b/es-app/src/views/gamelist/VideoGameListView.cpp index 78d94ec512..e26715c774 100644 --- a/es-app/src/views/gamelist/VideoGameListView.cpp +++ b/es-app/src/views/gamelist/VideoGameListView.cpp @@ -1,13 +1,13 @@ #include "views/gamelist/VideoGameListView.h" #include "animations/LambdaAnimation.h" -#ifdef _RPI_ +#ifdef _OMX_ #include "components/VideoPlayerComponent.h" #endif #include "components/VideoVlcComponent.h" #include "utils/FileSystemUtil.h" #include "views/ViewController.h" -#ifdef _RPI_ +#ifdef _OMX_ #include "Settings.h" #endif @@ -30,7 +30,7 @@ VideoGameListView::VideoGameListView(Window* window, FileData* root) : const float padding = 0.01f; // Create the correct type of video window -#ifdef _RPI_ +#ifdef _OMX_ Utils::FileSystem::removeFile(getTitlePath()); if (Settings::getInstance()->getBool("VideoOmxPlayer")) mVideo = new VideoPlayerComponent(window, ""); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 56b46a4fc8..d38bf951f2 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -120,7 +120,7 @@ void Settings::setDefaults() // This setting only applies to raspberry pi but set it for all platforms so // we don't get a warning if we encounter it on a different platform mBoolMap["VideoOmxPlayer"] = false; - #ifdef _RPI_ + #ifdef _OMX_ // we're defaulting to OMX Player for full screen video on the Pi mBoolMap["ScreenSaverOmxPlayer"] = true; // use OMX Player defaults diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index f6beeaa5b8..74a8f5f392 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -1,4 +1,4 @@ -#ifdef _RPI_ +#ifdef _OMX_ #include "components/VideoPlayerComponent.h" #include "renderers/Renderer.h" diff --git a/es-core/src/components/VideoPlayerComponent.h b/es-core/src/components/VideoPlayerComponent.h index a68c337a31..96783ccd66 100644 --- a/es-core/src/components/VideoPlayerComponent.h +++ b/es-core/src/components/VideoPlayerComponent.h @@ -1,4 +1,4 @@ -#ifdef _RPI_ +#ifdef _OMX_ #pragma once #ifndef ES_CORE_COMPONENTS_VIDEO_PLAYER_COMPONENT_H #define ES_CORE_COMPONENTS_VIDEO_PLAYER_COMPONENT_H @@ -38,4 +38,4 @@ class VideoPlayerComponent : public VideoComponent }; #endif // ES_CORE_COMPONENTS_VIDEO_PLAYER_COMPONENT_H -#endif // _RPI_ +#endif // _OMX_ From 0d9cbb6e16ce458104ed0979a29573749d4d2e91 Mon Sep 17 00:00:00 2001 From: Aaron Pfeifer Date: Sun, 24 Apr 2022 21:03:38 -0400 Subject: [PATCH 521/603] Fix VideoPlayerComponent not handling multiple child processes needed to be reaped when Scripting events are being fired --- es-core/src/components/VideoPlayerComponent.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/es-core/src/components/VideoPlayerComponent.cpp b/es-core/src/components/VideoPlayerComponent.cpp index f6beeaa5b8..3a94b0b8c6 100644 --- a/es-core/src/components/VideoPlayerComponent.cpp +++ b/es-core/src/components/VideoPlayerComponent.cpp @@ -237,9 +237,18 @@ void VideoPlayerComponent::startVideo() void catch_child(int sig_num) { - /* when we get here, we know there's a zombie child waiting */ - int child_status; - wait(&child_status); + // When we get here, we know there's at least 1 zombie child waiting. There + // may be others if, for example, a Scripting event was fired at the same time + // that the video was stopped. + while (1) + { + int child_status; + pid_t pid = waitpid(-1, &child_status, WNOHANG); + if (pid <= 0) + { + break; + } + } } void VideoPlayerComponent::stopVideo() From 6bb30ae3bb24cfc7c192896bed0614b3bd53ef24 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Sun, 15 May 2022 07:16:19 +0100 Subject: [PATCH 522/603] scrapers: platform updates Added for scraping: * TI-99 (ScreenScraper, TheGamesDB) * Dragon32/64 (ScreenScraper) --- es-app/src/PlatformId.cpp | 2 ++ es-app/src/PlatformId.h | 2 ++ es-app/src/scrapers/GamesDBJSONScraper.cpp | 1 + es-app/src/scrapers/ScreenScraper.cpp | 2 ++ 4 files changed, 7 insertions(+) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 3ed119eb91..8a616d80e2 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -89,6 +89,8 @@ namespace PlatformIds "vectrex", "trs-80", "coco", + "ti99", + "dragon32", "zmachine", "ignore", // do not allow scraping for this system diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index 8e1d6481fc..840e9223a8 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -90,6 +90,8 @@ namespace PlatformIds VECTREX, TRS80_COLOR_COMPUTER, TANDY, + TI_99, + DRAGON32, ZMACHINE, PLATFORM_IGNORE, // do not allow scraping for this system diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index ac86d052b1..9ca9f200e4 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -107,6 +107,7 @@ const std::map gamesdb_new_platformid_map{ { VIDEOPAC_ODYSSEY2, "4927" }, { VECTREX, "4939" }, { TRS80_COLOR_COMPUTER, "4941" }, + { TI_99, "4953" }, { TANDY, "4941" }, }; diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index 2600304e2c..8cd59eba16 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -98,6 +98,8 @@ const std::map screenscraper_platformid_map{ { VECTREX, 102 }, { TRS80_COLOR_COMPUTER, 144 }, { TANDY, 144 }, + { TI_99, 205 }, + { DRAGON32, 91 }, { ZMACHINE, 21 } }; From df9fa3bcab819b7432ae53bed9ed5079cb810def Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Mon, 30 May 2022 15:38:06 +0300 Subject: [PATCH 523/603] gamelists: remove scraped files when removing game Remove thumbnail, video, image and marquee files for a game when the game file is removed. Check for shared assets when deleting the resources, just in case the scraped files are used in another gamelist, for another game. --- .../src/views/gamelist/BasicGameListView.cpp | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 271538dd7d..4e83adac56 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -115,7 +115,53 @@ void BasicGameListView::launch(FileData* game) void BasicGameListView::remove(FileData *game, bool deleteFile) { if (deleteFile) + { Utils::FileSystem::removeFile(game->getPath()); // actually delete the file on the filesystem + + // we want to delete related/scraped files, but check first if resources are shared with another game + bool keepVideo = game->getVideoPath().empty(); + bool keepMarquee = game->getMarqueePath().empty(); + bool keepThumbnail = game->getThumbnailPath().empty(); + bool keepImage = game->getImagePath().empty(); + + for (auto system : SystemData::sSystemVector) + { + // skip checking if we determined we need to keep the resources + if (keepVideo && keepMarquee && keepImage && keepThumbnail) + break; + + if (!system->isGameSystem() || system->isCollection()) + continue; + + for (auto entry : system->getRootFolder()->getChildren()) { + if (entry == game) // skip the game's own entry + continue; + + if (!keepVideo && (game->getVideoPath() == entry->getVideoPath())) + keepVideo = true; + + if (!keepMarquee && (game->getMarqueePath() == entry->getMarqueePath())) + keepMarquee = true; + + // Thumbnail/Image can be used inter-changeably, so check for both in game's resources + if (!keepThumbnail && (game->getThumbnailPath() == entry->getThumbnailPath() || game->getThumbnailPath() == entry->getImagePath())) + keepThumbnail = true; + + if (!keepImage && (game->getImagePath() == entry->getImagePath() || game->getImagePath() == entry->getThumbnailPath())) + keepImage = true; + } + } + + // delete the resources that are not shared + if (!keepVideo) + Utils::FileSystem::removeFile(game->getVideoPath()); + if (!keepImage) + Utils::FileSystem::removeFile(game->getImagePath()); + if (!keepThumbnail) + Utils::FileSystem::removeFile(game->getThumbnailPath()); + if (!keepMarquee) + Utils::FileSystem::removeFile(game->getMarqueePath()); + } FileData* parent = game->getParent(); if (getCursor() == game) // Select next element in list, or prev if none { From 1b239144a187759259951aed4260bc6d183c5793 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 12 Jun 2022 12:20:22 +0200 Subject: [PATCH 524/603] renderer: Add build option for OpenGL 2.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add option USE_GL21 which can be activated with „-DUSE_GL21=On“. Use OpenGL 1.4 by default for backward compatibility. --- CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c5836e1b9b..83c3b952be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,9 @@ option(PROFILING "Set to ON to enable profiling" ${PROFILING}) option(USE_MESA_GLES "Set to ON to select the MESA OpenGL ES driver" ${USE_MESA_GLES}) option(USE_GLES1 "Set to ON to force usage of the OpenGLES v1 renderer" ${USE_GLES1}) +# GL implementation overrides +option(USE_GL21 "Set to ON to force usage of the OpenGL v2.1 renderer" ${USE_GL21}) + # OpenGL library preference (https://cmake.org/cmake/help/git-stage/policy/CMP0072.html) # Set it to OLD to appease older proprietary drivers without libglvnd support if(POLICY CMP0072) @@ -73,7 +76,11 @@ set_property(CACHE GLSystem PROPERTY STRINGS "Desktop OpenGL" "Embedded OpenGL") if(${GLSystem} MATCHES "Desktop OpenGL") find_package(OpenGL REQUIRED) - add_definitions(-DUSE_OPENGL_14) + if(NOT USE_GL21) + add_definitions(-DUSE_OPENGL_14) + else() + add_definitions(-DUSE_OPENGL_21) + endif() else() if(NOT USE_GLES1) find_package(OpenGLES2 QUIET REQUIRED) From 48ef2257966b75509e4e132ce6ee9e30f31e046f Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Mon, 8 Aug 2022 18:07:46 +0100 Subject: [PATCH 525/603] ViewController: improve bulk removal of entries Added an extra parameter for the `remove` call, hinting that a refresh of the View is not desired. This skips any `onFileChanged` event called at the end of `remove`, leaving it to the caller to explicitely call the `onFileChanged` method. The skip decreases the time spent in `remove`. The sole usage - right now - is during the initial built-in collections creation, when the `recent` collection trimming can take a long time when it has >>50 entries. --- es-app/src/CollectionSystemManager.cpp | 9 +++++---- es-app/src/guis/GuiGamelistOptions.cpp | 2 +- es-app/src/views/gamelist/BasicGameListView.cpp | 5 +++-- es-app/src/views/gamelist/BasicGameListView.h | 2 +- es-app/src/views/gamelist/GridGameListView.cpp | 6 ++++-- es-app/src/views/gamelist/GridGameListView.h | 2 +- es-app/src/views/gamelist/IGameListView.h | 2 +- 7 files changed, 16 insertions(+), 12 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 372c64bf41..458f0e400a 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -260,7 +260,7 @@ void CollectionSystemManager::updateCollectionSystem(FileData* file, CollectionS // found and we are removing if (name == "favorites" && file->metadata.get("favorite") == "false") { // need to check if still marked as favorite, if not remove - ViewController::get()->getGameListView(curSys).get()->remove(collectionEntry, false); + ViewController::get()->getGameListView(curSys).get()->remove(collectionEntry, false, true); } else { @@ -298,8 +298,9 @@ void CollectionSystemManager::trimCollectionCount(FileData* rootFolder, int limi while ((int)rootFolder->getChildrenListToDisplay().size() > limit) { CollectionFileData* gameToRemove = (CollectionFileData*)rootFolder->getChildrenListToDisplay().back(); - ViewController::get()->getGameListView(curSys).get()->remove(gameToRemove, false); + ViewController::get()->getGameListView(curSys).get()->remove(gameToRemove, false, false); } + ViewController::get()->onFileChanged(rootFolder, FILE_REMOVED); } // deletes all collection files from collection systems related to the source file @@ -323,7 +324,7 @@ void CollectionSystemManager::deleteCollectionFiles(FileData* file) sysDataIt->second.needsSave = true; FileData* collectionEntry = children.at(key); SystemData* systemViewToUpdate = getSystemToView(sysDataIt->second.system); - ViewController::get()->getGameListView(systemViewToUpdate).get()->remove(collectionEntry, false); + ViewController::get()->getGameListView(systemViewToUpdate).get()->remove(collectionEntry, false, true); } } } @@ -495,7 +496,7 @@ bool CollectionSystemManager::toggleGameInCollection(FileData* file, int pressco { systemViewToUpdate->getIndex()->removeFromIndex(collectionEntry); } - ViewController::get()->getGameListView(systemViewToUpdate).get()->remove(collectionEntry, false); + ViewController::get()->getGameListView(systemViewToUpdate).get()->remove(collectionEntry, false, true); } else { diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index 60cddcf6ed..d7127731ee 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -194,7 +194,7 @@ void GuiGamelistOptions::openMetaDataEd() { deleteBtnFunc = [this, file] { CollectionSystemManager::get()->deleteCollectionFiles(file); - ViewController::get()->getGameListView(file->getSystem()).get()->remove(file, true); + ViewController::get()->getGameListView(file->getSystem()).get()->remove(file, true, true); }; } diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index 4e83adac56..e453b86dad 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -112,7 +112,7 @@ void BasicGameListView::launch(FileData* game) ViewController::get()->launch(game); } -void BasicGameListView::remove(FileData *game, bool deleteFile) +void BasicGameListView::remove(FileData *game, bool deleteFile, bool refreshView) { if (deleteFile) { @@ -184,7 +184,8 @@ void BasicGameListView::remove(FileData *game, bool deleteFile) addPlaceholder(); } delete game; // remove before repopulating (removes from parent) - onFileChanged(parent, FILE_REMOVED); // update the view, with game removed + if(refreshView) + onFileChanged(parent, FILE_REMOVED); // update the view, with game removed } std::vector BasicGameListView::getHelpPrompts() diff --git a/es-app/src/views/gamelist/BasicGameListView.h b/es-app/src/views/gamelist/BasicGameListView.h index 305e6feeb3..c2387d83db 100644 --- a/es-app/src/views/gamelist/BasicGameListView.h +++ b/es-app/src/views/gamelist/BasicGameListView.h @@ -29,7 +29,7 @@ class BasicGameListView : public ISimpleGameListView virtual std::string getQuickSystemSelectRightButton() override; virtual std::string getQuickSystemSelectLeftButton() override; virtual void populateList(const std::vector& files) override; - virtual void remove(FileData* game, bool deleteFile) override; + virtual void remove(FileData* game, bool deleteFile, bool refreshView=true) override; virtual void addPlaceholder(); TextListComponent mList; diff --git a/es-app/src/views/gamelist/GridGameListView.cpp b/es-app/src/views/gamelist/GridGameListView.cpp index 30078d51e4..f44cdf1a5e 100644 --- a/es-app/src/views/gamelist/GridGameListView.cpp +++ b/es-app/src/views/gamelist/GridGameListView.cpp @@ -411,7 +411,7 @@ void GridGameListView::launch(FileData* game) } -void GridGameListView::remove(FileData *game, bool deleteFile) +void GridGameListView::remove(FileData *game, bool deleteFile, bool refreshView) { if (deleteFile) Utils::FileSystem::removeFile(game->getPath()); // actually delete the file on the filesystem @@ -437,7 +437,9 @@ void GridGameListView::remove(FileData *game, bool deleteFile) addPlaceholder(); } delete game; // remove before repopulating (removes from parent) - onFileChanged(parent, FILE_REMOVED); // update the view, with game removed + + if(refreshView) + onFileChanged(parent, FILE_REMOVED); // update the view, with game removed } std::vector GridGameListView::getMDLabels() diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index 4012ab4a64..e0f55e78d4 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -36,7 +36,7 @@ class GridGameListView : public ISimpleGameListView virtual std::string getQuickSystemSelectRightButton() override; virtual std::string getQuickSystemSelectLeftButton() override; virtual void populateList(const std::vector& files) override; - virtual void remove(FileData* game, bool deleteFile) override; + virtual void remove(FileData* game, bool deleteFile, bool refreshView=true) override; virtual void addPlaceholder(); ImageGridComponent mGrid; diff --git a/es-app/src/views/gamelist/IGameListView.h b/es-app/src/views/gamelist/IGameListView.h index da6299d274..f4c1eed42b 100644 --- a/es-app/src/views/gamelist/IGameListView.h +++ b/es-app/src/views/gamelist/IGameListView.h @@ -33,7 +33,7 @@ class IGameListView : public GuiComponent virtual void setCursor(FileData*) = 0; virtual bool input(InputConfig* config, Input input) override; - virtual void remove(FileData* game, bool deleteFile) = 0; + virtual void remove(FileData* game, bool deleteFile, bool refreshView=true) = 0; virtual const char* getName() const = 0; virtual void launch(FileData* game) = 0; From 3feff1c4dd0fd04e182461d374d017d6bb11afe1 Mon Sep 17 00:00:00 2001 From: Richard Eklycke Date: Sat, 20 Aug 2022 15:47:48 +0200 Subject: [PATCH 526/603] FileSystemUtil: Update path cache when creating new directory With this fix in place, emulationstation will start up correctly when there is no ~/.emulationstation directory present. --- es-core/src/utils/FileSystemUtil.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 1ab9f43fa3..94be3a58bd 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -628,7 +628,10 @@ namespace Utils // try to create directory if(mkdir(path.c_str(), 0755) == 0) + { + pathExistsIndex[_path] = true; return true; + } // failed to create directory, try to create the parent const std::string parent = getParent(path); @@ -638,7 +641,11 @@ namespace Utils createDirectory(parent); // try to create directory again now that the parent should exist - return (mkdir(path.c_str(), 0755) == 0); + bool created = (mkdir(path.c_str(), 0755) == 0); + if(created) + pathExistsIndex[_path] = true; + + return created; } // createDirectory From dc96e7c29e89d09fb34917f131bf778a26e3b973 Mon Sep 17 00:00:00 2001 From: Richard Eklycke Date: Sat, 20 Aug 2022 16:25:59 +0200 Subject: [PATCH 527/603] CollectionSystemManager: Fix possible crash in destructor This could happen if no mCustomCollectionsBundle was initialized. --- es-app/src/CollectionSystemManager.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 372c64bf41..dfaecc0013 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -813,16 +813,19 @@ void CollectionSystemManager::removeCollectionsFromDisplayedSystems() // remove all custom collections in bundle // this should not delete the objects from memory! - FileData* customRoot = mCustomCollectionsBundle->getRootFolder(); - std::vector mChildren = customRoot->getChildren(); - for(auto it = mChildren.cbegin(); it != mChildren.cend(); it++) + if (mCustomCollectionsBundle) { - customRoot->removeChild(*it); + FileData* customRoot = mCustomCollectionsBundle->getRootFolder(); + std::vector mChildren = customRoot->getChildren(); + for(auto it = mChildren.cbegin(); it != mChildren.cend(); it++) + { + customRoot->removeChild(*it); + } + // clear index + mCustomCollectionsBundle->getIndex()->resetIndex(); + // remove view so it's re-created as needed + ViewController::get()->removeGameListView(mCustomCollectionsBundle); } - // clear index - mCustomCollectionsBundle->getIndex()->resetIndex(); - // remove view so it's re-created as needed - ViewController::get()->removeGameListView(mCustomCollectionsBundle); } void CollectionSystemManager::addEnabledCollectionsToDisplayedSystems(std::map* colSystemData) From 5ba5498a62382f8955b7b6ce3070f60f59714e0a Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Sat, 20 Aug 2022 17:04:51 +0100 Subject: [PATCH 528/603] timeutil: fix building with recent `gcc` versions. Included `time.h` to get the declarations of `time_t` and `struct tm`. Should fix building with `gcc` 12.x. --- es-core/src/utils/TimeUtil.h | 1 + 1 file changed, 1 insertion(+) diff --git a/es-core/src/utils/TimeUtil.h b/es-core/src/utils/TimeUtil.h index 9b44207b35..c326a45119 100644 --- a/es-core/src/utils/TimeUtil.h +++ b/es-core/src/utils/TimeUtil.h @@ -3,6 +3,7 @@ #define ES_CORE_UTILS_TIME_UTIL_H #include +#include namespace Utils { From 4ba672b7cd12d61f67ec620e9112d85cfe353ac8 Mon Sep 17 00:00:00 2001 From: Gemba Date: Mon, 22 Aug 2022 19:08:57 +0200 Subject: [PATCH 529/603] Fixes ES crash after boot on stale SDL joy add/remove events. This happens whenever a joystick is remved during ES splashscreen. Putting the PR here after initial discussion in forum: https://retropie.org.uk/forum/topic/33014/failed-assertion-on-connected-joysticks-terminates-emulationstation-on-specific-conditions --- es-app/src/FileData.cpp | 3 +++ es-app/src/main.cpp | 14 ++++---------- es-core/src/InputManager.cpp | 17 +++++++---------- es-core/src/Window.cpp | 4 ---- 4 files changed, 14 insertions(+), 24 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 5d8d5fa0e0..37f63e03c9 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -7,6 +7,7 @@ #include "CollectionSystemManager.h" #include "FileFilterIndex.h" #include "FileSorts.h" +#include "InputManager.h" #include "Log.h" #include "MameNames.h" #include "platform.h" @@ -272,6 +273,7 @@ void FileData::launchGame(Window* window) AudioManager::getInstance()->deinit(); VolumeControl::getInstance()->deinit(); + InputManager::getInstance()->deinit(); window->deinit(); std::string command = mEnvData->mLaunchCommand; @@ -298,6 +300,7 @@ void FileData::launchGame(Window* window) Scripting::fireEvent("game-end"); window->init(); + InputManager::getInstance()->init(); VolumeControl::getInstance()->init(); window->normalizeNextUpdate(); diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index cf1c47463d..dd3df6a09f 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -393,6 +393,8 @@ int main(int argc, char* argv[]) if(splashScreen) window.renderLoadingScreen("Done."); + InputManager::getInstance()->init(); + //choose which GUI to open depending on if an input configuration already exists if(errorMsg == NULL) { @@ -404,16 +406,6 @@ int main(int argc, char* argv[]) } } - // flush any queued events before showing the UI and starting the input handling loop - const Uint32 event_list[] = { - SDL_JOYAXISMOTION, SDL_JOYBALLMOTION, SDL_JOYHATMOTION, SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP, - SDL_KEYDOWN, SDL_KEYUP - }; - SDL_PumpEvents(); - for(Uint32 ev_type: event_list) { - SDL_FlushEvent(ev_type); - } - int lastTime = SDL_GetTicks(); int ps_time = SDL_GetTicks(); @@ -473,6 +465,8 @@ int main(int argc, char* argv[]) while(window.peekGui() != ViewController::get()) delete window.peekGui(); + + InputManager::getInstance()->deinit(); window.deinit(); MameNames::deinit(); diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 4ef5c4ac04..53e38f3373 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -84,7 +84,8 @@ void InputManager::init() void InputManager::addJoystickByDeviceIndex(int id) { - assert(id >= 0 && id < SDL_NumJoysticks()); + assert(id > -1); + assert(id < SDL_NumJoysticks()); // open joystick & add to our list SDL_Joystick* joy = SDL_JoystickOpen(id); @@ -101,9 +102,9 @@ void InputManager::addJoystickByDeviceIndex(int id) mInputConfigs[joyId] = new InputConfig(joyId, SDL_JoystickName(joy), guid); if(!loadInputConfig(mInputConfigs[joyId])) { - LOG(LogInfo) << "Added unconfigured joystick " << SDL_JoystickName(joy) << " (GUID: " << guid << ", instance ID: " << joyId << ", device index: " << id << ")."; + LOG(LogInfo) << "Added unconfigured joystick '" << SDL_JoystickName(joy) << "' (GUID: " << guid << ", instance ID: " << joyId << ", device index: " << id << ")."; }else{ - LOG(LogInfo) << "Added known joystick " << SDL_JoystickName(joy) << " (instance ID: " << joyId << ", device index: " << id << ")"; + LOG(LogInfo) << "Added known joystick '" << SDL_JoystickName(joy) << "' (instance ID: " << joyId << ", device index: " << id << ")"; } // set up the prevAxisValues @@ -128,13 +129,9 @@ void InputManager::removeJoystickByJoystickID(SDL_JoystickID joyId) // close the joystick auto joyIt = mJoysticks.find(joyId); - if(joyIt != mJoysticks.cend()) - { - SDL_JoystickClose(joyIt->second); - mJoysticks.erase(joyIt); - }else{ - LOG(LogError) << "Could not find joystick to close (instance ID: " << joyId << ")"; - } + LOG(LogInfo) << "Removed joystick '" << SDL_JoystickName(joyIt->second) << "' (instance ID: " << joyId << ")"; + SDL_JoystickClose(joyIt->second); + mJoysticks.erase(joyIt); } void InputManager::deinit() diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 19acb32f4e..989783d4ab 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -4,7 +4,6 @@ #include "components/ImageComponent.h" #include "resources/Font.h" #include "resources/TextureResource.h" -#include "InputManager.h" #include "Log.h" #include "Scripting.h" #include @@ -78,8 +77,6 @@ bool Window::init() return false; } - InputManager::getInstance()->init(); - ResourceManager::getInstance()->reloadAll(); //keep a reference to the default fonts, so they don't keep getting destroyed/recreated @@ -107,7 +104,6 @@ void Window::deinit() { (*i)->onHide(); } - InputManager::getInstance()->deinit(); ResourceManager::getInstance()->unloadAll(); Renderer::deinit(); } From 0c4b42deac8b3197cb177034267a115d369c5026 Mon Sep 17 00:00:00 2001 From: Jools Wills Date: Sun, 18 Sep 2022 18:01:54 +0100 Subject: [PATCH 530/603] bump version to v2.12.0-dev --- es-app/src/EmulationStation.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 24e83971ca..710c6c2560 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -5,13 +5,13 @@ // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. #define PROGRAM_VERSION_MAJOR 2 -#define PROGRAM_VERSION_MINOR 11 +#define PROGRAM_VERSION_MINOR 12 #define PROGRAM_VERSION_MAINTENANCE 0 -#define PROGRAM_VERSION_STRING "2.11.0rp-dev" +#define PROGRAM_VERSION_STRING "2.12.0rp-dev" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,11,0\0" +#define RESOURCE_VERSION_STRING "2,12,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR,PROGRAM_VERSION_MINOR,PROGRAM_VERSION_MAINTENANCE #endif // ES_APP_EMULATION_STATION_H From 5a6ff039c7fde620792fa9ff229703937d28c2fe Mon Sep 17 00:00:00 2001 From: Richard Eklycke Date: Sun, 4 Dec 2022 23:29:44 +0100 Subject: [PATCH 531/603] TextureData: Fix memory leak of svgImage --- es-core/src/resources/TextureData.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index 31b948ed67..33382b6d8d 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -49,6 +49,7 @@ bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length if (!svgImage || (svgImage->width == 0) || (svgImage->height == 0)) { LOG(LogError) << "Error parsing SVG image."; + nsvgDelete(svgImage); return false; } @@ -68,6 +69,7 @@ bool TextureData::initSVGFromMemory(const unsigned char* fileData, size_t length float scale = Math::min(mHeight / svgImage->height, mWidth / svgImage->width); nsvgRasterize(rast, svgImage, 0, 0, scale, dataRGBA, (int)mWidth, (int)mHeight, (int)mWidth * 4); nsvgDeleteRasterizer(rast); + nsvgDelete(svgImage); ImageIO::flipPixelsVert(dataRGBA, mWidth, mHeight); From 5bc3fba06392607a89856e6992424b833f3faefb Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Thu, 15 Dec 2022 06:27:20 +0000 Subject: [PATCH 532/603] input: remove useless XML node in the temporary output The `` node is useless for the temporary input configuration, so remove it. Normally, because of the previous `reset` call of the parent document, it would be empty, but I've encountered situations when the memory is not cleared and there's (random binary) garbage added to the temporary configuration file. This results in a broken XML file and the auto-configuration scripts in RetroPie will all fail. --- es-core/src/InputManager.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 4ef5c4ac04..0685029738 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -369,7 +369,6 @@ void InputManager::writeDeviceConfig(InputConfig* config) path = getTemporaryConfigPath(); doc.reset(); root = doc.append_child("inputList"); - root.append_copy(actionnode); } else { From 9473f19c70ab3e53b96607fbe385767b9d218b0c Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Thu, 23 Jun 2022 04:43:35 +0100 Subject: [PATCH 533/603] input: export additional info for joysticks inputs Added some extra info to help RetroPie's auto-configuration scripts by exporting the joystick Vendor and Product IDs, which should help with RetroArch's joypad profile generation. Since 2.0.14, SDL's joystick name (`SDL_CreateJoystickName`) is a normalized version of the name reported by the OS (culled consecutive spaces, trimming trailing spaces, renaming known joystick names like Xbox/PS). This breaks the input auto-configuration scripts in RetroPie, which generate a config with new name, while the emulators/ports expect to find the OS reported name (e.g. RetroArch - see #3398 [1] for an example). This issue is affecting especially PC users, which are not using RetroPie's (old) SDL version and who's RetroArch configuration is incomplete. Using the Vendor/Product ID would help these situations and support the new SDL versions when added to RetroPie. [1] https://github.com/RetroPie/RetroPie-Setup/issues/3398 --- es-core/src/InputConfig.cpp | 27 ++++++++++++--------------- es-core/src/InputConfig.h | 10 +++++++++- es-core/src/InputManager.cpp | 5 +++++ 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index eb5e59cecd..3a85ebbe08 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -1,6 +1,7 @@ #include "InputConfig.h" #include "Log.h" +#include "utils/StringUtil.h" #include //some util functions @@ -39,19 +40,10 @@ InputType stringToInputType(const std::string& type) } -std::string toLower(std::string str) -{ - for(unsigned int i = 0; i < str.length(); i++) - { - str[i] = (char)tolower(str[i]); - } - - return str; -} -//end util functions - InputConfig::InputConfig(int deviceId, const std::string& deviceName, const std::string& deviceGUID) : mDeviceId(deviceId), mDeviceName(deviceName), mDeviceGUID(deviceGUID) { + mVendorId = 0; + mProductId = 0; } void InputConfig::clear() @@ -66,19 +58,19 @@ bool InputConfig::isConfigured() void InputConfig::mapInput(const std::string& name, Input input) { - mNameMap[toLower(name)] = input; + mNameMap[Utils::String::toLower(name)] = input; } void InputConfig::unmapInput(const std::string& name) { - auto it = mNameMap.find(toLower(name)); + auto it = mNameMap.find(Utils::String::toLower(name)); if(it != mNameMap.cend()) mNameMap.erase(it); } bool InputConfig::getInputByName(const std::string& name, Input* result) { - auto it = mNameMap.find(toLower(name)); + auto it = mNameMap.find(Utils::String::toLower(name)); if(it != mNameMap.cend()) { *result = it->second; @@ -188,7 +180,7 @@ void InputConfig::loadFromXML(pugi::xml_node& node) if(value == 0) LOG(LogWarning) << "WARNING: InputConfig value is 0 for " << type << " " << id << "!\n"; - mNameMap[toLower(name)] = Input(mDeviceId, typeEnum, id, value, true); + mNameMap[Utils::String::toLower(name)] = Input(mDeviceId, typeEnum, id, value, true); } } @@ -210,6 +202,11 @@ void InputConfig::writeToXML(pugi::xml_node& parent) { cfg.append_attribute("type") = "joystick"; cfg.append_attribute("deviceName") = mDeviceName.c_str(); + if(mVendorId && mProductId) + { + cfg.append_attribute("vendorId") = mVendorId; + cfg.append_attribute("productId") = mProductId; + } } cfg.append_attribute("deviceGUID") = mDeviceGUID.c_str(); diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index 4969d8ff02..a038e270fc 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -102,9 +102,14 @@ class InputConfig void mapInput(const std::string& name, Input input); void unmapInput(const std::string& name); // unmap all Inputs mapped to this name - inline int getDeviceId() const { return mDeviceId; }; + inline int getDeviceId() const { return mDeviceId; } inline const std::string& getDeviceName() { return mDeviceName; } inline const std::string& getDeviceGUIDString() { return mDeviceGUID; } + inline const unsigned short getVendorId() { return mVendorId; } + inline const unsigned short getProductId() { return mProductId; } + + inline void setVendorId(unsigned short vendorID) { mVendorId = vendorID; } + inline void setProductId(unsigned short productID) { mProductId = productID; } //Returns true if Input is mapped to this name, false otherwise. bool isMappedTo(const std::string& name, Input input); @@ -127,6 +132,9 @@ class InputConfig const int mDeviceId; const std::string mDeviceName; const std::string mDeviceGUID; + + unsigned short mVendorId; + unsigned short mProductId; }; #endif // ES_CORE_INPUT_CONFIG_H diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 4ef5c4ac04..6a1b0ea2c7 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -99,6 +99,11 @@ void InputManager::addJoystickByDeviceIndex(int id) // create the InputConfig mInputConfigs[joyId] = new InputConfig(joyId, SDL_JoystickName(joy), guid); + + // add Vendor and Product IDs + mInputConfigs[joyId]->setVendorId(SDL_JoystickGetVendor(joy)); + mInputConfigs[joyId]->setProductId(SDL_JoystickGetProduct(joy)); + if(!loadInputConfig(mInputConfigs[joyId])) { LOG(LogInfo) << "Added unconfigured joystick " << SDL_JoystickName(joy) << " (GUID: " << guid << ", instance ID: " << joyId << ", device index: " << id << ")."; From 33fdbb2326975104dfda7672ae646c839e77a500 Mon Sep 17 00:00:00 2001 From: Gemba Date: Fri, 26 Aug 2022 18:25:31 +0200 Subject: [PATCH 534/603] Fixes several cursor misplacements when full page scroll with LB/LR on. Including fix for cursor highlighting in visible list area when game is launched from screensaver. Squashed into one commit. --- es-app/src/components/TextListComponent.h | 150 ++++++++---------- es-app/src/views/ViewController.cpp | 22 ++- .../src/views/gamelist/BasicGameListView.cpp | 11 ++ es-app/src/views/gamelist/BasicGameListView.h | 2 + es-app/src/views/gamelist/GridGameListView.h | 2 + es-app/src/views/gamelist/IGameListView.h | 2 + .../src/views/gamelist/ISimpleGameListView.h | 2 + es-core/src/components/IList.h | 12 ++ 8 files changed, 112 insertions(+), 91 deletions(-) diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index aac751624d..961e6abc4b 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -30,6 +30,7 @@ class TextListComponent : public IList using IList::getTransform; using IList::mSize; using IList::mCursor; + using IList::mViewportTop; using IList::Entry; public: @@ -92,7 +93,7 @@ class TextListComponent : public IList Alignment mAlignment; float mHorizontalMargin; - int getFirstVisibleEntry(); + int viewportTop(); std::function mCursorChangedCallback; std::shared_ptr mFont; @@ -107,10 +108,8 @@ class TextListComponent : public IList std::string mScrollSound; static const unsigned int COLOR_ID_COUNT = 2; unsigned int mColors[COLOR_ID_COUNT]; - unsigned int mScreenCount; - int mStartEntry = 0; - unsigned int mCursorPrev = -1; - bool mOneEntryUpDn = true; + int mViewportHeight; + int mCursorPrev = -1; ImageComponent mSelectorImage; }; @@ -151,32 +150,33 @@ void TextListComponent::render(const Transform4x4f& parentTrans) const float entrySize = Math::max(font->getHeight(1.0), (float)font->getSize()) * mLineSpacing; - // number of entries that can fit on the screen simultaniously - mScreenCount = (int)(mSize.y() / entrySize); + // number of listentries that can fit on the screen + mViewportHeight = (int)(mSize.y() / entrySize); + if(mViewportTop == -1) + { + // returning from screen saver activated game launch + mViewportTop = mCursor - mViewportHeight/2; + } if(mCursor != mCursorPrev) { - mStartEntry = (size() > mScreenCount) ? getFirstVisibleEntry() : 0; + mViewportTop = (size() > mViewportHeight) ? viewportTop() : 0; mCursorPrev = mCursor; } - unsigned int listCutoff = mStartEntry + mScreenCount; + unsigned int listCutoff = mViewportTop + mViewportHeight; if(listCutoff > size()) listCutoff = size(); - float y = (mSize.y() - (mScreenCount * entrySize)) * 0.5f; + float y = (mSize.y() - (mViewportHeight * entrySize)) * 0.5f; - // draw selector bar - if(mStartEntry < listCutoff) - { - if (mSelectorImage.hasImage()) { - mSelectorImage.setPosition(0.f, y + (mCursor - mStartEntry)*entrySize + mSelectorOffsetY, 0.f); - mSelectorImage.render(trans); - } else { - Renderer::setMatrix(trans); - Renderer::drawRect(0.0f, y + (mCursor - mStartEntry)*entrySize + mSelectorOffsetY, mSize.x(), - mSelectorHeight, mSelectorColor, mSelectorColorEnd, mSelectorColorGradientHorizontal); - } + if (mSelectorImage.hasImage()) { + mSelectorImage.setPosition(0.f, y + (mCursor - mViewportTop)*entrySize + mSelectorOffsetY, 0.f); + mSelectorImage.render(trans); + } else { + Renderer::setMatrix(trans); + Renderer::drawRect(0.0f, y + (mCursor - mViewportTop)*entrySize + mSelectorOffsetY, mSize.x(), + mSelectorHeight, mSelectorColor, mSelectorColorEnd, mSelectorColorGradientHorizontal); } // clip to inside margins @@ -185,7 +185,7 @@ void TextListComponent::render(const Transform4x4f& parentTrans) Renderer::pushClipRect(Vector2i((int)(trans.translation().x() + mHorizontalMargin), (int)trans.translation().y()), Vector2i((int)(dim.x() - mHorizontalMargin*2), (int)dim.y())); - for(int i = mStartEntry; i < listCutoff; i++) + for(int i = mViewportTop; i < listCutoff; i++) { typename IList::Entry& entry = mEntries.at((unsigned int)i); @@ -254,91 +254,65 @@ void TextListComponent::render(const Transform4x4f& parentTrans) template -int TextListComponent::getFirstVisibleEntry() +int TextListComponent::viewportTop() { + int viewportTopMax = size() - mViewportHeight; + int topNew = mViewportTop; + if (mCursorPrev == -1) - { - // init or returned from emulator mCursorPrev = mCursor; - int quot = div(mCursor, mScreenCount).quot; - mStartEntry = quot * mScreenCount; - } - int screenRelCursor = mCursorPrev - mStartEntry; - bool cursorCentered = screenRelCursor == mScreenCount/2; - int visibleEntryMax = size() - mScreenCount; - int firstVisibleEntry = 0; - if(Settings::getInstance()->getBool("UseFullscreenPaging") && !cursorCentered) + int delta = mCursor - mCursorPrev; + + if(Settings::getInstance()->getBool("UseFullscreenPaging")) { - // keep visible cursor constant but move visible list (default) - firstVisibleEntry = mCursor - screenRelCursor; - if(mOneEntryUpDn) + // delta may be greater/less than +/-mViewportHeight on re-sorting of list + if (delta <= -mViewportHeight || delta >= mViewportHeight + // keep cursor sticky at position unless the user navigates + // to the middle of the viewport + || delta < 0 && mCursor - mViewportTop < mViewportHeight/2 + || delta > 0 && mCursor - mViewportTop > mViewportHeight/2) { - int delta = mCursor - mCursorPrev; - // detect rollover (== delta is more than one item) - if(delta < -3) - firstVisibleEntry = 0; - else if(delta > 3) - firstVisibleEntry = visibleEntryMax; - else if(screenRelCursor < mScreenCount/2 && delta > 0 /*down pressed*/ - || screenRelCursor > mScreenCount/2 && delta < 0 /*up pressed*/) - // cases for list begin / list end - // move visible cursor and keep visible list section constant - firstVisibleEntry = firstVisibleEntry - delta; + topNew += delta; } - } else { - // cursor always in middle of visible list - firstVisibleEntry = mCursor - mScreenCount/2; + // no match above will place the cursor more towards the middle } - // bounds check - if(firstVisibleEntry < 0) - firstVisibleEntry = 0; - else if(firstVisibleEntry > visibleEntryMax) - firstVisibleEntry = visibleEntryMax; - return firstVisibleEntry; + else + // put cursor in middle of visible list + topNew = mCursor - mViewportHeight/2; + + if (mCursor <= mViewportHeight/2) + topNew = 0; + else if (mCursor >= viewportTopMax + mViewportHeight/2) + topNew = viewportTopMax; + + return topNew; } template bool TextListComponent::input(InputConfig* config, Input input) { - if(size() > 0) + bool isSingleStep = config->isMappedLike("down", input) || config->isMappedLike("up", input); + bool isPageStep = config->isMappedLike("rightshoulder", input) || config->isMappedLike("leftshoulder", input); + + if(size() > 0 && (isSingleStep || isPageStep)) { if(input.value != 0) { - if(config->isMappedLike("down", input)) - { - listInput(1); - mOneEntryUpDn = true; - return true; - } - - if(config->isMappedLike("up", input)) - { - listInput(-1); - mOneEntryUpDn = true; - return true; - } - if(config->isMappedLike("rightshoulder", input)) - { - int delta = Settings::getInstance()->getBool("UseFullscreenPaging") ? mScreenCount : 10; - listInput(delta); - mOneEntryUpDn = false; - return true; - } - - if(config->isMappedLike("leftshoulder", input)) + int delta; + mCursorPrev = mCursor; + if(isSingleStep) + delta = config->isMappedLike("down", input) ? 1 : -1; + else { - int delta = Settings::getInstance()->getBool("UseFullscreenPaging") ? mScreenCount : 10; - listInput(-delta); - mOneEntryUpDn = false; - return true; + delta = Settings::getInstance()->getBool("UseFullscreenPaging") ? mViewportHeight : 10; + if (config->isMappedLike("leftshoulder", input)) + delta = -delta; } + listInput(delta); + return true; }else{ - if(config->isMappedLike("down", input) || config->isMappedLike("up", input) || - config->isMappedLike("rightshoulder", input) || config->isMappedLike("leftshoulder", input)) - { - stopScrolling(); - } + stopScrolling(); } } diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 465490b1f7..fe697a674e 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -247,8 +247,10 @@ void ViewController::launch(FileData* game, Vector3f center) game->launchGame(mWindow); setAnimation(new LambdaAnimation(fadeFunc, 800), 0, [this] { mLockInput = false; }, true); this->onFileChanged(game, FILE_METADATA_CHANGED); - if (mCurrentView) + if (mCurrentView) { + this->getGameListView(game->getSystem())->setViewportTop(-1); mCurrentView->onShow(); + } }); } else if (transition_style == "slide"){ // move camera to zoom in on center + fade out, launch game, come back in @@ -258,8 +260,10 @@ void ViewController::launch(FileData* game, Vector3f center) mCamera = origCamera; setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 600), 0, [this] { mLockInput = false; }, true); this->onFileChanged(game, FILE_METADATA_CHANGED); - if (mCurrentView) + if (mCurrentView) { + this->getGameListView(game->getSystem())->setViewportTop(-1); mCurrentView->onShow(); + } }); } else { // instant setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 10), 0, [this, origCamera, center, game] @@ -268,8 +272,10 @@ void ViewController::launch(FileData* game, Vector3f center) mCamera = origCamera; setAnimation(new LaunchAnimation(mCamera, mFadeOpacity, center, 10), 0, [this] { mLockInput = false; }, true); this->onFileChanged(game, FILE_METADATA_CHANGED); - if (mCurrentView) + if (mCurrentView) { + this->getGameListView(game->getSystem())->setViewportTop(-1); mCurrentView->onShow(); + } }); } } @@ -477,6 +483,7 @@ void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) bool isCurrent = (mCurrentView == it->second); SystemData* system = it->first; FileData* cursor = view->getCursor(); + int viewportTop = view->getViewportTop(); mGameListViews.erase(it); if(reloadTheme) @@ -487,6 +494,7 @@ void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) // to counter having come from a placeholder if (!cursor->isPlaceHolder()) { newView->setCursor(cursor); + newView->setViewportTop(viewportTop); } if(isCurrent) mCurrentView = newView; @@ -504,9 +512,11 @@ void ViewController::reloadAll() { // clear all gamelistviews std::map cursorMap; + std::map viewportTopMap; for(auto it = mGameListViews.cbegin(); it != mGameListViews.cend(); it++) { cursorMap[it->first] = it->second->getCursor(); + viewportTopMap[it->first] = it->second->getViewportTop(); } mGameListViews.clear(); @@ -519,6 +529,12 @@ void ViewController::reloadAll() getGameListView(it->first)->setCursor(it->second); } + // restore index of first list item on display + for(auto it = viewportTopMap.cbegin(); it != viewportTopMap.cend(); it++) + { + getGameListView(it->first)->setViewportTop(it->second); + } + // Rebuild SystemListView mSystemListView.reset(); getSystemListView(); diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index e453b86dad..40bac82d86 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -90,6 +90,17 @@ void BasicGameListView::setCursor(FileData* cursor) } } +void BasicGameListView::setViewportTop(int index) +{ + mList.setViewportTop(index); +} + + +int BasicGameListView::getViewportTop() +{ + return mList.getViewportTop(); +} + void BasicGameListView::addPlaceholder() { // empty list - add a placeholder diff --git a/es-app/src/views/gamelist/BasicGameListView.h b/es-app/src/views/gamelist/BasicGameListView.h index c2387d83db..e6296de3a3 100644 --- a/es-app/src/views/gamelist/BasicGameListView.h +++ b/es-app/src/views/gamelist/BasicGameListView.h @@ -17,6 +17,8 @@ class BasicGameListView : public ISimpleGameListView virtual FileData* getCursor() override; virtual void setCursor(FileData* file) override; + virtual int getViewportTop() override; + virtual void setViewportTop(int index) override; virtual const char* getName() const override { return "basic"; } diff --git a/es-app/src/views/gamelist/GridGameListView.h b/es-app/src/views/gamelist/GridGameListView.h index e0f55e78d4..8f358fb4f5 100644 --- a/es-app/src/views/gamelist/GridGameListView.h +++ b/es-app/src/views/gamelist/GridGameListView.h @@ -21,6 +21,8 @@ class GridGameListView : public ISimpleGameListView virtual FileData* getCursor() override; virtual void setCursor(FileData*) override; + virtual void setViewportTop(int index) { ; } + virtual int getViewportTop() { return -1; } virtual bool input(InputConfig* config, Input input) override; diff --git a/es-app/src/views/gamelist/IGameListView.h b/es-app/src/views/gamelist/IGameListView.h index f4c1eed42b..f869cdd141 100644 --- a/es-app/src/views/gamelist/IGameListView.h +++ b/es-app/src/views/gamelist/IGameListView.h @@ -31,6 +31,8 @@ class IGameListView : public GuiComponent virtual FileData* getCursor() = 0; virtual void setCursor(FileData*) = 0; + virtual int getViewportTop() = 0; + virtual void setViewportTop(int index) = 0; virtual bool input(InputConfig* config, Input input) override; virtual void remove(FileData* game, bool deleteFile, bool refreshView=true) = 0; diff --git a/es-app/src/views/gamelist/ISimpleGameListView.h b/es-app/src/views/gamelist/ISimpleGameListView.h index 776ac7e27c..e171e584d3 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.h +++ b/es-app/src/views/gamelist/ISimpleGameListView.h @@ -24,6 +24,8 @@ class ISimpleGameListView : public IGameListView virtual FileData* getCursor() = 0; virtual void setCursor(FileData*) = 0; + virtual int getViewportTop() = 0; + virtual void setViewportTop(int index) = 0; virtual bool input(InputConfig* config, Input input) override; virtual void launch(FileData* game) = 0; diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index 2a8669534c..ce8762b7a6 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -59,6 +59,7 @@ class IList : public GuiComponent protected: int mCursor; + int mViewportTop; int mScrollTier; int mScrollVelocity; @@ -81,6 +82,7 @@ class IList : public GuiComponent mGradient(window), mTierList(tierList), mLoopType(loopType) { mCursor = 0; + mViewportTop = 0; mScrollTier = 0; mScrollVelocity = 0; mScrollTierAccumulator = 0; @@ -158,6 +160,16 @@ class IList : public GuiComponent return false; } + void setViewportTop(int index) + { + mViewportTop = index; + } + + int getViewportTop() + { + return mViewportTop; + } + // entry management void add(const Entry& e) { From 00577453d2e1eed7234e4dacc04de20e1cfd775b Mon Sep 17 00:00:00 2001 From: Gemba Date: Mon, 27 Feb 2023 20:46:58 +0100 Subject: [PATCH 535/603] Squashed commit of the following: commit 895e176c513ca1556c60c5c29c85bd43da3675e0 Author: Gemba Date: Fri Aug 5 13:37:44 2022 +0200 Changes to allow rollover at gamelist edges instead of rolling back in 'slide' mode. Needs 'Transition Style' set to 'slide'. Needs 'Quick Navigation' in Gamelist view enabled. --- es-app/src/animations/MoveCameraAnimation.h | 7 ++- es-app/src/views/ViewController.cpp | 47 +++++++++++++++++++-- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/es-app/src/animations/MoveCameraAnimation.h b/es-app/src/animations/MoveCameraAnimation.h index b5d05ec33e..23ad9640ba 100644 --- a/es-app/src/animations/MoveCameraAnimation.h +++ b/es-app/src/animations/MoveCameraAnimation.h @@ -7,22 +7,21 @@ class MoveCameraAnimation : public Animation { public: - MoveCameraAnimation(Transform4x4f& camera, const Vector3f& target) : mCameraStart(camera), mTarget(target), cameraOut(camera) {} + MoveCameraAnimation(Transform4x4f& camera, const Vector3f& target) : mCameraStart(camera), mTarget(target), mCameraOut(camera) { } int getDuration() const override { return 400; } void apply(float t) override { - // cubic ease out t -= 1; - cameraOut.translation() = -Vector3f().lerp(-mCameraStart.translation(), mTarget, t*t*t + 1); + mCameraOut.translation() = -Vector3f().lerp(-mCameraStart.translation(), mTarget, t*t*t + 1 /*cubic ease out*/); } private: Transform4x4f mCameraStart; Vector3f mTarget; - Transform4x4f& cameraOut; + Transform4x4f& mCameraOut; }; #endif // ES_APP_ANIMATIONS_MOVE_CAMERA_ANIMATION_H diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 465490b1f7..f424f955bf 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -54,7 +54,7 @@ void ViewController::goToStart() if ((*it)->getName() == requestedSystem) { goToGameList(*it); - Scripting::fireEvent("system-select", requestedSystem, "requestedsystem"); + Scripting::fireEvent("system-select", requestedSystem, "requestedsystem"); FileData* cursor = getGameListView(*it)->getCursor(); if (cursor != NULL) { @@ -193,11 +193,50 @@ void ViewController::playViewTransition() }else{ advanceAnimation(0, (int)(mFadeOpacity * FADE_DURATION)); } - } else if (transition_style == "slide"){ + } + else if (transition_style == "slide") + { // slide or simple slide - setAnimation(new MoveCameraAnimation(mCamera, target)); + bool inGamelistNav = -mCamera.translation().y() == target.y() // not in/out gamelist nav + && -mCamera.translation().x() - target.x(); // left/right movement + cancelAnimation(0); + Vector3f tgt = Vector3f(target); + Vector3f positionOrig; + if (inGamelistNav) { + const float screenWidth = (float)Renderer::getScreenWidth(); + if (-mCamera.translation().x() - tgt.x() >= 2 * screenWidth) + { + // right rollover + mLockInput = true; + tgt.x() = screenWidth * mGameListViews.size(); + } + else if (-mCamera.translation().x() - tgt.x() <= 2 * -screenWidth) + { + // left rollover + mLockInput = true; + tgt.x() = -screenWidth; + } + // deny any further input on rollover as mCurrentView would be + // different on subsequent animations, resulting in restoring + // a unrelated mCurrentView/mCamera with the original position + if (mLockInput) + { + positionOrig = Vector3f(mCurrentView->getPosition()); + mCurrentView->setPosition(tgt.x(), tgt.y()); + } + } + + setAnimation(new MoveCameraAnimation(mCamera, tgt), 0, [this, positionOrig] { + if (mLockInput) { + mCurrentView->setPosition(positionOrig); + mCamera.translation() = -positionOrig; + } + mLockInput = false; + }); updateHelpPrompts(); // update help prompts immediately - } else { + } + else + { // instant setAnimation(new LambdaAnimation( [this, target](float /*t*/) From 966b513c9c54ff1153a328bd41ad423c27752aef Mon Sep 17 00:00:00 2001 From: Gemba Date: Wed, 1 Mar 2023 07:37:32 +0100 Subject: [PATCH 536/603] Squashed commit of the following: commit 47fc0c9edb95b08fccde01fd1778e3789f6e617a Merge: 7f3bc53 5a3b907 Author: Gemba Date: Wed Mar 1 07:36:05 2023 +0100 Merge branch 'master' of https://github.com/Gemba/EmulationStation into fix_short_desc_wordwrap commit 5a3b9074e14b744548acf8a8b0fe7adb63148ce6 Merge: 34b2545 0057745 Author: pjft Date: Mon Feb 27 20:01:05 2023 +0000 Merge pull request #801 from Gemba/fix_ui_transition_style_slide_gamelistview_rollover UI Slide Mode: Changes to allow rollover left/right at gamelist-view edges commit 00577453d2e1eed7234e4dacc04de20e1cfd775b Author: Gemba Date: Mon Feb 27 20:46:58 2023 +0100 Squashed commit of the following: commit 895e176c513ca1556c60c5c29c85bd43da3675e0 Author: Gemba Date: Fri Aug 5 13:37:44 2022 +0200 Changes to allow rollover at gamelist edges instead of rolling back in 'slide' mode. Needs 'Transition Style' set to 'slide'. Needs 'Quick Navigation' in Gamelist view enabled. commit 7f3bc5345577f6d0d6625bec6a40fa2468e0395d Merge: be99449 b88f5ac Author: Gemba Date: Sat Feb 18 16:11:23 2023 +0100 Merge branch 'fix_short_desc_wordwrap' of https://github.com/Gemba/EmulationStation into fix_short_desc_wordwrap commit b88f5acbc03955aa251cb87445bce1437a4abf06 Merge: 1eb0147 34b2545 Author: Gemba Date: Sat Feb 18 12:58:46 2023 +0100 Merge branch 'RetroPie:master' into fix_short_desc_wordwrap commit 1eb0147e24573e761f5a65ce7f46e2b055cb124c Merge: 07002d6 0c4b42d Author: Gemba Date: Sun Sep 25 14:31:36 2022 +0200 Merge branch 'RetroPie:master' into fix_short_desc_wordwrap commit 07002d61d5a1722588c2b34bee6783c01a7a9c18 Author: Gemba Date: Sat Aug 13 18:37:11 2022 +0200 Make short descriptions wrap to next line instead of adding ellipsis. The ellipsis effect instead of wrapping to a new line had two causes: 1. A short description ends slightly after the x-bounding value of the textcomponent (can happen in any theme). 2. Themes with a linespacing with less than 1.2 (120% of highest character) get a wrong flag set for detecting if it is a multi line text. Carbon uses 1.5 linespacing by default thus this case never to carbon. Fixes: 1. An additional clause in Font.cpp::wrapText() was added to fix this effect and to force wrapping instead of adding ellipsis. 2. The evaluation of the variable isMultiline in TextComponent::onTextChanged() takes the actual linespacing for calculation instead of the "magic float" of 1.2. cf. https://retropie.org.uk/forum/topic/32893/very-short-descriptions-don-t-wrap commit be9944921e47ebfa57acae8200d495f356774c2b Author: Gemba Date: Sat Aug 13 18:37:11 2022 +0200 Make short descriptions wrap to next line instead of adding ellipsis. This effect was agnostic to the theme in use. The ellipsis effect was most prevalent on short descriptions, but may also occour whenever the last line of a description shortly ends after the maximum width of the bounding box, overrunning the bounding box by upto two non whitespace characters. An additional clause in Font.cpp::wrapText() was added to fix this effect and to force wrapping instead of adding ellipsis. cf. https://retropie.org.uk/forum/topic/32893/very-short-descriptions-don-t-wrap --- es-app/src/animations/MoveCameraAnimation.h | 7 ++- es-app/src/views/ViewController.cpp | 47 +++++++++++++++++++-- es-core/src/components/TextComponent.cpp | 11 ++--- es-core/src/resources/Font.cpp | 6 ++- 4 files changed, 55 insertions(+), 16 deletions(-) diff --git a/es-app/src/animations/MoveCameraAnimation.h b/es-app/src/animations/MoveCameraAnimation.h index b5d05ec33e..23ad9640ba 100644 --- a/es-app/src/animations/MoveCameraAnimation.h +++ b/es-app/src/animations/MoveCameraAnimation.h @@ -7,22 +7,21 @@ class MoveCameraAnimation : public Animation { public: - MoveCameraAnimation(Transform4x4f& camera, const Vector3f& target) : mCameraStart(camera), mTarget(target), cameraOut(camera) {} + MoveCameraAnimation(Transform4x4f& camera, const Vector3f& target) : mCameraStart(camera), mTarget(target), mCameraOut(camera) { } int getDuration() const override { return 400; } void apply(float t) override { - // cubic ease out t -= 1; - cameraOut.translation() = -Vector3f().lerp(-mCameraStart.translation(), mTarget, t*t*t + 1); + mCameraOut.translation() = -Vector3f().lerp(-mCameraStart.translation(), mTarget, t*t*t + 1 /*cubic ease out*/); } private: Transform4x4f mCameraStart; Vector3f mTarget; - Transform4x4f& cameraOut; + Transform4x4f& mCameraOut; }; #endif // ES_APP_ANIMATIONS_MOVE_CAMERA_ANIMATION_H diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 465490b1f7..f424f955bf 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -54,7 +54,7 @@ void ViewController::goToStart() if ((*it)->getName() == requestedSystem) { goToGameList(*it); - Scripting::fireEvent("system-select", requestedSystem, "requestedsystem"); + Scripting::fireEvent("system-select", requestedSystem, "requestedsystem"); FileData* cursor = getGameListView(*it)->getCursor(); if (cursor != NULL) { @@ -193,11 +193,50 @@ void ViewController::playViewTransition() }else{ advanceAnimation(0, (int)(mFadeOpacity * FADE_DURATION)); } - } else if (transition_style == "slide"){ + } + else if (transition_style == "slide") + { // slide or simple slide - setAnimation(new MoveCameraAnimation(mCamera, target)); + bool inGamelistNav = -mCamera.translation().y() == target.y() // not in/out gamelist nav + && -mCamera.translation().x() - target.x(); // left/right movement + cancelAnimation(0); + Vector3f tgt = Vector3f(target); + Vector3f positionOrig; + if (inGamelistNav) { + const float screenWidth = (float)Renderer::getScreenWidth(); + if (-mCamera.translation().x() - tgt.x() >= 2 * screenWidth) + { + // right rollover + mLockInput = true; + tgt.x() = screenWidth * mGameListViews.size(); + } + else if (-mCamera.translation().x() - tgt.x() <= 2 * -screenWidth) + { + // left rollover + mLockInput = true; + tgt.x() = -screenWidth; + } + // deny any further input on rollover as mCurrentView would be + // different on subsequent animations, resulting in restoring + // a unrelated mCurrentView/mCamera with the original position + if (mLockInput) + { + positionOrig = Vector3f(mCurrentView->getPosition()); + mCurrentView->setPosition(tgt.x(), tgt.y()); + } + } + + setAnimation(new MoveCameraAnimation(mCamera, tgt), 0, [this, positionOrig] { + if (mLockInput) { + mCurrentView->setPosition(positionOrig); + mCamera.translation() = -positionOrig; + } + mLockInput = false; + }); updateHelpPrompts(); // update help prompts immediately - } else { + } + else + { // instant setAnimation(new LambdaAnimation( [this, target](float /*t*/) diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index bd8b7cdc0d..08ccf5aba6 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -158,11 +158,9 @@ void TextComponent::calculateExtent() if(mAutoCalcExtent.x()) { mSize = mFont->sizeText(mUppercase ? Utils::String::toUpper(mText) : mText, mLineSpacing); - }else{ - if(mAutoCalcExtent.y()) - { - mSize[1] = mFont->sizeWrappedText(mUppercase ? Utils::String::toUpper(mText) : mText, getSize().x(), mLineSpacing).y(); - } + }else if(mAutoCalcExtent.y()) + { + mSize.y() = mFont->sizeWrappedText(mUppercase ? Utils::String::toUpper(mText) : mText, getSize().x(), mLineSpacing).y(); } } @@ -179,8 +177,7 @@ void TextComponent::onTextChanged() std::string text = mUppercase ? Utils::String::toUpper(mText) : mText; std::shared_ptr f = mFont; - const bool isMultiline = (mSize.y() == 0 || mSize.y() > f->getHeight()*1.2f); - + const bool isMultiline = (mSize.y() == 0 || mSize.y() > f->getHeight(mLineSpacing)); bool addAbbrev = false; if(!isMultiline) { diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index f3d074404a..d39c1f5521 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -526,7 +526,11 @@ std::string Font::wrapText(std::string text, float maxWidth) } } - if(cursor == text.length()) // arrived at end of text. + if(cursor == text.length() && lineWidth <= maxWidth) + // arrived at end of text while being in bounds of textbox + // second clause is mandatory for short descriptions which coincidentially + // ending with cursor at text end but slightly overrunning the bounding box + // to be wrapped on the next line, thus have to hit the else branch { out += text; text.erase(); From 1c80f0ca5a03aef4351965060a859d240fc796e1 Mon Sep 17 00:00:00 2001 From: Gemba Date: Wed, 1 Mar 2023 07:37:32 +0100 Subject: [PATCH 537/603] Squashed commit of the following: commit 47fc0c9edb95b08fccde01fd1778e3789f6e617a Merge: 7f3bc53 5a3b907 Author: Gemba Date: Wed Mar 1 07:36:05 2023 +0100 Merge branch 'master' of https://github.com/Gemba/EmulationStation into fix_short_desc_wordwrap commit 5a3b9074e14b744548acf8a8b0fe7adb63148ce6 Merge: 34b2545 0057745 Author: pjft Date: Mon Feb 27 20:01:05 2023 +0000 Merge pull request #801 from Gemba/fix_ui_transition_style_slide_gamelistview_rollover UI Slide Mode: Changes to allow rollover left/right at gamelist-view edges commit 00577453d2e1eed7234e4dacc04de20e1cfd775b Author: Gemba Date: Mon Feb 27 20:46:58 2023 +0100 Squashed commit of the following: commit 895e176c513ca1556c60c5c29c85bd43da3675e0 Author: Gemba Date: Fri Aug 5 13:37:44 2022 +0200 Changes to allow rollover at gamelist edges instead of rolling back in 'slide' mode. Needs 'Transition Style' set to 'slide'. Needs 'Quick Navigation' in Gamelist view enabled. commit 7f3bc5345577f6d0d6625bec6a40fa2468e0395d Merge: be99449 b88f5ac Author: Gemba Date: Sat Feb 18 16:11:23 2023 +0100 Merge branch 'fix_short_desc_wordwrap' of https://github.com/Gemba/EmulationStation into fix_short_desc_wordwrap commit b88f5acbc03955aa251cb87445bce1437a4abf06 Merge: 1eb0147 34b2545 Author: Gemba Date: Sat Feb 18 12:58:46 2023 +0100 Merge branch 'RetroPie:master' into fix_short_desc_wordwrap commit 1eb0147e24573e761f5a65ce7f46e2b055cb124c Merge: 07002d6 0c4b42d Author: Gemba Date: Sun Sep 25 14:31:36 2022 +0200 Merge branch 'RetroPie:master' into fix_short_desc_wordwrap commit 07002d61d5a1722588c2b34bee6783c01a7a9c18 Author: Gemba Date: Sat Aug 13 18:37:11 2022 +0200 Make short descriptions wrap to next line instead of adding ellipsis. The ellipsis effect instead of wrapping to a new line had two causes: 1. A short description ends slightly after the x-bounding value of the textcomponent (can happen in any theme). 2. Themes with a linespacing with less than 1.2 (120% of highest character) get a wrong flag set for detecting if it is a multi line text. Carbon uses 1.5 linespacing by default thus this case never to carbon. Fixes: 1. An additional clause in Font.cpp::wrapText() was added to fix this effect and to force wrapping instead of adding ellipsis. 2. The evaluation of the variable isMultiline in TextComponent::onTextChanged() takes the actual linespacing for calculation instead of the "magic float" of 1.2. cf. https://retropie.org.uk/forum/topic/32893/very-short-descriptions-don-t-wrap commit be9944921e47ebfa57acae8200d495f356774c2b Author: Gemba Date: Sat Aug 13 18:37:11 2022 +0200 Make short descriptions wrap to next line instead of adding ellipsis. This effect was agnostic to the theme in use. The ellipsis effect was most prevalent on short descriptions, but may also occour whenever the last line of a description shortly ends after the maximum width of the bounding box, overrunning the bounding box by upto two non whitespace characters. An additional clause in Font.cpp::wrapText() was added to fix this effect and to force wrapping instead of adding ellipsis. cf. https://retropie.org.uk/forum/topic/32893/very-short-descriptions-don-t-wrap --- es-core/src/components/TextComponent.cpp | 11 ++++------- es-core/src/resources/Font.cpp | 6 +++++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index bd8b7cdc0d..08ccf5aba6 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -158,11 +158,9 @@ void TextComponent::calculateExtent() if(mAutoCalcExtent.x()) { mSize = mFont->sizeText(mUppercase ? Utils::String::toUpper(mText) : mText, mLineSpacing); - }else{ - if(mAutoCalcExtent.y()) - { - mSize[1] = mFont->sizeWrappedText(mUppercase ? Utils::String::toUpper(mText) : mText, getSize().x(), mLineSpacing).y(); - } + }else if(mAutoCalcExtent.y()) + { + mSize.y() = mFont->sizeWrappedText(mUppercase ? Utils::String::toUpper(mText) : mText, getSize().x(), mLineSpacing).y(); } } @@ -179,8 +177,7 @@ void TextComponent::onTextChanged() std::string text = mUppercase ? Utils::String::toUpper(mText) : mText; std::shared_ptr f = mFont; - const bool isMultiline = (mSize.y() == 0 || mSize.y() > f->getHeight()*1.2f); - + const bool isMultiline = (mSize.y() == 0 || mSize.y() > f->getHeight(mLineSpacing)); bool addAbbrev = false; if(!isMultiline) { diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index f3d074404a..d39c1f5521 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -526,7 +526,11 @@ std::string Font::wrapText(std::string text, float maxWidth) } } - if(cursor == text.length()) // arrived at end of text. + if(cursor == text.length() && lineWidth <= maxWidth) + // arrived at end of text while being in bounds of textbox + // second clause is mandatory for short descriptions which coincidentially + // ending with cursor at text end but slightly overrunning the bounding box + // to be wrapped on the next line, thus have to hit the else branch { out += text; text.erase(); From e44e0b7c3d871eb1e4a3daa91cf717183f79f9d5 Mon Sep 17 00:00:00 2001 From: Gemba Date: Fri, 3 Mar 2023 20:39:24 +0100 Subject: [PATCH 538/603] reduce callcount to TextComponent.onTextChanged() --- es-core/src/components/TextComponent.cpp | 55 +++++++++++------------- es-core/src/components/TextComponent.h | 2 +- 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index 08ccf5aba6..698c0f920c 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -153,59 +153,56 @@ void TextComponent::render(const Transform4x4f& parentTrans) } } -void TextComponent::calculateExtent() +std::string TextComponent::calculateExtent() { + std::string text = mUppercase ? Utils::String::toUpper(mText) : mText; if(mAutoCalcExtent.x()) { - mSize = mFont->sizeText(mUppercase ? Utils::String::toUpper(mText) : mText, mLineSpacing); + mSize = mFont->sizeText(text, mLineSpacing); }else if(mAutoCalcExtent.y()) { - mSize.y() = mFont->sizeWrappedText(mUppercase ? Utils::String::toUpper(mText) : mText, getSize().x(), mLineSpacing).y(); + text = mFont->wrapText(text, getSize().x()); + mSize.y() = mFont->sizeText(text, mLineSpacing).y(); } + return text; } void TextComponent::onTextChanged() { - calculateExtent(); - if(!mFont || mText.empty()) { mTextCache.reset(); return; } - std::string text = mUppercase ? Utils::String::toUpper(mText) : mText; - std::shared_ptr f = mFont; - const bool isMultiline = (mSize.y() == 0 || mSize.y() > f->getHeight(mLineSpacing)); - bool addAbbrev = false; - if(!isMultiline) + std::string text = calculateExtent(); + const bool oneLiner = mSize.y() > 0 && mSize.y() <= f->getHeight(mLineSpacing); + + if(oneLiner) { + bool addAbbrev = false; size_t newline = text.find('\n'); text = text.substr(0, newline); // single line of text - stop at the first newline since it'll mess everything up - addAbbrev = newline != std::string::npos; - } + Vector2f size = f->sizeText(text); + addAbbrev = newline != std::string::npos || size.x() > mSize.x(); - Vector2f size = f->sizeText(text); - if(!isMultiline && mSize.x() && text.size() && (size.x() > mSize.x() || addAbbrev)) - { - // abbreviate text - const std::string abbrev = "..."; - Vector2f abbrevSize = f->sizeText(abbrev); - - while(text.size() && size.x() + abbrevSize.x() > mSize.x()) + if(addAbbrev) { - size_t newSize = Utils::String::prevCursor(text, text.size()); - text.erase(newSize, text.size() - newSize); - size = f->sizeText(text); - } - - text.append(abbrev); + // abbreviate text + const std::string abbrev = "..."; + Vector2f abbrevSize = f->sizeText(abbrev); - mTextCache = std::shared_ptr(f->buildTextCache(text, Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mHorizontalAlignment, mLineSpacing)); - }else{ - mTextCache = std::shared_ptr(f->buildTextCache(f->wrapText(text, mSize.x()), Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mHorizontalAlignment, mLineSpacing)); + while(text.size() && size.x() + abbrevSize.x() > mSize.x()) + { + size_t newSize = Utils::String::prevCursor(text, text.size()); + text.erase(newSize, text.size() - newSize); + size = f->sizeText(text); + } + text.append(abbrev); + } } + mTextCache = std::shared_ptr(f->buildTextCache(text, Vector2f(0, 0), (mColor >> 8 << 8) | mOpacity, mSize.x(), mHorizontalAlignment, mLineSpacing)); } void TextComponent::onColorChanged() diff --git a/es-core/src/components/TextComponent.h b/es-core/src/components/TextComponent.h index 1721105772..30527ecfab 100644 --- a/es-core/src/components/TextComponent.h +++ b/es-core/src/components/TextComponent.h @@ -49,7 +49,7 @@ class TextComponent : public GuiComponent std::shared_ptr mFont; private: - void calculateExtent(); + std::string calculateExtent(); void onColorChanged(); From 955fe060868dde5a2c8f4338f4aa6195a52a2bfb Mon Sep 17 00:00:00 2001 From: Gemba Date: Wed, 22 Mar 2023 01:14:58 +0100 Subject: [PATCH 539/603] Squashed commit of the following: commit 5d07dac51f0ac77cb3771dc2a7c69677b882de00 Author: Gemba Date: Wed Mar 22 01:04:40 2023 +0100 re-enable wrapping when fixed >0 y-size value of TextComponent is given --- es-core/src/components/TextComponent.cpp | 16 ++++++++++++---- es-core/src/components/TextComponent.h | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index 698c0f920c..a04558cb07 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -153,16 +153,24 @@ void TextComponent::render(const Transform4x4f& parentTrans) } } -std::string TextComponent::calculateExtent() +std::string TextComponent::calculateExtent(bool allow_wrapping) { std::string text = mUppercase ? Utils::String::toUpper(mText) : mText; if(mAutoCalcExtent.x()) { mSize = mFont->sizeText(text, mLineSpacing); - }else if(mAutoCalcExtent.y()) + }else if(mAutoCalcExtent.y() || allow_wrapping) + // usually a textcomponent wraps only when x > 0 and y == 0 in size (see TextComponent.h). + // The extra flag allow_wrapping does wrapping if an textcomponent has x > 0 and y > height of + // one line (calculated by fontsize and line spacing). + // Some themes rely on this wrap functionality while having an fixed y (y>0) in . { text = mFont->wrapText(text, getSize().x()); - mSize.y() = mFont->sizeText(text, mLineSpacing).y(); + if (mAutoCalcExtent.y()) { + // only resize when y was 0 before + // otherwise leave y value as defined before (i.e. theme value) + mSize.y() = mFont->sizeText(text, mLineSpacing).y(); + } } return text; } @@ -176,7 +184,7 @@ void TextComponent::onTextChanged() } std::shared_ptr f = mFont; - std::string text = calculateExtent(); + std::string text = calculateExtent(mSize.y() > f->getHeight(mLineSpacing)); const bool oneLiner = mSize.y() > 0 && mSize.y() <= f->getHeight(mLineSpacing); if(oneLiner) diff --git a/es-core/src/components/TextComponent.h b/es-core/src/components/TextComponent.h index 30527ecfab..c464ef1140 100644 --- a/es-core/src/components/TextComponent.h +++ b/es-core/src/components/TextComponent.h @@ -49,7 +49,7 @@ class TextComponent : public GuiComponent std::shared_ptr mFont; private: - std::string calculateExtent(); + std::string calculateExtent(bool allow_wrapping); void onColorChanged(); From 30cbdeb7cd667ac9d6a836995a17004e8d84339a Mon Sep 17 00:00:00 2001 From: pjft Date: Fri, 21 Jul 2023 17:00:20 +0100 Subject: [PATCH 540/603] Address screensaver video/audio not stopping on game launch Recent reports of specific configurations or versions changing some of the event handling order, resulting in the screensaver video/audio not stopping when a game is launched from it. Can't replicate on my end, but these changes should be harmless for the current setup, and should help with that scenario. To be fair, it should have been there from the get go - it's just pure luck that things worked until now, as the screensaver was being halted before this code would run. --- es-app/src/SystemScreenSaver.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 9c422c1fd1..63ad4d49dc 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -511,6 +511,10 @@ void SystemScreenSaver::launchGame() { if (mCurrentGame != NULL) { + //Stop screensaver + mStopBackgroundAudio = true; + stopScreenSaver(); + // launching Game ViewController::get()->goToGameList(mCurrentGame->getSystem()); IGameListView* view = ViewController::get()->getGameListView(mCurrentGame->getSystem()).get(); From 284685950854b95f3bbb8775dd0233c06c667e74 Mon Sep 17 00:00:00 2001 From: Bob Wilton Date: Mon, 7 Aug 2023 22:21:34 -0400 Subject: [PATCH 541/603] Minimal changes required to compile ES for WIN32 --- CMakeLists.txt | 18 ++++++++++++++++-- es-core/src/components/VideoVlcComponent.cpp | 4 ++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 83c3b952be..4bc0e45e3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,5 @@ cmake_minimum_required(VERSION 2.8) +# Note: Visual Studio 2022 generator requires CMake 3.21 or greater. option(GLES "Set to ON if targeting Embedded OpenGL" ${GLES}) option(GL "Set to ON if targeting Desktop OpenGL" ${GL}) @@ -137,8 +138,16 @@ if(MSVC) add_definitions(-D_CRT_SECURE_NO_DEPRECATE) add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) add_definitions(-DNOMINMAX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") #multi-processor compilation - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") #multi-processor compilation + + # multi-processor compilation + # disable warning c4018 - signed/unsigned mismatch + # disable warning c4244 - conversion, possible loss of data + # disable warning c4996 - use of deprecated function/member/variable/typedef + # Use extended ASCII character set + + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /wd4018 /wd4244 /wd4996 /source-charset:437") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP /wd4018 /wd4244 /wd4996 /source-charset:437") + set(CMAKE_EXE_LINKER_FLAGS "/SAFESEH:NO") # Set the start-up project to in VS to 'emulationstation' set(VS_STARTUP_PROJECT "emulationstation") @@ -238,7 +247,12 @@ endif() if(MSVC) LIST(APPEND COMMON_LIBRARIES + Crypt32 + Imm32 + Setupapi + Version winmm + Wldap32 ) endif() diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index ce90d0456b..fb15c35b99 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -5,6 +5,10 @@ #include "utils/StringUtil.h" #include "PowerSaver.h" #include "Settings.h" +#ifdef WIN32 + #include + typedef SSIZE_T ssize_t; +#endif #include #include From 236bb03fe707469a699e9fff16bb956871287ad9 Mon Sep 17 00:00:00 2001 From: Bob Wilton Date: Mon, 7 Aug 2023 22:23:11 -0400 Subject: [PATCH 542/603] Documented steps to build ES for WIN32 --- README.md | 118 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 103 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 58539c21b0..0f71773ecf 100644 --- a/README.md +++ b/README.md @@ -7,25 +7,26 @@ EmulationStation is a cross-platform graphical front-end for emulators with cont Building ======== -**Building on Linux** +Building on Linux +----------------- EmulationStation uses some C++11 code, which means you'll need to use at least g++-4.7 on Linux, or VS2010 on Windows, to compile. EmulationStation has a few dependencies. For building, you'll need CMake, SDL2, FreeImage, FreeType, cURL and RapidJSON. You also should probably install the `fonts-droid` package which contains fallback fonts for Chinese/Japanese/Korean characters, but ES will still work fine without it (this package is only used at run-time). -**On Debian/Ubuntu:** +### On Debian/Ubuntu: All of this be easily installed with `apt-get`: ```bash sudo apt-get install libsdl2-dev libfreeimage-dev libfreetype6-dev libcurl4-openssl-dev rapidjson-dev \ libasound2-dev libgles2-mesa-dev build-essential cmake fonts-droid-fallback libvlc-dev \ libvlccore-dev vlc-bin ``` -**On Fedora:** +### On Fedora: All of this be easily installed with `dnf` (with rpmfusion activated) : ```bash sudo dnf install SDL2-devel freeimage-devel freetype-devel curl-devel \ alsa-lib-devel mesa-libGL-devel cmake \ - vlc-devel rapidjson-devel + vlc-devel rapidjson-devel ``` **Note**: this repository uses a git submodule - to checkout the source and all submodules, use @@ -34,7 +35,7 @@ sudo dnf install SDL2-devel freeimage-devel freetype-devel curl-devel \ git clone --recursive https://github.com/RetroPie/EmulationStation.git ``` -or +or ```bash git clone https://github.com/RetroPie/EmulationStation.git @@ -54,7 +55,7 @@ NOTE: to generate a `Debug` build on Unix/Linux, run the Makefile generation ste cmake -DCMAKE_BUILD_TYPE=Debug . ``` -**On the Raspberry Pi** +### On the Raspberry Pi: * Choosing a GLES implementation. @@ -71,23 +72,110 @@ cmake -DCMAKE_BUILD_TYPE=Debug . If your system doesn't have a working GLESv2 implementation, the GLESv1 legacy renderer can be compiled in by adding `-DUSE_GLES1=On` to the build options. -**Building on Windows** +Building on Windows +------------------- -[FreeImage](http://downloads.sourceforge.net/freeimage/FreeImage3154Win32.zip) +* Install [Visual Studio 2022](https://visualstudio.microsoft.com/vs/community/). At a minimum, install the "Desktop development with C++" workload with the default list of optional items. -[FreeType2](http://download.savannah.gnu.org/releases/freetype/freetype-2.4.9.tar.bz2) (you'll need to compile) +* Install the latest version of [CMake](https://cmake.org/download/) (e.g., [cmake-3.27.1-windows-x86_64.msi](https://github.com/Kitware/CMake/releases/download/v3.27.1/cmake-3.27.1-windows-x86_64.msi)). CMake is used for generating the Visual Studio project. -[SDL2](http://www.libsdl.org/release/SDL2-devel-2.0.8-VC.zip) +* Use git to clone [vcpkg](https://vcpkg.io/en/), then run the bootstrap script as shown below to build vcpkg . This is a C/C++ dependency manager from Microsoft. -[cURL](http://curl.haxx.se/download.html) (you'll need to compile or get the pre-compiled DLL version) +```batchfile +C:\src>git clone https://github.com/Microsoft/vcpkg.git +C:\src>.\vcpkg\bootstrap-vcpkg.bat +``` + +* Download the latest [nuget.exe](https://dist.nuget.org/win-x86-commandline/latest/nuget.exe) to a folder that is in your Windows PATH. NuGet is a .NET package manager. + +* Use NuGet to download the latest [libVLC](https://www.videolan.org/vlc/libvlc.html). This library is used to play video snaps. + +```batchfile +C:\src\EmulationStation>mkdir nuget +C:\src\EmulationStation>cd nuget +C:\src\EmulationStation\nuget>nuget install -ExcludeVersion VideoLAN.LibVLC.Windows +``` + +* Use vcpkg to download the latest pre-compiled [cURL](http://curl.haxx.se/download.html). This is a library for transferring data with URLs. + +```batchfile +c:\src>.\vcpkg\vcpkg install curl:x86-windows-static-md +``` + +* Use vcpkg to download the latest [FreeImage](https://freeimage.sourceforge.io/index.html). This library supports popular graphics image formats. -[RapisJSON](https://github.com/tencent/rapidjson) (you'll need the `include/rapidsjon` added to the include path) +```batchfile +c:\src\>.\vcpkg\vcpkg install freeimage:x86-windows-static-md +``` -(Remember to copy necessary .DLLs into the same folder as the executable: probably FreeImage.dll, freetype6.dll, SDL2.dll, libcurl.dll, and zlib1.dll. Exact list depends on if you built your libraries in "static" mode or not.) +* Use vcpkg to download the latest pre-compiled [FreeType2](https://freetype.org/). This library is used to render fonts. -[CMake](http://www.cmake.org/cmake/resources/software.html) (this is used for generating the Visual Studio project) +```batchfile +c:\src>.\vcpkg\vcpkg install freetype:x86-windows-static-md +``` + +* Use vcpkg to download the latest [SDL2](http://www.libsdl.org/). Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D. + +```batchfile +c:\src>.\vcpkg\vcpkg install sdl2:x86-windows-static-md +``` -(If you don't know how to use CMake, here are some hints: run cmake-gui and point it at your EmulationStation folder. Point the "build" directory somewhere - I use EmulationStation/build. Click configure, choose "Visual Studio [year] Project", fill in red fields as they appear and keep clicking Configure (you may need to check "Advanced"), then click Generate.) +* Use vcpkg to download the latest [RapidJSON](http://rapidjson.org/). This library provides a fast JSON parser/generator for C++ with both SAX/DOM style API. + +```batchfile +c:\src>.\vcpkg\vcpkg install rapidjson:x86-windows-static-md +``` + +* Using the example shown below, configure environment variables to point to the libraries that were installed in the above steps. Please note that the below example intentionally uses forward slashes for compatibility with CMake. + +```batchfile +C:\src\EmulationStation>set VCPKG="C:/src/vcpkg/installed/x86-windows-static-md" +C:\src\EmulationStation>set NUGET="C:/src/EmulationStation/nuget" +C:\src\EmulationStation>set FREETYPE_DIR="%VCPKG%" +C:\src\EmulationStation>set FREEIMAGE_HOME="%VCPKG%" +C:\src\EmulationStation>set VLC_HOME="%NUGET%/VideoLAN.LibVLC.Windows/build/x86" +C:\src\EmulationStation>set RAPIDJSON_INCLUDE_DIRS="%VCPKG%/include" +C:\src\EmulationStation>set CURL_INCLUDE_DIR="%VCPKG%/include" +C:\src\EmulationStation>set SDL2_INCLUDE_DIR="%VCPKG%/include/SDL2" +C:\src\EmulationStation>set VLC_INCLUDE_DIR="%VLC_HOME%/include" +C:\src\EmulationStation>set CURL_LIBRARY="%VCPKG%/lib/*.lib" +C:\src\EmulationStation>set SDL2_LIBRARY="%VCPKG%/lib/manual-link/SDL2main.lib" +C:\src\EmulationStation>set VLC_LIBRARIES="%VLC_HOME%/libvlc*.lib" +C:\src\EmulationStation>set VLC_VERSION=3.0.11 +``` + +* Use CMake to generate the Visual Studio project. + +```batchfile +C:\src\EmulationStation>mkdir build +C:\src\EmulationStation>cmake . -B build -A Win32 ^ +-DRAPIDJSON_INCLUDE_DIRS=%RAPIDJSON_INCLUDE_DIRS% ^ +-DCURL_INCLUDE_DIR=%CURL_INCLUDE_DIR% ^ +-DSDL2_INCLUDE_DIR=%SDL2_INCLUDE_DIR% ^ +-DVLC_INCLUDE_DIR=%VLC_INCLUDE_DIR% ^ +-DCURL_LIBRARY=%CURL_LIBRARY% ^ +-DSDL2_LIBRARY=%SDL2_LIBRARY% ^ +-DVLC_LIBRARIES=%VLC_LIBRARIES% ^ +-DVLC_VERSION=%VLC_VERSION% ^ +-DCMAKE_EXE_LINKER_FLAGS=/SAFESEH:NO +``` + +* Use CMake to build the Visual Studio project. + +```batchfile +C:\src\EmulationStation>cmake --build build --config Release +``` + +* Using the example shown below, copy the newly built binaries and other needed files to destination folder. + +```batchfile +C:\src\EmulationStation>mkdir -p C:\apps\EmulationStation\.emulationstation +C:\src\EmulationStation>xcopy C:\src\EmulationStation\resources C:\apps\EmulationStation\resources /h /i /c /k /e /r /y +C:\src\EmulationStation>copy C:\src\EmulationStation\Release\*.exe C:\apps\EmulationStation /Y +C:\src\EmulationStation>copy C:\src\EmulationStation\nuget\VideoLAN.LibVLC.Windows\build\x86\*.dll C:\apps\EmulationStation /Y +C:\src\EmulationStation>xcopy C:\src\EmulationStation\nuget\VideoLAN.LibVLC.Windows\build\x86\plugins C:\apps\EmulationStation\plugins /h /i /c /k /e /r /y + +``` Configuring From b2203777a1b46cea65e8397e282442e0e4f59d95 Mon Sep 17 00:00:00 2001 From: Bob Wilton Date: Mon, 7 Aug 2023 22:25:30 -0400 Subject: [PATCH 543/603] Fix to eliminate PkgConfig warning with WIN32 builds --- CMake/Utils/FindPkgMacros.cmake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMake/Utils/FindPkgMacros.cmake b/CMake/Utils/FindPkgMacros.cmake index a6f0aaae57..36d075dd3c 100644 --- a/CMake/Utils/FindPkgMacros.cmake +++ b/CMake/Utils/FindPkgMacros.cmake @@ -70,7 +70,9 @@ endmacro(clear_if_changed) # Try to get some hints from pkg-config, if available macro(use_pkgconfig PREFIX PKGNAME) - find_package(PkgConfig) + if(NOT WIN32) + find_package(PkgConfig) + endif(NOT WIN32) if (PKG_CONFIG_FOUND) pkg_check_modules(${PREFIX} ${PKGNAME}) endif () @@ -96,7 +98,7 @@ macro(get_debug_names PREFIX) endforeach(i) endmacro(get_debug_names) -# Add the parent dir from DIR to VAR +# Add the parent dir from DIR to VAR macro(add_parent_dir VAR DIR) get_filename_component(${DIR}_TEMP "${${DIR}}/.." ABSOLUTE) set(${VAR} ${${VAR}} ${${DIR}_TEMP}) From b2d41e84fd08c9db9961bddb6743c3b2e23822b2 Mon Sep 17 00:00:00 2001 From: Bob Wilton Date: Mon, 7 Aug 2023 22:27:57 -0400 Subject: [PATCH 544/603] Fixed warning with finding RapidJSON package --- CMake/Packages/FindRapidJSON.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMake/Packages/FindRapidJSON.cmake b/CMake/Packages/FindRapidJSON.cmake index 731461a344..6cea73327e 100644 --- a/CMake/Packages/FindRapidJSON.cmake +++ b/CMake/Packages/FindRapidJSON.cmake @@ -61,11 +61,11 @@ mark_as_advanced(RAPIDJSON_INCLUDE_DIRS) # handle the QUIETLY and REQUIRED arguments and set RAPIDJSON_FOUND to TRUE if # all listed variables are TRUE include("FindPackageHandleStandardArgs") -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Rapidjson +FIND_PACKAGE_HANDLE_STANDARD_ARGS(RapidJSON REQUIRED_VARS RAPIDJSON_INCLUDE_DIRS - FOUND_VAR Rapidjson_FOUND + FOUND_VAR RapidJSON_FOUND ) -if(Rapidjson_FOUND) - set(RAPIDJSON_FOUND ${Rapidjson_FOUND}) +if(RapidJSON_FOUND) + set(RAPIDJSON_FOUND ${RapidJSON_FOUND}) endif() From dec977ce00b4ab0e7cd29c08c757204184d92e39 Mon Sep 17 00:00:00 2001 From: Bob Wilton Date: Mon, 7 Aug 2023 22:30:43 -0400 Subject: [PATCH 545/603] Changed Ubuntu build workflow to a manual trigger --- .github/workflows/ccpp.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index a020bef060..f462a27e9b 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -1,6 +1,7 @@ name: C/C++ CI -on: [push] +on: + workflow_dispatch: jobs: build: From b348bbd1ab1f94f8cb3fbd2f352d707dba92fd37 Mon Sep 17 00:00:00 2001 From: Bob Wilton Date: Mon, 7 Aug 2023 22:32:39 -0400 Subject: [PATCH 546/603] Added WIN32 build workflow using Github Actions --- .github/workflows/win32.yml | 141 ++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 .github/workflows/win32.yml diff --git a/.github/workflows/win32.yml b/.github/workflows/win32.yml new file mode 100644 index 0000000000..f5f1d11fcb --- /dev/null +++ b/.github/workflows/win32.yml @@ -0,0 +1,141 @@ +name: Build ES for Win32 + +on: + workflow_dispatch: + +jobs: + build: + runs-on: + # https://github.com/actions/runner-images/blob/main/images/win/Windows2022-Readme.md + windows-2022 + + env: + # Build parameters for CMake + BUILD_TYPE: Release + Platform: Win32 + + defaults: + run: + shell: cmd + + steps: + # Create directories for build (used by CMake) and nuget + - name: Set up directories + working-directory: ${{runner.workspace}} + run: mkdir build nuget + + # Check-out repository under $GITHUB_WORKSPACE + # https://github.com/actions/checkout + - name: Check-out repository + uses: actions/checkout@v3 + with: + submodules: true + + # Discover location of MSBuild tool and to PATH environment variables + # https://github.com/microsoft/setup-msbuild + - name: Locate MSBuild + uses: microsoft/setup-msbuild@v1.3.1 + + # Use NuGet to download the latest libVLC. + - name: Download libVLC + working-directory: ${{runner.workspace}}/nuget + run: nuget install -ExcludeVersion VideoLAN.LibVLC.Windows + + # Use vcpkg to download and build the latest cURL + - name: Build cURL static library + run: vcpkg install curl:x86-windows-static-md + + # Use vcpkg to download and build the latest FreeImage + - name: Build FreeImage static library + run: vcpkg install freeimage:x86-windows-static-md + + # Use vcpkg to download and build the latest FreeType2 + - name: Build FreeType2 static library + run: vcpkg install freetype:x86-windows-static-md + + # Use vcpkg to download and build the latest SDL2 + - name: Build SDL2 static library + run: vcpkg install sdl2:x86-windows-static-md + + # Use vcpkg to download and build the latest RapidJSON + - name: Build RapidJSON static library + run: vcpkg install rapidjson:x86-windows-static-md + + # Setup environment variables for subsequent steps + # Note: Forward slashes are used for CMake compatibility + - name: Set up environment + run: | + set VCPKG=%VCPKG_INSTALLATION_ROOT%/installed/x86-windows-static-md + set "VCPKG=%VCPKG:\=/%" + set NUGET=${{runner.workspace}}/nuget + set "NUGET=%NUGET:\=/%" + set VLC_HOME=%NUGET%/VideoLAN.LibVLC.Windows/build/x86 + echo VCPKG=%VCPKG%>> %GITHUB_ENV% + echo NUGET=%NUGET%>> %GITHUB_ENV% + echo FREETYPE_DIR=%VCPKG%>> %GITHUB_ENV% + echo FREEIMAGE_HOME=%VCPKG%>> %GITHUB_ENV% + echo VLC_HOME=%VLC_HOME%>> %GITHUB_ENV% + echo RAPIDJSON_INCLUDE_DIRS=%VCPKG%/include>> %GITHUB_ENV% + echo CURL_INCLUDE_DIR=%VCPKG%/include>> %GITHUB_ENV% + echo SDL2_INCLUDE_DIR=%VCPKG%/include/SDL2>> %GITHUB_ENV% + echo VLC_INCLUDE_DIR=%VLC_HOME%/include>> %GITHUB_ENV% + echo CURL_LIBRARY=%VCPKG%/lib/*.lib>> %GITHUB_ENV% + echo SDL2_LIBRARY=%VCPKG%/lib/manual-link/SDL2main.lib>> %GITHUB_ENV% + echo VLC_LIBRARIES=%VLC_HOME%/libvlc*.lib>> %GITHUB_ENV% + echo VLC_VERSION=3.0.11>> %GITHUB_ENV% + + # Use CMake to create Visual Studio project in build folder + - name: Create Visual Studio project + working-directory: ${{runner.workspace}} + run: cmake ${{github.workspace}} + -B build + -A %Platform% + -DRAPIDJSON_INCLUDE_DIRS=%RAPIDJSON_INCLUDE_DIRS% + -DCURL_INCLUDE_DIR=%CURL_INCLUDE_DIR% + -DSDL2_INCLUDE_DIR=%SDL2_INCLUDE_DIR% + -DVLC_INCLUDE_DIR=%VLC_INCLUDE_DIR% + -DCURL_LIBRARY=%CURL_LIBRARY% + -DSDL2_LIBRARY=%SDL2_LIBRARY% + -DVLC_LIBRARIES=%VLC_LIBRARIES% + -DVLC_VERSION=%VLC_VERSION% + -DCMAKE_EXE_LINKER_FLAGS=/SAFESEH:NO + + # Use CMake to build project + - name: Build EmulationStation + working-directory: ${{runner.workspace}} + run: cmake --build build --config %BUILD_TYPE% + + # Copy all other dependencies into Release folder + # Note: Forward slashes are replaced with back slashes for this step + - name: Collect dependencies + working-directory: ${{github.workspace}}/Release + run: | + set "VLC_ROOT=%VLC_HOME:/=\%" + mkdir .emulationstation + xcopy ..\resources .\resources /h /i /c /k /e /r /y + copy %VLC_ROOT%\*.dll . + xcopy %VLC_ROOT%\plugins .\plugins /h /i /c /k /e /r /y + + # Create systems configuration file + - name: Create systems configuration file + working-directory: ${{github.workspace}}/Release/.emulationstation + run: | + echo ^ ... ./Violet.svm/Violet.svm ... ``` --- es-app/src/Gamelist.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/es-app/src/Gamelist.cpp b/es-app/src/Gamelist.cpp index 8611d52b0b..51a6d9e2ba 100644 --- a/es-app/src/Gamelist.cpp +++ b/es-app/src/Gamelist.cpp @@ -56,8 +56,12 @@ FileData* findOrCreateFile(SystemData* system, const std::string& path, FileType FileData* file = new FileData(type, path, system->getSystemEnvData(), system); - // skipping arcade assets from gamelist - if(!file->isArcadeAsset()) + // skipping arcade assets from gamelist and add only to filesystem + // (fs) folders, i.e. entriess in gamelist with and not to + // fs-folders which are marked as in gamelist. NB: + // treeNode's type (=parent) is determined by the element in the + // gamelist and not by the fs-type. + if(!file->isArcadeAsset() && treeNode->getType() == FOLDER) { treeNode->addChild(file); } @@ -74,7 +78,14 @@ FileData* findOrCreateFile(SystemData* system, const std::string& path, FileType LOG(LogWarning) << "gameList: folder " << absFolder << " absent on fs, no FileData object created. Do remove leftover in gamelist.xml to remediate this warning."; return NULL; } - + // discard constellations like scummvm/game.svm/game.svm as + // scummvm/game.svm/ is a GAME and not a FOLDER + if (treeNode->getType() == GAME) + { + std::string absFolder = Utils::FileSystem::getAbsolutePath(pathSegment, systemPath); + LOG(LogWarning) << "gameList: trying to add game '" << absFolder << "' to a parent entry is invalid, no FileData object created. Do remove nested in gamelist.xml to remediate this warning."; + return NULL; + } // create folder filedata object std::string absPath = Utils::FileSystem::resolveRelativePath(treeNode->getPath() + "/" + pathSegment, systemPath, false, true); FileData* folder = new FileData(FOLDER, absPath, system->getSystemEnvData(), system); From bebf1e5f8e2ea6bb6bad38a77b8c4f0de5fcea57 Mon Sep 17 00:00:00 2001 From: pjft Date: Tue, 20 Feb 2024 22:09:23 +0000 Subject: [PATCH 586/603] Address warning when exiting screensaver --- es-app/src/SystemScreenSaver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index 7319d937aa..d1b8f8a15c 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -205,7 +205,7 @@ void SystemScreenSaver::handleScreenSaverEditingCollection() { // we're exiting the screensaver, restore the currently actively editing collection CollectionSystemManager::get()->exitEditMode(true); - if (mRegularEditingCollection != "Favorites") + if (mRegularEditingCollection != "Favorites" && mRegularEditingCollection != "") CollectionSystemManager::get()->setEditMode(mRegularEditingCollection, true); mRegularEditingCollection = ""; } From d544c73d812555374322d59805e4d88fc29eebab Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Wed, 21 Feb 2024 04:24:12 +0000 Subject: [PATCH 587/603] Handle cURL library deprecation for redirect options Starting with 7.85, `CURLOPT_REDIR_PROTOCOLS` is deprecated [1] and `CURL_REDIR_PROTOCOLS_STR` [2] should be used instead. The changes modify the option used depending on the (compile time) libcurl version. [1] https://curl.se/libcurl/c/CURLOPT_REDIR_PROTOCOLS.html [2] https://curl.se/libcurl/c/CURLOPT_REDIR_PROTOCOLS_STR.html --- es-core/src/HttpReq.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/es-core/src/HttpReq.cpp b/es-core/src/HttpReq.cpp index feaea8a3cb..08415f171a 100644 --- a/es-core/src/HttpReq.cpp +++ b/es-core/src/HttpReq.cpp @@ -77,7 +77,13 @@ HttpReq::HttpReq(const std::string& url) } //set curl restrict redirect protocols + //starting with 7.85.0, CURLOPT_REDIR_PROTOCOLS is deprecated + // and CURLOPT_REDIR_PROTOCOLS_STR should be used instead +#if CURL_AT_LEAST_VERSION(7,85,0) + err = curl_easy_setopt(mHandle, CURLOPT_REDIR_PROTOCOLS_STR, "http,https"); +#else err = curl_easy_setopt(mHandle, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); +#endif if(err != CURLE_OK) { mStatus = REQ_IO_ERROR; From 022e621156d70c8a72bdc2755f32b5f76ab18f47 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Thu, 22 Feb 2024 18:02:17 +0000 Subject: [PATCH 588/603] resources: update MAME files and resource generator Updated the generation script to account for Python 3.12 deprecation of 'datetime.now()'. Re-generated the MAME resource files from the following DATs: * MAME 262 (Jan 2024) * FBNeo (22 Feb 2024) * Libretro Mame2003-Plus (22 Feb 2024) --- resources/mamebioses.xml | 5 +- resources/mamedevices.xml | 213 +- resources/mamenames.xml | 12218 ++++++++++++++++++++++++++---------- resources/mameres.py | 4 +- 4 files changed, 8935 insertions(+), 3505 deletions(-) diff --git a/resources/mamebioses.xml b/resources/mamebioses.xml index 972621142a..9a0983ca2b 100644 --- a/resources/mamebioses.xml +++ b/resources/mamebioses.xml @@ -1,4 +1,4 @@ - + 3dobios acpsx airlbios @@ -9,6 +9,7 @@ ar_bios aristmk5 aristmk6 +aristmk7 atarisy1 awbios bubsys @@ -47,6 +48,7 @@ konamigx konendev kpython +kpython2 kviper lindbios mac2bios @@ -67,6 +69,7 @@ nss pgm playch10 +pumpitup recel sammymdl segasp diff --git a/resources/mamedevices.xml b/resources/mamedevices.xml index 3b715163db..5d39ae8ac9 100644 --- a/resources/mamedevices.xml +++ b/resources/mamedevices.xml @@ -1,7 +1,8 @@ - + 22vp931 3c505 3xtwin +4dparprn a1000kbd_de a1000kbd_dk a1000kbd_fr @@ -36,8 +37,8 @@ a2cffa02 a2cffa2 a2corvus -a2diskii a2diskiing +a2excel9 a2focdrv a2grappler a2grapplerplus @@ -52,11 +53,14 @@ a2q68 a2q68plus a2ramfac +a2romfp +a2romint a2scsi a2sd a2sider1 a2sider2 a2ssc +a2superdrive a2suprterm a2surance a2swyft @@ -67,6 +71,7 @@ a2ulttrm a2uniprint a2vidtrm +a2vistaa800 a2vtc1 a2vulcan a2vulgld @@ -109,7 +114,6 @@ abc_db4107 abc_db4112 abc_fd2 -abc_memcard abc_slutprov abc_ssa abc_uni800 @@ -126,6 +130,7 @@ adam_kb adam_prn adam_spi +adbmodem agat7_flop agat840k_hle agat9_flop @@ -137,8 +142,10 @@ aha1542cp aha1740 aha1742a +aha2940au alice_mcx128 alto2_cpu +altos2_kbd ampex230_kbd ap2000 aplcd150 @@ -153,15 +160,23 @@ arc_bbcio_we arc_eaglem2 arc_ether1_aka25 +arc_ether2_aeh50 +arc_ether3_aeh54 +arc_ethera arc_etherd arc_etherr arc_faxpack arc_greyhawk +arc_hdisc_akd52 +arc_hdisc_cw +arc_hdisc_morley +arc_hdisc_we arc_ide_be arc_ide_rdev arc_iomidi_aka15 arc_lark arc_lbp4 +arc_midi2 arc_midi_aka16 arc_midimax arc_midimax2 @@ -173,6 +188,13 @@ arc_scanjunior3 arc_scanlight arc_scanvideo +arc_scsi_a500 +arc_scsi_aka31 +arc_scsi_aka32 +arc_scsi_cumana +arc_scsi_ling +arc_scsi_morley +arc_scsi_oak arc_scsi_vti arc_serial arc_spectra @@ -188,7 +210,11 @@ atari810 atom_discpack ax208 +ax208p +banshee_x86 basf7100_kbd +bbc_24bbc +bbc_2ndserial bbc_acorn1770 bbc_acorn8271 bbc_ams3 @@ -200,6 +226,7 @@ bbc_bitstik2 bbc_cc500 bbc_chameleon +bbc_cisco bbc_cumana1 bbc_cumana2 bbc_cumana68k @@ -208,6 +235,7 @@ bbc_ieee488 bbc_integrab bbc_kenda +bbc_memexb20 bbc_mertec bbc_morleyaa bbc_multiform @@ -218,6 +246,7 @@ bbc_opus8272 bbc_opusa bbc_pdram +bbc_pms64k bbc_ramdisc bbc_raven20 bbc_stl1770_1 @@ -233,6 +262,8 @@ bbc_tube_32016 bbc_tube_32016l bbc_tube_6502 +bbc_tube_6502e +bbc_tube_6502p bbc_tube_65c102 bbc_tube_80186 bbc_tube_80286 @@ -295,6 +326,7 @@ c64_nl10 c64_supercpu c64_xl80 +c64_z80videopak c8050 c8050fdc c8250 @@ -319,6 +351,9 @@ cdu415 cdu561_25 cdu75s +centennial_sl01m_15_11194 +centennial_sl02m_15_11194 +centennial_sl04m_15_11194 cffa1 cfp1080s cga @@ -335,20 +370,19 @@ cit101e_kbd cit220p_kbd clgd542x +clgd5465_laguna cmdhd cmdrc2 cmi_ankbd cmi_mkbd cms_4080term cmsscsi -coco2_hdb1 -coco3_hdb1 coco_dcmodem coco_fdc -coco_fdc_v11 coco_orch90 coco_psg coco_rs232 +coco_scii coco_ssc coco_t4426 coco_wpk @@ -362,6 +396,7 @@ comx_pl80 comx_prn comx_thm +cp2024 cp31 cp450_fdc cpc_brunword4 @@ -374,6 +409,7 @@ cpc_smartwatch cpc_ssa1 cpc_transtape +cpuap cq90_028 crd254sh crt9028_000 @@ -381,16 +417,23 @@ crvfdc02 csd1 cuda +cuda302 +cudalite +cv8lc cw7501 d2fdc d9060 d9090 +db50xg +db60xg dc320b dc320e dc820 dc820b dectalk_isa dg640 +digilog_kbd +dim68k_kbd dio98543 dio98544 dio98550 @@ -427,6 +470,8 @@ eispc_kb electron_ap1 electron_ap6 +electron_elksd128 +electron_elksd64 electron_m2105 electron_mc68k electron_mode7 @@ -435,44 +480,54 @@ electron_pwrjoy electron_romboxp electron_sidewndr +electron_voxbox enh2000 +enp10 ep64_exdos epson_pf10 +epson_qx_option_multifont epson_tf20 ergoline_kbd et4000 +et4000_kasan16 +europc_kbd ev346 ex1280 ex800 exorterm155_device +f4431_kbd fc_disksys -fccpu20 -fccpu21 -fccpu21a -fccpu21b -fccpu21s -fccpu21ya -fccpu21yb -fcisio1 -fcscsi1 fd148 fd2000 fd4000 fdc344 fdcmag filetto_cga +freedom220_kbd fsd1 fsd2 +g80_1500 +geforce256 +geforce256ddr gfxultra gfxultrap gic gunsense hardbox hcpu30 -hd44780_a00 +hd44780 +hd44780u hd61830 hd63484 he191_3425 +heath_gp19_tlb +heath_imaginator_tlb +heath_super19_tlb +heath_superset_tlb +heath_tlb +heath_ultra_tlb +heath_watz_tlb +hk68v10 hp82900 hp82937 hp82939 @@ -482,6 +537,7 @@ hp98046 hp9845_prt hp9895 +hpblp human_interface i8244 i8245 @@ -508,16 +564,18 @@ isa_hercules isa_ibm_mda isa_ibm_pgc +isa_ibm_speech isa_pcmidi isbc202 +isbc8024 isbc_215g +jaleco_vj_pc jc1310 jvs13551 k573_dio k573kara k573mcr k573msu -k573npu k7659_keyboard kaypro10kbd kb_3270pc @@ -531,10 +589,15 @@ kbd_lle_en_us kc_d004 kc_d004_gide +keytronic_l2207 keytronic_pc3270 keytronic_pc3270_at km035 -ks0066_f05 +ks0066 +labtam_3232 +labtam_8086cpu +labtam_vducom +labtam_z80sbc lba_enhancer lc7985 ldp1000 @@ -575,6 +638,9 @@ mc1502_rom md_kbd md_rom_svp +mg1_kbd_device +mga2064w +microtan_kbd_mt009 microtouch midcsd midssio @@ -595,6 +661,8 @@ mpcba79 mpcbb68 mpcbb92 +mps1200 +mps1250 mpu401 ms7004 msdsd1 @@ -609,7 +677,9 @@ msx_cart_easispeech msx_cart_sfg01 msx_cart_sfg05 +msx_cart_skw01 msx_moonsound +mtx_cfx mtx_sdxbas mtx_sdxcpm mulcd @@ -617,7 +687,14 @@ mvme121 mvme122 mvme123 +mvme147 +mvme180 +mvme181 +mvme187 +mvme327a mvme350 +mzr8105 +nabupc_keyboard namco50 namco51 namco52 @@ -637,8 +714,6 @@ namcoc76 nanoreseau_mo nanoreseau_to -nb_48gc -nb_824gc nb_aenet nb_amc3b nb_btbug @@ -647,17 +722,23 @@ nb_laserview nb_m2hr nb_m2vc +nb_mdc48 +nb_mdc824 nb_qdlink nb_rtpd nb_sp8s3 nb_spdq +nb_thungx nb_vikbw nb_wspt +nes_rob newbrain_eim newbrain_fdc +nlq401 nmk004 novell_dcb np600a3 +omniwave omti8621isa oric_jasmin oric_microdisc @@ -674,6 +755,7 @@ pc1640_iga pc80s31 pc80s31k +pc88va2_fd_if pc9801_118 pc9801_26 pc9801_55l @@ -689,8 +771,10 @@ pd3_lviw pd3_mclr pd3_pc16 +pds30_emac pds_hyper pds_sefp +pdslc_macconlc pet_softbox pet_superpet pg200 @@ -698,9 +782,18 @@ polyvti pr8210 premier_fdc +profighterq +profighterqa +profighterqb +profighterx +promotion3210 ps2_keybc +psion_3fax +psion_3link_ser psx_cd psxgboost +pvga1a +pvga1a_jk px320a ql_cumanafdi ql_gold @@ -725,7 +818,22 @@ qsound qsound_hle qts1 -qx10_keyboard +quadro +qx10_keyboard_ascii +qx10_keyboard_hasci +rageiidvd +rc2014_micro +rc2014_mini_cpm +rc2014_pagable_rom +rc2014_rom_ram_512k +rc2014_switchable_rom +riva128 +riva128zx +rivatnt +rivatnt2 +rivatnt2_m64 +rivatnt2_ultra +robotron_k7070 rolm_pdc rolm_smioc rtpc_kbd @@ -760,22 +868,33 @@ sb300p sbus_hme sbus_sunpc +sc119 sdtandy_fdc sed1200da sed1200db sed1200fa sed1200fb -sed1278_0b +sed1278 sed1330 sega837_14438 +segaai_soundbox segabill segadimm seganetw sente6vb -sfd10001 +serad +sfd1001 +sgi_ip4 +sgi_kbd side116 simutrek +sis630_gui +sis900_eth smoc501 +sms_diypaddle +smvme2000 +sn74s262 +sn74s263 sns_dsp1bleg sns_dsp1leg sns_dsp1leg_hi @@ -808,8 +927,13 @@ spectrum_lprint3 spectrum_mface1 spectrum_mface128 +spectrum_mface128v1 +spectrum_mface1v1 +spectrum_mface1v2 +spectrum_mface1v3 spectrum_mface3 spectrum_mikroplus +spectrum_mpoker spectrum_mprint spectrum_opus spectrum_plus2test @@ -818,22 +942,44 @@ spectrum_sdi spectrum_spdos spectrum_speccydos +spectrum_specmate spectrum_swiftdisc spectrum_swiftdisc2 spectrum_usource spectrum_uspeech spectrum_wafa +st_kbd stereo_fx stic sv603 sv806 +sw1000xg swtpc8212_device sx1541 +sys68k_cpu1 +sys68k_cpu20 +sys68k_cpu21 +sys68k_cpu21a +sys68k_cpu21b +sys68k_cpu21s +sys68k_cpu21ya +sys68k_cpu21yb +sys68k_cpu30 +sys68k_cpu30be +sys68k_cpu30lite +sys68k_cpu30x +sys68k_cpu30xa +sys68k_cpu30za +sys68k_cpu33 +sys68k_iscsi1 +sys68k_isio1 t5182 -tanbus_ra32k +tanbus_ra32krom tanbus_tandos tanbus_tanex tanbus_vid8082 +tandberg_tdv2100_disp_logic +tandberg_tdv2100_keyboard tandy2kb technica tek410x_kbd @@ -851,6 +997,7 @@ ti99_pcode ti99_rs232 ti99_speech +ti99_tipi ti99_whtscsi ti_hx5102 tiki100_8088 @@ -859,12 +1006,14 @@ tms32031 tms32032 tms32033 +tp881v trs80m2kb turbogx turbogxp tv950kb tv955kb tvc_hbf +tvga9000 ultra12f ultra12f32 ultra14f @@ -875,6 +1024,8 @@ v102_kbd v1050kb v550_kbd +vanta +vector4_kbd vic1515 vic1520 vic20_fe3 @@ -884,7 +1035,8 @@ virge_pci virgedx_pci voicebox -votrax +votrsc01 +votrsc01a vp700 vtech_fdc vtech_rs232 @@ -898,7 +1050,16 @@ wangpckb wd1002a_wx1 wd1007a +wd90c00_jk +wd90c11_lr +wd90c30_lr +wd90c31_lr +wd90c31a_lr +wd90c31a_zs +wd90c33_zz +wd90c90_jk wdxt_gen +wg130 wyse700 x68k_cz6bs1 x820kb @@ -910,6 +1071,7 @@ ymf281 z8671 z8682 +zip100_ide zorba_kbd zorro_a2091 zorro_a590 @@ -917,3 +1079,4 @@ zorro_ar2 zorro_ar3 zorro_buddha +zxbus_neogs diff --git a/resources/mamenames.xml b/resources/mamenames.xml index 305bd928cd..91a87a579a 100644 --- a/resources/mamenames.xml +++ b/resources/mamenames.xml @@ -1,4 +1,4 @@ - + 005 005 @@ -7,6 +7,10 @@ 100lions 100 Lions (10219211, NSW/ACT) + + 100lionsa + 100 Lions (30223811, ASP) + 10yard 10-Yard Fight (World, set 1) @@ -113,7 +117,7 @@ 1943b2 - 1943: The Battle of Midway (bootleg set 2, hack of Japan set) + 1943: Battle of Midway (bootleg set 2, hack of Japan set) 1943bj @@ -227,6 +231,14 @@ 19xxu 19XX: The War Against Destiny (USA 951207) + + 19yy + 19YY (Neo CD conversion, ADK World) + + + 19yyo + 19YY (Neo CD conversion, ADK World)(Original release) + 1on1gov 1 on 1 Government (Japan) @@ -389,7 +401,7 @@ 3wondersha - Three Wonders (bootleg set 3, wonder 3 910520 etc) + Three Wonders (bootleg set 2) 3wondersr1 @@ -415,6 +427,10 @@ 40love Forty-Love (World) + + 40lovebl + Forty-Love (bootleg) + 40lovej Forty-Love (Japan) @@ -508,8 +524,12 @@ 50 Lions (10120511, NSW/ACT) - 50lionsm - 50 Lions (10156111, Malaysia) + 50lionsa + 50 Lions (10156111, ASP) + + + 50lionsu + 50 Lions (0152077, US) 5acespkr @@ -531,18 +551,30 @@ 5drag 5 Dragons (20161011, NSW/ACT) + + 5draga + 5 Dragons (10176611, ASP) + 5dragce 5 Dragons - Cash Express (0152309, US) + + 5dragnz + 5 Dragons (10178611, New Zealand) + 5dragsp 5 Dragons (20161011, NSW/ACT, Show Program) - 5koipp + 5koi 5 Koi - Power Pay (10250711, NSW/ACT) + + 5koia + 5 Koi - Power Pay (1J016211, ASP) + 600 600 @@ -719,6 +751,10 @@ a51site4a Area 51: Site 4 (HD Rev 2.0, September 11, 1998) + + a7lucky88 + Lucky 88 (Aristocrat MK-7) + aa Alien Armada @@ -741,7 +777,7 @@ aafbd2p - All American Football (rev D, 2 Players) + All American Football (rev D, 2 players) aar_101 @@ -843,9 +879,13 @@ aburner2g After Burner II (German) + + abv105 + Airborne (1.5) + abv106 - Airborne + Airborne (1.6) abv106r @@ -1059,9 +1099,17 @@ aceattaca Ace Attacker (Japan, System 16A, FD1094 317-0060) + + acedriv3 + Ace Driver 3: Final Turn + + + acedrive + Ace Driver: Racing Evolution (World, AD2) + acedrvrw - Ace Driver: Racing Evolution (Rev. AD2, World) + Ace Driver (Rev. AD2, World) acefruit @@ -1107,6 +1155,10 @@ acrobatm Acrobat Mission + + acrobatmbl + Acrobat Mission (bootleg with Raiden sounds) + act2000 Action 2000 (Version 3.5E Dual) @@ -2197,11 +2249,11 @@ adillor - Armadillo Racing (Rev. AM2 Ver.A, World) + Armadillo Racing (World, AM2 Ver.A) adillorj - Armadillo Racing (Rev. AM1 Ver.A, Japan) + Armadillo Racing (Japan, AM1 Ver.A) adonis @@ -2493,7 +2545,7 @@ airco22b - Air Combat 22 (Rev. ACS1 Ver.B, Japan) + Air Combat 22 (Japan, ACS1 Ver.B) aircomb @@ -2571,6 +2623,10 @@ akatana Akai Katana (2010/ 8/13 MASTER VER.) + + akazukin + Akazukin (Japan) + aking Angler King (Japan, AG1 Ver. A) @@ -2601,7 +2657,7 @@ albatross - Albatross (US Prototype?) + Albatross (US prototype?) alcapone @@ -2623,10 +2679,6 @@ alcon Alcon (US) - - alexkida - Alex Kidd: The Lost Stars (set 2) - alexkidd Alex Kidd: The Lost Stars (set 2, unprotected) @@ -2653,7 +2705,7 @@ alien - Alien: The Arcade Medal Edition + Alien: The Arcade Medal Edition (satellite) alien3 @@ -2749,7 +2801,7 @@ aliensu2 - Aliens (US set 2) + Aliens (US, set 2) aliensya @@ -2881,27 +2933,31 @@ alpinerc - Alpine Racer (Rev. AR2 Ver.C, World) + Alpine Racer (World, AR2 Ver.C) alpinerd - Alpine Racer (Rev. AR2 Ver.D, World) + Alpine Racer (World, AR2 Ver.D) alpinerjc - Alpine Racer (Rev. AR1 Ver.C, Japan) + Alpine Racer (Japan, AR1 Ver.C) + + + alpines + Alpine Surfer (World, AF2 Ver.A, set 1) alpinesa - Alpine Surfer (Rev. AF2 Ver.A, World) + Alpine Surfer (World, AF2 Ver.A, set 2) alpinr2a - Alpine Racer 2 (Rev. ARS2 Ver.A, World) + Alpine Racer 2 (World, ARS2 Ver.A) alpinr2b - Alpine Racer 2 (Rev. ARS2 Ver.B, World) + Alpine Racer 2 (World, ARS2 Ver.B) alpok_f6 @@ -2919,6 +2975,10 @@ altair Altair + + altair2 + Altair II + altaten Alta Tensione (ver. 2.01a) @@ -2981,7 +3041,7 @@ am_mg24a - Multi Game I (unknown V2.4) + Multi Game I (V.Stm 2.7) am_mg3 @@ -3007,13 +3067,17 @@ am_mg3a Multi Game III (V.Ger 3.64) + + am_mg4sk + Multi Game IV (AMGSK_VA3.85) + am_mg4v Multi Game IV (V.Ger 3.44) am_mg5hu - Multi Game V (AMGHU_V83.65) + Multi Game V (AMGHU_VB3.65) amatelas @@ -3055,6 +3119,10 @@ amazonkp Amazonia King Plus (V204BR) + + amazonsp + Amazon Spirit (Konami Endeavour, NSW) + amazont Soldier Girl Amazon (Tecfri license) @@ -3111,6 +3179,14 @@ amerihok Ameri-Hockey + + amerug + Amerug (Shoei bootleg of Atari Football) + + + amhbattl + Acchi Muite Hoi Battle + amidar Amidar @@ -3121,7 +3197,11 @@ amidarb - Amidar (bootleg) + Amidar (bootleg, set 1) + + + amidarb2 + Amidar (bootleg, set 2) amidarc @@ -3245,11 +3325,11 @@ andretti - Mario Andretti + Mario Andretti (rev.T4) - andretti4 - Mario Andretti (rev.T4) + andretti0 + Mario Andretti androdun @@ -3335,6 +3415,18 @@ animalc Animal Catch + + animalhs + Animal House (V1.0, set 1) + + + animalhsa + Animal House (V1.0, set 2) + + + animalhsb + Animal House (set 3) + animaljr Exciting Animal Land Jr. (USA, Canada, Mexico) @@ -3347,6 +3439,10 @@ animaljrs Animalandia Jr. (Spanish) + + animalw + Animal Wonders (ver A900) + animechmp Anime Champ (GCA07 VER. JAA) @@ -3391,6 +3487,14 @@ anpanman2 Soreike! Anpanman Popcorn Koujou 2 (Rev C) + + anpanman2a + Soreike! Anpanman Popcorn Koujou 2 (Rev A) + + + anpanmana + Soreike! Anpanman Popcorn Koujou (Rev A) + antar Antar (set 1) @@ -3404,8 +3508,8 @@ Antony and Cleopatra (10163211, NSW/ACT) - antcleom - Antony and Cleopatra (10177211, Malaysia) + antcleoa + Antony and Cleopatra (10177211, ASP) anteater @@ -3529,19 +3633,19 @@ apollo13 - Apollo 13 (5.01) + Apollo 13 (CPU 5.01, display A5.00) apollo13_10 - Apollo 13 (1.00) + Apollo 13 (CPU 1.00, display A1.00) apollo13_20 - Apollo 13 (2.03) + Apollo 13 (CPU 2.03, display A2.01) apollo13_d4 - Apollo 13 (5.01, Display 4.01) + Apollo 13 (CPU 5.01, display A4.01) aponow @@ -3577,11 +3681,19 @@ aquajet - Aqua Jet (Rev. AJ2 Ver.B, World) + Aqua Jet (World, AJ2 Ver.B) aqualand - Aqualand + Aqualand (set 1) + + + aqualanda + Aqualand (set 2) + + + aquario + Clockwork Aquario (prototype) aquarium @@ -3641,15 +3753,15 @@ ar_ldrb - Leader Board (Arcadia, set 1, V 2.5) + Leader Board Golf (Arcadia, set 1, V 2.5) ar_ldrba - Leader Board (Arcadia, set 2, V 2.4) + Leader Board Golf (Arcadia, set 2, V 2.4) ar_ldrbb - Leader Board (Arcadia, set 3) + Leader Board Golf (Arcadia, set 3) ar_ninj @@ -3735,21 +3847,33 @@ arabnga6 Arabian Nights (2J008211, NSW/ACT) + + arabnga6a + Arabian Nights (10122611, ASP) + arabnga6u Arabian Nights (0151356, US) - arac6000 - Super Six Plus II English Mark Darts + arac6k27 + Super Six Plus II English Mark Darts (v2.7) + + + arac6k28sp + Super Six Plus II English Mark Darts (v2.8, Spanish) - arac6spa - Super Six Plus II English Mark Darts (Spanish) + arac6k33 + Super Six Plus II English Mark Darts (v3.3) aracnis - Aracnis (bootleg of Scorpion on Moon Cresta hardware) + Aracnis (bootleg of Scorpion on Moon Cresta hardware, set 1) + + + aracnisa + Aracnis (bootleg of Scorpion on Moon Cresta hardware, set 2) arbalest @@ -3789,7 +3913,7 @@ arcwins - Arctic Wins (4XF5227H03, USA) + Arctic Wins (4XF5227H03, US) area51 @@ -3919,6 +4043,10 @@ arkanoidjbla Arkanoid (bootleg with MCU, alt) + + arkanoidpe + Arkanoid (Phoenix Electronics Co. license) + arkanoidu Arkanoid (US, newer) @@ -3937,7 +4065,11 @@ arkatour - Tournament Arkanoid (US) + Tournament Arkanoid (US, older) + + + arkatour2 + Tournament Arkanoid (US, newer) arkbl2 @@ -4027,6 +4159,14 @@ arlingtna Arlington Horse Racing (v1.21-D) + + armada + Armada + + + armchamp + Arm Champs (Japan) + armchmp2 Arm Champs II (ver 2.7) @@ -4945,7 +5085,7 @@ astoneag - Stone Age (Astro, Ver. ENG.03.A) + Stone Age (Astro, Ver. EN.03.A, 2005/02/21) astorm @@ -5047,6 +5187,10 @@ astrofl Astro Flash (Japan) + + astroft + Astro Fighter (Taito) + astron Astron Belt @@ -5241,7 +5385,7 @@ atlantip - Atlantis + Atlantis (rev. 3) atlantis @@ -5321,11 +5465,15 @@ attackf - Attack (Defender bootleg) + Attack (bootleg of Defender) attackfc - Attack Force + Attack Force (encrypted) + + + attackfcu + Attack Force (unencrypted) attckexd @@ -5375,10 +5523,6 @@ aurail1d Aurail (set 2, World) (bootleg of FD1089B 317-0168 set) - - auraila - Aurail (set 2) - aurailj Aurail (set 1, Japan) (FD1089A 317-0167) @@ -5393,35 +5537,35 @@ aust201 - Austin Powers (2.01) + Austin Powers (CPU 2.01, display A2.00) aust300 - Austin Powers (3.00) + Austin Powers (CPU 3.00, display A3.00) aust301 - Austin Powers (3.01) + Austin Powers (CPU 3.01, display A3.00) austin - Austin Powers (3.02) + Austin Powers (CPU 3.02, display A3.00) austinf - Austin Powers (France) + Austin Powers (CPU 3.02, display F3.00, France) austing - Austin Powers (Germany) + Austin Powers (CPU 3.02, display G3.00, Germany) austini - Austin Powers (Italy) + Austin Powers (CPU 3.02, display I3.00, Italy) austnew - Austin Powers (ARM7 Sound Board) + Austin Powers (CPU 3.02, display A3.00, ARM7 sound board) autmoon @@ -5545,16 +5689,28 @@ avengers - Avengers (US set 1) + Avengers (US, revision C) - avengers2 - Avengers (US set 2) + avengersa + Avengers (US, revision A) + + + avengersb + Avengers (US) + + + avengersc + Avengers (US, unknown revision) avengrgs Avengers In Galactic Storm (US/Europe 1.0) + + avengrgsbh + Avengers In Galactic Storm (Playable Boss, Hack) + avengrgsj Avengers In Galactic Storm (Japan 1.2) @@ -5693,11 +5849,11 @@ b85hilo - Hi Lo Silver (System 85, set 1) + Hi-Lo Silver (System 85, set 1) b85hiloa - Hi Lo Silver (System 85, set 2) + Hi-Lo Silver (System 85, set 2) b85jkwld @@ -5829,12 +5985,16 @@ baddudes - Bad Dudes vs. Dragonninja (US revision 1) + Bad Dudes vs. Dragonninja (US, revision 1) badgirls Bad Girls + + badgirlsa + Bad Girls (alternate set) + badgirlsf Bad Girls (French) @@ -5855,6 +6015,10 @@ badlandsb2 Bad Lands (bootleg, alternate) + + badlandsm + Bad Lands (Modular System) + bagman Bagman @@ -5947,6 +6111,14 @@ ballbros Balloon Brothers + + ballch + Ball Challenge (20020607 1.0 OVERSEA) + + + ballpom + Ball Pom Line + balonfgt Vs. Balloon Fight (set BF4 A-3) @@ -6007,6 +6179,10 @@ bankp Bank Panic + + bankpt + Bank Panic (Tecfri bootleg) + bankrob Bank Robbery (Ver. 3.32) @@ -6055,6 +6231,10 @@ barek3mb Bare Knuckle III (bootleg of Mega Drive version) + + barek3mba + Bare Knuckle III (bootleg of Mega Drive version, protected) + barekch Bare Knuckle (Chinese bootleg of Mega Drive version) @@ -6249,12 +6429,20 @@ batsuguna - Batsugun (older set) + Batsugun (older, set 1) batsugunb Batsugun (Korean PCB) + + batsugunbl + Batsugun (bootleg) + + + batsugunc + Batsugun (older, set 2) + batsugunsp Batsugun - Special Version @@ -6363,6 +6551,10 @@ bay_f201 Baywatch (2.01 French) + + bay_g300 + Baywatch (3.00 German) + bayrouta Bay Route (set 2) @@ -6415,6 +6607,66 @@ bazookabr Bazooka (Brazil) [TTL] + + bb_21up + 21 Up (Bellfruit) (Black Box) (5p Stake, £1 Jackpot) + + + bb_21upa + 21 Up (Bellfruit) (Black Box) (10p Stake, £2 Jackpot) + + + bb_bellt + Bell Trail (Bellfruit) (Black Box) (5p Stake, £1 Jackpot) + + + bb_cjack + Crackerjack (Bellfruit) (Black Box) (5p Stake, £2 Jackpot) + + + bb_dblit + Double It (Bellfruit) (Black Box) (10p Stake, £2 Jackpot) + + + bb_fiest + Fiesta (Associated Leisure) (Black Box) (2p Stake, £1/£2 Jackpot) + + + bb_firec + Fire Cracker (Bellfruit) (Black Box) (10p Stake, £2 Jackpot) + + + bb_gspin + Golden Spin (BWB) (Black Box) (MK1.5, 5p Stake, £50 Jackpot) + + + bb_nudcl + Nudge Climber (Bellfruit) (Black Box) (5p Stake, £1 Jackpot, all cash) + + + bb_nudgm + The Nudge Machine (ADMC) (Black Box) (5p Stake, £1/£2 Jackpot) + + + bb_oal + Oranges And Lemons (Bellfruit) (Black Box) (10p Stake, £2 Jackpot) + + + bb_reelg + Reel Gambler (Bellfruit) (Black Box) (10p Stake, £2 Jackpot) + + + bb_spinu + Spin Up (CTL) (Black Box) (10p Stake, £3 Jackpot) + + + bb_upndn + Upstairs 'N' Downstairs (Bellfruit) (Black Box) (5p Stake, £1 Jackpot) + + + bb_upndna + Upstairs 'N' Downstairs (Bellfruit) (Black Box) (5p Stake, £1 Jackpot, all cash) + bbakradu Battle Bakraid - Unlimited version (Japan) (Tue Jun 8 1999) @@ -6459,6 +6711,14 @@ bbb109 Big Bang Bar (Beta 1.9 US) + + bbbingo + Bin Bin Bingo (Japan, main unit) + + + bbbingot + Bin Bin Bingo (Japan, terminal) + bbbowlin Big Ball Bowling (Bowler) @@ -6543,10 +6803,18 @@ bbnny_l2 Bugs Bunny Birthday Ball (L-2) + + bbnny_lg + Bugs Bunny Birthday Ball (LG-2) German + bbnny_lu Bugs Bunny Birthday Ball (LU-2) European + + bbombo + Baby & Bombo + bbonk Bigfoot Bonkers @@ -6565,7 +6833,7 @@ bbust2 - Beast Busters 2nd Nightmare + Beast Busters: Second Nightmare bbusters @@ -6819,6 +7087,26 @@ bellring Bell Ringer + + bellstr1 + Bell-Star+ 5 (Vip2 v.3.6.02) + + + bellstr2 + Bell-Star+ (Vip2 v.25.02.02) + + + bellstr3 + Bell-Star+ (Vip2 v.30.1.02) + + + bellstrp + Bell Star Plus + + + bellybmbr + Belly Bomber + belslots Bel Slots Export (5.01) @@ -6841,7 +7129,7 @@ berenstn - The Berenstain Bears in Big Paw's Cave + The Berenstain Bears in Bigpaw's Cave berlwall @@ -6927,10 +7215,18 @@ bestria Bestri (Korea, set 2) + + betafrce + Beta Force + betzoo Betting Zoo - Mr. Cashman (0251064, US) + + bformula2 + Baby Formula 2 + bg_barmy Barmy Army (BGT) @@ -6953,11 +7249,15 @@ bgareggabl - 1945 Part-2 (Chinese hack of Battle Garegga) + 1945 Er Dai / 1945 Part-2 (Chinese hack of Battle Garegga) bgareggabla - Lei Shen Zhuan Thunder Deity Biography (Chinese hack of Battle Garegga) + Leishen Chuan / Thunder Deity Biography (Chinese hack of Battle Garegga) + + + bgareggablj + Battle Garegga (Japan, bootleg) (Sat Feb 3 1996) bgareggacn @@ -6967,6 +7267,10 @@ bgareggahk Battle Garegga (Austria / Hong Kong) (Sat Feb 3 1996) + + bgareggak + Battle Garegga (Korea / Greece) (Wed Feb 7 1996) + bgaregganv Battle Garegga - New Version (Austria / Hong Kong) (Sat Mar 2 1996) @@ -6987,6 +7291,14 @@ bgareggaz Battle Garegga Zakk version (Europe / USA / Japan / Asia) (Sat Feb 3 1996) + + bgbasketb + Basketball (Benchmark Games, set 1) + + + bgbasketbb + Basketball (Benchmark Games, set 2) + bguns_l7 Big Guns (L-7) @@ -7033,7 +7345,11 @@ bigbang - Big Bang (9th Nov. 1993) + Big Bang (9th Nov. 1993, set 1) + + + bigbanga + Big Bang (9th Nov. 1993, set 2) bigbat @@ -7047,6 +7363,10 @@ bigbena Big Ben (20126911, NSW/ACT) + + bigbenb + Big Ben (10169611, ASP) + bigbenq Big Ben (20201111, Queensland) @@ -7135,9 +7455,17 @@ bigkong Big Kong + + bigkonggx + Big Kong (bootleg of Crazy Kong on Galaxian hardware) + bigprowr - The Big Pro Wrestling! + The Big Pro Wrestling! (set 1) + + + bigprowra + The Big Pro Wrestling! (set 2) bigred @@ -7217,7 +7545,7 @@ billiard - The Billiards (Video Hustler bootleg) + The Billiards (bootleg of Video Hustler) billlist @@ -7243,6 +7571,10 @@ bingogal Bingo Galaxy (main) + + bingogalo + Bingo Galaxy (main) (MDA-C0039A) + bingogals Bingo Galaxy (satellite) @@ -7255,6 +7587,14 @@ bingomana Bingo Mania (A03) + + bingopar + Bingo Parade (main) (MDA-C0008E) + + + bingopd + Paradise (Industrias Brasileiras, Version 1.04) + bingor1 Bingo Roll / Bell Star? (set 1) @@ -7279,6 +7619,18 @@ bingor6 Bingo Roll / Turbo Bingo? + + bingor7 + Bingo Roll (209 / 19-1-95) + + + bingor8 + Bingo Roll 2001 (v22.1) + + + bingor9 + Bingo Roll (Vip2 v26.02.02) + bingowav Bingo Wave @@ -7361,15 +7713,19 @@ birdtry - Birdie Try (Japan revision 2, revision 1 MCU) + Birdie Try (Japan, revision 2, revision 1 MCU) birdtrya - Birdie Try (Japan revision 2) + Birdie Try (Japan, revision 2) + + + birdtryb + Birdie Try (Japan, sample version) bishi - Bishi Bashi Championship Mini Game Senshuken (ver JAA, 3 Players) + Bishi Bashi Champ Mini Game Senshuken (ver JAA, 3 Players) bishjan @@ -7443,6 +7799,10 @@ bk_f4 Black Knight (L-4, French speech) + + bk_l2 + Black Knight (L-2) + bk_l3 Black Knight (L-3) @@ -7471,6 +7831,10 @@ bktigerb Black Tiger (bootleg) + + bkungfu + Beyond Kung-Fu (location test) + black Czernyj Korabl (Arcade bootleg of ZX Spectrum 'Blackbeard') @@ -7667,9 +8031,13 @@ bldyror2u Bloody Roar 2 (USA) + + blicks + Blicks (Japan) + blitz - NFL Blitz (ver 1.21, Dec 5 1987) + NFL Blitz (ver 1.21, Dec 5 1997) blitz2k @@ -7691,10 +8059,6 @@ blkbustr BlockBuster - - blkdrgnb - Black Dragon (bootleg) - blkdrgon Black Dragon (Japan) @@ -7745,6 +8109,10 @@ blkrhino + Black Rhino (4VXFC830, NSW) + + + blkrhinonz Black Rhino (3VXFC5344, New Zealand) @@ -7924,21 +8292,25 @@ Blood Storm (v2.22) - bloodstm10 + bloodstm104 Blood Storm (v1.04) - bloodstm11 + bloodstm110 Blood Storm (v1.10) - bloodstm21 + bloodstm210 Blood Storm (v2.10) - bloodstm22 + bloodstm220 Blood Storm (v2.20) + + bloodstm221 + Blood Storm (v2.21) + bloodwar Blood Warrior @@ -7959,6 +8331,14 @@ bloxeed Bloxeed (Japan) (FD1094 317-0139) + + bloxeeda + Bloxeed (Japan, earlier) (FD1094 317-0139) + + + bloxeedbl + Bloxeed (bootleg) + bloxeedc Bloxeed (World, C System) @@ -7991,6 +8371,10 @@ blpearld Black Pearl (Ukraine, V. 42.01) + + blshark + Blue Shark (MDS Hellas) + blsthead Blasteroids (with heads) @@ -8115,6 +8499,10 @@ bm3final Beatmania III The Final + + bm3rdeaa + beatmania 3rd MIX (ver EA-A) + bm3rdmix beatmania 3rd MIX (ver JA-A) @@ -8161,6 +8549,10 @@ bmcompmx + beatmania complete MIX (ver JA-C) + + + bmcompmxb beatmania complete MIX (ver JA-B) @@ -8307,10 +8699,18 @@ bmiidxsa beatmania IIDX Substream (983-AA JAA) + + bmoonii + Blue Moon II + bmx BMX + + bmxstunts + BMX Stunts + bnglngby Vs. Raid on Bungeling Bay (RD4-2 B) @@ -8335,9 +8735,13 @@ bnstars1 Vs. Janshi Brandnew Stars + + bnstlkr + Bonus Talker + bntyhunt - Bounty Hunter (GCTech Co., LTD) + Bounty Hunter (GC-Tech Co., LTD) bnzabros @@ -8363,6 +8767,10 @@ bnzai_pa Banzai Run (P-A) + + boasorte + Boa Sorte! (Golden Poker prequel HW) + boatrace Exciting Boat Race @@ -8399,6 +8807,10 @@ boggy84b2 Boggy '84 (bootleg, set 2) + + bolsaint + Bolsa Internacional (euro) + bombaway Bombs Away [TTL] @@ -8423,6 +8835,10 @@ bombjack2 Bomb Jack (set 2) + + bombjackbl + Bomb Jack (bootleg) + bombjackt Bomb Jack (Tecfri, Spain) @@ -8475,6 +8891,10 @@ bonkadv B.C. Kid / Bonk's Adventure / Kyukyoku!! PC Genjin + + bonkadva + Bonk's Adventure (prototype) + bonusch Bonus Chance (W-8) @@ -8497,15 +8917,19 @@ bonzeadv - Bonze Adventure (World, Newer) + Bonze Adventure (World, newer) bonzeadvo - Bonze Adventure (World, Older) + Bonze Adventure (World, older) bonzeadvp - Bonze Adventure (World, prototype) + Bonze Adventure (World, prototype, newer) + + + bonzeadvp2 + Bonze Adventure (World, prototype, older) bonzeadvu @@ -8613,7 +9037,11 @@ borntofi - Born To Fight + Born To Fight (set 1) + + + borntofia + Born To Fight (set 2) borntofiv @@ -8621,7 +9049,19 @@ bosco - Bosconian - Star Destroyer (new version) + Bosconian - Star Destroyer (version 5) + + + bosco1 + Bosconian - Star Destroyer (version 1, newer) + + + bosco1o + Bosconian - Star Destroyer (version 1, older) + + + bosco3 + Bosconian - Star Destroyer (version 3) boscomd @@ -8633,11 +9073,11 @@ boscoo - Bosconian - Star Destroyer (old version) + Bosconian (old version) boscoo2 - Bosconian - Star Destroyer (older version) + Bosconian (older version) botanic @@ -8719,6 +9159,10 @@ bowler Bowling Alley + + bowlgum + Bowling Gum + bowlrama Bowl-O-Rama Rev 1.0 @@ -8739,6 +9183,10 @@ bowltry Bowling Try! + + bowmen + Bowmen + boxer Boxer (prototype) @@ -8805,7 +9253,11 @@ brapboysp - B.Rap Boys Special (World) + B.Rap Boys Special (World, newer) + + + brapboysp2 + B.Rap Boys Special (World, older) brapboyspj @@ -8847,6 +9299,10 @@ brazil Brazil (20180311, NSW/ACT) + + brazila + Brazil (10218511, ASP) + brdrlinb Borderline (Karateco bootleg) @@ -8887,6 +9343,10 @@ breywood Breywood (Japan revision 2) + + brglitz + Ballroom Glitz + brickppl Brick People / Block PeePoo (Ver 1.002) @@ -8941,12 +9401,20 @@ brkrevext - Breakers Revenge - Extra Mode (Hack) + Breakers Revenge (Extra Mode, Hack) + + + brkrevjq + Breakers Revenge (Enhanced, Hack) brkthru Break Thru (US) + + brkthrubl + Break Thru (bootleg) + brkthruj Kyohkoh-Toppa (Japan) @@ -9015,6 +9483,10 @@ bsb105 Breakshot (Beta) + + bscompmx + beatstage complete MIX (ver KA-B) + bsebman Bomberman (Version 6.6) @@ -9163,6 +9635,10 @@ bsuertev Buena Suerte (Spanish/Portuguese, set 23) + + bsuprem + Baby Suprem + bsv100r Breakshot (Redemption 1.0) @@ -9215,6 +9691,10 @@ btlfieldb Battle Field (bootleg) + + btlfront + BattleFront + btlkroad Battle K-Road @@ -9255,6 +9735,10 @@ btorneo Bubble Torneo + + btplay2k + Beat Player 2000 + bttf_a20 Back to the Future - The Pinball (2.0) @@ -9305,7 +9789,7 @@ bubblesp - Bubbles (prototype version) + Bubbles (prototype) bubblesr @@ -9313,16 +9797,20 @@ bubbletr - Bubble Trouble - Golly Ghost 2 (World, Rev B) + Bubble Trouble - Golly! Ghost! 2 (World, Rev B) bubbletrj - Bubble Trouble - Golly Ghost 2 (Japan, Rev C) + Bubble Trouble - Golly! Ghost! 2 (Japan, Rev C) bubbobr1 Bubble Bobble (US) + + bubbroul + Bubblen Roulette (Japan, main ver. 1.8, video ver. 1.3) + bubl2000 Bubble 2000 @@ -9435,6 +9923,10 @@ bucaneer Buccaneer (Aristocrat, 10173011, NSW/ACT) + + bucaneera + Buccaneer (Aristocrat, 10181911, ASP) + bucaneeru Buccaneer (Aristocrat, 0252523, US) @@ -9511,6 +10003,10 @@ buffalo Buffalo (10217811, NSW/ACT) + + buffaloa + Buffalo (20232611, ASP) + buffalou Buffalo (0252636, US) @@ -9604,7 +10100,7 @@ Bumble Bugs (0200510V, NSW/ACT) - bumblbugql + bumblbugq Bumble Bugs (0200456V, Queensland) @@ -9625,11 +10121,15 @@ buraiken - Hissatsu Buraiken (Japan) + Hissatsu Buraiken (Japan, rev. A) buraikenb - Hissatsu Buraiken (Japan, bootleg?) + Hissatsu Buraiken (Japan, bootleg) + + + burgkids + Burger Kids (Japan) burglarx @@ -9637,7 +10137,7 @@ buriki - Buriki One (rev.B) + Buriki One: World Grapple Tournament '99 in Tokyo (rev.B) burnforc @@ -9701,6 +10201,10 @@ butrfly + Butterfly Video Game (version A00) + + + butrflybl Butterfly Video Game (version U350C) @@ -9893,15 +10397,19 @@ cafebrk - Mahjong Cafe Break + Mahjong Cafe Break (Ver. 1.01J) cafedoll - Mahjong Cafe Doll (Japan) + Mahjong Cafe Doll (Japan, Ver. 1.00) + + + cafedollg + Mahjong Cafe Doll Great (Japan, Ver. 1.00) cafepara - Mahjong Cafe Paradise + Mahjong Cafe Paradise (Ver. 1.00) cafetime @@ -9911,6 +10419,10 @@ cairblad Change Air Blade (Japan) + + cakefght + Cake Fighter (hack of Twinkle Star Sprites) + calchase California Chase @@ -10135,6 +10647,50 @@ captavuu Captain America and The Avengers (US Rev 1.6) + + captc1v4 + Captain Commando (1v4, Hack) + + + captcm2y + Captain Commando (Master, Hack) + + + captcmcr + Captain Commando (CR7 Elite, Hack) + + + captcmdw + Captain Commando (Warriors, Hack) + + + captcmjy + Captain Commando (Elite Competition, Hack) + + + captcmmy + Captain Commando (Incubus, Hack) + + + captcmsc + Captain Commando (Switchable Character, Hack) + + + captcmsh + Captain Commando (Contest, Hack) + + + captcmwx + Captain Commando (Infinite Bullets, Hack) + + + captcmzs + Captain Commando (God of War, Hack) + + + captcmzt + Captain Commando (Journey, Hack) + captcomj Captain Commando (Japan 911202) @@ -10163,18 +10719,10 @@ captcommjr1 Captain Commando (Japan 910928) - - captcommp4 - Captain Commando (Enhanced edition 1 V 4, Hack) - captcommr1 Captain Commando (World 911014) - - captcommr1pwx - Captain Commando (Unlimited Bullet) - captcommu Captain Commando (USA 910928) @@ -10187,6 +10735,10 @@ captflag Captain Flag (Japan) + + captre + Captain Commando Readjusted (Hack, v1.2) + capunc Capitan Uncino (Nazionale Elettronica, Ver 1.2) @@ -10203,6 +10755,10 @@ caractn2 Car Action (set 2) + + caramball + Caramball + carb2002 Carriage Bonus 2002 (bootleg) @@ -10211,6 +10767,10 @@ carb2003 Carriage Bonus 2003 (bootleg) + + carboule + Caribbean Boule (M1 Satellite board) + cardline Card Line @@ -10383,6 +10943,10 @@ castawaya Castaway (Russia) (Atronic) (set 2) + + castawayt + Cast Away (dual 6809 GI Australasia PCB) + castfant Astro Fantasia (DECO Cassette) (US) @@ -10509,7 +11073,7 @@ cb3c - Cherry Bonus III (alt, set 2) + Cherry Bonus III (Ivanhoe V46-0799) cb3d @@ -10555,6 +11119,26 @@ cbombersp Chase Bombers (Japan Prototype) + + cbrava + Costa Brava (2 jackpot points, 81%) + + + cbravaa + Costa Brava (1 jackpot point, 77%) + + + cbravab + Costa Brava (2 jackpot points, 77%) + + + cbravac + Costa Brava (4 jackpot points, 77%) + + + cbravad + Costa Brava (8 jackpot points, 77%) + cbtime Burger Time (DECO Cassette) (US) @@ -10663,6 +11247,10 @@ ccboot2 Crazy Climber (bootleg set 2) + + ccbootmm + Crazy Climber (ManilaMatic bootleg) + ccbootmr Crazy Climber (Model Racing bootleg) @@ -10761,11 +11349,11 @@ centauri - Centaur (Inder) + Centaur (Inder) (set 1) centauri2 - Centaur (Inder, alternate set) + Centaur (Inder) (set 2) centipb2 @@ -10807,6 +11395,10 @@ centipedj Centipede (Japan, revision 3) + + centrion + Centurion (0152314, US) + centtime Centipede (revision 4) @@ -10915,17 +11507,25 @@ cgidjp Double Joker Poker (CGI) + + cgip23b + Credit Poker (ver.23b, 7 & 9 bonus) + + + cgip30b + Credit Poker (ver.30b, 7 & 9 bonus) + cgip30cs Credit Poker (ver.30c, standard) cgold - Caribbean Gold (3VXEC449, USA) + Caribbean Gold (3VXEC449, US) cgold2 - Caribbean Gold II (3XF5182H04, USA) + Caribbean Gold II (3XF5182H04, US) cgraplop @@ -11059,6 +11659,10 @@ champbwl Championship Bowling + + champbwla + Championship Bowling (location test) + champion Champion 85 @@ -11128,8 +11732,8 @@ Chariot Challenge (0100787V, NSW/ACT) - chariotcv - Chariot Challenge (04J00714, Peru?) + chariotcpe + Chariot Challenge (04J00714, Peru) charlien @@ -11243,6 +11847,10 @@ cheyenne Cheyenne (version 1.0) + + chicgum + Chic Gum Video + chicken Chicken (Russia) (Atronic) @@ -11252,7 +11860,7 @@ Chicken (0100351V, NSW/ACT) - chickna5ql + chickna5q Chicken (0200530V, Queensland) @@ -11281,7 +11889,11 @@ chimerab - Chimera Beast (Japan, prototype) + Chimera Beast (Japan, prototype, set 1) + + + chimeraba + Chimera Beast (Japan, prototype, set 2) chinagat @@ -11463,6 +12075,10 @@ chthree Channel Three + + chuckieegg + Chuckie Egg + chucklck Chuck-A-Luck @@ -11591,6 +12207,10 @@ cj3play Triple Play (Ver. 1.10) + + cjbj + Blackjack (Ver. 1.31) + cjddzsp Super Dou Di Zhu Special (V122CN) @@ -11641,7 +12261,7 @@ ckongdks - Donkey Kong (Spanish Crazy Kong bootleg) + Donkey Kong (Spanish bootleg of Crazy Kong) ckongg @@ -11807,6 +12427,10 @@ clkwise Clockwise (1VXEC534, New Zealand) + + cll + Cuty Line Limited (ver.1.30) + cloak Cloak & Dagger (rev 5) @@ -11859,6 +12483,10 @@ clpoker Poker Genius + + clrmatch + Color Match + clshroad Clash-Road @@ -11927,6 +12555,10 @@ clubkpzb Club Kart Prize Version B (Export, Japan) + + clubkpzbp + Club Kart Prize Version B (prototype) + clubkrt Club Kart: European Session (Rev D) @@ -11989,7 +12621,11 @@ cmast92 - Cherry Master '92 + Cherry Master '92 (V1.2D) + + + cmast92a + Cherry Master '92 (V1.1D) cmast97 @@ -12059,6 +12695,10 @@ cmezspin Cherry Master I (E-Z Spin bootleg / hack) + + cmfb55 + Cherry Master (bootleg, Game FB55 Ver.2) + cmfun Cherry Master (Fun USA v2.5 bootleg / hack) @@ -12085,11 +12725,15 @@ cmpacman - Super Pacman (v1.2) + Cherry Master (Corsica, v8.31, set 1) + Super Pacman (v1.2) + Cherry Master (Corsica, v8.31, unencrypted, set 1) cmpacmana - Super Pacman (v1.2) + Cherry Master (Corsica, v8.31, set 2) + Super Pacman (v1.2) + Cherry Master (Corsica, v8.31, unencrypted, set 2) + + + cmpacmanb + Super Pacman (v1.2) + Cherry Master (Corsica, v8.31, encrypted) cmrltv75 @@ -12097,16 +12741,24 @@ cmtetris - Tetris + Cherry Master (Corsica, v8.01, set 1) + Tetris + Cherry Master (Corsica, v8.01, unencrypted, set 1) - cmtetrsa - Tetris + Cherry Master (Corsica, v8.01, set 2) + cmtetrisa + Tetris + Cherry Master (Corsica, v8.01, unencrypted, set 2) - cmtetrsb + cmtetrisb Tetris + Cherry Master (+K, Canada Version, encrypted) + + cmtetrisc + Tetris + Cherry Master (Corsica, v8.01, encrypted) + + + cmtetrisd + Tetris + Cherry Master (Aidonis Games bootleg) + cmtonig Cashman Tonight (30194711, NSW/ACT) @@ -12143,6 +12795,10 @@ cndypuzl Candy Puzzle (v1.0) + + cnebula + Nebula (DECO Cassette) (UK) + cnights2 Cassette: Night Star (set 2) @@ -12267,6 +12923,10 @@ cobrapb Cobra (Playbar) + + cobrasd + Cobra Sport Dart + cobraseg Cobra Command (Sega LaserDisc Hardware) @@ -12503,6 +13163,10 @@ comg168 Cal Omega - Game 16.8 (Keno) + + comg170 + Cal Omega - Game 17.0 (Amusement Poker) + comg172 Cal Omega - Game 17.2 (Double Double Poker) @@ -12641,7 +13305,11 @@ comotion - CoMOTION + CoMotion + + + comotionp + CoMotion (patent) compglfo @@ -12667,6 +13335,10 @@ condorn Condor (S C Novar bootleg of Phoenix) + + condorva + Condor (Valadon Automation bootleg of Phoenix) + coneyis Old Coney Island! @@ -12707,6 +13379,10 @@ conquer Conqueror + + conquest + Conquest (prototype) + contcirc Continental Circus (World) @@ -12769,15 +13445,19 @@ cookbib2 - Cookie & Bibi 2 (set 1) + Cookie & Bibi 2 (English, set 1) cookbib2a - Cookie & Bibi 2 (set 2) + Cookie & Bibi 2 (English, set 2) cookbib2b - Cookie & Bibi 2 (set 3) + Cookie & Bibi 2 (English, set 3) + + + cookbib2c + Cookie & Bibi 2 (English / Korean) cookbib3 @@ -12791,6 +13471,10 @@ cookrace Cook Race + + cool104 + Cool 104 + coolmini Cool Minigame Collection @@ -12959,6 +13643,14 @@ cosmos Cosmos + + cothello + Computer Othello + + + cots + Creatures of the Sea (20050328 USA 6.3) + cotton Cotton (set 4, World) (FD1094 317-0181a) @@ -13031,6 +13723,10 @@ countrunb2 Counter Run (bootleg set 2) + + countrunb3 + Counter Run (bootleg set 3) + countryc Country Club @@ -13047,6 +13743,10 @@ couplep The Couples (set 2) + + covidarts + Covidarts + cowboy Cowboy Eight Ball (set 1) @@ -13061,7 +13761,7 @@ cowrace - Cow Race (King Derby hack) + Cow Race (hack of King Derby) cowtipp @@ -13091,6 +13791,10 @@ cpoker101 Champion Poker (v101) + + cpoker2 + Champion Poker 2 (V100A) + cpoker201f Champion Poker (v201F) @@ -13241,11 +13945,11 @@ crash - Crash + Crash (set 1) crasha - Crash (alt) + Crash (set 2) crashh @@ -13291,6 +13995,10 @@ crazyfgt Crazy Fight + + crazym + Crazy Mazey + crazywar Crazy War @@ -13459,6 +14167,10 @@ croupiera Croupier (Playmark Roulette v.09.04) + + croupierb + Croupier (Playmark Roulette v.03.09) + crsbingo Poker Carnival @@ -13571,6 +14283,10 @@ crusnexoa Cruis'n Exotica (version 2.0) + + crusnexoaa + Cruis'n Exotica (version 2.0, alternate ROM format) + crusnexob Cruis'n Exotica (version 1.6) @@ -13595,6 +14311,14 @@ crusnusa Cruis'n USA (v4.5) + + crusnusa11 + Cruis'n USA (v1.1) + + + crusnusa20 + Cruis'n USA (v2.0) + crusnusa21 Cruis'n USA (v2.1) @@ -13660,8 +14384,8 @@ Crystal Springs (10144411, NSW/ACT) - crysprim - Crystal Springs (10155811, Malaysia) + cryspria + Crystal Springs (10155811, ASP) cryspriu @@ -13767,6 +14491,10 @@ crzrallyrf Crazy Rally (Recreativos Franco license) + + crzybugs + Crazy Bugs (V103JP) + crzyddz Crazy Dou Di Zhu @@ -13891,6 +14619,10 @@ csd Choy Sun Doa (10104011, NSW/ACT) + + csda + Choy Sun Doa (20131511, ASP) + csdce Choy Sun Doa - Cash Express (30149511, NSW/ACT) @@ -13899,10 +14631,6 @@ csdjc Choy Sun Doa - Jackpot Carnival (20156611, Queensland) - - csdm - Choy Sun Doa (20131511, Malaysia) - csdq Choy Sun Doa (10121111, Queensland) @@ -13917,7 +14645,7 @@ cshift - Chicken Shift + Chicken Shift (11/23/84) cshooter @@ -13965,7 +14693,7 @@ csilverj - Captain Silver (Japan, revision 3) + Captain Silver (Japan, revision 2) csilverja @@ -14089,11 +14817,11 @@ ct2k3sa - Crouching Tiger Hidden Dragon 2003 Super Plus alternate (The King of Fighters 2001 bootleg) + Crouching Tiger Hidden Dragon 2003 Super Plus (hack of The King of Fighters 2001, alternate) ct2k3sp - Crouching Tiger Hidden Dragon 2003 Super Plus (The King of Fighters 2001 bootleg) + Crouching Tiger Hidden Dragon 2003 Super Plus (hack of The King of Fighters 2001) ctainv @@ -14105,7 +14833,7 @@ ctchzdlx - Cut The Cheese Deluxe (Redemption) + Cut The Cheese Deluxe (redemption, CPU 1.00, display A1.00) cterrani @@ -14113,11 +14841,11 @@ cthd2003 - Crouching Tiger Hidden Dragon 2003 (The King of Fighters 2001 bootleg) + Crouching Tiger Hidden Dragon 2003 (hack of The King of Fighters 2001) cthd2k3a - Crouching Tiger Hidden Dragon 2003 (set 2) + Crouching Tiger Hidden Dragon 2003 (The King of Fighters 2001 bootleg, set 2) ctisland @@ -14129,7 +14857,7 @@ ctisland3 - Treasure Island (DECO Cassette) (Region D) + Treasure Island (DECO Cassette) (Europe?) ctislnd2 @@ -14147,6 +14875,10 @@ ctornado Tornado (DECO Cassette) (US) + + ctower + The Tower (DECO Cassette) (Europe) + ctribe The Combatribes (US, rev 2, set 1) @@ -14191,6 +14923,14 @@ cubybop Cuby Bop (location test) + + cucaracha + La Cucaracha (set 1) + + + cucaracha2 + La Cucaracha (set 2) + cuckoo Cuckoo (0200753V, NSW/ACT) @@ -14208,12 +14948,16 @@ Cue Ball Wizard - cueball2 - Cue Ball Wizard (rev.2) + cueballa + Cue Ball Wizard (rev. 2) + + + cueballb + Cue Ball Wizard (rev. 3) - cueball3 - Cue Ball Wizard (rev.3) + cueballc + Cue Ball Wizard (older display rev.) cuebrckj @@ -14315,6 +15059,10 @@ cupsocsb4 Seibu Cup Soccer :Selection: (bootleg, set 4) + + cupsocsb5 + Seibu Cup Soccer :Selection: (bootleg, set 5) + curvebal Curve Ball @@ -14471,6 +15219,10 @@ cybots Cyberbots: Fullmetal Madness (Euro 950424) + + cybotsam + Cyberbots - fullmetal madness (Access Mod, Hack) + cybotsj Cyberbots: Fullmetal Madness (Japan 950420) @@ -14489,11 +15241,15 @@ cybrcomm - Cyber Commando (Rev. CY1, Japan) + Cyber Commando (Japan, CY1) cybrcycc - Cyber Cycles (Rev. CB2 Ver.C, World) + Cyber Cycles (World, CB2 Ver.C) + + + cybrcyccj + Cyber Cycles (Japan, CB1 Ver.C) cybrnaut @@ -14715,6 +15471,10 @@ dai3wksi Dai 3 Wakusei (Japan) + + daifugo + Daifugo (Japan) + daikaiju Daikaiju no Gyakushu @@ -14755,6 +15515,10 @@ daiohp2 Daioh (prototype, earlier) + + daiohp3 + Daioh (prototype, earliest) + daireika Mahjong Daireikai (Japan) @@ -14797,7 +15561,11 @@ dalejr - Dale Jr. (5.00) + Dale Jr. (CPU 5.00, display J5.00) + + + dallaspk + Dallas Poker (CZ/V1) dambustr @@ -14811,14 +15579,22 @@ dambustruk Dambusters (UK) + + dance864 + DANCE 86.4 FUNKY RADIO STATION (E01:J:A:A:2005040400) + danceyes - Dancing Eyes (US, DC3/VER.C) + Dancing Eyes (World, DC2/VER.B) danceyesj Dancing Eyes (Japan, DC1/VER.A) + + danceyesu + Dancing Eyes (US, DC3/VER.C) + danchih Danchi de Hanafuda (J 990607 V1.400) @@ -14829,7 +15605,7 @@ dangar - Ufo Robo Dangar (4/07/1987) + Ufo Robo Dangar (4/09/1987) dangar2 @@ -14871,6 +15647,10 @@ dangerz Danger Zone (rev 2) + + dangerz0 + Danger Zone (rev 0) + dangseed Dangerous Seed (Japan) @@ -14883,6 +15663,10 @@ daraku The Fallen Angels (World) / Daraku Tenshi - The Fallen Angels (Japan) + + dardos + Dardos + darius Darius (World, rev 2) @@ -15025,7 +15809,7 @@ dayto2pe - Daytona USA 2 Power Edition (Japan) + Daytona USA 2: Power Edition (Japan) daytona @@ -15033,7 +15817,7 @@ daytona2 - Daytona USA 2 (Japan, Revision A) + Daytona USA 2: Battle on the Edge (Japan, Revision A) daytona93 @@ -15069,7 +15853,7 @@ dbc - Da Ban Cheng (Hong Kong, V027H) + Daai Baan Sing (Hong Kong, V027H) dblagent @@ -15185,7 +15969,7 @@ dbzvrvs - Dragon Ball Z V.R.V.S. (Japan, Rev A) + Dragon Ball Z: V.R. V.S. (Japan, Rev A) dcclub @@ -15315,6 +16099,10 @@ ddcrewud D. D. Crew (US, 4 Players) (bootleg of FD1094 317-0186 set) + + dddoor + Doraemon no Dokodemo Door + ddealer Double Dealer @@ -15341,7 +16129,7 @@ ddonpach - DoDonPachi (International, Master Ver. 97/02/05) + DoDonPachi (World, 1997 2/ 5 Master Ver.) ddonpacha @@ -15349,7 +16137,7 @@ ddonpachj - DoDonPachi (Japan, Master Ver. 97/02/05) + DoDonPachi (Japan, 1997 2/ 5 Master Ver.) ddonpchj @@ -15491,10 +16279,6 @@ ddpsdoj DoDonPachi SaiDaiOuJou (2012/ 4/20) - - ddpsdojk - DoDonPachi SaiDaiOujou & Knuckles (2021/12/01 Japan, hack) - ddr2m Dance Dance Revolution 2nd Mix (GN895 VER. JAA) @@ -15509,10 +16293,14 @@ ddr2ml - Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAB) + Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAC) ddr2mla + Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAB) + + + ddr2mlb Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAA) @@ -15581,39 +16369,39 @@ ddragon2 - Double Dragon II - The Revenge (World) + Double Dragon II: The Revenge (World) ddragon2b - Double Dragon II - The Revenge (US, bootleg) + Double Dragon II: The Revenge (US, bootleg) ddragon2b2 - Double Dragon II - The Revenge (US bootleg, set 2) + Double Dragon II: The Revenge (US, bootleg, set 2) ddragon2j - Double Dragon II - The Revenge (Japan) + Double Dragon II: The Revenge (Japan) ddragon2u - Double Dragon II - The Revenge (US) + Double Dragon II: The Revenge (US) ddragon3 - Double Dragon 3 - The Rosetta Stone (US) + Double Dragon 3: The Rosetta Stone (US) ddragon3b - Double Dragon 3 - The Rosetta Stone (bootleg) + Double Dragon 3: The Rosetta Stone (bootleg) ddragon3j - Double Dragon 3 - The Rosetta Stone (Japan) + Double Dragon 3: The Rosetta Stone (Japan) ddragon3p - Double Dragon 3 - The Rosetta Stone (prototype) + Double Dragon 3: The Rosetta Stone (prototype) ddragon6809 @@ -15691,17 +16479,21 @@ ddrkara Dance Dance Revolution Karaoke Mix (GQ921 VER. JBB) + + ddrkara2 + Dance Dance Revolution Karaoke Mix 2 (GQ947 VER. JAA) + ddrkids Dance Dance Revolution Kids (GQAN4 JAA) ddrmax - DDR Max - Dance Dance Revolution 6th Mix (G*B19 VER. JAA) + DDRMAX - Dance Dance Revolution 6th Mix (G*B19 VER. JAA) ddrmax2 - DDR Max 2 - Dance Dance Revolution 7th Mix (G*B20 VER. JAA) + DDRMAX2 - Dance Dance Revolution 7th Mix (G*B20 VER. JAA) ddrs2k @@ -15715,6 +16507,38 @@ ddrsbm Dance Dance Revolution Solo Bass Mix (GQ894 VER. JAA) + + ddrsn2a + Dance Dance Revolution SuperNOVA 2 (GDJ:A:A:A:2007100800) + + + ddrsn2aa + Dance Dance Revolution SuperNOVA 2 (GDJ:A:A:A:2007071100) + + + ddrsn2j + Dance Dance Revolution SuperNOVA 2 (GDJ:J:A:A:2007100800) + + + ddrsn2ja + Dance Dance Revolution SuperNOVA 2 (GDJ:J:A:A:2007071100) + + + ddrsn2u + Dance Dance Revolution SuperNOVA 2 (GDJ:U:A:A:2007100800) + + + ddrsna + Dance Dance Revolution SuperNOVA (FDH:A:A:A:2006071300) + + + ddrsnj + Dance Dance Revolution SuperNOVA (FDH:J:A:A:2006090600) + + + ddrsnu + Dance Dance Revolution SuperNOVA (FDH:U:A:A:2006072400) + ddru Dance Dance Revolution (GN845 VER. UAA) @@ -15747,6 +16571,10 @@ ddsomj Dungeons & Dragons: Shadow over Mystara (Japan 960619) + + ddsomjc + Dungeons & Dragons: Shadow over Mystara (T-Chi) + ddsomjr1 Dungeons & Dragons: Shadow over Mystara (Japan 960206) @@ -15935,9 +16763,21 @@ decathlto Decathlete (JUET 960424 V1.000) + + decodark + DECO Cassette System ROM Multigame (Darksoft, v17) + + + decodark15 + DECO Cassette System ROM Multigame (Darksoft, v15) + + + decodark16 + DECO Cassette System ROM Multigame (Darksoft, v16) + decomult - Deco Cassette System Multigame (ROM based) + DECO Cassette System ROM Multigame (David Widel) deepfrz @@ -15977,11 +16817,11 @@ defcmnd - Defense Command (Defender bootleg) + Defense Command (bootleg of Defender) defence - Defence Command (Defender bootleg) + Defence Command (bootleg of Defender) defender @@ -15999,6 +16839,10 @@ defenderj T.T Defender + + defenderom + Operacion Defender (bootleg of Defender) + defenderw Defender (White label) @@ -16017,7 +16861,7 @@ defenseb - Defense (Defender bootleg) + Defense (bootleg of Defender) defndjeu @@ -16103,9 +16947,13 @@ demonwld4 Demon's World / Horror Story (set 5) + + demonwld5 + Demon's World / Horror Story (set 6) + dendego - Densha de GO! (Ver 2.2 J) + Densha de GO! (Ver 2.3 J) dendego2 @@ -16119,6 +16967,10 @@ dendego3 Densha de GO 3! Tsukin-hen (V2.03J) + + dendegoa + Densha de GO! (Ver 2.2 J) + dendegox Densha de GO! EX (Ver 2.4 J) @@ -16169,7 +17021,7 @@ deroon - Deroon DeroDero (earlier) + Deroon DeroDero (earlier, set 1) deroon2 @@ -16177,7 +17029,7 @@ deroona - Deroon DeroDero (alt set) + Deroon DeroDero (earlier, set 2) desert @@ -16253,11 +17105,15 @@ devilfsg - Devil Fish (Galaxian hardware, bootleg?) + Devil Fish (Galaxian hardware, bootleg[Q]) devilfsh - Devil Fish + Devil Fish (Scramble hardware) + + + devilfshg + Devil Fish (Galaxian hardware) devilfshgb @@ -16309,7 +17165,7 @@ dfeveron - Dangun Feveron (Japan, Ver. 98/09/17) + Dangun Feveron (Japan, 98/09/17 VER.) dfjail @@ -16407,6 +17263,10 @@ dibif743 Diana Bifuca (v7.43) + + dibifpspdp + Diana Bifuca (unknown version, ProSPDP based) + dibifuca Diana Bifuca (v9.25) @@ -16439,6 +17299,10 @@ dietgou Diet Go Go (USA v1.1 1992.09.26) + + digamart + Diga Mart (rev. A) + digdug Dig Dug (rev 2) @@ -16501,12 +17365,16 @@ dimeye - Diamond Eyes (0251312, US) + Diamond Eyes (10129211, ASP) dimeyece Diamond Eyes - Cash Express (0152039, US) + + dimeyeu + Diamond Eyes (0251312, US) + dimtouch Diamond Touch (0400433V, NSW/ACT) @@ -16519,6 +17387,10 @@ diner_f2 Diner (LF-2) French + + diner_g2 + Diner (LG-2) German + diner_l1 Diner (LU-1) Europe @@ -16551,29 +17423,49 @@ dino Cadillacs and Dinosaurs (World 930201) + + dino1v3 + Cadillacs and Dinosaurs (1v3, Hack) + + + dino3j + Cadillacs and Dinosaurs (Three Prohibitions, Hack) + dinoa Cadillacs and Dinosaurs (Asia TW 930223) dinodino - Dino Dino (Ver. A1.1) + Dino Dino (Ver. A1.1, 01/13/2005) dinods - Cadillacs and Dinosaurs (God of War Edition, Hack) + Cadillacs and Dinosaurs (God of War, Hack) + + + dinodw + Cadillacs and Dinosaurs (Warriors, Hack) dinoeggs - Dinosaur Eggs + Dinosaur Eggs (R02) dinoeh Cadillacs and Dinosaurs (hack, 930201 etc) - dinogae - Cadillacs and Dinosaurs (GOTVG 10th Anniversary Edition, Hack) + dinofmly + Dino Family + + + dinofmlya + Dino Family (Portuguese, Tangasoft license) + + + dinofw + Cadillacs and Dinosaurs (Framework 2022 Series, Hack) dinoh @@ -16591,6 +17483,14 @@ dinoj Cadillacs: Kyouryuu Shin Seiki (Japan 930201) + + dinojd + Cadillacs and Dinosaurs (GOTVG 10th Anniversary, Hack) + + + dinojj + Cadillacs and Dinosaurs (Contest, Hack) + dinoki25 Dinosaur King - D-Team VS. the Alpha Fortress (Export, Ver 2.500) (MDA-C0047) @@ -16611,6 +17511,10 @@ dinokior Dinosaur King - Operation: Dinosaur Rescue (USA, Export) (MDA-C0021) + + dinoly + Cadillacs and Dinosaurs (Purgatory, Hack) + dinopic Cadillacs and Dinosaurs (bootleg with PIC16C57, set 1) @@ -16625,11 +17529,19 @@ dinopic4 - Cadillacs and Dinosaurs (bootleg set 4 (with PIC16c57), 930201 etc) + Cadillacs and Dinosaurs (bootleg with PIC16C57, set 4) dinopic5 - Cadillacs and Dinosaurs (bootleg set 5 (with PIC16c57), 930223 Asia TW) + Cadillacs and Dinosaurs (bootleg with PIC16C57, set 5) + + + dinoplus + Cadillacs and Dinosaurs (Judgement Day, Hack) + + + dinore + Cadillacs and Dinosaurs Readjusted (Hack, v1.4) dinorex @@ -16647,22 +17559,54 @@ dinosa6 Dinosaur (10118811, NSW/ACT) + + dinosdj + Cadillacs and Dinosaurs (Triassic, Hack) + + + dinosj + Cadillacs and Dinosaurs (Century, Hack) + + + dinoss + Cadillacs and Dinosaurs (Competition, Hack) + dinosyn - Cadillacs and Dinosaurs (28th-Anniversary, Hack) + Cadillacs and Dinosaurs (2020 Commemorative, Hack) dinot Cadillacs and Dinosaurs Turbo (bootleg set 1, 930223 Asia TW) + + dinotj + Cadillacs and Dinosaurs (Heavenly General, Hack) + dinotpic Cadillacs and Dinosaurs Turbo (bootleg set 2 (with PIC16c57), 930201 etc) + + dinotw + Cadillacs and Dinosaurs (Heavenly King, Hack) + dinou Cadillacs and Dinosaurs (USA 930201) + + dinowj + Cadillacs and Dinosaurs (Random Enemies, Hack) + + + dinoxz + Cadillacs and Dinosaurs (Scream, Hack) + + + dinoyz + Cadillacs and Dinosaurs (Dragon, Hack) + diola827 Diana Olakoa (v8.27) @@ -16673,15 +17617,15 @@ dirtdash - Dirt Dash (Rev. DT2 Ver.B, World) + Dirt Dash (World, DT2 Ver.B) dirtdasha - Dirt Dash (Rev. DT2 Ver.A, World) + Dirt Dash (World, DT2 Ver.A) dirtdashj - Dirt Dash (Rev. DT1 Ver.A, Japan) + Dirt Dash (Japan, DT1 Ver.A) dirtdvls @@ -16729,7 +17673,7 @@ discoboyp - Disco Boy (Promat license?) + Disco Boy (Promat license) discodan @@ -16771,6 +17715,14 @@ djboyua DJ Boy (US, set 2) + + djgirl + DJ Girl (Promat license) + + + dkaccel + Donkey Kong Accelerate + dkbanana Donkey Kong Banana Kingdom (host) @@ -16791,6 +17743,10 @@ dkchrmx Donkey Kong Christmas Remix (Hack) + + dkduel + Donkey Kong Duel + dkfreerun Donkey Kong Freerun Edition @@ -16811,6 +17767,10 @@ dkgensanm82 Daiku no Gensan (Japan, M82 hardware) + + dkhrthnt + Donkey Kong Hearthunt + dking Donkey King @@ -16819,6 +17779,10 @@ dkingjr Donkey King Jr. (bootleg of Donkey Kong Jr.) + + dkjfever + Donkey Kong Jungle Fever (Ver.1.000, 2005/08/03) + dkkids Dinoking Kids @@ -16859,6 +17823,10 @@ dkong3j Donkey Kong 3 (Japan) + + dkong40y + Donkey Kong Anniversary Edition + dkongbp Donkey Kong Barrelpalooza v1.06 @@ -17015,6 +17983,10 @@ dkpace Donkey Kong Pace + + dkpmx + Donkey Kong Pac-Man Crossover + dkrainbow Donkey Kong - Arcade Rainbow (hack) @@ -17023,6 +17995,14 @@ dkrdemo Donkey Kong Remix (Demo) + + dkremix + Donkey Kong Remix (Hack) + + + dkrndmzr + Donkey Kong RNDMZR + dkspkyrmx Donkey Kong Spooky Remix (Hack) @@ -17031,6 +18011,10 @@ dktrainer Donkey Kong Trainer 1.01 + + dkwizardry + Donkey Kong Wizardry + dlair Dragon's Lair (US Rev. F2) @@ -17181,11 +18165,15 @@ dmndrby - Diamond Derby (Newer) + Diamond Derby (Win bet, newer) dmndrbya - Diamond Derby (Original) + Diamond Derby (Win bet, original) + + + dmndrbybl + Diamond Derby (Quinella bet, EDG Impeuropex bootleg) dmnfrnt @@ -17223,6 +18211,14 @@ dmx2majp Dance Maniax 2nd Mix Append J-Paradise (G*A38 VER. JAA) + + dmxa + Dance Maniax (G*874 VER. AAA) + + + dnbanban + Dora Neco BanBan + dncfrks Dance Freaks (G*874 VER. KAA) @@ -17233,7 +18229,7 @@ dngrtrck - Danger Track (Rally X bootleg) + Danger Track (bootleg of Rally X) dnmtdeka @@ -17259,6 +18255,14 @@ doaa Dead or Alive (Model 2A, Revision A) + + doaab + Dead or Alive (Model 2A) + + + doaae + Dead or Alive (Export, Model 2A, Revision A) + doab Dead or Alive (Model 2B, Revision B) @@ -17295,6 +18299,10 @@ docastlo Mr. Do's Castle (older) + + docchift + Docchi Fighter + dockman Dock Man (set 1) @@ -17383,9 +18391,17 @@ dogyuuna Dogyuun (older set) + + dogyuunb + Dogyuun (oldest set) + dogyuunt - Dogyuun (location test) + Dogyuun (10/9/1992 location test) + + + dogyuunto + Dogyuun (8/25/1992 location test) dokaben @@ -17401,7 +18417,7 @@ dokodemo - Doko Demo Issho: Toro's Fishing + Doko Demo Issho: Toro's Fishing (Ver.1.00, 2006/06/07) dokyusei @@ -17452,21 +18468,33 @@ Dolphin Treasure - Cash Express (AHG1519, US) - dolphntrql + dolphntrq Dolphin Treasure (0101250V, Queensland) dolphntru Dolphin Treasure (FHG4077-02, US) + + doltra6 + Dolphin Treasure (10177911, ASP) + + + doltra6nz + Dolphin Treasure (20265311, New Zealand) + domino - Domino Man + Domino Man (set 1) domino2 Domino II (Bingo) + + dominoa + Domino Man (set 2) + dominob Domino Block @@ -17555,6 +18583,10 @@ donpepito Hola Don Pepito + + doodlejmp + Doodle Jump Arcade (v1.16) + dorachan Dora-chan (Japan) @@ -17623,6 +18655,14 @@ dotrone Discs of Tron (Environmental) + + doubldsp + Double Dragon (Special 2017, Hack) + + + doubledp + Double Dragon (Plus, Hack) + doubledr Double Dragon (Neo-Geo) @@ -17632,8 +18672,8 @@ Double Dragon (Boss hack) - doubledrsp - Double Dragon (Special 2017, hack) + doubledt + Double Dragon (Optimized, Hack) douni @@ -17799,6 +18839,10 @@ dragwld2 Zhong Guo Long II (ver. 100C, China) + + drail + Dream Rail + drakor Drakor @@ -17823,6 +18867,10 @@ drbyocwc Derby Owners Club World Edition (Rev C) + + drbyocwt + Derby Owners Club World Edition (Rev T) + drdmania Dardomania (v2.1) @@ -17865,7 +18913,7 @@ drgninja - Dragonninja (Japan revision 1) + Dragonninja (Japan, revision 1) drgninjab @@ -17875,6 +18923,10 @@ drgninjab2 Dragonninja (bootleg with 68705) + + drgninjam + Dragon Ninja (Modular System) + drgnlord Dragon Lord (10173511, NSW/ACT) @@ -17905,11 +18957,15 @@ drgnwrldv11h - Dongfang Zhi Zhu (Hong Kong, V011H) + Dung Fong Zi Zyu (Hong Kong, V011H, set 1) + + + drgnwrldv11ha + Dung Fong Zi Zyu (Hong Kong, V011H, set 2) drgnwrldv20j - Zhongguo Long (Japan, V020J) + Chuugokuryuu (Japan, V020J) drgnwrldv21 @@ -17917,7 +18973,7 @@ drgnwrldv21j - Zhongguo Long (Japan, V021J) + Chuugokuryuu (Japan, V021J) drgnwrldv30 @@ -18071,6 +19127,10 @@ drmcatch Dream Catcher (10126721, NSW/ACT) + + drmcatcha + Dream Catcher (10172921, ASP) + drmicro Dr. Micro @@ -18125,6 +19185,10 @@ drmn9m + DrumMania 9th Mix (G*D09 VER. JAB) + + + drmn9ma DrumMania 9th Mix (G*D09 VER. JAA) @@ -18135,6 +19199,54 @@ drmnu DrumMania (GQ881 VER. UAB) + + drmnv2a + DrumMania V2 (F02:A:A:A:2006011201) + + + drmnv2aa + DrumMania V2 (F02:A:A:A:2005112800) + + + drmnv2ab + DrumMania V2 (F02:A:A:A:2005101600) + + + drmnv2j + DrumMania V2 (F02:J:A:A:2006011201) + + + drmnv2ja + DrumMania V2 (F02:J:A:A:2005112800) + + + drmnv2jb + DrumMania V2 (F02:J:A:A:2005101600) + + + drmnv3a + DrumMania V3 (F32:A:A:A:2006101800) + + + drmnv3aa + DrumMania V3 (F32:A:A:A:2006072600) + + + drmnv3j + DrumMania V3 (F32:J:A:A:2006101800) + + + drmnv3ja + DrumMania V3 (F32:J:A:A:2006072600) + + + drmnva + DrumMania V (E02:A:A:A:2005050200) + + + drmnvj + DrumMania V (E02:J:A:A:2005050200) + drmred Dream of the Red Chamber (10273811, NSW/ACT) @@ -18217,11 +19329,11 @@ dslayrr - Dragon Slayer (Russia, set 1) + Dragon Slayer (Russia, v15.B, 2005/08/10) dslayrra - Dragon Slayer (Russia, set 2) + Dragon Slayer (Russia, v16.B, 2005/11/10) dsmbl @@ -18255,6 +19367,10 @@ dspirito Dragon Spirit (old version) + + dsrtwars + Desert Wars (bootleg of Battle Zone) + dstage Dancing Stage - Internet Ranking Ver (GC845 VER. EBA) @@ -18263,6 +19379,14 @@ dstagea Dancing Stage (GN845 VER. EAA) + + dstagesn + Dancing Stage SuperNOVA (FDH:E:A:A:2006072500) + + + dstagesna + Dancing Stage SuperNOVA (FDH:E:A:A:2006032200) + dstbloom Desert Bloom (0300111V, NSW/ACT) @@ -18271,6 +19395,10 @@ dstblooma Desert Bloom (0200111V, NSW/ACT) + + dstgold + Desert Gold (20202311, ASP) + dstlk Darkstalkers: The Night Warriors (Euro 940705) @@ -18307,6 +19435,10 @@ dtrvwz5 Deluxe Trivia ? Whiz (6221-70, U5-0A Edition 5) + + dtrvwz5v + Deluxe Trivia ? Whiz (6221-75, U5-0 Edition 5 Vertical) + dualaslt Dual Assault @@ -18479,6 +19611,10 @@ dygolf Virtua Golf / Dynamic Golf (Rev A) (GDS-0009A) + + dygolfp + Virtua Golf / Dynamic Golf (prototype) + dynabb Dynamite Baseball @@ -18507,6 +19643,10 @@ dynablstb3 Dynablaster / Bomber Man (bootleg, set 3) + + dynablstb4 + Dynablaster / Bomber Man (bootleg, set 4) + dynabomb Dynamite Bomber (Korea, Rev 1.5) @@ -18659,6 +19799,10 @@ eastland Easter Island - Cash Express (0151117, US) + + eatpm_3g + Elvira and the Party Monsters (LG-3) + eatpm_4g Elvira and the Party Monsters (LG-4) @@ -20619,10 +21763,6 @@ eclipse Eclipse - - ecofghta - Eco Fighters (Asia 931203) - ecofghtr Eco Fighters (World 931203) @@ -20701,16 +21841,16 @@ eforest - Enchanted Forest (12XF528902, US) - - - eforesta Enchanted Forest (4VXFC818, NSW) - eforestb + eforestnz Enchanted Forest (3VXFC5343, New Zealand) + + eforestu + Enchanted Forest (12XF528902, US) + eforsta5 Enchanted Forest (0400122V, NSW/ACT) @@ -20755,6 +21895,10 @@ eggventr Egg Venture (Release 10) + + eggventr1 + Egg Venture (Release 1) + eggventr2 Egg Venture (Release 2) @@ -20791,6 +21935,10 @@ ehrgeizua Ehrgeiz (US, EG3/VER.A) + + eibise + Eibise (Japan) + eightbll Eight Ball (rev. 20) @@ -20843,9 +21991,21 @@ elandore Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006) + + elcirculo + El Circulo + eldoradd - El Dorado + El Dorado (V5.1DR) + + + eldoraddo + El Dorado (V1.1TA) + + + eldoraddoa + El Dorado (V1.4D) eldorado @@ -20953,83 +22113,87 @@ elvisf - Elvis (5.00 France) + Elvis (CPU 5.00, display F5.00, France) elvisf302 - Elvis (3.02 France) + Elvis (CPU 3.02, display F3.02, France) elvisf303 - Elvis (3.03 France) + Elvis (CPU 3.03, display F3.02, France) elvisf4 - Elvis (4.00 France) + Elvis (CPU 4.00, display F4.01, France) elvisg - Elvis (5.00 Germany) + Elvis (CPU 5.00, display G5.00, Germany) elvisg302 - Elvis (3.02 Germany) + Elvis (CPU 3.02, display G3.02, Germany) elvisg303 - Elvis (3.03 Germany) + Elvis (CPU 3.03, display G3.02, Germany) elvisg4 - Elvis (4.00 Germany) + Elvis (CPU 4.00, display G4.01, Germany) elvisi - Elvis (5.00 Italy) + Elvis (CPU 5.00, display I5.00, Italy) elvisi302 - Elvis (3.02 Italy) + Elvis (CPU 3.02, display I3.02, Italy) elvisi303 - Elvis (3.03 Italy) + Elvis (CPU 3.03, display I3.02, Italy) elvisi4 - Elvis (4.00 Italy) + Elvis (CPU 4.00, display I4.01, Italy) elvisl - Elvis (5.00 Spain) + Elvis (CPU 5.00, display L5.00, Spain) elvisl302 - Elvis (3.02 Spain) + Elvis (CPU 3.02, display L3.02, Spain) elvisl303 - Elvis (3.03 Spain) + Elvis (CPU 3.03, display L3.02, Spain) elvisl4 - Elvis (4.00 Spain) + Elvis (CPU 4.00, display L4.01, Spain) elvisp - Elvis (5.00) + Elvis (CPU 5.00, display A5.00) + + + elvisp100 + Elvis (CPU 1.00, display A1.00) elvisp302 - Elvis (3.02) + Elvis (CPU 3.02, display A3.02) elvisp303 - Elvis (3.03) + Elvis (CPU 3.03, display A3.02) elvisp4 - Elvis (4.00) + Elvis (CPU 4.00, display A4.01) embargo @@ -21043,6 +22207,10 @@ emeralda Emeraldia (World) + + emeraldah + Emeraldia (Bankbank New Rotate Hack) + emeraldaj Emeraldia (Japan Version B) @@ -21089,7 +22257,7 @@ empsback - The Empire Strike Back + The Empire Strikes Back (Hankin Pinball) enchantr @@ -24443,16 +25611,24 @@ eshb Esh's Aurunmilla (set 3) + + eshockey + Exciting Speed Hockey (V19930325) + espgal Espgaluda (2003/10/15 Master Ver) espgal2 - Espgaluda II (2005/11/14 MASTER VER, newer CV1000-B PCB) + Espgaluda II (2005/11/14.MASTER VER.) espgal2a + Espgaluda II (2005/11/14 MASTER VER, newer CV1000-B PCB) + + + espgal2b Espgaluda II (2005/11/14 MASTER VER, original CV1000-B PCB) @@ -24467,21 +25643,29 @@ espiale Espial (Europe) + + espialj + Espial (Japan) + + + espialn + Espial (Nova Apparate license) + espialu Espial (US?) esprade - ESP Ra.De. (International, Ver. 98/04/22) + ESP Ra.De. (World, 1998 4/22 International Ver.) espradej - ESP Ra.De. (Japan, Ver. 98/04/21) + ESP Ra.De. (Japan, 1998 4/21 Master Ver.) espradejo - ESP Ra.De. (Japan, Ver. 98/04/14) + ESP Ra.De. (Japan, 1998 4/14 Master Ver.) espradeo @@ -24551,6 +25735,10 @@ euroch92 Euro Champ '92 (World) + + euroch92j + Euro Champ '92 (Japan) + eurodsr Euro Double Star Record (ver.1.2) @@ -24583,10 +25771,6 @@ evilngt Evil Night (ver UBA) - - evilngte - Evil Night (ver EAA) - evilston Evil Stone @@ -24783,6 +25967,10 @@ exterm Exterminator + + extradrw + Extra Draw + extrmatn Extermination (World) @@ -24877,12 +26065,16 @@ f15se - F-15 Strike Eagle (rev. 2.2 02/25/91) + F-15 Strike Eagle (rev. 2.2 02/25/91, 29K ver. 3.1f) f15se21 F-15 Strike Eagle (rev. 2.1 02/04/91) + + f15se22 + F-15 Strike Eagle (rev. 2.2 02/25/91, 29K ver. 2.2a) + f1dream F-1 Dream @@ -24921,6 +26113,10 @@ f1gpb + F-1 Grand Prix (set 3) + + + f1gpbl F-1 Grand Prix (Playmark bootleg) @@ -24999,6 +26195,10 @@ faeton6d Faeton (6 digits) + + failgate + Fail Gate + fairyl2 Fairy Land 2 (set 1) @@ -25039,10 +26239,18 @@ falconz Falcon (bootleg of Phoenix) (Z80 CPU) + + fambowl + Family Bowl (Japan, FB1/VER.A V1.00) + famibox FamicomBox + + famistat + FamicomStation + famlyfun Family Fun! @@ -25091,6 +26299,18 @@ fantazia Fantazia (bootleg?) + + fantcar + Fantastic Car (M89 hardware) + + + fantcar87 + Fantastic Car (Micro-87 hardware, newer) + + + fantcar87a + Fantastic Car (Micro-87 hardware, older) + fantjour Fantastic Journey (ver EAA) @@ -25147,6 +26367,10 @@ fantzn2xps2 Fantasy Zone II - The Tears of Opa-Opa (System 16C, PS2 data file) + + fantznps2 + Fantasy Zone (System 16B, PS2 data file) + fantznta Fantasy Zone Time Attack (System 16B, PS2 data file) @@ -25163,6 +26387,14 @@ fantzonee Fantasy Zone (FD1089B 317-0016) + + fantzoneno + Fantasy Zone (New, Oversea, PS2) + + + fantzonenu + Fantasy Zone (New, US Rev.A, PS2) + fantzonep Fantasy Zone (317-5000) @@ -25187,6 +26419,10 @@ farfalla Farfalla + + farfallaf + Farfalla (French speech) + farfallag Farfalla (German speech) @@ -25265,24 +26501,16 @@ fatfurspb - Fatal Fury Special (SNES bootleg) - - - fatfurspbs - Fatal Fury Special / Garou Densetsu Special (Optional Hidden Character Third Edition) + Fatal Fury Special (SNES bootleg with timer) fatfurwa - Fatal Fury: Wild Ambition (rev.A) + Fatal Fury: Wild Ambition / Garou Densetsu: Wild Ambition (rev.A) fatfury1 Fatal Fury - King of Fighters / Garou Densetsu - Shukumei no Tatakai (NGM-033 ~ NGH-033) - - fatfury1bh - Fatal Fury - King of Fighters / Garou Densetsu - shukumei no tatakai (Boss Hack by Yumeji) - fatfury2 Fatal Fury 2 / Garou Densetsu 2 - Arata-naru Tatakai (NGM-047 ~ NGH-047) @@ -25297,11 +26525,7 @@ fatfury3a - Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - haruka-naru tatakai (NGM-069)(NGH-069) (alternate set) - - - fatfury3bh - Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - haruka-naru tatakai (Ancient Battles Resurgence 2015-03-13) + Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - haruka-naru tatakai (NGM-069 ~ NGH-069) (alternate set) fathom @@ -25815,6 +27039,10 @@ fearless Fearless Pinocchio (V101US) + + fengyunh + Fengyun Hui + fenix Fenix (Orio bootleg of Phoenix) @@ -25833,7 +27061,7 @@ feversos - Fever SOS (International, Ver. 98/09/25) + Fever SOS (World, 98/09/25 VER) ffantasa @@ -25841,7 +27069,7 @@ ffantasy - Fighting Fantasy (Japan revision 3) + Fighting Fantasy (Japan, revision 3) ffantasya @@ -25857,12 +27085,16 @@ ffantasyj - Fighting Fantasy (Japan revision 2) + Fighting Fantasy (Japan, revision 2) ffantasym Fighting Fantasy (Modular System) + + ffigh1v2 + Final Fight (1v2, Hack) + ffight Final Fight (World, set 1) @@ -25873,7 +27105,11 @@ ffight3b - Final Fight 3 (SNES bootleg) + Final Fight 3 (SNES bootleg, set 1) + + + ffight3b2 + Final Fight 3 (SNES bootleg, set 2) ffighta @@ -25881,7 +27117,19 @@ ffightae - Final Fight 30th Anniversary Edition + Final Fight 30th Anniversary Edition (World, hack) + + + ffightaec2 + Final Fight Anniversary Edition (CPS2 hardware) + + + ffightaec2ds + Final Fight Anniversary Edition (Deadly Streets, Hack)(CPS2 Hardware) + + + ffightaemgc + Final Fight 30th Anniversary Edition (Mad Gear's City Hack) ffightbl @@ -25895,6 +27143,14 @@ ffightblb Final Fight (bootleg with single OKI) + + ffightdw + Final Fight (Warriors, Hack) + + + ffightfw + Final Fight (Framework, Hack) + ffightj Final Fight (Japan) @@ -25959,10 +27215,26 @@ ffruits Frantic Fruits + + ffurspbs + Fatal Fury Special / Garou Densetsu Special (Optional Hidden Character Third Edition, Hack) + + + ffury1bs + Fatal Fury - King of Fighters / Garou Densetsu - Shukumei no Tatakai (Boss, Hack) + + + ffury3bs + Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - Haruka-naru Tatakai (Ancient Battles Resurgence, Hack) + ffv101 Flipper Football (v1.01) + + ffv103 + Flipper Football (v1.03) + ffv104 Flipper Football (v1.04) @@ -26117,7 +27389,7 @@ fgtlayer - Fighting Layer (FTL3/VER.A) + Fighting Layer (Asia, FTL3/VER.A) fgtlayerj @@ -26169,11 +27441,11 @@ fhunter - Fortune Hunter (2XF5196I01, USA) + Fortune Hunter (2XF5196I01, US) fhuntera - Fortune Hunter (2XF5196I02, USA) + Fortune Hunter (2XF5196I02, US) fi6845 @@ -26353,7 +27625,11 @@ findout - Find Out (Version 4.04) + Find Out (Version 4.04, set 1) + + + findouta + Find Out (Version 4.04, set 2) finehour @@ -26369,7 +27645,11 @@ finfurl2j - Final Furlong 2 (Japan) + Final Furlong 2 (Japan, FFS1 Ver.A) + + + finger + Finger (bootleg of Stinger) finlapjb @@ -26423,6 +27703,10 @@ firednc Fire Dancer (20184911, NSW/ACT) + + firednca + Fire Dancer (10191311, ASP) + firefox Fire Fox (set 1) @@ -26485,7 +27769,11 @@ firetrk - Fire Truck / Smokey Joe + Fire Truck / Smokey Joe (PROM version) + + + firetrka + Fire Truck / Smokey Joe (ROM version) firstcl @@ -26565,11 +27853,11 @@ fixeightj - FixEight (Japan) + FixEight - Jigoku no Eiyuu Densetsu (Japan) fixeightjt - FixEight (Japan, Taito license) + FixEight - Jigoku no Eiyuu Densetsu (Japan, Taito license) fixeightk @@ -26745,7 +28033,11 @@ flickyup - Flicky (64k Version, on Up'n Down boardset) + Flicky (64k Version, on Up'n Down boardset, set 1) + + + flickyupa + Flicky (64k Version, on Up'n Down boardset, set 2) flight2k @@ -26777,11 +28069,11 @@ floritas - Floritas (Moon Cresta bootleg) + Floritas (bootleg of Moon Cresta) floritasm - Floritas (Multivideo Spanish Moon Cresta bootleg) + Floritas (Multivideo Spanish bootleg of Moon Cresta) flower @@ -26807,6 +28099,10 @@ flstoryj The FairyLand Story (Japan) + + flstoryo + The FairyLand Story (earlier) + flyball Flyball (rev 2) @@ -26823,6 +28119,10 @@ flyboyb Fly-Boy (bootleg) + + flyingf + Flying Fortress [TTL] + flytiger Flying Tiger (set 1) @@ -26831,6 +28131,10 @@ flytigera Flying Tiger (set 2) + + fmaniac2p + Fishing Maniac 2+ + fmaniac3 Fishing Maniac 3 @@ -26889,7 +28193,11 @@ footbpow - Football Power (Version 1.2) + Football Power (version 1.2) + + + footbpow11 + Football Power (version 1.1) footchmp @@ -26979,6 +28287,10 @@ fortfvr Fortune Fever (BHG1566, US) + + fortking + Fortune King (10230911, ASP) + fortune1 Fortune I (PK485-S) Draw Poker @@ -27051,6 +28363,10 @@ frankstg Mary Shelley's Frankenstein (Germany) + + franksti + Mary Shelley's Frankenstein (Italy) + franticf Frantic Fred (Release 2) @@ -27061,11 +28377,11 @@ freddy - Freddy: A Nightmare on Elm Street (rev.3) + Freddy: A Nightmare on Elm Street (rev.4) - freddy4 - Freddy: A Nightmare on Elm Street (rev.4) + freddy3 + Freddy: A Nightmare on Elm Street (rev.3) fredmem @@ -27091,6 +28407,10 @@ fredmesp Fred Flintstone's Memory Match (Spanish, 3/17/95) + + freedeal + Free Deal Twin Jokers Progressive + freedom Freedom @@ -27167,6 +28487,10 @@ frenzy Frenzy (revision RA1) + + frenzyxprss + Frenzy Express + fresh Fruit Fresh (Italy) @@ -27199,6 +28523,10 @@ froggeram Frogger (bootleg on Amigo? hardware) + + froggereb + Frogger - New Serie 92 (bootleg) + froggermc Frogger (Moon Cresta hardware) @@ -27209,15 +28537,19 @@ froggers1 - Frogger (Sega set 1) + Frogger (Sega, set 1) froggers2 - Frogger (Sega set 2) + Frogger (Sega, set 2) froggers3 - Frogger (Sega set 3) + Frogger (Sega, set 3) + + + froggert + Frogger (Turtles hardware) froggerv @@ -27307,6 +28639,10 @@ frpwr_t6 Firepower (T-6) + + frtgenie + Fruit Genie (Version 1-1-03) + fruitbun Fruits & Bunny (World?) @@ -27319,21 +28655,69 @@ fruitpc Fruit Land + + fruitsamples + fruitsamples + fruitsmg Fruits Magic - The Magic Party fruitstb - Fruit Star Bonus (Ver 8.27PVIE) + Fruit Star Bonus (Ver 8.2.00ITL) fruitstba + Fruit Star Bonus (Ver 8.27PVIE) + + + fruitstbb Fruit Star Bonus (Ver 8.20PIR) + + fruitstbc + Fruit Star Bonus (Ver 8.36UNG-1100) + + + fruitstbd + Fruit Star Bonus (Ver 8.30UNG-200) + + + fruitstbe + Fruit Star Bonus (Ver 8.23PSTK, Steiermark) + + + fruitstbf + Fruit Star Bonus (Ver 8.17BGL-3, Burgenland, set 1) + + + fruitstbg + Fruit Star Bonus (Ver 8.17BGL-3, Burgenland, set 2) + + + fruitstbh + Fruit Star Bonus (Ver 8.30UNG-25, set 1) + + + fruitstbi + Fruit Star Bonus (Ver 8.30UNG-25, set 2) + fruitstr - Fruit Star (encrypted) + Fruit Star (T10S, encrypted) + + + fruitstra + Fruit Star (v810, encrypted) + + + fruitwld + Fruit World (V111) + + + fruitwlda + Fruit World (V110) fs_la5 @@ -27397,7 +28781,11 @@ fstarfrcj - Final Star Force (Japan) + Final Star Force (Japan, set 1) + + + fstarfrcja + Final Star Force (Japan, set 2) fstarfrcw @@ -27700,8 +29088,8 @@ F-Zero AX Monster Ride - g13jnc - Golgo 13: Juusei no Chinkonka (Japan, GLT1 VER.A) + g13jnr + Golgo 13: Juusei no Requiem (Japan, GLT1 VER.A) g13knd @@ -27747,6 +29135,14 @@ ga2u Golden Axe: The Revenge of Death Adder (US, Rev A) + + gahaha + GAHAHA Ippatsudou (World, GID2 Ver.A) + + + gahaha2 + GAHAHA Ippatsudou 2 (Japan, GIS1 Ver.A) + gaia Gaia Crusaders @@ -27777,12 +29173,16 @@ gakusai - Mahjong Gakuensai (Japan) + Mahjong Gakuensai (Japan, set 1) gakusai2 Mahjong Gakuensai 2 (Japan) + + gakusaia + Mahjong Gakuensai (Japan, set 2) + gal10ren Mahjong Gal 10-renpatsu (Japan) @@ -27795,6 +29195,10 @@ galactic Galactica - Batalha Espacial + + galactica2 + Galactica-2 (bootleg of Moon Alien Part 2) + galag88b Galaga '88 (set 2) @@ -27861,7 +29265,11 @@ galap1 - Space Invaders Galactica ('Galaxian (Namco set 2)' hack) + Space Invaders Galactica (hack of 'Galaxian (Namco set 2)') + + + galap2 + GX Part 2 (hack of Galaxian) galap4 @@ -27869,7 +29277,11 @@ galapx - Galaxian Part X ('Moon Alien' hack) + Galaxian Part X (hack of 'Moon Alien') + + + galartic + Galaxian (Artic System bootleg) galastrm @@ -27939,6 +29351,10 @@ galaxiani Galaxian (Irem) + + galaxianiii + Galaxian III (bootleg of Galaxian) + galaxianm Galaxian (Midway set 1) @@ -28027,6 +29443,10 @@ galhustl Gals Hustler + + galilfac + Galileo Factory (main) + galivan Cosmo Police Galivan (12/26/1985) @@ -28069,6 +29489,10 @@ gallop + Gallop - Armed Police Unit (Japan, M84 hardware) + + + gallopm72 Gallop - Armed Police Unit (Japan, M72 hardware) @@ -28165,15 +29589,19 @@ galpanic - Gals Panic (Unprotected) + Gals Panic (unprotected, ver. 2.0) galpanica - Gals Panic (MCU Protected, set 1) + Gals Panic (unprotected) galpanicb - Gals Panic (MCU Protected, set 2) + Gals Panic (ULA protected, set 1) + + + galpanicc + Gals Panic (ULA protected, set 2) galpanicms @@ -28211,13 +29639,17 @@ galpaniska Gals Panic S - Extra Edition (Korea) + + galpanisu + Gals Panic SU (Korea, Gals Panic 4 re-release) + galpans2 - Gals Panic S2 (Europe) + Gals Panic S2 (Europe, version 3) galpans2a - Gals Panic S2 (Asia) + Gals Panic S2 (Asia, version 1.1) galpans2j @@ -28229,6 +29661,10 @@ galpansu + Gals Panic SU (Korea, version 5) + + + galpansua Gals Panic SU (Korea) @@ -28257,11 +29693,11 @@ galturbo - Galaxian Turbo ('Super Galaxians' hack) + Galaxian Turbo (hack of 'Super Galaxians') galwars2 - Galaxy Wars II (Defender bootleg) + Galaxy Wars II (bootleg of Defender) galxwar2 @@ -28301,15 +29737,27 @@ gambl186 - Multi Game (Versione 4.0.3 - 1.5.7, 05-FEV-99(397)) (V398?) + Multi Game (Italian, Versione 4.0.3 - 1.5.7, 05-FEV-99(397)) (V398?) gambl186a - Multi Game (Versione 4.0.3 - 1.5.7, 05-FEV-99(397)) (V399?) + Multi Game (Italian, Versione 4.0.3 - 1.5.7, 05-FEV-99(397)) (V399?) gambl186b - Multi Game (Versione 3.8.6T - 1.5.6, 25-AUG-97) (V378?) + Multi Game (Italian, Versione 3.8.6T - 1.5.6, 25-AUG-97) (V378?) + + + gambl186c + Multi Game (French / English, Version Soft 4.4.8T - 4.0.5, 26-OCT-00) + + + gambl186d + Multi Game (English, Version Soft 4.1.2T - 1.5.7, 16-MAY-00(397)) + + + gambl186e + Multi Game (Italian, Versione 3.9.8 - 1.5.7, 01-JUL-98) gambler @@ -28339,13 +29787,21 @@ gammagic Game Magic + + gampo812 + Gamble Poker (v812, encrypted) + + + gampo816 + Gamble Poker (v816, encrypted) + gamshara - Gamshara (World, 10021 Ver.A) + Gamshara (20020912A / 10021 Ver.A) - gamsharaj - Gamshara (Japan, 10021 Ver.A) + gamsharao + Gamshara (20020716A / 10021 Ver.A) gamt1 @@ -28931,6 +30387,10 @@ gaplusd Gaplus (GP2 rev D, alternate hardware) + + gapluse + Gaplus (GP7) + gapluso Gaplus (rev. B) @@ -29055,14 +30515,14 @@ garou Garou - Mark of the Wolves (NGM-2530) - - garoub - Garou - Mark of the Wolves (Enable hidden characters) - garoubl Garou - Mark of the Wolves (bootleg) + + garoubs + Garou - Mark of the Wolves (Enable hidden characters, Hack) + garouh Garou - Mark of the Wolves (NGM-2530 ~ NGH-2530) @@ -29071,6 +30531,10 @@ garouha Garou - Mark of the Wolves (NGH-2530) + + garoujq + Garou - Mark of the Wolves (Enhanced, Hack) + garouo Garou - Mark of the Wolves (set 2) @@ -29345,7 +30809,7 @@ gcpinbal - Grand Cross v1.02F + Grand Cross (v1.02F) gdarius @@ -29363,6 +30827,10 @@ gdariusu G-Darius (Ver 2.02A) + + gderby + Gran Derby (Spanish hack of Jockey Club) + gdfs Mobile Suit Gundam Final Shooting (Japan) @@ -29397,7 +30865,7 @@ gegemdb - Gegege no Kitaro Yokai Yokocho Matsuri De Batoru Ja (GYM1 Ver.A) + Gegege no Kitaro Yokai Yokocho Matsuri de Battle Ja (GYM1 Ver.A) geimulti @@ -29411,6 +30879,14 @@ geishaa6 Geisha (10000811, NSW/ACT) + + geishaa6a + Geisha (10122011, ASP) + + + geishaa6b + Geisha (10112411, ASP) + geishajc Geisha - Jackpot Carnival (0351033, US) @@ -29433,7 +30909,7 @@ gekisha - Mahjong Gekisha + Mahjong Gekisha (Japan, Bet) gekisou @@ -29533,7 +31009,11 @@ geostorm - Geo Storm (Japan) + Geo Storm (Japan, 014 custom sound CPU) + + + geostorma + Geo Storm (Japan, 026 custom sound CPU) gepoker @@ -29553,7 +31033,7 @@ getaway - Get A Way + Get A Way (upright) getbass @@ -29635,6 +31115,10 @@ ggisuka Guilty Gear Isuka + + ggoemon + Ganbare Goemon + ggram2 Giant Gram: All Japan Pro Wrestling 2 (Japan) @@ -29873,11 +31357,11 @@ ginganin - Ginga NinkyouDen (set 1) + Ginga Ninkyouden (set 1) ginganina - Ginga NinkyouDen (set 2) + Ginga Ninkyouden (set 2) ginkun @@ -29893,7 +31377,7 @@ gjspace - Gekitoride-Jong Space (10011 Ver.A) + GekiToride-Jong Space (10011 Ver.A) gkigt4 @@ -30017,7 +31501,7 @@ gladiatp - Gladiators + Gladiators (pinball) gladiatr @@ -30039,18 +31523,26 @@ glasskr Glass (Ver 1.1, Break Edition, Checksum D419AB69, Version 1994) (censored, unprotected) + + glck6809 + Good Luck! (dual 6809 GI Australasia PCB) + gldarrow Golden Arrow (Standard G8-03) gldgong - The Golden Gong (0152558, US) + The Golden Gong (20196011, ASP) gldgongq The Golden Gong (10217411, Queensland) + + gldgongu + The Golden Gong (0152558, US) + gldncrwn Golden Crown (Dutch, Game Card 95-752-011) @@ -30061,11 +31553,11 @@ gldneye - Goldeneye (4.04) + Goldeneye (CPU 4.04, display A4.00) gldneye_402 - Goldeneye (4.02) + Goldeneye (CPU 4.02, display A4.00) gldnflc @@ -30147,6 +31639,10 @@ glpracrj Gallop Racer (Japanese Ver 9.01.12) + + glregion + Golden Region + gluck2 Good Luck II @@ -30389,15 +31885,15 @@ godzillp - Godzilla (Pinball, 2.05) + Godzilla (pinball, CPU 2.05, display A2.00) godzillp_090 - Godzilla (Pinball, 0.90) + Godzilla (pinball, CPU 0.90, display A0.991) godzillp_100 - Godzilla (Pinball, 1.00) + Godzilla (pinball, CPU 1.00, display A1.00) gogold @@ -30423,6 +31919,10 @@ gogreen Go For Green (10003411, NSW/ACT) + + gogreena + Go For Green (10122111, ASP) + goindol Goindol (World) @@ -30443,17 +31943,9 @@ goketsuj Gouketsuji Ichizoku: Senzo Kuyou (v200906230) - - gokidetor - Gokidetor (set 1) - - - gokidetor2 - Gokidetor (set 2) - gokuparo - Gokujyou Parodius (ver JAD) + Gokujou Parodius: Kako no Eikou o Motomete (ver JAD) goldarch @@ -30485,12 +31977,16 @@ goldcue - Golden Cue + Golden Cue (CPU 0.04, display 0.10 goldenc Golden Canaries (1VXFC5462, New Zealand) + + goldenchip + Golden Chip + goldenra Golden Ra (0101164V, NSW/ACT) @@ -30623,18 +32119,42 @@ goldnaxj Golden Axe (Version 1, Japan) + + goldnjkr + Golden Joker (Ver 16.06UNG-25, set 1) + + + goldnjkra + Golden Joker (Ver 16.06UNG-25, set 2) + goldnpkb Golden Poker Double Up (Mini Boy) goldnpkc - Golden Poker Double Up (bootleg) + Golden Poker Double Up (bootleg, set 1) + + + goldnpkd + Golden Poker Double Up (bootleg, set 2) + + + goldnpke + Golden Poker Double Up (bootleg, set 3) + + + goldnpkf + Golden Poker Double Up (bootleg, set 4) goldnpkr Golden Poker Double Up (Big Boy) + + goldpya6 + Golden Pyramids (10196511, ASP) + goldpym Golden Pyramids Special Edition - Maximillions (10130811, NSW/ACT) @@ -30649,7 +32169,7 @@ goldpyrb - Golden Pyramids (0100878V, Victoria) + Golden Pyramids (0100878V, ASP) goldsam @@ -30731,6 +32251,10 @@ gorfpgm1 Gorf (program 1) + + gorfpgm1f + Gorf (program 1, with French Language ROM) + gorfpgm1g Gorf (program 1, with German Language ROM) @@ -30751,6 +32275,10 @@ gostop Kankoku Hanafuda Go-Stop + + gostopac + Go & Stop + gotcha Got-cha Mini Game Festival @@ -30773,7 +32301,11 @@ gp98 - Grand Prix '98 (V100K) + Grand Prix '98 (V100K, set 1) + + + gp98a + Grand Prix '98 (V100K, set 2) gpgolf @@ -30821,123 +32353,123 @@ gprix - Grand Prix (4.50) + Grand Prix (CPU 4.50, display A4.00) gprix_301 - Grand Prix (3.01) + Grand Prix (CPU 3.01, display A3.01) gprix_340 - Grand Prix (3.40) + Grand Prix (CPU 3.40, display A3.03) gprix_350 - Grand Prix (3.50) + Grand Prix (CPU 3.50, display A3.03) gprix_352 - Grand Prix (3.52) + Grand Prix (CPU 3.52, display A3.03) gprix_400 - Grand Prix (4.00) + Grand Prix (CPU 4.00, display A4.00) gprixf - Grand Prix (4.50 France) + Grand Prix (CPU 4.50, display F4.00, France) gprixf_301 - Grand Prix (3.01 France) + Grand Prix (CPU 3.01, display F3.01, France) gprixf_340 - Grand Prix (3.40 France) + Grand Prix (CPU 3.40, display F3.03, France) gprixf_350 - Grand Prix (3.50 France) + Grand Prix (CPU 3.50, display F3.03, France) gprixf_352 - Grand Prix (3.52 France) + Grand Prix (CPU 3.52, display F3.03, France) gprixf_400 - Grand Prix (4.00 France) + Grand Prix (CPU 4.00, display F4.00, France) gprixg - Grand Prix (4.50 Germany) + Grand Prix (CPU 4.50, display G4.00, Germany) gprixg_301 - Grand Prix (3.01 Germany) + Grand Prix (CPU 3.01, display G3.01, Germany) gprixg_340 - Grand Prix (3.40 Germany) + Grand Prix (CPU 3.40, display G3.03, Germany) gprixg_350 - Grand Prix (3.50 Germany) + Grand Prix (CPU 3.50, display G3.03, Germany) gprixg_352 - Grand Prix (3.52 Germany) + Grand Prix (CPU 3.52, display G3.03, Germany) gprixg_400 - Grand Prix (4.00 Germany) + Grand Prix (CPU 4.00, display G4.00, Germany) gprixi - Grand Prix (4.50 Italy) + Grand Prix (CPU 4.50, display I4.00, Italy) gprixi_301 - Grand Prix (3.01 Italy) + Grand Prix (CPU 3.01, display I3.01, Italy) gprixi_340 - Grand Prix (3.40 Italy) + Grand Prix (CPU 3.40, display I3.03, Italy) gprixi_350 - Grand Prix (3.50 Italy) + Grand Prix (CPU 3.50, display I3.03, Italy) gprixi_352 - Grand Prix (3.52 Italy) + Grand Prix (CPU 3.52, display I3.03, Italy) gprixi_400 - Grand Prix (4.00 Italy) + Grand Prix (CPU 4.00, display I4.00, Italy) gprixl - Grand Prix (4.50 Spain) + Grand Prix (CPU 4.50, display L4.00, Spain) gprixl_301 - Grand Prix (3.01 Spain) + Grand Prix (CPU 3.01, display L3.01, Spain) gprixl_340 - Grand Prix (3.40 Spain) + Grand Prix (CPU 3.40, display L3.03, Spain) gprixl_350 - Grand Prix (3.50 Spain) + Grand Prix (CPU 3.50, display L3.03, Spain) gprixl_352 - Grand Prix (3.52 Spain) + Grand Prix (CPU 3.52, display L3.03, Spain) gprixl_400 - Grand Prix (4.00 Spain) + Grand Prix (CPU 4.00, display L4.00, Spain) gpworld @@ -30979,6 +32511,26 @@ gradius4 Gradius IV: Fukkatsu (ver JAC) + + gradius4a + Gradius IV (ver AAC) + + + gradius4aa + Gradius IV (ver AAA) + + + gradius4ja + Gradius IV: Fukkatsu (ver JAA) + + + gradius4u + Gradius IV (ver UAC) + + + gradius4ua + Gradius IV (ver UAA) + gradiusb Gradius (Bubble System) @@ -31111,6 +32663,18 @@ grdian Guardian (US) + + grdiands + Guardians / Denjin Makai II (Pro, Hack) + + + grdianke + Guardians / Denjin Makai II (Reverie, Hack) + + + grdianls + Guardians / Denjin Makai II (LBS Super, Hack) + grdians Guardians / Denjin Makai II (P-FG01-1 PCB) @@ -31120,20 +32684,16 @@ Guardians / Denjin Makai II (P0-113A PCB) - grdianske - Guardians (Kerron Edition, Hack) - - - grdianslbs - Guardians (LBS Edition, Hack) + grdiansl + Guardians / Denjin Makai II (LBS, Hack) - grdianslbss - Guardians (Field Edition, Hack) + grdiansp + Guardians / Denjin Makai II (Plus, Hack) - grdianssy - Guardians (Shen Yue Edition, Hack) + grdiansy + Guardians / Denjin Makai II (Evil, Hack) grdius2a @@ -31181,7 +32741,7 @@ greatgur - Great Gurianos (Japan?) + Great Gurianos (bootleg?) greenber @@ -31239,6 +32799,10 @@ grndtour Grand Tour (V100U) + + grnlizrd + Green Lizard (4VXFC811, NSW) + grobda Grobda (New Ver.) @@ -31631,10 +33195,6 @@ gtfrk10ma Guitar Freaks 10th Mix (G*D10 VER. JAA) - - gtfrk10mb - Guitar Freaks 10th Mix eAmusement (G*D10 VER. JBA) - gtfrk11m Guitar Freaks 11th Mix (G*D39 VER. JAA) @@ -31668,16 +33228,20 @@ Golden Tee Golf (Joystick, v3.1) - gtgt + gtgt10 + Golden Tee Golf (Trackball, v1.0) + + + gtgt20 Golden Tee Golf (Trackball, v2.0) - gtgt1 - Golden Tee Golf (Trackball, v1.0) + gtgt21 + Golden Tee Golf (Trackball, v2.1) gticlub - GTI Club (ver EAA) + GTI Club: Rally Cote D'Azur (ver EAA) gticlub2 @@ -31685,19 +33249,19 @@ gticlub2ea - GTI Club: Corso Italiano (ver EAA) + Driving Party: Racing in Italy (ver EAA) gticluba - GTI Club (ver AAA) + GTI Club: Rally Cote D'Azur (ver AAA) gticlubj - GTI Club (ver JAA) + GTI Club: Rally Cote D'Azur (ver JAA) gticlubu - GTI Club (ver UAA) + GTI Club: Rally Cote D'Azur (ver UAA) gtipoker @@ -31799,6 +33363,10 @@ gtrfrk5m Guitar Freaks 5th Mix (G*A26 VER. JAA) + + gtrfrk5ma + Guitar Freaks 5th Mix (G*A26 VER. AAA) + gtrfrk6m Guitar Freaks 6th Mix (G*B06 VER. JAA) @@ -31827,6 +33395,10 @@ gtrfrksa Guitar Freaks Ver 1.01 (GQ886 VER. AAD) + + gtrfrksaa + Guitar Freaks (GQ886 VER. AAA) + gtrfrksac Guitar Freaks (GQ886 VER. AAC) @@ -31835,10 +33407,18 @@ gtrfrksc Guitar Freaks (GQ886 VER. EAC) + + gtrfrksea + Guitar Freaks (GQ886 VER. EAA) + gtrfrksj Guitar Freaks Ver 1.01 (GQ886 VER. JAD) + + gtrfrksja + Guitar Freaks (GQ886 VER. JAA) + gtrfrksjc Guitar Freaks (GQ886 VER. JAC) @@ -31847,10 +33427,62 @@ gtrfrksu Guitar Freaks Ver 1.01 (GQ886 VER. UAD) + + gtrfrksua + Guitar Freaks (GQ886 VER. UAA) + gtrfrksuc Guitar Freaks (GQ886 VER. UAC) + + gtrfrkv2a + Guitar Freaks V2 (F03:A:A:A:2006011201) + + + gtrfrkv2aa + Guitar Freaks V2 (F03:A:A:A:2005112800) + + + gtrfrkv2ab + Guitar Freaks V2 (F03:A:A:A:2005101600) + + + gtrfrkv2j + Guitar Freaks V2 (F03:J:A:A:2006011201) + + + gtrfrkv2ja + Guitar Freaks V2 (F03:J:A:A:2005112800) + + + gtrfrkv2jb + Guitar Freaks V2 (F03:J:A:A:2005101600) + + + gtrfrkv3a + Guitar Freaks V3 (F33:A:A:A:2006101800) + + + gtrfrkv3aa + Guitar Freaks V3 (F33:A:A:A:2006072600) + + + gtrfrkv3j + Guitar Freaks V3 (F33:J:A:A:2006101800) + + + gtrfrkv3ja + Guitar Freaks V3 (F33:J:A:A:2006072600) + + + gtrfrkva + Guitar Freaks V (E03:A:A:A:2005050200) + + + gtrfrkvj + Guitar Freaks V (E03:J:A:A:2005050200) + gtroppo Gone Troppo (1VXEC542, New Zealand) @@ -31873,7 +33505,11 @@ gtsers11a - Trivia (Questions Series 11 Alt Question Rom) + Trivia (Questions Series 11 Alt Question Rom, set 1) + + + gtsers11b + Trivia (Questions Series 11 Alt Question Rom, set 2) gtsers12 @@ -31895,6 +33531,10 @@ gtsers15 Trivia (Questions Series 15) + + gtsers18 + Trivia (Questions Series 18) + gtsers2 Trivia (Questions Series 2) @@ -32113,7 +33753,11 @@ gundealrbl - Gun Dealer (Yam! Yam!? hardware) + Gun Dealer (Yam! Yam!? hardware, set 1) + + + gundealrbl2 + Gun Dealer (Yam! Yam!? hardware, set 2) gundealrt @@ -32243,37 +33887,45 @@ gunpey Gunpey (Japan) + + gunshot + Gun Shot + gunsmoka Gun.Smoke (US set 2) gunsmoke - Gun.Smoke (World, 851115) + Gun.Smoke (World, 1985-11-15) gunsmokeb - Gun.Smoke (World, 851115) (bootleg) + Gun.Smoke (World, 1985-11-15) (bootleg) gunsmokeg - Gun.Smoke (Germany, censored) + Gun.Smoke (Germany, 1985-11-15, censored) gunsmokej - Gun.Smoke (Japan, 851115) + Gun.Smoke (Japan, 1985-11-15) gunsmokeu - Gun.Smoke (US, 860408) + Gun.Smoke (USA and Canada, 1986-04-08) gunsmokeua - Gun.Smoke (US, 851115, set 1) + Gun.Smoke (USA and Canada, 1986-01-20) gunsmokeub - Gun.Smoke (US, 851115, set 2) + Gun.Smoke (USA and Canada, 1985-11-15, set 1) + + + gunsmokeuc + Gun.Smoke (USA and Canada, 1985-11-15, set 2) gunsmokj @@ -32329,11 +33981,11 @@ guwange - Guwange (Japan, Master Ver. 99/06/24) + Guwange (Japan, 1999 6/24 Master Ver 16:55) guwanges - Guwange (Japan, Special Ver. 00/07/07) + Guwange (Japan, 2000 7/ 7 Special Ver 13:22) guzzler @@ -32415,10 +34067,6 @@ gwinggen Giga Wing Generations (v2.02J) - - gwingj - Giga Wing (Japan 990223) - gwinner Golden Winner @@ -32477,11 +34125,15 @@ hacher - Hacher (hack of Win Win Bingo) + Hacher (hack of Win Win Bingo EN.01.6) hachoo - Hachoo! + Hachoo! (set 1) + + + hachooa + Hachoo! (set 2) haekaka @@ -32501,11 +34153,15 @@ halley - Halley Comet + Halley Comet (set 1) halleya - Halley Comet (alternate version) + Halley Comet (set 2) + + + halleyb + Halley Comet (set 3) halleycj @@ -32543,6 +34199,10 @@ hamboy Hammer Boy + + hamhouse + Hamburger House + hammer Hammer @@ -32743,6 +34403,10 @@ harddrivcb Hard Drivin' (compact, British, rev 2) + + harddrivcbl + Hard Drivin' (compact, rev 2 bootleg) + harddrivcg Hard Drivin' (compact, German, rev 2) @@ -32869,99 +34533,99 @@ harl_a10 - Harley Davidson (1.03 Display rev. 1.00) + Harley Davidson (Sega, CPU 1.03, display A1.00) harl_a13 - Harley Davidson (1.03) + Harley Davidson (Sega, CPU 1.03, display A1.04) harl_a18 - Harley Davidson (1.08) + Harley Davidson (Stern, CPU 1.08, display A1.05) harl_a30 - Harley Davidson (3.00) + Harley Davidson (Stern, CPU 3.00, display A3.00) harl_a40 - Harley Davidson (4.00) + Harley Davidson (Stern, CPU 4.00, display A4.00) harl_f13 - Harley Davidson (1.03 France) + Harley Davidson (Sega, CPU 1.03, display F1.04, France) harl_f18 - Harley Davidson (1.08 France) + Harley Davidson (Stern, CPU 1.08, diaplay F1.05, France) harl_f30 - Harley Davidson (3.00 France) + Harley Davidson (Stern, CPU 3.00, display F3.00, France) harl_f40 - Harley Davidson (4.00 France) + Harley Davidson (Stern, CPU 4.00, display F4.00, France) harl_g13 - Harley Davidson (1.03 Germany) + Harley Davidson (Sega, CPU 1.03, display G1.04, Germany) harl_g18 - Harley Davidson (1.08 Germany) + Harley Davidson (Stern, CPU 1.08, display G1.05, Germany) harl_g30 - Harley Davidson (3.00 Germany) + Harley Davidson (Stern, CPU 3.00, display G3.00, Germany) harl_g40 - Harley Davidson (4.00 Germany) + Harley Davidson (Stern, CPU 4.00, display G4.00, Germany) harl_i13 - Harley Davidson (1.03 Italy) + Harley Davidson (Sega, CPU 1.03, display I1.04, Italy) harl_i18 - Harley Davidson (1.08 Italy) + Harley Davidson (Stern, CPU 1.08, display I1.05, Italy) harl_i30 - Harley Davidson (3.00 Italy) + Harley Davidson (Stern, CPU 3.00, display I3.00, Italy) harl_i40 - Harley Davidson (4.00 Italy) + Harley Davidson (Stern, CPU 4.00, display I4.00, Italy) harl_l13 - Harley Davidson (1.03 Spain) + Harley Davidson (Sega, CPU 1.03, display L1.04, Spain) harl_l18 - Harley Davidson (1.08 Spain) + Harley Davidson (Stern, CPU 1.08, display L1.05, Spain) harl_l30 - Harley Davidson (3.00 Spain) + Harley Davidson (Stern, CPU 3.00, display L3.00, Spain) harl_l40 - Harley Davidson (4.00 Spain) + Harley Davidson (Stern, CPU 4.00, display L4.00, Spain) harl_u13 - Harley Davidson (1.03 UK) + Harley Davidson (Sega, CPU 1.03, display A1.04, UK) harley - Harley-Davidson and L.A. Riders (Revision B) + Harley-Davidson and L.A. Riders (Export, Revision B) harleya - Harley-Davidson and L.A. Riders (Revision A) + Harley-Davidson and L.A. Riders (Export, Revision A) hasamu @@ -32979,9 +34643,13 @@ hatrisj Hatris (Japan) + + hatrisp + Hatris (show version) + hattrick - Hat Trick + Hat Trick (11/12/84) haunthig @@ -33299,6 +34967,10 @@ hb_jkrwla Jokers Wild (Fairgames) (set 2) + + hb_junglet + Jungle Treasures + hb_medal Medallion Job (Qps) @@ -33511,6 +35183,10 @@ heartgld Heart of Gold (20169511, NSW/ACT) + + heartglda + Heart of Gold (10184211, ASP) + heartspd Hearts & Spades @@ -33633,7 +35309,7 @@ herodku - Hero in the Castle of Doom (DK conversion not encrypted) + Hero in the Castle of Doom (DK conversion, not encrypted) heromem @@ -33719,6 +35395,10 @@ hharryb Hammerin' Harry (World, M84 hardware bootleg) + + hharryb2 + Hammerin' Harry (Playmark bootleg) + hharryu Hammerin' Harry (US, M84 hardware) @@ -33787,6 +35467,10 @@ highspltb SF-HiSplitter (alt sound) + + higurashi + Higurashi no Naku Koro ni Jong (Japan) + hiimpact High Impact Football (rev LA5 02/15/91) @@ -33837,35 +35521,35 @@ hirol_fr - High Roller Casino (3.00 France) + High Roller Casino (CPU 3.00, display F3.00, France) hirol_gr - High Roller Casino (3.00 Germany) + High Roller Casino (CPU 3.00, display G3.00, Germany) hirol_gr_210 - High Roller Casino (2.10 Germany) + High Roller Casino (CPU 2.10, display G2.01, Germany) hirol_it - High Roller Casino (3.00 Italy) + High Roller Casino (CPU 3.00, display I3.00, Italy) hirolcas - High Roller Casino (3.00) + High Roller Casino (CPU 3.00, display A3.00) hirolcas_210 - High Roller Casino (2.10) + High Roller Casino (CPU 2.10, diaplay A2.00) hirolcat - High Roller Casino (3.00) TEST + High Roller Casino (CPU 2.90, display A2.99) hironew - High Roller Casino (ARM7 Sound Board) + High Roller Casino (CPU 3.00, display A3.00, ARM7 sound board) hiryuken @@ -33919,17 +35603,21 @@ hitnmiss2 Hit 'n Miss (version 2.0) + + hitpar + Hit Parade 108 / 144 / 160 + hitpoker Hit Poker (Bulgaria) hjingi - Hana Jingi (Japan, Bet) + Hana Jingi (Japan set 1, Bet) hjingia - Hana Jingi (Japan, Bet, alt.) + Hana Jingi (Japan set 2, Bet) hkagerou @@ -33971,6 +35659,18 @@ hlntroy Helen of Troy (1J008311, NSW/ACT) + + hlntroya + Helen of Troy (10129121, ASP) + + + hlntroyb + Helen of Troy (10122711, ASP) + + + hlntroyc + Helen of Troy (10116411, ASP) + hlntroyu Helen of Troy (0151336, US) @@ -34049,11 +35749,11 @@ hoccer - Hoccer (set 1) + Hoccer (newer) hoccer2 - Hoccer (set 2) + Hoccer (earlier) hockyrmt @@ -34080,9 +35780,17 @@ Hog Wild (US) - holdrma + holddraw + Hold & Draw + + + holdrma6 Hollywood Dreams (10100511, NSW/ACT) + + holdrma6a + Hollywood Dreams (10122811, ASP) + holeland Hole Land (Japan) @@ -34109,16 +35817,24 @@ honeydol - Honey Dolls + Honey Doll honeypot Honey Pot (03J00241, NSW/ACT) + + honooinv + Honoo no Invader (Japan, main ver. 1.35, video ver. 1.35) + hook Hook (World) + + hook_400 + Hook (USA 4.01, display A4.00) + hook_401 Hook (USA 4.01, display A4.01) @@ -34139,6 +35855,10 @@ hook_e406 Hook (UK 4.06, display A4.01) + + hook_f401 + Hook (USA 4.01, display F4.01) + hookj Hook (Japan) @@ -34151,6 +35871,10 @@ hoopitup Hoop it Up World Tour - 3 on 3 (Rev 23) + + hoopitup21 + Hoop it Up World Tour - 3 on 3 (Rev 21) + hoops Hoops @@ -34185,12 +35909,20 @@ horekidb - Kid no Hore Hore Daisakusen (bootleg) + Kid no Hore Hore Daisakusen (bootleg set 1) + + + horekidb2 + Kid no Hore Hore Daisakusen (bootleg set 2) horizon Horizon (Irem) + + horses4c + Horses For Courses (NSW, Australia) + horshoes American Horseshoes (US) @@ -34211,6 +35943,14 @@ hotblockb Hot Blocks - Tetrix II (set 3) + + hotbody + Hot Body I + + + hotbody2 + Hot Body II + hotbubl Hot Bubble (Korea, with adult pictures) @@ -34227,9 +35967,13 @@ hotchasea Hot Chase (set 2) + + hotchili + Hot Chilli (95103, v0104) + hotd - The House of the Dead + The House of the Dead (Revision A) hotd2 @@ -34267,6 +36011,10 @@ hotdex The House of the Dead EX (Japan) + + hotdo + The House of the Dead + hotdoggn Hotdoggin' @@ -34397,16 +36145,24 @@ hourouki - Mahjong Hourouki Part 1 - Seisyun Hen (Japan) + Mahjong Hourouki Part 1 - Seishun Hen (Japan) houseball House Ball + + housecard + House of Cards (HSC1) + househrt House of Hearts (10200311, NSW/ACT) + + househrta + House of Hearts (10208411, ASP) + housemn2 House Mannequin Roppongi Live hen (Japan 870418) @@ -34431,10 +36187,18 @@ hpolym84 Hyper Olympic '84 + + hppyvideo + Happy Video + hpuncher Hard Puncher (Japan) + + hpyagu98 + Hanguk Pro Yagu 98 + hrclass Home Run Classic (v1.21 12-feb-1997) @@ -34447,6 +36211,10 @@ hrdtimesa Hard Times (set 2) + + hrtthrob + Heart Throb (01J02866, Venezuela) + hs_l3 High Speed (L-3) @@ -34479,6 +36247,10 @@ hsf2j1 Hyper Street Fighter II: The Anniversary Edition (Japan 031222) + + hsf2pp + Hyper Street Fighter II Plus Plus + hshavoc High Seas Havoc @@ -34543,6 +36315,14 @@ hthero95u Hat Trick Hero '95 (Ver 2.5A 1994/11/03) + + htheroj + Hat Trick Hero (Japan) + + + htherou + Hat Trick Hero (US) + hthro95u Hat Trick Hero '95 (US) @@ -34551,6 +36331,10 @@ httip_l1 Hot Tip (L-1) + + huhimage + Heat Up Hockey Image (Ver.1.003R) + hulk The Incredible Hulk @@ -34613,11 +36397,11 @@ hustlerb2 - Fatsy Gambler (Video Hustler bootleg) + Fatsy Gambler (bootleg of Video Hustler) hustlerb3 - Video Pool (Video Hustler bootleg) + Video Pool (bootleg of Video Hustler) hustlerb4 @@ -34727,6 +36511,14 @@ hydrthnd Hydro Thunder + + hydrthnd100d + Hydro Thunder (v1.00d) + + + hydrthnd101b + Hydro Thunder (v1.01b) + hyhoo Hayaoshi Taisen Quiz Hyhoo (Japan) @@ -34777,7 +36569,7 @@ hypernoid - Hypernoid (Ver. 20211128) + Hypernoid (Ver. 20220224) hyperpac @@ -34843,6 +36635,10 @@ hyprolym Hyper Olympic + + hyprolyma + Hyper Olympic (bugfixed) + hyprolymb Hyper Olympic (bootleg, set 1) @@ -34869,7 +36665,7 @@ ibara - Ibara (2005/03/22 MASTER VER..) + Ibara (2005/03/22 MASTER VER.., '06. 3. 7 ver.) ibarablk @@ -34879,6 +36675,10 @@ ibarablka Ibara Kuro Black Label (2006/02/06 MASTER VER.) + + ibarao + Ibara (2005/03/22 MASTER VER..) + iccash I C Cash (Russia) (Atronic) @@ -34919,6 +36719,10 @@ icecoldf Ice Cold Beer (set 2) + + icecoldice + Ice Cold Beer (ICE) + icefever Ice Fever @@ -34953,19 +36757,19 @@ id4 - Independence Day (v2.02) + Independence Day (CPU 2.02, display A2.00) id4_201 - Independence Day (v2.01) + Independence Day (CPU 2.01, display A2.00) id4f - Independence Day (v2.02 France) + Independence Day (CPU 2.02, display F2.00, France) id4f_201 - Independence Day (v2.01 France) + Independence Day (CPU 2.01, display F2.00, France) idhimitu @@ -34983,6 +36787,10 @@ idsoccera Indoor Soccer (set 2) + + idsoccert + Indoor Soccer (Tecfri license PCB) + iemoto Iemoto (Japan 871020) @@ -34991,6 +36799,10 @@ iemotom Iemoto [BET] (Japan 871118) + + ifslots + ifslots + iganinju Iga Ninjyutsuden (Japan) @@ -35175,14 +36987,14 @@ imgfight Image Fight (World) - - imgfightb - Image Fight (Japan, bootleg) - imgfightj Image Fight (Japan) + + imgfightjb + Image Fight (Japan, bootleg) + imolagp Imola Grand Prix (set 1) @@ -35211,6 +37023,10 @@ incanp Incan Pyramid (Konami Endeavour, Russia) + + incanpq + Incan Pyramid (Konami Endeavour, Queensland) + incasun Inca Sun (0100872V, NSW/ACT) @@ -35259,6 +37075,10 @@ indream Indian Dreaming (10004211, NSW/ACT) + + indreama + Indian Dreaming (10192211, ASP) + indrem2c Indian Dreaming 2nd Chance (10150611, NSW/ACT) @@ -35268,9 +37088,13 @@ Indian Dreaming (0100845V, NSW/ACT) - indrema5ql + indrema5q Indian Dreaming (0101340V, Queensland) + + indrema5v + Indian Dreaming (02J01856, Venezuela) + indremce Indian Dreaming - Cash Express (20109411, NSW/ACT) @@ -35589,7 +37413,7 @@ invader4 - Space Invaders Part Four + Space Invaders Part Four (bootleg of Space Attack II) invaderl @@ -35789,7 +37613,7 @@ iqblocka - Shuzi Leyuan (V127M, gambling) + Shuzi Leyuan (China, V127M, gambling) iqblockf @@ -35951,9 +37775,17 @@ isld_vortex Vortex (Island Design) + + isshoni + Isshoni Wanwan Waiwai Puppy 2008 + istellar - Interstellar Laser Fantasy + Inter Stellar (Laser Fantasy) + + + istellar2 + Inter Stellar Zangus (Laser Fantasy vol. 2) istreb @@ -37073,7 +38905,7 @@ j5hilos - Hi Lo Silver (JPM) (SYSTEM5) + Hi-Lo Silver (JPM) (SYSTEM5) j5holly @@ -39149,27 +40981,27 @@ j6hilosv - Hi Lo Silver (JPM) (IMPACT) (set 1) + Hi-Lo Silver (JPM) (IMPACT) (set 1) j6hilosva - Hi Lo Silver (JPM) (IMPACT) (set 2) + Hi-Lo Silver (JPM) (IMPACT) (set 2) j6hilosvb - Hi Lo Silver (JPM) (IMPACT) (set 3) + Hi-Lo Silver (JPM) (IMPACT) (set 3) j6hilosvc - Hi Lo Silver (JPM) (IMPACT) (set 4, Whitbread) + Hi-Lo Silver (JPM) (IMPACT) (set 4, Whitbread) j6hilosvd - Hi Lo Silver (JPM) (IMPACT) (set 5) + Hi-Lo Silver (JPM) (IMPACT) (set 5) j6hilosve - Hi Lo Silver (JPM) (IMPACT) (set 6) + Hi-Lo Silver (JPM) (IMPACT) (set 6) j6hiphop @@ -41416,52 +43248,136 @@ Winsprint (JPM) (V3, 50p, 5 credits) (SYSTEM80) - j_ewnd20 - Each Way Nudger (Barcrest?, set 3, version 20?) + j_cnudgr + Cash Nudger? (SRU) (5p Stake, £2 Jackpot) + + + j_dt + Double Top (JPM) (SRU) (revision 13, 5p/10p Stake, £2 Jackpot) + + + j_dud + Nudge Double Up Deluxe (JPM) (SRU) (revision 10, 5p Stake, £1 Jackpot) + + + j_duda + Nudge Double Up Deluxe (JPM) (SRU) (5p/10p Stake, £2 Jackpot) + + + j_dudb + Nudge Double Up Deluxe (JPM) (SRU) (revision 12, £2 Jackpot) + + + j_ewn + Each Way Nudger (JPM) (SRU) (revision 20, 5p Stake, £1 Jackpot) + + + j_ewna + Each Way Nudger (JPM) (SRU) (revision 26A, 5p/10p Stake, £2 Jackpot) + + + j_ewnb + Each Way Nudger (JPM) (SRU) (5p/10p Stake, £2 Jackpot) - j_ewnda - Each Way Nudger (Barcrest?, set 2) + j_ewnc + Each Way Nudger (JPM) (SRU) (earlier, 5p Stake, £1 Jackpot) - j_ewnud - Each Way Nudger (Barcrest?, set 1) + j_ewnd + Each Way Nudger (JPM) (SRU) (revision 23C, 5p Stake, £1 Jackpot) j_ews - Each Way Shifter (Barcrest?, set 1, version 16) + Each Way Shuffle (JPM) (SRU) (revision 8A, 5p/10p Stake, £2 Jackpot) + + + j_ewsa + Each Way Shuffle (JPM) (SRU) (revision 13A, 5p/10p Stake, £2 Jackpot) + + + j_ewsb + Each Way Shuffle (JPM) (SRU) (revision 13C, 5p/10p Stake, £2 Jackpot) + + + j_ewsdlx + Each Way Shuffle Deluxe (CTL) (SRU) (5p/10p Stake, £3 Jackpot) + + + j_goldn2 + Golden 2's (CTL) (SRU) (2p Stake, £1.50 Jackpot) + + + j_la + Lucky Aces (SRU) (1p/2p Stake, £1.50 Jackpot) + + + j_lal + Lite a Line (Dutch) (JPM) (SRU) (revision 52) + + + j_lan + Lite A Nudge (JPM) (SRU) (revision 17F, 5p Stake, £1 Jackpot) + + + j_lana + Lite A Nudge (JPM) (SRU) (5p/10p Stake, £2 Jackpot) - j_ews8a - Each Way Shifter (Barcrest?, set 2, version 8a) + j_lanb + Lite A Nudge (JPM) (SRU) (earlier, 5p Stake, £1 Jackpot) - j_luck2 - Lucky Twos? + j_lc + Lucky Casino (JPM) (SRU) (revision 8A) - j_luckac - Lucky Aces (Unk) + j_lca + Lucky Casino (JPM) (SRU) (revision 8, lower %) - j_nuddup - Nudge Double Up (JPM SRU, set 1) + j_lt + Lucky 2's (JPM) (SRU) (revision 9, 10p Stake, £2 Jackpot) - j_nuddup2 - Nudge Double Up (JPM SRU, set 2) + j_ndu + Nudge Double Up (JPM) (SRU) (revision 17, 5p Stake, £1 Jackpot) + + + j_ndua + Nudge Double Up (JPM) (SRU) (revision 17, 5p Stake, £1 Jackpot, lower %) + + + j_ndub + Nudge Double Up (JPM) (SRU) (earlier?, 5p Stake, £1 Jackpot) j_plus2 - Plus 2 (JPM) + Plus 2 (CTL) (SRU) (2p Stake, £1 Jackpot) + + + j_ssh + Silver Shuffle (CTL) (SRU) (2p Stake, £1.50 Jackpot) + + + j_sup2p + Super 2p Shuffle (Mdm) (SRU) (2p Stake, £1 Jackpot) j_super2 - Super 2 (JPM) + Super 2 (SRU) (2p Stake, £1 Jackpot) - j_unk - unknown SRU Game (JPM?) + j_supsh + Super Shuffle (Louth Coin) (SRU) (10p Stake, £3 Jackpot) + + + j_supsha + Super Shuffle (Louth Coin) (SRU) (5p Stake, £1.50 Jackpot) + + + j_ts + Two Step (JPM) (SRU) (5p Stake, £2 Jackpot) jack @@ -41499,13 +43415,17 @@ jackbean Jack & The Beanstalk (Doyle & Assoc.?) + + jackhous + Jack House + jackie Happy Jackie (v110U) jackler - Jackler (Jungler bootleg) + Jackler (bootleg of Jungler) jackpool @@ -41513,11 +43433,11 @@ jackpot - Jackpot (Ver 16.16L) + Jackpot Bowling (Ver 16.16L) jackpota - Jackpot (Ver 1.16L) + Jackpot Bowling (Ver 1.16L) jackrab2 @@ -41539,6 +43459,10 @@ jackrabts Jack Rabbit (special) + + jackuse + Jack Use (Jackpot settings for Interflip slots machines) + jailbrek Jail Break @@ -41671,6 +43595,10 @@ jchana Jackie Chan - The Kung-Fu Master (rev 3?) + + jclub2bl + Jockey Club II (USA v4.00, bootleg) + jclub2v100 Jockey Club II (v1.00, older hardware) @@ -41759,6 +43687,10 @@ jefffox You Might Be A Redneck If... - Jeff Foxworthy (0351068, US) + + jesterch + Jester Chance (dual 6809 GI Australasia PCB) + jestmagi Jester Magic (Konami Endeavour, Russia) @@ -41823,6 +43755,10 @@ jingbelli Jingle Bell (Italy, V133I) + + jingling + Jingling Jiazu Genie 2000 + jingystm Jingi Storm - The Arcade (Japan) (GDL-0037) @@ -41985,38 +43921,46 @@ jojoba - JoJo's Bizarre Adventure (Euro 990927) + JoJo's Bizarre Adventure (Euro 991015, NO CD) - jojobaj + jojobajr1 JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927) - jojobajr1 + jojobajr2 JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913) jojoban - JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927, NO CD) + JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 991015, NO CD) - jojobane + jojobaner1 JoJo's Bizarre Adventure (Euro 990927, NO CD) - jojobaner1 + jojobaner2 JoJo's Bizarre Adventure (Euro 990913, NO CD) jojobanr1 + JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927, NO CD) + + + jojobanr2 JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913, NO CD) jojobanrb - JoJo's Bizarre Adventure: Heritage for the Future / JoJo no Kimyou na Bouken: Mirai e no Isan (Rainbow Edition v1.0.1 2021) + JoJo's Bizarre Adventure (Rainbow Edition v1.0.1 2021) jojobar1 + JoJo's Bizarre Adventure (Euro 990927) + + + jojobar2 JoJo's Bizarre Adventure (Euro 990913) @@ -42149,7 +44093,7 @@ jolycdcy - Zabavni Karti (Bulgarian, encrypted) + Zabavni Karti (Bulgarian, cyrillic, encrypted) jolycdev @@ -42199,6 +44143,10 @@ jolycmzs Jolly Card Professional 2.0 (MZS Tech) + + jolygame + Jolly Game (V1, Otti Karl logo) + jolyjokr Jolly Joker (98bet, set 1) @@ -42231,6 +44179,14 @@ jolyjokrp Jolly Joker (original program, interleaved GFX, no logo) + + jolyjokrs + Jolly Joker (original program, interleaved GFX, Otti Karl logo, set 1) + + + jolyjokrt + Jolly Joker (original program, interleaved GFX, Otti Karl logo, set 2) + jolypark Jolly Park @@ -42259,6 +44215,10 @@ jongtei Mahjong Jong-Tei [BET] (Japan, NM532-01) + + jongteia + Mahjong Jong-Tei [BET] (Japan, Techno-Top license) + josvolly Joshi Volleyball @@ -42313,11 +44273,11 @@ jpark3 - Jurassic Park 3 (ver EBC) + Jurassic Park III (ver EBC) jpark3u - Jurassic Park 3 (ver UBC) + Jurassic Park III (ver UBC) jparkj @@ -42347,13 +44307,17 @@ jpinball Pin Ball + + jpjcoin + Jackpot Joker Poker (Version 88V 01) + jplstw20 - The Lost World: Jurassic Park (2.00) + The Lost World: Jurassic Park (pinball, CPU 2.00, display A2.01) jplstw22 - The Lost World: Jurassic Park (2.02) + The Lost World: Jurassic Park (pinball, CPU 2.02, display A2.01) jpopnics @@ -42381,7 +44345,7 @@ jrpacmbl - Jr. Pac-Man (Pengo hardware) + Jr. Pac-Man (Pengo hardware, bootleg) jrpacmnf @@ -42431,6 +44395,10 @@ jujuba JuJu Densetsu (Japan, bootleg) + + jumanji + Jumanji (V502) + jumpbean Jumping Beans (0100161V, NSW/ACT) @@ -42513,7 +44481,7 @@ jungjuic - Jungle Juice (0200240V, New Zealand) + Jungle Juice (0200240V, ASP) jungleby @@ -42539,6 +44507,10 @@ junglekj2 Jungle King (Japan, earlier) + + junglekj2a + Jungle King (Japan, earlier, alt) + jungler Jungler @@ -42593,7 +44565,7 @@ jupk_501g - Jurassic Park (USA 5.01 Germany, display G5.01) + Jurassic Park (USA 5.01, display G5.01) jupk_513 @@ -42647,6 +44619,10 @@ k7_olym30 Olympic Darts K7 (v3.00) + + kabukijq + Far East of Eden - Kabuki Klash / Tengai Makyou - Shin Den (Enhanced, Hack) + kabukikl Far East of Eden - Kabuki Klash / Tengai Makyou - Shin Den @@ -42719,6 +44695,10 @@ kaiunqz Kaiun Quiz (Japan, KW1/VER.A) + + kajotcrd + Kajot Card (Version 1.01, Wien Euro) + kakumei Mahjong Kakumei (Japan) @@ -42729,11 +44709,11 @@ kamakazi3 - Kamakazi III ('Super Galaxians' hack) + Kamakazi III (hack of 'Super Galaxians') kamenrid - Masked Riders Club Battle Race + Masked Riders Club Battle Race / Kamen Rider Club Battle Racer kamikaze @@ -42855,12 +44835,20 @@ karnovr Karnov's Revenge / Fighter's History Dynamite + + karnovre + Karnov's Revenge / Fighter's History Dynamite (Revolution v0.1, Hack) + karous Karous (Japan) (GDL-0040) kartduel + Kart Duel (World, KTD2/VER.A) + + + kartduelj Kart Duel (Japan, KTD1/VER.A) @@ -42895,6 +44883,10 @@ kbashk Knuckle Bash (Korean PCB) + + kbashp + Knuckle Bash (location test) + kbh Keyboardheaven (Korea) @@ -42915,6 +44907,10 @@ kchamp Karate Champ (US) + + kchamp2p + Karate Champ (US, 2 players) + kchamptec Karate Champ (Tecfri bootleg) @@ -43085,11 +45081,11 @@ kengo - Ken-Go (set 1) + Ken-Go (World) - kengoa - Ken-Go (set 2) + kengoj + Ken-Go (Japan) kenseim @@ -43105,7 +45101,7 @@ keroro - Keroro Gunso Chikyu Shinryaku Shirei Dearimasu! (KRG1 Ver.A) + Keroro Gunsou: Pekopon Shinryaku Shirei...De Arimasu! (KRG1 Ver.A) ket @@ -43161,23 +45157,35 @@ kf10thep - The King of Fighters 10th Anniversary Extra Plus (The King of Fighters 2002 bootleg) + The King of Fighters 10th Anniversary Extra Plus (bootleg of The King of Fighters 2002) - kf2k1pa - The King of Fighters 2001 Plus (set 2, bootleg / hack) + kf10thuo + The King of Fighters 10th Anniversary (Optimized 2020, Hack) kf2k1pkz - The King of Fighters 2001 (PS2 Krizalid Edition) + The King of Fighters 2001 (PS2 Krizalid, Hack) + + + kf2k1pla + The King of Fighters 2001 Plus (set 2, bootleg / hack) kf2k1pls The King of Fighters 2001 Plus (set 1, bootleg / hack) + + kf2k1ult + The King of Fighters 2001 (Ultimate, Hack) + kf2k23rd - The King of Fighters 2002 - 3rd Strike of Orochi (Hack by EGCG/EGHT) + The King of Fighters 2002 (3rd Strike of Orochi, Hack) + + + kf2k2mix + The King of Fighters 2002 (Climax, Hack) kf2k2mp @@ -43187,6 +45195,14 @@ kf2k2mp2 The King of Fighters 2002 Magic Plus II (bootleg) + + kf2k2mp3 + The King of Fighters 2002 Magic Plus III (Hack) + + + kf2k2p17 + The King of Fighters 2002 (Plus 2017, Hack) + kf2k2pla The King of Fighters 2002 Plus (bootleg set 2) @@ -43199,26 +45215,18 @@ kf2k2plc The King of Fighters 2002 Super (bootleg) + + kf2k2plh + The King of Fighters 2002 Plus (Hack) + kf2k2pls The King of Fighters 2002 Plus (bootleg set 1) kf2k2ps2 - The King of Fighters 2002 (PlayStation 2 ver 0.4, EGHT hack) - - - kf2k2ps2b The King of Fighters 2002 (PlayStation 2, Hack) - - kf2k2ps2re1 - The King of Fighters 2002 (PlayStation 2 v1.0 Public Beta) - - - kf2k2ru35 - The King of Fighters 2002 Remix Ultra 3.5 (Hack By FCHT) - kf2k3bl The King of Fighters 2003 (bootleg set 1) @@ -43227,21 +45235,25 @@ kf2k3bla The King of Fighters 2003 (bootleg set 2) + + kf2k3p2s + The King of Fighters 2003 (PS2 Style Portraits, Hack) + kf2k3pcb The King of Fighters 2003 (Japan, JAMMA PCB) kf2k3pl - The King of Fighters 2004 Plus / Hero (The King of Fighters 2003 bootleg) + The King of Fighters 2004 Plus / Hero (bootleg of The King of Fighters 2003) kf2k3ps2 - The King of Fighters 2003 PlayStation 2 (Hack By EGCG) + The King of Fighters 2003 (PlayStation 2, Hack) kf2k3upl - The King of Fighters 2004 Ultra Plus (The King of Fighters 2003 bootleg) + The King of Fighters 2004 Ultra Plus (bootleg of The King of Fighters 2003) kf2k4pls @@ -43249,7 +45261,7 @@ kf2k5uni - The King of Fighters 10th Anniversary 2005 Unique (The King of Fighters 2002 bootleg) + The King of Fighters 10th Anniversary 2005 Unique (bootleg of The King of Fighters 2002) kftgoal @@ -43319,6 +45331,10 @@ kickman Kickman (upright) + + kicknkick + Kick & Kick (GNA36 VER. EAA) + kicknrun Kick and Run (World) @@ -43377,7 +45393,7 @@ kikstart - Kick Start - Wheelie King + Kick Start: Wheelie King killbld @@ -43455,6 +45471,10 @@ kingnilea King of the Nile (20106321, NSW/ACT) + + kingnileb + King of the Nile (10127511, ASP) + kingofb King of Boxer (World) @@ -43523,6 +45543,10 @@ kinstb Killer Instinct (SNES bootleg) + + kinstsnes + Killer Instinct (SNES bootleg with timer) + kirameki Kirameki Star Road (Ver 2.10J 1997/08/29) @@ -43571,6 +45595,10 @@ kizuna4p Kizuna Encounter - Super Tag Battle 4 Way Battle Version / Fu'un Super Tag Battle Special Version + + kkcount + Circlun - Kuru.Kuru-Count + kkongltd King Kong @@ -43677,7 +45705,15 @@ knightb - Knight Boy + Knight Boy (bootleg of KiKi KaiKai, set 1) + + + knightba + Knight Boy (bootleg of KiKi KaiKai, set 2) + + + knightct + Knights of the Round (Count, Hack) knights @@ -43697,11 +45733,15 @@ knightsb4 - Knights of the Round (bootleg set 4 (with YM2151 + 2xMSM5205), 911127 etc) + Knights of the Round (bootleg with YM2151 + 2xMSM5205, 911127 etc, set 4) knightsb5 - Knights of the Round (bootleg set 5, 911127 Japan) + Knights of the Round (bootleg, 911127 Japan, set 5) + + + knightsc + Knights of the Round (T-Chi) knightsh @@ -43719,6 +45759,10 @@ knightsja Knights of the Round (Japan 911127, B-Board 89625B-1) + + knightsp + Knights of the Round (Plus, Hack) + knightsu Knights of the Round (USA 911127) @@ -43751,14 +45795,26 @@ kod The King of Dragons (World 910805) + + kod1v3 + The King of Dragons (1v3, Hack) + kodb The King of Dragons (bootleg) + + kodbs + The King of Dragons (Boss Battle, Hack) + kodda The King of Dragons (Phoenix bootleg, 910731 etc) + + koddw + The King of Dragons (Warriors, Hack) + kodh The King of Dragons (hack) @@ -43771,6 +45827,14 @@ kodja The King of Dragons (Japan 910805, B-Board 89625B-1) + + kodly + The King of Dragons (Tough Plus, Hack) + + + kodlys + The King of Dragons (Dragonslayer, Hack) + kodr1 The King of Dragons (World 910711) @@ -43787,37 +45851,33 @@ kodure Kodure Ookami (Japan) + + kodyh + The King of Dragons (Fireworks, Hack) + kof10th - The King of Fighters 10th Anniversary (The King of Fighters 2002 bootleg) + The King of Fighters 10th Anniversary (bootleg of The King of Fighters 2002) kof10thd The King of Fighters 10th Anniversary (The King of Fighters 2002 bootleg / Fully Decrypted) - - kof10thuo - The King of Fighters 10th Anniversary 2019 (Optimized version 2019, hack) - kof2000 The King of Fighters 2000 (NGM-2570 ~ NGH-2570) - kof2000n - The King of Fighters 2000 (not encrypted) - - - kof2000otc - The King of Fighters 2000 (OTC, hack) + kof2000bc + The King of Fighters 2000 (Imitate BC 14 System, Hack By Aillis) - kof2000ps2 - The King of Fighters 2000 (Playstation 2 ver. , EGHT hack) + kof2000n + The King of Fighters 2000 (not encrypted) - kof2000sp - The King of Fighters 2000 - Special Edition (Final Version, Hack) + kof2000t + The King of Fighters 2000 (Optimized, Hack) kof2001 @@ -43835,6 +45895,14 @@ kof2002b The King of Fighters 2002 (bootleg) + + kof2002m + The King of Fighters 2002 (Mugen, Hack) + + + kof2002t + The King of Fighters 2002 Plus (Optimised, Hack) + kof2002um The King of Fighters - Fuchou Zhi Lu/Road to Revenge / The King of Fighters 2002 Unlimited Match (China) @@ -43855,6 +45923,38 @@ kof2003h The King of Fighters 2003 (NGH-2710) + + kof2003t + The King of Fighters 2003 (Plus, Hack) + + + kof2k1bs + The King of Fighters 2001 (Boss, Hack) + + + kof2k1fd + The King of Fighters 2001 (Fully Decrypted) + + + kof2k1rp + The King of Fighters 2001 (Remix Pro v1.02 Final, Hack) + + + kof2k1ru + The King of Fighters 2001 (Remix Ultra 2.3, Hack) + + + kof2k2fd + The King of Fighters 2002 (Fully Decrypted) + + + kof2k2jq + The King of Fighters 2002 (Infinite Energy, Hack) + + + kof2k2ly + The King of Fighters 2002 (Remix, Hack) + kof2k2omg The King of Fighters 2002 (Omega v.0?) @@ -43872,17 +45972,57 @@ The King of Fighters 2002 (Omega v0.9 beta) - kof2k2plus - The King of Fighters 2002 (Plus 2017, Hack) + kof2k2ru + The King of Fighters 2002 (Remix Ultra 3.5, Hack) + + + kof2k2ts + The King of Fighters 2002 (Battle with Orochi, Hack) + + + kof2k3fd + The King of Fighters 2003 (Fully Decrypted) kof2k4se - The King of Fighters Special Edition 2004 (The King of Fighters 2002 bootleg) + The King of Fighters Special Edition 2004 (bootleg of The King of Fighters 2002) + + + kof2kfd + The King of Fighters 2000 (Fully Decrypted) + + + kof2kotc + The King of Fighters 2000 (OTC, Hack) + + + kof2kpls + The King of Fighters 2000 (Plus Blue, Hack) + + + kof2kps2 + The King of Fighters 2000 (Playstation 2, Hack) + + + kof2ksp + The King of Fighters 2000 (Special, Hack) + + + kof2kxxx + The King of Fighters 2000 SP XXX (Hack, Ver. 2016-01-04) kof94 The King of Fighters '94 (NGM-055 ~ NGH-055) + + kof94br + The King of Fighters '94 (Portuguese edition, Hack) + + + kof94bs + The King of Fighters '94 (Boss, Hack) + kof94rz The King of Fighters '94 (Hack Boss Remixed) @@ -43899,13 +46039,21 @@ kof95b The King of Fighters '95 (Enable Hidden Characters V.[?]) + + kof95bs + The King of Fighters '95 (Boss, Hack) + kof95h The King of Fighters '95 (NGH-084) + + kof95jq + The King of Fighters '95 (Infinite Energy, Hack) + kof95sp - The King of Fighters '95 (Special 2017, hack) + The King of Fighters '95 (Special 2017, Hack) kof96 @@ -43913,19 +46061,15 @@ kof96a - The King of Fighters '96 (NGM-214, alternate board) + The King of Fighters '96 (NGM-214, alt board) kof96ae - The King of Fighters '96 (Anniversary Edition, EGHT hack) - - - kof96ae20 - The King of Fighters '96 (The Anniversary Edition 2.0, Build 2.3.0320) + The King of Fighters '96 (Anniversary, Hack) kof96cn - The King of Fighters '96 (Chinese Edition ver 1.0, hack) + The King of Fighters '96 (Chinese Edition, ver 1.0, Hack) kof96ep @@ -43935,6 +46079,22 @@ kof96h The King of Fighters '96 (NGH-214) + + kof96pls + The King of Fighters '96 (Plus, Hack) + + + kof96r + The King of Fighters '96 (Revised, Hack) + + + kof96rp + The King of Fighters '96 (Remix Plus 08 SP, Hack) + + + kof96rss + The King of Fighters '96 (Remix Spring Special, Version 1.5, Hack) + kof97 The King of Fighters '97 (NGM-2320) @@ -43945,19 +46105,39 @@ kof97ae - The King of Fighters '97 - Anniversary Edition (Build 2.1.0212) + The King of Fighters '97 (Anniversary, Hack) - kof97aef - The King of Fighters '97 - Anniversary Edition (Fork Build 2.1.1811) + kof97bs + The King of Fighters '97 (Boss, Hack) + + + kof97bt + The King of Fighters '97 (Balanced & Optimized, Hack) + + + kof97cb + The King of Fighters '97 (Combo, Hack) kof97cbt - The King of Fighters '97 - Combo Training (Hack, Ver. 2018) + The King of Fighters '97 (Combo Training, Hack, Ver. 2018) kof97cn - The King of Fighters '97 (10th Anniversary Chinese Edition, EGHT hack) + The King of Fighters '97 (10th Anniversary Chinese Edition, Hack) + + + kof97eb + The King of Fighters '97 (Evolution & Balance, Hack) + + + kof97evf + The King of Fighters '97 (Evolution FC2, Hack) + + + kof97evn + The King of Fighters '97 (Evolution New, Hack) kof97h @@ -43965,19 +46145,31 @@ kof97inv - The King of Fighters '97 (Invincible Plus) + The King of Fighters '97 (Invincible Plus!, B2.1.2107, Hack) kof97k The King of Fighters '97 (Korean release) + + kof97m + The King of Fighters '97 (Dream Back, Hack) + kof97oro The King of Fighters '97 Chongchu Jianghu Plus 2003 (bootleg) kof97pla - The King of Fighters '97 Plus 2003 (bootleg / hack) + The King of Fighters '97 Chongchu Jianghu Plus 2003 (bootleg, set 2) + + + kof97plc + The King of Fighters '97 Plus (Enhanced, Hack) + + + kof97plh + The King of Fighters '97 Plus (Hack) kof97pls @@ -43985,7 +46177,7 @@ kof97pm - The King of Fighters '97 (Practice Mode) + The King of Fighters '97 (Practice Mode, Hack) kof97ps @@ -43993,19 +46185,31 @@ kof97rc - The King of Fighters '97 - Random Combo (Hack, Ver. 2010) + The King of Fighters '97 (Random Combo, Hack, Ver. 2010) + + + kof97sp + The King of Fighters '97 (Special, Hack) + + + kof97st + The King of Fighters '97 (Strengthen Innovation, Hack) kof97t - The King of Fighters '97 (Optimized Edition) + The King of Fighters '97 (Optimized, Hack) + + + kof97ts + The King of Fighters '97 (Battle with Orochi, v1.2, Hack) - kof97t2020 - The King of Fighters '97 (Optimised Edition 2020) + kof97ubp + The King of Fighters '97 (Ultimate Battle Plus, Hack) kof97xt - The King of Fighters '97 - Final Battle (hack) + The King of Fighters '97 (Final Battle, Hack) kof98 @@ -44017,27 +46221,35 @@ kof98ae - The King of Fighters '98 (Anniversary Edition, EGHT hack) + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Anniversary, Hack) - kof98ae2016 - The King of Fighters '98 (Anniversary Edition build 1.2.0827) + kof98bc2k2 + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (BC Style 2002, Hack) (Unknown Author) + + + kof98bc2nd + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (BC 2nd Impact Edition, Hack, Ver.2020-07-29) + + + kof98bsc + King of Fighters '98 - Dream Match Never Ends (Boss Chinese Edition, Hack) kof98cb - The King of Fighters '98 (Combo, hack) + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Combo, Hack) - kof98cps - The King of Fighters '98 (Combo Plus) + kof98cp + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Combo Plus, Hack) - kof98eck20 - The King of Fighters '98 Easy Combo King (YZKOF Version, Hack) + kof98eck + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Easy Combo King, Hack) - kof98eckvs - The King of Fighters '98 Easy Combo King 2014 (Versus Version, Hack) + kof98evo + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Evolution, Hack) kof98h @@ -44053,7 +46265,7 @@ kof98mix - The King of Fighters '98 Mix (2015-12-29) + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Unlimited, Hack) kof98n @@ -44061,15 +46273,19 @@ kof98pfe - The King of Fighters '98 (Plus Final Edition 2017-07-23) + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Plus Final Edition, Hack) - kof98ratio - The King of Fighters '98 (Ratio hack) + kof98plc + King of Fighters '98 - Dream Match Never Ends (Plus Chinese Edition, Hack) + + + kof98rat + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Ratio, Hack) kof98ult - The King of Fighters '98 (Ultimate Match) + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Ultimate Match, Hack) kof98um @@ -44089,7 +46305,11 @@ kof99ae - The King of Fighters '99 Anniversary Edition (hack) + The King of Fighters '99 - Millennium Battle (Anniversary, Hack) + + + kof99cb + The King of Fighters '99 - Millennium Battle (Combo, Hack) kof99e @@ -44097,12 +46317,24 @@ kof99eur - The King of Fighters '99 Evolution Ultra Remix (Hack By Yashional) + The King of Fighters '99 - Millennium Battle (Evolution Ultra Remix, Hack) + + + kof99fd + The King of Fighters '99 - Millennium Battle (Fully Decrypted) kof99h The King of Fighters '99 - Millennium Battle (NGH-2510) + + kof99jh + The King of Fighters '99 - Millennium Battle (Evolution, Hack) + + + kof99jq + The King of Fighters '99 - Millennium Battle (Infinite Energy, Hack) + kof99k The King of Fighters '99 - Millennium Battle (Korean release) @@ -44120,12 +46352,20 @@ The King of Fighters '99 - Millennium Battle (prototype) - kof99rp2f - The King of Fighters '99 Remix Pro V2.0 Final (Hack By FCHT) + kof99rp + The King of Fighters '99 - Millennium Battle (Remix Pro v2.01 Final, Hack) + + + kof99sk + The King of Fighters '99 - Millennium Battle (LC+SK, Hack) kof99sr - The King of Fighters '99 Summer Revolution (Hack By FCHT) + The King of Fighters '99 - Millennium Battle (Summer Revolution, Hack) + + + kof99t + The King of Fighters '99 - Millennium Battle (Plus, Hack) kofnw @@ -44153,7 +46393,7 @@ kog - King of Gladiator (The King of Fighters '97 bootleg) + King of Gladiator (bootleg of The King of Fighters '97) kogplus @@ -44169,7 +46409,7 @@ koikois - Koi Koi Shimasho + Koi Koi Shimasho - Super Real Hanafuda koikois2 @@ -44191,6 +46431,10 @@ kokoroj2 Soreike Kokology Vol. 2 - Kokoro no Tanteikyoku + + kokoroja + Soreike Kokology + kollon Kollon (V2.04JA 2003/11/01 12:00) @@ -44201,7 +46445,7 @@ komemokos - Komemokos ('Pac-Man (Cirsa, Spanish bootleg)' hack) + Komemokos (hack of 'Pac-Man (Cirsa, Spanish bootleg)') komocomo @@ -44253,7 +46497,7 @@ konotako - Kono Tako (10021 Ver.A) + Kono e Tako (10021 Ver.A) kontest @@ -44379,6 +46623,10 @@ kov2102 Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 102, 101, 100HK) + + kov21022 + Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 102, 102, 100HK) + kov2103 Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 103, 101, 100HK) @@ -44391,6 +46639,10 @@ kov2106 Knights of Valour 2 / Sanguo Zhan Ji 2 / Sangoku Senki 2 (ver. 106, 102, 100HK) + + kov2dzxx + Knights of Valour 2 (Dou Zhuan Xing Xuan, ver.110) + kov2nl Knights of Valour 2 New Legend / Sanguo Zhan Ji 2 Guang Sao Yu Jun (V302, Oversea) @@ -44488,9 +46740,17 @@ Knights of Valour - The Seven Spirits - kovassga + kovassg Knights of Valour: Ao Shi San Guo / Sangoku Senki: Ao shi San Guo (V202CN, China) + + kovassge + Knights of Valour: Ao Shi San Guo / Sangoku Senki: Ao shi San Guo (Encrypted, V202CN, China) + + + kovassgn + Knights of Valour: Ao Shi San Guo / Sangoku Senki: Ao shi San Guo (Newer, V202CN, China) + kovlsjb Luanshi Jie Ba (bootleg of Knights of Valour Super Heroes Plus, ver. 200CN, set 1) @@ -44507,9 +46767,13 @@ kovlsqh2 Luanshi Quanhuang 2 (bootleg of Knights of Valour Super Heroes Plus, ver. 200CN) + + kovlsqho + Knights of Valour: Luan Shi Quan Huang Te Bie Ban / Sangoku Senki: Luan Shi Quan Huang Te Bie Ban (V112CN, China) + kovlsyx - Luan Shi Ying Xiong (hack of Knights of Valour Super Heroes Plus, ver. 500) + San Guo Zhan Ji - Luan Shi Ying Xiong kovlsyxqszl @@ -44523,18 +46787,38 @@ kovlsyxqxzlp Luan Shi Ying Xiong - Qun Xiong Zhu Lu Plus (hack of Knights of Valour Super Heroes Plus, ver. 500) + + kovp12dw + Knights of Valour Plus 2012 - Warriors + + + kovp12em + Knights of Valour Plus 2012 - Nightmare + kovplus Knights of Valour Plus / Sanguo Zhan Ji Zhengzong Plus / Sangoku Senki Masamune Plus (ver. 119, set 1) - kovplus2020tx - Knights of Valour Plus - Qun Xiong Luan Wu 2020 (Hack) + kovplus20tx + Knights of Valour Plus - Qun Xiong Luan Wu 2020 kovplusa Knights of Valour Plus / Sanguo Zhan Ji Zhengzong Plus / Sangoku Senki Masamune Plus (ver. 119, set 2) + + kovplushsqj + San Guo Zhan Ji - Heng Sao Qian Jun (Hack) + + + kovplusq + Knights of Valour Plus - New Biography of Heroes (V120) + + + kovpluststd + San Guo Zhan Ji - Zhen Tun Shi Tian Di (Hack) + kovqhsgs Quanhuang Sanguo Tebie Ban (bootleg of Knights of Valour Super Heroes, V303CN, Nov 21 2008 19:03:49) @@ -44547,6 +46831,10 @@ kovqhsgsd Knights of Valour: Quan Huang San Guo Special / Sangoku Senki: Quan Huang San Guo Special (V303CN, China, decrypted version) + + kovqxzbws + San Guo Zhan Ji - Qun Xiong Zheng Ba Feng Yun Zai Qi (Hack, ver. 2022-07-31) + kovsgqyz Sanguo Qunying Chuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 1) @@ -44635,6 +46923,10 @@ kovytzyws Knights of Valour Super Heroes / Yi Tong Zhong Yuan Wu Shuang Ban (2019-0, hack) + + kovytzywscw + Yi Tong Zhong Yuan - Warriors + kozure Kozure Ookami (Japan) @@ -44681,7 +46973,7 @@ ktiger - Kyukyoku Tiger (Japan) + Kyukyoku Tiger (Japan, 2 player cooperative) ktiger2 @@ -44691,13 +46983,21 @@ ktiger2p Kyukyoku Tiger (Japan, 2 Players) + + ktigera + Kyukyoku Tiger (Japan, 2 player alternate) + kuhga Kuhga - Operation Code 'Vapor Trail' (Japan revision 3) kungfu - Kung Fu (IGS, v100) + Kung Fu Fighters (IGS, v202N) + + + kungfua + Kung Fu Fighters (IGS, v100) kungfub @@ -44711,6 +47011,10 @@ kungfub3 Kung-Fu Master (bootleg set 3) + + kungfub3s + Kung-Fu Senjyo (bootleg, Spanish) + kungfud Kung-Fu Master (Data East) @@ -44719,10 +47023,6 @@ kungfum Kung-Fu Master (World) - - kungfum2 - Beyond Kung-Fu (location test) - kungfumd Kung-Fu Master (US) @@ -44873,11 +47173,11 @@ ladybugb - Lady Bug (bootleg set 1) + Lady Bug (bootleg) ladybugb2 - Coccinelle (bootleg of Lady Bug, set 2) + Coccinelle (bootleg of Lady Bug) ladybugg @@ -45043,6 +47343,10 @@ landmakr Land Maker (Ver 2.02O 1998/06/02) + + landmakrhe + Land Maker (English Translation Hack) + landmakrj Land Maker (Ver 2.01J 1998/06/01) @@ -45057,7 +47361,7 @@ lans2004 - Lansquenet 2004 (Shock Troopers - 2nd Squad bootleg) + Lansquenet 2004 (bootleg of Shock Troopers - 2nd Squad) lapbylap @@ -45111,6 +47415,26 @@ lastbank Last Bank (v1.16) + + lastbd2b + The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (Enable Hidden Characters V4) + + + lastbd2e + The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (Enhanced, Hack) + + + lastbd2i + The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (Infinite Energy, Hack) + + + lastbd2p + The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (Plus, Hack) + + + lastbd2t + The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (Team, Hack) + lastbh The Last Bounty Hunter (v1.01) @@ -45125,31 +47449,31 @@ lastblada - The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGM-2340, alternate board) + The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGM-2340, alt board) lastbladh The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGH-2340) - - lastbladsp - The Last Blade / Bakumatsu Roman - Gekka no Kenshi (Special 2017, hack) - lastbld2 The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (NGM-2430 ~ NGH-2430) - lastbld2eh - The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (Enhanced Hack) + lastblda + Last Blade / Bakumatsu Roman - Gekka no Kenshi, The (set 2) - lastbld2te - The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (Team Edition Hack) + lastbldi + The Last Blade / Bakumatsu Roman - Gekka no Kenshi (Infinite Energy, Hack) - lastblda - Last Blade / Bakumatsu Roman - Gekka no Kenshi, The (set 2) + lastbldp + The Last Blade / Bakumatsu Roman - Gekka no Kenshi (Plus, Hack) + + + lastblsp + The Last Blade / Bakumatsu Roman - Gekka no Kenshi (Special 2017, Hack) lastbrnx @@ -45157,7 +47481,7 @@ lastbrnxj - Last Bronx (Japan, Revision A) + Last Bronx: Tokyo Bangaichi (Japan, Revision A) lastbrnxu @@ -45295,10 +47619,6 @@ lazybug Lazy Bug - - lb2b - The Last Blade 2 / Bakumatsu Roman - Dai Ni Maku Gekka no Kenshi (Enable Hidden Characters V4) - lbeach Long Beach @@ -45313,11 +47633,11 @@ lbvbiosu - VBios updater + VBIOS updater lc_11 - League Champ (1.1) + League Champ (1.1) (Shuffle) lca @@ -45335,6 +47655,10 @@ lckydrawa Lucky Draw (pinball, set 2) + + ldmj1mbh + LD Mahjong #1 Marine Blue no Hitomi (Japan) + ldquiz4 LD Quiz dai 4-dan - Kotaetamon Gachi! (Japan) @@ -45401,7 +47725,11 @@ leaguemn - Yakyuu Kakutou League-Man (Japan) + Yakyuu Kakutou League-Man (Japan, set 1) + + + leaguemna + Yakyuu Kakutou League-Man (Japan, set 2) lectrono @@ -45515,13 +47843,17 @@ lemrol Let 'em Roll (0151115, US) + + lependu + Le Pendu (Bilingue, Version 04) + leprechn - Leprechaun + Leprechaun (set 1) - leprechp - Leprechaun (Pacific) + leprechna + Leprechaun (set 2) leprgld @@ -45531,6 +47863,14 @@ leprglds Leprechaun's Gold (Spanish) + + lespendu + Le Super Pendu (V1, words set #1) + + + lespenduj + Le Super Pendu (V1, words set #2) + lethalen Lethal Enforcers (ver UAE, 11/19/92 15:04) @@ -45575,6 +47915,10 @@ lethalth Lethal Thunder (World) + + letsdnce + Let's Dance + letsgoju Let's Go Jungle (Export) @@ -45587,6 +47931,10 @@ lgfish Let's Go Fish'n (10220111, NSW/ACT) + + lgfisha + Let's Go Fish'n (10223911, ASP) + lghost Laser Ghost (World) (FD1094 317-0166) @@ -45725,7 +48073,7 @@ lhb2 - Long Hu Bang II (Hong Kong, V185H) + Lung Fu Bong II (Hong Kong, V185H) lhbv33c @@ -45735,13 +48083,17 @@ lhcdb Last Hope CD Beta (Neo CD conversion) + + lhtb + Long Hu Tebie Ban (V101CN) + lhzb2 - Mahjong Long Hu Zhengba 2 (set 1) + Long Hu Zhengba 2 (China, set 1) lhzb2a - Mahjong Long Hu Zhengba 2 (VS221M) + Long Hu Zhengba 2 (China, VS221M) lhzb3 @@ -45773,11 +48125,11 @@ liberatr - Liberator (set 1) + Liberator (version 2) - liberatr2 - Liberator (set 2) + liberatrp + Liberator (prototype) liblrabl @@ -45867,14 +48219,22 @@ lkageb4 The Legend of Kage (bootleg set 4) + + lkagem + The Legend of Kage (MSM5232 sound) + lkageo The Legend of Kage (older) - lkageoo + lkageo2 The Legend of Kage (oldest) + + ll3 + Lucky Line III + llander Lunar Lander (rev 2) @@ -45943,6 +48303,10 @@ locolootnz Loco Loot (0600725V, New Zealand) + + locolootq + Loco Loot (0300670V, Queensland) + locolootu Loco Loot (AHG1513, US) @@ -45957,7 +48321,7 @@ loderdfa - Lode Runner - The Dig Fight (ver. A) (Japan) + Lode Runner - The Dig Fight (ver. A) loderndf @@ -46017,7 +48381,7 @@ lohtb - Legend of Hero Tonma (unprotected bootleg) + Legend of Hero Tonma (Playmark unprotected bootleg) lohtb2 @@ -46067,6 +48431,10 @@ looptris Looptris (v.2021-12-26) + + looptrsp + Looptris Plus (v.2022-12-24) + lordgun Lord of Gun (USA) @@ -46093,19 +48461,19 @@ lostspc - Lost in Space (1.01) + Lost in Space (CPU 1.01, display A1.02) lostspc_d1 - Lost in Space (1.01, Display 1.01) + Lost in Space (CPU 1.01, display A1.01) lostspcf - Lost in Space (1.01 France) + Lost in Space (CPU 1.01, display F1.02, France) lostspcg - Lost in Space (1.01 Germany) + Lost in Space (CPU 1.01, display G1.02, Germany) losttmbh @@ -46119,6 +48487,10 @@ losttombh Lost Tomb (hard) + + losttrea + Lost Treasure (V1.03) + lostwrld Lost Worlds (Japan) @@ -46133,11 +48505,11 @@ lostwsga - The Lost World (Japan, Revision A) + The Lost World: Jurassic Park (Japan, Revision A) lostwsgp - The Lost World (location test) + The Lost World: Jurassic Park (location test) lotlot @@ -46145,187 +48517,187 @@ lotr - The Lord Of The Rings (10.00) + The Lord Of The Rings (CPU 10.00, display A10.00) lotr3 - The Lord Of The Rings (3.00) + The Lord Of The Rings (CPU 3.00, display A3.00) lotr401 - The Lord Of The Rings (4.01) + The Lord Of The Rings (CPU 4.01, display A4.03) lotr410 - The Lord Of The Rings (4.10) + The Lord Of The Rings (CPU 4.10, display A4.04) lotr5 - The Lord Of The Rings (5.00) + The Lord Of The Rings (CPU 5.00, display A5.00) lotr501 - The Lord Of The Rings (5.01) + The Lord Of The Rings (CPU 5.01, display A5.01) lotr6 - The Lord Of The Rings (6.00) + The Lord Of The Rings (CPU 6.00, display A6.00) lotr7 - The Lord Of The Rings (7.00) + The Lord Of The Rings (CPU 7.00, display A7.00) lotr8 - The Lord Of The Rings (8.00) + The Lord Of The Rings (CPU 8.00, display A8.00) lotr9 - The Lord Of The Rings (9.00) + The Lord Of The Rings (CPU 9.00, display A9.00) lotr_fr - The Lord Of The Rings (10.00 France) + The Lord Of The Rings (CPU 10.00, display F10.00, France) lotr_fr401 - The Lord Of The Rings (4.01 France) + The Lord Of The Rings (CPU 4.01, display F4.03, France) lotr_fr410 - The Lord Of The Rings (4.10 France) + The Lord Of The Rings (CPU 4.10, display F4.04, France) lotr_fr5 - The Lord Of The Rings (5.0 France) + The Lord Of The Rings (CPU 5.00, display F5.00, France) lotr_fr501 - The Lord Of The Rings (5.01 France) + The Lord Of The Rings (CPU 5.01, display F5.01, France) lotr_fr6 - The Lord Of The Rings (6.0 France) + The Lord Of The Rings (CPU 6.00, display F6.00, France) lotr_fr7 - The Lord Of The Rings (7.0 France) + The Lord Of The Rings (CPU 7.00, display F7.00, France) lotr_fr8 - The Lord Of The Rings (8.0 France) + The Lord Of The Rings (CPU 8.00, display F8.00, France) lotr_fr9 - The Lord Of The Rings (9.0 France) + The Lord Of The Rings (CPU 9.00, display F9.00, France) lotr_gr - The Lord Of The Rings (10.00 Germany) + The Lord Of The Rings (CPU 10.00, display G10.00, Germany) lotr_gr401 - The Lord Of The Rings (4.01 Germany) + The Lord Of The Rings (CPU 4.01, display G4.03, Germany) lotr_gr410 - The Lord Of The Rings (4.10 Germany) + The Lord Of The Rings (CPU 4.10, display G4.04, Germany) lotr_gr5 - The Lord Of The Rings (5.0 Germany) + The Lord Of The Rings (CPU 5.00, display G5.00, Germany) lotr_gr501 - The Lord Of The Rings (5.01 Germany) + The Lord Of The Rings (CPU 5.01, display G5.01, Germany) lotr_gr6 - The Lord Of The Rings (6.0 Germany) + The Lord Of The Rings (CPU 6.00, display G6.00, Germany) lotr_gr7 - The Lord Of The Rings (7.0 Germany) + The Lord Of The Rings (CPU 7.00, display G7.00, Germany) lotr_gr8 - The Lord Of The Rings (8.0 Germany) + The Lord Of The Rings (CPU 8.00, display G8.00, Germany) lotr_gr9 - The Lord Of The Rings (9.0 Germany) + The Lord Of The Rings (CPU 9.00, display G9.00, Germany) lotr_it - The Lord Of The Rings (10.00 Italy) + The Lord Of The Rings (CPU 10.00, display I10.00, Italy) lotr_it401 - The Lord Of The Rings (4.01 Italy) + The Lord Of The Rings (CPU 4.01, display I4.03, Italy) lotr_it410 - The Lord Of The Rings (4.10 Italy) + The Lord Of The Rings (CPU 4.10, display I4.04, Italy) lotr_it5 - The Lord Of The Rings (5.0 Italy) + The Lord Of The Rings (CPU 5.00, display I5.00, Italy) lotr_it501 - The Lord Of The Rings (5.01 Italy) + The Lord Of The Rings (CPU 5.01, display I5.01, Italy) lotr_it6 - The Lord Of The Rings (6.0 Italy) + The Lord Of The Rings (CPU 6.00, display I6.00, Italy) lotr_it7 - The Lord Of The Rings (7.0 Italy) + The Lord Of The Rings (CPU 7.00, display I7.00, Italy) lotr_it8 - The Lord Of The Rings (8.0 Italy) + The Lord Of The Rings (CPU 8.00, display I8.00, Italy) lotr_it9 - The Lord Of The Rings (9.0 Italy) + The Lord Of The Rings (CPU 9.00, display I9.00, Italy) lotr_le - The Lord Of The Rings (10.02 Limited Edition) + The Lord Of The Rings (CPU 10.02, display A10.00, Limited Edition) lotr_sp - The Lord Of The Rings (10.00 Spain) + The Lord Of The Rings (CPU 10.00, display L10.00, Spain) lotr_sp401 - The Lord Of The Rings (4.01 Spain) + The Lord Of The Rings (CPU 4.01, display L4.03, Spain) lotr_sp5 - The Lord Of The Rings (5.0 Spain) + The Lord Of The Rings (CPU 5.00, display L5.00, Spain) lotr_sp501 - The Lord Of The Rings (5.01 Spain) + The Lord Of The Rings (CPU 5.01, display L5.01, Spain) lotr_sp6 - The Lord Of The Rings (6.0 Spain) + The Lord Of The Rings (CPU 6.00, display L6.00, Spain) lotr_sp7 - The Lord Of The Rings (7.0 Spain) + The Lord Of The Rings (CPU 7.00, display L7.00, Spain) lotr_sp8 - The Lord Of The Rings (8.0 Spain) + The Lord Of The Rings (CPU 8.00, display L8.00, Spain) lotr_sp9 - The Lord Of The Rings (9.0 Spain) + The Lord Of The Rings (CPU 9.00, display L9.00, Spain) lottof2 @@ -46441,7 +48813,7 @@ ltswords - Lightning Swords + Lightning Swords (World) luckboom @@ -46497,7 +48869,11 @@ lucky7i - Lucky 7 (Impera) + Lucky 7 (Impera, V04/91a, set 1) + + + lucky7x + Lucky 7 (Impera, V04/91a, set 2) lucky8 @@ -46591,6 +48967,10 @@ luckyclo Lucky Clover (0300109V, NSW/ACT) + + luckycoin + Lucky Coin (Jun 24 2002) + luckygrl Lucky Girl (Wing) @@ -46761,7 +49141,7 @@ lwingsj - Ares no Tsubasa (Japan) + Ares no Tsubasa (Japan, rev. B) lwingsja @@ -51143,17 +53523,73 @@ m1wotwb War Of The Worlds (Maygay) (M1A/B) (set 3) + + m2comet + Comet Catcher (Leisure Games) (MPU2) (5p Stake, £1 Jackpot) + + + m2frpoly + Fruitopoly (VFS) (MPU2) (Hi Lights conversion, 10p Stake, £3 Jackpot) + m2hilite - Hi-Lights (Barcrest) (MPU2) + Hi Lights (Barcrest) (MPU2) (10p Stake, £2 Jackpot) + + + m2jmt9 + JMT9 Test Program (Barcrest) (MPU1/2) + + + m2luckyl + Lucky Line (Leisure Games) (MPU2) (5p Stake, £2 Jackpot) + + + m2luckys + Lucky Strike (Associated Leisure) (MPU2) (5p Stake, £2 Jackpot) + + + m2rockon + Rock On (Barcrest) (MPU2) (10p Stake, £2 Jackpot) + + + m2splite + Spot Light (Barcrest) (MPU2) (revision 4, 10p Stake, £2 Jackpot) + + + m2splitea + Spot Light (Barcrest) (MPU2) (revision 7, 10p Stake, £2 Jackpot) + + + m2spliteb + Spot Light (Barcrest) (MPU2) (revision 9, 10p Stake, £2 Jackpot) + + + m2sstar + Super Star (Dutch) (Barcrest) (MPU2) + + + m2starl + Star Light (Dutch) (Barcrest) (MPU2) (revision 07) m2svlite - Silver Lights (Barcrest) (MPU2) + Silver Lights (MPU2) (5p Stake, £1 Jackpot) + + + m2triple + Triple Chance (VFS) (MPU2) (Spot Light conversion, 2p Stake, £1.50 Jackpot) + + + m3001 + M3001 + + + m3004 + M3004 m3acech - Ace Chase (Bwb) (MPU3) + Ace Chase (BWB) (MPU3) m3autort @@ -51161,7 +53597,7 @@ m3bankr - Banker (Bwb) (MPU3) + Banker (BWB) (MPU3) m3big20j @@ -51193,7 +53629,7 @@ m3chase - Chase It (Bwb) (MPU3) + Chase It (BWB) (MPU3) m3circle @@ -51201,7 +53637,7 @@ m3circlea - Special Circle Club (Barcrest) (MPU3, set 2) + Special Circle Club (Barcrest) (MPU3, set 2, bad) m3circleb @@ -51229,7 +53665,7 @@ m3fortund - Fortune Numbers (Barcrest) [Dutch] (MPU3) + Fortune Numbers (Barcrest) (Dutch) (MPU3) m3gaward @@ -51241,7 +53677,7 @@ m3gmine - Gold Mine (Bwb) (MPU3) + Gold Mine (BWB) (MPU3) m3hprvpr @@ -51283,10 +53719,6 @@ m3nnice Naughty But Nice (Barcrest) (MPU3) - - m3nudge - Nudges Unlimited (Barcrest) (MPU3) - m3oddson Odds On (Barcrest) (MPU3) @@ -51305,7 +53737,7 @@ m3ratrce - Rat Race (Bwb) (MPU3) + Rat Race (BWB) (MPU3) m3razdaz @@ -51317,7 +53749,7 @@ m3razdazd - Razzle Dazzle (Barcrest) [Dutch] (MPU3) + Razzle Dazzle (Barcrest) (Dutch) (MPU3) m3replay @@ -51329,7 +53761,7 @@ m3rolla - Rollamatic 5-Line Special (Barcrest) (MPU3) + Rollamatic 5-Line Special (MPU3) m3rollem @@ -51345,7 +53777,7 @@ m3sdeal - Super Deal (Barcrest) (MPU3) + Super Deal (Barcrest) (Dutch) (MPU3) m3sexcu @@ -51377,7 +53809,7 @@ m3supasw - Supaswop (Bwb) (MPU3) + Supaswop (BWB) (MPU3) m3suplin @@ -51405,11 +53837,11 @@ m3supwin - Super Win (Bwb) (MPU3, set 1) + Super Win (BWB) (MPU3, set 1) (W.AG2) m3supwina - Super Win (Bwb) (MPU3, set 2) + Super Win (BWB) (MPU3, set 2) (S.W.2 1.0) m3sweep @@ -51449,23 +53881,19 @@ m3winagn - Win-A-Gain (Bwb) (MPU3, set 1) - - - m3winagna - Win-A-Gain (Bwb) (MPU3, set 2) + Win-A-Gain (BWB) (MPU3, set 1) (W.A.G. 2.2) m3winagnb - Win-A-Gain (Bwb) (MPU3, set 3) + Win-A-Gain (BWB) (MPU3, set 2) (W.A.G. 5.1) m3winstr - Winstrike (Bwb) (MPU3) + Winstrike (BWB) (MPU3, set 1) m3winstra - Winstrike (Barcrest) (MPU3) + Winstrike (BWB) (MPU3, set 2) m3xchngg @@ -51483,13 +53911,21 @@ m4 M-4 + + m4001 + M4001 (rev. A) + + + m4002 + M4002 + m421 - Twenty One (Barcrest) (MPU4) + Twenty One (Barcrest) (Dutch) (MPU4) (DTO 2.0) m421club - 21 Club (Barcrest) [DTW, Dutch] (MPU4) + 21 Club (Barcrest) (Dutch) (MPU4) (DTW 2.7) m42punlm @@ -52185,107 +54621,107 @@ m4abra - Abracadabra (Bwb) (MPU4) (set 1) + Abracadabra (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 1) m4abra__a - Abracadabra (Bwb) (MPU4) (set 2) + Abracadabra (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 2) m4abra__b - Abracadabra (Bwb) (MPU4) (set 3) + Abracadabra (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 3) m4abra__c - Abracadabra (Bwb) (MPU4) (set 4) + Abracadabra (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 4) m4acechs - Ace Chase (Barcrest) (MPU4) (set 1) + Ace Chase (BWB) (MPU4) (AE5 2.0, set 1) m4acechs__a - Ace Chase (Barcrest) (MPU4) (set 2) + Ace Chase (BWB) (MPU4) (AE5 3.0, set 1) m4acechs__b - Ace Chase (Barcrest) (MPU4) (set 3) + Ace Chase (BWB) (MPU4) (AE5 2.0, set 2) m4acechs__c - Ace Chase (Barcrest) (MPU4) (set 4) + Ace Chase (BWB) (MPU4) (AE5 2.0, set 3) m4acechs__d - Ace Chase (Barcrest) (MPU4) (set 5) + Ace Chase (BWB) (MPU4) (AE5 2.0, set 4) m4acechs__e - Ace Chase (Barcrest) (MPU4) (set 6) + Ace Chase (BWB) (MPU4) (AE10 2.0, set 1) m4acechs__f - Ace Chase (Barcrest) (MPU4) (set 7) + Ace Chase (BWB) (MPU4) (AE10 3.0, set 1) m4acechs__g - Ace Chase (Barcrest) (MPU4) (set 8) + Ace Chase (BWB) (MPU4) (AE 1.0) m4acechs__h - Ace Chase (Barcrest) (MPU4) (set 9) + Ace Chase (BWB) (MPU4) (AE10 2.0, set 2) m4acechs__i - Ace Chase (Barcrest) (MPU4) (set 10) + Ace Chase (BWB) (MPU4) (AE10 2.0, set 3) m4acechs__j - Ace Chase (Barcrest) (MPU4) (set 11) + Ace Chase (BWB) (MPU4) (AE10 2.0, set 4) m4acechs__k - Ace Chase (Barcrest) (MPU4) (set 12) + Ace Chase (BWB) (MPU4) (AE20 3.0, set 1) m4acechs__l - Ace Chase (Barcrest) (MPU4) (set 13) + Ace Chase (BWB) (MPU4) (AE20 3.0, set 2) m4acechs__m - Ace Chase (Barcrest) (MPU4) (set 14) + Ace Chase (BWB) (MPU4) (AE20 3.0, set 3) m4acechs__n - Ace Chase (Barcrest) (MPU4) (set 15) + Ace Chase (BWB) (MPU4) (AE20 3.0, set 4) m4acechs__o - Ace Chase (Barcrest) (MPU4) (set 16) + Ace Chase (BWB) (MPU4) (AE20 3.0, set 5) m4acechs__p - Ace Chase (Barcrest) (MPU4) (set 17) + Ace Chase (BWB) (MPU4) (AE20 3.0, set 6) m4acechs__q - Ace Chase (Barcrest) (MPU4) (set 18) + Ace Chase (BWB) (MPU4) (AE5 2.0, set 5) m4acechs__r - Ace Chase (Barcrest) (MPU4) (set 19) + Ace Chase (BWB) (MPU4) (AE5 3.0, set 2) m4acechs__s - Ace Chase (Barcrest) (MPU4) (set 20) + Ace Chase (BWB) (MPU4) (AE10 2.0, set 5) m4acechs__t - Ace Chase (Barcrest) (MPU4) (set 21) + Ace Chase (BWB) (MPU4) (AE10 3.0, set 2) m4acechs__u - Ace Chase (Barcrest) (MPU4) (set 22) + Ace Chase (BWB) (MPU4) (AE20 3.0, set 7) m4actbnk @@ -52337,11 +54773,11 @@ m4actclb - Action Club (Barcrest) (MPU4) (1.9) + Action Club (Barcrest) (MPU4) (ABV 1.9) m4actclba - Action Club (Barcrest) (MPU4) (1.1) + Action Club (Barcrest) (MPU4) (A2C 1.1) m4actnot @@ -52357,239 +54793,227 @@ m4addr - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, set 1) + Classic Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, set 1) m4addr10 - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0, set 1) m4addr10_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0, set 2) m4addr10c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 C, set 1) m4addr10c_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 C, set 2) m4addr10d - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 D, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 D, set 1) m4addr10d_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 D, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 D, set 2) m4addr10yd - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 YD, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 YD, set 1) m4addr10yd_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 YD, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 YD, set 2) m4addr3 - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0, set 1) m4addr3_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0, set 2) m4addr3_b - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 3) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0, set 3) m4addr3_c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 4) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0, set 4) m4addr3_d - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0, set 5) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0, set 5) m4addr3d - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 D, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0 D, set 1) m4addr3d_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 D, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0 D, set 2) m4addr3d_b - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 D, set 3) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0 D, set 3) m4addr3d_c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 D, set 4) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0 D, set 4) m4addr3yd - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 YD, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0 YD, set 1) m4addr3yd_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 YD, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0 YD, set 2) m4addr3yd_b - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 YD, set 3) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0 YD, set 3) m4addr3yd_c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 3.0 YD, set 4) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 3.0 YD, set 4) m4addr4 - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 4.0, set 1) m4addr4_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 4.0, set 2) m4addr4c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0 C, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 4.0 C, set 1) m4addr4c_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0 C, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 4.0 C, set 2) m4addr4c_b - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0 C, set 3) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 4.0 C, set 3) m4addr4d - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0 D, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 4.0 D, set 1) m4addr4yd - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 4.0 YD, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 4.0 YD, set 1) m4addr5 - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 5.0, set 1) m4addr5_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 5.0, set 2) m4addr5c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 C, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 5.0 C, set 1) m4addr5c_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 C, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 5.0 C, set 2) m4addr5d - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 D, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 5.0 D, set 1) m4addr5d_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 D, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 5.0 D, set 2) m4addr5yd - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 YD, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 5.0 YD, set 1) m4addr5yd_a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 5.0 YD, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 5.0 YD, set 2) m4addr6lc - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 C) + Classic Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 C) m4addr6ld - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 D) + Classic Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 D) m4addr6lk - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 K) + Classic Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 K) m4addr6ly - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 Y) + Classic Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 Y) m4addr6lybd - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 YBD) + Classic Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 YBD) m4addr6lyd - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 YD) + Classic Adders & Ladders (Barcrest) (MPU4) (A6L 0.1 YD) m4addr_h1 - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 1) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 C, hack, set 1) m4addr_h2 - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 2) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 C, hack, set 2) m4addrc - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 3) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 C, hack, set 3) m4addrc__a - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 6) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 C, hack, set 6) m4addrc__b - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, hack, set 1) + Classic Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, hack, set 1) m4addrc__c - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 4) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 C, hack, set 4) m4addrc__d - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, set 2) - - - m4addrc__e - Adders & Ladders (Bwb / Barcrest) (MPU4) (NNU 5.0, hack, set 1) - - - m4addrc__f - Adders & Ladders (Bwb / Barcrest) (MPU4) (NNU 5.0, hack, set 2) + Classic Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, set 2) m4addrc__h - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, hack) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0, hack) m4addrc__i - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 7) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 C, hack, set 7) m4addrc__j - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 8) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 C, hack, set 8) m4addrc__k - Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, hack, set 2) + Classic Adders & Ladders (Barcrest) (MPU4) (A6L 0.1, hack, set 2) m4addrc__l - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0, 1993) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0, 1993) m4addrc__m - Adders & Ladders (Bwb / Barcrest) (MPU4) (ADD 1.0 C, hack, set 5) - - - m4addrc__n - Adders & Ladders (Bwb / Barcrest) (MPU4) (NNU 5.0, hack, set 3) + Classic Adders & Ladders (BWB / Barcrest) (MPU4) (ADD 1.0 C, hack, set 5) m4addrcc @@ -52613,7 +55037,7 @@ m4addrd - Adders & Ladders (Barcrest) (DAL, Dutch) (MPU4) + Adders & Ladders (Barcrest) (Dutch) (MPU4) (DAL 1.2) m4aladn @@ -52665,7 +55089,7 @@ m4alpha - Alphabet (Barcrest) [A4B 1.0] (MPU4) + Alphabet (Barcrest) (MPU4) (A4B 1.0) m4amalad @@ -52729,11 +55153,11 @@ m4ambass - Ambassador (Barcrest) (DAM, Dutch) (MPU4) + Ambassador (Barcrest) (Dutch) (MPU4) (DAM 3.7) m4amhiwy - American Highway (Barcrest) (MPU4) (DAH) + American Highway (Barcrest) (Dutch) (MPU4) (DAH 2.0) m4andybt @@ -52753,43 +55177,43 @@ m4andycp - Andy Capp (Bwb / Barcrest) (MPU4) (AC10) + Andy Capp (BWB / Barcrest) (MPU4) (AC10) m4andycp10_a - Andy Capp (Bwb / Barcrest) (MPU4) (AC10, hack?) + Andy Capp (BWB / Barcrest) (MPU4) (AC10, hack?) m4andycp10c - Andy Capp (Bwb / Barcrest) (MPU4) (AC10C) + Andy Capp (BWB / Barcrest) (MPU4) (AC10C) m4andycp10c_a - Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 1) + Andy Capp (BWB / Barcrest) (MPU4) (AC10C, hack?, set 1) m4andycp10c_b - Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 2) + Andy Capp (BWB / Barcrest) (MPU4) (AC10C, hack?, set 2) m4andycp10c_c - Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 3) + Andy Capp (BWB / Barcrest) (MPU4) (AC10C, hack?, set 3) m4andycp10c_d - Andy Capp (Bwb / Barcrest) (MPU4) (AC10C, hack?, set 4) + Andy Capp (BWB / Barcrest) (MPU4) (AC10C, hack?, set 4) m4andycp10d - Andy Capp (Bwb / Barcrest) (MPU4) (AC10D) + Andy Capp (BWB / Barcrest) (MPU4) (AC10D) m4andycp10k - Andy Capp (Bwb / Barcrest) (MPU4) (AC10K) + Andy Capp (BWB / Barcrest) (MPU4) (AC10K) m4andycp10yd - Andy Capp (Bwb / Barcrest) (MPU4) (AC10YD) + Andy Capp (BWB / Barcrest) (MPU4) (AC10YD) m4andycp20 @@ -52805,7 +55229,7 @@ m4andycp8 - Andy Capp (Barcrest) (MPU4) (AM8) + Andy Capp (Barcrest) (MPU4) (AN8) m4andycp8ad @@ -52841,51 +55265,51 @@ m4andycpac - Andy Capp (Bwb / Barcrest) (MPU4) (AC5) + Andy Capp (BWB / Barcrest) (MPU4) (AC5) m4andycpac_a - Andy Capp (Bwb / Barcrest) (MPU4) (AC5, hack?) + Andy Capp (BWB / Barcrest) (MPU4) (AC5, hack?) m4andycpacc - Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C) + Andy Capp (BWB / Barcrest) (MPU4) (AC5 C) m4andycpacc_a - Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 1) + Andy Capp (BWB / Barcrest) (MPU4) (AC5 C, hack?, set 1) m4andycpacc_b - Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 2) + Andy Capp (BWB / Barcrest) (MPU4) (AC5 C, hack?, set 2) m4andycpacc_c - Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 3) + Andy Capp (BWB / Barcrest) (MPU4) (AC5 C, hack?, set 3) m4andycpacc_d - Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 4) + Andy Capp (BWB / Barcrest) (MPU4) (AC5 C, hack?, set 4) m4andycpacc_e - Andy Capp (Bwb / Barcrest) (MPU4) (AC5 C, hack?, set 5) + Andy Capp (BWB / Barcrest) (MPU4) (AC5 C, hack?, set 5) m4andycpaccsd - Andy Capp (Bwb / Barcrest) (MPU4) (ACC5) + Andy Capp (BWB / Barcrest) (MPU4) (ACC5) m4andycpacd - Andy Capp (Bwb / Barcrest) (MPU4) (AC5 D) + Andy Capp (BWB / Barcrest) (MPU4) (AC5 D) m4andycpack - Andy Capp (Bwb / Barcrest) (MPU4) (AC5 K) + Andy Capp (BWB / Barcrest) (MPU4) (AC5 K) m4andycpacyd - Andy Capp (Bwb / Barcrest) (MPU4) (AC5 YD) + Andy Capp (BWB / Barcrest) (MPU4) (AC5 YD) m4andycpc2 @@ -52989,7 +55413,7 @@ m4andycpdut - Andy Capp (Barcrest) [DAC 1.3, Dutch] (MPU4) + Andy Capp (Barcrest) (Dutch) (MPU4) (DAC 1.3) m4andycpdy @@ -53277,7 +55701,7 @@ m4andyfl - Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL4 2.1 KS) + Andy Loves Flo (BWB / Barcrest) (MPU4) (AL4 2.1 KS) m4andyfl3 @@ -53333,7 +55757,7 @@ m4andyfl8bs - Andy Loves Flo (Bwb / Barcrest) (MPU4) (AL_ 2.4 KS) + Andy Loves Flo (BWB / Barcrest) (MPU4) (AL_ 2.4 KS) m4andyfl8c @@ -53581,91 +56005,91 @@ m4andyge_h1 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 3.0, hack?, set 1) + Andy's Great Escape (BWB / Barcrest) (MPU4) (8V1 3.0, hack?, set 1) m4andyge_h2 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 3.0, hack?, set 2) + Andy's Great Escape (BWB / Barcrest) (MPU4) (8V1 3.0, hack?, set 2) m4andyge_h3 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 0.3, hack?, set 1) + Andy's Great Escape (BWB / Barcrest) (MPU4) (8V1 0.3, hack?, set 1) m4andyge_h4 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (8V1 0.3, hack?, set 2) + Andy's Great Escape (BWB / Barcrest) (MPU4) (8V1 0.3, hack?, set 2) m4andyge_hx1 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 1) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 1) m4andyge_hx2 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 2) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 2) m4andyge_hx3 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 3) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 3) m4andyge_hx4 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 4) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG5 3.0 CX, hack?, set 4) m4andyge_hx5 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0 CX, hack?) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG__2.0 CX, hack?) m4andygeg5 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG5 3.0) m4andygeg5a - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 A) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG5 3.0 A) m4andygeg5c - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 C) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG5 3.0 C) m4andygeg5d - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 D) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG5 3.0 D) m4andygeg5k - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 K) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG5 3.0 K) m4andygeg5yd - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG5 3.0 YD) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG5 3.0 YD) m4andygeg_2 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG__2.0) m4andygeg_2c - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0 C) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG__2.0 C) m4andygeg_2d - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0 D) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG__2.0 D) m4andygeg_2k - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0 K) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG__2.0 K) m4andygeg_2yd - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AG__2.0 YD) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AG__2.0 YD) m4andygegc2 - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AGC 2.0) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AGC 2.0) m4andygegc2d - Andy's Great Escape (Bwb / Barcrest) (MPU4) (AGC 2.0 D) + Andy's Great Escape (BWB / Barcrest) (MPU4) (AGC 2.0 D) m4andygen2_a @@ -53721,7 +56145,7 @@ m4atlan - Atlantis (Barcrest) (DAT, Dutch) (MPU4) + Atlantis (Barcrest) (Dutch) (MPU4) (DAT 1.4) m4bagcsh @@ -54457,7 +56881,7 @@ m4bigban - Big Bandit (Nova) (MPU4) + Big Bandit (Nova) (German) (MPU4) (BIG 0.4) m4bigben @@ -54481,11 +56905,11 @@ m4bigbn - Big Ben (Barcrest) (DBB, Dutch) (MPU4) + Big Ben (Barcrest) (Dutch) (MPU4) (DBB 1.2) m4bigchd - Big Chief (Barcrest) [BCH, Dutch] (MPU4) + Big Chief (Barcrest) (Dutch) (MPU4) (BCH 1.5) m4bigchf @@ -54517,167 +56941,159 @@ m4bigmt - The Big Match (Bwb) (MPU4) (set 1) + The Big Match (BWB) (MPU4) (set 1) m4bigmt__a - The Big Match (Bwb) (MPU4) (set 2) + The Big Match (BWB) (MPU4) (set 2) m4bigmt__b - The Big Match (Bwb) (MPU4) (set 3) + The Big Match (BWB) (MPU4) (set 3) m4bigmt__c - The Big Match (Bwb) (MPU4) (set 4) + The Big Match (BWB) (MPU4) (set 4) m4bigmt__d - The Big Match (Bwb) (MPU4) (set 5) - - - m4bigmt__e - The Big Match (Bwb) (MPU4) (set 6) + The Big Match (BWB) (MPU4) (set 5) m4bigmt__f - The Big Match (Bwb) (MPU4) (set 7) + The Big Match (BWB) (MPU4) (set 7) m4bingbl - Bingo Belle (Bwb) (MPU4) (set 1) + Bingo Belle (BWB) (MPU4) (set 1) m4bingbl__a - Bingo Belle (Bwb) (MPU4) (set 2) + Bingo Belle (BWB) (MPU4) (set 2) m4bingbl__b - Bingo Belle (Bwb) (MPU4) (set 3) + Bingo Belle (BWB) (MPU4) (set 3) m4bingbl__c - Bingo Belle (Bwb) (MPU4) (set 4) + Bingo Belle (BWB) (MPU4) (set 4) m4bingbl__d - Bingo Belle (Bwb) (MPU4) (set 5) + Bingo Belle (BWB) (MPU4) (set 5) m4bingbl__e - Bingo Belle (Bwb) (MPU4) (set 6) + Bingo Belle (BWB) (MPU4) (set 6) m4bingbl__f - Bingo Belle (Bwb) (MPU4) (set 7) + Bingo Belle (BWB) (MPU4) (set 7) m4bingbl__g - Bingo Belle (Bwb) (MPU4) (set 8) + Bingo Belle (BWB) (MPU4) (set 8) m4bingbs - Bingo Belle Showcase (Bwb) (MPU4) (set 1) + Bingo Belle Showcase (BWB) (MPU4) (set 1) m4bingbs__a - Bingo Belle Showcase (Bwb) (MPU4) (set 2) + Bingo Belle Showcase (BWB) (MPU4) (set 2) m4bingbs__b - Bingo Belle Showcase (Bwb) (MPU4) (set 3) + Bingo Belle Showcase (BWB) (MPU4) (set 3) m4bingbs__c - Bingo Belle Showcase (Bwb) (MPU4) (set 4) + Bingo Belle Showcase (BWB) (MPU4) (set 4) m4bingbs__d - Bingo Belle Showcase (Bwb) (MPU4) (set 5) + Bingo Belle Showcase (BWB) (MPU4) (set 5) m4bingbs__e - Bingo Belle Showcase (Bwb) (MPU4) (set 6) + Bingo Belle Showcase (BWB) (MPU4) (set 6) m4bingbs__f - Bingo Belle Showcase (Bwb) (MPU4) (set 7) + Bingo Belle Showcase (BWB) (MPU4) (set 7) m4bingcl - Bingo Club (Bwb) (MPU4) (set 1) + Bingo Club (BWB) (MPU4) (set 1) m4bingcl__a - Bingo Club (Bwb) (MPU4) (set 2) + Bingo Club (BWB) (MPU4) (set 2) m4bingcl__b - Bingo Club (Bwb) (MPU4) (set 3) + Bingo Club (BWB) (MPU4) (set 3) m4bj - Black Jack (Barcrest) [Dutch] (MPU4) + Black Jack (Barcrest) (Dutch) (MPU4) (BJ 1.6) m4bjac - Blackjack Club (Barcrest) (MPU4) (set 1) + Blackjack Club (Barcrest) (MPU4) (C2J 1.8) m4bjaca - Blackjack Club (Barcrest) (MPU4) (set 2) + Blackjack Club (Barcrest) (MPU4) (C2J 2.1) m4bjack - Black Jack (Barcrest) (MPU4) (set 1) + Black Jack (Barcrest) (MPU4) (B2J 2.2) m4bjacka - Black Jack (Barcrest) (MPU4) (set 2) + Black Jack (Barcrest) (MPU4) (BLA 2.0) m4bjc - Black Jack Club (Barcrest) (Dutch) (MPU4) + Black Jack Club (Barcrest) (Dutch) (MPU4) (DBC 1.1) m4bjsm - Blackjack Super Multi (Barcrest) (MPU4) (SM H) + Blackjack Super Multi (Barcrest) (German) (MPU4) (SM H1.6) m4bjsma - Blackjack Super Multi (Barcrest) (MPU4) + Blackjack Super Multi (Barcrest) (MPU4) (SM 1.6) m4blflsh - Blue Flash (Bwb) (MPU4) (set 1) + Blue Flash (BWB) (MPU4) (TBF 0.3) m4blflsha - Blue Flash (Bwb) (MPU4) (set 2) + Blue Flash (BWB) (MPU4) (BFL 0.3, set 1) m4blflshb - Blue Flash (Bwb) (MPU4) (set 3) + Blue Flash (BWB) (MPU4) (BFL 0.3, set 2) m4blflshc - Blue Flash (Bwb) (MPU4) (set 4) + Blue Flash (BWB) (MPU4) (BFL 0.3, set 3) m4blflshd - Blue Flash (Bwb) (MPU4) (set 5) + Blue Flash (BWB) (MPU4) (BFL 0.3, set 4) m4blflshe - Blue Flash (Bwb) (MPU4) (set 6) + Blue Flash (BWB) (MPU4) (BFL 0.3, set 5) m4blkbul - Super Play (Black Bull?) (Czech) (Barcrest) [XSP] (MPU4) - - - m4blkbuld - Gun Smoke (Barcrest) (Dutch, alt sound roms) (MPU4) + Super Play (Czech) (Barcrest) (MPU4) (XSP 0.8) m4blkcat @@ -54725,179 +57141,179 @@ m4blkwhd - Black & White (Barcrest) [Dutch] (MPU4) (DBW 1.1) + Black & White (Barcrest) (Dutch) (MPU4) (DBW 1.1) m4blsbys - Blues Boys (Bwb) (MPU4) (set 1) + Blues Boys (BWB) (MPU4) (set 1) m4blsbys__0 - Blues Boys (Bwb) (MPU4) (set 28) + Blues Boys (BWB) (MPU4) (set 17) m4blsbys__1 - Blues Boys (Bwb) (MPU4) (set 29) + Blues Boys (BWB) (MPU4) (set 18) m4blsbys__2 - Blues Boys (Bwb) (MPU4) (set 30) + Blues Boys (BWB) (MPU4) (set 19) m4blsbys__3 - Blues Boys (Bwb) (MPU4) (set 31) + Blues Boys (BWB) (MPU4) (set 20) m4blsbys__4 - Blues Boys (Bwb) (MPU4) (set 32) + Blues Boys (BWB) (MPU4) (set 21) m4blsbys__5 - Blues Boys (Bwb) (MPU4) (set 33) + Blues Boys (BWB) (MPU4) (set 22) m4blsbys__6 - Blues Boys (Bwb) (MPU4) (set 34) + Blues Boys (BWB) (MPU4) (set 23) m4blsbys__7 - Blues Boys (Bwb) (MPU4) (set 35) + Blues Boys (BWB) (MPU4) (set 24) m4blsbys__8 - Blues Boys (Bwb) (MPU4) (set 36) + Blues Boys (BWB) (MPU4) (set 25) m4blsbys__9 - Blues Boys (Bwb) (MPU4) (set 37) + Blues Boys (BWB) (MPU4) (set 37) m4blsbys__a - Blues Boys (Bwb) (MPU4) (set 2) + Blues Boys (BWB) (MPU4) (set 2) m4blsbys__aa - Blues Boys (Bwb) (MPU4) (set 38) + Blues Boys (BWB) (MPU4) (set 38) m4blsbys__ab - Blues Boys (Bwb) (MPU4) (set 39) + Blues Boys (BWB) (MPU4) (set 39) m4blsbys__ac - Blues Boys (Bwb) (MPU4) (set 40) + Blues Boys (BWB) (MPU4) (set 40) m4blsbys__ad - Blues Boys (Bwb) (MPU4) (set 41) + Blues Boys (BWB) (MPU4) (set 41) m4blsbys__b - Blues Boys (Bwb) (MPU4) (set 3) + Blues Boys (BWB) (MPU4) (set 3) m4blsbys__c - Blues Boys (Bwb) (MPU4) (set 4) + Blues Boys (BWB) (MPU4) (set 4) m4blsbys__d - Blues Boys (Bwb) (MPU4) (set 5) + Blues Boys (BWB) (MPU4) (set 5) m4blsbys__e - Blues Boys (Bwb) (MPU4) (set 6) + Blues Boys (BWB) (MPU4) (set 6) m4blsbys__f - Blues Boys (Bwb) (MPU4) (set 7) + Blues Boys (BWB) (MPU4) (set 7) m4blsbys__g - Blues Boys (Bwb) (MPU4) (set 8) + Blues Boys (BWB) (MPU4) (set 26) m4blsbys__h - Blues Boys (Bwb) (MPU4) (set 9) + Blues Boys (BWB) (MPU4) (set 27) m4blsbys__i - Blues Boys (Bwb) (MPU4) (set 10) + Blues Boys (BWB) (MPU4) (set 28) m4blsbys__j - Blues Boys (Bwb) (MPU4) (set 11) + Blues Boys (BWB) (MPU4) (set 29) m4blsbys__k - Blues Boys (Bwb) (MPU4) (set 12) + Blues Boys (BWB) (MPU4) (set 30) m4blsbys__l - Blues Boys (Bwb) (MPU4) (set 13) + Blues Boys (BWB) (MPU4) (set 31) m4blsbys__m - Blues Boys (Bwb) (MPU4) (set 14) + Blues Boys (BWB) (MPU4) (set 32) m4blsbys__n - Blues Boys (Bwb) (MPU4) (set 15) + Blues Boys (BWB) (MPU4) (set 33) m4blsbys__o - Blues Boys (Bwb) (MPU4) (set 16) + Blues Boys (BWB) (MPU4) (set 34) m4blsbys__p - Blues Boys (Bwb) (MPU4) (set 17) + Blues Boys (BWB) (MPU4) (set 35) m4blsbys__q - Blues Boys (Bwb) (MPU4) (set 18) + Blues Boys (BWB) (MPU4) (set 36) m4blsbys__r - Blues Boys (Bwb) (MPU4) (set 19) + Blues Boys (BWB) (MPU4) (set 8) m4blsbys__s - Blues Boys (Bwb) (MPU4) (set 20) + Blues Boys (BWB) (MPU4) (set 9) m4blsbys__t - Blues Boys (Bwb) (MPU4) (set 21) + Blues Boys (BWB) (MPU4) (set 10) m4blsbys__u - Blues Boys (Bwb) (MPU4) (set 22) + Blues Boys (BWB) (MPU4) (set 11) m4blsbys__v - Blues Boys (Bwb) (MPU4) (set 23) + Blues Boys (BWB) (MPU4) (set 12) m4blsbys__w - Blues Boys (Bwb) (MPU4) (set 24) + Blues Boys (BWB) (MPU4) (set 13) m4blsbys__x - Blues Boys (Bwb) (MPU4) (set 25) + Blues Boys (BWB) (MPU4) (set 14) m4blsbys__y - Blues Boys (Bwb) (MPU4) (set 26) + Blues Boys (BWB) (MPU4) (set 15) m4blsbys__z - Blues Boys (Bwb) (MPU4) (set 27) + Blues Boys (BWB) (MPU4) (set 16) m4blstbk - Blast A Bank (Barcrest) (MPU4) + Blast A Bank (MPU4) (BB 1.0) m4bluedm - Blue Diamond (Barcrest) (MPU4) (DBD1.0) + Blue Diamond (Barcrest) (Dutch) (MPU4) (DBD 1.0) m4bluemn @@ -54925,7 +57341,7 @@ m4bnknot - Bank A Note (Barcrest) [BN 1.0] (MPU4) + Bank A Note (Barcrest) (MPU4) (BN 1.0) m4bnkrol @@ -54981,31 +57397,31 @@ m4brdway - Broadway (Barcrest) (DBR, Dutch) (MPU4) + Broadway (Barcrest) (Dutch) (MPU4) (DBR 1.1) m4brktak - Break & Take (Barcrest) (MPU4) + Break & Take (Barcrest) (bootleg) (MPU4) m4brnze - Bronze Voyage (unknown) (MPU4) (set 1) + Bronze Voyage (BWB) (bootleg?) (MPU4) (BV5 2.1, set 1) m4brnzea - Bronze Voyage (unknown) (MPU4) (set 2) + Bronze Voyage (BWB) (bootleg?) (MPU4) (BV5 2.1, set 2) m4brnzeb - Bronze Voyage (unknown) (MPU4) (set 3) + Bronze Voyage (BWB) (bootleg?) (MPU4) (BV5 2.1, set 3) m4brook - Brooklyn (Barcrest) (MPU4) (PFT 1.8) + Turbo Play / Brooklyn (Barcrest) (MPU4) (PFT 1.8) m4btclok - Beat The Clock (Barcrest) (MPU4) + Beat The Clock (Barcrest) (bootleg) (MPU4) m4buc @@ -55277,7 +57693,11 @@ m4bucks - Bucks Fizz Club (Barcrest) (MPU4) + Bucks Fizz Club (Barcrest) (MPU4) (BUF 1.2, set 1) + + + m4bucksa + Bucks Fizz Club (Barcrest) (MPU4) (BUF 1.2, set 2) m4bullio @@ -55301,19 +57721,47 @@ m4c999 - Cloud 999 (Barcrest) (MPU4) (OC9 0.3, set 1) + Cloud 999 (Barcrest) (MPU4) (CLN 4.0 V) m4c999a - Cloud 999 (Barcrest) (MPU4) (OC9 0.3, set 2) + Cloud 999 (Barcrest) (bootleg) (MPU4) (CLN 3.6) m4c999b - Cloud 999 (Barcrest) (MPU4) (CLN 3.6) + Cloud 999 (Barcrest) (bootleg) (MPU4) (CLN 3.0) m4c999c - Cloud 999 (Barcrest) (MPU4) (CLN 3.0) + Cloud 999 (Barcrest) (bootleg) (MPU4) (OC9 0.3, set 1) + + + m4c999d + Cloud 999 (Barcrest) (bootleg) (MPU4) (OC9 0.3, set 2) + + + m4c999e + Cloud 999 (Barcrest) (MPU4) (SC9 1.0, hack?, set 3) + + + m4c999f + Cloud 999 (Barcrest) (MPU4) (SC9 1.0, hack?, set 4) + + + m4c999g + Cloud 999 (Barcrest) (MPU4) (SC9 5.0) + + + m4c999h + Cloud 999 (Barcrest) (MPU4) (SC9 5.0 D) + + + m4c999i + Cloud 999 (Barcrest) (MPU4) (SC9 1.0, hack?, set 1) + + + m4c999j + Cloud 999 (Barcrest) (MPU4) (SC9 1.0, hack?, set 2) m4c9__0 @@ -55359,22 +57807,6 @@ m4c9__a Cloud Nine (Barcrest) (MPU4) (CT3 0.2) - - m4c9__a0 - Cloud Nine (Barcrest) (MPU4) (SC9 1.0, hack?, set 3) - - - m4c9__a1 - Cloud Nine (Barcrest) (MPU4) (SC9 1.0, hack?, set 4) - - - m4c9__a2 - Cloud Nine (Barcrest) (MPU4) (SC9 5.0) - - - m4c9__a3 - Cloud Nine (Barcrest) (MPU4) (SC9 5.0 D) - m4c9__aa Cloud Nine (Barcrest) (MPU4) (CT2 0.2 Y) @@ -55471,14 +57903,6 @@ m4c9__ax Cloud Nine (Barcrest) (MPU4) (CT5 0.2 Y) - - m4c9__ay - Cloud Nine (Barcrest) (MPU4) (SC9 1.0, hack?, set 1) - - - m4c9__az - Cloud Nine (Barcrest) (MPU4) (SC9 1.0, hack?, set 2) - m4c9__b Cloud Nine (Barcrest) (MPU4) (C92 1.0 KD) @@ -55527,10 +57951,6 @@ m4c9__m Cloud Nine (Barcrest) (MPU4) (C95 1.0 Y) - - m4c9__n - Cloud Nine (Barcrest) (MPU4) (CLN 4.0 V) - m4c9__o Cloud Nine (Barcrest) (MPU4) (C92 1.1 AD) @@ -55629,23 +58049,23 @@ m4calicl - California Club (Barcrest) (MPU4) (set 1) + California Club (Barcrest) (MPU4) (CA2 1.0, set 1) m4calicla - California Club (Barcrest) (MPU4) (set 2) + California Club (Barcrest) (MPU4) (CA2 1.0, set 2) m4caliclb - California Club (Barcrest) (MPU4) (set 3) + California Club (Barcrest) (MPU4) (CA2 1.0, set 3) m4caliclc - California Club (Barcrest) (MPU4) (set 4) + California Club (Barcrest) (MPU4) (CAL 2.0, set 1) m4calicld - California Club (Barcrest) (MPU4) (set 5) + California Club (Barcrest) (MPU4) (CAL 2.0, set 2) m4captb @@ -56469,11 +58889,7 @@ m4casmul - Casino Multiplay (Barcrest) (MPU4) - - - m4casot - Old Timer (Barcrest) (Dutch, alt 'Black and White' sound roms) (DOT1.1) + Casino Multiplay (MPU4) m4cbing @@ -56505,15 +58921,11 @@ m4celclb - Celebration Club (Barcrest) (MPU4) + Celebration Club (Barcrest) (MPU4) (CEL 1.5) m4centpt - Centrepoint (Barcrest) (v1.3) (MPU4) - - - m4centpta - Centrepoint (Barcrest) (v1.5) (MPU4) + Centrepoint (Barcrest) (MPU4) (DU 1.3) m4ceptr @@ -56527,10 +58939,6 @@ m4cfinln__a Cup Final (Nova) (MPU4) (set 2) - - m4ch30 - unknown MPU4 'CH3 0.1' (Barcrest) (MPU4) - m4chacec Chase The Ace [Cards] (Empire) (MPU4, set 1) @@ -56557,39 +58965,39 @@ m4chasei - Chase Invaders (Barcrest) (MPU4) (set 1) + Chase Invaders (Barcrest) (MPU4) (CI2 0.1, set 1) m4chaseia - Chase Invaders (Barcrest) (MPU4) (set 2) + Chase Invaders (Barcrest) (MPU4) (8V1 0.1, hack, set 1) m4chaseib - Chase Invaders (Barcrest) (MPU4) (set 3) + Chase Invaders (Barcrest) (MPU4) (8V1 0.1, hack, set 2) m4chaseic - Chase Invaders (Barcrest) (MPU4) (set 4) + Chase Invaders (Barcrest) (MPU4) (CI2 0.1, set 2) m4chaseid - Chase Invaders (Barcrest) (MPU4) (set 5) + Chase Invaders (Barcrest) (MPU4) (CI2 0.1, set 3) m4chaseie - Chase Invaders (Barcrest) (MPU4) (set 6) - - - m4chaseif - Chase Invaders (Barcrest) (MPU4) (set 7) + Chase Invaders (Barcrest) (MPU4) (CI2 0.1, set 4) m4chaseig - Chase Invaders (Barcrest) (MPU4) (set 8) + Chase Invaders (Barcrest) (MPU4) (8V1 0.1, hack, set 3) m4cheryo - Cherryo (Barcrest) (DCH, Dutch) (MPU4) + Cherryo (Barcrest) (Dutch) (MPU4) (DCH 1.4) + + + m4cjdlx + Crown Jewels Deluxe (Barcrest) (German) (MPU4) (CJG 0.4) m4clab @@ -56637,11 +59045,11 @@ m4class - First Class (Barcrest) [DFC, Dutch] (MPU4) (set 1) + First Class (Barcrest) (Dutch) (MPU4) (DFC 2.0, set 1) m4classa - First Class (Barcrest) [DFC, Dutch] (MPU4) (set 2) + First Class (Barcrest) (Dutch) (MPU4) (DFC 2.0, set 2) m4clbclm @@ -56653,27 +59061,27 @@ m4clbcls - Club Classic (Barcrest) (MPU4) + Club Classic (Barcrest) (MPU4) (CI 1.1) m4clbcnt - Club Connect (Barcrest) (MPU4) (set 1) + Club Connect (Barcrest) (MPU4) (CON 1.2) m4clbcnta - Club Connect (Barcrest) (MPU4) (set 2) + Club Connect (Barcrest) (MPU4) (CON 1.0) m4clbcntb - Club Connect (Barcrest) (MPU4) (set 3) + Club Connect (Barcrest) (MPU4) (CON 1.1) m4clbcntc - Club Connect (Barcrest) (MPU4) (set 4) + Club Connect (Barcrest) (MPU4) (CON 1.5, set 1) m4clbcntd - Club Connect (Barcrest) (MPU4) (set 5) + Club Connect (Barcrest) (MPU4) (CON 1.5, set 2) m4clbdbl @@ -56685,39 +59093,35 @@ m4clbshf - Club Shuffle (Barcrest) (MPU4) + Club Shuffle (Barcrest) (MPU4) (CSS 1.0) m4clbveg - Club Vegas (Barcrest) (MPU4) (set 1) + Club Vegas (Barcrest) (MPU4) (CLA 2.4, set 1) m4clbvega - Club Vegas (Barcrest) (MPU4) (set 2) + Club Vegas (Barcrest) (MPU4) (CLA 2.4, set 2) m4clbvegb - Club Vegas (Barcrest) (MPU4) (set 3) + Club Vegas (Barcrest) (MPU4) (CLA 2.4, set 3) m4clbvegc - Club Vegas (Barcrest) (MPU4) (set 4) + Club Vegas (Barcrest) (MPU4) (CLA 2.4, set 4) m4clbx - Club X (Barcrest) (MPU4) (set 1) + Club X (Barcrest) (MPU4) (CLX 1.2, set 1) m4clbxa - Club X (Barcrest) (MPU4) (set 2) + Club X (Barcrest) (MPU4) (CLX 1.2, set 2) m4clbxb - Club X (Barcrest) (MPU4) (set 3) - - - m4cld02 - unknown MPU4 'CLD 0.2C' (MPU4?) + Club X (Barcrest) (MPU4) (CLX 1.2, set 3) m4click @@ -57001,31 +59405,31 @@ m4cojok - Carry On Joker (Barcrest) (MPU4) (set 1) + Carry On Joker (Barcrest) (MPU4) (COJ 2.1, set 1) m4cojok__a - Carry On Joker (Barcrest) (MPU4) (set 2) + Carry On Joker (Barcrest) (MPU4) (COJ 2.1, set 2) m4cojok__b - Carry On Joker (Barcrest) (MPU4) (set 3) + Carry On Joker (Barcrest) (MPU4) (COJ 2.1, set 3) m4cojok__c - Carry On Joker (Barcrest) (MPU4) (set 4) + Carry On Joker (Barcrest) (MPU4) (COJ 2.1, set 4) m4cojok__d - Carry On Joker (Barcrest) (MPU4) (set 5) + Carry On Joker (Barcrest) (MPU4) (COJ 2.1, set 5) m4cojok__e - Carry On Joker (Barcrest) (MPU4) (set 6) + Carry On Joker (Barcrest) (MPU4) (COJ 2.1, set 6) m4cojok__f - Carry On Joker (Barcrest) (MPU4) (set 7) + Carry On Joker (Barcrest) (MPU4) (COJ 2.1, set 7) m4coloss @@ -57069,147 +59473,147 @@ m4copcsh - Coppa Cash (Barcrest) (MPU4) (FC 2.0) + Coppa Cash (MPU4) (FC 2.0) m4coscas - Cosmic Casino (Barcrest) (MPU4) (CC__3.0) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0) m4coscas__a - Cosmic Casino (Barcrest) (MPU4) (CC__6.0, hack) + Cosmic Casinos (Barcrest) (MPU4) (CC__6.0, hack) m4coscas__b - Cosmic Casino (Barcrest) (MPU4) (CC__7.0 Y) + Cosmic Casinos (Barcrest) (MPU4) (CC__7.0 Y) m4coscas__c - Cosmic Casino (Barcrest) (MPU4) (CC__3.0, hack) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0, hack) m4coscas__d - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 C) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 C) m4coscas__e - Cosmic Casino (Barcrest) (MPU4) (CC__7.0) + Cosmic Casinos (Barcrest) (MPU4) (CC__7.0) m4coscas__f - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 YD) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 YD) m4coscas__g - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 YCD) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 YCD) m4coscas__h - Cosmic Casino (Barcrest) (MPU4) (CC__7.0 YD) + Cosmic Casinos (Barcrest) (MPU4) (CC__7.0 YD) m4coscas__i - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 D) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 D) m4coscas__j - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 CD) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 CD) m4coscas__k - Cosmic Casino (Barcrest) (MPU4) (CC__7.0 D) + Cosmic Casinos (Barcrest) (MPU4) (CC__7.0 D) m4coscas__l - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 Y) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 Y) m4coscas__m - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 YC) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 YC) m4coscas__n - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 K) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 K) m4coscas__o - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 CK) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 CK) m4coscas__p - Cosmic Casino (Barcrest) (MPU4) (CC__7.0 K) + Cosmic Casinos (Barcrest) (MPU4) (CC__7.0 K) m4coscas__q - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 B) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 B) m4coscas__r - Cosmic Casino (Barcrest) (MPU4) (CC__7.0 B) + Cosmic Casinos (Barcrest) (MPU4) (CC__7.0 B) m4coscas__s - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 BCAD) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 BCAD) m4coscas__t - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 BCR) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 BCR) m4coscas__u - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 YDH) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 YDH) m4coscas__v - Cosmic Casino (Barcrest) (MPU4) (CC__3.0 YCDH) + Cosmic Casinos (Barcrest) (MPU4) (CC__3.0 YCDH) m4cpfinl - Cup Final (Bwb) (MPU4) (set 1) + Cup Final (BWB) (MPU4) (set 1) m4cpfinl__a - Cup Final (Bwb) (MPU4) (set 2) + Cup Final (BWB) (MPU4) (set 2) m4cpfinl__b - Cup Final (Bwb) (MPU4) (set 3) + Cup Final (BWB) (MPU4) (set 3) m4cpfinl__c - Cup Final (Bwb) (MPU4) (set 4) + Cup Final (BWB) (MPU4) (set 4) m4cpfinl__d - Cup Final (Bwb) (MPU4) (set 5) + Cup Final (BWB) (MPU4) (set 5) m4cpfinl__e - Cup Final (Bwb) (MPU4) (set 6) + Cup Final (BWB) (MPU4) (set 6) m4cpfinl__f - Cup Final (Bwb) (MPU4) (set 7) + Cup Final (BWB) (MPU4) (set 7) m4cpfinl__g - Cup Final (Bwb) (MPU4) (set 8) + Cup Final (BWB) (MPU4) (set 8) m4cpfinl__h - Cup Final (Bwb) (MPU4) (set 9) + Cup Final (BWB) (MPU4) (set 9) m4cpfinl__i - Cup Final (Bwb) (MPU4) (set 10) + Cup Final (BWB) (MPU4) (set 10) m4cpfinl__j - Cup Final (Bwb) (MPU4) (set 11) + Cup Final (BWB) (MPU4) (set 11) m4cpfinl__k - Cup Final (Bwb) (MPU4) (set 12) + Cup Final (BWB) (MPU4) (set 12) m4cpycat @@ -57357,63 +59761,63 @@ m4crdome - Crystal Dome (Barcrest) (MPU4) (CD2 1.2) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2) m4crdome__a - Crystal Dome (Barcrest) (MPU4) (CD2 1.2 C) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2 C) m4crdome__b - Crystal Dome (Barcrest) (MPU4) (CD2 1.2 AD) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2 AD) m4crdome__c - Crystal Dome (Barcrest) (MPU4) (CD2 1.2 B) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2 B) m4crdome__d - Crystal Dome (Barcrest) (MPU4) (CD2 1.2 BD) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2 BD) m4crdome__e - Crystal Dome (Barcrest) (MPU4) (CD2 1.2 D) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2 D) m4crdome__f - Crystal Dome (Barcrest) (MPU4) (CD2 1.2 KD) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2 KD) m4crdome__g - Crystal Dome (Barcrest) (MPU4) (CD2 1.2 RD) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2 RD) m4crdome__h - Crystal Dome (Barcrest) (MPU4) (CD2 1.2 YD) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2 YD) m4crdome__i - Crystal Dome (Barcrest) (MPU4) (CD2 1.2 R) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2 R) m4crdome__j - Crystal Dome (Barcrest) (MPU4) (CD2 1.2 K) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2 K) m4crdome__k - Crystal Dome (Barcrest) (MPU4) (CD2 1.2 Y) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2 Y) m4crdome__l - Crystal Dome (Barcrest) (MPU4) (CD2 1.2, hack) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.2, hack) m4crdome__m - Crystal Dome (Barcrest) (MPU4) (CD2 1.0 C) + The Crystal Dome (Barcrest) (MPU4) (CD2 1.0 C) m4crdome__n - Crystal Dome (Barcrest) (MPU4) (CD2 0.2 C) + The Crystal Dome (Barcrest) (MPU4) (CD2 0.2 C) m4crfire @@ -57425,115 +59829,115 @@ m4crjwl - Crown Jewels Club (Barcrest) (MPU4) (set 1) + Crown Jewels Club (Barcrest) (MPU4) (CJC 1.5, set 1) m4crjwl2 - Crown Jewels Mk II Club (Barcrest) (MPU4) (set 1) + Crown Jewels Mk II Club (Barcrest) (MPU4) (CJ2 1.4, set 1) m4crjwl2a - Crown Jewels Mk II Club (Barcrest) (MPU4) (set 2) + Crown Jewels Mk II Club (Barcrest) (MPU4) (CJ2 1.4, set 2) m4crjwl2b - Crown Jewels Mk II Club (Barcrest) (MPU4) (set 3) + Crown Jewels Mk II Club (Barcrest) (MPU4) (CJ2 1.4, set 3) m4crjwla - Crown Jewels Club (Barcrest) (MPU4) (set 2) + Crown Jewels Club (Barcrest) (MPU4) (CJC 1.5, set 2) m4crjwlb - Crown Jewels Club (Barcrest) (MPU4) (set 3) + Crown Jewels Club (Barcrest) (MPU4) (CJC 1.5, set 3) m4crjwlc - Crown Jewels Club (Barcrest) (MPU4) (set 4) + Crown Jewels Club (Barcrest) (MPU4) (CJN 0.2) m4crkpot - Crackpot 100 Club (Barcrest) (MPU4) (set 1, C1P 1.2) + Crackpot 100 Club (Barcrest) (MPU4) (C1P 1.2) m4crkpota - Crackpot 100 Club (Barcrest) (MPU4) (set 2, CP 3.8) + Crackpot 100 Club (Barcrest) (MPU4) (CP 3.8) m4crkpotb - Crackpot 100 Club (Barcrest) (MPU4) (set 3, CP 3.1) + Crackpot 100 Club (Barcrest) (MPU4) (CP 3.1) m4crmaze - Crystal Maze (Barcrest) (MPU4) (CRM 3.0) + The Crystal Maze (Barcrest) (MPU4) (CRM 3.0) m4crmaze__c - Crystal Maze (Barcrest) (MPU4) (CRM 2.3) + The Crystal Maze (Barcrest) (MPU4) (CRM 2.3) m4crmaze__d - Crystal Maze (Barcrest) (MPU4) (CRM 3.0 AD) + The Crystal Maze (Barcrest) (MPU4) (CRM 3.0 AD) m4crmaze__e - Crystal Maze (Barcrest) (MPU4) (CRM 3.0 B) + The Crystal Maze (Barcrest) (MPU4) (CRM 3.0 B) m4crmaze__f - Crystal Maze (Barcrest) (MPU4) (CRM 3.0 BD) + The Crystal Maze (Barcrest) (MPU4) (CRM 3.0 BD) m4crmaze__g - Crystal Maze (Barcrest) (MPU4) (CRM 3.0 C) + The Crystal Maze (Barcrest) (MPU4) (CRM 3.0 C) m4crmaze__h - Crystal Maze (Barcrest) (MPU4) (CRM 3.0 D) + The Crystal Maze (Barcrest) (MPU4) (CRM 3.0 D) m4crmaze__i - Crystal Maze (Barcrest) (MPU4) (CRM 3.0 KD) + The Crystal Maze (Barcrest) (MPU4) (CRM 3.0 KD) m4crmaze__j - Crystal Maze (Barcrest) (MPU4) (CRM 3.0 YD) + The Crystal Maze (Barcrest) (MPU4) (CRM 3.0 YD) m4crmaze__k - Crystal Maze (Barcrest) (MPU4) (CRM 3.0 K) + The Crystal Maze (Barcrest) (MPU4) (CRM 3.0 K) m4crmaze__l - Crystal Maze (Barcrest) (MPU4) (CRM 3.0 Y) + The Crystal Maze (Barcrest) (MPU4) (CRM 3.0 Y) m4crmaze__m - Crystal Maze (Barcrest) (MPU4) (CRM 3.0, hack?) + The Crystal Maze (Barcrest) (MPU4) (CRM 3.0, hack?) m4crmaze__n - Crystal Maze (Bwb / Barcrest) (MPU4) (CRC 0.7, hack?) + The Crystal Maze (BWB / Barcrest) (MPU4) (CRC 0.7, hack?) m4crmaze__o - Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 1.0, hack?) + The Crystal Maze (BWB / Barcrest) (MPU4) (CR5 1.0, hack?) m4crmaze__p - Crystal Maze (Bwb / Barcrest) (MPU4) (CRC 1.3, hack?) + The Crystal Maze (BWB / Barcrest) (MPU4) (CRC 1.3, hack?) m4crmaze__q - Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 2.0, hack?, set 1) + The Crystal Maze (BWB / Barcrest) (MPU4) (CR5 2.0, hack?, set 1) m4crmaze__r - Crystal Maze (Bwb / Barcrest) (MPU4) (CR5 2.0, hack?, set 2) + The Crystal Maze (BWB / Barcrest) (MPU4) (CR5 2.0, hack?, set 2) m4crmaze__s - Crystal Maze (Bwb / Barcrest) (MPU4) (CR8 1.2, hack?) + The Crystal Maze (BWB / Barcrest) (MPU4) (CR8 1.2, hack?) m4crzbn @@ -57557,7 +59961,7 @@ m4crzcav - Crazy Cavern (Nova) (MPU4) + Crazy Cavern (Nova) (MPU4) (GCV 0.5) m4crzcl @@ -57581,7 +59985,7 @@ m4crzcsn - Crazy Casino (Nova) (MPU4) + Crazy Casino (Nova) (German) (MPU4) (CRZ 0.3) m4crzjk @@ -57589,39 +59993,35 @@ m4crzjwl - Crown Jewels (Barcrest) (German) (MPU4) (set 1) + Crown Jewels (Barcrest) (German) (MPU4) (GCN 1.1) m4crzjwla - Crown Jewels (Barcrest) (German) (MPU4) (set 2) + Crown Jewels (Barcrest) (bootleg) (German) (MPU4) (GCN 0.9, set 1) m4crzjwlb - Crown Jewels (Barcrest) (German) (MPU4) (set 3) + Crown Jewels (Barcrest) (bootleg) (German) (MPU4) (GCN 0.9, set 4) m4crzjwlc - Crown Jewels (Barcrest) (German) (MPU4) (set 4) + Crown Jewels (Barcrest) (German) (MPU4) (GCN 0.9) m4crzjwld - Crown Jewels (Barcrest) (German) (MPU4) (set 5) + Crown Jewels (Barcrest) (bootleg) (German) (MPU4) (GCN 1.1, set 2) m4crzjwle - Crown Jewels (Barcrest) (German) (MPU4) (set 6) + Crown Jewels (Barcrest) (bootleg) (German) (MPU4) (GCN 1.1, set 1) m4crzjwlf - Crown Jewels (Barcrest) (German) (MPU4) (set 7) + Crown Jewels (Barcrest) (bootleg) (German) (MPU4) (GCN 0.9, set 2) m4crzjwlg - Crown Jewels (Barcrest) (German) (MPU4) (set 8) - - - m4crzjwlh - Crown Jewels (Barcrest) (German) (MPU4) (set 9) + Crown Jewels (Barcrest) (bootleg) (German) (MPU4) (GCN 0.9, set 3) m4cshenc @@ -57649,47 +60049,47 @@ m4csoc - Championship Soccer (Bwb) (MPU4) (set 1) + Championship Soccer (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £10/£15 jackpot) (set 1) m4csoc__a - Championship Soccer (Bwb) (MPU4) (set 2) + Championship Soccer (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £10/£15 jackpot) (set 2) m4csoc__b - Championship Soccer (Bwb) (MPU4) (set 3) + Championship Soccer (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £10/£15 jackpot) (set 3) m4csoc__c - Championship Soccer (Bwb) (MPU4) (set 4) + Championship Soccer (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 1) m4csoc__d - Championship Soccer (Bwb) (MPU4) (set 5) + Championship Soccer (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 2) m4csoc__e - Championship Soccer (Bwb) (MPU4) (set 6) + Championship Soccer (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 3) m4csoc__f - Championship Soccer (Bwb) (MPU4) (set 7) + Championship Soccer (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 4) m4csoc__g - Championship Soccer (Bwb) (MPU4) (set 8) + Championship Soccer (BWB) (MPU4) (5/10p stake / £5 jackpot) (set 1) m4csoc__h - Championship Soccer (Bwb) (MPU4) (set 9) + Championship Soccer (BWB) (MPU4) (5/10p stake / £5 jackpot) (set 2) m4csoc__i - Championship Soccer (Bwb) (MPU4) (set 10) + Championship Soccer (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot) m4csoc__j - Championship Soccer (Bwb) (MPU4) (set 11) + Championship Soccer (BWB) (MPU4) (5/10/20/25/30p stake / £8 jackpot, 20/25/30p stake / £15 jackpot) (hack) m4cstrik @@ -57717,171 +60117,171 @@ m4czne - Cash Zone (Bwb) (MPU4) + Cash Zone (bootleg) (MPU4) (CAZ 1.5) m4danced - Dancing Diamonds (Bwb) (MPU4) (set 1) + Dancing Diamonds (BWB) (MPU4) (set 1) m4danced__a - Dancing Diamonds (Bwb) (MPU4) (set 2) + Dancing Diamonds (BWB) (MPU4) (set 2) m4danced__b - Dancing Diamonds (Bwb) (MPU4) (set 3) + Dancing Diamonds (BWB) (MPU4) (set 3) m4danced__c - Dancing Diamonds (Bwb) (MPU4) (set 4) + Dancing Diamonds (BWB) (MPU4) (set 4) m4danced__d - Dancing Diamonds (Bwb) (MPU4) (set 5) + Dancing Diamonds (BWB) (MPU4) (set 5) m4danced__e - Dancing Diamonds (Bwb) (MPU4) (set 6) + Dancing Diamonds (BWB) (MPU4) (set 6) m4danced__f - Dancing Diamonds (Bwb) (MPU4) (set 7) + Dancing Diamonds (BWB) (MPU4) (set 7) m4danced__g - Dancing Diamonds (Bwb) (MPU4) (set 8) + Dancing Diamonds (BWB) (MPU4) (set 8) m4danced__h - Dancing Diamonds (Bwb) (MPU4) (set 9) + Dancing Diamonds (BWB) (MPU4) (set 9) m4danced__i - Dancing Diamonds (Bwb) (MPU4) (set 10) + Dancing Diamonds (BWB) (MPU4) (set 10) m4danced__j - Dancing Diamonds (Bwb) (MPU4) (set 11) + Dancing Diamonds (BWB) (MPU4) (set 11) m4danced__k - Dancing Diamonds (Bwb) (MPU4) (set 12) + Dancing Diamonds (BWB) (MPU4) (set 12) m4danced__l - Dancing Diamonds (Bwb) (MPU4) (set 13) + Dancing Diamonds (BWB) (MPU4) (set 13) m4danced__m - Dancing Diamonds (Bwb) (MPU4) (set 14) + Dancing Diamonds (BWB) (MPU4) (set 14) m4danced__n - Dancing Diamonds (Bwb) (MPU4) (set 15) + Dancing Diamonds (BWB) (MPU4) (set 15) m4danced__o - Dancing Diamonds (Bwb) (MPU4) (set 16) + Dancing Diamonds (BWB) (MPU4) (set 16) m4danced__p - Dancing Diamonds (Bwb) (MPU4) (set 17) + Dancing Diamonds (BWB) (MPU4) (set 17) m4danced__q - Dancing Diamonds (Bwb) (MPU4) (set 18) + Dancing Diamonds (BWB) (MPU4) (set 18) m4danced__r - Dancing Diamonds (Bwb) (MPU4) (set 19) + Dancing Diamonds (BWB) (MPU4) (set 19) m4danced__s - Dancing Diamonds (Bwb) (MPU4) (set 20) + Dancing Diamonds (BWB) (MPU4) (set 20) m4danced__t - Dancing Diamonds (Bwb) (MPU4) (set 21) + Dancing Diamonds (BWB) (MPU4) (set 21) m4danced__u - Dancing Diamonds (Bwb) (MPU4) (set 22) + Dancing Diamonds (BWB) (MPU4) (set 22) m4danced__v - Dancing Diamonds (Bwb) (MPU4) (set 23) + Dancing Diamonds (BWB) (MPU4) (set 23) m4danced__w - Dancing Diamonds (Bwb) (MPU4) (set 24) + Dancing Diamonds (BWB) (MPU4) (set 24) m4daytn - Daytona (Bwb) (MPU4) (set 1) + Daytona (BWB) (MPU4) (set 1) m4daytn__a - Daytona (Bwb) (MPU4) (set 2) + Daytona (BWB) (MPU4) (set 2) m4daytn__b - Daytona (Bwb) (MPU4) (set 3) + Daytona (BWB) (MPU4) (set 3) m4daytn__c - Daytona (Bwb) (MPU4) (set 4) + Daytona (BWB) (MPU4) (set 4) m4daytn__d - Daytona (Bwb) (MPU4) (set 5) + Daytona (BWB) (MPU4) (set 5) m4daytn__e - Daytona (Bwb) (MPU4) (set 6) + Daytona (BWB) (MPU4) (set 6) m4daytn__f - Daytona (Bwb) (MPU4) (set 7) + Daytona (BWB) (MPU4) (set 7) m4daytn__g - Daytona (Bwb) (MPU4) (set 8) + Daytona (BWB) (MPU4) (set 8) m4daytn__h - Daytona (Bwb) (MPU4) (set 9) + Daytona (BWB) (MPU4) (set 9) m4daytn__i - Daytona (Bwb) (MPU4) (set 10) + Daytona (BWB) (MPU4) (set 10) m4daytn__j - Daytona (Bwb) (MPU4) (set 11) + Daytona (BWB) (MPU4) (set 11) m4daytn__k - Daytona (Bwb) (MPU4) (set 12) + Daytona (BWB) (MPU4) (set 12) m4daytn__l - Daytona (Bwb) (MPU4) (set 13) + Daytona (BWB) (MPU4) (set 13) m4daytn__m - Daytona (Bwb) (MPU4) (set 14) + Daytona (BWB) (MPU4) (set 14) m4daytn__n - Daytona (Bwb) (MPU4) (set 15) + Daytona (BWB) (MPU4) (set 15) m4dbl9 - Double 9's (Barcrest) (MPU4) (set 1) + Double 9's (Barcrest) (MPU4) (DU9 1.0) m4dbl9a - Double 9's (Barcrest) (MPU4) (set 2) + Double 9's (Barcrest) (bootleg) (MPU4) (DU9 0.2) m4dblchn @@ -58125,31 +60525,31 @@ m4dnj - Double Nudge (unknown) (MPU4) (set 1) + Double Nudge (Cotswold Microsystems) (MPU4) (set 1) m4dnja - Double Nudge (unknown) (MPU4) (set 2) + Double Nudge (Cotswold Microsystems) (MPU4) (set 2) m4dnjb - Double Nudge (unknown) (MPU4) (set 3) + Double Nudge (Cotswold Microsystems) (MPU4) (set 3) m4drac - Dracula (Barcrest - Nova) (German) (MPU4) (set 1) + Dracula (Barcrest - Nova) (German) (MPU4) (DRA 2.1) m4draca - Dracula (Barcrest - Nova) (German) (MPU4) (set 2) + Dracula (Barcrest - Nova) (German) (MPU4) (DRA 2.4) m4dracb - Dracula (Barcrest - Nova) (German) (MPU4) (set 3) + Dracula (Barcrest - Nova) (German) (MPU4) (DRA 2.7) m4dragon - Dragon (Nova) (MPU4) + Dragon (Nova) (MPU4) (DGL 0.1) m4dtyfre @@ -58157,7 +60557,7 @@ m4dtyfre_h1 - Duty Free (Bwb / Barcrest) (MPU4) (DF4 4.1, hack?) + Duty Free (BWB / Barcrest) (MPU4) (DF4 4.1, hack?) m4dtyfre_h2 @@ -58165,39 +60565,39 @@ m4dtyfrebwb - Duty Free (Bwb / Barcrest) (MPU4) (DF10 4.3, set 1) + Duty Free (BWB / Barcrest) (MPU4) (DF10 4.3, set 1) m4dtyfrebwb_a - Duty Free (Bwb / Barcrest) (MPU4) (DF10 4.3, set 2) + Duty Free (BWB / Barcrest) (MPU4) (DF10 4.3, set 2) m4dtyfrebwb_b - Duty Free (Bwb / Barcrest) (MPU4) (DF8 4.2) + Duty Free (BWB / Barcrest) (MPU4) (DF8 4.2) m4dtyfrebwb_c - Duty Free (Bwb / Barcrest) (MPU4) (DF8 2.2, set 1) + Duty Free (BWB / Barcrest) (MPU4) (DF8 2.2, set 1) m4dtyfrebwb_d - Duty Free (Bwb / Barcrest) (MPU4) (DF8 2.2, set 2) + Duty Free (BWB / Barcrest) (MPU4) (DF8 2.2, set 2) m4dtyfrebwb_e - Duty Free (Bwb / Barcrest) (MPU4) (DF4 4.1) + Duty Free (BWB / Barcrest) (MPU4) (DF4 4.1) m4dtyfrebwb_f - Duty Free (Bwb / Barcrest) (MPU4) (DF4 2.1) + Duty Free (BWB / Barcrest) (MPU4) (DF4 2.1) m4dtyfrebwb_g - Duty Free (Bwb / Barcrest) (MPU4) (DF4 1.1) + Duty Free (BWB / Barcrest) (MPU4) (DF4 1.1) m4dtyfrebwb_h - Duty Free (Bwb / Barcrest) (MPU4) (DFC 2.3) + Duty Free (BWB / Barcrest) (MPU4) (DFC 2.3) m4dtyfref5 @@ -58419,6 +60819,10 @@ m4eaw Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2) + + m4eaw51 + Everyone's A Winner (J.A. Brown) (MPU4) (EAW 5.1) + m4eaw__0 Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 D / ER4 0.1) @@ -58707,10 +61111,6 @@ m4eaw__bx Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 Y / ER4 0.1) - - m4eaw__bz - Everyone's A Winner (Barcrest) (MPU4) (unknown rev, bad) - m4eaw__c Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 BD / ER4 0.3) @@ -58857,15 +61257,15 @@ m4esctbg - Escalera Tobogan (MPU4, set 1) + Escalera Tobogan (Spain) (MPU4) (ESC1, set 1) m4esctbga - Escalera Tobogan (MPU4, set 2) + Escalera Tobogan (Spain) (MPU4) (ESC1, set 2) m4esctbgb - Escalera Tobogan (MPU4, set 3) + Escalera Tobogan (Spain) (MPU4) (ESC1, set 3) m4eureka @@ -58885,47 +61285,47 @@ m4excal - Excalibur (Bwb) (MPU4) (set 1) + Excalibur (BWB) (MPU4) (set 1) m4excal__a - Excalibur (Bwb) (MPU4) (set 2) + Excalibur (BWB) (MPU4) (set 2) m4excal__b - Excalibur (Bwb) (MPU4) (set 3) + Excalibur (BWB) (MPU4) (set 3) m4excal__c - Excalibur (Bwb) (MPU4) (set 4) + Excalibur (BWB) (MPU4) (set 4) m4excal__d - Excalibur (Bwb) (MPU4) (set 5) + Excalibur (BWB) (MPU4) (set 5) m4excal__e - Excalibur (Bwb) (MPU4) (set 6) + Excalibur (BWB) (MPU4) (set 6) m4excal__f - Excalibur (Bwb) (MPU4) (set 7) + Excalibur (BWB) (MPU4) (set 7) m4excal__g - Excalibur (Bwb) (MPU4) (set 8) + Excalibur (BWB) (MPU4) (set 8) m4excal__h - Excalibur (Bwb) (MPU4) (set 9) + Excalibur (BWB) (MPU4) (set 9) m4excal__i - Excalibur (Bwb) (MPU4) (set 10) + Excalibur (BWB) (MPU4) (set 10) m4excal__j - Excalibur (Bwb) (MPU4) (set 11) + Excalibur (BWB) (MPU4) (set 11) m4excaln @@ -58945,7 +61345,7 @@ m4exgam - Extra Game (Fairplay - Barcrest) (MPU4) + Extra Game (Fairplay - Barcrest) (MPU4) (CEG 2.0) m4exlin @@ -58957,31 +61357,31 @@ m4exotic - Exotic Fruits (Bwb) (MPU4) (set 1) + Exotic Fruits (BWB) (MPU4) (30p stake / £15 jackpot) (set 1) m4exotic__a - Exotic Fruits (Bwb) (MPU4) (set 2) + Exotic Fruits (BWB) (MPU4) (30p stake / £15 jackpot) (set 2) m4exotic__b - Exotic Fruits (Bwb) (MPU4) (set 3) + Exotic Fruits (BWB) (MPU4) (30p stake / £15 jackpot) (set 3) m4exotic__c - Exotic Fruits (Bwb) (MPU4) (set 4) + Exotic Fruits (BWB) (MPU4) (30p stake / £15 jackpot) (set 4) m4exotic__d - Exotic Fruits (Bwb) (MPU4) (set 5) + Exotic Fruits (BWB) (MPU4) (20/25/30p stake / £15 jackpot) (set 1) m4exotic__e - Exotic Fruits (Bwb) (MPU4) (set 6) + Exotic Fruits (BWB) (MPU4) (20/25/30p stake / £15 jackpot) (set 2) m4exprs - Express (Barcrest) (DXP, Dutch) (MPU4) + Express (Barcrest) (Dutch) (MPU4) (DXP 2.0) m4fairg @@ -58989,31 +61389,31 @@ m4fastfw - Fast Forward (Barcrest) (MPU4) (set 1) + Fast Forward (Barcrest) (MPU4) (SFF 3.0, set 1) m4fastfw__a - Fast Forward (Barcrest) (MPU4) (set 2) + Fast Forward (Barcrest) (MPU4) (SFF 3.0, set 2) m4fastfw__b - Fast Forward (Barcrest) (MPU4) (set 3) + Fast Forward (Barcrest) (MPU4) (SFF 3.0, set 3) m4fastfw__c - Fast Forward (Barcrest) (MPU4) (set 4) + Fast Forward (Barcrest) (MPU4) (SFF 3.0, set 4) m4fastfw__d - Fast Forward (Barcrest) (MPU4) (set 5) + Fast Forward (Barcrest) (MPU4) (SFF 3.0, set 5) m4fastfw__e - Fast Forward (Barcrest) (MPU4) (set 6) + Fast Forward (Barcrest) (MPU4) (SFF 3.0, set 6) m4fastfw__f - Fast Forward (Barcrest) (MPU4) (set 7) + Fast Forward (Barcrest) (MPU4) (FFD 1.0, hack) m4firebl @@ -59037,47 +61437,47 @@ m4firice - Fire & Ice (Bwb) (MPU4) (set 1) + Fire & Ice (BWB) (MPU4) (20p stake / £8 token jackpot) (set 1) m4firice__a - Fire & Ice (Bwb) (MPU4) (set 2) + Fire & Ice (BWB) (MPU4) (20p stake / £8 token jackpot) (set 2) m4firice__b - Fire & Ice (Bwb) (MPU4) (set 3) + Fire & Ice (BWB) (MPU4) (20p stake / £8 token jackpot) (set 3) m4firice__c - Fire & Ice (Bwb) (MPU4) (set 4) + Fire & Ice (BWB) (MPU4) (20p stake / £8 token jackpot) (set 4) m4firice__d - Fire & Ice (Bwb) (MPU4) (set 5) + Fire & Ice (BWB) (MPU4) (20p stake / £8 token jackpot) (set 5) m4firice__e - Fire & Ice (Bwb) (MPU4) (set 6) + Fire & Ice (BWB) (MPU4) (20p stake / £8 token jackpot) (set 6) m4firice__f - Fire & Ice (Bwb) (MPU4) (set 7) + Fire & Ice (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 1) m4firice__g - Fire & Ice (Bwb) (MPU4) (set 8) + Fire & Ice (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 2) m4firice__h - Fire & Ice (Bwb) (MPU4) (set 9) + Fire & Ice (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 3) m4firice__i - Fire & Ice (Bwb) (MPU4) (set 10) + Fire & Ice (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 4) m4firice__j - Fire & Ice (Bwb) (MPU4) (set 11) + Fire & Ice (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 5) m4flash @@ -59085,51 +61485,51 @@ m4flshlt - Flashlite (Bwb) (MPU4) (set 1) + Flashlite (BWB) (MPU4) (FLT 1.0, set 1) m4flshlta - Flashlite (Bwb) (MPU4) (set 2) + Flashlite (BWB) (MPU4) (BFL 0.5) m4flshltb - Flashlite (Bwb) (MPU4) (set 3) + Flashlite (BWB) (MPU4) (FLT 1.0, set 2) m4flshltc - Flashlite (Bwb) (MPU4) (set 4) + Flashlite (BWB) (MPU4) (FLT 1.0, set 3) m4flshltd - Flashlite (Bwb) (MPU4) (set 5) + Flashlite (BWB) (MPU4) (FLT 1.0, set 4) m4flshlte - Flashlite (Bwb) (MPU4) (set 6) + Flashlite (BWB) (MPU4) (FLT 1.0, set 5) m4flshltf - Flashlite (Bwb) (MPU4) (set 7) + Flashlite (BWB) (MPU4) (FLT 1.0, set 6) m4flshltg - Flashlite (Bwb) (MPU4) (set 8) + Flashlite (BWB) (MPU4) (FLT 1.0, set 7) m4fortcb - Fortune Club (Barcrest) (MPU4) (set 1) + Fortune Club (Barcrest) (MPU4) (CFO 1.2, set 1) m4fortcba - Fortune Club (Barcrest) (MPU4) (set 2) + Fortune Club (Barcrest) (MPU4) (CFO 1.2, set 2) m4fortcbb - Fortune Club (Barcrest) (MPU4) (set 3) + Fortune Club (Barcrest) (MPU4) (CFO 1.2, set 3) m4fourmr - Four More (Bwb) (MPU4) + Four More (BWB) (MPU4) m4frcrak @@ -59269,27 +61669,27 @@ m4frtfl - Fruit Full (Barcrest) (MPU4) (set 1) + Fruit Full Club (Barcrest) (MPU4) (FFC 0.3) m4frtfla - Fruit Full (Barcrest) (MPU4) (set 2) + Fruit Full Club (Barcrest) (MPU4) (FFC 1.0) m4frtflc - Fruit Full Club (Barcrest) (MPU4) + Fruit Full Club (Barcrest) (MPU4) (FFC 1.2) m4frtgm - Fruit Game (Barcrest) (MPU4) + Fruit Game (Barcrest) (MPU4) (FRU 2.0) m4frtlnk - Fruit Link Club (Barcrest) (MPU4) (set 1) + Fruit Link Club (Barcrest) (MPU4) (FLC 1.8, set 1) m4frtlnka - Fruit Link Club (Barcrest) (MPU4) (set 2) + Fruit Link Club (Barcrest) (MPU4) (FLC 1.6, set 2) m4frtprs @@ -59321,19 +61721,19 @@ m4gambal - Gamball (Barcrest) (MPU4) (set 1) + Gamball (Barcrest) (MPU4) (GBB 2.0) m4gambal__a - Gamball (Barcrest) (MPU4) (set 2) + Gamball (Barcrest) (MPU4) (GAB 2.0, set 1) m4gambal__b - Gamball (Barcrest) (MPU4) (set 3) + Gamball (Barcrest) (MPU4) (GAB 2.0, set 2) m4gambal__c - Gamball (Barcrest) (MPU4) (set 4) + Gamball (Barcrest) (MPU4) (GAB 2.0, set 3) m4gamblr @@ -59557,11 +61957,11 @@ m4giant - Giant (Barcrest) (DGI, Dutch) (MPU4) + Giant (Barcrest) (Dutch) (MPU4) (DGI 2.1) m4gldgat - Golden Gate (Barcrest) [DGG, Dutch] (MPU4) + Golden Gate (Barcrest) (Dutch) (MPU4) (DGG 2.2) m4gldjok @@ -59573,7 +61973,7 @@ m4gnsmk - Gun Smoke (Barcrest) (Dutch) (MPU4) + Gun Smoke (Barcrest) (Dutch) (MPU4) (DGU 1.6) m4gobana @@ -59613,7 +62013,7 @@ m4goldnn - Golden Years (Nova) (MPU4) + Golden Years (Nova) (German) (MPU4) (TGY 0.1) m4goldxc @@ -59921,19 +62321,19 @@ m4graff - Graffiti (Barcrest) (MPU4) (set 1) + Graffiti (Barcrest) (MPU4) (GRA 2.0X) m4graff__a - Graffiti (Barcrest) (MPU4) (set 2) + Graffiti (Barcrest) (MPU4) (GRA 2.1X) m4graff__b - Graffiti (Barcrest) (MPU4) (set 3) + Graffiti (Barcrest) (MPU4) (GRA 2.1CX) m4graffd - Grafitti (Barcrest) [Dutch] (MPU4) + Grafitti (Barcrest) (Dutch) (MPU4) (DGR 1.3) m4grands @@ -59993,103 +62393,103 @@ m4harle - Harlequin (Bwb) (MPU4) (set 1) + Harlequin (BWB) (MPU4) (set 1) m4harle__a - Harlequin (Bwb) (MPU4) (set 2) + Harlequin (BWB) (MPU4) (set 2) m4harle__b - Harlequin (Bwb) (MPU4) (set 3) + Harlequin (BWB) (MPU4) (set 3) m4harle__c - Harlequin (Bwb) (MPU4) (set 4) + Harlequin (BWB) (MPU4) (set 4) m4harle__d - Harlequin (Bwb) (MPU4) (set 5) + Harlequin (BWB) (MPU4) (set 5) m4harle__e - Harlequin (Bwb) (MPU4) (set 6) + Harlequin (BWB) (MPU4) (set 6) m4harle__f - Harlequin (Bwb) (MPU4) (set 7) + Harlequin (BWB) (MPU4) (set 7) m4harle__g - Harlequin (Bwb) (MPU4) (set 8) + Harlequin (BWB) (MPU4) (set 8) m4harle__h - Harlequin (Bwb) (MPU4) (set 9) + Harlequin (BWB) (MPU4) (set 9) m4harle__i - Harlequin (Bwb) (MPU4) (set 10) + Harlequin (BWB) (MPU4) (set 10) m4harle__j - Harlequin (Bwb) (MPU4) (set 11) + Harlequin (BWB) (MPU4) (set 11) m4harle__k - Harlequin (Bwb) (MPU4) (set 12) + Harlequin (BWB) (MPU4) (set 12) m4harle__l - Harlequin (Bwb) (MPU4) (set 13) + Harlequin (BWB) (MPU4) (set 13) m4harle__m - Harlequin (Bwb) (MPU4) (set 14) + Harlequin (BWB) (MPU4) (set 14) m4harle__n - Harlequin (Bwb) (MPU4) (set 15) + Harlequin (BWB) (MPU4) (set 15) m4harle__o - Harlequin (Bwb) (MPU4) (set 16) + Harlequin (BWB) (MPU4) (set 16) m4harle__p - Harlequin (Bwb) (MPU4) (set 17) + Harlequin (BWB) (MPU4) (set 17) m4harle__q - Harlequin (Bwb) (MPU4) (set 18) + Harlequin (BWB) (MPU4) (set 18) m4harle__r - Harlequin (Bwb) (MPU4) (set 19) + Harlequin (BWB) (MPU4) (set 19) m4harle__s - Harlequin (Bwb) (MPU4) (set 20) + Harlequin (BWB) (MPU4) (set 20) m4harle__t - Harlequin (Bwb) (MPU4) (set 21) + Harlequin (BWB) (MPU4) (set 21) m4harle__u - Harlequin (Bwb) (MPU4) (set 22) + Harlequin (BWB) (MPU4) (set 22) m4harle__v - Harlequin (Bwb) (MPU4) (set 23) + Harlequin (BWB) (MPU4) (set 23) m4harle__w - Harlequin (Bwb) (MPU4) (set 24) + Harlequin (BWB) (MPU4) (set 24) m4harle__x - Harlequin (Bwb) (MPU4) (set 25) + Harlequin (BWB) (MPU4) (set 25) m4haunt @@ -60269,31 +62669,31 @@ m4hilonv - Hi Lo Casino (Nova) (MPU4) + Hi Lo Casino (Nova) (German) (MPU4) (HNC 0.2) m4hirise - High Rise (Barcrest) (MPU4) (set 1) + High Rise (Barcrest) (MPU4) (HII 0.3) m4hirisea - High Rise (Barcrest) (MPU4) (set 2) + High Rise (Barcrest) (MPU4) (HIR 3.1, set 1) m4hiriseb - High Rise (Barcrest) (MPU4) (set 3) + High Rise (Barcrest) (MPU4) (HIR 1.5, bootleg?) m4hirisec - High Rise (Barcrest) (MPU4) (set 4) + High Rise (Barcrest) (MPU4) (HIR 3.1, set 2) m4hirised - High Rise (Barcrest) (MPU4) (set 5) + High Rise (Barcrest) (MPU4) (HIR 3.1, set 3) m4hirisee - High Rise (Barcrest) (MPU4) (set 6) + High Rise (Barcrest) (MPU4) (HIR 3.0) m4hirol @@ -60305,7 +62705,7 @@ m4hiroll - High Roller (Barcrest) (MPU4) + High Roller (Barcrest) (Dutch) (MPU4) (HR 3.0) m4hisprt @@ -60585,15 +62985,15 @@ m4holdon - Hold On (Barcrest) (Dutch) (MPU4) + Hold On (Barcrest) (Dutch) (MPU4) (DHO 2.5) m4holdtm - Hold Timer (Barcrest) (Dutch) (MPU4) (DHT) + Hold Timer (Barcrest) (Dutch) (MPU4) (DHT 1.0) m4holywd - Hollywood (Bwb) (MPU4) + Hollywood (bootleg) (MPU4) (HOL 1.0) m4hotcsh @@ -60633,7 +63033,7 @@ m4hotrod__e - Hot Rod (Barcrest) (MPU4) (ROD 0.4, hack?, set 1) + Hot Rod (Barcrest) (MPU4) (ROD 0.4C, hack?, set 1) m4hotrod__f @@ -60697,7 +63097,7 @@ m4hotrod__u - Hot Rod (Barcrest) (MPU4) (ROD 0.4, hack?, set 2) + Hot Rod (Barcrest) (MPU4) (ROD 0.4C, hack?, set 2) m4hotrod__v @@ -60705,11 +63105,11 @@ m4hpyjok - Happy Joker (Barcrest) (Dutch) (MPU4) (DHJ1.2) + Happy Joker (Barcrest) (Dutch) (MPU4) (DHJ 1.2) m4hslo - unknown MPU4 'HOT 3.0' (MPU4?) + Hot Slot (bootleg) (MPU4) (HOT 3.0) m4hstr @@ -60745,39 +63145,39 @@ m4hvhel - Heaven & Hell (Bwb) (MPU4) (set 1) + Heaven & Hell (BWB) (MPU4) (20p stake / £8 token jackpot, set 1) m4hvhel__a - Heaven & Hell (Bwb) (MPU4) (set 2) + Heaven & Hell (BWB) (MPU4) (20p stake / £8 token jackpot, set 2) m4hvhel__b - Heaven & Hell (Bwb) (MPU4) (set 3) + Heaven & Hell (BWB) (MPU4) (20p stake / £8 token jackpot, set 3) m4hvhel__c - Heaven & Hell (Bwb) (MPU4) (set 4) + Heaven & Hell (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) m4hvhel__d - Heaven & Hell (Bwb) (MPU4) (set 5) + Heaven & Hell (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 1) m4hvhel__e - Heaven & Hell (Bwb) (MPU4) (set 6) + Heaven & Hell (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 2) m4hvhel__f - Heaven & Hell (Bwb) (MPU4) (set 7) + Heaven & Hell (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 3) m4hvhel__g - Heaven & Hell (Bwb) (MPU4) (set 8) + Heaven & Hell (BWB) (MPU4) (5/10p stake / £5 jackpot, set 1) m4hvhel__h - Heaven & Hell (Bwb) (MPU4) (set 9) + Heaven & Hell (BWB) (MPU4) (5/10p stake / £5 jackpot, set 2) m4hypclb @@ -60795,125 +63195,33 @@ m4hypclb__c Hyper Viper Club (Barcrest) (MPU4) (HPC 0.5 D) - - m4hypvip - Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, set 1) - - - m4hypvip__a - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, C) - - - m4hypvip__b - Hyper Viper (Barcrest) (MPU4) (HVC 1.0 C) - - - m4hypvip__c - Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 D) - - - m4hypvip__d - Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 K) - - - m4hypvip__e - Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 C) - - - m4hypvip__f - Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 Y) - - - m4hypvip__g - Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 1) - - - m4hypvip__h - Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 2) - - - m4hypvip__i - Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 6) - - - m4hypvip__j - Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 7) - - - m4hypvip__k - Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, hack, set 1) - - - m4hypvip__l - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 1) - - - m4hypvip__m - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, C, bad?) - - - m4hypvip__n - Hyper Viper (Barcrest) (MPU4) (H6Y 0.2 Y) - - - m4hypvip__o - Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 3) - - - m4hypvip__p - Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 4) - - - m4hypvip__q - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, hack, set 1) - - - m4hypvip__r - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, hack, set 2) - - - m4hypvip__s - Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, hack, set 2) - - - m4hypvip__t - Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 5) - - - m4hypvip__u - Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 8) - - - m4hypvip__v - Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, hack, set 3) - m4indycr - Indy Cars (Bwb) (MPU4) (set 1) + Indy Cars (BWB) (MPU4) (20/25/30p stake / £5/£15 jackpot) (set 1) m4indycr__a - Indy Cars (Bwb) (MPU4) (set 2) + Indy Cars (BWB) (MPU4) (20/25/30p stake / £5/£15 jackpot) (set 2) m4indycr__b - Indy Cars (Bwb) (MPU4) (set 3) + Indy Cars (BWB) (MPU4) (20/25/30p stake / £5/£15 jackpot) (set 3) m4indycr__c - Indy Cars (Bwb) (MPU4) (set 4) + Indy Cars (BWB) (MPU4) (20/25/30p stake / £5/£15 jackpot) (set 4) m4indycr__d - Indy Cars (Bwb) (MPU4) (set 5) + Indy Cars (BWB) (MPU4) (20/25/30p stake / £5/£15 jackpot) (set 5) m4indycr__e - Indy Cars (Bwb) (MPU4) (set 6) + Indy Cars (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 1) m4indycr__f - Indy Cars (Bwb) (MPU4) (set 7) + Indy Cars (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 2) m4intcep @@ -60929,63 +63237,63 @@ m4jakjok - Jackpot Jokers (Bwb) (MPU4) (set 1) + Jackpot Jokers (BWB) (MPU4) (ver. 6) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) m4jakjok__a - Jackpot Jokers (Bwb) (MPU4) (set 2) + Jackpot Jokers (BWB) (MPU4) (ver. 3) (20/25/30p stake / £5/£15 jackpot) m4jakjok__b - Jackpot Jokers (Bwb) (MPU4) (set 3) + Jackpot Jokers (BWB) (MPU4) (ver. 6) (20/25/30p stake / £5/£15 jackpot) m4jakjok__c - Jackpot Jokers (Bwb) (MPU4) (set 4) + Jackpot Jokers (BWB) (MPU4) (ver. 7) (5/10p stake / £5 jackpot) m4jakjoka - Jackpot Jokers (alt) (Bwb) (MPU4) + Jackpot Jokers (BWB) (MPU4) (ver. 2) (20/25/30p stake / £5/£15 jackpot) m4jflash - Jumping Jack Flash (Bwb) (MPU4) (set 1) + Jumping Jack Flash (BWB) (MPU4) (set 1) m4jflash__a - Jumping Jack Flash (Bwb) (MPU4) (set 2) + Jumping Jack Flash (BWB) (MPU4) (set 2) m4jflash__b - Jumping Jack Flash (Bwb) (MPU4) (set 3) + Jumping Jack Flash (BWB) (MPU4) (set 3) m4jflash__c - Jumping Jack Flash (Bwb) (MPU4) (set 4) + Jumping Jack Flash (BWB) (MPU4) (set 4) m4jflash__d - Jumping Jack Flash (Bwb) (MPU4) (set 5) + Jumping Jack Flash (BWB) (MPU4) (set 5) m4jflash__e - Jumping Jack Flash (Bwb) (MPU4) (set 6) + Jumping Jack Flash (BWB) (MPU4) (set 6) m4jflash__f - Jumping Jack Flash (Bwb) (MPU4) (set 7) + Jumping Jack Flash (BWB) (MPU4) (set 7) m4jflash__g - Jumping Jack Flash (Bwb) (MPU4) (set 8) + Jumping Jack Flash (BWB) (MPU4) (set 8) m4jflash__h - Jumping Jack Flash (Bwb) (MPU4) (set 9) + Jumping Jack Flash (BWB) (MPU4) (set 9) m4jflash__i - Jumping Jack Flash (Bwb) (MPU4) (set 10) + Jumping Jack Flash (BWB) (MPU4) (set 10) m4jiggin @@ -61021,11 +63329,11 @@ m4jok300 - Jokers 300 (Barcrest) (German?) (MPU4) + Jokers Millenium 300 (Barcrest) (German) (MPU4) (DJO 0.1, set 1) - m4jokmil - Jokers Millennium (Barcrest) (German) (MPU4) + m4jok300a + Jokers Millenium 300 (Barcrest) (German) (MPU4) (DJO 0.1, set 2) m4jolgem @@ -61241,27 +63549,27 @@ m4joljok - Jolly Joker (Barcrest) (MPU4) + Jolly Joker (Barcrest) (MPU4) (JOJ 1.6) m4joljokd - Jolly Joker (Barcrest) [Dutch] (MPU4) (DJJ) + Jolly Joker (Barcrest) (Dutch) (MPU4) (DJJ 1.5) m4joljokh - Jolly Joker (Barcrest) [Hungarian] (MPU4) (HJJ) + Jolly Joker (Barcrest) (Hungarian) (MPU4) (HJJ 1.4) m4joltav - Jolly Taverner (Barcrest) (MPU4) (set 1) + Jolly Taverner (Barcrest) (MPU4) (TAV 1.3) m4joltava - Jolly Taverner (Barcrest) (MPU4) (set 2) + Jolly Taverner (Barcrest) (MPU4) (JT__ 2.0, set 1) m4joltavb - Jolly Taverner (Barcrest) (MPU4) (set 3) + Jolly Taverner (Barcrest) (MPU4) (JT__ 2.0, set 2) m4jp777 @@ -61721,15 +64029,11 @@ m4jpjmp - Jackpot Jump (Barcrest) (MPU4) (set 1) + Jackpot Jump (Barcrest) (MPU4) (VJC 2.0) m4jpjmpa - Jackpot Jump (Barcrest) (MPU4) (set 2) - - - m4jpmcla - Old Timer (Barcrest) (Dutch, alt 'JPM Classic' sound roms) (DOT1.1) + Jackpot Jump (Barcrest) (MPU4) (VJC 1.3) m4jungj @@ -62133,59 +64437,59 @@ m4lazy - Lazy Bones (Bwb) (MPU4) (set 1) + Lazy Bones (BWB) (MPU4) (LBD 1.0) m4lazya - Lazy Bones (Bwb) (MPU4) (set 2) + Lazy Bones (BWB) (MPU4) (LBD 1.2, set 1) m4lazyb - Lazy Bones (Bwb) (MPU4) (set 3) + Lazy Bones (BWB) (MPU4) (LBD 1.2, set 2) m4libty - Liberty (Barcrest) (Dutch) (MPU4) + Liberty (Barcrest) (Dutch) (MPU4) (DLI 1.0) m4lineup - Line Up (Bwb - Barcrest) (MPU4) (set 1) + Line Up (BWB) (MPU4) (set 1) m4lineupa - Line Up (Bwb - Barcrest) (MPU4) (set 2) + Line Up (BWB) (MPU4) (set 2) m4ln7 - Lucky No7 (Bwb) (MPU4) (set 1) + Lucky Number 7 (BWB) (MPU4) (set 1) m4ln7__a - Lucky No7 (Bwb) (MPU4) (set 2) + Lucky Number 7 (BWB) (MPU4) (set 2) m4ln7__b - Lucky No7 (Bwb) (MPU4) (set 3) + Lucky Number 7 (BWB) (MPU4) (set 3) m4ln7__c - Lucky No7 (Bwb) (MPU4) (set 4) + Lucky Number 7 (BWB) (MPU4) (set 4) m4ln7__d - Lucky No7 (Bwb) (MPU4) (set 5) + Lucky Number 7 (BWB) (MPU4) (set 5) m4loadmn - Loads A Money (Barcrest) (MPU4) (set 1) + Loads A Money (Barcrest) (MPU4) (LA 1.0) m4loadmna - Loads A Money (Barcrest) (MPU4) (set 2) + Loads A Money (Barcrest) (MPU4) (LA 1.1, set 1) m4loadmnb - Loads A Money (Barcrest) (MPU4) (set 3) + Loads A Money (Barcrest) (MPU4) (LA 1.1, set 2) m4looplt @@ -62261,11 +64565,11 @@ m4luckdv - Lucky Devil (Barcrest) [Czech] (MPU4) + Lucky Devil (Barcrest) (Czech) (MPU4) (CLD 3.0) m4luckdvd - Lucky Devil (Barcrest) [Dutch] (MPU4) (DLD) + Lucky Devil (Barcrest) (Dutch) (MPU4) (DLD 1.3) m4lucklv @@ -62637,11 +64941,11 @@ m4luckst__av - Lucky Strike (Barcrest) (MPU4) (LSS 1.0 K, set 1) + Lucky Strike (Barcrest) (MPU4) (LSS 1.0 K, hack) m4luckst__aw - Lucky Strike (Barcrest) (MPU4) (LSS 1.0 K, set 2) + Lucky Strike (Barcrest) (MPU4) (LSS 1.0 K) m4luckst__b @@ -62741,31 +65045,31 @@ m4luckwb - Lucky Wild Boar (Barcrest) (MPU4) (set 1) + Lucky Wild Boar (MPU4) (set 1) m4luckwba - Lucky Wild Boar (Barcrest) (MPU4) (set 2) + Lucky Wild Boar (MPU4) (set 2) m4luckwbb - Lucky Wild Boar (Barcrest) (MPU4) (set 3) + Lucky Wild Boar (MPU4) (set 3) m4luckwbc - Lucky Wild Boar (Barcrest) (MPU4) (set 4) + Lucky Wild Boar (MPU4) (set 4) m4luckwbd - Lucky Wild Boar (Barcrest) (MPU4) (set 5) + Lucky Wild Boar (MPU4) (set 5, unprotected) m4luckwbe - Lucky Wild Boar (Barcrest) (MPU4) (set 6) + Lucky Wild Boar (MPU4) (set 6) m4luckwbf - Lucky Wild Boar (Barcrest) (MPU4) (set 7) + Lucky Wild Boar (MPU4) (set 7) m4luxor @@ -63017,147 +65321,147 @@ m4madmnc - Mad Money Classic (Bwb) (MPU4) (set 1) + Mad Money Classic (BWB) (MPU4) (set 1) m4madmnc__a - Mad Money Classic (Bwb) (MPU4) (set 2) + Mad Money Classic (BWB) (MPU4) (set 2) m4madmnc__b - Mad Money Classic (Bwb) (MPU4) (set 3) + Mad Money Classic (BWB) (MPU4) (set 3) m4madmnc__c - Mad Money Classic (Bwb) (MPU4) (set 4) + Mad Money Classic (BWB) (MPU4) (set 4) m4madmnc__d - Mad Money Classic (Bwb) (MPU4) (set 5) + Mad Money Classic (BWB) (MPU4) (set 5) m4madmnc__e - Mad Money Classic (Bwb) (MPU4) (set 6) + Mad Money Classic (BWB) (MPU4) (set 6) m4madmnc__f - Mad Money Classic (Bwb) (MPU4) (set 7) + Mad Money Classic (BWB) (MPU4) (set 7) m4madmnc__g - Mad Money Classic (Bwb) (MPU4) (set 8) + Mad Money Classic (BWB) (MPU4) (set 8) m4madmnc__h - Mad Money Classic (Bwb) (MPU4) (set 9) + Mad Money Classic (BWB) (MPU4) (set 9) m4madmnc__i - Mad Money Classic (Bwb) (MPU4) (set 10) + Mad Money Classic (BWB) (MPU4) (set 10) m4madmnc__j - Mad Money Classic (Bwb) (MPU4) (set 11) + Mad Money Classic (BWB) (MPU4) (set 11) m4madmnc__k - Mad Money Classic (Bwb) (MPU4) (set 12) + Mad Money Classic (BWB) (MPU4) (set 12) m4madmnc__l - Mad Money Classic (Bwb) (MPU4) (set 13) + Mad Money Classic (BWB) (MPU4) (set 13) m4madmnc__m - Mad Money Classic (Bwb) (MPU4) (set 14) + Mad Money Classic (BWB) (MPU4) (set 14) m4madmnc__n - Mad Money Classic (Bwb) (MPU4) (set 15) + Mad Money Classic (BWB) (MPU4) (set 15) m4madmnc__o - Mad Money Classic (Bwb) (MPU4) (set 16) + Mad Money Classic (BWB) (MPU4) (set 16) m4madmnc__p - Mad Money Classic (Bwb) (MPU4) (set 17) + Mad Money Classic (BWB) (MPU4) (set 17) m4madmnc__q - Mad Money Classic (Bwb) (MPU4) (set 18) + Mad Money Classic (BWB) (MPU4) (set 18) m4madmnc__r - Mad Money Classic (Bwb) (MPU4) (set 19) + Mad Money Classic (BWB) (MPU4) (set 19) m4madmnc__s - Mad Money Classic (Bwb) (MPU4) (set 20) + Mad Money Classic (BWB) (MPU4) (set 20) m4madmnc__t - Mad Money Classic (Bwb) (MPU4) (set 21) + Mad Money Classic (BWB) (MPU4) (set 21) m4madmnc__u - Mad Money Classic (Bwb) (MPU4) (set 22) + Mad Money Classic (BWB) (MPU4) (set 22) m4madmnc__v - Mad Money Classic (Bwb) (MPU4) (set 23) + Mad Money Classic (BWB) (MPU4) (set 23) m4madmnc__w - Mad Money Classic (Bwb) (MPU4) (set 24) + Mad Money Classic (BWB) (MPU4) (set 24) m4madmon - Mad Money (Bwb) (MPU4) (set 1) + Mad Money (BWB) (MPU4) (set 1) m4madmon__a - Mad Money (Bwb) (MPU4) (set 2) + Mad Money (BWB) (MPU4) (set 2) m4madmon__b - Mad Money (Bwb) (MPU4) (set 3) + Mad Money (BWB) (MPU4) (set 3) m4madmon__c - Mad Money (Bwb) (MPU4) (set 4) + Mad Money (BWB) (MPU4) (set 4) m4madmon__d - Mad Money (Bwb) (MPU4) (set 5) + Mad Money (BWB) (MPU4) (set 5) m4madmon__e - Mad Money (Bwb) (MPU4) (set 6) + Mad Money (BWB) (MPU4) (set 6) m4madmon__f - Mad Money (Bwb) (MPU4) (set 7) + Mad Money (BWB) (MPU4) (set 7) m4madmon__g - Mad Money (Bwb) (MPU4) (set 8) + Mad Money (BWB) (MPU4) (set 8) m4madmon__h - Mad Money (Bwb) (MPU4) (set 9) + Mad Money (BWB) (MPU4) (set 9) m4madmon__i - Mad Money (Bwb) (MPU4) (set 10) + Mad Money (BWB) (MPU4) (set 10) m4madmon__j - Mad Money (Bwb) (MPU4) (set 11) + Mad Money (BWB) (MPU4) (set 11) m4madmon__k - Mad Money (Bwb) (MPU4) (set 12) + Mad Money (BWB) (MPU4) (set 12) m4mag7s @@ -63417,15 +65721,15 @@ m4maglin - Magic Liner (Barcrest) (MPU4) (DMA2.1) + Magic Liner (Barcrest) (Dutch) (MPU4) (DMA 2.1) m4magrep - Magic Replay (Barcrest) (Dutch) (MPU4) + Magic Replay (Barcrest) (Dutch) (MPU4) (DMR 1.3) m4magtbo - Magic Turbo (Barcrest) (MPU4) + Star Play / Magic Turbo (Barcrest) (MPU4) (XST 0.4) m4makmnt @@ -63653,7 +65957,7 @@ m4matdr - Matador (unknown) (MPU4?) + Matador (Eurogames) (MPU4) m4maxmze @@ -63957,31 +66261,31 @@ m4meglnk - Megalink (Barcrest) (Dutch) (MPU4) + Megalink (Barcrest) (Dutch) (MPU4) (DML 2.0) m4mgpn - Monaco Grand Prix (Nova) (MPU4) + Monaco Grand Prix (Nova) (German) (MPU4) (MGP 1.4) m4milclb - Millionaire's Club (Barcrest) (MPU4) (set 1) + Millionaire's Club (Barcrest) (MPU4) (MI2 1.0, set 1) m4milclba - Millionaire's Club (Barcrest) (MPU4) (set 2) + Millionaire's Club (Barcrest) (MPU4) (MI2 1.0, set 2) m4milclbb - Millionaire's Club (Barcrest) (MPU4) (set 3) + Millionaire's Club (Barcrest) (MPU4) (MI2 1.0, set 3) m4milclbc - Millionaire's Club (Barcrest) (MPU4) (set 4) + Millionaire's Club (Barcrest) (MPU4) (MIL 5.0, set 1) m4milclbd - Millionaire's Club (Barcrest) (MPU4) (set 5) + Millionaire's Club (Barcrest) (MPU4) (MIL 5.0, set 2) m4milrou @@ -64029,35 +66333,35 @@ m4mmm - Money Mummy Money (Bwb) (MPU4) (set 1) + Money Mummy Money (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 1) m4mmm__a - Money Mummy Money (Bwb) (MPU4) (set 2) + Money Mummy Money (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 2) m4mmm__b - Money Mummy Money (Bwb) (MPU4) (set 3) + Money Mummy Money (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 3) m4mmm__c - Money Mummy Money (Bwb) (MPU4) (set 4) + Money Mummy Money (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 4) m4mmm__d - Money Mummy Money (Bwb) (MPU4) (set 5) + Money Mummy Money (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 5) m4mmm__e - Money Mummy Money (Bwb) (MPU4) (set 6) + Money Mummy Money (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 6) m4mmm__f - Money Mummy Money (Bwb) (MPU4) (set 7) + Money Mummy Money (BWB) (MPU4) (20/25/30p stake / £10/£15 jackpot) (set 7) m4moneym - Money Maker (Barcrest) (MPU4) + Money Maker (Barcrest) (MPU4) (MMK 1.6) m4monspn @@ -64127,49 +66431,45 @@ m4monte__m Monte Carlo (NMN 0.1) (Barcrest) (MPU4) - - m4montez - Monte Carlo (MSS 1.6 C) (Barcrest) (MPU4) - m4monteza - Monte Carlo (MX052.0 K) (Barcrest) (MPU4) + Monte Carlo (MX052.0 K) (BWB) (MPU4) m4montezb - Monte Carlo (MX102.0 K) (Barcrest) (MPU4) + Monte Carlo (MX102.0 K) (BWB) (MPU4) m4montezc - Monte Carlo (MC 2.0 C) (Barcrest) (MPU4) + Monte Carlo (MC 2.0 C) (BWB) (MPU4) m4montezd - Monte Carlo (MC 2.0 K) (Barcrest) (MPU4) + Monte Carlo (MC 2.0 K) (BWB) (MPU4) m4monteze - Monte Carlo (MC 2.0 YD) (Barcrest) (MPU4) + Monte Carlo (MC 2.0 YD) (BWB) (MPU4) m4montezf - Monte Carlo (MC_ 3.0 C) (Barcrest) (MPU4) + Monte Carlo (MC_ 3.0 C) (BWB) (MPU4) m4montezg - Monte Carlo (MC_ 3.0 YD) (Barcrest) (MPU4) + Monte Carlo (MC_ 3.0 YD) (BWB) (MPU4) m4montezh - Monte Carlo (MC_ 3.0 K) (Barcrest) (MPU4) + Monte Carlo (MC_ 3.0 K) (BWB) (MPU4) m4montezi - Monte Carlo (MX052.0 C) (Barcrest) (MPU4) + Monte Carlo (MX052.0 C) (BWB) (MPU4) m4montezj - Monte Carlo (MX102.0 C) (Barcrest) (MPU4) + Monte Carlo (MX102.0 C) (BWB) (MPU4) m4montrl @@ -64197,7 +66497,7 @@ m4multwy - Multiway (Barcrest) (Dutch) (MPU4) + Multiway (Barcrest) (Dutch) (MPU4) (DMU 1.7) m4mystiq @@ -64277,27 +66577,27 @@ m4nick - Nickelodeon (Barcrest) (MPU4) (set 1) + Nickelodeon (Barcrest) (MPU4) (NIL 4.1, set 1) m4nicka - Nickelodeon (Barcrest) (MPU4) (set 2) + Nickelodeon (Barcrest) (MPU4) (NIL 4.1, set 2) m4nickb - Nickelodeon (Barcrest) (MPU4) (set 3) + Nickelodeon (Barcrest) (MPU4) (NIL 4.1, set 3) m4nickc - Nickelodeon (Barcrest) (MPU4) (set 4) + Nickelodeon (Barcrest) (MPU4) (NIL 4.1, set 4) m4nickd - Nickelodeon (Barcrest) (MPU4) (set 5) + Nickelodeon (Barcrest) (MPU4) (NIL 4.1, set 5) m4nicke - Nickelodeon (Barcrest) (MPU4) (set 6) + Nickelodeon (Barcrest) (bootleg) (MPU4) (NIL 2.5) m4nifty @@ -64313,259 +66613,275 @@ m4nile - Nile Jewels (Barcrest) (German) (MPU4) (GJN0.8) + Nile Jewels (Barcrest) (German) (MPU4) (GJN 0.8) m4nnww - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN5 0.2 / NN4 0.2) + + + m4nnww2 + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NN3 0.1 X) + + + m4nnww2__a + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NN3 0.1 XAD) + + + m4nnww2__b + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NN3 0.1 BX) - m4nnww__0 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 BXD) + m4nnww2__c + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NN3 0.1 BXD) - m4nnww__1 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 XD) + m4nnww2__d + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NN3 0.1 XD) - m4nnww__2 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 KXD) + m4nnww2__e + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NN3 0.1 KXD) - m4nnww__3 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 YXD) + m4nnww2__f + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NN3 0.1 YXD) - m4nnww__4 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 KX) + m4nnww2__g + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NN3 0.1 KX) - m4nnww__5 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 RX) + m4nnww2__h + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NN3 0.1 RX) - m4nnww__6 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 RD) + m4nnww2__hx1 + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NNU 3.4, hack, set 1) - m4nnww__7 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 X) + m4nnww2__hx2 + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NNU 3.4, hack, set 2) - m4nnww__8 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 YX) + m4nnww2__hx3 + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NNU 5.0, hack, set 1) + + + m4nnww2__hx4 + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NNU 5.0, hack, set 2) + + + m4nnww2__hx5 + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NNU 5.0, hack, set 3) + + + m4nnww2__i + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NN3 0.1 RD) + + + m4nnww2__j + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NN3 0.1 YX) + + + m4nnww2__k + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NNU 5.2) + + + m4nnww2__l + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NNU 5.2 X) + + + m4nnww2__m + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NNU 5.2 BX) + + + m4nnww2__n + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NNU 5.2 CX) + + + m4nnww2__o + Nudge Nudge Wink Wink (Barcrest) (MPU4, Mod2 type) (NNU 4.0 X) m4nnww__9 - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 AD) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN4 0.2 AD) m4nnww__a - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CF3 0.1 / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CF3 0.1 / NN4 0.1) m4nnww__aa - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 B) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN4 0.2 B) m4nnww__ab - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 BD) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN4 0.2 BD) m4nnww__ac - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 D) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN4 0.2 D) m4nnww__ad - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 KD) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN4 0.2 KD) m4nnww__ae - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 YD) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN4 0.2 YD) m4nnww__af - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 K) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN4 0.2 K) m4nnww__ag - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN4 0.2) m4nnww__ah - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 Y) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN4 0.2 Y) m4nnww__ai - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 AD / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN5 0.2 AD / NN4 0.2) m4nnww__aj - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 B / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN5 0.2 B / NN4 0.2) m4nnww__ak - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 D / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN5 0.2 D / NN4 0.2) m4nnww__al - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 KD / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN5 0.2 KD / NN4 0.2) m4nnww__am - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 RD / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN5 0.2 RD / NN4 0.2) m4nnww__an - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 YD / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN5 0.2 YD / NN4 0.2) m4nnww__ao - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 K / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN5 0.2 K / NN4 0.2) m4nnww__ap - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 R / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN5 0.2 R / NN4 0.2) m4nnww__aq - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 BD / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN5 0.2 BD / NN4 0.2) m4nnww__ar - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 Y / NN4 0.2) - - - m4nnww__as - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 4.0 X) - - - m4nnww__at - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2) - - - m4nnww__au - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 X) - - - m4nnww__av - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 BX) - - - m4nnww__aw - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 CX) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (NN5 0.2 Y / NN4 0.2) m4nnww__ax - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CH3 0.1 B / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.1 B / NN4 0.1) m4nnww__ay - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 3.4, hack, set 1) - - - m4nnww__az - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 3.4, hack, set 2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CH3 0.1) m4nnww__b - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 AD / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 AD / NN4 0.1) m4nnww__c - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 B / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 B / NN4 0.1) m4nnww__d - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 BD / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 BD / NN4 0.1) m4nnww__e - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 C / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 C / NN4 0.1) m4nnww__f - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 D / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 D / NN4 0.1) m4nnww__g - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 KD / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 KD / NN4 0.1) m4nnww__h - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 RD / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 RD / NN4 0.1) m4nnww__i - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 YD / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 YD / NN4 0.1) m4nnww__j - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 AK / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 AK / NN4 0.1) m4nnww__k - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 R / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 R / NN4 0.1) m4nnww__l - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 / NN4 0.1) m4nnww__m - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 Y / NN4 0.1) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CN1 0.1 Y / NN4 0.1) m4nnww__n - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 AD / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNU 0.2 AD / NN4 0.2) m4nnww__o - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 B / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNU 0.2 B / NN4 0.2) m4nnww__p - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 BD / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNU 0.2 BD / NN4 0.2) m4nnww__q - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 D / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNU 0.2 D / NN4 0.2) m4nnww__r - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 KD / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNU 0.2 KD / NN4 0.2) m4nnww__s - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 RD / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNU 0.2 RD / NN4 0.2) m4nnww__t - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 YD / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNU 0.2 YD / NN4 0.2) m4nnww__u - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 K / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNU 0.2 K / NN4 0.2) m4nnww__v - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 R / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNU 0.2 R / NN4 0.2) m4nnww__w - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 / NN4 0.2) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNU 0.2 / NN4 0.2) m4nnww__x - Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 Y / NN4 0.2) - - - m4nnww__y - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 XAD) - - - m4nnww__z - Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 BX) + Nudge Nudge Wink Wink Classic (Barcrest) (MPU4) (CNU 0.2 Y / NN4 0.2) m4nnwwc @@ -64737,15 +67053,15 @@ m4nspot - Night Spot Club (Barcrest) (MPU4) (set 1) + Night Spot Club (Barcrest) (MPU4) (NS2 2.2, set 1) m4nspota - Night Spot Club (Barcrest) (MPU4) (set 2) + Night Spot Club (Barcrest) (MPU4) (NS2 2.2, set 2) m4nspotb - Night Spot Club (Barcrest) (MPU4) (set 3) + Night Spot Club (Barcrest) (MPU4) (NIT 1.1) m4nud2p @@ -64753,23 +67069,23 @@ m4nudbnk - Nudge Banker (Barcrest) (MPU4) (set 1) + Nudge Banker (Barcrest) (MPU4) (SBN 2.0X) m4nudbnk__a - Nudge Banker (Barcrest) (MPU4) (set 2) + Nudge Banker (Barcrest) (MPU4) (NBN 1.0CX) m4nudbnk__b - Nudge Banker (Barcrest) (MPU4) (set 3) + Nudge Banker (Barcrest) (MPU4) (NBN 1.0X) m4nudbnk__c - Nudge Banker (Barcrest) (MPU4) (set 4) + Nudge Banker (Barcrest) (MPU4) (SBN 1.1) m4nudbnk__d - Nudge Banker (Barcrest) (MPU4) (set 5) + Nudge Banker (Barcrest) (MPU4) (SBN 1.1X) m4nudbon @@ -64825,23 +67141,23 @@ m4nudshf - Nudge Shuffle (Barcrest) (MPU4) (set 1) + Nudge Shuffle (Barcrest) (MPU4) (NUS 3.1) (set 1) m4nudshfa - Nudge Shuffle (Barcrest) (MPU4) (set 2) + Nudge Shuffle (Barcrest) (MPU4) (NUS 3.0) m4nudshfb - Nudge Shuffle (Barcrest) (MPU4) (set 3) + Nudge Shuffle (Barcrest) (MPU4) (NUS 3.1) (set 2) m4nudshfc - Nudge Shuffle (Barcrest) (MPU4) (set 4) + Nudge Shuffle (Barcrest) (MPU4) (NUS 3.1) (set 3) m4nudup - Nudge Up (Barcrest) (Dutch) (MPU4) + Nudge Up (Barcrest) (Dutch) (MPU4) (DNU 2.5) m4nudwin @@ -64853,7 +67169,7 @@ m4num1 - Number One (Barcrest) (Dutch) (MPU4) + Number One (Barcrest) (Dutch) (MPU4) (DNO 1.7) m4oadrac @@ -64893,11 +67209,11 @@ m4octo - Octopus (Nova) (MPU4) + Octopus (Nova) (German) (MPU4) (OCT 0.3) m4oldtmr - Old Timer (Barcrest) (Dutch) (MPU4) (DOT1.1) + Old Timer (Barcrest) (Dutch) (MPU4) (DOT 1.1) m4olygn @@ -64909,47 +67225,47 @@ m4omega - Omega (Barcrest) (Dutch) (MPU4) + Omega (Barcrest) (Dutch) (MPU4) (DOM 2.3) m4ordmnd - Oriental Diamonds (Barcrest) (German) (MPU4) + Oriental Diamonds (Barcrest) (German) (MPU4) (RAB 0.1) m4orland - Orlando Magic (Bwb) (MPU4) (set 1) + Orlando Magic (BWB) (MPU4) (set 1) m4orland__a - Orlando Magic (Bwb) (MPU4) (set 2) + Orlando Magic (BWB) (MPU4) (set 2) m4orland__b - Orlando Magic (Bwb) (MPU4) (set 3) + Orlando Magic (BWB) (MPU4) (set 3) m4orland__c - Orlando Magic (Bwb) (MPU4) (set 4) + Orlando Magic (BWB) (MPU4) (set 4) m4orland__d - Orlando Magic (Bwb) (MPU4) (set 5) + Orlando Magic (BWB) (MPU4) (set 5) m4orland__e - Orlando Magic (Bwb) (MPU4) (set 6) + Orlando Magic (BWB) (MPU4) (set 6) m4orland__f - Orlando Magic (Bwb) (MPU4) (set 7) + Orlando Magic (BWB) (MPU4) (set 7) m4orland__g - Orlando Magic (Bwb) (MPU4) (set 8) + Orlando Magic (BWB) (MPU4) (set 8) m4orland__h - Orlando Magic (Bwb) (MPU4) (set 9) + Orlando Magic (BWB) (MPU4) (set 9) m4overmn @@ -65117,7 +67433,7 @@ m4pick - Pick A Fruit (JPM) (MPU4) + Pick A Fruit (Dutch) (MPU4) m4pitfal @@ -65477,23 +67793,23 @@ m4potblk__at - Pot Black (Barcrest) (MPU4) (PO 1.2) + Pot Black (BWB) (MPU4) (PO 1.2) m4potblk__au - Pot Black (Barcrest) (MPU4) (PO 1.1) + Pot Black (BWB) (MPU4) (PO 1.1) m4potblk__av - Pot Black (Barcrest) (MPU4) (PO 1.2 D) + Pot Black (BWB) (MPU4) (PO 1.2 D) m4potblk__aw - Pot Black (Barcrest) (MPU4) (PO 1.1 D) + Pot Black (BWB) (MPU4) (PO 1.1 D) m4potblk__ax - Pot Black (Barcrest) (MPU4) (PO 1.1 K) + Pot Black (BWB) (MPU4) (PO 1.1 K) m4potblk__b @@ -65605,7 +67921,7 @@ m4prem - Premier (Barcrest) (MPU4) (DPM) + Premier (Barcrest) (Dutch) (MPU4) (DPM 1.4) m4przdty @@ -65825,31 +68141,83 @@ m4przmc - Prize Monte Carlo (Barcrest) (MPU4) (set 1) + Prize Monte Carlo (MSS 1.6 B) (Barcrest) (MPU4) m4przmc__a - Prize Monte Carlo (Barcrest) (MPU4) (set 2) + Prize Monte Carlo (MSS 1.6 AD) (Barcrest) (MPU4) m4przmc__b - Prize Monte Carlo (Barcrest) (MPU4) (set 3) + Prize Monte Carlo (MSS 1.6 D) (Barcrest) (MPU4) m4przmc__c - Prize Monte Carlo (Barcrest) (MPU4) (set 4) + Prize Monte Carlo (MSS 1.6 YD) (Barcrest) (MPU4) m4przmc__d - Prize Monte Carlo (Barcrest) (MPU4) (set 5) + Prize Monte Carlo (MSS 1.6 K) (Barcrest) (MPU4) m4przmc__e - Prize Monte Carlo (Barcrest) (MPU4) (set 6) + Prize Monte Carlo (MSS 1.6) (Barcrest) (MPU4) m4przmc__f - Prize Monte Carlo (Barcrest) (MPU4) (set 7) + Prize Monte Carlo (MSS 1.6 Y) (Barcrest) (MPU4) + + + m4przmc__g + Prize Monte Carlo (MSS 1.6 C) (Barcrest) (MPU4) + + + m4przmc__h + Prize Monte Carlo (MC 53.0 K) (Barcrest) (MPU4) + + + m4przmc__i + Prize Monte Carlo (MC 53.0) (Barcrest) (MPU4) + + + m4przmc__j + Prize Monte Carlo (MC 53.0 YD) (Barcrest) (MPU4) + + + m4przmc__k + Prize Monte Carlo (MC 53.0 D) (Barcrest) (MPU4) + + + m4przmc__l + Prize Monte Carlo (MC103.0 K) (Barcrest) (MPU4) + + + m4przmc__m + Prize Monte Carlo (MC103.0) (Barcrest) (MPU4) + + + m4przmc__n + Prize Monte Carlo (MC103.0 YD) (Barcrest) (MPU4) + + + m4przmc__o + Prize Monte Carlo (MC103.0 D) (Barcrest) (MPU4) + + + m4przmc__p + Prize Monte Carlo (MT054.0 K) (Barcrest) (MPU4) + + + m4przmc__q + Prize Monte Carlo (MT054.0 C) (Barcrest) (MPU4) + + + m4przmc__r + Prize Monte Carlo (MT104.0 K) (Barcrest) (MPU4) + + + m4przmc__s + Prize Monte Carlo (MT104.0 C) (Barcrest) (MPU4) m4przmns @@ -65915,14 +68283,6 @@ m4przmon Prize Money (Barcrest) (MPU4) (FP8 0.1) - - m4przmon__0 - Prize Money (Barcrest) (MPU4) (MT054.0 C) - - - m4przmon__1 - Prize Money (Barcrest) (MPU4) (MT104.0 C) - m4przmon__a Prize Money (Barcrest) (MPU4) (FP8 0.1 B) @@ -65987,89 +68347,49 @@ m4przmon__p Prize Money (Barcrest) (MPU4) (FPM 0.3 Y) - - m4przmon__q - Prize Money (Barcrest) (MPU4) (MC 53.0 K) - - - m4przmon__r - Prize Money (Barcrest) (MPU4) (MT054.0 K) - - - m4przmon__s - Prize Money (Barcrest) (MPU4) (MC 53.0) - - - m4przmon__t - Prize Money (Barcrest) (MPU4) (MC 53.0 YD) - - - m4przmon__u - Prize Money (Barcrest) (MPU4) (MC 53.0 D) - - - m4przmon__v - Prize Money (Barcrest) (MPU4) (MC103.0 K) - - - m4przmon__w - Prize Money (Barcrest) (MPU4) (MT104.0 K) - - - m4przmon__x - Prize Money (Barcrest) (MPU4) (MC103.0) - - - m4przmon__y - Prize Money (Barcrest) (MPU4) (MC103.0 YD) - - - m4przmon__z - Prize Money (Barcrest) (MPU4) (MC103.0 D) - m4przrf - Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1) + Prize Rich & Famous (Barcrest) (MPU4) (PR8 0.1) m4przrf__a - Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 B) + Prize Rich & Famous (Barcrest) (MPU4) (PR8 0.1 B) m4przrf__b - Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 BD) + Prize Rich & Famous (Barcrest) (MPU4) (PR8 0.1 BD) m4przrf__c - Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 D) + Prize Rich & Famous (Barcrest) (MPU4) (PR8 0.1 D) m4przrf__d - Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 DJ) + Prize Rich & Famous (Barcrest) (MPU4) (PR8 0.1 DJ) m4przrf__e - Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 KD) + Prize Rich & Famous (Barcrest) (MPU4) (PR8 0.1 KD) m4przrf__f - Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 YD) + Prize Rich & Famous (Barcrest) (MPU4) (PR8 0.1 YD) m4przrf__g - Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 J) + Prize Rich & Famous (Barcrest) (MPU4) (PR8 0.1 J) m4przrf__h - Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 K) + Prize Rich & Famous (Barcrest) (MPU4) (PR8 0.1 K) m4przrf__i - Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 AD) + Prize Rich & Famous (Barcrest) (MPU4) (PR8 0.1 AD) m4przrf__j - Prize Rich And Famous (Barcrest) (MPU4) (PR8 0.1 Y) + Prize Rich & Famous (Barcrest) (MPU4) (PR8 0.1 Y) m4przrfm @@ -66141,7 +68461,11 @@ m4przsss__0 - Prize Spend Spend Spend (Barcrest) (MPU4) (set 28) + Prize Spend Spend Spend (Barcrest) (MPU4) (SSP 0.5 Y) + + + m4przsss__1 + Prize Spend Spend Spend (Barcrest) (MPU4) (SSP 0.5 C) m4przsss__a @@ -66221,31 +68545,31 @@ m4przsss__t - Prize Spend Spend Spend (Barcrest) (MPU4) (set 21) + Prize Spend Spend Spend (Barcrest) (MPU4) (SSP 0.5 B) m4przsss__u - Prize Spend Spend Spend (Barcrest) (MPU4) (set 22) + Prize Spend Spend Spend (Barcrest) (MPU4) (SSP 0.5 D) m4przsss__v - Prize Spend Spend Spend (Barcrest) (MPU4) (set 23) + Prize Spend Spend Spend (Barcrest) (MPU4) (SSP 0.5 BD) m4przsss__w - Prize Spend Spend Spend (Barcrest) (MPU4) (set 24) + Prize Spend Spend Spend (Barcrest) (MPU4) (SSP 0.5 YD) m4przsss__x - Prize Spend Spend Spend (Barcrest) (MPU4) (set 25) + Prize Spend Spend Spend (Barcrest) (MPU4) (SSP 0.5 R) m4przsss__y - Prize Spend Spend Spend (Barcrest) (MPU4) (set 26) + Prize Spend Spend Spend (Barcrest) (MPU4) (SSP 0.5 RD) m4przsss__z - Prize Spend Spend Spend (Barcrest) (MPU4) (set 27) + Prize Spend Spend Spend (Barcrest) (MPU4) (SSP 0.5) m4przve @@ -66413,7 +68737,7 @@ m4ptblkc - Pot Black Casino (Bwb - Barcrest) (MPU4) + Pot Black (BWB) (MPU4) (PO 1.2 K) m4pulwnc @@ -66549,159 +68873,155 @@ m4pzbing - Prize Bingo (Bwb) (MPU4) (set 1) + Prize Bingo (BWB) (MPU4) (set 1) m4pzbing__a - Prize Bingo (Bwb) (MPU4) (set 2) + Prize Bingo (BWB) (MPU4) (set 2) m4pzbing__b - Prize Bingo (Bwb) (MPU4) (set 3) + Prize Bingo (BWB) (MPU4) (set 3) m4pzbing__c - Prize Bingo (Bwb) (MPU4) (set 4) + Prize Bingo (BWB) (MPU4) (set 4) m4pzbing__d - Prize Bingo (Bwb) (MPU4) (set 5) + Prize Bingo (BWB) (MPU4) (set 5) m4pzbing__e - Prize Bingo (Bwb) (MPU4) (set 6) + Prize Bingo (BWB) (MPU4) (set 6) m4quidin - Quids In (Bwb) (MPU4) (set 1) + Quids In (BWB) (MPU4) (set 1) m4quidin__a - Quids In (Bwb) (MPU4) (set 2) + Quids In (BWB) (MPU4) (set 2) m4quidin__b - Quids In (Bwb) (MPU4) (set 3) + Quids In (BWB) (MPU4) (set 3) m4quidis - Quids In Showcase (Bwb) (MPU4) (set 1) + Quids In Showcase (BWB) (MPU4) (set 1) m4quidis__a - Quids In Showcase (Bwb) (MPU4) (set 2) + Quids In Showcase (BWB) (MPU4) (set 2) m4quidis__b - Quids In Showcase (Bwb) (MPU4) (set 3) + Quids In Showcase (BWB) (MPU4) (set 3) m4quidis__c - Quids In Showcase (Bwb) (MPU4) (set 4) + Quids In Showcase (BWB) (MPU4) (set 4) m4quidis__d - Quids In Showcase (Bwb) (MPU4) (set 5) + Quids In Showcase (BWB) (MPU4) (set 5) m4r2r - Reel 2 Reel (Barcrest) (MPU4) + Reel 2 Reel (Barcrest) (MPU4) (RR 3.0) m4ra - Red Alert (Barcrest) (MPU4) (set 1) + Red Alert (Barcrest) (MPU4) (R2T 3.3, set 1) m4ra__a - Red Alert (Barcrest) (MPU4) (set 2) + Red Alert (Barcrest) (MPU4) (R2T 3.3, set 2) m4ra__b - Red Alert (Barcrest) (MPU4) (set 3) + Red Alert (Barcrest) (MPU4) (R2T 3.3, set 3) m4ra__c - Red Alert (Barcrest) (MPU4) (set 4) + Red Alert (Barcrest) (MPU4) (R2T 3.3, set 4) m4ra__d - Red Alert (Barcrest) (MPU4) (set 5) + Red Alert (Barcrest) (MPU4) (R2T 3.3, set 5) m4ra__e - Red Alert (Barcrest) (MPU4) (set 6) + Red Alert (Barcrest) (MPU4) (R2T 3.3, set 6) m4ra__f - Red Alert (Barcrest) (MPU4) (set 7) + Red Alert (Barcrest) (MPU4) (R2T 3.3, set 7) m4ra__g - Red Alert (Barcrest) (MPU4) (set 8) + Red Alert (Barcrest) (MPU4) (RA3 0.2, set 1) m4ra__h - Red Alert (Barcrest) (MPU4) (set 9) + Red Alert (Barcrest) (MPU4) (RA3 0.2, set 2) m4ra__i - Red Alert (Barcrest) (MPU4) (set 10) + Red Alert (Barcrest) (MPU4) (RA3 0.2, set 3) m4ra__j - Red Alert (Barcrest) (MPU4) (set 11) + Red Alert (Barcrest) (MPU4) (RA3 0.2, set 4) m4ra__k - Red Alert (Barcrest) (MPU4) (set 12) + Red Alert (Barcrest) (MPU4) (RA3 0.2, set 5) m4ra__l - Red Alert (Barcrest) (MPU4) (set 13) + Red Alert (Barcrest) (MPU4) (RA3 0.2, set 6) m4ra__m - Red Alert (Barcrest) (MPU4) (set 14) + Red Alert (Barcrest) (MPU4) (RA3 0.2, set 7) m4ra__n - Red Alert (Barcrest) (MPU4) (set 15) + Red Alert (Barcrest) (MPU4) (RA3 0.2, set 8) m4ra__o - Red Alert (Barcrest) (MPU4) (set 16) + Red Alert (Barcrest) (MPU4) (RA3 0.2, set 9) m4ra__p - Red Alert (Barcrest) (MPU4) (set 17) + Red Alert (Barcrest) (MPU4) (RAH 3.3) m4ra__q - Red Alert (Barcrest) (MPU4) (set 18) - - - m4ra__r - Red Alert (Barcrest) (MPU4) (set 19) + Red Alert (Barcrest) (bootleg) (MPU4) (R2T 3.1) m4rackem - Rack Em Up (Bwb) (MPU4) (set 1) + Rack Em Up (BWB) (MPU4) (ver. 3) (20/25/30p stake / £5/£15 jackpot) m4rackem__a - Rack Em Up (Bwb) (MPU4) (set 2) + Rack Em Up (BWB) (MPU4) (ver. 2) (20/25/30p stake / £5/£15 jackpot) (set 1) m4rackem__b - Rack Em Up (Bwb) (MPU4) (set 3) + Rack Em Up (BWB) (MPU4) (ver. 2) (20/25/30p stake / £5/£15 jackpot) (set 2) m4rackem__c - Rack Em Up (Bwb) (MPU4) (set 4) + Rack Em Up (BWB) (MPU4) (ver. 2) (20/25/30p stake / £5/£15 jackpot) (set 3) m4rackem__d - Rack Em Up (Bwb) (MPU4) (set 5) + Rack Em Up (BWB) (MPU4) (ver. 2) (20/25/30p stake / £5/£15 jackpot) (set 4) m4rags @@ -66721,79 +69041,79 @@ m4randr - Random Roulette (Barcrest) (Dutch) (MPU4) + Random Roulette (Barcrest) (Dutch) (MPU4) (DRR 2.2) m4rbgold - Rainbow Gold (Bwb) (MPU4) (set 1) + Rainbow Gold (BWB) (MPU4) (set 1) m4rbgold__a - Rainbow Gold (Bwb) (MPU4) (set 2) + Rainbow Gold (BWB) (MPU4) (set 2) m4rbgold__b - Rainbow Gold (Bwb) (MPU4) (set 3) + Rainbow Gold (BWB) (MPU4) (set 3) m4rbgold__c - Rainbow Gold (Bwb) (MPU4) (set 4) + Rainbow Gold (BWB) (MPU4) (set 4) m4rbgold__d - Rainbow Gold (Bwb) (MPU4) (set 5) + Rainbow Gold (BWB) (MPU4) (set 5) m4rbgold__e - Rainbow Gold (Bwb) (MPU4) (set 6) + Rainbow Gold (BWB) (MPU4) (set 6) m4rbgold__f - Rainbow Gold (Bwb) (MPU4) (set 7) + Rainbow Gold (BWB) (MPU4) (set 7) m4rbgold__g - Rainbow Gold (Bwb) (MPU4) (set 8) + Rainbow Gold (BWB) (MPU4) (set 8) m4rbgold__h - Rainbow Gold (Bwb) (MPU4) (set 9) + Rainbow Gold (BWB) (MPU4) (set 9) m4rbgold__i - Rainbow Gold (Bwb) (MPU4) (set 10) + Rainbow Gold (BWB) (MPU4) (set 10) m4rbgold__j - Rainbow Gold (Bwb) (MPU4) (set 11) + Rainbow Gold (BWB) (MPU4) (set 11) m4rbgold__k - Rainbow Gold (Bwb) (MPU4) (set 12) + Rainbow Gold (BWB) (MPU4) (set 12) m4rbgold__l - Rainbow Gold (Bwb) (MPU4) (set 13) + Rainbow Gold (BWB) (MPU4) (set 13) m4rbgold__m - Rainbow Gold (Bwb) (MPU4) (set 14) + Rainbow Gold (BWB) (MPU4) (set 14) m4rbgold__n - Rainbow Gold (Bwb) (MPU4) (set 15) + Rainbow Gold (BWB) (MPU4) (set 15) m4rbgold__o - Rainbow Gold (Bwb) (MPU4) (set 16) + Rainbow Gold (BWB) (MPU4) (set 16) m4rbgold__p - Rainbow Gold (Bwb) (MPU4) (set 17) + Rainbow Gold (BWB) (MPU4) (set 17) m4rbgold__q - Rainbow Gold (Bwb) (MPU4) (set 18) + Rainbow Gold (BWB) (MPU4) (set 18) m4rckrol @@ -66849,7 +69169,7 @@ m4rdht - Red Heat (Golden Nugget?) (Barcrest) (MPU4) (DRH 1.2) + Red Heat (Barcrest) (Dutch) (MPU4) (DRH 1.2) m4ready @@ -67128,16 +69448,12 @@ Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 AD) - m4reelpk - Reel Poker (Barcrest) (MPU4) - - - m4reeltm - Reel Timer (Barcrest) (MPU4) (DWT) + m4redunk + unknown Barcrest MPU4 'RED 0.4' (MPU4) (bootleg) - m4remag - unknown MPU4 'ZTP 0.7' (MPU4?) + m4reelpk + Reel Poker (Barcrest) (MPU4) (R2P 3.0) m4revolv @@ -67421,23 +69737,23 @@ m4rhfev - Red Hot Fever (Bwb) (MPU4) (set 1) + Red Hot Fever (BWB) (MPU4) (ver. 7) (20/25/30p stake / £5/£10/£15 jackpot) (set 1) m4rhfev__a - Red Hot Fever (Bwb) (MPU4) (set 2) + Red Hot Fever (BWB) (MPU4) (ver. 7) (20/25/30p stake / £5/£10/£15 jackpot) (set 2) m4rhfev__b - Red Hot Fever (Bwb) (MPU4) (set 3) + Red Hot Fever (BWB) (MPU4) (ver. 7) (20/25/30p stake / £5/£10/£15 jackpot) (set 3) m4rhfev__c - Red Hot Fever (Bwb) (MPU4) (set 4) + Red Hot Fever (BWB) (MPU4) (ver. 1) (5/10p stake / £5/£8 jackpot) (set 1) m4rhfev__d - Red Hot Fever (Bwb) (MPU4) (set 5) + Red Hot Fever (BWB) (MPU4) (ver. 1) (5/10p stake / £5/£8 jackpot) (set 2) m4rhfevc @@ -67709,15 +70025,15 @@ m4rhog_h1 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 1) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0, hack?, set 1) m4rhog_h10 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 3) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 1.0, hack?, set 3) m4rhog_h11 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 4) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 1.0, hack?, set 4) m4rhog_h12 @@ -67737,39 +70053,39 @@ m4rhog_h2 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 2) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0, hack?, set 2) m4rhog_h3 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 3) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0, hack?, set 3) m4rhog_h4 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 4) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0, hack?, set 4) m4rhog_h5 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 5) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0, hack?, set 5) m4rhog_h6 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 6) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0, hack?, set 6) m4rhog_h7 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0, hack?, set 7) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0, hack?, set 7) m4rhog_h8 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 1) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 1.0, hack?, set 1) m4rhog_h9 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0, hack?, set 2) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 1.0, hack?, set 2) m4rhog_roc - Road Hog (Bwb / Barcrest) (MPU4) (ROC 2.0, bad) + Road Hog (BWB / Barcrest) (MPU4) (ROC 2.0, bad) m4rhogc @@ -67785,59 +70101,59 @@ m4rhogr1 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 1.0) m4rhogr1c - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 C) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 1.0 C) m4rhogr1d - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 D) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 1.0 D) m4rhogr1k - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 K, set 1) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 1.0 K, set 1) m4rhogr1k_a - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 K, set 2, wrong version number?) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 1.0 K, set 2, wrong version number?) m4rhogr1y - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 Y) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 1.0 Y) m4rhogr1yd - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 1.0 YD) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 1.0 YD) m4rhogr2 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0) m4rhogr2c - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0 C) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0 C) m4rhogr2d - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0 D) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0 D) m4rhogr2k - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0 K) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0 K) m4rhogr2y - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0 Y) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0 Y) m4rhogr2yd - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 2.0 YD) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 2.0 YD) m4rhogr3 - Road Hog (Bwb / Barcrest) (MPU4) (RO_ 3.0) + Road Hog (BWB / Barcrest) (MPU4) (RO_ 3.0) m4rhogr6ad @@ -67911,10 +70227,6 @@ m4rhr__8 Red Hot Roll (Barcrest) (MPU4) (RHT 0.3 C, hack) - - m4rhr__9 - Red Hot Roll (Barcrest) (MPU4) (SS2 1.0, hack?) - m4rhr__a Red Hot Roll (Barcrest) (MPU4) (CR4 0.9 AD) @@ -67929,7 +70241,7 @@ m4rhr__a2 - Red Hot Roll (Barcrest) (MPU4) (RHR 5.0) + Red Hot Roll (Barcrest) (MPU4) (RHR 5.0, set 1) m4rhr__a3 @@ -68145,151 +70457,155 @@ m4rhrc - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 / CRU 0.3) m4rhrc__0 - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 AC/ CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 AC/ CR4 0.3) m4rhrc__1 - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 D / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 D / CR4 0.3) m4rhrc__2 - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 KD / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 KD / CR4 0.3) m4rhrc__3 - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 RD / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 RD / CR4 0.3) m4rhrc__4 - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 YD / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 YD / CR4 0.3) m4rhrc__5 - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 K / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 K / CR4 0.3) m4rhrc__6 - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 R / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 R / CR4 0.3) m4rhrc__7 - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 / CR4 0.3) m4rhrc__8 - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 Y / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 Y / CR4 0.3) + + + m4rhrc__9 + Red Hot Roll (Barcrest) (MPU4) (CLD 0.2C) m4rhrc__a - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 B / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 B / CRU 0.3) m4rhrc__aa - Red Hot Roll Classic (Barcrest) (MPU4) (RHR 5.0) + Red Hot Roll (Barcrest) (MPU4) (RHR 5.0, set 2) m4rhrc__b - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 BD / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 BD / CRU 0.3) m4rhrc__c - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 C / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 C / CRU 0.3) m4rhrc__d - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 D / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 D / CRU 0.3) m4rhrc__e - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 KD / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 KD / CRU 0.3) m4rhrc__f - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 RD / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 RD / CRU 0.3) m4rhrc__g - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 YD / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 YD / CRU 0.3) m4rhrc__h - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 K / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 K / CRU 0.3) m4rhrc__i - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 R / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 R / CRU 0.3) m4rhrc__j - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 AD / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 AD / CRU 0.3) m4rhrc__k - Red Hot Roll Classic (Barcrest) (MPU4) (CLD 0.3 Y / CRU 0.3) + Red Hot Roll (Barcrest) (MPU4) (CLD 0.3 Y / CRU 0.3) m4rhrc__l - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 AD / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 AD / CR4 0.3) m4rhrc__m - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 B / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 B / CR4 0.3) m4rhrc__n - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 BD / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 BD / CR4 0.3) m4rhrc__o - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 C / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 C / CR4 0.3) m4rhrc__p - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 D / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 D / CR4 0.3) m4rhrc__q - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 KD / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 KD / CR4 0.3) m4rhrc__r - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 RD / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 RD / CR4 0.3) m4rhrc__s - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 YD / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 YD / CR4 0.3) m4rhrc__t - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 K / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 K / CR4 0.3) m4rhrc__u - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 R / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 R / CR4 0.3) m4rhrc__v - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 / CR4 0.3) m4rhrc__w - Red Hot Roll Classic (Barcrest) (MPU4) (HHN 0.3 Y / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (HHN 0.3 Y / CR4 0.3) m4rhrc__x - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 AD / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 AD / CR4 0.3) m4rhrc__y - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 B / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 B / CR4 0.3) m4rhrc__z - Red Hot Roll Classic (Barcrest) (MPU4) (RRD 0.3 BD / CR4 0.3) + Red Hot Roll (Barcrest) (MPU4) (RRD 0.3 BD / CR4 0.3) m4rhrcl @@ -68509,7 +70825,7 @@ m4ringfr - Ring Of Fire (Barcrest) (MPU4) + Ring Of Fire (Barcrest) (German) (MPU4) (ROF 0.3) m4riocr @@ -68521,7 +70837,7 @@ m4riotrp - Rio Tropico (unknown) (MPU4) + Rio Tropico (Barcrest) (Dutch) (MPU4) (DRT 1.0) m4rlpick @@ -68543,10 +70859,6 @@ m4rltst MPU4 Reel Test (3.0) - - m4rmg - unknown MPU4 'CTP 0.4' (MPU4?) - m4rmtp Reel Magic Turbo Play (Avantime?) (MPU4) (set 1) @@ -68781,7 +71093,7 @@ m4roadrn - Road Runner (Barcrest) (Dutch) (MPU4) (DRO1.9) + Road Runner (Barcrest) (Dutch) (MPU4) (DRO 1.9) m4robo @@ -68993,27 +71305,27 @@ m4royjwl - Royal Jewels (Barcrest) (MPU4) + Royal Jewels (Barcrest) (German) (MPU4) (GRJ 1.4) m4rsg - Ready Steady Go (Barcrest) (MPU4, Mod 2 type, V1.2) + Ready Steady Go (Barcrest) (MPU4, Mod 2 type) (RSG 1.2) m4rsga - Ready Steady Go (Barcrest) (MPU4, Mod 2 type, V1.0) + Ready Steady Go (Barcrest) (MPU4, Mod 2 type) (R4G 1.0) m4runawy - Runaway Trail (Barcrest) (MPU4) + Runaway Trail (Barcrest) (MPU4) (R4T 1.1) m4runawyb - Runaway Trail (Barcrest) (v1.2?) (MPU4) + Runaway Trail (Barcrest) (MPU4) (R4T 1.3) m4rwb - Red White & Blue (Barcrest) (MPU4) (DRW) + Red White & Blue (Barcrest) (Dutch) (MPU4) (DRW 1.4) m4safar @@ -69021,31 +71333,31 @@ m4salsa - Salsa (Barcrest) (MPU4) (DSA) + Salsa (Barcrest) (Dutch) (MPU4) (DSA 1.5) m4samu - Samurai (Barcrest) (Dutch) (MPU4) + Samurai (Barcrest) (Dutch) (MPU4) (DSM 1.0) m4sayno - Say No More (Barcrest) (MPU4) (set 1) + Say No More (Barcrest) (MPU4) (SNM 2.0) m4sayno__a - Say No More (Barcrest) (MPU4) (set 2) + Say No More (Barcrest) (MPU4) (SNM 0.5, hack, set 1) m4sayno__b - Say No More (Barcrest) (MPU4) (set 3) + Say No More (Barcrest) (MPU4) (SNM 0.5, hack, set 2) m4sayno__c - Say No More (Barcrest) (MPU4) (set 4) + Say No More (Barcrest) (MPU4) (SNM 0.4, hack) m4sayno__d - Say No More (Barcrest) (MPU4) (set 5) + Say No More (Barcrest) (MPU4) (SNM 2.0 X) m4sb5 @@ -69093,7 +71405,7 @@ m4sctagt - Secret Agent (Nova) (MPU4) + Secret Agent (Nova) (German) (MPU4) (GSE 3.0) m4sdquid @@ -69153,7 +71465,7 @@ m4sgraba - Smash 'n' Grab (Barcrest) (MPU4) (set 1.0, set 2) + Smash 'n' Grab (Barcrest) (MPU4) (SAG 1.0, set 2) m4sgrabb @@ -69305,7 +71617,167 @@ m4showtm - Show Timer (Barcrest) (Dutch) (MPU4) (DSH1.3) + Show Timer (Barcrest) (Dutch) (MPU4) (DSH 1.3) + + + m4shv + Super Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, set 1) + + + m4shv__0 + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 1) + + + m4shv__1 + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 2) + + + m4shv__10 + Super Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, hack, set 1) + + + m4shv__11 + Super Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, hack, set 2) + + + m4shv__12 + Super Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, hack, set 3) + + + m4shv__2 + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 3) + + + m4shv__3 + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 4) + + + m4shv__4 + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 5) + + + m4shv__5 + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, hack, set 1) + + + m4shv__6 + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 6) + + + m4shv__7 + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 7) + + + m4shv__8 + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0 C, hack, set 8) + + + m4shv__9 + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, hack, set 2) + + + m4shv__a + Super Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 C) + + + m4shv__b + Super Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 D) + + + m4shv__c + Super Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 K) + + + m4shv__d + Super Hyper Viper (Barcrest) (MPU4) (H6Y 0.3 Y) + + + m4shv__e + Super Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, set 2) + + + m4shv__f + Super Hyper Viper (Barcrest) (MPU4) (H6Y 0.2 Y) + + + m4shv__g + Super Hyper Viper (Barcrest) (MPU4) (HVC 1.0 C) + + + m4shv__h + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 1) + + + m4shv__i + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 2) + + + m4shv__j + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 3) + + + m4shv__k + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 4) + + + m4shv__l + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 5) + + + m4shv__m + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 6) + + + m4shv__n + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 7) + + + m4shv__o + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 8) + + + m4shv__p + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 9) + + + m4shv__q + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, C) + + + m4shv__r + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, C, bad?) + + + m4shv__s + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 1) + + + m4shv__t + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 2) + + + m4shv__u + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 3) + + + m4shv__v + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 4) + + + m4shv__w + Super Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 5) + + + m4shv__x + Super Hyper Viper (Barcrest) (MPU4) (HVP 4.0, set 1) + + + m4shv__y + Super Hyper Viper (Barcrest) (MPU4) (HVP 4.0, set 2) + + + m4shv__z + Super Hyper Viper (Barcrest) (MPU4) (HVP 4.0, set 3) m4silnud @@ -69325,103 +71797,103 @@ m4sinbd - Sinbad (Bwb) (MPU4) (set 1) + Sinbad (BWB) (MPU4) (set 1) m4sinbd__a - Sinbad (Bwb) (MPU4) (set 2) + Sinbad (BWB) (MPU4) (set 2) m4sinbd__b - Sinbad (Bwb) (MPU4) (set 3) + Sinbad (BWB) (MPU4) (set 3) m4sinbd__c - Sinbad (Bwb) (MPU4) (set 4) + Sinbad (BWB) (MPU4) (set 4) m4sinbd__d - Sinbad (Bwb) (MPU4) (set 5) + Sinbad (BWB) (MPU4) (set 5) m4sinbd__e - Sinbad (Bwb) (MPU4) (set 6) + Sinbad (BWB) (MPU4) (set 6) m4sinbd__f - Sinbad (Bwb) (MPU4) (set 7) + Sinbad (BWB) (MPU4) (set 7) m4sinbd__g - Sinbad (Bwb) (MPU4) (set 8) + Sinbad (BWB) (MPU4) (set 8) m4sinbd__h - Sinbad (Bwb) (MPU4) (set 9) + Sinbad (BWB) (MPU4) (set 9) m4sinbd__i - Sinbad (Bwb) (MPU4) (set 10) + Sinbad (BWB) (MPU4) (set 10) m4sinbd__j - Sinbad (Bwb) (MPU4) (set 11) + Sinbad (BWB) (MPU4) (set 11) m4sinbd__k - Sinbad (Bwb) (MPU4) (set 12) + Sinbad (BWB) (MPU4) (set 12) m4sinbd__l - Sinbad (Bwb) (MPU4) (set 13) + Sinbad (BWB) (MPU4) (set 13) m4sinbd__m - Sinbad (Bwb) (MPU4) (set 14) + Sinbad (BWB) (MPU4) (set 14) m4sinbd__n - Sinbad (Bwb) (MPU4) (set 15) + Sinbad (BWB) (MPU4) (set 15) m4sinbd__o - Sinbad (Bwb) (MPU4) (set 16) + Sinbad (BWB) (MPU4) (set 16) m4sinbd__p - Sinbad (Bwb) (MPU4) (set 17) + Sinbad (BWB) (MPU4) (set 17) m4sinbd__q - Sinbad (Bwb) (MPU4) (set 18) + Sinbad (BWB) (MPU4) (set 18) m4sinbd__r - Sinbad (Bwb) (MPU4) (set 19) + Sinbad (BWB) (MPU4) (set 19) m4sinbd__s - Sinbad (Bwb) (MPU4) (set 20) + Sinbad (BWB) (MPU4) (set 20) m4sinbd__t - Sinbad (Bwb) (MPU4) (set 21) + Sinbad (BWB) (MPU4) (set 21) m4sinbd__u - Sinbad (Bwb) (MPU4) (set 22) + Sinbad (BWB) (MPU4) (set 22) m4sinbd__v - Sinbad (Bwb) (MPU4) (set 23) + Sinbad (BWB) (MPU4) (set 23) m4sinbd__w - Sinbad (Bwb) (MPU4) (set 24) + Sinbad (BWB) (MPU4) (set 24) m4sinbd__x - Sinbad (Bwb) (MPU4) (set 25) + Sinbad (BWB) (MPU4) (set 25) m4sinbdn @@ -69453,23 +71925,23 @@ m4sky - Sky Sports (Bwb) (MPU4) (set 1) + Sky Sports Super Soccer (BWB) (MPU4) (20/25/30p stake / £8 token/£10/£15 jackpot) m4sky__a - Sky Sports (Bwb) (MPU4) (set 2) + Sky Sports Super Soccer (BWB) (MPU4) (20/25/30p stake £10/£15 jackpot) (set 1) m4sky__b - Sky Sports (Bwb) (MPU4) (set 3) + Sky Sports Super Soccer (BWB) (MPU4) (20/25/30p stake £10/£15 jackpot) (set 2) m4sky__c - Sky Sports (Bwb) (MPU4) (set 4) + Sky Sports Super Soccer (BWB) (MPU4) (20/25/30p stake £10/£15 jackpot) (set 3) m4sky__d - Sky Sports (Bwb) (MPU4) (set 5) + Sky Sports Super Soccer (BWB) (MPU4) (20/25/30p stake £10/£15 jackpot) (set 4) m4smshgb @@ -69509,67 +71981,67 @@ m4souls - Soul Sister (Bwb) (MPU4) (set 1) + Soul Sister (BWB) (MPU4) (set 1) m4souls__a - Soul Sister (Bwb) (MPU4) (set 2) + Soul Sister (BWB) (MPU4) (set 2) m4souls__b - Soul Sister (Bwb) (MPU4) (set 3) + Soul Sister (BWB) (MPU4) (set 3) m4souls__c - Soul Sister (Bwb) (MPU4) (set 4) + Soul Sister (BWB) (MPU4) (set 4) m4souls__d - Soul Sister (Bwb) (MPU4) (set 5) + Soul Sister (BWB) (MPU4) (set 5) m4souls__e - Soul Sister (Bwb) (MPU4) (set 6) + Soul Sister (BWB) (MPU4) (set 6) m4souls__f - Soul Sister (Bwb) (MPU4) (set 7) + Soul Sister (BWB) (MPU4) (set 7) m4specu - Speculator Club (Bwb) (MPU4) + Speculator Club (BWB) (MPU4) m4spinbt - Spin The Bottle (Bwb) (MPU4) (set 1) + Spin The Bottle (BWB) (MPU4) (set 1) m4spinbt__a - Spin The Bottle (Bwb) (MPU4) (set 2) + Spin The Bottle (BWB) (MPU4) (set 2) m4spinbt__b - Spin The Bottle (Bwb) (MPU4) (set 3) + Spin The Bottle (BWB) (MPU4) (set 3) m4spinbt__c - Spin The Bottle (Bwb) (MPU4) (set 4) + Spin The Bottle (BWB) (MPU4) (set 4) m4spinbt__d - Spin The Bottle (Bwb) (MPU4) (set 5) + Spin The Bottle (BWB) (MPU4) (set 5) m4spinbt__e - Spin The Bottle (Bwb) (MPU4) (set 6) + Spin The Bottle (BWB) (MPU4) (set 6) m4spinbt__f - Spin The Bottle (Bwb) (MPU4) (set 7) + Spin The Bottle (BWB) (MPU4) (set 7) m4spinbt__g - Spin The Bottle (Bwb) (MPU4) (set 8) + Spin The Bottle (BWB) (MPU4) (set 8) m4spnwin @@ -69593,7 +72065,7 @@ m4spotln - Spotlight (Nova) (MPU4) + Spotlight (Nova) (German) (MPU4) (GSP 0.1) m4spton @@ -69639,65 +72111,57 @@ m4ssclas__e Super Streak Classic (Barcrest) (MPU4) (CSS 6.0 B) - - m4ssclas__f - Super Streak Classic (Barcrest) (MPU4) (hack C) - m4sss - Spend Spend Spend (Barcrest) (MPU4) (set 1) - - - m4sss__a - Spend Spend Spend (Barcrest) (MPU4) (set 2) + Spend Spend Spend (BWB) (MPU4) (SP5 1.0, set 1) m4sss__b - Spend Spend Spend (Barcrest) (MPU4) (set 3) + Spend Spend Spend (BWB) (MPU4) (SP5 1.0, set 2) m4sss__c - Spend Spend Spend (Barcrest) (MPU4) (set 4) + Spend Spend Spend (BWB) (MPU4) (SP5 1.0, set 3) m4sss__d - Spend Spend Spend (Barcrest) (MPU4) (set 5) + Spend Spend Spend (BWB) (MPU4) (SP5 1.0, set 4) m4sss__e - Spend Spend Spend (Barcrest) (MPU4) (set 6) + Spend Spend Spend (BWB) (MPU4) (SP101.0, set 1) m4sss__f - Spend Spend Spend (Barcrest) (MPU4) (set 7) + Spend Spend Spend (BWB) (MPU4) (SP101.0, set 2) m4sss__g - Spend Spend Spend (Barcrest) (MPU4) (set 8) + Spend Spend Spend (BWB) (MPU4) (SP101.0, set 3) m4sss__h - Spend Spend Spend (Barcrest) (MPU4) (set 9) + Spend Spend Spend (BWB) (MPU4) (SP101.0, set 4) m4sss__i - Spend Spend Spend (Barcrest) (MPU4) (set 10) + Spend Spend Spend (BWB) (MPU4) (SX5 2.0, set 1) m4sss__j - Spend Spend Spend (Barcrest) (MPU4) (set 11) + Spend Spend Spend (BWB) (MPU4) (SX102.0, set 1) m4sss__k - Spend Spend Spend (Barcrest) (MPU4) (set 12) + Spend Spend Spend (BWB) (MPU4) (SX5 2.0, set 2) m4sss__l - Spend Spend Spend (Barcrest) (MPU4) (set 13) + Spend Spend Spend (BWB) (MPU4) (SX102.0, set 2) m4sstrek - Super Streak (bootleg) (MPU4) + Super Streak (bootleg) (MPU4) (SS2 1.0) m4stakeu @@ -69721,59 +72185,59 @@ m4starbr - Stars And Bars (Barcrest) (Dutch) (MPU4) + Stars And Bars (Barcrest) (Dutch) (MPU4) (DSB 2.8) m4stards - Stardust (Barcrest) (Dutch) (MPU4) + Stardust (Barcrest) (Dutch) (MPU4) (DSD 1.3) m4starst - Stars & Stripes (Bwb) (MPU4) (set 1) + Stars & Stripes (BWB) (MPU4) (20p stake / £8 token jackpot) (set 1) m4starst__a - Stars & Stripes (Bwb) (MPU4) (set 2) + Stars & Stripes (BWB) (MPU4) (20p stake / £8 token jackpot) (set 2) m4starst__b - Stars & Stripes (Bwb) (MPU4) (set 3) + Stars & Stripes (BWB) (MPU4) (20p stake / £8 token jackpot) (set 3) m4starst__c - Stars & Stripes (Bwb) (MPU4) (set 4) + Stars & Stripes (BWB) (MPU4) (20p stake / £8 token jackpot) (set 4) m4starst__d - Stars & Stripes (Bwb) (MPU4) (set 5) + Stars & Stripes (BWB) (MPU4) (20p stake / £8 token jackpot) (set 5) m4starst__e - Stars & Stripes (Bwb) (MPU4) (set 6) + Stars & Stripes (BWB) (MPU4) (20/25/30p stake £10/£15 jackpot) (set 1) m4starst__f - Stars & Stripes (Bwb) (MPU4) (set 7) + Stars & Stripes (BWB) (MPU4) (20/25/30p stake £10/£15 jackpot) (set 2) m4starst__g - Stars & Stripes (Bwb) (MPU4) (set 8) + Stars & Stripes (BWB) (MPU4) (20/25/30p stake £10/£15 jackpot) (set 3) m4starst__h - Stars & Stripes (Bwb) (MPU4) (set 9) + Stars & Stripes (BWB) (MPU4) (20/25/30p stake £10/£15 jackpot) (set 4) m4starst__i - Stars & Stripes (Bwb) (MPU4) (set 10) + Stars & Stripes (BWB) (MPU4) (20/25/30p stake £10/£15 jackpot) (set 5) m4starst__j - Stars & Stripes (Bwb) (MPU4) (set 11) + Stars & Stripes (BWB) (MPU4) (20/25/30p stake £10/£15 jackpot) (set 6) m4stc - unknown MPU4 'STC 0.1' (Barcrest) (MPU4) + Super Streak (Barcrest) (MPU4) (STC 0.1) m4steptm @@ -69781,15 +72245,15 @@ m4stopcl - Stop the Clock (Barcrest) (MPU4) (SC2.5) + Stop the Clock (Barcrest) (MPU4) (SC 2.5) m4sunclb - Sun Club (Bwb) (MPU4) (set 1) + Sun Club (BWB) (MPU4) (SUC 0.2, set 1) m4sunclba - Sun Club (Bwb) (MPU4) (set 2) + Sun Club (BWB) (MPU4) (SUC 0.2, set 2) m4sunday @@ -69797,15 +72261,15 @@ m4sunscl - Sunset Club (Bwb) (MPU4) (set 1) + Sunset Club (BWB) (MPU4) (SSC 3.0, set 1) m4sunscla - Sunset Club (Bwb) (MPU4) (set 2) + Sunset Club (BWB) (MPU4) (SSC 3.0, set 2) m4sunsclb - Sunset Club (Bwb) (MPU4) (set 3) + Sunset Club (BWB) (MPU4) (SSC 3.0, set 3) m4sunset @@ -69821,7 +72285,7 @@ m4sunsetc - Sunset Boulevard (Barcrest) (MPU4) (OSB 0.2) + Sunset Boulevard (Barcrest) (bootleg) (MPU4) (OSB 0.2) m4sunsetd @@ -69893,31 +72357,31 @@ m4supbf - Super Bucks Fizz Club (Barcrest) (MPU4) (set 1) + Super Bucks Fizz Club (Barcrest) (MPU4) (SBF 2.0, set 1) m4supbfa - Super Bucks Fizz Club (Barcrest) (MPU4) (set 2) + Super Bucks Fizz Club (Barcrest) (MPU4) (SBF 2.0, set 2) m4supbjc - Super Blackjack Club (Barcrest) (MPU4) (set 1) + Super Blackjack Club (Barcrest) (MPU4) (SBJ 3.1, set 1) m4supbjca - Super Blackjack Club (Barcrest) (MPU4) (set 2) + Super Blackjack Club (Barcrest) (MPU4) (SBJ 3.1, set 2) m4supbjcb - Super Blackjack Club (Barcrest) (MPU4) (set 3) + Super Blackjack Club (Barcrest) (MPU4) (SBJ 3.1, set 3) m4supbjcc - Super Blackjack Club (Barcrest) (MPU4) (set 4) + Super Blackjack Club (Barcrest) (MPU4) (SBJ 3.1, set 4) m4supbjcd - Super Blackjack Club (Barcrest) (MPU4) (set 5) + Super Blackjack Club (Barcrest) (MPU4) (SBJ 2.0) m4supfru @@ -69927,74 +72391,6 @@ m4supfrua Supafruits (Union) (MPU4, set 2) - - m4suphv - Hyper Viper (Barcrest) (MPU4) (H6Y 0.3, set 2) - - - m4suphv__a - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 2) - - - m4suphv__b - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 1) - - - m4suphv__c - Hyper Viper (Barcrest) (MPU4) (HVP 4.0, set 1) - - - m4suphv__d - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 3) - - - m4suphv__e - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 2) - - - m4suphv__f - Hyper Viper (Barcrest) (MPU4) (HVP 4.0, set 2) - - - m4suphv__g - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 4) - - - m4suphv__h - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 3) - - - m4suphv__i - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 5) - - - m4suphv__j - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 6) - - - m4suphv__k - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 4) - - - m4suphv__l - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 7) - - - m4suphv__m - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, 1994, set 5) - - - m4suphv__n - Hyper Viper (Barcrest) (MPU4) (HVP 4.0, set 3) - - - m4suphv__o - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 8) - - - m4suphv__p - Hyper Viper (Barcrest) (MPU4) (HVP 3.0, set 9) - m4supjst Super Jester (Pcp) (MPU4) (set 1) @@ -70021,523 +72417,531 @@ m4supleg - Super League (Bwb) (MPU4) (set 1) + Super League (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 1) m4supleg__a - Super League (Bwb) (MPU4) (set 2) + Super League (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 2) m4supleg__b - Super League (Bwb) (MPU4) (set 3) + Super League (BWB) (MPU4) (5/10p stake / £5 jackpot) (set 1) m4supleg__c - Super League (Bwb) (MPU4) (set 4) + Super League (BWB) (MPU4) (5/10p stake / £5 jackpot) (set 2) m4supleg__d - Super League (Bwb) (MPU4) (set 5) + Super League (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot) m4suplegw - Super League (Whitbread / Bwb) (MPU4) + Super League (BWB) (MPU4) (5/10/20/25/30p stake / £5 jackpot, 20/25/30p stake / £15 jackpot) (set 3) m4supscr - Super Soccer (Bwb) (MPU4) (set 1) + Super Soccer (ver. 6) (BWB) (MPU4) (set 1) m4supscr__a - Super Soccer (Bwb) (MPU4) (set 2) + Super Soccer (ver. 6) (BWB) (MPU4) (set 2) m4supscr__b - Super Soccer (Bwb) (MPU4) (set 3) + Super Soccer (ver. 6) (BWB) (MPU4) (set 3) m4supscr__c - Super Soccer (Bwb) (MPU4) (set 4) + Super Soccer (ver. 6) (BWB) (MPU4) (set 4) m4supscr__d - Super Soccer (Bwb) (MPU4) (set 5) + Super Soccer (ver. 6) (BWB) (MPU4) (set 5) m4supscr__e - Super Soccer (Bwb) (MPU4) (set 6) + Super Soccer (ver. 6) (BWB) (MPU4) (set 6) m4supscr__f - Super Soccer (Bwb) (MPU4) (set 7) + Super Soccer (ver. 6) (BWB) (MPU4) (set 7) m4supscr__g - Super Soccer (Bwb) (MPU4) (set 8) + Super Soccer (ver. 6) (BWB) (MPU4) (set 8) m4supscr__h - Super Soccer (Bwb) (MPU4) (set 9) + Super Soccer (ver. 6) (BWB) (MPU4) (set 9) m4supscr__i - Super Soccer (Bwb) (MPU4) (set 10) + Super Soccer (ver. 6) (BWB) (MPU4) (set 10) m4supscr__j - Super Soccer (Bwb) (MPU4) (set 11) + Super Soccer (ver. 6) (BWB) (MPU4) (set 11) m4supscr__k - Super Soccer (Bwb) (MPU4) (set 12) + Super Soccer (ver. 6) (BWB) (MPU4) (set 12) m4supscr__l - Super Soccer (Bwb) (MPU4) (set 13) + Super Soccer (ver. 6) (BWB) (MPU4) (set 13) m4supscr__m - Super Soccer (Bwb) (MPU4) (set 14) + Super Soccer (ver. 6) (BWB) (MPU4) (set 14) m4supscr__n - Super Soccer (Bwb) (MPU4) (set 15) + Super Soccer (ver. 3) (BWB) (MPU4) m4supsl - Supa Silva (Barcrest) (MPU4) + Supa Silva (Barcrest) (MPU4) (SS2V 1.0) m4supslt - Supa Slot (Barcrest) (MPU4) + Supa Slot (Barcrest) (MPU4) (S4S 1.0) m4supst - Super Streak (Barcrest) (MPU4) (set 1) + Super Streak (Barcrest) (MPU4) (CS4 0.7, set 1) m4supst__0 - Super Streak (Barcrest) (MPU4) (set 28) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 7) m4supst__1 - Super Streak (Barcrest) (MPU4) (set 29) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 8) m4supst__2 - Super Streak (Barcrest) (MPU4) (set 30) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 9) m4supst__3 - Super Streak (Barcrest) (MPU4) (set 31) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 10) m4supst__4 - Super Streak (Barcrest) (MPU4) (set 32) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 11) m4supst__5 - Super Streak (Barcrest) (MPU4) (set 33) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 12) m4supst__6 - Super Streak (Barcrest) (MPU4) (set 34) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 1) m4supst__7 - Super Streak (Barcrest) (MPU4) (set 35) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 2) m4supst__8 - Super Streak (Barcrest) (MPU4) (set 36) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 3) m4supst__9 - Super Streak (Barcrest) (MPU4) (set 37) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 4) m4supst__a - Super Streak (Barcrest) (MPU4) (set 2) + Super Streak (Barcrest) (MPU4) (CS4 0.7, set 2) m4supst__a0 - Super Streak (Barcrest) (MPU4) (set 64) + Super Streak (Barcrest) (MPU4) (SPS 0.8, set 1) m4supst__a1 - Super Streak (Barcrest) (MPU4) (set 65) + Super Streak (Barcrest) (MPU4) (SPS 0.8, set 2) m4supst__a2 - Super Streak (Barcrest) (MPU4) (set 66) + Super Streak (Barcrest) (MPU4) (SPS 0.8, set 3) m4supst__a3 - Super Streak (Barcrest) (MPU4) (set 67) + Super Streak (Barcrest) (MPU4) (SPS 0.8, set 4) m4supst__a4 - Super Streak (Barcrest) (MPU4) (set 68) + Super Streak (Barcrest) (MPU4) (SPS 0.8, set 5) m4supst__a5 - Super Streak (Barcrest) (MPU4) (set 69) + Super Streak (Barcrest) (MPU4) (SPS 0.8, set 6) m4supst__a6 - Super Streak (Barcrest) (MPU4) (set 70) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 1) m4supst__a7 - Super Streak (Barcrest) (MPU4) (set 71) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 2) m4supst__a8 - Super Streak (Barcrest) (MPU4) (set 72) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 3) m4supst__a9 - Super Streak (Barcrest) (MPU4) (set 73) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 4) m4supst__aa - Super Streak (Barcrest) (MPU4) (set 38) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 5) m4supst__ab - Super Streak (Barcrest) (MPU4) (set 39) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 6) m4supst__ac - Super Streak (Barcrest) (MPU4) (set 40) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 7) m4supst__ad - Super Streak (Barcrest) (MPU4) (set 41) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 8) m4supst__ae - Super Streak (Barcrest) (MPU4) (set 42) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 9) m4supst__af - Super Streak (Barcrest) (MPU4) (set 43) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 10) m4supst__ag - Super Streak (Barcrest) (MPU4) (set 44) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 11) m4supst__ah - Super Streak (Barcrest) (MPU4) (set 45) + Super Streak (Barcrest) (MPU4) (CS4 0.3 / CSU 0.3, set 12) m4supst__ai - Super Streak (Barcrest) (MPU4) (set 46) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 1) m4supst__aj - Super Streak (Barcrest) (MPU4) (set 47) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 2) m4supst__ak - Super Streak (Barcrest) (MPU4) (set 48) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 3) m4supst__al - Super Streak (Barcrest) (MPU4) (set 49) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 4) m4supst__am - Super Streak (Barcrest) (MPU4) (set 50) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 5) m4supst__an - Super Streak (Barcrest) (MPU4) (set 51) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 6) m4supst__ao - Super Streak (Barcrest) (MPU4) (set 52) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 7) m4supst__ap - Super Streak (Barcrest) (MPU4) (set 53) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 8) m4supst__aq - Super Streak (Barcrest) (MPU4) (set 54) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 9) m4supst__ar - Super Streak (Barcrest) (MPU4) (set 55) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 10) m4supst__as - Super Streak (Barcrest) (MPU4) (set 56) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 11) m4supst__at - Super Streak (Barcrest) (MPU4) (set 57) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / EEH 0.2, set 12) m4supst__au - Super Streak (Barcrest) (MPU4) (set 58) + Super Streak (Barcrest) (MPU4) (SP8 0.1, set 1) m4supst__av - Super Streak (Barcrest) (MPU4) (set 59) + Super Streak (Barcrest) (MPU4) (SP8 0.1, set 2) m4supst__aw - Super Streak (Barcrest) (MPU4) (set 60) + Super Streak (Barcrest) (MPU4) (SP8 0.1, set 3) m4supst__ax - Super Streak (Barcrest) (MPU4) (set 61) + Super Streak (Barcrest) (MPU4) (SP8 0.1, set 4) m4supst__ay - Super Streak (Barcrest) (MPU4) (set 62) + Super Streak (Barcrest) (MPU4) (SP8 0.1, set 5) m4supst__az - Super Streak (Barcrest) (MPU4) (set 63) + Super Streak (Barcrest) (MPU4) (SP8 0.1, set 6) m4supst__b - Super Streak (Barcrest) (MPU4) (set 3) + Super Streak (Barcrest) (MPU4) (CS4 0.7, set 3) m4supst__b0 - Super Streak (Barcrest) (MPU4) (set 100) + Super Streak (Barcrest) (MPU4) (STU 0.1, set 8) m4supst__b1 - Super Streak (Barcrest) (MPU4) (set 101) + Super Streak (Barcrest) (MPU4) (STU 0.1, set 9) m4supst__b2 - Super Streak (Barcrest) (MPU4) (set 102) + Super Streak (Barcrest) (MPU4) (STU 0.1, set 10) m4supst__b3 - Super Streak (Barcrest) (MPU4) (set 103) + Super Streak (Barcrest) (MPU4) (STU 0.1, set 11) m4supst__b4 - Super Streak (Barcrest) (MPU4) (set 104) + Super Streak (Barcrest) (MPU4) (STT 0.2K) m4supst__b5 - Super Streak (Barcrest) (MPU4) (set 105) + Super Streak (Barcrest) (MPU4) (STT 0.3, hack) + + + m4supst__b6 + Super Streak (Barcrest) (MPU4) (hack) + + + m4supst__b7 + Super Streak (Barcrest) (MPU4) (SS2 1.0, hack?) m4supst__ba - Super Streak (Barcrest) (MPU4) (set 74) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 5) m4supst__bb - Super Streak (Barcrest) (MPU4) (set 75) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 6) m4supst__bc - Super Streak (Barcrest) (MPU4) (set 76) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 7) m4supst__bd - Super Streak (Barcrest) (MPU4) (set 77) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 8) m4supst__be - Super Streak (Barcrest) (MPU4) (set 78) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 9) m4supst__bf - Super Streak (Barcrest) (MPU4) (set 79) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 10) m4supst__bg - Super Streak (Barcrest) (MPU4) (set 80) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 11) m4supst__bh - Super Streak (Barcrest) (MPU4) (set 81) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / STC 0.2, set 12) m4supst__bi - Super Streak (Barcrest) (MPU4) (set 82) + Super Streak (Barcrest) (MPU4) (STT 0.3, set 1) m4supst__bj - Super Streak (Barcrest) (MPU4) (set 83) + Super Streak (Barcrest) (MPU4) (STT 0.3, set 2) m4supst__bk - Super Streak (Barcrest) (MPU4) (set 84) + Super Streak (Barcrest) (MPU4) (STT 0.3, set 3) m4supst__bl - Super Streak (Barcrest) (MPU4) (set 85) + Super Streak (Barcrest) (MPU4) (STT 0.3, set 4) m4supst__bm - Super Streak (Barcrest) (MPU4) (set 86) + Super Streak (Barcrest) (MPU4) (STT 0.3, set 5) m4supst__bn - Super Streak (Barcrest) (MPU4) (set 87) + Super Streak (Barcrest) (MPU4) (STT 0.3, set 6) m4supst__bo - Super Streak (Barcrest) (MPU4) (set 88) + Super Streak (Barcrest) (MPU4) (STT 0.3, set 7) m4supst__bp - Super Streak (Barcrest) (MPU4) (set 89) + Super Streak (Barcrest) (MPU4) (STT 0.3, set 8) m4supst__bq - Super Streak (Barcrest) (MPU4) (set 90) + Super Streak (Barcrest) (MPU4) (STT 0.3, set 9) m4supst__br - Super Streak (Barcrest) (MPU4) (set 91) + Super Streak (Barcrest) (MPU4) (STT 0.3, set 10) m4supst__bs - Super Streak (Barcrest) (MPU4) (set 92) + Super Streak (Barcrest) (MPU4) (STT 0.3, set 11) m4supst__bt - Super Streak (Barcrest) (MPU4) (set 93) + Super Streak (Barcrest) (MPU4) (STU 0.1, set 1) m4supst__bu - Super Streak (Barcrest) (MPU4) (set 94) + Super Streak (Barcrest) (MPU4) (STU 0.1, set 2) m4supst__bv - Super Streak (Barcrest) (MPU4) (set 95) + Super Streak (Barcrest) (MPU4) (STU 0.1, set 3) m4supst__bw - Super Streak (Barcrest) (MPU4) (set 96) + Super Streak (Barcrest) (MPU4) (STU 0.1, set 4) m4supst__bx - Super Streak (Barcrest) (MPU4) (set 97) + Super Streak (Barcrest) (MPU4) (STU 0.1, set 5) m4supst__by - Super Streak (Barcrest) (MPU4) (set 98) + Super Streak (Barcrest) (MPU4) (STU 0.1, set 6) m4supst__bz - Super Streak (Barcrest) (MPU4) (set 99) + Super Streak (Barcrest) (MPU4) (STU 0.1, set 7) m4supst__c - Super Streak (Barcrest) (MPU4) (set 4) + Super Streak (Barcrest) (MPU4) (CS4 0.7, set 4) m4supst__d - Super Streak (Barcrest) (MPU4) (set 5) + Super Streak (Barcrest) (MPU4) (CS4 0.7, set 5) m4supst__e - Super Streak (Barcrest) (MPU4) (set 6) + Super Streak (Barcrest) (MPU4) (CS4 0.7, set 6) m4supst__f - Super Streak (Barcrest) (MPU4) (set 7) + Super Streak (Barcrest) (MPU4) (CS4 0.7, set 7) m4supst__g - Super Streak (Barcrest) (MPU4) (set 8) + Super Streak (Barcrest) (MPU4) (CS4 0.7, set 8) m4supst__h - Super Streak (Barcrest) (MPU4) (set 9) + Super Streak (Barcrest) (MPU4) (CS4 0.7, set 9) m4supst__i - Super Streak (Barcrest) (MPU4) (set 10) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 1) m4supst__j - Super Streak (Barcrest) (MPU4) (set 11) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 2) m4supst__k - Super Streak (Barcrest) (MPU4) (set 12) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 3) m4supst__l - Super Streak (Barcrest) (MPU4) (set 13) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 4) m4supst__m - Super Streak (Barcrest) (MPU4) (set 14) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 5) m4supst__n - Super Streak (Barcrest) (MPU4) (set 15) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 6) m4supst__o - Super Streak (Barcrest) (MPU4) (set 16) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 7) m4supst__p - Super Streak (Barcrest) (MPU4) (set 17) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 8) m4supst__q - Super Streak (Barcrest) (MPU4) (set 18) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 9) m4supst__r - Super Streak (Barcrest) (MPU4) (set 19) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 10) m4supst__s - Super Streak (Barcrest) (MPU4) (set 20) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 11) m4supst__t - Super Streak (Barcrest) (MPU4) (set 21) + Super Streak (Barcrest) (MPU4) (CS4 0.2 / CSP 0.2, set 12) m4supst__u - Super Streak (Barcrest) (MPU4) (set 22) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 1) m4supst__v - Super Streak (Barcrest) (MPU4) (set 23) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 2) m4supst__w - Super Streak (Barcrest) (MPU4) (set 24) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 3) m4supst__x - Super Streak (Barcrest) (MPU4) (set 25) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 4) m4supst__y - Super Streak (Barcrest) (MPU4) (set 26) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 5) m4supst__z - Super Streak (Barcrest) (MPU4) (set 27) + Super Streak (Barcrest) (MPU4) (CS4 0.4 / CST 0.4, set 6) m4suptrn - Supatron (Barcrest) (MPU4) + Supatron (Barcrest) (MPU4) (DSU 2.1) m4suptub - Super Tubes (Barcrest) (MPU4) (S4T 1.0, set 1)) + Super Tubes (Barcrest) (MPU4) (S4T 1.0, set 1) m4suptuba @@ -70545,23 +72949,23 @@ m4suptwo - Super Two (Barcrest) (MPU4) + Super Two (Barcrest) (MPU4) (SUT 1.2) m4sure - Sure Thing (Bwb) (MPU4) (set 1) + Sure Thing (BWB) (MPU4) (set 1) m4sure__a - Sure Thing (Bwb) (MPU4) (set 2) + Sure Thing (BWB) (MPU4) (set 2) m4sure__b - Sure Thing (Bwb) (MPU4) (set 3) + Sure Thing (BWB) (MPU4) (set 3) m4sure__c - Sure Thing (Bwb) (MPU4) (set 4) + Sure Thing (BWB) (MPU4) (set 4) m4surf @@ -70577,19 +72981,23 @@ m4swpnot - Swap-A-Note (Barcrest) (v3.3) (MPU4) + Swap-A-Note (Barcrest) (MPU4) (SN 3.3) m4swpnota - Swap-A-Note (Barcrest) (v3.2D) (MPU4) + Swap-A-Note (Barcrest) (MPU4) (SN 3.2) + + + m4swpnotb + Swap-A-Note (Barcrest) (MPU4) (SN 3.5) m4t266 - unknown MPU4 'TTO 1.1' (MPU4?) + Take Two (Barcrest) (MPU4) (TTO 1.1) (set 2) m4taj - Taj Mahal (Barcrest) (Dutch) (MPU4) + Taj Mahal (Barcrest) (Dutch) (MPU4) (DTM 1.0) m4take2 @@ -70597,11 +73005,11 @@ m4take2a - Take Two (Barcrest) (MPU4) (TTO 1.1) + Take Two (Barcrest) (MPU4) (TTO 1.1) (set 1) m4take5 - Take 5 (Barcrest) (MPU4) + Top Tenner ('Take 5' bootleg) (MPU4) (TES 2.0) m4takepk @@ -70721,31 +73129,39 @@ m4tbplay - Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 1) + Turbo Play (Barcrest) (Dutch) (MPU4) (DTP 1.3) m4tbplaya - Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 2) + Turbo Play (Barcrest) (MPU4) (CTP 0.4) m4tbplayb - Turbo Play (Barcrest) (Dutch) (MPU4) (DTP) (set 3) + Turbo Play (Barcrest) (MPU4) (ZTP 0.7) + + + m4tbplayc + Turbo Play (Barcrest) (bootleg) (MPU4) (CTP 0.4) + + + m4tbplayd + Turbo Play (Barcrest) (bootleg) (MPU4) (ZTP 0.7) m4tbreel - Turbo Reel (Barcrest) (Dutch) (MPU4) (set 1) + Turbo Reel (Barcrest) (Dutch) (MPU4) (DTR 3.1) m4tbrldx - Turbo Reel (Barcrest) (Dutch) (MPU4) (set 3, Deluxe?) + Turbo Reel Deluxe (Barcrest) (Dutch) (MPU4) (DTU 3.0) m4techno - Techno Reel (Barcrest) (MPU4) (DTE) (set 1) + Techno Reel (Barcrest) (Dutch) (MPU4) (DTE 1.3, set 1) m4technoa - Techno Reel (Barcrest) (MPU4) (DTE) (set 2) + Techno Reel (Barcrest) (Dutch) (MPU4) (DTE 1.3, set 2, hack?) m4tenten @@ -71013,7 +73429,7 @@ m4thehit - The Hit (Barcrest) (MPU4) + The Hit (Barcrest) (MPU4) (DTH 1.7) m4themob @@ -71341,11 +73757,11 @@ m4tiktak - Tic Tak Cash (Barcrest) (MPU4) + Tic Tak Cash (Barcrest) (MPU4) (TC 1.1) m4toma - Tomahawk (Barcrest) (MPU4) + Tomahawk (Barcrest) (Dutch) (MPU4) (DTK 2.3) m4toot @@ -71553,15 +73969,15 @@ m4topact - Top Action (Barcrest) (Dutch) (MPU4) (set 1) + Top Action (Barcrest) (Dutch) (MPU4) (TA 2.2, set 1) m4topacta - Top Action (Barcrest) (Dutch) (MPU4) (set 2) + Top Action (Barcrest) (Dutch) (MPU4) (TA 2.2, set 2) m4topdk - Top Deck (Barcrest) (Dutch) (MPU4) + Top Deck (Barcrest) (Dutch) (MPU4) (DT 2.6) m4topdog @@ -71673,7 +74089,7 @@ m4topgr - Top Gear (Barcrest) (MPU4) + Top Gear (Barcrest) (MPU4) (TG4 1.1) m4toplot @@ -71681,15 +74097,15 @@ m4toprn - Top Run (Barcrest) (Dutch) (MPU4) + Top Run (Dutch) (MPU4) m4topst - Top Stop (Barcrest) (MPU4) + Top Stop (Barcrest) (MPU4) (TSP 0.5) m4toptak - Top Take (Barcrest) (MPU4) + Top Take (Barcrest) (MPU4) (TTK 1.1) m4topten @@ -71933,11 +74349,11 @@ m4toptim - Top Timer (Barcrest) (Dutch) (MPU4) (DTT) (set 1) + Top Timer (Barcrest) (Dutch) (MPU4) (DTT 1.8, set 1) m4toptima - Top Timer (Barcrest) (Dutch) (MPU4) (DTT) (set 2) + Top Timer (Barcrest) (Dutch) (MPU4) (DTT 1.8, set 2) m4tornad @@ -71981,55 +74397,55 @@ m4trex - Trex (Bwb) (MPU4) (set 1) + T-Rex (BWB) (MPU4) (set 1) m4trex__a - Trex (Bwb) (MPU4) (set 2) + T-Rex (BWB) (MPU4) (set 2) m4trex__b - Trex (Bwb) (MPU4) (set 3) + T-Rex (BWB) (MPU4) (set 3) m4trex__c - Trex (Bwb) (MPU4) (set 4) + T-Rex (BWB) (MPU4) (set 4) m4trex__d - Trex (Bwb) (MPU4) (set 5) + T-Rex (BWB) (MPU4) (set 5) m4trex__e - Trex (Bwb) (MPU4) (set 6) + T-Rex (BWB) (MPU4) (set 6) m4trex__f - Trex (Bwb) (MPU4) (set 7) + T-Rex (BWB) (MPU4) (set 7) m4trex__g - Trex (Bwb) (MPU4) (set 8) + T-Rex (BWB) (MPU4) (set 8) m4trex__h - Trex (Bwb) (MPU4) (set 9) + T-Rex (BWB) (MPU4) (set 9) m4trex__i - Trex (Bwb) (MPU4) (set 10) + T-Rex (BWB) (MPU4) (set 10) m4trex__j - Trex (Bwb) (MPU4) (set 11) + T-Rex (BWB) (MPU4) (set 11) m4trex__k - Trex (Bwb) (MPU4) (set 12) + T-Rex (BWB) (MPU4) (set 12) m4trex__l - Trex (Bwb) (MPU4) (set 13) + T-Rex (BWB) (MPU4) (set 13) m4trg @@ -72161,15 +74577,11 @@ m4tribnk - Triple Bank (Barcrest) (Dutch) (MPU4) + Triple Bank (Barcrest) (Dutch) (MPU4) (DTB 1.2) m4tricol - Tricolor (Barcrest) (Dutch) (MPU4) - - - m4tridic - Triple Dice (Barcrest) (Dutch) (MPU4) + Tricolor (Barcrest) (Dutch) (MPU4) (DTC 2.5) m4trimad @@ -72177,23 +74589,23 @@ m4tropcl - Tropicana Club (Barcrest) (MPU4) (set 1) + Tropicana Club (Barcrest) (MPU4) (TRO 2.0, set 1) m4tropcla - Tropicana Club (Barcrest) (MPU4) (set 2) + Tropicana Club (Barcrest) (MPU4) (TR2 1.1, set 1) m4tropclb - Tropicana Club (Barcrest) (MPU4) (set 3) + Tropicana Club (Barcrest) (MPU4) (TR2 1.1, set 2) m4tropclc - Tropicana Club (Barcrest) (MPU4) (set 4) + Tropicana Club (Barcrest) (MPU4) (TR2 1.1, set 3) m4tropcld - Tropicana Club (Barcrest) (MPU4) (set 5) + Tropicana Club (Barcrest) (MPU4) (TRO 2.0, set 2) m4tst @@ -72205,7 +74617,7 @@ m4ttak - Tic Tac Take (unknown) (MPU4) + Tic Tac Take (Barcrest) (MPU4) (TIC 2.0) m4ttdia @@ -72277,55 +74689,99 @@ m4tupen - Tuppenny Cracker (Barcrest - Bootleg) (MPU4) + Tuppenny Cracker (unprotected bootleg) (MPU4) + + + m4tutbwb + Tutti Fruity (BWB) (MPU4) (set 1) + + + m4tutbwb_a + Tutti Fruity (BWB) (MPU4) (set 2) + + + m4tutbwb_b + Tutti Fruity (BWB) (MPU4) (set 3) + + + m4tutbwb_c + Tutti Fruity (BWB) (MPU4) (set 4) + + + m4tutbwb_d + Tutti Fruity (BWB) (MPU4) (set 5) + + + m4tutbwb_e + Tutti Fruity (BWB) (MPU4) (set 6) + + + m4tutbwb_f + Tutti Fruity (BWB) (MPU4) (set 7) + + + m4tutbwb_g + Tutti Fruity (BWB) (MPU4) (set 8) + + + m4tutbwb_h + Tutti Fruity (BWB) (MPU4) (set 9) + + + m4tutbwb_i + Tutti Fruity (BWB) (MPU4) (set 10) + + + m4tutbwb_j + Tutti Fruity (BWB) (MPU4) (set 11) m4tutcl - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1) m4tutcl__a - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 B) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 B) m4tutcl__b - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 BD) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 BD) m4tutcl__c - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 C) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 C) m4tutcl__d - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 D) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 D) m4tutcl__e - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 KD) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 KD) m4tutcl__f - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 RD) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 RD) m4tutcl__g - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 YD) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 YD) m4tutcl__h - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 K) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 K) m4tutcl__i - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 R) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 R) m4tutcl__j - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 AD) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 AD) m4tutcl__k - Tutti Fruity Classic (Barcrest) (MPU4) (F2U 0.1 Y) + Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 Y) m4tutfrt @@ -72375,30 +74831,6 @@ m4tutfrt__a Tutti Fruity (Barcrest) (MPU4) (CTU 0.1 AD) - - m4tutfrt__a0 - Tutti Fruity (Bwb) (MPU4) (set 6) - - - m4tutfrt__a1 - Tutti Fruity (Bwb) (MPU4) (set 7) - - - m4tutfrt__a2 - Tutti Fruity (Bwb) (MPU4) (set 8) - - - m4tutfrt__a3 - Tutti Fruity (Bwb) (MPU4) (set 9) - - - m4tutfrt__a4 - Tutti Fruity (Bwb) (MPU4) (set 10) - - - m4tutfrt__a5 - Tutti Fruity (Bwb) (MPU4) (set 11) - m4tutfrt__aa Tutti Fruity (Barcrest) (MPU4) (TF4 0.2 BD) @@ -72479,26 +74911,6 @@ m4tutfrt__au Tutti Fruity (Barcrest) (MPU4) (F2U 0.1 B, hack, set 2) - - m4tutfrt__av - Tutti Fruity (Bwb) (MPU4) (set 1) - - - m4tutfrt__aw - Tutti Fruity (Bwb) (MPU4) (set 2) - - - m4tutfrt__ax - Tutti Fruity (Bwb) (MPU4) (set 3) - - - m4tutfrt__ay - Tutti Fruity (Bwb) (MPU4) (set 4) - - - m4tutfrt__az - Tutti Fruity (Bwb) (MPU4) (set 5) - m4tutfrt__b Tutti Fruity (Barcrest) (MPU4) (CTU 0.1 B) @@ -72601,7 +75013,7 @@ m4twilgt - Twilight (Barcrest) (Dutch) (MPU4) + Twilight (Barcrest) (Dutch) (MPU4) (DTL 2.2) m4twintm @@ -72609,15 +75021,15 @@ m4twist - Twist Again (Barcrest) (MPU4) (set 1) + Twist Again (J.A. Brown) (MPU4) (TA 9.6, set 1) m4twista - Twist Again (Barcrest) (MPU4) (set 2) + Twist Again (J.A. Brown) (MPU4) (TA 9.6, set 2) m4twistb - Twist Again (Barcrest) (MPU4) (set 3) + Twist Again (J.A. Brown) (MPU4) (TA 9.6, set 3) m4twstcl @@ -72697,23 +75109,23 @@ m4univ - Universe (Barcrest) (Dutch) (MPU4) (DUN) + Universe (Barcrest) (Dutch) (MPU4) (DUN 2.0) m4unkjok - unknown MPU4 'Joker' (MPU4?) (set 1) + Jolly Joker (Barcrest) (MPU4) (bootleg) (JJ1 0.1, set 1) m4unkjoka - unknown MPU4 'Joker' (MPU4?) (set 2) + Jolly Joker (Barcrest) (MPU4) (bootleg) (JJ1 0.1. set 2) m4unkjokb - unknown MPU4 'Joker' (MPU4?) (set 3) + Jolly Taverner (Barcrest) (bootleg) (MPU4) (TAV 1.1, set 1) m4unkjokc - unknown MPU4 'Joker' (MPU4?) (set 4) + Jolly Taverner (Barcrest) (bootleg) (MPU4) (TAV 1.1, set 2) m4uuaw @@ -72933,123 +75345,127 @@ m4vdexpr - Voodoo Express (Bwb) (MPU4) (set 1) + Voodoo Express (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot) (set 1) m4vdexpr__a - Voodoo Express (Bwb) (MPU4) (set 2) + Voodoo Express (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot) (set 2) m4vdexpr__b - Voodoo Express (Bwb) (MPU4) (set 3) + Voodoo Express (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot) (set 3) m4vdexpr__c - Voodoo Express (Bwb) (MPU4) (set 4) + Voodoo Express (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot) (set 4) m4vdexpr__d - Voodoo Express (Bwb) (MPU4) (set 5) + Voodoo Express (BWB) (MPU4) (5/10p stake / £5/£8 jackpot) m4vegast - Vegas Strip (Barcrest) (MPU4) (UVS 0.3) + Las Vegas Strip (Barcrest) (MPU4) (UVS 0.3) + + + m4vegast__0 + Las Vegas Strip (Barcrest) (bootleg) (MPU4) (VSG 0.4) + + + m4vegast__1 + Las Vegas Strip (Barcrest) (bootleg) (MPU4) (UVS 0.3) m4vegast__a - Vegas Strip (Barcrest) (MPU4) (UVS 0.3 B) + Las Vegas Strip (Barcrest) (MPU4) (UVS 0.3 B) m4vegast__b - Vegas Strip (Barcrest) (MPU4) (UVS 0.3 BD) + Las Vegas Strip (Barcrest) (MPU4) (UVS 0.3 BD) m4vegast__c - Vegas Strip (Barcrest) (MPU4) (UVS 0.3 C) + Las Vegas Strip (Barcrest) (MPU4) (UVS 0.3 C) m4vegast__d - Vegas Strip (Barcrest) (MPU4) (UVS 0.3 D) + Las Vegas Strip (Barcrest) (MPU4) (UVS 0.3 D) m4vegast__e - Vegas Strip (Barcrest) (MPU4) (UVS 0.3 KD) + Las Vegas Strip (Barcrest) (MPU4) (UVS 0.3 KD) m4vegast__f - Vegas Strip (Barcrest) (MPU4) (UVS 0.3 YD) + Las Vegas Strip (Barcrest) (MPU4) (UVS 0.3 YD) m4vegast__g - Vegas Strip (Barcrest) (MPU4) (UVS 0.3 K) + Las Vegas Strip (Barcrest) (MPU4) (UVS 0.3 K) m4vegast__h - Vegas Strip (Barcrest) (MPU4) (UVS 0.3 AD) + Las Vegas Strip (Barcrest) (MPU4) (UVS 0.3 AD) m4vegast__i - Vegas Strip (Barcrest) (MPU4) (UVS 0.3 Y) + Las Vegas Strip (Barcrest) (MPU4) (UVS 0.3 Y) m4vegast__j - Vegas Strip (Barcrest) (MPU4) (VSG 0.4 AD) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4 AD) m4vegast__k - Vegas Strip (Barcrest) (MPU4) (VSG 0.4 B) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4 B) m4vegast__l - Vegas Strip (Barcrest) (MPU4) (VSG 0.4 BD) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4 BD) m4vegast__m - Vegas Strip (Barcrest) (MPU4) (VSG 0.4 C) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4 C) m4vegast__n - Vegas Strip (Barcrest) (MPU4) (VSG 0.4 D) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4 D) m4vegast__o - Vegas Strip (Barcrest) (MPU4) (VSG 0.4 KD) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4 KD) m4vegast__p - Vegas Strip (Barcrest) (MPU4) (VSG 0.4 RD) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4 RD) m4vegast__q - Vegas Strip (Barcrest) (MPU4) (VSG 0.4 YD) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4 YD) m4vegast__r - Vegas Strip (Barcrest) (MPU4) (VSG 0.4 K) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4 K) m4vegast__s - Vegas Strip (Barcrest) (MPU4) (VSG 0.4 R) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4 R) m4vegast__t - Vegas Strip (Barcrest) (MPU4) (VSG 0.4) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4) m4vegast__u - Vegas Strip (Barcrest) (MPU4) (VSG 0.4 Y) - - - m4vegast__v - Vegas Strip (Barcrest) (MPU4) (VSG 0.3 YE, hack?) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.4 Y) m4vegast__x - Vegas Strip (Barcrest) (MPU4) (VSG 0.3) + Las Vegas Strip (Barcrest) (MPU4) (VSG 0.3) m4vegastg - Vegas Strip (Barcrest) [German] (MPU4) + Vegas Strip (Barcrest) (German) (MPU4) m4vfm @@ -73269,155 +75685,147 @@ m4vivalv - Viva Las Vegas (Barcrest) (MPU4) (set 1) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.1, set 7) m4vivalv__0 - Viva Las Vegas (Barcrest) (MPU4) (set 28) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, hack?, set 2) m4vivalv__1 - Viva Las Vegas (Barcrest) (MPU4) (set 29) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, hack?, set 3) m4vivalv__2 - Viva Las Vegas (Barcrest) (MPU4) (set 30) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, hack?, set 4) m4vivalv__3 - Viva Las Vegas (Barcrest) (MPU4) (set 31) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, hack?, set 5) m4vivalv__4 - Viva Las Vegas (Barcrest) (MPU4) (set 32) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, hack?, set 6) m4vivalv__5 - Viva Las Vegas (Barcrest) (MPU4) (set 33) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, hack?, set 7) m4vivalv__6 - Viva Las Vegas (Barcrest) (MPU4) (set 34) - - - m4vivalv__7 - Viva Las Vegas (Barcrest) (MPU4) (set 35) - - - m4vivalv__8 - Viva Las Vegas (Barcrest) (MPU4) (set 36) - - - m4vivalv__9 - Viva Las Vegas (Barcrest) (MPU4) (set 37) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, hack ? , set 8) m4vivalv__a - Viva Las Vegas (Barcrest) (MPU4) (set 2) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.1, set 1) m4vivalv__b - Viva Las Vegas (Barcrest) (MPU4) (set 3) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.1, set 2) m4vivalv__c - Viva Las Vegas (Barcrest) (MPU4) (set 4) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.1, set 3) + + + m4vivalv__d + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.1, set 4) m4vivalv__e - Viva Las Vegas (Barcrest) (MPU4) (set 6) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.1, set 5) m4vivalv__f - Viva Las Vegas (Barcrest) (MPU4) (set 7) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.1, set 6) m4vivalv__g - Viva Las Vegas (Barcrest) (MPU4) (set 8) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.1, set 8) m4vivalv__h - Viva Las Vegas (Barcrest) (MPU4) (set 9) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.0) m4vivalv__i - Viva Las Vegas (Barcrest) (MPU4) (set 10) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 1) m4vivalv__j - Viva Las Vegas (Barcrest) (MPU4) (set 11) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 2) m4vivalv__k - Viva Las Vegas (Barcrest) (MPU4) (set 12) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 3) m4vivalv__l - Viva Las Vegas (Barcrest) (MPU4) (set 13) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 4) m4vivalv__m - Viva Las Vegas (Barcrest) (MPU4) (set 14) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 5) m4vivalv__n - Viva Las Vegas (Barcrest) (MPU4) (set 15) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 6) m4vivalv__o - Viva Las Vegas (Barcrest) (MPU4) (set 16) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 7) m4vivalv__p - Viva Las Vegas (Barcrest) (MPU4) (set 17) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 8) m4vivalv__q - Viva Las Vegas (Barcrest) (MPU4) (set 18) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 9) m4vivalv__r - Viva Las Vegas (Barcrest) (MPU4) (set 19) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 10) m4vivalv__s - Viva Las Vegas (Barcrest) (MPU4) (set 20) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 11) m4vivalv__t - Viva Las Vegas (Barcrest) (MPU4) (set 21) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, set 12) m4vivalv__u - Viva Las Vegas (Barcrest) (MPU4) (set 22) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.0, hack?, set 1) m4vivalv__v - Viva Las Vegas (Barcrest) (MPU4) (set 23) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.0, hack?, set 2) m4vivalv__w - Viva Las Vegas (Barcrest) (MPU4) (set 24) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.0, hack?, set 3) m4vivalv__x - Viva Las Vegas (Barcrest) (MPU4) (set 25) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.0, hack?, set 4) m4vivalv__y - Viva Las Vegas (Barcrest) (MPU4) (set 26) + Viva Las Vegas (Barcrest) (MPU4) (VLV 1.0, hack?, set 5) m4vivalv__z - Viva Las Vegas (Barcrest) (MPU4) (set 27) + Viva Las Vegas (BWB) (MPU4) (VL_ 2.0, hack?, set 1) m4vivalvd - Viva Las Vegas (Barcrest) [Dutch] (MPU4) (DLV) + Viva Las Vegas (Barcrest) (Dutch) (MPU4) (DLV 1.1) m4vivan - Viva Las Vegas (Nova) (MPU4) + Viva Las Vegas (Nova) (German) (MPU4) (GLV 1.2) m4vivess @@ -73577,35 +75985,35 @@ m4volcan - Volcano (Bwb) (MPU4) (set 1) + Volcano (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot) (set 1) m4volcan__a - Volcano (Bwb) (MPU4) (set 2) + Volcano (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot) (set 2) m4volcan__b - Volcano (Bwb) (MPU4) (set 3) + Volcano (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot) (set 3) m4volcan__c - Volcano (Bwb) (MPU4) (set 4) + Volcano (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot) (set 4) m4volcan__d - Volcano (Bwb) (MPU4) (set 5) + Volcano (BWB) (MPU4) (20/25/30p stake / £5/£10/£15 jackpot) (set 5) m4volcan__e - Volcano (Bwb) (MPU4) (set 6) + Volcano (BWB) (MPU4) (5/10p stake / £5/£8 jackpot) (set 1) m4volcan__f - Volcano (Bwb) (MPU4) (set 7) + Volcano (BWB) (MPU4) (5/10p stake / £5/£8 jackpot) (set 2) m4volcan__g - Volcano (Bwb) (MPU4) (set 8) + Volcano (BWB) (MPU4) (5/10p stake / £5/£8 jackpot) (set 3) m4voodoo @@ -73613,11 +76021,11 @@ m4wayin - Way In (Barcrest) (MPU4) (set 1) + Super Way In (Barcrest) (MPU4) (WS 1.0) m4wayina - Way In (Barcrest) (MPU4) (set 2) + Way In Mk 2 (Barcrest) (bootleg) (MPU4) m4wcnov @@ -73629,7 +76037,7 @@ m4wildms - Wild Mystery (Barcrest) (Dutch) (MPU4) + Wild Mystery (Barcrest) (Dutch) (MPU4) (DWM 1.8) m4wildtm @@ -73637,7 +76045,7 @@ m4wnud - unknown MPU4 'W Nudge' (MPU4?) + unknown MPU4 'W Nudge' (J.A. Brown) (MPU4) m4wta @@ -73821,91 +76229,91 @@ m4xch - X-change (Bwb) (MPU4) (set 1) + X-change (BWB) (MPU4) (25p stake / £10 jackpot) m4xch__a - X-change (Bwb) (MPU4) (set 2) + X-change (BWB) (MPU4) (25p stake / £8 jackpot) (set 1) m4xch__b - X-change (Bwb) (MPU4) (set 3) + X-change (BWB) (MPU4) (25p stake / £8 jackpot) (set 2) m4xch__c - X-change (Bwb) (MPU4) (set 4) + X-change (BWB) (MPU4) (25p stake / £15 jackpot) (set 1) m4xch__d - X-change (Bwb) (MPU4) (set 5) + X-change (BWB) (MPU4) (25p stake / £15 jackpot) (set 2) m4xch__e - X-change (Bwb) (MPU4) (set 6) + X-change (BWB) (MPU4) (25p stake / £15 jackpot) (set 3) m4xch__f - X-change (Bwb) (MPU4) (set 7) + X-change (BWB) (MPU4) (30p stake / £15 jackpot) (set 1) m4xch__g - X-change (Bwb) (MPU4) (set 8) + X-change (BWB) (MPU4) (30p stake / £15 jackpot) (set 2) m4xch__h - X-change (Bwb) (MPU4) (set 9) + X-change (BWB) (MPU4) (20/25/30p stake / £15 jackpot) m4xch__i - X-change (Bwb) (MPU4) (set 10) + X-change (BWB) (MPU4) (10/20/25/30p stake / £5/£8/£10 jackpot, 20/25/30p stake / £15 jackpot) (set 1) m4xch__j - X-change (Bwb) (MPU4) (set 11) + X-change (BWB) (MPU4) (10/20/25/30p stake / £5/£8/£10 jackpot, 20/25/30p stake / £15 jackpot) (set 2) m4xch__k - X-change (Bwb) (MPU4) (set 12) + X-change (BWB) (MPU4) (unknown set, bad?) m4xs - X-s (Bwb) (MPU4) (set 1) + X-s (BWB) (MPU4) (25p stake / £15 jackpot) (set 1) m4xs__a - X-s (Bwb) (MPU4) (set 2) + X-s (BWB) (MPU4) (25p stake / £15 jackpot) (set 2) m4xs__b - X-s (Bwb) (MPU4) (set 3) + X-s (BWB) (MPU4) (25p stake / £15 jackpot) (set 3) m4xs__c - X-s (Bwb) (MPU4) (set 4) + X-s (BWB) (MPU4) (25p stake / £15 jackpot) (set 4) m4xs__d - X-s (Bwb) (MPU4) (set 5) + X-s (BWB) (MPU4) (30p stake / £15 jackpot) (set 1) m4xs__e - X-s (Bwb) (MPU4) (set 6) + X-s (BWB) (MPU4) (30p stake / £15 jackpot) (set 2) m4xs__f - X-s (Bwb) (MPU4) (set 7) + X-s (BWB) (MPU4) (20/25/30p stake / £15 jackpot) m4xtrm - X-treme (Bwb) (MPU4) (set 1) + X-treme (BWB) (MPU4) (20/25/30p stake / £8/£15 jackpot) m4xtrm__a - X-treme (Bwb) (MPU4) (set 2) + X-treme (BWB) (MPU4) (30p stake / £15 jackpot) m4xtrm__b - X-treme (Bwb) (MPU4) (set 3) + X-treme (BWB) (MPU4) (25p stake / £15 jackpot) m4zill @@ -73915,6 +76323,10 @@ m4zilla Zillionare's Challenge (Pure Leisure) (MPU4) (set 2) + + m5001 + M5001 (rev. A) + m55050 Fifty Fifty (Bwb) (MPU5) @@ -76455,9 +78867,37 @@ m79amb M-79 Ambush + + m_bappl2 + Big Apple (Leisure Games) (MPU1) (5p Stake, £2 Jackpot) + + + m_bapple + Big Apple (Leisure Games) (MPU1) (5p Stake, £1 Jackpot) + + + m_gndgit + Golden Nudge It (Barcrest) (MPU1) (5p Stake, £1 Jackpot) + + + m_lndg + Lucky Nudge (Leisure Games) (MPU1) (5p Stake, £1 Jackpot) + m_mpac - Mr. and Mrs. PacMan + Mr. and Mrs. PacMan (set 1) + + + m_mpacb + Mr. and Mrs. PacMan (set 2) + + + m_mtchit + Match It (Barcrest) (MPU1) (5p Stake, £1 Jackpot) + + + m_mtchup + Match Up (Barcrest) (MPU1) (10p Stake, £2 Jackpot) m_tppokr @@ -76468,21 +78908,29 @@ Multi-Action 6710-13 - ma7551 - Multi-Action 7551 + ma7551p + Multi-Action 7551-21-R2P + + + ma7551t + Multi-Action 7551-20-R3T ma7556 - Multi-Action 7556 + Multi-Action 7556-00-R2 ma7558 - Multi-Action 7558 + Multi-Action 7558-01-R0 mac_1808 unknown game (MAC #1808) + + mac_zois + machinaZOIS Virtual Training Center + macattck Mac Attack @@ -76497,7 +78945,11 @@ macgalxy - MAC's Galaxy + MAC's Galaxy (yellow version, M.6) + + + macgalxyb + MAC's Galaxy (blue version, M.042) mach2 @@ -76525,7 +78977,7 @@ macha - Monoshiri Quiz Osyaberi Macha (Japan) + Monoshiri Quiz Oshaberi Macha (Japan) machbrkr @@ -76663,6 +79115,10 @@ madshark Mad Shark + + madsharkbl + Mad Shark (bootleg) + madzoo Mad Zoo (version U450C) @@ -76671,6 +79127,10 @@ mag10 Magic 10 Nevada (bootleg of Pool 10) + + mag_boob + Booby Kids (Magnet System) + mag_burn The Burning Cavern (31/03/87) @@ -76723,6 +79183,10 @@ magdrop3bh Magical Drop III (Secret Character Hack) + + magdrop3te + Magical Drop III Tournament Edition + magdropp Magical Drop Plus 1 (Japan, Version 2.1, 1995.09.12) @@ -76741,11 +79205,11 @@ magibomba - Magic Bomb (Ver. BR4.4, 04/19/02) + Magic Bomb (Ver. BR4.4, 04/19/02S) magibombb - Magic Bomb (Ver. AB4.5A, 07/10/02) + Magic Bomb (Ver. AB4.5A, 07/10/02S) magibombc @@ -76753,11 +79217,31 @@ magibombd - Magic Bomb (Ver. AA.72D, 14/11/05) + Magic Bomb (Ver. AA.72.D, 14/11/05) magibombe - Magic Bomb (Ver. A3.1A) + Magic Bomb (Ver. A3.1) + + + magibombf + Magic Bomb (Ver. NB4.5, 06/14/02S) + + + magibombg + Magic Bomb (Ver. NB6.1, 26/04/04) + + + magibombh + Magic Bomb (Ver. A4.0A) + + + magibombi + Magic Bomb (Ver. A3.6A) + + + magibombj + Magic Bomb (Ver. AA.72.C, 25/05/05) magic @@ -76789,31 +79273,7 @@ magicard - Magic Card (set 1) - - - magicarda - Magic Card (set 2) - - - magicardb - Magic Card (set 3) - - - magicarde - Magic Card Export 94 - - - magicardf - Magic Export (V.211A) - - - magicardj - Magic Card III Jackpot (4.01) - - - magicardw - Magic Card - Wien (Sicherheitsversion 1.2) + Magic Card (v2.01) magicbal @@ -76851,6 +79311,30 @@ magicle Magic Lotto Export (5.03) + + magicpop + Magical Poppins + + + magicrd1 + Magic Card (v1.10 14.09.94) + + + magicrd1a + Magic Card (v1.5 17.12.93, set 1) + + + magicrd1b + Magic Card (v1.5 17.12.93, set 2) + + + magicrd1c + Magic Card (v1.2 200/93, set 1) + + + magicrd1d + Magic Card (v1.2 200/93, set 2) + magicrd2 Magic Card II (Bulgarian) @@ -76867,10 +79351,38 @@ magicrd2c Magic Card II (blue TAB board, encrypted) + + magicrde + Magic Card Export 94 (v2.11a, set 1) + + + magicrdea + Magic Card Export 94 (v2.11a, set 2) + + + magicrdeb + Magic Card Export 94 (V2.11a, set 3) + + + magicrdec + Magic Card Export 94 (v2.09a) + + + magicrdj + Magic Card III Jackpot (V4.01 6/98) + + + magicrdja + Magic Card III Jackpot (V4.01 7/98) + magicstk Magic Sticks + + magictch + Magic Touch + magictg Magic the Gathering: Armageddon (set 1) @@ -76951,6 +79463,10 @@ magreel Magic Reels + + magslot + Magic Slot (normal 1.0C) + magspeed Magical Speed @@ -76977,7 +79493,7 @@ magtruck - Magical Truck Adventure (Japan) + Magical Truck Adventure (Export) maguila @@ -77053,11 +79569,11 @@ majest12u - Majestic Twelve - The Space Invaders Part IV (US) + Majestic Twelve - The Space Invaders Part IV (US, revised code, Rev 1) majest12ua - Majestic Twelve - The Space Invaders Part IV (US, earlier?) + Majestic Twelve - The Space Invaders Part IV (US, revised code) majest12ub @@ -77079,9 +79595,13 @@ majorpkrc Major Poker (set 4, Micro Manufacturing intro) + + majrjh + Mahjong Raijinhai (Ver. D105) + majrjhdx - Mahjong Raijinhai DX + Mahjong Raijinhai DX (Ver. D105) majs101b @@ -77117,7 +79637,7 @@ majxtal7 - Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan) + Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan, Bet) makaiden @@ -77139,6 +79659,10 @@ makaimur Makaimura (Japan) + + makaimurb + Makaimura (Japan Revision B) + makaimurc Makaimura (Japan Revision C) @@ -77181,7 +79705,7 @@ mamboagga - Mambo A Go-Go e-Amusement (GQA40 VER. JRB) + Mambo A Go-Go (GQA40 VER. JRB, Rental) mammothm @@ -77207,6 +79731,10 @@ mandingarf Mandanga (bootleg of Mandinga on Galaxian hardware, set 1) + + mandinka + Mandinka (bootleg of Amidar) + mangchi Mang-Chi @@ -77257,11 +79785,15 @@ manxtt - Manx TT Superbike - DX (Revision D) + Manx TT Superbike - DX/Twin (Revision D) manxttc - Manx TT Superbike - Twin (Revision C) + Manx TT Superbike - DX/Twin (Revision C) + + + manxttdx + Manx TT Superbike - DX manybloc @@ -77295,6 +79827,10 @@ marble5 Marble Madness (set 5 - LSI Cartridge) + + marblmd2 + Marble Madness II (prototype) + marineb Marine Boy @@ -77333,11 +79869,7 @@ mariojjl - Super Mario Fushigi no JanJanLand - - - mariojp - Mario Bros. (Japan) + Super Mario Fushigi no JanJanLand (Ver.1.00C, 2006/08/29) mariorou @@ -77415,16 +79947,16 @@ martmast104c Martial Masters / Xing Yi Quan (ver. 104, 102, 101CN) - - martmasttw - Martial Masters / Xing Yi Quan (ver. 102, 101, 101TW) - maruchan Maru-Chan de Goo! (J 971216 V1.000) marukin + Super Marukin-Ban (Japan 911128) + + + marukina Super Marukin-Ban (Japan 901017) @@ -77447,10 +79979,6 @@ marvland Marvel Land (Japan) - - marvlandj - Marvel Land (Japan) - marvlandup Marvel Land (US, prototype) @@ -77501,19 +80029,23 @@ mastboy - Master Boy (Spanish, PCB Rev A) + Master Boy (Spanish, rev A) mastboya - Master Boy (Spanish, PCB Rev A, hack?) + Master Boy (Spanish, rev A, hack?) mastboyi - Master Boy (Italian, PCB Rev A, set 1) + Master Boy (Italian, rev A, set 1) mastboyia - Master Boy (Italian, PCB Rev A, set 2) + Master Boy (Italian, rev A, set 2) + + + mastboyiv2 + Master Boy Version II (Italian, rev A) mastboyo @@ -77539,6 +80071,10 @@ mastcranea Master Crane (set 2) + + mastcraneb + Master Crane (set 3) + masterw Master of Weapon (World) @@ -77575,9 +80111,13 @@ match98 Match '98 (ver. 1.33) + + matchem + Match'em Up (6221-51, U5-1) + matchemg - Match'em Up (German) + Match'em Up (6221-55, U5-1 German) matchit @@ -77613,19 +80153,23 @@ mav_100 - Maverick (1.00) + Maverick, The Movie (1.00) + + + mav_200 + Maverick, The Movie (2.00) mav_400 - Maverick (Display Rev. 4.00) + Maverick, The Movie (Display Rev. 4.00) mav_401 - Maverick (Display Rev. 4.01) + Maverick, The Movie (4.02, Display Rev. 4.01) mav_402 - Maverick (Display Rev. 4.02) + Maverick, The Movie (4.04, Display Rev. 4.02) maverik @@ -77651,6 +80195,10 @@ maxideal Maxi-Dealer + + maxidpkr + Maxi Double Poker (version 1.8) + maxrpm Max RPM (ver 2) @@ -77891,6 +80439,10 @@ mcontest Miss Mahjong Contest (Japan) + + mcwars + Macro-Cosm Wars (bootleg of Galaxian) + md23do Mad Dog II: The Lost Gold (3DO hardware) @@ -77939,6 +80491,18 @@ mechattu1 Mechanized Attack (US, Version 1, Single Player) + + medalnt + Medal no Tatsujin Doki! Ooatari-Darake no Sugoroku Matsuri (MTL1 SPR0B) + + + medalnt2 + Medal no Tatsujin 2 Atsumare! Go! Go! Sugoroku Sentai Don Ranger Five (MTA1 STMPR0A) + + + medalnta + Medal no Tatsujin Doki! Ooatari-Darake no Sugoroku Matsuri (MTL1 SPR0A) + medlanes Meadows Lanes @@ -77979,6 +80543,10 @@ megacard Mega Card (Ver.0210, encrypted) + + megacarda + Mega Card (Ver.0053, encrypted) + megadble Mega Double Poker (Ver. 1.63 Espagnol) @@ -78035,10 +80603,6 @@ megamana Mega Man: The Power Battle (CPS1, Asia 951006) - - megamn2a - Mega Man 2: The Power Fighters (Asia 960708) - megamn2d Mega Man 2: The Power Fighters (USA 960708 Phoenix Edition) (bootleg) @@ -78053,7 +80617,7 @@ megat - Pit Boss Megatouch (9234-20-01) + Pit Boss Megatouch (9234-20-01 R0A) megat2 @@ -78243,6 +80807,10 @@ megazonej Mega Zone (program code J) + + megrescu + Megumi Rescue + meijinsn Meijinsen (set 1) @@ -78253,11 +80821,11 @@ meikyuh - Meikyuu Hunter G (Japan, set 1) + Meikyuu Hunter G (Japan) - meikyuha - Meikyuu Hunter G (Japan, set 2) + meikyuhbl + Meikyuu Hunter G (Japan, bootleg) meltyb @@ -78301,12 +80869,16 @@ mercenario - Mercenario (Commando bootleg) + Mercenario (bootleg of Commando) mercs Mercs (World 900302) + + mercsc + Senjo no Ookami II (T-Chi) + mercsj Senjou no Ookami II (Japan 900302) @@ -78453,7 +81025,7 @@ metmqstr - Metamoqester (International) + Metamoqester (World) metrocra @@ -78473,11 +81045,15 @@ mexico86 - Mexico 86 (bootleg of Kick and Run) (set 1) + Mexico 86 (bootleg of Kick and Run, set 1) mexico86a - Mexico 86 (bootleg of Kick and Run) (set 2) + Mexico 86 (bootleg of Kick and Run, set 2) + + + mexicoi + Mexico 86 (Italian speech) mf_achas @@ -78669,20 +81245,24 @@ mgcs - Mahjong Man Guan Caishen (V103CS) + Man Guan Caishen (China, V103CS) mgdh - Mahjong Man Guan Daheng (Taiwan, V125T1) + Man Guan Daheng (Taiwan, V125T1) mgdha - Mahjong Man Guan Daheng (Taiwan, V123T1) + Man Guan Daheng (Taiwan, V123T1) mgfx Man Guan Fu Xing + + mghammer + Medal Get Hammer (V100JP) + mgion Gionbana [BET] (Japan 890207) @@ -78763,6 +81343,10 @@ michstake Michigan Bingo Stake 6/10 (Bingo) + + micon2 + Micon-Kit Part II + micrombc Microman Battle Charge (J 990326 V1.000) @@ -78793,7 +81377,11 @@ midres - Midnight Resistance (World) + Midnight Resistance (World, set 1) + + + midres2 + Midnight Resistance (World, set 2) midresb @@ -78935,6 +81523,10 @@ minferno Inferno (Meadows) + + miniazard + Mini Azar D + miniboy7 Mini-Boy 7 (set 1) @@ -78943,22 +81535,34 @@ miniboy7a Mini-Boy 7 (set 2) + + minidart + Minidart + minigol2 Mini Golf (set 2) minigolf + Mini Golf (set 1) + + + minigolfa Mini Golf (11/25/85) - minigolf2 + minigolfb Mini Golf (10/8/85) miniguay Mini Guay VD + + minihockey + Mini Hockey + minimony Mini Money @@ -78979,6 +81583,10 @@ minivadr Mini Vaders + + minnadk + Minna de Kitaeru Zenno Training (Ver. 1.50) + mirage Mirage Youjuu Mahjongden (Japan) @@ -78997,7 +81605,7 @@ mirderby - Miracle Derby - Ascot + Miracle Derby (Japan) mirninja @@ -79123,6 +81731,10 @@ mj3evoup Sega Network Taisen Mahjong MJ 3 Evolution Firmware Update (GDX-0023) + + mj3up + Sega Network Taisen Mahjong MJ 3 Firmware Update (GDX-0019) + mj4simai Wakakusamonogatari Mahjong Yonshimai (Japan) @@ -79189,11 +81801,11 @@ mjdialq2 - Mahjong Dial Q2 (Japan) + Mahjong Dial Q2 (Japan set 1) mjdialq2a - Mahjong Dial Q2 (Japan, alt.) + Mahjong Dial Q2 (Japan set 2) mjdiplob @@ -79205,23 +81817,23 @@ mjelct3 - Mahjong Electron Base (parts 2 & 3, Japan) + Mahjong Electron Base (parts 2 & 3, Japan set 1, Bet) mjelct3a - Mahjong Electron Base (parts 2 & 3, alt., Japan) + Mahjong Electron Base (parts 2 & 3, Japan set 2, Bet) mjelctrb - Mahjong Electron Base (parts 2 & 4, Japan, bootleg) + Mahjong Electron Base (parts 2 & 4, Japan bootleg, Bet) mjelctrn - Mahjong Electron Base (parts 2 & 4, Japan) + Mahjong Electron Base (parts 2 & 4, Japan, Bet) mjembase - Mahjong Electromagnetic Base + Mahjong Electromagnetic Base (Japan, Bet) mjflove @@ -79317,7 +81929,7 @@ mjmaglmp - Mahjong Magic Lamp (v. JAA02) + Mahou no Lamp (v. JAA02) mjmania @@ -79331,6 +81943,10 @@ mjmyornt Mahjong The Mysterious Orient [BET] (Japan, v1.00) + + mjmyorntr + Mahjong The Mysterious Orient Returns [BET] (Japan, v1.00) + mjmyster Mahjong The Mysterious World [BET] (Japan, set 1) @@ -79541,7 +82157,7 @@ mk3snes - Mortal Kombat 3 (SNES bootleg) + Mortal Kombat 3 (SNES bootleg with timer) mk4 @@ -79587,6 +82203,10 @@ mkla3 Mortal Kombat (rev 3.0 08/31/92) + + mkla3bl + Mortal Kombat (Victor bootleg of rev 3.0 08/31/92) + mkla4 Mortal Kombat (rev 4.0 09/28/92) @@ -79643,6 +82263,10 @@ mkyawdim4 Mortal Kombat (Yawdim bootleg, set 4) + + mkyawdim5 + Mortal Kombat (Yawdim bootleg, set 5) + mkyturbo Mortal Kombat (Turbo 3.1 09/09/93, hack) @@ -79671,6 +82295,10 @@ mltiwars Multi Wars (bootleg of UniWar S) + + mltpoints + Multi Points + mm_05 Medieval Madness (0.50) @@ -79717,7 +82345,11 @@ mmaruchan - Chibi Maruko-chan ~Minna de Sugoroku Asobi~ no Maki + Chibi Maruko-chan ~Minna de Sugoroku Asobi~ no Maki (Ver.1.00B, 2005/06/22) + + + mmaruchana + Chibi Maruko-chan ~Minna de Sugoroku Asobi~ no Maki (Ver.1.00A, 2004/04/20) mmatrix @@ -79755,6 +82387,10 @@ mmehyou Medal Mahjong Circuit no Mehyou [BET] (Japan) + + mmhammer + Mogu Mogu Hammer + mmm_ldip Lucky Dip (Maygay) @@ -79839,6 +82475,10 @@ mnytree Money Tree (10001211, NSW/ACT) + + mnytreea + Money Tree (10122211, ASP) + mocapb Mocap Boxing (ver AAB) @@ -79849,7 +82489,7 @@ mocapglf - Mocap Golf (ver UAA) + Mocap Golf (ver EAA:B) moegonta @@ -79951,6 +82591,14 @@ monkeyd Monkey Donkey + + monkeyl + Monkey Land (Ver. AA.21.A) + + + monkeyla + Monkey Land (Ver. AA.13.B) + monmouse Money Mouse (0400469V, NSW/ACT) @@ -79961,23 +82609,23 @@ mononew - Monopoly (ARM7 Sound Board) + Monopoly (CPU 3.20, display A3.01, ARM7 sound board) monop233 - Monopoly (2.33) + Monopoly (CPU 2.33, display A2.03) monop251 - Monopoly (2.51) + Monopoly (CPU 2.51, display A2.06) monop301 - Monopoly (3.01) + Monopoly (CPU 3.01, display A3.01) monop303 - Monopoly (3.03) + Monopoly (CPU 3.03, display A3.01) monoplcl @@ -80001,23 +82649,23 @@ monopolf - Monopoly (France) + Monopoly (CPU 3.20, display F3.01, France) monopolg - Monopoly (Germany) + Monopoly (CPU 3.20, display G3.01, Germany) monopoli - Monopoly (Italy) + Monopoly (CPU 3.20, display I3.01, Italy) monopoll - Monopoly (Spain) + Monopoly (CPU 3.20, display L3.01, Spain) monopolp - Monopoly (3.20) + Monopoly (CPU 3.20, display A3.01) monopoly @@ -80037,7 +82685,7 @@ monopred - Monopoly (Coin dropper) + Monopoly (coin dropper, CPU 4.01, display 4.00) monrobwl @@ -80145,15 +82793,23 @@ mooncmw - Moon War (Moon Cresta bootleg) + Moon War (bootleg of Moon Cresta) mooncptc Moon Cresta (Petaco S.A. Spanish bootleg) + + mooncrecm + Moon Cresta (Centromatic Spanish bootleg) + mooncreg - Moon Cresta (Electrogame S.A. Spanish bootleg) + Moon Cresta (Electrogame S.A. Spanish bootleg, set 1) + + + mooncreg2 + Moon Cresta (Electrogame S.A. Spanish bootleg, set 2) mooncrgx @@ -80169,7 +82825,7 @@ mooncrs4 - Moon Crest (Moon Cresta bootleg) + Moon Crest (bootleg of Moon Cresta) mooncrs5 @@ -80189,7 +82845,7 @@ mooncrsl - Cresta Mundo (Laguna S.A. Spanish Moon Cresta bootleg) + Cresta Mundo (Spanish bootleg of Moon Cresta) mooncrst @@ -80291,6 +82947,10 @@ moremorp More More Plus + + mortalr + Mortal Race + mosaic Mosaic @@ -80413,7 +83073,7 @@ mouncrst - Moune Creste (Jeutel French Moon Cresta bootleg) + Moune Creste (Jeutel French bootleg of Moon Cresta) mountmon @@ -80575,6 +83235,10 @@ mplanuk Mad Planets (UK) + + mpumpkin + Magical Pumpkin: Puroland de Daibouken (Japan 960712) + mquake Moonquake @@ -80633,19 +83297,19 @@ mrdrilr2 - Mr. Driller 2 (Japan, DR21 Ver.A) + Mr. Driller 2 (World, DR22 Ver.A) - mrdrilrg - Mr. Driller G (Japan, DRG1 Ver.A) + mrdrilr2j + Mr. Driller 2 (Japan, DR21 Ver.A) - mrdrilrga - Mr. Driller G ALT (Japan, DRG1 Ver.A) + mrdrilr2u + Mr. Driller 2 (US, DR23 Ver.A) - mrdrlr2a - Mr. Driller 2 (World, DR22 Ver.A) + mrdrilrg + Mr. Driller G (Japan, DRG1 Ver.A) mrdu @@ -80735,14 +83399,34 @@ mrwoo Mr Woo (0252599, US) + + ms21v2 + Metal Slug 2 - Super Vehicle-001/II (1v2 Mode, Hack) + ms3 Multistar 3 + + ms31v2 + Metal Slug 3 (1v2 Mode, Hack) + + + ms41v2 + Metal Slug 4 (1v2 Mode, Hack) + ms4plus Metal Slug 4 Plus (bootleg) + + ms51v2 + Metal Slug 5 (1v2 Mode, Hack) + + + ms5esr + Metal Slug 5 (Double Enemy, Hack) + ms5pcb Metal Slug 5 (JAMMA PCB) @@ -80751,6 +83435,14 @@ ms5plus Metal Slug 5 Plus (bootleg) + + ms5plush + Metal Slug 5 (Plus, Hack) + + + ms5sgf + Metal Slug 5 (Remake FC2, Hack) + ms72c Multistar 7 2c @@ -80931,22 +83623,50 @@ mslug Metal Slug - Super Vehicle-001 + + mslug1v2 + Metal Slug - Super Vehicle-001 (1v2 Mode, Hack) + mslug2 Metal Slug 2 - Super Vehicle-001/II (NGM-2410 ~ NGH-2410) + + mslug2ct + Metal Slug 2 - Super Vehicle-001/II (Survival, Hack) + + + mslug2dd + Metal Slug 2 - Super Vehicle-001/II (Starlight, Hack) + mslug2dg - Metal Slug 2 - Super Vehicle-001/II (Multifunction Hack, 20170509) + Metal Slug 2 - Super Vehicle-001/II (Multifunction, Hack) + + + mslug2eg + Metal Slug 2 - Super Vehicle-001/II (Extraction Green Turbo, Hack) mslug2fm - Metal Slug 2 - Super Vehicle-001/II (CZXINc FC2 Ver.2 20210415, hack) + Metal Slug 2 - Super Vehicle-001/II (Friendly Fire FC2, Hack) + + + mslug2p + Metal Slug 2 - Super Vehicle-001/II (Weapon Storage, Hack) + + + mslug2r + Metal Slug 2 - Super Vehicle-001/II (Enemy Remix, Hack) mslug2t Metal Slug 2 Turbo (NGM-9410) (hack) + + mslug2unity + Metal Slug 2 - Super Vehicle-001/II Unity (Added Timer Ver. 2021-01-22) + mslug3 Metal Slug 3 (NGM-2560) @@ -80957,23 +83677,91 @@ mslug3b6 - Metal Slug 6 (Metal Slug 3 bootleg) + Metal Slug 6 (bootleg of Metal Slug 3) + + + mslug3c + Metal Slug 3 (Enemy Remix, Hack) + + + mslug3cq + Metal Slug 3 (Legend, Hack) + + + mslug3dd + Metal Slug 3 (Starlight, Hack) + + + mslug3eb + Metal Slug 3 (Blue, Hack) + + + mslug3fd + Metal Slug 3 (Fully Decrypted) + + + mslug3fs + Metal Slug 3 (Firepower Showdown, Hack) mslug3g - Metal Slug 3 (Multifunction Hack, 20190119) + Metal Slug 3 (Multifunction, Hack) + + + mslug3gw + Metal Slug 3 (Onimusha Samanosuke, Hack) mslug3h Metal Slug 3 (NGH-2560) + + mslug3i + Metal Slug 3 (Firepower Enhance, Hack) + + + mslug3ki + Metal Slug 3 (Komorebi, Hack) + + + mslug3lw + Metal Slug 3 (Last Bullet Remix, Hack) + mslug3n Metal Slug 3 (not encrypted) + + mslug3ps + Metal Slug 3 (Pigeon Slug, Hack) + + + mslug3sc + Metal Slug 3 (Survival, Hack) + + + mslug3sd + Metal Slug 3 (Shop, Hack) + + + mslug3se + Metal Slug 3 (Special, Hack) + + + mslug3unity + Metal Slug 3 Unity (Added Timer Ver. 2021-02-13) + mslug3v - Metal Slug 3 (NGH-2560) (Enhanced Violence Version, hack by EEZEZY) + Metal Slug 3 (Enhanced Violence, Hack) + + + mslug3x + Metal Slug 3X (Complete Collection) + + + mslug3zh + Metal Slug 3 (Vehicle Summon, Hack) mslug4 @@ -80981,19 +83769,51 @@ mslug4a - Metal Slug 4 (20th Anniversary) + Metal Slug 4 (20th Anniversary, Hack) + + + mslug4ar + Metal Slug 4 (Random Ammunition, Hack) + + + mslug4c + Metal Slug 4 (Enemy Remix, Hack) + + + mslug4dd + Metal Slug 4 (Starlight, Hack) mslug4dg - Metal Slug 4 (Multifunction Hack, 20171225) + Metal Slug 4 (Multifunction, Hack) + + + mslug4fd + Metal Slug 4 (Fully Decrypted) mslug4h Metal Slug 4 (NGH-2630) + + mslug4ki + Metal Slug 4 (Komorebi, Hack) + + + mslug4lq + Metal Slug 4 (Last Bullet Remix - Without body armor, Hack) + mslug4lw - Metal Slug 4 (Last Bullet Remix Hack) + Metal Slug 4 (Last Bullet Remix, Hack) + + + mslug4q + Metal Slug 4 (The Longest Battle, Hack) + + + mslug4unity + Metal Slug 4 Unity (Added Timer Ver. 2021-01-30) mslug5 @@ -81008,20 +83828,80 @@ Metal Slug 5 (bootleg, set 2) - mslug5g - Metal Slug 5 (Multifunction Hack, 20170523) + mslug5bs + Metal Slug 5 (Boss Battles, Hack) + + + mslug5c + Metal Slug 5 (Enemy Remix, Hack) + + + mslug5db + Metal Slug 5 (Enemy Enhance, Hack) + + + mslug5dd + Metal Slug 5 (Starlight, Hack) + + + mslug5dg + Metal Slug 5 (Multifunction, Hack) + + + mslug5es + Metal Slug 5 (The Longest Battle, Hack) + + + mslug5ex + Metal Slug 5 (Extend v1.2, Hack) + + + mslug5f + Metal Slug 5 (Fierce Battle, Hack) + + + mslug5fd + Metal Slug 5 (Fully Decrypted) mslug5h Metal Slug 5 (NGH-2680) + + mslug5ki + Metal Slug 5 (Komorebi, Hack) + + + mslug5mg + Metal Slug 5 (Devil Enemy Remix, Hack) + + + mslug5nd + Metal Slug 5 (Not Encrypted) + + + mslug5sc + Metal Slug 5 (Survival, Hack) + + + mslug5sg + Metal Slug 5 (Stone Turtle, Hack) + + + mslug5unity + Metal Slug 5 Unity (Added Timer Ver. 2021-04-23) + mslug5w - Metal Slug 5 (New Campaign, 2016-03-10) + Metal Slug 5 (New Battle, Hack) - mslug5wd - Metal Slug 5 (New Campaign) + mslug5x + Metal Slug 5 (X, Hack) + + + mslug5zh + Metal Slug 5 (Vehicle Summon, Hack) mslug6 @@ -81029,15 +83909,87 @@ mslugdg - Metal Slug (Multifunction Hack, 20180430) + Metal Slug - Super Vehicle-001 (Multifunction, Hack) + + + mslugfc1 + Metal Slug - Super Vehicle-001 (Item Random FC2, Hack) + + + mslugfc2 + Metal Slug - Super Vehicle-001 (Item Random & Powerful Enemy Defense FC2, Hack) + + + mslugfs + Metal Slug - Super Vehicle-001 (Firepower Showdown, Hack) + + + mslugqy + Metal Slug - Super Vehicle-001 (Origins, Hack) + + + mslugunity + Metal Slug Unity (Added Timer Ver. 2021-02-05) mslugx Metal Slug X - Super Vehicle-001 (NGM-2500 ~ NGH-2500) - mslugxsrf - Metal Slug X - Super Vehicle-001 (AzStar Soda Remix FC2 Version, hack) + mslugx2r + Metal Slug X - Super Vehicle-001 (2R, Hack) + + + mslugxc1 + Metal Slug X - Super Vehicle-001 (Multi Vehicle, Hack) + + + mslugxc2 + Metal Slug X - Super Vehicle-001 (Enemy Remix, Hack) + + + mslugxcq + Metal Slug X - Super Vehicle-001 (Legend, Hack) + + + mslugxdd + Metal Slug X - Super Vehicle-001 (Starlight, Hack) + + + mslugxdg + Metal Slug X - Super Vehicle-001 (Multifunction, Hack) + + + mslugxeb + Metal Slug X - Super Vehicle-001 (Blue, Hack) + + + mslugxfs + Metal Slug X - Super Vehicle-001 (Firepower Showdown, Hack) + + + mslugxif + Metal Slug X - Super Vehicle-001 (Infinite Firepower, Hack) + + + mslugxlb + Metal Slug X - Super Vehicle-001 (Extreme Space, Hack) + + + mslugxsc + Metal Slug X - Super Vehicle-001 (Survival, Hack) + + + mslugxsv + Metal Slug X - Super Vehicle-001 (Unbounded, Hack) + + + mslugxunity + Metal Slug X - Super Vehicle-001 Unity (Added Timer Ver. 2021-01-23) + + + mslugxxr + Metal Slug X - Super Vehicle-001 (Warriors, Hack) mspacii @@ -81047,6 +83999,10 @@ mspacii2 Ms. Pac-Man II (Orca bootleg set 2) + + mspackpls + Miss Packman Plus + mspacmab Ms. Pac-Man (bootleg, set 1) @@ -81083,6 +84039,10 @@ mspacmanbg2 Ms. Pac-Man ('Made in Greece' bootleg, set 2) + + mspacmanbgc + Ms. Pac-Man ('Made in Greece' Enavi bootleg) + mspacmanbgd Miss Pukman ('Made in Greece' Datamat bootleg) @@ -81107,6 +84067,10 @@ mspacmancr Ms. Pac-Man (bootleg on Crush Roller Hardware) + + mspacmanlai + Ms. Pac-Man (Leisure and Allied bootleg) + mspacmat Ms. Pac Attack @@ -81159,6 +84123,10 @@ mstworld Monsters World (bootleg of Super Pang) + + mstworld2 + Monsters World 2 (bootleg of Super Pang) + msword Magic Sword: Heroic Fantasy (World 900725) @@ -81175,6 +84143,22 @@ mswordu Magic Sword: Heroic Fantasy (USA 900725) + + msx1v2 + Metal Slug X - Super Vehicle-001 (1v2 Mode, Hack) + + + msx2r1v2 + Metal Slug X - Super Vehicle-001 (2R 1v2 Mode, Hack) + + + msx2reb + Metal Slug X - Super Vehicle-001 (2R Blue, Hack) + + + msxsrf + Metal Slug X - Super Vehicle-001 (AzStar Soda Remix FC2, Hack) + mt_aftrb After Burner (Mega-Tech, SMS based) @@ -81497,7 +84481,7 @@ mtwinsb - Twins (Mega Twins bootleg) + Twins (bootleg of Mega Twins) mugsmash @@ -81555,6 +84539,14 @@ multiwin Multi Win (Ver.0167, encrypted) + + multiwina + Multi Win (Ver.0091, encrypted) + + + multiwinb + Multi Win (EPM7032, encrypted) + multy Multy @@ -81579,6 +84571,10 @@ murogmbl Muroge Monaco (bootleg?) + + musclem + Muscle Master + musclhit Muscle Ranking Kinniku Banzuke Spray Hitter @@ -81699,10 +84695,18 @@ mustangs US AAF Mustang (25th May. 1990 / Seoul Trading) + + mutacion + Mutacion (Explomatic Spanish bootleg of Moon Cresta) + mutantf Mutant Fighter (World ver EM-5) + + mutantf1 + Heroes (World ver EM-1) + mutantf2 Mutant Fighter (World ver EM-2) @@ -81721,7 +84725,7 @@ mutantwarr - Mutant Warrior (Altered Beast - Datsu bootleg) + Mutant Warrior (Datsu bootleg of Altered Beast) mutnat @@ -81955,6 +84959,10 @@ mystcasta Mystery Castle (R03) + + mysteria + Mysterian (prototype) + mysteycm Mystic Eyes - Mr. Cashman (10008111, NSW/ACT) @@ -82061,10 +85069,10 @@ nametune - Name That Tune (Bally, set 1) + Name That Tune (Bally, 3/31/86) - nametune2 + nametunea Name That Tune (Bally, 3/23/86) @@ -82097,51 +85105,51 @@ nascar - Nascar (4.50) + Nascar (CPU 4.50, display A4.00) nascar_301 - Nascar (3.01) + Nascar (CPU 3.01, display A3.01) nascar_340 - Nascar (3.40) + Nascar (CPU 3.40, display A3.03) nascar_350 - Nascar (3.50) + Nascar (CPU 3.50, display A3.03) nascar_352 - Nascar (3.52) + Nascar (CPU 3.52, display A3.03) nascar_400 - Nascar (4.00) + Nascar (CPU 4.00, display A4.00) nascarl - Nascar (4.50 Spain) + Nascar (CPU 4.50, display L4.00, Spain) nascarl_301 - Nascar (3.01 Spain) + Nascar (CPU 3.01, display L3.01, Spain) nascarl_340 - Nascar (3.40 Spain) + Nascar (CPU 3.40, display L3.03, Spain) nascarl_350 - Nascar (3.50 Spain) + Nascar (CPU 3.50, display L3.03, Spain) nascarl_352 - Nascar (3.52 Spain) + Nascar (CPU 3.52, display L3.03, Spain) nascarl_400 - Nascar (4.00 Spain) + Nascar (CPU 4.00, display L4.00, Spain) nastar @@ -82219,6 +85227,14 @@ nba_802 NBA v8.02 + + nbaatw + NBA All The Way (ver EAB) + + + nbaatwa + NBA All The Way (ver EAA) + nbaf_11 NBA Fastbreak (1.1) @@ -82295,6 +85311,14 @@ nbajamexa NBA Jam Extreme (ver. 1.04) + + nbajamp1 + NBA Jam (proto v 1.01 1/23/93) + + + nbajamp2 + NBA Jam (proto v 2.00 1/24/93) + nbajamr1 NBA Jam (rev 1.00 2/1/93) @@ -82303,6 +85327,10 @@ nbajamr2 NBA Jam (rev 2.00 2/10/93) + + nbajamre + NBA Jam Rewind (Hack, v1.1) + nbajamt1 NBA Jam TE (rev 1.0 01-17-94) @@ -82317,35 +85345,43 @@ nbajamte - NBA Jam TE (rev 4.0 3/23/94) + NBA Jam Tournament Edition (rev 4.0 3/23/94) nbajamte1 - NBA Jam TE (rev 1.00 1/17/94) + NBA Jam Tournament Edition (rev 1.00 1/17/94) nbajamte2 - NBA Jam TE (rev 2.1 2/06/94) + NBA Jam Tournament Edition (rev 2.1 2/06/94) nbajamte2a - NBA Jam TE (rev 2.0 1/28/94) + NBA Jam Tournament Edition (rev 2.0 1/28/94) nbajamte3 - NBA Jam TE (rev 3.0 3/04/94) + NBA Jam Tournament Edition (rev 3.0 3/04/94) nbajamte3a - NBA Jam TE (rev 3.0 2/26/94) + NBA Jam Tournament Edition (rev 3.0 2/26/94) nbajamte4 - NBA Jam TE (rev 4.0 3/03/94) + NBA Jam Tournament Edition (rev 4.0 3/03/94) nbajamten - NBA Jam T.E. Nani Edition (rev 5.2 8/11/95, prototype) + NBA Jam Tournament Edition (Nani Edition, rev 5.2 8/11/95, prototype) + + + nbajamtep2 + NBA Jam Tournament Edition (proto 2.00 12/17/93) + + + nbajamtr + NBA Jam TE Rewind ver 1.1 nbamac @@ -82377,12 +85413,28 @@ nbapbp - NBA Play By Play (ver JAA) + NBA Play By Play (ver UAB) nbapbpa NBA Play By Play (ver AAB) + + nbapbpaa + NBA Play By Play (ver AAA) + + + nbapbpj + NBA Play By Play (ver JAB) + + + nbapbpja + NBA Play By Play (ver JAA) + + + nbapbpua + NBA Play By Play (ver UAA) + nbashowt NBA Showtime NBA on NBC (ver 2.0, Apr 25 1999) @@ -82471,6 +85523,10 @@ ncentury New Century (Spanish bootleg of Scramble) + + nclubdis + Name Club Disney (J 980614 V1.000) + nclubv2 Name Club Ver.2 (J 960315 V1.000) @@ -82479,6 +85535,10 @@ nclubv3 Name Club Ver.3 (J 970723 V1.000) + + nclubv4 + Name Club Ver.4 (J 971202 V1.000) + ncombat Ninja Combat (NGM-009) @@ -82521,7 +85581,7 @@ ndxron10 - Royal on Ten (Noraut Deluxe hack) + Royal on Ten (hack of Noraut Deluxe Poker) nebulbee @@ -82573,7 +85633,11 @@ nemoj - Nemo (Japan 901120) + Nemo (Japan 901120, 89622B-3 ROM board) + + + nemoja + Nemo (Japan 901120, 89625B-1 ROM board) nemor1 @@ -82625,7 +85689,7 @@ neomania - Neo Mania + Neo Mania (Portugal) neomrdo @@ -82635,6 +85699,10 @@ neonopon Neo No Panepon (beta) + + neopang + Neo Pang + neopong Neo Pong (ver 1.1) @@ -82688,8 +85756,12 @@ Mahjong Neruton Haikujiradan (Japan, Rev. A?) - netchu02 - Netchuu Pro Yakyuu 2002 (NPY1 Ver. A) + netchu02b + Netchuu Pro Yakyuu 2002 (NPY1 Ver. B) + + + netchu02c + Netchuu Pro Yakyuu 2002 (NPY1 Ver. C) netmerc @@ -82719,6 +85791,10 @@ newapunk New Atomic Punk - Global Quest (US) + + newcanasta + New Canasta + newdixie New Dixieland (Bingo) @@ -82735,6 +85811,22 @@ newhilop New Hi-Low Poker + + newhunter + New HUNTer + + + newhunterb + New HUNTer (bootleg, set 1) + + + newhunterc + New HUNTer (bootleg, set 2) + + + newhunterd + New HUNTer (bootleg, set 3) + newmcard New Magic Card @@ -82771,6 +85863,10 @@ newtangl New Tropical Angel + + newtiger + New Tiger + newufo New UFO Catcher (standard) @@ -82793,7 +85889,11 @@ newxpang - New Cross Pang + New Cross Pang (set 1) + + + newxpanga + New Cross Pang (set 2) nextfase @@ -82804,8 +85904,8 @@ No Fear: Dangerous Sports (0.8X) - nf_10 - No Fear: Dangerous Sports (1.0) + nf_10f + No Fear: Dangerous Sports (1.0F) nf_20 @@ -82905,7 +86005,7 @@ nfl - NFL + NFL (CPU 1.01, display A1.02) nflclsfb @@ -82983,6 +86083,10 @@ ngg_p06 No Good Gofers (p0.6) + + ngmontst + Monitor Test Patterns Tool (v1.3) + ngndshkr Nitro Ground Shaker @@ -83047,6 +86151,10 @@ nibblerp Nibbler (rev 6, Pioneer Balloon conversion) + + nicetsuk + Tsukkomi Yousei Gips Nice Tsukkomi (NTK1 Ver.A) + nichisel DVD Select (Japan) @@ -83057,7 +86165,7 @@ nightlov - Night Love (Japan 860705) + Night Love (Japan 860705, Bet) nightmare @@ -83145,7 +86253,7 @@ ninjamasha - Ninja Master's - haoh-ninpo-cho (Plus) + Ninja Master's - Haoh-ninpo-cho (Plus) ninjaslt @@ -83261,7 +86369,11 @@ nndmseal - Nandemo Seal Iinkai + Nandemo Seal Iinkai (ver 1.3) + + + nndmseal11 + Nandemo Seal Iinkai (ver 1.1) nndmseala @@ -83301,11 +86413,11 @@ noraut3a - Noraut Joker Poker (V3.010a) + Noraut Jacks Plus / Joker Poker (V3.010a) noraut3b - Noraut Joker Poker (V3.011a) + Noraut Jacks Plus / Joker Poker (V3.011a) norautdx @@ -83345,11 +86457,11 @@ norautua - Noraut unknown set 1 (console) + Noraut Joker Poker (console, set 1) norautub - Noraut unknown set 2 (console) + Noraut Joker Poker (console, set 2) nost @@ -83363,6 +86475,10 @@ nostk Nostradamus (Korea) + + nostromo + Nostromo + notechan Note Chance @@ -83399,6 +86515,14 @@ novoplay Novo Play Multi Card / Club Card + + novoplaya + Novo Play Club Card (V6.2H) + + + novoplayb + Novo Play Club Card (V3.3H) + npcartv1 Neo Print V1 (World) (E1a) @@ -83407,6 +86531,10 @@ npcramen Neo Print - Chicken Ramen (Japan) + + npeurver + Neo Print - European Version (World) (T4i 2.00) + npfpit Neo Print - Fuyu Pri Iitoko-dori (Japan) (T4i 3.07) @@ -83419,6 +86547,10 @@ npotogib Neo Print - Otogibanashi (Japan) (T4i 3.00) + + nppopeye + Neo Print - Popeye (Japan) (T4i 3.04) + nprinces Ninja Princess (315-5051, 64k Ver. bootleg?) @@ -83596,7 +86728,7 @@ Night Stocker (10/6/86) - nstocker2 + nstockera Night Stocker (8/27/86) @@ -83623,6 +86755,10 @@ ntopstar Mahjong Nerae! Top Star (Japan) + + ntvmys + Nittere Shiki! Mirai Yosou Studio / NTV Future Forecast Studio (Japan, Rev A) + nudgeit Nudge-It @@ -83733,7 +86869,15 @@ nzeroteama - New Zero Team (V33 SYSTEM TYPE_B hardware, China?) + New Zero Team (V33 SYSTEM TYPE_B hardware, Zhongguo Shantou Yihuang license) + + + nzeroteamb + New Zero Team (V33 SYSTEM TYPE_B hardware, Haoyunlai Trading Company license) + + + nzteamp + New Zero Team (Plus, Hack) obaoba @@ -83749,12 +86893,20 @@ oceanhun + The Ocean Hunter (Japan, Revision A) + + + oceanhuna The Ocean Hunter (Japan) ochaken Ocha-Ken Hot Medal + + octopussy + Octopussy + odeontw Odeon Twister (v1.4) @@ -83771,6 +86923,10 @@ odin_dlx Odin De Luxe + + odinp + Odin (prototype) + odisea Odisea Paris-Dakar @@ -83829,11 +86985,11 @@ offroadt - Ironman Ivan Stewart's Super Off-Road Track-Pak + Ironman Ivan Stewart's Super Off-Road Track-Pak (rev 4?) offroadt2p - Ironman Ivan Stewart's Super Off-Road Track-Pak (rev 4, 2 Players) + Ironman Ivan Stewart's Super Off-Road Track-Pak (rev 4, 2 players) offrthnd @@ -83945,19 +87101,19 @@ oldsplusnr - Xi You Shi E Zhuan Super Plus (Qun Mo Luan Wu New 208 Revision) + Xi You Shi E Zhuan - Xin Qun Mo Luan Wu (Hack) - oldspluso + oldsplusok Oriental Legend 2 (One Key Edition, Hack) olibochu - Oli-Boo-Chu + Oli-Boo-Chu (USA) olibug - Oli Bug (Jump Bug bootleg) + Oli Bug (bootleg of Jump Bug) oligam @@ -84007,6 +87163,10 @@ olysoc92b Olympic Soccer '92 (set 3) + + omatsuri + Shimura Ken no Bakatono-sama Ooedomatsuri + omega Omega @@ -84035,6 +87195,10 @@ omegrace2 Omega Race (set 2) + + omegrace3 + Omega Race (set 3, 7/27) + omni Omni @@ -84119,6 +87283,14 @@ optiger Operation Tiger (Ver 2.14 O) + + optigera + Operation Tiger (Ver 2.10 O) + + + optigerj + Operation Tiger (Ver 2.09 J) + opwolf Operation Wolf (World, set 1) @@ -84299,6 +87471,10 @@ orlegende Oriental Legend / Xiyou Shi E Chuan (ver. 112) + + orlegendea + Oriental Legend - Xi Yo Gi Shi Re Zuang (V112, set 2) + orlegndc Oriental Legend - Xi Yo Gi Shi Re Zuang (ver. 112, Chinese Board) @@ -84331,6 +87507,10 @@ oscara5a Oscar (0100348V, NSW/ACT) + + oscarbl + Psycho-Nics Oscar (World revision 0, bootleg) + oscarj Psycho-Nics Oscar (Japan revision 2) @@ -84433,23 +87613,23 @@ otwalls - Off the Wall (Sente) + Off the Wall (Sente) (10/16/84) ougonhai - Mahjong Ougon no Hai + Mahjong Ougon no Hai (Japan) ougonhaib1 - Mahjong Ougon no Hai (bootleg set 1) + Mahjong Ougon no Hai (Japan bootleg set 1, Bet) ougonhaib2 - Mahjong Ougon no Hai (bootleg set 2) + Mahjong Ougon no Hai (Japan bootleg set 2, Bet) ougonhaib3 - Mahjong Ougon no Hai (bootleg set 3) + Mahjong Ougon no Hai (Japan bootleg set 3, Bet) outbackj @@ -84657,7 +87837,7 @@ p911 - Police 911 (ver AAE) + The Keisatsukan: Shinjuku 24-ji (ver AAE) p9112 @@ -84665,7 +87845,7 @@ p911ac - Police 911 (ver AAC) + The Keisatsukan: Shinjuku 24-ji (ver AAC) p911ea @@ -84677,19 +87857,19 @@ p911j - Keisatsukan Shinjuku 24ji (ver JAE) + The Keisatsukan: Shinjuku 24-ji (ver JAE) p911k - Police 911 (ver KAE) + The Keisatsukan: Shinjuku 24-ji (ver KAE) p911kc - Police 911 (ver KAC) + The Keisatsukan: Shinjuku 24-ji (ver KAC) p911ud - Police 24/7 (ver UAD) + Police 911 (ver UAD) pac90 @@ -84737,6 +87917,10 @@ packbang + Pack'n Bang Bang + + + packbangp Pack'n Bang Bang (prototype) @@ -84853,7 +88037,7 @@ pacmanvg - Pac-Man (bootleg, Video Game SA) + Pac-Man (Video Game SA bootleg) pacmball @@ -84989,11 +88173,19 @@ pang3b4 - Pang! 3 (bootleg set 4, 950511 Euro) + Pang! 3 (bootleg, set 4) pang3b5 - Pang! 3 (bootleg set 5, 950601 Euro) + Pang! 3 (bootleg, set 5) + + + pang3b6 + Pang! 3 (bootleg, set 6) + + + pang3b7 + Pang! 3 (bootleg, set 7) pang3j @@ -85005,7 +88197,7 @@ pang3r1a - Pang! 3 (950511 Euro, alt) + Pang! 3 (Euro 950511, alt) pangb @@ -85079,6 +88271,10 @@ panic3 Space Panic (set 3) + + panic4 + Space Panic (set 4) + panicbom Panic Bomber @@ -85117,7 +88313,7 @@ panikuru - Panicuru Panekuru (Japan, PPA1 Ver.A) + Panikuru Panekuru (Japan, PPA1 Ver.A) panther @@ -85205,7 +88401,7 @@ paranoia - Paranoia + Paranoia (Arcade PC Engine, bootleg?) parentj @@ -85215,6 +88411,10 @@ parislgt Paris Lights (30002611, NSW/ACT) + + parislgta + Paris Lights (10139011, ASP) + parislgtu Paris Lights - Jackpot Carnival (0251031, US) @@ -85225,19 +88425,19 @@ parodius - Parodius DA! (World, set 1) + Parodius Da!: Shinwa kara Owarai e (World, set 1) parodiusa - Parodius DA! (Asia) + Parodius Da!: Shinwa kara Owarai e (Asia) parodiuse - Parodius DA! (World, set 2) + Parodius Da!: Shinwa kara Owarai e (World, set 2) parodiusj - Parodius DA! (Japan) + Parodius Da!: Shinwa kara Owarai e (Japan) parrot3 @@ -85397,7 +88597,11 @@ pbancho - Gyakuten!! Puzzle Bancho (Japan) + Gyakuten!! Puzzle Bancho (Japan, set 1) + + + pbanchoa + Gyakuten!! Puzzle Bancho (Japan, set 2) pbchmp95 @@ -85495,6 +88699,10 @@ pbobble3j Puzzle Bobble 3 (Ver 2.1J 1996/09/27) + + pbobble3rc + Puzzle Bobble 3 Recarbonated + pbobble3u Puzzle Bobble 3 (Ver 2.1A 1996/09/27) @@ -85525,19 +88733,43 @@ pbss330 - Pit Boss Superstar III 30 (9233-00-01, Standard version) + Pit Boss Superstar III 30 (9233-00-01 R0B, Standard version) + + + pbss330a + Pit Boss Superstar III 30 (9233-00-01 R0, Standard version) pbss330ca - Pit Boss Superstar III 30 (9233-00-06, California version) + Pit Boss Superstar III 30 (9233-00-06 R0A, California version) pbst30 - Pit Boss Supertouch 30 (9234-10-01) + Pit Boss Supertouch 30 (9234-10-01 R0) pbst30a - Pit Boss Supertouch 30 (9234-00-01) + Pit Boss Supertouch 30 (9234-00-01 R0A) + + + pc644vz + Player's Choice (PC644VZ) Standard Draw Poker + + + pc679cy + Player's Choice (PC679CY) Standard Draw Poker + + + pc714vz + Player's Choice (PC714VZ) Standard Draw Poker + + + pc716vy + Player's Choice (PC716VY) Standard Draw Poker + + + pc718vy + Player's Choice (PC718VY) Standard Draw Poker pc_1942 @@ -85589,7 +88821,7 @@ pc_ebike - Excite Bike (PlayChoice-10) + Excitebike (PlayChoice-10) pc_ftqst @@ -85795,6 +89027,10 @@ pcktgalb Pocket Gal (Yada East bootleg) + + pcktgalba + Pocket Gal / unknown card game + pclb2elk Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000) @@ -85901,7 +89137,7 @@ pcnfrk10m - Percussion Freaks 10th Mix eAmusement (G*D40 VER. ACA) + Percussion Freaks 10th Mix (G*D40 VER. AAA) pcnfrk2m @@ -85949,7 +89185,7 @@ pcnfrk9m - Percussion Freaks 9th Mix eAmusement (G*D09 VER. ABA) + Percussion Freaks 9th Mix (G*D09 VER. AAA) pcnfrka @@ -85963,6 +89199,10 @@ pcockmag Peacock Magic (1J008811, NSW/ACT) + + pcockmaga + Peacock Magic (10134311, ASP) + pcockmagu Peacock Magic (0151352, US) @@ -85983,6 +89223,10 @@ pcpooh3 Print Club Winnie-the-Pooh Vol. 3 (J 980406 V1.000) + + pcramclr + Player's Choice RAM Clear + pdrift Power Drift (World, Rev A) @@ -86011,6 +89255,10 @@ peafluta Peacock Flutter (01J00011, NSW/ACT) + + pebe0013 + Player's Edge Plus (BE0013) Blackjack + pebe0014 Player's Edge Plus (BE0014) Blackjack @@ -86147,6 +89395,10 @@ peke0017a Player's Edge Plus (KE0017) Keno (set 2) + + peke0026 + Player's Edge Plus (KE0026) Keno + peke1001 Player's Edge Plus (KE1001) Keno @@ -86223,6 +89475,10 @@ pelipete Pelican Pete (10177511, NSW/ACT) + + pelipetea + Pelican Pete (10196211, ASP) + pelipetejc Pelican Pete - Jackpot Carnival (10226711, Queensland) @@ -86251,6 +89507,10 @@ pemg0213 Player's Choice (MG0213) Multi-Game + + pemg0225 + Montana Choice (MG0225) Multi-Game + pemg0252 Player's Choice (MG0252) Multi-Game @@ -86281,35 +89541,47 @@ pengo - Pengo (set 1 rev C, encrypted) + Pengo (World, not encrypted, rev A) pengo2 - Pengo (set 2, encrypted) + Pengo (set 2) pengo2u - Pengo (set 2, rev A, not encrypted) + Pengo (set 2 not encrypted) pengo3u - Pengo (set 3, not encrypted) + Pengo (set 3 not encrypted) - pengo4 - Pengo (set 4, encrypted) + pengoa + Pengo (World, 315-5010 type, set 1) - pengo5 - Pengo (set 5, encrypted) + pengob + Pengo (World, 315-5010 type, set 2) - pengo6 - Pengo (set 6, encrypted) + pengoc + Pengo (World, 315-5010 type, set 3) - pengob - Pengo (bootleg) + pengoj + Pengo (Japan, not encrypted) + + + pengoja + Pengo (Japan, 315-5010 type, rev C) + + + pengojb + Pengo (Japan, 315-5007 type, rev A) + + + pengojbl + Pengo (Japan, bootleg) pengojpm @@ -86389,7 +89661,7 @@ penpir2 - Penguin Pirate II (0100869V, Victoria) + Penguin Pirate II (0100869V, ASP) penpira @@ -86397,7 +89669,7 @@ penta - Penta + Penta (bootleg) pentacup @@ -86445,7 +89717,7 @@ pepk0758 - Player's Edge (PK0758-PC041) Jacks or Better + Player's Edge (PK0758-PC041) Standard Draw Poker pepk0769 @@ -86453,7 +89725,15 @@ pepk0773 - Player's Edge (PK0773-PC041) Jacks or Better + Player's Edge (PK0773-PC041) Standard Draw Poker + + + pepk0785 + Player's Edge (PK0785-PC041) Tens or Better + + + pepk0788 + Player's Edge (PK0788-PC041) Tens or Better pepk0810 @@ -86475,6 +89755,10 @@ pepk0832 Player's Edge (PK0832-PC041) Joker Poker + + pepk0846 + Player's Edge (PK0846-PC098) Standard Draw Poker + pepk0849 Player's Edge (PK0849-PC041) Joker Poker (Two Pair or Better) @@ -86523,6 +89807,14 @@ pepk1013 Player's Edge (PK1013-PC087) Tens or Better + + pepk1015 + Player's Edge (PK1015-PC088) 4 of a Kind Bonus Poker + + + pepk1017 + Player's Edge (PK1017-PC041) Standard Draw Poker + pepk1020 Player's Edge (PK1020-PC078) 4 of a Kind Bonus Poker @@ -86535,6 +89827,10 @@ pepk1030 Player's Edge (PK1030-PC088) 4 of a Kind Bonus Poker + + pepk1031 + Player's Edge (PK1031-PC088) 4 of a Kind Bonus Poker + pepk1069 Player's Edge (PK1069-PC088) Double Bonus Poker @@ -86551,6 +89847,10 @@ pepp0002a Player's Edge Plus (PP0002) Standard Draw Poker (International) + + pepp0005 + Player's Edge Plus (PP0005) Standard Draw Poker + pepp0006 Player's Edge Plus (PP0006) Standard Draw Poker @@ -86619,6 +89919,10 @@ pepp0042a Player's Edge Plus (PP0042) 10's or Better (set 2) + + pepp0042b + Player's Edge Plus (PP0042) 10's or Better (set 3) + pepp0043 Player's Edge Plus (PP0043) 10's or Better @@ -86703,6 +90007,10 @@ pepp0051 Player's Edge Plus (PP0051) Joker Poker + + pepp0052 + Player's Edge Plus (PP0052) Joker Poker (Aces or Better) + pepp0053 Player's Edge Plus (PP0053) Joker Poker (Aces or Better) @@ -86787,9 +90095,17 @@ pepp0078 Player's Edge Plus (PP0078) Standard Draw Poker + + pepp0079 + Player's Edge Plus (PP0079) Standard Draw Poker + pepp0083 - Player's Edge Plus (PP0083) 10's or Better + Player's Edge Plus (PP0083) 10's or Better (set 1) + + + pepp0083a + Player's Edge Plus (PP0083) 10's or Better (set 2) pepp0085 @@ -86801,7 +90117,11 @@ pepp0094 - Player's Edge Plus (PP0094) Standard Draw Poker + Player's Edge Plus (PP0094) Standard Draw Poker (set 1) + + + pepp0094a + Player's Edge Plus (PP0094) Standard Draw Poker (set 2) pepp0103 @@ -86835,6 +90155,10 @@ pepp0116a Player's Edge Plus (PP0116) Standard Draw Poker (Mirage) + + pepp0117 + Player's Edge Plus (PP0117) Standard Draw Poker + pepp0118 Player's Edge Plus (PP0118) Standard Draw Poker @@ -86843,9 +90167,17 @@ pepp0120 Player's Edge Plus (PP0120) Wild Sevens Poker + + pepp0122 + Player's Edge Plus (PP0122) Deuces Wild Poker + pepp0125 - Player's Edge Plus (PP0125) Deuces Wild Poker + Player's Edge Plus (PP0125) Deuces Wild Poker (set 1) + + + pepp0125a + Player's Edge Plus (PP0125) Deuces Wild Poker (set 2) pepp0126 @@ -86883,6 +90215,10 @@ pepp0132 Player's Edge Plus (PP0132) Standard Draw Poker + + pepp0143 + Player's Edge Plus (PP0143) Deuces Joker Wild Poker + pepp0150 Player's Edge Plus (PP0150) Standard Draw Poker @@ -87141,7 +90477,11 @@ pepp0418 - Player's Edge Plus (PP0418) Deuces Wild Poker + Player's Edge Plus (PP0418) Deuces Wild Poker (set 1) + + + pepp0418a + Player's Edge Plus (PP0418) Deuces Wild Poker (set 2) pepp0419 @@ -87157,7 +90497,11 @@ pepp0420 - Player's Edge Plus (PP0420) Standard Draw Poker + Player's Edge Plus (PP0420) Standard Draw Poker (set 1) + + + pepp0420a + Player's Edge Plus (PP0420) Standard Draw Poker (set 2) pepp0423 @@ -87175,6 +90519,10 @@ pepp0423c Player's Edge Plus (PP0423) Standard Draw Poker (set 4) + + pepp0425 + Player's Edge Plus (PP0425) Joker Poker + pepp0426 Player's Edge Plus (PP0426) Joker Poker @@ -87193,7 +90541,11 @@ pepp0430 - Player's Edge Plus (PP0430) Deuces Joker Wild Poker + Player's Edge Plus (PP0430) Deuces Joker Wild Poker (set 1) + + + pepp0430a + Player's Edge Plus (PP0430) Deuces Joker Wild Poker (set 2) pepp0431 @@ -87235,6 +90587,10 @@ pepp0450 Player's Edge Plus (PP0450) Loose Deuce Deuces Wild! Poker + + pepp0451 + Player's Edge Plus (PP0451) Bonus Poker Deluxe + pepp0452 Player's Edge Plus (PP0452) Double Deuces Wild Poker (set 1) @@ -87265,12 +90621,20 @@ pepp0459 - Player's Edge Plus (PP0459) Joker Poker + Player's Edge Plus (PP0459) Joker Poker (set 1) + + + pepp0459a + Player's Edge Plus (PP0459) Joker Poker (set 2) pepp0467 Player's Edge Plus (PP0467) 4 of a Kind Bonus Poker + + pepp0469 + Player's Edge Plus (PP0469) Deuces Wild Poker + pepp0472 Player's Edge Plus (PP0472) Deuces Wild Poker @@ -87281,7 +90645,11 @@ pepp0508 - Player's Edge Plus (PP0508) Loose Deuce Deuces Wild! Poker + Player's Edge Plus (PP0508) Loose Deuce Deuces Wild! Poker (set 1) + + + pepp0508a + Player's Edge Plus (PP0508) Loose Deuce Deuces Wild! Poker (set 2) pepp0509 @@ -87353,7 +90721,11 @@ pepp0540 - Player's Edge Plus (PP0540) Double Bonus Poker + Player's Edge Plus (PP0540) Double Bonus Poker (set 1) + + + pepp0540a + Player's Edge Plus (PP0540) Double Bonus Poker (set 2) pepp0542 @@ -87435,13 +90807,21 @@ pepp0728 Player's Edge Plus (PP0728) Double Bonus Poker + + pepp0729 + Player's Edge Plus (PP0729) Double Bonus Poker + pepp0733 Player's Edge Plus (PP0733) Double Aces and Faces Bonus Poker pepp0750 - Player's Edge Plus (PP0750) Standard Draw Poker + Player's Edge Plus (PP0750) Standard Draw Poker (set 1) + + + pepp0750a + Player's Edge Plus (PP0750) Standard Draw Poker (set 2) pepp0757 @@ -87463,6 +90843,10 @@ pepp0775 Player's Edge Plus (PP0775) Royal Deuces Poker?? + + pepp0777 + Player's Edge Plus (PP0777) Royal Deuces Poker?? + pepp0797 Player's Edge Plus (PP0797) One Eyed Jacks Wild Poker @@ -87703,6 +91087,10 @@ perfrmau Performan (US) + + perlacrb + La Perla del Caribe (V1.0, Catalonia) + pesadelo Pesadelo (bootleg of Konami Knightmare) @@ -87757,11 +91145,11 @@ petacon - Petaco (new hardware) + Petaco (new hardware, set 1) petacona - Petaco (new hardware, alternate set) + Petaco (new hardware, set 2) peterpak @@ -87803,6 +91191,10 @@ pex0013ka Player's Edge Plus (X000013K+XK000012) Keno + + pex0014p + Player's Edge Plus (X000014P+XP000055) Standard Draw Poker + pex0040p Player's Edge Plus (X000040P+XP000038) Standard Draw Poker @@ -87951,6 +91343,10 @@ pex0124p Player's Edge Plus (X000124P+XP000038) Deuces Wild Poker + + pex0127p + Player's Edge Plus (X000127P+XP000038) Deuces Wild Poker + pex0150p Player's Edge Plus (X000150P+XP000038) Standard Draw Poker @@ -87985,7 +91381,7 @@ pex0225p - Player's Edge Plus (X000225P+XP000079) Dueces Joker Wild Poker + Player's Edge Plus (X000225P+XP000079) Deuces Joker Wild Poker pex0242p @@ -88013,12 +91409,16 @@ pex0430p - Player's Edge Plus (X000430P+XP000079) Dueces Joker Wild Poker + Player's Edge Plus (X000430P+XP000079) Deuces Joker Wild Poker pex0434p Player's Edge Plus (X000434P+XP000038) Bonus Poker Deluxe + + pex0444p + Player's Edge Plus (X000444P+XP000038) Standard Draw Poker + pex0447p Player's Edge Plus (X000447P+XP000038) Standard Draw Poker @@ -88089,7 +91489,7 @@ pex0556p - Player's Edge Plus (X000556P+XP000038) Dueces Joker Wild Poker + Player's Edge Plus (X000556P+XP000038) Deuces Joker Wild Poker pex0557p @@ -88159,6 +91559,10 @@ pex2002p Player's Edge Plus (X002002P+XP000038) Double Double Bonus Poker + + pex2004p + Player's Edge Plus (X002004P+XP000038) Double Double Bonus Poker + pex2010p Player's Edge Plus (X002010P+XP000038) Nevada Bonus Poker @@ -88255,6 +91659,10 @@ pex2045p Player's Edge Plus (X002045P+XP000038) Triple Bonus Poker + + pex2046p + Player's Edge Plus (X002046P+XP000038) Ace$ Bonus Poker + pex2066p Player's Edge Plus (X002066P+XP000038) Double Double Bonus Poker @@ -88601,7 +92009,7 @@ pf2012 - Psychic Force 2012 + Psychic Force 2012 (Ver 2.04J) pfevr_l2 @@ -88655,6 +92063,10 @@ pgoal Pleasure Goal / Futsal - 5 on 5 Mini Soccer (NGM-219) + + ph_04 + Phantom Haus (0.4) + phantasm Phantasm (Japan) @@ -88797,27 +92209,47 @@ photoply2k1it - Photo Play 2001 (Italian) + Photo Play 2001 (Italy) + + + photoply2k1mtnl + Photo Play Masters 2001 (Netherlands) + + + photoply2k1nl + Photo Play 2001 (Netherlands) photoply2k1sp Photo Play 2001 (Spanish) + + photoply2k2be + Photo Play 2002 (Belgium) + photoply2k4 Photo Play 2004 + + photoply2knl + Photo Play 2000 (Netherlands) + photoply2ksp - Photo Play 2000 (Spanish) + Photo Play 2000 (Spain) photoply98sp - Photo Play 1998 (Spanish) + Photo Play 1998 (Spain) + + + photoply99nl + Photo Play 1999 (Netherlands) photoply99sp - Photo Play 1999 (Spanish) + Photo Play 1999 (Spain) photopsxsp @@ -88857,19 +92289,19 @@ phrcraze - Phraze Craze (6221-40, U5-0A) + Phraze Craze (6221-40, U5-3A Expanded Questions) phrcrazea - Phraze Craze (6221-40, U5-0) + Phraze Craze (6221-40, U5-3 Expanded Questions) phrcrazeb - Phraze Craze (6221-40, U5-3A Expanded Questions) + Phraze Craze (6221-40, U5-0A) phrcrazec - Phraze Craze (6221-40, U5-3 Expanded Questions) + Phraze Craze (6221-40, U5-0) phrcrazev @@ -88959,6 +92391,10 @@ pigskinb Pigskin 621AD (rev 1.1 6/05/90) + + pikkaric + Pikkari Chance + pimbal Pimbal (Pinball 3000) @@ -88987,6 +92423,10 @@ pinchamp7 Pinball Champ (7 digits) + + pinchamp7f + Pinball Champ (7 digits French speech) + pinchamp7g Pinball Champ (7 digits German speech) @@ -88995,6 +92435,10 @@ pinchamp7i Pinball Champ (7 digits Italian speech) + + pinchampf + Pinball Champ (French speech) + pinchampg Pinball Champ (German speech) @@ -89013,7 +92457,7 @@ pingu - Pingu's Ice Block + Pingu's Ice Block (Ver.1.00 2006/01/27) pinguinos @@ -89199,6 +92643,10 @@ pirata6 Pirates (10001511, NSW/ACT) + + pirata6a + Pirates (10122311, ASP) + pirate Pirate (051229 World) @@ -89361,7 +92809,11 @@ pitapat - Pitapat Puzzle + Pitapat Puzzle (set 1) + + + pitapata + Pitapat Puzzle (set 2) pitboss @@ -89387,9 +92839,13 @@ pitboss2 Pit Boss II (9221-01C) + + pitbossa + The Pit Boss (2214-07, U5-0) + pitbossm - Pit Boss Megastar (9244-00-01) + Pit Boss Megastar (9244-00-01 R0B) pitbossm4 @@ -89397,7 +92853,11 @@ pitbossma - Pit Boss Megastar (9243-00-01) + Pit Boss Megastar (9244-00-01 R0) + + + pitbossmb + Pit Boss Megastar (9243-00-01 R0) pitbossps @@ -89499,8 +92959,16 @@ pitnruna Pit & Run - F-1 Race (set 2) + + pitnrunb + Pit & Run - F-1 Race (set 3) + pjustic + Project Justice / Moero! Justice Gakuen (Rev B) + + + pjustica Project Justice / Moero! Justice Gakuen (Rev A) @@ -89559,6 +93027,10 @@ pkscram PK Scramble + + pkspirit + Poker Spirit + pktet346 PK Tetris (v346I) @@ -89589,7 +93061,19 @@ pkunwarj - Penguin-Kun Wars (Japan) + Penguin-Kun Wars (Japan, set 1) + + + pkunwarja + Penguin-Kun Wars (Japan, set 2) + + + pl6_kfp + Kung Fu Pounda + + + pl6_lgk + Let's Get Kraken platoon @@ -89621,139 +93105,143 @@ playboyf - Playboy (5.00 France) + Playboy (CPU 5.00, display F5.00, France) playboyf_203 - Playboy (2.03 France) + Playboy (CPU 2.03, display F2.01, France) playboyf_300 - Playboy (3.00 France) + Playboy (CPU 3.00, display F3.00, France) playboyf_302 - Playboy (3.02 France) + Playboy (CPU 3.02, display F3.00, France) playboyf_303 - Playboy (3.03 France) + Playboy (CPU 3.03, display F3.00, France) playboyf_401 - Playboy (4.01 France) + Playboy (CPU 4.01, display F4.00, France) playboyg - Playboy (5.00 Germany) + Playboy (CPU 5.00, display G5.00, Germany) playboyg_203 - Playboy (2.03 Germany) + Playboy (CPU 2.03, display G2.01, Germany) playboyg_300 - Playboy (3.00 Germany) + Playboy (CPU 3.00, display G3.00, Germany) playboyg_302 - Playboy (3.02 Germany) + Playboy (CPU 3.02, display G3.00, Germany) playboyg_303 - Playboy (3.03 Germany) + Playboy (CPU 3.03, display G3.00, Germany) playboyg_401 - Playboy (4.01 Germany) + Playboy (CPU 4.01, display G4.00, Germany) playboyi - Playboy (5.00 Italy) + Playboy (CPU 5.00, display I5.00, Italy) playboyi_203 - Playboy (2.03 Italy) + Playboy (CPU 2.03, display I2.01, Italy) playboyi_300 - Playboy (3.00 Italy) + Playboy (CPU 3.00, display I3.00, Italy) playboyi_302 - Playboy (3.02 Italy) + Playboy (CPU 3.02, display I3.00, Italy) playboyi_303 - Playboy (3.03 Italy) + Playboy (CPU 3.03, display I3.00, Italy) playboyi_401 - Playboy (4.01 Italy) + Playboy (CPU 4.01, display I4.00, Italy) playboyl - Playboy (5.00 Spain) + Playboy (CPU 5.00, display L5.00, Spain) playboyl_203 - Playboy (2.03 Spain) + Playboy (CPU 2.03, display L2.01, Spain) playboyl_300 - Playboy (3.00 Spain) + Playboy (CPU 3.00, display L3.00, Spain) playboyl_302 - Playboy (3.02 Spain) + Playboy (CPU 3.02, display L3.00, Spain) playboyl_303 - Playboy (3.03 Spain) + Playboy (CPU 3.03, display L3.00, Spain) playboyl_401 - Playboy (4.01 Spain) + Playboy (CPU 4.01, display L4.00, Spain) playboys - Playboy (5.00) + Playboy (CPU 5.00, display A5.00) playboys_203 - Playboy (2.03) + Playboy (CPU 2.03, display A2.01) playboys_300 - Playboy (3.00) + Playboy (CPU 3.00, display A3.00) playboys_302 - Playboy (3.02) + Playboy (CPU 3.02, display A3.00) playboys_303 - Playboy (3.03) + Playboy (CPU 3.03, display A3.00) playboys_401 - Playboy (4.01) + Playboy (CPU 4.01, display A4.00) playnew - Playboy (ARM7 Sound Board) + Playboy (CPU 5.00, display A5.00, ARM7 sound board) plctr13b Police Trainer (Rev 1.3B) + + pldoraemon + Doraemon (Power Link) + plegends - Gogetsuji Legends (US, Ver. 95/06/20) + Gogetsuji Legends (US, Ver. 95.06.20) plegendsj - Gouketsuji Gaiden - Saikyou Densetsu (Japan, Ver. 95/06/20) + Gouketsuji Gaiden - Saikyou Densetsu (Japan, Ver. 95.06.20) pleiadbl @@ -89773,7 +93261,11 @@ pleiadsi - Pleiads (Irecsa) + Pleiads (Irecsa, set 1) + + + pleiadsia + Pleiads (Irecsa, set 2) pleiadsn @@ -89811,6 +93303,10 @@ plottingu Plotting (US) + + plpittashi + Love Pi Chan (Power Link) + plsmaswd Plasma Sword: Nightmare of Bilstein (USA 980316) @@ -89839,9 +93335,25 @@ plusalph Plus Alpha + + plutus + Plutus (V100) + plycntrchtr - PlayCenter Champions Tournament (v9.3) + PlayCenter Champions Tournament (v9.3, 'Epox' hardware) + + + plycntrchtrc + PlayCenter Champions Tournament (v9.3, 'Celeron' hardware) + + + plycntrchtrk + PlayCenter Champions Tournament (v9.3, 'K6' hardware) + + + plycntre3 + Playcenter Evolution III (v14.0, 'Epox' hardware) plygonet @@ -89851,6 +93363,10 @@ pma PMA Poker + + pmonster + Gamushara Battle! Puchi Monster (Japan 990519) + pmpoker PlayMan Poker (German) @@ -89947,6 +93463,10 @@ pokeresp Poker (Electro-Sport) + + pokeri + Poker (Impera, V11/90b) + pokeriwc Poker UCMC/IWC (ver 162.03) @@ -89965,7 +93485,7 @@ pokersis - unknown Sisteme France Poker + Good Luck! poker (Sisteme France) pokio @@ -89995,6 +93515,10 @@ pokrdice Poker Dice (V1.7) + + pokrwild + Poker's Wild (V117) + polar Polar Explorer @@ -90055,6 +93579,10 @@ poleposa1 Pole Position (Atari version 1) + + poleposa1n + Pole Position (Atari version 1 on Namco PCB) + poleposa2 Pole Position (Atari version 2) @@ -90167,6 +93695,10 @@ pompeia6 Pompeii (10002211, NSW/ACT) + + pompeia6a + Pompeii (10122411, ASP) + pompeia6u Pompeii (0151158, US) @@ -90189,15 +93721,15 @@ pong - Pong (Rev E) external [TTL] + Pong (Rev E) [TTL] - pongd - Pong Doubles [TTL] + pongboo2 + Pong Boo! 2 (Ver. 1.31) - pongf - Pong (Rev E) [TTL] + pongd + Pong Doubles [TTL] ponpoko @@ -90211,6 +93743,10 @@ pontoon Pontoon (FD1094 317-0153) + + pontoona + Pontoon (FD1094 317-?) + ponttehk Pontoon (Tehkan) @@ -90309,7 +93845,7 @@ pop_hh - Popper (Hard Head bootleg) + Popper (bootleg of Hard Head) pop_la4 @@ -90451,6 +93987,14 @@ popnanm2 Pop'n Music Animelo 2 + + popnanm2a + Pop'n Music Animelo 2 (license expired) + + + popnanma + Pop'n Music Animelo (license expired) + popnmt Pop'n Music Mickey Tunes @@ -91501,12 +95045,16 @@ primrage - Primal Rage (version 2.3) + Primal Rage (version 2.3, Jan 1995) primrage20 Primal Rage (version 2.0) + + primrageo + Primal Rage (version 2.3, Dec 1994) + princess Cosmic Princess @@ -91535,6 +95083,10 @@ prmtmfgto Prime Time Fighter (Ver 2.1A 1993/05/21) (Old Version) + + probowl2 + Pro Bowl 2 + profpac Professor Pac-Man @@ -91597,11 +95149,11 @@ propcycl - Prop Cycle (Rev. PR2 Ver.A, World) + Prop Cycle (World, PR2 Ver.A) propcyclj - Prop Cycle (Rev. PR1 Ver.A, Japan) + Prop Cycle (Japan, PR1 Ver.A) prophecy @@ -91611,10 +95163,6 @@ prosoccr Pro Soccer - - prospdp - Unknown Compumatic ProSPDP based darts machine - prosport Pro Sports - Bowling, Tennis, and Golf @@ -91793,7 +95341,7 @@ ptblank2 - Point Blank 2 (GNB5/VER.A) + Point Blank 2 (World, GNB5/VER.A) ptblank2a @@ -91805,7 +95353,7 @@ ptblank2c - Point Blank 2 (unknown region) + Point Blank 2 (World, unknown version) ptblank2ua @@ -91861,7 +95409,7 @@ puckmana - PuckMan (Japan set 2) + Puck Man (Alca bootleg) puckmanb @@ -91885,15 +95433,11 @@ puckpkmn - Puckman Pockimon (set 1) - - - puckpkmna - Puckman Pockimon (set 2) + Puckman Pockimon Genie 2000 puckpkmnb - Puckman Pockimon (set 3) + Puckman Pockimon Genie 2000 (bootleg) pulirula @@ -91923,10 +95467,18 @@ pulstar Pulstar + + pumpit1 + Pump It Up: The 1st Dance Floor (ver 0.53.1999.9.31) + punchita Punch-Out!! (Italian bootleg) + + punchkid + Punching Kid (Japan) + punchout Punch-Out!! (Rev B) @@ -91959,13 +95511,21 @@ punipic3 The Punisher (bootleg with PIC16C57, set 3) + + punishbs + The Punisher (1vs2 Match, Hack) + + + punishdw + The Punisher (Warriors, Hack) + punisher The Punisher (World 930422) punisherb - The Punisher (bootleg, 930422 etc) + The Punisher (bootleg) punisherbz @@ -91983,6 +95543,22 @@ punisheru The Punisher (USA 930422) + + punishfw + The Punisher (Framework 2020, Hack) + + + punishhr + The Punisher (1vs2 Invincible, Hack) + + + punishly + The Punisher (1vs2 Flame, Hack) + + + punishpf + The Punisher (1vs2 Perfect, Hack) + punishrj The Punisher (Japan 930422) @@ -92025,7 +95601,11 @@ pururun - Pururun + Pururun (set 1) + + + pururuna + Pururun (set 2) pushman @@ -92135,6 +95715,14 @@ puzlstara Puzzle Star / Mohuan Xingzuo (ver. 100MG, 09/20/99 build) + + puzzball + Puzz Ball (Japan, PZB1 Ver.C) + + + puzzballa + Puzz Ball (Japan, PZB1 Ver.A) + puzzldpr Puzzle De Pon! R! @@ -92241,7 +95829,7 @@ pwrflip - Power Flipper Pinball Shooting v1.33 + Power Flipper Pinball Shooting (v1.33) pwrgoal @@ -92249,11 +95837,15 @@ pwrinst2 - Power Instinct 2 (US, Ver. 94/04/08) + Power Instinct 2 (US, Ver. 94.04.08, set 1) + + + pwrinst2a + Power Instinct 2 (US, Ver. 94.04.08, set 2) pwrinst2j - Gouketsuji Ichizoku 2 (Japan, Ver. 94/04/08) + Gouketsuji Ichizoku 2 (Japan, Ver. 94.04.08) pwrinst2k @@ -92471,6 +96063,10 @@ qmhayaku Quiz-Mahjong Hayaku Yatteyo! (Japan) + + qncrash + Quick & Crash (V2.200) + qndream Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 96086) @@ -92487,6 +96083,14 @@ qnilea6 Queen of the Nile (3J011111, NSW/ACT) + + qnilea6a + Queen of the Nile (10204311, ASP) + + + qnilea6b + Queen of the Nile (10192311, ASP) + qnileb Queen of the Nile (0100439V, NSW/ACT) @@ -92544,7 +96148,11 @@ Queen of the Nile (0300785V, New Zealand) - qnileql + qnilepe + Queen of the Nile (04J00784, Peru) + + + qnileq Queen of the Nile (0201200V, Queensland) @@ -92555,6 +96163,10 @@ qnilesea Queen of the Nile Special Edition (10102811, NSW/ACT) + + qnileseb + Queen of the Nile Special Edition (10127411, ASP) + qnileu Queen of the Nile (GHG4091-02, US) @@ -92563,10 +96175,6 @@ qnileua Queen of the Nile (GHG4091-03, US) - - qnilev - Queen of the Nile (04J00784, Peru?) - qntoond Quintoon (Dutch, Game Card 95-750-243) @@ -92607,6 +96215,10 @@ qsheba Queen of Sheba (10133721, NSW/ACT) + + qshebaa + Queen of Sheba (30146921, ASP) + qsww Quiz Syukudai wo Wasuremashita (Japan, Floppy Based, FD1094 317-0058-08b) @@ -92859,10 +96471,34 @@ quizard_17 Quizard (v1.7, German, i8751 DE 11 D3) + + quizardff + Quizard Fun and Fascination (French Edition V1 - 01/96) + + + quizardi + Quizard (v1.8, Italian, i8751 IT 11 I2) + + + quizardi_10 + Quizard (v1.0, Italian, i8751 IT 11 I2) + + + quizardi_12 + Quizard (v1.2, Italian, i8751 IT 11 I2) + + + quizardi_17 + Quizard (v1.7, Italian, i8751 IT 11 I2) + quizchq Quiz Channel Question (Japan, Ver 1.00) + + quizchqk + Quiz Channel Question (Korea, Ver 1.10) + quizchql Quiz Channel Question (Taiwan?, Ver 1.23) @@ -93007,6 +96643,10 @@ r_blackm4 Black Magic 4 + + r_blackmag + Black Magic + r_cavalier Cavalier @@ -93029,11 +96669,11 @@ r_mrdoom - Mr Doom + Mr. Doom r_mrevil - Mr Evil + Mr. Evil r_pokrplus @@ -93049,7 +96689,7 @@ r_swash - Swashbuckler + SwashBuckler r_torneo @@ -93285,15 +96925,99 @@ racingj - Racing Jam (JAC) + Racing Jam (GQ676UAC) racingj2 - Racing Jam: Chapter 2 (EAE) + Racing Jam: Chapter II (GQ888UAA) + + + racingj2a + Racing Jam: Chapter II (GQ888AAA) + + + racingj2e + Racing Jam: Chapter II (GQ888EAA) racingj2j - Racing Jam: Chapter 2 (JAE) + Racing Jam: Chapter II (GQ888JAA) + + + racingj2m + Racing Jam: Chapter II (GM888UAA) + + + racingj2ma + Racing Jam: Chapter II (GM888AAA) + + + racingj2me + Racing Jam: Chapter II (GM888EAA) + + + racingj2mj + Racing Jam: Chapter II (GM888JAA) + + + racingj2n + Racing Jam: Chapter II (GN888UAA) + + + racingj2na + Racing Jam: Chapter II (GN888AAA) + + + racingj2ne + Racing Jam: Chapter II (GN888EAA) + + + racingj2nj + Racing Jam: Chapter II (GN888JAA) + + + racingja + Racing Jam (GQ676AAC) + + + racingje + Racing Jam (GQ676EAC) + + + racingjj + Racing Jam (GQ676JAC) + + + racingjm + Racing Jam (GM676UAC) + + + racingjma + Racing Jam (GM676AAC) + + + racingjme + Racing Jam (GM676EAC) + + + racingjmj + Racing Jam (GM676JAC) + + + racingjn + Racing Jam (GN676UAC) + + + racingjna + Racing Jam (GN676AAC) + + + racingjne + Racing Jam (GN676EAC) + + + racingjnj + Racing Jam (GN676JAC) racjamdx @@ -93361,11 +97085,11 @@ radikalb - Radikal Bikers (Version 2.02) + Radikal Bikers (version 2.02) radikalba - Radikal Bikers (Version 2.02, Atari license) + Radikal Bikers (version 2.02, Atari license) radikaldrt @@ -93433,12 +97157,16 @@ raiden - Raiden (set 1) + Raiden (World set 1) raiden2 Raiden II (US, set 1) + + raiden2au + Raiden II (Australia) + raiden2dx Raiden II (harder, Raiden DX hardware, Korea) @@ -93521,11 +97249,11 @@ raidena - Raiden (set 2) + Raiden (Alternate Hardware) raidenb - Raiden (set 3, newer hardware) + Raiden (World set 2, newer hardware) raidendx @@ -93571,6 +97299,10 @@ raidendxu Raiden DX (US) + + raidenj + Raiden (Japan) + raidenk Raiden (Korea) @@ -93679,6 +97411,14 @@ rallybik Rally Bike / Dash Yarou + + rallych + Rally Chase (Neo CD conversion) + + + rallypnt2 + Rally Point 2 + rallys Rallys (bootleg of Spectar, set 1) @@ -93695,6 +97435,10 @@ rallyxa Rally X + + rallyxeg + Rally X (Video Game bootleg) + rallyxm Rally X (Midway) @@ -93805,7 +97549,7 @@ rasce - Ra Sceptor (Russia) + Ra's Scepter (Russia) rascot @@ -93880,16 +97624,20 @@ Raven (German) - raveracj - Rave Racer (Rev. RV1 Ver.B, Japan) + raverace + Rave Racer (World, RV2 Ver.B) + + + raveracej + Rave Racer (Japan, RV1 Ver.B) - raveracja - Rave Racer (Rev. RV1, Japan) + raveraceja + Rave Racer (Japan, RV1) raveracw - Rave Racer (Rev. RV2 Ver.B, World) + Rave Racer (Rev. RV2, World) raycris @@ -93956,8 +97704,8 @@ Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - The Newcomers (set 2) - rbff2bh - Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - the newcomers (Secret Character Hack) + rbff2bs + Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - The Newcomers (Secret Character, Hack) rbff2h @@ -93968,8 +97716,8 @@ Real Bout Fatal Fury 2 - The Newcomers (Korean release) - rbffspbh - Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special (Boss Hack) + rbffspbs + Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special (Boss, Hack) rbffspec @@ -94059,10 +97807,6 @@ rcirulet Ruleta RCI (6-players, Spanish) - - rckman2j - Rockman 2: The Power Fighters (Japan 960708) - rclimb Rock Climber (040815 World) @@ -94141,83 +97885,83 @@ rctnew - RollerCoaster Tycoon (ARM7 Sound Board) + RollerCoaster Tycoon (CPU 7.02, display A7.01, ARM7 sound board) rctycn - RollerCoaster Tycoon (7.02) + RollerCoaster Tycoon (CPU 7.02, display A7.01) rctycn_400 - RollerCoaster Tycoon (4.00) + RollerCoaster Tycoon (CPU 4.00, display A4.00) rctycn_600 - RollerCoaster Tycoon (6.00) + RollerCoaster Tycoon (CPU 6.00, display A6.00) rctycn_701 - RollerCoaster Tycoon (7.01) + RollerCoaster Tycoon (CPU 7.01, display A7.01) rctycnf - RollerCoaster Tycoon (7.02 France) + RollerCoaster Tycoon (CPU 7.02, display F7.01, France) rctycnf_400 - RollerCoaster Tycoon (4.00 France) + RollerCoaster Tycoon (CPU 4.00, display F4.00, France) rctycnf_600 - RollerCoaster Tycoon (6.00 France) + RollerCoaster Tycoon (CPU 6.00, display F6.00, France) rctycnf_701 - RollerCoaster Tycoon (7.01 France) + RollerCoaster Tycoon (CPU 7.01, display F7.00, France) rctycng - RollerCoaster Tycoon (7.02 Germany) + RollerCoaster Tycoon (CPU 7.02, display G7.01, Germany) rctycng_400 - RollerCoaster Tycoon (4.00 Germany) + RollerCoaster Tycoon (CPU 4.00, display G4.00, Germany) rctycng_701 - RollerCoaster Tycoon (7.01 Germany) + RollerCoaster Tycoon (CPU 7.01, display G7.00, Germany) rctycni - RollerCoaster Tycoon (7.02 Italy) + RollerCoaster Tycoon (CPU 7.02, display I7.01, Italy) rctycni_400 - RollerCoaster Tycoon (4.00 Italy) + RollerCoaster Tycoon (CPU 4.00, display I4.00, Italy) rctycni_600 - RollerCoaster Tycoon (6.00 Italy) + RollerCoaster Tycoon (CPU 6.00, display I6.00, Italy) rctycni_701 - RollerCoaster Tycoon (7.01 Italy) + RollerCoaster Tycoon (CPU 7.01, display I7.00, Italy) rctycnl - RollerCoaster Tycoon (7.02 Spain) + RollerCoaster Tycoon (CPU 7.02, display L7.01, Spain) rctycnl_400 - RollerCoaster Tycoon (4.00 Spain) + RollerCoaster Tycoon (CPU 4.00, display L4.00, Spain) rctycnl_600 - RollerCoaster Tycoon (6.00 Spain) + RollerCoaster Tycoon (CPU 6.00, display L6.00, Spain) rctycnl_701 - RollerCoaster Tycoon (7.01 Spain) + RollerCoaster Tycoon (CPU 7.01, display L7.00, Spain) rdaction @@ -94453,12 +98197,16 @@ redbaron - Red Baron (Revised Hardware) + Red Baron (revised hardware) redbarona Red Baron + + redbird + Red Bird (bootleg of Space Firebird) + redclash Red Clash @@ -94483,6 +98231,14 @@ redearth Red Earth (Euro 961121) + + redearthn + Red Earth (Asia 961121, NO CD) + + + redearthnr1 + Red Earth (Asia 961023, NO CD) + redearthr1 Red Earth (Euro 961023) @@ -94521,12 +98277,20 @@ redhawks - Red Hawk (horizontal, Spain) + Red Hawk (horizontal, Spain, set 1) + + + redhawksa + Red Hawk (horizontal, Spain, set 2) redlin2p Redline Racer (2 players) + + redline + Red Line (v808, encrypted) + redrobin Red Robin @@ -94543,6 +98307,10 @@ redufob2 Defend the Terra Attack on the Red UFO (bootleg, set 2) + + redufob3 + Defend the Terra Attack on the Red UFO (bootleg, set 3) + reelemin Reel 'Em In (English) @@ -94555,6 +98323,10 @@ reelfun Reel Fun (Version 7.03) + + reelfun0 + Reel Fun (Version 7.00) + reelfun1 Reel Fun (Version 7.01) @@ -94576,7 +98348,7 @@ Reelin-n-Rockin (0100779V, NSW/ACT) - reelrockql + reelrockq Reelin-n-Rockin (0101460V, Queensland) @@ -94597,7 +98369,7 @@ reikaids - Reikai Doushi (Japan) + Reikai Doushi - Chinese Exorcist (Japan) relief @@ -94629,7 +98401,7 @@ renju - Renju Kizoku + Renju Kizoku - Kira Kira Gomoku Narabe repulse @@ -94824,8 +98596,8 @@ Rezon - rezont - Rezon (Taito) + rezono + Rezon (earlier) rf2 @@ -94929,35 +98701,43 @@ ridgera2 - Ridge Racer 2 (Rev. RRS2 Ver.B, World) + Ridge Racer 2 (World, RRS2) + + + ridgera28 + Ridge Racer 2 (World, RRS8) ridgera2j - Ridge Racer 2 (Rev. RRS1 Ver.B, Japan) + Ridge Racer 2 (Japan, RRS1 Ver.B) ridgera2ja - Ridge Racer 2 (Rev. RRS1, Japan) + Ridge Racer 2 (Japan, RRS1) ridgerac - Ridge Racer (Rev. RR3, World) + Ridge Racer (World, RR2 Ver.B) - ridgerac3 - Ridge Racer (Rev. RR2 Ver.B, World, 3-screen?) + ridgeraca + Ridge Racer (World, RR2) ridgeracb - Ridge Racer (Rev. RR2, World) + Ridge Racer (US, RR3 Ver.B) + + + ridgeracc + Ridge Racer (US, RR3) ridgeracf - Ridge Racer Full Scale (World) + Ridge Racer Full Scale (World, RRF2) ridgeracj - Ridge Racer (Rev. RR1, Japan) + Ridge Racer (Japan, RR1) ridgeraj @@ -95011,6 +98791,10 @@ rimrockn12b Rim Rockin' Basketball (V1.2, bootleg) + + rimrockn15 + Rim Rockin' Basketball (V1.5) + rimrockn16 Rim Rockin' Basketball (V1.6) @@ -95125,19 +98909,19 @@ rip300 - Ripley's Believe It or Not! (3.00) + Ripley's Believe It or Not! (CPU 3.00, display A3.00) rip301 - Ripley's Believe It or Not! (3.01) + Ripley's Believe It or Not! (CPU 3.01, display A3.20) rip302 - Ripley's Believe It or Not! (3.02) + Ripley's Believe It or Not! (CPU 3.02, display A3.20) rip310 - Ripley's Believe It or Not! (3.10) + Ripley's Believe It or Not! (CPU 3.10, display A3.20) ripcord @@ -95145,87 +98929,87 @@ ripf300 - Ripley's Believe It or Not! (3.00 France) + Ripley's Believe It or Not! (CPU 3.00, display F3.00, France) ripf301 - Ripley's Believe It or Not! (3.01 France) + Ripley's Believe It or Not! (CPU 3.01, display F3.01, France) ripf302 - Ripley's Believe It or Not! (3.02 France) + Ripley's Believe It or Not! (CPU 3.02, display F3.01, France) ripf310 - Ripley's Believe It or Not! (3.10 France) + Ripley's Believe It or Not! (CPU 3.10, display F3.01, France) ripg300 - Ripley's Believe It or Not! (3.00 Germany) + Ripley's Believe It or Not! (CPU 3.00, display G3.00, Germany) ripg301 - Ripley's Believe It or Not! (3.01 Germany) + Ripley's Believe It or Not! (CPU 3.01, display G3.00, Germany) ripg302 - Ripley's Believe It or Not! (3.02 Germany) + Ripley's Believe It or Not! (CPU 3.02, display G3.00, Germany) ripg310 - Ripley's Believe It or Not! (3.10 Germany) + Ripley's Believe It or Not! (CPU 3.10, display G3.00, Germany) ripi300 - Ripley's Believe It or Not! (3.00 Italy) + Ripley's Believe It or Not! (CPU 3.00, display I3.00, Italy) ripi301 - Ripley's Believe It or Not! (3.01 Italy) + Ripley's Believe It or Not! (CPU 3.01, display I3.00, Italy) ripi302 - Ripley's Believe It or Not! (3.02 Italy) + Ripley's Believe It or Not! (CPU 3.02, display I3.00, Italy) ripi310 - Ripley's Believe It or Not! (3.10 Italy) + Ripley's Believe It or Not! (CPU 3.10, display I3.00, Italy) ripl300 - Ripley's Believe It or Not! (3.00 Spain) + Ripley's Believe It or Not! (CPU 3.00, display L3.00, Spain) ripl301 - Ripley's Believe It or Not! (3.01 Spain) + Ripley's Believe It or Not! (CPU 3.01, display L3.01, Spain) ripl302 - Ripley's Believe It or Not! (3.02 Spain) + Ripley's Believe It or Not! (CPU 3.02, display L3.01, Spain) ripl310 - Ripley's Believe It or Not! (3.10 Spain) + Ripley's Believe It or Not! (CPU 3.10, display L3.01, Spain) ripleys - Ripley's Believe It or Not! (3.20) + Ripley's Believe It or Not! (CPU 3.20, display A3.20) ripleysf - Ripley's Believe It or Not! (3.20 France) + Ripley's Believe It or Not! (CPU 3.20, display F3.01, France) ripleysg - Ripley's Believe It or Not! (3.20 Germany) + Ripley's Believe It or Not! (CPU 3.20, display G3.00, Germany) ripleysi - Ripley's Believe It or Not! (3.20 Italy) + Ripley's Believe It or Not! (CPU 3.20, display I3.00, Italy) ripleysl - Ripley's Believe It or Not! (3.20 Spain) + Ripley's Believe It or Not! (CPU 3.20, display L3.01, Spain) ripoff @@ -95303,6 +99087,10 @@ rmhaisei Real Mahjong Haihai Seichouhen (Japan) + + rmontecarlo + Rally Montecarlo + rmpgwt Rampage: World Tour (rev 1.3) @@ -95405,7 +99193,7 @@ roadedge - Roads Edge / Round Trip (rev.B) + Roads Edge / Round Trip RV (rev.B) roadf @@ -95429,15 +99217,15 @@ roadriot - Road Riot 4WD (set 1, 04 Dec 1991) + Road Riot 4WD (04 Dec 1991, conversion kit) roadriota - Road Riot 4WD (set 2, 13 Nov 1991) + Road Riot 4WD (13 Nov 1991, conversion kit) roadriotb - Road Riot 4WD (set 3, 04 Jun 1991) + Road Riot 4WD (04 Jun 1991, dedicated twin) roadrun1 @@ -95467,6 +99255,10 @@ roadrunr Road Runner + + roadstar + Road Star + roadtrip Road Trip (0152539, US) @@ -95555,10 +99347,6 @@ robo_a34 Robocop (3.4) - - roboarma - Robo Army (set 2) - roboarmy Robo Army @@ -95569,7 +99357,7 @@ robocop - Robocop (World revision 4) + Robocop (World, revision 4) robocop2 @@ -95605,15 +99393,15 @@ robocopu - Robocop (US revision 1) + Robocop (US, revision 1) robocopu0 - Robocop (US revision 0) + Robocop (US, revision 0) robocopw - Robocop (World revision 3) + Robocop (World, revision 3) robocp2j @@ -95739,10 +99527,18 @@ rockman2j Rockman 2: The Power Fighters (Japan 960708) + + rockmanbc + Rockman EXE Battle Chip Stadium Ver.3.00 + rockmanj Rockman: The Power Battle (CPS1, Japan 950922) + + rockmanmdl + Rockman EXE The Medal Operation + rockn Rock'n Tread (Japan) @@ -95891,6 +99687,18 @@ roldisco Roller Disco + + roljokr1 + Rolling Joker + + + roljokr2 + Rolling Joker (v23.11.91) + + + roljokr3 + Rolling Joker (v.99.7) + rolla unknown 'Rolla' slot machine @@ -95935,6 +99743,10 @@ rollfr_5 Roll Fruit (100924) + + rolling + Rolling + rollingc Rolling Crash / Moon Base @@ -96121,7 +99933,11 @@ royalcrd_nes - Royal Card (stealth with NES multigame) + Royal Card (stealth with NES multigame, set 1) + + + royalcrd_nesa + Royal Card (stealth with NES multigame, set 2) royalcrda @@ -96223,6 +100039,10 @@ roypok96c Royal Poker '96 (set 4, C3 board) + + rpanic + Rolling Panic (v2.33) + rpatrol River Patrol (Japan) @@ -96307,6 +100127,10 @@ rs_lx5 Red and Ted's Road Show (Lx-5) + + rs_pa2 + Red and Ted's Road Show (PA-2 prototype) + rsgun Radiant Silvergun (JUET 980523 V1.000) @@ -96411,6 +100235,10 @@ rubymag Ruby Magic (10125711, NSW/ACT) + + rubymaga + Ruby Magic (10148811, ASP) + rugby Rugby? (four roses hardware) @@ -96519,6 +100347,10 @@ ruprup Roll Up! Roll Up!! (10115911, NSW/ACT) + + rush + Rush (1.0) + rushatck Rush'n Attack (US) @@ -96577,7 +100409,11 @@ rygarj - Argus no Senshi (Japan) + Argus no Senshi (Japan set 1) + + + rygarj2 + Argus no Senshi (Japan set 2) ryorioh @@ -96647,6 +100483,14 @@ s1945iii Strikers 1945 III (World) / Strikers 1999 (Japan) + + s1945iiibl + Strikers 1945 III (World) / Strikers 1999 (Japan) (bootleg, set 1) + + + s1945iiibla + Strikers 1945 III (World) / Strikers 1999 (Japan) (bootleg, set 2) + s1945j Strikers 1945 (Japan) @@ -96723,6 +100567,10 @@ safemon Safe Money (Konami Endeavour, Russia) + + safemonn + Safe Money (Konami Endeavour, NSW) + sagaia Sagaia (dual screen) (World) @@ -96731,81 +100579,113 @@ sahalove Sahara Love (France) + + sailmnee + Bishoujo Senshi Sailor Moon (Enhanced Edition v5 Final, Hack) + + + sailmnhy + Bishoujo Senshi Sailor Moon (Black Moon, Hack) + + + sailmnkf + Bishoujo Senshi Sailor Moon (Korea-France, Hack) + + + sailmnsl + Bishoujo Senshi Sailor Moon (10-Lo, Hack) + + + sailmnxy + Bishoujo Senshi Sailor Moon (New Moon, Hack) + + + sailmnyh + Bishoujo Senshi Sailor Moon (Optimised, Hack) + + + sailmnyy + Bishoujo Senshi Sailor Moon (Serena Tsukino, Hack) + sailormn - Pretty Soldier Sailor Moon (Ver. 95/03/22B, Europe) + Pretty Soldier Sailor Moon (Version 95/03/22B, Europe) - sailormnh - Bishoujo Senshi Sailor Moon (Ver. 95/03/22B, Hong Kong) + sailormnffj + Pretty Soldier Sailor Moon (Fighting For Justice, Hack) - sailormnj - Bishoujo Senshi Sailor Moon (Ver. 95/03/22B, Japan) + sailormnh + Bishoujo Senshi Sailor Moon (Version 95/03/22B, Hong Kong) - sailormnjee - Pretty Soldier Sailor Moon (Enhanced Edition v5 Final, Hack) + sailormnj + Bishoujo Senshi Sailor Moon (Version 95/03/22B, Japan) sailormnk - Pretty Soldier Sailor Moon (Ver. 95/03/22B, Korea) + Pretty Soldier Sailor Moon (Version 95/03/22B, Korea) sailormnn - Pretty Soldier Sailor Moon (Ver. 95/03/22, Europe) + Pretty Soldier Sailor Moon (Version 95/03/22, Europe) sailormnnh - Bishoujo Senshi Sailor Moon (Ver. 95/03/22, Hong Kong) + Bishoujo Senshi Sailor Moon (Version 95/03/22, Hong Kong) sailormnnj - Bishoujo Senshi Sailor Moon (Ver. 95/03/22, Japan) + Bishoujo Senshi Sailor Moon (Version 95/03/22, Japan) sailormnnk - Pretty Soldier Sailor Moon (Ver. 95/03/22, Korea) + Pretty Soldier Sailor Moon (Version 95/03/22, Korea) sailormnnt - Bishoujo Senshi Sailor Moon (Ver. 95/03/22, Taiwan) + Bishoujo Senshi Sailor Moon (Version 95/03/22, Taiwan) sailormnnu - Pretty Soldier Sailor Moon (Ver. 95/03/22, USA) + Pretty Soldier Sailor Moon (Version 95/03/22, USA) sailormno - Pretty Soldier Sailor Moon (Ver. 95/03/21, Europe) + Pretty Soldier Sailor Moon (Version 95/03/21, Europe) sailormnoh - Bishoujo Senshi Sailor Moon (Ver. 95/03/21, Hong Kong) + Bishoujo Senshi Sailor Moon (Version 95/03/21, Hong Kong) sailormnoj - Bishoujo Senshi Sailor Moon (Ver. 95/03/21, Japan) + Bishoujo Senshi Sailor Moon (Version 95/03/21, Japan) sailormnok - Pretty Soldier Sailor Moon (Ver. 95/03/21, Korea) + Pretty Soldier Sailor Moon (Version 95/03/21, Korea) sailormnot - Bishoujo Senshi Sailor Moon (Ver. 95/03/21, Taiwan) + Bishoujo Senshi Sailor Moon (Version 95/03/21, Taiwan) sailormnou - Pretty Soldier Sailor Moon (Ver. 95/03/21, USA) + Pretty Soldier Sailor Moon (Version 95/03/21, USA) + + + sailormnrot + Pretty Soldier Sailor Moon (Reign of Terror, Hack) sailormnt - Bishoujo Senshi Sailor Moon (Ver. 95/03/22B, Taiwan) + Bishoujo Senshi Sailor Moon (Version 95/03/22B, Taiwan) sailormnu - Pretty Soldier Sailor Moon (Ver. 95/03/22B, USA) + Pretty Soldier Sailor Moon (Version 95/03/22B, USA) sailormo @@ -96851,6 +100731,14 @@ saklove Ying Hua Lian 2.0 (China, Ver. 1.02) + + saladue + Sala Due (Version 3.04) + + + saladuea + Sala Due (Version 1.04) + salamand Salamander (version D) @@ -96921,11 +100809,39 @@ sams64 - Samurai Shodown 64 / Samurai Spirits 64 + Samurai Shodown 64 / Samurai Spirits / Paewang Jeonseol 64 sams64_2 - Samurai Shodown: Warrior's Rage / Samurai Spirits 2: Asura Zanmaden + Samurai Shodown 64: Warriors Rage / Samurai Spirits 2: Asura Zanmaden + + + samsh2jq + Samurai Shodown II / Shin Samurai Spirits - Haohmaru Jigokuhen (Infinite Power, Hack) + + + samsh2sp + Samurai Shodown II / Shin Samurai Spirits - Haohmaru Jigokuhen (Special 2017, Hack) + + + samsh3bs + Samurai Shodown III / Samurai Spirits - Zankurou Musouken (Boss, Hack) + + + samsh4bs + Samurai Shodown IV - Amakusa's Revenge / Samurai Spirits - Amakusa Kourin (Boss, Hack) + + + samsh4sp + Samurai Shodown IV - Amakusa's Revenge / Samurai Spirits - Amakusa Kourin (Special 2017, Hack) + + + samsh5bs + Samurai Shodown V / Samurai Spirits Zero (Boss, Hack) + + + samsh5fd + Samurai Shodown V / Samurai Spirits Zero (Fully Decrypted) samsh5fe @@ -96964,8 +100880,12 @@ Saulabi Spirits / Jin Saulabi Tu Hon (Korean release of Samurai Shodown II, set 2) - samsho2sp - Samurai Shodown II / Shin Samurai Spirits - Haohmaru jigokuhen (Special 2017, hack) + samsho2pe + Samurai Shodown II / Shin Samurai Spirits - Haohmaru Jigokuhen (Perfect V. 1.9, Hack) + + + samsho2t + Samurai Shodown II / Shin Samurai Spirits - Haohmaru Jigokuhen (Optimized, Hack) samsho3 @@ -96981,11 +100901,7 @@ samsho4k - Pae Wang Jeon Seol / Legend of a Warrior (Korean censored Samurai Shodown IV) - - - samsho4sp - Samurai Shodown IV - Amakusa's Revenge / Samurai Spirits - Amakusa Kourin (Special 2017, hack) + Paewang Jeonseol / Legend of a Warrior (Korean censored Samurai Shodown IV) samsho5 @@ -97009,7 +100925,11 @@ samshoa - Samurai Shodown / Samurai Spirits (NGM-045, alternate board) + Samurai Shodown / Samurai Spirits (NGM-045, alt board) + + + samshobs + Samurai Shodown / Samurai Spirits (Boss, Hack) samshoh @@ -97025,12 +100945,16 @@ samurai - Samurai + Samurai (World) samuraia Samurai Aces (World) + + samuraij + Samurai (Japan) + sandor Puzzle & Action: Sando-R (J 951114 V1.000) @@ -97051,10 +100975,18 @@ sanjeon DaeJeon! SanJeon SuJeon (AJTUE 990412 V1.000) + + sanma + Sanma - San-nin Uchi Mahjong [BET] (Japan, version 2.60) + sanremmg unknown San Remo / Elsy Multigame + + santaball + SantaBall - Christmas Tennis Game + santam Santa Maria (Russia) (Atronic) @@ -97095,6 +101027,10 @@ sathena Super Athena (bootleg) + + satsf3d + Saturn: Space Fighter 3D + saturn Saturn @@ -97117,8 +101053,16 @@ saurob + Sauro (set 3) + + + saurobl Sauro (bootleg) + + sauroc + Sauro (set 4, easier) + saurop Sauro (Philko license) @@ -97133,11 +101077,15 @@ savagereb - Savage Reign / Fu'un Mokushiroku - kakutou sousei (Boss Hack) + Savage Reign / Fu'un Mokushiroku - Kakutou Sousei (Boss Hack) + + + savagerp + Savage Reign / Fu'un Mokushiroku - Kakutou Sousei (Plus, Hack) savanna - Savanna (Jungler bootleg) + Savanna (bootleg of Jungler) savgbees @@ -97211,25 +101159,29 @@ sbdk Super Bike (DK conversion) + + sbhoei + Space Battle (Hoei, set 1) + + + sbhoeia + Space Battle (Hoei, set 2) + sbishi - Super Bishi Bashi Championship (ver JAA, 2 Players) + Super Bishi Bashi Champ (ver JAA, 2 Players) sbishik - Super Bishi Bashi Championship (ver KAB, 3 Players) + Super Bishi Bashi Champ (ver KAB, 3 Players) sbishika - Super Bishi Bashi Championship (ver KAA, 3 Players) + Super Bishi Bashi Champ (ver KAA, 3 Players) sblast2b - Sonic Blast Man II Special Turbo (SNES bootleg, set 1) - - - sblast2ba - Sonic Blast Man II Special Turbo (SNES bootleg, set 2) + Sonic Blast Man II Special Turbo (SNES bootleg) sblazerp @@ -97245,7 +101197,7 @@ sbmjb - Sonic Blast Man's Janken Battle (main ver. 1.1, video ver. 1.0) + Sonic Blast Man's Janken Battle (Japan, main ver. 1.1, video ver. 1.0) sboblbob @@ -99443,6 +103395,10 @@ sc2hyprp Hyperactive (Bellfruit) (set 1, UK, 10GBP Jackpot, Protocol) (Scorpion 2/3) + + sc2in1 + Super Card 2 in 1 (English version 03.23) + sc2inst Instant Jackpot (Bellfruit) (set 6, UK, 10GBP Jackpot) (Scorpion 2/3) @@ -119275,6 +123231,22 @@ sc5wotwa War Of The Wads (Mazooma) (Scorpion 5) (set 2) + + sc6dndem + Deal or No Deal Easy Money (Scorpion 6, 9561082) + + + sc6dndema + Deal or No Deal Easy Money (Scorpion 6, 9561082, protocol) + + + sc6dndemb + Deal or No Deal Easy Money (Scorpion 6, 9560933) + + + sc6dndemc + Deal or No Deal Easy Money (Scorpion 6, 9560933, protocol) + sc_091 Safe Cracker (0.91) @@ -119319,6 +123291,10 @@ scatmag2 Scatter Magic II (10001311, NSW/ACT) + + scatmag2a + Scatter Magic II (10122511, ASP) + scatmag2sa Scatter Magic II (10102711, South Australia) @@ -119531,6 +123507,10 @@ scrabbled Scrabble (rev. F) (Protocol) + + scrabbleo + Scrabble (Spanish bootleg of Scramble) + scram_tp Scramble (Pinball) @@ -119573,11 +123553,11 @@ scrambles - Scramble (Stern Electronics set 1) + Scramble (Stern Electronics, set 1) scrambles2 - Scramble (Stern Electronics set 2) + Scramble (Stern Electronics, set 2) scrambls @@ -119603,6 +123583,10 @@ scramrf Scramble (Recreativos Franco, Spanish bootleg) + + scratch + Scratch!! Scratch!! + screenp1 Screen Play (Maygay, MV1 Video, ver. 1.9, set 1) @@ -119689,27 +123673,35 @@ scud - Scud Race Twin/DX (Export) + Scud Race / Sega Super GT - Twin/DX (Export) scudau - Scud Race Twin/DX (Australia) + Scud Race - Twin/DX (Australia) scuddx - Scud Race Deluxe (Revision A) + Scud Race / Sega Super GT - Deluxe (Export, Revision A) scudhamm - Scud Hammer + Scud Hammer (ver 1.4) + + + scudhamma + Scud Hammer (older version?) scudplus - Scud Race Plus Twin/DX (Revision A) + Scud Race Plus / Sega Super GT Plus - Twin/DX (Export, Revision A) scudplusa - Scud Race Plus Twin/DX + Scud Race Plus / Sega Super GT Plus - Twin/DX (Export) + + + scumimon + Slotters Club: Umi Monogatari scyclone @@ -119793,7 +123785,7 @@ sdmg2 - Mahjong Super Da Man Guan II (China, V754C) + Chaoji Da Man Guan II (China, V754C) sdodgeb @@ -119803,6 +123795,10 @@ sdodgebh Super Dodge Ball / Kunio no Nekketsu Toukyuu Densetsu (Secret Character Hack) + + sdojak + DoDonPachi SaiDaiOuJou & Knuckles (CaveDwellers Hack) + sdtennis Super Doubles Tennis @@ -119825,11 +123821,11 @@ seabattl - Sea Battle (set 1) + Sea Battle - seabattla - Sea Battle (set 2) + seadevil + Sea Devil sealdeal @@ -119891,6 +123887,10 @@ seawolf2 Sea Wolf II + + seawolfa + Sea Wolf (set 3) + seawolfo Sea Wolf (set 2) @@ -119913,11 +123913,11 @@ secretag - Secret Agent (World revision 3) + Secret Agent (World, revision 3) secretagj - Secret Agent (Japan revision 2) + Secret Agent (Japan, revision 2) sectionz @@ -119925,7 +123925,7 @@ sectionza - Section Z (set 2) + Section Z (set 2 rev. A) sectrzon @@ -119985,6 +123985,10 @@ sekaikh + Sekai Kaseki Hakken (Japan, SKH1 Ver.B) + + + sekaikha Sekai Kaseki Hakken (Japan, SKH1 Ver.A) @@ -119999,6 +124003,10 @@ seljan2 Return Of Sel Jan II [BET] (Japan, NM557) + + seljan2a + Return Of Sel Jan II [BET] (Japan, NM508) + semibase MuHanSeungBu (SemiCom Baseball) (Korea) @@ -120015,6 +124023,22 @@ sengekisj Sengeki Striker (Japan) + + sengk3eb + Sengoku 3 / Sengoku Densho 2001 (Green Blue, Hack) + + + sengk3fd + Sengoku 3 / Sengoku Densho 2001 (Fully Decrypted) + + + sengk3fs + Sengoku 3 / Sengoku Densho 2001 (Demeanor, Hack) + + + sengok3i + Sengoku 3 / Sengoku Densho 2001 (Infinite Power, Hack) + sengokh Sengoku / Sengoku Denshou (set 2) @@ -120039,10 +124063,6 @@ sengoku3a Sengoku 3 / Sengoku Densho 2001 (set 2) - - sengoku3fs - Sengoku 3 / Sengoku Densho 2001 (Feng Shen Edition, Hack) - sengoku3s Sengoku 3 / Sengoku Densho 2001 (Evolution 1.0, FCHT hack) @@ -120087,6 +124107,10 @@ sentetst Sente Diagnostic Cartridge + + seoul88 + Seoul 88 Fever + sercharu SAR - Search And Rescue (US) @@ -120095,6 +124119,34 @@ setaroul The Roulette (Visco) + + setaroula + Super Ruleta 36 (Spanish hack of The Roulette) + + + sevenlnd + Seven Land + + + sevilla + Sevilla (2 jackpot points, 81%) + + + sevillaa + Sevilla (1 jackpot point, 77%) + + + sevillab + Sevilla (2 jackpot points, 77%) + + + sevillac + Sevilla (4 jackpot points, 77%) + + + sevillad + Sevilla (8 jackpot points, 77%) + sexappl Sex Appeal (Version 6.02) @@ -120183,6 +124235,18 @@ sf2amf Street Fighter II': Champion Edition (Alpha Magic-F, bootleg) + + sf2amf10 + Street Fighter II - Champion Edition (L735 Test Rom, bootleg, set 3) + + + sf2amf11 + Street Fighter II - Champion Edition (L735 Test Rom w/ Mega Co, bootleg, set 4) + + + sf2amf12 + Street Fighter II - Champion Edition (L735 Test Rom, bootleg, set ?) + sf2amf2 Street Fighter II': Champion Edition (L735 Test Rom, bootleg, set 1) @@ -120193,27 +124257,27 @@ sf2amf4 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 2, 920313 etc) + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 2) sf2amf5 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 3, 920313 etc) + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 3) sf2amf6 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 4, 920313 etc) + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 4) sf2amf7 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 5, 920313 etc) + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 5) sf2amf8 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 6, 920313 etc) + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 6) sf2amf9 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 7, 920313 etc) + Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 7) sf2b @@ -120225,11 +124289,11 @@ sf2b3 - Street Fighter II - The World Warrior (bootleg, 910214 etc, set 3) + Street Fighter II: The World Warrior (bootleg, 910214 etc, set 3) sf2b4 - Street Fighter II - The World Warrior (bootleg, 910214 etc, set 4) + Street Fighter II: The World Warrior (bootleg, 910214 etc, set 4) sf2bhh @@ -120277,11 +124341,15 @@ sf2ceeab2 - Street Fighter II' - Champion Edition (920313 etc bootleg set 2) + Street Fighter II': Champion Edition (920313 etc bootleg set 2) sf2ceeabl - Street Fighter II' - Champion Edition (920313 etc bootleg set 1) + Street Fighter II': Champion Edition (920313 etc bootleg set 1) + + + sf2ceec + Street Fighter II': Champion Edition (World 920803) sf2cej @@ -120293,11 +124361,11 @@ sf2cejab2 - Street Fighter II' - Champion Edition (920322 Japan bootleg set 2) + Street Fighter II': Champion Edition (920322 Japan bootleg set 2) sf2cejabl - Street Fighter II' - Champion Edition (920322 Japan bootleg set 1) + Street Fighter II': Champion Edition (920322 Japan bootleg set 1) sf2cejb @@ -120329,47 +124397,47 @@ sf2ceuab10 - Street Fighter II' - Champion Edition (920313 USA bootleg set 10) + Street Fighter II': Champion Edition (920313 USA bootleg set 10) sf2ceuab11 - Street Fighter II' - Champion Edition (920313 USA bootleg set 11) + Street Fighter II': Champion Edition (920313 USA bootleg set 11) sf2ceuab2 - Street Fighter II' - Champion Edition (920313 USA bootleg set 2) + Street Fighter II': Champion Edition (920313 USA bootleg set 2) sf2ceuab3 - Street Fighter II' - Champion Edition (920313 USA bootleg set 3) + Street Fighter II': Champion Edition (920313 USA bootleg set 3) sf2ceuab4 - Street Fighter II' - Champion Edition (920313 USA bootleg set 4) + Street Fighter II': Champion Edition (920313 USA bootleg set 4) sf2ceuab5 - Street Fighter II' - Champion Edition (920313 USA bootleg set 5) + Street Fighter II': Champion Edition (920313 USA bootleg set 5) sf2ceuab6 - Street Fighter II' - Champion Edition (920313 USA bootleg set 6) + Street Fighter II': Champion Edition (920313 USA bootleg set 6) sf2ceuab7 - Street Fighter II' - Champion Edition (920313 USA bootleg set 7) + Street Fighter II': Champion Edition (920313 USA bootleg set 7) sf2ceuab8 - Street Fighter II' - Champion Edition (920313 USA bootleg set 8) + Street Fighter II': Champion Edition (920313 USA bootleg set 8) sf2ceuab9 - Street Fighter II' - Champion Edition (920313 USA bootleg set 9) + Street Fighter II': Champion Edition (920313 USA bootleg set 9) sf2ceuabl - Street Fighter II' - Champion Edition (920313 USA bootleg set 1) + Street Fighter II': Champion Edition (920313 USA bootleg set 1) sf2ceub @@ -120381,7 +124449,7 @@ sf2ceucbl - Street Fighter II' - Champion Edition (920803 USA bootleg) + Street Fighter II': Champion Edition (920803 USA bootleg) sf2ceupl @@ -120445,11 +124513,11 @@ sf2hfjb - Street Fighter II' Turbo - Hyper Fighting (bootleg set 1, 921209 Japan) + Street Fighter II' Turbo: Hyper Fighting (bootleg set 1) sf2hfjb2 - Street Fighter II' Turbo - Hyper Fighting (bootleg set 2, 921209 Japan) + Street Fighter II' Turbo: Hyper Fighting (bootleg set 2) sf2hfu @@ -120485,7 +124553,7 @@ sf2jla - Street Fighter II - The World Warrior (911210 Japan, rev L) + Street Fighter II: The World Warrior (Japan 911210, Rev. L) sf2koryu @@ -120493,11 +124561,11 @@ sf2koryu2 - Street Fighter II' - Xiang Long (bootleg set 2, 811102 001) + Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg set 2) sf2koryu3 - Street Fighter II' - Xiang Long (bootleg set 3, 811102 001) + Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg set 3) sf2level @@ -120505,7 +124573,7 @@ sf2ly - Street Fighter II - The World Warrior (with bosses like Champion Edition, 910522 Japan, CPS-B-11) + Street Fighter II: The World Warrior (with bosses like Champion Edition, Japan 910522, CPS-B-11) sf2m1 @@ -120549,7 +124617,7 @@ sf2md - Street Fighter II' - Champion Edition (Magic Delta, bootleg, 920313 etc) + Street Fighter II': Champion Edition (Magic Delta, bootleg) sf2mdt @@ -120569,15 +124637,15 @@ sf2mega - Street Fighter II' - Champion Edition (Mega Co bootleg set 1, 920313 etc) + Street Fighter II': Champion Edition (Mega Co bootleg set 1) sf2mega2 - Street Fighter II' - Champion Edition (Mega Co bootleg set 2, 920313 etc) + Street Fighter II': Champion Edition (Mega Co bootleg set 2) sf2mix - Street Fighter II Mix (v1.2) + Street Fighter II Mix (v1.3) sf2mkot @@ -120605,15 +124673,15 @@ sf2rb4 - Street Fighter II' - Champion Edition (Rainbow bootleg set 4, 920322 Japan) + Street Fighter II': Champion Edition (Rainbow, bootleg, set 4) sf2rb5 - Street Fighter II' - Champion Edition (Rainbow bootleg set 5, 920322 Japan) + Street Fighter II': Champion Edition (Rainbow, bootleg, set 5) sf2rb6 - Street Fighter II' - Champion Edition (Rainbow bootleg set 6, 920313 etc) + Street Fighter II': Champion Edition (Rainbow, bootleg, set 6) sf2re @@ -120621,11 +124689,15 @@ sf2red - Street Fighter II': Champion Edition (Red Wave, bootleg) + Street Fighter II': Champion Edition (Red Wave, bootleg, set 1) sf2red2 - Street Fighter II' - Champion Edition (Red Wave bootleg set 2, 920313 etc) + Street Fighter II': Champion Edition (Red Wave bootleg set 3) + + + sf2reda + Street Fighter II': Champion Edition (Red Wave, bootleg, set 2) sf2redp2 @@ -120637,7 +124709,7 @@ sf2rk2 - Street Fighter II - The World Warrior (RK bootleg set 2, 910214 etc) + Street Fighter II: The World Warrior (RK, bootleg set 2) sf2rules @@ -120645,7 +124717,7 @@ sf2sl73a - Street Fighter II' - Champion Edition (Sheng Long v 7.3a) + Street Fighter II': Champion Edition (Sheng Long v 7.3a) sf2stt @@ -120669,15 +124741,15 @@ sf2tlona - Street Fighter II' - Champion Edition (Tu Long bootleg set 1, 811102 001) + Street Fighter II': Champion Edition (Tu Long bootleg set 1) sf2tlonb - Street Fighter II' - Champion Edition (Tu Long bootleg set 2, 811102 001) + Street Fighter II': Champion Edition (Tu Long bootleg set 2) sf2tlonc - Street Fighter II' - Champion Edition (Tu Long bootleg set 3, 811102 001) + Street Fighter II': Champion Edition (Tu Long bootleg set 3) sf2ua @@ -120729,11 +124801,11 @@ sf2v0042 - Street Fighter II' - Champion Edition (V004 bootleg set 2, 920313 etc) + Street Fighter II': Champion Edition (V004 bootleg set 2) sf2v0043 - Street Fighter II' - Champion Edition (V004 bootleg set 3, 920313 etc) + Street Fighter II': Champion Edition (V004 bootleg set 3) sf2yyc @@ -120741,7 +124813,7 @@ sf2yyc2 - Street Fighter II' - Champion Edition (YYC bootleg set 2, 920313 etc) + Street Fighter II': Champion Edition (YYC bootleg set 2) sf_l1 @@ -120763,6 +124835,10 @@ sfa2uhc Street Fighter Alpha 2 - Unlock Hidden Characters (Hack By Yumeji) + + sfa2ultra + Street Fighter Alpha 2 Ultra (Beta) + sfa2ur1 Street Fighter Alpha 2 (USA 960306) @@ -120775,6 +124851,10 @@ sfa3b Street Fighter Alpha 3 (Brazil 980629) + + sfa3ce + Street Fighter Alpha 3 Challenger's Edition + sfa3h Street Fighter Alpha 3 (Hispanic 980904) @@ -120783,10 +124863,6 @@ sfa3hr1 Street Fighter Alpha 3 (Hispanic 980629) - - sfa3r1 - Street Fighter Alpha 3 (USA 980629) - sfa3u Street Fighter Alpha 3 (USA 980904) @@ -120807,6 +124883,10 @@ sfa3xl Street Fighter Alpha 3 - Xiang Long Edition (Hack by pipi899, Ver.2009-05-10) + + sfach + Street Fighter Alpha: Warriors' Dreams (CPS Changer, Publicity USA 950727) + sfad Street Fighter Alpha: Warriors' Dreams (Euro 950727 Phoenix Edition) (bootleg) @@ -120952,16 +125032,16 @@ Sonic the Fighters (Japan) - sfight2 - Street Fighter II + sfightii + Street Fighter II (pinball, set 1) - sfight2a - Street Fighter II (rev.1) + sfightiia + Street Fighter II (pinball, set 2) - sfight2b - Street Fighter II (rev.2) + sfightiib + Street Fighter II (pinball, set 3) sfiii @@ -120971,6 +125051,10 @@ sfiii2 Street Fighter III 2nd Impact: Giant Attack (USA 970930) + + sfiii2h + Street Fighter III 2nd Impact: Giant Attack (Hispanic 970930) + sfiii2j Street Fighter III 2nd Impact: Giant Attack (Japan 970930) @@ -121015,6 +125099,14 @@ sfiii3ur1 Street Fighter III 3rd Strike: Fight for the Future (USA 990512) + + sfiii3ws + Street Fighter III 3rd Strike: Fight for the Future (Widescreen 20220908) + + + sfiii4fs + Street Fighter III 3rd Strike: Fight for the Future (4rd Strike 2011-07-17) + sfiii4n Street Fighter III 3rd Strike: Fight for the Future (4rd Arrange Edition 2013) @@ -121033,11 +125125,11 @@ sfiiin - Street Fighter III: New Generation (Asia 970204, NO CD, bios set 1) + Street Fighter III: New Generation (Asia 970204, NO CD, BIOS set 1) sfiiina - Street Fighter III: New Generation (Asia 970204, NO CD, bios set 2) + Street Fighter III: New Generation (Asia 970204, NO CD, BIOS set 2) sfiiiu @@ -121153,11 +125245,7 @@ sfrush - San Francisco Rush (boot rom L 1.0) - - - sfrusha - San Francisco Rush (boot rom L 1.06A) + San Francisco Rush sfrushrk @@ -121195,6 +125283,10 @@ sftmj114 Street Fighter: The Movie (v1.14N, Japan) + + sftmk112 + Street Fighter: The Movie (v1.12K, Korea) + sfua Street Fighter (US, set 2) (protected) @@ -121211,14 +125303,6 @@ sfz2a Street Fighter Zero 2 (Asia 960227) - - sfz2aa - Street Fighter Zero 2 Alpha (Asia 960826) - - - sfz2ab - Street Fighter Zero 2 Alpha (Brazil 960813) - sfz2ad Street Fighter Zero 2 (Asia 960227 Phoenix Edition) (bootleg) @@ -121227,14 +125311,6 @@ sfz2adl Street Fighter Zero 2 Alpha - Dragon Level (Hack by pipi899, Ver.2009-04-24) - - sfz2ah - Street Fighter Zero 2 Alpha (Hispanic 960813) - - - sfz2aj - Street Fighter Zero 2 Alpha (Japan 960805) - sfz2al Street Fighter Zero 2 Alpha (Asia 960826) @@ -121311,9 +125387,17 @@ sfz3jr2d Street Fighter Zero 3 (Japan 980629 Phoenix Edition) (bootleg) + + sfz3mix + Street Fighter Zero 3 Mix v0.27 + + + sfz3mix13 + Street Fighter Zero 3 Mix v0.13 + sfz3te - Street Fighter Zero 3 Training Edition v1.1 (980629 Japan) + Street Fighter Zero 3 Training Edition v1.2 (980629 Japan) sfz3ugd @@ -121331,17 +125415,21 @@ sfzb Street Fighter Zero (Brazil 951109) + + sfzbch + Street Fighter Zero (CPS Changer, Brazil 950727) + sfzbr1 Street Fighter Zero (Brazil 950727) sfzch - Street Fighter Zero (CPS Changer, 951020 Japan) + Street Fighter Zero (CPS Changer, Japan 951020) sfzcha - Street Fighter Zero (CPS Changer, 040820 Japan) + Street Fighter Zero (CPS Changer, Japan 040820) sfzh @@ -121477,7 +125565,7 @@ shadfrcej - Shadow Force (Japan, Version 2) + Shadow Force - Henshin Ninja (Japan, Version 2) shadfrceu @@ -121507,6 +125595,10 @@ shaktmsp Shakatto Tambourine Motto Norinori Shinkyoku Tsuika (2K1 SPR) (GDS-0013) + + shambros + Shamisen Brothers Vol 1 (V1.01K) + shamnmg Shaman's Magic (10225911, NSW/ACT) @@ -121675,6 +125767,10 @@ sharrier1 Space Harrier (8751 315-5163) + + shateki + Yataimura Shateki (1-player, Japan, Ver 1.000) + shdancbl Shadow Dancer (bootleg, set 1) @@ -121703,6 +125799,10 @@ shdancrj Shadow Dancer (Japan) + + shendeng + Pili Shen Deng + sheriff Sheriff @@ -122045,7 +126145,7 @@ showhanc - Wang Pai Dui Jue (China) + Wangpai Duijue (China) showhand @@ -122055,6 +126155,10 @@ showqn Show Queen (Konami Endeavour, Russia) + + shpchamp + Shippe Champion + shpeng Sea Hunter Penguin @@ -122069,39 +126173,39 @@ shrknew - Sharkey's Shootout (ARM7 Sound Board) + Sharkey's Shootout (CPU 2.11, display A2.01, ARM7 sound board) shrky_207 - Sharkey's Shootout (2.07) + Sharkey's Shootout (CPU 2.07, display A2.01) shrkyfr - Sharkey's Shootout (2.11 France) + Sharkey's Shootout (CPU 2.11, display F2.01, France) shrkyfr_207 - Sharkey's Shootout (2.07 France) + Sharkey's Shootout (CPU 2.07, display F2.01, France) shrkygr - Sharkey's Shootout (2.11 Germany) + Sharkey's Shootout (CPU 2.11, display G2.01, Germany) shrkygr_207 - Sharkey's Shootout (2.07 Germany) + Sharkey's Shootout (CPU 2.07, display G2.01, Germany) shrkyit - Sharkey's Shootout (2.11 Italy) + Sharkey's Shootout (CPU 2.11, display I2.01, Italy) shrkyit_207 - Sharkey's Shootout (2.07 Italy) + Sharkey's Shootout (CPU 2.07, display I2.01, Italy) shrkysht - Sharkey's Shootout (2.11) + Sharkey's Shootout (CPU 2.11, display A2.01) sht3do @@ -122197,7 +126301,11 @@ sidampkr - unknown Sidam poker + unknown Sidam poker (vertical) + + + sidampkra + unknown Sidam poker (horizontal) sidearjp @@ -122313,6 +126421,10 @@ silkrda6 + Silk Road (10176811, ASP) + + + silkrda6u Silk Road (0152537, US) @@ -122353,7 +126465,7 @@ silvland - Silver Land + Silver Land (hack of River Patrol) silvmil @@ -122371,85 +126483,89 @@ simp_a27 The Simpsons (2.7) + + simpbest + Simply the Best (CZ750, v1.0) + simpbowl The Simpsons Bowling (GQ829 UAA) simpnew - The Simpsons Pinball Party (ARM7 Sound Board) + The Simpsons Pinball Party (CPU 5.00, display A5.00, ARM7 sound board) simpprtf - The Simpsons Pinball Party (5.00 France) + The Simpsons Pinball Party (CPU 5.00, display F5.00, France) simpprtf_204 - The Simpsons Pinball Party (2.04 France) + The Simpsons Pinball Party (CPU 2.04, display F2.01, France) simpprtf_300 - The Simpsons Pinball Party (3.00 France) + The Simpsons Pinball Party (CPU 3.00, display F3.00, France) simpprtf_400 - The Simpsons Pinball Party (4.00 France) + The Simpsons Pinball Party (CPU 4.00, display F4.00, France) simpprtg - The Simpsons Pinball Party (5.00 Germany) + The Simpsons Pinball Party (CPU 5.00, display G5.00, Germany) simpprtg_400 - The Simpsons Pinball Party (4.00 Germany) + The Simpsons Pinball Party (CPU 4.00, display G4.00, Germany) simpprti - The Simpsons Pinball Party (5.00 Italy) + The Simpsons Pinball Party (CPU 5.00, display I5.00, Italy) simpprti_204 - The Simpsons Pinball Party (2.04 Italy) + The Simpsons Pinball Party (CPU 2.04, display I2.01, Italy) simpprti_300 - The Simpsons Pinball Party (3.00 Italy) + The Simpsons Pinball Party (CPU 3.00, display I3.00, Italy) simpprti_400 - The Simpsons Pinball Party (4.00 Italy) + The Simpsons Pinball Party (CPU 4.00, display I4.00, Italy) simpprtl - The Simpsons Pinball Party (5.00 Spain) + The Simpsons Pinball Party (CPU 5.00, display L5.00, Spain) simpprtl_204 - The Simpsons Pinball Party (2.04 Spain) + The Simpsons Pinball Party (CPU 2.04, display L2.01, Spain) simpprtl_300 - The Simpsons Pinball Party (3.00 Spain) + The Simpsons Pinball Party (CPU 3.00, display L3.00, Spain) simpprtl_400 - The Simpsons Pinball Party (4.00 Spain) + The Simpsons Pinball Party (CPU 4.00, display L4.00, Spain) simpprty - The Simpsons Pinball Party (5.00) + The Simpsons Pinball Party (CPU 5.00, display A5.00) simpprty_204 - The Simpsons Pinball Party (2.04) + The Simpsons Pinball Party (CPU 2.04, display A2.01) simpprty_300 - The Simpsons Pinball Party (3.00) + The Simpsons Pinball Party (CPU 3.00, display A3.00) simpprty_400 - The Simpsons Pinball Party (4.00) + The Simpsons Pinball Party (CPU 4.00, display A4.00) simps2pa @@ -122499,6 +126615,10 @@ simpsons4pe The Simpsons (4 Players World, set 2) + + simpsons4pe2 + The Simpsons (4 Players World, set 3) + sinbad Sinbad @@ -122521,11 +126641,19 @@ sinistar - Sinistar (revision 3) + Sinistar (revision 3, upright) sinistar2 - Sinistar (revision 2) + Sinistar (revision 2, upright) + + + sinistarc + Sinistar (revision 3, cockpit) + + + sinistarc2 + Sinistar (revision 2, cockpit) sinistarp @@ -122541,7 +126669,11 @@ sinvemag - Super Invaders (bootleg set 2) + Super Invaders (Emag bootleg set 1) + + + sinvemag2 + Super Invaders (Emag bootleg set 2) sinvzen @@ -122549,7 +126681,7 @@ sirio2 - Sirio II (Calfesa S.L. Spanish Moon Cresta bootleg) + Sirio II (Calfesa S.L. Spanish bootleg of Moon Cresta) sisv @@ -122645,7 +126777,11 @@ skilldrp - Skill Drop Georgia (Ver. G1.0S) + Skill Drop Georgia (Ver. G1.01S, Oct 1 2002) + + + skilldrpa + Skill Drop Georgia (Ver. G1.0S, Sep 13 2002) skimaxx @@ -122677,11 +126813,11 @@ skullfnga - Skull Fang (Asia 1.13) + Skull Fang - Kuhga Gaiden (Asia 1.13) skullfngj - Skull Fang (Japan 1.09) + Skull Fang - Kuhga Gaiden (Japan 1.09) skullxb1 @@ -122775,6 +126911,10 @@ skydnca6 Sky Dancer (10272711, NSW/ACT) + + skyfire + Sky Fire + skyfox Sky Fox @@ -122829,7 +126969,7 @@ skyraidr - Sky Raider (Uniwars bootleg) + Sky Raider (bootleg of UniWar S) skyrobo @@ -122939,6 +127079,10 @@ slapfighb3 Slap Fight (bootleg set 3) + + slapfighm + Slap Fight (Modular System) + slapshot Slap Shot (Ver 3.0 O) @@ -123039,6 +127183,10 @@ slotcarn Slot Carnival + + slotouji + Slot no Oujisama / Slot Prince (Japan, SLO1 Ver. B) + slotsnl Slots (Dutch, Game Card 95-750-368) @@ -123049,7 +127197,7 @@ slqz2 - Mahjong Shuang Long Qiang Zhu 2 (VS203J) + Shuang Long Qiang Zhu 2 VS (China, VS203J) slqz3 @@ -123083,6 +127231,10 @@ sltblgtk Slots (Belgian Token, Game Card 95-750-943) + + sltblgtka + Slots (Belgian Token, Game Card 95-750-452) + sltpcycl Pro Cycle Tele Cardioline (Salter Fitness Bike V.1.0, Checksum 02AB) @@ -123117,15 +127269,15 @@ slyspy - Sly Spy (US revision 4) + Sly Spy (US, revision 4) slyspy2 - Sly Spy (US revision 2) + Sly Spy (US, revision 2) slyspy3 - Sly Spy (US revision 3) + Sly Spy (US, revision 3) sm_ngacc @@ -123305,7 +127457,7 @@ smash - Smash (Crash bootleg) + Smash (bootleg of Crash) smashdrv @@ -123340,20 +127492,8 @@ Smash T.V. (rev 6.00) - smb - Super Mario Brothers - - - smb1 - Super Mario Brothers (rev.1) - - - smb2 - Super Mario Brothers (rev.2) - - - smb3 - Super Mario Brothers (rev.3) + smb3bl + Super Mario Bros. 3 (NES bootleg) smbmush @@ -123367,6 +127507,26 @@ smbombr1 Super Muscle Bomber: The International Blowout (Japan 940808) + + smbp + Super Mario Brothers (pinball, set 1) + + + smbpa + Super Mario Brothers (pinball, set 2) + + + smbpb + Super Mario Brothers (pinball, set 3) + + + smbpc + Super Mario Brothers (pinball, set 4) + + + smcard + Super Magic Card + smf Super Medal Fighters (Japan 970228) @@ -123443,6 +127603,10 @@ smgpud Super Monaco GP (US, Rev C) (bootleg of FD1094 317-0125a set) + + smiconk + Space Micon Kit + sminiboy Super Mini-Boy @@ -123501,11 +127665,11 @@ smssgame - Super Game (Sega Master System Multi-game bootleg) + Super Game (Sega Master System Multi-game bootleg, 01 Final Bubble Bobble) smssgamea - Super Game (Sega Master System Multi-game bootleg) (alt games) + Super Game (Sega Master System Multi-game bootleg, 01 Tri Formation) smtma6 @@ -123524,7 +127688,7 @@ Snake Pit - snakepit2 + snakepita Snake Pit (9/14/84) @@ -123539,6 +127703,10 @@ snapper Snapper (Korea) + + snapshot + Snap Shot (20115211, ASP) + sncwgltd Sonic Wings Limited (Japan) @@ -123591,6 +127759,10 @@ snowbro2b2 Snow Bros. 2 - With New Elves / Otenki Paradise (bootleg, set 2) + + snowbro2b3 + Snow Bros. 2 - With New Elves / Otenki Paradise (bootleg, set 3) + snowbro2ny Snow Bros. 2 - With New Elves / Otenki Paradise (Nyanko) @@ -123779,14 +127951,26 @@ solfigtr Solitary Fighter (World) + + solitaire + Solitaire (version 2.5) + solomon Solomon's Key (US) + + solomonc + Solomon no Kagi (T-Chi) + solomonj Solomon no Kagi (Japan) + + solomonjx + Solomon no Kagi X (Japan) + solrwarr Solar-Warrior (US) @@ -123821,7 +128005,11 @@ sonicfgt - SegaSonic Cosmo Fighter + SegaSonic Cosmo Fighter (World) + + + sonicfgtj + SegaSonic Cosmo Fighter (Japan) sonicp @@ -123873,83 +128061,83 @@ sopranof - The Sopranos (5.00 France) + The Sopranos (CPU 5.00, display F5.00, France) sopranof_107 - The Sopranos (1.07 France) + The Sopranos (CPU 1.07, display F1.00, France) sopranof_300 - The Sopranos (3.00 France) + The Sopranos (CPU 3.00, display F3.00, France) sopranof_400 - The Sopranos (4.00 France) + The Sopranos (CPU 4.00, display F4.00, France) sopranog - The Sopranos (5.00 Germany) + The Sopranos (CPU 5.00, display G5.00, Germany) sopranog_107 - The Sopranos (1.07 Germany) + The Sopranos (CPU 1.07, display G1.00, Germany) sopranog_300 - The Sopranos (3.00 Germany) + The Sopranos (CPU 3.00, display G3.00, Germany) sopranog_400 - The Sopranos (4.00 Germany) + The Sopranos (CPU 4.00, display G4.00, Germany) sopranoi - The Sopranos (5.00 Italy) + The Sopranos (CPU 5.00, display I5.00, Italy) sopranoi_107 - The Sopranos (1.07 Italy) + The Sopranos (CPU 1.07, display I1.00, Italy) sopranoi_300 - The Sopranos (3.00 Italy) + The Sopranos (CPU 3.00, display I3.00, Italy) sopranoi_400 - The Sopranos (4.00 Italy) + The Sopranos (CPU 4.00, display I4.00, Italy) sopranol - The Sopranos (5.00 Spain) + The Sopranos (CPU 5.00, display L5.00, Spain) sopranol_107 - The Sopranos (1.07 Spain) + The Sopranos (CPU 1.07, display L1.00, Spain) sopranol_300 - The Sopranos (3.00 Spain) + The Sopranos (CPU 3.00, display L3.00, Spain) sopranol_400 - The Sopranos (4.00 Spain) + The Sopranos (CPU 4.00, display L4.00, Spain) sopranos - The Sopranos (5.00) + The Sopranos (CPU 5.00, display A5.00) sopranos_204 - The Sopranos (2.04) + The Sopranos (CPU 2.04, display A2.00) sopranos_300 - The Sopranos (3.00) + The Sopranos (CPU 3.00, display A3.00) sopranos_400 - The Sopranos (4.00) + The Sopranos (CPU 4.00, display A4.00) sorbit @@ -124017,7 +128205,15 @@ soulclbr - Soul Calibur (World, SOC14/VER.C) + Soul Calibur (Asia, SOC14/VER.C) + + + soulclbra + Soul Calibur (World, SOC12/VER.A2) + + + soulclbrab + Soul Calibur (Asia, SOC14/VER.B) soulclbrja @@ -124039,10 +128235,6 @@ soulclbruc Soul Calibur (US, SOC13/VER.C) - - soulclbrwb - Soul Calibur (World, SOC14/VER.B) - souledga Soul Edge (SO3-VER.A) @@ -126117,11 +130309,11 @@ spaceatt2k - Space Attack (2k roms)(bootleg of Space Invaders) + Space Attack (bootleg of Space Invaders, 2k roms) spaceattbp - Space Attack (bproms)(bootleg of Space Invaders) + Space Attack (bootleg of Space Invaders, bproms) spacebrd @@ -126241,23 +130433,23 @@ spacejam - Space Jam (3.00) + Space Jam (CPU 3.00, display A3.00) spacejam_200 - Space Jam (2.00) + Space Jam (CPU 2.00, display A2.00) spacejmf - Space Jam (3.00 France) + Space Jam (CPU 3.00, display F3.00, France) spacejmg - Space Jam (3.00 Germany) + Space Jam (CPU 3.00, display G3.00, Germany) spacejmi - Space Jam (3.00 Italy) + Space Jam (CPU 3.00, display I3.00, Italy) spacelnc @@ -126329,7 +130521,7 @@ spacezap - Space Zap + Space Zap (Midway) spacfura @@ -126351,6 +130543,10 @@ spacfurybl Advisor (Italian bootleg of Space Fury) + + spacian2 + T.T Spacian Part-2 + spacmiss Space Missile - Space Fighting Game @@ -126405,7 +130601,7 @@ spatter - Spatter (315-5xxx) + Spatter (315-5096) spattera @@ -126425,11 +130621,15 @@ spbactnp - Super Pinball Action (prototype) + Super Pinball Action (US, prototype, dual screen) spcdrag - Space Dragon (Moon Cresta bootleg) + Space Dragon (bootleg of Moon Cresta) + + + spcebttl + Space Battle (Space Invaders bootleg) spceking @@ -126491,6 +130691,10 @@ spclforc Special Forces + + spcliner + Space Liner + spclorda Space Lords (alternate) @@ -126571,6 +130775,10 @@ spcwarp Space Warp? (Cosmos conversion on Galaxian hardware) + + spdamjes + Sport Damjes 1 + spdball Speed Ball - Contest at Neonworld (prototype) @@ -126681,7 +130889,7 @@ speeddrp - Speed Drop (Ver. 1.06) + Speed Drop (Ver. 1.06, Sep 3 2003) speeddrv @@ -126705,19 +130913,23 @@ speedup - Speed Up (Version 2.20) + Speed Up (version 2.20) speedup10 - Speed Up (Version 1.00) + Speed Up (version 1.00) speedup12 - Speed Up (Version 1.20) + Speed Up (version 1.20) speedway - Speedway + Speedway (set 1) + + + speedwaya + Speedway (set 2) speglsht @@ -126743,6 +130955,10 @@ spelunkrj Spelunker (Japan) + + spetrix + Super Petrix (ver. 1P) + spf2t Super Puzzle Fighter II Turbo (Euro 960529) @@ -126757,7 +130973,7 @@ spf2tcb - Super Puzzle Fighter II Turbo (Color Blind Hack) + Super Puzzle Fighter II Turbo (Color Blind Hack, v1.1) spf2td @@ -126795,6 +131011,10 @@ spgcarn Spring Carnival (10000311, NSW/ACT) + + spgcarnjc + Spring Carnival - Jackpot Carnival (10032721, Queensland) + spgcarnq Spring Carnival (10008011, Queensland) @@ -126803,6 +131023,10 @@ spgfest Spring Festival (20262311, Queensland) + + spgfestnz + Spring Festival (20267211, New Zealand) + spicaadv Spica Adventure (v2.03J) @@ -126813,7 +131037,7 @@ spider - Spider (Buena Vision) + Spider (Buena Vision, without nudity) spidermi @@ -126823,6 +131047,10 @@ spidermn The Amazing Spider-Man + + spidern + Spider (Buena Vision, with nudity) + spiders Spiders (set 1) @@ -126873,15 +131101,15 @@ spiker - Spiker + Spiker (6/9/86) - spiker2 + spikera Spiker (5/5/86) - spiker3 - Spiker (6/9/86) + spikerb + Spiker (earliest?) spikes91 @@ -126891,6 +131119,10 @@ spikes91b 1991 Spikes (Italian bootleg, set 2) + + spinfev + Spin Fever + spinkick Hec's Spinkick @@ -126935,10 +131167,18 @@ spirit76 Spirit of 76 + + spirulo + Super Pirulo + spitboss Super Pit Boss (9221-02A) + + spk100 + Super Poker (v100) + spk102ua Super Poker (v102UA) @@ -126963,6 +131203,10 @@ spk200ua Super Poker (v200UA) + + spk201ua + Super Poker (v201UA) + spk203us Super Poker (v203US) @@ -126981,7 +131225,7 @@ spkrform - Super Poker (v100xD03) / Formosa + Super Poker (V100xD03) / Formosa splash @@ -127099,6 +131343,10 @@ sport2k Sport 2000 + + sportmem + Sport Memory + spotty Spotty (Ver. 2.0.2) @@ -127165,11 +131413,15 @@ sprint4 - Sprint 4 (set 1) + Sprint 4 (Rev 03) sprint4a - Sprint 4 (set 2) + Sprint 4 (Rev 02, set 1) + + + sprint4b + Sprint 4 (Rev 02, set 2) sprint8 @@ -127181,15 +131433,15 @@ sprk_090 - South Park (0.90) + South Park (CPU 0.90, display A0.90) sprk_096 - South Park (0.96) + South Park (CPU 0.96, display A1.01) sprk_103 - South Park (1.03) + South Park (CPU 1.03, display A1.01) sprpuzzle @@ -127201,7 +131453,7 @@ sprtdart - Sport Dart TV + Sport Darts T.V. sprtjam @@ -127335,6 +131587,10 @@ squeenb Super Queen Bee (Ver. 101) + + squizchs + Seishun-Quiz Colorful High School (CHS1 Ver.A) + sraider Space Raider @@ -127407,10 +131663,18 @@ srdarwnj Super Real Darwin (Japan) + + srdchamp + Super Road Champions [TTL] + srdmissn S.R.D. Mission + + srmagic + Super Real Magic (V6.3) + srmdb Sunset Riders (bootleg of Mega Drive version) @@ -127495,6 +131759,10 @@ ss2005o Super Shanghai 2005 (Japan) (GDL-0031) + + ss5spfd + Samurai Shodown V Special / Samurai Spirits Zero Special (Fully Decrypted) + ss_01 Scared Stiff (D0.1R with sound rev.25) @@ -127517,7 +131785,7 @@ ssanchan - Sanrin San Chan (Japan, 315-5xxx) + Sanrin San Chan (Japan, 315-5096) sscandal @@ -127525,40 +131793,184 @@ sscope - Silent Scope (ver xxD, Ver 1.33) + Silent Scope (ver UAD, Ver 1.33) sscope2 - Silent Scope 2 : Dark Silhouette (ver UAD) + Silent Scope 2 : Dark Silhouette (ver UAD, Ver 1.03) + + + sscope2a + Silent Scope 2 : Innocent Sweeper (ver AAD, Ver 1.03) + + + sscope2ab + Silent Scope 2 : Innocent Sweeper (ver AAB, Ver 1.01) + + + sscope2abvd1 + Silent Scope 2 : Innocent Sweeper (ver AAB, Ver 1.01, GN715 Voodoo 1 video board) + + + sscope2ac + Silent Scope 2 : Innocent Sweeper (ver AAC, Ver 1.02) + + + sscope2acvd1 + Silent Scope 2 : Innocent Sweeper (ver AAC, Ver 1.02, GN715 Voodoo 1 video board) + + + sscope2avd1 + Silent Scope 2 : Innocent Sweeper (ver AAD, Ver 1.03, GN715 Voodoo 1 video board) + + + sscope2e + Silent Scope 2 : Fatal Judgement (ver EAD, Ver 1.03) + + + sscope2eb + Silent Scope 2 : Fatal Judgement (ver EAB, Ver 1.01) + + + sscope2ebvd1 + Silent Scope 2 : Fatal Judgement (ver EAB, Ver 1.01, GN715 Voodoo 1 video board) + + + sscope2ec + Silent Scope 2 : Fatal Judgement (ver EAC, Ver 1.02) + + + sscope2ecvd1 + Silent Scope 2 : Fatal Judgement (ver EAC, Ver 1.02, GN715 Voodoo 1 video board) + + + sscope2evd1 + Silent Scope 2 : Fatal Judgement (ver EAD, Ver 1.03, GN715 Voodoo 1 video board) + + + sscope2j + Silent Scope 2 : Innocent Sweeper (ver JAD, Ver 1.03) + + + sscope2jb + Silent Scope 2 : Innocent Sweeper (ver JAB, Ver 1.01) + + + sscope2jbvd1 + Silent Scope 2 : Innocent Sweeper (ver JAB, Ver 1.01, GN715 Voodoo 1 video board) + + + sscope2jc + Silent Scope 2 : Innocent Sweeper (ver JAC, Ver 1.02) + + + sscope2jcvd1 + Silent Scope 2 : Innocent Sweeper (ver JAC, Ver 1.02, GN715 Voodoo 1 video board) + + + sscope2jvd1 + Silent Scope 2 : Innocent Sweeper (ver JAD, Ver 1.03, GN715 Voodoo 1 video board) + + + sscope2ub + Silent Scope 2 : Dark Silhouette (ver UAB, Ver 1.01) + + + sscope2ubvd1 + Silent Scope 2 : Dark Silhouette (ver UAB, Ver 1.01, GN715 Voodoo 1 video board) + + + sscope2uc + Silent Scope 2 : Dark Silhouette (ver UAC, Ver 1.02) - sscope2b - Silent Scope 2 : Fatal Judgement (ver UAB, Ver 1.01, GN715 video board) + sscope2ucvd1 + Silent Scope 2 : Dark Silhouette (ver UAC, Ver 1.02, GN715 Voodoo 1 video board) - sscope2c - Silent Scope 2 : Fatal Judgement (ver UAC, Ver 1.02, GN715 video board) + sscope2vd1 + Silent Scope 2 : Dark Silhouette (ver UAD, Ver 1.03, GN715 Voodoo 1 video board) sscopea - Silent Scope (ver xxA, Ver 1.00) + Silent Scope (ver AAD, Ver 1.33) + + + sscopeaa + Silent Scope (ver AAA, Ver 1.00) + + + sscopeab + Silent Scope (ver AAB, Ver 1.20) + + + sscopeac + Silent Scope (ver AAC, Ver 1.30) + + + sscopeacvd2 + Silent Scope (ver AAC, Ver 1.30, GQ871 Voodoo 2 video board) + + + sscopeavd2 + Silent Scope (ver AAD, Ver 1.33, GQ871 Voodoo 2 video board) + + + sscopee + Silent Scope (ver EAD, Ver 1.33) + + + sscopeea + Silent Scope (ver EAA, Ver 1.00) + + + sscopeeb + Silent Scope (ver EAB, Ver 1.20) - sscopeb - Silent Scope (ver xxB, Ver 1.20) + sscopeec + Silent Scope (ver EAC, Ver 1.30) - sscopec - Silent Scope (ver xxC, Ver 1.30) + sscopeecvd2 + Silent Scope (ver EAC, Ver 1.30, GQ871 Voodoo 2 video board) - sscoped - Silent Scope (ver UAD, Ver 1.33, GQ871 video board) + sscopeevd2 + Silent Scope (ver EAD, Ver 1.33, GQ871 Voodoo 2 video board) sscopefh Silent Scope Fortune Hunter (ver EAA) + + sscopeja + Silent Scope (ver JAA, Ver 1.00) + + + sscopejb + Silent Scope (ver JAB, Ver 1.20) + + + sscopeua + Silent Scope (ver UAA, Ver 1.00) + + + sscopeub + Silent Scope (ver UAB, Ver 1.20) + + + sscopeuc + Silent Scope (ver UAC, Ver 1.30) + + + sscopeucvd2 + Silent Scope (ver UAC, Ver 1.30, GQ871 Voodoo 2 video board) + + + sscopevd2 + Silent Scope (ver UAD, Ver 1.33, GQ871 Voodoo 2 video board) + sscopex Silent Scope EX (ver UAA) @@ -127657,7 +132069,7 @@ ssf2tnl - Super Street Fighter II Turbo New Legacy v0.6 (Beta) (Hack by Born2SPD) + Super Street Fighter II Turbo New Legacy v0.8 (Beta) (Hack by Born2SPD) ssf2tu @@ -127777,15 +132189,15 @@ ssi - Super Space Invaders '91 (World, Rev 1) + Super Space Invaders '91 (World, revised code, Rev 1) ssia - Super Space Invaders '91 (World) + Super Space Invaders '91 (World, revised code) ssib - Super Space Invaders '91 (World, earlier?) + Super Space Invaders '91 (World, earlier code base) ssideki @@ -127797,7 +132209,7 @@ ssideki3 - Super Sidekicks 3 - The Next Glory / Tokuten Ou 3 - Eikou e no Michi + Super Sidekicks 3 - The Next Glory / Tokuten Ou 3 - Eikou e no Chousen ssideki4 @@ -127995,6 +132407,10 @@ ssridersebd Sunset Riders (2 Players ver EBD) + + ssridershs + Sunset Riders (Hack Series) + ssridersjac Sunset Riders (4 Players ver JAC) @@ -128125,7 +132541,7 @@ stadhr96 - Stadium Hero '96 (Europe, EAJ) + Stadium Hero '96 (Europe, EAJ, Tuning license) stadhr96j @@ -128135,6 +132551,10 @@ stadhr96j2 Stadium Hero '96 (Japan?, EAE) + + stadhr96k + Stadium Hero '96 (Korea, Dream Island license) + stadhr96u Stadium Hero '96 (USA, EAH) @@ -128145,7 +132565,7 @@ stakwin - Stakes Winner / Stakes Winner - GI Kinzen Seiha e no Michi + Stakes Winner / Stakes Winner - GI Kinzen Seiha e no Michi stakwin2 @@ -128153,7 +132573,11 @@ stakwindev - Stakes Winner / Stakes Winner - GI Kinzen Seiha e no Michi (early development board) + Stakes Winner / Stakes Winner - GI Kinzen Seiha e no Michi (early development board) + + + stankatk + Super Tank Attack (prototype rev. 1.12) star100 @@ -128209,7 +132633,7 @@ starfgmc - Starfighter (Moon Cresta bootleg) + Starfighter (bootleg of Moon Cresta) starfigh @@ -128265,27 +132689,27 @@ stargatp - Stargate (Pinball) + Stargate (pinball, rev.5) + + + stargatp0 + Stargate (pinball) stargatp1 - Stargate (rev.1) + Stargate (pinball, rev.1) stargatp2 - Stargate (rev.2) + Stargate (pinball, rev.2) stargatp3 - Stargate (rev.3) + Stargate (pinball, rev.3) stargatp4 - Stargate (rev.4) - - - stargatp5 - Stargate (rev.5) + Stargate (pinball, rev.4) starglad @@ -128321,7 +132745,7 @@ starhawk - Star Hawk + Starhawk starjack @@ -128409,7 +132833,7 @@ startrkd - Star Trek (Defender bootleg) + Star Trek (bootleg of Defender) startrks @@ -128417,11 +132841,11 @@ startrp - Starship Troopers (2.01) + Starship Troopers (CPU 2.01, display A2.00) startrp2 - Starship Troopers (2.00) + Starship Troopers (CPU 2.00, display A2.00) starw @@ -128485,7 +132909,7 @@ stcc - Sega Touring Car Championship + Sega Touring Car Championship (newer) stcca @@ -128495,6 +132919,10 @@ stccb Sega Touring Car Championship (Revision B) + + stcco + Sega Touring Car Championship + stdragon Saint Dragon (set 1) @@ -128573,7 +133001,7 @@ stera - Steraranger (Moon Cresta bootleg) + Steraranger (bootleg of Moon Cresta) stest @@ -128655,6 +133083,10 @@ stompin Stompin' (4/4/86) + + stompina + Stompin' (prototype?) + stoneage Stoneage (bootleg of Caveman Ninja) @@ -128847,6 +133279,10 @@ strider2u Strider 2 (USA 991213) + + striderfix + Strider (USA, B-Board 89624B-2)(Graphic and music fixes, Hack) + striderj Strider Hiryu (Japan) @@ -128877,7 +133313,7 @@ strik_l4 - Strike Master (L-4) + Strike Master (L-4) (Shuffle) strike @@ -128885,15 +133321,15 @@ striker - Striker + Striker (Pinball) strikext - Striker Xtreme (1.02) + Striker Xtreme (CPU 1.02, display A1.03) strikext_100 - Striker Xtreme (1.00) + Striker Xtreme (CPU 1.00, display A1.03) striv @@ -128903,6 +133339,10 @@ strivf Super Triv (French questions) + + strker + Striker + strkfgtr Strike Fighter (World) @@ -128917,7 +133357,7 @@ strknew - Striker Xtreme (ARM7 Sound Board) + Striker Xtreme (CPU 1.02, display A1.03, ARM7 sound board) strkzn @@ -128985,27 +133425,27 @@ strxt_fr - Striker Xtreme (1.02 France) + Striker Xtreme (CPU 1.02, display F1.03, France) strxt_gr - Striker Xtreme (1.03 Germany) + Striker Xtreme (CPU 1.03, display G1.03, Germany) strxt_it - Striker Xtreme (1.02 Italy) + Striker Xtreme (CPU 1.02, display I1.03, Italy) strxt_it_101 - Striker Xtreme (1.01 Italy) + Striker Xtreme (CPU 1.01, display I1.03, Italy) strxt_sp - Striker Xtreme (1.02 Spain) + Striker Xtreme (CPU 1.02, display L1.03, Spain) strxt_uk - Striker Xtreme (1.01 UK) + Striker Xtreme (CPU 1.01, display A1.03, UK) sttng_g7 @@ -129199,6 +133639,10 @@ suchiesp Idol Janshi Suchie-Pai Special (Japan) + + sugorotc + Sugorotic JAPAN (STJ1 Ver.C) + suhosong Su Ho Seong @@ -129291,13 +133735,21 @@ super21p Super 21 + + super555 + Super 555 (English version V1.5) + super7 Super Seven super9 - Super Nove (Playmark) + Super Nove (Playmark, Lire currency) + + + super97 + Super 97 (Ver. 1.00) super972 @@ -129307,6 +133759,10 @@ super98 Super 98 (3-hands, ICP-1) + + super9a + Super Nove (Playmark, Euro currency) + superabc Super ABC (Pac-Man multigame kit, Sep. 03 1999) @@ -129329,7 +133785,11 @@ superbon - Agent Super Bond (Super Cobra conversion) + Agent Super Bond (Super Cobra conversion, encrypted) + + + superbona + Agent Super Bond (Super Cobra conversion, not encrypted) superbug @@ -129361,7 +133821,7 @@ supercrd - Super Card (encrypted) + Super Card (v417, encrypted) superdbl @@ -129389,7 +133849,7 @@ superg - Super Galaxians ('Galaxian (Namco set 2)' hack) + Super Galaxians (hack of 'Galaxian (Namco set 2)') supergm3 @@ -129439,6 +133899,10 @@ superqix Super Qix + + supershp + Super Ship + superspy The Super Spy (NGM-011 ~ NGH-011) @@ -129525,7 +133989,7 @@ suprheli - Super Heli (Super Cobra bootleg) + Super Heli (bootleg of Super Cobra) suprleag @@ -129607,9 +134071,21 @@ suprtrio Super Trio + + supst834 + Super Stars (v834, encrypted) + + + supst839 + Super Stars (v839, encrypted) + supstarf - Super Star (Recreativos Franco) + Super Star (Recreativos Franco, set 1) + + + supstarfa + Super Star (Recreativos Franco, set 2) supxevs @@ -129641,15 +134117,19 @@ surfplnt - Surf Planet (Version 4.1) + Surf Planet (version 4.1) + + + surfplnt20 + Surf Planet (version 2.0) surfplnt30 - Surf Planet (Version 3.0) + Surf Planet (version 3.0) surfplnt40 - Surf Planet (Version 4.0) + Surf Planet (version 4.0) surpr5 @@ -129719,6 +134199,10 @@ suzume Watashiha Suzumechan (Japan) + + sv1pf434 + Sovereign (1PF434A3) Fantasy + svc SNK vs. Capcom - SVC Chaos (NGM-2690 ~ NGH-2690) @@ -129727,6 +134211,10 @@ svcboot SNK vs. Capcom - SVC Chaos (bootleg) + + svcfd + SNK vs. Capcom - SVC Chaos (Fully Decrypted) + svcpcb SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 1) @@ -129743,6 +134231,10 @@ svcplusa SNK vs. Capcom - SVC Chaos Plus (bootleg set 2) + + svcsplse + SNK vs. Capcom - SVC Chaos Super Plus (Enhanced, Hack) + svcsplus SNK vs. Capcom - SVC Chaos Super Plus (bootleg) @@ -129785,6 +134277,10 @@ svolleyu + Super Volleyball (US, Data East license) + + + svolleyua Super Volleyball (US) @@ -129835,6 +134331,10 @@ sweetgal Sweet Gal (Japan 850510 SWG 1-02) + + sweethrt + Sweetheart + sweetl Sweet Life (041220 World) @@ -129919,6 +134419,10 @@ sweetlb Sweet Life (bootleg, 041220, banking address hack, changed version text) + + sweetld4 + Sweet Land 4 Bright (ver 2004.9.29) + sweetlnd Sweet Land @@ -129939,6 +134443,10 @@ swhr2a6 Sweethearts II (0151183, US) + + swhr2q + Sweethearts II (0100860V, Queensland) + swhr2u Sweethearts II (PHG0742-02, US) @@ -129987,6 +134495,10 @@ swrds_l2 Swords of Fury (L-2) + + swrds_lg2 + Swords of Fury (LG-2) Germany + sws Super World Stadium (Japan) @@ -130035,13 +134547,17 @@ swtht2nz Sweethearts II (1VXFC5461, New Zealand) + + swtril30 + Star Wars Trilogy (CPU 3.00, display A3.00) + swtril41 - Star Wars Trilogy (4.01) + Star Wars Trilogy (CPU 4.01, display A4.00) swtril43 - Star Wars Trilogy (4.03) + Star Wars Trilogy (CPU 4.03, display A4.00) swtrilgy @@ -130079,6 +134595,10 @@ syscheck Neo System Check (ver 1.0b) + + syutnori + Super Yutnori (bootleg of Major Poker) + syvalion Syvalion (Japan) @@ -130133,7 +134653,7 @@ t3new - Terminator 3: Rise of the Machines (ARM7 Sound Board) + Terminator 3: Rise of the Machines (CPU 4.00, display A4.00, ARM7 sound board) tabpkr @@ -130235,6 +134755,26 @@ taiko10 Taiko no Tatsujin 10 (T101001-NA-A) + + taiko11 + Taiko no Tatsujin 11 (T111001-NA-A) + + + taiko2 + Taiko no Tatsujin 2 (Japan, TK21 Ver.C) + + + taiko3 + Taiko no Tatsujin 3 (Japan, TK31 Ver.A) + + + taiko4 + Taiko no Tatsujin 4 (Japan, TK41 Ver.A) + + + taiko5 + Taiko no Tatsujin 5 (Japan, TK51 Ver.A) + taiko6 Taiko no Tatsujin 6 (Japan, TK61 Ver.A) @@ -130251,6 +134791,10 @@ taiko9 Taiko no Tatsujin 9 (TK91001-NA-A) + + taikort + Taiko no Tatsujin RT: Nippon no Kokoro (Japan, TKN1 Ver.A) + tail2nos Tail to Nose - Great Championship / Super Formula @@ -130413,11 +134957,11 @@ tappera - Tapper (Budweiser, 12/9/83) + Tapper (Budweiser, 1/12/84) tapperb - Tapper (Budweiser, 1/12/84) + Tapper (Budweiser, 12/9/83) tapperg @@ -130445,7 +134989,7 @@ tarzan - Tarzan Chuang Tian Guan (V109C, set 2) + Tarzan Chuang Tian Guan (China, V109C, set 2) tarzana @@ -130453,7 +134997,7 @@ tarzanc - Tarzan Chuang Tian Guan (V109C, set 1) + Tarzan Chuang Tian Guan (China, V109C, set 1) tatacot @@ -130641,11 +135185,15 @@ tdragonb - Thunder Dragon (bootleg, set 1) + Thunder Dragon (bootleg with Raiden sounds, encrypted) tdragonb2 - Thunder Dragon (bootleg, set 2) + Thunder Dragon (bootleg with reduced sound system) + + + tdragonb3 + Thunder Dragon (bootleg with Raiden sounds, unencrypted) tduno @@ -130661,7 +135209,7 @@ teamht - Team Hat Trick + Team Hat Trick (11/16/84) teamqb @@ -130707,25 +135255,33 @@ teddybbo TeddyBoy Blues (315-5115, Old Ver.) + + teddybboa + TeddyBoy Blues (315-5111, Old Ver.) + teddybbobl TeddyBoy Blues (Old Ver. bootleg) teedoff + Tee'd Off (World) + + + teedoffj Tee'd Off (Japan) teedoffp - Tee'd Off + Tee'd Off (pinball, rev.3) - teedoffp1 - Tee'd Off (rev.1) + teedoffp0 + Tee'd Off (pinball) - teedoffp3 - Tee'd Off (rev.3) + teedoffp1 + Tee'd Off (pinball, rev.1) teetert @@ -130765,7 +135321,7 @@ tekken2 - Tekken 2 Ver.B (US, TES3/VER.D) + Tekken 2 Ver.B (World, TES2/VER.D) tekken2a @@ -130783,10 +135339,18 @@ tekken2jc Tekken 2 Ver.B (Japan, TES1/VER.C) + + tekken2ua + Tekken 2 (US, TES3/VER.A) + tekken2ub Tekken 2 Ver.B (US, TES3/VER.B) + + tekken2ud + Tekken 2 Ver.B (US, TES3/VER.D) + tekken3 Tekken 3 (World, TET2/VER.E1) @@ -130799,6 +135363,10 @@ tekken3b Tekken 3 (World, TET2/VER.B) + + tekken3c + Tekken 3 (World, TET2/VER.C) + tekken3d Tekken 3 (World, TET2/VER.D) @@ -130965,7 +135533,7 @@ tenkai - Mahjong Tenkaigen + Mahjong Tenkaigen (Japan, Bet) tenkai2b @@ -130973,15 +135541,15 @@ tenkaibb - Mahjong Tenkaigen (bootleg b) + Mahjong Tenkaigen (Japan bootleg b, Bet) tenkaicb - Mahjong Tenkaigen (bootleg c) + Mahjong Tenkaigen (Japan bootleg c, Bet) tenkaie - Mahjong Tenkaigen (set 2) + Mahjong Tenkaigen (Japan set 2, Bet) tenkomor @@ -130999,6 +135567,10 @@ tenspot Ten Spot + + tenstrikc + Ten Strike Classic + tenthdeg Tenth Degree (prototype) @@ -131009,19 +135581,39 @@ teot - The Eye of Typhoon (Beta 3 Version) + The Eye of Typhoon (Beta 7 Version) teplus2j Tetris Plus 2 (Japan) + + teqsun + Tequila Sunrise (1VXFC613, NSW) + terabrst Teraburst (1998/07/17 ver UEL) terabrsta - Teraburst (1998/02/25 ver AAA) + Teraburst (1998/07/17 ver HEL) + + + terabrstaa + Teraburst (1998/02/25 ver HAA) + + + terabrstj + Teraburst (1998/07/17 ver JEL) + + + terabrstja + Teraburst (1998/02/25 ver JAA) + + + terabrstua + Teraburst (1998/02/25 ver UAA) term2 @@ -131049,59 +135641,59 @@ term3 - Terminator 3: Rise of the Machines (4.00) + Terminator 3: Rise of the Machines (CPU 4.00, display A4.00) term3_205 - Terminator 3: Rise of the Machines (2.05) + Terminator 3: Rise of the Machines (CPU 2.05, display A2.01) term3_301 - Terminator 3: Rise of the Machines (3.01) + Terminator 3: Rise of the Machines (CPU 3.01, display A3.00) term3f - Terminator 3: Rise of the Machines (4.00 France) + Terminator 3: Rise of the Machines (CPU 4.00, display F4.00, France) term3f_205 - Terminator 3: Rise of the Machines (2.05 France) + Terminator 3: Rise of the Machines (CPU 2.05, display F2.01, France) term3f_301 - Terminator 3: Rise of the Machines (3.01 France) + Terminator 3: Rise of the Machines (CPU 3.01, display F3.00, France) term3g - Terminator 3: Rise of the Machines (4.00 Germany) + Terminator 3: Rise of the Machines (CPU 4.00, display G4.00, Germany) term3g_301 - Terminator 3: Rise of the Machines (3.01 Germany) + Terminator 3: Rise of the Machines (CPU 3.01, display G3.00, Germany) term3i - Terminator 3: Rise of the Machines (4.00 Italy) + Terminator 3: Rise of the Machines (CPU 4.00, display I4.00, Italy) term3i_205 - Terminator 3: Rise of the Machines (2.05 Italy) + Terminator 3: Rise of the Machines (CPU 2.05, display I2.01, Italy) term3i_301 - Terminator 3: Rise of the Machines (3.01 Italy) + Terminator 3: Rise of the Machines (CPU 3.01, display I3.00, Italy) term3l - Terminator 3: Rise of the Machines (4.00 Spain) + Terminator 3: Rise of the Machines (CPU 4.00, display L4.00, Spain) term3l_205 - Terminator 3: Rise of the Machines (2.05 Spain) + Terminator 3: Rise of the Machines (CPU 2.05, display L2.01, Spain) term3l_301 - Terminator 3: Rise of the Machines (3.01 Spain) + Terminator 3: Rise of the Machines (CPU 3.01, display L3.00, Spain) terracra @@ -131147,6 +135739,10 @@ terrafu Terra Force (US) + + terrafua + Terra Force (US, alternate sound) + terrlake Terrific Lake @@ -131163,6 +135759,10 @@ tesorone240 Tesorone Dell'Isola (Italy, v2.40) + + test240p + 240p Test Suite (v1.0) + tetfight Tetris Fighters @@ -131372,8 +135972,8 @@ Thai Princess (10119321, NSW/ACT) - thaiprncm - Thai Princess (30127721, Malaysia) + thaiprnca + Thai Princess (30127721, ASP) tharierj @@ -131407,6 +136007,10 @@ theboat The Boat + + thecastle + The Castle + thedealr The Dealer (Visco) @@ -131447,6 +136051,10 @@ theglad101 The Gladiator / Shen Jian Fu Mo Lu / Shen Jian Fengyun (M68k label V100) (ARM label V101, ROM 03/13/03 SHEN JIAN) + + theglad104 + The Gladiator / Shen Jian Fu Mo Lu / Shen Jian Fengyun (M68k label V100) (ARM label V104, ROM 04/02/03 SHEN JIAN V104) + thegladpcb Tougenkyou - Road of the Sword (M68k label V100) (ARM label V101, ROM 03/13/03 SHEN JIAN) (Japan, JAMMA PCB) @@ -131487,6 +136095,10 @@ thegrida The Grid (version 1.1) + + thegridb + The Grid (version 1.01) + thehand The Hand @@ -131539,10 +136151,18 @@ thepitu2 The Pit (US set 2) + + thepitu3 + The Pit (US set 3) + theportr The Porter (bootleg of Port Man) + + thequest + The Quest (NSW, Australia) + theraid The Raid @@ -131551,6 +136171,10 @@ theraida The Raid (alternate set) + + therock + The Rock + theroes Thunder Heroes @@ -131695,21 +136319,89 @@ thrild2j Thrill Drive 2 (ver JAA) + + thrild3j + Thrill Drive 3 (D44:J:A:A:20050316) + thrilld - Thrill Drive (JAE) + Thrill Drive (UDE) + + + thrillda + Thrill Drive (ACE) + + + thrilldab + Thrill Drive (ABE) thrilldb - Thrill Drive (JAB) + Thrill Drive (UDB) + + + thrilldba + Thrill Drive (ACB) + + + thrilldbab + Thrill Drive (ABB) thrilldbe - Thrill Drive (EAB) + Thrill Drive (EDB) - thrilldbu - Thrill Drive (ver UFB) + thrilldbj + Thrill Drive (JCB) + + + thrilldbja + Thrill Drive (JAB) + + + thrillde + Thrill Drive (EDE) + + + thrilldgej + Thrill Drive (ver GE713JAB) + + + thrilldgeu + Thrill Drive (ver GE713UFB) + + + thrilldgke + Thrill Drive (ver GK713EAB) + + + thrilldgkee + Thrill Drive (ver GK713EEB) + + + thrilldgkk + Thrill Drive (ver GK713K*B) + + + thrilldgmj + Thrill Drive (ver GM713JAB) + + + thrilldgnj + Thrill Drive (ver GN713JAB) + + + thrilldgpj + Thrill Drive (ver GP713JAB) + + + thrilldj + Thrill Drive (JCE) + + + thrilldja + Thrill Drive (JAE) thund_p1 @@ -131741,7 +136433,11 @@ thunderl - Thunder & Lightning + Thunder & Lightning (set 1) + + + thunderla + Thunder & Lightning (set 2) thunderlbl @@ -131793,7 +136489,11 @@ tictac - Tic Tac Trivia (6221-23, U5-0C Horizontal) + Tic Tac Trivia (6221-23, U5-0C, 07/07/86) + + + tictaca + Tic Tac Trivia (6221-23, U5-0C, 02/11/86) tictacv @@ -131895,6 +136595,10 @@ tigress Tigress (20230111, NSW/ACT) + + tigressa + Tigress (20243811, ASP) + tikitalk Tiki Talk (10239111, NSW/ACT) @@ -131903,6 +136607,10 @@ tiktorch Tiki Torch (0151003, US) + + tiktorchnz + Tiki Torch (10124011, New Zealand) + timber Timber @@ -131917,11 +136625,11 @@ timecris - Time Crisis (Rev. TS2 Ver.B, World) + Time Crisis (World, TS2 Ver.B) timecrisa - Time Crisis (Rev. TS2 Ver.A, World) + Time Crisis (World, TS2 Ver.A) timecrs2 @@ -132031,6 +136739,14 @@ timescan1 Time Scanner (set 1, System 16A, FD1089B 317-0024) + + timescan3 + Time Scanner (set 3, Japan, System 16B) (FD1089B 317-0024) + + + timescanbl + Time Scanner (bootleg) + timesol1 Time Soldiers (US Rev 1) @@ -132043,17 +136759,21 @@ timesold1 Time Soldiers (US Rev 1) + + timesup + Time's UP! + timesupd - Time's Up (Demo) + Time's UP! (Demo) timetrv - Time Traveler (set 1) + Time Traveler timetrv2 - Time Traveler (set 2) + Time Traveler (Japan) timetunl @@ -132063,6 +136783,10 @@ timscanr Time Scanner + + tinkerbl + Tinker Bell + tinklpit Tinkle Pit (Japan) @@ -132095,6 +136819,10 @@ tisuba Treasure Island (Subsino, set 2) + + tisubb + Treasure Island (American Alpha, v3.0N) + titan Titan (set 1) @@ -132105,11 +136833,11 @@ titanic - Titanic (Coin dropper) + Titanic (coin dropper, CPU 1.01, display A1.01) titanpac - Titan (Pac-Man hack) + Titan (hack of Pac-Man) titlef @@ -132125,12 +136853,16 @@ tjsb - Mahjong Tian Jiang Shen Bing (V137C) + Tian Jiang Shen Bing (China, V137C) tjumpman Tobikose! Jumpman + + tkdensha + Toukidenshou - Angel Eyes (VER. 960427) + tkdensho Toukidenshou - Angel Eyes (VER. 960614) @@ -132295,6 +137027,10 @@ tmachzacg Time Machine (Zaccaria, German speech) + + tmachzaci + Time Machine (Zaccaria, Italian speech) + tmacltd2 Time Machine (LTD, 2 players) @@ -132415,6 +137151,10 @@ tmnt_104g Teenage Mutant Ninja Turtles (Germany 1.04, display A1.04) + + tmnt_a07 + Teenage Mutant Ninja Turtles (A 0.7 VUK prototype) + tmnta Teenage Mutant Ninja Turtles (Asia 4 Players, version ?) @@ -132431,6 +137171,10 @@ tmntj Teenage Mutant Ninja Turtles (Japan 4 Players, version 2) + + tmntmwb + Teenage Mutant Ninja Turtles - Mutant Warriors (SNES bootleg) + tmntu Teenage Mutant Ninja Turtles (US 4 Players, version R) @@ -132447,6 +137191,10 @@ tmntuc Teenage Mutant Ninja Turtles (US 4 Players, version H) + + tmntucbl + Teenage Mutant Ninja Turtles (bootleg, US 4 Players, version H) + tmosh Tokimeki Memorial Oshiete Your Heart (GQ673 JAA) @@ -132673,7 +137421,23 @@ tokyowar - Tokyo Wars (Rev. TW2 Ver.A, World) + Tokyo Wars (World, TW2 Ver.A) + + + tokyowarj + Tokyo Wars (Japan, TW1 Ver.A) + + + toledo + Toledo (2 jackpot points, 87%) + + + toledoa + Toledo (2 jackpot points, 83%) + + + toledob + Toledo (1 jackpot point, 79%) tom_06 @@ -132723,14 +137487,30 @@ tomcatsw TomCat (Star Wars hardware, prototype) + + tomsadvs + Tom's Adventures + tomy_102 The Who's Tommy Pinball Wizard (USA 1.02, display A3.00) + + tomy_102be + The Who's Tommy Pinball Wizard (Belgium 1.02, display A1.02) + + + tomy_201h + The Who's Tommy Pinball Wizard (Dutch 2.01, display A2.00) + tomy_300h The Who's Tommy Pinball Wizard (Dutch 3.00, display A3.00) + + tomy_301g + The Who's Tommy Pinball Wizard (German 3.01, display G3.00) + tomy_400 The Who's Tommy Pinball Wizard (USA 4.00, display A4.00) @@ -132741,7 +137521,7 @@ tonpuu - Ton Puu Mahjong [BET] (Japan) + Ton Puu Mahjong Version 2.0 RX [BET] (Japan) tonton @@ -132799,6 +137579,10 @@ topbladv Top Blade V + + topdrive + Top Driving (version 1.1) + topgame Top Game Laser L10 (Bingo) @@ -132951,6 +137735,10 @@ torgods Torch of the Gods (10000411, NSW/ACT) + + torgodsa + Torch of the Gods (20210211, ASP) + toride2g Toride II Adauchi Gaiden @@ -132969,11 +137757,11 @@ tornado1 - Tornado (set 1, Defender bootleg) + Tornado (bootleg of Defender, set 1) tornado2 - Tornado (set 2, Defender bootleg) + Tornado (bootleg of Defender, set 2) tornbase @@ -132999,6 +137787,10 @@ toryumon Toryumon + + toryumondx + Toryumon DX + totan_04 Tales Of The Arabian Nights (0.4) @@ -133025,8 +137817,16 @@ totcarnp + Total Carnage (prototype, rev 1.0 01-25-92) + + + totcarnp1 Total Carnage (prototype, proto v 1.0 01/25/92) + + totcarnp2 + Total Carnage (prototype, proto v 2.0 02/10/92) + totd The Typing of the Dead (Rev A) @@ -133077,19 +137877,19 @@ touchgo - Touch & Go (World) + Touch and Go (World) touchgoe - Touch & Go (earlier revision) + Touch and Go (earlier revision) touchgok - Touch & Go (Korea, unprotected) + Touch and Go (Korea, unprotected) touchgon - Touch & Go (Non North America) + Touch and Go (Non North America) toukon3 @@ -133107,6 +137907,10 @@ tour4010 Tour 4010 + + toureiff + Torre Eiffel + tourpgum unknown Paradise Automatique / TourVisión bowling themed poker game with gum prizes (France) @@ -133195,6 +137999,14 @@ toypop Toypop + + toysmarch + Toy's March (E00:J:A:A:2005011602) + + + toysmarch2 + Toy's March 2 (F00:J:A:A:2005110400) + tp2m32 Tetris Plus 2 (ver 1.0, MegaSystem 32 Version) @@ -133369,7 +138181,7 @@ trikitri - Triki Triki (Lover Boy bootleg) + Triki Triki (bootleg of Lover Boy) triothep @@ -133419,17 +138231,21 @@ triplfun Triple Fun + + triplfunk + Sum-eoitneun Deongdalireul Chat-ara! + triplhnt Triple Hunt tripool - Tri-Pool (Casino Tech) + Tri-Pool: 3-In-One (Casino Tech) tripoola - Tri-Pool (Costal Games) + Tri-Pool: 3-In-One (Coastal Games) trisport @@ -133443,10 +138259,6 @@ trivia Trivia (Rev B) [TTL] - - trivia12 - Trivial Pursuit (Think Tank - Genus Edition) (12/14/84) - triviabb Trivial Pursuit (Baby Boomer Edition) (3/20/85) @@ -133469,11 +138281,15 @@ triviag1 - Trivial Pursuit (Think Tank - Genus Edition) (set 1) + Trivial Pursuit (Think Tank - Genus Edition) (2/12/85) + + + triviag1a + Trivial Pursuit (Think Tank - Genus Edition) (12/14/84) triviag2 - Trivial Pursuit (Genus II Edition) + Trivial Pursuit (Genus II Edition) (3/22/85) trivialp @@ -133501,7 +138317,7 @@ triviayp - Trivial Pursuit (Young Players Edition) + Trivial Pursuit (Young Players Edition) (3/29/85) trivquiz @@ -133579,6 +138395,14 @@ trojanj Tatakai no Banka (Japan) + + trojanjo + Tatakai no Banka (Japan, old ver.) + + + trojanlt + Trojan (location test) + trojanr Trojan (Romstar) @@ -133619,6 +138443,10 @@ troopy Troopy (bootleg of Mr. Kougar) + + tropchnc + Tropical Chance + trophyh Trophy Hunting - Bear & Moose V1.00 @@ -133731,10 +138559,18 @@ trvmstrc Trivia Master (set 4) + + trvmstrd + Trivia Master (set 5) + trvquest Trivia Quest + + trvwz + Trivia ? Whiz (6221-00) + trvwz2 Trivia ? Whiz (6221-05, Edition 2) @@ -133744,35 +138580,39 @@ Trivia ? Whiz (6221-05, Edition 2 Alt Sex trivia) - trvwz3h - Trivia ? Whiz (6221-05, Edition 3) + trvwz3 + Trivia ? Whiz (6221-05, U5-0D, Edition 3) - trvwz3ha + trvwz3a + Trivia ? Whiz (6221-05, U5-0C, Edition 3) + + + trvwz3b Trivia ? Whiz (6221-05, Edition 3 Sex trivia III) trvwz3v - Trivia ? Whiz (6221-04, Edition 3 Vertical) + Trivia ? Whiz (6221-04, U5-0E, Edition 3 Vertical) trvwz4 - Trivia ? Whiz (6221-13, U5-0B Edition 4) + Trivia ? Whiz (6221-10, U5-0A, Edition 4) - trvwz4a - Trivia ? Whiz (6221-13, U5-0B Edition 4 Alt Sex trivia) + trvwz4v + Trivia ? Whiz (6221-13, U5-0B, Edition 4 Vertical) - trvwzh - Trivia ? Whiz (6221-00) + trvwz4va + Trivia ? Whiz (6221-13, U5-0B, Edition 4 Vertical Alt Sex trivia) - trvwzha + trvwza Trivia ? Whiz (6221-00, with Sex trivia) - trvwzhb + trvwzb Trivia ? Whiz (6221-00, Alt Gen trivia) @@ -133811,6 +138651,10 @@ ts_la4 The Shadow (LA-4) + + ts_lf4 + The Shadow (LF-4) French + ts_lf6 The Shadow (LF-6) French @@ -134077,20 +138921,40 @@ turbofrcu - Turbo Force (US) + Turbo Force (US, set 1) + + + turbofrcua + Turbo Force (US, set 2) turbosub Turbo Sub (prototype rev. TSCA) - turbosub6 + turbosubb8 + Turbo Sub (prototype rev. TSB8) + + + turbosubc5 + Turbo Sub (prototype rev. TSC5) + + + turbosubc5s + Turbo Sub (prototype rev. TSC5*) + + + turbosubc6 Turbo Sub (prototype rev. TSC6) - turbosub7 + turbosubc7 Turbo Sub (prototype rev. TSC7) + + turbosubc8 + Turbo Sub (prototype rev. TSC8) + turbotag Turbo Tag (prototype) @@ -134099,6 +138963,10 @@ turfmast Neo Turf Masters / Big Tournament Golf + + turfwld3 + GI Turf Wild 3 + turkhunt Turkey Hunting USA V1.00 @@ -134123,6 +138991,10 @@ turtreas Turtle Treasure (10234711, NSW/ACT) + + turtreasa + Turtle Treasure (10239811, ASP) + turtship Turtle Ship (North America) @@ -134175,6 +139047,14 @@ tvdenwad Terebi Denwa Doraemon + + tvdenwam + Terebi Denwa Super Mario World + + + tvgm8080 + TV Game 8080 + tvpoker T.V. Poker @@ -134201,11 +139081,11 @@ twcup90b3 - World Cup '90 (bootleg, set 2) + Euro League (Italian hack of Tecmo World Cup '90, set 3) twcup90b4 - World Cup '90 (bootleg, set 3) + World Cup '90 (hack, alt) twcup90ba @@ -134331,17 +139211,25 @@ twinqix Twin Qix (Ver 1.0A 1995/01/17, prototype) + + twinqixjh + Twin Qix Japan (Ver 1.0A 1995/01/17) (Hack) + twins - Twins + Twins (newer) + + + twinsa + Twins (older) twinsed1 - Twins (Electronic Devices license, set 1) + Twins (Electronic Devices license, older) twinsed2 - Twins (Electronic Devices license, set 2) + Twins (Electronic Devices license, newer) twinspri @@ -134389,15 +139277,15 @@ twst_300 - Twister (3.00) + Twister (CPU 3.00, display A3.01) twst_404 - Twister (4.04) + Twister (CPU 4.04, display A4.00) twst_405 - Twister (4.05) + Twister (CPU 4.05, display A4.00) tx1 @@ -134531,6 +139419,10 @@ ufo21 UFO Catcher 21 + + ufo7 + UFO Catcher 7 (V20011112) + ufo800 UFO Catcher 800 @@ -134559,6 +139451,10 @@ ufosensib Ufo Senshi Yohko Chan (bootleg, not encrypted) + + ujlnow + Um Jammer Lammy NOW! (Japan, UL1/VER.A) + ultarctc Ultimate Arctic Thunder @@ -134625,11 +139521,7 @@ umk3p - Ultimate Mortal Kombat 3 Plus (Beta 1) - - - umk3pb1 - Ultimate Mortal Kombat 3 Plus (Hack, Beta 1) + Ultimate Mortal Kombat 3 Plus (Hack, Beta 2) umk3r10 @@ -134645,7 +139537,7 @@ umk3uk - Ultimate Mortal Kombat 3 Uk (Hack, Ver. 2022-01-19) + Ultimate Mortal Kombat 3 Uk (FBNeo, Ver. 2021-07-20) unclepoo @@ -134709,7 +139601,15 @@ unk960606 - unknown 960606-5 based machine + unknown 960606-5 based machine (set 1) + + + unk960606b + unknown 960606-5 based machine (set 2) + + + unkanyw + unknown AnyWorks / Sega medal game BIOS unkch1 @@ -134731,10 +139631,38 @@ unkct unknown Cointek game + + unkfr004 + unknown game on FR004 hardware (set 1) + + + unkfr004a + unknown game on FR004 hardware (set 2) + + + unkfr004b + unknown game on FR004 hardware (set 3) + + + unkfr004c + unknown game on FR004 hardware (set 4) + + + unkfr009 + unknown game on FR009 hardware + + + unkgolf + unknown golf game + unkh8gam unknown H8 Italian gambling game + + unkhockey + unknown Sega air hockey game + unkhorse unknown Japanese horse gambling game @@ -134743,10 +139671,6 @@ unkhpslt unknown Hobby Play slot machine - - unkigs - unknown IGS game (V100A) - unkitpkr unknown Italian poker game @@ -134756,8 +139680,12 @@ unknown Konami medal game (game code GS662) - unkm1 - unknown Sega gambling game (M1 Satellite board) + unkljfpk + unknown LJF Corporation poker game + + + unkmerit + unknown Merit game (4435-81, U5-1) unkpacg @@ -134772,28 +139700,48 @@ unknown 'Pac-Man' gambling game (set 2) - unkpoker - unknown 1980 poker game + unkpacgc + Coco Louco + + + unkpacgd + unknown 'Pac Man with cars' gambling game - unkrfslt - unknown Recreativos Franco slot machine + unkpmc + unknown PMC game - unks10md - unknown Namco System 10 medal game (MTL1 SPR0B) + unkpoker + unknown 1980 poker game unksig - unknown 'Space Invaders' gambling game (set 1) + unknown 'Space Invaders' gambling game (encrypted, set 1) unksiga - unknown 'Space Invaders' gambling game (set 2) + unknown 'Space Invaders' gambling game (encrypted, set 2) + + + unksigb + unknown 'Space Invaders' gambling game (unencrypted) + + + unksmk + unknown SMK game + + + unktop + unknown Top game + + + unkts + unknown game on TrueSys hardware - unkte06 - unknown Poker 'TE06' + unkzilec + unknown Zilec game on Blue Print hardware unomedal @@ -134809,7 +139757,7 @@ uopoko - Puzzle Uo Poko (International) + Puzzle Uo Poko (World) uopokoj @@ -134841,19 +139789,23 @@ usafootb - U.S.A. Football + U.S.A. Football (R06u) usafootba U.S.A. Football (R01u) + + usafootf + U.S.A. Football (P08, redemption) + usagi Usagi (V2.02J 2001/10/02 12:41:19) usagiol - Usagi Online (v2.04J) + Usagi: Yasei no Topai Online (v2.04J) usagiym @@ -134875,6 +139827,14 @@ usg187c Games V18.7C + + usg211c + Games V21.1C + + + usg251 + Games V25.1 + usg252 Games V25.4X @@ -136643,6 +141603,10 @@ varthb2 Varth: Operation Thunderstorm (bootleg, set 2) + + varthb3 + Varth: Operation Thunderstorm (bootleg, set 3) + varthj Varth: Operation Thunderstorm (Japan 920714) @@ -136973,19 +141937,19 @@ vf3 - Virtua Fighter 3 (Revision D) + Virtua Fighter 3 (Japan, Revision D) vf3a - Virtua Fighter 3 (Revision A) + Virtua Fighter 3 (Japan, Revision A) vf3c - Virtua Fighter 3 (Revision C) + Virtua Fighter 3 (Japan, Revision C) vf3tb - Virtua Fighter 3 Team Battle + Virtua Fighter 3 Team Battle (Japan) vf4 @@ -137057,12 +142021,16 @@ vgoalsca - V Goal Soccer (US/Japan/Korea) + V Goal Soccer (alt) vgoalsoc V Goal Soccer (Europe) + + vgoalsoca + V Goal Soccer (US/Japan/Korea) + vhunt2 Vampire Hunter 2: Darkstalkers Revenge (Japan 970929) @@ -137091,13 +142059,25 @@ vhuntjr2 Vampire Hunter: Darkstalkers' Revenge (Japan 950302) + + vicshoot + Victory Shoot + + + victlap + Ace Driver: Victory Lap (World, ADV2 Ver.B) + + + victlapa + Ace Driver: Victory Lap (World, ADV2) + victlapj - Ace Driver: Victory Lap (Rev. ADV1 Ver.C, Japan) + Ace Driver: Victory Lap (Japan, ADV1 Ver.C) victlapw - Ace Driver: Victory Lap (Rev. ADV2, World) + Ace Driver - Victory Lap (Rev. ADV2, World) victnine @@ -137387,6 +142367,10 @@ viostormab Violent Storm (ver AAB) + + viostormabbl + Violent Storm (ver AAB, bootleg) + viostormeb Violent Storm (ver EAB) @@ -137403,6 +142387,10 @@ viostormub Violent Storm (ver UAB) + + viostormubbl + Violent Storm (ver UAB, bootleg) + viostrma Violent Storm (Asia ver AAC) @@ -137417,7 +142405,15 @@ vip2000 - unknown 'VIP 2000' game + unknown 'VIP 2000' game (set 1) + + + vip2000a + unknown 'VIP 2000' game (set 2) + + + vip2000b + unknown 'VIP 2000' game (set 3) vipclub @@ -137481,11 +142477,11 @@ viprsega - Viper Night Drivin' (2.01) + Viper Night Drivin' (CPU 2.01, display A2.01) viprsega_102 - Viper Night Drivin' (1.02) + Viper Night Drivin' (CPU 1.02, display A1.00) virnba @@ -137517,7 +142513,15 @@ vjdash - VJ Visual & Music Slap + VJ Dash (ver 1.0) + + + vjdasha + VJ Dash (Ver 1.2) + + + vjslap + VJ: Visual & Music Slap vlcno_1a @@ -137617,19 +142621,19 @@ von2 - Virtual On 2: Oratorio Tangram (Revision B) + Virtual On 2: Oratorio Tangram (Japan, Revision B) von254g - Virtual On 2: Oratorio Tangram (ver 5.4g) + Virtual On 2: Oratorio Tangram (Japan, ver 5.4g) von2a - Virtual On 2: Oratorio Tangram (Revision A) + Virtual On 2: Oratorio Tangram (Japan, Revision A) von2o - Virtual On 2: Oratorio Tangram + Virtual On 2: Oratorio Tangram (Japan) vonj @@ -137721,15 +142725,15 @@ vs215o - Virtua Striker 2 (Step 1.5, Japan) + Virtua Striker 2 (Step 1.5, Japan, test/debug?) vs298 - Virtua Striker 2 '98 (Step 2.0) + Virtua Striker 2 '98 (Step 2.0, Japan) vs29815 - Virtua Striker 2 '98 (Step 1.5) + Virtua Striker 2 '98 (Step 1.5, Japan) vs299 @@ -137853,19 +142857,23 @@ vsbball - Vs. BaseBall (US, set BA E-1) + Vs. Baseball (US, set BA E-1) vsbballj - Vs. BaseBall (Japan, set BA A-3) + Vs. Baseball (Japan, set BA A-3) vsbballja - Vs. BaseBall (Japan, set BA A-2) + Vs. Baseball (Japan, set BA A-2) vsbballjb - Vs. BaseBall (Japan, set BA A-1) + Vs. Baseball (Japan, set BA A-1) + + + vscaptfl + Vs. Super Captain Flag (Japan) vscastlevania @@ -138149,7 +143157,7 @@ wackadoo - Wack-A-Doodle-Doo (Redemption) + Wack-A-Doodle-Doo (redemption, CPU 1.00, display A1.01) wacko @@ -138171,6 +143179,10 @@ waijockey Wai Wai Jockey + + wakuw7jq + Waku Waku 7 (Enhanced, Hack) + wakuwak7 Waku Waku 7 @@ -138277,19 +143289,19 @@ warfa - War: The Final Assault (EPROM 1.9 Mar 25 1999, GUTS 1.3 Apr 20 1999, GAME Apr 20 1999) + War: Final Assault (EPROM 1.9 Mar 25 1999, GUTS 1.3 Apr 20 1999, GAME Apr 20 1999) warfaa - War: The Final Assault (EPROM 1.6 Jan 14 1999, GUTS 1.1 Mar 16 1999, GAME Mar 16 1999) + War: Final Assault (EPROM 1.6 Jan 14 1999, GUTS 1.1 Mar 16 1999, GAME Mar 16 1999) warfab - War: The Final Assault (EPROM 1.3 Apr 7 1999, GUTS 1.3 Apr 7 1999, GAME Apr 7 1999) + War: Final Assault (EPROM 1.3 Apr 7 1999, GUTS 1.3 Apr 7 1999, GAME Apr 7 1999) warfac - War: The Final Assault (EPROM 1.91 Apr 13 1999, GUTS 1.3 Apr 7 1999, GAME Apr 7 1999) + War: Final Assault (EPROM 1.91 Apr 13 1999, GUTS 1.3 Apr 7 1999, GAME Apr 7 1999) wargods @@ -138371,6 +143383,10 @@ warzardr1 Warzard (Japan 961023) + + wasafari + Wanpaku Safari (J 981109 V1.000) + waterski Water Ski @@ -138489,43 +143505,47 @@ wbml - Wonder Boy in Monster Land (Japan New Ver., MC-8123, 317-0043) + Wonder Boy - Monster Land (Japan New Ver., MC-8123, 317-0043) wbmlb - Wonder Boy in Monster Land (English bootleg set 1) + Wonder Boy - Monster Land (English bootleg set 1) wbmlbg - Wonder Boy in Monster Land (English bootleg set 2) + Wonder Boy - Monster Land (English bootleg set 2) wbmlbge - Wonder Boy in Monster Land (English bootleg set 3) + Wonder Boy - Monster Land (English bootleg set 3) wbmld - Wonder Boy in Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043) + Wonder Boy - Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043) + + + wbmlh + Wonder Boy - Monster Land (English, difficulty hack) wbmljb - Wonder Boy in Monster Land (Japan bootleg) + Wonder Boy - Monster Land (Japan bootleg) wbmljo - Wonder Boy in Monster Land (Japan Old Ver., MC-8123, 317-0043) + Wonder Boy - Monster Land (Japan Old Ver., MC-8123, 317-0043) wbmljod - Wonder Boy in Monster Land (decrypted bootleg of Japan Old Ver., MC-8123, 317-0043) + Wonder Boy - Monster Land (decrypted bootleg of Japan Old Ver., MC-8123, 317-0043) wbmlvc - Wonder Boy in Monster Land (English, Virtual Console) + Wonder Boy - Monster Land (English, Virtual Console) wbmlvcd - Wonder Boy in Monster Land (decrypted bootleg of English, Virtual Console release) + Wonder Boy - Monster Land (decrypted bootleg of English, Virtual Console release) wboy @@ -138555,6 +143575,10 @@ wboy6 Wonder Boy (set 6, 315-5179) + + wboyblt + Wonder Boy (Tecfri bootleg) + wboyo Wonder Boy (set 2, 315-5135) @@ -138703,6 +143727,18 @@ wccf331e World Club Champion Football European Clubs 2004-2005 Ver.1.1 (Export) (CDV-10015) + + wccf331j + World Club Champion Football European Clubs 2004-2005 Ver.1.1 (Japan) (CDV-10020) + + + wccf341j + World Club Champion Football European Clubs 2004-2005 Ver.1.2 (Japan) (CDV-10021) + + + wccf400j + World Club Champion Football European Clubs 2005-2006 (Japan) (CDV-10025) + wccf420e World Club Champion Football European Clubs 2005-2006 (Export) (CDV-10027) @@ -138751,10 +143787,18 @@ wcougaruc Wild Cougar (AHG1531, US) + + wcougpp + Wild Cougar - Power Pay (30214211, ASP) + wcoyote Wild Coyote (AHG1515, US) + + wcs_l1 + World Cup Soccer (Lx-1) + wcs_l2 World Cup Soccer (Lx-2) @@ -138773,11 +143817,11 @@ wcsoccer - World Challenge Soccer (rev.1) + World Challenge Soccer (rev.1, set 1) - wcsoccerd2 - World Challenge Soccer (disp.rev.2) + wcsoccer1a + World Challenge Soccer (rev.1, set 2) wcup @@ -138879,6 +143923,10 @@ westdrm Western Dream + + westdrmg + Western Dream Gold + westgun2 Western Gun Part II @@ -138919,6 +143967,10 @@ wexpressb3 Western Express (bootleg set 3) + + wfishing + Wanpaku Fishing + wfortuna Wheel Of Fortune (alternate) @@ -138997,7 +144049,7 @@ whalecsh - Whales of Cash (20155711, Malaysia) + Whales of Cash (20155711, ASP) whalecshu @@ -139020,8 +144072,12 @@ Where's The Gold (10124811, NSW/ACT) - wheregldm - Where's The Gold (20177111, Malaysia) + whereglda + Where's The Gold (20177111, ASP) + + + wheregldb + Where's The Gold (10177111, ASP) wheregldq @@ -139033,11 +144089,19 @@ whirl_l2 - Whirlwind (L-2) + Whirlwind (LU-2) whirl_l3 - Whirlwind (L-3) + Whirlwind (LA-3) + + + whirl_lg1 + Whirlwind (LG-1) + + + whirl_lg2 + Whirlwind (LG-2) whirl_lg3 @@ -139071,6 +144135,10 @@ whp World Heroes Perfect + + whpjq + World Heroes Perfect (Enhanced, Hack) + whtforce White Force @@ -139153,11 +144221,11 @@ winbingo - Win Win Bingo (set 1) + Win Win Bingo (Ver. GM.03.3, Feb 23 2006) winbingoa - Win Win Bingo (set 2) + Win Win Bingo (Ver. GM.05.1, May 11 2006) windheat @@ -139185,7 +144253,11 @@ wingoly - Wings Over Olympus (0252529, US) + Wings over Olympus (10176511, ASP) + + + wingolyu + Wings over Olympus (0252529, US) wingwar @@ -139265,7 +144337,11 @@ wipeout - Wipeout (rev.2) + Wipeout (rev.2, set 1) + + + wipeout2a + Wipeout (rev.2, set 2) wiping @@ -139423,6 +144499,10 @@ wldcata6 Wild Cats (10237511, NSW/ACT) + + wldcata6a + Wild Cats (20258111, ASP) + wldcourt Pro Tennis World Court (Japan) @@ -139435,6 +144515,10 @@ wldgoos Wild Goose (20131911, NSW/ACT) + + wldgoosa + Wild Goose (10155911, ASP) + wldgunsb Wild Guns (SNES bootleg) @@ -139463,6 +144547,10 @@ wldpanda Wild Panda (20218411, NSW/ACT) + + wldpandaa + Wild Panda (20225011, ASP) + wldpanth Wild Panthers - Lil' Lucy (0651310, US) @@ -139623,21 +144711,29 @@ wof Warriors of Fate (World 921031) + + wof1v3 + Tenchi wo Kurau II: Sekiheki no Tatakai (1v3, Hack) + + + wof1v3p + Tenchi wo Kurau II: Sekiheki no Tatakai (1v3 Plus, Hack) + wof3js - Sangokushi II: San Jian Sheng (Chinese bootleg set 1, 921005 Asia) + Sangokushi II: San Jian Sheng (Chinese bootleg set 1) wof3jsa - Sangokushi II: San Jian Sheng (Chinese bootleg set 2, 921005 Asia) + Sangokushi II: San Jian Sheng (Chinese bootleg set 2) wof3sj - Sangokushi II: San Sheng Jian (Chinese bootleg set 1, 921005 Asia) + Sangokushi II: San Sheng Jian (Chinese bootleg set 1) wof3sja - Sangokushi II: San Sheng Jian (Chinese bootleg set 2, 921005 Asia) + Sangokushi II: San Sheng Jian (Chinese bootleg set 2) wof_100a @@ -139719,6 +144815,14 @@ wof_500l Wheel of Fortune v5.0 (Spanish) + + wof_v11 + Wheel of Fortune (P517 V11, English) + + + wof_v16 + Wheel of Fortune (P517 V16, English) + wofa Sangokushi II (Asia 921005) @@ -139727,21 +144831,29 @@ wofabl Sangokushi II (bootleg) + + wofabla + Sangokushi II (Asia, bootleg, set 2) + wofah - Sangokushi II (hack set 1, 921005 Asia) + Sangokushi II (hack set 1, Asia 921005) wofaha - Sangokushi II (hack set 2, 921005 Asia) + Sangokushi II (hack set 2, Asia 921005) wofahb - Sangokushi II (hack set 3, 921005 Asia) + Sangokushi II (hack set 3, Asia 921005) + + + wofc + Sangokushi II (T-Chi) wofch - Tenchi wo Kurau II - Sekiheki no Tatakai (CPS Changer, 921031 Japan) + Tenchi wo Kurau II: Sekiheki no Tatakai (CPS Changer, Japan 921031) wofchdx @@ -139749,15 +144861,23 @@ wofchp - Tenchi wo Kurau II - Sekiheki no Tatakai (PS/SS Version) + Tenchi wo Kurau II - Sekiheki no Tatakai (PS/SS Version, Hack) + + + wofdr + Tenchi wo Kurau II: Sekiheki no Tatakai (Master, Hack) + + + wofdr20 + Tenchi wo Kurau II: Sekiheki no Tatakai (Master 2020, Hack) wofh - Sangokushi II: Sanguo Yingxiong Zhuan (Chinese bootleg set 1, 921005 Asia) + Sangokushi II: Sanguo Yingxiong Zhuan (Chinese bootleg set 1) wofha - Sangokushi II: Sanguo Yingxiong Zhuan (Chinese bootleg set 2, 921005 Asia) + Sangokushi II: Sanguo Yingxiong Zhuan (Chinese bootleg set 2) wofhfh @@ -139768,12 +144888,16 @@ Tenchi wo Kurau II: Sekiheki no Tatakai (Japan 921031) - wofjdr - Tenchi wo Kurau II - Sekiheki no Tatakai (Master Edition, Hack) + wofjh + Tenchi wo Kurau II: Sekiheki no Tatakai (hack, Japan 921031) - wofjh - Tenchi wo Kurau II - Sekiheki no Tatakai (hack, 921031 Japan) + wofmws + Tenchi wo Kurau II: Sekiheki no Tatakai (3M Warriors, Hack) + + + wofmz1v3 + Tenchi wo Kurau II: Sekiheki no Tatakai (Cavalry 1v3, Hack) wofpic @@ -139787,26 +144911,50 @@ wofr1bl Warriors of Fate (bootleg) + + wofsc + Tenchi wo Kurau II: Sekiheki no Tatakai (Switchable Character, Hack) + + + wofsgzb + Sangokushi II: San Guo Zheng Ba (Chinese bootleg of Sangokushi II) + wofsj - Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 1, 921005 Asia) + Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 1) wofsja - Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 2, 921005 Asia) + Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 2) wofsjb - Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 3, 921005 Asia) + Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 3) wofsjc - Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 4, 921005 Asia) + Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 4) + + + wofsm + Tenchi wo Kurau II: Sekiheki no Tatakai (3M, Hack) wofu Warriors of Fate (USA 921031) + + wofwjq + Tenchi wo Kurau II: Sekiheki no Tatakai (Warriors Enhanced, Hack) + + + wofwp + Tenchi wo Kurau II: Sekiheki no Tatakai (Warriors Plus, Hack) + + + wofzl + Tenchi wo Kurau II: Sekiheki no Tatakai (Wolf Warriors, Hack) + wolffang Wolf Fang -Kuhga 2001- (Japan) @@ -139837,7 +144985,7 @@ wontame - Won! Tertainment Happy Channel (Ver E) + Won! Tertainment Happy Channel (Ver.1.00E 2008/02/21) wontmuch @@ -140129,7 +145277,7 @@ wrldtour - Al's Garage Band Goes On A World Tour + Al's Garage Band Goes On A World Tour (R01c) wrldtour2 @@ -140352,24 +145500,24 @@ White Water (LH-6) - ww_p1 - White Water (P-8 P-1 sound) + ww_p6 + White Water (P-6) ww_p8 - White Water (P-8 P-2 sound) + White Water (P-8) wwallyj - Wally wo Sagase! (rev B, Japan) (FD1094 317-0197B) + Wally wo Sagase! (rev B, Japan, 2 players) (FD1094 317-0197B) wwallyja - Wally wo Sagase! (rev A, Japan) (FD1094 317-0197A) + Wally wo Sagase! (rev A, Japan, 2 players) (FD1094 317-0197A) wwallyja3p - Wally wo Sagase! (rev A, Japan, 3 players, FD1094 317-0198A) + Wally wo Sagase! (rev A, Japan, 3 players) (FD1094 317-0198A) wwallyjad @@ -140379,6 +145527,10 @@ wwallyjd Wally wo Sagase! (rev B, Japan) (bootleg of FD1094 317-0197B set) + + wwanpanm + Waku Waku Anpanman (Rev A) + wwaratah Wild Waratah (10215911, NSW/ACT) @@ -140392,8 +145544,8 @@ Wild Ways (10106911, NSW/ACT) - wwaysm - Wild Ways (10130111, Malaysia) + wwaysa + Wild Ways (10130111, ASP) wwester1 @@ -140451,6 +145603,14 @@ wwfsstarb WWF Superstars (bootleg) + + wwfsstarb2 + WWF Superstars (bootleg with 2xYM2203) + + + wwfsstarc + WWF Superstars (Canada) + wwfsstarj WWF Superstars (Japan) @@ -140507,6 +145667,10 @@ wwmarine Waku Waku Marine + + wwmspot + Winner's Wheel - Magical Spot + wyvernf0 Wyvern F-0 (Rev 1) @@ -140527,6 +145691,10 @@ wzwaysll Wizard Ways - Lady Luck (20139121, NSW/ACT) + + x180ii + unknown Yuvo Joy Stand game + x2222 X2222 (final debug?) @@ -140539,6 +145707,10 @@ x5jokers X Five Jokers (Version 1.12) + + x80wc + X80 - War Command (ManilaMatic bootleg of Missile Command) + xday2 X-Day 2 (Japan) @@ -140549,7 +145721,7 @@ xenocrisis - Xeno Crisis (NGM-BB01) (NGH-BB01) + Xeno Crisis (NGM-BB01 ~ NGH-BB01) xenon @@ -140595,6 +145767,10 @@ xeviousc Xevious (Atari, Namco PCB) + + xeviousng + Xevious (Neo-Geo Conversion) + xexex Xexex (ver EAA) @@ -140613,11 +145789,11 @@ xfiles2 - X-Files (2.04) + X-Files (CPU 2.04, display A2.01) xfiles20 - X-Files (2.00) + X-Files (CPU 2.00, display A2.00) xfilesk @@ -140625,11 +145801,11 @@ xfilesp - X-Files (3.03) + X-Files (CPU 3.03, display A3.00) xfilespf - X-Files (3.03 France) + X-Files (CPU 3.03, display F3.00, France) xforce @@ -140739,6 +145915,10 @@ xmenaa X-Men (4 Players ver ADA) + + xmenabl + X-Men (4 Players ver AEA, bootleg) + xmenj X-Men (4 Players ver JBA) @@ -140787,6 +145967,10 @@ xmvsfb X-Men Vs. Street Fighter (Brazil 961023) + + xmvsfcph + X-Men vs Street Fighter (Hack, 961004 Coop) + xmvsfh X-Men Vs. Street Fighter (Hispanic 961004) @@ -140853,12 +146037,16 @@ xsleenab - Xain'd Sleena (bootleg) + Xain'd Sleena (bootleg, set 1) xsleenaba Xain'd Sleena (bootleg, bugfixed) + + xsleenabb + Xain'd Sleena (bootleg, set 2) + xsleenaj Xain'd Sleena (Japan) @@ -140959,6 +146147,10 @@ yarunara Mahjong Yarunara (Japan) + + yattrmnp + Yatterman Plus (J 981006 V1.000) + yellowcbb Yellow Cab (bootleg) @@ -141001,11 +146193,11 @@ yosakdon - Yosaku To Donbei (set 1) + Yosaku to Donbei (set 1) yosakdona - Yosaku To Donbei (set 2) + Yosaku to Donbei (set 2) yosimotm @@ -141025,11 +146217,11 @@ youkaidk1 - Yokai Douchuuki (Japan, old version (YD1)) + Youkai Douchuuki (Japan, old version (YD1)) youkaidk2 - Yokai Douchuuki (Japan, new version (YD2, Rev B)) + Youkai Douchuuki (Japan, new version (YD2, Rev B)) youma @@ -141047,6 +146239,10 @@ youmab2 Youma Ninpou Chou (Game Electronics bootleg, set 2) + + yoyospel + YoYo Spell (prototype) + yujan Yu-Jan @@ -141093,7 +146289,11 @@ zankor - Zankor (Italian speech) + Zankor (TMS5200 Italian speech) + + + zankor2i + Zankor (TMS5220 Italian speech) zaryavos @@ -141163,6 +146363,10 @@ zelost Zelos (Japan, terminal) + + zenponta + Zenigata Ponta + zephy Zephy (set 1) @@ -141173,11 +146377,11 @@ zero - Zero (set 1, Defender bootleg) + Zero (bootleg of Defender, set 1) zero2 - Zero (set 2, Defender bootleg) + Zero (bootleg of Defender, set 2) zerofxz @@ -141213,7 +146417,7 @@ zerohouri - Zero Hour (Inder) + Zero Hour (bootleg) zeropnt @@ -141237,7 +146441,7 @@ zeroteama - Zero Team (Japan?, earlier?) + Zero Team (Japan?, earlier?, set 1) zeroteamb @@ -141251,6 +146455,10 @@ zeroteamd Zero Team (Korea) + + zeroteame + Zero Team (Japan?, earlier?, set 2) + zeroteams Zero Team Selection @@ -141333,7 +146541,7 @@ zingzip - Zing Zing Zip + Zing Zing Zip (World) / Zhen Zhen Ji Pao (China?) zingzipbl @@ -141419,6 +146627,10 @@ zombrvno Zombie Revenge + + zoo + Zoo (Ver. ZO.02.D, Aug 27 2004) + zoofari Zoofari @@ -141443,6 +146655,14 @@ zoom909 Zoom 909 + + zoomania + Zoomania (Version 10.04, set 1) + + + zoomaniaa + Zoomania (Version 10.04, set 2) + zooo Zooo (V2.01JA 2004/04/13 12:00) @@ -141451,6 +146671,10 @@ zorroa6 Zorro (30130611, NSW/ACT) + + zorroa6a + Zorro (20167511, ASP) + zorroa6u Zorro (0151372, US) @@ -141464,8 +146688,48 @@ Zorton Brothers / Los Justicieros (v1.00) - zulu - Zulu (Ver. ZO.02.D) + zteam1v4 + Zero Team USA (1v4, Hack) + + + zteamdr + Zero Team USA (Providence, Hack) + + + zteamdw + Zero Team USA (Warriors, Hack) + + + zteamem + Zero Team USA (Nightmare, Hack) + + + zteammm + Zero Team USA (Incubus, Hack) + + + zteampls + Zero Team USA (Plus, Hack) + + + zteamwh + Zero Team USA (Question Mark, Hack) + + + zteamwxp + Zero Team USA (Infinite Cannon, Hack) + + + zteamym + Zero Team USA (Devil, Hack) + + + zteamys + Zero Team USA (God, Hack) + + + zteamzs + Zero Team USA (God of War, Hack) zunkyou diff --git a/resources/mameres.py b/resources/mameres.py index 87f00ca44f..927bdb5444 100755 --- a/resources/mameres.py +++ b/resources/mameres.py @@ -15,7 +15,7 @@ """ from xml.sax.saxutils import escape -from datetime import datetime +from datetime import datetime,timezone import xml.etree.ElementTree as et import sys import os @@ -77,7 +77,7 @@ games[name] = desc print(f"Found {len(games)} games, {len(sorted(set(bioses)))} BIOSes and {len(sorted(set(devices)))} devices") -ident_info = f"" +ident_info = f"" if len(games) > 0: with open('mamenames.xml', 'w') as f: From 0aa10ae9a143861a1cfd3abbed9e3478923891ef Mon Sep 17 00:00:00 2001 From: pjft Date: Mon, 26 Feb 2024 10:07:54 +0000 Subject: [PATCH 589/603] Update VLC Mute logic This updates it to support mixer passthrough, and accommodate cases where the mute function wasn't supported. --- es-core/src/components/VideoVlcComponent.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/es-core/src/components/VideoVlcComponent.cpp b/es-core/src/components/VideoVlcComponent.cpp index e34470f503..4ef7500d05 100644 --- a/es-core/src/components/VideoVlcComponent.cpp +++ b/es-core/src/components/VideoVlcComponent.cpp @@ -344,8 +344,7 @@ void VideoVlcComponent::stopVideo() void VideoVlcComponent::setMuteMode() { Settings *cfg = Settings::getInstance(); - if (!cfg->getBool("VideoAudio") || (cfg->getBool("ScreenSaverVideoMute") && mScreensaverMode)) - libvlc_audio_set_mute(mMediaPlayer, 1); - else - libvlc_audio_set_mute(mMediaPlayer, 0); + if (!cfg->getBool("VideoAudio") || (cfg->getBool("ScreenSaverVideoMute") && mScreensaverMode)) { + libvlc_media_add_option(mMedia, ":no-audio"); + } } From 485b995196ba7158aea4c60b9487afc14b894171 Mon Sep 17 00:00:00 2001 From: Gemba Date: Sun, 14 Apr 2024 18:17:07 +0200 Subject: [PATCH 590/603] Fix for cursor overrun in last played collection when LR/LB paging is active and fix cursor placement when changing theme with a smaller/larger gamelist viewport. --- es-app/src/CollectionSystemManager.cpp | 3 +++ es-app/src/components/TextListComponent.h | 5 +++++ es-app/src/guis/GuiMenu.cpp | 3 +-- es-app/src/views/ViewController.cpp | 12 +++++++----- es-app/src/views/ViewController.h | 2 +- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index 610e626752..a040a8e4e7 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -1,5 +1,6 @@ #include "CollectionSystemManager.h" +#include "components/TextListComponent.h" #include "guis/GuiInfoPopup.h" #include "utils/FileSystemUtil.h" #include "utils/StringUtil.h" @@ -284,6 +285,8 @@ void CollectionSystemManager::updateCollectionSystem(FileData* file, CollectionS { trimCollectionCount(rootFolder, LAST_PLAYED_MAX, false); ViewController::get()->onFileChanged(rootFolder, FILE_METADATA_CHANGED); + // Force re-calculation of cursor position + ViewController::get()->getGameListView(curSys)->setViewportTop(TextListComponent::REFRESH_LIST_CURSOR_POS); } else ViewController::get()->onFileChanged(rootFolder, FILE_SORTED); diff --git a/es-app/src/components/TextListComponent.h b/es-app/src/components/TextListComponent.h index 1c9080674a..2250769d30 100644 --- a/es-app/src/components/TextListComponent.h +++ b/es-app/src/components/TextListComponent.h @@ -392,6 +392,11 @@ void TextListComponent::onCursorChanged(const CursorState& state) template void TextListComponent::applyTheme(const std::shared_ptr& theme, const std::string& view, const std::string& element, unsigned int properties) { + if(Settings::getInstance()->getBool("UseFullscreenPaging")) + { + mViewportTop = REFRESH_LIST_CURSOR_POS; + } + GuiComponent::applyTheme(theme, view, element, properties); const ThemeData::ThemeElement* elem = theme->getElement(view, element, "textlist"); diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 09f377e0d9..b3150db4a5 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -301,8 +301,7 @@ void GuiMenu::openUISettings() { Scripting::fireEvent("theme-changed", theme_set->getSelected(), oldTheme); CollectionSystemManager::get()->updateSystemsList(); - ViewController::get()->goToStart(); - ViewController::get()->reloadAll(); // TODO - replace this with some sort of signal-based implementation + ViewController::get()->reloadAll(true); // TODO - replace this with some sort of signal-based implementation } }); } diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index c0a348349c..3d5079acec 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -555,7 +555,7 @@ void ViewController::reloadGameListView(IGameListView* view, bool reloadTheme) } -void ViewController::reloadAll() +void ViewController::reloadAll(bool themeChanged) { // clear all gamelistviews std::map cursorMap; @@ -567,7 +567,6 @@ void ViewController::reloadAll() } mGameListViews.clear(); - // load themes, create gamelistviews and reset filters for(auto it = cursorMap.cbegin(); it != cursorMap.cend(); it++) { @@ -576,10 +575,13 @@ void ViewController::reloadAll() getGameListView(it->first)->setCursor(it->second); } - // restore index of first list item on display - for(auto it = viewportTopMap.cbegin(); it != viewportTopMap.cend(); it++) + if(!themeChanged || !Settings::getInstance()->getBool("UseFullscreenPaging")) { - getGameListView(it->first)->setViewportTop(it->second); + // restore index of first list item on display + for(auto it = viewportTopMap.cbegin(); it != viewportTopMap.cend(); it++) + { + getGameListView(it->first)->setViewportTop(it->second); + } } // Rebuild SystemListView diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 0a8696d0a3..13a9a0c7a0 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -28,7 +28,7 @@ class ViewController : public GuiComponent // the current gamelist view (as it may change to be detailed). void reloadGameListView(IGameListView* gamelist, bool reloadTheme = false); inline void reloadGameListView(SystemData* system, bool reloadTheme = false) { reloadGameListView(getGameListView(system).get(), reloadTheme); } - void reloadAll(); // Reload everything with a theme. Used when the "ThemeSet" setting changes. + void reloadAll(bool themeChanged = false); // Reload everything with a theme. When the "ThemeSet" setting changes, themeChanged is true. // Navigation. void goToNextGameList(); From 6de6151b09e303d8cc19ea79cabd4451583018b0 Mon Sep 17 00:00:00 2001 From: Gemba Date: Sun, 23 Jun 2024 17:20:34 +0200 Subject: [PATCH 591/603] Fixes segfault after metadata edit in collections and navigating back to carousel --- es-app/src/views/gamelist/BasicGameListView.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/es-app/src/views/gamelist/BasicGameListView.cpp b/es-app/src/views/gamelist/BasicGameListView.cpp index eaecc93184..605c8bad2b 100644 --- a/es-app/src/views/gamelist/BasicGameListView.cpp +++ b/es-app/src/views/gamelist/BasicGameListView.cpp @@ -66,10 +66,14 @@ void BasicGameListView::setCursor(FileData* cursor, bool refreshListCursorPos) if (refreshListCursorPos) setViewportTop(mList.REFRESH_LIST_CURSOR_POS); - if(!mList.setCursor(cursor) && (!cursor->isPlaceHolder())) + bool notInList = !mList.setCursor(cursor); + if(!refreshListCursorPos && notInList && !cursor->isPlaceHolder()) { populateList(cursor->getParent()->getChildrenListToDisplay()); - mList.setCursor(cursor); + // this extra call is needed iff a system has games organized in folders + // and the cursor is focusing a game in a folder + if (cursor->getParent()->getType() == FOLDER) + mList.setCursor(cursor); // update our cursor stack in case our cursor just got set to some folder we weren't in before if(mCursorStack.empty() || mCursorStack.top() != cursor->getParent()) From 3c41f153747f7f4201f08f89e966c4ce3879023a Mon Sep 17 00:00:00 2001 From: Gemba Date: Mon, 20 May 2024 21:34:53 +0200 Subject: [PATCH 592/603] Fix persistence of new collections, either from theme or custom name --- es-app/src/CollectionSystemManager.cpp | 71 +++++++----- es-app/src/CollectionSystemManager.h | 24 +++- .../src/guis/GuiCollectionSystemsOptions.cpp | 108 ++++++++++-------- 3 files changed, 122 insertions(+), 81 deletions(-) diff --git a/es-app/src/CollectionSystemManager.cpp b/es-app/src/CollectionSystemManager.cpp index a040a8e4e7..440abf7fa8 100644 --- a/es-app/src/CollectionSystemManager.cpp +++ b/es-app/src/CollectionSystemManager.cpp @@ -15,6 +15,7 @@ #include "ThemeData.h" #include #include +#include /* Handling the getting, initialization, deinitialization, saving and deletion of * a CollectionSystemManager Instance */ @@ -97,29 +98,37 @@ void CollectionSystemManager::deinit() } } -void CollectionSystemManager::saveCustomCollection(SystemData* sys) +bool CollectionSystemManager::saveCustomCollection(SystemData* sys) { std::string name = sys->getName(); std::unordered_map games = sys->getRootFolder()->getChildrenByFilename(); bool found = mCustomCollectionSystemsData.find(name) != mCustomCollectionSystemsData.cend(); - if (found) { - CollectionSystemData sysData = mCustomCollectionSystemsData.at(name); - if (sysData.needsSave) - { - std::ofstream configFile; - configFile.open(getCustomCollectionConfigPath(name)); - for(std::unordered_map::const_iterator iter = games.cbegin(); iter != games.cend(); ++iter) - { - std::string path = iter->first; - configFile << path << std::endl; - } - configFile.close(); - } - } - else + if (!found) { LOG(LogError) << "Couldn't find collection to save! " << name; + return false; } + + CollectionSystemData sysData = mCustomCollectionSystemsData.at(name); + if (sysData.needsSave) + { + std::string absCollectionFn = getCustomCollectionConfigPath(name); + std::ofstream configFile; + configFile.open(absCollectionFn); + if (!configFile.good()) + { + auto const errNo = errno; + LOG(LogError) << "Failed to create file, collection not created: " << absCollectionFn << ": " << std::strerror(errNo) << " (" << errNo << ")"; + return false; + } + for(std::unordered_map::const_iterator iter = games.cbegin(); iter != games.cend(); ++iter) + { + std::string path = iter->first; + configFile << path << std::endl; + } + configFile.close(); + } + return true; } /* Methods to load all Collections into memory, and handle enabling the active ones */ @@ -128,7 +137,7 @@ void CollectionSystemManager::loadCollectionSystems(bool async) { initAutoCollectionSystems(); CollectionSystemDecl decl = mCollectionSystemDeclsIndex[CUSTOM_COLL_ID]; - mCustomCollectionsBundle = createNewCollectionEntry(decl.name, decl, false); + mCustomCollectionsBundle = createNewCollectionEntry(decl.name, decl, CollectionFlags::NONE); // we will also load custom systems here initCustomCollectionSystems(); if(Settings::getInstance()->getString("CollectionSystemsAuto") != "" || Settings::getInstance()->getString("CollectionSystemsCustom") != "") @@ -375,6 +384,7 @@ bool CollectionSystemManager::isThemeCustomCollectionCompatible(std::vector 0) { - name = name.substr(0, name.size()-4); + name = name.substr(0, name.size() - infix.size()); } return getValidNewCollectionName(name, index+1); } @@ -448,7 +458,7 @@ void CollectionSystemManager::setEditMode(std::string collectionName, bool quiet mEditingCollectionSystemData = sysData; if (!quiet) { - GuiInfoPopup* s = new GuiInfoPopup(mWindow, "Editing the '" + Utils::String::toUpper(collectionName) + "' Collection. Add/remove games with Y.", 10000); + GuiInfoPopup* s = new GuiInfoPopup(mWindow, "Editing the '" + Utils::String::toUpper(collectionName) + "' Collection. Add/remove games with Y.", 8000); mWindow->setInfoPopup(s); } } @@ -456,14 +466,14 @@ void CollectionSystemManager::setEditMode(std::string collectionName, bool quiet void CollectionSystemManager::exitEditMode(bool quiet) { if (!quiet) { - GuiInfoPopup* s = new GuiInfoPopup(mWindow, "Finished editing the '" + mEditingCollection + "' Collection.", 4000); + GuiInfoPopup* s = new GuiInfoPopup(mWindow, "Finished editing the '" + Utils::String::toUpper(mEditingCollection) + "' Collection.", 4000); mWindow->setInfoPopup(s); } if (mIsEditingCustom) { mIsEditingCustom = false; mEditingCollection = "Favorites"; - mEditingCollectionSystemData->system->onMetaDataSavePoint(); + saveCustomCollection(mEditingCollectionSystemData->system); } } @@ -656,7 +666,7 @@ void CollectionSystemManager::initAutoCollectionSystems() CollectionSystemDecl sysDecl = it->second; if (!sysDecl.isCustom) { - SystemData* newCol = createNewCollectionEntry(sysDecl.name, sysDecl); + SystemData* newCol = createNewCollectionEntry(sysDecl.name, sysDecl, CollectionFlags::HOLD_IN_MAP); if (sysDecl.type == AUTO_RANDOM) mRandomCollection = newCol; } @@ -756,17 +766,20 @@ SystemData* CollectionSystemManager::getAllGamesCollection() return allSysData->system; } -SystemData* CollectionSystemManager::addNewCustomCollection(std::string name) +SystemData* CollectionSystemManager::addNewCustomCollection(std::string name, bool needsSave) { CollectionSystemDecl decl = mCollectionSystemDeclsIndex[CUSTOM_COLL_ID]; decl.themeFolder = name; decl.name = name; decl.longName = name; - return createNewCollectionEntry(name, decl); + CollectionFlags flags = CollectionFlags::HOLD_IN_MAP; + if (needsSave) + flags = flags | CollectionFlags::NEEDS_SAVE; + return createNewCollectionEntry(name, decl, flags); } // creates a new, empty Collection system, based on the name and declaration -SystemData* CollectionSystemManager::createNewCollectionEntry(std::string name, CollectionSystemDecl sysDecl, bool index) +SystemData* CollectionSystemManager::createNewCollectionEntry(std::string name, CollectionSystemDecl sysDecl, const CollectionFlags flags) { SystemData* newSys = new SystemData(name, sysDecl.longName, mCollectionEnvData, sysDecl.themeFolder, true); @@ -775,9 +788,9 @@ SystemData* CollectionSystemManager::createNewCollectionEntry(std::string name, newCollectionData.decl = sysDecl; newCollectionData.isEnabled = false; newCollectionData.isPopulated = false; - newCollectionData.needsSave = false; + newCollectionData.needsSave = (flags & CollectionFlags::NEEDS_SAVE) == CollectionFlags::NEEDS_SAVE ? true : false; - if (index) + if ((flags & CollectionFlags::HOLD_IN_MAP) == CollectionFlags::HOLD_IN_MAP) { if (!sysDecl.isCustom) { diff --git a/es-app/src/CollectionSystemManager.h b/es-app/src/CollectionSystemManager.h index b0cede21cb..b979f9d25f 100644 --- a/es-app/src/CollectionSystemManager.h +++ b/es-app/src/CollectionSystemManager.h @@ -30,6 +30,24 @@ enum CollectionSystemType CUSTOM_COLLECTION }; +// Flags when loading or creating a collection +enum class CollectionFlags : uint8_t +{ + NONE, // create only + HOLD_IN_MAP, // create and keep in mAutoCollectionSystemsData or mCustomCollectionSystemsData + NEEDS_SAVE // force save of newly added collection +}; + +constexpr CollectionFlags operator|(CollectionFlags a,CollectionFlags b) +{ + return static_cast(static_cast(a) | static_cast(b)); +} + +constexpr CollectionFlags operator&(CollectionFlags a, CollectionFlags b) +{ + return static_cast(static_cast(a) & static_cast(b)); +} + struct CollectionSystemDecl { CollectionSystemType type; // type of system @@ -58,7 +76,7 @@ class CollectionSystemManager static CollectionSystemManager* get(); static void init(Window* window); static void deinit(); - void saveCustomCollection(SystemData* sys); + bool saveCustomCollection(SystemData* sys); void loadCollectionSystems(bool async=false); void loadEnabledListFromSettings(); @@ -74,7 +92,7 @@ class CollectionSystemManager inline SystemData* getCustomCollectionsBundle() { return mCustomCollectionsBundle; }; inline SystemData* getRandomCollection() { return mRandomCollection; }; std::vector getUnusedSystemsFromTheme(); - SystemData* addNewCustomCollection(std::string name); + SystemData* addNewCustomCollection(std::string name, bool needsSave = false); bool isThemeGenericCollectionCompatible(bool genericCustomCollections); bool isThemeCustomCollectionCompatible(std::vector stringVector); @@ -107,7 +125,7 @@ class CollectionSystemManager void initAutoCollectionSystems(); void initCustomCollectionSystems(); - SystemData* createNewCollectionEntry(std::string name, CollectionSystemDecl sysDecl, bool index = true); + SystemData* createNewCollectionEntry(std::string name, CollectionSystemDecl sysDecl, const CollectionFlags flags); void populateAutoCollection(CollectionSystemData* sysData); void populateCustomCollection(CollectionSystemData* sysData); void addRandomGames(SystemData* newSys, SystemData* sourceSystem, FileData* rootFolder, FileFilterIndex* index, diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.cpp b/es-app/src/guis/GuiCollectionSystemsOptions.cpp index cd58229ff9..1019e70780 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.cpp +++ b/es-app/src/guis/GuiCollectionSystemsOptions.cpp @@ -1,7 +1,10 @@ +#include + #include "guis/GuiCollectionSystemsOptions.h" #include "components/OptionListComponent.h" #include "components/SwitchComponent.h" +#include "guis/GuiInfoPopup.h" #include "guis/GuiRandomCollectionOptions.h" #include "guis/GuiSettings.h" #include "guis/GuiTextEditPopup.h" @@ -25,50 +28,59 @@ void GuiCollectionSystemsOptions::initializeMenu() // manage random collection addEntry("RANDOM GAME COLLECTION SETTINGS", 0x777777FF, true, [this] { openRandomCollectionSettings(); }); - // add "Create New Custom Collection from Theme" - std::vector unusedFolders = CollectionSystemManager::get()->getUnusedSystemsFromTheme(); - if (unusedFolders.size() > 0) + + ComponentListRow row; + if(CollectionSystemManager::get()->isEditing()) { - addEntry("CREATE NEW CUSTOM COLLECTION FROM THEME", 0x777777FF, true, - [this, unusedFolders] { - auto s = new GuiSettings(mWindow, "SELECT THEME FOLDER"); - std::shared_ptr< OptionListComponent > folderThemes = std::make_shared< OptionListComponent >(mWindow, "SELECT THEME FOLDER", true); + row.addElement(std::make_shared(mWindow, "FINISH EDITING '" + Utils::String::toUpper(CollectionSystemManager::get()->getEditingCollection()) + "' COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + row.makeAcceptInputHandler(std::bind(&GuiCollectionSystemsOptions::exitEditMode, this)); + mMenu.addRow(row); + } + else + { + // add "Create New Custom Collection from Theme" + std::vector unusedFolders = CollectionSystemManager::get()->getUnusedSystemsFromTheme(); + if (unusedFolders.size() > 0) + { + addEntry("CREATE NEW CUSTOM COLLECTION FROM THEME", 0x777777FF, true, + [this, unusedFolders] { + auto s = new GuiSettings(mWindow, "SELECT THEME FOLDER"); + std::shared_ptr< OptionListComponent > folderThemes = std::make_shared< OptionListComponent >(mWindow, "SELECT THEME FOLDER", true); - // add Custom Systems - for(auto it = unusedFolders.cbegin() ; it != unusedFolders.cend() ; it++ ) - { - ComponentListRow row; - std::string name = *it; + // add Custom Systems + for(auto it = unusedFolders.cbegin() ; it != unusedFolders.cend() ; it++ ) + { + ComponentListRow row; + std::string name = *it; - std::function createCollectionCall = [name, this, s] { - createCollection(name); - }; - row.makeAcceptInputHandler(createCollectionCall); + std::function createCollectionCall = [name, this, s] { + createCollection(name); + }; + row.makeAcceptInputHandler(createCollectionCall); - auto themeFolder = std::make_shared(mWindow, Utils::String::toUpper(name), Font::get(FONT_SIZE_SMALL), 0x777777FF); - row.addElement(themeFolder, true); - s->addRow(row); - } - mWindow->pushGui(s); + auto themeFolder = std::make_shared(mWindow, Utils::String::toUpper(name), Font::get(FONT_SIZE_SMALL), 0x777777FF); + row.addElement(themeFolder, true); + s->addRow(row); + } + mWindow->pushGui(s); + }); + } + + row.addElement(std::make_shared(mWindow, "CREATE NEW CUSTOM COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); + auto createCustomCollection = [this](const std::string& newVal) { + std::string name = newVal; + // we need to store the first Gui and remove it, as it'll be deleted by the actual Gui + Window* window = mWindow; + GuiComponent* topGui = window->peekGui(); + window->removeGui(topGui); + createCollection(name); + }; + row.makeAcceptInputHandler([this, createCustomCollection] { + mWindow->pushGui(new GuiTextEditPopup(mWindow, "New Collection Name", "", createCustomCollection, false)); }); + mMenu.addRow(row); } - ComponentListRow row; - row.addElement(std::make_shared(mWindow, "CREATE NEW CUSTOM COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - auto createCustomCollection = [this](const std::string& newVal) { - std::string name = newVal; - // we need to store the first Gui and remove it, as it'll be deleted by the actual Gui - Window* window = mWindow; - GuiComponent* topGui = window->peekGui(); - window->removeGui(topGui); - createCollection(name); - }; - row.makeAcceptInputHandler([this, createCustomCollection] { - mWindow->pushGui(new GuiTextEditPopup(mWindow, "New Collection Name", "", createCustomCollection, false)); - }); - - mMenu.addRow(row); - bundleCustomCollections = std::make_shared(mWindow); bundleCustomCollections->setState(Settings::getInstance()->getBool("UseCustomCollectionsSystem")); mMenu.addWithLabel("GROUP UNTHEMED CUSTOM COLLECTIONS", bundleCustomCollections); @@ -103,14 +115,6 @@ void GuiCollectionSystemsOptions::initializeMenu() mMenu.addWithLabel("ADD/REMOVE GAMES WHILE SCREENSAVER TO", defaultScreenSaverCollection); - if(CollectionSystemManager::get()->isEditing()) - { - row.elements.clear(); - row.addElement(std::make_shared(mWindow, "FINISH EDITING '" + Utils::String::toUpper(CollectionSystemManager::get()->getEditingCollection()) + "' COLLECTION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true); - row.makeAcceptInputHandler(std::bind(&GuiCollectionSystemsOptions::exitEditMode, this)); - mMenu.addRow(row); - } - mMenu.addButton("BACK", "back", std::bind(&GuiCollectionSystemsOptions::applySettings, this)); mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f); @@ -137,8 +141,15 @@ void GuiCollectionSystemsOptions::addEntry(const char* name, unsigned int color, void GuiCollectionSystemsOptions::createCollection(std::string inName) { - std::string name = CollectionSystemManager::get()->getValidNewCollectionName(inName); - SystemData* newSys = CollectionSystemManager::get()->addNewCustomCollection(name); + CollectionSystemManager* collSysMgr = CollectionSystemManager::get(); + std::string name = collSysMgr->getValidNewCollectionName(inName); + + SystemData* newSys = collSysMgr->addNewCustomCollection(name, true); + if (!collSysMgr->saveCustomCollection(newSys)) { + GuiInfoPopup* s = new GuiInfoPopup(mWindow, "Failed creating '" + Utils::String::toUpper(name) + "' Collection. See log for details.", 8000); + mWindow->setInfoPopup(s); + return; + } customOptionList->add(name, name, true); std::string outAuto = Utils::String::vectorToDelimitedString(autoOptionList->getSelectedObjects(), ","); std::string outCustom = Utils::String::vectorToDelimitedString(customOptionList->getSelectedObjects(), ","); @@ -146,10 +157,9 @@ void GuiCollectionSystemsOptions::createCollection(std::string inName) ViewController::get()->goToSystemView(newSys); Window* window = mWindow; - CollectionSystemManager::get()->setEditMode(name); + collSysMgr->setEditMode(name); while(window->peekGui() && window->peekGui() != ViewController::get()) delete window->peekGui(); - return; } void GuiCollectionSystemsOptions::openRandomCollectionSettings() From 75c01f73abfde355b9b20c56ccc1357e088b7812 Mon Sep 17 00:00:00 2001 From: opa Date: Fri, 12 Jul 2024 23:44:54 +0900 Subject: [PATCH 593/603] help text for option --fullscreen-borderless --- es-app/src/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index dd3df6a09f..437b23b196 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -180,6 +180,7 @@ bool parseArgs(int argc, char* argv[]) "--screensize WIDTH HEIGHT for a canvas smaller than the full resolution,\n" " or if rotating into portrait mode\n" "--screenoffset X Y move the canvas by x,y pixels\n" + "--fullscreen-borderless borderless fullscreen window\n" "--windowed not fullscreen, should be used with --resolution\n" "\nGame and settings visibility in ES and behaviour of ES:\n" "--force-disable-filters force the UI to ignore applied filters on\n" From 8be97a35dcad5108f9cbd351bc99edd4adf74ff4 Mon Sep 17 00:00:00 2001 From: opa Date: Fri, 26 Jul 2024 21:45:27 +0900 Subject: [PATCH 594/603] Fix Font (texture) handling --- es-core/src/resources/Font.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index c91f7e100e..5a1d35ea6e 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -76,6 +76,7 @@ Font::Font(int size, const std::string& path) : mSize(size), mPath(path) { assert(mSize > 0); + mTextures.reserve(10); mLoaded = true; mMaxGlyphHeight = 0; @@ -211,6 +212,13 @@ void Font::getTextureForNewGlyph(const Vector2i& glyphSize, FontTexture*& tex_ou return; // yes } + if(mTextures.size() >= mTextures.capacity()) + { + LOG(LogError) << "Glyph too many to create a new texture!"; + tex_out = NULL; + return; + } + // current textures are full, // make a new one mTextures.push_back(FontTexture()); @@ -684,7 +692,7 @@ TextCache* Font::buildTextCache(const std::string& text, Vector2f offset, unsign unsigned int i = 0; for(auto it = vertMap.cbegin(); it != vertMap.cend(); it++) { - TextCache::VertexList& vertList = cache->vertexLists.at(i); + TextCache::VertexList& vertList = cache->vertexLists.at(i++); vertList.textureIdPtr = &it->first->textureId; vertList.verts = it->second; From a7a9dec63797eb8c60f3d3e92b8244af3eff45a5 Mon Sep 17 00:00:00 2001 From: opa Date: Fri, 9 Aug 2024 23:23:52 +0900 Subject: [PATCH 595/603] Add option --monitor N --- es-app/src/main.cpp | 14 +++++++++- es-core/src/Settings.cpp | 44 ++++++++++++++++-------------- es-core/src/renderers/Renderer.cpp | 10 +++++-- 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 437b23b196..eb0b92cacf 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -52,7 +52,18 @@ bool parseArgs(int argc, char* argv[]) for(int i = 1; i < argc; i++) { - if(strcmp(argv[i], "--resolution") == 0) + if(strcmp(argv[i], "--monitor") == 0) + { + if (i >= argc - 1) + { + std::cerr << "Invalid monitor supplied."; + return false; + } + + int monitor = atoi(argv[i + 1]); + i++; // skip the argument value + Settings::getInstance()->setInt("MonitorID", monitor); + }else if(strcmp(argv[i], "--resolution") == 0) { if(i >= argc - 2) { @@ -182,6 +193,7 @@ bool parseArgs(int argc, char* argv[]) "--screenoffset X Y move the canvas by x,y pixels\n" "--fullscreen-borderless borderless fullscreen window\n" "--windowed not fullscreen, should be used with --resolution\n" + "--monitor N monitor index (0-)\n" "\nGame and settings visibility in ES and behaviour of ES:\n" "--force-disable-filters force the UI to ignore applied filters on\n" " gamelist (p)\n" diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 3ad96a981a..aeb1057e33 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -13,27 +13,28 @@ Settings* Settings::sInstance = NULL; // these values are NOT saved to es_settings.xml // since they're set through command-line arguments, and not the in-program settings menu std::vector settings_dont_save { - "Debug" , - "DebugGrid" , - "DebugText" , - "DebugImage" , - "ForceKid" , - "ForceKiosk" , - "IgnoreGamelist" , - "HideConsole" , - "ShowExit" , - "ConfirmQuit" , - "SplashScreen" , - "VSync" , - "FullscreenBorderless" , - "Windowed" , - "WindowWidth" , - "WindowHeight" , - "ScreenWidth" , - "ScreenHeight" , - "ScreenOffsetX" , - "ScreenOffsetY" , - "ScreenRotate" + "Debug", + "DebugGrid", + "DebugText", + "DebugImage", + "ForceKid", + "ForceKiosk", + "IgnoreGamelist", + "HideConsole", + "ShowExit", + "ConfirmQuit", + "SplashScreen", + "VSync", + "FullscreenBorderless", + "Windowed", + "WindowWidth", + "WindowHeight", + "ScreenWidth", + "ScreenHeight", + "ScreenOffsetX", + "ScreenOffsetY", + "ScreenRotate", + "MonitorID" }; Settings::Settings() @@ -178,6 +179,7 @@ void Settings::setDefaults() mIntMap["ScreenOffsetX"] = 0; mIntMap["ScreenOffsetY"] = 0; mIntMap["ScreenRotate"] = 0; + mIntMap["MonitorID"] = 0; mBoolMap["UseFullscreenPaging"] = false; diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index 9dde53361a..e12a3b6418 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -75,8 +75,14 @@ namespace Renderer initialCursorState = (SDL_ShowCursor(0) != 0); + int displayIndex = Settings::getInstance()->getInt("MonitorID"); + + if(displayIndex < 0 || displayIndex >= SDL_GetNumVideoDisplays()){ + displayIndex = 0; + } + SDL_DisplayMode dispMode; - SDL_GetDesktopDisplayMode(0, &dispMode); + SDL_GetDesktopDisplayMode(displayIndex, &dispMode); windowWidth = Settings::getInstance()->getInt("WindowWidth") ? Settings::getInstance()->getInt("WindowWidth") : dispMode.w; windowHeight = Settings::getInstance()->getInt("WindowHeight") ? Settings::getInstance()->getInt("WindowHeight") : dispMode.h; screenWidth = Settings::getInstance()->getInt("ScreenWidth") ? Settings::getInstance()->getInt("ScreenWidth") : windowWidth; @@ -89,7 +95,7 @@ namespace Renderer const unsigned int windowFlags = (Settings::getInstance()->getBool("Windowed") ? 0 : (Settings::getInstance()->getBool("FullscreenBorderless") ? SDL_WINDOW_BORDERLESS : SDL_WINDOW_FULLSCREEN)) | getWindowFlags(); - if((sdlWindow = SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, windowWidth, windowHeight, windowFlags)) == nullptr) + if((sdlWindow = SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), windowWidth, windowHeight, windowFlags)) == nullptr) { LOG(LogError) << "Error creating SDL window!\n\t" << SDL_GetError(); return false; From 894543cea6654ea2d971d30764912ed023c8e43d Mon Sep 17 00:00:00 2001 From: Francesco Palazzo Date: Mon, 25 Nov 2024 15:39:46 +0100 Subject: [PATCH 596/603] Detecting DS4 and Anbernic P01 analog triggers --- es-core/src/guis/GuiInputConfig.cpp | 36 +++++++++++++++++++---------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index 18c2601583..3945aeec9f 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -342,27 +342,39 @@ bool GuiInputConfig::filterTrigger(Input input, InputConfig* config, int inputId #if defined(__linux__) // on Linux, some gamepads return both an analog axis and a digital button for the trigger; // we want the analog axis only, so this function removes the button press event - - if(( - // match PlayStation joystick with 6 axes only - strstr(config->getDeviceName().c_str(), "PLAYSTATION") != NULL - || strstr(config->getDeviceName().c_str(), "PS3 Ga") != NULL - || strstr(config->getDeviceName().c_str(), "PS(R) Ga") != NULL - // BigBen kid's PS3 gamepad 146b:0902, matched on SDL GUID because its name "Bigben Interactive Bigben Game Pad" may be too generic - || strcmp(config->getDeviceGUIDString().c_str(), "030000006b1400000209000011010000") == 0 - ) && InputManager::getInstance()->getAxisCountByDevice(config->getDeviceId()) == 6) + bool isPlaystation = ( + // match PlayStation joystick with 6 axes only + strstr(config->getDeviceName().c_str(), "PLAYSTATION") != NULL + || strstr(config->getDeviceName().c_str(), "Sony Interactive") != NULL // Official dualshock 4 + || strstr(config->getDeviceName().c_str(), "PS3 Ga") != NULL + || strstr(config->getDeviceName().c_str(), "PS(R) Ga") != NULL + // BigBen kid's PS3 gamepad 146b:0902, matched on SDL GUID because its name "Bigben Interactive Bigben Game Pad" may be too generic + || strcmp(config->getDeviceGUIDString().c_str(), "030000006b1400000209000011010000") == 0 + ); + bool isAnbernic = ( + strcmp(config->getDeviceGUIDString().c_str(), "03004ab1020500000913000010010000") == 0 // Anbernic RG P01 has same issue + ); + + if((isPlaystation || isAnbernic) + && InputManager::getInstance()->getAxisCountByDevice(config->getDeviceId()) == 6) { // digital triggers are unwanted - if(input.type == TYPE_BUTTON && (input.id == 6 || input.id == 7)) + if(( + (isPlaystation && (input.id == 6 || input.id == 7)) + || (isAnbernic && (input.id == 8 || input.id == 9)) + ) && input.type == TYPE_BUTTON) { mHoldingInput = false; return true; } } - // ignore negative pole for axes 2/5 only when triggers are being configured - if(input.type == TYPE_AXIS && (input.id == 2 || input.id == 5)) + bool genericTrigger = !isAnbernic && (input.id == 2 || input.id == 5); + bool anbernicTrigger = isAnbernic && (input.id == 4 || input.id == 5); + // ignore negative pole for axes only when triggers are being configured + if(input.type == TYPE_AXIS && (genericTrigger || anbernicTrigger)) { + if(strstr(GUI_INPUT_CONFIG_LIST[inputId].name, "Trigger") != NULL) { if(input.value == 1) From 803bad626ec729eb4aad13388e8c3b506c5114db Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Wed, 11 Dec 2024 05:16:57 +0000 Subject: [PATCH 597/603] scraper: added FM Towns (Marty) --- es-app/src/PlatformId.cpp | 1 + es-app/src/PlatformId.h | 1 + es-app/src/scrapers/GamesDBJSONScraper.cpp | 1 + es-app/src/scrapers/ScreenScraper.cpp | 3 ++- 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 8a616d80e2..a47493cdbe 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -92,6 +92,7 @@ namespace PlatformIds "ti99", "dragon32", "zmachine", + "fmtowns", "ignore", // do not allow scraping for this system "invalid" diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index 840e9223a8..4d58c91ae6 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -93,6 +93,7 @@ namespace PlatformIds TI_99, DRAGON32, ZMACHINE, + FMTOWNS, PLATFORM_IGNORE, // do not allow scraping for this system PLATFORM_COUNT diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index d92841c508..456b5b60a6 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -109,6 +109,7 @@ const std::map gamesdb_new_platformid_map{ { TRS80_COLOR_COMPUTER, "4941" }, { TI_99, "4953" }, { TANDY, "4941" }, + { FMTOWNS, "4932" }, }; void thegamesdb_generate_json_scraper_requests(const ScraperSearchParams& params, diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index 32b7138a02..da6fd1e0f4 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -100,7 +100,8 @@ const std::map screenscraper_platformid_map{ { TANDY, 144 }, { TI_99, 205 }, { DRAGON32, 91 }, - { ZMACHINE, 21 } + { ZMACHINE, 21 }, + { FMTOWNS, 253 } }; From 17c96ed83dcd786d0588b75171c4c711b180afe8 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Mon, 24 Feb 2025 18:03:05 +0000 Subject: [PATCH 598/603] resources: update MAME files Updated resources to 11.03.2025, using dat files from: * FinalBurn Neo * Mame2003 Plus * MAME 0.275 --- resources/mamebioses.xml | 3 +- resources/mamedevices.xml | 105 +- resources/mamenames.xml | 6816 +++++++++++++++++++++++++++---------- 3 files changed, 5077 insertions(+), 1847 deletions(-) diff --git a/resources/mamebioses.xml b/resources/mamebioses.xml index 9a0983ca2b..2369798f76 100644 --- a/resources/mamebioses.xml +++ b/resources/mamebioses.xml @@ -1,4 +1,4 @@ - + 3dobios acpsx airlbios @@ -24,6 +24,7 @@ coh1001l coh1002e coh1002m +coh1002t coh1002v coh3002c coh3002t diff --git a/resources/mamedevices.xml b/resources/mamedevices.xml index 5d39ae8ac9..825cf8f221 100644 --- a/resources/mamedevices.xml +++ b/resources/mamedevices.xml @@ -1,4 +1,4 @@ - + 22vp931 3c505 3xtwin @@ -143,9 +143,17 @@ aha1740 aha1742a aha2940au -alice_mcx128 alto2_cpu altos2_kbd +amiga_a2091 +amiga_a570 +amiga_a590 +amiga_ar1 +amiga_ar2 +amiga_ar3 +amiga_buddha +amiga_oktagon2008 +amiga_ripple ampex230_kbd ap2000 aplcd150 @@ -182,6 +190,7 @@ arc_midimax2 arc_nexus_a500 arc_rom_aka05 +arc_rom_r225 arc_rs423 arc_scan256 arc_scanjunior @@ -268,10 +277,12 @@ bbc_tube_80186 bbc_tube_80286 bbc_tube_a500 +bbc_tube_a500d bbc_tube_arm bbc_tube_arm7 bbc_tube_casper bbc_tube_cms6809 +bbc_tube_matchbox bbc_tube_pcplus bbc_tube_rc6502 bbc_tube_rc65816 @@ -289,6 +300,7 @@ bbc_weddb3 betadisk bingoct +bk_kmd bluechip bml3kanji bml3mp1802 @@ -370,6 +382,7 @@ cit101e_kbd cit220p_kbd clgd542x +clgd5446_pci clgd5465_laguna cmdhd cmdrc2 @@ -396,6 +409,7 @@ comx_pl80 comx_prn comx_thm +concept_kbd cp2024 cp31 cp450_fdc @@ -439,9 +453,10 @@ dio98550 dio98603a dio98603b +dio98628 +dio98629 diskii13 dm_clgd5430 -dms3d2kp dmv_k220 dmv_k230 dmv_k231 @@ -486,14 +501,17 @@ ep64_exdos epson_pf10 epson_qx_option_multifont +epson_rx80 epson_tf20 ergoline_kbd et4000 et4000_kasan16 +et4kw32i europc_kbd ev346 ex1280 ex800 +executive10_102_kbd exorterm155_device f4431_kbd fc_disksys @@ -513,6 +531,7 @@ gfxultrap gic gunsense +h89bus hardbox hcpu30 hd44780 @@ -521,6 +540,10 @@ hd63484 he191_3425 heath_gp19_tlb +heath_igc_super19_tlb_device +heath_igc_tlb_device +heath_igc_ultra_tlb_device +heath_igc_watz_tlb_device heath_imaginator_tlb heath_super19_tlb heath_superset_tlb @@ -532,6 +555,7 @@ hp82937 hp82939 hp9122c +hp9133 hp98034 hp98035 hp98046 @@ -543,6 +567,7 @@ i8245 ibm_mfc ibm_vga +idpart_video ie15_device ie15kbd imds2ioc @@ -566,6 +591,7 @@ isa_ibm_pgc isa_ibm_speech isa_pcmidi +isa_prose4001 isbc202 isbc8024 isbc_215g @@ -620,6 +646,7 @@ m68705p5 m68705r3 m68705u3 +m68hc05pge m68hc705c4a m68hc705c8a mach64isa @@ -629,13 +656,14 @@ mackbd_m0110a_j mackbd_m0110b mackbd_m0110f +mackbd_m0110j mackbd_m0110t mackbd_m0120 mackbd_m0120p mb90082 mbc55x_kbd -mc10_mcx128 mc1502_rom +mcx128 md_kbd md_rom_svp mg1_kbd_device @@ -647,6 +675,7 @@ mie mindset_sound_module minichif +mks3 mm1kb mm5740 mockingboardd @@ -661,6 +690,15 @@ mpcba79 mpcbb68 mpcbb92 +mpf1_epb +mpf1_epb_ibp +mpf1_iom_ip +mpf1_prt +mpf1_prt_ip +mpf1_sgb +mpf1_ssb +mpf1_tva_ip +mpf1_vid mps1200 mps1250 mpu401 @@ -678,10 +716,12 @@ msx_cart_sfg01 msx_cart_sfg05 msx_cart_skw01 +msx_cart_sunrise_ataide msx_moonsound mtx_cfx mtx_sdxbas mtx_sdxcpm +mu5lcd mulcd mvme120 mvme121 @@ -692,6 +732,7 @@ mvme181 mvme187 mvme327a +mvme328 mvme350 mzr8105 nabupc_keyboard @@ -704,11 +745,27 @@ namco58 namco59 namco62 +namco_amc +namco_asca1 +namco_asca3 +namco_asca3a +namco_asca5 +namco_csz1 +namco_cyberlead +namco_cyberlead_led +namco_cyberleada +namco_emio102 +namco_fca10 +namco_fca11 +namco_fcb +namco_tssio +namco_xmiu1 namcoc65 namcoc67 namcoc68 namcoc69 namcoc70 +namcoc71 namcoc74 namcoc75 namcoc76 @@ -731,6 +788,8 @@ nb_thungx nb_vikbw nb_wspt +ncr53c825_pci +neon250 nes_rob newbrain_eim newbrain_fdc @@ -738,6 +797,7 @@ nmk004 novell_dcb np600a3 +nss_tvinterface omniwave omti8621isa oric_jasmin @@ -746,11 +806,13 @@ osa_maestro osa_maestroa osa_sparc +oti64111_pci p1_fdc p1_hdc p1_rom p72 pa7246 +partner_gdp pc1512kb pc1640_iga pc80s31 @@ -771,6 +833,7 @@ pd3_lviw pd3_mclr pd3_pc16 +pdc20262 pds30_emac pds_hyper pds_sefp @@ -778,6 +841,8 @@ pet_softbox pet_superpet pg200 +plg100_vl +plg150_ap plus4_sid polyvti pr8210 @@ -790,11 +855,13 @@ ps2_keybc psion_3fax psion_3link_ser +psion_parallel psx_cd psxgboost pvga1a pvga1a_jk px320a +qg640 ql_cumanafdi ql_gold ql_kdi @@ -833,7 +900,9 @@ rivatnt2 rivatnt2_m64 rivatnt2_ultra +rm_mq2 robotron_k7070 +robotron_k7071 rolm_pdc rolm_smioc rtpc_kbd @@ -846,8 +915,6 @@ s100_sj2db s1410 s3_764 -s3virge -s3virgedx s97269pb s_smp sa1403d @@ -869,6 +936,7 @@ sbus_hme sbus_sunpc sc119 +scorpion_ic sdtandy_fdc sed1200da sed1200db @@ -884,11 +952,13 @@ sente6vb serad sfd1001 +sgi_gm1 sgi_ip4 sgi_kbd side116 simutrek sis630_gui +sis6326_agp sis900_eth smoc501 sms_diypaddle @@ -947,10 +1017,12 @@ spectrum_swiftdisc2 spectrum_usource spectrum_uspeech +spectrum_vtx5000 spectrum_wafa st_kbd stereo_fx stic +sun1cpu sv603 sv806 sw1000xg @@ -981,8 +1053,11 @@ tandberg_tdv2100_disp_logic tandberg_tdv2100_keyboard tandy2kb +tdl12 technica tek410x_kbd +tek_msu_fdc +teletex800 tetriskr_cga tgui9680 ti99_bwg @@ -1001,11 +1076,16 @@ ti99_whtscsi ti_hx5102 tiki100_8088 +tim011_kbd tk02 tms32030 tms32031 tms32032 tms32033 +to8_kbd +to9_kbd +to9p_kbd +tp880v tp881v trs80m2kb turbogx @@ -1018,11 +1098,14 @@ ultra12f32 ultra14f ultra24f +umc6650 upd7220 +upd7220a uts_400kbd uts_extw v102_kbd v1050kb +v50_kbd v550_kbd vanta vector4_kbd @@ -1034,6 +1117,9 @@ victor9k_kb virge_pci virgedx_pci +vision864 +vision964 +vision968 voicebox votrsc01 votrsc01a @@ -1058,6 +1144,7 @@ wd90c31a_zs wd90c33_zz wd90c90_jk +wd9710_pci wdxt_gen wg130 wyse700 @@ -1073,10 +1160,4 @@ z8682 zip100_ide zorba_kbd -zorro_a2091 -zorro_a590 -zorro_ar1 -zorro_ar2 -zorro_ar3 -zorro_buddha zxbus_neogs diff --git a/resources/mamenames.xml b/resources/mamenames.xml index 91a87a579a..2e99566d3d 100644 --- a/resources/mamenames.xml +++ b/resources/mamenames.xml @@ -1,4 +1,4 @@ - + 005 005 @@ -99,6 +99,10 @@ 1942h Supercharger 1942 + + 1942iti + 1942 (Itisa bootleg) + 1942p 1942 (Tecfri PCB, bootleg?) @@ -117,7 +121,7 @@ 1943b2 - 1943: Battle of Midway (bootleg set 2, hack of Japan set) + 1943: Battle of Midway (bootleg, hack of Japan set, set 2) 1943bj @@ -157,11 +161,11 @@ 1944 - 1944: The Loop Master (Euro 000620) + 1944: The Loop Master (Europe 000620) 1944ad - 1944 - the loop master (000620 USA Phoenix Edition, alt) + 1944: The Loop Master (USA 000620 alt Phoenix Edition) (bootleg) 1944d @@ -187,13 +191,17 @@ 1945kiiio 1945k III (older, OPCX1 PCB) + + 1945kiiipt + 1945k III (Promat license, OPCX1 PCB) + 19in1 19 in 1 MAME bootleg (BAR-V000) 19xx - 19XX: The War Against Destiny (Euro 960104) + 19XX: The War Against Destiny (Europe 960104) 19xxa @@ -251,6 +259,10 @@ 2020bba 2020 Super Baseball (set 2) + + 2020bbcd + 2020 Super Baseball (Neo CD conversion) + 2020bbh 2020 Super Baseball (set 3) @@ -315,6 +327,10 @@ 2mindril Two Minute Drill (Ver 2.93A 1994/02/16) + + 2mindrila + Two Minute Drill (Ver 2.2A 1993/10/18) + 2spicy 2 Spicy @@ -328,12 +344,16 @@ 39 in 1 MAME bootleg (GNO-V000) - 3bagflnz + 3bagfull + 3 Bags Full (5VXFC790, Victoria) + + + 3bagfullnz 3 Bags Full (3VXFC5345, New Zealand) - 3bagflvt - 3 Bags Full (5VXFC790, Victoria) + 3bagfullu + 3 Bags Full (4XF5196I02, US) 3cdpoker @@ -395,13 +415,17 @@ 3wondersb Three Wonders (bootleg) + + 3wondersbi + Three Wonders (Italian bootleg) + 3wondersh Three Wonders (hack) 3wondersha - Three Wonders (bootleg set 2) + Three Wonders (hack, set 2) 3wondersr1 @@ -589,15 +613,15 @@ 64street - 64th. Street - A Detective Story (World) + 64th. Street: A Detective Story (World) 64streetj - 64th. Street - A Detective Story (Japan, set 1) + 64th. Street: A Detective Story (Japan, set 1) 64streetja - 64th. Street - A Detective Story (Japan, set 2) + 64th. Street: A Detective Story (Japan, set 2) 720 @@ -623,6 +647,10 @@ 720r3 720 Degrees (rev 3) + + 7gold + 7 Gold + 7jigen 7jigen no Youseitachi - Mahjong 7 Dimensions (Japan) @@ -891,6 +919,10 @@ abv106r Airborne (Redemption) + + abyssali + Abyssal Infants (HB) + ac1bbclb Big Break Club (Ace) (ACESYS1) (set 1) @@ -1149,7 +1181,7 @@ acommand - Alien Command + Alien Command (v2.1) acrobatm @@ -1477,159 +1509,159 @@ ad5dnd - Deal Or No Deal (Bellfruit) (Adder 5) (set 1) + Deal or No Deal (Bellfruit) (Adder 5) (set 1) ad5dnda - Deal Or No Deal (Bellfruit) (Adder 5) (set 2) + Deal or No Deal (Bellfruit) (Adder 5) (set 2) ad5dndb - Deal Or No Deal (Bellfruit) (Adder 5) (set 3) + Deal or No Deal (Bellfruit) (Adder 5) (set 3) ad5dndc - Deal Or No Deal (Bellfruit) (Adder 5) (set 4) + Deal or No Deal (Bellfruit) (Adder 5) (set 4) ad5dndcl - Deal Or No Deal Club (Bellfruit) (Adder 5) (set 1) + Deal or No Deal Club (Bellfruit) (Adder 5) (set 1) ad5dndcla - Deal Or No Deal Club (Bellfruit) (Adder 5) (set 2) + Deal or No Deal Club (Bellfruit) (Adder 5) (set 2) ad5dndclb - Deal Or No Deal Club (Bellfruit) (Adder 5) (set 3) + Deal or No Deal Club (Bellfruit) (Adder 5) (set 3) ad5dndclc - Deal Or No Deal Club (Bellfruit) (Adder 5) (set 4) + Deal or No Deal Club (Bellfruit) (Adder 5) (set 4) ad5dndcld - Deal Or No Deal Club (Bellfruit) (Adder 5) (set 5) + Deal or No Deal Club (Bellfruit) (Adder 5) (set 5) ad5dndcle - Deal Or No Deal Club (Bellfruit) (Adder 5) (set 6) + Deal or No Deal Club (Bellfruit) (Adder 5) (set 6) ad5dndclf - Deal Or No Deal Club (Bellfruit) (Adder 5) (set 20) + Deal or No Deal Club (Bellfruit) (Adder 5) (set 20) ad5dndclg - Deal Or No Deal Club (Bellfruit) (Adder 5) (set 21) + Deal or No Deal Club (Bellfruit) (Adder 5) (set 21) ad5dndd - Deal Or No Deal (Bellfruit) (Adder 5) (set 5) + Deal or No Deal (Bellfruit) (Adder 5) (set 5) ad5dnddd - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Adder 5) (set 1) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Adder 5) (set 1) ad5dnddda - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Adder 5) (set 2) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Adder 5) (set 2) ad5dnde - Deal Or No Deal (Bellfruit) (Adder 5) (set 6) + Deal or No Deal (Bellfruit) (Adder 5) (set 6) ad5dndf - Deal Or No Deal (Bellfruit) (Adder 5) (set 7) + Deal or No Deal (Bellfruit) (Adder 5) (set 7) ad5dndg - Deal Or No Deal (Bellfruit) (Adder 5) (set 8) + Deal or No Deal (Bellfruit) (Adder 5) (set 8) ad5dndh - Deal Or No Deal (Bellfruit) (Adder 5) (set 9) + Deal or No Deal (Bellfruit) (Adder 5) (set 9) ad5dndi - Deal Or No Deal (Bellfruit) (Adder 5) (set 10) + Deal or No Deal (Bellfruit) (Adder 5) (set 10) ad5dndj - Deal Or No Deal (Bellfruit) (Adder 5) (set 11) + Deal or No Deal (Bellfruit) (Adder 5) (set 11) ad5dndk - Deal Or No Deal (Bellfruit) (Adder 5) (set 12) + Deal or No Deal (Bellfruit) (Adder 5) (set 12) ad5dndl - Deal Or No Deal (Bellfruit) (Adder 5) (set 13) + Deal or No Deal (Bellfruit) (Adder 5) (set 13) ad5dndm - Deal Or No Deal (Bellfruit) (Adder 5) (set 14) + Deal or No Deal (Bellfruit) (Adder 5) (set 14) ad5dndn - Deal Or No Deal (Bellfruit) (Adder 5) (set 15) + Deal or No Deal (Bellfruit) (Adder 5) (set 15) ad5dndo - Deal Or No Deal (Bellfruit) (Adder 5) (set 16) + Deal or No Deal (Bellfruit) (Adder 5) (set 16) ad5dndp - Deal Or No Deal (Bellfruit) (Adder 5) (set 17) + Deal or No Deal (Bellfruit) (Adder 5) (set 17) ad5dndpg - Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 1) + Deal or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 1) ad5dndpga - Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 2) + Deal or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 2) ad5dndpgb - Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 3) + Deal or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 3) ad5dndpgc - Deal Or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 4) + Deal or No Deal The Perfect Game (Bellfruit) (Adder 5) (set 4) ad5dndpl - Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 1) + Deal or No Deal Platinum (Bellfruit) (Adder 5) (set 1) ad5dndpla - Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 2) + Deal or No Deal Platinum (Bellfruit) (Adder 5) (set 2) ad5dndplb - Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 3) + Deal or No Deal Platinum (Bellfruit) (Adder 5) (set 3) ad5dndplc - Deal Or No Deal Platinum (Bellfruit) (Adder 5) (set 4) + Deal or No Deal Platinum (Bellfruit) (Adder 5) (set 4) ad5dndq - Deal Or No Deal (Bellfruit) (Adder 5) (set 18) + Deal or No Deal (Bellfruit) (Adder 5) (set 18) ad5dndr - Deal Or No Deal (Bellfruit) (Adder 5) (set 19) + Deal or No Deal (Bellfruit) (Adder 5) (set 19) ad5dndu - Deal Or No Deal (Bellfruit) (Adder 5) (set 22) + Deal or No Deal (Bellfruit) (Adder 5) (set 22) ad5dndv - Deal Or No Deal (Bellfruit) (Adder 5) (set 23) + Deal or No Deal (Bellfruit) (Adder 5) (set 23) ad5etdls @@ -2319,10 +2351,18 @@ aerofgts Aero Fighters Special (USA) + + aerofgtsg + Aero Fighters Special (VER 1.00G) + aerofgtst Aero Fighters Special (Taiwan) + + aerolitol + Aerolitos Espaciales (Spanish bootleg of Asteroids) + aerolitos Aerolitos (Spanish bootleg of Asteroids) @@ -2619,6 +2659,10 @@ akamaru Panel & Variety Akamaru Q Joushou Dont-R + + akamj + Aka Mahjong (Double Bet, ver 1 16) + akatana Akai Katana (2010/ 8/13 MASTER VER.) @@ -2653,7 +2697,11 @@ aladmdb - Aladdin (bootleg of Japanese Mega Drive version) + Aladdin (bootleg of Mega Drive version) + + + alantin + Alantin - Aladdin's Magic Lamp albatross @@ -3087,6 +3135,10 @@ amazon Soldier Girl Amazon + + amazoneo + Soldier Girl Amazon Neo (HB) + amazonh Amazon Hunt @@ -3127,6 +3179,10 @@ amazont Soldier Girl Amazon (Tecfri license) + + amaztsk + Amazonia (Ming-Yang Electronic / TSK) + ambush Ambush @@ -3153,15 +3209,15 @@ amerdart - AmeriDarts (set 1) + Ameri Darts (set 1) amerdart2 - AmeriDarts (set 2) + Ameri Darts (set 2) amerdart3 - AmeriDarts (set 3) + Ameri Darts (set 3) america @@ -3185,7 +3241,7 @@ amhbattl - Acchi Muite Hoi Battle + Acchi Muite Hoi Battle (Japan, ver 1.04) amidar @@ -3415,6 +3471,10 @@ animalc Animal Catch + + animalhjb + Animal House (bootleg of Jingle Bell) + animalhs Animal House (V1.0, set 1) @@ -3427,6 +3487,10 @@ animalhsb Animal House (set 3) + + animalhsc + Animal House (set 4) + animaljr Exciting Animal Land Jr. (USA, Canada, Mexico) @@ -3479,6 +3543,10 @@ anmlbskta Animal Basket / Hustle Tamaire Kyousou (19 Jan 2005) + + anoworld + Another World (Japan, V1.8) + anpanman Soreike! Anpanman Popcorn Koujou (Rev B) @@ -3497,11 +3565,11 @@ antar - Antar (set 1) + Antar (Playmatic, set 1) antar2 - Antar (set 2) + Antar (Playmatic, set 2) antcleo @@ -3529,7 +3597,7 @@ antiairc - Anti-Aircraft [TTL] + Anti-Aircraft aodk @@ -3551,6 +3619,10 @@ aof2bh Art of Fighting 2 / Ryuuko no Ken 2 (Enable hidden characters V2) + + aof2bhs + Art of Fighting 2 / Ryuuko no Ken 2 (Boss With Simple Attack Edition, Hack) + aof3 Art of Fighting 3 - The Path of the Warrior / Art of Fighting - Ryuuko no Ken Gaiden @@ -3563,6 +3635,10 @@ aof3k Art of Fighting 3 - The Path of the Warrior (Korean release) + + aofbr + Art of Fighting / Ryuuko no Ken (Portuguese edition v1.0, Hack) + aoh Age Of Heroes - Silkroad 2 (v0.63 - 2001/02/07) @@ -3913,6 +3989,10 @@ arcwins + Arctic Wins (4XF5227H04, US) + + + arcwinsa Arctic Wins (4XF5227H03, US) @@ -4213,11 +4293,11 @@ armwar - Armored Warriors (Euro 941024) + Armored Warriors (Europe 941024) armwar1d - Armored Warriors (Euro 941011 Phoenix Edition) (bootleg) + Armored Warriors (Europe 941011 Phoenix Edition) (bootleg) armwara @@ -4233,7 +4313,7 @@ armwarr1 - Armored Warriors (Euro 941011) + Armored Warriors (Europe 941011) armwaru @@ -4247,6 +4327,10 @@ armwrest Arm Wrestling + + arthurkn + Arthur's Knights + arwincm Arctic Wins - Mr. Cashman (0151065, US) @@ -4985,7 +5069,7 @@ asoccer - American Soccer + American Soccer (Japan) assault @@ -5083,6 +5167,10 @@ astinvad Astro Invader + + astinvadb + Astro Invader (bootleg) + astoneag Stone Age (Astro, Ver. EN.03.A, 2005/02/21) @@ -5159,6 +5247,10 @@ astrob2b Astro Blaster (version 2b) + + astrobf + Astro Blaster (French) + astrobg Astro Blaster (German) @@ -5229,7 +5321,7 @@ asukaj - Asuka & Asuka (Japan, version 1) + Asuka & Asuka (Japan, rev 1) asukaja @@ -5311,6 +5403,10 @@ atetb3482 Tetris (bootleg set 6, with UM3482) + + atetb5205 + Tetris (bootleg set 7, with OKI M5205) + atetckt2 Tetris (Cocktail set 2) @@ -5443,9 +5539,17 @@ atrbonpk Bonus Poker (Atronic) + + atrbtlma + Beetlemania (Atronic) + atricmon - I C Money (Atronic) + I C Money (Atronic) (set 1) + + + atricmona + I C Money (Atronic) (set 2) atronic @@ -5455,6 +5559,10 @@ atronica Atronic SetUp/Clear Chips (Russia, set 2) + + atronicb + Atronic SetUp/Clear Chips + atrwild Wild Thing (Atronic) @@ -5477,11 +5585,11 @@ attckexd - Attack (set 1) [TTL] + Attack (set 1) attckexd2 - Attack (set 2) [TTL] + Attack (set 2) attckufo @@ -5511,6 +5619,10 @@ atworlde1 Around The World (Version 1.3E CGA) + + au + Au (location test) + aurail Aurail (set 3, US) (unprotected) @@ -5575,6 +5687,10 @@ automat Automat (bootleg of Robocop) + + automatm + Automat (bootleg of Robocop, Modular System) + autopapa El auto feo @@ -5681,7 +5797,7 @@ avenger - Avenger [TTL] + Avenger avenger2 @@ -5689,19 +5805,19 @@ avengers - Avengers (US, revision C) + Avengers (US, rev. D) avengersa - Avengers (US, revision A) + Avengers (US, rev. C) avengersb - Avengers (US) + Avengers (US, rev. A) avengersc - Avengers (US, unknown revision) + Avengers (US) avengrgs @@ -5715,9 +5831,13 @@ avengrgsj Avengers In Galactic Storm (Japan 1.2) + + avmjts + AV-Mahjong Two Shot (Japan Ver 1.00 1990/05/21) + avsp - Alien vs. Predator (Euro 940520) + Alien vs. Predator (Europe 940520) avspa @@ -5725,7 +5845,7 @@ avspd - Alien vs. Predator (Euro 940520 Phoenix Edition) (bootleg) + Alien vs. Predator (Europe 940520 Phoenix Edition) (bootleg) avsph @@ -5929,7 +6049,11 @@ baboshka - Baboshka (Russia) (Atronic) + Babooshka (Atronic) + + + baboshkar + Babooshka (Russia) (Atronic) babydad @@ -5977,7 +6101,7 @@ badapple - Bad Apple (Tech-Demo) + Bad Apple (HB, Tech-Demo) baddog @@ -6035,6 +6159,10 @@ bagmanm2 Bagman (bootleg on Moon Cresta hardware, set 2) + + bagmanm3 + Bagman (bootleg on Moon Cresta hardware, set 3) + bagmanmc Bagman (bootleg on Moon Cresta hardware, set 1) @@ -6071,6 +6199,10 @@ bagnardio Le Bagnard (Itisa, Spain, older) + + baile + Baile 2005 (V3.2 2005-01-12) + bakatono Bakatonosama Mahjong Manyuuki (MOM-002 ~ MOH-002) @@ -6129,11 +6261,15 @@ bam2 - Bust a Move 2 - Dance Tengoku Mix (Japanese ROM ver. 1999/07/17 10:00:00) + Bust a Move 2 - Dance Tengoku Mix (HDD Japanese ROM ver. 1999/07/17 10:00:00) + + + bam2a + Bust a Move 2 - Dance Tengoku Mix (CDROM Japanese ROM ver. 1999/07/17 10:00:00) bananadr - Mahjong Banana Dream [BET] (Japan 891124) + Mahjong Banana Dream (Japan 891124) bananas @@ -6195,6 +6331,10 @@ bankrobb Bank Robbery (Ver. 1.23) + + baoqingt + Bao Qing Tian + baracuda Barracuda @@ -6221,7 +6361,7 @@ barek2ch - Bare Knuckle II (Chinese bootleg of Mega Drive version) + Bare Knuckle II (scrambled bootleg of Mega Drive version) barek2mb @@ -6229,15 +6369,15 @@ barek3mb - Bare Knuckle III (bootleg of Mega Drive version) + Bare Knuckle III (scrambled bootleg of Mega Drive version) barek3mba - Bare Knuckle III (bootleg of Mega Drive version, protected) + Bare Knuckle III (bootleg of Mega Drive version) barekch - Bare Knuckle (Chinese bootleg of Mega Drive version) + Bare Knuckle (scrambled bootleg of Mega Drive version) barline @@ -6297,7 +6437,7 @@ batcir - Battle Circuit (Euro 970319) + Battle Circuit (Europe 970319) batcira @@ -6305,7 +6445,7 @@ batcird - Battle Circuit (Euro 970319 Phoenix Edition) (bootleg) + Battle Circuit (Europe 970319 Phoenix Edition) (bootleg) batcirj @@ -6351,6 +6491,10 @@ batlgr2a Battle Gear 2 (v2.01J) + + batlgr3 + Battle Gear 3 (Ver.2.01A) + batlzone Battle Zone (bootleg of Mayday) @@ -6513,15 +6657,15 @@ battlnts - Battlantis (program code G) + Battlantis (version G) battlntsa - Battlantis (program code F) + Battlantis (version F) battlntsj - Battlantis (Japan, program code E) + Battlantis (Japan, version E) battroad @@ -6601,11 +6745,11 @@ bazooka - Bazooka [TTL] + Bazooka bazookabr - Bazooka (Brazil) [TTL] + Bazooka (Brazil) bb_21up @@ -6693,7 +6837,7 @@ bballrmt - Baseball (Ramtek) [TTL] + Baseball (Ramtek) bballs @@ -7077,7 +7221,7 @@ bejpoker - Bonanza Enterprises' Joker Poker + Bonanza's Joker Poker bel @@ -7229,19 +7373,23 @@ bg_barmy - Barmy Army (BGT) + Barmy Army + + + bg_dbells + Dancing Bells bg_ddb - Ding Dong Bells (BGT) + Ding Dong Bells (B Gaming Technology) bg_max - Max A Million (BGT) (set 1) + Max A Million (set 1) bg_maxa - Max A Million (BGT) (set 2) + Max A Million (set 2) bgaregga @@ -7337,7 +7485,11 @@ big10 - Big 10 + Big 10 (1985, Success) + + + big10a + Big 10 (1986, System Make) bigappg @@ -7643,6 +7795,10 @@ bingownga Bingo (set 2) + + bingplnt + Bingo Planet (Rev C) (M1 Satellite board) + bingpty Bingo Party Multicart (Rev B) (M1 Satellite board) @@ -7701,11 +7857,11 @@ biplane - Biplane [TTL] + Biplane biplane4 - Biplane 4 [TTL] + Biplane 4 birdiy @@ -7731,6 +7887,10 @@ bishjan Bishou Jan (Japan, Ver. 203) + + bj92 + Black Jack (Irem, satellite unit, rev. T) + bjourney Blue's Journey / Raguy (ALM-001 ~ ALH-001) @@ -7793,7 +7953,7 @@ bk3ssrmb - Bare Knuckle III / Sunset Riders (bootleg of Mega Drive versions) + Bare Knuckle III / Sunset Riders (scrambled bootleg of Mega Drive versions) bk_f4 @@ -7859,6 +8019,10 @@ blackbdb Black Beard (Russia, set 3) + + blackbdu + Black Beard (US.00, 2005/03/14) + blackblt Black Belt @@ -7879,6 +8043,10 @@ blackpnt Black Panther (0200818V, Victoria) + + blackpntu + Black Panther (FHG0949-01, US) + blackt96 Black Touch '96 @@ -7985,7 +8153,7 @@ blckjack - Black Jack + Black Jack (InterFlip) blckout2 @@ -8523,6 +8691,10 @@ bm7thmix beatmania 7th MIX (ver JA-B) + + bmanroul + Bomberman Misobon Roulette (961028 JPN) + bmaster Blade Master (World) @@ -8593,7 +8765,15 @@ bmf_it - Batman Forever (Italian) + Batman Forever (Italian, 4.0, Nov. 1 1995, Display Rev. 4.01) + + + bmf_ita + Batman Forever (Italian, 4.0, Sept. 26 1995, Display Rev. 4.00) + + + bmf_itb + Batman Forever (Italian, 4.0, Sept. 26 1995, Display Rev. 4.00, earlier sound ROM) bmf_jp @@ -8601,7 +8781,11 @@ bmf_nl - Batman Forever (Dutch) + Batman Forever (Dutch, 4.0) + + + bmf_nl302 + Batman Forever (Dutch, 3.02) bmf_no @@ -8729,7 +8913,7 @@ bnstars - Vs. Janshi Brandnew Stars (Ver 1.1, MegaSystem32 Version) + Vs. Janshi Brandnew Stars (Ver 1.1, MegaSystem 32 Version) bnstars1 @@ -8813,7 +8997,7 @@ bombaway - Bombs Away [TTL] + Bombs Away bombbee @@ -8829,11 +9013,11 @@ bombjack - Bomb Jack (set 1) + Bomb Jack bombjack2 - Bomb Jack (set 2) + Bomb Jack (earlier) bombjackbl @@ -8887,6 +9071,10 @@ bongo Bongo + + bongog + Bongo (Galaxian hardware) + bonkadv B.C. Kid / Bonk's Adventure / Kyukyoku!! PC Genjin @@ -8897,7 +9085,11 @@ bonusch - Bonus Chance (W-8) + Bonus Chance (W-8, set 1) + + + bonuscha + Bonus Chance (W-8, set 2) bonuscrd @@ -8911,17 +9103,21 @@ bonuspkr Bonus Poker + + bonusstage + Bonus Stage (HB) + bonzeadu Bonze Adventure (US) bonzeadv - Bonze Adventure (World, newer) + Bonze Adventure (World, rev 1) bonzeadvo - Bonze Adventure (World, older) + Bonze Adventure (World) bonzeadvp @@ -8933,15 +9129,23 @@ bonzeadvu - Bonze Adventure (US) + Bonze Adventure (US, rev 1) + + + boo1000 + Boo 1000 boobhack Booby Kids (Italian manufactured graphic hack / bootleg of Kid no Hore Hore Daisakusen (bootleg)) + + boobood + Boo Boo Donpatchi (Japan, ver 1.01) + boogwing - Boogie Wings (Euro v1.5, 92.12.07) + Boogie Wings (Europe v1.5, 92.12.07) boogwinga @@ -8989,15 +9193,23 @@ bootsctnu - Boot Scootin' (GHG1012-02, US) + Boot Scootin' (AHG1547, US) bootsctnua - Boot Scootin' (GHG1008-03, US) + Boot Scootin' (AHG1433, US) bootsctnub - Boot Scootin' (AHG1547, US) + Boot Scootin' (GHG1012-02, US) + + + bootsctnuc + Boot Scootin' (GHG1012-01, US) + + + bootsctnud + Boot Scootin' (GHG1008-03, US) bop_l2 @@ -9165,7 +9377,7 @@ bowlrama - Bowl-O-Rama Rev 1.0 + Bowl-O-Rama (Rev 1.0) bowlroad @@ -9207,6 +9419,10 @@ boxyboya Boxy Boy (SB?) + + bpanicdx + Block Panic DX (HB, ver. 20250101) + bparty Bachelorette Party (BHG1248, US) @@ -9215,6 +9431,10 @@ bpartya Bachelorette Party (BHG1579, US) + + bpartyb + Bachelorette Party (BHG1247, US) + bpoker Video Poker (v1403) @@ -9329,7 +9549,7 @@ breakout - Breakout [TTL] + Breakout breakrev @@ -9347,6 +9567,10 @@ brglitz Ballroom Glitz + + brhino + Black Rhino (IGT) + brickppl Brick People / Block PeePoo (Ver 1.002) @@ -9459,6 +9683,10 @@ brvbladea Brave Blade (Asia) + + brvbladeg + Brave Blade (VER 1.40G) + brvbladej Brave Blade (Japan) @@ -9491,6 +9719,14 @@ bsebman Bomberman (Version 6.6) + + bsebmanbl + Bomberman (Version 6.6, Avraam bootleg) + + + bsebmanbl2 + Bomberman (Version 6.6, J.T. bootleg) + bshark Battle Shark (World) @@ -9775,6 +10011,10 @@ bubblem Bubble Memories: The Story Of Bubble Bobble III (Ver 2.4O 1996/02/15) + + bubblembe + Bubble Memories: Black Edition (Hack) + bubblemj Bubble Memories: The Story Of Bubble Bobble III (Ver 2.3J 1996/02/07) @@ -9811,6 +10051,10 @@ bubbroul Bubblen Roulette (Japan, main ver. 1.8, video ver. 1.3) + + bubbroul17 + Bubblen Roulette (Japan, main ver. 1.7, video ver. 1.3) + bubl2000 Bubble 2000 @@ -9919,6 +10163,10 @@ bubsympu Bubble Symphony (US) + + bubucar + Bu Bu Car (English) + bucaneer Buccaneer (Aristocrat, 10173011, NSW/ACT) @@ -9939,6 +10187,10 @@ bucanera Buccaneer (set 2) + + buccanra + Buccaneers (set 2) + buccanrs Buccaneers (set 1) @@ -10079,6 +10331,10 @@ bullfgtrs Bull Fighter (Sega) + + bullion2 + Bullion 2 + bullsdrt Bulls Eye Darts @@ -10095,6 +10351,10 @@ bullseyn 301/Bullseye (Traditional Scoring) + + bumba + Bumba (bootleg of Head On) + bumblbug Bumble Bugs (0200510V, NSW/ACT) @@ -10109,6 +10369,10 @@ bumblbugua + Bumble Bugs (CHG0479-02, US) + + + bumblbugub Bumble Bugs (CHG0479-99, US) @@ -10303,9 +10567,13 @@ cabalbl2 Cabal (bootleg of Joystick version, set 2) + + cabalm + Cabal (Modular System) + cabalng - Cabal (Neo-Geo Conversion) + Cabal - Neo Geo Conversion (HB) cabaluk @@ -10357,7 +10625,7 @@ cadashg - Cadash (Germany, version 1) + Cadash (Germany, rev 1) cadashgo @@ -10369,15 +10637,15 @@ cadashj - Cadash (Japan, version 2) + Cadash (Japan, rev 2) cadashj1 - Cadash (Japan, version 1) + Cadash (Japan, rev 1) cadashjo - Cadash (Japan, oldest version) + Cadash (Japan) cadashp @@ -10385,15 +10653,15 @@ cadashs - Cadash (Spain, version 1) + Cadash (Spain, rev 1) cadashu - Cadash (US, version 2) + Cadash (US, rev 2) cadashu1 - Cadash (US, version 1?) + Cadash (US, rev 1?) cafebrk @@ -10473,7 +10741,7 @@ cameltry - Cameltry (US, YM2610) + Cameltry (World, YM2610) cameltrya @@ -10487,6 +10755,10 @@ cameltryj Cameltry (Japan, YM2610) + + cameltryu + Cameltry (US, YM2610) + camlight Camel Lights @@ -10599,6 +10871,14 @@ capsnkb Capcom Vs. SNK: Millennium Fight 2000 + + captainbarrel + Captain Barrel (HB) + + + captainx + Captain X + captaven Captain America and The Avengers (Asia Rev 1.4) @@ -10709,7 +10989,7 @@ captcommb3 - Captain Commando (bootleg set 3 (with YM2151 + 2xMSM5205), 911014 other country) + Captain Commando (bootleg with YM2151 + 2xMSM5205) captcommj @@ -10783,6 +11063,10 @@ carhop Car Hop + + caribe + Caribe + carjmbre Car Jamboree @@ -10799,6 +11083,10 @@ carnevil1 CarnEvil (v1.0.1) + + carnivac + Carnival (Astro Corp., US.004.D) + carnival Carnival (upright, AY8912 music) @@ -10823,6 +11111,10 @@ carnivalha Carnival (Head On hardware, set 2) + + carnivalmm + Carnival (ManilaMatic bootleg) + carnking Carnival King (v1.00.11) @@ -10903,6 +11195,10 @@ cashcrop Cash Crop (Russian) + + cashline + Cashline + cashquiz Cash Quiz (Type B, Version 5) @@ -11055,9 +11351,13 @@ cawingur1 Carrier Air Wing (USA 901012) + + cb2 + Cherry Bonus II (V2.00 06/01) + cb2001 - Cherry Bonus 2001 + Cherry Bonus 2001 (V1.1I) cb3 @@ -11087,10 +11387,46 @@ cb3f Cherry Bonus III (set 5, encrypted bootleg) + + cb3g + Cherry Bonus III (ver.1.40, set 6) + + + cb3h + Cherry Bonus III (ver.1.40, set 7) + + + cb3s51 + Cherry Bonus III (ver.5.1) + + + cb4 + Cherry Bonus IV (V5.0) + + + cb4a + Cherry Bonus IV (V1.2) + + + cb5 + Cherry Bonus V Five (V1.3) + + + cb5_11 + Cherry Bonus V Five (V1.1) + + + cbaai + Cherry Bonus (A.A.I. bootleg) + cbaj Cool Boarders Arcade Jam (Export) + + cbajbl + Cool Boarders Arcade Jam (Export bootleg) + cball Cannonball (Atari, prototype) @@ -11193,7 +11529,7 @@ ccasino - Chinese Casino [BET] (Japan) + Chinese Casino (Japan) ccastle2 @@ -11313,7 +11649,11 @@ ccorsario - Corsarios (Cirsa slot machine) + Corsarios (Cirsa slot machine, V6.0D) + + + ccorsarioa + Corsarios (Cirsa slot machine, V5.10D, Catalonia) ccruise @@ -11339,6 +11679,10 @@ cecmatch ChuckECheese's Match Game + + cellage + Cellage + cencourt Center Court (World, 4 Players, prototype) (MC-8123B) @@ -11525,6 +11869,10 @@ cgold2 + Caribbean Gold II (4XF5182H04, US) + + + cgold2a Caribbean Gold II (3XF5182H04, US) @@ -11545,7 +11893,7 @@ cgunship - Cobra Gunship [TTL] + Cobra Gunship ch2000 @@ -11595,6 +11943,10 @@ ch2000v2 Fruit Bonus 2000 / New Cherry 2000 (Version 4.1LT Dual) + + ch3001r + Champion 3001 Regular + chainrec Chain Reaction (World, Version 2.2, 1995.09.25) @@ -11603,6 +11955,10 @@ chaknpop Chack'n Pop + + chakumel + Chaku Melo Collection + chalgirl Challenge Girl (Falcon bootleg) @@ -11623,6 +11979,10 @@ chameleo Chameleon + + champ2 + Countertop Champion 2 (ver 2.11) + champbas Champion Base Ball @@ -11685,7 +12045,7 @@ chanbara - Chanbara + Chanbara (Japan) chance @@ -11709,11 +12069,11 @@ changyu - unknown Chang Yu Electronic gambling game 1 + Mayo no 21 changyu2 - unknown Chang Yu Electronic gambling game 2 + 999 chaosbrk @@ -11735,6 +12095,14 @@ chariotcpe Chariot Challenge (04J00714, Peru) + + chariotcu + Chariot Challenge (RHG0635-02, US) + + + charles + Charleston (V2.1, Catalonia) + charlien Charlie Ninja @@ -11805,23 +12173,23 @@ chelnov - Chelnov - Atomic Runner (World) + Atomic Runner Chelnov (World) chelnovj - Chelnov - Atomic Runner (Japan) + Atomic Runner Chelnov (Japan) chelnovjbl - Chelnov - Atomic Runner (Japan, bootleg with I8031, set 1) + Atomic Runner Chelnov (Japan, bootleg with I8031, set 1) chelnovjbla - Chelnov - Atomic Runner (Japan, bootleg with I8031, set 2) + Atomic Runner Chelnov (Japan, bootleg with I8031, set 2) chelnovu - Chelnov - Atomic Runner (US) + Atomic Runner Chelnov (US) cherry96 @@ -11829,7 +12197,7 @@ chessc2 - Chess Challenge II + Chess Challenge II (ver. 1445A) chewheel @@ -11847,6 +12215,10 @@ cheyenne Cheyenne (version 1.0) + + chicdale + Chickendales (Atronic) + chicgum Chic Gum Video @@ -12107,6 +12479,10 @@ chukatau Chuka Taisen (US) + + chusenoh + Chusenoh + chwrestl Champion Pro Wrestling @@ -12211,6 +12587,26 @@ cjbj Blackjack (Ver. 1.31) + + cjddz + Chaoji Dou Dizhu (V219CN) + + + cjddz215cn + Chaoji Dou Dizhu (V215CN) + + + cjddz217cn + Chaoji Dou Dizhu (V217CN) + + + cjddzlf + Chaoji Dou Dizhu Liang Fu Pai (V109CN) + + + cjddzp + Chaoji Dou Dizhu Jiaqiang Ban (S300CN) + cjddzsp Super Dou Di Zhu Special (V122CN) @@ -12239,9 +12635,21 @@ cjplus New! Cherry Plus (Ver. 3.10) + + cjslh + Cai Jin Shen Long (link version, host) + + + cjsll + Cai Jin Shen Long (link version, extension, S111CN) + + + cjtljp + Chaoji Tuolaji Jiaqiang Ban (V206CN) + ckidzo - Ckidzo [TTL] + Ckidzo ckong @@ -12393,7 +12801,7 @@ cleanswp - Clean Sweep [TTL] + Clean Sweep cleoftp @@ -12607,6 +13015,18 @@ cluedod Cluedo (prod. 2D) (Protocol) + + cm2005 + Cherry Master 2005 (Ver. 1.10U) + + + cm2005a + Cherry Master 2005 (Ver. 1.02U) + + + cm2005b + Cherry Master 2005 (Ver. 0.14H) + cmagica Carta Magica (Ver 1.8) @@ -12629,7 +13049,15 @@ cmast97 - Cherry Master '97 + Cherry Master '97 (V1.7, set 1) + + + cmast97a + Cherry Master '97 (V1.7, set 2) + + + cmast97i + Cheri Mondo '97 (V1.4I) cmast99 @@ -12687,6 +13115,14 @@ cmasterk Cherry Master I (ver.1.01, set 11, TAKE stops all) + + cmasterl + Cherry Master I (ver.1.01, set 12) + + + cmcwa + Chibi Maruko-chan - Wanage de Asobo!! + cmehyou Mahjong Circuit no Mehyou (Japan) @@ -12695,6 +13131,14 @@ cmezspin Cherry Master I (E-Z Spin bootleg / hack) + + cmezspina + Cherry Master I (E-Z Spin Hands Count bootleg / hack, set 1) + + + cmezspinb + Cherry Master I (E-Z Spin Hands Count bootleg / hack, set 2) + cmfb55 Cherry Master (bootleg, Game FB55 Ver.2) @@ -12759,6 +13203,10 @@ cmtetrisd Tetris + Cherry Master (Aidonis Games bootleg) + + cmtetriskr + Tetris + Global Money Fever (Corsica, v8.01, Korean bootleg) + cmtonig Cashman Tonight (30194711, NSW/ACT) @@ -12771,6 +13219,14 @@ cmv4a Cherry Master (ver.4, set 2) + + cmv4zg + Cherry Bonus III (Ziogas V4.1 hack, set 1) + + + cmv4zga + Cherry Bonus III (Ziogas V4.1 hack, set 2) + cmv801 Cherry Master (Corsica, ver.8.01) @@ -12781,11 +13237,11 @@ cnbe - Codename - Blut Engel (2006-01-19) + Codename - Blut Engel (HB, ver. 20060119) cnbe2018 - Codename - Blut Engel (2018-09-05) + Codename - Blut Engel (HB, ver. 20180905) cndi @@ -12925,7 +13381,11 @@ cobrasd - Cobra Sport Dart + Cobra Sport Dart / Tour Sport Dart (Oki MSM6376 sound) + + + cobrasda + Cobra Sport Dart / Tour Sport Dart (AY-8910 sound) cobraseg @@ -12963,6 +13423,10 @@ code1db Code One Dispatch Ver 1.16 (ver UAB) + + codemagik + Code Magik (Ver 5.5) / Super 7 (stealth game) + colmns97 Columns '97 (JET 961209 V1.000) @@ -13037,7 +13501,7 @@ columnsn - Columns (Neo Geo) + Columns - Neo Geo (HB) columnsu @@ -13173,7 +13637,7 @@ comg175 - Cal Omega - Game 17.51 (Gaming Draw Poker) + Cal Omega - Game 17.51 (Gaming Draw Poker, Sch 07-0T) comg176 @@ -13211,6 +13675,10 @@ comg208 Cal Omega - Game 20.8 (Winner's Choice) + + comg214 + Cal Omega - Game 21.4 (Wild Double-Up Poker) + comg227 Cal Omega - Game 22.7 (Amusement Poker, d/d) @@ -13245,11 +13713,23 @@ comg5107 - CEI 51.07 (CEI 906-III Poker) + CEI 51.07 (CEI 906-III Poker, Schedule 05F) comg5108 - CEI 51.08 (CEI 906-III Poker) + CEI 51.08 (CEI 906-III Poker, Schedule 05F) + + + comg5108a + CEI 51.08 (CEI 906-III Poker, Schedule 09F) + + + comg5108b + CEI 51.08 (CEI 906-III Poker, Schedule 21F) + + + comg6004 + CEI 60.04 (CEI 906-III Poker, Schedule 09F) comg903d @@ -13317,7 +13797,7 @@ compgolf - Competition Golf Final Round (revision 3) + Competition Golf Final Round (World?, revision 3) compgolfo @@ -13781,7 +14261,7 @@ cphd - Crouching Poney Hidden Dragon (DEMO) + Crouching Poney Hidden Dragon (HB, Demo) cpoker @@ -13859,6 +14339,10 @@ cps1frog Frog Feast (CPS-1) + + cps1mult + CPS1 Multi Game + cps3boot CPS3 Multi-game bootleg for HD6417095 type SH2 (V4) @@ -13915,6 +14399,10 @@ cptlucky Captain Lucky + + cptshark + Captain Shark (Ver. CS.01.6, Apr 21 2006) + cpzodiac Captain Zodiac (World) @@ -13957,7 +14445,7 @@ crashnsc - Crash 'n Score/Stock Car [TTL] + Crash 'n Score/Stock Car crashrd @@ -13969,7 +14457,15 @@ crazybal - Crazy Balls [TTL] + Crazy Balls (NAT) + + + crazybala + Crazy Balls (Bontempi, set 1) + + + crazybalb + Crazy Balls (Bontempi, set 2) crazyblk @@ -14169,7 +14665,7 @@ croupierb - Croupier (Playmark Roulette v.03.09) + Croupier II (Playmark Roulette v.03.09) crsbingo @@ -14207,6 +14703,10 @@ crszonev2a Crisis Zone (World, CSZO2 Ver. A) + + crszonev2b + Crisis Zone (World, CSZO2 Ver. B) + crszonev3a Crisis Zone (US, CSZO3 Ver. A) @@ -14253,15 +14753,15 @@ crushbl - Crush Roller (bootleg set 1) + Crush Roller (bootleg, set 1) crushbl2 - Crush Roller (bootleg set 2) + Crush Roller (bootleg, set 2) crushbl3 - Crush Roller (bootleg set 3) + Crush Roller (bootleg, set 3) crusherm @@ -14273,7 +14773,7 @@ crushs - Crush Roller (bootleg set 4) + Crush Roller (bootleg, set 4) crusnexo @@ -14491,10 +14991,26 @@ crzrallyrf Crazy Rally (Recreativos Franco license) + + crzybell + Crazy Bell (V1.2D) + crzybugs + Crazy Bugs (V204US) + + + crzybugs103jp Crazy Bugs (V103JP) + + crzybugs200us + Crazy Bugs (V200US) + + + crzybugs202us + Crazy Bugs (V202US) + crzyddz Crazy Dou Di Zhu @@ -14579,17 +15095,21 @@ cs9_spp Casino Strip IX (Poker version, for Pioneer LD) + + cscaoysd + Crayon Shin-chan - Arashi o Yobu! Sushitori Daigassen + csclub - Capcom Sports Club (Euro 971017) + Capcom Sports Club (Europe 971017) csclub1 - Capcom Sports Club (Euro 970722) + Capcom Sports Club (Europe 970722) csclub1d - Capcom Sports Club (Euro 970722 Phoenix Edition) (bootleg) + Capcom Sports Club (Europe 970722 Phoenix Edition) (bootleg) cscluba @@ -15075,6 +15595,22 @@ cutieq Cutie Q + + cuttherope + Cut The Rope + + + cutyline + Cuty Line (ver.1.01) + + + cutylinea + Cuty Line (LC-88 bootleg, ver.8.05C) + + + cutylineb + Cuty Line (LC-88 bootleg, ver.7C.14) + cv_10 Cirqus Voltaire (1.0) @@ -15215,13 +15751,17 @@ cybertnk Cyber Tank (v1.4) + + cyborgforce + Cyborg Force (HB) + cybots - Cyberbots: Fullmetal Madness (Euro 950424) + Cyberbots: Fullmetal Madness (Europe 950424) cybotsam - Cyberbots - fullmetal madness (Access Mod, Hack) + Cyberbots: Fullmetal Madness (Access Mod, Hack) cybotsj @@ -15455,6 +15995,10 @@ d9final Dream 9 Final (v2.24) + + d9flower + Dream 9 Flower (v1.00c) + dacholer Dacholer @@ -15463,6 +16007,10 @@ dadandrn Kyukyoku Sentai Dadandarn (ver JAA) + + dagenta6 + Double Agent (0152082, US) + dai2kaku Dai-Dai-Kakumei (Japan) @@ -15477,7 +16025,7 @@ daikaiju - Daikaiju no Gyakushu + Daikaiju no Gyakushu (rev 1) daimakai @@ -15485,7 +16033,7 @@ daimakaib - Dai Makai-Mura (bootleg, Japan) + Daimakaimura (bootleg) daimakair @@ -15493,7 +16041,7 @@ daimyojn - Mahjong Daimyojin [BET] (Japan, T017-PB-00) + Mahjong Daimyojin (Japan, T017-PB-00) daioh @@ -15519,6 +16067,10 @@ daiohp3 Daioh (prototype, earliest) + + daireach + Mahjong Dai-Reach (Japan, TSM012-C01) + daireika Mahjong Daireikai (Japan) @@ -15537,7 +16089,7 @@ daisyari - Daisyarin [BET] (Japan) + Daisyarin (Japan) daitorid @@ -15673,7 +16225,7 @@ darius2 - Darius II (triple screen) (Japan) + Darius II (triple screen) (Japan, rev 1) darius2d @@ -15807,6 +16359,10 @@ dassault4 Desert Assault (US 4 Players) + + dawg + Dawg Gone Fun + dayto2pe Daytona USA 2: Power Edition (Japan) @@ -15857,7 +16413,7 @@ dblagent - Double Agent (0152082, US) + Double Agent (3XF5287H04, US) dblaxle @@ -15903,6 +16459,10 @@ dbldolphq Double Dolphins (40003211, Queensland) + + dbldolphu + Double Dolphins (0351006, US) + dbldyn The Double Dynamites @@ -15927,6 +16487,10 @@ dblewingb Double Wings (Asia) + + dblheart + Double Hearts + dblplay Super Baseball Double Play Home Run Derby @@ -15967,6 +16531,10 @@ dbza Dragon Ball Z (rev A) + + dbzbgck + Dragon Ball Z - Bucchigiri no Chou Kessen + dbzvrvs Dragon Ball Z: V.R. V.S. (Japan, Rev A) @@ -16365,20 +16933,20 @@ ddragon - Double Dragon (Japan) + Double Dragon (World set 1) ddragon2 Double Dragon II: The Revenge (World) - - ddragon2b - Double Dragon II: The Revenge (US, bootleg) - ddragon2b2 Double Dragon II: The Revenge (US, bootleg, set 2) + + ddragon2bl + Double Dragon II: The Revenge (US, bootleg) + ddragon2j Double Dragon II: The Revenge (Japan) @@ -16411,18 +16979,38 @@ ddragon6809a Double Dragon (bootleg with 3xM6809, set 2) + + ddragona + Double Dragon (World set 2) + ddragonb + Double Dragon (bootleg) + + + ddragonbl Double Dragon (bootleg with HD6309) - ddragonb2 + ddragonbl2 Double Dragon (bootleg) - ddragonba + ddragonbla Double Dragon (bootleg with MC6803) + + ddragonj + Double Dragon (Japan set 1) + + + ddragonja + Double Dragon (Japan set 2) + + + ddragonm + Double Dragon (Modular System) + ddragonu Double Dragon (US set 1) @@ -16437,11 +17025,7 @@ ddragonw - Double Dragon (World set 1) - - - ddragonw1 - Double Dragon (World set 2) + Double Dragon (World) ddrbocd @@ -16549,7 +17133,11 @@ ddsom - Dungeons & Dragons: Shadow over Mystara (Euro 960619) + Dungeons & Dragons: Shadow over Mystara (Europe 960619) + + + ddsom1v4 + Dungeons & Dragons: Shadow over Mystara (1v4, Hack) ddsoma @@ -16563,6 +17151,10 @@ ddsomb Dungeons & Dragons: Shadow over Mystara (Brazil 960223) + + ddsomcfs + Dungeons & Dragons: Shadow over Mystara (Change the Final Strike condition, Hack) + ddsomh Dungeons & Dragons: Shadow over Mystara (Hispanic 960223) @@ -16577,23 +17169,23 @@ ddsomjr1 - Dungeons & Dragons: Shadow over Mystara (Japan 960206) + Dungeons & Dragons: Shadow over Mystara (Japan 960223) ddsomjr2 - Dungeons & Dragons: Shadow over Mystara (Japan 960223) + Dungeons & Dragons: Shadow over Mystara (Japan 960206) ddsomr1 - Dungeons & Dragons: Shadow over Mystara (Euro 960223) + Dungeons & Dragons: Shadow over Mystara (Europe 960223) ddsomr2 - Dungeons & Dragons: Shadow over Mystara (Euro 960209) + Dungeons & Dragons: Shadow over Mystara (Europe 960209) ddsomr3 - Dungeons & Dragons: Shadow over Mystara (Euro 960208) + Dungeons & Dragons: Shadow over Mystara (Europe 960208) ddsomu @@ -16603,13 +17195,17 @@ ddsomud Dungeons & Dragons: Shadow over Mystara (USA 960619 Phoenix Edition) (bootleg) + + ddsomudp + Dungeons & Dragons: Shadow over Mystara (Plus, Hack) + ddsomur1 Dungeons & Dragons: Shadow over Mystara (USA 960209) ddtod - Dungeons & Dragons: Tower of Doom (Euro 940412) + Dungeons & Dragons: Tower of Doom (Europe 940412) ddtoda @@ -16621,7 +17217,11 @@ ddtodd - Dungeons & Dragons: Tower of Doom (Euro 940412 Phoenix Edition) (bootleg) + Dungeons & Dragons: Tower of Doom (Europe 940412 Phoenix Edition) (bootleg) + + + ddtoddp + Dungeons & Dragons: Tower of Doom (Plus, Hack) ddtodh @@ -16649,7 +17249,7 @@ ddtodr1 - Dungeons & Dragons: Tower of Doom (Euro 940113) + Dungeons & Dragons: Tower of Doom (Europe 940113) ddtodu @@ -16745,7 +17345,7 @@ deathrac - Death Race [TTL] + Death Race deathsm2 @@ -16929,27 +17529,27 @@ demonwld - Demon's World / Horror Story (set 1) + Demon's World (World) / Horror Story (Japan) (set 1) demonwld1 - Demon's World / Horror Story (set 2) + Demon's World (World) / Horror Story (Japan) (set 2) demonwld2 - Demon's World / Horror Story (set 3) + Demon's World (World) / Horror Story (Japan) (set 3) demonwld3 - Demon's World / Horror Story (set 4) + Demon's World (World) / Horror Story (Japan) (set 4) demonwld4 - Demon's World / Horror Story (set 5) + Demon's World (World) / Horror Story (Japan) (set 5) demonwld5 - Demon's World / Horror Story (set 6) + Demon's World (World) / Horror Story (Japan) (set 6) dendego @@ -17065,7 +17665,7 @@ destdrby - Destruction Derby [TTL] + Destruction Derby desterth @@ -17077,19 +17677,19 @@ destroyr - Destroyer (version O2) + Destroyer (Atari, version O2) destroyr1 - Destroyer (version O1) + Destroyer (Atari, version O1) destryer - Destroyer (Cidelsa) (set 1) + Destroyer (Cidelsa, set 1) destryera - Destroyer (Cidelsa) (set 2) + Destroyer (Cidelsa, set 2) detatwin @@ -17181,7 +17781,11 @@ dfruit - Fruit Dream (Japan) + Fruit Dream (Japan, Ver. 1.20) + + + dfruita + Fruit Dream (Japan, Ver. 1.10) dh_lf2 @@ -17255,6 +17859,10 @@ diamondpg Diamond Lady (German) + + diamrun + Diamond Run + dibif727 Diana Bifuca (v7.27) @@ -17275,21 +17883,29 @@ dicegame Dice - The Dice Game! + + dicemstr + Dice Master + diehard Die Hard Arcade (UET 960515 V1.000) dietgo - Diet Go Go (Euro v1.1 1992.09.26 v3) + Diet Go Go (Europe v1.1 1992.09.26, set 1) dietgoe - Diet Go Go (Euro v1.1 1992.09.26 v2) + Diet Go Go (Europe v1.1 1992.09.26, set 2) dietgoea - Diet Go Go (Euro v1.1 1992.08.04) + Diet Go Go (Europe v1.1 1992.09.26, set 3) + + + dietgoeb + Diet Go Go (Europe v1.1 1992.08.04) dietgoj @@ -17353,7 +17969,7 @@ dimahoo - Dimahoo (Euro 000121) + Dimahoo (Europe 000121) dimahoou @@ -17429,7 +18045,7 @@ dino3j - Cadillacs and Dinosaurs (Three Prohibitions, Hack) + Cadillacs: Kyouryuu Shin Seiki (Three Prohibitions, Hack) dinoa @@ -17453,7 +18069,7 @@ dinoeh - Cadillacs and Dinosaurs (hack, 930201 etc) + Cadillacs and Dinosaurs (hack, World 930201) dinofmly @@ -17469,11 +18085,11 @@ dinoh - Cadillacs and Dinosaurs (bootleg set 3, 930223 Asia TW) + Cadillacs and Dinosaurs (bootleg, Asia TW 930223) dinohc - Cadillacs and Dinosaurs (Chinese bootleg, 930223 Asia TW) + Cadillacs and Dinosaurs (Chinese bootleg, Asia TW 930223) dinohunt @@ -17511,6 +18127,10 @@ dinokior Dinosaur King - Operation: Dinosaur Rescue (USA, Export) (MDA-C0021) + + dinokr + Cadillacs and Dinosaurs (Crazy BBQ, Hack) + dinoly Cadillacs and Dinosaurs (Purgatory, Hack) @@ -17577,19 +18197,19 @@ dinot - Cadillacs and Dinosaurs Turbo (bootleg set 1, 930223 Asia TW) + Cadillacs and Dinosaurs Turbo 97 (bootleg, Asia TW 930223, set 1) dinotj - Cadillacs and Dinosaurs (Heavenly General, Hack) + Cadillacs and Dinosaurs (General, Hack) dinotpic - Cadillacs and Dinosaurs Turbo (bootleg set 2 (with PIC16c57), 930201 etc) + Cadillacs and Dinosaurs Turbo 97 (bootleg, Asia TW 930223, set 2) dinotw - Cadillacs and Dinosaurs (Heavenly King, Hack) + Cadillacs and Dinosaurs (King, Hack) dinou @@ -17743,6 +18363,10 @@ dkchrmx Donkey Kong Christmas Remix (Hack) + + dkchrte + Donkey Kong Christmas Tournament Edition (Hack) + dkduel Donkey Kong Duel @@ -17967,6 +18591,10 @@ dkongst2 Donkey Kong Springs Trainer 2 + + dkongte + Donkey Kong Tournament Edition (Hack) + dkongtj Donkey Kong Twisted Jungle v1.05 @@ -18007,6 +18635,10 @@ dkspkyrmx Donkey Kong Spooky Remix (Hack) + + dkspkyte + Donkey Kong Spooky Tournament Edition (Hack) + dktrainer Donkey Kong Trainer 1.01 @@ -18037,7 +18669,7 @@ dlair2_312 - Dragon's Lair 2: Time Warp (Euro v3.12) + Dragon's Lair 2: Time Warp (Europe v3.12) dlair2_314 @@ -18053,11 +18685,11 @@ dlair2_316e - Dragon's Lair 2: Time Warp (Euro v3.16) + Dragon's Lair 2: Time Warp (Europe v3.16) dlair2_317e - Dragon's Lair 2: Time Warp (Euro v3.17) + Dragon's Lair 2: Time Warp (Europe v3.17) dlair2_318 @@ -18065,7 +18697,7 @@ dlair2_319e - Dragon's Lair 2: Time Warp (Euro v3.19) + Dragon's Lair 2: Time Warp (Europe v3.19) dlair2_319s @@ -18163,6 +18795,14 @@ dmdfever Diamond Fever (0200302V, NSW/ACT) + + dmndhrt + Diamond Heart (v1.06) + + + dmndhrtn + Diamond Heart New (v20.0) + dmndrby Diamond Derby (Win bet, newer) @@ -18197,7 +18837,7 @@ dmodrbcc - Demolition Derby [TTL] + Demolition Derby (Chicago Coin) dmx @@ -18301,7 +18941,7 @@ docchift - Docchi Fighter + Docchi Fighter (Japan, ver 1.02) dockman @@ -18317,18 +18957,22 @@ dodgecty - Dodge City (9131-02) + Dodge City (9131-02, U9-2T) dodgectya + Dodge City (9131-02, U9-2B) + + + dodgectyba Dodge City (2131-82, U5-0D) - dodgectyb + dodgectybb Dodge City (2131-82, U5-50) - dodgectyc + dodgectybc Dodge City (2131-82, U5-0 GT) @@ -18403,6 +19047,10 @@ dogyuunto Dogyuun (8/25/1992 location test) + + dojokkot + Dojokko Tsukami (Japan, ver 1.02) + dokaben Dokaben (Japan) @@ -18435,6 +19083,10 @@ dolmen Dolmen + + dolmenk + Goindol (Afega) + dolphin Dolphin Blue @@ -18473,6 +19125,10 @@ dolphntru + Dolphin Treasure (FHG4076-02, US) + + + dolphntrua Dolphin Treasure (FHG4077-02, US) @@ -18521,7 +19177,7 @@ dondenmj - Don Den Mahjong [BET] (Japan) + Don Den Mahjong (Japan) dondokdj @@ -18533,15 +19189,15 @@ dondokod - Don Doko Don (World) + Don Doko Don (World, rev 1) dondokodj - Don Doko Don (Japan) + Don Doko Don (Japan, rev 1) dondokodu - Don Doko Don (US) + Don Doko Don (US, rev 1) donghaer @@ -18655,10 +19311,22 @@ dotrone Discs of Tron (Environmental) + + dotronep + Discs of Tron (Environmental, prototype, 8/9/83) + doubldsp Double Dragon (Special 2017, Hack) + + double8l + Double 8 Line + + + doubled + Double Dragon One (Demo) + doubledp Double Dragon (Plus, Hack) @@ -18677,7 +19345,7 @@ douni - Mr. Do vs. Unicorns + Mr. Do! vs. Unicorns (Japan) dowild @@ -18713,11 +19381,11 @@ dpatrol - Desert Patrol [TTL] + Desert Patrol dpatrola - Desert Patrol (set 2) [TTL] + Desert Patrol (set 2) dphl @@ -18815,6 +19483,14 @@ dragon Dragon + + dragonmj + Dragon Mahjong (Ver 1.20) + + + dragonmj103 + Dragon Mahjong (Ver 1.03) + dragonsh Dragon's Heaven (development board) @@ -18843,6 +19519,10 @@ drail Dream Rail + + draillov + Dream Rail Lovely + drakor Drakor @@ -18875,6 +19555,10 @@ drdmania Dardomania (v2.1) + + dream9 + Dream 9 (v1.52) + dreambal Dream Ball (Japan V2.4) @@ -18981,7 +19665,7 @@ drgnwrldv40k - Dragon World (Korea, V040K) + Dongbang Jiju (Korea, V040K) drgpunch @@ -19013,7 +19697,7 @@ drgw2101j - Chuugokuryuu II (V101, Japan) + Chuugokuryuu II (ver. 101J, Japan) drgw3 @@ -19048,13 +19732,17 @@ Dribbling (set 2) - driblingbr - Dribbling (bootleg, Brazil) + driblingam + Dribbling (Automave) driblingo Dribbling (Olympia) + + driblingvm + Dribbling (Videomac bootleg, Brazil) + driblino Dribbling (Olympia) @@ -19085,7 +19773,7 @@ driveout - Drive Out (bootleg) + Drive Out (bootleg of Drift Out) driveyes @@ -19115,6 +19803,10 @@ drivfrct Top Racer (bootleg of Driving Force) + + drkseal + Dark Seal (8-liner) + drktnjr Drakton (DKJr conversion) @@ -19137,6 +19829,10 @@ drmmake + Dream Maker (Atronic) + + + drmmaker Dream Maker (Russia) (Atronic) @@ -19401,7 +20097,7 @@ dstlk - Darkstalkers: The Night Warriors (Euro 940705) + Darkstalkers: The Night Warriors (Europe 940705) dstlka @@ -19423,21 +20119,25 @@ dstlkur1 Darkstalkers: The Night Warriors (USA 940705) + + dt7 + DT7 (prototype) + dtfamily Diet Family dtoyoken - Mahjong Dai Touyouken [BET] (Japan) + Mahjong Dai Touyouken (Japan) dtrvwz5 - Deluxe Trivia ? Whiz (6221-70, U5-0A Edition 5) + Deluxe Trivia ? Whiz Edition 5 (6221-70, U5-0A) dtrvwz5v - Deluxe Trivia ? Whiz (6221-75, U5-0 Edition 5 Vertical) + Deluxe Trivia ? Whiz Edition 5 (6221-75, U5-0, Vertical) dualaslt @@ -19695,6 +20395,14 @@ dynashot Dynamic Shoot Kyousou + + dynasty + Dynasty (2009, Ver. 1.02) + + + dynastye + Dynasty (1992, V5.1G) + dyndeka2 Dynamite Deka 2 (Japan, Model 2A) @@ -21789,23 +22497,23 @@ edf - E.D.F. : Earth Defense Force (set 1) + E.D.F.: Earth Defense Force (set 1) edfa - E.D.F. : Earth Defense Force (set 2) + E.D.F.: Earth Defense Force (set 2) edfbl - E.D.F. : Earth Defense Force (bootleg) + E.D.F.: Earth Defense Force (bootleg) edfp - E.D.F. : Earth Defense Force (Japan, prototype) + E.D.F.: Earth Defense Force (Japan, prototype) edfu - E.D.F. : Earth Defense Force (North America) + E.D.F.: Earth Defense Force (North America) edrandy @@ -21855,14 +22563,6 @@ eforsta5 Enchanted Forest (0400122V, NSW/ACT) - - eforsta5ce - Enchanted Forest - Cash Express (CHG1536, US) - - - eforsta5cea - Enchanted Forest - Cash Express (AHG1615, US) - eforsta5u Enchanted Forest (JHG0415-03, US) @@ -21871,6 +22571,14 @@ eforsta5ua Enchanted Forest (JHG0415-99, US) + + eforstce + Enchanted Forest - Cash Express (AHG1615, US) + + + eforstcea + Enchanted Forest - Cash Express (CHG1536, US) + egghunt Egg Hunt @@ -21903,6 +22611,10 @@ eggventr2 Egg Venture (Release 2) + + eggventr4 + Egg Venture (Release 4) + eggventr7 Egg Venture (Release 7) @@ -22007,6 +22719,14 @@ eldoraddoa El Dorado (V1.4D) + + eldoraddob + El Dorado (V2.0D) + + + eldoraddoc + El Dorado (V1.1J) + eldorado El Dorado City of Gold @@ -22025,11 +22745,11 @@ elecyoyo - The Electric Yo-Yo (set 1) + The Electric Yo-Yo (rev 1) - elecyoyo2 - The Electric Yo-Yo (set 2) + elecyoyoa + The Electric Yo-Yo elektra @@ -22287,6 +23007,10 @@ endrichsa Endless Riches (Ver 1.20) + + endrichsb + Endless Riches (Ver 1.10) + endurob2 Enduro Racer (bootleg set 2) @@ -25677,48 +26401,52 @@ eswat - E-Swat - Cyber Police (set 4, World) (FD1094 317-0130) + Cyber Police ESWAT (set 4, World) (FD1094 317-0130) eswatbl - E-Swat - Cyber Police (bootleg, set 1) + Cyber Police ESWAT (bootleg, set 1) eswatbl2 - E-Swat - Cyber Police (bootleg, set 2) + Cyber Police ESWAT (bootleg, set 2) eswatd - E-Swat - Cyber Police (set 4, World) (bootleg of FD1094 317-0130 set) + Cyber Police ESWAT (set 4, World) (bootleg of FD1094 317-0130 set) eswatj - E-Swat - Cyber Police (set 2, Japan) (FD1094 317-0128) + Cyber Police ESWAT (set 2, Japan) (FD1094 317-0128) eswatj1 - E-Swat - Cyber Police (set 1, Japan) (FD1094 317-0131) + Cyber Police ESWAT (set 1, Japan) (FD1094 317-0131) eswatj1d - E-Swat - Cyber Police (set 1, Japan) (bootleg of FD1094 317-0131 set) + Cyber Police ESWAT (set 1, Japan) (bootleg of FD1094 317-0131 set) eswatjd - E-Swat - Cyber Police (set 2, Japan) (bootleg of FD1094 317-0128 set) + Cyber Police ESWAT (set 2, Japan) (bootleg of FD1094 317-0128 set) eswatu - E-Swat - Cyber Police (set 3, US) (FD1094 317-0129) + Cyber Police ESWAT (set 3, US) (FD1094 317-0129) eswatud - E-Swat - Cyber Police (set 3, US) (bootleg of FD1094 317-0129 set) + Cyber Police ESWAT (set 3, US) (bootleg of FD1094 317-0129 set) eto Kokontouzai Eto Monogatari (Japan) + + etoa + Kokontouzai Eto Monogatari (Japan, prototype?) + euro2k2 Europa 2002 (Ver 2.0, set 1) @@ -25789,15 +26517,15 @@ excalibr - Excalibur + Excalibur (Gottlieb) excalibrf - Excalibur (French) + Excalibur (Gottlieb, French) excalibrg - Excalibur (German) + Excalibur (Gottlieb, German) excelsr @@ -25969,7 +26697,7 @@ extradrw - Extra Draw + Extra Draw (V100VE) extrmatn @@ -26021,15 +26749,15 @@ eyes - Eyes (US set 1) + Eyes (US, set 1) eyes2 - Eyes (US set 2) + Eyes (US, set 2) eyesb - Eyes (bootleg set 1) + Eyes (bootleg, set 1) eyeszac @@ -26037,7 +26765,7 @@ eyeszacb - Eyes (bootleg set 2, decrypted) + Eyes (bootleg, set 2, decrypted) ez2d2m @@ -26075,6 +26803,10 @@ f15se22 F-15 Strike Eagle (rev. 2.2 02/25/91, 29K ver. 2.2a) + + f16s8l + F-16 Super 8 Lines + f1dream F-1 Dream @@ -26229,12 +26961,20 @@ falcnwldc + Falcons Wild - World Wide Poker (Falcon original, protected) + + + falcnwldd Falcons Wild - World Wide Poker (Falcon original) falcon Falcon (bootleg of Phoenix) (8085A CPU) + + falconun + unknown Falcon gambling machine + falconz Falcon (bootleg of Phoenix) (Z80 CPU) @@ -26541,7 +27281,11 @@ fb2010 - Fruit Bonus 2010 + Fruit Bonus 2010 (v. 2.0.1.3) + + + fb2010a + Fruit Bonus 2010 (v. 2.0.1.0) fb2gen @@ -26615,6 +27359,10 @@ fb4 Fruit Bonus 2004 (Version 1.5R, set 1) + + fb4_14 + Fruit Bonus 2004 (Version 1.4) + fb4b2 Fruit Bonus 2004 (Version 1.5LT, set 1) @@ -27051,9 +27799,21 @@ fenixn Fenix (Niemer bootleg of Phoenix) + + fever13 + Fever 13 (Japan, v1.3) + feverch - Fever Chance (W-6) + Fever Chance (W-6, Japan, set 1) + + + fevercha + Fever Chance (W-6, Japan, set 2) + + + feverchtw + Fever Chance (W-6, Taiwan) feversoc @@ -27121,11 +27881,11 @@ ffightaec2 - Final Fight Anniversary Edition (CPS2 hardware) + Final Fight: Anniversary Edition (CPS2 hardware) ffightaec2ds - Final Fight Anniversary Edition (Deadly Streets, Hack)(CPS2 Hardware) + Final Fight: Anniversary Edition (Deadly Streets, Hack)(CPS2 Hardware) ffightaemgc @@ -27219,14 +27979,26 @@ ffurspbs Fatal Fury Special / Garou Densetsu Special (Optional Hidden Character Third Edition, Hack) + + ffurspbt + Fatal Fury Special / Garou Densetsu Special (BT Version PPX, Hack) + ffury1bs Fatal Fury - King of Fighters / Garou Densetsu - Shukumei no Tatakai (Boss, Hack) + + ffury2es + Fatal Fury 2 / Garou Densetsu 2 - Arata-naru Tatakai (Easy Special Attacks, Hack) + ffury3bs Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - Haruka-naru Tatakai (Ancient Battles Resurgence, Hack) + + ffury3eh + Fatal Fury 3 - Road to the Final Victory / Garou Densetsu 3 - Haruka-naru Tatakai (Add Char - Ultra kill style changed, Hack) + ffv101 Flipper Football (v1.01) @@ -27392,7 +28164,7 @@ Fighting Layer (Asia, FTL3/VER.A) - fgtlayerj + fgtlayerja Fighting Layer (Japan, FTL0/VER.A) @@ -27561,11 +28333,11 @@ finalbny - Mahjong Final Bunny [BET] (Japan) + Mahjong Final Bunny (Japan) finalbu - Final Blow (US) + Final Blow (US, rev 1) finalgdr @@ -27781,7 +28553,11 @@ fisco400 - Cisco/Fisco 400 [TTL] + Cisco/Fisco 400 + + + fishbatl + Fisherman Battle (Japan, ver 1.03) fishfren @@ -27927,6 +28703,10 @@ flamegun Flame Gunner (Export) + + flamegung + Flame Gunner (VER 1.40G) + flamegunj Flame Gunner (Japan) @@ -27939,6 +28719,10 @@ flamoljc Flame of Olympus - Jackpot Carnival (0251048, US) + + flapchck + Flappy Chicken (HB, ver. 20230430) + flash_l1 Flash (Williams, L-1) @@ -28009,7 +28793,11 @@ flickya - Flicky (128k Version, 315-5051, larger roms) + Flicky (128k Version, 315-5051, larger ROMs) + + + flickyb + Flicky (128k Version, 315-5051, larger ROMs, newer) flickyg @@ -28121,7 +28909,7 @@ flyingf - Flying Fortress [TTL] + Flying Fortress flytiger @@ -28165,7 +28953,7 @@ fonz - Fonz [TTL] + Fonz foodf @@ -28515,6 +29303,10 @@ frogg Frog (bootleg on Galaxian hardware) + + froggeg + Frog (Hermatic, bootleg on Galaxian hardware from Electro Game) + frogger Frogger @@ -28641,15 +29433,39 @@ frtgenie - Fruit Genie (Version 1-1-03) + Fruit Genie (Version 1-1-03, set 1) + + + frtgeniea + Fruit Genie (Version 1-1-03, set 2) + + + frtgenieb + Fruit Genie (Version 1-1-03, set 3) + + + frtgeniec + Fruit Genie (Version 1-1-03, set 4) + + + frtgenied + Fruit Genie (VT 2.11) fruitbun Fruits & Bunny (World?) + + fruitcat + Fruit Cat (v2.00) + fruitpar - Fruit Paradise (V214) + Fruit Paradise (V214US) + + + fruitpar206us + Fruit Paradise (V206US) fruitpc @@ -28795,6 +29611,10 @@ fstation Fun Station Spielekoffer 9 Spiele + + fstgfish + Festival: Goldfish Scoop + fswords Fighters Swords (Korean release of Samurai Shodown III) @@ -28823,6 +29643,10 @@ ftimpact Fighters' Impact (Ver 2.02O) + + ftimpactg + Fighters' Impact (VER 2.10G) + ftimpactj Fighters' Impact (Ver 2.02J) @@ -28853,11 +29677,11 @@ fun4 - Fun Four (set 1) [TTL] + Fun Four (set 1) fun4a - Fun Four (set 2) [TTL] + Fun Four (set 2) funcsino @@ -29005,7 +29829,11 @@ futflash - Future Flash + Future Flash (set 1) + + + futflasha + Future Flash (set 2) futrquen @@ -29169,7 +29997,11 @@ gakupara - Quiz Gakuen Paradise (Japan) + Quiz Gakuen Paradise (Japan, ver. 1.04) + + + gakupara102 + Quiz Gakuen Paradise (Japan, ver. 1.02) gakusai @@ -29259,6 +30091,14 @@ galagao Galaga (Namco) + + galagap + Galaga (Patched) + + + galagawm + Galaga Wave Mixer (Hack) + galaktron Galaktron (Petaco S.A.) @@ -29315,14 +30155,14 @@ galaxiab Galaxia (set 3) - - galaxiac - Galaxia (set 4) - galaxiaj Galaxian (Namco set 2) + + galaxiamv + Diviertate Galaxia (Multivideo, Spanish bootleg of Galaxian) + galaxian Galaxian (Namco set 1) @@ -29437,6 +30277,10 @@ galgame4 + Galaxy Games StarPak 4 + + + galgame4p Galaxy Games StarPak 4 (prototype) @@ -29761,6 +30605,10 @@ gambler + The Gambler (11XF528902, US) + + + gamblra5 The Gambler (EHG0916-02, US) @@ -29781,7 +30629,7 @@ gametree - Game Tree [TTL] + Game Tree gammagic @@ -30339,6 +31187,10 @@ ganbare Ganbare! Marine Kun (Japan 2K0411) + + ganbaremo + Ganbare Momotarou Oni Taiji + gangonta Ganbare! Gonta!! 2 / Party Time: Gonta the Diver II (Japan Release) @@ -30819,6 +31671,10 @@ gdarius2 G-Darius Ver.2 (Ver 2.03J) + + gdariusg + G-Darius (VER 2.70G) + gdariusj G-Darius (Ver 2.01J) @@ -30873,7 +31729,7 @@ geisha - Geisha (0101408V, New Zealand) + Geisha (0101153V, NSW/ACT) geishaa6 @@ -30891,10 +31747,22 @@ geishajc Geisha - Jackpot Carnival (0351033, US) + + geishanz + Geisha (0101408V, New Zealand) + + + gekimaka + Geki Makaimura + gekiretu Quiz Gekiretsu Scramble (Japan) + + gekiretup + Quiz Gekiretsu Scramble (Japan, prototype) + gekiridn Gekirindan (Ver 2.3O 1995/09/21) @@ -30909,7 +31777,11 @@ gekisha - Mahjong Gekisha (Japan, Bet) + Mahjong Gekisha (Japan) + + + gekishap2 + Mahjong Gekisha Part II (Japan) gekisou @@ -31005,7 +31877,7 @@ gensitou - Genshitou 1930's + Genshitou 1930's (Japan) geostorm @@ -31499,6 +32371,10 @@ gl_wywhp Wish You Were Here Club (Global) (v2.9 Protocol) (Stealth) + + gladiador + Gladiadores (V1.0, CAA) + gladiatp Gladiators (pinball) @@ -31507,6 +32383,10 @@ gladiatr Gladiator (US) + + gladmort + GladMort (HB, Demo 2) + glass Glass (Ver 1.1, Break Edition, Checksum 49D5E66B, Version 1994) @@ -31851,6 +32731,10 @@ gnr_300f Guns N Roses (French 3.00, display F3.00) + + gnumber + Golden Number + go2000 Go 2000 @@ -31925,15 +32809,15 @@ goindol - Goindol (World) + Goindol (SunA, World) goindolj - Goindol (Japan) + Goindol (SunA, Japan) goindolu - Goindol (US) + Goindol (SunA, US) goinnuts @@ -32107,6 +32991,10 @@ goldnaxejd Golden Axe (set 4, Japan) (bootleg of FD1094 317-0121 set) + + goldnaxeng + Golden Axe Neo Geo (HB) + goldnaxeu Golden Axe (set 5, US) (FD1094 317-0122) @@ -32147,6 +33035,14 @@ goldnpkf Golden Poker Double Up (bootleg, set 4) + + goldnpkg + Golden Poker Double Up (bootleg, set 5) + + + goldnpkh + Golden Poker Double Up (tearoom*sara hack) + goldnpkr Golden Poker Double Up (Big Boy) @@ -32161,15 +33057,15 @@ goldpyr - Golden Pyramids (AHG1205-03, US) + Golden Pyramids (0100878V, ASP) - goldpyra + goldpyru Golden Pyramids (AHG1206-99, US) - goldpyrb - Golden Pyramids (0100878V, ASP) + goldpyrua + Golden Pyramids (AHG1205-03, US) goldsam @@ -32247,17 +33143,21 @@ gorf Gorf + + gorfirec + Gorf (Spain, Irecsa license) + gorfpgm1 Gorf (program 1) gorfpgm1f - Gorf (program 1, with French Language ROM) + Gorf (program 1, with French language ROM) gorfpgm1g - Gorf (program 1, with German Language ROM) + Gorf (program 1, with German language ROM) gork @@ -32287,6 +33187,10 @@ gotya Got-Ya (12/24/1981) + + gowcaiet + Voltage Fighter - Gowcaizer / Choujin Gakuen Gowcaizer (Eternal, Hack) + gowcaizr Voltage Fighter - Gowcaizer / Choujin Gakuen Gowcaizer @@ -32481,19 +33385,19 @@ gradius2 - Gradius II - GOFER no Yabou (Japan New Ver.) + Gradius II: GOFER no Yabou (Japan, new) gradius2a - Gradius II - GOFER no Yabou (Japan Old Ver.) + Gradius II: GOFER no Yabou (Japan, old) gradius2b - Gradius II - GOFER no Yabou (Japan Older Ver.) + Gradius II: GOFER no Yabou (Japan, older) gradius3 - Gradius III (World, program code R) + Gradius III (World, version R) gradius3a @@ -32501,11 +33405,15 @@ gradius3j - Gradius III (Japan, program code S) + Gradius III: Densetsu kara Shinwa e (Japan, version 3, newer) - gradius3js - Gradius III (Japan, program code S, split) + gradius3ja + Gradius III: Densetsu kara Shinwa e (Japan, version S) + + + gradius3jas + Gradius III: Densetsu kara Shinwa e (Japan, version S, split) gradius4 @@ -32575,6 +33483,10 @@ grand8 Le Grand 8 + + grand_l1 + Grand Lizard (L-1) + grand_l3 Grand Lizard (L-3) @@ -32683,6 +33595,10 @@ grdiansa Guardians / Denjin Makai II (P0-113A PCB) + + grdiansbl + Guardians / Denjin Makai II (bootleg) + grdiansl Guardians / Denjin Makai II (LBS, Hack) @@ -32747,6 +33663,10 @@ greenber Green Beret (Irem) + + gregular + Golden Regular (version 388/2000) + grescue Galaxy Rescue @@ -32795,6 +33715,10 @@ grmatch Grudge Match (Yankee Game Technology) + + grndprix + Grand Prix (Treasure Bonus bootleg) + grndtour Grand Tour (V100U) @@ -32863,6 +33787,10 @@ gryzor1 Gryzor (set 2) + + gryzorm + Gryzor (Modular System) + gs4002 Selection (Version 40.02TMB, set 1) @@ -32953,23 +33881,23 @@ gt103a1 - Trivia (Unsorted question roms) + Trivia (Unsorted question ROMs) gt103aa - Trivia (Version 1.03a Alt questions 1) + Trivia (Version 1.03a, alt questions 1) gt103ab - Trivia (Version 1.03a Alt questions 2) + Trivia (Version 1.03a, alt questions 2) gt103asx - Trivia (Version 1.03a Sex questions) + Trivia (Version 1.03a, sex questions) gt103asxa - Trivia (Version 1.03a Sex questions, Alt revision questions) + Trivia (Version 1.03a, sex questions, alt revision questions) gt2k @@ -33285,6 +34213,10 @@ gtmr2u + Great 1000 Miles Rally 2 USA (95/07/11) + + + gtmr2ua Great 1000 Miles Rally 2 USA (95/05/18) @@ -33309,15 +34241,15 @@ gtrak10 - Gran Trak 10/Trak 10/Formula K [TTL] + Gran Trak 10/Trak 10/Formula K gtrak10a - Gran Trak 10/Trak 10/Formula K (older) [TTL] + Gran Trak 10/Trak 10/Formula K (older) gtrak20 - Gran Trak 20/Trak 20/Twin Racer [TTL] + Gran Trak 20/Trak 20/Twin Racer gtrfrk2m @@ -33505,11 +34437,11 @@ gtsers11a - Trivia (Questions Series 11 Alt Question Rom, set 1) + Trivia (Questions Series 11, alt question ROM, set 1) gtsers11b - Trivia (Questions Series 11 Alt Question Rom, set 2) + Trivia (Questions Series 11, alt question ROM, set 2) gtsers12 @@ -33517,7 +34449,7 @@ gtsers12a - Trivia (Questions Series 12 Alt Question Rom) + Trivia (Questions Series 12, alt question ROM) gtsers14 @@ -33525,7 +34457,7 @@ gtsers14a - Trivia (Questions Series 14 Alt Question Rom) + Trivia (Questions Series 14, alt question ROM) gtsers15 @@ -33555,13 +34487,17 @@ gtsers7 Trivia (Questions Series 7) + + gtsers7a + Trivia (Questions Series 7, alt question ROM) + gtsers8 Trivia (Questions Series 8) gtsers8a - Trivia (Questions Series 8 Alt Question Rom) + Trivia (Questions Series 8, alt question ROM) gtsers9 @@ -33847,6 +34783,10 @@ gunhohki Mahou Keibitai Gun Hohki (Japan) + + gunkids + Hayauchi Gun Kids + gunlock Gunlock (Ver 2.3O 1994/01/20) @@ -33857,7 +34797,7 @@ gunman - Gunman [TTL] + Gunman gunmania @@ -33963,6 +34903,10 @@ gutangtn Guttang Gottong + + gutangtns + Guttang Gottong (Sega license) + guts Guts n' Glory (prototype) @@ -33993,7 +34937,7 @@ guzzlers - Guzzler (Swimmer Conversion) + Guzzler (Swimmer conversion) gvrxpsup @@ -34059,6 +35003,10 @@ gwarrior Galactic Warriors + + gwasu + Gwasuwon (Korea) + gwing2 Giga Wing 2 @@ -34075,6 +35023,10 @@ gwnn The Game With No Name! (0452501, US) + + gyakyu + Ginga Yakyu + gynotai Gynotai (Japan) @@ -34129,11 +35081,15 @@ hachoo - Hachoo! (set 1) + Hachoo! (World, set 1) hachooa - Hachoo! (set 2) + Hachoo! (World, set 2) + + + hachooj + Hachoo! (Japan) haekaka @@ -34191,6 +35147,10 @@ halleyscjp Halley's Comet (Japan, prototype) + + halltsk + Halloween (Ming-Yang Electronic / TSK, version 1.0) + hamaway Hammer Away (Japan, prototype) @@ -34203,14 +35163,34 @@ hamhouse Hamburger House + + hamhouse9 + Hamburger House 9 + hammer Hammer + + hammerch + Hammer Champ (Japan) + + + hana6pt2 + Hana Awase 6 Part II + hanaawas Hana Awase + + hanadojo + Hana Doujou (set 1) + + + hanadojoa + Hana Doujou (set 2) + hanagumi Sakura Taisen - Hanagumi Taisen Columns (J 971007 V1.010) @@ -34233,11 +35213,15 @@ hanaoji - Hana to Ojisan [BET] (ver 1.01, 1991/12/09) + Hana to Ojisan (ver 1.01, 1991/12/09) hanaojia - Hana to Ojisan [BET] (ver 1.00, 1991/08/23) + Hana to Ojisan (ver 1.00, 1991/08/23) + + + hanaren2 + Hana no Ren-Chan II (Japan) hanaroku @@ -34299,6 +35283,18 @@ hangzo Hangzo (Japan, prototype) + + hapfarm + Happy Farm (Ver. US.01.02.B) + + + haphippy + Happy Happy Hippy (Atronic) + + + haplucky + Happy Lucky! + happy6 Huanle Liuhe Yi (Happy 6-in-1) (M68K ver. V101, ARM ver. V102CN) @@ -34327,6 +35323,10 @@ hapytour Happy Tour + + harashi + Hana Arashi (Japan) + hardbody Hardbody (rev. D) @@ -34531,6 +35531,10 @@ haremchl Harem Challenge + + harikiri + Harikiri Junior Baseball (Japan, main ver. 1.0, video ver. 1.3) + harl_a10 Harley Davidson (Sega, CPU 1.03, display A1.00) @@ -34557,7 +35561,7 @@ harl_f18 - Harley Davidson (Stern, CPU 1.08, diaplay F1.05, France) + Harley Davidson (Stern, CPU 1.08, display F1.05, France) harl_f30 @@ -34653,7 +35657,11 @@ haunthig - Haunted House (IGS) + Haunted House (IGS, V109US) + + + haunthig101us + Haunted House (IGS, V101US) hawaii @@ -34669,7 +35677,7 @@ hayaosi1 - Hayaoshi Quiz Ouza Ketteisen - The King Of Quiz + Hayaoshi Quiz Ouza Ketteisen: The King Of Quiz hayaosi2 @@ -35069,7 +36077,11 @@ hbarrelu - Heavy Barrel (US) + Heavy Barrel (US, revision 3) + + + hbarrelua + Heavy Barrel (US, revision 1) hbarrelw @@ -35099,6 +36111,10 @@ hcastljo Akuma-Jou Dracula (Japan version N) + + hclimber + Hill Climber + hcrash Hyper Crash (version D) @@ -35235,6 +36251,10 @@ hedpanic Head Panic (ver. 0117, 17/01/2000) + + hedpanic830 + Head Panic (ver. 8.30) + hedpanica Head Panic (ver. 0702, 02/07/1999) @@ -35361,7 +36381,7 @@ hginga - Hanafuda Hana Ginga [BET] (Japan) + Hanafuda Hana Ginga (Japan) hgkairak @@ -35373,11 +36393,15 @@ hgokbang - Hanafuda Hana Gokou Bangaihen [BET] (Japan) + Hanafuda Hana Gokou Bangaihen (Japan) hgokou - Hanafuda Hana Gokou [BET] (Japan) + Hanafuda Hana Gokou (Japan, ver. B) + + + hgokoua + Hanafuda Hana Gokou (Japan, ver. A) hh @@ -35411,6 +36435,10 @@ hhotel Haunted Hotel + + hhunter + Haunted Hunter (Japan, ver 1.00) + hidctch2 Hidden Catch 2 (pcb ver 3.03) (Kor/Eng) (AT89c52 protected) @@ -35499,6 +36527,10 @@ hikcheck Hikaru Check ROM Board + + hilice + Hi Lice (V102FA) + himesiki Himeshikibu (Japan) @@ -35541,7 +36573,7 @@ hirolcas_210 - High Roller Casino (CPU 2.10, diaplay A2.00) + High Roller Casino (CPU 2.10, display A2.00) hirolcat @@ -35613,15 +36645,15 @@ hjingi - Hana Jingi (Japan set 1, Bet) + Hana Jingi (Japan set 1) hjingia - Hana Jingi (Japan set 2, Bet) + Hana Jingi (Japan set 2) hkagerou - Hana Kagerou [BET] (Japan) + Hana Kagerou (Japan) hldspin1 @@ -35721,7 +36753,7 @@ hnfubuki - Hana Fubuki [BET] (Japan) + Hana Fubuki (Japan) hngmnjpm @@ -35733,16 +36765,16 @@ hnkochou - Hana Kochou (Japan, Bet) - - - hnktonku - Honky Tonk (BHG1455, US) + Hana Kochou (Japan) hnoridur Hana Oriduru (Japan) + + hnrose + Hanafuda Night Rose (Japan, TSM008-04) + hnxmasev AV Hanafuda Hana no Christmas Eve (Japan 901204) @@ -35757,7 +36789,7 @@ hockyrmt - Hockey (Ramtek) [TTL] + Hockey (Ramtek) hocrash @@ -35815,6 +36847,10 @@ homura Homura (v2.04J) + + honeybee + Honey-Bee (v3.0) + honeydol Honey Doll @@ -35823,6 +36859,10 @@ honeypot Honey Pot (03J00241, NSW/ACT) + + honktonk + Honky Tonk (BHG1455, US) + honooinv Honoo no Invader (Japan, main ver. 1.35, video ver. 1.35) @@ -35831,6 +36871,14 @@ hook Hook (World) + + hook1v4 + Hook (1v4, Hack) + + + hook6h + Hook (6th Emperor, Hack) + hook_400 Hook (USA 4.01, display A4.00) @@ -35859,14 +36907,90 @@ hook_f401 Hook (USA 4.01, display F4.01) + + hookbo + Hook (Gai Gai, Hack) + + + hookdj + Hook (Item, Hack) + + + hookdszz + Hook (Summit War, Hack) + + + hookdw + Hook (Warriors, Hack) + + + hookgs + Hook (The Expendables, Hack) + + + hookgs2 + Hook (The Expendables II, Hack) + + + hookhd + Hook (Pirate Wars, Hack) + + + hookhd2 + Hook (Pirate Wars II, Hack) + hookj Hook (Japan) + + hookjy + Hook (Elite, Hack) + + + hookjyds + Hook (Elite Competition, Hack) + + + hooknx + Hook (Hook's Reversal, Hack) + + + hooknx2 + Hook (Hook's Reversal II, Hack) + + + hookpj + Hook (POK KAI, Hack) + + + hookpls + Hook (Plus, Hack) + + + hooksw + Hook (SW, Hack) + + + hooksw2 + Hook (SW2, Hack) + hooku Hook (US) + + hookx2 + Hook (X2, Hack) + + + hookxr + Hook (Xin Er, Hack) + + + hookxx + Hook (XX, Hack) + hoopitup Hoop it Up World Tour - 3 on 3 (Rev 23) @@ -35915,6 +37039,10 @@ horekidb2 Kid no Hore Hore Daisakusen (bootleg set 2) + + horekidb3 + Kid no Hore Hore Daisakusen - Neo Geo Conversion (HB) + horizon Horizon (Irem) @@ -36227,17 +37355,33 @@ hsf2 Hyper Street Fighter II: The Anniversary Edition (USA 040202) + + hsf230b + Hyper Street Fighter II: The Anniversary Edition (30% Blood, Hack) + hsf2a Hyper Street Fighter II: The Anniversary Edition (Asia 040202) + + hsf2app + Hyper Street Fighter II Plus Plus (Asia ver.170625 Hack by yumeji) + hsf2d Hyper Street Fighter II: The Anniversary Edition (Asia 040202 Phoenix Edition) (bootleg) hsf2da - Hyper Street Fighter II: The Anniversary Edition (040202 Asia Phoenix Edition, alt) + Hyper Street Fighter II: The Anniversary Edition (Asia 040202 alt Phoenix Edition) (bootleg) + + + hsf2df + Hyper Street Fighter II: The Anniversary Edition (Difficulty Fix, Hack) + + + hsf2ev2 + Hyper Street Fighter II: The Anniversary Edition (Easy Move v2, Hack) hsf2j @@ -36245,11 +37389,19 @@ hsf2j1 + Hyper Street Fighter II: The Anniversary Edition (Japan 040123) + + + hsf2j2 Hyper Street Fighter II: The Anniversary Edition (Japan 031222) + + hsf2jpp + Hyper Street Fighter II Plus Plus (Japan ver.170625 Hack by yumeji) + hsf2pp - Hyper Street Fighter II Plus Plus + Hyper Street Fighter II Plus Plus (USA ver.170625 Hack by yumeji) hshavoc @@ -36285,7 +37437,7 @@ htengoku - Hanafuda Hana Tengoku [BET] (Japan) + Hanafuda Hana Tengoku (Japan) hthero @@ -36415,6 +37567,10 @@ hustlerb6 Video Hustler (bootleg, set 4) + + hustlerb7 + Video Hustler (bootleg, set 5) + hustlerd Video Hustler (Dynamo Games) @@ -36491,6 +37647,10 @@ hwchampjd Heavyweight Champ (Japan) (bootleg of FD1094 317-0046 set) + + hwparty + Halloween Party (US.23.A) + hwrace High Way Race @@ -36529,7 +37689,7 @@ hyouban - Mahjong Hyouban Musume [BET] (Japan) + Mahjong Hyouban Musume (Japan) hypbbc2p @@ -36569,7 +37729,7 @@ hypernoid - Hypernoid (Ver. 20220224) + Hypernoid (HB, ver. 20220224) hyperpac @@ -36731,6 +37891,10 @@ icemania Ice Mania + + icescape + Icescape (V104FA) + ichiban Ichi Ban Jyan @@ -36755,6 +37919,10 @@ ichirk Puzzle & Action: Ichidant-R (Korea) + + icproul + Roulette (ICP-1 PCB) + id4 Independence Day (CPU 2.02, display A2.00) @@ -36773,7 +37941,7 @@ idhimitu - Idol no Himitsu [BET] (Japan 890304) + Idol no Himitsu (Japan 890304) idolmj @@ -36789,7 +37957,7 @@ idsoccert - Indoor Soccer (Tecfri license PCB) + Indoor Soccer (Tecfri) iemoto @@ -36797,7 +37965,7 @@ iemotom - Iemoto [BET] (Japan 871118) + Iemoto (Japan 871118, medal) ifslots @@ -36843,10 +38011,50 @@ igstet342 Tetris (v342R) + + igtmg133 + Multi Game (IGT, M0000133) + + + igtmg156 + Multi Game (IGT, M0000156) + + + igtmg159 + Multi Game (IGT, M0000159) + + + igtmg164 + Multi Game (IGT, M0000164) + + + igtmg166 + Multi Game (IGT, M0000166) + + + igtmg214 + Multi Game (IGT, M0000214) + + + igtmg247 + Multi Game (IGT, M0000247) + + + igtmg394 + Multi Game (IGT, M0000394) + + + igtmg535 + Multi Game (IGT, M0000535) + igtsc Super Cherry + + igtvp + Vision printer + ij_l3 Indiana Jones (L-3) @@ -37041,11 +38249,11 @@ incasunu - Inca Sun (CHG1458, US) + Inca Sun (DHG1577, US) incasunua - Inca Sun (DHG1577, US) + Inca Sun (CHG1458, US) incasunv @@ -37107,9 +38315,13 @@ indremmm Indian Dreaming - Maximillions (10130711, NSW/ACT) + + indunkgam + unknown gambling game on Inder pinball hardware + indy4 - Indy 4 [TTL] + Indy 4 indy500 @@ -37125,7 +38337,7 @@ indy800 - Indy 800 [TTL] + Indy 800 indy_113a @@ -37305,7 +38517,15 @@ inquiztr - Inquizitor + Inquizitor (V1.2) + + + inquiztr11 + Inquizitor (V1.1) + + + inquiztr12a + Inquizitor (V1.2, alt) insector @@ -37583,6 +38803,10 @@ inwinner Instant Winner (Russian) + + inwinners + Instant Winner (Spanish) + inyourfa In Your Face (North America, prototype) @@ -37605,7 +38829,11 @@ ippatsu - Ippatsu Gyakuten [BET] (Japan) + Ippatsu Gyakuten (Japan) + + + ippo2 + Hard Puncher Hajime no Ippo 2 - The Fighting! - Ouja e no chousen (VER.2.00J) iqblock @@ -37795,6 +39023,10 @@ itaten Itazura Tenshi (Japan) + + itazurac + Itazura Cockroach (Japan, ver 1.02) + itazuram Itazura Monkey @@ -43463,6 +44695,10 @@ jackuse Jack Use (Jackpot settings for Interflip slots machines) + + jackvent + Jack's Venture - Inca Treasure + jailbrek Jail Break @@ -43497,7 +44733,7 @@ jangou - Jangou [BET] (Japan) + Jangou (Japan) jangtaku @@ -43523,6 +44759,10 @@ janoha Jan Oh (set 2) + + janohb + Jan Oh (set 3) + janptr96 Janputer '96 (Japan) @@ -43533,7 +44773,11 @@ janputer - New Double Bet Mahjong (bootleg of Royal Mahjong) [BET] + New Double Bet Mahjong (bootleg of Royal Mahjong, set 1) + + + janputera + New Double Bet Mahjong (bootleg of Royal Mahjong, set 2) janshi @@ -43545,7 +44789,7 @@ janshinp - Mahjong Janshin Plus [BET] (Japan) + Mahjong Janshin Plus (Japan) jansou @@ -43567,6 +44811,14 @@ janyoup2 Janyou Part II (ver 7.03, July 1 1983) + + janyoup2702 + Janyou Part II (ver 7.02, July 1 1983) + + + janyoup2a + Janyou Part II (ver 7.03, July 1 1983, no title screen) + janyuki Jong Yu Ki (Japan) @@ -43583,6 +44835,30 @@ jb_10r Jack*Bot (1.0R) + + jbell + Jingle Bell (v200US) + + + jbell133i + Jingle Bell (Italy, V133I) + + + jbell141ue + Jingle Bell (EU, V141UE) + + + jbell153ue + Jingle Bell (EU, V153UE) + + + jbell155ue + Jingle Bell (EU, V155UE) + + + jbell157us + Jingle Bell (US, V157US) + jchan Jackie Chan - The Kung-Fu Master (rev 4?) @@ -43697,11 +44973,11 @@ jetfight - Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 1) [TTL] + Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 1) jetfighta - Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 2) [TTL] + Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 2) jetwave @@ -43723,38 +44999,22 @@ jgakuen1 Shiritsu Justice Gakuen: Legion of Heroes (Japan 971117) + + jhzb + Jin Hua Zhengba (V113CN) + jigkmgri - Jigoku Meguri (Japan) + Jigoku Meguri (Japan, rev 1) jigkmgria - Jigoku Meguri (Japan, hack?) + Jigoku Meguri (Japan) jin Jin - - jingbell - Jingle Bell (US, V157US) - - - jingbella - Jingle Bell (EU, V155UE) - - - jingbellb - Jingle Bell (EU, V153UE) - - - jingbellc - Jingle Bell (EU, V141UE) - - - jingbelli - Jingle Bell (Italy, V133I) - jingling Jingling Jiazu Genie 2000 @@ -43763,6 +45023,14 @@ jingystm Jingi Storm - The Arcade (Japan) (GDL-0037) + + jinhulu2 + Jin Hu Lu 2 (v412GS) + + + jinpaish + Jinpai Suoha - Show Hand (Chinese version 2004-09-22) + jitsupro Jitsuryoku!! Pro Yakyuu (Japan) @@ -43807,13 +45075,37 @@ jjsquawko J. J. Squawkers (older) + + jking02 + Jungle King 2002 (V209US) + + + jking103a + Jungle King (V103A) + + + jking200pr + Jungle King (V200PR) + + + jking302us + Jungle King (V302US) + + + jkrbonus + Joker Bonus + jkrmast - Joker Master (V515) + Joker Master 2000 Special Edition (V515) jkrmasta - Joker Master (V512) + Joker Master 2000 Special Edition (V512) + + + jkrpkra5 + Joker Poker (0301477V, New Zealand) jlasvegas @@ -43905,7 +45197,7 @@ jojo - JoJo's Venture (Euro 990128) + JoJo's Venture (Europe 990128) jojoa @@ -43921,7 +45213,7 @@ jojoba - JoJo's Bizarre Adventure (Euro 991015, NO CD) + JoJo's Bizarre Adventure (Europe 991015, NO CD) jojobajr1 @@ -43937,11 +45229,11 @@ jojobaner1 - JoJo's Bizarre Adventure (Euro 990927, NO CD) + JoJo's Bizarre Adventure (Europe 990927, NO CD) jojobaner2 - JoJo's Bizarre Adventure (Euro 990913, NO CD) + JoJo's Bizarre Adventure (Europe 990913, NO CD) jojobanr1 @@ -43957,11 +45249,11 @@ jojobar1 - JoJo's Bizarre Adventure (Euro 990927) + JoJo's Bizarre Adventure (Europe 990927) jojobar2 - JoJo's Bizarre Adventure (Euro 990913) + JoJo's Bizarre Adventure (Europe 990913) jojoj @@ -43989,11 +45281,11 @@ jojor1 - JoJo's Venture (Euro 990108) + JoJo's Venture (Europe 990108) jojor2 - JoJo's Venture (Euro 981202) + JoJo's Venture (Europe 981202) jojou @@ -44019,6 +45311,10 @@ jokercrd Joker Card 300 (Ver.A267BC, encrypted) + + jokercrdf + Joker Card (encrypted) + jokpoker Joker Poker (Version 16.03B) @@ -44213,11 +45509,11 @@ jongtei - Mahjong Jong-Tei [BET] (Japan, NM532-01) + Mahjong Jong-Tei (Japan, NM532-01) jongteia - Mahjong Jong-Tei [BET] (Japan, Techno-Top license) + Mahjong Jong-Tei (Japan, Techno-Top license) josvolly @@ -44325,7 +45621,7 @@ jppyex98 - Jikkyou Powerful Pro Yakyuu EX '98 (GC811 VER. JAA) + Jikkyou Pawafuru Puro Yakyu EX '98 (GC811 VER. JAA) jptparty @@ -44399,6 +45695,14 @@ jumanji Jumanji (V502) + + jumanjia + Jumanji (V113) + + + jumbogod + Jumbo Godzilla + jumpbean Jumping Beans (0100161V, NSW/ACT) @@ -44409,7 +45713,15 @@ jumpbugb - Jump Bug (bootleg) + Jump Bug (bootleg, set 1) + + + jumpbugbc + Jump Bug (bootleg, set 3) + + + jumpbugbrf + Jump Bug (bootleg, set 2) jumpcoas @@ -44443,6 +45755,10 @@ jumpjoey Jumpin' Joeys (0100383V, NSW/ACT) + + jumpjoeyu + Jumpin' Joeys (DHG4735-02, US) + jumpjump Jump Jump @@ -44483,6 +45799,10 @@ jungjuic Jungle Juice (0200240V, ASP) + + jungleani + Jungle's Animals (v3.0) + jungleby Jungle Boy (bootleg) @@ -44587,6 +45907,14 @@ jwildb52h Joker's Wild (B52 system, BP55114-V1104, Ver.054NMV, Harrah's GFX) + + jxry + Jixiang Ruyi (V116CN) + + + jxzh + Jinxiu Zhonghua + jy_03 Junk Yard (0.3) @@ -44657,15 +45985,15 @@ kaguya - Mahjong Kaguyahime [BET] (Japan 880521) + Mahjong Kaguyahime (Japan 880521) kaguya2 - Mahjong Kaguyahime Sono2 [BET] (Japan 890829) + Mahjong Kaguyahime Sono2 (Japan 890829) kaguya2f - Mahjong Kaguyahime Sono2 Fukkokuban [BET] (Japan 010808) + Mahjong Kaguyahime Sono2 Fukkokuban (Japan 010808) kaiserkj @@ -44733,7 +46061,7 @@ kanatuen - Kanatsuen no Onna [BET] (Japan 880905) + Kanatsuen no Onna (Japan 880905) kangaroa @@ -44757,7 +46085,7 @@ kangarool - Kangaroo (Loewen-Automaten) + Kangaroo (Löwen-Automaten) kaos @@ -44801,7 +46129,7 @@ karatevs - Taisen Karate Dou (Japan VS version) + Taisen Karate Dou (Japan) karatour @@ -44831,13 +46159,17 @@ karnovjbl Karnov (Japan, bootleg with NEC D8748HD) + + karnovng + Karnov Neo Geo (HB) + karnovr Karnov's Revenge / Fighter's History Dynamite karnovre - Karnov's Revenge / Fighter's History Dynamite (Revolution v0.1, Hack) + Karnov's Revenge / Fighter's History Dynamite - Revolution (Hack, v0.2) karous @@ -44848,7 +46180,7 @@ Kart Duel (World, KTD2/VER.A) - kartduelj + kartduelja Kart Duel (Japan, KTD1/VER.A) @@ -44917,19 +46249,19 @@ kchampvs - Karate Champ (US VS version, set 1) + Karate Champ: Player Vs Player (US, set 1) kchampvs2 - Karate Champ (US VS version, set 2) + Karate Champ: Player Vs Player (US, set 2) kchampvs3 - Karate Champ (US VS version, set 3) + Karate Champ: Player Vs Player (US, set 3) kchampvs4 - Karate Champ (US VS version, set 4) + Karate Champ: Player Vs Player (US, set 4) kd2001 @@ -45177,7 +46509,7 @@ kf2k1ult - The King of Fighters 2001 (Ultimate, Hack) + The King of Fighters 2001 (All Boss Plus, Hack) kf2k23rd @@ -45224,8 +46556,8 @@ The King of Fighters 2002 Plus (bootleg set 1) - kf2k2ps2 - The King of Fighters 2002 (PlayStation 2, Hack) + kf2k2ps2re + The King of Fighters 2002 (PlayStation 2 Plus 2025 ver 1.0, Hack) kf2k3bl @@ -45281,16 +46613,20 @@ kgbird - K.G. Bird (4VXFC5341, New Zealand, 5c) - - - kgbirda - K.G. Bird (4VXFC5341, New Zealand, 10c) + K.G. Bird (3XF5264H04, US) kgbirda5 K.G. Bird (0200024V, NSW/ACT) + + kgbirdnz + K.G. Bird (4VXFC5341, New Zealand, 5c) + + + kgbirdnza + K.G. Bird (4VXFC5341, New Zealand, 10c) + kick Kick (upright) @@ -45345,11 +46681,11 @@ kickoff - Kick Off - Jaleco Cup (Japan) + Kick Off: Jaleco Cup (Japan) kickoffb - Kick Off - World Cup (bootleg) + Kick Off: World Cup (bootleg) kickridr @@ -45413,12 +46749,20 @@ killbld109 - The Killing Blade (V109 alt, China) + The Killing Blade (ver. 109 alt, Chinese Board) + + + killbldjq + The Killing Blade - Infinite Energy (Hack) killbldp The Killing Blade Plus / Ao Jian Kuang Dao Jiaqiang Ban (China, ver. 300) + + killbldqy + The Killing Blade - Heroes (Hack) + killcom Killer Comet @@ -45503,6 +46847,10 @@ kingrt66p The King of Route 66 (prototype) + + kingsran + King's Ransom (0301689V, New Zealand) + kingt_l1 King Tut (Shuffle) (L-1) @@ -45703,6 +47051,10 @@ kngtmare Knightmare (prototype) + + knightar + Knights in Armor + knightb Knight Boy (bootleg of KiKi KaiKai, set 1) @@ -45733,23 +47085,27 @@ knightsb4 - Knights of the Round (bootleg with YM2151 + 2xMSM5205, 911127 etc, set 4) + Knights of the Round (bootleg with YM2151 + 2xMSM5205) knightsb5 - Knights of the Round (bootleg, 911127 Japan, set 5) + Knights of the Round (bootleg, Japan 911127) knightsc - Knights of the Round (T-Chi) + Knights of the Round (hack, Chinese Translation) + + + knightsch + Knight's Chance (HB) knightsh - Knights of the Round (hack set 1) + Knights of the Round (hack) knightsh2 - Knights of the Round (hack set 2, 911127 etc) + Knights of the Round (bootleg, World 911127) knightsj @@ -45809,7 +47165,7 @@ kodda - The King of Dragons (Phoenix bootleg, 910731 etc) + The King of Dragons (World 910731 Phoenix Edition) (bootleg) koddw @@ -45843,6 +47199,10 @@ kodr2 The King of Dragons (World 910731) + + kodsr + The King of Dragons (Remix Special, Hack) + kodu The King of Dragons (USA 910910) @@ -45943,6 +47303,10 @@ kof2k1ru The King of Fighters 2001 (Remix Ultra 2.3, Hack) + + kof2k2br + The King of Fighters 2002 (Portuguese edition v2.0, Hack) + kof2k2fd The King of Fighters 2002 (Fully Decrypted) @@ -45979,6 +47343,10 @@ kof2k2ts The King of Fighters 2002 (Battle with Orochi, Hack) + + kof2k3br + The King of Fighters 2003 (Portuguese edition v1.0, Hack) + kof2k3fd The King of Fighters 2003 (Fully Decrypted) @@ -46023,10 +47391,22 @@ kof94bs The King of Fighters '94 (Boss, Hack) + + kof94nr2 + The King of Fighters '94 (New Remix 2018 Rev.2, Hack) + kof94rz The King of Fighters '94 (Hack Boss Remixed) + + kof94te + The King of Fighters '94 (Team Edit Edition: KOF95 style portraits v1.4.2, Hack) + + + kof94tea + The King of Fighters '94 (Team Edit Edition: KOF94 style portraits v1.4.2, Hack) + kof95 The King of Fighters '95 (NGM-084) @@ -46055,6 +47435,14 @@ kof95sp The King of Fighters '95 (Special 2017, Hack) + + kof95sr3 + The King of Fighters '95 (Super Remix V3, Hack) + + + kof95t + The King of Fighters '95 (Optimized, Hack) + kof96 The King of Fighters '96 (NGM-214) @@ -46123,6 +47511,10 @@ kof97cbt The King of Fighters '97 (Combo Training, Hack, Ver. 2018) + + kof97ce + The King of Fighters '97 (Champion Edition, Hack) + kof97cn The King of Fighters '97 (10th Anniversary Chinese Edition, Hack) @@ -46187,6 +47579,10 @@ kof97rc The King of Fighters '97 (Random Combo, Hack, Ver. 2010) + + kof97rm + The King of Fighters '97 (Randomized, Hack) + kof97sp The King of Fighters '97 (Special, Hack) @@ -46245,7 +47641,7 @@ kof98eck - The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Easy Combo King, Hack) + The King of Fighters '98 - The Slugfest / King of Fighters '98 - Dream Match Never Ends (Easy Combo Edition, Hack) kof98evo @@ -46351,6 +47747,10 @@ kof99p The King of Fighters '99 - Millennium Battle (prototype) + + kof99pls + The King of Fighters '99 - Millennium Battle (Plus, Hack) + kof99rp The King of Fighters '99 - Millennium Battle (Remix Pro v2.01 Final, Hack) @@ -46365,7 +47765,7 @@ kof99t - The King of Fighters '99 - Millennium Battle (Plus, Hack) + The King of Fighters '99 - Millennium Battle (Optimized, Hack) kofnw @@ -46491,6 +47891,10 @@ kong2600 Donkey Kong (2600 graphics, hack) + + kongball + Kong Ball (prototype) + konhaji Konnano Hajimete! (Japan) @@ -46521,7 +47925,7 @@ korinaim - Mahjong-zukino Korinai Menmen [BET] (Japan 880920) + Mahjong-zukino Korinai Menmen (Japan 880920, medal) korokoro @@ -46557,11 +47961,15 @@ kotbinsp - Kkot Bi Nyo Special (Korea) + Kkotbinyeo Special (Korea) kotbinyo - Kkot Bi Nyo (Korea) + Kkotbinyeo (Korea) + + + kotbinyosu + Speed Up / Kkotbinyeo (Korea) kothello @@ -46641,7 +48049,7 @@ kov2dzxx - Knights of Valour 2 (Dou Zhuan Xing Xuan, ver.110) + Knights of Valour 2 - Dou Zhuan Xing Xuan (Hack, ver.110) kov2nl @@ -46693,7 +48101,15 @@ kov2pfwll - Knights of Valour 2 Plus - Feng Wu Long Yin (Ver. 205S, Hack) + Sanguo Zhan Ji 2 Fengwu Longyin (ver. 205S, , Hack of Sanguo Zhan Ji 2 Qunxiong Zhengba) + + + kov2pfwlys + Sanguo Zhan Ji 2 Fengwu Longyin (ver. S0709, Hack of Sanguo Zhan Ji 2 Qunxiong Zhengba) + + + kov2pshjz + Knights of Valour 2 Plus - Shuang Han Jiu Zhou (Hack) kov2pshpd @@ -46773,7 +48189,7 @@ kovlsyx - San Guo Zhan Ji - Luan Shi Ying Xiong + Sanguo Zhan Ji - Luan Shi Ying Xiong kovlsyxqszl @@ -46795,6 +48211,10 @@ kovp12em Knights of Valour Plus 2012 - Nightmare + + kovphsqj + Sanguo Zhan Ji - Heng Sao Qian Jun (Hack) + kovplus Knights of Valour Plus / Sanguo Zhan Ji Zhengzong Plus / Sangoku Senki Masamune Plus (ver. 119, set 1) @@ -46807,49 +48227,57 @@ kovplusa Knights of Valour Plus / Sanguo Zhan Ji Zhengzong Plus / Sangoku Senki Masamune Plus (ver. 119, set 2) - - kovplushsqj - San Guo Zhan Ji - Heng Sao Qian Jun (Hack) - kovplusq Knights of Valour Plus - New Biography of Heroes (V120) - kovpluststd - San Guo Zhan Ji - Zhen Tun Shi Tian Di (Hack) + kovptstd + Sanguo Zhan Ji - Zhen Tun Shi Tian Di (Hack) + + + kovpxba + Sanguo Zhan Ji - Xiao Bing Zheng Ba (Ver.A, Hack) + + + kovpxbb + Sanguo Zhan Ji - Xiao Bing Zheng Ba (Ver.B, Hack) kovqhsgs Quanhuang Sanguo Tebie Ban (bootleg of Knights of Valour Super Heroes, V303CN, Nov 21 2008 19:03:49) + + kovqhsgs302 + Quanhuang Sanguo Tebie Ban (bootleg of Knights of Valour Super Heroes, V302CN, Dec 29 2010 16:31:32) + kovqhsgsa - Knights of Valour: Quan Huang San Guo Special / Sangoku Senki: Quan Huang San Guo Special (V303CN alt, China) + Quanhuang Sanguo Tebie Ban (bootleg of Knights of Valour Super Heroes, V303CN alt, China) kovqhsgsd - Knights of Valour: Quan Huang San Guo Special / Sangoku Senki: Quan Huang San Guo Special (V303CN, China, decrypted version) + Quanhuang Sanguo Tebie Ban (bootleg of Knights of Valour Super Heroes, V303CN, China, decrypted version) kovqxzbws - San Guo Zhan Ji - Qun Xiong Zheng Ba Feng Yun Zai Qi (Hack, ver. 2022-07-31) + Qunxiong Zhengba - Fengyun Zai Qi (Wushuang, Hack, ver. 20230501) kovsgqyz - Sanguo Qunying Chuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 1) + Sanguo Qunying Zhuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 1) kovsgqyza - Sanguo Qunying Chuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 2) + Sanguo Qunying Zhuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 2) kovsgqyzb - Sanguo Qunying Chuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 3) + Sanguo Qunying Zhuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 3) kovsgqyzc - Knights of Valour: SanGuo QunYingZhuan / Sangoku Senki: SanGuo QunYingZhuan (V119, set 4) + Sanguo Qunying Zhuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 4) kovsgqyzd @@ -46879,6 +48307,14 @@ kovshb Knights of Valour Superheroes / Sangoku Senki Superheroes (bootleg, V104, China) + + kovshdf + Knights of Valour Superheroes / Sangoku Senki Superheroes - Dungeons & Warriors (Hack) + + + kovshmg + Knights of Valour Superheroes / Sangoku Senki Superheroes - Muggle Legend (Hack) + kovshp Knights of Valour Super Heroes Plus / Sanguo Zhan Ji Luanshi Xiaoxiong (ver. 101) @@ -46889,7 +48325,7 @@ kovshp101 - Knights of Valour Super Heroes Plus / Sangoku Senki Super Heroes Plus (V101, China) + Knights of Valour Super Heroes Plus / Sanguo Zhan Ji Luanshi Xiaoxiong (ver. 101, Chinese Board) kovshpd3dw @@ -46907,10 +48343,18 @@ kovshpzqhl Knights of Valour Super Heroes Plus (The Best Firepower In 2020, 2020-02-06) + + kovshszl + Knights of Valour Superheroes / Sangoku Senki Superheroes - The Road Beyond the Gods (Hack) + kovshxas Aoshi Sanguo (bootleg of Knights of Valour Super Heroes Plus, V202CN, Oct 6 2008 09:59:26) + + kovshxsh + Sangoku Senki Super Heroes - Evil & Darkness Plus (Hack) + kovytzy Knights of Valour Super Heroes / Sanguo Zhan Ji Fengyun Zaiqi / Sangoku Senki Super Heroes (SANGO EX+) (ver. 201 'Yitong Zhongyuan', China) @@ -46941,7 +48385,7 @@ kram - Kram (set 1) + Kram (rev 1) kram2 @@ -46951,6 +48395,14 @@ kram3 Kram (encrypted) + + krama + Kram + + + krame + Kram (encrypted) + kroozr Kozmik Kroozr @@ -47104,7 +48556,7 @@ Kuzmich-Egorych - kyhatonu + kyhaton Keep Your Hat On (BHG1204, US) @@ -47117,7 +48569,7 @@ kyuhito - Kyukyoku no Hito [BET] (Japan 880824) + Kyukyoku no Hito (Japan 880824) kyukaidk @@ -47159,6 +48611,10 @@ labyrunr Labyrinth Runner (Japan) + + labyrunrf + Labyrinth Runner (World Ver. F) + labyrunrk Labyrinth Runner (World Ver. K) @@ -47237,15 +48693,15 @@ ladymakr - Lady Maker [BET] (Japan) + Lady Maker (Japan) ladymstr - Lady Master of Kung Fu (set 1, newer) + Lady Master of Kung Fu (rev 1) - ladymstr2 - Lady Master of Kung Fu (set 2, older) + ladymstra + Lady Master of Kung Fu ladyshot @@ -47377,7 +48833,11 @@ larana - La Rana + La Rana (set 1) + + + larana2 + La Rana (set 2) laser @@ -47473,7 +48933,7 @@ lastblsp - The Last Blade / Bakumatsu Roman - Gekka no Kenshi (Special 2017, Hack) + The Last Blade / Bakumatsu Roman - Gekka no Kenshi (Special 2017 v2.5 FINAL, Hack) lastbrnx @@ -47507,6 +48967,10 @@ lastduelj Last Duel (Japan) + + lastduelm + Last Duel (Modular System) + lastduelo Last Duel (US Old Ver.) @@ -47685,7 +49149,11 @@ ldrun3j - Lode Runner III - Majin no Fukkatsu (Japan) + Lode Runner III - Majin no Fukkatsu (Japan, rev. A) + + + ldrun3jc + Lode Runner III - Majin no Fukkatsu (Japan, rev. C) ldrun3jp @@ -47825,7 +49293,7 @@ lemans - Le Mans [TTL] + Le Mans lemans24 @@ -47919,6 +49387,10 @@ letsdnce Let's Dance + + letsgof + Let's Go Fishing (5XF5196I02, US) + letsgoju Let's Go Jungle (Export) @@ -48083,10 +49555,30 @@ lhcdb Last Hope CD Beta (Neo CD conversion) + + lhdmg + Long Hu Da Manguan (V102C3M) + + + lhdmgp + Long Hu Da Manguan Duizhan Jiaqiang Ban (V400C3M) + + + lhdmgp200c3m + Long Hu Da Manguan Duizhan Jiaqiang Ban (V200C3M) + + + lhfy + Long Hu Feng Yun Gao Qing Ban (V206CN) + lhtb Long Hu Tebie Ban (V101CN) + + lhzb + Long Hu Zhengba (China, VS105M, set 1) + lhzb2 Long Hu Zhengba 2 (China, set 1) @@ -48097,15 +49589,35 @@ lhzb3 - Long Hu Zhengba III + Long Hu Zhengba III (V400CN) + + + lhzb3106c5m + Long Hu Zhengba III (V106C5M) lhzb3in1 Long Hu Zhengba San He Yi (V100CN) + + lhzb3sjb + Long Hu Zhengba III Shengji Ban (V300C5) + lhzb4 - Long Hu Zhengba 4 + Long Hu Zhengba 4 (V104CN) + + + lhzb4dhb + Long Hu Zhengba 4 Dui Hua Ban (V203CN) + + + lhzba + Long Hu Zhengba (China, VS105M, set 2) + + + lhzbgqb + Long Hu Zheng Ba Gao Qing Ban (V105CN) liberat2 @@ -48163,6 +49675,10 @@ lineking Line King (0252534, US) + + link + Link (Korean bootleg of Atari Tetris) + linkypip Linky Pipe @@ -48185,7 +49701,7 @@ livegal - Live Gal [BET] (Japan 870530) + Live Gal (Japan 870530) livequiz @@ -48201,11 +49717,15 @@ lkage - The Legend of Kage + The Legend of Kage (rev 2) + + + lkagea + The Legend of Kage (rev 1) lkageb - The Legend of Kage (bootleg set 1) + The Legend of Kage lkageb2 @@ -48216,20 +49736,24 @@ The Legend of Kage (bootleg set 3) - lkageb4 - The Legend of Kage (bootleg set 4) + lkagebl1 + The Legend of Kage (bootleg set 1) - lkagem - The Legend of Kage (MSM5232 sound) + lkagebl2 + The Legend of Kage (bootleg set 2) + + + lkagebl3 + The Legend of Kage (bootleg set 3) - lkageo - The Legend of Kage (older) + lkagebl4 + The Legend of Kage (bootleg set 4) - lkageo2 - The Legend of Kage (oldest) + lkagem + The Legend of Kage (rev 2, MSM5232 sound) ll3 @@ -48429,14 +49953,18 @@ looptris - Looptris (v.2021-12-26) + Looptris (HB, v. 20211226) looptrsp - Looptris Plus (v.2022-12-24) + Looptris Plus (HB, ver. 20221224) lordgun + Lord of Gun (World) + + + lordgunu Lord of Gun (USA) @@ -48729,7 +50257,7 @@ lovehous - Mahjong Love House [BET] (Japan 901024) + Mahjong Love House (Japan 901024) loverboy @@ -48751,6 +50279,10 @@ lrescue Lunar Rescue + + lrescueabl + Lunar Rescue (Artic bootleg) + lrescuem Lunar Rescue (Model Racing bootleg, set 1) @@ -48797,19 +50329,31 @@ ltcasin2 - Little Casino II v18.1 + Little Casino II (v30.0) ltcasin2a - Little Casino II v17.0 + Little Casino II (v18.1) + + + ltcasin2b + Little Casino II (v17.0) ltcasino - Little Casino + Little Casino (set 1) + + + ltcasinoa + Little Casino (set 2) + + + lthyp + Long Teng Hu Yao Duizhan Jiaqiang Ban (S104CN) ltorb - Jonas Indiana and the Lost Temple of RA (20050717) + Jonas Indiana and the Lost Temple of RA (HB, ver. 20050717) ltswords @@ -48829,7 +50373,7 @@ luckgrln - Lucky Girl (newer Z180 based hardware) + Lucky Girl (newer Z180-based hardware) luckshel @@ -48839,6 +50383,10 @@ luckshela Lucky Shell (Ukraine, V. 42.10) + + luckstrn + Lucky Star (newer Z180-based hardware) + lucky21 Lucky 21 @@ -48867,6 +50415,10 @@ lucky74b Lucky 74 (bootleg, set 2) + + lucky75 + Lucky 75 + lucky7i Lucky 7 (Impera, V04/91a, set 1) @@ -48883,6 +50435,10 @@ lucky88 Lucky 88 (10241411, NSW/ACT) + + lucky88w + Lucky 88 (Wing) + lucky8a New Lucky 8 Lines (set 2, W-4) @@ -48931,6 +50487,22 @@ lucky8l New Lucky 8 Lines (set 11, W-4) + + lucky8m + New Lucky 8 Lines (set 12, W-4, encrypted) + + + lucky8n + New Lucky 8 Lines (set 13) + + + lucky8o + New Lucky 8 Lines (set 14, W-4, Yamate) + + + lucky8p + New Lucky 8 Lines (set 15, W-4, Cleco bootleg) + lucky_l1 Lucky Seven (L-1) @@ -48971,6 +50543,10 @@ luckycoin Lucky Coin (Jun 24 2002) + + luckycrs + Lucky Cross (V106SA) + luckygrl Lucky Girl (Wing) @@ -48991,6 +50567,18 @@ luckyrlt Lucky Roulette Plus (6-players, Spanish) + + luckyseven + Lucky Seven + + + luckystr + Lucky Star + + + luckyvl + Lucky V Line + luckywld Lucky & Wild @@ -49085,7 +50673,7 @@ lvpoker - Lovely Poker [BET] + Lovely Poker lw3_200 @@ -49129,12 +50717,16 @@ lwings - Legendary Wings (US set 1) + Legendary Wings (US, rev. C) lwings2 Legendary Wings (US set 2) + + lwingsa + Legendary Wings (US) + lwingsb Legendary Wings (bootleg) @@ -78907,6 +80499,14 @@ ma6710 Multi-Action 6710-13 + + ma6710a + Multi-Action 6710-21 + + + ma6711 + Multi-Action 6711-14-R0A + ma7551p Multi-Action 7551-21-R2P @@ -78920,9 +80520,25 @@ Multi-Action 7556-00-R2 - ma7558 + ma7558r0 Multi-Action 7558-01-R0 + + ma7558r4 + Multi-Action 7558-01-R4 + + + ma8340 + Multi-Action 8340-01-R1 + + + ma8350 + Multi-Action 8350-00-R1 + + + ma9800 + Multi-Action 9800-20-R0 + mac_1808 unknown game (MAC #1808) @@ -79041,11 +80657,11 @@ madball - Mad Ball V2.0 + Mad Ball (V2.0) madballn - Mad Ball V2.0 (With Nudity) + Mad Ball (V2.0, with nudity) madcrash @@ -79103,9 +80719,17 @@ madgearj Mad Gear (Japan) + + madmoney2 + Mad Money 2 + madmotor - Mad Motor (prototype) + Mad Motor (prototype, set 1) + + + madmotora + Mad Motor (prototype, set 2) madrace @@ -79243,6 +80867,22 @@ magibombj Magic Bomb (Ver. AA.72.C, 25/05/05) + + magibombk + Magic Bomb (Ver. A3.0) + + + magibombl + Magic Bomb (Ver. AB4.3A, 10/30/01S) + + + magibombm + Magic Bomb (Ver. AB5.3, 20/06/03) + + + magibombn + Magic Bomb (Ver. EB4.0, 05/04/01) + magic Magic @@ -79381,7 +81021,11 @@ magictch - Magic Touch + Magic Touch (v. 28.05) + + + magictcha + Magic Touch (v. 24.03) magictg @@ -79403,6 +81047,10 @@ magimaskb Magic Mask (DHG1309, US) + + magimaskc + Magic Mask (AHG1207, US) + magipur Magic Purple @@ -79415,10 +81063,42 @@ magixb Magix / Rock (no copyright message) + + magjack + Magical Jack (VA 4.00) + + + magjacka + Magical Jack (VA 3.30) + + + magjackb + Magical Jack (VA 3.11) + + + magjackc + Magical Jack (VA 2.0) + + + magjackp + Magical Jack Plus (VA 6.03) + + + magjackpa + Magical Jack Plus (VA 6.01) + magjoker Magic Joker (v1.25.10.2000) + + magkengo + Magical Kengo 2005 (Ver. 1.2) + + + magkengou + Magical Kengo 2005 (Ver. USA 1.10) + maglord Magician Lord (NGM-005) @@ -79605,7 +81285,7 @@ majs101b - Mahjong Studio 101 [BET] (Japan) + Mahjong Studio 101 (Japan) majtitl2 @@ -79637,7 +81317,7 @@ majxtal7 - Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan, Bet) + Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan) makaiden @@ -79645,7 +81325,7 @@ makaijan - Makaijan [BET] (Japan) + Makaijan (Japan) makaimuc @@ -79661,15 +81341,19 @@ makaimurb - Makaimura (Japan Revision B) + Makaimura (Japan revision B) + + + makaimurbbl + Makaimura (Japan revision B bootleg) makaimurc - Makaimura (Japan Revision C) + Makaimura (Japan revision C) makaimurg - Makaimura (Japan Revision G) + Makaimura (Japan revision G) maketrax @@ -79689,7 +81373,7 @@ maletmad - Mallet Madness v2.1 + Mallet Madness (v2.1) malzak @@ -79807,6 +81491,10 @@ mappyj Mappy (Japan) + + maquinati + La Máquina del Tiempo + marble Marble Madness (set 1) @@ -79889,11 +81577,11 @@ marmagicu - Margarita Magic (EHG1558, US) + Margarita Magic (EHG1559, US) marmagicua - Margarita Magic (EHG1559, US) + Margarita Magic (EHG1558, US) marmatcp @@ -80117,7 +81805,7 @@ matchemg - Match'em Up (6221-55, U5-1 German) + Match'em Up (6221-55, U5-1, German) matchit @@ -80127,6 +81815,10 @@ matchit2 Match It II + + matchitb + Match It (bootleg) + matmania Mat Mania @@ -80137,7 +81829,7 @@ matrimbh - Matrimelee / Shin Gouketsuji Ichizoku Toukon (Enable Hidden Characters V2) + Matrimelee ~ Shin Gouketsuji Ichizoku Toukon (Hack, Enable Hidden Characters V2) matrimbl @@ -80175,6 +81867,10 @@ maverik Maverik + + mawasunda + Mawasunda!! (V2.08J 2000/02/01 11:02:54) + maxf_102 Maximum Force v1.02 @@ -80389,7 +82085,7 @@ mcheonru - Ma Cheon Ru + Ma Cheon Ru (Korea) mchilli @@ -80405,7 +82101,7 @@ mcitylov - City Love [BET] (Japan 860904) + City Love (Japan 860904, medal) mclass @@ -80473,7 +82169,7 @@ mead4in1 - Meadows 4 in 1 [TTL] + Meadows 4 in 1 mechatt @@ -80785,27 +82481,27 @@ megazone - Mega Zone (program code L) + Mega Zone (version L) megazonea - Mega Zone (unknown program code 1) + Mega Zone (unknown version 1) megazoneb - Mega Zone (unknown program code 2) + Mega Zone (unknown version 2) megazoneh - Mega Zone (program code H) + Mega Zone (version H) megazonei - Mega Zone (program code I) + Mega Zone (version I) megazonej - Mega Zone (program code J) + Mega Zone (version J) megrescu @@ -80877,7 +82573,7 @@ mercsc - Senjo no Ookami II (T-Chi) + Senjo no Ookami II (hack, Chinese Translation) mercsj @@ -80923,6 +82619,10 @@ metalb Metal Black (World) + + metalba + Metal Black (World, single PCB) + metalbj Metal Black (Japan) @@ -81149,43 +82849,139 @@ mg_alad - Aladdin's Cave (Maygay M2) + Aladdin's Cave (Maygay M2, SW7-536 SW7-465) + + + mg_alada + Aladdin's Cave (Maygay M2, SW8-323 SW8-299) + + + mg_aladb + Aladdin's Cave (Maygay M2, SW8-322 SW8-298) + + + mg_aladc + Aladdin's Cave (Maygay M2, SW8-298 SW8-144) mg_bb - Big Break (Maygay M2) + Big Break (Maygay M2, SW6-618 SW6-601) + + + mg_bba + Big Break (Maygay M2, SW6-656 SW6-635) + + + mg_bbb + Big Break (Maygay M2, SW6-657 SW6-636) mg_ewg - Each Way Gambler (Maygay M2) + Each Way Gambler (Maygay M2, SA6_127 SA6_113) + + + mg_ewga + Each Way Gambler (Maygay M2, SA6_128 SA6_114) + + + mg_ewgb + Each Way Gambler (Maygay M2, SA6_129 SA6_115) + + + mg_ewgc + Each Way Gambler (Maygay M2, SA6_130 SA6_115) + + + mg_ewgd + Each Way Gambler (Maygay M2, SA6_281 NONE) + + + mg_ewge + Each Way Gambler (Maygay M2, SA6_282 NONE) + + + mg_ewgf + Each Way Gambler (Maygay M2, SA6_283 NONE) + + + mg_ewgg + Each Way Gambler (Maygay M2, SA6_284 NONE) mg_gbr - Guinness Book Of Records (Maygay M2) + Guinness Book Of Records (Maygay M2, SW7-235 SW7-240) + + + mg_gbra + Guinness Book Of Records (Maygay M2, SW8-146 SW7-360) + + + mg_gbrb + Guinness Book Of Records (Maygay M2, SW8-147 SW7-361) mg_jv - Jack & Vera (Maygay M2) + Jack & Vera (Maygay M2, set 1) + + + mg_jva + Jack & Vera (Maygay M2, set 2) + + + mg_jvb + Jack & Vera (Maygay M2, set 3) + + + mg_jvc + Jack & Vera (Maygay M2, set 4) mg_kf - Krypton Factor (Maygay M2) + Krypton Factor (Maygay M2, set 1) + + + mg_kfa + Krypton Factor (Maygay M2, set 2) mg_lug - London Underground (Maygay M2) + London Underground (Maygay M2, SW8-232 SW8-154) + + + mg_luga + London Underground (Maygay M2, SW8-233 SW8-155) mg_pbw - Pinball Wizard (Maygay M2) + Pinball Wizard (Maygay M2, SW8-098 SW8148) + + + mg_pbwa + Pinball Wizard (Maygay M2, SW8-099 SW8149) + + + mg_pbwb + Pinball Wizard (Maygay M2, SW8-098 SW8-096) mg_risk - Risk (Maygay M2) + Risk (Maygay M2, SW7-614 SW7-461) + + + mg_riska + Risk (Maygay M2, SW9-025 SW9-023) + + + mg_riskb + Risk (Maygay M2, SW9-024 SW9-026) mg_scl - Super Clue (Maygay M2) + Super Clue (Maygay M2, SW8-152 SW8-130) + + + mg_scla + Super Clue (Maygay M2, SW8-153 SW8-131) mgakuen @@ -81201,6 +82997,10 @@ mgarden + Magic Garden (AHG1211-03, US) + + + mgardena Magic Garden (AHG1211-99, US) @@ -81245,19 +83045,31 @@ mgcs - Man Guan Caishen (China, V103CS) + Manguan Caishen (China, V103CS) - mgdh - Man Guan Daheng (Taiwan, V125T1) + mgcs2h + Manguan Caishen 2 (link version, host) - mgdha - Man Guan Daheng (Taiwan, V123T1) + mgcs2l + Manguan Caishen 2 (link version, extension, S110CN) - mgfx - Man Guan Fu Xing + mgcs3 + Manguan Caishen 3 (V101CN) + + + mgcsa + Manguan Caishen (China, V106CS) + + + mgdh + Manguan Daheng (Taiwan, V125T1) + + + mgdha + Manguan Daheng (Taiwan, V123T1) mghammer @@ -81265,7 +83077,7 @@ mgion - Gionbana [BET] (Japan 890207) + Gionbana (Japan 890207, medal) mgmen89 @@ -81283,6 +83095,14 @@ mgprem11 Magic Premium (v1.1) + + mgzz + Manguan Zhizun (V101CN) + + + mgzz100cn + Manguan Zhizun (V100CN) + mhavoc Major Havoc (rev 3) @@ -81321,7 +83141,7 @@ miaj - M.I.A. - Missing in Action (version R) (Japan) + M.I.A.: Missing in Action (Japan, version R) michigan @@ -81509,6 +83329,10 @@ minemineua + Mine, Mine, Mine (NHG0416-02, US) + + + minemineub Mine, Mine, Mine (NHG0416-99, US) @@ -81587,6 +83411,10 @@ minnadk Minna de Kitaeru Zenno Training (Ver. 1.50) + + mir7hg + Miracle Seven - Heaven's Gate (Japan, v1.0.2) + mirage Mirage Youjuu Mahjongden (Japan) @@ -81599,6 +83427,10 @@ miraxa Mirax (set 2) + + miraxb + Mirax (set 3) + mirco21 21 (Mirco) @@ -81641,18 +83473,30 @@ missile - Missile Command (rev 3) + Missile Command (rev 3, A035467-02/04 PCBs) missile1 - Missile Command (rev 1) + Missile Command (rev 1, A035467-02 PCBs) + + + missile1a + Missile Command (rev 1, A035467-01 PCBs) missile2 - Missile Command (rev 2) + Missile Command (rev 2, A035467-02/04 PCBs) + + + missile2a + Missile Command (rev 2, A035467-01/03 PCBs) missilea + Missile Command (rev 3, A035467-01/03 PCBs) + + + missilebl Missile Attack (U.Games bootleg of Missile Command) @@ -81661,7 +83505,7 @@ missilex - Missile-X [TTL] + Missile-X missmw96 @@ -81671,6 +83515,10 @@ missw02 Miss World 2002 + + missw02d + Miss World 2002 (Daigom license) + missw96 Miss World '96 (Nude) (C-3000A PCB, set 1) @@ -81687,14 +83535,38 @@ missw96c Miss World '96 (Nude) (C-3000B PCB) + + miteshin + Mite Shinzeyou + mizubaku Mizubaku Daibouken (Japan) mj1 + Sega Yonin Uchi Mahjong MJ Network Taisen Ver. (Update Disc Ver.3.000, Japan) (CDP-10002F) + + + mj1a + Sega Yonin Uchi Mahjong MJ (Update Disc Ver.1.007, Japan) (CDP-10002A) + + + mj1b Sega Yonin Uchi Mahjong MJ (Update Disc Ver.1.008, Japan) (CDP-10002B) + + mj1c + Sega Yonin Uchi Mahjong MJ (Update Disc Ver.1.011, Japan) (CDP-10002C) + + + mj1d + Sega Yonin Uchi Mahjong MJ Network Taisen Ver. (Update Disc Ver.2.000, Japan) (CDP-10002D) + + + mj1e + Sega Yonin Uchi Mahjong MJ Network Taisen Ver. (Update Disc Ver.2.002, Japan) (CDP-10002E) + mj2 Sega Network Taisen Mahjong MJ 2 (Rev G) (GDX-0006G) @@ -81745,7 +83617,7 @@ mjanbari - Medal Mahjong Janjan Baribari [BET] (Japan) + Medal Mahjong Janjan Baribari (Japan) mjangels @@ -81753,19 +83625,23 @@ mjapinky - Almond Pinky [BET] (Japan) + Almond Pinky (Japan) mjcamera - Mahjong Camera Kozou (set 1) (Japan 881109) + Mahjong Camera Kozou (Japan 881109, newer hardware) - mjcamerb - Mahjong Camera Kozou (set 2) (Japan 881109) + mjcameram + Mahjong Camera Kozou (Japan 890509, medal) + + + mjcamerao + Mahjong Camera Kozou (Japan 881109, older hardware) mjchuuka - Maque Zhonghua Ernu [BET] (Taiwan) + Maque Zhonghua Ernu (Taiwan) mjclinic @@ -81777,7 +83653,7 @@ mjclub - Mahjong Club [BET] (Japan) + Mahjong Club (Japan) mjcomv1 @@ -81785,7 +83661,7 @@ mjdchuka - Maque Da Zhonghua Quan [BET] (Taiwan, D111) + Maque Da Zhonghua Quan (Taiwan, D111) mjdejav2 @@ -81809,7 +83685,7 @@ mjdiplob - Mahjong Diplomat [BET] (Japan) + Mahjong Diplomat (Japan) mjegolf @@ -81817,23 +83693,23 @@ mjelct3 - Mahjong Electron Base (parts 2 & 3, Japan set 1, Bet) + Mahjong Electron Base (parts 2 & 3, Japan set 1) mjelct3a - Mahjong Electron Base (parts 2 & 3, Japan set 2, Bet) + Mahjong Electron Base (parts 2 & 3, Japan set 2) mjelctrb - Mahjong Electron Base (parts 2 & 4, Japan bootleg, Bet) + Mahjong Electron Base (parts 2 & 4, Japan bootleg) mjelctrn - Mahjong Electron Base (parts 2 & 4, Japan, Bet) + Mahjong Electron Base (parts 2 & 4, Japan) mjembase - Mahjong Electromagnetic Base (Japan, Bet) + Mahjong Electromagnetic Base (Japan) mjflove @@ -81845,7 +83721,7 @@ mjfocusm - Mahjong Focus [BET] (Japan 890510) + Mahjong Focus (Japan 890510, medal) mjfriday @@ -81853,7 +83729,7 @@ mjgaiden - Mahjong Gaiden [BET] (Japan 870803) + Mahjong Gaiden (Japan 870803) mjgalpri @@ -81861,7 +83737,7 @@ mjgnight - Mahjong Gorgeous Night [BET] (Japan, TSM003-01) + Mahjong Gorgeous Night (Japan, TSM003-01) mjgottsu @@ -81869,7 +83745,7 @@ mjgottub - Medal Mahjong Gottsu ee-kanji [BET] (Japan) + Medal Mahjong Gottsu ee-kanji (Japan) mjgtaste @@ -81881,15 +83757,15 @@ mjifb - Mahjong If...? [BET] + Mahjong If...? mjifb2 - Mahjong If...? [BET](2921) + Mahjong If...? (2921) mjifb3 - Mahjong If...? [BET](2931) + Mahjong If...? (2931) mjikaga @@ -81937,27 +83813,27 @@ mjmyorn2 - Mahjong The Mysterious Orient Part 2 ~ Exotic Dream ~ [BET] (Japan, v1.00) + Mahjong The Mysterious Orient Part 2 ~ Exotic Dream ~ (Japan, v1.00) mjmyornt - Mahjong The Mysterious Orient [BET] (Japan, v1.00) + Mahjong The Mysterious Orient (Japan, v1.00) mjmyorntr - Mahjong The Mysterious Orient Returns [BET] (Japan, v1.00) + Mahjong The Mysterious Orient Returns (Japan, v1.00) mjmyster - Mahjong The Mysterious World [BET] (Japan, set 1) + Mahjong The Mysterious World (Japan, set 1) mjmyuniv - Mahjong The Mysterious Universe [BET] (Japan, D85) + Mahjong The Mysterious Universe (Japan, D85) mjmywrld - Mahjong The Mysterious World [BET] (Japan, set 2) + Mahjong The Mysterious World (Japan, set 2) mjnanpaa @@ -81985,7 +83861,7 @@ mjnquestb - Mahjong Quest (No Nudity) + Mahjong Quest (Japan, No Nudity) mjprivat @@ -81993,15 +83869,23 @@ mjreach - Mahjong Reach (bootleg) + Mahjong Reach (Ver. 1.00) mjreach1 - Mahjong Reach Ippatsu [BET] (Japan) + Mahjong Reach Ippatsu (Japan) + + + mjreachbl + Mahjong Reach (Ver. 1.00, bootleg) + + + mjreachp2 + Mahjong Reach Part II (Ver. D88) mjschuka - Mahjong Super Dai Chuuka Ken [BET] (Japan, D115) + Mahjong Super Dai Chuuka Ken (Japan, D115) mjsenka @@ -82009,7 +83893,7 @@ mjsenpu - Mahjong Senpu + Mahjong Senpu (Japan) mjsikakb @@ -82035,6 +83919,10 @@ mjsiyoub Mahjong Shiyou (Japan) + + mjtenho + Mahjong Tenho (Japan, P016B-000) + mjtensin Mahjong Tensinhai (Japan) @@ -82051,13 +83939,17 @@ mjvegasa Mahjong Vegas (Japan, unprotected) + + mjxy2 + Majiang Xueyuan 2 - Mahjong School (V108TW) + mjyarou - Mahjong Yarou [BET] (Japan, set 1) + Mahjong Yarou (Japan, set 1) mjyarou2 - Mahjong Yarou [BET] (Japan, set 2) + Mahjong Yarou (Japan, set 2) mjyougo @@ -82141,7 +84033,7 @@ mk3mdb - Mortal Kombat 3 (bootleg of Mega Drive version) + Mortal Kombat 3 (scrambled bootleg of Mega Drive version) mk3p40 @@ -82289,7 +84181,7 @@ mlandingj - Midnight Landing (Japan) + Midnight Landing (Japan, rev 3) mltiwars @@ -82297,7 +84189,7 @@ mltpoints - Multi Points + Multi Points (V1.0, CAA) mm_05 @@ -82329,7 +84221,7 @@ mmaiko - Maikobana [BET] (Japan 900911) + Maikobana (Japan 900911, medal) mmancp2u @@ -82385,11 +84277,11 @@ mmehyou - Medal Mahjong Circuit no Mehyou [BET] (Japan) + Medal Mahjong Circuit no Mehyou (Japan) mmhammer - Mogu Mogu Hammer + Mogu Mogu Hammer (Japan, ver 1.01) mmm_ldip @@ -82421,7 +84313,7 @@ mmsikaku - Mahjong Shikaku [BET] (Japan 880929) + Mahjong Shikaku (Japan 880929, medal) mnchmobl @@ -82443,6 +84335,10 @@ mnightj Mutant Night (Japan) + + mnrockman + Medal Network: Rockman EXE + mntecrlo Monte Carlo (Pinball) @@ -82541,15 +84437,15 @@ momotaro - Mahjong Momotarou [BET] (Japan, T027-RB-01) + Mahjong Momotarou (Japan, T027-RB-01) monacogp - Monaco GP (set 1) [TTL] + Monaco GP (set 1) monacogpa - Monaco GP (set 2) [TTL] + Monaco GP (set 2) moneybnk @@ -82591,6 +84487,10 @@ monkeyd Monkey Donkey + + monkeyjmp + Monkey Jump + monkeyl Monkey Land (Ver. AA.21.A) @@ -82599,6 +84499,18 @@ monkeyla Monkey Land (Ver. AA.13.B) + + monkeylb + Monkey Land (Ver. AA.21.B) + + + monkeylc + Monkey Land (Ver. AA.21.C) + + + monkeyld + Monkey Land (Ver. A1.2) + monmouse Money Mouse (0400469V, NSW/ACT) @@ -82737,11 +84649,11 @@ monzagp - Monza GP + Monza GP (set 1) - monzagpb - Monza GP (bootleg) + monzagpa + Monza GP (set 2) moo @@ -82997,7 +84909,7 @@ motogp - Moto GP (MGP1004-NA-B) + MotoGP (MGP1004-NA-B) motorace @@ -83185,7 +85097,7 @@ mpang - Mighty! Pang (Euro 001010) + Mighty! Pang (Europe 001010) mpanga @@ -83197,11 +85109,11 @@ mpangjd - Mighty! Pang (001011 Japan Phoenix Edition) + Mighty! Pang (Japan 001011 Phoenix Edition) (bootleg) mpangr1 - Mighty! Pang (Euro 000925) + Mighty! Pang (Europe 000925) mpangu @@ -83235,6 +85147,18 @@ mplanuk Mad Planets (UK) + + mpoker2 + Major Poker 2 (set 1) + + + mpoker2a + Major Poker 2 (set 2) + + + mpoker2b + Major Poker 2 (set 3) + mpumpkin Magical Pumpkin: Puroland de Daibouken (Japan 960712) @@ -83292,7 +85216,7 @@ Mr. Driller (US, DRI3/VER.A2) - mrdrillrj + mrdrillrja2 Mr. Driller (Japan, DRI1/VER.A2) @@ -83379,6 +85303,10 @@ mrtlbeat Martial Beat (G*B47 VER. JBA) + + mrtlbeata + Martial Beat (G*B47 VER. JAB) + mrtnt Mr. TNT @@ -83399,6 +85327,10 @@ mrwoo Mr Woo (0252599, US) + + ms14 + Multistar 14 + ms21v2 Metal Slug 2 - Super Vehicle-001/II (1v2 Mode, Hack) @@ -83411,6 +85343,10 @@ ms31v2 Metal Slug 3 (1v2 Mode, Hack) + + ms3dbpls + Metal Slug 3 (Double Enemy, Hack) + ms41v2 Metal Slug 4 (1v2 Mode, Hack) @@ -83419,6 +85355,10 @@ ms4plus Metal Slug 4 Plus (bootleg) + + ms5 + Multistar 5 + ms51v2 Metal Slug 5 (1v2 Mode, Hack) @@ -83493,7 +85433,7 @@ msh - Marvel Super Heroes (Euro 951024) + Marvel Super Heroes (Europe 951024) msha @@ -83503,6 +85443,10 @@ mshb Marvel Super Heroes (Brazil 951117) + + mshbh + Marvel Super Heroes (Boss Hack) + mshbr1 Marvel Super Heroes (Brazil 951024) @@ -83529,7 +85473,7 @@ mshud - Marvel Super Heroes (US 951024 Phoenix Edition) (bootleg) + Marvel Super Heroes (USA 951024 Phoenix Edition) (bootleg) mshuttle @@ -83557,7 +85501,7 @@ mshvsf - Marvel Super Heroes Vs. Street Fighter (Euro 970625) + Marvel Super Heroes Vs. Street Fighter (Europe 970625) mshvsfa @@ -83575,6 +85519,18 @@ mshvsfb1 Marvel Super Heroes Vs. Street Fighter (Brazil 970625) + + mshvsfbh + Marvel Super Heroes Vs. Street Fighter (Boss Hack) + + + mshvsfcph + Marvel Super Heroes Vs. Street Fighter (Coop, Hack) + + + mshvsfem + Marvel Super Heroes Vs. Street Fighter (Easy Moves, Hack) + mshvsfh Marvel Super Heroes Vs. Street Fighter (Hispanic 970625) @@ -83687,6 +85643,18 @@ mslug3cq Metal Slug 3 (Legend, Hack) + + mslug3cqi + Metal Slug 3 (Legend with Infinite Firepower, Hack) + + + mslug3cqt + Metal Slug 3 (Legend TD, Hack) + + + mslug3cqz + Metal Slug 3 (Legendary Journey, Hack) + mslug3dd Metal Slug 3 (Starlight, Hack) @@ -83699,10 +85667,6 @@ mslug3fd Metal Slug 3 (Fully Decrypted) - - mslug3fs - Metal Slug 3 (Firepower Showdown, Hack) - mslug3g Metal Slug 3 (Multifunction, Hack) @@ -83757,7 +85721,7 @@ mslug3x - Metal Slug 3X (Complete Collection) + Metal Slug 3X - Complete Collection (Hack) mslug3zh @@ -83815,10 +85779,18 @@ mslug4unity Metal Slug 4 Unity (Added Timer Ver. 2021-01-30) + + mslug4zj + Metal Slug 4 (Final, Hack) + mslug5 Metal Slug 5 (NGM-2680) + + mslug5ae + Metal Slug 5 (20th Anniversary, Hack) + mslug5b Metal Slug 5 (bootleg) @@ -83835,6 +85807,10 @@ mslug5c Metal Slug 5 (Enemy Remix, Hack) + + mslug5cq + Metal Slug 5 (Legend, Hack) + mslug5db Metal Slug 5 (Enemy Enhance, Hack) @@ -83913,11 +85889,11 @@ mslugfc1 - Metal Slug - Super Vehicle-001 (Item Random FC2, Hack) + Metal Slug - Super Vehicle-001 (Random Item, Hack) mslugfc2 - Metal Slug - Super Vehicle-001 (Item Random & Powerful Enemy Defense FC2, Hack) + Metal Slug - Super Vehicle-001 (Random Item & Powerful Enemy Defense, Hack) mslugfs @@ -83951,6 +85927,10 @@ mslugxcq Metal Slug X - Super Vehicle-001 (Legend, Hack) + + mslugxcqi + Metal Slug X - Super Vehicle-001 (Legend with Infinite Firepower, Hack) + mslugxdd Metal Slug X - Super Vehicle-001 (Starlight, Hack) @@ -83963,10 +85943,6 @@ mslugxeb Metal Slug X - Super Vehicle-001 (Blue, Hack) - - mslugxfs - Metal Slug X - Super Vehicle-001 (Firepower Showdown, Hack) - mslugxif Metal Slug X - Super Vehicle-001 (Infinite Firepower, Hack) @@ -83993,11 +85969,11 @@ mspacii - Ms. Pac-Man II (Orca bootleg set 1) + Ms. Pac-Man II (Orca bootleg, set 1) mspacii2 - Ms. Pac-Man II (Orca bootleg set 2) + Ms. Pac-Man II (Orca bootleg, set 2) mspackpls @@ -84047,6 +86023,10 @@ mspacmanbgd Miss Pukman ('Made in Greece' Datamat bootleg) + + mspacmanbgf + Mr Pac-Turbo ('Made in Greece' Fermin bootleg) + mspacmanbhe Come-Cocos (Ms. Pac-Man) ('Made in Greece' Herle SA bootleg) @@ -84067,10 +86047,26 @@ mspacmancr Ms. Pac-Man (bootleg on Crush Roller Hardware) + + mspacmane + Ms. Pac-Man (Elmac bootleg, earlier) + + + mspacmane2 + Ms. Pac-Man (Elmac bootleg, later) + + + mspacmanhnc + Super Ms. Pac-Man (turbo hack, NVC284/NVC285 hardware) + mspacmanlai Ms. Pac-Man (Leisure and Allied bootleg) + + mspacmap + Ms. Pac-Man (Patched) + mspacmat Ms. Pac Attack @@ -84097,7 +86093,11 @@ mspactwin - Ms Pac Man Twin (Argentina) + Ms Pac Man Twin (Argentina, set 1) + + + mspactwina + Ms Pac Man Twin (Argentina, set 2) mspuzzle @@ -84115,6 +86115,10 @@ mspuzzleg Miss Puzzle (Clone of Gumbo) + + msqyfc1 + Metal Slug - Super Vehicle-001 (Origins Item Random, Hack) + mstadium Main Stadium (Japan) @@ -84127,6 +86131,10 @@ mstworld2 Monsters World 2 (bootleg of Super Pang) + + msupstar + Superstar (4435-81, U5-1) + msword Magic Sword: Heroic Fantasy (World 900725) @@ -84437,6 +86445,10 @@ mtrain + Magic Train (Ver. 1.4) + + + mtraina Magic Train (Ver. 1.31) @@ -84499,6 +86511,10 @@ multchmpk Multi Champ (Korea, older) + + multgmxl + Multi GAME XL + multi96 Multi Game '96 (Italy) @@ -84555,6 +86571,10 @@ mundial Mundial 90 + + munsters + The Munsters + murogem Muroge Monaco (set 1) @@ -84611,6 +86631,10 @@ mushik4e Mushiking The King Of Beetles - Mushiking IV / V / VI (World) + + mushik4t + Mushiking The King Of Beetles - Mushiking IV / V / VI (Taiwan) + mushikc Mushiking The King Of Beetle (2K3 2ND Ver. 1.000-, China) @@ -84801,7 +86825,7 @@ mvsc - Marvel Vs. Capcom: Clash of Super Heroes (Euro 980123) + Marvel Vs. Capcom: Clash of Super Heroes (Europe 980123) mvsc2 @@ -84823,6 +86847,14 @@ mvscb Marvel Vs. Capcom: Clash of Super Heroes (Brazil 980123) + + mvscbh + Marvel Vs. Capcom: Clash of Super Heroes (Boss Hack) + + + mvscem + Marvel Vs. Capcom: Clash of Super Heroes (Easy Moves, Hack) + mvsch Marvel Vs. Capcom: Clash of Super Heroes (Hispanic 980123) @@ -84841,7 +86873,7 @@ mvscr1 - Marvel Vs. Capcom: Clash of Super Heroes (Euro 980112) + Marvel Vs. Capcom: Clash of Super Heroes (Europe 980112) mvscu @@ -84915,6 +86947,10 @@ mx5000 MX5000 + + mxsqy + Mingxing San Que Yi (China, V201CN) + myangel Kosodate Quiz My Angel (Japan) @@ -84995,6 +87031,14 @@ mysticrib Mystic Riders (bootleg?) + + mystjag + Mystic Jaguar + + + mystjb + Mystery J & B (V1.3G) + mystmerm Mystic Mermaid (1J008711, NSW/ACT) @@ -85439,6 +87483,18 @@ nbashowt NBA Showtime NBA on NBC (ver 2.0, Apr 25 1999) + + nbbat1v2 + Ninja Baseball Batman (1v2, Hack) + + + nbbat1v4 + Ninja Baseball Batman (1v4, Hack) + + + nbbat1v8 + Ninja Baseball Batman (1v8, Hack) + nbbatman Ninja Baseball Bat Man (World) @@ -85455,9 +87511,17 @@ nbbatmanu Ninja Baseball Bat Man (US) + + nbbatmbh + Ninja Baseball Batman (Transform, Hack) + + + nbbatmx2 + Ninja Baseball Batman (X2, Hack) + nblktiger - Neo Black Tiger (Demo) + Neo Black Tiger (HB, Demo) nc96 @@ -85515,6 +87579,10 @@ nc96txt New Cherry '96 Special Edition (v1.32 Texas XT, C2 PCB) + + ncarrera + New Carrera - Version 2000 + ncb3 Cherry Bonus III (ver.1.40, set 1) @@ -85579,6 +87647,14 @@ ndcfboxa Naomi DIMM Firmware Update for CF-BOX (4.01) (GDS-0042A) + + ndongmul + New DongmulDongmul + + + ndongmul2 + New DongmulDongmul 2 (V1.2N) + ndxron10 Royal on Ten (hack of Noraut Deluxe Poker) @@ -85633,7 +87709,7 @@ nemoj - Nemo (Japan 901120, 89622B-3 ROM board) + Nemo (Japan 901120, 88622B-3 ROM board) nemoja @@ -85643,13 +87719,17 @@ nemor1 Nemo (World 901109) + + neo2048 + Neo 2048 (HB) + neo2500 Neo 2500 Demo neo3ddmo - NeoGeo 3D! Demo + NeoGeo 3D! (HB, Demo) neobattl @@ -85665,7 +87745,7 @@ neocstlv - Neo CastleVania Demo + Neo CastleVania (HB, Demo) neocup98 @@ -85681,11 +87761,11 @@ neogalag - Galaga Demo (set 1) + Galaga Demo (HB, set 1) neogalaga - Galaga Demo (set 2) + Galaga Demo (HB, set 2) neomania @@ -85697,23 +87777,23 @@ neonopon - Neo No Panepon (beta) + Neo No Panepon (HB, beta) neopang - Neo Pang + Neo Pang (HB) neopong - Neo Pong (ver 1.1) + Neo Pong (HB, v1.1) neoponga - Neo Pong (ver 1.0) + Neo Pong (HB, v1.0) neoprimo - Primo Demo + Primo (HB, Demo) neoprint @@ -85721,19 +87801,19 @@ neotet - NeoGeo 2-Player Tetris + NeoGeo 2-Player Tetris (HB) neothndr - Neo Thunder + Neo Thunder (HB) neotris - NeoTRIS (Free Beta 2, Ver. 202009) + NeoTRIS (HB, Free Beta 2, ver. 202009) neoww2 - WW2 (Demo) - Arcade Development Project + WW2 - Arcade Development Project (HB, Demo) neptunp2 @@ -86017,11 +88097,11 @@ nfm - New Fruit Machine (Ming-Yang Electronic, vFB02-07A) + Fruit Bonus 2002 (Ming-Yang Electronic / TSK, vFB02-07A) nfma - New Fruit Machine (Ming-Yang Electronic, vFB02-01A) + Fruit Bonus 2002 (Ming-Yang Electronic / TSK, vFB02-01A) nfs @@ -86037,7 +88117,7 @@ ngalsumr - Night Gal Summer [BET] (Japan 850702 NGS 0-01) + Night Gal Summer (Japan 850702 NGS 0-01) ngbc @@ -86047,6 +88127,10 @@ ngbcj NeoGeo Battle Coliseum (Japan) + + ngcdtdd0 + NeoGeo/CD Jump & Run Techdemo Dez 2020 (HB, ver. 20201212) + ngdup23a Naomi DIMM Firmware Updater (2.13) (GDS-0023A) @@ -86061,15 +88145,15 @@ ngem2k - NGEM2K (beta 2006-01-18) + NGEM2K (HB, beta 2006-01-18) ngfrog - Frog Feast (Neo Geo) + Neo Frog Feast (HB) ngftdemo - NGF Transparency Demo + NGF Transparency (HB, Demo) ngg_10 @@ -86165,7 +88249,7 @@ nightlov - Night Love (Japan 860705, Bet) + Night Love (Japan 860705) nightmare @@ -86291,6 +88375,10 @@ ninjemak Ninja Emaki (US) + + ninjemat + Ninja Emaki (Tecfri license) + nitd Nightmare in the Dark @@ -86351,6 +88439,10 @@ nmg5e Multi 5 / New Multi Game 5 (set 3, earlier) + + nmondop + New Mondo Plus (V0.6I) + nmouse Naughty Mouse (set 1) @@ -86539,6 +88631,10 @@ npfpit Neo Print - Fuyu Pri Iitoko-dori (Japan) (T4i 3.07) + + npft + Neo Print - Fairy Tales (World) (T4i 3.07) + npmillen Neo Print - Millennium Multi Shot Edition (World) (T4i 3.07) @@ -86639,6 +88735,18 @@ ns8linewa New Lucky 8 Lines / New Super 8 Lines (W-4, Witch Bonus) + + ns8linewb + New Lucky 8 Lines / New Super 8 Lines (F-5, Witch Bonus, Yamate, 1985) + + + ns8linewc + New Lucky 8 Lines / New Super 8 Lines (W-4, Witch Bonus, Yamate, 1988, set 1) + + + ns8linewd + New Lucky 8 Lines / New Super 8 Lines (W-4, Witch Bonus, Yamate, 1988, set 2) + nslasher Night Slashers (Korea Rev 1.3, DE-0397-0 PCB) @@ -86657,7 +88765,7 @@ nsmb - Neo Super Mario Bros (Demo, v0.01) + Neo Super Mario Bros (HB, Demo v0.01) nsmpoker @@ -86743,13 +88851,21 @@ nsub N-Sub (upright) + + nsubc + N-Sub (cocktail) + nsupertr3 New Super Triv III ntcash - NtCash + NtCash (set 1) + + + ntcasha + NtCash (set 2) ntopstar @@ -86821,7 +88937,7 @@ nwarr - Night Warriors: Darkstalkers' Revenge (Euro 950316) + Night Warriors: Darkstalkers' Revenge (Europe 950316) nwarra @@ -86849,7 +88965,7 @@ nycaptor - N.Y. Captor + N.Y. Captor (rev 2) nyjoker @@ -86899,6 +89015,14 @@ oceanhuna The Ocean Hunter (Japan) + + oceanpar + Ocean Paradise (V105US) + + + oceanpar101us + Ocean Paradise (V101US) + ochaken Ocha-Ken Hot Medal @@ -87065,23 +89189,23 @@ ojousanm - Ojousan [BET] (Japan 870108) + Ojousan (Japan 870108, medal) olds - Oriental Legend Super / Xiyou Shi E Chuan Super (ver. 101, Korean Board) + Oriental Legend Super / Xiyou Shi E Zhuan Super (ver. 101, Korean Board) olds100 - Oriental Legend Special / Xiyou Shi E Chuan Super (ver. 100, set 1) + Oriental Legend Special / Xiyou Shi E Zhuan Super (ver. 100, set 1) olds100a - Oriental Legend Special / Xiyou Shi E Chuan Super (ver. 100, set 2) + Oriental Legend Special / Xiyou Shi E Zhuan Super (ver. 100, set 2) olds103t - Xiyou Shi E Chuan Super (ver. 103, China, Tencent) (unprotected) + Xiyou Shi E Zhuan Super (ver. 103, China, Tencent) (unprotected) oldsdsgl @@ -87089,19 +89213,19 @@ oldsmx - Oriental Legend Special - Meng Xun Ling Shan (Hack) + Xiyou Shi E Zhuan Super - Meng Xun Ling Shan (Hack) oldsplus - Oriental Legend 2 (Korea) / Xiyou Shi E Chuan Qunmoluanwu (World, China, Japan, Hong Kong, Taiwan) (ver. 205) [Oriental Ex] + Oriental Legend 2 (Korea) / Xiyou Shi E Zhuan Qunmoluanwu (World, China, Japan, Hong Kong, Taiwan) (ver. 205) [Oriental Ex] oldsplus203 - Oriental Legend 2 (Korea) / Xiyou Shi E Chuan Qunmoluanwu (World, China, Japan, Hong Kong, Taiwan) (ver. 203) [Oriental Ex] + Oriental Legend 2 (Korea) / Xiyou Shi E Zhuan Qunmoluanwu (World, China, Japan, Hong Kong, Taiwan) (ver. 203) [Oriental Ex] oldsplusnr - Xi You Shi E Zhuan - Xin Qun Mo Luan Wu (Hack) + Xiyou Shi E Zhuan Xin Qunmo Luanwu (Hack) oldsplusok @@ -87139,6 +89263,14 @@ olmandingo Olivmandingo (Spanish bootleg of Mandinga on Galaxian hardware, set 1) + + olym65bj + Black jack (Olympic Games, v5.04, upgrade kit for Wild Card) + + + olym65wc + Wild Card (Olympic Games, v2.0) + olymp Olympus (Z Games, version 10) @@ -87147,6 +89279,14 @@ olympic Olympic Games + + olympic5 + Olympic 5 (V112US) + + + olympic5107us + Olympic 5 (V107US) + olympus Olympus (Juegos Populares) @@ -87227,13 +89367,17 @@ onetwoe One + Two (earlier) + + onlinertp + Onliner Touch Party + onna34ra Onna Sansirou - Typhoon Gal (bootleg) onna34ro - Onna Sanshirou - Typhoon Gal + Onna Sanshirou - Typhoon Gal (rev 1) onna34roa @@ -87243,6 +89387,10 @@ ooparts OOPArts (prototype, joystick hack) + + op5cards + Open 5 Cards + opaopa Opa Opa (MC-8123, 317-0042) @@ -87269,7 +89417,7 @@ openmj - Open Mahjong [BET] (Japan) + Open Mahjong (Japan) opsesam @@ -87291,9 +89439,13 @@ optigerj Operation Tiger (Ver 2.09 J) + + optigersm + Operation Tiger Second Mission (Ver 2.02 J) + opwolf - Operation Wolf (World, set 1) + Operation Wolf (World, rev 2, set 1) opwolf3 @@ -87309,7 +89461,7 @@ opwolfa - Operation Wolf (World, set 2) + Operation Wolf (World, rev 2, set 2) opwolfb @@ -87317,7 +89469,7 @@ opwolfj - Operation Wolf (Japan) + Operation Wolf (Japan, rev 2) opwolfjsc @@ -87329,7 +89481,7 @@ opwolfu - Operation Wolf (US) + Operation Wolf (US, rev 2) orangec @@ -87337,7 +89489,7 @@ orangeci - Orange Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880221) + Orange Club - Maru-hi Ippatsu Kaihou (Japan 880221) orbatak @@ -87409,7 +89561,7 @@ orleg2_101cn - Xiyou Shi E Chuan 2 (V101, China) + Xiyou Shi E Zhuan 2 (V101, China) orleg2_101jp @@ -87421,7 +89573,7 @@ orleg2_103cn - Xiyou Shi E Chuan 2 (V103, China) + Xiyou Shi E Zhuan 2 (V103, China) orleg2_103jp @@ -87429,7 +89581,7 @@ orleg2_104cn - Xiyou Shi E Chuan 2 (V104, China) + Xiyou Shi E Zhuan 2 (V104, China) orleg2_104jp @@ -87437,43 +89589,43 @@ orlegend - Oriental Legend / Xiyou Shi E Chuan (ver. 126) + Oriental Legend / Xiyou Shi E Zhuan (ver. 126) orlegend105k - Oriental Legend / Xiyou Shi E Chuan (ver. 105, Korean Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 105, Korean Board) orlegend105t - Oriental Legend / Xiyou Shi E Chuan (ver. 105, Taiwanese Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 105, Taiwanese Board) orlegend111c - Oriental Legend / Xiyou Shi E Chuan (ver. 111, Chinese Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 111, Chinese Board) orlegend111k - Oriental Legend / Xiyou Shi E Chuan (ver. 111, Korean Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 111, Korean Board) orlegend111t - Oriental Legend / Xiyou Shi E Chuan (ver. 111, Taiwanese Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 111, Taiwanese Board) orlegendc - Oriental Legend / Xiyou Shi E Chuan (ver. 112, Chinese Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 112, Chinese Board) orlegendca - Oriental Legend / Xiyou Shi E Chuan (ver. ???, Chinese Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. ???, Chinese Board) orlegende - Oriental Legend / Xiyou Shi E Chuan (ver. 112) + Oriental Legend / Xiyou Shi E Zhuan (ver. 112) orlegendea - Oriental Legend - Xi Yo Gi Shi Re Zuang (V112, set 2) + Oriental Legend / Xiyou Shi E Zhuan (ver. 112, set 2) orlegndc @@ -87588,7 +89740,7 @@ Operation Thunderbolt (US, rev 1) - othunderuo + othunderua Operation Thunderbolt (US) @@ -87617,19 +89769,19 @@ ougonhai - Mahjong Ougon no Hai (Japan) + Mahjong Ougon no Pai (Japan) ougonhaib1 - Mahjong Ougon no Hai (Japan bootleg set 1, Bet) + Mahjong Ougon no Pai (Japan bootleg set 1, medal) ougonhaib2 - Mahjong Ougon no Hai (Japan bootleg set 2, Bet) + Mahjong Ougon no Pai (Japan bootleg set 2, medal) ougonhaib3 - Mahjong Ougon no Hai (Japan bootleg set 3, Bet) + Mahjong Ougon no Pai (Japan bootleg set 3, medal) outbackj @@ -87657,7 +89809,7 @@ outlaw - Outlaw [TTL] + Outlaw outline @@ -87791,6 +89943,14 @@ owlcap Owl Capone (10008711, NSW/ACT, Show Program) + + oygt + Omatsuri Yasan: Ganso Takoyaki + + + oyks + Omatsuri Yasan: Kingyo Sukui + ozmawar2 Ozma Wars (set 2) @@ -87813,7 +89973,11 @@ p47 - P-47 - The Phantom Fighter (World) + P-47: The Phantom Fighter (World) + + + p47a + P-47: The Freedom Fighter (World) p47aces @@ -87824,16 +89988,16 @@ P-47 Aces (ver 1.0) - p47b - P-47 - The Freedom Fighter (World, bootleg) + p47bl + P-47: The Freedom Fighter (World, bootleg) p47j - P-47 - The Freedom Fighter (Japan) + P-47: The Freedom Fighter (Japan) p47je - P-47 - The Freedom Fighter (Japan, Export) + P-47: The Freedom Fighter (Japan, Export) p911 @@ -87847,10 +90011,6 @@ p911ac The Keisatsukan: Shinjuku 24-ji (ver AAC) - - p911ea - Police 24/7 (ver EAD, alt) - p911ed Police 24/7 (ver EAD) @@ -87913,7 +90073,7 @@ pachiten - Medal Mahjong Pachi-Slot Tengoku [BET] (Japan) + Medal Mahjong Pachi-Slot Tengoku (Japan) packbang @@ -87927,6 +90087,10 @@ packetman Packetman (bootleg) + + packysts + Packy's Treasure Slot (Japan, main ver. 1.3, video ver. 1.1) + pacland Pac-Land (World) @@ -87989,7 +90153,11 @@ pacmanblv - Pac-Man (Video Dens, Spanish bootleg on Galaxian hardware) + Pac-Man (Video Dens, Spanish bootleg on Galaxian hardware, set 1) + + + pacmanblva + Pac-Man (Video Dens, Spanish bootleg on Galaxian hardware, set 2) pacmanf @@ -88019,6 +90187,14 @@ pacmanjpm Pac-Man (JPM bootleg) + + pacmanmr + Pac-Man (Model Racing bootleg) + + + pacmanp + Pac-Man (Patched) + pacmanpe Come Come (Petaco SA bootleg of Puck Man) @@ -88115,6 +90291,10 @@ pairsa Pairs (V1, 09/07/94) + + pairsh8 + Pairs (Italian gambling game) + pairsnb Pairs (Nichibutsu) (Japan 890822) @@ -88157,7 +90337,7 @@ pang3 - Pang! 3 (Euro 950601) + Pang! 3 (Europe 950601) pang3b @@ -88193,11 +90373,11 @@ pang3r1 - Pang! 3 (Euro 950511) + Pang! 3 (Europe 950511) pang3r1a - Pang! 3 (Euro 950511, alt) + Pang! 3 (Europe 950511, alt) pangb @@ -89095,6 +91275,10 @@ pclubjv2 Print Club (Japan Vol.2) + + pclubjv3 + Print Club (Japan Vol.3) + pclubjv4 Print Club (Japan Vol.4) @@ -89115,6 +91299,10 @@ pclubpok Print Club Pokemon B (U 991126 V1.000) + + pclubyo + Print Club Yoshimoto V1 (J 970208 V1.000) + pclubyo2 Print Club Yoshimoto V2 (J 970422 V1.100) @@ -89543,18 +91731,6 @@ pengo Pengo (World, not encrypted, rev A) - - pengo2 - Pengo (set 2) - - - pengo2u - Pengo (set 2 not encrypted) - - - pengo3u - Pengo (set 3 not encrypted) - pengoa Pengo (World, 315-5010 type, set 1) @@ -89619,21 +91795,33 @@ pengpayce Penguin Pays - Cash Express (AHG1544, US) + + pengpaycea + Penguin Pays - Cash Express (AHG1295, US) + pengpayd Penguin Pays (0300113V, NSW/ACT) + + pengpaydx + Penguin Pays Deluxe (AHG1198, US) + pengpayu - Penguin Pays (BHI0417-03, US) + Penguin Pays (OHG0417-03, US) pengpayua - Penguin Pays (OHG0417-03, US) + Penguin Pays (OHG0417-02, US) pengpayub - Penguin Pays (OHG0417-02, US) + Penguin Pays (BHI0417-03, US) + + + pengprty + Penguin Party pengpuck @@ -89679,6 +91867,14 @@ pentacup2 Pentacup (rev. 2) + + pentacups + Pentacup (rev. S) + + + pentacupt + Pentacup (rev. T) + pepk0719 Player's Edge (PK0719-PC092) Standard Draw Poker (El Cortez) @@ -89937,23 +92133,35 @@ pepp0045 - Player's Edge Plus (PP0045) 10's or Better + Player's Edge Plus (PP0045) 10's or Better (set 1) pepp0045a - Player's Edge Plus (PP0045) 10's or Better (Gambler Downtown Reno) + Player's Edge Plus (PP0045) 10's or Better (set 2, Gambler Downtown Reno) pepp0045b - Player's Edge Plus (PP0045) 10's or Better (Par-A-Dice Riverboat Casino) + Player's Edge Plus (PP0045) 10's or Better (set 3, Par-A-Dice Riverboat Casino) pepp0045c - Player's Edge Plus (PP0045) 10's or Better (Annie Oakley's Central City) + Player's Edge Plus (PP0045) 10's or Better (set 4, Annie Oakley's Central City) pepp0045d - Player's Edge Plus (PP0045) 10's or Better (Las Vegas Rio) + Player's Edge Plus (PP0045) 10's or Better (set 5, Las Vegas Rio) + + + pepp0045e + Player's Edge Plus (PP0045) 10's or Better (set 6, Circus Circus) + + + pepp0045f + Player's Edge Plus (PP0045) 10's or Better (set 7, Old Reno Casino) + + + pepp0045g + Player's Edge Plus (PP0045) 10's or Better (set 8, Harrah's) pepp0046 @@ -90001,7 +92209,11 @@ pepp0050c - Player's Edge Plus (PP0050) Joker Poker (set 4, El Cortez) + Player's Edge Plus (PP0050) Joker Poker (set 4) + + + pepp0050d + Player's Edge Plus (PP0050) Joker Poker (set 5, El Cortez) pepp0051 @@ -90029,12 +92241,16 @@ pepp0055b - Player's Edge Plus (PP0055) Deuces Wild Poker (set 3) + Player's Edge Plus (PP0055) Deuces Wild Poker (set 3, Casino Rouge) pepp0055c Player's Edge Plus (PP0055) Deuces Wild Poker (set 4) + + pepp0055d + Player's Edge Plus (PP0055) Deuces Wild Poker (set 5) + pepp0057 Player's Edge Plus (PP0057) Deuces Wild Poker (set 1) @@ -90123,6 +92339,10 @@ pepp0094a Player's Edge Plus (PP0094) Standard Draw Poker (set 2) + + pepp0102 + Player's Edge Plus (PP0102) Standard Draw Poker + pepp0103 Player's Edge Plus (PP0103) Deuces Wild Poker (set 1) @@ -90171,6 +92391,10 @@ pepp0122 Player's Edge Plus (PP0122) Deuces Wild Poker + + pepp0123 + Player's Edge Plus (PP0123) Deuces Wild Poker + pepp0125 Player's Edge Plus (PP0125) Deuces Wild Poker (set 1) @@ -90209,7 +92433,7 @@ pepp0130 - Player's Edge Plus (PP0130) Aces and Faces Bonus Poker + Player's Edge Plus (PP0130) Aces and Faces Bonus Poker (Grand Casino) pepp0132 @@ -90323,6 +92547,10 @@ pepp0197e Player's Edge Plus (PP0197) Standard Draw Poker (Cruise) + + pepp0197f + Player's Edge Plus (PP0197) Standard Draw Poker (International) + pepp0203 Player's Edge Plus (PP0203) 4 of a Kind Bonus Poker (set 1) @@ -90383,12 +92611,20 @@ pepp0230 Player's Edge Plus (PP0230) Standard Draw Poker + + pepp0231 + Player's Edge Plus (PP0231) Deuces Joker Wild Poker + pepp0232 Player's Edge Plus (PP0232) Patriot Poker pepp0242 + Player's Edge Plus (PP0242) Deuces Wild Poker + + + pepp0242a Player's Edge Plus (PP0242) Deuces Wild Poker (International English/Spanish) @@ -90727,6 +92963,10 @@ pepp0540a Player's Edge Plus (PP0540) Double Bonus Poker (set 2) + + pepp0540b + Player's Edge Plus (PP0540) Double Bonus Poker (set 3) + pepp0542 Player's Edge Plus (PP0542) One Eyed Jacks Wild Poker (CG2243) @@ -90813,7 +93053,7 @@ pepp0733 - Player's Edge Plus (PP0733) Double Aces and Faces Bonus Poker + Player's Edge Plus (PP0733) Double Aces and Faces Bonus Poker (Grand Casino) pepp0750 @@ -90963,6 +93203,10 @@ peps0275a Player's Edge Plus (PS0275) 4th of July Slots (set 2) + + peps0278 + Player's Edge Plus (PS0278) 4th of July Slots + peps0280 Player's Edge Plus (PS0280) 4th of July Slots (set 1) @@ -91343,9 +93587,13 @@ pex0124p Player's Edge Plus (X000124P+XP000038) Deuces Wild Poker + + pex0126p + Player's Edge Plus (X000126P+XP000038) Deuces Wild Poker + pex0127p - Player's Edge Plus (X000127P+XP000038) Deuces Wild Poker + Player's Edge Plus (X000127P+XP000038) Deuces Joker Wild Poker pex0150p @@ -91555,6 +93803,10 @@ pex1087s Player's Edge Plus (X001087S+XS000006) Double Double Diamond Slots + + pex2001p + Player's Edge Plus (X002001P+XP000038) Double Double Bonus Poker + pex2002p Player's Edge Plus (X002002P+XP000038) Double Double Bonus Poker @@ -91699,6 +93951,10 @@ pex2127p Player's Edge Plus (X002127P+XP000043) Double Bonus Poker featuring 'Your Property' Royals + + pex2133p + Player's Edge Plus (X002133P+XP000043) Faces 'n' Deuces Double Bonus Poker + pex2134p Player's Edge Plus (X002134P+XP000043) Faces 'n' Deuces Double Bonus Poker @@ -91803,6 +94059,10 @@ pex2276p Player's Edge Plus (X002276P+XP000055) Black Jack Bonus Poker + + pex2278p + Player's Edge Plus (X002278P+XP000038) Joker Poker (Two Pair or Better) + pex2279p Player's Edge Plus (X002279P+XP000057) Ace$ Bonus @@ -92151,6 +94411,10 @@ phoenixb Phoenix (Centuri, set 2) + + phoenixbl + Phoenix (bootleg) + phoenixc Phoenix (Irecsa / G.G.I. Corporation) @@ -92289,11 +94553,11 @@ phrcraze - Phraze Craze (6221-40, U5-3A Expanded Questions) + Phraze Craze (6221-40, U5-3A, Expanded Questions) phrcrazea - Phraze Craze (6221-40, U5-3 Expanded Questions) + Phraze Craze (6221-40, U5-3, Expanded Questions) phrcrazeb @@ -92305,7 +94569,7 @@ phrcrazev - Phraze Craze (6221-45, U5-2 Vertical) + Phraze Craze (6221-45, U5-2, Vertical) phtetris @@ -92953,15 +95217,15 @@ pitnrun - Pit & Run - F-1 Race (set 1) + Pit & Run - F-1 Race (rev 1) pitnruna - Pit & Run - F-1 Race (set 2) + Pit & Run - F-1 Race pitnrunb - Pit & Run - F-1 Race (set 3) + Pit & Run - F-1 Race (location test?) pjustic @@ -92971,6 +95235,10 @@ pjustica Project Justice / Moero! Justice Gakuen (Rev A) + + pkboram + PK - New Exciting Poker! + pkgnsh Pachinko Gindama Shoubu (Japan) @@ -92999,6 +95267,10 @@ pkladiesbl2 Poker Ladies (Censored bootleg, not encrypted) + + pkladiesblu + Poker Ladies (Uncensored bootleg, encrypted) + pkladiesl Poker Ladies (Leprechaun ver. 510) @@ -93007,6 +95279,10 @@ pkladiesla Poker Ladies (Leprechaun ver. 401) + + pkrboram + PK Rainbow (v 1.5) + pkrdewin Poker De Win @@ -93041,7 +95317,7 @@ pktgaldx - Pocket Gal Deluxe (Euro v3.00) + Pocket Gal Deluxe (Europe v3.00) pktgaldxa @@ -93049,7 +95325,7 @@ pktgaldxb - Pocket Gal Deluxe (Euro v3.00, bootleg) + Pocket Gal Deluxe (Europe v3.00, bootleg) pktgaldxj @@ -93243,6 +95519,10 @@ plegendsj Gouketsuji Gaiden - Saikyou Densetsu (Japan, Ver. 95.06.20) + + plegendsjq + Gouketsuji Gaiden - Saikyou Densetsu (Infinite Energy, Hack) + pleiadbl Pleiads (bootleg set 1) @@ -93259,6 +95539,10 @@ pleiadsb2 Pleiads (bootleg set 2) + + pleiadsgmp + Pleiads (GMP Games) + pleiadsi Pleiads (Irecsa, set 1) @@ -93379,6 +95663,10 @@ pmv112r Pinball Magic (Redemption) + + pnc + Pac'n'Chase (Hack) + pnchmn Punch Mania: Hokuto no Ken (GQ918 VER. JAB) @@ -93439,6 +95727,10 @@ pokechmpa Poke Champ (set 2) + + poker21 + Poker & 21 + poker41 Four In One Poker @@ -93497,7 +95789,7 @@ poknight - Poker Night + Poker Night (HB) pokoachu @@ -93547,10 +95839,6 @@ polepos Pole Position (World) - - polepos1 - Pole Position (Atari version 1) - polepos2 Pole Position II (Japan) @@ -93571,10 +95859,6 @@ polepos2bs Gran Premio F1 (Spanish bootleg of Pole Position II) - - poleposa - Pole Position (Atari version 2) - poleposa1 Pole Position (Atari version 1) @@ -93595,14 +95879,6 @@ poleposn Pole Position (Sonic) - - poleps2a - Pole Position II (Atari) - - - poleps2b - Pole Position II (bootleg) - polic_g4 Police Force (LG-4) Germany @@ -93721,7 +95997,7 @@ pong - Pong (Rev E) [TTL] + Pong (Rev E) pongboo2 @@ -93729,7 +96005,7 @@ pongd - Pong Doubles [TTL] + Pong Doubles ponpoko @@ -93985,11 +96261,19 @@ popnanm2 - Pop'n Music Animelo 2 + Pop'n Music Animelo 2 (JAC) popnanm2a - Pop'n Music Animelo 2 (license expired) + Pop'n Music Animelo 2 (JAC, license expired) + + + popnanm2ja + Pop'n Music Animelo 2 (JAA) + + + popnanm2jaa + Pop'n Music Animelo 2 (JAA, license expired) popnanma @@ -94227,6 +96511,22 @@ potnpkrl Jack Potten's Poker (set 13, ICP-1 PCB) + + potnpkrm + Jack Potten's Poker (set 14, ICP-1 PCB) + + + potnpkrn + Jack Potten's Poker (set 15, w/fever, ICP-1 PCB) + + + potnpkro + Jack Potten's Poker (set 16, ICP-1 PCB) + + + potnpkrp + Jack Potten's Poker (set 17, ICP-1 PCB) + poto_a29 The Phantom of the Opera (2.9) @@ -94276,7 +96576,7 @@ P.O.W. - Prisoners of War (US version 1, mask ROM sprites) - powb + powbl P.O.W. - Prisoners of War (bootleg of US version 1) @@ -94327,6 +96627,10 @@ powerinspu Power Instinct (USA, prototype) + + powernbr + Power Instinct (Brasil, v1.0, Hack) + powj Datsugoku - Prisoners of War (Japan) @@ -94353,7 +96657,7 @@ powyakex - Jikkyou Powerful Pro Yakyuu EX (GX802 VER. JAB) + Jikkyou Pawafuru Puro Yakyu EX (GX802 VER. JAB) pp100 @@ -94953,7 +97257,7 @@ prc28su - Print Club 2 Vol. 8 Summer (J 970616 V1.100) + Print Club 2 Vol. 8 '97 Summer (J 970616 V1.100) prc297wi @@ -95037,7 +97341,7 @@ primrag2 - Primal Rage 2 (Ver 0.36a) + Primal Rage II (Test Version 0.36a) primraga @@ -95145,7 +97449,7 @@ proneon - Project Neon (Caravan Edition, prealpha v0.4.19) + Project Neon - Caravan Edition (HB, pre-alpha v0.4.19) propcycl @@ -95195,6 +97499,10 @@ przfight Prize Fight (0100299V, NSW/ACT) + + przonegd + Prize Zone Gold (USA, v2.01) + psailor1 Bishoujo Janshi Pretty Sailor 18-kin (Japan) @@ -95233,12 +97541,16 @@ pspikesc - Power Spikes (China) + Power Spikes (China, bootleg) pspikesk Power Spikes (Korea) + + pspikesm + Power Spikes (Modular System) + pspikesu Power Spikes (US) @@ -95371,6 +97683,10 @@ ptrain Panda Train (Novamatic 1.7) + + ptraina + Panda Train (Ver. 1.3) + ptrmj PT Reach Mahjong (Japan) @@ -95405,7 +97721,7 @@ puckman - Puck Man (Japan set 1) + Puck Man (Japan, set 1) puckmana @@ -95413,7 +97729,11 @@ puckmanb - Puck Man (bootleg set 1) + Puck Man (bootleg, set 1) + + + puckmanb3 + Puck Man (bootleg, set 3) puckmanf @@ -95421,11 +97741,11 @@ puckmanh - Puck Man (bootleg set 2) + Puck Man (bootleg, set 2) puckmod - Puck Man (Japan set 2) + Puck Man (Japan, set 2) puckpepl @@ -95441,11 +97761,11 @@ pulirula - PuLiRuLa (World) + PuLiRuLa (World, dual PCB) pulirulaa - PuLiRuLa (World, earlier?) + PuLiRuLa (World, single PCB) pulirulaj @@ -95459,6 +97779,10 @@ pulltabs Pull Tabs + + pullttrig + Pull The Trigger + pulsar Pulsar @@ -95467,10 +97791,94 @@ pulstar Pulstar + + pumpipx2 + Pump it Up The PREX 2 (Premiere 2/2003) + + + pumpipx2p + Pump it Up EXTRA + Plus (Premiere 2/2003) + + + pumpipx3 + Pump it Up The PREX 3: The International 4th Dance Floor (X3.2MK3) + + + pumpipx3a + Pump it Up The PREX 3: The International 4th Dance Floor (INT X3.1MK3) + + + pumpipx3b + Pump it Up The PREX 3: The International 4th Dance Floor (Korea X3.1MK3) + pumpit1 Pump It Up: The 1st Dance Floor (ver 0.53.1999.9.31) + + pumpit2 + Pump it Up: The 2nd Dance Floor (Feb 28 2000) + + + pumpit2a + Pump it Up: The 2nd Dance Floor (Dec 27 1999) + + + pumpit3 + Pump it Up The O.B.G: The 3rd Dance Floor (v3.04 - Jun 02 2000) + + + pumpit3a + Pump it Up The O.B.G: The 3rd Dance Floor (v3.03 - May 07 2000) + + + pumpit8 + Pump it Up The Rebirth: The 8th Dance Floor (Rebirth/2002) + + + pumpitc + Pump it Up: The Collection (R5/v3.43 - Nov 14 2000) + + + pumpite + Pump it Up Extra (Mar 21 2001) + + + pumpitea + Pump it Up Extra (Mar 08 2001) + + + pumpito + Pump it Up The O.B.G: The Season Evolution Dance Floor (R4/v3.25 - Aug 27 2000) + + + pumpitp2 + Pump it Up The Premiere 2: The International 2nd Dance Floor (Premiere 2/2002) + + + pumpitp3 + Pump it Up The Premiere 3: The International 3rd Dance Floor (Premiere 3/2003 - 28th Mar 2003) + + + pumpitp3a + Pump it Up The Premiere 3: The International 3rd Dance Floor (Premiere 3/2003 - 17th Mar 2003) + + + pumpitpc + Pump it Up: The Perfect Collection (R5/v3.52 - Dec 18 2000) + + + pumpitpr + Pump it Up The Premiere: The International Dance Floor (R6/v4.01 - Feb 22 2001) + + + pumpitpru + Pump it Up The Premiere: The International Dance Floor (R6/v4.01 - Feb 22 2001 USA) + + + pumpitpx + Pump it Up The PREX: The International Dance Floor (REV2 / 101) + punchita Punch-Out!! (Italian bootleg) @@ -95579,6 +97987,10 @@ punkshot2 Punk Shot (US 2 Players) + + punkshot2a + Punk Shot (Asia 2 Players, hacked?) + punkshot2e Punk Shot (World 2 Players) @@ -95815,6 +98227,10 @@ puzznicu Puzznic (US) + + pwball + Power Ball (prototype) + pwerplay Power Play (Pinball) @@ -95887,6 +98303,10 @@ pyros Pyros (US) + + pyutakun + Pyuuta-kun (Japan) + pz_f4 The Party Zone (F-4) @@ -95925,7 +98345,7 @@ pzloop2 - Puzz Loop 2 (Euro 010302) + Puzz Loop 2 (Europe 010302) pzloop2j @@ -96007,6 +98427,10 @@ qcrayon2 Crayon Shinchan Orato Asobo (Japan) + + qczl + Qing Cheng Zhi Lian + qdrmfgp Quiz Do Re Mi Fa Grand Prix (Japan) @@ -96027,6 +98451,14 @@ qgundam Quiz Mobile Suit Gundam: Monsenshi (QG1 Ver. A) + + qhzb + Que Huang Zheng Ba (V100CN) + + + qiwang + Qi Wang + qix Qix (Rev 2) @@ -96053,7 +98485,7 @@ qlgs - Que Long Gao Shou + Que Long Gaoshou (S501CN) qmegamis @@ -96065,11 +98497,15 @@ qncrash - Quick & Crash (V2.200) + Quick & Crash (Japan, V2.200) + + + qncrasha + Quick & Crash (US) qndream - Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 96086) + Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 960826) qnile @@ -96479,10 +98915,6 @@ quizardi Quizard (v1.8, Italian, i8751 IT 11 I2) - - quizardi_10 - Quizard (v1.0, Italian, i8751 IT 11 I2) - quizardi_12 Quizard (v1.2, Italian, i8751 IT 11 I2) @@ -96601,7 +99033,7 @@ qwakttl - Qwak!/Quack [TTL] + Qwak!/Quack qzchikyu @@ -96639,6 +99071,10 @@ r_alaska Alaska + + r_antar + Antar (Recel) + r_blackm4 Black Magic 4 @@ -96687,6 +99123,10 @@ r_screech Screech + + r_spcgame7 + Space Game (Bingo 6+1) + r_swash SwashBuckler @@ -96899,6 +99339,10 @@ raceon Race On! (World, RO2 Ver. A) + + raceonj + Race On! (Japan, RO1 Ver. B) + rachero Racing Hero (FD1094 317-0144) @@ -97029,7 +99473,7 @@ rackemup - Rack 'em Up (program code L) + Rack 'em Up (version L) racknrol @@ -97083,6 +99527,10 @@ radcl_p3 Radical! (P-3) + + radendur + Radical Enduro (early prototype) + radikalb Radikal Bikers (version 2.02) @@ -97211,6 +99659,10 @@ raiden2g Raiden II (Germany) + + raiden2gb + Raiden II (Great Britain) + raiden2hk Raiden II (Hong Kong) @@ -97361,15 +99813,15 @@ raimais - Raimais (World) + Raimais (World, rev 1) raimaisj - Raimais (Japan) + Raimais (Japan, rev 1) raimaisjo - Raimais (Japan, first revision) + Raimais (Japan) raimfire @@ -97409,7 +99861,7 @@ rallybik - Rally Bike / Dash Yarou + Rally Bike (Europe, US) / Dash Yarou (Japan) rallych @@ -97499,6 +99951,10 @@ ramprt2p Rampart (Joystick) + + ramstar + unknown Ram Star multi-game (version 80.1) + rangrmsn Ranger Mission @@ -97521,15 +99977,15 @@ rapidfir - Rapid Fire v1.1 (Build 239) + Rapid Fire (v1.1, Build 239) rapidfira - Rapid Fire v1.1 (Build 238) + Rapid Fire (v1.1, Build 238) rapidfire - Rapid Fire v1.0 (Build 236) + Rapid Fire (v1.0, Build 236) rapidrvr @@ -97607,6 +100063,10 @@ rastsagab Rastan Saga (Japan, earlier code base) + + rastsagabr + Rastan Saga (Portuguese-BR Translation v1.11, Hack) + ratrc_l1 Rat Race (L-1) @@ -97663,6 +100123,10 @@ raystorm Ray Storm (Ver 2.06A) + + raystormg + Ray Storm (VER 2.60G) + raystormj Ray Storm (Ver 2.05J) @@ -97737,7 +100201,7 @@ rbisland - Rainbow Islands (new version) + Rainbow Islands (rev 1) rbislande @@ -97745,7 +100209,7 @@ rbislando - Rainbow Islands (old version) + Rainbow Islands rblaster @@ -97803,6 +100267,10 @@ rchasej Rail Chase (Japan) + + rchasejb + Rail Chase (Japan, Rev B) + rcirulet Ruleta RCI (6-players, Spanish) @@ -98029,7 +100497,11 @@ rdftadi - Raiden Fighters (Korea) + Raiden Fighters (Korea, SUB4 cart) + + + rdftadia + Raiden Fighters (Korea, SUB2 cart) rdftam @@ -98101,7 +100573,11 @@ re800v1 - Ruleta RE-800 (v1.0) + Ruleta RE-800 (v1.0, set 1) + + + re800v1a + Ruleta RE-800 (v1.0, set 2) re800v3 @@ -98157,7 +100633,7 @@ rebound - Rebound (Rev B) [TTL] + Rebound (Rev B) rebus @@ -98229,7 +100705,7 @@ redearth - Red Earth (Euro 961121) + Red Earth (Europe 961121) redearthn @@ -98241,7 +100717,7 @@ redearthr1 - Red Earth (Euro 961023) + Red Earth (Europe 961023) redfoxwp2 @@ -98331,6 +100807,10 @@ reelfun1 Reel Fun (Version 7.01) + + reelmtp + Reel Magic Turbo Play + reelpwr Reel Power (0100400V, NSW/ACT) @@ -98391,6 +100871,10 @@ renaimj Renai Mahjong Idol Gakuen (Japan) + + rendfgtr + Renda Fighter (Japan, main ver. 2.02, video ver. 2.03) + renegade Renegade (US) @@ -98541,19 +101025,23 @@ retofinvb - Return of the Invaders (bootleg w/MCU) + Return of the Invaders (bootleg, with MCU) retofinvb1 - Return of the Invaders (bootleg no MCU set 1) + Return of the Invaders (bootleg, without MCU, set 1) retofinvb2 - Return of the Invaders (bootleg no MCU set 2) + Return of the Invaders (bootleg, without MCU, set 2) retofinvb3 - Return of the Invaders (bootleg no MCU set 3) + Return of the Invaders (bootleg, without MCU, set 3) + + + retofinvbv + Return of the Invaders (Video Dens bootleg, without MCU) retrsam @@ -98607,6 +101095,10 @@ rf51w14cg unknown Recreativos Franco slot machine (model RF51W14-CG) + + rfjailbrk + Jail Break (Recreativos Franco slot machine) + rfjet Raiden Fighters Jet (Germany) @@ -98655,6 +101147,14 @@ rfsantafeg Santa Fe Golden + + rfsantafem + Santa Fe Mine (set 1) + + + rfsantafema + Santa Fe Mine (set 2) + rgum Royal Gum (Italy) @@ -98665,7 +101165,7 @@ rhunting - Robot Hunting (bootleg of Death Race) [TTL] + Robot Hunting (bootleg of Death Race) rhytngk @@ -98805,11 +101305,11 @@ ringball - Ring Ball (Ver. 2.6) + Ring & Ball (Ver. 2.6) ringdest - Ring of Destruction: Slammasters II (Euro 940902) + Ring of Destruction: Slammasters II (Europe 940902) ringdesta @@ -98825,16 +101325,20 @@ ringdstd - Ring of Destruction: Slammasters II (Euro 940902 Phoenix Edition) (bootleg) + Ring of Destruction: Slammasters II (Europe 940902 Phoenix Edition) (bootleg) ringfgt - Ring Fighter (set 1) + Ring Fighter (rev 1) ringfgt2 Ring Fighter (set 2) + + ringfgta + Ring Fighter + ringkin2 Ring King (US set 2) @@ -98897,7 +101401,7 @@ riot - Riot + Riot (NMK) riotcity @@ -98905,7 +101409,7 @@ riotw - Riot (Woong Bi license) + Riot (Woong Bi) rip300 @@ -99065,7 +101569,7 @@ rmgoldyh - Real Mahjong Gold Yumehai / Super Real Mahjong GOLD part.2 [BET] (Japan) + Real Mahjong Gold Yumehai / Super Real Mahjong GOLD part.2 (Japan) rmhaihai @@ -99075,9 +101579,13 @@ rmhaihai2 Real Mahjong Haihai (Japan, older) + + rmhaihaibl + Real Mahjong Haihai (Japan, bootleg) + rmhaihib - Real Mahjong Haihai [BET] (Japan) + Real Mahjong Haihai (Japan, medal) rmhaijin @@ -99583,6 +102091,10 @@ rockroll Rock 'n' Roll + + rocktcnvy + Rocket Convoy + rocktris Rock Tris @@ -99615,6 +102127,10 @@ rodent Rodent Exterminator + + rodeokng + Rodeo King (Japan, ver 1.00) + rodland Rod-Land (World, set 1) @@ -99775,9 +102291,13 @@ rollr_g3 Rollergames (LG-3) Germany + + rollr_l1 + Rollergames (LA-1) + rollr_l2 - Rollergames (L-2) + Rollergames (LA-2) rollr_l3 @@ -99821,11 +102341,23 @@ ronjan - Ron Jan + Ron Jan (set 1) + + + ronjana + Ron Jan (set 2) ronjans - Ron Jan Super + Ron Jan Super (set 1) + + + ronjansa + Ron Jan Super (set 2) + + + ronjansb + Ron Jan Super (set 3) ropeman @@ -99851,6 +102383,10 @@ rotd Rage of the Dragons (NGM-2640?) + + rotdbr + Rage of the Dragons (Portuguese edition v2.0, Hack) + rotdh Rage of the Dragons (NGH-2640?) @@ -100001,7 +102537,7 @@ royalngt - Royal Night [BET] (Japan 840220 RN 2-00) + Royal Night (Japan 840220 RN 2-00) royalpk2 @@ -100009,7 +102545,7 @@ royalqn - Royal Queen [BET] (Japan 841010 RQ 0-07) + Royal Queen (Japan 841010 RQ 0-07) royclark @@ -100255,9 +102791,13 @@ rulechan Super Ball (Version EC-3.50 N322) + + ruletamag + Ruleta Mágica + rumba - Rumba Lumber + Rumba Lumber (rev 1) rumblef @@ -100328,21 +102868,29 @@ Run and Gun (US ver. UAB) - rungunua - Run and Gun (ver UBA 1993 10.8) + rungunuaad + Run and Gun (ver UAB 1993 9.10, dedicated twin cabinet) - rungunuad - Run and Gun (ver UBA 1993 10.8) (dual screen with demux adapter) + rungunuabd + Run and Gun (ver UAB 1993 10.12, dedicated twin cabinet) - rungunud - Run and Gun (ver UAB 1993 10.12, dedicated twin cabinet) + rungunuba + Run and Gun (ver UBA 1993 10.8) + + + rungunubad + Run and Gun (ver UBA 1993 10.8) (dual screen with demux adapter) runpuppy Run Run Puppy + + runrun + Run Run (Do! Run Run bootleg) + ruprup Roll Up! Roll Up!! (10115911, NSW/ACT) @@ -100381,7 +102929,7 @@ rvschool - Rival Schools: United By Fate (Euro 971117) + Rival Schools: United By Fate (Europe 971117) rvschoola @@ -100461,7 +103009,7 @@ ryuuha - Ryuuha [BET] (Japan 871027) + Ryuuha (Japan 871027) s1945 @@ -100599,6 +103147,10 @@ sailmnxy Bishoujo Senshi Sailor Moon (New Moon, Hack) + + sailmnyg + Pretty Soldier Sailor Moon (Moonlight, Hack) + sailmnyh Bishoujo Senshi Sailor Moon (Optimised, Hack) @@ -100697,7 +103249,7 @@ sailorwr - Mahjong Sailor Wars-R [BET] (Japan) + Mahjong Sailor Wars-R (Japan) sailorws @@ -100747,13 +103299,17 @@ salamandj Salamander (version J) + + salamandt + Salamander (Tecfri license) + salamanj Salamander (version J) salarymc - Salary Man Champ (GCA18 VER. JAA) + Salary Man Champ - Tatakau Salary Man (GCA18 VER. JAA) salmankt @@ -100793,11 +103349,11 @@ samesame - Same! Same! Same! (1P set) + Same! Same! Same! (Japan, 1P set) samesame2 - Same! Same! Same! (2P set) + Same! Same! Same! (Japan, 2P set) samesamecn @@ -100805,7 +103361,7 @@ samesamenh - Same! Same! Same! (1P set, NEW VER! hack) + Same! Same! Same! (Japan, 1P set, NEW VER! hack) sams64 @@ -100881,7 +103437,7 @@ samsho2pe - Samurai Shodown II / Shin Samurai Spirits - Haohmaru Jigokuhen (Perfect V. 1.9, Hack) + Samurai Shodown II / Shin Samurai Spirits - Haohmaru Jigokuhen (Perfect V. 2.4, Hack) samsho2t @@ -100977,7 +103533,7 @@ sanma - Sanma - San-nin Uchi Mahjong [BET] (Japan, version 2.60) + Sanma - San-nin Uchi Mahjong (Japan, version 2.60) sanremmg @@ -100985,7 +103541,11 @@ santaball - SantaBall - Christmas Tennis Game + SantaBall - Christmas Tennis Game (HB) + + + santacl + Santa Claus (IN.001.07.A) santam @@ -101027,6 +103587,10 @@ sathena Super Athena (bootleg) + + satoyama + Satoyama Grand Prix + satsf3d Saturn: Space Fighter 3D @@ -101119,6 +103683,10 @@ sbagmans Super Bagman (Stern Electronics) + + sball2k1 + Super Ball 2001 (Italy version 5.23) + sbasebal Super Champion Baseball (US) @@ -101305,7 +103873,7 @@ sburners - Street Burners [TTL] + Street Burners sbxc @@ -101821,7 +104389,7 @@ sc1gprix - Grand Prix (Dutch) (Dutch) (Bellfruit) (Scorpion 1) + Grand Prix (Dutch) (Bellfruit) (Scorpion 1) sc1gslam @@ -107641,675 +110209,675 @@ sc4dnd - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL016, set 1) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL016, set 1) sc4dnda - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL422, set 2) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL422, set 2) sc4dndb - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL016, set 2) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL016, set 2) sc4dndbb - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE471, set 1) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE471, set 1) sc4dndbba - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE472, set 1) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE472, set 1) sc4dndbbb - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE471, set 2) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE471, set 2) sc4dndbbc - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE472, set 2) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE472, set 2) sc4dndbbd - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE473, set 1) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE473, set 1) sc4dndbbe - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE571, set 1) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE571, set 1) sc4dndbbf - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE572, set 1) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE572, set 1) sc4dndbbg - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE473, set 2) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE473, set 2) sc4dndbbh - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE571, set 2) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE571, set 2) sc4dndbbi - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE572, set 2) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 4) (CRBE572, set 2) sc4dndbc - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 4) (BOXR571, set 1) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 4) (BOXR571, set 1) sc4dndbca - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 4) (BOXR571, set 2) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 4) (BOXR571, set 2) sc4dndbd - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA471, set 1) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA471, set 1) sc4dndbda - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA471, set 2) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA471, set 2) sc4dndbdb - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA472, set 1) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA472, set 1) sc4dndbdc - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA571, set 1) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA571, set 1) sc4dndbdd - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA472, set 2) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA472, set 2) sc4dndbde - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA571, set 2) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 4) (BGDA571, set 2) sc4dndbe - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK012, set 1) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK012, set 1) sc4dndbeb - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK422, set 1) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK422, set 1) sc4dndbec - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK012, set 2) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK012, set 2) sc4dndbed - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK422, set 2) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK422, set 2) sc4dndbee - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK423, set 1) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK423, set 1) sc4dndbef - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK425, set 1) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK425, set 1) sc4dndbeg - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK013, set 1) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK013, set 1) sc4dndbeh - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK014, set 1) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK014, set 1) sc4dndbei - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK423, set 2) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK423, set 2) sc4dndbej - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK425, set 2) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK425, set 2) sc4dndbek - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK013, set 2) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK013, set 2) sc4dndbel - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK014, set 2) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK014, set 2) sc4dndbem - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK426, set 1) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK426, set 1) sc4dndben - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK426, set 2) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 4) (DBTK426, set 2) sc4dndbr - Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD471, set 1) + Deal or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD471, set 1) sc4dndbra - Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD472, set 1) + Deal or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD472, set 1) sc4dndbrb - Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD471, set 2) + Deal or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD471, set 2) sc4dndbrc - Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD472, set 2) + Deal or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD472, set 2) sc4dndbrd - Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD475, set 1) + Deal or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD475, set 1) sc4dndbre - Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD571, set 1) + Deal or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD571, set 1) sc4dndbrf - Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD475, set 2) + Deal or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD475, set 2) sc4dndbrg - Deal Or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD571, set 2) + Deal or No Deal The Big Reds (Bellfruit) (Scorpion 4) (BIGD571, set 2) sc4dndc - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL422, set 1) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL422, set 1) sc4dndcc - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR471, set 1) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR471, set 1) sc4dndcca - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR474) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR474) sc4dndccb - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR471, set 2) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR471, set 2) sc4dndccc - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR475, set 1) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR475, set 1) sc4dndccd - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR571, set 1) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR571, set 1) sc4dndcce - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR475, set 2) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR475, set 2) sc4dndccf - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR571, set 2) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 4) (CRZR571, set 2) sc4dndcl - Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL313, set 1) + Deal or No Deal Club (Bellfruit) (Scorpion 4) (DNDL313, set 1) sc4dndcla - Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL212, set 1) + Deal or No Deal Club (Bellfruit) (Scorpion 4) (DNDL212, set 1) sc4dndclb - Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL391, set 1) + Deal or No Deal Club (Bellfruit) (Scorpion 4) (DNDL391, set 1) sc4dndclc - Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL181, set 1) + Deal or No Deal Club (Bellfruit) (Scorpion 4) (DNDL181, set 1) sc4dndcld - Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL313, set 2) + Deal or No Deal Club (Bellfruit) (Scorpion 4) (DNDL313, set 2) sc4dndcle - Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL212, set 2) + Deal or No Deal Club (Bellfruit) (Scorpion 4) (DNDL212, set 2) sc4dndclf - Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL391, set 2) + Deal or No Deal Club (Bellfruit) (Scorpion 4) (DNDL391, set 2) sc4dndclg - Deal Or No Deal Club (Bellfruit) (Scorpion 4) (DNDL181, set 2) + Deal or No Deal Club (Bellfruit) (Scorpion 4) (DNDL181, set 2) sc4dndcs - Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD211, set 1) + Deal or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD211, set 1) sc4dndcsa - Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD212, set 1) + Deal or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD212, set 1) sc4dndcsb - Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD211, set 2) + Deal or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD211, set 2) sc4dndcsc - Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD212, set 2) + Deal or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD212, set 2) sc4dndcsd - Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD215, set 1) + Deal or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD215, set 1) sc4dndcse - Deal Or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD215, set 2) + Deal or No Deal Classic (Bellfruit) (Scorpion 4) (CLDD215, set 2) sc4dndcw - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH271, set 1) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH271, set 1) sc4dndcwa - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH272, set 1) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH272, set 1) sc4dndcwb - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH271, set 2) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH271, set 2) sc4dndcwc - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH272, set 2) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 4) (CWOH272, set 2) sc4dndd - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL402, set 1) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL402, set 1) sc4dnddd - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO471, set 1) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 4) (DDNO471, set 1) sc4dnddda - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO571, set 1) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 4) (DDNO571, set 1) sc4dndddb - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO572, set 1) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 4) (DDNO572, set 1) sc4dndddc - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO573, set 1) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 4) (DDNO573, set 1) sc4dndddd - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO471, set 2) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 4) (DDNO471, set 2) sc4dnddde - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO571, set 2) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 4) (DDNO571, set 2) sc4dndddf - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO572, set 2) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 4) (DDNO572, set 2) sc4dndddg - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 4) (DDNO573, set 2) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 4) (DDNO573, set 2) sc4dnddf - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC471, set 1) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC471, set 1) sc4dnddfa - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC471, set 2) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC471, set 2) sc4dnddfb - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC475, set 1) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC475, set 1) sc4dnddfc - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC571, set 1) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC571, set 1) sc4dnddfd - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC475, set 2) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC475, set 2) sc4dnddfe - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC571, set 2) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 4) (TDFC571, set 2) sc4dnddw - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN471, set 1) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN471, set 1) sc4dnddwa - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN473, set 1) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN473, set 1) sc4dnddwb - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN471, set 2) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN471, set 2) sc4dnddwc - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN473, set 2) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN473, set 2) sc4dnddwd - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN475, set 1) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN475, set 1) sc4dnddwe - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN572, set 1) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN572, set 1) sc4dnddwf - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN475, set 2) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN475, set 2) sc4dnddwg - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN572, set 2) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 4) (DOFN572, set 2) sc4dnde - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL017, set 1) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL017, set 1) sc4dndf - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL018, set 1) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL018, set 1) sc4dndg - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL402, set 2) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL402, set 2) sc4dndh - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL017, set 2) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL017, set 2) sc4dndhf - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA473, set 1) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA473, set 1) sc4dndhfa - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA473, set 2) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA473, set 2) sc4dndhfb - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA477, set 1) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA477, set 1) sc4dndhfc - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA571, set 1) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA571, set 1) sc4dndhfd - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA477, set 2) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA477, set 2) sc4dndhfe - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA571, set 2) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA571, set 2) sc4dndhff - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA471, set 1) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA471, set 1) sc4dndhfg - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA472, set 1) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA472, set 1) sc4dndhfh - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA471, set 2) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA471, set 2) sc4dndhfi - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA472, set 2) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA472, set 2) sc4dndhfj - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA476) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA476) sc4dndhfk - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA572, set 1, bad?) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA572, set 1, bad?) sc4dndhfl - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA572, set 2, bad?) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 4) (DNHA572, set 2, bad?) sc4dndi - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL018, set 2) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL018, set 2) sc4dndj - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL406, set 1) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL406, set 1) sc4dndk - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL428, set 1) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL428, set 1) sc4dndl - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL406, set 2) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL406, set 2) sc4dndlp - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN571, set 1) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 4) (LPDN571, set 1) sc4dndlpa - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN572, set 1) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 4) (LPDN572, set 1) sc4dndlpb - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN573, set 1) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 4) (LPDN573, set 1) sc4dndlpc - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN571, set 2) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 4) (LPDN571, set 2) sc4dndlpd - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN572, set 2) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 4) (LPDN572, set 2) sc4dndlpe - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 4) (LPDN573, set 2) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 4) (LPDN573, set 2) sc4dndm - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL428, set 2) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL428, set 2) sc4dndn - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL424, set 1) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL424, set 1) sc4dndo - Deal Or No Deal (Bellfruit) (Scorpion 4) (DONL424, set 2) + Deal or No Deal (Bellfruit) (Scorpion 4) (DONL424, set 2) sc4dndpg - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG471, set 1) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG471, set 1) sc4dndpga - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG571, set 1) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG571, set 1) sc4dndpgb - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG572, set 1) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG572, set 1) sc4dndpgc - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG471, set 2) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPBG471, set 2) sc4dndpgd - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPGB571, set 2) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPGB571, set 2) sc4dndpge - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPGB572, set 2) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 4) (TPGB572, set 2) sc4dndra - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT471, set 1) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT471, set 1) sc4dndraa - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT471, set 2) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT471, set 2) sc4dndrab - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT474, set 1) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT474, set 1) sc4dndrac - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT572, set 1) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT572, set 1) sc4dndrad - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT474, set 2) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT474, set 2) sc4dndrae - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT572, set 2) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 4) (REDT572, set 2) sc4dndtp - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV411, set 1) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV411, set 1) sc4dndtpa - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV412, set 1) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV412, set 1) sc4dndtpb - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV413, set 1) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV413, set 1) sc4dndtpc - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV414, set 1, bad) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV414, set 1, bad) sc4dndtpd - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV415, set 1) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV415, set 1) sc4dndtpe - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV411, set 2) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV411, set 2) sc4dndtpf - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV412, set 2) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV412, set 2) sc4dndtpg - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV413, set 2) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV413, set 2) sc4dndtph - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV414, set 2, bad) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV414, set 2, bad) sc4dndtpi - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV415, set 2) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV415, set 2) sc4dndtpj - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV41A, set 1) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV41A, set 1) sc4dndtpk - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV41A, set 2) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV41A, set 2) sc4dndtpl - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV416, set 1) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV416, set 1) sc4dndtpm - Deal Or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV416, set 2) + Deal or No Deal The Power 5 (Bellfruit) (Scorpion 4) (TPRV416, set 2) sc4dndtr - Deal Or No Deal Think Red (Bellfruit) (Scorpion 4) (THRE571, set 1) + Deal or No Deal Think Red (Bellfruit) (Scorpion 4) (THRE571, set 1) sc4dndtra - Deal Or No Deal Think Red (Bellfruit) (Scorpion 4) (THRE571, set 2) + Deal or No Deal Think Red (Bellfruit) (Scorpion 4) (THRE571, set 2) sc4dndwb - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX412, set 1) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX412, set 1) sc4dndwba - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX414, set 1) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX414, set 1) sc4dndwbb - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX412, set 2) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX412, set 2) sc4dndwbc - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX414, set 2) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX414, set 2) sc4dndwbd - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX415, set 1) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX415, set 1) sc4dndwbe - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX415, set 2) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX415, set 2) sc4dndwbf - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX419, set 1) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX419, set 1) sc4dndwbg - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX419, set 2) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 4) (WIYX419, set 2) sc4dndww - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH411, set 1) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH411, set 1) sc4dndwwa - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH412, set 1) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH412, set 1) sc4dndwwb - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH411, set 2) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH411, set 2) sc4dndwwc - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH415, set 1) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH415, set 1) sc4dndwwd - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH415, set 2) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH415, set 2) sc4dndwwe - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH412, set 2) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 4) (TWOH412, set 2) sc4dndys - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO571, set 1) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO571, set 1) sc4dndysa - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO474, set 1) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO474, set 1) sc4dndysb - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO571, set 2) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO571, set 2) sc4dndysc - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO474, set 2) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 4) (DOBO474, set 2) sc4dough @@ -118153,35 +120721,35 @@ sc5ddbbc - Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 1) sc5ddbbca - Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 2) sc5ddbbcb - Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 3) sc5ddbbcc - Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 4) sc5ddbbcd - Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 5) sc5ddbbce - Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 6) sc5ddbbcf - Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 7) sc5ddbbcg - Deal Or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Beat The Banker Casino (Bellfruit) (Scorpion 5) (set 8) sc5ddosh @@ -118193,27 +120761,27 @@ sc5ddply - Deal Or No Deal Player's Choice (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Player's Choice (Bellfruit) (Scorpion 5) (set 1) sc5ddplya - Deal Or No Deal Player's Choice (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Player's Choice (Bellfruit) (Scorpion 5) (set 2) sc5ddptg - Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 1) sc5ddptga - Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 2) sc5ddptgb - Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 3) sc5ddptgc - Deal Or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Play The Game (Bellfruit) (Scorpion 5) (set 4) sc5devil @@ -118317,2119 +120885,2119 @@ sc5dnd - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 1) sc5dnda - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 2) sc5dndb - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 3) sc5dndbb - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 1) sc5dndbba - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 2) sc5dndbbb - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 3) sc5dndbbc - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 4) sc5dndbbd - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 5) sc5dndbbe - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 6) sc5dndbbf - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 7) sc5dndbbg - Deal Or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Break The Bank (Bellfruit) (Scorpion 5) (set 8) sc5dndbc - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 1) sc5dndbca - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 2) sc5dndbcb - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 3) sc5dndbcc - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 4) sc5dndbcd - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 5) sc5dndbce - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 6) sc5dndbcf - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 7) sc5dndbcg - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 8) sc5dndbch - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 9) sc5dndbci - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 10) sc5dndbcj - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 11) sc5dndbck - Deal Or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Box Clever (Bellfruit) (Scorpion 5) (set 12) sc5dndbd - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 1) sc5dndbda - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 2) sc5dndbdb - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 3) sc5dndbdc - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 4) sc5dndbdd - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 5) sc5dndbde - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 6) sc5dndbdf - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 7) sc5dndbdg - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 8) sc5dndbdh - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 9) sc5dndbdi - Deal Or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal The Big Deal (Bellfruit) (Scorpion 5) (set 10) sc5dndbe - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 1) sc5dndbea - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 2) sc5dndbeb - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 3) sc5dndbec - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 4) sc5dndbed - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 5) sc5dndbee - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 6) sc5dndbef - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 7) sc5dndbeg - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 8) sc5dndbeh - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 9) sc5dndbei - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 10) sc5dndbej - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 11) sc5dndbek - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 12) sc5dndbel - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 13) sc5dndbem - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 14) sc5dndben - Deal Or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal Beat The Banker (Bellfruit) (Scorpion 5) (set 15) sc5dndbl - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 1) sc5dndbla - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 2) sc5dndblb - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 3) sc5dndblc - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 4) sc5dndbld - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 5) sc5dndble - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 6) sc5dndblf - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 7) sc5dndblg - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 8) sc5dndblh - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 9) sc5dndbli - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 10) sc5dndblj - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 11) sc5dndblk - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 12) sc5dndbll - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 13) sc5dndblm - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 14) sc5dndbln - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 15) sc5dndblo - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 16) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 16) sc5dndblp - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 17) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 17) sc5dndblq - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 18) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 18) sc5dndblr - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 19) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 19) sc5dndbls - Deal Or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 20) + Deal or No Deal Beat The Banker Club (Bellfruit) (Scorpion 5) (set 20) sc5dndbo - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 1) sc5dndboa - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 2) sc5dndbob - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 3) sc5dndboc - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 4) sc5dndbod - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 5) sc5dndboe - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 6) sc5dndbof - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 7) sc5dndbog - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 8) sc5dndboh - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 9) sc5dndboi - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 10) sc5dndboj - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 11) sc5dndbok - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 12) sc5dndbol - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 13) sc5dndbom - Deal Or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal Banker's Bonus (Bellfruit) (Scorpion 5) (set 14) sc5dndbq - Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 1) + Deal or No Deal Beat The Banker (Qps) (Scorpion 5) (set 1) sc5dndbqa - Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 2) + Deal or No Deal Beat The Banker (Qps) (Scorpion 5) (set 2) sc5dndbqb - Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 3) + Deal or No Deal Beat The Banker (Qps) (Scorpion 5) (set 3) sc5dndbqc - Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 4) + Deal or No Deal Beat The Banker (Qps) (Scorpion 5) (set 4) sc5dndbqd - Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 5) + Deal or No Deal Beat The Banker (Qps) (Scorpion 5) (set 5) sc5dndbqe - Deal Or No Deal Beat The Banker (Qps) (Scorpion 5) (set 6) + Deal or No Deal Beat The Banker (Qps) (Scorpion 5) (set 6) sc5dndbr - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 1) sc5dndbra - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 2) sc5dndbrb - Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 1) sc5dndbrc - Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 2) sc5dndbrd - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 3) sc5dndbre - Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 3) sc5dndbrf - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 4) sc5dndbrg - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 5) sc5dndbrh - Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 4) sc5dndbri - Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 5) sc5dndbrj - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 6) sc5dndbrk - Deal Or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Big Reds (PR3018) (Bellfruit) (Scorpion 5) (set 6) sc5dndbrl - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 7) sc5dndbrm - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 8) sc5dndbrn - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 9) sc5dndbro - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 10) sc5dndbrp - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 11) sc5dndbrq - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 12) sc5dndbrr - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 13) sc5dndbrs - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 14) sc5dndbrt - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 15) sc5dndbru - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 16) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 16) sc5dndbrv - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 17) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 17) sc5dndbrw - Deal Or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 18) + Deal or No Deal The Big Reds (PR3011) (Bellfruit) (Scorpion 5) (set 18) sc5dndc - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 4) sc5dndc2 - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 1) sc5dndc2a - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 2) sc5dndc2b - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 3) sc5dndc2c - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 4) sc5dndc2d - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 5) sc5dndc2e - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 6) sc5dndc2f - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 7) sc5dndc2g - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 8) sc5dndc2h - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 9) sc5dndc2i - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 10) sc5dndc2j - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 11) sc5dndc2k - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 12) sc5dndc2l - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 13) sc5dndc2m - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 14) sc5dndc2n - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 15) sc5dndc2o - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 16) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 16) sc5dndc2p - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 17) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 17) sc5dndc2q - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 18) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 18) sc5dndc2r - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 19) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 19) sc5dndc2s - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 20) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 20) sc5dndc2t - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 21) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 21) sc5dndc2u - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 22) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 22) sc5dndc2v - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 23) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 23) sc5dndc2w - Deal Or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 24) + Deal or No Deal Casino (PR1964) (Bellfruit) (Scorpion 5) (set 24) sc5dndc3 - Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 1) sc5dndc3a - Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 2) sc5dndc3b - Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 3) sc5dndc3c - Deal Or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Casino (PR1965) (Bellfruit) (Scorpion 5) (set 4) sc5dndca - Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 1) sc5dndcaa - Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 2) sc5dndcab - Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 3) sc5dndcac - Deal Or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Crazy Chair Arcade (PR3250) (Bellfruit) (Scorpion 5) (set 4) sc5dndcad - Deal Or No Deal The Crazy Chair Arcade (PR3362) (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Crazy Chair Arcade (PR3362) (Bellfruit) (Scorpion 5) (set 1) sc5dndcae - Deal Or No Deal The Crazy Chair Arcade (PR3362) (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Crazy Chair Arcade (PR3362) (Bellfruit) (Scorpion 5) (set 2) sc5dndcb - Deal Or No Deal Club Beat The Banker (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Club Beat The Banker (Bellfruit) (Scorpion 5) (set 1) sc5dndcba - Deal Or No Deal Club Beat The Banker (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Club Beat The Banker (Bellfruit) (Scorpion 5) (set 2) sc5dndcc - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 1) sc5dndcca - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 2) sc5dndccb - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 3) sc5dndccc - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 4) sc5dndccd - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 5) sc5dndcce - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 6) sc5dndccf - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 7) sc5dndccg - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 8) sc5dndcch - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 9) sc5dndcci - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 10) sc5dndccj - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 11) sc5dndcck - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 12) sc5dndccl - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 13) sc5dndccm - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 14) sc5dndccn - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 15) sc5dndcco - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 16) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 16) sc5dndccp - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 17) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 17) sc5dndccq - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 18) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 18) sc5dndccr - Deal Or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 19) + Deal or No Deal The Crazy Chair (Bellfruit) (Scorpion 5) (set 19) sc5dndcl - Deal Or No Deal Club (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Club (Bellfruit) (Scorpion 5) (set 1) sc5dndcla - Deal Or No Deal Club (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Club (Bellfruit) (Scorpion 5) (set 2) sc5dndcr - Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 1) sc5dndcra - Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 2) sc5dndcrb - Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 3) sc5dndcrc - Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 4) sc5dndcrd - Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 5) sc5dndcre - Deal Or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Cops 'n' Robbers (Bellfruit) (Scorpion 5) (set 6) sc5dndcs - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 1) sc5dndcsa - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 2) sc5dndcsb - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 3) sc5dndcsc - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 4) sc5dndcsd - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 5) sc5dndcse - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 6) sc5dndcsf - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 7) sc5dndcsg - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 8) sc5dndcsh - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 9) sc5dndcsi - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 10) sc5dndcsj - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 11) sc5dndcsk - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 12) sc5dndcsl - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 13) sc5dndcsm - Deal Or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal Casino (PR1954) (Bellfruit) (Scorpion 5) (set 14) sc5dndd - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 5) sc5dnddd - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 5) (set 1) sc5dnddda - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 5) (set 2) sc5dndddb - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 5) (set 3) sc5dndddc - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 5) (set 4) sc5dndddd - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 5) (set 5) sc5dnddde - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 5) (set 6) sc5dndddf - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 5) (set 7) sc5dndddg - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 5) (set 8) sc5dndddh - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 5) (set 9) sc5dndddi - Deal Or No Deal Double Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Double Deal or No Deal (Bellfruit) (Scorpion 5) (set 10) sc5dndde - Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 1) sc5dnddea - Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 2) sc5dnddeb - Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 3) sc5dnddec - Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 4) sc5dndded - Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 5) sc5dnddee - Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 6) sc5dnddef - Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 7) sc5dnddeg - Deal Or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Desert Island Deal (Bellfruit) (Scorpion 5) (set 8) sc5dnddf - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 1) sc5dnddfa - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 2) sc5dnddfb - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 3) sc5dnddfc - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 4) sc5dnddfd - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 5) sc5dnddfe - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 6) sc5dnddff - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 7) sc5dnddfg - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 8) sc5dnddfh - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 9) sc5dnddfi - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 10) sc5dnddfj - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 11) sc5dnddfk - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 12) sc5dnddfl - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 13) sc5dnddfm - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 14) sc5dnddfn - Deal Or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal The Dream Factory (Bellfruit) (Scorpion 5) (set 15) sc5dnddi - Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Diamond (Bellfruit) (Scorpion 5) (set 1) sc5dnddia - Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Diamond (Bellfruit) (Scorpion 5) (set 2) sc5dnddib - Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Diamond (Bellfruit) (Scorpion 5) (set 3) sc5dnddic - Deal Or No Deal Diamond (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Diamond (Bellfruit) (Scorpion 5) (set 4) sc5dnddo - Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 1) sc5dnddoa - Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 2) sc5dnddob - Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 3) sc5dnddoc - Deal Or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Dream Offer (Bellfruit) (Scorpion 5) (set 4) sc5dnddt - Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Double Take (Bellfruit) (Scorpion 5) (set 1) sc5dnddta - Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Double Take (Bellfruit) (Scorpion 5) (set 2) sc5dnddtb - Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Double Take (Bellfruit) (Scorpion 5) (set 3) sc5dnddtc - Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Double Take (Bellfruit) (Scorpion 5) (set 4) sc5dnddtd - Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Double Take (Bellfruit) (Scorpion 5) (set 5) sc5dnddte - Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Double Take (Bellfruit) (Scorpion 5) (set 6) sc5dnddtf - Deal Or No Deal Double Take (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Double Take (Bellfruit) (Scorpion 5) (set 7) sc5dnddw - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 1) sc5dnddwa - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 2) sc5dnddwb - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 3) sc5dnddwc - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 4) sc5dnddwd - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 5) sc5dnddwe - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 6) sc5dnddwf - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 7) sc5dnddwg - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 8) sc5dnddwh - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 9) sc5dnddwi - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 10) sc5dnddwj - Deal Or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal The Deal Wheel (Bellfruit) (Scorpion 5) (set 11) sc5dnde - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 6) sc5dndf - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 7) sc5dndfl - Deal Or No Deal Feeling Lucky (PR3432) (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Feeling Lucky (PR3432) (Bellfruit) (Scorpion 5) (set 1) sc5dndfla - Deal Or No Deal Feeling Lucky (PR3432) (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Feeling Lucky (PR3432) (Bellfruit) (Scorpion 5) (set 2) sc5dndflb - Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 1) sc5dndflc - Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 2) sc5dndfld - Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 3) sc5dndfle - Deal Or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Feeling Lucky (PR3309) (Bellfruit) (Scorpion 5) (set 4) sc5dndg - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 8) sc5dndgl - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 1) sc5dndgla - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 2) sc5dndglb - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 3) sc5dndglc - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 4) sc5dndgld - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 5) sc5dndgle - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 6) sc5dndglf - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 7) sc5dndglg - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 8) sc5dndglh - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 9) sc5dndgli - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 10) sc5dndglj - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 11) sc5dndglk - Deal Or No Deal Gold (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Gold (Bellfruit) (Scorpion 5) (set 12) sc5dndgo - Deal Or No Deal Game On (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Game On (Bellfruit) (Scorpion 5) (set 1) sc5dndgoa - Deal Or No Deal Game On (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Game On (Bellfruit) (Scorpion 5) (set 2) sc5dndh - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 9) sc5dndhf - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 1) sc5dndhfa - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 2) sc5dndhfb - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 3) sc5dndhfc - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 4) sc5dndhfd - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 5) sc5dndhfe - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 6) sc5dndhff - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 7) sc5dndhfg - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 8) sc5dndhfh - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 9) sc5dndhfi - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 10) sc5dndhfj - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 11) sc5dndhfk - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 12) sc5dndhfl - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 13) sc5dndhfm - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 14) sc5dndhfn - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 15) sc5dndhfo - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 16) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 16) sc5dndhfp - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 17) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 17) sc5dndhfq - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 18) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 18) sc5dndhfr - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 19) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 19) sc5dndhfs - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 20) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 20) sc5dndhft - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 21) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 21) sc5dndhfu - Deal Or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 22) + Deal or No Deal Hall Of Fame (Bellfruit) (Scorpion 5) (set 22) sc5dndi - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 10) sc5dndj - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 11) sc5dndk - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 12) sc5dndl - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 13) sc5dndld - Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 1) sc5dndlda - Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 2) sc5dndldb - Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 3) sc5dndldc - Deal Or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Live The Dream (Bellfruit) (Scorpion 5) (set 4) sc5dndlp - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 1) sc5dndlpa - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 2) sc5dndlpb - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 3) sc5dndlpc - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 4) sc5dndlpd - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 5) sc5dndlpe - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 6) sc5dndlpf - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 7) sc5dndlpg - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 8) sc5dndlph - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 9) sc5dndlpi - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 10) sc5dndlpj - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 11) sc5dndlpk - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 12) sc5dndlpl - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 13) sc5dndlpm - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 14) sc5dndlpn - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 15) sc5dndlpo - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 16) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 16) sc5dndlpp - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 17) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 17) sc5dndlpq - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 18) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 18) sc5dndlpr - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 19) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 19) sc5dndlps - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 20) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 20) sc5dndlpt - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 21) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 21) sc5dndlpu - Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit) (Scorpion 5) (set 22) + Deal or No Deal Let's Play Deal or No Deal (Bellfruit) (Scorpion 5) (set 22) sc5dndm - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 14) sc5dndmb - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 1) sc5dndmba - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 2) sc5dndmbb - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 3) sc5dndmbc - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 4) sc5dndmbd - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 5) sc5dndmbe - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 6) sc5dndmbf - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 7) sc5dndmbg - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 8) sc5dndmbh - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 9) sc5dndmbi - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 10) sc5dndmbj - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 11) sc5dndmbk - Deal Or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Make Or Break (Bellfruit) (Scorpion 5) (set 12) sc5dndmd - Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Mega Deal or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 1) sc5dndmda - Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Mega Deal or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 2) sc5dndmdb - Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Mega Deal or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 1) sc5dndmdc - Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Mega Deal or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 2) sc5dndmdd - Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Mega Deal or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 3) sc5dndmde - Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Mega Deal or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 4) sc5dndmdf - Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Mega Deal or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 5) sc5dndmdg - Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Mega Deal or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 3) sc5dndmdh - Deal Or No Deal Mega Deal Or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Mega Deal or No Deal (PR3496) (Bellfruit) (Scorpion 5) (set 4) sc5dndmdi - Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Mega Deal or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 6) sc5dndmdj - Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Mega Deal or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 7) sc5dndmdk - Deal Or No Deal Mega Deal Or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Mega Deal or No Deal (PR3411) (Bellfruit) (Scorpion 5) (set 8) sc5dndn - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 15) sc5dndo - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 16) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 16) sc5dndp - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 17) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 17) sc5dndpa - Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 1) sc5dndpaa - Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 2) sc5dndpab - Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 3) sc5dndpac - Deal Or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Play It Again (Bellfruit) (Scorpion 5) (set 4) sc5dndpc - Deal Or No Deal The Players Choice (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Players Choice (Bellfruit) (Scorpion 5) (set 1) sc5dndpca - Deal Or No Deal The Players Choice (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Players Choice (Bellfruit) (Scorpion 5) (set 2) sc5dndpd - Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 1) sc5dndpda - Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 2) sc5dndpdb - Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 3) sc5dndpdc - Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 4) sc5dndpdd - Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 5) sc5dndpde - Deal Or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Perfect Deal (Bellfruit) (Scorpion 5) (set 6) sc5dndpg - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 1) sc5dndpga - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 2) sc5dndpgb - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 3) sc5dndpgc - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 4) sc5dndpgd - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 5) sc5dndpge - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 6) sc5dndpgf - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 7) sc5dndpgg - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 8) sc5dndpgh - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 9) sc5dndpgi - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 10) sc5dndpgj - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 11) sc5dndpgk - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 12) sc5dndpgl - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 13) sc5dndpgm - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 14) sc5dndpgn - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 15) sc5dndpgo - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 16) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 16) sc5dndpgp - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 17) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 17) sc5dndpgq - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 18) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 18) sc5dndpgr - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 19) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 19) sc5dndpgs - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 20) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 20) sc5dndpgt - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 21) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 21) sc5dndpgu - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 22) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 22) sc5dndpgv - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 23) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 23) sc5dndpgw - Deal Or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 24) + Deal or No Deal The Perfect Game (Bellfruit) (Scorpion 5) (set 24) sc5dndpl - Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 1) sc5dndpla - Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 2) sc5dndplb - Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 3) sc5dndplc - Deal Or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Perfect Game Classic (Bellfruit) (Scorpion 5) (set 4) sc5dndq - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 18) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 18) sc5dndr - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 19) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 19) sc5dndra - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 1) sc5dndraa - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 2) sc5dndrab - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 3) sc5dndrac - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 4) sc5dndrad - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 5) sc5dndrae - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 6) sc5dndraf - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 7) sc5dndrag - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 8) sc5dndrah - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 9) sc5dndrai - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 10) sc5dndraj - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 11) sc5dndrak - Deal Or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Red Alert (Bellfruit) (Scorpion 5) (set 12) sc5dndrr - Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 1) sc5dndrra - Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 2) sc5dndrrb - Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 3) sc5dndrrc - Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 4) sc5dndrrd - Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 5) sc5dndrre - Deal Or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Road To Riches (Bellfruit) (Scorpion 5) (set 6) sc5dndrt - Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 1) sc5dndrta - Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 2) sc5dndrtb - Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 3) sc5dndrtc - Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 4) sc5dndrtd - Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 5) sc5dndrte - Deal Or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Banker Rings Twice (Bellfruit) (Scorpion 5) (set 6) sc5dnds - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 20) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 20) sc5dndsi - Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Simply Deal or No Deal (Bellfruit) (Scorpion 5) (set 1) sc5dndsia - Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Simply Deal or No Deal (Bellfruit) (Scorpion 5) (set 2) sc5dndsib - Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Simply Deal or No Deal (Bellfruit) (Scorpion 5) (set 3) sc5dndsic - Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Simply Deal or No Deal (Bellfruit) (Scorpion 5) (set 4) sc5dndsid - Deal Or No Deal Simply Deal Or No Deal (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Simply Deal or No Deal (Bellfruit) (Scorpion 5) (set 5) sc5dndt - Deal Or No Deal (Bellfruit) (Scorpion 5) (set 21) + Deal or No Deal (Bellfruit) (Scorpion 5) (set 21) sc5dndtb - Deal Or No Deal Think Big (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Think Big (Bellfruit) (Scorpion 5) (set 1) sc5dndtba - Deal Or No Deal Think Big (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Think Big (Bellfruit) (Scorpion 5) (set 2) sc5dndtp - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 1) sc5dndtpa - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 2) sc5dndtpb - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 3) sc5dndtpc - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 4) sc5dndtpd - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 5) sc5dndtpe - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 6) sc5dndtpf - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 7) sc5dndtpg - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 8) sc5dndtph - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 9) sc5dndtpi - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 10) sc5dndtpj - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 11) sc5dndtpk - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 12) sc5dndtpl - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 13) sc5dndtpm - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 14) sc5dndtpn - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 15) sc5dndtpo - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 16) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 16) sc5dndtpp - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 17) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 17) sc5dndtpq - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 18) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 18) sc5dndtpr - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 19) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 19) sc5dndtps - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 20) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 20) sc5dndtpt - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 21) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 21) sc5dndtpu - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 22) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 22) sc5dndtpv - Deal Or No Deal The Power (Bellfruit) (Scorpion 5) (set 23) + Deal or No Deal The Power (Bellfruit) (Scorpion 5) (set 23) sc5dndtr - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 1) sc5dndtra - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 2) sc5dndtrb - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 3) sc5dndtrc - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 4) sc5dndtrd - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 5) sc5dndtre - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 6) sc5dndtrf - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 7) sc5dndtrg - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 8) sc5dndtrh - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 9) sc5dndtri - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 10) sc5dndtrj - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 11) sc5dndtrk - Deal Or No Deal Think Red (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal Think Red (Bellfruit) (Scorpion 5) (set 12) sc5dndwb - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 1) sc5dndwba - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 2) sc5dndwbb - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 3) sc5dndwbc - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 4) sc5dndwbd - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 5) sc5dndwbe - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 6) sc5dndwbf - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 7) sc5dndwbg - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 8) sc5dndwbh - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 9) sc5dndwbi - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 10) sc5dndwbj - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 11) sc5dndwbk - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 12) sc5dndwbl - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 13) sc5dndwbm - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 14) sc5dndwbn - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 15) sc5dndwbo - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 16) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 16) sc5dndwbp - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 17) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 17) sc5dndwbq - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 18) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 18) sc5dndwbr - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 19) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 19) sc5dndwbs - Deal Or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 20) + Deal or No Deal What's In Your Box (Bellfruit) (Scorpion 5) (set 20) sc5dndwc - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 1) sc5dndwca - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 2) sc5dndwcb - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 3) sc5dndwcc - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 4) sc5dndwcd - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 5) sc5dndwce - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 6) sc5dndwcf - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 7) sc5dndwcg - Deal Or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal The Walk Of Wealth Classic (Bellfruit) (Scorpion 5) (set 8) sc5dndwi - Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 1) sc5dndwia - Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 2) sc5dndwib - Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 3) sc5dndwic - Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 4) sc5dndwid - Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 5) sc5dndwie - Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 6) sc5dndwif - Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 7) sc5dndwig - Deal Or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal What's In Your Box Casino (Bellfruit) (Scorpion 5) (set 8) sc5dndww - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 1) sc5dndwwa - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 2) sc5dndwwb - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 3) sc5dndwwc - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 4) sc5dndwwd - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 5) sc5dndwwe - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 6) sc5dndwwf - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 7) sc5dndwwg - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 8) sc5dndwwh - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 9) sc5dndwwi - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 10) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 10) sc5dndwwj - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 11) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 11) sc5dndwwk - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 12) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 12) sc5dndwwl - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 13) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 13) sc5dndwwm - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 14) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 14) sc5dndwwn - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 15) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 15) sc5dndwwo - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 16) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 16) sc5dndwwp - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 17) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 17) sc5dndwwq - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 18) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 18) sc5dndwwr - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 19) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 19) sc5dndwws - Deal Or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 20) + Deal or No Deal The Walk Of Wealth (Bellfruit) (Scorpion 5) (set 20) sc5dndys - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 1) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 1) sc5dndysa - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 2) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 2) sc5dndysb - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 3) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 3) sc5dndysc - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 4) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 4) sc5dndysd - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 5) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 5) sc5dndyse - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 6) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 6) sc5dndysf - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 7) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 7) sc5dndysg - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 8) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 8) sc5dndysh - Deal Or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 9) + Deal or No Deal It's Your Show (Bellfruit) (Scorpion 5) (set 9) sc5dough @@ -123285,7 +125853,7 @@ scandalm - Scandal Mahjong [BET] (Japan 890217) + Scandal Mahjong (Japan 890217, medal) scatmag2 @@ -123365,7 +125933,19 @@ scherrym - Super Cherry Master + Super Cherry Master (V5.2) + + + scherrym12 + Super Cherry Master (V1.2) + + + scherrymp + Super Cherry Master Plus (V1.6) + + + scherrymp10u + Super Cherry Master Plus (V1.0U) schery97 @@ -123465,7 +126045,7 @@ scontraj - Super Contra - Alien no Gyakushuu (Japan) + Super Contra: Alien no Gyakushuu (Japan) score5 @@ -123633,7 +126213,7 @@ scrossa - Stadium Cross (World, alt) + Stadium Cross (World, linkable) scrossu @@ -123671,6 +126251,10 @@ sctionza Section Z (set 2) + + sctmagce + Scatter Magic - Cash Express (0251026, US) + scud Scud Race / Sega Super GT - Twin/DX (Export) @@ -123683,6 +126267,10 @@ scuddx Scud Race / Sega Super GT - Deluxe (Export, Revision A) + + scuddxo + Scud Race / Sega Super GT - Deluxe (Export) + scudhamm Scud Hammer (ver 1.4) @@ -123705,11 +126293,7 @@ scyclone - Space Cyclone - - - sddz - Super Dou Di Zhu + Space Cyclone (Japan) sderby @@ -123785,7 +126369,15 @@ sdmg2 - Chaoji Da Man Guan II (China, V754C) + Chaoji Da Manguan II (China, V754C, set 1) + + + sdmg2a + Chaoji Da Manguan II (China, V754C, set 2) + + + sdmg2p + Maque Wangchao / Chaoji Da Manguan 2 - Jiaqiang Ban (China, V100C) sdodgeb @@ -123919,13 +126511,17 @@ secretagj Secret Agent (Japan, revision 2) + + secretagm + Secret Agent (Modular System) + sectionz - Section Z (set 1) + Section Z (US) sectionza - Section Z (set 2 rev. A) + Section Z (Japan, rev. A) sectrzon @@ -123933,11 +126529,11 @@ sectrzona - Sector Zone (set 3) + Sector Zone (set 2) sectrzont - Sector Zone (set 2, Tecfri hardware) + Sector Zone (bootleg) segajw @@ -123981,7 +126577,7 @@ seiham - Seiha [BET] (Japan 870723) + Seiha (Japan 870723, medal) sekaikh @@ -123997,15 +126593,15 @@ seljan - Sel-Jan [BET] (Japan) + Sel-Jan (Japan) seljan2 - Return Of Sel Jan II [BET] (Japan, NM557) + Return Of Sel Jan II (Japan, NM557) seljan2a - Return Of Sel Jan II [BET] (Japan, NM508) + Return Of Sel Jan II (Japan, NM508) semibase @@ -124045,7 +126641,7 @@ sengokmj - Sengoku Mahjong [BET] (Japan) + Sengoku Mahjong (Japan) sengoku @@ -124123,6 +126719,10 @@ setaroula Super Ruleta 36 (Spanish hack of The Roulette) + + setaroulm + The Roulette (Visco, medal) + sevenlnd Seven Land @@ -124237,15 +126837,15 @@ sf2amf10 - Street Fighter II - Champion Edition (L735 Test Rom, bootleg, set 3) + Street Fighter II': Champion Edition (L735 Test Rom, bootleg, set 3) sf2amf11 - Street Fighter II - Champion Edition (L735 Test Rom w/ Mega Co, bootleg, set 4) + Street Fighter II': Champion Edition (L735 Test Rom w/ Mega Co, bootleg) sf2amf12 - Street Fighter II - Champion Edition (L735 Test Rom, bootleg, set ?) + Street Fighter II': Champion Edition (L735 Test Rom, bootleg, set ?) sf2amf2 @@ -124257,27 +126857,27 @@ sf2amf4 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 2) + Street Fighter II': Champion Edition (Alpha Magic-F, bootleg, set 2) sf2amf5 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 3) + Street Fighter II': Champion Edition (Alpha Magic-F, bootleg, set 3) sf2amf6 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 4) + Street Fighter II': Champion Edition (Alpha Magic-F, bootleg, set 4) sf2amf7 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 5) + Street Fighter II': Champion Edition (Alpha Magic-F, bootleg, set 5) sf2amf8 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 6) + Street Fighter II': Champion Edition (Alpha Magic-F, bootleg, set 6) sf2amf9 - Street Fighter II - Champion Edition (Alpha Magic-F bootleg set 7) + Street Fighter II': Champion Edition (Alpha Magic-F, bootleg, set 7) sf2b @@ -124289,11 +126889,11 @@ sf2b3 - Street Fighter II: The World Warrior (bootleg, 910214 etc, set 3) + Street Fighter II: The World Warrior (bootleg, set 3) sf2b4 - Street Fighter II: The World Warrior (bootleg, 910214 etc, set 4) + Street Fighter II: The World Warrior (bootleg, set 4) sf2bhh @@ -124331,6 +126931,10 @@ sf2cebltw Street Fighter II': Champion Edition ('Taiwan' bootleg with PAL) + + sf2cebr + Street Fighter II': Champion Edition (Brasil 920313, v1.0, Hack) + sf2ceds6 Street Fighter II': Champion Edition (Dstreet-6, bootleg) @@ -124341,11 +126945,11 @@ sf2ceeab2 - Street Fighter II': Champion Edition (920313 etc bootleg set 2) + Street Fighter II': Champion Edition (bootleg, World 920313, set 2) sf2ceeabl - Street Fighter II': Champion Edition (920313 etc bootleg set 1) + Street Fighter II': Champion Edition (bootleg, World 920313, set 1) sf2ceec @@ -124361,11 +126965,11 @@ sf2cejab2 - Street Fighter II': Champion Edition (920322 Japan bootleg set 2) + Street Fighter II': Champion Edition (bootleg, Japan 920322, set 2) sf2cejabl - Street Fighter II': Champion Edition (920322 Japan bootleg set 1) + Street Fighter II': Champion Edition (bootleg, Japan 920322, set 1) sf2cejb @@ -124395,49 +126999,41 @@ sf2ceua Street Fighter II': Champion Edition (USA 920313) - - sf2ceuab10 - Street Fighter II': Champion Edition (920313 USA bootleg set 10) - - - sf2ceuab11 - Street Fighter II': Champion Edition (920313 USA bootleg set 11) - sf2ceuab2 - Street Fighter II': Champion Edition (920313 USA bootleg set 2) + Street Fighter II': Champion Edition (bootleg, USA 920313, set 2) sf2ceuab3 - Street Fighter II': Champion Edition (920313 USA bootleg set 3) + Street Fighter II': Champion Edition (bootleg, USA 920313, set 3) sf2ceuab4 - Street Fighter II': Champion Edition (920313 USA bootleg set 4) + Street Fighter II': Champion Edition (bootleg, USA 920313, set 4) sf2ceuab5 - Street Fighter II': Champion Edition (920313 USA bootleg set 5) + Street Fighter II': Champion Edition (bootleg, USA 920313, set 5) sf2ceuab6 - Street Fighter II': Champion Edition (920313 USA bootleg set 6) + Street Fighter II': Champion Edition (bootleg, USA 920313, set 6) sf2ceuab7 - Street Fighter II': Champion Edition (920313 USA bootleg set 7) + Street Fighter II': Champion Edition (bootleg, USA 920313, set 7) sf2ceuab8 - Street Fighter II': Champion Edition (920313 USA bootleg set 8) + Street Fighter II': Champion Edition (bootleg, USA 920313, set 8) sf2ceuab9 - Street Fighter II': Champion Edition (920313 USA bootleg set 9) + Street Fighter II': Champion Edition (bootleg, USA 920313, set 9) sf2ceuabl - Street Fighter II': Champion Edition (920313 USA bootleg set 1) + Street Fighter II': Champion Edition (bootleg, USA 920313, set 1) sf2ceub @@ -124449,11 +127045,11 @@ sf2ceucbl - Street Fighter II': Champion Edition (920803 USA bootleg) + Street Fighter II': Champion Edition (bootleg, USA 920803) sf2ceupl - Street Fighter II': Champion Edition (UPL bootleg) + Street Fighter II': Champion Edition (Japan 920322, UPL bootleg?) sf2dkot2 @@ -124503,6 +127099,10 @@ sf2en Street Fighter II: The World Warrior (World 910204, conversion) + + sf2gm + Street Fighter II': Champion Edition (Golden Magic, Hack) + sf2hf Street Fighter II': Hyper Fighting (World 921209) @@ -124513,11 +127113,15 @@ sf2hfjb - Street Fighter II' Turbo: Hyper Fighting (bootleg set 1) + Street Fighter II' Turbo: Hyper Fighting (bootleg, set 1) sf2hfjb2 - Street Fighter II' Turbo: Hyper Fighting (bootleg set 2) + Street Fighter II' Turbo: Hyper Fighting (bootleg, set 2) + + + sf2hfsce + Street Fighter II': Hyper Fighting (Sr. SF Champion Edition v1.4, Hack) sf2hfu @@ -124561,11 +127165,11 @@ sf2koryu2 - Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg set 2) + Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg, set 2) sf2koryu3 - Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg set 3) + Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg, set 3) sf2level @@ -124633,15 +127237,15 @@ sf2mdtc - Street Fighter II' - Magic Delta Turbo (bootleg set 4 (with YM2151 + 2xMSM5205), 920313 etc) + Street Fighter II': Magic Delta Turbo (bootleg, set 4) sf2mega - Street Fighter II': Champion Edition (Mega Co bootleg set 1) + Street Fighter II': Champion Edition (Mega Co, bootleg, set 1) sf2mega2 - Street Fighter II': Champion Edition (Mega Co bootleg set 2) + Street Fighter II': Champion Edition (Mega Co, bootleg, set 2) sf2mix @@ -124651,6 +127255,10 @@ sf2mkot Street Fighter II': Magic KO Turbo!! - Nightmare Crack + + sf2prime + Street Fighter II': Prime (Ver 0.3, Hack) + sf2qp1 Street Fighter II: The World Warrior (Quicken Pt-I, bootleg) @@ -124693,7 +127301,7 @@ sf2red2 - Street Fighter II': Champion Edition (Red Wave bootleg set 3) + Street Fighter II': Champion Edition (Red Wave, bootleg, set 3) sf2reda @@ -124709,7 +127317,7 @@ sf2rk2 - Street Fighter II: The World Warrior (RK, bootleg set 2) + Street Fighter II: The World Warrior (RK, bootleg, set 2) sf2rules @@ -124741,15 +127349,15 @@ sf2tlona - Street Fighter II': Champion Edition (Tu Long bootleg set 1) + Street Fighter II': Champion Edition (Tu Long, bootleg, set 1) sf2tlonb - Street Fighter II': Champion Edition (Tu Long bootleg set 2) + Street Fighter II': Champion Edition (Tu Long, bootleg, set 2) sf2tlonc - Street Fighter II': Champion Edition (Tu Long bootleg set 3) + Street Fighter II': Champion Edition (Tu Long, bootleg, set 3) sf2ua @@ -124801,11 +127409,11 @@ sf2v0042 - Street Fighter II': Champion Edition (V004 bootleg set 2) + Street Fighter II': Champion Edition (V004, bootleg, set 2) sf2v0043 - Street Fighter II': Champion Edition (V004 bootleg set 3) + Street Fighter II': Champion Edition (V004, bootleg, set 3) sf2yyc @@ -124813,7 +127421,7 @@ sf2yyc2 - Street Fighter II': Champion Edition (YYC bootleg set 2) + Street Fighter II': Champion Edition (YYC, bootleg, set 2) sf_l1 @@ -124821,11 +127429,11 @@ sfa - Street Fighter Alpha: Warriors' Dreams (Euro 950727) + Street Fighter Alpha: Warriors' Dreams (Europe 950727) sfa2 - Street Fighter Alpha 2 (Euro 960229) + Street Fighter Alpha 2 (Europe 960229) sfa2u @@ -124845,15 +127453,19 @@ sfa3 - Street Fighter Alpha 3 (Euro 980904) + Street Fighter Alpha 3 (Europe 980904) sfa3b Street Fighter Alpha 3 (Brazil 980629) + + sfa3br + Street Fighter Alpha 3 (050513 Brasil, v2.0, Hack) + sfa3ce - Street Fighter Alpha 3 Challenger's Edition + Street Fighter Alpha 3: Challenger's Edition sfa3h @@ -124881,7 +127493,7 @@ sfa3xl - Street Fighter Alpha 3 - Xiang Long Edition (Hack by pipi899, Ver.2009-05-10) + Street Fighter Alpha 3: Xiang Long Edition (Hack by pipi899, Ver.2009-05-10) sfach @@ -124889,7 +127501,7 @@ sfad - Street Fighter Alpha: Warriors' Dreams (Euro 950727 Phoenix Edition) (bootleg) + Street Fighter Alpha: Warriors' Dreams (Europe 950727 Phoenix Edition) (bootleg) sfan @@ -124897,15 +127509,15 @@ sfar1 - Street Fighter Alpha: Warriors' Dreams (Euro 950718) + Street Fighter Alpha: Warriors' Dreams (Europe 950718) sfar2 - Street Fighter Alpha: Warriors' Dreams (Euro 950627) + Street Fighter Alpha: Warriors' Dreams (Europe 950627) sfar3 - Street Fighter Alpha: Warriors' Dreams (Euro 950605) + Street Fighter Alpha: Warriors' Dreams (Europe 950605) sfau @@ -124913,7 +127525,7 @@ sfaud - Street Fighter Alpha - warriors' dreams (950727 USA Phoenix Edition) + Street Fighter Alpha: Warriors' Dreams (USA 950727 Phoenix Edition) (bootleg) sfbonus @@ -124953,11 +127565,11 @@ sfex - Street Fighter EX (Euro 961219) + Street Fighter EX (Europe 961219) sfex2 - Street Fighter EX2 (Euro 980312) + Street Fighter EX2 (Europe 980312) sfex2a @@ -124973,7 +127585,7 @@ sfex2p - Street Fighter EX2 Plus (Euro 990611) + Street Fighter EX2 Plus (Europe 990611) sfex2pa @@ -125045,7 +127657,7 @@ sfiii - Street Fighter III: New Generation (Euro 970204) + Street Fighter III: New Generation (Europe 970204) sfiii2 @@ -125065,7 +127677,7 @@ sfiii3 - Street Fighter III 3rd Strike: Fight for the Future (Euro 990608) + Street Fighter III 3rd Strike: Fight for the Future (Europe 990608) sfiii3j @@ -125085,7 +127697,7 @@ sfiii3r1 - Street Fighter III 3rd Strike: Fight for the Future (Euro 990512) + Street Fighter III 3rd Strike: Fight for the Future (Europe 990512) sfiii3th @@ -125309,7 +127921,7 @@ sfz2adl - Street Fighter Zero 2 Alpha - Dragon Level (Hack by pipi899, Ver.2009-04-24) + Street Fighter Zero 2 Alpha: Dragon Level (Hack by pipi899, Ver.2009-04-24) sfz2al @@ -125389,7 +128001,7 @@ sfz3mix - Street Fighter Zero 3 Mix v0.27 + Street Fighter Zero 3 Mix v0.31 sfz3mix13 @@ -125397,7 +128009,7 @@ sfz3te - Street Fighter Zero 3 Training Edition v1.2 (980629 Japan) + Street Fighter Zero 3: Training Edition v1.2 (Japan 980629) sfz3ugd @@ -125457,7 +128069,11 @@ sgaltrop - Sexy Gal Tropical [BET] (Japan 850805 SXG T-02) + Sexy Gal Tropical (Japan 850805 SXG T-02) + + + sgalwars + Super Galactic Wars (bootleg of Galaxian) sgdrvsim @@ -125465,7 +128081,7 @@ sgemf - Super Gem Fighter Mini Mix (USA 970904) + Super Gem Fighter: Mini Mix (USA 970904) sgemfa @@ -125473,7 +128089,7 @@ sgemfd - Super Gem Fighter Mini Mix (USA 970904 Phoenix Edition) (bootleg) + Super Gem Fighter: Mini Mix (USA 970904 Phoenix Edition) (bootleg) sgemfh @@ -125543,6 +128159,10 @@ sgyxz Warriors of Fate ('sgyxz' bootleg) + + sgz + Shadow Gangs Zero (Kick Demo Ver: 2.0) + sh_141 Shrek v1.41 @@ -125583,6 +128203,10 @@ shadowwa Shadow Warriors (World, set 2) + + shadowwm + Shadow Warriors (Modular System) + shaktam Shakatto Tambourine (Rev B) (GDS-0002B) @@ -125737,7 +128361,7 @@ sharkjaw - Shark JAWS [TTL] + Shark JAWS sharkpy @@ -125757,7 +128381,7 @@ sharkusb - Shark [TTL] + Shark (US Billiards) sharrier @@ -125807,6 +128431,10 @@ sheriff Sheriff + + shettle + Alone Shettle Crew + shfin_l1 Shuffle Inn (Shuffle) (L-1) @@ -125899,6 +128527,10 @@ shinobib Shinobi (set 3) + + shinobing + Shinobi Neo Geo (HB, v1.1) + shinobl Shinobi (bootleg) @@ -125937,16 +128569,24 @@ shisen - Shisensho - Joshiryo-Hen (Japan) + Shisensho - Joshiryo-Hen (Japan, set 1) shisen2 Shisensho II + + shisena + Shisensho - Joshiryo-Hen (Japan, set 2) + shngmtkb Shanghai Matekibuyuu (Japan) + + shngmtkbg + Shanghai Matekibuyuu (VER 1.20G) + shock Shock @@ -126157,16 +128797,12 @@ shpchamp - Shippe Champion + Shippe Champion (Japan, ver 1.02) shpeng Sea Hunter Penguin - - shpinxii - Sphinx II (Russia) (Atronic) - shrike Shrike Avenger (prototype) @@ -126255,6 +128891,10 @@ shufshot139 Shuffleshot (v1.39) + + shun + Shun + shuriboy Shuriken Boy @@ -126277,15 +128917,15 @@ sianniv - Space Invaders Anniversary (V2.02J) + Space Invaders Anniversary (V2.02J 2003/09/12 20:00) sichuan2 - Sichuan II (hack, set 1) + Sichuan II (bootleg, set 1) sichuan2a - Sichuan II (hack, set 2) + Sichuan II (bootleg, set 2) sichuana @@ -126333,7 +128973,7 @@ sidebs - Side by Side (Ver 2.7 J) + Side by Side (Ver 3.0 OK) sidebs2 @@ -126351,6 +128991,10 @@ sidebs2u Side by Side 2 (Ver 2.6 A) + + sidebsj + Side by Side (Ver 2.7 J) + sidebsja Side by Side (Ver 2.6 J) @@ -126655,10 +129299,18 @@ sinistarc2 Sinistar (revision 2, cockpit) + + sinistarcsm + Sinistar (Cockpit, SynaMax difficulty/titlescreen hack) + sinistarp Sinistar (AMOA-82 prototype) + + sinistarsm + Sinistar (SynaMax difficulty/titlescreen hack) + sinvasn Space Invasion (Europe) @@ -126775,6 +129427,14 @@ skill98 Skill '98 (Talking ver. s98-1.33) + + skillch + Skill Chance (W-7, set 1) + + + skillcha + Skill Chance (W-7, set 2) + skilldrp Skill Drop Georgia (Ver. G1.01S, Oct 1 2002) @@ -127139,6 +129799,10 @@ slimekun Slime Kun + + slipstrh + Slipstream (Hispanic) + slipstrm Slip Stream (Brazil 950515) @@ -127199,9 +129863,17 @@ slqz2 Shuang Long Qiang Zhu 2 VS (China, VS203J) + + slqz2a + Shuang Long Qiang Zhu 2 VS (China, set 2) + slqz3 - Mahjong Shuang Long Qiang Zhu 3 (China, VS107C) + Shuang Long Qiang Zhu 3 (China, VS107C) + + + slqzsp + Shuang Long Qiang Zhu Tebie Ban (V104CN) slrasslt @@ -127243,6 +129915,10 @@ sltpstep Pro Stepper Tele Cardioline (Salter Fitness Stepper V.1.0, Checksum F208) + + sluster2 + Super Luster II + slvrball632 Silverball (6.32) @@ -127843,6 +130519,10 @@ soccer Atari Soccer + + soccer10 + Soccer 10 (ver. 16.44) + soccernw Soccer New (Italian) @@ -127869,7 +130549,7 @@ soccrrmt - Soccer (Ramtek) [TTL] + Soccer (Ramtek) socrking @@ -128193,22 +130873,18 @@ soulclb3 - Soul Calibur III (SC31001-NA-A key, NA-B disc) + Soul Calibur III: Arcade Edition (SC31001-NA-A key, NA-B disc) soulclb3a - Soul Calibur III (SC31002-NA-A key, NA-B disc) + Soul Calibur III: Arcade Edition (SC31002-NA-A key, NA-B disc) soulclb3b - Soul Calibur III (SC31002-NA-A key, NA-A disc) + Soul Calibur III: Arcade Edition (SC31002-NA-A key, NA-A disc) soulclbr - Soul Calibur (Asia, SOC14/VER.C) - - - soulclbra Soul Calibur (World, SOC12/VER.A2) @@ -128216,7 +130892,11 @@ Soul Calibur (Asia, SOC14/VER.B) - soulclbrja + soulclbrac + Soul Calibur (Asia, SOC14/VER.C) + + + soulclbrja2 Soul Calibur (Japan, SOC11/VER.A2) @@ -130281,7 +132961,7 @@ spacea91_13e - Space Ace (DL2 Conversion) (Euro v1.3) + Space Ace (DL2 Conversion) (Europe v1.3) spaceace @@ -130689,7 +133369,7 @@ spclforc - Special Forces + Special Forces - Kung Fu Commando spcliner @@ -130835,6 +133515,10 @@ speccies Speccies 2 + + specd9 + Special Dream 9 (v1.0.5G) + specforc Special Force @@ -130899,6 +133583,18 @@ speedfrk Speed Freak + + speedmst + Speed Master (Ver. V1.0, Apr 29 2004) + + + speedmsta + Speed Master (Ver. V1.0, May 23 2003) + + + speedmstb + Speed Master (Ver. V1.0, Apr 28 2004) + speedrcr Speed Racer @@ -130961,7 +133657,7 @@ spf2t - Super Puzzle Fighter II Turbo (Euro 960529) + Super Puzzle Fighter II Turbo (Europe 960529) spf2ta @@ -130997,7 +133693,7 @@ spf2xpri - Super Puzzle Fighter 2 X' Balance Patch (Hack) + Super Puzzle Fighter 2 X': Balance Patch (Hack) spfghmk2 @@ -131027,6 +133723,14 @@ spgfestnz Spring Festival (20267211, New Zealand) + + sphinxii + Sphinx II (Atronic) + + + sphinxiir + Sphinx II (Russia) (Atronic) + spicaadv Spica Adventure (v2.03J) @@ -131179,6 +133883,10 @@ spk100 Super Poker (v100) + + spk102u + Super Poker (v102U) + spk102ua Super Poker (v102UA) @@ -131199,6 +133907,18 @@ spk116itmx Super Poker (v116IT-MX) + + spk120in + Super Poker (v120IN) + + + spk130 + Super Poker (v130) + + + spk200 + Super Poker (v200) + spk200ua Super Poker (v200UA) @@ -131381,12 +134101,16 @@ sprglbpg - Super Glob (Pac-Man hardware) (German bootleg) + Super Glob (Pac-Man hardware, German bootleg) sprglobp Super Glob (Pac-Man hardware) + + sprglobp2 + Super Glob (Pac-Man hardware, bootleg) + springbd Springboard (bootleg of Circus) @@ -131407,6 +134131,10 @@ sprint2a Sprint 2 (set 2) + + sprint2bl + Sprint 2 (bootleg) + sprint2h Sprint 2 (color kit, Italy) @@ -131449,7 +134177,11 @@ sprtauth - Sports Authority + Sports Authority Challenge (Rev 3) + + + sprtauth1 + Sports Authority (Rev 1) sprtdart @@ -131497,7 +134229,7 @@ spuzboblj - Super Puzzle Bobble (V2.04J 1999/2/27 02:10) + Super Puzzle Bobble (V2.04J 1999/2/17 02:10) spy @@ -131653,11 +134385,15 @@ srdarwin - Super Real Darwin (World) + SRD: Super Real Darwin (World) + + + srdarwinb + SRD: Super Real Darwin (Japan, bootleg) srdarwinj - Super Real Darwin (Japan) + SRD: Super Real Darwin (Japan) srdarwnj @@ -131665,7 +134401,7 @@ srdchamp - Super Road Champions [TTL] + Super Road Champions srdmissn @@ -131677,7 +134413,7 @@ srmdb - Sunset Riders (bootleg of Mega Drive version) + Sunset Riders (scrambled bootleg of Mega Drive version) srmp1 @@ -131727,6 +134463,10 @@ srollnd Super Roller (v7.0) + + srssf2mb + Sunset Riders / Super Street Fighter II - The New Challengers (scrambled bootleg of Mega Drive versions) + srumbler The Speed Rumbler (set 1) @@ -131745,7 +134485,7 @@ sryudens - Mahjong Seiryu Densetsu [BET] (Japan, NM502) + Mahjong Seiryu Densetsu (Japan, NM502) ss2001 @@ -131771,6 +134511,10 @@ ss_03 Scared Stiff (0.3) + + ss_11 + Scared Stiff (1.1) + ss_12 Scared Stiff (1.2) @@ -131787,6 +134531,10 @@ ssanchan Sanrin San Chan (Japan, 315-5096) + + ssanguoj + Shizhan Sanguo Ji Jiaqiang Ban (Version 8.9 980413) + sscandal Seishun Scandal (315-5132, Japan) @@ -131975,6 +134723,10 @@ sscopex Silent Scope EX (ver UAA) + + sscs + San Se Caishen (Version 0502) + ssf2 Super Street Fighter II: The New Challengers (World 931005) @@ -131989,7 +134741,7 @@ ssf2d - Super Street Fighter II - the new challengers (super street fighter 2 930911 etc Phoenix Edition) + Super Street Fighter II: The New Challengers (World 930911 Phoenix Edition) (bootleg) ssf2h @@ -132009,7 +134761,7 @@ ssf2mdb - Super Street Fighter II - The New Challengers (bootleg of Japanese Mega Drive version) + Super Street Fighter II - The New Challengers (scrambled bootleg of Mega Drive version) ssf2r1 @@ -132061,7 +134813,11 @@ ssf2td - Super Street Fighter II Turbo (super street fighter 2 X 940223 etc Phoenix Edition) + Super Street Fighter II Turbo (World 940223 Phoenix Edition) (bootleg) + + + ssf2tdf + Super Street Fighter II Turbo (Difficulty Fix, Hack) ssf2th @@ -132069,7 +134825,7 @@ ssf2tnl - Super Street Fighter II Turbo New Legacy v0.8 (Beta) (Hack by Born2SPD) + Super Street Fighter II Turbo New Legacy v0.9 (Beta) (Hack by Born2SPD) ssf2tu @@ -132109,7 +134865,7 @@ ssf2xjr1trn - Super Street Fighter II X - GMC Trainer (super street fighter 2 X 940223 Japan) + Super Street Fighter II X: GMC Trainer (Japan 940223) ssfindo @@ -132135,6 +134891,10 @@ sshanghb Super Shanghai Dragon's Eye (World, bootleg) + + ssho2emb + Samurai Shodown II / Shin Samurai Spirits - Haohmaru Jigokuhen (Move Modeasy Special Attacks V4, Hack) + sshootep Sharpshooter (Game Plan) @@ -132161,12 +134921,16 @@ sshot - Super Shot + Super Shot (set 1) sshot137 Shuffleshot (v1.37) + + sshota + Super Shot (set 2) + sshtl_l3 Space Shuttle (L-3) @@ -132515,6 +135279,10 @@ ssvc_b26 Secret Service (2.6 alternate sound) + + ssvc_e40 + Secret Service (4.0, Europe) + st_ohla Oh La La (Stella) @@ -132773,7 +135541,11 @@ starridr - Star Rider + Star Rider (REV 1) + + + starridrp3 + Star Rider (PROTO 3) starrkr @@ -132977,7 +135749,7 @@ steeplec - Steeplechase [TTL] + Steeplechase stellcas @@ -133239,6 +136011,10 @@ streetsmw Street Smart (World version 1) + + streetsmwbl + Street Smart (bootleg of World version 1) + streetsw Street Smart (World version 1) @@ -133269,7 +136045,7 @@ strider2 - Strider 2 (Euro 991213) + Strider 2 (Europe 991213) strider2a @@ -133549,7 +136325,7 @@ stuntcyc - Stunt Cycle [TTL] + Stunt Cycle stwr_101 @@ -133643,9 +136419,13 @@ sugorotc Sugorotic JAPAN (STJ1 Ver.C) + + sugorotca + Sugorotic JAPAN (STJ1 Ver.A) + suhosong - Su Ho Seong + Su Ho Seong (Korea) suikoenb @@ -133691,6 +136471,10 @@ sunsetbl Sunset Riders (bootleg 4 Players ver. ADD) + + sup8race + Super 8 Race + supbtime Super Burger Time (World, set 1) @@ -133743,6 +136527,10 @@ super7 Super Seven + + super70s + Super 70's (V100US) + super9 Super Nove (Playmark, Lire currency) @@ -133783,6 +136571,10 @@ superbik Superbike + + superbikg + Superbike (Galaxian hardware) + superbon Agent Super Bond (Super Cobra conversion, encrypted) @@ -133847,6 +136639,10 @@ superdqs Super Don Quix-ote (Short Scenes) + + supereld + Super El Dorado (Ver. 1.04H) + superg Super Galaxians (hack of 'Galaxian (Namco set 2)') @@ -133867,6 +136663,10 @@ superinv Super Invaders (bootleg set 1) + + superkds + Super Kids / Jiu Nan Xiao Yingxiong (S019CN) + superman Superman (World) @@ -133897,7 +136697,7 @@ superqix - Super Qix + Super Qix (set 1) supershp @@ -133985,7 +136785,11 @@ suprgolfj - Super Crowns Golf (Japan) + Super Crowns Golf (Japan, set 1) + + + suprgolfja + Super Crowns Golf (Japan, set 2) suprheli @@ -134175,6 +136979,10 @@ sutapper Tapper (Suntory) + + sutjarod + Sutjaro Haeyo Deluxe (Korea) + suzuk8h2 Suzuka 8 Hours 2 (World, Rev B) @@ -134217,11 +137025,11 @@ svcpcb - SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 1) + SNK vs. Capcom - SVC Chaos (JAMMA PCB, NEO-MVH MVO PCB) svcpcba - SNK vs. Capcom - SVC Chaos (JAMMA PCB, set 2) + SNK vs. Capcom - SVC Chaos (JAMMA PCB, NEO-MVH MVOB PCB) svcplus @@ -134469,7 +137277,7 @@ swinggal - Swing Gal [BET] (Japan 871221) + Swing Gal (Japan 871221) swingin @@ -134587,6 +137395,10 @@ sxyreact Pachinko Sexy Reaction (Japan) + + sydh + Shayu Daheng (V104CN) + sys1test System 1 Test prom @@ -134807,13 +137619,17 @@ tailg Tailgunner + + tairyodk + Tairyo-Daiko 337 Byoshi + taitest Taito Test Fixture taiwanmb - Taiwan Mahjong [BET] (Japan 881208) + Taiwan Mahjong (Japan 881208) tajmah @@ -134821,7 +137637,7 @@ take5 - Take 5 [TTL] + Take 5 takefive @@ -134839,13 +137655,17 @@ talbot Talbot + + tangramq + Tangram Q + tangtang Tang Tang (ver. 0526, 26/05/2000) tank - Tank/Tank Cocktail [TTL] + Tank/Tank Cocktail tank8 @@ -134905,7 +137725,7 @@ tankii - Tank II [TTL] + Tank II tantr @@ -134991,10 +137811,22 @@ tarzan Tarzan Chuang Tian Guan (China, V109C, set 2) + + tarzan103m + Tarzan (V103M) + + + tarzan202fa + Tarzan (V202FA) + tarzana Tarzan (V107) + + tarzanb + Tarzan Chuang Tian Guan (China, V110) + tarzanc Tarzan Chuang Tian Guan (China, V109C, set 1) @@ -135083,6 +137915,10 @@ tblkkuzu The Block Kuzushi (Japan) + + tblkkuzug + The Block Kuzushi (VER 1.10G) + tbonusal Treasure Bonus (American Alpha, Ver. 1.6) @@ -135229,7 +138065,7 @@ techromn - Tech Romancer (Euro 980914) + Tech Romancer (Europe 980914) techromna @@ -135448,11 +138284,11 @@ Tekken Tag Tournament (World, TEG2/VER.C1, set 1) - tektagtc1 + tektagtc1a Tekken Tag Tournament (World, TEG2/VER.C1, set 2) - tektagtja + tektagtja3 Tekken Tag Tournament (Japan, TEG1/VER.A3) @@ -135527,13 +138363,17 @@ tengai Tengai (World) + + tengaibl + Tengai (bootleg) + tengaij Sengoku Blade: Sengoku Ace Episode II (Japan) / Tengai (World) tenkai - Mahjong Tenkaigen (Japan, Bet) + Mahjong Tenkaigen (Japan) tenkai2b @@ -135541,22 +138381,22 @@ tenkaibb - Mahjong Tenkaigen (Japan bootleg b, Bet) + Mahjong Tenkaigen (Japan bootleg b) tenkaicb - Mahjong Tenkaigen (Japan bootleg c, Bet) + Mahjong Tenkaigen (Japan bootleg c) tenkaie - Mahjong Tenkaigen (Japan set 2, Bet) + Mahjong Tenkaigen (Japan set 2) tenkomor Tenkomori Shooting (World, TKM2/VER.A1) - tenkomorja + tenkomorja1 Tenkomori Shooting (Japan, TKM1/VER.A1) @@ -135581,7 +138421,7 @@ teot - The Eye of Typhoon (Beta 7 Version) + The Eye of Typhoon (HB, Beta 7 Version) teplus2j @@ -135861,7 +138701,7 @@ tetristh - Tetris (Japan, Taito H-System) + Tetris (Japan, rev 1, Taito H-System) tetrsark @@ -135961,7 +138801,7 @@ tgtballn - Target Ball (With Nudity) + Target Ball (with nudity) tgtpanic @@ -136077,11 +138917,15 @@ theglobme - The Glob (Pacman hardware, Magic Electronics Inc. license) + The Glob (Pac-Man hardware, Magic Electronics) theglobp - The Glob (Pac-Man hardware) + The Glob (Pac-Man hardware, set 1) + + + theglobpa + The Glob (Pac-Man hardware, set 2) theglobpb @@ -136113,11 +138957,11 @@ thehustl - The Hustler (Japan, program code M) + The Hustler (Japan, version M) thehustlj - The Hustler (Japan, program code J) + The Hustler (Japan, version J) themj @@ -136177,7 +139021,11 @@ theroes - Thunder Heroes + Thunder Heroes (set 1) + + + theroesa + Thunder Heroes (set 2) thetogyu @@ -136215,10 +139063,6 @@ thndha Thunder Heart (0200334V, NSW/ACT) - - thndrbdj - Thunder Blade (Japan) - thndrbld Thunder Blade (upright) (FD1094 317-0056) @@ -136303,14 +139147,6 @@ thrild2a Thrill Drive 2 (ver AAA) - - thrild2ab - Thrill Drive 2 (ver AAA, alt) - - - thrild2ac - Thrill Drive 2 (ver AAA, alt 2) - thrild2c Thrill Drive 2 (ver EAA) @@ -136465,15 +139301,19 @@ thundfox - Thunder Fox (World) + Thunder Fox (World, rev 1) thundfoxj - Thunder Fox (Japan) + Thunder Fox (Japan, rev 1) thundfoxu - Thunder Fox (US) + Thunder Fox (US, rev 1) + + + thundhrt + Thunder Heart (13XF528902, US) thunt @@ -136495,9 +139335,13 @@ tictaca Tic Tac Trivia (6221-23, U5-0C, 02/11/86) + + tictacuk + Tic Tac Trivia (6221-25, U5-0E, 05/08/86, UK) + tictacv - Tic Tac Trivia (6221-22, U5-0 Vertical) + Tic Tac Trivia (6221-22, U5-0, Vertical) tierras100hz @@ -136761,11 +139605,11 @@ timesup - Time's UP! + Time's UP! (HB) timesupd - Time's UP! (Demo) + Time's UP! (HB, Demo) timetrv @@ -136877,7 +139721,7 @@ tknight - Tecmo Knight + Tecmo Knight (US) tkoboxng @@ -137127,6 +139971,10 @@ tmnt2a Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver ADA) + + tmnt2o + Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver OAA) + tmnt2pj Teenage Mutant Ninja Turtles (Japan 2 Players, version 1) @@ -137347,13 +140195,17 @@ tokib Toki (Datsu bootleg) + + tokibr + Toki (Portuguese-BR Translation v1.07, Hack) + tokij JuJu Densetsu (Japan) tokimbsj - Tokimeki Bishoujo [BET] (Japan) + Tokimeki Bishoujo (Japan) tokims @@ -137519,9 +140371,13 @@ tondemo Tondemo Crisis (Japan) + + tongzi + Tong Zi Maque + tonpuu - Ton Puu Mahjong Version 2.0 RX [BET] (Japan) + Ton Puu Mahjong Version 2.0 RX (Japan) tonton @@ -137529,7 +140385,7 @@ tontonb - Tonton [BET] (Japan, set 1) + Tonton (Japan) tonypok @@ -137563,6 +140419,14 @@ top21 Top XXI (Version 1.2) + + top7 + Top-7 (V8.8, set 1) + + + top7a + Top-7 (V8.8, set 2) + topaz Topaz (Inder) @@ -137701,7 +140565,7 @@ topspeed - Top Speed (World) + Top Speed (World, rev 1) topspeedu @@ -137753,7 +140617,11 @@ toride2j - Toride II (Japan) + Toride II (Japan, revision K) + + + toride2ji + Toride II (Japan, revision I) tornado1 @@ -137999,6 +140867,10 @@ toypop Toypop + + toyshop + Toy Shop + toysmarch Toy's March (E00:J:A:A:2005011602) @@ -138027,6 +140899,18 @@ tpgolf Top Player's Golf (NGM-003 ~ NGH-003) + + tpkboram + PK Turbo + + + tpkborama + PK Turbo (Ver 2.3B2, encrypted) + + + tpkg2 + PK Turbo Great 2 + tpoker2 Turbo Poker 2 @@ -138195,6 +141079,22 @@ tripdraw Tripple Draw (V3.1 s) + + tripfev + Triple Fever (V108US) + + + tripfev105us + Triple Fever (V105US) + + + tripfev107us + Triple Fever (V107US) + + + tripjack + Triple Jack (V1.6G) + tripjok Triple Joker (Bingo) @@ -138247,6 +141147,14 @@ tripoola Tri-Pool: 3-In-One (Coastal Games) + + tripplay + Triple Play (M0000230, Spanish) + + + tripslot + Triple Slot (V200VE) + trisport Tri-Sports @@ -138257,7 +141165,7 @@ trivia - Trivia (Rev B) [TTL] + Trivia (Rev B) triviabb @@ -138339,6 +141247,10 @@ trizn_t1 Tri Zone (T-1) + + trktreat + Trick or Treat (7XF5183H04, US) + troangel Tropical Angel @@ -138405,7 +141317,11 @@ trojanr - Trojan (Romstar) + Trojan (Romstar, set 1) + + + trojanra + Trojan (Romstar, set 2) trojhors @@ -138447,6 +141363,10 @@ tropchnc Tropical Chance + + tropfrt + Tropical Fruits (V. 24-06.00 Rev. 4.0) + trophyh Trophy Hunting - Bear & Moose V1.00 @@ -138493,7 +141413,7 @@ truckk - Truck Kyosokyoku (Japan, TKK2/VER.A) + Truck Kyosokyoku (US?, TKK2/VER.A) trucksp2 @@ -138513,7 +141433,7 @@ truxton - Truxton / Tatsujin + Truxton (Europe, US) / Tatsujin (Japan) truxton2 @@ -138573,39 +141493,39 @@ trvwz2 - Trivia ? Whiz (6221-05, Edition 2) + Trivia ? Whiz Edition 2 (6221-05) trvwz2a - Trivia ? Whiz (6221-05, Edition 2 Alt Sex trivia) + Trivia ? Whiz Edition 2 (6221-05, Alt Sex trivia) trvwz3 - Trivia ? Whiz (6221-05, U5-0D, Edition 3) + Trivia ? Whiz Edition 3 (6221-05, U5-0D) trvwz3a - Trivia ? Whiz (6221-05, U5-0C, Edition 3) + Trivia ? Whiz Edition 3 (6221-05, U5-0C) trvwz3b - Trivia ? Whiz (6221-05, Edition 3 Sex trivia III) + Trivia ? Whiz Edition 3 (6221-05, with Sex trivia III) trvwz3v - Trivia ? Whiz (6221-04, U5-0E, Edition 3 Vertical) + Trivia ? Whiz Edition 3 (6221-04, U5-0E, Vertical) trvwz4 - Trivia ? Whiz (6221-10, U5-0A, Edition 4) + Trivia ? Whiz Edition 4 (6221-10, U5-0A) trvwz4v - Trivia ? Whiz (6221-13, U5-0B, Edition 4 Vertical) + Trivia ? Whiz Edition 4 (6221-13, U5-0B, Vertical) trvwz4va - Trivia ? Whiz (6221-13, U5-0B, Edition 4 Vertical Alt Sex trivia) + Trivia ? Whiz Edition 4 (6221-13, U5-0B, Vertical, Alt Sex trivia) trvwza @@ -138625,7 +141545,7 @@ ts2 - Battle Arena Toshinden 2 (Euro 951124) + Battle Arena Toshinden 2 (Europe 951124) ts2j @@ -138685,11 +141605,11 @@ tsamurai - Samurai Nihon-Ichi (set 1) + Samurai Nihon-Ichi (rev 1) - tsamurai2 - Samurai Nihon-Ichi (set 2) + tsamuraia + Samurai Nihon-Ichi tsamuraih @@ -138723,6 +141643,10 @@ tshoot Turkey Shoot (prototype) + + tsptr_l1 + Transporter the Rescue (LA-1) + tsptr_l3 Transporter the Rescue (L-3) @@ -138759,10 +141683,6 @@ tsurugi Tsurugi (ver EAB) - - tsurugie - Tsurugi (ver EAB, alt) - tsurugij Tsurugi (ver JAC) @@ -138779,9 +141699,13 @@ tt_game unknown Toptronic pinball game + + ttactoe + Tic Tac Toe (Sundance bootleg of New Lucky 8 Lines) + ttblock - T.T Block [TTL] + T.T Block ttchamp @@ -138809,7 +141733,7 @@ ttsracec - T.T. Speed Race CL [TTL] + T.T. Speed Race CL ttt_10 @@ -138975,6 +141899,10 @@ turpin Turpin + + turpinnv + Turpin (Novatronic bootleg) + turpins Turpin (bootleg on Super Cobra hardware) @@ -139051,6 +141979,10 @@ tvdenwam Terebi Denwa Super Mario World + + tvdenwat + Terebi Denwa Thomas the Tank Engine and Friends + tvgm8080 TV Game 8080 @@ -139065,11 +141997,11 @@ twcup90a - Tecmo World Cup '90 (Euro set 1) + Tecmo World Cup '90 (Europe set 1) twcup90b - Tecmo World Cup '90 (Euro set 2) + Tecmo World Cup '90 (Europe set 2) twcup90b1 @@ -139097,7 +142029,7 @@ twcup90c - Tecmo World Cup '90 (Euro set 3) + Tecmo World Cup '90 (Europe set 3) twcup90t @@ -139163,6 +142095,10 @@ twincobr Twin Cobra (World) + + twincobrm + Twin Cobra (Modular System) + twincobru Twin Cobra (US) @@ -139311,6 +142247,14 @@ txsectorg TX-Sector (German) + + tygn + Te Yi Gong Neng (China, V632C) + + + tylagoon + Typhoon Lagoon (Atronic) + tylz Tylz (prototype) @@ -139421,7 +142365,7 @@ ufo7 - UFO Catcher 7 (V20011112) + UFO Catcher 7 ufo800 @@ -139431,6 +142375,10 @@ ufo_x UFO-X + + ufoalac + UFO À La Carte + ufomini UFO Catcher Mini @@ -139455,6 +142403,10 @@ ujlnow Um Jammer Lammy NOW! (Japan, UL1/VER.A) + + ukiyobox + Ukiyo Box (Japan, v1.3.7) + ultarctc Ultimate Arctic Thunder @@ -139513,7 +142465,11 @@ umipoker - Umi de Poker / Marine Paradise (Japan) + Umi de Poker / Marine Paradise (Japan, newer) + + + umipokera + Umi de Poker / Marine Paradise (Japan, older) umk3 @@ -139611,6 +142567,18 @@ unkanyw unknown AnyWorks / Sega medal game BIOS + + unkbel + unknown Belatra slot machine + + + unkboram + unknown Boram poker game + + + unkbpmed + unknown Banpresto medal game + unkch1 New Cherry Gold '99 (bootleg of Super Cherry Master) (set 1) @@ -139683,10 +142651,6 @@ unkljfpk unknown LJF Corporation poker game - - unkmerit - unknown Merit game (4435-81, U5-1) - unkpacg unknown 'Pac-Man' gambling game (set 1) @@ -139731,6 +142695,10 @@ unksmk unknown SMK game + + unktax + unknown TAX game + unktop unknown Top game @@ -139993,19 +142961,23 @@ v4bulblx - Bullion Blox (BWB) (set 1) (MPU4 Video) + Bullion Blox (BWB) (BV_50___.2__) (MPU4 Video) v4bulblxa - Bullion Blox (BWB) (Datapak) (set 1) (MPU4 Video) + Bullion Blox (BWB) (Datapak) (BV_50___.2__) (MPU4 Video) v4bulblxb - Bullion Blox (BWB) (set 2) (MPU4 Video) + Bullion Blox (BWB) (BV_1P___.2__) (MPU4 Video) v4bulblxc - Bullion Blox (BWB) (Datapak) (set 2) (MPU4 Video) + Bullion Blox (BWB) (Datapak) (BV_1P___.2__) (MPU4 Video) + + + v4bulblxd + Bullion Blox (BWB) (BVM_____.1__) (MPU4 Video) v4cmaze @@ -141495,6 +144467,10 @@ vamphalfr1 Vamf x1/2 (Europe, version 1.0.0903) + + vampire + Vampire (prototype?) + vampj Vampire: The Night Warriors (Japan 940705) @@ -141561,11 +144537,11 @@ vanvanb - Van-Van Car (Karateco set 2) + Van-Van Car (Karateco, set 2) vanvank - Van-Van Car (Karateco set 1) + Van-Van Car (Karateco, set 1) vaportra @@ -141859,6 +144835,10 @@ venom Venom & Spider-Man - Separation Anxiety (SNES bootleg) + + venteta + Venteta + venture Venture (version 5 set 1) @@ -142249,7 +145229,7 @@ vimana - Vimana (World, set 1) + Vimana (World, rev A) vimana1 @@ -142261,7 +145241,7 @@ vimanan - Vimana (World, set 2) + Vimana (World) vindc2r1 @@ -142417,7 +145397,7 @@ vipclub - Vip Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880310) + Vip Club - Maru-hi Ippatsu Kaihou (Japan 880310) viper @@ -142585,11 +145565,11 @@ volfied - Volfied (World, revision 1) + Volfied (World, rev 1) volfiedj - Volfied (Japan, revision 1) + Volfied (Japan, rev 1) volfiedjo @@ -142601,7 +145581,7 @@ volfiedu - Volfied (US, revision 1) + Volfied (US, rev 1) volfieduo @@ -142609,7 +145589,7 @@ vollyrmt - Volly (Ramtek) [TTL] + Volly (Ramtek) voltan @@ -142809,7 +145789,7 @@ vsav - Vampire Savior: The Lord of Vampire (Euro 970519) + Vampire Savior: The Lord of Vampire (Europe 970519) vsav2 @@ -142829,7 +145809,7 @@ vsavd - Vampire Savior: The Lord of Vampire (Euro 970519 Phoenix Edition) (bootleg) + Vampire Savior: The Lord of Vampire (Europe 970519 Phoenix Edition) (bootleg) vsavh @@ -143127,17 +146107,21 @@ vtennisg Virtua Tennis / Power Smash (GDS-0011) + + vueloesp + Vuelo Espacial (Spanish bootleg of UniWar S) + vulcan - Vulcan Venture (New) + Vulcan Venture (new) vulcana - Vulcan Venture (Old) + Vulcan Venture (old) vulcanb - Vulcan Venture (Oldest) + Vulcan Venture (older) vulgus @@ -143168,7 +146152,7 @@ Wacky Gator (US) - wafricau + wafrica Wild Africa (AHG1535, US) @@ -143251,10 +146235,22 @@ wangmidj Wangan Midnight Maximum Tune (Japan, Rev B) (GDX-0008B) + + wanpakup + Wanpaku Pirates (Japan, ver 1.00) + + + wanpunch + Wanikko Punch (Japan, ver 1.20) + wanted Wanted + + wantouch + Wantouchable + wantsega Wanted (Sega) @@ -143505,47 +146501,51 @@ wbml - Wonder Boy - Monster Land (Japan New Ver., MC-8123, 317-0043) + Wonder Boy: Monster Land (Japan New Ver., MC-8123, 317-0043) wbmlb - Wonder Boy - Monster Land (English bootleg set 1) + Wonder Boy: Monster Land (English bootleg set 1) + + + wbmlb2 + Wonder Boy: Monster Land (English bootleg set 4) wbmlbg - Wonder Boy - Monster Land (English bootleg set 2) + Wonder Boy: Monster Land (English bootleg set 2) wbmlbge - Wonder Boy - Monster Land (English bootleg set 3) + Wonder Boy: Monster Land (English bootleg set 3) wbmld - Wonder Boy - Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043) + Wonder Boy: Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043) wbmlh - Wonder Boy - Monster Land (English, difficulty hack) + Wonder Boy: Monster Land (English, difficulty hack) wbmljb - Wonder Boy - Monster Land (Japan bootleg) + Wonder Boy: Monster Land (Japan bootleg) wbmljo - Wonder Boy - Monster Land (Japan Old Ver., MC-8123, 317-0043) + Wonder Boy: Monster Land (Japan Old Ver., MC-8123, 317-0043) wbmljod - Wonder Boy - Monster Land (decrypted bootleg of Japan Old Ver., MC-8123, 317-0043) + Wonder Boy: Monster Land (decrypted bootleg of Japan Old Ver., MC-8123, 317-0043) wbmlvc - Wonder Boy - Monster Land (English, Virtual Console) + Wonder Boy: Monster Land (English, Virtual Console) wbmlvcd - Wonder Boy - Monster Land (decrypted bootleg of English, Virtual Console release) + Wonder Boy: Monster Land (decrypted bootleg of English, Virtual Console release) wboy @@ -143615,6 +146615,10 @@ wc90t Tecmo World Cup '90 (trackball) + + wcat + Wild Cat + wcat3 Wild Cat 3 @@ -143748,12 +146752,12 @@ Win Cherry (ver 0.16 - 19990219) - wcombat - World Combat (ver AAD:B) + wcircus + Wonder Circus (Japan, v1.1.1) - wcombatb - World Combat (ver AAD:B, alt) + wcombat + World Combat (ver AAD:B) wcombatj @@ -143773,7 +146777,7 @@ wcougaru - Wild Cougar (NHG0296-04, US) + Wild Cougar (AHG1531, US) wcougarua @@ -143781,11 +146785,15 @@ wcougarub - Wild Cougar (NHG0296-99, US) + Wild Cougar (NHG0296-04, US) wcougaruc - Wild Cougar (AHG1531, US) + Wild Cougar (NHG0296-99, US) + + + wcougarud + Wild Cougar (NHG0632-07, US) wcougpp @@ -144035,6 +147043,10 @@ wh2 World Heroes 2 (ALM-006 ~ ALH-006) + + wh2es + World Heroes 2 (Easy Special Attacks, Hack) + wh2h World Heroes 2 (ALH-006) @@ -144047,6 +147059,10 @@ wh2ja World Heroes 2 Jet (ADM-007) + + wh2jes + World Heroes 2 Jet (Easy Special Attacks, Hack) + whalecsh Whales of Cash (20155711, ASP) @@ -144067,6 +147083,10 @@ wheelrun Wheels Runner + + wheelsii + Wheels II + wheregld Where's The Gold (10124811, NSW/ACT) @@ -144165,11 +147185,15 @@ wildfang - Wild Fang / Tecmo Knight + Wild Fang / Tecmo Knight (World?) + + + wildfangh + Wild Fang (1991 year hack) wildfangs - Wild Fang + Wild Fang (Japan) wildfyre @@ -144191,6 +147215,10 @@ willow Willow (World) + + willowbr + Willow (hack, Portuguese-BR Translation, v1.06) + willowj Willow (Japan) @@ -144333,7 +147361,7 @@ wipeormt - Wipeout (Ramtek) [TTL] + Wipeout (Ramtek) wipeout @@ -144491,6 +147519,10 @@ wldangel Wild Angels (0100337V, NSW/ACT) + + wldangelu + Wild Angels (QHG0477-04, US) + wldarrow Wild Arrow (color, Standard V4.8) @@ -144511,6 +147543,10 @@ wldcp_l1 World Cup (L-1) + + wldfruit + Wild Fruit (V208US) + wldgoos Wild Goose (20131911, NSW/ACT) @@ -144721,19 +147757,19 @@ wof3js - Sangokushi II: San Jian Sheng (Chinese bootleg set 1) + Sangokushi II: San Jian Sheng (Chinese bootleg, set 1) wof3jsa - Sangokushi II: San Jian Sheng (Chinese bootleg set 2) + Sangokushi II: San Jian Sheng (Chinese bootleg, set 2) wof3sj - Sangokushi II: San Sheng Jian (Chinese bootleg set 1) + Sangokushi II: San Sheng Jian (Chinese bootleg, set 1) wof3sja - Sangokushi II: San Sheng Jian (Chinese bootleg set 2) + Sangokushi II: San Sheng Jian (Chinese bootleg, set 2) wof_100a @@ -144833,23 +147869,23 @@ wofabla - Sangokushi II (Asia, bootleg, set 2) + Sangokushi II (bootleg, set 2) wofah - Sangokushi II (hack set 1, Asia 921005) + Sangokushi II (Asia 921005, hack, set 1) wofaha - Sangokushi II (hack set 2, Asia 921005) + Sangokushi II (Asia 921005, hack, set 2) wofahb - Sangokushi II (hack set 3, Asia 921005) + Sangokushi II (Asia 921005, hack, set 3) wofc - Sangokushi II (T-Chi) + Sangokushi II (hack, Chinese Translation) wofch @@ -144861,7 +147897,7 @@ wofchp - Tenchi wo Kurau II - Sekiheki no Tatakai (PS/SS Version, Hack) + Tenchi wo Kurau II: Sekiheki no Tatakai (PS/SS Version, Hack) wofdr @@ -144873,16 +147909,20 @@ wofh - Sangokushi II: Sanguo Yingxiong Zhuan (Chinese bootleg set 1) + Sangokushi II: Sanguo Yingxiong Zhuan (Chinese bootleg, set 1) wofha - Sangokushi II: Sanguo Yingxiong Zhuan (Chinese bootleg set 2) + Sangokushi II: Sanguo Yingxiong Zhuan (Chinese bootleg, set 2) wofhfh Huo Feng Huang (Chinese bootleg of Sangokushi II) + + wofigt + Wheel of Fortune (IGT) + wofj Tenchi wo Kurau II: Sekiheki no Tatakai (Japan 921031) @@ -144891,6 +147931,10 @@ wofjh Tenchi wo Kurau II: Sekiheki no Tatakai (hack, Japan 921031) + + wofkm3 + Tenchi wo Kurau II: Sekiheki no Tatakai (Subject 3, Hack) + wofmws Tenchi wo Kurau II: Sekiheki no Tatakai (3M Warriors, Hack) @@ -144917,23 +147961,19 @@ wofsgzb - Sangokushi II: San Guo Zheng Ba (Chinese bootleg of Sangokushi II) + Sanguo Zhengba (Chinese bootleg of Sangokushi II) wofsj - Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 1) + Sangokushi II: Sheng Jian Sanguo (Chinese bootleg, set 1) wofsja - Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 2) + Sangokushi II: Sheng Jian Sanguo (Chinese bootleg, set 2) wofsjb - Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 3) - - - wofsjc - Sangokushi II: Sheng Jian Sanguo (Chinese bootleg set 4) + Sangokushi II: Sheng Jian Sanguo (Chinese bootleg, set 3) wofsm @@ -145029,10 +148069,14 @@ wowg - Wizard of Wor (with German Language ROM) + Wizard of Wor (with German language ROM) wownfant + WOW New Fantasia (Explicit) + + + wownfanta WOW New Fantasia @@ -145225,7 +148269,7 @@ wrally - World Rally (Version 1.0, Checksum 0E56) + World Rally (version 1.0, checksum 0E56) wrally2 @@ -145237,19 +148281,23 @@ wrallya - World Rally (Version 1.0, Checksum 3873) + World Rally (version 1.0, checksum 3873) wrallyat - World Rally (US, 930217) + World Rally (US, version 1.0, checksum 2CC1) + + + wrallyata + World Rally (US, version 1.0, checksum 75A5) wrallyb - World Rally (Version 1.0, Checksum 8AA2) + World Rally (version 1.0, checksum 8AA2) wrallyc - World Rally (Version 1.0, Checksum E586) + World Rally (version 1.0, checksum E586) wrecking @@ -145437,6 +148485,10 @@ wtiger + White Tiger (4XF5139I08, US) + + + wtigerc White Tiger Classic (0200954V, NSW/ACT) @@ -145531,6 +148583,10 @@ wwanpanm Waku Waku Anpanman (Rev A) + + wwanpanmo + Waku Waku Anpanman + wwaratah Wild Waratah (10215911, NSW/ACT) @@ -145547,6 +148603,10 @@ wwaysa Wild Ways (10130111, ASP) + + wwdash + Wan Wan Dash (Japan, ver 1.01) + wwester1 Wild Western (set 2) @@ -145659,6 +148719,10 @@ wwfwfstj WWF WrestleFest (Japan) + + wwitch + Wicked Witch (Ver. AA.01.A) + wwjgtin Wai Wai Jockey Gate-In! @@ -145691,9 +148755,13 @@ wzwaysll Wizard Ways - Lady Luck (20139121, NSW/ACT) + + x180 + unknown Yuvo Joy Stand game (set 1) + x180ii - unknown Yuvo Joy Stand game + unknown Yuvo Joy Stand game (set 2) x2222 @@ -145721,7 +148789,7 @@ xenocrisis - Xeno Crisis (NGM-BB01 ~ NGH-BB01) + Xeno Crisis (HB) xenon @@ -145769,7 +148837,7 @@ xeviousng - Xevious (Neo-Geo Conversion) + Xevious - Neo Geo Conversion (HB) xexex @@ -145811,13 +148879,17 @@ xforce X Force + + xiaoao + Xiao Ao Jiang Hu (China, Ver. 1.00) + xiistag XII Stag (V2.01J 2002/6/26 22:27) xmcota - X-Men: Children of the Atom (Euro 950331) + X-Men: Children of the Atom (Europe 950331) xmcotaa @@ -145835,6 +148907,10 @@ xmcotab X-Men: Children of the Atom (Brazil 950331) + + xmcotabh + X-Men: Children of the Atom (Boss Hack) + xmcotah X-Men: Children of the Atom (Hispanic 950331) @@ -145865,11 +148941,11 @@ xmcotar1 - X-Men: Children of the Atom (Euro 950105) + X-Men: Children of the Atom (Europe 950105) xmcotar1d - X-Men: Children of the Atom (Euro 950105 Phoenix Edition) (bootleg) + X-Men: Children of the Atom (Europe 950105 Phoenix Edition) (bootleg) xmcotau @@ -145945,7 +149021,7 @@ xmvsf - X-Men Vs. Street Fighter (Euro 961004) + X-Men Vs. Street Fighter (Europe 961004) xmvsfa @@ -145969,7 +149045,11 @@ xmvsfcph - X-Men vs Street Fighter (Hack, 961004 Coop) + X-Men Vs. Street Fighter (Coop, Hack) + + + xmvsfem + X-Men Vs. Street Fighter (Easy Moves, Hack) xmvsfh @@ -145977,23 +149057,27 @@ xmvsfj - X-Men Vs. Street Fighter (Japan 961023) + X-Men Vs. Street Fighter (Japan 970113) xmvsfjr1 - X-Men Vs. Street Fighter (Japan 961004) + X-Men Vs. Street Fighter (Japan 961023) xmvsfjr2 - X-Men Vs. Street Fighter (Japan 960910) + X-Men Vs. Street Fighter (Japan 961004) xmvsfjr3 + X-Men Vs. Street Fighter (Japan 960910) + + + xmvsfjr4 X-Men Vs. Street Fighter (Japan 960909) xmvsfr1 - X-Men Vs. Street Fighter (Euro 960910) + X-Men Vs. Street Fighter (Europe 960910) xmvsfu @@ -146023,6 +149107,10 @@ xrally Xtreme Rally / Off Beat Racer! + + xreel + X-Reel + xsandos X's & O's @@ -146099,6 +149187,10 @@ xybotsg Xybots (German, rev 3) + + xyddz + Xiaoyao Dou Dizhu + xymg Xingyun Man Guan (China, V651C) @@ -146111,18 +149203,30 @@ yachtmn Yachtsman + + yakyuken + The Yakyuken (bootleg) + yamagchi Go Go Mr. Yamaguchi / Yuke Yuke Yamaguchi-kun yamato - Yamato (US) + Yamato (set 1) yamato2 Yamato (World?) + + yamatoa + Yamato (set 2) + + + yamatou + Yamato (US) + yamyam Yam! Yam!? @@ -146165,16 +149269,20 @@ yiear - Yie Ar Kung-Fu (program code I) + Yie Ar Kung-Fu (version I) yiear2 - Yie Ar Kung-Fu (program code G) + Yie Ar Kung-Fu (version G) yieartf Yie Ar Kung-Fu (bootleg GX361 conversion) + + yizhix + Yizhi Xiangqi + ymcapsul Yu-Gi-Oh Monster Capsule @@ -146201,7 +149309,7 @@ yosimotm - Mahjong Yoshimoto Gekijou [BET] (Japan) + Mahjong Yoshimoto Gekijou (Japan, medal) yosimoto @@ -146211,6 +149319,10 @@ youjyudn Youjyuden (Japan) + + youkai + Youkai VS Uchuujin + youkaidk Yokai Douchuuki (Japan new version) @@ -146239,6 +149351,10 @@ youmab2 Youma Ninpou Chou (Game Electronics bootleg, set 2) + + yoyoshkn + Yo-Yo Shuriken (HB) + yoyospel YoYo Spell (prototype) @@ -146247,6 +149363,10 @@ yujan Yu-Jan + + yujogs + Yujo Gattai Shishigami-o + yuka Yu-Ka @@ -146273,7 +149393,7 @@ yumefuda - Yumefuda [BET] + Yumefuda yutnori @@ -146287,6 +149407,10 @@ yuyuhaku The Battle of Yu Yu Hakusho: Shitou! Ankoku Bujutsukai! + + yyhm + Yuanyang Hudie Meng (Version 8.8A 2005-09-25) + zankor Zankor (TMS5200 Italian speech) @@ -146365,7 +149489,7 @@ zenponta - Zenigata Ponta + Zenigata Ponta (Japan, ver 1.02) zephy @@ -146471,6 +149595,14 @@ zerotime Zero Time (Petaco S.A.) + + zerotimea + Zero Time (Spanish bootleg, set 1) + + + zerotimeb + Zero Time (Spanish bootleg, set 2) + zerotimed Zero Time (Datamat) @@ -146479,10 +149611,6 @@ zerotimemc Zero Time (Marti Colls) - - zerotimeu - Zero Time (Spanish bootleg) - zerotm2k Zero Team 2000 @@ -146521,7 +149649,7 @@ zhongguo - Zhong Guo Chu Da D + Zhongguo Chu Da D (V102C) zigzag @@ -146569,11 +149697,11 @@ znpwfv - Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000) + Zen Nippon Pro-Wres Featuring Virtua (J 971123 V1.000) znpwfvt - Zen Nippon Pro-Wrestling Featuring Virtua (T 971123 V1.000) + All Japan Pro-Wrestling Featuring Virtua (T 971123 V1.000) zoar @@ -146587,6 +149715,10 @@ zoidiexp Zoids Infinity EX Plus (ver. 2.10) + + zoids + Zoids + zoidsinf Zoids Infinity @@ -146597,6 +149729,10 @@ zokuoten + Zoku Otenamihaiken (V2.05J 2003/05/12 18:00) + + + zokuotena Zoku Otenamihaiken (V2.03J 2001/02/16 16:00) @@ -146703,6 +149839,10 @@ zteamem Zero Team USA (Nightmare, Hack) + + zteaml6 + Zero Team USA (Camper, Hack) + zteammm Zero Team USA (Incubus, Hack) @@ -146723,6 +149863,10 @@ zteamym Zero Team USA (Devil, Hack) + + zteamymp + Zero Team USA (Devil Plus, Hack) + zteamys Zero Team USA (God, Hack) @@ -146743,13 +149887,17 @@ zupapa Zupapa! + + zupapah8 + Zupapa (Italian gambling game) + zwackery Zwackery zzblock - Zun Zun Block [TTL] + Zun Zun Block zzyzzyx2 From 1620f19a00e456d3798fe0e58f65bfaf2427bdc4 Mon Sep 17 00:00:00 2001 From: Gemba Date: Mon, 7 Apr 2025 08:19:15 +0200 Subject: [PATCH 599/603] remove refactoring leftovers these snippets accidentially haven't been removed (cf. #846). esp. `getPressCountInDuration()` is member of CollectionSystemManager.cpp since then. --- es-app/src/SystemScreenSaver.cpp | 5 +---- es-app/src/views/gamelist/ISimpleGameListView.h | 3 --- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/es-app/src/SystemScreenSaver.cpp b/es-app/src/SystemScreenSaver.cpp index d1b8f8a15c..a5684adaea 100644 --- a/es-app/src/SystemScreenSaver.cpp +++ b/es-app/src/SystemScreenSaver.cpp @@ -85,9 +85,6 @@ bool SystemScreenSaver::inputDuringScreensaver(InputConfig* config, Input input) bool is_select_game_input = config->isMappedTo("a", input); bool use_gamelistmedia = screensaver_type == "random video" || !Settings::getInstance()->getBool("SlideshowScreenSaverCustomMediaSource"); - // catch any valid screensaver or invalid inputs here to prevent screensaver from stopping - input_consumed = input_consumed || (config->getMappedTo(input).size() == 0); - if (input.value != 0) { if (is_next_input) @@ -95,7 +92,7 @@ bool SystemScreenSaver::inputDuringScreensaver(InputConfig* config, Input input) changeMediaItem(); input_consumed = true; } - else if (use_gamelistmedia) + else if (use_gamelistmedia) { if (is_previous_input && mPreviousGame) { diff --git a/es-app/src/views/gamelist/ISimpleGameListView.h b/es-app/src/views/gamelist/ISimpleGameListView.h index 82f77d2e1e..bf8544a54d 100644 --- a/es-app/src/views/gamelist/ISimpleGameListView.h +++ b/es-app/src/views/gamelist/ISimpleGameListView.h @@ -44,9 +44,6 @@ class ISimpleGameListView : public IGameListView std::vector mThemeExtras; std::stack mCursorStack; - -private: - int getPressCountInDuration(); }; #endif // ES_APP_VIEWS_GAME_LIST_ISIMPLE_GAME_LIST_VIEW_H From b9c08de32ba452b6cd3bea87066b71177dbab7cd Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Mon, 12 May 2025 19:38:52 +0100 Subject: [PATCH 600/603] pugixml: update to v1.15 In preparation for CMake 4.0 support, since this `pugixml` version is compatible with it. --- external/pugixml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/pugixml b/external/pugixml index a0e0643363..ee86beb30e 160000 --- a/external/pugixml +++ b/external/pugixml @@ -1 +1 @@ -Subproject commit a0e064336317c9347a91224112af9933598714e9 +Subproject commit ee86beb30e4973f5feffe3ce63bfa4fbadf72f38 From af4174a4bffc9a0d47e495766e9823d8b1405ad4 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Sun, 18 May 2025 05:56:34 +0100 Subject: [PATCH 601/603] cmake: update supported versions Enable a version range to support both older and the new 4 version of CMake. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bc0e45e3b..c0867b85bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.5...4.0) # Note: Visual Studio 2022 generator requires CMake 3.21 or greater. option(GLES "Set to ON if targeting Embedded OpenGL" ${GLES}) From 5ef2b74ab83b989e0be0a3a4a88b3238c33e9c93 Mon Sep 17 00:00:00 2001 From: cmitu <31816814+cmitu@users.noreply.github.com> Date: Thu, 29 May 2025 20:43:02 +0100 Subject: [PATCH 602/603] nanosvg: update from upstream Updated with the latest nanosvg version, which includes mainly bugfixes and a few coloring SVG rendering improvements. Simplified a bit the cxx implementation source, since the all the necessary headers are included with `nanosvgrast.h`. --- external/nanosvg/nanosvg.h | 341 ++++++++++++++++++-------- external/nanosvg/nanosvgrast.h | 48 ++-- external/nanosvg/src/nanosvg_impl.cpp | 3 +- 3 files changed, 261 insertions(+), 131 deletions(-) diff --git a/external/nanosvg/nanosvg.h b/external/nanosvg/nanosvg.h index 0cb1e902db..76e0dbebe2 100644 --- a/external/nanosvg/nanosvg.h +++ b/external/nanosvg/nanosvg.h @@ -72,6 +72,7 @@ extern "C" { */ enum NSVGpaintType { + NSVG_PAINT_UNDEF = -1, NSVG_PAINT_NONE = 0, NSVG_PAINT_COLOR = 1, NSVG_PAINT_LINEAR_GRADIENT = 2, @@ -119,7 +120,7 @@ typedef struct NSVGgradient { } NSVGgradient; typedef struct NSVGpaint { - char type; + signed char type; union { unsigned int color; NSVGgradient* gradient; @@ -143,14 +144,17 @@ typedef struct NSVGshape float opacity; // Opacity of the shape. float strokeWidth; // Stroke width (scaled). float strokeDashOffset; // Stroke dash offset (scaled). - float strokeDashArray[8]; // Stroke dash array (scaled). - char strokeDashCount; // Number of dash values in dash array. + float strokeDashArray[8]; // Stroke dash array (scaled). + char strokeDashCount; // Number of dash values in dash array. char strokeLineJoin; // Stroke join type. char strokeLineCap; // Stroke cap type. float miterLimit; // Miter limit char fillRule; // Fill rule, see NSVGfillRule. unsigned char flags; // Logical or of NSVG_FLAGS_* flags float bounds[4]; // Tight bounding box of the shape [minx,miny,maxx,maxy]. + char fillGradient[64]; // Optional 'id' of fill gradient + char strokeGradient[64]; // Optional 'id' of stroke gradient + float xform[6]; // Root transformation for fill/stroke gradient NSVGpath* paths; // Linked list of paths in the image. struct NSVGshape* next; // Pointer to next shape, or NULL if last element. } NSVGshape; @@ -181,12 +185,11 @@ void nsvgDelete(NSVGimage* image); #endif #endif -#endif // NANOSVG_H - #ifdef NANOSVG_IMPLEMENTATION #include #include +#include #include #define NSVG_PI (3.14159265358979323846264338327f) @@ -203,7 +206,7 @@ void nsvgDelete(NSVGimage* image); #define NSVG_RGB(r, g, b) (((unsigned int)r) | ((unsigned int)g << 8) | ((unsigned int)b << 16)) #ifdef _MSC_VER -#pragma warning (disable: 4996) // Switch off security warnings + #pragma warning (disable: 4996) // Switch off security warnings #pragma warning (disable: 4100) // Switch off unreferenced formal parameter warnings #ifdef __cplusplus #define NSVG_INLINE inline @@ -211,7 +214,7 @@ void nsvgDelete(NSVGimage* image); #define NSVG_INLINE #endif #else -#define NSVG_INLINE inline + #define NSVG_INLINE inline #endif @@ -225,11 +228,6 @@ static int nsvg__isdigit(char c) return c >= '0' && c <= '9'; } -static int nsvg__isnum(char c) -{ - return strchr("0123456789+-.eE", c) != 0; -} - static NSVG_INLINE float nsvg__minf(float a, float b) { return a < b ? a : b; } static NSVG_INLINE float nsvg__maxf(float a, float b) { return a > b ? a : b; } @@ -400,7 +398,7 @@ typedef struct NSVGgradientData { char id[64]; char ref[64]; - char type; + signed char type; union { NSVGlinearData linear; NSVGradialData radial; @@ -616,7 +614,7 @@ static void nsvg__curveBounds(float* bounds, float* curve) } } -static NSVGparser* nsvg__createParser() +static NSVGparser* nsvg__createParser(void) { NSVGparser* p; p = (NSVGparser*)malloc(sizeof(NSVGparser)); @@ -646,7 +644,7 @@ static NSVGparser* nsvg__createParser() return p; - error: +error: if (p) { if (p->image) free(p->image); free(p); @@ -736,9 +734,11 @@ static void nsvg__lineTo(NSVGparser* p, float x, float y) static void nsvg__cubicBezTo(NSVGparser* p, float cpx1, float cpy1, float cpx2, float cpy2, float x, float y) { - nsvg__addPoint(p, cpx1, cpy1); - nsvg__addPoint(p, cpx2, cpy2); - nsvg__addPoint(p, x, y); + if (p->npts > 0) { + nsvg__addPoint(p, cpx1, cpy1); + nsvg__addPoint(p, cpx2, cpy2); + nsvg__addPoint(p, x, y); + } } static NSVGattrib* nsvg__getAttr(NSVGparser* p) @@ -808,7 +808,9 @@ static float nsvg__convertToPixels(NSVGparser* p, NSVGcoordinate c, float orig, static NSVGgradientData* nsvg__findGradientData(NSVGparser* p, const char* id) { NSVGgradientData* grad = p->gradients; - while (grad) { + if (id == NULL || *id == '\0') + return NULL; + while (grad != NULL) { if (strcmp(grad->id, id) == 0) return grad; grad = grad->next; @@ -816,28 +818,34 @@ static NSVGgradientData* nsvg__findGradientData(NSVGparser* p, const char* id) return NULL; } -static NSVGgradient* nsvg__createGradient(NSVGparser* p, const char* id, const float* localBounds, char* paintType) +static NSVGgradient* nsvg__createGradient(NSVGparser* p, const char* id, const float* localBounds, float *xform, signed char* paintType) { - NSVGattrib* attr = nsvg__getAttr(p); NSVGgradientData* data = NULL; NSVGgradientData* ref = NULL; NSVGgradientStop* stops = NULL; NSVGgradient* grad; float ox, oy, sw, sh, sl; int nstops = 0; + int refIter; data = nsvg__findGradientData(p, id); if (data == NULL) return NULL; // TODO: use ref to fill in all unset values too. ref = data; + refIter = 0; while (ref != NULL) { + NSVGgradientData* nextRef = NULL; if (stops == NULL && ref->stops != NULL) { stops = ref->stops; nstops = ref->nstops; break; } - ref = nsvg__findGradientData(p, ref->ref); + nextRef = nsvg__findGradientData(p, ref->ref); + if (nextRef == ref) break; // prevent infite loops on malformed data + ref = nextRef; + refIter++; + if (refIter > 32) break; // prevent infite loops on malformed data } if (stops == NULL) return NULL; @@ -886,7 +894,7 @@ static NSVGgradient* nsvg__createGradient(NSVGparser* p, const char* id, const f } nsvg__xformMultiply(grad->xform, data->xform); - nsvg__xformMultiply(grad->xform, attr->xform); + nsvg__xformMultiply(grad->xform, xform); grad->spread = data->spread; memcpy(grad->stops, stops, nstops*sizeof(NSVGgradientStop)); @@ -950,6 +958,9 @@ static void nsvg__addShape(NSVGparser* p) memset(shape, 0, sizeof(NSVGshape)); memcpy(shape->id, attr->id, sizeof shape->id); + memcpy(shape->fillGradient, attr->fillGradient, sizeof shape->fillGradient); + memcpy(shape->strokeGradient, attr->strokeGradient, sizeof shape->strokeGradient); + memcpy(shape->xform, attr->xform, sizeof shape->xform); scale = nsvg__getAverageScale(attr->xform); shape->strokeWidth = attr->strokeWidth * scale; shape->strokeDashOffset = attr->strokeDashOffset * scale; @@ -985,13 +996,7 @@ static void nsvg__addShape(NSVGparser* p) shape->fill.color = attr->fillColor; shape->fill.color |= (unsigned int)(attr->fillOpacity*255) << 24; } else if (attr->hasFill == 2) { - float inv[6], localBounds[4]; - nsvg__xformInverse(inv, attr->xform); - nsvg__getLocalBounds(localBounds, shape, inv); - shape->fill.gradient = nsvg__createGradient(p, attr->fillGradient, localBounds, &shape->fill.type); - if (shape->fill.gradient == NULL) { - shape->fill.type = NSVG_PAINT_NONE; - } + shape->fill.type = NSVG_PAINT_UNDEF; } // Set stroke @@ -1002,12 +1007,7 @@ static void nsvg__addShape(NSVGparser* p) shape->stroke.color = attr->strokeColor; shape->stroke.color |= (unsigned int)(attr->strokeOpacity*255) << 24; } else if (attr->hasStroke == 2) { - float inv[6], localBounds[4]; - nsvg__xformInverse(inv, attr->xform); - nsvg__getLocalBounds(localBounds, shape, inv); - shape->stroke.gradient = nsvg__createGradient(p, attr->strokeGradient, localBounds, &shape->stroke.type); - if (shape->stroke.gradient == NULL) - shape->stroke.type = NSVG_PAINT_NONE; + shape->stroke.type = NSVG_PAINT_UNDEF; } // Set flags @@ -1022,7 +1022,7 @@ static void nsvg__addShape(NSVGparser* p) return; - error: +error: if (shape) free(shape); } @@ -1040,6 +1040,10 @@ static void nsvg__addPath(NSVGparser* p, char closed) if (closed) nsvg__lineTo(p, p->pts[0], p->pts[1]); + // Expect 1 + N*3 points (N = number of cubic bezier segments). + if ((p->npts % 3) != 1) + return; + path = (NSVGpath*)malloc(sizeof(NSVGpath)); if (path == NULL) goto error; memset(path, 0, sizeof(NSVGpath)); @@ -1075,7 +1079,7 @@ static void nsvg__addPath(NSVGparser* p, char closed) return; - error: +error: if (path != NULL) { if (path->pts != NULL) free(path->pts); free(path); @@ -1185,6 +1189,19 @@ static const char* nsvg__parseNumber(const char* s, char* it, const int size) return s; } +static const char* nsvg__getNextPathItemWhenArcFlag(const char* s, char* it) +{ + it[0] = '\0'; + while (*s && (nsvg__isspace(*s) || *s == ',')) s++; + if (!*s) return s; + if (*s == '0' || *s == '1') { + it[0] = *s++; + it[1] = '\0'; + return s; + } + return s; +} + static const char* nsvg__getNextPathItem(const char* s, char* it) { it[0] = '\0'; @@ -1205,35 +1222,66 @@ static const char* nsvg__getNextPathItem(const char* s, char* it) static unsigned int nsvg__parseColorHex(const char* str) { - unsigned int c = 0, r = 0, g = 0, b = 0; - int n = 0; - str++; // skip # - // Calculate number of characters. - while(str[n] && !nsvg__isspace(str[n])) - n++; - if (n == 6) { - sscanf(str, "%x", &c); - } else if (n == 3) { - sscanf(str, "%x", &c); - c = (c&0xf) | ((c&0xf0) << 4) | ((c&0xf00) << 8); - c |= c<<4; - } - r = (c >> 16) & 0xff; - g = (c >> 8) & 0xff; - b = c & 0xff; - return NSVG_RGB(r,g,b); + unsigned int r=0, g=0, b=0; + if (sscanf(str, "#%2x%2x%2x", &r, &g, &b) == 3 ) // 2 digit hex + return NSVG_RGB(r, g, b); + if (sscanf(str, "#%1x%1x%1x", &r, &g, &b) == 3 ) // 1 digit hex, e.g. #abc -> 0xccbbaa + return NSVG_RGB(r*17, g*17, b*17); // same effect as (r<<4|r), (g<<4|g), .. + return NSVG_RGB(128, 128, 128); } +// Parse rgb color. The pointer 'str' must point at "rgb(" (4+ characters). +// This function returns gray (rgb(128, 128, 128) == '#808080') on parse errors +// for backwards compatibility. Note: other image viewers return black instead. + static unsigned int nsvg__parseColorRGB(const char* str) { - int r = -1, g = -1, b = -1; - char s1[32]="", s2[32]=""; - sscanf(str + 4, "%d%[%%, \t]%d%[%%, \t]%d", &r, s1, &g, s2, &b); - if (strchr(s1, '%')) { - return NSVG_RGB((r*255)/100,(g*255)/100,(b*255)/100); - } else { - return NSVG_RGB(r,g,b); + int i; + unsigned int rgbi[3]; + float rgbf[3]; + // try decimal integers first + if (sscanf(str, "rgb(%u, %u, %u)", &rgbi[0], &rgbi[1], &rgbi[2]) != 3) { + // integers failed, try percent values (float, locale independent) + const char delimiter[3] = {',', ',', ')'}; + str += 4; // skip "rgb(" + for (i = 0; i < 3; i++) { + while (*str && (nsvg__isspace(*str))) str++; // skip leading spaces + if (*str == '+') str++; // skip '+' (don't allow '-') + if (!*str) break; + rgbf[i] = nsvg__atof(str); + + // Note 1: it would be great if nsvg__atof() returned how many + // bytes it consumed but it doesn't. We need to skip the number, + // the '%' character, spaces, and the delimiter ',' or ')'. + + // Note 2: The following code does not allow values like "33.%", + // i.e. a decimal point w/o fractional part, but this is consistent + // with other image viewers, e.g. firefox, chrome, eog, gimp. + + while (*str && nsvg__isdigit(*str)) str++; // skip integer part + if (*str == '.') { + str++; + if (!nsvg__isdigit(*str)) break; // error: no digit after '.' + while (*str && nsvg__isdigit(*str)) str++; // skip fractional part + } + if (*str == '%') str++; else break; + while (*str && nsvg__isspace(*str)) str++; + if (*str == delimiter[i]) str++; + else break; + } + if (i == 3) { + rgbi[0] = roundf(rgbf[0] * 2.55f); + rgbi[1] = roundf(rgbf[1] * 2.55f); + rgbi[2] = roundf(rgbf[2] * 2.55f); + } else { + rgbi[0] = rgbi[1] = rgbi[2] = 128; + } } + // clip values as the CSS spec requires + for (i = 0; i < 3; i++) { + if (rgbi[i] > 255) rgbi[i] = 255; + } + return NSVG_RGB(rgbi[0], rgbi[1], rgbi[2]); } typedef struct NSVGNamedColor { @@ -1243,19 +1291,19 @@ typedef struct NSVGNamedColor { NSVGNamedColor nsvg__colors[] = { - { "red", NSVG_RGB(255, 0, 0) }, - { "green", NSVG_RGB( 0, 128, 0) }, - { "blue", NSVG_RGB( 0, 0, 255) }, - { "yellow", NSVG_RGB(255, 255, 0) }, - { "cyan", NSVG_RGB( 0, 255, 255) }, - { "magenta", NSVG_RGB(255, 0, 255) }, - { "black", NSVG_RGB( 0, 0, 0) }, - { "grey", NSVG_RGB(128, 128, 128) }, - { "gray", NSVG_RGB(128, 128, 128) }, - { "white", NSVG_RGB(255, 255, 255) }, + { "red", NSVG_RGB(255, 0, 0) }, + { "green", NSVG_RGB( 0, 128, 0) }, + { "blue", NSVG_RGB( 0, 0, 255) }, + { "yellow", NSVG_RGB(255, 255, 0) }, + { "cyan", NSVG_RGB( 0, 255, 255) }, + { "magenta", NSVG_RGB(255, 0, 255) }, + { "black", NSVG_RGB( 0, 0, 0) }, + { "grey", NSVG_RGB(128, 128, 128) }, + { "gray", NSVG_RGB(128, 128, 128) }, + { "white", NSVG_RGB(255, 255, 255) }, #ifdef NANOSVG_ALL_COLOR_KEYWORDS -{ "aliceblue", NSVG_RGB(240, 248, 255) }, + { "aliceblue", NSVG_RGB(240, 248, 255) }, { "antiquewhite", NSVG_RGB(250, 235, 215) }, { "aqua", NSVG_RGB( 0, 255, 255) }, { "aquamarine", NSVG_RGB(127, 255, 212) }, @@ -1458,6 +1506,15 @@ static int nsvg__parseUnits(const char* units) return NSVG_UNITS_USER; } +static int nsvg__isCoordinate(const char* s) +{ + // optional sign + if (*s == '-' || *s == '+') + s++; + // must have at least one digit, or start by a dot + return (nsvg__isdigit(*s) || *s == '.'); +} + static NSVGcoordinate nsvg__parseCoordinateRaw(const char* str) { NSVGcoordinate coord = {0, NSVG_UNITS_USER}; @@ -1597,25 +1654,32 @@ static int nsvg__parseRotate(float* xform, const char* str) static void nsvg__parseTransform(float* xform, const char* str) { float t[6]; + int len; nsvg__xformIdentity(xform); while (*str) { if (strncmp(str, "matrix", 6) == 0) - str += nsvg__parseMatrix(t, str); + len = nsvg__parseMatrix(t, str); else if (strncmp(str, "translate", 9) == 0) - str += nsvg__parseTranslate(t, str); + len = nsvg__parseTranslate(t, str); else if (strncmp(str, "scale", 5) == 0) - str += nsvg__parseScale(t, str); + len = nsvg__parseScale(t, str); else if (strncmp(str, "rotate", 6) == 0) - str += nsvg__parseRotate(t, str); + len = nsvg__parseRotate(t, str); else if (strncmp(str, "skewX", 5) == 0) - str += nsvg__parseSkewX(t, str); + len = nsvg__parseSkewX(t, str); else if (strncmp(str, "skewY", 5) == 0) - str += nsvg__parseSkewY(t, str); + len = nsvg__parseSkewY(t, str); else{ ++str; continue; } + if (len != 0) { + str += len; + } else { + ++str; + continue; + } nsvg__xformPremultiply(xform, t); } @@ -1625,9 +1689,9 @@ static void nsvg__parseUrl(char* id, const char* str) { int i = 0; str += 4; // "url("; - if (*str == '#') + if (*str && *str == '#') str++; - while (i < 63 && *str != ')') { + while (i < 63 && *str && *str != ')') { id[i] = *str++; i++; } @@ -1876,8 +1940,11 @@ static int nsvg__getArgsPerElement(char cmd) case 'a': case 'A': return 7; + case 'z': + case 'Z': + return 0; } - return 0; + return -1; } static void nsvg__pathMoveTo(NSVGparser* p, float* cpx, float* cpy, float* args, int rel) @@ -2158,7 +2225,12 @@ static void nsvg__pathArcTo(NSVGparser* p, float* cpx, float* cpy, float* args, // The loop assumes an iteration per end point (including start and end), this +1. ndivs = (int)(fabsf(da) / (NSVG_PI*0.5f) + 1.0f); hda = (da / (float)ndivs) / 2.0f; - kappa = fabsf(4.0f / 3.0f * (1.0f - cosf(hda)) / sinf(hda)); + // Fix for ticket #179: division by 0: avoid cotangens around 0 (infinite) + if ((hda < 1e-3f) && (hda > -1e-3f)) + hda *= 0.5f; + else + hda = (1.0f - cosf(hda)) / sinf(hda); + kappa = fabsf(4.0f / 3.0f * hda); if (da < 0.0f) kappa = -kappa; @@ -2187,6 +2259,7 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr) float args[10]; int nargs; int rargs = 0; + char initPoint; float cpx, cpy, cpx2, cpy2; const char* tmp[4]; char closedFlag; @@ -2209,13 +2282,18 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr) nsvg__resetPath(p); cpx = 0; cpy = 0; cpx2 = 0; cpy2 = 0; + initPoint = 0; closedFlag = 0; nargs = 0; while (*s) { - s = nsvg__getNextPathItem(s, item); + item[0] = '\0'; + if ((cmd == 'A' || cmd == 'a') && (nargs == 3 || nargs == 4)) + s = nsvg__getNextPathItemWhenArcFlag(s, item); + if (!*item) + s = nsvg__getNextPathItem(s, item); if (!*item) break; - if (nsvg__isnum(item[0])) { + if (cmd != '\0' && nsvg__isCoordinate(item)) { if (nargs < 10) args[nargs++] = (float)nsvg__atof(item); if (nargs >= rargs) { @@ -2228,6 +2306,7 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr) cmd = (cmd == 'm') ? 'l' : 'L'; rargs = nsvg__getArgsPerElement(cmd); cpx2 = cpx; cpy2 = cpy; + initPoint = 1; break; case 'l': case 'L': @@ -2277,7 +2356,6 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr) } } else { cmd = item[0]; - rargs = nsvg__getArgsPerElement(cmd); if (cmd == 'M' || cmd == 'm') { // Commit path. if (p->npts > 0) @@ -2286,7 +2364,11 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr) nsvg__resetPath(p); closedFlag = 0; nargs = 0; - } else if (cmd == 'Z' || cmd == 'z') { + } else if (initPoint == 0) { + // Do not allow other commands until initial point has been set (moveTo called once). + cmd = '\0'; + } + if (cmd == 'Z' || cmd == 'z') { closedFlag = 1; // Commit path. if (p->npts > 0) { @@ -2302,6 +2384,12 @@ static void nsvg__parsePath(NSVGparser* p, const char** attr) closedFlag = 0; nargs = 0; } + rargs = nsvg__getArgsPerElement(cmd); + if (rargs == -1) { + // Command not recognized + cmd = '\0'; + rargs = 0; + } } } // Commit path. @@ -2548,7 +2636,7 @@ static void nsvg__parseSVG(NSVGparser* p, const char** attr) } } -static void nsvg__parseGradient(NSVGparser* p, const char** attr, char type) +static void nsvg__parseGradient(NSVGparser* p, const char** attr, signed char type) { int i; NSVGgradientData* grad = (NSVGgradientData*)malloc(sizeof(NSVGgradientData)); @@ -2873,6 +2961,36 @@ static void nsvg__scaleToViewbox(NSVGparser* p, const char* units) } } +static void nsvg__createGradients(NSVGparser* p) +{ + NSVGshape* shape; + + for (shape = p->image->shapes; shape != NULL; shape = shape->next) { + if (shape->fill.type == NSVG_PAINT_UNDEF) { + if (shape->fillGradient[0] != '\0') { + float inv[6], localBounds[4]; + nsvg__xformInverse(inv, shape->xform); + nsvg__getLocalBounds(localBounds, shape, inv); + shape->fill.gradient = nsvg__createGradient(p, shape->fillGradient, localBounds, shape->xform, &shape->fill.type); + } + if (shape->fill.type == NSVG_PAINT_UNDEF) { + shape->fill.type = NSVG_PAINT_NONE; + } + } + if (shape->stroke.type == NSVG_PAINT_UNDEF) { + if (shape->strokeGradient[0] != '\0') { + float inv[6], localBounds[4]; + nsvg__xformInverse(inv, shape->xform); + nsvg__getLocalBounds(localBounds, shape, inv); + shape->stroke.gradient = nsvg__createGradient(p, shape->strokeGradient, localBounds, shape->xform, &shape->stroke.type); + } + if (shape->stroke.type == NSVG_PAINT_UNDEF) { + shape->stroke.type = NSVG_PAINT_NONE; + } + } + } +} + NSVGimage* nsvgParse(char* input, const char* units, float dpi) { NSVGparser* p; @@ -2886,6 +3004,9 @@ NSVGimage* nsvgParse(char* input, const char* units, float dpi) nsvg__parseXML(input, nsvg__startElement, nsvg__endElement, nsvg__content, p); + // Create gradients after all definitions have been parsed + nsvg__createGradients(p); + // Scale to viewBox nsvg__scaleToViewbox(p, units); @@ -2919,7 +3040,7 @@ NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi) return image; - error: +error: if (fp) fclose(fp); if (data) free(data); if (image) nsvgDelete(image); @@ -2928,32 +3049,32 @@ NSVGimage* nsvgParseFromFile(const char* filename, const char* units, float dpi) NSVGpath* nsvgDuplicatePath(NSVGpath* p) { - NSVGpath* res = NULL; + NSVGpath* res = NULL; - if (p == NULL) - return NULL; + if (p == NULL) + return NULL; - res = (NSVGpath*)malloc(sizeof(NSVGpath)); - if (res == NULL) goto error; - memset(res, 0, sizeof(NSVGpath)); + res = (NSVGpath*)malloc(sizeof(NSVGpath)); + if (res == NULL) goto error; + memset(res, 0, sizeof(NSVGpath)); - res->pts = (float*)malloc(p->npts*2*sizeof(float)); - if (res->pts == NULL) goto error; - memcpy(res->pts, p->pts, p->npts * sizeof(float) * 2); - res->npts = p->npts; + res->pts = (float*)malloc(p->npts*2*sizeof(float)); + if (res->pts == NULL) goto error; + memcpy(res->pts, p->pts, p->npts * sizeof(float) * 2); + res->npts = p->npts; - memcpy(res->bounds, p->bounds, sizeof(p->bounds)); + memcpy(res->bounds, p->bounds, sizeof(p->bounds)); - res->closed = p->closed; + res->closed = p->closed; - return res; + return res; - error: - if (res != NULL) { - free(res->pts); - free(res); - } - return NULL; +error: + if (res != NULL) { + free(res->pts); + free(res); + } + return NULL; } void nsvgDelete(NSVGimage* image) @@ -2972,4 +3093,6 @@ void nsvgDelete(NSVGimage* image) free(image); } -#endif +#endif // NANOSVG_IMPLEMENTATION + +#endif // NANOSVG_H diff --git a/external/nanosvg/nanosvgrast.h b/external/nanosvg/nanosvgrast.h index a729a47be3..90d42e9286 100644 --- a/external/nanosvg/nanosvgrast.h +++ b/external/nanosvg/nanosvgrast.h @@ -25,6 +25,8 @@ #ifndef NANOSVGRAST_H #define NANOSVGRAST_H +#include "nanosvg.h" + #ifndef NANOSVGRAST_CPLUSPLUS #ifdef __cplusplus extern "C" { @@ -47,7 +49,7 @@ typedef struct NSVGrasterizer NSVGrasterizer; */ // Allocated rasterizer context. -NSVGrasterizer* nsvgCreateRasterizer(); +NSVGrasterizer* nsvgCreateRasterizer(void); // Rasterizes SVG image, returns RGBA image (non-premultiplied alpha) // r - pointer to rasterizer context @@ -72,11 +74,11 @@ void nsvgDeleteRasterizer(NSVGrasterizer*); #endif #endif -#endif // NANOSVGRAST_H - #ifdef NANOSVGRAST_IMPLEMENTATION #include +#include +#include #define NSVG__SUBSAMPLES 5 #define NSVG__FIXSHIFT 10 @@ -112,7 +114,7 @@ typedef struct NSVGmemPage { } NSVGmemPage; typedef struct NSVGcachedPaint { - char type; + signed char type; char spread; float xform[6]; unsigned int colors[256]; @@ -148,7 +150,7 @@ struct NSVGrasterizer int width, height, stride; }; -NSVGrasterizer* nsvgCreateRasterizer() +NSVGrasterizer* nsvgCreateRasterizer(void) { NSVGrasterizer* r = (NSVGrasterizer*)malloc(sizeof(NSVGrasterizer)); if (r == NULL) goto error; @@ -159,7 +161,7 @@ NSVGrasterizer* nsvgCreateRasterizer() return r; - error: +error: nsvgDeleteRasterizer(r); return NULL; } @@ -329,6 +331,7 @@ static float nsvg__normalize(float *x, float* y) } static float nsvg__absf(float x) { return x < 0 ? -x : x; } +static float nsvg__roundf(float x) { return (x >= 0) ? floorf(x + 0.5) : ceilf(x - 0.5); } static void nsvg__flattenCubicBez(NSVGrasterizer* r, float x1, float y1, float x2, float y2, @@ -351,8 +354,8 @@ static void nsvg__flattenCubicBez(NSVGrasterizer* r, dx = x4 - x1; dy = y4 - y1; - d2 = nsvg__absf(((x2 - x4) * dy - (y2 - y4) * dx)); - d3 = nsvg__absf(((x3 - x4) * dy - (y3 - y4) * dx)); + d2 = nsvg__absf((x2 - x4) * dy - (y2 - y4) * dx); + d3 = nsvg__absf((x3 - x4) * dy - (y3 - y4) * dx); if ((d2 + d3)*(d2 + d3) < r->tessTol * (dx*dx + dy*dy)) { nsvg__addPathPoint(r, x4, y4, type); @@ -776,7 +779,7 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float nsvg__duplicatePoints(r); r->npoints = 0; - cur = r->points2[0]; + cur = r->points2[0]; nsvg__appendPathPoint(r, cur); // Figure out dash offset. @@ -854,7 +857,7 @@ static int nsvg__cmpEdge(const void *p, const void *q) static NSVGactiveEdge* nsvg__addActive(NSVGrasterizer* r, NSVGedge* e, float startPoint) { - NSVGactiveEdge* z; + NSVGactiveEdge* z; if (r->freelist != NULL) { // Restore from freelist. @@ -870,10 +873,10 @@ static NSVGactiveEdge* nsvg__addActive(NSVGrasterizer* r, NSVGedge* e, float sta // STBTT_assert(e->y0 <= start_point); // round dx down to avoid going too far if (dxdy < 0) - z->dx = (int)(-floorf(NSVG__FIX * -dxdy)); + z->dx = (int)(-nsvg__roundf(NSVG__FIX * -dxdy)); else - z->dx = (int)floorf(NSVG__FIX * dxdy); - z->x = (int)floorf(NSVG__FIX * (e->x0 + dxdy * (startPoint - e->y0))); + z->dx = (int)nsvg__roundf(NSVG__FIX * dxdy); + z->x = (int)nsvg__roundf(NSVG__FIX * (e->x0 + dxdy * (startPoint - e->y0))); // z->x -= off_x * FIX; z->ey = e->y1; z->next = 0; @@ -956,7 +959,7 @@ static float nsvg__clampf(float a, float mn, float mx) { return a < mn ? mn : (a static unsigned int nsvg__RGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a) { - return (r) | (g << 8) | (b << 16) | (a << 24); + return ((unsigned int)r) | ((unsigned int)g << 8) | ((unsigned int)b << 16) | ((unsigned int)a << 24); } static unsigned int nsvg__lerpRGBA(unsigned int c0, unsigned int c1, float u) @@ -981,7 +984,7 @@ static unsigned int nsvg__applyOpacity(unsigned int c, float u) static inline int nsvg__div255(int x) { - return ((x+1) * 257) >> 16; + return ((x+1) * 257) >> 16; } static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* cover, int x, int y, @@ -1280,9 +1283,10 @@ static void nsvg__initPaint(NSVGcachedPaint* cache, NSVGpaint* paint, float opac if (grad->nstops == 0) { for (i = 0; i < 256; i++) cache->colors[i] = 0; - } if (grad->nstops == 1) { + } else if (grad->nstops == 1) { + unsigned int color = nsvg__applyOpacity(grad->stops[0].color, opacity); for (i = 0; i < 256; i++) - cache->colors[i] = nsvg__applyOpacity(grad->stops[i].color, opacity); + cache->colors[i] = color; } else { unsigned int ca, cb = 0; float ua, ub, du, u; @@ -1406,7 +1410,8 @@ void nsvgRasterize(NSVGrasterizer* r, } // Rasterize edges - qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); + if (r->nedges != 0) + qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule nsvg__initPaint(&cache, &shape->fill, shape->opacity); @@ -1432,7 +1437,8 @@ void nsvgRasterize(NSVGrasterizer* r, } // Rasterize edges - qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); + if (r->nedges != 0) + qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule nsvg__initPaint(&cache, &shape->stroke, shape->opacity); @@ -1449,4 +1455,6 @@ void nsvgRasterize(NSVGrasterizer* r, r->stride = 0; } -#endif +#endif // NANOSVGRAST_IMPLEMENTATION + +#endif // NANOSVGRAST_H diff --git a/external/nanosvg/src/nanosvg_impl.cpp b/external/nanosvg/src/nanosvg_impl.cpp index 995d3372c6..a114909613 100644 --- a/external/nanosvg/src/nanosvg_impl.cpp +++ b/external/nanosvg/src/nanosvg_impl.cpp @@ -1,6 +1,5 @@ #define NANOSVG_IMPLEMENTATION #define NANOSVGRAST_IMPLEMENTATION +#define NANOSVG_ALL_COLOR_KEYWORDS // Include full list of color keywords. -#include -#include "nanosvg.h" #include "nanosvgrast.h" From 90d861b12be40c0b532365b96c6605ad8d0dbf19 Mon Sep 17 00:00:00 2001 From: Tomas Jakobsson Date: Sun, 26 Oct 2025 01:28:13 +0200 Subject: [PATCH 603/603] Add support for scroll sounds to SystemView and ImageGridComponent --- es-app/src/views/SystemView.cpp | 2 ++ es-app/src/views/SystemView.h | 3 +++ es-core/src/ThemeData.cpp | 6 ++++-- es-core/src/components/ImageGridComponent.h | 6 ++++++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index d01c432b27..03b56bb35a 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -680,6 +680,8 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) else mCarousel.logoAlignment = ALIGN_CENTER; } + if (elem->has("scrollSound")) + mScrollSound = elem->get("scrollSound"); } void SystemView::onShow() diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index 85b0aca44f..abfe4592e1 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -6,6 +6,7 @@ #include "components/TextComponent.h" #include "resources/Font.h" #include "GuiComponent.h" +#include "Sound.h" #include class AnimatedImageComponent; @@ -63,6 +64,7 @@ class SystemView : public IList virtual HelpStyle getHelpStyle() override; protected: + void onScroll(int /*amt*/) override { if(!mScrollSound.empty()) Sound::get(mScrollSound)->play(); } void onCursorChanged(const CursorState& state) override; private: @@ -79,6 +81,7 @@ class SystemView : public IList SystemViewCarousel mCarousel; TextComponent mSystemInfo; + std::string mScrollSound; // unit is list index float mCamOffset; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index c223978352..4f299adce8 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -43,7 +43,8 @@ std::map> The { "centerSelection", BOOLEAN }, { "scrollLoop", BOOLEAN }, { "animate", BOOLEAN }, - { "zIndex", FLOAT } } }, + { "zIndex", FLOAT }, + { "scrollSound", PATH } } }, { "gridtile", { { "size", RESOLUTION_PAIR }, { "padding", RESOLUTION_PAIR }, @@ -169,7 +170,8 @@ std::map> The { "logoSize", NORMALIZED_PAIR }, { "logoAlignment", STRING }, { "maxLogoCount", FLOAT }, - { "zIndex", FLOAT } } } + { "zIndex", FLOAT }, + { "scrollSound", PATH } } } }; #define MINIMUM_THEME_FORMAT_VERSION 3 diff --git a/es-core/src/components/ImageGridComponent.h b/es-core/src/components/ImageGridComponent.h index c182346684..a6d8eef9b4 100644 --- a/es-core/src/components/ImageGridComponent.h +++ b/es-core/src/components/ImageGridComponent.h @@ -7,6 +7,7 @@ #include "components/IList.h" #include "resources/TextureResource.h" #include "GridTileComponent.h" +#include "Sound.h" #define EXTRAITEMS 2 @@ -63,6 +64,7 @@ class ImageGridComponent : public IList ImageSource getImageSource() { return mImageSource; }; protected: + virtual void onScroll(int /*amt*/) override { if(!mScrollSound.empty()) Sound::get(mScrollSound)->play(); } virtual void onCursorChanged(const CursorState& state) override; private: @@ -104,6 +106,7 @@ class ImageGridComponent : public IList bool mCenterSelection; bool mScrollLoop; ScrollDirection mScrollDirection; + std::string mScrollSound; ImageSource mImageSource; std::function mCursorChangedCallback; }; @@ -345,6 +348,9 @@ void ImageGridComponent::applyTheme(const std::shared_ptr& theme, } } } + + if (elem->has("scrollSound")) + mScrollSound = elem->get("scrollSound"); } // We still need to manually get the grid tile size here,